livekit-client 2.13.3 → 2.13.5

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.esm.mjs +285 -7
  2. package/dist/livekit-client.esm.mjs.map +1 -1
  3. package/dist/livekit-client.umd.js +1 -1
  4. package/dist/livekit-client.umd.js.map +1 -1
  5. package/dist/src/api/SignalClient.d.ts.map +1 -1
  6. package/dist/src/index.d.ts +4 -1
  7. package/dist/src/index.d.ts.map +1 -1
  8. package/dist/src/room/RTCEngine.d.ts +4 -0
  9. package/dist/src/room/RTCEngine.d.ts.map +1 -1
  10. package/dist/src/room/Room.d.ts +1 -1
  11. package/dist/src/room/Room.d.ts.map +1 -1
  12. package/dist/src/room/attribute-typings.d.ts +35 -0
  13. package/dist/src/room/attribute-typings.d.ts.map +1 -0
  14. package/dist/src/room/participant/LocalParticipant.d.ts.map +1 -1
  15. package/dist/src/utils/cloneDeep.d.ts.map +1 -1
  16. package/dist/src/utils/dataPacketBuffer.d.ts +15 -0
  17. package/dist/src/utils/dataPacketBuffer.d.ts.map +1 -0
  18. package/dist/src/utils/ttlmap.d.ts +20 -0
  19. package/dist/src/utils/ttlmap.d.ts.map +1 -0
  20. package/dist/ts4.2/src/index.d.ts +4 -1
  21. package/dist/ts4.2/src/room/RTCEngine.d.ts +4 -0
  22. package/dist/ts4.2/src/room/Room.d.ts +1 -1
  23. package/dist/ts4.2/src/room/attribute-typings.d.ts +35 -0
  24. package/dist/ts4.2/src/utils/dataPacketBuffer.d.ts +15 -0
  25. package/dist/ts4.2/src/utils/ttlmap.d.ts +20 -0
  26. package/package.json +2 -2
  27. package/src/api/SignalClient.ts +4 -1
  28. package/src/index.ts +3 -0
  29. package/src/room/RTCEngine.ts +63 -2
  30. package/src/room/Room.ts +2 -2
  31. package/src/room/attribute-typings.ts +61 -0
  32. package/src/room/participant/LocalParticipant.ts +2 -0
  33. package/src/utils/cloneDeep.ts +4 -0
  34. package/src/utils/dataPacketBuffer.ts +52 -0
  35. package/src/utils/ttlmap.ts +96 -0
@@ -2966,7 +2966,17 @@ function makeUtilCommon() {
2966
2966
  }
2967
2967
  switch (m.kind) {
2968
2968
  case "message":
2969
- return m.T.equals(va, vb);
2969
+ let a = va;
2970
+ let b = vb;
2971
+ if (m.T.fieldWrapper) {
2972
+ if (a !== undefined && !isMessage(a)) {
2973
+ a = m.T.fieldWrapper.wrapField(a);
2974
+ }
2975
+ if (b !== undefined && !isMessage(b)) {
2976
+ b = m.T.fieldWrapper.wrapField(b);
2977
+ }
2978
+ }
2979
+ return m.T.equals(a, b);
2970
2980
  case "enum":
2971
2981
  return scalarEquals(ScalarType.INT32, va, vb);
2972
2982
  case "scalar":
@@ -3887,6 +3897,9 @@ const DisconnectReason = /* @__PURE__ */proto3.makeEnum("livekit.DisconnectReaso
3887
3897
  }, {
3888
3898
  no: 14,
3889
3899
  name: "CONNECTION_TIMEOUT"
3900
+ }, {
3901
+ no: 15,
3902
+ name: "MEDIA_FAILURE"
3890
3903
  }]);
