@dxos/network-manager 0.1.35 → 0.1.36

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.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/testing/test-builder.ts", "../../../../src/testing/test-wire-protocol.ts"],
4
- "sourcesContent": ["//\n// Copyright 2022 DXOS.org\n//\n\nimport { PublicKey } from '@dxos/keys';\nimport { MemorySignalManager, MemorySignalManagerContext, WebsocketSignalManager } from '@dxos/messaging';\nimport { schema } from '@dxos/protocols';\nimport { ConnectionState } from '@dxos/protocols/proto/dxos/client/services';\nimport { createLinkedPorts, createProtoRpcPeer, ProtoRpcPeer } from '@dxos/rpc';\nimport { ComplexMap } from '@dxos/util';\n\nimport { NetworkManager } from '../network-manager';\nimport { FullyConnectedTopology } from '../topology';\nimport {\n MemoryTransportFactory,\n TransportFactory,\n WebRTCTransport,\n WebRTCTransportProxyFactory,\n WebRTCTransportService\n} from '../transport';\nimport { TestWireProtocol } from './test-wire-protocol';\n\n// Signal server will be started by the setup script.\nexport const TEST_SIGNAL_URL = 'ws://localhost:4000/.well-known/dx/signal';\n\nexport type TestBuilderOptions = {\n signalHosts?: string[];\n bridge?: boolean;\n};\n\n/**\n * Builder used to construct networks and peers.\n */\nexport class TestBuilder {\n private _signalContext = new MemorySignalManagerContext();\n\n constructor(public readonly options: TestBuilderOptions = {}) {}\n\n createSignalManager() {\n if (this.options.signalHosts) {\n return new WebsocketSignalManager(this.options.signalHosts);\n }\n\n return new MemorySignalManager(this._signalContext);\n }\n\n createPeer() {\n return new TestPeer(this);\n }\n}\n\n/**\n * Testing network peer.\n */\nexport class TestPeer {\n readonly peerId = PublicKey.random();\n\n private readonly _swarms = new ComplexMap<PublicKey, TestSwarmConnection>(PublicKey.hash);\n\n /**\n * @internal\n */\n readonly _networkManager: NetworkManager;\n\n private _proxy?: ProtoRpcPeer<any>;\n private _service?: ProtoRpcPeer<any>;\n\n constructor(private readonly testBuilder: TestBuilder) {\n this._networkManager = this.createNetworkManager();\n }\n\n // TODO(burdon): Move to TestBuilder.\n createNetworkManager() {\n let transportFactory: TransportFactory = MemoryTransportFactory;\n\n if (this.testBuilder.options.signalHosts) {\n if (this.testBuilder.options.bridge) {\n // Simulates bridge to shared worker.\n const [proxyPort, servicePort] = createLinkedPorts();\n\n this._proxy = createProtoRpcPeer({\n port: proxyPort,\n requested: {\n BridgeService: schema.getService('dxos.mesh.bridge.BridgeService')\n },\n noHandshake: true,\n encodingOptions: {\n preserveAny: true\n }\n });\n\n this._service = createProtoRpcPeer({\n port: servicePort,\n exposed: {\n BridgeService: schema.getService('dxos.mesh.bridge.BridgeService')\n },\n handlers: { BridgeService: new WebRTCTransportService() },\n noHandshake: true,\n encodingOptions: {\n preserveAny: true\n }\n });\n\n transportFactory = new WebRTCTransportProxyFactory().setBridgeService(this._proxy.rpc.BridgeService);\n } else {\n transportFactory = {\n createTransport: (params) => new WebRTCTransport(params)\n };\n }\n }\n\n return new NetworkManager({\n signalManager: this.testBuilder.createSignalManager(),\n transportFactory\n });\n }\n\n async open() {\n await this._proxy?.open();\n await this._service?.open();\n }\n\n async close() {\n await Promise.all(Array.from(this._swarms.values()).map((swarm) => swarm.leave()));\n this._swarms.clear();\n\n await this._proxy?.close();\n await this._service?.close();\n await this._networkManager.close();\n }\n\n getSwarm(topic: PublicKey): TestSwarmConnection {\n const swarm = this._swarms.get(topic);\n if (!swarm) {\n throw new Error(`Swarm not found for topic: ${topic}`);\n }\n\n return swarm;\n }\n\n createSwarm(topic: PublicKey): TestSwarmConnection {\n // TODO(burdon): Multiple.\n // if (this._swarms.get(topic)) {\n // throw new Error(`Swarm already exists for topic: ${topic.truncate()}`);\n // }\n\n const swarm = new TestSwarmConnection(this, topic);\n this._swarms.set(topic, swarm);\n return swarm;\n }\n\n async goOffline() {\n await this._networkManager.setConnectionState(ConnectionState.OFFLINE);\n }\n\n async goOnline() {\n await this._networkManager.setConnectionState(ConnectionState.ONLINE);\n }\n}\n\n// TODO(burdon): Reconcile with new Swarm concept.\nexport class TestSwarmConnection {\n protocol: TestWireProtocol;\n\n constructor(readonly peer: TestPeer, readonly topic: PublicKey) {\n // TODO(burdon): Configure plugins.\n // TODO(burdon): Prevent reuse?\n this.protocol = new TestWireProtocol(this.peer.peerId);\n }\n\n // TODO(burdon): Need to create new plugin instance per swarm?\n // If so, then perhaps joinSwarm should return swarm object with access to plugins.\n async join(topology = new FullyConnectedTopology()) {\n await this.peer._networkManager.joinSwarm({\n topic: this.topic,\n peerId: this.peer.peerId,\n protocolProvider: this.protocol.factory,\n topology\n });\n\n return this;\n }\n\n async leave() {\n await this.peer._networkManager.leaveSwarm(this.topic);\n return this;\n }\n}\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { asyncTimeout, Event } from '@dxos/async';\nimport { PublicKey } from '@dxos/keys';\nimport { log } from '@dxos/log';\nimport { TestExtension } from '@dxos/teleport';\nimport { ComplexMap } from '@dxos/util';\n\nimport { createTeleportProtocolFactory } from '../wire-protocol';\n\nexport class TestWireProtocol {\n public readonly connections = new ComplexMap<PublicKey, TestExtension>(PublicKey.hash);\n public readonly connected = new Event<PublicKey>();\n public readonly disconnected = new Event<PublicKey>();\n\n constructor(public readonly peerId: PublicKey) {}\n\n readonly factory = createTeleportProtocolFactory(async (teleport) => {\n log('create', { remotePeerId: teleport.remotePeerId });\n const extension = new TestExtension({\n onClose: async () => {\n this.connections.delete(teleport.remotePeerId);\n this.disconnected.emit(teleport.remotePeerId);\n }\n });\n this.connections.set(teleport.remotePeerId, extension);\n teleport.addExtension('test', extension);\n this.connected.emit(teleport.remotePeerId);\n });\n\n async waitForConnection(peerId: PublicKey) {\n if (this.connections.has(peerId)) {\n return this.connections.get(peerId)!;\n }\n log('waitForConnection', { peerId });\n await asyncTimeout(\n this.connected.waitFor((connectedId) => connectedId.equals(peerId)),\n 1_000\n );\n return this.connections.get(peerId)!;\n }\n\n async testConnection(peerId: PublicKey, message?: string) {\n const connection = await this.waitForConnection(peerId);\n await connection.test(message);\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["//\n// Copyright 2022 DXOS.org\n//\n\nimport { PublicKey } from '@dxos/keys';\nimport { MemorySignalManager, MemorySignalManagerContext, WebsocketSignalManager } from '@dxos/messaging';\nimport { schema } from '@dxos/protocols';\nimport { ConnectionState } from '@dxos/protocols/proto/dxos/client/services';\nimport { createLinkedPorts, createProtoRpcPeer, ProtoRpcPeer } from '@dxos/rpc';\nimport { ComplexMap } from '@dxos/util';\n\nimport { NetworkManager } from '../network-manager';\nimport { FullyConnectedTopology } from '../topology';\nimport {\n MemoryTransportFactory,\n TransportFactory,\n WebRTCTransport,\n WebRTCTransportProxyFactory,\n WebRTCTransportService\n} from '../transport';\nimport { TestWireProtocol } from './test-wire-protocol';\n\n// Signal server will be started by the setup script.\nexport const TEST_SIGNAL_URL = 'ws://localhost:4000/.well-known/dx/signal';\n\nexport type TestBuilderOptions = {\n signalHosts?: string[];\n bridge?: boolean;\n};\n\n/**\n * Builder used to construct networks and peers.\n */\nexport class TestBuilder {\n private _signalContext = new MemorySignalManagerContext();\n\n constructor(public readonly options: TestBuilderOptions = {}) {}\n\n createSignalManager() {\n if (this.options.signalHosts) {\n return new WebsocketSignalManager(this.options.signalHosts);\n }\n\n return new MemorySignalManager(this._signalContext);\n }\n\n createPeer() {\n return new TestPeer(this);\n }\n}\n\n/**\n * Testing network peer.\n */\nexport class TestPeer {\n readonly peerId = PublicKey.random();\n\n private readonly _swarms = new ComplexMap<PublicKey, TestSwarmConnection>(PublicKey.hash);\n\n /**\n * @internal\n */\n readonly _networkManager: NetworkManager;\n\n private _proxy?: ProtoRpcPeer<any>;\n private _service?: ProtoRpcPeer<any>;\n\n constructor(private readonly testBuilder: TestBuilder) {\n this._networkManager = this.createNetworkManager();\n }\n\n // TODO(burdon): Move to TestBuilder.\n createNetworkManager() {\n let transportFactory: TransportFactory = MemoryTransportFactory;\n\n if (this.testBuilder.options.signalHosts) {\n if (this.testBuilder.options.bridge) {\n // Simulates bridge to shared worker.\n const [proxyPort, servicePort] = createLinkedPorts();\n\n this._proxy = createProtoRpcPeer({\n port: proxyPort,\n requested: {\n BridgeService: schema.getService('dxos.mesh.bridge.BridgeService')\n },\n noHandshake: true,\n encodingOptions: {\n preserveAny: true\n }\n });\n\n this._service = createProtoRpcPeer({\n port: servicePort,\n exposed: {\n BridgeService: schema.getService('dxos.mesh.bridge.BridgeService')\n },\n handlers: { BridgeService: new WebRTCTransportService() },\n noHandshake: true,\n encodingOptions: {\n preserveAny: true\n }\n });\n\n transportFactory = new WebRTCTransportProxyFactory().setBridgeService(this._proxy.rpc.BridgeService);\n } else {\n transportFactory = {\n createTransport: (params) => new WebRTCTransport(params)\n };\n }\n }\n\n return new NetworkManager({\n signalManager: this.testBuilder.createSignalManager(),\n transportFactory\n });\n }\n\n async open() {\n await this._networkManager.open();\n await this._proxy?.open();\n await this._service?.open();\n }\n\n async close() {\n await Promise.all(Array.from(this._swarms.values()).map((swarm) => swarm.leave()));\n this._swarms.clear();\n\n await this._proxy?.close();\n await this._service?.close();\n await this._networkManager.close();\n }\n\n getSwarm(topic: PublicKey): TestSwarmConnection {\n const swarm = this._swarms.get(topic);\n if (!swarm) {\n throw new Error(`Swarm not found for topic: ${topic}`);\n }\n\n return swarm;\n }\n\n createSwarm(topic: PublicKey): TestSwarmConnection {\n // TODO(burdon): Multiple.\n // if (this._swarms.get(topic)) {\n // throw new Error(`Swarm already exists for topic: ${topic.truncate()}`);\n // }\n\n const swarm = new TestSwarmConnection(this, topic);\n this._swarms.set(topic, swarm);\n return swarm;\n }\n\n async goOffline() {\n await this._networkManager.setConnectionState(ConnectionState.OFFLINE);\n }\n\n async goOnline() {\n await this._networkManager.setConnectionState(ConnectionState.ONLINE);\n }\n}\n\n// TODO(burdon): Reconcile with new Swarm concept.\nexport class TestSwarmConnection {\n protocol: TestWireProtocol;\n\n constructor(readonly peer: TestPeer, readonly topic: PublicKey) {\n // TODO(burdon): Configure plugins.\n // TODO(burdon): Prevent reuse?\n this.protocol = new TestWireProtocol(this.peer.peerId);\n }\n\n // TODO(burdon): Need to create new plugin instance per swarm?\n // If so, then perhaps joinSwarm should return swarm object with access to plugins.\n async join(topology = new FullyConnectedTopology()) {\n await this.peer._networkManager.joinSwarm({\n topic: this.topic,\n peerId: this.peer.peerId,\n protocolProvider: this.protocol.factory,\n topology\n });\n\n return this;\n }\n\n async leave() {\n await this.peer._networkManager.leaveSwarm(this.topic);\n return this;\n }\n}\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { asyncTimeout, Event } from '@dxos/async';\nimport { PublicKey } from '@dxos/keys';\nimport { log } from '@dxos/log';\nimport { TestExtension } from '@dxos/teleport';\nimport { ComplexMap } from '@dxos/util';\n\nimport { createTeleportProtocolFactory } from '../wire-protocol';\n\nexport class TestWireProtocol {\n public readonly connections = new ComplexMap<PublicKey, TestExtension>(PublicKey.hash);\n public readonly connected = new Event<PublicKey>();\n public readonly disconnected = new Event<PublicKey>();\n\n constructor(public readonly peerId: PublicKey) {}\n\n readonly factory = createTeleportProtocolFactory(async (teleport) => {\n log('create', { remotePeerId: teleport.remotePeerId });\n const extension = new TestExtension({\n onClose: async () => {\n this.connections.delete(teleport.remotePeerId);\n this.disconnected.emit(teleport.remotePeerId);\n }\n });\n this.connections.set(teleport.remotePeerId, extension);\n teleport.addExtension('test', extension);\n this.connected.emit(teleport.remotePeerId);\n });\n\n async waitForConnection(peerId: PublicKey) {\n if (this.connections.has(peerId)) {\n return this.connections.get(peerId)!;\n }\n log('waitForConnection', { peerId });\n await asyncTimeout(\n this.connected.waitFor((connectedId) => connectedId.equals(peerId)),\n 1_000\n );\n return this.connections.get(peerId)!;\n }\n\n async testConnection(peerId: PublicKey, message?: string) {\n const connection = await this.waitForConnection(peerId);\n await connection.test(message);\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["PublicKey", "MemorySignalManager", "MemorySignalManagerContext", "WebsocketSignalManager", "schema", "ConnectionState", "createLinkedPorts", "createProtoRpcPeer", "ComplexMap", "asyncTimeout", "Event", "PublicKey", "log", "TestExtension", "ComplexMap", "TestWireProtocol", "constructor", "peerId", "connections", "ComplexMap", "PublicKey", "hash", "connected", "Event", "disconnected", "factory", "createTeleportProtocolFactory", "teleport", "log", "remotePeerId", "extension", "TestExtension", "onClose", "delete", "emit", "set", "addExtension", "waitForConnection", "has", "get", "asyncTimeout", "waitFor", "connectedId", "equals", "testConnection", "message", "connection", "test", "TEST_SIGNAL_URL", "TestBuilder", "constructor", "options", "_signalContext", "MemorySignalManagerContext", "createSignalManager", "signalHosts", "WebsocketSignalManager", "MemorySignalManager", "createPeer", "TestPeer", "testBuilder", "peerId", "PublicKey", "random", "_swarms", "ComplexMap", "hash", "_networkManager", "createNetworkManager", "transportFactory", "MemoryTransportFactory", "bridge", "proxyPort", "servicePort", "createLinkedPorts", "_proxy", "createProtoRpcPeer", "port", "requested", "BridgeService", "schema", "getService", "noHandshake", "encodingOptions", "preserveAny", "_service", "exposed", "handlers", "WebRTCTransportService", "WebRTCTransportProxyFactory", "setBridgeService", "rpc", "createTransport", "params", "WebRTCTransport", "NetworkManager", "signalManager", "open", "close", "Promise", "all", "Array", "from", "values", "map", "swarm", "leave", "clear", "getSwarm", "topic", "get", "Error", "createSwarm", "TestSwarmConnection", "set", "goOffline", "setConnectionState", "ConnectionState", "OFFLINE", "goOnline", "ONLINE", "peer", "protocol", "TestWireProtocol", "join", "topology", "FullyConnectedTopology", "joinSwarm", "protocolProvider", "factory", "leaveSwarm"]
7
7
  }
