livekit-client 2.3.1 → 2.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (71) 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 +14 -7
  4. package/dist/livekit-client.e2ee.worker.mjs.map +1 -1
  5. package/dist/livekit-client.esm.mjs +325 -175
  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/api/SignalClient.d.ts +5 -2
  10. package/dist/src/api/SignalClient.d.ts.map +1 -1
  11. package/dist/src/connectionHelper/ConnectionCheck.d.ts.map +1 -1
  12. package/dist/src/connectionHelper/checks/Checker.d.ts.map +1 -1
  13. package/dist/src/e2ee/E2eeManager.d.ts.map +1 -1
  14. package/dist/src/e2ee/KeyProvider.d.ts.map +1 -1
  15. package/dist/src/e2ee/errors.d.ts +2 -1
  16. package/dist/src/e2ee/errors.d.ts.map +1 -1
  17. package/dist/src/e2ee/index.d.ts +1 -0
  18. package/dist/src/e2ee/index.d.ts.map +1 -1
  19. package/dist/src/e2ee/worker/FrameCryptor.d.ts.map +1 -1
  20. package/dist/src/e2ee/worker/ParticipantKeyHandler.d.ts.map +1 -1
  21. package/dist/src/logger.d.ts.map +1 -1
  22. package/dist/src/room/PCTransport.d.ts +1 -2
  23. package/dist/src/room/PCTransport.d.ts.map +1 -1
  24. package/dist/src/room/RTCEngine.d.ts +2 -1
  25. package/dist/src/room/RTCEngine.d.ts.map +1 -1
  26. package/dist/src/room/Room.d.ts +1 -0
  27. package/dist/src/room/Room.d.ts.map +1 -1
  28. package/dist/src/room/errors.d.ts +5 -0
  29. package/dist/src/room/errors.d.ts.map +1 -1
  30. package/dist/src/room/events.d.ts +15 -2
  31. package/dist/src/room/events.d.ts.map +1 -1
  32. package/dist/src/room/participant/LocalParticipant.d.ts +14 -6
  33. package/dist/src/room/participant/LocalParticipant.d.ts.map +1 -1
  34. package/dist/src/room/participant/Participant.d.ts +8 -0
  35. package/dist/src/room/participant/Participant.d.ts.map +1 -1
  36. package/dist/src/room/timers.d.ts +4 -4
  37. package/dist/src/room/timers.d.ts.map +1 -1
  38. package/dist/src/room/track/RemoteTrackPublication.d.ts.map +1 -1
  39. package/dist/src/room/track/Track.d.ts.map +1 -1
  40. package/dist/src/room/track/TrackPublication.d.ts.map +1 -1
  41. package/dist/src/room/track/utils.d.ts +1 -0
  42. package/dist/src/room/track/utils.d.ts.map +1 -1
  43. package/dist/ts4.2/src/api/SignalClient.d.ts +5 -2
  44. package/dist/ts4.2/src/e2ee/errors.d.ts +2 -1
  45. package/dist/ts4.2/src/e2ee/index.d.ts +1 -0
  46. package/dist/ts4.2/src/room/PCTransport.d.ts +1 -2
  47. package/dist/ts4.2/src/room/RTCEngine.d.ts +2 -1
  48. package/dist/ts4.2/src/room/Room.d.ts +1 -0
  49. package/dist/ts4.2/src/room/errors.d.ts +5 -0
  50. package/dist/ts4.2/src/room/events.d.ts +15 -2
  51. package/dist/ts4.2/src/room/participant/LocalParticipant.d.ts +14 -6
  52. package/dist/ts4.2/src/room/participant/Participant.d.ts +8 -0
  53. package/dist/ts4.2/src/room/timers.d.ts +4 -4
  54. package/dist/ts4.2/src/room/track/utils.d.ts +1 -0
  55. package/package.json +12 -12
  56. package/src/api/SignalClient.ts +24 -2
  57. package/src/e2ee/errors.ts +8 -1
  58. package/src/e2ee/index.ts +1 -0
  59. package/src/e2ee/worker/FrameCryptor.ts +18 -4
  60. package/src/e2ee/worker/e2ee.worker.ts +5 -1
  61. package/src/logger.ts +4 -3
  62. package/src/room/DeviceManager.ts +1 -1
  63. package/src/room/RTCEngine.ts +3 -0
  64. package/src/room/Room.ts +11 -3
  65. package/src/room/errors.ts +11 -0
  66. package/src/room/events.ts +15 -0
  67. package/src/room/participant/LocalParticipant.ts +102 -10
  68. package/src/room/participant/Participant.ts +23 -0
  69. package/src/room/track/Track.ts +1 -1
  70. package/src/room/track/utils.test.ts +35 -1
  71. package/src/room/track/utils.ts +22 -0
@@ -454,8 +454,10 @@ var CryptorErrorReason;
454
454
  class CryptorError extends LivekitError {
455
455
  constructor(message) {
456
456
  let reason = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : CryptorErrorReason.InternalError;
457
+ let participantIdentity = arguments.length > 2 ? arguments[2] : undefined;
457
458
  super(40, message);
458
459
  this.reason = reason;
460
+ this.participantIdentity = participantIdentity;
459
461
  }
460
462
  }
461
463
 
@@ -1111,7 +1113,7 @@ class FrameCryptor extends BaseFrameCryptor {
1111
1113
  });
