@dxos/network-manager 0.3.9-main.14901ff → 0.3.9-main.26defc6
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-J7KS7JMZ.mjs} +92 -29
- package/dist/lib/browser/{chunk-S2JHWVGQ.mjs.map → chunk-J7KS7JMZ.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-3SCPMSHV.cjs → chunk-55WTPQV5.cjs} +98 -35
- package/dist/lib/node/{chunk-3SCPMSHV.cjs.map → chunk-55WTPQV5.cjs.map} +3 -3
- 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/{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 +35 -7
- 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 +3 -0
- package/dist/lib/node/chunk-DMWORJG3.cjs.map +0 -7
|
@@ -24,8 +24,8 @@ __export(testing_exports, {
|
|
|
24
24
|
TestSwarmConnection: () => TestSwarmConnection
|
|
25
25
|
});
|
|
26
26
|
module.exports = __toCommonJS(testing_exports);
|
|
27
|
-
var
|
|
28
|
-
var
|
|
27
|
+
var import_chunk_55WTPQV5 = require("../chunk-55WTPQV5.cjs");
|
|
28
|
+
var import_chunk_JDKM4UPJ = require("../chunk-JDKM4UPJ.cjs");
|
|
29
29
|
var import_keys = require("@dxos/keys");
|
|
30
30
|
var import_log = require("@dxos/log");
|
|
31
31
|
var import_messaging = require("@dxos/messaging");
|
|
@@ -48,7 +48,7 @@ var TestWireProtocol = class {
|
|
|
48
48
|
this.connected = new import_async.Event();
|
|
49
49
|
this.disconnected = new import_async.Event();
|
|
50
50
|
this.otherConnections = new import_util2.ComplexMap(({ remotePeerId, extension }) => remotePeerId.toHex() + extension);
|
|
51
|
-
this.factory = (0,
|
|
51
|
+
this.factory = (0, import_chunk_55WTPQV5.createTeleportProtocolFactory)(async (teleport) => {
|
|
52
52
|
(0, import_log2.log)("create", {
|
|
53
53
|
remotePeerId: teleport.remotePeerId
|
|
54
54
|
}, {
|
|
@@ -151,9 +151,9 @@ var TestPeer = class {
|
|
|
151
151
|
this._signalManager = this.testBuilder.createSignalManager();
|
|
152
152
|
if (!transport) {
|
|
153
153
|
if (this.testBuilder.options.signalHosts) {
|
|
154
|
-
transport =
|
|
154
|
+
transport = import_chunk_55WTPQV5.TransportKind.SIMPLE_PEER;
|
|
155
155
|
} else {
|
|
156
|
-
transport =
|
|
156
|
+
transport = import_chunk_55WTPQV5.TransportKind.MEMORY;
|
|
157
157
|
}
|
|
158
158
|
}
|
|
159
159
|
this._networkManager = this.createNetworkManager(transport);
|
|
@@ -169,18 +169,18 @@ var TestPeer = class {
|
|
|
169
169
|
C: (f, a) => f(...a)
|
|
170
170
|
});
|
|
171
171
|
switch (transport) {
|
|
172
|
-
case
|
|
172
|
+
case import_chunk_55WTPQV5.TransportKind.MEMORY:
|
|
173
173
|
throw new Error("Memory transport not supported with signal server.");
|
|
174
|
-
case
|
|
175
|
-
transportFactory =
|
|
174
|
+
case import_chunk_55WTPQV5.TransportKind.TCP:
|
|
175
|
+
transportFactory = import_chunk_55WTPQV5.TcpTransportFactory;
|
|
176
176
|
break;
|
|
177
|
-
case
|
|
178
|
-
transportFactory = (0,
|
|
177
|
+
case import_chunk_55WTPQV5.TransportKind.SIMPLE_PEER:
|
|
178
|
+
transportFactory = (0, import_chunk_55WTPQV5.createSimplePeerTransportFactory)();
|
|
179
179
|
break;
|
|
180
|
-
case
|
|
181
|
-
transportFactory = (0,
|
|
180
|
+
case import_chunk_55WTPQV5.TransportKind.LIBDATACHANNEL:
|
|
181
|
+
transportFactory = (0, import_chunk_55WTPQV5.createLibDataChannelTransportFactory)();
|
|
182
182
|
break;
|
|
183
|
-
case
|
|
183
|
+
case import_chunk_55WTPQV5.TransportKind.SIMPLE_PEER_PROXY:
|
|
184
184
|
{
|
|
185
185
|
const [proxyPort, servicePort] = (0, import_rpc.createLinkedPorts)();
|
|
186
186
|
this._proxy = (0, import_rpc.createProtoRpcPeer)({
|
|
@@ -199,21 +199,21 @@ var TestPeer = class {
|
|
|
199
199
|
BridgeService: import_protocols.schema.getService("dxos.mesh.bridge.BridgeService")
|
|
200
200
|
},
|
|
201
201
|
handlers: {
|
|
202
|
-
BridgeService: new
|
|
202
|
+
BridgeService: new import_chunk_55WTPQV5.SimplePeerTransportService()
|
|
203
203
|
},
|
|
204
204
|
noHandshake: true,
|
|
205
205
|
encodingOptions: {
|
|
206
206
|
preserveAny: true
|
|
207
207
|
}
|
|
208
208
|
});
|
|
209
|
-
transportFactory = new
|
|
209
|
+
transportFactory = new import_chunk_55WTPQV5.SimplePeerTransportProxyFactory().setBridgeService(this._proxy.rpc.BridgeService);
|
|
210
210
|
}
|
|
211
211
|
break;
|
|
212
212
|
default:
|
|
213
213
|
throw new Error(`Unsupported transport: ${transport}`);
|
|
214
214
|
}
|
|
215
215
|
} else {
|
|
216
|
-
if (transport !==
|
|
216
|
+
if (transport !== import_chunk_55WTPQV5.TransportKind.MEMORY && transport !== import_chunk_55WTPQV5.TransportKind.TCP) {
|
|
217
217
|
import_log.log.warn(`specified transport ${transport} but no signalling configured, using memory transport instead`, void 0, {
|
|
218
218
|
F: __dxlog_file2,
|
|
219
219
|
L: 154,
|
|
@@ -227,9 +227,9 @@ var TestPeer = class {
|
|
|
227
227
|
S: this,
|
|
228
228
|
C: (f, a) => f(...a)
|
|
229
229
|
});
|
|
230
|
-
transportFactory =
|
|
230
|
+
transportFactory = import_chunk_55WTPQV5.MemoryTransportFactory;
|
|
231
231
|
}
|
|
232
|
-
return new
|
|
232
|
+
return new import_chunk_55WTPQV5.NetworkManager({
|
|
233
233
|
signalManager: this._signalManager,
|
|
234
234
|
transportFactory
|
|
235
235
|
});
|
|
@@ -274,7 +274,7 @@ var TestSwarmConnection = class {
|
|
|
274
274
|
}
|
|
275
275
|
// TODO(burdon): Need to create new plugin instance per swarm?
|
|
276
276
|
// If so, then perhaps joinSwarm should return swarm object with access to plugins.
|
|
277
|
-
async join(topology = new
|
|
277
|
+
async join(topology = new import_chunk_55WTPQV5.FullyConnectedTopology()) {
|
|
278
278
|
await this.peer._networkManager.joinSwarm({
|
|
279
279
|
topic: this.topic,
|
|
280
280
|
peerId: this.peer.peerId,
|
|
@@ -20,6 +20,7 @@ export declare class MMSTTopology implements Topology {
|
|
|
20
20
|
private readonly _sampleSize;
|
|
21
21
|
private _controller?;
|
|
22
22
|
private _sampleCollected;
|
|
23
|
+
private _lastAction;
|
|
23
24
|
constructor({ originateConnections, maxPeers, sampleSize }?: MMSTTopologyOptions);
|
|
24
25
|
init(controller: SwarmController): void;
|
|
25
26
|
update(): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mmst-topology.d.ts","sourceRoot":"","sources":["../../../../src/topology/mmst-topology.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAG5C,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"mmst-topology.d.ts","sourceRoot":"","sources":["../../../../src/topology/mmst-topology.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAG5C,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAC;AAKjE,MAAM,WAAW,mBAAmB;IAClC;;OAEG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAE9B;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,YAAa,YAAW,QAAQ;IAC3C,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAS;IAC/C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IAErC,OAAO,CAAC,WAAW,CAAC,CAAkB;IAEtC,OAAO,CAAC,gBAAgB,CAAS;IAEjC,OAAO,CAAC,WAAW,CAAe;gBAEtB,EAAE,oBAAwB,EAAE,QAAY,EAAE,UAAe,EAAE,GAAE,mBAAwB;IAMjG,IAAI,CAAC,UAAU,EAAE,eAAe,GAAG,IAAI;IAKvC,MAAM,IAAI,IAAI;IAWR,OAAO,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC;IAQ1C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAI9B,OAAO,CAAC,aAAa;IA+CrB,QAAQ;CAGT"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rtc-peer-connection.d.ts","sourceRoot":"","sources":["../../../../../src/transport/datachannel/rtc-peer-connection.ts"],"names":[],"mappings":"AAIA,OAAa,EAAE,KAAK,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAQpE,qBAAa,cAAe,SAAQ,WAAY,YAAW,iBAAiB;;WAC7D,mBAAmB,CAAC,eAAe,EAAE,mBAAmB,GAAG,OAAO,CAAC,cAAc,CAAC;IAI/F,uBAAuB,EAAE,OAAO,GAAG,IAAI,CAAC;IACxC,IAAI,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAE9B,uBAAuB,EAAE,CAAC,CAAC,IAAI,EAAE,iBAAiB,EAAE,EAAE,EAAE,KAAK,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC;IAC9E,aAAa,EAAE,CAAC,CAAC,IAAI,EAAE,iBAAiB,EAAE,EAAE,EAAE,mBAAmB,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC;IAClF,cAAc,EAAE,CAAC,CAAC,IAAI,EAAE,iBAAiB,EAAE,EAAE,EAAE,yBAAyB,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC;IACzF,mBAAmB,EAAE,CAAC,CAAC,IAAI,EAAE,iBAAiB,EAAE,EAAE,EAAE,KAAK,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC;IAC1E,0BAA0B,EAAE,CAAC,CAAC,IAAI,EAAE,iBAAiB,EAAE,EAAE,EAAE,KAAK,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC;IACjF,yBAAyB,EAAE,CAAC,CAAC,IAAI,EAAE,iBAAiB,EAAE,EAAE,EAAE,KAAK,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC;IAChF,mBAAmB,EAAE,CAAC,CAAC,IAAI,EAAE,iBAAiB,EAAE,EAAE,EAAE,KAAK,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC;IAC1E,sBAAsB,EAAE,CAAC,CAAC,IAAI,EAAE,iBAAiB,EAAE,EAAE,EAAE,KAAK,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC;IAC7E,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,iBAAiB,EAAE,EAAE,EAAE,aAAa,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC;gBAQ1D,IAAI,GAAE,gBAAqB;
|
|
1
|
+
{"version":3,"file":"rtc-peer-connection.d.ts","sourceRoot":"","sources":["../../../../../src/transport/datachannel/rtc-peer-connection.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,6 +21,9 @@ export declare class SimplePeerTransport implements Transport {
|
|
|
21
21
|
readonly connected: Event<void>;
|
|
22
22
|
readonly errors: ErrorStream;
|
|
23
23
|
private readonly _instanceId;
|
|
24
|
+
/**
|
|
25
|
+
* @params opts.config formatted as per https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection/RTCPeerConnection
|
|
26
|
+
*/
|
|
24
27
|
constructor(params: SimplePeerTransportParams);
|
|
25
28
|
getStats(): Promise<TransportStats>;
|
|
26
29
|
_getStats(): Promise<any>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"simplepeer-transport.d.ts","sourceRoot":"","sources":["../../../../src/transport/simplepeer-transport.ts"],"names":[],"mappings":";AAQA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,WAAW,EAAS,MAAM,aAAa,CAAC;AAIjD,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,uCAAuC,CAAC;AAEpE,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,gBAAgB,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAGzF,MAAM,MAAM,yBAAyB,GAAG;IACtC,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC,eAAe,CAAC;IAC/B,YAAY,CAAC,EAAE,GAAG,CAAC;IACnB,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/C,CAAC;AAEF;;GAEG;AACH,qBAAa,mBAAoB,YAAW,SAAS;
|
|
1
|
+
{"version":3,"file":"simplepeer-transport.d.ts","sourceRoot":"","sources":["../../../../src/transport/simplepeer-transport.ts"],"names":[],"mappings":";AAQA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,WAAW,EAAS,MAAM,aAAa,CAAC;AAIjD,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,uCAAuC,CAAC;AAEpE,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,gBAAgB,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAGzF,MAAM,MAAM,yBAAyB,GAAG;IACtC,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC,eAAe,CAAC;IAC/B,YAAY,CAAC,EAAE,GAAG,CAAC;IACnB,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/C,CAAC;AAEF;;GAEG;AACH,qBAAa,mBAAoB,YAAW,SAAS;IAcvC,OAAO,CAAC,QAAQ,CAAC,MAAM;IAbnC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAa;IACnC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAS;IAEvB,QAAQ,CAAC,MAAM,cAAe;IAC9B,QAAQ,CAAC,SAAS,cAAe;IACjC,QAAQ,CAAC,MAAM,cAAqB;IAEpC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA8B;IAE1D;;OAEG;gBAC0B,MAAM,EAAE,yBAAyB;IAyFxD,QAAQ,IAAI,OAAO,CAAC,cAAc,CAAC;IAsBnC,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC;IAwBzB,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;IAa7B,OAAO;IAab,MAAM,CAAC,MAAM,EAAE,MAAM;IASrB,OAAO,CAAC,kBAAkB;CAM3B;AAED,eAAO,MAAM,gCAAgC,kBAAmB,GAAG,KAAG,gBAMpE,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dxos/network-manager",
|
|
3
|
-
"version": "0.3.9-main.
|
|
3
|
+
"version": "0.3.9-main.26defc6",
|
|
4
4
|
"description": "Network Manager",
|
|
5
5
|
"homepage": "https://dxos.org",
|
|
6
6
|
"bugs": "https://github.com/dxos/dxos/issues",
|
|
@@ -31,21 +31,21 @@
|
|
|
31
31
|
"tiny-invariant": "^1.3.1",
|
|
32
32
|
"ws": "^8.14.2",
|
|
33
33
|
"xor-distance": "^2.0.0",
|
|
34
|
-
"@dxos/async": "0.3.9-main.
|
|
35
|
-
"@dxos/codec-protobuf": "0.3.9-main.
|
|
36
|
-
"@dxos/
|
|
37
|
-
"@dxos/
|
|
38
|
-
"@dxos/
|
|
39
|
-
"@dxos/
|
|
40
|
-
"@dxos/
|
|
41
|
-
"@dxos/
|
|
42
|
-
"@dxos/log": "0.3.9-main.
|
|
43
|
-
"@dxos/messaging": "0.3.9-main.
|
|
44
|
-
"@dxos/node-std": "0.3.9-main.
|
|
45
|
-
"@dxos/
|
|
46
|
-
"@dxos/teleport": "0.3.9-main.
|
|
47
|
-
"@dxos/
|
|
48
|
-
"@dxos/
|
|
34
|
+
"@dxos/async": "0.3.9-main.26defc6",
|
|
35
|
+
"@dxos/codec-protobuf": "0.3.9-main.26defc6",
|
|
36
|
+
"@dxos/crypto": "0.3.9-main.26defc6",
|
|
37
|
+
"@dxos/credentials": "0.3.9-main.26defc6",
|
|
38
|
+
"@dxos/debug": "0.3.9-main.26defc6",
|
|
39
|
+
"@dxos/context": "0.3.9-main.26defc6",
|
|
40
|
+
"@dxos/keys": "0.3.9-main.26defc6",
|
|
41
|
+
"@dxos/invariant": "0.3.9-main.26defc6",
|
|
42
|
+
"@dxos/log": "0.3.9-main.26defc6",
|
|
43
|
+
"@dxos/messaging": "0.3.9-main.26defc6",
|
|
44
|
+
"@dxos/node-std": "0.3.9-main.26defc6",
|
|
45
|
+
"@dxos/protocols": "0.3.9-main.26defc6",
|
|
46
|
+
"@dxos/teleport": "0.3.9-main.26defc6",
|
|
47
|
+
"@dxos/rpc": "0.3.9-main.26defc6",
|
|
48
|
+
"@dxos/util": "0.3.9-main.26defc6"
|
|
49
49
|
},
|
|
50
50
|
"devDependencies": {
|
|
51
51
|
"@swc-node/register": "1.5.4",
|
|
@@ -55,7 +55,7 @@
|
|
|
55
55
|
"earljs": "~0.1.10",
|
|
56
56
|
"fast-check": "~3.3.0",
|
|
57
57
|
"typescript": "^5.2.2",
|
|
58
|
-
"@dxos/signal": "0.3.9-main.
|
|
58
|
+
"@dxos/signal": "0.3.9-main.26defc6"
|
|
59
59
|
},
|
|
60
60
|
"publishConfig": {
|
|
61
61
|
"access": "public"
|
|
@@ -10,6 +10,9 @@ import { log } from '@dxos/log';
|
|
|
10
10
|
|
|
11
11
|
import { type SwarmController, type Topology } from './topology';
|
|
12
12
|
|
|
13
|
+
const MIN_UPDATE_INTERVAL = 1000 * 10;
|
|
14
|
+
const MAX_CHANGES_PER_UPDATE = 1;
|
|
15
|
+
|
|
13
16
|
export interface MMSTTopologyOptions {
|
|
14
17
|
/**
|
|
15
18
|
* Number of connections the peer will originate by itself.
|
|
@@ -36,6 +39,8 @@ export class MMSTTopology implements Topology {
|
|
|
36
39
|
|
|
37
40
|
private _sampleCollected = false;
|
|
38
41
|
|
|
42
|
+
private _lastAction = new Date(0);
|
|
43
|
+
|
|
39
44
|
constructor({ originateConnections = 2, maxPeers = 4, sampleSize = 10 }: MMSTTopologyOptions = {}) {
|
|
40
45
|
this._originateConnections = originateConnections;
|
|
41
46
|
this._maxPeers = maxPeers;
|
|
@@ -52,7 +57,7 @@ export class MMSTTopology implements Topology {
|
|
|
52
57
|
const { connected, candidates } = this._controller.getState();
|
|
53
58
|
// Run the algorithms if we have first candidates, ran it before, or have more connections than needed.
|
|
54
59
|
if (this._sampleCollected || connected.length > this._maxPeers || candidates.length > 0) {
|
|
55
|
-
log('Running the algorithm.');
|
|
60
|
+
log.info('Running the algorithm.');
|
|
56
61
|
this._sampleCollected = true;
|
|
57
62
|
this._runAlgorithm();
|
|
58
63
|
}
|
|
@@ -74,22 +79,45 @@ export class MMSTTopology implements Topology {
|
|
|
74
79
|
invariant(this._controller, 'Not initialized');
|
|
75
80
|
const { connected, candidates, ownPeerId } = this._controller.getState();
|
|
76
81
|
|
|
82
|
+
// TODO(nf): does this rate limiting/flap dampening logic belong here or in the SwarmController?
|
|
77
83
|
if (connected.length > this._maxPeers) {
|
|
78
84
|
// Disconnect extra peers.
|
|
85
|
+
log.info(`disconnect ${connected.length - this._maxPeers} peers.`);
|
|
79
86
|
const sorted = sortByXorDistance(connected, ownPeerId)
|
|
80
87
|
.reverse()
|
|
81
88
|
.slice(0, this._maxPeers - connected.length);
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
89
|
+
invariant(sorted.length === 0);
|
|
90
|
+
|
|
91
|
+
if (sorted.length > MAX_CHANGES_PER_UPDATE) {
|
|
92
|
+
log(`want to disconnect ${sorted.length} peers but limited to ${MAX_CHANGES_PER_UPDATE}`);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
if (Date.now() - this._lastAction.getTime() > MIN_UPDATE_INTERVAL) {
|
|
96
|
+
for (const peer of sorted.slice(0, MAX_CHANGES_PER_UPDATE)) {
|
|
97
|
+
log.info(`Disconnect ${peer}.`);
|
|
98
|
+
this._controller.disconnect(peer);
|
|
99
|
+
}
|
|
100
|
+
this._lastAction = new Date();
|
|
101
|
+
} else {
|
|
102
|
+
log.info('rate limited discconnect');
|
|
85
103
|
}
|
|
86
104
|
} else if (connected.length < this._originateConnections) {
|
|
87
105
|
// Connect new peers to reach desired quota.
|
|
106
|
+
log.info(`connect ${this._originateConnections - connected.length} peers.`);
|
|
88
107
|
const sample = candidates.sort(() => Math.random() - 0.5).slice(0, this._sampleSize);
|
|
89
108
|
const sorted = sortByXorDistance(sample, ownPeerId).slice(0, this._originateConnections - connected.length);
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
109
|
+
|
|
110
|
+
if (sorted.length > MAX_CHANGES_PER_UPDATE) {
|
|
111
|
+
log(`want to connect ${sorted.length} peers but limited to ${MAX_CHANGES_PER_UPDATE}`);
|
|
112
|
+
}
|
|
113
|
+
if (Date.now() - this._lastAction.getTime() > MIN_UPDATE_INTERVAL) {
|
|
114
|
+
for (const peer of sorted.slice(0, MAX_CHANGES_PER_UPDATE)) {
|
|
115
|
+
log.info(`Connect ${peer}.`);
|
|
116
|
+
this._controller.connect(peer);
|
|
117
|
+
}
|
|
118
|
+
this._lastAction = new Date();
|
|
119
|
+
} else {
|
|
120
|
+
log.info('rate limited connect');
|
|
93
121
|
}
|
|
94
122
|
}
|
|
95
123
|
}
|
|
@@ -45,21 +45,17 @@ export class PeerConnection extends EventTarget implements RTCPeerConnection {
|
|
|
45
45
|
const iceServers = init.iceServers ?? [];
|
|
46
46
|
|
|
47
47
|
this.#peerConnection = new node.PeerConnection(`peer-${Math.random()}`, {
|
|
48
|
+
// convert https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection/RTCPeerConnection#iceservers to the format expected by https://github.com/murat-dogan/node-datachannel/blob/master/src/peer-connection-wrapper.cpp#L101
|
|
48
49
|
iceServers: iceServers
|
|
49
50
|
.map((server) => {
|
|
50
|
-
const urls =
|
|
51
|
+
const urls = Array.isArray(server.urls) ? server.urls : [server.urls];
|
|
51
52
|
|
|
52
53
|
return urls.map((url) => {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
password: server.credential,
|
|
59
|
-
// relayType - how to specify?
|
|
60
|
-
};
|
|
61
|
-
|
|
62
|
-
return iceServer;
|
|
54
|
+
if (server.username && server.credential) {
|
|
55
|
+
const [protocol, rest] = url.split(/:(.*)/);
|
|
56
|
+
return `${protocol}:${server.username}:${server.credential}@${rest}`;
|
|
57
|
+
}
|
|
58
|
+
return url;
|
|
63
59
|
});
|
|
64
60
|
})
|
|
65
61
|
.flat(),
|
|
@@ -37,6 +37,9 @@ export class SimplePeerTransport implements Transport {
|
|
|
37
37
|
|
|
38
38
|
private readonly _instanceId = PublicKey.random().toHex();
|
|
39
39
|
|
|
40
|
+
/**
|
|
41
|
+
* @params opts.config formatted as per https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection/RTCPeerConnection
|
|
42
|
+
*/
|
|
40
43
|
constructor(private readonly params: SimplePeerTransportParams) {
|
|
41
44
|
log.trace('dxos.mesh.webrtc-transport.constructor', trace.begin({ id: this._instanceId }));
|
|
42
45
|
log('created connection', params);
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/transport/datachannel/index.ts", "../../../src/transport/datachannel/rtc-ice-candidate.ts", "../../../src/transport/datachannel/rtc-peer-connection.ts", "../../../src/transport/datachannel/rtc-data-channel.ts", "../../../src/transport/datachannel/rtc-events.ts", "../../../src/transport/datachannel/rtc-session-description.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport node from 'node-datachannel';\n\nimport { IceCandidate } from './rtc-ice-candidate';\nimport { PeerConnection } from './rtc-peer-connection';\nimport { SessionDescription } from './rtc-session-description';\n\nexport { SessionDescription as RTCSessionDescription };\nexport { IceCandidate as RTCIceCandidate };\nexport { PeerConnection as RTCPeerConnection };\n\nexport const cleanup = (): void => {\n node.cleanup();\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\n/**\n * @see https://developer.mozilla.org/docs/Web/API/RTCIceCandidate\n */\nexport class IceCandidate implements RTCIceCandidate {\n readonly address: string | null;\n readonly candidate: string;\n readonly component: RTCIceComponent | null;\n readonly foundation: string | null;\n readonly port: number | null;\n readonly priority: number | null;\n readonly protocol: RTCIceProtocol | null;\n readonly relatedAddress: string | null;\n readonly relatedPort: number | null;\n readonly sdpMLineIndex: number | null;\n readonly sdpMid: string | null;\n readonly tcpType: RTCIceTcpCandidateType | null;\n readonly type: RTCIceCandidateType | null;\n readonly usernameFragment: string | null;\n\n constructor(init: RTCIceCandidateInit) {\n if (init.candidate == null) {\n throw new DOMException('candidate must be specified');\n }\n\n this.candidate = init.candidate;\n this.sdpMLineIndex = init.sdpMLineIndex ?? null;\n this.sdpMid = init.sdpMid ?? null;\n this.usernameFragment = init.usernameFragment ?? null;\n\n this.address = null;\n this.component = null;\n this.foundation = null;\n this.port = null;\n this.priority = null;\n this.protocol = null;\n this.relatedAddress = null;\n this.relatedPort = null;\n this.tcpType = null;\n this.type = null;\n }\n\n toJSON(): RTCIceCandidateInit {\n return {\n candidate: this.candidate,\n sdpMLineIndex: this.sdpMLineIndex,\n sdpMid: this.sdpMid,\n usernameFragment: this.usernameFragment,\n };\n }\n}\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport node, { type SelectedCandidateInfo } from 'node-datachannel';\nimport defer, { type DeferredPromise } from 'p-defer';\n\nimport { DataChannel } from './rtc-data-channel';\nimport { DataChannelEvent, PeerConnectionIceEvent } from './rtc-events';\nimport { IceCandidate } from './rtc-ice-candidate';\nimport { SessionDescription } from './rtc-session-description';\n\nexport class PeerConnection extends EventTarget implements RTCPeerConnection {\n static async generateCertificate(keygenAlgorithm: AlgorithmIdentifier): Promise<RTCCertificate> {\n throw new Error('Not implemented');\n }\n\n canTrickleIceCandidates: boolean | null;\n sctp: RTCSctpTransport | null;\n\n onconnectionstatechange: ((this: RTCPeerConnection, ev: Event) => any) | null;\n ondatachannel: ((this: RTCPeerConnection, ev: RTCDataChannelEvent) => any) | null;\n onicecandidate: ((this: RTCPeerConnection, ev: RTCPeerConnectionIceEvent) => any) | null;\n onicecandidateerror: ((this: RTCPeerConnection, ev: Event) => any) | null;\n oniceconnectionstatechange: ((this: RTCPeerConnection, ev: Event) => any) | null;\n onicegatheringstatechange: ((this: RTCPeerConnection, ev: Event) => any) | null;\n onnegotiationneeded: ((this: RTCPeerConnection, ev: Event) => any) | null;\n onsignalingstatechange: ((this: RTCPeerConnection, ev: Event) => any) | null;\n ontrack: ((this: RTCPeerConnection, ev: RTCTrackEvent) => any) | null;\n\n #peerConnection: node.PeerConnection;\n #config: RTCConfiguration;\n #localOffer: DeferredPromise<RTCSessionDescriptionInit>;\n #localAnswer: DeferredPromise<RTCSessionDescriptionInit>;\n #dataChannels: Set<DataChannel>;\n\n constructor(init: RTCConfiguration = {}) {\n super();\n\n this.#config = init;\n this.#localOffer = defer();\n this.#localAnswer = defer();\n this.#dataChannels = new Set();\n\n const iceServers = init.iceServers ?? [];\n\n this.#peerConnection = new node.PeerConnection(`peer-${Math.random()}`, {\n iceServers: iceServers\n .map((server) => {\n const urls = (Array.isArray(server.urls) ? server.urls : [server.urls]).map((str) => new URL(str));\n\n return urls.map((url) => {\n /** @type {import('../lib/index.js').IceServer} */\n const iceServer = {\n hostname: url.hostname,\n port: parseInt(url.port, 10),\n username: server.username,\n password: server.credential,\n // relayType - how to specify?\n };\n\n return iceServer;\n });\n })\n .flat(),\n iceTransportPolicy: init?.iceTransportPolicy,\n });\n\n this.#peerConnection.onStateChange(() => {\n this.dispatchEvent(new Event('connectionstatechange'));\n });\n // https://github.com/murat-dogan/node-datachannel/pull/171\n // this.#peerConnection.onSignalingStateChange(() => {\n // this.dispatchEvent(new Event('signalingstatechange'))\n // })\n this.#peerConnection.onGatheringStateChange(() => {\n this.dispatchEvent(new Event('icegatheringstatechange'));\n });\n this.#peerConnection.onDataChannel((channel) => {\n this.dispatchEvent(new DataChannelEvent(new DataChannel(channel)));\n });\n\n // forward events to properties\n this.addEventListener('connectionstatechange', (event) => {\n this.onconnectionstatechange?.(event);\n });\n this.addEventListener('signalingstatechange', (event) => {\n this.onsignalingstatechange?.(event);\n });\n this.addEventListener('icegatheringstatechange', (event) => {\n this.onicegatheringstatechange?.(event);\n });\n this.addEventListener('datachannel', (event) => {\n this.ondatachannel?.(event as RTCDataChannelEvent);\n });\n\n this.#peerConnection.onLocalDescription((sdp, type) => {\n if (type === 'offer') {\n this.#localOffer.resolve({\n sdp,\n type,\n });\n }\n\n if (type === 'answer') {\n this.#localAnswer.resolve({\n sdp,\n type,\n });\n }\n });\n\n this.#peerConnection.onLocalCandidate((candidate, mid) => {\n if (mid === 'unspec') {\n this.#localAnswer.reject(new Error(`Invalid description type ${mid}`));\n return;\n }\n\n const event = new PeerConnectionIceEvent(new IceCandidate({ candidate }));\n\n this.onicecandidate?.(event);\n });\n\n this.canTrickleIceCandidates = null;\n this.sctp = null;\n this.onconnectionstatechange = null;\n this.ondatachannel = null;\n this.onicecandidate = null;\n this.onicecandidateerror = null;\n this.oniceconnectionstatechange = null;\n this.onicegatheringstatechange = null;\n this.onnegotiationneeded = null;\n this.onsignalingstatechange = null;\n this.ontrack = null;\n }\n\n get connectionState(): RTCPeerConnectionState {\n return assertState(this.#peerConnection.state(), RTCPeerConnectionStates);\n }\n\n get iceConnectionState(): RTCIceConnectionState {\n return assertState(this.#peerConnection.state(), RTCIceConnectionStates);\n }\n\n get iceGatheringState(): RTCIceGatheringState {\n return assertState(this.#peerConnection.gatheringState(), RTCIceGatheringStates);\n }\n\n get signalingState(): RTCSignalingState {\n return assertState(this.#peerConnection.signalingState(), RTCSignalingStates);\n }\n\n get currentLocalDescription(): RTCSessionDescription | null {\n return toSessionDescription(this.#peerConnection.localDescription());\n }\n\n get localDescription(): RTCSessionDescription | null {\n return toSessionDescription(this.#peerConnection.localDescription());\n }\n\n get pendingLocalDescription(): RTCSessionDescription | null {\n return toSessionDescription(this.#peerConnection.localDescription());\n }\n\n get currentRemoteDescription(): RTCSessionDescription | null {\n // not exposed by node-datachannel\n console.log(\"node-datachannel doesn't expose currentRemoteDescription\");\n return toSessionDescription(null);\n }\n\n get pendingRemoteDescription(): RTCSessionDescription | null {\n // not exposed by node-datachannel\n console.log(\"node-datachannel doesn't expose pendingRemoteDescription\");\n return toSessionDescription(null);\n }\n\n get remoteDescription(): RTCSessionDescription | null {\n // not exposed by node-datachannel\n console.log(\"node-datachannel doesn't expose remoteDescription\");\n return toSessionDescription(null);\n }\n\n async addIceCandidate(candidate?: RTCIceCandidateInit): Promise<void> {\n if (candidate == null || candidate.candidate == null) {\n throw new Error('Candidate invalid');\n }\n\n this.#peerConnection.addRemoteCandidate(candidate.candidate, candidate.sdpMid ?? '0');\n }\n\n getSelectedCandidatePair(): { local: SelectedCandidateInfo; remote: SelectedCandidateInfo } | null {\n return this.#peerConnection.getSelectedCandidatePair();\n }\n\n addTrack(track: MediaStreamTrack, ...streams: MediaStream[]): RTCRtpSender {\n throw new Error('addTrack Not implemented');\n }\n\n addTransceiver(trackOrKind: MediaStreamTrack | string, init?: RTCRtpTransceiverInit): RTCRtpTransceiver {\n throw new Error('addTransciever Not implemented');\n }\n\n close(): void {\n // close all channels before shutting down\n this.#dataChannels.forEach((channel) => {\n channel.close();\n });\n\n this.#peerConnection.close();\n this.#peerConnection.destroy();\n }\n\n bytesSent(): number {\n return this.#peerConnection.bytesSent();\n }\n\n bytesReceived(): number {\n return this.#peerConnection.bytesReceived();\n }\n\n createDataChannel(label: string, dataChannelDict: RTCDataChannelInit = {}): RTCDataChannel {\n const channel = this.#peerConnection.createDataChannel(label, dataChannelDict);\n const dataChannel = new DataChannel(channel, dataChannelDict);\n\n // ensure we can close all channels when shutting down\n this.#dataChannels.add(dataChannel);\n dataChannel.addEventListener('close', () => {\n this.#dataChannels.delete(dataChannel);\n });\n\n return dataChannel;\n }\n\n async createOffer(options?: RTCOfferOptions): Promise<RTCSessionDescriptionInit>;\n async createOffer(\n successCallback: RTCSessionDescriptionCallback,\n failureCallback: RTCPeerConnectionErrorCallback,\n options?: RTCOfferOptions,\n ): Promise<void>;\n\n async createOffer(...args: any[]): Promise<any> {\n return this.#localOffer.promise;\n }\n\n async createAnswer(options?: RTCAnswerOptions): Promise<RTCSessionDescriptionInit>;\n async createAnswer(\n successCallback: RTCSessionDescriptionCallback,\n failureCallback: RTCPeerConnectionErrorCallback,\n ): Promise<void>;\n\n async createAnswer(...args: any[]): Promise<any> {\n return this.#localAnswer.promise;\n }\n\n getConfiguration(): RTCConfiguration {\n return this.#config;\n }\n\n getReceivers(): RTCRtpReceiver[] {\n throw new Error('getReceivers Not implemented');\n }\n\n getSenders(): RTCRtpSender[] {\n throw new Error('getSenders Not implemented');\n }\n\n async getStats(selector?: MediaStreamTrack | null): Promise<RTCStatsReport> {\n throw new Error('getStats Not implemented');\n }\n\n getTransceivers(): RTCRtpTransceiver[] {\n throw new Error('getTranscievers Not implemented');\n }\n\n removeTrack(sender: RTCRtpSender): void {\n throw new Error('removeTrack Not implemented');\n }\n\n restartIce(): void {\n throw new Error('restartIce Not implemented');\n }\n\n setConfiguration(configuration: RTCConfiguration = {}): void {\n this.#config = configuration;\n }\n\n async setLocalDescription(description?: RTCLocalSessionDescriptionInit): Promise<void> {\n if (description == null || description.type == null) {\n throw new Error('Local description type must be set');\n }\n\n if (description.type !== 'offer') {\n console.log(`node-datachannel: setLocalDescription: only offer is supported, not ${description.type}`);\n // any other type causes libdatachannel to throw\n return;\n }\n\n // @ts-expect-error types are wrong\n this.#peerConnection.setLocalDescription(description.type);\n }\n\n async setRemoteDescription(description: RTCSessionDescriptionInit): Promise<void> {\n if (description.sdp == null) {\n throw new Error('Remote SDP must be set');\n }\n\n // @ts-expect-error types are wrong\n this.#peerConnection.setRemoteDescription(description.sdp, description.type);\n }\n}\n\nexport { PeerConnection as RTCPeerConnection };\n\nconst assertState = <T>(state: any, states: T[]): T => {\n if (state != null && !states.includes(state)) {\n throw new Error(`Invalid value encountered - \"${state}\" must be one of ${states}`);\n }\n\n return state as T;\n};\n\nconst toSessionDescription = (description: { sdp?: string; type: string } | null): RTCSessionDescription | null => {\n if (description == null) {\n return null;\n }\n\n return new SessionDescription({\n sdp: description.sdp,\n type: assertState(description.type, RTCSdpTypes),\n });\n};\n\nconst RTCPeerConnectionStates: RTCPeerConnectionState[] = [\n 'closed',\n 'connected',\n 'connecting',\n 'disconnected',\n 'failed',\n 'new',\n];\nconst RTCSdpTypes: RTCSdpType[] = ['answer', 'offer', 'pranswer', 'rollback'];\nconst RTCIceConnectionStates: RTCIceConnectionState[] = [\n 'checking',\n 'closed',\n 'completed',\n 'connected',\n 'disconnected',\n 'failed',\n 'new',\n];\nconst RTCIceGatheringStates: RTCIceGatheringState[] = ['complete', 'gathering', 'new'];\nconst RTCSignalingStates: RTCSignalingState[] = [\n 'closed',\n 'have-local-offer',\n 'have-local-pranswer',\n 'have-remote-offer',\n 'have-remote-pranswer',\n 'stable',\n];\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport type node from 'node-datachannel';\n\nexport class DataChannel extends EventTarget implements RTCDataChannel {\n binaryType: BinaryType;\n\n readonly maxPacketLifeTime: number | null;\n readonly maxRetransmits: number | null;\n readonly negotiated: boolean;\n readonly ordered: boolean;\n\n onbufferedamountlow: ((this: RTCDataChannel, ev: Event) => any) | null;\n onclose: ((this: RTCDataChannel, ev: Event) => any) | null;\n onclosing: ((this: RTCDataChannel, ev: Event) => any) | null;\n onerror: ((this: RTCDataChannel, ev: Event) => any) | null;\n onmessage: ((this: RTCDataChannel, ev: MessageEvent) => any) | null;\n onopen: ((this: RTCDataChannel, ev: Event) => any) | null;\n\n #dataChannel: node.DataChannel;\n #bufferedAmountLowThreshold: number;\n #readyState: RTCDataChannelState;\n\n constructor(dataChannel: node.DataChannel, dataChannelDict: RTCDataChannelInit = {}) {\n super();\n\n this.#dataChannel = dataChannel;\n this.#readyState = 'connecting';\n this.#bufferedAmountLowThreshold = 0;\n\n this.binaryType = 'arraybuffer';\n\n this.#dataChannel.onOpen(() => {\n this.#readyState = 'open';\n this.dispatchEvent(new Event('open'));\n });\n this.#dataChannel.onClosed(() => {\n this.#readyState = 'closed';\n this.dispatchEvent(new Event('close'));\n });\n this.#dataChannel.onError((msg) => {\n this.#readyState = 'closed';\n this.dispatchEvent(\n new RTCErrorEvent('error', {\n error: new RTCError(\n {\n errorDetail: 'data-channel-failure',\n },\n msg,\n ),\n }),\n );\n });\n this.#dataChannel.onBufferedAmountLow(() => {\n this.dispatchEvent(new Event('bufferedamountlow'));\n });\n this.#dataChannel.onMessage((data: string | Uint8Array) => {\n if (typeof data === 'string') {\n data = Buffer.from(data);\n }\n\n this.dispatchEvent(new MessageEvent('message', { data }));\n });\n\n // forward events to properties\n this.addEventListener('message', (event) => {\n this.onmessage?.(event as MessageEvent<ArrayBuffer>);\n });\n this.addEventListener('bufferedamountlow', (event) => {\n this.onbufferedamountlow?.(event);\n });\n this.addEventListener('error', (event) => {\n this.onerror?.(event);\n });\n this.addEventListener('close', (event) => {\n this.onclose?.(event);\n });\n this.addEventListener('closing', (event) => {\n this.onclosing?.(event);\n });\n this.addEventListener('open', (event) => {\n this.onopen?.(event);\n });\n\n this.onbufferedamountlow = null;\n this.onclose = null;\n this.onclosing = null;\n this.onerror = null;\n this.onmessage = null;\n this.onopen = null;\n\n this.maxPacketLifeTime = dataChannelDict.maxPacketLifeTime ?? null;\n this.maxRetransmits = dataChannelDict.maxRetransmits ?? null;\n this.negotiated = dataChannelDict.negotiated ?? false;\n this.ordered = dataChannelDict.ordered ?? true;\n }\n\n get id(): number {\n return this.#dataChannel.getId();\n }\n\n get label(): string {\n return this.#dataChannel.getLabel();\n }\n\n get protocol(): string {\n return this.#dataChannel.getProtocol();\n }\n\n get bufferedAmount(): number {\n return this.#dataChannel.bufferedAmount();\n }\n\n set bufferedAmountLowThreshold(threshold: number) {\n this.#bufferedAmountLowThreshold = threshold;\n this.#dataChannel.setBufferedAmountLowThreshold(threshold);\n }\n\n get bufferedAmountLowThreshold(): number {\n return this.#bufferedAmountLowThreshold;\n }\n\n get readyState(): RTCDataChannelState {\n return this.#readyState;\n }\n\n close(): void {\n this.#readyState = 'closing';\n this.dispatchEvent(new Event('closing'));\n\n this.#dataChannel.close();\n }\n\n send(data: string): void;\n send(data: Blob): void;\n send(data: ArrayBuffer): void;\n send(data: ArrayBufferView): void;\n send(data: any): void {\n // TODO: sending Blobs\n if (typeof data === 'string') {\n this.#dataChannel.sendMessage(data);\n } else {\n this.#dataChannel.sendMessageBinary(data);\n }\n }\n}\n", "//\n// Copyright 2023 DXOS.org\n//\n\nexport class PeerConnectionIceEvent extends Event implements RTCPeerConnectionIceEvent {\n readonly candidate: RTCIceCandidate | null;\n\n constructor(candidate: RTCIceCandidate) {\n super('icecandidate');\n\n this.candidate = candidate;\n }\n}\n\nexport class DataChannelEvent extends Event implements RTCDataChannelEvent {\n readonly channel: RTCDataChannel;\n\n constructor(channel: RTCDataChannel) {\n super('datachannel');\n\n this.channel = channel;\n }\n}\n", "//\n// Copyright 2023 DXOS.org\n//\n\n/**\n * @see https://developer.mozilla.org/docs/Web/API/RTCSessionDescription\n */\nexport class SessionDescription implements RTCSessionDescription {\n readonly sdp: string;\n readonly type: RTCSdpType;\n\n constructor(init: RTCSessionDescriptionInit) {\n this.sdp = init.sdp ?? '';\n this.type = init.type;\n }\n\n toJSON(): RTCSessionDescriptionInit {\n return {\n sdp: this.sdp,\n type: this.type,\n };\n }\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["import_node_datachannel", "IceCandidate", "constructor", "init", "candidate", "DOMException", "sdpMLineIndex", "sdpMid", "usernameFragment", "address", "component", "foundation", "port", "priority", "protocol", "relatedAddress", "relatedPort", "tcpType", "type", "toJSON", "DataChannel", "EventTarget", "dataChannel", "dataChannelDict", "binaryType", "onOpen", "dispatchEvent", "Event", "onClosed", "onError", "msg", "RTCErrorEvent", "error", "RTCError", "errorDetail", "onBufferedAmountLow", "onMessage", "data", "Buffer", "from", "MessageEvent", "addEventListener", "event", "onmessage", "onbufferedamountlow", "onerror", "onclose", "onclosing", "onopen", "maxPacketLifeTime", "maxRetransmits", "negotiated", "ordered", "id", "getId", "label", "getLabel", "getProtocol", "bufferedAmount", "bufferedAmountLowThreshold", "threshold", "setBufferedAmountLowThreshold", "readyState", "close", "send", "sendMessage", "sendMessageBinary", "PeerConnectionIceEvent", "DataChannelEvent", "channel", "SessionDescription", "sdp", "PeerConnection", "defer", "Set", "iceServers", "node", "Math", "random", "map", "server", "urls", "Array", "isArray", "str", "URL", "url", "iceServer", "hostname", "parseInt", "username", "password", "credential", "flat", "iceTransportPolicy", "onStateChange", "onGatheringStateChange", "onDataChannel", "onconnectionstatechange", "onsignalingstatechange", "onicegatheringstatechange", "ondatachannel", "onLocalDescription", "resolve", "onLocalCandidate", "mid", "reject", "Error", "onicecandidate", "canTrickleIceCandidates", "sctp", "onicecandidateerror", "oniceconnectionstatechange", "onnegotiationneeded", "ontrack", "generateCertificate", "keygenAlgorithm", "connectionState", "assertState", "state", "RTCPeerConnectionStates", "iceConnectionState", "RTCIceConnectionStates", "iceGatheringState", "gatheringState", "RTCIceGatheringStates", "signalingState", "RTCSignalingStates", "currentLocalDescription", "toSessionDescription", "localDescription", "pendingLocalDescription", "currentRemoteDescription", "console", "log", "pendingRemoteDescription", "remoteDescription", "addIceCandidate", "addRemoteCandidate", "getSelectedCandidatePair", "addTrack", "track", "streams", "addTransceiver", "trackOrKind", "forEach", "destroy", "bytesSent", "bytesReceived", "createDataChannel", "add", "delete", "createOffer", "args", "promise", "createAnswer", "getConfiguration", "getReceivers", "getSenders", "getStats", "selector", "getTransceivers", "removeTrack", "sender", "restartIce", "setConfiguration", "configuration", "setLocalDescription", "description", "setRemoteDescription", "states", "includes", "RTCSdpTypes", "cleanup"]
|
|
7
|
-
}
|