@whereby.com/media 1.25.0 → 1.26.0
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/index.cjs +246 -261
- package/dist/index.d.cts +0 -2
- package/dist/index.d.mts +0 -2
- package/dist/index.d.ts +0 -2
- package/dist/index.mjs +246 -261
- package/dist/legacy-esm.js +246 -261
- package/package.json +1 -1
package/dist/legacy-esm.js
CHANGED
|
@@ -4202,215 +4202,6 @@ class P2pRtcManager {
|
|
|
4202
4202
|
}
|
|
4203
4203
|
}
|
|
4204
4204
|
|
|
4205
|
-
class SfuV2Parser {
|
|
4206
|
-
static parse(raw) {
|
|
4207
|
-
let object;
|
|
4208
|
-
try {
|
|
4209
|
-
object = JSON.parse(raw);
|
|
4210
|
-
}
|
|
4211
|
-
catch (error) {
|
|
4212
|
-
return;
|
|
4213
|
-
}
|
|
4214
|
-
if (typeof object !== "object" || Array.isArray(object)) {
|
|
4215
|
-
return;
|
|
4216
|
-
}
|
|
4217
|
-
if (object.request) {
|
|
4218
|
-
return SfuV2Parser._handleRequest(object);
|
|
4219
|
-
}
|
|
4220
|
-
else if (object.response) {
|
|
4221
|
-
return SfuV2Parser._handleResponse(object);
|
|
4222
|
-
}
|
|
4223
|
-
else if (object.message) {
|
|
4224
|
-
return SfuV2Parser._handleMessage(object);
|
|
4225
|
-
}
|
|
4226
|
-
else {
|
|
4227
|
-
return;
|
|
4228
|
-
}
|
|
4229
|
-
}
|
|
4230
|
-
static _handleRequest(rawMessage) {
|
|
4231
|
-
const message = {};
|
|
4232
|
-
message.request = true;
|
|
4233
|
-
if (typeof rawMessage.method !== "string") {
|
|
4234
|
-
return;
|
|
4235
|
-
}
|
|
4236
|
-
if (typeof rawMessage.id !== "number") {
|
|
4237
|
-
return;
|
|
4238
|
-
}
|
|
4239
|
-
message.id = rawMessage.id;
|
|
4240
|
-
message.method = rawMessage.method;
|
|
4241
|
-
message.data = rawMessage.data || {};
|
|
4242
|
-
return message;
|
|
4243
|
-
}
|
|
4244
|
-
static _handleResponse(rawMessage) {
|
|
4245
|
-
const message = {};
|
|
4246
|
-
message.response = true;
|
|
4247
|
-
if (typeof rawMessage.id !== "number") {
|
|
4248
|
-
return;
|
|
4249
|
-
}
|
|
4250
|
-
message.id = rawMessage.id;
|
|
4251
|
-
if (rawMessage.ok) {
|
|
4252
|
-
message.ok = true;
|
|
4253
|
-
message.data = rawMessage.data || {};
|
|
4254
|
-
}
|
|
4255
|
-
else {
|
|
4256
|
-
message.ok = false;
|
|
4257
|
-
message.errorCode = rawMessage.errorCode;
|
|
4258
|
-
message.errorReason = rawMessage.errorReason;
|
|
4259
|
-
}
|
|
4260
|
-
return message;
|
|
4261
|
-
}
|
|
4262
|
-
static _handleMessage(rawMessage) {
|
|
4263
|
-
const message = {};
|
|
4264
|
-
message.message = true;
|
|
4265
|
-
if (typeof rawMessage.method !== "string") {
|
|
4266
|
-
return;
|
|
4267
|
-
}
|
|
4268
|
-
message.method = rawMessage.method;
|
|
4269
|
-
message.data = rawMessage.data || {};
|
|
4270
|
-
return message;
|
|
4271
|
-
}
|
|
4272
|
-
static createRequest(method, data) {
|
|
4273
|
-
return {
|
|
4274
|
-
request: true,
|
|
4275
|
-
id: Math.round(Math.random() * 10000000),
|
|
4276
|
-
method,
|
|
4277
|
-
data: data || {},
|
|
4278
|
-
};
|
|
4279
|
-
}
|
|
4280
|
-
static createSuccessResponse(request, data) {
|
|
4281
|
-
return {
|
|
4282
|
-
response: true,
|
|
4283
|
-
id: request.id,
|
|
4284
|
-
ok: true,
|
|
4285
|
-
data: data || {},
|
|
4286
|
-
};
|
|
4287
|
-
}
|
|
4288
|
-
static createErrorResponse(request, errorCode, errorReason) {
|
|
4289
|
-
return {
|
|
4290
|
-
response: true,
|
|
4291
|
-
id: request.id,
|
|
4292
|
-
errorCode,
|
|
4293
|
-
errorReason,
|
|
4294
|
-
};
|
|
4295
|
-
}
|
|
4296
|
-
static createMessage(method, data) {
|
|
4297
|
-
return {
|
|
4298
|
-
message: true,
|
|
4299
|
-
method,
|
|
4300
|
-
data: data || {},
|
|
4301
|
-
};
|
|
4302
|
-
}
|
|
4303
|
-
}
|
|
4304
|
-
|
|
4305
|
-
const logger$6 = new Logger();
|
|
4306
|
-
class VegaConnection extends EventEmitter$1 {
|
|
4307
|
-
constructor(wsUrl, protocol = "whereby-sfu#v4") {
|
|
4308
|
-
super();
|
|
4309
|
-
this.socket = null;
|
|
4310
|
-
this.wsUrl = wsUrl;
|
|
4311
|
-
this.protocol = protocol;
|
|
4312
|
-
this.sents = new Map();
|
|
4313
|
-
this._setupSocket();
|
|
4314
|
-
}
|
|
4315
|
-
_setupSocket() {
|
|
4316
|
-
this.socket = new WebSocket(this.wsUrl, this.protocol);
|
|
4317
|
-
this.socket.onopen = this._onOpen.bind(this);
|
|
4318
|
-
this.socket.onmessage = this._onMessage.bind(this);
|
|
4319
|
-
this.socket.onclose = this._onClose.bind(this);
|
|
4320
|
-
this.socket.onerror = this._onError.bind(this);
|
|
4321
|
-
}
|
|
4322
|
-
_tearDown() {
|
|
4323
|
-
if (this.socket === null)
|
|
4324
|
-
return;
|
|
4325
|
-
this.socket.onopen = null;
|
|
4326
|
-
this.socket.onmessage = null;
|
|
4327
|
-
this.socket.onclose = null;
|
|
4328
|
-
this.socket.onerror = null;
|
|
4329
|
-
this.socket = null;
|
|
4330
|
-
this.sents.forEach((sent) => sent.close());
|
|
4331
|
-
this.emit("close");
|
|
4332
|
-
}
|
|
4333
|
-
close() {
|
|
4334
|
-
var _a;
|
|
4335
|
-
(_a = this.socket) === null || _a === void 0 ? void 0 : _a.close();
|
|
4336
|
-
}
|
|
4337
|
-
_onOpen() {
|
|
4338
|
-
logger$6.info("Connected");
|
|
4339
|
-
this.emit("open");
|
|
4340
|
-
}
|
|
4341
|
-
_onMessage(event) {
|
|
4342
|
-
const socketMessage = SfuV2Parser.parse(event.data);
|
|
4343
|
-
logger$6.info("Received message", socketMessage);
|
|
4344
|
-
if (socketMessage === null || socketMessage === void 0 ? void 0 : socketMessage.response) {
|
|
4345
|
-
this._handleResponse(socketMessage);
|
|
4346
|
-
}
|
|
4347
|
-
else if (socketMessage === null || socketMessage === void 0 ? void 0 : socketMessage.message) {
|
|
4348
|
-
this.emit("message", socketMessage);
|
|
4349
|
-
}
|
|
4350
|
-
}
|
|
4351
|
-
_onClose() {
|
|
4352
|
-
logger$6.info("Disconnected");
|
|
4353
|
-
this._tearDown();
|
|
4354
|
-
}
|
|
4355
|
-
_onError(error) {
|
|
4356
|
-
logger$6.info("Error", error);
|
|
4357
|
-
}
|
|
4358
|
-
_handleResponse(socketMessage) {
|
|
4359
|
-
const sent = this.sents.get(socketMessage.id);
|
|
4360
|
-
if (socketMessage.ok) {
|
|
4361
|
-
sent.resolve(socketMessage.data);
|
|
4362
|
-
}
|
|
4363
|
-
else {
|
|
4364
|
-
const error = new Error(socketMessage.errorReason);
|
|
4365
|
-
sent.reject(error);
|
|
4366
|
-
}
|
|
4367
|
-
}
|
|
4368
|
-
send(message) {
|
|
4369
|
-
try {
|
|
4370
|
-
if (this.socket) {
|
|
4371
|
-
this.socket.send(JSON.stringify(message));
|
|
4372
|
-
}
|
|
4373
|
-
}
|
|
4374
|
-
catch (error) { }
|
|
4375
|
-
}
|
|
4376
|
-
message(method, data = {}) {
|
|
4377
|
-
const message = SfuV2Parser.createMessage(method, data);
|
|
4378
|
-
this.send(message);
|
|
4379
|
-
}
|
|
4380
|
-
request(method, data = {}, timeout = 1500 * (15 + 0.1 * this.sents.size)) {
|
|
4381
|
-
const request = SfuV2Parser.createRequest(method, data);
|
|
4382
|
-
this.send(request);
|
|
4383
|
-
return new Promise((pResolve, pReject) => {
|
|
4384
|
-
const sent = {
|
|
4385
|
-
id: request.id,
|
|
4386
|
-
method: request.method,
|
|
4387
|
-
resolve: (data2) => {
|
|
4388
|
-
if (!this.sents.delete(request.id))
|
|
4389
|
-
return;
|
|
4390
|
-
clearTimeout(sent.timer);
|
|
4391
|
-
pResolve(data2);
|
|
4392
|
-
},
|
|
4393
|
-
reject: (error) => {
|
|
4394
|
-
if (!this.sents.delete(request.id))
|
|
4395
|
-
return;
|
|
4396
|
-
clearTimeout(sent.timer);
|
|
4397
|
-
pReject(error);
|
|
4398
|
-
},
|
|
4399
|
-
timer: setTimeout(() => {
|
|
4400
|
-
if (!this.sents.delete(request.id))
|
|
4401
|
-
return;
|
|
4402
|
-
pReject(new Error("request timeout"));
|
|
4403
|
-
}, timeout),
|
|
4404
|
-
close: () => {
|
|
4405
|
-
clearTimeout(sent.timer);
|
|
4406
|
-
pReject(new Error("transport closed"));
|
|
4407
|
-
},
|
|
4408
|
-
};
|
|
4409
|
-
this.sents.set(request.id, sent);
|
|
4410
|
-
});
|
|
4411
|
-
}
|
|
4412
|
-
}
|
|
4413
|
-
|
|
4414
4205
|
class KalmanFilter {
|
|
4415
4206
|
constructor({ R = 0.01, Q = 2, A = 1.1, B = 1, C = 1.2 } = { R: 0.01, Q: 2, A: 1.1, B: 1, C: 1.2 }) {
|
|
4416
4207
|
this.R = R;
|
|
@@ -4519,7 +4310,7 @@ const defaultParams = {
|
|
|
4519
4310
|
scoreFormula: "300 * bands[1].avg / Math.max(bands[1].avg + bands[0].avg, 0.01)",
|
|
4520
4311
|
outFormula: "score",
|
|
4521
4312
|
};
|
|
4522
|
-
const logger$
|
|
4313
|
+
const logger$6 = new Logger();
|
|
4523
4314
|
function createMicAnalyser({ micTrack, params, onScoreUpdated, }) {
|
|
4524
4315
|
const audioCtx = new AudioContext();
|
|
4525
4316
|
let analyser = null;
|
|
@@ -4541,7 +4332,7 @@ function createMicAnalyser({ micTrack, params, onScoreUpdated, }) {
|
|
|
4541
4332
|
lastTrackWasOurs = true;
|
|
4542
4333
|
}
|
|
4543
4334
|
catch (ex) {
|
|
4544
|
-
logger$
|
|
4335
|
+
logger$6.warn("unable to fetch new track for colocation speaker analysis, using current", ex);
|
|
4545
4336
|
}
|
|
4546
4337
|
}
|
|
4547
4338
|
lastTrack = track;
|
|
@@ -4628,7 +4419,7 @@ function createMicAnalyser({ micTrack, params, onScoreUpdated, }) {
|
|
|
4628
4419
|
};
|
|
4629
4420
|
}
|
|
4630
4421
|
|
|
4631
|
-
const logger$
|
|
4422
|
+
const logger$5 = new Logger();
|
|
4632
4423
|
const MEDIA_QUALITY = Object.freeze({
|
|
4633
4424
|
ok: "ok",
|
|
4634
4425
|
warning: "warning",
|
|
@@ -4698,7 +4489,7 @@ class VegaMediaQualityMonitor extends EventEmitter {
|
|
|
4698
4489
|
}
|
|
4699
4490
|
addProducer(clientId, producerId) {
|
|
4700
4491
|
if (!clientId || !producerId || !(typeof clientId === "string" && typeof producerId === "string")) {
|
|
4701
|
-
logger$
|
|
4492
|
+
logger$5.warn("Missing clientId or producerId");
|
|
4702
4493
|
return;
|
|
4703
4494
|
}
|
|
4704
4495
|
if (!this._producers[clientId]) {
|
|
@@ -4714,7 +4505,7 @@ class VegaMediaQualityMonitor extends EventEmitter {
|
|
|
4714
4505
|
}
|
|
4715
4506
|
addConsumer(clientId, consumerId) {
|
|
4716
4507
|
if (!clientId || !consumerId) {
|
|
4717
|
-
logger$
|
|
4508
|
+
logger$5.warn("Missing clientId or consumerId");
|
|
4718
4509
|
return;
|
|
4719
4510
|
}
|
|
4720
4511
|
if (!this._producers[clientId]) {
|
|
@@ -4732,14 +4523,14 @@ class VegaMediaQualityMonitor extends EventEmitter {
|
|
|
4732
4523
|
if (!Array.isArray(score) ||
|
|
4733
4524
|
score.length === 0 ||
|
|
4734
4525
|
score.some((s) => !s || !s.hasOwnProperty("score") || typeof s.score !== "number" || isNaN(s.score))) {
|
|
4735
|
-
logger$
|
|
4526
|
+
logger$5.warn("Unexpected producer score format");
|
|
4736
4527
|
return;
|
|
4737
4528
|
}
|
|
4738
4529
|
this._producers[clientId][producerId] = { kind, score: this._calcAvgProducerScore(score.map((s) => s.score)) };
|
|
4739
4530
|
}
|
|
4740
4531
|
addConsumerScore(clientId, consumerId, kind, score) {
|
|
4741
4532
|
if (!score || !score.hasOwnProperty("producerScores") || !Array.isArray(score.producerScores)) {
|
|
4742
|
-
logger$
|
|
4533
|
+
logger$5.warn("Unexpected consumer score format");
|
|
4743
4534
|
return;
|
|
4744
4535
|
}
|
|
4745
4536
|
this._producers[clientId][consumerId] = { kind, score: this._calcAvgProducerScore(score.producerScores) };
|
|
@@ -4776,7 +4567,7 @@ class VegaMediaQualityMonitor extends EventEmitter {
|
|
|
4776
4567
|
}
|
|
4777
4568
|
}
|
|
4778
4569
|
catch (error) {
|
|
4779
|
-
logger$
|
|
4570
|
+
logger$5.error(error);
|
|
4780
4571
|
return 0;
|
|
4781
4572
|
}
|
|
4782
4573
|
}
|
|
@@ -4817,6 +4608,215 @@ function getNumberOfTemporalLayers(consumer) {
|
|
|
4817
4608
|
return /T3/.test(((_c = (_b = (_a = consumer._rtpParameters) === null || _a === void 0 ? void 0 : _a.encodings) === null || _b === void 0 ? void 0 : _b[0]) === null || _c === void 0 ? void 0 : _c.scalabilityMode) || "") ? 3 : 2;
|
|
4818
4609
|
}
|
|
4819
4610
|
|
|
4611
|
+
class SfuV2Parser {
|
|
4612
|
+
static parse(raw) {
|
|
4613
|
+
let object;
|
|
4614
|
+
try {
|
|
4615
|
+
object = JSON.parse(raw);
|
|
4616
|
+
}
|
|
4617
|
+
catch (error) {
|
|
4618
|
+
return;
|
|
4619
|
+
}
|
|
4620
|
+
if (typeof object !== "object" || Array.isArray(object)) {
|
|
4621
|
+
return;
|
|
4622
|
+
}
|
|
4623
|
+
if (object.request) {
|
|
4624
|
+
return SfuV2Parser._handleRequest(object);
|
|
4625
|
+
}
|
|
4626
|
+
else if (object.response) {
|
|
4627
|
+
return SfuV2Parser._handleResponse(object);
|
|
4628
|
+
}
|
|
4629
|
+
else if (object.message) {
|
|
4630
|
+
return SfuV2Parser._handleMessage(object);
|
|
4631
|
+
}
|
|
4632
|
+
else {
|
|
4633
|
+
return;
|
|
4634
|
+
}
|
|
4635
|
+
}
|
|
4636
|
+
static _handleRequest(rawMessage) {
|
|
4637
|
+
const message = {};
|
|
4638
|
+
message.request = true;
|
|
4639
|
+
if (typeof rawMessage.method !== "string") {
|
|
4640
|
+
return;
|
|
4641
|
+
}
|
|
4642
|
+
if (typeof rawMessage.id !== "number") {
|
|
4643
|
+
return;
|
|
4644
|
+
}
|
|
4645
|
+
message.id = rawMessage.id;
|
|
4646
|
+
message.method = rawMessage.method;
|
|
4647
|
+
message.data = rawMessage.data || {};
|
|
4648
|
+
return message;
|
|
4649
|
+
}
|
|
4650
|
+
static _handleResponse(rawMessage) {
|
|
4651
|
+
const message = {};
|
|
4652
|
+
message.response = true;
|
|
4653
|
+
if (typeof rawMessage.id !== "number") {
|
|
4654
|
+
return;
|
|
4655
|
+
}
|
|
4656
|
+
message.id = rawMessage.id;
|
|
4657
|
+
if (rawMessage.ok) {
|
|
4658
|
+
message.ok = true;
|
|
4659
|
+
message.data = rawMessage.data || {};
|
|
4660
|
+
}
|
|
4661
|
+
else {
|
|
4662
|
+
message.ok = false;
|
|
4663
|
+
message.errorCode = rawMessage.errorCode;
|
|
4664
|
+
message.errorReason = rawMessage.errorReason;
|
|
4665
|
+
}
|
|
4666
|
+
return message;
|
|
4667
|
+
}
|
|
4668
|
+
static _handleMessage(rawMessage) {
|
|
4669
|
+
const message = {};
|
|
4670
|
+
message.message = true;
|
|
4671
|
+
if (typeof rawMessage.method !== "string") {
|
|
4672
|
+
return;
|
|
4673
|
+
}
|
|
4674
|
+
message.method = rawMessage.method;
|
|
4675
|
+
message.data = rawMessage.data || {};
|
|
4676
|
+
return message;
|
|
4677
|
+
}
|
|
4678
|
+
static createRequest(method, data) {
|
|
4679
|
+
return {
|
|
4680
|
+
request: true,
|
|
4681
|
+
id: Math.round(Math.random() * 10000000),
|
|
4682
|
+
method,
|
|
4683
|
+
data: data || {},
|
|
4684
|
+
};
|
|
4685
|
+
}
|
|
4686
|
+
static createSuccessResponse(request, data) {
|
|
4687
|
+
return {
|
|
4688
|
+
response: true,
|
|
4689
|
+
id: request.id,
|
|
4690
|
+
ok: true,
|
|
4691
|
+
data: data || {},
|
|
4692
|
+
};
|
|
4693
|
+
}
|
|
4694
|
+
static createErrorResponse(request, errorCode, errorReason) {
|
|
4695
|
+
return {
|
|
4696
|
+
response: true,
|
|
4697
|
+
id: request.id,
|
|
4698
|
+
errorCode,
|
|
4699
|
+
errorReason,
|
|
4700
|
+
};
|
|
4701
|
+
}
|
|
4702
|
+
static createMessage(method, data) {
|
|
4703
|
+
return {
|
|
4704
|
+
message: true,
|
|
4705
|
+
method,
|
|
4706
|
+
data: data || {},
|
|
4707
|
+
};
|
|
4708
|
+
}
|
|
4709
|
+
}
|
|
4710
|
+
|
|
4711
|
+
const logger$4 = new Logger();
|
|
4712
|
+
class VegaConnection extends EventEmitter$1 {
|
|
4713
|
+
constructor(wsUrl, protocol = "whereby-sfu#v4") {
|
|
4714
|
+
super();
|
|
4715
|
+
this.socket = null;
|
|
4716
|
+
this.wsUrl = wsUrl;
|
|
4717
|
+
this.protocol = protocol;
|
|
4718
|
+
this.sents = new Map();
|
|
4719
|
+
this._setupSocket();
|
|
4720
|
+
}
|
|
4721
|
+
_setupSocket() {
|
|
4722
|
+
this.socket = new WebSocket(this.wsUrl, this.protocol);
|
|
4723
|
+
this.socket.onopen = this._onOpen.bind(this);
|
|
4724
|
+
this.socket.onmessage = this._onMessage.bind(this);
|
|
4725
|
+
this.socket.onclose = this._onClose.bind(this);
|
|
4726
|
+
this.socket.onerror = this._onError.bind(this);
|
|
4727
|
+
}
|
|
4728
|
+
_tearDown() {
|
|
4729
|
+
if (this.socket === null)
|
|
4730
|
+
return;
|
|
4731
|
+
this.socket.onopen = null;
|
|
4732
|
+
this.socket.onmessage = null;
|
|
4733
|
+
this.socket.onclose = null;
|
|
4734
|
+
this.socket.onerror = null;
|
|
4735
|
+
this.socket = null;
|
|
4736
|
+
this.sents.forEach((sent) => sent.close());
|
|
4737
|
+
this.emit("close");
|
|
4738
|
+
}
|
|
4739
|
+
close() {
|
|
4740
|
+
var _a;
|
|
4741
|
+
(_a = this.socket) === null || _a === void 0 ? void 0 : _a.close();
|
|
4742
|
+
}
|
|
4743
|
+
_onOpen() {
|
|
4744
|
+
logger$4.info("Connected");
|
|
4745
|
+
this.emit("open");
|
|
4746
|
+
}
|
|
4747
|
+
_onMessage(event) {
|
|
4748
|
+
const socketMessage = SfuV2Parser.parse(event.data);
|
|
4749
|
+
logger$4.info("Received message", socketMessage);
|
|
4750
|
+
if (socketMessage === null || socketMessage === void 0 ? void 0 : socketMessage.response) {
|
|
4751
|
+
this._handleResponse(socketMessage);
|
|
4752
|
+
}
|
|
4753
|
+
else if (socketMessage === null || socketMessage === void 0 ? void 0 : socketMessage.message) {
|
|
4754
|
+
this.emit("message", socketMessage);
|
|
4755
|
+
}
|
|
4756
|
+
}
|
|
4757
|
+
_onClose() {
|
|
4758
|
+
logger$4.info("Disconnected");
|
|
4759
|
+
this._tearDown();
|
|
4760
|
+
}
|
|
4761
|
+
_onError(error) {
|
|
4762
|
+
logger$4.info("Error", error);
|
|
4763
|
+
}
|
|
4764
|
+
_handleResponse(socketMessage) {
|
|
4765
|
+
const sent = this.sents.get(socketMessage.id);
|
|
4766
|
+
if (socketMessage.ok) {
|
|
4767
|
+
sent.resolve(socketMessage.data);
|
|
4768
|
+
}
|
|
4769
|
+
else {
|
|
4770
|
+
const error = new Error(socketMessage.errorReason);
|
|
4771
|
+
sent.reject(error);
|
|
4772
|
+
}
|
|
4773
|
+
}
|
|
4774
|
+
send(message) {
|
|
4775
|
+
try {
|
|
4776
|
+
if (this.socket) {
|
|
4777
|
+
this.socket.send(JSON.stringify(message));
|
|
4778
|
+
}
|
|
4779
|
+
}
|
|
4780
|
+
catch (error) { }
|
|
4781
|
+
}
|
|
4782
|
+
message(method, data = {}) {
|
|
4783
|
+
const message = SfuV2Parser.createMessage(method, data);
|
|
4784
|
+
this.send(message);
|
|
4785
|
+
}
|
|
4786
|
+
request(method, data = {}, timeout = 1500 * (15 + 0.1 * this.sents.size)) {
|
|
4787
|
+
const request = SfuV2Parser.createRequest(method, data);
|
|
4788
|
+
this.send(request);
|
|
4789
|
+
return new Promise((pResolve, pReject) => {
|
|
4790
|
+
const sent = {
|
|
4791
|
+
id: request.id,
|
|
4792
|
+
method: request.method,
|
|
4793
|
+
resolve: (data2) => {
|
|
4794
|
+
if (!this.sents.delete(request.id))
|
|
4795
|
+
return;
|
|
4796
|
+
clearTimeout(sent.timer);
|
|
4797
|
+
pResolve(data2);
|
|
4798
|
+
},
|
|
4799
|
+
reject: (error) => {
|
|
4800
|
+
if (!this.sents.delete(request.id))
|
|
4801
|
+
return;
|
|
4802
|
+
clearTimeout(sent.timer);
|
|
4803
|
+
pReject(error);
|
|
4804
|
+
},
|
|
4805
|
+
timer: setTimeout(() => {
|
|
4806
|
+
if (!this.sents.delete(request.id))
|
|
4807
|
+
return;
|
|
4808
|
+
pReject(new Error("request timeout"));
|
|
4809
|
+
}, timeout),
|
|
4810
|
+
close: () => {
|
|
4811
|
+
clearTimeout(sent.timer);
|
|
4812
|
+
pReject(new Error("transport closed"));
|
|
4813
|
+
},
|
|
4814
|
+
};
|
|
4815
|
+
this.sents.set(request.id, sent);
|
|
4816
|
+
});
|
|
4817
|
+
}
|
|
4818
|
+
}
|
|
4819
|
+
|
|
4820
4820
|
const timeNextServer = 500;
|
|
4821
4821
|
const minTimeNextServerSameDC = 2000;
|
|
4822
4822
|
const timeToWaitForEarlyServerClose = 100;
|
|
@@ -4872,6 +4872,21 @@ function createVegaConnectionManager(config) {
|
|
|
4872
4872
|
let connectionsToResolve = targetHostList.length;
|
|
4873
4873
|
let hasNotifiedDisconnect = false;
|
|
4874
4874
|
let wasConnected = false;
|
|
4875
|
+
const beforeNetworkPossiblyDownTime = lastNetworkPossiblyDownTime;
|
|
4876
|
+
const handleFailedOrAbortedConnection = () => {
|
|
4877
|
+
var _a;
|
|
4878
|
+
connectionsToResolve--;
|
|
4879
|
+
if (connectionsToResolve === 0 && !hasNotifiedDisconnect) {
|
|
4880
|
+
connectionAttemptInProgress = false;
|
|
4881
|
+
if (hasPendingConnectionAttempt) {
|
|
4882
|
+
setTimeout(connect, 0);
|
|
4883
|
+
}
|
|
4884
|
+
else {
|
|
4885
|
+
(_a = config.onFailed) === null || _a === void 0 ? void 0 : _a.call(config);
|
|
4886
|
+
}
|
|
4887
|
+
}
|
|
4888
|
+
};
|
|
4889
|
+
const timers = [];
|
|
4875
4890
|
targetHostList.forEach(({ host, dc }, index) => {
|
|
4876
4891
|
if (index > 0) {
|
|
4877
4892
|
timeBeforeConnect += timeNextServer;
|
|
@@ -4879,10 +4894,19 @@ function createVegaConnectionManager(config) {
|
|
|
4879
4894
|
timeBeforeConnect = Math.max(timeBeforeConnect, minTimeBeforeConnect);
|
|
4880
4895
|
}
|
|
4881
4896
|
prevTimeBeforeConnectByDC[dc] = timeBeforeConnect;
|
|
4882
|
-
setTimeout(() => {
|
|
4897
|
+
timers.push(setTimeout(() => {
|
|
4883
4898
|
var _a;
|
|
4899
|
+
timers.shift();
|
|
4884
4900
|
if (wasConnected)
|
|
4885
4901
|
return;
|
|
4902
|
+
if (beforeNetworkPossiblyDownTime !== lastNetworkPossiblyDownTime) {
|
|
4903
|
+
handleFailedOrAbortedConnection();
|
|
4904
|
+
timers.forEach((timeoutId) => {
|
|
4905
|
+
clearTimeout(timeoutId);
|
|
4906
|
+
handleFailedOrAbortedConnection();
|
|
4907
|
+
});
|
|
4908
|
+
return;
|
|
4909
|
+
}
|
|
4886
4910
|
const vegaConnection = new VegaConnection(((_a = config.getUrlForHost) === null || _a === void 0 ? void 0 : _a.call(config, host)) || host);
|
|
4887
4911
|
let wasClosed = false;
|
|
4888
4912
|
vegaConnection.on("open", () => {
|
|
@@ -4946,7 +4970,7 @@ function createVegaConnectionManager(config) {
|
|
|
4946
4970
|
}, timeToWaitForEarlyServerClose);
|
|
4947
4971
|
});
|
|
4948
4972
|
vegaConnection.on("close", () => {
|
|
4949
|
-
var _a
|
|
4973
|
+
var _a;
|
|
4950
4974
|
wasClosed = true;
|
|
4951
4975
|
if (vegaConnection === nominatedConnection) {
|
|
4952
4976
|
nominatedConnection = undefined;
|
|
@@ -4954,18 +4978,9 @@ function createVegaConnectionManager(config) {
|
|
|
4954
4978
|
hasNotifiedDisconnect = true;
|
|
4955
4979
|
(_a = config.onDisconnected) === null || _a === void 0 ? void 0 : _a.call(config);
|
|
4956
4980
|
}
|
|
4957
|
-
|
|
4958
|
-
if (connectionsToResolve === 0 && !hasNotifiedDisconnect) {
|
|
4959
|
-
connectionAttemptInProgress = false;
|
|
4960
|
-
if (hasPendingConnectionAttempt) {
|
|
4961
|
-
setTimeout(connect, 0);
|
|
4962
|
-
}
|
|
4963
|
-
else {
|
|
4964
|
-
(_b = config.onFailed) === null || _b === void 0 ? void 0 : _b.call(config);
|
|
4965
|
-
}
|
|
4966
|
-
}
|
|
4981
|
+
handleFailedOrAbortedConnection();
|
|
4967
4982
|
});
|
|
4968
|
-
}, timeBeforeConnect);
|
|
4983
|
+
}, timeBeforeConnect));
|
|
4969
4984
|
});
|
|
4970
4985
|
};
|
|
4971
4986
|
updateHostList(config.initialHostList);
|
|
@@ -5051,7 +5066,6 @@ class VegaRtcManager {
|
|
|
5051
5066
|
this._socketListenerDeregisterFunctions = [];
|
|
5052
5067
|
this._reconnect = true;
|
|
5053
5068
|
this._reconnectTimeOut = null;
|
|
5054
|
-
this._hasVegaConnection = false;
|
|
5055
5069
|
this._isConnectingOrConnected = false;
|
|
5056
5070
|
this._qualityMonitor = new VegaMediaQualityMonitor();
|
|
5057
5071
|
this._qualityMonitor.on(PROTOCOL_EVENTS.MEDIA_QUALITY_CHANGED, (payload) => {
|
|
@@ -5121,7 +5135,7 @@ class VegaRtcManager {
|
|
|
5121
5135
|
}
|
|
5122
5136
|
if (this._screenVideoTrack)
|
|
5123
5137
|
this._emitScreenshareStarted();
|
|
5124
|
-
if (this._features.sfuReconnectV2On &&
|
|
5138
|
+
if (this._features.sfuReconnectV2On && this._reconnect) {
|
|
5125
5139
|
this._connect();
|
|
5126
5140
|
}
|
|
5127
5141
|
}), this._serverSocket.on("connect", () => this._onNetworkIsDetectedUpBySignal()), this._serverSocket.onEngineEvent("packet", () => this._onNetworkIsDetectedUpBySignal()), this._serverSocket.on("disconnect", () => this._onNetworkIsDetectedPossiblyDownBySignal()));
|
|
@@ -5134,34 +5148,6 @@ class VegaRtcManager {
|
|
|
5134
5148
|
});
|
|
5135
5149
|
}
|
|
5136
5150
|
_connect() {
|
|
5137
|
-
if (this._features.sfuConnectionManagerOn)
|
|
5138
|
-
return this._connect_v2();
|
|
5139
|
-
if (this._features.sfuReconnectV2On) {
|
|
5140
|
-
if (this._hasVegaConnection)
|
|
5141
|
-
return;
|
|
5142
|
-
if (!this._serverSocket.isConnected()) {
|
|
5143
|
-
const reconnectThresholdInMs = this._serverSocket.getReconnectThreshold();
|
|
5144
|
-
if (!reconnectThresholdInMs)
|
|
5145
|
-
return;
|
|
5146
|
-
if (Date.now() > (this._serverSocket.disconnectTimestamp || 0) + reconnectThresholdInMs)
|
|
5147
|
-
return;
|
|
5148
|
-
}
|
|
5149
|
-
if (this._reconnectTimeOut)
|
|
5150
|
-
clearTimeout(this._reconnectTimeOut);
|
|
5151
|
-
}
|
|
5152
|
-
const host = this._features.sfuServerOverrideHost || [this._sfuServer.url];
|
|
5153
|
-
const searchParams = new URLSearchParams(Object.assign({ clientId: this._selfId, organizationId: this._room.organizationId, roomName: this._room.name, eventClaim: this._room.isClaimed ? this._eventClaim : null, lowBw: "true" }, Object.keys(this._features || {})
|
|
5154
|
-
.filter((featureKey) => this._features[featureKey] && /^sfu/.test(featureKey))
|
|
5155
|
-
.reduce((prev, current) => (Object.assign(Object.assign({}, prev), { [current]: this._features[current] })), {})));
|
|
5156
|
-
const queryString = searchParams.toString();
|
|
5157
|
-
const wsUrl = `wss://${host}?${queryString}`;
|
|
5158
|
-
this._vegaConnection = new VegaConnection(wsUrl);
|
|
5159
|
-
this._hasVegaConnection = true;
|
|
5160
|
-
this._vegaConnection.on("open", () => this._join());
|
|
5161
|
-
this._vegaConnection.on("close", () => this._onClose());
|
|
5162
|
-
this._vegaConnection.on("message", (message) => this._onMessage(message));
|
|
5163
|
-
}
|
|
5164
|
-
_connect_v2() {
|
|
5165
5151
|
if (this._features.sfuReconnectV2On) {
|
|
5166
5152
|
if (this._isConnectingOrConnected)
|
|
5167
5153
|
return;
|
|
@@ -5214,7 +5200,6 @@ class VegaRtcManager {
|
|
|
5214
5200
|
_onClose() {
|
|
5215
5201
|
var _a, _b;
|
|
5216
5202
|
logger$3.info("_onClose()");
|
|
5217
|
-
this._hasVegaConnection = false;
|
|
5218
5203
|
(_a = this._sendTransport) === null || _a === void 0 ? void 0 : _a.close();
|
|
5219
5204
|
(_b = this._receiveTransport) === null || _b === void 0 ? void 0 : _b.close();
|
|
5220
5205
|
this._sendTransport = null;
|