livekit-client 1.15.1 → 1.15.3
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/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 +142 -124
- 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 +12 -2
- 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();
|
@@ -21074,7 +21086,9 @@ class LocalParticipant extends Participant {
|
|
21074
21086
|
codec: defaultVideoCodec
|
21075
21087
|
};
|
21076
21088
|
}
|
21077
|
-
if (opts.backupCodec && videoCodec !== opts.backupCodec.codec
|
21089
|
+
if (opts.backupCodec && videoCodec !== opts.backupCodec.codec &&
|
21090
|
+
// TODO remove this once e2ee is supported for backup codecs
|
21091
|
+
req.encryption === Encryption_Type.NONE) {
|
21078
21092
|
// multi-codec simulcast requires dynacast
|
21079
21093
|
if (!this.roomOptions.dynacast) {
|
21080
21094
|
this.roomOptions.dynacast = true;
|
@@ -21182,6 +21196,10 @@ class LocalParticipant extends Participant {
|
|
21182
21196
|
publishAdditionalCodecForTrack(track, videoCodec, options) {
|
21183
21197
|
var _a;
|
21184
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
|
+
}
|
21185
21203
|
// is it not published? if so skip
|
21186
21204
|
let existingPublication;
|
21187
21205
|
this.tracks.forEach(publication => {
|
@@ -21395,7 +21413,7 @@ class LocalParticipant extends Participant {
|
|
21395
21413
|
let participantTrackPermissions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
21396
21414
|
this.participantTrackPermissions = participantTrackPermissions;
|
21397
21415
|
this.allParticipantsAllowedToSubscribe = allParticipantsAllowed;
|
21398
|
-
if (this.engine.client.
|
21416
|
+
if (!this.engine.client.isDisconnected) {
|
21399
21417
|
this.updateTrackSubscriptionPermissions();
|
21400
21418
|
}
|
21401
21419
|
}
|
@@ -21707,7 +21725,7 @@ class Room extends eventsExports.EventEmitter {
|
|
21707
21725
|
this.connectFuture = undefined;
|
21708
21726
|
}
|
21709
21727
|
// send leave
|
21710
|
-
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)) {
|
21711
21729
|
yield this.engine.client.sendLeave();
|
21712
21730
|
}
|
21713
21731
|
// close engine (also closes client)
|