@streamr/trackerless-network 100.0.0-testnet-three.6 → 100.0.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 (110) hide show
  1. package/dist/package.json +7 -7
  2. package/dist/src/NetworkStack.d.ts +3 -3
  3. package/dist/src/NetworkStack.js +6 -6
  4. package/dist/src/NetworkStack.js.map +1 -1
  5. package/dist/src/exports.d.ts +2 -2
  6. package/dist/src/exports.js +7 -1
  7. package/dist/src/exports.js.map +1 -1
  8. package/dist/src/logic/EntryPointDiscovery.d.ts +1 -1
  9. package/dist/src/logic/EntryPointDiscovery.js +2 -2
  10. package/dist/src/logic/EntryPointDiscovery.js.map +1 -1
  11. package/dist/src/logic/Layer0Node.d.ts +1 -1
  12. package/dist/src/logic/Layer1Node.d.ts +7 -1
  13. package/dist/src/logic/NodeList.d.ts +2 -1
  14. package/dist/src/logic/NodeList.js +7 -2
  15. package/dist/src/logic/NodeList.js.map +1 -1
  16. package/dist/src/logic/RandomGraphNode.d.ts +3 -0
  17. package/dist/src/logic/RandomGraphNode.js +26 -4
  18. package/dist/src/logic/RandomGraphNode.js.map +1 -1
  19. package/dist/src/logic/StreamrNode.js +9 -4
  20. package/dist/src/logic/StreamrNode.js.map +1 -1
  21. package/dist/src/logic/createRandomGraphNode.d.ts +1 -1
  22. package/dist/src/logic/createRandomGraphNode.js +15 -6
  23. package/dist/src/logic/createRandomGraphNode.js.map +1 -1
  24. package/dist/src/logic/inspect/Inspector.js +2 -2
  25. package/dist/src/logic/inspect/Inspector.js.map +1 -1
  26. package/dist/src/logic/neighbor-discovery/HandshakeRpcLocal.d.ts +1 -2
  27. package/dist/src/logic/neighbor-discovery/HandshakeRpcLocal.js +3 -8
  28. package/dist/src/logic/neighbor-discovery/HandshakeRpcLocal.js.map +1 -1
  29. package/dist/src/logic/neighbor-discovery/Handshaker.d.ts +3 -2
  30. package/dist/src/logic/neighbor-discovery/Handshaker.js +29 -10
  31. package/dist/src/logic/neighbor-discovery/Handshaker.js.map +1 -1
  32. package/dist/src/logic/neighbor-discovery/NeighborFinder.d.ts +3 -0
  33. package/dist/src/logic/neighbor-discovery/NeighborFinder.js +7 -1
  34. package/dist/src/logic/neighbor-discovery/NeighborFinder.js.map +1 -1
  35. package/dist/src/logic/neighbor-discovery/NeighborUpdateManager.d.ts +1 -2
  36. package/dist/src/logic/neighbor-discovery/NeighborUpdateManager.js +0 -1
  37. package/dist/src/logic/neighbor-discovery/NeighborUpdateManager.js.map +1 -1
  38. package/dist/src/logic/neighbor-discovery/NeighborUpdateRpcLocal.d.ts +1 -2
  39. package/dist/src/logic/neighbor-discovery/NeighborUpdateRpcLocal.js +0 -1
  40. package/dist/src/logic/neighbor-discovery/NeighborUpdateRpcLocal.js.map +1 -1
  41. package/dist/src/logic/protocol-integration/stream-message/GroupKeyResponseTranslator.js.map +1 -1
  42. package/dist/src/logic/protocol-integration/stream-message/StreamMessageTranslator.js +58 -52
  43. package/dist/src/logic/protocol-integration/stream-message/StreamMessageTranslator.js.map +1 -1
  44. package/dist/src/logic/protocol-integration/stream-message/oldStreamMessageBinaryUtils.d.ts +5 -1
  45. package/dist/src/logic/protocol-integration/stream-message/oldStreamMessageBinaryUtils.js +19 -1
  46. package/dist/src/logic/protocol-integration/stream-message/oldStreamMessageBinaryUtils.js.map +1 -1
  47. package/dist/src/logic/proxy/ProxyConnectionRpcLocal.js +2 -2
  48. package/dist/src/logic/proxy/ProxyConnectionRpcLocal.js.map +1 -1
  49. package/dist/src/logic/temporary-connection/TemporaryConnectionRpcLocal.d.ts +5 -1
  50. package/dist/src/logic/temporary-connection/TemporaryConnectionRpcLocal.js +5 -0
  51. package/dist/src/logic/temporary-connection/TemporaryConnectionRpcLocal.js.map +1 -1
  52. package/dist/src/proto/packages/dht/protos/DhtRpc.client.d.ts +6 -6
  53. package/dist/src/proto/packages/dht/protos/DhtRpc.client.js +2 -2
  54. package/dist/src/proto/packages/dht/protos/DhtRpc.client.js.map +1 -1
  55. package/dist/src/proto/packages/dht/protos/DhtRpc.d.ts +54 -87
  56. package/dist/src/proto/packages/dht/protos/DhtRpc.js +17 -49
  57. package/dist/src/proto/packages/dht/protos/DhtRpc.js.map +1 -1
  58. package/dist/src/proto/packages/dht/protos/DhtRpc.server.d.ts +4 -4
  59. package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.d.ts +53 -21
  60. package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.js +24 -11
  61. package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.js.map +1 -1
  62. package/dist/test/benchmark/first-message.js +1 -1
  63. package/dist/test/benchmark/first-message.js.map +1 -1
  64. package/dist/test/utils/utils.js +9 -5
  65. package/dist/test/utils/utils.js.map +1 -1
  66. package/package.json +7 -7
  67. package/protos/NetworkRpc.proto +16 -9
  68. package/src/NetworkStack.ts +9 -9
  69. package/src/exports.ts +6 -2
  70. package/src/logic/EntryPointDiscovery.ts +3 -3
  71. package/src/logic/Layer0Node.ts +1 -1
  72. package/src/logic/Layer1Node.ts +16 -1
  73. package/src/logic/NodeList.ts +9 -3
  74. package/src/logic/RandomGraphNode.ts +74 -10
  75. package/src/logic/StreamrNode.ts +9 -4
  76. package/src/logic/createRandomGraphNode.ts +16 -7
  77. package/src/logic/inspect/Inspector.ts +2 -2
  78. package/src/logic/neighbor-discovery/HandshakeRpcLocal.ts +5 -10
  79. package/src/logic/neighbor-discovery/Handshaker.ts +32 -12
  80. package/src/logic/neighbor-discovery/NeighborFinder.ts +10 -1
  81. package/src/logic/neighbor-discovery/NeighborUpdateManager.ts +1 -3
  82. package/src/logic/neighbor-discovery/NeighborUpdateRpcLocal.ts +1 -3
  83. package/src/logic/protocol-integration/stream-message/GroupKeyResponseTranslator.ts +0 -1
  84. package/src/logic/protocol-integration/stream-message/StreamMessageTranslator.ts +59 -62
  85. package/src/logic/protocol-integration/stream-message/oldStreamMessageBinaryUtils.ts +28 -2
  86. package/src/logic/proxy/ProxyConnectionRpcLocal.ts +3 -5
  87. package/src/logic/temporary-connection/TemporaryConnectionRpcLocal.ts +10 -2
  88. package/src/proto/packages/dht/protos/DhtRpc.client.ts +7 -7
  89. package/src/proto/packages/dht/protos/DhtRpc.server.ts +4 -4
  90. package/src/proto/packages/dht/protos/DhtRpc.ts +64 -100
  91. package/src/proto/packages/trackerless-network/protos/NetworkRpc.ts +69 -31
  92. package/test/benchmark/StreamPartIdDataKeyDistribution.test.ts +60 -0
  93. package/test/benchmark/first-message.ts +1 -1
  94. package/test/end-to-end/proxy-key-exchange.test.ts +13 -10
  95. package/test/integration/Handshakes.test.ts +7 -3
  96. package/test/integration/stream-without-default-entrypoints.test.ts +1 -1
  97. package/test/integration/streamEntryPointReplacing.test.ts +5 -5
  98. package/test/unit/EntrypointDiscovery.test.ts +4 -4
  99. package/test/unit/HandshakeRpcLocal.test.ts +18 -2
  100. package/test/unit/Handshaker.test.ts +8 -3
  101. package/test/unit/NeighborFinder.test.ts +3 -0
  102. package/test/unit/NeighborUpdateRpcLocal.test.ts +0 -4
  103. package/test/unit/Propagation.test.ts +10 -7
  104. package/test/unit/StreamMessageTranslator.test.ts +3 -4
  105. package/test/unit/StreamPartIDDataKey.test.ts +12 -0
  106. package/test/unit/TemporaryConnectionRpcLocal.test.ts +7 -1
  107. package/test/utils/mock/MockLayer0Node.ts +1 -1
  108. package/test/utils/mock/MockLayer1Node.ts +3 -0
  109. package/test/utils/utils.ts +10 -7
  110. package/test/unit/GroupKeyRequestTranslator.test.ts +0 -36
