@streamr/trackerless-network 100.0.0-pretestnet.6 → 100.0.0-rc.1

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 (241) hide show
  1. package/README.md +57 -0
  2. package/dist/package.json +12 -12
  3. package/dist/src/NetworkNode.d.ts +6 -5
  4. package/dist/src/NetworkNode.js +9 -2
  5. package/dist/src/NetworkNode.js.map +1 -1
  6. package/dist/src/NetworkStack.d.ts +13 -9
  7. package/dist/src/NetworkStack.js +80 -12
  8. package/dist/src/NetworkStack.js.map +1 -1
  9. package/dist/src/exports.d.ts +4 -3
  10. package/dist/src/exports.js +12 -1
  11. package/dist/src/exports.js.map +1 -1
  12. package/dist/src/logic/DeliveryRpcLocal.d.ts +4 -5
  13. package/dist/src/logic/DeliveryRpcLocal.js +6 -5
  14. package/dist/src/logic/DeliveryRpcLocal.js.map +1 -1
  15. package/dist/src/logic/DeliveryRpcRemote.d.ts +5 -4
  16. package/dist/src/logic/DeliveryRpcRemote.js +4 -3
  17. package/dist/src/logic/DeliveryRpcRemote.js.map +1 -1
  18. package/dist/src/logic/DuplicateMessageDetector.d.ts +3 -3
  19. package/dist/src/logic/DuplicateMessageDetector.js +10 -6
  20. package/dist/src/logic/DuplicateMessageDetector.js.map +1 -1
  21. package/dist/src/logic/EntryPointDiscovery.d.ts +8 -5
  22. package/dist/src/logic/EntryPointDiscovery.js +24 -15
  23. package/dist/src/logic/EntryPointDiscovery.js.map +1 -1
  24. package/dist/src/logic/Layer0Node.d.ts +6 -4
  25. package/dist/src/logic/Layer1Node.d.ts +12 -6
  26. package/dist/src/logic/NodeList.d.ts +13 -15
  27. package/dist/src/logic/NodeList.js +19 -16
  28. package/dist/src/logic/NodeList.js.map +1 -1
  29. package/dist/src/logic/RandomGraphNode.d.ts +26 -22
  30. package/dist/src/logic/RandomGraphNode.js +85 -52
  31. package/dist/src/logic/RandomGraphNode.js.map +1 -1
  32. package/dist/src/logic/StreamrNode.d.ts +6 -6
  33. package/dist/src/logic/StreamrNode.js +53 -37
  34. package/dist/src/logic/StreamrNode.js.map +1 -1
  35. package/dist/src/logic/createRandomGraphNode.d.ts +2 -2
  36. package/dist/src/logic/createRandomGraphNode.js +33 -21
  37. package/dist/src/logic/createRandomGraphNode.js.map +1 -1
  38. package/dist/src/logic/formStreamPartDeliveryServiceId.d.ts +2 -1
  39. package/dist/src/logic/formStreamPartDeliveryServiceId.js.map +1 -1
  40. package/dist/src/logic/inspect/InspectSession.d.ts +4 -3
  41. package/dist/src/logic/inspect/InspectSession.js +6 -2
  42. package/dist/src/logic/inspect/InspectSession.js.map +1 -1
  43. package/dist/src/logic/inspect/Inspector.d.ts +11 -16
  44. package/dist/src/logic/inspect/Inspector.js +21 -9
  45. package/dist/src/logic/inspect/Inspector.js.map +1 -1
  46. package/dist/src/logic/neighbor-discovery/HandshakeRpcLocal.d.ts +7 -9
  47. package/dist/src/logic/neighbor-discovery/HandshakeRpcLocal.js +55 -32
  48. package/dist/src/logic/neighbor-discovery/HandshakeRpcLocal.js.map +1 -1
  49. package/dist/src/logic/neighbor-discovery/HandshakeRpcRemote.d.ts +8 -6
  50. package/dist/src/logic/neighbor-discovery/HandshakeRpcRemote.js +25 -16
  51. package/dist/src/logic/neighbor-discovery/HandshakeRpcRemote.js.map +1 -1
  52. package/dist/src/logic/neighbor-discovery/Handshaker.d.ts +9 -15
  53. package/dist/src/logic/neighbor-discovery/Handshaker.js +68 -44
  54. package/dist/src/logic/neighbor-discovery/Handshaker.js.map +1 -1
  55. package/dist/src/logic/neighbor-discovery/NeighborFinder.d.ts +8 -10
  56. package/dist/src/logic/neighbor-discovery/NeighborFinder.js +12 -2
  57. package/dist/src/logic/neighbor-discovery/NeighborFinder.js.map +1 -1
  58. package/dist/src/logic/neighbor-discovery/NeighborUpdateManager.d.ts +7 -10
  59. package/dist/src/logic/neighbor-discovery/NeighborUpdateManager.js +11 -9
  60. package/dist/src/logic/neighbor-discovery/NeighborUpdateManager.js.map +1 -1
  61. package/dist/src/logic/neighbor-discovery/NeighborUpdateRpcLocal.d.ts +8 -4
  62. package/dist/src/logic/neighbor-discovery/NeighborUpdateRpcLocal.js +33 -24
  63. package/dist/src/logic/neighbor-discovery/NeighborUpdateRpcLocal.js.map +1 -1
  64. package/dist/src/logic/neighbor-discovery/NeighborUpdateRpcRemote.d.ts +5 -4
  65. package/dist/src/logic/neighbor-discovery/NeighborUpdateRpcRemote.js +4 -5
  66. package/dist/src/logic/neighbor-discovery/NeighborUpdateRpcRemote.js.map +1 -1
  67. package/dist/src/logic/node-info/NodeInfoClient.d.ts +9 -0
  68. package/dist/src/logic/node-info/NodeInfoClient.js +21 -0
  69. package/dist/src/logic/node-info/NodeInfoClient.js.map +1 -0
  70. package/dist/src/logic/node-info/NodeInfoRpcLocal.d.ts +12 -0
  71. package/dist/src/logic/node-info/NodeInfoRpcLocal.js +22 -0
  72. package/dist/src/logic/node-info/NodeInfoRpcLocal.js.map +1 -0
  73. package/dist/src/logic/node-info/NodeInfoRpcRemote.d.ts +6 -0
  74. package/dist/src/logic/node-info/NodeInfoRpcRemote.js +11 -0
  75. package/dist/src/logic/node-info/NodeInfoRpcRemote.js.map +1 -0
  76. package/dist/src/logic/propagation/FifoMapWithTTL.js +7 -3
  77. package/dist/src/logic/propagation/FifoMapWithTTL.js.map +1 -1
  78. package/dist/src/logic/propagation/Propagation.d.ts +4 -4
  79. package/dist/src/logic/propagation/Propagation.js +4 -0
  80. package/dist/src/logic/propagation/Propagation.js.map +1 -1
  81. package/dist/src/logic/propagation/PropagationTaskStore.d.ts +2 -2
  82. package/dist/src/logic/propagation/PropagationTaskStore.js +1 -0
  83. package/dist/src/logic/propagation/PropagationTaskStore.js.map +1 -1
  84. package/dist/src/logic/protocol-integration/stream-message/GroupKeyRequestTranslator.js +1 -1
  85. package/dist/src/logic/protocol-integration/stream-message/GroupKeyRequestTranslator.js.map +1 -1
  86. package/dist/src/logic/protocol-integration/stream-message/GroupKeyResponseTranslator.js +1 -1
  87. package/dist/src/logic/protocol-integration/stream-message/GroupKeyResponseTranslator.js.map +1 -1
  88. package/dist/src/logic/protocol-integration/stream-message/StreamMessageTranslator.js +87 -53
  89. package/dist/src/logic/protocol-integration/stream-message/StreamMessageTranslator.js.map +1 -1
  90. package/dist/src/logic/protocol-integration/stream-message/oldStreamMessageBinaryUtils.d.ts +7 -0
  91. package/dist/src/logic/protocol-integration/stream-message/oldStreamMessageBinaryUtils.js +32 -0
  92. package/dist/src/logic/protocol-integration/stream-message/oldStreamMessageBinaryUtils.js.map +1 -0
  93. package/dist/src/logic/proxy/ProxyClient.d.ts +8 -6
  94. package/dist/src/logic/proxy/ProxyClient.js +40 -28
  95. package/dist/src/logic/proxy/ProxyClient.js.map +1 -1
  96. package/dist/src/logic/proxy/ProxyConnectionRpcLocal.d.ts +6 -7
  97. package/dist/src/logic/proxy/ProxyConnectionRpcLocal.js +8 -8
  98. package/dist/src/logic/proxy/ProxyConnectionRpcLocal.js.map +1 -1
  99. package/dist/src/logic/proxy/ProxyConnectionRpcRemote.d.ts +3 -3
  100. package/dist/src/logic/proxy/ProxyConnectionRpcRemote.js +1 -1
  101. package/dist/src/logic/proxy/ProxyConnectionRpcRemote.js.map +1 -1
  102. package/dist/src/logic/temporary-connection/TemporaryConnectionRpcLocal.d.ts +9 -4
  103. package/dist/src/logic/temporary-connection/TemporaryConnectionRpcLocal.js +21 -6
  104. package/dist/src/logic/temporary-connection/TemporaryConnectionRpcLocal.js.map +1 -1
  105. package/dist/src/logic/temporary-connection/TemporaryConnectionRpcRemote.d.ts +4 -3
  106. package/dist/src/logic/temporary-connection/TemporaryConnectionRpcRemote.js +13 -3
  107. package/dist/src/logic/temporary-connection/TemporaryConnectionRpcRemote.js.map +1 -1
  108. package/dist/src/logic/utils.js.map +1 -1
  109. package/dist/src/proto/google/protobuf/any.js +8 -8
  110. package/dist/src/proto/google/protobuf/any.js.map +1 -1
  111. package/dist/src/proto/google/protobuf/empty.js +2 -4
  112. package/dist/src/proto/google/protobuf/empty.js.map +1 -1
  113. package/dist/src/proto/google/protobuf/timestamp.js +10 -10
  114. package/dist/src/proto/google/protobuf/timestamp.js.map +1 -1
  115. package/dist/src/proto/packages/dht/protos/DhtRpc.client.d.ts +36 -49
  116. package/dist/src/proto/packages/dht/protos/DhtRpc.client.js +54 -52
  117. package/dist/src/proto/packages/dht/protos/DhtRpc.client.js.map +1 -1
  118. package/dist/src/proto/packages/dht/protos/DhtRpc.d.ts +184 -234
  119. package/dist/src/proto/packages/dht/protos/DhtRpc.js +118 -168
  120. package/dist/src/proto/packages/dht/protos/DhtRpc.js.map +1 -1
  121. package/dist/src/proto/packages/dht/protos/DhtRpc.server.d.ts +20 -29
  122. package/dist/src/proto/packages/proto-rpc/protos/ProtoRpc.js +1 -1
  123. package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.client.d.ts +42 -5
  124. package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.client.js +52 -19
  125. package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.client.js.map +1 -1
  126. package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.d.ts +193 -28
  127. package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.js +129 -20
  128. package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.js.map +1 -1
  129. package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.server.d.ts +20 -3
  130. package/dist/test/benchmark/first-message.js +14 -15
  131. package/dist/test/benchmark/first-message.js.map +1 -1
  132. package/dist/test/utils/utils.d.ts +2 -4
  133. package/dist/test/utils/utils.js +20 -19
  134. package/dist/test/utils/utils.js.map +1 -1
  135. package/jest.config.js +3 -38
  136. package/package.json +12 -12
  137. package/protos/NetworkRpc.proto +57 -12
  138. package/src/NetworkNode.ts +13 -6
  139. package/src/NetworkStack.ts +94 -16
  140. package/src/exports.ts +11 -3
  141. package/src/logic/DeliveryRpcLocal.ts +7 -8
  142. package/src/logic/DeliveryRpcRemote.ts +7 -5
  143. package/src/logic/DuplicateMessageDetector.ts +7 -7
  144. package/src/logic/EntryPointDiscovery.ts +26 -19
  145. package/src/logic/Layer0Node.ts +6 -4
  146. package/src/logic/Layer1Node.ts +21 -6
  147. package/src/logic/NodeList.ts +26 -27
  148. package/src/logic/RandomGraphNode.ts +158 -78
  149. package/src/logic/StreamrNode.ts +58 -41
  150. package/src/logic/createRandomGraphNode.ts +37 -25
  151. package/src/logic/formStreamPartDeliveryServiceId.ts +2 -1
  152. package/src/logic/inspect/InspectSession.ts +8 -4
  153. package/src/logic/inspect/Inspector.ts +34 -24
  154. package/src/logic/neighbor-discovery/HandshakeRpcLocal.ts +72 -38
  155. package/src/logic/neighbor-discovery/HandshakeRpcRemote.ts +32 -20
  156. package/src/logic/neighbor-discovery/Handshaker.ts +90 -75
  157. package/src/logic/neighbor-discovery/NeighborFinder.ts +18 -13
  158. package/src/logic/neighbor-discovery/NeighborUpdateManager.ts +19 -20
  159. package/src/logic/neighbor-discovery/NeighborUpdateRpcLocal.ts +43 -33
  160. package/src/logic/neighbor-discovery/NeighborUpdateRpcRemote.ts +6 -6
  161. package/src/logic/node-info/NodeInfoClient.ts +23 -0
  162. package/src/logic/node-info/NodeInfoRpcLocal.ts +28 -0
  163. package/src/logic/node-info/NodeInfoRpcRemote.ts +11 -0
  164. package/src/logic/propagation/Propagation.ts +7 -6
  165. package/src/logic/propagation/PropagationTaskStore.ts +2 -2
  166. package/src/logic/protocol-integration/stream-message/GroupKeyRequestTranslator.ts +1 -1
  167. package/src/logic/protocol-integration/stream-message/GroupKeyResponseTranslator.ts +1 -2
  168. package/src/logic/protocol-integration/stream-message/StreamMessageTranslator.ts +95 -69
  169. package/src/logic/protocol-integration/stream-message/oldStreamMessageBinaryUtils.ts +37 -0
  170. package/src/logic/proxy/ProxyClient.ts +60 -40
  171. package/src/logic/proxy/ProxyConnectionRpcLocal.ts +15 -19
  172. package/src/logic/proxy/ProxyConnectionRpcRemote.ts +3 -3
  173. package/src/logic/temporary-connection/TemporaryConnectionRpcLocal.ts +30 -10
  174. package/src/logic/temporary-connection/TemporaryConnectionRpcRemote.ts +14 -4
  175. package/src/proto/google/protobuf/any.ts +4 -4
  176. package/src/proto/google/protobuf/empty.ts +2 -4
  177. package/src/proto/google/protobuf/timestamp.ts +4 -4
  178. package/src/proto/packages/dht/protos/DhtRpc.client.ts +50 -66
  179. package/src/proto/packages/dht/protos/DhtRpc.server.ts +21 -30
  180. package/src/proto/packages/dht/protos/DhtRpc.ts +242 -316
  181. package/src/proto/packages/proto-rpc/protos/ProtoRpc.ts +1 -1
  182. package/src/proto/packages/trackerless-network/protos/NetworkRpc.client.ts +49 -7
  183. package/src/proto/packages/trackerless-network/protos/NetworkRpc.server.ts +21 -4
  184. package/src/proto/packages/trackerless-network/protos/NetworkRpc.ts +251 -44
  185. package/test/benchmark/StreamPartIdDataKeyDistribution.test.ts +60 -0
  186. package/test/benchmark/first-message.ts +38 -17
  187. package/test/end-to-end/inspect.test.ts +16 -4
  188. package/test/end-to-end/proxy-and-full-node.test.ts +26 -13
  189. package/test/end-to-end/proxy-connections.test.ts +23 -11
  190. package/test/end-to-end/proxy-key-exchange.test.ts +25 -15
  191. package/test/end-to-end/random-graph-with-real-connections.test.ts +35 -32
  192. package/test/end-to-end/webrtc-full-node-network.test.ts +11 -12
  193. package/test/end-to-end/websocket-full-node-network.test.ts +12 -12
  194. package/test/integration/DeliveryRpcRemote.test.ts +6 -9
  195. package/test/integration/HandshakeRpcRemote.test.ts +6 -8
  196. package/test/integration/Handshakes.test.ts +29 -27
  197. package/test/integration/Inspect.test.ts +0 -2
  198. package/test/integration/NeighborUpdateRpcRemote.test.ts +6 -7
  199. package/test/integration/NetworkNode.test.ts +27 -12
  200. package/test/integration/NetworkRpc.test.ts +3 -5
  201. package/test/integration/NetworkStack.test.ts +2 -2
  202. package/test/integration/NodeInfoRpc.test.ts +104 -0
  203. package/test/integration/Propagation.test.ts +3 -3
  204. package/test/integration/RandomGraphNode-Layer1Node-Latencies.test.ts +24 -25
  205. package/test/integration/RandomGraphNode-Layer1Node.test.ts +26 -24
  206. package/test/integration/StreamrNode.test.ts +4 -16
  207. package/test/integration/joining-streams-on-offline-peers.test.ts +7 -31
  208. package/test/integration/stream-without-default-entrypoints.test.ts +22 -23
  209. package/test/integration/streamEntryPointReplacing.test.ts +94 -0
  210. package/test/unit/DeliveryRpcLocal.test.ts +2 -1
  211. package/test/unit/EntrypointDiscovery.test.ts +11 -8
  212. package/test/unit/GroupKeyResponseTranslator.test.ts +1 -1
  213. package/test/unit/HandshakeRpcLocal.test.ts +80 -28
  214. package/test/unit/Handshaker.test.ts +14 -9
  215. package/test/unit/InspectSession.test.ts +5 -6
  216. package/test/unit/Inspector.test.ts +3 -4
  217. package/test/unit/NeighborFinder.test.ts +12 -9
  218. package/test/unit/NeighborUpdateRpcLocal.test.ts +139 -0
  219. package/test/unit/NodeList.test.ts +77 -80
  220. package/test/unit/Propagation.test.ts +21 -16
  221. package/test/unit/ProxyConnectionRpcRemote.test.ts +18 -12
  222. package/test/unit/RandomGraphNode.test.ts +23 -20
  223. package/test/unit/StreamMessageTranslator.test.ts +10 -8
  224. package/test/unit/StreamPartIDDataKey.test.ts +12 -0
  225. package/test/unit/StreamrNode.test.ts +2 -0
  226. package/test/unit/TemporaryConnectionRpcLocal.test.ts +38 -0
  227. package/test/unit/oldStreamMessageBinaryUtils.test.ts +39 -0
  228. package/test/utils/mock/MockHandshaker.ts +6 -5
  229. package/test/utils/mock/MockLayer0Node.ts +7 -2
  230. package/test/utils/mock/MockLayer1Node.ts +5 -2
  231. package/test/utils/mock/MockNeighborFinder.ts +3 -2
  232. package/test/utils/mock/MockNeighborUpdateManager.ts +3 -2
  233. package/test/utils/mock/Transport.ts +1 -1
  234. package/test/utils/utils.ts +40 -25
  235. package/tsconfig.jest.json +5 -4
  236. package/tsconfig.node.json +2 -2
  237. package/dist/src/identifiers.d.ts +0 -4
  238. package/dist/src/identifiers.js +0 -9
  239. package/dist/src/identifiers.js.map +0 -1
  240. package/src/identifiers.ts +0 -8
  241. package/test/unit/GroupKeyRequestTranslator.test.ts +0 -36
