@dxos/network-manager 0.3.9-main.e6215fc → 0.3.9-main.ef334cd

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/dist/lib/browser/{chunk-HJ6JLRZM.mjs → chunk-7JESB3AJ.mjs} +160 -70
  2. package/dist/lib/browser/chunk-7JESB3AJ.mjs.map +7 -0
  3. package/dist/lib/browser/index.mjs +1 -11
  4. package/dist/lib/browser/meta.json +1 -1
  5. package/dist/lib/browser/testing/index.mjs +1 -2
  6. package/dist/lib/browser/testing/index.mjs.map +1 -1
  7. package/dist/lib/node/{chunk-XZF4MAFB.cjs → chunk-Y2B5BDRH.cjs} +164 -72
  8. package/dist/lib/node/chunk-Y2B5BDRH.cjs.map +7 -0
  9. package/dist/lib/node/index.cjs +27 -36
  10. package/dist/lib/node/index.cjs.map +2 -2
  11. package/dist/lib/node/meta.json +1 -1
  12. package/dist/lib/node/testing/index.cjs +18 -19
  13. package/dist/lib/node/testing/index.cjs.map +1 -1
  14. package/dist/types/src/topology/mmst-topology.d.ts +1 -0
  15. package/dist/types/src/topology/mmst-topology.d.ts.map +1 -1
  16. package/dist/types/src/transport/index.d.ts +0 -1
  17. package/dist/types/src/transport/index.d.ts.map +1 -1
  18. package/dist/types/src/transport/libdatachannel-transport.d.ts +1 -0
  19. package/dist/types/src/transport/libdatachannel-transport.d.ts.map +1 -1
  20. package/dist/types/src/transport/simplepeer-transport.d.ts.map +1 -1
  21. package/package.json +18 -18
  22. package/src/topology/mmst-topology.ts +34 -6
  23. package/src/transport/index.ts +0 -1
  24. package/src/transport/libdatachannel-transport.ts +76 -34
  25. package/src/transport/simplepeer-transport.ts +4 -5
  26. package/dist/lib/browser/chunk-HJ6JLRZM.mjs.map +0 -7
  27. package/dist/lib/browser/chunk-YERMWDRB.mjs +0 -24
  28. package/dist/lib/browser/chunk-YERMWDRB.mjs.map +0 -7
  29. package/dist/lib/browser/index.browser-O53CPVK3.mjs +0 -14
  30. package/dist/lib/browser/index.browser-O53CPVK3.mjs.map +0 -7
  31. package/dist/lib/node/chunk-JDKM4UPJ.cjs +0 -470
  32. package/dist/lib/node/chunk-JDKM4UPJ.cjs.map +0 -7
  33. package/dist/lib/node/chunk-XZF4MAFB.cjs.map +0 -7
  34. package/dist/lib/node/datachannel-3VTTIMR5.cjs +0 -35
  35. package/dist/lib/node/datachannel-3VTTIMR5.cjs.map +0 -7
  36. package/dist/types/src/transport/datachannel/index.browser.d.ts +0 -15
  37. package/dist/types/src/transport/datachannel/index.browser.d.ts.map +0 -1
  38. package/dist/types/src/transport/datachannel/index.d.ts +0 -8
  39. package/dist/types/src/transport/datachannel/index.d.ts.map +0 -1
  40. package/dist/types/src/transport/datachannel/rtc-data-channel.d.ts +0 -29
  41. package/dist/types/src/transport/datachannel/rtc-data-channel.d.ts.map +0 -1
  42. package/dist/types/src/transport/datachannel/rtc-events.d.ts +0 -9
  43. package/dist/types/src/transport/datachannel/rtc-events.d.ts.map +0 -1
  44. package/dist/types/src/transport/datachannel/rtc-ice-candidate.d.ts +0 -22
  45. package/dist/types/src/transport/datachannel/rtc-ice-candidate.d.ts.map +0 -1
  46. package/dist/types/src/transport/datachannel/rtc-peer-connection.d.ts +0 -54
  47. package/dist/types/src/transport/datachannel/rtc-peer-connection.d.ts.map +0 -1
  48. package/dist/types/src/transport/datachannel/rtc-peer-connection.test.d.ts +0 -2
  49. package/dist/types/src/transport/datachannel/rtc-peer-connection.test.d.ts.map +0 -1
  50. package/dist/types/src/transport/datachannel/rtc-session-description.d.ts +0 -10
  51. package/dist/types/src/transport/datachannel/rtc-session-description.d.ts.map +0 -1
  52. package/src/transport/datachannel/README.md +0 -2
  53. package/src/transport/datachannel/index.browser.ts +0 -8
  54. package/src/transport/datachannel/index.ts +0 -17
  55. package/src/transport/datachannel/rtc-data-channel.ts +0 -148
  56. package/src/transport/datachannel/rtc-events.ts +0 -23
  57. package/src/transport/datachannel/rtc-ice-candidate.ts +0 -54
  58. package/src/transport/datachannel/rtc-peer-connection.test.ts +0 -112
  59. package/src/transport/datachannel/rtc-peer-connection.ts +0 -355
  60. package/src/transport/datachannel/rtc-session-description.ts +0 -23
