livekit-client 2.11.1 → 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.
Files changed (35) hide show
  1. package/dist/livekit-client.e2ee.worker.js +1 -1
  2. package/dist/livekit-client.e2ee.worker.js.map +1 -1
  3. package/dist/livekit-client.e2ee.worker.mjs +10 -6
  4. package/dist/livekit-client.e2ee.worker.mjs.map +1 -1
  5. package/dist/livekit-client.esm.mjs +40 -25
  6. package/dist/livekit-client.esm.mjs.map +1 -1
  7. package/dist/livekit-client.umd.js +1 -1
  8. package/dist/livekit-client.umd.js.map +1 -1
  9. package/dist/src/e2ee/E2eeManager.d.ts.map +1 -1
  10. package/dist/src/e2ee/constants.d.ts.map +1 -1
  11. package/dist/src/e2ee/types.d.ts +2 -0
  12. package/dist/src/e2ee/types.d.ts.map +1 -1
  13. package/dist/src/e2ee/utils.d.ts +1 -1
  14. package/dist/src/e2ee/utils.d.ts.map +1 -1
  15. package/dist/src/e2ee/worker/ParticipantKeyHandler.d.ts +3 -2
  16. package/dist/src/e2ee/worker/ParticipantKeyHandler.d.ts.map +1 -1
  17. package/dist/src/room/track/create.d.ts.map +1 -1
  18. package/dist/src/utils/cloneDeep.d.ts +1 -1
  19. package/dist/src/utils/cloneDeep.d.ts.map +1 -1
  20. package/dist/ts4.2/src/e2ee/types.d.ts +2 -0
  21. package/dist/ts4.2/src/e2ee/utils.d.ts +1 -1
  22. package/dist/ts4.2/src/e2ee/worker/ParticipantKeyHandler.d.ts +3 -2
  23. package/dist/ts4.2/src/utils/cloneDeep.d.ts +1 -1
  24. package/package.json +1 -1
  25. package/src/api/utils.test.ts +7 -0
  26. package/src/api/utils.ts +2 -2
  27. package/src/e2ee/E2eeManager.ts +11 -2
  28. package/src/e2ee/constants.ts +1 -0
  29. package/src/e2ee/types.ts +2 -0
  30. package/src/e2ee/utils.ts +2 -1
  31. package/src/e2ee/worker/ParticipantKeyHandler.ts +4 -2
  32. package/src/e2ee/worker/e2ee.worker.ts +2 -2
  33. package/src/room/track/create.ts +21 -8
  34. package/src/room/track/utils.ts +2 -2
  35. package/src/utils/cloneDeep.ts +2 -2
@@ -482,7 +482,8 @@ const KEY_PROVIDER_DEFAULTS = {
482
482
  ratchetSalt: SALT,
483
483
  ratchetWindowSize: 8,
484
484
  failureTolerance: DECRYPTION_FAILURE_TOLERANCE,
485
- keyringSize: 16
485
+ keyringSize: 16,
486
+ allowKeyExtraction: false
486
487
  };
487
488
  const MAX_SIF_COUNT = 100;
488
489
  const MAX_SIF_DURATION = 2000;
@@ -962,9 +963,10 @@ function importKey(keyBytes_1) {
962
963
  name: ENCRYPTION_ALGORITHM
963
964
  };
964
965
  let usage = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'encrypt';
966
+ let extractable = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
965
967
  return function* () {
966
968
  // https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/importKey
967
- return crypto.subtle.importKey('raw', keyBytes, algorithm, false, usage === 'derive' ? ['deriveBits', 'deriveKey'] : ['encrypt', 'decrypt']);
969
+ return crypto.subtle.importKey('raw', keyBytes, algorithm, extractable, usage === 'derive' ? ['deriveBits', 'deriveKey'] : ['encrypt', 'decrypt']);
968
970
  }();
969
971
  });
970
972
  }
@@ -1718,10 +1720,12 @@ class ParticipantKeyHandler extends eventsExports.EventEmitter {
1718
1720
  * returns the ratcheted material
1719
1721
  * if `setKey` is true (default), it will also set the ratcheted key directly on the crypto key ring
1720
1722
  * @param keyIndex
1721
- * @param setKey
1723
+ * @param setKey set the new key. Will emit KeyHandlerEvent.KeyRatcheted after key generation (default: true)
1724
+ * @param extractable allow key extraction (get the key in plaintext) on the ratcheted new key (default: false)
1722
1725
  */
1723
1726
  ratchetKey(keyIndex) {
1724
1727
  let setKey = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
1728
+ let extractable = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
1725
1729
  const currentKeyIndex = keyIndex !== null && keyIndex !== void 0 ? keyIndex : this.getCurrentKeyIndex();
1726
1730
  const existingPromise = this.ratchetPromiseMap.get(currentKeyIndex);
1727
1731
  if (typeof existingPromise !== 'undefined') {
@@ -1734,7 +1738,7 @@ class ParticipantKeyHandler extends eventsExports.EventEmitter {
1734
1738
  throw new TypeError("Cannot ratchet key without a valid keyset of participant ".concat(this.participantIdentity));
1735
1739
  }
1736
1740
  const currentMaterial = keySet.material;
1737
- const newMaterial = yield importKey(yield ratchet(currentMaterial, this.keyProviderOptions.ratchetSalt), currentMaterial.algorithm.name, 'derive');
1741
+ const newMaterial = yield importKey(yield ratchet(currentMaterial, this.keyProviderOptions.ratchetSalt), currentMaterial.algorithm.name, 'derive', extractable);
1738
1742
  if (setKey) {
1739
1743
  yield this.setKeyFromMaterial(newMaterial, currentKeyIndex, true);
1740
1744
  this.emit(KeyHandlerEvent.KeyRatcheted, newMaterial, this.participantIdentity, currentKeyIndex);
@@ -1897,11 +1901,11 @@ function handleRatchetRequest(data) {
1897
1901
  return __awaiter(this, void 0, void 0, function* () {
1898
1902
  if (useSharedKey) {
1899
1903
  const keyHandler = getSharedKeyHandler();
1900
- yield keyHandler.ratchetKey(data.keyIndex);
1904
+ yield keyHandler.ratchetKey(data.keyIndex, true, data.extractable);
1901
1905
  keyHandler.resetKeyStatus();
1902
1906
  } else if (data.participantIdentity) {
1903
1907
  const keyHandler = getParticipantKeyHandler(data.participantIdentity);
1904
- yield keyHandler.ratchetKey(data.keyIndex);
1908
+ yield keyHandler.ratchetKey(data.keyIndex, true, data.extractable);
1905
1909
  keyHandler.resetKeyStatus();
1906
1910
  } else {
1907
1911
  workerLogger.error('no participant Id was provided for ratchet request and shared key usage is disabled');