1112
1114
  readable.pipeThrough(transformStream).pipeTo(writable).catch(e => {
1113
1115
  workerLogger.warn(e);
1114
- this.emit(CryptorEvent.Error, e instanceof CryptorError ? e : new CryptorError(e.message));
1116
+ this.emit(CryptorEvent.Error, e instanceof CryptorError ? e : new CryptorError(e.message, undefined, this.participantIdentity));
1115
1117
  });
1116
1118
  this.trackId = trackId;
1117
1119
  }
@@ -1198,8 +1200,8 @@ class FrameCryptor extends BaseFrameCryptor {
1198
1200
  workerLogger.error(e);
1199
1201
  }
1200
1202
  } else {
1201
- workerLogger.debug('failed to decrypt, emitting error', this.logContext);
1202
- this.emit(CryptorEvent.Error, new CryptorError("encryption key missing for encoding", CryptorErrorReason.MissingKey));
1203
+ workerLogger.debug('failed to encrypt, emitting error', this.logContext);
1204
+ this.emit(CryptorEvent.Error, new CryptorError("encryption key missing for encoding", CryptorErrorReason.MissingKey, this.participantIdentity));
1203
1205
  }
1204
1206
  });
1205
1207
  }
@@ -1255,7 +1257,7 @@ class FrameCryptor extends BaseFrameCryptor {
1255
1257
  } else if (!this.keys.getKeySet(keyIndex) && this.keys.hasValidKey) {
1256
1258
  // emit an error in case the key index is out of bounds but the key handler thinks we still have a valid key
1257
1259
  workerLogger.warn("skipping decryption due to missing key at index ".concat(keyIndex));
1258
- this.emit(CryptorEvent.Error, new CryptorError("missing key at index ".concat(keyIndex, " for participant ").concat(this.participantIdentity), CryptorErrorReason.MissingKey));
1260
+ this.emit(CryptorEvent.Error, new CryptorError("missing key at index ".concat(keyIndex, " for participant ").concat(this.participantIdentity), CryptorErrorReason.MissingKey, this.participantIdentity));
1259
1261
  }
1260
1262
  });
1261
1263
  }
@@ -1342,10 +1344,10 @@ class FrameCryptor extends BaseFrameCryptor {
1342
1344
  * as the key has not been updated on the keyHandler instance
1343
1345
  */
1344
1346
  workerLogger.warn('maximum ratchet attempts exceeded');
1345
- throw new CryptorError("valid key missing for participant ".concat(_this.participantIdentity), CryptorErrorReason.InvalidKey);
1347
+ throw new CryptorError("valid key missing for participant ".concat(_this.participantIdentity), CryptorErrorReason.InvalidKey, _this.participantIdentity);
1346
1348
  }
1347
1349
  } else {
1348
- throw new CryptorError("Decryption failed: ".concat(error.message), CryptorErrorReason.InvalidKey);
1350
+ throw new CryptorError("Decryption failed: ".concat(error.message), CryptorErrorReason.InvalidKey, _this.participantIdentity);
1349
1351
  }
1350
1352
  }
1351
1353
  }();
@@ -1401,11 +1403,13 @@ class FrameCryptor extends BaseFrameCryptor {
1401
1403
  }, this.logContext));
1402
1404
  this.detectedCodec = detectedCodec;
1403
1405
  }
1404
- if (detectedCodec === 'av1' || detectedCodec === 'vp9') {
1406
+ if (detectedCodec === 'av1') {
1405
1407
  throw new Error("".concat(detectedCodec, " is not yet supported for end to end encryption"));
1406
1408
  }
1407
1409
  if (detectedCodec === 'vp8') {
1408
1410
  frameInfo.unencryptedBytes = UNENCRYPTED_BYTES[frame.type];
1411
+ } else if (detectedCodec === 'vp9') {
1412
+ frameInfo.unencryptedBytes = 0;
1409
1413
  return frameInfo;
1410
1414
  }
1411
1415
  const data = new Uint8Array(frame.data);
@@ -1693,6 +1697,7 @@ let isEncryptionEnabled = false;
1693
1697
  let useSharedKey = false;
1694
1698
  let sifTrailer;
1695
1699
  let keyProviderOptions = KEY_PROVIDER_DEFAULTS;
1700
+ let rtpMap = new Map();
1696
1701
  workerLogger.setDefaultLevel('info');
1697
1702
  onmessage = ev => {
1698
1703
  const {
@@ -1746,6 +1751,7 @@ onmessage = ev => {
1746
1751
  break;
1747
1752
  case 'setRTPMap':
1748
1753
  // this is only used for the local participant
1754
+ rtpMap = data.map;
1749
1755
  participantCryptors.forEach(cr => {
1750
1756
  if (cr.getParticipantIdentity() === data.participantIdentity) {
1751
1757
  cr.setRtpMap(data.map);
@@ -1801,6 +1807,7 @@ function getTrackCryptor(participantIdentity, trackId) {
1801
1807
  keyProviderOptions,
1802
1808
  sifTrailer
1803
1809
  });
1810
+ cryptor.setRtpMap(rtpMap);
1804
1811
  setupCryptorErrorEvents(cryptor);
1805
1812
  participantCryptors.push(cryptor);
1806
1813
  } else if (participantIdentity !== cryptor.getParticipantIdentity()) {