@streamr/trackerless-network 103.1.2 → 103.2.0-experiment.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (172) hide show
  1. package/dist/exports.cjs +4489 -0
  2. package/dist/exports.cjs.map +1 -0
  3. package/dist/exports.d.ts +1391 -0
  4. package/dist/exports.js +4477 -0
  5. package/dist/exports.js.map +1 -0
  6. package/package.json +25 -18
  7. package/dist/generated/google/protobuf/any.d.ts +0 -180
  8. package/dist/generated/google/protobuf/any.js +0 -155
  9. package/dist/generated/google/protobuf/any.js.map +0 -1
  10. package/dist/generated/google/protobuf/empty.d.ts +0 -31
  11. package/dist/generated/google/protobuf/empty.js +0 -45
  12. package/dist/generated/google/protobuf/empty.js.map +0 -1
  13. package/dist/generated/google/protobuf/timestamp.d.ts +0 -156
  14. package/dist/generated/google/protobuf/timestamp.js +0 -136
  15. package/dist/generated/google/protobuf/timestamp.js.map +0 -1
  16. package/dist/generated/packages/dht/protos/DhtRpc.client.d.ts +0 -371
  17. package/dist/generated/packages/dht/protos/DhtRpc.client.js +0 -292
  18. package/dist/generated/packages/dht/protos/DhtRpc.client.js.map +0 -1
  19. package/dist/generated/packages/dht/protos/DhtRpc.d.ts +0 -1031
  20. package/dist/generated/packages/dht/protos/DhtRpc.js +0 -702
  21. package/dist/generated/packages/dht/protos/DhtRpc.js.map +0 -1
  22. package/dist/generated/packages/dht/protos/DhtRpc.server.d.ts +0 -168
  23. package/dist/generated/packages/dht/protos/DhtRpc.server.js +0 -3
  24. package/dist/generated/packages/dht/protos/DhtRpc.server.js.map +0 -1
  25. package/dist/generated/packages/proto-rpc/protos/ProtoRpc.d.ts +0 -87
  26. package/dist/generated/packages/proto-rpc/protos/ProtoRpc.js +0 -66
  27. package/dist/generated/packages/proto-rpc/protos/ProtoRpc.js.map +0 -1
  28. package/dist/generated/packages/trackerless-network/protos/NetworkRpc.client.d.ts +0 -237
  29. package/dist/generated/packages/trackerless-network/protos/NetworkRpc.client.js +0 -190
  30. package/dist/generated/packages/trackerless-network/protos/NetworkRpc.client.js.map +0 -1
  31. package/dist/generated/packages/trackerless-network/protos/NetworkRpc.d.ts +0 -687
  32. package/dist/generated/packages/trackerless-network/protos/NetworkRpc.js +0 -479
  33. package/dist/generated/packages/trackerless-network/protos/NetworkRpc.js.map +0 -1
  34. package/dist/generated/packages/trackerless-network/protos/NetworkRpc.server.d.ts +0 -102
  35. package/dist/generated/packages/trackerless-network/protos/NetworkRpc.server.js +0 -3
  36. package/dist/generated/packages/trackerless-network/protos/NetworkRpc.server.js.map +0 -1
  37. package/dist/package.json +0 -56
  38. package/dist/src/ContentDeliveryManager.d.ts +0 -82
  39. package/dist/src/ContentDeliveryManager.js +0 -325
  40. package/dist/src/ContentDeliveryManager.js.map +0 -1
  41. package/dist/src/NetworkNode.d.ts +0 -44
  42. package/dist/src/NetworkNode.js +0 -98
  43. package/dist/src/NetworkNode.js.map +0 -1
  44. package/dist/src/NetworkStack.d.ts +0 -36
  45. package/dist/src/NetworkStack.js +0 -165
  46. package/dist/src/NetworkStack.js.map +0 -1
  47. package/dist/src/NodeInfoClient.d.ts +0 -9
  48. package/dist/src/NodeInfoClient.js +0 -21
  49. package/dist/src/NodeInfoClient.js.map +0 -1
  50. package/dist/src/NodeInfoRpcLocal.d.ts +0 -12
  51. package/dist/src/NodeInfoRpcLocal.js +0 -22
  52. package/dist/src/NodeInfoRpcLocal.js.map +0 -1
  53. package/dist/src/NodeInfoRpcRemote.d.ts +0 -6
  54. package/dist/src/NodeInfoRpcRemote.js +0 -11
  55. package/dist/src/NodeInfoRpcRemote.js.map +0 -1
  56. package/dist/src/StreamPartNetworkSplitAvoidance.d.ts +0 -18
  57. package/dist/src/StreamPartNetworkSplitAvoidance.js +0 -74
  58. package/dist/src/StreamPartNetworkSplitAvoidance.js.map +0 -1
  59. package/dist/src/StreamPartReconnect.d.ts +0 -11
  60. package/dist/src/StreamPartReconnect.js +0 -37
  61. package/dist/src/StreamPartReconnect.js.map +0 -1
  62. package/dist/src/content-delivery-layer/ContentDeliveryLayerNode.d.ts +0 -78
  63. package/dist/src/content-delivery-layer/ContentDeliveryLayerNode.js +0 -240
  64. package/dist/src/content-delivery-layer/ContentDeliveryLayerNode.js.map +0 -1
  65. package/dist/src/content-delivery-layer/ContentDeliveryRpcLocal.d.ts +0 -23
  66. package/dist/src/content-delivery-layer/ContentDeliveryRpcLocal.js +0 -40
  67. package/dist/src/content-delivery-layer/ContentDeliveryRpcLocal.js.map +0 -1
  68. package/dist/src/content-delivery-layer/ContentDeliveryRpcRemote.d.ts +0 -11
  69. package/dist/src/content-delivery-layer/ContentDeliveryRpcRemote.js +0 -38
  70. package/dist/src/content-delivery-layer/ContentDeliveryRpcRemote.js.map +0 -1
  71. package/dist/src/content-delivery-layer/DuplicateMessageDetector.d.ts +0 -55
  72. package/dist/src/content-delivery-layer/DuplicateMessageDetector.js +0 -159
  73. package/dist/src/content-delivery-layer/DuplicateMessageDetector.js.map +0 -1
  74. package/dist/src/content-delivery-layer/NodeList.d.ts +0 -26
  75. package/dist/src/content-delivery-layer/NodeList.js +0 -93
  76. package/dist/src/content-delivery-layer/NodeList.js.map +0 -1
  77. package/dist/src/content-delivery-layer/createContentDeliveryLayerNode.d.ts +0 -14
  78. package/dist/src/content-delivery-layer/createContentDeliveryLayerNode.js +0 -129
  79. package/dist/src/content-delivery-layer/createContentDeliveryLayerNode.js.map +0 -1
  80. package/dist/src/content-delivery-layer/formStreamPartDeliveryServiceId.d.ts +0 -3
  81. package/dist/src/content-delivery-layer/formStreamPartDeliveryServiceId.js +0 -9
  82. package/dist/src/content-delivery-layer/formStreamPartDeliveryServiceId.js.map +0 -1
  83. package/dist/src/content-delivery-layer/inspection/InspectSession.d.ts +0 -19
  84. package/dist/src/content-delivery-layer/inspection/InspectSession.js +0 -43
  85. package/dist/src/content-delivery-layer/inspection/InspectSession.js.map +0 -1
  86. package/dist/src/content-delivery-layer/inspection/Inspector.d.ts +0 -30
  87. package/dist/src/content-delivery-layer/inspection/Inspector.js +0 -75
  88. package/dist/src/content-delivery-layer/inspection/Inspector.js.map +0 -1
  89. package/dist/src/content-delivery-layer/neighbor-discovery/HandshakeRpcLocal.d.ts +0 -29
  90. package/dist/src/content-delivery-layer/neighbor-discovery/HandshakeRpcLocal.js +0 -106
  91. package/dist/src/content-delivery-layer/neighbor-discovery/HandshakeRpcLocal.js.map +0 -1
  92. package/dist/src/content-delivery-layer/neighbor-discovery/HandshakeRpcRemote.d.ts +0 -14
  93. package/dist/src/content-delivery-layer/neighbor-discovery/HandshakeRpcRemote.js +0 -55
  94. package/dist/src/content-delivery-layer/neighbor-discovery/HandshakeRpcRemote.js.map +0 -1
  95. package/dist/src/content-delivery-layer/neighbor-discovery/Handshaker.d.ts +0 -32
  96. package/dist/src/content-delivery-layer/neighbor-discovery/Handshaker.js +0 -149
  97. package/dist/src/content-delivery-layer/neighbor-discovery/Handshaker.js.map +0 -1
  98. package/dist/src/content-delivery-layer/neighbor-discovery/NeighborFinder.d.ts +0 -22
  99. package/dist/src/content-delivery-layer/neighbor-discovery/NeighborFinder.js +0 -64
  100. package/dist/src/content-delivery-layer/neighbor-discovery/NeighborFinder.js.map +0 -1
  101. package/dist/src/content-delivery-layer/neighbor-discovery/NeighborUpdateManager.d.ts +0 -27
  102. package/dist/src/content-delivery-layer/neighbor-discovery/NeighborUpdateManager.js +0 -47
  103. package/dist/src/content-delivery-layer/neighbor-discovery/NeighborUpdateManager.js.map +0 -1
  104. package/dist/src/content-delivery-layer/neighbor-discovery/NeighborUpdateRpcLocal.d.ts +0 -25
  105. package/dist/src/content-delivery-layer/neighbor-discovery/NeighborUpdateRpcLocal.js +0 -52
  106. package/dist/src/content-delivery-layer/neighbor-discovery/NeighborUpdateRpcLocal.js.map +0 -1
  107. package/dist/src/content-delivery-layer/neighbor-discovery/NeighborUpdateRpcRemote.d.ts +0 -11
  108. package/dist/src/content-delivery-layer/neighbor-discovery/NeighborUpdateRpcRemote.js +0 -31
  109. package/dist/src/content-delivery-layer/neighbor-discovery/NeighborUpdateRpcRemote.js.map +0 -1
  110. package/dist/src/content-delivery-layer/plumtree/PausedNeighbors.d.ts +0 -12
  111. package/dist/src/content-delivery-layer/plumtree/PausedNeighbors.js +0 -50
  112. package/dist/src/content-delivery-layer/plumtree/PausedNeighbors.js.map +0 -1
  113. package/dist/src/content-delivery-layer/plumtree/PlumtreeManager.d.ts +0 -37
  114. package/dist/src/content-delivery-layer/plumtree/PlumtreeManager.js +0 -141
  115. package/dist/src/content-delivery-layer/plumtree/PlumtreeManager.js.map +0 -1
  116. package/dist/src/content-delivery-layer/plumtree/PlumtreeRpcLocal.d.ts +0 -20
  117. package/dist/src/content-delivery-layer/plumtree/PlumtreeRpcLocal.js +0 -37
  118. package/dist/src/content-delivery-layer/plumtree/PlumtreeRpcLocal.js.map +0 -1
  119. package/dist/src/content-delivery-layer/plumtree/PlumtreeRpcRemote.d.ts +0 -8
  120. package/dist/src/content-delivery-layer/plumtree/PlumtreeRpcRemote.js +0 -26
  121. package/dist/src/content-delivery-layer/plumtree/PlumtreeRpcRemote.js.map +0 -1
  122. package/dist/src/content-delivery-layer/propagation/FifoMapWithTTL.d.ts +0 -29
  123. package/dist/src/content-delivery-layer/propagation/FifoMapWithTTL.js +0 -93
  124. package/dist/src/content-delivery-layer/propagation/FifoMapWithTTL.js.map +0 -1
  125. package/dist/src/content-delivery-layer/propagation/Propagation.d.ts +0 -35
  126. package/dist/src/content-delivery-layer/propagation/Propagation.js +0 -68
  127. package/dist/src/content-delivery-layer/propagation/Propagation.js.map +0 -1
  128. package/dist/src/content-delivery-layer/propagation/PropagationTaskStore.d.ts +0 -22
  129. package/dist/src/content-delivery-layer/propagation/PropagationTaskStore.js +0 -33
  130. package/dist/src/content-delivery-layer/propagation/PropagationTaskStore.js.map +0 -1
  131. package/dist/src/content-delivery-layer/proxy/ProxyClient.d.ts +0 -46
  132. package/dist/src/content-delivery-layer/proxy/ProxyClient.js +0 -214
  133. package/dist/src/content-delivery-layer/proxy/ProxyClient.js.map +0 -1
  134. package/dist/src/content-delivery-layer/proxy/ProxyConnectionRpcLocal.d.ts +0 -34
  135. package/dist/src/content-delivery-layer/proxy/ProxyConnectionRpcLocal.js +0 -72
  136. package/dist/src/content-delivery-layer/proxy/ProxyConnectionRpcLocal.js.map +0 -1
  137. package/dist/src/content-delivery-layer/proxy/ProxyConnectionRpcRemote.d.ts +0 -7
  138. package/dist/src/content-delivery-layer/proxy/ProxyConnectionRpcRemote.js +0 -27
  139. package/dist/src/content-delivery-layer/proxy/ProxyConnectionRpcRemote.js.map +0 -1
  140. package/dist/src/content-delivery-layer/temporary-connection/TemporaryConnectionRpcLocal.d.ts +0 -26
  141. package/dist/src/content-delivery-layer/temporary-connection/TemporaryConnectionRpcLocal.js +0 -45
  142. package/dist/src/content-delivery-layer/temporary-connection/TemporaryConnectionRpcLocal.js.map +0 -1
  143. package/dist/src/content-delivery-layer/temporary-connection/TemporaryConnectionRpcRemote.d.ts +0 -6
  144. package/dist/src/content-delivery-layer/temporary-connection/TemporaryConnectionRpcRemote.js +0 -31
  145. package/dist/src/content-delivery-layer/temporary-connection/TemporaryConnectionRpcRemote.js.map +0 -1
  146. package/dist/src/control-layer/ControlLayerNode.d.ts +0 -16
  147. package/dist/src/control-layer/ControlLayerNode.js +0 -3
  148. package/dist/src/control-layer/ControlLayerNode.js.map +0 -1
  149. package/dist/src/control-layer/ExternalNetworkRpc.d.ts +0 -16
  150. package/dist/src/control-layer/ExternalNetworkRpc.js +0 -23
  151. package/dist/src/control-layer/ExternalNetworkRpc.js.map +0 -1
  152. package/dist/src/control-layer/PeerDescriptorStoreManager.d.ts +0 -28
  153. package/dist/src/control-layer/PeerDescriptorStoreManager.js +0 -78
  154. package/dist/src/control-layer/PeerDescriptorStoreManager.js.map +0 -1
  155. package/dist/src/discovery-layer/DiscoveryLayerNode.d.ts +0 -28
  156. package/dist/src/discovery-layer/DiscoveryLayerNode.js +0 -3
  157. package/dist/src/discovery-layer/DiscoveryLayerNode.js.map +0 -1
  158. package/dist/src/exports.d.ts +0 -6
  159. package/dist/src/exports.js +0 -24
  160. package/dist/src/exports.js.map +0 -1
  161. package/dist/src/types.d.ts +0 -6
  162. package/dist/src/types.js +0 -3
  163. package/dist/src/types.js.map +0 -1
  164. package/dist/src/utils.d.ts +0 -3
  165. package/dist/src/utils.js +0 -17
  166. package/dist/src/utils.js.map +0 -1
  167. package/dist/test/benchmark/first-message.d.ts +0 -1
  168. package/dist/test/benchmark/first-message.js +0 -139
  169. package/dist/test/benchmark/first-message.js.map +0 -1
  170. package/dist/test/utils/utils.d.ts +0 -15
  171. package/dist/test/utils/utils.js +0 -106
  172. package/dist/test/utils/utils.js.map +0 -1
