@streamr/dht 102.0.0-beta.0 → 102.0.0-beta.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 (264) hide show
  1. package/dist/generated/packages/dht/protos/DhtRpc.d.ts +16 -8
  2. package/dist/generated/packages/dht/protos/DhtRpc.js +7 -5
  3. package/dist/generated/packages/dht/protos/DhtRpc.js.map +1 -1
  4. package/dist/package.json +15 -16
  5. package/dist/src/connection/ConnectionManager.js +18 -8
  6. package/dist/src/connection/ConnectionManager.js.map +1 -1
  7. package/dist/src/connection/Handshaker.d.ts +1 -1
  8. package/dist/src/connection/Handshaker.js +9 -5
  9. package/dist/src/connection/Handshaker.js.map +1 -1
  10. package/dist/src/connection/ManagedConnection.js +17 -7
  11. package/dist/src/connection/ManagedConnection.js.map +1 -1
  12. package/dist/src/connection/connectivityChecker.js +20 -10
  13. package/dist/src/connection/connectivityChecker.js.map +1 -1
  14. package/dist/src/connection/connectivityRequestHandler.js +3 -3
  15. package/dist/src/connection/connectivityRequestHandler.js.map +1 -1
  16. package/dist/src/connection/simulator/Simulator.js +3 -2
  17. package/dist/src/connection/simulator/Simulator.js.map +1 -1
  18. package/dist/src/connection/simulator/pings.d.ts +1 -1
  19. package/dist/src/connection/simulator/pings.js +3 -3
  20. package/dist/src/connection/simulator/pings.js.map +1 -1
  21. package/dist/src/connection/webrtc/NodeWebrtcConnection.js +0 -2
  22. package/dist/src/connection/webrtc/NodeWebrtcConnection.js.map +1 -1
  23. package/dist/src/connection/webrtc/WebrtcConnector.js +19 -9
  24. package/dist/src/connection/webrtc/WebrtcConnector.js.map +1 -1
  25. package/dist/src/connection/webrtc/iceServerAsString.js +1 -2
  26. package/dist/src/connection/webrtc/iceServerAsString.js.map +1 -1
  27. package/dist/src/connection/websocket/AbstractWebsocketClientConnection.d.ts +0 -2
  28. package/dist/src/connection/websocket/WebsocketClientConnectorRpcLocal.d.ts +0 -1
  29. package/dist/src/connection/websocket/WebsocketServerConnection.d.ts +0 -1
  30. package/dist/src/connection/websocket/WebsocketServerConnector.js +28 -18
  31. package/dist/src/connection/websocket/WebsocketServerConnector.js.map +1 -1
  32. package/dist/src/dht/DhtNode.d.ts +1 -0
  33. package/dist/src/dht/DhtNode.js +3 -2
  34. package/dist/src/dht/DhtNode.js.map +1 -1
  35. package/dist/src/dht/DhtNodeRpcLocal.d.ts +1 -1
  36. package/dist/src/dht/PeerManager.d.ts +2 -1
  37. package/dist/src/dht/PeerManager.js +2 -1
  38. package/dist/src/dht/PeerManager.js.map +1 -1
  39. package/dist/src/dht/contact/SortedContactList.js +1 -1
  40. package/dist/src/dht/contact/SortedContactList.js.map +1 -1
  41. package/dist/src/dht/discovery/DiscoverySession.d.ts +0 -1
  42. package/dist/src/dht/discovery/PeerDiscovery.d.ts +0 -1
  43. package/dist/src/dht/discovery/RingDiscoverySession.d.ts +0 -1
  44. package/dist/src/dht/recursive-operation/RecursiveOperationManager.d.ts +2 -2
  45. package/dist/src/dht/routing/DuplicateDetector.js.map +1 -1
  46. package/dist/src/dht/routing/RoutingSession.js +2 -2
  47. package/dist/src/dht/routing/RoutingSession.js.map +1 -1
  48. package/dist/src/dht/routing/RoutingTablesCache.d.ts +1 -1
  49. package/dist/src/dht/store/LocalDataStore.js +1 -1
  50. package/dist/src/dht/store/LocalDataStore.js.map +1 -1
  51. package/dist/src/dht/store/StoreManager.d.ts +1 -1
  52. package/dist/src/dht/store/StoreRpcLocal.d.ts +1 -1
  53. package/dist/src/helpers/AddressTools.js +2 -3
  54. package/dist/src/helpers/AddressTools.js.map +1 -1
  55. package/dist/src/helpers/debugHelpers.js +2 -2
  56. package/dist/src/helpers/debugHelpers.js.map +1 -1
  57. package/dist/src/helpers/protoClasses.d.ts +1 -1
  58. package/dist/src/helpers/protoClasses.js.map +1 -1
  59. package/dist/src/helpers/protoToString.js +1 -2
  60. package/dist/src/helpers/protoToString.js.map +1 -1
  61. package/dist/src/helpers/version.d.ts +1 -1
  62. package/dist/src/helpers/version.js +4 -4
  63. package/dist/src/helpers/version.js.map +1 -1
  64. package/eslint.config.mjs +12 -0
  65. package/jest.config.ts +12 -0
  66. package/package.json +15 -16
  67. package/protos/DhtRpc.proto +6 -4
  68. package/.eslintignore +0 -5
  69. package/.eslintrc +0 -3
  70. package/generated/google/protobuf/any.ts +0 -326
  71. package/generated/google/protobuf/empty.ts +0 -81
  72. package/generated/google/protobuf/timestamp.ts +0 -287
  73. package/generated/packages/dht/protos/DhtRpc.client.ts +0 -419
  74. package/generated/packages/dht/protos/DhtRpc.server.ts +0 -165
  75. package/generated/packages/dht/protos/DhtRpc.ts +0 -1266
  76. package/generated/packages/proto-rpc/protos/ProtoRpc.ts +0 -108
  77. package/jest.config.js +0 -5
  78. package/src/connection/Connection.ts +0 -28
  79. package/src/connection/ConnectionLockRpcLocal.ts +0 -78
  80. package/src/connection/ConnectionLockRpcRemote.ts +0 -64
  81. package/src/connection/ConnectionLockStates.ts +0 -131
  82. package/src/connection/ConnectionManager.ts +0 -661
  83. package/src/connection/ConnectionsView.ts +0 -8
  84. package/src/connection/ConnectorFacade.ts +0 -217
  85. package/src/connection/Handshaker.ts +0 -205
  86. package/src/connection/IConnection.ts +0 -40
  87. package/src/connection/ManagedConnection.ts +0 -113
  88. package/src/connection/OutputBuffer.ts +0 -28
  89. package/src/connection/PendingConnection.ts +0 -68
  90. package/src/connection/connectivityChecker.ts +0 -108
  91. package/src/connection/connectivityRequestHandler.ts +0 -116
  92. package/src/connection/simulator/Simulator.ts +0 -368
  93. package/src/connection/simulator/SimulatorConnection.ts +0 -137
  94. package/src/connection/simulator/SimulatorConnector.ts +0 -98
  95. package/src/connection/simulator/SimulatorTransport.ts +0 -15
  96. package/src/connection/simulator/pings.ts +0 -42
  97. package/src/connection/webrtc/BrowserWebrtcConnection.ts +0 -242
  98. package/src/connection/webrtc/IWebrtcConnection.ts +0 -24
  99. package/src/connection/webrtc/NodeWebrtcConnection.ts +0 -247
  100. package/src/connection/webrtc/WebrtcConnector.ts +0 -234
  101. package/src/connection/webrtc/WebrtcConnectorRpcLocal.ts +0 -108
  102. package/src/connection/webrtc/WebrtcConnectorRpcRemote.ts +0 -60
  103. package/src/connection/webrtc/iceServerAsString.ts +0 -15
  104. package/src/connection/websocket/AbstractWebsocketClientConnection.ts +0 -122
  105. package/src/connection/websocket/AutoCertifierClientFacade.ts +0 -89
  106. package/src/connection/websocket/BrowserWebsocketClientConnection.ts +0 -44
  107. package/src/connection/websocket/NodeWebsocketClientConnection.ts +0 -39
  108. package/src/connection/websocket/WebsocketClientConnector.ts +0 -119
  109. package/src/connection/websocket/WebsocketClientConnectorRpcLocal.ts +0 -38
  110. package/src/connection/websocket/WebsocketClientConnectorRpcRemote.ts +0 -19
  111. package/src/connection/websocket/WebsocketServer.ts +0 -164
  112. package/src/connection/websocket/WebsocketServerConnection.ts +0 -109
  113. package/src/connection/websocket/WebsocketServerConnector.ts +0 -286
  114. package/src/dht/DhtNode.ts +0 -678
  115. package/src/dht/DhtNodeRpcLocal.ts +0 -84
  116. package/src/dht/DhtNodeRpcRemote.ts +0 -107
  117. package/src/dht/ExternalApiRpcLocal.ts +0 -58
  118. package/src/dht/ExternalApiRpcRemote.ts +0 -41
  119. package/src/dht/PeerManager.ts +0 -303
  120. package/src/dht/contact/Contact.ts +0 -19
  121. package/src/dht/contact/ContactList.ts +0 -43
  122. package/src/dht/contact/RandomContactList.ts +0 -56
  123. package/src/dht/contact/RingContactList.ts +0 -143
  124. package/src/dht/contact/RpcRemote.ts +0 -72
  125. package/src/dht/contact/SortedContactList.ts +0 -173
  126. package/src/dht/contact/getClosestNodes.ts +0 -24
  127. package/src/dht/contact/ringIdentifiers.ts +0 -62
  128. package/src/dht/discovery/DiscoverySession.ts +0 -129
  129. package/src/dht/discovery/PeerDiscovery.ts +0 -244
  130. package/src/dht/discovery/RingDiscoverySession.ts +0 -148
  131. package/src/dht/recursive-operation/RecursiveOperationManager.ts +0 -251
  132. package/src/dht/recursive-operation/RecursiveOperationRpcLocal.ts +0 -34
  133. package/src/dht/recursive-operation/RecursiveOperationRpcRemote.ts +0 -43
  134. package/src/dht/recursive-operation/RecursiveOperationSession.ts +0 -231
  135. package/src/dht/recursive-operation/RecursiveOperationSessionRpcLocal.ts +0 -35
  136. package/src/dht/recursive-operation/RecursiveOperationSessionRpcRemote.ts +0 -30
  137. package/src/dht/routing/DuplicateDetector.ts +0 -34
  138. package/src/dht/routing/Router.ts +0 -246
  139. package/src/dht/routing/RouterRpcLocal.ts +0 -78
  140. package/src/dht/routing/RouterRpcRemote.ts +0 -80
  141. package/src/dht/routing/RoutingSession.ts +0 -243
  142. package/src/dht/routing/RoutingTablesCache.ts +0 -60
  143. package/src/dht/routing/getPreviousPeer.ts +0 -6
  144. package/src/dht/store/LocalDataStore.ts +0 -84
  145. package/src/dht/store/StoreManager.ts +0 -170
  146. package/src/dht/store/StoreRpcLocal.ts +0 -89
  147. package/src/dht/store/StoreRpcRemote.ts +0 -32
  148. package/src/exports.ts +0 -33
  149. package/src/helpers/AddressTools.ts +0 -28
  150. package/src/helpers/Connectivity.ts +0 -19
  151. package/src/helpers/browser/isBrowserEnvironment.ts +0 -1
  152. package/src/helpers/browser/isBrowserEnvironment_override.ts +0 -3
  153. package/src/helpers/createPeerDescriptor.ts +0 -57
  154. package/src/helpers/createPeerDescriptorSignaturePayload.ts +0 -28
  155. package/src/helpers/debugHelpers.ts +0 -9
  156. package/src/helpers/errors.ts +0 -49
  157. package/src/helpers/offering.ts +0 -15
  158. package/src/helpers/protoClasses.ts +0 -57
  159. package/src/helpers/protoToString.ts +0 -21
  160. package/src/helpers/version.ts +0 -32
  161. package/src/identifiers.ts +0 -29
  162. package/src/rpc-protocol/DhtCallContext.ts +0 -14
  163. package/src/rpc-protocol/DhtRpcOptions.ts +0 -10
  164. package/src/transport/ITransport.ts +0 -37
  165. package/src/transport/ListeningRpcCommunicator.ts +0 -32
  166. package/src/transport/RoutingRpcCommunicator.ts +0 -66
  167. package/src/types/ServiceID.ts +0 -1
  168. package/src/types/textencoding.d.ts +0 -6
  169. package/test/benchmark/Find.test.ts +0 -72
  170. package/test/benchmark/KademliaCorrectness.test.ts +0 -114
  171. package/test/benchmark/RingCorrectness.test.ts +0 -157
  172. package/test/benchmark/SortedContactListBenchmark.test.ts +0 -108
  173. package/test/benchmark/WebsocketServerMemoryLeak.test.ts +0 -41
  174. package/test/benchmark/hybrid-network-simulation/RingContactList.test.ts +0 -71
  175. package/test/end-to-end/GeoIpLayer0.test.ts +0 -55
  176. package/test/end-to-end/Layer0-Layer1.test.ts +0 -93
  177. package/test/end-to-end/Layer0.test.ts +0 -76
  178. package/test/end-to-end/Layer0MixedConnectionTypes.test.ts +0 -110
  179. package/test/end-to-end/Layer0Webrtc-Layer1.test.ts +0 -137
  180. package/test/end-to-end/Layer0Webrtc.test.ts +0 -85
  181. package/test/end-to-end/Layer1-Scale-WebSocket.test.ts +0 -82
  182. package/test/end-to-end/Layer1-Scale-Webrtc.test.ts +0 -76
  183. package/test/end-to-end/RecoveryFromFailedAutoCertification.test.ts +0 -52
  184. package/test/end-to-end/WebsocketConnectionRequest.test.ts +0 -69
  185. package/test/end-to-end/memory-leak.test.ts +0 -80
  186. package/test/integration/ConnectionLocking.test.ts +0 -182
  187. package/test/integration/ConnectionManager.test.ts +0 -528
  188. package/test/integration/ConnectivityChecking.test.ts +0 -53
  189. package/test/integration/DhtJoinPeerDiscovery.test.ts +0 -49
  190. package/test/integration/DhtNode.test.ts +0 -66
  191. package/test/integration/DhtNodeExternalAPI.test.ts +0 -48
  192. package/test/integration/DhtNodeRpcRemote.test.ts +0 -66
  193. package/test/integration/DhtRpc.test.ts +0 -121
  194. package/test/integration/Find.test.ts +0 -45
  195. package/test/integration/GeoIpConnectivityChecking.test.ts +0 -72
  196. package/test/integration/Layer1-scale.test.ts +0 -189
  197. package/test/integration/Mock-Layer1-Layer0.test.ts +0 -85
  198. package/test/integration/MultipleEntryPointJoining.test.ts +0 -105
  199. package/test/integration/ReplicateData.test.ts +0 -104
  200. package/test/integration/RouteMessage.test.ts +0 -230
  201. package/test/integration/RouterRpcRemote.test.ts +0 -77
  202. package/test/integration/SimultaneousConnections.test.ts +0 -316
  203. package/test/integration/Store.test.ts +0 -85
  204. package/test/integration/StoreAndDelete.test.ts +0 -77
  205. package/test/integration/StoreOnDhtWithThreeNodes.test.ts +0 -59
  206. package/test/integration/StoreOnDhtWithTwoNodes.test.ts +0 -51
  207. package/test/integration/StoreRpcRemote.test.ts +0 -54
  208. package/test/integration/WebrtcConnectionManagement.test.ts +0 -219
  209. package/test/integration/WebrtcConnectorRpc.test.ts +0 -125
  210. package/test/integration/Websocket.test.ts +0 -65
  211. package/test/integration/WebsocketClientConnectorRpc.test.ts +0 -69
  212. package/test/integration/WebsocketConnectionManagement.test.ts +0 -191
  213. package/test/integration/rpc-connections-over-webrtc.test.ts +0 -158
  214. package/test/kademlia-simulation/data/nodeids.json +0 -13002
  215. package/test/kademlia-simulation/data/orderedneighbors.json +0 -1001
  216. package/test/types/global.d.ts +0 -1
  217. package/test/unit/AddressTools.test.ts +0 -44
  218. package/test/unit/AutoCertifierClientFacade.test.ts +0 -58
  219. package/test/unit/ConnectionManager.test.ts +0 -65
  220. package/test/unit/ConnectivityHelpers.test.ts +0 -61
  221. package/test/unit/DiscoverySession.test.ts +0 -87
  222. package/test/unit/DuplicateDetector.test.ts +0 -31
  223. package/test/unit/Handshaker.test.ts +0 -169
  224. package/test/unit/ListeningRpcCommunicator.test.ts +0 -52
  225. package/test/unit/LocalDataStore.test.ts +0 -108
  226. package/test/unit/ManagedConnection.test.ts +0 -58
  227. package/test/unit/PeerManager.test.ts +0 -93
  228. package/test/unit/PendingConnection.test.ts +0 -57
  229. package/test/unit/ProtobufMessage.test.ts +0 -21
  230. package/test/unit/RandomContactList.test.ts +0 -58
  231. package/test/unit/RecursiveOperationManager.test.ts +0 -161
  232. package/test/unit/RecursiveOperationSession.test.ts +0 -68
  233. package/test/unit/Router.test.ts +0 -137
  234. package/test/unit/RoutingSession.test.ts +0 -79
  235. package/test/unit/SortedContactList.test.ts +0 -115
  236. package/test/unit/StoreManager.test.ts +0 -146
  237. package/test/unit/StoreRpcLocal.test.ts +0 -167
  238. package/test/unit/WebrtcConnection.test.ts +0 -29
  239. package/test/unit/WebrtcConnector.test.ts +0 -56
  240. package/test/unit/WebsocketClientConnector.test.ts +0 -101
  241. package/test/unit/WebsocketServer.test.ts +0 -66
  242. package/test/unit/WebsocketServerConnector.test.ts +0 -102
  243. package/test/unit/connectivityRequestHandler.test.ts +0 -104
  244. package/test/unit/createPeerDescriptor.test.ts +0 -69
  245. package/test/unit/customMatchers.test.ts +0 -16
  246. package/test/unit/getClosestNodes.test.ts +0 -30
  247. package/test/unit/version.test.ts +0 -18
  248. package/test/unit/webrtcReplaceInternalIpWithExternalIp.test.ts +0 -18
  249. package/test/utils/FakeConnectorFacade.ts +0 -41
  250. package/test/utils/FakeRpcCommunicator.ts +0 -23
  251. package/test/utils/FakeTransport.ts +0 -79
  252. package/test/utils/customMatchers.ts +0 -71
  253. package/test/utils/mock/MockConnection.ts +0 -26
  254. package/test/utils/mock/MockConnectionsView.ts +0 -18
  255. package/test/utils/mock/MockRouter.ts +0 -62
  256. package/test/utils/mock/MockRpcCommunicator.ts +0 -7
  257. package/test/utils/mock/MockTransport.ts +0 -26
  258. package/test/utils/mock/mockDataEntry.ts +0 -38
  259. package/test/utils/topology.ts +0 -80
  260. package/test/utils/utils.ts +0 -268
  261. package/tsconfig.browser.json +0 -17
  262. package/tsconfig.jest.json +0 -25
  263. package/tsconfig.json +0 -3
  264. package/tsconfig.node.json +0 -24