@@ -1,5 +1,5 @@
1
1
  import { NeighborUpdate } from '../../proto/packages/trackerless-network/protos/NetworkRpc'
2
- import { ConnectionLocker, DhtAddress, ListeningRpcCommunicator, PeerDescriptor, getNodeIdFromPeerDescriptor } from '@streamr/dht'
2
+ import { DhtAddress, ListeningRpcCommunicator, PeerDescriptor, getNodeIdFromPeerDescriptor } from '@streamr/dht'
3
3
  import { NeighborUpdateRpcClient } from '../../proto/packages/trackerless-network/protos/NetworkRpc.client'
4
4
  import { Logger, scheduleAtInterval } from '@streamr/utils'
5
5
  import { NeighborFinder } from './NeighborFinder'
@@ -13,7 +13,6 @@ interface NeighborUpdateManagerConfig {
13
13
  neighbors: NodeList
14
14
  nearbyNodeView: NodeList
15
15
  neighborFinder: NeighborFinder
16
- connectionLocker: ConnectionLocker
17
16
  streamPartId: StreamPartID
18
17
  rpcCommunicator: ListeningRpcCommunicator
19
18
  neighborUpdateInterval: number
@@ -53,7 +52,6 @@ export class NeighborUpdateManager {
53
52
  if (res.removeMe) {
54
53
  const nodeId = getNodeIdFromPeerDescriptor(neighbor.getPeerDescriptor())
55
54
  this.config.neighbors.remove(nodeId)
56
- this.config.connectionLocker.unlockConnection(neighbor.getPeerDescriptor(), this.config.streamPartId)
57
55
  this.config.neighborFinder.start([nodeId])
58
56
  }
59
57
  }))
