@streamr/trackerless-network 101.1.2 → 102.0.0-beta.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 (244) hide show
  1. package/dist/{src/proto → generated}/google/protobuf/any.d.ts +11 -4
  2. package/dist/generated/google/protobuf/any.js.map +1 -0
  3. package/dist/{src/proto → generated}/google/protobuf/empty.d.ts +0 -1
  4. package/dist/generated/google/protobuf/empty.js.map +1 -0
  5. package/dist/{src/proto → generated}/google/protobuf/timestamp.d.ts +9 -3
  6. package/dist/generated/google/protobuf/timestamp.js.map +1 -0
  7. package/dist/{src/proto → generated}/packages/dht/protos/DhtRpc.client.d.ts +9 -0
  8. package/dist/{src/proto → generated}/packages/dht/protos/DhtRpc.client.js +7 -0
  9. package/dist/generated/packages/dht/protos/DhtRpc.client.js.map +1 -0
  10. package/dist/{src/proto → generated}/packages/dht/protos/DhtRpc.d.ts +32 -8
  11. package/dist/{src/proto → generated}/packages/dht/protos/DhtRpc.js +23 -7
  12. package/dist/generated/packages/dht/protos/DhtRpc.js.map +1 -0
  13. package/dist/{src/proto → generated}/packages/dht/protos/DhtRpc.server.d.ts +5 -0
  14. package/dist/generated/packages/dht/protos/DhtRpc.server.js.map +1 -0
  15. package/dist/generated/packages/proto-rpc/protos/ProtoRpc.js.map +1 -0
  16. package/dist/generated/packages/trackerless-network/protos/NetworkRpc.client.js.map +1 -0
  17. package/dist/{src/proto → generated}/packages/trackerless-network/protos/NetworkRpc.d.ts +29 -5
  18. package/dist/{src/proto → generated}/packages/trackerless-network/protos/NetworkRpc.js +17 -3
  19. package/dist/generated/packages/trackerless-network/protos/NetworkRpc.js.map +1 -0
  20. package/dist/generated/packages/trackerless-network/protos/NetworkRpc.server.js.map +1 -0
  21. package/dist/package.json +10 -11
  22. package/dist/src/NetworkNode.d.ts +8 -7
  23. package/dist/src/NetworkNode.js +5 -3
  24. package/dist/src/NetworkNode.js.map +1 -1
  25. package/dist/src/NetworkStack.d.ts +2 -2
  26. package/dist/src/NetworkStack.js +7 -6
  27. package/dist/src/NetworkStack.js.map +1 -1
  28. package/dist/src/exports.d.ts +3 -2
  29. package/dist/src/exports.js +3 -2
  30. package/dist/src/exports.js.map +1 -1
  31. package/dist/src/logic/ContentDeliveryLayerNode.d.ts +5 -1
  32. package/dist/src/logic/ContentDeliveryLayerNode.js +30 -10
  33. package/dist/src/logic/ContentDeliveryLayerNode.js.map +1 -1
  34. package/dist/src/logic/ContentDeliveryManager.d.ts +8 -3
  35. package/dist/src/logic/ContentDeliveryManager.js +28 -7
  36. package/dist/src/logic/ContentDeliveryManager.js.map +1 -1
  37. package/dist/src/logic/ContentDeliveryRpcLocal.d.ts +3 -3
  38. package/dist/src/logic/ContentDeliveryRpcLocal.js +3 -3
  39. package/dist/src/logic/ContentDeliveryRpcLocal.js.map +1 -1
  40. package/dist/src/logic/ContentDeliveryRpcRemote.d.ts +5 -2
  41. package/dist/src/logic/ContentDeliveryRpcRemote.js +7 -0
  42. package/dist/src/logic/ContentDeliveryRpcRemote.js.map +1 -1
  43. package/dist/src/logic/ControlLayerNode.d.ts +1 -1
  44. package/dist/src/logic/DiscoveryLayerNode.d.ts +3 -3
  45. package/dist/src/logic/DuplicateMessageDetector.js +3 -3
  46. package/dist/src/logic/DuplicateMessageDetector.js.map +1 -1
  47. package/dist/src/logic/ExternalNetworkRpc.js.map +1 -1
  48. package/dist/src/logic/NodeList.js +2 -2
  49. package/dist/src/logic/NodeList.js.map +1 -1
  50. package/dist/src/logic/PeerDescriptorStoreManager.d.ts +1 -1
  51. package/dist/src/logic/PeerDescriptorStoreManager.js +1 -2
  52. package/dist/src/logic/PeerDescriptorStoreManager.js.map +1 -1
  53. package/dist/src/logic/StreamPartNetworkSplitAvoidance.js +4 -3
  54. package/dist/src/logic/StreamPartNetworkSplitAvoidance.js.map +1 -1
  55. package/dist/src/logic/createContentDeliveryLayerNode.js +1 -1
  56. package/dist/src/logic/createContentDeliveryLayerNode.js.map +1 -1
  57. package/dist/src/logic/inspect/InspectSession.d.ts +2 -2
  58. package/dist/src/logic/inspect/InspectSession.js +2 -2
  59. package/dist/src/logic/inspect/InspectSession.js.map +1 -1
  60. package/dist/src/logic/inspect/Inspector.d.ts +1 -1
  61. package/dist/src/logic/inspect/Inspector.js +4 -4
  62. package/dist/src/logic/inspect/Inspector.js.map +1 -1
  63. package/dist/src/logic/neighbor-discovery/HandshakeRpcLocal.d.ts +2 -2
  64. package/dist/src/logic/neighbor-discovery/HandshakeRpcLocal.js +9 -9
  65. package/dist/src/logic/neighbor-discovery/HandshakeRpcLocal.js.map +1 -1
  66. package/dist/src/logic/neighbor-discovery/HandshakeRpcRemote.d.ts +2 -2
  67. package/dist/src/logic/neighbor-discovery/HandshakeRpcRemote.js +5 -5
  68. package/dist/src/logic/neighbor-discovery/HandshakeRpcRemote.js.map +1 -1
  69. package/dist/src/logic/neighbor-discovery/Handshaker.js +14 -14
  70. package/dist/src/logic/neighbor-discovery/Handshaker.js.map +1 -1
  71. package/dist/src/logic/neighbor-discovery/NeighborFinder.js +5 -0
  72. package/dist/src/logic/neighbor-discovery/NeighborFinder.js.map +1 -1
  73. package/dist/src/logic/neighbor-discovery/NeighborUpdateManager.js +5 -3
  74. package/dist/src/logic/neighbor-discovery/NeighborUpdateManager.js.map +1 -1
  75. package/dist/src/logic/neighbor-discovery/NeighborUpdateRpcLocal.d.ts +2 -2
  76. package/dist/src/logic/neighbor-discovery/NeighborUpdateRpcLocal.js +4 -4
  77. package/dist/src/logic/neighbor-discovery/NeighborUpdateRpcLocal.js.map +1 -1
  78. package/dist/src/logic/neighbor-discovery/NeighborUpdateRpcRemote.d.ts +1 -1
  79. package/dist/src/logic/neighbor-discovery/NeighborUpdateRpcRemote.js +1 -1
  80. package/dist/src/logic/neighbor-discovery/NeighborUpdateRpcRemote.js.map +1 -1
  81. package/dist/src/logic/node-info/NodeInfoClient.d.ts +1 -1
  82. package/dist/src/logic/node-info/NodeInfoClient.js +1 -1
  83. package/dist/src/logic/node-info/NodeInfoClient.js.map +1 -1
  84. package/dist/src/logic/node-info/NodeInfoRpcLocal.d.ts +2 -2
  85. package/dist/src/logic/node-info/NodeInfoRpcLocal.js +1 -1
  86. package/dist/src/logic/node-info/NodeInfoRpcLocal.js.map +1 -1
  87. package/dist/src/logic/node-info/NodeInfoRpcRemote.d.ts +2 -2
  88. package/dist/src/logic/propagation/Propagation.d.ts +1 -1
  89. package/dist/src/logic/propagation/Propagation.js +0 -1
  90. package/dist/src/logic/propagation/Propagation.js.map +1 -1
  91. package/dist/src/logic/propagation/PropagationTaskStore.d.ts +1 -1
  92. package/dist/src/logic/proxy/ProxyClient.d.ts +4 -4
  93. package/dist/src/logic/proxy/ProxyClient.js +11 -7
  94. package/dist/src/logic/proxy/ProxyClient.js.map +1 -1
  95. package/dist/src/logic/proxy/ProxyConnectionRpcLocal.d.ts +4 -4
  96. package/dist/src/logic/proxy/ProxyConnectionRpcLocal.js +5 -5
  97. package/dist/src/logic/proxy/ProxyConnectionRpcLocal.js.map +1 -1
  98. package/dist/src/logic/proxy/ProxyConnectionRpcRemote.d.ts +4 -4
  99. package/dist/src/logic/proxy/ProxyConnectionRpcRemote.js +1 -1
  100. package/dist/src/logic/proxy/ProxyConnectionRpcRemote.js.map +1 -1
  101. package/dist/src/logic/temporary-connection/TemporaryConnectionRpcLocal.d.ts +4 -4
  102. package/dist/src/logic/temporary-connection/TemporaryConnectionRpcLocal.js +4 -4
  103. package/dist/src/logic/temporary-connection/TemporaryConnectionRpcLocal.js.map +1 -1
  104. package/dist/src/logic/temporary-connection/TemporaryConnectionRpcRemote.d.ts +1 -1
  105. package/dist/src/logic/temporary-connection/TemporaryConnectionRpcRemote.js +2 -2
  106. package/dist/src/logic/temporary-connection/TemporaryConnectionRpcRemote.js.map +1 -1
  107. package/dist/src/logic/utils.d.ts +1 -1
  108. package/dist/src/logic/utils.js +2 -2
  109. package/dist/src/logic/utils.js.map +1 -1
  110. package/dist/src/types.d.ts +6 -0
  111. package/dist/src/types.js +3 -0
  112. package/dist/src/types.js.map +1 -0
  113. package/dist/test/benchmark/first-message.js +3 -4
  114. package/dist/test/benchmark/first-message.js.map +1 -1
  115. package/dist/test/utils/utils.d.ts +4 -4
  116. package/dist/test/utils/utils.js +6 -5
  117. package/dist/test/utils/utils.js.map +1 -1
  118. package/jest.config.ts +13 -0
  119. package/karma-setup.js +7 -0
  120. package/karma.config.js +1 -1
  121. package/package.json +10 -11
  122. package/proto.sh +2 -2
  123. package/protos/NetworkRpc.proto +9 -4
  124. package/src/NetworkNode.ts +12 -9
  125. package/src/NetworkStack.ts +10 -10
  126. package/src/exports.ts +5 -3
  127. package/src/logic/ContentDeliveryLayerNode.ts +35 -11
  128. package/src/logic/ContentDeliveryManager.ts +41 -13
  129. package/src/logic/ContentDeliveryRpcLocal.ts +6 -6
  130. package/src/logic/ContentDeliveryRpcRemote.ts +12 -2
  131. package/src/logic/ControlLayerNode.ts +1 -1
  132. package/src/logic/DiscoveryLayerNode.ts +3 -3
  133. package/src/logic/DuplicateMessageDetector.ts +4 -4
  134. package/src/logic/ExternalNetworkRpc.ts +0 -1
  135. package/src/logic/NodeList.ts +4 -3
  136. package/src/logic/PeerDescriptorStoreManager.ts +1 -2
  137. package/src/logic/StreamPartNetworkSplitAvoidance.ts +5 -4
  138. package/src/logic/createContentDeliveryLayerNode.ts +3 -3
  139. package/src/logic/inspect/InspectSession.ts +5 -4
  140. package/src/logic/inspect/Inspector.ts +6 -6
  141. package/src/logic/neighbor-discovery/HandshakeRpcLocal.ts +13 -13
  142. package/src/logic/neighbor-discovery/HandshakeRpcRemote.ts +8 -8
  143. package/src/logic/neighbor-discovery/Handshaker.ts +15 -15
  144. package/src/logic/neighbor-discovery/NeighborFinder.ts +6 -1
  145. package/src/logic/neighbor-discovery/NeighborUpdateManager.ts +6 -4
  146. package/src/logic/neighbor-discovery/NeighborUpdateRpcLocal.ts +7 -7
  147. package/src/logic/neighbor-discovery/NeighborUpdateRpcRemote.ts +4 -4
  148. package/src/logic/node-info/NodeInfoClient.ts +2 -2
  149. package/src/logic/node-info/NodeInfoRpcLocal.ts +2 -2
  150. package/src/logic/node-info/NodeInfoRpcRemote.ts +2 -2
  151. package/src/logic/propagation/Propagation.ts +1 -2
  152. package/src/logic/propagation/PropagationTaskStore.ts +1 -1
  153. package/src/logic/proxy/ProxyClient.ts +17 -12
  154. package/src/logic/proxy/ProxyConnectionRpcLocal.ts +10 -10
  155. package/src/logic/proxy/ProxyConnectionRpcRemote.ts +5 -5
  156. package/src/logic/temporary-connection/TemporaryConnectionRpcLocal.ts +9 -9
  157. package/src/logic/temporary-connection/TemporaryConnectionRpcRemote.ts +4 -4
  158. package/src/logic/utils.ts +4 -4
  159. package/src/types.ts +13 -0
  160. package/test/benchmark/first-message.ts +6 -5
  161. package/test/end-to-end/content-delivery-layer-node-with-real-connections.test.ts +11 -6
  162. package/test/end-to-end/external-network-rpc.test.ts +2 -2
  163. package/test/end-to-end/inspect.test.ts +5 -5
  164. package/test/end-to-end/proxy-and-full-node.test.ts +6 -6
  165. package/test/end-to-end/proxy-connections.test.ts +12 -14
  166. package/test/end-to-end/proxy-key-exchange.test.ts +11 -9
  167. package/test/end-to-end/webrtc-full-node-network.test.ts +7 -9
  168. package/test/end-to-end/websocket-full-node-network.test.ts +8 -10
  169. package/test/integration/ContentDeliveryLayerNode-Layer1Node-Latencies.test.ts +11 -11
  170. package/test/integration/ContentDeliveryLayerNode-Layer1Node.test.ts +10 -10
  171. package/test/integration/ContentDeliveryManager.test.ts +49 -25
  172. package/test/integration/ContentDeliveryRpcRemote.test.ts +8 -8
  173. package/test/integration/HandshakeRpcRemote.test.ts +2 -2
  174. package/test/integration/Handshakes.test.ts +21 -56
  175. package/test/integration/Inspect.test.ts +2 -2
  176. package/test/integration/NeighborUpdateRpcRemote.test.ts +2 -2
  177. package/test/integration/NetworkNode.test.ts +5 -4
  178. package/test/integration/NetworkRpc.test.ts +10 -10
  179. package/test/integration/NetworkStack.test.ts +4 -4
  180. package/test/integration/NodeInfoRpc.test.ts +9 -5
  181. package/test/integration/Propagation.test.ts +6 -6
  182. package/test/integration/joining-streams-on-offline-peers.test.ts +5 -5
  183. package/test/integration/stream-without-default-entrypoints.test.ts +8 -7
  184. package/test/integration/streamEntryPointReplacing.test.ts +5 -5
  185. package/test/types/global.d.ts +1 -0
  186. package/test/unit/ContentDeliveryLayerNode.test.ts +26 -14
  187. package/test/unit/ContentDeliveryManager.test.ts +10 -9
  188. package/test/unit/ContentDeliveryRpcLocal.test.ts +3 -3
  189. package/test/unit/DuplicateMessageDetector.test.ts +10 -10
  190. package/test/unit/ExternalNetworkRpc.test.ts +3 -3
  191. package/test/unit/HandshakeRpcLocal.test.ts +8 -21
  192. package/test/unit/Handshaker.test.ts +2 -2
  193. package/test/unit/InspectSession.test.ts +7 -4
  194. package/test/unit/Inspector.test.ts +5 -5
  195. package/test/unit/NeighborFinder.test.ts +5 -5
  196. package/test/unit/NeighborUpdateRpcLocal.test.ts +6 -6
  197. package/test/unit/NetworkNode.test.ts +5 -5
  198. package/test/unit/NodeList.test.ts +23 -23
  199. package/test/unit/PeerDescriptorStoreManager.test.ts +4 -4
  200. package/test/unit/Propagation.test.ts +8 -7
  201. package/test/unit/ProxyConnectionRpcRemote.test.ts +5 -5
  202. package/test/unit/StreamPartReconnect.test.ts +2 -2
  203. package/test/unit/TemporaryConnectionRpcLocal.test.ts +3 -3
  204. package/test/utils/mock/MockControlLayerNode.ts +5 -0
  205. package/test/utils/mock/MockNeighborUpdateManager.ts +1 -1
  206. package/test/utils/mock/MockTransport.ts +11 -0
  207. package/test/utils/utils.ts +10 -9
  208. package/tsconfig.browser.json +1 -0
  209. package/tsconfig.jest.json +2 -1
  210. package/tsconfig.json +3 -0
  211. package/tsconfig.node.json +1 -0
  212. package/.eslintignore +0 -7
  213. package/.eslintrc +0 -3
  214. package/dist/src/proto/google/protobuf/any.js.map +0 -1
  215. package/dist/src/proto/google/protobuf/empty.js.map +0 -1
  216. package/dist/src/proto/google/protobuf/timestamp.js.map +0 -1
  217. package/dist/src/proto/packages/dht/protos/DhtRpc.client.js.map +0 -1
  218. package/dist/src/proto/packages/dht/protos/DhtRpc.js.map +0 -1
  219. package/dist/src/proto/packages/dht/protos/DhtRpc.server.js.map +0 -1
  220. package/dist/src/proto/packages/proto-rpc/protos/ProtoRpc.js.map +0 -1
  221. package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.client.js.map +0 -1
  222. package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.js.map +0 -1
  223. package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.server.js.map +0 -1
  224. package/jest.config.js +0 -5
  225. package/src/proto/google/protobuf/any.ts +0 -319
  226. package/src/proto/google/protobuf/empty.ts +0 -82
  227. package/src/proto/google/protobuf/timestamp.ts +0 -281
  228. package/src/proto/packages/dht/protos/DhtRpc.client.ts +0 -407
  229. package/src/proto/packages/dht/protos/DhtRpc.server.ts +0 -160
  230. package/src/proto/packages/dht/protos/DhtRpc.ts +0 -1244
  231. package/src/proto/packages/proto-rpc/protos/ProtoRpc.ts +0 -108
  232. package/src/proto/packages/trackerless-network/protos/NetworkRpc.client.ts +0 -218
  233. package/src/proto/packages/trackerless-network/protos/NetworkRpc.server.ts +0 -85
  234. package/src/proto/packages/trackerless-network/protos/NetworkRpc.ts +0 -752
  235. /package/dist/{src/proto → generated}/google/protobuf/any.js +0 -0
  236. /package/dist/{src/proto → generated}/google/protobuf/empty.js +0 -0
  237. /package/dist/{src/proto → generated}/google/protobuf/timestamp.js +0 -0
  238. /package/dist/{src/proto → generated}/packages/dht/protos/DhtRpc.server.js +0 -0
  239. /package/dist/{src/proto → generated}/packages/proto-rpc/protos/ProtoRpc.d.ts +0 -0
  240. /package/dist/{src/proto → generated}/packages/proto-rpc/protos/ProtoRpc.js +0 -0
  241. /package/dist/{src/proto → generated}/packages/trackerless-network/protos/NetworkRpc.client.d.ts +0 -0
  242. /package/dist/{src/proto → generated}/packages/trackerless-network/protos/NetworkRpc.client.js +0 -0
  243. /package/dist/{src/proto → generated}/packages/trackerless-network/protos/NetworkRpc.server.d.ts +0 -0
  244. /package/dist/{src/proto → generated}/packages/trackerless-network/protos/NetworkRpc.server.js +0 -0
