@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
@@ -11,23 +11,26 @@ const Propagation_1 = require("./propagation/Propagation");
11
11
  const ProxyConnectionRpcLocal_1 = require("./proxy/ProxyConnectionRpcLocal");
12
12
  const Inspector_1 = require("./inspect/Inspector");
13
13
  const TemporaryConnectionRpcLocal_1 = require("./temporary-connection/TemporaryConnectionRpcLocal");
14
- const identifiers_1 = require("../identifiers");
15
14
  const formStreamPartDeliveryServiceId_1 = require("./formStreamPartDeliveryServiceId");
16
15
  const createConfigWithDefaults = (config) => {
17
- const ownNodeId = (0, identifiers_1.getNodeIdFromPeerDescriptor)(config.localPeerDescriptor);
16
+ const ownNodeId = (0, dht_1.getNodeIdFromPeerDescriptor)(config.localPeerDescriptor);
18
17
  const rpcCommunicator = config.rpcCommunicator ?? new dht_1.ListeningRpcCommunicator((0, formStreamPartDeliveryServiceId_1.formStreamPartDeliveryServiceId)(config.streamPartId), config.transport);
19
- const numOfTargetNeighbors = config.numOfTargetNeighbors ?? 4;
20
- const maxNumberOfContacts = config.maxNumberOfContacts ?? 20;
18
+ const neighborTargetCount = config.neighborTargetCount ?? 4;
19
+ const maxContactCount = config.maxContactCount ?? 20;
21
20
  const minPropagationTargets = config.minPropagationTargets ?? 2;
22
21
  const acceptProxyConnections = config.acceptProxyConnections ?? false;
23
22
  const neighborUpdateInterval = config.neighborUpdateInterval ?? 10000;
24
- const nearbyNodeView = config.nearbyNodeView ?? new NodeList_1.NodeList(ownNodeId, numOfTargetNeighbors + 1);
25
- const randomNodeView = config.randomNodeView ?? new NodeList_1.NodeList(ownNodeId, maxNumberOfContacts);
26
- const targetNeighbors = config.targetNeighbors ?? new NodeList_1.NodeList(ownNodeId, maxNumberOfContacts);
23
+ const neighbors = config.neighbors ?? new NodeList_1.NodeList(ownNodeId, maxContactCount);
24
+ const leftNodeView = config.leftNodeView ?? new NodeList_1.NodeList(ownNodeId, maxContactCount);
25
+ const rightNodeView = config.rightNodeView ?? new NodeList_1.NodeList(ownNodeId, maxContactCount);
26
+ const nearbyNodeView = config.nearbyNodeView ?? new NodeList_1.NodeList(ownNodeId, maxContactCount);
27
+ const randomNodeView = config.randomNodeView ?? new NodeList_1.NodeList(ownNodeId, maxContactCount);
28
+ const ongoingHandshakes = new Set();
27
29
  const temporaryConnectionRpcLocal = new TemporaryConnectionRpcLocal_1.TemporaryConnectionRpcLocal({
28
- streamPartId: config.streamPartId,
29
30
  rpcCommunicator,
30
- localPeerDescriptor: config.localPeerDescriptor
31
+ localPeerDescriptor: config.localPeerDescriptor,
32
+ streamPartId: config.streamPartId,
33
+ connectionLocker: config.connectionLocker
31
34
  });
32
35
  const proxyConnectionRpcLocal = acceptProxyConnections ? new ProxyConnectionRpcLocal_1.ProxyConnectionRpcLocal({
33
36
  localPeerDescriptor: config.localPeerDescriptor,
@@ -37,7 +40,7 @@ const createConfigWithDefaults = (config) => {
37
40
  const propagation = config.propagation ?? new Propagation_1.Propagation({
38
41
  minPropagationTargets,
39
42
  sendToNeighbor: async (neighborId, msg) => {
40
- const remote = targetNeighbors.get(neighborId) ?? temporaryConnectionRpcLocal.getNodes().get(neighborId);
43
+ const remote = neighbors.get(neighborId) ?? temporaryConnectionRpcLocal.getNodes().get(neighborId);
41
44
  const proxyConnection = proxyConnectionRpcLocal?.getConnection(neighborId);
42
45
  if (remote) {
43
46
  await remote.sendStreamMessage(msg);
@@ -53,28 +56,35 @@ const createConfigWithDefaults = (config) => {
53
56
  const handshaker = config.handshaker ?? new Handshaker_1.Handshaker({
54
57
  localPeerDescriptor: config.localPeerDescriptor,
55
58
  streamPartId: config.streamPartId,
56
- connectionLocker: config.connectionLocker,
57
59
  rpcCommunicator,
60
+ neighbors,
61
+ leftNodeView,
62
+ rightNodeView,
58
63
  nearbyNodeView,
59
64
  randomNodeView,
60
- targetNeighbors,
61
- maxNeighborCount: numOfTargetNeighbors,
62
- rpcRequestTimeout: config.rpcRequestTimeout
65
+ maxNeighborCount: neighborTargetCount,
66
+ rpcRequestTimeout: config.rpcRequestTimeout,
67
+ ongoingHandshakes
63
68
  });
64
69
  const neighborFinder = config.neighborFinder ?? new NeighborFinder_1.NeighborFinder({
65
- targetNeighbors,
70
+ neighbors,
71
+ leftNodeView,
72
+ rightNodeView,
66
73
  nearbyNodeView,
74
+ randomNodeView,
67
75
  doFindNeighbors: (excludedIds) => handshaker.attemptHandshakesOnContacts(excludedIds),
68
- minCount: numOfTargetNeighbors
76
+ minCount: neighborTargetCount
69
77
  });
70
78
  const neighborUpdateManager = config.neighborUpdateManager ?? new NeighborUpdateManager_1.NeighborUpdateManager({
71
- targetNeighbors,
79
+ neighbors,
72
80
  nearbyNodeView,
73
81
  localPeerDescriptor: config.localPeerDescriptor,
74
82
  neighborFinder,
75
83
  streamPartId: config.streamPartId,
76
84
  rpcCommunicator,
77
- neighborUpdateInterval
85
+ neighborUpdateInterval,
86
+ neighborTargetCount,
87
+ ongoingHandshakes
78
88
  });
79
89
  const inspector = config.inspector ?? new Inspector_1.Inspector({
80
90
  localPeerDescriptor: config.localPeerDescriptor,
@@ -84,16 +94,18 @@ const createConfigWithDefaults = (config) => {
84
94
  });
85
95
  return {
86
96
  ...config,
97
+ neighbors,
98
+ leftNodeView,
99
+ rightNodeView,
87
100
  nearbyNodeView,
88
101
  randomNodeView,
89
- targetNeighbors,
90
102
  rpcCommunicator,
91
103
  handshaker,
92
104
  neighborFinder,
93
105
  neighborUpdateManager,
94
106
  propagation,
95
- numOfTargetNeighbors,
96
- nodeViewSize: maxNumberOfContacts,
107
+ neighborTargetCount,
108
+ nodeViewSize: maxContactCount,
97
109
  proxyConnectionRpcLocal,
98
110
  inspector,
99
111
  temporaryConnectionRpcLocal
@@ -1 +1 @@
1
- {"version":3,"file":"createRandomGraphNode.js","sourceRoot":"","sources":["../../../src/logic/createRandomGraphNode.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"createRandomGraphNode.js","sourceRoot":"","sources":["../../../src/logic/createRandomGraphNode.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,3 @@
1
+ import { ServiceID } from '@streamr/dht';
1
2
  import { StreamPartID } from '@streamr/protocol';
2
- export declare const formStreamPartDeliveryServiceId: (streamPartId: StreamPartID) => string;
3
+ export declare const formStreamPartDeliveryServiceId: (streamPartId: StreamPartID) => ServiceID;
@@ -1 +1 @@
1
- {"version":3,"file":"formStreamPartDeliveryServiceId.js","sourceRoot":"","sources":["../../../src/logic/formStreamPartDeliveryServiceId.ts"],"names":[],"mappings":";;;AAEO,MAAM,+BAA+B,GAAG,CAAC,YAA0B,EAAU,EAAE;IAClF,OAAO,wBAAwB,YAAY,EAAE,CAAA;AACjD,CAAC,CAAA;AAFY,QAAA,+BAA+B,mCAE3C"}
1
+ {"version":3,"file":"formStreamPartDeliveryServiceId.js","sourceRoot":"","sources":["../../../src/logic/formStreamPartDeliveryServiceId.ts"],"names":[],"mappings":";;;AAGO,MAAM,+BAA+B,GAAG,CAAC,YAA0B,EAAa,EAAE;IACrF,OAAO,wBAAwB,YAAY,EAAE,CAAA;AACjD,CAAC,CAAA;AAFY,QAAA,+BAA+B,mCAE3C"}
@@ -1,18 +1,19 @@
1
1
  import { EventEmitter } from 'eventemitter3';
2
- import { NodeID } from '../../identifiers';
3
2
  import { MessageID } from '../../proto/packages/trackerless-network/protos/NetworkRpc';
3
+ import { DhtAddress } from '@streamr/dht';
4
4
  export interface Events {
5
5
  done: () => void;
6
6
  }
7
7
  interface InspectSessionConfig {
8
- inspectedNode: NodeID;
8
+ inspectedNode: DhtAddress;
9
9
  }
10
10
  export declare class InspectSession extends EventEmitter<Events> {
11
11
  private readonly inspectionMessages;
12
12
  private readonly inspectedNode;
13
13
  constructor(config: InspectSessionConfig);
14
- markMessage(senderId: NodeID, messageId: MessageID): void;
14
+ markMessage(senderId: DhtAddress, messageId: MessageID): void;
15
15
  getInspectedMessageCount(): number;
16
+ onlyMarkedByInspectedNode(): boolean;
16
17
  stop(): void;
17
18
  }
18
19
  export {};
@@ -7,10 +7,11 @@ const createMessageKey = (messageId) => {
7
7
  return `${(0, utils_1.binaryToHex)(messageId.publisherId)}:${messageId.messageChainId}:${messageId.timestamp}:${messageId.sequenceNumber}`;
8
8
  };
9
9
  class InspectSession extends eventemitter3_1.EventEmitter {
10
+ // Boolean indicates if the message has been received by the inspected node
11
+ inspectionMessages = new Map();
12
+ inspectedNode;
10
13
  constructor(config) {
11
14
  super();
12
- // Boolean indicates if the message has been received by the inspected node
13
- this.inspectionMessages = new Map();
14
15
  this.inspectedNode = config.inspectedNode;
15
16
  }
16
17
  markMessage(senderId, messageId) {
@@ -31,6 +32,9 @@ class InspectSession extends eventemitter3_1.EventEmitter {
31
32
  getInspectedMessageCount() {
32
33
  return this.inspectionMessages.size;
33
34
  }
35
+ onlyMarkedByInspectedNode() {
36
+ return Array.from(this.inspectionMessages.values()).every((value) => value === true);
37
+ }
34
38
  stop() {
35
39
  this.emit('done');
36
40
  }
@@ -1 +1 @@
1
- {"version":3,"file":"InspectSession.js","sourceRoot":"","sources":["../../../../src/logic/inspect/InspectSession.ts"],"names":[],"mappings":";;;AAAA,iDAA4C;AAG5C,0CAA4C;AAU5C,MAAM,gBAAgB,GAAG,CAAC,SAAoB,EAAU,EAAE;IACtD,OAAO,GAAG,IAAA,mBAAW,EAAC,SAAS,CAAC,WAAW,CAAC,IAAI,SAAS,CAAC,cAAc,IAAI,SAAS,CAAC,SAAS,IAAI,SAAS,CAAC,cAAc,EAAE,CAAA;AACjI,CAAC,CAAA;AACD,MAAa,cAAe,SAAQ,4BAAoB;IAMpD,YAAY,MAA4B;QACpC,KAAK,EAAE,CAAA;QALX,2EAA2E;QAC1D,uBAAkB,GAAyB,IAAI,GAAG,EAAE,CAAA;QAKjE,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAA;IAC7C,CAAC;IAED,WAAW,CAAC,QAAgB,EAAE,SAAoB;QAC9C,MAAM,UAAU,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAA;QAC9C,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;YAC1C,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,KAAK,IAAI,CAAC,aAAa,CAAC,CAAA;SAC3E;aAAM,IAAI,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAC;eAC3C,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,KAAK;eACjD,QAAQ,KAAK,IAAI,CAAC,aAAa,EACpC;YACE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;SACpB;aAAM,IAAI,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAC;eAC3C,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,IAAI,EAAE;YACrD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;SACpB;IACL,CAAC;IAED,wBAAwB;QACpB,OAAO,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAA;IACvC,CAAC;IAED,IAAI;QACA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACrB,CAAC;CACJ;AAjCD,wCAiCC"}
1
+ {"version":3,"file":"InspectSession.js","sourceRoot":"","sources":["../../../../src/logic/inspect/InspectSession.ts"],"names":[],"mappings":";;;AAAA,iDAA4C;AAE5C,0CAA4C;AAW5C,MAAM,gBAAgB,GAAG,CAAC,SAAoB,EAAU,EAAE;IACtD,OAAO,GAAG,IAAA,mBAAW,EAAC,SAAS,CAAC,WAAW,CAAC,IAAI,SAAS,CAAC,cAAc,IAAI,SAAS,CAAC,SAAS,IAAI,SAAS,CAAC,cAAc,EAAE,CAAA;AACjI,CAAC,CAAA;AACD,MAAa,cAAe,SAAQ,4BAAoB;IAEpD,2EAA2E;IAC1D,kBAAkB,GAAyB,IAAI,GAAG,EAAE,CAAA;IACpD,aAAa,CAAY;IAE1C,YAAY,MAA4B;QACpC,KAAK,EAAE,CAAA;QACP,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAA;IAC7C,CAAC;IAED,WAAW,CAAC,QAAoB,EAAE,SAAoB;QAClD,MAAM,UAAU,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAA;QAC9C,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;YAC3C,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,KAAK,IAAI,CAAC,aAAa,CAAC,CAAA;QAC5E,CAAC;aAAM,IAAI,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAC;eAC3C,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,KAAK;eACjD,QAAQ,KAAK,IAAI,CAAC,aAAa,EACpC,CAAC;YACC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QACrB,CAAC;aAAM,IAAI,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAC;eAC3C,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,IAAI,EAAE,CAAC;YACtD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QACrB,CAAC;IACL,CAAC;IAED,wBAAwB;QACpB,OAAO,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAA;IACvC,CAAC;IAED,yBAAyB;QACrB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,CAAA;IACxF,CAAC;IAED,IAAI;QACA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACrB,CAAC;CACJ;AArCD,wCAqCC"}
@@ -1,35 +1,30 @@
1
- import { PeerDescriptor, ConnectionLocker } from '@streamr/dht';
1
+ import { PeerDescriptor, ConnectionLocker, LockID, DhtAddress, ListeningRpcCommunicator } from '@streamr/dht';
2
2
  import { MessageID } from '../../proto/packages/trackerless-network/protos/NetworkRpc';
3
- import { RpcCommunicator } from '@streamr/proto-rpc';
4
- import { NodeID } from '../../identifiers';
5
3
  import { StreamPartID } from '@streamr/protocol';
6
4
  interface InspectorConfig {
7
5
  localPeerDescriptor: PeerDescriptor;
8
6
  streamPartId: StreamPartID;
9
- rpcCommunicator: RpcCommunicator;
7
+ rpcCommunicator: ListeningRpcCommunicator;
10
8
  connectionLocker: ConnectionLocker;
11
9
  inspectionTimeout?: number;
12
- openInspectConnection?: (peerDescriptor: PeerDescriptor, lockId: string) => Promise<void>;
10
+ openInspectConnection?: (peerDescriptor: PeerDescriptor, lockId: LockID) => Promise<void>;
11
+ closeInspectConnection?: (peerDescriptor: PeerDescriptor, lockId: LockID) => Promise<void>;
13
12
  }
14
- export interface IInspector {
15
- inspect(peerDescriptor: PeerDescriptor): Promise<boolean>;
16
- markMessage(sender: NodeID, messageId: MessageID): void;
17
- isInspected(nodeId: NodeID): boolean;
18
- stop(): void;
19
- }
20
- export declare class Inspector implements IInspector {
13
+ export declare class Inspector {
21
14
  private readonly sessions;
22
15
  private readonly streamPartId;
23
- private readonly client;
24
16
  private readonly localPeerDescriptor;
17
+ private readonly rpcCommunicator;
25
18
  private readonly connectionLocker;
26
19
  private readonly inspectionTimeout;
27
20
  private readonly openInspectConnection;
21
+ private readonly closeInspectConnection;
28
22
  constructor(config: InspectorConfig);
29
- defaultOpenInspectConnection(peerDescriptor: PeerDescriptor, lockId: string): Promise<void>;
23
+ defaultOpenInspectConnection(peerDescriptor: PeerDescriptor, lockId: LockID): Promise<void>;
24
+ defaultCloseInspectConnection(peerDescriptor: PeerDescriptor, lockId: LockID): Promise<void>;
30
25
  inspect(peerDescriptor: PeerDescriptor): Promise<boolean>;
31
- markMessage(sender: NodeID, messageId: MessageID): void;
32
- isInspected(nodeId: NodeID): boolean;
26
+ markMessage(sender: DhtAddress, messageId: MessageID): void;
27
+ isInspected(nodeId: DhtAddress): boolean;
33
28
  stop(): void;
34
29
  }
35
30
  export {};
@@ -1,31 +1,43 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Inspector = void 0;
4
+ const dht_1 = require("@streamr/dht");
4
5
  const InspectSession_1 = require("./InspectSession");
5
6
  const NetworkRpc_client_1 = require("../../proto/packages/trackerless-network/protos/NetworkRpc.client");
6
- const proto_rpc_1 = require("@streamr/proto-rpc");
7
7
  const utils_1 = require("@streamr/utils");
8
8
  const TemporaryConnectionRpcRemote_1 = require("../temporary-connection/TemporaryConnectionRpcRemote");
9
- const identifiers_1 = require("../../identifiers");
10
9
  const logger = new utils_1.Logger(module);
11
10
  const DEFAULT_TIMEOUT = 60 * 1000;
12
11
  class Inspector {
12
+ sessions = new Map();
13
+ streamPartId;
14
+ localPeerDescriptor;
15
+ rpcCommunicator;
16
+ connectionLocker;
17
+ inspectionTimeout;
18
+ openInspectConnection;
19
+ closeInspectConnection;
13
20
  constructor(config) {
14
- this.sessions = new Map();
15
21
  this.streamPartId = config.streamPartId;
16
22
  this.localPeerDescriptor = config.localPeerDescriptor;
17
- this.client = (0, proto_rpc_1.toProtoRpcClient)(new NetworkRpc_client_1.TemporaryConnectionRpcClient(config.rpcCommunicator.getRpcClientTransport()));
23
+ this.rpcCommunicator = config.rpcCommunicator;
18
24
  this.connectionLocker = config.connectionLocker;
19
25
  this.inspectionTimeout = config.inspectionTimeout ?? DEFAULT_TIMEOUT;
20
26
  this.openInspectConnection = config.openInspectConnection ?? this.defaultOpenInspectConnection;
27
+ this.closeInspectConnection = config.closeInspectConnection ?? this.defaultCloseInspectConnection;
21
28
  }
22
29
  async defaultOpenInspectConnection(peerDescriptor, lockId) {
23
- const rpcRemote = new TemporaryConnectionRpcRemote_1.TemporaryConnectionRpcRemote(this.localPeerDescriptor, peerDescriptor, this.streamPartId, this.client);
30
+ const rpcRemote = new TemporaryConnectionRpcRemote_1.TemporaryConnectionRpcRemote(this.localPeerDescriptor, peerDescriptor, this.rpcCommunicator, NetworkRpc_client_1.TemporaryConnectionRpcClient);
24
31
  await rpcRemote.openConnection();
25
- this.connectionLocker.lockConnection(peerDescriptor, lockId);
32
+ this.connectionLocker.weakLockConnection((0, dht_1.getNodeIdFromPeerDescriptor)(peerDescriptor), lockId);
33
+ }
34
+ async defaultCloseInspectConnection(peerDescriptor, lockId) {
35
+ const rpcRemote = new TemporaryConnectionRpcRemote_1.TemporaryConnectionRpcRemote(this.localPeerDescriptor, peerDescriptor, this.rpcCommunicator, NetworkRpc_client_1.TemporaryConnectionRpcClient);
36
+ await rpcRemote.closeConnection();
37
+ this.connectionLocker.weakUnlockConnection((0, dht_1.getNodeIdFromPeerDescriptor)(peerDescriptor), lockId);
26
38
  }
27
39
  async inspect(peerDescriptor) {
28
- const nodeId = (0, identifiers_1.getNodeIdFromPeerDescriptor)(peerDescriptor);
40
+ const nodeId = (0, dht_1.getNodeIdFromPeerDescriptor)(peerDescriptor);
29
41
  const session = new InspectSession_1.InspectSession({
30
42
  inspectedNode: nodeId
31
43
  });
@@ -41,10 +53,10 @@ class Inspector {
41
53
  logger.trace('Inspect session timed out, removing');
42
54
  }
43
55
  finally {
56
+ await this.closeInspectConnection(peerDescriptor, lockId);
44
57
  this.sessions.delete(nodeId);
45
- this.connectionLocker.unlockConnection(peerDescriptor, lockId);
46
58
  }
47
- return success || session.getInspectedMessageCount() < 1;
59
+ return success || session.getInspectedMessageCount() < 1 || session.onlyMarkedByInspectedNode();
48
60
  }
49
61
  markMessage(sender, messageId) {
50
62
  this.sessions.forEach((session) => session.markMessage(sender, messageId));
@@ -1 +1 @@
1
- {"version":3,"file":"Inspector.js","sourceRoot":"","sources":["../../../../src/logic/inspect/Inspector.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Inspector.js","sourceRoot":"","sources":["../../../../src/logic/inspect/Inspector.ts"],"names":[],"mappings":"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"}
@@ -1,22 +1,20 @@
1
- import { Empty } from '../../proto/google/protobuf/empty';
2
- import { InterleaveNotice, StreamPartHandshakeRequest, StreamPartHandshakeResponse } from '../../proto/packages/trackerless-network/protos/NetworkRpc';
1
+ import { InterleaveRequest, InterleaveResponse, StreamPartHandshakeRequest, StreamPartHandshakeResponse } from '../../proto/packages/trackerless-network/protos/NetworkRpc';
3
2
  import { ServerCallContext } from '@protobuf-ts/runtime-rpc';
4
3
  import { NodeList } from '../NodeList';
5
- import { ConnectionLocker, PeerDescriptor } from '@streamr/dht';
4
+ import { DhtAddress, PeerDescriptor } from '@streamr/dht';
6
5
  import { IHandshakeRpc } from '../../proto/packages/trackerless-network/protos/NetworkRpc.server';
7
6
  import { HandshakeRpcRemote } from './HandshakeRpcRemote';
8
7
  import { DeliveryRpcRemote } from '../DeliveryRpcRemote';
9
- import { NodeID } from '../../identifiers';
10
8
  import { StreamPartID } from '@streamr/protocol';
11
9
  interface HandshakeRpcLocalConfig {
12
10
  streamPartId: StreamPartID;
13
- targetNeighbors: NodeList;
14
- connectionLocker: ConnectionLocker;
15
- ongoingHandshakes: Set<NodeID>;
11
+ neighbors: NodeList;
12
+ ongoingHandshakes: Set<DhtAddress>;
13
+ ongoingInterleaves: Set<DhtAddress>;
16
14
  maxNeighborCount: number;
17
15
  createRpcRemote: (target: PeerDescriptor) => HandshakeRpcRemote;
18
16
  createDeliveryRpcRemote: (peerDescriptor: PeerDescriptor) => DeliveryRpcRemote;
19
- handshakeWithInterleaving: (target: PeerDescriptor, senderId: NodeID) => Promise<boolean>;
17
+ handshakeWithInterleaving: (target: PeerDescriptor, senderId: DhtAddress) => Promise<boolean>;
20
18
  }
21
19
  export declare class HandshakeRpcLocal implements IHandshakeRpc {
22
20
  private readonly config;
@@ -26,6 +24,6 @@ export declare class HandshakeRpcLocal implements IHandshakeRpc {
26
24
  private acceptHandshake;
27
25
  private rejectHandshake;
28
26
  private acceptHandshakeWithInterleaving;
29
- interleaveNotice(message: InterleaveNotice, context: ServerCallContext): Promise<Empty>;
27
+ interleaveRequest(message: InterleaveRequest, context: ServerCallContext): Promise<InterleaveResponse>;
30
28
  }
31
29
  export {};
@@ -1,10 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.HandshakeRpcLocal = void 0;
4
- const empty_1 = require("../../proto/google/protobuf/empty");
5
- const identifiers_1 = require("../../identifiers");
4
+ const dht_1 = require("@streamr/dht");
6
5
  const utils_1 = require("@streamr/utils");
6
+ const logger = new utils_1.Logger(module);
7
7
  class HandshakeRpcLocal {
8
+ config;
8
9
  constructor(config) {
9
10
  this.config = config;
10
11
  }
@@ -13,15 +14,22 @@ class HandshakeRpcLocal {
13
14
  }
14
15
  handleRequest(request, context) {
15
16
  const senderDescriptor = context.incomingSourceDescriptor;
16
- const getInterleaveSourceIds = () => (request.interleaveSourceId !== undefined) ? [(0, utils_1.binaryToHex)(request.interleaveSourceId)] : [];
17
- if (this.config.targetNeighbors.hasNode(senderDescriptor)
18
- || this.config.ongoingHandshakes.has((0, identifiers_1.getNodeIdFromPeerDescriptor)(senderDescriptor))) {
17
+ const getInterleaveSourceIds = () => (request.interleaveSourceId !== undefined) ? [(0, dht_1.getDhtAddressFromRaw)(request.interleaveSourceId)] : [];
18
+ const senderNodeId = (0, dht_1.getNodeIdFromPeerDescriptor)(senderDescriptor);
19
+ if (this.config.ongoingInterleaves.has(senderNodeId)) {
20
+ return this.rejectHandshake(request);
21
+ }
22
+ else if (this.config.neighbors.has(senderNodeId)
23
+ || this.config.ongoingHandshakes.has(senderNodeId)) {
19
24
  return this.acceptHandshake(request, senderDescriptor);
20
25
  }
21
- else if (this.config.targetNeighbors.size() + this.config.ongoingHandshakes.size < this.config.maxNeighborCount) {
26
+ else if (this.config.neighbors.size() + this.config.ongoingHandshakes.size < this.config.maxNeighborCount) {
22
27
  return this.acceptHandshake(request, senderDescriptor);
23
28
  }
24
- else if (this.config.targetNeighbors.size(getInterleaveSourceIds()) >= 2) {
29
+ else if (this.config.neighbors.size(getInterleaveSourceIds()) - this.config.ongoingInterleaves.size >= 2
30
+ && this.config.neighbors.size() <= this.config.maxNeighborCount) {
31
+ // Do not accept the handshakes requests if the target neighbor count can potentially drop below 2
32
+ // due to interleaving. This ensures that a stable number of connections is kept during high churn.
25
33
  return this.acceptHandshakeWithInterleaving(request, senderDescriptor);
26
34
  }
27
35
  else {
@@ -33,8 +41,7 @@ class HandshakeRpcLocal {
33
41
  requestId: request.requestId,
34
42
  accepted: true
35
43
  };
36
- this.config.targetNeighbors.add(this.config.createDeliveryRpcRemote(requester));
37
- this.config.connectionLocker.lockConnection(requester, this.config.streamPartId);
44
+ this.config.neighbors.add(this.config.createDeliveryRpcRemote(requester));
38
45
  return res;
39
46
  }
40
47
  // eslint-disable-next-line class-methods-use-this
@@ -46,38 +53,54 @@ class HandshakeRpcLocal {
46
53
  return res;
47
54
  }
48
55
  acceptHandshakeWithInterleaving(request, requester) {
49
- const exclude = request.neighborIds.map((id) => (0, utils_1.binaryToHex)(id));
50
- exclude.push((0, identifiers_1.getNodeIdFromPeerDescriptor)(requester));
56
+ const exclude = [];
57
+ request.neighborIds.forEach((id) => exclude.push((0, dht_1.getDhtAddressFromRaw)(id)));
58
+ this.config.ongoingInterleaves.forEach((id) => exclude.push(id));
59
+ exclude.push((0, dht_1.getNodeIdFromPeerDescriptor)(requester));
51
60
  if (request.interleaveSourceId !== undefined) {
52
- exclude.push((0, utils_1.binaryToHex)(request.interleaveSourceId));
61
+ exclude.push((0, dht_1.getDhtAddressFromRaw)(request.interleaveSourceId));
53
62
  }
54
- const furthest = this.config.targetNeighbors.getFurthest(exclude);
55
- const furthestPeerDescriptor = furthest ? furthest.getPeerDescriptor() : undefined;
56
- if (furthest) {
57
- const remote = this.config.createRpcRemote(furthest.getPeerDescriptor());
58
- remote.interleaveNotice(requester);
59
- this.config.targetNeighbors.remove(furthest.getPeerDescriptor());
60
- this.config.connectionLocker.unlockConnection(furthestPeerDescriptor, this.config.streamPartId);
63
+ const last = this.config.neighbors.getLast(exclude);
64
+ const lastPeerDescriptor = last ? last.getPeerDescriptor() : undefined;
65
+ if (last) {
66
+ const nodeId = (0, dht_1.getNodeIdFromPeerDescriptor)(last.getPeerDescriptor());
67
+ const remote = this.config.createRpcRemote(last.getPeerDescriptor());
68
+ this.config.ongoingInterleaves.add(nodeId);
69
+ // Run this with then catch instead of setImmediate to avoid changes in state
70
+ // eslint-disable-next-line promise/catch-or-return
71
+ remote.interleaveRequest(requester).then((response) => {
72
+ // If response is accepted, remove the last node from the target neighbors
73
+ // and unlock the connection
74
+ // If response is not accepted, keep the last node as a neighbor
75
+ if (response.accepted) {
76
+ this.config.neighbors.remove((0, dht_1.getNodeIdFromPeerDescriptor)(lastPeerDescriptor));
77
+ }
78
+ return;
79
+ }).catch(() => {
80
+ // no-op: InterleaveRequest cannot reject
81
+ }).finally(() => {
82
+ this.config.ongoingInterleaves.delete(nodeId);
83
+ });
61
84
  }
62
- this.config.targetNeighbors.add(this.config.createDeliveryRpcRemote(requester));
63
- this.config.connectionLocker.lockConnection(requester, this.config.streamPartId);
85
+ this.config.neighbors.add(this.config.createDeliveryRpcRemote(requester));
64
86
  return {
65
87
  requestId: request.requestId,
66
88
  accepted: true,
67
- interleaveTargetDescriptor: furthestPeerDescriptor
89
+ interleaveTargetDescriptor: lastPeerDescriptor
68
90
  };
69
91
  }
70
- async interleaveNotice(message, context) {
71
- if (message.streamPartId === this.config.streamPartId) {
72
- const senderPeerDescriptor = context.incomingSourceDescriptor;
73
- const senderId = (0, identifiers_1.getNodeIdFromPeerDescriptor)(senderPeerDescriptor);
74
- if (this.config.targetNeighbors.hasNodeById(senderId)) {
75
- this.config.connectionLocker.unlockConnection(senderPeerDescriptor, this.config.streamPartId);
76
- this.config.targetNeighbors.remove(senderPeerDescriptor);
77
- }
78
- this.config.handshakeWithInterleaving(message.interleaveTargetDescriptor, senderId).catch((_e) => { });
92
+ async interleaveRequest(message, context) {
93
+ const senderPeerDescriptor = context.incomingSourceDescriptor;
94
+ const senderId = (0, dht_1.getNodeIdFromPeerDescriptor)(senderPeerDescriptor);
95
+ try {
96
+ await this.config.handshakeWithInterleaving(message.interleaveTargetDescriptor, senderId);
97
+ this.config.neighbors.remove(senderId);
98
+ return { accepted: true };
99
+ }
100
+ catch (err) {
101
+ logger.debug(`interleaveRequest to ${(0, dht_1.getNodeIdFromPeerDescriptor)(message.interleaveTargetDescriptor)} failed: ${err}`);
102
+ return { accepted: false };
79
103
  }
80
- return empty_1.Empty;
81
104
  }
82
105
  }
83
106
  exports.HandshakeRpcLocal = HandshakeRpcLocal;
@@ -1 +1 @@
1
- {"version":3,"file":"HandshakeRpcLocal.js","sourceRoot":"","sources":["../../../../src/logic/neighbor-discovery/HandshakeRpcLocal.ts"],"names":[],"mappings":";;;AAAA,6DAAyD;AAQzD,mDAAuE;AACvE,0CAA4C;AAc5C,MAAa,iBAAiB;IAI1B,YAAY,MAA+B;QACvC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACxB,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,OAAmC,EAAE,OAA0B;QAC3E,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;IAC/C,CAAC;IAEO,aAAa,CAAC,OAAmC,EAAE,OAA0B;QACjF,MAAM,gBAAgB,GAAI,OAA0B,CAAC,wBAAyB,CAAA;QAC9E,MAAM,sBAAsB,GAAG,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,kBAAkB,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAA,mBAAW,EAAC,OAAO,CAAC,kBAAkB,CAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QAC1I,IAAI,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,gBAAgB,CAAC;eAClD,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAA,yCAA2B,EAAC,gBAAgB,CAAC,CAAC,EACrF;YACE,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAA;SACzD;aAAM,IAAI,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE;YAC/G,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAA;SACzD;aAAM,IAAI,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAC,IAAI,CAAC,EAAE;YACxE,OAAO,IAAI,CAAC,+BAA+B,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAA;SACzE;aAAM;YACH,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAA;SACvC;IACL,CAAC;IAEO,eAAe,CAAC,OAAmC,EAAE,SAAyB;QAClF,MAAM,GAAG,GAAgC;YACrC,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,QAAQ,EAAE,IAAI;SACjB,CAAA;QACD,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC,CAAA;QAC/E,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,cAAc,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA;QAChF,OAAO,GAAG,CAAA;IACd,CAAC;IAED,kDAAkD;IAC1C,eAAe,CAAC,OAAmC;QACvD,MAAM,GAAG,GAAgC;YACrC,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,QAAQ,EAAE,KAAK;SAClB,CAAA;QACD,OAAO,GAAG,CAAA;IACd,CAAC;IAEO,+BAA+B,CAAC,OAAmC,EAAE,SAAyB;QAClG,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,EAAc,EAAE,EAAE,CAAC,IAAA,mBAAW,EAAC,EAAE,CAAW,CAAC,CAAA;QACtF,OAAO,CAAC,IAAI,CAAC,IAAA,yCAA2B,EAAC,SAAS,CAAC,CAAC,CAAA;QACpD,IAAI,OAAO,CAAC,kBAAkB,KAAK,SAAS,EAAE;YAC1C,OAAO,CAAC,IAAI,CAAC,IAAA,mBAAW,EAAC,OAAO,CAAC,kBAAkB,CAAW,CAAC,CAAA;SAClE;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;QACjE,MAAM,sBAAsB,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,SAAS,CAAA;QAClF,IAAI,QAAQ,EAAE;YACV,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,iBAAiB,EAAE,CAAC,CAAA;YACxE,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAA;YAClC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,EAAE,CAAC,CAAA;YAChE,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,sBAAuB,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA;SACnG;QACD,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC,CAAA;QAC/E,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,cAAc,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA;QAChF,OAAO;YACH,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,QAAQ,EAAE,IAAI;YACd,0BAA0B,EAAE,sBAAsB;SACrD,CAAA;IACL,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,OAAyB,EAAE,OAA0B;QACxE,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,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE;gBACnD,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,oBAAoB,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA;gBAC7F,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAA;aAC3D;YACD,IAAI,CAAC,MAAM,CAAC,yBAAyB,CAAC,OAAO,CAAC,0BAA2B,EAAE,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,GAAE,CAAC,CAAC,CAAA;SACzG;QACD,OAAO,aAAK,CAAA;IAChB,CAAC;CACJ;AAlFD,8CAkFC"}
1
+ {"version":3,"file":"HandshakeRpcLocal.js","sourceRoot":"","sources":["../../../../src/logic/neighbor-discovery/HandshakeRpcLocal.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,14 @@
1
- import { PeerDescriptor, Remote } from '@streamr/dht';
2
- import { NodeID } from '../../identifiers';
3
- import { IHandshakeRpcClient } from '../../proto/packages/trackerless-network/protos/NetworkRpc.client';
1
+ import { DhtAddress, PeerDescriptor, RpcRemote } from '@streamr/dht';
2
+ import { InterleaveResponse } from '../../proto/packages/trackerless-network/protos/NetworkRpc';
3
+ import { HandshakeRpcClient } from '../../proto/packages/trackerless-network/protos/NetworkRpc.client';
4
+ import { StreamPartID } from '@streamr/protocol';
4
5
  interface HandshakeResponse {
5
6
  accepted: boolean;
6
7
  interleaveTargetDescriptor?: PeerDescriptor;
7
8
  }
8
- export declare class HandshakeRpcRemote extends Remote<IHandshakeRpcClient> {
9
- handshake(neighborIds: NodeID[], concurrentHandshakeTargetId?: NodeID, interleaveSourceId?: NodeID): Promise<HandshakeResponse>;
10
- interleaveNotice(originatorDescriptor: PeerDescriptor): void;
9
+ export declare const INTERLEAVE_REQUEST_TIMEOUT = 15000;
10
+ export declare class HandshakeRpcRemote extends RpcRemote<HandshakeRpcClient> {
11
+ handshake(streamPartId: StreamPartID, neighborIds: DhtAddress[], concurrentHandshakeTargetId?: DhtAddress, interleaveSourceId?: DhtAddress): Promise<HandshakeResponse>;
12
+ interleaveRequest(originatorDescriptor: PeerDescriptor): Promise<InterleaveResponse>;
11
13
  }
12
14
  export {};
@@ -1,19 +1,19 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.HandshakeRpcRemote = void 0;
3
+ exports.HandshakeRpcRemote = exports.INTERLEAVE_REQUEST_TIMEOUT = void 0;
4
4
  const dht_1 = require("@streamr/dht");
5
5
  const utils_1 = require("@streamr/utils");
6
6
  const uuid_1 = require("uuid");
7
- const identifiers_1 = require("../../identifiers");
8
7
  const logger = new utils_1.Logger(module);
9
- class HandshakeRpcRemote extends dht_1.Remote {
10
- async handshake(neighborIds, concurrentHandshakeTargetId, interleaveSourceId) {
8
+ exports.INTERLEAVE_REQUEST_TIMEOUT = 15000;
9
+ class HandshakeRpcRemote extends dht_1.RpcRemote {
10
+ async handshake(streamPartId, neighborIds, concurrentHandshakeTargetId, interleaveSourceId) {
11
11
  const request = {
12
- streamPartId: this.getServiceId(),
12
+ streamPartId,
13
13
  requestId: (0, uuid_1.v4)(),
14
- neighborIds: neighborIds.map((id) => (0, utils_1.hexToBinary)(id)),
15
- concurrentHandshakeTargetId: (concurrentHandshakeTargetId !== undefined) ? (0, utils_1.hexToBinary)(concurrentHandshakeTargetId) : undefined,
16
- interleaveSourceId: (interleaveSourceId !== undefined) ? (0, utils_1.hexToBinary)(interleaveSourceId) : undefined
14
+ neighborIds: neighborIds.map((id) => (0, dht_1.getRawFromDhtAddress)(id)),
15
+ concurrentHandshakeTargetId: (concurrentHandshakeTargetId !== undefined) ? (0, dht_1.getRawFromDhtAddress)(concurrentHandshakeTargetId) : undefined,
16
+ interleaveSourceId: (interleaveSourceId !== undefined) ? (0, dht_1.getRawFromDhtAddress)(interleaveSourceId) : undefined
17
17
  };
18
18
  try {
19
19
  const response = await this.getClient().handshake(request, this.formDhtRpcOptions());
@@ -23,23 +23,32 @@ class HandshakeRpcRemote extends dht_1.Remote {
23
23
  };
24
24
  }
25
25
  catch (err) {
26
- logger.debug(`handshake to ${(0, identifiers_1.getNodeIdFromPeerDescriptor)(this.getPeerDescriptor())} failed: ${err}`);
26
+ logger.debug(`handshake to ${(0, dht_1.getNodeIdFromPeerDescriptor)(this.getPeerDescriptor())} failed: ${err}`);
27
27
  return {
28
28
  accepted: false
29
29
  };
30
30
  }
31
31
  }
32
- interleaveNotice(originatorDescriptor) {
33
- const notification = {
34
- streamPartId: this.getServiceId(),
32
+ async interleaveRequest(originatorDescriptor) {
33
+ const request = {
35
34
  interleaveTargetDescriptor: originatorDescriptor
36
35
  };
37
36
  const options = this.formDhtRpcOptions({
38
- notification: true
39
- });
40
- this.getClient().interleaveNotice(notification, options).catch(() => {
41
- logger.debug('Failed to send interleaveNotice');
37
+ connect: false,
38
+ timeout: exports.INTERLEAVE_REQUEST_TIMEOUT
42
39
  });
40
+ try {
41
+ const res = await this.getClient().interleaveRequest(request, options);
42
+ return {
43
+ accepted: res.accepted
44
+ };
45
+ }
46
+ catch (err) {
47
+ logger.debug(`interleaveRequest to ${(0, dht_1.getNodeIdFromPeerDescriptor)(this.getPeerDescriptor())} failed: ${err}`);
48
+ return {
49
+ accepted: false
50
+ };
51
+ }
43
52
  }
44
53
  }
45
54
  exports.HandshakeRpcRemote = HandshakeRpcRemote;