@streamr/trackerless-network 100.0.0-testnet-two.1 → 100.0.0-testnet-two.2

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 (117) hide show
  1. package/dist/package.json +6 -6
  2. package/dist/src/NetworkNode.d.ts +3 -4
  3. package/dist/src/NetworkNode.js.map +1 -1
  4. package/dist/src/exports.d.ts +0 -1
  5. package/dist/src/exports.js.map +1 -1
  6. package/dist/src/logic/DeliveryRpcLocal.d.ts +4 -5
  7. package/dist/src/logic/DeliveryRpcLocal.js +3 -3
  8. package/dist/src/logic/DeliveryRpcLocal.js.map +1 -1
  9. package/dist/src/logic/DeliveryRpcRemote.d.ts +2 -1
  10. package/dist/src/logic/DeliveryRpcRemote.js +2 -2
  11. package/dist/src/logic/DeliveryRpcRemote.js.map +1 -1
  12. package/dist/src/logic/EntryPointDiscovery.d.ts +5 -5
  13. package/dist/src/logic/EntryPointDiscovery.js +4 -5
  14. package/dist/src/logic/EntryPointDiscovery.js.map +1 -1
  15. package/dist/src/logic/Layer0Node.d.ts +4 -4
  16. package/dist/src/logic/NodeList.d.ts +12 -13
  17. package/dist/src/logic/NodeList.js +4 -4
  18. package/dist/src/logic/NodeList.js.map +1 -1
  19. package/dist/src/logic/RandomGraphNode.d.ts +6 -7
  20. package/dist/src/logic/RandomGraphNode.js +9 -9
  21. package/dist/src/logic/RandomGraphNode.js.map +1 -1
  22. package/dist/src/logic/StreamrNode.d.ts +3 -4
  23. package/dist/src/logic/StreamrNode.js +2 -3
  24. package/dist/src/logic/StreamrNode.js.map +1 -1
  25. package/dist/src/logic/createRandomGraphNode.js +1 -3
  26. package/dist/src/logic/createRandomGraphNode.js.map +1 -1
  27. package/dist/src/logic/inspect/InspectSession.d.ts +3 -3
  28. package/dist/src/logic/inspect/InspectSession.js.map +1 -1
  29. package/dist/src/logic/inspect/Inspector.d.ts +3 -4
  30. package/dist/src/logic/inspect/Inspector.js +3 -3
  31. package/dist/src/logic/inspect/Inspector.js.map +1 -1
  32. package/dist/src/logic/neighbor-discovery/HandshakeRpcLocal.d.ts +4 -5
  33. package/dist/src/logic/neighbor-discovery/HandshakeRpcLocal.js +10 -10
  34. package/dist/src/logic/neighbor-discovery/HandshakeRpcLocal.js.map +1 -1
  35. package/dist/src/logic/neighbor-discovery/HandshakeRpcRemote.d.ts +3 -3
  36. package/dist/src/logic/neighbor-discovery/HandshakeRpcRemote.js +7 -8
  37. package/dist/src/logic/neighbor-discovery/HandshakeRpcRemote.js.map +1 -1
  38. package/dist/src/logic/neighbor-discovery/Handshaker.d.ts +3 -4
  39. package/dist/src/logic/neighbor-discovery/Handshaker.js +12 -12
  40. package/dist/src/logic/neighbor-discovery/Handshaker.js.map +1 -1
  41. package/dist/src/logic/neighbor-discovery/NeighborFinder.d.ts +3 -3
  42. package/dist/src/logic/neighbor-discovery/NeighborFinder.js.map +1 -1
  43. package/dist/src/logic/neighbor-discovery/NeighborUpdateManager.js +4 -4
  44. package/dist/src/logic/neighbor-discovery/NeighborUpdateManager.js.map +1 -1
  45. package/dist/src/logic/neighbor-discovery/NeighborUpdateRpcLocal.js +5 -5
  46. package/dist/src/logic/neighbor-discovery/NeighborUpdateRpcLocal.js.map +1 -1
  47. package/dist/src/logic/neighbor-discovery/NeighborUpdateRpcRemote.d.ts +2 -1
  48. package/dist/src/logic/neighbor-discovery/NeighborUpdateRpcRemote.js +3 -4
  49. package/dist/src/logic/neighbor-discovery/NeighborUpdateRpcRemote.js.map +1 -1
  50. package/dist/src/logic/propagation/Propagation.d.ts +4 -4
  51. package/dist/src/logic/propagation/Propagation.js.map +1 -1
  52. package/dist/src/logic/propagation/PropagationTaskStore.d.ts +2 -2
  53. package/dist/src/logic/proxy/ProxyClient.d.ts +3 -4
  54. package/dist/src/logic/proxy/ProxyClient.js +8 -9
  55. package/dist/src/logic/proxy/ProxyClient.js.map +1 -1
  56. package/dist/src/logic/proxy/ProxyConnectionRpcLocal.d.ts +6 -7
  57. package/dist/src/logic/proxy/ProxyConnectionRpcLocal.js +4 -4
  58. package/dist/src/logic/proxy/ProxyConnectionRpcLocal.js.map +1 -1
  59. package/dist/src/logic/temporary-connection/TemporaryConnectionRpcLocal.d.ts +0 -2
  60. package/dist/src/logic/temporary-connection/TemporaryConnectionRpcLocal.js +3 -3
  61. package/dist/src/logic/temporary-connection/TemporaryConnectionRpcLocal.js.map +1 -1
  62. package/dist/src/logic/temporary-connection/TemporaryConnectionRpcRemote.js +1 -2
  63. package/dist/src/logic/temporary-connection/TemporaryConnectionRpcRemote.js.map +1 -1
  64. package/dist/test/benchmark/first-message.js +2 -3
  65. package/dist/test/benchmark/first-message.js.map +1 -1
  66. package/dist/test/utils/utils.d.ts +2 -3
  67. package/dist/test/utils/utils.js +4 -4
  68. package/dist/test/utils/utils.js.map +1 -1
  69. package/package.json +6 -6
  70. package/src/NetworkNode.ts +3 -4
  71. package/src/exports.ts +0 -1
  72. package/src/logic/DeliveryRpcLocal.ts +4 -5
  73. package/src/logic/DeliveryRpcRemote.ts +3 -2
  74. package/src/logic/EntryPointDiscovery.ts +11 -9
  75. package/src/logic/Layer0Node.ts +4 -4
  76. package/src/logic/NodeList.ts +15 -16
  77. package/src/logic/RandomGraphNode.ts +16 -17
  78. package/src/logic/StreamrNode.ts +6 -5
  79. package/src/logic/createRandomGraphNode.ts +2 -4
  80. package/src/logic/inspect/InspectSession.ts +4 -4
  81. package/src/logic/inspect/Inspector.ts +4 -6
  82. package/src/logic/neighbor-discovery/HandshakeRpcLocal.ts +17 -10
  83. package/src/logic/neighbor-discovery/HandshakeRpcRemote.ts +11 -10
  84. package/src/logic/neighbor-discovery/Handshaker.ts +14 -15
  85. package/src/logic/neighbor-discovery/NeighborFinder.ts +4 -4
  86. package/src/logic/neighbor-discovery/NeighborUpdateManager.ts +2 -4
  87. package/src/logic/neighbor-discovery/NeighborUpdateRpcLocal.ts +1 -3
  88. package/src/logic/neighbor-discovery/NeighborUpdateRpcRemote.ts +4 -4
  89. package/src/logic/propagation/Propagation.ts +6 -6
  90. package/src/logic/propagation/PropagationTaskStore.ts +2 -2
  91. package/src/logic/proxy/ProxyClient.ts +20 -21
  92. package/src/logic/proxy/ProxyConnectionRpcLocal.ts +10 -12
  93. package/src/logic/temporary-connection/TemporaryConnectionRpcLocal.ts +1 -5
  94. package/src/logic/temporary-connection/TemporaryConnectionRpcRemote.ts +1 -2
  95. package/test/benchmark/first-message.ts +2 -3
  96. package/test/end-to-end/proxy-connections.test.ts +2 -2
  97. package/test/end-to-end/webrtc-full-node-network.test.ts +1 -2
  98. package/test/end-to-end/websocket-full-node-network.test.ts +1 -1
  99. package/test/integration/DeliveryRpcRemote.test.ts +2 -5
  100. package/test/integration/HandshakeRpcRemote.test.ts +2 -2
  101. package/test/integration/Handshakes.test.ts +2 -6
  102. package/test/integration/NeighborUpdateRpcRemote.test.ts +1 -2
  103. package/test/unit/HandshakeRpcLocal.test.ts +9 -11
  104. package/test/unit/Handshaker.test.ts +1 -2
  105. package/test/unit/InspectSession.test.ts +3 -3
  106. package/test/unit/Inspector.test.ts +1 -2
  107. package/test/unit/NeighborFinder.test.ts +2 -2
  108. package/test/unit/NodeList.test.ts +12 -13
  109. package/test/unit/Propagation.test.ts +9 -9
  110. package/test/unit/ProxyConnectionRpcRemote.test.ts +0 -2
  111. package/test/unit/RandomGraphNode.test.ts +1 -1
  112. package/test/utils/mock/MockHandshaker.ts +3 -3
  113. package/test/utils/utils.ts +15 -7
  114. package/dist/src/identifiers.d.ts +0 -4
  115. package/dist/src/identifiers.js +0 -9
  116. package/dist/src/identifiers.js.map +0 -1
  117. package/src/identifiers.ts +0 -8