@@ -26,8 +26,8 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
26
26
  mod
27
27
  ));
28
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
- var chunk_XZF4MAFB_exports = {};
30
- __export(chunk_XZF4MAFB_exports, {
29
+ var chunk_Y2B5BDRH_exports = {};
30
+ __export(chunk_Y2B5BDRH_exports, {
31
31
  Connection: () => Connection,
32
32
  ConnectionLimiter: () => ConnectionLimiter,
33
33
  ConnectionLog: () => ConnectionLog,
@@ -55,8 +55,7 @@ __export(chunk_XZF4MAFB_exports, {
55
55
  createSimplePeerTransportFactory: () => createSimplePeerTransportFactory,
56
56
  createTeleportProtocolFactory: () => createTeleportProtocolFactory
57
57
  });
58
- module.exports = __toCommonJS(chunk_XZF4MAFB_exports);
59
- var import_chunk_JDKM4UPJ = require("./chunk-JDKM4UPJ.cjs");
58
+ module.exports = __toCommonJS(chunk_Y2B5BDRH_exports);
60
59
  var import_async = require("@dxos/async");
61
60
  var import_context = require("@dxos/context");
62
61
  var import_debug = require("@dxos/debug");
@@ -153,6 +152,13 @@ var import_async12 = require("@dxos/async");
153
152
  var import_debug8 = require("@dxos/debug");
154
153
  var import_log15 = require("@dxos/log");
155
154
  var import_teleport = require("@dxos/teleport");
155
+ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
156
+ get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
157
+ }) : x)(function(x) {
158
+ if (typeof require !== "undefined")
159
+ return require.apply(this, arguments);
160
+ throw Error('Dynamic require of "' + x + '" is not supported');
161
+ });
156
162
  function _ts_decorate(decorators, target, key, desc) {
157
163
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
158
164
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
@@ -2415,9 +2421,12 @@ var FullyConnectedTopology = class {
2415
2421
  }
2416
2422
  };
2417
2423
  var __dxlog_file9 = "/home/runner/work/dxos/dxos/packages/core/mesh/network-manager/src/topology/mmst-topology.ts";
2424
+ var MIN_UPDATE_INTERVAL = 1e3 * 10;
2425
+ var MAX_CHANGES_PER_UPDATE = 1;
2418
2426
  var MMSTTopology = class {
2419
2427
  constructor({ originateConnections = 2, maxPeers = 4, sampleSize = 10 } = {}) {
2420
2428
  this._sampleCollected = false;
2429
+ this._lastAction = /* @__PURE__ */ new Date(0);
2421
2430
  this._originateConnections = originateConnections;
2422
2431
  this._maxPeers = maxPeers;
2423
2432
  this._sampleSize = sampleSize;
@@ -2425,7 +2434,7 @@ var MMSTTopology = class {
2425
2434
  init(controller) {
2426
2435
  (0, import_invariant8.invariant)(!this._controller, "Already initialized", {
2427
2436
  F: __dxlog_file9,
2428
- L: 46,
2437
+ L: 51,
2429
2438
  S: this,
2430
2439
  A: [
2431
2440
  "!this._controller",
@@ -2437,7 +2446,7 @@ var MMSTTopology = class {
2437
2446
  update() {
2438
2447
  (0, import_invariant8.invariant)(this._controller, "Not initialized", {
2439
2448
  F: __dxlog_file9,
2440
- L: 51,
2449
+ L: 56,
2441
2450
  S: this,
2442
2451
  A: [
2443
2452
  "this._controller",
@@ -2448,7 +2457,7 @@ var MMSTTopology = class {
2448
2457
  if (this._sampleCollected || connected.length > this._maxPeers || candidates.length > 0) {
2449
2458
  (0, import_log8.log)("Running the algorithm.", void 0, {
2450
2459
  F: __dxlog_file9,
2451
- L: 55,
2460
+ L: 60,
2452
2461
  S: this,
2453
2462
  C: (f, a) => f(...a)
2454
2463
  });
@@ -2459,7 +2468,7 @@ var MMSTTopology = class {
2459
2468
  async onOffer(peer) {
2460
2469
  (0, import_invariant8.invariant)(this._controller, "Not initialized", {
2461
2470
  F: __dxlog_file9,
2462
- L: 62,
2471
+ L: 67,
2463
2472
  S: this,
2464
2473
  A: [
2465
2474
  "this._controller",
@@ -2470,7 +2479,7 @@ var MMSTTopology = class {
2470
2479
  const accept = connected.length < this._maxPeers;
2471
2480
  (0, import_log8.log)(`Offer ${peer} accept=${accept}`, void 0, {
2472
2481
  F: __dxlog_file9,
2473
- L: 65,
2482
+ L: 70,
2474
2483
  S: this,
2475
2484
  C: (f, a) => f(...a)
2476
2485
  });
@@ -2481,7 +2490,7 @@ var MMSTTopology = class {
2481
2490
  _runAlgorithm() {
2482
2491
  (0, import_invariant8.invariant)(this._controller, "Not initialized", {
2483
2492
  F: __dxlog_file9,
2484
- L: 74,
2493
+ L: 79,
2485
2494
  S: this,
2486
2495
  A: [
2487
2496
  "this._controller",
@@ -2490,27 +2499,84 @@ var MMSTTopology = class {
2490
2499
  });
2491
2500
  const { connected, candidates, ownPeerId } = this._controller.getState();
2492
2501
  if (connected.length > this._maxPeers) {
2502
+ (0, import_log8.log)(`disconnect ${connected.length - this._maxPeers} peers.`, void 0, {
2503
+ F: __dxlog_file9,
2504
+ L: 85,
2505
+ S: this,
2506
+ C: (f, a) => f(...a)
2507
+ });
2493
2508
  const sorted = sortByXorDistance(connected, ownPeerId).reverse().slice(0, this._maxPeers - connected.length);
2494
- for (const peer of sorted) {
2495
- (0, import_log8.log)(`Disconnect ${peer}.`, void 0, {
2509
+ (0, import_invariant8.invariant)(sorted.length === 0, void 0, {
2510
+ F: __dxlog_file9,
2511
+ L: 89,
2512
+ S: this,
2513
+ A: [
2514
+ "sorted.length === 0",
2515
+ ""
2516
+ ]
2517
+ });
2518
+ if (sorted.length > MAX_CHANGES_PER_UPDATE) {
2519
+ (0, import_log8.log)(`want to disconnect ${sorted.length} peers but limited to ${MAX_CHANGES_PER_UPDATE}`, void 0, {
2496
2520
  F: __dxlog_file9,
2497
- L: 83,
2521
+ L: 92,
2522
+ S: this,
2523
+ C: (f, a) => f(...a)
2524
+ });
2525
+ }
2526
+ if (Date.now() - this._lastAction.getTime() > MIN_UPDATE_INTERVAL) {
2527
+ for (const peer of sorted.slice(0, MAX_CHANGES_PER_UPDATE)) {
2528
+ (0, import_log8.log)(`Disconnect ${peer}.`, void 0, {
2529
+ F: __dxlog_file9,
2530
+ L: 97,
2531
+ S: this,
2532
+ C: (f, a) => f(...a)
2533
+ });
2534
+ this._controller.disconnect(peer);
2535
+ }
2536
+ this._lastAction = /* @__PURE__ */ new Date();
2537
+ } else {
2538
+ (0, import_log8.log)("rate limited discconnect", void 0, {
2539
+ F: __dxlog_file9,
2540
+ L: 102,
2498
2541
  S: this,
2499
2542
  C: (f, a) => f(...a)
2500
2543
  });
2501
- this._controller.disconnect(peer);
2502
2544
  }
2503
2545
  } else if (connected.length < this._originateConnections) {
2546
+ (0, import_log8.log)(`connect ${this._originateConnections - connected.length} peers.`, void 0, {
2547
+ F: __dxlog_file9,
2548
+ L: 106,
2549
+ S: this,
2550
+ C: (f, a) => f(...a)
2551
+ });
2504
2552
  const sample = candidates.sort(() => Math.random() - 0.5).slice(0, this._sampleSize);
2505
2553
  const sorted = sortByXorDistance(sample, ownPeerId).slice(0, this._originateConnections - connected.length);
2506
- for (const peer of sorted) {
2507
- (0, import_log8.log)(`Connect ${peer}.`, void 0, {
2554
+ if (sorted.length > MAX_CHANGES_PER_UPDATE) {
2555
+ (0, import_log8.log)(`want to connect ${sorted.length} peers but limited to ${MAX_CHANGES_PER_UPDATE}`, void 0, {
2508
2556
  F: __dxlog_file9,
2509
- L: 91,
2557
+ L: 111,
2558
+ S: this,
2559
+ C: (f, a) => f(...a)
2560
+ });
2561
+ }
2562
+ if (Date.now() - this._lastAction.getTime() > MIN_UPDATE_INTERVAL) {
2563
+ for (const peer of sorted.slice(0, MAX_CHANGES_PER_UPDATE)) {
2564
+ (0, import_log8.log)(`Connect ${peer}.`, void 0, {
2565
+ F: __dxlog_file9,
2566
+ L: 115,
2567
+ S: this,
2568
+ C: (f, a) => f(...a)
2569
+ });
2570
+ this._controller.connect(peer);
2571
+ }
2572
+ this._lastAction = /* @__PURE__ */ new Date();
2573
+ } else {
2574
+ (0, import_log8.log)("rate limited connect", void 0, {
2575
+ F: __dxlog_file9,
2576
+ L: 120,
2510
2577
  S: this,
2511
2578
  C: (f, a) => f(...a)
2512
2579
  });
2513
- this._controller.connect(peer);
2514
2580
  }
2515
2581
  }
2516
2582
  }
@@ -2811,7 +2877,7 @@ var TransportKind;
2811
2877
  })(TransportKind || (TransportKind = {}));
2812
2878
  var wrtc = null;
2813
2879
  try {
2814
- wrtc = (0, import_chunk_JDKM4UPJ.__require)("@koush/wrtc");
2880
+ wrtc = __require("@koush/wrtc");
2815
2881
  } catch {
2816
2882
  }
2817
2883
  var __dxlog_file12 = "/home/runner/work/dxos/dxos/packages/core/mesh/network-manager/src/transport/simplepeer-transport.ts";
@@ -2981,8 +3047,8 @@ var SimplePeerTransport = class {
2981
3047
  return {
2982
3048
  bytesSent: stats.transport.bytesSent,
2983
3049
  bytesReceived: stats.transport.bytesReceived,
2984
- packetsSent: stats.transport.messagesSent,
2985
- packetsReceived: stats.transport.messagesReceived,
3050
+ packetsSent: stats.transport.packetsSent,
3051
+ packetsReceived: stats.transport.packetsReceived,
2986
3052
  rawStats: stats.raw
2987
3053
  };
2988
3054
  }
@@ -3015,8 +3081,8 @@ var SimplePeerTransport = class {
3015
3081
  if (!rc) {
3016
3082
  return "unavailable";
3017
3083
  }
3018
- if (rc.relay) {
3019
- return `${rc.ip}:${rc.port}/${rc.protocol} relay for XXX ${rc.candidateType}`;
3084
+ if (rc.candidateType === "relay") {
3085
+ return `${rc.ip}:${rc.port}/${rc.protocol} relay for ${rc.relatedAddress}:${rc.relatedPort}`;
3020
3086
  }
3021
3087
  return `${rc.ip}:${rc.port}/${rc.protocol} ${rc.candidateType}`;
3022
3088
  }
@@ -3030,14 +3096,13 @@ var SimplePeerTransport = class {
3030
3096
  if (this._closed) {
3031
3097
  return;
3032
3098
  }
3033
- this._closed = true;
3034
3099
  this._disconnectStreams();
3035
3100
  this._peer.destroy();
3036
3101
  this._closed = true;
3037
3102
  this.closed.emit();
3038
3103
  (0, import_log11.log)("closed", void 0, {
3039
3104
  F: __dxlog_file12,
3040
- L: 201,
3105
+ L: 200,
3041
3106
  S: this,
3042
3107
  C: (f, a) => f(...a)
3043
3108
  });
@@ -3458,17 +3523,24 @@ var LibDataChannelTransport = class {
3458
3523
  this._readyForCandidates = new import_async11.Trigger();
3459
3524
  this._writeCallback = null;
3460
3525
  this._peer = (async () => {
3461
- const { RTCPeerConnection: PeerConnection } = await import("./datachannel-3VTTIMR5.cjs");
3526
+ const { RTCPeerConnection } = (await importESM("node-datachannel/polyfill")).default;
3462
3527
  if (this._closed) {
3463
3528
  this.errors.raise(new Error("connection already closed"));
3464
3529
  }
3465
- const peer = new PeerConnection(params.webrtcConfig);
3530
+ if (params.webrtcConfig) {
3531
+ params.webrtcConfig.iceServers = params.webrtcConfig.iceServers ?? [];
3532
+ } else {
3533
+ params.webrtcConfig = {
3534
+ iceServers: []
3535
+ };
3536
+ }
3537
+ const peer = new RTCPeerConnection(params.webrtcConfig);
3466
3538
  peer.onicecandidateerror = (event) => {
3467
3539
  import_log14.log.error("peer.onicecandidateerror", {
3468
3540
  event
3469
3541
  }, {
3470
3542
  F: __dxlog_file15,
3471
- L: 53,
3543
+ L: 61,
3472
3544
  S: this,
3473
3545
  C: (f, a) => f(...a)
3474
3546
  });
@@ -3480,7 +3552,7 @@ var LibDataChannelTransport = class {
3480
3552
  transportConnectionState: this._connected
3481
3553
  }, {
3482
3554
  F: __dxlog_file15,
3483
- L: 57,
3555
+ L: 65,
3484
3556
  S: this,
3485
3557
  C: (f, a) => f(...a)
3486
3558
  });
@@ -3490,7 +3562,7 @@ var LibDataChannelTransport = class {
3490
3562
  event
3491
3563
  }, {
3492
3564
  F: __dxlog_file15,
3493
- L: 66,
3565
+ L: 74,
3494
3566
  S: this,
3495
3567
  C: (f, a) => f(...a)
3496
3568
  });
@@ -3514,7 +3586,7 @@ var LibDataChannelTransport = class {
3514
3586
  err
3515
3587
  }, {
3516
3588
  F: __dxlog_file15,
3517
- L: 83,
3589
+ L: 91,
3518
3590
  S: this,
3519
3591
  C: (f, a) => f(...a)
3520
3592
  });
@@ -3523,12 +3595,15 @@ var LibDataChannelTransport = class {
3523
3595
  };
3524
3596
  if (params.initiator) {
3525
3597
  peer.createOffer().then(async (offer) => {
3598
+ if (this._closed) {
3599
+ return;
3600
+ }
3526
3601
  if (peer.connectionState !== "connecting") {
3527
3602
  import_log14.log.error("i am initiator but peer not in state connecting", {
3528
3603
  peer
3529
3604
  }, {
3530
3605
  F: __dxlog_file15,
3531
- L: 92,
3606
+ L: 104,
3532
3607
  S: this,
3533
3608
  C: (f, a) => f(...a)
3534
3609
  });
@@ -3538,7 +3613,7 @@ var LibDataChannelTransport = class {
3538
3613
  offer
3539
3614
  }, {
3540
3615
  F: __dxlog_file15,
3541
- L: 95,
3616
+ L: 107,
3542
3617
  S: this,
3543
3618
  C: (f, a) => f(...a)
3544
3619
  });
@@ -3558,7 +3633,7 @@ var LibDataChannelTransport = class {
3558
3633
  this.handleChannel(peer.createDataChannel(DATACHANNEL_LABEL));
3559
3634
  import_log14.log.debug("created data channel", void 0, {
3560
3635
  F: __dxlog_file15,
3561
- L: 104,
3636
+ L: 116,
3562
3637
  S: this,
3563
3638
  C: (f, a) => f(...a)
3564
3639
  });
@@ -3571,7 +3646,7 @@ var LibDataChannelTransport = class {
3571
3646
  event
3572
3647
  }, {
3573
3648
  F: __dxlog_file15,
3574
- L: 110,
3649
+ L: 122,
3575
3650
  S: this,
3576
3651
  C: (f, a) => f(...a)
3577
3652
  });
@@ -3589,7 +3664,7 @@ var LibDataChannelTransport = class {
3589
3664
  this._channel.onopen = () => {
3590
3665
  import_log14.log.debug("dataChannel.onopen", void 0, {
3591
3666
  F: __dxlog_file15,
3592
- L: 126,
3667
+ L: 138,
3593
3668
  S: this,
3594
3669
  C: (f, a) => f(...a)
3595
3670
  });
@@ -3610,7 +3685,7 @@ var LibDataChannelTransport = class {
3610
3685
  if (this._writeCallback !== null) {
3611
3686
  import_log14.log.error("consumer trying to write before we're ready for more data", void 0, {
3612
3687
  F: __dxlog_file15,
3613
- L: 143,
3688
+ L: 155,
3614
3689
  S: this,
3615
3690
  C: (f, a) => f(...a)
3616
3691
  });
@@ -3635,7 +3710,7 @@ var LibDataChannelTransport = class {
3635
3710
  err
3636
3711
  }, {
3637
3712
  F: __dxlog_file15,
3638
- L: 163,
3713
+ L: 175,
3639
3714
  S: this,
3640
3715
  C: (f, a) => f(...a)
3641
3716
  });
@@ -3659,6 +3734,12 @@ var LibDataChannelTransport = class {
3659
3734
  return;
3660
3735
  }
3661
3736
  await this._disconnectStreams();
3737
+ const peer = await this._peer;
3738
+ try {
3739
+ peer.close();
3740
+ } catch (err) {
3741
+ this.errors.raise(err);
3742
+ }
3662
3743
  this._closed = true;
3663
3744
  this.closed.emit();
3664
3745
  }
@@ -3672,7 +3753,7 @@ var LibDataChannelTransport = class {
3672
3753
  peer
3673
3754
  }, {
3674
3755
  F: __dxlog_file15,
3675
- L: 198,
3756
+ L: 216,
3676
3757
  S: this,
3677
3758
  C: (f, a) => f(...a)
3678
3759
  });
@@ -3700,7 +3781,7 @@ var LibDataChannelTransport = class {
3700
3781
  err
3701
3782
  }, {
3702
3783
  F: __dxlog_file15,
3703
- L: 209,
3784
+ L: 227,
3704
3785
  S: this,
3705
3786
  C: (f, a) => f(...a)
3706
3787
  });
@@ -3720,7 +3801,7 @@ var LibDataChannelTransport = class {
3720
3801
  err
3721
3802
  }, {
3722
3803
  F: __dxlog_file15,
3723
- L: 220,
3804
+ L: 238,
3724
3805
  S: this,
3725
3806
  C: (f, a) => f(...a)
3726
3807
  });
@@ -3739,7 +3820,7 @@ var LibDataChannelTransport = class {
3739
3820
  signal
3740
3821
  }, {
3741
3822
  F: __dxlog_file15,
3742
- L: 231,
3823
+ L: 249,
3743
3824
  S: this,
3744
3825
  C: (f, a) => f(...a)
3745
3826
  });
@@ -3748,51 +3829,61 @@ var LibDataChannelTransport = class {
3748
3829
  }).catch((err) => {
3749
3830
  import_log14.log.catch(err, void 0, {
3750
3831
  F: __dxlog_file15,
3751
- L: 236,
3832
+ L: 254,
3752
3833
  S: this,
3753
3834
  C: (f, a) => f(...a)
3754
3835
  });
3755
3836
  });
3756
3837
  }
3757
3838
  async getDetails() {
3839
+ const stats = await this._getStats();
3840
+ const rc = stats?.remoteCandidate;
3841
+ if (!rc) {
3842
+ return "unavailable";
3843
+ }
3844
+ if (rc.candidateType === "relay") {
3845
+ return `${rc.ip}:${rc.port} relay for ${rc.relatedAddress}:${rc.relatedPort}`;
3846
+ }
3847
+ return `${rc.ip}:${rc.port} ${rc.candidateType}`;
3848
+ }
3849
+ async _getStats() {
3758
3850
  return this._peer.then(async (peer) => {
3759
- const cp = await peer.getSelectedCandidatePair();
3760
- if (!cp) {
3761
- return "unavailable";
3851
+ const stats = await peer.getStats();
3852
+ const statsEntries = Array.from(stats.entries());
3853
+ const transport = statsEntries.filter((s) => s[1].type === "transport")[0][1];
3854
+ const candidatePair = statsEntries.filter((s) => s[0] === transport.selectedCandidatePairId);
3855
+ let selectedCandidatePair;
3856
+ let remoteCandidate;
3857
+ if (candidatePair.length > 0) {
3858
+ selectedCandidatePair = candidatePair[0][1];
3859
+ remoteCandidate = statsEntries.filter((s) => s[0] === selectedCandidatePair.remoteCandidateId)[0][1];
3762
3860
  }
3763
- return `${cp.remote.address}:${cp.remote.port}/${cp.remote.transportType} ${cp.remote.type}`;
3764
- }).catch((err) => {
3765
- import_log14.log.catch(err, void 0, {
3766
- F: __dxlog_file15,
3767
- L: 250,
3768
- S: this,
3769
- C: (f, a) => f(...a)
3770
- });
3771
- return "unavailable";
3861
+ return {
3862
+ transport,
3863
+ selectedCandidatePair,
3864
+ remoteCandidate,
3865
+ raw: Object.fromEntries(stats)
3866
+ };
3772
3867
  });
3773
3868
  }
3774
3869
  async getStats() {
3775
- return this._peer.then((peer) => {
3776
- return {
3777
- bytesSent: peer.bytesSent(),
3778
- bytesReceived: peer.bytesReceived(),
3779
- packetsSent: 0,
3780
- packetsReceived: 0
3781
- };
3782
- }).catch((err) => {
3783
- import_log14.log.catch(err, void 0, {
3784
- F: __dxlog_file15,
3785
- L: 266,
3786
- S: this,
3787
- C: (f, a) => f(...a)
3788
- });
3870
+ const stats = await this._getStats();
3871
+ if (!stats) {
3789
3872
  return {
3790
3873
  bytesSent: 0,
3791
3874
  bytesReceived: 0,
3792
3875
  packetsSent: 0,
3793
- packetsReceived: 0
3876
+ packetsReceived: 0,
3877
+ rawStats: {}
3794
3878
  };
3795
- });
3879
+ }
3880
+ return {
3881
+ bytesSent: stats.transport.bytesSent,
3882
+ bytesReceived: stats.transport.bytesReceived,
3883
+ packetsSent: 0,
3884
+ packetsReceived: 0,
3885
+ rawStats: stats.raw
3886
+ };
3796
3887
  }
3797
3888
  // TODO(nf): add classmethod to call node-datachannel.cleanup() when all instances have been destroyed?
3798
3889
  async destroy() {
@@ -3811,6 +3902,7 @@ var createLibDataChannelTransportFactory = (webrtcConfig) => ({
3811
3902
  webrtcConfig
3812
3903
  })
3813
3904
  });
3905
+ var importESM = Function("path", "return import(path)");
3814
3906
  var __dxlog_file16 = "/home/runner/work/dxos/dxos/packages/core/mesh/network-manager/src/transport/tcp-transport.ts";
3815
3907
  var TcpTransportFactory = {
3816
3908
  createTransport: (params) => new TcpTransport(params)
@@ -3998,4 +4090,4 @@ var createTeleportProtocolFactory = (onConnection) => {
3998
4090
  createSimplePeerTransportFactory,
3999
4091
  createTeleportProtocolFactory
4000
4092
  });
4001
- //# sourceMappingURL=chunk-XZF4MAFB.cjs.map
4093
+ //# sourceMappingURL=chunk-Y2B5BDRH.cjs.map