@streamr/dht 102.0.0-beta.1 → 102.0.0-beta.3

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 (211) hide show
  1. package/dist/generated/google/protobuf/any.d.ts +180 -0
  2. package/dist/generated/google/protobuf/any.js +155 -0
  3. package/dist/generated/google/protobuf/any.js.map +1 -0
  4. package/dist/generated/google/protobuf/empty.d.ts +31 -0
  5. package/dist/generated/google/protobuf/empty.js +32 -0
  6. package/dist/generated/google/protobuf/empty.js.map +1 -0
  7. package/dist/generated/google/protobuf/timestamp.d.ts +155 -0
  8. package/dist/generated/google/protobuf/timestamp.js +136 -0
  9. package/dist/generated/google/protobuf/timestamp.js.map +1 -0
  10. package/dist/generated/packages/dht/protos/DhtRpc.client.d.ts +361 -0
  11. package/dist/generated/packages/dht/protos/DhtRpc.client.js +285 -0
  12. package/dist/generated/packages/dht/protos/DhtRpc.client.js.map +1 -0
  13. package/dist/generated/packages/dht/protos/DhtRpc.d.ts +999 -0
  14. package/dist/generated/packages/dht/protos/DhtRpc.js +677 -0
  15. package/dist/generated/packages/dht/protos/DhtRpc.js.map +1 -0
  16. package/dist/generated/packages/dht/protos/DhtRpc.server.d.ts +162 -0
  17. package/dist/generated/packages/dht/protos/DhtRpc.server.js +3 -0
  18. package/dist/generated/packages/dht/protos/DhtRpc.server.js.map +1 -0
  19. package/dist/generated/packages/proto-rpc/protos/ProtoRpc.d.ts +87 -0
  20. package/dist/generated/packages/proto-rpc/protos/ProtoRpc.js +66 -0
  21. package/dist/generated/packages/proto-rpc/protos/ProtoRpc.js.map +1 -0
  22. package/dist/package.json +7 -7
  23. package/package.json +7 -7
  24. package/eslint.config.mjs +0 -12
  25. package/src/connection/Connection.ts +0 -28
  26. package/src/connection/ConnectionLockRpcLocal.ts +0 -78
  27. package/src/connection/ConnectionLockRpcRemote.ts +0 -64
  28. package/src/connection/ConnectionLockStates.ts +0 -131
  29. package/src/connection/ConnectionManager.ts +0 -661
  30. package/src/connection/ConnectionsView.ts +0 -8
  31. package/src/connection/ConnectorFacade.ts +0 -217
  32. package/src/connection/Handshaker.ts +0 -209
  33. package/src/connection/IConnection.ts +0 -40
  34. package/src/connection/ManagedConnection.ts +0 -113
  35. package/src/connection/OutputBuffer.ts +0 -28
  36. package/src/connection/PendingConnection.ts +0 -68
  37. package/src/connection/connectivityChecker.ts +0 -108
  38. package/src/connection/connectivityRequestHandler.ts +0 -116
  39. package/src/connection/simulator/Simulator.ts +0 -369
  40. package/src/connection/simulator/SimulatorConnection.ts +0 -137
  41. package/src/connection/simulator/SimulatorConnector.ts +0 -98
  42. package/src/connection/simulator/SimulatorTransport.ts +0 -15
  43. package/src/connection/simulator/pings.ts +0 -42
  44. package/src/connection/webrtc/BrowserWebrtcConnection.ts +0 -242
  45. package/src/connection/webrtc/IWebrtcConnection.ts +0 -24
  46. package/src/connection/webrtc/NodeWebrtcConnection.ts +0 -245
  47. package/src/connection/webrtc/WebrtcConnector.ts +0 -234
  48. package/src/connection/webrtc/WebrtcConnectorRpcLocal.ts +0 -108
  49. package/src/connection/webrtc/WebrtcConnectorRpcRemote.ts +0 -60
  50. package/src/connection/webrtc/iceServerAsString.ts +0 -15
  51. package/src/connection/websocket/AbstractWebsocketClientConnection.ts +0 -122
  52. package/src/connection/websocket/AutoCertifierClientFacade.ts +0 -89
  53. package/src/connection/websocket/BrowserWebsocketClientConnection.ts +0 -44
  54. package/src/connection/websocket/NodeWebsocketClientConnection.ts +0 -39
  55. package/src/connection/websocket/WebsocketClientConnector.ts +0 -119
  56. package/src/connection/websocket/WebsocketClientConnectorRpcLocal.ts +0 -38
  57. package/src/connection/websocket/WebsocketClientConnectorRpcRemote.ts +0 -19
  58. package/src/connection/websocket/WebsocketServer.ts +0 -164
  59. package/src/connection/websocket/WebsocketServerConnection.ts +0 -109
  60. package/src/connection/websocket/WebsocketServerConnector.ts +0 -290
  61. package/src/dht/DhtNode.ts +0 -683
  62. package/src/dht/DhtNodeRpcLocal.ts +0 -84
  63. package/src/dht/DhtNodeRpcRemote.ts +0 -107
  64. package/src/dht/ExternalApiRpcLocal.ts +0 -58
  65. package/src/dht/ExternalApiRpcRemote.ts +0 -41
  66. package/src/dht/PeerManager.ts +0 -305
  67. package/src/dht/contact/Contact.ts +0 -19
  68. package/src/dht/contact/ContactList.ts +0 -43
  69. package/src/dht/contact/RandomContactList.ts +0 -56
  70. package/src/dht/contact/RingContactList.ts +0 -143
  71. package/src/dht/contact/RpcRemote.ts +0 -72
  72. package/src/dht/contact/SortedContactList.ts +0 -173
  73. package/src/dht/contact/getClosestNodes.ts +0 -24
  74. package/src/dht/contact/ringIdentifiers.ts +0 -62
  75. package/src/dht/discovery/DiscoverySession.ts +0 -129
  76. package/src/dht/discovery/PeerDiscovery.ts +0 -244
  77. package/src/dht/discovery/RingDiscoverySession.ts +0 -148
  78. package/src/dht/recursive-operation/RecursiveOperationManager.ts +0 -251
  79. package/src/dht/recursive-operation/RecursiveOperationRpcLocal.ts +0 -34
  80. package/src/dht/recursive-operation/RecursiveOperationRpcRemote.ts +0 -43
  81. package/src/dht/recursive-operation/RecursiveOperationSession.ts +0 -231
  82. package/src/dht/recursive-operation/RecursiveOperationSessionRpcLocal.ts +0 -35
  83. package/src/dht/recursive-operation/RecursiveOperationSessionRpcRemote.ts +0 -30
  84. package/src/dht/routing/DuplicateDetector.ts +0 -34
  85. package/src/dht/routing/Router.ts +0 -246
  86. package/src/dht/routing/RouterRpcLocal.ts +0 -78
  87. package/src/dht/routing/RouterRpcRemote.ts +0 -80
  88. package/src/dht/routing/RoutingSession.ts +0 -243
  89. package/src/dht/routing/RoutingTablesCache.ts +0 -60
  90. package/src/dht/routing/getPreviousPeer.ts +0 -6
  91. package/src/dht/store/LocalDataStore.ts +0 -84
  92. package/src/dht/store/StoreManager.ts +0 -170
  93. package/src/dht/store/StoreRpcLocal.ts +0 -89
  94. package/src/dht/store/StoreRpcRemote.ts +0 -32
  95. package/src/exports.ts +0 -33
  96. package/src/helpers/AddressTools.ts +0 -28
  97. package/src/helpers/Connectivity.ts +0 -19
  98. package/src/helpers/browser/isBrowserEnvironment.ts +0 -1
  99. package/src/helpers/browser/isBrowserEnvironment_override.ts +0 -3
  100. package/src/helpers/createPeerDescriptor.ts +0 -57
  101. package/src/helpers/createPeerDescriptorSignaturePayload.ts +0 -28
  102. package/src/helpers/debugHelpers.ts +0 -9
  103. package/src/helpers/errors.ts +0 -49
  104. package/src/helpers/offering.ts +0 -15
  105. package/src/helpers/protoClasses.ts +0 -57
  106. package/src/helpers/protoToString.ts +0 -21
  107. package/src/helpers/version.ts +0 -32
  108. package/src/identifiers.ts +0 -29
  109. package/src/rpc-protocol/DhtCallContext.ts +0 -14
  110. package/src/rpc-protocol/DhtRpcOptions.ts +0 -10
  111. package/src/transport/ITransport.ts +0 -37
  112. package/src/transport/ListeningRpcCommunicator.ts +0 -32
  113. package/src/transport/RoutingRpcCommunicator.ts +0 -66
  114. package/src/types/ServiceID.ts +0 -1
  115. package/src/types/textencoding.d.ts +0 -6
  116. package/test/benchmark/Find.test.ts +0 -72
  117. package/test/benchmark/KademliaCorrectness.test.ts +0 -114
  118. package/test/benchmark/RingCorrectness.test.ts +0 -157
  119. package/test/benchmark/SortedContactListBenchmark.test.ts +0 -108
  120. package/test/benchmark/WebsocketServerMemoryLeak.test.ts +0 -41
  121. package/test/benchmark/hybrid-network-simulation/RingContactList.test.ts +0 -71
  122. package/test/end-to-end/GeoIpLayer0.test.ts +0 -55
  123. package/test/end-to-end/Layer0-Layer1.test.ts +0 -93
  124. package/test/end-to-end/Layer0.test.ts +0 -76
  125. package/test/end-to-end/Layer0MixedConnectionTypes.test.ts +0 -110
  126. package/test/end-to-end/Layer0Webrtc-Layer1.test.ts +0 -137
  127. package/test/end-to-end/Layer0Webrtc.test.ts +0 -85
  128. package/test/end-to-end/Layer1-Scale-WebSocket.test.ts +0 -82
  129. package/test/end-to-end/Layer1-Scale-Webrtc.test.ts +0 -76
  130. package/test/end-to-end/RecoveryFromFailedAutoCertification.test.ts +0 -52
  131. package/test/end-to-end/WebsocketConnectionRequest.test.ts +0 -69
  132. package/test/end-to-end/memory-leak.test.ts +0 -80
  133. package/test/integration/ConnectionLocking.test.ts +0 -192
  134. package/test/integration/ConnectionManager.test.ts +0 -528
  135. package/test/integration/ConnectivityChecking.test.ts +0 -53
  136. package/test/integration/DhtJoinPeerDiscovery.test.ts +0 -49
  137. package/test/integration/DhtNode.test.ts +0 -66
  138. package/test/integration/DhtNodeExternalAPI.test.ts +0 -48
  139. package/test/integration/DhtNodeRpcRemote.test.ts +0 -66
  140. package/test/integration/DhtRpc.test.ts +0 -121
  141. package/test/integration/Find.test.ts +0 -45
  142. package/test/integration/GeoIpConnectivityChecking.test.ts +0 -72
  143. package/test/integration/Layer1-scale.test.ts +0 -189
  144. package/test/integration/Mock-Layer1-Layer0.test.ts +0 -85
  145. package/test/integration/MultipleEntryPointJoining.test.ts +0 -105
  146. package/test/integration/ReplicateData.test.ts +0 -104
  147. package/test/integration/RouteMessage.test.ts +0 -230
  148. package/test/integration/RouterRpcRemote.test.ts +0 -77
  149. package/test/integration/SimultaneousConnections.test.ts +0 -316
  150. package/test/integration/Store.test.ts +0 -85
  151. package/test/integration/StoreAndDelete.test.ts +0 -77
  152. package/test/integration/StoreOnDhtWithThreeNodes.test.ts +0 -59
  153. package/test/integration/StoreOnDhtWithTwoNodes.test.ts +0 -51
  154. package/test/integration/StoreRpcRemote.test.ts +0 -54
  155. package/test/integration/WebrtcConnectionManagement.test.ts +0 -191
  156. package/test/integration/WebrtcConnectorRpc.test.ts +0 -125
  157. package/test/integration/Websocket.test.ts +0 -65
  158. package/test/integration/WebsocketClientConnectorRpc.test.ts +0 -69
  159. package/test/integration/WebsocketConnectionManagement.test.ts +0 -191
  160. package/test/integration/rpc-connections-over-webrtc.test.ts +0 -123
  161. package/test/kademlia-simulation/data/nodeids.json +0 -13002
  162. package/test/kademlia-simulation/data/orderedneighbors.json +0 -1001
  163. package/test/types/global.d.ts +0 -1
  164. package/test/unit/AddressTools.test.ts +0 -44
  165. package/test/unit/AutoCertifierClientFacade.test.ts +0 -58
  166. package/test/unit/ConnectionManager.test.ts +0 -65
  167. package/test/unit/ConnectivityHelpers.test.ts +0 -61
  168. package/test/unit/DiscoverySession.test.ts +0 -87
  169. package/test/unit/DuplicateDetector.test.ts +0 -31
  170. package/test/unit/Handshaker.test.ts +0 -169
  171. package/test/unit/ListeningRpcCommunicator.test.ts +0 -52
  172. package/test/unit/LocalDataStore.test.ts +0 -108
  173. package/test/unit/ManagedConnection.test.ts +0 -58
  174. package/test/unit/PeerManager.test.ts +0 -93
  175. package/test/unit/PendingConnection.test.ts +0 -57
  176. package/test/unit/ProtobufMessage.test.ts +0 -21
  177. package/test/unit/RandomContactList.test.ts +0 -58
  178. package/test/unit/RecursiveOperationManager.test.ts +0 -161
  179. package/test/unit/RecursiveOperationSession.test.ts +0 -68
  180. package/test/unit/Router.test.ts +0 -137
  181. package/test/unit/RoutingSession.test.ts +0 -86
  182. package/test/unit/SortedContactList.test.ts +0 -115
  183. package/test/unit/StoreManager.test.ts +0 -146
  184. package/test/unit/StoreRpcLocal.test.ts +0 -167
  185. package/test/unit/WebrtcConnection.test.ts +0 -29
  186. package/test/unit/WebrtcConnector.test.ts +0 -56
  187. package/test/unit/WebsocketClientConnector.test.ts +0 -101
  188. package/test/unit/WebsocketServer.test.ts +0 -66
  189. package/test/unit/WebsocketServerConnector.test.ts +0 -102
  190. package/test/unit/connectivityRequestHandler.test.ts +0 -104
  191. package/test/unit/createPeerDescriptor.test.ts +0 -69
  192. package/test/unit/customMatchers.test.ts +0 -34
  193. package/test/unit/getClosestNodes.test.ts +0 -30
  194. package/test/unit/version.test.ts +0 -18
  195. package/test/unit/webrtcReplaceInternalIpWithExternalIp.test.ts +0 -18
  196. package/test/utils/FakeConnectorFacade.ts +0 -41
  197. package/test/utils/FakeRpcCommunicator.ts +0 -23
  198. package/test/utils/FakeTransport.ts +0 -79
  199. package/test/utils/customMatchers.ts +0 -71
  200. package/test/utils/mock/MockConnection.ts +0 -26
  201. package/test/utils/mock/MockConnectionsView.ts +0 -18
  202. package/test/utils/mock/MockRouter.ts +0 -62
  203. package/test/utils/mock/MockRpcCommunicator.ts +0 -7
  204. package/test/utils/mock/MockTransport.ts +0 -26
  205. package/test/utils/mock/mockDataEntry.ts +0 -38
  206. package/test/utils/topology.ts +0 -79
  207. package/test/utils/utils.ts +0 -268
  208. package/tsconfig.browser.json +0 -17
  209. package/tsconfig.jest.json +0 -25
  210. package/tsconfig.json +0 -3
  211. package/tsconfig.node.json +0 -24
