@dxos/network-manager 0.3.9-main.14901ff → 0.3.9-main.1b9ffda

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 (26) hide show
  1. package/dist/lib/browser/{chunk-S2JHWVGQ.mjs → chunk-KGZ5C6JO.mjs} +93 -31
  2. package/dist/lib/browser/{chunk-S2JHWVGQ.mjs.map → chunk-KGZ5C6JO.mjs.map} +3 -3
  3. package/dist/lib/browser/index.mjs +1 -1
  4. package/dist/lib/browser/meta.json +1 -1
  5. package/dist/lib/browser/testing/index.mjs +1 -1
  6. package/dist/lib/node/{chunk-DMWORJG3.cjs → chunk-JDKM4UPJ.cjs} +12 -13
  7. package/dist/lib/node/chunk-JDKM4UPJ.cjs.map +7 -0
  8. package/dist/lib/node/{chunk-3SCPMSHV.cjs → chunk-WUBZ4UOJ.cjs} +99 -37
  9. package/dist/lib/node/{chunk-3SCPMSHV.cjs.map → chunk-WUBZ4UOJ.cjs.map} +3 -3
  10. package/dist/lib/node/{datachannel-ABYQKZRC.cjs → datachannel-3VTTIMR5.cjs} +9 -9
  11. package/dist/lib/node/{datachannel-ABYQKZRC.cjs.map → datachannel-3VTTIMR5.cjs.map} +2 -2
  12. package/dist/lib/node/index.cjs +32 -32
  13. package/dist/lib/node/index.cjs.map +1 -1
  14. package/dist/lib/node/meta.json +1 -1
  15. package/dist/lib/node/testing/index.cjs +19 -19
  16. package/dist/types/src/topology/mmst-topology.d.ts +1 -0
  17. package/dist/types/src/topology/mmst-topology.d.ts.map +1 -1
  18. package/dist/types/src/transport/datachannel/rtc-peer-connection.d.ts.map +1 -1
  19. package/dist/types/src/transport/simplepeer-transport.d.ts +3 -0
  20. package/dist/types/src/transport/simplepeer-transport.d.ts.map +1 -1
  21. package/package.json +17 -17
  22. package/src/topology/mmst-topology.ts +34 -6
  23. package/src/transport/datachannel/rtc-peer-connection.ts +7 -11
  24. package/src/transport/libdatachannel-transport.test.ts +0 -4
  25. package/src/transport/simplepeer-transport.ts +5 -3
  26. package/dist/lib/node/chunk-DMWORJG3.cjs.map +0 -7
@@ -2349,9 +2349,12 @@ import distance from "xor-distance";
2349
2349
  import { invariant as invariant8 } from "@dxos/invariant";
2350
2350
  import { log as log8 } from "@dxos/log";
2351
2351
  var __dxlog_file9 = "/home/runner/work/dxos/dxos/packages/core/mesh/network-manager/src/topology/mmst-topology.ts";
