@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.
- package/dist/lib/browser/{chunk-S2JHWVGQ.mjs → chunk-KGZ5C6JO.mjs} +93 -31
- package/dist/lib/browser/{chunk-S2JHWVGQ.mjs.map → chunk-KGZ5C6JO.mjs.map} +3 -3
- package/dist/lib/browser/index.mjs +1 -1
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/testing/index.mjs +1 -1
- package/dist/lib/node/{chunk-DMWORJG3.cjs → chunk-JDKM4UPJ.cjs} +12 -13
- package/dist/lib/node/chunk-JDKM4UPJ.cjs.map +7 -0
- package/dist/lib/node/{chunk-3SCPMSHV.cjs → chunk-WUBZ4UOJ.cjs} +99 -37
- package/dist/lib/node/{chunk-3SCPMSHV.cjs.map → chunk-WUBZ4UOJ.cjs.map} +3 -3
- package/dist/lib/node/{datachannel-ABYQKZRC.cjs → datachannel-3VTTIMR5.cjs} +9 -9
- package/dist/lib/node/{datachannel-ABYQKZRC.cjs.map → datachannel-3VTTIMR5.cjs.map} +2 -2
- package/dist/lib/node/index.cjs +32 -32
- package/dist/lib/node/index.cjs.map +1 -1
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/testing/index.cjs +19 -19
- package/dist/types/src/topology/mmst-topology.d.ts +1 -0
- package/dist/types/src/topology/mmst-topology.d.ts.map +1 -1
- package/dist/types/src/transport/datachannel/rtc-peer-connection.d.ts.map +1 -1
- package/dist/types/src/transport/simplepeer-transport.d.ts +3 -0
- package/dist/types/src/transport/simplepeer-transport.d.ts.map +1 -1
- package/package.json +17 -17
- package/src/topology/mmst-topology.ts +34 -6
- package/src/transport/datachannel/rtc-peer-connection.ts +7 -11
- package/src/transport/libdatachannel-transport.test.ts +0 -4
- package/src/transport/simplepeer-transport.ts +5 -3
- 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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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
|
-
|
|
2429
|
-
|
|
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:
|
|
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
|
-
|
|
2441
|
-
log8(`
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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
|
|
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:
|
|
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:
|
|
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-
|
|
3939
|
+
//# sourceMappingURL=chunk-KGZ5C6JO.mjs.map
|