@streamr/trackerless-network 103.1.2 → 103.2.0-experiment.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/exports.cjs +4489 -0
- package/dist/exports.cjs.map +1 -0
- package/dist/exports.d.ts +1391 -0
- package/dist/exports.js +4477 -0
- package/dist/exports.js.map +1 -0
- package/package.json +25 -18
- package/dist/generated/google/protobuf/any.d.ts +0 -180
- package/dist/generated/google/protobuf/any.js +0 -155
- package/dist/generated/google/protobuf/any.js.map +0 -1
- package/dist/generated/google/protobuf/empty.d.ts +0 -31
- package/dist/generated/google/protobuf/empty.js +0 -45
- package/dist/generated/google/protobuf/empty.js.map +0 -1
- package/dist/generated/google/protobuf/timestamp.d.ts +0 -156
- package/dist/generated/google/protobuf/timestamp.js +0 -136
- package/dist/generated/google/protobuf/timestamp.js.map +0 -1
- package/dist/generated/packages/dht/protos/DhtRpc.client.d.ts +0 -371
- package/dist/generated/packages/dht/protos/DhtRpc.client.js +0 -292
- package/dist/generated/packages/dht/protos/DhtRpc.client.js.map +0 -1
- package/dist/generated/packages/dht/protos/DhtRpc.d.ts +0 -1031
- package/dist/generated/packages/dht/protos/DhtRpc.js +0 -702
- package/dist/generated/packages/dht/protos/DhtRpc.js.map +0 -1
- package/dist/generated/packages/dht/protos/DhtRpc.server.d.ts +0 -168
- package/dist/generated/packages/dht/protos/DhtRpc.server.js +0 -3
- package/dist/generated/packages/dht/protos/DhtRpc.server.js.map +0 -1
- package/dist/generated/packages/proto-rpc/protos/ProtoRpc.d.ts +0 -87
- package/dist/generated/packages/proto-rpc/protos/ProtoRpc.js +0 -66
- package/dist/generated/packages/proto-rpc/protos/ProtoRpc.js.map +0 -1
- package/dist/generated/packages/trackerless-network/protos/NetworkRpc.client.d.ts +0 -237
- package/dist/generated/packages/trackerless-network/protos/NetworkRpc.client.js +0 -190
- package/dist/generated/packages/trackerless-network/protos/NetworkRpc.client.js.map +0 -1
- package/dist/generated/packages/trackerless-network/protos/NetworkRpc.d.ts +0 -687
- package/dist/generated/packages/trackerless-network/protos/NetworkRpc.js +0 -479
- package/dist/generated/packages/trackerless-network/protos/NetworkRpc.js.map +0 -1
- package/dist/generated/packages/trackerless-network/protos/NetworkRpc.server.d.ts +0 -102
- package/dist/generated/packages/trackerless-network/protos/NetworkRpc.server.js +0 -3
- package/dist/generated/packages/trackerless-network/protos/NetworkRpc.server.js.map +0 -1
- package/dist/package.json +0 -56
- package/dist/src/ContentDeliveryManager.d.ts +0 -82
- package/dist/src/ContentDeliveryManager.js +0 -325
- package/dist/src/ContentDeliveryManager.js.map +0 -1
- package/dist/src/NetworkNode.d.ts +0 -44
- package/dist/src/NetworkNode.js +0 -98
- package/dist/src/NetworkNode.js.map +0 -1
- package/dist/src/NetworkStack.d.ts +0 -36
- package/dist/src/NetworkStack.js +0 -165
- package/dist/src/NetworkStack.js.map +0 -1
- package/dist/src/NodeInfoClient.d.ts +0 -9
- package/dist/src/NodeInfoClient.js +0 -21
- package/dist/src/NodeInfoClient.js.map +0 -1
- package/dist/src/NodeInfoRpcLocal.d.ts +0 -12
- package/dist/src/NodeInfoRpcLocal.js +0 -22
- package/dist/src/NodeInfoRpcLocal.js.map +0 -1
- package/dist/src/NodeInfoRpcRemote.d.ts +0 -6
- package/dist/src/NodeInfoRpcRemote.js +0 -11
- package/dist/src/NodeInfoRpcRemote.js.map +0 -1
- package/dist/src/StreamPartNetworkSplitAvoidance.d.ts +0 -18
- package/dist/src/StreamPartNetworkSplitAvoidance.js +0 -74
- package/dist/src/StreamPartNetworkSplitAvoidance.js.map +0 -1
- package/dist/src/StreamPartReconnect.d.ts +0 -11
- package/dist/src/StreamPartReconnect.js +0 -37
- package/dist/src/StreamPartReconnect.js.map +0 -1
- package/dist/src/content-delivery-layer/ContentDeliveryLayerNode.d.ts +0 -78
- package/dist/src/content-delivery-layer/ContentDeliveryLayerNode.js +0 -240
- package/dist/src/content-delivery-layer/ContentDeliveryLayerNode.js.map +0 -1
- package/dist/src/content-delivery-layer/ContentDeliveryRpcLocal.d.ts +0 -23
- package/dist/src/content-delivery-layer/ContentDeliveryRpcLocal.js +0 -40
- package/dist/src/content-delivery-layer/ContentDeliveryRpcLocal.js.map +0 -1
- package/dist/src/content-delivery-layer/ContentDeliveryRpcRemote.d.ts +0 -11
- package/dist/src/content-delivery-layer/ContentDeliveryRpcRemote.js +0 -38
- package/dist/src/content-delivery-layer/ContentDeliveryRpcRemote.js.map +0 -1
- package/dist/src/content-delivery-layer/DuplicateMessageDetector.d.ts +0 -55
- package/dist/src/content-delivery-layer/DuplicateMessageDetector.js +0 -159
- package/dist/src/content-delivery-layer/DuplicateMessageDetector.js.map +0 -1
- package/dist/src/content-delivery-layer/NodeList.d.ts +0 -26
- package/dist/src/content-delivery-layer/NodeList.js +0 -93
- package/dist/src/content-delivery-layer/NodeList.js.map +0 -1
- package/dist/src/content-delivery-layer/createContentDeliveryLayerNode.d.ts +0 -14
- package/dist/src/content-delivery-layer/createContentDeliveryLayerNode.js +0 -129
- package/dist/src/content-delivery-layer/createContentDeliveryLayerNode.js.map +0 -1
- package/dist/src/content-delivery-layer/formStreamPartDeliveryServiceId.d.ts +0 -3
- package/dist/src/content-delivery-layer/formStreamPartDeliveryServiceId.js +0 -9
- package/dist/src/content-delivery-layer/formStreamPartDeliveryServiceId.js.map +0 -1
- package/dist/src/content-delivery-layer/inspection/InspectSession.d.ts +0 -19
- package/dist/src/content-delivery-layer/inspection/InspectSession.js +0 -43
- package/dist/src/content-delivery-layer/inspection/InspectSession.js.map +0 -1
- package/dist/src/content-delivery-layer/inspection/Inspector.d.ts +0 -30
- package/dist/src/content-delivery-layer/inspection/Inspector.js +0 -75
- package/dist/src/content-delivery-layer/inspection/Inspector.js.map +0 -1
- package/dist/src/content-delivery-layer/neighbor-discovery/HandshakeRpcLocal.d.ts +0 -29
- package/dist/src/content-delivery-layer/neighbor-discovery/HandshakeRpcLocal.js +0 -106
- package/dist/src/content-delivery-layer/neighbor-discovery/HandshakeRpcLocal.js.map +0 -1
- package/dist/src/content-delivery-layer/neighbor-discovery/HandshakeRpcRemote.d.ts +0 -14
- package/dist/src/content-delivery-layer/neighbor-discovery/HandshakeRpcRemote.js +0 -55
- package/dist/src/content-delivery-layer/neighbor-discovery/HandshakeRpcRemote.js.map +0 -1
- package/dist/src/content-delivery-layer/neighbor-discovery/Handshaker.d.ts +0 -32
- package/dist/src/content-delivery-layer/neighbor-discovery/Handshaker.js +0 -149
- package/dist/src/content-delivery-layer/neighbor-discovery/Handshaker.js.map +0 -1
- package/dist/src/content-delivery-layer/neighbor-discovery/NeighborFinder.d.ts +0 -22
- package/dist/src/content-delivery-layer/neighbor-discovery/NeighborFinder.js +0 -64
- package/dist/src/content-delivery-layer/neighbor-discovery/NeighborFinder.js.map +0 -1
- package/dist/src/content-delivery-layer/neighbor-discovery/NeighborUpdateManager.d.ts +0 -27
- package/dist/src/content-delivery-layer/neighbor-discovery/NeighborUpdateManager.js +0 -47
- package/dist/src/content-delivery-layer/neighbor-discovery/NeighborUpdateManager.js.map +0 -1
- package/dist/src/content-delivery-layer/neighbor-discovery/NeighborUpdateRpcLocal.d.ts +0 -25
- package/dist/src/content-delivery-layer/neighbor-discovery/NeighborUpdateRpcLocal.js +0 -52
- package/dist/src/content-delivery-layer/neighbor-discovery/NeighborUpdateRpcLocal.js.map +0 -1
- package/dist/src/content-delivery-layer/neighbor-discovery/NeighborUpdateRpcRemote.d.ts +0 -11
- package/dist/src/content-delivery-layer/neighbor-discovery/NeighborUpdateRpcRemote.js +0 -31
- package/dist/src/content-delivery-layer/neighbor-discovery/NeighborUpdateRpcRemote.js.map +0 -1
- package/dist/src/content-delivery-layer/plumtree/PausedNeighbors.d.ts +0 -12
- package/dist/src/content-delivery-layer/plumtree/PausedNeighbors.js +0 -50
- package/dist/src/content-delivery-layer/plumtree/PausedNeighbors.js.map +0 -1
- package/dist/src/content-delivery-layer/plumtree/PlumtreeManager.d.ts +0 -37
- package/dist/src/content-delivery-layer/plumtree/PlumtreeManager.js +0 -141
- package/dist/src/content-delivery-layer/plumtree/PlumtreeManager.js.map +0 -1
- package/dist/src/content-delivery-layer/plumtree/PlumtreeRpcLocal.d.ts +0 -20
- package/dist/src/content-delivery-layer/plumtree/PlumtreeRpcLocal.js +0 -37
- package/dist/src/content-delivery-layer/plumtree/PlumtreeRpcLocal.js.map +0 -1
- package/dist/src/content-delivery-layer/plumtree/PlumtreeRpcRemote.d.ts +0 -8
- package/dist/src/content-delivery-layer/plumtree/PlumtreeRpcRemote.js +0 -26
- package/dist/src/content-delivery-layer/plumtree/PlumtreeRpcRemote.js.map +0 -1
- package/dist/src/content-delivery-layer/propagation/FifoMapWithTTL.d.ts +0 -29
- package/dist/src/content-delivery-layer/propagation/FifoMapWithTTL.js +0 -93
- package/dist/src/content-delivery-layer/propagation/FifoMapWithTTL.js.map +0 -1
- package/dist/src/content-delivery-layer/propagation/Propagation.d.ts +0 -35
- package/dist/src/content-delivery-layer/propagation/Propagation.js +0 -68
- package/dist/src/content-delivery-layer/propagation/Propagation.js.map +0 -1
- package/dist/src/content-delivery-layer/propagation/PropagationTaskStore.d.ts +0 -22
- package/dist/src/content-delivery-layer/propagation/PropagationTaskStore.js +0 -33
- package/dist/src/content-delivery-layer/propagation/PropagationTaskStore.js.map +0 -1
- package/dist/src/content-delivery-layer/proxy/ProxyClient.d.ts +0 -46
- package/dist/src/content-delivery-layer/proxy/ProxyClient.js +0 -214
- package/dist/src/content-delivery-layer/proxy/ProxyClient.js.map +0 -1
- package/dist/src/content-delivery-layer/proxy/ProxyConnectionRpcLocal.d.ts +0 -34
- package/dist/src/content-delivery-layer/proxy/ProxyConnectionRpcLocal.js +0 -72
- package/dist/src/content-delivery-layer/proxy/ProxyConnectionRpcLocal.js.map +0 -1
- package/dist/src/content-delivery-layer/proxy/ProxyConnectionRpcRemote.d.ts +0 -7
- package/dist/src/content-delivery-layer/proxy/ProxyConnectionRpcRemote.js +0 -27
- package/dist/src/content-delivery-layer/proxy/ProxyConnectionRpcRemote.js.map +0 -1
- package/dist/src/content-delivery-layer/temporary-connection/TemporaryConnectionRpcLocal.d.ts +0 -26
- package/dist/src/content-delivery-layer/temporary-connection/TemporaryConnectionRpcLocal.js +0 -45
- package/dist/src/content-delivery-layer/temporary-connection/TemporaryConnectionRpcLocal.js.map +0 -1
- package/dist/src/content-delivery-layer/temporary-connection/TemporaryConnectionRpcRemote.d.ts +0 -6
- package/dist/src/content-delivery-layer/temporary-connection/TemporaryConnectionRpcRemote.js +0 -31
- package/dist/src/content-delivery-layer/temporary-connection/TemporaryConnectionRpcRemote.js.map +0 -1
- package/dist/src/control-layer/ControlLayerNode.d.ts +0 -16
- package/dist/src/control-layer/ControlLayerNode.js +0 -3
- package/dist/src/control-layer/ControlLayerNode.js.map +0 -1
- package/dist/src/control-layer/ExternalNetworkRpc.d.ts +0 -16
- package/dist/src/control-layer/ExternalNetworkRpc.js +0 -23
- package/dist/src/control-layer/ExternalNetworkRpc.js.map +0 -1
- package/dist/src/control-layer/PeerDescriptorStoreManager.d.ts +0 -28
- package/dist/src/control-layer/PeerDescriptorStoreManager.js +0 -78
- package/dist/src/control-layer/PeerDescriptorStoreManager.js.map +0 -1
- package/dist/src/discovery-layer/DiscoveryLayerNode.d.ts +0 -28
- package/dist/src/discovery-layer/DiscoveryLayerNode.js +0 -3
- package/dist/src/discovery-layer/DiscoveryLayerNode.js.map +0 -1
- package/dist/src/exports.d.ts +0 -6
- package/dist/src/exports.js +0 -24
- package/dist/src/exports.js.map +0 -1
- package/dist/src/types.d.ts +0 -6
- package/dist/src/types.js +0 -3
- package/dist/src/types.js.map +0 -1
- package/dist/src/utils.d.ts +0 -3
- package/dist/src/utils.js +0 -17
- package/dist/src/utils.js.map +0 -1
- package/dist/test/benchmark/first-message.d.ts +0 -1
- package/dist/test/benchmark/first-message.js +0 -139
- package/dist/test/benchmark/first-message.js.map +0 -1
- package/dist/test/utils/utils.d.ts +0 -15
- package/dist/test/utils/utils.js +0 -106
- package/dist/test/utils/utils.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exports.cjs","sources":["src/control-layer/ExternalNetworkRpc.js","generated/google/protobuf/any.js","src/control-layer/PeerDescriptorStoreManager.js","src/StreamPartNetworkSplitAvoidance.js","src/StreamPartReconnect.js","generated/google/protobuf/empty.js","generated/packages/proto-rpc/protos/ProtoRpc.js","generated/google/protobuf/timestamp.js","generated/packages/dht/protos/DhtRpc.js","generated/packages/trackerless-network/protos/NetworkRpc.js","generated/packages/trackerless-network/protos/NetworkRpc.client.js","src/content-delivery-layer/ContentDeliveryRpcRemote.js","src/content-delivery-layer/neighbor-discovery/HandshakeRpcLocal.js","src/content-delivery-layer/neighbor-discovery/HandshakeRpcRemote.js","src/content-delivery-layer/neighbor-discovery/Handshaker.js","src/content-delivery-layer/neighbor-discovery/NeighborFinder.js","src/content-delivery-layer/neighbor-discovery/NeighborUpdateRpcLocal.js","src/content-delivery-layer/neighbor-discovery/NeighborUpdateRpcRemote.js","src/content-delivery-layer/neighbor-discovery/NeighborUpdateManager.js","src/content-delivery-layer/ContentDeliveryRpcLocal.js","src/content-delivery-layer/DuplicateMessageDetector.js","src/utils.js","src/content-delivery-layer/ContentDeliveryLayerNode.js","src/content-delivery-layer/NodeList.js","src/content-delivery-layer/propagation/FifoMapWithTTL.js","src/content-delivery-layer/propagation/PropagationTaskStore.js","src/content-delivery-layer/propagation/Propagation.js","src/content-delivery-layer/proxy/ProxyConnectionRpcLocal.js","src/content-delivery-layer/temporary-connection/TemporaryConnectionRpcRemote.js","src/content-delivery-layer/inspection/InspectSession.js","src/content-delivery-layer/inspection/Inspector.js","src/content-delivery-layer/temporary-connection/TemporaryConnectionRpcLocal.js","src/content-delivery-layer/formStreamPartDeliveryServiceId.js","src/content-delivery-layer/plumtree/PlumtreeRpcLocal.js","src/content-delivery-layer/plumtree/PlumtreeRpcRemote.js","src/content-delivery-layer/plumtree/PausedNeighbors.js","src/content-delivery-layer/plumtree/PlumtreeManager.js","src/content-delivery-layer/createContentDeliveryLayerNode.js","src/content-delivery-layer/proxy/ProxyConnectionRpcRemote.js","src/content-delivery-layer/proxy/ProxyClient.js","src/ContentDeliveryManager.js","src/NodeInfoRpcRemote.js","src/NodeInfoClient.js","src/NodeInfoRpcLocal.js","src/NetworkStack.js","src/NetworkNode.js"],"sourcesContent":["import { ListeningRpcCommunicator } from '@streamr/dht';\nimport { toProtoRpcClient } from '@streamr/proto-rpc';\nexport const SERVICE_ID = 'external-network-service';\nexport class ExternalNetworkRpc {\n rpcCommunicator;\n constructor(transport) {\n this.rpcCommunicator = new ListeningRpcCommunicator(SERVICE_ID, transport);\n }\n registerRpcMethod(request, response, name, fn) {\n this.rpcCommunicator.registerRpcMethod(request, response, name, fn);\n }\n createRpcClient(clientClass) {\n return toProtoRpcClient(new clientClass(this.rpcCommunicator.getRpcClientTransport()));\n }\n destroy() {\n this.rpcCommunicator.destroy();\n }\n}\n//# sourceMappingURL=ExternalNetworkRpc.js.map","import { WireType } from \"@protobuf-ts/runtime\";\nimport { UnknownFieldHandler } from \"@protobuf-ts/runtime\";\nimport { reflectionMergePartial } from \"@protobuf-ts/runtime\";\nimport { isJsonObject } from \"@protobuf-ts/runtime\";\nimport { typeofJsonValue } from \"@protobuf-ts/runtime\";\nimport { jsonWriteOptions } from \"@protobuf-ts/runtime\";\nimport { MessageType } from \"@protobuf-ts/runtime\";\n// @generated message type with reflection information, may provide speed optimized methods\nclass Any$Type extends MessageType {\n constructor() {\n super(\"google.protobuf.Any\", [\n { no: 1, name: \"type_url\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 2, name: \"value\", kind: \"scalar\", T: 12 /*ScalarType.BYTES*/ }\n ]);\n }\n /**\n * Pack the message into a new `Any`.\n *\n * Uses 'type.googleapis.com/full.type.name' as the type URL.\n */\n pack(message, type) {\n return {\n typeUrl: this.typeNameToUrl(type.typeName), value: type.toBinary(message),\n };\n }\n /**\n * Unpack the message from the `Any`.\n */\n unpack(any, type, options) {\n if (!this.contains(any, type))\n throw new Error(\"Cannot unpack google.protobuf.Any with typeUrl '\" + any.typeUrl + \"' as \" + type.typeName + \".\");\n return type.fromBinary(any.value, options);\n }\n /**\n * Does the given `Any` contain a packed message of the given type?\n */\n contains(any, type) {\n if (!any.typeUrl.length)\n return false;\n let wants = typeof type == \"string\" ? type : type.typeName;\n let has = this.typeUrlToName(any.typeUrl);\n return wants === has;\n }\n /**\n * Convert the message to canonical JSON value.\n *\n * You have to provide the `typeRegistry` option so that the\n * packed message can be converted to JSON.\n *\n * The `typeRegistry` option is also required to read\n * `google.protobuf.Any` from JSON format.\n */\n internalJsonWrite(any, options) {\n if (any.typeUrl === \"\")\n return {};\n let typeName = this.typeUrlToName(any.typeUrl);\n let opt = jsonWriteOptions(options);\n let type = opt.typeRegistry?.find(t => t.typeName === typeName);\n if (!type)\n throw new globalThis.Error(\"Unable to convert google.protobuf.Any with typeUrl '\" + any.typeUrl + \"' to JSON. The specified type \" + typeName + \" is not available in the type registry.\");\n let value = type.fromBinary(any.value, { readUnknownField: false });\n let json = type.internalJsonWrite(value, opt);\n if (typeName.startsWith(\"google.protobuf.\") || !isJsonObject(json))\n json = { value: json };\n json[\"@type\"] = any.typeUrl;\n return json;\n }\n internalJsonRead(json, options, target) {\n if (!isJsonObject(json))\n throw new globalThis.Error(\"Unable to parse google.protobuf.Any from JSON \" + typeofJsonValue(json) + \".\");\n if (typeof json[\"@type\"] != \"string\" || json[\"@type\"] == \"\")\n return this.create();\n let typeName = this.typeUrlToName(json[\"@type\"]);\n let type = options?.typeRegistry?.find(t => t.typeName == typeName);\n if (!type)\n throw new globalThis.Error(\"Unable to parse google.protobuf.Any from JSON. The specified type \" + typeName + \" is not available in the type registry.\");\n let value;\n if (typeName.startsWith(\"google.protobuf.\") && json.hasOwnProperty(\"value\"))\n value = type.fromJson(json[\"value\"], options);\n else {\n let copy = Object.assign({}, json);\n delete copy[\"@type\"];\n value = type.fromJson(copy, options);\n }\n if (target === undefined)\n target = this.create();\n target.typeUrl = json[\"@type\"];\n target.value = type.toBinary(value);\n return target;\n }\n typeNameToUrl(name) {\n if (!name.length)\n throw new Error(\"invalid type name: \" + name);\n return \"type.googleapis.com/\" + name;\n }\n typeUrlToName(url) {\n if (!url.length)\n throw new Error(\"invalid type url: \" + url);\n let slash = url.lastIndexOf(\"/\");\n let name = slash > 0 ? url.substring(slash + 1) : url;\n if (!name.length)\n throw new Error(\"invalid type url: \" + url);\n return name;\n }\n create(value) {\n const message = globalThis.Object.create((this.messagePrototype));\n message.typeUrl = \"\";\n message.value = new Uint8Array(0);\n if (value !== undefined)\n reflectionMergePartial(this, message, value);\n return message;\n }\n internalBinaryRead(reader, length, options, target) {\n let message = target ?? this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* string type_url */ 1:\n message.typeUrl = reader.string();\n break;\n case /* bytes value */ 2:\n message.value = reader.bytes();\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message, writer, options) {\n /* string type_url = 1; */\n if (message.typeUrl !== \"\")\n writer.tag(1, WireType.LengthDelimited).string(message.typeUrl);\n /* bytes value = 2; */\n if (message.value.length)\n writer.tag(2, WireType.LengthDelimited).bytes(message.value);\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message google.protobuf.Any\n */\nexport const Any = new Any$Type();\n//# sourceMappingURL=any.js.map","import { PeerDescriptor, areEqualPeerDescriptors } from '@streamr/dht';\nimport { Logger, scheduleAtInterval } from '@streamr/utils';\nimport { Any } from '../../generated/google/protobuf/any';\nconst parsePeerDescriptor = (dataEntries) => {\n return dataEntries.filter((entry) => !entry.deleted).map((entry) => Any.unpack(entry.data, PeerDescriptor));\n};\nconst logger = new Logger('PeerDescriptorStoreManager');\nexport const MAX_NODE_COUNT = 8;\n/**\n * For each key there is usually 0-MAX_NODE_COUNT PeerDescriptors stored in the DHT. If there are fewer node,\n * the peer descriptor of the local node is stored to the DHT.\n */\nexport class PeerDescriptorStoreManager {\n abortController;\n options;\n isLocalNodeStored_ = false;\n constructor(options) {\n this.options = options;\n this.abortController = new AbortController();\n }\n async fetchNodes() {\n logger.trace('Fetch data', { key: this.options.key });\n try {\n const result = await this.options.fetchDataFromDht(this.options.key);\n return parsePeerDescriptor(result);\n }\n catch {\n return [];\n }\n }\n async storeAndKeepLocalNode() {\n if (this.abortController.signal.aborted) {\n return;\n }\n // eslint-disable-next-line no-underscore-dangle\n this.isLocalNodeStored_ = true;\n await this.storeLocalNode();\n await this.keepLocalNode();\n }\n async storeLocalNode() {\n const localPeerDescriptor = this.options.localPeerDescriptor;\n const dataToStore = Any.pack(localPeerDescriptor, PeerDescriptor);\n try {\n await this.options.storeDataToDht(this.options.key, dataToStore);\n }\n catch {\n logger.warn('Failed to store local node', { key: this.options.key });\n }\n }\n async keepLocalNode() {\n await scheduleAtInterval(async () => {\n logger.trace('Attempting to keep local node', { key: this.options.key });\n try {\n const discovered = await this.fetchNodes();\n if (discovered.length < MAX_NODE_COUNT\n || discovered.some((peerDescriptor) => areEqualPeerDescriptors(peerDescriptor, this.options.localPeerDescriptor))) {\n await this.storeLocalNode();\n }\n }\n catch {\n logger.debug('Failed to keep local node', { key: this.options.key });\n }\n }, this.options.storeInterval ?? 60000, false, this.abortController.signal);\n }\n isLocalNodeStored() {\n // eslint-disable-next-line no-underscore-dangle\n return this.isLocalNodeStored_;\n }\n async destroy() {\n this.abortController.abort();\n await this.options.deleteDataFromDht(this.options.key, false);\n }\n}\n//# sourceMappingURL=PeerDescriptorStoreManager.js.map","import { areEqualPeerDescriptors, toNodeId } from '@streamr/dht';\nimport { Logger, wait } from '@streamr/utils';\n/*\n * Tries to find new neighbors if we currently have less than MIN_NEIGHBOR_COUNT neigbors. It does so by\n * rejoining the stream's control layer network.\n *\n * This way we can avoid some network split scenarios. The functionality is most relevant for small stream\n * networks.\n */\nconst logger = new Logger('StreamPartNetworkSplitAvoidance');\nconst exponentialRunOff = async (task, description, abortSignal, baseDelay = 500, maxAttempts = 6) => {\n for (let i = 1; i <= maxAttempts; i++) {\n if (abortSignal.aborted) {\n return;\n }\n const factor = 2 ** i;\n const delay = baseDelay * factor;\n try {\n await task();\n }\n catch {\n logger.trace(`${description} failed, retrying in ${delay} ms`);\n }\n try { // Abort controller throws unexpected errors in destroy?\n await wait(delay, abortSignal);\n }\n catch (err) {\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n logger.trace(`${err}`); // TODO Do we need logging?\n }\n }\n};\nexport const MIN_NEIGHBOR_COUNT = 4;\nexport class StreamPartNetworkSplitAvoidance {\n abortController;\n options;\n excludedNodes = new Set();\n running = false;\n constructor(options) {\n this.options = options;\n this.abortController = new AbortController();\n }\n async avoidNetworkSplit() {\n this.running = true;\n await exponentialRunOff(async () => {\n const discoveredEntrypoints = await this.options.discoverEntryPoints();\n const filteredEntryPoints = discoveredEntrypoints.filter((peer) => !this.excludedNodes.has(toNodeId(peer)));\n await this.options.discoveryLayerNode.joinDht(filteredEntryPoints, false, false);\n if (this.options.discoveryLayerNode.getNeighborCount() < MIN_NEIGHBOR_COUNT) {\n // Filter out nodes that are not neighbors as those nodes are assumed to be offline\n const newExcludes = filteredEntryPoints\n .filter((peer) => !this.options.discoveryLayerNode.getNeighbors()\n .some((neighbor) => areEqualPeerDescriptors(neighbor, peer)))\n .map((peer) => toNodeId(peer));\n newExcludes.forEach((node) => this.excludedNodes.add(node));\n throw new Error(`Network split is still possible`);\n }\n }, 'avoid network split', this.abortController.signal, this.options.exponentialRunOfBaseDelay);\n this.running = false;\n this.excludedNodes.clear();\n logger.trace(`Network split avoided`);\n }\n isRunning() {\n return this.running;\n }\n destroy() {\n this.abortController.abort();\n }\n}\n//# sourceMappingURL=StreamPartNetworkSplitAvoidance.js.map","import { scheduleAtInterval } from '@streamr/utils';\nimport { MAX_NODE_COUNT } from './control-layer/PeerDescriptorStoreManager';\nconst DEFAULT_RECONNECT_INTERVAL = 30 * 1000;\nexport class StreamPartReconnect {\n abortController;\n discoveryLayerNode;\n peerDescriptorStoreManager;\n constructor(discoveryLayerNode, peerDescriptorStoreManager) {\n this.discoveryLayerNode = discoveryLayerNode;\n this.peerDescriptorStoreManager = peerDescriptorStoreManager;\n }\n async reconnect(timeout = DEFAULT_RECONNECT_INTERVAL) {\n this.abortController = new AbortController();\n await scheduleAtInterval(async () => {\n const entryPoints = await this.peerDescriptorStoreManager.fetchNodes();\n await this.discoveryLayerNode.joinDht(entryPoints);\n // Is is necessary to store the node as an entry point here?\n if (!this.peerDescriptorStoreManager.isLocalNodeStored() && entryPoints.length < MAX_NODE_COUNT) {\n await this.peerDescriptorStoreManager.storeAndKeepLocalNode();\n }\n if (this.discoveryLayerNode.getNeighborCount() > 0) {\n this.abortController.abort();\n }\n }, timeout, true, this.abortController.signal);\n }\n isRunning() {\n return this.abortController ? !this.abortController.signal.aborted : false;\n }\n destroy() {\n this.abortController?.abort();\n }\n}\n//# sourceMappingURL=StreamPartReconnect.js.map","import { UnknownFieldHandler } from \"@protobuf-ts/runtime\";\nimport { reflectionMergePartial } from \"@protobuf-ts/runtime\";\nimport { MessageType } from \"@protobuf-ts/runtime\";\n// @generated message type with reflection information, may provide speed optimized methods\nclass Empty$Type extends MessageType {\n constructor() {\n super(\"google.protobuf.Empty\", []);\n }\n create(value) {\n const message = globalThis.Object.create((this.messagePrototype));\n if (value !== undefined)\n reflectionMergePartial(this, message, value);\n return message;\n }\n internalBinaryRead(reader, length, options, target) {\n let message = target ?? this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message, writer, options) {\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message google.protobuf.Empty\n */\nexport const Empty = new Empty$Type();\n//# sourceMappingURL=empty.js.map","// @generated by protobuf-ts 2.11.1 with parameter server_generic,generate_dependencies,long_type_number\n// @generated from protobuf file \"packages/proto-rpc/protos/ProtoRpc.proto\" (package \"protorpc\", syntax proto3)\n// tslint:disable\nimport { MessageType } from \"@protobuf-ts/runtime\";\nimport { Empty } from \"../../../google/protobuf/empty\";\nimport { Any } from \"../../../google/protobuf/any\";\n/**\n * @generated from protobuf enum protorpc.RpcErrorType\n */\nexport var RpcErrorType;\n(function (RpcErrorType) {\n /**\n * @generated from protobuf enum value: SERVER_TIMEOUT = 0;\n */\n RpcErrorType[RpcErrorType[\"SERVER_TIMEOUT\"] = 0] = \"SERVER_TIMEOUT\";\n /**\n * @generated from protobuf enum value: CLIENT_TIMEOUT = 1;\n */\n RpcErrorType[RpcErrorType[\"CLIENT_TIMEOUT\"] = 1] = \"CLIENT_TIMEOUT\";\n /**\n * @generated from protobuf enum value: UNKNOWN_RPC_METHOD = 2;\n */\n RpcErrorType[RpcErrorType[\"UNKNOWN_RPC_METHOD\"] = 2] = \"UNKNOWN_RPC_METHOD\";\n /**\n * @generated from protobuf enum value: CLIENT_ERROR = 3;\n */\n RpcErrorType[RpcErrorType[\"CLIENT_ERROR\"] = 3] = \"CLIENT_ERROR\";\n /**\n * @generated from protobuf enum value: SERVER_ERROR = 4;\n */\n RpcErrorType[RpcErrorType[\"SERVER_ERROR\"] = 4] = \"SERVER_ERROR\";\n})(RpcErrorType || (RpcErrorType = {}));\n// @generated message type with reflection information, may provide speed optimized methods\nclass RpcMessage$Type extends MessageType {\n constructor() {\n super(\"protorpc.RpcMessage\", [\n { no: 1, name: \"header\", kind: \"map\", K: 9 /*ScalarType.STRING*/, V: { kind: \"scalar\", T: 9 /*ScalarType.STRING*/ } },\n { no: 2, name: \"body\", kind: \"message\", T: () => Any },\n { no: 3, name: \"requestId\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 4, name: \"errorType\", kind: \"enum\", opt: true, T: () => [\"protorpc.RpcErrorType\", RpcErrorType] },\n { no: 5, name: \"errorClassName\", kind: \"scalar\", opt: true, T: 9 /*ScalarType.STRING*/ },\n { no: 6, name: \"errorCode\", kind: \"scalar\", opt: true, T: 9 /*ScalarType.STRING*/ },\n { no: 7, name: \"errorMessage\", kind: \"scalar\", opt: true, T: 9 /*ScalarType.STRING*/ }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message protorpc.RpcMessage\n */\nexport const RpcMessage = new RpcMessage$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass Mnfo2uhnf92hvqi2nviouq2hv9puhq$Type extends MessageType {\n constructor() {\n super(\"protorpc.Mnfo2uhnf92hvqi2nviouq2hv9puhq\", [\n { no: 1, name: \"empty\", kind: \"message\", T: () => Empty }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message protorpc.Mnfo2uhnf92hvqi2nviouq2hv9puhq\n */\nexport const Mnfo2uhnf92hvqi2nviouq2hv9puhq = new Mnfo2uhnf92hvqi2nviouq2hv9puhq$Type();\n//# sourceMappingURL=ProtoRpc.js.map","import { WireType } from \"@protobuf-ts/runtime\";\nimport { UnknownFieldHandler } from \"@protobuf-ts/runtime\";\nimport { reflectionMergePartial } from \"@protobuf-ts/runtime\";\nimport { typeofJsonValue } from \"@protobuf-ts/runtime\";\nimport { PbLong } from \"@protobuf-ts/runtime\";\nimport { MessageType } from \"@protobuf-ts/runtime\";\n// @generated message type with reflection information, may provide speed optimized methods\nclass Timestamp$Type extends MessageType {\n constructor() {\n super(\"google.protobuf.Timestamp\", [\n { no: 1, name: \"seconds\", kind: \"scalar\", T: 3 /*ScalarType.INT64*/, L: 2 /*LongType.NUMBER*/ },\n { no: 2, name: \"nanos\", kind: \"scalar\", T: 5 /*ScalarType.INT32*/ }\n ]);\n }\n /**\n * Creates a new `Timestamp` for the current time.\n */\n now() {\n const msg = this.create();\n const ms = Date.now();\n msg.seconds = PbLong.from(Math.floor(ms / 1000)).toNumber();\n msg.nanos = (ms % 1000) * 1000000;\n return msg;\n }\n /**\n * Converts a `Timestamp` to a JavaScript Date.\n */\n toDate(message) {\n return new Date(PbLong.from(message.seconds).toNumber() * 1000 + Math.ceil(message.nanos / 1000000));\n }\n /**\n * Converts a JavaScript Date to a `Timestamp`.\n */\n fromDate(date) {\n const msg = this.create();\n const ms = date.getTime();\n msg.seconds = PbLong.from(Math.floor(ms / 1000)).toNumber();\n msg.nanos = ((ms % 1000) + (ms < 0 && ms % 1000 !== 0 ? 1000 : 0)) * 1000000;\n return msg;\n }\n /**\n * In JSON format, the `Timestamp` type is encoded as a string\n * in the RFC 3339 format.\n */\n internalJsonWrite(message, options) {\n let ms = PbLong.from(message.seconds).toNumber() * 1000;\n if (ms < Date.parse(\"0001-01-01T00:00:00Z\") || ms > Date.parse(\"9999-12-31T23:59:59Z\"))\n throw new Error(\"Unable to encode Timestamp to JSON. Must be from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive.\");\n if (message.nanos < 0)\n throw new Error(\"Unable to encode invalid Timestamp to JSON. Nanos must not be negative.\");\n let z = \"Z\";\n if (message.nanos > 0) {\n let nanosStr = (message.nanos + 1000000000).toString().substring(1);\n if (nanosStr.substring(3) === \"000000\")\n z = \".\" + nanosStr.substring(0, 3) + \"Z\";\n else if (nanosStr.substring(6) === \"000\")\n z = \".\" + nanosStr.substring(0, 6) + \"Z\";\n else\n z = \".\" + nanosStr + \"Z\";\n }\n return new Date(ms).toISOString().replace(\".000Z\", z);\n }\n /**\n * In JSON format, the `Timestamp` type is encoded as a string\n * in the RFC 3339 format.\n */\n internalJsonRead(json, options, target) {\n if (typeof json !== \"string\")\n throw new Error(\"Unable to parse Timestamp from JSON \" + typeofJsonValue(json) + \".\");\n let matches = json.match(/^([0-9]{4})-([0-9]{2})-([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})(?:Z|\\.([0-9]{3,9})Z|([+-][0-9][0-9]:[0-9][0-9]))$/);\n if (!matches)\n throw new Error(\"Unable to parse Timestamp from JSON. Invalid format.\");\n let ms = Date.parse(matches[1] + \"-\" + matches[2] + \"-\" + matches[3] + \"T\" + matches[4] + \":\" + matches[5] + \":\" + matches[6] + (matches[8] ? matches[8] : \"Z\"));\n if (Number.isNaN(ms))\n throw new Error(\"Unable to parse Timestamp from JSON. Invalid value.\");\n if (ms < Date.parse(\"0001-01-01T00:00:00Z\") || ms > Date.parse(\"9999-12-31T23:59:59Z\"))\n throw new globalThis.Error(\"Unable to parse Timestamp from JSON. Must be from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive.\");\n if (!target)\n target = this.create();\n target.seconds = PbLong.from(ms / 1000).toNumber();\n target.nanos = 0;\n if (matches[7])\n target.nanos = (parseInt(\"1\" + matches[7] + \"0\".repeat(9 - matches[7].length)) - 1000000000);\n return target;\n }\n create(value) {\n const message = globalThis.Object.create((this.messagePrototype));\n message.seconds = 0;\n message.nanos = 0;\n if (value !== undefined)\n reflectionMergePartial(this, message, value);\n return message;\n }\n internalBinaryRead(reader, length, options, target) {\n let message = target ?? this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* int64 seconds */ 1:\n message.seconds = reader.int64().toNumber();\n break;\n case /* int32 nanos */ 2:\n message.nanos = reader.int32();\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message, writer, options) {\n /* int64 seconds = 1; */\n if (message.seconds !== 0)\n writer.tag(1, WireType.Varint).int64(message.seconds);\n /* int32 nanos = 2; */\n if (message.nanos !== 0)\n writer.tag(2, WireType.Varint).int32(message.nanos);\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message google.protobuf.Timestamp\n */\nexport const Timestamp = new Timestamp$Type();\n//# sourceMappingURL=timestamp.js.map","// @generated by protobuf-ts 2.11.1 with parameter server_generic,generate_dependencies,long_type_number\n// @generated from protobuf file \"packages/dht/protos/DhtRpc.proto\" (package \"dht\", syntax proto3)\n// tslint:disable\nimport { Empty } from \"../../../google/protobuf/empty\";\nimport { ServiceType } from \"@protobuf-ts/runtime-rpc\";\nimport { MessageType } from \"@protobuf-ts/runtime\";\nimport { RpcMessage } from \"../../proto-rpc/protos/ProtoRpc\";\nimport { Timestamp } from \"../../../google/protobuf/timestamp\";\nimport { Any } from \"../../../google/protobuf/any\";\n/**\n * @generated from protobuf enum dht.RecursiveOperation\n */\nexport var RecursiveOperation;\n(function (RecursiveOperation) {\n /**\n * @generated from protobuf enum value: FIND_CLOSEST_NODES = 0;\n */\n RecursiveOperation[RecursiveOperation[\"FIND_CLOSEST_NODES\"] = 0] = \"FIND_CLOSEST_NODES\";\n /**\n * @generated from protobuf enum value: FETCH_DATA = 1;\n */\n RecursiveOperation[RecursiveOperation[\"FETCH_DATA\"] = 1] = \"FETCH_DATA\";\n /**\n * @generated from protobuf enum value: DELETE_DATA = 2;\n */\n RecursiveOperation[RecursiveOperation[\"DELETE_DATA\"] = 2] = \"DELETE_DATA\";\n})(RecursiveOperation || (RecursiveOperation = {}));\n/**\n * @generated from protobuf enum dht.NodeType\n */\nexport var NodeType;\n(function (NodeType) {\n /**\n * @generated from protobuf enum value: NODEJS = 0;\n */\n NodeType[NodeType[\"NODEJS\"] = 0] = \"NODEJS\";\n /**\n * @generated from protobuf enum value: BROWSER = 1;\n */\n NodeType[NodeType[\"BROWSER\"] = 1] = \"BROWSER\";\n})(NodeType || (NodeType = {}));\n/**\n * @generated from protobuf enum dht.RpcResponseError\n */\nexport var RpcResponseError;\n(function (RpcResponseError) {\n /**\n * @generated from protobuf enum value: SERVER_TIMOUT = 0;\n */\n RpcResponseError[RpcResponseError[\"SERVER_TIMOUT\"] = 0] = \"SERVER_TIMOUT\";\n /**\n * @generated from protobuf enum value: CLIENT_TIMEOUT = 1;\n */\n RpcResponseError[RpcResponseError[\"CLIENT_TIMEOUT\"] = 1] = \"CLIENT_TIMEOUT\";\n /**\n * @generated from protobuf enum value: SERVER_ERROR = 2;\n */\n RpcResponseError[RpcResponseError[\"SERVER_ERROR\"] = 2] = \"SERVER_ERROR\";\n /**\n * @generated from protobuf enum value: UNKNOWN_RPC_METHOD = 3;\n */\n RpcResponseError[RpcResponseError[\"UNKNOWN_RPC_METHOD\"] = 3] = \"UNKNOWN_RPC_METHOD\";\n})(RpcResponseError || (RpcResponseError = {}));\n/**\n * @generated from protobuf enum dht.RouteMessageError\n */\nexport var RouteMessageError;\n(function (RouteMessageError) {\n /**\n * @generated from protobuf enum value: NO_TARGETS = 0;\n */\n RouteMessageError[RouteMessageError[\"NO_TARGETS\"] = 0] = \"NO_TARGETS\";\n /**\n * @generated from protobuf enum value: DUPLICATE = 1;\n */\n RouteMessageError[RouteMessageError[\"DUPLICATE\"] = 1] = \"DUPLICATE\";\n /**\n * TODO: can this be removed? If DhtNode is already stopped the server side requests\n * should not be processed\n *\n * @generated from protobuf enum value: STOPPED = 2;\n */\n RouteMessageError[RouteMessageError[\"STOPPED\"] = 2] = \"STOPPED\";\n})(RouteMessageError || (RouteMessageError = {}));\n/**\n * @generated from protobuf enum dht.HandshakeError\n */\nexport var HandshakeError;\n(function (HandshakeError) {\n /**\n * @generated from protobuf enum value: DUPLICATE_CONNECTION = 0;\n */\n HandshakeError[HandshakeError[\"DUPLICATE_CONNECTION\"] = 0] = \"DUPLICATE_CONNECTION\";\n /**\n * @generated from protobuf enum value: INVALID_TARGET_PEER_DESCRIPTOR = 1;\n */\n HandshakeError[HandshakeError[\"INVALID_TARGET_PEER_DESCRIPTOR\"] = 1] = \"INVALID_TARGET_PEER_DESCRIPTOR\";\n /**\n * @generated from protobuf enum value: UNSUPPORTED_PROTOCOL_VERSION = 2;\n */\n HandshakeError[HandshakeError[\"UNSUPPORTED_PROTOCOL_VERSION\"] = 2] = \"UNSUPPORTED_PROTOCOL_VERSION\";\n})(HandshakeError || (HandshakeError = {}));\n/**\n * @generated from protobuf enum dht.DisconnectMode\n */\nexport var DisconnectMode;\n(function (DisconnectMode) {\n /**\n * @generated from protobuf enum value: NORMAL = 0;\n */\n DisconnectMode[DisconnectMode[\"NORMAL\"] = 0] = \"NORMAL\";\n /**\n * @generated from protobuf enum value: LEAVING = 1;\n */\n DisconnectMode[DisconnectMode[\"LEAVING\"] = 1] = \"LEAVING\";\n})(DisconnectMode || (DisconnectMode = {}));\n// @generated message type with reflection information, may provide speed optimized methods\nclass StoreDataRequest$Type extends MessageType {\n constructor() {\n super(\"dht.StoreDataRequest\", [\n { no: 1, name: \"key\", kind: \"scalar\", T: 12 /*ScalarType.BYTES*/ },\n { no: 2, name: \"data\", kind: \"message\", T: () => Any },\n { no: 3, name: \"creator\", kind: \"scalar\", T: 12 /*ScalarType.BYTES*/ },\n { no: 4, name: \"createdAt\", kind: \"message\", T: () => Timestamp },\n { no: 5, name: \"ttl\", kind: \"scalar\", T: 13 /*ScalarType.UINT32*/ }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message dht.StoreDataRequest\n */\nexport const StoreDataRequest = new StoreDataRequest$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass StoreDataResponse$Type extends MessageType {\n constructor() {\n super(\"dht.StoreDataResponse\", []);\n }\n}\n/**\n * @generated MessageType for protobuf message dht.StoreDataResponse\n */\nexport const StoreDataResponse = new StoreDataResponse$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass ExternalStoreDataRequest$Type extends MessageType {\n constructor() {\n super(\"dht.ExternalStoreDataRequest\", [\n { no: 1, name: \"key\", kind: \"scalar\", T: 12 /*ScalarType.BYTES*/ },\n { no: 2, name: \"data\", kind: \"message\", T: () => Any }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message dht.ExternalStoreDataRequest\n */\nexport const ExternalStoreDataRequest = new ExternalStoreDataRequest$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass ExternalStoreDataResponse$Type extends MessageType {\n constructor() {\n super(\"dht.ExternalStoreDataResponse\", [\n { no: 1, name: \"storers\", kind: \"message\", repeat: 2 /*RepeatType.UNPACKED*/, T: () => PeerDescriptor }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message dht.ExternalStoreDataResponse\n */\nexport const ExternalStoreDataResponse = new ExternalStoreDataResponse$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass ReplicateDataRequest$Type extends MessageType {\n constructor() {\n super(\"dht.ReplicateDataRequest\", [\n { no: 1, name: \"entry\", kind: \"message\", T: () => DataEntry }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message dht.ReplicateDataRequest\n */\nexport const ReplicateDataRequest = new ReplicateDataRequest$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass DataEntry$Type extends MessageType {\n constructor() {\n super(\"dht.DataEntry\", [\n { no: 1, name: \"key\", kind: \"scalar\", T: 12 /*ScalarType.BYTES*/ },\n { no: 2, name: \"data\", kind: \"message\", T: () => Any },\n { no: 3, name: \"creator\", kind: \"scalar\", T: 12 /*ScalarType.BYTES*/ },\n { no: 4, name: \"createdAt\", kind: \"message\", T: () => Timestamp },\n { no: 5, name: \"storedAt\", kind: \"message\", T: () => Timestamp },\n { no: 6, name: \"ttl\", kind: \"scalar\", T: 13 /*ScalarType.UINT32*/ },\n { no: 7, name: \"stale\", kind: \"scalar\", T: 8 /*ScalarType.BOOL*/ },\n { no: 8, name: \"deleted\", kind: \"scalar\", T: 8 /*ScalarType.BOOL*/ }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message dht.DataEntry\n */\nexport const DataEntry = new DataEntry$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass ClosestPeersRequest$Type extends MessageType {\n constructor() {\n super(\"dht.ClosestPeersRequest\", [\n { no: 1, name: \"nodeId\", kind: \"scalar\", T: 12 /*ScalarType.BYTES*/ },\n { no: 2, name: \"requestId\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message dht.ClosestPeersRequest\n */\nexport const ClosestPeersRequest = new ClosestPeersRequest$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass ClosestPeersResponse$Type extends MessageType {\n constructor() {\n super(\"dht.ClosestPeersResponse\", [\n { no: 1, name: \"peers\", kind: \"message\", repeat: 2 /*RepeatType.UNPACKED*/, T: () => PeerDescriptor },\n { no: 2, name: \"requestId\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message dht.ClosestPeersResponse\n */\nexport const ClosestPeersResponse = new ClosestPeersResponse$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass ClosestRingPeersRequest$Type extends MessageType {\n constructor() {\n super(\"dht.ClosestRingPeersRequest\", [\n { no: 1, name: \"ringId\", kind: \"scalar\", T: 12 /*ScalarType.BYTES*/ },\n { no: 2, name: \"requestId\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message dht.ClosestRingPeersRequest\n */\nexport const ClosestRingPeersRequest = new ClosestRingPeersRequest$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass ClosestRingPeersResponse$Type extends MessageType {\n constructor() {\n super(\"dht.ClosestRingPeersResponse\", [\n { no: 1, name: \"leftPeers\", kind: \"message\", repeat: 2 /*RepeatType.UNPACKED*/, T: () => PeerDescriptor },\n { no: 2, name: \"rightPeers\", kind: \"message\", repeat: 2 /*RepeatType.UNPACKED*/, T: () => PeerDescriptor },\n { no: 3, name: \"requestId\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message dht.ClosestRingPeersResponse\n */\nexport const ClosestRingPeersResponse = new ClosestRingPeersResponse$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass RecursiveOperationRequest$Type extends MessageType {\n constructor() {\n super(\"dht.RecursiveOperationRequest\", [\n { no: 1, name: \"sessionId\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 2, name: \"operation\", kind: \"enum\", T: () => [\"dht.RecursiveOperation\", RecursiveOperation] }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message dht.RecursiveOperationRequest\n */\nexport const RecursiveOperationRequest = new RecursiveOperationRequest$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass RecursiveOperationResponse$Type extends MessageType {\n constructor() {\n super(\"dht.RecursiveOperationResponse\", [\n { no: 1, name: \"closestConnectedNodes\", kind: \"message\", repeat: 2 /*RepeatType.UNPACKED*/, T: () => PeerDescriptor },\n { no: 2, name: \"dataEntries\", kind: \"message\", repeat: 2 /*RepeatType.UNPACKED*/, T: () => DataEntry },\n { no: 3, name: \"noCloserNodesFound\", kind: \"scalar\", T: 8 /*ScalarType.BOOL*/ },\n { no: 4, name: \"routingPath\", kind: \"message\", repeat: 2 /*RepeatType.UNPACKED*/, T: () => PeerDescriptor }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message dht.RecursiveOperationResponse\n */\nexport const RecursiveOperationResponse = new RecursiveOperationResponse$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass PingRequest$Type extends MessageType {\n constructor() {\n super(\"dht.PingRequest\", [\n { no: 1, name: \"requestId\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message dht.PingRequest\n */\nexport const PingRequest = new PingRequest$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass PingResponse$Type extends MessageType {\n constructor() {\n super(\"dht.PingResponse\", [\n { no: 1, name: \"requestId\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message dht.PingResponse\n */\nexport const PingResponse = new PingResponse$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass LeaveNotice$Type extends MessageType {\n constructor() {\n super(\"dht.LeaveNotice\", []);\n }\n}\n/**\n * @generated MessageType for protobuf message dht.LeaveNotice\n */\nexport const LeaveNotice = new LeaveNotice$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass PeerDescriptor$Type extends MessageType {\n constructor() {\n super(\"dht.PeerDescriptor\", [\n { no: 1, name: \"nodeId\", kind: \"scalar\", T: 12 /*ScalarType.BYTES*/ },\n { no: 2, name: \"type\", kind: \"enum\", T: () => [\"dht.NodeType\", NodeType] },\n { no: 3, name: \"udp\", kind: \"message\", T: () => ConnectivityMethod },\n { no: 4, name: \"tcp\", kind: \"message\", T: () => ConnectivityMethod },\n { no: 5, name: \"websocket\", kind: \"message\", T: () => ConnectivityMethod },\n { no: 6, name: \"region\", kind: \"scalar\", opt: true, T: 13 /*ScalarType.UINT32*/ },\n { no: 7, name: \"ipAddress\", kind: \"scalar\", opt: true, T: 13 /*ScalarType.UINT32*/ },\n { no: 8, name: \"publicKey\", kind: \"scalar\", opt: true, T: 12 /*ScalarType.BYTES*/ },\n { no: 9, name: \"signature\", kind: \"scalar\", opt: true, T: 12 /*ScalarType.BYTES*/ }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message dht.PeerDescriptor\n */\nexport const PeerDescriptor = new PeerDescriptor$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass ConnectivityMethod$Type extends MessageType {\n constructor() {\n super(\"dht.ConnectivityMethod\", [\n { no: 1, name: \"port\", kind: \"scalar\", T: 13 /*ScalarType.UINT32*/ },\n { no: 2, name: \"host\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 3, name: \"tls\", kind: \"scalar\", T: 8 /*ScalarType.BOOL*/ }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message dht.ConnectivityMethod\n */\nexport const ConnectivityMethod = new ConnectivityMethod$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass RouteMessageWrapper$Type extends MessageType {\n constructor() {\n super(\"dht.RouteMessageWrapper\", [\n { no: 1, name: \"requestId\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 2, name: \"sourcePeer\", kind: \"message\", T: () => PeerDescriptor },\n { no: 3, name: \"target\", kind: \"scalar\", T: 12 /*ScalarType.BYTES*/ },\n { no: 4, name: \"message\", kind: \"message\", T: () => Message },\n { no: 5, name: \"reachableThrough\", kind: \"message\", repeat: 2 /*RepeatType.UNPACKED*/, T: () => PeerDescriptor },\n { no: 6, name: \"routingPath\", kind: \"message\", repeat: 2 /*RepeatType.UNPACKED*/, T: () => PeerDescriptor },\n { no: 7, name: \"parallelRootNodeIds\", kind: \"scalar\", repeat: 2 /*RepeatType.UNPACKED*/, T: 9 /*ScalarType.STRING*/ }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message dht.RouteMessageWrapper\n */\nexport const RouteMessageWrapper = new RouteMessageWrapper$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass RouteMessageAck$Type extends MessageType {\n constructor() {\n super(\"dht.RouteMessageAck\", [\n { no: 1, name: \"requestId\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 2, name: \"error\", kind: \"enum\", opt: true, T: () => [\"dht.RouteMessageError\", RouteMessageError] }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message dht.RouteMessageAck\n */\nexport const RouteMessageAck = new RouteMessageAck$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass ConnectivityRequest$Type extends MessageType {\n constructor() {\n super(\"dht.ConnectivityRequest\", [\n { no: 1, name: \"port\", kind: \"scalar\", T: 13 /*ScalarType.UINT32*/ },\n { no: 2, name: \"tls\", kind: \"scalar\", T: 8 /*ScalarType.BOOL*/ },\n { no: 3, name: \"host\", kind: \"scalar\", opt: true, T: 9 /*ScalarType.STRING*/ },\n { no: 4, name: \"allowSelfSignedCertificate\", kind: \"scalar\", T: 8 /*ScalarType.BOOL*/ }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message dht.ConnectivityRequest\n */\nexport const ConnectivityRequest = new ConnectivityRequest$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass ConnectivityResponse$Type extends MessageType {\n constructor() {\n super(\"dht.ConnectivityResponse\", [\n { no: 1, name: \"host\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 2, name: \"natType\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 3, name: \"websocket\", kind: \"message\", T: () => ConnectivityMethod },\n { no: 4, name: \"ipAddress\", kind: \"scalar\", T: 13 /*ScalarType.UINT32*/ },\n { no: 5, name: \"protocolVersion\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 6, name: \"latitude\", kind: \"scalar\", opt: true, T: 1 /*ScalarType.DOUBLE*/ },\n { no: 7, name: \"longitude\", kind: \"scalar\", opt: true, T: 1 /*ScalarType.DOUBLE*/ }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message dht.ConnectivityResponse\n */\nexport const ConnectivityResponse = new ConnectivityResponse$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass HandshakeRequest$Type extends MessageType {\n constructor() {\n super(\"dht.HandshakeRequest\", [\n { no: 1, name: \"sourcePeerDescriptor\", kind: \"message\", T: () => PeerDescriptor },\n { no: 2, name: \"targetPeerDescriptor\", kind: \"message\", T: () => PeerDescriptor },\n { no: 3, name: \"protocolVersion\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 4, name: \"applicationVersion\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message dht.HandshakeRequest\n */\nexport const HandshakeRequest = new HandshakeRequest$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass HandshakeResponse$Type extends MessageType {\n constructor() {\n super(\"dht.HandshakeResponse\", [\n { no: 1, name: \"sourcePeerDescriptor\", kind: \"message\", T: () => PeerDescriptor },\n { no: 2, name: \"error\", kind: \"enum\", opt: true, T: () => [\"dht.HandshakeError\", HandshakeError] },\n { no: 3, name: \"protocolVersion\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 4, name: \"applicationVersion\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message dht.HandshakeResponse\n */\nexport const HandshakeResponse = new HandshakeResponse$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass Message$Type extends MessageType {\n constructor() {\n super(\"dht.Message\", [\n { no: 1, name: \"messageId\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 2, name: \"sourceDescriptor\", kind: \"message\", T: () => PeerDescriptor },\n { no: 3, name: \"targetDescriptor\", kind: \"message\", T: () => PeerDescriptor },\n { no: 4, name: \"serviceId\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 5, name: \"rpcMessage\", kind: \"message\", oneof: \"body\", T: () => RpcMessage },\n { no: 6, name: \"connectivityRequest\", kind: \"message\", oneof: \"body\", T: () => ConnectivityRequest },\n { no: 7, name: \"connectivityResponse\", kind: \"message\", oneof: \"body\", T: () => ConnectivityResponse },\n { no: 8, name: \"handshakeRequest\", kind: \"message\", oneof: \"body\", T: () => HandshakeRequest },\n { no: 9, name: \"handshakeResponse\", kind: \"message\", oneof: \"body\", T: () => HandshakeResponse },\n { no: 10, name: \"recursiveOperationRequest\", kind: \"message\", oneof: \"body\", T: () => RecursiveOperationRequest }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message dht.Message\n */\nexport const Message = new Message$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass WebsocketConnectionRequest$Type extends MessageType {\n constructor() {\n super(\"dht.WebsocketConnectionRequest\", []);\n }\n}\n/**\n * @generated MessageType for protobuf message dht.WebsocketConnectionRequest\n */\nexport const WebsocketConnectionRequest = new WebsocketConnectionRequest$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass WebrtcConnectionRequest$Type extends MessageType {\n constructor() {\n super(\"dht.WebrtcConnectionRequest\", []);\n }\n}\n/**\n * @generated MessageType for protobuf message dht.WebrtcConnectionRequest\n */\nexport const WebrtcConnectionRequest = new WebrtcConnectionRequest$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass RtcOffer$Type extends MessageType {\n constructor() {\n super(\"dht.RtcOffer\", [\n { no: 1, name: \"description\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 2, name: \"connectionId\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message dht.RtcOffer\n */\nexport const RtcOffer = new RtcOffer$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass RtcAnswer$Type extends MessageType {\n constructor() {\n super(\"dht.RtcAnswer\", [\n { no: 1, name: \"description\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 2, name: \"connectionId\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message dht.RtcAnswer\n */\nexport const RtcAnswer = new RtcAnswer$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass IceCandidate$Type extends MessageType {\n constructor() {\n super(\"dht.IceCandidate\", [\n { no: 1, name: \"candidate\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 2, name: \"mid\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 3, name: \"connectionId\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message dht.IceCandidate\n */\nexport const IceCandidate = new IceCandidate$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass LockRequest$Type extends MessageType {\n constructor() {\n super(\"dht.LockRequest\", [\n { no: 1, name: \"lockId\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message dht.LockRequest\n */\nexport const LockRequest = new LockRequest$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass UnlockRequest$Type extends MessageType {\n constructor() {\n super(\"dht.UnlockRequest\", [\n { no: 1, name: \"lockId\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message dht.UnlockRequest\n */\nexport const UnlockRequest = new UnlockRequest$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass LockResponse$Type extends MessageType {\n constructor() {\n super(\"dht.LockResponse\", [\n { no: 1, name: \"accepted\", kind: \"scalar\", T: 8 /*ScalarType.BOOL*/ }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message dht.LockResponse\n */\nexport const LockResponse = new LockResponse$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass DisconnectNotice$Type extends MessageType {\n constructor() {\n super(\"dht.DisconnectNotice\", [\n { no: 1, name: \"disconnectMode\", kind: \"enum\", T: () => [\"dht.DisconnectMode\", DisconnectMode] }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message dht.DisconnectNotice\n */\nexport const DisconnectNotice = new DisconnectNotice$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass SetPrivateRequest$Type extends MessageType {\n constructor() {\n super(\"dht.SetPrivateRequest\", [\n { no: 1, name: \"isPrivate\", kind: \"scalar\", T: 8 /*ScalarType.BOOL*/ }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message dht.SetPrivateRequest\n */\nexport const SetPrivateRequest = new SetPrivateRequest$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass ExternalFetchDataRequest$Type extends MessageType {\n constructor() {\n super(\"dht.ExternalFetchDataRequest\", [\n { no: 1, name: \"key\", kind: \"scalar\", T: 12 /*ScalarType.BYTES*/ }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message dht.ExternalFetchDataRequest\n */\nexport const ExternalFetchDataRequest = new ExternalFetchDataRequest$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass ExternalFetchDataResponse$Type extends MessageType {\n constructor() {\n super(\"dht.ExternalFetchDataResponse\", [\n { no: 1, name: \"entries\", kind: \"message\", repeat: 2 /*RepeatType.UNPACKED*/, T: () => DataEntry }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message dht.ExternalFetchDataResponse\n */\nexport const ExternalFetchDataResponse = new ExternalFetchDataResponse$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass ExternalFindClosestNodesRequest$Type extends MessageType {\n constructor() {\n super(\"dht.ExternalFindClosestNodesRequest\", [\n { no: 1, name: \"nodeId\", kind: \"scalar\", T: 12 /*ScalarType.BYTES*/ }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message dht.ExternalFindClosestNodesRequest\n */\nexport const ExternalFindClosestNodesRequest = new ExternalFindClosestNodesRequest$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass ExternalFindClosestNodesResponse$Type extends MessageType {\n constructor() {\n super(\"dht.ExternalFindClosestNodesResponse\", [\n { no: 1, name: \"closestNodes\", kind: \"message\", repeat: 2 /*RepeatType.UNPACKED*/, T: () => PeerDescriptor }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message dht.ExternalFindClosestNodesResponse\n */\nexport const ExternalFindClosestNodesResponse = new ExternalFindClosestNodesResponse$Type();\n/**\n * @generated ServiceType for protobuf service dht.DhtNodeRpc\n */\nexport const DhtNodeRpc = new ServiceType(\"dht.DhtNodeRpc\", [\n { name: \"getClosestPeers\", options: {}, I: ClosestPeersRequest, O: ClosestPeersResponse },\n { name: \"getClosestRingPeers\", options: {}, I: ClosestRingPeersRequest, O: ClosestRingPeersResponse },\n { name: \"ping\", options: {}, I: PingRequest, O: PingResponse },\n { name: \"leaveNotice\", options: {}, I: LeaveNotice, O: Empty }\n]);\n/**\n * @generated ServiceType for protobuf service dht.RouterRpc\n */\nexport const RouterRpc = new ServiceType(\"dht.RouterRpc\", [\n { name: \"routeMessage\", options: {}, I: RouteMessageWrapper, O: RouteMessageAck },\n { name: \"forwardMessage\", options: {}, I: RouteMessageWrapper, O: RouteMessageAck }\n]);\n/**\n * @generated ServiceType for protobuf service dht.RecursiveOperationRpc\n */\nexport const RecursiveOperationRpc = new ServiceType(\"dht.RecursiveOperationRpc\", [\n { name: \"routeRequest\", options: {}, I: RouteMessageWrapper, O: RouteMessageAck }\n]);\n/**\n * @generated ServiceType for protobuf service dht.StoreRpc\n */\nexport const StoreRpc = new ServiceType(\"dht.StoreRpc\", [\n { name: \"storeData\", options: {}, I: StoreDataRequest, O: StoreDataResponse },\n { name: \"replicateData\", options: {}, I: ReplicateDataRequest, O: Empty }\n]);\n/**\n * @generated ServiceType for protobuf service dht.RecursiveOperationSessionRpc\n */\nexport const RecursiveOperationSessionRpc = new ServiceType(\"dht.RecursiveOperationSessionRpc\", [\n { name: \"sendResponse\", options: {}, I: RecursiveOperationResponse, O: Empty }\n]);\n/**\n * @generated ServiceType for protobuf service dht.WebsocketClientConnectorRpc\n */\nexport const WebsocketClientConnectorRpc = new ServiceType(\"dht.WebsocketClientConnectorRpc\", [\n { name: \"requestConnection\", options: {}, I: WebsocketConnectionRequest, O: Empty }\n]);\n/**\n * @generated ServiceType for protobuf service dht.WebrtcConnectorRpc\n */\nexport const WebrtcConnectorRpc = new ServiceType(\"dht.WebrtcConnectorRpc\", [\n { name: \"requestConnection\", options: {}, I: WebrtcConnectionRequest, O: Empty },\n { name: \"rtcOffer\", options: {}, I: RtcOffer, O: Empty },\n { name: \"rtcAnswer\", options: {}, I: RtcAnswer, O: Empty },\n { name: \"iceCandidate\", options: {}, I: IceCandidate, O: Empty }\n]);\n/**\n * @generated ServiceType for protobuf service dht.ConnectionLockRpc\n */\nexport const ConnectionLockRpc = new ServiceType(\"dht.ConnectionLockRpc\", [\n { name: \"lockRequest\", options: {}, I: LockRequest, O: LockResponse },\n { name: \"unlockRequest\", options: {}, I: UnlockRequest, O: Empty },\n { name: \"gracefulDisconnect\", options: {}, I: DisconnectNotice, O: Empty },\n { name: \"setPrivate\", options: {}, I: SetPrivateRequest, O: Empty }\n]);\n/**\n * @generated ServiceType for protobuf service dht.ExternalApiRpc\n */\nexport const ExternalApiRpc = new ServiceType(\"dht.ExternalApiRpc\", [\n { name: \"externalFetchData\", options: {}, I: ExternalFetchDataRequest, O: ExternalFetchDataResponse },\n { name: \"externalStoreData\", options: {}, I: ExternalStoreDataRequest, O: ExternalStoreDataResponse },\n { name: \"externalFindClosestNodes\", options: {}, I: ExternalFindClosestNodesRequest, O: ExternalFindClosestNodesResponse }\n]);\n//# sourceMappingURL=DhtRpc.js.map","// @generated by protobuf-ts 2.11.1 with parameter server_generic,generate_dependencies,long_type_number\n// @generated from protobuf file \"packages/trackerless-network/protos/NetworkRpc.proto\" (syntax proto3)\n// tslint:disable\nimport { Empty } from \"../../../google/protobuf/empty\";\nimport { ServiceType } from \"@protobuf-ts/runtime-rpc\";\nimport { MessageType } from \"@protobuf-ts/runtime\";\nimport { PeerDescriptor } from \"../../dht/protos/DhtRpc\";\n/**\n * @generated from protobuf enum ContentType\n */\nexport var ContentType;\n(function (ContentType) {\n /**\n * @generated from protobuf enum value: JSON = 0;\n */\n ContentType[ContentType[\"JSON\"] = 0] = \"JSON\";\n /**\n * @generated from protobuf enum value: BINARY = 1;\n */\n ContentType[ContentType[\"BINARY\"] = 1] = \"BINARY\";\n})(ContentType || (ContentType = {}));\n/**\n * @generated from protobuf enum EncryptionType\n */\nexport var EncryptionType;\n(function (EncryptionType) {\n /**\n * @generated from protobuf enum value: NONE = 0;\n */\n EncryptionType[EncryptionType[\"NONE\"] = 0] = \"NONE\";\n /**\n * @generated from protobuf enum value: AES = 1;\n */\n EncryptionType[EncryptionType[\"AES\"] = 1] = \"AES\";\n})(EncryptionType || (EncryptionType = {}));\n/**\n * @generated from protobuf enum AsymmetricEncryptionType\n */\nexport var AsymmetricEncryptionType;\n(function (AsymmetricEncryptionType) {\n /**\n * default\n *\n * @generated from protobuf enum value: RSA = 0;\n */\n AsymmetricEncryptionType[AsymmetricEncryptionType[\"RSA\"] = 0] = \"RSA\";\n /**\n * @generated from protobuf enum value: ML_KEM = 1;\n */\n AsymmetricEncryptionType[AsymmetricEncryptionType[\"ML_KEM\"] = 1] = \"ML_KEM\";\n})(AsymmetricEncryptionType || (AsymmetricEncryptionType = {}));\n/**\n * @generated from protobuf enum SignatureType\n */\nexport var SignatureType;\n(function (SignatureType) {\n /**\n * @generated from protobuf enum value: ECDSA_SECP256K1_LEGACY = 0;\n */\n SignatureType[SignatureType[\"ECDSA_SECP256K1_LEGACY\"] = 0] = \"ECDSA_SECP256K1_LEGACY\";\n /**\n * @generated from protobuf enum value: ECDSA_SECP256K1_EVM = 1;\n */\n SignatureType[SignatureType[\"ECDSA_SECP256K1_EVM\"] = 1] = \"ECDSA_SECP256K1_EVM\";\n /**\n * @generated from protobuf enum value: ERC_1271 = 2;\n */\n SignatureType[SignatureType[\"ERC_1271\"] = 2] = \"ERC_1271\";\n /**\n * @generated from protobuf enum value: ML_DSA_87 = 3;\n */\n SignatureType[SignatureType[\"ML_DSA_87\"] = 3] = \"ML_DSA_87\";\n /**\n * @generated from protobuf enum value: ECDSA_SECP256R1 = 4;\n */\n SignatureType[SignatureType[\"ECDSA_SECP256R1\"] = 4] = \"ECDSA_SECP256R1\";\n})(SignatureType || (SignatureType = {}));\n/**\n * @generated from protobuf enum ProxyDirection\n */\nexport var ProxyDirection;\n(function (ProxyDirection) {\n /**\n * @generated from protobuf enum value: PUBLISH = 0;\n */\n ProxyDirection[ProxyDirection[\"PUBLISH\"] = 0] = \"PUBLISH\";\n /**\n * @generated from protobuf enum value: SUBSCRIBE = 1;\n */\n ProxyDirection[ProxyDirection[\"SUBSCRIBE\"] = 1] = \"SUBSCRIBE\";\n})(ProxyDirection || (ProxyDirection = {}));\n// @generated message type with reflection information, may provide speed optimized methods\nclass MessageID$Type extends MessageType {\n constructor() {\n super(\"MessageID\", [\n { no: 1, name: \"streamId\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 2, name: \"streamPartition\", kind: \"scalar\", T: 5 /*ScalarType.INT32*/ },\n { no: 3, name: \"timestamp\", kind: \"scalar\", T: 3 /*ScalarType.INT64*/, L: 2 /*LongType.NUMBER*/ },\n { no: 4, name: \"sequenceNumber\", kind: \"scalar\", T: 5 /*ScalarType.INT32*/ },\n { no: 5, name: \"publisherId\", kind: \"scalar\", T: 12 /*ScalarType.BYTES*/ },\n { no: 6, name: \"messageChainId\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message MessageID\n */\nexport const MessageID = new MessageID$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass MessageRef$Type extends MessageType {\n constructor() {\n super(\"MessageRef\", [\n { no: 1, name: \"timestamp\", kind: \"scalar\", T: 3 /*ScalarType.INT64*/, L: 2 /*LongType.NUMBER*/ },\n { no: 2, name: \"sequenceNumber\", kind: \"scalar\", T: 5 /*ScalarType.INT32*/ }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message MessageRef\n */\nexport const MessageRef = new MessageRef$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass StreamMessage$Type extends MessageType {\n constructor() {\n super(\"StreamMessage\", [\n { no: 1, name: \"messageId\", kind: \"message\", T: () => MessageID },\n { no: 2, name: \"previousMessageRef\", kind: \"message\", T: () => MessageRef },\n { no: 3, name: \"signature\", kind: \"scalar\", T: 12 /*ScalarType.BYTES*/ },\n { no: 4, name: \"signatureType\", kind: \"enum\", T: () => [\"SignatureType\", SignatureType] },\n { no: 5, name: \"contentMessage\", kind: \"message\", oneof: \"body\", T: () => ContentMessage },\n { no: 6, name: \"groupKeyRequest\", kind: \"message\", oneof: \"body\", T: () => GroupKeyRequest },\n { no: 7, name: \"groupKeyResponse\", kind: \"message\", oneof: \"body\", T: () => GroupKeyResponse }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message StreamMessage\n */\nexport const StreamMessage = new StreamMessage$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass ContentMessage$Type extends MessageType {\n constructor() {\n super(\"ContentMessage\", [\n { no: 1, name: \"content\", kind: \"scalar\", T: 12 /*ScalarType.BYTES*/ },\n { no: 2, name: \"contentType\", kind: \"enum\", T: () => [\"ContentType\", ContentType] },\n { no: 3, name: \"encryptionType\", kind: \"enum\", T: () => [\"EncryptionType\", EncryptionType] },\n { no: 4, name: \"groupKeyId\", kind: \"scalar\", opt: true, T: 9 /*ScalarType.STRING*/ },\n { no: 5, name: \"newGroupKey\", kind: \"message\", T: () => EncryptedGroupKey }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message ContentMessage\n */\nexport const ContentMessage = new ContentMessage$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass GroupKeyRequest$Type extends MessageType {\n constructor() {\n super(\"GroupKeyRequest\", [\n { no: 1, name: \"requestId\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 2, name: \"recipientId\", kind: \"scalar\", T: 12 /*ScalarType.BYTES*/ },\n { no: 3, name: \"publicKey\", kind: \"scalar\", T: 12 /*ScalarType.BYTES*/ },\n { no: 4, name: \"groupKeyIds\", kind: \"scalar\", repeat: 2 /*RepeatType.UNPACKED*/, T: 9 /*ScalarType.STRING*/ },\n { no: 5, name: \"encryptionType\", kind: \"enum\", T: () => [\"AsymmetricEncryptionType\", AsymmetricEncryptionType] }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message GroupKeyRequest\n */\nexport const GroupKeyRequest = new GroupKeyRequest$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass GroupKeyResponse$Type extends MessageType {\n constructor() {\n super(\"GroupKeyResponse\", [\n { no: 1, name: \"requestId\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 2, name: \"recipientId\", kind: \"scalar\", T: 12 /*ScalarType.BYTES*/ },\n { no: 3, name: \"groupKeys\", kind: \"message\", repeat: 2 /*RepeatType.UNPACKED*/, T: () => EncryptedGroupKey },\n { no: 4, name: \"encryptionType\", kind: \"enum\", T: () => [\"AsymmetricEncryptionType\", AsymmetricEncryptionType] }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message GroupKeyResponse\n */\nexport const GroupKeyResponse = new GroupKeyResponse$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass EncryptedGroupKey$Type extends MessageType {\n constructor() {\n super(\"EncryptedGroupKey\", [\n { no: 1, name: \"id\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 2, name: \"data\", kind: \"scalar\", T: 12 /*ScalarType.BYTES*/ }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message EncryptedGroupKey\n */\nexport const EncryptedGroupKey = new EncryptedGroupKey$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass StreamPartHandshakeRequest$Type extends MessageType {\n constructor() {\n super(\"StreamPartHandshakeRequest\", [\n { no: 1, name: \"streamPartId\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 2, name: \"requestId\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 3, name: \"concurrentHandshakeNodeId\", kind: \"scalar\", opt: true, T: 12 /*ScalarType.BYTES*/ },\n { no: 4, name: \"neighborNodeIds\", kind: \"scalar\", repeat: 2 /*RepeatType.UNPACKED*/, T: 12 /*ScalarType.BYTES*/ },\n { no: 5, name: \"interleaveNodeId\", kind: \"scalar\", opt: true, T: 12 /*ScalarType.BYTES*/ }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message StreamPartHandshakeRequest\n */\nexport const StreamPartHandshakeRequest = new StreamPartHandshakeRequest$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass StreamPartHandshakeResponse$Type extends MessageType {\n constructor() {\n super(\"StreamPartHandshakeResponse\", [\n { no: 1, name: \"accepted\", kind: \"scalar\", T: 8 /*ScalarType.BOOL*/ },\n { no: 2, name: \"requestId\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 3, name: \"interleaveTargetDescriptor\", kind: \"message\", T: () => PeerDescriptor }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message StreamPartHandshakeResponse\n */\nexport const StreamPartHandshakeResponse = new StreamPartHandshakeResponse$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass InterleaveRequest$Type extends MessageType {\n constructor() {\n super(\"InterleaveRequest\", [\n { no: 1, name: \"interleaveTargetDescriptor\", kind: \"message\", T: () => PeerDescriptor }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message InterleaveRequest\n */\nexport const InterleaveRequest = new InterleaveRequest$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass InterleaveResponse$Type extends MessageType {\n constructor() {\n super(\"InterleaveResponse\", [\n { no: 1, name: \"accepted\", kind: \"scalar\", T: 8 /*ScalarType.BOOL*/ }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message InterleaveResponse\n */\nexport const InterleaveResponse = new InterleaveResponse$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass LeaveStreamPartNotice$Type extends MessageType {\n constructor() {\n super(\"LeaveStreamPartNotice\", [\n { no: 1, name: \"streamPartId\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 2, name: \"isEntryPoint\", kind: \"scalar\", T: 8 /*ScalarType.BOOL*/ }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message LeaveStreamPartNotice\n */\nexport const LeaveStreamPartNotice = new LeaveStreamPartNotice$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass NeighborUpdate$Type extends MessageType {\n constructor() {\n super(\"NeighborUpdate\", [\n { no: 1, name: \"streamPartId\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 2, name: \"removeMe\", kind: \"scalar\", T: 8 /*ScalarType.BOOL*/ },\n { no: 3, name: \"neighborDescriptors\", kind: \"message\", repeat: 2 /*RepeatType.UNPACKED*/, T: () => PeerDescriptor }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message NeighborUpdate\n */\nexport const NeighborUpdate = new NeighborUpdate$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass ProxyConnectionRequest$Type extends MessageType {\n constructor() {\n super(\"ProxyConnectionRequest\", [\n { no: 1, name: \"direction\", kind: \"enum\", opt: true, T: () => [\"ProxyDirection\", ProxyDirection] },\n { no: 2, name: \"userId\", kind: \"scalar\", T: 12 /*ScalarType.BYTES*/ }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message ProxyConnectionRequest\n */\nexport const ProxyConnectionRequest = new ProxyConnectionRequest$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass ProxyConnectionResponse$Type extends MessageType {\n constructor() {\n super(\"ProxyConnectionResponse\", [\n { no: 1, name: \"accepted\", kind: \"scalar\", T: 8 /*ScalarType.BOOL*/ }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message ProxyConnectionResponse\n */\nexport const ProxyConnectionResponse = new ProxyConnectionResponse$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass TemporaryConnectionRequest$Type extends MessageType {\n constructor() {\n super(\"TemporaryConnectionRequest\", []);\n }\n}\n/**\n * @generated MessageType for protobuf message TemporaryConnectionRequest\n */\nexport const TemporaryConnectionRequest = new TemporaryConnectionRequest$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass TemporaryConnectionResponse$Type extends MessageType {\n constructor() {\n super(\"TemporaryConnectionResponse\", [\n { no: 1, name: \"accepted\", kind: \"scalar\", T: 8 /*ScalarType.BOOL*/ }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message TemporaryConnectionResponse\n */\nexport const TemporaryConnectionResponse = new TemporaryConnectionResponse$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass CloseTemporaryConnection$Type extends MessageType {\n constructor() {\n super(\"CloseTemporaryConnection\", []);\n }\n}\n/**\n * @generated MessageType for protobuf message CloseTemporaryConnection\n */\nexport const CloseTemporaryConnection = new CloseTemporaryConnection$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass StreamPartitionInfo$Type extends MessageType {\n constructor() {\n super(\"StreamPartitionInfo\", [\n { no: 1, name: \"id\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 2, name: \"controlLayerNeighbors\", kind: \"message\", repeat: 2 /*RepeatType.UNPACKED*/, T: () => PeerDescriptor },\n { no: 3, name: \"deprecatedContentDeliveryLayerNeighbors\", kind: \"message\", repeat: 2 /*RepeatType.UNPACKED*/, T: () => PeerDescriptor },\n { no: 4, name: \"contentDeliveryLayerNeighbors\", kind: \"message\", repeat: 2 /*RepeatType.UNPACKED*/, T: () => ContentDeliveryLayerNeighborInfo }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message StreamPartitionInfo\n */\nexport const StreamPartitionInfo = new StreamPartitionInfo$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass ContentDeliveryLayerNeighborInfo$Type extends MessageType {\n constructor() {\n super(\"ContentDeliveryLayerNeighborInfo\", [\n { no: 1, name: \"peerDescriptor\", kind: \"message\", T: () => PeerDescriptor },\n { no: 2, name: \"rtt\", kind: \"scalar\", opt: true, T: 5 /*ScalarType.INT32*/ }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message ContentDeliveryLayerNeighborInfo\n */\nexport const ContentDeliveryLayerNeighborInfo = new ContentDeliveryLayerNeighborInfo$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass ControlLayerInfo$Type extends MessageType {\n constructor() {\n super(\"ControlLayerInfo\", [\n { no: 1, name: \"neighbors\", kind: \"message\", repeat: 2 /*RepeatType.UNPACKED*/, T: () => PeerDescriptor },\n { no: 2, name: \"connections\", kind: \"message\", repeat: 2 /*RepeatType.UNPACKED*/, T: () => PeerDescriptor }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message ControlLayerInfo\n */\nexport const ControlLayerInfo = new ControlLayerInfo$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass NodeInfoRequest$Type extends MessageType {\n constructor() {\n super(\"NodeInfoRequest\", []);\n }\n}\n/**\n * @generated MessageType for protobuf message NodeInfoRequest\n */\nexport const NodeInfoRequest = new NodeInfoRequest$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass NodeInfoResponse$Type extends MessageType {\n constructor() {\n super(\"NodeInfoResponse\", [\n { no: 1, name: \"peerDescriptor\", kind: \"message\", T: () => PeerDescriptor },\n { no: 2, name: \"streamPartitions\", kind: \"message\", repeat: 2 /*RepeatType.UNPACKED*/, T: () => StreamPartitionInfo },\n { no: 3, name: \"controlLayer\", kind: \"message\", T: () => ControlLayerInfo },\n { no: 4, name: \"applicationVersion\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message NodeInfoResponse\n */\nexport const NodeInfoResponse = new NodeInfoResponse$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass PauseNeighborRequest$Type extends MessageType {\n constructor() {\n super(\"PauseNeighborRequest\", [\n { no: 1, name: \"messageChainId\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message PauseNeighborRequest\n */\nexport const PauseNeighborRequest = new PauseNeighborRequest$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass ResumeNeighborRequest$Type extends MessageType {\n constructor() {\n super(\"ResumeNeighborRequest\", [\n { no: 1, name: \"messageChainId\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 2, name: \"fromTimestamp\", kind: \"scalar\", T: 3 /*ScalarType.INT64*/, L: 2 /*LongType.NUMBER*/ }\n ]);\n }\n}\n/**\n * @generated MessageType for protobuf message ResumeNeighborRequest\n */\nexport const ResumeNeighborRequest = new ResumeNeighborRequest$Type();\n/**\n * @generated ServiceType for protobuf service ContentDeliveryRpc\n */\nexport const ContentDeliveryRpc = new ServiceType(\"ContentDeliveryRpc\", [\n { name: \"sendStreamMessage\", options: {}, I: StreamMessage, O: Empty },\n { name: \"leaveStreamPartNotice\", options: {}, I: LeaveStreamPartNotice, O: Empty }\n]);\n/**\n * @generated ServiceType for protobuf service ProxyConnectionRpc\n */\nexport const ProxyConnectionRpc = new ServiceType(\"ProxyConnectionRpc\", [\n { name: \"requestConnection\", options: {}, I: ProxyConnectionRequest, O: ProxyConnectionResponse }\n]);\n/**\n * @generated ServiceType for protobuf service HandshakeRpc\n */\nexport const HandshakeRpc = new ServiceType(\"HandshakeRpc\", [\n { name: \"handshake\", options: {}, I: StreamPartHandshakeRequest, O: StreamPartHandshakeResponse },\n { name: \"interleaveRequest\", options: {}, I: InterleaveRequest, O: InterleaveResponse }\n]);\n/**\n * @generated ServiceType for protobuf service NeighborUpdateRpc\n */\nexport const NeighborUpdateRpc = new ServiceType(\"NeighborUpdateRpc\", [\n { name: \"neighborUpdate\", options: {}, I: NeighborUpdate, O: NeighborUpdate }\n]);\n/**\n * @generated ServiceType for protobuf service TemporaryConnectionRpc\n */\nexport const TemporaryConnectionRpc = new ServiceType(\"TemporaryConnectionRpc\", [\n { name: \"openConnection\", options: {}, I: TemporaryConnectionRequest, O: TemporaryConnectionResponse },\n { name: \"closeConnection\", options: {}, I: CloseTemporaryConnection, O: Empty }\n]);\n/**\n * @generated ServiceType for protobuf service NodeInfoRpc\n */\nexport const NodeInfoRpc = new ServiceType(\"NodeInfoRpc\", [\n { name: \"getInfo\", options: {}, I: NodeInfoRequest, O: NodeInfoResponse }\n]);\n/**\n * @generated ServiceType for protobuf service PlumtreeRpc\n */\nexport const PlumtreeRpc = new ServiceType(\"PlumtreeRpc\", [\n { name: \"pauseNeighbor\", options: {}, I: PauseNeighborRequest, O: Empty },\n { name: \"resumeNeighbor\", options: {}, I: ResumeNeighborRequest, O: Empty },\n { name: \"sendMetadata\", options: {}, I: MessageID, O: Empty }\n]);\n//# sourceMappingURL=NetworkRpc.js.map","// @generated by protobuf-ts 2.11.1 with parameter server_generic,generate_dependencies,long_type_number\n// @generated from protobuf file \"packages/trackerless-network/protos/NetworkRpc.proto\" (syntax proto3)\n// tslint:disable\nimport { PlumtreeRpc } from \"./NetworkRpc\";\nimport { NodeInfoRpc } from \"./NetworkRpc\";\nimport { TemporaryConnectionRpc } from \"./NetworkRpc\";\nimport { NeighborUpdateRpc } from \"./NetworkRpc\";\nimport { HandshakeRpc } from \"./NetworkRpc\";\nimport { ProxyConnectionRpc } from \"./NetworkRpc\";\nimport { ContentDeliveryRpc } from \"./NetworkRpc\";\nimport { stackIntercept } from \"@protobuf-ts/runtime-rpc\";\n/**\n * @generated from protobuf service ContentDeliveryRpc\n */\nexport class ContentDeliveryRpcClient {\n _transport;\n typeName = ContentDeliveryRpc.typeName;\n methods = ContentDeliveryRpc.methods;\n options = ContentDeliveryRpc.options;\n constructor(_transport) {\n this._transport = _transport;\n }\n /**\n * @generated from protobuf rpc: sendStreamMessage\n */\n sendStreamMessage(input, options) {\n const method = this.methods[0], opt = this._transport.mergeOptions(options);\n return stackIntercept(\"unary\", this._transport, method, opt, input);\n }\n /**\n * @generated from protobuf rpc: leaveStreamPartNotice\n */\n leaveStreamPartNotice(input, options) {\n const method = this.methods[1], opt = this._transport.mergeOptions(options);\n return stackIntercept(\"unary\", this._transport, method, opt, input);\n }\n}\n/**\n * @generated from protobuf service ProxyConnectionRpc\n */\nexport class ProxyConnectionRpcClient {\n _transport;\n typeName = ProxyConnectionRpc.typeName;\n methods = ProxyConnectionRpc.methods;\n options = ProxyConnectionRpc.options;\n constructor(_transport) {\n this._transport = _transport;\n }\n /**\n * @generated from protobuf rpc: requestConnection\n */\n requestConnection(input, options) {\n const method = this.methods[0], opt = this._transport.mergeOptions(options);\n return stackIntercept(\"unary\", this._transport, method, opt, input);\n }\n}\n/**\n * @generated from protobuf service HandshakeRpc\n */\nexport class HandshakeRpcClient {\n _transport;\n typeName = HandshakeRpc.typeName;\n methods = HandshakeRpc.methods;\n options = HandshakeRpc.options;\n constructor(_transport) {\n this._transport = _transport;\n }\n /**\n * @generated from protobuf rpc: handshake\n */\n handshake(input, options) {\n const method = this.methods[0], opt = this._transport.mergeOptions(options);\n return stackIntercept(\"unary\", this._transport, method, opt, input);\n }\n /**\n * @generated from protobuf rpc: interleaveRequest\n */\n interleaveRequest(input, options) {\n const method = this.methods[1], opt = this._transport.mergeOptions(options);\n return stackIntercept(\"unary\", this._transport, method, opt, input);\n }\n}\n/**\n * @generated from protobuf service NeighborUpdateRpc\n */\nexport class NeighborUpdateRpcClient {\n _transport;\n typeName = NeighborUpdateRpc.typeName;\n methods = NeighborUpdateRpc.methods;\n options = NeighborUpdateRpc.options;\n constructor(_transport) {\n this._transport = _transport;\n }\n /**\n * @generated from protobuf rpc: neighborUpdate\n */\n neighborUpdate(input, options) {\n const method = this.methods[0], opt = this._transport.mergeOptions(options);\n return stackIntercept(\"unary\", this._transport, method, opt, input);\n }\n}\n/**\n * @generated from protobuf service TemporaryConnectionRpc\n */\nexport class TemporaryConnectionRpcClient {\n _transport;\n typeName = TemporaryConnectionRpc.typeName;\n methods = TemporaryConnectionRpc.methods;\n options = TemporaryConnectionRpc.options;\n constructor(_transport) {\n this._transport = _transport;\n }\n /**\n * @generated from protobuf rpc: openConnection\n */\n openConnection(input, options) {\n const method = this.methods[0], opt = this._transport.mergeOptions(options);\n return stackIntercept(\"unary\", this._transport, method, opt, input);\n }\n /**\n * @generated from protobuf rpc: closeConnection\n */\n closeConnection(input, options) {\n const method = this.methods[1], opt = this._transport.mergeOptions(options);\n return stackIntercept(\"unary\", this._transport, method, opt, input);\n }\n}\n/**\n * @generated from protobuf service NodeInfoRpc\n */\nexport class NodeInfoRpcClient {\n _transport;\n typeName = NodeInfoRpc.typeName;\n methods = NodeInfoRpc.methods;\n options = NodeInfoRpc.options;\n constructor(_transport) {\n this._transport = _transport;\n }\n /**\n * @generated from protobuf rpc: getInfo\n */\n getInfo(input, options) {\n const method = this.methods[0], opt = this._transport.mergeOptions(options);\n return stackIntercept(\"unary\", this._transport, method, opt, input);\n }\n}\n/**\n * @generated from protobuf service PlumtreeRpc\n */\nexport class PlumtreeRpcClient {\n _transport;\n typeName = PlumtreeRpc.typeName;\n methods = PlumtreeRpc.methods;\n options = PlumtreeRpc.options;\n constructor(_transport) {\n this._transport = _transport;\n }\n /**\n * @generated from protobuf rpc: pauseNeighbor\n */\n pauseNeighbor(input, options) {\n const method = this.methods[0], opt = this._transport.mergeOptions(options);\n return stackIntercept(\"unary\", this._transport, method, opt, input);\n }\n /**\n * @generated from protobuf rpc: resumeNeighbor\n */\n resumeNeighbor(input, options) {\n const method = this.methods[1], opt = this._transport.mergeOptions(options);\n return stackIntercept(\"unary\", this._transport, method, opt, input);\n }\n /**\n * @generated from protobuf rpc: sendMetadata\n */\n sendMetadata(input, options) {\n const method = this.methods[2], opt = this._transport.mergeOptions(options);\n return stackIntercept(\"unary\", this._transport, method, opt, input);\n }\n}\n//# sourceMappingURL=NetworkRpc.client.js.map","import { RpcRemote } from '@streamr/dht';\nimport { Logger } from '@streamr/utils';\nconst logger = new Logger('ContentDeliveryRpcRemote');\nexport class ContentDeliveryRpcRemote extends RpcRemote {\n rtt;\n async sendStreamMessage(msg, bufferWhileConnecting) {\n const options = this.formDhtRpcOptions({\n notification: true,\n bufferWhileConnecting\n });\n this.getClient().sendStreamMessage(msg, options).catch(() => {\n logger.trace('Failed to sendStreamMessage');\n });\n }\n leaveStreamPartNotice(streamPartId, isLocalNodeEntryPoint) {\n const notification = {\n streamPartId,\n isEntryPoint: isLocalNodeEntryPoint\n };\n const options = this.formDhtRpcOptions({\n notification: true\n });\n this.getClient().leaveStreamPartNotice(notification, options).catch(() => {\n logger.debug('Failed to send leaveStreamPartNotice');\n });\n }\n setRtt(rtt) {\n this.rtt = rtt;\n }\n getRtt() {\n return this.rtt;\n }\n}\n//# sourceMappingURL=ContentDeliveryRpcRemote.js.map","import { toDhtAddress, toNodeId } from '@streamr/dht';\nimport { Logger } from '@streamr/utils';\nconst logger = new Logger('HandshakeRpcLocal');\nexport class HandshakeRpcLocal {\n options;\n constructor(options) {\n this.options = options;\n }\n async handshake(request, context) {\n return this.handleRequest(request, context);\n }\n handleRequest(request, context) {\n const senderDescriptor = context.incomingSourceDescriptor;\n const getInterleaveNodeIds = () => (request.interleaveNodeId !== undefined) ? [toDhtAddress(request.interleaveNodeId)] : [];\n const senderNodeId = toNodeId(senderDescriptor);\n if (this.options.ongoingInterleaves.has(senderNodeId)) {\n return this.rejectHandshake(request);\n }\n else if (this.options.neighbors.has(senderNodeId)\n || this.options.ongoingHandshakes.has(senderNodeId)) {\n return this.acceptHandshake(request, senderDescriptor);\n }\n else if (this.options.neighbors.size() + this.options.ongoingHandshakes.size < this.options.maxNeighborCount) {\n return this.acceptHandshake(request, senderDescriptor);\n }\n else if (this.options.neighbors.size(getInterleaveNodeIds()) - this.options.ongoingInterleaves.size >= 2\n && this.options.neighbors.size() <= this.options.maxNeighborCount) {\n // Do not accept the handshakes requests if the target neighbor count can potentially drop below 2 \n // due to interleaving. This ensures that a stable number of connections is kept during high churn.\n return this.acceptHandshakeWithInterleaving(request, senderDescriptor);\n }\n else {\n return this.rejectHandshake(request);\n }\n }\n acceptHandshake(request, requester) {\n const res = {\n requestId: request.requestId,\n accepted: true\n };\n this.options.neighbors.add(this.options.createContentDeliveryRpcRemote(requester));\n return res;\n }\n // eslint-disable-next-line class-methods-use-this\n rejectHandshake(request) {\n const res = {\n requestId: request.requestId,\n accepted: false\n };\n return res;\n }\n acceptHandshakeWithInterleaving(request, requester) {\n const exclude = [];\n request.neighborNodeIds.forEach((id) => exclude.push(toDhtAddress(id)));\n this.options.ongoingInterleaves.forEach((id) => exclude.push(id));\n exclude.push(toNodeId(requester));\n if (request.interleaveNodeId !== undefined) {\n exclude.push(toDhtAddress(request.interleaveNodeId));\n }\n const last = this.options.neighbors.getLast(exclude);\n const lastPeerDescriptor = last ? last.getPeerDescriptor() : undefined;\n if (last) {\n const nodeId = toNodeId(last.getPeerDescriptor());\n const remote = this.options.createRpcRemote(last.getPeerDescriptor());\n this.options.ongoingInterleaves.add(nodeId);\n // Run this with then catch instead of setImmediate to avoid changes in state\n // eslint-disable-next-line promise/catch-or-return\n remote.interleaveRequest(requester).then((response) => {\n // If response is accepted, remove the last node from the target neighbors\n // and unlock the connection\n // If response is not accepted, keep the last node as a neighbor\n if (response.accepted) {\n this.options.neighbors.remove(toNodeId(lastPeerDescriptor));\n }\n }).catch(() => {\n // no-op: InterleaveRequest cannot reject\n }).finally(() => {\n this.options.ongoingInterleaves.delete(nodeId);\n });\n }\n this.options.neighbors.add(this.options.createContentDeliveryRpcRemote(requester));\n return {\n requestId: request.requestId,\n accepted: true,\n interleaveTargetDescriptor: lastPeerDescriptor\n };\n }\n async interleaveRequest(message, context) {\n const senderPeerDescriptor = context.incomingSourceDescriptor;\n const remoteNodeId = toNodeId(senderPeerDescriptor);\n try {\n await this.options.handshakeWithInterleaving(message.interleaveTargetDescriptor, remoteNodeId);\n this.options.neighbors.remove(remoteNodeId);\n return { accepted: true };\n }\n catch (err) {\n logger.debug(`interleaveRequest to ${toNodeId(message.interleaveTargetDescriptor)} failed`, { err });\n return { accepted: false };\n }\n }\n}\n//# sourceMappingURL=HandshakeRpcLocal.js.map","import { RpcRemote, toNodeId, toDhtAddressRaw } from '@streamr/dht';\nimport { Logger } from '@streamr/utils';\nimport { v4 } from 'uuid';\nconst logger = new Logger('HandshakeRpcRemote');\nexport const INTERLEAVE_REQUEST_TIMEOUT = 10000;\nexport class HandshakeRpcRemote extends RpcRemote {\n async handshake(streamPartId, neighborNodeIds, concurrentHandshakeNodeId, interleaveNodeId) {\n const request = {\n streamPartId,\n requestId: v4(),\n neighborNodeIds: neighborNodeIds.map((id) => toDhtAddressRaw(id)),\n concurrentHandshakeNodeId: (concurrentHandshakeNodeId !== undefined) ? toDhtAddressRaw(concurrentHandshakeNodeId) : undefined,\n interleaveNodeId: (interleaveNodeId !== undefined) ? toDhtAddressRaw(interleaveNodeId) : undefined\n };\n try {\n const response = await this.getClient().handshake(request, this.formDhtRpcOptions());\n return {\n accepted: response.accepted,\n interleaveTargetDescriptor: response.interleaveTargetDescriptor\n };\n }\n catch (err) {\n logger.debug(`handshake to ${toNodeId(this.getPeerDescriptor())} failed`, { err });\n return {\n accepted: false\n };\n }\n }\n async interleaveRequest(originatorDescriptor) {\n const request = {\n interleaveTargetDescriptor: originatorDescriptor\n };\n const options = this.formDhtRpcOptions({\n connect: false,\n timeout: INTERLEAVE_REQUEST_TIMEOUT\n });\n try {\n const res = await this.getClient().interleaveRequest(request, options);\n return {\n accepted: res.accepted\n };\n }\n catch (err) {\n logger.debug(`interleaveRequest to ${toNodeId(this.getPeerDescriptor())} failed`, { err });\n return {\n accepted: false\n };\n }\n }\n}\n//# sourceMappingURL=HandshakeRpcRemote.js.map","import { toNodeId } from '@streamr/dht';\nimport { Logger } from '@streamr/utils';\nimport { InterleaveRequest, InterleaveResponse, StreamPartHandshakeRequest, StreamPartHandshakeResponse } from '../../../generated/packages/trackerless-network/protos/NetworkRpc';\nimport { ContentDeliveryRpcClient, HandshakeRpcClient } from '../../../generated/packages/trackerless-network/protos/NetworkRpc.client';\nimport { ContentDeliveryRpcRemote } from '../ContentDeliveryRpcRemote';\nimport { HandshakeRpcLocal } from './HandshakeRpcLocal';\nimport { HandshakeRpcRemote, INTERLEAVE_REQUEST_TIMEOUT } from './HandshakeRpcRemote';\nconst logger = new Logger('Handshaker');\nconst PARALLEL_HANDSHAKE_COUNT = 2;\nexport class Handshaker {\n options;\n rpcLocal;\n constructor(options) {\n this.options = options;\n this.rpcLocal = new HandshakeRpcLocal({\n streamPartId: this.options.streamPartId,\n neighbors: this.options.neighbors,\n ongoingHandshakes: this.options.ongoingHandshakes,\n ongoingInterleaves: new Set(),\n maxNeighborCount: this.options.maxNeighborCount,\n handshakeWithInterleaving: (target, remoteNodeId) => this.handshakeWithInterleaving(target, remoteNodeId),\n createRpcRemote: (target) => this.createRpcRemote(target),\n createContentDeliveryRpcRemote: (target) => this.createContentDeliveryRpcRemote(target)\n });\n this.options.rpcCommunicator.registerRpcMethod(InterleaveRequest, InterleaveResponse, 'interleaveRequest', (req, context) => this.rpcLocal.interleaveRequest(req, context), { timeout: INTERLEAVE_REQUEST_TIMEOUT });\n this.options.rpcCommunicator.registerRpcMethod(StreamPartHandshakeRequest, StreamPartHandshakeResponse, 'handshake', (req, context) => this.rpcLocal.handshake(req, context));\n }\n async attemptHandshakesOnContacts(excludedIds) {\n // TODO use options option or named constant? or why the value 2?\n if (this.options.neighbors.size() + this.options.ongoingHandshakes.size < this.options.maxNeighborCount - 2) {\n logger.trace(`Attempting parallel handshakes with ${PARALLEL_HANDSHAKE_COUNT} targets`);\n return this.selectParallelTargetsAndHandshake(excludedIds);\n }\n else if (this.options.neighbors.size() + this.options.ongoingHandshakes.size < this.options.maxNeighborCount) {\n logger.trace(`Attempting handshake with new target`);\n return this.selectNewTargetAndHandshake(excludedIds);\n }\n return excludedIds;\n }\n async selectParallelTargetsAndHandshake(excludedIds) {\n const exclude = excludedIds.concat(this.options.neighbors.getIds());\n const targets = this.selectParallelTargets(exclude);\n targets.forEach((contact) => this.options.ongoingHandshakes.add(toNodeId(contact.getPeerDescriptor())));\n return this.doParallelHandshakes(targets, exclude);\n }\n selectParallelTargets(excludedIds) {\n const targets = new Map();\n const getExcludedIds = () => [...excludedIds, ...Array.from(targets.keys())];\n // Step 1: If no neighbors, try to find a WebSocket node first\n if (this.options.neighbors.size() === 0) {\n const wsNode = this.options.nearbyNodeView.getFirst(getExcludedIds(), true);\n if (wsNode) {\n const wsNodeId = toNodeId(wsNode.getPeerDescriptor());\n targets.set(wsNodeId, wsNode);\n }\n }\n // Step 2: Add left and right contacts from the ring\n const left = this.options.leftNodeView.getFirst(getExcludedIds());\n const right = this.options.rightNodeView.getFirst(getExcludedIds());\n if (left) {\n targets.set(toNodeId(left.getPeerDescriptor()), left);\n }\n if (right) {\n targets.set(toNodeId(right.getPeerDescriptor()), right);\n }\n // Step 3: Add closest contact based on Kademlia metric if needed\n if (targets.size < PARALLEL_HANDSHAKE_COUNT) {\n const closest = this.options.nearbyNodeView.getFirst(getExcludedIds());\n if (closest) {\n targets.set(toNodeId(closest.getPeerDescriptor()), closest);\n }\n }\n // Step 4: Fill remaining slots with random contacts\n while (targets.size < PARALLEL_HANDSHAKE_COUNT) {\n const random = this.options.randomNodeView.getRandom(getExcludedIds());\n if (!random) {\n break;\n }\n targets.set(toNodeId(random.getPeerDescriptor()), random);\n }\n return Array.from(targets.values()).map((neighbor) => this.createRpcRemote(neighbor.getPeerDescriptor()));\n }\n async doParallelHandshakes(targets, excludedIds) {\n const results = await Promise.allSettled(Array.from(targets.values()).map(async (target, i) => {\n const otherNode = i === 0 ? targets[1] : targets[0];\n // TODO better check (currently this condition is always true)\n const otherNodeId = otherNode ? toNodeId(otherNode.getPeerDescriptor()) : undefined;\n return this.handshakeWithTarget(target, otherNodeId);\n }));\n results.forEach((res, i) => {\n if (res.status !== 'fulfilled' || !res.value) {\n excludedIds.push(toNodeId(targets[i].getPeerDescriptor()));\n }\n });\n return excludedIds;\n }\n async selectNewTargetAndHandshake(excludedIds) {\n const exclude = excludedIds.concat(this.options.neighbors.getIds());\n const target = this.options.leftNodeView.getFirst(exclude)\n ?? this.options.rightNodeView.getFirst(exclude)\n ?? this.options.nearbyNodeView.getFirst(exclude)\n ?? this.options.randomNodeView.getRandom(exclude);\n if (target) {\n const accepted = await this.handshakeWithTarget(this.createRpcRemote(target.getPeerDescriptor()));\n if (!accepted) {\n excludedIds.push(toNodeId(target.getPeerDescriptor()));\n }\n }\n return excludedIds;\n }\n async handshakeWithTarget(target, concurrentNodeId) {\n const targetNodeId = toNodeId(target.getPeerDescriptor());\n this.options.ongoingHandshakes.add(targetNodeId);\n const result = await target.handshake(this.options.streamPartId, this.options.neighbors.getIds(), concurrentNodeId);\n if (result.accepted) {\n this.options.neighbors.add(this.createContentDeliveryRpcRemote(target.getPeerDescriptor()));\n }\n if (result.interleaveTargetDescriptor) {\n await this.handshakeWithInterleaving(result.interleaveTargetDescriptor, targetNodeId);\n }\n this.options.ongoingHandshakes.delete(targetNodeId);\n return result.accepted;\n }\n async handshakeWithInterleaving(target, remoteNodeId) {\n const remote = this.createRpcRemote(target);\n const targetNodeId = toNodeId(remote.getPeerDescriptor());\n this.options.ongoingHandshakes.add(targetNodeId);\n const result = await remote.handshake(this.options.streamPartId, this.options.neighbors.getIds(), undefined, remoteNodeId);\n if (result.accepted) {\n this.options.neighbors.add(this.createContentDeliveryRpcRemote(remote.getPeerDescriptor()));\n }\n this.options.ongoingHandshakes.delete(targetNodeId);\n return result.accepted;\n }\n createRpcRemote(targetPeerDescriptor) {\n return new HandshakeRpcRemote(this.options.localPeerDescriptor, targetPeerDescriptor, this.options.rpcCommunicator, HandshakeRpcClient, this.options.rpcRequestTimeout);\n }\n createContentDeliveryRpcRemote(targetPeerDescriptor) {\n return new ContentDeliveryRpcRemote(this.options.localPeerDescriptor, targetPeerDescriptor, this.options.rpcCommunicator, ContentDeliveryRpcClient, this.options.rpcRequestTimeout);\n }\n getOngoingHandshakes() {\n return this.options.ongoingHandshakes;\n }\n}\n//# sourceMappingURL=Handshaker.js.map","import { Logger, setAbortableTimeout } from '@streamr/utils';\nconst INITIAL_WAIT = 100;\nconst INTERVAL = 250;\nconst logger = new Logger('NeighborFinder');\nexport class NeighborFinder {\n abortController;\n options;\n running = false;\n constructor(options) {\n this.options = options;\n this.abortController = new AbortController();\n }\n async findNeighbors(excluded) {\n if (!this.running) {\n return;\n }\n const newExcludes = await this.options.doFindNeighbors(excluded);\n const uniqueContactCount = new Set([\n ...this.options.nearbyNodeView.getIds(),\n ...this.options.leftNodeView.getIds(),\n ...this.options.rightNodeView.getIds(),\n ...this.options.randomNodeView.getIds()\n ]).size;\n if (this.options.neighbors.size() < this.options.minCount && newExcludes.length < uniqueContactCount) {\n // TODO should we catch possible promise rejection?\n setAbortableTimeout(() => this.findNeighbors(newExcludes), INTERVAL, this.abortController.signal);\n }\n else if (this.options.neighbors.size() === 0 && uniqueContactCount > 0) {\n logger.debug('No neighbors found yet contacts are available, restarting handshaking process');\n setAbortableTimeout(() => this.findNeighbors([]), INTERVAL, this.abortController.signal);\n }\n else {\n this.running = false;\n }\n }\n isRunning() {\n return this.running;\n }\n start(excluded = []) {\n if (this.running) {\n return;\n }\n this.running = true;\n // TODO should we catch possible promise rejection?\n setAbortableTimeout(async () => {\n await Promise.all([\n this.findNeighbors(excluded),\n this.findNeighbors(excluded)\n ]);\n }, INITIAL_WAIT, this.abortController.signal);\n }\n stop() {\n if (!this.running) {\n return;\n }\n this.running = false;\n this.abortController.abort();\n }\n}\n//# sourceMappingURL=NeighborFinder.js.map","import { toNodeId } from '@streamr/dht';\nimport { ContentDeliveryRpcClient } from '../../../generated/packages/trackerless-network/protos/NetworkRpc.client';\nimport { ContentDeliveryRpcRemote } from '../ContentDeliveryRpcRemote';\nexport class NeighborUpdateRpcLocal {\n options;\n constructor(options) {\n this.options = options;\n }\n updateContacts(neighborDescriptors) {\n const ownNodeId = toNodeId(this.options.localPeerDescriptor);\n const newPeerDescriptors = neighborDescriptors.filter((peerDescriptor) => {\n const nodeId = toNodeId(peerDescriptor);\n return nodeId !== ownNodeId && !this.options.neighbors.getIds().includes(nodeId);\n });\n newPeerDescriptors.forEach((peerDescriptor) => this.options.nearbyNodeView.add(new ContentDeliveryRpcRemote(this.options.localPeerDescriptor, peerDescriptor, this.options.rpcCommunicator, ContentDeliveryRpcClient)));\n }\n createResponse(removeMe) {\n return {\n streamPartId: this.options.streamPartId,\n neighborDescriptors: this.options.neighbors.getAll().map((neighbor) => neighbor.getPeerDescriptor()),\n removeMe\n };\n }\n // INeighborUpdateRpc server method\n async neighborUpdate(message, context) {\n const senderPeerDescriptor = context.incomingSourceDescriptor;\n const remoteNodeId = toNodeId(senderPeerDescriptor);\n this.updateContacts(message.neighborDescriptors);\n if (!this.options.neighbors.has(remoteNodeId) && !this.options.ongoingHandshakes.has(remoteNodeId)) {\n return this.createResponse(true);\n }\n else {\n const isOverNeighborCount = this.options.neighbors.size() > this.options.neighborTargetCount\n // Motivation: We don't know the remote's neighborTargetCount setting here. We only ask to cut connections\n // if the remote has a \"sufficient\" number of neighbors, where \"sufficient\" means our neighborTargetCount\n // setting.\n && message.neighborDescriptors.length > this.options.neighborTargetCount;\n if (!isOverNeighborCount) {\n this.options.neighborFinder.start();\n }\n else {\n this.options.neighbors.remove(remoteNodeId);\n }\n return this.createResponse(isOverNeighborCount);\n }\n }\n}\n//# sourceMappingURL=NeighborUpdateRpcLocal.js.map","import { RpcRemote, toNodeId } from '@streamr/dht';\nimport { Logger } from '@streamr/utils';\nconst logger = new Logger('NeighborUpdateRpcRemote');\nexport class NeighborUpdateRpcRemote extends RpcRemote {\n async updateNeighbors(streamPartId, neighbors) {\n const request = {\n streamPartId,\n neighborDescriptors: neighbors,\n removeMe: false\n };\n try {\n const response = await this.getClient().neighborUpdate(request, this.formDhtRpcOptions());\n return {\n peerDescriptors: response.neighborDescriptors,\n removeMe: response.removeMe\n };\n }\n catch (err) {\n logger.debug(`updateNeighbors to ${toNodeId(this.getPeerDescriptor())} failed`, { err });\n return {\n peerDescriptors: [],\n removeMe: true\n };\n }\n }\n}\n//# sourceMappingURL=NeighborUpdateRpcRemote.js.map","import { toNodeId } from '@streamr/dht';\nimport { Logger, scheduleAtInterval } from '@streamr/utils';\nimport { NeighborUpdate } from '../../../generated/packages/trackerless-network/protos/NetworkRpc';\nimport { NeighborUpdateRpcClient } from '../../../generated/packages/trackerless-network/protos/NetworkRpc.client';\nimport { NeighborUpdateRpcLocal } from './NeighborUpdateRpcLocal';\nimport { NeighborUpdateRpcRemote } from './NeighborUpdateRpcRemote';\nconst logger = new Logger('NeighborUpdateManager');\nexport const DEFAULT_NEIGHBOR_UPDATE_INTERVAL = 10 * 1000;\nexport class NeighborUpdateManager {\n abortController;\n options;\n rpcLocal;\n constructor(options) {\n this.abortController = new AbortController();\n this.rpcLocal = new NeighborUpdateRpcLocal(options);\n this.options = options;\n this.options.rpcCommunicator.registerRpcMethod(NeighborUpdate, NeighborUpdate, 'neighborUpdate', (req, context) => this.rpcLocal.neighborUpdate(req, context));\n }\n async start() {\n await scheduleAtInterval(() => this.updateNeighborInfo(), this.options.neighborUpdateInterval, false, this.abortController.signal);\n }\n stop() {\n this.abortController.abort();\n }\n async updateNeighborInfo() {\n logger.trace(`Updating neighbor info to nodes`);\n const neighborDescriptors = this.options.neighbors.getAll().map((neighbor) => neighbor.getPeerDescriptor());\n const startTime = Date.now();\n await Promise.allSettled(this.options.neighbors.getAll().map(async (neighbor) => {\n const res = await this.createRemote(neighbor.getPeerDescriptor()).updateNeighbors(this.options.streamPartId, neighborDescriptors);\n const nodeId = toNodeId(neighbor.getPeerDescriptor());\n this.options.neighbors.get(nodeId).setRtt(Date.now() - startTime);\n if (res.removeMe) {\n this.options.neighbors.remove(nodeId);\n this.options.neighborFinder.start([nodeId]);\n }\n }));\n }\n createRemote(targetPeerDescriptor) {\n return new NeighborUpdateRpcRemote(this.options.localPeerDescriptor, targetPeerDescriptor, this.options.rpcCommunicator, NeighborUpdateRpcClient);\n }\n}\n//# sourceMappingURL=NeighborUpdateManager.js.map","import { toNodeId } from '@streamr/dht';\nimport { Empty } from '../../generated/google/protobuf/empty';\nexport class ContentDeliveryRpcLocal {\n options;\n constructor(options) {\n this.options = options;\n }\n async sendStreamMessage(message, context) {\n const previousNode = context.incomingSourceDescriptor;\n const previousNodeId = toNodeId(previousNode);\n this.options.markForInspection(previousNodeId, message.messageId);\n if (this.options.plumtreeManager === undefined) {\n if (this.options.markAndCheckDuplicate(message.messageId, message.previousMessageRef)) {\n this.options.broadcast(message, previousNodeId);\n }\n }\n else if (this.options.markAndCheckDuplicate(message.messageId, message.previousMessageRef)) {\n // Message is not a duplicate, so we can broadcast it over the plumtree\n this.options.plumtreeManager.broadcast(message, previousNodeId);\n }\n else {\n // Message is a duplicate, so we need to pause the neighbor\n await this.options.plumtreeManager.pauseNeighbor(previousNode, message.messageId.messageChainId);\n }\n return Empty;\n }\n async leaveStreamPartNotice(message, context) {\n if (message.streamPartId === this.options.streamPartId) {\n const sourcePeerDescriptor = context.incomingSourceDescriptor;\n const remoteNodeId = toNodeId(sourcePeerDescriptor);\n this.options.onLeaveNotice(remoteNodeId, message.isEntryPoint);\n }\n return Empty;\n }\n}\n//# sourceMappingURL=ContentDeliveryRpcLocal.js.map","/**\n * Represent a pair of numbers (a,b). Ordering between two pairs is defined as\n * follows. First compare first numbers. Compare second numbers if first are\n * equal.\n */\nexport class NumberPair {\n a;\n b;\n constructor(a, b) {\n this.a = a;\n this.b = b;\n }\n greaterThanOrEqual(otherPair) {\n return this.greaterThan(otherPair) || this.equalTo(otherPair);\n }\n greaterThan(otherPair) {\n return this.compareTo(otherPair) === 1;\n }\n equalTo(otherPair) {\n return this.compareTo(otherPair) === 0;\n }\n compareTo(otherPair) {\n if (this.a > otherPair.a) {\n return 1;\n }\n if (this.a < otherPair.a) {\n return -1;\n }\n if (this.b > otherPair.b) {\n return 1;\n }\n if (this.b < otherPair.b) {\n return -1;\n }\n return 0;\n }\n toString() {\n return `${this.a}|${this.b}`;\n }\n}\nexport class InvalidNumberingError extends Error {\n constructor() {\n super('pre-condition: previousNumber < number');\n }\n}\nexport class GapMisMatchError extends Error {\n constructor(state, previousNumber, number) {\n super('pre-condition: gap overlap in given numbers:'\n + ` previousNumber=${previousNumber.toString()}, number=${number.toString()}, state=${state}`);\n }\n}\n/**\n *\n * Keeps track of a stream's message numbers and reports already seen numbers\n * as duplicates.\n *\n * Leverages the fact that message are assigned numbers from a strictly\n * increasing integer sequence for lowered space complexity. For example,\n * if we know that all messages up to number N have been seen, we can only\n * store the number N to provide message identity check. This is because\n * anything less than N can be deemed a duplicate.\n *\n * Messages arriving out-of-order makes this a bit harder since gaps form.\n * Most of the code in this class is built to deal with this complexity.\n * Basically, we need to keep track of which intervals [N,M] could still\n * contain unseen messages. We should also remove intervals after we are sure\n * that they contain no unseen messages.\n *\n * In addition to the above, there needs to be a limit to the number of\n * intervals we store, as it could well be that some messages never\n * arrive. The strategy is to start removing the lowest numbered\n * intervals when storage limits are hit.\n *\n */\nexport class DuplicateMessageDetector {\n maxGapCount;\n gaps;\n constructor(maxGapCount = 10000) {\n this.maxGapCount = maxGapCount;\n this.gaps = []; // ascending order of half-closed intervals (x,y] representing gaps that contain unseen message(s)\n }\n /**\n * returns true if number has not yet been seen (i.e. is not a duplicate)\n */\n markAndCheck(previousNumber, number) {\n if (previousNumber?.greaterThanOrEqual(number)) {\n throw new InvalidNumberingError();\n }\n if (this.gaps.length === 0) {\n this.gaps.push([number, new NumberPair(Infinity, Infinity)]);\n return true;\n }\n // Handle special case where previousNumber is not provided. Only\n // minimal duplicate detection is provided (comparing against latest\n // known message number).\n if (previousNumber === null) {\n if (number.greaterThan(this.gaps[this.gaps.length - 1][0])) {\n this.gaps[this.gaps.length - 1][0] = number;\n return true;\n }\n return false;\n }\n for (let i = this.gaps.length - 1; i >= 0; --i) {\n const [lowerBound, upperBound] = this.gaps[i]; // invariant: upperBound > lowerBound\n // implies number > upperBound (would've been handled in previous iteration if gap exists)\n if (previousNumber.greaterThanOrEqual(upperBound)) {\n return false;\n }\n if (previousNumber.greaterThanOrEqual(lowerBound)) {\n if (number.greaterThan(upperBound)) {\n throw new GapMisMatchError(this.toString(), previousNumber, number);\n }\n if (previousNumber.equalTo(lowerBound)) {\n if (number.equalTo(upperBound)) {\n this.gaps.splice(i, 1);\n }\n else {\n this.gaps[i] = [number, upperBound];\n }\n }\n else if (number.equalTo(upperBound)) {\n this.gaps[i] = [lowerBound, previousNumber];\n }\n else {\n this.gaps.splice(i, 1, [lowerBound, previousNumber], [number, upperBound]);\n }\n // invariants after:\n // - gaps are in ascending order\n // - the intersection between any two gaps is empty\n // - there are no gaps that define the empty set\n // - last gap is [n, Infinity]\n // - anything not covered by a gap is considered seen\n this.dropLowestGapIfOverMaxGapCount();\n return true;\n }\n if (number.greaterThan(lowerBound)) {\n throw new GapMisMatchError(this.toString(), previousNumber, number);\n }\n }\n return false;\n }\n dropLowestGapIfOverMaxGapCount() {\n // invariant: this.gaps.length <= this.maxGapCount + 1\n if (this.gaps.length > this.maxGapCount) {\n this.gaps.shift();\n }\n }\n toString() {\n return this.gaps.map(([lower, upper]) => `(${lower.toString()}, ${upper.toString()}]`).join(', ');\n }\n}\n//# sourceMappingURL=DuplicateMessageDetector.js.map","import { toUserId } from '@streamr/utils';\nimport { DuplicateMessageDetector, NumberPair } from './content-delivery-layer/DuplicateMessageDetector';\nexport const markAndCheckDuplicate = (duplicateDetectors, currentMessage, previousMessageRef) => {\n const detectorKey = `${toUserId(currentMessage.publisherId)}-${currentMessage.messageChainId}`;\n const previousNumberPair = previousMessageRef ?\n new NumberPair(Number(previousMessageRef.timestamp), previousMessageRef.sequenceNumber) : null;\n const currentNumberPair = new NumberPair(Number(currentMessage.timestamp), currentMessage.sequenceNumber);\n if (!duplicateDetectors.has(detectorKey)) {\n duplicateDetectors.set(detectorKey, new DuplicateMessageDetector());\n }\n return duplicateDetectors.get(detectorKey).markAndCheck(previousNumberPair, currentNumberPair);\n};\n//# sourceMappingURL=utils.js.map","import { toNodeId, } from '@streamr/dht';\nimport { Logger, addManagedEventListener } from '@streamr/utils';\nimport { EventEmitter } from 'eventemitter3';\nimport { CloseTemporaryConnection, LeaveStreamPartNotice, StreamMessage, TemporaryConnectionRequest, TemporaryConnectionResponse, } from '../../generated/packages/trackerless-network/protos/NetworkRpc';\nimport { ContentDeliveryRpcClient } from '../../generated/packages/trackerless-network/protos/NetworkRpc.client';\nimport { ContentDeliveryRpcLocal } from './ContentDeliveryRpcLocal';\nimport { ContentDeliveryRpcRemote } from './ContentDeliveryRpcRemote';\nimport { markAndCheckDuplicate } from '../utils';\nexport const DEFAULT_NODE_VIEW_SIZE = 20;\nexport const DEFAULT_NEIGHBOR_TARGET_COUNT = 4;\nexport const DEFAULT_ACCEPT_PROXY_CONNECTIONS = false;\nconst logger = new Logger('ContentDeliveryLayerNode');\nexport class ContentDeliveryLayerNode extends EventEmitter {\n started = false;\n duplicateDetectors;\n options;\n contentDeliveryRpcLocal;\n abortController = new AbortController();\n messagesPropagated = 0;\n constructor(options) {\n super();\n this.options = options;\n this.duplicateDetectors = new Map();\n this.contentDeliveryRpcLocal = new ContentDeliveryRpcLocal({\n localPeerDescriptor: this.options.localPeerDescriptor,\n streamPartId: this.options.streamPartId,\n rpcCommunicator: this.options.rpcCommunicator,\n markAndCheckDuplicate: (msg, prev) => markAndCheckDuplicate(this.duplicateDetectors, msg, prev),\n broadcast: (message, previousNode) => this.broadcast(message, previousNode),\n onLeaveNotice: (remoteNodeId, sourceIsStreamEntryPoint) => {\n if (this.abortController.signal.aborted) {\n return;\n }\n const contact = this.options.nearbyNodeView.get(remoteNodeId)\n ?? this.options.randomNodeView.get(remoteNodeId)\n ?? this.options.neighbors.get(remoteNodeId)\n ?? this.options.proxyConnectionRpcLocal?.getConnection(remoteNodeId)?.remote;\n // TODO: check integrity of notifier?\n if (contact) {\n this.options.discoveryLayerNode.removeContact(remoteNodeId);\n this.options.neighbors.remove(remoteNodeId);\n this.options.nearbyNodeView.remove(remoteNodeId);\n this.options.randomNodeView.remove(remoteNodeId);\n this.options.leftNodeView.remove(remoteNodeId);\n this.options.rightNodeView.remove(remoteNodeId);\n this.options.neighborFinder.start([remoteNodeId]);\n this.options.proxyConnectionRpcLocal?.removeConnection(remoteNodeId);\n }\n if (sourceIsStreamEntryPoint) {\n this.emit('entryPointLeaveDetected');\n }\n },\n markForInspection: (remoteNodeId, messageId) => this.options.inspector.markMessage(remoteNodeId, messageId),\n plumtreeManager: this.options.plumtreeManager\n });\n }\n async start() {\n this.started = true;\n this.registerDefaultServerMethods();\n addManagedEventListener(this.options.discoveryLayerNode, 'nearbyContactAdded', () => this.onNearbyContactAdded(), this.abortController.signal);\n addManagedEventListener(this.options.discoveryLayerNode, 'nearbyContactRemoved', () => this.onNearbyContactRemoved(), this.abortController.signal);\n addManagedEventListener(this.options.discoveryLayerNode, 'randomContactAdded', () => this.onRandomContactAdded(), this.abortController.signal);\n addManagedEventListener(this.options.discoveryLayerNode, 'randomContactRemoved', () => this.onRandomContactRemoved(), this.abortController.signal);\n addManagedEventListener(this.options.discoveryLayerNode, 'ringContactAdded', () => this.onRingContactsUpdated(), this.abortController.signal);\n addManagedEventListener(this.options.discoveryLayerNode, 'ringContactRemoved', () => this.onRingContactsUpdated(), this.abortController.signal);\n addManagedEventListener(this.options.transport, 'disconnected', (peerDescriptor) => this.onNodeDisconnected(peerDescriptor), this.abortController.signal);\n addManagedEventListener(this.options.neighbors, 'nodeAdded', (id, remote) => {\n this.options.propagation.onNeighborJoined(id);\n this.options.connectionLocker.weakLockConnection(toNodeId(remote.getPeerDescriptor()), this.options.streamPartId);\n this.emit('neighborConnected', id);\n }, this.abortController.signal);\n addManagedEventListener(this.options.neighbors, 'nodeRemoved', (_id, remote) => {\n this.options.connectionLocker.weakUnlockConnection(toNodeId(remote.getPeerDescriptor()), this.options.streamPartId);\n }, this.abortController.signal);\n if (this.options.proxyConnectionRpcLocal !== undefined) {\n addManagedEventListener(this.options.proxyConnectionRpcLocal, 'newConnection', (id) => this.options.propagation.onNeighborJoined(id), this.abortController.signal);\n }\n if (this.options.plumtreeManager) {\n addManagedEventListener(this.options.plumtreeManager, 'message', (msg) => this.emit('message', msg), this.abortController.signal);\n }\n this.options.neighborFinder.start();\n await this.options.neighborUpdateManager.start();\n }\n registerDefaultServerMethods() {\n this.options.rpcCommunicator.registerRpcNotification(StreamMessage, 'sendStreamMessage', (msg, context) => this.contentDeliveryRpcLocal.sendStreamMessage(msg, context));\n this.options.rpcCommunicator.registerRpcNotification(LeaveStreamPartNotice, 'leaveStreamPartNotice', (req, context) => this.contentDeliveryRpcLocal.leaveStreamPartNotice(req, context));\n this.options.rpcCommunicator.registerRpcMethod(TemporaryConnectionRequest, TemporaryConnectionResponse, 'openConnection', (req, context) => this.options.temporaryConnectionRpcLocal.openConnection(req, context));\n this.options.rpcCommunicator.registerRpcNotification(CloseTemporaryConnection, 'closeConnection', (req, context) => this.options.temporaryConnectionRpcLocal.closeConnection(req, context));\n }\n onRingContactsUpdated() {\n logger.trace('onRingContactsUpdated');\n if (this.isStopped()) {\n return;\n }\n const contacts = this.options.discoveryLayerNode.getRingContacts();\n this.options.leftNodeView.replaceAll(contacts.left.map((peer) => new ContentDeliveryRpcRemote(this.options.localPeerDescriptor, peer, this.options.rpcCommunicator, ContentDeliveryRpcClient, this.options.rpcRequestTimeout)));\n this.options.rightNodeView.replaceAll(contacts.right.map((peer) => new ContentDeliveryRpcRemote(this.options.localPeerDescriptor, peer, this.options.rpcCommunicator, ContentDeliveryRpcClient, this.options.rpcRequestTimeout)));\n }\n onNearbyContactAdded() {\n logger.trace(`New nearby contact found`);\n if (this.isStopped()) {\n return;\n }\n const closestContacts = this.options.discoveryLayerNode.getClosestContacts();\n this.updateNearbyNodeView(closestContacts);\n if (this.options.neighbors.size() < this.options.neighborTargetCount) {\n this.options.neighborFinder.start();\n }\n }\n onNearbyContactRemoved() {\n logger.trace(`Nearby contact removed`);\n if (this.isStopped()) {\n return;\n }\n const closestContacts = this.options.discoveryLayerNode.getClosestContacts();\n this.updateNearbyNodeView(closestContacts);\n }\n updateNearbyNodeView(nodes) {\n this.options.nearbyNodeView.replaceAll(Array.from(nodes).map((descriptor) => new ContentDeliveryRpcRemote(this.options.localPeerDescriptor, descriptor, this.options.rpcCommunicator, ContentDeliveryRpcClient, this.options.rpcRequestTimeout)));\n for (const descriptor of this.options.discoveryLayerNode.getNeighbors()) {\n if (this.options.nearbyNodeView.size() >= this.options.nodeViewSize) {\n break;\n }\n this.options.nearbyNodeView.add(new ContentDeliveryRpcRemote(this.options.localPeerDescriptor, descriptor, this.options.rpcCommunicator, ContentDeliveryRpcClient, this.options.rpcRequestTimeout));\n }\n }\n onRandomContactAdded() {\n if (this.isStopped()) {\n return;\n }\n const randomContacts = this.options.discoveryLayerNode.getRandomContacts(this.options.nodeViewSize);\n this.options.randomNodeView.replaceAll(randomContacts.map((descriptor) => new ContentDeliveryRpcRemote(this.options.localPeerDescriptor, descriptor, this.options.rpcCommunicator, ContentDeliveryRpcClient, this.options.rpcRequestTimeout)));\n if (this.options.neighbors.size() < this.options.neighborTargetCount) {\n this.options.neighborFinder.start();\n }\n }\n onRandomContactRemoved() {\n logger.trace(`New random contact removed`);\n if (this.isStopped()) {\n return;\n }\n const randomContacts = this.options.discoveryLayerNode.getRandomContacts(this.options.nodeViewSize);\n this.options.randomNodeView.replaceAll(randomContacts.map((descriptor) => new ContentDeliveryRpcRemote(this.options.localPeerDescriptor, descriptor, this.options.rpcCommunicator, ContentDeliveryRpcClient, this.options.rpcRequestTimeout)));\n }\n onNodeDisconnected(peerDescriptor) {\n const nodeId = toNodeId(peerDescriptor);\n if (this.options.neighbors.has(nodeId)) {\n this.options.neighbors.remove(nodeId);\n this.options.neighborFinder.start([nodeId]);\n this.options.temporaryConnectionRpcLocal.removeNode(nodeId);\n }\n }\n hasProxyConnection(nodeId) {\n if (this.options.proxyConnectionRpcLocal) {\n return this.options.proxyConnectionRpcLocal.hasConnection(nodeId);\n }\n return false;\n }\n stop() {\n if (!this.started) {\n return;\n }\n this.abortController.abort();\n this.options.proxyConnectionRpcLocal?.stop();\n this.options.neighbors.getAll().map((remote) => {\n remote.leaveStreamPartNotice(this.options.streamPartId, this.options.isLocalNodeEntryPoint());\n this.options.connectionLocker.weakUnlockConnection(toNodeId(remote.getPeerDescriptor()), this.options.streamPartId);\n });\n this.options.rpcCommunicator.destroy();\n this.removeAllListeners();\n this.options.plumtreeManager?.stop();\n this.options.nearbyNodeView.stop();\n this.options.neighbors.stop();\n this.options.randomNodeView.stop();\n this.options.neighborFinder.stop();\n this.options.neighborUpdateManager.stop();\n this.options.inspector.stop();\n }\n broadcast(msg, previousNode) {\n if (!previousNode) {\n markAndCheckDuplicate(this.duplicateDetectors, msg.messageId, msg.previousMessageRef);\n }\n this.emit('message', msg);\n const skipBackPropagation = previousNode !== undefined && !this.options.temporaryConnectionRpcLocal.hasNode(previousNode);\n this.options.propagation.feedUnseenMessage(msg, this.getPropagationTargets(msg), skipBackPropagation ? previousNode : null);\n this.messagesPropagated += 1;\n }\n inspect(peerDescriptor) {\n return this.options.inspector.inspect(peerDescriptor);\n }\n getPropagationTargets(msg) {\n let propagationTargets = this.options.neighbors.getIds();\n if (this.options.proxyConnectionRpcLocal) {\n propagationTargets = propagationTargets.concat(this.options.proxyConnectionRpcLocal.getPropagationTargets(msg));\n }\n propagationTargets = propagationTargets.concat(this.options.temporaryConnectionRpcLocal.getNodes().getIds());\n return propagationTargets;\n }\n getOwnNodeId() {\n return toNodeId(this.options.localPeerDescriptor);\n }\n getOutgoingHandshakeCount() {\n return this.options.handshaker.getOngoingHandshakes().size;\n }\n getNeighbors() {\n if (!this.started && this.isStopped()) {\n return [];\n }\n return this.options.neighbors.getAll().map((n) => n.getPeerDescriptor());\n }\n getInfos() {\n return this.options.neighbors.getAll().map((n) => {\n return {\n peerDescriptor: n.getPeerDescriptor(),\n rtt: n.getRtt()\n };\n });\n }\n getNearbyNodeView() {\n return this.options.nearbyNodeView;\n }\n getDiagnosticInfo() {\n return {\n neighborCount: this.options.neighbors.size(),\n nearbyNodeViewCount: this.options.nearbyNodeView.size(),\n randomNodeViewCount: this.options.randomNodeView.size(),\n leftNodeViewCount: this.options.leftNodeView.size(),\n rightNodeViewCount: this.options.rightNodeView.size(),\n messagesPropagated: this.messagesPropagated\n };\n }\n isStopped() {\n return this.abortController.signal.aborted;\n }\n}\n//# sourceMappingURL=ContentDeliveryLayerNode.js.map","import { toNodeId } from '@streamr/dht';\nimport sample from 'lodash/sample';\nimport { EventEmitter } from 'eventemitter3';\nconst getValuesOfIncludedKeys = (nodes, exclude, wsOnly = false) => {\n const values = wsOnly\n ? Array.from(nodes.entries()).filter(([_, node]) => node.getPeerDescriptor().websocket !== undefined)\n : Array.from(nodes.entries());\n return values\n .filter(([id]) => !exclude.includes(id))\n .map(([_id, node]) => node);\n};\n// The items in the list are in the insertion order\nexport class NodeList extends EventEmitter {\n nodes;\n limit;\n ownId;\n constructor(ownId, limit) {\n super();\n this.nodes = new Map();\n this.limit = limit;\n this.ownId = ownId;\n }\n add(remote) {\n const nodeId = toNodeId(remote.getPeerDescriptor());\n if ((this.ownId !== nodeId) && (this.nodes.size < this.limit)) {\n const isExistingNode = this.nodes.has(nodeId);\n this.nodes.set(nodeId, remote);\n if (!isExistingNode) {\n this.emit('nodeAdded', nodeId, remote);\n }\n }\n }\n remove(nodeId) {\n if (this.nodes.has(nodeId)) {\n const remote = this.nodes.get(nodeId);\n this.nodes.delete(nodeId);\n this.emit('nodeRemoved', nodeId, remote);\n }\n }\n has(nodeId) {\n return this.nodes.has(nodeId);\n }\n // Replace nodes does not emit nodeRemoved events, use with caution\n replaceAll(neighbors) {\n this.nodes.clear();\n const limited = neighbors.splice(0, this.limit);\n limited.forEach((remote) => {\n this.add(remote);\n });\n }\n getIds() {\n return Array.from(this.nodes.keys());\n }\n get(id) {\n return this.nodes.get(id);\n }\n size(exclude = []) {\n return Array.from(this.nodes.keys()).filter((node) => !exclude.includes(node)).length;\n }\n getRandom(exclude) {\n return sample(getValuesOfIncludedKeys(this.nodes, exclude));\n }\n getFirst(exclude, wsOnly = false) {\n const included = getValuesOfIncludedKeys(this.nodes, exclude, wsOnly);\n return included[0];\n }\n getFirstAndLast(exclude) {\n const included = getValuesOfIncludedKeys(this.nodes, exclude);\n if (included.length === 0) {\n return [];\n }\n return included.length > 1 ? [this.getFirst(exclude), this.getLast(exclude)] : [this.getFirst(exclude)];\n }\n getLast(exclude) {\n const included = getValuesOfIncludedKeys(this.nodes, exclude);\n return included[included.length - 1];\n }\n getAll() {\n return Array.from(this.nodes.values());\n }\n stop() {\n this.nodes.forEach((node) => this.remove(toNodeId(node.getPeerDescriptor())));\n this.removeAllListeners();\n }\n}\n//# sourceMappingURL=NodeList.js.map","import { Node, Yallist } from 'yallist';\n/**\n * A \"Map\" implementation with a maximum size and TTL expiration on entries.\n *\n * When full, room is made for new entries by dropping existing by FIFO method.\n *\n * Entries have a TTL after which they are considered stale. Stale items are\n * not returned when querying.\n *\n */\nexport class FifoMapWithTTL {\n // class invariant: the keys present in `items` and `dropQueue` are the same set.\n items = new Map();\n dropQueue = Yallist.create(); // queue is used to determine deletion order when full\n ttlInMs;\n maxSize;\n onItemDropped;\n timeProvider;\n constructor({ ttlInMs, maxSize, onItemDropped = () => { }, timeProvider = Date.now }) {\n if (ttlInMs < 0) {\n throw new Error(`ttlInMs (${ttlInMs}) cannot be < 0`);\n }\n if (maxSize < 0) {\n throw new Error(`maxSize (${maxSize}) cannot be < 0`);\n }\n this.ttlInMs = ttlInMs;\n this.maxSize = maxSize;\n this.onItemDropped = onItemDropped;\n this.timeProvider = timeProvider;\n }\n set(key, value) {\n if (this.maxSize === 0) {\n return;\n }\n if (this.items.size > this.maxSize) {\n throw new Error('assertion error: maximum size exceeded');\n }\n // delete an existing entry if exists\n this.delete(key);\n // make room for new entry\n if (this.items.size === this.maxSize) {\n const keyToDel = this.dropQueue.shift();\n if (keyToDel === undefined) {\n throw new Error('assertion error: queue empty but still have items');\n }\n this.items.delete(keyToDel);\n this.onItemDropped(keyToDel);\n }\n // add entry\n const dropQueueNode = new Node(key);\n this.dropQueue.pushNode(dropQueueNode);\n this.items.set(key, {\n value,\n dropQueueNode,\n expiresAt: this.timeProvider() + this.ttlInMs\n });\n }\n delete(key) {\n const item = this.items.get(key);\n if (item !== undefined) {\n this.items.delete(key);\n this.dropQueue.removeNode(item.dropQueueNode);\n this.onItemDropped(key);\n }\n }\n get(key) {\n const item = this.items.get(key);\n if (item === undefined) {\n return undefined;\n }\n if (item.expiresAt <= this.timeProvider()) {\n this.delete(key);\n return undefined;\n }\n return item.value;\n }\n values() {\n const keys = [...this.items.keys()];\n const values = [];\n for (const key of keys) {\n const value = this.get(key);\n if (value !== undefined) {\n values.push(value);\n }\n }\n return values;\n }\n}\n//# sourceMappingURL=FifoMapWithTTL.js.map","import { FifoMapWithTTL } from './FifoMapWithTTL';\n/**\n * Keeps track of propagation tasks for the needs of message propagation logic.\n *\n * Properties:\n * - Allows fetching propagation tasks by StreamPartID\n * - Upper bound on number of tasks stored, replacement policy if FIFO\n * - Items have a TTL, after which they are considered stale and not returned when querying\n**/\nexport class PropagationTaskStore {\n tasks;\n constructor(ttlInMs, maxTasks) {\n this.tasks = new FifoMapWithTTL({\n ttlInMs,\n maxSize: maxTasks\n });\n }\n get() {\n return this.tasks.values();\n }\n add(task) {\n const messageId = task.message.messageId;\n this.tasks.set(messageId, task);\n }\n delete(messageId) {\n this.tasks.delete(messageId); // causes `onKeyDropped` to be invoked\n }\n}\n//# sourceMappingURL=PropagationTaskStore.js.map","import { PropagationTaskStore } from './PropagationTaskStore';\nexport const DEFAULT_PROPAGATION_BUFFER_TTL = 10 * 1000;\nexport const DEFAULT_MIN_PROPAGATION_TARGETS = 2;\nexport const DEFAULT_MAX_PROPAGATION_BUFFER_SIZE = 150;\n/**\n * Message propagation logic of a node. Given a message, this class will actively attempt to propagate it to\n * `minPropagationTargets` neighbors until success or TTL expiration.\n *\n * Setting `minPropagationTargets = 0` effectively disables any propagation reattempts. A message will then\n * only be propagated exactly once, to neighbors that are present at that moment, in a fire-and-forget manner.\n */\nexport class Propagation {\n sendToNeighbor;\n minPropagationTargets;\n activeTaskStore;\n constructor({ sendToNeighbor, minPropagationTargets, maxMessages, ttl }) {\n this.sendToNeighbor = sendToNeighbor;\n this.minPropagationTargets = minPropagationTargets;\n this.activeTaskStore = new PropagationTaskStore(ttl, maxMessages);\n }\n /**\n * Node should invoke this when it learns about a new message\n */\n feedUnseenMessage(message, targets, source) {\n const task = {\n message,\n source,\n handledNeighbors: new Set()\n };\n this.activeTaskStore.add(task);\n for (const target of targets) {\n this.sendAndAwaitThenMark(task, target);\n }\n }\n /**\n * Node should invoke this when it learns about a new node stream assignment\n */\n onNeighborJoined(neighborId) {\n const tasks = this.activeTaskStore.get();\n for (const task of tasks) {\n this.sendAndAwaitThenMark(task, neighborId);\n }\n }\n sendAndAwaitThenMark({ message, source, handledNeighbors }, neighborId) {\n if (!handledNeighbors.has(neighborId) && neighborId !== source) {\n (async () => {\n try {\n await this.sendToNeighbor(neighborId, message);\n }\n catch {\n return;\n }\n // Side-note: due to asynchronicity, the task being modified at this point could already be stale and\n // deleted from `activeTaskStore`. However, as modifying it or re-deleting it is pretty much\n // inconsequential at this point, leaving the logic as is.\n handledNeighbors.add(neighborId);\n if (handledNeighbors.size >= this.minPropagationTargets) {\n this.activeTaskStore.delete(message.messageId);\n }\n })();\n }\n }\n}\n//# sourceMappingURL=Propagation.js.map","import { toNodeId } from '@streamr/dht';\nimport { Logger, toUserId } from '@streamr/utils';\nimport { EventEmitter } from 'eventemitter3';\nimport { ProxyConnectionRequest, ProxyConnectionResponse, ProxyDirection } from '../../../generated/packages/trackerless-network/protos/NetworkRpc';\nimport { ContentDeliveryRpcClient } from '../../../generated/packages/trackerless-network/protos/NetworkRpc.client';\nimport { ContentDeliveryRpcRemote } from '../ContentDeliveryRpcRemote';\nconst logger = new Logger('ProxyConnectionRpcLocal');\nexport class ProxyConnectionRpcLocal extends EventEmitter {\n options;\n connections = new Map();\n constructor(options) {\n super();\n this.options = options;\n this.options.rpcCommunicator.registerRpcMethod(ProxyConnectionRequest, ProxyConnectionResponse, 'requestConnection', (msg, context) => this.requestConnection(msg, context));\n }\n getConnection(nodeId) {\n return this.connections.get(nodeId);\n }\n hasConnection(nodeId) {\n return this.connections.has(nodeId);\n }\n removeConnection(nodeId) {\n this.connections.delete(nodeId);\n }\n stop() {\n this.connections.forEach((connection) => connection.remote.leaveStreamPartNotice(this.options.streamPartId, false));\n this.connections.clear();\n this.removeAllListeners();\n }\n getPropagationTargets(msg) {\n if (msg.body.oneofKind === 'groupKeyRequest') {\n try {\n const recipientId = msg.body.groupKeyRequest.recipientId;\n return this.getNodeIdsForUserId(toUserId(recipientId));\n }\n catch (err) {\n logger.trace(`Could not parse GroupKeyRequest`, { err });\n return [];\n }\n }\n else {\n return this.getSubscribers();\n }\n }\n getNodeIdsForUserId(userId) {\n return Array.from(this.connections.keys()).filter((nodeId) => this.connections.get(nodeId).userId === userId);\n }\n getSubscribers() {\n return Array.from(this.connections.keys()).filter((key) => {\n const direction = this.connections.get(key).direction;\n return direction === undefined || direction === ProxyDirection.SUBSCRIBE;\n });\n }\n // IProxyConnectionRpc server method\n async requestConnection(request, context) {\n const senderPeerDescriptor = context.incomingSourceDescriptor;\n const remoteNodeId = toNodeId(senderPeerDescriptor);\n this.connections.set(remoteNodeId, {\n direction: request.direction,\n userId: toUserId(request.userId),\n remote: new ContentDeliveryRpcRemote(this.options.localPeerDescriptor, senderPeerDescriptor, this.options.rpcCommunicator, ContentDeliveryRpcClient)\n });\n const response = {\n accepted: true\n };\n logger.trace(`Accepted connection request from ${remoteNodeId} to ${this.options.streamPartId}`);\n this.emit('newConnection', remoteNodeId);\n return response;\n }\n}\n//# sourceMappingURL=ProxyConnectionRpcLocal.js.map","import { RpcRemote, toNodeId } from '@streamr/dht';\nimport { Logger } from '@streamr/utils';\nconst logger = new Logger('TemporaryConnectionRpcRemote');\nexport class TemporaryConnectionRpcRemote extends RpcRemote {\n async openConnection() {\n try {\n const response = await this.getClient().openConnection({}, this.formDhtRpcOptions());\n return response.accepted;\n }\n catch (err) {\n logger.debug(`temporaryConnection to ${toNodeId(this.getPeerDescriptor())} failed`, { err });\n return false;\n }\n }\n async closeConnection() {\n try {\n await this.getClient().closeConnection({}, this.formDhtRpcOptions({\n connect: false,\n notification: true\n }));\n }\n catch (err) {\n logger.trace(`closeConnection to ${toNodeId(this.getPeerDescriptor())} failed`, { err });\n }\n }\n}\n//# sourceMappingURL=TemporaryConnectionRpcRemote.js.map","import { toUserId } from '@streamr/utils';\nimport { EventEmitter } from 'eventemitter3';\nconst createMessageKey = (messageId) => {\n return `${toUserId(messageId.publisherId)}:${messageId.messageChainId}:${messageId.timestamp}:${messageId.sequenceNumber}`;\n};\nexport class InspectSession extends EventEmitter {\n // Boolean indicates if the message has been received by the inspected node\n inspectionMessages = new Map();\n inspectedNode;\n constructor(options) {\n super();\n this.inspectedNode = options.inspectedNode;\n }\n markMessage(remoteNodeId, messageId) {\n const messageKey = createMessageKey(messageId);\n if (!this.inspectionMessages.has(messageKey)) {\n this.inspectionMessages.set(messageKey, remoteNodeId === this.inspectedNode);\n }\n else if (this.inspectionMessages.has(messageKey)\n && this.inspectionMessages.get(messageKey) === false\n && remoteNodeId === this.inspectedNode) {\n this.emit('done');\n }\n else if (this.inspectionMessages.has(messageKey)\n && this.inspectionMessages.get(messageKey) === true) {\n this.emit('done');\n }\n }\n getInspectedMessageCount() {\n return this.inspectionMessages.size;\n }\n onlyMarkedByInspectedNode() {\n return Array.from(this.inspectionMessages.values()).every((value) => value === true);\n }\n stop() {\n this.emit('done');\n }\n}\n//# sourceMappingURL=InspectSession.js.map","import { toNodeId } from '@streamr/dht';\nimport { Logger, waitForEvent } from '@streamr/utils';\nimport { TemporaryConnectionRpcClient } from '../../../generated/packages/trackerless-network/protos/NetworkRpc.client';\nimport { TemporaryConnectionRpcRemote } from '../temporary-connection/TemporaryConnectionRpcRemote';\nimport { InspectSession } from './InspectSession';\nconst logger = new Logger('Inspector');\nconst DEFAULT_TIMEOUT = 60 * 1000;\nexport class Inspector {\n sessions = new Map();\n streamPartId;\n localPeerDescriptor;\n rpcCommunicator;\n connectionLocker;\n inspectionTimeout;\n openInspectConnection;\n closeInspectConnection;\n constructor(options) {\n this.streamPartId = options.streamPartId;\n this.localPeerDescriptor = options.localPeerDescriptor;\n this.rpcCommunicator = options.rpcCommunicator;\n this.connectionLocker = options.connectionLocker;\n this.inspectionTimeout = options.inspectionTimeout ?? DEFAULT_TIMEOUT;\n this.openInspectConnection = options.openInspectConnection ?? this.defaultOpenInspectConnection;\n this.closeInspectConnection = options.closeInspectConnection ?? this.defaultCloseInspectConnection;\n }\n async defaultOpenInspectConnection(peerDescriptor, lockId) {\n const rpcRemote = new TemporaryConnectionRpcRemote(this.localPeerDescriptor, peerDescriptor, this.rpcCommunicator, TemporaryConnectionRpcClient);\n await rpcRemote.openConnection();\n this.connectionLocker.weakLockConnection(toNodeId(peerDescriptor), lockId);\n }\n async defaultCloseInspectConnection(peerDescriptor, lockId) {\n const rpcRemote = new TemporaryConnectionRpcRemote(this.localPeerDescriptor, peerDescriptor, this.rpcCommunicator, TemporaryConnectionRpcClient);\n await rpcRemote.closeConnection();\n this.connectionLocker.weakUnlockConnection(toNodeId(peerDescriptor), lockId);\n }\n async inspect(peerDescriptor) {\n const nodeId = toNodeId(peerDescriptor);\n const session = new InspectSession({\n inspectedNode: nodeId\n });\n const lockId = `inspector-${this.streamPartId}`;\n this.sessions.set(nodeId, session);\n await this.openInspectConnection(peerDescriptor, lockId);\n let success = false;\n try {\n await waitForEvent(session, 'done', this.inspectionTimeout);\n success = true;\n }\n catch {\n logger.trace('Inspect session timed out, removing');\n }\n finally {\n await this.closeInspectConnection(peerDescriptor, lockId);\n this.sessions.delete(nodeId);\n }\n return success || session.getInspectedMessageCount() < 1 || session.onlyMarkedByInspectedNode();\n }\n markMessage(sender, messageId) {\n this.sessions.forEach((session) => session.markMessage(sender, messageId));\n }\n isInspected(nodeId) {\n return this.sessions.has(nodeId);\n }\n stop() {\n this.sessions.forEach((session) => {\n session.stop();\n });\n this.sessions.clear();\n }\n}\n//# sourceMappingURL=Inspector.js.map","import { toNodeId } from '@streamr/dht';\nimport { ContentDeliveryRpcClient } from '../../../generated/packages/trackerless-network/protos/NetworkRpc.client';\nimport { ContentDeliveryRpcRemote } from '../ContentDeliveryRpcRemote';\nimport { NodeList } from '../NodeList';\nconst LOCK_ID_BASE = 'system/content-delivery/temporary-connection/';\nexport class TemporaryConnectionRpcLocal {\n options;\n temporaryNodes;\n lockId;\n constructor(options) {\n this.options = options;\n // TODO use options option or named constant?\n this.temporaryNodes = new NodeList(toNodeId(options.localPeerDescriptor), 10);\n this.lockId = LOCK_ID_BASE + options.streamPartId;\n }\n getNodes() {\n return this.temporaryNodes;\n }\n hasNode(node) {\n return this.temporaryNodes.has(node);\n }\n removeNode(nodeId) {\n this.temporaryNodes.remove(nodeId);\n this.options.connectionLocker.weakUnlockConnection(nodeId, this.lockId);\n }\n async openConnection(_request, context) {\n const sender = context.incomingSourceDescriptor;\n const remote = new ContentDeliveryRpcRemote(this.options.localPeerDescriptor, sender, this.options.rpcCommunicator, ContentDeliveryRpcClient);\n this.temporaryNodes.add(remote);\n this.options.connectionLocker.weakLockConnection(toNodeId(sender), this.lockId);\n return {\n accepted: true\n };\n }\n async closeConnection(_request, context) {\n const remoteNodeId = toNodeId(context.incomingSourceDescriptor);\n this.removeNode(remoteNodeId);\n return {};\n }\n}\n//# sourceMappingURL=TemporaryConnectionRpcLocal.js.map","export const formStreamPartContentDeliveryServiceId = (streamPartId) => {\n // could be \"content-delivery\" instead of \"delivery\", but that is a breaking change\n return `stream-part-delivery-${streamPartId}`;\n};\n//# sourceMappingURL=formStreamPartDeliveryServiceId.js.map","import { toNodeId } from '@streamr/dht';\nimport { Empty } from '../../../generated/google/protobuf/empty';\nexport class PlumtreeRpcLocal {\n neighbors;\n pausedNodes;\n onMetadataCb;\n sendBuffer;\n constructor(neighbors, pausedNodes, onMetaDataCb, sendBuffer) {\n this.neighbors = neighbors;\n this.pausedNodes = pausedNodes;\n this.onMetadataCb = onMetaDataCb;\n this.sendBuffer = sendBuffer;\n }\n async sendMetadata(message, context) {\n const previousNode = context.incomingSourceDescriptor;\n await this.onMetadataCb(message, previousNode);\n return Empty;\n }\n async pauseNeighbor(request, context) {\n const sender = toNodeId(context.incomingSourceDescriptor);\n if (this.neighbors.has(sender)) {\n this.pausedNodes.add(sender, request.messageChainId);\n }\n return Empty;\n }\n async resumeNeighbor(request, context) {\n const sender = context.incomingSourceDescriptor;\n this.pausedNodes.delete(toNodeId(sender), request.messageChainId);\n await this.sendBuffer(request.fromTimestamp, request.messageChainId, sender);\n return Empty;\n }\n}\n//# sourceMappingURL=PlumtreeRpcLocal.js.map","import { RpcRemote } from '@streamr/dht';\nexport class PlumtreeRpcRemote extends RpcRemote {\n async sendMetadata(msg) {\n const options = this.formDhtRpcOptions({\n notification: true\n });\n await this.getClient().sendMetadata(msg, options);\n }\n async pauseNeighbor(messageChainId) {\n const options = this.formDhtRpcOptions({\n notification: true\n });\n await this.getClient().pauseNeighbor({ messageChainId }, options);\n }\n async resumeNeighbor(fromTimestamp, messageChainId) {\n const options = this.formDhtRpcOptions({\n notification: true\n });\n await this.getClient().resumeNeighbor({ fromTimestamp, messageChainId }, options);\n }\n}\n//# sourceMappingURL=PlumtreeRpcRemote.js.map","export class PausedNeighbors {\n pausedNeighbors;\n limit;\n constructor(limit) {\n this.pausedNeighbors = new Map();\n this.limit = limit;\n }\n add(node, msgChainId) {\n if (!this.pausedNeighbors.has(msgChainId)) {\n this.pausedNeighbors.set(msgChainId, new Set());\n }\n if (this.pausedNeighbors.get(msgChainId).size >= this.limit) {\n return;\n }\n this.pausedNeighbors.get(msgChainId).add(node);\n }\n delete(node, msgChainId) {\n this.pausedNeighbors.get(msgChainId)?.delete(node);\n if (this.pausedNeighbors.get(msgChainId)?.size === 0) {\n this.pausedNeighbors.delete(msgChainId);\n }\n }\n deleteAll(node) {\n this.pausedNeighbors.forEach((neighbors, msgChainId) => {\n neighbors.delete(node);\n if (neighbors.size === 0) {\n this.pausedNeighbors.delete(msgChainId);\n }\n });\n }\n isPaused(node, msgChainId) {\n if (!this.pausedNeighbors.has(msgChainId)) {\n return false;\n }\n return this.pausedNeighbors.get(msgChainId).has(node);\n }\n forEach(fn) {\n this.pausedNeighbors.forEach((neighbors, msgChainId) => {\n fn(neighbors, msgChainId);\n });\n }\n size(msgChainId) {\n return this.pausedNeighbors.get(msgChainId)?.size ?? 0;\n }\n}\n//# sourceMappingURL=PausedNeighbors.js.map","import { toNodeId } from '@streamr/dht';\nimport { MessageID, PauseNeighborRequest, ResumeNeighborRequest } from '../../../generated/packages/trackerless-network/protos/NetworkRpc';\nimport { PlumtreeRpcLocal } from './PlumtreeRpcLocal';\nimport { PlumtreeRpcRemote } from './PlumtreeRpcRemote';\nimport { ContentDeliveryRpcClient, PlumtreeRpcClient } from '../../../generated/packages/trackerless-network/protos/NetworkRpc.client';\nimport { EventEmitter } from 'eventemitter3';\nimport { Logger } from '@streamr/utils';\nimport { ContentDeliveryRpcRemote } from '../ContentDeliveryRpcRemote';\nimport { PausedNeighbors } from './PausedNeighbors';\nexport const MAX_PAUSED_NEIGHBORS_DEFAULT = 3;\nconst logger = new Logger('PlumtreeManager');\nexport class PlumtreeManager extends EventEmitter {\n neighbors;\n localPeerDescriptor;\n // We have paused sending real data to these neighbrs and only send metadata\n localPausedNeighbors;\n // We have asked these nodes to pause sending real data to us, used to limit sending of pausing and resuming requests\n remotePausedNeighbors;\n rpcLocal;\n latestMessages = new Map();\n rpcCommunicator;\n metadataTimestampsAheadOfRealData = new Map();\n maxPausedNeighbors;\n constructor(options) {\n super();\n this.neighbors = options.neighbors;\n this.maxPausedNeighbors = options.maxPausedNeighbors ?? MAX_PAUSED_NEIGHBORS_DEFAULT;\n this.localPeerDescriptor = options.localPeerDescriptor;\n this.localPausedNeighbors = new PausedNeighbors(options.maxPausedNeighbors ?? MAX_PAUSED_NEIGHBORS_DEFAULT);\n this.remotePausedNeighbors = new PausedNeighbors(options.maxPausedNeighbors ?? MAX_PAUSED_NEIGHBORS_DEFAULT);\n this.rpcLocal = new PlumtreeRpcLocal(this.neighbors, this.localPausedNeighbors, (metadata, previousNode) => this.onMetadata(metadata, previousNode), (fromTimestamp, msgChainId, remotePeerDescriptor) => this.sendBuffer(fromTimestamp, msgChainId, remotePeerDescriptor));\n this.neighbors.on('nodeRemoved', (nodeId) => this.onNeighborRemoved(nodeId));\n this.rpcCommunicator = options.rpcCommunicator;\n this.rpcCommunicator.registerRpcNotification(MessageID, 'sendMetadata', (msg, context) => this.rpcLocal.sendMetadata(msg, context));\n this.rpcCommunicator.registerRpcNotification(PauseNeighborRequest, 'pauseNeighbor', (msg, context) => this.rpcLocal.pauseNeighbor(msg, context));\n this.rpcCommunicator.registerRpcNotification(ResumeNeighborRequest, 'resumeNeighbor', (msg, context) => this.rpcLocal.resumeNeighbor(msg, context));\n }\n async pauseNeighbor(node, msgChainId) {\n if (this.neighbors.has(toNodeId(node))\n && !this.remotePausedNeighbors.isPaused(toNodeId(node), msgChainId)\n && this.remotePausedNeighbors.size(msgChainId) < this.maxPausedNeighbors) {\n logger.debug(`Pausing neighbor ${toNodeId(node)}`);\n this.remotePausedNeighbors.add(toNodeId(node), msgChainId);\n const remote = this.createRemote(node);\n await remote.pauseNeighbor(msgChainId);\n }\n }\n async resumeNeighbor(node, msgChainId, fromTimestamp) {\n if (this.remotePausedNeighbors.isPaused(toNodeId(node), msgChainId)) {\n logger.debug(`Resuming neighbor ${toNodeId(node)}`);\n this.remotePausedNeighbors.delete(toNodeId(node), msgChainId);\n const remote = this.createRemote(node);\n await remote.resumeNeighbor(fromTimestamp, msgChainId);\n }\n }\n onNeighborRemoved(nodeId) {\n this.localPausedNeighbors.deleteAll(nodeId);\n this.remotePausedNeighbors.deleteAll(nodeId);\n if (this.neighbors.size() > 0) {\n this.remotePausedNeighbors.forEach((pausedNeighbors, msgChainId) => {\n if (pausedNeighbors.size >= this.neighbors.size()) {\n logger.debug('All neighbors are paused, resuming first neighbor');\n const neighborToResume = this.neighbors.getFirst([]).getPeerDescriptor();\n setImmediate(() => this.resumeNeighbor(neighborToResume, msgChainId, this.getLatestMessageTimestamp(msgChainId)));\n }\n });\n }\n }\n getLatestMessageTimestamp(msgChainId) {\n if (!this.latestMessages.has(msgChainId) || this.latestMessages.get(msgChainId).length === 0) {\n return 0;\n }\n return this.latestMessages.get(msgChainId)[this.latestMessages.get(msgChainId).length - 1].messageId.timestamp;\n }\n async sendBuffer(fromTimestamp, msgChainId, neighbor) {\n const remote = new ContentDeliveryRpcRemote(this.localPeerDescriptor, neighbor, this.rpcCommunicator, ContentDeliveryRpcClient);\n const messages = this.latestMessages.get(msgChainId)?.filter((msg) => msg.messageId.timestamp > fromTimestamp) ?? [];\n await Promise.all(messages.map((msg) => remote.sendStreamMessage(msg)));\n }\n async onMetadata(msg, previousNode) {\n // If we receive newer metadata than messages in the buffer, resume the sending neighbor\n const latestMessageTimestamp = this.getLatestMessageTimestamp(msg.messageChainId);\n if (latestMessageTimestamp < msg.timestamp) {\n if (!this.metadataTimestampsAheadOfRealData.has(msg.messageChainId)) {\n this.metadataTimestampsAheadOfRealData.set(msg.messageChainId, new Set());\n }\n this.metadataTimestampsAheadOfRealData.get(msg.messageChainId).add(msg.timestamp);\n if (this.metadataTimestampsAheadOfRealData.get(msg.messageChainId).size > 1) {\n await this.resumeNeighbor(previousNode, msg.messageChainId, this.getLatestMessageTimestamp(msg.messageChainId));\n this.metadataTimestampsAheadOfRealData.get(msg.messageChainId).forEach((timestamp) => {\n this.metadataTimestampsAheadOfRealData.get(msg.messageChainId).delete(timestamp);\n });\n }\n }\n }\n createRemote(neighbor) {\n return new PlumtreeRpcRemote(this.localPeerDescriptor, neighbor, this.rpcCommunicator, PlumtreeRpcClient);\n }\n broadcast(msg, previousNode) {\n const messageChainId = msg.messageId.messageChainId;\n if (!this.latestMessages.has(messageChainId)) {\n this.latestMessages.set(messageChainId, []);\n }\n if (this.latestMessages.get(messageChainId).length < 20) {\n this.latestMessages.get(messageChainId).push(msg);\n }\n else {\n this.latestMessages.get(messageChainId).shift();\n this.latestMessages.get(messageChainId).push(msg);\n }\n if (this.metadataTimestampsAheadOfRealData.has(msg.messageId.messageChainId)) {\n this.metadataTimestampsAheadOfRealData.get(msg.messageId.messageChainId).delete(msg.messageId.timestamp);\n }\n this.emit('message', msg);\n const neighbors = this.neighbors.getAll().filter((neighbor) => toNodeId(neighbor.getPeerDescriptor()) !== previousNode);\n for (const neighbor of neighbors) {\n if (this.localPausedNeighbors.isPaused(toNodeId(neighbor.getPeerDescriptor()), msg.messageId.messageChainId)) {\n const remote = this.createRemote(neighbor.getPeerDescriptor());\n setImmediate(() => remote.sendMetadata(msg.messageId));\n }\n else {\n setImmediate(() => neighbor.sendStreamMessage(msg));\n }\n }\n }\n isNeighborPaused(node, msgChainId) {\n return this.localPausedNeighbors.isPaused(toNodeId(node), msgChainId)\n || this.remotePausedNeighbors.isPaused(toNodeId(node), msgChainId);\n }\n stop() {\n this.neighbors.off('nodeRemoved', this.onNeighborRemoved);\n }\n}\n//# sourceMappingURL=PlumtreeManager.js.map","import { ListeningRpcCommunicator, toNodeId } from '@streamr/dht';\nimport { Handshaker } from './neighbor-discovery/Handshaker';\nimport { NeighborFinder } from './neighbor-discovery/NeighborFinder';\nimport { DEFAULT_NEIGHBOR_UPDATE_INTERVAL, NeighborUpdateManager } from './neighbor-discovery/NeighborUpdateManager';\nimport { ContentDeliveryLayerNode, DEFAULT_NODE_VIEW_SIZE, DEFAULT_ACCEPT_PROXY_CONNECTIONS, DEFAULT_NEIGHBOR_TARGET_COUNT } from './ContentDeliveryLayerNode';\nimport { NodeList } from './NodeList';\nimport { DEFAULT_MIN_PROPAGATION_TARGETS, DEFAULT_MAX_PROPAGATION_BUFFER_SIZE, DEFAULT_PROPAGATION_BUFFER_TTL, Propagation } from './propagation/Propagation';\nimport { ProxyConnectionRpcLocal } from './proxy/ProxyConnectionRpcLocal';\nimport { Inspector } from './inspection/Inspector';\nimport { TemporaryConnectionRpcLocal } from './temporary-connection/TemporaryConnectionRpcLocal';\nimport { formStreamPartContentDeliveryServiceId } from './formStreamPartDeliveryServiceId';\nimport { PlumtreeManager } from './plumtree/PlumtreeManager';\nconst createConfigWithDefaults = (options) => {\n const ownNodeId = toNodeId(options.localPeerDescriptor);\n const rpcCommunicator = options.rpcCommunicator ?? new ListeningRpcCommunicator(formStreamPartContentDeliveryServiceId(options.streamPartId), options.transport);\n const neighborTargetCount = options.neighborTargetCount ?? DEFAULT_NEIGHBOR_TARGET_COUNT;\n const maxContactCount = options.maxContactCount ?? DEFAULT_NODE_VIEW_SIZE;\n const acceptProxyConnections = options.acceptProxyConnections ?? DEFAULT_ACCEPT_PROXY_CONNECTIONS;\n const neighborUpdateInterval = options.neighborUpdateInterval ?? DEFAULT_NEIGHBOR_UPDATE_INTERVAL;\n const minPropagationTargets = options.minPropagationTargets ?? DEFAULT_MIN_PROPAGATION_TARGETS;\n const maxPropagationBufferSize = options.maxPropagationBufferSize ?? DEFAULT_MAX_PROPAGATION_BUFFER_SIZE;\n const neighbors = options.neighbors ?? new NodeList(ownNodeId, maxContactCount);\n const leftNodeView = options.leftNodeView ?? new NodeList(ownNodeId, maxContactCount);\n const rightNodeView = options.rightNodeView ?? new NodeList(ownNodeId, maxContactCount);\n const nearbyNodeView = options.nearbyNodeView ?? new NodeList(ownNodeId, maxContactCount);\n const randomNodeView = options.randomNodeView ?? new NodeList(ownNodeId, maxContactCount);\n const ongoingHandshakes = new Set();\n const temporaryConnectionRpcLocal = new TemporaryConnectionRpcLocal({\n rpcCommunicator,\n localPeerDescriptor: options.localPeerDescriptor,\n streamPartId: options.streamPartId,\n connectionLocker: options.connectionLocker\n });\n const proxyConnectionRpcLocal = acceptProxyConnections ? new ProxyConnectionRpcLocal({\n localPeerDescriptor: options.localPeerDescriptor,\n streamPartId: options.streamPartId,\n rpcCommunicator\n }) : undefined;\n const plumtreeManager = options.plumtreeOptimization ? new PlumtreeManager({\n neighbors,\n localPeerDescriptor: options.localPeerDescriptor,\n rpcCommunicator,\n maxPausedNeighbors: options.plumtreeMaxPausedNeighbors\n }) : undefined;\n const propagation = options.propagation ?? new Propagation({\n minPropagationTargets,\n maxMessages: maxPropagationBufferSize,\n ttl: DEFAULT_PROPAGATION_BUFFER_TTL,\n sendToNeighbor: async (neighborId, msg) => {\n const remote = neighbors.get(neighborId) ?? temporaryConnectionRpcLocal.getNodes().get(neighborId);\n const proxyConnection = proxyConnectionRpcLocal?.getConnection(neighborId);\n if (remote) {\n await remote.sendStreamMessage(msg, options.bufferWhileConnecting);\n }\n else if (proxyConnection) {\n await proxyConnection.remote.sendStreamMessage(msg);\n }\n else {\n throw new Error('Propagation target not found');\n }\n }\n });\n const handshaker = options.handshaker ?? new Handshaker({\n localPeerDescriptor: options.localPeerDescriptor,\n streamPartId: options.streamPartId,\n rpcCommunicator,\n neighbors,\n leftNodeView,\n rightNodeView,\n nearbyNodeView,\n randomNodeView,\n maxNeighborCount: neighborTargetCount,\n rpcRequestTimeout: options.rpcRequestTimeout,\n ongoingHandshakes\n });\n const neighborFinder = options.neighborFinder ?? new NeighborFinder({\n neighbors,\n leftNodeView,\n rightNodeView,\n nearbyNodeView,\n randomNodeView,\n doFindNeighbors: (excludedIds) => handshaker.attemptHandshakesOnContacts(excludedIds),\n minCount: neighborTargetCount\n });\n const neighborUpdateManager = options.neighborUpdateManager ?? new NeighborUpdateManager({\n neighbors,\n nearbyNodeView,\n localPeerDescriptor: options.localPeerDescriptor,\n neighborFinder,\n streamPartId: options.streamPartId,\n rpcCommunicator,\n neighborUpdateInterval,\n neighborTargetCount,\n ongoingHandshakes\n });\n const inspector = options.inspector ?? new Inspector({\n localPeerDescriptor: options.localPeerDescriptor,\n rpcCommunicator,\n streamPartId: options.streamPartId,\n connectionLocker: options.connectionLocker\n });\n return {\n ...options,\n neighbors,\n leftNodeView,\n rightNodeView,\n nearbyNodeView,\n randomNodeView,\n rpcCommunicator,\n handshaker,\n neighborFinder,\n neighborUpdateManager,\n propagation,\n neighborTargetCount,\n nodeViewSize: maxContactCount,\n proxyConnectionRpcLocal,\n inspector,\n temporaryConnectionRpcLocal,\n plumtreeManager\n };\n};\nexport const createContentDeliveryLayerNode = (options) => {\n return new ContentDeliveryLayerNode(createConfigWithDefaults(options));\n};\n//# sourceMappingURL=createContentDeliveryLayerNode.js.map","import { EXISTING_CONNECTION_TIMEOUT, RpcRemote } from '@streamr/dht';\nimport { Logger, toUserIdRaw } from '@streamr/utils';\nconst logger = new Logger('ProxyConnectionRpcRemote');\nexport class ProxyConnectionRpcRemote extends RpcRemote {\n async requestConnection(userId, direction) {\n const request = {\n direction,\n userId: toUserIdRaw(userId)\n };\n const options = this.formDhtRpcOptions({\n timeout: EXISTING_CONNECTION_TIMEOUT\n });\n try {\n const res = await this.getClient().requestConnection(request, options);\n return res.accepted;\n }\n catch (err) {\n logger.debug(`ProxyConnectionRequest failed with error`, { err });\n return false;\n }\n }\n}\n//# sourceMappingURL=ProxyConnectionRpcRemote.js.map","import { ListeningRpcCommunicator, toNodeId } from '@streamr/dht';\nimport { Logger, addManagedEventListener, wait } from '@streamr/utils';\nimport { EventEmitter } from 'eventemitter3';\nimport sampleSize from 'lodash/sampleSize';\nimport { LeaveStreamPartNotice, StreamMessage } from '../../../generated/packages/trackerless-network/protos/NetworkRpc';\nimport { ContentDeliveryRpcClient, ProxyConnectionRpcClient } from '../../../generated/packages/trackerless-network/protos/NetworkRpc.client';\nimport { ContentDeliveryRpcLocal } from '../ContentDeliveryRpcLocal';\nimport { ContentDeliveryRpcRemote } from '../ContentDeliveryRpcRemote';\nimport { NodeList } from '../NodeList';\nimport { formStreamPartContentDeliveryServiceId } from '../formStreamPartDeliveryServiceId';\nimport { Propagation } from '../propagation/Propagation';\nimport { markAndCheckDuplicate } from '../../utils';\nimport { ProxyConnectionRpcRemote } from './ProxyConnectionRpcRemote';\n// TODO use options option or named constant?\nexport const retry = async (task, description, abortSignal, delay = 10000) => {\n while (true) {\n try {\n const result = await task();\n return result;\n }\n catch {\n logger.warn(`Failed ${description} (retrying after delay)`, {\n delayInMs: delay\n });\n }\n await wait(delay, abortSignal);\n }\n};\nconst logger = new Logger('ProxyClient');\nconst SERVICE_ID = 'system/proxy-client';\nexport class ProxyClient extends EventEmitter {\n rpcCommunicator;\n contentDeliveryRpcLocal;\n options;\n duplicateDetectors = new Map();\n definition;\n connections = new Map();\n propagation;\n neighbors;\n abortController;\n constructor(options) {\n super();\n this.options = options;\n this.rpcCommunicator = new ListeningRpcCommunicator(formStreamPartContentDeliveryServiceId(options.streamPartId), options.transport);\n // TODO use options option or named constant?\n this.neighbors = new NodeList(toNodeId(this.options.localPeerDescriptor), 1000);\n this.contentDeliveryRpcLocal = new ContentDeliveryRpcLocal({\n localPeerDescriptor: this.options.localPeerDescriptor,\n streamPartId: this.options.streamPartId,\n markAndCheckDuplicate: (msg, prev) => markAndCheckDuplicate(this.duplicateDetectors, msg, prev),\n broadcast: (message, previousNode) => this.broadcast(message, previousNode),\n onLeaveNotice: (remoteNodeId) => {\n const contact = this.neighbors.get(remoteNodeId);\n if (contact) {\n // TODO should we catch possible promise rejection?\n setImmediate(() => this.onNodeDisconnected(contact.getPeerDescriptor()));\n }\n },\n rpcCommunicator: this.rpcCommunicator,\n markForInspection: () => { }\n });\n this.propagation = new Propagation({\n minPropagationTargets: options.minPropagationTargets,\n maxMessages: options.maxPropagationBufferSize,\n ttl: options.propagationBufferTtl,\n sendToNeighbor: async (neighborId, msg) => {\n const remote = this.neighbors.get(neighborId);\n if (remote) {\n await remote.sendStreamMessage(msg);\n }\n else {\n throw new Error('Propagation target not found');\n }\n }\n });\n this.abortController = new AbortController();\n }\n registerDefaultServerMethods() {\n this.rpcCommunicator.registerRpcNotification(StreamMessage, 'sendStreamMessage', (msg, context) => this.contentDeliveryRpcLocal.sendStreamMessage(msg, context));\n this.rpcCommunicator.registerRpcNotification(LeaveStreamPartNotice, 'leaveStreamPartNotice', (req, context) => this.contentDeliveryRpcLocal.leaveStreamPartNotice(req, context));\n }\n async setProxies(nodes, userId, direction, connectionCount) {\n logger.trace('Setting proxies', { streamPartId: this.options.streamPartId, peerDescriptors: nodes, direction, userId, connectionCount });\n if (connectionCount !== undefined && connectionCount > nodes.length) {\n throw new Error('Cannot set connectionCount above the size of the configured array of nodes');\n }\n const nodesIds = new Map();\n nodes.forEach((peerDescriptor) => {\n nodesIds.set(toNodeId(peerDescriptor), peerDescriptor);\n });\n this.definition = {\n nodes: nodesIds,\n userId,\n direction,\n connectionCount: connectionCount ?? nodes.length\n };\n await this.updateConnections();\n }\n async updateConnections() {\n await Promise.all(this.getInvalidConnections().map(async (id) => {\n await this.closeConnection(id);\n }));\n const connectionCountDiff = this.definition.connectionCount - this.connections.size;\n if (connectionCountDiff > 0) {\n await this.openRandomConnections(connectionCountDiff);\n }\n else if (connectionCountDiff < 0) {\n await this.closeRandomConnections(-connectionCountDiff);\n }\n }\n getInvalidConnections() {\n return Array.from(this.connections.keys()).filter((id) => {\n return !this.definition.nodes.has(id)\n || this.definition.direction !== this.connections.get(id).direction;\n });\n }\n async openRandomConnections(connectionCount) {\n const proxiesToAttempt = sampleSize(Array.from(this.definition.nodes.keys()).filter((id) => !this.connections.has(id)), connectionCount);\n await Promise.all(proxiesToAttempt.map((id) => this.attemptConnection(id, this.definition.userId, this.definition.direction)));\n }\n async attemptConnection(nodeId, userId, direction) {\n const peerDescriptor = this.definition.nodes.get(nodeId);\n const rpcRemote = new ProxyConnectionRpcRemote(this.options.localPeerDescriptor, peerDescriptor, this.rpcCommunicator, ProxyConnectionRpcClient);\n const accepted = await rpcRemote.requestConnection(userId, direction);\n if (accepted) {\n this.options.connectionLocker.lockConnection(peerDescriptor, SERVICE_ID);\n this.connections.set(nodeId, { peerDescriptor, direction });\n const remote = new ContentDeliveryRpcRemote(this.options.localPeerDescriptor, peerDescriptor, this.rpcCommunicator, ContentDeliveryRpcClient);\n this.neighbors.add(remote);\n this.propagation.onNeighborJoined(nodeId);\n logger.info('Open proxy connection', {\n nodeId,\n streamPartId: this.options.streamPartId\n });\n }\n else {\n logger.warn('Unable to open proxy connection', {\n nodeId,\n streamPartId: this.options.streamPartId\n });\n }\n }\n async closeRandomConnections(connectionCount) {\n const proxiesToDisconnect = sampleSize(Array.from(this.connections.keys()), connectionCount);\n await Promise.allSettled(proxiesToDisconnect.map((node) => this.closeConnection(node)));\n }\n async closeConnection(nodeId) {\n if (this.connections.has(nodeId)) {\n logger.info('Close proxy connection', {\n nodeId\n });\n const server = this.neighbors.get(nodeId);\n server?.leaveStreamPartNotice(this.options.streamPartId, false);\n this.removeConnection(this.connections.get(nodeId).peerDescriptor);\n }\n }\n removeConnection(peerDescriptor) {\n const nodeId = toNodeId(peerDescriptor);\n this.connections.delete(nodeId);\n this.neighbors.remove(nodeId);\n this.options.connectionLocker.unlockConnection(peerDescriptor, SERVICE_ID);\n }\n broadcast(msg, previousNode) {\n if (!previousNode) {\n markAndCheckDuplicate(this.duplicateDetectors, msg.messageId, msg.previousMessageRef);\n }\n this.emit('message', msg);\n this.propagation.feedUnseenMessage(msg, this.neighbors.getIds(), previousNode ?? null);\n }\n hasConnection(nodeId, direction) {\n return this.connections.has(nodeId) && this.connections.get(nodeId).direction === direction;\n }\n getDirection() {\n return this.definition.direction;\n }\n async onNodeDisconnected(peerDescriptor) {\n const nodeId = toNodeId(peerDescriptor);\n if (this.connections.has(nodeId)) {\n this.options.connectionLocker.unlockConnection(peerDescriptor, SERVICE_ID);\n this.removeConnection(peerDescriptor);\n await retry(() => this.updateConnections(), 'updating proxy connections', this.abortController.signal);\n }\n }\n async start() {\n this.registerDefaultServerMethods();\n addManagedEventListener(this.options.transport, 'disconnected', \n // TODO should we catch possible promise rejection?\n (peerDescriptor) => this.onNodeDisconnected(peerDescriptor), this.abortController.signal);\n }\n getDiagnosticInfo() {\n return {\n neighbors: this.neighbors.getAll().map((neighbor) => neighbor.getPeerDescriptor()),\n };\n }\n stop() {\n this.neighbors.getAll().forEach((remote) => {\n this.options.connectionLocker.unlockConnection(remote.getPeerDescriptor(), SERVICE_ID);\n remote.leaveStreamPartNotice(this.options.streamPartId, false);\n });\n this.neighbors.stop();\n this.rpcCommunicator.destroy();\n this.connections.clear();\n this.abortController.abort();\n }\n}\n//# sourceMappingURL=ProxyClient.js.map","import { DhtNode, EXISTING_CONNECTION_TIMEOUT, toDhtAddress, toNodeId } from '@streamr/dht';\nimport { computeSha1, Logger, MetricsContext, RateMetric, StreamPartIDUtils, toStreamPartID } from '@streamr/utils';\nimport { EventEmitter } from 'eventemitter3';\nimport sampleSize from 'lodash/sampleSize';\nimport { MAX_NODE_COUNT, PeerDescriptorStoreManager } from './control-layer/PeerDescriptorStoreManager';\nimport { MIN_NEIGHBOR_COUNT as NETWORK_SPLIT_AVOIDANCE_MIN_NEIGHBOR_COUNT, StreamPartNetworkSplitAvoidance } from './StreamPartNetworkSplitAvoidance';\nimport { StreamPartReconnect } from './StreamPartReconnect';\nimport { createContentDeliveryLayerNode } from './content-delivery-layer/createContentDeliveryLayerNode';\nimport { ProxyClient } from './content-delivery-layer/proxy/ProxyClient';\nimport { DEFAULT_MAX_PROPAGATION_BUFFER_SIZE, DEFAULT_MIN_PROPAGATION_TARGETS, DEFAULT_PROPAGATION_BUFFER_TTL } from './content-delivery-layer/propagation/Propagation';\nconst logger = new Logger('ContentDeliveryManager');\nexport const streamPartIdToDataKey = (streamPartId) => {\n return toDhtAddress(computeSha1(streamPartId));\n};\nexport class ContentDeliveryManager extends EventEmitter {\n transport;\n connectionLocker;\n controlLayerNode;\n metricsContext;\n metrics;\n options;\n streamParts;\n knownStreamPartEntryPoints = new Map();\n started = false;\n destroyed = false;\n constructor(options) {\n super();\n this.options = options;\n this.streamParts = new Map();\n this.metricsContext = options.metricsContext ?? new MetricsContext();\n this.metrics = {\n broadcastMessagesPerSecond: new RateMetric(),\n broadcastBytesPerSecond: new RateMetric()\n };\n this.metricsContext.addMetrics('node', this.metrics);\n }\n async start(startedAndJoinedControlLayerNode, transport, connectionLocker) {\n if (this.started || this.destroyed) {\n return;\n }\n this.started = true;\n this.controlLayerNode = startedAndJoinedControlLayerNode;\n this.transport = transport;\n this.connectionLocker = connectionLocker;\n }\n async destroy() {\n if (!this.started || this.destroyed) {\n return;\n }\n logger.trace('Destroying ContentDeliveryManager');\n this.destroyed = true;\n await Promise.all(Array.from(this.streamParts.values()).map((streamPart) => streamPart.stop()));\n this.streamParts.clear();\n this.removeAllListeners();\n this.controlLayerNode = undefined;\n this.transport = undefined;\n this.connectionLocker = undefined;\n }\n broadcast(msg, streamPartDeliveryOptions) {\n const streamPartId = toStreamPartID(msg.messageId.streamId, msg.messageId.streamPartition);\n logger.debug(`Broadcasting to stream part ${streamPartId}`);\n this.joinStreamPart(streamPartId, streamPartDeliveryOptions);\n this.streamParts.get(streamPartId).broadcast(msg);\n if (msg.body.oneofKind === 'contentMessage') {\n this.metrics.broadcastMessagesPerSecond.record(1);\n this.metrics.broadcastBytesPerSecond.record(msg.body.contentMessage.content.length);\n }\n }\n async leaveStreamPart(streamPartId) {\n const streamPart = this.streamParts.get(streamPartId);\n if (streamPart) {\n await streamPart.stop();\n this.streamParts.delete(streamPartId);\n }\n }\n joinStreamPart(streamPartId, streamPartDeliveryOptions) {\n let streamPart = this.streamParts.get(streamPartId);\n if (streamPart !== undefined) {\n return;\n }\n logger.debug(`Join stream part ${streamPartId}`);\n const discoveryLayerNode = this.createDiscoveryLayerNode(streamPartId, this.knownStreamPartEntryPoints.get(streamPartId) ?? []);\n const peerDescriptorStoreManager = new PeerDescriptorStoreManager({\n key: streamPartIdToDataKey(streamPartId),\n localPeerDescriptor: this.getPeerDescriptor(),\n fetchDataFromDht: (key) => this.controlLayerNode.fetchDataFromDht(key),\n storeDataToDht: (key, data) => this.controlLayerNode.storeDataToDht(key, data),\n deleteDataFromDht: async (key, waitForCompletion) => this.controlLayerNode.deleteDataFromDht(key, waitForCompletion)\n });\n const networkSplitAvoidance = new StreamPartNetworkSplitAvoidance({\n discoveryLayerNode,\n discoverEntryPoints: async () => peerDescriptorStoreManager.fetchNodes()\n });\n const node = this.createContentDeliveryLayerNode(streamPartId, discoveryLayerNode, () => peerDescriptorStoreManager.isLocalNodeStored(), streamPartDeliveryOptions);\n const streamPartReconnect = new StreamPartReconnect(discoveryLayerNode, peerDescriptorStoreManager);\n streamPart = {\n proxied: false,\n discoveryLayerNode,\n node,\n networkSplitAvoidance,\n broadcast: (msg) => node.broadcast(msg),\n stop: async () => {\n streamPartReconnect.destroy();\n networkSplitAvoidance.destroy();\n await peerDescriptorStoreManager.destroy();\n node.stop();\n await discoveryLayerNode.stop();\n },\n getDiagnosticInfo: () => node.getDiagnosticInfo()\n };\n this.streamParts.set(streamPartId, streamPart);\n node.on('message', (message) => {\n this.emit('newMessage', message);\n });\n const handleEntryPointLeave = async () => {\n if (this.destroyed || peerDescriptorStoreManager.isLocalNodeStored() || this.knownStreamPartEntryPoints.has(streamPartId)) {\n return;\n }\n const entryPoints = await peerDescriptorStoreManager.fetchNodes();\n if (entryPoints.length < MAX_NODE_COUNT) {\n await peerDescriptorStoreManager.storeAndKeepLocalNode();\n }\n };\n discoveryLayerNode.on('manualRejoinRequired', async () => {\n if (!streamPartReconnect.isRunning() && !networkSplitAvoidance.isRunning()) {\n logger.debug('Manual rejoin required for stream part', { streamPartId });\n await streamPartReconnect.reconnect();\n }\n });\n node.on('entryPointLeaveDetected', () => handleEntryPointLeave());\n setImmediate(async () => {\n try {\n await this.startLayersAndJoinDht(streamPartId, peerDescriptorStoreManager);\n }\n catch (err) {\n logger.warn(`Failed to join to stream part ${streamPartId}`, { err });\n }\n });\n }\n async startLayersAndJoinDht(streamPartId, peerDescriptorStoreManager) {\n logger.debug(`Start layers and join DHT for stream part ${streamPartId}`);\n const streamPart = this.streamParts.get(streamPartId);\n if ((streamPart === undefined) || streamPart.proxied) {\n // leaveStreamPart has been called (or leaveStreamPart called, and then setProxies called)\n return;\n }\n if (this.transport.isPrivateClientMode()) {\n await this.transport.disablePrivateClientMode();\n }\n await streamPart.discoveryLayerNode.start();\n await streamPart.node.start();\n const knownEntryPoints = this.knownStreamPartEntryPoints.get(streamPartId);\n if (knownEntryPoints !== undefined) {\n await Promise.all([\n streamPart.discoveryLayerNode.joinDht(knownEntryPoints),\n streamPart.discoveryLayerNode.joinRing()\n ]);\n }\n else {\n const entryPoints = await peerDescriptorStoreManager.fetchNodes();\n await Promise.all([\n streamPart.discoveryLayerNode.joinDht(sampleSize(entryPoints, NETWORK_SPLIT_AVOIDANCE_MIN_NEIGHBOR_COUNT)),\n streamPart.discoveryLayerNode.joinRing()\n ]);\n if (entryPoints.length < MAX_NODE_COUNT) {\n await peerDescriptorStoreManager.storeAndKeepLocalNode();\n if (streamPart.discoveryLayerNode.getNeighborCount() < NETWORK_SPLIT_AVOIDANCE_MIN_NEIGHBOR_COUNT) {\n setImmediate(() => streamPart.networkSplitAvoidance.avoidNetworkSplit());\n }\n }\n }\n }\n createDiscoveryLayerNode(streamPartId, entryPoints) {\n return new DhtNode({\n transport: this.controlLayerNode,\n connectionsView: this.controlLayerNode.getConnectionsView(),\n serviceId: 'layer1::' + streamPartId,\n peerDescriptor: this.controlLayerNode.getLocalPeerDescriptor(),\n entryPoints,\n numberOfNodesPerKBucket: 4, // TODO use options option or named constant?\n rpcRequestTimeout: EXISTING_CONNECTION_TIMEOUT,\n dhtJoinTimeout: 20000, // TODO use options option or named constant?\n periodicallyPingNeighbors: true,\n periodicallyPingRingContacts: true,\n neighborPingLimit: 16\n });\n }\n createContentDeliveryLayerNode(streamPartId, discoveryLayerNode, isLocalNodeEntryPoint, streamPartDeliveryOptions) {\n return createContentDeliveryLayerNode({\n streamPartId,\n transport: this.transport,\n discoveryLayerNode,\n connectionLocker: this.connectionLocker,\n localPeerDescriptor: this.controlLayerNode.getLocalPeerDescriptor(),\n minPropagationTargets: this.options.streamPartitionMinPropagationTargets,\n neighborTargetCount: this.options.streamPartitionNeighborTargetCount,\n maxPropagationBufferSize: this.options.streamPartitionMaxPropagationBufferSize,\n acceptProxyConnections: this.options.acceptProxyConnections,\n rpcRequestTimeout: this.options.rpcRequestTimeout,\n neighborUpdateInterval: this.options.neighborUpdateInterval,\n isLocalNodeEntryPoint,\n bufferWhileConnecting: this.options.bufferWhileConnecting,\n plumtreeOptimization: streamPartDeliveryOptions?.plumtreeOptimization?.enabled,\n plumtreeMaxPausedNeighbors: streamPartDeliveryOptions?.plumtreeOptimization?.enabled === true ?\n streamPartDeliveryOptions?.plumtreeOptimization?.maxPausedNeighbors : undefined\n });\n }\n async setProxies(streamPartId, nodes, userId, direction, connectionCount) {\n // TODO explicit default value for \"acceptProxyConnections\" or make it required\n if (this.options.acceptProxyConnections) {\n throw new Error('cannot set proxies when acceptProxyConnections=true');\n }\n const enable = (nodes.length > 0) && ((connectionCount === undefined) || (connectionCount > 0));\n if (enable) {\n let client;\n const alreadyProxied = this.isProxiedStreamPart(streamPartId);\n if (alreadyProxied) {\n client = this.streamParts.get(streamPartId).client;\n }\n else {\n client = this.createProxyClient(streamPartId);\n this.streamParts.set(streamPartId, {\n proxied: true,\n client,\n broadcast: (msg) => client.broadcast(msg),\n stop: async () => client.stop(),\n getDiagnosticInfo: () => client.getDiagnosticInfo()\n });\n client.on('message', (message) => {\n this.emit('newMessage', message);\n });\n if (Array.from(this.streamParts.values()).every((streamPart) => streamPart.proxied)) {\n await this.transport.enablePrivateClientMode();\n }\n await client.start();\n }\n await client.setProxies(nodes, userId, direction, connectionCount);\n }\n else {\n await this.streamParts.get(streamPartId)?.stop();\n this.streamParts.delete(streamPartId);\n }\n }\n createProxyClient(streamPartId) {\n return new ProxyClient({\n transport: this.transport,\n localPeerDescriptor: this.controlLayerNode.getLocalPeerDescriptor(),\n streamPartId,\n connectionLocker: this.connectionLocker,\n minPropagationTargets: this.options.streamPartitionMinPropagationTargets ?? DEFAULT_MIN_PROPAGATION_TARGETS,\n maxPropagationBufferSize: this.options.streamPartitionMaxPropagationBufferSize ?? DEFAULT_MAX_PROPAGATION_BUFFER_SIZE,\n propagationBufferTtl: DEFAULT_PROPAGATION_BUFFER_TTL\n });\n }\n async inspect(peerDescriptor, streamPartId) {\n const streamPart = this.streamParts.get(streamPartId);\n if ((streamPart !== undefined) && !streamPart.proxied) {\n return streamPart.node.inspect(peerDescriptor);\n }\n return false;\n }\n // TODO inline this method?\n getNodeInfo() {\n const streamParts = Array.from(this.streamParts.entries()).filter(([_, node]) => node.proxied === false);\n return streamParts.map(([streamPartId]) => {\n const stream = this.streamParts.get(streamPartId);\n return {\n id: streamPartId,\n controlLayerNeighbors: stream.discoveryLayerNode.getNeighbors(),\n deprecatedContentDeliveryLayerNeighbors: [],\n contentDeliveryLayerNeighbors: stream.node.getInfos()\n };\n });\n }\n setStreamPartEntryPoints(streamPartId, entryPoints) {\n this.knownStreamPartEntryPoints.set(streamPartId, entryPoints);\n }\n isProxiedStreamPart(streamPartId, direction) {\n const streamPart = this.streamParts.get(streamPartId);\n return (streamPart !== undefined)\n && streamPart.proxied\n && ((direction === undefined) || (streamPart.client.getDirection() === direction));\n }\n getStreamPartDelivery(streamPartId) {\n return this.streamParts.get(streamPartId);\n }\n hasStreamPart(streamPartId) {\n return this.streamParts.has(streamPartId);\n }\n getPeerDescriptor() {\n return this.controlLayerNode.getLocalPeerDescriptor();\n }\n getNodeId() {\n return toNodeId(this.controlLayerNode.getLocalPeerDescriptor());\n }\n getNeighbors(streamPartId) {\n const streamPart = this.streamParts.get(streamPartId);\n return streamPart?.proxied === false\n ? streamPart.node.getNeighbors().map((n) => toNodeId(n))\n : [];\n }\n getStreamParts() {\n return Array.from(this.streamParts.keys()).map((id) => StreamPartIDUtils.parse(id));\n }\n getDiagnosticInfo() {\n return {\n streamParts: this.getStreamParts().map((id) => {\n return {\n id,\n info: this.getStreamPartDelivery(id).getDiagnosticInfo()\n };\n })\n };\n }\n}\n//# sourceMappingURL=ContentDeliveryManager.js.map","import { RpcRemote } from '@streamr/dht';\nexport class NodeInfoRpcRemote extends RpcRemote {\n async getInfo() {\n return this.getClient().getInfo({}, this.formDhtRpcOptions());\n }\n}\n//# sourceMappingURL=NodeInfoRpcRemote.js.map","import { NodeInfoRpcClient } from '../generated/packages/trackerless-network/protos/NetworkRpc.client';\nimport { NodeInfoRpcRemote } from './NodeInfoRpcRemote';\nexport class NodeInfoClient {\n ownPeerDescriptor;\n rpcCommunicator;\n constructor(ownPeerDescriptor, rpcCommunicator) {\n this.ownPeerDescriptor = ownPeerDescriptor;\n this.rpcCommunicator = rpcCommunicator;\n }\n async getInfo(node) {\n const remote = new NodeInfoRpcRemote(this.ownPeerDescriptor, node, this.rpcCommunicator, NodeInfoRpcClient);\n // TODO remove casting when we validate NodeInfoResponse messages and therefore can annotate\n // each of the field as required in the decorated type\n return remote.getInfo();\n }\n}\n//# sourceMappingURL=NodeInfoClient.js.map","import { NodeInfoRequest, NodeInfoResponse } from '../generated/packages/trackerless-network/protos/NetworkRpc';\nexport const NODE_INFO_RPC_SERVICE_ID = 'system/node-info-rpc';\nexport class NodeInfoRpcLocal {\n stack;\n rpcCommunicator;\n constructor(stack, rpcCommunicator) {\n this.stack = stack;\n this.rpcCommunicator = rpcCommunicator;\n this.registerDefaultServerMethods();\n }\n registerDefaultServerMethods() {\n this.rpcCommunicator.registerRpcMethod(NodeInfoRequest, NodeInfoResponse, 'getInfo', () => this.getInfo());\n }\n async getInfo() {\n return this.stack.createNodeInfo();\n }\n}\n//# sourceMappingURL=NodeInfoRpcLocal.js.map","import { DhtNode, ListeningRpcCommunicator, areEqualPeerDescriptors, toNodeId } from '@streamr/dht';\nimport { Logger, MetricsContext, toStreamPartID, until } from '@streamr/utils';\nimport pull from 'lodash/pull';\nimport { version as applicationVersion } from '../package.json';\nimport { ContentDeliveryManager } from './ContentDeliveryManager';\nimport { NodeInfoClient } from './NodeInfoClient';\nimport { NODE_INFO_RPC_SERVICE_ID, NodeInfoRpcLocal } from './NodeInfoRpcLocal';\nimport { ProxyDirection } from '../generated/packages/trackerless-network/protos/NetworkRpc';\nconst logger = new Logger('NetworkStack');\nconst instances = [];\nconst stopInstances = async () => {\n // make a clone so that it is ok for each instance.stop() to remove itself from the list (at line 139)\n // while the map function is iterating the list\n const clonedInstances = [...instances];\n await Promise.all(clonedInstances.map((instance) => instance.stop()));\n};\n/**\n * @todo The following cleanup logic is currently handled inside this module for both Node.js and\n * browser environments. Consider refactoring it into a higher-level integration layer if lifecycle\n * management is centralized elsewhere.\n */\nif (typeof process === 'object' && typeof process?.on === 'function') {\n /**\n * @todo The `exit` event shouldn't use an async handler because the event loop is already\n * shutting down, so async work won't complete. Calling `process.exit()` inside an `exit`\n * handler is also redundant and may cause issues. Remove `exit` from `EXIT_EVENTS`\n * or omit it entirely, since other signal handlers already terminate the process.\n */\n const EXIT_EVENTS = [`exit`, `SIGINT`, `SIGUSR1`, `SIGUSR2`, `uncaughtException`, `unhandledRejection`, `SIGTERM`];\n EXIT_EVENTS.forEach((event) => {\n /**\n * @todo Registering handlers at module load time can cause side effects. Use explicit\n * or lazy initialization to improve control and testability.\n */\n process.on(event, async (eventArg) => {\n const isError = (event === 'uncaughtException') || (event === 'unhandledRejection');\n if (isError) {\n logger.error(`exit event: ${event}`, eventArg);\n }\n /**\n * @todo Async `stopInstances()` may be interrupted by `process.exit()`. Use\n * synchronous cleanup or a timeout, and wait for cleanup on graceful signals\n * but exit quickly on error events.\n */\n await stopInstances();\n process.exit(isError ? 1 : 0);\n });\n });\n}\nif (typeof window === 'object') {\n /**\n * @todo Registering handlers at module load time can cause side effects. Use explicit\n * or lazy initialization to improve control and testability.\n */\n window.addEventListener('unload', async () => {\n await stopInstances();\n });\n}\nexport class NetworkStack {\n controlLayerNode;\n contentDeliveryManager;\n stopped = false;\n metricsContext;\n options;\n nodeInfoRpcLocal;\n nodeInfoClient;\n constructor(options) {\n this.options = options;\n this.metricsContext = options.metricsContext ?? new MetricsContext();\n this.controlLayerNode = new DhtNode({\n ...options.layer0,\n metricsContext: this.metricsContext,\n allowIncomingPrivateConnections: options.networkNode?.acceptProxyConnections\n });\n this.contentDeliveryManager = new ContentDeliveryManager({\n ...options.networkNode,\n metricsContext: this.metricsContext\n });\n instances.push(this);\n }\n async joinStreamPart(streamPartId, neighborRequirement, streamPartDeliveryOptions) {\n if (this.getContentDeliveryManager().isProxiedStreamPart(streamPartId)) {\n throw new Error(`Cannot join to ${streamPartId} as proxy connections have been set`);\n }\n await this.ensureConnectedToControlLayer();\n this.getContentDeliveryManager().joinStreamPart(streamPartId, streamPartDeliveryOptions);\n if (neighborRequirement !== undefined) {\n await until(() => {\n return this.getContentDeliveryManager().getNeighbors(streamPartId).length >= neighborRequirement.minCount;\n }, neighborRequirement.timeout);\n }\n }\n async broadcast(msg, streamPartDeliveryOptions) {\n const streamPartId = toStreamPartID(msg.messageId.streamId, msg.messageId.streamPartition);\n if (this.getContentDeliveryManager().isProxiedStreamPart(streamPartId, ProxyDirection.SUBSCRIBE)\n && (msg.body.oneofKind === 'contentMessage')) {\n throw new Error(`Cannot broadcast to ${streamPartId} as proxy subscribe connections have been set`);\n }\n // TODO could combine these two calls to isProxiedStreamPart?\n if (!this.contentDeliveryManager.isProxiedStreamPart(streamPartId)) {\n await this.ensureConnectedToControlLayer();\n }\n this.getContentDeliveryManager().broadcast(msg, streamPartDeliveryOptions);\n }\n async start(doJoin = true) {\n logger.info('Starting a Streamr Network Node');\n await this.controlLayerNode.start();\n logger.info(`Node id is ${toNodeId(this.controlLayerNode.getLocalPeerDescriptor())}`);\n const connectionManager = this.controlLayerNode.getTransport();\n if ((this.options.layer0?.entryPoints?.some((entryPoint) => areEqualPeerDescriptors(entryPoint, this.controlLayerNode.getLocalPeerDescriptor())))) {\n await this.controlLayerNode?.joinDht(this.options.layer0.entryPoints);\n }\n else if (doJoin) {\n // in practice there aren't be existing connections and therefore this always connects\n await this.ensureConnectedToControlLayer();\n }\n // TODO: remove undefined checks here. Assume that start is approproately awaited before stop is called.\n await this.contentDeliveryManager?.start(this.controlLayerNode, connectionManager, connectionManager);\n if (this.contentDeliveryManager) {\n const infoRpcCommunicator = new ListeningRpcCommunicator(NODE_INFO_RPC_SERVICE_ID, this.getConnectionManager());\n this.nodeInfoRpcLocal = new NodeInfoRpcLocal(this, infoRpcCommunicator);\n this.nodeInfoClient = new NodeInfoClient(this.controlLayerNode.getLocalPeerDescriptor(), infoRpcCommunicator);\n }\n }\n async ensureConnectedToControlLayer() {\n // TODO we could wrap joinDht with pOnce and call it here (no else-if needed in that case)\n if (!this.controlLayerNode.hasJoined()) {\n setImmediate(async () => {\n if (this.options.layer0?.entryPoints !== undefined) {\n // TODO should catch possible rejection?\n // the question mark is there to avoid problems when stop() is called before start()\n // -> TODO change to exlamation mark if we don't support that (and remove NetworkStackStoppedDuringStart.test)\n await this.controlLayerNode?.joinDht(this.options.layer0.entryPoints);\n }\n });\n await this.controlLayerNode.waitForNetworkConnectivity();\n }\n }\n getContentDeliveryManager() {\n return this.contentDeliveryManager;\n }\n getControlLayerNode() {\n return this.controlLayerNode;\n }\n getMetricsContext() {\n return this.metricsContext;\n }\n async fetchNodeInfo(node) {\n if (!areEqualPeerDescriptors(node, this.getControlLayerNode().getLocalPeerDescriptor())) {\n return this.nodeInfoClient.getInfo(node);\n }\n else {\n return this.createNodeInfo();\n }\n }\n createNodeInfo() {\n return {\n peerDescriptor: this.getControlLayerNode().getLocalPeerDescriptor(),\n controlLayer: {\n connections: this.getControlLayerNode().getConnectionsView().getConnections(),\n neighbors: this.getControlLayerNode().getNeighbors()\n },\n streamPartitions: this.getContentDeliveryManager().getNodeInfo(),\n applicationVersion\n };\n }\n getOptions() {\n return this.options;\n }\n getConnectionManager() {\n return this.controlLayerNode.getTransport();\n }\n async stop() {\n if (!this.stopped) {\n this.stopped = true;\n pull(instances, this);\n await this.contentDeliveryManager.destroy();\n await this.controlLayerNode.stop();\n this.contentDeliveryManager = undefined;\n this.controlLayerNode = undefined;\n }\n }\n}\n//# sourceMappingURL=NetworkStack.js.map","import { ExternalNetworkRpc } from './control-layer/ExternalNetworkRpc';\nimport { NetworkStack } from './NetworkStack';\nexport const createNetworkNode = (opts) => {\n return new NetworkNode(new NetworkStack(opts));\n};\n/**\n * Convenience wrapper for building client-facing functionality. Used by client.\n */\nexport class NetworkNode {\n stack;\n stopped = false;\n externalNetworkRpc;\n /** @internal */\n constructor(stack) {\n this.stack = stack;\n }\n async start(doJoin) {\n await this.stack.start(doJoin);\n this.externalNetworkRpc = new ExternalNetworkRpc(this.stack.getControlLayerNode().getTransport());\n }\n async inspect(node, streamPartId) {\n return this.stack.getContentDeliveryManager().inspect(node, streamPartId);\n }\n async broadcast(msg, streamPartDeliveryOptions) {\n await this.stack.broadcast(msg, streamPartDeliveryOptions);\n }\n async join(streamPartId, neighborRequirement, streamPartDeliveryOptions) {\n await this.stack.joinStreamPart(streamPartId, neighborRequirement, streamPartDeliveryOptions);\n }\n async setProxies(streamPartId, nodes, userId, direction, connectionCount) {\n await this.stack.getContentDeliveryManager().setProxies(streamPartId, nodes, userId, direction, connectionCount);\n }\n isProxiedStreamPart(streamPartId) {\n return this.stack.getContentDeliveryManager().isProxiedStreamPart(streamPartId);\n }\n addMessageListener(listener) {\n this.stack.getContentDeliveryManager().on('newMessage', listener);\n }\n setStreamPartEntryPoints(streamPartId, contactPeerDescriptors) {\n this.stack.getContentDeliveryManager().setStreamPartEntryPoints(streamPartId, contactPeerDescriptors);\n }\n removeMessageListener(listener) {\n this.stack.getContentDeliveryManager().off('newMessage', listener);\n }\n async leave(streamPartId) {\n if (this.stopped) {\n return;\n }\n await this.stack.getContentDeliveryManager().leaveStreamPart(streamPartId);\n }\n getNeighbors(streamPartId) {\n return this.stack.getContentDeliveryManager().getNeighbors(streamPartId);\n }\n hasStreamPart(streamPartId) {\n return this.stack.getContentDeliveryManager().hasStreamPart(streamPartId);\n }\n async stop() {\n this.stopped = true;\n this.externalNetworkRpc.destroy();\n await this.stack.stop();\n }\n getPeerDescriptor() {\n return this.stack.getControlLayerNode().getLocalPeerDescriptor();\n }\n getMetricsContext() {\n return this.stack.getMetricsContext();\n }\n getNodeId() {\n return this.stack.getContentDeliveryManager().getNodeId();\n }\n getOptions() {\n return this.stack.getOptions();\n }\n getStreamParts() {\n return this.stack.getContentDeliveryManager().getStreamParts();\n }\n async fetchNodeInfo(node) {\n return this.stack.fetchNodeInfo(node);\n }\n getDiagnosticInfo() {\n return {\n controlLayer: this.stack.getControlLayerNode().getDiagnosticInfo(),\n contentLayer: this.stack.getContentDeliveryManager().getDiagnosticInfo()\n };\n }\n registerExternalNetworkRpcMethod(request, response, name, fn) {\n this.externalNetworkRpc.registerRpcMethod(request, response, name, fn);\n }\n createExternalRpcClient(clientClass) {\n return this.externalNetworkRpc.createRpcClient(clientClass);\n }\n}\n//# sourceMappingURL=NetworkNode.js.map"],"names":["SERVICE_ID","ListeningRpcCommunicator","toProtoRpcClient","MessageType","jsonWriteOptions","isJsonObject","typeofJsonValue","reflectionMergePartial","UnknownFieldHandler","WireType","PeerDescriptor","logger","Logger","scheduleAtInterval","areEqualPeerDescriptors","wait","toNodeId","PbLong","ServiceType","ContentType","EncryptionType","AsymmetricEncryptionType","SignatureType","ProxyDirection","stackIntercept","RpcRemote","toDhtAddress","v4","toDhtAddressRaw","setAbortableTimeout","toUserId","EventEmitter","addManagedEventListener","Yallist","Node","waitForEvent","toUserIdRaw","EXISTING_CONNECTION_TIMEOUT","computeSha1","MetricsContext","RateMetric","toStreamPartID","NETWORK_SPLIT_AVOIDANCE_MIN_NEIGHBOR_COUNT","DhtNode","StreamPartIDUtils","until","applicationVersion"],"mappings":"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"}
|