@streamr/trackerless-network 100.0.0-testnet-two.4 → 100.0.0-testnet-three.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (176) hide show
  1. package/dist/src/NetworkNode.d.ts +2 -1
  2. package/dist/src/NetworkNode.js +6 -2
  3. package/dist/src/NetworkNode.js.map +1 -1
  4. package/dist/src/NetworkStack.d.ts +6 -2
  5. package/dist/src/NetworkStack.js +21 -1
  6. package/dist/src/NetworkStack.js.map +1 -1
  7. package/dist/src/exports.d.ts +1 -0
  8. package/dist/src/exports.js +4 -1
  9. package/dist/src/exports.js.map +1 -1
  10. package/dist/src/logic/DeliveryRpcLocal.js +1 -0
  11. package/dist/src/logic/DeliveryRpcLocal.js.map +1 -1
  12. package/dist/src/logic/DuplicateMessageDetector.d.ts +3 -3
  13. package/dist/src/logic/DuplicateMessageDetector.js +10 -6
  14. package/dist/src/logic/DuplicateMessageDetector.js.map +1 -1
  15. package/dist/src/logic/EntryPointDiscovery.js +8 -5
  16. package/dist/src/logic/EntryPointDiscovery.js.map +1 -1
  17. package/dist/src/logic/Layer0Node.d.ts +2 -0
  18. package/dist/src/logic/Layer1Node.d.ts +4 -4
  19. package/dist/src/logic/NodeList.d.ts +6 -8
  20. package/dist/src/logic/NodeList.js +10 -12
  21. package/dist/src/logic/NodeList.js.map +1 -1
  22. package/dist/src/logic/RandomGraphNode.d.ts +5 -5
  23. package/dist/src/logic/RandomGraphNode.js +26 -22
  24. package/dist/src/logic/RandomGraphNode.js.map +1 -1
  25. package/dist/src/logic/StreamrNode.d.ts +3 -2
  26. package/dist/src/logic/StreamrNode.js +25 -6
  27. package/dist/src/logic/StreamrNode.js.map +1 -1
  28. package/dist/src/logic/createRandomGraphNode.d.ts +2 -2
  29. package/dist/src/logic/createRandomGraphNode.js +14 -14
  30. package/dist/src/logic/createRandomGraphNode.js.map +1 -1
  31. package/dist/src/logic/inspect/InspectSession.js +3 -2
  32. package/dist/src/logic/inspect/InspectSession.js.map +1 -1
  33. package/dist/src/logic/inspect/Inspector.d.ts +2 -3
  34. package/dist/src/logic/inspect/Inspector.js +7 -1
  35. package/dist/src/logic/inspect/Inspector.js.map +1 -1
  36. package/dist/src/logic/neighbor-discovery/HandshakeRpcLocal.d.ts +1 -1
  37. package/dist/src/logic/neighbor-discovery/HandshakeRpcLocal.js +18 -17
  38. package/dist/src/logic/neighbor-discovery/HandshakeRpcLocal.js.map +1 -1
  39. package/dist/src/logic/neighbor-discovery/HandshakeRpcRemote.js.map +1 -1
  40. package/dist/src/logic/neighbor-discovery/Handshaker.d.ts +3 -4
  41. package/dist/src/logic/neighbor-discovery/Handshaker.js +29 -27
  42. package/dist/src/logic/neighbor-discovery/Handshaker.js.map +1 -1
  43. package/dist/src/logic/neighbor-discovery/NeighborFinder.d.ts +1 -1
  44. package/dist/src/logic/neighbor-discovery/NeighborFinder.js +4 -2
  45. package/dist/src/logic/neighbor-discovery/NeighborFinder.js.map +1 -1
  46. package/dist/src/logic/neighbor-discovery/NeighborUpdateManager.d.ts +1 -1
  47. package/dist/src/logic/neighbor-discovery/NeighborUpdateManager.js +8 -4
  48. package/dist/src/logic/neighbor-discovery/NeighborUpdateManager.js.map +1 -1
  49. package/dist/src/logic/neighbor-discovery/NeighborUpdateRpcLocal.d.ts +1 -1
  50. package/dist/src/logic/neighbor-discovery/NeighborUpdateRpcLocal.js +5 -4
  51. package/dist/src/logic/neighbor-discovery/NeighborUpdateRpcLocal.js.map +1 -1
  52. package/dist/src/logic/neighbor-discovery/NeighborUpdateRpcRemote.js.map +1 -1
  53. package/dist/src/logic/node-info/NodeInfoClient.d.ts +9 -0
  54. package/dist/src/logic/node-info/NodeInfoClient.js +19 -0
  55. package/dist/src/logic/node-info/NodeInfoClient.js.map +1 -0
  56. package/dist/src/logic/node-info/NodeInfoRpcLocal.d.ts +12 -0
  57. package/dist/src/logic/node-info/NodeInfoRpcLocal.js +29 -0
  58. package/dist/src/logic/node-info/NodeInfoRpcLocal.js.map +1 -0
  59. package/dist/src/logic/node-info/NodeInfoRpcRemote.d.ts +6 -0
  60. package/dist/src/logic/node-info/NodeInfoRpcRemote.js +11 -0
  61. package/dist/src/logic/node-info/NodeInfoRpcRemote.js.map +1 -0
  62. package/dist/src/logic/propagation/FifoMapWithTTL.js +7 -3
  63. package/dist/src/logic/propagation/FifoMapWithTTL.js.map +1 -1
  64. package/dist/src/logic/propagation/Propagation.js +3 -0
  65. package/dist/src/logic/propagation/Propagation.js.map +1 -1
  66. package/dist/src/logic/propagation/PropagationTaskStore.js +1 -0
  67. package/dist/src/logic/propagation/PropagationTaskStore.js.map +1 -1
  68. package/dist/src/logic/protocol-integration/stream-message/GroupKeyRequestTranslator.js +1 -1
  69. package/dist/src/logic/protocol-integration/stream-message/GroupKeyRequestTranslator.js.map +1 -1
  70. package/dist/src/logic/protocol-integration/stream-message/GroupKeyResponseTranslator.js +1 -1
  71. package/dist/src/logic/protocol-integration/stream-message/GroupKeyResponseTranslator.js.map +1 -1
  72. package/dist/src/logic/protocol-integration/stream-message/StreamMessageTranslator.js +43 -15
  73. package/dist/src/logic/protocol-integration/stream-message/StreamMessageTranslator.js.map +1 -1
  74. package/dist/src/logic/protocol-integration/stream-message/oldStreamMessageBinaryUtils.d.ts +3 -0
  75. package/dist/src/logic/protocol-integration/stream-message/oldStreamMessageBinaryUtils.js +14 -0
  76. package/dist/src/logic/protocol-integration/stream-message/oldStreamMessageBinaryUtils.js.map +1 -0
  77. package/dist/src/logic/proxy/ProxyClient.d.ts +1 -1
  78. package/dist/src/logic/proxy/ProxyClient.js +18 -11
  79. package/dist/src/logic/proxy/ProxyClient.js.map +1 -1
  80. package/dist/src/logic/proxy/ProxyConnectionRpcLocal.js +2 -1
  81. package/dist/src/logic/proxy/ProxyConnectionRpcLocal.js.map +1 -1
  82. package/dist/src/logic/proxy/ProxyConnectionRpcRemote.js.map +1 -1
  83. package/dist/src/logic/temporary-connection/TemporaryConnectionRpcLocal.d.ts +2 -2
  84. package/dist/src/logic/temporary-connection/TemporaryConnectionRpcLocal.js +4 -2
  85. package/dist/src/logic/temporary-connection/TemporaryConnectionRpcLocal.js.map +1 -1
  86. package/dist/src/logic/temporary-connection/TemporaryConnectionRpcRemote.js.map +1 -1
  87. package/dist/src/logic/utils.js.map +1 -1
  88. package/dist/src/proto/google/protobuf/any.js.map +1 -1
  89. package/dist/src/proto/google/protobuf/timestamp.js.map +1 -1
  90. package/dist/src/proto/packages/dht/protos/DhtRpc.client.d.ts +4 -5
  91. package/dist/src/proto/packages/dht/protos/DhtRpc.client.js +38 -29
  92. package/dist/src/proto/packages/dht/protos/DhtRpc.client.js.map +1 -1
  93. package/dist/src/proto/packages/dht/protos/DhtRpc.d.ts +22 -12
  94. package/dist/src/proto/packages/dht/protos/DhtRpc.js +11 -16
  95. package/dist/src/proto/packages/dht/protos/DhtRpc.js.map +1 -1
  96. package/dist/src/proto/packages/dht/protos/DhtRpc.server.d.ts +2 -3
  97. package/dist/src/proto/packages/proto-rpc/protos/ProtoRpc.js +1 -1
  98. package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.client.d.ts +27 -0
  99. package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.client.js +43 -17
  100. package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.client.js.map +1 -1
  101. package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.d.ts +106 -5
  102. package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.js +79 -7
  103. package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.js.map +1 -1
  104. package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.server.d.ts +11 -0
  105. package/dist/test/benchmark/first-message.js +7 -5
  106. package/dist/test/benchmark/first-message.js.map +1 -1
  107. package/dist/test/utils/utils.js +2 -1
  108. package/dist/test/utils/utils.js.map +1 -1
  109. package/jest.config.js +3 -38
  110. package/package.json +7 -7
  111. package/protos/NetworkRpc.proto +34 -5
  112. package/src/NetworkNode.ts +5 -1
  113. package/src/NetworkStack.ts +23 -2
  114. package/src/exports.ts +4 -0
  115. package/src/logic/DuplicateMessageDetector.ts +7 -7
  116. package/src/logic/EntryPointDiscovery.ts +3 -3
  117. package/src/logic/Layer0Node.ts +2 -0
  118. package/src/logic/Layer1Node.ts +4 -4
  119. package/src/logic/NodeList.ts +9 -15
  120. package/src/logic/RandomGraphNode.ts +24 -23
  121. package/src/logic/StreamrNode.ts +18 -4
  122. package/src/logic/createRandomGraphNode.ts +17 -17
  123. package/src/logic/inspect/Inspector.ts +3 -4
  124. package/src/logic/neighbor-discovery/HandshakeRpcLocal.ts +18 -18
  125. package/src/logic/neighbor-discovery/Handshaker.ts +31 -32
  126. package/src/logic/neighbor-discovery/NeighborFinder.ts +2 -2
  127. package/src/logic/neighbor-discovery/NeighborUpdateManager.ts +6 -5
  128. package/src/logic/neighbor-discovery/NeighborUpdateRpcLocal.ts +5 -5
  129. package/src/logic/node-info/NodeInfoClient.ts +21 -0
  130. package/src/logic/node-info/NodeInfoRpcLocal.ts +35 -0
  131. package/src/logic/node-info/NodeInfoRpcRemote.ts +11 -0
  132. package/src/logic/protocol-integration/stream-message/GroupKeyRequestTranslator.ts +1 -1
  133. package/src/logic/protocol-integration/stream-message/GroupKeyResponseTranslator.ts +1 -1
  134. package/src/logic/protocol-integration/stream-message/StreamMessageTranslator.ts +56 -27
  135. package/src/logic/protocol-integration/stream-message/oldStreamMessageBinaryUtils.ts +11 -0
  136. package/src/logic/proxy/ProxyClient.ts +10 -10
  137. package/src/logic/temporary-connection/TemporaryConnectionRpcLocal.ts +3 -3
  138. package/src/proto/packages/dht/protos/DhtRpc.client.ts +6 -7
  139. package/src/proto/packages/dht/protos/DhtRpc.server.ts +3 -4
  140. package/src/proto/packages/dht/protos/DhtRpc.ts +32 -20
  141. package/src/proto/packages/proto-rpc/protos/ProtoRpc.ts +1 -1
  142. package/src/proto/packages/trackerless-network/protos/NetworkRpc.client.ts +30 -1
  143. package/src/proto/packages/trackerless-network/protos/NetworkRpc.server.ts +12 -1
  144. package/src/proto/packages/trackerless-network/protos/NetworkRpc.ts +138 -11
  145. package/test/benchmark/first-message.ts +28 -8
  146. package/test/end-to-end/inspect.test.ts +13 -1
  147. package/test/end-to-end/proxy-and-full-node.test.ts +14 -1
  148. package/test/end-to-end/proxy-connections.test.ts +14 -2
  149. package/test/end-to-end/proxy-key-exchange.test.ts +15 -8
  150. package/test/end-to-end/random-graph-with-real-connections.test.ts +21 -21
  151. package/test/end-to-end/webrtc-full-node-network.test.ts +3 -3
  152. package/test/end-to-end/websocket-full-node-network.test.ts +3 -3
  153. package/test/integration/Handshakes.test.ts +8 -8
  154. package/test/integration/NetworkNode.test.ts +19 -1
  155. package/test/integration/NetworkRpc.test.ts +3 -2
  156. package/test/integration/NodeInfoRpc.test.ts +103 -0
  157. package/test/integration/Propagation.test.ts +2 -2
  158. package/test/integration/RandomGraphNode-Layer1Node-Latencies.test.ts +20 -21
  159. package/test/integration/RandomGraphNode-Layer1Node.test.ts +22 -19
  160. package/test/integration/stream-without-default-entrypoints.test.ts +17 -11
  161. package/test/unit/HandshakeRpcLocal.test.ts +15 -15
  162. package/test/unit/Handshaker.test.ts +3 -3
  163. package/test/unit/NeighborFinder.test.ts +5 -5
  164. package/test/unit/NodeList.test.ts +56 -57
  165. package/test/unit/Propagation.test.ts +4 -2
  166. package/test/unit/RandomGraphNode.test.ts +7 -8
  167. package/test/unit/StreamMessageTranslator.test.ts +7 -4
  168. package/test/unit/StreamrNode.test.ts +2 -0
  169. package/test/unit/oldStreamMessageBinaryUtils.test.ts +39 -0
  170. package/test/utils/mock/MockLayer0Node.ts +6 -1
  171. package/test/utils/mock/MockLayer1Node.ts +2 -2
  172. package/test/utils/mock/Transport.ts +1 -1
  173. package/test/utils/utils.ts +3 -1
  174. package/tsconfig.jest.json +3 -3
  175. package/tsconfig.node.json +0 -1
  176. package/dist/package.json +0 -55
