@streamr/trackerless-network 100.0.0-pretestnet.4 → 100.0.0-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +57 -0
- package/dist/package.json +11 -11
- package/dist/src/NetworkNode.d.ts +6 -5
- package/dist/src/NetworkNode.js +9 -2
- package/dist/src/NetworkNode.js.map +1 -1
- package/dist/src/NetworkStack.d.ts +13 -9
- package/dist/src/NetworkStack.js +80 -12
- package/dist/src/NetworkStack.js.map +1 -1
- package/dist/src/exports.d.ts +4 -3
- package/dist/src/exports.js +12 -1
- package/dist/src/exports.js.map +1 -1
- package/dist/src/logic/DeliveryRpcLocal.d.ts +4 -5
- package/dist/src/logic/DeliveryRpcLocal.js +6 -5
- package/dist/src/logic/DeliveryRpcLocal.js.map +1 -1
- package/dist/src/logic/DeliveryRpcRemote.d.ts +5 -4
- package/dist/src/logic/DeliveryRpcRemote.js +4 -3
- package/dist/src/logic/DeliveryRpcRemote.js.map +1 -1
- package/dist/src/logic/DuplicateMessageDetector.d.ts +3 -3
- package/dist/src/logic/DuplicateMessageDetector.js +10 -6
- package/dist/src/logic/DuplicateMessageDetector.js.map +1 -1
- package/dist/src/logic/EntryPointDiscovery.d.ts +8 -5
- package/dist/src/logic/EntryPointDiscovery.js +24 -15
- package/dist/src/logic/EntryPointDiscovery.js.map +1 -1
- package/dist/src/logic/Layer0Node.d.ts +6 -4
- package/dist/src/logic/Layer1Node.d.ts +12 -6
- package/dist/src/logic/NodeList.d.ts +13 -15
- package/dist/src/logic/NodeList.js +18 -15
- package/dist/src/logic/NodeList.js.map +1 -1
- package/dist/src/logic/RandomGraphNode.d.ts +26 -22
- package/dist/src/logic/RandomGraphNode.js +82 -52
- package/dist/src/logic/RandomGraphNode.js.map +1 -1
- package/dist/src/logic/StreamrNode.d.ts +6 -6
- package/dist/src/logic/StreamrNode.js +53 -37
- package/dist/src/logic/StreamrNode.js.map +1 -1
- package/dist/src/logic/createRandomGraphNode.d.ts +2 -2
- package/dist/src/logic/createRandomGraphNode.js +33 -21
- package/dist/src/logic/createRandomGraphNode.js.map +1 -1
- package/dist/src/logic/formStreamPartDeliveryServiceId.d.ts +2 -1
- package/dist/src/logic/formStreamPartDeliveryServiceId.js.map +1 -1
- package/dist/src/logic/inspect/InspectSession.d.ts +4 -3
- package/dist/src/logic/inspect/InspectSession.js +6 -2
- package/dist/src/logic/inspect/InspectSession.js.map +1 -1
- package/dist/src/logic/inspect/Inspector.d.ts +11 -16
- package/dist/src/logic/inspect/Inspector.js +21 -9
- package/dist/src/logic/inspect/Inspector.js.map +1 -1
- package/dist/src/logic/neighbor-discovery/HandshakeRpcLocal.d.ts +7 -9
- package/dist/src/logic/neighbor-discovery/HandshakeRpcLocal.js +55 -32
- package/dist/src/logic/neighbor-discovery/HandshakeRpcLocal.js.map +1 -1
- package/dist/src/logic/neighbor-discovery/HandshakeRpcRemote.d.ts +8 -6
- package/dist/src/logic/neighbor-discovery/HandshakeRpcRemote.js +25 -16
- package/dist/src/logic/neighbor-discovery/HandshakeRpcRemote.js.map +1 -1
- package/dist/src/logic/neighbor-discovery/Handshaker.d.ts +9 -15
- package/dist/src/logic/neighbor-discovery/Handshaker.js +68 -44
- package/dist/src/logic/neighbor-discovery/Handshaker.js.map +1 -1
- package/dist/src/logic/neighbor-discovery/NeighborFinder.d.ts +8 -10
- package/dist/src/logic/neighbor-discovery/NeighborFinder.js +12 -2
- package/dist/src/logic/neighbor-discovery/NeighborFinder.js.map +1 -1
- package/dist/src/logic/neighbor-discovery/NeighborUpdateManager.d.ts +7 -10
- package/dist/src/logic/neighbor-discovery/NeighborUpdateManager.js +11 -9
- package/dist/src/logic/neighbor-discovery/NeighborUpdateManager.js.map +1 -1
- package/dist/src/logic/neighbor-discovery/NeighborUpdateRpcLocal.d.ts +8 -4
- package/dist/src/logic/neighbor-discovery/NeighborUpdateRpcLocal.js +33 -24
- package/dist/src/logic/neighbor-discovery/NeighborUpdateRpcLocal.js.map +1 -1
- package/dist/src/logic/neighbor-discovery/NeighborUpdateRpcRemote.d.ts +5 -4
- package/dist/src/logic/neighbor-discovery/NeighborUpdateRpcRemote.js +4 -5
- package/dist/src/logic/neighbor-discovery/NeighborUpdateRpcRemote.js.map +1 -1
- package/dist/src/logic/node-info/NodeInfoClient.d.ts +9 -0
- package/dist/src/logic/node-info/NodeInfoClient.js +21 -0
- package/dist/src/logic/node-info/NodeInfoClient.js.map +1 -0
- package/dist/src/logic/node-info/NodeInfoRpcLocal.d.ts +12 -0
- package/dist/src/logic/node-info/NodeInfoRpcLocal.js +22 -0
- package/dist/src/logic/node-info/NodeInfoRpcLocal.js.map +1 -0
- package/dist/src/logic/node-info/NodeInfoRpcRemote.d.ts +6 -0
- package/dist/src/logic/node-info/NodeInfoRpcRemote.js +11 -0
- package/dist/src/logic/node-info/NodeInfoRpcRemote.js.map +1 -0
- package/dist/src/logic/propagation/FifoMapWithTTL.js +7 -3
- package/dist/src/logic/propagation/FifoMapWithTTL.js.map +1 -1
- package/dist/src/logic/propagation/Propagation.d.ts +4 -4
- package/dist/src/logic/propagation/Propagation.js +4 -0
- package/dist/src/logic/propagation/Propagation.js.map +1 -1
- package/dist/src/logic/propagation/PropagationTaskStore.d.ts +2 -2
- package/dist/src/logic/propagation/PropagationTaskStore.js +1 -0
- package/dist/src/logic/propagation/PropagationTaskStore.js.map +1 -1
- package/dist/src/logic/protocol-integration/stream-message/GroupKeyRequestTranslator.js +1 -1
- package/dist/src/logic/protocol-integration/stream-message/GroupKeyRequestTranslator.js.map +1 -1
- package/dist/src/logic/protocol-integration/stream-message/GroupKeyResponseTranslator.js +1 -1
- package/dist/src/logic/protocol-integration/stream-message/GroupKeyResponseTranslator.js.map +1 -1
- package/dist/src/logic/protocol-integration/stream-message/StreamMessageTranslator.js +87 -53
- package/dist/src/logic/protocol-integration/stream-message/StreamMessageTranslator.js.map +1 -1
- package/dist/src/logic/protocol-integration/stream-message/oldStreamMessageBinaryUtils.d.ts +7 -0
- package/dist/src/logic/protocol-integration/stream-message/oldStreamMessageBinaryUtils.js +32 -0
- package/dist/src/logic/protocol-integration/stream-message/oldStreamMessageBinaryUtils.js.map +1 -0
- package/dist/src/logic/proxy/ProxyClient.d.ts +8 -6
- package/dist/src/logic/proxy/ProxyClient.js +40 -28
- package/dist/src/logic/proxy/ProxyClient.js.map +1 -1
- package/dist/src/logic/proxy/ProxyConnectionRpcLocal.d.ts +6 -7
- package/dist/src/logic/proxy/ProxyConnectionRpcLocal.js +8 -8
- package/dist/src/logic/proxy/ProxyConnectionRpcLocal.js.map +1 -1
- package/dist/src/logic/proxy/ProxyConnectionRpcRemote.d.ts +3 -3
- package/dist/src/logic/proxy/ProxyConnectionRpcRemote.js +1 -1
- package/dist/src/logic/proxy/ProxyConnectionRpcRemote.js.map +1 -1
- package/dist/src/logic/temporary-connection/TemporaryConnectionRpcLocal.d.ts +9 -4
- package/dist/src/logic/temporary-connection/TemporaryConnectionRpcLocal.js +21 -6
- package/dist/src/logic/temporary-connection/TemporaryConnectionRpcLocal.js.map +1 -1
- package/dist/src/logic/temporary-connection/TemporaryConnectionRpcRemote.d.ts +4 -3
- package/dist/src/logic/temporary-connection/TemporaryConnectionRpcRemote.js +13 -3
- package/dist/src/logic/temporary-connection/TemporaryConnectionRpcRemote.js.map +1 -1
- package/dist/src/logic/utils.js.map +1 -1
- package/dist/src/proto/google/protobuf/any.js +8 -8
- package/dist/src/proto/google/protobuf/any.js.map +1 -1
- package/dist/src/proto/google/protobuf/empty.js +2 -4
- package/dist/src/proto/google/protobuf/empty.js.map +1 -1
- package/dist/src/proto/google/protobuf/timestamp.js +10 -10
- package/dist/src/proto/google/protobuf/timestamp.js.map +1 -1
- package/dist/src/proto/packages/dht/protos/DhtRpc.client.d.ts +36 -49
- package/dist/src/proto/packages/dht/protos/DhtRpc.client.js +54 -52
- package/dist/src/proto/packages/dht/protos/DhtRpc.client.js.map +1 -1
- package/dist/src/proto/packages/dht/protos/DhtRpc.d.ts +184 -234
- package/dist/src/proto/packages/dht/protos/DhtRpc.js +118 -168
- package/dist/src/proto/packages/dht/protos/DhtRpc.js.map +1 -1
- package/dist/src/proto/packages/dht/protos/DhtRpc.server.d.ts +20 -29
- package/dist/src/proto/packages/proto-rpc/protos/ProtoRpc.js +1 -1
- package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.client.d.ts +42 -5
- package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.client.js +52 -19
- package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.client.js.map +1 -1
- package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.d.ts +193 -28
- package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.js +129 -20
- package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.js.map +1 -1
- package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.server.d.ts +20 -3
- package/dist/test/benchmark/first-message.js +14 -15
- package/dist/test/benchmark/first-message.js.map +1 -1
- package/dist/test/utils/utils.d.ts +2 -4
- package/dist/test/utils/utils.js +20 -19
- package/dist/test/utils/utils.js.map +1 -1
- package/jest.config.js +3 -38
- package/package.json +11 -11
- package/protos/NetworkRpc.proto +57 -12
- package/src/NetworkNode.ts +13 -6
- package/src/NetworkStack.ts +94 -16
- package/src/exports.ts +11 -3
- package/src/logic/DeliveryRpcLocal.ts +7 -8
- package/src/logic/DeliveryRpcRemote.ts +7 -5
- package/src/logic/DuplicateMessageDetector.ts +7 -7
- package/src/logic/EntryPointDiscovery.ts +26 -19
- package/src/logic/Layer0Node.ts +6 -4
- package/src/logic/Layer1Node.ts +21 -6
- package/src/logic/NodeList.ts +25 -26
- package/src/logic/RandomGraphNode.ts +148 -78
- package/src/logic/StreamrNode.ts +58 -41
- package/src/logic/createRandomGraphNode.ts +37 -25
- package/src/logic/formStreamPartDeliveryServiceId.ts +2 -1
- package/src/logic/inspect/InspectSession.ts +8 -4
- package/src/logic/inspect/Inspector.ts +34 -24
- package/src/logic/neighbor-discovery/HandshakeRpcLocal.ts +72 -38
- package/src/logic/neighbor-discovery/HandshakeRpcRemote.ts +32 -20
- package/src/logic/neighbor-discovery/Handshaker.ts +90 -75
- package/src/logic/neighbor-discovery/NeighborFinder.ts +18 -13
- package/src/logic/neighbor-discovery/NeighborUpdateManager.ts +19 -20
- package/src/logic/neighbor-discovery/NeighborUpdateRpcLocal.ts +43 -33
- package/src/logic/neighbor-discovery/NeighborUpdateRpcRemote.ts +6 -6
- package/src/logic/node-info/NodeInfoClient.ts +23 -0
- package/src/logic/node-info/NodeInfoRpcLocal.ts +28 -0
- package/src/logic/node-info/NodeInfoRpcRemote.ts +11 -0
- package/src/logic/propagation/Propagation.ts +7 -6
- package/src/logic/propagation/PropagationTaskStore.ts +2 -2
- package/src/logic/protocol-integration/stream-message/GroupKeyRequestTranslator.ts +1 -1
- package/src/logic/protocol-integration/stream-message/GroupKeyResponseTranslator.ts +1 -2
- package/src/logic/protocol-integration/stream-message/StreamMessageTranslator.ts +95 -69
- package/src/logic/protocol-integration/stream-message/oldStreamMessageBinaryUtils.ts +37 -0
- package/src/logic/proxy/ProxyClient.ts +60 -40
- package/src/logic/proxy/ProxyConnectionRpcLocal.ts +15 -19
- package/src/logic/proxy/ProxyConnectionRpcRemote.ts +3 -3
- package/src/logic/temporary-connection/TemporaryConnectionRpcLocal.ts +30 -10
- package/src/logic/temporary-connection/TemporaryConnectionRpcRemote.ts +14 -4
- package/src/proto/google/protobuf/any.ts +4 -4
- package/src/proto/google/protobuf/empty.ts +2 -4
- package/src/proto/google/protobuf/timestamp.ts +4 -4
- package/src/proto/packages/dht/protos/DhtRpc.client.ts +50 -66
- package/src/proto/packages/dht/protos/DhtRpc.server.ts +21 -30
- package/src/proto/packages/dht/protos/DhtRpc.ts +242 -316
- package/src/proto/packages/proto-rpc/protos/ProtoRpc.ts +1 -1
- package/src/proto/packages/trackerless-network/protos/NetworkRpc.client.ts +49 -7
- package/src/proto/packages/trackerless-network/protos/NetworkRpc.server.ts +21 -4
- package/src/proto/packages/trackerless-network/protos/NetworkRpc.ts +251 -44
- package/test/benchmark/StreamPartIdDataKeyDistribution.test.ts +60 -0
- package/test/benchmark/first-message.ts +38 -17
- package/test/end-to-end/inspect.test.ts +16 -4
- package/test/end-to-end/proxy-and-full-node.test.ts +26 -13
- package/test/end-to-end/proxy-connections.test.ts +23 -11
- package/test/end-to-end/proxy-key-exchange.test.ts +25 -15
- package/test/end-to-end/random-graph-with-real-connections.test.ts +35 -32
- package/test/end-to-end/webrtc-full-node-network.test.ts +11 -12
- package/test/end-to-end/websocket-full-node-network.test.ts +12 -12
- package/test/integration/DeliveryRpcRemote.test.ts +6 -9
- package/test/integration/HandshakeRpcRemote.test.ts +6 -8
- package/test/integration/Handshakes.test.ts +29 -27
- package/test/integration/Inspect.test.ts +0 -2
- package/test/integration/NeighborUpdateRpcRemote.test.ts +6 -7
- package/test/integration/NetworkNode.test.ts +27 -12
- package/test/integration/NetworkRpc.test.ts +3 -5
- package/test/integration/NetworkStack.test.ts +2 -2
- package/test/integration/NodeInfoRpc.test.ts +104 -0
- package/test/integration/Propagation.test.ts +3 -3
- package/test/integration/RandomGraphNode-Layer1Node-Latencies.test.ts +24 -25
- package/test/integration/RandomGraphNode-Layer1Node.test.ts +26 -24
- package/test/integration/StreamrNode.test.ts +4 -16
- package/test/integration/joining-streams-on-offline-peers.test.ts +7 -31
- package/test/integration/stream-without-default-entrypoints.test.ts +22 -23
- package/test/integration/streamEntryPointReplacing.test.ts +94 -0
- package/test/unit/DeliveryRpcLocal.test.ts +2 -1
- package/test/unit/EntrypointDiscovery.test.ts +11 -8
- package/test/unit/GroupKeyResponseTranslator.test.ts +1 -1
- package/test/unit/HandshakeRpcLocal.test.ts +80 -28
- package/test/unit/Handshaker.test.ts +14 -9
- package/test/unit/InspectSession.test.ts +5 -6
- package/test/unit/Inspector.test.ts +3 -4
- package/test/unit/NeighborFinder.test.ts +12 -9
- package/test/unit/NeighborUpdateRpcLocal.test.ts +139 -0
- package/test/unit/NodeList.test.ts +77 -80
- package/test/unit/Propagation.test.ts +21 -16
- package/test/unit/ProxyConnectionRpcRemote.test.ts +18 -12
- package/test/unit/RandomGraphNode.test.ts +23 -20
- package/test/unit/StreamMessageTranslator.test.ts +10 -8
- package/test/unit/StreamPartIDDataKey.test.ts +12 -0
- package/test/unit/StreamrNode.test.ts +2 -0
- package/test/unit/TemporaryConnectionRpcLocal.test.ts +38 -0
- package/test/unit/oldStreamMessageBinaryUtils.test.ts +39 -0
- package/test/utils/mock/MockHandshaker.ts +6 -5
- package/test/utils/mock/MockLayer0Node.ts +7 -2
- package/test/utils/mock/MockLayer1Node.ts +5 -2
- package/test/utils/mock/MockNeighborFinder.ts +3 -2
- package/test/utils/mock/MockNeighborUpdateManager.ts +3 -2
- package/test/utils/mock/Transport.ts +1 -1
- package/test/utils/utils.ts +40 -25
- package/tsconfig.jest.json +5 -4
- package/tsconfig.node.json +2 -2
- package/dist/src/identifiers.d.ts +0 -4
- package/dist/src/identifiers.js +0 -9
- package/dist/src/identifiers.js.map +0 -1
- package/src/identifiers.ts +0 -8
- package/test/unit/GroupKeyRequestTranslator.test.ts +0 -36
|
@@ -11,23 +11,26 @@ const Propagation_1 = require("./propagation/Propagation");
|
|
|
11
11
|
const ProxyConnectionRpcLocal_1 = require("./proxy/ProxyConnectionRpcLocal");
|
|
12
12
|
const Inspector_1 = require("./inspect/Inspector");
|
|
13
13
|
const TemporaryConnectionRpcLocal_1 = require("./temporary-connection/TemporaryConnectionRpcLocal");
|
|
14
|
-
const identifiers_1 = require("../identifiers");
|
|
15
14
|
const formStreamPartDeliveryServiceId_1 = require("./formStreamPartDeliveryServiceId");
|
|
16
15
|
const createConfigWithDefaults = (config) => {
|
|
17
|
-
const ownNodeId = (0,
|
|
16
|
+
const ownNodeId = (0, dht_1.getNodeIdFromPeerDescriptor)(config.localPeerDescriptor);
|
|
18
17
|
const rpcCommunicator = config.rpcCommunicator ?? new dht_1.ListeningRpcCommunicator((0, formStreamPartDeliveryServiceId_1.formStreamPartDeliveryServiceId)(config.streamPartId), config.transport);
|
|
19
|
-
const
|
|
20
|
-
const
|
|
18
|
+
const neighborTargetCount = config.neighborTargetCount ?? 4;
|
|
19
|
+
const maxContactCount = config.maxContactCount ?? 20;
|
|
21
20
|
const minPropagationTargets = config.minPropagationTargets ?? 2;
|
|
22
21
|
const acceptProxyConnections = config.acceptProxyConnections ?? false;
|
|
23
22
|
const neighborUpdateInterval = config.neighborUpdateInterval ?? 10000;
|
|
24
|
-
const
|
|
25
|
-
const
|
|
26
|
-
const
|
|
23
|
+
const neighbors = config.neighbors ?? new NodeList_1.NodeList(ownNodeId, maxContactCount);
|
|
24
|
+
const leftNodeView = config.leftNodeView ?? new NodeList_1.NodeList(ownNodeId, maxContactCount);
|
|
25
|
+
const rightNodeView = config.rightNodeView ?? new NodeList_1.NodeList(ownNodeId, maxContactCount);
|
|
26
|
+
const nearbyNodeView = config.nearbyNodeView ?? new NodeList_1.NodeList(ownNodeId, maxContactCount);
|
|
27
|
+
const randomNodeView = config.randomNodeView ?? new NodeList_1.NodeList(ownNodeId, maxContactCount);
|
|
28
|
+
const ongoingHandshakes = new Set();
|
|
27
29
|
const temporaryConnectionRpcLocal = new TemporaryConnectionRpcLocal_1.TemporaryConnectionRpcLocal({
|
|
28
|
-
streamPartId: config.streamPartId,
|
|
29
30
|
rpcCommunicator,
|
|
30
|
-
localPeerDescriptor: config.localPeerDescriptor
|
|
31
|
+
localPeerDescriptor: config.localPeerDescriptor,
|
|
32
|
+
streamPartId: config.streamPartId,
|
|
33
|
+
connectionLocker: config.connectionLocker
|
|
31
34
|
});
|
|
32
35
|
const proxyConnectionRpcLocal = acceptProxyConnections ? new ProxyConnectionRpcLocal_1.ProxyConnectionRpcLocal({
|
|
33
36
|
localPeerDescriptor: config.localPeerDescriptor,
|
|
@@ -37,7 +40,7 @@ const createConfigWithDefaults = (config) => {
|
|
|
37
40
|
const propagation = config.propagation ?? new Propagation_1.Propagation({
|
|
38
41
|
minPropagationTargets,
|
|
39
42
|
sendToNeighbor: async (neighborId, msg) => {
|
|
40
|
-
const remote =
|
|
43
|
+
const remote = neighbors.get(neighborId) ?? temporaryConnectionRpcLocal.getNodes().get(neighborId);
|
|
41
44
|
const proxyConnection = proxyConnectionRpcLocal?.getConnection(neighborId);
|
|
42
45
|
if (remote) {
|
|
43
46
|
await remote.sendStreamMessage(msg);
|
|
@@ -53,28 +56,35 @@ const createConfigWithDefaults = (config) => {
|
|
|
53
56
|
const handshaker = config.handshaker ?? new Handshaker_1.Handshaker({
|
|
54
57
|
localPeerDescriptor: config.localPeerDescriptor,
|
|
55
58
|
streamPartId: config.streamPartId,
|
|
56
|
-
connectionLocker: config.connectionLocker,
|
|
57
59
|
rpcCommunicator,
|
|
60
|
+
neighbors,
|
|
61
|
+
leftNodeView,
|
|
62
|
+
rightNodeView,
|
|
58
63
|
nearbyNodeView,
|
|
59
64
|
randomNodeView,
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
65
|
+
maxNeighborCount: neighborTargetCount,
|
|
66
|
+
rpcRequestTimeout: config.rpcRequestTimeout,
|
|
67
|
+
ongoingHandshakes
|
|
63
68
|
});
|
|
64
69
|
const neighborFinder = config.neighborFinder ?? new NeighborFinder_1.NeighborFinder({
|
|
65
|
-
|
|
70
|
+
neighbors,
|
|
71
|
+
leftNodeView,
|
|
72
|
+
rightNodeView,
|
|
66
73
|
nearbyNodeView,
|
|
74
|
+
randomNodeView,
|
|
67
75
|
doFindNeighbors: (excludedIds) => handshaker.attemptHandshakesOnContacts(excludedIds),
|
|
68
|
-
minCount:
|
|
76
|
+
minCount: neighborTargetCount
|
|
69
77
|
});
|
|
70
78
|
const neighborUpdateManager = config.neighborUpdateManager ?? new NeighborUpdateManager_1.NeighborUpdateManager({
|
|
71
|
-
|
|
79
|
+
neighbors,
|
|
72
80
|
nearbyNodeView,
|
|
73
81
|
localPeerDescriptor: config.localPeerDescriptor,
|
|
74
82
|
neighborFinder,
|
|
75
83
|
streamPartId: config.streamPartId,
|
|
76
84
|
rpcCommunicator,
|
|
77
|
-
neighborUpdateInterval
|
|
85
|
+
neighborUpdateInterval,
|
|
86
|
+
neighborTargetCount,
|
|
87
|
+
ongoingHandshakes
|
|
78
88
|
});
|
|
79
89
|
const inspector = config.inspector ?? new Inspector_1.Inspector({
|
|
80
90
|
localPeerDescriptor: config.localPeerDescriptor,
|
|
@@ -84,16 +94,18 @@ const createConfigWithDefaults = (config) => {
|
|
|
84
94
|
});
|
|
85
95
|
return {
|
|
86
96
|
...config,
|
|
97
|
+
neighbors,
|
|
98
|
+
leftNodeView,
|
|
99
|
+
rightNodeView,
|
|
87
100
|
nearbyNodeView,
|
|
88
101
|
randomNodeView,
|
|
89
|
-
targetNeighbors,
|
|
90
102
|
rpcCommunicator,
|
|
91
103
|
handshaker,
|
|
92
104
|
neighborFinder,
|
|
93
105
|
neighborUpdateManager,
|
|
94
106
|
propagation,
|
|
95
|
-
|
|
96
|
-
nodeViewSize:
|
|
107
|
+
neighborTargetCount,
|
|
108
|
+
nodeViewSize: maxContactCount,
|
|
97
109
|
proxyConnectionRpcLocal,
|
|
98
110
|
inspector,
|
|
99
111
|
temporaryConnectionRpcLocal
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createRandomGraphNode.js","sourceRoot":"","sources":["../../../src/logic/createRandomGraphNode.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"createRandomGraphNode.js","sourceRoot":"","sources":["../../../src/logic/createRandomGraphNode.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,3 @@
|
|
|
1
|
+
import { ServiceID } from '@streamr/dht';
|
|
1
2
|
import { StreamPartID } from '@streamr/protocol';
|
|
2
|
-
export declare const formStreamPartDeliveryServiceId: (streamPartId: StreamPartID) =>
|
|
3
|
+
export declare const formStreamPartDeliveryServiceId: (streamPartId: StreamPartID) => ServiceID;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formStreamPartDeliveryServiceId.js","sourceRoot":"","sources":["../../../src/logic/formStreamPartDeliveryServiceId.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"formStreamPartDeliveryServiceId.js","sourceRoot":"","sources":["../../../src/logic/formStreamPartDeliveryServiceId.ts"],"names":[],"mappings":";;;AAGO,MAAM,+BAA+B,GAAG,CAAC,YAA0B,EAAa,EAAE;IACrF,OAAO,wBAAwB,YAAY,EAAE,CAAA;AACjD,CAAC,CAAA;AAFY,QAAA,+BAA+B,mCAE3C"}
|
|
@@ -1,18 +1,19 @@
|
|
|
1
1
|
import { EventEmitter } from 'eventemitter3';
|
|
2
|
-
import { NodeID } from '../../identifiers';
|
|
3
2
|
import { MessageID } from '../../proto/packages/trackerless-network/protos/NetworkRpc';
|
|
3
|
+
import { DhtAddress } from '@streamr/dht';
|
|
4
4
|
export interface Events {
|
|
5
5
|
done: () => void;
|
|
6
6
|
}
|
|
7
7
|
interface InspectSessionConfig {
|
|
8
|
-
inspectedNode:
|
|
8
|
+
inspectedNode: DhtAddress;
|
|
9
9
|
}
|
|
10
10
|
export declare class InspectSession extends EventEmitter<Events> {
|
|
11
11
|
private readonly inspectionMessages;
|
|
12
12
|
private readonly inspectedNode;
|
|
13
13
|
constructor(config: InspectSessionConfig);
|
|
14
|
-
markMessage(senderId:
|
|
14
|
+
markMessage(senderId: DhtAddress, messageId: MessageID): void;
|
|
15
15
|
getInspectedMessageCount(): number;
|
|
16
|
+
onlyMarkedByInspectedNode(): boolean;
|
|
16
17
|
stop(): void;
|
|
17
18
|
}
|
|
18
19
|
export {};
|
|
@@ -7,10 +7,11 @@ const createMessageKey = (messageId) => {
|
|
|
7
7
|
return `${(0, utils_1.binaryToHex)(messageId.publisherId)}:${messageId.messageChainId}:${messageId.timestamp}:${messageId.sequenceNumber}`;
|
|
8
8
|
};
|
|
9
9
|
class InspectSession extends eventemitter3_1.EventEmitter {
|
|
10
|
+
// Boolean indicates if the message has been received by the inspected node
|
|
11
|
+
inspectionMessages = new Map();
|
|
12
|
+
inspectedNode;
|
|
10
13
|
constructor(config) {
|
|
11
14
|
super();
|
|
12
|
-
// Boolean indicates if the message has been received by the inspected node
|
|
13
|
-
this.inspectionMessages = new Map();
|
|
14
15
|
this.inspectedNode = config.inspectedNode;
|
|
15
16
|
}
|
|
16
17
|
markMessage(senderId, messageId) {
|
|
@@ -31,6 +32,9 @@ class InspectSession extends eventemitter3_1.EventEmitter {
|
|
|
31
32
|
getInspectedMessageCount() {
|
|
32
33
|
return this.inspectionMessages.size;
|
|
33
34
|
}
|
|
35
|
+
onlyMarkedByInspectedNode() {
|
|
36
|
+
return Array.from(this.inspectionMessages.values()).every((value) => value === true);
|
|
37
|
+
}
|
|
34
38
|
stop() {
|
|
35
39
|
this.emit('done');
|
|
36
40
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InspectSession.js","sourceRoot":"","sources":["../../../../src/logic/inspect/InspectSession.ts"],"names":[],"mappings":";;;AAAA,iDAA4C;
|
|
1
|
+
{"version":3,"file":"InspectSession.js","sourceRoot":"","sources":["../../../../src/logic/inspect/InspectSession.ts"],"names":[],"mappings":";;;AAAA,iDAA4C;AAE5C,0CAA4C;AAW5C,MAAM,gBAAgB,GAAG,CAAC,SAAoB,EAAU,EAAE;IACtD,OAAO,GAAG,IAAA,mBAAW,EAAC,SAAS,CAAC,WAAW,CAAC,IAAI,SAAS,CAAC,cAAc,IAAI,SAAS,CAAC,SAAS,IAAI,SAAS,CAAC,cAAc,EAAE,CAAA;AACjI,CAAC,CAAA;AACD,MAAa,cAAe,SAAQ,4BAAoB;IAEpD,2EAA2E;IAC1D,kBAAkB,GAAyB,IAAI,GAAG,EAAE,CAAA;IACpD,aAAa,CAAY;IAE1C,YAAY,MAA4B;QACpC,KAAK,EAAE,CAAA;QACP,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAA;IAC7C,CAAC;IAED,WAAW,CAAC,QAAoB,EAAE,SAAoB;QAClD,MAAM,UAAU,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAA;QAC9C,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;YAC3C,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,KAAK,IAAI,CAAC,aAAa,CAAC,CAAA;QAC5E,CAAC;aAAM,IAAI,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAC;eAC3C,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,KAAK;eACjD,QAAQ,KAAK,IAAI,CAAC,aAAa,EACpC,CAAC;YACC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QACrB,CAAC;aAAM,IAAI,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAC;eAC3C,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,IAAI,EAAE,CAAC;YACtD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QACrB,CAAC;IACL,CAAC;IAED,wBAAwB;QACpB,OAAO,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAA;IACvC,CAAC;IAED,yBAAyB;QACrB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,CAAA;IACxF,CAAC;IAED,IAAI;QACA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACrB,CAAC;CACJ;AArCD,wCAqCC"}
|
|
@@ -1,35 +1,30 @@
|
|
|
1
|
-
import { PeerDescriptor, ConnectionLocker } from '@streamr/dht';
|
|
1
|
+
import { PeerDescriptor, ConnectionLocker, LockID, DhtAddress, ListeningRpcCommunicator } from '@streamr/dht';
|
|
2
2
|
import { MessageID } from '../../proto/packages/trackerless-network/protos/NetworkRpc';
|
|
3
|
-
import { RpcCommunicator } from '@streamr/proto-rpc';
|
|
4
|
-
import { NodeID } from '../../identifiers';
|
|
5
3
|
import { StreamPartID } from '@streamr/protocol';
|
|
6
4
|
interface InspectorConfig {
|
|
7
5
|
localPeerDescriptor: PeerDescriptor;
|
|
8
6
|
streamPartId: StreamPartID;
|
|
9
|
-
rpcCommunicator:
|
|
7
|
+
rpcCommunicator: ListeningRpcCommunicator;
|
|
10
8
|
connectionLocker: ConnectionLocker;
|
|
11
9
|
inspectionTimeout?: number;
|
|
12
|
-
openInspectConnection?: (peerDescriptor: PeerDescriptor, lockId:
|
|
10
|
+
openInspectConnection?: (peerDescriptor: PeerDescriptor, lockId: LockID) => Promise<void>;
|
|
11
|
+
closeInspectConnection?: (peerDescriptor: PeerDescriptor, lockId: LockID) => Promise<void>;
|
|
13
12
|
}
|
|
14
|
-
export
|
|
15
|
-
inspect(peerDescriptor: PeerDescriptor): Promise<boolean>;
|
|
16
|
-
markMessage(sender: NodeID, messageId: MessageID): void;
|
|
17
|
-
isInspected(nodeId: NodeID): boolean;
|
|
18
|
-
stop(): void;
|
|
19
|
-
}
|
|
20
|
-
export declare class Inspector implements IInspector {
|
|
13
|
+
export declare class Inspector {
|
|
21
14
|
private readonly sessions;
|
|
22
15
|
private readonly streamPartId;
|
|
23
|
-
private readonly client;
|
|
24
16
|
private readonly localPeerDescriptor;
|
|
17
|
+
private readonly rpcCommunicator;
|
|
25
18
|
private readonly connectionLocker;
|
|
26
19
|
private readonly inspectionTimeout;
|
|
27
20
|
private readonly openInspectConnection;
|
|
21
|
+
private readonly closeInspectConnection;
|
|
28
22
|
constructor(config: InspectorConfig);
|
|
29
|
-
defaultOpenInspectConnection(peerDescriptor: PeerDescriptor, lockId:
|
|
23
|
+
defaultOpenInspectConnection(peerDescriptor: PeerDescriptor, lockId: LockID): Promise<void>;
|
|
24
|
+
defaultCloseInspectConnection(peerDescriptor: PeerDescriptor, lockId: LockID): Promise<void>;
|
|
30
25
|
inspect(peerDescriptor: PeerDescriptor): Promise<boolean>;
|
|
31
|
-
markMessage(sender:
|
|
32
|
-
isInspected(nodeId:
|
|
26
|
+
markMessage(sender: DhtAddress, messageId: MessageID): void;
|
|
27
|
+
isInspected(nodeId: DhtAddress): boolean;
|
|
33
28
|
stop(): void;
|
|
34
29
|
}
|
|
35
30
|
export {};
|
|
@@ -1,31 +1,43 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.Inspector = void 0;
|
|
4
|
+
const dht_1 = require("@streamr/dht");
|
|
4
5
|
const InspectSession_1 = require("./InspectSession");
|
|
5
6
|
const NetworkRpc_client_1 = require("../../proto/packages/trackerless-network/protos/NetworkRpc.client");
|
|
6
|
-
const proto_rpc_1 = require("@streamr/proto-rpc");
|
|
7
7
|
const utils_1 = require("@streamr/utils");
|
|
8
8
|
const TemporaryConnectionRpcRemote_1 = require("../temporary-connection/TemporaryConnectionRpcRemote");
|
|
9
|
-
const identifiers_1 = require("../../identifiers");
|
|
10
9
|
const logger = new utils_1.Logger(module);
|
|
11
10
|
const DEFAULT_TIMEOUT = 60 * 1000;
|
|
12
11
|
class Inspector {
|
|
12
|
+
sessions = new Map();
|
|
13
|
+
streamPartId;
|
|
14
|
+
localPeerDescriptor;
|
|
15
|
+
rpcCommunicator;
|
|
16
|
+
connectionLocker;
|
|
17
|
+
inspectionTimeout;
|
|
18
|
+
openInspectConnection;
|
|
19
|
+
closeInspectConnection;
|
|
13
20
|
constructor(config) {
|
|
14
|
-
this.sessions = new Map();
|
|
15
21
|
this.streamPartId = config.streamPartId;
|
|
16
22
|
this.localPeerDescriptor = config.localPeerDescriptor;
|
|
17
|
-
this.
|
|
23
|
+
this.rpcCommunicator = config.rpcCommunicator;
|
|
18
24
|
this.connectionLocker = config.connectionLocker;
|
|
19
25
|
this.inspectionTimeout = config.inspectionTimeout ?? DEFAULT_TIMEOUT;
|
|
20
26
|
this.openInspectConnection = config.openInspectConnection ?? this.defaultOpenInspectConnection;
|
|
27
|
+
this.closeInspectConnection = config.closeInspectConnection ?? this.defaultCloseInspectConnection;
|
|
21
28
|
}
|
|
22
29
|
async defaultOpenInspectConnection(peerDescriptor, lockId) {
|
|
23
|
-
const rpcRemote = new TemporaryConnectionRpcRemote_1.TemporaryConnectionRpcRemote(this.localPeerDescriptor, peerDescriptor, this.
|
|
30
|
+
const rpcRemote = new TemporaryConnectionRpcRemote_1.TemporaryConnectionRpcRemote(this.localPeerDescriptor, peerDescriptor, this.rpcCommunicator, NetworkRpc_client_1.TemporaryConnectionRpcClient);
|
|
24
31
|
await rpcRemote.openConnection();
|
|
25
|
-
this.connectionLocker.
|
|
32
|
+
this.connectionLocker.weakLockConnection((0, dht_1.getNodeIdFromPeerDescriptor)(peerDescriptor), lockId);
|
|
33
|
+
}
|
|
34
|
+
async defaultCloseInspectConnection(peerDescriptor, lockId) {
|
|
35
|
+
const rpcRemote = new TemporaryConnectionRpcRemote_1.TemporaryConnectionRpcRemote(this.localPeerDescriptor, peerDescriptor, this.rpcCommunicator, NetworkRpc_client_1.TemporaryConnectionRpcClient);
|
|
36
|
+
await rpcRemote.closeConnection();
|
|
37
|
+
this.connectionLocker.weakUnlockConnection((0, dht_1.getNodeIdFromPeerDescriptor)(peerDescriptor), lockId);
|
|
26
38
|
}
|
|
27
39
|
async inspect(peerDescriptor) {
|
|
28
|
-
const nodeId = (0,
|
|
40
|
+
const nodeId = (0, dht_1.getNodeIdFromPeerDescriptor)(peerDescriptor);
|
|
29
41
|
const session = new InspectSession_1.InspectSession({
|
|
30
42
|
inspectedNode: nodeId
|
|
31
43
|
});
|
|
@@ -41,10 +53,10 @@ class Inspector {
|
|
|
41
53
|
logger.trace('Inspect session timed out, removing');
|
|
42
54
|
}
|
|
43
55
|
finally {
|
|
56
|
+
await this.closeInspectConnection(peerDescriptor, lockId);
|
|
44
57
|
this.sessions.delete(nodeId);
|
|
45
|
-
this.connectionLocker.unlockConnection(peerDescriptor, lockId);
|
|
46
58
|
}
|
|
47
|
-
return success || session.getInspectedMessageCount() < 1;
|
|
59
|
+
return success || session.getInspectedMessageCount() < 1 || session.onlyMarkedByInspectedNode();
|
|
48
60
|
}
|
|
49
61
|
markMessage(sender, messageId) {
|
|
50
62
|
this.sessions.forEach((session) => session.markMessage(sender, messageId));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Inspector.js","sourceRoot":"","sources":["../../../../src/logic/inspect/Inspector.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"Inspector.js","sourceRoot":"","sources":["../../../../src/logic/inspect/Inspector.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,22 +1,20 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { InterleaveNotice, StreamPartHandshakeRequest, StreamPartHandshakeResponse } from '../../proto/packages/trackerless-network/protos/NetworkRpc';
|
|
1
|
+
import { InterleaveRequest, InterleaveResponse, StreamPartHandshakeRequest, StreamPartHandshakeResponse } from '../../proto/packages/trackerless-network/protos/NetworkRpc';
|
|
3
2
|
import { ServerCallContext } from '@protobuf-ts/runtime-rpc';
|
|
4
3
|
import { NodeList } from '../NodeList';
|
|
5
|
-
import {
|
|
4
|
+
import { DhtAddress, PeerDescriptor } from '@streamr/dht';
|
|
6
5
|
import { IHandshakeRpc } from '../../proto/packages/trackerless-network/protos/NetworkRpc.server';
|
|
7
6
|
import { HandshakeRpcRemote } from './HandshakeRpcRemote';
|
|
8
7
|
import { DeliveryRpcRemote } from '../DeliveryRpcRemote';
|
|
9
|
-
import { NodeID } from '../../identifiers';
|
|
10
8
|
import { StreamPartID } from '@streamr/protocol';
|
|
11
9
|
interface HandshakeRpcLocalConfig {
|
|
12
10
|
streamPartId: StreamPartID;
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
11
|
+
neighbors: NodeList;
|
|
12
|
+
ongoingHandshakes: Set<DhtAddress>;
|
|
13
|
+
ongoingInterleaves: Set<DhtAddress>;
|
|
16
14
|
maxNeighborCount: number;
|
|
17
15
|
createRpcRemote: (target: PeerDescriptor) => HandshakeRpcRemote;
|
|
18
16
|
createDeliveryRpcRemote: (peerDescriptor: PeerDescriptor) => DeliveryRpcRemote;
|
|
19
|
-
handshakeWithInterleaving: (target: PeerDescriptor, senderId:
|
|
17
|
+
handshakeWithInterleaving: (target: PeerDescriptor, senderId: DhtAddress) => Promise<boolean>;
|
|
20
18
|
}
|
|
21
19
|
export declare class HandshakeRpcLocal implements IHandshakeRpc {
|
|
22
20
|
private readonly config;
|
|
@@ -26,6 +24,6 @@ export declare class HandshakeRpcLocal implements IHandshakeRpc {
|
|
|
26
24
|
private acceptHandshake;
|
|
27
25
|
private rejectHandshake;
|
|
28
26
|
private acceptHandshakeWithInterleaving;
|
|
29
|
-
|
|
27
|
+
interleaveRequest(message: InterleaveRequest, context: ServerCallContext): Promise<InterleaveResponse>;
|
|
30
28
|
}
|
|
31
29
|
export {};
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.HandshakeRpcLocal = void 0;
|
|
4
|
-
const
|
|
5
|
-
const identifiers_1 = require("../../identifiers");
|
|
4
|
+
const dht_1 = require("@streamr/dht");
|
|
6
5
|
const utils_1 = require("@streamr/utils");
|
|
6
|
+
const logger = new utils_1.Logger(module);
|
|
7
7
|
class HandshakeRpcLocal {
|
|
8
|
+
config;
|
|
8
9
|
constructor(config) {
|
|
9
10
|
this.config = config;
|
|
10
11
|
}
|
|
@@ -13,15 +14,22 @@ class HandshakeRpcLocal {
|
|
|
13
14
|
}
|
|
14
15
|
handleRequest(request, context) {
|
|
15
16
|
const senderDescriptor = context.incomingSourceDescriptor;
|
|
16
|
-
const getInterleaveSourceIds = () => (request.interleaveSourceId !== undefined) ? [(0,
|
|
17
|
-
|
|
18
|
-
|
|
17
|
+
const getInterleaveSourceIds = () => (request.interleaveSourceId !== undefined) ? [(0, dht_1.getDhtAddressFromRaw)(request.interleaveSourceId)] : [];
|
|
18
|
+
const senderNodeId = (0, dht_1.getNodeIdFromPeerDescriptor)(senderDescriptor);
|
|
19
|
+
if (this.config.ongoingInterleaves.has(senderNodeId)) {
|
|
20
|
+
return this.rejectHandshake(request);
|
|
21
|
+
}
|
|
22
|
+
else if (this.config.neighbors.has(senderNodeId)
|
|
23
|
+
|| this.config.ongoingHandshakes.has(senderNodeId)) {
|
|
19
24
|
return this.acceptHandshake(request, senderDescriptor);
|
|
20
25
|
}
|
|
21
|
-
else if (this.config.
|
|
26
|
+
else if (this.config.neighbors.size() + this.config.ongoingHandshakes.size < this.config.maxNeighborCount) {
|
|
22
27
|
return this.acceptHandshake(request, senderDescriptor);
|
|
23
28
|
}
|
|
24
|
-
else if (this.config.
|
|
29
|
+
else if (this.config.neighbors.size(getInterleaveSourceIds()) - this.config.ongoingInterleaves.size >= 2
|
|
30
|
+
&& this.config.neighbors.size() <= this.config.maxNeighborCount) {
|
|
31
|
+
// Do not accept the handshakes requests if the target neighbor count can potentially drop below 2
|
|
32
|
+
// due to interleaving. This ensures that a stable number of connections is kept during high churn.
|
|
25
33
|
return this.acceptHandshakeWithInterleaving(request, senderDescriptor);
|
|
26
34
|
}
|
|
27
35
|
else {
|
|
@@ -33,8 +41,7 @@ class HandshakeRpcLocal {
|
|
|
33
41
|
requestId: request.requestId,
|
|
34
42
|
accepted: true
|
|
35
43
|
};
|
|
36
|
-
this.config.
|
|
37
|
-
this.config.connectionLocker.lockConnection(requester, this.config.streamPartId);
|
|
44
|
+
this.config.neighbors.add(this.config.createDeliveryRpcRemote(requester));
|
|
38
45
|
return res;
|
|
39
46
|
}
|
|
40
47
|
// eslint-disable-next-line class-methods-use-this
|
|
@@ -46,38 +53,54 @@ class HandshakeRpcLocal {
|
|
|
46
53
|
return res;
|
|
47
54
|
}
|
|
48
55
|
acceptHandshakeWithInterleaving(request, requester) {
|
|
49
|
-
const exclude =
|
|
50
|
-
exclude.push((0,
|
|
56
|
+
const exclude = [];
|
|
57
|
+
request.neighborIds.forEach((id) => exclude.push((0, dht_1.getDhtAddressFromRaw)(id)));
|
|
58
|
+
this.config.ongoingInterleaves.forEach((id) => exclude.push(id));
|
|
59
|
+
exclude.push((0, dht_1.getNodeIdFromPeerDescriptor)(requester));
|
|
51
60
|
if (request.interleaveSourceId !== undefined) {
|
|
52
|
-
exclude.push((0,
|
|
61
|
+
exclude.push((0, dht_1.getDhtAddressFromRaw)(request.interleaveSourceId));
|
|
53
62
|
}
|
|
54
|
-
const
|
|
55
|
-
const
|
|
56
|
-
if (
|
|
57
|
-
const
|
|
58
|
-
remote.
|
|
59
|
-
this.config.
|
|
60
|
-
this
|
|
63
|
+
const last = this.config.neighbors.getLast(exclude);
|
|
64
|
+
const lastPeerDescriptor = last ? last.getPeerDescriptor() : undefined;
|
|
65
|
+
if (last) {
|
|
66
|
+
const nodeId = (0, dht_1.getNodeIdFromPeerDescriptor)(last.getPeerDescriptor());
|
|
67
|
+
const remote = this.config.createRpcRemote(last.getPeerDescriptor());
|
|
68
|
+
this.config.ongoingInterleaves.add(nodeId);
|
|
69
|
+
// Run this with then catch instead of setImmediate to avoid changes in state
|
|
70
|
+
// eslint-disable-next-line promise/catch-or-return
|
|
71
|
+
remote.interleaveRequest(requester).then((response) => {
|
|
72
|
+
// If response is accepted, remove the last node from the target neighbors
|
|
73
|
+
// and unlock the connection
|
|
74
|
+
// If response is not accepted, keep the last node as a neighbor
|
|
75
|
+
if (response.accepted) {
|
|
76
|
+
this.config.neighbors.remove((0, dht_1.getNodeIdFromPeerDescriptor)(lastPeerDescriptor));
|
|
77
|
+
}
|
|
78
|
+
return;
|
|
79
|
+
}).catch(() => {
|
|
80
|
+
// no-op: InterleaveRequest cannot reject
|
|
81
|
+
}).finally(() => {
|
|
82
|
+
this.config.ongoingInterleaves.delete(nodeId);
|
|
83
|
+
});
|
|
61
84
|
}
|
|
62
|
-
this.config.
|
|
63
|
-
this.config.connectionLocker.lockConnection(requester, this.config.streamPartId);
|
|
85
|
+
this.config.neighbors.add(this.config.createDeliveryRpcRemote(requester));
|
|
64
86
|
return {
|
|
65
87
|
requestId: request.requestId,
|
|
66
88
|
accepted: true,
|
|
67
|
-
interleaveTargetDescriptor:
|
|
89
|
+
interleaveTargetDescriptor: lastPeerDescriptor
|
|
68
90
|
};
|
|
69
91
|
}
|
|
70
|
-
async
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
92
|
+
async interleaveRequest(message, context) {
|
|
93
|
+
const senderPeerDescriptor = context.incomingSourceDescriptor;
|
|
94
|
+
const senderId = (0, dht_1.getNodeIdFromPeerDescriptor)(senderPeerDescriptor);
|
|
95
|
+
try {
|
|
96
|
+
await this.config.handshakeWithInterleaving(message.interleaveTargetDescriptor, senderId);
|
|
97
|
+
this.config.neighbors.remove(senderId);
|
|
98
|
+
return { accepted: true };
|
|
99
|
+
}
|
|
100
|
+
catch (err) {
|
|
101
|
+
logger.debug(`interleaveRequest to ${(0, dht_1.getNodeIdFromPeerDescriptor)(message.interleaveTargetDescriptor)} failed: ${err}`);
|
|
102
|
+
return { accepted: false };
|
|
79
103
|
}
|
|
80
|
-
return empty_1.Empty;
|
|
81
104
|
}
|
|
82
105
|
}
|
|
83
106
|
exports.HandshakeRpcLocal = HandshakeRpcLocal;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HandshakeRpcLocal.js","sourceRoot":"","sources":["../../../../src/logic/neighbor-discovery/HandshakeRpcLocal.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"HandshakeRpcLocal.js","sourceRoot":"","sources":["../../../../src/logic/neighbor-discovery/HandshakeRpcLocal.ts"],"names":[],"mappings":";;;AAQA,sCAOqB;AAIrB,0CAAuC;AAcvC,MAAM,MAAM,GAAG,IAAI,cAAM,CAAC,MAAM,CAAC,CAAA;AAEjC,MAAa,iBAAiB;IAET,MAAM,CAAyB;IAEhD,YAAY,MAA+B;QACvC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACxB,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,OAAmC,EAAE,OAA0B;QAC3E,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;IAC/C,CAAC;IAEO,aAAa,CAAC,OAAmC,EAAE,OAA0B;QACjF,MAAM,gBAAgB,GAAI,OAA0B,CAAC,wBAAyB,CAAA;QAC9E,MAAM,sBAAsB,GAAG,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,kBAAkB,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAA,0BAAoB,EAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QACzI,MAAM,YAAY,GAAG,IAAA,iCAA2B,EAAC,gBAAgB,CAAC,CAAA;QAClE,IAAI,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;YACnD,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAA;QACxC,CAAC;aAAM,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC;eAC3C,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,GAAG,CAAC,YAAY,CAAC,EACpD,CAAC;YACC,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAA;QAC1D,CAAC;aAAM,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;YAC1G,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAA;QAC1D,CAAC;aAAM,IACH,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,IAAI,IAAI,CAAC;eAC5F,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,gBAAgB,EACjE,CAAC;YACC,mGAAmG;YACnG,mGAAmG;YACnG,OAAO,IAAI,CAAC,+BAA+B,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAA;QAC1E,CAAC;aAAM,CAAC;YACJ,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAA;QACxC,CAAC;IACL,CAAC;IAEO,eAAe,CAAC,OAAmC,EAAE,SAAyB;QAClF,MAAM,GAAG,GAAgC;YACrC,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,QAAQ,EAAE,IAAI;SACjB,CAAA;QACD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC,CAAA;QACzE,OAAO,GAAG,CAAA;IACd,CAAC;IAED,kDAAkD;IAC1C,eAAe,CAAC,OAAmC;QACvD,MAAM,GAAG,GAAgC;YACrC,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,QAAQ,EAAE,KAAK;SAClB,CAAA;QACD,OAAO,GAAG,CAAA;IACd,CAAC;IAEO,+BAA+B,CAAC,OAAmC,EAAE,SAAyB;QAClG,MAAM,OAAO,GAAiB,EAAE,CAAA;QAChC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,EAAiB,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAA,0BAAoB,EAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAC1F,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;QAChE,OAAO,CAAC,IAAI,CAAC,IAAA,iCAA2B,EAAC,SAAS,CAAC,CAAC,CAAA;QACpD,IAAI,OAAO,CAAC,kBAAkB,KAAK,SAAS,EAAE,CAAC;YAC3C,OAAO,CAAC,IAAI,CAAC,IAAA,0BAAoB,EAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAA;QAClE,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;QACnD,MAAM,kBAAkB,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,SAAS,CAAA;QACtE,IAAI,IAAI,EAAE,CAAC;YACP,MAAM,MAAM,GAAG,IAAA,iCAA2B,EAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAA;YACpE,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAA;YACpE,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;YAC1C,6EAA6E;YAC7E,mDAAmD;YACnD,MAAM,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE;gBAClD,0EAA0E;gBAC1E,4BAA4B;gBAC5B,gEAAgE;gBAChE,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;oBACpB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAA,iCAA2B,EAAC,kBAAmB,CAAC,CAAC,CAAA;gBAClF,CAAC;gBACD,OAAM;YACV,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;gBACV,yCAAyC;YAC7C,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE;gBACZ,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;YACjD,CAAC,CAAC,CAAA;QACN,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC,CAAA;QACzE,OAAO;YACH,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,QAAQ,EAAE,IAAI;YACd,0BAA0B,EAAE,kBAAkB;SACjD,CAAA;IACL,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,OAA0B,EAAE,OAA0B;QAC1E,MAAM,oBAAoB,GAAI,OAA0B,CAAC,wBAAyB,CAAA;QAClF,MAAM,QAAQ,GAAG,IAAA,iCAA2B,EAAC,oBAAoB,CAAC,CAAA;QAClE,IAAI,CAAC;YACD,MAAM,IAAI,CAAC,MAAM,CAAC,yBAAyB,CAAC,OAAO,CAAC,0BAA2B,EAAE,QAAQ,CAAC,CAAA;YAC1F,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;YACtC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAA;QAC7B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,MAAM,CAAC,KAAK,CAAC,wBAAwB,IAAA,iCAA2B,EAAC,OAAO,CAAC,0BAA2B,CAAC,YAAY,GAAG,EAAE,CAAC,CAAA;YACvH,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAA;QAC9B,CAAC;IACL,CAAC;CACJ;AAxGD,8CAwGC"}
|
|
@@ -1,12 +1,14 @@
|
|
|
1
|
-
import { PeerDescriptor,
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { DhtAddress, PeerDescriptor, RpcRemote } from '@streamr/dht';
|
|
2
|
+
import { InterleaveResponse } from '../../proto/packages/trackerless-network/protos/NetworkRpc';
|
|
3
|
+
import { HandshakeRpcClient } from '../../proto/packages/trackerless-network/protos/NetworkRpc.client';
|
|
4
|
+
import { StreamPartID } from '@streamr/protocol';
|
|
4
5
|
interface HandshakeResponse {
|
|
5
6
|
accepted: boolean;
|
|
6
7
|
interleaveTargetDescriptor?: PeerDescriptor;
|
|
7
8
|
}
|
|
8
|
-
export declare
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
export declare const INTERLEAVE_REQUEST_TIMEOUT = 15000;
|
|
10
|
+
export declare class HandshakeRpcRemote extends RpcRemote<HandshakeRpcClient> {
|
|
11
|
+
handshake(streamPartId: StreamPartID, neighborIds: DhtAddress[], concurrentHandshakeTargetId?: DhtAddress, interleaveSourceId?: DhtAddress): Promise<HandshakeResponse>;
|
|
12
|
+
interleaveRequest(originatorDescriptor: PeerDescriptor): Promise<InterleaveResponse>;
|
|
11
13
|
}
|
|
12
14
|
export {};
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.HandshakeRpcRemote = void 0;
|
|
3
|
+
exports.HandshakeRpcRemote = exports.INTERLEAVE_REQUEST_TIMEOUT = void 0;
|
|
4
4
|
const dht_1 = require("@streamr/dht");
|
|
5
5
|
const utils_1 = require("@streamr/utils");
|
|
6
6
|
const uuid_1 = require("uuid");
|
|
7
|
-
const identifiers_1 = require("../../identifiers");
|
|
8
7
|
const logger = new utils_1.Logger(module);
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
exports.INTERLEAVE_REQUEST_TIMEOUT = 15000;
|
|
9
|
+
class HandshakeRpcRemote extends dht_1.RpcRemote {
|
|
10
|
+
async handshake(streamPartId, neighborIds, concurrentHandshakeTargetId, interleaveSourceId) {
|
|
11
11
|
const request = {
|
|
12
|
-
streamPartId
|
|
12
|
+
streamPartId,
|
|
13
13
|
requestId: (0, uuid_1.v4)(),
|
|
14
|
-
neighborIds: neighborIds.map((id) => (0,
|
|
15
|
-
concurrentHandshakeTargetId: (concurrentHandshakeTargetId !== undefined) ? (0,
|
|
16
|
-
interleaveSourceId: (interleaveSourceId !== undefined) ? (0,
|
|
14
|
+
neighborIds: neighborIds.map((id) => (0, dht_1.getRawFromDhtAddress)(id)),
|
|
15
|
+
concurrentHandshakeTargetId: (concurrentHandshakeTargetId !== undefined) ? (0, dht_1.getRawFromDhtAddress)(concurrentHandshakeTargetId) : undefined,
|
|
16
|
+
interleaveSourceId: (interleaveSourceId !== undefined) ? (0, dht_1.getRawFromDhtAddress)(interleaveSourceId) : undefined
|
|
17
17
|
};
|
|
18
18
|
try {
|
|
19
19
|
const response = await this.getClient().handshake(request, this.formDhtRpcOptions());
|
|
@@ -23,23 +23,32 @@ class HandshakeRpcRemote extends dht_1.Remote {
|
|
|
23
23
|
};
|
|
24
24
|
}
|
|
25
25
|
catch (err) {
|
|
26
|
-
logger.debug(`handshake to ${(0,
|
|
26
|
+
logger.debug(`handshake to ${(0, dht_1.getNodeIdFromPeerDescriptor)(this.getPeerDescriptor())} failed: ${err}`);
|
|
27
27
|
return {
|
|
28
28
|
accepted: false
|
|
29
29
|
};
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
|
-
|
|
33
|
-
const
|
|
34
|
-
streamPartId: this.getServiceId(),
|
|
32
|
+
async interleaveRequest(originatorDescriptor) {
|
|
33
|
+
const request = {
|
|
35
34
|
interleaveTargetDescriptor: originatorDescriptor
|
|
36
35
|
};
|
|
37
36
|
const options = this.formDhtRpcOptions({
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
this.getClient().interleaveNotice(notification, options).catch(() => {
|
|
41
|
-
logger.debug('Failed to send interleaveNotice');
|
|
37
|
+
connect: false,
|
|
38
|
+
timeout: exports.INTERLEAVE_REQUEST_TIMEOUT
|
|
42
39
|
});
|
|
40
|
+
try {
|
|
41
|
+
const res = await this.getClient().interleaveRequest(request, options);
|
|
42
|
+
return {
|
|
43
|
+
accepted: res.accepted
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
catch (err) {
|
|
47
|
+
logger.debug(`interleaveRequest to ${(0, dht_1.getNodeIdFromPeerDescriptor)(this.getPeerDescriptor())} failed: ${err}`);
|
|
48
|
+
return {
|
|
49
|
+
accepted: false
|
|
50
|
+
};
|
|
51
|
+
}
|
|
43
52
|
}
|
|
44
53
|
}
|
|
45
54
|
exports.HandshakeRpcRemote = HandshakeRpcRemote;
|