2352
+ var MIN_UPDATE_INTERVAL = 1e3 * 10;
2353
+ var MAX_CHANGES_PER_UPDATE = 1;
2352
2354
  var MMSTTopology = class {
2353
2355
  constructor({ originateConnections = 2, maxPeers = 4, sampleSize = 10 } = {}) {
2354
2356
  this._sampleCollected = false;
2357
+ this._lastAction = /* @__PURE__ */ new Date(0);
2355
2358
  this._originateConnections = originateConnections;
2356
2359
  this._maxPeers = maxPeers;
2357
2360
  this._sampleSize = sampleSize;
@@ -2359,7 +2362,7 @@ var MMSTTopology = class {
2359
2362
  init(controller) {
2360
2363
  invariant8(!this._controller, "Already initialized", {
2361
2364
  F: __dxlog_file9,
2362
- L: 46,
2365
+ L: 51,
2363
2366
  S: this,
2364
2367
  A: [
2365
2368
  "!this._controller",
@@ -2371,7 +2374,7 @@ var MMSTTopology = class {
2371
2374
  update() {
2372
2375
  invariant8(this._controller, "Not initialized", {
2373
2376
  F: __dxlog_file9,
2374
- L: 51,
2377
+ L: 56,
2375
2378
  S: this,
2376
2379
  A: [
2377
2380
  "this._controller",
@@ -2382,7 +2385,7 @@ var MMSTTopology = class {
2382
2385
  if (this._sampleCollected || connected.length > this._maxPeers || candidates.length > 0) {
2383
2386
  log8("Running the algorithm.", void 0, {
2384
2387
  F: __dxlog_file9,
2385
- L: 55,
2388
+ L: 60,
2386
2389
  S: this,
2387
2390
  C: (f, a) => f(...a)
2388
2391
  });
@@ -2393,7 +2396,7 @@ var MMSTTopology = class {
2393
2396
  async onOffer(peer) {
2394
2397
  invariant8(this._controller, "Not initialized", {
2395
2398
  F: __dxlog_file9,
2396
- L: 62,
2399
+ L: 67,
2397
2400
  S: this,
2398
2401
  A: [
2399
2402
  "this._controller",
@@ -2404,7 +2407,7 @@ var MMSTTopology = class {
2404
2407
  const accept = connected.length < this._maxPeers;
2405
2408
  log8(`Offer ${peer} accept=${accept}`, void 0, {
2406
2409
  F: __dxlog_file9,
2407
- L: 65,
2410
+ L: 70,
2408
2411
  S: this,
2409
2412
  C: (f, a) => f(...a)
2410
2413
  });
@@ -2415,7 +2418,7 @@ var MMSTTopology = class {
2415
2418
  _runAlgorithm() {
2416
2419
  invariant8(this._controller, "Not initialized", {
2417
2420
  F: __dxlog_file9,
2418
- L: 74,
2421
+ L: 79,
2419
2422
  S: this,
2420
2423
  A: [
2421
2424
  "this._controller",
@@ -2424,27 +2427,84 @@ var MMSTTopology = class {
2424
2427
  });
2425
2428
  const { connected, candidates, ownPeerId } = this._controller.getState();
2426
2429
  if (connected.length > this._maxPeers) {
2430
+ log8(`disconnect ${connected.length - this._maxPeers} peers.`, void 0, {
2431
+ F: __dxlog_file9,
2432
+ L: 85,
2433
+ S: this,
2434
+ C: (f, a) => f(...a)
2435
+ });
2427
2436
  const sorted = sortByXorDistance(connected, ownPeerId).reverse().slice(0, this._maxPeers - connected.length);
2428
- for (const peer of sorted) {
2429
- log8(`Disconnect ${peer}.`, void 0, {
2437
+ invariant8(sorted.length === 0, void 0, {
2438
+ F: __dxlog_file9,
2439
+ L: 89,
2440
+ S: this,
2441
+ A: [
2442
+ "sorted.length === 0",
2443
+ ""
2444
+ ]
2445
+ });
2446
+ if (sorted.length > MAX_CHANGES_PER_UPDATE) {
2447
+ log8(`want to disconnect ${sorted.length} peers but limited to ${MAX_CHANGES_PER_UPDATE}`, void 0, {
2430
2448
  F: __dxlog_file9,
2431
- L: 83,
2449
+ L: 92,
2450
+ S: this,
2451
+ C: (f, a) => f(...a)
2452
+ });
2453
+ }
2454
+ if (Date.now() - this._lastAction.getTime() > MIN_UPDATE_INTERVAL) {
2455
+ for (const peer of sorted.slice(0, MAX_CHANGES_PER_UPDATE)) {
2456
+ log8(`Disconnect ${peer}.`, void 0, {
2457
+ F: __dxlog_file9,
2458
+ L: 97,
2459
+ S: this,
2460
+ C: (f, a) => f(...a)
2461
+ });
2462
+ this._controller.disconnect(peer);
2463
+ }
2464
+ this._lastAction = /* @__PURE__ */ new Date();
2465
+ } else {
2466
+ log8("rate limited discconnect", void 0, {
2467
+ F: __dxlog_file9,
2468
+ L: 102,
2432
2469
  S: this,
2433
2470
  C: (f, a) => f(...a)
2434
2471
  });
2435
- this._controller.disconnect(peer);
2436
2472
  }
2437
2473
  } else if (connected.length < this._originateConnections) {
2474
+ log8(`connect ${this._originateConnections - connected.length} peers.`, void 0, {
2475
+ F: __dxlog_file9,
2476
+ L: 106,
2477
+ S: this,
2478
+ C: (f, a) => f(...a)
2479
+ });
2438
2480
  const sample = candidates.sort(() => Math.random() - 0.5).slice(0, this._sampleSize);
2439
2481
  const sorted = sortByXorDistance(sample, ownPeerId).slice(0, this._originateConnections - connected.length);
2440
- for (const peer of sorted) {
2441
- log8(`Connect ${peer}.`, void 0, {
2482
+ if (sorted.length > MAX_CHANGES_PER_UPDATE) {
2483
+ log8(`want to connect ${sorted.length} peers but limited to ${MAX_CHANGES_PER_UPDATE}`, void 0, {
2442
2484
  F: __dxlog_file9,
2443
- L: 91,
2485
+ L: 111,
2486
+ S: this,
2487
+ C: (f, a) => f(...a)
2488
+ });
2489
+ }
2490
+ if (Date.now() - this._lastAction.getTime() > MIN_UPDATE_INTERVAL) {
2491
+ for (const peer of sorted.slice(0, MAX_CHANGES_PER_UPDATE)) {
2492
+ log8(`Connect ${peer}.`, void 0, {
2493
+ F: __dxlog_file9,
2494
+ L: 115,
2495
+ S: this,
2496
+ C: (f, a) => f(...a)
2497
+ });
2498
+ this._controller.connect(peer);
2499
+ }
2500
+ this._lastAction = /* @__PURE__ */ new Date();
2501
+ } else {
2502
+ log8("rate limited connect", void 0, {
2503
+ F: __dxlog_file9,
2504
+ L: 120,
2444
2505
  S: this,
2445
2506
  C: (f, a) => f(...a)
2446
2507
  });
2447
- this._controller.connect(peer);
2448
2508
  }
2449
2509
  }
2450
2510
  }
@@ -2779,6 +2839,9 @@ try {
2779
2839
  // packages/core/mesh/network-manager/src/transport/simplepeer-transport.ts
2780
2840
  var __dxlog_file12 = "/home/runner/work/dxos/dxos/packages/core/mesh/network-manager/src/transport/simplepeer-transport.ts";
2781
2841
  var SimplePeerTransport = class {
2842
+ /**
2843
+ * @params opts.config formatted as per https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection/RTCPeerConnection
2844
+ */
2782
2845
  constructor(params) {
2783
2846
  this.params = params;
2784
2847
  this._closed = false;
@@ -2791,13 +2854,13 @@ var SimplePeerTransport = class {
2791
2854
  id: this._instanceId
2792
2855
  }), {
2793
2856
  F: __dxlog_file12,
2794
- L: 41,
2857
+ L: 44,
2795
2858
  S: this,
2796
2859
  C: (f, a) => f(...a)
2797
2860
  });
2798
2861
  log11("created connection", params, {
2799
2862
  F: __dxlog_file12,
2800
- L: 42,
2863
+ L: 45,
2801
2864
  S: this,
2802
2865
  C: (f, a) => f(...a)
2803
2866
  });
@@ -2810,7 +2873,7 @@ var SimplePeerTransport = class {
2810
2873
  this._peer.on("signal", async (data) => {
2811
2874
  log11("signal", data, {
2812
2875
  F: __dxlog_file12,
2813
- L: 51,
2876
+ L: 54,
2814
2877
  S: this,
2815
2878
  C: (f, a) => f(...a)
2816
2879
  });
@@ -2823,7 +2886,7 @@ var SimplePeerTransport = class {
2823
2886
  this._peer.on("connect", () => {
2824
2887
  log11("connected", void 0, {
2825
2888
  F: __dxlog_file12,
2826
- L: 56,
2889
+ L: 59,
2827
2890
  S: this,
2828
2891
  C: (f, a) => f(...a)
2829
2892
  });
@@ -2834,7 +2897,7 @@ var SimplePeerTransport = class {
2834
2897
  this._peer.on("close", async () => {
2835
2898
  log11("closed", void 0, {
2836
2899
  F: __dxlog_file12,
2837
- L: 63,
2900
+ L: 66,
2838
2901
  S: this,
2839
2902
  C: (f, a) => f(...a)
2840
2903
  });
@@ -2849,7 +2912,7 @@ var SimplePeerTransport = class {
2849
2912
  err
2850
2913
  }, {
2851
2914
  F: __dxlog_file12,
2852
- L: 74,
2915
+ L: 77,
2853
2916
  S: this,
2854
2917
  C: (f, a) => f(...a)
2855
2918
  });
@@ -2858,7 +2921,7 @@ var SimplePeerTransport = class {
2858
2921
  } else if ("code" in err) {
2859
2922
  log11.info("simple-peer error", err, {
2860
2923
  F: __dxlog_file12,
2861
- L: 79,
2924
+ L: 82,
2862
2925
  S: this,
2863
2926
  C: (f, a) => f(...a)
2864
2927
  });
@@ -2888,7 +2951,7 @@ var SimplePeerTransport = class {
2888
2951
  } else {
2889
2952
  log11.info("unknown peer connection error", err, {
2890
2953
  F: __dxlog_file12,
2891
- L: 105,
2954
+ L: 108,
2892
2955
  S: this,
2893
2956
  C: (f, a) => f(...a)
2894
2957
  });
@@ -2902,7 +2965,7 @@ var SimplePeerTransport = class {
2902
2965
  stats: Object.fromEntries(stats.entries())
2903
2966
  }, {
2904
2967
  F: __dxlog_file12,
2905
- L: 113,
2968
+ L: 116,
2906
2969
  S: this,
2907
2970
  C: (f, a) => f(...a)
2908
2971
  });
@@ -2911,7 +2974,7 @@ var SimplePeerTransport = class {
2911
2974
  } catch (err2) {
2912
2975
  log11.catch(err2, void 0, {
2913
2976
  F: __dxlog_file12,
2914
- L: 120,
2977
+ L: 123,
2915
2978
  S: this,
2916
2979
  C: (f, a) => f(...a)
2917
2980
  });
@@ -2922,7 +2985,7 @@ var SimplePeerTransport = class {
2922
2985
  id: this._instanceId
2923
2986
  }), {
2924
2987
  F: __dxlog_file12,
2925
- L: 126,
2988
+ L: 129,
2926
2989
  S: this,
2927
2990
  C: (f, a) => f(...a)
2928
2991
  });
@@ -2975,29 +3038,28 @@ var SimplePeerTransport = class {
2975
3038
  if (!rc) {
2976
3039
  return "unavailable";
2977
3040
  }
2978
- if (rc.relay) {
2979
- return `${rc.ip}:${rc.port}/${rc.protocol} relay for XXX ${rc.candidateType}`;
3041
+ if (rc.candidateType === "relay") {
3042
+ return `${rc.ip}:${rc.port}/${rc.protocol} relay for ${rc.relatedAddress}:${rc.relatedPort}`;
2980
3043
  }
2981
3044
  return `${rc.ip}:${rc.port}/${rc.protocol} ${rc.candidateType}`;
2982
3045
  }
2983
3046
  async destroy() {
2984
3047
  log11("closing...", void 0, {
2985
3048
  F: __dxlog_file12,
2986
- L: 189,
3049
+ L: 192,
2987
3050
  S: this,
2988
3051
  C: (f, a) => f(...a)
2989
3052
  });
2990
3053
  if (this._closed) {
2991
3054
  return;
2992
3055
  }
2993
- this._closed = true;
2994
3056
  this._disconnectStreams();
2995
3057
  this._peer.destroy();
2996
3058
  this._closed = true;
2997
3059
  this.closed.emit();
2998
3060
  log11("closed", void 0, {
2999
3061
  F: __dxlog_file12,
3000
- L: 198,
3062
+ L: 200,
3001
3063
  S: this,
3002
3064
  C: (f, a) => f(...a)
3003
3065
  });
@@ -3874,4 +3936,4 @@ export {
3874
3936
  TcpTransport,
3875
3937
  createTeleportProtocolFactory
3876
3938
  };
3877
- //# sourceMappingURL=chunk-S2JHWVGQ.mjs.map
3939
+ //# sourceMappingURL=chunk-KGZ5C6JO.mjs.map