package/src/exports.ts CHANGED
@@ -1,5 +1,4 @@
1
1
  export { NetworkStack, NetworkOptions } from './NetworkStack'
2
2
  export { NetworkNode, createNetworkNode } from './NetworkNode'
3
3
  export { StreamrNodeConfig } from './logic/StreamrNode'
4
- export { NodeID } from './identifiers'
5
4
  export { ProxyDirection } from './proto/packages/trackerless-network/protos/NetworkRpc'
@@ -1,4 +1,4 @@
1
- import { ListeningRpcCommunicator, PeerDescriptor, DhtCallContext } from '@streamr/dht'
1
+ import { ListeningRpcCommunicator, PeerDescriptor, DhtCallContext, DhtAddress, getNodeIdFromPeerDescriptor } from '@streamr/dht'
2
2
  import { Empty } from '../proto/google/protobuf/empty'
3
3
  import {
4
4
  LeaveStreamPartNotice,
@@ -8,16 +8,15 @@ import {
8
8
  } from '../proto/packages/trackerless-network/protos/NetworkRpc'
9
9
  import { IDeliveryRpc } from '../proto/packages/trackerless-network/protos/NetworkRpc.server'
10
10
  import { ServerCallContext } from '@protobuf-ts/runtime-rpc'
11
- import { NodeID, getNodeIdFromPeerDescriptor } from '../identifiers'
12
11
  import { StreamPartID } from '@streamr/protocol'
13
12
 
14
13
  export interface DeliveryRpcLocalConfig {
15
14
  localPeerDescriptor: PeerDescriptor
16
15
  streamPartId: StreamPartID
17
16
  markAndCheckDuplicate: (messageId: MessageID, previousMessageRef?: MessageRef) => boolean
18
- broadcast: (message: StreamMessage, previousNode?: NodeID) => void
19
- onLeaveNotice(senderId: NodeID, isLocalNodeEntryPoint: boolean): void
20
- markForInspection(senderId: NodeID, messageId: MessageID): void
17
+ broadcast: (message: StreamMessage, previousNode?: DhtAddress) => void
18
+ onLeaveNotice(senderId: DhtAddress, isLocalNodeEntryPoint: boolean): void
19
+ markForInspection(senderId: DhtAddress, messageId: MessageID): void
21
20
  rpcCommunicator: ListeningRpcCommunicator
22
21
  }
23
22
 
@@ -5,6 +5,7 @@ import {
5
5
  StreamMessage
6
6
  } from '../proto/packages/trackerless-network/protos/NetworkRpc'
7
7
  import { DeliveryRpcClient } from '../proto/packages/trackerless-network/protos/NetworkRpc.client'
8
+ import { StreamPartID } from '@streamr/protocol'
8
9
 
9
10
  const logger = new Logger(module)
10
11
 
@@ -19,9 +20,9 @@ export class DeliveryRpcRemote extends RpcRemote<DeliveryRpcClient> {
19
20
  })
