@streamr/trackerless-network 0.0.1-tatum.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/.eslintignore +7 -0
- package/.eslintrc +3 -0
- package/README.md +6 -0
- package/bin/bootstrap-node.ts +73 -0
- package/bin/full-node-webrtc.ts +102 -0
- package/bin/full-node-websocket.ts +102 -0
- package/bin/network.ts +43 -0
- package/dist/package.json +53 -0
- package/dist/src/NameDirectory.d.ts +5 -0
- package/dist/src/NameDirectory.js +44 -0
- package/dist/src/NameDirectory.js.map +1 -0
- package/dist/src/NetworkNode.d.ts +35 -0
- package/dist/src/NetworkNode.js +130 -0
- package/dist/src/NetworkNode.js.map +1 -0
- package/dist/src/NetworkStack.d.ts +32 -0
- package/dist/src/NetworkStack.js +108 -0
- package/dist/src/NetworkStack.js.map +1 -0
- package/dist/src/exports.d.ts +6 -0
- package/dist/src/exports.js +12 -0
- package/dist/src/exports.js.map +1 -0
- package/dist/src/identifiers.d.ts +1 -0
- package/dist/src/identifiers.js +3 -0
- package/dist/src/identifiers.js.map +1 -0
- package/dist/src/logic/DuplicateMessageDetector.d.ts +55 -0
- package/dist/src/logic/DuplicateMessageDetector.js +155 -0
- package/dist/src/logic/DuplicateMessageDetector.js.map +1 -0
- package/dist/src/logic/ILayer0.d.ts +13 -0
- package/dist/src/logic/ILayer0.js +3 -0
- package/dist/src/logic/ILayer0.js.map +1 -0
- package/dist/src/logic/IStreamNode.d.ts +12 -0
- package/dist/src/logic/IStreamNode.js +3 -0
- package/dist/src/logic/IStreamNode.js.map +1 -0
- package/dist/src/logic/PeerList.d.ts +27 -0
- package/dist/src/logic/PeerList.js +84 -0
- package/dist/src/logic/PeerList.js.map +1 -0
- package/dist/src/logic/RandomGraphNode.d.ts +68 -0
- package/dist/src/logic/RandomGraphNode.js +201 -0
- package/dist/src/logic/RandomGraphNode.js.map +1 -0
- package/dist/src/logic/Remote.d.ts +9 -0
- package/dist/src/logic/Remote.js +15 -0
- package/dist/src/logic/Remote.js.map +1 -0
- package/dist/src/logic/RemoteRandomGraphNode.d.ts +8 -0
- package/dist/src/logic/RemoteRandomGraphNode.js +35 -0
- package/dist/src/logic/RemoteRandomGraphNode.js.map +1 -0
- package/dist/src/logic/StreamEntryPointDiscovery.d.ts +36 -0
- package/dist/src/logic/StreamEntryPointDiscovery.js +179 -0
- package/dist/src/logic/StreamEntryPointDiscovery.js.map +1 -0
- package/dist/src/logic/StreamNodeServer.d.ts +20 -0
- package/dist/src/logic/StreamNodeServer.js +26 -0
- package/dist/src/logic/StreamNodeServer.js.map +1 -0
- package/dist/src/logic/StreamrNode.d.ts +76 -0
- package/dist/src/logic/StreamrNode.js +303 -0
- package/dist/src/logic/StreamrNode.js.map +1 -0
- package/dist/src/logic/createRandomGraphNode.d.ts +5 -0
- package/dist/src/logic/createRandomGraphNode.js +110 -0
- package/dist/src/logic/createRandomGraphNode.js.map +1 -0
- package/dist/src/logic/inspect/InspectSession.d.ts +18 -0
- package/dist/src/logic/inspect/InspectSession.js +38 -0
- package/dist/src/logic/inspect/InspectSession.js.map +1 -0
- package/dist/src/logic/inspect/Inspector.d.ts +33 -0
- package/dist/src/logic/inspect/Inspector.js +63 -0
- package/dist/src/logic/inspect/Inspector.js.map +1 -0
- package/dist/src/logic/neighbor-discovery/Handshaker.d.ts +35 -0
- package/dist/src/logic/neighbor-discovery/Handshaker.js +121 -0
- package/dist/src/logic/neighbor-discovery/Handshaker.js.map +1 -0
- package/dist/src/logic/neighbor-discovery/HandshakerServer.d.ts +30 -0
- package/dist/src/logic/neighbor-discovery/HandshakerServer.js +78 -0
- package/dist/src/logic/neighbor-discovery/HandshakerServer.js.map +1 -0
- package/dist/src/logic/neighbor-discovery/NeighborFinder.d.ts +23 -0
- package/dist/src/logic/neighbor-discovery/NeighborFinder.js +44 -0
- package/dist/src/logic/neighbor-discovery/NeighborFinder.js.map +1 -0
- package/dist/src/logic/neighbor-discovery/NeighborUpdateManager.d.ts +30 -0
- package/dist/src/logic/neighbor-discovery/NeighborUpdateManager.js +42 -0
- package/dist/src/logic/neighbor-discovery/NeighborUpdateManager.js.map +1 -0
- package/dist/src/logic/neighbor-discovery/NeighborUpdateManagerServer.d.ts +20 -0
- package/dist/src/logic/neighbor-discovery/NeighborUpdateManagerServer.js +42 -0
- package/dist/src/logic/neighbor-discovery/NeighborUpdateManagerServer.js.map +1 -0
- package/dist/src/logic/neighbor-discovery/RemoteHandshaker.d.ts +12 -0
- package/dist/src/logic/neighbor-discovery/RemoteHandshaker.js +54 -0
- package/dist/src/logic/neighbor-discovery/RemoteHandshaker.js.map +1 -0
- package/dist/src/logic/neighbor-discovery/RemoteNeighborUpdateManager.d.ts +11 -0
- package/dist/src/logic/neighbor-discovery/RemoteNeighborUpdateManager.js +37 -0
- package/dist/src/logic/neighbor-discovery/RemoteNeighborUpdateManager.js.map +1 -0
- package/dist/src/logic/propagation/FifoMapWithTTL.d.ts +36 -0
- package/dist/src/logic/propagation/FifoMapWithTTL.js +81 -0
- package/dist/src/logic/propagation/FifoMapWithTTL.js.map +1 -0
- package/dist/src/logic/propagation/Propagation.d.ts +31 -0
- package/dist/src/logic/propagation/Propagation.js +64 -0
- package/dist/src/logic/propagation/Propagation.js.map +1 -0
- package/dist/src/logic/propagation/PropagationTaskStore.d.ts +21 -0
- package/dist/src/logic/propagation/PropagationTaskStore.js +32 -0
- package/dist/src/logic/propagation/PropagationTaskStore.js.map +1 -0
- package/dist/src/logic/protocol-integration/stream-message/ContentMessageTranslator.d.ts +5 -0
- package/dist/src/logic/protocol-integration/stream-message/ContentMessageTranslator.js +17 -0
- package/dist/src/logic/protocol-integration/stream-message/ContentMessageTranslator.js.map +1 -0
- package/dist/src/logic/protocol-integration/stream-message/GroupKeyRequestTranslator.d.ts +6 -0
- package/dist/src/logic/protocol-integration/stream-message/GroupKeyRequestTranslator.js +27 -0
- package/dist/src/logic/protocol-integration/stream-message/GroupKeyRequestTranslator.js.map +1 -0
- package/dist/src/logic/protocol-integration/stream-message/GroupKeyResponseTranslator.d.ts +6 -0
- package/dist/src/logic/protocol-integration/stream-message/GroupKeyResponseTranslator.js +33 -0
- package/dist/src/logic/protocol-integration/stream-message/GroupKeyResponseTranslator.js.map +1 -0
- package/dist/src/logic/protocol-integration/stream-message/StreamMessageTranslator.d.ts +6 -0
- package/dist/src/logic/protocol-integration/stream-message/StreamMessageTranslator.js +109 -0
- package/dist/src/logic/protocol-integration/stream-message/StreamMessageTranslator.js.map +1 -0
- package/dist/src/logic/proxy/ProxyStreamConnectionClient.d.ts +44 -0
- package/dist/src/logic/proxy/ProxyStreamConnectionClient.js +189 -0
- package/dist/src/logic/proxy/ProxyStreamConnectionClient.js.map +1 -0
- package/dist/src/logic/proxy/ProxyStreamConnectionServer.d.ts +34 -0
- package/dist/src/logic/proxy/ProxyStreamConnectionServer.js +64 -0
- package/dist/src/logic/proxy/ProxyStreamConnectionServer.js.map +1 -0
- package/dist/src/logic/proxy/RemoteProxyServer.d.ts +7 -0
- package/dist/src/logic/proxy/RemoteProxyServer.js +36 -0
- package/dist/src/logic/proxy/RemoteProxyServer.js.map +1 -0
- package/dist/src/logic/temporary-connection/RemoteTemporaryConnectionRpcServer.d.ts +6 -0
- package/dist/src/logic/temporary-connection/RemoteTemporaryConnectionRpcServer.js +28 -0
- package/dist/src/logic/temporary-connection/RemoteTemporaryConnectionRpcServer.js.map +1 -0
- package/dist/src/logic/temporary-connection/TemporaryConnectionRpcServer.d.ts +20 -0
- package/dist/src/logic/temporary-connection/TemporaryConnectionRpcServer.js +29 -0
- package/dist/src/logic/temporary-connection/TemporaryConnectionRpcServer.js.map +1 -0
- package/dist/src/logic/utils.d.ts +3 -0
- package/dist/src/logic/utils.js +16 -0
- package/dist/src/logic/utils.js.map +1 -0
- package/dist/src/proto/google/protobuf/any.d.ts +173 -0
- package/dist/src/proto/google/protobuf/any.js +155 -0
- package/dist/src/proto/google/protobuf/any.js.map +1 -0
- package/dist/src/proto/google/protobuf/empty.d.ts +32 -0
- package/dist/src/proto/google/protobuf/empty.js +34 -0
- package/dist/src/proto/google/protobuf/empty.js.map +1 -0
- package/dist/src/proto/google/protobuf/timestamp.d.ts +149 -0
- package/dist/src/proto/google/protobuf/timestamp.js +136 -0
- package/dist/src/proto/google/protobuf/timestamp.js.map +1 -0
- package/dist/src/proto/packages/dht/protos/DhtRpc.client.d.ts +320 -0
- package/dist/src/proto/packages/dht/protos/DhtRpc.client.js +245 -0
- package/dist/src/proto/packages/dht/protos/DhtRpc.client.js.map +1 -0
- package/dist/src/proto/packages/dht/protos/DhtRpc.d.ts +1089 -0
- package/dist/src/proto/packages/dht/protos/DhtRpc.js +710 -0
- package/dist/src/proto/packages/dht/protos/DhtRpc.js.map +1 -0
- package/dist/src/proto/packages/dht/protos/DhtRpc.server.d.ts +145 -0
- package/dist/src/proto/packages/dht/protos/DhtRpc.server.js +3 -0
- package/dist/src/proto/packages/dht/protos/DhtRpc.server.js.map +1 -0
- package/dist/src/proto/packages/proto-rpc/protos/ProtoRpc.d.ts +87 -0
- package/dist/src/proto/packages/proto-rpc/protos/ProtoRpc.js +66 -0
- package/dist/src/proto/packages/proto-rpc/protos/ProtoRpc.js.map +1 -0
- package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.client.d.ts +156 -0
- package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.client.js +122 -0
- package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.client.js.map +1 -0
- package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.d.ts +524 -0
- package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.js +350 -0
- package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.js.map +1 -0
- package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.server.d.ts +65 -0
- package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.server.js +3 -0
- package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.server.js.map +1 -0
- package/dist/test/benchmark/first-message.d.ts +1 -0
- package/dist/test/benchmark/first-message.js +137 -0
- package/dist/test/benchmark/first-message.js.map +1 -0
- package/dist/test/utils/utils.d.ts +12 -0
- package/dist/test/utils/utils.js +86 -0
- package/dist/test/utils/utils.js.map +1 -0
- package/jest.config.js +36 -0
- package/karma.config.js +20 -0
- package/log.txt +501 -0
- package/package.json +53 -0
- package/proto.sh +2 -0
- package/protos/NetworkRpc.proto +161 -0
- package/src/NameDirectory.ts +44 -0
- package/src/NetworkNode.ts +169 -0
- package/src/NetworkStack.ts +144 -0
- package/src/exports.ts +6 -0
- package/src/identifiers.ts +1 -0
- package/src/logic/DuplicateMessageDetector.ts +167 -0
- package/src/logic/ILayer0.ts +14 -0
- package/src/logic/IStreamNode.ts +17 -0
- package/src/logic/PeerList.ts +106 -0
- package/src/logic/RandomGraphNode.ts +310 -0
- package/src/logic/Remote.ts +19 -0
- package/src/logic/RemoteRandomGraphNode.ts +39 -0
- package/src/logic/StreamEntryPointDiscovery.ts +221 -0
- package/src/logic/StreamNodeServer.ts +44 -0
- package/src/logic/StreamrNode.ts +416 -0
- package/src/logic/createRandomGraphNode.ts +114 -0
- package/src/logic/inspect/InspectSession.ts +49 -0
- package/src/logic/inspect/Inspector.ts +89 -0
- package/src/logic/neighbor-discovery/Handshaker.ts +180 -0
- package/src/logic/neighbor-discovery/HandshakerServer.ts +99 -0
- package/src/logic/neighbor-discovery/NeighborFinder.ts +61 -0
- package/src/logic/neighbor-discovery/NeighborUpdateManager.ts +67 -0
- package/src/logic/neighbor-discovery/NeighborUpdateManagerServer.ts +61 -0
- package/src/logic/neighbor-discovery/RemoteHandshaker.ts +64 -0
- package/src/logic/neighbor-discovery/RemoteNeighborUpdateManager.ts +41 -0
- package/src/logic/propagation/FifoMapWithTTL.ts +108 -0
- package/src/logic/propagation/Propagation.ts +83 -0
- package/src/logic/propagation/PropagationTaskStore.ts +40 -0
- package/src/logic/protocol-integration/stream-message/ContentMessageTranslator.ts +16 -0
- package/src/logic/protocol-integration/stream-message/GroupKeyRequestTranslator.ts +28 -0
- package/src/logic/protocol-integration/stream-message/GroupKeyResponseTranslator.ts +38 -0
- package/src/logic/protocol-integration/stream-message/StreamMessageTranslator.ts +142 -0
- package/src/logic/proxy/ProxyStreamConnectionClient.ts +255 -0
- package/src/logic/proxy/ProxyStreamConnectionServer.ts +97 -0
- package/src/logic/proxy/RemoteProxyServer.ts +36 -0
- package/src/logic/temporary-connection/RemoteTemporaryConnectionRpcServer.ts +27 -0
- package/src/logic/temporary-connection/TemporaryConnectionRpcServer.ts +50 -0
- package/src/logic/utils.ts +17 -0
- package/src/proto/google/protobuf/any.ts +319 -0
- package/src/proto/google/protobuf/empty.ts +84 -0
- package/src/proto/google/protobuf/timestamp.ts +281 -0
- package/src/proto/packages/dht/protos/DhtRpc.client.ts +373 -0
- package/src/proto/packages/dht/protos/DhtRpc.server.ts +148 -0
- package/src/proto/packages/dht/protos/DhtRpc.ts +1399 -0
- package/src/proto/packages/proto-rpc/protos/ProtoRpc.ts +108 -0
- package/src/proto/packages/trackerless-network/protos/NetworkRpc.client.ts +176 -0
- package/src/proto/packages/trackerless-network/protos/NetworkRpc.server.ts +68 -0
- package/src/proto/packages/trackerless-network/protos/NetworkRpc.ts +667 -0
- package/test/benchmark/first-message.ts +155 -0
- package/test/end-to-end/inspect.test.ts +119 -0
- package/test/end-to-end/proxy-and-full-node.test.ts +140 -0
- package/test/end-to-end/proxy-connections.test.ts +228 -0
- package/test/end-to-end/proxy-key-exchange.test.ts +142 -0
- package/test/end-to-end/random-graph-with-real-connections.test.ts +154 -0
- package/test/end-to-end/webrtc-full-node-network.test.ts +97 -0
- package/test/end-to-end/websocket-full-node-network.test.ts +93 -0
- package/test/integration/Handshakes.test.ts +167 -0
- package/test/integration/Inspect.test.ts +102 -0
- package/test/integration/NetworkNode.test.ts +99 -0
- package/test/integration/NetworkRpc.test.ts +61 -0
- package/test/integration/NetworkStack.test.ts +74 -0
- package/test/integration/NetworkStackStoppedDuringStart.test.ts +45 -0
- package/test/integration/Propagation.test.ts +79 -0
- package/test/integration/RandomGraphNode-Layer1Node-Latencies.test.ts +141 -0
- package/test/integration/RandomGraphNode-Layer1Node.test.ts +226 -0
- package/test/integration/RemoteHandshaker.test.ts +78 -0
- package/test/integration/RemoteNeighborUpdateManager.test.ts +82 -0
- package/test/integration/RemoteRandomGraphNode.test.ts +102 -0
- package/test/integration/StreamrNode.test.ts +145 -0
- package/test/integration/stream-without-default-entrypoints.test.ts +132 -0
- package/test/unit/ContentMessageTranslator.test.ts +20 -0
- package/test/unit/DuplicateMessageDetector.test.ts +192 -0
- package/test/unit/FifoMapWithTtl.test.ts +229 -0
- package/test/unit/GroupKeyRequestTranslator.test.ts +36 -0
- package/test/unit/GroupKeyResponseTranslator.test.ts +39 -0
- package/test/unit/Handshaker.test.ts +63 -0
- package/test/unit/HandshakerServer.test.ts +123 -0
- package/test/unit/InspectSession.test.ts +78 -0
- package/test/unit/Inspector.test.ts +57 -0
- package/test/unit/NeighborFinder.test.ts +48 -0
- package/test/unit/NumberPair.test.ts +22 -0
- package/test/unit/PeerList.test.ts +150 -0
- package/test/unit/Propagation.test.ts +134 -0
- package/test/unit/RandomGraphNode.test.ts +73 -0
- package/test/unit/StreamEntrypointDiscovery.test.ts +152 -0
- package/test/unit/StreamMessageTranslator.test.ts +67 -0
- package/test/unit/StreamNodeServer.test.ts +63 -0
- package/test/unit/StreamrNode.test.ts +74 -0
- package/test/utils/mock/MockHandshaker.ts +15 -0
- package/test/utils/mock/MockLayer0.ts +71 -0
- package/test/utils/mock/MockLayer1.ts +6 -0
- package/test/utils/mock/MockNeighborFinder.ts +19 -0
- package/test/utils/mock/MockNeighborUpdateManager.ts +21 -0
- package/test/utils/mock/Transport.ts +25 -0
- package/test/utils/utils.ts +104 -0
- package/tsconfig.browser.json +12 -0
- package/tsconfig.jest.json +15 -0
- package/tsconfig.node.json +18 -0
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.NetworkStack = void 0;
|
|
4
|
+
const dht_1 = require("@streamr/dht");
|
|
5
|
+
const StreamrNode_1 = require("./logic/StreamrNode");
|
|
6
|
+
const utils_1 = require("@streamr/utils");
|
|
7
|
+
const eventemitter3_1 = require("eventemitter3");
|
|
8
|
+
class ReadynessListener {
|
|
9
|
+
constructor(networkStack, dhtNode) {
|
|
10
|
+
this.emitter = new eventemitter3_1.EventEmitter();
|
|
11
|
+
this.onConnected = () => {
|
|
12
|
+
this.networkStack.off('stopped', this.onStopped);
|
|
13
|
+
this.dhtNode.off('connected', this.onConnected);
|
|
14
|
+
this.emitter.emit('done');
|
|
15
|
+
};
|
|
16
|
+
this.onStopped = () => {
|
|
17
|
+
this.networkStack.off('stopped', this.onStopped);
|
|
18
|
+
this.dhtNode.off('connected', this.onConnected);
|
|
19
|
+
this.emitter.emit('done');
|
|
20
|
+
};
|
|
21
|
+
this.networkStack = networkStack;
|
|
22
|
+
this.dhtNode = dhtNode;
|
|
23
|
+
this.networkStack.on('stopped', this.onStopped);
|
|
24
|
+
this.dhtNode.on('connected', this.onConnected);
|
|
25
|
+
}
|
|
26
|
+
async waitUntilReady(timeout) {
|
|
27
|
+
if (this.dhtNode.getNumberOfConnections() > 0) {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
await (0, utils_1.waitForEvent3)(this.emitter, 'done', timeout);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
class NetworkStack extends eventemitter3_1.EventEmitter {
|
|
36
|
+
constructor(options) {
|
|
37
|
+
super();
|
|
38
|
+
this.dhtJoinRequired = true;
|
|
39
|
+
this.options = options;
|
|
40
|
+
this.metricsContext = options.metricsContext ?? new utils_1.MetricsContext();
|
|
41
|
+
this.layer0DhtNode = new dht_1.DhtNode({
|
|
42
|
+
...options.layer0,
|
|
43
|
+
metricsContext: this.metricsContext
|
|
44
|
+
});
|
|
45
|
+
this.streamrNode = new StreamrNode_1.StreamrNode({
|
|
46
|
+
...options.networkNode,
|
|
47
|
+
nodeName: options.networkNode.nodeName ?? options.layer0.nodeName,
|
|
48
|
+
metricsContext: this.metricsContext
|
|
49
|
+
});
|
|
50
|
+
this.firstConnectionTimeout = options.networkNode.firstConnectionTimeout ?? 5000;
|
|
51
|
+
}
|
|
52
|
+
async start(doJoin = true) {
|
|
53
|
+
await this.layer0DhtNode.start();
|
|
54
|
+
this.connectionManager = this.layer0DhtNode.getTransport();
|
|
55
|
+
if (this.options.layer0.entryPoints.some((entryPoint) => (0, dht_1.isSamePeerDescriptor)(entryPoint, this.layer0DhtNode.getPeerDescriptor()))) {
|
|
56
|
+
this.dhtJoinRequired = false;
|
|
57
|
+
await this.layer0DhtNode?.joinDht(this.options.layer0.entryPoints);
|
|
58
|
+
await this.streamrNode?.start(this.layer0DhtNode, this.connectionManager, this.connectionManager);
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
if (doJoin) {
|
|
62
|
+
this.dhtJoinRequired = false;
|
|
63
|
+
await this.joinDht();
|
|
64
|
+
}
|
|
65
|
+
await this.streamrNode?.start(this.layer0DhtNode, this.connectionManager, this.connectionManager);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
async joinDht() {
|
|
69
|
+
setImmediate(() => {
|
|
70
|
+
this.layer0DhtNode?.joinDht(this.options.layer0.entryPoints);
|
|
71
|
+
});
|
|
72
|
+
await this.waitForFirstConnection();
|
|
73
|
+
}
|
|
74
|
+
async waitForFirstConnection() {
|
|
75
|
+
const readynessListener = new ReadynessListener(this, this.layer0DhtNode);
|
|
76
|
+
await readynessListener.waitUntilReady(this.firstConnectionTimeout);
|
|
77
|
+
}
|
|
78
|
+
async joinLayer0IfRequired(streamPartId) {
|
|
79
|
+
if (this.isJoinRequired(streamPartId)) {
|
|
80
|
+
this.dhtJoinRequired = false;
|
|
81
|
+
await this.joinDht();
|
|
82
|
+
}
|
|
83
|
+
else if (this.layer0DhtNode.getNumberOfConnections() < 1) {
|
|
84
|
+
await this.waitForFirstConnection();
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
isJoinRequired(streamPartId) {
|
|
88
|
+
return this.dhtJoinRequired && !this.layer0DhtNode.hasJoined() && this.streamrNode.isJoinRequired(streamPartId);
|
|
89
|
+
}
|
|
90
|
+
getStreamrNode() {
|
|
91
|
+
return this.streamrNode;
|
|
92
|
+
}
|
|
93
|
+
getLayer0DhtNode() {
|
|
94
|
+
return this.layer0DhtNode;
|
|
95
|
+
}
|
|
96
|
+
getMetricsContext() {
|
|
97
|
+
return this.metricsContext;
|
|
98
|
+
}
|
|
99
|
+
async stop() {
|
|
100
|
+
await this.streamrNode.destroy();
|
|
101
|
+
this.streamrNode = undefined;
|
|
102
|
+
this.layer0DhtNode = undefined;
|
|
103
|
+
this.connectionManager = undefined;
|
|
104
|
+
this.emit('stopped');
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
exports.NetworkStack = NetworkStack;
|
|
108
|
+
//# sourceMappingURL=NetworkStack.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NetworkStack.js","sourceRoot":"","sources":["../../src/NetworkStack.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { NetworkStack, NetworkOptions } from './NetworkStack';
|
|
2
|
+
export { NetworkNode } from './NetworkNode';
|
|
3
|
+
export { StreamrNodeConfig } from './logic/StreamrNode';
|
|
4
|
+
export { NameDirectory } from './NameDirectory';
|
|
5
|
+
export { NodeId } from './identifiers';
|
|
6
|
+
export { ProxyDirection } from './proto/packages/trackerless-network/protos/NetworkRpc';
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ProxyDirection = exports.NameDirectory = exports.NetworkNode = exports.NetworkStack = void 0;
|
|
4
|
+
var NetworkStack_1 = require("./NetworkStack");
|
|
5
|
+
Object.defineProperty(exports, "NetworkStack", { enumerable: true, get: function () { return NetworkStack_1.NetworkStack; } });
|
|
6
|
+
var NetworkNode_1 = require("./NetworkNode");
|
|
7
|
+
Object.defineProperty(exports, "NetworkNode", { enumerable: true, get: function () { return NetworkNode_1.NetworkNode; } });
|
|
8
|
+
var NameDirectory_1 = require("./NameDirectory");
|
|
9
|
+
Object.defineProperty(exports, "NameDirectory", { enumerable: true, get: function () { return NameDirectory_1.NameDirectory; } });
|
|
10
|
+
var NetworkRpc_1 = require("./proto/packages/trackerless-network/protos/NetworkRpc");
|
|
11
|
+
Object.defineProperty(exports, "ProxyDirection", { enumerable: true, get: function () { return NetworkRpc_1.ProxyDirection; } });
|
|
12
|
+
//# sourceMappingURL=exports.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exports.js","sourceRoot":"","sources":["../../src/exports.ts"],"names":[],"mappings":";;;AAAA,+CAA6D;AAApD,4GAAA,YAAY,OAAA;AACrB,6CAA2C;AAAlC,0GAAA,WAAW,OAAA;AAEpB,iDAA+C;AAAtC,8GAAA,aAAa,OAAA;AAEtB,qFAAuF;AAA9E,4GAAA,cAAc,OAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export type NodeId = string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identifiers.js","sourceRoot":"","sources":["../../src/identifiers.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Represent a pair of numbers (a,b). Ordering between two pairs is defined as
|
|
3
|
+
* follows. First compare first numbers. Compare second numbers if first are
|
|
4
|
+
* equal.
|
|
5
|
+
*/
|
|
6
|
+
export declare class NumberPair {
|
|
7
|
+
private readonly a;
|
|
8
|
+
private readonly b;
|
|
9
|
+
constructor(a: number, b: number);
|
|
10
|
+
greaterThanOrEqual(otherPair: NumberPair): boolean;
|
|
11
|
+
greaterThan(otherPair: NumberPair): boolean;
|
|
12
|
+
equalTo(otherPair: NumberPair): boolean;
|
|
13
|
+
private compareTo;
|
|
14
|
+
toString(): string;
|
|
15
|
+
}
|
|
16
|
+
export declare class InvalidNumberingError extends Error {
|
|
17
|
+
constructor();
|
|
18
|
+
}
|
|
19
|
+
export declare class GapMisMatchError extends Error {
|
|
20
|
+
constructor(state: string, previousNumber: NumberPair, number: NumberPair);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
*
|
|
24
|
+
* Keeps track of a stream's message numbers and reports already seen numbers
|
|
25
|
+
* as duplicates.
|
|
26
|
+
*
|
|
27
|
+
* Leverages the fact that message are assigned numbers from a strictly
|
|
28
|
+
* increasing integer sequence for lowered space complexity. For example,
|
|
29
|
+
* if we know that all messages up to number N have been seen, we can only
|
|
30
|
+
* store the number N to provide message identity check. This is because
|
|
31
|
+
* anything less than N can be deemed a duplicate.
|
|
32
|
+
*
|
|
33
|
+
* Messages arriving out-of-order makes this a bit harder since gaps form.
|
|
34
|
+
* Most of the code in this class is built to deal with this complexity.
|
|
35
|
+
* Basically, we need to keep track of which intervals [N,M] could still
|
|
36
|
+
* contain unseen messages. We should also remove intervals after we are sure
|
|
37
|
+
* that they contain no unseen messages.
|
|
38
|
+
*
|
|
39
|
+
* In addition to the above, there needs to be a limit to the number of
|
|
40
|
+
* intervals we store, as it could well be that some messages never
|
|
41
|
+
* arrive. The strategy is to start removing the lowest numbered
|
|
42
|
+
* intervals when storage limits are hit.
|
|
43
|
+
*
|
|
44
|
+
*/
|
|
45
|
+
export declare class DuplicateMessageDetector {
|
|
46
|
+
private readonly maxNumberOfGaps;
|
|
47
|
+
private readonly gaps;
|
|
48
|
+
constructor(maxNumberOfGaps?: number);
|
|
49
|
+
/**
|
|
50
|
+
* returns true if number has not yet been seen (i.e. is not a duplicate)
|
|
51
|
+
*/
|
|
52
|
+
markAndCheck(previousNumber: NumberPair | null, number: NumberPair): boolean | never;
|
|
53
|
+
private dropLowestGapIfOverMaxNumberOfGaps;
|
|
54
|
+
toString(): string;
|
|
55
|
+
}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DuplicateMessageDetector = exports.GapMisMatchError = exports.InvalidNumberingError = exports.NumberPair = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Represent a pair of numbers (a,b). Ordering between two pairs is defined as
|
|
6
|
+
* follows. First compare first numbers. Compare second numbers if first are
|
|
7
|
+
* equal.
|
|
8
|
+
*/
|
|
9
|
+
class NumberPair {
|
|
10
|
+
constructor(a, b) {
|
|
11
|
+
this.a = a;
|
|
12
|
+
this.b = b;
|
|
13
|
+
}
|
|
14
|
+
greaterThanOrEqual(otherPair) {
|
|
15
|
+
return this.greaterThan(otherPair) || this.equalTo(otherPair);
|
|
16
|
+
}
|
|
17
|
+
greaterThan(otherPair) {
|
|
18
|
+
return this.compareTo(otherPair) === 1;
|
|
19
|
+
}
|
|
20
|
+
equalTo(otherPair) {
|
|
21
|
+
return this.compareTo(otherPair) === 0;
|
|
22
|
+
}
|
|
23
|
+
compareTo(otherPair) {
|
|
24
|
+
if (this.a > otherPair.a) {
|
|
25
|
+
return 1;
|
|
26
|
+
}
|
|
27
|
+
if (this.a < otherPair.a) {
|
|
28
|
+
return -1;
|
|
29
|
+
}
|
|
30
|
+
if (this.b > otherPair.b) {
|
|
31
|
+
return 1;
|
|
32
|
+
}
|
|
33
|
+
if (this.b < otherPair.b) {
|
|
34
|
+
return -1;
|
|
35
|
+
}
|
|
36
|
+
return 0;
|
|
37
|
+
}
|
|
38
|
+
toString() {
|
|
39
|
+
return `${this.a}|${this.b}`;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
exports.NumberPair = NumberPair;
|
|
43
|
+
class InvalidNumberingError extends Error {
|
|
44
|
+
constructor() {
|
|
45
|
+
super('pre-condition: previousNumber < number');
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
exports.InvalidNumberingError = InvalidNumberingError;
|
|
49
|
+
class GapMisMatchError extends Error {
|
|
50
|
+
constructor(state, previousNumber, number) {
|
|
51
|
+
super('pre-condition: gap overlap in given numbers:'
|
|
52
|
+
+ ` previousNumber=${previousNumber}, number=${number}, state=${state}`);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
exports.GapMisMatchError = GapMisMatchError;
|
|
56
|
+
/**
|
|
57
|
+
*
|
|
58
|
+
* Keeps track of a stream's message numbers and reports already seen numbers
|
|
59
|
+
* as duplicates.
|
|
60
|
+
*
|
|
61
|
+
* Leverages the fact that message are assigned numbers from a strictly
|
|
62
|
+
* increasing integer sequence for lowered space complexity. For example,
|
|
63
|
+
* if we know that all messages up to number N have been seen, we can only
|
|
64
|
+
* store the number N to provide message identity check. This is because
|
|
65
|
+
* anything less than N can be deemed a duplicate.
|
|
66
|
+
*
|
|
67
|
+
* Messages arriving out-of-order makes this a bit harder since gaps form.
|
|
68
|
+
* Most of the code in this class is built to deal with this complexity.
|
|
69
|
+
* Basically, we need to keep track of which intervals [N,M] could still
|
|
70
|
+
* contain unseen messages. We should also remove intervals after we are sure
|
|
71
|
+
* that they contain no unseen messages.
|
|
72
|
+
*
|
|
73
|
+
* In addition to the above, there needs to be a limit to the number of
|
|
74
|
+
* intervals we store, as it could well be that some messages never
|
|
75
|
+
* arrive. The strategy is to start removing the lowest numbered
|
|
76
|
+
* intervals when storage limits are hit.
|
|
77
|
+
*
|
|
78
|
+
*/
|
|
79
|
+
class DuplicateMessageDetector {
|
|
80
|
+
constructor(maxNumberOfGaps = 10000) {
|
|
81
|
+
this.maxNumberOfGaps = maxNumberOfGaps;
|
|
82
|
+
this.gaps = []; // ascending order of half-closed intervals (x,y] representing gaps that contain unseen message(s)
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* returns true if number has not yet been seen (i.e. is not a duplicate)
|
|
86
|
+
*/
|
|
87
|
+
markAndCheck(previousNumber, number) {
|
|
88
|
+
if (previousNumber && previousNumber.greaterThanOrEqual(number)) {
|
|
89
|
+
throw new InvalidNumberingError();
|
|
90
|
+
}
|
|
91
|
+
if (this.gaps.length === 0) {
|
|
92
|
+
this.gaps.push([number, new NumberPair(Infinity, Infinity)]);
|
|
93
|
+
return true;
|
|
94
|
+
}
|
|
95
|
+
// Handle special case where previousNumber is not provided. Only
|
|
96
|
+
// minimal duplicate detection is provided (comparing against latest
|
|
97
|
+
// known message number).
|
|
98
|
+
if (previousNumber === null) {
|
|
99
|
+
if (number.greaterThan(this.gaps[this.gaps.length - 1][0])) {
|
|
100
|
+
this.gaps[this.gaps.length - 1][0] = number;
|
|
101
|
+
return true;
|
|
102
|
+
}
|
|
103
|
+
return false;
|
|
104
|
+
}
|
|
105
|
+
for (let i = this.gaps.length - 1; i >= 0; --i) {
|
|
106
|
+
const [lowerBound, upperBound] = this.gaps[i]; // invariant: upperBound > lowerBound
|
|
107
|
+
// implies number > upperBound (would've been handled in previous iteration if gap exists)
|
|
108
|
+
if (previousNumber.greaterThanOrEqual(upperBound)) {
|
|
109
|
+
return false;
|
|
110
|
+
}
|
|
111
|
+
if (previousNumber.greaterThanOrEqual(lowerBound)) {
|
|
112
|
+
if (number.greaterThan(upperBound)) {
|
|
113
|
+
throw new GapMisMatchError(this.toString(), previousNumber, number);
|
|
114
|
+
}
|
|
115
|
+
if (previousNumber.equalTo(lowerBound)) {
|
|
116
|
+
if (number.equalTo(upperBound)) {
|
|
117
|
+
this.gaps.splice(i, 1);
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
this.gaps[i] = [number, upperBound];
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
else if (number.equalTo(upperBound)) {
|
|
124
|
+
this.gaps[i] = [lowerBound, previousNumber];
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
this.gaps.splice(i, 1, [lowerBound, previousNumber], [number, upperBound]);
|
|
128
|
+
}
|
|
129
|
+
// invariants after:
|
|
130
|
+
// - gaps are in ascending order
|
|
131
|
+
// - the intersection between any two gaps is empty
|
|
132
|
+
// - there are no gaps that define the empty set
|
|
133
|
+
// - last gap is [n, Infinity]
|
|
134
|
+
// - anything not covered by a gap is considered seen
|
|
135
|
+
this.dropLowestGapIfOverMaxNumberOfGaps();
|
|
136
|
+
return true;
|
|
137
|
+
}
|
|
138
|
+
if (number.greaterThan(lowerBound)) {
|
|
139
|
+
throw new GapMisMatchError(this.toString(), previousNumber, number);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
return false;
|
|
143
|
+
}
|
|
144
|
+
dropLowestGapIfOverMaxNumberOfGaps() {
|
|
145
|
+
// invariant: this.gaps.length <= this.maxNumberOfGaps + 1
|
|
146
|
+
if (this.gaps.length > this.maxNumberOfGaps) {
|
|
147
|
+
this.gaps.shift();
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
toString() {
|
|
151
|
+
return this.gaps.map(([lower, upper]) => `(${lower}, ${upper}]`).join(', ');
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
exports.DuplicateMessageDetector = DuplicateMessageDetector;
|
|
155
|
+
//# sourceMappingURL=DuplicateMessageDetector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DuplicateMessageDetector.js","sourceRoot":"","sources":["../../../src/logic/DuplicateMessageDetector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { DataEntry, ITransport, PeerDescriptor, PeerID, RecursiveFindResult } from '@streamr/dht';
|
|
2
|
+
import { Any } from '../proto/google/protobuf/any';
|
|
3
|
+
export interface ILayer0 extends ITransport {
|
|
4
|
+
getPeerDescriptor(): PeerDescriptor;
|
|
5
|
+
getNodeId(): PeerID;
|
|
6
|
+
getDataFromDht(key: Uint8Array): Promise<RecursiveFindResult>;
|
|
7
|
+
findDataViaPeer(key: Uint8Array, peer: PeerDescriptor): Promise<DataEntry[]>;
|
|
8
|
+
storeDataToDht(key: Uint8Array, data: Any): Promise<PeerDescriptor[]>;
|
|
9
|
+
deleteDataFromDht(key: Uint8Array): Promise<void>;
|
|
10
|
+
getKnownEntryPoints(): PeerDescriptor[];
|
|
11
|
+
isJoinOngoing(): boolean;
|
|
12
|
+
stop(): Promise<void>;
|
|
13
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ILayer0.js","sourceRoot":"","sources":["../../../src/logic/ILayer0.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { PeerIDKey } from '@streamr/dht';
|
|
2
|
+
import { ProxyDirection, StreamMessage } from '../proto/packages/trackerless-network/protos/NetworkRpc';
|
|
3
|
+
export interface IStreamNode {
|
|
4
|
+
on(event: 'message', listener: (message: StreamMessage) => void): this;
|
|
5
|
+
once(event: 'message', listener: (message: StreamMessage) => void): this;
|
|
6
|
+
off(event: 'message', listener: (message: StreamMessage) => void): void;
|
|
7
|
+
broadcast(msg: StreamMessage, previousPeer?: string): void;
|
|
8
|
+
hasProxyConnection(peerKey: PeerIDKey, direction: ProxyDirection): boolean;
|
|
9
|
+
stop(): void;
|
|
10
|
+
start(): Promise<void>;
|
|
11
|
+
getTargetNeighborStringIds(): string[];
|
|
12
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IStreamNode.js","sourceRoot":"","sources":["../../../src/logic/IStreamNode.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { PeerDescriptor, PeerID } from '@streamr/dht';
|
|
2
|
+
import { RemoteRandomGraphNode } from './RemoteRandomGraphNode';
|
|
3
|
+
import { EventEmitter } from 'eventemitter3';
|
|
4
|
+
export interface Events {
|
|
5
|
+
peerAdded: (id: string, remote: RemoteRandomGraphNode) => any;
|
|
6
|
+
}
|
|
7
|
+
export declare class PeerList extends EventEmitter<Events> {
|
|
8
|
+
private readonly peers;
|
|
9
|
+
private readonly limit;
|
|
10
|
+
private ownPeerID;
|
|
11
|
+
constructor(ownPeerId: PeerID, limit: number);
|
|
12
|
+
add(remote: RemoteRandomGraphNode): void;
|
|
13
|
+
remove(peerDescriptor: PeerDescriptor): void;
|
|
14
|
+
removeById(stringId: string): void;
|
|
15
|
+
hasPeer(peerDescriptor: PeerDescriptor): boolean;
|
|
16
|
+
hasPeerWithStringId(stringId: string): boolean;
|
|
17
|
+
replaceAll(neighbors: RemoteRandomGraphNode[]): void;
|
|
18
|
+
getStringIds(): string[];
|
|
19
|
+
getNeighborById(id: string): RemoteRandomGraphNode | undefined;
|
|
20
|
+
size(exclude?: string[]): number;
|
|
21
|
+
getRandom(exclude: string[]): RemoteRandomGraphNode | undefined;
|
|
22
|
+
getClosest(exclude: string[]): RemoteRandomGraphNode | undefined;
|
|
23
|
+
getClosestAndFurthest(exclude: string[]): RemoteRandomGraphNode[];
|
|
24
|
+
getFurthest(exclude: string[]): RemoteRandomGraphNode | undefined;
|
|
25
|
+
getPeers(): RemoteRandomGraphNode[];
|
|
26
|
+
stop(): void;
|
|
27
|
+
}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PeerList = void 0;
|
|
4
|
+
const dht_1 = require("@streamr/dht");
|
|
5
|
+
const lodash_1 = require("lodash");
|
|
6
|
+
const eventemitter3_1 = require("eventemitter3");
|
|
7
|
+
const getValuesOfIncludedKeys = (peers, exclude) => {
|
|
8
|
+
return Array.from(peers.entries())
|
|
9
|
+
.filter(([id, _peer]) => !exclude.includes(id))
|
|
10
|
+
.map(([_id, peer]) => peer);
|
|
11
|
+
};
|
|
12
|
+
class PeerList extends eventemitter3_1.EventEmitter {
|
|
13
|
+
constructor(ownPeerId, limit) {
|
|
14
|
+
super();
|
|
15
|
+
this.peers = new Map();
|
|
16
|
+
this.limit = limit;
|
|
17
|
+
this.ownPeerID = ownPeerId;
|
|
18
|
+
}
|
|
19
|
+
add(remote) {
|
|
20
|
+
if (!this.ownPeerID.equals((0, dht_1.peerIdFromPeerDescriptor)(remote.getPeerDescriptor())) && this.peers.size < this.limit) {
|
|
21
|
+
const stringId = (0, dht_1.keyFromPeerDescriptor)(remote.getPeerDescriptor());
|
|
22
|
+
const isExistingPeer = this.peers.has(stringId);
|
|
23
|
+
this.peers.set(stringId, remote);
|
|
24
|
+
if (!isExistingPeer) {
|
|
25
|
+
this.emit('peerAdded', stringId, remote);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
remove(peerDescriptor) {
|
|
30
|
+
this.peers.delete((0, dht_1.keyFromPeerDescriptor)(peerDescriptor));
|
|
31
|
+
}
|
|
32
|
+
removeById(stringId) {
|
|
33
|
+
this.peers.delete(stringId);
|
|
34
|
+
}
|
|
35
|
+
hasPeer(peerDescriptor) {
|
|
36
|
+
return this.peers.has((0, dht_1.keyFromPeerDescriptor)(peerDescriptor));
|
|
37
|
+
}
|
|
38
|
+
hasPeerWithStringId(stringId) {
|
|
39
|
+
return this.peers.has(stringId);
|
|
40
|
+
}
|
|
41
|
+
replaceAll(neighbors) {
|
|
42
|
+
this.peers.clear();
|
|
43
|
+
const limited = neighbors.splice(0, this.limit);
|
|
44
|
+
limited.forEach((remote) => {
|
|
45
|
+
this.add(remote);
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
getStringIds() {
|
|
49
|
+
return Array.from(this.peers.keys());
|
|
50
|
+
}
|
|
51
|
+
getNeighborById(id) {
|
|
52
|
+
return this.peers.get(id);
|
|
53
|
+
}
|
|
54
|
+
size(exclude = []) {
|
|
55
|
+
return Array.from(this.peers.keys()).filter((peer) => !exclude.includes(peer)).length;
|
|
56
|
+
}
|
|
57
|
+
getRandom(exclude) {
|
|
58
|
+
return (0, lodash_1.sample)(getValuesOfIncludedKeys(this.peers, exclude));
|
|
59
|
+
}
|
|
60
|
+
getClosest(exclude) {
|
|
61
|
+
const included = getValuesOfIncludedKeys(this.peers, exclude);
|
|
62
|
+
return included[0];
|
|
63
|
+
}
|
|
64
|
+
getClosestAndFurthest(exclude) {
|
|
65
|
+
const included = getValuesOfIncludedKeys(this.peers, exclude);
|
|
66
|
+
if (included.length === 0) {
|
|
67
|
+
return [];
|
|
68
|
+
}
|
|
69
|
+
return included.length > 1 ? [this.getClosest(exclude), this.getFurthest(exclude)] : [this.getClosest(exclude)];
|
|
70
|
+
}
|
|
71
|
+
getFurthest(exclude) {
|
|
72
|
+
const included = getValuesOfIncludedKeys(this.peers, exclude);
|
|
73
|
+
return included[included.length - 1];
|
|
74
|
+
}
|
|
75
|
+
getPeers() {
|
|
76
|
+
return Array.from(this.peers.values());
|
|
77
|
+
}
|
|
78
|
+
stop() {
|
|
79
|
+
this.peers.clear();
|
|
80
|
+
this.removeAllListeners();
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
exports.PeerList = PeerList;
|
|
84
|
+
//# sourceMappingURL=PeerList.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PeerList.js","sourceRoot":"","sources":["../../../src/logic/PeerList.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { EventEmitter } from 'eventemitter3';
|
|
2
|
+
import { DhtNode, PeerDescriptor, ListeningRpcCommunicator, ITransport, ConnectionLocker, PeerIDKey } from '@streamr/dht';
|
|
3
|
+
import { StreamMessage } from '../proto/packages/trackerless-network/protos/NetworkRpc';
|
|
4
|
+
import { PeerList } from './PeerList';
|
|
5
|
+
import { IHandshaker } from './neighbor-discovery/Handshaker';
|
|
6
|
+
import { Propagation } from './propagation/Propagation';
|
|
7
|
+
import { INeighborFinder } from './neighbor-discovery/NeighborFinder';
|
|
8
|
+
import { INeighborUpdateManager } from './neighbor-discovery/NeighborUpdateManager';
|
|
9
|
+
import { IStreamNode } from './IStreamNode';
|
|
10
|
+
import { ProxyStreamConnectionServer } from './proxy/ProxyStreamConnectionServer';
|
|
11
|
+
import { IInspector } from './inspect/Inspector';
|
|
12
|
+
import { TemporaryConnectionRpcServer } from './temporary-connection/TemporaryConnectionRpcServer';
|
|
13
|
+
export interface Events {
|
|
14
|
+
message: (message: StreamMessage) => void;
|
|
15
|
+
targetNeighborConnected: (stringId: string) => void;
|
|
16
|
+
nearbyContactPoolIdAdded: () => void;
|
|
17
|
+
}
|
|
18
|
+
export interface StrictRandomGraphNodeConfig {
|
|
19
|
+
randomGraphId: string;
|
|
20
|
+
layer1: DhtNode;
|
|
21
|
+
P2PTransport: ITransport;
|
|
22
|
+
connectionLocker: ConnectionLocker;
|
|
23
|
+
ownPeerDescriptor: PeerDescriptor;
|
|
24
|
+
peerViewSize: number;
|
|
25
|
+
nearbyContactPool: PeerList;
|
|
26
|
+
randomContactPool: PeerList;
|
|
27
|
+
targetNeighbors: PeerList;
|
|
28
|
+
handshaker: IHandshaker;
|
|
29
|
+
neighborFinder: INeighborFinder;
|
|
30
|
+
neighborUpdateManager: INeighborUpdateManager;
|
|
31
|
+
propagation: Propagation;
|
|
32
|
+
rpcCommunicator: ListeningRpcCommunicator;
|
|
33
|
+
numOfTargetNeighbors: number;
|
|
34
|
+
maxNumberOfContacts: number;
|
|
35
|
+
minPropagationTargets: number;
|
|
36
|
+
name: string;
|
|
37
|
+
acceptProxyConnections: boolean;
|
|
38
|
+
neighborUpdateInterval: number;
|
|
39
|
+
inspector: IInspector;
|
|
40
|
+
temporaryConnectionServer: TemporaryConnectionRpcServer;
|
|
41
|
+
proxyConnectionServer?: ProxyStreamConnectionServer;
|
|
42
|
+
}
|
|
43
|
+
export declare class RandomGraphNode extends EventEmitter<Events> implements IStreamNode {
|
|
44
|
+
private stopped;
|
|
45
|
+
private started;
|
|
46
|
+
private readonly duplicateDetectors;
|
|
47
|
+
private config;
|
|
48
|
+
private readonly server;
|
|
49
|
+
constructor(config: StrictRandomGraphNodeConfig);
|
|
50
|
+
start(): Promise<void>;
|
|
51
|
+
private registerDefaultServerMethods;
|
|
52
|
+
private newContact;
|
|
53
|
+
private removedContact;
|
|
54
|
+
private newRandomContact;
|
|
55
|
+
private removedRandomContact;
|
|
56
|
+
private onPeerDisconnected;
|
|
57
|
+
private getNewNeighborCandidates;
|
|
58
|
+
hasProxyConnection(peerKey: PeerIDKey): boolean;
|
|
59
|
+
stop(): void;
|
|
60
|
+
broadcast(msg: StreamMessage, previousPeer?: string): void;
|
|
61
|
+
inspect(peerDescriptor: PeerDescriptor): Promise<boolean>;
|
|
62
|
+
private getPropagationTargets;
|
|
63
|
+
getOwnStringId(): PeerIDKey;
|
|
64
|
+
getNumberOfOutgoingHandshakes(): number;
|
|
65
|
+
getTargetNeighborStringIds(): string[];
|
|
66
|
+
getNearbyContactPoolIds(): string[];
|
|
67
|
+
getRandomContactPoolIds(): string[];
|
|
68
|
+
}
|