@streamr/trackerless-network 0.0.1-tatum.5 → 0.0.1-tatum.7

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 (177) hide show
  1. package/dist/package.json +10 -8
  2. package/dist/src/NetworkNode.js +1 -1
  3. package/dist/src/NetworkNode.js.map +1 -1
  4. package/dist/src/NetworkStack.d.ts +1 -3
  5. package/dist/src/NetworkStack.js +18 -47
  6. package/dist/src/NetworkStack.js.map +1 -1
  7. package/dist/src/identifiers.js +2 -2
  8. package/dist/src/identifiers.js.map +1 -1
  9. package/dist/src/logic/{StreamNodeServer.d.ts → DeliveryRpcLocal.d.ts} +6 -5
  10. package/dist/src/logic/{StreamNodeServer.js → DeliveryRpcLocal.js} +5 -5
  11. package/dist/src/logic/{StreamNodeServer.js.map → DeliveryRpcLocal.js.map} +1 -1
  12. package/dist/src/logic/{RemoteRandomGraphNode.d.ts → DeliveryRpcRemote.d.ts} +2 -2
  13. package/dist/src/logic/{RemoteRandomGraphNode.js → DeliveryRpcRemote.js} +5 -5
  14. package/dist/src/logic/DeliveryRpcRemote.js.map +1 -0
  15. package/dist/src/logic/EntryPointDiscovery.d.ts +35 -0
  16. package/dist/src/logic/EntryPointDiscovery.js +145 -0
  17. package/dist/src/logic/EntryPointDiscovery.js.map +1 -0
  18. package/dist/src/logic/ILayer0.d.ts +3 -6
  19. package/dist/src/logic/ILayer1.d.ts +2 -2
  20. package/dist/src/logic/NodeList.d.ts +10 -10
  21. package/dist/src/logic/NodeList.js +2 -2
  22. package/dist/src/logic/NodeList.js.map +1 -1
  23. package/dist/src/logic/RandomGraphNode.d.ts +8 -12
  24. package/dist/src/logic/RandomGraphNode.js +47 -46
  25. package/dist/src/logic/RandomGraphNode.js.map +1 -1
  26. package/dist/src/logic/StreamrNode.d.ts +9 -11
  27. package/dist/src/logic/StreamrNode.js +72 -75
  28. package/dist/src/logic/StreamrNode.js.map +1 -1
  29. package/dist/src/logic/createRandomGraphNode.d.ts +6 -1
  30. package/dist/src/logic/createRandomGraphNode.js +17 -23
  31. package/dist/src/logic/createRandomGraphNode.js.map +1 -1
  32. package/dist/src/logic/formStreamPartDeliveryServiceId.d.ts +2 -0
  33. package/dist/src/logic/formStreamPartDeliveryServiceId.js +8 -0
  34. package/dist/src/logic/formStreamPartDeliveryServiceId.js.map +1 -0
  35. package/dist/src/logic/inspect/Inspector.d.ts +3 -2
  36. package/dist/src/logic/inspect/Inspector.js +5 -5
  37. package/dist/src/logic/inspect/Inspector.js.map +1 -1
  38. package/dist/src/logic/neighbor-discovery/{HandshakerServer.d.ts → HandshakeRpcLocal.d.ts} +10 -10
  39. package/dist/src/logic/neighbor-discovery/{HandshakerServer.js → HandshakeRpcLocal.js} +13 -13
  40. package/dist/src/logic/neighbor-discovery/HandshakeRpcLocal.js.map +1 -0
  41. package/dist/src/logic/neighbor-discovery/{RemoteHandshaker.d.ts → HandshakeRpcRemote.d.ts} +1 -1
  42. package/dist/src/logic/neighbor-discovery/{RemoteHandshaker.js → HandshakeRpcRemote.js} +8 -7
  43. package/dist/src/logic/neighbor-discovery/HandshakeRpcRemote.js.map +1 -0
  44. package/dist/src/logic/neighbor-discovery/Handshaker.d.ts +8 -7
  45. package/dist/src/logic/neighbor-discovery/Handshaker.js +23 -24
  46. package/dist/src/logic/neighbor-discovery/Handshaker.js.map +1 -1
  47. package/dist/src/logic/neighbor-discovery/NeighborFinder.d.ts +1 -1
  48. package/dist/src/logic/neighbor-discovery/NeighborFinder.js +5 -5
  49. package/dist/src/logic/neighbor-discovery/NeighborFinder.js.map +1 -1
  50. package/dist/src/logic/neighbor-discovery/NeighborUpdateManager.d.ts +3 -2
  51. package/dist/src/logic/neighbor-discovery/NeighborUpdateManager.js +7 -7
  52. package/dist/src/logic/neighbor-discovery/NeighborUpdateManager.js.map +1 -1
  53. package/dist/src/logic/neighbor-discovery/{NeighborUpdateManagerServer.d.ts → NeighborUpdateRpcLocal.d.ts} +6 -6
  54. package/dist/src/logic/neighbor-discovery/{NeighborUpdateManagerServer.js → NeighborUpdateRpcLocal.js} +11 -11
  55. package/dist/src/logic/neighbor-discovery/NeighborUpdateRpcLocal.js.map +1 -0
  56. package/dist/src/logic/neighbor-discovery/{RemoteNeighborUpdateManager.d.ts → NeighborUpdateRpcRemote.d.ts} +1 -1
  57. package/dist/src/logic/neighbor-discovery/{RemoteNeighborUpdateManager.js → NeighborUpdateRpcRemote.js} +5 -5
  58. package/dist/src/logic/neighbor-discovery/NeighborUpdateRpcRemote.js.map +1 -0
  59. package/dist/src/logic/propagation/Propagation.js +2 -2
  60. package/dist/src/logic/propagation/Propagation.js.map +1 -1
  61. package/dist/src/logic/proxy/{ProxyStreamConnectionClient.d.ts → ProxyClient.d.ts} +8 -12
  62. package/dist/src/logic/proxy/{ProxyStreamConnectionClient.js → ProxyClient.js} +28 -29
  63. package/dist/src/logic/proxy/ProxyClient.js.map +1 -0
  64. package/dist/src/logic/proxy/{ProxyStreamConnectionServer.d.ts → ProxyConnectionRpcLocal.d.ts} +5 -7
  65. package/dist/src/logic/proxy/{ProxyStreamConnectionServer.js → ProxyConnectionRpcLocal.js} +6 -12
  66. package/dist/src/logic/proxy/ProxyConnectionRpcLocal.js.map +1 -0
  67. package/dist/src/logic/proxy/{RemoteProxyServer.d.ts → ProxyConnectionRpcRemote.d.ts} +1 -1
  68. package/dist/src/logic/proxy/{RemoteProxyServer.js → ProxyConnectionRpcRemote.js} +4 -4
  69. package/dist/src/logic/proxy/ProxyConnectionRpcRemote.js.map +1 -0
  70. package/dist/src/logic/temporary-connection/{TemporaryConnectionRpcServer.d.ts → TemporaryConnectionRpcLocal.d.ts} +5 -4
  71. package/dist/src/logic/temporary-connection/{TemporaryConnectionRpcServer.js → TemporaryConnectionRpcLocal.js} +6 -6
  72. package/dist/src/logic/temporary-connection/TemporaryConnectionRpcLocal.js.map +1 -0
  73. package/dist/src/logic/temporary-connection/{RemoteTemporaryConnectionRpcServer.d.ts → TemporaryConnectionRpcRemote.d.ts} +1 -1
  74. package/dist/src/logic/temporary-connection/{RemoteTemporaryConnectionRpcServer.js → TemporaryConnectionRpcRemote.js} +4 -4
  75. package/dist/src/logic/temporary-connection/TemporaryConnectionRpcRemote.js.map +1 -0
  76. package/dist/src/proto/packages/dht/protos/DhtRpc.d.ts +0 -4
  77. package/dist/src/proto/packages/dht/protos/DhtRpc.js +1 -2
  78. package/dist/src/proto/packages/dht/protos/DhtRpc.js.map +1 -1
  79. package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.client.d.ts +4 -4
  80. package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.client.js +7 -7
  81. package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.client.js.map +1 -1
  82. package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.d.ts +10 -10
  83. package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.js +7 -7
  84. package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.js.map +1 -1
  85. package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.server.d.ts +2 -2
  86. package/dist/test/benchmark/first-message.js +10 -13
  87. package/dist/test/benchmark/first-message.js.map +1 -1
  88. package/dist/test/utils/utils.d.ts +5 -5
  89. package/dist/test/utils/utils.js +14 -14
  90. package/dist/test/utils/utils.js.map +1 -1
  91. package/package.json +10 -8
  92. package/protos/NetworkRpc.proto +5 -5
  93. package/src/NetworkNode.ts +1 -1
  94. package/src/NetworkStack.ts +20 -62
  95. package/src/identifiers.ts +3 -3
  96. package/src/logic/{StreamNodeServer.ts → DeliveryRpcLocal.ts} +8 -7
  97. package/src/logic/{RemoteRandomGraphNode.ts → DeliveryRpcRemote.ts} +3 -3
  98. package/src/logic/EntryPointDiscovery.ts +181 -0
  99. package/src/logic/ILayer0.ts +3 -6
  100. package/src/logic/ILayer1.ts +2 -5
  101. package/src/logic/NodeList.ts +12 -12
  102. package/src/logic/RandomGraphNode.ts +67 -69
  103. package/src/logic/StreamrNode.ts +78 -90
  104. package/src/logic/createRandomGraphNode.ts +28 -26
  105. package/src/logic/formStreamPartDeliveryServiceId.ts +5 -0
  106. package/src/logic/inspect/Inspector.ts +8 -7
  107. package/src/logic/neighbor-discovery/{HandshakerServer.ts → HandshakeRpcLocal.ts} +20 -20
  108. package/src/logic/neighbor-discovery/{RemoteHandshaker.ts → HandshakeRpcRemote.ts} +6 -5
  109. package/src/logic/neighbor-discovery/Handshaker.ts +38 -38
  110. package/src/logic/neighbor-discovery/NeighborFinder.ts +6 -6
  111. package/src/logic/neighbor-discovery/NeighborUpdateManager.ts +15 -12
  112. package/src/logic/neighbor-discovery/{NeighborUpdateManagerServer.ts → NeighborUpdateRpcLocal.ts} +17 -17
  113. package/src/logic/neighbor-discovery/{RemoteNeighborUpdateManager.ts → NeighborUpdateRpcRemote.ts} +2 -2
  114. package/src/logic/propagation/Propagation.ts +2 -2
  115. package/src/logic/proxy/{ProxyStreamConnectionClient.ts → ProxyClient.ts} +33 -37
  116. package/src/logic/proxy/{ProxyStreamConnectionServer.ts → ProxyConnectionRpcLocal.ts} +10 -19
  117. package/src/logic/proxy/{RemoteProxyServer.ts → ProxyConnectionRpcRemote.ts} +1 -1
  118. package/src/logic/temporary-connection/{TemporaryConnectionRpcServer.ts → TemporaryConnectionRpcLocal.ts} +11 -10
  119. package/src/logic/temporary-connection/{RemoteTemporaryConnectionRpcServer.ts → TemporaryConnectionRpcRemote.ts} +1 -1
  120. package/src/proto/packages/dht/protos/DhtRpc.ts +1 -6
  121. package/src/proto/packages/trackerless-network/protos/NetworkRpc.client.ts +8 -8
  122. package/src/proto/packages/trackerless-network/protos/NetworkRpc.server.ts +2 -2
  123. package/src/proto/packages/trackerless-network/protos/NetworkRpc.ts +14 -14
  124. package/test/benchmark/first-message.ts +10 -13
  125. package/test/end-to-end/inspect.test.ts +12 -12
  126. package/test/end-to-end/proxy-and-full-node.test.ts +13 -14
  127. package/test/end-to-end/proxy-connections.test.ts +10 -12
  128. package/test/end-to-end/proxy-key-exchange.test.ts +12 -13
  129. package/test/end-to-end/random-graph-with-real-connections.test.ts +7 -7
  130. package/test/end-to-end/webrtc-full-node-network.test.ts +8 -8
  131. package/test/end-to-end/websocket-full-node-network.test.ts +8 -10
  132. package/test/integration/{RemoteRandomGraphNode.test.ts → DeliveryRpcRemote.test.ts} +17 -14
  133. package/test/integration/{RemoteHandshaker.test.ts → HandshakeRpcRemote.test.ts} +10 -9
  134. package/test/integration/Handshakes.test.ts +23 -20
  135. package/test/integration/Inspect.test.ts +3 -2
  136. package/test/integration/{RemoteNeighborUpdateManager.test.ts → NeighborUpdateRpcRemote.test.ts} +12 -10
  137. package/test/integration/NetworkNode.test.ts +9 -8
  138. package/test/integration/NetworkRpc.test.ts +5 -7
  139. package/test/integration/NetworkStack.test.ts +13 -15
  140. package/test/integration/Propagation.test.ts +2 -2
  141. package/test/integration/RandomGraphNode-Layer1Node-Latencies.test.ts +10 -8
  142. package/test/integration/RandomGraphNode-Layer1Node.test.ts +17 -17
  143. package/test/integration/StreamrNode.test.ts +5 -3
  144. package/test/integration/joining-streams-on-offline-peers.test.ts +16 -18
  145. package/test/integration/stream-without-default-entrypoints.test.ts +11 -13
  146. package/test/unit/{StreamNodeServer.test.ts → DeliveryRpcLocal.test.ts} +8 -8
  147. package/test/unit/EntrypointDiscovery.test.ts +132 -0
  148. package/test/unit/{HandshakerServer.test.ts → HandshakeRpcLocal.test.ts} +26 -24
  149. package/test/unit/Handshaker.test.ts +10 -8
  150. package/test/unit/Inspector.test.ts +4 -3
  151. package/test/unit/NeighborFinder.test.ts +5 -5
  152. package/test/unit/NodeList.test.ts +22 -13
  153. package/test/unit/{RemoteProxyServer.test.ts → ProxyConnectionRpcRemote.test.ts} +4 -4
  154. package/test/unit/RandomGraphNode.test.ts +12 -11
  155. package/test/unit/StreamMessageTranslator.test.ts +10 -9
  156. package/test/unit/StreamrNode.test.ts +8 -8
  157. package/test/utils/mock/MockLayer0.ts +7 -26
  158. package/test/utils/mock/MockLayer1.ts +6 -13
  159. package/test/utils/mock/MockNeighborFinder.ts +1 -2
  160. package/test/utils/mock/MockNeighborUpdateManager.ts +1 -2
  161. package/test/utils/mock/Transport.ts +2 -2
  162. package/test/utils/utils.ts +13 -13
  163. package/dist/src/logic/RemoteRandomGraphNode.js.map +0 -1
  164. package/dist/src/logic/StreamPartEntryPointDiscovery.d.ts +0 -39
  165. package/dist/src/logic/StreamPartEntryPointDiscovery.js +0 -194
  166. package/dist/src/logic/StreamPartEntryPointDiscovery.js.map +0 -1
  167. package/dist/src/logic/neighbor-discovery/HandshakerServer.js.map +0 -1
  168. package/dist/src/logic/neighbor-discovery/NeighborUpdateManagerServer.js.map +0 -1
  169. package/dist/src/logic/neighbor-discovery/RemoteHandshaker.js.map +0 -1
  170. package/dist/src/logic/neighbor-discovery/RemoteNeighborUpdateManager.js.map +0 -1
  171. package/dist/src/logic/proxy/ProxyStreamConnectionClient.js.map +0 -1
  172. package/dist/src/logic/proxy/ProxyStreamConnectionServer.js.map +0 -1
  173. package/dist/src/logic/proxy/RemoteProxyServer.js.map +0 -1
  174. package/dist/src/logic/temporary-connection/RemoteTemporaryConnectionRpcServer.js.map +0 -1
  175. package/dist/src/logic/temporary-connection/TemporaryConnectionRpcServer.js.map +0 -1
  176. package/src/logic/StreamPartEntryPointDiscovery.ts +0 -240
  177. package/test/unit/StreamPartEntrypointDiscovery.test.ts +0 -164
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@streamr/trackerless-network",
3
- "version": "0.0.1-tatum.5",
3
+ "version": "0.0.1-tatum.7",
4
4
  "description": "Minimal and extendable implementation of the Streamr Network node.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -30,20 +30,22 @@
