livekit-client 2.20.0 → 2.20.2

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 (155) 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 +41 -11
  4. package/dist/livekit-client.e2ee.worker.mjs.map +1 -1
  5. package/dist/livekit-client.esm.mjs +744 -178
  6. package/dist/livekit-client.esm.mjs.map +1 -1
  7. package/dist/livekit-client.fm.worker.js +1 -1
  8. package/dist/livekit-client.fm.worker.js.map +1 -1
  9. package/dist/livekit-client.fm.worker.mjs +41 -7
  10. package/dist/livekit-client.fm.worker.mjs.map +1 -1
  11. package/dist/livekit-client.umd.js +1 -1
  12. package/dist/livekit-client.umd.js.map +1 -1
  13. package/dist/src/api/SignalClient.d.ts.map +1 -1
  14. package/dist/src/e2ee/E2eeManager.d.ts +1 -0
  15. package/dist/src/e2ee/E2eeManager.d.ts.map +1 -1
  16. package/dist/src/e2ee/types.d.ts +1 -0
  17. package/dist/src/e2ee/types.d.ts.map +1 -1
  18. package/dist/src/e2ee/utils.d.ts +1 -0
  19. package/dist/src/e2ee/utils.d.ts.map +1 -1
  20. package/dist/src/e2ee/worker/DataCryptor.d.ts +1 -0
  21. package/dist/src/e2ee/worker/DataCryptor.d.ts.map +1 -1
  22. package/dist/src/e2ee/worker/FrameCryptor.d.ts +1 -0
  23. package/dist/src/e2ee/worker/FrameCryptor.d.ts.map +1 -1
  24. package/dist/src/e2ee/worker/naluUtils.d.ts +1 -0
  25. package/dist/src/e2ee/worker/naluUtils.d.ts.map +1 -1
  26. package/dist/src/e2ee/worker/sifPayload.d.ts +1 -0
  27. package/dist/src/e2ee/worker/sifPayload.d.ts.map +1 -1
  28. package/dist/src/frameMetadata/frameMetadata.d.ts +1 -0
  29. package/dist/src/frameMetadata/frameMetadata.d.ts.map +1 -1
  30. package/dist/src/frameMetadata/types.d.ts +1 -0
  31. package/dist/src/frameMetadata/types.d.ts.map +1 -1
  32. package/dist/src/logger.d.ts +3 -1
  33. package/dist/src/logger.d.ts.map +1 -1
  34. package/dist/src/room/PCTransport.d.ts +42 -1
  35. package/dist/src/room/PCTransport.d.ts.map +1 -1
  36. package/dist/src/room/PCTransportManager.d.ts +1 -0
  37. package/dist/src/room/PCTransportManager.d.ts.map +1 -1
  38. package/dist/src/room/RTCEngine.d.ts +46 -4
  39. package/dist/src/room/RTCEngine.d.ts.map +1 -1
  40. package/dist/src/room/RegionUrlProvider.d.ts.map +1 -1
  41. package/dist/src/room/Room.d.ts +1 -0
  42. package/dist/src/room/Room.d.ts.map +1 -1
  43. package/dist/src/room/data-track/depacketizer.d.ts.map +1 -1
  44. package/dist/src/room/data-track/frame.d.ts +1 -0
  45. package/dist/src/room/data-track/frame.d.ts.map +1 -1
  46. package/dist/src/room/data-track/incoming/IncomingDataTrackManager.d.ts +7 -0
  47. package/dist/src/room/data-track/incoming/IncomingDataTrackManager.d.ts.map +1 -1
  48. package/dist/src/room/data-track/outgoing/OutgoingDataTrackManager.d.ts.map +1 -1
  49. package/dist/src/room/data-track/outgoing/types.d.ts +1 -0
  50. package/dist/src/room/data-track/outgoing/types.d.ts.map +1 -1
  51. package/dist/src/room/data-track/packet/extensions.d.ts +1 -0
  52. package/dist/src/room/data-track/packet/extensions.d.ts.map +1 -1
  53. package/dist/src/room/data-track/packet/index.d.ts +1 -0
  54. package/dist/src/room/data-track/packet/index.d.ts.map +1 -1
  55. package/dist/src/room/data-track/packet/serializable.d.ts +1 -0
  56. package/dist/src/room/data-track/packet/serializable.d.ts.map +1 -1
  57. package/dist/src/room/participant/LocalParticipant.d.ts +1 -0
  58. package/dist/src/room/participant/LocalParticipant.d.ts.map +1 -1
  59. package/dist/src/room/participant/Participant.d.ts +1 -0
  60. package/dist/src/room/participant/Participant.d.ts.map +1 -1
  61. package/dist/src/room/participant/publishUtils.d.ts +7 -0
  62. package/dist/src/room/participant/publishUtils.d.ts.map +1 -1
  63. package/dist/src/room/track/LocalAudioTrack.d.ts +1 -0
  64. package/dist/src/room/track/LocalAudioTrack.d.ts.map +1 -1
  65. package/dist/src/room/track/Track.d.ts +1 -0
  66. package/dist/src/room/track/Track.d.ts.map +1 -1
  67. package/dist/src/room/track/options.d.ts +11 -1
  68. package/dist/src/room/track/options.d.ts.map +1 -1
  69. package/dist/src/room/track/record.d.ts.map +1 -1
  70. package/dist/src/room/utils.d.ts +1 -0
  71. package/dist/src/room/utils.d.ts.map +1 -1
  72. package/dist/src/test/signalToken.d.ts +26 -0
  73. package/dist/src/test/signalToken.d.ts.map +1 -0
  74. package/dist/src/type-polyfills/non-shared-typed-arrays.d.ts +2 -0
  75. package/dist/src/type-polyfills/non-shared-typed-arrays.d.ts.map +1 -0
  76. package/dist/src/utils/dataPacketBuffer.d.ts +19 -0
  77. package/dist/src/utils/dataPacketBuffer.d.ts.map +1 -1
  78. package/dist/ts4.2/e2ee/E2eeManager.d.ts +1 -0
  79. package/dist/ts4.2/e2ee/types.d.ts +1 -0
  80. package/dist/ts4.2/e2ee/utils.d.ts +1 -0
  81. package/dist/ts4.2/e2ee/worker/DataCryptor.d.ts +1 -0
  82. package/dist/ts4.2/e2ee/worker/FrameCryptor.d.ts +1 -0
  83. package/dist/ts4.2/e2ee/worker/naluUtils.d.ts +1 -0
  84. package/dist/ts4.2/e2ee/worker/sifPayload.d.ts +1 -0
  85. package/dist/ts4.2/frameMetadata/frameMetadata.d.ts +1 -0
  86. package/dist/ts4.2/frameMetadata/types.d.ts +1 -0
  87. package/dist/ts4.2/logger.d.ts +3 -1
  88. package/dist/ts4.2/room/PCTransport.d.ts +42 -1
  89. package/dist/ts4.2/room/PCTransportManager.d.ts +1 -0
  90. package/dist/ts4.2/room/RTCEngine.d.ts +46 -4
  91. package/dist/ts4.2/room/Room.d.ts +1 -0
  92. package/dist/ts4.2/room/data-track/frame.d.ts +1 -0
  93. package/dist/ts4.2/room/data-track/incoming/IncomingDataTrackManager.d.ts +7 -0
  94. package/dist/ts4.2/room/data-track/outgoing/types.d.ts +1 -0
  95. package/dist/ts4.2/room/data-track/packet/extensions.d.ts +1 -0
  96. package/dist/ts4.2/room/data-track/packet/index.d.ts +1 -0
  97. package/dist/ts4.2/room/data-track/packet/serializable.d.ts +1 -0
  98. package/dist/ts4.2/room/participant/LocalParticipant.d.ts +1 -0
  99. package/dist/ts4.2/room/participant/Participant.d.ts +1 -0
  100. package/dist/ts4.2/room/participant/publishUtils.d.ts +7 -0
  101. package/dist/ts4.2/room/track/LocalAudioTrack.d.ts +1 -0
  102. package/dist/ts4.2/room/track/Track.d.ts +1 -0
  103. package/dist/ts4.2/room/track/options.d.ts +11 -1
  104. package/dist/ts4.2/room/utils.d.ts +1 -0
  105. package/dist/ts4.2/test/signalToken.d.ts +26 -0
  106. package/dist/ts4.2/type-polyfills/non-shared-typed-arrays.d.ts +2 -0
  107. package/dist/ts4.2/utils/dataPacketBuffer.d.ts +19 -0
  108. package/package.json +8 -4
  109. package/src/api/SignalClient.e2e.test.ts +264 -0
  110. package/src/api/SignalClient.ts +35 -2
  111. package/src/e2ee/E2eeManager.ts +3 -1
  112. package/src/e2ee/types.ts +1 -0
  113. package/src/e2ee/utils.ts +1 -0
  114. package/src/e2ee/worker/DataCryptor.ts +1 -0
  115. package/src/e2ee/worker/FrameCryptor.test.ts +1 -0
  116. package/src/e2ee/worker/FrameCryptor.ts +1 -0
  117. package/src/e2ee/worker/ParticipantKeyHandler.test.ts +1 -0
  118. package/src/e2ee/worker/e2ee.worker.ts +1 -0
  119. package/src/e2ee/worker/naluUtils.ts +1 -0
  120. package/src/e2ee/worker/sifPayload.ts +1 -0
  121. package/src/frameMetadata/frameMetadata.test.ts +83 -0
  122. package/src/frameMetadata/frameMetadata.ts +8 -0
  123. package/src/frameMetadata/types.ts +1 -0
  124. package/src/logger.ts +2 -0
  125. package/src/room/PCTransport.test.ts +150 -0
  126. package/src/room/PCTransport.ts +179 -31
  127. package/src/room/PCTransportManager.ts +10 -6
  128. package/src/room/RTCEngine.test.ts +275 -2
  129. package/src/room/RTCEngine.ts +277 -71
  130. package/src/room/RegionUrlProvider.ts +4 -2
  131. package/src/room/Room.ts +8 -1
  132. package/src/room/data-track/depacketizer.ts +1 -0
  133. package/src/room/data-track/frame.ts +1 -0
  134. package/src/room/data-track/incoming/IncomingDataTrackManager.test.ts +303 -0
  135. package/src/room/data-track/incoming/IncomingDataTrackManager.ts +70 -8
  136. package/src/room/data-track/outgoing/OutgoingDataTrackManager.ts +2 -0
  137. package/src/room/data-track/outgoing/types.ts +1 -0
  138. package/src/room/data-track/packet/extensions.ts +1 -0
  139. package/src/room/data-track/packet/index.ts +1 -0
  140. package/src/room/data-track/packet/serializable.ts +1 -0
  141. package/src/room/errors.ts +4 -4
  142. package/src/room/participant/LocalParticipant.ts +17 -6
  143. package/src/room/participant/Participant.ts +6 -0
  144. package/src/room/participant/publishUtils.ts +14 -11
  145. package/src/room/track/LocalAudioTrack.ts +16 -0
  146. package/src/room/track/Track.ts +11 -6
  147. package/src/room/track/options.ts +11 -1
  148. package/src/room/track/record.ts +1 -0
  149. package/src/room/utils.ts +1 -0
  150. package/src/test/signalServerSetup.ts +151 -0
  151. package/src/test/signalToken.ts +59 -0
  152. package/src/test/vitest-context.d.ts +10 -0
  153. package/src/type-polyfills/{non-shared-typed-arrays.d.ts → non-shared-typed-arrays.ts} +6 -1
  154. package/src/utils/dataPacketBuffer.test.ts +100 -0
  155. package/src/utils/dataPacketBuffer.ts +48 -1