@@ -1,37 +0,0 @@
1
- import { DhtAddress, ListeningRpcCommunicator, PeerDescriptor } from '@streamr/dht';
2
- import { StreamMessage } from '../../../generated/packages/trackerless-network/protos/NetworkRpc';
3
- import { NodeList } from '../NodeList';
4
- import EventEmitter from 'eventemitter3';
5
- interface Options {
6
- neighbors: NodeList;
7
- localPeerDescriptor: PeerDescriptor;
8
- rpcCommunicator: ListeningRpcCommunicator;
9
- maxPausedNeighbors?: number;
10
- }
11
- export declare const MAX_PAUSED_NEIGHBORS_DEFAULT = 3;
12
- interface Events {
13
- message: (msg: StreamMessage) => void;
14
- }
15
- export declare class PlumtreeManager extends EventEmitter<Events> {
16
- private readonly neighbors;
17
- private readonly localPeerDescriptor;
18
- private readonly localPausedNeighbors;
19
- private readonly remotePausedNeighbors;
20
- private readonly rpcLocal;
21
- private readonly latestMessages;
22
- private readonly rpcCommunicator;
23
- private readonly metadataTimestampsAheadOfRealData;
24
- private readonly maxPausedNeighbors;
25
- constructor(options: Options);
26
- pauseNeighbor(node: PeerDescriptor, msgChainId: string): Promise<void>;
27
- resumeNeighbor(node: PeerDescriptor, msgChainId: string, fromTimestamp: number): Promise<void>;
28
- private onNeighborRemoved;
29
- getLatestMessageTimestamp(msgChainId: string): number;
30
- private sendBuffer;
31
- private onMetadata;
32
- private createRemote;
33
- broadcast(msg: StreamMessage, previousNode: DhtAddress): void;
34
- isNeighborPaused(node: PeerDescriptor, msgChainId: string): boolean;
35
- stop(): void;
36
- }
37
- export {};
@@ -1,141 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.PlumtreeManager = exports.MAX_PAUSED_NEIGHBORS_DEFAULT = void 0;
7
- const dht_1 = require("@streamr/dht");
8
- const NetworkRpc_1 = require("../../../generated/packages/trackerless-network/protos/NetworkRpc");
9
- const PlumtreeRpcLocal_1 = require("./PlumtreeRpcLocal");
10
- const PlumtreeRpcRemote_1 = require("./PlumtreeRpcRemote");
11
- const NetworkRpc_client_1 = require("../../../generated/packages/trackerless-network/protos/NetworkRpc.client");
12
- const eventemitter3_1 = __importDefault(require("eventemitter3"));
13
- const utils_1 = require("@streamr/utils");
14
- const ContentDeliveryRpcRemote_1 = require("../ContentDeliveryRpcRemote");
15
- const PausedNeighbors_1 = require("./PausedNeighbors");
16
- exports.MAX_PAUSED_NEIGHBORS_DEFAULT = 3;
17
- const logger = new utils_1.Logger(module);
18
- class PlumtreeManager extends eventemitter3_1.default {
19
- neighbors;
20
- localPeerDescriptor;
21
- // We have paused sending real data to these neighbrs and only send metadata
22
- localPausedNeighbors;
23
- // We have asked these nodes to pause sending real data to us, used to limit sending of pausing and resuming requests
24
- remotePausedNeighbors;
25
- rpcLocal;
26
- latestMessages = new Map();
27
- rpcCommunicator;
28
- metadataTimestampsAheadOfRealData = new Map();
29
- maxPausedNeighbors;
30
- constructor(options) {
31
- super();
32
- this.neighbors = options.neighbors;
33
- this.maxPausedNeighbors = options.maxPausedNeighbors ?? exports.MAX_PAUSED_NEIGHBORS_DEFAULT;
34
- this.localPeerDescriptor = options.localPeerDescriptor;
35
- this.localPausedNeighbors = new PausedNeighbors_1.PausedNeighbors(options.maxPausedNeighbors ?? exports.MAX_PAUSED_NEIGHBORS_DEFAULT);
36
- this.remotePausedNeighbors = new PausedNeighbors_1.PausedNeighbors(options.maxPausedNeighbors ?? exports.MAX_PAUSED_NEIGHBORS_DEFAULT);
37
- this.rpcLocal = new PlumtreeRpcLocal_1.PlumtreeRpcLocal(this.neighbors, this.localPausedNeighbors, (metadata, previousNode) => this.onMetadata(metadata, previousNode), (fromTimestamp, msgChainId, remotePeerDescriptor) => this.sendBuffer(fromTimestamp, msgChainId, remotePeerDescriptor));
38
- this.neighbors.on('nodeRemoved', (nodeId) => this.onNeighborRemoved(nodeId));
39
- this.rpcCommunicator = options.rpcCommunicator;
40
- this.rpcCommunicator.registerRpcNotification(NetworkRpc_1.MessageID, 'sendMetadata', (msg, context) => this.rpcLocal.sendMetadata(msg, context));
41
- this.rpcCommunicator.registerRpcNotification(NetworkRpc_1.PauseNeighborRequest, 'pauseNeighbor', (msg, context) => this.rpcLocal.pauseNeighbor(msg, context));
42
- this.rpcCommunicator.registerRpcNotification(NetworkRpc_1.ResumeNeighborRequest, 'resumeNeighbor', (msg, context) => this.rpcLocal.resumeNeighbor(msg, context));
43
- }
44
- async pauseNeighbor(node, msgChainId) {
45
- if (this.neighbors.has((0, dht_1.toNodeId)(node))
46
- && !this.remotePausedNeighbors.isPaused((0, dht_1.toNodeId)(node), msgChainId)
47
- && this.remotePausedNeighbors.size(msgChainId) < this.maxPausedNeighbors) {
48
- logger.debug(`Pausing neighbor ${(0, dht_1.toNodeId)(node)}`);
49
- this.remotePausedNeighbors.add((0, dht_1.toNodeId)(node), msgChainId);
50
- const remote = this.createRemote(node);
51
- await remote.pauseNeighbor(msgChainId);
52
- }
53
- }
54
- async resumeNeighbor(node, msgChainId, fromTimestamp) {
55
- if (this.remotePausedNeighbors.isPaused((0, dht_1.toNodeId)(node), msgChainId)) {
56
- logger.debug(`Resuming neighbor ${(0, dht_1.toNodeId)(node)}`);
57
- this.remotePausedNeighbors.delete((0, dht_1.toNodeId)(node), msgChainId);
58
- const remote = this.createRemote(node);
59
- await remote.resumeNeighbor(fromTimestamp, msgChainId);
60
- }
61
- }
62
- onNeighborRemoved(nodeId) {
63
- this.localPausedNeighbors.deleteAll(nodeId);
64
- this.remotePausedNeighbors.deleteAll(nodeId);
65
- if (this.neighbors.size() > 0) {
66
- this.remotePausedNeighbors.forEach((pausedNeighbors, msgChainId) => {
67
- if (pausedNeighbors.size >= this.neighbors.size()) {
68
- logger.debug('All neighbors are paused, resuming first neighbor');
69
- const neighborToResume = this.neighbors.getFirst([]).getPeerDescriptor();
70
- setImmediate(() => this.resumeNeighbor(neighborToResume, msgChainId, this.getLatestMessageTimestamp(msgChainId)));
71
- }
72
- });
73
- }
74
- }
75
- getLatestMessageTimestamp(msgChainId) {
76
- if (!this.latestMessages.has(msgChainId) || this.latestMessages.get(msgChainId).length === 0) {
77
- return 0;
78
- }
79
- return this.latestMessages.get(msgChainId)[this.latestMessages.get(msgChainId).length - 1].messageId.timestamp;
80
- }
81
- async sendBuffer(fromTimestamp, msgChainId, neighbor) {
82
- const remote = new ContentDeliveryRpcRemote_1.ContentDeliveryRpcRemote(this.localPeerDescriptor, neighbor, this.rpcCommunicator, NetworkRpc_client_1.ContentDeliveryRpcClient);
83
- const messages = this.latestMessages.get(msgChainId)?.filter((msg) => msg.messageId.timestamp > fromTimestamp) ?? [];
84
- await Promise.all(messages.map((msg) => remote.sendStreamMessage(msg)));
85
- }
86
- async onMetadata(msg, previousNode) {
87
- // If we receive newer metadata than messages in the buffer, resume the sending neighbor
88
- const latestMessageTimestamp = this.getLatestMessageTimestamp(msg.messageChainId);
89
- if (latestMessageTimestamp < msg.timestamp) {
90
- if (!this.metadataTimestampsAheadOfRealData.has(msg.messageChainId)) {
91
- this.metadataTimestampsAheadOfRealData.set(msg.messageChainId, new Set());
92
- }
93
- this.metadataTimestampsAheadOfRealData.get(msg.messageChainId).add(msg.timestamp);
94
- if (this.metadataTimestampsAheadOfRealData.get(msg.messageChainId).size > 1) {
95
- await this.resumeNeighbor(previousNode, msg.messageChainId, this.getLatestMessageTimestamp(msg.messageChainId));
96
- this.metadataTimestampsAheadOfRealData.get(msg.messageChainId).forEach((timestamp) => {
97
- this.metadataTimestampsAheadOfRealData.get(msg.messageChainId).delete(timestamp);
98
- });
99
- }
100
- }
101
- }
102
- createRemote(neighbor) {
103
- return new PlumtreeRpcRemote_1.PlumtreeRpcRemote(this.localPeerDescriptor, neighbor, this.rpcCommunicator, NetworkRpc_client_1.PlumtreeRpcClient);
104
- }
105
- broadcast(msg, previousNode) {
106
- const messageChainId = msg.messageId.messageChainId;
107
- if (!this.latestMessages.has(messageChainId)) {
108
- this.latestMessages.set(messageChainId, []);
109
- }
110
- if (this.latestMessages.get(messageChainId).length < 20) {
111
- this.latestMessages.get(messageChainId).push(msg);
112
- }
113
- else {
114
- this.latestMessages.get(messageChainId).shift();
115
- this.latestMessages.get(messageChainId).push(msg);
116
- }
117
- if (this.metadataTimestampsAheadOfRealData.has(msg.messageId.messageChainId)) {
118
- this.metadataTimestampsAheadOfRealData.get(msg.messageId.messageChainId).delete(msg.messageId.timestamp);
119
- }
120
- this.emit('message', msg);
121
- const neighbors = this.neighbors.getAll().filter((neighbor) => (0, dht_1.toNodeId)(neighbor.getPeerDescriptor()) !== previousNode);
122
- for (const neighbor of neighbors) {
123
- if (this.localPausedNeighbors.isPaused((0, dht_1.toNodeId)(neighbor.getPeerDescriptor()), msg.messageId.messageChainId)) {
124
- const remote = this.createRemote(neighbor.getPeerDescriptor());
125
- setImmediate(() => remote.sendMetadata(msg.messageId));
126
- }
127
- else {
128
- setImmediate(() => neighbor.sendStreamMessage(msg));
129
- }
130
- }
131
- }
132
- isNeighborPaused(node, msgChainId) {
133
- return this.localPausedNeighbors.isPaused((0, dht_1.toNodeId)(node), msgChainId)
134
- || this.remotePausedNeighbors.isPaused((0, dht_1.toNodeId)(node), msgChainId);
135
- }
136
- stop() {
137
- this.neighbors.off('nodeRemoved', this.onNeighborRemoved);
138
- }
139
- }
140
- exports.PlumtreeManager = PlumtreeManager;
141
- //# sourceMappingURL=PlumtreeManager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PlumtreeManager.js","sourceRoot":"","sources":["../../../../src/content-delivery-layer/plumtree/PlumtreeManager.ts"],"names":[],"mappings":"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"}
@@ -1,20 +0,0 @@
1
- import { PeerDescriptor } from '@streamr/dht';
2
- import { MessageID, PauseNeighborRequest, ResumeNeighborRequest } from '../../../generated/packages/trackerless-network/protos/NetworkRpc';
3
- import { Empty } from '../../../generated/google/protobuf/empty';
4
- import { ServerCallContext } from '@protobuf-ts/runtime-rpc';
5
- import { IPlumtreeRpc } from '../../../generated/packages/trackerless-network/protos/NetworkRpc.server';
6
- import { NodeList } from '../NodeList';
7
- import { PausedNeighbors } from './PausedNeighbors';
8
- type OnMetadataCb = (msg: MessageID, previousNode: PeerDescriptor) => Promise<void>;
9
- type SendBufferCb = (fromTimestamp: number, msgChainId: string, remotePeerDescriptor: PeerDescriptor) => Promise<void>;
10
- export declare class PlumtreeRpcLocal implements IPlumtreeRpc {
11
- private readonly neighbors;
12
- private readonly pausedNodes;
13
- private readonly onMetadataCb;
14
- private readonly sendBuffer;
15
- constructor(neighbors: NodeList, pausedNodes: PausedNeighbors, onMetaDataCb: OnMetadataCb, sendBuffer: SendBufferCb);
16
- sendMetadata(message: MessageID, context: ServerCallContext): Promise<Empty>;
17
- pauseNeighbor(request: PauseNeighborRequest, context: ServerCallContext): Promise<Empty>;
18
- resumeNeighbor(request: ResumeNeighborRequest, context: ServerCallContext): Promise<Empty>;
19
- }
20
- export {};
@@ -1,37 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.PlumtreeRpcLocal = void 0;
4
- const dht_1 = require("@streamr/dht");
5
- const empty_1 = require("../../../generated/google/protobuf/empty");
6
- class PlumtreeRpcLocal {
7
- neighbors;
8
- pausedNodes;
9
- onMetadataCb;
10
- sendBuffer;
11
- constructor(neighbors, pausedNodes, onMetaDataCb, sendBuffer) {
12
- this.neighbors = neighbors;
13
- this.pausedNodes = pausedNodes;
14
- this.onMetadataCb = onMetaDataCb;
15
- this.sendBuffer = sendBuffer;
16
- }
17
- async sendMetadata(message, context) {
18
- const previousNode = context.incomingSourceDescriptor;
19
- await this.onMetadataCb(message, previousNode);
20
- return empty_1.Empty;
21
- }
22
- async pauseNeighbor(request, context) {
23
- const sender = (0, dht_1.toNodeId)(context.incomingSourceDescriptor);
24
- if (this.neighbors.has(sender)) {
25
- this.pausedNodes.add(sender, request.messageChainId);
26
- }
27
- return empty_1.Empty;
28
- }
29
- async resumeNeighbor(request, context) {
30
- const sender = context.incomingSourceDescriptor;
31
- this.pausedNodes.delete((0, dht_1.toNodeId)(sender), request.messageChainId);
32
- await this.sendBuffer(request.fromTimestamp, request.messageChainId, sender);
33
- return empty_1.Empty;
34
- }
35
- }
36
- exports.PlumtreeRpcLocal = PlumtreeRpcLocal;
37
- //# sourceMappingURL=PlumtreeRpcLocal.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PlumtreeRpcLocal.js","sourceRoot":"","sources":["../../../../src/content-delivery-layer/plumtree/PlumtreeRpcLocal.ts"],"names":[],"mappings":";;;AAAA,sCAAuE;AAEvE,oEAAgE;AAQhE,MAAa,gBAAgB;IAER,SAAS,CAAU;IACnB,WAAW,CAAiB;IAC5B,YAAY,CAAc;IAC1B,UAAU,CAAc;IAEzC,YACI,SAAmB,EACnB,WAA4B,EAC5B,YAA0B,EAC1B,UAAwB;QAExB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;QAC1B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAA;QAC9B,IAAI,CAAC,YAAY,GAAG,YAAY,CAAA;QAChC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;IAChC,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,OAAkB,EAAE,OAA0B;QAC7D,MAAM,YAAY,GAAI,OAA0B,CAAC,wBAAyB,CAAA;QAC1E,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,YAAY,CAAC,CAAA;QAC9C,OAAO,aAAK,CAAA;IAChB,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,OAA6B,EAAE,OAA0B;QACzE,MAAM,MAAM,GAAG,IAAA,cAAQ,EAAE,OAA0B,CAAC,wBAAyB,CAAC,CAAA;QAC9E,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,CAAA;QACxD,CAAC;QACD,OAAO,aAAK,CAAA;IAChB,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,OAA8B,EAAE,OAA0B;QAC3E,MAAM,MAAM,GAAI,OAA0B,CAAC,wBAAyB,CAAA;QACpE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAA,cAAQ,EAAC,MAAM,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAA;QACjE,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,cAAc,EAAE,MAAM,CAAC,CAAA;QAC5E,OAAO,aAAK,CAAA;IAChB,CAAC;CACJ;AAvCD,4CAuCC"}
@@ -1,8 +0,0 @@
1
- import { RpcRemote } from '@streamr/dht';
2
- import { MessageID } from '../../../generated/packages/trackerless-network/protos/NetworkRpc';
3
- import { PlumtreeRpcClient } from '../../../generated/packages/trackerless-network/protos/NetworkRpc.client';
4
- export declare class PlumtreeRpcRemote extends RpcRemote<PlumtreeRpcClient> {
5
- sendMetadata(msg: MessageID): Promise<void>;
6
- pauseNeighbor(messageChainId: string): Promise<void>;
7
- resumeNeighbor(fromTimestamp: number, messageChainId: string): Promise<void>;
8
- }
@@ -1,26 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.PlumtreeRpcRemote = void 0;
4
- const dht_1 = require("@streamr/dht");
5
- class PlumtreeRpcRemote extends dht_1.RpcRemote {
6
- async sendMetadata(msg) {
7
- const options = this.formDhtRpcOptions({
8
- notification: true
9
- });
10
- await this.getClient().sendMetadata(msg, options);
11
- }
12
- async pauseNeighbor(messageChainId) {
13
- const options = this.formDhtRpcOptions({
14
- notification: true
15
- });
16
- await this.getClient().pauseNeighbor({ messageChainId }, options);
17
- }
18
- async resumeNeighbor(fromTimestamp, messageChainId) {
19
- const options = this.formDhtRpcOptions({
20
- notification: true
21
- });
22
- await this.getClient().resumeNeighbor({ fromTimestamp, messageChainId }, options);
23
- }
24
- }
25
- exports.PlumtreeRpcRemote = PlumtreeRpcRemote;
26
- //# sourceMappingURL=PlumtreeRpcRemote.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PlumtreeRpcRemote.js","sourceRoot":"","sources":["../../../../src/content-delivery-layer/plumtree/PlumtreeRpcRemote.ts"],"names":[],"mappings":";;;AAAA,sCAAwC;AAIxC,MAAa,iBAAkB,SAAQ,eAA4B;IAE/D,KAAK,CAAC,YAAY,CAAC,GAAc;QAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC;YACnC,YAAY,EAAE,IAAI;SACrB,CAAC,CAAA;QACF,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC,YAAY,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;IACrD,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,cAAsB;QACtC,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC;YACnC,YAAY,EAAE,IAAI;SACrB,CAAC,CAAA;QACF,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC,aAAa,CAAC,EAAE,cAAc,EAAE,EAAE,OAAO,CAAC,CAAA;IACrE,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,aAAqB,EAAE,cAAsB;QAC9D,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC;YACnC,YAAY,EAAE,IAAI;SACrB,CAAC,CAAA;QACF,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC,cAAc,CAAC,EAAE,aAAa,EAAE,cAAc,EAAE,EAAE,OAAO,CAAC,CAAA;IACrF,CAAC;CAEJ;AAvBD,8CAuBC"}
@@ -1,29 +0,0 @@
1
- export interface FifoMapWithTtlOptions<K> {
2
- ttlInMs: number;
3
- maxSize: number;
4
- onItemDropped?: (key: K) => void;
5
- timeProvider?: () => number;
6
- debugMode?: boolean;
7
- }
8
- /**
9
- * A "Map" implementation with a maximum size and TTL expiration on entries.
10
- *
11
- * When full, room is made for new entries by dropping existing by FIFO method.
12
- *
13
- * Entries have a TTL after which they are considered stale. Stale items are
14
- * not returned when querying.
15
- *
16
- */
17
- export declare class FifoMapWithTTL<K, V> {
18
- private readonly items;
19
- private readonly dropQueue;
20
- private readonly ttlInMs;
21
- private readonly maxSize;
22
- private readonly onItemDropped;
23
- private readonly timeProvider;
24
- constructor({ ttlInMs, maxSize, onItemDropped, timeProvider }: FifoMapWithTtlOptions<K>);
25
- set(key: K, value: V): void;
26
- delete(key: K): void;
27
- get(key: K): V | undefined;
28
- values(): V[];
29
- }
@@ -1,93 +0,0 @@
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
- // class invariant: the keys present in `items` and `dropQueue` are the same set.
16
- items = new Map();
17
- dropQueue = yallist_1.Yallist.create(); // queue is used to determine deletion order when full
18
- ttlInMs;
19
- maxSize;
20
- onItemDropped;
21
- timeProvider;
22
- constructor({ ttlInMs, maxSize, onItemDropped = () => { }, timeProvider = Date.now }) {
23
- if (ttlInMs < 0) {
24
- throw new Error(`ttlInMs (${ttlInMs}) cannot be < 0`);
25
- }
26
- if (maxSize < 0) {
27
- throw new Error(`maxSize (${maxSize}) cannot be < 0`);
28
- }
29
- this.ttlInMs = ttlInMs;
30
- this.maxSize = maxSize;
31
- this.onItemDropped = onItemDropped;
32
- this.timeProvider = timeProvider;
33
- }
34
- set(key, value) {
35
- if (this.maxSize === 0) {
36
- return;
37
- }
38
- if (this.items.size > this.maxSize) {
39
- throw new Error('assertion error: maximum size exceeded');
40
- }
41
- // delete an existing entry if exists
42
- this.delete(key);
43
- // make room for new entry
44
- if (this.items.size === this.maxSize) {
45
- const keyToDel = this.dropQueue.shift();
46
- if (keyToDel === undefined) {
47
- throw new Error('assertion error: queue empty but still have items');
48
- }
49
- this.items.delete(keyToDel);
50
- this.onItemDropped(keyToDel);
51
- }
52
- // add entry
53
- const dropQueueNode = new yallist_1.Node(key);
54
- this.dropQueue.pushNode(dropQueueNode);
55
- this.items.set(key, {
56
- value,
57
- dropQueueNode,
58
- expiresAt: this.timeProvider() + this.ttlInMs
59
- });
60
- }
61
- delete(key) {
62
- const item = this.items.get(key);
63
- if (item !== undefined) {
64
- this.items.delete(key);
65
- this.dropQueue.removeNode(item.dropQueueNode);
66
- this.onItemDropped(key);
67
- }
68
- }
69
- get(key) {
70
- const item = this.items.get(key);
71
- if (item === undefined) {
72
- return undefined;
73
- }
74
- if (item.expiresAt <= this.timeProvider()) {
75
- this.delete(key);
76
- return undefined;
77
- }
78
- return item.value;
79
- }
80
- values() {
81
- const keys = [...this.items.keys()];
82
- const values = [];
83
- for (const key of keys) {
84
- const value = this.get(key);
85
- if (value !== undefined) {
86
- values.push(value);
87
- }
88
- }
89
- return values;
90
- }
91
- }
92
- exports.FifoMapWithTTL = FifoMapWithTTL;
93
- //# sourceMappingURL=FifoMapWithTTL.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"FifoMapWithTTL.js","sourceRoot":"","sources":["../../../../src/content-delivery-layer/propagation/FifoMapWithTTL.ts"],"names":[],"mappings":"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"}
@@ -1,35 +0,0 @@
1
- import { DhtAddress } from '@streamr/dht';
2
- import { StreamMessage } from '../../../generated/packages/trackerless-network/protos/NetworkRpc';
3
- type SendToNeighborFn = (neighborId: DhtAddress, msg: StreamMessage) => Promise<void>;
4
- interface ConstructorOptions {
5
- sendToNeighbor: SendToNeighborFn;
6
- minPropagationTargets: number;
7
- maxMessages: number;
8
- ttl: number;
9
- }
10
- export declare const DEFAULT_PROPAGATION_BUFFER_TTL: number;
11
- export declare const DEFAULT_MIN_PROPAGATION_TARGETS = 2;
12
- export declare const DEFAULT_MAX_PROPAGATION_BUFFER_SIZE = 150;
13
- /**
14
- * Message propagation logic of a node. Given a message, this class will actively attempt to propagate it to
15
- * `minPropagationTargets` neighbors until success or TTL expiration.
16
- *
17
- * Setting `minPropagationTargets = 0` effectively disables any propagation reattempts. A message will then
18
- * only be propagated exactly once, to neighbors that are present at that moment, in a fire-and-forget manner.
19
- */
20
- export declare class Propagation {
21
- private readonly sendToNeighbor;
22
- private readonly minPropagationTargets;
23
- private readonly activeTaskStore;
24
- constructor({ sendToNeighbor, minPropagationTargets, maxMessages, ttl }: ConstructorOptions);
25
- /**
26
- * Node should invoke this when it learns about a new message
27
- */
28
- feedUnseenMessage(message: StreamMessage, targets: DhtAddress[], source: DhtAddress | null): void;
29
- /**
30
- * Node should invoke this when it learns about a new node stream assignment
31
- */
32
- onNeighborJoined(neighborId: DhtAddress): void;
33
- private sendAndAwaitThenMark;
34
- }
35
- export {};
@@ -1,68 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Propagation = exports.DEFAULT_MAX_PROPAGATION_BUFFER_SIZE = exports.DEFAULT_MIN_PROPAGATION_TARGETS = exports.DEFAULT_PROPAGATION_BUFFER_TTL = void 0;
4
- const PropagationTaskStore_1 = require("./PropagationTaskStore");
5
- exports.DEFAULT_PROPAGATION_BUFFER_TTL = 10 * 1000;
6
- exports.DEFAULT_MIN_PROPAGATION_TARGETS = 2;
7
- exports.DEFAULT_MAX_PROPAGATION_BUFFER_SIZE = 150;
8
- /**
9
- * Message propagation logic of a node. Given a message, this class will actively attempt to propagate it to
10
- * `minPropagationTargets` neighbors until success or TTL expiration.
11
- *
12
- * Setting `minPropagationTargets = 0` effectively disables any propagation reattempts. A message will then
13
- * only be propagated exactly once, to neighbors that are present at that moment, in a fire-and-forget manner.
14
- */
15
- class Propagation {
16
- sendToNeighbor;
17
- minPropagationTargets;
18
- activeTaskStore;
19
- constructor({ sendToNeighbor, minPropagationTargets, maxMessages, ttl }) {
20
- this.sendToNeighbor = sendToNeighbor;
21
- this.minPropagationTargets = minPropagationTargets;
22
- this.activeTaskStore = new PropagationTaskStore_1.PropagationTaskStore(ttl, maxMessages);
23
- }
24
- /**
25
- * Node should invoke this when it learns about a new message
26
- */
27
- feedUnseenMessage(message, targets, source) {
28
- const task = {
29
- message,
30
- source,
31
- handledNeighbors: new Set()
32
- };
33
- this.activeTaskStore.add(task);
34
- for (const target of targets) {
35
- this.sendAndAwaitThenMark(task, target);
36
- }
37
- }
38
- /**
39
- * Node should invoke this when it learns about a new node stream assignment
40
- */
41
- onNeighborJoined(neighborId) {
42
- const tasks = this.activeTaskStore.get();
43
- for (const task of tasks) {
44
- this.sendAndAwaitThenMark(task, neighborId);
45
- }
46
- }
47
- sendAndAwaitThenMark({ message, source, handledNeighbors }, neighborId) {
48
- if (!handledNeighbors.has(neighborId) && neighborId !== source) {
49
- (async () => {
50
- try {
51
- await this.sendToNeighbor(neighborId, message);
52
- }
53
- catch {
54
- return;
55
- }
56
- // Side-note: due to asynchronicity, the task being modified at this point could already be stale and
57
- // deleted from `activeTaskStore`. However, as modifying it or re-deleting it is pretty much
58
- // inconsequential at this point, leaving the logic as is.
59
- handledNeighbors.add(neighborId);
60
- if (handledNeighbors.size >= this.minPropagationTargets) {
61
- this.activeTaskStore.delete(message.messageId);
62
- }
63
- })();
64
- }
65
- }
66
- }
67
- exports.Propagation = Propagation;
68
- //# sourceMappingURL=Propagation.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Propagation.js","sourceRoot":"","sources":["../../../../src/content-delivery-layer/propagation/Propagation.ts"],"names":[],"mappings":";;;AAEA,iEAA8E;AAWjE,QAAA,8BAA8B,GAAG,EAAE,GAAG,IAAI,CAAA;AAC1C,QAAA,+BAA+B,GAAG,CAAC,CAAA;AACnC,QAAA,mCAAmC,GAAG,GAAG,CAAA;AAEtD;;;;;;GAMG;AAEH,MAAa,WAAW;IACH,cAAc,CAAkB;IAChC,qBAAqB,CAAQ;IAC7B,eAAe,CAAsB;IAEtD,YAAY,EACR,cAAc,EACd,qBAAqB,EACrB,WAAW,EACX,GAAG,EACc;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,OAAqB,EAAE,MAAyB;QACtF,MAAM,IAAI,GAAG;YACT,OAAO;YACP,MAAM;YACN,gBAAgB,EAAE,IAAI,GAAG,EAAc;SAC1C,CAAA;QACD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAC9B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC3B,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;QAC3C,CAAC;IACL,CAAC;IAED;;OAEG;IACH,gBAAgB,CAAC,UAAsB;QACnC,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,CAAA;QACxC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACvB,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;QAC/C,CAAC;IACL,CAAC;IAEO,oBAAoB,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAmB,EAAE,UAAsB;QACvG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,UAAU,KAAK,MAAM,EAAE,CAAC;YAC7D,CAAC,KAAK,IAAI,EAAE;gBACR,IAAI,CAAC;oBACD,MAAM,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;gBAClD,CAAC;gBAAC,MAAM,CAAC;oBACL,OAAM;gBACV,CAAC;gBACD,qGAAqG;gBACrG,4FAA4F;gBAC5F,0DAA0D;gBAC1D,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;gBAChC,IAAI,gBAAgB,CAAC,IAAI,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;oBACtD,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,SAAU,CAAC,CAAA;gBACnD,CAAC;YACL,CAAC,CAAC,EAAE,CAAA;QACR,CAAC;IACL,CAAC;CACJ;AA3DD,kCA2DC"}
@@ -1,22 +0,0 @@
1
- import { DhtAddress } from '@streamr/dht';
2
- import { MessageRef, StreamMessage } from '../../../generated/packages/trackerless-network/protos/NetworkRpc';
3
- export interface PropagationTask {
4
- message: StreamMessage;
5
- source: string | null;
6
- handledNeighbors: Set<DhtAddress>;
7
- }
8
- /**
9
- * Keeps track of propagation tasks for the needs of message propagation logic.
10
- *
11
- * Properties:
12
- * - Allows fetching propagation tasks by StreamPartID
13
- * - Upper bound on number of tasks stored, replacement policy if FIFO
14
- * - Items have a TTL, after which they are considered stale and not returned when querying
15
- **/
16
- export declare class PropagationTaskStore {
17
- private readonly tasks;
18
- constructor(ttlInMs: number, maxTasks: number);
19
- get(): PropagationTask[];
20
- add(task: PropagationTask): void;
21
- delete(messageId: MessageRef): void;
22
- }
@@ -1,33 +0,0 @@
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
- tasks;
15
- constructor(ttlInMs, maxTasks) {
16
- this.tasks = new FifoMapWithTTL_1.FifoMapWithTTL({
17
- ttlInMs,
18
- maxSize: maxTasks
19
- });
20
- }
21
- get() {
22
- return this.tasks.values();
23
- }
24
- add(task) {
25
- const messageId = task.message.messageId;
26
- this.tasks.set(messageId, task);
27
- }
28
- delete(messageId) {
29
- this.tasks.delete(messageId); // causes `onKeyDropped` to be invoked
30
- }
31
- }
32
- exports.PropagationTaskStore = PropagationTaskStore;
33
- //# sourceMappingURL=PropagationTaskStore.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PropagationTaskStore.js","sourceRoot":"","sources":["../../../../src/content-delivery-layer/propagation/PropagationTaskStore.ts"],"names":[],"mappings":";;;AAEA,qDAAiD;AAQjD;;;;;;;GAOG;AACH,MAAa,oBAAoB;IACZ,KAAK,CAA6C;IAEnE,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,CAAA;IAC9B,CAAC;IAED,GAAG,CAAC,IAAqB;QACrB,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,SAAU,CAAA;QACzC,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"}
@@ -1,46 +0,0 @@
1
- import { ConnectionLocker, DhtAddress, ITransport, PeerDescriptor } from '@streamr/dht';
2
- import { StreamPartID, UserID } from '@streamr/utils';
3
- import { EventEmitter } from 'eventemitter3';
4
- import { ProxyDirection, StreamMessage } from '../../../generated/packages/trackerless-network/protos/NetworkRpc';
5
- export declare const retry: <T>(task: () => Promise<T>, description: string, abortSignal: AbortSignal, delay?: number) => Promise<T>;
6
- interface ProxyClientOptions {
7
- transport: ITransport;
8
- localPeerDescriptor: PeerDescriptor;
9
- streamPartId: StreamPartID;
10
- connectionLocker: ConnectionLocker;
11
- maxPropagationBufferSize: number;
12
- minPropagationTargets: number;
13
- propagationBufferTtl: number;
14
- }
15
- interface Events {
16
- message: (message: StreamMessage) => void;
17
- }
18
- export declare class ProxyClient extends EventEmitter<Events> {
19
- private readonly rpcCommunicator;
20
- private readonly contentDeliveryRpcLocal;
21
- private readonly options;
22
- private readonly duplicateDetectors;
23
- private definition?;
24
- private readonly connections;
25
- private readonly propagation;
26
- private readonly neighbors;
27
- private readonly abortController;
28
- constructor(options: ProxyClientOptions);
29
- private registerDefaultServerMethods;
30
- setProxies(nodes: PeerDescriptor[], direction: ProxyDirection, userId: UserID, connectionCount?: number): Promise<void>;
31
- private updateConnections;
32
- private getInvalidConnections;
33
- private openRandomConnections;
34
- private attemptConnection;
35
- private closeRandomConnections;
36
- private closeConnection;
37
- private removeConnection;
38
- broadcast(msg: StreamMessage, previousNode?: DhtAddress): void;
39
- hasConnection(nodeId: DhtAddress, direction: ProxyDirection): boolean;
40
- getDirection(): ProxyDirection;
41
- private onNodeDisconnected;
42
- start(): Promise<void>;
43
- getDiagnosticInfo(): Record<string, unknown>;
44
- stop(): void;
45
- }
46
- export {};