@@ -320,7 +320,7 @@ __decorate([
320
320
  // packages/core/mesh/network-manager/src/swarm/swarm.ts
321
321
  var import_node_assert4 = __toESM(require("node:assert"));
322
322
  var import_async3 = require("@dxos/async");
323
- var import_context = require("@dxos/context");
323
+ var import_context2 = require("@dxos/context");
324
324
  var import_debug2 = require("@dxos/debug");
325
325
  var import_keys4 = require("@dxos/keys");
326
326
  var import_log4 = require("@dxos/log");
@@ -495,6 +495,7 @@ var MessageRouter = class {
495
495
  // packages/core/mesh/network-manager/src/swarm/peer.ts
496
496
  var import_node_assert3 = __toESM(require("node:assert"));
497
497
  var import_async2 = require("@dxos/async");
498
+ var import_context = require("@dxos/context");
498
499
  var import_keys3 = require("@dxos/keys");
499
500
  var import_log3 = require("@dxos/log");
500
501
  var __decorate2 = function(decorators, target, key, desc) {
@@ -507,6 +508,7 @@ var __decorate2 = function(decorators, target, key, desc) {
507
508
  r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
508
509
  return c > 3 && r && Object.defineProperty(target, key, r), r;
509
510
  };
511
+ var CONNECTION_COUNTS_STABLE_AFTER = 5e3;
510
512
  var Peer = class {
511
513
  constructor(id, topic, localPeerId, _signalMessaging, _protocolProvider, _transportFactory, _callbacks) {
512
514
  this.id = id;
@@ -516,6 +518,9 @@ var Peer = class {
516
518
  this._protocolProvider = _protocolProvider;
517
519
  this._transportFactory = _transportFactory;
518
520
  this._callbacks = _callbacks;
521
+ this._availableAfter = 0;
522
+ this.availableToConnect = true;
523
+ this._ctx = new import_context.Context();
519
524
  this.advertizing = false;
520
525
  this.initiating = false;
521
526
  }
@@ -532,7 +537,7 @@ var Peer = class {
532
537
  peerId: this.localPeerId
533
538
  }, {
534
539
  file: "peer.ts",
535
- line: 86,
540
+ line: 107,
536
541
  scope: this,
537
542
  callSite: (f, a) => f(...a)
538
543
  });
@@ -559,7 +564,7 @@ var Peer = class {
559
564
  err
560
565
  }, {
561
566
  file: "peer.ts",
562
- line: 110,
567
+ line: 131,
563
568
  scope: this,
564
569
  callSite: (f, a) => f(...a)
565
570
  });
@@ -588,7 +593,7 @@ var Peer = class {
588
593
  sessionId
589
594
  }, {
590
595
  file: "peer.ts",
591
- line: 128,
596
+ line: 149,
592
597
  scope: this,
593
598
  callSite: (f, a) => f(...a)
594
599
  });
@@ -611,14 +616,14 @@ var Peer = class {
611
616
  remoteId: this.id
612
617
  }, {
613
618
  file: "peer.ts",
614
- line: 140,
619
+ line: 161,
615
620
  scope: this,
616
621
  callSite: (f, a) => f(...a)
617
622
  });
618
623
  if (connection.state !== ConnectionState.INITIAL) {
619
624
  (0, import_log3.log)("ignoring response", {}, {
620
625
  file: "peer.ts",
621
- line: 142,
626
+ line: 163,
622
627
  scope: this,
623
628
  callSite: (f, a) => f(...a)
624
629
  });
@@ -638,7 +643,7 @@ var Peer = class {
638
643
  err
639
644
  }, {
640
645
  file: "peer.ts",
641
- line: 153,
646
+ line: 174,
642
647
  scope: this,
643
648
  callSite: (f, a) => f(...a)
644
649
  });
@@ -653,6 +658,7 @@ var Peer = class {
653
658
  * Either we're initiating a connection or creating one in response to an offer from the other peer.
654
659
  */
655
660
  _createConnection(initiator, sessionId) {
661
+ var _a;
656
662
  (0, import_log3.log)("creating connection", {
657
663
  topic: this.topic,
658
664
  peerId: this.localPeerId,
@@ -661,7 +667,7 @@ var Peer = class {
661
667
  sessionId
662
668
  }, {
663
669
  file: "peer.ts",
664
- line: 167,
670
+ line: 188,
665
671
  scope: this,
666
672
  callSite: (f, a) => f(...a)
667
673
  });
@@ -684,9 +690,13 @@ var Peer = class {
684
690
  );
685
691
  connection._traceParent = this._traceParent;
686
692
  this._callbacks.onInitiated(connection);
693
+ void ((_a = this._connectionCtx) == null ? void 0 : _a.dispose());
694
+ this._connectionCtx = this._ctx.derive();
687
695
  connection.stateChanged.on((state) => {
688
696
  switch (state) {
689
697
  case ConnectionState.CONNECTED: {
698
+ this.availableToConnect = true;
699
+ this._lastConnectionTime = Date.now();
690
700
  this._callbacks.onConnected();
691
701
  break;
692
702
  }
@@ -698,13 +708,23 @@ var Peer = class {
698
708
  initiator
699
709
  }, {
700
710
  file: "peer.ts",
701
- line: 197,
711
+ line: 224,
702
712
  scope: this,
703
713
  callSite: (f, a) => f(...a)
704
714
  });
705
715
  (0, import_node_assert3.default)(this.connection === connection, "Connection mismatch (race condition).");
716
+ if (this._lastConnectionTime && this._lastConnectionTime + CONNECTION_COUNTS_STABLE_AFTER < Date.now()) {
717
+ this._availableAfter = 0;
718
+ } else {
719
+ this.availableToConnect = false;
720
+ this._availableAfter = increaseInterval(this._availableAfter);
721
+ }
706
722
  this.connection = void 0;
707
723
  this._callbacks.onDisconnected();
724
+ (0, import_async2.scheduleTask)(this._connectionCtx, () => {
725
+ this.availableToConnect = true;
726
+ this._callbacks.onPeerAvailable();
727
+ }, this._availableAfter);
708
728
  break;
709
729
  }
710
730
  }
@@ -718,7 +738,7 @@ var Peer = class {
718
738
  err
719
739
  }, {
720
740
  file: "peer.ts",
721
- line: 207,
741
+ line: 252,
722
742
  scope: this,
723
743
  callSite: (f, a) => f(...a)
724
744
  });
@@ -737,7 +757,7 @@ var Peer = class {
737
757
  sessionId: connection.sessionId
738
758
  }, {
739
759
  file: "peer.ts",
740
- line: 223,
760
+ line: 268,
741
761
  scope: this,
742
762
  callSite: (f, a) => f(...a)
743
763
  });
@@ -747,7 +767,7 @@ var Peer = class {
747
767
  sessionId: connection.sessionId
748
768
  }, {
749
769
  file: "peer.ts",
750
- line: 229,
770
+ line: 274,
751
771
  scope: this,
752
772
  callSite: (f, a) => f(...a)
753
773
  });
@@ -758,7 +778,7 @@ var Peer = class {
758
778
  message
759
779
  }, {
760
780
  file: "peer.ts",
761
- line: 234,
781
+ line: 279,
762
782
  scope: this,
763
783
  callSite: (f, a) => f(...a)
764
784
  });
@@ -768,12 +788,13 @@ var Peer = class {
768
788
  }
769
789
  async destroy() {
770
790
  var _a;
791
+ await this._ctx.dispose();
771
792
  (0, import_log3.log)("Destroying peer", {
772
793
  peerId: this.id,
773
794
  topic: this.topic
774
795
  }, {
775
796
  file: "peer.ts",
776
- line: 242,
797
+ line: 288,
777
798
  scope: this,
778
799
  callSite: (f, a) => f(...a)
779
800
  });
@@ -783,6 +804,18 @@ var Peer = class {
783
804
  __decorate2([
784
805
  import_async2.synchronized
785
806
  ], Peer.prototype, "destroy", null);
807
+ var increaseInterval = (interval) => {
808
+ if (interval === 0) {
809
+ return 50;
810
+ } else if (interval < 500) {
811
+ return 500;
812
+ } else if (interval < 1e3) {
813
+ return 1e3;
814
+ } else if (interval < 5e3) {
815
+ return 5e3;
816
+ }
817
+ return 1e4;
818
+ };
786
819
 
787
820
  // packages/core/mesh/network-manager/src/swarm/swarm.ts
788
821
  var __decorate3 = function(decorators, target, key, desc) {
@@ -809,7 +842,7 @@ var Swarm = class {
809
842
  this._transportFactory = _transportFactory;
810
843
  this._label = _label;
811
844
  this._peers = new import_util2.ComplexMap(import_keys4.PublicKey.hash);
812
- this._ctx = new import_context.Context();
845
+ this._ctx = new import_context2.Context();
813
846
  this.connectionAdded = new import_async3.Event();
814
847
  this.disconnected = new import_async3.Event();
815
848
  this.connected = new import_async3.Event();
@@ -1049,7 +1082,7 @@ var Swarm = class {
1049
1082
  }
1050
1083
  // For debug purposes
1051
1084
  async goOnline() {
1052
- this._ctx = new import_context.Context();
1085
+ this._ctx = new import_context2.Context();
1053
1086
  }
1054
1087
  _getOrCreatePeer(peerId) {
1055
1088
  let peer = this._peers.get(peerId);
@@ -1078,6 +1111,9 @@ var Swarm = class {
1078
1111
  },
1079
1112
  onOffer: (remoteId) => {
1080
1113
  return this._topology.onOffer(remoteId);
1114
+ },
1115
+ onPeerAvailable: () => {
1116
+ this._topology.update();
1081
1117
  }
1082
1118
  });
1083
1119
  peer._traceParent = this._instanceId;
@@ -1095,7 +1131,7 @@ var Swarm = class {
1095
1131
  getState: () => ({
1096
1132
  ownPeerId: this._ownPeerId,
1097
1133
  connected: Array.from(this._peers.values()).filter((peer) => peer.connection).map((peer) => peer.id),
1098
- candidates: Array.from(this._peers.values()).filter((peer) => !peer.connection && peer.advertizing).map((peer) => peer.id)
1134
+ candidates: Array.from(this._peers.values()).filter((peer) => !peer.connection && peer.advertizing && peer.availableToConnect).map((peer) => peer.id)
1099
1135
  }),
1100
1136
  connect: (peer) => {
1101
1137
  if (this._ctx.disposed) {
@@ -1107,7 +1143,7 @@ var Swarm = class {
1107
1143
  } catch (err) {
1108
1144
  import_log4.log.warn("initiation error", err, {
1109
1145
  file: "swarm.ts",
1110
- line: 317,
1146
+ line: 320,
1111
1147
  scope: this,
1112
1148
  callSite: (f, a) => f(...a)
1113
1149
  });
@@ -1135,7 +1171,7 @@ var Swarm = class {
1135
1171
  remoteId
1136
1172
  }, {
1137
1173
  file: "swarm.ts",
1138
- line: 344,
1174
+ line: 347,
1139
1175
  scope: this,
1140
1176
  callSite: (f, a) => f(...a)
1141
1177
  });
@@ -1152,7 +1188,7 @@ var Swarm = class {
1152
1188
  remoteId
1153
1189
  }, {
1154
1190
  file: "swarm.ts",
1155
- line: 358,
1191
+ line: 361,
1156
1192
  scope: this,
1157
1193
  callSite: (f, a) => f(...a)
1158
1194
  });
@@ -1162,7 +1198,7 @@ var Swarm = class {
1162
1198
  remoteId
1163
1199
  }, {
1164
1200
  file: "swarm.ts",
1165
- line: 361,
1201
+ line: 364,
1166
1202
  scope: this,
1167
1203
  callSite: (f, a) => f(...a)
1168
1204
  });
@@ -1348,6 +1384,7 @@ var NetworkManager = class {
1348
1384
  this.connectionStateChanged = new import_async6.Event();
1349
1385
  this.topicsUpdated = new import_async6.Event();
1350
1386
  this._instanceId = import_keys7.PublicKey.random().toHex();
1387
+ signalManager._traceParent = this._instanceId;
1351
1388
  this._transportFactory = transportFactory;
1352
1389
  this._signalManager = signalManager;
1353
1390
  this._signalManager.swarmEvent.on(({ topic, swarmEvent: event }) => {
@@ -1389,10 +1426,11 @@ var NetworkManager = class {
1389
1426
  }
1390
1427
  async open() {
1391
1428
  import_log6.log.trace("dxos.mesh.network-manager", import_protocols4.trace.begin({
1392
- id: this._instanceId
1429
+ id: this._instanceId,
1430
+ parentId: this._traceParent
1393
1431
  }), {
1394
1432
  file: "network-manager.ts",
1395
- line: 133,
1433
+ line: 135,
1396
1434
  scope: this,
1397
1435
  callSite: (f, a) => f(...a)
1398
1436
  });
@@ -1404,7 +1442,7 @@ var NetworkManager = class {
1404
1442
  await this.leaveSwarm(topic).catch((err) => {
1405
1443
  (0, import_log6.log)(err, {}, {
1406
1444
  file: "network-manager.ts",
1407
- line: 141,
1445
+ line: 143,
1408
1446
  scope: this,
1409
1447
  callSite: (f, a) => f(...a)
1410
1448
  });
@@ -1416,7 +1454,7 @@ var NetworkManager = class {
1416
1454
  id: this._instanceId
1417
1455
  }), {
1418
1456
  file: "network-manager.ts",
1419
- line: 147,
1457
+ line: 149,
1420
1458
  scope: this,
1421
1459
  callSite: (f, a) => f(...a)
1422
1460
  });
@@ -1439,7 +1477,7 @@ var NetworkManager = class {
1439
1477
  topology: topology.toString()
1440
1478
  }, {
1441
1479
  file: "network-manager.ts",
1442
- line: 168,
1480
+ line: 170,
1443
1481
  scope: this,
1444
1482
  callSite: (f, a) => f(...a)
1445
1483
  });
@@ -1449,7 +1487,7 @@ var NetworkManager = class {
1449
1487
  error
1450
1488
  }, {
1451
1489
  file: "network-manager.ts",
1452
- line: 171,
1490
+ line: 173,
1453
1491
  scope: this,
1454
1492
  callSite: (f, a) => f(...a)
1455
1493
  });
@@ -1460,7 +1498,7 @@ var NetworkManager = class {
1460
1498
  peerId
1461
1499
  }).catch((error) => import_log6.log.catch(error, {}, {
1462
1500
  file: "network-manager.ts",
1463
- line: 175,
1501
+ line: 177,
1464
1502
  scope: this,
1465
1503
  callSite: (f, a) => f(...a)
1466
1504
  }));
@@ -1472,7 +1510,7 @@ var NetworkManager = class {
1472
1510
  count: this._swarms.size
1473
1511
  }, {
1474
1512
  file: "network-manager.ts",
1475
- line: 180,
1513
+ line: 182,
1476
1514
  scope: this,
1477
1515
  callSite: (f, a) => f(...a)
1478
1516
  });
@@ -1490,7 +1528,7 @@ var NetworkManager = class {
1490
1528
  topic: import_keys7.PublicKey.from(topic).truncate()
1491
1529
  }, {
1492
1530
  file: "network-manager.ts",
1493
- line: 192,
1531
+ line: 194,
1494
1532
  scope: this,
1495
1533
  callSite: (f, a) => f(...a)
1496
1534
  });
@@ -1500,7 +1538,7 @@ var NetworkManager = class {
1500
1538
  topic: import_keys7.PublicKey.from(topic)
1501
1539
  }, {
1502
1540
  file: "network-manager.ts",
1503
- line: 196,
1541
+ line: 198,
1504
1542
  scope: this,
1505
1543
  callSite: (f, a) => f(...a)
1506
1544
  });
@@ -1521,7 +1559,7 @@ var NetworkManager = class {
1521
1559
  count: this._swarms.size
1522
1560
  }, {
1523
1561
  file: "network-manager.ts",
1524
- line: 210,
1562
+ line: 212,
1525
1563
  scope: this,
1526
1564
  callSite: (f, a) => f(...a)
1527
1565
  });
@@ -2145,7 +2183,7 @@ var WebRTCTransportService = class {
2145
2183
  // packages/core/mesh/network-manager/src/transport/webrtc-transport-proxy.ts
2146
2184
  var import_node_assert12 = __toESM(require("node:assert"));
2147
2185
  var import_async9 = require("@dxos/async");
2148
- var import_context2 = require("@dxos/context");
2186
+ var import_context3 = require("@dxos/context");
2149
2187
  var import_debug6 = require("@dxos/debug");
2150
2188
  var import_keys11 = require("@dxos/keys");
2151
2189
  var import_log12 = require("@dxos/log");
@@ -2155,7 +2193,7 @@ var WebRTCTransportProxy = class {
2155
2193
  constructor(_params) {
2156
2194
  this._params = _params;
2157
2195
  this._proxyId = import_keys11.PublicKey.random();
2158
- this._ctx = new import_context2.Context();
2196
+ this._ctx = new import_context3.Context();
2159
2197
  this.closed = new import_async9.Event();
2160
2198
  this._closed = false;
2161
2199
  this.connected = new import_async9.Event();