@@ -1,20 +1,21 @@
1
- import { DataEntry, PeerDescriptor } from '@streamr/dht';
1
+ import { DataEntry, DhtAddress, PeerDescriptor } from '@streamr/dht';
2
2
  import { StreamPartID } from '@streamr/protocol';
3
3
  import { Any } from '../proto/google/protobuf/any';
4
4
  import { Layer1Node } from './Layer1Node';
5
- export declare const streamPartIdToDataKey: (streamPartId: StreamPartID) => Uint8Array;
5
+ export declare const streamPartIdToDataKey: (streamPartId: StreamPartID) => DhtAddress;
6
6
  interface FindEntryPointsResult {
7
7
  entryPointsFromDht: boolean;
8
8
  discoveredEntryPoints: PeerDescriptor[];
9
9
  }
10
+ export declare const ENTRYPOINT_STORE_LIMIT = 8;
10
11
  export declare const NETWORK_SPLIT_AVOIDANCE_LIMIT = 4;
11
12
  interface EntryPointDiscoveryConfig {
12
13
  streamPartId: StreamPartID;
13
14
  localPeerDescriptor: PeerDescriptor;
14
15
  layer1Node: Layer1Node;
15
- getEntryPointData: (key: Uint8Array) => Promise<DataEntry[]>;
16
- storeEntryPointData: (key: Uint8Array, data: Any) => Promise<PeerDescriptor[]>;
17
- deleteEntryPointData: (key: Uint8Array) => Promise<void>;
16
+ fetchEntryPointData: (key: DhtAddress) => Promise<DataEntry[]>;
17
+ storeEntryPointData: (key: DhtAddress, data: Any) => Promise<PeerDescriptor[]>;
18
+ deleteEntryPointData: (key: DhtAddress) => Promise<void>;
18
19
  storeInterval?: number;
19
20
  }