@@ -1,5 +1,5 @@
1
1
  import { ServerCallContext } from '@protobuf-ts/runtime-rpc'
2
- import { ConnectionLocker, DhtAddress, DhtCallContext, ListeningRpcCommunicator, PeerDescriptor, getNodeIdFromPeerDescriptor } from '@streamr/dht'
2
+ import { DhtAddress, DhtCallContext, ListeningRpcCommunicator, PeerDescriptor, getNodeIdFromPeerDescriptor } from '@streamr/dht'
3
3
  import { NeighborUpdate } from '../../proto/packages/trackerless-network/protos/NetworkRpc'
4
4
  import { DeliveryRpcClient } from '../../proto/packages/trackerless-network/protos/NetworkRpc.client'
5
5
  import { INeighborUpdateRpc } from '../../proto/packages/trackerless-network/protos/NetworkRpc.server'
@@ -14,7 +14,6 @@ interface NeighborUpdateRpcLocalConfig {
14
14
  neighbors: NodeList
15
15
  nearbyNodeView: NodeList
16
16
  neighborFinder: NeighborFinder
17
- connectionLocker: ConnectionLocker
18
17
  rpcCommunicator: ListeningRpcCommunicator
19
18
  neighborTargetCount: number
20
19
  ongoingHandshakes: Set<DhtAddress>
@@ -69,7 +68,6 @@ export class NeighborUpdateRpcLocal implements INeighborUpdateRpc {
69
68
  this.config.neighborFinder.start()
70
69
  } else {
71
70
  this.config.neighbors.remove(senderId)
72
- this.config.connectionLocker.unlockConnection(senderPeerDescriptor, this.config.streamPartId)
73
71
  }
74
72
  return this.createResponse(isOverNeighborCount)
75
73
  }
