livekit-client 2.11.2 → 2.11.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 +1 -1
- package/dist/livekit-client.e2ee.worker.js.map +1 -1
- package/dist/livekit-client.e2ee.worker.mjs +10 -6
- package/dist/livekit-client.e2ee.worker.mjs.map +1 -1
- package/dist/livekit-client.esm.mjs +38 -23
- 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/e2ee/E2eeManager.d.ts.map +1 -1
- package/dist/src/e2ee/constants.d.ts.map +1 -1
- package/dist/src/e2ee/types.d.ts +2 -0
- package/dist/src/e2ee/types.d.ts.map +1 -1
- package/dist/src/e2ee/utils.d.ts +1 -1
- package/dist/src/e2ee/utils.d.ts.map +1 -1
- package/dist/src/e2ee/worker/ParticipantKeyHandler.d.ts +3 -2
- package/dist/src/e2ee/worker/ParticipantKeyHandler.d.ts.map +1 -1
- package/dist/src/room/track/create.d.ts.map +1 -1
- package/dist/src/utils/cloneDeep.d.ts +1 -1
- package/dist/src/utils/cloneDeep.d.ts.map +1 -1
- package/dist/ts4.2/src/e2ee/types.d.ts +2 -0
- package/dist/ts4.2/src/e2ee/utils.d.ts +1 -1
- package/dist/ts4.2/src/e2ee/worker/ParticipantKeyHandler.d.ts +3 -2
- package/dist/ts4.2/src/utils/cloneDeep.d.ts +1 -1
- package/package.json +1 -1
- package/src/api/utils.test.ts +7 -0
- package/src/api/utils.ts +2 -2
- package/src/e2ee/E2eeManager.ts +11 -2
- package/src/e2ee/constants.ts +1 -0
- package/src/e2ee/types.ts +2 -0
- package/src/e2ee/utils.ts +2 -1
- package/src/e2ee/worker/ParticipantKeyHandler.ts +4 -2
- package/src/e2ee/worker/e2ee.worker.ts +2 -2
- package/src/room/track/create.ts +19 -6
- package/src/room/track/utils.ts +2 -2
- package/src/utils/cloneDeep.ts +2 -2
@@ -10156,7 +10156,8 @@ const KEY_PROVIDER_DEFAULTS = {
|
|
10156
10156
|
ratchetSalt: SALT,
|
10157
10157
|
ratchetWindowSize: 8,
|
10158
10158
|
failureTolerance: DECRYPTION_FAILURE_TOLERANCE,
|
10159
|
-
keyringSize: 16
|
10159
|
+
keyringSize: 16,
|
10160
|
+
allowKeyExtraction: false
|
10160
10161
|
};
|
10161
10162
|
|
10162
10163
|
var KeyProviderEvent;
|
@@ -10200,9 +10201,10 @@ function importKey(keyBytes_1) {
|
|
10200
10201
|
name: ENCRYPTION_ALGORITHM
|
10201
10202
|
};
|
10202
10203
|
let usage = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'encrypt';
|
10204
|
+
let extractable = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
|
10203
10205
|
return function* () {
|
10204
10206
|
// https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/importKey
|
10205
|
-
return crypto.subtle.importKey('raw', keyBytes, algorithm,
|
10207
|
+
return crypto.subtle.importKey('raw', keyBytes, algorithm, extractable, usage === 'derive' ? ['deriveBits', 'deriveKey'] : ['encrypt', 'decrypt']);
|
10206
10208
|
}();
|
10207
10209
|
});
|
10208
10210
|
}
|
@@ -11109,7 +11111,7 @@ var TrackEvent;
|
|
11109
11111
|
|
11110
11112
|
function cloneDeep(value) {
|
11111
11113
|
if (typeof value === 'undefined') {
|
11112
|
-
return;
|
11114
|
+
return value;
|
11113
11115
|
}
|
11114
11116
|
if (typeof structuredClone === 'function') {
|
11115
11117
|
return structuredClone(value);
|
@@ -11186,7 +11188,7 @@ function getOSVersion(ua) {
|
|
11186
11188
|
return ua.includes('mac os') ? getMatch(/\(.+?(\d+_\d+(:?_\d+)?)/, ua, 1).replace(/_/g, '.') : undefined;
|
11187
11189
|
}
|
11188
11190
|
|
11189
|
-
var version$1 = "2.11.
|
11191
|
+
var version$1 = "2.11.3";
|
11190
11192
|
|
11191
11193
|
const version = version$1;
|
11192
11194
|
const protocolVersion = 15;
|
@@ -12062,6 +12064,12 @@ function unwrapConstraint(constraint) {
|
|
12062
12064
|
}
|
12063
12065
|
throw Error('could not unwrap constraint');
|
12064
12066
|
}
|
12067
|
+
function toWebsocketUrl(url) {
|
12068
|
+
if (url.startsWith('http')) {
|
12069
|
+
return url.replace(/^(http)/, 'ws');
|
12070
|
+
}
|
12071
|
+
return url;
|
12072
|
+
}
|
12065
12073
|
function toHttpUrl(url) {
|
12066
12074
|
if (url.startsWith('ws')) {
|
12067
12075
|
return url.replace(/^(ws)/, 'http');
|
@@ -12187,8 +12195,8 @@ function splitUtf8(s, n) {
|
|
12187
12195
|
}
|
12188
12196
|
|
12189
12197
|
function mergeDefaultOptions(options, audioDefaults, videoDefaults) {
|
12190
|
-
var _a, _b
|
12191
|
-
var
|
12198
|
+
var _a, _b;
|
12199
|
+
var _c, _d;
|
12192
12200
|
const {
|
12193
12201
|
optionsWithoutProcessor,
|
12194
12202
|
audioProcessor,
|
@@ -12196,13 +12204,13 @@ function mergeDefaultOptions(options, audioDefaults, videoDefaults) {
|
|
12196
12204
|
} = extractProcessorsFromOptions(options !== null && options !== void 0 ? options : {});
|
12197
12205
|
const defaultAudioProcessor = audioDefaults === null || audioDefaults === void 0 ? void 0 : audioDefaults.processor;
|
12198
12206
|
const defaultVideoProcessor = videoDefaults === null || videoDefaults === void 0 ? void 0 : videoDefaults.processor;
|
12199
|
-
const clonedOptions =
|
12207
|
+
const clonedOptions = optionsWithoutProcessor !== null && optionsWithoutProcessor !== void 0 ? optionsWithoutProcessor : {};
|
12200
12208
|
if (clonedOptions.audio === true) clonedOptions.audio = {};
|
12201
12209
|
if (clonedOptions.video === true) clonedOptions.video = {};
|
12202
12210
|
// use defaults
|
12203
12211
|
if (clonedOptions.audio) {
|
12204
12212
|
mergeObjectWithoutOverwriting(clonedOptions.audio, audioDefaults);
|
12205
|
-
(
|
12213
|
+
(_a = (_c = clonedOptions.audio).deviceId) !== null && _a !== void 0 ? _a : _c.deviceId = {
|
12206
12214
|
ideal: 'default'
|
12207
12215
|
};
|
12208
12216
|
if (audioProcessor || defaultAudioProcessor) {
|
@@ -12211,7 +12219,7 @@ function mergeDefaultOptions(options, audioDefaults, videoDefaults) {
|
|
12211
12219
|
}
|
12212
12220
|
if (clonedOptions.video) {
|
12213
12221
|
mergeObjectWithoutOverwriting(clonedOptions.video, videoDefaults);
|
12214
|
-
(
|
12222
|
+
(_b = (_d = clonedOptions.video).deviceId) !== null && _b !== void 0 ? _b : _d.deviceId = {
|
12215
12223
|
ideal: 'default'
|
12216
12224
|
};
|
12217
12225
|
if (videoProcessor || defaultVideoProcessor) {
|
@@ -12469,7 +12477,7 @@ function extractProcessorsFromOptions(options) {
|
|
12469
12477
|
return {
|
12470
12478
|
audioProcessor,
|
12471
12479
|
videoProcessor,
|
12472
|
-
optionsWithoutProcessor: newOptions
|
12480
|
+
optionsWithoutProcessor: cloneDeep(newOptions)
|
12473
12481
|
};
|
12474
12482
|
}
|
12475
12483
|
function getTrackSourceFromProto(source) {
|
@@ -12628,9 +12636,9 @@ class E2EEManager extends eventsExports.EventEmitter {
|
|
12628
12636
|
room.localParticipant.on(ParticipantEvent.LocalTrackPublished, publication => __awaiter(this, void 0, void 0, function* () {
|
12629
12637
|
this.setupE2EESender(publication.track, publication.track.sender);
|
12630
12638
|
}));
|
12631
|
-
keyProvider.on(KeyProviderEvent.SetKey, keyInfo => this.postKey(keyInfo)).on(KeyProviderEvent.RatchetRequest, (participantId, keyIndex) => this.postRatchetRequest(participantId, keyIndex));
|
12639
|
+
keyProvider.on(KeyProviderEvent.SetKey, keyInfo => this.postKey(keyInfo)).on(KeyProviderEvent.RatchetRequest, (participantId, keyIndex) => this.postRatchetRequest(participantId, keyIndex, keyProvider.getOptions().allowKeyExtraction));
|
12632
12640
|
}
|
12633
|
-
postRatchetRequest(participantIdentity, keyIndex) {
|
12641
|
+
postRatchetRequest(participantIdentity, keyIndex, extractable) {
|
12634
12642
|
if (!this.worker) {
|
12635
12643
|
throw Error('could not ratchet key, worker is missing');
|
12636
12644
|
}
|
@@ -12638,7 +12646,8 @@ class E2EEManager extends eventsExports.EventEmitter {
|
|
12638
12646
|
kind: 'ratchetRequest',
|
12639
12647
|
data: {
|
12640
12648
|
participantIdentity: participantIdentity,
|
12641
|
-
keyIndex
|
12649
|
+
keyIndex,
|
12650
|
+
extractable
|
12642
12651
|
}
|
12643
12652
|
};
|
12644
12653
|
this.worker.postMessage(msg);
|
@@ -12966,7 +12975,7 @@ class AsyncQueue {
|
|
12966
12975
|
}
|
12967
12976
|
|
12968
12977
|
function createRtcUrl(url, searchParams) {
|
12969
|
-
const urlObj = new URL(url);
|
12978
|
+
const urlObj = new URL(toWebsocketUrl(url));
|
12970
12979
|
searchParams.forEach((value, key) => {
|
12971
12980
|
urlObj.searchParams.set(key, value);
|
12972
12981
|
});
|
@@ -19442,13 +19451,23 @@ class LocalTrackPublication extends TrackPublication {
|
|
19442
19451
|
*/
|
19443
19452
|
function createLocalTracks(options, loggerOptions) {
|
19444
19453
|
return __awaiter(this, void 0, void 0, function* () {
|
19445
|
-
|
19446
|
-
const internalOptions = Object.assign({}, options !== null && options !== void 0 ? options : {});
|
19454
|
+
options !== null && options !== void 0 ? options : options = {};
|
19447
19455
|
let attemptExactMatch = false;
|
19448
|
-
|
19449
|
-
|
19456
|
+
const {
|
19457
|
+
audioProcessor,
|
19458
|
+
videoProcessor,
|
19459
|
+
optionsWithoutProcessor: internalOptions
|
19460
|
+
} = extractProcessorsFromOptions(options);
|
19461
|
+
let retryAudioOptions = internalOptions.audio;
|
19462
|
+
let retryVideoOptions = internalOptions.video;
|
19463
|
+
if (audioProcessor && typeof internalOptions.audio === 'object') {
|
19464
|
+
internalOptions.audio.processor = audioProcessor;
|
19465
|
+
}
|
19466
|
+
if (videoProcessor && typeof internalOptions.video === 'object') {
|
19467
|
+
internalOptions.video.processor = videoProcessor;
|
19468
|
+
}
|
19450
19469
|
// if the user passes a device id as a string, we default to exact match
|
19451
|
-
if (
|
19470
|
+
if (options.audio && typeof internalOptions.audio === 'object' && typeof internalOptions.audio.deviceId === 'string') {
|
19452
19471
|
const deviceId = internalOptions.audio.deviceId;
|
19453
19472
|
internalOptions.audio.deviceId = {
|
19454
19473
|
exact: deviceId
|
@@ -19483,10 +19502,6 @@ function createLocalTracks(options, loggerOptions) {
|
|
19483
19502
|
deviceId: 'default'
|
19484
19503
|
};
|
19485
19504
|
}
|
19486
|
-
const {
|
19487
|
-
audioProcessor,
|
19488
|
-
videoProcessor
|
19489
|
-
} = extractProcessorsFromOptions(internalOptions);
|
19490
19505
|
const opts = mergeDefaultOptions(internalOptions, audioDefaults, videoDefaults);
|
19491
19506
|
const constraints = constraintsForOptions(opts);
|
19492
19507
|
// Keep a reference to the promise on DeviceManager and await it in getLocalDevices()
|