@streamr/dht 0.0.1-tatum.6 → 0.0.1-tatum.8

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 (255) hide show
  1. package/dist/src/connection/ConnectionLockHandler.d.ts +1 -1
  2. package/dist/src/connection/ConnectionLockHandler.js.map +1 -1
  3. package/dist/src/connection/ConnectionLockRpcRemote.d.ts +10 -0
  4. package/dist/src/connection/{RemoteConnectionLocker.js → ConnectionLockRpcRemote.js} +21 -35
  5. package/dist/src/connection/ConnectionLockRpcRemote.js.map +1 -0
  6. package/dist/src/connection/ConnectionManager.d.ts +17 -41
  7. package/dist/src/connection/ConnectionManager.js +148 -212
  8. package/dist/src/connection/ConnectionManager.js.map +1 -1
  9. package/dist/src/connection/ConnectivityChecker.js +16 -13
  10. package/dist/src/connection/ConnectivityChecker.js.map +1 -1
  11. package/dist/src/connection/ConnectorFacade.d.ts +49 -0
  12. package/dist/src/connection/ConnectorFacade.js +83 -0
  13. package/dist/src/connection/ConnectorFacade.js.map +1 -0
  14. package/dist/src/connection/Handshaker.d.ts +1 -2
  15. package/dist/src/connection/Handshaker.js +1 -4
  16. package/dist/src/connection/Handshaker.js.map +1 -1
  17. package/dist/src/connection/ManagedConnection.d.ts +2 -6
  18. package/dist/src/connection/ManagedConnection.js +27 -36
  19. package/dist/src/connection/ManagedConnection.js.map +1 -1
  20. package/dist/src/connection/ManagedWebRtcConnection.d.ts +1 -1
  21. package/dist/src/connection/ManagedWebRtcConnection.js +2 -2
  22. package/dist/src/connection/ManagedWebRtcConnection.js.map +1 -1
  23. package/dist/src/connection/Simulator/Simulator.d.ts +0 -2
  24. package/dist/src/connection/Simulator/Simulator.js +0 -5
  25. package/dist/src/connection/Simulator/Simulator.js.map +1 -1
  26. package/dist/src/connection/Simulator/SimulatorConnection.js +16 -13
  27. package/dist/src/connection/Simulator/SimulatorConnection.js.map +1 -1
  28. package/dist/src/connection/Simulator/SimulatorConnector.d.ts +2 -3
  29. package/dist/src/connection/Simulator/SimulatorConnector.js +12 -14
  30. package/dist/src/connection/Simulator/SimulatorConnector.js.map +1 -1
  31. package/dist/src/connection/Simulator/SimulatorTransport.js +6 -1
  32. package/dist/src/connection/Simulator/SimulatorTransport.js.map +1 -1
  33. package/dist/src/connection/WebRTC/NodeWebRtcConnection.d.ts +3 -1
  34. package/dist/src/connection/WebRTC/NodeWebRtcConnection.js +12 -12
  35. package/dist/src/connection/WebRTC/NodeWebRtcConnection.js.map +1 -1
  36. package/dist/src/connection/WebRTC/{WebRtcConnector.d.ts → WebRtcConnectorRpcLocal.d.ts} +13 -13
  37. package/dist/src/connection/WebRTC/{WebRtcConnector.js → WebRtcConnectorRpcLocal.js} +46 -38
  38. package/dist/src/connection/WebRTC/WebRtcConnectorRpcLocal.js.map +1 -0
  39. package/dist/src/connection/WebRTC/WebRtcConnectorRpcRemote.d.ts +11 -0
  40. package/dist/src/connection/WebRTC/WebRtcConnectorRpcRemote.js +55 -0
  41. package/dist/src/connection/WebRTC/WebRtcConnectorRpcRemote.js.map +1 -0
  42. package/dist/src/connection/WebRTC/iceServerAsString.d.ts +1 -1
  43. package/dist/src/connection/WebSocket/{WebSocketConnector.d.ts → WebSocketConnectorRpcLocal.d.ts} +21 -11
  44. package/dist/src/connection/WebSocket/{WebSocketConnector.js → WebSocketConnectorRpcLocal.js} +80 -59
  45. package/dist/src/connection/WebSocket/WebSocketConnectorRpcLocal.js.map +1 -0
  46. package/dist/src/connection/WebSocket/WebSocketConnectorRpcRemote.d.ts +8 -0
  47. package/dist/src/connection/WebSocket/{RemoteWebSocketConnector.js → WebSocketConnectorRpcRemote.js} +12 -16
  48. package/dist/src/connection/WebSocket/WebSocketConnectorRpcRemote.js.map +1 -0
  49. package/dist/src/connection/WebSocket/WebSocketServer.d.ts +11 -1
  50. package/dist/src/connection/WebSocket/WebSocketServer.js +15 -10
  51. package/dist/src/connection/WebSocket/WebSocketServer.js.map +1 -1
  52. package/dist/src/dht/DhtNode.d.ts +18 -55
  53. package/dist/src/dht/DhtNode.js +122 -145
  54. package/dist/src/dht/DhtNode.js.map +1 -1
  55. package/dist/src/dht/{RemoteExternalApi.d.ts → ExternalApiRpcRemote.d.ts} +2 -2
  56. package/dist/src/dht/{RemoteExternalApi.js → ExternalApiRpcRemote.js} +5 -6
  57. package/dist/src/dht/ExternalApiRpcRemote.js.map +1 -0
  58. package/dist/src/dht/{DhtPeer.d.ts → RemoteDhtNode.d.ts} +2 -3
  59. package/dist/src/dht/{DhtPeer.js → RemoteDhtNode.js} +21 -19
  60. package/dist/src/dht/RemoteDhtNode.js.map +1 -0
  61. package/dist/src/dht/contact/ContactList.d.ts +0 -1
  62. package/dist/src/dht/contact/ContactList.js +0 -3
  63. package/dist/src/dht/contact/ContactList.js.map +1 -1
  64. package/dist/src/dht/contact/RandomContactList.d.ts +0 -1
  65. package/dist/src/dht/contact/RandomContactList.js +0 -3
  66. package/dist/src/dht/contact/RandomContactList.js.map +1 -1
  67. package/dist/src/dht/contact/SortedContactList.d.ts +0 -3
  68. package/dist/src/dht/contact/SortedContactList.js +0 -9
  69. package/dist/src/dht/contact/SortedContactList.js.map +1 -1
  70. package/dist/src/dht/discovery/DiscoverySession.d.ts +5 -7
  71. package/dist/src/dht/discovery/DiscoverySession.js +9 -10
  72. package/dist/src/dht/discovery/DiscoverySession.js.map +1 -1
  73. package/dist/src/dht/discovery/PeerDiscovery.d.ts +12 -11
  74. package/dist/src/dht/discovery/PeerDiscovery.js +33 -37
  75. package/dist/src/dht/discovery/PeerDiscovery.js.map +1 -1
  76. package/dist/src/dht/find/RecursiveFindSession.d.ts +9 -10
  77. package/dist/src/dht/find/RecursiveFindSession.js +13 -13
  78. package/dist/src/dht/find/RecursiveFindSession.js.map +1 -1
  79. package/dist/src/dht/find/RecursiveFinder.d.ts +9 -11
  80. package/dist/src/dht/find/RecursiveFinder.js +35 -36
  81. package/dist/src/dht/find/RecursiveFinder.js.map +1 -1
  82. package/dist/src/dht/find/RemoteRecursiveFindSession.d.ts +1 -1
  83. package/dist/src/dht/find/RemoteRecursiveFindSession.js +4 -4
  84. package/dist/src/dht/find/RemoteRecursiveFindSession.js.map +1 -1
  85. package/dist/src/dht/registerExternalApiRpcMethods.d.ts +1 -1
  86. package/dist/src/dht/registerExternalApiRpcMethods.js +4 -3
  87. package/dist/src/dht/registerExternalApiRpcMethods.js.map +1 -1
  88. package/dist/src/dht/routing/DuplicateDetector.d.ts +1 -2
  89. package/dist/src/dht/routing/DuplicateDetector.js +2 -7
  90. package/dist/src/dht/routing/DuplicateDetector.js.map +1 -1
  91. package/dist/src/dht/routing/Router.d.ts +12 -15
  92. package/dist/src/dht/routing/Router.js +30 -33
  93. package/dist/src/dht/routing/Router.js.map +1 -1
  94. package/dist/src/dht/routing/{RemoteRouter.d.ts → RouterRpcRemote.d.ts} +2 -2
  95. package/dist/src/dht/routing/{RemoteRouter.js → RouterRpcRemote.js} +5 -5
  96. package/dist/src/dht/routing/RouterRpcRemote.js.map +1 -0
  97. package/dist/src/dht/routing/RoutingSession.d.ts +3 -4
  98. package/dist/src/dht/routing/RoutingSession.js +6 -5
  99. package/dist/src/dht/routing/RoutingSession.js.map +1 -1
  100. package/dist/src/dht/store/{DataStore.d.ts → StoreRpcLocal.d.ts} +6 -6
  101. package/dist/src/dht/store/{DataStore.js → StoreRpcLocal.js} +34 -34
  102. package/dist/src/dht/store/StoreRpcLocal.js.map +1 -0
  103. package/dist/src/dht/store/{RemoteStore.d.ts → StoreRpcRemote.d.ts} +2 -2
  104. package/dist/src/dht/store/{RemoteStore.js → StoreRpcRemote.js} +4 -4
  105. package/dist/src/dht/store/StoreRpcRemote.js.map +1 -0
  106. package/dist/src/exports.d.ts +2 -8
  107. package/dist/src/exports.js +2 -14
  108. package/dist/src/exports.js.map +1 -1
  109. package/dist/src/helpers/PeerID.d.ts +0 -1
  110. package/dist/src/helpers/PeerID.js +0 -6
  111. package/dist/src/helpers/PeerID.js.map +1 -1
  112. package/dist/src/helpers/browser/isBrowserEnvironment.d.ts +1 -0
  113. package/dist/src/helpers/browser/isBrowserEnvironment.js +6 -0
  114. package/dist/src/helpers/browser/isBrowserEnvironment.js.map +1 -0
  115. package/dist/src/helpers/browser/isBrowserEnvironment_override.d.ts +1 -0
  116. package/dist/src/helpers/browser/isBrowserEnvironment_override.js +7 -0
  117. package/dist/src/helpers/browser/isBrowserEnvironment_override.js.map +1 -0
  118. package/dist/src/helpers/kademliaId.d.ts +1 -0
  119. package/dist/src/helpers/kademliaId.js +14 -0
  120. package/dist/src/helpers/kademliaId.js.map +1 -0
  121. package/dist/src/helpers/peerIdFromPeerDescriptor.d.ts +1 -1
  122. package/dist/src/helpers/peerIdFromPeerDescriptor.js +3 -3
  123. package/dist/src/helpers/peerIdFromPeerDescriptor.js.map +1 -1
  124. package/dist/src/helpers/protoClasses.js +2 -2
  125. package/dist/src/helpers/protoClasses.js.map +1 -1
  126. package/dist/src/proto/packages/dht/protos/DhtRpc.client.d.ts +29 -29
  127. package/dist/src/proto/packages/dht/protos/DhtRpc.client.js +39 -39
  128. package/dist/src/proto/packages/dht/protos/DhtRpc.client.js.map +1 -1
  129. package/dist/src/proto/packages/dht/protos/DhtRpc.d.ts +49 -162
  130. package/dist/src/proto/packages/dht/protos/DhtRpc.js +47 -88
  131. package/dist/src/proto/packages/dht/protos/DhtRpc.js.map +1 -1
  132. package/dist/src/proto/packages/dht/protos/DhtRpc.server.d.ts +15 -15
  133. package/dist/src/transport/RoutingRpcCommunicator.js +1 -0
  134. package/dist/src/transport/RoutingRpcCommunicator.js.map +1 -1
  135. package/package.json +10 -9
  136. package/protos/DhtRpc.proto +30 -60
  137. package/src/connection/ConnectionLockHandler.ts +1 -1
  138. package/src/connection/ConnectionLockRpcRemote.ts +62 -0
  139. package/src/connection/ConnectionManager.ts +178 -274
  140. package/src/connection/ConnectivityChecker.ts +15 -12
  141. package/src/connection/ConnectorFacade.ts +140 -0
  142. package/src/connection/Handshaker.ts +0 -5
  143. package/src/connection/ManagedConnection.ts +26 -40
  144. package/src/connection/ManagedWebRtcConnection.ts +0 -2
  145. package/src/connection/Simulator/Simulator.ts +0 -7
  146. package/src/connection/Simulator/SimulatorConnection.ts +16 -13
  147. package/src/connection/Simulator/SimulatorConnector.ts +13 -19
  148. package/src/connection/Simulator/SimulatorTransport.ts +6 -1
  149. package/src/connection/WebRTC/NodeWebRtcConnection.ts +15 -14
  150. package/src/connection/WebRTC/{WebRtcConnector.ts → WebRtcConnectorRpcLocal.ts} +68 -56
  151. package/src/connection/WebRTC/WebRtcConnectorRpcRemote.ts +71 -0
  152. package/src/connection/WebRTC/iceServerAsString.ts +1 -1
  153. package/src/connection/WebSocket/{WebSocketConnector.ts → WebSocketConnectorRpcLocal.ts} +102 -79
  154. package/src/connection/WebSocket/WebSocketConnectorRpcRemote.ts +45 -0
  155. package/src/connection/WebSocket/WebSocketServer.ts +26 -8
  156. package/src/dht/DhtNode.ts +176 -203
  157. package/src/dht/{RemoteExternalApi.ts → ExternalApiRpcRemote.ts} +3 -4
  158. package/src/dht/{DhtPeer.ts → RemoteDhtNode.ts} +11 -9
  159. package/src/dht/contact/ContactList.ts +0 -4
  160. package/src/dht/contact/RandomContactList.ts +0 -4
  161. package/src/dht/contact/SortedContactList.ts +0 -12
  162. package/src/dht/discovery/DiscoverySession.ts +20 -23
  163. package/src/dht/discovery/PeerDiscovery.ts +47 -45
  164. package/src/dht/find/RecursiveFindSession.ts +21 -22
  165. package/src/dht/find/RecursiveFinder.ts +45 -49
  166. package/src/dht/find/RemoteRecursiveFindSession.ts +6 -6
  167. package/src/dht/registerExternalApiRpcMethods.ts +8 -5
  168. package/src/dht/routing/DuplicateDetector.ts +3 -10
  169. package/src/dht/routing/Router.ts +39 -45
  170. package/src/dht/routing/{RemoteRouter.ts → RouterRpcRemote.ts} +4 -4
  171. package/src/dht/routing/RoutingSession.ts +15 -15
  172. package/src/dht/store/{DataStore.ts → StoreRpcLocal.ts} +42 -42
  173. package/src/dht/store/{RemoteStore.ts → StoreRpcRemote.ts} +2 -2
  174. package/src/exports.ts +2 -8
  175. package/src/helpers/PeerID.ts +0 -7
  176. package/src/helpers/browser/isBrowserEnvironment.ts +1 -0
  177. package/src/helpers/browser/isBrowserEnvironment_override.ts +3 -0
  178. package/src/helpers/kademliaId.ts +8 -0
  179. package/src/helpers/peerIdFromPeerDescriptor.ts +1 -1
  180. package/src/helpers/protoClasses.ts +4 -4
  181. package/src/proto/packages/dht/protos/DhtRpc.client.ts +54 -54
  182. package/src/proto/packages/dht/protos/DhtRpc.server.ts +15 -15
  183. package/src/proto/packages/dht/protos/DhtRpc.ts +77 -216
  184. package/src/transport/RoutingRpcCommunicator.ts +1 -0
  185. package/test/benchmark/KademliaCorrectness.test.ts +4 -2
  186. package/test/benchmark/RecursiveFind.test.ts +6 -6
  187. package/test/end-to-end/Layer0-Layer1.test.ts +9 -9
  188. package/test/end-to-end/Layer0WebRTC-Layer1.test.ts +5 -5
  189. package/test/end-to-end/Layer0WebRTC.test.ts +5 -6
  190. package/test/end-to-end/Layer1-Scale-WebRTC.test.ts +13 -8
  191. package/test/end-to-end/Layer1-Scale-WebSocket.test.ts +15 -10
  192. package/test/end-to-end/WebSocketConnectionRequest.test.ts +5 -5
  193. package/test/integration/ConnectionLocking.test.ts +32 -26
  194. package/test/integration/ConnectionManager.test.ts +90 -93
  195. package/test/integration/DhtJoinPeerDiscovery.test.ts +53 -0
  196. package/test/integration/DhtRpc.test.ts +4 -6
  197. package/test/integration/Layer1-scale.test.ts +8 -8
  198. package/test/integration/MigrateData.test.ts +9 -9
  199. package/test/integration/Mock-Layer1-Layer0.test.ts +1 -2
  200. package/test/integration/RecursiveFind.test.ts +5 -5
  201. package/test/integration/{DhtPeer.test.ts → RemoteDhtNode.test.ts} +11 -12
  202. package/test/integration/RouteMessage.test.ts +7 -9
  203. package/test/integration/{RemoteRouter.test.ts → RouterRpcRemote.test.ts} +13 -14
  204. package/test/integration/RpcErrors.test.ts +25 -10
  205. package/test/integration/ScaleDownDht.test.ts +8 -8
  206. package/test/integration/SimultaneousConnections.test.ts +35 -36
  207. package/test/integration/Store.test.ts +8 -9
  208. package/test/integration/StoreAndDelete.test.ts +11 -11
  209. package/test/integration/StoreOnDhtWithTwoNodes.test.ts +7 -7
  210. package/test/integration/{RemoteStore.test.ts → StoreRpcRemote.test.ts} +17 -18
  211. package/test/integration/WebRtcConnectionManagement.test.ts +26 -19
  212. package/test/integration/WebRtcConnectorRpc.test.ts +17 -32
  213. package/test/integration/WebSocket.test.ts +4 -2
  214. package/test/integration/WebSocketConnectionManagement.test.ts +30 -17
  215. package/test/integration/WebSocketConnectorRpc.test.ts +10 -15
  216. package/test/unit/DuplicateDetector.test.ts +3 -4
  217. package/test/unit/LocalDataStore.test.ts +6 -8
  218. package/test/unit/RandomContactList.test.ts +1 -1
  219. package/test/unit/RecursiveFinder.test.ts +13 -18
  220. package/test/unit/Router.test.ts +18 -21
  221. package/test/unit/WebSocketConnectorRpcLocal.test.ts +64 -0
  222. package/test/unit/WebSocketServer.test.ts +24 -12
  223. package/test/unit/{webrtcReplaceInternalIpWithExternalIp.ts → webrtcReplaceInternalIpWithExternalIp.test.ts} +1 -1
  224. package/test/utils/mock/RecursiveFinder.ts +2 -2
  225. package/test/utils/mock/Router.ts +9 -11
  226. package/test/utils/mock/Transport.ts +2 -2
  227. package/test/utils/utils.ts +55 -74
  228. package/dist/src/connection/RemoteConnectionLocker.d.ts +0 -13
  229. package/dist/src/connection/RemoteConnectionLocker.js.map +0 -1
  230. package/dist/src/connection/WebRTC/RemoteWebrtcConnector.d.ts +0 -12
  231. package/dist/src/connection/WebRTC/RemoteWebrtcConnector.js +0 -74
  232. package/dist/src/connection/WebRTC/RemoteWebrtcConnector.js.map +0 -1
  233. package/dist/src/connection/WebRTC/WebRtcConnector.js.map +0 -1
  234. package/dist/src/connection/WebSocket/RemoteWebSocketConnector.d.ts +0 -9
  235. package/dist/src/connection/WebSocket/RemoteWebSocketConnector.js.map +0 -1
  236. package/dist/src/connection/WebSocket/WebSocketConnector.js.map +0 -1
  237. package/dist/src/dht/DhtPeer.js.map +0 -1
  238. package/dist/src/dht/RemoteExternalApi.js.map +0 -1
  239. package/dist/src/dht/routing/RemoteRouter.js.map +0 -1
  240. package/dist/src/dht/store/DataStore.js.map +0 -1
  241. package/dist/src/dht/store/RemoteStore.js.map +0 -1
  242. package/dist/src/helpers/browser/isBrowser.d.ts +0 -1
  243. package/dist/src/helpers/browser/isBrowser.js +0 -6
  244. package/dist/src/helpers/browser/isBrowser.js.map +0 -1
  245. package/dist/src/helpers/browser/isNodeJS.d.ts +0 -1
  246. package/dist/src/helpers/browser/isNodeJS.js +0 -6
  247. package/dist/src/helpers/browser/isNodeJS.js.map +0 -1
  248. package/src/connection/RemoteConnectionLocker.ts +0 -84
  249. package/src/connection/WebRTC/RemoteWebrtcConnector.ts +0 -93
  250. package/src/connection/WebSocket/RemoteWebSocketConnector.ts +0 -49
  251. package/src/helpers/browser/isBrowser.ts +0 -1
  252. package/src/helpers/browser/isNodeJS.ts +0 -1
  253. package/test/integration/DhtWithMockConnectionLatencies.test.ts +0 -46
  254. package/test/integration/DhtWithMockConnections.test.ts +0 -46
  255. package/test/integration/DhtWithRealConnectionLatencies.test.ts +0 -47