20
21
  }
21
22
 
22
- leaveStreamPartNotice(isLocalNodeEntryPoint: boolean): void {
23
+ leaveStreamPartNotice(streamPartId: StreamPartID, isLocalNodeEntryPoint: boolean): void {
23
24
  const notification: LeaveStreamPartNotice = {
24
- streamPartId: this.getServiceId(),
25
+ streamPartId,
25
26
  isEntryPoint: isLocalNodeEntryPoint
26
27
  }
27
28
  const options = this.formDhtRpcOptions({
@@ -1,17 +1,19 @@
1
1
  import {
2
2
  DataEntry,
3
+ DhtAddress,
3
4
  PeerDescriptor,
4
- areEqualPeerDescriptors
5
+ areEqualPeerDescriptors,
6
+ getDhtAddressFromRaw,
7
+ getNodeIdFromPeerDescriptor
5
8
  } from '@streamr/dht'
6
9
  import { StreamPartID } from '@streamr/protocol'
7
10
  import { Logger, scheduleAtInterval, wait } from '@streamr/utils'
8
11
  import { createHash } from 'crypto'
9
- import { NodeID, getNodeIdFromPeerDescriptor } from '../identifiers'
10
12
  import { Any } from '../proto/google/protobuf/any'
11
13
  import { Layer1Node } from './Layer1Node'
12
14
 
13
- export const streamPartIdToDataKey = (streamPartId: StreamPartID): Uint8Array => {
14
- return new Uint8Array(createHash('md5').update(streamPartId).digest())
15
+ export const streamPartIdToDataKey = (streamPartId: StreamPartID): DhtAddress => {
16
+ return getDhtAddressFromRaw(new Uint8Array(createHash('md5').update(streamPartId).digest()))
15
17
  }
16
18
 
17
19
  const parseEntryPointData = (dataEntries: DataEntry[]): PeerDescriptor[] => {
@@ -58,9 +60,9 @@ interface EntryPointDiscoveryConfig {
58
60
  streamPartId: StreamPartID
59
61
  localPeerDescriptor: PeerDescriptor
60
62
  layer1Node: Layer1Node
61
- getEntryPointData: (key: Uint8Array) => Promise<DataEntry[]>
62
- storeEntryPointData: (key: Uint8Array, data: Any) => Promise<PeerDescriptor[]>
63
- deleteEntryPointData: (key: Uint8Array) => Promise<void>
63
+ getEntryPointData: (key: DhtAddress) => Promise<DataEntry[]>
64
+ storeEntryPointData: (key: DhtAddress, data: Any) => Promise<PeerDescriptor[]>
65
+ deleteEntryPointData: (key: DhtAddress) => Promise<void>
64
66
  storeInterval?: number
65
67
  }
66
68
 
@@ -68,7 +70,7 @@ export class EntryPointDiscovery {
68
70
  private readonly abortController: AbortController
69
71
  private readonly config: EntryPointDiscoveryConfig
70
72
  private readonly storeInterval: number
71
- private readonly networkSplitAvoidedNodes: Set<NodeID> = new Set()
73
+ private readonly networkSplitAvoidedNodes: Set<DhtAddress> = new Set()
72
74
  private isLocalNodeStoredAsEntryPoint = false
73
75
  constructor(config: EntryPointDiscoveryConfig) {
74
76
  this.config = config
@@ -106,7 +108,7 @@ export class EntryPointDiscovery {
106
108
  }
107
109
  }
108
110
 
109
- private async queryEntrypoints(key: Uint8Array): Promise<PeerDescriptor[]> {
111
+ private async queryEntrypoints(key: DhtAddress): Promise<PeerDescriptor[]> {
110
112
  logger.trace(`Finding data from dht node ${getNodeIdFromPeerDescriptor(this.config.localPeerDescriptor)}`)
111
113
  try {
112
114
  const result = await this.config.getEntryPointData(key)
@@ -1,13 +1,13 @@
1
- import { DataEntry, ITransport, PeerDescriptor } from '@streamr/dht'
1
+ import { DataEntry, DhtAddress, ITransport, PeerDescriptor } from '@streamr/dht'
2
2
  import { Any } from '../proto/google/protobuf/any'
3
3
 
4
4
  export interface Layer0Node extends ITransport {
5
5
  joinDht(entryPointDescriptors: PeerDescriptor[]): Promise<void>
6
6
  hasJoined(): boolean
7
7
  getLocalPeerDescriptor(): PeerDescriptor
8
- getDataFromDht(key: Uint8Array): Promise<DataEntry[]>
9
- storeDataToDht(key: Uint8Array, data: Any): Promise<PeerDescriptor[]>
10
- deleteDataFromDht(key: Uint8Array, waitForCompletion: boolean): Promise<void>
8
+ getDataFromDht(key: DhtAddress): Promise<DataEntry[]>
9
+ storeDataToDht(key: DhtAddress, data: Any): Promise<PeerDescriptor[]>
10
+ deleteDataFromDht(key: DhtAddress, waitForCompletion: boolean): Promise<void>
11
11
  waitForNetworkConnectivity(): Promise<void>
12
12
  getTransport(): ITransport
13
13
  start(): Promise<void>
@@ -1,25 +1,24 @@
1
- import { PeerDescriptor } from '@streamr/dht'
1
+ import { DhtAddress, PeerDescriptor, getNodeIdFromPeerDescriptor } from '@streamr/dht'
2
2
  import { sample } from 'lodash'
3
3
  import { DeliveryRpcRemote } from './DeliveryRpcRemote'
4
4
  import { EventEmitter } from 'eventemitter3'
5
- import { getNodeIdFromPeerDescriptor, NodeID } from '../identifiers'
6
5
 
7
6
  export interface Events {
8
- nodeAdded: (id: NodeID, remote: DeliveryRpcRemote) => any
7
+ nodeAdded: (id: DhtAddress, remote: DeliveryRpcRemote) => any
9
8
  }
10
9
 
11
- const getValuesOfIncludedKeys = (nodes: Map<NodeID, DeliveryRpcRemote>, exclude: NodeID[]): DeliveryRpcRemote[] => {
10
+ const getValuesOfIncludedKeys = (nodes: Map<DhtAddress, DeliveryRpcRemote>, exclude: DhtAddress[]): DeliveryRpcRemote[] => {
12
11
  return Array.from(nodes.entries())
13
12
  .filter(([id, _node]) => !exclude.includes(id))
14
13
  .map(([_id, node]) => node)
15
14
  }
16
15
 
17
16
  export class NodeList extends EventEmitter<Events> {
18
- private readonly nodes: Map<NodeID, DeliveryRpcRemote>
17
+ private readonly nodes: Map<DhtAddress, DeliveryRpcRemote>
19
18
  private readonly limit: number
20
- private ownId: NodeID
19
+ private ownId: DhtAddress
21
20
 
22
- constructor(ownId: NodeID, limit: number) {
21
+ constructor(ownId: DhtAddress, limit: number) {
23
22
  super()
24
23
  this.nodes = new Map()
25
24
  this.limit = limit
@@ -42,7 +41,7 @@ export class NodeList extends EventEmitter<Events> {
42
41
  this.nodes.delete(getNodeIdFromPeerDescriptor(peerDescriptor))
43
42
  }
44
43
 
45
- removeById(nodeId: NodeID): void {
44
+ removeById(nodeId: DhtAddress): void {
46
45
  this.nodes.delete(nodeId)
47
46
  }
48
47
 
@@ -50,7 +49,7 @@ export class NodeList extends EventEmitter<Events> {
50
49
  return this.nodes.has(getNodeIdFromPeerDescriptor(peerDescriptor))
51
50
  }
52
51
 
53
- hasNodeById(nodeId: NodeID): boolean {
52
+ hasNodeById(nodeId: DhtAddress): boolean {
54
53
  return this.nodes.has(nodeId)
55
54
  }
56
55
 
@@ -62,28 +61,28 @@ export class NodeList extends EventEmitter<Events> {
62
61
  })
63
62
  }
64
63
 
65
- getIds(): NodeID[] {
64
+ getIds(): DhtAddress[] {
66
65
  return Array.from(this.nodes.keys())
67
66
  }
68
67
 
69
- get(id: NodeID): DeliveryRpcRemote | undefined {
68
+ get(id: DhtAddress): DeliveryRpcRemote | undefined {
70
69
  return this.nodes.get(id)
71
70
  }
72
71
 
73
- size(exclude: NodeID[] = []): number {
72
+ size(exclude: DhtAddress[] = []): number {
74
73
  return Array.from(this.nodes.keys()).filter((node) => !exclude.includes(node)).length
75
74
  }
76
75
 
77
- getRandom(exclude: NodeID[]): DeliveryRpcRemote | undefined {
76
+ getRandom(exclude: DhtAddress[]): DeliveryRpcRemote | undefined {
78
77
  return sample(getValuesOfIncludedKeys(this.nodes, exclude))
79
78
  }
80
79
 
81
- getClosest(exclude: NodeID[]): DeliveryRpcRemote | undefined {
80
+ getClosest(exclude: DhtAddress[]): DeliveryRpcRemote | undefined {
82
81
  const included = getValuesOfIncludedKeys(this.nodes, exclude)
83
82
  return included[0]
84
83
  }
85
84
 
86
- getClosestAndFurthest(exclude: NodeID[]): DeliveryRpcRemote[] {
85
+ getClosestAndFurthest(exclude: DhtAddress[]): DeliveryRpcRemote[] {
87
86
  const included = getValuesOfIncludedKeys(this.nodes, exclude)
88
87
  if (included.length === 0) {
89
88
  return []
@@ -91,7 +90,7 @@ export class NodeList extends EventEmitter<Events> {
91
90
  return included.length > 1 ? [this.getClosest(exclude)!, this.getFurthest(exclude)!] : [this.getClosest(exclude)!]
92
91
  }
93
92
 
94
- getFurthest(exclude: NodeID[]): DeliveryRpcRemote | undefined {
93
+ getFurthest(exclude: DhtAddress[]): DeliveryRpcRemote | undefined {
95
94
  const included = getValuesOfIncludedKeys(this.nodes, exclude)
96
95
  return included[included.length - 1]
97
96
  }
@@ -3,7 +3,9 @@ import {
3
3
  PeerDescriptor,
4
4
  ListeningRpcCommunicator,
5
5
  ITransport,
6
- ConnectionLocker
6
+ ConnectionLocker,
7
+ DhtAddress,
8
+ getNodeIdFromPeerDescriptor
7
9
  } from '@streamr/dht'
8
10
  import {
9
11
  StreamMessage,
@@ -28,14 +30,13 @@ import { ProxyConnectionRpcLocal } from './proxy/ProxyConnectionRpcLocal'
28
30
  import { Inspector } from './inspect/Inspector'
29
31
  import { TemporaryConnectionRpcLocal } from './temporary-connection/TemporaryConnectionRpcLocal'
30
32
  import { markAndCheckDuplicate } from './utils'
31
- import { NodeID, getNodeIdFromPeerDescriptor } from '../identifiers'
32
33
  import { Layer1Node } from './Layer1Node'
33
34
  import { StreamPartID } from '@streamr/protocol'
34
35
  import { uniqBy } from 'lodash'
35
36
 
36
37
  export interface Events {
37
38
  message: (message: StreamMessage) => void
38
- targetNeighborConnected: (nodeId: NodeID) => void
39
+ targetNeighborConnected: (nodeId: DhtAddress) => void
39
40
  entryPointLeaveDetected: () => void
40
41
  }
41
42
 
@@ -82,8 +83,8 @@ export class RandomGraphNode extends EventEmitter<Events> {
82
83
  streamPartId: this.config.streamPartId,
83
84
  rpcCommunicator: this.config.rpcCommunicator,
84
85
  markAndCheckDuplicate: (msg: MessageID, prev?: MessageRef) => markAndCheckDuplicate(this.duplicateDetectors, msg, prev),
85
- broadcast: (message: StreamMessage, previousNode?: NodeID) => this.broadcast(message, previousNode),
86
- onLeaveNotice: (sourceId: NodeID, sourceIsStreamEntryPoint: boolean) => {
86
+ broadcast: (message: StreamMessage, previousNode?: DhtAddress) => this.broadcast(message, previousNode),
87
+ onLeaveNotice: (sourceId: DhtAddress, sourceIsStreamEntryPoint: boolean) => {
87
88
  if (this.abortController.signal.aborted) {
88
89
  return
89
90
  }
@@ -104,7 +105,7 @@ export class RandomGraphNode extends EventEmitter<Events> {
104
105
  this.emit('entryPointLeaveDetected')
105
106
  }
106
107
  },
107
- markForInspection: (senderId: NodeID, messageId: MessageID) => this.config.inspector.markMessage(senderId, messageId)
108
+ markForInspection: (senderId: DhtAddress, messageId: MessageID) => this.config.inspector.markMessage(senderId, messageId)
108
109
  })
109
110
  }
110
111
 
@@ -154,7 +155,7 @@ export class RandomGraphNode extends EventEmitter<Events> {
154
155
  addManagedEventListener(
155
156
  this.config.proxyConnectionRpcLocal,
156
157
  'newConnection',
157
- (id: NodeID) => this.config.propagation.onNeighborJoined(id),
158
+ (id: DhtAddress) => this.config.propagation.onNeighborJoined(id),
158
159
  this.abortController.signal
159
160
  )
160
161
  }
@@ -199,7 +200,6 @@ export class RandomGraphNode extends EventEmitter<Events> {
199
200
  new DeliveryRpcRemote(
200
201
  this.config.localPeerDescriptor,
201
202
  descriptor,
202
- this.config.streamPartId,
203
203
  this.config.rpcCommunicator,
204
204
  DeliveryRpcClient,
205
205
  this.config.rpcRequestTimeout
@@ -213,7 +213,6 @@ export class RandomGraphNode extends EventEmitter<Events> {
213
213
  new DeliveryRpcRemote(
214
214
  this.config.localPeerDescriptor,
215
215
  descriptor,
216
- this.config.streamPartId,
217
216
  this.config.rpcCommunicator,
218
217
  DeliveryRpcClient,
219
218
  this.config.rpcRequestTimeout
@@ -231,7 +230,6 @@ export class RandomGraphNode extends EventEmitter<Events> {
231
230
  new DeliveryRpcRemote(
232
231
  this.config.localPeerDescriptor,
233
232
  descriptor,
234
- this.config.streamPartId,
235
233
  this.config.rpcCommunicator,
236
234
  DeliveryRpcClient,
237
235
  this.config.rpcRequestTimeout
@@ -251,7 +249,6 @@ export class RandomGraphNode extends EventEmitter<Events> {
251
249
  new DeliveryRpcRemote(
252
250
  this.config.localPeerDescriptor,
253
251
  descriptor,
254
- this.config.streamPartId,
255
252
  this.config.rpcCommunicator,
256
253
  DeliveryRpcClient,
257
254
  this.config.rpcRequestTimeout
@@ -279,7 +276,7 @@ export class RandomGraphNode extends EventEmitter<Events> {
279
276
  return uniqBy(nodes, (p) => getNodeIdFromPeerDescriptor(p))
280
277
  }
281
278
 
282
- hasProxyConnection(nodeId: NodeID): boolean {
279
+ hasProxyConnection(nodeId: DhtAddress): boolean {
283
280
  if (this.config.proxyConnectionRpcLocal) {
284
281
  return this.config.proxyConnectionRpcLocal.hasConnection(nodeId)
285
282
  }
@@ -292,7 +289,9 @@ export class RandomGraphNode extends EventEmitter<Events> {
292
289
  }
293
290
  this.abortController.abort()
294
291
  this.config.proxyConnectionRpcLocal?.stop()
295
- this.config.targetNeighbors.getAll().map((remote) => remote.leaveStreamPartNotice(this.config.isLocalNodeEntryPoint()))
292
+ this.config.targetNeighbors.getAll().map(
293
+ (remote) => remote.leaveStreamPartNotice(this.config.streamPartId, this.config.isLocalNodeEntryPoint())
294
+ )
296
295
  this.config.rpcCommunicator.destroy()
297
296
  this.removeAllListeners()
298
297
  this.config.nearbyNodeView.stop()
@@ -303,7 +302,7 @@ export class RandomGraphNode extends EventEmitter<Events> {
303
302
  this.config.inspector.stop()
304
303
  }
305
304
 
306
- broadcast(msg: StreamMessage, previousNode?: NodeID): void {
305
+ broadcast(msg: StreamMessage, previousNode?: DhtAddress): void {
307
306
  if (!previousNode) {
308
307
  markAndCheckDuplicate(this.duplicateDetectors, msg.messageId!, msg.previousMessageRef)
309
308
  }
@@ -315,7 +314,7 @@ export class RandomGraphNode extends EventEmitter<Events> {
315
314
  return this.config.inspector.inspect(peerDescriptor)
316
315
  }
317
316
 
318
- private getPropagationTargets(msg: StreamMessage): NodeID[] {
317
+ private getPropagationTargets(msg: StreamMessage): DhtAddress[] {
319
318
  let propagationTargets = this.config.targetNeighbors.getIds()
320
319
  if (this.config.proxyConnectionRpcLocal) {
321
320
  propagationTargets = propagationTargets.concat(this.config.proxyConnectionRpcLocal.getPropagationTargets(msg))
@@ -325,7 +324,7 @@ export class RandomGraphNode extends EventEmitter<Events> {
325
324
  return propagationTargets
326
325
  }
327
326
 
328
- getOwnNodeId(): NodeID {
327
+ getOwnNodeId(): DhtAddress {
329
328
  return getNodeIdFromPeerDescriptor(this.config.localPeerDescriptor)
330
329
  }
331
330
 
@@ -333,7 +332,7 @@ export class RandomGraphNode extends EventEmitter<Events> {
333
332
  return this.config.handshaker.getOngoingHandshakes().size
334
333
  }
335
334
 
336
- getTargetNeighborIds(): NodeID[] {
335
+ getTargetNeighborIds(): DhtAddress[] {
337
336
  if (!this.started && this.isStopped()) {
338
337
  return []
339
338
  }
@@ -3,7 +3,9 @@ import {
3
3
  DhtNode,
4
4
  ITransport,
5
5
  PeerDescriptor,
6
- EXISTING_CONNECTION_TIMEOUT
6
+ EXISTING_CONNECTION_TIMEOUT,
7
+ DhtAddress,
8
+ getNodeIdFromPeerDescriptor
7
9
  } from '@streamr/dht'
8
10
  import { StreamID, StreamPartID, StreamPartIDUtils, toStreamPartID } from '@streamr/protocol'
9
11
  import {
@@ -16,7 +18,6 @@ import {
16
18
  } from '@streamr/utils'
17
19
  import { EventEmitter } from 'eventemitter3'
18
20
  import { sampleSize } from 'lodash'
19
- import { NodeID, getNodeIdFromPeerDescriptor } from '../identifiers'
20
21
  import { ProxyDirection, StreamMessage } from '../proto/packages/trackerless-network/protos/NetworkRpc'
21
22
  import { Layer0Node } from './Layer0Node'
22
23
  import { Layer1Node } from './Layer1Node'
@@ -136,7 +137,7 @@ export class StreamrNode extends EventEmitter<Events> {
136
137
  layer1Node,
137
138
  getEntryPointData: (key) => this.layer0Node!.getDataFromDht(key),
138
139
  storeEntryPointData: (key, data) => this.layer0Node!.storeDataToDht(key, data),
139
- deleteEntryPointData: async (key: Uint8Array) => this.layer0Node!.deleteDataFromDht(key, false)
140
+ deleteEntryPointData: async (key) => this.layer0Node!.deleteDataFromDht(key, false)
140
141
  })
141
142
  const node = this.createRandomGraphNode(
142
143
  streamPartId,
@@ -305,11 +306,11 @@ export class StreamrNode extends EventEmitter<Events> {
305
306
  return this.layer0Node!.getLocalPeerDescriptor()
306
307
  }
307
308
 
308
- getNodeId(): NodeID {
309
+ getNodeId(): DhtAddress {
309
310
  return getNodeIdFromPeerDescriptor(this.layer0Node!.getLocalPeerDescriptor())
310
311
  }
311
312
 
312
- getNeighbors(streamPartId: StreamPartID): NodeID[] {
313
+ getNeighbors(streamPartId: StreamPartID): DhtAddress[] {
313
314
  const streamPart = this.streamParts.get(streamPartId)
314
315
  return (streamPart !== undefined) && (streamPart.proxied === false)
315
316
  ? streamPart.node.getTargetNeighborIds()
@@ -1,4 +1,4 @@
1
- import { ListeningRpcCommunicator } from '@streamr/dht'
1
+ import { DhtAddress, ListeningRpcCommunicator, getNodeIdFromPeerDescriptor } 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'
@@ -10,7 +10,6 @@ import { MarkOptional } from 'ts-essentials'
10
10
  import { ProxyConnectionRpcLocal } from './proxy/ProxyConnectionRpcLocal'
11
11
  import { Inspector } from './inspect/Inspector'
12
12
  import { TemporaryConnectionRpcLocal } from './temporary-connection/TemporaryConnectionRpcLocal'
13
- import { NodeID, getNodeIdFromPeerDescriptor } from '../identifiers'
14
13
  import { formStreamPartDeliveryServiceId } from './formStreamPartDeliveryServiceId'
15
14
 
16
15
  type RandomGraphNodeConfig = MarkOptional<StrictRandomGraphNodeConfig,
@@ -40,7 +39,6 @@ const createConfigWithDefaults = (config: RandomGraphNodeConfig): StrictRandomGr
40
39
  const targetNeighbors = config.targetNeighbors ?? new NodeList(ownNodeId, maxNumberOfContacts)
41
40
 
42
41
  const temporaryConnectionRpcLocal = new TemporaryConnectionRpcLocal({
43
- streamPartId: config.streamPartId,
44
42
  rpcCommunicator,
45
43
  localPeerDescriptor: config.localPeerDescriptor
46
44
  })
@@ -51,7 +49,7 @@ const createConfigWithDefaults = (config: RandomGraphNodeConfig): StrictRandomGr
51
49
  }) : undefined
52
50
  const propagation = config.propagation ?? new Propagation({
53
51
  minPropagationTargets,
54
- sendToNeighbor: async (neighborId: NodeID, msg: StreamMessage): Promise<void> => {
52
+ sendToNeighbor: async (neighborId: DhtAddress, msg: StreamMessage): Promise<void> => {
55
53
  const remote = targetNeighbors.get(neighborId) ?? temporaryConnectionRpcLocal.getNodes().get(neighborId)
56
54
  const proxyConnection = proxyConnectionRpcLocal?.getConnection(neighborId)
57
55
  if (remote) {
@@ -1,14 +1,14 @@
1
1
  import { EventEmitter } from 'eventemitter3'
2
- import { NodeID } from '../../identifiers'
3
2
  import { MessageID } from '../../proto/packages/trackerless-network/protos/NetworkRpc'
4
3
  import { binaryToHex } from '@streamr/utils'
4
+ import { DhtAddress } from '@streamr/dht'
5
5
 
6
6
  export interface Events {
7
7
  done: () => void
8
8
  }
9
9
 
10
10
  interface InspectSessionConfig {
11
- inspectedNode: NodeID
11
+ inspectedNode: DhtAddress
12
12
  }
13
13
 
14
14
  const createMessageKey = (messageId: MessageID): string => {
@@ -18,14 +18,14 @@ export class InspectSession extends EventEmitter<Events> {
18
18
 
19
19
  // Boolean indicates if the message has been received by the inspected node
20
20
  private readonly inspectionMessages: Map<string, boolean> = new Map()
21
- private readonly inspectedNode: NodeID
21
+ private readonly inspectedNode: DhtAddress
22
22
 
23
23
  constructor(config: InspectSessionConfig) {
24
24
  super()
25
25
  this.inspectedNode = config.inspectedNode
26
26
  }
27
27
 
28
- markMessage(senderId: NodeID, messageId: MessageID): void {
28
+ markMessage(senderId: DhtAddress, messageId: MessageID): void {
29
29
  const messageKey = createMessageKey(messageId)
30
30
  if (!this.inspectionMessages.has(messageKey)) {
31
31
  this.inspectionMessages.set(messageKey, senderId === this.inspectedNode)
@@ -1,11 +1,10 @@
1
- import { PeerDescriptor, ConnectionLocker, LockID } from '@streamr/dht'
1
+ import { PeerDescriptor, ConnectionLocker, LockID, DhtAddress, getNodeIdFromPeerDescriptor } from '@streamr/dht'
2
2
  import { MessageID } from '../../proto/packages/trackerless-network/protos/NetworkRpc'
3
3
  import { InspectSession, Events as InspectSessionEvents } from './InspectSession'
4
4
  import { TemporaryConnectionRpcClient } from '../../proto/packages/trackerless-network/protos/NetworkRpc.client'
5
5
  import { RpcCommunicator } from '@streamr/proto-rpc'
6
6
  import { Logger, waitForEvent3 } from '@streamr/utils'
7
7
  import { TemporaryConnectionRpcRemote } from '../temporary-connection/TemporaryConnectionRpcRemote'
8
- import { NodeID, getNodeIdFromPeerDescriptor } from '../../identifiers'
9
8
  import { StreamPartID } from '@streamr/protocol'
10
9
 
11
10
  interface InspectorConfig {
@@ -22,7 +21,7 @@ const DEFAULT_TIMEOUT = 60 * 1000
22
21
 
23
22
  export class Inspector {
24
23
 
25
- private readonly sessions: Map<NodeID, InspectSession> = new Map()
24
+ private readonly sessions: Map<DhtAddress, InspectSession> = new Map()
26
25
  private readonly streamPartId: StreamPartID
27
26
  private readonly localPeerDescriptor: PeerDescriptor
28
27
  private readonly rpcCommunicator: RpcCommunicator
@@ -43,7 +42,6 @@ export class Inspector {
43
42
  const rpcRemote = new TemporaryConnectionRpcRemote(
44
43
  this.localPeerDescriptor,
45
44
  peerDescriptor,
46
- this.streamPartId,
47
45
  this.rpcCommunicator,
48
46
  TemporaryConnectionRpcClient
49
47
  )
@@ -72,11 +70,11 @@ export class Inspector {
72
70
  return success || session.getInspectedMessageCount() < 1
73
71
  }
74
72
 
75
- markMessage(sender: NodeID, messageId: MessageID): void {
73
+ markMessage(sender: DhtAddress, messageId: MessageID): void {
76
74
  this.sessions.forEach((session) => session.markMessage(sender, messageId))
77
75
  }
78
76
 
79
- isInspected(nodeId: NodeID): boolean {
77
+ isInspected(nodeId: DhtAddress): boolean {
80
78
  return this.sessions.has(nodeId)
81
79
  }
82
80
 
@@ -6,24 +6,31 @@ import {
6
6
  } from '../../proto/packages/trackerless-network/protos/NetworkRpc'
7
7
  import { ServerCallContext } from '@protobuf-ts/runtime-rpc'
8
8
  import { NodeList } from '../NodeList'
9
- import { ConnectionLocker, DhtCallContext, PeerDescriptor } from '@streamr/dht'
9
+ import {
10
+ ConnectionLocker,
11
+ DhtAddress,
12
+ DhtAddressRaw,
13
+ DhtCallContext,
14
+ PeerDescriptor,
15
+ getDhtAddressFromRaw,
16
+ getNodeIdFromPeerDescriptor
17
+ } from '@streamr/dht'
10
18
  import { IHandshakeRpc } from '../../proto/packages/trackerless-network/protos/NetworkRpc.server'
11
19
  import { HandshakeRpcRemote } from './HandshakeRpcRemote'
12
20
  import { DeliveryRpcRemote } from '../DeliveryRpcRemote'
13
- import { NodeID, getNodeIdFromPeerDescriptor } from '../../identifiers'
14
- import { Logger, binaryToHex } from '@streamr/utils'
21
+ import { Logger } from '@streamr/utils'
15
22
  import { StreamPartID } from '@streamr/protocol'
16
23
 
17
24
  interface HandshakeRpcLocalConfig {
18
25
  streamPartId: StreamPartID
19
26
  targetNeighbors: NodeList
20
27
  connectionLocker: ConnectionLocker
21
- ongoingHandshakes: Set<NodeID>
22
- ongoingInterleaves: Set<NodeID>
28
+ ongoingHandshakes: Set<DhtAddress>
29
+ ongoingInterleaves: Set<DhtAddress>
23
30
  maxNeighborCount: number
24
31
  createRpcRemote: (target: PeerDescriptor) => HandshakeRpcRemote
25
32
  createDeliveryRpcRemote: (peerDescriptor: PeerDescriptor) => DeliveryRpcRemote
26
- handshakeWithInterleaving: (target: PeerDescriptor, senderId: NodeID) => Promise<boolean>
33
+ handshakeWithInterleaving: (target: PeerDescriptor, senderId: DhtAddress) => Promise<boolean>
27
34
  }
28
35
 
29
36
  const logger = new Logger(module)
@@ -42,7 +49,7 @@ export class HandshakeRpcLocal implements IHandshakeRpc {
42
49
 
43
50
  private handleRequest(request: StreamPartHandshakeRequest, context: ServerCallContext): StreamPartHandshakeResponse {
44
51
  const senderDescriptor = (context as DhtCallContext).incomingSourceDescriptor!
45
- const getInterleaveSourceIds = () => (request.interleaveSourceId !== undefined) ? [binaryToHex(request.interleaveSourceId) as NodeID] : []
52
+ const getInterleaveSourceIds = () => (request.interleaveSourceId !== undefined) ? [getDhtAddressFromRaw(request.interleaveSourceId)] : []
46
53
  if (this.config.ongoingInterleaves.has(getNodeIdFromPeerDescriptor(senderDescriptor))) {
47
54
  return this.rejectHandshake(request)
48
55
  } else if (this.config.targetNeighbors.hasNode(senderDescriptor)
@@ -80,12 +87,12 @@ export class HandshakeRpcLocal implements IHandshakeRpc {
80
87
  }
81
88
 
82
89
  private acceptHandshakeWithInterleaving(request: StreamPartHandshakeRequest, requester: PeerDescriptor): StreamPartHandshakeResponse {
83
- const exclude: NodeID[] = []
84
- request.neighborIds.forEach((id: Uint8Array) => exclude.push(binaryToHex(id) as NodeID))
90
+ const exclude: DhtAddress[] = []
91
+ request.neighborIds.forEach((id: DhtAddressRaw) => exclude.push(getDhtAddressFromRaw(id)))
85
92
  this.config.ongoingInterleaves.forEach((id) => exclude.push(id))
86
93
  exclude.push(getNodeIdFromPeerDescriptor(requester))
87
94
  if (request.interleaveSourceId !== undefined) {
88
- exclude.push(binaryToHex(request.interleaveSourceId) as NodeID)
95
+ exclude.push(getDhtAddressFromRaw(request.interleaveSourceId))
89
96
  }
90
97
  const furthest = this.config.targetNeighbors.getFurthest(exclude)
91
98
  const furthestPeerDescriptor = furthest ? furthest.getPeerDescriptor() : undefined
@@ -1,9 +1,9 @@
1
- import { PeerDescriptor, RpcRemote } from '@streamr/dht'
2
- import { Logger, hexToBinary } from '@streamr/utils'
1
+ import { DhtAddress, PeerDescriptor, RpcRemote, getNodeIdFromPeerDescriptor, getRawFromDhtAddress } from '@streamr/dht'
2
+ import { Logger } from '@streamr/utils'
3
3
  import { v4 } from 'uuid'
4
- import { NodeID, getNodeIdFromPeerDescriptor } from '../../identifiers'
5
4
  import { InterleaveRequest, InterleaveResponse, StreamPartHandshakeRequest } from '../../proto/packages/trackerless-network/protos/NetworkRpc'
6
5
  import { HandshakeRpcClient } from '../../proto/packages/trackerless-network/protos/NetworkRpc.client'
6
+ import { StreamPartID } from '@streamr/protocol'
7
7
 
8
8
  const logger = new Logger(module)
9
9
 
@@ -17,16 +17,17 @@ export const INTERLEAVE_REQUEST_TIMEOUT = 15000
17
17
  export class HandshakeRpcRemote extends RpcRemote<HandshakeRpcClient> {
18
18
 
19
19
  async handshake(
20
- neighborIds: NodeID[],
21
- concurrentHandshakeTargetId?: NodeID,
22
- interleaveSourceId?: NodeID
20
+ streamPartId: StreamPartID,
21
+ neighborIds: DhtAddress[],
22
+ concurrentHandshakeTargetId?: DhtAddress,
23
+ interleaveSourceId?: DhtAddress
23
24
  ): Promise<HandshakeResponse> {
24
25
  const request: StreamPartHandshakeRequest = {
25
- streamPartId: this.getServiceId(),
26
+ streamPartId,
26
27
  requestId: v4(),
27
- neighborIds: neighborIds.map((id) => hexToBinary(id)),
28
- concurrentHandshakeTargetId: (concurrentHandshakeTargetId !== undefined) ? hexToBinary(concurrentHandshakeTargetId) : undefined,
29
- interleaveSourceId: (interleaveSourceId !== undefined) ? hexToBinary(interleaveSourceId) : undefined
28
+ neighborIds: neighborIds.map((id) => getRawFromDhtAddress(id)),
29
+ concurrentHandshakeTargetId: (concurrentHandshakeTargetId !== undefined) ? getRawFromDhtAddress(concurrentHandshakeTargetId) : undefined,
30
+ interleaveSourceId: (interleaveSourceId !== undefined) ? getRawFromDhtAddress(interleaveSourceId) : undefined
30
31
  }
31
32
  try {
32
33
  const response = await this.getClient().handshake(request, this.formDhtRpcOptions())