package/src/exports.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  export { NetworkNode, createNetworkNode } from './NetworkNode'
2
- export { NetworkOptions, NetworkStack, NodeInfo } from './NetworkStack'
2
+ export { NetworkOptions, NetworkStack } from './NetworkStack'
3
3
  export { ContentDeliveryManagerOptions, streamPartIdToDataKey } from './logic/ContentDeliveryManager'
4
4
  export {
5
5
  ContentType,
@@ -11,6 +11,8 @@ export {
11
11
  MessageRef,
12
12
  ProxyDirection,
13
13
  SignatureType,
14
- StreamMessage
15
- } from './proto/packages/trackerless-network/protos/NetworkRpc'
14
+ StreamMessage,
15
+ ControlLayerInfo
16
+ } from '../generated/packages/trackerless-network/protos/NetworkRpc'
16
17
  export { ExternalRpcClient, ExternalRpcClientClass } from './logic/ExternalNetworkRpc'
18
+ export { NodeInfo, StreamPartitionInfo, ContentDeliveryLayerNeighborInfo } from './types'
@@ -4,7 +4,7 @@ import {
4
4
  ITransport,
5
5
  ListeningRpcCommunicator,
6
6
  PeerDescriptor,
7
- getNodeIdFromPeerDescriptor,
7
+ toNodeId,
8
8
  } from '@streamr/dht'
