@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,36 +0,0 @@
1
- import { DhtNodeOptions, PeerDescriptor } from '@streamr/dht';
2
- import { MetricsContext, StreamPartID } from '@streamr/utils';
3
- import { ContentDeliveryManager, ContentDeliveryManagerOptions, StreamPartDeliveryOptions } from './ContentDeliveryManager';
4
- import { ControlLayerNode } from './control-layer/ControlLayerNode';
5
- import { StreamMessage } from '../generated/packages/trackerless-network/protos/NetworkRpc';
6
- import { NodeInfo } from './types';
7
- export interface NetworkOptions {
8
- layer0?: DhtNodeOptions;
9
- networkNode?: ContentDeliveryManagerOptions;
10
- metricsContext?: MetricsContext;
11
- }
12
- export declare class NetworkStack {
13
- private controlLayerNode?;
14
- private contentDeliveryManager?;
15
- private stopped;
16
- private readonly metricsContext;
17
- private readonly options;
18
- private nodeInfoRpcLocal?;
19
- private nodeInfoClient?;
20
- constructor(options: NetworkOptions);
21
- joinStreamPart(streamPartId: StreamPartID, neighborRequirement?: {
22
- minCount: number;
23
- timeout: number;
24
- }, streamPartDeliveryOptions?: StreamPartDeliveryOptions): Promise<void>;
25
- broadcast(msg: StreamMessage, streamPartDeliveryOptions?: StreamPartDeliveryOptions): Promise<void>;
26
- start(doJoin?: boolean): Promise<void>;
27
- private ensureConnectedToControlLayer;
28
- getContentDeliveryManager(): ContentDeliveryManager;
29
- getControlLayerNode(): ControlLayerNode;
30
- getMetricsContext(): MetricsContext;
31
- fetchNodeInfo(node: PeerDescriptor): Promise<NodeInfo>;
32
- createNodeInfo(): NodeInfo;
33
- getOptions(): NetworkOptions;
34
- private getConnectionManager;
35
- stop(): Promise<void>;
36
- }
@@ -1,165 +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.NetworkStack = void 0;
7
- const dht_1 = require("@streamr/dht");
8
- const utils_1 = require("@streamr/utils");
9
- const pull_1 = __importDefault(require("lodash/pull"));
10
- const package_json_1 = require("../package.json");
11
- const ContentDeliveryManager_1 = require("./ContentDeliveryManager");
12
- const NodeInfoClient_1 = require("./NodeInfoClient");
13
- const NodeInfoRpcLocal_1 = require("./NodeInfoRpcLocal");
14
- const NetworkRpc_1 = require("../generated/packages/trackerless-network/protos/NetworkRpc");
15
- const logger = new utils_1.Logger(module);
16
- const instances = [];
17
- const stopInstances = async () => {
18
- // make a clone so that it is ok for each instance.stop() to remove itself from the list (at line 139)
19
- // while the map function is iterating the list
20
- const clonedInstances = [...instances];
21
- await Promise.all(clonedInstances.map((instance) => instance.stop()));
22
- };
23
- const EXIT_EVENTS = [`exit`, `SIGINT`, `SIGUSR1`, `SIGUSR2`, `uncaughtException`, `unhandledRejection`, `SIGTERM`];
24
- EXIT_EVENTS.forEach((event) => {
25
- process.on(event, async (eventArg) => {
26
- const isError = (event === 'uncaughtException') || (event === 'unhandledRejection');
27
- if (isError) {
28
- logger.error(`exit event: ${event}`, eventArg);
29
- }
30
- await stopInstances();
31
- process.exit(isError ? 1 : 0);
32
- });
33
- });
34
- if (typeof window === 'object') {
35
- window.addEventListener('unload', async () => {
36
- await stopInstances();
37
- });
38
- }
39
- class NetworkStack {
40
- controlLayerNode;
41
- contentDeliveryManager;
42
- stopped = false;
43
- metricsContext;
44
- options;
45
- nodeInfoRpcLocal;
46
- nodeInfoClient;
47
- constructor(options) {
48
- this.options = options;
49
- this.metricsContext = options.metricsContext ?? new utils_1.MetricsContext();
50
- this.controlLayerNode = new dht_1.DhtNode({
51
- ...options.layer0,
52
- metricsContext: this.metricsContext,
53
- allowIncomingPrivateConnections: options.networkNode?.acceptProxyConnections
54
- });
55
- this.contentDeliveryManager = new ContentDeliveryManager_1.ContentDeliveryManager({
56
- ...options.networkNode,
57
- metricsContext: this.metricsContext
58
- });
59
- instances.push(this);
60
- }
61
- async joinStreamPart(streamPartId, neighborRequirement, streamPartDeliveryOptions) {
62
- if (this.getContentDeliveryManager().isProxiedStreamPart(streamPartId)) {
63
- throw new Error(`Cannot join to ${streamPartId} as proxy connections have been set`);
64
- }
65
- await this.ensureConnectedToControlLayer();
66
- this.getContentDeliveryManager().joinStreamPart(streamPartId, streamPartDeliveryOptions);
67
- if (neighborRequirement !== undefined) {
68
- await (0, utils_1.until)(() => {
69
- return this.getContentDeliveryManager().getNeighbors(streamPartId).length >= neighborRequirement.minCount;
70
- }, neighborRequirement.timeout);
71
- }
72
- }
73
- async broadcast(msg, streamPartDeliveryOptions) {
74
- const streamPartId = (0, utils_1.toStreamPartID)(msg.messageId.streamId, msg.messageId.streamPartition);
75
- if (this.getContentDeliveryManager().isProxiedStreamPart(streamPartId, NetworkRpc_1.ProxyDirection.SUBSCRIBE)
76
- && (msg.body.oneofKind === 'contentMessage')) {
77
- throw new Error(`Cannot broadcast to ${streamPartId} as proxy subscribe connections have been set`);
78
- }
79
- // TODO could combine these two calls to isProxiedStreamPart?
80
- if (!this.contentDeliveryManager.isProxiedStreamPart(streamPartId)) {
81
- await this.ensureConnectedToControlLayer();
82
- }
83
- this.getContentDeliveryManager().broadcast(msg, streamPartDeliveryOptions);
84
- }
85
- async start(doJoin = true) {
86
- logger.info('Starting a Streamr Network Node');
87
- await this.controlLayerNode.start();
88
- logger.info(`Node id is ${(0, dht_1.toNodeId)(this.controlLayerNode.getLocalPeerDescriptor())}`);
89
- const connectionManager = this.controlLayerNode.getTransport();
90
- if ((this.options.layer0?.entryPoints?.some((entryPoint) => (0, dht_1.areEqualPeerDescriptors)(entryPoint, this.controlLayerNode.getLocalPeerDescriptor())))) {
91
- await this.controlLayerNode?.joinDht(this.options.layer0.entryPoints);
92
- }
93
- else if (doJoin) {
94
- // in practice there aren't be existing connections and therefore this always connects
95
- await this.ensureConnectedToControlLayer();
96
- }
97
- // TODO: remove undefined checks here. Assume that start is approproately awaited before stop is called.
98
- await this.contentDeliveryManager?.start(this.controlLayerNode, connectionManager, connectionManager);
99
- if (this.contentDeliveryManager) {
100
- const infoRpcCommunicator = new dht_1.ListeningRpcCommunicator(NodeInfoRpcLocal_1.NODE_INFO_RPC_SERVICE_ID, this.getConnectionManager());
101
- this.nodeInfoRpcLocal = new NodeInfoRpcLocal_1.NodeInfoRpcLocal(this, infoRpcCommunicator);
102
- this.nodeInfoClient = new NodeInfoClient_1.NodeInfoClient(this.controlLayerNode.getLocalPeerDescriptor(), infoRpcCommunicator);
103
- }
104
- }
105
- async ensureConnectedToControlLayer() {
106
- // TODO we could wrap joinDht with pOnce and call it here (no else-if needed in that case)
107
- if (!this.controlLayerNode.hasJoined()) {
108
- setImmediate(async () => {
109
- if (this.options.layer0?.entryPoints !== undefined) {
110
- // TODO should catch possible rejection?
111
- // the question mark is there to avoid problems when stop() is called before start()
112
- // -> TODO change to exlamation mark if we don't support that (and remove NetworkStackStoppedDuringStart.test)
113
- await this.controlLayerNode?.joinDht(this.options.layer0.entryPoints);
114
- }
115
- });
116
- await this.controlLayerNode.waitForNetworkConnectivity();
117
- }
118
- }
119
- getContentDeliveryManager() {
120
- return this.contentDeliveryManager;
121
- }
122
- getControlLayerNode() {
123
- return this.controlLayerNode;
124
- }
125
- getMetricsContext() {
126
- return this.metricsContext;
127
- }
128
- async fetchNodeInfo(node) {
129
- if (!(0, dht_1.areEqualPeerDescriptors)(node, this.getControlLayerNode().getLocalPeerDescriptor())) {
130
- return this.nodeInfoClient.getInfo(node);
131
- }
132
- else {
133
- return this.createNodeInfo();
134
- }
135
- }
136
- createNodeInfo() {
137
- return {
138
- peerDescriptor: this.getControlLayerNode().getLocalPeerDescriptor(),
139
- controlLayer: {
140
- connections: this.getControlLayerNode().getConnectionsView().getConnections(),
141
- neighbors: this.getControlLayerNode().getNeighbors()
142
- },
143
- streamPartitions: this.getContentDeliveryManager().getNodeInfo(),
144
- applicationVersion: package_json_1.version
145
- };
146
- }
147
- getOptions() {
148
- return this.options;
149
- }
150
- getConnectionManager() {
151
- return this.controlLayerNode.getTransport();
152
- }
153
- async stop() {
154
- if (!this.stopped) {
155
- this.stopped = true;
156
- (0, pull_1.default)(instances, this);
157
- await this.contentDeliveryManager.destroy();
158
- await this.controlLayerNode.stop();
159
- this.contentDeliveryManager = undefined;
160
- this.controlLayerNode = undefined;
161
- }
162
- }
163
- }
164
- exports.NetworkStack = NetworkStack;
165
- //# sourceMappingURL=NetworkStack.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"NetworkStack.js","sourceRoot":"","sources":["../../src/NetworkStack.ts"],"names":[],"mappings":"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"}
@@ -1,9 +0,0 @@
1
- import { DhtCallContext, PeerDescriptor } from '@streamr/dht';
2
- import { RpcCommunicator } from '@streamr/proto-rpc';
3
- import { NodeInfo } from './types';
4
- export declare class NodeInfoClient {
5
- private readonly ownPeerDescriptor;
6
- private readonly rpcCommunicator;
7
- constructor(ownPeerDescriptor: PeerDescriptor, rpcCommunicator: RpcCommunicator<DhtCallContext>);
8
- getInfo(node: PeerDescriptor): Promise<NodeInfo>;
9
- }
@@ -1,21 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.NodeInfoClient = void 0;
4
- const NetworkRpc_client_1 = require("../generated/packages/trackerless-network/protos/NetworkRpc.client");
5
- const NodeInfoRpcRemote_1 = require("./NodeInfoRpcRemote");
6
- class NodeInfoClient {
7
- ownPeerDescriptor;
8
- rpcCommunicator;
9
- constructor(ownPeerDescriptor, rpcCommunicator) {
10
- this.ownPeerDescriptor = ownPeerDescriptor;
11
- this.rpcCommunicator = rpcCommunicator;
12
- }
13
- async getInfo(node) {
14
- const remote = new NodeInfoRpcRemote_1.NodeInfoRpcRemote(this.ownPeerDescriptor, node, this.rpcCommunicator, NetworkRpc_client_1.NodeInfoRpcClient);
15
- // TODO remove casting when we validate NodeInfoResponse messages and therefore can annotate
16
- // each of the field as required in the decorated type
17
- return remote.getInfo();
18
- }
19
- }
20
- exports.NodeInfoClient = NodeInfoClient;
21
- //# sourceMappingURL=NodeInfoClient.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"NodeInfoClient.js","sourceRoot":"","sources":["../../src/NodeInfoClient.ts"],"names":[],"mappings":";;;AAGA,0GAAsG;AACtG,2DAAuD;AAEvD,MAAa,cAAc;IACN,iBAAiB,CAAgB;IACjC,eAAe,CAAiC;IAEjE,YAAY,iBAAiC,EAAE,eAAgD;QAC3F,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAA;QAC1C,IAAI,CAAC,eAAe,GAAG,eAAe,CAAA;IAC1C,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,IAAoB;QAC9B,MAAM,MAAM,GAAG,IAAI,qCAAiB,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,EAAE,IAAI,CAAC,eAAe,EAAE,qCAAiB,CAAC,CAAA;QAC3G,4FAA4F;QAC5F,sDAAsD;QACtD,OAAO,MAAM,CAAC,OAAO,EAAyB,CAAA;IAClD,CAAC;CAEJ;AAhBD,wCAgBC"}
@@ -1,12 +0,0 @@
1
- import { NodeInfoResponse } from '../generated/packages/trackerless-network/protos/NetworkRpc';
2
- import { INodeInfoRpc } from '../generated/packages/trackerless-network/protos/NetworkRpc.server';
3
- import { NetworkStack } from './NetworkStack';
4
- import { ListeningRpcCommunicator } from '@streamr/dht';
5
- export declare const NODE_INFO_RPC_SERVICE_ID = "system/node-info-rpc";
6
- export declare class NodeInfoRpcLocal implements INodeInfoRpc {
7
- private readonly stack;
8
- private readonly rpcCommunicator;
9
- constructor(stack: NetworkStack, rpcCommunicator: ListeningRpcCommunicator);
10
- private registerDefaultServerMethods;
11
- getInfo(): Promise<NodeInfoResponse>;
12
- }
@@ -1,22 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.NodeInfoRpcLocal = exports.NODE_INFO_RPC_SERVICE_ID = void 0;
4
- const NetworkRpc_1 = require("../generated/packages/trackerless-network/protos/NetworkRpc");
5
- exports.NODE_INFO_RPC_SERVICE_ID = 'system/node-info-rpc';
6
- class NodeInfoRpcLocal {
7
- stack;
8
- rpcCommunicator;
9
- constructor(stack, rpcCommunicator) {
10
- this.stack = stack;
11
- this.rpcCommunicator = rpcCommunicator;
12
- this.registerDefaultServerMethods();
13
- }
14
- registerDefaultServerMethods() {
15
- this.rpcCommunicator.registerRpcMethod(NetworkRpc_1.NodeInfoRequest, NetworkRpc_1.NodeInfoResponse, 'getInfo', () => this.getInfo());
16
- }
17
- async getInfo() {
18
- return this.stack.createNodeInfo();
19
- }
20
- }
21
- exports.NodeInfoRpcLocal = NodeInfoRpcLocal;
22
- //# sourceMappingURL=NodeInfoRpcLocal.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"NodeInfoRpcLocal.js","sourceRoot":"","sources":["../../src/NodeInfoRpcLocal.ts"],"names":[],"mappings":";;;AAAA,4FAA+G;AAKlG,QAAA,wBAAwB,GAAG,sBAAsB,CAAA;AAE9D,MAAa,gBAAgB;IAER,KAAK,CAAc;IACnB,eAAe,CAA0B;IAE1D,YAAY,KAAmB,EAAE,eAAyC;QACtE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QAClB,IAAI,CAAC,eAAe,GAAG,eAAe,CAAA;QACtC,IAAI,CAAC,4BAA4B,EAAE,CAAA;IACvC,CAAC;IAEO,4BAA4B;QAChC,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,4BAAe,EAAE,6BAAgB,EAAE,SAAS,EAC/E,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAA;IAC7B,CAAC;IAED,KAAK,CAAC,OAAO;QACT,OAAO,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAA;IACtC,CAAC;CAEJ;AApBD,4CAoBC"}
@@ -1,6 +0,0 @@
1
- import { NodeInfoResponse } from '../generated/packages/trackerless-network/protos/NetworkRpc';
2
- import { NodeInfoRpcClient } from '../generated/packages/trackerless-network/protos/NetworkRpc.client';
3
- import { RpcRemote } from '@streamr/dht';
4
- export declare class NodeInfoRpcRemote extends RpcRemote<NodeInfoRpcClient> {
5
- getInfo(): Promise<NodeInfoResponse>;
6
- }
@@ -1,11 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.NodeInfoRpcRemote = void 0;
4
- const dht_1 = require("@streamr/dht");
5
- class NodeInfoRpcRemote extends dht_1.RpcRemote {
6
- async getInfo() {
7
- return this.getClient().getInfo({}, this.formDhtRpcOptions());
8
- }
9
- }
10
- exports.NodeInfoRpcRemote = NodeInfoRpcRemote;
11
- //# sourceMappingURL=NodeInfoRpcRemote.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"NodeInfoRpcRemote.js","sourceRoot":"","sources":["../../src/NodeInfoRpcRemote.ts"],"names":[],"mappings":";;;AAEA,sCAAwC;AAExC,MAAa,iBAAkB,SAAQ,eAA4B;IAE/D,KAAK,CAAC,OAAO;QACT,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAA;IACjE,CAAC;CAEJ;AAND,8CAMC"}
@@ -1,18 +0,0 @@
1
- import { DhtAddress, PeerDescriptor } from '@streamr/dht';
2
- import { DiscoveryLayerNode } from './discovery-layer/DiscoveryLayerNode';
3
- export declare const MIN_NEIGHBOR_COUNT = 4;
4
- export interface StreamPartNetworkSplitAvoidanceOptions {
5
- discoveryLayerNode: DiscoveryLayerNode;
6
- discoverEntryPoints: (excludedNodes?: Set<DhtAddress>) => Promise<PeerDescriptor[]>;
7
- exponentialRunOfBaseDelay?: number;
8
- }
9
- export declare class StreamPartNetworkSplitAvoidance {
10
- private readonly abortController;
11
- private readonly options;
12
- private readonly excludedNodes;
13
- private running;
14
- constructor(options: StreamPartNetworkSplitAvoidanceOptions);
15
- avoidNetworkSplit(): Promise<void>;
16
- isRunning(): boolean;
17
- destroy(): void;
18
- }
@@ -1,74 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.StreamPartNetworkSplitAvoidance = exports.MIN_NEIGHBOR_COUNT = void 0;
4
- const dht_1 = require("@streamr/dht");
5
- const utils_1 = require("@streamr/utils");
6
- /*
7
- * Tries to find new neighbors if we currently have less than MIN_NEIGHBOR_COUNT neigbors. It does so by
8
- * rejoining the stream's control layer network.
9
- *
10
- * This way we can avoid some network split scenarios. The functionality is most relevant for small stream
11
- * networks.
12
- */
13
- const logger = new utils_1.Logger(module);
14
- const exponentialRunOff = async (task, description, abortSignal, baseDelay = 500, maxAttempts = 6) => {
15
- for (let i = 1; i <= maxAttempts; i++) {
16
- if (abortSignal.aborted) {
17
- return;
18
- }
19
- const factor = 2 ** i;
20
- const delay = baseDelay * factor;
21
- try {
22
- await task();
23
- }
24
- catch {
25
- logger.trace(`${description} failed, retrying in ${delay} ms`);
26
- }
27
- try { // Abort controller throws unexpected errors in destroy?
28
- await (0, utils_1.wait)(delay, abortSignal);
29
- }
30
- catch (err) {
31
- // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
32
- logger.trace(`${err}`); // TODO Do we need logging?
33
- }
34
- }
35
- };
36
- exports.MIN_NEIGHBOR_COUNT = 4;
37
- class StreamPartNetworkSplitAvoidance {
38
- abortController;
39
- options;
40
- excludedNodes = new Set();
41
- running = false;
42
- constructor(options) {
43
- this.options = options;
44
- this.abortController = new AbortController();
45
- }
46
- async avoidNetworkSplit() {
47
- this.running = true;
48
- await exponentialRunOff(async () => {
49
- const discoveredEntrypoints = await this.options.discoverEntryPoints();
50
- const filteredEntryPoints = discoveredEntrypoints.filter((peer) => !this.excludedNodes.has((0, dht_1.toNodeId)(peer)));
51
- await this.options.discoveryLayerNode.joinDht(filteredEntryPoints, false, false);
52
- if (this.options.discoveryLayerNode.getNeighborCount() < exports.MIN_NEIGHBOR_COUNT) {
53
- // Filter out nodes that are not neighbors as those nodes are assumed to be offline
54
- const newExcludes = filteredEntryPoints
55
- .filter((peer) => !this.options.discoveryLayerNode.getNeighbors()
56
- .some((neighbor) => (0, dht_1.areEqualPeerDescriptors)(neighbor, peer)))
57
- .map((peer) => (0, dht_1.toNodeId)(peer));
58
- newExcludes.forEach((node) => this.excludedNodes.add(node));
59
- throw new Error(`Network split is still possible`);
60
- }
61
- }, 'avoid network split', this.abortController.signal, this.options.exponentialRunOfBaseDelay);
62
- this.running = false;
63
- this.excludedNodes.clear();
64
- logger.trace(`Network split avoided`);
65
- }
66
- isRunning() {
67
- return this.running;
68
- }
69
- destroy() {
70
- this.abortController.abort();
71
- }
72
- }
73
- exports.StreamPartNetworkSplitAvoidance = StreamPartNetworkSplitAvoidance;
74
- //# sourceMappingURL=StreamPartNetworkSplitAvoidance.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"StreamPartNetworkSplitAvoidance.js","sourceRoot":"","sources":["../../src/StreamPartNetworkSplitAvoidance.ts"],"names":[],"mappings":"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"}
@@ -1,11 +0,0 @@
1
- import { PeerDescriptorStoreManager } from './control-layer/PeerDescriptorStoreManager';
2
- import { DiscoveryLayerNode } from './discovery-layer/DiscoveryLayerNode';
3
- export declare class StreamPartReconnect {
4
- private abortController?;
5
- private readonly discoveryLayerNode;
6
- private readonly peerDescriptorStoreManager;
7
- constructor(discoveryLayerNode: DiscoveryLayerNode, peerDescriptorStoreManager: PeerDescriptorStoreManager);
8
- reconnect(timeout?: number): Promise<void>;
9
- isRunning(): boolean;
10
- destroy(): void;
11
- }
@@ -1,37 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.StreamPartReconnect = void 0;
4
- const utils_1 = require("@streamr/utils");
5
- const PeerDescriptorStoreManager_1 = require("./control-layer/PeerDescriptorStoreManager");
6
- const DEFAULT_RECONNECT_INTERVAL = 30 * 1000;
7
- class StreamPartReconnect {
8
- abortController;
9
- discoveryLayerNode;
10
- peerDescriptorStoreManager;
11
- constructor(discoveryLayerNode, peerDescriptorStoreManager) {
12
- this.discoveryLayerNode = discoveryLayerNode;
13
- this.peerDescriptorStoreManager = peerDescriptorStoreManager;
14
- }
15
- async reconnect(timeout = DEFAULT_RECONNECT_INTERVAL) {
16
- this.abortController = new AbortController();
17
- await (0, utils_1.scheduleAtInterval)(async () => {
18
- const entryPoints = await this.peerDescriptorStoreManager.fetchNodes();
19
- await this.discoveryLayerNode.joinDht(entryPoints);
20
- // Is is necessary to store the node as an entry point here?
21
- if (!this.peerDescriptorStoreManager.isLocalNodeStored() && entryPoints.length < PeerDescriptorStoreManager_1.MAX_NODE_COUNT) {
22
- await this.peerDescriptorStoreManager.storeAndKeepLocalNode();
23
- }
24
- if (this.discoveryLayerNode.getNeighborCount() > 0) {
25
- this.abortController.abort();
26
- }
27
- }, timeout, true, this.abortController.signal);
28
- }
29
- isRunning() {
30
- return this.abortController ? !this.abortController.signal.aborted : false;
31
- }
32
- destroy() {
33
- this.abortController?.abort();
34
- }
35
- }
36
- exports.StreamPartReconnect = StreamPartReconnect;
37
- //# sourceMappingURL=StreamPartReconnect.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"StreamPartReconnect.js","sourceRoot":"","sources":["../../src/StreamPartReconnect.ts"],"names":[],"mappings":";;;AAAA,0CAAmD;AACnD,2FAAuG;AAGvG,MAAM,0BAA0B,GAAG,EAAE,GAAG,IAAI,CAAA;AAC5C,MAAa,mBAAmB;IACpB,eAAe,CAAkB;IACxB,kBAAkB,CAAoB;IACtC,0BAA0B,CAA4B;IAEvE,YAAY,kBAAsC,EAAE,0BAAsD;QACtG,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,CAAA;QAC5C,IAAI,CAAC,0BAA0B,GAAG,0BAA0B,CAAA;IAChE,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,OAAO,GAAG,0BAA0B;QAChD,IAAI,CAAC,eAAe,GAAG,IAAI,eAAe,EAAE,CAAA;QAC5C,MAAM,IAAA,0BAAkB,EAAC,KAAK,IAAI,EAAE;YAChC,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,0BAA0B,CAAC,UAAU,EAAE,CAAA;YACtE,MAAM,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;YAClD,4DAA4D;YAC5D,IAAI,CAAC,IAAI,CAAC,0BAA0B,CAAC,iBAAiB,EAAE,IAAI,WAAW,CAAC,MAAM,GAAG,2CAAc,EAAE,CAAC;gBAC9F,MAAM,IAAI,CAAC,0BAA0B,CAAC,qBAAqB,EAAE,CAAA;YACjE,CAAC;YACD,IAAI,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,EAAE,GAAG,CAAC,EAAE,CAAC;gBACjD,IAAI,CAAC,eAAgB,CAAC,KAAK,EAAE,CAAA;YACjC,CAAC;QACL,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAA;IAClD,CAAC;IAED,SAAS;QACL,OAAO,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAA;IAC9E,CAAC;IAED,OAAO;QACH,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE,CAAA;IACjC,CAAC;CACJ;AAhCD,kDAgCC"}
@@ -1,78 +0,0 @@
1
- import { ConnectionLocker, DhtAddress, ITransport, ListeningRpcCommunicator, PeerDescriptor } from '@streamr/dht';
2
- import { StreamPartID } from '@streamr/utils';
3
- import { EventEmitter } from 'eventemitter3';
4
- import { StreamMessage } from '../../generated/packages/trackerless-network/protos/NetworkRpc';
5
- import { DiscoveryLayerNode } from '../discovery-layer/DiscoveryLayerNode';
6
- import { NodeList } from './NodeList';
7
- import { Inspector } from './inspection/Inspector';
8
- import { Handshaker } from './neighbor-discovery/Handshaker';
9
- import { NeighborFinder } from './neighbor-discovery/NeighborFinder';
10
- import { NeighborUpdateManager } from './neighbor-discovery/NeighborUpdateManager';
11
- import { Propagation } from './propagation/Propagation';
12
- import { ProxyConnectionRpcLocal } from './proxy/ProxyConnectionRpcLocal';
13
- import { TemporaryConnectionRpcLocal } from './temporary-connection/TemporaryConnectionRpcLocal';
14
- import { ContentDeliveryLayerNeighborInfo } from '../types';
15
- import { PlumtreeManager } from './plumtree/PlumtreeManager';
16
- export interface Events {
17
- message: (message: StreamMessage) => void;
18
- neighborConnected: (nodeId: DhtAddress) => void;
19
- entryPointLeaveDetected: () => void;
20
- }
21
- export interface StrictContentDeliveryLayerNodeOptions {
22
- streamPartId: StreamPartID;
23
- discoveryLayerNode: DiscoveryLayerNode;
24
- transport: ITransport;
25
- connectionLocker: ConnectionLocker;
26
- localPeerDescriptor: PeerDescriptor;
27
- nodeViewSize: number;
28
- nearbyNodeView: NodeList;
29
- randomNodeView: NodeList;
30
- leftNodeView: NodeList;
31
- rightNodeView: NodeList;
32
- neighbors: NodeList;
33
- handshaker: Handshaker;
34
- neighborFinder: NeighborFinder;
35
- neighborUpdateManager: NeighborUpdateManager;
36
- propagation: Propagation;
37
- rpcCommunicator: ListeningRpcCommunicator;
38
- neighborTargetCount: number;
39
- inspector: Inspector;
40
- temporaryConnectionRpcLocal: TemporaryConnectionRpcLocal;
41
- isLocalNodeEntryPoint: () => boolean;
42
- proxyConnectionRpcLocal?: ProxyConnectionRpcLocal;
43
- rpcRequestTimeout?: number;
44
- plumtreeManager?: PlumtreeManager;
45
- }
46
- export declare const DEFAULT_NODE_VIEW_SIZE = 20;
47
- export declare const DEFAULT_NEIGHBOR_TARGET_COUNT = 4;
48
- export declare const DEFAULT_ACCEPT_PROXY_CONNECTIONS = false;
49
- export declare class ContentDeliveryLayerNode extends EventEmitter<Events> {
50
- private started;
51
- private readonly duplicateDetectors;
52
- private options;
53
- private readonly contentDeliveryRpcLocal;
54
- private abortController;
55
- private messagesPropagated;
56
- constructor(options: StrictContentDeliveryLayerNodeOptions);
57
- start(): Promise<void>;
58
- private registerDefaultServerMethods;
59
- private onRingContactsUpdated;
60
- private onNearbyContactAdded;
61
- private onNearbyContactRemoved;
62
- private updateNearbyNodeView;
63
- private onRandomContactAdded;
64
- private onRandomContactRemoved;
65
- private onNodeDisconnected;
66
- hasProxyConnection(nodeId: DhtAddress): boolean;
67
- stop(): void;
68
- broadcast(msg: StreamMessage, previousNode?: DhtAddress): void;
69
- inspect(peerDescriptor: PeerDescriptor): Promise<boolean>;
70
- private getPropagationTargets;
71
- getOwnNodeId(): DhtAddress;
72
- getOutgoingHandshakeCount(): number;
73
- getNeighbors(): PeerDescriptor[];
74
- getInfos(): ContentDeliveryLayerNeighborInfo[];
75
- getNearbyNodeView(): NodeList;
76
- getDiagnosticInfo(): Record<string, unknown>;
77
- private isStopped;
78
- }