20
21
  export declare class EntryPointDiscovery {
@@ -22,6 +23,7 @@ export declare class EntryPointDiscovery {
22
23
  private readonly config;
23
24
  private readonly storeInterval;
24
25
  private readonly networkSplitAvoidedNodes;
26
+ private isLocalNodeStoredAsEntryPoint;
25
27
  constructor(config: EntryPointDiscoveryConfig);
26
28
  discoverEntryPointsFromDht(knownEntryPointCount: number): Promise<FindEntryPointsResult>;
27
29
  private discoverEntryPoints;
@@ -30,6 +32,7 @@ export declare class EntryPointDiscovery {
30
32
  private storeSelfAsEntryPoint;
31
33
  private keepSelfAsEntryPoint;
32
34
  private avoidNetworkSplit;
35
+ isLocalNodeEntryPoint(): boolean;
33
36
  destroy(): Promise<void>;
34
37
  }
35
38
  export {};
@@ -1,13 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.EntryPointDiscovery = exports.NETWORK_SPLIT_AVOIDANCE_LIMIT = exports.streamPartIdToDataKey = void 0;
3
+ exports.EntryPointDiscovery = exports.NETWORK_SPLIT_AVOIDANCE_LIMIT = exports.ENTRYPOINT_STORE_LIMIT = exports.streamPartIdToDataKey = void 0;
4
4
  const dht_1 = require("@streamr/dht");
5
5
  const utils_1 = require("@streamr/utils");
6
6
  const crypto_1 = require("crypto");
7
- const identifiers_1 = require("../identifiers");
8
7
  const any_1 = require("../proto/google/protobuf/any");
9
8
  const streamPartIdToDataKey = (streamPartId) => {
10
- return new Uint8Array((0, crypto_1.createHash)('md5').update(streamPartId).digest());
9
+ return (0, dht_1.getDhtAddressFromRaw)(new Uint8Array(((0, crypto_1.createHash)('sha1').update(streamPartId).digest())));
11
10
  };
12
11
  exports.streamPartIdToDataKey = streamPartIdToDataKey;
13
12
  const parseEntryPointData = (dataEntries) => {
@@ -35,11 +34,15 @@ const exponentialRunOff = async (task, description, abortSignal, baseDelay = 500
35
34
  }
36
35
  };
37
36
  const logger = new utils_1.Logger(module);
38
- const ENTRYPOINT_STORE_LIMIT = 20;
37
+ exports.ENTRYPOINT_STORE_LIMIT = 8;
39
38
  exports.NETWORK_SPLIT_AVOIDANCE_LIMIT = 4;
40
39
  class EntryPointDiscovery {
40
+ abortController;
41
+ config;
42
+ storeInterval;
43
+ networkSplitAvoidedNodes = new Set();
44
+ isLocalNodeStoredAsEntryPoint = false;
41
45
  constructor(config) {
42
- this.networkSplitAvoidedNodes = new Set();
43
46
  this.config = config;
44
47
  this.abortController = new AbortController();
45
48
  this.storeInterval = this.config.storeInterval ?? 60000;
@@ -63,7 +66,7 @@ class EntryPointDiscovery {
63
66
  async discoverEntryPoints() {
64
67
  const dataKey = (0, exports.streamPartIdToDataKey)(this.config.streamPartId);
65
68
  const discoveredEntryPoints = await this.queryEntrypoints(dataKey);
66
- const filtered = discoveredEntryPoints.filter((node) => !this.networkSplitAvoidedNodes.has((0, identifiers_1.getNodeIdFromPeerDescriptor)(node)));
69
+ const filtered = discoveredEntryPoints.filter((node) => !this.networkSplitAvoidedNodes.has((0, dht_1.getNodeIdFromPeerDescriptor)(node)));
67
70
  // If all discovered entry points have previously been detected as offline, try again
68
71
  if (filtered.length > 0) {
69
72
  return filtered;
@@ -73,9 +76,9 @@ class EntryPointDiscovery {
73
76
  }
74
77
  }
75
78
  async queryEntrypoints(key) {
76
- logger.trace(`Finding data from dht node ${(0, identifiers_1.getNodeIdFromPeerDescriptor)(this.config.localPeerDescriptor)}`);
79
+ logger.trace(`Finding data from dht node ${(0, dht_1.getNodeIdFromPeerDescriptor)(this.config.localPeerDescriptor)}`);
77
80
  try {
78
- const result = await this.config.getEntryPointData(key);
81
+ const result = await this.config.fetchEntryPointData(key);
79
82
  return parseEntryPointData(result);
80
83
  }
81
84
  catch (err) {
@@ -86,12 +89,14 @@ class EntryPointDiscovery {
86
89
  if (this.abortController.signal.aborted) {
87
90
  return;
88
91
  }
89
- const possibleNetworkSplitDetected = this.config.layer1Node.getBucketSize() < exports.NETWORK_SPLIT_AVOIDANCE_LIMIT;
90
- if ((currentEntrypointCount < ENTRYPOINT_STORE_LIMIT) || possibleNetworkSplitDetected) {
92
+ const possibleNetworkSplitDetected = this.config.layer1Node.getNeighborCount() < exports.NETWORK_SPLIT_AVOIDANCE_LIMIT;
93
+ if ((currentEntrypointCount < exports.ENTRYPOINT_STORE_LIMIT) || possibleNetworkSplitDetected) {
94
+ this.isLocalNodeStoredAsEntryPoint = true;
91
95
  await this.storeSelfAsEntryPoint();
92
96
  await this.keepSelfAsEntryPoint();
93
97
  }
94
98
  if (possibleNetworkSplitDetected) {
99
+ // TODO should we catch possible promise rejection?
95
100
  setImmediate(() => this.avoidNetworkSplit());
96
101
  }
97
102
  }
@@ -110,7 +115,7 @@ class EntryPointDiscovery {
110
115
  logger.trace(`Attempting to keep self as entrypoint for ${this.config.streamPartId}`);
111
116
  try {
112
117
  const discovered = await this.discoverEntryPoints();
113
- if (discovered.length < ENTRYPOINT_STORE_LIMIT
118
+ if (discovered.length < exports.ENTRYPOINT_STORE_LIMIT
114
119
  || discovered.some((peerDescriptor) => (0, dht_1.areEqualPeerDescriptors)(peerDescriptor, this.config.localPeerDescriptor))) {
115
120
  await this.storeSelfAsEntryPoint();
116
121
  }
@@ -124,11 +129,12 @@ class EntryPointDiscovery {
124
129
  await exponentialRunOff(async () => {
125
130
  const rediscoveredEntrypoints = await this.discoverEntryPoints();
126
131
  await this.config.layer1Node.joinDht(rediscoveredEntrypoints, false, false);
127
- if (this.config.layer1Node.getBucketSize() < exports.NETWORK_SPLIT_AVOIDANCE_LIMIT) {
128
- // Filter out nodes that are not in the k-bucket, assumed to be offline
132
+ if (this.config.layer1Node.getNeighborCount() < exports.NETWORK_SPLIT_AVOIDANCE_LIMIT) {
133
+ // Filter out nodes that are not neighbors as those nodes are assumed to be offline
129
134
  const nodesToAvoid = rediscoveredEntrypoints
130
- .filter((peer) => !this.config.layer1Node.getKBucketPeers().includes(peer))
131
- .map((peer) => (0, identifiers_1.getNodeIdFromPeerDescriptor)(peer));
135
+ .filter((peer) => !this.config.layer1Node.getNeighbors()
136
+ .some((neighbor) => (0, dht_1.areEqualPeerDescriptors)(neighbor, peer)))
137
+ .map((peer) => (0, dht_1.getNodeIdFromPeerDescriptor)(peer));
132
138
  nodesToAvoid.forEach((node) => this.networkSplitAvoidedNodes.add(node));
133
139
  throw new Error(`Network split is still possible`);
134
140
  }
@@ -136,6 +142,9 @@ class EntryPointDiscovery {
136
142
  this.networkSplitAvoidedNodes.clear();
137
143
  logger.trace(`Network split avoided`);
138
144
  }
145
+ isLocalNodeEntryPoint() {
146
+ return this.isLocalNodeStoredAsEntryPoint;
147
+ }
139
148
  async destroy() {
140
149
  this.abortController.abort();
141
150
  await this.config.deleteEntryPointData((0, exports.streamPartIdToDataKey)(this.config.streamPartId));
@@ -1 +1 @@
1
- {"version":3,"file":"EntryPointDiscovery.js","sourceRoot":"","sources":["../../../src/logic/EntryPointDiscovery.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"EntryPointDiscovery.js","sourceRoot":"","sources":["../../../src/logic/EntryPointDiscovery.ts"],"names":[],"mappings":"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"}
@@ -1,14 +1,16 @@
1
- import { DataEntry, ITransport, PeerDescriptor } from '@streamr/dht';
1
+ import { DataEntry, DhtAddress, ITransport, PeerDescriptor } from '@streamr/dht';
2
2
  import { Any } from '../proto/google/protobuf/any';
3
3
  export interface Layer0Node extends ITransport {
4
4
  joinDht(entryPointDescriptors: PeerDescriptor[]): Promise<void>;
5
5
  hasJoined(): boolean;
6
6
  getLocalPeerDescriptor(): PeerDescriptor;
7
- getDataFromDht(key: Uint8Array): Promise<DataEntry[]>;
8
- storeDataToDht(key: Uint8Array, data: Any): Promise<PeerDescriptor[]>;
9
- deleteDataFromDht(key: Uint8Array): Promise<void>;
7
+ fetchDataFromDht(key: DhtAddress): Promise<DataEntry[]>;
8
+ storeDataToDht(key: DhtAddress, data: Any): Promise<PeerDescriptor[]>;
9
+ deleteDataFromDht(key: DhtAddress, waitForCompletion: boolean): Promise<void>;
10
10
  waitForNetworkConnectivity(): Promise<void>;
11
11
  getTransport(): ITransport;
12
+ getNeighbors(): PeerDescriptor[];
13
+ getConnections(): PeerDescriptor[];
12
14
  start(): Promise<void>;
13
15
  stop(): Promise<void>;
14
16
  }
@@ -1,19 +1,25 @@
1
- import { PeerDescriptor } from '@streamr/dht';
1
+ import { DhtAddress, PeerDescriptor, RingContacts } from '@streamr/dht';
2
2
  export interface Layer1NodeEvents {
3
- newContact: (peerDescriptor: PeerDescriptor, closestPeers: PeerDescriptor[]) => void;
3
+ contactAdded: (peerDescriptor: PeerDescriptor, closestPeers: PeerDescriptor[]) => void;
4
4
  contactRemoved: (peerDescriptor: PeerDescriptor, closestPeers: PeerDescriptor[]) => void;
5
- newRandomContact: (peerDescriptor: PeerDescriptor, randomPeers: PeerDescriptor[]) => void;
5
+ randomContactAdded: (peerDescriptor: PeerDescriptor, randomPeers: PeerDescriptor[]) => void;
6
6
  randomContactRemoved: (peerDescriptor: PeerDescriptor, randomPeers: PeerDescriptor[]) => void;
7
+ ringContactAdded: (peerDescriptor: PeerDescriptor, closestPeers: RingContacts) => void;
8
+ ringContactRemoved: (peerDescriptor: PeerDescriptor, closestPeers: RingContacts) => void;
7
9
  }
8
10
  export interface Layer1Node {
9
11
  on<T extends keyof Layer1NodeEvents>(eventName: T, listener: (peerDescriptor: PeerDescriptor, peers: PeerDescriptor[]) => void): void;
10
12
  once<T extends keyof Layer1NodeEvents>(eventName: T, listener: (peerDescriptor: PeerDescriptor, peers: PeerDescriptor[]) => void): void;
11
13
  off<T extends keyof Layer1NodeEvents>(eventName: T, listener: (peerDescriptor: PeerDescriptor, peers: PeerDescriptor[]) => void): void;
12
- removeContact: (peerDescriptor: PeerDescriptor) => void;
14
+ on<T extends keyof Layer1NodeEvents>(eventName: T, listener: (peerDescriptor: PeerDescriptor, peers: RingContacts) => void): void;
15
+ once<T extends keyof Layer1NodeEvents>(eventName: T, listener: (peerDescriptor: PeerDescriptor, peers: RingContacts) => void): void;
16
+ off<T extends keyof Layer1NodeEvents>(eventName: T, listener: (peerDescriptor: PeerDescriptor, peers: RingContacts) => void): void;
17
+ removeContact: (nodeId: DhtAddress) => void;
13
18
  getClosestContacts: (maxCount?: number) => PeerDescriptor[];
14
- getKBucketPeers: () => PeerDescriptor[];
15
- getBucketSize: () => number;
19
+ getNeighbors: () => PeerDescriptor[];
20
+ getNeighborCount(): number;
16
21
  joinDht: (entryPoints: PeerDescriptor[], doRandomJoin?: boolean, retry?: boolean) => Promise<void>;
22
+ joinRing: () => Promise<void>;
17
23
  start: () => Promise<void>;
18
24
  stop: () => Promise<void>;
19
25
  }
@@ -1,28 +1,26 @@
1
- import { PeerDescriptor } from '@streamr/dht';
1
+ import { DhtAddress } from '@streamr/dht';
2
2
  import { DeliveryRpcRemote } from './DeliveryRpcRemote';
3
3
  import { EventEmitter } from 'eventemitter3';
4
- import { NodeID } from '../identifiers';
5
4
  export interface Events {
6
- nodeAdded: (id: NodeID, remote: DeliveryRpcRemote) => any;
5
+ nodeAdded: (id: DhtAddress, remote: DeliveryRpcRemote) => void;
6
+ nodeRemoved: (id: DhtAddress, remote: DeliveryRpcRemote) => void;
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
- constructor(ownId: NodeID, limit: number);
12
+ constructor(ownId: DhtAddress, limit: number);
13
13
  add(remote: DeliveryRpcRemote): void;
14
- remove(peerDescriptor: PeerDescriptor): void;
15
- removeById(nodeId: NodeID): void;
16
- hasNode(peerDescriptor: PeerDescriptor): boolean;
17
- hasNodeById(nodeId: NodeID): boolean;
14
+ remove(nodeId: DhtAddress): void;
15
+ has(nodeId: DhtAddress): boolean;
18
16
  replaceAll(neighbors: DeliveryRpcRemote[]): void;
19
- getIds(): NodeID[];
20
- get(id: NodeID): DeliveryRpcRemote | undefined;
21
- size(exclude?: NodeID[]): number;
22
- getRandom(exclude: NodeID[]): DeliveryRpcRemote | undefined;
23
- getClosest(exclude: NodeID[]): DeliveryRpcRemote | undefined;
24
- getClosestAndFurthest(exclude: NodeID[]): DeliveryRpcRemote[];
25
- getFurthest(exclude: NodeID[]): DeliveryRpcRemote | undefined;
17
+ getIds(): DhtAddress[];
18
+ get(id: DhtAddress): DeliveryRpcRemote | undefined;
19
+ size(exclude?: DhtAddress[]): number;
20
+ getRandom(exclude: DhtAddress[]): DeliveryRpcRemote | undefined;
21
+ getFirst(exclude: DhtAddress[]): DeliveryRpcRemote | undefined;
22
+ getFirstAndLast(exclude: DhtAddress[]): DeliveryRpcRemote[];
23
+ getLast(exclude: DhtAddress[]): DeliveryRpcRemote | undefined;
26
24
  getAll(): DeliveryRpcRemote[];
27
25
  stop(): void;
28
26
  }
@@ -1,15 +1,19 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.NodeList = void 0;
4
+ const dht_1 = require("@streamr/dht");
4
5
  const lodash_1 = require("lodash");
5
6
  const eventemitter3_1 = require("eventemitter3");
6
- const identifiers_1 = require("../identifiers");
7
7
  const getValuesOfIncludedKeys = (nodes, exclude) => {
8
8
  return Array.from(nodes.entries())
9
9
  .filter(([id, _node]) => !exclude.includes(id))
10
10
  .map(([_id, node]) => node);
11
11
  };
12
+ // The items in the list are in the insertion order
12
13
  class NodeList extends eventemitter3_1.EventEmitter {
14
+ nodes;
15
+ limit;
16
+ ownId;
13
17
  constructor(ownId, limit) {
14
18
  super();
15
19
  this.nodes = new Map();
@@ -17,7 +21,7 @@ class NodeList extends eventemitter3_1.EventEmitter {
17
21
  this.ownId = ownId;
18
22
  }
19
23
  add(remote) {
20
- const nodeId = (0, identifiers_1.getNodeIdFromPeerDescriptor)(remote.getPeerDescriptor());
24
+ const nodeId = (0, dht_1.getNodeIdFromPeerDescriptor)(remote.getPeerDescriptor());
21
25
  if ((this.ownId !== nodeId) && (this.nodes.size < this.limit)) {
22
26
  const isExistingNode = this.nodes.has(nodeId);
23
27
  this.nodes.set(nodeId, remote);
@@ -26,18 +30,17 @@ class NodeList extends eventemitter3_1.EventEmitter {
26
30
  }
27
31
  }
28
32
  }
29
- remove(peerDescriptor) {
30
- this.nodes.delete((0, identifiers_1.getNodeIdFromPeerDescriptor)(peerDescriptor));
31
- }
32
- removeById(nodeId) {
33
- this.nodes.delete(nodeId);
34
- }
35
- hasNode(peerDescriptor) {
36
- return this.nodes.has((0, identifiers_1.getNodeIdFromPeerDescriptor)(peerDescriptor));
33
+ remove(nodeId) {
34
+ if (this.nodes.has(nodeId)) {
35
+ const remote = this.nodes.get(nodeId);
36
+ this.nodes.delete(nodeId);
37
+ this.emit('nodeRemoved', nodeId, remote);
38
+ }
37
39
  }
38
- hasNodeById(nodeId) {
40
+ has(nodeId) {
39
41
  return this.nodes.has(nodeId);
40
42
  }
43
+ // Replace nodes does not emit nodeRemoved events, use with caution
41
44
  replaceAll(neighbors) {
42
45
  this.nodes.clear();
43
46
  const limited = neighbors.splice(0, this.limit);
@@ -57,18 +60,18 @@ class NodeList extends eventemitter3_1.EventEmitter {
57
60
  getRandom(exclude) {
58
61
  return (0, lodash_1.sample)(getValuesOfIncludedKeys(this.nodes, exclude));
59
62
  }
60
- getClosest(exclude) {
63
+ getFirst(exclude) {
61
64
  const included = getValuesOfIncludedKeys(this.nodes, exclude);
62
65
  return included[0];
63
66
  }
64
- getClosestAndFurthest(exclude) {
67
+ getFirstAndLast(exclude) {
65
68
  const included = getValuesOfIncludedKeys(this.nodes, exclude);
66
69
  if (included.length === 0) {
67
70
  return [];
68
71
  }
69
- return included.length > 1 ? [this.getClosest(exclude), this.getFurthest(exclude)] : [this.getClosest(exclude)];
72
+ return included.length > 1 ? [this.getFirst(exclude), this.getLast(exclude)] : [this.getFirst(exclude)];
70
73
  }
71
- getFurthest(exclude) {
74
+ getLast(exclude) {
72
75
  const included = getValuesOfIncludedKeys(this.nodes, exclude);
73
76
  return included[included.length - 1];
74
77
  }
@@ -76,7 +79,7 @@ class NodeList extends eventemitter3_1.EventEmitter {
76
79
  return Array.from(this.nodes.values());
77
80
  }
78
81
  stop() {
79
- this.nodes.clear();
82
+ this.nodes.forEach((node) => this.remove((0, dht_1.getNodeIdFromPeerDescriptor)(node.getPeerDescriptor())));
80
83
  this.removeAllListeners();
81
84
  }
82
85
  }
@@ -1 +1 @@
1
- {"version":3,"file":"NodeList.js","sourceRoot":"","sources":["../../../src/logic/NodeList.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"NodeList.js","sourceRoot":"","sources":["../../../src/logic/NodeList.ts"],"names":[],"mappings":"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"}
@@ -1,20 +1,20 @@
1
1
  import { EventEmitter } from 'eventemitter3';
2
- import { PeerDescriptor, ListeningRpcCommunicator, ITransport, ConnectionLocker } from '@streamr/dht';
2
+ import { PeerDescriptor, ListeningRpcCommunicator, ITransport, ConnectionLocker, DhtAddress } from '@streamr/dht';
3
3
  import { StreamMessage } from '../proto/packages/trackerless-network/protos/NetworkRpc';
4
4
  import { NodeList } from './NodeList';
5
- import { IHandshaker } from './neighbor-discovery/Handshaker';
5
+ import { Handshaker } from './neighbor-discovery/Handshaker';
6
6
  import { Propagation } from './propagation/Propagation';
7
- import { INeighborFinder } from './neighbor-discovery/NeighborFinder';
8
- import { INeighborUpdateManager } from './neighbor-discovery/NeighborUpdateManager';
7
+ import { NeighborFinder } from './neighbor-discovery/NeighborFinder';
8
+ import { NeighborUpdateManager } from './neighbor-discovery/NeighborUpdateManager';
9
9
  import { ProxyConnectionRpcLocal } from './proxy/ProxyConnectionRpcLocal';
10
- import { IInspector } from './inspect/Inspector';
10
+ import { Inspector } from './inspect/Inspector';
11
11
  import { TemporaryConnectionRpcLocal } from './temporary-connection/TemporaryConnectionRpcLocal';
12
- import { NodeID } from '../identifiers';
13
12
  import { Layer1Node } from './Layer1Node';
14
13
  import { StreamPartID } from '@streamr/protocol';
15
14
  export interface Events {
16
15
  message: (message: StreamMessage) => void;
17
- targetNeighborConnected: (nodeId: NodeID) => void;
16
+ neighborConnected: (nodeId: DhtAddress) => void;
17
+ entryPointLeaveDetected: () => void;
18
18
  }
19
19
  export interface StrictRandomGraphNodeConfig {
20
20
  streamPartId: StreamPartID;
@@ -25,15 +25,18 @@ export interface StrictRandomGraphNodeConfig {
25
25
  nodeViewSize: number;
26
26
  nearbyNodeView: NodeList;
27
27
  randomNodeView: NodeList;
28
- targetNeighbors: NodeList;
29
- handshaker: IHandshaker;
30
- neighborFinder: INeighborFinder;
31
- neighborUpdateManager: INeighborUpdateManager;
28
+ leftNodeView: NodeList;
29
+ rightNodeView: NodeList;
30
+ neighbors: NodeList;
31
+ handshaker: Handshaker;
32
+ neighborFinder: NeighborFinder;
33
+ neighborUpdateManager: NeighborUpdateManager;
32
34
  propagation: Propagation;
33
35
  rpcCommunicator: ListeningRpcCommunicator;
34
- numOfTargetNeighbors: number;
35
- inspector: IInspector;
36
+ neighborTargetCount: number;
37
+ inspector: Inspector;
36
38
  temporaryConnectionRpcLocal: TemporaryConnectionRpcLocal;
39
+ isLocalNodeEntryPoint: () => boolean;
37
40
  proxyConnectionRpcLocal?: ProxyConnectionRpcLocal;
38
41
  rpcRequestTimeout?: number;
39
42
  }
@@ -46,21 +49,22 @@ export declare class RandomGraphNode extends EventEmitter<Events> {
46
49
  constructor(config: StrictRandomGraphNodeConfig);
47
50
  start(): Promise<void>;
48
51
  private registerDefaultServerMethods;
49
- private newContact;
50
- private removedContact;
52
+ private onRingContactEvent;
53
+ private onContactAdded;
54
+ private onContactRemoved;
51
55
  private updateNearbyNodeView;
52
- private newRandomContact;
53
- private removedRandomContact;
56
+ private onRandomContactAdded;
57
+ private onRandomContactRemoved;
54
58
  private onNodeDisconnected;
55
59
  private getNeighborCandidatesFromLayer1;
56
- hasProxyConnection(nodeId: NodeID): boolean;
60
+ hasProxyConnection(nodeId: DhtAddress): boolean;
57
61
  stop(): void;
58
- broadcast(msg: StreamMessage, previousNode?: NodeID): void;
62
+ broadcast(msg: StreamMessage, previousNode?: DhtAddress): void;
59
63
  inspect(peerDescriptor: PeerDescriptor): Promise<boolean>;
60
64
  private getPropagationTargets;
61
- getOwnNodeId(): NodeID;
62
- getNumberOfOutgoingHandshakes(): number;
63
- getTargetNeighborIds(): NodeID[];
65
+ getOwnNodeId(): DhtAddress;
66
+ getOutgoingHandshakeCount(): number;
67
+ getNeighbors(): PeerDescriptor[];
64
68
  getNearbyNodeView(): NodeList;
65
69
  private isStopped;
66
70
  }