9
9
  import { Logger, StreamPartID, addManagedEventListener } from '@streamr/utils'
10
10
  import { EventEmitter } from 'eventemitter3'
@@ -16,8 +16,8 @@ import {
16
16
  StreamMessage,
17
17
  TemporaryConnectionRequest,
18
18
  TemporaryConnectionResponse,
19
- } from '../proto/packages/trackerless-network/protos/NetworkRpc'
20
- import { ContentDeliveryRpcClient } from '../proto/packages/trackerless-network/protos/NetworkRpc.client'
19
+ } from '../../generated/packages/trackerless-network/protos/NetworkRpc'
20
+ import { ContentDeliveryRpcClient } from '../../generated/packages/trackerless-network/protos/NetworkRpc.client'
21
21
  import { ContentDeliveryRpcLocal } from './ContentDeliveryRpcLocal'
22
22
  import { ContentDeliveryRpcRemote } from './ContentDeliveryRpcRemote'
23
23
  import { DiscoveryLayerNode } from './DiscoveryLayerNode'
@@ -31,6 +31,7 @@ import { Propagation } from './propagation/Propagation'
31
31
  import { ProxyConnectionRpcLocal } from './proxy/ProxyConnectionRpcLocal'
32
32
  import { TemporaryConnectionRpcLocal } from './temporary-connection/TemporaryConnectionRpcLocal'