@@ -379,6 +379,8 @@ var LoggerNames;
379
379
  LoggerNames["PCTransport"] = "livekit-pc-transport";
380
380
  LoggerNames["E2EE"] = "lk-e2ee";
381
381
  LoggerNames["DataTracks"] = "livekit-data-tracks";
382
+ LoggerNames["Region"] = "livekit-region";
383
+ LoggerNames["ICE"] = "livekit-ice";
382
384
  })(LoggerNames || (LoggerNames = {}));
383
385
  let livekitLogger = loglevelExports.getLogger(LoggerNames.Default);
384
386
  Object.values(LoggerNames).map(name => loglevelExports.getLogger(name));
@@ -398,9 +400,27 @@ livekitLogger.setDefaultLevel(LogLevel.info);
398
400
  function getLogger(name, ctxFn) {
399
401
  const logger = loglevelExports.getLogger(name);
400
402
  logger.setDefaultLevel(livekitLogger.getLevel());
401
- {
403
+ if (!ctxFn) {
402
404
  return logger;
403
405
  }
406
+ return wrapWithContext(logger, ctxFn);
407
+ }
408
+ function wrapWithContext(base, ctxFn) {
409
+ // Resolve the underlying method on every call so that later
410
+ // setLogExtension installations (which replace the base logger's
411
+ // methods via loglevel's methodFactory) are picked up.
412
+ const wrap = method => (msg, extra) => {
413
+ const ctx = ctxFn();
414
+ const merged = ctx || extra ? Object.assign(Object.assign({}, ctx), extra) : undefined;
415
+ base[method](msg, merged);
416
+ };
417
+ const proxy = Object.create(base);
418
+ proxy.trace = wrap('trace');
419
+ proxy.debug = wrap('debug');
420
+ proxy.info = wrap('info');
421
+ proxy.warn = wrap('warn');
422
+ proxy.error = wrap('error');
423
+ return proxy;
404
424
  }
405
425
  const workerLogger = loglevelExports.getLogger(LoggerNames.E2EE);
406
426
 
@@ -5566,6 +5586,9 @@ class Track extends eventsExports.EventEmitter {
5566
5586
  }
5567
5587
  /** @internal */
5568
5588
  setStreamState(value) {
5589
+ if (this._streamState !== value) {
5590
+ this.log.debug("stream state changed: ".concat(this._streamState, " -> ").concat(value));
5591
+ }
5569
5592
  this._streamState = value;
5570
5593
  }
5571
5594
  constructor(mediaTrack, kind) {
@@ -5590,8 +5613,8 @@ class Track extends eventsExports.EventEmitter {
5590
5613
  this.handleAppVisibilityChanged();
5591
5614
  }
5592
5615
  };
5593
- this.log = getLogger((_a = loggerOptions.loggerName) !== null && _a !== void 0 ? _a : LoggerNames.Track);
5594
5616
  this.loggerContextCb = loggerOptions.loggerContextCb;
5617
+ this.log = getLogger((_a = loggerOptions.loggerName) !== null && _a !== void 0 ? _a : LoggerNames.Track, () => this.logContext);
5595
5618
  this.setMaxListeners(100);
5596
5619
  this.kind = kind;
5597
5620
  this._mediaStreamTrack = mediaTrack;
@@ -5659,9 +5682,11 @@ class Track extends eventsExports.EventEmitter {
5659
5682
  this.emit(hasAudio ? TrackEvent.AudioPlaybackFailed : TrackEvent.VideoPlaybackFailed, e);
5660
5683
  } else if (e.name === 'AbortError') {
5661
5684
  // commonly triggered by another `play` request, only log for debugging purposes
5662
- livekitLogger.debug("".concat(hasAudio ? 'audio' : 'video', " playback aborted, likely due to new play request"));
5685
+ this.log.debug("".concat(hasAudio ? 'audio' : 'video', " playback aborted, likely due to new play request"));
5663
5686
  } else {
5664
- livekitLogger.warn("could not playback ".concat(hasAudio ? 'audio' : 'video'), e);
5687
+ this.log.warn("could not playback ".concat(hasAudio ? 'audio' : 'video'), {
5688
+ error: e
5689
+ });
5665
5690
  }
5666
5691
  // If audio playback isn't allowed make sure we still play back the video
5667
5692
  if (hasAudio && element && allMediaStreamTracks.some(tr => tr.kind === 'video') && e.name === 'NotAllowedError') {
@@ -5704,6 +5729,7 @@ class Track extends eventsExports.EventEmitter {
5704
5729
  }
5705
5730
  }
5706
5731
  stop() {
5732
+ this.log.debug('stopping track');
5707
5733
  this.stopMonitor();
5708
5734
  this._mediaStreamTrack.stop();
5709
5735
  }
@@ -5724,12 +5750,12 @@ class Track extends eventsExports.EventEmitter {
5724
5750
  }
5725
5751
  /** @internal */
5726
5752
  updateLoggerOptions(loggerOptions) {
5727
- if (loggerOptions.loggerName) {
5728
- this.log = getLogger(loggerOptions.loggerName);
5729
- }
5730
5753
  if (loggerOptions.loggerContextCb) {
5731
5754
  this.loggerContextCb = loggerOptions.loggerContextCb;
5732
5755
  }
5756
+ if (loggerOptions.loggerName) {
5757
+ this.log = getLogger(loggerOptions.loggerName, () => this.logContext);
5758
+ }
5733
5759
  }
5734
5760
  recycleElement(element) {
5735
5761
  if (element instanceof HTMLAudioElement) {
@@ -5946,6 +5972,7 @@ function hasFrameMetadataPublishOptions(options) {
5946
5972
  const PACKET_TRAILER_MAGIC = Uint8Array.from(['L'.charCodeAt(0), 'K'.charCodeAt(0), 'T'.charCodeAt(0), 'S'.charCodeAt(0)]);
5947
5973
  const PACKET_TRAILER_TIMESTAMP_TAG = 0x01;
5948
5974
  const PACKET_TRAILER_FRAME_ID_TAG = 0x02;
5975
+ const PACKET_TRAILER_USER_DATA_TAG = 0x03;
5949
5976
  const PACKET_TRAILER_ENVELOPE_SIZE = 5;
5950
5977
  const TIMESTAMP_TLV_SIZE = 10;
5951
5978
  const FRAME_ID_TLV_SIZE = 6;
@@ -6030,6 +6057,13 @@ function extractPacketTrailer(data) {
6030
6057
  } else if (tag === PACKET_TRAILER_FRAME_ID_TAG && length === 4) {
6031
6058
  metadata.frameId = readUint32Xor(bytes, offset, length);
6032
6059
  foundAny = true;
6060
+ } else if (tag === PACKET_TRAILER_USER_DATA_TAG) {
6061
+ const userData = new Uint8Array(length);
6062
+ for (let index = 0; index < length; index += 1) {
6063
+ userData[index] = bytes[offset + index] ^ 0xff;
6064
+ }
6065
+ metadata.userData = userData;
6066
+ foundAny = true;
6033
6067
  }
6034
6068
  offset += length;
6035
6069
  }
@@ -6138,10 +6172,6 @@ function processPacketTrailer(frame, trackId) {
6138
6172
  };
6139
6173
  }
6140
6174
 
6141
- /**
6142
- * NALU (Network Abstraction Layer Unit) utilities for H.264 and H.265 video processing
6143
- * Contains functions for parsing and working with NALUs in video frames
6144
- */
6145
6175
  /**
6146
6176
  * Mask for extracting NALU type from H.264 header byte
6147
6177
  */