livekit-client 1.15.2 → 1.15.3
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/livekit-client.e2ee.worker.js.map +1 -1
- package/dist/livekit-client.e2ee.worker.mjs +1 -2
- package/dist/livekit-client.e2ee.worker.mjs.map +1 -1
- package/dist/livekit-client.esm.mjs +139 -123
- package/dist/livekit-client.esm.mjs.map +1 -1
- package/dist/livekit-client.umd.js +1 -1
- package/dist/livekit-client.umd.js.map +1 -1
- package/dist/src/api/SignalClient.d.ts +11 -2
- package/dist/src/api/SignalClient.d.ts.map +1 -1
- package/dist/src/room/RTCEngine.d.ts.map +1 -1
- package/dist/src/room/participant/LocalParticipant.d.ts.map +1 -1
- package/dist/src/room/utils.d.ts.map +1 -1
- package/dist/ts4.2/src/api/SignalClient.d.ts +11 -2
- package/package.json +11 -11
- package/src/api/SignalClient.ts +142 -118
- package/src/room/RTCEngine.ts +7 -3
- package/src/room/Room.ts +1 -1
- package/src/room/participant/LocalParticipant.ts +6 -1
- package/src/room/utils.ts +11 -0
@@ -324,7 +324,6 @@ function setLogExtension(extension) {
|
|
324
324
|
};
|
325
325
|
livekitLogger.setLevel(livekitLogger.getLevel()); // Be sure to call setLevel method in order to apply plugin
|
326
326
|
}
|
327
|
-
|
328
327
|
loglevelExports.getLogger('lk-e2ee');
|
329
328
|
|
330
329
|
// Copyright 2021-2023 Buf Technologies, Inc.
|
@@ -2113,7 +2112,6 @@ function makeBinaryFormatProto3() {
|
|
2113
2112
|
if (oneof.case !== localName) {
|
2114
2113
|
continue; // field is not selected, skip
|
2115
2114
|
}
|
2116
|
-
|
2117
2115
|
value = oneof.value;
|
2118
2116
|
} else {
|
2119
2117
|
value = message[localName];
|
@@ -2660,7 +2658,6 @@ function writeEnum(type, value, emitIntrinsicDefault, enumAsInteger) {
|
|
2660
2658
|
const val = type.findNumber(value);
|
2661
2659
|
return (_a = val === null || val === void 0 ? void 0 : val.name) !== null && _a !== void 0 ? _a : value; // if we don't know the enum value, just return the number
|
2662
2660
|
}
|
2663
|
-
|
2664
2661
|
function writeScalar(type, value, emitIntrinsicDefault) {
|
2665
2662
|
if (value === undefined) {
|
2666
2663
|
return undefined;
|
@@ -2738,7 +2735,6 @@ function makeJsonFormatProto3() {
|
|
2738
2735
|
assert(val !== undefined);
|
2739
2736
|
jsonObj[entryKey.toString()] = val; // JSON standard allows only (double quoted) string as property key
|
2740
2737
|
}
|
2741
|
-
|
2742
2738
|
break;
|
2743
2739
|
case "message":
|
2744
2740
|
for (const [entryKey, entryValue] of Object.entries(value)) {
|
@@ -2754,7 +2750,6 @@ function makeJsonFormatProto3() {
|
|
2754
2750
|
assert(val !== undefined);
|
2755
2751
|
jsonObj[entryKey.toString()] = val; // JSON standard allows only (double quoted) string as property key
|
2756
2752
|
}
|
2757
|
-
|
2758
2753
|
break;
|
2759
2754
|
}
|
2760
2755
|
return options.emitDefaultValues || Object.keys(jsonObj).length > 0 ? jsonObj : undefined;
|
@@ -6245,7 +6240,6 @@ EventEmitter.prototype.emit = function emit(type) {
|
|
6245
6240
|
err.context = er;
|
6246
6241
|
throw err; // Unhandled 'error' event
|
6247
6242
|
}
|
6248
|
-
|
6249
6243
|
var handler = events[type];
|
6250
6244
|
if (handler === undefined) return false;
|
6251
6245
|
if (typeof handler === 'function') {
|
@@ -6878,7 +6872,6 @@ function shimGetUserMedia$2(window, browserDetails) {
|
|
6878
6872
|
if (!dev && devices.length && matches.includes('back')) {
|
6879
6873
|
dev = devices[devices.length - 1]; // more likely the back cam
|
6880
6874
|
}
|
6881
|
-
|
6882
6875
|
if (dev) {
|
6883
6876
|
constraints.video.deviceId = face.exact ? {
|
6884
6877
|
exact: dev.deviceId
|
@@ -7112,7 +7105,6 @@ function shimGetSendersWithDtmf(window) {
|
|
7112
7105
|
this._senders = this._senders || [];
|
7113
7106
|
return this._senders.slice(); // return a copy of the internal state.
|
7114
7107
|
};
|
7115
|
-
|
7116
7108
|
const origAddTrack = window.RTCPeerConnection.prototype.addTrack;
|
7117
7109
|
window.RTCPeerConnection.prototype.addTrack = function addTrack(track, stream) {
|
7118
7110
|
let sender = origAddTrack.apply(this, arguments);
|
@@ -7736,7 +7728,6 @@ function shimPeerConnection(window, browserDetails) {
|
|
7736
7728
|
if (typeof window !== 'object' || !(window.RTCPeerConnection || window.mozRTCPeerConnection)) {
|
7737
7729
|
return; // probably media.peerconnection.enabled=false in about:config
|
7738
7730
|
}
|
7739
|
-
|
7740
7731
|
if (!window.RTCPeerConnection && window.mozRTCPeerConnection) {
|
7741
7732
|
// very basic support for old versions.
|
7742
7733
|
window.RTCPeerConnection = window.mozRTCPeerConnection;
|
@@ -8475,7 +8466,6 @@ var sdp$1 = {exports: {}};
|
|
8475
8466
|
const parsed = {
|
8476
8467
|
payloadType: parseInt(parts.shift(), 10) // was: id
|
8477
8468
|
};
|
8478
|
-
|
8479
8469
|
parts = parts[0].split('/');
|
8480
8470
|
parsed.name = parts[0];
|
8481
8471
|
parsed.clockRate = parseInt(parts[1], 10); // was: clockrate
|
@@ -9013,7 +9003,6 @@ var sdp$1 = {exports: {}};
|
|
9013
9003
|
// FIXME: What should happen here?
|
9014
9004
|
}
|
9015
9005
|
}
|
9016
|
-
|
9017
9006
|
if (sessionpart) {
|
9018
9007
|
return SDPUtils.getDirection(sessionpart);
|
9019
9008
|
}
|
@@ -9062,7 +9051,6 @@ var sdp$1 = {exports: {}};
|
|
9062
9051
|
}
|
9063
9052
|
// TODO: check the modifier a bit more.
|
9064
9053
|
}
|
9065
|
-
|
9066
9054
|
return true;
|
9067
9055
|
};
|
9068
9056
|
|
@@ -10577,7 +10565,7 @@ function getMatch(exp, ua) {
|
|
10577
10565
|
return match && match.length >= id && match[id] || '';
|
10578
10566
|
}
|
10579
10567
|
|
10580
|
-
var version$1 = "1.15.
|
10568
|
+
var version$1 = "1.15.3";
|
10581
10569
|
|
10582
10570
|
const version = version$1;
|
10583
10571
|
const protocolVersion = 10;
|
@@ -13495,6 +13483,10 @@ function supportsAV1() {
|
|
13495
13483
|
if (!('getCapabilities' in RTCRtpSender)) {
|
13496
13484
|
return false;
|
13497
13485
|
}
|
13486
|
+
if (isSafari()) {
|
13487
|
+
// Safari 17 on iPhone14 reports AV1 capability, but does not actually support it
|
13488
|
+
return false;
|
13489
|
+
}
|
13498
13490
|
const capabilities = RTCRtpSender.getCapabilities('video');
|
13499
13491
|
let hasAV1 = false;
|
13500
13492
|
if (capabilities) {
|
@@ -13516,6 +13508,13 @@ function supportsVP9() {
|
|
13516
13508
|
// https://bugzilla.mozilla.org/show_bug.cgi?id=1633876
|
13517
13509
|
return false;
|
13518
13510
|
}
|
13511
|
+
if (isSafari()) {
|
13512
|
+
const browser = getBrowser();
|
13513
|
+
if ((browser === null || browser === void 0 ? void 0 : browser.version) && compareVersions(browser.version, '16') < 0) {
|
13514
|
+
// Safari 16 and below does not support VP9
|
13515
|
+
return false;
|
13516
|
+
}
|
13517
|
+
}
|
13519
13518
|
const capabilities = RTCRtpSender.getCapabilities('video');
|
13520
13519
|
let hasVP9 = false;
|
13521
13520
|
if (capabilities) {
|
@@ -14733,12 +14732,27 @@ function canPassThroughQueue(req) {
|
|
14733
14732
|
});
|
14734
14733
|
return canPass;
|
14735
14734
|
}
|
14735
|
+
var SignalConnectionState;
|
14736
|
+
(function (SignalConnectionState) {
|
14737
|
+
SignalConnectionState[SignalConnectionState["CONNECTING"] = 0] = "CONNECTING";
|
14738
|
+
SignalConnectionState[SignalConnectionState["CONNECTED"] = 1] = "CONNECTED";
|
14739
|
+
SignalConnectionState[SignalConnectionState["RECONNECTING"] = 2] = "RECONNECTING";
|
14740
|
+
SignalConnectionState[SignalConnectionState["DISCONNECTING"] = 3] = "DISCONNECTING";
|
14741
|
+
SignalConnectionState[SignalConnectionState["DISCONNECTED"] = 4] = "DISCONNECTED";
|
14742
|
+
})(SignalConnectionState || (SignalConnectionState = {}));
|
14736
14743
|
/** @internal */
|
14737
14744
|
class SignalClient {
|
14745
|
+
get currentState() {
|
14746
|
+
return this.state;
|
14747
|
+
}
|
14748
|
+
get isDisconnected() {
|
14749
|
+
return this.state === SignalConnectionState.DISCONNECTING || this.state === SignalConnectionState.DISCONNECTED;
|
14750
|
+
}
|
14738
14751
|
constructor() {
|
14739
14752
|
let useJSON = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
14740
14753
|
/** signal rtt in milliseconds */
|
14741
14754
|
this.rtt = 0;
|
14755
|
+
this.state = SignalConnectionState.DISCONNECTED;
|
14742
14756
|
/** @internal */
|
14743
14757
|
this.resetCallbacks = () => {
|
14744
14758
|
this.onAnswer = undefined;
|
@@ -14753,18 +14767,18 @@ class SignalClient {
|
|
14753
14767
|
this.onTrickle = undefined;
|
14754
14768
|
this.onClose = undefined;
|
14755
14769
|
};
|
14756
|
-
this.isConnected = false;
|
14757
|
-
this.isReconnecting = false;
|
14758
14770
|
this.useJSON = useJSON;
|
14759
14771
|
this.requestQueue = new AsyncQueue();
|
14760
14772
|
this.queuedRequests = [];
|
14761
14773
|
this.closingLock = new Mutex();
|
14774
|
+
this.connectionLock = new Mutex();
|
14775
|
+
this.state = SignalConnectionState.DISCONNECTED;
|
14762
14776
|
}
|
14763
14777
|
join(url, token, opts, abortSignal) {
|
14764
14778
|
return __awaiter(this, void 0, void 0, function* () {
|
14765
14779
|
// during a full reconnect, we'd want to start the sequence even if currently
|
14766
14780
|
// connected
|
14767
|
-
this.
|
14781
|
+
this.state = SignalConnectionState.CONNECTING;
|
14768
14782
|
this.options = opts;
|
14769
14783
|
const res = yield this.connect(url, token, opts, abortSignal);
|
14770
14784
|
return res;
|
@@ -14776,7 +14790,7 @@ class SignalClient {
|
|
14776
14790
|
livekitLogger.warn('attempted to reconnect without signal options being set, ignoring');
|
14777
14791
|
return;
|
14778
14792
|
}
|
14779
|
-
this.
|
14793
|
+
this.state = SignalConnectionState.RECONNECTING;
|
14780
14794
|
// clear ping interval and restart it once reconnected
|
14781
14795
|
this.clearPingInterval();
|
14782
14796
|
const res = yield this.connect(url, token, Object.assign(Object.assign({}, this.options), {
|
@@ -14796,114 +14810,118 @@ class SignalClient {
|
|
14796
14810
|
const clientInfo = getClientInfo();
|
14797
14811
|
const params = createConnectionParams(token, clientInfo, opts);
|
14798
14812
|
return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
|
14799
|
-
const
|
14800
|
-
|
14801
|
-
|
14802
|
-
|
14803
|
-
});
|
14804
|
-
const wsTimeout = setTimeout(() => {
|
14805
|
-
this.close();
|
14806
|
-
reject(new ConnectionError('room connection has timed out (signal)'));
|
14807
|
-
}, opts.websocketTimeout);
|
14808
|
-
if (abortSignal === null || abortSignal === void 0 ? void 0 : abortSignal.aborted) {
|
14809
|
-
abortHandler();
|
14810
|
-
}
|
14811
|
-
abortSignal === null || abortSignal === void 0 ? void 0 : abortSignal.addEventListener('abort', abortHandler);
|
14812
|
-
livekitLogger.debug("connecting to ".concat(url + params));
|
14813
|
-
if (this.ws) {
|
14814
|
-
yield this.close();
|
14815
|
-
}
|
14816
|
-
this.ws = new WebSocket(url + params);
|
14817
|
-
this.ws.binaryType = 'arraybuffer';
|
14818
|
-
this.ws.onopen = () => {
|
14819
|
-
clearTimeout(wsTimeout);
|
14820
|
-
};
|
14821
|
-
this.ws.onerror = ev => __awaiter(this, void 0, void 0, function* () {
|
14822
|
-
if (!this.isConnected) {
|
14813
|
+
const unlock = yield this.connectionLock.lock();
|
14814
|
+
try {
|
14815
|
+
const abortHandler = () => __awaiter(this, void 0, void 0, function* () {
|
14816
|
+
this.close();
|
14823
14817
|
clearTimeout(wsTimeout);
|
14824
|
-
|
14825
|
-
|
14826
|
-
|
14827
|
-
|
14828
|
-
|
14829
|
-
|
14830
|
-
|
14831
|
-
|
14832
|
-
} catch (e) {
|
14833
|
-
reject(new ConnectionError('server was not reachable', 1 /* ConnectionErrorReason.ServerUnreachable */));
|
14834
|
-
}
|
14835
|
-
|
14836
|
-
return;
|
14818
|
+
reject(new ConnectionError('room connection has been cancelled (signal)'));
|
14819
|
+
});
|
14820
|
+
const wsTimeout = setTimeout(() => {
|
14821
|
+
this.close();
|
14822
|
+
reject(new ConnectionError('room connection has timed out (signal)'));
|
14823
|
+
}, opts.websocketTimeout);
|
14824
|
+
if (abortSignal === null || abortSignal === void 0 ? void 0 : abortSignal.aborted) {
|
14825
|
+
abortHandler();
|
14837
14826
|
}
|
14838
|
-
|
14839
|
-
|
14840
|
-
|
14841
|
-
|
14842
|
-
var _a, _b, _c, _d;
|
14843
|
-
// not considered connected until JoinResponse is received
|
14844
|
-
let resp;
|
14845
|
-
if (typeof ev.data === 'string') {
|
14846
|
-
const json = JSON.parse(ev.data);
|
14847
|
-
resp = SignalResponse.fromJson(json);
|
14848
|
-
} else if (ev.data instanceof ArrayBuffer) {
|
14849
|
-
resp = SignalResponse.fromBinary(new Uint8Array(ev.data));
|
14850
|
-
} else {
|
14851
|
-
livekitLogger.error("could not decode websocket message: ".concat(typeof ev.data));
|
14852
|
-
return;
|
14827
|
+
abortSignal === null || abortSignal === void 0 ? void 0 : abortSignal.addEventListener('abort', abortHandler);
|
14828
|
+
livekitLogger.debug("connecting to ".concat(url + params));
|
14829
|
+
if (this.ws) {
|
14830
|
+
yield this.close();
|
14853
14831
|
}
|
14854
|
-
|
14855
|
-
|
14856
|
-
|
14857
|
-
|
14858
|
-
|
14859
|
-
|
14860
|
-
|
14861
|
-
|
14862
|
-
|
14863
|
-
|
14864
|
-
|
14865
|
-
|
14866
|
-
|
14832
|
+
this.ws = new WebSocket(url + params);
|
14833
|
+
this.ws.binaryType = 'arraybuffer';
|
14834
|
+
this.ws.onopen = () => {
|
14835
|
+
clearTimeout(wsTimeout);
|
14836
|
+
};
|
14837
|
+
this.ws.onerror = ev => __awaiter(this, void 0, void 0, function* () {
|
14838
|
+
if (this.state !== SignalConnectionState.CONNECTED) {
|
14839
|
+
clearTimeout(wsTimeout);
|
14840
|
+
try {
|
14841
|
+
const resp = yield fetch("http".concat(url.substring(2), "/validate").concat(params));
|
14842
|
+
if (resp.status.toFixed(0).startsWith('4')) {
|
14843
|
+
const msg = yield resp.text();
|
14844
|
+
reject(new ConnectionError(msg, 0 /* ConnectionErrorReason.NotAllowed */, resp.status));
|
14845
|
+
} else {
|
14846
|
+
reject(new ConnectionError('Internal error', 2 /* ConnectionErrorReason.InternalError */, resp.status));
|
14847
|
+
}
|
14848
|
+
} catch (e) {
|
14849
|
+
reject(new ConnectionError('server was not reachable', 1 /* ConnectionErrorReason.ServerUnreachable */));
|
14850
|
+
}
|
14851
|
+
return;
|
14852
|
+
}
|
14853
|
+
// other errors, handle
|
14854
|
+
this.handleWSError(ev);
|
14855
|
+
});
|
14856
|
+
this.ws.onmessage = ev => __awaiter(this, void 0, void 0, function* () {
|
14857
|
+
var _a, _b, _c, _d;
|
14858
|
+
// not considered connected until JoinResponse is received
|
14859
|
+
let resp;
|
14860
|
+
if (typeof ev.data === 'string') {
|
14861
|
+
const json = JSON.parse(ev.data);
|
14862
|
+
resp = SignalResponse.fromJson(json);
|
14863
|
+
} else if (ev.data instanceof ArrayBuffer) {
|
14864
|
+
resp = SignalResponse.fromBinary(new Uint8Array(ev.data));
|
14865
|
+
} else {
|
14866
|
+
livekitLogger.error("could not decode websocket message: ".concat(typeof ev.data));
|
14867
|
+
return;
|
14868
|
+
}
|
14869
|
+
if (this.state !== SignalConnectionState.CONNECTED) {
|
14870
|
+
let shouldProcessMessage = false;
|
14871
|
+
// handle join message only
|
14872
|
+
if (((_a = resp.message) === null || _a === void 0 ? void 0 : _a.case) === 'join') {
|
14873
|
+
this.state = SignalConnectionState.CONNECTED;
|
14874
|
+
abortSignal === null || abortSignal === void 0 ? void 0 : abortSignal.removeEventListener('abort', abortHandler);
|
14875
|
+
this.pingTimeoutDuration = resp.message.value.pingTimeout;
|
14876
|
+
this.pingIntervalDuration = resp.message.value.pingInterval;
|
14877
|
+
if (this.pingTimeoutDuration && this.pingTimeoutDuration > 0) {
|
14878
|
+
livekitLogger.debug('ping config', {
|
14879
|
+
timeout: this.pingTimeoutDuration,
|
14880
|
+
interval: this.pingIntervalDuration
|
14881
|
+
});
|
14882
|
+
this.startPingInterval();
|
14883
|
+
}
|
14884
|
+
resolve(resp.message.value);
|
14885
|
+
} else if (this.state === SignalConnectionState.RECONNECTING) {
|
14886
|
+
// in reconnecting, any message received means signal reconnected
|
14887
|
+
this.state = SignalConnectionState.CONNECTED;
|
14888
|
+
abortSignal === null || abortSignal === void 0 ? void 0 : abortSignal.removeEventListener('abort', abortHandler);
|
14867
14889
|
this.startPingInterval();
|
14890
|
+
if (((_b = resp.message) === null || _b === void 0 ? void 0 : _b.case) === 'reconnect') {
|
14891
|
+
resolve((_c = resp.message) === null || _c === void 0 ? void 0 : _c.value);
|
14892
|
+
} else {
|
14893
|
+
resolve();
|
14894
|
+
shouldProcessMessage = true;
|
14895
|
+
}
|
14896
|
+
} else if (!opts.reconnect) {
|
14897
|
+
// non-reconnect case, should receive join response first
|
14898
|
+
reject(new ConnectionError("did not receive join response, got ".concat((_d = resp.message) === null || _d === void 0 ? void 0 : _d.case, " instead")));
|
14868
14899
|
}
|
14869
|
-
|
14870
|
-
|
14871
|
-
// in reconnecting, any message received means signal reconnected
|
14872
|
-
this.isConnected = true;
|
14873
|
-
abortSignal === null || abortSignal === void 0 ? void 0 : abortSignal.removeEventListener('abort', abortHandler);
|
14874
|
-
this.startPingInterval();
|
14875
|
-
if (((_b = resp.message) === null || _b === void 0 ? void 0 : _b.case) === 'reconnect') {
|
14876
|
-
resolve((_c = resp.message) === null || _c === void 0 ? void 0 : _c.value);
|
14877
|
-
} else {
|
14878
|
-
resolve();
|
14879
|
-
shouldProcessMessage = true;
|
14900
|
+
if (!shouldProcessMessage) {
|
14901
|
+
return;
|
14880
14902
|
}
|
14881
|
-
} else if (!opts.reconnect) {
|
14882
|
-
// non-reconnect case, should receive join response first
|
14883
|
-
reject(new ConnectionError("did not receive join response, got ".concat((_d = resp.message) === null || _d === void 0 ? void 0 : _d.case, " instead")));
|
14884
14903
|
}
|
14885
|
-
if (
|
14886
|
-
|
14904
|
+
if (this.signalLatency) {
|
14905
|
+
yield sleep(this.signalLatency);
|
14887
14906
|
}
|
14888
|
-
|
14889
|
-
if (this.signalLatency) {
|
14890
|
-
yield sleep(this.signalLatency);
|
14891
|
-
}
|
14892
|
-
this.handleSignalResponse(resp);
|
14893
|
-
});
|
14894
|
-
this.ws.onclose = ev => {
|
14895
|
-
livekitLogger.warn("websocket closed", {
|
14896
|
-
ev
|
14907
|
+
this.handleSignalResponse(resp);
|
14897
14908
|
});
|
14898
|
-
this.
|
14899
|
-
|
14909
|
+
this.ws.onclose = ev => {
|
14910
|
+
livekitLogger.warn("websocket closed", {
|
14911
|
+
ev
|
14912
|
+
});
|
14913
|
+
this.handleOnClose(ev.reason);
|
14914
|
+
};
|
14915
|
+
} finally {
|
14916
|
+
unlock();
|
14917
|
+
}
|
14900
14918
|
}));
|
14901
14919
|
}
|
14902
14920
|
close() {
|
14903
14921
|
return __awaiter(this, void 0, void 0, function* () {
|
14904
14922
|
const unlock = yield this.closingLock.lock();
|
14905
14923
|
try {
|
14906
|
-
this.
|
14924
|
+
this.state = SignalConnectionState.DISCONNECTING;
|
14907
14925
|
if (this.ws) {
|
14908
14926
|
this.ws.onmessage = null;
|
14909
14927
|
this.ws.onopen = null;
|
@@ -14926,6 +14944,7 @@ class SignalClient {
|
|
14926
14944
|
this.ws = undefined;
|
14927
14945
|
}
|
14928
14946
|
} finally {
|
14947
|
+
this.state = SignalConnectionState.DISCONNECTED;
|
14929
14948
|
this.clearPingInterval();
|
14930
14949
|
unlock();
|
14931
14950
|
}
|
@@ -15051,7 +15070,7 @@ class SignalClient {
|
|
15051
15070
|
// capture all requests while reconnecting and put them in a queue
|
15052
15071
|
// unless the request originates from the queue, then don't enqueue again
|
15053
15072
|
const canQueue = !fromQueue && !canPassThroughQueue(message);
|
15054
|
-
if (canQueue && this.
|
15073
|
+
if (canQueue && this.state === SignalConnectionState.RECONNECTING) {
|
15055
15074
|
this.queuedRequests.push(() => __awaiter(this, void 0, void 0, function* () {
|
15056
15075
|
yield this.sendRequest(message, true);
|
15057
15076
|
}));
|
@@ -15177,11 +15196,10 @@ class SignalClient {
|
|
15177
15196
|
this.requestQueue.run(req);
|
15178
15197
|
}
|
15179
15198
|
}
|
15180
|
-
this.isReconnecting = false;
|
15181
15199
|
}
|
15182
15200
|
handleOnClose(reason) {
|
15183
15201
|
return __awaiter(this, void 0, void 0, function* () {
|
15184
|
-
if (
|
15202
|
+
if (this.state === SignalConnectionState.DISCONNECTED) return;
|
15185
15203
|
const onCloseCallback = this.onClose;
|
15186
15204
|
yield this.close();
|
15187
15205
|
livekitLogger.debug("websocket connection closed: ".concat(reason));
|
@@ -15797,7 +15815,6 @@ var grammarExports = grammar$2.exports;
|
|
15797
15815
|
});
|
15798
15816
|
location = media[media.length - 1]; // point at latest media line
|
15799
15817
|
}
|
15800
|
-
|
15801
15818
|
for (var j = 0; j < (grammar[type] || []).length; j += 1) {
|
15802
15819
|
var obj = grammar[type][j];
|
15803
15820
|
if (obj.reg.test(content)) {
|
@@ -15875,7 +15892,6 @@ var format = function (formatStr) {
|
|
15875
15892
|
if (i >= len) {
|
15876
15893
|
return x; // missing argument
|
15877
15894
|
}
|
15878
|
-
|
15879
15895
|
var arg = args[i];
|
15880
15896
|
i += 1;
|
15881
15897
|
switch (x) {
|
@@ -15891,7 +15907,6 @@ var format = function (formatStr) {
|
|
15891
15907
|
});
|
15892
15908
|
// NB: we discard excess arguments - they are typically undefined from makeLine
|
15893
15909
|
};
|
15894
|
-
|
15895
15910
|
var makeLine = function (type, obj, location) {
|
15896
15911
|
var str = obj.format instanceof Function ? obj.format(obj.push ? location : location[obj.name]) : obj.format;
|
15897
15912
|
var args = [type + '=' + str];
|
@@ -15921,11 +15936,9 @@ var writer$1 = function (session, opts) {
|
|
15921
15936
|
if (session.version == null) {
|
15922
15937
|
session.version = 0; // 'v=0' must be there (only defined version atm)
|
15923
15938
|
}
|
15924
|
-
|
15925
15939
|
if (session.name == null) {
|
15926
15940
|
session.name = ' '; // 's= ' must be there if no meaningful name set
|
15927
15941
|
}
|
15928
|
-
|
15929
15942
|
session.media.forEach(function (mLine) {
|
15930
15943
|
if (mLine.payloads == null) {
|
15931
15944
|
mLine.payloads = '';
|
@@ -16782,7 +16795,6 @@ class PCTransportManager {
|
|
16782
16795
|
CriticalTimers.clearTimeout(connectTimeout);
|
16783
16796
|
reject(new ConnectionError('room connection has been cancelled', 3 /* ConnectionErrorReason.Cancelled */));
|
16784
16797
|
};
|
16785
|
-
|
16786
16798
|
if (abortController === null || abortController === void 0 ? void 0 : abortController.signal.aborted) {
|
16787
16799
|
abortHandler();
|
16788
16800
|
}
|
@@ -16973,7 +16985,7 @@ class RTCEngine extends eventsExports.EventEmitter {
|
|
16973
16985
|
};
|
16974
16986
|
this.handleBrowserOnLine = () => {
|
16975
16987
|
// in case the engine is currently reconnecting, attempt a reconnect immediately after the browser state has changed to 'onLine'
|
16976
|
-
if (this.client.
|
16988
|
+
if (this.client.currentState === SignalConnectionState.RECONNECTING) {
|
16977
16989
|
this.clearReconnectTimeout();
|
16978
16990
|
this.attemptReconnect(ReconnectReason.RR_SIGNAL_DISCONNECTED);
|
16979
16991
|
}
|
@@ -17504,7 +17516,7 @@ class RTCEngine extends eventsExports.EventEmitter {
|
|
17504
17516
|
}
|
17505
17517
|
livekitLogger.info("reconnecting, attempt: ".concat(this.reconnectAttempts));
|
17506
17518
|
this.emit(EngineEvent.Restarting);
|
17507
|
-
if (this.client.
|
17519
|
+
if (!this.client.isDisconnected) {
|
17508
17520
|
yield this.client.sendLeave();
|
17509
17521
|
}
|
17510
17522
|
yield this.cleanupPeerConnections();
|
@@ -21184,6 +21196,10 @@ class LocalParticipant extends Participant {
|
|
21184
21196
|
publishAdditionalCodecForTrack(track, videoCodec, options) {
|
21185
21197
|
var _a;
|
21186
21198
|
return __awaiter(this, void 0, void 0, function* () {
|
21199
|
+
// TODO remove once e2ee is supported for backup tracks
|
21200
|
+
if (this.encryptionType !== Encryption_Type.NONE) {
|
21201
|
+
return;
|
21202
|
+
}
|
21187
21203
|
// is it not published? if so skip
|
21188
21204
|
let existingPublication;
|
21189
21205
|
this.tracks.forEach(publication => {
|
@@ -21397,7 +21413,7 @@ class LocalParticipant extends Participant {
|
|
21397
21413
|
let participantTrackPermissions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
21398
21414
|
this.participantTrackPermissions = participantTrackPermissions;
|
21399
21415
|
this.allParticipantsAllowedToSubscribe = allParticipantsAllowed;
|
21400
|
-
if (this.engine.client.
|
21416
|
+
if (!this.engine.client.isDisconnected) {
|
21401
21417
|
this.updateTrackSubscriptionPermissions();
|
21402
21418
|
}
|
21403
21419
|
}
|
@@ -21709,7 +21725,7 @@ class Room extends eventsExports.EventEmitter {
|
|
21709
21725
|
this.connectFuture = undefined;
|
21710
21726
|
}
|
21711
21727
|
// send leave
|
21712
|
-
if ((_j = this.engine) === null || _j === void 0 ? void 0 : _j.client.
|
21728
|
+
if (!((_j = this.engine) === null || _j === void 0 ? void 0 : _j.client.isDisconnected)) {
|
21713
21729
|
yield this.engine.client.sendLeave();
|
21714
21730
|
}
|
21715
21731
|
// close engine (also closes client)
|