33
33
  import { markAndCheckDuplicate } from './utils'
34
+ import { ContentDeliveryLayerNeighborInfo } from '../types'
34
35
 
35
36
  export interface Events {
36
37
  message: (message: StreamMessage) => void
@@ -75,6 +76,7 @@ export class ContentDeliveryLayerNode extends EventEmitter<Events> {
75
76
  private options: StrictContentDeliveryLayerNodeOptions
76
77
  private readonly contentDeliveryRpcLocal: ContentDeliveryRpcLocal
77
78
  private abortController: AbortController = new AbortController()
79
+ private messagesPropagated = 0
78
80
 
79
81
  constructor(options: StrictContentDeliveryLayerNodeOptions) {
80
82
  super()
@@ -91,9 +93,9 @@ export class ContentDeliveryLayerNode extends EventEmitter<Events> {
91
93
  return
92
94
  }
93
95
  const contact = this.options.nearbyNodeView.get(remoteNodeId)
94
- || this.options.randomNodeView.get(remoteNodeId)
95
- || this.options.neighbors.get(remoteNodeId)
96
- || this.options.proxyConnectionRpcLocal?.getConnection(remoteNodeId)?.remote
96
+ ?? this.options.randomNodeView.get(remoteNodeId)
97
+ ?? this.options.neighbors.get(remoteNodeId)
98
+ ?? this.options.proxyConnectionRpcLocal?.getConnection(remoteNodeId)?.remote
97
99
  // TODO: check integrity of notifier?
98
100
  if (contact) {
99
101
  this.options.discoveryLayerNode.removeContact(remoteNodeId)
@@ -164,7 +166,7 @@ export class ContentDeliveryLayerNode extends EventEmitter<Events> {
164
166
  (id, remote) => {
165
167
  this.options.propagation.onNeighborJoined(id)
166
168
  this.options.connectionLocker.weakLockConnection(
167
- getNodeIdFromPeerDescriptor(remote.getPeerDescriptor()),
169
+ toNodeId(remote.getPeerDescriptor()),
168
170
  this.options.streamPartId
169
171
  )
170
172
  this.emit('neighborConnected', id)
@@ -176,7 +178,7 @@ export class ContentDeliveryLayerNode extends EventEmitter<Events> {
176
178
  'nodeRemoved',
177
179
  (_id, remote) => {
178
180
  this.options.connectionLocker.weakUnlockConnection(
179
- getNodeIdFromPeerDescriptor(remote.getPeerDescriptor()),
181
+ toNodeId(remote.getPeerDescriptor()),
180
182
  this.options.streamPartId
181
183
  )
182
184
  },
@@ -315,7 +317,7 @@ export class ContentDeliveryLayerNode extends EventEmitter<Events> {
315
317
  }
316
318
 
317
319
  private onNodeDisconnected(peerDescriptor: PeerDescriptor): void {
318
- const nodeId = getNodeIdFromPeerDescriptor(peerDescriptor)
320
+ const nodeId = toNodeId(peerDescriptor)
319
321
  if (this.options.neighbors.has(nodeId)) {
320
322
  this.options.neighbors.remove(nodeId)
321
323
  this.options.neighborFinder.start([nodeId])
@@ -339,7 +341,7 @@ export class ContentDeliveryLayerNode extends EventEmitter<Events> {
339
341
  this.options.neighbors.getAll().map((remote) => {
340
342
  remote.leaveStreamPartNotice(this.options.streamPartId, this.options.isLocalNodeEntryPoint())
341
343
  this.options.connectionLocker.weakUnlockConnection(
342
- getNodeIdFromPeerDescriptor(remote.getPeerDescriptor()),
344
+ toNodeId(remote.getPeerDescriptor()),
343
345
  this.options.streamPartId
344
346
  )
345
347
  })
@@ -360,6 +362,7 @@ export class ContentDeliveryLayerNode extends EventEmitter<Events> {
360
362
  this.emit('message', msg)
361
363
  const skipBackPropagation = previousNode !== undefined && !this.options.temporaryConnectionRpcLocal.hasNode(previousNode)
362
364
  this.options.propagation.feedUnseenMessage(msg, this.getPropagationTargets(msg), skipBackPropagation ? previousNode : null)
365
+ this.messagesPropagated += 1
363
366
  }
364
367
 
365
368
  inspect(peerDescriptor: PeerDescriptor): Promise<boolean> {
@@ -376,7 +379,7 @@ export class ContentDeliveryLayerNode extends EventEmitter<Events> {
376
379
  }
377
380
 
378
381
  getOwnNodeId(): DhtAddress {
379
- return getNodeIdFromPeerDescriptor(this.options.localPeerDescriptor)
382
+ return toNodeId(this.options.localPeerDescriptor)
380
383
  }
381
384
 
382
385
  getOutgoingHandshakeCount(): number {
@@ -390,11 +393,32 @@ export class ContentDeliveryLayerNode extends EventEmitter<Events> {
390
393
  return this.options.neighbors.getAll().map((n) => n.getPeerDescriptor())
391
394
  }
392
395
 
396
+ getInfos(): ContentDeliveryLayerNeighborInfo[] {
397
+ return this.options.neighbors.getAll().map((n) => {
398
+ return {
399
+ peerDescriptor: n.getPeerDescriptor(),
400
+ rtt: n.getRtt()
401
+ }
402
+ })
403
+ }
404
+
393
405
  getNearbyNodeView(): NodeList {
394
406
  return this.options.nearbyNodeView
395
407
  }
396
408
 
409
+ public getDiagnosticInfo(): Record<string, unknown> {
410
+ return {
411
+ neighborCount: this.options.neighbors.size(),
412
+ nearbyNodeViewCount: this.options.nearbyNodeView.size(),
413
+ randomNodeViewCount: this.options.randomNodeView.size(),
414
+ leftNodeViewCount: this.options.leftNodeView.size(),
415
+ rightNodeViewCount: this.options.rightNodeView.size(),
416
+ messagesPropagated: this.messagesPropagated
417
+ }
418
+ }
419
+
397
420
  private isStopped() {
398
421
  return this.abortController.signal.aborted
399
422
  }
423
+
400
424
  }
@@ -5,21 +5,22 @@ import {
5
5
  EXISTING_CONNECTION_TIMEOUT,
6
6
  ITransport,
7
7
  PeerDescriptor,
8
- getDhtAddressFromRaw,
9
- getNodeIdFromPeerDescriptor
8
+ toDhtAddress,
9
+ toNodeId
10
10
  } from '@streamr/dht'
11
11
  import {
12
- EthereumAddress,
13
12
  Logger,
14
13
  Metric,
15
14
  MetricsContext,
16
15
  MetricsDefinition,
17
- RateMetric, StreamID, StreamPartID, StreamPartIDUtils, toStreamPartID
16
+ RateMetric, StreamID, StreamPartID, StreamPartIDUtils,
17
+ UserID,
18
+ toStreamPartID
18
19
  } from '@streamr/utils'
19
20
  import { createHash } from 'crypto'
20
21
  import { EventEmitter } from 'eventemitter3'
21
22
  import { sampleSize } from 'lodash'
22
- import { ProxyDirection, StreamMessage, StreamPartitionInfo } from '../proto/packages/trackerless-network/protos/NetworkRpc'
23
+ import { ProxyDirection, StreamMessage } from '../../generated/packages/trackerless-network/protos/NetworkRpc'
23
24
  import { ContentDeliveryLayerNode } from './ContentDeliveryLayerNode'
24
25
  import { ControlLayerNode } from './ControlLayerNode'
25
26
  import { DiscoveryLayerNode } from './DiscoveryLayerNode'
@@ -28,6 +29,8 @@ import { MIN_NEIGHBOR_COUNT as NETWORK_SPLIT_AVOIDANCE_MIN_NEIGHBOR_COUNT, Strea
28
29
  import { StreamPartReconnect } from './StreamPartReconnect'
29
30
  import { createContentDeliveryLayerNode } from './createContentDeliveryLayerNode'
30
31
  import { ProxyClient } from './proxy/ProxyClient'
32
+ import { ConnectionManager } from '@streamr/dht/src/exports'
33
+ import { StreamPartitionInfo } from '../types'
31
34
 
32
35
  export type StreamPartDelivery = {
33
36
  broadcast: (msg: StreamMessage) => void
@@ -37,9 +40,11 @@ export type StreamPartDelivery = {
37
40
  discoveryLayerNode: DiscoveryLayerNode
38
41
  node: ContentDeliveryLayerNode
39
42
  networkSplitAvoidance: StreamPartNetworkSplitAvoidance
43
+ getDiagnosticInfo: () => Record<string, unknown>
40
44
  } | {
41
45
  proxied: true
42
46
  client: ProxyClient
47
+ getDiagnosticInfo: () => Record<string, unknown>
43
48
  })
44
49
 
45
50
  export interface Events {
@@ -59,10 +64,11 @@ export interface ContentDeliveryManagerOptions {
59
64
  streamPartitionMinPropagationTargets?: number
60
65
  acceptProxyConnections?: boolean
61
66
  rpcRequestTimeout?: number
67
+ neighborUpdateInterval?: number
62
68
  }
63
69
 
64
70
  export const streamPartIdToDataKey = (streamPartId: StreamPartID): DhtAddress => {
65
- return getDhtAddressFromRaw(new Uint8Array((createHash('sha1').update(streamPartId).digest())))
71
+ return toDhtAddress(new Uint8Array((createHash('sha1').update(streamPartId).digest())))
66
72
  }
67
73
 
68
74
  export class ContentDeliveryManager extends EventEmitter<Events> {
@@ -169,7 +175,8 @@ export class ContentDeliveryManager extends EventEmitter<Events> {
169
175
  await peerDescriptorStoreManager.destroy()
170
176
  node.stop()
171
177
  await discoveryLayerNode.stop()
172
- }
178
+ },
179
+ getDiagnosticInfo: () => node.getDiagnosticInfo()
173
180
  }
174
181
  this.streamParts.set(streamPartId, streamPart)
175
182
  node.on('message', (message: StreamMessage) => {
@@ -207,6 +214,9 @@ export class ContentDeliveryManager extends EventEmitter<Events> {
207
214
  // leaveStreamPart has been called (or leaveStreamPart called, and then setProxies called)
208
215
  return
209
216
  }
217
+ if ((this.transport! as ConnectionManager).isPrivateClientMode()) {
218
+ await (this.transport! as ConnectionManager).disablePrivateClientMode()
219
+ }
210
220
  await streamPart.discoveryLayerNode.start()
211
221
  await streamPart.node.start()
212
222
  const knownEntryPoints = this.knownStreamPartEntryPoints.get(streamPartId)
@@ -241,7 +251,8 @@ export class ContentDeliveryManager extends EventEmitter<Events> {
241
251
  rpcRequestTimeout: EXISTING_CONNECTION_TIMEOUT,
242
252
  dhtJoinTimeout: 20000, // TODO use options option or named constant?
243
253
  periodicallyPingNeighbors: true,
244
- periodicallyPingRingContacts: true
254
+ periodicallyPingRingContacts: true,
255
+ neighborPingLimit: 16
245
256
  })
246
257
  }
247
258
 
@@ -260,6 +271,7 @@ export class ContentDeliveryManager extends EventEmitter<Events> {
260
271
  neighborTargetCount: this.options.streamPartitionNeighborTargetCount,
261
272
  acceptProxyConnections: this.options.acceptProxyConnections,
262
273
  rpcRequestTimeout: this.options.rpcRequestTimeout,
274
+ neighborUpdateInterval: this.options.neighborUpdateInterval,
263
275
  isLocalNodeEntryPoint
264
276
  })
265
277
  }
@@ -268,7 +280,7 @@ export class ContentDeliveryManager extends EventEmitter<Events> {
268
280
  streamPartId: StreamPartID,
269
281
  nodes: PeerDescriptor[],
270
282
  direction: ProxyDirection,
271
- userId: EthereumAddress,
283
+ userId: UserID,
272
284
  connectionCount?: number
273
285
  ): Promise<void> {
274
286
  // TODO explicit default value for "acceptProxyConnections" or make it required
@@ -287,11 +299,15 @@ export class ContentDeliveryManager extends EventEmitter<Events> {
287
299
  proxied: true,
288
300
  client,
289
301
  broadcast: (msg: StreamMessage) => client.broadcast(msg),
290
- stop: async () => client.stop()
302
+ stop: async () => client.stop(),
303
+ getDiagnosticInfo: () => client.getDiagnosticInfo()
291
304
  })
292
305
  client.on('message', (message: StreamMessage) => {
293
306
  this.emit('newMessage', message)
294
307
  })
308
+ if (Array.from(this.streamParts.values()).every((streamPart) => streamPart.proxied)) {
309
+ await (this.transport! as ConnectionManager).enablePrivateClientMode()
310
+ }
295
311
  await client.start()
296
312
  }
297
313
  await client.setProxies(nodes, direction, userId, connectionCount)
@@ -327,7 +343,8 @@ export class ContentDeliveryManager extends EventEmitter<Events> {
327
343
  return {
328
344
  id: streamPartId,
329
345
  controlLayerNeighbors: stream.discoveryLayerNode.getNeighbors(),
330
- contentDeliveryLayerNeighbors: stream.node.getNeighbors()
346
+ deprecatedContentDeliveryLayerNeighbors: [],
347
+ contentDeliveryLayerNeighbors: stream.node.getInfos()
331
348
  }
332
349
  })
333
350
 
@@ -357,17 +374,28 @@ export class ContentDeliveryManager extends EventEmitter<Events> {
357
374
  }
358
375
 
359
376
  getNodeId(): DhtAddress {
360
- return getNodeIdFromPeerDescriptor(this.controlLayerNode!.getLocalPeerDescriptor())
377
+ return toNodeId(this.controlLayerNode!.getLocalPeerDescriptor())
361
378
  }
362
379
 
363
380
  getNeighbors(streamPartId: StreamPartID): DhtAddress[] {
364
381
  const streamPart = this.streamParts.get(streamPartId)
365
382
  return (streamPart !== undefined) && (streamPart.proxied === false)
366
- ? streamPart.node.getNeighbors().map((n) => getNodeIdFromPeerDescriptor(n))
383
+ ? streamPart.node.getNeighbors().map((n) => toNodeId(n))
367
384
  : []
368
385
  }
369
386
 
370
387
  getStreamParts(): StreamPartID[] {
371
388
  return Array.from(this.streamParts.keys()).map((id) => StreamPartIDUtils.parse(id))
372
389
  }
390
+
391
+ getDiagnosticInfo(): Record<string, unknown> {
392
+ return {
393
+ streamParts: this.getStreamParts().map((id) => {
394
+ return {
395
+ id,
396
+ info: this.getStreamPartDelivery(id)!.getDiagnosticInfo()
397
+ }
398
+ })
399
+ }
400
+ }
373
401
  }
@@ -1,14 +1,14 @@
1
1
  import { ServerCallContext } from '@protobuf-ts/runtime-rpc'
2
- import { DhtAddress, DhtCallContext, ListeningRpcCommunicator, PeerDescriptor, getNodeIdFromPeerDescriptor } from '@streamr/dht'
2
+ import { DhtAddress, DhtCallContext, ListeningRpcCommunicator, PeerDescriptor, toNodeId } from '@streamr/dht'
3
3
  import { StreamPartID } from '@streamr/utils'
4
- import { Empty } from '../proto/google/protobuf/empty'
4
+ import { Empty } from '../../generated/google/protobuf/empty'
5
5
  import {
6
6
  LeaveStreamPartNotice,
7
7
  MessageID,
8
8
  MessageRef,
9
9
  StreamMessage
10
- } from '../proto/packages/trackerless-network/protos/NetworkRpc'
11
- import { IContentDeliveryRpc } from '../proto/packages/trackerless-network/protos/NetworkRpc.server'
10
+ } from '../../generated/packages/trackerless-network/protos/NetworkRpc'
11
+ import { IContentDeliveryRpc } from '../../generated/packages/trackerless-network/protos/NetworkRpc.server'
12
12
 
13
13
  export interface ContentDeliveryRpcLocalOptions {
14
14
  localPeerDescriptor: PeerDescriptor
@@ -29,7 +29,7 @@ export class ContentDeliveryRpcLocal implements IContentDeliveryRpc {
29
29
  }
30
30
 
31
31
  async sendStreamMessage(message: StreamMessage, context: ServerCallContext): Promise<Empty> {
32
- const previousNode = getNodeIdFromPeerDescriptor((context as DhtCallContext).incomingSourceDescriptor!)
32
+ const previousNode = toNodeId((context as DhtCallContext).incomingSourceDescriptor!)
33
33
  this.options.markForInspection(previousNode, message.messageId!)
34
34
  if (this.options.markAndCheckDuplicate(message.messageId!, message.previousMessageRef)) {
35
35
  this.options.broadcast(message, previousNode)
@@ -40,7 +40,7 @@ export class ContentDeliveryRpcLocal implements IContentDeliveryRpc {
40
40
  async leaveStreamPartNotice(message: LeaveStreamPartNotice, context: ServerCallContext): Promise<Empty> {
41
41
  if (message.streamPartId === this.options.streamPartId) {
42
42
  const sourcePeerDescriptor = (context as DhtCallContext).incomingSourceDescriptor!
43
- const remoteNodeId = getNodeIdFromPeerDescriptor(sourcePeerDescriptor)
43
+ const remoteNodeId = toNodeId(sourcePeerDescriptor)
44
44
  this.options.onLeaveNotice(remoteNodeId, message.isEntryPoint)
45
45
  }
46
46
  return Empty
@@ -3,13 +3,15 @@ import { Logger, StreamPartID } from '@streamr/utils'
3
3
  import {
4
4
  LeaveStreamPartNotice,
5
5
  StreamMessage
6
- } from '../proto/packages/trackerless-network/protos/NetworkRpc'
7
- import { ContentDeliveryRpcClient } from '../proto/packages/trackerless-network/protos/NetworkRpc.client'
6
+ } from '../../generated/packages/trackerless-network/protos/NetworkRpc'
7
+ import { ContentDeliveryRpcClient } from '../../generated/packages/trackerless-network/protos/NetworkRpc.client'
8
8
 
9
9
  const logger = new Logger(module)
10
10
 
11
11
  export class ContentDeliveryRpcRemote extends RpcRemote<ContentDeliveryRpcClient> {
12
12
 
13
+ private rtt?: number
14
+
13
15
  async sendStreamMessage(msg: StreamMessage): Promise<void> {
14
16
  const options = this.formDhtRpcOptions({
15
17
  notification: true
@@ -31,4 +33,12 @@ export class ContentDeliveryRpcRemote extends RpcRemote<ContentDeliveryRpcClient
31
33
  logger.debug('Failed to send leaveStreamPartNotice')
32
34
  })
33
35
  }
36
+
37
+ setRtt(rtt: number): void {
38
+ this.rtt = rtt
39
+ }
40
+
41
+ getRtt(): number | undefined {
42
+ return this.rtt
43
+ }
34
44
  }
@@ -1,5 +1,5 @@
1
1
  import { ConnectionsView, DataEntry, DhtAddress, ITransport, PeerDescriptor } from '@streamr/dht'
2
- import { Any } from '../proto/google/protobuf/any'
2
+ import { Any } from '../../generated/google/protobuf/any'
3
3
 
4
4
  export interface ControlLayerNode extends ITransport {
5
5
  joinDht(entryPointDescriptors: PeerDescriptor[]): Promise<void>
@@ -12,11 +12,11 @@ export interface DiscoveryLayerNodeEvents {
12
12
 
13
13
  export interface DiscoveryLayerNode {
14
14
  on<T extends keyof DiscoveryLayerNodeEvents>(eventName: T, listener: (peerDescriptor: PeerDescriptor) => void): void
15
- once<T extends keyof DiscoveryLayerNodeEvents>(eventName: T, listener: (peerDescriptor: PeerDescriptor) => void): void
16
- off<T extends keyof DiscoveryLayerNodeEvents>(eventName: T, listener: (peerDescriptor: PeerDescriptor) => void): void
17
15
  on<T extends keyof DiscoveryLayerNodeEvents>(eventName: T, listener: () => void): void
18
- once<T extends keyof DiscoveryLayerNodeEvents>(eventName: T, listener: () => void): void
16
+ off<T extends keyof DiscoveryLayerNodeEvents>(eventName: T, listener: (peerDescriptor: PeerDescriptor) => void): void
19
17
  off<T extends keyof DiscoveryLayerNodeEvents>(eventName: T, listener: () => void): void
18
+ once<T extends keyof DiscoveryLayerNodeEvents>(eventName: T, listener: (peerDescriptor: PeerDescriptor) => void): void
19
+ once<T extends keyof DiscoveryLayerNodeEvents>(eventName: T, listener: () => void): void
20
20
  removeContact: (nodeId: DhtAddress) => void
21
21
  getClosestContacts: (maxCount?: number) => PeerDescriptor[]
22
22
  getRandomContacts: (maxCount?: number) => PeerDescriptor[]
@@ -54,7 +54,7 @@ export class InvalidNumberingError extends Error {
54
54
  export class GapMisMatchError extends Error {
55
55
  constructor(state: string, previousNumber: NumberPair, number: NumberPair) {
56
56
  super('pre-condition: gap overlap in given numbers:'
57
- + ` previousNumber=${previousNumber}, number=${number}, state=${state}`)
57
+ + ` previousNumber=${previousNumber.toString()}, number=${number.toString()}, state=${state}`)
58
58
  }
59
59
  }
60
60
 
@@ -83,7 +83,7 @@ export class GapMisMatchError extends Error {
83
83
  */
84
84
  export class DuplicateMessageDetector {
85
85
  private readonly maxGapCount: number
86
- private readonly gaps: Array<[NumberPair, NumberPair]>
86
+ private readonly gaps: [NumberPair, NumberPair][]
87
87
 
88
88
  constructor(maxGapCount = 10000) {
89
89
  this.maxGapCount = maxGapCount
@@ -94,7 +94,7 @@ export class DuplicateMessageDetector {
94
94
  * returns true if number has not yet been seen (i.e. is not a duplicate)
95
95
  */
96
96
  markAndCheck(previousNumber: NumberPair | null, number: NumberPair): boolean | never {
97
- if (previousNumber && previousNumber.greaterThanOrEqual(number)) {
97
+ if (previousNumber?.greaterThanOrEqual(number)) {
98
98
  throw new InvalidNumberingError()
99
99
  }
100
100
 
@@ -162,6 +162,6 @@ export class DuplicateMessageDetector {
162
162
  }
163
163
 
164
164
  toString(): string {
165
- return this.gaps.map(([lower, upper]) => `(${lower}, ${upper}]`).join(', ')
165
+ return this.gaps.map(([lower, upper]) => `(${lower.toString()}, ${upper.toString()}]`).join(', ')
166
166
  }
167
167
  }
@@ -5,7 +5,6 @@ import { ClassType, ClientTransport, ProtoRpcClient, toProtoRpcClient } from '@s
5
5
 
6
6
  export const SERVICE_ID = 'external-network-service'
7
7
 
8
- // eslint-disable-next-line @typescript-eslint/consistent-type-definitions
9
8
  export type ExternalRpcClient = ServiceInfo & ClassType
10
9
  // eslint-disable-next-line @typescript-eslint/prefer-function-type, @typescript-eslint/consistent-type-definitions
11
10
  export type ExternalRpcClientClass<T extends ExternalRpcClient> = { new (clientTransport: ClientTransport): T }
@@ -1,4 +1,4 @@
1
- import { DhtAddress, getNodeIdFromPeerDescriptor } from '@streamr/dht'
1
+ import { DhtAddress, toNodeId } from '@streamr/dht'
2
2
  import { sample } from 'lodash'
3
3
  import { ContentDeliveryRpcRemote } from './ContentDeliveryRpcRemote'
4
4
  import { EventEmitter } from 'eventemitter3'
@@ -36,7 +36,7 @@ export class NodeList extends EventEmitter<Events> {
36
36
  }
37
37
 
38
38
  add(remote: ContentDeliveryRpcRemote): void {
39
- const nodeId = getNodeIdFromPeerDescriptor(remote.getPeerDescriptor())
39
+ const nodeId = toNodeId(remote.getPeerDescriptor())
40
40
  if ((this.ownId !== nodeId) && (this.nodes.size < this.limit)) {
41
41
  const isExistingNode = this.nodes.has(nodeId)
42
42
  this.nodes.set(nodeId, remote)
@@ -107,7 +107,8 @@ export class NodeList extends EventEmitter<Events> {
107
107
  }
108
108
 
109
109
  stop(): void {
110
- this.nodes.forEach((node) => this.remove(getNodeIdFromPeerDescriptor(node.getPeerDescriptor())))
110
+ this.nodes.forEach((node) => this.remove(toNodeId(node.getPeerDescriptor())))
111
111
  this.removeAllListeners()
112
112
  }
113
+
113
114
  }
@@ -5,7 +5,7 @@ import {
5
5
  areEqualPeerDescriptors
6
6
  } from '@streamr/dht'
7
7
  import { Logger, scheduleAtInterval } from '@streamr/utils'
8
- import { Any } from '../proto/google/protobuf/any'
8
+ import { Any } from '../../generated/google/protobuf/any'
9
9
 
10
10
  const parsePeerDescriptor = (dataEntries: DataEntry[]): PeerDescriptor[] => {
11
11
  return dataEntries.filter((entry) => !entry.deleted).map((entry) => Any.unpack(entry.data!, PeerDescriptor))
@@ -32,7 +32,6 @@ export class PeerDescriptorStoreManager {
32
32
 
33
33
  private readonly abortController: AbortController
34
34
  private readonly options: PeerDescriptorStoreManagerOptions
35
- // eslint-disable-next-line no-underscore-dangle
36
35
  private isLocalNodeStored_ = false
37
36
 
38
37
  constructor(options: PeerDescriptorStoreManagerOptions) {
@@ -1,4 +1,4 @@
1
- import { areEqualPeerDescriptors, DhtAddress, getNodeIdFromPeerDescriptor, PeerDescriptor } from '@streamr/dht'
1
+ import { areEqualPeerDescriptors, DhtAddress, toNodeId, PeerDescriptor } from '@streamr/dht'
2
2
  import { Logger, wait } from '@streamr/utils'
3
3
  import { DiscoveryLayerNode } from './DiscoveryLayerNode'
4
4
 
@@ -28,11 +28,12 @@ const exponentialRunOff = async (
28
28
  try {
29
29
  await task()
30
30
  } catch {
31
- logger.debug(`${description} failed, retrying in ${delay} ms`)
31
+ logger.trace(`${description} failed, retrying in ${delay} ms`)
32
32
  }
33
33
  try { // Abort controller throws unexpected errors in destroy?
34
34
  await wait(delay, abortSignal)
35
35
  } catch (err) {
36
+ // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
36
37
  logger.trace(`${err}`) // TODO Do we need logging?
37
38
  }
38
39
  }
@@ -62,14 +63,14 @@ export class StreamPartNetworkSplitAvoidance {
62
63
  this.running = true
63
64
  await exponentialRunOff(async () => {
64
65
  const discoveredEntrypoints = await this.options.discoverEntryPoints()
65
- const filteredEntryPoints = discoveredEntrypoints.filter((peer) => !this.excludedNodes.has(getNodeIdFromPeerDescriptor(peer)))
66
+ const filteredEntryPoints = discoveredEntrypoints.filter((peer) => !this.excludedNodes.has(toNodeId(peer)))
66
67
  await this.options.discoveryLayerNode.joinDht(filteredEntryPoints, false, false)
67
68
  if (this.options.discoveryLayerNode.getNeighborCount() < MIN_NEIGHBOR_COUNT) {
68
69
  // Filter out nodes that are not neighbors as those nodes are assumed to be offline
69
70
  const newExcludes = filteredEntryPoints
70
71
  .filter((peer) => !this.options.discoveryLayerNode.getNeighbors()
71
72
  .some((neighbor) => areEqualPeerDescriptors(neighbor, peer)))
72
- .map((peer) => getNodeIdFromPeerDescriptor(peer))
73
+ .map((peer) => toNodeId(peer))
73
74
  newExcludes.forEach((node) => this.excludedNodes.add(node))
74
75
  throw new Error(`Network split is still possible`)
75
76
  }
@@ -1,11 +1,11 @@
1
- import { DhtAddress, ListeningRpcCommunicator, getNodeIdFromPeerDescriptor } from '@streamr/dht'
1
+ import { DhtAddress, ListeningRpcCommunicator, toNodeId } from '@streamr/dht'
2
2
  import { Handshaker } from './neighbor-discovery/Handshaker'
3
3
  import { NeighborFinder } from './neighbor-discovery/NeighborFinder'
4
4
  import { NeighborUpdateManager } from './neighbor-discovery/NeighborUpdateManager'
5
5
  import { StrictContentDeliveryLayerNodeOptions, ContentDeliveryLayerNode } from './ContentDeliveryLayerNode'
6
6
  import { NodeList } from './NodeList'
7
7
  import { Propagation } from './propagation/Propagation'
8
- import { StreamMessage } from '../proto/packages/trackerless-network/protos/NetworkRpc'
8
+ import { StreamMessage } from '../../generated/packages/trackerless-network/protos/NetworkRpc'
9
9
  import type { MarkOptional } from 'ts-essentials'
10
10
  import { ProxyConnectionRpcLocal } from './proxy/ProxyConnectionRpcLocal'
11
11
  import { Inspector } from './inspect/Inspector'
@@ -24,7 +24,7 @@ type ContentDeliveryLayerNodeOptions = MarkOptional<StrictContentDeliveryLayerNo
24
24
  }
25
25
 
26
26
  const createConfigWithDefaults = (options: ContentDeliveryLayerNodeOptions): StrictContentDeliveryLayerNodeOptions => {
27
- const ownNodeId = getNodeIdFromPeerDescriptor(options.localPeerDescriptor)
27
+ const ownNodeId = toNodeId(options.localPeerDescriptor)
28
28
  const rpcCommunicator = options.rpcCommunicator ?? new ListeningRpcCommunicator(
29
29
  formStreamPartContentDeliveryServiceId(options.streamPartId),
30
30
  options.transport
@@ -1,7 +1,7 @@
1
- import { EventEmitter } from 'eventemitter3'
2
- import { MessageID } from '../../proto/packages/trackerless-network/protos/NetworkRpc'
3
- import { binaryToHex } from '@streamr/utils'
4
1
  import { DhtAddress } from '@streamr/dht'
2
+ import { toUserId } from '@streamr/utils'
3
+ import { EventEmitter } from 'eventemitter3'
4
+ import { MessageID } from '../../../generated/packages/trackerless-network/protos/NetworkRpc'
5
5
 
6
6
  export interface Events {
7
7
  done: () => void
@@ -12,8 +12,9 @@ interface InspectSessionOptions {
12
12
  }
13
13
 
14
14
  const createMessageKey = (messageId: MessageID): string => {
15
- return `${binaryToHex(messageId.publisherId)}:${messageId.messageChainId}:${messageId.timestamp}:${messageId.sequenceNumber}`
15
+ return `${toUserId(messageId.publisherId)}:${messageId.messageChainId}:${messageId.timestamp}:${messageId.sequenceNumber}`
16
16
  }
17
+
17
18
  export class InspectSession extends EventEmitter<Events> {
18
19
 
19
20
  // Boolean indicates if the message has been received by the inspected node
@@ -1,7 +1,7 @@
1
- import { ConnectionLocker, DhtAddress, ListeningRpcCommunicator, LockID, PeerDescriptor, getNodeIdFromPeerDescriptor } from '@streamr/dht'
1
+ import { ConnectionLocker, DhtAddress, ListeningRpcCommunicator, LockID, PeerDescriptor, toNodeId } from '@streamr/dht'
2
2
  import { Logger, StreamPartID, waitForEvent3 } from '@streamr/utils'
3
- import { MessageID } from '../../proto/packages/trackerless-network/protos/NetworkRpc'
4
- import { TemporaryConnectionRpcClient } from '../../proto/packages/trackerless-network/protos/NetworkRpc.client'
3
+ import { MessageID } from '../../../generated/packages/trackerless-network/protos/NetworkRpc'
4
+ import { TemporaryConnectionRpcClient } from '../../../generated/packages/trackerless-network/protos/NetworkRpc.client'
5
5
  import { TemporaryConnectionRpcRemote } from '../temporary-connection/TemporaryConnectionRpcRemote'
6
6
  import { InspectSession, Events as InspectSessionEvents } from './InspectSession'
7
7
 
@@ -47,7 +47,7 @@ export class Inspector {
47
47
  TemporaryConnectionRpcClient
48
48
  )
49
49
  await rpcRemote.openConnection()
50
- this.connectionLocker.weakLockConnection(getNodeIdFromPeerDescriptor(peerDescriptor), lockId)
50
+ this.connectionLocker.weakLockConnection(toNodeId(peerDescriptor), lockId)
51
51
  }
52
52
 
53
53
  async defaultCloseInspectConnection(peerDescriptor: PeerDescriptor, lockId: LockID): Promise<void> {
@@ -58,11 +58,11 @@ export class Inspector {
58
58
  TemporaryConnectionRpcClient
59
59
  )
60
60
  await rpcRemote.closeConnection()
61
- this.connectionLocker.weakUnlockConnection(getNodeIdFromPeerDescriptor(peerDescriptor), lockId)
61
+ this.connectionLocker.weakUnlockConnection(toNodeId(peerDescriptor), lockId)
62
62
  }
63
63
 
64
64
  async inspect(peerDescriptor: PeerDescriptor): Promise<boolean> {
65
- const nodeId = getNodeIdFromPeerDescriptor(peerDescriptor)
65
+ const nodeId = toNodeId(peerDescriptor)
66
66
  const session = new InspectSession({
67
67
  inspectedNode: nodeId
68
68
  })