@streamr/trackerless-network 101.1.2 → 102.0.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/package.json +7 -7
- package/dist/src/NetworkNode.d.ts +6 -6
- package/dist/src/NetworkNode.js +5 -3
- package/dist/src/NetworkNode.js.map +1 -1
- package/dist/src/NetworkStack.js +3 -2
- package/dist/src/NetworkStack.js.map +1 -1
- package/dist/src/logic/ContentDeliveryLayerNode.d.ts +4 -1
- package/dist/src/logic/ContentDeliveryLayerNode.js +25 -5
- package/dist/src/logic/ContentDeliveryLayerNode.js.map +1 -1
- package/dist/src/logic/ContentDeliveryManager.d.ts +6 -2
- package/dist/src/logic/ContentDeliveryManager.js +26 -6
- package/dist/src/logic/ContentDeliveryManager.js.map +1 -1
- package/dist/src/logic/ContentDeliveryRpcLocal.js +2 -2
- package/dist/src/logic/ContentDeliveryRpcLocal.js.map +1 -1
- package/dist/src/logic/ContentDeliveryRpcRemote.d.ts +3 -0
- package/dist/src/logic/ContentDeliveryRpcRemote.js +7 -0
- package/dist/src/logic/ContentDeliveryRpcRemote.js.map +1 -1
- package/dist/src/logic/DuplicateMessageDetector.js +2 -2
- package/dist/src/logic/DuplicateMessageDetector.js.map +1 -1
- package/dist/src/logic/ExternalNetworkRpc.js.map +1 -1
- package/dist/src/logic/NodeList.js +2 -2
- package/dist/src/logic/NodeList.js.map +1 -1
- package/dist/src/logic/PeerDescriptorStoreManager.js +0 -1
- package/dist/src/logic/PeerDescriptorStoreManager.js.map +1 -1
- package/dist/src/logic/StreamPartNetworkSplitAvoidance.js +4 -3
- package/dist/src/logic/StreamPartNetworkSplitAvoidance.js.map +1 -1
- package/dist/src/logic/createContentDeliveryLayerNode.js +1 -1
- package/dist/src/logic/createContentDeliveryLayerNode.js.map +1 -1
- package/dist/src/logic/inspect/Inspector.js +3 -3
- package/dist/src/logic/inspect/Inspector.js.map +1 -1
- package/dist/src/logic/neighbor-discovery/HandshakeRpcLocal.js +9 -9
- package/dist/src/logic/neighbor-discovery/HandshakeRpcLocal.js.map +1 -1
- package/dist/src/logic/neighbor-discovery/HandshakeRpcRemote.js +5 -5
- package/dist/src/logic/neighbor-discovery/HandshakeRpcRemote.js.map +1 -1
- package/dist/src/logic/neighbor-discovery/Handshaker.js +12 -12
- package/dist/src/logic/neighbor-discovery/Handshaker.js.map +1 -1
- package/dist/src/logic/neighbor-discovery/NeighborFinder.js +5 -0
- package/dist/src/logic/neighbor-discovery/NeighborFinder.js.map +1 -1
- package/dist/src/logic/neighbor-discovery/NeighborUpdateManager.js +3 -1
- package/dist/src/logic/neighbor-discovery/NeighborUpdateManager.js.map +1 -1
- package/dist/src/logic/neighbor-discovery/NeighborUpdateRpcLocal.js +3 -3
- package/dist/src/logic/neighbor-discovery/NeighborUpdateRpcLocal.js.map +1 -1
- package/dist/src/logic/neighbor-discovery/NeighborUpdateRpcRemote.js +1 -1
- package/dist/src/logic/neighbor-discovery/NeighborUpdateRpcRemote.js.map +1 -1
- package/dist/src/logic/propagation/Propagation.js +0 -1
- package/dist/src/logic/propagation/Propagation.js.map +1 -1
- package/dist/src/logic/proxy/ProxyClient.d.ts +3 -2
- package/dist/src/logic/proxy/ProxyClient.js +9 -4
- package/dist/src/logic/proxy/ProxyClient.js.map +1 -1
- package/dist/src/logic/proxy/ProxyConnectionRpcLocal.d.ts +2 -2
- package/dist/src/logic/proxy/ProxyConnectionRpcLocal.js +1 -1
- package/dist/src/logic/proxy/ProxyConnectionRpcLocal.js.map +1 -1
- package/dist/src/logic/proxy/ProxyConnectionRpcRemote.d.ts +2 -2
- package/dist/src/logic/proxy/ProxyConnectionRpcRemote.js.map +1 -1
- package/dist/src/logic/temporary-connection/TemporaryConnectionRpcLocal.js +3 -3
- package/dist/src/logic/temporary-connection/TemporaryConnectionRpcLocal.js.map +1 -1
- package/dist/src/logic/temporary-connection/TemporaryConnectionRpcRemote.js +2 -2
- package/dist/src/logic/temporary-connection/TemporaryConnectionRpcRemote.js.map +1 -1
- package/dist/src/proto/google/protobuf/any.d.ts +11 -4
- package/dist/src/proto/google/protobuf/any.js.map +1 -1
- package/dist/src/proto/google/protobuf/empty.d.ts +0 -1
- package/dist/src/proto/google/protobuf/empty.js.map +1 -1
- package/dist/src/proto/google/protobuf/timestamp.d.ts +9 -3
- package/dist/src/proto/google/protobuf/timestamp.js.map +1 -1
- package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.d.ts +26 -2
- package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.js +16 -2
- package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.js.map +1 -1
- package/dist/test/benchmark/first-message.js +1 -2
- package/dist/test/benchmark/first-message.js.map +1 -1
- package/dist/test/utils/utils.d.ts +2 -2
- package/dist/test/utils/utils.js +1 -1
- package/dist/test/utils/utils.js.map +1 -1
- package/jest.config.js +3 -0
- package/karma-setup.js +7 -0
- package/karma.config.js +1 -1
- package/package.json +7 -7
- package/protos/NetworkRpc.proto +7 -1
- package/src/NetworkNode.ts +10 -8
- package/src/NetworkStack.ts +4 -3
- package/src/logic/ContentDeliveryLayerNode.ts +30 -6
- package/src/logic/ContentDeliveryManager.ts +37 -11
- package/src/logic/ContentDeliveryRpcLocal.ts +3 -3
- package/src/logic/ContentDeliveryRpcRemote.ts +10 -0
- package/src/logic/DuplicateMessageDetector.ts +2 -2
- package/src/logic/ExternalNetworkRpc.ts +0 -1
- package/src/logic/NodeList.ts +4 -3
- package/src/logic/PeerDescriptorStoreManager.ts +0 -1
- package/src/logic/StreamPartNetworkSplitAvoidance.ts +5 -4
- package/src/logic/createContentDeliveryLayerNode.ts +2 -2
- package/src/logic/inspect/Inspector.ts +4 -4
- package/src/logic/neighbor-discovery/HandshakeRpcLocal.ts +11 -11
- package/src/logic/neighbor-discovery/HandshakeRpcRemote.ts +6 -6
- package/src/logic/neighbor-discovery/Handshaker.ts +13 -13
- package/src/logic/neighbor-discovery/NeighborFinder.ts +6 -1
- package/src/logic/neighbor-discovery/NeighborUpdateManager.ts +4 -2
- package/src/logic/neighbor-discovery/NeighborUpdateRpcLocal.ts +4 -4
- package/src/logic/neighbor-discovery/NeighborUpdateRpcRemote.ts +2 -2
- package/src/logic/propagation/Propagation.ts +0 -1
- package/src/logic/proxy/ProxyClient.ts +15 -9
- package/src/logic/proxy/ProxyConnectionRpcLocal.ts +5 -5
- package/src/logic/proxy/ProxyConnectionRpcRemote.ts +2 -2
- package/src/logic/temporary-connection/TemporaryConnectionRpcLocal.ts +4 -4
- package/src/logic/temporary-connection/TemporaryConnectionRpcRemote.ts +3 -3
- package/src/proto/google/protobuf/any.ts +11 -4
- package/src/proto/google/protobuf/empty.ts +0 -1
- package/src/proto/google/protobuf/timestamp.ts +9 -3
- package/src/proto/packages/trackerless-network/protos/NetworkRpc.ts +34 -3
- package/test/benchmark/first-message.ts +2 -3
- package/test/end-to-end/content-delivery-layer-node-with-real-connections.test.ts +2 -2
- package/test/end-to-end/inspect.test.ts +2 -2
- package/test/end-to-end/proxy-and-full-node.test.ts +4 -4
- package/test/end-to-end/proxy-connections.test.ts +3 -3
- package/test/end-to-end/proxy-key-exchange.test.ts +5 -3
- package/test/end-to-end/webrtc-full-node-network.test.ts +4 -4
- package/test/end-to-end/websocket-full-node-network.test.ts +4 -4
- package/test/integration/ContentDeliveryLayerNode-Layer1Node-Latencies.test.ts +4 -4
- package/test/integration/ContentDeliveryLayerNode-Layer1Node.test.ts +4 -4
- package/test/integration/ContentDeliveryManager.test.ts +35 -14
- package/test/integration/ContentDeliveryRpcRemote.test.ts +2 -2
- package/test/integration/Handshakes.test.ts +7 -7
- package/test/integration/Inspect.test.ts +2 -2
- package/test/integration/NetworkNode.test.ts +2 -1
- package/test/integration/NetworkRpc.test.ts +4 -4
- package/test/integration/NetworkStack.test.ts +2 -2
- package/test/integration/NodeInfoRpc.test.ts +6 -2
- package/test/integration/Propagation.test.ts +2 -2
- package/test/integration/joining-streams-on-offline-peers.test.ts +2 -2
- package/test/integration/stream-without-default-entrypoints.test.ts +2 -1
- package/test/integration/streamEntryPointReplacing.test.ts +2 -2
- package/test/types/global.d.ts +2 -0
- package/test/unit/ContentDeliveryLayerNode.test.ts +22 -10
- package/test/unit/ContentDeliveryManager.test.ts +5 -5
- package/test/unit/ContentDeliveryRpcLocal.test.ts +2 -2
- package/test/unit/HandshakeRpcLocal.test.ts +8 -8
- package/test/unit/Handshaker.test.ts +2 -2
- package/test/unit/InspectSession.test.ts +3 -3
- package/test/unit/Inspector.test.ts +4 -4
- package/test/unit/NeighborFinder.test.ts +3 -3
- package/test/unit/NeighborUpdateRpcLocal.test.ts +5 -5
- package/test/unit/NetworkNode.test.ts +2 -2
- package/test/unit/NodeList.test.ts +22 -22
- package/test/unit/PeerDescriptorStoreManager.test.ts +2 -2
- package/test/unit/Propagation.test.ts +6 -5
- package/test/unit/ProxyConnectionRpcRemote.test.ts +3 -3
- package/test/unit/TemporaryConnectionRpcLocal.test.ts +3 -3
- package/test/utils/mock/MockControlLayerNode.ts +5 -0
- package/test/utils/mock/MockTransport.ts +11 -0
- package/test/utils/utils.ts +5 -5
- package/tsconfig.jest.json +1 -1
- package/tsconfig.json +3 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ConnectionLocker, PeerDescriptor, Simulator } from '@streamr/dht';
|
|
2
|
-
import {
|
|
2
|
+
import { StreamPartID, UserID } from '@streamr/utils';
|
|
3
3
|
import { NetworkNode } from '../../src/NetworkNode';
|
|
4
4
|
import { ContentDeliveryLayerNode } from '../../src/logic/ContentDeliveryLayerNode';
|
|
5
5
|
import { ContentDeliveryRpcRemote } from '../../src/logic/ContentDeliveryRpcRemote';
|
|
@@ -8,7 +8,7 @@ import { HandshakeRpcRemote } from '../../src/logic/neighbor-discovery/Handshake
|
|
|
8
8
|
import { StreamMessage } from '../../src/proto/packages/trackerless-network/protos/NetworkRpc';
|
|
9
9
|
export declare const mockConnectionLocker: ConnectionLocker;
|
|
10
10
|
export declare const createMockContentDeliveryLayerNodeAndDhtNode: (localPeerDescriptor: PeerDescriptor, entryPointDescriptor: PeerDescriptor, streamPartId: StreamPartID, simulator: Simulator) => Promise<[DiscoveryLayerNode, ContentDeliveryLayerNode]>;
|
|
11
|
-
export declare const createStreamMessage: (content: string, streamPartId: StreamPartID, publisherId:
|
|
11
|
+
export declare const createStreamMessage: (content: string, streamPartId: StreamPartID, publisherId: UserID, timestamp?: number, sequenceNumber?: number) => StreamMessage;
|
|
12
12
|
export declare const createMockPeerDescriptor: (opts?: Omit<Partial<PeerDescriptor>, 'nodeId' | 'type'>) => PeerDescriptor;
|
|
13
13
|
export declare const createMockContentDeliveryRpcRemote: (remotePeerDescriptor?: PeerDescriptor) => ContentDeliveryRpcRemote;
|
|
14
14
|
export declare const createMockHandshakeRpcRemote: () => HandshakeRpcRemote;
|
package/dist/test/utils/utils.js
CHANGED
|
@@ -70,7 +70,7 @@ exports.createStreamMessage = createStreamMessage;
|
|
|
70
70
|
const createMockPeerDescriptor = (opts) => {
|
|
71
71
|
return {
|
|
72
72
|
...opts,
|
|
73
|
-
nodeId: (0, dht_1.
|
|
73
|
+
nodeId: (0, dht_1.toDhtAddressRaw)((0, dht_1.randomDhtAddress)()),
|
|
74
74
|
type: dht_1.NodeType.NODEJS,
|
|
75
75
|
region: (0, dht_1.getRandomRegion)()
|
|
76
76
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../test/utils/utils.ts"],"names":[],"mappings":";;;AAAA,sCAUqB;AACrB,kDAAoD;AACpD,
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../test/utils/utils.ts"],"names":[],"mappings":";;;AAAA,sCAUqB;AACrB,kDAAoD;AACpD,0CAAmG;AACnG,uDAAsE;AAEtE,uFAAmF;AAEnF,mGAA+F;AAC/F,8FAA0F;AAC1F,+FAMuE;AACvE,6GAAoI;AAEvH,QAAA,oBAAoB,GAAqB;IAClD,cAAc,EAAE,GAAG,EAAE,GAAE,CAAC;IACxB,gBAAgB,EAAE,GAAG,EAAE,GAAE,CAAC;IAC1B,kBAAkB,EAAE,GAAG,EAAE,GAAE,CAAC;IAC5B,oBAAoB,EAAE,GAAG,EAAE,GAAE,CAAC;IAC9B,6BAA6B,EAAE,GAAG,EAAE,CAAC,CAAC;IACtC,8BAA8B,EAAE,GAAG,EAAE,CAAC,CAAC;IACvC,4BAA4B,EAAE,GAAG,EAAE,CAAC,CAAC;CACxC,CAAA;AAEM,MAAM,4CAA4C,GAAG,KAAK,EAC7D,mBAAmC,EACnC,oBAAoC,EACpC,YAA0B,EAC1B,SAAoB,EACqC,EAAE;IAC3D,MAAM,MAAM,GAAG,IAAI,wBAAkB,CAAC,mBAAmB,EAAE,SAAS,CAAC,CAAA;IACrE,MAAM,MAAM,CAAC,KAAK,EAAE,CAAA;IACpB,MAAM,kBAAkB,GAAG,IAAI,aAAO,CAAC;QACnC,SAAS,EAAE,MAAM;QACjB,eAAe,EAAE,MAAM;QACvB,cAAc,EAAE,mBAAmB;QACnC,uBAAuB,EAAE,CAAC;QAC1B,WAAW,EAAE,CAAC,oBAAoB,CAAC;QACnC,iBAAiB,EAAE,IAAI;KAC1B,CAAC,CAAA;IACF,MAAM,wBAAwB,GAAG,IAAA,+DAA8B,EAAC;QAC5D,YAAY;QACZ,SAAS,EAAE,MAAM;QACjB,kBAAkB;QAClB,gBAAgB,EAAE,MAAM;QACxB,mBAAmB;QACnB,iBAAiB,EAAE,IAAI;QACvB,qBAAqB,EAAE,GAAG,EAAE,CAAC,KAAK;KACrC,CAAC,CAAA;IACF,OAAO,CAAC,kBAAkB,EAAE,wBAAwB,CAAC,CAAA;AACzD,CAAC,CAAA;AA1BY,QAAA,4CAA4C,gDA0BxD;AAEM,MAAM,mBAAmB,GAAG,CAC/B,OAAe,EACf,YAA0B,EAC1B,WAAmB,EACnB,SAAkB,EAClB,cAAuB,EACV,EAAE;IACf,MAAM,SAAS,GAAc;QACzB,QAAQ,EAAE,yBAAiB,CAAC,WAAW,CAAC,YAAY,CAAC;QACrD,eAAe,EAAE,yBAAiB,CAAC,kBAAkB,CAAC,YAAY,CAAC;QACnE,cAAc,EAAE,cAAc,IAAI,CAAC;QACnC,SAAS,EAAE,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE;QAClC,WAAW,EAAE,IAAA,mBAAW,EAAC,WAAW,CAAC;QACrC,cAAc,EAAE,eAAe;KAClC,CAAA;IACD,MAAM,GAAG,GAAkB;QACvB,SAAS;QACT,aAAa,EAAE,0BAAa,CAAC,SAAS;QACtC,SAAS,EAAE,IAAA,mBAAW,EAAC,QAAQ,CAAC;QAChC,IAAI,EAAE;YACF,SAAS,EAAE,gBAAgB;YAC3B,cAAc,EAAE;gBACZ,cAAc,EAAE,2BAAc,CAAC,IAAI;gBACnC,WAAW,EAAE,wBAAW,CAAC,IAAI;gBAC7B,OAAO,EAAE,IAAA,oBAAY,EAAC,OAAO,CAAC;aACjC;SACJ;KACJ,CAAA;IACD,OAAO,GAAG,CAAA;AACd,CAAC,CAAA;AA7BY,QAAA,mBAAmB,uBA6B/B;AAEM,MAAM,wBAAwB,GAAG,CAAC,IAAuD,EAAkB,EAAE;IAChH,OAAO;QACH,GAAG,IAAI;QACP,MAAM,EAAE,IAAA,qBAAe,EAAC,IAAA,sBAAgB,GAAE,CAAC;QAC3C,IAAI,EAAE,cAAQ,CAAC,MAAM;QACrB,MAAM,EAAE,IAAA,qBAAe,GAAE;KAC5B,CAAA;AACL,CAAC,CAAA;AAPY,QAAA,wBAAwB,4BAOpC;AAEM,MAAM,kCAAkC,GAAG,CAAC,oBAAqC,EAA4B,EAAE;IAClH,OAAO,IAAI,mDAAwB,CAC/B,IAAA,gCAAwB,GAAE,EAC1B,oBAAoB,IAAI,IAAA,gCAAwB,GAAE,EAClD,IAAI,2BAAe,EAAE,EACrB,4CAAwB,CAC3B,CAAA;AACL,CAAC,CAAA;AAPY,QAAA,kCAAkC,sCAO9C;AAEM,MAAM,4BAA4B,GAAG,GAAuB,EAAE;IACjE,OAAO,IAAI,uCAAkB,CACzB,IAAA,gCAAwB,GAAE,EAC1B,IAAA,gCAAwB,GAAE,EAC1B,IAAI,2BAAe,EAAE,EACrB,sCAAkB,CACrB,CAAA;AACL,CAAC,CAAA;AAPY,QAAA,4BAA4B,gCAOxC;AAEM,MAAM,8BAA8B,GAAG,KAAK,EAC/C,cAA8B,EAC9B,SAAoB,EACpB,WAA6B,EACT,EAAE;IACtB,MAAM,SAAS,GAAG,IAAI,wBAAkB,CAAC,cAAc,EAAE,SAAS,CAAC,CAAA;IACnE,MAAM,SAAS,CAAC,KAAK,EAAE,CAAA;IACvB,OAAO,IAAA,+BAAiB,EAAC;QACrB,MAAM,EAAE;YACJ,cAAc;YACd,WAAW;YACX,SAAS;YACT,eAAe,EAAE,SAAS;YAC1B,cAAc,EAAE,EAAE;YAClB,eAAe,EAAE,MAAM;YACvB,WAAW,EAAE,MAAM;SACtB;KACJ,CAAC,CAAA;AACN,CAAC,CAAA;AAlBY,QAAA,8BAA8B,kCAkB1C"}
|
package/jest.config.js
CHANGED
package/karma-setup.js
ADDED
package/karma.config.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@streamr/trackerless-network",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "102.0.0-beta.0",
|
|
4
4
|
"description": "Minimal and extendable implementation of the Streamr Network node.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
"build": "tsc -b tsconfig.node.json",
|
|
16
16
|
"build-browser": "webpack --mode=development --progress",
|
|
17
17
|
"generate-protoc-code": "./proto.sh",
|
|
18
|
-
"check": "tsc -p ./tsconfig.jest.json
|
|
18
|
+
"check": "tsc -p ./tsconfig.jest.json",
|
|
19
19
|
"clean": "jest --clearCache || true; rm -rf dist *.tsbuildinfo node_modules/.cache || true",
|
|
20
20
|
"coverage": "jest --coverage",
|
|
21
21
|
"eslint": "eslint --cache --cache-location=node_modules/.cache/.eslintcache/ '*/**/*.{js,ts}'",
|
|
@@ -30,10 +30,10 @@
|
|
|
30
30
|
"dependencies": {
|
|
31
31
|
"@protobuf-ts/runtime": "^2.8.2",
|
|
32
32
|
"@protobuf-ts/runtime-rpc": "^2.8.2",
|
|
33
|
-
"@streamr/dht": "
|
|
34
|
-
"@streamr/proto-rpc": "
|
|
35
|
-
"@streamr/test-utils": "
|
|
36
|
-
"@streamr/utils": "
|
|
33
|
+
"@streamr/dht": "102.0.0-beta.0",
|
|
34
|
+
"@streamr/proto-rpc": "102.0.0-beta.0",
|
|
35
|
+
"@streamr/test-utils": "102.0.0-beta.0",
|
|
36
|
+
"@streamr/utils": "102.0.0-beta.0",
|
|
37
37
|
"eventemitter3": "^5.0.0",
|
|
38
38
|
"lodash": "^4.17.21",
|
|
39
39
|
"uuid": "^10.0.0",
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
},
|
|
42
42
|
"devDependencies": {
|
|
43
43
|
"@streamr/browser-test-runner": "^0.0.1",
|
|
44
|
-
"@types/lodash": "^4.17.
|
|
44
|
+
"@types/lodash": "^4.17.10",
|
|
45
45
|
"@types/uuid": "^10.0.0",
|
|
46
46
|
"@types/yallist": "^4.0.1",
|
|
47
47
|
"expect": "^29.6.2",
|
package/protos/NetworkRpc.proto
CHANGED
|
@@ -163,7 +163,13 @@ enum ProxyDirection {
|
|
|
163
163
|
message StreamPartitionInfo {
|
|
164
164
|
string id = 1;
|
|
165
165
|
repeated dht.PeerDescriptor controlLayerNeighbors = 2;
|
|
166
|
-
repeated dht.PeerDescriptor
|
|
166
|
+
repeated dht.PeerDescriptor deprecatedContentDeliveryLayerNeighbors = 3;
|
|
167
|
+
repeated ContentDeliveryLayerNeighborInfo contentDeliveryLayerNeighbors = 4;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
message ContentDeliveryLayerNeighborInfo {
|
|
171
|
+
dht.PeerDescriptor peerDescriptor = 1;
|
|
172
|
+
optional int32 rtt = 2;
|
|
167
173
|
}
|
|
168
174
|
|
|
169
175
|
message ControlLayerInfo {
|
package/src/NetworkNode.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { DhtAddress, PeerDescriptor } from '@streamr/dht'
|
|
2
|
-
import { EthereumAddress, MetricsContext, StreamPartID } from '@streamr/utils'
|
|
3
|
-
import { NetworkOptions, NetworkStack, NodeInfo } from './NetworkStack'
|
|
4
|
-
import { ProxyDirection, StreamMessage } from './proto/packages/trackerless-network/protos/NetworkRpc'
|
|
5
|
-
import { ExternalNetworkRpc, ExternalRpcClient, ExternalRpcClientClass } from './logic/ExternalNetworkRpc'
|
|
6
1
|
import { IMessageType } from '@protobuf-ts/runtime'
|
|
7
2
|
import { ServerCallContext } from '@protobuf-ts/runtime-rpc'
|
|
3
|
+
import { DhtAddress, PeerDescriptor } from '@streamr/dht'
|
|
8
4
|
import { ProtoRpcClient } from '@streamr/proto-rpc'
|
|
5
|
+
import { MetricsContext, StreamPartID, UserID } from '@streamr/utils'
|
|
6
|
+
import { ExternalNetworkRpc, ExternalRpcClient, ExternalRpcClientClass } from './logic/ExternalNetworkRpc'
|
|
7
|
+
import { NetworkOptions, NetworkStack, NodeInfo } from './NetworkStack'
|
|
8
|
+
import { ProxyDirection, StreamMessage } from './proto/packages/trackerless-network/protos/NetworkRpc'
|
|
9
9
|
|
|
10
10
|
export const createNetworkNode = (opts: NetworkOptions): NetworkNode => {
|
|
11
11
|
return new NetworkNode(new NetworkStack(opts))
|
|
@@ -46,7 +46,7 @@ export class NetworkNode {
|
|
|
46
46
|
streamPartId: StreamPartID,
|
|
47
47
|
nodes: PeerDescriptor[],
|
|
48
48
|
direction: ProxyDirection,
|
|
49
|
-
userId:
|
|
49
|
+
userId: UserID,
|
|
50
50
|
connectionCount?: number
|
|
51
51
|
): Promise<void> {
|
|
52
52
|
await this.stack.getContentDeliveryManager().setProxies(streamPartId, nodes, direction, userId, connectionCount)
|
|
@@ -113,9 +113,11 @@ export class NetworkNode {
|
|
|
113
113
|
return this.stack.fetchNodeInfo(node)
|
|
114
114
|
}
|
|
115
115
|
|
|
116
|
-
// eslint-disable-next-line class-methods-use-this
|
|
117
116
|
getDiagnosticInfo(): Record<string, unknown> {
|
|
118
|
-
return {
|
|
117
|
+
return {
|
|
118
|
+
controlLayer: this.stack.getControlLayerNode().getDiagnosticInfo(),
|
|
119
|
+
contentLayer: this.stack.getContentDeliveryManager().getDiagnosticInfo()
|
|
120
|
+
}
|
|
119
121
|
}
|
|
120
122
|
|
|
121
123
|
registerExternalNetworkRpcMethod<
|
package/src/NetworkStack.ts
CHANGED
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
ListeningRpcCommunicator,
|
|
6
6
|
PeerDescriptor,
|
|
7
7
|
areEqualPeerDescriptors,
|
|
8
|
-
|
|
8
|
+
toNodeId
|
|
9
9
|
} from '@streamr/dht'
|
|
10
10
|
import { Logger, MetricsContext, StreamID, StreamPartID, toStreamPartID, waitForCondition } from '@streamr/utils'
|
|
11
11
|
import { pull } from 'lodash'
|
|
@@ -66,7 +66,8 @@ export class NetworkStack {
|
|
|
66
66
|
this.metricsContext = options.metricsContext ?? new MetricsContext()
|
|
67
67
|
this.controlLayerNode = new DhtNode({
|
|
68
68
|
...options.layer0,
|
|
69
|
-
metricsContext: this.metricsContext
|
|
69
|
+
metricsContext: this.metricsContext,
|
|
70
|
+
allowIncomingPrivateConnections: options.networkNode?.acceptProxyConnections
|
|
70
71
|
})
|
|
71
72
|
this.contentDeliveryManager = new ContentDeliveryManager({
|
|
72
73
|
...options.networkNode,
|
|
@@ -106,7 +107,7 @@ export class NetworkStack {
|
|
|
106
107
|
async start(doJoin = true): Promise<void> {
|
|
107
108
|
logger.info('Starting a Streamr Network Node')
|
|
108
109
|
await this.controlLayerNode!.start()
|
|
109
|
-
logger.info(`Node id is ${
|
|
110
|
+
logger.info(`Node id is ${toNodeId(this.controlLayerNode!.getLocalPeerDescriptor())}`)
|
|
110
111
|
const connectionManager = this.controlLayerNode!.getTransport() as ConnectionManager
|
|
111
112
|
if ((this.options.layer0?.entryPoints !== undefined) && (this.options.layer0.entryPoints.some((entryPoint) =>
|
|
112
113
|
areEqualPeerDescriptors(entryPoint, this.controlLayerNode!.getLocalPeerDescriptor())
|
|
@@ -4,12 +4,13 @@ import {
|
|
|
4
4
|
ITransport,
|
|
5
5
|
ListeningRpcCommunicator,
|
|
6
6
|
PeerDescriptor,
|
|
7
|
-
|
|
7
|
+
toNodeId,
|
|
8
8
|
} from '@streamr/dht'
|
|
9
9
|
import { Logger, StreamPartID, addManagedEventListener } from '@streamr/utils'
|
|
10
10
|
import { EventEmitter } from 'eventemitter3'
|
|
11
11
|
import {
|
|
12
12
|
CloseTemporaryConnection,
|
|
13
|
+
ContentDeliveryLayerNeighborInfo,
|
|
13
14
|
LeaveStreamPartNotice,
|
|
14
15
|
MessageID,
|
|
15
16
|
MessageRef,
|
|
@@ -75,6 +76,7 @@ export class ContentDeliveryLayerNode extends EventEmitter<Events> {
|
|
|
75
76
|
private options: StrictContentDeliveryLayerNodeOptions
|
|
76
77
|
private readonly contentDeliveryRpcLocal: ContentDeliveryRpcLocal
|
|
77
78
|
private abortController: AbortController = new AbortController()
|
|
79
|
+
private messagesPropagated = 0
|
|
78
80
|
|
|
79
81
|
constructor(options: StrictContentDeliveryLayerNodeOptions) {
|
|
80
82
|
super()
|
|
@@ -164,7 +166,7 @@ export class ContentDeliveryLayerNode extends EventEmitter<Events> {
|
|
|
164
166
|
(id, remote) => {
|
|
165
167
|
this.options.propagation.onNeighborJoined(id)
|
|
166
168
|
this.options.connectionLocker.weakLockConnection(
|
|
167
|
-
|
|
169
|
+
toNodeId(remote.getPeerDescriptor()),
|
|
168
170
|
this.options.streamPartId
|
|
169
171
|
)
|
|
170
172
|
this.emit('neighborConnected', id)
|
|
@@ -176,7 +178,7 @@ export class ContentDeliveryLayerNode extends EventEmitter<Events> {
|
|
|
176
178
|
'nodeRemoved',
|
|
177
179
|
(_id, remote) => {
|
|
178
180
|
this.options.connectionLocker.weakUnlockConnection(
|
|
179
|
-
|
|
181
|
+
toNodeId(remote.getPeerDescriptor()),
|
|
180
182
|
this.options.streamPartId
|
|
181
183
|
)
|
|
182
184
|
},
|
|
@@ -315,7 +317,7 @@ export class ContentDeliveryLayerNode extends EventEmitter<Events> {
|
|
|
315
317
|
}
|
|
316
318
|
|
|
317
319
|
private onNodeDisconnected(peerDescriptor: PeerDescriptor): void {
|
|
318
|
-
const nodeId =
|
|
320
|
+
const nodeId = toNodeId(peerDescriptor)
|
|
319
321
|
if (this.options.neighbors.has(nodeId)) {
|
|
320
322
|
this.options.neighbors.remove(nodeId)
|
|
321
323
|
this.options.neighborFinder.start([nodeId])
|
|
@@ -339,7 +341,7 @@ export class ContentDeliveryLayerNode extends EventEmitter<Events> {
|
|
|
339
341
|
this.options.neighbors.getAll().map((remote) => {
|
|
340
342
|
remote.leaveStreamPartNotice(this.options.streamPartId, this.options.isLocalNodeEntryPoint())
|
|
341
343
|
this.options.connectionLocker.weakUnlockConnection(
|
|
342
|
-
|
|
344
|
+
toNodeId(remote.getPeerDescriptor()),
|
|
343
345
|
this.options.streamPartId
|
|
344
346
|
)
|
|
345
347
|
})
|
|
@@ -360,6 +362,7 @@ export class ContentDeliveryLayerNode extends EventEmitter<Events> {
|
|
|
360
362
|
this.emit('message', msg)
|
|
361
363
|
const skipBackPropagation = previousNode !== undefined && !this.options.temporaryConnectionRpcLocal.hasNode(previousNode)
|
|
362
364
|
this.options.propagation.feedUnseenMessage(msg, this.getPropagationTargets(msg), skipBackPropagation ? previousNode : null)
|
|
365
|
+
this.messagesPropagated += 1
|
|
363
366
|
}
|
|
364
367
|
|
|
365
368
|
inspect(peerDescriptor: PeerDescriptor): Promise<boolean> {
|
|
@@ -376,7 +379,7 @@ export class ContentDeliveryLayerNode extends EventEmitter<Events> {
|
|
|
376
379
|
}
|
|
377
380
|
|
|
378
381
|
getOwnNodeId(): DhtAddress {
|
|
379
|
-
return
|
|
382
|
+
return toNodeId(this.options.localPeerDescriptor)
|
|
380
383
|
}
|
|
381
384
|
|
|
382
385
|
getOutgoingHandshakeCount(): number {
|
|
@@ -390,11 +393,32 @@ export class ContentDeliveryLayerNode extends EventEmitter<Events> {
|
|
|
390
393
|
return this.options.neighbors.getAll().map((n) => n.getPeerDescriptor())
|
|
391
394
|
}
|
|
392
395
|
|
|
396
|
+
getInfos(): ContentDeliveryLayerNeighborInfo[] {
|
|
397
|
+
return this.options.neighbors.getAll().map((n) => {
|
|
398
|
+
return {
|
|
399
|
+
peerDescriptor: n.getPeerDescriptor(),
|
|
400
|
+
rtt: n.getRtt()
|
|
401
|
+
}
|
|
402
|
+
})
|
|
403
|
+
}
|
|
404
|
+
|
|
393
405
|
getNearbyNodeView(): NodeList {
|
|
394
406
|
return this.options.nearbyNodeView
|
|
395
407
|
}
|
|
396
408
|
|
|
409
|
+
public getDiagnosticInfo(): Record<string, unknown> {
|
|
410
|
+
return {
|
|
411
|
+
neighborCount: this.options.neighbors.size(),
|
|
412
|
+
nearbyNodeViewCount: this.options.nearbyNodeView.size(),
|
|
413
|
+
randomNodeViewCount: this.options.randomNodeView.size(),
|
|
414
|
+
leftNodeViewCount: this.options.leftNodeView.size(),
|
|
415
|
+
rightNodeViewCount: this.options.rightNodeView.size(),
|
|
416
|
+
messagesPropagated: this.messagesPropagated
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
|
|
397
420
|
private isStopped() {
|
|
398
421
|
return this.abortController.signal.aborted
|
|
399
422
|
}
|
|
423
|
+
|
|
400
424
|
}
|
|
@@ -5,16 +5,17 @@ import {
|
|
|
5
5
|
EXISTING_CONNECTION_TIMEOUT,
|
|
6
6
|
ITransport,
|
|
7
7
|
PeerDescriptor,
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
toDhtAddress,
|
|
9
|
+
toNodeId
|
|
10
10
|
} from '@streamr/dht'
|
|
11
11
|
import {
|
|
12
|
-
EthereumAddress,
|
|
13
12
|
Logger,
|
|
14
13
|
Metric,
|
|
15
14
|
MetricsContext,
|
|
16
15
|
MetricsDefinition,
|
|
17
|
-
RateMetric, StreamID, StreamPartID, StreamPartIDUtils,
|
|
16
|
+
RateMetric, StreamID, StreamPartID, StreamPartIDUtils,
|
|
17
|
+
UserID,
|
|
18
|
+
toStreamPartID
|
|
18
19
|
} from '@streamr/utils'
|
|
19
20
|
import { createHash } from 'crypto'
|
|
20
21
|
import { EventEmitter } from 'eventemitter3'
|
|
@@ -28,6 +29,7 @@ import { MIN_NEIGHBOR_COUNT as NETWORK_SPLIT_AVOIDANCE_MIN_NEIGHBOR_COUNT, Strea
|
|
|
28
29
|
import { StreamPartReconnect } from './StreamPartReconnect'
|
|
29
30
|
import { createContentDeliveryLayerNode } from './createContentDeliveryLayerNode'
|
|
30
31
|
import { ProxyClient } from './proxy/ProxyClient'
|
|
32
|
+
import { ConnectionManager } from '@streamr/dht/src/exports'
|
|
31
33
|
|
|
32
34
|
export type StreamPartDelivery = {
|
|
33
35
|
broadcast: (msg: StreamMessage) => void
|
|
@@ -37,9 +39,11 @@ export type StreamPartDelivery = {
|
|
|
37
39
|
discoveryLayerNode: DiscoveryLayerNode
|
|
38
40
|
node: ContentDeliveryLayerNode
|
|
39
41
|
networkSplitAvoidance: StreamPartNetworkSplitAvoidance
|
|
42
|
+
getDiagnosticInfo: () => Record<string, unknown>
|
|
40
43
|
} | {
|
|
41
44
|
proxied: true
|
|
42
45
|
client: ProxyClient
|
|
46
|
+
getDiagnosticInfo: () => Record<string, unknown>
|
|
43
47
|
})
|
|
44
48
|
|
|
45
49
|
export interface Events {
|
|
@@ -59,10 +63,11 @@ export interface ContentDeliveryManagerOptions {
|
|
|
59
63
|
streamPartitionMinPropagationTargets?: number
|
|
60
64
|
acceptProxyConnections?: boolean
|
|
61
65
|
rpcRequestTimeout?: number
|
|
66
|
+
neighborUpdateInterval?: number
|
|
62
67
|
}
|
|
63
68
|
|
|
64
69
|
export const streamPartIdToDataKey = (streamPartId: StreamPartID): DhtAddress => {
|
|
65
|
-
return
|
|
70
|
+
return toDhtAddress(new Uint8Array((createHash('sha1').update(streamPartId).digest())))
|
|
66
71
|
}
|
|
67
72
|
|
|
68
73
|
export class ContentDeliveryManager extends EventEmitter<Events> {
|
|
@@ -169,7 +174,8 @@ export class ContentDeliveryManager extends EventEmitter<Events> {
|
|
|
169
174
|
await peerDescriptorStoreManager.destroy()
|
|
170
175
|
node.stop()
|
|
171
176
|
await discoveryLayerNode.stop()
|
|
172
|
-
}
|
|
177
|
+
},
|
|
178
|
+
getDiagnosticInfo: () => node.getDiagnosticInfo()
|
|
173
179
|
}
|
|
174
180
|
this.streamParts.set(streamPartId, streamPart)
|
|
175
181
|
node.on('message', (message: StreamMessage) => {
|
|
@@ -207,6 +213,9 @@ export class ContentDeliveryManager extends EventEmitter<Events> {
|
|
|
207
213
|
// leaveStreamPart has been called (or leaveStreamPart called, and then setProxies called)
|
|
208
214
|
return
|
|
209
215
|
}
|
|
216
|
+
if ((this.transport! as ConnectionManager).isPrivateClientMode()) {
|
|
217
|
+
await (this.transport! as ConnectionManager).disablePrivateClientMode()
|
|
218
|
+
}
|
|
210
219
|
await streamPart.discoveryLayerNode.start()
|
|
211
220
|
await streamPart.node.start()
|
|
212
221
|
const knownEntryPoints = this.knownStreamPartEntryPoints.get(streamPartId)
|
|
@@ -260,6 +269,7 @@ export class ContentDeliveryManager extends EventEmitter<Events> {
|
|
|
260
269
|
neighborTargetCount: this.options.streamPartitionNeighborTargetCount,
|
|
261
270
|
acceptProxyConnections: this.options.acceptProxyConnections,
|
|
262
271
|
rpcRequestTimeout: this.options.rpcRequestTimeout,
|
|
272
|
+
neighborUpdateInterval: this.options.neighborUpdateInterval,
|
|
263
273
|
isLocalNodeEntryPoint
|
|
264
274
|
})
|
|
265
275
|
}
|
|
@@ -268,7 +278,7 @@ export class ContentDeliveryManager extends EventEmitter<Events> {
|
|
|
268
278
|
streamPartId: StreamPartID,
|
|
269
279
|
nodes: PeerDescriptor[],
|
|
270
280
|
direction: ProxyDirection,
|
|
271
|
-
userId:
|
|
281
|
+
userId: UserID,
|
|
272
282
|
connectionCount?: number
|
|
273
283
|
): Promise<void> {
|
|
274
284
|
// TODO explicit default value for "acceptProxyConnections" or make it required
|
|
@@ -287,11 +297,15 @@ export class ContentDeliveryManager extends EventEmitter<Events> {
|
|
|
287
297
|
proxied: true,
|
|
288
298
|
client,
|
|
289
299
|
broadcast: (msg: StreamMessage) => client.broadcast(msg),
|
|
290
|
-
stop: async () => client.stop()
|
|
300
|
+
stop: async () => client.stop(),
|
|
301
|
+
getDiagnosticInfo: () => client.getDiagnosticInfo()
|
|
291
302
|
})
|
|
292
303
|
client.on('message', (message: StreamMessage) => {
|
|
293
304
|
this.emit('newMessage', message)
|
|
294
305
|
})
|
|
306
|
+
if (Array.from(this.streamParts.values()).every((streamPart) => streamPart.proxied)) {
|
|
307
|
+
await (this.transport! as ConnectionManager).enablePrivateClientMode()
|
|
308
|
+
}
|
|
295
309
|
await client.start()
|
|
296
310
|
}
|
|
297
311
|
await client.setProxies(nodes, direction, userId, connectionCount)
|
|
@@ -327,7 +341,8 @@ export class ContentDeliveryManager extends EventEmitter<Events> {
|
|
|
327
341
|
return {
|
|
328
342
|
id: streamPartId,
|
|
329
343
|
controlLayerNeighbors: stream.discoveryLayerNode.getNeighbors(),
|
|
330
|
-
|
|
344
|
+
deprecatedContentDeliveryLayerNeighbors: [],
|
|
345
|
+
contentDeliveryLayerNeighbors: stream.node.getInfos()
|
|
331
346
|
}
|
|
332
347
|
})
|
|
333
348
|
|
|
@@ -357,17 +372,28 @@ export class ContentDeliveryManager extends EventEmitter<Events> {
|
|
|
357
372
|
}
|
|
358
373
|
|
|
359
374
|
getNodeId(): DhtAddress {
|
|
360
|
-
return
|
|
375
|
+
return toNodeId(this.controlLayerNode!.getLocalPeerDescriptor())
|
|
361
376
|
}
|
|
362
377
|
|
|
363
378
|
getNeighbors(streamPartId: StreamPartID): DhtAddress[] {
|
|
364
379
|
const streamPart = this.streamParts.get(streamPartId)
|
|
365
380
|
return (streamPart !== undefined) && (streamPart.proxied === false)
|
|
366
|
-
? streamPart.node.getNeighbors().map((n) =>
|
|
381
|
+
? streamPart.node.getNeighbors().map((n) => toNodeId(n))
|
|
367
382
|
: []
|
|
368
383
|
}
|
|
369
384
|
|
|
370
385
|
getStreamParts(): StreamPartID[] {
|
|
371
386
|
return Array.from(this.streamParts.keys()).map((id) => StreamPartIDUtils.parse(id))
|
|
372
387
|
}
|
|
388
|
+
|
|
389
|
+
getDiagnosticInfo(): Record<string, unknown> {
|
|
390
|
+
return {
|
|
391
|
+
streamParts: this.getStreamParts().map((id) => {
|
|
392
|
+
return {
|
|
393
|
+
id,
|
|
394
|
+
info: this.getStreamPartDelivery(id)!.getDiagnosticInfo()
|
|
395
|
+
}
|
|
396
|
+
})
|
|
397
|
+
}
|
|
398
|
+
}
|
|
373
399
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ServerCallContext } from '@protobuf-ts/runtime-rpc'
|
|
2
|
-
import { DhtAddress, DhtCallContext, ListeningRpcCommunicator, PeerDescriptor,
|
|
2
|
+
import { DhtAddress, DhtCallContext, ListeningRpcCommunicator, PeerDescriptor, toNodeId } from '@streamr/dht'
|
|
3
3
|
import { StreamPartID } from '@streamr/utils'
|
|
4
4
|
import { Empty } from '../proto/google/protobuf/empty'
|
|
5
5
|
import {
|
|
@@ -29,7 +29,7 @@ export class ContentDeliveryRpcLocal implements IContentDeliveryRpc {
|
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
async sendStreamMessage(message: StreamMessage, context: ServerCallContext): Promise<Empty> {
|
|
32
|
-
const previousNode =
|
|
32
|
+
const previousNode = toNodeId((context as DhtCallContext).incomingSourceDescriptor!)
|
|
33
33
|
this.options.markForInspection(previousNode, message.messageId!)
|
|
34
34
|
if (this.options.markAndCheckDuplicate(message.messageId!, message.previousMessageRef)) {
|
|
35
35
|
this.options.broadcast(message, previousNode)
|
|
@@ -40,7 +40,7 @@ export class ContentDeliveryRpcLocal implements IContentDeliveryRpc {
|
|
|
40
40
|
async leaveStreamPartNotice(message: LeaveStreamPartNotice, context: ServerCallContext): Promise<Empty> {
|
|
41
41
|
if (message.streamPartId === this.options.streamPartId) {
|
|
42
42
|
const sourcePeerDescriptor = (context as DhtCallContext).incomingSourceDescriptor!
|
|
43
|
-
const remoteNodeId =
|
|
43
|
+
const remoteNodeId = toNodeId(sourcePeerDescriptor)
|
|
44
44
|
this.options.onLeaveNotice(remoteNodeId, message.isEntryPoint)
|
|
45
45
|
}
|
|
46
46
|
return Empty
|
|
@@ -10,6 +10,8 @@ const logger = new Logger(module)
|
|
|
10
10
|
|
|
11
11
|
export class ContentDeliveryRpcRemote extends RpcRemote<ContentDeliveryRpcClient> {
|
|
12
12
|
|
|
13
|
+
private rtt?: number
|
|
14
|
+
|
|
13
15
|
async sendStreamMessage(msg: StreamMessage): Promise<void> {
|
|
14
16
|
const options = this.formDhtRpcOptions({
|
|
15
17
|
notification: true
|
|
@@ -31,4 +33,12 @@ export class ContentDeliveryRpcRemote extends RpcRemote<ContentDeliveryRpcClient
|
|
|
31
33
|
logger.debug('Failed to send leaveStreamPartNotice')
|
|
32
34
|
})
|
|
33
35
|
}
|
|
36
|
+
|
|
37
|
+
setRtt(rtt: number): void {
|
|
38
|
+
this.rtt = rtt
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
getRtt(): number | undefined {
|
|
42
|
+
return this.rtt
|
|
43
|
+
}
|
|
34
44
|
}
|
|
@@ -54,7 +54,7 @@ export class InvalidNumberingError extends Error {
|
|
|
54
54
|
export class GapMisMatchError extends Error {
|
|
55
55
|
constructor(state: string, previousNumber: NumberPair, number: NumberPair) {
|
|
56
56
|
super('pre-condition: gap overlap in given numbers:'
|
|
57
|
-
+ ` previousNumber=${previousNumber}, number=${number}, state=${state}`)
|
|
57
|
+
+ ` previousNumber=${previousNumber.toString()}, number=${number.toString()}, state=${state}`)
|
|
58
58
|
}
|
|
59
59
|
}
|
|
60
60
|
|
|
@@ -162,6 +162,6 @@ export class DuplicateMessageDetector {
|
|
|
162
162
|
}
|
|
163
163
|
|
|
164
164
|
toString(): string {
|
|
165
|
-
return this.gaps.map(([lower, upper]) => `(${lower}, ${upper}]`).join(', ')
|
|
165
|
+
return this.gaps.map(([lower, upper]) => `(${lower.toString()}, ${upper.toString()}]`).join(', ')
|
|
166
166
|
}
|
|
167
167
|
}
|
|
@@ -5,7 +5,6 @@ import { ClassType, ClientTransport, ProtoRpcClient, toProtoRpcClient } from '@s
|
|
|
5
5
|
|
|
6
6
|
export const SERVICE_ID = 'external-network-service'
|
|
7
7
|
|
|
8
|
-
// eslint-disable-next-line @typescript-eslint/consistent-type-definitions
|
|
9
8
|
export type ExternalRpcClient = ServiceInfo & ClassType
|
|
10
9
|
// eslint-disable-next-line @typescript-eslint/prefer-function-type, @typescript-eslint/consistent-type-definitions
|
|
11
10
|
export type ExternalRpcClientClass<T extends ExternalRpcClient> = { new (clientTransport: ClientTransport): T }
|
package/src/logic/NodeList.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { DhtAddress,
|
|
1
|
+
import { DhtAddress, toNodeId } from '@streamr/dht'
|
|
2
2
|
import { sample } from 'lodash'
|
|
3
3
|
import { ContentDeliveryRpcRemote } from './ContentDeliveryRpcRemote'
|
|
4
4
|
import { EventEmitter } from 'eventemitter3'
|
|
@@ -36,7 +36,7 @@ export class NodeList extends EventEmitter<Events> {
|
|
|
36
36
|
}
|
|
37
37
|
|
|
38
38
|
add(remote: ContentDeliveryRpcRemote): void {
|
|
39
|
-
const nodeId =
|
|
39
|
+
const nodeId = toNodeId(remote.getPeerDescriptor())
|
|
40
40
|
if ((this.ownId !== nodeId) && (this.nodes.size < this.limit)) {
|
|
41
41
|
const isExistingNode = this.nodes.has(nodeId)
|
|
42
42
|
this.nodes.set(nodeId, remote)
|
|
@@ -107,7 +107,8 @@ export class NodeList extends EventEmitter<Events> {
|
|
|
107
107
|
}
|
|
108
108
|
|
|
109
109
|
stop(): void {
|
|
110
|
-
this.nodes.forEach((node) => this.remove(
|
|
110
|
+
this.nodes.forEach((node) => this.remove(toNodeId(node.getPeerDescriptor())))
|
|
111
111
|
this.removeAllListeners()
|
|
112
112
|
}
|
|
113
|
+
|
|
113
114
|
}
|
|
@@ -32,7 +32,6 @@ export class PeerDescriptorStoreManager {
|
|
|
32
32
|
|
|
33
33
|
private readonly abortController: AbortController
|
|
34
34
|
private readonly options: PeerDescriptorStoreManagerOptions
|
|
35
|
-
// eslint-disable-next-line no-underscore-dangle
|
|
36
35
|
private isLocalNodeStored_ = false
|
|
37
36
|
|
|
38
37
|
constructor(options: PeerDescriptorStoreManagerOptions) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { areEqualPeerDescriptors, DhtAddress,
|
|
1
|
+
import { areEqualPeerDescriptors, DhtAddress, toNodeId, PeerDescriptor } from '@streamr/dht'
|
|
2
2
|
import { Logger, wait } from '@streamr/utils'
|
|
3
3
|
import { DiscoveryLayerNode } from './DiscoveryLayerNode'
|
|
4
4
|
|
|
@@ -28,11 +28,12 @@ const exponentialRunOff = async (
|
|
|
28
28
|
try {
|
|
29
29
|
await task()
|
|
30
30
|
} catch {
|
|
31
|
-
logger.
|
|
31
|
+
logger.trace(`${description} failed, retrying in ${delay} ms`)
|
|
32
32
|
}
|
|
33
33
|
try { // Abort controller throws unexpected errors in destroy?
|
|
34
34
|
await wait(delay, abortSignal)
|
|
35
35
|
} catch (err) {
|
|
36
|
+
// eslint-disable-next-line @typescript-eslint/restrict-template-expressions
|
|
36
37
|
logger.trace(`${err}`) // TODO Do we need logging?
|
|
37
38
|
}
|
|
38
39
|
}
|
|
@@ -62,14 +63,14 @@ export class StreamPartNetworkSplitAvoidance {
|
|
|
62
63
|
this.running = true
|
|
63
64
|
await exponentialRunOff(async () => {
|
|
64
65
|
const discoveredEntrypoints = await this.options.discoverEntryPoints()
|
|
65
|
-
const filteredEntryPoints = discoveredEntrypoints.filter((peer) => !this.excludedNodes.has(
|
|
66
|
+
const filteredEntryPoints = discoveredEntrypoints.filter((peer) => !this.excludedNodes.has(toNodeId(peer)))
|
|
66
67
|
await this.options.discoveryLayerNode.joinDht(filteredEntryPoints, false, false)
|
|
67
68
|
if (this.options.discoveryLayerNode.getNeighborCount() < MIN_NEIGHBOR_COUNT) {
|
|
68
69
|
// Filter out nodes that are not neighbors as those nodes are assumed to be offline
|
|
69
70
|
const newExcludes = filteredEntryPoints
|
|
70
71
|
.filter((peer) => !this.options.discoveryLayerNode.getNeighbors()
|
|
71
72
|
.some((neighbor) => areEqualPeerDescriptors(neighbor, peer)))
|
|
72
|
-
.map((peer) =>
|
|
73
|
+
.map((peer) => toNodeId(peer))
|
|
73
74
|
newExcludes.forEach((node) => this.excludedNodes.add(node))
|
|
74
75
|
throw new Error(`Network split is still possible`)
|
|
75
76
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { DhtAddress, ListeningRpcCommunicator,
|
|
1
|
+
import { DhtAddress, ListeningRpcCommunicator, toNodeId } from '@streamr/dht'
|
|
2
2
|
import { Handshaker } from './neighbor-discovery/Handshaker'
|
|
3
3
|
import { NeighborFinder } from './neighbor-discovery/NeighborFinder'
|
|
4
4
|
import { NeighborUpdateManager } from './neighbor-discovery/NeighborUpdateManager'
|
|
@@ -24,7 +24,7 @@ type ContentDeliveryLayerNodeOptions = MarkOptional<StrictContentDeliveryLayerNo
|
|
|
24
24
|
}
|
|
25
25
|
|
|
26
26
|
const createConfigWithDefaults = (options: ContentDeliveryLayerNodeOptions): StrictContentDeliveryLayerNodeOptions => {
|
|
27
|
-
const ownNodeId =
|
|
27
|
+
const ownNodeId = toNodeId(options.localPeerDescriptor)
|
|
28
28
|
const rpcCommunicator = options.rpcCommunicator ?? new ListeningRpcCommunicator(
|
|
29
29
|
formStreamPartContentDeliveryServiceId(options.streamPartId),
|
|
30
30
|
options.transport
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ConnectionLocker, DhtAddress, ListeningRpcCommunicator, LockID, PeerDescriptor,
|
|
1
|
+
import { ConnectionLocker, DhtAddress, ListeningRpcCommunicator, LockID, PeerDescriptor, toNodeId } from '@streamr/dht'
|
|
2
2
|
import { Logger, StreamPartID, waitForEvent3 } from '@streamr/utils'
|
|
3
3
|
import { MessageID } from '../../proto/packages/trackerless-network/protos/NetworkRpc'
|
|
4
4
|
import { TemporaryConnectionRpcClient } from '../../proto/packages/trackerless-network/protos/NetworkRpc.client'
|
|
@@ -47,7 +47,7 @@ export class Inspector {
|
|
|
47
47
|
TemporaryConnectionRpcClient
|
|
48
48
|
)
|
|
49
49
|
await rpcRemote.openConnection()
|
|
50
|
-
this.connectionLocker.weakLockConnection(
|
|
50
|
+
this.connectionLocker.weakLockConnection(toNodeId(peerDescriptor), lockId)
|
|
51
51
|
}
|
|
52
52
|
|
|
53
53
|
async defaultCloseInspectConnection(peerDescriptor: PeerDescriptor, lockId: LockID): Promise<void> {
|
|
@@ -58,11 +58,11 @@ export class Inspector {
|
|
|
58
58
|
TemporaryConnectionRpcClient
|
|
59
59
|
)
|
|
60
60
|
await rpcRemote.closeConnection()
|
|
61
|
-
this.connectionLocker.weakUnlockConnection(
|
|
61
|
+
this.connectionLocker.weakUnlockConnection(toNodeId(peerDescriptor), lockId)
|
|
62
62
|
}
|
|
63
63
|
|
|
64
64
|
async inspect(peerDescriptor: PeerDescriptor): Promise<boolean> {
|
|
65
|
-
const nodeId =
|
|
65
|
+
const nodeId = toNodeId(peerDescriptor)
|
|
66
66
|
const session = new InspectSession({
|
|
67
67
|
inspectedNode: nodeId
|
|
68
68
|
})
|