@@ -1,191 +0,0 @@
1
- import { ConnectionManager } from '../../src/connection/ConnectionManager'
2
- import { LatencyType, Simulator } from '../../src/connection/simulator/Simulator'
3
- import { Message, NodeType, PeerDescriptor } from '../../generated/packages/dht/protos/DhtRpc'
4
- import { RpcMessage } from '../../generated/packages/proto-rpc/protos/ProtoRpc'
5
- import { ITransport } from '../../src/transport/ITransport'
6
- import * as Err from '../../src/helpers/errors'
7
- import { SimulatorTransport } from '../../src/connection/simulator/SimulatorTransport'
8
- import { DefaultConnectorFacade } from '../../src/connection/ConnectorFacade'
9
- import { MetricsContext } from '@streamr/utils'
10
- import { createMockPeerDescriptor } from '../utils/utils'
11
-
12
- const createConnectionManager = (localPeerDescriptor: PeerDescriptor, transport: ITransport) => {
13
- return new ConnectionManager({
14
- createConnectorFacade: () => new DefaultConnectorFacade({
15
- transport,
16
- createLocalPeerDescriptor: async () => localPeerDescriptor
17
- }),
18
- metricsContext: new MetricsContext(),
19
- allowIncomingPrivateConnections: false
20
- })
21
- }
22
-
23
- describe('WebRTC Connection Management', () => {
24
-
25
- let manager1: ConnectionManager
26
- let manager2: ConnectionManager
27
- let simulator: Simulator
28
- const peerDescriptor1 = createMockPeerDescriptor()
29
- const peerDescriptor2 = createMockPeerDescriptor()
30
- let connectorTransport1: SimulatorTransport
31
- let connectorTransport2: SimulatorTransport
32
-
33
- beforeEach(async () => {
34
- simulator = new Simulator(LatencyType.FIXED, 20)
35
- connectorTransport1 = new SimulatorTransport(peerDescriptor1, simulator)
36
- await connectorTransport1.start()
37
- manager1 = createConnectionManager(peerDescriptor1, connectorTransport1)
38
- connectorTransport2 = new SimulatorTransport(peerDescriptor2, simulator)
39
- await connectorTransport2.start()
40
- manager2 = createConnectionManager(peerDescriptor2, connectorTransport2)
41
- await manager1.start()
42
- await manager2.start()
43
- })
44
-
45
- afterEach(async () => {
46
- await Promise.all([
47
- manager1.stop(),
48
- manager2.stop(),
49
- connectorTransport1.stop(),
50
- connectorTransport2.stop()
51
- ])
52
- simulator.stop()
53
- })
54
-
55
- const serviceId = 'dummy'
56
-
57
- // TODO: fix flaky test, ticket NET-911
58
- it('Peer1 can open WebRTC Datachannels', (done) => {
59
- const dummyMessage: Message = {
60
- serviceId: 'unknown',
61
- body: {
62
- oneofKind: 'rpcMessage',
63
- rpcMessage: RpcMessage.create()
64
- },
65
- messageId: 'mockerer'
66
- }
67
-
68
- manager2.on('message', (message: Message) => {
69
- expect(message.messageId).toEqual('mockerer')
70
-
71
- done()
72
- })
73
- dummyMessage.targetDescriptor = peerDescriptor2
74
- manager1.send(dummyMessage).catch((e) => {
75
- throw e
76
- })
77
- }, 15000)
78
-
79
- it('Peer2 can open WebRTC Datachannel', (done) => {
80
- const dummyMessage: Message = {
81
- serviceId,
82
- body: {
83
- oneofKind: 'rpcMessage',
84
- rpcMessage: RpcMessage.create()
85
- },
86
- messageId: 'mockerer'
87
- }
88
- manager1.on('message', (message: Message) => {
89
- expect(message.messageId).toEqual('mockerer')
90
- done()
91
- })
92
- dummyMessage.targetDescriptor = peerDescriptor1
93
- manager2.send(dummyMessage)
94
- }, 60000)
95
-
96
- it('Connecting to self throws', async () => {
97
- const dummyMessage: Message = {
98
- serviceId,
99
- body: {
100
- oneofKind: 'rpcMessage',
101
- rpcMessage: RpcMessage.create()
102
- },
103
- messageId: 'mockerer'
104
- }
105
- dummyMessage.targetDescriptor = peerDescriptor1
106
- await expect(manager1.send(dummyMessage))
107
- .rejects
108
- .toEqual(new Err.CannotConnectToSelf('Cannot send to self'))
109
- })
110
-
111
- it('Connects and disconnects webrtc connections', async () => {
112
- const msg: Message = {
113
- serviceId,
114
- messageId: '1',
115
- body: {
116
- oneofKind: 'rpcMessage',
117
- rpcMessage: RpcMessage.create()
118
- }
119
- }
120
-
121
- const dataPromise = new Promise<void>((resolve, _reject) => {
122
- manager2.on('message', async (message: Message) => {
123
- expect(message.body.oneofKind).toBe('rpcMessage')
124
- resolve()
125
- })
126
- })
127
-
128
- const connectedPromise1 = new Promise<void>((resolve, _reject) => {
129
- manager1.on('connected', () => {
130
- //expect(message.body.oneofKind).toBe('rpcMessage')
131
- resolve()
132
- })
133
- })
134
-
135
- const connectedPromise2 = new Promise<void>((resolve, _reject) => {
136
- manager2.on('connected', () => {
137
- resolve()
138
- })
139
- })
140
-
141
- const disconnectedPromise1 = new Promise<void>((resolve, _reject) => {
142
- manager1.on('disconnected', () => {
143
- resolve()
144
- })
145
- })
146
-
147
- const disconnectedPromise2 = new Promise<void>((resolve, _reject) => {
148
- manager2.on('disconnected', () => {
149
- resolve()
150
- })
151
- })
152
-
153
- msg.targetDescriptor = peerDescriptor2
154
- manager1.send(msg).catch((_e) => { })
155
-
156
- await Promise.all([dataPromise, connectedPromise1, connectedPromise2])
157
-
158
- // @ts-expect-error private field
159
- manager1.closeConnection(peerDescriptor2)
160
-
161
- await Promise.all([disconnectedPromise1, disconnectedPromise2])
162
-
163
- }, 20000)
164
-
165
- it('failed connections are cleaned up', async () => {
166
- const msg: Message = {
167
- serviceId,
168
- messageId: '1',
169
- body: {
170
- oneofKind: 'rpcMessage',
171
- rpcMessage: RpcMessage.create()
172
- },
173
- }
174
-
175
- const disconnectedPromise1 = new Promise<void>((resolve, _reject) => {
176
- manager1.on('disconnected', () => {
177
- resolve()
178
- })
179
- })
180
-
181
- msg.targetDescriptor = {
182
- nodeId: new Uint8Array([0, 0, 0, 0, 0]),
183
- type: NodeType.NODEJS,
184
- }
185
-
186
- await Promise.allSettled([
187
- manager1.send(msg),
188
- disconnectedPromise1
189
- ])
190
- }, 20000)
191
- })
@@ -1,125 +0,0 @@
1
- import { ProtoRpcClient, RpcCommunicator, toProtoRpcClient } from '@streamr/proto-rpc'
2
- import { WebrtcConnectorRpcClient } from '../../generated/packages/dht/protos/DhtRpc.client'
3
- import {
4
- IceCandidate,
5
- RtcAnswer,
6
- RtcOffer,
7
- WebrtcConnectionRequest
8
- } from '../../generated/packages/dht/protos/DhtRpc'
9
- import { Empty } from '../../generated/google/protobuf/empty'
10
- import { createMockPeerDescriptor } from '../utils/utils'
11
- import { IWebrtcConnectorRpc } from '../../generated/packages/dht/protos/DhtRpc.server'
12
- import { until } from '@streamr/utils'
13
- import { RpcMessage } from '../../generated/packages/proto-rpc/protos/ProtoRpc'
14
- import { DhtCallContext } from '../../src/rpc-protocol/DhtCallContext'
15
-
16
- describe('WebRTC rpc messages', () => {
17
-
18
- let rpcCommunicator1: RpcCommunicator<DhtCallContext>
19
- let rpcCommunicator2: RpcCommunicator<DhtCallContext>
20
- let client: ProtoRpcClient<WebrtcConnectorRpcClient>
21
- let requestConnectionCounter: number
22
- let rtcOfferCounter: number
23
- let rtcAnswerCounter: number
24
- let iceCandidateCounter: number
25
- const targetDescriptor = createMockPeerDescriptor()
26
-
27
- beforeEach(() => {
28
- requestConnectionCounter = 0
29
- rtcOfferCounter = 0
30
- rtcAnswerCounter = 0
31
- iceCandidateCounter = 0
32
-
33
- rpcCommunicator1 = new RpcCommunicator()
34
- const serverFunctions: IWebrtcConnectorRpc = {
35
-
36
- requestConnection: async (): Promise<Empty> => {
37
- requestConnectionCounter += 1
38
- const res: Empty = {}
39
- return res
40
- },
41
-
42
- rtcOffer: async (): Promise<Empty> => {
43
- rtcOfferCounter += 1
44
- const res: Empty = {}
45
- return res
46
- },
47
-
48
- rtcAnswer: async (): Promise<Empty> => {
49
- rtcAnswerCounter += 1
50
- const res: Empty = {}
51
- return res
52
- },
53
-
54
- iceCandidate: async (): Promise<Empty> => {
55
- iceCandidateCounter += 1
56
- const res: Empty = {}
57
- return res
58
- }
59
- }
60
-
61
- rpcCommunicator2 = new RpcCommunicator()
62
- rpcCommunicator2.registerRpcNotification(RtcOffer, 'rtcOffer', serverFunctions.rtcOffer)
63
- rpcCommunicator2.registerRpcNotification(RtcAnswer, 'rtcAnswer', serverFunctions.rtcAnswer)
64
- rpcCommunicator2.registerRpcNotification(IceCandidate, 'iceCandidate', serverFunctions.iceCandidate)
65
- rpcCommunicator2.registerRpcNotification(WebrtcConnectionRequest, 'requestConnection', serverFunctions.requestConnection)
66
-
67
- rpcCommunicator1.setOutgoingMessageListener(async (message: RpcMessage) => {
68
- rpcCommunicator2.handleIncomingMessage(message, new DhtCallContext())
69
- })
70
-
71
- rpcCommunicator2.setOutgoingMessageListener(async (message: RpcMessage) => {
72
- rpcCommunicator1.handleIncomingMessage(message, new DhtCallContext())
73
- })
74
-
75
- client = toProtoRpcClient(new WebrtcConnectorRpcClient(rpcCommunicator1.getRpcClientTransport()))
76
- })
77
-
78
- afterEach(async () => {
79
- rpcCommunicator1.stop()
80
- rpcCommunicator2.stop()
81
- })
82
-
83
- it('send connectionRequest', async () => {
84
- client.requestConnection({
85
- },
86
- { targetDescriptor, notification: true }
87
- )
88
-
89
- await until(() => requestConnectionCounter === 1)
90
- })
91
-
92
- it('send rtcOffer', async () => {
93
- client.rtcOffer({
94
- connectionId: 'rtcOffer',
95
- description: 'aaaaaa'
96
- },
97
- { targetDescriptor, notification: true }
98
- )
99
-
100
- await until(() => rtcOfferCounter === 1)
101
- })
102
-
103
- it('send rtcAnswer', async () => {
104
- client.rtcAnswer({
105
- connectionId: 'rtcOffer',
106
- description: 'aaaaaa'
107
- },
108
- { targetDescriptor, notification: true }
109
- )
110
-
111
- await until(() => rtcAnswerCounter === 1)
112
- })
113
-
114
- it('send iceCandidate', async () => {
115
- client.iceCandidate({
116
- connectionId: 'rtcOffer',
117
- candidate: 'aaaaaa',
118
- mid: 'asdasdasdasdasd'
119
- },
120
- { targetDescriptor, notification: true }
121
- )
122
-
123
- await until(() => iceCandidateCounter === 1)
124
- })
125
- })
@@ -1,65 +0,0 @@
1
- import { WebsocketServer } from '../../src/connection/websocket/WebsocketServer'
2
- import { IConnection } from '../../src/connection/IConnection'
3
- import { WebsocketClientConnection } from '../../src/connection/websocket/NodeWebsocketClientConnection'
4
- import { Logger } from '@streamr/utils'
5
-
6
- const logger = new Logger(module)
7
-
8
- describe('Websocket', () => {
9
-
10
- const websocketServer = new WebsocketServer({
11
- portRange: { min: 9977, max: 9977 },
12
- enableTls: false
13
- })
14
- const clientWebsocket = new WebsocketClientConnection()
15
-
16
- beforeAll(async () => {
17
- await websocketServer.start()
18
- })
19
-
20
- it('Happy path', (done) => {
21
-
22
- websocketServer.on('connected', (serverConnection: IConnection) => {
23
- const time = Date.now()
24
- logger.info('server side sendind msg at ' + time)
25
- serverConnection.send(Uint8Array.from([1, 2, 3, 4]))
26
-
27
- const time2 = Date.now()
28
- logger.info('server side setting listeners at ' + time2)
29
-
30
- serverConnection.on('data', (bytes: Uint8Array) => {
31
- const time = Date.now()
32
- logger.info('server side receiving message at ' + time)
33
-
34
- logger.info('server received:' + JSON.stringify(bytes))
35
-
36
- expect(bytes.toString()).toBe('1,2,3,4')
37
- logger.info('calling done()')
38
- done()
39
- })
40
- })
41
-
42
- clientWebsocket.on('connected', () => {
43
- const time = Date.now()
44
- logger.info('client side setting listeners at ' + time)
45
-
46
- clientWebsocket.on('data', (bytes: Uint8Array) => {
47
- const time = Date.now()
48
- logger.info('client side receiving message at ' + time)
49
-
50
- logger.info('client received: ' + JSON.stringify(bytes))
51
- expect(bytes.toString()).toBe('1,2,3,4')
52
-
53
- const time2 = Date.now()
54
- logger.info('client side sendind msg at ' + time2)
55
- clientWebsocket.send(Uint8Array.from([1, 2, 3, 4]))
56
- })
57
- })
58
-
59
- clientWebsocket.connect('ws://127.0.0.1:9977', false)
60
- })
61
-
62
- afterAll(async () => {
63
- await websocketServer.stop()
64
- })
65
- })
@@ -1,69 +0,0 @@
1
- import { ProtoRpcClient, RpcCommunicator, toProtoRpcClient } from '@streamr/proto-rpc'
2
- import { WebsocketClientConnectorRpcClient } from '../../generated/packages/dht/protos/DhtRpc.client'
3
- import { createMockPeerDescriptor, mockWebsocketClientConnectorRpc } from '../utils/utils'
4
- import { WebsocketConnectionRequest } from '../../generated/packages/dht/protos/DhtRpc'
5
- import { RpcMessage } from '../../generated/packages/proto-rpc/protos/ProtoRpc'
6
- import { Empty } from '../../generated/google/protobuf/empty'
7
- import { DhtCallContext } from '../../src/rpc-protocol/DhtCallContext'
8
-
9
- describe('WebsocketClientConnectorRpc', () => {
10
-
11
- let rpcCommunicator1: RpcCommunicator<DhtCallContext>
12
- let rpcCommunicator2: RpcCommunicator<DhtCallContext>
13
- let client1: ProtoRpcClient<WebsocketClientConnectorRpcClient>
14
- let client2: ProtoRpcClient<WebsocketClientConnectorRpcClient>
15
- const peerDescriptor1 = createMockPeerDescriptor()
16
- const peerDescriptor2 = createMockPeerDescriptor()
17
-
18
- beforeEach(() => {
19
- rpcCommunicator1 = new RpcCommunicator()
20
- rpcCommunicator1.registerRpcMethod(
21
- WebsocketConnectionRequest,
22
- Empty,
23
- 'requestConnection',
24
- mockWebsocketClientConnectorRpc.requestConnection
25
- )
26
-
27
- rpcCommunicator2 = new RpcCommunicator()
28
- rpcCommunicator2.registerRpcMethod(
29
- WebsocketConnectionRequest,
30
- Empty,
31
- 'requestConnection',
32
- mockWebsocketClientConnectorRpc.requestConnection
33
- )
34
-
35
- rpcCommunicator1.setOutgoingMessageListener(async (message: RpcMessage) => {
36
- rpcCommunicator2.handleIncomingMessage(message, new DhtCallContext())
37
- })
38
-
39
- rpcCommunicator2.setOutgoingMessageListener(async (message: RpcMessage) => {
40
- rpcCommunicator1.handleIncomingMessage(message, new DhtCallContext())
41
- })
42
-
43
- client1 = toProtoRpcClient(new WebsocketClientConnectorRpcClient(rpcCommunicator1.getRpcClientTransport()))
44
- client2 = toProtoRpcClient(new WebsocketClientConnectorRpcClient(rpcCommunicator2.getRpcClientTransport()))
45
- })
46
-
47
- afterEach(async () => {
48
- rpcCommunicator1.stop()
49
- rpcCommunicator2.stop()
50
- })
51
-
52
- it('Happy path', async () => {
53
- const response1 = client1.requestConnection({
54
- ip: '127.0.0.1',
55
- port: 9099
56
- },
57
- { targetDescriptor: peerDescriptor2 },
58
- )
59
- await response1
60
-
61
- const response2 = client2.requestConnection({
62
- ip: '127.0.0.1',
63
- port: 9111
64
- },
65
- { targetDescriptor: peerDescriptor1 },
66
- )
67
- await response2
68
- })
69
- })
@@ -1,191 +0,0 @@
1
- import { MetricsContext, until, waitForEvent3 } from '@streamr/utils'
2
- import { ConnectionManager } from '../../src/connection/ConnectionManager'
3
- import { DefaultConnectorFacade, DefaultConnectorFacadeOptions } from '../../src/connection/ConnectorFacade'
4
- import { Simulator } from '../../src/connection/simulator/Simulator'
5
- import { SimulatorTransport } from '../../src/connection/simulator/SimulatorTransport'
6
- import * as Err from '../../src/helpers/errors'
7
- import { Message, NodeType, PeerDescriptor } from '../../generated/packages/dht/protos/DhtRpc'
8
- import { RpcMessage } from '../../generated/packages/proto-rpc/protos/ProtoRpc'
9
- import { TransportEvents } from '../../src/transport/ITransport'
10
- import { toNodeId } from '../../src/identifiers'
11
-
12
- const SERVICE_ID = 'test'
13
-
14
- const createOptions = (localPeerDescriptor: PeerDescriptor, opts: Omit<DefaultConnectorFacadeOptions, 'createLocalPeerDescriptor'>) => {
15
- return {
16
- createConnectorFacade: () => new DefaultConnectorFacade({
17
- createLocalPeerDescriptor: async () => localPeerDescriptor,
18
- ...opts
19
- }),
20
- metricsContext: new MetricsContext(),
21
- allowIncomingPrivateConnections: false
22
- }
23
- }
24
-
25
- describe('Websocket Connection Management', () => {
26
-
27
- let wsServerManager: ConnectionManager
28
- let noWsServerManager: ConnectionManager
29
- let biggerNoWsServerManager: ConnectionManager
30
- const simulator = new Simulator()
31
- const wsServerConnectorPeerDescriptor: PeerDescriptor = {
32
- nodeId: new Uint8Array([2]),
33
- type: NodeType.NODEJS,
34
- websocket: {
35
- host: '127.0.0.1',
36
- port: 12223,
37
- tls: false
38
- }
39
- }
40
- const noWsServerConnectorPeerDescriptor: PeerDescriptor = {
41
- nodeId: new Uint8Array([1]),
42
- type: NodeType.NODEJS,
43
- }
44
- const biggerNoWsServerConnectorPeerDescriptor: PeerDescriptor = {
45
- nodeId: new Uint8Array([3]),
46
- type: NodeType.NODEJS,
47
- }
48
-
49
- let connectorTransport1: SimulatorTransport
50
- let connectorTransport2: SimulatorTransport
51
- let connectorTransport3: SimulatorTransport
52
-
53
- beforeEach(async () => {
54
-
55
- connectorTransport1 = new SimulatorTransport(wsServerConnectorPeerDescriptor, simulator)
56
- await connectorTransport1.start()
57
- connectorTransport2 = new SimulatorTransport(noWsServerConnectorPeerDescriptor, simulator)
58
- await connectorTransport2.start()
59
- connectorTransport3 = new SimulatorTransport(biggerNoWsServerConnectorPeerDescriptor, simulator)
60
- await connectorTransport3.start()
61
-
62
- const options1 = createOptions(wsServerConnectorPeerDescriptor, {
63
- transport: connectorTransport1,
64
- websocketHost: '127.0.0.1',
65
- websocketPortRange: { min: 12223, max: 12223 }
66
- })
67
- const options2 = createOptions(noWsServerConnectorPeerDescriptor, {
68
- transport: connectorTransport2
69
- })
70
- const options3 = createOptions(biggerNoWsServerConnectorPeerDescriptor, {
71
- transport: connectorTransport3
72
- })
73
-
74
- wsServerManager = new ConnectionManager(options1)
75
- noWsServerManager = new ConnectionManager(options2)
76
- biggerNoWsServerManager = new ConnectionManager(options3)
77
-
78
- await wsServerManager.start()
79
- await noWsServerManager.start()
80
- await biggerNoWsServerManager.start()
81
- })
82
-
83
- afterEach(async () => {
84
- await wsServerManager.stop()
85
- await noWsServerManager.stop()
86
- await biggerNoWsServerManager.stop()
87
- await connectorTransport1.stop()
88
- await connectorTransport2.stop()
89
- await connectorTransport3.stop()
90
- })
91
-
92
- it('Can open connections to serverless peer with smaller nodeId', (done) => {
93
- const dummyMessage: Message = {
94
- serviceId: SERVICE_ID,
95
- body: {
96
- oneofKind: 'rpcMessage',
97
- rpcMessage: RpcMessage.create()
98
- },
99
- messageId: 'mockerer',
100
- targetDescriptor: noWsServerConnectorPeerDescriptor
101
- }
102
- noWsServerManager.on('message', (message: Message) => {
103
- expect(message.messageId).toEqual('mockerer')
104
-
105
- done()
106
- })
107
-
108
- wsServerManager.send(dummyMessage)
109
- })
110
-
111
- it('Can open connections to serverless peer with bigger nodeId', (done) => {
112
- const dummyMessage: Message = {
113
- serviceId: SERVICE_ID,
114
- body: {
115
- oneofKind: 'rpcMessage',
116
- rpcMessage: RpcMessage.create()
117
- },
118
- messageId: 'mockerer',
119
- targetDescriptor: biggerNoWsServerConnectorPeerDescriptor
120
- }
121
- biggerNoWsServerManager.on('message', (message: Message) => {
122
- expect(message.messageId).toEqual('mockerer')
123
- done()
124
- })
125
-
126
- wsServerManager.send(dummyMessage)
127
- })
128
-
129
- it('Failed connection requests are cleaned up', async () => {
130
- const dummyMessage: Message = {
131
- serviceId: SERVICE_ID,
132
- body: {
133
- oneofKind: 'rpcMessage',
134
- rpcMessage: RpcMessage.create()
135
- },
136
- messageId: 'mockerer',
137
- targetDescriptor: {
138
- nodeId: new Uint8Array([1, 2, 4]),
139
- type: NodeType.NODEJS
140
- }
141
- }
142
-
143
- await Promise.allSettled([
144
- waitForEvent3<TransportEvents>(wsServerManager, 'disconnected', 15000),
145
- wsServerManager.send(dummyMessage)
146
- ])
147
- expect(wsServerManager.hasConnection(toNodeId(dummyMessage.targetDescriptor!))).toBeFalse()
148
- }, 20000)
149
-
150
- it('Can open connections to peer with server', async () => {
151
- const dummyMessage: Message = {
152
- serviceId: SERVICE_ID,
153
- body: {
154
- oneofKind: 'rpcMessage',
155
- rpcMessage: RpcMessage.create()
156
- },
157
- messageId: 'mockerer',
158
- targetDescriptor: wsServerConnectorPeerDescriptor
159
- }
160
- await noWsServerManager.send(dummyMessage)
161
- await until(
162
- () => {
163
- const nodeId = toNodeId(noWsServerConnectorPeerDescriptor)
164
- return wsServerManager.hasConnection(nodeId)
165
- }
166
- )
167
- await until(
168
- () => noWsServerManager.hasConnection(toNodeId(wsServerConnectorPeerDescriptor))
169
- )
170
- })
171
-
172
- it('Connecting to self throws', async () => {
173
- const dummyMessage: Message = {
174
- serviceId: SERVICE_ID,
175
- body: {
176
- oneofKind: 'rpcMessage',
177
- rpcMessage: RpcMessage.create()
178
- },
179
- messageId: 'mockerer',
180
- targetDescriptor: noWsServerConnectorPeerDescriptor
181
- }
182
- await expect(noWsServerManager.send(dummyMessage))
183
- .rejects
184
- .toEqual(new Err.CannotConnectToSelf('Cannot send to self'))
185
-
186
- dummyMessage.targetDescriptor = wsServerConnectorPeerDescriptor
187
- await expect(wsServerManager.send(dummyMessage))
188
- .rejects
189
- .toEqual(new Err.CannotConnectToSelf('Cannot send to self'))
190
- })
191
- })