3891
3904
  const ReconnectReason = /* @__PURE__ */proto3.makeEnum("livekit.ReconnectReason", [{
3892
3905
  no: 0,
@@ -4491,6 +4504,18 @@ const DataPacket = /* @__PURE__ */proto3.makeMessageType("livekit.DataPacket", (
4491
4504
  kind: "message",
4492
4505
  T: DataStream_Trailer,
4493
4506
  oneof: "value"
4507
+ }, {
4508
+ no: 16,
4509
+ name: "sequence",
4510
+ kind: "scalar",
4511
+ T: 13
4512
+ /* ScalarType.UINT32 */
4513
+ }, {
4514
+ no: 17,
4515
+ name: "participant_sid",
4516
+ kind: "scalar",
4517
+ T: 9
4518
+ /* ScalarType.STRING */
4494
4519
  }]);
4495
4520
  const DataPacket_Kind = /* @__PURE__ */proto3.makeEnum("livekit.DataPacket.Kind", [{
4496
4521
  no: 0,
@@ -5676,6 +5701,17 @@ const ReconnectResponse = /* @__PURE__ */proto3.makeMessageType("livekit.Reconne
5676
5701
  name: "client_configuration",
5677
5702
  kind: "message",
5678
5703
  T: ClientConfiguration
5704
+ }, {
5705
+ no: 3,
5706
+ name: "server_info",
5707
+ kind: "message",
5708
+ T: ServerInfo
5709
+ }, {
5710
+ no: 4,
5711
+ name: "last_message_seq",
5712
+ kind: "scalar",
5713
+ T: 13
5714
+ /* ScalarType.UINT32 */
5679
5715
  }]);
5680
5716
  const TrackPublishedResponse = /* @__PURE__ */proto3.makeMessageType("livekit.TrackPublishedResponse", () => [{
5681
5717
  no: 1,
@@ -6122,6 +6158,25 @@ const SyncState = /* @__PURE__ */proto3.makeMessageType("livekit.SyncState", ()
6122
6158
  kind: "scalar",
6123
6159
  T: 9,
6124
6160
  repeated: true
6161
+ }, {
6162
+ no: 7,
6163
+ name: "datachannel_receive_states",
6164
+ kind: "message",
6165
+ T: DataChannelReceiveState,
6166
+ repeated: true
6167
+ }]);
6168
+ const DataChannelReceiveState = /* @__PURE__ */proto3.makeMessageType("livekit.DataChannelReceiveState", () => [{
6169
+ no: 1,
6170
+ name: "publisher_sid",
6171
+ kind: "scalar",
6172
+ T: 9
6173
+ /* ScalarType.STRING */
6174
+ }, {
6175
+ no: 2,
6176
+ name: "last_seq",
6177
+ kind: "scalar",
6178
+ T: 13
6179
+ /* ScalarType.UINT32 */
6125
6180
  }]);
6126
6181
  const DataChannelInfo = /* @__PURE__ */proto3.makeMessageType("livekit.DataChannelInfo", () => [{
6127
6182
  no: 1,
@@ -11192,6 +11247,10 @@ function cloneDeep(value) {
11192
11247
  return value;
11193
11248
  }
11194
11249
  if (typeof structuredClone === 'function') {
11250
+ if (typeof value === 'object' && value !== null) {
11251
+ // ensure that the value is not a proxy by spreading it
11252
+ return structuredClone(Object.assign({}, value));
11253
+ }
11195
11254
  return structuredClone(value);
11196
11255
  } else {
11197
11256
  return JSON.parse(JSON.stringify(value));
@@ -11266,7 +11325,7 @@ function getOSVersion(ua) {
11266
11325
  return ua.includes('mac os') ? getMatch(/\(.+?(\d+_\d+(:?_\d+)?)/, ua, 1).replace(/_/g, '.') : undefined;
11267
11326
  }
11268
11327
 
11269
- var version$1 = "2.13.3";
11328
+ var version$1 = "2.13.5";
11270
11329
 
11271
11330
  const version = version$1;
11272
11331
  const protocolVersion = 16;
@@ -13185,7 +13244,10 @@ class SignalClient {
13185
13244
  sid,
13186
13245
  reconnectReason: reason
13187
13246
  }));
13188
- return res;
13247
+ if (res instanceof ReconnectResponse) {
13248
+ return res;
13249
+ }
13250
+ return;
13189
13251
  });
13190
13252
  }
13191
13253
  connect(url, token, opts, abortSignal) {
@@ -13783,6 +13845,135 @@ function createConnectionParams(token, info, opts) {
13783
13845
  return params;
13784
13846
  }
13785
13847
 
13848
+ class DataPacketBuffer {
13849
+ constructor() {
13850
+ this.buffer = [];
13851
+ this._totalSize = 0;
13852
+ }
13853
+ push(item) {
13854
+ this.buffer.push(item);
13855
+ this._totalSize += item.data.byteLength;
13856
+ }
13857
+ pop() {
13858
+ const item = this.buffer.shift();
13859
+ if (item) {
13860
+ this._totalSize -= item.data.byteLength;
13861
+ }
13862
+ return item;
13863
+ }
13864
+ getAll() {
13865
+ return this.buffer.slice();
13866
+ }
13867
+ popToSequence(sequence) {
13868
+ while (this.buffer.length > 0) {
13869
+ const first = this.buffer[0];
13870
+ if (first.sequence <= sequence) {
13871
+ this.pop();
13872
+ } else {
13873
+ break;
13874
+ }
13875
+ }
13876
+ }
13877
+ alignBufferedAmount(bufferedAmount) {
13878
+ while (this.buffer.length > 0) {
13879
+ const first = this.buffer[0];
13880
+ if (this._totalSize - first.data.byteLength <= bufferedAmount) {
13881
+ break;
13882
+ }
13883
+ this.pop();
13884
+ }
13885
+ }
13886
+ get length() {
13887
+ return this.buffer.length;
13888
+ }
13889
+ }
13890
+
13891
+ class TTLMap {
13892
+ /**
13893
+ * @param ttl ttl of the key (ms)
13894
+ */
13895
+ constructor(ttl) {
13896
+ this._map = new Map();
13897
+ this._lastCleanup = 0;
13898
+ this.ttl = ttl;
13899
+ }
13900
+ set(key, value) {
13901
+ const now = Date.now();
13902
+ if (now - this._lastCleanup > this.ttl / 2) {
13903
+ this.cleanup();
13904
+ }
13905
+ const expiresAt = now + this.ttl;
13906
+ this._map.set(key, {
13907
+ value,
13908
+ expiresAt
13909
+ });
13910
+ return this;
13911
+ }
13912
+ get(key) {
13913
+ const entry = this._map.get(key);
13914
+ if (!entry) return undefined;
13915
+ if (entry.expiresAt < Date.now()) {
13916
+ this._map.delete(key);
13917
+ return undefined;
13918
+ }
13919
+ return entry.value;
13920
+ }
13921
+ has(key) {
13922
+ const entry = this._map.get(key);
13923
+ if (!entry) return false;
13924
+ if (entry.expiresAt < Date.now()) {
13925
+ this._map.delete(key);
13926
+ return false;
13927
+ }
13928
+ return true;
13929
+ }
13930
+ delete(key) {
13931
+ return this._map.delete(key);
13932
+ }
13933
+ clear() {
13934
+ this._map.clear();
13935
+ }
13936
+ cleanup() {
13937
+ const now = Date.now();
13938
+ for (const [key, entry] of this._map.entries()) {
13939
+ if (entry.expiresAt < now) {
13940
+ this._map.delete(key);
13941
+ }
13942
+ }
13943
+ this._lastCleanup = now;
13944
+ }
13945
+ get size() {
13946
+ this.cleanup();
13947
+ return this._map.size;
13948
+ }
13949
+ forEach(callback) {
13950
+ this.cleanup();
13951
+ for (const [key, entry] of this._map.entries()) {
13952
+ if (entry.expiresAt >= Date.now()) {
13953
+ callback(entry.value, key, this.asValueMap());
13954
+ }
13955
+ }
13956
+ }
13957
+ map(callback) {
13958
+ this.cleanup();
13959
+ const result = [];
13960
+ const valueMap = this.asValueMap();
13961
+ for (const [key, value] of valueMap.entries()) {
13962
+ result.push(callback(value, key, valueMap));
13963
+ }
13964
+ return result;
13965
+ }
13966
+ asValueMap() {
13967
+ const result = new Map();
13968
+ for (const [key, entry] of this._map.entries()) {
13969
+ if (entry.expiresAt >= Date.now()) {
13970
+ result.set(key, entry.value);
13971
+ }
13972
+ }
13973
+ return result;
13974
+ }
13975
+ }
13976
+
13786
13977
  var lib = {};
13787
13978
 
13788
13979
  var parser = {};
@@ -17362,6 +17553,7 @@ const lossyDataChannel = '_lossy';
17362
17553
  const reliableDataChannel = '_reliable';
17363
17554
  const minReconnectWait = 2 * 1000;
17364
17555
  const leaveReconnect = 'leave-reconnect';
17556
+ const reliabeReceiveStateTTL = 30000;
17365
17557
  var PCState;
17366
17558
  (function (PCState) {
17367
17559
  PCState[PCState["New"] = 0] = "New";
@@ -17398,6 +17590,9 @@ class RTCEngine extends eventsExports.EventEmitter {
17398
17590
  this.maxJoinAttempts = 1;
17399
17591
  this.shouldFailNext = false;
17400
17592
  this.log = livekitLogger;
17593
+ this.reliableDataSequence = 1;
17594
+ this.reliableMessageBuffer = new DataPacketBuffer();
17595
+ this.reliableReceivedState = new TTLMap(reliabeReceiveStateTTL);
17401
17596
  this.handleDataChannel = _a => __awaiter(this, [_a], void 0, function (_ref) {
17402
17597
  var _this = this;
17403
17598
  let {
@@ -17436,6 +17631,14 @@ class RTCEngine extends eventsExports.EventEmitter {
17436
17631
  return;
17437
17632
  }
17438
17633
  const dp = DataPacket.fromBinary(new Uint8Array(buffer));
17634
+ if (dp.sequence > 0 && dp.participantSid !== '') {
17635
+ const lastSeq = this.reliableReceivedState.get(dp.participantSid);
17636
+ if (lastSeq && dp.sequence <= lastSeq) {
17637
+ // ignore duplicate or out-of-order packets in reliable channel
17638
+ return;
17639
+ }
17640
+ this.reliableReceivedState.set(dp.participantSid, dp.sequence);
17641
+ }
17439
17642
  if (((_a = dp.value) === null || _a === void 0 ? void 0 : _a.case) === 'speaker') {
17440
17643
  // dispatch speaker updates
17441
17644
  this.emit(EngineEvent.ActiveSpeakersUpdate, dp.value.value.speakers);
@@ -17536,6 +17739,9 @@ class RTCEngine extends eventsExports.EventEmitter {
17536
17739
  this.isBufferStatusLow = kind => {
17537
17740
  const dc = this.dataChannelForKind(kind);
17538
17741
  if (dc) {
17742
+ if (kind === DataPacket_Kind.RELIABLE) {
17743
+ this.reliableMessageBuffer.alignBufferedAmount(dc.bufferedAmount);
17744
+ }
17539
17745
  return dc.bufferedAmount <= dc.bufferedAmountLowThreshold;
17540
17746
  }
17541
17747
  };
@@ -17657,6 +17863,9 @@ class RTCEngine extends eventsExports.EventEmitter {
17657
17863
  this.lossyDCSub = undefined;
17658
17864
  this.reliableDC = undefined;
17659
17865
  this.reliableDCSub = undefined;
17866
+ this.reliableMessageBuffer = new DataPacketBuffer();
17867
+ this.reliableDataSequence = 1;
17868
+ this.reliableReceivedState.clear();
17660
17869
  });
17661
17870
  }
17662
17871
  cleanupClient() {
@@ -18181,6 +18390,9 @@ class RTCEngine extends eventsExports.EventEmitter {
18181
18390
  if (res) {
18182
18391
  const rtcConfig = this.makeRTCConfiguration(res);
18183
18392
  this.pcManager.updateConfiguration(rtcConfig);
18393
+ if (this.latestJoinResponse) {
18394
+ this.latestJoinResponse.serverInfo = res.serverInfo;
18395
+ }
18184
18396
  } else {
18185
18397
  this.log.warn('Did not receive reconnect response', this.logContext);
18186
18398
  }
@@ -18200,6 +18412,9 @@ class RTCEngine extends eventsExports.EventEmitter {
18200
18412
  if (((_a = this.reliableDC) === null || _a === void 0 ? void 0 : _a.readyState) === 'open' && this.reliableDC.id === null) {
18201
18413
  this.createDataChannels();
18202
18414
  }
18415
+ if (res === null || res === void 0 ? void 0 : res.lastMessageSeq) {
18416
+ this.resendReliableMessagesForResume(res.lastMessageSeq);
18417
+ }
18203
18418
  // resume success
18204
18419
  this.emit(EngineEvent.Resumed);
18205
18420
  });
@@ -18272,16 +18487,42 @@ class RTCEngine extends eventsExports.EventEmitter {
18272
18487
  /* @internal */
18273
18488
  sendDataPacket(packet, kind) {
18274
18489
  return __awaiter(this, void 0, void 0, function* () {
18275
- const msg = packet.toBinary();
18276
18490
  // make sure we do have a data connection
18277
18491
  yield this.ensurePublisherConnected(kind);
18492
+ if (kind === DataPacket_Kind.RELIABLE) {
18493
+ packet.sequence = this.reliableDataSequence;
18494
+ this.reliableDataSequence += 1;
18495
+ }
18496
+ const msg = packet.toBinary();
18278
18497
  const dc = this.dataChannelForKind(kind);
18279
18498
  if (dc) {
18499
+ if (kind === DataPacket_Kind.RELIABLE) {
18500
+ this.reliableMessageBuffer.push({
18501
+ data: msg,
18502
+ sequence: packet.sequence
18503
+ });
18504
+ }
18505
+ if (this.attemptingReconnect) {
18506
+ return;
18507
+ }
18280
18508
  dc.send(msg);
18281
18509
  }
18282
18510
  this.updateAndEmitDCBufferStatus(kind);
18283
18511
  });
18284
18512
  }
18513
+ resendReliableMessagesForResume(lastMessageSeq) {
18514
+ return __awaiter(this, void 0, void 0, function* () {
18515
+ yield this.ensurePublisherConnected(DataPacket_Kind.RELIABLE);
18516
+ const dc = this.dataChannelForKind(DataPacket_Kind.RELIABLE);
18517
+ if (dc) {
18518
+ this.reliableMessageBuffer.popToSequence(lastMessageSeq);
18519
+ this.reliableMessageBuffer.getAll().forEach(msg => {
18520
+ dc.send(msg.data);
18521
+ });
18522
+ }
18523
+ this.updateAndEmitDCBufferStatus(DataPacket_Kind.RELIABLE);
18524
+ });
18525
+ }
18285
18526
  waitForBufferStatusLow(kind) {
18286
18527
  return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
18287
18528
  if (this.isBufferStatusLow(kind)) {
@@ -18473,7 +18714,13 @@ class RTCEngine extends eventsExports.EventEmitter {
18473
18714
  }),
18474
18715
  publishTracks: getTrackPublicationInfo(localTracks),
18475
18716
  dataChannels: this.dataChannelsInfo(),
18476
- trackSidsDisabled
18717
+ trackSidsDisabled,
18718
+ datachannelReceiveStates: this.reliableReceivedState.map((seq, sid) => {
18719
+ return new DataChannelReceiveState({
18720
+ publisherSid: sid,
18721
+ lastSeq: seq
18722
+ });
18723
+ })
18477
18724
  }));
18478
18725
  }
18479
18726
  /* @internal */
@@ -20393,6 +20640,7 @@ class LocalParticipant extends Participant {
20393
20640
  }
20394
20641
  });
20395
20642
  this.engine.on(EngineEvent.Connected, this.handleReconnected).on(EngineEvent.SignalConnected, this.handleSignalConnected).on(EngineEvent.SignalRestarted, this.handleReconnected).on(EngineEvent.SignalResumed, this.handleReconnected).on(EngineEvent.Restarting, this.handleReconnecting).on(EngineEvent.Resuming, this.handleReconnecting).on(EngineEvent.LocalTrackUnpublished, this.handleLocalTrackUnpublished).on(EngineEvent.SubscribedQualityUpdate, this.handleSubscribedQualityUpdate).on(EngineEvent.Disconnected, this.handleDisconnected).on(EngineEvent.SignalRequestResponse, this.handleSignalRequestResponse).on(EngineEvent.DataPacketReceived, this.handleDataPacket);
20643
+ this.signalConnectedFuture = undefined;
20396
20644
  }
20397
20645
  /**
20398
20646
  * Sets and updates the metadata of the local participant.
@@ -23583,7 +23831,7 @@ class Room extends eventsExports.EventEmitter {
23583
23831
  this.remoteParticipants.forEach((participant, identity) => {
23584
23832
  this.handleParticipantDisconnected(identity, participant);
23585
23833
  });
23586
- this.emit(RoomEvent.Moved, roomMoved.room.name, roomMoved.token);
23834
+ this.emit(RoomEvent.Moved, roomMoved.room.name);
23587
23835
  if (roomMoved.participant) {
23588
23836
  this.handleParticipantUpdates([roomMoved.participant, ...roomMoved.otherParticipants]);
23589
23837
  } else {
@@ -24523,6 +24771,36 @@ function mapArgs(args) {
24523
24771
  });
24524
24772
  }
24525
24773
 
24774
+ // This file was generated from JSON Schema using quicktype, do not modify it directly.
24775
+ // The code generation lives at https://github.com/livekit/attribute-definitions
24776
+ //
24777
+ // To parse this data:
24778
+ //
24779
+ // import { Convert, AgentAttributes, TranscriptionAttributes } from "./file";
24780
+ //
24781
+ // const agentAttributes = Convert.toAgentAttributes(json);
24782
+ // const transcriptionAttributes = Convert.toTranscriptionAttributes(json);
24783
+ // Converts JSON strings to/from your types
24784
+ class Convert {
24785
+ static toAgentAttributes(json) {
24786
+ return JSON.parse(json);
24787
+ }
24788
+ static agentAttributesToJson(value) {
24789
+ return JSON.stringify(value);
24790
+ }
24791
+ static toTranscriptionAttributes(json) {
24792
+ return JSON.parse(json);
24793
+ }
24794
+ static transcriptionAttributesToJson(value) {
24795
+ return JSON.stringify(value);
24796
+ }
24797
+ }
24798
+
24799
+ var attributeTypings = /*#__PURE__*/Object.freeze({
24800
+ __proto__: null,
24801
+ Convert: Convert
24802
+ });
24803
+
24526
24804
  var CheckStatus;
24527
24805
  (function (CheckStatus) {
24528
24806
  CheckStatus[CheckStatus["IDLE"] = 0] = "IDLE";
@@ -25337,5 +25615,5 @@ function isFacingModeValue(item) {
25337
25615
  return item === undefined || allowedValues.includes(item);
25338
25616
  }
25339
25617
 
25340
- export { AudioPresets, BackupCodecPolicy, BaseKeyProvider, CheckStatus, Checker, ConnectionCheck, ConnectionError, ConnectionErrorReason, ConnectionQuality, ConnectionState, CriticalTimers, CryptorError, CryptorErrorReason, CryptorEvent, DataPacket_Kind, DefaultReconnectPolicy, DeviceUnsupportedError, DisconnectReason, EncryptionEvent, EngineEvent, ExternalE2EEKeyProvider, KeyHandlerEvent, KeyProviderEvent, LivekitError, LocalAudioTrack, LocalParticipant, LocalTrack, LocalTrackPublication, LocalTrackRecorder, LocalVideoTrack, LogLevel, LoggerNames, MediaDeviceFailure, _ as Mutex, NegotiationError, Participant, ParticipantEvent, ParticipantInfo_Kind as ParticipantKind, PublishDataError, PublishTrackError, RemoteAudioTrack, RemoteParticipant, RemoteTrack, RemoteTrackPublication, RemoteVideoTrack, Room, RoomEvent, RpcError, ScreenSharePresets, SignalRequestError, SubscriptionError, Track, TrackEvent, TrackInvalidError, TrackPublication, TrackType, UnexpectedConnectionState, UnsupportedServer, VideoPreset, VideoPresets, VideoPresets43, VideoQuality, attachToElement, compareVersions, createAudioAnalyser, createE2EEKey, createKeyMaterialFromBuffer, createKeyMaterialFromString, createLocalAudioTrack, createLocalScreenTracks, createLocalTracks, createLocalVideoTrack, deriveKeys, detachTrack, facingModeFromDeviceLabel, facingModeFromLocalTrack, getBrowser, getEmptyAudioStreamTrack, getEmptyVideoStreamTrack, getLogger, importKey, isAudioTrack, isBackupCodec, isBrowserSupported, isE2EESupported, isInsertableStreamSupported, isLocalParticipant, isLocalTrack, isRemoteParticipant, isRemoteTrack, isScriptTransformSupported, isVideoFrame, isVideoTrack, needsRbspUnescaping, parseRbsp, protocolVersion, ratchet, setLogExtension, setLogLevel, supportsAV1, supportsAdaptiveStream, supportsDynacast, supportsVP9, version, videoCodecs, writeRbsp };
25618
+ export { AudioPresets, BackupCodecPolicy, BaseKeyProvider, CheckStatus, Checker, ConnectionCheck, ConnectionError, ConnectionErrorReason, ConnectionQuality, ConnectionState, CriticalTimers, CryptorError, CryptorErrorReason, CryptorEvent, DataPacket_Kind, DefaultReconnectPolicy, DeviceUnsupportedError, DisconnectReason, EncryptionEvent, EngineEvent, ExternalE2EEKeyProvider, KeyHandlerEvent, KeyProviderEvent, LivekitError, LocalAudioTrack, LocalParticipant, LocalTrack, LocalTrackPublication, LocalTrackRecorder, LocalVideoTrack, LogLevel, LoggerNames, MediaDeviceFailure, _ as Mutex, NegotiationError, Participant, ParticipantEvent, ParticipantInfo_Kind as ParticipantKind, PublishDataError, PublishTrackError, RemoteAudioTrack, RemoteParticipant, RemoteTrack, RemoteTrackPublication, RemoteVideoTrack, Room, RoomEvent, RpcError, ScreenSharePresets, SignalRequestError, SubscriptionError, Track, TrackEvent, TrackInvalidError, TrackPublication, TrackType, UnexpectedConnectionState, UnsupportedServer, VideoPreset, VideoPresets, VideoPresets43, VideoQuality, attachToElement, attributeTypings as attributes, compareVersions, createAudioAnalyser, createE2EEKey, createKeyMaterialFromBuffer, createKeyMaterialFromString, createLocalAudioTrack, createLocalScreenTracks, createLocalTracks, createLocalVideoTrack, deriveKeys, detachTrack, facingModeFromDeviceLabel, facingModeFromLocalTrack, getBrowser, getEmptyAudioStreamTrack, getEmptyVideoStreamTrack, getLogger, importKey, isAudioTrack, isBackupCodec, isBrowserSupported, isE2EESupported, isInsertableStreamSupported, isLocalParticipant, isLocalTrack, isRemoteParticipant, isRemoteTrack, isScriptTransformSupported, isVideoFrame, isVideoTrack, needsRbspUnescaping, parseRbsp, protocolVersion, ratchet, setLogExtension, setLogLevel, supportsAV1, supportsAdaptiveStream, supportsDynacast, supportsVP9, version, videoCodecs, writeRbsp };
25341
25619
  //# sourceMappingURL=livekit-client.esm.mjs.map