@@ -6,7 +6,6 @@ import { toEthereumAddress, binaryToHex, hexToBinary } from '@streamr/utils'
6
6
  export class GroupKeyResponseTranslator {
7
7
 
8
8
  static toProtobuf(msg: OldGroupKeyResponse): GroupKeyResponse {
9
-
10
9
  const groupKeys = msg.encryptedGroupKeys.map((groupKey) => {
11
10
  return {
12
11
  data: groupKey.data,
@@ -7,11 +7,7 @@ import {
7
7
  StreamID,
8
8
  EncryptionType as OldEncryptionType,
9
9
  SignatureType as OldSignatureType,
10
- ContentType as OldContentType,
11
- serializeGroupKeyRequest as serializeOldGroupKeyRequest,
12
- serializeGroupKeyResponse as serializeOldGroupKeyResponse,
13
- deserializeGroupKeyRequest as deserializeOldGroupKeyRequest,
14
- deserializeGroupKeyResponse as deserializeOldGroupKeyResponse
10
+ ContentType as OldContentType
15
11
  } from '@streamr/protocol'
16
12
  import {
17
13
  ContentType,
@@ -22,12 +18,9 @@ import {
22
18
  MessageRef,
23
19
  SignatureType,
24
20
  StreamMessage,
25
- StreamMessageType,
26
21
  MessageID
27
22
  } from '../../../proto/packages/trackerless-network/protos/NetworkRpc'
28
23
  import { toEthereumAddress, binaryToHex, hexToBinary } from '@streamr/utils'
29
- import { GroupKeyRequestTranslator } from './GroupKeyRequestTranslator'
30
- import { GroupKeyResponseTranslator } from './GroupKeyResponseTranslator'
31
24
 
32
25
  const oldToNewEncryptionType = (type: OldEncryptionType): EncryptionType => {
33
26
  if (type === OldEncryptionType.AES) {
@@ -76,24 +69,6 @@ const newToOldSignatureType = (type: SignatureType): OldSignatureType => {
76
69
  export class StreamMessageTranslator {
77
70
 
78
71
  static toProtobuf(msg: OldStreamMessage): StreamMessage {
79
- let content: Uint8Array
80
- let messageType: StreamMessageType
81
- if (msg.messageType === OldStreamMessageType.MESSAGE) {
82
- content = msg.content
83
- messageType = StreamMessageType.MESSAGE
84
- } else if (msg.messageType === OldStreamMessageType.GROUP_KEY_REQUEST) {
85
- content = GroupKeyRequest.toBinary(
86
- GroupKeyRequestTranslator.toProtobuf(deserializeOldGroupKeyRequest(msg.content))
87
- )
88
- messageType = StreamMessageType.GROUP_KEY_REQUEST
89
- } else if (msg.messageType === OldStreamMessageType.GROUP_KEY_RESPONSE) {
90
- content = GroupKeyResponse.toBinary(
91
- GroupKeyResponseTranslator.toProtobuf(deserializeOldGroupKeyResponse(msg.content))
92
- )
93
- messageType = StreamMessageType.GROUP_KEY_RESPONSE
94
- } else {
95
- throw new Error('invalid message type')
96
- }
97
72
  const messageId: MessageID = {
98
73
  timestamp: msg.getTimestamp(),
99
74
  sequenceNumber: msg.getSequenceNumber(),
@@ -106,52 +81,81 @@ export class StreamMessageTranslator {
106
81
  if (msg.prevMsgRef) {
107
82
  previousMessageRef = {
108
83
  timestamp: msg.prevMsgRef.timestamp,
109
- sequenceNumber: msg.prevMsgRef.sequenceNumber,
84
+ sequenceNumber: msg.prevMsgRef.sequenceNumber
110
85
  }
111
86
  }
112
- let newGroupKey: GroupKey | undefined = undefined
113
- if (msg.newGroupKey) {
114
- newGroupKey = {
115
- id: msg.newGroupKey.id,
116
- data: msg.newGroupKey.data
87
+ let body: StreamMessage['body']
88
+ if (msg.messageType === OldStreamMessageType.MESSAGE) {
89
+ let newGroupKey: GroupKey | undefined = undefined
90
+ if (msg.newGroupKey) {
91
+ newGroupKey = {
92
+ id: msg.newGroupKey.id,
93
+ data: msg.newGroupKey.data
94
+ }
95
+ }
96
+ body = {
97
+ oneofKind: 'contentMessage',
98
+ contentMessage: {
99
+ content: msg.content,
100
+ contentType: oldToNewContentType(msg.contentType),
101
+ encryptionType: oldToNewEncryptionType(msg.encryptionType),
102
+ groupKeyId: msg.groupKeyId ?? undefined,
103
+ newGroupKey
104
+ }
105
+ }
106
+ } else if (msg.messageType === OldStreamMessageType.GROUP_KEY_REQUEST) {
107
+ body = {
108
+ oneofKind: 'groupKeyRequest',
109
+ groupKeyRequest: GroupKeyRequest.fromBinary(msg.content)
110
+ }
111
+ } else if (msg.messageType === OldStreamMessageType.GROUP_KEY_RESPONSE) {
112
+ body = {
113
+ oneofKind: 'groupKeyResponse',
114
+ groupKeyResponse: GroupKeyResponse.fromBinary(msg.content)
117
115
  }
116
+ } else {
117
+ throw new Error('invalid message type')
118
118
  }
119
119
  const translated: StreamMessage = {
120
120
  messageId,
121
121
  previousMessageRef,
122
- content,
123
- messageType,
124
- contentType: oldToNewContentType(msg.contentType),
125
- encryptionType: oldToNewEncryptionType(msg.encryptionType),
126
- groupKeyId: msg.groupKeyId ?? undefined,
127
- newGroupKey,
128
122
  signature: msg.signature,
129
123
  signatureType: oldToNewSignatureType(msg.signatureType),
124
+ body
130
125
  }
131
126
  return translated
132
127
  }
133
128
 
134
129
  static toClientProtocol(msg: StreamMessage): OldStreamMessage {
135
- let content: Uint8Array
136
130
  let messageType: OldStreamMessageType
137
- if (msg.messageType === StreamMessageType.MESSAGE) {
131
+ let content: Uint8Array
132
+ let contentType: OldContentType = OldContentType.BINARY
133
+ let encryptionType: OldEncryptionType = OldEncryptionType.NONE
134
+ let newGroupKey: OldEncryptedGroupKey | undefined = undefined
135
+ let groupKeyId: string | undefined = undefined
136
+ if (msg.body.oneofKind === 'contentMessage') {
138
137
  messageType = OldStreamMessageType.MESSAGE
139
- content = msg.content
140
- } else if (msg.messageType === StreamMessageType.GROUP_KEY_REQUEST) {
138
+ content = msg.body.contentMessage.content
139
+ contentType = newToOldContentType(msg.body.contentMessage.contentType)
140
+ encryptionType = newToOldEncryptionType(msg.body.contentMessage.encryptionType)
141
+ if (msg.body.contentMessage.newGroupKey) {
142
+ newGroupKey = new OldEncryptedGroupKey(
143
+ msg.body.contentMessage.newGroupKey.id,
144
+ msg.body.contentMessage.newGroupKey.data
145
+ )
146
+ }
147
+ groupKeyId = msg.body.contentMessage.groupKeyId
148
+ } else if (msg.body.oneofKind === 'groupKeyRequest') {
141
149
  messageType = OldStreamMessageType.GROUP_KEY_REQUEST
142
150
  try {
143
- const parsedRequest = GroupKeyRequest.fromBinary(msg.content)
144
- const oldGroupKeyRequest = GroupKeyRequestTranslator.toClientProtocol(parsedRequest)
145
- content = serializeOldGroupKeyRequest(oldGroupKeyRequest)
151
+ content = GroupKeyRequest.toBinary(msg.body.groupKeyRequest)
146
152
  } catch (err) {
147
153
  throw new Error(`invalid group key request: ${err}`)
148
154
  }
149
- } else if (msg.messageType === StreamMessageType.GROUP_KEY_RESPONSE) {
155
+ } else if (msg.body.oneofKind === 'groupKeyResponse') {
150
156
  messageType = OldStreamMessageType.GROUP_KEY_RESPONSE
151
157
  try {
152
- const parsedResponse = GroupKeyResponse.fromBinary(msg.content)
153
- const oldGroupKeyResponse = GroupKeyResponseTranslator.toClientProtocol(parsedResponse)
154
- content = serializeOldGroupKeyResponse(oldGroupKeyResponse)
158
+ content = GroupKeyResponse.toBinary(msg.body.groupKeyResponse)
155
159
  } catch (err) {
156
160
  throw new Error(`invalid group key response: ${err}`)
157
161
  }
@@ -170,24 +174,17 @@ export class StreamMessageTranslator {
170
174
  if (msg.previousMessageRef) {
171
175
  prevMsgRef = new OldMessageRef(Number(msg.previousMessageRef.timestamp), msg.previousMessageRef.sequenceNumber)
172
176
  }
173
- let newGroupKey: OldEncryptedGroupKey | undefined = undefined
174
- if (msg.newGroupKey) {
175
- newGroupKey = new OldEncryptedGroupKey(
176
- msg.newGroupKey.id,
177
- msg.newGroupKey.data,
178
- )
179
- }
180
177
  const translated = new OldStreamMessage({
181
178
  messageId,
182
179
  prevMsgRef,
183
- content,
184
180
  messageType,
185
- contentType: newToOldContentType(msg.contentType),
186
- encryptionType: newToOldEncryptionType(msg.encryptionType),
187
- groupKeyId: msg.groupKeyId,
188
- newGroupKey,
181
+ content,
182
+ contentType,
189
183
  signature: msg.signature,
190
- signatureType: newToOldSignatureType(msg.signatureType)
184
+ signatureType: newToOldSignatureType(msg.signatureType),
185
+ encryptionType,
186
+ groupKeyId,
187
+ newGroupKey
191
188
  })
192
189
  return translated
193
190
  }
@@ -1,6 +1,16 @@
1
- import { StreamMessage as OldStreamMessage } from '@streamr/protocol'
1
+ import {
2
+ StreamMessage as OldStreamMessage,
3
+ GroupKeyRequest as OldGroupKeyRequest,
4
+ GroupKeyResponse as OldGroupKeyResponse
5
+ } from '@streamr/protocol'
2
6
  import { StreamMessageTranslator } from './StreamMessageTranslator'
3
- import { StreamMessage } from '../../../proto/packages/trackerless-network/protos/NetworkRpc'
7
+ import {
8
+ StreamMessage,
9
+ GroupKeyRequest,
10
+ GroupKeyResponse
11
+ } from '../../../proto/packages/trackerless-network/protos/NetworkRpc'
12
+ import { GroupKeyResponseTranslator } from './GroupKeyResponseTranslator'
13
+ import { GroupKeyRequestTranslator } from './GroupKeyRequestTranslator'
4
14
 
5
15
  export function convertStreamMessageToBytes(oldStreamMessage: OldStreamMessage): Uint8Array {
6
16
  return StreamMessage.toBinary(StreamMessageTranslator.toProtobuf(oldStreamMessage))
@@ -9,3 +19,19 @@ export function convertStreamMessageToBytes(oldStreamMessage: OldStreamMessage):
9
19
  export function convertBytesToStreamMessage(bytes: Uint8Array): OldStreamMessage {
10
20
  return StreamMessageTranslator.toClientProtocol(StreamMessage.fromBinary(bytes))
11
21
  }
22
+
23
+ export const convertGroupKeyRequestToBytes = (oldGroupKeyRequest: OldGroupKeyRequest): Uint8Array => {
24
+ return GroupKeyRequest.toBinary(GroupKeyRequestTranslator.toProtobuf(oldGroupKeyRequest))
25
+ }
26
+
27
+ export const convertBytesToGroupKeyRequest = (bytes: Uint8Array): OldGroupKeyRequest => {
28
+ return GroupKeyRequestTranslator.toClientProtocol(GroupKeyRequest.fromBinary(bytes))
29
+ }
30
+
31
+ export const convertGroupKeyResponseToBytes = (oldGroupKeyResponse: OldGroupKeyResponse): Uint8Array => {
32
+ return GroupKeyResponse.toBinary(GroupKeyResponseTranslator.toProtobuf(oldGroupKeyResponse))
33
+ }
34
+
35
+ export const convertBytesToGroupKeyResponse = (bytes: Uint8Array): OldGroupKeyResponse => {
36
+ return GroupKeyResponseTranslator.toClientProtocol(GroupKeyResponse.fromBinary(bytes))
37
+ }
@@ -1,11 +1,9 @@
1
1
  import { ServerCallContext } from '@protobuf-ts/runtime-rpc'
2
2
  import {
3
- GroupKeyRequest,
4
3
  ProxyConnectionRequest,
5
4
  ProxyConnectionResponse,
6
5
  ProxyDirection,
7
- StreamMessage,
8
- StreamMessageType
6
+ StreamMessage
9
7
  } from '../../proto/packages/trackerless-network/protos/NetworkRpc'
10
8
  import { IProxyConnectionRpc } from '../../proto/packages/trackerless-network/protos/NetworkRpc.server'
11
9
  import { DeliveryRpcRemote } from '../DeliveryRpcRemote'
@@ -64,9 +62,9 @@ export class ProxyConnectionRpcLocal extends EventEmitter<Events> implements IPr
64
62
  }
65
63
 
66
64
  getPropagationTargets(msg: StreamMessage): DhtAddress[] {
67
- if (msg.messageType === StreamMessageType.GROUP_KEY_REQUEST) {
65
+ if (msg.body.oneofKind === 'groupKeyRequest') {
68
66
  try {
69
- const recipientId = GroupKeyRequest.fromBinary(msg.content).recipientId
67
+ const recipientId = msg.body.groupKeyRequest.recipientId
70
68
  return this.getNodeIdsForUserId(toEthereumAddress(binaryToHex(recipientId, true)))
71
69
  } catch (err) {
72
70
  logger.trace(`Could not parse GroupKeyRequest: ${err}`)
@@ -5,27 +5,33 @@ import {
5
5
  TemporaryConnectionResponse
6
6
  } from '../../proto/packages/trackerless-network/protos/NetworkRpc'
7
7
  import { ITemporaryConnectionRpc } from '../../proto/packages/trackerless-network/protos/NetworkRpc.server'
8
- import { DhtAddress, DhtCallContext, ListeningRpcCommunicator, getNodeIdFromPeerDescriptor } from '@streamr/dht'
8
+ import { ConnectionLocker, DhtAddress, DhtCallContext, ListeningRpcCommunicator, getNodeIdFromPeerDescriptor } from '@streamr/dht'
9
9
  import { DeliveryRpcClient } from '../../proto/packages/trackerless-network/protos/NetworkRpc.client'
10
10
  import { NodeList } from '../NodeList'
11
11
  import { DeliveryRpcRemote } from '../DeliveryRpcRemote'
12
12
  import { PeerDescriptor } from '../../proto/packages/dht/protos/DhtRpc'
13
13
  import { Empty } from '../../proto/google/protobuf/empty'
14
+ import { StreamPartID } from '@streamr/protocol'
14
15
 
15
16
  interface TemporaryConnectionRpcLocalConfig {
16
17
  rpcCommunicator: ListeningRpcCommunicator
17
18
  localPeerDescriptor: PeerDescriptor
19
+ streamPartId: StreamPartID
20
+ connectionLocker: ConnectionLocker
18
21
  }
19
22
 
23
+ const LOCK_ID_BASE = 'system/delivery/temporary-connection/'
24
+
20
25
  export class TemporaryConnectionRpcLocal implements ITemporaryConnectionRpc {
21
26
 
22
27
  private readonly config: TemporaryConnectionRpcLocalConfig
23
28
  private readonly temporaryNodes: NodeList
24
-
29
+ private readonly lockId: string
25
30
  constructor(config: TemporaryConnectionRpcLocalConfig) {
26
31
  this.config = config
27
32
  // TODO use config option or named constant?
28
33
  this.temporaryNodes = new NodeList(getNodeIdFromPeerDescriptor(config.localPeerDescriptor), 10)
34
+ this.lockId = LOCK_ID_BASE + config.streamPartId
29
35
  }
30
36
 
31
37
  getNodes(): NodeList {
@@ -38,6 +44,7 @@ export class TemporaryConnectionRpcLocal implements ITemporaryConnectionRpc {
38
44
 
39
45
  removeNode(nodeId: DhtAddress): void {
40
46
  this.temporaryNodes.remove(nodeId)
47
+ this.config.connectionLocker.weakUnlockConnection(nodeId, this.lockId)
41
48
  }
42
49
 
43
50
  async openConnection(
@@ -52,6 +59,7 @@ export class TemporaryConnectionRpcLocal implements ITemporaryConnectionRpc {
52
59
  DeliveryRpcClient
53
60
  )
54
61
  this.temporaryNodes.add(remote)
62
+ this.config.connectionLocker.weakLockConnection(getNodeIdFromPeerDescriptor(sender), this.lockId)
55
63
  return {
56
64
  accepted: true
57
65
  }
@@ -4,8 +4,8 @@
4
4
  import { ExternalApiRpc } from "./DhtRpc";
5
5
  import type { ExternalStoreDataResponse } from "./DhtRpc";
6
6
  import type { ExternalStoreDataRequest } from "./DhtRpc";
7
- import type { ExternalFindDataResponse } from "./DhtRpc";
8
- import type { ExternalFindDataRequest } from "./DhtRpc";
7
+ import type { ExternalFetchDataResponse } from "./DhtRpc";
8
+ import type { ExternalFetchDataRequest } from "./DhtRpc";
9
9
  import { ConnectionLockRpc } from "./DhtRpc";
10
10
  import type { DisconnectNotice } from "./DhtRpc";
11
11
  import type { UnlockRequest } from "./DhtRpc";
@@ -352,9 +352,9 @@ export class ConnectionLockRpcClient implements IConnectionLockRpcClient, Servic
352
352
  */
353
353
  export interface IExternalApiRpcClient {
354
354
  /**
355
- * @generated from protobuf rpc: externalFindData(dht.ExternalFindDataRequest) returns (dht.ExternalFindDataResponse);
355
+ * @generated from protobuf rpc: externalFetchData(dht.ExternalFetchDataRequest) returns (dht.ExternalFetchDataResponse);
356
356
  */
357
- externalFindData(input: ExternalFindDataRequest, options?: RpcOptions): UnaryCall<ExternalFindDataRequest, ExternalFindDataResponse>;
357
+ externalFetchData(input: ExternalFetchDataRequest, options?: RpcOptions): UnaryCall<ExternalFetchDataRequest, ExternalFetchDataResponse>;
358
358
  /**
359
359
  * @generated from protobuf rpc: externalStoreData(dht.ExternalStoreDataRequest) returns (dht.ExternalStoreDataResponse);
360
360
  */
@@ -370,11 +370,11 @@ export class ExternalApiRpcClient implements IExternalApiRpcClient, ServiceInfo
370
370
  constructor(private readonly _transport: RpcTransport) {
371
371
  }
372
372
  /**
373
- * @generated from protobuf rpc: externalFindData(dht.ExternalFindDataRequest) returns (dht.ExternalFindDataResponse);
373
+ * @generated from protobuf rpc: externalFetchData(dht.ExternalFetchDataRequest) returns (dht.ExternalFetchDataResponse);
374
374
  */
375
- externalFindData(input: ExternalFindDataRequest, options?: RpcOptions): UnaryCall<ExternalFindDataRequest, ExternalFindDataResponse> {
375
+ externalFetchData(input: ExternalFetchDataRequest, options?: RpcOptions): UnaryCall<ExternalFetchDataRequest, ExternalFetchDataResponse> {
376
376
  const method = this.methods[0], opt = this._transport.mergeOptions(options);
377
- return stackIntercept<ExternalFindDataRequest, ExternalFindDataResponse>("unary", this._transport, method, opt, input);
377
+ return stackIntercept<ExternalFetchDataRequest, ExternalFetchDataResponse>("unary", this._transport, method, opt, input);
378
378
  }
379
379
  /**
380
380
  * @generated from protobuf rpc: externalStoreData(dht.ExternalStoreDataRequest) returns (dht.ExternalStoreDataResponse);
@@ -3,8 +3,8 @@
3
3
  // tslint:disable
4
4
  import { ExternalStoreDataResponse } from "./DhtRpc";
5
5
  import { ExternalStoreDataRequest } from "./DhtRpc";
6
- import { ExternalFindDataResponse } from "./DhtRpc";
7
- import { ExternalFindDataRequest } from "./DhtRpc";
6
+ import { ExternalFetchDataResponse } from "./DhtRpc";
7
+ import { ExternalFetchDataRequest } from "./DhtRpc";
8
8
  import { DisconnectNotice } from "./DhtRpc";
9
9
  import { UnlockRequest } from "./DhtRpc";
10
10
  import { LockResponse } from "./DhtRpc";
@@ -140,9 +140,9 @@ export interface IConnectionLockRpc<T = ServerCallContext> {
140
140
  */
141
141
  export interface IExternalApiRpc<T = ServerCallContext> {
142
142
  /**
143
- * @generated from protobuf rpc: externalFindData(dht.ExternalFindDataRequest) returns (dht.ExternalFindDataResponse);
143
+ * @generated from protobuf rpc: externalFetchData(dht.ExternalFetchDataRequest) returns (dht.ExternalFetchDataResponse);
144
144
  */
145
- externalFindData(request: ExternalFindDataRequest, context: T): Promise<ExternalFindDataResponse>;
145
+ externalFetchData(request: ExternalFetchDataRequest, context: T): Promise<ExternalFetchDataResponse>;
146
146
  /**
147
147
  * @generated from protobuf rpc: externalStoreData(dht.ExternalStoreDataRequest) returns (dht.ExternalStoreDataResponse);
148
148
  */