@@ -1,217 +0,0 @@
1
- import { Logger } from '@streamr/utils'
2
- import {
3
- ConnectivityResponse,
4
- PeerDescriptor
5
- } from '../../generated/packages/dht/protos/DhtRpc'
6
- import { ITransport } from '../transport/ITransport'
7
- import { PortRange, TlsCertificate } from './ConnectionManager'
8
- import { Simulator } from './simulator/Simulator'
9
- import { SimulatorConnector } from './simulator/SimulatorConnector'
10
- import { IceServer, WebrtcConnector } from './webrtc/WebrtcConnector'
11
- import { WebsocketClientConnector } from './websocket/WebsocketClientConnector'
12
- import { DhtAddress } from '../identifiers'
13
- import { WebsocketServerConnector, WebsocketServerConnectorOptions } from './websocket/WebsocketServerConnector'
14
- import { PendingConnection } from './PendingConnection'
15
- import { ListeningRpcCommunicator } from '../transport/ListeningRpcCommunicator'
16
-
17
- export interface ConnectorFacade {
18
- createConnection: (peerDescriptor: PeerDescriptor) => PendingConnection
19
- getLocalPeerDescriptor: () => PeerDescriptor | undefined
20
- start: (
21
- onNewConnection: (connection: PendingConnection) => boolean,
22
- hasConnection: (nodeId: DhtAddress) => boolean,
23
- autoCertifierTransport: ITransport
24
- ) => Promise<void>
25
- stop: () => Promise<void>
26
- }
27
-
28
- const logger = new Logger(module)
29
-
30
- // TODO: Wrap component specific configs to their own objects.
31
- export interface DefaultConnectorFacadeOptions {
32
- transport: ITransport
33
- websocketHost?: string
34
- websocketPortRange?: PortRange
35
- entryPoints?: PeerDescriptor[]
36
- iceServers?: IceServer[]
37
- webrtcAllowPrivateAddresses?: boolean
38
- webrtcDatachannelBufferThresholdLow?: number
39
- webrtcDatachannelBufferThresholdHigh?: number
40
- externalIp?: string
41
- webrtcPortRange?: PortRange
42
- maxMessageSize?: number
43
- tlsCertificate?: TlsCertificate
44
- // TODO explicit default value for "websocketServerEnableTls" or make it required
45
- websocketServerEnableTls?: boolean
46
- autoCertifierUrl?: string
47
- autoCertifierConfigFile?: string
48
- geoIpDatabaseFolder?: string
49
- createLocalPeerDescriptor: (connectivityResponse: ConnectivityResponse) => Promise<PeerDescriptor>
50
- }
51
-
52
- export class DefaultConnectorFacade implements ConnectorFacade {
53
-
54
- private readonly options: DefaultConnectorFacadeOptions
55
- private localPeerDescriptor?: PeerDescriptor
56
- private websocketConnectorRpcCommunicator?: ListeningRpcCommunicator
57
- private websocketClientConnector?: WebsocketClientConnector
58
- private websocketServerConnector?: WebsocketServerConnector
59
- private webrtcConnector?: WebrtcConnector
60
- constructor(options: DefaultConnectorFacadeOptions) {
61
- this.options = options
62
- }
63
-
64
- async start(
65
- onNewConnection: (connection: PendingConnection) => boolean,
66
- hasConnection: (nodeId: DhtAddress) => boolean,
67
- autoCertifierTransport: ITransport
68
- ): Promise<void> {
69
- logger.trace(`Creating WebsocketConnectorRpcLocal`)
70
- this.websocketConnectorRpcCommunicator = new ListeningRpcCommunicator(
71
- WebsocketClientConnector.WEBSOCKET_CONNECTOR_SERVICE_ID,
72
- this.options.transport,
73
- { rpcRequestTimeout: 15000 } // TODO use options option or named constant?
74
-
75
- )
76
- const webSocketClientConnectorOptions = {
77
- // TODO should we use canConnect also for WebrtcConnector? (NET-1142)
78
- onNewConnection,
79
- hasConnection,
80
- rpcCommunicator: this.websocketConnectorRpcCommunicator
81
- }
82
- this.websocketClientConnector = new WebsocketClientConnector(webSocketClientConnectorOptions)
83
-
84
- const webSocketServerConnectorOptions = {
85
- rpcCommunicator: this.websocketConnectorRpcCommunicator,
86
- // TODO should we use canConnect also for WebrtcConnector? (NET-1142)
87
- onNewConnection,
88
- hasConnection,
89
- portRange: this.options.websocketPortRange,
90
- host: this.options.websocketHost,
91
- entrypoints: this.options.entryPoints,
92
- tlsCertificate: this.options.tlsCertificate,
93
- serverEnableTls: this.options.websocketServerEnableTls!,
94
- autoCertifierUrl: this.options.autoCertifierUrl!,
95
- autoCertifierConfigFile: this.options.autoCertifierConfigFile!,
96
- autoCertifierTransport,
97
- maxMessageSize: this.options.maxMessageSize,
98
- geoIpDatabaseFolder: this.options.geoIpDatabaseFolder
99
- }
100
- this.websocketServerConnector = new WebsocketServerConnector(webSocketServerConnectorOptions)
101
- this.webrtcConnector = new WebrtcConnector({
102
- onNewConnection,
103
- transport: this.options.transport,
104
- iceServers: this.options.iceServers,
105
- allowPrivateAddresses: this.options.webrtcAllowPrivateAddresses,
106
- bufferThresholdLow: this.options.webrtcDatachannelBufferThresholdLow,
107
- bufferThresholdHigh: this.options.webrtcDatachannelBufferThresholdHigh,
108
- externalIp: this.options.externalIp,
109
- portRange: this.options.webrtcPortRange,
110
- maxMessageSize: this.options.maxMessageSize
111
- })
112
- await this.websocketServerConnector.start()
113
- // TODO: generate a PeerDescriptor in a single function. Requires changes to the createOwnPeerDescriptor
114
- // function in the options. Currently it's given by the DhtNode and it sets the PeerDescriptor for the
115
- // DhtNode in each call.
116
- // LocalPeerDescriptor could be stored in one place and passed from there to the connectors
117
- const temporarilySelfSigned = (!this.options.tlsCertificate && this.options.websocketServerEnableTls === true)
118
- const connectivityResponse = await this.websocketServerConnector.checkConnectivity(temporarilySelfSigned)
119
- const localPeerDescriptor = await this.options.createLocalPeerDescriptor(connectivityResponse)
120
- this.setLocalPeerDescriptor(localPeerDescriptor)
121
- if (localPeerDescriptor.websocket && !this.options.tlsCertificate && this.options.websocketServerEnableTls) {
122
- try {
123
- await this.websocketServerConnector.autoCertify()
124
- const connectivityResponse = await this.websocketServerConnector.checkConnectivity(false)
125
- const autocertifiedLocalPeerDescriptor = await this.options.createLocalPeerDescriptor(connectivityResponse)
126
- if (autocertifiedLocalPeerDescriptor.websocket !== undefined) {
127
- this.setLocalPeerDescriptor(autocertifiedLocalPeerDescriptor)
128
- } else {
129
- logger.warn('Connectivity check failed after auto-certification, disabling WebSocket server TLS')
130
- await this.restartWebsocketServerConnector({
131
- ...webSocketServerConnectorOptions,
132
- serverEnableTls: false
133
- })
134
- }
135
- } catch (err) {
136
- logger.warn('Failed to auto-certify, disabling WebSocket server TLS', { err })
137
- await this.restartWebsocketServerConnector({
138
- ...webSocketServerConnectorOptions,
139
- serverEnableTls: false
140
- })
141
- }
142
- }
143
- }
144
-
145
- private setLocalPeerDescriptor(peerDescriptor: PeerDescriptor) {
146
- this.localPeerDescriptor = peerDescriptor
147
- this.websocketServerConnector!.setLocalPeerDescriptor(peerDescriptor)
148
- this.websocketClientConnector!.setLocalPeerDescriptor(peerDescriptor)
149
- this.webrtcConnector!.setLocalPeerDescriptor(peerDescriptor)
150
- }
151
-
152
- async restartWebsocketServerConnector(options: WebsocketServerConnectorOptions): Promise<void> {
153
- await this.websocketServerConnector!.destroy()
154
- this.websocketServerConnector = new WebsocketServerConnector(options)
155
- await this.websocketServerConnector.start()
156
- const connectivityResponse = await this.websocketServerConnector.checkConnectivity(false)
157
- const localPeerDescriptor = await this.options.createLocalPeerDescriptor(connectivityResponse)
158
- this.setLocalPeerDescriptor(localPeerDescriptor)
159
- }
160
-
161
- createConnection(peerDescriptor: PeerDescriptor): PendingConnection {
162
- if (this.websocketClientConnector!.isPossibleToFormConnection(peerDescriptor)) {
163
- return this.websocketClientConnector!.connect(peerDescriptor)
164
- } else if (this.websocketServerConnector!.isPossibleToFormConnection(peerDescriptor)) {
165
- return this.websocketServerConnector!.connect(peerDescriptor)
166
- } else {
167
- return this.webrtcConnector!.connect(peerDescriptor, false)
168
- }
169
- }
170
-
171
- getLocalPeerDescriptor(): PeerDescriptor | undefined {
172
- return this.localPeerDescriptor
173
- }
174
-
175
- async stop(): Promise<void> {
176
- this.websocketConnectorRpcCommunicator!.destroy()
177
- await this.websocketServerConnector!.destroy()
178
- await this.websocketClientConnector!.destroy()
179
- await this.webrtcConnector!.stop()
180
- }
181
- }
182
-
183
- export class SimulatorConnectorFacade implements ConnectorFacade {
184
-
185
- private readonly localPeerDescriptor: PeerDescriptor
186
- private simulatorConnector?: SimulatorConnector
187
- private simulator: Simulator
188
-
189
- constructor(localPeerDescriptor: PeerDescriptor, simulator: Simulator) {
190
- this.localPeerDescriptor = localPeerDescriptor
191
- this.simulator = simulator
192
- }
193
-
194
- async start(
195
- onNewConnection: (connection: PendingConnection) => boolean,
196
- ): Promise<void> {
197
- logger.trace(`Creating SimulatorConnector`)
198
- this.simulatorConnector = new SimulatorConnector(
199
- this.localPeerDescriptor,
200
- this.simulator,
201
- onNewConnection
202
- )
203
- this.simulator.addConnector(this.simulatorConnector)
204
- }
205
-
206
- createConnection(peerDescriptor: PeerDescriptor): PendingConnection {
207
- return this.simulatorConnector!.connect(peerDescriptor)
208
- }
209
-
210
- getLocalPeerDescriptor(): PeerDescriptor {
211
- return this.localPeerDescriptor
212
- }
213
-
214
- async stop(): Promise<void> {
215
- await this.simulatorConnector!.stop()
216
- }
217
- }
@@ -1,205 +0,0 @@
1
- import { Logger } from '@streamr/utils'
2
- import { EventEmitter } from 'eventemitter3'
3
- import { v4 } from 'uuid'
4
- import { Message, HandshakeRequest, HandshakeResponse, PeerDescriptor, HandshakeError } from '../../generated/packages/dht/protos/DhtRpc'
5
- import { IConnection } from './IConnection'
6
- import { LOCAL_PROTOCOL_VERSION, isMaybeSupportedVersion } from '../helpers/version'
7
- import { toNodeId } from '../identifiers'
8
- import { PendingConnection } from './PendingConnection'
9
-
10
- const logger = new Logger(module)
11
-
12
- interface HandshakerEvents {
13
- handshakeRequest: (source: PeerDescriptor, version: string, target?: PeerDescriptor) => void
14
- handshakeCompleted: (remote: PeerDescriptor) => void
15
- handshakeFailed: (error?: HandshakeError) => void
16
- }
17
-
18
- // Optimally the Outgoing and Incoming Handshakers could be their own separate classes
19
- // However, in cases where the PeerDescriptor of the other end of the connection can be known
20
- // only after a HandshakeRequest a base Handshaker class is needed as the IncomingHandshaker currently
21
- // requires knowledge of the other ends PeerDescriptor. (Note PendingConnection requires the remote PeerDescriptor)
22
- export const createOutgoingHandshaker = (
23
- localPeerDescriptor: PeerDescriptor,
24
- pendingConnection: PendingConnection,
25
- connection: IConnection,
26
- targetPeerDescriptor?: PeerDescriptor
27
- ): Handshaker => {
28
- const handshaker = new Handshaker(localPeerDescriptor, connection)
29
- const stopHandshaker = () => {
30
- handshaker.stop()
31
- connection.off('disconnected', disconnectedListener)
32
- connection.off('connected', connectedListener)
33
- handshaker.off('handshakeCompleted', handshakeCompletedListener)
34
- handshaker.off('handshakeFailed', handshakeFailedListener)
35
- pendingConnection.off('disconnected', managedConnectionDisconnectedListener)
36
- }
37
- const handshakeFailedListener = (error?: HandshakeError) => {
38
- if (error === HandshakeError.INVALID_TARGET_PEER_DESCRIPTOR || error === HandshakeError.UNSUPPORTED_VERSION) {
39
- pendingConnection.close(false)
40
- stopHandshaker()
41
- } else {
42
- // Wait for the other end to close the connection
43
- }
44
- }
45
- const handshakeCompletedListener = (peerDescriptor: PeerDescriptor) => {
46
- logger.trace('handshake completed for outgoing connection, ' + toNodeId(peerDescriptor))
47
- pendingConnection.onHandshakeCompleted(connection)
48
- stopHandshaker()
49
- }
50
- const connectedListener = () => handshaker.sendHandshakeRequest(targetPeerDescriptor)
51
- const disconnectedListener = (graceful: boolean) => {
52
- pendingConnection.close(graceful)
53
- stopHandshaker()
54
- }
55
- const managedConnectionDisconnectedListener = () => {
56
- connection.close(false)
57
- stopHandshaker()
58
- }
59
- handshaker.once('handshakeFailed', handshakeFailedListener)
60
- handshaker.once('handshakeCompleted', handshakeCompletedListener)
61
- connection.once('connected', connectedListener)
62
- connection.once('disconnected', disconnectedListener)
63
- pendingConnection.once('disconnected', managedConnectionDisconnectedListener)
64
- return handshaker
65
- }
66
-
67
- export const createIncomingHandshaker = (
68
- localPeerDescriptor: PeerDescriptor,
69
- pendingConnection: PendingConnection,
70
- connection: IConnection
71
- ): Handshaker => {
72
- const handshaker = new Handshaker(localPeerDescriptor, connection)
73
- const stopHandshaker = () => {
74
- handshaker.stop()
75
- pendingConnection.off('disconnected', connectionDisconnected)
76
- connection.off('disconnected', connectionDisconnected)
77
- }
78
- const onHandshakeRequest = (): void => {
79
- stopHandshaker()
80
- }
81
- const connectionDisconnected = (graceful: boolean) => {
82
- pendingConnection.close(graceful)
83
- stopHandshaker()
84
- }
85
- const managedConnectionDisconnected = () => {
86
- connection.close(false)
87
- stopHandshaker()
88
- }
89
- handshaker.on('handshakeRequest', onHandshakeRequest)
90
- connection.once('disconnected', connectionDisconnected)
91
- pendingConnection.once('disconnected', managedConnectionDisconnected)
92
- return handshaker
93
- }
94
-
95
- export const rejectHandshake = (
96
- pendingConnection: PendingConnection,
97
- connection: IConnection,
98
- handshaker: Handshaker,
99
- error: HandshakeError
100
- ): void => {
101
- handshaker.sendHandshakeResponse(error)
102
- connection.destroy()
103
- pendingConnection.destroy()
104
- }
105
-
106
- export const acceptHandshake = (handshaker: Handshaker, pendingConnection: PendingConnection, connection: IConnection): void => {
107
- handshaker.sendHandshakeResponse()
108
- pendingConnection.onHandshakeCompleted(connection)
109
- }
110
-
111
- export const createHandshakeRequest = (localPeerDescriptor: PeerDescriptor, remotePeerDescriptor: PeerDescriptor): Message => {
112
- const outgoingHandshake: HandshakeRequest = {
113
- sourcePeerDescriptor: localPeerDescriptor,
114
- targetPeerDescriptor: remotePeerDescriptor,
115
- version: LOCAL_PROTOCOL_VERSION
116
- }
117
- return {
118
- serviceId: Handshaker.HANDSHAKER_SERVICE_ID,
119
- messageId: v4(),
120
- body: {
121
- oneofKind: 'handshakeRequest',
122
- handshakeRequest: outgoingHandshake
123
- }
124
- }
125
- }
126
-
127
- export const createHandshakeResponse = (localPeerDescriptor: PeerDescriptor, error?: HandshakeError): Message => {
128
- const outgoingHandshakeResponse: HandshakeResponse = {
129
- sourcePeerDescriptor: localPeerDescriptor,
130
- error,
131
- version: LOCAL_PROTOCOL_VERSION
132
- }
133
- return {
134
- serviceId: Handshaker.HANDSHAKER_SERVICE_ID,
135
- messageId: v4(),
136
- body: {
137
- oneofKind: 'handshakeResponse',
138
- handshakeResponse: outgoingHandshakeResponse
139
- }
140
- }
141
- }
142
-
143
- export class Handshaker extends EventEmitter<HandshakerEvents> {
144
-
145
- public static readonly HANDSHAKER_SERVICE_ID = 'system/handshaker'
146
- private localPeerDescriptor: PeerDescriptor
147
- private connection: IConnection
148
- private readonly onDataListener: (data: Uint8Array) => void
149
- constructor(
150
- localPeerDescriptor: PeerDescriptor,
151
- connection: IConnection
152
- ) {
153
- super()
154
- this.localPeerDescriptor = localPeerDescriptor
155
- this.connection = connection
156
- this.onDataListener = (data: Uint8Array) => this.onData(data)
157
- this.connection.on('data', this.onDataListener)
158
- }
159
-
160
- private onData(data: Uint8Array) {
161
- try {
162
- const message = Message.fromBinary(data)
163
- if (message.body.oneofKind === 'handshakeRequest') {
164
- logger.trace('handshake request received')
165
- const handshake = message.body.handshakeRequest
166
- this.emit(
167
- 'handshakeRequest',
168
- handshake.sourcePeerDescriptor!,
169
- handshake.version,
170
- handshake.targetPeerDescriptor
171
- )
172
- }
173
- if (message.body.oneofKind === 'handshakeResponse') {
174
- logger.trace('handshake response received')
175
- const handshake = message.body.handshakeResponse
176
- const error = !isMaybeSupportedVersion(handshake.version) ? HandshakeError.UNSUPPORTED_VERSION : handshake.error
177
- if (error !== undefined) {
178
- this.emit('handshakeFailed', error)
179
- } else {
180
- this.emit('handshakeCompleted', handshake.sourcePeerDescriptor!)
181
- }
182
- }
183
- } catch (err) {
184
- logger.debug('error while parsing handshake message', err)
185
- }
186
-
187
- }
188
-
189
- public sendHandshakeRequest(remotePeerDescriptor?: PeerDescriptor): void {
190
- const msg = createHandshakeRequest(this.localPeerDescriptor, remotePeerDescriptor!)
191
- this.connection.send(Message.toBinary(msg))
192
- logger.trace('handshake request sent')
193
- }
194
-
195
- public sendHandshakeResponse(error?: HandshakeError): void {
196
- const msg = createHandshakeResponse(this.localPeerDescriptor, error)
197
- this.connection.send(Message.toBinary(msg))
198
- logger.trace('handshake response sent')
199
- }
200
-
201
- public stop(): void {
202
- this.connection.off('data', this.onDataListener)
203
- this.removeAllListeners()
204
- }
205
- }
@@ -1,40 +0,0 @@
1
- import { BrandedString } from '@streamr/utils'
2
-
3
- export interface ConnectionEvents {
4
- data: (bytes: Uint8Array) => void
5
- connected: () => void
6
- disconnected: (gracefulLeave: boolean, code?: number, reason?: string) => void
7
- error: (name: string) => void
8
- }
9
-
10
- export enum ConnectionType {
11
- WEBSOCKET_SERVER = 'websocket-server',
12
- WEBSOCKET_CLIENT = 'websocket-client',
13
- WEBRTC = 'webrtc',
14
- SIMULATOR_SERVER = 'simulator-server',
15
- SIMULATOR_CLIENT = 'simulator-client',
16
- }
17
-
18
- export type ConnectionID = BrandedString<'ConnectionID'>
19
-
20
- export interface IConnection {
21
-
22
- on(event: 'data', listener: (bytes: Uint8Array) => void): this
23
- on(event: 'error', listener: (name: string) => void): this
24
- on(event: 'connected', listener: () => void): this
25
- on(event: 'disconnected', listener: (gracefulLeave: boolean, code?: number, reason?: string) => void): this
26
-
27
- once(event: 'data', listener: (bytes: Uint8Array) => void): this
28
- once(event: 'error', listener: (name: string) => void): this
29
- once(event: 'connected', listener: () => void): this
30
- once(event: 'disconnected', listener: (gracefulLeave: boolean, code?: number, reason?: string) => void): this
31
-
32
- off(event: 'data', listener: (bytes: Uint8Array) => void): void
33
- off(event: 'error', listener: (name: string) => void): void
34
- off(event: 'connected', listener: () => void): void
35
- off(event: 'disconnected', listener: (gracefulLeave: boolean, code?: number, reason?: string) => void): void
36
-
37
- send(data: Uint8Array): void
38
- close(gracefulLeave: boolean): Promise<void>
39
- destroy(): void
40
- }
@@ -1,113 +0,0 @@
1
- import { ConnectionID, IConnection } from './IConnection'
2
- import * as Err from '../helpers/errors'
3
- import { PeerDescriptor } from '../../generated/packages/dht/protos/DhtRpc'
4
- import { Logger } from '@streamr/utils'
5
- import EventEmitter from 'eventemitter3'
6
- import { getNodeIdOrUnknownFromPeerDescriptor } from './ConnectionManager'
7
- import { DhtAddress, toNodeId } from '../identifiers'
8
- import { createRandomConnectionId } from './Connection'
9
-
10
- export interface ManagedConnectionEvents {
11
- managedData: (bytes: Uint8Array, remotePeerDescriptor: PeerDescriptor) => void
12
- disconnected: (gracefulLeave: boolean) => void
13
- }
14
-
15
- const logger = new Logger(module)
16
-
17
- export type Events = ManagedConnectionEvents
18
-
19
- // ManagedConnection is a component used as a wrapper for IConnection after they have been successfully handshaked.
20
- // Should only be used in the ConnectionManager.
21
- export class ManagedConnection extends EventEmitter<ManagedConnectionEvents> {
22
-
23
- private connection: IConnection
24
- public connectionId: ConnectionID
25
- private remotePeerDescriptor: PeerDescriptor
26
- private lastUsedTimestamp: number = Date.now()
27
- private replacedAsDuplicate = false
28
- private stopped = false
29
- private openedAt = Date.now()
30
- private bytesSent = 0
31
- private bytesReceived = 0
32
- private messagesSent = 0
33
- private messagesReceived = 0
34
-
35
- constructor(peerDescriptor: PeerDescriptor, connection: IConnection) {
36
- super()
37
- this.connectionId = createRandomConnectionId()
38
- this.connection = connection
39
-
40
- connection.on('data', (bytes: Uint8Array) => {
41
- this.lastUsedTimestamp = Date.now()
42
- this.messagesReceived += 1
43
- this.bytesReceived += bytes.length
44
- this.emit('managedData', bytes, this.getPeerDescriptor()!)
45
- })
46
- connection.on('disconnected', (gracefulLeave) => this.onDisconnected(gracefulLeave))
47
-
48
- this.lastUsedTimestamp = Date.now()
49
- this.remotePeerDescriptor = peerDescriptor
50
- }
51
-
52
- private onDisconnected(gracefulLeave: boolean): void {
53
- logger.trace(getNodeIdOrUnknownFromPeerDescriptor(this.remotePeerDescriptor) + ' onDisconnected() ' + gracefulLeave)
54
- if (!this.replacedAsDuplicate) {
55
- this.emit('disconnected', gracefulLeave)
56
- }
57
- this.removeAllListeners()
58
- }
59
-
60
- // TODO: Can this be removed if ManagedConnections can never be duplicates?
61
- // Handle duplicates in the ConncetorFacade and no longer have PendingConnections in ConnectionManager
62
- replaceAsDuplicate(): void {
63
- logger.trace(getNodeIdOrUnknownFromPeerDescriptor(this.remotePeerDescriptor) + ' replaceAsDuplicate')
64
- this.replacedAsDuplicate = true
65
- }
66
-
67
- send(data: Uint8Array): void {
68
- if (this.stopped) {
69
- throw new Err.SendFailed('ManagedConnection is stopped')
70
- }
71
- this.lastUsedTimestamp = Date.now()
72
- this.messagesSent += 1
73
- this.bytesSent += data.length
74
- this.connection.send(data)
75
- }
76
-
77
- async close(gracefulLeave: boolean): Promise<void> {
78
- if (this.stopped) {
79
- return
80
- }
81
- await this.connection.close(gracefulLeave)
82
- this.removeAllListeners()
83
- }
84
-
85
- getNodeId(): DhtAddress {
86
- return toNodeId(this.remotePeerDescriptor)
87
- }
88
-
89
- getLastUsedTimestamp(): number {
90
- return this.lastUsedTimestamp
91
- }
92
-
93
- getPeerDescriptor(): PeerDescriptor | undefined {
94
- return this.remotePeerDescriptor
95
- }
96
-
97
- getDiagnosticInfo(): Record<string, unknown> {
98
- return {
99
- remotePeerDescriptor: this.remotePeerDescriptor,
100
- lastUsedTimestamp: this.lastUsedTimestamp,
101
- replacedAsDuplicate: this.replacedAsDuplicate,
102
- stopped: this.stopped,
103
- openedAt: this.openedAt,
104
- bytesSent: this.bytesSent,
105
- bytesReceived: this.bytesReceived,
106
- messagesSent: this.messagesSent,
107
- messagesReceived: this.messagesReceived
108
- // Add connection type?
109
- }
110
-
111
- }
112
-
113
- }
@@ -1,28 +0,0 @@
1
- import { Defer } from '@streamr/utils'
2
- import { SendFailed } from '../helpers/errors'
3
-
4
- export class OutputBuffer {
5
-
6
- private readonly buffer: Uint8Array[] = []
7
- private readonly deferredPromise: Defer<void> = new Defer<void>()
8
-
9
- push(message: Uint8Array): Defer<void> {
10
- this.buffer.push(message)
11
- return this.deferredPromise
12
- }
13
-
14
- getBuffer(): Uint8Array[] {
15
- return this.buffer
16
- }
17
-
18
- resolve(): void {
19
- this.buffer.length = 0
20
- this.deferredPromise.resolve()
21
- }
22
-
23
- reject(): void {
24
- this.buffer.length = 0
25
- this.deferredPromise.reject(new SendFailed('Could not send buffered messages'))
26
- }
27
-
28
- }
@@ -1,68 +0,0 @@
1
- import EventEmitter from 'eventemitter3'
2
- import { PeerDescriptor } from '../../generated/packages/dht/protos/DhtRpc'
3
- import { Logger, setAbortableTimeout } from '@streamr/utils'
4
- import { getNodeIdOrUnknownFromPeerDescriptor } from './ConnectionManager'
5
- import { IConnection } from './IConnection'
6
-
7
- export interface PendingConnectionEvents {
8
- connected: (peerDescriptor: PeerDescriptor, connection: IConnection) => void
9
- disconnected: (gracefulLeave: boolean) => void
10
- }
11
-
12
- const logger = new Logger(module)
13
-
14
- // PendingConnection is used as a reference to a connection that should be opened and handshaked to a given PeerDescriptor
15
- // It does not hold a connection internally. The public method onHandshakedCompleted should be called once a connection for the
16
- // remotePeerDescriptor is opened and handshaked successfully.
17
- // PendingConnections are created by the Connectors.
18
- export class PendingConnection extends EventEmitter<PendingConnectionEvents> {
19
-
20
- private readonly connectingAbortController: AbortController = new AbortController()
21
- private remotePeerDescriptor: PeerDescriptor
22
- private replacedAsDuplicate: boolean = false
23
- private stopped: boolean = false
24
-
25
- constructor(remotePeerDescriptor: PeerDescriptor, timeout = 15 * 1000) {
26
- super()
27
- this.remotePeerDescriptor = remotePeerDescriptor
28
- setAbortableTimeout(() => {
29
- this.close(false)
30
- }, timeout, this.connectingAbortController.signal)
31
- }
32
-
33
- replaceAsDuplicate(): void {
34
- logger.trace(getNodeIdOrUnknownFromPeerDescriptor(this.remotePeerDescriptor) + ' replaceAsDuplicate')
35
- this.replacedAsDuplicate = true
36
- }
37
-
38
- onHandshakeCompleted(connection: IConnection): void {
39
- if (!this.replacedAsDuplicate) {
40
- this.emit('connected', this.remotePeerDescriptor, connection)
41
- }
42
- }
43
-
44
- close(graceful: boolean): void {
45
- if (this.stopped) {
46
- return
47
- }
48
- this.stopped = true
49
- this.connectingAbortController.abort()
50
- if (!this.replacedAsDuplicate) {
51
- this.emit('disconnected', graceful)
52
- }
53
- }
54
-
55
- destroy(): void {
56
- if (this.stopped) {
57
- return
58
- }
59
- this.stopped = true
60
- this.connectingAbortController.abort()
61
- this.removeAllListeners()
62
- }
63
-
64
- getPeerDescriptor(): PeerDescriptor {
65
- return this.remotePeerDescriptor
66
- }
67
-
68
- }