@@ -1,14 +1,14 @@
1
- import { PeerDescriptor } from '../../exports'
2
- import { DhtPeer } from '../DhtPeer'
1
+ import { RemoteDhtNode } from '../RemoteDhtNode'
3
2
  import { SortedContactList } from '../contact/SortedContactList'
4
3
  import { PeerID, PeerIDKey } from '../../helpers/PeerID'
4
+ import { keyFromPeerDescriptor } from '../../helpers/peerIdFromPeerDescriptor'
5
5
  import { Logger } from '@streamr/utils'
6
6
  import EventEmitter from 'eventemitter3'
7
7
  import { v4 } from 'uuid'
8
- import { RouteMessageWrapper } from '../../proto/packages/dht/protos/DhtRpc'
9
- import { RemoteRouter } from './RemoteRouter'
8
+ import { PeerDescriptor, RouteMessageWrapper } from '../../proto/packages/dht/protos/DhtRpc'
9
+ import { RouterRpcRemote } from './RouterRpcRemote'
10
10
  import { RoutingRpcCommunicator } from '../../transport/RoutingRpcCommunicator'
11
- import { RoutingServiceClient } from '../../proto/packages/dht/protos/DhtRpc.client'
11
+ import { RouterRpcClient } from '../../proto/packages/dht/protos/DhtRpc.client'
12
12
  import { toProtoRpcClient } from '@streamr/proto-rpc'
