@streamr/dht 0.0.1-tatum.5 → 0.0.1-tatum.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/connection/ConnectionLockHandler.d.ts +1 -1
- package/dist/src/connection/ConnectionLockHandler.js.map +1 -1
- package/dist/src/connection/ConnectionManager.d.ts +17 -39
- package/dist/src/connection/ConnectionManager.js +138 -192
- package/dist/src/connection/ConnectionManager.js.map +1 -1
- package/dist/src/connection/ConnectivityChecker.js +14 -11
- package/dist/src/connection/ConnectivityChecker.js.map +1 -1
- package/dist/src/connection/ConnectorFacade.d.ts +49 -0
- package/dist/src/connection/ConnectorFacade.js +86 -0
- package/dist/src/connection/ConnectorFacade.js.map +1 -0
- package/dist/src/connection/ManagedConnection.d.ts +1 -4
- package/dist/src/connection/ManagedConnection.js +23 -31
- package/dist/src/connection/ManagedConnection.js.map +1 -1
- package/dist/src/connection/RemoteConnectionLocker.js +4 -3
- package/dist/src/connection/RemoteConnectionLocker.js.map +1 -1
- package/dist/src/connection/Simulator/Simulator.d.ts +0 -2
- package/dist/src/connection/Simulator/Simulator.js +0 -5
- package/dist/src/connection/Simulator/Simulator.js.map +1 -1
- package/dist/src/connection/Simulator/SimulatorConnection.js +16 -13
- package/dist/src/connection/Simulator/SimulatorConnection.js.map +1 -1
- package/dist/src/connection/Simulator/SimulatorConnector.d.ts +2 -2
- package/dist/src/connection/Simulator/SimulatorConnector.js +10 -11
- package/dist/src/connection/Simulator/SimulatorConnector.js.map +1 -1
- package/dist/src/connection/Simulator/SimulatorTransport.js +6 -1
- package/dist/src/connection/Simulator/SimulatorTransport.js.map +1 -1
- package/dist/src/connection/WebRTC/NodeWebRtcConnection.d.ts +2 -0
- package/dist/src/connection/WebRTC/NodeWebRtcConnection.js +12 -12
- package/dist/src/connection/WebRTC/NodeWebRtcConnection.js.map +1 -1
- package/dist/src/connection/WebRTC/WebRtcConnector.d.ts +9 -9
- package/dist/src/connection/WebRTC/WebRtcConnector.js +22 -22
- package/dist/src/connection/WebRTC/WebRtcConnector.js.map +1 -1
- package/dist/src/connection/WebSocket/RemoteWebSocketConnector.js +2 -1
- package/dist/src/connection/WebSocket/RemoteWebSocketConnector.js.map +1 -1
- package/dist/src/connection/WebSocket/WebSocketConnector.d.ts +19 -8
- package/dist/src/connection/WebSocket/WebSocketConnector.js +67 -46
- package/dist/src/connection/WebSocket/WebSocketConnector.js.map +1 -1
- package/dist/src/connection/WebSocket/WebSocketServer.d.ts +11 -1
- package/dist/src/connection/WebSocket/WebSocketServer.js +15 -10
- package/dist/src/connection/WebSocket/WebSocketServer.js.map +1 -1
- package/dist/src/dht/DhtNode.d.ts +16 -54
- package/dist/src/dht/DhtNode.js +116 -137
- package/dist/src/dht/DhtNode.js.map +1 -1
- package/dist/src/dht/{DhtPeer.d.ts → RemoteDhtNode.d.ts} +3 -2
- package/dist/src/dht/{DhtPeer.js → RemoteDhtNode.js} +22 -16
- package/dist/src/dht/RemoteDhtNode.js.map +1 -0
- package/dist/src/dht/contact/Contact.d.ts +1 -15
- package/dist/src/dht/contact/Contact.js +1 -9
- package/dist/src/dht/contact/Contact.js.map +1 -1
- package/dist/src/dht/contact/ContactList.d.ts +13 -3
- package/dist/src/dht/contact/ContactList.js +9 -4
- package/dist/src/dht/contact/ContactList.js.map +1 -1
- package/dist/src/dht/contact/RandomContactList.d.ts +3 -3
- package/dist/src/dht/contact/RandomContactList.js +4 -8
- package/dist/src/dht/contact/RandomContactList.js.map +1 -1
- package/dist/src/dht/contact/Remote.d.ts +1 -5
- package/dist/src/dht/contact/Remote.js +0 -5
- package/dist/src/dht/contact/Remote.js.map +1 -1
- package/dist/src/dht/contact/SortedContactList.d.ts +3 -5
- package/dist/src/dht/contact/SortedContactList.js +9 -19
- package/dist/src/dht/contact/SortedContactList.js.map +1 -1
- package/dist/src/dht/discovery/DiscoverySession.d.ts +5 -7
- package/dist/src/dht/discovery/DiscoverySession.js +9 -10
- package/dist/src/dht/discovery/DiscoverySession.js.map +1 -1
- package/dist/src/dht/discovery/PeerDiscovery.d.ts +11 -10
- package/dist/src/dht/discovery/PeerDiscovery.js +32 -37
- package/dist/src/dht/discovery/PeerDiscovery.js.map +1 -1
- package/dist/src/dht/find/RecursiveFindSession.d.ts +5 -6
- package/dist/src/dht/find/RecursiveFindSession.js +8 -8
- package/dist/src/dht/find/RecursiveFindSession.js.map +1 -1
- package/dist/src/dht/find/RecursiveFinder.d.ts +2 -4
- package/dist/src/dht/find/RecursiveFinder.js +11 -12
- package/dist/src/dht/find/RecursiveFinder.js.map +1 -1
- package/dist/src/dht/registerExternalApiRpcMethods.d.ts +1 -1
- package/dist/src/dht/routing/DuplicateDetector.d.ts +1 -2
- package/dist/src/dht/routing/DuplicateDetector.js +2 -7
- package/dist/src/dht/routing/DuplicateDetector.js.map +1 -1
- package/dist/src/dht/routing/RemoteRouter.js +4 -4
- package/dist/src/dht/routing/RemoteRouter.js.map +1 -1
- package/dist/src/dht/routing/Router.d.ts +10 -13
- package/dist/src/dht/routing/Router.js +28 -29
- package/dist/src/dht/routing/Router.js.map +1 -1
- package/dist/src/dht/routing/RoutingSession.d.ts +3 -5
- package/dist/src/dht/routing/RoutingSession.js +19 -13
- package/dist/src/dht/routing/RoutingSession.js.map +1 -1
- package/dist/src/dht/store/DataStore.d.ts +2 -2
- package/dist/src/dht/store/DataStore.js +7 -7
- package/dist/src/dht/store/DataStore.js.map +1 -1
- package/dist/src/exports.d.ts +1 -8
- package/dist/src/exports.js +2 -16
- package/dist/src/exports.js.map +1 -1
- package/dist/src/helpers/PeerID.d.ts +0 -1
- package/dist/src/helpers/PeerID.js +0 -6
- package/dist/src/helpers/PeerID.js.map +1 -1
- package/dist/src/helpers/browser/isBrowserEnvironment.d.ts +1 -0
- package/dist/src/helpers/browser/isBrowserEnvironment.js +6 -0
- package/dist/src/helpers/browser/isBrowserEnvironment.js.map +1 -0
- package/dist/src/helpers/browser/isBrowserEnvironment_override.d.ts +1 -0
- package/dist/src/helpers/browser/isBrowserEnvironment_override.js +7 -0
- package/dist/src/helpers/browser/isBrowserEnvironment_override.js.map +1 -0
- package/dist/src/helpers/kademliaId.d.ts +1 -0
- package/dist/src/helpers/kademliaId.js +14 -0
- package/dist/src/helpers/kademliaId.js.map +1 -0
- package/dist/src/helpers/peerIdFromPeerDescriptor.d.ts +1 -1
- package/dist/src/helpers/peerIdFromPeerDescriptor.js +3 -3
- package/dist/src/helpers/peerIdFromPeerDescriptor.js.map +1 -1
- package/dist/src/proto/packages/dht/protos/DhtRpc.d.ts +0 -4
- package/dist/src/proto/packages/dht/protos/DhtRpc.js +1 -2
- package/dist/src/proto/packages/dht/protos/DhtRpc.js.map +1 -1
- package/package.json +10 -9
- package/protos/DhtRpc.proto +0 -1
- package/src/connection/ConnectionLockHandler.ts +1 -1
- package/src/connection/ConnectionManager.ts +156 -240
- package/src/connection/ConnectivityChecker.ts +14 -11
- package/src/connection/ConnectorFacade.ts +143 -0
- package/src/connection/ManagedConnection.ts +23 -34
- package/src/connection/RemoteConnectionLocker.ts +4 -3
- package/src/connection/Simulator/Simulator.ts +0 -7
- package/src/connection/Simulator/SimulatorConnection.ts +16 -13
- package/src/connection/Simulator/SimulatorConnector.ts +11 -12
- package/src/connection/Simulator/SimulatorTransport.ts +6 -1
- package/src/connection/WebRTC/NodeWebRtcConnection.ts +14 -13
- package/src/connection/WebRTC/WebRtcConnector.ts +31 -31
- package/src/connection/WebSocket/RemoteWebSocketConnector.ts +2 -1
- package/src/connection/WebSocket/WebSocketConnector.ts +85 -62
- package/src/connection/WebSocket/WebSocketServer.ts +26 -8
- package/src/dht/DhtNode.ts +164 -189
- package/src/dht/{DhtPeer.ts → RemoteDhtNode.ts} +14 -7
- package/src/dht/contact/Contact.ts +1 -18
- package/src/dht/contact/ContactList.ts +16 -6
- package/src/dht/contact/RandomContactList.ts +6 -11
- package/src/dht/contact/Remote.ts +1 -10
- package/src/dht/contact/SortedContactList.ts +12 -25
- package/src/dht/discovery/DiscoverySession.ts +20 -23
- package/src/dht/discovery/PeerDiscovery.ts +45 -44
- package/src/dht/find/RecursiveFindSession.ts +12 -13
- package/src/dht/find/RecursiveFinder.ts +16 -19
- package/src/dht/registerExternalApiRpcMethods.ts +1 -1
- package/src/dht/routing/DuplicateDetector.ts +3 -10
- package/src/dht/routing/RemoteRouter.ts +5 -5
- package/src/dht/routing/Router.ts +35 -39
- package/src/dht/routing/RoutingSession.ts +37 -28
- package/src/dht/store/DataStore.ts +11 -11
- package/src/exports.ts +1 -8
- package/src/helpers/PeerID.ts +0 -7
- package/src/helpers/browser/isBrowserEnvironment.ts +1 -0
- package/src/helpers/browser/isBrowserEnvironment_override.ts +3 -0
- package/src/helpers/kademliaId.ts +8 -0
- package/src/helpers/peerIdFromPeerDescriptor.ts +1 -1
- package/src/proto/packages/dht/protos/DhtRpc.ts +1 -6
- package/test/benchmark/KademliaCorrectness.test.ts +5 -2
- package/test/benchmark/RecursiveFind.test.ts +6 -6
- package/test/end-to-end/Layer0-Layer1.test.ts +14 -14
- package/test/end-to-end/Layer0WebRTC-Layer1.test.ts +5 -5
- package/test/end-to-end/Layer0WebRTC.test.ts +5 -6
- package/test/end-to-end/Layer1-Scale-WebRTC.test.ts +13 -8
- package/test/end-to-end/Layer1-Scale-WebSocket.test.ts +15 -10
- package/test/end-to-end/WebSocketConnectionRequest.test.ts +5 -5
- package/test/integration/ConnectionLocking.test.ts +32 -26
- package/test/integration/ConnectionManager.test.ts +90 -93
- package/test/integration/DhtJoinPeerDiscovery.test.ts +53 -0
- package/test/integration/DhtRpc.test.ts +4 -6
- package/test/integration/Layer1-scale.test.ts +8 -8
- package/test/integration/MigrateData.test.ts +9 -9
- package/test/integration/Mock-Layer1-Layer0.test.ts +1 -2
- package/test/integration/RecursiveFind.test.ts +5 -5
- package/test/integration/{DhtPeer.test.ts → RemoteDhtNode.test.ts} +11 -12
- package/test/integration/RemoteRouter.test.ts +5 -6
- package/test/integration/RemoteStore.test.ts +4 -5
- package/test/integration/RouteMessage.test.ts +7 -9
- package/test/integration/RpcErrors.test.ts +25 -10
- package/test/integration/ScaleDownDht.test.ts +8 -8
- package/test/integration/SimultaneousConnections.test.ts +35 -36
- package/test/integration/Store.test.ts +8 -9
- package/test/integration/StoreAndDelete.test.ts +11 -11
- package/test/integration/StoreOnDhtWithTwoNodes.test.ts +7 -7
- package/test/integration/WebRtcConnectionManagement.test.ts +26 -19
- package/test/integration/WebRtcConnectorRpc.test.ts +6 -8
- package/test/integration/WebSocket.test.ts +4 -2
- package/test/integration/WebSocketConnectionManagement.test.ts +30 -17
- package/test/integration/WebSocketConnectorRpc.test.ts +2 -3
- package/test/unit/DuplicateDetector.test.ts +3 -4
- package/test/unit/LocalDataStore.test.ts +6 -8
- package/test/unit/RandomContactList.test.ts +25 -74
- package/test/unit/RecursiveFinder.test.ts +8 -12
- package/test/unit/Router.test.ts +18 -21
- package/test/unit/SortedContactList.test.ts +62 -112
- package/test/unit/WebSocketConnector.test.ts +64 -0
- package/test/unit/WebSocketServer.test.ts +24 -12
- package/test/utils/mock/RecursiveFinder.ts +2 -2
- package/test/utils/mock/Router.ts +9 -11
- package/test/utils/mock/Transport.ts +2 -2
- package/test/utils/utils.ts +40 -49
- package/dist/src/dht/DhtPeer.js.map +0 -1
- package/dist/src/helpers/browser/isBrowser.d.ts +0 -1
- package/dist/src/helpers/browser/isBrowser.js +0 -6
- package/dist/src/helpers/browser/isBrowser.js.map +0 -1
- package/dist/src/helpers/browser/isNodeJS.d.ts +0 -1
- package/dist/src/helpers/browser/isNodeJS.js +0 -6
- package/dist/src/helpers/browser/isNodeJS.js.map +0 -1
- package/src/helpers/browser/isBrowser.ts +0 -1
- package/src/helpers/browser/isNodeJS.ts +0 -1
- package/test/integration/DhtWithMockConnectionLatencies.test.ts +0 -46
- package/test/integration/DhtWithMockConnections.test.ts +0 -46
- package/test/integration/DhtWithRealConnectionLatencies.test.ts +0 -47
- /package/test/unit/{webrtcReplaceInternalIpWithExternalIp.ts → webrtcReplaceInternalIpWithExternalIp.test.ts} +0 -0
package/test/unit/Router.test.ts
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { Router } from '../../src/dht/routing/Router'
|
|
2
2
|
import { Message, MessageType, NodeType, PeerDescriptor, RouteMessageWrapper } from '../../src/proto/packages/dht/protos/DhtRpc'
|
|
3
3
|
import { PeerID, PeerIDKey } from '../../src/helpers/PeerID'
|
|
4
|
-
import {
|
|
4
|
+
import { RemoteDhtNode } from '../../src/dht/RemoteDhtNode'
|
|
5
5
|
import { createWrappedClosestPeersRequest, createMockRoutingRpcCommunicator } from '../utils/utils'
|
|
6
6
|
import { v4 } from 'uuid'
|
|
7
|
-
import { keyFromPeerDescriptor } from '../../src/helpers/peerIdFromPeerDescriptor'
|
|
8
7
|
|
|
9
8
|
describe('Router', () => {
|
|
10
9
|
let router: Router
|
|
@@ -12,14 +11,13 @@ describe('Router', () => {
|
|
|
12
11
|
const peerId = PeerID.fromString('router')
|
|
13
12
|
const peerDescriptor1: PeerDescriptor = {
|
|
14
13
|
kademliaId: peerId.value,
|
|
15
|
-
type: NodeType.NODEJS
|
|
16
|
-
nodeName: 'router'
|
|
14
|
+
type: NodeType.NODEJS
|
|
17
15
|
}
|
|
18
16
|
const peerDescriptor2: PeerDescriptor = {
|
|
19
17
|
kademliaId: PeerID.fromString('destination').value,
|
|
20
|
-
type: NodeType.NODEJS
|
|
18
|
+
type: NodeType.NODEJS
|
|
21
19
|
}
|
|
22
|
-
const rpcWrapper = createWrappedClosestPeersRequest(peerDescriptor1
|
|
20
|
+
const rpcWrapper = createWrappedClosestPeersRequest(peerDescriptor1)
|
|
23
21
|
const message: Message = {
|
|
24
22
|
serviceId: 'unknown',
|
|
25
23
|
messageId: v4(),
|
|
@@ -39,18 +37,17 @@ describe('Router', () => {
|
|
|
39
37
|
destinationPeer: peerDescriptor1,
|
|
40
38
|
sourcePeer: peerDescriptor2
|
|
41
39
|
}
|
|
42
|
-
let connections: Map<PeerIDKey,
|
|
40
|
+
let connections: Map<PeerIDKey, RemoteDhtNode>
|
|
43
41
|
const mockRpcCommunicator = createMockRoutingRpcCommunicator()
|
|
44
42
|
|
|
45
|
-
const
|
|
46
|
-
return new
|
|
43
|
+
const createMockRemoteDhtNode = (destination: PeerDescriptor): RemoteDhtNode => {
|
|
44
|
+
return new RemoteDhtNode(peerDescriptor1, destination, {} as any, 'router')
|
|
47
45
|
}
|
|
48
46
|
|
|
49
47
|
beforeEach(() => {
|
|
50
48
|
connections = new Map()
|
|
51
49
|
router = new Router({
|
|
52
50
|
ownPeerDescriptor: peerDescriptor1,
|
|
53
|
-
ownPeerId: peerId,
|
|
54
51
|
rpcCommunicator: mockRpcCommunicator,
|
|
55
52
|
addContact: (_contact) => {},
|
|
56
53
|
serviceId: 'router',
|
|
@@ -75,7 +72,7 @@ describe('Router', () => {
|
|
|
75
72
|
})
|
|
76
73
|
|
|
77
74
|
it('doRouteMessage with connections', () => {
|
|
78
|
-
connections.set(PeerID.fromString('test').toKey(),
|
|
75
|
+
connections.set(PeerID.fromString('test').toKey(), createMockRemoteDhtNode(peerDescriptor2))
|
|
79
76
|
const ack = router.doRouteMessage({
|
|
80
77
|
message,
|
|
81
78
|
destinationPeer: peerDescriptor2,
|
|
@@ -88,36 +85,36 @@ describe('Router', () => {
|
|
|
88
85
|
})
|
|
89
86
|
|
|
90
87
|
it('route server is destination without connections', async () => {
|
|
91
|
-
const ack = await router.routeMessage(routedMessage
|
|
88
|
+
const ack = await router.routeMessage(routedMessage)
|
|
92
89
|
expect(ack.error).toEqual('')
|
|
93
90
|
})
|
|
94
91
|
|
|
95
92
|
it('route server with connections', async () => {
|
|
96
|
-
connections.set(PeerID.fromString('test').toKey(),
|
|
97
|
-
const ack = await router.routeMessage(routedMessage
|
|
93
|
+
connections.set(PeerID.fromString('test').toKey(), createMockRemoteDhtNode(peerDescriptor2))
|
|
94
|
+
const ack = await router.routeMessage(routedMessage)
|
|
98
95
|
expect(ack.error).toEqual('')
|
|
99
96
|
})
|
|
100
97
|
|
|
101
98
|
it('route server on duplicate message', async () => {
|
|
102
|
-
router.addToDuplicateDetector(routedMessage.requestId
|
|
103
|
-
const ack = await router.routeMessage(routedMessage
|
|
99
|
+
router.addToDuplicateDetector(routedMessage.requestId)
|
|
100
|
+
const ack = await router.routeMessage(routedMessage)
|
|
104
101
|
expect(ack.error).toEqual('message given to routeMessage() service is likely a duplicate')
|
|
105
102
|
})
|
|
106
103
|
|
|
107
104
|
it('forward server no connections', async () => {
|
|
108
|
-
const ack = await router.forwardMessage(routedMessage
|
|
105
|
+
const ack = await router.forwardMessage(routedMessage)
|
|
109
106
|
expect(ack.error).toEqual('No routing candidates found')
|
|
110
107
|
})
|
|
111
108
|
|
|
112
109
|
it('forward server with connections', async () => {
|
|
113
|
-
connections.set(PeerID.fromString('test').toKey(),
|
|
114
|
-
const ack = await router.forwardMessage(routedMessage
|
|
110
|
+
connections.set(PeerID.fromString('test').toKey(), createMockRemoteDhtNode(peerDescriptor2))
|
|
111
|
+
const ack = await router.forwardMessage(routedMessage)
|
|
115
112
|
expect(ack.error).toEqual('')
|
|
116
113
|
})
|
|
117
114
|
|
|
118
115
|
it('forward server on duplicate message', async () => {
|
|
119
|
-
router.addToDuplicateDetector(routedMessage.requestId
|
|
120
|
-
const ack = await router.forwardMessage(routedMessage
|
|
116
|
+
router.addToDuplicateDetector(routedMessage.requestId)
|
|
117
|
+
const ack = await router.forwardMessage(routedMessage)
|
|
121
118
|
expect(ack.error).toEqual('message given to forwardMessage() service is likely a duplicate')
|
|
122
119
|
})
|
|
123
120
|
|
|
@@ -1,153 +1,103 @@
|
|
|
1
1
|
import { SortedContactList } from '../../src/dht/contact/SortedContactList'
|
|
2
|
-
import type { ServiceInfo, MethodInfo } from '@protobuf-ts/runtime-rpc'
|
|
3
2
|
import { PeerID } from '../../src/helpers/PeerID'
|
|
4
|
-
import { toProtoRpcClient } from '@streamr/proto-rpc'
|
|
5
|
-
import { IDhtRpcServiceClient } from '../../src/proto/packages/dht/protos/DhtRpc.client'
|
|
6
|
-
import { LeaveNotice, NodeType, PeerDescriptor, RouteMessageAck } from '../../src/proto/packages/dht/protos/DhtRpc'
|
|
7
|
-
import type { FindDataRequest, FindDataResponse, PingResponse } from '../../src/proto/packages/dht/protos/DhtRpc'
|
|
8
|
-
import type { PingRequest } from '../../src/proto/packages/dht/protos/DhtRpc'
|
|
9
|
-
import type { ClosestPeersResponse } from '../../src/proto/packages/dht/protos/DhtRpc'
|
|
10
|
-
import type { ClosestPeersRequest } from '../../src/proto/packages/dht/protos/DhtRpc'
|
|
11
|
-
import { UnaryCall } from '@protobuf-ts/runtime-rpc'
|
|
12
|
-
import type { RpcOptions } from '@protobuf-ts/runtime-rpc'
|
|
13
|
-
import { DhtPeer } from '../../src/dht/DhtPeer'
|
|
14
|
-
import { IMessageType } from '@protobuf-ts/runtime'
|
|
15
|
-
import { Empty } from '../../src/proto/google/protobuf/empty'
|
|
16
3
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
typeName = 'MockRpcClient'
|
|
20
|
-
methods: MethodInfo<any, any> [] = [
|
|
21
|
-
{ name: 'getClosestPeers', O: {} as IMessageType<ClosestPeersResponse> } as MethodInfo<any, any>,
|
|
22
|
-
{ name: 'ping', O: {} as IMessageType<PingResponse> } as MethodInfo<any, any>,
|
|
23
|
-
{ name: 'findData', O: {} as IMessageType<RouteMessageAck> } as MethodInfo<any, any>,
|
|
24
|
-
{ name: 'leaveNotice', O: {} as IMessageType<Empty> } as MethodInfo<any, any>
|
|
25
|
-
]
|
|
26
|
-
options = {}
|
|
27
|
-
getClosestPeers(_input: ClosestPeersRequest, _options?: RpcOptions): UnaryCall<ClosestPeersRequest, ClosestPeersResponse> {
|
|
28
|
-
return {} as UnaryCall<ClosestPeersRequest, ClosestPeersResponse>
|
|
29
|
-
}
|
|
30
|
-
ping(_input: PingRequest, _options?: RpcOptions): UnaryCall <PingRequest, PingResponse> {
|
|
31
|
-
return {} as UnaryCall<PingRequest, PingResponse>
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
// eslint-disable-next-line class-methods-use-this
|
|
35
|
-
findData(_input: FindDataRequest, _options?: RpcOptions): UnaryCall<FindDataRequest, FindDataResponse> {
|
|
36
|
-
return {} as UnaryCall<FindDataRequest, FindDataResponse>
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
leaveNotice(_input: LeaveNotice, _options?: RpcOptions): UnaryCall<LeaveNotice, Empty> {
|
|
40
|
-
return {} as UnaryCall<LeaveNotice, Empty>
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
const getId = (descriptor: PeerDescriptor): PeerID => {
|
|
45
|
-
return PeerID.fromValue(descriptor.kademliaId)
|
|
4
|
+
const createItem = (kademliaId: Uint8Array): { getPeerId: () => PeerID } => {
|
|
5
|
+
return { getPeerId: () => PeerID.fromValue(kademliaId) }
|
|
46
6
|
}
|
|
47
7
|
|
|
48
8
|
describe('SortedContactList', () => {
|
|
49
|
-
const
|
|
50
|
-
const
|
|
51
|
-
const
|
|
52
|
-
const
|
|
53
|
-
const
|
|
54
|
-
const descriptor4: PeerDescriptor = { kademliaId: new Uint8Array([0, 0, 0, 4]), type: NodeType.NODEJS }
|
|
55
|
-
const peer1 = new DhtPeer(descriptor0, descriptor1, toProtoRpcClient(new MockRpcClient()), serviceId)
|
|
56
|
-
const peer2 = new DhtPeer(descriptor0, descriptor2, toProtoRpcClient(new MockRpcClient()), serviceId)
|
|
57
|
-
const peer3 = new DhtPeer(descriptor0, descriptor3, toProtoRpcClient(new MockRpcClient()), serviceId)
|
|
58
|
-
const peer4 = new DhtPeer(descriptor0, descriptor4, toProtoRpcClient(new MockRpcClient()), serviceId)
|
|
9
|
+
const item0 = createItem(new Uint8Array([0, 0, 0, 0]))
|
|
10
|
+
const item1 = createItem(new Uint8Array([0, 0, 0, 1]))
|
|
11
|
+
const item2 = createItem(new Uint8Array([0, 0, 0, 2]))
|
|
12
|
+
const item3 = createItem(new Uint8Array([0, 0, 0, 3]))
|
|
13
|
+
const item4 = createItem(new Uint8Array([0, 0, 0, 4]))
|
|
59
14
|
|
|
60
15
|
it('compares Ids correctly', async () => {
|
|
61
|
-
const list = new SortedContactList(
|
|
62
|
-
expect(list.compareIds(
|
|
63
|
-
expect(list.compareIds(
|
|
64
|
-
expect(list.compareIds(
|
|
65
|
-
expect(list.compareIds(
|
|
66
|
-
expect(list.compareIds(
|
|
67
|
-
expect(list.compareIds(
|
|
68
|
-
expect(list.compareIds(
|
|
69
|
-
expect(list.compareIds(
|
|
16
|
+
const list = new SortedContactList(item0.getPeerId(), 10)
|
|
17
|
+
expect(list.compareIds(item0.getPeerId(), item0.getPeerId())).toBe(0)
|
|
18
|
+
expect(list.compareIds(item1.getPeerId(), item1.getPeerId())).toBe(0)
|
|
19
|
+
expect(list.compareIds(item0.getPeerId(), item1.getPeerId())).toBe(-1)
|
|
20
|
+
expect(list.compareIds(item0.getPeerId(), item2.getPeerId())).toBe(-2)
|
|
21
|
+
expect(list.compareIds(item1.getPeerId(), item0.getPeerId())).toBe(1)
|
|
22
|
+
expect(list.compareIds(item2.getPeerId(), item0.getPeerId())).toBe(2)
|
|
23
|
+
expect(list.compareIds(item2.getPeerId(), item3.getPeerId())).toBe(-1)
|
|
24
|
+
expect(list.compareIds(item1.getPeerId(), item4.getPeerId())).toBe(-3)
|
|
70
25
|
})
|
|
71
26
|
|
|
72
27
|
it('orders itself correctly', async () => {
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
list.addContact(
|
|
77
|
-
list.addContact(peer2)
|
|
78
|
-
list.addContact(peer1)
|
|
79
|
-
|
|
28
|
+
const list = new SortedContactList(item0.getPeerId(), 10)
|
|
29
|
+
list.addContact(item3)
|
|
30
|
+
list.addContact(item2)
|
|
31
|
+
list.addContact(item1)
|
|
80
32
|
const contacts = list.getUncontactedContacts(3)
|
|
81
33
|
expect(contacts.length).toEqual(3)
|
|
82
|
-
expect(contacts[0]).toEqual(
|
|
83
|
-
expect(contacts[1]).toEqual(
|
|
84
|
-
expect(contacts[2]).toEqual(
|
|
34
|
+
expect(contacts[0]).toEqual(item1)
|
|
35
|
+
expect(contacts[1]).toEqual(item2)
|
|
36
|
+
expect(contacts[2]).toEqual(item3)
|
|
85
37
|
})
|
|
86
38
|
|
|
87
39
|
it('handles contacted nodes correctly', async () => {
|
|
88
|
-
const list = new SortedContactList(
|
|
89
|
-
|
|
90
|
-
list.addContact(
|
|
91
|
-
list.addContact(
|
|
92
|
-
list.
|
|
93
|
-
|
|
94
|
-
list.setContacted(getId(descriptor2))
|
|
40
|
+
const list = new SortedContactList(item0.getPeerId(), 10)
|
|
41
|
+
list.addContact(item3)
|
|
42
|
+
list.addContact(item2)
|
|
43
|
+
list.addContact(item1)
|
|
44
|
+
list.setContacted(item2.getPeerId())
|
|
95
45
|
const contacts = list.getUncontactedContacts(3)
|
|
96
46
|
expect(contacts.length).toEqual(2)
|
|
97
|
-
expect(contacts[0]).toEqual(
|
|
98
|
-
expect(contacts[1]).toEqual(
|
|
47
|
+
expect(contacts[0]).toEqual(item1)
|
|
48
|
+
expect(contacts[1]).toEqual(item3)
|
|
99
49
|
})
|
|
100
50
|
|
|
101
51
|
it('cannot exceed maxSize', async () => {
|
|
102
|
-
const list = new SortedContactList(
|
|
52
|
+
const list = new SortedContactList(item0.getPeerId(), 3)
|
|
103
53
|
const onContactRemoved = jest.fn()
|
|
104
54
|
list.on('contactRemoved', onContactRemoved)
|
|
105
|
-
list.addContact(
|
|
106
|
-
list.addContact(
|
|
107
|
-
list.addContact(
|
|
108
|
-
list.addContact(
|
|
55
|
+
list.addContact(item1)
|
|
56
|
+
list.addContact(item4)
|
|
57
|
+
list.addContact(item3)
|
|
58
|
+
list.addContact(item2)
|
|
109
59
|
expect(list.getSize()).toEqual(3)
|
|
110
|
-
expect(onContactRemoved).toBeCalledWith(
|
|
111
|
-
expect(list.getContact(
|
|
60
|
+
expect(onContactRemoved).toBeCalledWith(item4, [item1, item2, item3])
|
|
61
|
+
expect(list.getContact(item4.getPeerId())).toBeFalsy()
|
|
112
62
|
})
|
|
113
63
|
|
|
114
64
|
it('removing contacts', async () => {
|
|
115
|
-
const list = new SortedContactList(
|
|
65
|
+
const list = new SortedContactList(item0.getPeerId(), 8)
|
|
116
66
|
const onContactRemoved = jest.fn()
|
|
117
67
|
list.on('contactRemoved', onContactRemoved)
|
|
118
|
-
list.addContact(
|
|
119
|
-
list.addContact(
|
|
120
|
-
list.addContact(
|
|
121
|
-
list.addContact(
|
|
122
|
-
list.removeContact(
|
|
68
|
+
list.addContact(item4)
|
|
69
|
+
list.addContact(item3)
|
|
70
|
+
list.addContact(item2)
|
|
71
|
+
list.addContact(item1)
|
|
72
|
+
list.removeContact(item2.getPeerId())
|
|
123
73
|
expect(list.getSize()).toEqual(3)
|
|
124
|
-
expect(list.getContact(
|
|
74
|
+
expect(list.getContact(item2.getPeerId())).toBeFalsy()
|
|
125
75
|
expect(list.getContactIds()).toEqual(list.getContactIds().sort(list.compareIds))
|
|
126
|
-
expect(list.getAllContacts()).toEqual([
|
|
127
|
-
expect(onContactRemoved).toBeCalledWith(
|
|
76
|
+
expect(list.getAllContacts()).toEqual([item1, item3, item4])
|
|
77
|
+
expect(onContactRemoved).toBeCalledWith(item2, [item1, item3, item4])
|
|
128
78
|
const ret = list.removeContact(PeerID.fromValue(Buffer.from([0, 0, 0, 6])))
|
|
129
79
|
expect(ret).toEqual(false)
|
|
130
80
|
})
|
|
131
81
|
|
|
132
82
|
it('get closes contacts', () => {
|
|
133
|
-
const list = new SortedContactList(
|
|
134
|
-
list.addContact(
|
|
135
|
-
list.addContact(
|
|
136
|
-
list.addContact(
|
|
137
|
-
list.addContact(
|
|
138
|
-
expect(list.getClosestContacts(2)).toEqual([
|
|
139
|
-
expect(list.getClosestContacts()).toEqual([
|
|
83
|
+
const list = new SortedContactList(item0.getPeerId(), 8)
|
|
84
|
+
list.addContact(item1)
|
|
85
|
+
list.addContact(item3)
|
|
86
|
+
list.addContact(item4)
|
|
87
|
+
list.addContact(item2)
|
|
88
|
+
expect(list.getClosestContacts(2)).toEqual([item1, item2])
|
|
89
|
+
expect(list.getClosestContacts()).toEqual([item1, item2, item3, item4])
|
|
140
90
|
})
|
|
141
91
|
|
|
142
92
|
it('get active contacts', () => {
|
|
143
|
-
const list = new SortedContactList(
|
|
144
|
-
list.addContact(
|
|
145
|
-
list.addContact(
|
|
146
|
-
list.addContact(
|
|
147
|
-
list.addContact(
|
|
148
|
-
list.setActive(
|
|
149
|
-
list.setActive(
|
|
150
|
-
list.setActive(
|
|
151
|
-
expect(list.getActiveContacts()).toEqual([
|
|
93
|
+
const list = new SortedContactList(item0.getPeerId(), 8)
|
|
94
|
+
list.addContact(item1)
|
|
95
|
+
list.addContact(item3)
|
|
96
|
+
list.addContact(item4)
|
|
97
|
+
list.addContact(item2)
|
|
98
|
+
list.setActive(item2.getPeerId())
|
|
99
|
+
list.setActive(item3.getPeerId())
|
|
100
|
+
list.setActive(item4.getPeerId())
|
|
101
|
+
expect(list.getActiveContacts()).toEqual([item2, item3, item4])
|
|
152
102
|
})
|
|
153
103
|
})
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/* eslint-disable max-len */
|
|
2
|
+
import { WebSocketConnector } from '../../src/connection/WebSocket/WebSocketConnector'
|
|
3
|
+
import { ConnectivityMethod, NodeType, PeerDescriptor } from '../../src/proto/packages/dht/protos/DhtRpc'
|
|
4
|
+
import crypto from 'crypto'
|
|
5
|
+
import { MockTransport } from '../utils/mock/Transport'
|
|
6
|
+
|
|
7
|
+
const createMockPeerDescriptor = (nodeType: NodeType, websocket?: ConnectivityMethod): PeerDescriptor => {
|
|
8
|
+
return {
|
|
9
|
+
kademliaId: crypto.randomBytes(10),
|
|
10
|
+
type: nodeType,
|
|
11
|
+
websocket
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
describe('WebSocketConnector', () => {
|
|
16
|
+
|
|
17
|
+
describe('isPossibleToFormConnection', () => {
|
|
18
|
+
|
|
19
|
+
const connector = new WebSocketConnector({
|
|
20
|
+
transport: new MockTransport(),
|
|
21
|
+
canConnect: () => {}
|
|
22
|
+
} as any)
|
|
23
|
+
|
|
24
|
+
it('node without server', () => {
|
|
25
|
+
connector.setOwnPeerDescriptor(createMockPeerDescriptor(NodeType.NODEJS))
|
|
26
|
+
expect(connector.isPossibleToFormConnection(createMockPeerDescriptor(NodeType.NODEJS, { host: '2.2.2.2', port: 22, tls: false }))).toBe(true)
|
|
27
|
+
expect(connector.isPossibleToFormConnection(createMockPeerDescriptor(NodeType.NODEJS, { host: '2.2.2.2', port: 22, tls: true }))).toBe(true)
|
|
28
|
+
expect(connector.isPossibleToFormConnection(createMockPeerDescriptor(NodeType.NODEJS))).toBe(false)
|
|
29
|
+
expect(connector.isPossibleToFormConnection(createMockPeerDescriptor(NodeType.BROWSER))).toBe(false)
|
|
30
|
+
})
|
|
31
|
+
|
|
32
|
+
it('node with TLS server', () => {
|
|
33
|
+
connector.setOwnPeerDescriptor(createMockPeerDescriptor(NodeType.NODEJS, { host: '1.1.1.1', port: 11, tls: true }))
|
|
34
|
+
expect(connector.isPossibleToFormConnection(createMockPeerDescriptor(NodeType.NODEJS, { host: '2.2.2.2', port: 22, tls: false }))).toBe(true)
|
|
35
|
+
expect(connector.isPossibleToFormConnection(createMockPeerDescriptor(NodeType.NODEJS, { host: '2.2.2.2', port: 22, tls: true }))).toBe(true)
|
|
36
|
+
expect(connector.isPossibleToFormConnection(createMockPeerDescriptor(NodeType.NODEJS))).toBe(true)
|
|
37
|
+
expect(connector.isPossibleToFormConnection(createMockPeerDescriptor(NodeType.BROWSER))).toBe(true)
|
|
38
|
+
})
|
|
39
|
+
|
|
40
|
+
it('node with non-TLS server', () => {
|
|
41
|
+
connector.setOwnPeerDescriptor(createMockPeerDescriptor(NodeType.NODEJS, { host: '1.1.1.1', port: 11, tls: false }))
|
|
42
|
+
expect(connector.isPossibleToFormConnection(createMockPeerDescriptor(NodeType.NODEJS, { host: '2.2.2.2', port: 22, tls: false }))).toBe(true)
|
|
43
|
+
expect(connector.isPossibleToFormConnection(createMockPeerDescriptor(NodeType.NODEJS, { host: '2.2.2.2', port: 22, tls: true }))).toBe(true)
|
|
44
|
+
expect(connector.isPossibleToFormConnection(createMockPeerDescriptor(NodeType.NODEJS))).toBe(true)
|
|
45
|
+
expect(connector.isPossibleToFormConnection(createMockPeerDescriptor(NodeType.BROWSER))).toBe(false)
|
|
46
|
+
})
|
|
47
|
+
|
|
48
|
+
it('node with non-TLS server in local network', () => {
|
|
49
|
+
connector.setOwnPeerDescriptor(createMockPeerDescriptor(NodeType.NODEJS, { host: '192.168.11.11', port: 11, tls: false }))
|
|
50
|
+
expect(connector.isPossibleToFormConnection(createMockPeerDescriptor(NodeType.NODEJS, { host: '2.2.2.2', port: 22, tls: false }))).toBe(true)
|
|
51
|
+
expect(connector.isPossibleToFormConnection(createMockPeerDescriptor(NodeType.NODEJS, { host: '2.2.2.2', port: 22, tls: true }))).toBe(true)
|
|
52
|
+
expect(connector.isPossibleToFormConnection(createMockPeerDescriptor(NodeType.NODEJS))).toBe(true)
|
|
53
|
+
expect(connector.isPossibleToFormConnection(createMockPeerDescriptor(NodeType.BROWSER))).toBe(true)
|
|
54
|
+
})
|
|
55
|
+
|
|
56
|
+
it('browser', () => {
|
|
57
|
+
connector.setOwnPeerDescriptor(createMockPeerDescriptor(NodeType.BROWSER))
|
|
58
|
+
expect(connector.isPossibleToFormConnection(createMockPeerDescriptor(NodeType.NODEJS, { host: '2.2.2.2', port: 22, tls: false }))).toBe(false)
|
|
59
|
+
expect(connector.isPossibleToFormConnection(createMockPeerDescriptor(NodeType.NODEJS, { host: '2.2.2.2', port: 22, tls: true }))).toBe(true)
|
|
60
|
+
expect(connector.isPossibleToFormConnection(createMockPeerDescriptor(NodeType.NODEJS))).toBe(false)
|
|
61
|
+
expect(connector.isPossibleToFormConnection(createMockPeerDescriptor(NodeType.BROWSER))).toBe(false)
|
|
62
|
+
})
|
|
63
|
+
})
|
|
64
|
+
})
|
|
@@ -3,19 +3,25 @@ import { WebSocketServer } from '../../src/connection/WebSocket/WebSocketServer'
|
|
|
3
3
|
describe('WebSocketServer', () => {
|
|
4
4
|
|
|
5
5
|
it('starts and stops', async () => {
|
|
6
|
-
const server = new WebSocketServer(
|
|
7
|
-
|
|
6
|
+
const server = new WebSocketServer({
|
|
7
|
+
portRange: { min: 19792, max: 19792 }
|
|
8
|
+
})
|
|
9
|
+
const port = await server.start()
|
|
8
10
|
expect(port).toEqual(19792)
|
|
9
11
|
await server.stop()
|
|
10
12
|
})
|
|
11
13
|
|
|
12
14
|
it('throws if server is already in use', async () => {
|
|
13
|
-
const server1 = new WebSocketServer(
|
|
14
|
-
|
|
15
|
+
const server1 = new WebSocketServer({
|
|
16
|
+
portRange: { min: 19792, max: 19792 }
|
|
17
|
+
})
|
|
18
|
+
const port = await server1.start()
|
|
15
19
|
expect(port).toEqual(19792)
|
|
16
20
|
|
|
17
|
-
const server2 = new WebSocketServer(
|
|
18
|
-
|
|
21
|
+
const server2 = new WebSocketServer({
|
|
22
|
+
portRange: { min: 19792, max: 19792 }
|
|
23
|
+
})
|
|
24
|
+
await expect(server2.start())
|
|
19
25
|
.rejects
|
|
20
26
|
.toThrow()
|
|
21
27
|
|
|
@@ -24,12 +30,16 @@ describe('WebSocketServer', () => {
|
|
|
24
30
|
})
|
|
25
31
|
|
|
26
32
|
it('Starts server in next port if first one is already in use', async () => {
|
|
27
|
-
const server1 = new WebSocketServer(
|
|
28
|
-
|
|
33
|
+
const server1 = new WebSocketServer({
|
|
34
|
+
portRange: { min: 19792, max: 19793 }
|
|
35
|
+
})
|
|
36
|
+
const port1 = await server1.start()
|
|
29
37
|
expect(port1).toEqual(19792)
|
|
30
38
|
|
|
31
|
-
const server2 = new WebSocketServer(
|
|
32
|
-
|
|
39
|
+
const server2 = new WebSocketServer({
|
|
40
|
+
portRange: { min: 19792, max: 19793 }
|
|
41
|
+
})
|
|
42
|
+
const port2 = await server2.start()
|
|
33
43
|
expect(port2).toEqual(19793)
|
|
34
44
|
|
|
35
45
|
await server1.stop()
|
|
@@ -37,9 +47,11 @@ describe('WebSocketServer', () => {
|
|
|
37
47
|
})
|
|
38
48
|
|
|
39
49
|
it('throws if too big a port number is given', async () => {
|
|
40
|
-
const server = new WebSocketServer(
|
|
50
|
+
const server = new WebSocketServer({
|
|
51
|
+
portRange: { min: 197923233, max: 197923233 }
|
|
52
|
+
})
|
|
41
53
|
|
|
42
|
-
await expect(server.start(
|
|
54
|
+
await expect(server.start())
|
|
43
55
|
.rejects
|
|
44
56
|
.toThrow()
|
|
45
57
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { RecursiveFindResult, IRecursiveFinder } from '../../../src/dht/find/RecursiveFinder'
|
|
2
|
-
import { RouteMessageAck
|
|
2
|
+
import { RouteMessageAck } from '../../../src/proto/packages/dht/protos/DhtRpc'
|
|
3
3
|
|
|
4
4
|
export class MockRecursiveFinder implements IRecursiveFinder {
|
|
5
5
|
|
|
@@ -12,7 +12,7 @@ export class MockRecursiveFinder implements IRecursiveFinder {
|
|
|
12
12
|
}
|
|
13
13
|
|
|
14
14
|
// eslint-disable-next-line class-methods-use-this
|
|
15
|
-
async findRecursively(
|
|
15
|
+
async findRecursively(): Promise<RouteMessageAck> {
|
|
16
16
|
return RouteMessageAck.create()
|
|
17
17
|
}
|
|
18
18
|
|
|
@@ -1,37 +1,35 @@
|
|
|
1
1
|
import { IRouter } from '../../../src/dht/routing/Router'
|
|
2
|
-
import {
|
|
3
|
-
import { PeerDescriptor, Message, RouteMessageAck, RouteMessageWrapper } from '../../../src/proto/packages/dht/protos/DhtRpc'
|
|
4
|
-
import { ServerCallContext } from '@protobuf-ts/runtime-rpc'
|
|
2
|
+
import { RouteMessageAck } from '../../../src/proto/packages/dht/protos/DhtRpc'
|
|
5
3
|
|
|
6
4
|
export class MockRouter implements IRouter {
|
|
7
5
|
|
|
8
6
|
// eslint-disable-next-line class-methods-use-this
|
|
9
|
-
addRoutingSession(
|
|
7
|
+
addRoutingSession(): void {
|
|
10
8
|
return
|
|
11
9
|
}
|
|
12
10
|
|
|
13
11
|
// eslint-disable-next-line class-methods-use-this
|
|
14
|
-
removeRoutingSession(
|
|
12
|
+
removeRoutingSession(): void {
|
|
15
13
|
return
|
|
16
14
|
}
|
|
17
15
|
|
|
18
16
|
// eslint-disable-next-line class-methods-use-this
|
|
19
|
-
addToDuplicateDetector(
|
|
17
|
+
addToDuplicateDetector(): void {
|
|
20
18
|
return
|
|
21
19
|
}
|
|
22
20
|
|
|
23
21
|
// eslint-disable-next-line class-methods-use-this
|
|
24
|
-
|
|
22
|
+
isMostLikelyDuplicate(): boolean {
|
|
25
23
|
return false
|
|
26
24
|
}
|
|
27
25
|
|
|
28
26
|
// eslint-disable-next-line class-methods-use-this
|
|
29
|
-
doRouteMessage(
|
|
27
|
+
doRouteMessage(): RouteMessageAck {
|
|
30
28
|
return RouteMessageAck.create()
|
|
31
29
|
}
|
|
32
30
|
|
|
33
31
|
// eslint-disable-next-line class-methods-use-this
|
|
34
|
-
send(
|
|
32
|
+
send(): Promise<void> {
|
|
35
33
|
throw Error('Not implemented')
|
|
36
34
|
}
|
|
37
35
|
|
|
@@ -41,12 +39,12 @@ export class MockRouter implements IRouter {
|
|
|
41
39
|
}
|
|
42
40
|
|
|
43
41
|
// eslint-disable-next-line class-methods-use-this
|
|
44
|
-
async routeMessage(
|
|
42
|
+
async routeMessage(): Promise<RouteMessageAck> {
|
|
45
43
|
return RouteMessageAck.create()
|
|
46
44
|
}
|
|
47
45
|
|
|
48
46
|
// eslint-disable-next-line class-methods-use-this
|
|
49
|
-
async forwardMessage(
|
|
47
|
+
async forwardMessage(): Promise<RouteMessageAck> {
|
|
50
48
|
return RouteMessageAck.create()
|
|
51
49
|
}
|
|
52
50
|
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { ITransport, TransportEvents } from '../../../src/transport/ITransport'
|
|
2
2
|
import { EventEmitter } from 'eventemitter3'
|
|
3
|
-
import {
|
|
3
|
+
import { PeerDescriptor } from '../../../src/proto/packages/dht/protos/DhtRpc'
|
|
4
4
|
|
|
5
5
|
export class MockTransport extends EventEmitter<TransportEvents> implements ITransport {
|
|
6
6
|
|
|
7
7
|
// eslint-disable-next-line class-methods-use-this
|
|
8
|
-
async send(
|
|
8
|
+
async send(): Promise<void> {
|
|
9
9
|
|
|
10
10
|
}
|
|
11
11
|
|