@streamr/dht 103.1.2-rc.0 → 103.2.0-experiment.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/dist/exports-browser.cjs +7636 -0
- package/dist/exports-browser.cjs.map +1 -0
- package/dist/exports-browser.d.ts +1321 -0
- package/dist/exports-browser.js +7611 -0
- package/dist/exports-browser.js.map +1 -0
- package/dist/exports-nodejs.cjs +7833 -0
- package/dist/exports-nodejs.cjs.map +1 -0
- package/dist/exports-nodejs.d.ts +1321 -0
- package/dist/exports-nodejs.js +7808 -0
- package/dist/exports-nodejs.js.map +1 -0
- package/package.json +41 -25
- package/dist/generated/google/protobuf/any.d.ts +0 -180
- package/dist/generated/google/protobuf/any.js +0 -155
- package/dist/generated/google/protobuf/any.js.map +0 -1
- package/dist/generated/google/protobuf/empty.d.ts +0 -31
- package/dist/generated/google/protobuf/empty.js +0 -45
- package/dist/generated/google/protobuf/empty.js.map +0 -1
- package/dist/generated/google/protobuf/timestamp.d.ts +0 -156
- package/dist/generated/google/protobuf/timestamp.js +0 -136
- package/dist/generated/google/protobuf/timestamp.js.map +0 -1
- package/dist/generated/packages/dht/protos/DhtRpc.client.d.ts +0 -371
- package/dist/generated/packages/dht/protos/DhtRpc.client.js +0 -292
- package/dist/generated/packages/dht/protos/DhtRpc.client.js.map +0 -1
- package/dist/generated/packages/dht/protos/DhtRpc.d.ts +0 -1031
- package/dist/generated/packages/dht/protos/DhtRpc.js +0 -702
- package/dist/generated/packages/dht/protos/DhtRpc.js.map +0 -1
- package/dist/generated/packages/dht/protos/DhtRpc.server.d.ts +0 -168
- package/dist/generated/packages/dht/protos/DhtRpc.server.js +0 -3
- package/dist/generated/packages/dht/protos/DhtRpc.server.js.map +0 -1
- package/dist/generated/packages/proto-rpc/protos/ProtoRpc.d.ts +0 -87
- package/dist/generated/packages/proto-rpc/protos/ProtoRpc.js +0 -66
- package/dist/generated/packages/proto-rpc/protos/ProtoRpc.js.map +0 -1
- package/dist/package.json +0 -61
- package/dist/src/connection/Connection.d.ts +0 -12
- package/dist/src/connection/Connection.js +0 -30
- package/dist/src/connection/Connection.js.map +0 -1
- package/dist/src/connection/ConnectionLockRpcLocal.d.ts +0 -22
- package/dist/src/connection/ConnectionLockRpcLocal.js +0 -54
- package/dist/src/connection/ConnectionLockRpcLocal.js.map +0 -1
- package/dist/src/connection/ConnectionLockRpcRemote.d.ts +0 -10
- package/dist/src/connection/ConnectionLockRpcRemote.js +0 -61
- package/dist/src/connection/ConnectionLockRpcRemote.js.map +0 -1
- package/dist/src/connection/ConnectionLockStates.d.ts +0 -27
- package/dist/src/connection/ConnectionLockStates.js +0 -114
- package/dist/src/connection/ConnectionLockStates.js.map +0 -1
- package/dist/src/connection/ConnectionManager.d.ts +0 -85
- package/dist/src/connection/ConnectionManager.js +0 -569
- package/dist/src/connection/ConnectionManager.js.map +0 -1
- package/dist/src/connection/ConnectionsView.d.ts +0 -7
- package/dist/src/connection/ConnectionsView.js +0 -3
- package/dist/src/connection/ConnectionsView.js.map +0 -1
- package/dist/src/connection/ConnectorFacade.d.ts +0 -58
- package/dist/src/connection/ConnectorFacade.js +0 -154
- package/dist/src/connection/ConnectorFacade.js.map +0 -1
- package/dist/src/connection/Handshaker.d.ts +0 -27
- package/dist/src/connection/Handshaker.js +0 -179
- package/dist/src/connection/Handshaker.js.map +0 -1
- package/dist/src/connection/IConnection.d.ts +0 -32
- package/dist/src/connection/IConnection.js +0 -12
- package/dist/src/connection/IConnection.js.map +0 -1
- package/dist/src/connection/ManagedConnection.d.ts +0 -30
- package/dist/src/connection/ManagedConnection.js +0 -129
- package/dist/src/connection/ManagedConnection.js.map +0 -1
- package/dist/src/connection/OutputBuffer.d.ts +0 -9
- package/dist/src/connection/OutputBuffer.js +0 -26
- package/dist/src/connection/OutputBuffer.js.map +0 -1
- package/dist/src/connection/PendingConnection.d.ts +0 -19
- package/dist/src/connection/PendingConnection.js +0 -59
- package/dist/src/connection/PendingConnection.js.map +0 -1
- package/dist/src/connection/connectivityChecker.d.ts +0 -9
- package/dist/src/connection/connectivityChecker.js +0 -138
- package/dist/src/connection/connectivityChecker.js.map +0 -1
- package/dist/src/connection/connectivityRequestHandler.d.ts +0 -4
- package/dist/src/connection/connectivityRequestHandler.js +0 -108
- package/dist/src/connection/connectivityRequestHandler.js.map +0 -1
- package/dist/src/connection/simulator/Simulator.d.ts +0 -36
- package/dist/src/connection/simulator/Simulator.js +0 -290
- package/dist/src/connection/simulator/Simulator.js.map +0 -1
- package/dist/src/connection/simulator/SimulatorConnection.d.ts +0 -18
- package/dist/src/connection/simulator/SimulatorConnection.js +0 -123
- package/dist/src/connection/simulator/SimulatorConnection.js.map +0 -1
- package/dist/src/connection/simulator/SimulatorConnector.d.ts +0 -16
- package/dist/src/connection/simulator/SimulatorConnector.js +0 -80
- package/dist/src/connection/simulator/SimulatorConnector.js.map +0 -1
- package/dist/src/connection/simulator/SimulatorTransport.d.ts +0 -6
- package/dist/src/connection/simulator/SimulatorTransport.js +0 -17
- package/dist/src/connection/simulator/SimulatorTransport.js.map +0 -1
- package/dist/src/connection/simulator/pings.d.ts +0 -21
- package/dist/src/connection/simulator/pings.js +0 -61
- package/dist/src/connection/simulator/pings.js.map +0 -1
- package/dist/src/connection/webrtc/BrowserWebrtcConnection.d.ts +0 -37
- package/dist/src/connection/webrtc/BrowserWebrtcConnection.js +0 -229
- package/dist/src/connection/webrtc/BrowserWebrtcConnection.js.map +0 -1
- package/dist/src/connection/webrtc/IWebrtcConnection.d.ts +0 -21
- package/dist/src/connection/webrtc/IWebrtcConnection.js +0 -9
- package/dist/src/connection/webrtc/IWebrtcConnection.js.map +0 -1
- package/dist/src/connection/webrtc/NodeWebrtcConnection.d.ts +0 -45
- package/dist/src/connection/webrtc/NodeWebrtcConnection.js +0 -229
- package/dist/src/connection/webrtc/NodeWebrtcConnection.js.map +0 -1
- package/dist/src/connection/webrtc/WebrtcConnector.d.ts +0 -43
- package/dist/src/connection/webrtc/WebrtcConnector.js +0 -208
- package/dist/src/connection/webrtc/WebrtcConnector.js.map +0 -1
- package/dist/src/connection/webrtc/WebrtcConnectorRpcLocal.d.ts +0 -26
- package/dist/src/connection/webrtc/WebrtcConnectorRpcLocal.js +0 -82
- package/dist/src/connection/webrtc/WebrtcConnectorRpcLocal.js.map +0 -1
- package/dist/src/connection/webrtc/WebrtcConnectorRpcRemote.d.ts +0 -8
- package/dist/src/connection/webrtc/WebrtcConnectorRpcRemote.js +0 -50
- package/dist/src/connection/webrtc/WebrtcConnectorRpcRemote.js.map +0 -1
- package/dist/src/connection/webrtc/iceServerAsString.d.ts +0 -2
- package/dist/src/connection/webrtc/iceServerAsString.js +0 -17
- package/dist/src/connection/webrtc/iceServerAsString.js.map +0 -1
- package/dist/src/connection/websocket/AbstractWebsocketClientConnection.d.ts +0 -27
- package/dist/src/connection/websocket/AbstractWebsocketClientConnection.js +0 -107
- package/dist/src/connection/websocket/AbstractWebsocketClientConnection.js.map +0 -1
- package/dist/src/connection/websocket/AutoCertifierClientFacade.d.ts +0 -26
- package/dist/src/connection/websocket/AutoCertifierClientFacade.js +0 -39
- package/dist/src/connection/websocket/AutoCertifierClientFacade.js.map +0 -1
- package/dist/src/connection/websocket/BrowserWebsocketClientConnection.d.ts +0 -7
- package/dist/src/connection/websocket/BrowserWebsocketClientConnection.js +0 -44
- package/dist/src/connection/websocket/BrowserWebsocketClientConnection.js.map +0 -1
- package/dist/src/connection/websocket/NodeWebsocketClientConnection.d.ts +0 -7
- package/dist/src/connection/websocket/NodeWebsocketClientConnection.js +0 -39
- package/dist/src/connection/websocket/NodeWebsocketClientConnection.js.map +0 -1
- package/dist/src/connection/websocket/WebsocketClientConnector.d.ts +0 -26
- package/dist/src/connection/websocket/WebsocketClientConnector.js +0 -86
- package/dist/src/connection/websocket/WebsocketClientConnector.js.map +0 -1
- package/dist/src/connection/websocket/WebsocketClientConnectorRpcLocal.d.ts +0 -18
- package/dist/src/connection/websocket/WebsocketClientConnectorRpcLocal.js +0 -23
- package/dist/src/connection/websocket/WebsocketClientConnectorRpcLocal.js.map +0 -1
- package/dist/src/connection/websocket/WebsocketClientConnectorRpcRemote.d.ts +0 -5
- package/dist/src/connection/websocket/WebsocketClientConnectorRpcRemote.js +0 -17
- package/dist/src/connection/websocket/WebsocketClientConnectorRpcRemote.js.map +0 -1
- package/dist/src/connection/websocket/WebsocketServer.d.ts +0 -25
- package/dist/src/connection/websocket/WebsocketServer.js +0 -146
- package/dist/src/connection/websocket/WebsocketServer.js.map +0 -1
- package/dist/src/connection/websocket/WebsocketServerConnection.d.ts +0 -22
- package/dist/src/connection/websocket/WebsocketServerConnection.js +0 -101
- package/dist/src/connection/websocket/WebsocketServerConnection.js.map +0 -1
- package/dist/src/connection/websocket/WebsocketServerConnector.d.ts +0 -44
- package/dist/src/connection/websocket/WebsocketServerConnector.js +0 -279
- package/dist/src/connection/websocket/WebsocketServerConnector.js.map +0 -1
- package/dist/src/dht/DhtNode.d.ts +0 -119
- package/dist/src/dht/DhtNode.js +0 -500
- package/dist/src/dht/DhtNode.js.map +0 -1
- package/dist/src/dht/DhtNodeRpcLocal.d.ts +0 -23
- package/dist/src/dht/DhtNodeRpcLocal.js +0 -54
- package/dist/src/dht/DhtNodeRpcLocal.js.map +0 -1
- package/dist/src/dht/DhtNodeRpcRemote.d.ts +0 -25
- package/dist/src/dht/DhtNodeRpcRemote.js +0 -83
- package/dist/src/dht/DhtNodeRpcRemote.js.map +0 -1
- package/dist/src/dht/ExternalApiRpcLocal.d.ts +0 -18
- package/dist/src/dht/ExternalApiRpcLocal.js +0 -32
- package/dist/src/dht/ExternalApiRpcLocal.js.map +0 -1
- package/dist/src/dht/ExternalApiRpcRemote.d.ts +0 -10
- package/dist/src/dht/ExternalApiRpcRemote.js +0 -58
- package/dist/src/dht/ExternalApiRpcRemote.js.map +0 -1
- package/dist/src/dht/PeerManager.d.ts +0 -63
- package/dist/src/dht/PeerManager.js +0 -251
- package/dist/src/dht/PeerManager.js.map +0 -1
- package/dist/src/dht/contact/Contact.d.ts +0 -8
- package/dist/src/dht/contact/Contact.js +0 -18
- package/dist/src/dht/contact/Contact.js.map +0 -1
- package/dist/src/dht/contact/ContactList.d.ts +0 -19
- package/dist/src/dht/contact/ContactList.js +0 -35
- package/dist/src/dht/contact/ContactList.js.map +0 -1
- package/dist/src/dht/contact/RandomContactList.d.ts +0 -11
- package/dist/src/dht/contact/RandomContactList.js +0 -47
- package/dist/src/dht/contact/RandomContactList.js.map +0 -1
- package/dist/src/dht/contact/RingContactList.d.ts +0 -28
- package/dist/src/dht/contact/RingContactList.js +0 -126
- package/dist/src/dht/contact/RingContactList.js.map +0 -1
- package/dist/src/dht/contact/RpcRemote.d.ts +0 -19
- package/dist/src/dht/contact/RpcRemote.js +0 -61
- package/dist/src/dht/contact/RpcRemote.js.map +0 -1
- package/dist/src/dht/contact/SortedContactList.d.ts +0 -37
- package/dist/src/dht/contact/SortedContactList.js +0 -134
- package/dist/src/dht/contact/SortedContactList.js.map +0 -1
- package/dist/src/dht/contact/getClosestNodes.d.ts +0 -6
- package/dist/src/dht/contact/getClosestNodes.js +0 -19
- package/dist/src/dht/contact/getClosestNodes.js.map +0 -1
- package/dist/src/dht/contact/ringIdentifiers.d.ts +0 -16
- package/dist/src/dht/contact/ringIdentifiers.js +0 -54
- package/dist/src/dht/contact/ringIdentifiers.js.map +0 -1
- package/dist/src/dht/discovery/DiscoverySession.d.ts +0 -29
- package/dist/src/dht/discovery/DiscoverySession.js +0 -102
- package/dist/src/dht/discovery/DiscoverySession.js.map +0 -1
- package/dist/src/dht/discovery/PeerDiscovery.d.ts +0 -42
- package/dist/src/dht/discovery/PeerDiscovery.js +0 -193
- package/dist/src/dht/discovery/PeerDiscovery.js.map +0 -1
- package/dist/src/dht/discovery/RingDiscoverySession.d.ts +0 -28
- package/dist/src/dht/discovery/RingDiscoverySession.js +0 -116
- package/dist/src/dht/discovery/RingDiscoverySession.js.map +0 -1
- package/dist/src/dht/recursive-operation/RecursiveOperationManager.d.ts +0 -38
- package/dist/src/dht/recursive-operation/RecursiveOperationManager.js +0 -165
- package/dist/src/dht/recursive-operation/RecursiveOperationManager.js.map +0 -1
- package/dist/src/dht/recursive-operation/RecursiveOperationRpcLocal.d.ts +0 -14
- package/dist/src/dht/recursive-operation/RecursiveOperationRpcLocal.js +0 -26
- package/dist/src/dht/recursive-operation/RecursiveOperationRpcLocal.js.map +0 -1
- package/dist/src/dht/recursive-operation/RecursiveOperationRpcRemote.d.ts +0 -6
- package/dist/src/dht/recursive-operation/RecursiveOperationRpcRemote.js +0 -44
- package/dist/src/dht/recursive-operation/RecursiveOperationRpcRemote.js.map +0 -1
- package/dist/src/dht/recursive-operation/RecursiveOperationSession.d.ts +0 -45
- package/dist/src/dht/recursive-operation/RecursiveOperationSession.js +0 -185
- package/dist/src/dht/recursive-operation/RecursiveOperationSession.js.map +0 -1
- package/dist/src/dht/recursive-operation/RecursiveOperationSessionRpcLocal.d.ts +0 -14
- package/dist/src/dht/recursive-operation/RecursiveOperationSessionRpcLocal.js +0 -20
- package/dist/src/dht/recursive-operation/RecursiveOperationSessionRpcLocal.js.map +0 -1
- package/dist/src/dht/recursive-operation/RecursiveOperationSessionRpcRemote.d.ts +0 -6
- package/dist/src/dht/recursive-operation/RecursiveOperationSessionRpcRemote.js +0 -21
- package/dist/src/dht/recursive-operation/RecursiveOperationSessionRpcRemote.js.map +0 -1
- package/dist/src/dht/routing/DuplicateDetector.d.ts +0 -10
- package/dist/src/dht/routing/DuplicateDetector.js +0 -31
- package/dist/src/dht/routing/DuplicateDetector.js.map +0 -1
- package/dist/src/dht/routing/Router.d.ts +0 -35
- package/dist/src/dht/routing/Router.js +0 -204
- package/dist/src/dht/routing/Router.js.map +0 -1
- package/dist/src/dht/routing/RouterRpcLocal.d.ts +0 -20
- package/dist/src/dht/routing/RouterRpcLocal.js +0 -67
- package/dist/src/dht/routing/RouterRpcLocal.js.map +0 -1
- package/dist/src/dht/routing/RouterRpcRemote.d.ts +0 -8
- package/dist/src/dht/routing/RouterRpcRemote.js +0 -81
- package/dist/src/dht/routing/RouterRpcRemote.js.map +0 -1
- package/dist/src/dht/routing/RoutingSession.d.ts +0 -56
- package/dist/src/dht/routing/RoutingSession.js +0 -201
- package/dist/src/dht/routing/RoutingSession.js.map +0 -1
- package/dist/src/dht/routing/RoutingTablesCache.d.ts +0 -24
- package/dist/src/dht/routing/RoutingTablesCache.js +0 -46
- package/dist/src/dht/routing/RoutingTablesCache.js.map +0 -1
- package/dist/src/dht/routing/getPreviousPeer.d.ts +0 -2
- package/dist/src/dht/routing/getPreviousPeer.js +0 -12
- package/dist/src/dht/routing/getPreviousPeer.js.map +0 -1
- package/dist/src/dht/store/LocalDataStore.d.ts +0 -14
- package/dist/src/dht/store/LocalDataStore.js +0 -78
- package/dist/src/dht/store/LocalDataStore.js.map +0 -1
- package/dist/src/dht/store/StoreManager.d.ts +0 -32
- package/dist/src/dht/store/StoreManager.js +0 -126
- package/dist/src/dht/store/StoreManager.js.map +0 -1
- package/dist/src/dht/store/StoreRpcLocal.d.ts +0 -21
- package/dist/src/dht/store/StoreRpcLocal.js +0 -65
- package/dist/src/dht/store/StoreRpcLocal.js.map +0 -1
- package/dist/src/dht/store/StoreRpcRemote.d.ts +0 -7
- package/dist/src/dht/store/StoreRpcRemote.js +0 -29
- package/dist/src/dht/store/StoreRpcRemote.js.map +0 -1
- package/dist/src/exports.d.ts +0 -25
- package/dist/src/exports.js +0 -48
- package/dist/src/exports.js.map +0 -1
- package/dist/src/helpers/AddressTools.d.ts +0 -2
- package/dist/src/helpers/AddressTools.js +0 -32
- package/dist/src/helpers/AddressTools.js.map +0 -1
- package/dist/src/helpers/Connectivity.d.ts +0 -4
- package/dist/src/helpers/Connectivity.js +0 -24
- package/dist/src/helpers/Connectivity.js.map +0 -1
- package/dist/src/helpers/browser/isBrowserEnvironment.d.ts +0 -1
- package/dist/src/helpers/browser/isBrowserEnvironment.js +0 -6
- package/dist/src/helpers/browser/isBrowserEnvironment.js.map +0 -1
- package/dist/src/helpers/browser/isBrowserEnvironment_override.d.ts +0 -1
- package/dist/src/helpers/browser/isBrowserEnvironment_override.js +0 -7
- package/dist/src/helpers/browser/isBrowserEnvironment_override.js.map +0 -1
- package/dist/src/helpers/createPeerDescriptor.d.ts +0 -3
- package/dist/src/helpers/createPeerDescriptor.js +0 -58
- package/dist/src/helpers/createPeerDescriptor.js.map +0 -1
- package/dist/src/helpers/createPeerDescriptorSignaturePayload.d.ts +0 -2
- package/dist/src/helpers/createPeerDescriptorSignaturePayload.js +0 -30
- package/dist/src/helpers/createPeerDescriptorSignaturePayload.js.map +0 -1
- package/dist/src/helpers/debugHelpers.d.ts +0 -3
- package/dist/src/helpers/debugHelpers.js +0 -11
- package/dist/src/helpers/debugHelpers.js.map +0 -1
- package/dist/src/helpers/errors.d.ts +0 -72
- package/dist/src/helpers/errors.js +0 -97
- package/dist/src/helpers/errors.js.map +0 -1
- package/dist/src/helpers/offering.d.ts +0 -4
- package/dist/src/helpers/offering.js +0 -18
- package/dist/src/helpers/offering.js.map +0 -1
- package/dist/src/helpers/protoClasses.d.ts +0 -2
- package/dist/src/helpers/protoClasses.js +0 -32
- package/dist/src/helpers/protoClasses.js.map +0 -1
- package/dist/src/helpers/protoToString.d.ts +0 -2
- package/dist/src/helpers/protoToString.js +0 -19
- package/dist/src/helpers/protoToString.js.map +0 -1
- package/dist/src/helpers/version.d.ts +0 -6
- package/dist/src/helpers/version.js +0 -38
- package/dist/src/helpers/version.js.map +0 -1
- package/dist/src/identifiers.d.ts +0 -10
- package/dist/src/identifiers.js +0 -31
- package/dist/src/identifiers.js.map +0 -1
- package/dist/src/rpc-protocol/DhtCallContext.d.ts +0 -12
- package/dist/src/rpc-protocol/DhtCallContext.js +0 -17
- package/dist/src/rpc-protocol/DhtCallContext.js.map +0 -1
- package/dist/src/rpc-protocol/DhtRpcOptions.d.ts +0 -10
- package/dist/src/rpc-protocol/DhtRpcOptions.js +0 -3
- package/dist/src/rpc-protocol/DhtRpcOptions.js.map +0 -1
- package/dist/src/transport/ITransport.d.ts +0 -31
- package/dist/src/transport/ITransport.js +0 -9
- package/dist/src/transport/ITransport.js.map +0 -1
- package/dist/src/transport/ListeningRpcCommunicator.d.ts +0 -11
- package/dist/src/transport/ListeningRpcCommunicator.js +0 -31
- package/dist/src/transport/ListeningRpcCommunicator.js.map +0 -1
- package/dist/src/transport/RoutingRpcCommunicator.d.ts +0 -10
- package/dist/src/transport/RoutingRpcCommunicator.js +0 -60
- package/dist/src/transport/RoutingRpcCommunicator.js.map +0 -1
- package/dist/src/types/ServiceID.d.ts +0 -1
- package/dist/src/types/ServiceID.js +0 -3
- package/dist/src/types/ServiceID.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exports-browser.cjs","sources":["browser/src/dht/helpers/getPeerDistance.js","browser/src/identifiers.js","browser/src/dht/contact/SortedContactList.js","browser/src/dht/routing/DuplicateDetector.js","browser/src/helpers/errors.js","browser/generated/google/protobuf/empty.js","browser/generated/google/protobuf/any.js","browser/generated/packages/proto-rpc/protos/ProtoRpc.js","browser/generated/google/protobuf/timestamp.js","browser/generated/packages/dht/protos/DhtRpc.js","browser/generated/packages/dht/protos/DhtRpc.client.js","browser/src/transport/ITransport.js","browser/src/rpc-protocol/DhtCallContext.js","browser/src/transport/RoutingRpcCommunicator.js","browser/src/connection/ConnectionLockStates.js","browser/src/connection/helpers/getNodeIdOrUnknownFromPeerDescriptor.js","browser/src/connection/Connection.js","browser/src/connection/ManagedConnection.js","browser/src/connection/IConnection.js","browser/src/helpers/AddressTools.js","browser/src/helpers/Connectivity.js","browser/src/dht/contact/RpcRemote.js","browser/src/connection/ConnectionLockRpcRemote.js","browser/src/connection/ConnectionLockRpcLocal.js","browser/src/helpers/offering.js","browser/src/connection/OutputBuffer.js","browser/src/connection/ConnectionManager.js","browser/src/helpers/protoClasses.js","browser/src/helpers/protoToString.js","browser/src/connection/simulator/SimulatorConnection.js","browser/src/helpers/version.js","browser/src/connection/Handshaker.js","browser/src/connection/PendingConnection.js","browser/src/connection/simulator/SimulatorConnector.js","browser/src/transport/ListeningRpcCommunicator.js","browser/src/connection/webrtc/IWebrtcConnection.js","browser/src/connection/webrtc/consts.js","browser/src/browser/WebrtcConnection.js","browser/src/connection/webrtc/WebrtcConnectorRpcRemote.js","browser/src/connection/webrtc/WebrtcConnectorRpcLocal.js","browser/src/connection/webrtc/WebrtcConnector.js","browser/src/connection/websocket/AbstractWebsocketClientConnection.js","browser/src/browser/WebsocketClientConnection.js","browser/src/connection/websocket/WebsocketClientConnectorRpcLocal.js","browser/src/connection/websocket/WebsocketClientConnector.js","browser/src/browser/createGeoipLocator.js","browser/src/browser/WebsocketServer.js","browser/src/browser/defaultAutoCertifierClientFactory.js","browser/src/connection/websocket/AutoCertifierClientFacade.js","browser/src/connection/connectivityChecker.js","browser/src/connection/connectivityRequestHandler.js","browser/src/connection/websocket/WebsocketClientConnectorRpcRemote.js","browser/src/connection/websocket/WebsocketServerConnector.js","browser/src/connection/ConnectorFacade.js","browser/src/helpers/createPeerDescriptorSignaturePayload.js","browser/src/helpers/createPeerDescriptor.js","browser/src/dht/contact/Contact.js","browser/src/dht/contact/getClosestNodes.js","browser/src/dht/DhtNodeRpcLocal.js","browser/src/dht/DhtNodeRpcRemote.js","browser/src/dht/ExternalApiRpcLocal.js","browser/src/dht/ExternalApiRpcRemote.js","browser/src/dht/contact/ContactList.js","browser/src/dht/contact/RandomContactList.js","browser/src/dht/contact/ringIdentifiers.js","browser/src/dht/contact/RingContactList.js","browser/src/dht/PeerManager.js","browser/src/dht/discovery/DiscoverySession.js","browser/src/dht/discovery/RingDiscoverySession.js","browser/src/dht/consts.js","browser/src/dht/discovery/PeerDiscovery.js","browser/src/dht/routing/getPreviousPeer.js","browser/src/dht/routing/RouterRpcRemote.js","browser/src/dht/recursive-operation/RecursiveOperationRpcRemote.js","browser/src/dht/routing/RoutingSession.js","browser/src/dht/recursive-operation/RecursiveOperationSessionRpcRemote.js","browser/src/dht/recursive-operation/RecursiveOperationSessionRpcLocal.js","browser/src/dht/recursive-operation/RecursiveOperationSession.js","browser/src/dht/routing/RouterRpcLocal.js","browser/src/dht/recursive-operation/RecursiveOperationRpcLocal.js","browser/src/dht/recursive-operation/RecursiveOperationManager.js","browser/src/dht/routing/RoutingTablesCache.js","browser/src/dht/routing/Router.js","browser/src/dht/store/LocalDataStore.js","browser/src/dht/store/StoreRpcLocal.js","browser/src/dht/store/StoreManager.js","browser/src/dht/store/StoreRpcRemote.js","browser/src/dht/DhtNode.js","browser/src/connection/simulator/pings.js","browser/src/connection/simulator/Simulator.js","browser/src/connection/simulator/SimulatorTransport.js"],"sourcesContent":["import KBucket from 'k-bucket';\nexport const getPeerDistance = (nodeIdOrDataKeyRaw1, nodeIdOrDataKeyRaw2) => {\n return KBucket.distance(nodeIdOrDataKeyRaw1, nodeIdOrDataKeyRaw2);\n};\n","import { areEqualBinaries, binaryToHex, hexToBinary, randomBytes } from '@streamr/utils';\n// https://www.scs.stanford.edu/~dm/home/papers/kpos.pdf\nexport const KADEMLIA_ID_LENGTH_IN_BYTES = 20;\nexport const toDhtAddress = (raw) => {\n return binaryToHex(raw);\n};\nexport const toDhtAddressRaw = (address) => {\n return hexToBinary(address);\n};\nexport const toNodeId = (peerDescriptor) => {\n return toDhtAddress(peerDescriptor.nodeId);\n};\nexport const areEqualPeerDescriptors = (peerDescriptor1, peerDescriptor2) => {\n return areEqualBinaries(peerDescriptor1.nodeId, peerDescriptor2.nodeId);\n};\nexport const randomDhtAddress = () => {\n return toDhtAddress(randomBytes(KADEMLIA_ID_LENGTH_IN_BYTES));\n};\n","import sortedIndexBy from 'lodash/sortedIndexBy';\nimport { EventEmitter } from 'eventemitter3';\nimport { getPeerDistance } from '../helpers/getPeerDistance';\nimport { toDhtAddressRaw } from '../../identifiers';\nexport class SortedContactList extends EventEmitter {\n options;\n contactsById = new Map();\n contactIds = [];\n constructor(options) {\n super();\n this.options = options;\n this.compareIds = this.compareIds.bind(this);\n }\n getClosestContactId() {\n return this.contactIds[0];\n }\n getContactIds() {\n return this.contactIds;\n }\n addContact(contact) {\n const contactId = contact.getNodeId();\n if (this.options.excludedNodeIds?.has(contactId)) {\n return;\n }\n if ((!this.options.allowToContainReferenceId && (this.options.referenceId === contactId)) ||\n (this.options.nodeIdDistanceLimit !== undefined && this.compareIds(this.options.nodeIdDistanceLimit, contactId) < 0)) {\n return;\n }\n if (!this.contactsById.has(contactId)) {\n if ((this.options.maxSize === undefined) || (this.contactIds.length < this.options.maxSize)) {\n this.contactsById.set(contactId, contact);\n const index = sortedIndexBy(this.contactIds, contactId, (id) => { return this.distanceToReferenceId(id); });\n this.contactIds.splice(index, 0, contactId);\n if (this.hasEventListeners()) {\n this.emit('contactAdded', contact);\n }\n }\n else if (this.compareIds(this.contactIds[this.options.maxSize - 1], contactId) > 0) {\n const removedId = this.contactIds.pop();\n const removedContact = this.contactsById.get(removedId);\n this.contactsById.delete(removedId);\n this.contactsById.set(contactId, contact);\n const index = sortedIndexBy(this.contactIds, contactId, (id) => { return this.distanceToReferenceId(id); });\n this.contactIds.splice(index, 0, contactId);\n if (this.hasEventListeners()) {\n this.emit('contactRemoved', removedContact);\n this.emit('contactAdded', contact);\n }\n }\n }\n }\n addContacts(contacts) {\n contacts.forEach((contact) => this.addContact(contact));\n }\n getContact(id) {\n return this.contactsById.get(id);\n }\n has(id) {\n return this.contactsById.has(id);\n }\n /*\n * Closest first then others in ascending distance order\n */\n getClosestContacts(limit) {\n const limitedContactIds = (limit === undefined) ? this.contactIds : this.contactIds.slice(0, Math.max(limit, 0));\n return limitedContactIds.map((nodeId) => this.contactsById.get(nodeId));\n }\n /*\n * Furthest first then others in descending distance order\n */\n getFurthestContacts(limit) {\n const ret = [...this.getClosestContacts()].reverse();\n return (limit === undefined)\n ? ret\n : ret.slice(0, Math.max(limit, 0));\n }\n compareIds(id1, id2) {\n const distance1 = this.distanceToReferenceId(id1);\n const distance2 = this.distanceToReferenceId(id2);\n return distance1 - distance2;\n }\n // TODO inline this method?\n distanceToReferenceId(id) {\n // TODO maybe this class should store the referenceId also as DhtAddressRaw so that we don't need to convert it here?\n return getPeerDistance(toDhtAddressRaw(this.options.referenceId), toDhtAddressRaw(id));\n }\n removeContact(id) {\n if (this.contactsById.has(id)) {\n const removed = this.contactsById.get(id);\n // TODO use sortedIndexBy?\n const index = this.contactIds.findIndex((nodeId) => (nodeId === id));\n this.contactIds.splice(index, 1);\n this.contactsById.delete(id);\n if (this.hasEventListeners()) {\n this.emit('contactRemoved', removed);\n }\n return true;\n }\n return false;\n }\n getAllContactsInUndefinedOrder() {\n return this.contactsById.values();\n }\n getSize(excludedNodeIds) {\n let excludedCount = 0;\n if (excludedNodeIds !== undefined) {\n for (const nodeId of excludedNodeIds) {\n if (this.has(nodeId)) {\n excludedCount++;\n }\n }\n }\n return this.contactIds.length - excludedCount;\n }\n clear() {\n this.contactsById.clear();\n this.contactIds = [];\n }\n stop() {\n this.removeAllListeners();\n this.clear();\n }\n hasEventListeners() {\n return this.eventNames().length > 0;\n }\n}\n","export class DuplicateDetector {\n values = new Set();\n queue = [];\n maxItemCount;\n constructor(maxItemCount) {\n this.maxItemCount = maxItemCount;\n }\n add(value) {\n this.values.add(value);\n this.queue.push(value);\n if (this.queue.length > this.maxItemCount) {\n const removed = this.queue.shift();\n this.values.delete(removed);\n }\n }\n isMostLikelyDuplicate(value) {\n return this.values.has(value);\n }\n size() {\n return this.values.size;\n }\n clear() {\n this.values.clear();\n this.queue = [];\n }\n}\n","/* eslint-disable max-len */\nexport var ErrorCode;\n(function (ErrorCode) {\n ErrorCode[\"CONNECTION_FAILED\"] = \"CONNECTION_FAILED\";\n ErrorCode[\"COULD_NOT_ROUTE\"] = \"COULD_NOT_ROUTE\";\n ErrorCode[\"STARTING_WEBSOCKET_SERVER_FAILED\"] = \"STARTING_WEBSOCKET_SERVER_FAILED\";\n ErrorCode[\"WEBSOCKET_CONNECTION_REQUEST_REJECTED\"] = \"WEBSOCKET_CONNECTION_REQUEST_REJECTED\";\n ErrorCode[\"COULD_NOT_START\"] = \"COULD_NOT_START\";\n ErrorCode[\"COULD_NOT_STOP\"] = \"COULD_NOT_STOP\";\n ErrorCode[\"CANNOT_CONNECT_TO_SELF\"] = \"CANNOT_CONNECT_TO_SELF\";\n ErrorCode[\"NOT_IMPLEMENTED\"] = \"NOT_IMPLEMENTED\";\n ErrorCode[\"ILLEGAL_RTC_PEER_CONNECTION_STATE\"] = \"ILLEGAL_RTC_PEER_CONNECTION_STATE\";\n ErrorCode[\"ILLEGAL_ARGUMENTS\"] = \"ILLEGAL_ARGUMENTS\";\n ErrorCode[\"CONNECTIVITY_RESPONSE_NOT_RECEIVED_BEFORE_TIMEOUT\"] = \"CONNECTIVITY_RESPONSE_NOT_RECEIVED_BEFORE_TIMEOUT\";\n ErrorCode[\"CONNECTION_LOCKER\"] = \"CONNECTION_LOCKER\";\n ErrorCode[\"DHT_JOIN_TIMEOUT\"] = \"DHT_JOIN_TIMEOUT\";\n ErrorCode[\"SEND_FAILED\"] = \"SEND_FAILED\";\n ErrorCode[\"GETTING_DATA_FAILED\"] = \"GETTING_DATA_FAILED\";\n ErrorCode[\"CONNECTION_NOT_OPEN\"] = \"CONNECTION_NOT_OPEN\";\n})(ErrorCode || (ErrorCode = {}));\nclass Err extends Error {\n code;\n originalError;\n constructor(code, message, originalError) {\n super(message);\n this.code = code;\n this.originalError = originalError;\n }\n}\nexport class ConnectionFailed extends Err {\n constructor(message, originalError) { super(ErrorCode.CONNECTION_FAILED, message, originalError); }\n}\nexport class CouldNotRoute extends Err {\n constructor(message, originalError) { super(ErrorCode.COULD_NOT_ROUTE, message, originalError); }\n}\nexport class WebsocketServerStartError extends Err {\n constructor(message, originalError) { super(ErrorCode.STARTING_WEBSOCKET_SERVER_FAILED, message, originalError); }\n}\nexport class WebsocketConnectionRequestRejected extends Err {\n constructor(message, originalError) { super(ErrorCode.WEBSOCKET_CONNECTION_REQUEST_REJECTED, message, originalError); }\n}\nexport class CouldNotStart extends Err {\n constructor(message, originalError) { super(ErrorCode.COULD_NOT_START, message, originalError); }\n}\nexport class CouldNotStop extends Err {\n constructor(message, originalError) { super(ErrorCode.COULD_NOT_STOP, message, originalError); }\n}\nexport class CannotConnectToSelf extends Err {\n constructor(message, originalError) { super(ErrorCode.CANNOT_CONNECT_TO_SELF, message, originalError); }\n}\nexport class NotImplemented extends Err {\n constructor(message, originalError) { super(ErrorCode.NOT_IMPLEMENTED, message, originalError); }\n}\nexport class IllegalRtcPeerConnectionState extends Err {\n constructor(message, originalError) { super(ErrorCode.ILLEGAL_RTC_PEER_CONNECTION_STATE, message, originalError); }\n}\nexport class IllegalArguments extends Err {\n constructor(message, originalError) { super(ErrorCode.ILLEGAL_ARGUMENTS, message, originalError); }\n}\nexport class ConnectivityResponseTimeout extends Err {\n constructor(message, originalError) { super(ErrorCode.CONNECTIVITY_RESPONSE_NOT_RECEIVED_BEFORE_TIMEOUT, message, originalError); }\n}\nexport class ConnectionLocker extends Err {\n constructor(message, originalError) { super(ErrorCode.CONNECTION_LOCKER, message, originalError); }\n}\nexport class DhtJoinTimeout extends Err {\n constructor(message, originalError) { super(ErrorCode.DHT_JOIN_TIMEOUT, message, originalError); }\n}\nexport class SendFailed extends Err {\n constructor(message, originalError) { super(ErrorCode.SEND_FAILED, message, originalError); }\n}\nexport class GettingDataFailed extends Err {\n constructor(message, originalError) { super(ErrorCode.GETTING_DATA_FAILED, message, originalError); }\n}\nexport class ConnectionNotOpen extends Err {\n constructor(message, originalError) { super(ErrorCode.CONNECTION_NOT_OPEN, message, originalError); }\n}\n","import { UnknownFieldHandler } from \"@protobuf-ts/runtime\";\nimport { reflectionMergePartial } from \"@protobuf-ts/runtime\";\nimport { MessageType } from \"@protobuf-ts/runtime\";\n// @generated message type with reflection information, may provide speed optimized methods\nclass Empty$Type extends MessageType {\n constructor() {\n super(\"google.protobuf.Empty\", []);\n }\n create(value) {\n const message = globalThis.Object.create((this.messagePrototype));\n if (value !== undefined)\n reflectionMergePartial(this, message, value);\n return message;\n }\n internalBinaryRead(reader, length, options, target) {\n let message = target ?? this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message, writer, options) {\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message google.protobuf.Empty\n */\nexport const Empty = new Empty$Type();\n","import { WireType } from \"@protobuf-ts/runtime\";\nimport { UnknownFieldHandler } from \"@protobuf-ts/runtime\";\nimport { reflectionMergePartial } from \"@protobuf-ts/runtime\";\nimport { isJsonObject } from \"@protobuf-ts/runtime\";\nimport { typeofJsonValue } from \"@protobuf-ts/runtime\";\nimport { jsonWriteOptions } from \"@protobuf-ts/runtime\";\nimport { MessageType } from \"@protobuf-ts/runtime\";\n// @generated message type with reflection information, may provide speed optimized methods\nclass Any$Type extends MessageType {\n constructor() {\n super(\"google.protobuf.Any\", [\n { no: 1, name: \"type_url\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 2, name: \"value\", kind: \"scalar\", T: 12 /*ScalarType.BYTES*/ }\n ]);\n }\n /**\n * Pack the message into a new `Any`.\n *\n * Uses 'type.googleapis.com/full.type.name' as the type URL.\n */\n pack(message, type) {\n return {\n typeUrl: this.typeNameToUrl(type.typeName), value: type.toBinary(message),\n };\n }\n /**\n * Unpack the message from the `Any`.\n */\n unpack(any, type, options) {\n if (!this.contains(any, type))\n throw new Error(\"Cannot unpack google.protobuf.Any with typeUrl '\" + any.typeUrl + \"' as \" + type.typeName + \".\");\n return type.fromBinary(any.value, options);\n }\n /**\n * Does the given `Any` contain a packed message of the given type?\n */\n contains(any, type) {\n if (!any.typeUrl.length)\n return false;\n let wants = typeof type == \"string\" ? type : type.typeName;\n let has = this.typeUrlToName(any.typeUrl);\n return wants === has;\n }\n /**\n * Convert the message to canonical JSON value.\n *\n * You have to provide the `typeRegistry` option so that the\n * packed message can be converted to JSON.\n *\n * The `typeRegistry` option is also required to read\n * `google.protobuf.Any` from JSON format.\n */\n internalJsonWrite(any, options) {\n if (any.typeUrl === \"\")\n return {};\n let typeName = this.typeUrlToName(any.typeUrl);\n let opt = jsonWriteOptions(options);\n let type = opt.typeRegistry?.find(t => t.typeName === typeName);\n if (!type)\n throw new globalThis.Error(\"Unable to convert google.protobuf.Any with typeUrl '\" + any.typeUrl + \"' to JSON. The specified type \" + typeName + \" is not available in the type registry.\");\n let value = type.fromBinary(any.value, { readUnknownField: false });\n let json = type.internalJsonWrite(value, opt);\n if (typeName.startsWith(\"google.protobuf.\") || !isJsonObject(json))\n json = { value: json };\n json[\"@type\"] = any.typeUrl;\n return json;\n }\n internalJsonRead(json, options, target) {\n if (!isJsonObject(json))\n throw new globalThis.Error(\"Unable to parse google.protobuf.Any from JSON \" + typeofJsonValue(json) + \".\");\n if (typeof json[\"@type\"] != \"string\" || json[\"@type\"] == \"\")\n return this.create();\n let typeName = this.typeUrlToName(json[\"@type\"]);\n let type = options?.typeRegistry?.find(t => t.typeName == typeName);\n if (!type)\n throw new globalThis.Error(\"Unable to parse google.protobuf.Any from JSON. The specified type \" + typeName + \" is not available in the type registry.\");\n let value;\n if (typeName.startsWith(\"google.protobuf.\") && json.hasOwnProperty(\"value\"))\n value = type.fromJson(json[\"value\"], options);\n else {\n let copy = Object.assign({}, json);\n delete copy[\"@type\"];\n value = type.fromJson(copy, options);\n }\n if (target === undefined)\n target = this.create();\n target.typeUrl = json[\"@type\"];\n target.value = type.toBinary(value);\n return target;\n }\n typeNameToUrl(name) {\n if (!name.length)\n throw new Error(\"invalid type name: \" + name);\n return \"type.googleapis.com/\" + name;\n }\n typeUrlToName(url) {\n if (!url.length)\n throw new Error(\"invalid type url: \" + url);\n let slash = url.lastIndexOf(\"/\");\n let name = slash > 0 ? url.substring(slash + 1) : url;\n if (!name.length)\n throw new Error(\"invalid type url: \" + url);\n return name;\n }\n create(value) {\n const message = globalThis.Object.create((this.messagePrototype));\n message.typeUrl = \"\";\n message.value = new Uint8Array(0);\n if (value !== undefined)\n reflectionMergePartial(this, message, value);\n return message;\n }\n internalBinaryRead(reader, length, options, target) {\n let message = target ?? this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* string type_url */ 1:\n message.typeUrl = reader.string();\n break;\n case /* bytes value */ 2:\n message.value = reader.bytes();\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message, writer, options) {\n /* string type_url = 1; */\n if (message.typeUrl !== \"\")\n writer.tag(1, WireType.LengthDelimited).string(message.typeUrl);\n /* bytes value = 2; */\n if (message.value.length)\n writer.tag(2, WireType.LengthDelimited).bytes(message.value);\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message google.protobuf.Any\n */\nexport const Any = new Any$Type();\n","// @generated by protobuf-ts 2.11.1 with parameter server_generic,generate_dependencies,long_type_number\n// @generated from protobuf file \"packages/proto-rpc/protos/ProtoRpc.proto\" (package \"protorpc\", syntax proto3)\n// tslint:disable\nimport { MessageType } from \"@protobuf-ts/runtime\";\nimport { Empty } from \"../../../google/protobuf/empty\";\nimport { Any } from \"../../../google/protobuf/any\";\n/**\n * @generated from protobuf enum protorpc.RpcErrorType\n */\nexport var RpcErrorType;\n(function (RpcErrorType) {\n /**\n * @generated from protobuf enum value: SERVER_TIMEOUT = 0;\n */\n RpcErrorType[RpcErrorType[\"SERVER_TIMEOUT\"] = 0] = \"SERVER_TIMEOUT\";\n /**\n * @generated from protobuf enum value: CLIENT_TIMEOUT = 1;\n */\n RpcErrorType[RpcErrorType[\"CLIENT_TIMEOUT\"] = 1] = \"CLIENT_TIMEOUT\";\n /**\n * @generated from protobuf enum value: UNKNOWN_RPC_METHOD = 2;\n */\n RpcErrorType[RpcErrorType[\"UNKNOWN_RPC_METHOD\"] = 2] = \"UNKNOWN_RPC_METHOD\";\n /**\n * @generated from protobuf enum value: CLIENT_ERROR = 3;\n */\n RpcErrorType[RpcErrorType[\"CLIENT_ERROR\"] = 3] = \"CLIENT_ERROR\";\n /**\n * @generated from protobuf enum value: SERVER_ERROR = 4;\n */\n RpcErrorType[RpcErrorType[\"SERVER_ERROR\"] = 4] = \"SERVER_ERROR\";\n})(RpcErrorType || (RpcErrorType = {}));\n// @generated message type with reflection information, may provide speed optimized methods\nclass RpcMessage$Type extends MessageType {\n constructor() {\n super(\"protorpc.RpcMessage\", [\n { no: 1, name: \"header\", kind: \"map\", K: 9 /*ScalarType.STRING*/, V: { kind: \"scalar\", T: 9 /*ScalarType.STRING*/ } },\n { no: 2, name: \"body\", kind: \"message\", T: () => Any },\n { no: 3, name: \"requestId\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 4, name: \"errorType\", kind: \"enum\", opt: true, T: () => [\"protorpc.RpcErrorType\", RpcErrorType] },\n { no: 5, name: \"errorClassName\", kind: \"scalar\", opt: true, T: 9 /*ScalarType.STRING*/ },\n { no: 6, name: \"errorCode\", kind: \"scalar\", opt: true, T: 9 /*ScalarType.STRING*/ },\n { no: 7, name: \"errorMessage\", kind: \"scalar\", opt: true, T: 9 /*ScalarType.STRING*/ }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message protorpc.RpcMessage\n */\nexport const RpcMessage = new RpcMessage$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass Mnfo2uhnf92hvqi2nviouq2hv9puhq$Type extends MessageType {\n constructor() {\n super(\"protorpc.Mnfo2uhnf92hvqi2nviouq2hv9puhq\", [\n { no: 1, name: \"empty\", kind: \"message\", T: () => Empty }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message protorpc.Mnfo2uhnf92hvqi2nviouq2hv9puhq\n */\nexport const Mnfo2uhnf92hvqi2nviouq2hv9puhq = new Mnfo2uhnf92hvqi2nviouq2hv9puhq$Type();\n","import { WireType } from \"@protobuf-ts/runtime\";\nimport { UnknownFieldHandler } from \"@protobuf-ts/runtime\";\nimport { reflectionMergePartial } from \"@protobuf-ts/runtime\";\nimport { typeofJsonValue } from \"@protobuf-ts/runtime\";\nimport { PbLong } from \"@protobuf-ts/runtime\";\nimport { MessageType } from \"@protobuf-ts/runtime\";\n// @generated message type with reflection information, may provide speed optimized methods\nclass Timestamp$Type extends MessageType {\n constructor() {\n super(\"google.protobuf.Timestamp\", [\n { no: 1, name: \"seconds\", kind: \"scalar\", T: 3 /*ScalarType.INT64*/, L: 2 /*LongType.NUMBER*/ },\n { no: 2, name: \"nanos\", kind: \"scalar\", T: 5 /*ScalarType.INT32*/ }\n ]);\n }\n /**\n * Creates a new `Timestamp` for the current time.\n */\n now() {\n const msg = this.create();\n const ms = Date.now();\n msg.seconds = PbLong.from(Math.floor(ms / 1000)).toNumber();\n msg.nanos = (ms % 1000) * 1000000;\n return msg;\n }\n /**\n * Converts a `Timestamp` to a JavaScript Date.\n */\n toDate(message) {\n return new Date(PbLong.from(message.seconds).toNumber() * 1000 + Math.ceil(message.nanos / 1000000));\n }\n /**\n * Converts a JavaScript Date to a `Timestamp`.\n */\n fromDate(date) {\n const msg = this.create();\n const ms = date.getTime();\n msg.seconds = PbLong.from(Math.floor(ms / 1000)).toNumber();\n msg.nanos = ((ms % 1000) + (ms < 0 && ms % 1000 !== 0 ? 1000 : 0)) * 1000000;\n return msg;\n }\n /**\n * In JSON format, the `Timestamp` type is encoded as a string\n * in the RFC 3339 format.\n */\n internalJsonWrite(message, options) {\n let ms = PbLong.from(message.seconds).toNumber() * 1000;\n if (ms < Date.parse(\"0001-01-01T00:00:00Z\") || ms > Date.parse(\"9999-12-31T23:59:59Z\"))\n throw new Error(\"Unable to encode Timestamp to JSON. Must be from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive.\");\n if (message.nanos < 0)\n throw new Error(\"Unable to encode invalid Timestamp to JSON. Nanos must not be negative.\");\n let z = \"Z\";\n if (message.nanos > 0) {\n let nanosStr = (message.nanos + 1000000000).toString().substring(1);\n if (nanosStr.substring(3) === \"000000\")\n z = \".\" + nanosStr.substring(0, 3) + \"Z\";\n else if (nanosStr.substring(6) === \"000\")\n z = \".\" + nanosStr.substring(0, 6) + \"Z\";\n else\n z = \".\" + nanosStr + \"Z\";\n }\n return new Date(ms).toISOString().replace(\".000Z\", z);\n }\n /**\n * In JSON format, the `Timestamp` type is encoded as a string\n * in the RFC 3339 format.\n */\n internalJsonRead(json, options, target) {\n if (typeof json !== \"string\")\n throw new Error(\"Unable to parse Timestamp from JSON \" + typeofJsonValue(json) + \".\");\n let matches = json.match(/^([0-9]{4})-([0-9]{2})-([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})(?:Z|\\.([0-9]{3,9})Z|([+-][0-9][0-9]:[0-9][0-9]))$/);\n if (!matches)\n throw new Error(\"Unable to parse Timestamp from JSON. Invalid format.\");\n let ms = Date.parse(matches[1] + \"-\" + matches[2] + \"-\" + matches[3] + \"T\" + matches[4] + \":\" + matches[5] + \":\" + matches[6] + (matches[8] ? matches[8] : \"Z\"));\n if (Number.isNaN(ms))\n throw new Error(\"Unable to parse Timestamp from JSON. Invalid value.\");\n if (ms < Date.parse(\"0001-01-01T00:00:00Z\") || ms > Date.parse(\"9999-12-31T23:59:59Z\"))\n throw new globalThis.Error(\"Unable to parse Timestamp from JSON. Must be from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive.\");\n if (!target)\n target = this.create();\n target.seconds = PbLong.from(ms / 1000).toNumber();\n target.nanos = 0;\n if (matches[7])\n target.nanos = (parseInt(\"1\" + matches[7] + \"0\".repeat(9 - matches[7].length)) - 1000000000);\n return target;\n }\n create(value) {\n const message = globalThis.Object.create((this.messagePrototype));\n message.seconds = 0;\n message.nanos = 0;\n if (value !== undefined)\n reflectionMergePartial(this, message, value);\n return message;\n }\n internalBinaryRead(reader, length, options, target) {\n let message = target ?? this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* int64 seconds */ 1:\n message.seconds = reader.int64().toNumber();\n break;\n case /* int32 nanos */ 2:\n message.nanos = reader.int32();\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message, writer, options) {\n /* int64 seconds = 1; */\n if (message.seconds !== 0)\n writer.tag(1, WireType.Varint).int64(message.seconds);\n /* int32 nanos = 2; */\n if (message.nanos !== 0)\n writer.tag(2, WireType.Varint).int32(message.nanos);\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message google.protobuf.Timestamp\n */\nexport const Timestamp = new Timestamp$Type();\n","// @generated by protobuf-ts 2.11.1 with parameter server_generic,generate_dependencies,long_type_number\n// @generated from protobuf file \"packages/dht/protos/DhtRpc.proto\" (package \"dht\", syntax proto3)\n// tslint:disable\nimport { Empty } from \"../../../google/protobuf/empty\";\nimport { ServiceType } from \"@protobuf-ts/runtime-rpc\";\nimport { MessageType } from \"@protobuf-ts/runtime\";\nimport { RpcMessage } from \"../../proto-rpc/protos/ProtoRpc\";\nimport { Timestamp } from \"../../../google/protobuf/timestamp\";\nimport { Any } from \"../../../google/protobuf/any\";\n/**\n * @generated from protobuf enum dht.RecursiveOperation\n */\nexport var RecursiveOperation;\n(function (RecursiveOperation) {\n /**\n * @generated from protobuf enum value: FIND_CLOSEST_NODES = 0;\n */\n RecursiveOperation[RecursiveOperation[\"FIND_CLOSEST_NODES\"] = 0] = \"FIND_CLOSEST_NODES\";\n /**\n * @generated from protobuf enum value: FETCH_DATA = 1;\n */\n RecursiveOperation[RecursiveOperation[\"FETCH_DATA\"] = 1] = \"FETCH_DATA\";\n /**\n * @generated from protobuf enum value: DELETE_DATA = 2;\n */\n RecursiveOperation[RecursiveOperation[\"DELETE_DATA\"] = 2] = \"DELETE_DATA\";\n})(RecursiveOperation || (RecursiveOperation = {}));\n/**\n * @generated from protobuf enum dht.NodeType\n */\nexport var NodeType;\n(function (NodeType) {\n /**\n * @generated from protobuf enum value: NODEJS = 0;\n */\n NodeType[NodeType[\"NODEJS\"] = 0] = \"NODEJS\";\n /**\n * @generated from protobuf enum value: BROWSER = 1;\n */\n NodeType[NodeType[\"BROWSER\"] = 1] = \"BROWSER\";\n})(NodeType || (NodeType = {}));\n/**\n * @generated from protobuf enum dht.RpcResponseError\n */\nexport var RpcResponseError;\n(function (RpcResponseError) {\n /**\n * @generated from protobuf enum value: SERVER_TIMOUT = 0;\n */\n RpcResponseError[RpcResponseError[\"SERVER_TIMOUT\"] = 0] = \"SERVER_TIMOUT\";\n /**\n * @generated from protobuf enum value: CLIENT_TIMEOUT = 1;\n */\n RpcResponseError[RpcResponseError[\"CLIENT_TIMEOUT\"] = 1] = \"CLIENT_TIMEOUT\";\n /**\n * @generated from protobuf enum value: SERVER_ERROR = 2;\n */\n RpcResponseError[RpcResponseError[\"SERVER_ERROR\"] = 2] = \"SERVER_ERROR\";\n /**\n * @generated from protobuf enum value: UNKNOWN_RPC_METHOD = 3;\n */\n RpcResponseError[RpcResponseError[\"UNKNOWN_RPC_METHOD\"] = 3] = \"UNKNOWN_RPC_METHOD\";\n})(RpcResponseError || (RpcResponseError = {}));\n/**\n * @generated from protobuf enum dht.RouteMessageError\n */\nexport var RouteMessageError;\n(function (RouteMessageError) {\n /**\n * @generated from protobuf enum value: NO_TARGETS = 0;\n */\n RouteMessageError[RouteMessageError[\"NO_TARGETS\"] = 0] = \"NO_TARGETS\";\n /**\n * @generated from protobuf enum value: DUPLICATE = 1;\n */\n RouteMessageError[RouteMessageError[\"DUPLICATE\"] = 1] = \"DUPLICATE\";\n /**\n * TODO: can this be removed? If DhtNode is already stopped the server side requests\n * should not be processed\n *\n * @generated from protobuf enum value: STOPPED = 2;\n */\n RouteMessageError[RouteMessageError[\"STOPPED\"] = 2] = \"STOPPED\";\n})(RouteMessageError || (RouteMessageError = {}));\n/**\n * @generated from protobuf enum dht.HandshakeError\n */\nexport var HandshakeError;\n(function (HandshakeError) {\n /**\n * @generated from protobuf enum value: DUPLICATE_CONNECTION = 0;\n */\n HandshakeError[HandshakeError[\"DUPLICATE_CONNECTION\"] = 0] = \"DUPLICATE_CONNECTION\";\n /**\n * @generated from protobuf enum value: INVALID_TARGET_PEER_DESCRIPTOR = 1;\n */\n HandshakeError[HandshakeError[\"INVALID_TARGET_PEER_DESCRIPTOR\"] = 1] = \"INVALID_TARGET_PEER_DESCRIPTOR\";\n /**\n * @generated from protobuf enum value: UNSUPPORTED_PROTOCOL_VERSION = 2;\n */\n HandshakeError[HandshakeError[\"UNSUPPORTED_PROTOCOL_VERSION\"] = 2] = \"UNSUPPORTED_PROTOCOL_VERSION\";\n})(HandshakeError || (HandshakeError = {}));\n/**\n * @generated from protobuf enum dht.DisconnectMode\n */\nexport var DisconnectMode;\n(function (DisconnectMode) {\n /**\n * @generated from protobuf enum value: NORMAL = 0;\n */\n DisconnectMode[DisconnectMode[\"NORMAL\"] = 0] = \"NORMAL\";\n /**\n * @generated from protobuf enum value: LEAVING = 1;\n */\n DisconnectMode[DisconnectMode[\"LEAVING\"] = 1] = \"LEAVING\";\n})(DisconnectMode || (DisconnectMode = {}));\n// @generated message type with reflection information, may provide speed optimized methods\nclass StoreDataRequest$Type extends MessageType {\n constructor() {\n super(\"dht.StoreDataRequest\", [\n { no: 1, name: \"key\", kind: \"scalar\", T: 12 /*ScalarType.BYTES*/ },\n { no: 2, name: \"data\", kind: \"message\", T: () => Any },\n { no: 3, name: \"creator\", kind: \"scalar\", T: 12 /*ScalarType.BYTES*/ },\n { no: 4, name: \"createdAt\", kind: \"message\", T: () => Timestamp },\n { no: 5, name: \"ttl\", kind: \"scalar\", T: 13 /*ScalarType.UINT32*/ }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message dht.StoreDataRequest\n */\nexport const StoreDataRequest = new StoreDataRequest$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass StoreDataResponse$Type extends MessageType {\n constructor() {\n super(\"dht.StoreDataResponse\", []);\n }\n}\n/**\n * @generated MessageType for protobuf message dht.StoreDataResponse\n */\nexport const StoreDataResponse = new StoreDataResponse$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass ExternalStoreDataRequest$Type extends MessageType {\n constructor() {\n super(\"dht.ExternalStoreDataRequest\", [\n { no: 1, name: \"key\", kind: \"scalar\", T: 12 /*ScalarType.BYTES*/ },\n { no: 2, name: \"data\", kind: \"message\", T: () => Any }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message dht.ExternalStoreDataRequest\n */\nexport const ExternalStoreDataRequest = new ExternalStoreDataRequest$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass ExternalStoreDataResponse$Type extends MessageType {\n constructor() {\n super(\"dht.ExternalStoreDataResponse\", [\n { no: 1, name: \"storers\", kind: \"message\", repeat: 2 /*RepeatType.UNPACKED*/, T: () => PeerDescriptor }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message dht.ExternalStoreDataResponse\n */\nexport const ExternalStoreDataResponse = new ExternalStoreDataResponse$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass ReplicateDataRequest$Type extends MessageType {\n constructor() {\n super(\"dht.ReplicateDataRequest\", [\n { no: 1, name: \"entry\", kind: \"message\", T: () => DataEntry }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message dht.ReplicateDataRequest\n */\nexport const ReplicateDataRequest = new ReplicateDataRequest$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass DataEntry$Type extends MessageType {\n constructor() {\n super(\"dht.DataEntry\", [\n { no: 1, name: \"key\", kind: \"scalar\", T: 12 /*ScalarType.BYTES*/ },\n { no: 2, name: \"data\", kind: \"message\", T: () => Any },\n { no: 3, name: \"creator\", kind: \"scalar\", T: 12 /*ScalarType.BYTES*/ },\n { no: 4, name: \"createdAt\", kind: \"message\", T: () => Timestamp },\n { no: 5, name: \"storedAt\", kind: \"message\", T: () => Timestamp },\n { no: 6, name: \"ttl\", kind: \"scalar\", T: 13 /*ScalarType.UINT32*/ },\n { no: 7, name: \"stale\", kind: \"scalar\", T: 8 /*ScalarType.BOOL*/ },\n { no: 8, name: \"deleted\", kind: \"scalar\", T: 8 /*ScalarType.BOOL*/ }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message dht.DataEntry\n */\nexport const DataEntry = new DataEntry$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass ClosestPeersRequest$Type extends MessageType {\n constructor() {\n super(\"dht.ClosestPeersRequest\", [\n { no: 1, name: \"nodeId\", kind: \"scalar\", T: 12 /*ScalarType.BYTES*/ },\n { no: 2, name: \"requestId\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message dht.ClosestPeersRequest\n */\nexport const ClosestPeersRequest = new ClosestPeersRequest$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass ClosestPeersResponse$Type extends MessageType {\n constructor() {\n super(\"dht.ClosestPeersResponse\", [\n { no: 1, name: \"peers\", kind: \"message\", repeat: 2 /*RepeatType.UNPACKED*/, T: () => PeerDescriptor },\n { no: 2, name: \"requestId\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message dht.ClosestPeersResponse\n */\nexport const ClosestPeersResponse = new ClosestPeersResponse$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass ClosestRingPeersRequest$Type extends MessageType {\n constructor() {\n super(\"dht.ClosestRingPeersRequest\", [\n { no: 1, name: \"ringId\", kind: \"scalar\", T: 12 /*ScalarType.BYTES*/ },\n { no: 2, name: \"requestId\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message dht.ClosestRingPeersRequest\n */\nexport const ClosestRingPeersRequest = new ClosestRingPeersRequest$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass ClosestRingPeersResponse$Type extends MessageType {\n constructor() {\n super(\"dht.ClosestRingPeersResponse\", [\n { no: 1, name: \"leftPeers\", kind: \"message\", repeat: 2 /*RepeatType.UNPACKED*/, T: () => PeerDescriptor },\n { no: 2, name: \"rightPeers\", kind: \"message\", repeat: 2 /*RepeatType.UNPACKED*/, T: () => PeerDescriptor },\n { no: 3, name: \"requestId\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message dht.ClosestRingPeersResponse\n */\nexport const ClosestRingPeersResponse = new ClosestRingPeersResponse$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass RecursiveOperationRequest$Type extends MessageType {\n constructor() {\n super(\"dht.RecursiveOperationRequest\", [\n { no: 1, name: \"sessionId\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 2, name: \"operation\", kind: \"enum\", T: () => [\"dht.RecursiveOperation\", RecursiveOperation] }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message dht.RecursiveOperationRequest\n */\nexport const RecursiveOperationRequest = new RecursiveOperationRequest$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass RecursiveOperationResponse$Type extends MessageType {\n constructor() {\n super(\"dht.RecursiveOperationResponse\", [\n { no: 1, name: \"closestConnectedNodes\", kind: \"message\", repeat: 2 /*RepeatType.UNPACKED*/, T: () => PeerDescriptor },\n { no: 2, name: \"dataEntries\", kind: \"message\", repeat: 2 /*RepeatType.UNPACKED*/, T: () => DataEntry },\n { no: 3, name: \"noCloserNodesFound\", kind: \"scalar\", T: 8 /*ScalarType.BOOL*/ },\n { no: 4, name: \"routingPath\", kind: \"message\", repeat: 2 /*RepeatType.UNPACKED*/, T: () => PeerDescriptor }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message dht.RecursiveOperationResponse\n */\nexport const RecursiveOperationResponse = new RecursiveOperationResponse$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass PingRequest$Type extends MessageType {\n constructor() {\n super(\"dht.PingRequest\", [\n { no: 1, name: \"requestId\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message dht.PingRequest\n */\nexport const PingRequest = new PingRequest$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass PingResponse$Type extends MessageType {\n constructor() {\n super(\"dht.PingResponse\", [\n { no: 1, name: \"requestId\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message dht.PingResponse\n */\nexport const PingResponse = new PingResponse$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass LeaveNotice$Type extends MessageType {\n constructor() {\n super(\"dht.LeaveNotice\", []);\n }\n}\n/**\n * @generated MessageType for protobuf message dht.LeaveNotice\n */\nexport const LeaveNotice = new LeaveNotice$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass PeerDescriptor$Type extends MessageType {\n constructor() {\n super(\"dht.PeerDescriptor\", [\n { no: 1, name: \"nodeId\", kind: \"scalar\", T: 12 /*ScalarType.BYTES*/ },\n { no: 2, name: \"type\", kind: \"enum\", T: () => [\"dht.NodeType\", NodeType] },\n { no: 3, name: \"udp\", kind: \"message\", T: () => ConnectivityMethod },\n { no: 4, name: \"tcp\", kind: \"message\", T: () => ConnectivityMethod },\n { no: 5, name: \"websocket\", kind: \"message\", T: () => ConnectivityMethod },\n { no: 6, name: \"region\", kind: \"scalar\", opt: true, T: 13 /*ScalarType.UINT32*/ },\n { no: 7, name: \"ipAddress\", kind: \"scalar\", opt: true, T: 13 /*ScalarType.UINT32*/ },\n { no: 8, name: \"publicKey\", kind: \"scalar\", opt: true, T: 12 /*ScalarType.BYTES*/ },\n { no: 9, name: \"signature\", kind: \"scalar\", opt: true, T: 12 /*ScalarType.BYTES*/ }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message dht.PeerDescriptor\n */\nexport const PeerDescriptor = new PeerDescriptor$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass ConnectivityMethod$Type extends MessageType {\n constructor() {\n super(\"dht.ConnectivityMethod\", [\n { no: 1, name: \"port\", kind: \"scalar\", T: 13 /*ScalarType.UINT32*/ },\n { no: 2, name: \"host\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 3, name: \"tls\", kind: \"scalar\", T: 8 /*ScalarType.BOOL*/ }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message dht.ConnectivityMethod\n */\nexport const ConnectivityMethod = new ConnectivityMethod$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass RouteMessageWrapper$Type extends MessageType {\n constructor() {\n super(\"dht.RouteMessageWrapper\", [\n { no: 1, name: \"requestId\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 2, name: \"sourcePeer\", kind: \"message\", T: () => PeerDescriptor },\n { no: 3, name: \"target\", kind: \"scalar\", T: 12 /*ScalarType.BYTES*/ },\n { no: 4, name: \"message\", kind: \"message\", T: () => Message },\n { no: 5, name: \"reachableThrough\", kind: \"message\", repeat: 2 /*RepeatType.UNPACKED*/, T: () => PeerDescriptor },\n { no: 6, name: \"routingPath\", kind: \"message\", repeat: 2 /*RepeatType.UNPACKED*/, T: () => PeerDescriptor },\n { no: 7, name: \"parallelRootNodeIds\", kind: \"scalar\", repeat: 2 /*RepeatType.UNPACKED*/, T: 9 /*ScalarType.STRING*/ }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message dht.RouteMessageWrapper\n */\nexport const RouteMessageWrapper = new RouteMessageWrapper$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass RouteMessageAck$Type extends MessageType {\n constructor() {\n super(\"dht.RouteMessageAck\", [\n { no: 1, name: \"requestId\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 2, name: \"error\", kind: \"enum\", opt: true, T: () => [\"dht.RouteMessageError\", RouteMessageError] }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message dht.RouteMessageAck\n */\nexport const RouteMessageAck = new RouteMessageAck$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass ConnectivityRequest$Type extends MessageType {\n constructor() {\n super(\"dht.ConnectivityRequest\", [\n { no: 1, name: \"port\", kind: \"scalar\", T: 13 /*ScalarType.UINT32*/ },\n { no: 2, name: \"tls\", kind: \"scalar\", T: 8 /*ScalarType.BOOL*/ },\n { no: 3, name: \"host\", kind: \"scalar\", opt: true, T: 9 /*ScalarType.STRING*/ },\n { no: 4, name: \"allowSelfSignedCertificate\", kind: \"scalar\", T: 8 /*ScalarType.BOOL*/ }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message dht.ConnectivityRequest\n */\nexport const ConnectivityRequest = new ConnectivityRequest$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass ConnectivityResponse$Type extends MessageType {\n constructor() {\n super(\"dht.ConnectivityResponse\", [\n { no: 1, name: \"host\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 2, name: \"natType\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 3, name: \"websocket\", kind: \"message\", T: () => ConnectivityMethod },\n { no: 4, name: \"ipAddress\", kind: \"scalar\", T: 13 /*ScalarType.UINT32*/ },\n { no: 5, name: \"protocolVersion\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 6, name: \"latitude\", kind: \"scalar\", opt: true, T: 1 /*ScalarType.DOUBLE*/ },\n { no: 7, name: \"longitude\", kind: \"scalar\", opt: true, T: 1 /*ScalarType.DOUBLE*/ }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message dht.ConnectivityResponse\n */\nexport const ConnectivityResponse = new ConnectivityResponse$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass HandshakeRequest$Type extends MessageType {\n constructor() {\n super(\"dht.HandshakeRequest\", [\n { no: 1, name: \"sourcePeerDescriptor\", kind: \"message\", T: () => PeerDescriptor },\n { no: 2, name: \"targetPeerDescriptor\", kind: \"message\", T: () => PeerDescriptor },\n { no: 3, name: \"protocolVersion\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 4, name: \"applicationVersion\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message dht.HandshakeRequest\n */\nexport const HandshakeRequest = new HandshakeRequest$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass HandshakeResponse$Type extends MessageType {\n constructor() {\n super(\"dht.HandshakeResponse\", [\n { no: 1, name: \"sourcePeerDescriptor\", kind: \"message\", T: () => PeerDescriptor },\n { no: 2, name: \"error\", kind: \"enum\", opt: true, T: () => [\"dht.HandshakeError\", HandshakeError] },\n { no: 3, name: \"protocolVersion\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 4, name: \"applicationVersion\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message dht.HandshakeResponse\n */\nexport const HandshakeResponse = new HandshakeResponse$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass Message$Type extends MessageType {\n constructor() {\n super(\"dht.Message\", [\n { no: 1, name: \"messageId\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 2, name: \"sourceDescriptor\", kind: \"message\", T: () => PeerDescriptor },\n { no: 3, name: \"targetDescriptor\", kind: \"message\", T: () => PeerDescriptor },\n { no: 4, name: \"serviceId\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 5, name: \"rpcMessage\", kind: \"message\", oneof: \"body\", T: () => RpcMessage },\n { no: 6, name: \"connectivityRequest\", kind: \"message\", oneof: \"body\", T: () => ConnectivityRequest },\n { no: 7, name: \"connectivityResponse\", kind: \"message\", oneof: \"body\", T: () => ConnectivityResponse },\n { no: 8, name: \"handshakeRequest\", kind: \"message\", oneof: \"body\", T: () => HandshakeRequest },\n { no: 9, name: \"handshakeResponse\", kind: \"message\", oneof: \"body\", T: () => HandshakeResponse },\n { no: 10, name: \"recursiveOperationRequest\", kind: \"message\", oneof: \"body\", T: () => RecursiveOperationRequest }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message dht.Message\n */\nexport const Message = new Message$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass WebsocketConnectionRequest$Type extends MessageType {\n constructor() {\n super(\"dht.WebsocketConnectionRequest\", []);\n }\n}\n/**\n * @generated MessageType for protobuf message dht.WebsocketConnectionRequest\n */\nexport const WebsocketConnectionRequest = new WebsocketConnectionRequest$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass WebrtcConnectionRequest$Type extends MessageType {\n constructor() {\n super(\"dht.WebrtcConnectionRequest\", []);\n }\n}\n/**\n * @generated MessageType for protobuf message dht.WebrtcConnectionRequest\n */\nexport const WebrtcConnectionRequest = new WebrtcConnectionRequest$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass RtcOffer$Type extends MessageType {\n constructor() {\n super(\"dht.RtcOffer\", [\n { no: 1, name: \"description\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 2, name: \"connectionId\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message dht.RtcOffer\n */\nexport const RtcOffer = new RtcOffer$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass RtcAnswer$Type extends MessageType {\n constructor() {\n super(\"dht.RtcAnswer\", [\n { no: 1, name: \"description\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 2, name: \"connectionId\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message dht.RtcAnswer\n */\nexport const RtcAnswer = new RtcAnswer$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass IceCandidate$Type extends MessageType {\n constructor() {\n super(\"dht.IceCandidate\", [\n { no: 1, name: \"candidate\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 2, name: \"mid\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 3, name: \"connectionId\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message dht.IceCandidate\n */\nexport const IceCandidate = new IceCandidate$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass LockRequest$Type extends MessageType {\n constructor() {\n super(\"dht.LockRequest\", [\n { no: 1, name: \"lockId\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message dht.LockRequest\n */\nexport const LockRequest = new LockRequest$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass UnlockRequest$Type extends MessageType {\n constructor() {\n super(\"dht.UnlockRequest\", [\n { no: 1, name: \"lockId\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message dht.UnlockRequest\n */\nexport const UnlockRequest = new UnlockRequest$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass LockResponse$Type extends MessageType {\n constructor() {\n super(\"dht.LockResponse\", [\n { no: 1, name: \"accepted\", kind: \"scalar\", T: 8 /*ScalarType.BOOL*/ }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message dht.LockResponse\n */\nexport const LockResponse = new LockResponse$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass DisconnectNotice$Type extends MessageType {\n constructor() {\n super(\"dht.DisconnectNotice\", [\n { no: 1, name: \"disconnectMode\", kind: \"enum\", T: () => [\"dht.DisconnectMode\", DisconnectMode] }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message dht.DisconnectNotice\n */\nexport const DisconnectNotice = new DisconnectNotice$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass SetPrivateRequest$Type extends MessageType {\n constructor() {\n super(\"dht.SetPrivateRequest\", [\n { no: 1, name: \"isPrivate\", kind: \"scalar\", T: 8 /*ScalarType.BOOL*/ }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message dht.SetPrivateRequest\n */\nexport const SetPrivateRequest = new SetPrivateRequest$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass ExternalFetchDataRequest$Type extends MessageType {\n constructor() {\n super(\"dht.ExternalFetchDataRequest\", [\n { no: 1, name: \"key\", kind: \"scalar\", T: 12 /*ScalarType.BYTES*/ }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message dht.ExternalFetchDataRequest\n */\nexport const ExternalFetchDataRequest = new ExternalFetchDataRequest$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass ExternalFetchDataResponse$Type extends MessageType {\n constructor() {\n super(\"dht.ExternalFetchDataResponse\", [\n { no: 1, name: \"entries\", kind: \"message\", repeat: 2 /*RepeatType.UNPACKED*/, T: () => DataEntry }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message dht.ExternalFetchDataResponse\n */\nexport const ExternalFetchDataResponse = new ExternalFetchDataResponse$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass ExternalFindClosestNodesRequest$Type extends MessageType {\n constructor() {\n super(\"dht.ExternalFindClosestNodesRequest\", [\n { no: 1, name: \"nodeId\", kind: \"scalar\", T: 12 /*ScalarType.BYTES*/ }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message dht.ExternalFindClosestNodesRequest\n */\nexport const ExternalFindClosestNodesRequest = new ExternalFindClosestNodesRequest$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass ExternalFindClosestNodesResponse$Type extends MessageType {\n constructor() {\n super(\"dht.ExternalFindClosestNodesResponse\", [\n { no: 1, name: \"closestNodes\", kind: \"message\", repeat: 2 /*RepeatType.UNPACKED*/, T: () => PeerDescriptor }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message dht.ExternalFindClosestNodesResponse\n */\nexport const ExternalFindClosestNodesResponse = new ExternalFindClosestNodesResponse$Type();\n/**\n * @generated ServiceType for protobuf service dht.DhtNodeRpc\n */\nexport const DhtNodeRpc = new ServiceType(\"dht.DhtNodeRpc\", [\n { name: \"getClosestPeers\", options: {}, I: ClosestPeersRequest, O: ClosestPeersResponse },\n { name: \"getClosestRingPeers\", options: {}, I: ClosestRingPeersRequest, O: ClosestRingPeersResponse },\n { name: \"ping\", options: {}, I: PingRequest, O: PingResponse },\n { name: \"leaveNotice\", options: {}, I: LeaveNotice, O: Empty }\n]);\n/**\n * @generated ServiceType for protobuf service dht.RouterRpc\n */\nexport const RouterRpc = new ServiceType(\"dht.RouterRpc\", [\n { name: \"routeMessage\", options: {}, I: RouteMessageWrapper, O: RouteMessageAck },\n { name: \"forwardMessage\", options: {}, I: RouteMessageWrapper, O: RouteMessageAck }\n]);\n/**\n * @generated ServiceType for protobuf service dht.RecursiveOperationRpc\n */\nexport const RecursiveOperationRpc = new ServiceType(\"dht.RecursiveOperationRpc\", [\n { name: \"routeRequest\", options: {}, I: RouteMessageWrapper, O: RouteMessageAck }\n]);\n/**\n * @generated ServiceType for protobuf service dht.StoreRpc\n */\nexport const StoreRpc = new ServiceType(\"dht.StoreRpc\", [\n { name: \"storeData\", options: {}, I: StoreDataRequest, O: StoreDataResponse },\n { name: \"replicateData\", options: {}, I: ReplicateDataRequest, O: Empty }\n]);\n/**\n * @generated ServiceType for protobuf service dht.RecursiveOperationSessionRpc\n */\nexport const RecursiveOperationSessionRpc = new ServiceType(\"dht.RecursiveOperationSessionRpc\", [\n { name: \"sendResponse\", options: {}, I: RecursiveOperationResponse, O: Empty }\n]);\n/**\n * @generated ServiceType for protobuf service dht.WebsocketClientConnectorRpc\n */\nexport const WebsocketClientConnectorRpc = new ServiceType(\"dht.WebsocketClientConnectorRpc\", [\n { name: \"requestConnection\", options: {}, I: WebsocketConnectionRequest, O: Empty }\n]);\n/**\n * @generated ServiceType for protobuf service dht.WebrtcConnectorRpc\n */\nexport const WebrtcConnectorRpc = new ServiceType(\"dht.WebrtcConnectorRpc\", [\n { name: \"requestConnection\", options: {}, I: WebrtcConnectionRequest, O: Empty },\n { name: \"rtcOffer\", options: {}, I: RtcOffer, O: Empty },\n { name: \"rtcAnswer\", options: {}, I: RtcAnswer, O: Empty },\n { name: \"iceCandidate\", options: {}, I: IceCandidate, O: Empty }\n]);\n/**\n * @generated ServiceType for protobuf service dht.ConnectionLockRpc\n */\nexport const ConnectionLockRpc = new ServiceType(\"dht.ConnectionLockRpc\", [\n { name: \"lockRequest\", options: {}, I: LockRequest, O: LockResponse },\n { name: \"unlockRequest\", options: {}, I: UnlockRequest, O: Empty },\n { name: \"gracefulDisconnect\", options: {}, I: DisconnectNotice, O: Empty },\n { name: \"setPrivate\", options: {}, I: SetPrivateRequest, O: Empty }\n]);\n/**\n * @generated ServiceType for protobuf service dht.ExternalApiRpc\n */\nexport const ExternalApiRpc = new ServiceType(\"dht.ExternalApiRpc\", [\n { name: \"externalFetchData\", options: {}, I: ExternalFetchDataRequest, O: ExternalFetchDataResponse },\n { name: \"externalStoreData\", options: {}, I: ExternalStoreDataRequest, O: ExternalStoreDataResponse },\n { name: \"externalFindClosestNodes\", options: {}, I: ExternalFindClosestNodesRequest, O: ExternalFindClosestNodesResponse }\n]);\n","// @generated by protobuf-ts 2.11.1 with parameter server_generic,generate_dependencies,long_type_number\n// @generated from protobuf file \"packages/dht/protos/DhtRpc.proto\" (package \"dht\", syntax proto3)\n// tslint:disable\nimport { ExternalApiRpc } from \"./DhtRpc\";\nimport { ConnectionLockRpc } from \"./DhtRpc\";\nimport { WebrtcConnectorRpc } from \"./DhtRpc\";\nimport { WebsocketClientConnectorRpc } from \"./DhtRpc\";\nimport { RecursiveOperationSessionRpc } from \"./DhtRpc\";\nimport { StoreRpc } from \"./DhtRpc\";\nimport { RecursiveOperationRpc } from \"./DhtRpc\";\nimport { RouterRpc } from \"./DhtRpc\";\nimport { DhtNodeRpc } from \"./DhtRpc\";\nimport { stackIntercept } from \"@protobuf-ts/runtime-rpc\";\n/**\n * @generated from protobuf service dht.DhtNodeRpc\n */\nexport class DhtNodeRpcClient {\n _transport;\n typeName = DhtNodeRpc.typeName;\n methods = DhtNodeRpc.methods;\n options = DhtNodeRpc.options;\n constructor(_transport) {\n this._transport = _transport;\n }\n /**\n * TODO rename to getClosestNeighbors (breaking change)\n *\n * @generated from protobuf rpc: getClosestPeers\n */\n getClosestPeers(input, options) {\n const method = this.methods[0], opt = this._transport.mergeOptions(options);\n return stackIntercept(\"unary\", this._transport, method, opt, input);\n }\n /**\n * TODO rename to getClosestRingContacts (breaking change)\n *\n * @generated from protobuf rpc: getClosestRingPeers\n */\n getClosestRingPeers(input, options) {\n const method = this.methods[1], opt = this._transport.mergeOptions(options);\n return stackIntercept(\"unary\", this._transport, method, opt, input);\n }\n /**\n * @generated from protobuf rpc: ping\n */\n ping(input, options) {\n const method = this.methods[2], opt = this._transport.mergeOptions(options);\n return stackIntercept(\"unary\", this._transport, method, opt, input);\n }\n /**\n * @generated from protobuf rpc: leaveNotice\n */\n leaveNotice(input, options) {\n const method = this.methods[3], opt = this._transport.mergeOptions(options);\n return stackIntercept(\"unary\", this._transport, method, opt, input);\n }\n}\n/**\n * @generated from protobuf service dht.RouterRpc\n */\nexport class RouterRpcClient {\n _transport;\n typeName = RouterRpc.typeName;\n methods = RouterRpc.methods;\n options = RouterRpc.options;\n constructor(_transport) {\n this._transport = _transport;\n }\n /**\n * @generated from protobuf rpc: routeMessage\n */\n routeMessage(input, options) {\n const method = this.methods[0], opt = this._transport.mergeOptions(options);\n return stackIntercept(\"unary\", this._transport, method, opt, input);\n }\n /**\n * @generated from protobuf rpc: forwardMessage\n */\n forwardMessage(input, options) {\n const method = this.methods[1], opt = this._transport.mergeOptions(options);\n return stackIntercept(\"unary\", this._transport, method, opt, input);\n }\n}\n/**\n * @generated from protobuf service dht.RecursiveOperationRpc\n */\nexport class RecursiveOperationRpcClient {\n _transport;\n typeName = RecursiveOperationRpc.typeName;\n methods = RecursiveOperationRpc.methods;\n options = RecursiveOperationRpc.options;\n constructor(_transport) {\n this._transport = _transport;\n }\n /**\n * @generated from protobuf rpc: routeRequest\n */\n routeRequest(input, options) {\n const method = this.methods[0], opt = this._transport.mergeOptions(options);\n return stackIntercept(\"unary\", this._transport, method, opt, input);\n }\n}\n/**\n * @generated from protobuf service dht.StoreRpc\n */\nexport class StoreRpcClient {\n _transport;\n typeName = StoreRpc.typeName;\n methods = StoreRpc.methods;\n options = StoreRpc.options;\n constructor(_transport) {\n this._transport = _transport;\n }\n /**\n * @generated from protobuf rpc: storeData\n */\n storeData(input, options) {\n const method = this.methods[0], opt = this._transport.mergeOptions(options);\n return stackIntercept(\"unary\", this._transport, method, opt, input);\n }\n /**\n * @generated from protobuf rpc: replicateData\n */\n replicateData(input, options) {\n const method = this.methods[1], opt = this._transport.mergeOptions(options);\n return stackIntercept(\"unary\", this._transport, method, opt, input);\n }\n}\n/**\n * @generated from protobuf service dht.RecursiveOperationSessionRpc\n */\nexport class RecursiveOperationSessionRpcClient {\n _transport;\n typeName = RecursiveOperationSessionRpc.typeName;\n methods = RecursiveOperationSessionRpc.methods;\n options = RecursiveOperationSessionRpc.options;\n constructor(_transport) {\n this._transport = _transport;\n }\n /**\n * @generated from protobuf rpc: sendResponse\n */\n sendResponse(input, options) {\n const method = this.methods[0], opt = this._transport.mergeOptions(options);\n return stackIntercept(\"unary\", this._transport, method, opt, input);\n }\n}\n/**\n * @generated from protobuf service dht.WebsocketClientConnectorRpc\n */\nexport class WebsocketClientConnectorRpcClient {\n _transport;\n typeName = WebsocketClientConnectorRpc.typeName;\n methods = WebsocketClientConnectorRpc.methods;\n options = WebsocketClientConnectorRpc.options;\n constructor(_transport) {\n this._transport = _transport;\n }\n /**\n * @generated from protobuf rpc: requestConnection\n */\n requestConnection(input, options) {\n const method = this.methods[0], opt = this._transport.mergeOptions(options);\n return stackIntercept(\"unary\", this._transport, method, opt, input);\n }\n}\n/**\n * @generated from protobuf service dht.WebrtcConnectorRpc\n */\nexport class WebrtcConnectorRpcClient {\n _transport;\n typeName = WebrtcConnectorRpc.typeName;\n methods = WebrtcConnectorRpc.methods;\n options = WebrtcConnectorRpc.options;\n constructor(_transport) {\n this._transport = _transport;\n }\n /**\n * @generated from protobuf rpc: requestConnection\n */\n requestConnection(input, options) {\n const method = this.methods[0], opt = this._transport.mergeOptions(options);\n return stackIntercept(\"unary\", this._transport, method, opt, input);\n }\n /**\n * @generated from protobuf rpc: rtcOffer\n */\n rtcOffer(input, options) {\n const method = this.methods[1], opt = this._transport.mergeOptions(options);\n return stackIntercept(\"unary\", this._transport, method, opt, input);\n }\n /**\n * @generated from protobuf rpc: rtcAnswer\n */\n rtcAnswer(input, options) {\n const method = this.methods[2], opt = this._transport.mergeOptions(options);\n return stackIntercept(\"unary\", this._transport, method, opt, input);\n }\n /**\n * @generated from protobuf rpc: iceCandidate\n */\n iceCandidate(input, options) {\n const method = this.methods[3], opt = this._transport.mergeOptions(options);\n return stackIntercept(\"unary\", this._transport, method, opt, input);\n }\n}\n/**\n * @generated from protobuf service dht.ConnectionLockRpc\n */\nexport class ConnectionLockRpcClient {\n _transport;\n typeName = ConnectionLockRpc.typeName;\n methods = ConnectionLockRpc.methods;\n options = ConnectionLockRpc.options;\n constructor(_transport) {\n this._transport = _transport;\n }\n /**\n * @generated from protobuf rpc: lockRequest\n */\n lockRequest(input, options) {\n const method = this.methods[0], opt = this._transport.mergeOptions(options);\n return stackIntercept(\"unary\", this._transport, method, opt, input);\n }\n /**\n * @generated from protobuf rpc: unlockRequest\n */\n unlockRequest(input, options) {\n const method = this.methods[1], opt = this._transport.mergeOptions(options);\n return stackIntercept(\"unary\", this._transport, method, opt, input);\n }\n /**\n * @generated from protobuf rpc: gracefulDisconnect\n */\n gracefulDisconnect(input, options) {\n const method = this.methods[2], opt = this._transport.mergeOptions(options);\n return stackIntercept(\"unary\", this._transport, method, opt, input);\n }\n /**\n * @generated from protobuf rpc: setPrivate\n */\n setPrivate(input, options) {\n const method = this.methods[3], opt = this._transport.mergeOptions(options);\n return stackIntercept(\"unary\", this._transport, method, opt, input);\n }\n}\n/**\n * @generated from protobuf service dht.ExternalApiRpc\n */\nexport class ExternalApiRpcClient {\n _transport;\n typeName = ExternalApiRpc.typeName;\n methods = ExternalApiRpc.methods;\n options = ExternalApiRpc.options;\n constructor(_transport) {\n this._transport = _transport;\n }\n /**\n * @generated from protobuf rpc: externalFetchData\n */\n externalFetchData(input, options) {\n const method = this.methods[0], opt = this._transport.mergeOptions(options);\n return stackIntercept(\"unary\", this._transport, method, opt, input);\n }\n /**\n * @generated from protobuf rpc: externalStoreData\n */\n externalStoreData(input, options) {\n const method = this.methods[1], opt = this._transport.mergeOptions(options);\n return stackIntercept(\"unary\", this._transport, method, opt, input);\n }\n /**\n * @generated from protobuf rpc: externalFindClosestNodes\n */\n externalFindClosestNodes(input, options) {\n const method = this.methods[2], opt = this._transport.mergeOptions(options);\n return stackIntercept(\"unary\", this._transport, method, opt, input);\n }\n}\n","export const DEFAULT_SEND_OPTIONS = {\n connect: true,\n sendIfStopped: false,\n bufferWhileConnecting: true\n};\n","import { ProtoCallContext } from '@streamr/proto-rpc';\nexport class DhtCallContext extends ProtoCallContext {\n // used by client\n targetDescriptor;\n sourceDescriptor;\n clientId;\n connect;\n sendIfStopped;\n bufferWhileConnecting;\n //used in incoming calls\n incomingSourceDescriptor;\n}\n","import { v4 } from 'uuid';\nimport { RpcCommunicator } from '@streamr/proto-rpc';\nimport { DhtCallContext } from '../rpc-protocol/DhtCallContext';\nimport { DEFAULT_SEND_OPTIONS } from './ITransport';\nexport class RoutingRpcCommunicator extends RpcCommunicator {\n ownServiceId;\n constructor(ownServiceId, sendFn, options) {\n super(options);\n this.ownServiceId = ownServiceId;\n this.setOutgoingMessageListener((msg, _requestId, callContext) => {\n let targetDescriptor;\n // rpc call message\n if (callContext.targetDescriptor) {\n targetDescriptor = callContext.targetDescriptor;\n }\n else { // rpc reply message\n targetDescriptor = callContext.incomingSourceDescriptor;\n }\n const message = {\n messageId: v4(),\n serviceId: this.ownServiceId,\n body: {\n oneofKind: 'rpcMessage',\n rpcMessage: msg\n },\n targetDescriptor\n };\n // TODO maybe sendOptions could be a separate block inside callContext\n const sendOpts = (msg.header.response !== undefined)\n ? {\n // typically we already have a connection, but if it has disconnected for some reason\n // the receiver could have gone offline (or it is no longer a neighbor) and therefore there\n // is no point in trying form a new connection\n connect: false,\n // TODO maybe this options could be removed?\n sendIfStopped: true,\n // Responses should be buffered if necessary\n bufferWhileConnecting: true\n } : {\n connect: callContext?.connect ?? DEFAULT_SEND_OPTIONS.connect,\n sendIfStopped: callContext?.sendIfStopped ?? DEFAULT_SEND_OPTIONS.sendIfStopped,\n bufferWhileConnecting: callContext?.bufferWhileConnecting ?? DEFAULT_SEND_OPTIONS.bufferWhileConnecting\n };\n return sendFn(message, sendOpts);\n });\n }\n handleMessageFromPeer(message) {\n if (message.serviceId === this.ownServiceId && message.body.oneofKind === 'rpcMessage') {\n const context = new DhtCallContext();\n context.incomingSourceDescriptor = message.sourceDescriptor;\n // TODO should we have some handling for this floating promise?\n this.handleIncomingMessage(message.body.rpcMessage, context);\n }\n }\n}\n","// Connection locks are independent of the existence of connections\n// that is why this class is needed\nexport class ConnectionLockStates {\n localLocks = new Map();\n remoteLocks = new Map();\n // TODO: remove weakLocks use localLocks instead. When opening weakLocks from the ConnectioManager,\n // simply do not send lock requests.\n weakLocks = new Map();\n // Used to filter proxy connections from the connections view\n remotePrivateConnections = new Set();\n getLocalLockedConnectionCount() {\n return this.localLocks.size;\n }\n getRemoteLockedConnectionCount() {\n return this.remoteLocks.size;\n }\n getWeakLockedConnectionCount() {\n return this.weakLocks.size;\n }\n isLocalLocked(id, lockId) {\n if (lockId === undefined) {\n return this.localLocks.has(id);\n }\n else {\n return this.localLocks.has(id) && this.localLocks.get(id).has(lockId);\n }\n }\n isRemoteLocked(id, lockId) {\n if (lockId === undefined) {\n return this.remoteLocks.has(id);\n }\n else if (this.remoteLocks.has(id) && this.remoteLocks.get(id).has(lockId)) {\n return true;\n }\n else {\n return false;\n }\n }\n isWeakLocked(id) {\n return this.weakLocks.has(id);\n }\n isLocked(id) {\n return (this.isLocalLocked(id) || this.isRemoteLocked(id) || this.isWeakLocked(id));\n }\n addLocalLocked(id, lockId) {\n if (!this.localLocks.has(id)) {\n this.localLocks.set(id, new Set());\n }\n this.localLocks.get(id).add(lockId);\n }\n addRemoteLocked(id, lockId) {\n if (!this.remoteLocks.has(id)) {\n this.remoteLocks.set(id, new Set());\n }\n this.remoteLocks.get(id).add(lockId);\n }\n addWeakLocked(id, lockId) {\n if (!this.weakLocks.has(id)) {\n this.weakLocks.set(id, new Set());\n }\n this.weakLocks.get(id).add(lockId);\n }\n removeLocalLocked(id, lockId) {\n if (this.localLocks.has(id)) {\n this.localLocks.get(id)?.delete(lockId);\n if (this.localLocks.get(id)?.size === 0) {\n this.localLocks.delete(id);\n }\n }\n }\n removeRemoteLocked(id, lockId) {\n if (this.remoteLocks.has(id)) {\n this.remoteLocks.get(id)?.delete(lockId);\n if (this.remoteLocks.get(id)?.size === 0) {\n this.remoteLocks.delete(id);\n }\n }\n }\n removeWeakLocked(id, lockId) {\n if (this.weakLocks.has(id)) {\n this.weakLocks.get(id)?.delete(lockId);\n if (this.weakLocks.get(id)?.size === 0) {\n this.weakLocks.delete(id);\n }\n }\n }\n addPrivate(id) {\n this.remotePrivateConnections.add(id);\n }\n removePrivate(id) {\n this.remotePrivateConnections.delete(id);\n }\n getPrivateConnections() {\n return this.remotePrivateConnections;\n }\n isPrivate(id) {\n return this.remotePrivateConnections.has(id);\n }\n clearAllLocks(id) {\n this.localLocks.delete(id);\n this.remoteLocks.delete(id);\n this.weakLocks.delete(id);\n }\n clear() {\n this.localLocks.clear();\n this.remoteLocks.clear();\n this.weakLocks.clear();\n }\n}\n","import { toNodeId } from '../../identifiers';\n/**\n * Retrieves a string representation of a node ID from a given peer descriptor.\n * If the peer descriptor is undefined, it returns 'unknown'.\n *\n * This function is intended for logging purposes only and should be removed\n * if the conditions outlined in the TODO comment are met, such as:\n * - Refactoring ConnectionManager to prevent early processing of handshake requests,\n * ensuring this.localPeerDescriptor is never undefined (NET-1129).\n * - Ensuring the peerDescriptor of ManagedConnection is always available.\n * - Creating stricter types for incoming messages, such as message.sourceDescriptor\n * or disconnectNotice.peerDescriptor.\n * - Guaranteeing that ManagedConnection#peerDescriptor is never undefined.\n *\n * @param peerDescriptor - The peer descriptor from which to derive the node ID,\n * or undefined if not available.\n * @returns A string representation of the node ID or 'unknown' if the peer descriptor is undefined.\n */\nexport const getNodeIdOrUnknownFromPeerDescriptor = (peerDescriptor) => {\n if (peerDescriptor !== undefined) {\n return toNodeId(peerDescriptor);\n }\n else {\n return 'unknown';\n }\n};\n","import { EventEmitter } from 'eventemitter3';\nimport { v4 as uuid } from 'uuid';\nexport class Connection extends EventEmitter {\n connectionId;\n connectionType;\n peerDescriptor;\n constructor(connectionType) {\n super();\n this.connectionId = createRandomConnectionId();\n this.connectionType = connectionType;\n }\n setPeerDescriptor(peerDescriptor) {\n this.peerDescriptor = peerDescriptor;\n }\n getPeerDescriptor() {\n return this.peerDescriptor;\n }\n}\nexport const createRandomConnectionId = () => {\n return uuid();\n};\n","import * as Err from '../helpers/errors';\nimport { Logger } from '@streamr/utils';\nimport { EventEmitter } from 'eventemitter3';\nimport { getNodeIdOrUnknownFromPeerDescriptor } from './helpers/getNodeIdOrUnknownFromPeerDescriptor';\nimport { toNodeId } from '../identifiers';\nimport { createRandomConnectionId } from './Connection';\nconst logger = new Logger('ManagedConnection');\n// ManagedConnection is a component used as a wrapper for IConnection after they have been successfully handshaked.\n// Should only be used in the ConnectionManager.\nexport class ManagedConnection extends EventEmitter {\n connection;\n connectionId;\n remotePeerDescriptor;\n lastUsedTimestamp = Date.now();\n replacedAsDuplicate = false;\n stopped = false;\n openedAt = Date.now();\n bytesSent = 0;\n bytesReceived = 0;\n messagesSent = 0;\n messagesReceived = 0;\n constructor(peerDescriptor, connection) {\n super();\n this.connectionId = createRandomConnectionId();\n this.connection = connection;\n connection.on('data', (bytes) => {\n this.lastUsedTimestamp = Date.now();\n this.messagesReceived += 1;\n this.bytesReceived += bytes.length;\n this.emit('managedData', bytes, this.getPeerDescriptor());\n });\n connection.on('disconnected', (gracefulLeave) => this.onDisconnected(gracefulLeave));\n this.lastUsedTimestamp = Date.now();\n this.remotePeerDescriptor = peerDescriptor;\n }\n onDisconnected(gracefulLeave) {\n logger.trace(getNodeIdOrUnknownFromPeerDescriptor(this.remotePeerDescriptor) + ' onDisconnected() ' + gracefulLeave);\n if (!this.replacedAsDuplicate) {\n this.emit('disconnected', gracefulLeave);\n }\n this.removeAllListeners();\n }\n // TODO: Can this be removed if ManagedConnections can never be duplicates?\n // Handle duplicates in the ConncetorFacade and no longer have PendingConnections in ConnectionManager\n replaceAsDuplicate() {\n logger.trace(getNodeIdOrUnknownFromPeerDescriptor(this.remotePeerDescriptor) + ' replaceAsDuplicate');\n this.replacedAsDuplicate = true;\n }\n send(data) {\n if (this.stopped) {\n throw new Err.SendFailed('ManagedConnection is stopped');\n }\n this.lastUsedTimestamp = Date.now();\n this.messagesSent += 1;\n this.bytesSent += data.length;\n this.connection.send(data);\n }\n async close(gracefulLeave) {\n if (this.stopped) {\n return;\n }\n await this.connection.close(gracefulLeave);\n this.removeAllListeners();\n }\n getNodeId() {\n return toNodeId(this.remotePeerDescriptor);\n }\n getLastUsedTimestamp() {\n return this.lastUsedTimestamp;\n }\n getPeerDescriptor() {\n return this.remotePeerDescriptor;\n }\n getDiagnosticInfo() {\n return {\n remotePeerDescriptor: this.remotePeerDescriptor,\n lastUsedTimestamp: this.lastUsedTimestamp,\n replacedAsDuplicate: this.replacedAsDuplicate,\n stopped: this.stopped,\n openedAt: this.openedAt,\n bytesSent: this.bytesSent,\n bytesReceived: this.bytesReceived,\n messagesSent: this.messagesSent,\n messagesReceived: this.messagesReceived\n // Add connection type?\n };\n }\n}\n","export var ConnectionType;\n(function (ConnectionType) {\n ConnectionType[\"WEBSOCKET_SERVER\"] = \"websocket-server\";\n ConnectionType[\"WEBSOCKET_CLIENT\"] = \"websocket-client\";\n ConnectionType[\"WEBRTC\"] = \"webrtc\";\n ConnectionType[\"SIMULATOR_SERVER\"] = \"simulator-server\";\n ConnectionType[\"SIMULATOR_CLIENT\"] = \"simulator-client\";\n})(ConnectionType || (ConnectionType = {}));\n","import ipaddr from 'ipaddr.js';\n// IPv4 private address ranges as specified by RFC 1918\n// and private loopback addresses\nconst IPv4PrivateRanges = [\n '10.0.0.0/8',\n '172.16.0.0/12',\n '192.168.0.0/16',\n '127.0.0.0/8'\n].map((a) => ipaddr.parseCIDR(a));\nexport function isPrivateIPv4(address) {\n if (ipaddr.IPv4.isValid(address)) {\n const ip = ipaddr.IPv4.parse(address);\n for (const range of IPv4PrivateRanges) {\n if (ip.match(range)) {\n return true;\n }\n }\n }\n return false;\n}\nexport function getAddressFromIceCandidate(candidate) {\n const fields = candidate.split(' ').filter((field) => field.length > 0);\n return fields.length >= 5 && ipaddr.isValid(fields[4]) ? fields[4] : undefined;\n}\n","import { ConnectionType } from '../connection/IConnection';\nimport { NodeType } from '../../generated/packages/dht/protos/DhtRpc';\nimport { isPrivateIPv4 } from './AddressTools';\nexport const canOpenConnectionFromBrowser = (websocketServer) => {\n const hasPrivateAddress = ((websocketServer.host === 'localhost') || isPrivateIPv4(websocketServer.host));\n return websocketServer.tls || hasPrivateAddress;\n};\nexport const expectedConnectionType = (localPeerDescriptor, remotePeerDescriptor) => {\n if (remotePeerDescriptor.websocket\n && (localPeerDescriptor.type !== NodeType.BROWSER || canOpenConnectionFromBrowser(remotePeerDescriptor.websocket))) {\n return ConnectionType.WEBSOCKET_CLIENT;\n }\n else if (localPeerDescriptor.websocket\n && (remotePeerDescriptor.type !== NodeType.BROWSER || canOpenConnectionFromBrowser(localPeerDescriptor.websocket))) {\n return ConnectionType.WEBSOCKET_SERVER;\n }\n return ConnectionType.WEBRTC;\n};\n","import { toProtoRpcClient } from '@streamr/proto-rpc';\nimport { ConnectionType } from '../../connection/IConnection';\nimport { expectedConnectionType } from '../../helpers/Connectivity';\n// Should connect directly to the server, timeout can be low\nconst WEBSOCKET_CLIENT_TIMEOUT = 5000;\n// Requires a WebsocketConnectionRequest to be routed to the client before the connection can be opened\n// takes a little bit longer than WEBSOCKET_CLIENT\nconst WEBSOCKET_SERVER_TIMEOUT = 7500;\n// WebRTC connections require lots of signalling to open and might take a longer time.\nconst WEBRTC_TIMEOUT = 10000;\n// default timeout for existing connections\nexport const EXISTING_CONNECTION_TIMEOUT = 5000;\nconst getTimeout = (localPeerDescriptor, remotePeerDescriptor) => {\n const connectionType = expectedConnectionType(localPeerDescriptor, remotePeerDescriptor);\n if (connectionType === ConnectionType.WEBSOCKET_CLIENT) {\n return WEBSOCKET_CLIENT_TIMEOUT;\n }\n else if (connectionType === ConnectionType.WEBSOCKET_SERVER) {\n return WEBSOCKET_SERVER_TIMEOUT;\n }\n else if (connectionType === ConnectionType.WEBRTC) {\n return WEBRTC_TIMEOUT;\n }\n return WEBRTC_TIMEOUT;\n};\nexport class RpcRemote {\n localPeerDescriptor;\n remotePeerDescriptor;\n client;\n timeout;\n constructor(localPeerDescriptor, remotePeerDescriptor, rpcCommunicator, \n // eslint-disable-next-line @typescript-eslint/prefer-function-type\n clientClass, timeout) {\n this.localPeerDescriptor = localPeerDescriptor;\n this.remotePeerDescriptor = remotePeerDescriptor;\n this.client = toProtoRpcClient(new clientClass(rpcCommunicator.getRpcClientTransport()));\n this.timeout = timeout;\n }\n getPeerDescriptor() {\n return this.remotePeerDescriptor;\n }\n getLocalPeerDescriptor() {\n return this.localPeerDescriptor;\n }\n getClient() {\n return this.client;\n }\n formDhtRpcOptions(opts) {\n return {\n sourceDescriptor: this.localPeerDescriptor,\n targetDescriptor: this.remotePeerDescriptor,\n timeout: this.timeout ?? getTimeout(this.localPeerDescriptor, this.remotePeerDescriptor),\n ...opts\n };\n }\n}\n","import { Logger } from '@streamr/utils';\nimport { RpcRemote } from '../dht/contact/RpcRemote';\nimport { toNodeId } from '../identifiers';\nconst logger = new Logger('ConnectionLockRpcRemote');\nexport class ConnectionLockRpcRemote extends RpcRemote {\n async lockRequest(lockId) {\n logger.trace(`Requesting locked connection to ${toNodeId(this.getPeerDescriptor())}`);\n const request = {\n lockId\n };\n const options = this.formDhtRpcOptions();\n try {\n const res = await this.getClient().lockRequest(request, options);\n return res.accepted;\n }\n catch (err) {\n logger.debug('Connection lock rejected', { err });\n return false;\n }\n }\n unlockRequest(lockId) {\n logger.trace(`Requesting connection to be unlocked from ${toNodeId(this.getPeerDescriptor())}`);\n const request = {\n lockId\n };\n const options = this.formDhtRpcOptions({\n notification: true\n });\n this.getClient().unlockRequest(request, options).catch((_e) => {\n logger.trace('failed to send unlockRequest');\n });\n }\n async gracefulDisconnect(disconnectMode) {\n logger.trace(`Notifying a graceful disconnect to ${toNodeId(this.getPeerDescriptor())}`);\n const request = {\n disconnectMode\n };\n const options = this.formDhtRpcOptions({\n connect: false,\n sendIfStopped: true,\n timeout: 2000 // TODO use options option or named constant?\n });\n await this.getClient().gracefulDisconnect(request, options);\n }\n async setPrivate(isPrivate) {\n logger.trace(`Setting isPrivate: ${isPrivate} for ${toNodeId(this.getPeerDescriptor())}`);\n const request = {\n isPrivate\n };\n const options = this.formDhtRpcOptions({\n connect: false,\n notification: true\n });\n await this.getClient().setPrivate(request, options);\n }\n}\n","import { Logger } from '@streamr/utils';\nimport { DisconnectMode } from '../../generated/packages/dht/protos/DhtRpc';\nimport { getNodeIdOrUnknownFromPeerDescriptor } from './helpers/getNodeIdOrUnknownFromPeerDescriptor';\nimport { areEqualPeerDescriptors, toNodeId } from '../identifiers';\nconst logger = new Logger('ConnectionLockRpcLocal');\nexport class ConnectionLockRpcLocal {\n options;\n constructor(options) {\n this.options = options;\n }\n async lockRequest(lockRequest, context) {\n const senderPeerDescriptor = context.incomingSourceDescriptor;\n if (areEqualPeerDescriptors(senderPeerDescriptor, this.options.getLocalPeerDescriptor())) {\n const response = {\n accepted: false\n };\n return response;\n }\n const remoteNodeId = toNodeId(senderPeerDescriptor);\n this.options.addRemoteLocked(remoteNodeId, lockRequest.lockId);\n const response = {\n accepted: true\n };\n return response;\n }\n async unlockRequest(unlockRequest, context) {\n const senderPeerDescriptor = context.incomingSourceDescriptor;\n const nodeId = toNodeId(senderPeerDescriptor);\n this.options.removeRemoteLocked(nodeId, unlockRequest.lockId);\n return {};\n }\n async gracefulDisconnect(disconnectNotice, context) {\n const senderPeerDescriptor = context.incomingSourceDescriptor;\n logger.trace(getNodeIdOrUnknownFromPeerDescriptor(senderPeerDescriptor) + ' received gracefulDisconnect notice');\n if (disconnectNotice.disconnectMode === DisconnectMode.LEAVING) {\n await this.options.closeConnection(senderPeerDescriptor, true, 'graceful leave notified');\n }\n else {\n await this.options.closeConnection(senderPeerDescriptor, false, 'graceful disconnect notified');\n }\n return {};\n }\n async setPrivate(request, context) {\n const senderPeerDescriptor = context.incomingSourceDescriptor;\n const senderId = toNodeId(senderPeerDescriptor);\n this.options.setPrivate(senderId, request.isPrivate);\n return {};\n }\n}\n","import { computeMd5 } from '@streamr/utils';\nexport const getOfferer = (localNodeId, remoteNodeId) => {\n return getOfferingHash(localNodeId + ',' + remoteNodeId) < getOfferingHash(remoteNodeId + ',' + localNodeId)\n ? 'local'\n : 'remote';\n};\nconst getOfferingHash = (idPair) => {\n return computeMd5(idPair).readInt32LE(0);\n};\n","import { Defer } from '@streamr/utils';\nimport { SendFailed } from '../helpers/errors';\nexport class OutputBuffer {\n buffer = [];\n deferredPromise = new Defer();\n push(message) {\n this.buffer.push(message);\n return this.deferredPromise;\n }\n getBuffer() {\n return this.buffer;\n }\n resolve() {\n this.buffer.length = 0;\n this.deferredPromise.resolve();\n }\n reject() {\n this.buffer.length = 0;\n this.deferredPromise.reject(new SendFailed('Could not send buffered messages'));\n }\n}\n","import { CountMetric, LevelMetric, Logger, MetricsContext, RateMetric, waitForEvent } from '@streamr/utils';\nimport { EventEmitter } from 'eventemitter3';\nimport { SortedContactList } from '../dht/contact/SortedContactList';\nimport { DuplicateDetector } from '../dht/routing/DuplicateDetector';\nimport * as Err from '../helpers/errors';\nimport { DisconnectMode, DisconnectNotice, LockRequest, LockResponse, Message, UnlockRequest, SetPrivateRequest } from '../../generated/packages/dht/protos/DhtRpc';\nimport { ConnectionLockRpcClient } from '../../generated/packages/dht/protos/DhtRpc.client';\nimport { DEFAULT_SEND_OPTIONS } from '../transport/ITransport';\nimport { RoutingRpcCommunicator } from '../transport/RoutingRpcCommunicator';\nimport { ConnectionLockStates } from './ConnectionLockStates';\nimport { ManagedConnection } from './ManagedConnection';\nimport { ConnectionLockRpcRemote } from './ConnectionLockRpcRemote';\nimport { ConnectionLockRpcLocal } from './ConnectionLockRpcLocal';\nimport { areEqualPeerDescriptors, toNodeId } from '../identifiers';\nimport { getOfferer } from '../helpers/offering';\nimport { OutputBuffer } from './OutputBuffer';\nimport { getNodeIdOrUnknownFromPeerDescriptor } from './helpers/getNodeIdOrUnknownFromPeerDescriptor';\nexport var NatType;\n(function (NatType) {\n NatType[\"OPEN_INTERNET\"] = \"open_internet\";\n NatType[\"UNKNOWN\"] = \"unknown\";\n})(NatType || (NatType = {}));\nconst logger = new Logger('ConnectionManager');\nvar ConnectionManagerState;\n(function (ConnectionManagerState) {\n ConnectionManagerState[\"IDLE\"] = \"idle\";\n ConnectionManagerState[\"RUNNING\"] = \"running\";\n ConnectionManagerState[\"STOPPING\"] = \"stopping\";\n ConnectionManagerState[\"STOPPED\"] = \"stopped\";\n})(ConnectionManagerState || (ConnectionManagerState = {}));\nconst INTERNAL_SERVICE_ID = 'system/connection-manager';\nexport class ConnectionManager extends EventEmitter {\n options;\n metricsContext;\n // TODO use options option or named constant?\n duplicateMessageDetector = new DuplicateDetector(10000);\n metrics;\n locks = new ConnectionLockStates();\n endpoints = new Map();\n connectorFacade;\n rpcCommunicator;\n disconnectorIntervalRef;\n state = ConnectionManagerState.IDLE;\n privateClientMode = false;\n constructor(options) {\n super();\n this.options = options;\n this.onData = this.onData.bind(this);\n this.send = this.send.bind(this);\n this.onNewConnection = this.onNewConnection.bind(this);\n this.metricsContext = this.options.metricsContext ?? new MetricsContext();\n this.metrics = {\n sendMessagesPerSecond: new RateMetric(),\n sendBytesPerSecond: new RateMetric(),\n receiveMessagesPerSecond: new RateMetric(),\n receiveBytesPerSecond: new RateMetric(),\n connectionAverageCount: new LevelMetric(0),\n connectionTotalFailureCount: new CountMetric()\n };\n this.metricsContext.addMetrics('node', this.metrics);\n this.connectorFacade = this.options.createConnectorFacade();\n this.send = this.send.bind(this);\n this.rpcCommunicator = new RoutingRpcCommunicator(INTERNAL_SERVICE_ID, this.send, {\n rpcRequestTimeout: 10000 // TODO use options option or named constant?\n });\n const lockRpcLocal = new ConnectionLockRpcLocal({\n addRemoteLocked: (id, lockId) => this.locks.addRemoteLocked(id, lockId),\n removeRemoteLocked: (id, lockId) => this.locks.removeRemoteLocked(id, lockId),\n closeConnection: (peerDescriptor, gracefulLeave, reason) => this.closeConnection(peerDescriptor, gracefulLeave, reason),\n getLocalPeerDescriptor: () => this.getLocalPeerDescriptor(),\n setPrivate: (id, isPrivate) => {\n if (!this.options.allowIncomingPrivateConnections) {\n logger.debug(`node ${id} attemted to set a connection as private, but it is not allowed`);\n return;\n }\n if (isPrivate) {\n this.locks.addPrivate(id);\n }\n else {\n this.locks.removePrivate(id);\n }\n }\n });\n this.rpcCommunicator.registerRpcMethod(LockRequest, LockResponse, 'lockRequest', (req, context) => lockRpcLocal.lockRequest(req, context));\n this.rpcCommunicator.registerRpcNotification(UnlockRequest, 'unlockRequest', (req, context) => lockRpcLocal.unlockRequest(req, context));\n this.rpcCommunicator.registerRpcNotification(DisconnectNotice, 'gracefulDisconnect', (req, context) => lockRpcLocal.gracefulDisconnect(req, context));\n this.rpcCommunicator.registerRpcNotification(SetPrivateRequest, 'setPrivate', (req, context) => lockRpcLocal.setPrivate(req, context));\n }\n /*\n * Removes connections if there are more than maxConnections: in that case we remove unlocked connections\n * which hasn't been used within maxIdleTime.\n */\n garbageCollectConnections(maxConnections, maxIdleTime) {\n if (this.endpoints.size <= maxConnections) {\n return;\n }\n const disconnectionCandidates = new SortedContactList({\n referenceId: toNodeId(this.getLocalPeerDescriptor()),\n maxSize: 100000, // TODO use options option or named constant?\n allowToContainReferenceId: false\n });\n this.endpoints.forEach((endpoint) => {\n if (endpoint.connected) {\n const connection = endpoint.connection;\n const nodeId = connection.getNodeId();\n if (!this.locks.isLocked(nodeId) && !this.locks.isPrivate(nodeId) && Date.now() - connection.getLastUsedTimestamp() > maxIdleTime) {\n logger.trace('disconnecting in timeout interval: ' + getNodeIdOrUnknownFromPeerDescriptor(connection.getPeerDescriptor()));\n disconnectionCandidates.addContact(connection);\n }\n }\n });\n const disconnectables = disconnectionCandidates.getFurthestContacts(this.endpoints.size - maxConnections);\n for (const disconnectable of disconnectables) {\n const peerDescriptor = disconnectable.getPeerDescriptor();\n logger.trace('garbageCollecting ' + toNodeId(peerDescriptor));\n this.gracefullyDisconnectAsync(peerDescriptor, DisconnectMode.NORMAL).catch((_e) => { });\n }\n }\n async start() {\n if (this.state === ConnectionManagerState.RUNNING || this.state === ConnectionManagerState.STOPPED) {\n throw new Err.CouldNotStart(`Cannot start already ${this.state} module`);\n }\n this.state = ConnectionManagerState.RUNNING;\n logger.trace(`Starting ConnectionManager...`);\n await this.connectorFacade.start((connection) => this.onNewConnection(connection), (nodeId) => this.hasConnection(nodeId), this);\n // Garbage collection of connections\n this.disconnectorIntervalRef = setInterval(() => {\n logger.trace('disconnectorInterval');\n const LAST_USED_LIMIT = 20000;\n this.garbageCollectConnections(this.options.maxConnections ?? 80, LAST_USED_LIMIT);\n }, 5000); // TODO use options option or named constant?\n }\n async stop() {\n if (this.state === ConnectionManagerState.STOPPED || this.state === ConnectionManagerState.STOPPING) {\n return;\n }\n this.state = ConnectionManagerState.STOPPING;\n logger.trace(`Stopping ConnectionManager`);\n if (this.disconnectorIntervalRef) {\n clearInterval(this.disconnectorIntervalRef);\n }\n await Promise.all(Array.from(this.endpoints.values()).map(async (endpoint) => {\n if (endpoint.connected) {\n try {\n await this.gracefullyDisconnectAsync(endpoint.connection.getPeerDescriptor(), DisconnectMode.LEAVING);\n }\n catch (e) {\n logger.error(e);\n }\n }\n else {\n const connection = endpoint.connection;\n logger.trace('handshake of connection not completed, force-closing');\n // TODO use options option or named constant?\n const eventReceived = waitForEvent(connection, 'disconnected', 2000);\n // TODO should we have some handling for this floating promise?\n connection.close(true);\n try {\n await eventReceived;\n logger.trace('resolving after receiving disconnected event from non-handshaked connection');\n }\n catch (e) {\n endpoint.buffer.reject();\n logger.trace('force-closing non-handshaked connection timed out ' + e);\n }\n }\n }));\n await this.connectorFacade.stop();\n this.state = ConnectionManagerState.STOPPED;\n this.rpcCommunicator.stop();\n this.duplicateMessageDetector.clear();\n this.locks.clear();\n this.removeAllListeners();\n }\n getLocalLockedConnectionCount() {\n return this.locks.getLocalLockedConnectionCount();\n }\n getRemoteLockedConnectionCount() {\n return this.locks.getRemoteLockedConnectionCount();\n }\n getWeakLockedConnectionCount() {\n return this.locks.getWeakLockedConnectionCount();\n }\n async send(message, opts = DEFAULT_SEND_OPTIONS) {\n if ((this.state === ConnectionManagerState.STOPPED || this.state === ConnectionManagerState.STOPPING) && !opts.sendIfStopped) {\n return;\n }\n const peerDescriptor = message.targetDescriptor;\n if (this.isConnectionToSelf(peerDescriptor)) {\n throw new Err.CannotConnectToSelf('Cannot send to self');\n }\n const nodeId = toNodeId(peerDescriptor);\n logger.trace(`Sending message to: ${nodeId}`);\n message = {\n ...message,\n sourceDescriptor: this.getLocalPeerDescriptor()\n };\n let connection = this.endpoints.get(nodeId)?.connection;\n if (!connection && opts.connect) {\n connection = this.connectorFacade.createConnection(peerDescriptor);\n this.onNewConnection(connection);\n }\n else if (!connection || (connection && !this.endpoints.get(nodeId).connected && !opts.connect)) {\n throw new Err.SendFailed('No connection to target, connect flag is false');\n }\n const binary = Message.toBinary(message);\n this.metrics.sendBytesPerSecond.record(binary.byteLength);\n this.metrics.sendMessagesPerSecond.record(1);\n if (this.endpoints.get(nodeId).connected) {\n connection.send(binary);\n }\n else if (opts.bufferWhileConnecting) {\n return this.endpoints.get(nodeId).buffer.push(binary);\n }\n }\n isConnectionToSelf(peerDescriptor) {\n return areEqualPeerDescriptors(peerDescriptor, this.getLocalPeerDescriptor()) || this.isOwnWebsocketServer(peerDescriptor);\n }\n isOwnWebsocketServer(peerDescriptor) {\n const localPeerDescriptor = this.getLocalPeerDescriptor();\n if ((peerDescriptor.websocket !== undefined) && (localPeerDescriptor.websocket !== undefined)) {\n return ((peerDescriptor.websocket.port === localPeerDescriptor.websocket.port)\n && (peerDescriptor.websocket.host === localPeerDescriptor.websocket.host));\n }\n else {\n return false;\n }\n }\n getLocalPeerDescriptor() {\n return this.connectorFacade.getLocalPeerDescriptor();\n }\n hasConnection(nodeId) {\n // TODO if we remove filtering in getConnections, this can just be this.connection.has(nodeId)\n return this.getConnections().some((c) => toNodeId(c) == nodeId);\n }\n getConnectionCount() {\n // TODO if we remove filtering in getConnections, this can just be this.connection.length\n return this.getConnections().length;\n }\n hasLocalLockedConnection(nodeId) {\n return this.locks.isLocalLocked(nodeId);\n }\n hasRemoteLockedConnection(nodeId) {\n return this.locks.isRemoteLocked(nodeId);\n }\n handleMessage(message) {\n const messageType = message.body.oneofKind;\n logger.trace('Received message of type ' + messageType);\n if (messageType !== 'rpcMessage') {\n logger.trace('Filtered out non-RPC message of type ' + messageType);\n return;\n }\n if (this.duplicateMessageDetector.isMostLikelyDuplicate(message.messageId)) {\n logger.trace('handleMessage filtered duplicate ' + toNodeId(message.sourceDescriptor)\n + ' ' + message.serviceId + ' ' + message.messageId);\n return;\n }\n this.duplicateMessageDetector.add(message.messageId);\n if (message.serviceId === INTERNAL_SERVICE_ID) {\n this.rpcCommunicator?.handleMessageFromPeer(message);\n }\n else {\n logger.trace('emit \"message\" ' + toNodeId(message.sourceDescriptor)\n + ' ' + message.serviceId + ' ' + message.messageId);\n this.emit('message', message);\n }\n }\n onData(data, peerDescriptor) {\n if (this.state === ConnectionManagerState.STOPPED) {\n return;\n }\n this.metrics.receiveBytesPerSecond.record(data.byteLength);\n this.metrics.receiveMessagesPerSecond.record(1);\n let message;\n try {\n message = Message.fromBinary(data);\n }\n catch (e) {\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n logger.debug(`Parsing incoming data into Message failed: ${e}`);\n return;\n }\n message.sourceDescriptor = peerDescriptor;\n try {\n this.handleMessage(message);\n }\n catch (e) {\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n logger.debug(`Handling incoming data failed: ${e}`);\n }\n }\n onConnected(peerDescriptor, connection) {\n const managedConnection = new ManagedConnection(peerDescriptor, connection);\n managedConnection.on('managedData', this.onData);\n managedConnection.once('disconnected', (gracefulLeave) => this.onDisconnected(peerDescriptor, gracefulLeave));\n const nodeId = toNodeId(peerDescriptor);\n const endpoint = this.endpoints.get(nodeId);\n const outputBuffer = endpoint.buffer;\n const pendingConnection = endpoint.connection;\n const buffer = outputBuffer.getBuffer();\n while (buffer.length > 0) {\n logger.trace('emptying buffer');\n managedConnection.send(buffer.shift());\n }\n outputBuffer.resolve();\n pendingConnection.destroy();\n this.endpoints.set(nodeId, {\n connected: true,\n connection: managedConnection\n });\n if (this.privateClientMode) {\n this.setPrivateForConnection(peerDescriptor, this.privateClientMode).catch(() => { });\n }\n this.emit('connected', peerDescriptor);\n this.onConnectionCountChange();\n }\n onDisconnected(peerDescriptor, gracefulLeave) {\n const nodeId = toNodeId(peerDescriptor);\n logger.trace(nodeId + ' onDisconnected() gracefulLeave: ' + gracefulLeave);\n const endpoint = this.endpoints.get(nodeId);\n if (endpoint) {\n this.locks.clearAllLocks(nodeId);\n if (endpoint.connected === false) {\n endpoint.buffer.reject();\n }\n this.endpoints.delete(nodeId);\n logger.trace(nodeId + ' deleted connection in onDisconnected() gracefulLeave: ' + gracefulLeave);\n this.emit('disconnected', peerDescriptor, gracefulLeave);\n this.onConnectionCountChange();\n }\n }\n onNewConnection(connection) {\n if (this.state === ConnectionManagerState.STOPPED) {\n return false;\n }\n logger.trace('onNewConnection()');\n if (!this.acceptNewConnection(connection)) {\n return false;\n }\n connection.once('connected', (peerDescriptor, connection) => this.onConnected(peerDescriptor, connection));\n connection.once('disconnected', (gracefulLeave) => this.onDisconnected(connection.getPeerDescriptor(), gracefulLeave));\n return true;\n }\n acceptNewConnection(newConnection) {\n const nodeId = toNodeId(newConnection.getPeerDescriptor());\n logger.trace(nodeId + ' acceptNewConnection()');\n if (this.endpoints.has(nodeId)) {\n if (getOfferer(toNodeId(this.getLocalPeerDescriptor()), nodeId) === 'remote') {\n let buffer;\n const endpoint = this.endpoints.get(nodeId);\n // This is a rare occurance but it does happen from time to time.\n // Could be related to WS client connections not realizing that they have been disconnected.\n // Makes refactoring duplicate connection handling to the connectors very difficult. \n if (this.endpoints.get(nodeId).connected) {\n logger.debug('replacing connected connection', { nodeId });\n buffer = new OutputBuffer();\n }\n else {\n buffer = endpoint.buffer;\n }\n const oldConnection = endpoint.connection;\n logger.trace('replaced: ' + nodeId);\n oldConnection.replaceAsDuplicate();\n this.endpoints.set(nodeId, { connected: false, connection: newConnection, buffer: buffer });\n return true;\n }\n else {\n return false;\n }\n }\n logger.trace(nodeId + ' added to connections at acceptNewConnection');\n this.endpoints.set(nodeId, {\n connected: false,\n buffer: new OutputBuffer(),\n connection: newConnection\n });\n return true;\n }\n async closeConnection(peerDescriptor, gracefulLeave, reason) {\n const nodeId = toNodeId(peerDescriptor);\n logger.trace(nodeId + ' ' + 'closeConnection() ' + reason);\n this.locks.clearAllLocks(nodeId);\n if (this.endpoints.has(nodeId)) {\n const connectionToClose = this.endpoints.get(nodeId).connection;\n await connectionToClose.close(gracefulLeave);\n }\n else {\n logger.trace(nodeId + ' ' + 'closeConnection() this.endpoints did not have the id');\n this.emit('disconnected', peerDescriptor, false);\n }\n }\n lockConnection(targetDescriptor, lockId) {\n if (this.state === ConnectionManagerState.STOPPED || areEqualPeerDescriptors(targetDescriptor, this.getLocalPeerDescriptor())) {\n return;\n }\n const nodeId = toNodeId(targetDescriptor);\n const rpcRemote = new ConnectionLockRpcRemote(this.getLocalPeerDescriptor(), targetDescriptor, this.rpcCommunicator, ConnectionLockRpcClient);\n this.locks.addLocalLocked(nodeId, lockId);\n rpcRemote.lockRequest(lockId)\n .then((_accepted) => logger.trace('LockRequest successful'))\n .catch((err) => { logger.debug(err); });\n }\n unlockConnection(targetDescriptor, lockId) {\n if (this.state === ConnectionManagerState.STOPPED || areEqualPeerDescriptors(targetDescriptor, this.getLocalPeerDescriptor())) {\n return;\n }\n const nodeId = toNodeId(targetDescriptor);\n this.locks.removeLocalLocked(nodeId, lockId);\n const rpcRemote = new ConnectionLockRpcRemote(this.getLocalPeerDescriptor(), targetDescriptor, this.rpcCommunicator, ConnectionLockRpcClient);\n if (this.endpoints.has(nodeId)) {\n rpcRemote.unlockRequest(lockId);\n }\n }\n weakLockConnection(nodeId, lockId) {\n if (this.state === ConnectionManagerState.STOPPED || (nodeId === toNodeId(this.getLocalPeerDescriptor()))) {\n return;\n }\n this.locks.addWeakLocked(nodeId, lockId);\n }\n weakUnlockConnection(nodeId, lockId) {\n if (this.state === ConnectionManagerState.STOPPED || (nodeId === toNodeId(this.getLocalPeerDescriptor()))) {\n return;\n }\n this.locks.removeWeakLocked(nodeId, lockId);\n }\n async enablePrivateClientMode() {\n this.privateClientMode = true;\n await Promise.all(this.getConnectedEndpoints().map((endpoint) => {\n const peerDescription = endpoint.connection.getPeerDescriptor();\n return this.setPrivateForConnection(peerDescription, true);\n }));\n }\n async disablePrivateClientMode() {\n this.privateClientMode = false;\n await Promise.all(this.getConnectedEndpoints().map((endpoint) => {\n const peerDescription = endpoint.connection.getPeerDescriptor();\n return this.setPrivateForConnection(peerDescription, false);\n }));\n }\n getConnectedEndpoints() {\n return Array.from(this.endpoints.values()).filter((endpoint) => endpoint.connected);\n }\n isPrivateClientMode() {\n return this.privateClientMode;\n }\n async setPrivateForConnection(targetDescriptor, isPrivate) {\n const rpcRemote = new ConnectionLockRpcRemote(this.getLocalPeerDescriptor(), targetDescriptor, this.rpcCommunicator, ConnectionLockRpcClient);\n await rpcRemote.setPrivate(isPrivate);\n }\n async gracefullyDisconnectAsync(targetDescriptor, disconnectMode) {\n const endpoint = this.endpoints.get(toNodeId(targetDescriptor));\n if (!endpoint) {\n logger.debug('gracefullyDisconnectedAsync() tried on a non-existing connection');\n return;\n }\n if (endpoint.connected) {\n const connection = endpoint.connection;\n const promise = new Promise((resolve, _reject) => {\n // TODO use options option or named constant?\n // eslint-disable-next-line promise/catch-or-return\n waitForEvent(connection, 'disconnected', 2000).then(() => {\n logger.trace('disconnected event received in gracefullyDisconnectAsync()');\n })\n .catch((e) => {\n logger.trace('force-closing connection after timeout ' + e);\n // TODO should we have some handling for this floating promise?\n connection.close(true);\n })\n .finally(() => {\n logger.trace('resolving after receiving disconnected event');\n resolve();\n });\n });\n await Promise.all([\n promise,\n this.doGracefullyDisconnectAsync(targetDescriptor, disconnectMode)\n ]);\n }\n else {\n endpoint.connection.close(true);\n }\n }\n async doGracefullyDisconnectAsync(targetDescriptor, disconnectMode) {\n const nodeId = toNodeId(targetDescriptor);\n logger.trace(nodeId + ' gracefullyDisconnectAsync()');\n const rpcRemote = new ConnectionLockRpcRemote(this.getLocalPeerDescriptor(), targetDescriptor, this.rpcCommunicator, ConnectionLockRpcClient);\n try {\n await rpcRemote.gracefulDisconnect(disconnectMode);\n }\n catch (ex) {\n logger.trace(nodeId + ' remote.gracefulDisconnect() failed' + ex);\n }\n }\n getConnections() {\n return Array.from(this.endpoints.values())\n .map((endpoint) => endpoint)\n // TODO is this filtering needed? (if it is, should we do the same filtering e.g.\n // in getConnection() or in other methods which access this.endpoints directly?)\n .filter((endpoint) => endpoint.connected && !this.locks.isPrivate(toNodeId(endpoint.connection.getPeerDescriptor())))\n .map((endpoint) => endpoint.connection.getPeerDescriptor());\n }\n onConnectionCountChange() {\n this.metrics.connectionAverageCount.record(this.endpoints.size);\n }\n getDiagnosticInfo() {\n const managedConnections = Array.from(this.endpoints.values())\n .filter((endpoint) => endpoint.connected)\n .map((endpoint) => endpoint.connection);\n return {\n connections: managedConnections.map((connection) => connection.getDiagnosticInfo()),\n connectionCount: this.endpoints.size\n };\n }\n}\n","import { ClosestPeersRequest, ClosestPeersResponse, ConnectivityMethod, ConnectivityRequest, ConnectivityResponse, DisconnectNotice, HandshakeRequest, HandshakeResponse, LeaveNotice, Message, PeerDescriptor, PingRequest, PingResponse, RecursiveOperationResponse, RecursiveOperationRequest, RouteMessageAck, RouteMessageWrapper, WebsocketConnectionRequest, WebrtcConnectionRequest, RtcOffer, RtcAnswer, IceCandidate, LockRequest, UnlockRequest, LockResponse } from '../../generated/packages/dht/protos/DhtRpc';\nexport const protoClasses = [\n ClosestPeersRequest,\n ClosestPeersResponse,\n RecursiveOperationRequest,\n RecursiveOperationResponse,\n PingRequest,\n PingResponse,\n LeaveNotice,\n PeerDescriptor,\n ConnectivityMethod,\n DisconnectNotice,\n RouteMessageWrapper,\n RouteMessageAck,\n ConnectivityRequest,\n ConnectivityResponse,\n HandshakeRequest,\n HandshakeResponse,\n Message,\n WebsocketConnectionRequest,\n WebrtcConnectionRequest,\n RtcOffer,\n RtcAnswer,\n IceCandidate,\n LockRequest,\n UnlockRequest,\n LockResponse\n];\n","import { protoClasses } from './protoClasses';\nimport { protoClasses as rpcProtoClasses } from '@streamr/proto-rpc';\nconst typeRegistry = protoClasses.concat(rpcProtoClasses);\nexport function protoToString(protoObj, objectType) {\n let ret = '';\n try {\n ret = objectType.toJsonString(protoObj, {\n typeRegistry\n });\n }\n catch (_e) {\n ret = '[type not in type registry]';\n }\n return ret;\n}\n","import { Message } from '../../../generated/packages/dht/protos/DhtRpc';\nimport { Connection } from '../Connection';\nimport { Logger } from '@streamr/utils';\nimport { protoToString } from '../../helpers/protoToString';\nimport { toNodeId } from '../../identifiers';\nconst logger = new Logger('SimulatorConnection');\nexport class SimulatorConnection extends Connection {\n stopped = false;\n localPeerDescriptor;\n targetPeerDescriptor;\n simulator;\n constructor(localPeerDescriptor, targetPeerDescriptor, connectionType, simulator) {\n super(connectionType);\n this.localPeerDescriptor = localPeerDescriptor;\n this.setPeerDescriptor(targetPeerDescriptor);\n this.targetPeerDescriptor = targetPeerDescriptor;\n this.connectionType = connectionType;\n this.simulator = simulator;\n this.send = this.send.bind(this);\n this.close = this.close.bind(this);\n this.connect = this.connect.bind(this);\n this.handleIncomingData = this.handleIncomingData.bind(this);\n this.handleIncomingDisconnection = this.handleIncomingDisconnection.bind(this);\n this.destroy = this.destroy.bind(this);\n this.doDisconnect = this.doDisconnect.bind(this);\n }\n send(data) {\n logger.trace('send()');\n if (!this.stopped) {\n this.simulator.send(this, data);\n }\n else {\n const localNodeId = toNodeId(this.localPeerDescriptor);\n const targetNodeId = toNodeId(this.targetPeerDescriptor);\n logger.error(localNodeId + ', ' + targetNodeId + 'tried to send() on a stopped connection');\n }\n }\n async close(gracefulLeave) {\n const localNodeId = toNodeId(this.localPeerDescriptor);\n const targetNodeId = toNodeId(this.targetPeerDescriptor);\n logger.trace(localNodeId + ', ' + targetNodeId + ' close()');\n if (!this.stopped) {\n logger.trace(localNodeId + ', ' + targetNodeId + ' close() not stopped');\n this.stopped = true;\n try {\n logger.trace(localNodeId + ', ' + targetNodeId + ' close() calling simulator.disconnect()');\n this.simulator.close(this);\n logger.trace(localNodeId + ', ' + targetNodeId + ' close() simulator.disconnect returned');\n }\n catch (e) {\n logger.trace(localNodeId + ', ' + targetNodeId + 'close aborted' + e);\n }\n finally {\n logger.trace(localNodeId + ', ' + targetNodeId + ' calling this.doDisconnect');\n this.doDisconnect(gracefulLeave);\n }\n }\n else {\n logger.trace(localNodeId + ', ' + targetNodeId + ' close() tried to close a stopped connection');\n }\n }\n connect() {\n if (!this.stopped) {\n logger.trace('connect() called');\n this.simulator.connect(this, this.targetPeerDescriptor, (error) => {\n if (error !== undefined) {\n logger.trace(error);\n this.doDisconnect(false);\n }\n else {\n this.emit('connected');\n }\n });\n }\n else {\n logger.trace('tried to connect() a stopped connection');\n }\n }\n handleIncomingData(data) {\n if (!this.stopped) {\n logger.trace('handleIncomingData() ' + protoToString(Message.fromBinary(data), Message));\n this.emit('data', data);\n }\n else {\n logger.trace('tried to call handleIncomingData() a stopped connection');\n }\n }\n handleIncomingDisconnection() {\n if (!this.stopped) {\n const localNodeId = toNodeId(this.localPeerDescriptor);\n logger.trace(localNodeId + ' handleIncomingDisconnection()');\n this.stopped = true;\n this.doDisconnect(false);\n }\n else {\n logger.trace('tried to call handleIncomingDisconnection() a stopped connection');\n }\n }\n destroy() {\n const localNodeId = toNodeId(this.localPeerDescriptor);\n if (!this.stopped) {\n logger.trace(localNodeId + ' destroy()');\n this.removeAllListeners();\n this.close(false).catch((_e) => { });\n }\n else {\n logger.trace(localNodeId + ' tried to call destroy() a stopped connection');\n }\n }\n doDisconnect(gracefulLeave) {\n const localNodeId = toNodeId(this.localPeerDescriptor);\n const targetNodeId = toNodeId(this.targetPeerDescriptor);\n logger.trace(localNodeId + ' doDisconnect()');\n this.stopped = true;\n logger.trace(localNodeId + ', ' + targetNodeId + ' doDisconnect emitting');\n this.emit('disconnected', gracefulLeave);\n }\n}\n","export const LOCAL_PROTOCOL_VERSION = '1.1';\n/*\n * When two nodes negotiate whether they are compatible or not, it is up to the\n * newer version to decide if it supports the old version or not.\n *\n * The older version assumes optimistically that it may be supported by the newer\n * version. It can't know for sure, but the other node will tell if it is not\n * supported (e.g. rejecting the handshake with UNSUPPORTED_PROTOCOL_VERSION error).\n */\nexport const isMaybeSupportedProtocolVersion = (remoteVersion) => {\n const localMajor = parseVersion(LOCAL_PROTOCOL_VERSION).major;\n const remoteMajor = parseVersion(remoteVersion)?.major;\n if ((remoteMajor === undefined) || (remoteMajor < localMajor)) {\n return false;\n }\n else {\n // TODO implement proper checking when there are new protocol versions\n return true;\n }\n};\nexport const parseVersion = (version) => {\n const parts = version.split('.');\n if (parts.length === 2) {\n const values = parts.map((p) => Number(p));\n if (!values.some((v) => isNaN(v))) {\n return { major: values[0], minor: values[1] };\n }\n }\n else {\n return undefined;\n }\n};\n","import { Logger } from '@streamr/utils';\nimport { EventEmitter } from 'eventemitter3';\nimport { v4 } from 'uuid';\nimport { Message, HandshakeError } from '../../generated/packages/dht/protos/DhtRpc';\nimport { LOCAL_PROTOCOL_VERSION, isMaybeSupportedProtocolVersion } from '../helpers/version';\nimport { toNodeId } from '../identifiers';\nimport { version as applicationVersion } from '../../package.json';\nconst logger = new Logger('Handshaker');\n// Optimally the Outgoing and Incoming Handshakers could be their own separate classes\n// However, in cases where the PeerDescriptor of the other end of the connection can be known\n// only after a HandshakeRequest a base Handshaker class is needed as the IncomingHandshaker currently\n// requires knowledge of the other ends PeerDescriptor. (Note PendingConnection requires the remote PeerDescriptor)\nexport const createOutgoingHandshaker = (localPeerDescriptor, pendingConnection, connection, targetPeerDescriptor) => {\n const handshaker = new Handshaker(localPeerDescriptor, connection);\n const stopHandshaker = () => {\n handshaker.stop();\n connection.off('disconnected', disconnectedListener);\n connection.off('connected', connectedListener);\n handshaker.off('handshakeCompleted', handshakeCompletedListener);\n handshaker.off('handshakeFailed', handshakeFailedListener);\n pendingConnection.off('disconnected', managedConnectionDisconnectedListener);\n };\n const handshakeFailedListener = (error) => {\n if (error === HandshakeError.INVALID_TARGET_PEER_DESCRIPTOR || error === HandshakeError.UNSUPPORTED_PROTOCOL_VERSION) {\n pendingConnection.close(false);\n stopHandshaker();\n }\n else {\n // Wait for the other end to close the connection\n }\n };\n const handshakeCompletedListener = (peerDescriptor) => {\n logger.trace('handshake completed for outgoing connection, ' + toNodeId(peerDescriptor));\n pendingConnection.onHandshakeCompleted(connection);\n stopHandshaker();\n };\n const connectedListener = () => handshaker.sendHandshakeRequest(targetPeerDescriptor);\n const disconnectedListener = (graceful) => {\n pendingConnection.close(graceful);\n stopHandshaker();\n };\n const managedConnectionDisconnectedListener = () => {\n connection.close(false);\n stopHandshaker();\n };\n handshaker.once('handshakeFailed', handshakeFailedListener);\n handshaker.once('handshakeCompleted', handshakeCompletedListener);\n connection.once('connected', connectedListener);\n connection.once('disconnected', disconnectedListener);\n pendingConnection.once('disconnected', managedConnectionDisconnectedListener);\n return handshaker;\n};\nexport const createIncomingHandshaker = (localPeerDescriptor, pendingConnection, connection) => {\n const handshaker = new Handshaker(localPeerDescriptor, connection);\n const stopHandshaker = () => {\n handshaker.stop();\n pendingConnection.off('disconnected', connectionDisconnected);\n connection.off('disconnected', connectionDisconnected);\n };\n const onHandshakeRequest = () => {\n stopHandshaker();\n };\n const connectionDisconnected = (graceful) => {\n pendingConnection.close(graceful);\n stopHandshaker();\n };\n const managedConnectionDisconnected = () => {\n connection.close(false);\n stopHandshaker();\n };\n handshaker.on('handshakeRequest', onHandshakeRequest);\n connection.once('disconnected', connectionDisconnected);\n pendingConnection.once('disconnected', managedConnectionDisconnected);\n return handshaker;\n};\nexport const rejectHandshake = (pendingConnection, connection, handshaker, error) => {\n handshaker.sendHandshakeResponse(error);\n connection.destroy();\n pendingConnection.destroy();\n};\nexport const acceptHandshake = (handshaker, pendingConnection, connection) => {\n handshaker.sendHandshakeResponse();\n pendingConnection.onHandshakeCompleted(connection);\n};\nexport const createHandshakeRequest = (localPeerDescriptor, remotePeerDescriptor) => {\n const outgoingHandshake = {\n sourcePeerDescriptor: localPeerDescriptor,\n targetPeerDescriptor: remotePeerDescriptor,\n protocolVersion: LOCAL_PROTOCOL_VERSION,\n applicationVersion\n };\n return {\n serviceId: Handshaker.HANDSHAKER_SERVICE_ID,\n messageId: v4(),\n body: {\n oneofKind: 'handshakeRequest',\n handshakeRequest: outgoingHandshake\n }\n };\n};\nexport const createHandshakeResponse = (localPeerDescriptor, error) => {\n const outgoingHandshakeResponse = {\n sourcePeerDescriptor: localPeerDescriptor,\n error,\n protocolVersion: LOCAL_PROTOCOL_VERSION,\n applicationVersion\n };\n return {\n serviceId: Handshaker.HANDSHAKER_SERVICE_ID,\n messageId: v4(),\n body: {\n oneofKind: 'handshakeResponse',\n handshakeResponse: outgoingHandshakeResponse\n }\n };\n};\nexport class Handshaker extends EventEmitter {\n static HANDSHAKER_SERVICE_ID = 'system/handshaker';\n localPeerDescriptor;\n connection;\n onDataListener;\n constructor(localPeerDescriptor, connection) {\n super();\n this.localPeerDescriptor = localPeerDescriptor;\n this.connection = connection;\n this.onDataListener = (data) => this.onData(data);\n this.connection.on('data', this.onDataListener);\n }\n onData(data) {\n try {\n const message = Message.fromBinary(data);\n if (message.body.oneofKind === 'handshakeRequest') {\n logger.trace('handshake request received');\n const handshake = message.body.handshakeRequest;\n this.emit('handshakeRequest', handshake.sourcePeerDescriptor, handshake.protocolVersion, handshake.targetPeerDescriptor);\n }\n if (message.body.oneofKind === 'handshakeResponse') {\n logger.trace('handshake response received');\n const handshake = message.body.handshakeResponse;\n const error = !isMaybeSupportedProtocolVersion(handshake.protocolVersion)\n ? HandshakeError.UNSUPPORTED_PROTOCOL_VERSION : handshake.error;\n if (error !== undefined) {\n this.emit('handshakeFailed', error);\n }\n else {\n this.emit('handshakeCompleted', handshake.sourcePeerDescriptor);\n }\n }\n }\n catch (err) {\n logger.debug('error while parsing handshake message', err);\n }\n }\n sendHandshakeRequest(remotePeerDescriptor) {\n const msg = createHandshakeRequest(this.localPeerDescriptor, remotePeerDescriptor);\n this.connection.send(Message.toBinary(msg));\n logger.trace('handshake request sent');\n }\n sendHandshakeResponse(error) {\n const msg = createHandshakeResponse(this.localPeerDescriptor, error);\n this.connection.send(Message.toBinary(msg));\n logger.trace('handshake response sent');\n }\n stop() {\n this.connection.off('data', this.onDataListener);\n this.removeAllListeners();\n }\n}\n","import { EventEmitter } from 'eventemitter3';\nimport { Logger, setAbortableTimeout } from '@streamr/utils';\nimport { getNodeIdOrUnknownFromPeerDescriptor } from './helpers/getNodeIdOrUnknownFromPeerDescriptor';\nconst logger = new Logger('PendingConnection');\n// PendingConnection is used as a reference to a connection that should be opened and handshaked to a given PeerDescriptor\n// It does not hold a connection internally. The public method onHandshakedCompleted should be called once a connection for the \n// remotePeerDescriptor is opened and handshaked successfully.\n// PendingConnections are created by the Connectors.\nexport class PendingConnection extends EventEmitter {\n connectingAbortController = new AbortController();\n remotePeerDescriptor;\n replacedAsDuplicate = false;\n stopped = false;\n constructor(remotePeerDescriptor, timeout = 15 * 1000) {\n super();\n this.remotePeerDescriptor = remotePeerDescriptor;\n setAbortableTimeout(() => {\n this.close(false);\n }, timeout, this.connectingAbortController.signal);\n }\n replaceAsDuplicate() {\n logger.trace(getNodeIdOrUnknownFromPeerDescriptor(this.remotePeerDescriptor) + ' replaceAsDuplicate');\n this.replacedAsDuplicate = true;\n }\n onHandshakeCompleted(connection) {\n if (!this.replacedAsDuplicate) {\n this.emit('connected', this.remotePeerDescriptor, connection);\n }\n }\n close(graceful) {\n if (this.stopped) {\n return;\n }\n this.stopped = true;\n this.connectingAbortController.abort();\n if (!this.replacedAsDuplicate) {\n this.emit('disconnected', graceful);\n }\n }\n destroy() {\n if (this.stopped) {\n return;\n }\n this.stopped = true;\n this.connectingAbortController.abort();\n this.removeAllListeners();\n }\n getPeerDescriptor() {\n return this.remotePeerDescriptor;\n }\n}\n","import { ConnectionType } from '../IConnection';\nimport { HandshakeError, } from '../../../generated/packages/dht/protos/DhtRpc';\nimport { Logger } from '@streamr/utils';\nimport { SimulatorConnection } from './SimulatorConnection';\nimport { toNodeId } from '../../identifiers';\nimport { acceptHandshake, createIncomingHandshaker, createOutgoingHandshaker, rejectHandshake } from '../Handshaker';\nimport { PendingConnection } from '../PendingConnection';\nconst logger = new Logger('SimulatorConnector');\nexport class SimulatorConnector {\n connectingConnections = new Map();\n stopped = false;\n localPeerDescriptor;\n simulator;\n onNewConnection;\n constructor(localPeerDescriptor, simulator, onNewConnection) {\n this.localPeerDescriptor = localPeerDescriptor;\n this.simulator = simulator;\n this.onNewConnection = onNewConnection;\n }\n connect(targetPeerDescriptor) {\n logger.trace('connect() ' + toNodeId(targetPeerDescriptor));\n const nodeId = toNodeId(targetPeerDescriptor);\n const existingConnection = this.connectingConnections.get(nodeId);\n if (existingConnection) {\n return existingConnection;\n }\n const connection = new SimulatorConnection(this.localPeerDescriptor, targetPeerDescriptor, ConnectionType.SIMULATOR_CLIENT, this.simulator);\n const pendingConnection = new PendingConnection(targetPeerDescriptor);\n createOutgoingHandshaker(this.localPeerDescriptor, pendingConnection, connection, targetPeerDescriptor);\n this.connectingConnections.set(nodeId, pendingConnection);\n const delFunc = () => {\n this.connectingConnections.delete(nodeId);\n connection.off('disconnected', delFunc);\n pendingConnection.off('connected', delFunc);\n pendingConnection.off('disconnected', delFunc);\n };\n connection.once('disconnected', delFunc);\n pendingConnection.once('connected', delFunc);\n pendingConnection.once('disconnected', delFunc);\n connection.connect();\n return pendingConnection;\n }\n getPeerDescriptor() {\n return this.localPeerDescriptor;\n }\n handleIncomingConnection(sourceConnection) {\n // connection is incoming, so remotePeerDescriptor is localPeerDescriptor\n const remotePeerDescriptor = sourceConnection.localPeerDescriptor;\n const remoteNodeId = toNodeId(sourceConnection.localPeerDescriptor);\n logger.trace(remoteNodeId + ' incoming connection, stopped: ' + this.stopped);\n if (this.stopped) {\n return;\n }\n const connection = new SimulatorConnection(this.localPeerDescriptor, remotePeerDescriptor, ConnectionType.SIMULATOR_SERVER, this.simulator);\n const pendingConnection = new PendingConnection(remotePeerDescriptor);\n const handshaker = createIncomingHandshaker(this.localPeerDescriptor, pendingConnection, connection);\n logger.trace('connected');\n handshaker.once('handshakeRequest', () => {\n logger.trace(remoteNodeId + ' incoming handshake request');\n if (this.onNewConnection(pendingConnection)) {\n logger.trace(remoteNodeId + ' calling acceptHandshake');\n acceptHandshake(handshaker, pendingConnection, connection);\n }\n else {\n rejectHandshake(pendingConnection, connection, handshaker, HandshakeError.DUPLICATE_CONNECTION);\n }\n });\n this.simulator.accept(sourceConnection, connection);\n }\n async stop() {\n this.stopped = true;\n const conns = Array.from(this.connectingConnections.values());\n await Promise.allSettled(conns.map(async (conn) => conn.close(false)));\n }\n}\n","import { RoutingRpcCommunicator } from './RoutingRpcCommunicator';\nimport { RpcError } from '@streamr/proto-rpc';\nimport { areEqualPeerDescriptors } from '../identifiers';\nexport class ListeningRpcCommunicator extends RoutingRpcCommunicator {\n transport;\n messageListener;\n disconnectedListener;\n constructor(ownServiceId, transport, options) {\n super(ownServiceId, (msg, opts) => transport.send(msg, opts), options);\n this.messageListener = (msg) => {\n this.handleMessageFromPeer(msg);\n };\n this.disconnectedListener = (peerDescriptor) => {\n const requests = this.getRequestIds((request) => areEqualPeerDescriptors(peerDescriptor, request.getCallContext().targetDescriptor));\n requests.forEach((id) => this.handleClientError(id, new RpcError.Disconnected('Peer disconnected')));\n };\n this.transport = transport;\n transport.on('message', this.messageListener);\n transport.on('disconnected', this.disconnectedListener);\n }\n destroy() {\n this.transport.off('message', this.messageListener);\n this.transport.off('disconnected', this.disconnectedListener);\n this.stop();\n }\n}\n","export var RtcDescription;\n(function (RtcDescription) {\n RtcDescription[\"OFFER\"] = \"offer\";\n RtcDescription[\"ANSWER\"] = \"answer\";\n})(RtcDescription || (RtcDescription = {}));\n","export const EARLY_TIMEOUT = 5000;\n","import { EventEmitter } from 'eventemitter3';\nimport { RtcDescription } from '../connection/webrtc/IWebrtcConnection';\nimport { ConnectionType } from '../connection/IConnection';\nimport { Logger } from '@streamr/utils';\nimport { EARLY_TIMEOUT } from '../connection/webrtc/consts';\nimport { createRandomConnectionId } from '../connection/Connection';\nvar DisconnectedRtcPeerConnectionStateEnum;\n(function (DisconnectedRtcPeerConnectionStateEnum) {\n DisconnectedRtcPeerConnectionStateEnum[\"DISCONNECTED\"] = \"disconnected\";\n DisconnectedRtcPeerConnectionStateEnum[\"FAILED\"] = \"failed\";\n DisconnectedRtcPeerConnectionStateEnum[\"CLOSED\"] = \"closed\";\n})(DisconnectedRtcPeerConnectionStateEnum || (DisconnectedRtcPeerConnectionStateEnum = {}));\nconst logger = new Logger('WebrtcConnection (browser)');\nexport class WebrtcConnection extends EventEmitter {\n connectionId;\n connectionType = ConnectionType.WEBRTC;\n // We need to keep track of connection state ourselves because\n // RTCPeerConnection.connectionState is not supported on Firefox\n lastState = 'connecting';\n iceServers;\n peerConnection;\n bufferThresholdHigh = 2 ** 17;\n bufferThresholdLow = 2 ** 15;\n dataChannel;\n makingOffer = false;\n isOffering = false;\n closed = false;\n earlyTimeout;\n messageQueue = [];\n constructor(params) {\n super();\n this.connectionId = createRandomConnectionId();\n this.iceServers = params.iceServers ?? [];\n this.earlyTimeout = setTimeout(() => {\n this.doClose(false, 'timed out due to remote descriptor not being set');\n }, EARLY_TIMEOUT);\n }\n start(isOffering) {\n this.isOffering = isOffering;\n const urls = this.iceServers.map(({ url, port, username, password }) => ({\n urls: `${url}:${port}`,\n username,\n credential: password\n }));\n this.peerConnection = new RTCPeerConnection({ iceServers: urls });\n this.peerConnection.onicecandidate = (event) => {\n if ((event.candidate !== null) && (event.candidate.sdpMid !== null)) {\n this.emit('localCandidate', event.candidate.candidate, event.candidate.sdpMid);\n }\n };\n this.peerConnection.onicegatheringstatechange = () => {\n logger.trace(`conn.onGatheringStateChange: ${this.peerConnection?.iceGatheringState}`);\n };\n this.peerConnection.onconnectionstatechange = () => this.onStateChange();\n if (isOffering) {\n this.peerConnection.onnegotiationneeded = async () => {\n if (this.peerConnection !== undefined) {\n this.makingOffer = true;\n try {\n await this.peerConnection.setLocalDescription();\n }\n catch (err) {\n logger.warn('Failed to set local description', { err });\n }\n if (this.peerConnection.localDescription !== null) {\n this.emit('localDescription', this.peerConnection.localDescription?.sdp, this.peerConnection.localDescription?.type);\n }\n }\n this.makingOffer = false;\n };\n const dataChannel = this.peerConnection.createDataChannel('streamrDataChannel');\n this.setupDataChannel(dataChannel);\n }\n else {\n this.peerConnection.ondatachannel = (event) => {\n this.setupDataChannel(event.channel);\n };\n }\n }\n async setRemoteDescription(description, type) {\n const offerCollision = (type.toLowerCase() === RtcDescription.OFFER) && (this.makingOffer || this.peerConnection?.signalingState != 'stable');\n const ignoreOffer = this.isOffering && offerCollision;\n if (ignoreOffer) {\n return;\n }\n try {\n await this.peerConnection?.setRemoteDescription({ sdp: description, type: type.toLowerCase() });\n clearTimeout(this.earlyTimeout);\n }\n catch (err) {\n logger.warn('Failed to set remote description', { err });\n }\n if ((type.toLowerCase() === RtcDescription.OFFER) && (this.peerConnection !== undefined)) {\n try {\n await this.peerConnection.setLocalDescription();\n }\n catch (err) {\n logger.warn('Failed to set local description', { err });\n }\n if (this.peerConnection.localDescription !== null) {\n this.emit('localDescription', this.peerConnection.localDescription.sdp, this.peerConnection.localDescription.type);\n }\n }\n }\n addRemoteCandidate(candidate, mid) {\n this.peerConnection?.addIceCandidate({ candidate: candidate, sdpMid: mid })\n .catch((err) => {\n logger.warn('Failed to add ICE candidate', { err });\n });\n }\n isOpen() {\n return this.lastState === 'connected';\n }\n // IConnection implementation\n async close(gracefulLeave, reason) {\n this.doClose(gracefulLeave, reason);\n }\n doClose(gracefulLeave, reason) {\n if (!this.closed) {\n this.closed = true;\n this.lastState = 'closed';\n clearTimeout(this.earlyTimeout);\n this.stopListening();\n this.emit('disconnected', gracefulLeave, undefined, reason);\n this.removeAllListeners();\n if (this.dataChannel !== undefined) {\n try {\n this.dataChannel.close();\n }\n catch (err) {\n logger.warn('Failed to close data channel', { err });\n }\n }\n this.dataChannel = undefined;\n if (this.peerConnection !== undefined) {\n try {\n this.peerConnection.close();\n }\n catch (err) {\n logger.warn('Failed to close connection', { err });\n }\n }\n this.peerConnection = undefined;\n }\n }\n destroy() {\n this.removeAllListeners();\n this.doClose(false);\n }\n send(data) {\n if (this.lastState === 'connected') {\n if (this.dataChannel.bufferedAmount > this.bufferThresholdHigh) {\n this.messageQueue.push(data);\n }\n else {\n this.dataChannel?.send(data);\n }\n }\n else {\n logger.warn('Tried to send on a connection with last state ' + this.lastState);\n }\n }\n setupDataChannel(dataChannel) {\n this.dataChannel = dataChannel;\n this.dataChannel.binaryType = 'arraybuffer';\n this.dataChannel.bufferedAmountLowThreshold = this.bufferThresholdLow;\n dataChannel.onopen = () => {\n logger.trace('dc.onOpen');\n this.onDataChannelOpen();\n };\n dataChannel.onclose = () => {\n logger.trace('dc.onClosed');\n this.doClose(false);\n };\n dataChannel.onerror = (err) => {\n logger.warn('Data channel error', { err });\n };\n dataChannel.onmessage = (msg) => {\n logger.trace('dc.onmessage');\n this.emit('data', new Uint8Array(msg.data));\n };\n dataChannel.onbufferedamountlow = () => {\n logger.trace('dc.onBufferedAmountLow');\n while (this.messageQueue.length > 0 && this.dataChannel.bufferedAmount < this.bufferThresholdHigh) {\n const data = this.messageQueue.shift();\n this.dataChannel.send(data);\n }\n };\n }\n stopListening() {\n if (this.dataChannel !== undefined) {\n this.dataChannel.onopen = null;\n this.dataChannel.onclose = null;\n this.dataChannel.onerror = null;\n this.dataChannel.onbufferedamountlow = null;\n this.dataChannel.onmessage = null;\n }\n if (this.peerConnection !== undefined) {\n this.peerConnection.onconnectionstatechange = null;\n this.peerConnection.onicecandidate = null;\n this.peerConnection.onicegatheringstatechange = null;\n this.peerConnection.onnegotiationneeded = null;\n this.peerConnection.ondatachannel = null;\n }\n }\n onDataChannelOpen() {\n this.lastState = 'connected';\n this.emit('connected');\n }\n onStateChange() {\n if (this.peerConnection.connectionState === DisconnectedRtcPeerConnectionStateEnum.CLOSED\n || this.peerConnection.connectionState === DisconnectedRtcPeerConnectionStateEnum.DISCONNECTED\n || this.peerConnection.connectionState === DisconnectedRtcPeerConnectionStateEnum.FAILED) {\n this.doClose(false);\n }\n }\n setConnectionId(connectionId) {\n this.connectionId = connectionId;\n }\n}\n","import { Logger } from '@streamr/utils';\nimport { RpcRemote } from '../../dht/contact/RpcRemote';\nconst logger = new Logger('WebrtcConnectorRpcRemote');\nexport class WebrtcConnectorRpcRemote extends RpcRemote {\n requestConnection() {\n const request = {};\n const options = this.formDhtRpcOptions({\n notification: true\n });\n this.getClient().requestConnection(request, options).catch((_e) => {\n logger.trace('Failed to send requestConnection');\n });\n }\n sendRtcOffer(description, connectionId) {\n const request = {\n connectionId,\n description\n };\n const options = this.formDhtRpcOptions();\n this.getClient().rtcOffer(request, options).catch((_e) => {\n logger.trace('Failed to send rtcOffer');\n });\n }\n sendRtcAnswer(description, connectionId) {\n const request = {\n connectionId,\n description\n };\n const options = this.formDhtRpcOptions();\n this.getClient().rtcAnswer(request, options).catch((_e) => {\n logger.trace('Failed to send rtcAnswer');\n });\n }\n sendIceCandidate(candidate, mid, connectionId) {\n const request = {\n connectionId,\n mid,\n candidate\n };\n const options = this.formDhtRpcOptions();\n this.getClient().iceCandidate(request, options).catch((_e) => {\n logger.trace('Failed to send iceCandidate');\n });\n }\n}\n","import { Logger } from '@streamr/utils';\nimport { getAddressFromIceCandidate, isPrivateIPv4 } from '../../helpers/AddressTools';\nimport { toNodeId } from '../../identifiers';\nconst logger = new Logger('WebrtcConnectorRpcLocal');\nexport class WebrtcConnectorRpcLocal {\n options;\n constructor(options) {\n this.options = options;\n }\n async requestConnection(context) {\n const targetPeerDescriptor = context.incomingSourceDescriptor;\n if (this.options.ongoingConnectAttempts.has(toNodeId(targetPeerDescriptor))) {\n return {};\n }\n const pendingConnection = this.options.connect(targetPeerDescriptor, false);\n this.options.onNewConnection(pendingConnection);\n return {};\n }\n async rtcOffer(request, context) {\n const remotePeerDescriptor = context.incomingSourceDescriptor;\n const nodeId = toNodeId(remotePeerDescriptor);\n let connection;\n let pendingConnection;\n if (!this.options.ongoingConnectAttempts.has(nodeId)) {\n pendingConnection = this.options.connect(remotePeerDescriptor, true);\n connection = this.options.ongoingConnectAttempts.get(nodeId).connection;\n this.options.onNewConnection(pendingConnection);\n }\n else {\n pendingConnection = this.options.ongoingConnectAttempts.get(nodeId).managedConnection;\n connection = this.options.ongoingConnectAttempts.get(nodeId).connection;\n }\n // Always use offerers connectionId\n connection.setConnectionId(request.connectionId);\n connection.setRemoteDescription(request.description, 'offer');\n return {};\n }\n async rtcAnswer(request, context) {\n const remotePeerDescriptor = context.incomingSourceDescriptor;\n const nodeId = toNodeId(remotePeerDescriptor);\n const connection = this.options.ongoingConnectAttempts.get(nodeId)?.connection;\n if (!connection) {\n return {};\n }\n else if (connection.connectionId !== request.connectionId) {\n logger.trace(`Ignoring RTC answer due to connectionId mismatch`);\n return {};\n }\n connection.setRemoteDescription(request.description, 'answer');\n return {};\n }\n async iceCandidate(request, context) {\n const remotePeerDescriptor = context.incomingSourceDescriptor;\n const nodeId = toNodeId(remotePeerDescriptor);\n const connection = this.options.ongoingConnectAttempts.get(nodeId)?.connection;\n if (!connection) {\n return {};\n }\n else if (connection.connectionId !== request.connectionId) {\n logger.trace(`Ignoring remote candidate due to connectionId mismatch`);\n return {};\n }\n else if (this.isIceCandidateAllowed(request.candidate)) {\n connection.addRemoteCandidate(request.candidate, request.mid);\n }\n return {};\n }\n isIceCandidateAllowed(candidate) {\n if (!this.options.allowPrivateAddresses) {\n const address = getAddressFromIceCandidate(candidate);\n if ((address !== undefined) && isPrivateIPv4(address)) {\n return false;\n }\n }\n return true;\n }\n}\n","import { HandshakeError, IceCandidate, RtcAnswer, RtcOffer, WebrtcConnectionRequest } from '../../../generated/packages/dht/protos/DhtRpc';\nimport { ListeningRpcCommunicator } from '../../transport/ListeningRpcCommunicator';\nimport { WebrtcConnection } from '@/WebrtcConnection';\nimport { WebrtcConnectorRpcRemote } from './WebrtcConnectorRpcRemote';\nimport { WebrtcConnectorRpcClient } from '../../../generated/packages/dht/protos/DhtRpc.client';\nimport { Logger } from '@streamr/utils';\nimport * as Err from '../../helpers/errors';\nimport { WebrtcConnectorRpcLocal } from './WebrtcConnectorRpcLocal';\nimport { areEqualPeerDescriptors, toNodeId } from '../../identifiers';\nimport { getOfferer } from '../../helpers/offering';\nimport { acceptHandshake, createIncomingHandshaker, createOutgoingHandshaker, rejectHandshake } from '../Handshaker';\nimport { isMaybeSupportedProtocolVersion } from '../../helpers/version';\nimport { PendingConnection } from '../PendingConnection';\nconst logger = new Logger('WebrtcConnector');\nexport const replaceInternalIpWithExternalIp = (candidate, ip) => {\n const parsed = candidate.split(' ');\n const type = parsed[7];\n if (type === 'host') {\n parsed[4] = ip;\n }\n return parsed.join(' ');\n};\nexport class WebrtcConnector {\n static WEBRTC_CONNECTOR_SERVICE_ID = 'system/webrtc-connector';\n rpcCommunicator;\n ongoingConnectAttempts = new Map();\n localPeerDescriptor;\n stopped = false;\n options;\n constructor(options) {\n this.options = options;\n this.rpcCommunicator = new ListeningRpcCommunicator(WebrtcConnector.WEBRTC_CONNECTOR_SERVICE_ID, options.transport, {\n rpcRequestTimeout: 15000 // TODO use options option or named constant?\n });\n this.registerLocalRpcMethods(options);\n }\n registerLocalRpcMethods(options) {\n const localRpc = new WebrtcConnectorRpcLocal({\n connect: (targetPeerDescriptor, doNotRequestConnection) => this.connect(targetPeerDescriptor, doNotRequestConnection),\n onNewConnection: (connection) => this.options.onNewConnection(connection),\n ongoingConnectAttempts: this.ongoingConnectAttempts,\n rpcCommunicator: this.rpcCommunicator,\n getLocalPeerDescriptor: () => this.localPeerDescriptor,\n allowPrivateAddresses: options.allowPrivateAddresses ?? true\n });\n this.rpcCommunicator.registerRpcNotification(WebrtcConnectionRequest, 'requestConnection', async (_req, context) => {\n if (!this.stopped) {\n return localRpc.requestConnection(context);\n }\n else {\n return {};\n }\n });\n this.rpcCommunicator.registerRpcNotification(RtcOffer, 'rtcOffer', async (req, context) => {\n if (!this.stopped) {\n return localRpc.rtcOffer(req, context);\n }\n else {\n return {};\n }\n });\n this.rpcCommunicator.registerRpcNotification(RtcAnswer, 'rtcAnswer', async (req, context) => {\n if (!this.stopped) {\n return localRpc.rtcAnswer(req, context);\n }\n else {\n return {};\n }\n });\n this.rpcCommunicator.registerRpcNotification(IceCandidate, 'iceCandidate', async (req, context) => {\n if (!this.stopped) {\n return localRpc.iceCandidate(req, context);\n }\n else {\n return {};\n }\n });\n }\n connect(targetPeerDescriptor, doNotRequestConnection) {\n if (areEqualPeerDescriptors(targetPeerDescriptor, this.localPeerDescriptor)) {\n throw new Err.CannotConnectToSelf('Cannot open WebRTC Connection to self');\n }\n logger.trace(`Opening WebRTC connection to ${toNodeId(targetPeerDescriptor)}`);\n const nodeId = toNodeId(targetPeerDescriptor);\n const existingConnection = this.ongoingConnectAttempts.get(nodeId);\n if (existingConnection) {\n return existingConnection.managedConnection;\n }\n const connection = this.createConnection(targetPeerDescriptor);\n const localNodeId = toNodeId(this.localPeerDescriptor);\n const targetNodeId = toNodeId(targetPeerDescriptor);\n const offering = (getOfferer(localNodeId, targetNodeId) === 'local');\n let pendingConnection;\n const remoteConnector = new WebrtcConnectorRpcRemote(this.localPeerDescriptor, targetPeerDescriptor, this.rpcCommunicator, WebrtcConnectorRpcClient);\n const delFunc = () => {\n this.ongoingConnectAttempts.delete(nodeId);\n connection.off('disconnected', delFunc);\n pendingConnection.off('disconnected', delFunc);\n pendingConnection.off('connected', delFunc);\n };\n if (offering) {\n pendingConnection = new PendingConnection(targetPeerDescriptor);\n createOutgoingHandshaker(this.localPeerDescriptor, pendingConnection, connection, targetPeerDescriptor);\n connection.once('localDescription', (description) => {\n logger.trace('Sending offer to remote peer');\n remoteConnector.sendRtcOffer(description, connection.connectionId);\n });\n }\n else {\n pendingConnection = new PendingConnection(targetPeerDescriptor);\n const handshaker = createIncomingHandshaker(this.localPeerDescriptor, pendingConnection, connection);\n connection.once('localDescription', (description) => {\n remoteConnector.sendRtcAnswer(description, connection.connectionId);\n });\n handshaker.on('handshakeRequest', (_sourceDescriptor, remoteVersion) => {\n if (!isMaybeSupportedProtocolVersion(remoteVersion)) {\n rejectHandshake(pendingConnection, connection, handshaker, HandshakeError.UNSUPPORTED_PROTOCOL_VERSION);\n }\n else {\n acceptHandshake(handshaker, pendingConnection, connection);\n }\n delFunc();\n });\n }\n this.ongoingConnectAttempts.set(targetNodeId, {\n managedConnection: pendingConnection,\n connection\n });\n connection.on('disconnected', delFunc);\n pendingConnection.on('disconnected', delFunc);\n pendingConnection.on('connected', delFunc);\n connection.on('localCandidate', (candidate, mid) => {\n if (this.options.externalIp !== undefined) {\n candidate = replaceInternalIpWithExternalIp(candidate, this.options.externalIp);\n logger.debug(`onLocalCandidate injected external ip ${candidate} ${mid}`);\n }\n remoteConnector.sendIceCandidate(candidate, mid, connection.connectionId);\n });\n connection.start(offering);\n if (!doNotRequestConnection && !offering) {\n remoteConnector.requestConnection();\n }\n return pendingConnection;\n }\n createConnection(targetPeerDescriptor) {\n return new WebrtcConnection({\n remotePeerDescriptor: targetPeerDescriptor,\n iceServers: this.options.iceServers,\n bufferThresholdLow: this.options.bufferThresholdLow,\n bufferThresholdHigh: this.options.bufferThresholdHigh,\n portRange: this.options.portRange\n // TODO should we pass maxMessageSize?\n });\n }\n setLocalPeerDescriptor(peerDescriptor) {\n this.localPeerDescriptor = peerDescriptor;\n }\n async stop() {\n logger.trace('stop()');\n this.stopped = true;\n const attempts = Array.from(this.ongoingConnectAttempts.values());\n await Promise.allSettled(attempts.map(async (conn) => {\n conn.connection.destroy();\n conn.managedConnection.close(false);\n }));\n this.rpcCommunicator.destroy();\n }\n}\n","import { EventEmitter } from 'eventemitter3';\nimport { createRandomConnectionId } from '../Connection';\nimport { ConnectionType } from '../IConnection';\nimport { Logger } from '@streamr/utils';\n// https://kapeli.com/cheat_sheets/WebSocket_Status_Codes.docset/Contents/Resources/Documents/index\n// Browsers send this automatically when closing a tab\nexport const GOING_AWAY = 1001;\n// The GOING_AWAY is a reserved code and we shouldn't send that from the application. Therefore\n// we have a custom counterpart\nexport const CUSTOM_GOING_AWAY = 3001;\n// https://github.com/websockets/ws/blob/master/doc/ws.md#ready-state-constants\nconst OPEN = 1;\nconst logger = new Logger('AbstractWebsocketClientConnection');\nexport class AbstractWebsocketClientConnection extends EventEmitter {\n connectionId;\n connectionType = ConnectionType.WEBSOCKET_CLIENT;\n destroyed = false;\n constructor() {\n super();\n this.connectionId = createRandomConnectionId();\n }\n send(data) {\n if (!this.destroyed) {\n if (this.socket?.readyState === OPEN) {\n logger.trace(`Sending data with size ${data.byteLength}`);\n this.socket?.send(data);\n }\n else {\n // Could this throw for faster feedback on RPC calls?\n // Currently this log line is seen if a connection is closing but the disconnected event has not been emitted yet.\n logger.debug('Tried to send data on a non-open connection', {\n id: this.connectionId,\n readyState: this.socket.readyState,\n destroyed: this.destroyed\n });\n }\n }\n else {\n logger.debug('Tried to send() on stopped connection');\n }\n }\n async close(gracefulLeave) {\n this.emit('disconnected', gracefulLeave, undefined, 'close() called');\n this.removeAllListeners();\n if (!this.destroyed) {\n logger.trace(`Closing socket for connection ${this.connectionId}`);\n this.socket?.close(gracefulLeave ? CUSTOM_GOING_AWAY : undefined);\n }\n else {\n logger.debug('Tried to close() a stopped connection', { id: this.connectionId });\n }\n }\n destroy() {\n logger.trace('destroy() a connection');\n if (!this.destroyed) {\n this.removeAllListeners();\n if (this.socket) {\n this.stopListening();\n this.socket.close();\n this.socket = undefined;\n }\n this.destroyed = true;\n }\n else {\n logger.debug('Tried to destroy() a stopped connection');\n }\n }\n onOpen() {\n if (!this.destroyed) {\n logger.trace('WebSocket Client Connected');\n if (this.socket?.readyState === OPEN) {\n this.emit('connected');\n }\n }\n }\n onMessage(message) {\n this.emit('data', message);\n }\n onClose(code, reason) {\n if (!this.destroyed) {\n logger.trace('Websocket Closed');\n this.doDisconnect(code, reason);\n }\n }\n onError(error) {\n if (!this.destroyed) {\n logger.trace('WebSocket Client error: ' + error?.message, { error });\n this.emit('error', error.name);\n }\n }\n doDisconnect(code, reason) {\n this.destroyed = true;\n this.stopListening();\n this.socket = undefined;\n const gracefulLeave = (code === GOING_AWAY) || (code === CUSTOM_GOING_AWAY);\n this.emit('disconnected', gracefulLeave, code, reason);\n this.removeAllListeners();\n }\n}\n","import { Logger } from '@streamr/utils';\nimport { w3cwebsocket as Websocket } from 'websocket';\nimport { AbstractWebsocketClientConnection } from '../connection/websocket/AbstractWebsocketClientConnection';\nconst logger = new Logger('WebsocketClientConnection (browser)');\nconst BINARY_TYPE = 'arraybuffer';\nexport class WebsocketClientConnection extends AbstractWebsocketClientConnection {\n socket;\n // TODO explicit default value for \"selfSigned\" or make it required\n connect(address, selfSigned) {\n if (!this.destroyed) {\n this.socket = new Websocket(address, undefined, undefined, undefined, { rejectUnauthorized: !selfSigned });\n this.socket.binaryType = BINARY_TYPE;\n this.socket.onerror = (error) => this.onError(error);\n this.socket.onopen = () => this.onOpen();\n this.socket.onclose = (event) => this.onClose(event.code, event.reason);\n this.socket.onmessage = (message) => {\n if (!this.destroyed) {\n if (typeof message.data === 'string') {\n logger.debug('Received string data, only binary data is supported');\n }\n else {\n this.onMessage(new Uint8Array(message.data));\n }\n }\n };\n }\n else {\n logger.debug('Tried to connect() a stopped connection');\n }\n }\n stopListening() {\n if (this.socket) {\n this.socket.onopen = undefined;\n this.socket.onclose = undefined;\n this.socket.onerror = undefined;\n this.socket.onmessage = undefined;\n }\n }\n}\n","import { toNodeId } from '../../identifiers';\nexport class WebsocketClientConnectorRpcLocal {\n options;\n constructor(options) {\n this.options = options;\n }\n async requestConnection(_request, context) {\n if (this.options.abortSignal.aborted) {\n return {};\n }\n const senderPeerDescriptor = context.incomingSourceDescriptor;\n if (!this.options.hasConnection(toNodeId(senderPeerDescriptor))) {\n const connection = this.options.connect(senderPeerDescriptor);\n this.options.onNewConnection(connection);\n }\n return {};\n }\n}\n","import { WebsocketClientConnection } from '@/WebsocketClientConnection';\nimport { ConnectionType } from '../IConnection';\nimport { WebsocketClientConnectorRpcLocal } from './WebsocketClientConnectorRpcLocal';\nimport { WebsocketConnectionRequest } from '../../../generated/packages/dht/protos/DhtRpc';\nimport { createOutgoingHandshaker } from '../Handshaker';\nimport { expectedConnectionType } from '../../helpers/Connectivity';\nimport { toNodeId } from '../../identifiers';\nimport { PendingConnection } from '../PendingConnection';\nexport const connectivityMethodToWebsocketUrl = (ws, action) => {\n return (ws.tls ? 'wss://' : 'ws://') + ws.host + ':' + ws.port + ((action !== undefined) ? '?action=' + action : '');\n};\nexport class WebsocketClientConnector {\n static WEBSOCKET_CONNECTOR_SERVICE_ID = 'system/websocket-connector';\n websocketServer;\n geoIpLocator;\n localPeerDescriptor;\n connectingConnections = new Map();\n abortController = new AbortController();\n options;\n constructor(options) {\n this.options = options;\n this.registerLocalRpcMethods();\n }\n registerLocalRpcMethods() {\n const rpcLocal = new WebsocketClientConnectorRpcLocal({\n connect: (targetPeerDescriptor) => this.connect(targetPeerDescriptor),\n hasConnection: (nodeId) => (this.connectingConnections.has(nodeId)\n || this.options.hasConnection(nodeId)),\n onNewConnection: (connection) => this.options.onNewConnection(connection),\n abortSignal: this.abortController.signal\n });\n this.options.rpcCommunicator.registerRpcNotification(WebsocketConnectionRequest, 'requestConnection', async (req, context) => {\n if (!this.abortController.signal.aborted) {\n return rpcLocal.requestConnection(req, context);\n }\n else {\n return {};\n }\n });\n }\n isPossibleToFormConnection(targetPeerDescriptor) {\n const connectionType = expectedConnectionType(this.localPeerDescriptor, targetPeerDescriptor);\n return connectionType === ConnectionType.WEBSOCKET_CLIENT;\n }\n connect(targetPeerDescriptor) {\n const nodeId = toNodeId(targetPeerDescriptor);\n const existingConnection = this.connectingConnections.get(nodeId);\n if (existingConnection) {\n return existingConnection;\n }\n const socket = new WebsocketClientConnection();\n const url = connectivityMethodToWebsocketUrl(targetPeerDescriptor.websocket);\n const pendingConnection = new PendingConnection(targetPeerDescriptor);\n createOutgoingHandshaker(this.localPeerDescriptor, pendingConnection, socket, targetPeerDescriptor);\n this.connectingConnections.set(nodeId, pendingConnection);\n const delFunc = () => {\n if (this.connectingConnections.has(nodeId)) {\n this.connectingConnections.delete(nodeId);\n }\n socket.off('disconnected', delFunc);\n pendingConnection.off('disconnected', delFunc);\n pendingConnection.off('connected', delFunc);\n };\n socket.on('disconnected', delFunc);\n pendingConnection.on('disconnected', delFunc);\n pendingConnection.on('connected', delFunc);\n socket.connect(url, false);\n return pendingConnection;\n }\n setLocalPeerDescriptor(peerDescriptor) {\n this.localPeerDescriptor = peerDescriptor;\n }\n async destroy() {\n this.abortController.abort();\n const requests = Array.from(this.connectingConnections.values());\n requests.forEach((conn) => conn.close(true));\n await this.websocketServer?.stop();\n this.geoIpLocator?.stop();\n }\n}\n","export const createGeoipLocator = (_geoIpDatabaseFolder) => {\n throw new Error('GeoIpLocator is not supported in browser environment');\n};\n","/* eslint-disable class-methods-use-this */\nimport { EventEmitter } from 'eventemitter3';\n/**\n * A stub WebsocketServer for browser environment.\n */\nexport class WebsocketServer extends EventEmitter {\n constructor(_params) {\n super();\n }\n async start() {\n throw new Error('WebsocketServer is not supported in browser environment');\n }\n async stop() {\n throw new Error('WebsocketServer is not supported in browser environment');\n }\n updateCertificate(_cert, _key) {\n throw new Error('WebsocketServer is not supported in browser environment');\n }\n}\n","export const defaultAutoCertifierClientFactory = (_configFile, _autoCertifierUrl, _autoCertifierRpcCommunicator, _wsServerPort) => {\n throw new Error('AutoCertifierClient is not supported in browser environment');\n};\n","import { SERVICE_ID as AUTO_CERTIFIER_SERVICE_ID, } from '@streamr/autocertifier-client';\nimport { ListeningRpcCommunicator } from '../../transport/ListeningRpcCommunicator';\nimport { Logger, waitForEvent } from '@streamr/utils';\nimport { defaultAutoCertifierClientFactory } from '@/defaultAutoCertifierClientFactory';\nconst START_TIMEOUT = 60 * 1000;\nconst logger = new Logger('AutoCertifierClientFacade');\nexport class AutoCertifierClientFacade {\n autoCertifierClient;\n rpcCommunicator;\n options;\n constructor(options) {\n this.options = options;\n this.rpcCommunicator = new ListeningRpcCommunicator(AUTO_CERTIFIER_SERVICE_ID, options.transport);\n this.autoCertifierClient = options.createClientFactory ? options.createClientFactory()\n : defaultAutoCertifierClientFactory(options.configFile, options.url, this.rpcCommunicator, options.wsServerPort);\n }\n async start() {\n this.autoCertifierClient.on('updatedCertificate', (subdomain) => {\n this.options.setHost(subdomain.fqdn);\n this.options.updateCertificate(subdomain.certificate, subdomain.privateKey);\n logger.trace(`Updated certificate`);\n });\n await Promise.all([\n waitForEvent(this.autoCertifierClient, 'updatedCertificate', START_TIMEOUT),\n this.autoCertifierClient.start()\n ]);\n }\n stop() {\n this.autoCertifierClient.stop();\n this.rpcCommunicator.destroy();\n }\n}\n","import { Logger, raceForEvent } from '@streamr/utils';\nimport { v4 } from 'uuid';\nimport * as Err from '../helpers/errors';\nimport { Message } from '../../generated/packages/dht/protos/DhtRpc';\nimport { WebsocketClientConnection } from '@/WebsocketClientConnection';\nimport { connectivityMethodToWebsocketUrl } from './websocket/WebsocketClientConnector';\nimport { isMaybeSupportedProtocolVersion } from '../helpers/version';\nconst logger = new Logger('connectivityChecker');\n// TODO use options option or named constant?\nexport const connectAsync = async ({ url, allowSelfSignedCertificate, timeoutMs = 1000 }) => {\n const socket = new WebsocketClientConnection();\n let result;\n try {\n const resultPromise = raceForEvent(socket, ['connected', 'error'], timeoutMs);\n socket.connect(url, allowSelfSignedCertificate);\n result = await resultPromise;\n }\n catch {\n throw new Err.ConnectionFailed('WebSocket connection timed out');\n }\n if (result.winnerName === 'error') {\n throw new Err.ConnectionFailed('Could not open WebSocket connection');\n }\n return socket;\n};\nexport const CONNECTIVITY_CHECKER_SERVICE_ID = 'system/connectivity-checker';\nconst CONNECTIVITY_CHECKER_TIMEOUT = 5000;\nexport const sendConnectivityRequest = async (request, entryPoint) => {\n let outgoingConnection;\n const wsServerInfo = {\n host: entryPoint.websocket.host,\n port: entryPoint.websocket.port,\n tls: entryPoint.websocket.tls,\n };\n const url = connectivityMethodToWebsocketUrl(wsServerInfo, 'connectivityRequest');\n logger.debug(`Attempting connectivity check with entrypoint ${url}`);\n try {\n outgoingConnection = await connectAsync({\n url,\n allowSelfSignedCertificate: request.allowSelfSignedCertificate\n });\n }\n catch (e) {\n throw new Err.ConnectionFailed(`Failed to connect to entrypoint for connectivity check: ${url}`, e);\n }\n // send connectivity request\n const msg = {\n serviceId: CONNECTIVITY_CHECKER_SERVICE_ID,\n messageId: v4(),\n body: {\n oneofKind: 'connectivityRequest',\n connectivityRequest: request\n }\n };\n const responseAwaiter = () => {\n return new Promise((resolve, reject) => {\n const timeoutId = setTimeout(() => {\n // TODO should we have some handling for this floating promise?\n outgoingConnection.close(false);\n reject(new Err.ConnectivityResponseTimeout('timeout'));\n }, CONNECTIVITY_CHECKER_TIMEOUT);\n const listener = (bytes) => {\n // TODO should we have some handling for this floating promise?\n outgoingConnection.close(false);\n try {\n const message = Message.fromBinary(bytes);\n if (message.body.oneofKind === 'connectivityResponse') {\n logger.debug('ConnectivityResponse received: ' + JSON.stringify(Message.toJson(message)));\n const connectivityResponseMessage = message.body.connectivityResponse;\n const remoteProtocolVersion = connectivityResponseMessage.protocolVersion;\n outgoingConnection.off('data', listener);\n clearTimeout(timeoutId);\n if (isMaybeSupportedProtocolVersion(remoteProtocolVersion)) {\n resolve(connectivityResponseMessage);\n }\n else {\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\n reject(`Unsupported version: ${remoteProtocolVersion}`);\n }\n }\n }\n catch (err) {\n logger.trace('Could not parse message', { err });\n }\n };\n outgoingConnection.on('data', listener);\n });\n };\n try {\n const retPromise = responseAwaiter();\n outgoingConnection.send(Message.toBinary(msg));\n logger.trace('ConnectivityRequest sent: ' + JSON.stringify(Message.toJson(msg)));\n return await retPromise;\n }\n catch (e) {\n logger.error('error getting connectivityresponse');\n throw e;\n }\n};\n","import { ipv4ToNumber, Logger } from '@streamr/utils';\nimport { v4 } from 'uuid';\nimport { Message } from '../../generated/packages/dht/protos/DhtRpc';\nimport { NatType } from './ConnectionManager';\nimport { CONNECTIVITY_CHECKER_SERVICE_ID, connectAsync } from './connectivityChecker';\nimport { connectivityMethodToWebsocketUrl } from './websocket/WebsocketClientConnector';\nimport { LOCAL_PROTOCOL_VERSION } from '../helpers/version';\nexport const DISABLE_CONNECTIVITY_PROBE = 0;\nconst logger = new Logger('connectivityRequestHandler');\nexport const attachConnectivityRequestHandler = (connectionToListenTo, geoIpLocator) => {\n connectionToListenTo.on('data', async (data) => {\n logger.trace('server received data');\n try {\n const message = Message.fromBinary(data);\n if (message.body.oneofKind === 'connectivityRequest') {\n logger.trace('ConnectivityRequest received: ' + JSON.stringify(Message.toJson(message)));\n try {\n await handleIncomingConnectivityRequest(connectionToListenTo, message.body.connectivityRequest, geoIpLocator);\n logger.trace('handleIncomingConnectivityRequest ok');\n }\n catch (err1) {\n logger.error('handleIncomingConnectivityRequest', { err: err1 });\n }\n }\n }\n catch (err2) {\n logger.trace('Could not parse message', { err: err2 });\n }\n });\n};\nconst handleIncomingConnectivityRequest = async (connection, connectivityRequest, geoIpLocator) => {\n const host = connectivityRequest.host ?? connection.getRemoteIpAddress();\n const ipAddress = connection.getRemoteIpAddress();\n let connectivityResponse;\n if (connectivityRequest.port !== DISABLE_CONNECTIVITY_PROBE) {\n connectivityResponse = await connectivityProbe(connectivityRequest, ipAddress, host);\n }\n else {\n logger.trace('ConnectivityRequest port is 0, replying without connectivityProbe');\n connectivityResponse = {\n host,\n natType: NatType.UNKNOWN,\n ipAddress: ipv4ToNumber(ipAddress),\n protocolVersion: LOCAL_PROTOCOL_VERSION\n };\n }\n if (geoIpLocator !== undefined) {\n const location = geoIpLocator.lookup(ipAddress);\n if (location !== undefined) {\n connectivityResponse.latitude = location.latitude;\n connectivityResponse.longitude = location.longitude;\n }\n }\n const msg = {\n serviceId: CONNECTIVITY_CHECKER_SERVICE_ID,\n messageId: v4(),\n body: {\n oneofKind: 'connectivityResponse',\n connectivityResponse\n }\n };\n connection.send(Message.toBinary(msg));\n logger.trace('ConnectivityResponse sent: ' + JSON.stringify(Message.toJson(msg)));\n};\nconst connectivityProbe = async (connectivityRequest, ipAddress, host) => {\n let outgoingConnection;\n let connectivityResponseMessage;\n try {\n const wsServerInfo = {\n host,\n port: connectivityRequest.port,\n tls: connectivityRequest.tls\n };\n const url = connectivityMethodToWebsocketUrl(wsServerInfo, 'connectivityProbe');\n logger.trace(`Attempting Connectivity Check to ${url}`);\n outgoingConnection = await connectAsync({\n url,\n allowSelfSignedCertificate: connectivityRequest.allowSelfSignedCertificate\n });\n logger.trace('Connectivity test produced positive result, communicating reply to the requester ' + host + ':' + connectivityRequest.port);\n connectivityResponseMessage = {\n host,\n natType: NatType.OPEN_INTERNET,\n websocket: { host, port: connectivityRequest.port, tls: connectivityRequest.tls },\n ipAddress: ipv4ToNumber(ipAddress),\n protocolVersion: LOCAL_PROTOCOL_VERSION\n };\n }\n catch (err) {\n logger.debug('error', { err });\n connectivityResponseMessage = {\n host,\n natType: NatType.UNKNOWN,\n ipAddress: ipv4ToNumber(ipAddress),\n protocolVersion: LOCAL_PROTOCOL_VERSION\n };\n }\n if (outgoingConnection) {\n // TODO should we have some handling for this floating promise?\n outgoingConnection.close(false);\n }\n return connectivityResponseMessage;\n};\n","import { Logger } from '@streamr/utils';\nimport { RpcRemote } from '../../dht/contact/RpcRemote';\nimport { toNodeId } from '../../identifiers';\nconst logger = new Logger('WebsocketClientConnectorRpcRemote');\nexport class WebsocketClientConnectorRpcRemote extends RpcRemote {\n async requestConnection() {\n logger.trace(`Requesting WebSocket connection from ${toNodeId(this.getLocalPeerDescriptor())}`);\n const request = {};\n const options = this.formDhtRpcOptions();\n return this.getClient().requestConnection(request, options);\n }\n}\n","import { createGeoipLocator } from '@/createGeoipLocator';\nimport { connectivityMethodToWebsocketUrl } from './WebsocketClientConnector';\nimport { WebsocketServer } from '@/WebsocketServer';\nimport { areEqualPeerDescriptors, toNodeId } from '../../identifiers';\nimport { AutoCertifierClientFacade } from './AutoCertifierClientFacade';\nimport { HandshakeError } from '../../../generated/packages/dht/protos/DhtRpc';\nimport { NatType } from '../ConnectionManager';\nimport { ipv4ToNumber, Logger, wait } from '@streamr/utils';\nimport { attachConnectivityRequestHandler, DISABLE_CONNECTIVITY_PROBE } from '../connectivityRequestHandler';\nimport { ConnectionType } from '../IConnection';\nimport { isMaybeSupportedProtocolVersion, LOCAL_PROTOCOL_VERSION } from '../../helpers/version';\nimport shuffle from 'lodash/shuffle';\nimport { sendConnectivityRequest } from '../connectivityChecker';\nimport { acceptHandshake, Handshaker, rejectHandshake } from '../Handshaker';\nimport { WebsocketClientConnectorRpcRemote } from './WebsocketClientConnectorRpcRemote';\nimport { WebsocketClientConnectorRpcClient } from '../../../generated/packages/dht/protos/DhtRpc.client';\nimport { WebsocketServerStartError } from '../../helpers/errors';\nimport * as Err from '../../helpers/errors';\nimport { expectedConnectionType } from '../../helpers/Connectivity';\nimport { PendingConnection } from '../PendingConnection';\nconst logger = new Logger('WebsocketServerConnector');\n// TODO: Move server starting logic including autocertification and connectivity checking to WebsocketServer.ts?\nexport class WebsocketServerConnector {\n websocketServer;\n geoIpLocator;\n ongoingConnectRequests = new Map();\n host;\n autoCertifierClient;\n selectedPort;\n localPeerDescriptor;\n abortController = new AbortController();\n options;\n constructor(options) {\n this.options = options;\n this.websocketServer = options.portRange ? new WebsocketServer({\n portRange: options.portRange,\n tlsCertificate: options.tlsCertificate,\n maxMessageSize: options.maxMessageSize,\n enableTls: options.serverEnableTls\n }) : undefined;\n this.host = options.host;\n }\n async start() {\n if (!this.abortController.signal.aborted && this.websocketServer) {\n this.websocketServer.on('connected', (connection) => {\n const serverSocket = connection;\n const urlParams = new URLSearchParams(serverSocket.resourceURL.query ?? '');\n const action = urlParams.get('action');\n logger.trace('WebSocket client connected', { action, remoteAddress: serverSocket.getRemoteIpAddress() });\n if (action === 'connectivityRequest') {\n attachConnectivityRequestHandler(serverSocket, this.geoIpLocator);\n }\n else if (action === 'connectivityProbe') {\n // no-op\n }\n else {\n // The localPeerDescriptor can be undefined here as the WS server is used for connectivity checks\n // before the localPeerDescriptor is set during start.\n // Handshaked connections should be rejected before the localPeerDescriptor is set.\n // eslint-disable-next-line no-lonely-if\n if (this.localPeerDescriptor !== undefined) {\n this.attachHandshaker(connection);\n }\n else {\n logger.trace('incoming Websocket connection before localPeerDescriptor was set, closing connection');\n connection.close(false).catch(() => { });\n }\n }\n });\n if (this.options.geoIpDatabaseFolder) {\n try {\n this.geoIpLocator = await createGeoipLocator(this.options.geoIpDatabaseFolder);\n }\n catch (err) {\n logger.error('Failed to start GeoIpLocator', { err });\n }\n }\n const port = await this.websocketServer.start();\n this.selectedPort = port;\n }\n }\n attachHandshaker(connection) {\n // TODO: use createIncomingHandshaker here?\n const handshaker = new Handshaker(this.localPeerDescriptor, connection);\n handshaker.once('handshakeRequest', (localPeerDescriptor, remoteProtocolVersion, remotePeerDescriptor) => {\n this.onServerSocketHandshakeRequest(localPeerDescriptor, connection, handshaker, remoteProtocolVersion, remotePeerDescriptor);\n });\n }\n onServerSocketHandshakeRequest(remotePeerDescriptor, websocketServerConnection, handshaker, remoteProtocolVersion, targetPeerDescriptor) {\n const nodeId = toNodeId(remotePeerDescriptor);\n if (this.ongoingConnectRequests.has(nodeId)) {\n const { pendingConnection, delFunc } = this.ongoingConnectRequests.get(nodeId);\n if (!isMaybeSupportedProtocolVersion(remoteProtocolVersion)) {\n rejectHandshake(pendingConnection, websocketServerConnection, handshaker, HandshakeError.UNSUPPORTED_PROTOCOL_VERSION);\n delFunc();\n }\n else if (targetPeerDescriptor && !areEqualPeerDescriptors(this.localPeerDescriptor, targetPeerDescriptor)) {\n rejectHandshake(pendingConnection, websocketServerConnection, handshaker, HandshakeError.INVALID_TARGET_PEER_DESCRIPTOR);\n delFunc();\n }\n else {\n acceptHandshake(handshaker, pendingConnection, websocketServerConnection);\n }\n }\n else {\n const pendingConnection = new PendingConnection(remotePeerDescriptor);\n if (!isMaybeSupportedProtocolVersion(remoteProtocolVersion)) {\n rejectHandshake(pendingConnection, websocketServerConnection, handshaker, HandshakeError.UNSUPPORTED_PROTOCOL_VERSION);\n }\n else if (targetPeerDescriptor && !areEqualPeerDescriptors(this.localPeerDescriptor, targetPeerDescriptor)) {\n rejectHandshake(pendingConnection, websocketServerConnection, handshaker, HandshakeError.INVALID_TARGET_PEER_DESCRIPTOR);\n }\n else if (this.options.onNewConnection(pendingConnection)) {\n acceptHandshake(handshaker, pendingConnection, websocketServerConnection);\n }\n else {\n rejectHandshake(pendingConnection, websocketServerConnection, handshaker, HandshakeError.DUPLICATE_CONNECTION);\n }\n }\n }\n async checkConnectivity(allowSelfSignedCertificate) {\n // TODO: this could throw?\n if (this.abortController.signal.aborted) {\n return {\n host: '127.0.0.1',\n natType: NatType.UNKNOWN,\n ipAddress: ipv4ToNumber('127.0.0.1'),\n protocolVersion: LOCAL_PROTOCOL_VERSION\n };\n }\n if (!this.options.entrypoints || this.options.entrypoints.length === 0) {\n // return connectivity info given in options\n return {\n host: this.host,\n natType: NatType.OPEN_INTERNET,\n websocket: {\n host: this.host,\n port: this.selectedPort,\n tls: this.options.tlsCertificate !== undefined\n },\n // TODO: Resolve the given host name or or use as is if IP was given. \n ipAddress: ipv4ToNumber('127.0.0.1'),\n protocolVersion: LOCAL_PROTOCOL_VERSION\n };\n }\n const shuffledEntrypoints = shuffle(this.options.entrypoints);\n while (shuffledEntrypoints.length > 0 && !this.abortController.signal.aborted) {\n const entryPoint = shuffledEntrypoints[0];\n try {\n // Do real connectivity checking\n const connectivityRequest = {\n port: this.selectedPort ?? DISABLE_CONNECTIVITY_PROBE,\n host: this.host,\n tls: this.websocketServer ? this.options.serverEnableTls : false,\n allowSelfSignedCertificate\n };\n if (!this.abortController.signal.aborted) {\n return await sendConnectivityRequest(connectivityRequest, entryPoint);\n }\n else {\n throw new Err.ConnectionFailed('ConnectivityChecker is destroyed');\n }\n }\n catch (err) {\n const error = `Failed to connect to entrypoint with id ${toNodeId(entryPoint)} `\n + `and URL ${connectivityMethodToWebsocketUrl(entryPoint.websocket)}`;\n logger.error(error, { err });\n shuffledEntrypoints.shift();\n await wait(2000, this.abortController.signal);\n }\n }\n throw new WebsocketServerStartError(`Failed to connect to the entrypoints after ${this.options.entrypoints.length} attempts\\n`\n + `Attempted hosts: ${this.options.entrypoints.map((entry) => `${entry.websocket.host}:${entry.websocket.port}`).join(', ')}`);\n }\n async autoCertify() {\n this.autoCertifierClient = new AutoCertifierClientFacade({\n configFile: this.options.autoCertifierConfigFile,\n transport: this.options.autoCertifierTransport,\n url: this.options.autoCertifierUrl,\n wsServerPort: this.selectedPort,\n setHost: (hostName) => this.setHost(hostName),\n updateCertificate: (certificate, privateKey) => this.websocketServer.updateCertificate(certificate, privateKey)\n });\n logger.trace(`AutoCertifying subdomain...`);\n await this.autoCertifierClient.start();\n }\n setHost(hostName) {\n logger.trace(`Setting host name to ${hostName}`);\n this.host = hostName;\n }\n connect(targetPeerDescriptor) {\n const nodeId = toNodeId(targetPeerDescriptor);\n if (this.ongoingConnectRequests.has(nodeId)) {\n return this.ongoingConnectRequests.get(nodeId).pendingConnection;\n }\n return this.requestConnectionFromPeer(this.localPeerDescriptor, targetPeerDescriptor);\n }\n requestConnectionFromPeer(localPeerDescriptor, targetPeerDescriptor) {\n setImmediate(() => {\n const remoteConnector = new WebsocketClientConnectorRpcRemote(localPeerDescriptor, targetPeerDescriptor, this.options.rpcCommunicator, WebsocketClientConnectorRpcClient);\n remoteConnector.requestConnection().then(() => {\n logger.trace('Sent WebsocketConnectionRequest notification to peer', { targetPeerDescriptor });\n }, (err) => {\n logger.debug('Failed to send WebsocketConnectionRequest notification to peer ', {\n error: err, targetPeerDescriptor\n });\n });\n });\n const pendingConnection = new PendingConnection(targetPeerDescriptor);\n const nodeId = toNodeId(targetPeerDescriptor);\n // TODO: can this leak?\n const delFunc = () => {\n pendingConnection.off('connected', delFunc);\n pendingConnection.off('disconnected', delFunc);\n this.ongoingConnectRequests.delete(nodeId);\n };\n pendingConnection.on('connected', delFunc);\n pendingConnection.on('disconnected', delFunc);\n this.ongoingConnectRequests.set(nodeId, { pendingConnection, delFunc });\n return pendingConnection;\n }\n isPossibleToFormConnection(targetPeerDescriptor) {\n const connectionType = expectedConnectionType(this.localPeerDescriptor, targetPeerDescriptor);\n return (connectionType === ConnectionType.WEBSOCKET_SERVER);\n }\n setLocalPeerDescriptor(localPeerDescriptor) {\n this.localPeerDescriptor = localPeerDescriptor;\n }\n async destroy() {\n this.abortController.abort();\n const requests = Array.from(this.ongoingConnectRequests.values());\n requests.forEach((ongoingConnectRequest) => ongoingConnectRequest.pendingConnection.close(true));\n await this.websocketServer?.stop();\n this.geoIpLocator?.stop();\n }\n}\n","import { Logger } from '@streamr/utils';\nimport { SimulatorConnector } from './simulator/SimulatorConnector';\nimport { WebrtcConnector } from './webrtc/WebrtcConnector';\nimport { WebsocketClientConnector } from './websocket/WebsocketClientConnector';\nimport { WebsocketServerConnector } from './websocket/WebsocketServerConnector';\nimport { ListeningRpcCommunicator } from '../transport/ListeningRpcCommunicator';\nconst logger = new Logger('ConnectorFacade');\nexport class DefaultConnectorFacade {\n options;\n localPeerDescriptor;\n websocketConnectorRpcCommunicator;\n websocketClientConnector;\n websocketServerConnector;\n webrtcConnector;\n constructor(options) {\n this.options = options;\n }\n async start(onNewConnection, hasConnection, autoCertifierTransport) {\n logger.trace(`Creating WebsocketConnectorRpcLocal`);\n this.websocketConnectorRpcCommunicator = new ListeningRpcCommunicator(WebsocketClientConnector.WEBSOCKET_CONNECTOR_SERVICE_ID, this.options.transport, { rpcRequestTimeout: 15000 } // TODO use options option or named constant?\n );\n const webSocketClientConnectorOptions = {\n // TODO should we use canConnect also for WebrtcConnector? (NET-1142)\n onNewConnection,\n hasConnection,\n rpcCommunicator: this.websocketConnectorRpcCommunicator\n };\n this.websocketClientConnector = new WebsocketClientConnector(webSocketClientConnectorOptions);\n const webSocketServerConnectorOptions = {\n rpcCommunicator: this.websocketConnectorRpcCommunicator,\n // TODO should we use canConnect also for WebrtcConnector? (NET-1142)\n onNewConnection,\n hasConnection,\n portRange: this.options.websocketPortRange,\n host: this.options.websocketHost,\n entrypoints: this.options.entryPoints,\n tlsCertificate: this.options.tlsCertificate,\n serverEnableTls: this.options.websocketServerEnableTls,\n autoCertifierUrl: this.options.autoCertifierUrl,\n autoCertifierConfigFile: this.options.autoCertifierConfigFile,\n autoCertifierTransport,\n maxMessageSize: this.options.maxMessageSize,\n geoIpDatabaseFolder: this.options.geoIpDatabaseFolder\n };\n this.websocketServerConnector = new WebsocketServerConnector(webSocketServerConnectorOptions);\n this.webrtcConnector = new WebrtcConnector({\n onNewConnection,\n transport: this.options.transport,\n iceServers: this.options.iceServers,\n allowPrivateAddresses: this.options.webrtcAllowPrivateAddresses,\n bufferThresholdLow: this.options.webrtcDatachannelBufferThresholdLow,\n bufferThresholdHigh: this.options.webrtcDatachannelBufferThresholdHigh,\n externalIp: this.options.externalIp,\n portRange: this.options.webrtcPortRange,\n maxMessageSize: this.options.maxMessageSize\n });\n await this.websocketServerConnector.start();\n // TODO: generate a PeerDescriptor in a single function. Requires changes to the createOwnPeerDescriptor\n // function in the options. Currently it's given by the DhtNode and it sets the PeerDescriptor for the\n // DhtNode in each call. \n // LocalPeerDescriptor could be stored in one place and passed from there to the connectors\n const temporarilySelfSigned = (!this.options.tlsCertificate && this.options.websocketServerEnableTls === true);\n const connectivityResponse = await this.websocketServerConnector.checkConnectivity(temporarilySelfSigned);\n const localPeerDescriptor = await this.options.createLocalPeerDescriptor(connectivityResponse);\n this.setLocalPeerDescriptor(localPeerDescriptor);\n if (localPeerDescriptor.websocket && !this.options.tlsCertificate && this.options.websocketServerEnableTls) {\n try {\n await this.websocketServerConnector.autoCertify();\n const connectivityResponse = await this.websocketServerConnector.checkConnectivity(false);\n const autocertifiedLocalPeerDescriptor = await this.options.createLocalPeerDescriptor(connectivityResponse);\n if (autocertifiedLocalPeerDescriptor.websocket !== undefined) {\n this.setLocalPeerDescriptor(autocertifiedLocalPeerDescriptor);\n }\n else {\n logger.warn('Connectivity check failed after auto-certification, disabling WebSocket server TLS');\n await this.restartWebsocketServerConnector({\n ...webSocketServerConnectorOptions,\n serverEnableTls: false\n });\n }\n }\n catch (err) {\n logger.warn('Failed to auto-certify, disabling WebSocket server TLS', { err });\n await this.restartWebsocketServerConnector({\n ...webSocketServerConnectorOptions,\n serverEnableTls: false\n });\n }\n }\n }\n setLocalPeerDescriptor(peerDescriptor) {\n this.localPeerDescriptor = peerDescriptor;\n this.websocketServerConnector.setLocalPeerDescriptor(peerDescriptor);\n this.websocketClientConnector.setLocalPeerDescriptor(peerDescriptor);\n this.webrtcConnector.setLocalPeerDescriptor(peerDescriptor);\n }\n async restartWebsocketServerConnector(options) {\n await this.websocketServerConnector.destroy();\n this.websocketServerConnector = new WebsocketServerConnector(options);\n await this.websocketServerConnector.start();\n const connectivityResponse = await this.websocketServerConnector.checkConnectivity(false);\n const localPeerDescriptor = await this.options.createLocalPeerDescriptor(connectivityResponse);\n this.setLocalPeerDescriptor(localPeerDescriptor);\n }\n createConnection(peerDescriptor) {\n if (this.websocketClientConnector.isPossibleToFormConnection(peerDescriptor)) {\n return this.websocketClientConnector.connect(peerDescriptor);\n }\n else if (this.websocketServerConnector.isPossibleToFormConnection(peerDescriptor)) {\n return this.websocketServerConnector.connect(peerDescriptor);\n }\n else {\n return this.webrtcConnector.connect(peerDescriptor, false);\n }\n }\n getLocalPeerDescriptor() {\n return this.localPeerDescriptor;\n }\n async stop() {\n this.websocketConnectorRpcCommunicator.destroy();\n await this.websocketServerConnector.destroy();\n await this.websocketClientConnector.destroy();\n await this.webrtcConnector.stop();\n }\n}\nexport class SimulatorConnectorFacade {\n localPeerDescriptor;\n simulatorConnector;\n simulator;\n constructor(localPeerDescriptor, simulator) {\n this.localPeerDescriptor = localPeerDescriptor;\n this.simulator = simulator;\n }\n async start(onNewConnection) {\n logger.trace(`Creating SimulatorConnector`);\n this.simulatorConnector = new SimulatorConnector(this.localPeerDescriptor, this.simulator, onNewConnection);\n this.simulator.addConnector(this.simulatorConnector);\n }\n createConnection(peerDescriptor) {\n return this.simulatorConnector.connect(peerDescriptor);\n }\n getLocalPeerDescriptor() {\n return this.localPeerDescriptor;\n }\n async stop() {\n await this.simulatorConnector.stop();\n }\n}\n","import { ConnectivityMethod } from '../../generated/packages/dht/protos/DhtRpc';\nfunction convertUnsignedIntegerToBuffer(number) {\n const buffer = Buffer.alloc(4);\n buffer.writeUInt32BE(number);\n return buffer;\n}\nexport const createPeerDescriptorSignaturePayload = (peerDescriptor) => {\n const separator = Buffer.from(',');\n const buffers = [\n peerDescriptor.type !== undefined ? convertUnsignedIntegerToBuffer(peerDescriptor.type) : new Uint8Array(0),\n separator,\n peerDescriptor.udp !== undefined ? ConnectivityMethod.toBinary(peerDescriptor.udp) : new Uint8Array(0),\n separator,\n peerDescriptor.tcp !== undefined ? ConnectivityMethod.toBinary(peerDescriptor.tcp) : new Uint8Array(0),\n separator,\n peerDescriptor.websocket !== undefined ? ConnectivityMethod.toBinary(peerDescriptor.websocket) : new Uint8Array(0),\n separator,\n peerDescriptor.region !== undefined ? convertUnsignedIntegerToBuffer(peerDescriptor.region) : new Uint8Array(0),\n separator,\n peerDescriptor.ipAddress !== undefined ? convertUnsignedIntegerToBuffer(peerDescriptor.ipAddress) : new Uint8Array(0),\n separator,\n peerDescriptor.publicKey !== undefined ? Buffer.from(peerDescriptor.publicKey) : new Uint8Array(0)\n ];\n return Buffer.concat(buffers);\n};\n","import { EcdsaSecp256k1Evm, randomBytes } from '@streamr/utils';\nimport { isBrowserEnvironment } from '@/isBrowserEnvironment';\nimport { createPeerDescriptorSignaturePayload } from '../helpers/createPeerDescriptorSignaturePayload';\nimport { toDhtAddressRaw } from '../identifiers';\nimport { NodeType } from '../../generated/packages/dht/protos/DhtRpc';\nconst signingUtil = new EcdsaSecp256k1Evm();\nconst calculateNodeIdRaw = async (ipAddress, privateKey) => {\n // nodeId is calculated as \n // concatenate(\n // get104leastSignificatBits(hash(ipAddress)), \n // get56leastSignificatBits(sign(ipAddress))\n // )\n const ipAsBuffer = Buffer.alloc(4);\n ipAsBuffer.writeUInt32BE(ipAddress);\n const ipHash = signingUtil.keccakHash(ipAsBuffer);\n const signature = await signingUtil.createSignature(ipAsBuffer, privateKey);\n const nodeIdRaw = Buffer.concat([\n ipHash.subarray(ipHash.length - 13, ipHash.length),\n signature.subarray(signature.length - 7, signature.length)\n ]);\n return nodeIdRaw;\n};\nexport const createPeerDescriptor = async (connectivityResponse, region, nodeId) => {\n const privateKey = randomBytes(32);\n const publicKey = randomBytes(20); // TODO calculate publicKey from privateKey\n let nodeIdRaw;\n if (nodeId !== undefined) {\n nodeIdRaw = toDhtAddressRaw(nodeId);\n }\n else {\n nodeIdRaw = await calculateNodeIdRaw(connectivityResponse.ipAddress, privateKey);\n }\n const ret = {\n nodeId: nodeIdRaw,\n type: isBrowserEnvironment ? NodeType.BROWSER : NodeType.NODEJS,\n ipAddress: connectivityResponse.ipAddress,\n region,\n publicKey\n };\n if (connectivityResponse.websocket) {\n ret.websocket = {\n host: connectivityResponse.websocket.host,\n port: connectivityResponse.websocket.port,\n tls: connectivityResponse.websocket.tls\n };\n }\n ret.signature = await signingUtil.createSignature(createPeerDescriptorSignaturePayload(ret), privateKey);\n return ret;\n};\n","import { toNodeId } from '../../identifiers';\nexport class Contact {\n peerDescriptor;\n constructor(peerDescriptor) {\n this.peerDescriptor = peerDescriptor;\n }\n getPeerDescriptor() {\n return this.peerDescriptor;\n }\n getNodeId() {\n return toNodeId(this.peerDescriptor);\n }\n}\n","import { Contact } from './Contact';\nimport { SortedContactList } from './SortedContactList';\nexport const getClosestNodes = (referenceId, contacts, opts) => {\n const list = new SortedContactList({\n referenceId,\n allowToContainReferenceId: true,\n excludedNodeIds: opts?.excludedNodeIds,\n maxSize: opts?.maxCount\n });\n for (const contact of contacts) {\n list.addContact(new Contact(contact));\n }\n return list.getClosestContacts().map((n) => n.getPeerDescriptor());\n};\n","import { Logger } from '@streamr/utils';\nimport { toDhtAddress, toNodeId } from '../identifiers';\nimport { getClosestNodes } from './contact/getClosestNodes';\nconst logger = new Logger('DhtNodeRpcLocal');\nexport class DhtNodeRpcLocal {\n options;\n constructor(options) {\n this.options = options;\n }\n // TODO rename to getClosestNeighbors (breaking change)\n async getClosestPeers(request, context) {\n this.options.addContact(context.incomingSourceDescriptor);\n const peers = getClosestNodes(toDhtAddress(request.nodeId), this.options.getNeighbors(), { maxCount: this.options.peerDiscoveryQueryBatchSize });\n const response = {\n peers,\n requestId: request.requestId\n };\n return response;\n }\n // TODO rename to getClosestRingContacts (breaking change)\n async getClosestRingPeers(request, context) {\n this.options.addContact(context.incomingSourceDescriptor);\n const closestContacts = this.options.getClosestRingContactsTo(request.ringId, this.options.peerDiscoveryQueryBatchSize);\n const response = {\n leftPeers: closestContacts.left,\n rightPeers: closestContacts.right,\n requestId: request.requestId\n };\n return response;\n }\n async ping(request, context) {\n logger.trace('received ping request: ' + toNodeId(context.incomingSourceDescriptor));\n setImmediate(() => {\n this.options.addContact(context.incomingSourceDescriptor);\n });\n const response = {\n requestId: request.requestId\n };\n return response;\n }\n async leaveNotice(context) {\n // TODO check signature??\n const sender = context.incomingSourceDescriptor;\n const senderNodeId = toNodeId(sender);\n logger.trace('received leave notice: ' + senderNodeId);\n this.options.removeContact(senderNodeId);\n return {};\n }\n}\n","import { Logger } from '@streamr/utils';\nimport { v4 } from 'uuid';\nimport { toNodeId, toDhtAddressRaw } from '../identifiers';\nimport { DhtNodeRpcClient } from '../../generated/packages/dht/protos/DhtRpc.client';\nimport { RpcRemote } from './contact/RpcRemote';\nconst logger = new Logger('DhtNodeRpcRemote');\nexport class DhtNodeRpcRemote extends RpcRemote {\n static counter = 0;\n vectorClock;\n id;\n serviceId;\n constructor(localPeerDescriptor, peerDescriptor, serviceId, rpcCommunicator, rpcRequestTimeout) {\n super(localPeerDescriptor, peerDescriptor, rpcCommunicator, DhtNodeRpcClient, rpcRequestTimeout);\n this.id = this.getPeerDescriptor().nodeId;\n this.vectorClock = DhtNodeRpcRemote.counter++;\n this.serviceId = serviceId;\n }\n async getClosestPeers(nodeId) {\n logger.trace(`Requesting getClosestPeers on ${this.serviceId} from ${this.getNodeId()}`);\n const request = {\n nodeId: toDhtAddressRaw(nodeId),\n requestId: v4()\n };\n try {\n const peers = await this.getClient().getClosestPeers(request, this.formDhtRpcOptions());\n return peers.peers;\n }\n catch (err) {\n logger.trace(`getClosestPeers error ${this.serviceId}`, { err });\n throw err;\n }\n }\n // TODO rename to getClosestRingContacts (breaking change)\n async getClosestRingPeers(ringIdRaw) {\n logger.trace(`Requesting getClosestRingPeers on ${this.serviceId} from ${this.getNodeId()}`);\n const request = {\n ringId: ringIdRaw,\n requestId: v4()\n };\n try {\n const response = await this.getClient().getClosestRingPeers(request, this.formDhtRpcOptions());\n return { left: response.leftPeers ?? [], right: response.rightPeers ?? [] };\n }\n catch (err) {\n logger.trace(`getClosestRingPeers error ${this.serviceId}`, { err });\n throw err;\n }\n }\n async ping() {\n logger.trace(`Requesting ping on ${this.serviceId} from ${this.getNodeId()}`);\n const request = {\n requestId: v4()\n };\n const options = this.formDhtRpcOptions();\n try {\n const pong = await this.getClient().ping(request, options);\n if (pong.requestId === request.requestId) {\n return true;\n }\n }\n catch (err) {\n logger.trace(`ping failed on ${this.serviceId} to ${this.getNodeId()}`, { err });\n }\n return false;\n }\n leaveNotice() {\n logger.trace(`Sending leaveNotice on ${this.serviceId} from ${this.getNodeId()}`);\n const options = this.formDhtRpcOptions({\n notification: true\n });\n this.getClient().leaveNotice({}, options).catch((e) => {\n logger.trace('Failed to send leaveNotice' + e);\n });\n }\n getNodeId() {\n return toNodeId(this.getPeerDescriptor());\n }\n}\n","import { ExternalFetchDataResponse, ExternalStoreDataResponse, RecursiveOperation, ExternalFindClosestNodesResponse } from '../../generated/packages/dht/protos/DhtRpc';\nimport { toNodeId, toDhtAddress } from '../identifiers';\nexport class ExternalApiRpcLocal {\n options;\n constructor(options) {\n this.options = options;\n }\n async externalFetchData(request, context) {\n const senderPeerDescriptor = context.incomingSourceDescriptor;\n const result = await this.options.executeRecursiveOperation(toDhtAddress(request.key), RecursiveOperation.FETCH_DATA, toNodeId(senderPeerDescriptor));\n return ExternalFetchDataResponse.create({ entries: result.dataEntries ?? [] });\n }\n async externalStoreData(request, context) {\n const senderPeerDescriptor = context.incomingSourceDescriptor;\n const result = await this.options.storeDataToDht(toDhtAddress(request.key), request.data, toNodeId(senderPeerDescriptor));\n return ExternalStoreDataResponse.create({\n storers: result\n });\n }\n async externalFindClosestNodes(request, context) {\n const senderPeerDescriptor = context.incomingSourceDescriptor;\n const result = await this.options.executeRecursiveOperation(toDhtAddress(request.nodeId), RecursiveOperation.FIND_CLOSEST_NODES, toNodeId(senderPeerDescriptor));\n return ExternalFindClosestNodesResponse.create({\n closestNodes: result.closestNodes\n });\n }\n}\n","import { toDhtAddressRaw } from '../identifiers';\nimport { RpcRemote } from './contact/RpcRemote';\nconst DEFAULT_TIMEOUT = 10000;\nexport class ExternalApiRpcRemote extends RpcRemote {\n async externalFetchData(key) {\n const request = {\n key: toDhtAddressRaw(key)\n };\n const options = this.formDhtRpcOptions({\n // TODO use options option or named constant?\n timeout: DEFAULT_TIMEOUT\n });\n try {\n const data = await this.getClient().externalFetchData(request, options);\n return data.entries;\n }\n catch {\n return [];\n }\n }\n async storeData(key, data) {\n const request = {\n key: toDhtAddressRaw(key),\n data\n };\n const options = this.formDhtRpcOptions({\n // TODO use options option or named constant?\n timeout: DEFAULT_TIMEOUT\n });\n try {\n const response = await this.getClient().externalStoreData(request, options);\n return response.storers;\n }\n catch {\n return [];\n }\n }\n async externalFindClosestNode(key) {\n const request = {\n nodeId: toDhtAddressRaw(key)\n };\n const options = this.formDhtRpcOptions({\n timeout: DEFAULT_TIMEOUT\n });\n try {\n const response = await this.getClient().externalFindClosestNodes(request, options);\n return response.closestNodes;\n }\n catch {\n return [];\n }\n }\n}\n","import { EventEmitter } from 'eventemitter3';\nexport class ContactList extends EventEmitter {\n contactsById = new Map();\n // TODO move this to SortedContactList\n contactIds = [];\n localNodeId;\n maxSize;\n constructor(localNodeId, maxSize) {\n super();\n this.localNodeId = localNodeId;\n this.maxSize = maxSize;\n }\n getContact(id) {\n return this.contactsById.get(id);\n }\n getSize() {\n return this.contactIds.length;\n }\n clear() {\n this.contactsById.clear();\n this.contactIds = [];\n }\n stop() {\n this.removeAllListeners();\n this.clear();\n }\n}\n","import { ContactList } from './ContactList';\nexport class RandomContactList extends ContactList {\n randomness;\n constructor(localNodeId, maxSize, randomness = 0.20) {\n super(localNodeId, maxSize);\n this.randomness = randomness;\n }\n addContact(contact) {\n if (this.localNodeId === contact.getNodeId()) {\n return;\n }\n if (!this.contactsById.has(contact.getNodeId())) {\n const roll = Math.random();\n if (roll < this.randomness) {\n if (this.getSize() === this.maxSize && this.getSize() > 0) {\n const toRemove = this.contactIds[0];\n this.removeContact(toRemove);\n }\n this.contactIds.push(contact.getNodeId());\n this.contactsById.set(contact.getNodeId(), contact);\n this.emit('contactAdded', contact);\n }\n }\n }\n removeContact(id) {\n if (this.contactsById.has(id)) {\n const removed = this.contactsById.get(id);\n const index = this.contactIds.findIndex((nodeId) => (nodeId === id));\n this.contactIds.splice(index, 1);\n this.contactsById.delete(id);\n this.emit('contactRemoved', removed);\n return true;\n }\n return false;\n }\n getContacts(limit) {\n const items = (limit === undefined)\n ? this.contactIds\n : this.contactIds.slice(0, Math.max(limit, 0));\n return items.map((contactId) => this.contactsById.get(contactId));\n }\n}\n","export const RING_SIZE = 2 ** 120 - 1; // 2^120 - 1\nconst binaryToBigInt = (binary) => {\n return binary.reduce((acc, val) => (acc << BigInt(8)) | BigInt(val), BigInt(0));\n};\nexport const getRingIdFromRaw = (raw) => Number(binaryToBigInt(raw));\nexport const getRingIdRawFromPeerDescriptor = (peerDescriptor) => {\n const regionAsBuffer = Buffer.alloc(4);\n regionAsBuffer.writeUInt32BE(peerDescriptor.region ?? 0, 0);\n const ipAsbuffer = Buffer.alloc(4);\n ipAsbuffer.writeUInt32BE(peerDescriptor.ipAddress ?? 0, 0);\n const uniquePartAsBuffer = Buffer.from(peerDescriptor.nodeId.subarray(peerDescriptor.nodeId.length - 7, peerDescriptor.nodeId.length));\n const arr = [\n regionAsBuffer,\n ipAsbuffer,\n uniquePartAsBuffer\n ];\n const buffer = Buffer.concat(arr);\n return new Uint8Array(buffer);\n};\nexport const getRingIdFromPeerDescriptor = (peerDescriptor) => {\n const raw = getRingIdRawFromPeerDescriptor(peerDescriptor);\n return Number(binaryToBigInt(raw));\n};\nexport const getLeftDistance = (referenceId, id) => {\n const diff = Math.abs(referenceId - id);\n if (referenceId > id) {\n // if id is smaller than referenceId, then the distance is the difference\n return diff;\n }\n else {\n // if id is bigger than referenceId, then the distance is the ringSize - difference\n return RING_SIZE - diff;\n }\n};\nexport const getRightDistance = (referenceId, id) => {\n const diff = Math.abs(referenceId - id);\n if (referenceId > id) {\n // if id is smaller than referenceId, then the distance is the ringSize - difference\n return RING_SIZE - diff;\n }\n else {\n // if id is bigger than referenceId, then the distance is the difference\n return diff;\n }\n};\n","import { OrderedMap } from '@js-sdsl/ordered-map';\nimport { getLeftDistance, getRightDistance, getRingIdFromPeerDescriptor, getRingIdFromRaw } from './ringIdentifiers';\nimport { toNodeId } from '../../identifiers';\nimport { EventEmitter } from 'eventemitter3';\nexport class RingContactList extends EventEmitter {\n numNeighborsPerSide = 5;\n referenceId;\n excludedIds;\n leftNeighbors;\n rightNeighbors;\n constructor(rawReferenceId, excludedIds) {\n super();\n this.referenceId = getRingIdFromRaw(rawReferenceId);\n this.excludedIds = excludedIds ?? new Set();\n this.leftNeighbors = new OrderedMap();\n this.rightNeighbors = new OrderedMap();\n }\n addContact(contact) {\n const id = getRingIdFromPeerDescriptor(contact.getPeerDescriptor());\n if (id === this.referenceId || this.excludedIds.has(toNodeId(contact.getPeerDescriptor()))) {\n return;\n }\n let elementAdded = false;\n let elementRemoved = false;\n const leftDistance = getLeftDistance(this.referenceId, id);\n const lastLeftNeighbor = this.leftNeighbors.back();\n if (lastLeftNeighbor === undefined || leftDistance < lastLeftNeighbor[0]) {\n this.leftNeighbors.setElement(leftDistance, contact);\n elementAdded = true;\n if (this.leftNeighbors.size() > this.numNeighborsPerSide) {\n this.leftNeighbors.eraseElementByIterator(this.leftNeighbors.rBegin());\n elementRemoved = true;\n }\n }\n const rightDistance = getRightDistance(this.referenceId, id);\n const lastRightNeighbor = this.rightNeighbors.back();\n if (lastRightNeighbor === undefined || rightDistance < lastRightNeighbor[0]) {\n this.rightNeighbors.setElement(rightDistance, contact);\n elementAdded = true;\n if (this.rightNeighbors.size() > this.numNeighborsPerSide) {\n this.rightNeighbors.eraseElementByIterator(this.rightNeighbors.rBegin());\n elementRemoved = true;\n }\n }\n if (this.hasEventListeners() && (elementAdded || elementRemoved)) {\n if (elementAdded) {\n this.emit('contactAdded', contact);\n }\n if (elementRemoved) {\n this.emit('contactRemoved', contact);\n }\n }\n }\n removeContact(contact) {\n if (contact === undefined) {\n return;\n }\n const id = getRingIdFromPeerDescriptor(contact.getPeerDescriptor());\n const leftDistance = getLeftDistance(this.referenceId, id);\n const rightDistance = getRightDistance(this.referenceId, id);\n let elementRemoved = false;\n if (this.leftNeighbors.eraseElementByKey(leftDistance)) {\n elementRemoved = true;\n }\n if (this.rightNeighbors.eraseElementByKey(rightDistance)) {\n elementRemoved = true;\n }\n if (this.hasEventListeners() && elementRemoved) {\n this.emit('contactRemoved', contact);\n }\n }\n getContact(peerDescriptor) {\n const id = getRingIdFromPeerDescriptor(peerDescriptor);\n const leftDistance = getLeftDistance(this.referenceId, id);\n const rightDistance = getRightDistance(this.referenceId, id);\n if (this.leftNeighbors.getElementByKey(leftDistance)) {\n return this.leftNeighbors.getElementByKey(leftDistance);\n }\n if (this.rightNeighbors.getElementByKey(rightDistance)) {\n return this.rightNeighbors.getElementByKey(rightDistance);\n }\n return undefined;\n }\n getClosestContacts(limitPerSide) {\n const leftContacts = [];\n const rightContacts = [];\n let leftCount = 0;\n for (const item of this.leftNeighbors) {\n if (limitPerSide != undefined && leftCount >= limitPerSide) {\n break;\n }\n leftContacts.push(item[1]);\n leftCount++;\n }\n let rightCount = 0;\n for (const item of this.rightNeighbors) {\n if (limitPerSide != undefined && rightCount >= limitPerSide) {\n break;\n }\n rightContacts.push(item[1]);\n rightCount++;\n }\n return { left: leftContacts, right: rightContacts };\n }\n getAllContacts() {\n const ret = [];\n for (const item of this.leftNeighbors) {\n ret.push(item[1]);\n }\n for (const item of this.rightNeighbors) {\n ret.push(item[1]);\n }\n return ret;\n }\n hasEventListeners() {\n return this.eventNames().length > 0;\n }\n}\n","import { Logger } from '@streamr/utils';\nimport { EventEmitter } from 'eventemitter3';\nimport KBucket from 'k-bucket';\nimport { toNodeId, toDhtAddressRaw } from '../identifiers';\nimport { RandomContactList } from './contact/RandomContactList';\nimport { RingContactList } from './contact/RingContactList';\nimport { SortedContactList } from './contact/SortedContactList';\nimport { getRingIdRawFromPeerDescriptor } from './contact/ringIdentifiers';\nconst logger = new Logger('PeerManager');\n// Returns all offline nodes, sets contacts as active if they are online\nconst pingNodes = async (nodes, activeContacts) => {\n const offlineNeighbors = [];\n await Promise.allSettled(nodes.map(async (contact) => {\n const isOnline = await contact.ping();\n if (!isOnline) {\n activeContacts.delete(contact.getNodeId());\n offlineNeighbors.push(contact.getPeerDescriptor());\n }\n else {\n activeContacts.add(contact.getNodeId());\n }\n }));\n return offlineNeighbors;\n};\nexport class PeerManager extends EventEmitter {\n // Glossary: \n // * 'neighbors' are the nodes that are our neighbors according to \n // the protocol of the layer we are in\n // * 'connections' are the nodes that are connected to this node on Layer0\n // * 'contacts' are all non-unresponsive nodes that we know about\n neighbors;\n nearbyContacts;\n activeContacts;\n ringContacts;\n randomContacts;\n stopped = false;\n options;\n constructor(options) {\n super();\n this.options = options;\n this.neighbors = new KBucket({\n localNodeId: toDhtAddressRaw(this.options.localNodeId),\n numberOfNodesPerKBucket: this.options.numberOfNodesPerKBucket,\n numberOfNodesToPing: this.options.numberOfNodesPerKBucket\n });\n this.ringContacts = new RingContactList(getRingIdRawFromPeerDescriptor(this.options.localPeerDescriptor));\n this.ringContacts.on('contactAdded', (contact) => {\n this.emit('ringContactAdded', contact.getPeerDescriptor());\n });\n this.ringContacts.on('contactRemoved', (contact) => {\n this.emit('ringContactRemoved', contact.getPeerDescriptor());\n });\n this.neighbors.on('ping', (oldContacts, newContact) => this.onKBucketPing(oldContacts, newContact));\n this.neighbors.on('removed', (contact) => this.onKBucketRemoved(toNodeId(contact.getPeerDescriptor())));\n this.neighbors.on('added', (contact) => this.onKBucketAdded(contact));\n this.neighbors.on('updated', () => {\n // TODO: Update contact info to the connection manager and reconnect\n });\n this.nearbyContacts = new SortedContactList({\n referenceId: this.options.localNodeId,\n maxSize: this.options.maxContactCount,\n allowToContainReferenceId: false\n });\n this.nearbyContacts.on('contactRemoved', (contact) => {\n if (this.stopped) {\n return;\n }\n this.emit('nearbyContactRemoved', contact.getPeerDescriptor());\n this.randomContacts.addContact(this.options.createDhtNodeRpcRemote(contact.getPeerDescriptor()));\n });\n this.nearbyContacts.on('contactAdded', (contact) => this.emit('nearbyContactAdded', contact.getPeerDescriptor()));\n this.activeContacts = new Set();\n this.randomContacts = new RandomContactList(this.options.localNodeId, this.options.maxContactCount);\n this.randomContacts.on('contactRemoved', (removedContact) => this.emit('randomContactRemoved', removedContact.getPeerDescriptor()));\n this.randomContacts.on('contactAdded', (contactAdded) => this.emit('randomContactAdded', contactAdded.getPeerDescriptor()));\n }\n onKBucketPing(oldContacts, newContact) {\n if (this.stopped) {\n return;\n }\n const sortingList = new SortedContactList({\n referenceId: this.options.localNodeId,\n allowToContainReferenceId: false\n });\n sortingList.addContacts(oldContacts);\n const removableNodeId = sortingList.getFurthestContacts(1)[0].getNodeId();\n this.options.connectionLocker?.weakUnlockConnection(removableNodeId, this.options.lockId);\n this.neighbors.remove(toDhtAddressRaw(removableNodeId));\n this.neighbors.add(newContact);\n }\n onKBucketRemoved(nodeId) {\n if (this.stopped) {\n return;\n }\n this.options.connectionLocker?.weakUnlockConnection(nodeId, this.options.lockId);\n logger.trace(`Removed contact ${nodeId}`);\n if (this.neighbors.count() === 0) {\n this.emit('kBucketEmpty');\n }\n }\n onKBucketAdded(contact) {\n if (this.stopped) {\n return;\n }\n if (contact.getNodeId() !== this.options.localNodeId) {\n const peerDescriptor = contact.getPeerDescriptor();\n const nodeId = toNodeId(peerDescriptor);\n // Important to lock here, before the ping result is known\n this.options.connectionLocker?.weakLockConnection(nodeId, this.options.lockId);\n if (this.options.hasConnection(contact.getNodeId())\n || (this.options.neighborPingLimit !== undefined && this.neighbors.count() > this.options.neighborPingLimit)) {\n logger.trace(`Added new contact ${nodeId}`);\n }\n else { // open connection by pinging\n logger.trace('starting ping ' + nodeId);\n contact.ping().then((result) => {\n if (result) {\n logger.trace(`Added new contact ${nodeId}`);\n }\n else {\n logger.trace('ping failed ' + nodeId);\n this.options.connectionLocker?.weakUnlockConnection(nodeId, this.options.lockId);\n this.removeContact(nodeId);\n this.addNearbyContactToNeighbors();\n }\n }).catch((_e) => {\n this.options.connectionLocker?.weakUnlockConnection(nodeId, this.options.lockId);\n this.removeContact(nodeId);\n this.addNearbyContactToNeighbors();\n });\n }\n }\n }\n addNearbyContactToNeighbors() {\n if (this.stopped) {\n return;\n }\n const closest = this.getNearbyActiveContactNotInNeighbors();\n if (closest) {\n this.addContact(closest.getPeerDescriptor());\n }\n }\n getNearbyActiveContactNotInNeighbors() {\n for (const contactId of this.nearbyContacts.getContactIds()) {\n if (!this.neighbors.get(toDhtAddressRaw(contactId)) && this.activeContacts.has(contactId)) {\n return this.nearbyContacts.getContact(contactId);\n }\n }\n return undefined;\n }\n removeContact(nodeId) {\n if (this.stopped) {\n return;\n }\n logger.trace(`Removing contact ${nodeId}`);\n this.ringContacts.removeContact(this.nearbyContacts.getContact(nodeId));\n this.neighbors.remove(toDhtAddressRaw(nodeId));\n this.nearbyContacts.removeContact(nodeId);\n this.activeContacts.delete(nodeId);\n this.randomContacts.removeContact(nodeId);\n }\n removeNeighbor(nodeId) {\n this.neighbors.remove(toDhtAddressRaw(nodeId));\n }\n async pruneOfflineNodes(nodes) {\n logger.trace('Pruning offline nodes', { nodes: nodes.length });\n const offlineNeighbors = await pingNodes(nodes, this.activeContacts);\n offlineNeighbors.forEach((offlineNeighbor) => {\n logger.trace('Removing offline node', { node: toNodeId(offlineNeighbor) });\n this.removeContact(toNodeId(offlineNeighbor));\n });\n }\n stop() {\n this.stopped = true;\n this.neighbors.toArray().forEach((rpcRemote) => {\n rpcRemote.leaveNotice();\n this.neighbors.remove(rpcRemote.id);\n });\n this.neighbors.removeAllListeners();\n this.ringContacts.getAllContacts().forEach((rpcRemote) => {\n rpcRemote.leaveNotice();\n this.ringContacts.removeContact(rpcRemote);\n });\n this.nearbyContacts.stop();\n this.randomContacts.stop();\n }\n getNearbyContacts() {\n return this.nearbyContacts;\n }\n getClosestRingContactsTo(ringIdRaw, limit, excludedIds) {\n const closest = new RingContactList(ringIdRaw, excludedIds);\n this.ringContacts.getAllContacts().map((contact) => closest.addContact(contact));\n // TODO use options option or named constant?\n return closest.getClosestContacts(limit ?? 8);\n }\n getRandomContacts() {\n return this.randomContacts;\n }\n getRingContacts() {\n return this.ringContacts;\n }\n getNearbyContactCount(excludedNodeIds) {\n return this.nearbyContacts.getSize(excludedNodeIds);\n }\n getNeighborCount() {\n return this.neighbors.count();\n }\n getNeighbors() {\n return this.neighbors.toArray();\n }\n setContactActive(nodeId) {\n this.activeContacts.add(nodeId);\n }\n addContact(peerDescriptor) {\n if (this.stopped) {\n return;\n }\n const nodeId = toNodeId(peerDescriptor);\n if (nodeId !== this.options.localNodeId) {\n logger.trace(`Adding new contact ${nodeId}`);\n const remote = this.options.createDhtNodeRpcRemote(peerDescriptor);\n const isInNeighbors = (this.neighbors.get(peerDescriptor.nodeId) !== null);\n const isInNearbyContacts = (this.nearbyContacts.getContact(nodeId) !== undefined);\n const isInRingContacts = this.ringContacts.getContact(peerDescriptor) !== undefined;\n if (isInNeighbors || isInNearbyContacts) {\n this.randomContacts.addContact(remote);\n }\n if (!isInNeighbors) {\n this.neighbors.add(remote);\n }\n if (!isInNearbyContacts) {\n this.nearbyContacts.addContact(remote);\n }\n if (!isInRingContacts) {\n this.ringContacts.addContact(remote);\n }\n }\n }\n}\n","import { Gate, Logger, withTimeout } from '@streamr/utils';\nimport { v4 } from 'uuid';\nimport { toNodeId, toDhtAddressRaw } from '../../identifiers';\nimport { getPeerDistance } from '../helpers/getPeerDistance';\nimport { getClosestNodes } from '../contact/getClosestNodes';\nconst logger = new Logger('DiscoverySession');\nexport class DiscoverySession {\n id = v4();\n noProgressCounter = 0;\n ongoingRequests = new Set();\n doneGate = new Gate(false);\n options;\n constructor(options) {\n this.options = options;\n }\n addContacts(contacts) {\n if (this.options.abortSignal.aborted || this.doneGate.isOpen()) {\n return;\n }\n for (const contact of contacts) {\n this.options.peerManager.addContact(contact);\n }\n }\n async fetchClosestNeighborsFromRemote(peerDescriptor) {\n if (this.options.abortSignal.aborted || this.doneGate.isOpen()) {\n return [];\n }\n const nodeId = toNodeId(peerDescriptor);\n logger.trace(`Getting closest neighbors from remote: ${nodeId}`);\n this.options.contactedPeers.add(nodeId);\n const remote = this.options.createDhtNodeRpcRemote(peerDescriptor);\n const returnedContacts = await remote.getClosestPeers(this.options.targetId);\n this.options.peerManager.setContactActive(nodeId);\n return returnedContacts;\n }\n onRequestSucceeded(nodeId, contacts) {\n if (!this.ongoingRequests.has(nodeId)) {\n return;\n }\n this.ongoingRequests.delete(nodeId);\n const targetId = toDhtAddressRaw(this.options.targetId);\n const oldClosestNeighbor = this.getClosestNeighbor();\n const oldClosestDistance = getPeerDistance(targetId, oldClosestNeighbor.nodeId);\n this.addContacts(contacts);\n const newClosestNeighbor = this.getClosestNeighbor();\n const newClosestDistance = getPeerDistance(targetId, newClosestNeighbor.nodeId);\n if (newClosestDistance >= oldClosestDistance) {\n this.noProgressCounter++;\n }\n }\n getClosestNeighbor() {\n return getClosestNodes(this.options.targetId, this.options.peerManager.getNeighbors().map((n) => n.getPeerDescriptor()), { maxCount: 1 })[0];\n }\n onRequestFailed(nodeId) {\n if (!this.ongoingRequests.has(nodeId)) {\n return;\n }\n this.ongoingRequests.delete(nodeId);\n this.options.peerManager.removeContact(nodeId);\n }\n findMoreContacts() {\n if (this.options.abortSignal.aborted || this.doneGate.isOpen()) {\n return;\n }\n const uncontacted = getClosestNodes(this.options.targetId, Array.from(this.options.peerManager.getNearbyContacts().getAllContactsInUndefinedOrder(), (c) => c.getPeerDescriptor()), {\n maxCount: this.options.parallelism,\n excludedNodeIds: this.options.contactedPeers\n });\n if ((uncontacted.length === 0 && this.ongoingRequests.size === 0) || (this.noProgressCounter >= this.options.noProgressLimit)) {\n this.doneGate.open();\n return;\n }\n for (const node of uncontacted) {\n if (this.ongoingRequests.size >= this.options.parallelism) {\n break;\n }\n const nodeId = toNodeId(node);\n this.ongoingRequests.add(nodeId);\n // eslint-disable-next-line promise/catch-or-return\n this.fetchClosestNeighborsFromRemote(node)\n .then((contacts) => this.onRequestSucceeded(nodeId, contacts))\n .catch(() => this.onRequestFailed(nodeId))\n .finally(() => {\n this.findMoreContacts();\n });\n }\n }\n async findClosestNodes(timeout) {\n if (this.options.peerManager.getNearbyContactCount(this.options.contactedPeers) === 0) {\n return;\n }\n setImmediate(() => {\n this.findMoreContacts();\n });\n await withTimeout(this.doneGate.waitUntilOpen(), timeout, 'discovery session timed out', this.options.abortSignal);\n }\n}\n","import { Gate, Logger, withTimeout } from '@streamr/utils';\nimport { v4 } from 'uuid';\nimport { toNodeId } from '../../identifiers';\nimport { getLeftDistance, getRingIdFromPeerDescriptor, getRingIdFromRaw } from '../contact/ringIdentifiers';\nconst logger = new Logger('RingDiscoverySession');\nexport class RingDiscoverySession {\n id = v4();\n noProgressCounter = 0;\n ongoingRequests = new Set();\n doneGate = new Gate(false);\n options;\n numContactedPeers = 0;\n targetIdAsRingId;\n constructor(options) {\n this.options = options;\n this.targetIdAsRingId = getRingIdFromRaw(this.options.targetId);\n }\n addContacts(contacts) {\n if (this.options.abortSignal.aborted || this.doneGate.isOpen()) {\n return;\n }\n for (const contact of contacts) {\n this.options.peerManager.addContact(contact);\n }\n }\n async fetchClosestContactsFromRemote(contact) {\n if (this.options.abortSignal.aborted || this.doneGate.isOpen()) {\n return { left: [], right: [] };\n }\n logger.trace(`Getting closest ring peers from contact: ${toNodeId(contact.getPeerDescriptor())}`);\n this.numContactedPeers++;\n this.options.contactedPeers.add(contact.getNodeId());\n const returnedContacts = await contact.getClosestRingPeers(this.options.targetId);\n this.options.peerManager.setContactActive(contact.getNodeId());\n return returnedContacts;\n }\n onRequestSucceeded(nodeId, contacts) {\n if (!this.ongoingRequests.has(nodeId)) {\n return;\n }\n this.ongoingRequests.delete(nodeId);\n const oldClosestContacts = this.options.peerManager.getClosestRingContactsTo(this.options.targetId, 1);\n const oldClosestLeftDistance = getLeftDistance(this.targetIdAsRingId, getRingIdFromPeerDescriptor(oldClosestContacts.left[0].getPeerDescriptor()));\n const oldClosestRightDistance = getLeftDistance(this.targetIdAsRingId, getRingIdFromPeerDescriptor(oldClosestContacts.right[0].getPeerDescriptor()));\n this.addContacts(contacts.left.concat(contacts.right));\n const newClosestContacts = this.options.peerManager.getClosestRingContactsTo(this.options.targetId, 1);\n const newClosestLeftDistance = getLeftDistance(this.targetIdAsRingId, getRingIdFromPeerDescriptor(newClosestContacts.left[0].getPeerDescriptor()));\n const newClosestRightDistance = getLeftDistance(this.targetIdAsRingId, getRingIdFromPeerDescriptor(newClosestContacts.right[0].getPeerDescriptor()));\n if (newClosestLeftDistance >= oldClosestLeftDistance && newClosestRightDistance >= oldClosestRightDistance) {\n this.noProgressCounter++;\n }\n }\n onRequestFailed(peer) {\n if (!this.ongoingRequests.has(peer.getNodeId())) {\n return;\n }\n this.ongoingRequests.delete(peer.getNodeId());\n this.options.peerManager.removeContact(peer.getNodeId());\n }\n findMoreContacts() {\n if (this.options.abortSignal.aborted || this.doneGate.isOpen()) {\n return;\n }\n const uncontacted = this.options.peerManager.getClosestRingContactsTo(this.options.targetId, this.options.parallelism, this.options.contactedPeers);\n if ((uncontacted.left.length === 0 && uncontacted.right.length === 0)\n || this.noProgressCounter >= this.options.noProgressLimit) {\n this.doneGate.open();\n return;\n }\n // ask from both sides equally\n const merged = [];\n const alreadyInMerged = new Set();\n const length = Math.max(uncontacted.left.length, uncontacted.right.length);\n for (let i = 0; i < length; i++) {\n if (i < uncontacted.left.length) {\n if (!alreadyInMerged.has(uncontacted.left[i].getNodeId())) {\n merged.push(uncontacted.left[i]);\n alreadyInMerged.add(uncontacted.left[i].getNodeId());\n }\n }\n if (i < uncontacted.right.length) {\n if (!alreadyInMerged.has(uncontacted.right[i].getNodeId())) {\n merged.push(uncontacted.right[i]);\n alreadyInMerged.add(uncontacted.right[i].getNodeId());\n }\n }\n }\n for (const nextPeer of merged) {\n if (this.ongoingRequests.size >= this.options.parallelism) {\n break;\n }\n this.ongoingRequests.add(nextPeer.getNodeId());\n // eslint-disable-next-line promise/catch-or-return\n this.fetchClosestContactsFromRemote(nextPeer)\n .then((contacts) => this.onRequestSucceeded(nextPeer.getNodeId(), contacts))\n .catch(() => this.onRequestFailed(nextPeer))\n .finally(() => {\n this.findMoreContacts();\n });\n }\n }\n async findClosestNodes(timeout) {\n if (this.options.peerManager.getNearbyContactCount(this.options.contactedPeers) === 0) {\n return;\n }\n setImmediate(() => {\n this.findMoreContacts();\n });\n await withTimeout(this.doneGate.waitUntilOpen(), timeout, 'discovery session timed out', this.options.abortSignal);\n }\n}\n","// TODO move this to trackerless-network package and change serviceId to be a required paramater\nexport const CONTROL_LAYER_NODE_SERVICE_ID = 'layer0';\n","import { Logger, scheduleAtInterval, setAbortableTimeout } from '@streamr/utils';\nimport { areEqualPeerDescriptors, randomDhtAddress, toDhtAddress, toNodeId, toDhtAddressRaw } from '../../identifiers';\nimport { getClosestNodes } from '../contact/getClosestNodes';\nimport { getRingIdRawFromPeerDescriptor } from '../contact/ringIdentifiers';\nimport { DiscoverySession } from './DiscoverySession';\nimport { RingDiscoverySession } from './RingDiscoverySession';\nimport { CONTROL_LAYER_NODE_SERVICE_ID } from '../consts';\nexport const createDistantDhtAddress = (address) => {\n const raw = toDhtAddressRaw(address);\n const flipped = raw.map((val) => ~val);\n return toDhtAddress(flipped);\n};\nconst logger = new Logger('PeerDiscovery');\nexport class PeerDiscovery {\n ongoingDiscoverySessions = new Map();\n ongoingRingDiscoverySessions = new Map();\n rejoinOngoing = false;\n joinCalled = false;\n recoveryIntervalStarted = false;\n options;\n constructor(options) {\n this.options = options;\n }\n async joinDht(entryPoints, doAdditionalDistantPeerDiscovery = true, retry = true) {\n const contactedPeers = new Set();\n const distantJoinOptions = doAdditionalDistantPeerDiscovery\n ? { enabled: true, contactedPeers: new Set() } : { enabled: false };\n await Promise.all(entryPoints.map((entryPoint) => this.joinThroughEntryPoint(entryPoint, contactedPeers, distantJoinOptions, retry)));\n }\n async joinThroughEntryPoint(entryPointDescriptor, \n // Note that this set is mutated by DiscoverySession\n contactedPeers, additionalDistantJoin, retry = true) {\n if (this.isStopped()) {\n return;\n }\n this.joinCalled = true;\n logger.debug(`Joining ${this.options.serviceId === CONTROL_LAYER_NODE_SERVICE_ID\n ? 'The Streamr Network' : `Control Layer for ${this.options.serviceId}`}`\n + ` via entrypoint ${toNodeId(entryPointDescriptor)}`);\n if (areEqualPeerDescriptors(entryPointDescriptor, this.options.localPeerDescriptor)) {\n return;\n }\n this.options.connectionLocker?.lockConnection(entryPointDescriptor, `${this.options.serviceId}::joinDht`);\n this.options.peerManager.addContact(entryPointDescriptor);\n const targetId = toNodeId(this.options.localPeerDescriptor);\n const sessions = [this.createSession(targetId, contactedPeers)];\n if (additionalDistantJoin.enabled) {\n sessions.push(this.createSession(createDistantDhtAddress(targetId), additionalDistantJoin.contactedPeers));\n }\n await this.runSessions(sessions, entryPointDescriptor, retry);\n this.options.connectionLocker?.unlockConnection(entryPointDescriptor, `${this.options.serviceId}::joinDht`);\n }\n async joinRing() {\n const contactedPeers = new Set();\n const sessions = [this.createRingSession(getRingIdRawFromPeerDescriptor(this.options.localPeerDescriptor), contactedPeers)];\n await this.runRingSessions(sessions);\n }\n createSession(targetId, contactedPeers) {\n const sessionOptions = {\n targetId,\n parallelism: this.options.parallelism,\n noProgressLimit: this.options.joinNoProgressLimit,\n peerManager: this.options.peerManager,\n contactedPeers,\n abortSignal: this.options.abortSignal,\n createDhtNodeRpcRemote: this.options.createDhtNodeRpcRemote\n };\n return new DiscoverySession(sessionOptions);\n }\n createRingSession(targetId, contactedPeers) {\n const sessionOptions = {\n targetId,\n parallelism: this.options.parallelism,\n noProgressLimit: this.options.joinNoProgressLimit,\n peerManager: this.options.peerManager,\n contactedPeers,\n abortSignal: this.options.abortSignal,\n createDhtNodeRpcRemote: this.options.createDhtNodeRpcRemote\n };\n return new RingDiscoverySession(sessionOptions);\n }\n async runSessions(sessions, entryPointDescriptor, retry) {\n try {\n for (const session of sessions) {\n this.ongoingDiscoverySessions.set(session.id, session);\n await session.findClosestNodes(this.options.joinTimeout);\n }\n }\n catch (_e) {\n logger.debug(`DHT join on ${this.options.serviceId} timed out`);\n }\n finally {\n if (!this.isStopped()) {\n if (this.options.peerManager.getNeighborCount() === 0) {\n if (retry) {\n // TODO should we catch possible promise rejection?\n // TODO use options option or named constant?\n setAbortableTimeout(() => this.rejoinDht(entryPointDescriptor), 1000, this.options.abortSignal);\n }\n }\n else {\n await this.ensureRecoveryIntervalIsRunning();\n }\n }\n sessions.forEach((session) => this.ongoingDiscoverySessions.delete(session.id));\n }\n }\n async runRingSessions(sessions) {\n try {\n for (const session of sessions) {\n this.ongoingRingDiscoverySessions.set(session.id, session);\n await session.findClosestNodes(this.options.joinTimeout);\n }\n }\n catch (_e) {\n logger.debug(`Ring join on ${this.options.serviceId} timed out`);\n }\n finally {\n sessions.forEach((session) => this.ongoingDiscoverySessions.delete(session.id));\n }\n }\n async rejoinDht(entryPoint, contactedPeers = new Set(), distantJoinContactPeers = new Set()) {\n if (this.isStopped() || this.rejoinOngoing) {\n return;\n }\n logger.debug(`Rejoining DHT ${this.options.serviceId}`);\n this.rejoinOngoing = true;\n try {\n await this.joinThroughEntryPoint(entryPoint, contactedPeers, { enabled: true, contactedPeers: distantJoinContactPeers });\n logger.debug(`Rejoined DHT successfully ${this.options.serviceId}!`);\n }\n catch {\n logger.warn(`Rejoining DHT ${this.options.serviceId} failed`);\n if (!this.isStopped()) {\n // TODO should we catch possible promise rejection?\n // TODO use options option or named constant?\n setAbortableTimeout(() => this.rejoinDht(entryPoint), 5000, this.options.abortSignal);\n }\n }\n finally {\n this.rejoinOngoing = false;\n }\n }\n async ensureRecoveryIntervalIsRunning() {\n if (!this.recoveryIntervalStarted) {\n this.recoveryIntervalStarted = true;\n // TODO use options option or named constant?\n await scheduleAtInterval(() => this.fetchClosestAndRandomNeighbors(), 60000, true, this.options.abortSignal);\n }\n }\n async fetchClosestAndRandomNeighbors() {\n if (this.isStopped()) {\n return;\n }\n const localNodeId = toNodeId(this.options.localPeerDescriptor);\n const nodes = this.getClosestNeighbors(localNodeId, this.options.parallelism);\n const randomNodes = this.getClosestNeighbors(randomDhtAddress(), 1);\n await Promise.allSettled([\n ...nodes.map(async (node) => {\n const remote = this.options.createDhtNodeRpcRemote(node);\n const contacts = await remote.getClosestPeers(localNodeId);\n for (const contact of contacts) {\n this.options.peerManager.addContact(contact);\n }\n }),\n ...randomNodes.map(async (node) => {\n const remote = this.options.createDhtNodeRpcRemote(node);\n const contacts = await remote.getClosestPeers(randomDhtAddress());\n for (const contact of contacts) {\n this.options.peerManager.addContact(contact);\n }\n })\n ]);\n }\n getClosestNeighbors(referenceId, maxCount) {\n return getClosestNodes(referenceId, this.options.peerManager.getNeighbors().map((n) => n.getPeerDescriptor()), { maxCount });\n }\n isJoinOngoing() {\n return !this.joinCalled ? true : this.ongoingDiscoverySessions.size > 0;\n }\n isJoinCalled() {\n return this.joinCalled;\n }\n isStopped() {\n return this.options.abortSignal.aborted;\n }\n}\n","import last from 'lodash/last';\nexport const getPreviousPeer = (routeMessage) => {\n return last(routeMessage.routingPath);\n};\n","import { Logger, areEqualBinaries } from '@streamr/utils';\nimport { v4 } from 'uuid';\nimport { RouteMessageError } from '../../../generated/packages/dht/protos/DhtRpc';\nimport { RpcRemote } from '../contact/RpcRemote';\nimport { getPreviousPeer } from './getPreviousPeer';\nimport { toNodeId } from '../../identifiers';\nconst logger = new Logger('RouterRpcRemote');\n// default timeout\nexport const ROUTING_TIMEOUT = 2000;\nexport class RouterRpcRemote extends RpcRemote {\n async routeMessage(params) {\n const message = {\n target: params.target,\n sourcePeer: params.sourcePeer,\n message: params.message,\n requestId: params.requestId ?? v4(),\n reachableThrough: params.reachableThrough ?? [],\n routingPath: params.routingPath,\n parallelRootNodeIds: params.parallelRootNodeIds\n };\n const options = this.formDhtRpcOptions({\n connect: false\n });\n try {\n const ack = await this.getClient().routeMessage(message, options);\n // Success signal if sent to destination and error includes duplicate\n if (ack.error === RouteMessageError.DUPLICATE\n && areEqualBinaries(params.target, this.getPeerDescriptor().nodeId)) {\n return true;\n }\n else if (ack.error !== undefined) {\n return false;\n }\n }\n catch (err) {\n const previousPeer = getPreviousPeer(params);\n const fromNode = previousPeer\n ? toNodeId(previousPeer)\n : toNodeId(params.sourcePeer);\n const toNode = toNodeId(this.getPeerDescriptor());\n logger.trace(`Failed to send routeMessage from ${fromNode} to ${toNode}`, { err });\n return false;\n }\n return true;\n }\n async forwardMessage(params) {\n const message = {\n target: params.target,\n sourcePeer: params.sourcePeer,\n message: params.message,\n requestId: params.requestId ?? v4(),\n reachableThrough: params.reachableThrough ?? [],\n routingPath: params.routingPath,\n parallelRootNodeIds: params.parallelRootNodeIds\n };\n const options = this.formDhtRpcOptions({\n connect: false\n });\n try {\n const ack = await this.getClient().forwardMessage(message, options);\n if (ack.error !== undefined) {\n return false;\n }\n }\n catch (err) {\n const previousPeer = getPreviousPeer(params);\n const fromNode = previousPeer\n ? toNodeId(previousPeer)\n : toNodeId(params.sourcePeer);\n const toNode = toNodeId(this.getPeerDescriptor());\n logger.trace(`Failed to send forwardMessage from ${fromNode} to ${toNode}`, { err });\n return false;\n }\n return true;\n }\n}\n","import { Logger } from '@streamr/utils';\nimport { v4 } from 'uuid';\nimport { RpcRemote } from '../contact/RpcRemote';\nimport { getPreviousPeer } from '../routing/getPreviousPeer';\nimport { toNodeId } from '../../identifiers';\nconst logger = new Logger('RecursiveOperationRpcRemote');\nexport class RecursiveOperationRpcRemote extends RpcRemote {\n async routeRequest(params) {\n const message = {\n target: params.target,\n sourcePeer: params.sourcePeer,\n message: params.message,\n requestId: params.requestId ?? v4(),\n reachableThrough: params.reachableThrough ?? [],\n routingPath: params.routingPath,\n parallelRootNodeIds: params.parallelRootNodeIds\n };\n const options = this.formDhtRpcOptions({\n connect: false\n });\n try {\n const ack = await this.getClient().routeRequest(message, options);\n if (ack.error !== undefined) {\n logger.trace('Next hop responded with error ' + ack.error);\n return false;\n }\n }\n catch (err) {\n const previousPeer = getPreviousPeer(params);\n const fromNode = previousPeer\n ? toNodeId(previousPeer)\n : toNodeId(params.sourcePeer);\n const toNode = toNodeId(this.getPeerDescriptor());\n logger.debug(`Failed to send routeRequest message from ${fromNode} to ${toNode}`, { err });\n return false;\n }\n return true;\n }\n}\n","import { SortedContactList } from '../contact/SortedContactList';\nimport { Logger } from '@streamr/utils';\nimport { EventEmitter } from 'eventemitter3';\nimport { v4 } from 'uuid';\nimport { RouterRpcRemote, ROUTING_TIMEOUT } from './RouterRpcRemote';\nimport { RecursiveOperationRpcClient, RouterRpcClient } from '../../../generated/packages/dht/protos/DhtRpc.client';\nimport { Contact } from '../contact/Contact';\nimport { RecursiveOperationRpcRemote } from '../recursive-operation/RecursiveOperationRpcRemote';\nimport { getPreviousPeer } from './getPreviousPeer';\nimport { areEqualPeerDescriptors, toDhtAddress, toNodeId } from '../../identifiers';\nimport pull from 'lodash/pull';\nconst logger = new Logger('RoutingSession');\nconst MAX_FAILED_HOPS = 2;\nconst ROUTING_TABLE_MAX_SIZE = 5;\nexport class RoutingRemoteContact extends Contact {\n routerRpcRemote;\n recursiveOperationRpcRemote;\n constructor(peer, localPeerDescriptor, rpcCommunicator) {\n super(peer);\n this.routerRpcRemote = new RouterRpcRemote(localPeerDescriptor, peer, rpcCommunicator, RouterRpcClient, ROUTING_TIMEOUT);\n this.recursiveOperationRpcRemote = new RecursiveOperationRpcRemote(localPeerDescriptor, peer, rpcCommunicator, RecursiveOperationRpcClient, ROUTING_TIMEOUT);\n }\n getRouterRpcRemote() {\n return this.routerRpcRemote;\n }\n getRecursiveOperationRpcRemote() {\n return this.recursiveOperationRpcRemote;\n }\n}\nexport var RoutingMode;\n(function (RoutingMode) {\n RoutingMode[RoutingMode[\"ROUTE\"] = 0] = \"ROUTE\";\n RoutingMode[RoutingMode[\"FORWARD\"] = 1] = \"FORWARD\";\n RoutingMode[RoutingMode[\"RECURSIVE\"] = 2] = \"RECURSIVE\";\n})(RoutingMode || (RoutingMode = {}));\nexport class RoutingSession extends EventEmitter {\n sessionId = v4();\n ongoingRequests = new Set();\n contactedPeers = new Set();\n failedHopCounter = 0;\n successfulHopCounter = 0;\n stopped = false;\n options;\n constructor(options) {\n super();\n this.options = options;\n }\n onRequestFailed(nodeId) {\n logger.trace('onRequestFailed() sessionId: ' + this.sessionId);\n if (this.stopped) {\n return;\n }\n if (this.ongoingRequests.has(nodeId)) {\n this.ongoingRequests.delete(nodeId);\n }\n this.deleteParallelRootIfSource(nodeId);\n this.failedHopCounter += 1;\n if (this.failedHopCounter >= MAX_FAILED_HOPS) {\n logger.trace(`Stopping routing after ${MAX_FAILED_HOPS} failed attempts for sessionId: ${this.sessionId}`);\n this.emitFailure();\n return;\n }\n const contacts = this.updateAndGetRoutablePeers();\n if (contacts.length === 0 && this.ongoingRequests.size === 0) {\n logger.trace('routing failed, emitting routingFailed sessionId: ' + this.sessionId);\n this.emitFailure();\n }\n else {\n logger.trace('routing failed, retrying to route sessionId: ' + this.sessionId + ' failedHopCounter: ' + this.failedHopCounter);\n this.sendMoreRequests(contacts);\n }\n }\n emitFailure() {\n if (this.successfulHopCounter >= 1) {\n this.emit('partialSuccess');\n }\n else {\n this.emit('routingFailed');\n }\n }\n onRequestSucceeded() {\n logger.trace('onRequestSucceeded() sessionId: ' + this.sessionId);\n if (this.stopped) {\n return;\n }\n this.successfulHopCounter += 1;\n if (this.successfulHopCounter >= this.options.parallelism) {\n this.emit('routingSucceeded');\n return;\n }\n const contacts = this.updateAndGetRoutablePeers();\n if (contacts.length === 0) {\n this.emit('routingSucceeded');\n }\n else if (contacts.length > 0 && this.ongoingRequests.size === 0) {\n this.sendMoreRequests(contacts);\n }\n }\n async sendRouteMessageRequest(contact) {\n if (this.stopped) {\n return false;\n }\n const msg = {\n ...this.options.routedMessage,\n routingPath: this.options.routedMessage.routingPath.concat([this.options.localPeerDescriptor])\n };\n if (this.options.mode === RoutingMode.FORWARD) {\n return contact.getRouterRpcRemote().forwardMessage(msg);\n }\n else if (this.options.mode === RoutingMode.RECURSIVE) {\n return contact.getRecursiveOperationRpcRemote().routeRequest(msg);\n }\n else {\n return contact.getRouterRpcRemote().routeMessage(msg);\n }\n }\n updateAndGetRoutablePeers() {\n logger.trace('getRoutablePeers() sessionId: ' + this.sessionId);\n const previousPeer = getPreviousPeer(this.options.routedMessage);\n const previousId = previousPeer ? toNodeId(previousPeer) : undefined;\n const targetId = toDhtAddress(this.options.routedMessage.target);\n let routingTable;\n if (this.options.routingTablesCache.has(targetId, previousId) && this.options.routingTablesCache.get(targetId, previousId).getSize() > 0) {\n routingTable = this.options.routingTablesCache.get(targetId, previousId);\n }\n else {\n routingTable = new SortedContactList({\n referenceId: toDhtAddress(this.options.routedMessage.target),\n maxSize: ROUTING_TABLE_MAX_SIZE,\n allowToContainReferenceId: true,\n nodeIdDistanceLimit: previousId\n });\n const contacts = this.options.getConnections()\n .map((peer) => new RoutingRemoteContact(peer, this.options.localPeerDescriptor, this.options.rpcCommunicator));\n routingTable.addContacts(contacts);\n this.options.routingTablesCache.set(targetId, routingTable, previousId);\n }\n return routingTable.getClosestContacts()\n .filter((contact) => !this.contactedPeers.has(contact.getNodeId()) && !this.options.excludedNodeIds.has(contact.getNodeId()));\n }\n sendMoreRequests(uncontacted) {\n logger.trace('sendMoreRequests() sessionId: ' + this.sessionId);\n if (this.stopped) {\n return;\n }\n if (uncontacted.length === 0) {\n this.emitFailure();\n return;\n }\n while ((this.ongoingRequests.size < this.options.parallelism) && (uncontacted.length > 0) && !this.stopped) {\n const nextPeer = uncontacted.shift();\n logger.trace(`Sending routeMessage request to contact: ${toNodeId(nextPeer.getPeerDescriptor())} (sessionId=${this.sessionId})`);\n this.contactedPeers.add(nextPeer.getNodeId());\n this.ongoingRequests.add(nextPeer.getNodeId());\n this.addParallelRootIfSource(nextPeer.getNodeId());\n setImmediate(async () => {\n try {\n const succeeded = await this.sendRouteMessageRequest(nextPeer);\n if (succeeded) {\n this.onRequestSucceeded();\n }\n else {\n this.onRequestFailed(nextPeer.getNodeId());\n }\n }\n catch (err) {\n logger.debug('Unable to route message ', { err });\n }\n finally {\n logger.trace('sendRouteMessageRequest returned');\n }\n });\n }\n }\n addParallelRootIfSource(nodeId) {\n if (this.options.mode === RoutingMode.RECURSIVE\n && areEqualPeerDescriptors(this.options.localPeerDescriptor, this.options.routedMessage.sourcePeer)) {\n this.options.routedMessage.parallelRootNodeIds.push(nodeId);\n }\n }\n deleteParallelRootIfSource(nodeId) {\n if (this.options.mode === RoutingMode.RECURSIVE\n && areEqualPeerDescriptors(this.options.localPeerDescriptor, this.options.routedMessage.sourcePeer)) {\n pull(this.options.routedMessage.parallelRootNodeIds, nodeId);\n }\n }\n stop() {\n this.stopped = true;\n this.emit('stopped');\n this.removeAllListeners();\n }\n}\n","import { Logger } from '@streamr/utils';\nimport { RpcRemote } from '../contact/RpcRemote';\nconst logger = new Logger('RecursiveOperationSessionRpcRemote');\nexport class RecursiveOperationSessionRpcRemote extends RpcRemote {\n sendResponse(routingPath, closestConnectedNodes, dataEntries, noCloserNodesFound) {\n const report = {\n routingPath,\n closestConnectedNodes,\n dataEntries,\n noCloserNodesFound\n };\n this.getClient().sendResponse(report, this.formDhtRpcOptions()).catch((_e) => {\n logger.trace('Failed to send RecursiveOperationResponse');\n });\n }\n}\n","import { Logger } from '@streamr/utils';\nimport { toNodeId } from '../../identifiers';\nconst logger = new Logger('RecursiveOperationSessionRpcLocal');\nexport class RecursiveOperationSessionRpcLocal {\n options;\n constructor(options) {\n this.options = options;\n }\n async sendResponse(report, context) {\n const remoteNodeId = toNodeId(context.incomingSourceDescriptor);\n logger.trace('RecursiveOperationResponse arrived: ' + JSON.stringify(report));\n this.options.onResponseReceived(remoteNodeId, report.routingPath, report.closestConnectedNodes, report.dataEntries, report.noCloserNodesFound);\n return {};\n }\n}\n","import { EventEmitter } from 'eventemitter3';\nimport { v4 } from 'uuid';\nimport { RecursiveOperationResponse, RecursiveOperation } from '../../../generated/packages/dht/protos/DhtRpc';\nimport { ListeningRpcCommunicator } from '../../transport/ListeningRpcCommunicator';\nimport { Contact } from '../contact/Contact';\nimport { SortedContactList } from '../contact/SortedContactList';\nimport { RecursiveOperationSessionRpcLocal } from './RecursiveOperationSessionRpcLocal';\nimport { toDhtAddress, toNodeId, toDhtAddressRaw } from '../../identifiers';\nexport const RECURSIVE_OPERATION_TIMEOUT = 10 * 1000;\nexport class RecursiveOperationSession extends EventEmitter {\n id = v4();\n rpcCommunicator;\n results;\n foundData = new Map();\n allKnownHops = new Set();\n reportedHops = new Set();\n timeoutTask;\n completionEventEmitted = false;\n noCloserNodesReceivedCounter = 0;\n noCloserNodesReceivedFrom = new Set();\n options;\n constructor(options) {\n super();\n this.options = options;\n this.results = new SortedContactList({\n referenceId: options.targetId,\n maxSize: 10, // TODO use options option or named constant?\n allowToContainReferenceId: true\n });\n this.rpcCommunicator = new ListeningRpcCommunicator(this.id, options.transport, {\n rpcRequestTimeout: RECURSIVE_OPERATION_TIMEOUT\n });\n this.registerLocalRpcMethods();\n }\n registerLocalRpcMethods() {\n const rpcLocal = new RecursiveOperationSessionRpcLocal({\n onResponseReceived: (remoteNodeId, routingPath, closestConnectedNodes, dataEntries, noCloserNodesFound) => {\n this.onResponseReceived(remoteNodeId, routingPath, closestConnectedNodes, dataEntries, noCloserNodesFound);\n }\n });\n this.rpcCommunicator.registerRpcNotification(RecursiveOperationResponse, 'sendResponse', (req, context) => rpcLocal.sendResponse(req, context));\n }\n start(serviceId) {\n const routeMessage = this.wrapRequest(serviceId);\n this.options.doRouteRequest(routeMessage);\n }\n wrapRequest(serviceId) {\n const request = {\n sessionId: this.getId(),\n operation: this.options.operation\n };\n const msg = {\n messageId: v4(),\n serviceId,\n body: {\n oneofKind: 'recursiveOperationRequest',\n recursiveOperationRequest: request\n }\n };\n const routeMessage = {\n message: msg,\n requestId: v4(),\n target: toDhtAddressRaw(this.options.targetId),\n sourcePeer: this.options.localPeerDescriptor,\n reachableThrough: [],\n routingPath: [],\n parallelRootNodeIds: []\n };\n return routeMessage;\n }\n isCompleted() {\n const unreportedHops = new Set(this.allKnownHops);\n this.reportedHops.forEach((id) => {\n unreportedHops.delete(id);\n });\n if (this.noCloserNodesReceivedCounter >= 1 && unreportedHops.size === 0) {\n if (this.options.operation === RecursiveOperation.FETCH_DATA\n && (this.hasNonStaleData() || this.noCloserNodesReceivedCounter >= this.options.waitedRoutingPathCompletions)) {\n return true;\n }\n else if (this.options.operation === RecursiveOperation.FETCH_DATA) {\n return false;\n }\n return true;\n }\n return false;\n }\n hasNonStaleData() {\n return Array.from(this.foundData.values()).some((entry) => entry.stale === false);\n }\n onResponseReceived(remoteNodeId, routingPath, closestConnectedNodes, dataEntries, noCloserNodesFound) {\n this.addKnownHops(routingPath);\n if (routingPath.length >= 1) {\n this.setHopAsReported(routingPath[routingPath.length - 1]);\n }\n closestConnectedNodes.forEach((descriptor) => {\n this.results.addContact(new Contact(descriptor));\n });\n this.processFoundData(dataEntries);\n if (noCloserNodesFound || this.noCloserNodesReceivedFrom.has(remoteNodeId)) {\n this.onNoCloserPeersFound(remoteNodeId);\n }\n }\n addKnownHops(routingPath) {\n const localNodeId = toNodeId(this.options.localPeerDescriptor);\n routingPath.forEach((desc) => {\n const newNodeId = toNodeId(desc);\n if (localNodeId !== newNodeId) {\n this.allKnownHops.add(newNodeId);\n }\n });\n }\n setHopAsReported(desc) {\n const localNodeId = toNodeId(this.options.localPeerDescriptor);\n const newNodeId = toNodeId(desc);\n if (localNodeId !== newNodeId) {\n this.reportedHops.add(newNodeId);\n }\n if (this.isCompleted()) {\n if (!this.completionEventEmitted && this.isCompleted()) {\n if (this.timeoutTask) {\n clearTimeout(this.timeoutTask);\n this.timeoutTask = undefined;\n }\n this.emit('completed');\n this.completionEventEmitted = true;\n }\n }\n }\n processFoundData(dataEntries) {\n dataEntries.forEach((entry) => {\n const creatorNodeId = toDhtAddress(entry.creator);\n const existingEntry = this.foundData.get(creatorNodeId);\n if (!existingEntry || existingEntry.createdAt < entry.createdAt\n || (existingEntry.createdAt <= entry.createdAt && entry.deleted)) {\n this.foundData.set(creatorNodeId, entry);\n }\n });\n }\n onNoCloserPeersFound(remoteNodeId) {\n this.noCloserNodesReceivedCounter += 1;\n this.noCloserNodesReceivedFrom.add(remoteNodeId);\n if (this.isCompleted()) {\n this.emit('completed');\n this.completionEventEmitted = true;\n if (this.timeoutTask) {\n clearTimeout(this.timeoutTask);\n this.timeoutTask = undefined;\n }\n }\n else if (!this.timeoutTask && !this.completionEventEmitted) {\n this.timeoutTask = setTimeout(() => {\n if (!this.completionEventEmitted) {\n this.emit('completed');\n this.completionEventEmitted = true;\n }\n }, 4000); // TODO use options option or named constant?\n }\n }\n getResults() {\n return {\n closestNodes: this.results.getClosestContacts().map((contact) => contact.getPeerDescriptor()),\n dataEntries: Array.from(this.foundData.values())\n };\n }\n getId() {\n return this.id;\n }\n stop() {\n if (this.timeoutTask) {\n clearTimeout(this.timeoutTask);\n this.timeoutTask = undefined;\n }\n this.rpcCommunicator.destroy();\n this.emit('completed');\n }\n}\n","import { Logger, areEqualBinaries } from '@streamr/utils';\nimport { RouteMessageError } from '../../../generated/packages/dht/protos/DhtRpc';\nimport { RoutingMode } from './RoutingSession';\nimport { areEqualPeerDescriptors, toDhtAddress, toNodeId } from '../../identifiers';\nimport { v4 } from 'uuid';\nconst logger = new Logger('RouterRpcLocal');\nexport const createRouteMessageAck = (routedMessage, error) => {\n const ack = {\n requestId: routedMessage.requestId,\n error\n };\n return ack;\n};\nexport class RouterRpcLocal {\n options;\n constructor(options) {\n this.options = options;\n }\n async routeMessage(routedMessage) {\n if (this.options.duplicateRequestDetector.isMostLikelyDuplicate(routedMessage.requestId)) {\n logger.trace(`Routing message ${routedMessage.requestId} from ${toNodeId(routedMessage.sourcePeer)} `\n + `to ${toDhtAddress(routedMessage.target)} is likely a duplicate`);\n return createRouteMessageAck(routedMessage, RouteMessageError.DUPLICATE);\n }\n logger.trace(`Processing received routeMessage ${routedMessage.requestId}`);\n this.options.duplicateRequestDetector.add(routedMessage.requestId);\n if (areEqualBinaries(this.options.localPeerDescriptor.nodeId, routedMessage.target)) {\n logger.trace(`routing message targeted to self ${routedMessage.requestId}`);\n this.options.setForwardingEntries(routedMessage);\n this.options.handleMessage(routedMessage.message);\n return createRouteMessageAck(routedMessage);\n }\n else {\n return this.options.doRouteMessage(routedMessage);\n }\n }\n async forwardMessage(forwardMessage) {\n if (this.options.duplicateRequestDetector.isMostLikelyDuplicate(forwardMessage.requestId)) {\n logger.trace(`Forwarding message ${forwardMessage.requestId} from ${toNodeId(forwardMessage.sourcePeer)} `\n + `to ${toDhtAddress(forwardMessage.target)} is likely a duplicate`);\n return createRouteMessageAck(forwardMessage, RouteMessageError.DUPLICATE);\n }\n logger.trace(`Processing received forward routeMessage ${forwardMessage.requestId}`);\n this.options.duplicateRequestDetector.add(forwardMessage.requestId);\n if (areEqualBinaries(this.options.localPeerDescriptor.nodeId, forwardMessage.target)) {\n return this.forwardToDestination(forwardMessage);\n }\n else {\n return this.options.doRouteMessage(forwardMessage, RoutingMode.FORWARD);\n }\n }\n forwardToDestination(routedMessage) {\n logger.trace(`Forwarding found message targeted to self ${routedMessage.requestId}`);\n const forwardedMessage = routedMessage.message;\n if (areEqualPeerDescriptors(this.options.localPeerDescriptor, forwardedMessage.targetDescriptor)) {\n this.options.handleMessage(forwardedMessage);\n return createRouteMessageAck(routedMessage);\n }\n return this.options.doRouteMessage({ ...routedMessage, requestId: v4(), target: forwardedMessage.targetDescriptor.nodeId });\n }\n}\n","import { Logger } from '@streamr/utils';\nimport { RouteMessageError } from '../../../generated/packages/dht/protos/DhtRpc';\nimport { createRouteMessageAck } from '../routing/RouterRpcLocal';\nimport { getPreviousPeer } from '../routing/getPreviousPeer';\nimport { toNodeId } from '../../identifiers';\nconst logger = new Logger('RecursiveOperationRpcLocal');\nexport class RecursiveOperationRpcLocal {\n options;\n constructor(options) {\n this.options = options;\n }\n async routeRequest(routedMessage) {\n if (this.options.isMostLikelyDuplicate(routedMessage.requestId)) {\n return createRouteMessageAck(routedMessage, RouteMessageError.DUPLICATE);\n }\n const remoteNodeId = toNodeId(getPreviousPeer(routedMessage) ?? routedMessage.sourcePeer);\n logger.trace(`Received routeRequest call from ${remoteNodeId}`);\n this.options.addToDuplicateDetector(routedMessage.requestId);\n return this.options.doRouteRequest(routedMessage);\n }\n}\n","import { RecursiveOperation, RouteMessageAck, RouteMessageError, RouteMessageWrapper } from '../../../generated/packages/dht/protos/DhtRpc';\nimport { RoutingMode } from '../routing/RoutingSession';\nimport { Logger, areEqualBinaries, wait, waitForEvent } from '@streamr/utils';\nimport { RecursiveOperationSessionRpcRemote } from './RecursiveOperationSessionRpcRemote';\nimport { RECURSIVE_OPERATION_TIMEOUT, RecursiveOperationSession } from './RecursiveOperationSession';\nimport { ListeningRpcCommunicator } from '../../transport/ListeningRpcCommunicator';\nimport { RecursiveOperationSessionRpcClient } from '../../../generated/packages/dht/protos/DhtRpc.client';\nimport { SortedContactList } from '../contact/SortedContactList';\nimport { getPreviousPeer } from '../routing/getPreviousPeer';\nimport { createRouteMessageAck } from '../routing/RouterRpcLocal';\nimport { RecursiveOperationRpcLocal } from './RecursiveOperationRpcLocal';\nimport { areEqualPeerDescriptors, toDhtAddress, toNodeId, toDhtAddressRaw } from '../../identifiers';\nimport { getPeerDistance } from '../helpers/getPeerDistance';\nconst logger = new Logger('RecursiveOperationManager');\nexport class RecursiveOperationManager {\n ongoingSessions = new Map();\n stopped = false;\n options;\n constructor(options) {\n this.options = options;\n this.registerLocalRpcMethods();\n }\n registerLocalRpcMethods() {\n const rpcLocal = new RecursiveOperationRpcLocal({\n doRouteRequest: (routedMessage) => this.doRouteRequest(routedMessage),\n addContact: (contact) => this.options.addContact(contact),\n isMostLikelyDuplicate: (requestId) => this.options.router.isMostLikelyDuplicate(requestId),\n addToDuplicateDetector: (requestId) => this.options.router.addToDuplicateDetector(requestId)\n });\n this.options.rpcCommunicator.registerRpcMethod(RouteMessageWrapper, RouteMessageAck, 'routeRequest', async (routedMessage) => {\n if (this.stopped) {\n return createRouteMessageAck(routedMessage, RouteMessageError.STOPPED);\n }\n else {\n return rpcLocal.routeRequest(routedMessage);\n }\n });\n }\n async execute(targetId, operation, excludedPeer, waitForCompletion = true) {\n if (this.stopped) {\n return { closestNodes: [] };\n }\n const session = new RecursiveOperationSession({\n transport: this.options.sessionTransport,\n targetId,\n localPeerDescriptor: this.options.localPeerDescriptor,\n // TODO use options option or named constant?\n waitedRoutingPathCompletions: this.options.connectionsView.getConnectionCount() > 1 ? 2 : 1,\n operation,\n // TODO would it make sense to give excludedPeer as one of the fields RecursiveOperationSession?\n doRouteRequest: (routedMessage) => {\n return this.doRouteRequest(routedMessage, excludedPeer);\n }\n });\n if (this.options.connectionsView.getConnectionCount() === 0) {\n const dataEntries = Array.from(this.options.localDataStore.values(targetId));\n session.onResponseReceived(toNodeId(this.options.localPeerDescriptor), [this.options.localPeerDescriptor], [this.options.localPeerDescriptor], dataEntries, true);\n return session.getResults();\n }\n this.ongoingSessions.set(session.getId(), session);\n if (waitForCompletion === true) {\n try {\n const eventPromise = waitForEvent(session, 'completed', RECURSIVE_OPERATION_TIMEOUT);\n session.start(this.options.serviceId);\n await eventPromise;\n }\n catch (err) {\n logger.debug('start failed', { err });\n }\n }\n else {\n session.start(this.options.serviceId);\n // Wait for delete operation to be sent out by the router\n // TODO: Add a feature to wait for the router to pass the message?\n await wait(50);\n }\n if (operation === RecursiveOperation.FETCH_DATA) {\n const dataEntries = Array.from(this.options.localDataStore.values(targetId));\n if (dataEntries.length > 0) {\n this.sendResponse([this.options.localPeerDescriptor], this.options.localPeerDescriptor, session.getId(), [], dataEntries, true);\n }\n }\n else if (operation === RecursiveOperation.DELETE_DATA) {\n this.options.localDataStore.markAsDeleted(targetId, toNodeId(this.options.localPeerDescriptor));\n }\n this.ongoingSessions.delete(session.getId());\n session.stop();\n return session.getResults();\n }\n sendResponse(routingPath, targetPeerDescriptor, serviceId, closestConnectedNodes, dataEntries, noCloserNodesFound = false) {\n const isOwnNode = areEqualPeerDescriptors(this.options.localPeerDescriptor, targetPeerDescriptor);\n if (isOwnNode && this.ongoingSessions.has(serviceId)) {\n this.ongoingSessions.get(serviceId)\n .onResponseReceived(toNodeId(this.options.localPeerDescriptor), routingPath, closestConnectedNodes, dataEntries, noCloserNodesFound);\n }\n else {\n // TODO use options option or named constant?\n const remoteCommunicator = new ListeningRpcCommunicator(serviceId, this.options.sessionTransport, { rpcRequestTimeout: RECURSIVE_OPERATION_TIMEOUT });\n const rpcRemote = new RecursiveOperationSessionRpcRemote(this.options.localPeerDescriptor, targetPeerDescriptor, remoteCommunicator, RecursiveOperationSessionRpcClient, \n // TODO use options option or named constant?\n 10000);\n rpcRemote.sendResponse(routingPath, closestConnectedNodes, dataEntries, noCloserNodesFound);\n remoteCommunicator.destroy();\n }\n }\n doRouteRequest(routedMessage, excludedPeer) {\n if (this.stopped) {\n return createRouteMessageAck(routedMessage, RouteMessageError.STOPPED);\n }\n const targetId = toDhtAddress(routedMessage.target);\n const request = routedMessage.message.body.recursiveOperationRequest;\n // TODO use options option or named constant?\n const closestConnectedNodes = this.getClosestConnectedNodes(targetId, 5);\n const dataEntries = (request.operation === RecursiveOperation.FETCH_DATA)\n ? Array.from(this.options.localDataStore.values(targetId))\n : [];\n if (request.operation === RecursiveOperation.DELETE_DATA) {\n this.options.localDataStore.markAsDeleted(targetId, toNodeId(routedMessage.sourcePeer));\n }\n if (areEqualBinaries(this.options.localPeerDescriptor.nodeId, routedMessage.target)) {\n // TODO this is also very similar case to what we do at line 255, could simplify the code paths?\n this.sendResponse(routedMessage.routingPath, routedMessage.sourcePeer, request.sessionId, closestConnectedNodes, dataEntries, true);\n return createRouteMessageAck(routedMessage);\n }\n else {\n const ack = this.options.router.doRouteMessage(routedMessage, RoutingMode.RECURSIVE, excludedPeer);\n if ((ack.error === undefined) || (ack.error === RouteMessageError.NO_TARGETS)) {\n const noCloserContactsFound = (ack.error === RouteMessageError.NO_TARGETS) ||\n (closestConnectedNodes.length > 0\n && getPreviousPeer(routedMessage)\n && !this.isPeerCloserToIdThanSelf(closestConnectedNodes[0], targetId));\n this.sendResponse(routedMessage.routingPath, routedMessage.sourcePeer, request.sessionId, closestConnectedNodes, dataEntries, noCloserContactsFound);\n }\n return ack;\n }\n }\n getClosestConnectedNodes(referenceId, limit) {\n const connectedNodes = this.options.connectionsView.getConnections().map((c) => this.options.createDhtNodeRpcRemote(c));\n const sorted = new SortedContactList({\n referenceId,\n maxSize: limit,\n allowToContainReferenceId: true\n });\n sorted.addContacts(connectedNodes);\n return sorted.getClosestContacts(limit).map((peer) => peer.getPeerDescriptor());\n }\n isPeerCloserToIdThanSelf(peer, nodeIdOrDataKey) {\n const nodeIdOrDataKeyRaw = toDhtAddressRaw(nodeIdOrDataKey);\n const distance1 = getPeerDistance(peer.nodeId, nodeIdOrDataKeyRaw);\n const distance2 = getPeerDistance(this.options.localPeerDescriptor.nodeId, nodeIdOrDataKeyRaw);\n return distance1 < distance2;\n }\n stop() {\n this.stopped = true;\n this.ongoingSessions.forEach((session, _id) => {\n session.stop();\n });\n this.ongoingSessions.clear();\n }\n}\n","import { LRUCache } from 'lru-cache';\nconst createRoutingTableId = (targetId, previousId) => {\n return targetId + (previousId ?? '');\n};\nconst DEFAULT_LRU_OPTIONS = {\n max: 1000,\n maxAge: 15 * 1000\n};\n/**\n * RoutingTablesCache is a cache for routing tables.\n * It is used to store the routing tables for a specific targetId and previousId.\n * Storing the previousId is important as it is used as a minimum distance for the contacts in the table.\n * Calculating a RoutingTable from scratch is an O(n log n) operation (n = number of connections of a node)\n * However,\n * - Adding a contact to a RoutingTable is an O(log n) operation.\n * - Deleting a contact from a RoutingTable is an O(1) operation.\n * Thus, holding the most frequently used routing tables in memory to be updated on\n * connections and disconnections is hugely beneficial in terms of performance.\n*/\nexport class RoutingTablesCache {\n tables = new LRUCache(DEFAULT_LRU_OPTIONS);\n get(targetId, previousId) {\n return this.tables.get(createRoutingTableId(targetId, previousId));\n }\n set(targetId, table, previousId) {\n this.tables.set(createRoutingTableId(targetId, previousId), table);\n }\n has(targetId, previousId) {\n return this.tables.has(createRoutingTableId(targetId, previousId));\n }\n onNodeDisconnected(nodeId) {\n this.tables.forEach((table) => table.removeContact(nodeId));\n }\n onNodeConnected(remote) {\n this.tables.forEach((table) => table.addContact(remote));\n }\n reset() {\n this.tables.forEach((table) => table.stop());\n this.tables.clear();\n }\n}\n","import { RouteMessageAck, RouteMessageError, RouteMessageWrapper } from '../../../generated/packages/dht/protos/DhtRpc';\nimport { RoutingMode, RoutingRemoteContact, RoutingSession } from './RoutingSession';\nimport { Logger, raceForEvent } from '@streamr/utils';\nimport { DuplicateDetector } from './DuplicateDetector';\nimport { v4 } from 'uuid';\nimport { RouterRpcLocal, createRouteMessageAck } from './RouterRpcLocal';\nimport { areEqualPeerDescriptors, toDhtAddress, toNodeId } from '../../identifiers';\nimport { RoutingTablesCache } from './RoutingTablesCache';\nconst logger = new Logger('Router');\nexport class Router {\n forwardingTable = new Map();\n routingTablesCache = new RoutingTablesCache();\n ongoingRoutingSessions = new Map();\n // TODO use options option or named constant?\n duplicateRequestDetector = new DuplicateDetector(10000);\n stopped = false;\n options;\n messagesRouted = 0;\n messagesSent = 0;\n constructor(options) {\n this.options = options;\n this.registerLocalRpcMethods();\n }\n registerLocalRpcMethods() {\n const rpcLocal = new RouterRpcLocal({\n doRouteMessage: (routedMessage, mode) => this.doRouteMessage(routedMessage, mode),\n setForwardingEntries: (routedMessage) => this.setForwardingEntries(routedMessage),\n duplicateRequestDetector: this.duplicateRequestDetector,\n localPeerDescriptor: this.options.localPeerDescriptor,\n handleMessage: this.options.handleMessage\n });\n this.options.rpcCommunicator.registerRpcMethod(RouteMessageWrapper, RouteMessageAck, 'routeMessage', async (routedMessage) => {\n if (this.stopped) {\n return createRouteMessageAck(routedMessage, RouteMessageError.STOPPED);\n }\n return rpcLocal.routeMessage(routedMessage);\n });\n this.options.rpcCommunicator.registerRpcMethod(RouteMessageWrapper, RouteMessageAck, 'forwardMessage', async (forwardMessage) => {\n if (this.stopped) {\n return createRouteMessageAck(forwardMessage, RouteMessageError.STOPPED);\n }\n return rpcLocal.forwardMessage(forwardMessage);\n });\n }\n send(msg, reachableThrough) {\n msg.sourceDescriptor = this.options.localPeerDescriptor;\n const targetPeerDescriptor = msg.targetDescriptor;\n const forwardingEntry = this.forwardingTable.get(toNodeId(targetPeerDescriptor));\n if (forwardingEntry && forwardingEntry.peerDescriptors.length > 0) {\n const forwardedMessage = {\n message: msg,\n requestId: v4(),\n target: forwardingEntry.peerDescriptors[0].nodeId,\n sourcePeer: this.options.localPeerDescriptor,\n reachableThrough,\n routingPath: [],\n parallelRootNodeIds: []\n };\n const ack = this.doRouteMessage(forwardedMessage, RoutingMode.FORWARD);\n if (ack.error !== undefined) {\n const error = 'Could not forward message with error ' + ack.error;\n logger.debug(error);\n throw new Error(error);\n }\n }\n else {\n const routedMessage = {\n message: msg,\n requestId: v4(),\n target: targetPeerDescriptor.nodeId,\n sourcePeer: this.options.localPeerDescriptor,\n reachableThrough,\n routingPath: [],\n parallelRootNodeIds: []\n };\n const ack = this.doRouteMessage(routedMessage, RoutingMode.ROUTE);\n if (ack.error !== undefined) {\n const error = 'Could not route message with error ' + ack.error;\n logger.debug(error);\n throw new Error(error);\n }\n }\n this.messagesSent += 1;\n }\n doRouteMessage(routedMessage, mode = RoutingMode.ROUTE, excludedPeer) {\n if (this.stopped) {\n return createRouteMessageAck(routedMessage, RouteMessageError.STOPPED);\n }\n logger.trace(`Routing message ${routedMessage.requestId} from ${toNodeId(routedMessage.sourcePeer)} `\n + `to ${toDhtAddress(routedMessage.target)}`);\n const session = this.createRoutingSession(routedMessage, mode, excludedPeer);\n const contacts = session.updateAndGetRoutablePeers();\n if (contacts.length > 0) {\n this.addRoutingSession(session);\n logger.trace('starting to raceForEvent from routingSession: ' + session.sessionId);\n const eventReceived = raceForEvent(session, ['routingSucceeded', 'partialSuccess', 'routingFailed', 'stopped'], 10000 // TODO use options option or named constant?\n );\n setImmediate(async () => {\n try {\n await eventReceived;\n logger.trace('raceForEvent ended from routingSession: ' + session.sessionId);\n }\n catch {\n logger.trace('raceForEvent timed out for routingSession ' + session.sessionId);\n }\n session.stop();\n this.removeRoutingSession(session.sessionId);\n });\n session.sendMoreRequests(contacts);\n this.messagesRouted += 1;\n return createRouteMessageAck(routedMessage);\n }\n else {\n logger.trace('no targets', { sessionId: session.sessionId });\n return createRouteMessageAck(routedMessage, RouteMessageError.NO_TARGETS);\n }\n }\n createRoutingSession(routedMessage, mode, excludedNode) {\n const excludedNodeIds = new Set(routedMessage.routingPath.map((descriptor) => toNodeId(descriptor)));\n if (excludedNode) {\n excludedNodeIds.add(excludedNode);\n }\n routedMessage.parallelRootNodeIds.forEach((nodeId) => {\n excludedNodeIds.add(nodeId);\n });\n return new RoutingSession({\n rpcCommunicator: this.options.rpcCommunicator,\n localPeerDescriptor: this.options.localPeerDescriptor,\n routedMessage,\n // TODO use options option or named constant?\n parallelism: areEqualPeerDescriptors(this.options.localPeerDescriptor, routedMessage.sourcePeer) ? 2 : 1,\n mode,\n excludedNodeIds,\n routingTablesCache: this.routingTablesCache,\n getConnections: this.options.getConnections\n });\n }\n isMostLikelyDuplicate(requestId) {\n return this.duplicateRequestDetector.isMostLikelyDuplicate(requestId);\n }\n addToDuplicateDetector(requestId) {\n this.duplicateRequestDetector.add(requestId);\n }\n addRoutingSession(session) {\n this.ongoingRoutingSessions.set(session.sessionId, session);\n }\n removeRoutingSession(sessionId) {\n this.ongoingRoutingSessions.delete(sessionId);\n }\n onNodeConnected(peerDescriptor) {\n const remote = new RoutingRemoteContact(peerDescriptor, this.options.localPeerDescriptor, this.options.rpcCommunicator);\n this.routingTablesCache.onNodeConnected(remote);\n }\n onNodeDisconnected(peerDescriptor) {\n this.routingTablesCache.onNodeDisconnected(toNodeId(peerDescriptor));\n }\n resetCache() {\n this.routingTablesCache.reset();\n }\n stop() {\n this.stopped = true;\n this.ongoingRoutingSessions.forEach((session, _id) => {\n session.stop();\n });\n this.ongoingRoutingSessions.clear();\n this.forwardingTable.forEach((entry) => {\n clearTimeout(entry.timeout);\n });\n this.forwardingTable.clear();\n this.duplicateRequestDetector.clear();\n this.routingTablesCache.reset();\n }\n getDiagnosticInfo() {\n return {\n messagesRouted: this.messagesRouted,\n messagesSent: this.messagesSent\n };\n }\n setForwardingEntries(routedMessage) {\n const reachableThroughWithoutSelf = routedMessage.reachableThrough.filter((peer) => {\n return !areEqualPeerDescriptors(peer, this.options.localPeerDescriptor);\n });\n if (reachableThroughWithoutSelf.length > 0) {\n const sourceNodeId = toNodeId(routedMessage.sourcePeer);\n if (this.forwardingTable.has(sourceNodeId)) {\n const oldEntry = this.forwardingTable.get(sourceNodeId);\n clearTimeout(oldEntry.timeout);\n this.forwardingTable.delete(sourceNodeId);\n }\n const forwardingEntry = {\n peerDescriptors: reachableThroughWithoutSelf,\n timeout: setTimeout(() => {\n this.forwardingTable.delete(sourceNodeId);\n }, 10000) // TODO use options option or named constant?\n };\n this.forwardingTable.set(sourceNodeId, forwardingEntry);\n }\n }\n}\n","import { toDhtAddress } from '../../identifiers';\nimport { MapWithTtl } from '@streamr/utils';\nexport class LocalDataStore {\n maxTtl;\n constructor(maxTtl) {\n this.maxTtl = maxTtl;\n }\n // A map into which each node can store one value per data key\n // The first key is the key of the data, the second key is the\n // DhtAddress of the creator of the data\n store = new Map();\n storeEntry(dataEntry) {\n const key = toDhtAddress(dataEntry.key);\n const creatorNodeId = toDhtAddress(dataEntry.creator);\n if (!this.store.has(key)) {\n this.store.set(key, new MapWithTtl((e) => Math.min(e.ttl, this.maxTtl)));\n }\n if (this.store.get(key).has(creatorNodeId)) {\n const storedMillis = (dataEntry.createdAt.seconds * 1000) + (dataEntry.createdAt.nanos / 1000000);\n const oldLocalEntry = this.store.get(key).get(creatorNodeId);\n const oldStoredMillis = (oldLocalEntry.createdAt.seconds * 1000) + (oldLocalEntry.createdAt.nanos / 1000000);\n // do nothing if old entry is newer than the one being replicated\n if (oldStoredMillis >= storedMillis) {\n return false;\n }\n }\n this.store.get(key).set(creatorNodeId, dataEntry);\n return true;\n }\n markAsDeleted(key, creator) {\n const item = this.store.get(key);\n if (!item?.has(creator)) {\n return false;\n }\n const storedEntry = item.get(creator);\n storedEntry.deleted = true;\n return true;\n }\n *values(key) {\n if (key !== undefined) {\n const map = this.store.get(key);\n if (map !== undefined) {\n yield* map.values();\n }\n }\n else {\n for (const v of this.store.values()) {\n yield* v.values();\n }\n }\n }\n keys() {\n return this.store.keys();\n }\n setAllEntriesAsStale(key) {\n this.store.get(key)?.forEach((value) => {\n value.stale = true;\n });\n }\n deleteEntry(key, creator) {\n const storedEntry = this.store.get(key)?.get(creator);\n if (storedEntry) {\n this.store.get(key)?.delete(creator);\n if (this.store.get(key)?.size() === 0) {\n this.store.delete(key);\n }\n }\n }\n clear() {\n this.store.forEach((value) => value.clear());\n this.store.clear();\n }\n}\n","import { Logger, executeSafePromise } from '@streamr/utils';\nimport { Timestamp } from '../../../generated/google/protobuf/timestamp';\nimport { areEqualPeerDescriptors, toDhtAddress } from '../../identifiers';\nconst logger = new Logger('StoreRpcLocal');\nexport class StoreRpcLocal {\n options;\n constructor(options) {\n this.options = options;\n }\n async storeData(request) {\n logger.trace('storeData()');\n const key = toDhtAddress(request.key);\n const isLocalNodeStorer = this.isLocalNodeStorer(key);\n this.options.localDataStore.storeEntry({\n key: request.key,\n data: request.data,\n creator: request.creator,\n createdAt: request.createdAt,\n storedAt: Timestamp.now(),\n ttl: request.ttl,\n stale: !isLocalNodeStorer,\n deleted: false\n });\n if (!isLocalNodeStorer) {\n this.options.localDataStore.setAllEntriesAsStale(key);\n }\n return {};\n }\n async replicateData(request, context) {\n logger.trace('server-side replicateData()');\n const dataEntry = request.entry;\n const wasStored = this.options.localDataStore.storeEntry(dataEntry);\n if (wasStored) {\n this.replicateDataToNeighbors(context.incomingSourceDescriptor, request.entry);\n }\n const key = toDhtAddress(dataEntry.key);\n if (!this.isLocalNodeStorer(key)) {\n this.options.localDataStore.setAllEntriesAsStale(key);\n }\n logger.trace('server-side replicateData() at end');\n return {};\n }\n isLocalNodeStorer(dataKey) {\n return this.options.getStorers(dataKey).some((p) => areEqualPeerDescriptors(p, this.options.localPeerDescriptor));\n }\n replicateDataToNeighbors(requestor, dataEntry) {\n const dataKey = toDhtAddress(dataEntry.key);\n const storers = this.options.getStorers(dataKey);\n const isLocalNodePrimaryStorer = areEqualPeerDescriptors(storers[0], this.options.localPeerDescriptor);\n // If we are the closest to the data, get storageRedundancyFactor - 1 nearest node to the data, and\n // replicate to all those node. Otherwise replicate only to the one closest one. And never replicate \n // to the requestor nor to itself.\n const targets = (isLocalNodePrimaryStorer ? storers : [storers[0]]).filter((p) => !areEqualPeerDescriptors(p, requestor) && !areEqualPeerDescriptors(p, this.options.localPeerDescriptor));\n targets.forEach((target) => {\n setImmediate(() => {\n executeSafePromise(() => this.options.replicateDataToContact(dataEntry, target));\n });\n });\n }\n}\n","import { Logger } from '@streamr/utils';\nimport { areEqualPeerDescriptors, toDhtAddress, toNodeId, toDhtAddressRaw } from '../../identifiers';\nimport { Timestamp } from '../../../generated/google/protobuf/timestamp';\nimport { RecursiveOperation, ReplicateDataRequest, StoreDataRequest, StoreDataResponse } from '../../../generated/packages/dht/protos/DhtRpc';\nimport { getClosestNodes } from '../contact/getClosestNodes';\nimport { StoreRpcLocal } from './StoreRpcLocal';\nconst logger = new Logger('StoreManager');\nexport class StoreManager {\n options;\n constructor(options) {\n this.options = options;\n this.registerLocalRpcMethods();\n }\n registerLocalRpcMethods() {\n const rpcLocal = new StoreRpcLocal({\n localPeerDescriptor: this.options.localPeerDescriptor,\n localDataStore: this.options.localDataStore,\n replicateDataToContact: (dataEntry, contact) => this.replicateDataToContact(dataEntry, contact),\n getStorers: (dataKey) => this.getStorers(dataKey)\n });\n this.options.rpcCommunicator.registerRpcMethod(StoreDataRequest, StoreDataResponse, 'storeData', (request) => rpcLocal.storeData(request));\n this.options.rpcCommunicator.registerRpcNotification(ReplicateDataRequest, 'replicateData', (request, context) => rpcLocal.replicateData(request, context));\n }\n onContactAdded(peerDescriptor) {\n for (const key of this.options.localDataStore.keys()) {\n this.replicateAndUpdateStaleState(key, peerDescriptor);\n }\n }\n replicateAndUpdateStaleState(dataKey, newNode) {\n const storers = this.getStorers(dataKey);\n const storersBeforeContactAdded = storers.filter((p) => !areEqualPeerDescriptors(p, newNode));\n const selfWasPrimaryStorer = areEqualPeerDescriptors(storersBeforeContactAdded[0], this.options.localPeerDescriptor);\n if (selfWasPrimaryStorer) {\n if (storers.some((p) => areEqualPeerDescriptors(p, newNode))) {\n setImmediate(async () => {\n const dataEntries = Array.from(this.options.localDataStore.values(dataKey));\n await Promise.all(dataEntries.map(async (dataEntry) => this.replicateDataToContact(dataEntry, newNode)));\n });\n }\n }\n else if (!storers.some((p) => areEqualPeerDescriptors(p, this.options.localPeerDescriptor))) {\n this.options.localDataStore.setAllEntriesAsStale(dataKey);\n }\n }\n async replicateDataToContact(dataEntry, contact) {\n const rpcRemote = this.options.createRpcRemote(contact);\n try {\n await rpcRemote.replicateData({ entry: dataEntry }, true);\n }\n catch (e) {\n logger.trace('replicateData() threw an exception ' + e);\n }\n }\n async storeDataToDht(key, data, creator) {\n logger.debug(`Storing data to DHT ${this.options.serviceId}`);\n const result = await this.options.recursiveOperationManager.execute(key, RecursiveOperation.FIND_CLOSEST_NODES);\n const closestNodes = result.closestNodes;\n const successfulNodes = [];\n const ttl = this.options.highestTtl; // ToDo: make TTL decrease according to some nice curve\n const createdAt = Timestamp.now();\n for (let i = 0; i < closestNodes.length && successfulNodes.length < this.options.redundancyFactor; i++) {\n const keyRaw = toDhtAddressRaw(key);\n const creatorRaw = toDhtAddressRaw(creator);\n if (areEqualPeerDescriptors(this.options.localPeerDescriptor, closestNodes[i])) {\n this.options.localDataStore.storeEntry({\n key: keyRaw,\n data,\n creator: creatorRaw,\n createdAt,\n storedAt: Timestamp.now(),\n ttl,\n stale: false,\n deleted: false,\n });\n successfulNodes.push(closestNodes[i]);\n continue;\n }\n const rpcRemote = this.options.createRpcRemote(closestNodes[i]);\n try {\n await rpcRemote.storeData({\n key: keyRaw,\n data,\n creator: creatorRaw,\n createdAt,\n ttl\n });\n successfulNodes.push(closestNodes[i]);\n logger.trace('remote.storeData() success');\n }\n catch (e) {\n logger.trace('remote.storeData() threw an exception ' + e);\n }\n }\n return successfulNodes;\n }\n async replicateDataToClosestNodes() {\n const dataEntries = Array.from(this.options.localDataStore.values());\n await Promise.all(dataEntries.map(async (dataEntry) => {\n const dataKey = toDhtAddress(dataEntry.key);\n const neighbors = getClosestNodes(dataKey, this.options.getNeighbors(), { maxCount: this.options.redundancyFactor });\n await Promise.all(neighbors.map(async (neighbor) => {\n const rpcRemote = this.options.createRpcRemote(neighbor);\n try {\n await rpcRemote.replicateData({ entry: dataEntry }, false);\n }\n catch (err) {\n logger.trace('Failed to replicate data in replicateDataToClosestNodes', { err });\n }\n }));\n }));\n }\n getStorers(dataKey, excludedNode) {\n return getClosestNodes(dataKey, [...this.options.getNeighbors(), this.options.localPeerDescriptor], {\n maxCount: this.options.redundancyFactor,\n excludedNodeIds: excludedNode !== undefined ? new Set([toNodeId(excludedNode)]) : undefined\n });\n }\n async destroy() {\n await this.replicateDataToClosestNodes();\n }\n}\n","import { toNodeId } from '../../identifiers';\nimport { EXISTING_CONNECTION_TIMEOUT, RpcRemote } from '../contact/RpcRemote';\nexport class StoreRpcRemote extends RpcRemote {\n async storeData(request) {\n const options = this.formDhtRpcOptions();\n try {\n await this.getClient().storeData(request, options);\n }\n catch (err) {\n const to = toNodeId(this.getPeerDescriptor());\n const from = toNodeId(this.getLocalPeerDescriptor());\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n throw new Error(`Could not store data to ${to} from ${from} ${err}`);\n }\n }\n async replicateData(request, connect) {\n const options = this.formDhtRpcOptions({\n timeout: EXISTING_CONNECTION_TIMEOUT,\n notification: true,\n connect\n });\n return this.getClient().replicateData(request, options);\n }\n}\n","import { Logger, MetricsContext, addManagedEventListener, merge, scheduleAtInterval, until } from '@streamr/utils';\nimport { EventEmitter } from 'eventemitter3';\nimport sample from 'lodash/sample';\nimport { ConnectionManager } from '../connection/ConnectionManager';\nimport { DefaultConnectorFacade } from '../connection/ConnectorFacade';\nimport { createPeerDescriptor } from '../helpers/createPeerDescriptor';\nimport { KADEMLIA_ID_LENGTH_IN_BYTES, toNodeId } from '../identifiers';\nimport { ClosestPeersRequest, ClosestPeersResponse, ClosestRingPeersRequest, ClosestRingPeersResponse, ExternalFetchDataRequest, ExternalFetchDataResponse, ExternalStoreDataRequest, ExternalStoreDataResponse, LeaveNotice, PingRequest, PingResponse, RecursiveOperation } from '../../generated/packages/dht/protos/DhtRpc';\nimport { ExternalApiRpcClient, StoreRpcClient } from '../../generated/packages/dht/protos/DhtRpc.client';\nimport { RoutingRpcCommunicator } from '../transport/RoutingRpcCommunicator';\nimport { DhtNodeRpcLocal } from './DhtNodeRpcLocal';\nimport { DhtNodeRpcRemote } from './DhtNodeRpcRemote';\nimport { ExternalApiRpcLocal } from './ExternalApiRpcLocal';\nimport { ExternalApiRpcRemote } from './ExternalApiRpcRemote';\nimport { PeerManager } from './PeerManager';\nimport { PeerDiscovery } from './discovery/PeerDiscovery';\nimport { RecursiveOperationManager } from './recursive-operation/RecursiveOperationManager';\nimport { Router } from './routing/Router';\nimport { LocalDataStore } from './store/LocalDataStore';\nimport { StoreManager } from './store/StoreManager';\nimport { StoreRpcRemote } from './store/StoreRpcRemote';\nimport { getLocalRegionByCoordinates, getLocalRegionWithCache } from '@streamr/cdn-location';\nimport { isBrowserEnvironment } from '@/isBrowserEnvironment';\nimport { CONTROL_LAYER_NODE_SERVICE_ID } from './consts';\nconst logger = new Logger('DhtNode');\nexport const NUMBER_OF_NODES_PER_KBUCKET_DEFAULT = 8;\nconst PERIODICAL_PING_INTERVAL = 60 * 1000;\nexport class DhtNode extends EventEmitter {\n options;\n rpcCommunicator;\n transport;\n localPeerDescriptor;\n router;\n storeManager;\n localDataStore;\n recursiveOperationManager;\n peerDiscovery;\n peerManager;\n connectionsView;\n connectionLocker;\n started = false;\n abortController = new AbortController();\n constructor(conf) {\n super();\n this.options = merge({\n serviceId: CONTROL_LAYER_NODE_SERVICE_ID,\n joinParallelism: 3,\n maxContactCount: 200,\n numberOfNodesPerKBucket: NUMBER_OF_NODES_PER_KBUCKET_DEFAULT,\n joinNoProgressLimit: 5,\n dhtJoinTimeout: 60000,\n peerDiscoveryQueryBatchSize: 5,\n maxConnections: 80,\n storeHighestTtl: 60000,\n storeMaxTtl: 60000,\n networkConnectivityTimeout: 10000,\n storageRedundancyFactor: 5, // TODO validate that this is > 1 (as each node should replicate the data to other node)\n metricsContext: new MetricsContext()\n }, conf);\n this.validateOptions();\n this.localDataStore = new LocalDataStore(this.options.storeMaxTtl);\n this.send = this.send.bind(this);\n }\n validateOptions() {\n const expectedNodeIdLength = KADEMLIA_ID_LENGTH_IN_BYTES * 2;\n if (this.options.nodeId !== undefined) {\n if (!/^[0-9a-fA-F]+$/.test(this.options.nodeId)) {\n throw new Error('Invalid nodeId, the nodeId should be a hex string');\n }\n else if (this.options.nodeId.length !== expectedNodeIdLength) {\n throw new Error(`Invalid nodeId, the length of the nodeId should be ${expectedNodeIdLength}`);\n }\n }\n if (this.options.peerDescriptor !== undefined) {\n if (this.options.peerDescriptor.nodeId.length !== KADEMLIA_ID_LENGTH_IN_BYTES) {\n throw new Error(`Invalid peerDescriptor, the length of the nodeId should be ${KADEMLIA_ID_LENGTH_IN_BYTES} bytes`);\n }\n }\n if (this.options.transport !== undefined && this.options.connectionsView === undefined) {\n throw new Error('connectionsView is required when transport is given');\n }\n }\n async start() {\n if (this.started || this.abortController.signal.aborted) {\n return;\n }\n logger.trace(`Starting new Streamr Network DHT Node with serviceId ${this.options.serviceId}`);\n this.started = true;\n if (isBrowserEnvironment) {\n this.options.websocketPortRange = undefined;\n if (this.options.peerDescriptor) {\n this.options.peerDescriptor.websocket = undefined;\n }\n }\n // If transport is given, do not create a ConnectionManager\n if (this.options.transport) {\n this.transport = this.options.transport;\n this.connectionsView = this.options.connectionsView;\n this.connectionLocker = this.options.connectionLocker;\n this.localPeerDescriptor = this.transport.getLocalPeerDescriptor();\n }\n else {\n const connectorFacadeOptions = {\n transport: this,\n entryPoints: this.options.entryPoints,\n iceServers: this.options.iceServers,\n webrtcAllowPrivateAddresses: this.options.webrtcAllowPrivateAddresses,\n webrtcDatachannelBufferThresholdLow: this.options.webrtcDatachannelBufferThresholdLow,\n webrtcDatachannelBufferThresholdHigh: this.options.webrtcDatachannelBufferThresholdHigh,\n webrtcPortRange: this.options.webrtcPortRange,\n maxMessageSize: this.options.maxMessageSize,\n websocketServerEnableTls: this.options.websocketServerEnableTls,\n tlsCertificate: this.options.tlsCertificate,\n externalIp: this.options.externalIp,\n autoCertifierUrl: this.options.autoCertifierUrl,\n autoCertifierConfigFile: this.options.autoCertifierConfigFile,\n geoIpDatabaseFolder: this.options.geoIpDatabaseFolder,\n createLocalPeerDescriptor: (connectivityResponse) => this.generatePeerDescriptorCallBack(connectivityResponse)\n };\n // If own PeerDescriptor is given in options, create a ConnectionManager with ws server\n if (this.options.peerDescriptor?.websocket) {\n connectorFacadeOptions.websocketHost = this.options.peerDescriptor.websocket.host;\n connectorFacadeOptions.websocketPortRange = {\n min: this.options.peerDescriptor.websocket.port,\n max: this.options.peerDescriptor.websocket.port\n };\n // If websocketPortRange is given, create ws server using it, websocketHost can be undefined\n }\n else if (this.options.websocketPortRange) {\n connectorFacadeOptions.websocketHost = this.options.websocketHost;\n connectorFacadeOptions.websocketPortRange = this.options.websocketPortRange;\n }\n const connectionManager = new ConnectionManager({\n createConnectorFacade: () => new DefaultConnectorFacade(connectorFacadeOptions),\n maxConnections: this.options.maxConnections,\n metricsContext: this.options.metricsContext,\n allowIncomingPrivateConnections: this.options.allowIncomingPrivateConnections ?? false\n });\n await connectionManager.start();\n this.connectionsView = connectionManager;\n this.connectionLocker = connectionManager;\n this.transport = connectionManager;\n }\n this.rpcCommunicator = new RoutingRpcCommunicator(this.options.serviceId, (msg, opts) => this.transport.send(msg, opts), { rpcRequestTimeout: this.options.rpcRequestTimeout });\n /* eslint-disable indent */\n addManagedEventListener(// TODO remove explicit type in NET-1449\n this.transport, 'message', (message) => this.handleMessageFromTransport(message), this.abortController.signal);\n this.initPeerManager();\n this.peerDiscovery = new PeerDiscovery({\n localPeerDescriptor: this.localPeerDescriptor,\n joinNoProgressLimit: this.options.joinNoProgressLimit,\n joinTimeout: this.options.dhtJoinTimeout,\n serviceId: this.options.serviceId,\n parallelism: this.options.joinParallelism,\n connectionLocker: this.connectionLocker,\n peerManager: this.peerManager,\n abortSignal: this.abortController.signal,\n createDhtNodeRpcRemote: (peerDescriptor) => this.createDhtNodeRpcRemote(peerDescriptor),\n });\n this.router = new Router({\n rpcCommunicator: this.rpcCommunicator,\n localPeerDescriptor: this.localPeerDescriptor,\n handleMessage: (message) => this.handleMessageFromRouter(message),\n getConnections: () => this.connectionsView.getConnections()\n });\n this.recursiveOperationManager = new RecursiveOperationManager({\n rpcCommunicator: this.rpcCommunicator,\n router: this.router,\n sessionTransport: this,\n connectionsView: this.connectionsView,\n localPeerDescriptor: this.localPeerDescriptor,\n serviceId: this.options.serviceId,\n localDataStore: this.localDataStore,\n addContact: (contact) => this.peerManager.addContact(contact),\n createDhtNodeRpcRemote: (peerDescriptor) => this.createDhtNodeRpcRemote(peerDescriptor),\n });\n this.storeManager = new StoreManager({\n rpcCommunicator: this.rpcCommunicator,\n recursiveOperationManager: this.recursiveOperationManager,\n localPeerDescriptor: this.localPeerDescriptor,\n serviceId: this.options.serviceId,\n highestTtl: this.options.storeHighestTtl,\n redundancyFactor: this.options.storageRedundancyFactor,\n localDataStore: this.localDataStore,\n getNeighbors: () => this.peerManager.getNeighbors().map((n) => n.getPeerDescriptor()),\n createRpcRemote: (contact) => {\n return new StoreRpcRemote(this.localPeerDescriptor, contact, this.rpcCommunicator, StoreRpcClient, this.options.rpcRequestTimeout);\n }\n });\n this.on('nearbyContactAdded', (peerDescriptor) => {\n this.storeManager.onContactAdded(peerDescriptor);\n });\n this.bindRpcLocalMethods();\n const pruneTargets = [];\n if (this.options.periodicallyPingNeighbors === true) {\n pruneTargets.push(() => this.peerManager.getNeighbors().map((node) => this.createDhtNodeRpcRemote(node.getPeerDescriptor())));\n }\n if (this.options.periodicallyPingRingContacts === true) {\n pruneTargets.push(() => this.peerManager.getRingContacts().getAllContacts());\n }\n for (const pruneTarget of pruneTargets) {\n await scheduleAtInterval(async () => {\n const nodes = pruneTarget();\n await this.peerManager.pruneOfflineNodes(nodes);\n }, PERIODICAL_PING_INTERVAL, false, this.abortController.signal);\n }\n }\n initPeerManager() {\n this.peerManager = new PeerManager({\n numberOfNodesPerKBucket: this.options.numberOfNodesPerKBucket,\n maxContactCount: this.options.maxContactCount,\n localNodeId: this.getNodeId(),\n localPeerDescriptor: this.localPeerDescriptor,\n connectionLocker: this.connectionLocker,\n lockId: this.options.serviceId,\n createDhtNodeRpcRemote: (peerDescriptor) => this.createDhtNodeRpcRemote(peerDescriptor),\n hasConnection: (nodeId) => this.connectionsView.hasConnection(nodeId),\n neighborPingLimit: this.options.neighborPingLimit\n });\n this.peerManager.on('nearbyContactRemoved', (peerDescriptor) => {\n this.emit('nearbyContactRemoved', peerDescriptor);\n });\n this.peerManager.on('nearbyContactAdded', (peerDescriptor) => this.emit('nearbyContactAdded', peerDescriptor));\n this.peerManager.on('randomContactRemoved', (peerDescriptor) => this.emit('randomContactRemoved', peerDescriptor));\n this.peerManager.on('randomContactAdded', (peerDescriptor) => this.emit('randomContactAdded', peerDescriptor));\n this.peerManager.on('ringContactRemoved', (peerDescriptor) => {\n this.emit('ringContactRemoved', peerDescriptor);\n });\n this.peerManager.on('ringContactAdded', (peerDescriptor) => {\n this.emit('ringContactAdded', peerDescriptor);\n });\n this.peerManager.on('kBucketEmpty', () => {\n if (!this.peerDiscovery.isJoinOngoing()) {\n if (this.options.entryPoints && this.options.entryPoints.length > 0) {\n setImmediate(async () => {\n const contactedPeers = new Set();\n const distantJoinContactPeers = new Set();\n // TODO should we catch possible promise rejection?\n await Promise.all(this.options.entryPoints.map((entryPoint) => this.peerDiscovery.rejoinDht(entryPoint, contactedPeers, distantJoinContactPeers)));\n });\n }\n else {\n this.emit('manualRejoinRequired');\n }\n }\n });\n /* eslint-disable indent */\n addManagedEventListener(// TODO remove explicit type in NET-1449\n this.transport, 'connected', (peerDescriptor) => {\n this.router.onNodeConnected(peerDescriptor);\n this.emit('connected', peerDescriptor);\n }, this.abortController.signal);\n /* eslint-disable indent, max-len */\n addManagedEventListener(// TODO remove explicit type in NET-1449\n this.transport, 'disconnected', (peerDescriptor, gracefulLeave) => {\n const isControlLayerNode = (this.connectionLocker !== undefined);\n if (isControlLayerNode) {\n const nodeId = toNodeId(peerDescriptor);\n if (gracefulLeave) {\n this.peerManager.removeContact(nodeId);\n }\n else {\n this.peerManager.removeNeighbor(nodeId);\n }\n }\n this.router.onNodeDisconnected(peerDescriptor);\n this.emit('disconnected', peerDescriptor, gracefulLeave);\n }, this.abortController.signal);\n }\n bindRpcLocalMethods() {\n if (!this.started || this.abortController.signal.aborted) {\n return;\n }\n const dhtNodeRpcLocal = new DhtNodeRpcLocal({\n peerDiscoveryQueryBatchSize: this.options.peerDiscoveryQueryBatchSize,\n getNeighbors: () => this.peerManager.getNeighbors().map((n) => n.getPeerDescriptor()),\n getClosestRingContactsTo: (ringIdRaw, limit) => {\n return this.getClosestRingContactsTo(ringIdRaw, limit);\n },\n addContact: (contact) => this.peerManager.addContact(contact),\n removeContact: (nodeId) => this.removeContact(nodeId)\n });\n this.rpcCommunicator.registerRpcMethod(ClosestPeersRequest, ClosestPeersResponse, 'getClosestPeers', (req, context) => dhtNodeRpcLocal.getClosestPeers(req, context));\n this.rpcCommunicator.registerRpcMethod(ClosestRingPeersRequest, ClosestRingPeersResponse, 'getClosestRingPeers', (req, context) => dhtNodeRpcLocal.getClosestRingPeers(req, context));\n this.rpcCommunicator.registerRpcMethod(PingRequest, PingResponse, 'ping', (req, context) => dhtNodeRpcLocal.ping(req, context));\n this.rpcCommunicator.registerRpcNotification(LeaveNotice, 'leaveNotice', (_req, context) => dhtNodeRpcLocal.leaveNotice(context));\n const externalApiRpcLocal = new ExternalApiRpcLocal({\n executeRecursiveOperation: (key, operation, excludedPeer) => {\n return this.recursiveOperationManager.execute(key, operation, excludedPeer);\n },\n storeDataToDht: (key, data, creator) => this.storeDataToDht(key, data, creator)\n });\n this.rpcCommunicator.registerRpcMethod(ExternalFetchDataRequest, ExternalFetchDataResponse, 'externalFetchData', (req, context) => externalApiRpcLocal.externalFetchData(req, context), { timeout: 10000 } // TODO use options option or named constant?\n );\n this.rpcCommunicator.registerRpcMethod(ExternalStoreDataRequest, ExternalStoreDataResponse, 'externalStoreData', (req, context) => externalApiRpcLocal.externalStoreData(req, context), { timeout: 10000 } // TODO use options option or named constant?\n );\n }\n handleMessageFromTransport(message) {\n if (message.serviceId === this.options.serviceId) {\n this.rpcCommunicator?.handleMessageFromPeer(message);\n }\n }\n handleMessageFromRouter(message) {\n if (message.serviceId === this.options.serviceId) {\n this.rpcCommunicator?.handleMessageFromPeer(message);\n }\n else {\n this.emit('message', message);\n }\n }\n async generatePeerDescriptorCallBack(connectivityResponse) {\n if (this.options.peerDescriptor !== undefined) {\n this.localPeerDescriptor = this.options.peerDescriptor;\n }\n else {\n let region = undefined;\n if (this.options.region !== undefined) {\n region = this.options.region;\n logger.debug(`Using region ${region} from options when generating local PeerDescriptor`);\n }\n else if (connectivityResponse.latitude !== undefined && connectivityResponse.longitude !== undefined) {\n region = getLocalRegionByCoordinates(connectivityResponse.latitude, connectivityResponse.longitude);\n logger.debug(`Using region ${region} from GeoIP when generating local PeerDescriptor`);\n }\n else {\n // as a fallback get the region from the CDN\n // and if it's not available, use a random region\n region = await getLocalRegionWithCache();\n logger.debug(`Using region ${region} from CDN when generating local PeerDescriptor`);\n }\n this.localPeerDescriptor = await createPeerDescriptor(connectivityResponse, region, this.options.nodeId);\n }\n return this.localPeerDescriptor;\n }\n getClosestContacts(limit) {\n return this.peerManager.getNearbyContacts()\n .getClosestContacts(limit)\n .map((peer) => peer.getPeerDescriptor());\n }\n getRandomContacts(limit) {\n return this.peerManager.getRandomContacts().getContacts(limit).map((c) => c.getPeerDescriptor());\n }\n getRingContacts() {\n const contacts = this.peerManager.getRingContacts().getClosestContacts();\n return {\n left: contacts.left.map((c) => c.getPeerDescriptor()),\n right: contacts.right.map((c) => c.getPeerDescriptor())\n };\n }\n getClosestRingContactsTo(ringIdRaw, limit) {\n const closest = this.peerManager.getClosestRingContactsTo(ringIdRaw, limit);\n return {\n left: closest.left.map((dhtPeer) => dhtPeer.getPeerDescriptor()),\n right: closest.right.map((dhtPeer) => dhtPeer.getPeerDescriptor())\n };\n }\n getNodeId() {\n return toNodeId(this.localPeerDescriptor);\n }\n getNeighborCount() {\n return this.peerManager.getNeighborCount();\n }\n removeContact(nodeId) {\n if (!this.started) { // the stopped state is checked in PeerManager\n return;\n }\n this.peerManager.removeContact(nodeId);\n }\n async send(msg) {\n if (!this.started || this.abortController.signal.aborted) {\n return;\n }\n const reachableThrough = this.peerDiscovery.isJoinOngoing() ? this.getConnectedEntryPoints() : [];\n this.router.send(msg, reachableThrough);\n }\n getConnectedEntryPoints() {\n return this.options.entryPoints !== undefined ? this.options.entryPoints.filter((entryPoint) => this.connectionsView.hasConnection(toNodeId(entryPoint))) : [];\n }\n async joinDht(entryPointDescriptors, doAdditionalDistantPeerDiscovery, retry) {\n if (!this.started) {\n throw new Error('Cannot join DHT before calling start() on DhtNode');\n }\n await this.peerDiscovery.joinDht(entryPointDescriptors, doAdditionalDistantPeerDiscovery, retry);\n }\n async joinRing() {\n if (!this.started) {\n throw new Error('Cannot join ring before calling start() on DhtNode');\n }\n await this.peerDiscovery.joinRing();\n }\n async storeDataToDht(key, data, creator) {\n return this.executeRecursiveOperation(() => this.storeManager.storeDataToDht(key, data, creator ?? this.getNodeId()), (connectedEntryPoint) => this.storeDataToDhtViaPeer(key, data, connectedEntryPoint));\n }\n async storeDataToDhtViaPeer(key, data, peer) {\n const rpcRemote = new ExternalApiRpcRemote(this.localPeerDescriptor, peer, this.rpcCommunicator, ExternalApiRpcClient);\n return await rpcRemote.storeData(key, data);\n }\n async fetchDataFromDht(key) {\n return this.executeRecursiveOperation(async () => {\n const result = await this.recursiveOperationManager.execute(key, RecursiveOperation.FETCH_DATA);\n return result.dataEntries ?? []; // TODO is this fallback needed?\n }, (connectedEntryPoint) => this.fetchDataFromDhtViaPeer(key, connectedEntryPoint));\n }\n async fetchDataFromDhtViaPeer(key, peer) {\n const rpcRemote = new ExternalApiRpcRemote(this.localPeerDescriptor, peer, this.rpcCommunicator, ExternalApiRpcClient);\n return await rpcRemote.externalFetchData(key);\n }\n async executeRecursiveOperation(executeDirectly, executeViaPeer) {\n const connectedEntryPoints = this.getConnectedEntryPoints();\n if (this.peerDiscovery.isJoinOngoing() && connectedEntryPoints.length > 0) {\n return executeViaPeer(sample(connectedEntryPoints));\n }\n return executeDirectly();\n }\n async deleteDataFromDht(key, waitForCompletion) {\n if (!this.abortController.signal.aborted) {\n await this.recursiveOperationManager.execute(key, RecursiveOperation.DELETE_DATA, undefined, waitForCompletion);\n }\n }\n async findClosestNodesFromDht(key) {\n return this.executeRecursiveOperation(async () => {\n const result = await this.recursiveOperationManager.execute(key, RecursiveOperation.FIND_CLOSEST_NODES);\n return result.closestNodes;\n }, (connectedEntryPoint) => this.findClosestNodesViaPeer(key, connectedEntryPoint));\n }\n async findClosestNodesViaPeer(key, peer) {\n const rpcRemote = new ExternalApiRpcRemote(this.localPeerDescriptor, peer, this.rpcCommunicator, ExternalApiRpcClient);\n return await rpcRemote.externalFindClosestNode(key);\n }\n getTransport() {\n return this.transport;\n }\n getLocalPeerDescriptor() {\n return this.localPeerDescriptor;\n }\n getNeighbors() {\n return this.started ? this.peerManager.getNeighbors().map((remote) => remote.getPeerDescriptor()) : [];\n }\n getConnectionsView() {\n return this.connectionsView;\n }\n getLocalLockedConnectionCount() {\n return this.connectionLocker.getLocalLockedConnectionCount();\n }\n getRemoteLockedConnectionCount() {\n return this.connectionLocker.getRemoteLockedConnectionCount();\n }\n getWeakLockedConnectionCount() {\n return this.connectionLocker.getWeakLockedConnectionCount();\n }\n async waitForNetworkConnectivity() {\n await until(() => this.connectionsView.getConnectionCount() > 0, this.options.networkConnectivityTimeout, 100, this.abortController.signal);\n }\n hasJoined() {\n return this.peerDiscovery.isJoinCalled();\n }\n getDiagnosticInfo() {\n return {\n localPeerDescriptor: this.localPeerDescriptor,\n transport: this.transport.getDiagnosticInfo(),\n router: this.router.getDiagnosticInfo(),\n neighborCount: this.getNeighborCount(),\n nearbyContactCount: Array.from(this.peerManager.getNearbyContacts().getAllContactsInUndefinedOrder()).length,\n randomContactCount: this.peerManager.getRandomContacts().getSize()\n };\n }\n async stop() {\n if (this.abortController.signal.aborted || !this.started) {\n return;\n }\n logger.trace('stop()');\n this.abortController.abort();\n await this.storeManager.destroy();\n this.localDataStore.clear();\n this.peerManager?.stop();\n this.rpcCommunicator.stop();\n this.router.stop();\n this.recursiveOperationManager.stop();\n if (this.options.transport === undefined) {\n // if the transport was not given in options, the instance was created in start() and\n // this component is responsible for stopping it\n await this.transport.stop();\n }\n this.transport = undefined;\n this.connectionLocker = undefined;\n this.removeAllListeners();\n }\n createDhtNodeRpcRemote(peerDescriptor) {\n return new DhtNodeRpcRemote(this.localPeerDescriptor, peerDescriptor, this.options.serviceId, this.rpcCommunicator, this.options.rpcRequestTimeout);\n }\n}\n","/* eslint-disable max-len, @typescript-eslint/prefer-for-of */\n// This file contains a 16x16 matrix of ping times measured between\n// amazon regions. Converted to typescript from the file pings.csv\n// in order to make loading into browser easier.\nexport var RegionIndex;\n(function (RegionIndex) {\n RegionIndex[RegionIndex[\"eu_central_1\"] = 0] = \"eu_central_1\";\n RegionIndex[RegionIndex[\"eu_west_1\"] = 1] = \"eu_west_1\";\n RegionIndex[RegionIndex[\"eu_west_2\"] = 2] = \"eu_west_2\";\n RegionIndex[RegionIndex[\"eu_west_3\"] = 3] = \"eu_west_3\";\n RegionIndex[RegionIndex[\"eu_north_1\"] = 4] = \"eu_north_1\";\n RegionIndex[RegionIndex[\"us_east_1\"] = 5] = \"us_east_1\";\n RegionIndex[RegionIndex[\"us_east_2\"] = 6] = \"us_east_2\";\n RegionIndex[RegionIndex[\"us_west_1\"] = 7] = \"us_west_1\";\n RegionIndex[RegionIndex[\"us_west_2\"] = 8] = \"us_west_2\";\n RegionIndex[RegionIndex[\"ca_central_1\"] = 9] = \"ca_central_1\";\n RegionIndex[RegionIndex[\"ap_south_1\"] = 10] = \"ap_south_1\";\n RegionIndex[RegionIndex[\"ap_northeast_2\"] = 11] = \"ap_northeast_2\";\n RegionIndex[RegionIndex[\"ap_southeast_1\"] = 12] = \"ap_southeast_1\";\n RegionIndex[RegionIndex[\"ap_southeast_2\"] = 13] = \"ap_southeast_2\";\n RegionIndex[RegionIndex[\"ap_northeast_1\"] = 14] = \"ap_northeast_1\";\n RegionIndex[RegionIndex[\"sa_east_1\"] = 15] = \"sa_east_1\";\n})(RegionIndex || (RegionIndex = {}));\nexport const regionPingMatrix = [\n [0.325, 23.163, 12.942, 8.923, 20.699, 89.208, 99.98, 150.077, 139.224, 90.454, 117.0, 226.823, 154.592, 286.753, 222.719, 205.563],\n [24.911, 0.195, 10.022, 18.544, 39.802, 66.161, 93.877, 136.271, 127.362, 73.733, 122.187, 229.064, 177.256, 254.277, 200.207, 186.817],\n [12.879, 9.994, 0.167, 8.626, 31.896, 74.663, 85.231, 136.185, 125.328, 77.811, 111.29, 236.34, 164.357, 262.577, 207.745, 187.383],\n [9.007, 16.823, 8.761, 0.191, 28.449, 81.969, 92.599, 140.961, 132.269, 85.444, 107.421, 243.981, 167.17, 279.322, 214.088, 197.986],\n [20.661, 40.0, 31.176, 27.645, 0.137, 104.171, 115.704, 165.01, 155.741, 107.635, 136.75, 267.321, 173.951, 292.266, 238.492, 216.048],\n [89.076, 67.701, 75.414, 81.598, 104.866, 0.284, 11.501, 61.662, 78.612, 14.115, 186.697, 174.546, 210.93, 196.071, 145.622, 114.919],\n [100.018, 93.968, 85.06, 92.582, 115.719, 11.514, 0.184, 51.668, 48.447, 25.808, 195.433, 160.031, 197.27, 186.913, 133.115, 127.954],\n [148.544, 137.18, 136.137, 141.333, 164.73, 60.257, 50.886, 0.197, 21.509, 77.668, 229.32, 134.858, 174.472, 137.329, 107.566, 175.944],\n [137.885, 128.304, 125.316, 132.271, 155.726, 63.376, 48.457, 20.743, 0.293, 59.645, 218.285, 126.988, 162.72, 138.599, 100.203, 174.612],\n [90.494, 78.203, 77.998, 84.348, 109.549, 14.136, 25.917, 77.323, 59.692, 0.163, 187.854, 169.253, 206.944, 195.467, 141.054, 126.962],\n [120.19, 119.978, 112.023, 107.434, 139.361, 185.043, 195.679, 233.008, 216.025, 186.888, 0.177, 130.21, 56.019, 145.643, 128.57, 298.98],\n [226.296, 229.187, 237.024, 243.839, 266.919, 174.727, 160.066, 136.623, 124.799, 169.854, 129.131, 0.189, 81.065, 139.967, 33.24, 284.578],\n [154.691, 178.279, 170.997, 154.261, 173.776, 211.511, 197.551, 173.735, 162.834, 206.659, 56.964, 68.853, 0.215, 91.601, 69.684, 323.146],\n [289.784, 253.234, 261.752, 277.504, 292.125, 198.099, 185.709, 136.413, 138.613, 194.986, 142.484, 147.706, 91.615, 0.156, 114.518, 311.12],\n [223.926, 201.084, 210.133, 216.779, 237.762, 145.336, 132.887, 108.26, 98.057, 142.613, 122.716, 33.185, 68.547, 114.901, 0.162, 257.403],\n [205.555, 178.082, 186.533, 195.774, 216.701, 117.089, 128.001, 175.761, 176.018, 125.551, 303.904, 285.782, 323.15, 309.618, 255.904, 0.262]\n];\nexport function getRegionDelayMatrix() {\n const ret = [];\n for (let i = 0; i < regionPingMatrix.length; i++) {\n const row = [];\n for (let j = 0; j < regionPingMatrix[i].length; j++) {\n row.push(regionPingMatrix[i][j] / 2);\n }\n ret.push(row);\n }\n return ret;\n}\nexport function getRandomRegion() {\n return Math.floor(Math.random() * 15);\n}\n","import { Logger } from '@streamr/utils';\nimport { getRegionDelayMatrix } from './pings';\nimport Heap from 'heap';\nimport { debugVars } from '../../helpers/debugHelpers';\nimport { toNodeId } from '../../identifiers';\nconst logger = new Logger('Simulator');\nexport var LatencyType;\n(function (LatencyType) {\n LatencyType[\"NONE\"] = \"NONE\";\n LatencyType[\"RANDOM\"] = \"RANDOM\";\n LatencyType[\"REAL\"] = \"REAL\";\n LatencyType[\"FIXED\"] = \"FIXED\";\n})(LatencyType || (LatencyType = {}));\n// One-way 'pipe' of messages\nclass Association {\n connectedCallback;\n sourceConnection;\n destinationConnection;\n lastOperationAt = 0;\n closing = false;\n constructor(sourceConnection, destinationConnection, connectedCallback) {\n this.connectedCallback = connectedCallback;\n this.sourceConnection = sourceConnection;\n this.destinationConnection = destinationConnection;\n }\n setDestinationConnection(connection) {\n this.destinationConnection = connection;\n }\n getLastOperationAt() {\n return this.lastOperationAt;\n }\n setLastOperationAt(executionTime) {\n this.lastOperationAt = executionTime;\n }\n setClosing() {\n this.closing = true;\n }\n isClosing() {\n return this.closing;\n }\n}\nclass SimulatorOperation {\n executionTime;\n association;\n static objectCounter = 0;\n objectId = 0;\n constructor(executionTime, association) {\n this.executionTime = executionTime;\n this.association = association;\n this.objectId = SimulatorOperation.objectCounter;\n SimulatorOperation.objectCounter++;\n }\n}\nclass ConnectOperation extends SimulatorOperation {\n sourceConnection;\n targetDescriptor;\n constructor(executionTime, association, sourceConnection, targetDescriptor) {\n super(executionTime, association);\n this.sourceConnection = sourceConnection;\n this.targetDescriptor = targetDescriptor;\n }\n}\nclass SendOperation extends SimulatorOperation {\n data;\n constructor(executionTime, association, data) {\n super(executionTime, association);\n this.data = data;\n }\n}\nclass CloseOperation extends SimulatorOperation {\n}\nexport class Simulator {\n stopped = false;\n connectors = new Map();\n latencyTable;\n associations = new Map();\n latencyType;\n fixedLatency;\n loopCounter = 0;\n MAX_LOOPS = 1000;\n operationQueue = new Heap((a, b) => {\n if ((a.executionTime - b.executionTime) === 0) {\n return (a.objectId - b.objectId);\n }\n else {\n return (a.executionTime - b.executionTime);\n }\n });\n simulatorTimeout;\n constructor(latencyType = LatencyType.NONE, fixedLatency) {\n this.latencyType = latencyType;\n this.fixedLatency = fixedLatency;\n if (this.latencyType === LatencyType.REAL) {\n this.latencyTable = getRegionDelayMatrix();\n }\n if ((this.latencyType === LatencyType.FIXED) && (this.fixedLatency === undefined)) {\n throw new Error('LatencyType.FIXED requires the desired latency to be given as second parameter');\n }\n this.generateExecutionTime = this.generateExecutionTime.bind(this);\n this.getLatency = this.getLatency.bind(this);\n this.executeCloseOperation = this.executeCloseOperation.bind(this);\n this.executeConnectOperation = this.executeConnectOperation.bind(this);\n this.executeSendOperation = this.executeSendOperation.bind(this);\n this.executeQueuedOperations = this.executeQueuedOperations.bind(this);\n this.accept = this.accept.bind(this);\n this.send = this.send.bind(this);\n this.close = this.close.bind(this);\n this.scheduleNextTimeout = this.scheduleNextTimeout.bind(this);\n this.scheduleOperation = this.scheduleOperation.bind(this);\n }\n generateExecutionTime(association, sourceRegion, targetRegion) {\n let executionTime = Date.now() + this.getLatency(sourceRegion, targetRegion);\n if (association.getLastOperationAt() > executionTime) {\n executionTime = association.getLastOperationAt();\n }\n return executionTime;\n }\n getLatency(sourceRegion, targetRegion) {\n let latency = 0;\n if (this.latencyType === LatencyType.FIXED) {\n latency = this.fixedLatency;\n }\n if (this.latencyType === LatencyType.REAL) {\n if (sourceRegion === undefined || targetRegion === undefined || sourceRegion > 15 || targetRegion > 15) {\n logger.error('invalid region index given to Simulator');\n throw new Error('invalid region index given to Simulator');\n }\n latency = this.latencyTable[sourceRegion][targetRegion];\n }\n if (this.latencyType === LatencyType.RANDOM) {\n latency = Math.random() * (250 - 5) + 5;\n }\n return latency;\n }\n accept(sourceConnection, targetConnection) {\n const sourceAssociation = this.associations.get(sourceConnection.connectionId);\n if (!sourceAssociation) {\n logger.error('source association not found in accept()');\n return;\n }\n sourceAssociation.setDestinationConnection(targetConnection);\n const targetAssociation = new Association(targetConnection, sourceConnection);\n this.associations.set(targetConnection.connectionId, targetAssociation);\n sourceAssociation.connectedCallback();\n }\n addConnector(connector) {\n this.connectors.set(toNodeId(connector.getPeerDescriptor()), connector);\n }\n executeConnectOperation(operation) {\n const target = this.connectors.get(toNodeId(operation.targetDescriptor));\n if (!target) {\n logger.error('Target connector not found when executing connect operation');\n operation.association.connectedCallback('Target connector not found');\n return;\n }\n target.handleIncomingConnection(operation.sourceConnection);\n }\n executeCloseOperation(operation) {\n if (this.stopped) {\n return;\n }\n const target = operation.association.destinationConnection;\n let counterAssociation;\n if (target) {\n counterAssociation = this.associations.get(target.connectionId);\n }\n if (!target || !counterAssociation) {\n this.associations.delete(operation.association.sourceConnection.connectionId);\n }\n else if (!counterAssociation.isClosing()) {\n target.handleIncomingDisconnection();\n this.close(target);\n }\n else {\n // this is the 'ack' of the CloseOperation to the original closer\n this.associations.delete(target.connectionId);\n this.associations.delete(operation.association.sourceConnection.connectionId);\n }\n }\n executeSendOperation(operation) {\n if (this.stopped) {\n return;\n }\n const target = operation.association.destinationConnection;\n target.handleIncomingData(operation.data);\n }\n executeQueuedOperations() {\n const currentTime = Date.now();\n while (this.operationQueue.size() > 0\n && this.operationQueue.peek().executionTime <= currentTime) {\n const operation = this.operationQueue.pop();\n if (operation instanceof ConnectOperation) {\n this.executeConnectOperation(operation);\n }\n else if (operation instanceof CloseOperation) {\n this.executeCloseOperation(operation);\n }\n else if (operation instanceof SendOperation) {\n this.executeSendOperation(operation);\n }\n else {\n logger.error('Unknown SimulatorOperation');\n }\n this.loopCounter++;\n if (this.loopCounter >= this.MAX_LOOPS) {\n this.loopCounter = 0;\n setTimeout(() => this.executeQueuedOperations(), 0);\n return;\n }\n }\n this.scheduleNextTimeout();\n }\n scheduleNextTimeout() {\n if (this.simulatorTimeout) {\n clearTimeout(this.simulatorTimeout);\n this.simulatorTimeout = undefined;\n }\n const currentTime = Date.now();\n const firstOperation = this.operationQueue.peek();\n if (!firstOperation) {\n return;\n }\n const firstOperationTime = firstOperation.executionTime;\n const timeDifference = firstOperationTime - currentTime;\n this.simulatorTimeout = setTimeout(this.executeQueuedOperations, timeDifference);\n }\n scheduleOperation(operation) {\n this.operationQueue.push(operation);\n this.scheduleNextTimeout();\n }\n connect(sourceConnection, targetDescriptor, connectedCallback) {\n if (this.stopped) {\n logger.error('connect() called on a stopped simulator ' + (new Error().stack));\n return;\n }\n debugVars.simulatorHeapSize = this.operationQueue.size();\n const association = new Association(sourceConnection, undefined, connectedCallback);\n this.associations.set(sourceConnection.connectionId, association);\n const executionTime = this.generateExecutionTime(association, sourceConnection.localPeerDescriptor.region, targetDescriptor.region);\n association.setLastOperationAt(executionTime);\n const operation = new ConnectOperation(executionTime, association, sourceConnection, targetDescriptor);\n this.scheduleOperation(operation);\n }\n close(sourceConnection) {\n if (this.stopped) {\n return;\n }\n const association = this.associations.get(sourceConnection.connectionId);\n if (!association) {\n return;\n }\n association.setClosing();\n const executionTime = this.generateExecutionTime(association, sourceConnection.localPeerDescriptor.region, sourceConnection.getPeerDescriptor()?.region);\n association.setLastOperationAt(executionTime);\n const operation = new CloseOperation(executionTime, association);\n this.scheduleOperation(operation);\n }\n send(sourceConnection, data) {\n if (this.stopped) {\n return;\n }\n const association = this.associations.get(sourceConnection.connectionId);\n if (!association) {\n return;\n }\n if (association.isClosing()) {\n logger.trace('Tried to call send() on a closing association');\n return;\n }\n const executionTime = this.generateExecutionTime(association, sourceConnection.localPeerDescriptor.region, association.destinationConnection.localPeerDescriptor.region);\n association.setLastOperationAt(executionTime);\n const operation = new SendOperation(executionTime, association, data);\n this.scheduleOperation(operation);\n }\n stop() {\n this.stopped = true;\n logger.info(this.associations.size + ' associations in the beginning of stop()');\n if (this.simulatorTimeout) {\n clearTimeout(this.simulatorTimeout);\n }\n }\n}\n","import { MetricsContext } from '@streamr/utils';\nimport { ConnectionManager } from '../ConnectionManager';\nimport { SimulatorConnectorFacade } from '../ConnectorFacade';\nexport class SimulatorTransport extends ConnectionManager {\n constructor(localPeerDescriptor, simulator) {\n super({\n createConnectorFacade: () => new SimulatorConnectorFacade(localPeerDescriptor, simulator),\n metricsContext: new MetricsContext(),\n allowIncomingPrivateConnections: false\n });\n }\n}\n"],"names":["binaryToHex","hexToBinary","areEqualBinaries","randomBytes","EventEmitter","MessageType","reflectionMergePartial","UnknownFieldHandler","jsonWriteOptions","isJsonObject","typeofJsonValue","WireType","PbLong","NodeType","ServiceType","stackIntercept","ProtoCallContext","RpcCommunicator","v4","uuid","logger","Logger","Err.SendFailed","ConnectionType","toProtoRpcClient","computeMd5","Defer","MetricsContext","RateMetric","LevelMetric","CountMetric","Err.CouldNotStart","waitForEvent","Err.CannotConnectToSelf","rpcProtoClasses","applicationVersion","setAbortableTimeout","RpcError","Websocket","AUTO_CERTIFIER_SERVICE_ID","raceForEvent","Err.ConnectionFailed","Err.ConnectivityResponseTimeout","ipv4ToNumber","wait","EcdsaSecp256k1Evm","OrderedMap","Gate","withTimeout","scheduleAtInterval","LRUCache","MapWithTtl","executeSafePromise","merge","addManagedEventListener","getLocalRegionByCoordinates","getLocalRegionWithCache","until","LatencyType"],"mappings":"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"}
|