30
30
  "dependencies": {
31
31
  "@protobuf-ts/runtime": "^2.8.2",
32
32
  "@protobuf-ts/runtime-rpc": "^2.8.2",
33
- "@streamr/dht": "0.0.1-tatum.5",
34
- "@streamr/proto-rpc": "0.0.1-tatum.5",
35
- "@streamr/protocol": "0.0.1-tatum.5",
36
- "@streamr/test-utils": "0.0.1-tatum.5",
37
- "@streamr/utils": "0.0.1-tatum.5",
33
+ "@streamr/dht": "0.0.1-tatum.7",
34
+ "@streamr/proto-rpc": "0.0.1-tatum.7",
35
+ "@streamr/protocol": "0.0.1-tatum.7",
36
+ "@streamr/test-utils": "0.0.1-tatum.7",
37
+ "@streamr/utils": "0.0.1-tatum.7",
38
38
  "eventemitter3": "^5.0.0",
39
39
  "lodash": "^4.17.21",
40
+ "uuid": "^9.0.1",
40
41
  "yallist": "^4.0.0"
41
42
  },
42
43
  "devDependencies": {
43
44
  "@streamr/browser-test-runner": "^0.0.1",
44
- "@types/lodash": "^4.14.199",
45
+ "@types/lodash": "^4.14.200",
46
+ "@types/uuid": "^9.0.6",
45
47
  "@types/yallist": "^4.0.1",
46
- "commander": "^11.0.0",
48
+ "commander": "^11.1.0",
47
49
  "expect": "^29.6.2",
48
50
  "express": "^4.17.1",
49
51
  "ts-essentials": "^9.4.1",
@@ -71,7 +71,7 @@ class NetworkNode {
71
71
  return this.stack.getStreamrNode().getNeighbors(streamPartId);
72
72
  }
73
73
  hasStreamPart(streamPartId) {
74
- return this.stack.getStreamrNode().hasStream(streamPartId);
74
+ return this.stack.getStreamrNode().hasStreamPart(streamPartId);
75
75
  }
76
76
  async stop() {
77
77
  this.stopped = true;
@@ -1 +1 @@
1
- {"version":3,"file":"NetworkNode.js","sourceRoot":"","sources":["../../src/NetworkNode.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"NetworkNode.js","sourceRoot":"","sources":["../../src/NetworkNode.ts"],"names":[],"mappings":"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"}
@@ -24,9 +24,7 @@ export declare class NetworkStack extends EventEmitter<NetworkStackEvents> {
24
24
  }): Promise<void>;
25
25
  broadcast(msg: StreamMessage): Promise<void>;
26
26
  start(doJoin?: boolean): Promise<void>;
27
- private joinDht;
28
- private waitForFirstConnection;
29
- joinLayer0IfRequired(streamPartId: StreamPartID): Promise<void>;
27
+ private ensureConnectedToControlLayer;
30
28
  getStreamrNode(): StreamrNode;
31
29
  getLayer0DhtNode(): DhtNode;
32
30
  getMetricsContext(): MetricsContext;
@@ -7,26 +7,6 @@ const utils_1 = require("@streamr/utils");
7
7
  const eventemitter3_1 = require("eventemitter3");
8
8
  const protocol_1 = require("@streamr/protocol");
9
9
  const NetworkRpc_1 = require("./proto/packages/trackerless-network/protos/NetworkRpc");
10
- class ReadinessListener {
11
- constructor(networkStack, dhtNode) {
12
- this.emitter = new eventemitter3_1.EventEmitter();
13
- this.onDone = () => {
14
- this.networkStack.off('stopped', this.onDone);
15
- this.dhtNode.off('connected', this.onDone);
16
- this.emitter.emit('done');
17
- };
18
- this.networkStack = networkStack;
19
- this.dhtNode = dhtNode;
20
- this.networkStack.on('stopped', this.onDone);
21
- this.dhtNode.on('connected', this.onDone);
22
- }
23
- async waitUntilReady(timeout) {
24
- if (this.dhtNode.getNumberOfConnections() === 0) {
25
- await (0, utils_1.waitForEvent3)(this.emitter, 'done', timeout);
26
- }
27
- }
28
- }
29
- const DEFAULT_FIRST_CONNECTION_TIMEOUT = 5000;
30
10
  class NetworkStack extends eventemitter3_1.EventEmitter {
31
11
  constructor(options) {
32
12
  super();
@@ -38,7 +18,6 @@ class NetworkStack extends eventemitter3_1.EventEmitter {
38
18
  });
39
19
  this.streamrNode = new StreamrNode_1.StreamrNode({
40
20
  ...options.networkNode,
41
- nodeName: options.networkNode?.nodeName ?? options.layer0?.nodeName,
42
21
  metricsContext: this.metricsContext
43
22
  });
44
23
  }
@@ -46,7 +25,7 @@ class NetworkStack extends eventemitter3_1.EventEmitter {
46
25
  if (this.getStreamrNode().isProxiedStreamPart(streamPartId)) {
47
26
  throw new Error(`Cannot join to ${streamPartId} as proxy connections have been set`);
48
27
  }
49
- await this.joinLayer0IfRequired(streamPartId);
28
+ await this.ensureConnectedToControlLayer();
50
29
  this.getStreamrNode().joinStreamPart(streamPartId);
51
30
  if (neighborRequirement !== undefined) {
52
31
  await (0, utils_1.waitForCondition)(() => {
@@ -59,47 +38,39 @@ class NetworkStack extends eventemitter3_1.EventEmitter {
59
38
  if (this.getStreamrNode().isProxiedStreamPart(streamPartId, NetworkRpc_1.ProxyDirection.SUBSCRIBE) && (msg.messageType === NetworkRpc_1.StreamMessageType.MESSAGE)) {
60
39
  throw new Error(`Cannot broadcast to ${streamPartId} as proxy subscribe connections have been set`);
61
40
  }
62
- await this.joinLayer0IfRequired(streamPartId);
41
+ // TODO could combine these two calls to isProxiedStreamPart?
42
+ if (!this.streamrNode.isProxiedStreamPart(streamPartId)) {
43
+ await this.ensureConnectedToControlLayer();
44
+ }
63
45
  this.getStreamrNode().broadcast(msg);
64
46
  }
65
47
  async start(doJoin = true) {
66
48
  await this.layer0DhtNode.start();
67
49
  const connectionManager = this.layer0DhtNode.getTransport();
68
- if ((this.options.layer0?.entryPoints !== undefined) && (this.options.layer0.entryPoints.some((entryPoint) => (0, dht_1.isSamePeerDescriptor)(entryPoint, this.layer0DhtNode.getPeerDescriptor())))) {
50
+ if ((this.options.layer0?.entryPoints !== undefined) && (this.options.layer0.entryPoints.some((entryPoint) => (0, dht_1.areEqualPeerDescriptors)(entryPoint, this.layer0DhtNode.getPeerDescriptor())))) {
69
51
  await this.layer0DhtNode?.joinDht(this.options.layer0.entryPoints);
70
52
  }
71
53
  else {
72
54
  if (doJoin) {
73
- await this.joinDht();
55
+ // in practice there aren't be existing connections and therefore this always connects
56
+ await this.ensureConnectedToControlLayer();
74
57
  }
75
58
  }
76
59
  await this.streamrNode?.start(this.layer0DhtNode, connectionManager, connectionManager);
77
60
  }
78
- async joinDht() {
79
- setImmediate(async () => {
80
- if (this.options.layer0?.entryPoints !== undefined) {
81
- // TODO should catch possible rejection?
82
- await this.layer0DhtNode?.joinDht(this.options.layer0.entryPoints);
83
- }
84
- });
85
- await this.waitForFirstConnection();
86
- }
87
- async waitForFirstConnection() {
88
- const readinessListener = new ReadinessListener(this, this.layer0DhtNode);
89
- const timeout = this.options.networkNode?.firstConnectionTimeout ?? DEFAULT_FIRST_CONNECTION_TIMEOUT;
90
- await readinessListener.waitUntilReady(timeout);
91
- }
92
- async joinLayer0IfRequired(streamPartId) {
93
- if (this.streamrNode.isProxiedStreamPart(streamPartId)) {
94
- return;
95
- }
61
+ async ensureConnectedToControlLayer() {
96
62
  // TODO we could wrap joinDht with pOnce and call it here (no else-if needed in that case)
97
63
  if (!this.layer0DhtNode.hasJoined()) {
98
- await this.joinDht();
99
- }
100
- else if (this.layer0DhtNode.getNumberOfConnections() < 1) {
101
- await this.waitForFirstConnection();
64
+ setImmediate(async () => {
65
+ if (this.options.layer0?.entryPoints !== undefined) {
66
+ // TODO should catch possible rejection?
67
+ // the question mark is there to avoid problems when stop() is called before start()
68
+ // -> TODO change to exlamation mark if we don't support that (and remove NetworkStackStoppedDuringStart.test)
69
+ await this.layer0DhtNode?.joinDht(this.options.layer0.entryPoints);
70
+ }
71
+ });
102
72
  }
73
+ await this.layer0DhtNode.waitForNetworkConnectivity();
103
74
  }
104
75
  getStreamrNode() {
105
76
  return this.streamrNode;
@@ -1 +1 @@
1
- {"version":3,"file":"NetworkStack.js","sourceRoot":"","sources":["../../src/NetworkStack.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"NetworkStack.js","sourceRoot":"","sources":["../../src/NetworkStack.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getNodeIdFromPeerDescriptor = void 0;
4
- const dht_1 = require("@streamr/dht");
4
+ const utils_1 = require("@streamr/utils");
5
5
  const getNodeIdFromPeerDescriptor = (peerDescriptor) => {
6
- return (0, dht_1.keyFromPeerDescriptor)(peerDescriptor);
6
+ return (0, utils_1.binaryToHex)(peerDescriptor.kademliaId);
7
7
  };
8
8
  exports.getNodeIdFromPeerDescriptor = getNodeIdFromPeerDescriptor;
9
9
  //# sourceMappingURL=identifiers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"identifiers.js","sourceRoot":"","sources":["../../src/identifiers.ts"],"names":[],"mappings":";;;AAAA,sCAAoE;AAK7D,MAAM,2BAA2B,GAAG,CAAC,cAA8B,EAAU,EAAE;IAClF,OAAO,IAAA,2BAAqB,EAAC,cAAc,CAAsB,CAAA;AACrE,CAAC,CAAA;AAFY,QAAA,2BAA2B,+BAEvC"}
1
+ {"version":3,"file":"identifiers.js","sourceRoot":"","sources":["../../src/identifiers.ts"],"names":[],"mappings":";;;AACA,0CAA2D;AAIpD,MAAM,2BAA2B,GAAG,CAAC,cAA8B,EAAU,EAAE;IAClF,OAAO,IAAA,mBAAW,EAAC,cAAc,CAAC,UAAU,CAAsB,CAAA;AACtE,CAAC,CAAA;AAFY,QAAA,2BAA2B,+BAEvC"}
@@ -1,21 +1,22 @@
1
1
  import { ListeningRpcCommunicator, PeerDescriptor } from '@streamr/dht';
2
2
  import { Empty } from '../proto/google/protobuf/empty';
3
3
  import { LeaveStreamPartNotice, MessageID, MessageRef, StreamMessage } from '../proto/packages/trackerless-network/protos/NetworkRpc';
4
- import { INetworkRpc } from '../proto/packages/trackerless-network/protos/NetworkRpc.server';
4
+ import { IDeliveryRpc } from '../proto/packages/trackerless-network/protos/NetworkRpc.server';
5
5
  import { ServerCallContext } from '@protobuf-ts/runtime-rpc';
6
6
  import { NodeID } from '../identifiers';
7
- export interface StreamNodeServerConfig {
7
+ import { StreamPartID } from '@streamr/protocol';
8
+ export interface DeliveryRpcLocalConfig {
8
9
  ownPeerDescriptor: PeerDescriptor;
9
- randomGraphId: string;
10
+ streamPartId: StreamPartID;
10
11
  markAndCheckDuplicate: (messageId: MessageID, previousMessageRef?: MessageRef) => boolean;
11
12
  broadcast: (message: StreamMessage, previousNode?: NodeID) => void;
12
13
  onLeaveNotice(senderId: NodeID): void;
13
14
  markForInspection(senderId: NodeID, messageId: MessageID): void;
14
15
  rpcCommunicator: ListeningRpcCommunicator;
15
16
  }
16
- export declare class StreamNodeServer implements INetworkRpc {
17
+ export declare class DeliveryRpcLocal implements IDeliveryRpc {
17
18
  private readonly config;
18
- constructor(config: StreamNodeServerConfig);
19
+ constructor(config: DeliveryRpcLocalConfig);
19
20
  sendStreamMessage(message: StreamMessage, context: ServerCallContext): Promise<Empty>;
20
21
  leaveStreamPartNotice(message: LeaveStreamPartNotice, context: ServerCallContext): Promise<Empty>;
21
22
  }
@@ -1,9 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.StreamNodeServer = void 0;
3
+ exports.DeliveryRpcLocal = void 0;
4
4
  const empty_1 = require("../proto/google/protobuf/empty");
5
5
  const identifiers_1 = require("../identifiers");
6
- class StreamNodeServer {
6
+ class DeliveryRpcLocal {
7
7
  constructor(config) {
8
8
  this.config = config;
9
9
  }
@@ -16,7 +16,7 @@ class StreamNodeServer {
16
16
  return empty_1.Empty;
17
17
  }
18
18
  async leaveStreamPartNotice(message, context) {
19
- if (message.randomGraphId === this.config.randomGraphId) {
19
+ if (message.streamPartId === this.config.streamPartId) {
20
20
  const senderPeerDescriptor = context.incomingSourceDescriptor;
21
21
  const senderId = (0, identifiers_1.getNodeIdFromPeerDescriptor)(senderPeerDescriptor);
22
22
  this.config.onLeaveNotice(senderId);
@@ -24,5 +24,5 @@ class StreamNodeServer {
24
24
  return empty_1.Empty;
25
25
  }
26
26
  }
27
- exports.StreamNodeServer = StreamNodeServer;
28
- //# sourceMappingURL=StreamNodeServer.js.map
27
+ exports.DeliveryRpcLocal = DeliveryRpcLocal;
28
+ //# sourceMappingURL=DeliveryRpcLocal.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"StreamNodeServer.js","sourceRoot":"","sources":["../../../src/logic/StreamNodeServer.ts"],"names":[],"mappings":";;;AACA,0DAAsD;AAStD,gDAAoE;AAYpE,MAAa,gBAAgB;IAIzB,YAAY,MAA8B;QACtC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACxB,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,OAAsB,EAAE,OAA0B;QACtE,MAAM,YAAY,GAAG,IAAA,yCAA2B,EAAE,OAA0B,CAAC,wBAAyB,CAAC,CAAA;QACvG,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,YAAY,EAAE,OAAO,CAAC,SAAU,CAAC,CAAA;QAC/D,IAAI,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,OAAO,CAAC,SAAU,EAAE,OAAO,CAAC,kBAAkB,CAAC,EAAE;YACnF,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,YAAY,CAAC,CAAA;SAC/C;QACD,OAAO,aAAK,CAAA;IAChB,CAAC;IAED,KAAK,CAAC,qBAAqB,CAAC,OAA8B,EAAE,OAA0B;QAClF,IAAI,OAAO,CAAC,aAAa,KAAK,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE;YACrD,MAAM,oBAAoB,GAAI,OAA0B,CAAC,wBAAyB,CAAA;YAClF,MAAM,QAAQ,GAAG,IAAA,yCAA2B,EAAC,oBAAoB,CAAC,CAAA;YAClE,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;SACtC;QACD,OAAO,aAAK,CAAA;IAChB,CAAC;CACJ;AAzBD,4CAyBC"}
1
+ {"version":3,"file":"DeliveryRpcLocal.js","sourceRoot":"","sources":["../../../src/logic/DeliveryRpcLocal.ts"],"names":[],"mappings":";;;AACA,0DAAsD;AAStD,gDAAoE;AAapE,MAAa,gBAAgB;IAIzB,YAAY,MAA8B;QACtC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACxB,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,OAAsB,EAAE,OAA0B;QACtE,MAAM,YAAY,GAAG,IAAA,yCAA2B,EAAE,OAA0B,CAAC,wBAAyB,CAAC,CAAA;QACvG,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,YAAY,EAAE,OAAO,CAAC,SAAU,CAAC,CAAA;QAC/D,IAAI,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,OAAO,CAAC,SAAU,EAAE,OAAO,CAAC,kBAAkB,CAAC,EAAE;YACnF,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,YAAY,CAAC,CAAA;SAC/C;QACD,OAAO,aAAK,CAAA;IAChB,CAAC;IAED,KAAK,CAAC,qBAAqB,CAAC,OAA8B,EAAE,OAA0B;QAClF,IAAI,OAAO,CAAC,YAAY,KAAK,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;YACnD,MAAM,oBAAoB,GAAI,OAA0B,CAAC,wBAAyB,CAAA;YAClF,MAAM,QAAQ,GAAG,IAAA,yCAA2B,EAAC,oBAAoB,CAAC,CAAA;YAClE,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;SACtC;QACD,OAAO,aAAK,CAAA;IAChB,CAAC;CACJ;AAzBD,4CAyBC"}
@@ -1,7 +1,7 @@
1
1
  import { Remote } from '@streamr/dht';
2
2
  import { StreamMessage } from '../proto/packages/trackerless-network/protos/NetworkRpc';
3
- import { INetworkRpcClient } from '../proto/packages/trackerless-network/protos/NetworkRpc.client';
4
- export declare class RemoteRandomGraphNode extends Remote<INetworkRpcClient> {
3
+ import { IDeliveryRpcClient } from '../proto/packages/trackerless-network/protos/NetworkRpc.client';
4
+ export declare class DeliveryRpcRemote extends Remote<IDeliveryRpcClient> {
5
5
  sendStreamMessage(msg: StreamMessage): Promise<void>;
6
6
  leaveStreamPartNotice(): void;
7
7
  }
@@ -1,10 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.RemoteRandomGraphNode = void 0;
3
+ exports.DeliveryRpcRemote = void 0;
4
4
  const dht_1 = require("@streamr/dht");
5
5
  const utils_1 = require("@streamr/utils");
6
6
  const logger = new utils_1.Logger(module);
7
- class RemoteRandomGraphNode extends dht_1.Remote {
7
+ class DeliveryRpcRemote extends dht_1.Remote {
8
8
  async sendStreamMessage(msg) {
9
9
  const options = this.formDhtRpcOptions({
10
10
  notification: true
@@ -15,7 +15,7 @@ class RemoteRandomGraphNode extends dht_1.Remote {
15
15
  }
16
16
  leaveStreamPartNotice() {
17
17
  const notification = {
18
- randomGraphId: this.getServiceId()
18
+ streamPartId: this.getServiceId()
19
19
  };
20
20
  const options = this.formDhtRpcOptions({
21
21
  notification: true
@@ -25,5 +25,5 @@ class RemoteRandomGraphNode extends dht_1.Remote {
25
25
  });
26
26
  }
27
27
  }
28
- exports.RemoteRandomGraphNode = RemoteRandomGraphNode;
29
- //# sourceMappingURL=RemoteRandomGraphNode.js.map
28
+ exports.DeliveryRpcRemote = DeliveryRpcRemote;
29
+ //# sourceMappingURL=DeliveryRpcRemote.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DeliveryRpcRemote.js","sourceRoot":"","sources":["../../../src/logic/DeliveryRpcRemote.ts"],"names":[],"mappings":";;;AAAA,sCAAqC;AACrC,0CAAuC;AAOvC,MAAM,MAAM,GAAG,IAAI,cAAM,CAAC,MAAM,CAAC,CAAA;AAEjC,MAAa,iBAAkB,SAAQ,YAA0B;IAE7D,KAAK,CAAC,iBAAiB,CAAC,GAAkB;QACtC,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC;YACnC,YAAY,EAAE,IAAI;SACrB,CAAC,CAAA;QACF,IAAI,CAAC,SAAS,EAAE,CAAC,iBAAiB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YACxD,MAAM,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAA;QAC/C,CAAC,CAAC,CAAA;IACN,CAAC;IAED,qBAAqB;QACjB,MAAM,YAAY,GAA0B;YACxC,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE;SACpC,CAAA;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC;YACnC,YAAY,EAAE,IAAI;SACrB,CAAC,CAAA;QACF,IAAI,CAAC,SAAS,EAAE,CAAC,qBAAqB,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YACrE,MAAM,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAA;QACxD,CAAC,CAAC,CAAA;IACN,CAAC;CACJ;AAtBD,8CAsBC"}
@@ -0,0 +1,35 @@
1
+ import { DataEntry, PeerDescriptor } from '@streamr/dht';
2
+ import { StreamPartID } from '@streamr/protocol';
3
+ import { Any } from '../proto/google/protobuf/any';
4
+ import { ILayer1 } from './ILayer1';
5
+ export declare const streamPartIdToDataKey: (streamPartId: StreamPartID) => Uint8Array;
6
+ interface FindEntryPointsResult {
7
+ entryPointsFromDht: boolean;
8
+ discoveredEntryPoints: PeerDescriptor[];
9
+ }
10
+ export declare const NETWORK_SPLIT_AVOIDANCE_LIMIT = 4;
11
+ interface EntryPointDiscoveryConfig {
12
+ streamPartId: StreamPartID;
13
+ ownPeerDescriptor: PeerDescriptor;
14
+ layer1: ILayer1;
15
+ getEntryPointData: (key: Uint8Array) => Promise<DataEntry[]>;
16
+ storeEntryPointData: (key: Uint8Array, data: Any) => Promise<PeerDescriptor[]>;
17
+ deleteEntryPointData: (key: Uint8Array) => Promise<void>;
18
+ storeInterval?: number;
19
+ }
20
+ export declare class EntryPointDiscovery {
21
+ private readonly abortController;
22
+ private readonly config;
23
+ private readonly storeInterval;
24
+ private readonly networkSplitAvoidedNodes;
25
+ constructor(config: EntryPointDiscoveryConfig);
26
+ discoverEntryPointsFromDht(knownEntryPointCount: number): Promise<FindEntryPointsResult>;
27
+ private discoverEntryPoints;
28
+ private queryEntrypoints;
29
+ storeSelfAsEntryPointIfNecessary(currentEntrypointCount: number): Promise<void>;
30
+ private storeSelfAsEntryPoint;
31
+ private keepSelfAsEntryPoint;
32
+ private avoidNetworkSplit;
33
+ destroy(): Promise<void>;
34
+ }
35
+ export {};
@@ -0,0 +1,145 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EntryPointDiscovery = exports.NETWORK_SPLIT_AVOIDANCE_LIMIT = exports.streamPartIdToDataKey = void 0;
4
+ const dht_1 = require("@streamr/dht");
5
+ const utils_1 = require("@streamr/utils");
6
+ const crypto_1 = require("crypto");
7
+ const identifiers_1 = require("../identifiers");
8
+ const any_1 = require("../proto/google/protobuf/any");
9
+ const streamPartIdToDataKey = (streamPartId) => {
10
+ return new Uint8Array((0, crypto_1.createHash)('md5').update(streamPartId).digest());
11
+ };
12
+ exports.streamPartIdToDataKey = streamPartIdToDataKey;
13
+ const parseEntryPointData = (dataEntries) => {
14
+ return dataEntries.filter((entry) => !entry.deleted).map((entry) => any_1.Any.unpack(entry.data, dht_1.PeerDescriptor));
15
+ };
16
+ const exponentialRunOff = async (task, description, abortSignal, baseDelay = 500, maxAttempts = 6) => {
17
+ for (let i = 1; i <= maxAttempts; i++) {
18
+ if (abortSignal.aborted) {
19
+ return;
20
+ }
21
+ const factor = 2 ** i;
22
+ const delay = baseDelay * factor;
23
+ try {
24
+ await task();
25
+ }
26
+ catch (e) {
27
+ logger.trace(`${description} failed, retrying in ${delay} ms`);
28
+ }
29
+ try { // Abort controller throws unexpected errors in destroy?
30
+ await (0, utils_1.wait)(delay, abortSignal);
31
+ }
32
+ catch (err) {
33
+ logger.trace(`${err}`);
34
+ }
35
+ }
36
+ };
37
+ const logger = new utils_1.Logger(module);
38
+ const ENTRYPOINT_STORE_LIMIT = 8;
39
+ exports.NETWORK_SPLIT_AVOIDANCE_LIMIT = 4;
40
+ class EntryPointDiscovery {
41
+ constructor(config) {
42
+ this.networkSplitAvoidedNodes = new Set();
43
+ this.config = config;
44
+ this.abortController = new AbortController();
45
+ this.storeInterval = this.config.storeInterval ?? 60000;
46
+ }
47
+ async discoverEntryPointsFromDht(knownEntryPointCount) {
48
+ if (knownEntryPointCount > 0) {
49
+ return {
50
+ entryPointsFromDht: false,
51
+ discoveredEntryPoints: []
52
+ };
53
+ }
54
+ const discoveredEntryPoints = await this.discoverEntryPoints();
55
+ if (discoveredEntryPoints.length === 0) {
56
+ discoveredEntryPoints.push(this.config.ownPeerDescriptor);
57
+ }
58
+ return {
59
+ discoveredEntryPoints,
60
+ entryPointsFromDht: true
61
+ };
62
+ }
63
+ async discoverEntryPoints() {
64
+ const dataKey = (0, exports.streamPartIdToDataKey)(this.config.streamPartId);
65
+ const discoveredEntryPoints = await this.queryEntrypoints(dataKey);
66
+ const filtered = discoveredEntryPoints.filter((node) => !this.networkSplitAvoidedNodes.has((0, identifiers_1.getNodeIdFromPeerDescriptor)(node)));
67
+ // If all discovered entry points have previously been detected as offline, try again
68
+ if (filtered.length > 0) {
69
+ return filtered;
70
+ }
71
+ else {
72
+ return discoveredEntryPoints;
73
+ }
74
+ }
75
+ async queryEntrypoints(key) {
76
+ logger.trace(`Finding data from dht node ${(0, identifiers_1.getNodeIdFromPeerDescriptor)(this.config.ownPeerDescriptor)}`);
77
+ try {
78
+ const result = await this.config.getEntryPointData(key);
79
+ return parseEntryPointData(result);
80
+ }
81
+ catch (err) {
82
+ return [];
83
+ }
84
+ }
85
+ async storeSelfAsEntryPointIfNecessary(currentEntrypointCount) {
86
+ if (this.abortController.signal.aborted) {
87
+ return;
88
+ }
89
+ const possibleNetworkSplitDetected = this.config.layer1.getBucketSize() < exports.NETWORK_SPLIT_AVOIDANCE_LIMIT;
90
+ if ((currentEntrypointCount < ENTRYPOINT_STORE_LIMIT) || possibleNetworkSplitDetected) {
91
+ await this.storeSelfAsEntryPoint();
92
+ await this.keepSelfAsEntryPoint();
93
+ }
94
+ if (possibleNetworkSplitDetected) {
95
+ setImmediate(() => this.avoidNetworkSplit());
96
+ }
97
+ }
98
+ async storeSelfAsEntryPoint() {
99
+ const ownPeerDescriptor = this.config.ownPeerDescriptor;
100
+ const dataToStore = any_1.Any.pack(ownPeerDescriptor, dht_1.PeerDescriptor);
101
+ try {
102
+ await this.config.storeEntryPointData((0, exports.streamPartIdToDataKey)(this.config.streamPartId), dataToStore);
103
+ }
104
+ catch (err) {
105
+ logger.warn(`Failed to store self as entrypoint for ${this.config.streamPartId}`);
106
+ }
107
+ }
108
+ async keepSelfAsEntryPoint() {
109
+ await (0, utils_1.scheduleAtInterval)(async () => {
110
+ logger.trace(`Attempting to keep self as entrypoint for ${this.config.streamPartId}`);
111
+ try {
112
+ const discovered = await this.discoverEntryPoints();
113
+ if (discovered.length < ENTRYPOINT_STORE_LIMIT
114
+ || discovered.some((peerDescriptor) => (0, dht_1.areEqualPeerDescriptors)(peerDescriptor, this.config.ownPeerDescriptor))) {
115
+ await this.storeSelfAsEntryPoint();
116
+ }
117
+ }
118
+ catch (err) {
119
+ logger.debug(`Failed to keep self as entrypoint for ${this.config.streamPartId}`);
120
+ }
121
+ }, this.storeInterval, false, this.abortController.signal);
122
+ }
123
+ async avoidNetworkSplit() {
124
+ await exponentialRunOff(async () => {
125
+ const rediscoveredEntrypoints = await this.discoverEntryPoints();
126
+ await this.config.layer1.joinDht(rediscoveredEntrypoints, false, false);
127
+ if (this.config.layer1.getBucketSize() < exports.NETWORK_SPLIT_AVOIDANCE_LIMIT) {
128
+ // Filter out nodes that are not in the k-bucket, assumed to be offline
129
+ const nodesToAvoid = rediscoveredEntrypoints
130
+ .filter((peer) => !this.config.layer1.getKBucketPeers().includes(peer))
131
+ .map((peer) => (0, identifiers_1.getNodeIdFromPeerDescriptor)(peer));
132
+ nodesToAvoid.forEach((node) => this.networkSplitAvoidedNodes.add(node));
133
+ throw new Error(`Network split is still possible`);
134
+ }
135
+ }, 'avoid network split', this.abortController.signal);
136
+ this.networkSplitAvoidedNodes.clear();
137
+ logger.trace(`Network split avoided`);
138
+ }
139
+ async destroy() {
140
+ this.abortController.abort();
141
+ await this.config.deleteEntryPointData((0, exports.streamPartIdToDataKey)(this.config.streamPartId));
142
+ }
143
+ }
144
+ exports.EntryPointDiscovery = EntryPointDiscovery;
145
+ //# sourceMappingURL=EntryPointDiscovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EntryPointDiscovery.js","sourceRoot":"","sources":["../../../src/logic/EntryPointDiscovery.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,10 @@
1
- import { DataEntry, ITransport, PeerDescriptor, PeerID, RecursiveFindResult } from '@streamr/dht';
1
+ import { DataEntry, ITransport, PeerDescriptor } from '@streamr/dht';
2
2
  import { Any } from '../proto/google/protobuf/any';
3
3
  export interface ILayer0 extends ITransport {
4
4
  getPeerDescriptor(): PeerDescriptor;
5
- getNodeId(): PeerID;
6
- getDataFromDht(key: Uint8Array): Promise<RecursiveFindResult>;
7
- findDataViaPeer(key: Uint8Array, node: PeerDescriptor): Promise<DataEntry[]>;
5
+ getDataFromDht(key: Uint8Array): Promise<DataEntry[]>;
8
6
  storeDataToDht(key: Uint8Array, data: Any): Promise<PeerDescriptor[]>;
9
7
  deleteDataFromDht(key: Uint8Array): Promise<void>;
10
- getKnownEntryPoints(): PeerDescriptor[];
11
- isJoinOngoing(): boolean;
8
+ waitForNetworkConnectivity(): Promise<void>;
12
9
  stop(): Promise<void>;
13
10
  }
@@ -1,4 +1,4 @@
1
- import { PeerDescriptor, SortedContactList, DhtPeer } from '@streamr/dht';
1
+ import { PeerDescriptor } from '@streamr/dht';
2
2
  export interface ILayer1Events {
3
3
  newContact: (peerDescriptor: PeerDescriptor, closestPeers: PeerDescriptor[]) => void;
4
4
  contactRemoved: (peerDescriptor: PeerDescriptor, closestPeers: PeerDescriptor[]) => void;
@@ -10,7 +10,7 @@ export interface ILayer1 {
10
10
  once<T extends keyof ILayer1Events>(eventName: T, listener: (peerDescriptor: PeerDescriptor, peers: PeerDescriptor[]) => void): void;
11
11
  off<T extends keyof ILayer1Events>(eventName: T, listener: (peerDescriptor: PeerDescriptor, peers: PeerDescriptor[]) => void): void;
12
12
  removeContact: (peerDescriptor: PeerDescriptor, removeFromOpenInternetPeers?: boolean) => void;
13
- getNeighborList: () => SortedContactList<DhtPeer>;
13
+ getClosestContacts: (maxCount?: number) => PeerDescriptor[];
14
14
  getKBucketPeers: () => PeerDescriptor[];
15
15
  getBucketSize: () => number;
16
16
  joinDht: (entryPoints: PeerDescriptor[], doRandomJoin?: boolean, retry?: boolean) => Promise<void>;
@@ -1,28 +1,28 @@
1
1
  import { PeerDescriptor } from '@streamr/dht';
2
- import { RemoteRandomGraphNode } from './RemoteRandomGraphNode';
2
+ import { DeliveryRpcRemote } from './DeliveryRpcRemote';
3
3
  import { EventEmitter } from 'eventemitter3';
4
4
  import { NodeID } from '../identifiers';
5
5
  export interface Events {
6
- nodeAdded: (id: NodeID, remote: RemoteRandomGraphNode) => any;
6
+ nodeAdded: (id: NodeID, remote: DeliveryRpcRemote) => any;
7
7
  }
8
8
  export declare class NodeList extends EventEmitter<Events> {
9
9
  private readonly nodes;
10
10
  private readonly limit;
11
11
  private ownId;
12
12
  constructor(ownId: NodeID, limit: number);
13
- add(remote: RemoteRandomGraphNode): void;
13
+ add(remote: DeliveryRpcRemote): void;
14
14
  remove(peerDescriptor: PeerDescriptor): void;
15
15
  removeById(nodeId: NodeID): void;
16
16
  hasNode(peerDescriptor: PeerDescriptor): boolean;
17
17
  hasNodeById(nodeId: NodeID): boolean;
18
- replaceAll(neighbors: RemoteRandomGraphNode[]): void;
18
+ replaceAll(neighbors: DeliveryRpcRemote[]): void;
19
19
  getIds(): NodeID[];
20
- getNeighborById(id: NodeID): RemoteRandomGraphNode | undefined;
20
+ get(id: NodeID): DeliveryRpcRemote | undefined;
21
21
  size(exclude?: NodeID[]): number;
22
- getRandom(exclude: NodeID[]): RemoteRandomGraphNode | undefined;
23
- getClosest(exclude: NodeID[]): RemoteRandomGraphNode | undefined;
24
- getClosestAndFurthest(exclude: NodeID[]): RemoteRandomGraphNode[];
25
- getFurthest(exclude: NodeID[]): RemoteRandomGraphNode | undefined;
26
- getNodes(): RemoteRandomGraphNode[];
22
+ getRandom(exclude: NodeID[]): DeliveryRpcRemote | undefined;
23
+ getClosest(exclude: NodeID[]): DeliveryRpcRemote | undefined;
24
+ getClosestAndFurthest(exclude: NodeID[]): DeliveryRpcRemote[];
25
+ getFurthest(exclude: NodeID[]): DeliveryRpcRemote | undefined;
26
+ getAll(): DeliveryRpcRemote[];
27
27
  stop(): void;
28
28
  }
@@ -48,7 +48,7 @@ class NodeList extends eventemitter3_1.EventEmitter {
48
48
  getIds() {
49
49
  return Array.from(this.nodes.keys());
50
50
  }
51
- getNeighborById(id) {
51
+ get(id) {
52
52
  return this.nodes.get(id);
53
53
  }
54
54
  size(exclude = []) {
@@ -72,7 +72,7 @@ class NodeList extends eventemitter3_1.EventEmitter {
72
72
  const included = getValuesOfIncludedKeys(this.nodes, exclude);
73
73
  return included[included.length - 1];
74
74
  }
75
- getNodes() {
75
+ getAll() {
76
76
  return Array.from(this.nodes.values());
77
77
  }
78
78
  stop() {