@streamr/trackerless-network 100.0.0-testnet-three.5 → 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.
- package/dist/package.json +9 -9
- package/dist/src/NetworkNode.d.ts +3 -3
- package/dist/src/NetworkNode.js.map +1 -1
- package/dist/src/NetworkStack.d.ts +6 -4
- package/dist/src/NetworkStack.js +23 -6
- package/dist/src/NetworkStack.js.map +1 -1
- package/dist/src/exports.d.ts +3 -3
- package/dist/src/exports.js +7 -2
- package/dist/src/exports.js.map +1 -1
- package/dist/src/logic/EntryPointDiscovery.d.ts +1 -1
- package/dist/src/logic/EntryPointDiscovery.js +2 -2
- package/dist/src/logic/EntryPointDiscovery.js.map +1 -1
- package/dist/src/logic/Layer0Node.d.ts +1 -1
- package/dist/src/logic/Layer1Node.d.ts +7 -1
- package/dist/src/logic/NodeList.d.ts +2 -1
- package/dist/src/logic/NodeList.js +7 -2
- package/dist/src/logic/NodeList.js.map +1 -1
- package/dist/src/logic/RandomGraphNode.d.ts +3 -0
- package/dist/src/logic/RandomGraphNode.js +26 -4
- package/dist/src/logic/RandomGraphNode.js.map +1 -1
- package/dist/src/logic/StreamrNode.js +9 -4
- package/dist/src/logic/StreamrNode.js.map +1 -1
- package/dist/src/logic/createRandomGraphNode.d.ts +1 -1
- package/dist/src/logic/createRandomGraphNode.js +15 -6
- package/dist/src/logic/createRandomGraphNode.js.map +1 -1
- package/dist/src/logic/inspect/Inspector.js +2 -2
- package/dist/src/logic/inspect/Inspector.js.map +1 -1
- package/dist/src/logic/neighbor-discovery/HandshakeRpcLocal.d.ts +1 -2
- package/dist/src/logic/neighbor-discovery/HandshakeRpcLocal.js +3 -8
- package/dist/src/logic/neighbor-discovery/HandshakeRpcLocal.js.map +1 -1
- package/dist/src/logic/neighbor-discovery/Handshaker.d.ts +3 -2
- package/dist/src/logic/neighbor-discovery/Handshaker.js +29 -10
- package/dist/src/logic/neighbor-discovery/Handshaker.js.map +1 -1
- package/dist/src/logic/neighbor-discovery/NeighborFinder.d.ts +3 -0
- package/dist/src/logic/neighbor-discovery/NeighborFinder.js +7 -1
- package/dist/src/logic/neighbor-discovery/NeighborFinder.js.map +1 -1
- package/dist/src/logic/neighbor-discovery/NeighborUpdateManager.d.ts +1 -2
- package/dist/src/logic/neighbor-discovery/NeighborUpdateManager.js +0 -1
- package/dist/src/logic/neighbor-discovery/NeighborUpdateManager.js.map +1 -1
- package/dist/src/logic/neighbor-discovery/NeighborUpdateRpcLocal.d.ts +1 -2
- package/dist/src/logic/neighbor-discovery/NeighborUpdateRpcLocal.js +0 -1
- package/dist/src/logic/neighbor-discovery/NeighborUpdateRpcLocal.js.map +1 -1
- package/dist/src/logic/node-info/NodeInfoClient.d.ts +2 -2
- package/dist/src/logic/node-info/NodeInfoClient.js +3 -1
- package/dist/src/logic/node-info/NodeInfoClient.js.map +1 -1
- package/dist/src/logic/node-info/NodeInfoRpcLocal.js +1 -10
- package/dist/src/logic/node-info/NodeInfoRpcLocal.js.map +1 -1
- package/dist/src/logic/protocol-integration/stream-message/GroupKeyResponseTranslator.js.map +1 -1
- package/dist/src/logic/protocol-integration/stream-message/StreamMessageTranslator.js +58 -52
- package/dist/src/logic/protocol-integration/stream-message/StreamMessageTranslator.js.map +1 -1
- package/dist/src/logic/protocol-integration/stream-message/oldStreamMessageBinaryUtils.d.ts +5 -1
- package/dist/src/logic/protocol-integration/stream-message/oldStreamMessageBinaryUtils.js +19 -1
- package/dist/src/logic/protocol-integration/stream-message/oldStreamMessageBinaryUtils.js.map +1 -1
- package/dist/src/logic/proxy/ProxyConnectionRpcLocal.js +2 -2
- package/dist/src/logic/proxy/ProxyConnectionRpcLocal.js.map +1 -1
- package/dist/src/logic/temporary-connection/TemporaryConnectionRpcLocal.d.ts +5 -1
- package/dist/src/logic/temporary-connection/TemporaryConnectionRpcLocal.js +5 -0
- package/dist/src/logic/temporary-connection/TemporaryConnectionRpcLocal.js.map +1 -1
- package/dist/src/proto/packages/dht/protos/DhtRpc.client.d.ts +6 -6
- package/dist/src/proto/packages/dht/protos/DhtRpc.client.js +2 -2
- package/dist/src/proto/packages/dht/protos/DhtRpc.client.js.map +1 -1
- package/dist/src/proto/packages/dht/protos/DhtRpc.d.ts +54 -87
- package/dist/src/proto/packages/dht/protos/DhtRpc.js +17 -49
- package/dist/src/proto/packages/dht/protos/DhtRpc.js.map +1 -1
- package/dist/src/proto/packages/dht/protos/DhtRpc.server.d.ts +4 -4
- package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.d.ts +53 -21
- package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.js +24 -11
- package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.js.map +1 -1
- package/dist/test/benchmark/first-message.js +1 -1
- package/dist/test/benchmark/first-message.js.map +1 -1
- package/dist/test/utils/utils.js +9 -5
- package/dist/test/utils/utils.js.map +1 -1
- package/package.json +9 -9
- package/protos/NetworkRpc.proto +16 -9
- package/src/NetworkNode.ts +3 -3
- package/src/NetworkStack.ts +35 -9
- package/src/exports.ts +7 -3
- package/src/logic/EntryPointDiscovery.ts +3 -3
- package/src/logic/Layer0Node.ts +1 -1
- package/src/logic/Layer1Node.ts +16 -1
- package/src/logic/NodeList.ts +9 -3
- package/src/logic/RandomGraphNode.ts +74 -10
- package/src/logic/StreamrNode.ts +9 -4
- package/src/logic/createRandomGraphNode.ts +16 -7
- package/src/logic/inspect/Inspector.ts +2 -2
- package/src/logic/neighbor-discovery/HandshakeRpcLocal.ts +5 -10
- package/src/logic/neighbor-discovery/Handshaker.ts +32 -12
- package/src/logic/neighbor-discovery/NeighborFinder.ts +10 -1
- package/src/logic/neighbor-discovery/NeighborUpdateManager.ts +1 -3
- package/src/logic/neighbor-discovery/NeighborUpdateRpcLocal.ts +1 -3
- package/src/logic/node-info/NodeInfoClient.ts +6 -4
- package/src/logic/node-info/NodeInfoRpcLocal.ts +1 -10
- package/src/logic/protocol-integration/stream-message/GroupKeyResponseTranslator.ts +0 -1
- package/src/logic/protocol-integration/stream-message/StreamMessageTranslator.ts +59 -62
- package/src/logic/protocol-integration/stream-message/oldStreamMessageBinaryUtils.ts +28 -2
- package/src/logic/proxy/ProxyConnectionRpcLocal.ts +3 -5
- package/src/logic/temporary-connection/TemporaryConnectionRpcLocal.ts +10 -2
- package/src/proto/packages/dht/protos/DhtRpc.client.ts +7 -7
- package/src/proto/packages/dht/protos/DhtRpc.server.ts +4 -4
- package/src/proto/packages/dht/protos/DhtRpc.ts +64 -100
- package/src/proto/packages/trackerless-network/protos/NetworkRpc.ts +69 -31
- package/test/benchmark/StreamPartIdDataKeyDistribution.test.ts +60 -0
- package/test/benchmark/first-message.ts +1 -1
- package/test/end-to-end/proxy-key-exchange.test.ts +13 -10
- package/test/integration/Handshakes.test.ts +7 -3
- package/test/integration/NetworkNode.test.ts +8 -4
- package/test/integration/stream-without-default-entrypoints.test.ts +1 -1
- package/test/integration/streamEntryPointReplacing.test.ts +5 -5
- package/test/unit/EntrypointDiscovery.test.ts +4 -4
- package/test/unit/HandshakeRpcLocal.test.ts +18 -2
- package/test/unit/Handshaker.test.ts +8 -3
- package/test/unit/NeighborFinder.test.ts +3 -0
- package/test/unit/NeighborUpdateRpcLocal.test.ts +0 -4
- package/test/unit/Propagation.test.ts +10 -7
- package/test/unit/StreamMessageTranslator.test.ts +3 -4
- package/test/unit/StreamPartIDDataKey.test.ts +12 -0
- package/test/unit/TemporaryConnectionRpcLocal.test.ts +7 -1
- package/test/utils/mock/MockLayer0Node.ts +1 -1
- package/test/utils/mock/MockLayer1Node.ts +3 -0
- package/test/utils/utils.ts +10 -7
- package/test/unit/GroupKeyRequestTranslator.test.ts +0 -36
|
@@ -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
|
|
113
|
-
if (msg.
|
|
114
|
-
newGroupKey =
|
|
115
|
-
|
|
116
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
155
|
+
} else if (msg.body.oneofKind === 'groupKeyResponse') {
|
|
150
156
|
messageType = OldStreamMessageType.GROUP_KEY_RESPONSE
|
|
151
157
|
try {
|
|
152
|
-
|
|
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
|
-
|
|
186
|
-
|
|
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 {
|
|
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 {
|
|
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.
|
|
65
|
+
if (msg.body.oneofKind === 'groupKeyRequest') {
|
|
68
66
|
try {
|
|
69
|
-
const 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 {
|
|
8
|
-
import type {
|
|
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:
|
|
355
|
+
* @generated from protobuf rpc: externalFetchData(dht.ExternalFetchDataRequest) returns (dht.ExternalFetchDataResponse);
|
|
356
356
|
*/
|
|
357
|
-
|
|
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:
|
|
373
|
+
* @generated from protobuf rpc: externalFetchData(dht.ExternalFetchDataRequest) returns (dht.ExternalFetchDataResponse);
|
|
374
374
|
*/
|
|
375
|
-
|
|
375
|
+
externalFetchData(input: ExternalFetchDataRequest, options?: RpcOptions): UnaryCall<ExternalFetchDataRequest, ExternalFetchDataResponse> {
|
|
376
376
|
const method = this.methods[0], opt = this._transport.mergeOptions(options);
|
|
377
|
-
return stackIntercept<
|
|
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 {
|
|
7
|
-
import {
|
|
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:
|
|
143
|
+
* @generated from protobuf rpc: externalFetchData(dht.ExternalFetchDataRequest) returns (dht.ExternalFetchDataResponse);
|
|
144
144
|
*/
|
|
145
|
-
|
|
145
|
+
externalFetchData(request: ExternalFetchDataRequest, context: T): Promise<ExternalFetchDataResponse>;
|
|
146
146
|
/**
|
|
147
147
|
* @generated from protobuf rpc: externalStoreData(dht.ExternalStoreDataRequest) returns (dht.ExternalStoreDataResponse);
|
|
148
148
|
*/
|