@@ -1,7 +1,10 @@
1
1
  import { LatencyType, NodeType, PeerDescriptor, Simulator, SimulatorTransport, getRandomRegion } from '@streamr/dht'
2
2
  import {
3
+ ContentType,
4
+ EncryptionType,
3
5
  MessageID,
4
6
  MessageRef,
7
+ SignatureType,
5
8
  StreamMessage,
6
9
  StreamMessageType,
7
10
  StreamPartIDUtils
@@ -18,7 +21,7 @@ describe('stream without default entrypoints', () => {
18
21
 
19
22
  let entrypoint: NetworkNode
20
23
  let nodes: NetworkNode[]
21
- let numOfReceivedMessages: number
24
+ let receivedMessageCount: number
22
25
  const entryPointPeerDescriptor: PeerDescriptor = {
23
26
  nodeId: new Uint8Array([1, 2, 3]),
24
27
  type: NodeType.NODEJS,
@@ -39,13 +42,16 @@ describe('stream without default entrypoints', () => {
39
42
  hello: 'world'
40
43
  })),
41
44
  messageType: StreamMessageType.MESSAGE,
45
+ contentType: ContentType.JSON,
46
+ encryptionType: EncryptionType.NONE,
47
+ signatureType: SignatureType.SECP256K1,
42
48
  signature: hexToBinary('0x1234'),
43
49
  })
44
50
 
45
51
  beforeEach(async () => {
46
52
  const simulator = new Simulator(LatencyType.REAL)
47
53
  nodes = []
48
- numOfReceivedMessages = 0
54
+ receivedMessageCount = 0
49
55
  const entryPointTransport = new SimulatorTransport(entryPointPeerDescriptor, simulator)
50
56
  await entryPointTransport.start()
51
57
  entrypoint = createNetworkNode({
@@ -80,36 +86,36 @@ describe('stream without default entrypoints', () => {
80
86
  it('can join stream without configured entrypoints one by one', async () => {
81
87
  await nodes[0].join(STREAM_PART_ID)
82
88
  nodes[0].addMessageListener((_msg) => {
83
- numOfReceivedMessages += 1
89
+ receivedMessageCount += 1
84
90
  })
85
91
  await Promise.all([
86
- waitForCondition(() => numOfReceivedMessages === 1, 10000),
92
+ waitForCondition(() => receivedMessageCount === 1, 10000),
87
93
  nodes[1].broadcast(streamMessage)
88
94
  ])
89
95
  })
90
96
 
91
97
  it('can join without configured entrypoints simultaneously', async () => {
92
98
  nodes[0].addMessageListener((_msg) => {
93
- numOfReceivedMessages += 1
99
+ receivedMessageCount += 1
94
100
  })
95
101
  await Promise.all([
96
- waitForCondition(() => numOfReceivedMessages === 1, 15000),
102
+ waitForCondition(() => receivedMessageCount === 1, 15000),
97
103
  nodes[0].join(STREAM_PART_ID),
98
104
  nodes[1].broadcast(streamMessage),
99
105
  ])
100
106
  })
101
107
 
102
108
  it('multiple nodes can join without configured entrypoints simultaneously', async () => {
103
- const numOfSubscribers = 8
104
- await Promise.all(range(numOfSubscribers).map(async (i) => {
109
+ const subscriberCount = 8
110
+ await Promise.all(range(subscriberCount).map(async (i) => {
105
111
  await nodes[i].join(STREAM_PART_ID, { minCount: 4, timeout: 15000 })
106
112
  nodes[i].addMessageListener(() => {
107
- numOfReceivedMessages += 1
113
+ receivedMessageCount += 1
108
114
  })
109
115
  }))
110
- const nonjoinedNode = nodes[numOfSubscribers]
116
+ const nonjoinedNode = nodes[subscriberCount]
111
117
  await nonjoinedNode.broadcast(streamMessage)
112
- await waitForCondition(() => numOfReceivedMessages === numOfSubscribers, 15000)
118
+ await waitForCondition(() => receivedMessageCount === subscriberCount, 15000)
113
119
  }, 45000)
114
120
 
115
121
  it('nodes store themselves as entrypoints on streamPart if number of entrypoints is low', async () => {
@@ -13,13 +13,13 @@ describe('HandshakeRpcLocal', () => {
13
13
 
14
14
  const localPeerDescriptor = createMockPeerDescriptor()
15
15
 
16
- let targetNeighbors: NodeList
16
+ let neighbors: NodeList
17
17
  let ongoingHandshakes: Set<DhtAddress>
18
18
  let ongoingInterleaves: Set<DhtAddress>
19
19
  let handshakeWithInterleaving: jest.Mock
20
20
 
21
21
  beforeEach(() => {
22
- targetNeighbors = new NodeList(getNodeIdFromPeerDescriptor(localPeerDescriptor), 10)
22
+ neighbors = new NodeList(getNodeIdFromPeerDescriptor(localPeerDescriptor), 10)
23
23
  ongoingHandshakes = new Set()
24
24
  ongoingInterleaves = new Set()
25
25
  handshakeWithInterleaving = jest.fn()
@@ -35,7 +35,7 @@ describe('HandshakeRpcLocal', () => {
35
35
  handshakeWithInterleaving()
36
36
  return true
37
37
  },
38
- targetNeighbors,
38
+ neighbors,
39
39
  maxNeighborCount: 4
40
40
  })
41
41
  })
@@ -54,10 +54,10 @@ describe('HandshakeRpcLocal', () => {
54
54
  })
55
55
 
56
56
  it('handshake interleave', async () => {
57
- targetNeighbors.add(createMockDeliveryRpcRemote())
58
- targetNeighbors.add(createMockDeliveryRpcRemote())
59
- targetNeighbors.add(createMockDeliveryRpcRemote())
60
- targetNeighbors.add(createMockDeliveryRpcRemote())
57
+ neighbors.add(createMockDeliveryRpcRemote())
58
+ neighbors.add(createMockDeliveryRpcRemote())
59
+ neighbors.add(createMockDeliveryRpcRemote())
60
+ neighbors.add(createMockDeliveryRpcRemote())
61
61
  const req = StreamPartHandshakeRequest.create({
62
62
  streamPartId: STREAM_PART_ID,
63
63
  requestId: 'requestId'
@@ -111,10 +111,10 @@ describe('HandshakeRpcLocal', () => {
111
111
  })
112
112
 
113
113
  it('rejects handshakes if interleaving to the requestor is ongoing', async () => {
114
- targetNeighbors.add(createMockDeliveryRpcRemote())
115
- targetNeighbors.add(createMockDeliveryRpcRemote())
116
- targetNeighbors.add(createMockDeliveryRpcRemote())
117
- targetNeighbors.add(createMockDeliveryRpcRemote())
114
+ neighbors.add(createMockDeliveryRpcRemote())
115
+ neighbors.add(createMockDeliveryRpcRemote())
116
+ neighbors.add(createMockDeliveryRpcRemote())
117
+ neighbors.add(createMockDeliveryRpcRemote())
118
118
  const requestor = createMockPeerDescriptor()
119
119
  ongoingInterleaves.add(getNodeIdFromPeerDescriptor(requestor))
120
120
  const req = StreamPartHandshakeRequest.create({
@@ -131,10 +131,10 @@ describe('HandshakeRpcLocal', () => {
131
131
  const interleavingPeer1 = createMockPeerDescriptor()
132
132
  const interleavingPeer2 = createMockPeerDescriptor()
133
133
  const interleavingPeer3 = createMockPeerDescriptor()
134
- targetNeighbors.add(createMockDeliveryRpcRemote(interleavingPeer1))
135
- targetNeighbors.add(createMockDeliveryRpcRemote(interleavingPeer2))
136
- targetNeighbors.add(createMockDeliveryRpcRemote(interleavingPeer3))
137
- targetNeighbors.add(createMockDeliveryRpcRemote())
134
+ neighbors.add(createMockDeliveryRpcRemote(interleavingPeer1))
135
+ neighbors.add(createMockDeliveryRpcRemote(interleavingPeer2))
136
+ neighbors.add(createMockDeliveryRpcRemote(interleavingPeer3))
137
+ neighbors.add(createMockDeliveryRpcRemote())
138
138
  ongoingInterleaves.add(getNodeIdFromPeerDescriptor(interleavingPeer1))
139
139
  ongoingInterleaves.add(getNodeIdFromPeerDescriptor(interleavingPeer2))
140
140
  ongoingInterleaves.add(getNodeIdFromPeerDescriptor(interleavingPeer3))
@@ -13,7 +13,7 @@ describe('Handshaker', () => {
13
13
  const maxNeighborCount = 4
14
14
  const streamPartId = StreamPartIDUtils.parse('stream#0')
15
15
 
16
- let targetNeighbors: NodeList
16
+ let neighbors: NodeList
17
17
  let nearbyNodeView: NodeList
18
18
  let randomNodeView: NodeList
19
19
 
@@ -27,7 +27,7 @@ describe('Handshaker', () => {
27
27
  const rpcCommunicator = new ListeningRpcCommunicator(streamPartId, simulatorTransport)
28
28
 
29
29
  const nodeId = getNodeIdFromPeerDescriptor(peerDescriptor)
30
- targetNeighbors = new NodeList(nodeId, 10)
30
+ neighbors = new NodeList(nodeId, 10)
31
31
  nearbyNodeView = new NodeList(nodeId, 20)
32
32
  randomNodeView = new NodeList(nodeId, 20)
33
33
 
@@ -35,7 +35,7 @@ describe('Handshaker', () => {
35
35
  localPeerDescriptor: peerDescriptor,
36
36
  streamPartId,
37
37
  connectionLocker: mockConnectionLocker,
38
- targetNeighbors,
38
+ neighbors,
39
39
  nearbyNodeView,
40
40
  randomNodeView,
41
41
  rpcCommunicator,
@@ -9,27 +9,27 @@ import { DhtAddress, getNodeIdFromPeerDescriptor } from '@streamr/dht'
9
9
  describe('NeighborFinder', () => {
10
10
 
11
11
  const nodeId = createRandomNodeId()
12
- let targetNeighbors: NodeList
12
+ let neighbors: NodeList
13
13
  let nearbyNodeView: NodeList
14
14
  let neighborFinder: NeighborFinder
15
15
 
16
16
  const minCount = 4
17
17
 
18
18
  beforeEach(() => {
19
- targetNeighbors = new NodeList(nodeId, 15)
19
+ neighbors = new NodeList(nodeId, 15)
20
20
  nearbyNodeView = new NodeList(nodeId, 30)
21
21
  range(30).forEach(() => nearbyNodeView.add(createMockDeliveryRpcRemote()))
22
22
  const mockDoFindNeighbors = async (excluded: DhtAddress[]) => {
23
23
  const target = nearbyNodeView.getRandom(excluded)
24
24
  if (Math.random() < 0.5) {
25
- targetNeighbors.add(target!)
25
+ neighbors.add(target!)
26
26
  } else {
27
27
  excluded.push(getNodeIdFromPeerDescriptor(target!.getPeerDescriptor()))
28
28
  }
29
29
  return excluded
30
30
  }
31
31
  neighborFinder = new NeighborFinder({
32
- targetNeighbors,
32
+ neighbors,
33
33
  nearbyNodeView,
34
34
  doFindNeighbors: (excluded) => mockDoFindNeighbors(excluded),
35
35
  minCount
@@ -42,7 +42,7 @@ describe('NeighborFinder', () => {
42
42
 
43
43
  it('Finds target number of nodes', async () => {
44
44
  neighborFinder.start()
45
- await waitForCondition(() => targetNeighbors.size() >= minCount, 10000)
45
+ await waitForCondition(() => neighbors.size() >= minCount, 10000)
46
46
  expect(neighborFinder.isRunning()).toEqual(false)
47
47
  })
48
48
  })
@@ -2,8 +2,6 @@ import {
2
2
  ListeningRpcCommunicator,
3
3
  NodeType,
4
4
  PeerDescriptor,
5
- Simulator,
6
- SimulatorTransport,
7
5
  getDhtAddressFromRaw,
8
6
  getNodeIdFromPeerDescriptor,
9
7
  } from '@streamr/dht'
@@ -14,6 +12,7 @@ import { NodeList } from '../../src/logic/NodeList'
14
12
  import { formStreamPartDeliveryServiceId } from '../../src/logic/formStreamPartDeliveryServiceId'
15
13
  import { DeliveryRpcClient } from '../../src/proto/packages/trackerless-network/protos/NetworkRpc.client'
16
14
  import { createMockPeerDescriptor, createRandomNodeId } from '../utils/utils'
15
+ import { MockTransport } from '../utils/mock/Transport'
17
16
 
18
17
  const streamPartId = StreamPartIDUtils.parse('stream#0')
19
18
 
@@ -28,14 +27,9 @@ describe('NodeList', () => {
28
27
  ]
29
28
  const ownId = createRandomNodeId()
30
29
  let nodeList: NodeList
31
- let simulator: Simulator
32
- let mockTransports: SimulatorTransport[]
33
-
34
- const createRemoteGraphNode = async (peerDescriptor: PeerDescriptor) => {
35
- const mockTransport = new SimulatorTransport(peerDescriptor, simulator)
36
- await mockTransport.start()
37
- const mockCommunicator = new ListeningRpcCommunicator(formStreamPartDeliveryServiceId(streamPartId), mockTransport)
38
- mockTransports.push(mockTransport)
30
+
31
+ const createRemoteGraphNode = (peerDescriptor: PeerDescriptor) => {
32
+ const mockCommunicator = new ListeningRpcCommunicator(formStreamPartDeliveryServiceId(streamPartId), new MockTransport())
39
33
  return new DeliveryRpcRemote(
40
34
  createMockPeerDescriptor(),
41
35
  peerDescriptor,
@@ -44,95 +38,79 @@ describe('NodeList', () => {
44
38
  )
45
39
  }
46
40
 
47
- beforeEach(async () => {
48
- simulator = new Simulator()
49
- mockTransports = []
41
+ beforeEach(() => {
50
42
  nodeList = new NodeList(ownId, 6)
51
43
  for (const id of ids) {
52
44
  const peerDescriptor: PeerDescriptor = {
53
45
  nodeId: id,
54
46
  type: NodeType.NODEJS
55
47
  }
56
- nodeList.add(await createRemoteGraphNode(peerDescriptor))
57
- }
58
- })
59
-
60
- afterEach(async () => {
61
- // eslint-disable-next-line @typescript-eslint/prefer-for-of
62
- for (let i = 0; i < mockTransports.length; i++) {
63
- await mockTransports[i].stop()
48
+ nodeList.add(createRemoteGraphNode(peerDescriptor))
64
49
  }
65
- simulator.stop()
66
50
  })
67
51
 
68
- it('add', async () => {
52
+ it('add', () => {
69
53
  const newDescriptor = {
70
54
  nodeId: new Uint8Array([1, 2, 3]),
71
55
  type: NodeType.NODEJS
72
56
  }
73
- const newNode = await createRemoteGraphNode(newDescriptor)
57
+ const newNode = createRemoteGraphNode(newDescriptor)
74
58
  nodeList.add(newNode)
75
- expect(nodeList.hasNode(newDescriptor)).toEqual(true)
59
+ expect(nodeList.has(getNodeIdFromPeerDescriptor(newDescriptor))).toEqual(true)
76
60
 
77
61
  const newDescriptor2 = {
78
62
  nodeId: new Uint8Array([1, 2, 4]),
79
63
  type: NodeType.NODEJS
80
64
  }
81
- const newNode2 = await createRemoteGraphNode(newDescriptor2)
65
+ const newNode2 = createRemoteGraphNode(newDescriptor2)
82
66
  nodeList.add(newNode2)
83
- expect(nodeList.hasNode(newDescriptor2)).toEqual(false)
67
+ expect(nodeList.has(getNodeIdFromPeerDescriptor(newDescriptor2))).toEqual(false)
84
68
  })
85
69
 
86
70
  it('remove', () => {
87
- const toRemove = nodeList.getClosest([])
88
- nodeList.remove(toRemove!.getPeerDescriptor())
89
- expect(nodeList.hasNode(toRemove!.getPeerDescriptor())).toEqual(false)
90
- })
91
-
92
- it('removeById', () => {
93
- const toRemove = nodeList.getClosest([])
71
+ const toRemove = nodeList.getFirst([])
94
72
  const nodeId = getNodeIdFromPeerDescriptor(toRemove!.getPeerDescriptor())
95
- nodeList.removeById(nodeId)
96
- expect(nodeList.hasNode(toRemove!.getPeerDescriptor())).toEqual(false)
73
+ nodeList.remove(nodeId)
74
+ expect(nodeList.has(nodeId)).toEqual(false)
97
75
  })
98
76
 
99
- it('getClosest', () => {
100
- const closest = nodeList.getClosest([])
77
+ it('getFirst', () => {
78
+ const closest = nodeList.getFirst([])
101
79
  expect(getNodeIdFromPeerDescriptor(closest!.getPeerDescriptor()))
102
80
  .toEqual(getDhtAddressFromRaw(new Uint8Array([1, 1, 1])))
103
81
  })
104
82
 
105
- it('getClosest with exclude', () => {
106
- const closest = nodeList.getClosest([getDhtAddressFromRaw(new Uint8Array([1, 1, 1]))])
83
+ it('getFirst with exclude', () => {
84
+ const closest = nodeList.getFirst([getDhtAddressFromRaw(new Uint8Array([1, 1, 1]))])
107
85
  expect(getNodeIdFromPeerDescriptor(closest!.getPeerDescriptor()))
108
86
  .toEqual(getDhtAddressFromRaw(new Uint8Array([1, 1, 2])))
109
87
  })
110
88
 
111
- it('getFurthest', () => {
112
- const closest = nodeList.getFurthest([])
89
+ it('getLast', () => {
90
+ const closest = nodeList.getLast([])
113
91
  expect(getNodeIdFromPeerDescriptor(closest!.getPeerDescriptor()))
114
92
  .toEqual(getDhtAddressFromRaw(new Uint8Array([1, 1, 5])))
115
93
  })
116
94
 
117
- it('getFurthest with exclude', () => {
118
- const closest = nodeList.getFurthest([getDhtAddressFromRaw(new Uint8Array([1, 1, 5]))])
95
+ it('getLast with exclude', () => {
96
+ const closest = nodeList.getLast([getDhtAddressFromRaw(new Uint8Array([1, 1, 5]))])
119
97
  expect(getNodeIdFromPeerDescriptor(closest!.getPeerDescriptor()))
120
98
  .toEqual(getDhtAddressFromRaw(new Uint8Array([1, 1, 4])))
121
99
  })
122
100
 
123
- it('getClosestAndFurthest', () => {
124
- const results = nodeList.getClosestAndFurthest([])
125
- expect(results).toEqual([nodeList.getClosest([]), nodeList.getFurthest([])])
101
+ it('getFirstAndLast', () => {
102
+ const results = nodeList.getFirstAndLast([])
103
+ expect(results).toEqual([nodeList.getFirst([]), nodeList.getLast([])])
126
104
  })
127
105
 
128
- it('getClosest empty', () => {
106
+ it('getFirst empty', () => {
129
107
  const emptyList = new NodeList(ownId, 2)
130
- expect(emptyList.getClosest([])).toBeUndefined()
108
+ expect(emptyList.getFirst([])).toBeUndefined()
131
109
  })
132
110
 
133
- it('getFurthest empty', () => {
111
+ it('getLast empty', () => {
134
112
  const emptyList = new NodeList(ownId, 2)
135
- expect(emptyList.getFurthest([])).toBeUndefined()
113
+ expect(emptyList.getLast([])).toBeUndefined()
136
114
  })
137
115
 
138
116
  it('getRandom empty', () => {
@@ -140,19 +118,40 @@ describe('NodeList', () => {
140
118
  expect(emptyList.getRandom([])).toBeUndefined()
141
119
  })
142
120
 
143
- it('getClosestAndFurthest empty', () => {
121
+ it('getFirstAndLast empty', () => {
144
122
  const emptyList = new NodeList(ownId, 2)
145
- expect(emptyList.getClosestAndFurthest([])).toEqual([])
123
+ expect(emptyList.getFirstAndLast([])).toEqual([])
146
124
  })
147
125
 
148
- it('getClosestAndFurthest with exclude', () => {
149
- const results = nodeList.getClosestAndFurthest([
126
+ it('getFirstAndLast with exclude', () => {
127
+ const results = nodeList.getFirstAndLast([
150
128
  getDhtAddressFromRaw(new Uint8Array([1, 1, 1])),
151
129
  getDhtAddressFromRaw(new Uint8Array([1, 1, 5]))
152
130
  ])
153
131
  expect(results).toEqual([
154
- nodeList.getClosest([getDhtAddressFromRaw(new Uint8Array([1, 1, 1]))]),
155
- nodeList.getFurthest([getDhtAddressFromRaw(new Uint8Array([1, 1, 5]))])
132
+ nodeList.getFirst([getDhtAddressFromRaw(new Uint8Array([1, 1, 1]))]),
133
+ nodeList.getLast([getDhtAddressFromRaw(new Uint8Array([1, 1, 5]))])
156
134
  ])
157
135
  })
136
+
137
+ it('items are in insertion order', () => {
138
+ const list = new NodeList(createRandomNodeId(), 100)
139
+ const item1 = createRemoteGraphNode(createMockPeerDescriptor())
140
+ const item2 = createRemoteGraphNode(createMockPeerDescriptor())
141
+ const item3 = createRemoteGraphNode(createMockPeerDescriptor())
142
+ const item4 = createRemoteGraphNode(createMockPeerDescriptor())
143
+ const item5 = createRemoteGraphNode(createMockPeerDescriptor())
144
+ const item6 = createRemoteGraphNode(createMockPeerDescriptor())
145
+ list.add(item2)
146
+ list.add(item3)
147
+ list.add(item1)
148
+ list.add(item6)
149
+ list.add(item4)
150
+ list.add(item5)
151
+ expect(list.getFirst([])!).toEqual(item2)
152
+ expect(list.getLast([])!).toEqual(item5)
153
+ // the order doesn't change if item re-added
154
+ list.add(item4)
155
+ expect(list.getLast([])!).toEqual(item5)
156
+ })
158
157
  })
@@ -2,11 +2,12 @@ import {
2
2
  ContentType,
3
3
  EncryptionType,
4
4
  MessageID,
5
+ SignatureType,
5
6
  StreamMessage,
6
7
  StreamMessageType,
7
8
  } from '../../src/proto/packages/trackerless-network/protos/NetworkRpc'
8
9
  import { Propagation } from '../../src/logic/propagation/Propagation'
9
- import { toEthereumAddress, wait, utf8ToBinary, hexToBinary } from '@streamr/utils'
10
+ import { hexToBinary, toEthereumAddress, utf8ToBinary, wait } from '@streamr/utils'
10
11
  import { DhtAddress } from '@streamr/dht'
11
12
 
12
13
  const PUBLISHER_ID = toEthereumAddress('0x1111111111111111111111111111111111111111')
@@ -26,7 +27,8 @@ function makeMsg(streamId: string, partition: number, ts: number, msgNo: number)
26
27
  contentType: ContentType.JSON,
27
28
  encryptionType: EncryptionType.NONE,
28
29
  signature: hexToBinary('0x1111'),
29
- messageType: StreamMessageType.MESSAGE
30
+ messageType: StreamMessageType.MESSAGE,
31
+ signatureType: SignatureType.SECP256K1
30
32
  }
31
33
  }
32
34
 
@@ -16,7 +16,7 @@ describe('RandomGraphNode', () => {
16
16
  let randomGraphNode: RandomGraphNode
17
17
  const peerDescriptor = createMockPeerDescriptor()
18
18
 
19
- let targetNeighbors: NodeList
19
+ let neighbors: NodeList
20
20
  let nearbyNodeView: NodeList
21
21
  let randomNodeView: NodeList
22
22
 
@@ -25,13 +25,13 @@ describe('RandomGraphNode', () => {
25
25
  beforeEach(async () => {
26
26
  const nodeId = getNodeIdFromPeerDescriptor(peerDescriptor)
27
27
 
28
- targetNeighbors = new NodeList(nodeId, 10)
28
+ neighbors = new NodeList(nodeId, 10)
29
29
  randomNodeView = new NodeList(nodeId, 10)
30
30
  nearbyNodeView = new NodeList(nodeId, 10)
31
31
  layer1Node = new MockLayer1Node()
32
32
 
33
33
  randomGraphNode = createRandomGraphNode({
34
- targetNeighbors,
34
+ neighbors,
35
35
  randomNodeView,
36
36
  nearbyNodeView,
37
37
  transport: new MockTransport(),
@@ -52,12 +52,11 @@ describe('RandomGraphNode', () => {
52
52
  randomGraphNode.stop()
53
53
  })
54
54
 
55
- it('getTargetNeighborIds', () => {
55
+ it('getNeighbors', () => {
56
56
  const mockRemote = createMockDeliveryRpcRemote()
57
- targetNeighbors.add(mockRemote)
58
- const ids = randomGraphNode.getTargetNeighborIds()
59
- expect(ids[0]).toEqual(getNodeIdFromPeerDescriptor(mockRemote.getPeerDescriptor()))
60
- targetNeighbors.remove(mockRemote.getPeerDescriptor())
57
+ neighbors.add(mockRemote)
58
+ const result = randomGraphNode.getNeighbors()
59
+ expect(getNodeIdFromPeerDescriptor(result[0])).toEqual(getNodeIdFromPeerDescriptor(mockRemote.getPeerDescriptor()))
61
60
  })
62
61
 
63
62
  it('getNearbyNodeView', () => {
@@ -3,7 +3,9 @@ import {
3
3
  MessageID,
4
4
  StreamMessage as OldStreamMessage,
5
5
  StreamMessageType as OldStreamMessageType,
6
- StreamPartIDUtils
6
+ StreamPartIDUtils,
7
+ ContentType,
8
+ SignatureType
7
9
  } from '@streamr/protocol'
8
10
  import { binaryToHex, binaryToUtf8, hexToBinary, toEthereumAddress, utf8ToBinary } from '@streamr/utils'
9
11
  import { StreamMessageTranslator } from '../../src/logic/protocol-integration/stream-message/StreamMessageTranslator'
@@ -31,10 +33,11 @@ describe('StreamMessageTranslator', () => {
31
33
  )
32
34
  const oldProtocolMsg = new OldStreamMessage({
33
35
  messageId,
34
- prevMsgRef: null,
35
36
  content: utf8ToBinary(JSON.stringify({ hello: 'WORLD' })),
37
+ contentType: ContentType.JSON,
36
38
  messageType: OldStreamMessageType.MESSAGE,
37
39
  encryptionType: EncryptionType.NONE,
40
+ signatureType: SignatureType.SECP256K1,
38
41
  signature,
39
42
  })
40
43
 
@@ -59,10 +62,10 @@ describe('StreamMessageTranslator', () => {
59
62
  expect(translated.messageId.timestamp).toBeGreaterThanOrEqual(0)
60
63
  expect(translated.messageId.sequenceNumber).toEqual(0)
61
64
  expect(translated.getPublisherId()).toEqual('0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')
62
- expect(translated.prevMsgRef).toEqual(null)
65
+ expect(translated.prevMsgRef).toEqual(undefined)
63
66
  expect(translated.messageType).toEqual(OldStreamMessageType.MESSAGE)
64
67
  expect(translated.contentType).toEqual(0)
65
- expect(translated.groupKeyId).toEqual(null)
68
+ expect(translated.groupKeyId).toEqual(undefined)
66
69
  expect(translated.signature).toStrictEqual(signature)
67
70
  expect(translated.getParsedContent()).toEqual({ hello: 'WORLD' })
68
71
  })
@@ -56,6 +56,7 @@ describe('StreamrNode', () => {
56
56
  node.broadcast(message)
57
57
  await waitForCondition(() => node.hasStreamPart(streamPartId))
58
58
  })
59
+
59
60
  })
60
61
 
61
62
  describe('proxied stream', () => {
@@ -93,4 +94,5 @@ describe('StreamrNode', () => {
93
94
  expect(node.isProxiedStreamPart(streamPartId)).toBe(false)
94
95
  })
95
96
  })
97
+
96
98
  })
@@ -0,0 +1,39 @@
1
+ import {
2
+ ContentType,
3
+ EncryptionType,
4
+ MessageID,
5
+ MessageRef,
6
+ SignatureType,
7
+ StreamMessage,
8
+ toStreamID
9
+ } from '@streamr/protocol'
10
+ import { toEthereumAddress } from '@streamr/utils'
11
+ import { convertBytesToStreamMessage, convertStreamMessageToBytes } from '../../src/exports'
12
+
13
+ describe('oldStreamMessageBinaryUtils', () => {
14
+ it('convertStreamMessageToBytes and convertBytesToStreamMessage', () => {
15
+ const streamMessage = new StreamMessage({
16
+ messageId: new MessageID(
17
+ toStreamID('test.ens/foobar'),
18
+ 0,
19
+ 10001,
20
+ 0,
21
+ toEthereumAddress('0x1234567890123456789012345678901234567890'),
22
+ 'msgChainId'
23
+ ),
24
+ prevMsgRef: new MessageRef(10000, 1),
25
+ content: new Uint8Array([1, 2, 3]),
26
+ contentType: ContentType.BINARY,
27
+ encryptionType: EncryptionType.NONE,
28
+ groupKeyId: '0x1234567890123456789012345678901234567890',
29
+ signatureType: SignatureType.SECP256K1,
30
+ signature: new Uint8Array([7, 8, 9])
31
+ })
32
+
33
+ const bytes = convertStreamMessageToBytes(streamMessage)
34
+ expect(bytes).toBeInstanceOf(Uint8Array)
35
+ expect(bytes.length).toBeGreaterThan(100)
36
+ const convertedStreamMessage = convertBytesToStreamMessage(bytes)
37
+ expect(convertedStreamMessage).toEqual(streamMessage)
38
+ })
39
+ })
@@ -45,7 +45,12 @@ export class MockLayer0Node extends EventEmitter implements Layer0Node {
45
45
  }
46
46
 
47
47
  // eslint-disable-next-line class-methods-use-this
48
- getAllConnectionPeerDescriptors(): PeerDescriptor[] {
48
+ getConnections(): PeerDescriptor[] {
49
+ return []
50
+ }
51
+
52
+ // eslint-disable-next-line class-methods-use-this
53
+ getNeighbors(): PeerDescriptor[] {
49
54
  return []
50
55
  }
51
56
 
@@ -16,11 +16,11 @@ export class MockLayer1Node extends EventEmitter implements Layer1Node {
16
16
  return []
17
17
  }
18
18
 
19
- getAllNeighborPeerDescriptors(): PeerDescriptor[] {
19
+ getNeighbors(): PeerDescriptor[] {
20
20
  return this.kbucketPeers
21
21
  }
22
22
 
23
- getNumberOfNeighbors(): number {
23
+ getNeighborCount(): number {
24
24
  return this.kbucketPeers.length
25
25
  }
26
26
 
@@ -14,7 +14,7 @@ export class MockTransport extends EventEmitter implements ITransport {
14
14
  }
15
15
 
16
16
  // eslint-disable-next-line class-methods-use-this
17
- getAllConnectionPeerDescriptors(): PeerDescriptor[] {
17
+ getConnections(): PeerDescriptor[] {
18
18
  return []
19
19
  }
20
20
 
@@ -16,6 +16,7 @@ import {
16
16
  ContentType,
17
17
  EncryptionType,
18
18
  MessageID,
19
+ SignatureType,
19
20
  StreamMessage,
20
21
  StreamMessageType
21
22
  } from '../../src/proto/packages/trackerless-network/protos/NetworkRpc'
@@ -84,7 +85,8 @@ export const createStreamMessage = (
84
85
  content: utf8ToBinary(content),
85
86
  contentType: ContentType.JSON,
86
87
  messageId,
87
- signature: hexToBinary('0x1234')
88
+ signature: hexToBinary('0x1234'),
89
+ signatureType: SignatureType.SECP256K1,
88
90
  }
89
91
  return msg
90
92
  }
@@ -8,9 +8,9 @@
8
8
  "src/**/*",
9
9
  "test/**/*"
10
10
  ],
11
- "exclude": [
12
- ],
13
11
  "references": [
14
- { "path": "tsconfig.node.json" }
12
+ { "path": "../protocol/tsconfig.node.json" },
13
+ { "path": "../proto-rpc/tsconfig.node.json" },
14
+ { "path": "../dht/tsconfig.node.json" }
15
15
  ]
16
16
  }
@@ -6,7 +6,6 @@
6
6
  },
7
7
  "include": [
8
8
  "src/**/*",
9
- "package.json",
10
9
  "test/benchmark/first-message.ts",
11
10
  "test/utils/utils.ts"
12
11
  ],