livekit-client 2.1.2 → 2.1.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.
@@ -10499,10 +10499,10 @@ function getOSVersion(ua) {
10499
10499
  return ua.includes('mac os') ? getMatch(/\(.+?(\d+_\d+(:?_\d+)?)/, ua, 1).replace(/_/g, '.') : undefined;
10500
10500
  }
10501
10501
 
10502
- var version$1 = "2.1.2";
10502
+ var version$1 = "2.1.3";
10503
10503
 
10504
10504
  const version = version$1;
10505
- const protocolVersion = 12;
10505
+ const protocolVersion = 13;
10506
10506
 
10507
10507
  /**
10508
10508
  * Timers that can be overridden with platform specific implementations
@@ -12933,8 +12933,9 @@ class SignalClient {
12933
12933
  return this.sendRequest({
12934
12934
  case: 'leave',
12935
12935
  value: new LeaveRequest({
12936
- canReconnect: false,
12937
- reason: DisconnectReason.CLIENT_INITIATED
12936
+ reason: DisconnectReason.CLIENT_INITIATED,
12937
+ // server doesn't process this field, keeping it here to indicate the intent of a full disconnect
12938
+ action: LeaveRequest_Action.DISCONNECT
12938
12939
  })
12939
12940
  });
12940
12941
  }
@@ -16223,7 +16224,7 @@ class RTCEngine extends eventsExports.EventEmitter {
16223
16224
  }
16224
16225
  configure(joinResponse) {
16225
16226
  return __awaiter(this, void 0, void 0, function* () {
16226
- var _a;
16227
+ var _a, _b;
16227
16228
  // already configured
16228
16229
  if (this.pcManager && this.pcManager.currentState !== PCTransportState.NEW) {
16229
16230
  return;
@@ -16268,7 +16269,9 @@ class RTCEngine extends eventsExports.EventEmitter {
16268
16269
  this.pcManager.onTrack = ev => {
16269
16270
  this.emit(EngineEvent.MediaTrackAdded, ev.track, ev.streams[0], ev.receiver);
16270
16271
  };
16271
- this.createDataChannels();
16272
+ if (!supportOptionalDatachannel((_b = joinResponse.serverInfo) === null || _b === void 0 ? void 0 : _b.protocol)) {
16273
+ this.createDataChannels();
16274
+ }
16272
16275
  });
16273
16276
  }
16274
16277
  setupSignalClientCallbacks() {
@@ -16335,17 +16338,27 @@ class RTCEngine extends eventsExports.EventEmitter {
16335
16338
  this.handleDisconnect('signal', ReconnectReason.RR_SIGNAL_DISCONNECTED);
16336
16339
  };
16337
16340
  this.client.onLeave = leave => {
16338
- if (leave === null || leave === void 0 ? void 0 : leave.canReconnect) {
16339
- this.fullReconnectOnNext = true;
16340
- // reconnect immediately instead of waiting for next attempt
16341
- this.handleDisconnect(leaveReconnect);
16342
- } else {
16343
- this.emit(EngineEvent.Disconnected, leave === null || leave === void 0 ? void 0 : leave.reason);
16344
- this.close();
16345
- }
16346
16341
  this.log.debug('client leave request', Object.assign(Object.assign({}, this.logContext), {
16347
16342
  reason: leave === null || leave === void 0 ? void 0 : leave.reason
16348
16343
  }));
16344
+ if (leave.regions && this.regionUrlProvider) {
16345
+ this.log.debug('updating regions', this.logContext);
16346
+ this.regionUrlProvider.setServerReportedRegions(leave.regions);
16347
+ }
16348
+ switch (leave.action) {
16349
+ case LeaveRequest_Action.DISCONNECT:
16350
+ this.emit(EngineEvent.Disconnected, leave === null || leave === void 0 ? void 0 : leave.reason);
16351
+ this.close();
16352
+ break;
16353
+ case LeaveRequest_Action.RECONNECT:
16354
+ this.fullReconnectOnNext = true;
16355
+ // reconnect immediately instead of waiting for next attempt
16356
+ this.handleDisconnect(leaveReconnect);
16357
+ break;
16358
+ case LeaveRequest_Action.RESUME:
16359
+ // reconnect immediately instead of waiting for next attempt
16360
+ this.handleDisconnect(leaveReconnect);
16361
+ }
16349
16362
  };
16350
16363
  }
16351
16364
  makeRTCConfiguration(serverResponse) {
@@ -16729,7 +16742,15 @@ class RTCEngine extends eventsExports.EventEmitter {
16729
16742
  if (!transport) {
16730
16743
  throw new ConnectionError("".concat(transportName, " connection not set"));
16731
16744
  }
16732
- if (!subscriber && !_this2.pcManager.publisher.isICEConnected && _this2.pcManager.publisher.getICEConnectionState() !== 'checking') {
16745
+ let needNegotiation = false;
16746
+ if (!subscriber && !_this2.dataChannelForKind(kind, subscriber)) {
16747
+ _this2.createDataChannels();
16748
+ needNegotiation = true;
16749
+ }
16750
+ if (!needNegotiation && !subscriber && !_this2.pcManager.publisher.isICEConnected && _this2.pcManager.publisher.getICEConnectionState() !== 'checking') {
16751
+ needNegotiation = true;
16752
+ }
16753
+ if (needNegotiation) {
16733
16754
  // start negotiation
16734
16755
  _this2.negotiate();
16735
16756
  }
@@ -16782,6 +16803,10 @@ class RTCEngine extends eventsExports.EventEmitter {
16782
16803
  return;
16783
16804
  }
16784
16805
  this.pcManager.requirePublisher();
16806
+ // don't negotiate without any transceivers or data channel, it will generate sdp without ice frag then negotiate failed
16807
+ if (this.pcManager.publisher.getTransceivers().length == 0 && !this.lossyDC && !this.reliableDC) {
16808
+ this.createDataChannels();
16809
+ }
16785
16810
  const abortController = new AbortController();
16786
16811
  const handleClosed = () => {
16787
16812
  abortController.abort();
@@ -16922,6 +16947,9 @@ class RTCEngine extends eventsExports.EventEmitter {
16922
16947
  }
16923
16948
  }
16924
16949
  class SignalReconnectError extends Error {}
16950
+ function supportOptionalDatachannel(protocol) {
16951
+ return protocol !== undefined && protocol > 13;
16952
+ }
16925
16953
 
16926
16954
  class RegionUrlProvider {
16927
16955
  constructor(url, token) {
@@ -16980,6 +17008,10 @@ class RegionUrlProvider {
16980
17008
  }
16981
17009
  });
16982
17010
  }
17011
+ setServerReportedRegions(regions) {
17012
+ this.regionSettings = regions;
17013
+ this.lastUpdateAt = Date.now();
17014
+ }
16983
17015
  }
16984
17016
  function getCloudConfigUrl(serverUrl) {
16985
17017
  return "".concat(serverUrl.protocol.replace('ws', 'http'), "//").concat(serverUrl.host, "/settings");
@@ -17048,12 +17080,21 @@ class RemoteTrack extends Track {
17048
17080
  }
17049
17081
  registerTimeSyncUpdate() {
17050
17082
  const loop = () => {
17051
- var _a, _b;
17083
+ var _a;
17052
17084
  this.timeSyncHandle = requestAnimationFrame(() => loop());
17053
- const newTime = (_b = (_a = this.receiver) === null || _a === void 0 ? void 0 : _a.getSynchronizationSources()[0]) === null || _b === void 0 ? void 0 : _b.rtpTimestamp;
17054
- if (newTime && this.rtpTimestamp !== newTime) {
17055
- this.emit(TrackEvent.TimeSyncUpdate, newTime);
17056
- this.rtpTimestamp = newTime;
17085
+ const sources = (_a = this.receiver) === null || _a === void 0 ? void 0 : _a.getSynchronizationSources()[0];
17086
+ if (sources) {
17087
+ const {
17088
+ timestamp,
17089
+ rtpTimestamp
17090
+ } = sources;
17091
+ if (rtpTimestamp && this.rtpTimestamp !== rtpTimestamp) {
17092
+ this.emit(TrackEvent.TimeSyncUpdate, {
17093
+ timestamp,
17094
+ rtpTimestamp
17095
+ });
17096
+ this.rtpTimestamp = rtpTimestamp;
17097
+ }
17057
17098
  }
17058
17099
  };
17059
17100
  loop();
@@ -20569,7 +20610,7 @@ class Room extends eventsExports.EventEmitter {
20569
20610
  if (onLeave) {
20570
20611
  onLeave(new LeaveRequest({
20571
20612
  reason: DisconnectReason.CLIENT_INITIATED,
20572
- canReconnect: true
20613
+ action: LeaveRequest_Action.RECONNECT
20573
20614
  }));
20574
20615
  }
20575
20616
  });