13
13
  import { Contact } from '../contact/Contact'
14
14
 
@@ -18,19 +18,19 @@ const MAX_FAILED_HOPS = 2
18
18
 
19
19
  class RemoteContact extends Contact {
20
20
 
21
- private router: RemoteRouter
21
+ private router: RouterRpcRemote
22
22
 
23
- constructor(peer: DhtPeer, ownPeerDescriptor: PeerDescriptor, rpcCommunicator: RoutingRpcCommunicator) {
23
+ constructor(peer: RemoteDhtNode, ownPeerDescriptor: PeerDescriptor, rpcCommunicator: RoutingRpcCommunicator) {
24
24
  super(peer.getPeerDescriptor())
25
- this.router = new RemoteRouter(
25
+ this.router = new RouterRpcRemote(
26
26
  ownPeerDescriptor,
27
27
  peer.getPeerDescriptor(),
28
28
  peer.getServiceId(),
29
- toProtoRpcClient(new RoutingServiceClient(rpcCommunicator.getRpcClientTransport()))
29
+ toProtoRpcClient(new RouterRpcClient(rpcCommunicator.getRpcClientTransport()))
30
30
  )
31
31
  }
32
32
 
33
- getRouter(): RemoteRouter {
33
+ getRouter(): RouterRpcRemote {
34
34
  return this.router
35
35
  }
36
36
  }
@@ -58,7 +58,7 @@ export class RoutingSession extends EventEmitter<RoutingSessionEvents> {
58
58
  private contactList: SortedContactList<RemoteContact>
59
59
  private readonly ownPeerDescriptor: PeerDescriptor
60
60
  private readonly messageToRoute: RouteMessageWrapper
61
- private connections: Map<PeerIDKey, DhtPeer>
61
+ private connections: Map<PeerIDKey, RemoteDhtNode>
62
62
  private readonly parallelism: number
63
63
  private failedHopCounter = 0
64
64
  private successfulHopCounter = 0
@@ -69,7 +69,7 @@ export class RoutingSession extends EventEmitter<RoutingSessionEvents> {
69
69
  rpcCommunicator: RoutingRpcCommunicator,
70
70
  ownPeerDescriptor: PeerDescriptor,
71
71
  messageToRoute: RouteMessageWrapper,
72
- connections: Map<PeerIDKey, DhtPeer>,
72
+ connections: Map<PeerIDKey, RemoteDhtNode>,
73
73
  parallelism: number,
74
74
  mode: RoutingMode = RoutingMode.ROUTE,
75
75
  destinationId?: Uint8Array,
@@ -122,7 +122,7 @@ export class RoutingSession extends EventEmitter<RoutingSessionEvents> {
122
122
  }
123
123
  }
124
124
 
125
- private onRequestSucceeded = (_peerId: PeerID) => {
125
+ private onRequestSucceeded = () => {
126
126
  logger.trace('onRequestSucceeded() sessionId: ' + this.sessionId)
127
127
  if (this.stopped) {
128
128
  return
@@ -187,14 +187,14 @@ export class RoutingSession extends EventEmitter<RoutingSessionEvents> {
187
187
  while ((this.ongoingRequests.size) < this.parallelism && (uncontacted.length > 0) && !this.stopped) {
188
188
  const nextPeer = uncontacted.shift()
189
189
  // eslint-disable-next-line max-len
190
- logger.trace(`Sending routeMessage request from ${this.ownPeerDescriptor.kademliaId} to contact: ${nextPeer!.getPeerId()} (sessionId=${this.sessionId})`)
190
+ logger.trace(`Sending routeMessage request to contact: ${keyFromPeerDescriptor(nextPeer!.getPeerDescriptor())} (sessionId=${this.sessionId})`)
191
191
  this.contactList.setContacted(nextPeer!.getPeerId())
192
192
  this.ongoingRequests.add(nextPeer!.getPeerId().toKey())
193
193
  setImmediate(async () => {
194
194
  try {
195
195
  const succeeded = await this.sendRouteMessageRequest(nextPeer!)
196
196
  if (succeeded) {
197
- this.onRequestSucceeded(nextPeer!.getPeerId())
197
+ this.onRequestSucceeded()
198
198
  } else {
199
199
  this.onRequestFailed(nextPeer!.getPeerId())
200
200
  }
@@ -7,20 +7,20 @@ import { Any } from '../../proto/google/protobuf/any'
7
7
  import { ServerCallContext } from '@protobuf-ts/runtime-rpc'
8
8
  import { DhtCallContext } from '../../rpc-protocol/DhtCallContext'
9
9
  import { toProtoRpcClient } from '@streamr/proto-rpc'
10
- import { StoreServiceClient } from '../../proto/packages/dht/protos/DhtRpc.client'
10
+ import { StoreRpcClient } from '../../proto/packages/dht/protos/DhtRpc.client'
11
11
  import { RoutingRpcCommunicator } from '../../transport/RoutingRpcCommunicator'
12
12
  import { IRecursiveFinder } from '../find/RecursiveFinder'
13
- import { isSamePeerDescriptor, peerIdFromPeerDescriptor } from '../../helpers/peerIdFromPeerDescriptor'
13
+ import { areEqualPeerDescriptors, keyFromPeerDescriptor, peerIdFromPeerDescriptor } from '../../helpers/peerIdFromPeerDescriptor'
14
14
  import { Logger } from '@streamr/utils'
15
15
  import { LocalDataStore } from './LocalDataStore'
16
- import { IStoreService } from '../../proto/packages/dht/protos/DhtRpc.server'
17
- import { RemoteStore } from './RemoteStore'
16
+ import { IStoreRpc } from '../../proto/packages/dht/protos/DhtRpc.server'
17
+ import { StoreRpcRemote } from './StoreRpcRemote'
18
18
  import { Timestamp } from '../../proto/google/protobuf/timestamp'
19
19
  import EventEmitter from 'eventemitter3'
20
20
  import { Events } from '../DhtNode'
21
21
  import { SortedContactList } from '../contact/SortedContactList'
22
22
  import { Contact } from '../contact/Contact'
23
- import { DhtPeer } from '../DhtPeer'
23
+ import { RemoteDhtNode } from '../RemoteDhtNode'
24
24
 
25
25
  interface DataStoreConfig {
26
26
  rpcCommunicator: RoutingRpcCommunicator
@@ -30,14 +30,14 @@ interface DataStoreConfig {
30
30
  serviceId: string
31
31
  maxTtl: number
32
32
  highestTtl: number
33
- numberOfCopies: number
33
+ redundancyFactor: number
34
34
  dhtNodeEmitter: EventEmitter<Events>
35
- getNodesClosestToIdFromBucket: (id: Uint8Array, n?: number) => DhtPeer[]
35
+ getNodesClosestToIdFromBucket: (id: Uint8Array, n?: number) => RemoteDhtNode[]
36
36
  }
37
37
 
38
38
  const logger = new Logger(module)
39
39
 
40
- export class DataStore implements IStoreService {
40
+ export class StoreRpcLocal implements IStoreRpc {
41
41
 
42
42
  private readonly rpcCommunicator: RoutingRpcCommunicator
43
43
  private readonly recursiveFinder: IRecursiveFinder
@@ -46,9 +46,9 @@ export class DataStore implements IStoreService {
46
46
  private readonly serviceId: string
47
47
  private readonly maxTtl: number
48
48
  private readonly highestTtl: number
49
- private readonly numberOfCopies: number
49
+ private readonly redundancyFactor: number
50
50
  private readonly dhtNodeEmitter: EventEmitter<Events>
51
- private readonly getNodesClosestToIdFromBucket: (id: Uint8Array, n?: number) => DhtPeer[]
51
+ private readonly getNodesClosestToIdFromBucket: (id: Uint8Array, n?: number) => RemoteDhtNode[]
52
52
 
53
53
  constructor(config: DataStoreConfig) {
54
54
  this.rpcCommunicator = config.rpcCommunicator
@@ -58,7 +58,7 @@ export class DataStore implements IStoreService {
58
58
  this.serviceId = config.serviceId
59
59
  this.maxTtl = config.maxTtl
60
60
  this.highestTtl = config.highestTtl
61
- this.numberOfCopies = config.numberOfCopies
61
+ this.redundancyFactor = config.redundancyFactor
62
62
  this.dhtNodeEmitter = config.dhtNodeEmitter
63
63
  this.getNodesClosestToIdFromBucket = config.getNodesClosestToIdFromBucket
64
64
  this.rpcCommunicator.registerRpcMethod(StoreDataRequest, StoreDataResponse, 'storeData',
@@ -68,7 +68,7 @@ export class DataStore implements IStoreService {
68
68
  this.rpcCommunicator.registerRpcMethod(DeleteDataRequest, DeleteDataResponse, 'deleteData',
69
69
  (request: DeleteDataRequest, context: ServerCallContext) => this.deleteData(request, context))
70
70
 
71
- this.dhtNodeEmitter.on('newContact', (peerDescriptor: PeerDescriptor, _closestPeers: PeerDescriptor[]) => {
71
+ this.dhtNodeEmitter.on('newContact', (peerDescriptor: PeerDescriptor) => {
72
72
  this.localDataStore.getStore().forEach((dataMap, _dataKey) => {
73
73
  dataMap.forEach((dataEntry) => {
74
74
  if (this.shouldMigrateDataToNewNode(dataEntry.dataEntry, peerDescriptor)) {
@@ -114,10 +114,10 @@ export class DataStore implements IStoreService {
114
114
  }
115
115
  }
116
116
 
117
- // if new node is within the storeNumberOfCopies closest nodes to the data
117
+ // if new node is within the storageRedundancyFactor closest nodes to the data
118
118
  // do migrate data to it
119
119
 
120
- if (index < this.numberOfCopies) {
120
+ if (index < this.redundancyFactor) {
121
121
  this.localDataStore.setStale(dataId, dataEntry.storer!, false)
122
122
  return true
123
123
  } else {
@@ -127,19 +127,19 @@ export class DataStore implements IStoreService {
127
127
  }
128
128
 
129
129
  private async migrateDataToContact(dataEntry: DataEntry, contact: PeerDescriptor, doNotConnect: boolean = false): Promise<void> {
130
- const remoteStore = new RemoteStore(
130
+ const rpcRemote = new StoreRpcRemote(
131
131
  this.ownPeerDescriptor,
132
132
  contact,
133
133
  this.serviceId,
134
- toProtoRpcClient(new StoreServiceClient(this.rpcCommunicator.getRpcClientTransport()))
134
+ toProtoRpcClient(new StoreRpcClient(this.rpcCommunicator.getRpcClientTransport()))
135
135
  )
136
136
  try {
137
- const response = await remoteStore.migrateData({ dataEntry }, doNotConnect)
137
+ const response = await rpcRemote.migrateData({ dataEntry }, doNotConnect)
138
138
  if (response.error) {
139
- logger.trace('RemoteStore::migrateData() returned error: ' + response.error)
139
+ logger.trace('migrateData() returned error: ' + response.error)
140
140
  }
141
141
  } catch (e) {
142
- logger.trace('RemoteStore::migrateData() threw an exception ' + e)
142
+ logger.trace('migrateData() threw an exception ' + e)
143
143
  }
144
144
  }
145
145
 
@@ -150,8 +150,8 @@ export class DataStore implements IStoreService {
150
150
  const successfulNodes: PeerDescriptor[] = []
151
151
  const ttl = this.highestTtl // ToDo: make TTL decrease according to some nice curve
152
152
  const storerTime = Timestamp.now()
153
- for (let i = 0; i < closestNodes.length && successfulNodes.length < this.numberOfCopies; i++) {
154
- if (isSamePeerDescriptor(this.ownPeerDescriptor, closestNodes[i])) {
153
+ for (let i = 0; i < closestNodes.length && successfulNodes.length < this.redundancyFactor; i++) {
154
+ if (areEqualPeerDescriptors(this.ownPeerDescriptor, closestNodes[i])) {
155
155
  this.localDataStore.storeEntry({
156
156
  kademliaId: key,
157
157
  storer: this.ownPeerDescriptor,
@@ -165,22 +165,22 @@ export class DataStore implements IStoreService {
165
165
  successfulNodes.push(closestNodes[i])
166
166
  continue
167
167
  }
168
- const remoteStore = new RemoteStore(
168
+ const rpcRemote = new StoreRpcRemote(
169
169
  this.ownPeerDescriptor,
170
170
  closestNodes[i],
171
171
  this.serviceId,
172
- toProtoRpcClient(new StoreServiceClient(this.rpcCommunicator.getRpcClientTransport()))
172
+ toProtoRpcClient(new StoreRpcClient(this.rpcCommunicator.getRpcClientTransport()))
173
173
  )
174
174
  try {
175
- const response = await remoteStore.storeData({ kademliaId: key, data, ttl, storerTime })
175
+ const response = await rpcRemote.storeData({ kademliaId: key, data, ttl, storerTime })
176
176
  if (!response.error) {
177
177
  successfulNodes.push(closestNodes[i])
178
- logger.trace('remoteStore.storeData() returned success')
178
+ logger.trace('remote.storeData() returned success')
179
179
  } else {
180
- logger.trace('remoteStore.storeData() returned error: ' + response.error)
180
+ logger.trace('remote.storeData() returned error: ' + response.error)
181
181
  }
182
182
  } catch (e) {
183
- logger.trace('remoteStore.storeData() threw an exception ' + e)
183
+ logger.trace('remote.storeData() threw an exception ' + e)
184
184
  }
185
185
  }
186
186
  return successfulNodes
@@ -188,8 +188,8 @@ export class DataStore implements IStoreService {
188
188
 
189
189
  private selfIsOneOfClosestPeers(dataId: Uint8Array): boolean {
190
190
  const ownPeerId = PeerID.fromValue(this.ownPeerDescriptor.kademliaId)
191
- const closestPeers = this.getNodesClosestToIdFromBucket(dataId, this.numberOfCopies)
192
- const sortedList = new SortedContactList<Contact>(ownPeerId, this.numberOfCopies, undefined, true)
191
+ const closestPeers = this.getNodesClosestToIdFromBucket(dataId, this.redundancyFactor)
192
+ const sortedList = new SortedContactList<Contact>(ownPeerId, this.redundancyFactor, undefined, true)
193
193
  sortedList.addContact(new Contact(this.ownPeerDescriptor))
194
194
  closestPeers.forEach((con) => sortedList.addContact(new Contact(con.getPeerDescriptor())))
195
195
  return sortedList.getClosestContacts().some((node) => node.getPeerId().equals(ownPeerId))
@@ -200,28 +200,28 @@ export class DataStore implements IStoreService {
200
200
  const result = await this.recursiveFinder.startRecursiveFind(key)
201
201
  const closestNodes = result.closestNodes
202
202
  const successfulNodes: PeerDescriptor[] = []
203
- for (let i = 0; i < closestNodes.length && successfulNodes.length < this.numberOfCopies; i++) {
204
- if (isSamePeerDescriptor(this.ownPeerDescriptor, closestNodes[i])) {
203
+ for (let i = 0; i < closestNodes.length && successfulNodes.length < this.redundancyFactor; i++) {
204
+ if (areEqualPeerDescriptors(this.ownPeerDescriptor, closestNodes[i])) {
205
205
  this.localDataStore.markAsDeleted(key, peerIdFromPeerDescriptor(this.ownPeerDescriptor))
206
206
  successfulNodes.push(closestNodes[i])
207
207
  continue
208
208
  }
209
- const remoteStore = new RemoteStore(
209
+ const rpcRemote = new StoreRpcRemote(
210
210
  this.ownPeerDescriptor,
211
211
  closestNodes[i],
212
212
  this.serviceId,
213
- toProtoRpcClient(new StoreServiceClient(this.rpcCommunicator.getRpcClientTransport()))
213
+ toProtoRpcClient(new StoreRpcClient(this.rpcCommunicator.getRpcClientTransport()))
214
214
  )
215
215
  try {
216
- const response = await remoteStore.deleteData({ kademliaId: key })
216
+ const response = await rpcRemote.deleteData({ kademliaId: key })
217
217
  if (response.deleted) {
218
- logger.trace('remoteStore.deleteData() returned success')
218
+ logger.trace('remote.deleteData() returned success')
219
219
  } else {
220
- logger.trace('could not delete data from ' + PeerID.fromValue(closestNodes[i].kademliaId))
220
+ logger.trace('could not delete data from ' + keyFromPeerDescriptor(closestNodes[i]))
221
221
  }
222
222
  successfulNodes.push(closestNodes[i])
223
223
  } catch (e) {
224
- logger.trace('remoteStore.deleteData() threw an exception ' + e)
224
+ logger.trace('remote.deleteData() threw an exception ' + e)
225
225
  }
226
226
  }
227
227
  }
@@ -246,7 +246,7 @@ export class DataStore implements IStoreService {
246
246
  this.localDataStore.setAllEntriesAsStale(PeerID.fromValue(kademliaId))
247
247
  }
248
248
 
249
- logger.trace(this.ownPeerDescriptor.nodeName + ' storeData()')
249
+ logger.trace('storeData()')
250
250
  return StoreDataResponse.create()
251
251
  }
252
252
 
@@ -260,7 +260,7 @@ export class DataStore implements IStoreService {
260
260
 
261
261
  // RPC service implementation
262
262
  public async migrateData(request: MigrateDataRequest, context: ServerCallContext): Promise<MigrateDataResponse> {
263
- logger.trace(this.ownPeerDescriptor.nodeName + ' server-side migrateData()')
263
+ logger.trace('server-side migrateData()')
264
264
  const dataEntry = request.dataEntry!
265
265
 
266
266
  const wasStored = this.localDataStore.storeEntry(dataEntry)
@@ -271,7 +271,7 @@ export class DataStore implements IStoreService {
271
271
  if (!this.selfIsOneOfClosestPeers(dataEntry.kademliaId)) {
272
272
  this.localDataStore.setAllEntriesAsStale(PeerID.fromValue(dataEntry.kademliaId))
273
273
  }
274
- logger.trace(this.ownPeerDescriptor.nodeName + ' server-side migrateData() at end')
274
+ logger.trace('server-side migrateData() at end')
275
275
  return MigrateDataResponse.create()
276
276
  }
277
277
 
@@ -283,7 +283,7 @@ export class DataStore implements IStoreService {
283
283
  const incomingPeerId = PeerID.fromValue(incomingPeer.kademliaId)
284
284
  const closestToData = this.getNodesClosestToIdFromBucket(dataEntry.kademliaId, 10)
285
285
 
286
- const sortedList = new SortedContactList<Contact>(dataId, this.numberOfCopies, undefined, true)
286
+ const sortedList = new SortedContactList<Contact>(dataId, this.redundancyFactor, undefined, true)
287
287
  sortedList.addContact(new Contact(this.ownPeerDescriptor))
288
288
 
289
289
  closestToData.forEach((con) => {
@@ -307,7 +307,7 @@ export class DataStore implements IStoreService {
307
307
  })
308
308
  }
309
309
  } else {
310
- // if we are the closest to the data, migrate to all storeNumberOfCopies nearest
310
+ // if we are the closest to the data, migrate to all storageRedundancyFactor nearest
311
311
  sortedList.getAllContacts().forEach((contact) => {
312
312
  const contactPeerId = PeerID.fromValue(contact.getPeerDescriptor().kademliaId)
313
313
  if (!incomingPeerId.equals(contactPeerId) && !ownPeerId.equals(contactPeerId)) {
@@ -1,5 +1,5 @@
1
1
  import { Remote } from '../contact/Remote'
2
- import { IStoreServiceClient } from '../../proto/packages/dht/protos/DhtRpc.client'
2
+ import { IStoreRpcClient } from '../../proto/packages/dht/protos/DhtRpc.client'
3
3
  import {
4
4
  DeleteDataRequest,
5
5
  DeleteDataResponse,
@@ -10,7 +10,7 @@ import {
10
10
  } from '../../proto/packages/dht/protos/DhtRpc'
11
11
  import { keyFromPeerDescriptor } from '../../helpers/peerIdFromPeerDescriptor'
12
12
 
13
- export class RemoteStore extends Remote<IStoreServiceClient> {
13
+ export class StoreRpcRemote extends Remote<IStoreRpcClient> {
14
14
 
15
15
  async storeData(request: StoreDataRequest): Promise<StoreDataResponse> {
16
16
  const options = this.formDhtRpcOptions({
package/src/exports.ts CHANGED
@@ -6,14 +6,8 @@ export { getRandomRegion, getRegionDelayMatrix } from './connection/Simulator/pi
6
6
  export { PeerDescriptor, Message, NodeType, DataEntry } from './proto/packages/dht/protos/DhtRpc'
7
7
  export { ITransport } from './transport/ITransport'
8
8
  export { ConnectionManager, ConnectionLocker, PortRange, TlsCertificate } from './connection/ConnectionManager'
9
- export { PeerID, PeerIDKey } from './helpers/PeerID'
10
- export { UUID } from './helpers/UUID'
11
9
  export { DhtRpcOptions } from './rpc-protocol/DhtRpcOptions'
12
- export { protoClasses } from './helpers/protoClasses'
13
- export { SortedContactList } from './dht/contact/SortedContactList'
14
- export { Contact } from './dht/contact/Contact'
15
10
  export { Remote } from './dht/contact/Remote'
16
- export { RecursiveFindResult } from './dht/find/RecursiveFinder'
17
- export { peerIdFromPeerDescriptor, keyFromPeerDescriptor, isSamePeerDescriptor } from './helpers/peerIdFromPeerDescriptor'
18
- export { IceServer } from './connection/WebRTC/WebRtcConnector'
11
+ export { areEqualPeerDescriptors } from './helpers/peerIdFromPeerDescriptor'
12
+ export { IceServer } from './connection/WebRTC/WebRtcConnectorRpcLocal'
19
13
  export { DhtCallContext } from './rpc-protocol/DhtCallContext'
@@ -49,13 +49,6 @@ export class PeerID {
49
49
  return new PeerID({ stringValue })
50
50
  }
51
51
 
52
- static generateRandom(): PeerID {
53
- // generate 160 bit random Uint8array
54
- const value = new Uint8Array(20)
55
- crypto.randomFillSync(value)
56
- return new PeerID({ value })
57
- }
58
-
59
52
  // TODO convert to static method?
60
53
  // eslint-disable-next-line class-methods-use-this
61
54
  private ip2Int(ip: string): number {
@@ -0,0 +1 @@
1
+ export const isBrowserEnvironment = (): boolean => false
@@ -0,0 +1,3 @@
1
+ // webpack overwrites the isBrowserEnvironment.ts with this file when it creates the browser bundle
2
+
3
+ export const isBrowserEnvironment = (): boolean => true
@@ -0,0 +1,8 @@
1
+ import crypto from 'crypto'
2
+
3
+ // https://www.scs.stanford.edu/~dm/home/papers/kpos.pdf
4
+ const KADEMLIA_ID_LENGTH_IN_BYTES = 20
5
+
6
+ export const createRandomKademliaId = (): Uint8Array => {
7
+ return crypto.randomBytes(KADEMLIA_ID_LENGTH_IN_BYTES)
8
+ }
@@ -9,6 +9,6 @@ export const keyFromPeerDescriptor = (peerDescriptor: PeerDescriptor): PeerIDKey
9
9
  return PeerID.fromValue(peerDescriptor.kademliaId).toKey()
10
10
  }
11
11
 
12
- export const isSamePeerDescriptor = (peerDescriptor1: PeerDescriptor, peerDescriptor2: PeerDescriptor): boolean => {
12
+ export const areEqualPeerDescriptors = (peerDescriptor1: PeerDescriptor, peerDescriptor2: PeerDescriptor): boolean => {
13
13
  return peerIdFromPeerDescriptor(peerDescriptor1).equals(peerIdFromPeerDescriptor(peerDescriptor2))
14
14
  }
@@ -13,8 +13,8 @@ import {
13
13
  PeerDescriptor,
14
14
  PingRequest,
15
15
  PingResponse,
16
- RecursiveFindReport,
17
- RecursiveFindRequest,
16
+ FindResponse,
17
+ FindRequest,
18
18
  RouteMessageAck,
19
19
  RouteMessageWrapper,
20
20
  WebSocketConnectionRequest,
@@ -32,8 +32,8 @@ import {
32
32
  export const protoClasses: Array<IMessageType<any>> = [
33
33
  ClosestPeersRequest,
34
34
  ClosestPeersResponse,
35
- RecursiveFindRequest,
36
- RecursiveFindReport,
35
+ FindRequest,
36
+ FindResponse,
37
37
  PingRequest,
38
38
  PingResponse,
39
39
  LeaveNotice,