@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,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RemoteHandshaker = void 0;
|
|
4
|
+
const Remote_1 = require("../Remote");
|
|
5
|
+
const dht_1 = require("@streamr/dht");
|
|
6
|
+
const utils_1 = require("@streamr/utils");
|
|
7
|
+
const logger = new utils_1.Logger(module);
|
|
8
|
+
class RemoteHandshaker extends Remote_1.Remote {
|
|
9
|
+
async handshake(ownPeerDescriptor, neighbors, concurrentHandshakeTargetId, interleavingFrom) {
|
|
10
|
+
const request = {
|
|
11
|
+
randomGraphId: this.graphId,
|
|
12
|
+
requestId: new dht_1.UUID().toString(),
|
|
13
|
+
senderId: (0, dht_1.keyFromPeerDescriptor)(ownPeerDescriptor),
|
|
14
|
+
neighbors,
|
|
15
|
+
concurrentHandshakeTargetId,
|
|
16
|
+
interleavingFrom,
|
|
17
|
+
senderDescriptor: ownPeerDescriptor
|
|
18
|
+
};
|
|
19
|
+
const options = {
|
|
20
|
+
sourceDescriptor: ownPeerDescriptor,
|
|
21
|
+
targetDescriptor: this.remotePeerDescriptor
|
|
22
|
+
};
|
|
23
|
+
try {
|
|
24
|
+
const response = await this.client.handshake(request, options);
|
|
25
|
+
return {
|
|
26
|
+
accepted: response.accepted,
|
|
27
|
+
interleaveTarget: response.interleaveTarget
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
catch (err) {
|
|
31
|
+
logger.debug(`handshake to ${(0, dht_1.keyFromPeerDescriptor)(this.getPeerDescriptor())} failed: ${err}`);
|
|
32
|
+
return {
|
|
33
|
+
accepted: false
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
interleaveNotice(ownPeerDescriptor, originatorDescriptor) {
|
|
38
|
+
const options = {
|
|
39
|
+
sourceDescriptor: ownPeerDescriptor,
|
|
40
|
+
targetDescriptor: this.remotePeerDescriptor,
|
|
41
|
+
notification: true
|
|
42
|
+
};
|
|
43
|
+
const notification = {
|
|
44
|
+
randomGraphId: this.graphId,
|
|
45
|
+
interleaveTarget: originatorDescriptor,
|
|
46
|
+
senderId: (0, dht_1.keyFromPeerDescriptor)(ownPeerDescriptor)
|
|
47
|
+
};
|
|
48
|
+
this.client.interleaveNotice(notification, options).catch(() => {
|
|
49
|
+
logger.debug('Failed to send interleaveNotice');
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
exports.RemoteHandshaker = RemoteHandshaker;
|
|
54
|
+
//# sourceMappingURL=RemoteHandshaker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RemoteHandshaker.js","sourceRoot":"","sources":["../../../../src/logic/neighbor-discovery/RemoteHandshaker.ts"],"names":[],"mappings":";;;AAAA,sCAAkC;AAClC,sCAAyF;AAEzF,0CAAuC;AAGvC,MAAM,MAAM,GAAG,IAAI,cAAM,CAAC,MAAM,CAAC,CAAA;AAOjC,MAAa,gBAAiB,SAAQ,eAA2B;IAE7D,KAAK,CAAC,SAAS,CACX,iBAAiC,EACjC,SAAmB,EACnB,2BAAoC,EACpC,gBAAyB;QAEzB,MAAM,OAAO,GAA2B;YACpC,aAAa,EAAE,IAAI,CAAC,OAAO;YAC3B,SAAS,EAAE,IAAI,UAAI,EAAE,CAAC,QAAQ,EAAE;YAChC,QAAQ,EAAE,IAAA,2BAAqB,EAAC,iBAAiB,CAAC;YAClD,SAAS;YACT,2BAA2B;YAC3B,gBAAgB;YAChB,gBAAgB,EAAE,iBAAiB;SACtC,CAAA;QACD,MAAM,OAAO,GAAkB;YAC3B,gBAAgB,EAAE,iBAAmC;YACrD,gBAAgB,EAAE,IAAI,CAAC,oBAAsC;SAChE,CAAA;QACD,IAAI;YACA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;YAC9D,OAAO;gBACH,QAAQ,EAAE,QAAQ,CAAC,QAAQ;gBAC3B,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB;aAC9C,CAAA;SACJ;QAAC,OAAO,GAAQ,EAAE;YACf,MAAM,CAAC,KAAK,CAAC,gBAAgB,IAAA,2BAAqB,EAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,YAAY,GAAG,EAAE,CAAC,CAAA;YAC9F,OAAO;gBACH,QAAQ,EAAE,KAAK;aAClB,CAAA;SACJ;IACL,CAAC;IAED,gBAAgB,CAAC,iBAAiC,EAAE,oBAAoC;QACpF,MAAM,OAAO,GAAkB;YAC3B,gBAAgB,EAAE,iBAAmC;YACrD,gBAAgB,EAAE,IAAI,CAAC,oBAAsC;YAC7D,YAAY,EAAE,IAAI;SACrB,CAAA;QACD,MAAM,YAAY,GAAqB;YACnC,aAAa,EAAE,IAAI,CAAC,OAAO;YAC3B,gBAAgB,EAAE,oBAAoB;YACtC,QAAQ,EAAE,IAAA,2BAAqB,EAAC,iBAAiB,CAAC;SACrD,CAAA;QACD,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YAC3D,MAAM,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAA;QACnD,CAAC,CAAC,CAAA;IACN,CAAC;CACJ;AAlDD,4CAkDC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { PeerDescriptor } from '@streamr/dht';
|
|
2
|
+
import { Remote } from '../Remote';
|
|
3
|
+
import { INeighborUpdateRpcClient } from '../../proto/packages/trackerless-network/protos/NetworkRpc.client';
|
|
4
|
+
interface UpdateNeighborsResponse {
|
|
5
|
+
peers: PeerDescriptor[];
|
|
6
|
+
removeMe: boolean;
|
|
7
|
+
}
|
|
8
|
+
export declare class RemoteNeighborUpdateManager extends Remote<INeighborUpdateRpcClient> {
|
|
9
|
+
updateNeighbors(ownPeerDescriptor: PeerDescriptor, neighbors: PeerDescriptor[]): Promise<UpdateNeighborsResponse>;
|
|
10
|
+
}
|
|
11
|
+
export {};
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RemoteNeighborUpdateManager = void 0;
|
|
4
|
+
const dht_1 = require("@streamr/dht");
|
|
5
|
+
const utils_1 = require("@streamr/utils");
|
|
6
|
+
const Remote_1 = require("../Remote");
|
|
7
|
+
const logger = new utils_1.Logger(module);
|
|
8
|
+
class RemoteNeighborUpdateManager extends Remote_1.Remote {
|
|
9
|
+
async updateNeighbors(ownPeerDescriptor, neighbors) {
|
|
10
|
+
const options = {
|
|
11
|
+
sourceDescriptor: ownPeerDescriptor,
|
|
12
|
+
targetDescriptor: this.remotePeerDescriptor,
|
|
13
|
+
};
|
|
14
|
+
const request = {
|
|
15
|
+
senderId: (0, dht_1.keyFromPeerDescriptor)(ownPeerDescriptor),
|
|
16
|
+
randomGraphId: this.graphId,
|
|
17
|
+
neighborDescriptors: neighbors,
|
|
18
|
+
removeMe: false
|
|
19
|
+
};
|
|
20
|
+
try {
|
|
21
|
+
const response = await this.client.neighborUpdate(request, options);
|
|
22
|
+
return {
|
|
23
|
+
peers: response.neighborDescriptors,
|
|
24
|
+
removeMe: response.removeMe
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
catch (err) {
|
|
28
|
+
logger.debug(`updateNeighbors to ${(0, dht_1.keyFromPeerDescriptor)(this.getPeerDescriptor())} failed: ${err}`);
|
|
29
|
+
return {
|
|
30
|
+
peers: [],
|
|
31
|
+
removeMe: true
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
exports.RemoteNeighborUpdateManager = RemoteNeighborUpdateManager;
|
|
37
|
+
//# sourceMappingURL=RemoteNeighborUpdateManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RemoteNeighborUpdateManager.js","sourceRoot":"","sources":["../../../../src/logic/neighbor-discovery/RemoteNeighborUpdateManager.ts"],"names":[],"mappings":";;;AAAA,sCAAmF;AACnF,0CAAuC;AAEvC,sCAAkC;AAGlC,MAAM,MAAM,GAAG,IAAI,cAAM,CAAC,MAAM,CAAC,CAAA;AAOjC,MAAa,2BAA4B,SAAQ,eAAgC;IAE7E,KAAK,CAAC,eAAe,CAAC,iBAAiC,EAAE,SAA2B;QAChF,MAAM,OAAO,GAAkB;YAC3B,gBAAgB,EAAE,iBAAmC;YACrD,gBAAgB,EAAE,IAAI,CAAC,oBAAsC;SAChE,CAAA;QACD,MAAM,OAAO,GAAmB;YAC5B,QAAQ,EAAE,IAAA,2BAAqB,EAAC,iBAAiB,CAAC;YAClD,aAAa,EAAE,IAAI,CAAC,OAAO;YAC3B,mBAAmB,EAAE,SAAS;YAC9B,QAAQ,EAAE,KAAK;SAClB,CAAA;QACD,IAAI;YACA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;YACnE,OAAO;gBACH,KAAK,EAAE,QAAQ,CAAC,mBAAoB;gBACpC,QAAQ,EAAE,QAAQ,CAAC,QAAQ;aAC9B,CAAA;SACJ;QAAC,OAAO,GAAQ,EAAE;YACf,MAAM,CAAC,KAAK,CAAC,sBAAsB,IAAA,2BAAqB,EAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,YAAY,GAAG,EAAE,CAAC,CAAA;YACpG,OAAO;gBACH,KAAK,EAAE,EAAE;gBACT,QAAQ,EAAE,IAAI;aACjB,CAAA;SACJ;IACL,CAAC;CACJ;AA3BD,kEA2BC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { Node } from 'yallist';
|
|
2
|
+
interface Item<K, V> {
|
|
3
|
+
value: V;
|
|
4
|
+
dropQueueNode: Node<K>;
|
|
5
|
+
expiresAt: number;
|
|
6
|
+
}
|
|
7
|
+
export interface FifoMapWithTtlOptions<K> {
|
|
8
|
+
ttlInMs: number;
|
|
9
|
+
maxSize: number;
|
|
10
|
+
onItemDropped?: (key: K) => void;
|
|
11
|
+
timeProvider?: () => number;
|
|
12
|
+
debugMode?: boolean;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* A "Map" implementation with a maximum size and TTL expiration on entries.
|
|
16
|
+
*
|
|
17
|
+
* When full, room is made for new entries by dropping existing by FIFO method.
|
|
18
|
+
*
|
|
19
|
+
* Entries have a TTL after which they are considered stale. Stale items are
|
|
20
|
+
* not returned when querying.
|
|
21
|
+
*
|
|
22
|
+
*/
|
|
23
|
+
export declare class FifoMapWithTTL<K, V> {
|
|
24
|
+
private readonly items;
|
|
25
|
+
private readonly dropQueue;
|
|
26
|
+
private readonly ttlInMs;
|
|
27
|
+
private readonly maxSize;
|
|
28
|
+
private readonly onItemDropped;
|
|
29
|
+
private readonly timeProvider;
|
|
30
|
+
constructor({ ttlInMs, maxSize, onItemDropped, timeProvider }: FifoMapWithTtlOptions<K>);
|
|
31
|
+
set(key: K, value: V): void;
|
|
32
|
+
delete(key: K): void;
|
|
33
|
+
get(key: K): V | undefined;
|
|
34
|
+
values(): Item<K, V>[];
|
|
35
|
+
}
|
|
36
|
+
export {};
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FifoMapWithTTL = void 0;
|
|
4
|
+
const yallist_1 = require("yallist");
|
|
5
|
+
/**
|
|
6
|
+
* A "Map" implementation with a maximum size and TTL expiration on entries.
|
|
7
|
+
*
|
|
8
|
+
* When full, room is made for new entries by dropping existing by FIFO method.
|
|
9
|
+
*
|
|
10
|
+
* Entries have a TTL after which they are considered stale. Stale items are
|
|
11
|
+
* not returned when querying.
|
|
12
|
+
*
|
|
13
|
+
*/
|
|
14
|
+
class FifoMapWithTTL {
|
|
15
|
+
constructor({ ttlInMs, maxSize, onItemDropped = () => { }, timeProvider = Date.now }) {
|
|
16
|
+
// class invariant: the keys present in `items` and `dropQueue` are the same set.
|
|
17
|
+
this.items = new Map();
|
|
18
|
+
this.dropQueue = (0, yallist_1.create)(); // queue is used to determine deletion order when full
|
|
19
|
+
if (ttlInMs < 0) {
|
|
20
|
+
throw new Error(`ttlInMs (${ttlInMs}) cannot be < 0`);
|
|
21
|
+
}
|
|
22
|
+
if (maxSize < 0) {
|
|
23
|
+
throw new Error(`maxSize (${maxSize}) cannot be < 0`);
|
|
24
|
+
}
|
|
25
|
+
this.ttlInMs = ttlInMs;
|
|
26
|
+
this.maxSize = maxSize;
|
|
27
|
+
this.onItemDropped = onItemDropped;
|
|
28
|
+
this.timeProvider = timeProvider;
|
|
29
|
+
}
|
|
30
|
+
set(key, value) {
|
|
31
|
+
if (this.maxSize === 0) {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
if (this.items.size > this.maxSize) {
|
|
35
|
+
throw new Error('assertion error: maximum size exceeded');
|
|
36
|
+
}
|
|
37
|
+
// delete an existing entry if exists
|
|
38
|
+
this.delete(key);
|
|
39
|
+
// make room for new entry
|
|
40
|
+
if (this.items.size === this.maxSize) {
|
|
41
|
+
const keyToDel = this.dropQueue.shift();
|
|
42
|
+
if (keyToDel === undefined) {
|
|
43
|
+
throw new Error('assertion error: queue empty but still have items');
|
|
44
|
+
}
|
|
45
|
+
this.items.delete(keyToDel);
|
|
46
|
+
this.onItemDropped(keyToDel);
|
|
47
|
+
}
|
|
48
|
+
// add entry
|
|
49
|
+
const dropQueueNode = new yallist_1.Node(key);
|
|
50
|
+
this.dropQueue.pushNode(dropQueueNode);
|
|
51
|
+
this.items.set(key, {
|
|
52
|
+
value,
|
|
53
|
+
dropQueueNode,
|
|
54
|
+
expiresAt: this.timeProvider() + this.ttlInMs
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
delete(key) {
|
|
58
|
+
const item = this.items.get(key);
|
|
59
|
+
if (item !== undefined) {
|
|
60
|
+
this.items.delete(key);
|
|
61
|
+
this.dropQueue.removeNode(item.dropQueueNode);
|
|
62
|
+
this.onItemDropped(key);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
get(key) {
|
|
66
|
+
const item = this.items.get(key);
|
|
67
|
+
if (item === undefined) {
|
|
68
|
+
return undefined;
|
|
69
|
+
}
|
|
70
|
+
if (item.expiresAt <= this.timeProvider()) {
|
|
71
|
+
this.delete(key);
|
|
72
|
+
return undefined;
|
|
73
|
+
}
|
|
74
|
+
return item.value;
|
|
75
|
+
}
|
|
76
|
+
values() {
|
|
77
|
+
return [...this.items.values()];
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
exports.FifoMapWithTTL = FifoMapWithTTL;
|
|
81
|
+
//# sourceMappingURL=FifoMapWithTTL.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FifoMapWithTTL.js","sourceRoot":"","sources":["../../../../src/logic/propagation/FifoMapWithTTL.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { StreamMessage } from '../../proto/packages/trackerless-network/protos/NetworkRpc';
|
|
2
|
+
type SendToNeighborFn = (neighborId: string, msg: StreamMessage) => Promise<void>;
|
|
3
|
+
interface ConstructorOptions {
|
|
4
|
+
sendToNeighbor: SendToNeighborFn;
|
|
5
|
+
minPropagationTargets: number;
|
|
6
|
+
ttl?: number;
|
|
7
|
+
maxMessages?: number;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Message propagation logic of a node. Given a message, this class will actively attempt to propagate it to
|
|
11
|
+
* `minPropagationTargets` neighbors until success or TTL expiration.
|
|
12
|
+
*
|
|
13
|
+
* Setting `minPropagationTargets = 0` effectively disables any propagation reattempts. A message will then
|
|
14
|
+
* only be propagated exactly once, to neighbors that are present at that moment, in a fire-and-forget manner.
|
|
15
|
+
*/
|
|
16
|
+
export declare class Propagation {
|
|
17
|
+
private readonly sendToNeighbor;
|
|
18
|
+
private readonly minPropagationTargets;
|
|
19
|
+
private readonly activeTaskStore;
|
|
20
|
+
constructor({ sendToNeighbor, minPropagationTargets, ttl, maxMessages }: ConstructorOptions);
|
|
21
|
+
/**
|
|
22
|
+
* Node should invoke this when it learns about a new message
|
|
23
|
+
*/
|
|
24
|
+
feedUnseenMessage(message: StreamMessage, targets: string[], source: string | null): void;
|
|
25
|
+
/**
|
|
26
|
+
* Node should invoke this when it learns about a new node stream assignment
|
|
27
|
+
*/
|
|
28
|
+
onNeighborJoined(neighborId: string): void;
|
|
29
|
+
private sendAndAwaitThenMark;
|
|
30
|
+
}
|
|
31
|
+
export {};
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Propagation = void 0;
|
|
4
|
+
const PropagationTaskStore_1 = require("./PropagationTaskStore");
|
|
5
|
+
const DEFAULT_MAX_MESSAGES = 150;
|
|
6
|
+
const DEFAULT_TTL = 30 * 1000;
|
|
7
|
+
/**
|
|
8
|
+
* Message propagation logic of a node. Given a message, this class will actively attempt to propagate it to
|
|
9
|
+
* `minPropagationTargets` neighbors until success or TTL expiration.
|
|
10
|
+
*
|
|
11
|
+
* Setting `minPropagationTargets = 0` effectively disables any propagation reattempts. A message will then
|
|
12
|
+
* only be propagated exactly once, to neighbors that are present at that moment, in a fire-and-forget manner.
|
|
13
|
+
*/
|
|
14
|
+
class Propagation {
|
|
15
|
+
constructor({ sendToNeighbor, minPropagationTargets, ttl = DEFAULT_TTL, maxMessages = DEFAULT_MAX_MESSAGES }) {
|
|
16
|
+
this.sendToNeighbor = sendToNeighbor;
|
|
17
|
+
this.minPropagationTargets = minPropagationTargets;
|
|
18
|
+
this.activeTaskStore = new PropagationTaskStore_1.PropagationTaskStore(ttl, maxMessages);
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Node should invoke this when it learns about a new message
|
|
22
|
+
*/
|
|
23
|
+
feedUnseenMessage(message, targets, source) {
|
|
24
|
+
const task = {
|
|
25
|
+
message,
|
|
26
|
+
source,
|
|
27
|
+
handledNeighbors: new Set()
|
|
28
|
+
};
|
|
29
|
+
this.activeTaskStore.add(task);
|
|
30
|
+
for (const target of targets) {
|
|
31
|
+
this.sendAndAwaitThenMark(task, target);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Node should invoke this when it learns about a new node stream assignment
|
|
36
|
+
*/
|
|
37
|
+
onNeighborJoined(neighborId) {
|
|
38
|
+
const tasksOfStream = this.activeTaskStore.get();
|
|
39
|
+
for (const task of tasksOfStream) {
|
|
40
|
+
this.sendAndAwaitThenMark(task, neighborId);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
sendAndAwaitThenMark({ message, source, handledNeighbors }, neighborId) {
|
|
44
|
+
if (!handledNeighbors.has(neighborId) && neighborId !== source) {
|
|
45
|
+
(async () => {
|
|
46
|
+
try {
|
|
47
|
+
await this.sendToNeighbor(neighborId, message);
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
// Side-note: due to asynchronicity, the task being modified at this point could already be stale and
|
|
53
|
+
// deleted from `activeTaskStore`. However, as modifying it or re-deleting it is pretty much
|
|
54
|
+
// inconsequential at this point, leaving the logic as is.
|
|
55
|
+
handledNeighbors.add(neighborId);
|
|
56
|
+
if (handledNeighbors.size >= this.minPropagationTargets) {
|
|
57
|
+
this.activeTaskStore.delete(message.messageRef);
|
|
58
|
+
}
|
|
59
|
+
})();
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
exports.Propagation = Propagation;
|
|
64
|
+
//# sourceMappingURL=Propagation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Propagation.js","sourceRoot":"","sources":["../../../../src/logic/propagation/Propagation.ts"],"names":[],"mappings":";;;AACA,iEAA8E;AAW9E,MAAM,oBAAoB,GAAG,GAAG,CAAA;AAChC,MAAM,WAAW,GAAG,EAAE,GAAG,IAAI,CAAA;AAE7B;;;;;;GAMG;AAEH,MAAa,WAAW;IAKpB,YAAY,EACR,cAAc,EACd,qBAAqB,EACrB,GAAG,GAAG,WAAW,EACjB,WAAW,GAAG,oBAAoB,EACjB;QACjB,IAAI,CAAC,cAAc,GAAG,cAAc,CAAA;QACpC,IAAI,CAAC,qBAAqB,GAAG,qBAAqB,CAAA;QAClD,IAAI,CAAC,eAAe,GAAG,IAAI,2CAAoB,CAAC,GAAG,EAAE,WAAW,CAAC,CAAA;IACrE,CAAC;IAED;;OAEG;IACH,iBAAiB,CAAC,OAAsB,EAAE,OAAiB,EAAE,MAAqB;QAC9E,MAAM,IAAI,GAAG;YACT,OAAO;YACP,MAAM;YACN,gBAAgB,EAAE,IAAI,GAAG,EAAU;SACtC,CAAA;QACD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAC9B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;YAC1B,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;SAC1C;IACL,CAAC;IAED;;OAEG;IACH,gBAAgB,CAAC,UAAkB;QAC/B,MAAM,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,CAAA;QAChD,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE;YAC9B,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;SAC9C;IACL,CAAC;IAEO,oBAAoB,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAmB,EAAE,UAAkB;QACnG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,UAAU,KAAK,MAAM,EAAE;YAC5D,CAAC,KAAK,IAAI,EAAE;gBACR,IAAI;oBACA,MAAM,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;iBACjD;gBAAC,MAAM;oBACJ,OAAM;iBACT;gBACD,qGAAqG;gBACrG,4FAA4F;gBAC5F,0DAA0D;gBAC1D,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;gBAChC,IAAI,gBAAgB,CAAC,IAAI,IAAI,IAAI,CAAC,qBAAqB,EAAE;oBACrD,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,UAAW,CAAC,CAAA;iBACnD;YACL,CAAC,CAAC,EAAE,CAAA;SACP;IACL,CAAC;CACJ;AA3DD,kCA2DC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { MessageRef, StreamMessage } from '../../proto/packages/trackerless-network/protos/NetworkRpc';
|
|
2
|
+
export interface PropagationTask {
|
|
3
|
+
message: StreamMessage;
|
|
4
|
+
source: string | null;
|
|
5
|
+
handledNeighbors: Set<string>;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Keeps track of propagation tasks for the needs of message propagation logic.
|
|
9
|
+
*
|
|
10
|
+
* Properties:
|
|
11
|
+
* - Allows fetching propagation tasks by StreamPartID
|
|
12
|
+
* - Upper bound on number of tasks stored, replacement policy if FIFO
|
|
13
|
+
* - Items have a TTL, after which they are considered stale and not returned when querying
|
|
14
|
+
**/
|
|
15
|
+
export declare class PropagationTaskStore {
|
|
16
|
+
private readonly tasks;
|
|
17
|
+
constructor(ttlInMs: number, maxTasks: number);
|
|
18
|
+
get(): PropagationTask[];
|
|
19
|
+
add(task: PropagationTask): void;
|
|
20
|
+
delete(messageId: MessageRef): void;
|
|
21
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PropagationTaskStore = void 0;
|
|
4
|
+
const FifoMapWithTTL_1 = require("./FifoMapWithTTL");
|
|
5
|
+
/**
|
|
6
|
+
* Keeps track of propagation tasks for the needs of message propagation logic.
|
|
7
|
+
*
|
|
8
|
+
* Properties:
|
|
9
|
+
* - Allows fetching propagation tasks by StreamPartID
|
|
10
|
+
* - Upper bound on number of tasks stored, replacement policy if FIFO
|
|
11
|
+
* - Items have a TTL, after which they are considered stale and not returned when querying
|
|
12
|
+
**/
|
|
13
|
+
class PropagationTaskStore {
|
|
14
|
+
constructor(ttlInMs, maxTasks) {
|
|
15
|
+
this.tasks = new FifoMapWithTTL_1.FifoMapWithTTL({
|
|
16
|
+
ttlInMs,
|
|
17
|
+
maxSize: maxTasks
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
get() {
|
|
21
|
+
return this.tasks.values().map((task) => task.value);
|
|
22
|
+
}
|
|
23
|
+
add(task) {
|
|
24
|
+
const messageId = task.message.messageRef;
|
|
25
|
+
this.tasks.set(messageId, task);
|
|
26
|
+
}
|
|
27
|
+
delete(messageId) {
|
|
28
|
+
this.tasks.delete(messageId); // causes `onKeyDropped` to be invoked
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
exports.PropagationTaskStore = PropagationTaskStore;
|
|
32
|
+
//# sourceMappingURL=PropagationTaskStore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PropagationTaskStore.js","sourceRoot":"","sources":["../../../../src/logic/propagation/PropagationTaskStore.ts"],"names":[],"mappings":";;;AACA,qDAAiD;AAQjD;;;;;;;GAOG;AACH,MAAa,oBAAoB;IAG7B,YAAY,OAAe,EAAE,QAAgB;QACzC,IAAI,CAAC,KAAK,GAAG,IAAI,+BAAc,CAA8B;YACzD,OAAO;YACP,OAAO,EAAE,QAAQ;SACpB,CAAC,CAAA;IACN,CAAC;IAED,GAAG;QACC,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACxD,CAAC;IAED,GAAG,CAAC,IAAqB;QACrB,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAW,CAAA;QAC1C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;IACnC,CAAC;IAED,MAAM,CAAC,SAAqB;QACxB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA,CAAC,sCAAsC;IACvE,CAAC;CACJ;AAtBD,oDAsBC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ContentMessageTranslator = void 0;
|
|
4
|
+
// eslint-disable-next-line @typescript-eslint/no-extraneous-class
|
|
5
|
+
class ContentMessageTranslator {
|
|
6
|
+
static toProtobuf(msg) {
|
|
7
|
+
const translatedMessage = {
|
|
8
|
+
body: msg
|
|
9
|
+
};
|
|
10
|
+
return translatedMessage;
|
|
11
|
+
}
|
|
12
|
+
static toClientProtocol(msg) {
|
|
13
|
+
return msg.body;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
exports.ContentMessageTranslator = ContentMessageTranslator;
|
|
17
|
+
//# sourceMappingURL=ContentMessageTranslator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ContentMessageTranslator.js","sourceRoot":"","sources":["../../../../../src/logic/protocol-integration/stream-message/ContentMessageTranslator.ts"],"names":[],"mappings":";;;AAEA,kEAAkE;AAClE,MAAa,wBAAwB;IAEjC,MAAM,CAAC,UAAU,CAAC,GAAW;QACzB,MAAM,iBAAiB,GAAmB;YACtC,IAAI,EAAE,GAAG;SACZ,CAAA;QACD,OAAO,iBAAiB,CAAA;IAC5B,CAAC;IAED,MAAM,CAAC,gBAAgB,CAAC,GAAmB;QACvC,OAAO,GAAG,CAAC,IAAI,CAAA;IACnB,CAAC;CACJ;AAZD,4DAYC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { GroupKeyRequest as OldGroupKeyRequest } from '@streamr/protocol';
|
|
2
|
+
import { GroupKeyRequest } from '../../../proto/packages/trackerless-network/protos/NetworkRpc';
|
|
3
|
+
export declare class GroupKeyRequestTranslator {
|
|
4
|
+
static toProtobuf(msg: OldGroupKeyRequest): GroupKeyRequest;
|
|
5
|
+
static toClientProtocol(msg: GroupKeyRequest): OldGroupKeyRequest;
|
|
6
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GroupKeyRequestTranslator = void 0;
|
|
4
|
+
const protocol_1 = require("@streamr/protocol");
|
|
5
|
+
// eslint-disable-next-line @typescript-eslint/no-extraneous-class
|
|
6
|
+
class GroupKeyRequestTranslator {
|
|
7
|
+
static toProtobuf(msg) {
|
|
8
|
+
const translated = {
|
|
9
|
+
recipient: msg.recipient,
|
|
10
|
+
requestId: msg.requestId,
|
|
11
|
+
rsaPublicKey: msg.rsaPublicKey,
|
|
12
|
+
groupKeyIds: msg.groupKeyIds
|
|
13
|
+
};
|
|
14
|
+
return translated;
|
|
15
|
+
}
|
|
16
|
+
static toClientProtocol(msg) {
|
|
17
|
+
const translated = new protocol_1.GroupKeyRequest({
|
|
18
|
+
recipient: msg.recipient,
|
|
19
|
+
requestId: msg.requestId,
|
|
20
|
+
rsaPublicKey: msg.rsaPublicKey,
|
|
21
|
+
groupKeyIds: msg.groupKeyIds
|
|
22
|
+
});
|
|
23
|
+
return translated;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
exports.GroupKeyRequestTranslator = GroupKeyRequestTranslator;
|
|
27
|
+
//# sourceMappingURL=GroupKeyRequestTranslator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GroupKeyRequestTranslator.js","sourceRoot":"","sources":["../../../../../src/logic/protocol-integration/stream-message/GroupKeyRequestTranslator.ts"],"names":[],"mappings":";;;AAAA,gDAAyE;AAIzE,kEAAkE;AAClE,MAAa,yBAAyB;IAElC,MAAM,CAAC,UAAU,CAAC,GAAuB;QACrC,MAAM,UAAU,GAAoB;YAChC,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,YAAY,EAAE,GAAG,CAAC,YAAY;YAC9B,WAAW,EAAE,GAAG,CAAC,WAAW;SAC/B,CAAA;QACD,OAAO,UAAU,CAAA;IACrB,CAAC;IAED,MAAM,CAAC,gBAAgB,CAAC,GAAoB;QACxC,MAAM,UAAU,GAAG,IAAI,0BAAkB,CAAC;YACtC,SAAS,EAAE,GAAG,CAAC,SAA4B;YAC3C,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,YAAY,EAAE,GAAG,CAAC,YAAY;YAC9B,WAAW,EAAE,GAAG,CAAC,WAAW;SAC/B,CAAC,CAAA;QACF,OAAO,UAAU,CAAA;IACrB,CAAC;CAEJ;AAtBD,8DAsBC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { GroupKeyResponse as OldGroupKeyResponse } from '@streamr/protocol';
|
|
2
|
+
import { GroupKeyResponse } from '../../../proto/packages/trackerless-network/protos/NetworkRpc';
|
|
3
|
+
export declare class GroupKeyResponseTranslator {
|
|
4
|
+
static toProtobuf(msg: OldGroupKeyResponse): GroupKeyResponse;
|
|
5
|
+
static toClientProtocol(msg: GroupKeyResponse): OldGroupKeyResponse;
|
|
6
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GroupKeyResponseTranslator = void 0;
|
|
4
|
+
const protocol_1 = require("@streamr/protocol");
|
|
5
|
+
// eslint-disable-next-line @typescript-eslint/no-extraneous-class
|
|
6
|
+
class GroupKeyResponseTranslator {
|
|
7
|
+
static toProtobuf(msg) {
|
|
8
|
+
const encryptedGroupKeys = msg.encryptedGroupKeys.map((groupKey) => {
|
|
9
|
+
const encryptedGroupKey = {
|
|
10
|
+
encryptedGroupKeyHex: groupKey.encryptedGroupKeyHex,
|
|
11
|
+
groupKeyId: groupKey.groupKeyId,
|
|
12
|
+
serialized: groupKey.serialized ?? undefined
|
|
13
|
+
};
|
|
14
|
+
return encryptedGroupKey;
|
|
15
|
+
});
|
|
16
|
+
const translated = {
|
|
17
|
+
recipient: msg.recipient,
|
|
18
|
+
requestId: msg.requestId,
|
|
19
|
+
encryptedGroupKeys
|
|
20
|
+
};
|
|
21
|
+
return translated;
|
|
22
|
+
}
|
|
23
|
+
static toClientProtocol(msg) {
|
|
24
|
+
const encryptedGroupKeys = msg.encryptedGroupKeys.map((groupKey) => new protocol_1.EncryptedGroupKey(groupKey.groupKeyId, groupKey.encryptedGroupKeyHex, groupKey.serialized));
|
|
25
|
+
return new protocol_1.GroupKeyResponse({
|
|
26
|
+
requestId: msg.requestId,
|
|
27
|
+
recipient: msg.recipient,
|
|
28
|
+
encryptedGroupKeys
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
exports.GroupKeyResponseTranslator = GroupKeyResponseTranslator;
|
|
33
|
+
//# sourceMappingURL=GroupKeyResponseTranslator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GroupKeyResponseTranslator.js","sourceRoot":"","sources":["../../../../../src/logic/protocol-integration/stream-message/GroupKeyResponseTranslator.ts"],"names":[],"mappings":";;;AAAA,gDAAsH;AAItH,kEAAkE;AAClE,MAAa,0BAA0B;IAEnC,MAAM,CAAC,UAAU,CAAC,GAAwB;QAEtC,MAAM,kBAAkB,GAAG,GAAG,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;YAC/D,MAAM,iBAAiB,GAAsB;gBACzC,oBAAoB,EAAE,QAAQ,CAAC,oBAAoB;gBACnD,UAAU,EAAE,QAAQ,CAAC,UAAU;gBAC/B,UAAU,EAAE,QAAQ,CAAC,UAAU,IAAI,SAAS;aAC/C,CAAA;YACD,OAAO,iBAAiB,CAAA;QAC5B,CAAC,CAAC,CAAA;QACF,MAAM,UAAU,GAAqB;YACjC,SAAS,EAAE,GAAG,CAAC,SAAmB;YAClC,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,kBAAkB;SACrB,CAAA;QACD,OAAO,UAAU,CAAA;IACrB,CAAC;IAED,MAAM,CAAC,gBAAgB,CAAC,GAAqB;QACzC,MAAM,kBAAkB,GAAG,GAAG,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,QAA2B,EAAE,EAAE,CAAC,IAAI,4BAAoB,CAC3G,QAAQ,CAAC,UAAU,EACnB,QAAQ,CAAC,oBAAoB,EAC7B,QAAQ,CAAC,UAAU,CACtB,CAAC,CAAA;QACF,OAAO,IAAI,2BAAmB,CAAC;YAC3B,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,SAAS,EAAE,GAAG,CAAC,SAA4B;YAC3C,kBAAkB;SACrB,CAAC,CAAA;IACN,CAAC;CACJ;AAhCD,gEAgCC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { StreamMessage as OldStreamMessage } from '@streamr/protocol';
|
|
2
|
+
import { StreamMessage } from '../../../proto/packages/trackerless-network/protos/NetworkRpc';
|
|
3
|
+
export declare class StreamMessageTranslator {
|
|
4
|
+
static toProtobuf(msg: OldStreamMessage): StreamMessage;
|
|
5
|
+
static toClientProtocol<T>(msg: StreamMessage): OldStreamMessage<T>;
|
|
6
|
+
}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.StreamMessageTranslator = void 0;
|
|
4
|
+
const protocol_1 = require("@streamr/protocol");
|
|
5
|
+
const NetworkRpc_1 = require("../../../proto/packages/trackerless-network/protos/NetworkRpc");
|
|
6
|
+
const ContentMessageTranslator_1 = require("./ContentMessageTranslator");
|
|
7
|
+
const GroupKeyRequestTranslator_1 = require("./GroupKeyRequestTranslator");
|
|
8
|
+
const GroupKeyResponseTranslator_1 = require("./GroupKeyResponseTranslator");
|
|
9
|
+
// eslint-disable-next-line @typescript-eslint/no-extraneous-class
|
|
10
|
+
class StreamMessageTranslator {
|
|
11
|
+
static toProtobuf(msg) {
|
|
12
|
+
let content;
|
|
13
|
+
let contentType;
|
|
14
|
+
if (msg.messageType === protocol_1.StreamMessageType.MESSAGE) {
|
|
15
|
+
content = NetworkRpc_1.ContentMessage.toBinary(ContentMessageTranslator_1.ContentMessageTranslator.toProtobuf(msg.serializedContent));
|
|
16
|
+
contentType = NetworkRpc_1.StreamMessageType.MESSAGE;
|
|
17
|
+
}
|
|
18
|
+
else if (msg.messageType === protocol_1.StreamMessageType.GROUP_KEY_REQUEST) {
|
|
19
|
+
content = NetworkRpc_1.GroupKeyRequest.toBinary(GroupKeyRequestTranslator_1.GroupKeyRequestTranslator.toProtobuf(protocol_1.GroupKeyRequest.deserialize(msg.serializedContent, protocol_1.StreamMessageType.GROUP_KEY_REQUEST)));
|
|
20
|
+
contentType = NetworkRpc_1.StreamMessageType.GROUP_KEY_REQUEST;
|
|
21
|
+
}
|
|
22
|
+
else if (msg.messageType === protocol_1.StreamMessageType.GROUP_KEY_RESPONSE) {
|
|
23
|
+
content = NetworkRpc_1.GroupKeyResponse.toBinary(GroupKeyResponseTranslator_1.GroupKeyResponseTranslator.toProtobuf(protocol_1.GroupKeyResponse.deserialize(msg.serializedContent, protocol_1.StreamMessageType.GROUP_KEY_RESPONSE)));
|
|
24
|
+
contentType = NetworkRpc_1.StreamMessageType.GROUP_KEY_RESPONSE;
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
throw new Error('invalid message type');
|
|
28
|
+
}
|
|
29
|
+
const messageRef = {
|
|
30
|
+
timestamp: msg.getTimestamp(),
|
|
31
|
+
sequenceNumber: msg.getSequenceNumber(),
|
|
32
|
+
streamId: msg.getStreamId(),
|
|
33
|
+
streamPartition: msg.getStreamPartition(),
|
|
34
|
+
publisherId: msg.getPublisherId(),
|
|
35
|
+
messageChainId: msg.getMsgChainId()
|
|
36
|
+
};
|
|
37
|
+
let previousMessageRef = undefined;
|
|
38
|
+
if (msg.getPreviousMessageRef()) {
|
|
39
|
+
previousMessageRef = {
|
|
40
|
+
timestamp: msg.getPreviousMessageRef().timestamp,
|
|
41
|
+
sequenceNumber: msg.getPreviousMessageRef().sequenceNumber,
|
|
42
|
+
streamId: msg.getStreamId(),
|
|
43
|
+
streamPartition: msg.getStreamPartition(),
|
|
44
|
+
publisherId: msg.getPublisherId(),
|
|
45
|
+
messageChainId: msg.getMsgChainId()
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
let newGroupKey = undefined;
|
|
49
|
+
if (msg.getNewGroupKey()) {
|
|
50
|
+
newGroupKey = {
|
|
51
|
+
encryptedGroupKeyHex: msg.getNewGroupKey().encryptedGroupKeyHex,
|
|
52
|
+
groupKeyId: msg.getNewGroupKey().groupKeyId,
|
|
53
|
+
serialized: msg.getNewGroupKey().serialized ?? undefined
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
const translated = {
|
|
57
|
+
content: content,
|
|
58
|
+
encryptionType: msg.encryptionType,
|
|
59
|
+
messageRef: messageRef,
|
|
60
|
+
previousMessageRef,
|
|
61
|
+
messageType: contentType,
|
|
62
|
+
signature: msg.signature,
|
|
63
|
+
groupKeyId: msg.groupKeyId ?? undefined,
|
|
64
|
+
newGroupKey,
|
|
65
|
+
};
|
|
66
|
+
return translated;
|
|
67
|
+
}
|
|
68
|
+
static toClientProtocol(msg) {
|
|
69
|
+
let content;
|
|
70
|
+
let contentType;
|
|
71
|
+
if (msg.messageType === NetworkRpc_1.StreamMessageType.MESSAGE) {
|
|
72
|
+
contentType = protocol_1.StreamMessageType.MESSAGE;
|
|
73
|
+
content = ContentMessageTranslator_1.ContentMessageTranslator.toClientProtocol(NetworkRpc_1.ContentMessage.fromBinary(msg.content));
|
|
74
|
+
}
|
|
75
|
+
else if (msg.messageType === NetworkRpc_1.StreamMessageType.GROUP_KEY_REQUEST) {
|
|
76
|
+
contentType = protocol_1.StreamMessageType.GROUP_KEY_REQUEST;
|
|
77
|
+
content = GroupKeyRequestTranslator_1.GroupKeyRequestTranslator.toClientProtocol(NetworkRpc_1.GroupKeyRequest.fromBinary(msg.content)).serialize();
|
|
78
|
+
}
|
|
79
|
+
else if (msg.messageType === NetworkRpc_1.StreamMessageType.GROUP_KEY_RESPONSE) {
|
|
80
|
+
contentType = protocol_1.StreamMessageType.GROUP_KEY_RESPONSE;
|
|
81
|
+
content = GroupKeyResponseTranslator_1.GroupKeyResponseTranslator.toClientProtocol(NetworkRpc_1.GroupKeyResponse.fromBinary(msg.content)).serialize();
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
throw new Error('invalid message type');
|
|
85
|
+
}
|
|
86
|
+
const messageId = new protocol_1.MessageID(msg.messageRef.streamId, msg.messageRef.streamPartition, Number(msg.messageRef.timestamp), msg.messageRef.sequenceNumber, msg.messageRef.publisherId, msg.messageRef.messageChainId);
|
|
87
|
+
let prevMsgRef = undefined;
|
|
88
|
+
if (msg.previousMessageRef) {
|
|
89
|
+
prevMsgRef = new protocol_1.MessageRef(Number(msg.previousMessageRef.timestamp), msg.previousMessageRef.sequenceNumber);
|
|
90
|
+
}
|
|
91
|
+
let newGroupKey = undefined;
|
|
92
|
+
if (msg.newGroupKey) {
|
|
93
|
+
newGroupKey = new protocol_1.EncryptedGroupKey(msg.newGroupKey.groupKeyId, msg.newGroupKey.encryptedGroupKeyHex, msg.newGroupKey.serialized);
|
|
94
|
+
}
|
|
95
|
+
const translated = new protocol_1.StreamMessage({
|
|
96
|
+
signature: msg.signature,
|
|
97
|
+
newGroupKey,
|
|
98
|
+
groupKeyId: msg.groupKeyId,
|
|
99
|
+
content,
|
|
100
|
+
messageType: contentType,
|
|
101
|
+
encryptionType: msg.encryptionType,
|
|
102
|
+
messageId,
|
|
103
|
+
prevMsgRef
|
|
104
|
+
});
|
|
105
|
+
return translated;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
exports.StreamMessageTranslator = StreamMessageTranslator;
|
|
109
|
+
//# sourceMappingURL=StreamMessageTranslator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StreamMessageTranslator.js","sourceRoot":"","sources":["../../../../../src/logic/protocol-integration/stream-message/StreamMessageTranslator.ts"],"names":[],"mappings":"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"}
|