@vkontakte/calls-sdk 2.8.13-dev.ab19d582.0 → 2.8.13-dev.f163e503.0

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.
package/calls-sdk.esm.js CHANGED
@@ -1,6 +1,6 @@
1
1
  /*!
2
- * @vkontakte/calls-sdk v2.8.13-dev.ab19d582.0
3
- * Wed, 09 Sep 2026 14:22:53 GMT
2
+ * @vkontakte/calls-sdk v2.8.13-dev.f163e503.0
3
+ * Thu, 17 Sep 2026 13:03:47 GMT
4
4
  * https://calls-sdk.cdn-vk.ru/doc/latest/index.html
5
5
  */
6
6
 
@@ -2152,10 +2152,13 @@ var yn = vn.getInstance(), M = class e {
2152
2152
  return "ok.calls.sdk.js";
2153
2153
  }
2154
2154
  static get appVersion() {
2155
+ return e._params.appVersion;
2156
+ }
2157
+ static get apiClientVersion() {
2155
2158
  return 1.1;
2156
2159
  }
2157
2160
  static get sdkVersion() {
2158
- return "2.8.13-dev.ab19d582.0";
2161
+ return "2.8.13-dev.f163e503.0";
2159
2162
  }
2160
2163
  static get debug() {
2161
2164
  return e._params.debug;
@@ -2578,6 +2581,7 @@ var yn = vn.getInstance(), M = class e {
2578
2581
  movieShare: e._params.movieShare,
2579
2582
  clientType: e._params.clientType,
2580
2583
  clientStatsPlatform: e._params.clientStatsPlatform,
2584
+ appVersion: e._params.appVersion,
2581
2585
  consumerScreenDataChannelPacketSize: e._params.consumerScreenDataChannelPacketSize,
2582
2586
  switchVideoAtBadNetwork: e._params.switchVideoAtBadNetwork,
2583
2587
  simulcast: e._params.simulcast,
@@ -2593,6 +2597,7 @@ var yn = vn.getInstance(), M = class e {
2593
2597
  h(M, "_params", {
2594
2598
  platform: "WEB",
2595
2599
  clientStatsPlatform: "",
2600
+ appVersion: "0.0.0",
2596
2601
  clientType: "PORTAL",
2597
2602
  externalUserType: "",
2598
2603
  device: "browser",
@@ -3065,6 +3070,10 @@ var xn;
3065
3070
  P("onPeerRegistered", e, t);
3066
3071
  }
3067
3072
  e.onPeerRegistered = ot;
3073
+ function st(e, t) {
3074
+ P("onNonFatalError", e, t);
3075
+ }
3076
+ e.onNonFatalError = st;
3068
3077
  })(xn || (xn = {}));
3069
3078
  var L = xn, Sn = /* @__PURE__ */ function(e) {
3070
3079
  return e.DEBUG = "DEBUG", e.LOG = "LOG", e.WARN = "WARN", e.ERROR = "ERROR", e;
@@ -3581,7 +3590,7 @@ var Rn = 0, zn = 1, Bn = 2, Vn = 3, Hn = 4, Un = 5, Wn = 6, Gn = 7, Kn = 0, qn =
3581
3590
  };
3582
3591
  }
3583
3592
  }, H = /* @__PURE__ */ function(e) {
3584
- return e.CALL_INIT = "call_init", e.CALL_START = "call_start", e.CALL_ACCEPTED_OUTGOING = "call_accepted_outgoing", e.CALL_ACCEPTED_INCOMING = "call_accepted_incoming", e.FIRST_MEDIA_SENT = "first_media_sent", e.CALL_FINISH = "call_finish", e.CODEC_USAGE = "codec_usage", e.SIGNALING_CONNECTED = "signaling_connected", e.SCREENSHARE_FIRST_FRAME = "screen_share_first_frame", e.FIRST_MEDIA_RECEIVED = "first_media_received", e.CALL_DECLINED_OR_HANGED_LOCALLY = "CallDeclinedOrHangedLocally", e.USER_FEEDBACK_RECEIVED = "UserFeedbackReceived", e.SIGNALING_PING_SUMMARY = "signaling_ping_summary", e.SIGNALING_COMMAND_SUMMARY = "signaling_command_summary", e.WEBSOCKET_CONNECTED = "websocket_connected", e.WEBSOCKET_RECONNECTED = "websocket_reconnected", e.WEBSOCKET_FAILED_PINGS = "websocket_failed_pings", e.WEBSOCKET_FAILED_EXCEPTION = "websocket_failed_exception", e.WEBSOCKET_TIMEOUT = "websocket_timeout", e.WEBSOCKET_RESTART = "websocket_restart", e.WEBTRANSPORT_CONNECTED = "webtransport_connected", e.WEBTRANSPORT_RECONNECTED = "webtransport_reconnected", e.WEBTRANSPORT_FAILED_PINGS = "webtransport_failed_pings", e.WEBTRANSPORT_FAILED_EXCEPTION = "webtransport_failed_exception", e.WEBTRANSPORT_TIMEOUT = "webtransport_timeout", e.WEBTRANSPORT_RESTART = "webtransport_restart", e;
3593
+ return e.CALL_INIT = "call_init", e.CALL_START = "call_start", e.CALL_ACCEPTED_OUTGOING = "call_accepted_outgoing", e.CALL_ACCEPTED_INCOMING = "call_accepted_incoming", e.FIRST_MEDIA_SENT = "first_media_sent", e.CALL_FINISH = "call_finish", e.CODEC_USAGE = "codec_usage", e.SIGNALING_CONNECTED = "signaling_connected", e.SCREENSHARE_FIRST_FRAME = "screen_share_first_frame", e.FIRST_MEDIA_RECEIVED = "first_media_received", e.CALL_DECLINED_OR_HANGED_LOCALLY = "CallDeclinedOrHangedLocally", e.USER_FEEDBACK_RECEIVED = "UserFeedbackReceived", e.SIGNALING_PING_SUMMARY = "signaling_ping_summary", e.SIGNALING_COMMAND_SUMMARY = "signaling_command_summary", e.SDP_CREATE_OFFER = "sdp_create_offer", e.SDP_CREATE_ANSWER = "sdp_create_answer", e.SDP_SET_LOCAL_OFFER = "sdp_set_local_offer", e.SDP_SET_LOCAL_PRANSWER = "sdp_set_local_pranswer", e.SDP_SET_LOCAL_ANSWER = "sdp_set_local_answer", e.SDP_SET_LOCAL_ROLLBACK = "sdp_set_local_rollback", e.SDP_SET_REMOTE_OFFER = "sdp_set_remote_offer", e.SDP_SET_REMOTE_PRANSWER = "sdp_set_remote_pranswer", e.SDP_SET_REMOTE_ANSWER = "sdp_set_remote_answer", e.SDP_SET_REMOTE_ROLLBACK = "sdp_set_remote_rollback", e.SDP_GENERATED = "sdp_generated", e.SDP_RECEIVED = "sdp_received", e.WEBSOCKET_CONNECTED = "websocket_connected", e.WEBSOCKET_RECONNECTED = "websocket_reconnected", e.WEBSOCKET_FAILED_PINGS = "websocket_failed_pings", e.WEBSOCKET_FAILED_EXCEPTION = "websocket_failed_exception", e.WEBSOCKET_TIMEOUT = "websocket_timeout", e.WEBSOCKET_RESTART = "websocket_restart", e.WEBTRANSPORT_CONNECTED = "webtransport_connected", e.WEBTRANSPORT_RECONNECTED = "webtransport_reconnected", e.WEBTRANSPORT_FAILED_PINGS = "webtransport_failed_pings", e.WEBTRANSPORT_FAILED_EXCEPTION = "webtransport_failed_exception", e.WEBTRANSPORT_TIMEOUT = "webtransport_timeout", e.WEBTRANSPORT_RESTART = "webtransport_restart", e;
3585
3594
  }(H || {}), er = 1e3;
3586
3595
  function U(e, t, n = 0) {
3587
3596
  return t in e && e[t] ? e[t] : n;
@@ -3819,14 +3828,136 @@ function kr() {
3819
3828
  };
3820
3829
  }
3821
3830
  //#endregion
3831
+ //#region src/classes/stat/SdpStats.ts
3832
+ var Ar = {
3833
+ offer: H.SDP_CREATE_OFFER,
3834
+ answer: H.SDP_CREATE_ANSWER
3835
+ }, jr = {
3836
+ offer: H.SDP_SET_LOCAL_OFFER,
3837
+ pranswer: H.SDP_SET_LOCAL_PRANSWER,
3838
+ answer: H.SDP_SET_LOCAL_ANSWER,
3839
+ rollback: H.SDP_SET_LOCAL_ROLLBACK
3840
+ }, Mr = {
3841
+ offer: H.SDP_SET_REMOTE_OFFER,
3842
+ pranswer: H.SDP_SET_REMOTE_PRANSWER,
3843
+ answer: H.SDP_SET_REMOTE_ANSWER,
3844
+ rollback: H.SDP_SET_REMOTE_ROLLBACK
3845
+ }, Nr = {
3846
+ local_address: null,
3847
+ remote_address: null,
3848
+ transport: null
3849
+ }, Pr = class {
3850
+ constructor(e) {
3851
+ h(this, "_statAggregator", void 0), h(this, "_pc", null), h(this, "_gatheringStartedAt", 0), h(this, "_remoteSdpReceivedAt", 0), h(this, "_handleGatheringStateChange", () => {
3852
+ this._pc?.iceGatheringState === "gathering" && (this._gatheringStartedAt = Date.now());
3853
+ }), this._statAggregator = e;
3854
+ }
3855
+ observe(e) {
3856
+ this.stop(), this._pc = e, this._gatheringStartedAt = Date.now(), this._remoteSdpReceivedAt = 0, e.addEventListener("icegatheringstatechange", this._handleGatheringStateChange);
3857
+ }
3858
+ stop() {
3859
+ this._pc?.removeEventListener("icegatheringstatechange", this._handleGatheringStateChange), this._pc = null;
3860
+ }
3861
+ logSdpGenerated(e) {
3862
+ this._log({
3863
+ name: H.SDP_GENERATED,
3864
+ value: 0,
3865
+ string_value: e,
3866
+ ...Nr
3867
+ });
3868
+ }
3869
+ logCandidateGenerated(e) {
3870
+ let t = Ir(e.candidate);
3871
+ t && this._log({
3872
+ name: H.SDP_GENERATED,
3873
+ value: Math.max(0, Date.now() - this._gatheringStartedAt),
3874
+ string_value: t.type,
3875
+ local_address: t.address,
3876
+ remote_address: null,
3877
+ transport: t.protocol
3878
+ });
3879
+ }
3880
+ logSdpReceived(e) {
3881
+ this._remoteSdpReceivedAt = Date.now(), this._log({
3882
+ name: H.SDP_RECEIVED,
3883
+ value: 0,
3884
+ string_value: e,
3885
+ ...Nr
3886
+ });
3887
+ }
3888
+ logCandidateReceived(e) {
3889
+ let t = Ir(e.candidate);
3890
+ t && this._log({
3891
+ name: H.SDP_RECEIVED,
3892
+ value: this._remoteSdpReceivedAt > 0 ? Math.max(0, Date.now() - this._remoteSdpReceivedAt) : 0,
3893
+ string_value: t.type,
3894
+ local_address: null,
3895
+ remote_address: t.address,
3896
+ transport: t.protocol
3897
+ });
3898
+ }
3899
+ logCreateFailed(e, t) {
3900
+ let n = Ar[e];
3901
+ n && this._logFailure(n, t, { remote: e === "answer" ? this._pc?.remoteDescription : void 0 });
3902
+ }
3903
+ logSetLocalFailed(e, t) {
3904
+ this._logFailure(jr[e.type], t, {
3905
+ local: e,
3906
+ remote: this._pc?.remoteDescription
3907
+ });
3908
+ }
3909
+ logSetRemoteFailed(e, t) {
3910
+ this._logFailure(Mr[e.type], t, {
3911
+ local: this._pc?.localDescription,
3912
+ remote: e
3913
+ });
3914
+ }
3915
+ destroy() {
3916
+ this.stop();
3917
+ }
3918
+ _logFailure(e, t, n) {
3919
+ this._log({
3920
+ name: e,
3921
+ value: 0,
3922
+ string_value: JSON.stringify({
3923
+ error: t instanceof Error ? t.message : String(t),
3924
+ local: Fr(n.local),
3925
+ remote: Fr(n.remote)
3926
+ }),
3927
+ ...Nr
3928
+ });
3929
+ }
3930
+ _log(e) {
3931
+ this._statAggregator?.logEventualStat(e);
3932
+ }
3933
+ };
3934
+ function Fr(e) {
3935
+ return e ? {
3936
+ type: e.type,
3937
+ sdp: e.sdp
3938
+ } : void 0;
3939
+ }
3940
+ function Ir(e) {
3941
+ let t = e?.split(" ") ?? [], n = t.indexOf("typ"), r = t[2]?.toLowerCase(), i = t[4], a = n === -1 ? void 0 : t[n + 1];
3942
+ return r === void 0 || i === void 0 || a === void 0 || !zr(i) ? null : {
3943
+ protocol: r,
3944
+ address: i,
3945
+ type: a
3946
+ };
3947
+ }
3948
+ var Lr = /^\d{1,3}(\.\d{1,3}){3}$/, Rr = /^[0-9a-f:]+$/i;
3949
+ function zr(e) {
3950
+ return Lr.test(e) || e.includes(":") && Rr.test(e);
3951
+ }
3952
+ //#endregion
3822
3953
  //#region src/classes/stat/FirstMediaSentProbe.ts
3823
- var Ar = 200;
3824
- function jr(e) {
3954
+ var Br = 200;
3955
+ function Vr(e) {
3825
3956
  for (let t of e.values()) if (t.type === "outbound-rtp" && (t.packetsSent ?? 0) > 0) return !0;
3826
3957
  return !1;
3827
3958
  }
3828
- var Mr = class {
3829
- constructor(e, t, n = Ar) {
3959
+ var Hr = class {
3960
+ constructor(e, t, n = Br) {
3830
3961
  h(this, "_peerConnection", void 0), h(this, "_onFirstMediaSent", void 0), h(this, "_pollIntervalMs", void 0), h(this, "_timer", null), h(this, "_state", "idle"), this._peerConnection = e, this._onFirstMediaSent = t, this._pollIntervalMs = n;
3831
3962
  }
3832
3963
  start() {
@@ -3849,7 +3980,7 @@ var Mr = class {
3849
3980
  try {
3850
3981
  let e = await this._getStatsReports();
3851
3982
  if (this._state !== "polling") return;
3852
- if (e.some(jr)) {
3983
+ if (e.some(Vr)) {
3853
3984
  this._state = "stopped", this._onFirstMediaSent();
3854
3985
  return;
3855
3986
  }
@@ -3862,7 +3993,7 @@ var Mr = class {
3862
3993
  this._timer = null, this._poll();
3863
3994
  }, this._pollIntervalMs));
3864
3995
  }
3865
- }, Nr = class extends b {
3996
+ }, Ur = class extends b {
3866
3997
  constructor(e, t, n = null) {
3867
3998
  super(), h(this, "_signaling", void 0), h(this, "_mediaSource", void 0), h(this, "_state", q.IDLE), h(this, "_pc", null), h(this, "_onFirstMediaSent", void 0), h(this, "_firstMediaSentProbe", null), h(this, "_firstMediaSentProbeStopped", !1), this._signaling = e, this._mediaSource = t, this._onFirstMediaSent = n;
3868
3999
  }
@@ -3873,12 +4004,12 @@ var Mr = class {
3873
4004
  this._firstMediaSentProbeStopped = !0, this._disposeFirstMediaSentProbe();
3874
4005
  }
3875
4006
  _startFirstMediaSentProbe() {
3876
- this._disposeFirstMediaSentProbe(), !(!this._pc || !this._onFirstMediaSent || this._firstMediaSentProbeStopped) && (this._firstMediaSentProbe = new Mr(this._pc, this._onFirstMediaSent), this._firstMediaSentProbe.start());
4007
+ this._disposeFirstMediaSentProbe(), !(!this._pc || !this._onFirstMediaSent || this._firstMediaSentProbeStopped) && (this._firstMediaSentProbe = new Hr(this._pc, this._onFirstMediaSent), this._firstMediaSentProbe.start());
3877
4008
  }
3878
4009
  _disposeFirstMediaSentProbe() {
3879
4010
  this._firstMediaSentProbe?.destroy(), this._firstMediaSentProbe = null;
3880
4011
  }
3881
- }, Pr = class {
4012
+ }, Wr = class {
3882
4013
  constructor(e, t = null) {
3883
4014
  h(this, "weightUp", void 0), h(this, "weightDown", void 0), h(this, "value", NaN), this.weightUp = e, this.weightDown = t ?? e;
3884
4015
  }
@@ -3896,7 +4027,7 @@ var Mr = class {
3896
4027
  getValue() {
3897
4028
  return this.value;
3898
4029
  }
3899
- }, Fr = .25, Ir = .35, Lr = 85, Rr = .1, zr = 1.5, Br = .1, Vr = 1, Hr = .6, Ur = .3, Wr = class extends b {
4030
+ }, Gr = .25, Kr = .35, qr = 85, Jr = .1, Yr = 1.5, Xr = .1, Zr = 1, Qr = .6, $r = .3, ei = class extends b {
3900
4031
  constructor(e, t = R) {
3901
4032
  super(), h(this, "_signaling", void 0), h(this, "_localNetworkStat", void 0), h(this, "_remoteNetworkStat", void 0), h(this, "_lastNetworkStat", void 0), h(this, "_networkLimits", {
3902
4033
  badNet: {
@@ -3908,8 +4039,8 @@ var Mr = class {
3908
4039
  rtt: 600
3909
4040
  }
3910
4041
  }), h(this, "_lastStatSentTimestamp", 0), h(this, "_currentState", "good"), h(this, "_debug", void 0), this._debug = t, this._signaling = e, this._localNetworkStat = {
3911
- rtt: new Pr(Fr, Fr),
3912
- loss: new Pr(Ir, Ir),
4042
+ rtt: new Wr(Gr, Gr),
4043
+ loss: new Wr(Kr, Kr),
3913
4044
  bitrate: 0
3914
4045
  }, this._remoteNetworkStat = {
3915
4046
  rtt: 0,
@@ -3924,20 +4055,20 @@ var Mr = class {
3924
4055
  _calcRttRating(e) {
3925
4056
  let t = typeof e == "number" ? e : e.getValue(), n = 1;
3926
4057
  if (isNaN(t)) return n;
3927
- let r = Math.round((t - this._networkLimits.goodNet.rtt) / Lr);
3928
- for (let e = 0; e < r; e++) n *= 1 - Rr;
4058
+ let r = Math.round((t - this._networkLimits.goodNet.rtt) / qr);
4059
+ for (let e = 0; e < r; e++) n *= 1 - Jr;
3929
4060
  return n;
3930
4061
  }
3931
4062
  _calcLossRating(e) {
3932
4063
  let t = typeof e == "number" ? e : e.getValue(), n = 1;
3933
4064
  if (isNaN(t)) return n;
3934
- let r = Math.round((t - this._networkLimits.goodNet.loss) / zr);
3935
- for (let e = 0; e < r; e++) n *= 1 - Br;
4065
+ let r = Math.round((t - this._networkLimits.goodNet.loss) / Yr);
4066
+ for (let e = 0; e < r; e++) n *= 1 - Xr;
3936
4067
  return n;
3937
4068
  }
3938
4069
  _calcBitrateRating(e, t) {
3939
4070
  if (!e || !t) return 1;
3940
- let n = 1 - (1 - Math.min(e, t) / Math.max(e, t)) * Vr;
4071
+ let n = 1 - (1 - Math.min(e, t) / Math.max(e, t)) * Zr;
3941
4072
  return Math.min(n, 1);
3942
4073
  }
3943
4074
  _calcUDPRating({ rtt: e, loss: t }) {
@@ -3947,7 +4078,7 @@ var Mr = class {
3947
4078
  return n ? this._calcBitrateRating(e.bitrate, t.bitrate) : this._calcUDPRating(e) * this._calcUDPRating(t);
3948
4079
  }
3949
4080
  _getNetworkState(e) {
3950
- return isNaN(e) || e >= Hr ? "good" : e >= Ur ? "medium" : "bad";
4081
+ return isNaN(e) || e >= Qr ? "good" : e >= $r ? "medium" : "bad";
3951
4082
  }
3952
4083
  updateSettings(e) {
3953
4084
  Object.assign(this._networkLimits.badNet, e?.badNet || {}), Object.assign(this._networkLimits.goodNet, e?.goodNet || {});
@@ -3971,7 +4102,7 @@ var Mr = class {
3971
4102
  let { rtt: t, loss: n, bitrate: r } = e || {};
3972
4103
  this._remoteNetworkStat.rtt = t || 0, this._remoteNetworkStat.loss = n || 0, this._remoteNetworkStat.bitrate = r || 0;
3973
4104
  }
3974
- }, Gr = 30 * 1e3, Kr = class e extends Nr {
4105
+ }, ti = 30 * 1e3, ni = class e extends Ur {
3975
4106
  constructor(e, t, n, r, i, a = R, o = null, s = null, c = null, l = null) {
3976
4107
  super(n, r, l), h(this, "_participantId", void 0), h(this, "_isMaster", void 0), h(this, "_remoteSDP", {}), h(this, "_remoteCandidates", {}), h(this, "_lastRemoteSDP", null), h(this, "_animojiDataChannel", null), h(this, "_animojiReceiver", null), h(this, "_animojiSender", null), h(this, "_remoteAnimojiVersion", 1), h(this, "_isOpen", !1), h(this, "_remotePeerId", null), h(this, "_statInterval", null), h(this, "_settingsInterval", null), h(this, "_failedOnCreate", null), h(this, "_remoteStream", null), h(this, "_iceRestartTimeout", null), h(this, "_reconnectionTimeout", null), h(this, "_reconnectionPrevented", !1), h(this, "_remoteHold", !1), h(this, "_lastStat", null), h(this, "_fingerprint", null), h(this, "_neverConnected", !0), h(this, "_serverSettings", void 0), h(this, "_prevConsumerSettings", {}), h(this, "_networkLimitsForVideo", {
3977
4108
  bad: {
@@ -3986,7 +4117,7 @@ var Mr = class {
3986
4117
  worst: 320,
3987
4118
  bad: 640,
3988
4119
  good: 1280
3989
- }), h(this, "_lastVideoMaxDimension", this._videoMaxDimensionsForNet.good), h(this, "_lastBadConnection", 0), h(this, "_perfStatReporter", void 0), h(this, "_directStatReporter", void 0), h(this, "_debug", void 0), h(this, "_logger", void 0), h(this, "_statAggregator", void 0), h(this, "_codecStatsAggregator", void 0), this._participantId = e, this._isMaster = t, this._serverSettings = i, this._debug = a, this._logger = o, this._statAggregator = s, this._codecStatsAggregator = c, this._perfStatReporter = new pa(this, n, this._statAggregator, !0, this._debug), this._directStatReporter = new Wr(n, this._debug), this.subscribe(this._signaling, G.NOTIFICATION, this._onSignalingNotification.bind(this)), this.subscribe(this._mediaSource, qt.TRACK_REPLACED, this._onReplacedTrack.bind(this)), this.subscribe(this._mediaSource, qt.SOURCE_CHANGED, this._applySettings.bind(this)), this.subscribe(this._directStatReporter, X.NETWORK_STATUS, this._onNetworkStatus.bind(this));
4120
+ }), h(this, "_lastVideoMaxDimension", this._videoMaxDimensionsForNet.good), h(this, "_lastBadConnection", 0), h(this, "_perfStatReporter", void 0), h(this, "_directStatReporter", void 0), h(this, "_sdpStats", void 0), h(this, "_debug", void 0), h(this, "_logger", void 0), h(this, "_statAggregator", void 0), h(this, "_codecStatsAggregator", void 0), this._participantId = e, this._isMaster = t, this._serverSettings = i, this._debug = a, this._logger = o, this._statAggregator = s, this._codecStatsAggregator = c, this._perfStatReporter = new Ca(this, n, this._statAggregator, !0, this._debug), this._directStatReporter = new ei(n, this._debug), this._sdpStats = new Pr(this._statAggregator), this.subscribe(this._signaling, G.NOTIFICATION, this._onSignalingNotification.bind(this)), this.subscribe(this._mediaSource, qt.TRACK_REPLACED, this._onReplacedTrack.bind(this)), this.subscribe(this._mediaSource, qt.SOURCE_CHANGED, this._applySettings.bind(this)), this.subscribe(this._directStatReporter, X.NETWORK_STATUS, this._onNetworkStatus.bind(this));
3990
4121
  try {
3991
4122
  this._pc = this._createPeerConnection();
3992
4123
  } catch (e) {
@@ -4090,12 +4221,12 @@ var Mr = class {
4090
4221
  iceServers: M.iceServers,
4091
4222
  iceTransportPolicy: M.forceRelayPolicy ? "relay" : "all"
4092
4223
  });
4093
- return e.onicecandidate = this._handleIceCandidate.bind(this), e.ontrack = this._onAddTrack.bind(this), e.oniceconnectionstatechange = this._onIceConnectionStateChange.bind(this), e.onconnectionstatechange = this._onConnectionStateChange.bind(this), e.onsignalingstatechange = this._onSignalingStateChange.bind(this), this._prevConsumerSettings = {}, M.vmoji && this._createDataChannel(e, Sr.animoji, (e) => {
4224
+ return e.onicecandidate = this._handleIceCandidate.bind(this), e.ontrack = this._onAddTrack.bind(this), e.oniceconnectionstatechange = this._onIceConnectionStateChange.bind(this), e.onconnectionstatechange = this._onConnectionStateChange.bind(this), e.onsignalingstatechange = this._onSignalingStateChange.bind(this), this._sdpStats.observe(e), this._prevConsumerSettings = {}, M.vmoji && this._createDataChannel(e, Sr.animoji, (e) => {
4094
4225
  this._animojiDataChannel = e, this._animojiDataChannel.binaryType = "arraybuffer", this._animojiReceiver?.setDataChannel(this._animojiDataChannel), this._animojiSender?.setDataChannel(this._animojiDataChannel);
4095
4226
  }), e;
4096
4227
  }
4097
4228
  _disposePeerConnection() {
4098
- if (this._disposeFirstMediaSentProbe(), this._lastStat = null, this._remoteStream) {
4229
+ if (this._disposeFirstMediaSentProbe(), this._sdpStats.stop(), this._lastStat = null, this._remoteStream) {
4099
4230
  let e = this._remoteStream;
4100
4231
  e.getTracks().forEach((t) => {
4101
4232
  t.stop(), this._triggerEvent(X.REMOTE_TRACK_REMOVED, e, t);
@@ -4133,7 +4264,7 @@ var Mr = class {
4133
4264
  }
4134
4265
  _handleTransmittedData(e) {
4135
4266
  let t = e.data, n = j.getPeerIdString(e.peerId);
4136
- j.composeMessageId(e) === this._participantId && (t.candidate && t.candidate.candidate ? this._addIceCandidate(n, t.candidate).catch(this.close.bind(this)) : t.sdp && (this._remoteAnimojiVersion = t.animojiVersion || 1, this._setRemoteDescription(n, t.sdp).catch(this.close.bind(this))));
4267
+ j.composeMessageId(e) === this._participantId && (t.candidate && t.candidate.candidate ? (this._sdpStats.logCandidateReceived(t.candidate), this._addIceCandidate(n, t.candidate).catch(this.close.bind(this))) : t.sdp && (this._sdpStats.logSdpReceived(t.sdp.type), this._remoteAnimojiVersion = t.animojiVersion || 1, this._setRemoteDescription(n, t.sdp).catch(this.close.bind(this))));
4137
4268
  }
4138
4269
  async _addIceCandidate(e, t) {
4139
4270
  if (this._isOpen && (!this._remotePeerId || this._remotePeerId === e) && this._pc && this._pc.remoteDescription) {
@@ -4175,7 +4306,7 @@ var Mr = class {
4175
4306
  try {
4176
4307
  await this._pc.setRemoteDescription(n), await this._setRemoteCandidates(t), this._processAnimojiProtocolVersion(this._remoteAnimojiVersion);
4177
4308
  } catch (e) {
4178
- throw this._logger?.log(C.ERROR, "setRemoteDescription-direct"), this._debug.error("Unable to set remote description", e, {
4309
+ throw this._logger?.log(C.ERROR, "setRemoteDescription-direct"), this._sdpStats.logSetRemoteFailed(n, e), this._debug.error("Unable to set remote description", e, {
4179
4310
  participantId: this._participantId,
4180
4311
  sdp: n
4181
4312
  }), e;
@@ -4198,7 +4329,7 @@ var Mr = class {
4198
4329
  this._signaling.ready && (e.candidate ? (this._debug.debug("Local ice candidate", {
4199
4330
  participantId: this._participantId,
4200
4331
  candidate: e.candidate
4201
- }), await this._signaling.sendCandidate(this._participantId, e.candidate)) : M.forwardEmptyIceCandidate && (this._debug.debug("ICE gathering complete, forwarding empty candidate", { participantId: this._participantId }), await this._signaling.sendCandidate(this._participantId, { candidate: "" })));
4332
+ }), this._sdpStats.logCandidateGenerated(e.candidate), await this._signaling.sendCandidate(this._participantId, e.candidate)) : M.forwardEmptyIceCandidate && (this._debug.debug("ICE gathering complete, forwarding empty candidate", { participantId: this._participantId }), await this._signaling.sendCandidate(this._participantId, { candidate: "" })));
4202
4333
  }
4203
4334
  _onSignalingStateChange() {
4204
4335
  this._debug.debug(`DirectTransport: Signaling state changed to ${this._pc?.signalingState}`, { participantId: this._participantId });
@@ -4282,9 +4413,9 @@ var Mr = class {
4282
4413
  r = await this._pc?.createOffer(n), this._debug.debug("Created offer", {
4283
4414
  participantId: this._participantId,
4284
4415
  offer: r
4285
- }), r = e._patchLocalDescription(r);
4416
+ }), this._sdpStats.logSdpGenerated("offer"), r = e._patchLocalDescription(r);
4286
4417
  } catch (e) {
4287
- throw this._debug.error("Unable to create offer", e, { participantId: this._participantId }), this._logger?.log(C.ERROR, "createOffer-direct"), e;
4418
+ throw this._debug.error("Unable to create offer", e, { participantId: this._participantId }), this._logger?.log(C.ERROR, "createOffer-direct"), this._sdpStats.logCreateFailed("offer", e), e;
4288
4419
  }
4289
4420
  try {
4290
4421
  return this._debug.debug("Set local description", {
@@ -4292,7 +4423,7 @@ var Mr = class {
4292
4423
  offer: r
4293
4424
  }), this._calcFingerprint(r.sdp), await this._pc?.setLocalDescription(r), r;
4294
4425
  } catch (e) {
4295
- throw this._debug.error("Unable to set local description", e, { participantId: this._participantId }), this._logger?.log(C.ERROR, "setLocalDescription-direct"), e;
4426
+ throw this._debug.error("Unable to set local description", e, { participantId: this._participantId }), this._logger?.log(C.ERROR, "setLocalDescription-direct"), this._sdpStats.logSetLocalFailed(r, e), e;
4296
4427
  }
4297
4428
  }
4298
4429
  async _createAnswer() {
@@ -4302,9 +4433,9 @@ var Mr = class {
4302
4433
  t = await this._pc?.createAnswer(), this._debug.debug("Created answer", {
4303
4434
  participantId: this._participantId,
4304
4435
  answer: t
4305
- }), t = e._patchLocalDescription(t);
4436
+ }), this._sdpStats.logSdpGenerated("answer"), t = e._patchLocalDescription(t);
4306
4437
  } catch (e) {
4307
- throw this._debug.error("Unable to create answer", e, { participantId: this._participantId }), this._logger?.log(C.ERROR, "createAnswer-direct"), e;
4438
+ throw this._debug.error("Unable to create answer", e, { participantId: this._participantId }), this._logger?.log(C.ERROR, "createAnswer-direct"), this._sdpStats.logCreateFailed("answer", e), e;
4308
4439
  }
4309
4440
  try {
4310
4441
  return this._debug.debug("Set local description", {
@@ -4312,7 +4443,7 @@ var Mr = class {
4312
4443
  answer: t
4313
4444
  }), this._calcFingerprint(t.sdp), await this._pc?.setLocalDescription(t), t;
4314
4445
  } catch (e) {
4315
- throw this._debug.error("Unable to set local description", e, { participantId: this._participantId }), this._logger?.log(C.ERROR, "setLocalDescription-direct"), e;
4446
+ throw this._debug.error("Unable to set local description", e, { participantId: this._participantId }), this._logger?.log(C.ERROR, "setLocalDescription-direct"), this._sdpStats.logSetLocalFailed(t, e), e;
4316
4447
  }
4317
4448
  }
4318
4449
  static _patchLocalDescription(e) {
@@ -4385,7 +4516,7 @@ var Mr = class {
4385
4516
  async _checkPPTNetwork(e) {
4386
4517
  if (!M.switchVideoAtBadNetwork || !e.inbound.transport.averageNetStat) return;
4387
4518
  let { averageNetStat: t } = e.inbound.transport, n = t.currentRoundTripTime <= this._networkLimitsForVideo.good.rtt && t.lostPercent <= this._networkLimitsForVideo.good.loss, r = t.currentRoundTripTime >= this._networkLimitsForVideo.bad.rtt || t.lostPercent >= this._networkLimitsForVideo.bad.loss, i = t.currentRoundTripTime < this._networkLimitsForVideo.bad.rtt, a = this._videoMaxDimensionsForNet.good, o = Er.L1T1;
4388
- if (r ? (this._lastBadConnection = Date.now(), i ? (a = this._videoMaxDimensionsForNet.bad, o = Er.L1T2) : (a = this._videoMaxDimensionsForNet.worst, o = Er.L1T3)) : n && (a = this._videoMaxDimensionsForNet.good, o = Er.L1T1), !(a < this._lastVideoMaxDimension || Date.now() - this._lastBadConnection > Gr) || this._lastVideoMaxDimension === a) return;
4519
+ if (r ? (this._lastBadConnection = Date.now(), i ? (a = this._videoMaxDimensionsForNet.bad, o = Er.L1T2) : (a = this._videoMaxDimensionsForNet.worst, o = Er.L1T3)) : n && (a = this._videoMaxDimensionsForNet.good, o = Er.L1T1), !(a < this._lastVideoMaxDimension || Date.now() - this._lastBadConnection > ti) || this._lastVideoMaxDimension === a) return;
4389
4520
  let s = this._serverSettings.camera;
4390
4521
  if (!s || !await this._isSVCSupported(e, o)) return;
4391
4522
  this._debug.debug("Switch outbound video frame size and scalabilityMode", {
@@ -4450,9 +4581,9 @@ var Mr = class {
4450
4581
  }, n(r)) : this._debug.error(`[${t}] data channel open failed, state [${e}]`);
4451
4582
  };
4452
4583
  }
4453
- }, qr = /* @__PURE__ */ function(e) {
4584
+ }, ri = /* @__PURE__ */ function(e) {
4454
4585
  return e.AUDIO_MIX = "audio-mix", e.PARTICIPANT_AGNOSTIC_TRACK_PREFIX = "pat", e.TRANSPARENT_AUDIO_TRACK_PREFIX = "ta", e;
4455
- }({}), Jr = 16, Yr = class e {
4586
+ }({}), ii = 16, ai = class e {
4456
4587
  constructor(e, t, n, r = R) {
4457
4588
  h(this, "_datachannel", void 0), h(this, "_participantIdRegistry", void 0), h(this, "_asrCallback", void 0), h(this, "_textDecoder", void 0), h(this, "_debug", void 0), this._debug = r, this._debug.debug("AsrReceiver started"), this._datachannel = e, this._participantIdRegistry = t, this._asrCallback = n, this._textDecoder = new TextDecoder(), this._datachannel.onmessage = (e) => this._onDataChannelMessage(e.data);
4458
4589
  }
@@ -4466,7 +4597,7 @@ var Mr = class {
4466
4597
  ssrc: a,
4467
4598
  timestamp: o,
4468
4599
  duration: s,
4469
- data: e.slice(Jr)
4600
+ data: e.slice(ii)
4470
4601
  };
4471
4602
  }
4472
4603
  _onDataChannelMessage(t) {
@@ -4486,7 +4617,7 @@ var Mr = class {
4486
4617
  destroy() {
4487
4618
  this._datachannel.onmessage = null;
4488
4619
  }
4489
- }, Xr, Zr = class {
4620
+ }, oi, si = class {
4490
4621
  constructor() {
4491
4622
  h(this, "_value", 1);
4492
4623
  }
@@ -4497,10 +4628,10 @@ var Mr = class {
4497
4628
  this._value = e;
4498
4629
  }
4499
4630
  };
4500
- Xr = Zr, h(Zr, "_instance", null), h(Zr, "getInstance", () => (Xr._instance || (Xr._instance = new Xr()), Xr._instance));
4631
+ oi = si, h(si, "_instance", null), h(si, "getInstance", () => (oi._instance || (oi._instance = new oi()), oi._instance));
4501
4632
  //#endregion
4502
4633
  //#region src/classes/ParticipantIdRegistry.ts
4503
- var Qr = class {
4634
+ var ci = class {
4504
4635
  constructor(e = R) {
4505
4636
  h(this, "streamDescriptionByCompactId", /* @__PURE__ */ new Map()), h(this, "compactIdByStreamDescription", /* @__PURE__ */ new Map()), h(this, "_debug", void 0), this._debug = e;
4506
4637
  }
@@ -4616,7 +4747,7 @@ var Qr = class {
4616
4747
  this._debug.error("unexpected null sequenceNumber", e, r);
4617
4748
  continue;
4618
4749
  }
4619
- let l = qr.PARTICIPANT_AGNOSTIC_TRACK_PREFIX + "-" + e, u = i ? i >>> 0 : null;
4750
+ let l = ri.PARTICIPANT_AGNOSTIC_TRACK_PREFIX + "-" + e, u = i ? i >>> 0 : null;
4620
4751
  n.push({
4621
4752
  participantStreamDescription: c,
4622
4753
  streamId: l,
@@ -4634,7 +4765,7 @@ var Qr = class {
4634
4765
  }
4635
4766
  }, Y = /* @__PURE__ */ function(e) {
4636
4767
  return e.INIT = "init", e.READY = "ready", e.FRAME = "frame", e.SET_BITRATE = "set_bitrate", e.ERROR = "error", e.DEBUG = "debug", e.LOG_ERROR = "log_error", e;
4637
- }({}), $r = class {
4768
+ }({}), li = class {
4638
4769
  constructor(e = R, t = null) {
4639
4770
  h(this, "_worker", null), h(this, "_debug", void 0), h(this, "_logger", void 0), this._debug = e, this._logger = t;
4640
4771
  }
@@ -4699,7 +4830,7 @@ var Qr = class {
4699
4830
  static isBrowserSupported() {
4700
4831
  throw Error("Not implemented");
4701
4832
  }
4702
- }, ei = class extends $r {
4833
+ }, ui = class extends li {
4703
4834
  constructor(e = R, t = null) {
4704
4835
  super(e, t);
4705
4836
  }
@@ -4723,7 +4854,7 @@ var Qr = class {
4723
4854
  static isBrowserSupported() {
4724
4855
  return "WebAssembly" in window && "Worker" in window;
4725
4856
  }
4726
- }, ti = class extends $r {
4857
+ }, di = class extends li {
4727
4858
  constructor(e = R, t = null) {
4728
4859
  super(e, t);
4729
4860
  }
@@ -4746,7 +4877,7 @@ var Qr = class {
4746
4877
  static isBrowserSupported() {
4747
4878
  return "VideoDecoder" in window && "Worker" in window && "VideoFrame" in window && !T.isBrokenVP9Decoder() && T.browserName() !== "Firefox";
4748
4879
  }
4749
- }, ni = class {
4880
+ }, fi = class {
4750
4881
  constructor(e = null, t = 0) {
4751
4882
  h(this, "_counter", 0), h(this, "_interval", 0), h(this, "_lastCalculationTime", Date.now()), h(this, "_onCalculated", null), this._onCalculated = e, t && (this._interval = window.setInterval(() => this.calculate(), t));
4752
4883
  }
@@ -4760,7 +4891,7 @@ var Qr = class {
4760
4891
  destroy() {
4761
4892
  window.clearInterval(this._interval), this._interval = 0;
4762
4893
  }
4763
- }, ri = class {
4894
+ }, pi = class {
4764
4895
  constructor(e, t) {
4765
4896
  h(this, "_participantId", void 0), h(this, "_statAggregator", void 0), h(this, "_firstFrameReceived", !1), this._participantId = e, this._statAggregator = t;
4766
4897
  }
@@ -4775,14 +4906,14 @@ var Qr = class {
4775
4906
  height: t
4776
4907
  });
4777
4908
  }
4778
- }, ii = 65536, ai = "MARK_SCREENSHARE_FREEZE_DURATION", oi = class e {
4909
+ }, mi = 65536, hi = "MARK_SCREENSHARE_FREEZE_DURATION", gi = class e {
4779
4910
  constructor(e, t, n, r, i, a = R) {
4780
- h(this, "_participantId", void 0), h(this, "_onStream", void 0), h(this, "_onStat", void 0), h(this, "_onKeyFrameRequested", void 0), h(this, "_statScreenShareFirstFrame", void 0), h(this, "_debug", void 0), h(this, "_chunks", []), this._participantId = e, this._onStream = t, this._onStat = n, this._onKeyFrameRequested = i, this._statScreenShareFirstFrame = new ri(e, r), this._debug = a;
4911
+ h(this, "_participantId", void 0), h(this, "_onStream", void 0), h(this, "_onStat", void 0), h(this, "_onKeyFrameRequested", void 0), h(this, "_statScreenShareFirstFrame", void 0), h(this, "_debug", void 0), h(this, "_chunks", []), this._participantId = e, this._onStream = t, this._onStat = n, this._onKeyFrameRequested = i, this._statScreenShareFirstFrame = new pi(e, r), this._debug = a;
4781
4912
  }
4782
4913
  appendChunk(t) {
4783
4914
  let n = this._chunks.length;
4784
4915
  if (t.start) this._measureFreezeDuration(!1), this._measureFreezeDuration(!0), n && (this._debug.warn("[FrameBuilder] Cleanup buffer", Array.prototype.slice.call(this._chunks)), this._chunks = []);
4785
- else if (!n || (this._chunks[n - 1].sequence + 1) % ii !== t.sequence) {
4916
+ else if (!n || (this._chunks[n - 1].sequence + 1) % mi !== t.sequence) {
4786
4917
  this._debug.warn("[FrameBuilder] Got incorrect chunk");
4787
4918
  return;
4788
4919
  }
@@ -4799,7 +4930,7 @@ var Qr = class {
4799
4930
  }
4800
4931
  }
4801
4932
  destroy() {
4802
- W.clearMark(ai), W.clearMark(W.getMarkNameScreenshareFirstFrame(this._participantId)), this._chunks = [];
4933
+ W.clearMark(hi), W.clearMark(W.getMarkNameScreenshareFirstFrame(this._participantId)), this._chunks = [];
4803
4934
  }
4804
4935
  _processFrameData() {
4805
4936
  let e = this._chunks;
@@ -4822,13 +4953,13 @@ var Qr = class {
4822
4953
  }
4823
4954
  _measureFreezeDuration(e) {
4824
4955
  if (e) {
4825
- W.setMark(ai);
4956
+ W.setMark(hi);
4826
4957
  return;
4827
4958
  }
4828
- let t = W.measureMark(ai);
4959
+ let t = W.measureMark(hi);
4829
4960
  t !== null && t > 1e3 && this._onStat({ freeze_duration: t });
4830
4961
  }
4831
- }, si = class {
4962
+ }, _i = class {
4832
4963
  constructor(e) {
4833
4964
  h(this, "_onStream", void 0), this._onStream = e;
4834
4965
  }
@@ -4841,7 +4972,7 @@ var Qr = class {
4841
4972
  static isBrowserSupported() {
4842
4973
  throw Error("Method `isBrowserSupported` is not implemented");
4843
4974
  }
4844
- }, ci = class extends si {
4975
+ }, vi = class extends _i {
4845
4976
  constructor(e, t = R) {
4846
4977
  super(e), h(this, "_useImageBitmap", void 0), h(this, "_canvas", null), h(this, "_canvasContext", null), h(this, "_stream", null), h(this, "_track", null), h(this, "_debug", void 0), this._debug = t, this._debug.debug("CanvasRenderer started"), this._useImageBitmap = "ImageBitmap" in window;
4847
4978
  }
@@ -4901,7 +5032,7 @@ var Qr = class {
4901
5032
  static isBrowserSupported() {
4902
5033
  return ("CanvasCaptureMediaStream" in window || "CanvasCaptureMediaStreamTrack" in window) && !(T.browserName() === "Safari" && Number(T.browserVersion()) === 15);
4903
5034
  }
4904
- }, li = class extends si {
5035
+ }, yi = class extends _i {
4905
5036
  constructor(e, t = R) {
4906
5037
  super(e), h(this, "_generator", void 0), h(this, "_writer", void 0), h(this, "_stream", void 0), h(this, "_debug", void 0), this._debug = t, this._debug.debug("TrackGeneratorRenderer started"), this._generator = new MediaStreamTrackGenerator({ kind: k.video }), this._writer = this._generator.writable.getWriter(), this._stream = new MediaStream([this._generator]), this._onStream(this._stream);
4907
5038
  }
@@ -4912,34 +5043,38 @@ var Qr = class {
4912
5043
  this._writer.releaseLock(), this._generator.writable.close().then(() => this._generator.stop()), this._debug.debug("TrackGeneratorRenderer destroyed");
4913
5044
  }
4914
5045
  static isBrowserSupported() {
4915
- return "VideoFrame" in window && "MediaStreamTrackGenerator" in window && ti.isBrowserSupported();
5046
+ return "VideoFrame" in window && "MediaStreamTrackGenerator" in window && di.isBrowserSupported();
4916
5047
  }
4917
- }, ui = class extends oi {
5048
+ }, bi = class extends gi {
4918
5049
  constructor(e, t, n, r, i, a = R, o = null) {
4919
- super(e, t, n, r, i, a), h(this, "_renderer", void 0), h(this, "_decoder", void 0), h(this, "_decoderReady", !1), h(this, "_decoderBusy", !1), h(this, "_decoderQueue", []), h(this, "_fpsMeter", void 0), h(this, "_logger", void 0), this._logger = o, this._debug.debug(`StreamBuilder started for participant [${e}]`), this._initFpsMeter(), this._initRenderer(), this._initDecoder();
5050
+ super(e, t, n, r, i, a), h(this, "_renderer", void 0), h(this, "_decoder", void 0), h(this, "_decoderReady", !1), h(this, "_decoderBusy", !1), h(this, "_decoderQueue", []), h(this, "_webCodecsRetryAttempted", !1), h(this, "_fpsMeter", void 0), h(this, "_logger", void 0), this._logger = o, this._debug.debug(`StreamBuilder started for participant [${e}]`), this._initFpsMeter(), this._initRenderer(), this._initDecoder();
4920
5051
  }
4921
5052
  _processFrame(e) {
4922
5053
  e.keyframe && (this._decoderQueue = []), this._decoderQueue.push(e), this._decodeQueue();
4923
5054
  }
4924
5055
  _initFpsMeter() {
4925
- this._fpsMeter = new ni((e) => this._debug.log(`[StreamBuilder][${this._participantId}] fps: ${e}`), 2e4);
5056
+ this._fpsMeter = new fi((e) => this._debug.log(`[StreamBuilder][${this._participantId}] fps: ${e}`), 2e4);
4926
5057
  }
4927
5058
  _initRenderer(e = !1) {
4928
- e || !li.isBrowserSupported() ? this._renderer = new ci(this._onStream, this._debug) : this._renderer = new li(this._onStream, this._debug);
5059
+ e || !yi.isBrowserSupported() ? this._renderer = new vi(this._onStream, this._debug) : this._renderer = new yi(this._onStream, this._debug);
4929
5060
  }
4930
5061
  _initDecoder(e = !1) {
4931
- e || !ti.isBrowserSupported() ? this._decoder = new ei(this._debug, this._logger) : this._decoder = new ti(this._debug, this._logger), this._decoder.init(async (e) => {
5062
+ e || !di.isBrowserSupported() ? this._decoder = new ui(this._debug, this._logger) : this._decoder = new di(this._debug, this._logger), this._decoder.init(async (e) => {
4932
5063
  this._decoderBusy = !1, "VideoFrame" in window && e instanceof VideoFrame ? await this._renderer.drawFrame(e) : await this._renderer.drawImage(e), this._fpsMeter.increment(), this._decodeQueue();
4933
5064
  }, (e) => {
4934
- this._decoderBusy = !1, this._decodeQueue(), this._decoder instanceof ti && typeof e == "string" && e.includes("EncodingError") && this._switchToLibVPXDecoder();
5065
+ if (this._decoderBusy = !1, this._decoder instanceof di && typeof e == "string" && e.includes("EncodingError")) {
5066
+ this._decoderQueue = [], !this._webCodecsRetryAttempted && e.includes("reset because error during decoding") ? (this._webCodecsRetryAttempted = !0, this._debug.warn("StreamBuilder retry WebCodecs with software decoder"), this._onKeyFrameRequested?.()) : this._switchToLibVPXDecoder();
5067
+ return;
5068
+ }
5069
+ this._decodeQueue();
4935
5070
  }, this._onKeyFrameRequested).then(() => {
4936
5071
  this._decoderReady = !0, this._decodeQueue();
4937
5072
  }).catch((e) => {
4938
- this._debug.warn("StreamBuilder decoder init failed", e), this._decoder instanceof ti && this._switchToLibVPXDecoder();
5073
+ this._debug.warn("StreamBuilder decoder init failed", e), this._decoder instanceof di && this._switchToLibVPXDecoder();
4939
5074
  });
4940
5075
  }
4941
5076
  _switchToLibVPXDecoder() {
4942
- this._debug.warn("StreamBuilder switch to LibVPX decoder"), this._fpsMeter && this._fpsMeter.destroy(), this._decoder && (this._decoderReady = !1, this._decoderBusy = !1, this._decoder.destroy()), this._renderer && this._renderer.destroy(), this._initFpsMeter(), this._initRenderer(!0), this._initDecoder(!0);
5077
+ this._debug.warn("StreamBuilder switch to LibVPX decoder"), this._decoderQueue = [], this._fpsMeter && this._fpsMeter.destroy(), this._decoder && (this._decoderReady = !1, this._decoderBusy = !1, this._decoder.destroy()), this._renderer && this._renderer.destroy(), this._initFpsMeter(), this._initRenderer(!0), this._initDecoder(!0), this._onKeyFrameRequested?.();
4943
5078
  }
4944
5079
  _decodeQueue() {
4945
5080
  if (!this._decoderReady || this._decoderBusy) return;
@@ -4950,20 +5085,20 @@ var Qr = class {
4950
5085
  super.destroy(), this._fpsMeter.destroy(), this._decoder.destroy(), this._renderer.destroy(), this._debug.debug(`StreamBuilder destroyed for participant ${this._participantId}`);
4951
5086
  }
4952
5087
  static isBrowserSupported() {
4953
- return ci.isBrowserSupported() || li.isBrowserSupported();
5088
+ return vi.isBrowserSupported() || yi.isBrowserSupported();
4954
5089
  }
4955
- }, di = 1, fi = 1, pi = 2, mi = 0, hi = 1, gi = 2, _i = 4, vi = 8;
4956
- function yi(e, t, n, r, i, a, o) {
5090
+ }, xi = 1, Si = 1, Ci = 2, wi = 0, Ti = 1, Ei = 2, Di = 4, Oi = 8;
5091
+ function ki(e, t, n, r, i, a, o) {
4957
5092
  let s = 0;
4958
- t && (s |= hi), n && (s |= gi), r && (s |= _i), o || (s |= vi);
5093
+ t && (s |= Ti), n && (s |= Ei), r && (s |= Di), o || (s |= Oi);
4959
5094
  let c = /* @__PURE__ */ new ArrayBuffer(11), l = new DataView(c);
4960
- if (l.setUint8(0, di), l.setUint16(1, i), l.setUint32(3, e), l.setUint8(7, +!!a), l.setUint16(8, mi), l.setUint8(10, s), !o) return c;
5095
+ if (l.setUint8(0, xi), l.setUint16(1, i), l.setUint32(3, e), l.setUint8(7, +!!a), l.setUint16(8, wi), l.setUint8(10, s), !o) return c;
4961
5096
  let u = new Uint8Array(c.byteLength + o.byteLength);
4962
5097
  return u.set(new Uint8Array(c), 0), u.set(new Uint8Array(o), c.byteLength), u.buffer;
4963
5098
  }
4964
- function bi(e) {
4965
- let t = new DataView(e), n = t.getUint8(0), r = t.getUint16(1), i = t.getUint32(3), a = t.getUint8(7) === 1, o = t.getUint16(8), s = t.getUint8(10), c = !!(s & hi), l = !!(s & gi), u = !!(s & _i), d = !!(s & vi);
4966
- if (n !== di) throw Error(`Unexpected protocol version. Got ${n}, expected ${di}`);
5099
+ function Ai(e) {
5100
+ let t = new DataView(e), n = t.getUint8(0), r = t.getUint16(1), i = t.getUint32(3), a = t.getUint8(7) === 1, o = t.getUint16(8), s = t.getUint8(10), c = !!(s & Ti), l = !!(s & Ei), u = !!(s & Di), d = !!(s & Oi);
5101
+ if (n !== xi) throw Error(`Unexpected protocol version. Got ${n}, expected ${xi}`);
4967
5102
  return {
4968
5103
  timestamp: i,
4969
5104
  start: c,
@@ -4976,26 +5111,26 @@ function bi(e) {
4976
5111
  data: e.slice(11)
4977
5112
  };
4978
5113
  }
4979
- function xi(e) {
5114
+ function ji(e) {
4980
5115
  if (!e || !e.byteLength || e.byteLength !== 4) return !1;
4981
5116
  let t = new DataView(e);
4982
- return !(t.getUint8(0) !== di || t.getUint8(1) !== fi || t.getUint16(2) !== mi);
5117
+ return !(t.getUint8(0) !== xi || t.getUint8(1) !== Si || t.getUint16(2) !== wi);
4983
5118
  }
4984
- function Si(e) {
5119
+ function Mi(e) {
4985
5120
  if (!e || !e.byteLength || e.byteLength !== 10) return null;
4986
5121
  let t = new DataView(e);
4987
- return t.getUint8(0) !== di || t.getUint8(1) !== pi || t.getUint16(2) !== mi ? null : {
5122
+ return t.getUint8(0) !== xi || t.getUint8(1) !== Ci || t.getUint16(2) !== wi ? null : {
4988
5123
  seq: t.getUint16(4),
4989
5124
  ts2: t.getUint32(6)
4990
5125
  };
4991
5126
  }
4992
- function Ci(e) {
5127
+ function Ni(e) {
4993
5128
  let t = /* @__PURE__ */ new ArrayBuffer(4), n = new DataView(t);
4994
- return n.setUint8(0, di), n.setUint8(1, fi), n.setUint16(2, e), t;
5129
+ return n.setUint8(0, xi), n.setUint8(1, Si), n.setUint16(2, e), t;
4995
5130
  }
4996
5131
  //#endregion
4997
5132
  //#region src/classes/screenshare/WebmBuilder.ts
4998
- var wi = 2 ** 15 - 1, Ti = 1, Ei = 5, Di = 5, Oi = class e {
5133
+ var Pi = 2 ** 15 - 1, Fi = 1, Ii = 5, Li = 5, Ri = class e {
4999
5134
  constructor(e, t = R) {
5000
5135
  h(this, "_mediaSource", void 0), h(this, "_codec", void 0), h(this, "_sourceBuffer", null), h(this, "_queue", []), h(this, "_clearBufferTill", 0), h(this, "_debug", void 0), this._mediaSource = new MediaSource(), this._codec = e, this._debug = t;
5001
5136
  let n = () => {
@@ -5038,8 +5173,8 @@ var wi = 2 ** 15 - 1, Ti = 1, Ei = 5, Di = 5, Oi = class e {
5038
5173
  this._mediaSource?.readyState === "open" && this._sourceBuffer?.abort();
5039
5174
  let e = this._sourceBuffer?.buffered, t = e?.length;
5040
5175
  if (!t) return;
5041
- let n = e.start(0), r = Math.max(0, e.end(t - 1) - Ei);
5042
- r - n > Di && (this._clearBufferTill = r);
5176
+ let n = e.start(0), r = Math.max(0, e.end(t - 1) - Ii);
5177
+ r - n > Li && (this._clearBufferTill = r);
5043
5178
  }
5044
5179
  destroy() {
5045
5180
  this._queue = [], this._mediaSource.readyState === "open" && (this._sourceBuffer?.abort(), this._mediaSource.endOfStream()), this._sourceBuffer = null, this._clearBufferTill = 0;
@@ -5053,7 +5188,7 @@ var wi = 2 ** 15 - 1, Ti = 1, Ei = 5, Di = 5, Oi = class e {
5053
5188
  get buffered() {
5054
5189
  return this._sourceBuffer?.buffered;
5055
5190
  }
5056
- }, ki = class e extends oi {
5191
+ }, zi = class e extends gi {
5057
5192
  constructor(e, t, n, r, i = R) {
5058
5193
  super(e, t, n, r, void 0, i), h(this, "_mediaBuffer", null), h(this, "_video", null), h(this, "_stream", null), h(this, "_earliestTimestamp", 0), h(this, "_clusterStartTime", 0), h(this, "_lastFrameTimestamp", 0), this._debug.debug(`[WebmBuilder] started for participant [${e}]`);
5059
5194
  }
@@ -5077,8 +5212,8 @@ var wi = 2 ** 15 - 1, Ti = 1, Ei = 5, Di = 5, Oi = class e {
5077
5212
  u.element(u.ID.MuxingApp, u.string("vk-webm-builder")),
5078
5213
  u.element(u.ID.WritingApp, u.string("vk-webm-builder"))
5079
5214
  ]), i = [u.element(u.ID.PixelWidth, u.number(e)), u.element(u.ID.PixelHeight, u.number(t))], a = u.element(u.ID.Tracks, u.element(u.ID.TrackEntry, [
5080
- u.element(u.ID.TrackNumber, u.number(Ti)),
5081
- u.element(u.ID.TrackUID, u.number(Ti)),
5215
+ u.element(u.ID.TrackNumber, u.number(Fi)),
5216
+ u.element(u.ID.TrackUID, u.number(Fi)),
5082
5217
  u.element(u.ID.TrackType, u.number(1)),
5083
5218
  u.element(u.ID.FlagLacing, u.number(0)),
5084
5219
  u.element(u.ID.DefaultDuration, u.number(1e9)),
@@ -5091,7 +5226,7 @@ var wi = 2 ** 15 - 1, Ti = 1, Ei = 5, Di = 5, Oi = class e {
5091
5226
  return u.unknownSizeElement(u.ID.Cluster, [u.element(u.ID.Timecode, u.number(Math.round(e)))]);
5092
5227
  }
5093
5228
  _createVideo(e) {
5094
- this._mediaBuffer = new Oi(e, this._debug), this._video = document.createElement("video"), this._video.autoplay = !0, this._video.controls = !1, this._video.muted = !0, this._video.style.pointerEvents = "none", this._video.style.visibility = "hidden", this._video.style.position = "absolute", this._video.style.width = "160px", this._video.style.height = "90px", this._video.style.bottom = "0", this._video.style.right = "0", this._video.style.zIndex = "5000", this._video.src = URL.createObjectURL(this._mediaBuffer.mediaSource), document.body.appendChild(this._video);
5229
+ this._mediaBuffer = new Ri(e, this._debug), this._video = document.createElement("video"), this._video.autoplay = !0, this._video.controls = !1, this._video.muted = !0, this._video.style.pointerEvents = "none", this._video.style.visibility = "hidden", this._video.style.position = "absolute", this._video.style.width = "160px", this._video.style.height = "90px", this._video.style.bottom = "0", this._video.style.right = "0", this._video.style.zIndex = "5000", this._video.src = URL.createObjectURL(this._mediaBuffer.mediaSource), document.body.appendChild(this._video);
5095
5230
  let t = () => {
5096
5231
  if (this._video?.src) {
5097
5232
  this._debug.warn(`[WebmBuilder] Video paused for participant [${this._participantId}], try to play again`);
@@ -5118,13 +5253,13 @@ var wi = 2 ** 15 - 1, Ti = 1, Ei = 5, Di = 5, Oi = class e {
5118
5253
  this._mediaBuffer?.append(a);
5119
5254
  }
5120
5255
  let i = Math.round(r - this._clusterStartTime);
5121
- if (i > wi && (this._clusterStartTime = r, i = 0), i === 0) {
5256
+ if (i > Pi && (this._clusterStartTime = r, i = 0), i === 0) {
5122
5257
  this._debug.debug(`[WebmBuilder] Cluster header for participant [${this._participantId}]`);
5123
5258
  let t = e._genClusterHeader(this._clusterStartTime);
5124
5259
  this._mediaBuffer?.append(t);
5125
5260
  }
5126
5261
  let a = u.element(u.ID.SimpleBlock, [
5127
- u.vintEncodedNumber(Ti),
5262
+ u.vintEncodedNumber(Fi),
5128
5263
  u.bytes(e._intToU16BE(i)),
5129
5264
  u.number(!!t.keyframe << 7),
5130
5265
  u.bytes(t.frameData)
@@ -5137,12 +5272,12 @@ var wi = 2 ** 15 - 1, Ti = 1, Ei = 5, Di = 5, Oi = class e {
5137
5272
  static isBrowserSupported() {
5138
5273
  return "captureStream" in window.HTMLVideoElement?.prototype && window.MediaSource?.isTypeSupported("video/webm; codecs=\"vp8\"") && window.MediaSource?.isTypeSupported("video/webm; codecs=\"vp9\"");
5139
5274
  }
5140
- }, Ai = class {
5275
+ }, Bi = class {
5141
5276
  constructor(e, t, n, r, i, a = null, o = R, s = null) {
5142
5277
  h(this, "_datachannel", void 0), h(this, "_participantIdRegistry", null), h(this, "_streamBuilders", {}), h(this, "_onStream", () => {}), h(this, "_onEos", () => {}), h(this, "_onStat", void 0), h(this, "_debug", void 0), h(this, "_logger", void 0), h(this, "_statAggregator", void 0), this._debug = o, this._logger = s, this._statAggregator = a, this._debug.debug("ScreenCaptureReceiver started"), this._datachannel = e, this._participantIdRegistry = t, this._onStream = n, this._onEos = r, this._onStat = i, this._datachannel.onmessage = (e) => this._onDataChannelMessage(e.data);
5143
5278
  }
5144
5279
  _onDataChannelMessage(e) {
5145
- let t = bi(e), n = this._participantIdRegistry?.getStreamDescription(t.ssrc)?.participantId;
5280
+ let t = Ai(e), n = this._participantIdRegistry?.getStreamDescription(t.ssrc)?.participantId;
5146
5281
  if (!n) {
5147
5282
  this._debug.warn(`Participant id for ssrc ${t.ssrc} not found in registry`);
5148
5283
  return;
@@ -5154,7 +5289,7 @@ var wi = 2 ** 15 - 1, Ti = 1, Ei = 5, Di = 5, Oi = class e {
5154
5289
  let r = this._streamBuilders[n];
5155
5290
  if (!r) {
5156
5291
  let e = (e) => this._onStream(n, e);
5157
- r = M.screenShareWebmBuilder && ki.isBrowserSupported() ? new ki(n, e, this._onStat, this._statAggregator, this._debug) : new ui(n, e, this._onStat, this._statAggregator, () => {
5292
+ r = M.screenShareWebmBuilder && zi.isBrowserSupported() ? new zi(n, e, this._onStat, this._statAggregator, this._debug) : new bi(n, e, this._onStat, this._statAggregator, () => {
5158
5293
  this._requestKeyFrame(t.ssrc);
5159
5294
  }, this._debug, this._logger), this._streamBuilders[n] = r;
5160
5295
  }
@@ -5162,7 +5297,7 @@ var wi = 2 ** 15 - 1, Ti = 1, Ei = 5, Di = 5, Oi = class e {
5162
5297
  }
5163
5298
  _requestKeyFrame(e) {
5164
5299
  if (!(!this._datachannel || this._datachannel.readyState !== "open")) try {
5165
- let t = Ci(e);
5300
+ let t = Ni(e);
5166
5301
  this._datachannel.send(t), this._debug.debug(`ScreenCaptureReceiver request for keyframe for ssrc ${e}`);
5167
5302
  } catch (e) {
5168
5303
  this._debug.warn("Failed to send keyframe request", e);
@@ -5175,7 +5310,7 @@ var wi = 2 ** 15 - 1, Ti = 1, Ei = 5, Di = 5, Oi = class e {
5175
5310
  destroy() {
5176
5311
  this._datachannel.onbufferedamountlow = null, this._datachannel.onmessage = null, this._onStream = () => {}, Object.values(this._streamBuilders).forEach((e) => e.destroy()), this._streamBuilders = {}, this._participantIdRegistry = null, this._debug.debug("ScreenCaptureReceiver destroyed");
5177
5312
  }
5178
- }, ji = class {
5313
+ }, Vi = class {
5179
5314
  constructor(e, t, n) {
5180
5315
  h(this, "_prev", void 0), h(this, "_next", void 0), h(this, "_data", void 0), this._next = n, n && (n.prev = this), this._prev = t, t && (t.next = this), this._data = e;
5181
5316
  }
@@ -5194,7 +5329,7 @@ var wi = 2 ** 15 - 1, Ti = 1, Ei = 5, Di = 5, Oi = class e {
5194
5329
  get data() {
5195
5330
  return this._data;
5196
5331
  }
5197
- }, Mi = class {
5332
+ }, Hi = class {
5198
5333
  constructor() {
5199
5334
  h(this, "_head", null), h(this, "_tail", null), h(this, "_length", 0);
5200
5335
  }
@@ -5202,7 +5337,7 @@ var wi = 2 ** 15 - 1, Ti = 1, Ei = 5, Di = 5, Oi = class e {
5202
5337
  return this._length;
5203
5338
  }
5204
5339
  push(...e) {
5205
- for (let t of e) this._tail = new ji(t, this._tail, null), this._head || (this._head = this._tail), this._length++;
5340
+ for (let t of e) this._tail = new Vi(t, this._tail, null), this._head || (this._head = this._tail), this._length++;
5206
5341
  }
5207
5342
  merge(e) {
5208
5343
  this._tail && (this._tail.next = e._head), this._head || (this._head = e._head), this._tail = e._tail, this._length += e._length, e.clear();
@@ -5232,7 +5367,7 @@ var wi = 2 ** 15 - 1, Ti = 1, Ei = 5, Di = 5, Oi = class e {
5232
5367
  for (; t !== null;) e.push(t.data), t = t.next;
5233
5368
  return e.length ? JSON.stringify(e, (e, t) => t instanceof Error ? String(t) : t) : "";
5234
5369
  }
5235
- }, Ni = 1e3, Pi = class extends $r {
5370
+ }, Ui = 1e3, Wi = class extends li {
5236
5371
  constructor(e, t, n, r, i = R, a = null) {
5237
5372
  super(i, a), h(this, "_sourceTrack", void 0), h(this, "_onFrame", void 0), h(this, "_useCongestionControl", void 0), h(this, "_maxBitrate", void 0), h(this, "_useImageCapture", void 0), h(this, "_video", null), h(this, "_imageCapture", null), h(this, "_canvas", null), h(this, "_canvasCtx", null), h(this, "_frameReadTimeout", 0), h(this, "_lastFrame", null), this._sourceTrack = e, this._onFrame = t, this._useCongestionControl = n, this._maxBitrate = r, this._useImageCapture = "ImageCapture" in window && ImageCapture.prototype.grabFrame !== void 0 && "ImageBitmap" in window, (e.readyState !== "live" || !e.enabled || e.muted) && (this._useImageCapture = !1);
5238
5373
  }
@@ -5318,7 +5453,7 @@ var wi = 2 ** 15 - 1, Ti = 1, Ei = 5, Di = 5, Oi = class e {
5318
5453
  let t = this._drawFrameData(this._lastFrame);
5319
5454
  this._encode(t, e);
5320
5455
  } else this._onFrame(null);
5321
- }, Ni), this._getFrameBitmap().then((t) => {
5456
+ }, Ui), this._getFrameBitmap().then((t) => {
5322
5457
  window.clearTimeout(this._frameReadTimeout), this._lastFrame?.close(), this._lastFrame = t;
5323
5458
  let n = this._drawFrameData(t);
5324
5459
  this._encode(n, e);
@@ -5339,7 +5474,7 @@ var wi = 2 ** 15 - 1, Ti = 1, Ei = 5, Di = 5, Oi = class e {
5339
5474
  destroy() {
5340
5475
  this._removeWorker(), this._removeStream(), this._removeDom(), this._debug.debug("LibVPxEncoder destroyed");
5341
5476
  }
5342
- }, Fi = class extends $r {
5477
+ }, Gi = class extends li {
5343
5478
  constructor(e, t, n, r, i, a, o = R, s = null) {
5344
5479
  super(o, s), h(this, "_sourceTrack", void 0), h(this, "_trackProcessor", void 0), h(this, "_onFrame", void 0), h(this, "_useCongestionControl", void 0), h(this, "_maxBitrate", void 0), h(this, "_useCbr", void 0), h(this, "_frameRate", void 0), this._sourceTrack = e, this._onFrame = t, this._useCongestionControl = n, this._maxBitrate = r, this._useCbr = i, this._frameRate = a, this._trackProcessor = new MediaStreamTrackProcessor({ track: e });
5345
5480
  }
@@ -5385,11 +5520,11 @@ var wi = 2 ** 15 - 1, Ti = 1, Ei = 5, Di = 5, Oi = class e {
5385
5520
  static isBrowserSupported() {
5386
5521
  return "VideoEncoder" in window && "Worker" in window && "EncodedVideoChunk" in window && "MediaStreamTrackProcessor" in window;
5387
5522
  }
5388
- }, Ii = 2100, Li = 600, Ri = 1.2, zi = .8, Bi = 2e3, Vi = 8e3, Hi = 8e3, Ui = 16e3, Wi = 4, Gi = 2e3, Ki = /* @__PURE__ */ function(e) {
5523
+ }, Ki = 2100, qi = 600, Ji = 1.2, Yi = .8, Xi = 2e3, Zi = 8e3, Qi = 8e3, $i = 16e3, ea = 4, ta = 2e3, na = /* @__PURE__ */ function(e) {
5389
5524
  return e[e.NONE = 0] = "NONE", e[e.UP = 1] = "UP", e[e.DOWN = 2] = "DOWN", e;
5390
- }(Ki || {}), qi = class {
5525
+ }(na || {}), ra = class {
5391
5526
  constructor(e, t, n, r, i, a, o, s = R) {
5392
- h(this, "_onCongestion", void 0), h(this, "_ccEnabled", void 0), h(this, "_fastSharing", void 0), h(this, "_trendDelayThreshold", void 0), h(this, "_highDelayThreshold", void 0), h(this, "_targetFps", void 0), h(this, "_minBitrate", void 0), h(this, "_maxBitrate", void 0), h(this, "_targetBitrate", void 0), h(this, "_lastDown", void 0), h(this, "_lastUp", void 0), h(this, "_lastProbing", void 0), h(this, "_lastCheckDelay", void 0), h(this, "_upPenalty", 0), h(this, "_probing", void 0), h(this, "_delayAvgShort", -1), h(this, "_delayAvgLong", -1), h(this, "_minDelay", Number.MAX_VALUE), h(this, "_maxDelay", 0), h(this, "_largeDelayDuration", 0), h(this, "_lastFpsCalcMs", void 0), h(this, "_frames", 0), h(this, "_fps", 0), h(this, "_debug", void 0), this._onCongestion = e, this._ccEnabled = r, this._debug = s, this._minBitrate = t, this._maxBitrate = n, this._fastSharing = i, this._targetFps = o, a > 0 ? this._highDelayThreshold = a : this._highDelayThreshold = Ii, i && (this._highDelayThreshold = Li), this._trendDelayThreshold = Math.round(this._highDelayThreshold / 3), this._targetBitrate = this._maxBitrate, this._probing = !1;
5527
+ h(this, "_onCongestion", void 0), h(this, "_ccEnabled", void 0), h(this, "_fastSharing", void 0), h(this, "_trendDelayThreshold", void 0), h(this, "_highDelayThreshold", void 0), h(this, "_targetFps", void 0), h(this, "_minBitrate", void 0), h(this, "_maxBitrate", void 0), h(this, "_targetBitrate", void 0), h(this, "_lastDown", void 0), h(this, "_lastUp", void 0), h(this, "_lastProbing", void 0), h(this, "_lastCheckDelay", void 0), h(this, "_upPenalty", 0), h(this, "_probing", void 0), h(this, "_delayAvgShort", -1), h(this, "_delayAvgLong", -1), h(this, "_minDelay", Number.MAX_VALUE), h(this, "_maxDelay", 0), h(this, "_largeDelayDuration", 0), h(this, "_lastFpsCalcMs", void 0), h(this, "_frames", 0), h(this, "_fps", 0), h(this, "_debug", void 0), this._onCongestion = e, this._ccEnabled = r, this._debug = s, this._minBitrate = t, this._maxBitrate = n, this._fastSharing = i, this._targetFps = o, a > 0 ? this._highDelayThreshold = a : this._highDelayThreshold = Ki, i && (this._highDelayThreshold = qi), this._trendDelayThreshold = Math.round(this._highDelayThreshold / 3), this._targetBitrate = this._maxBitrate, this._probing = !1;
5393
5528
  let c = Date.now();
5394
5529
  this._lastDown = 0, this._lastUp = c, this._lastProbing = c, this._lastCheckDelay = 0, this._lastFpsCalcMs = 0;
5395
5530
  }
@@ -5399,27 +5534,27 @@ var wi = 2 ** 15 - 1, Ti = 1, Ei = 5, Di = 5, Oi = class e {
5399
5534
  let i = 0, a = this._delayAvgShort - this._delayAvgLong, o = Math.round(Math.abs(a) * 100 / this._delayAvgLong), s = a > 40 && o > 30 && this._delayAvgShort > this._trendDelayThreshold, c = this._delayAvgShort > this._highDelayThreshold;
5400
5535
  s || c ? i = 2 : Math.abs(a) < 40 && o < 10 && !c && (i = 1);
5401
5536
  let l = Math.round(this._targetBitrate / 1e3), u = n;
5402
- e % 20 == 0 && this._debug.debug(`#${e}: cc: delay=${t} short=${this._delayAvgShort} long=${this._delayAvgLong} delta=${a} percent=${o} -> ${Ki[i]} tr=${l} br=${n}`);
5537
+ e % 20 == 0 && this._debug.debug(`#${e}: cc: delay=${t} short=${this._delayAvgShort} long=${this._delayAvgLong} delta=${a} percent=${o} -> ${na[i]} tr=${l} br=${n}`);
5403
5538
  let d = r - this._lastDown;
5404
- if (i === 2 && d > Bi) {
5405
- this._probing && (this._upPenalty = Math.min(++this._upPenalty, Wi), this._probing = !1);
5406
- let n = zi * u * 1e3;
5407
- if (n >= this._targetBitrate && (n = this._targetBitrate * zi), n = Math.max(n, this._minBitrate), n < this._targetBitrate) {
5408
- let r = Math.round(n / 1e3), s = Math.round(this._upPenalty * Hi / 1e3);
5409
- this._debug.log(`#${e}: cc: delay=${t} short=${this._delayAvgShort} long=${this._delayAvgLong} delta=${a} percent=${o} -> ${Ki[i]}`), this._debug.log(`#${e}: cc: DOWN delay=${t} bitrate=${u} target=${l} -> newBitrate=${r} penalty=${s}s`), this._setBitrate(n, !0), this._targetBitrate = n;
5539
+ if (i === 2 && d > Xi) {
5540
+ this._probing && (this._upPenalty = Math.min(++this._upPenalty, ea), this._probing = !1);
5541
+ let n = Yi * u * 1e3;
5542
+ if (n >= this._targetBitrate && (n = this._targetBitrate * Yi), n = Math.max(n, this._minBitrate), n < this._targetBitrate) {
5543
+ let r = Math.round(n / 1e3), s = Math.round(this._upPenalty * Qi / 1e3);
5544
+ this._debug.log(`#${e}: cc: delay=${t} short=${this._delayAvgShort} long=${this._delayAvgLong} delta=${a} percent=${o} -> ${na[i]}`), this._debug.log(`#${e}: cc: DOWN delay=${t} bitrate=${u} target=${l} -> newBitrate=${r} penalty=${s}s`), this._setBitrate(n, !0), this._targetBitrate = n;
5410
5545
  }
5411
5546
  this._lastDown = r;
5412
5547
  }
5413
- let f = r - this._lastUp, p = Vi + this._upPenalty * Hi;
5548
+ let f = r - this._lastUp, p = Zi + this._upPenalty * Qi;
5414
5549
  if (i === 1 && f > p && d > p) {
5415
- let n = Math.min(this._targetBitrate * Ri, this._maxBitrate);
5550
+ let n = Math.min(this._targetBitrate * Ji, this._maxBitrate);
5416
5551
  if (n > this._targetBitrate) {
5417
- let s = Math.round(n / 1e3), c = Math.round(this._targetBitrate / 1e3), l = Math.round(this._upPenalty * Hi / 1e3);
5418
- this._debug.log(`#${e}: cc: delay=${t} short=${this._delayAvgShort} long=${this._delayAvgLong} delta=${a} percent=${o} -> ${Ki[i]}`), this._debug.log(`#${e}: cc: UP bitrate=${u} target=${c} -> newBitrate=${s} penalty=${l}s`), this._setBitrate(n, !1), this._targetBitrate = n, this._probing = !0, this._lastProbing = r, this._lastUp = r;
5552
+ let s = Math.round(n / 1e3), c = Math.round(this._targetBitrate / 1e3), l = Math.round(this._upPenalty * Qi / 1e3);
5553
+ this._debug.log(`#${e}: cc: delay=${t} short=${this._delayAvgShort} long=${this._delayAvgLong} delta=${a} percent=${o} -> ${na[i]}`), this._debug.log(`#${e}: cc: UP bitrate=${u} target=${c} -> newBitrate=${s} penalty=${l}s`), this._setBitrate(n, !1), this._targetBitrate = n, this._probing = !0, this._lastProbing = r, this._lastUp = r;
5419
5554
  }
5420
5555
  }
5421
5556
  let m = r - this._lastProbing;
5422
- this._probing && m > Ui && (this._probing = !1);
5557
+ this._probing && m > $i && (this._probing = !1);
5423
5558
  let ee = r - this._lastDown;
5424
5559
  this._upPenalty > 0 && ee > 3 * p && (this._debug.log(`#${e}: cc: UP reset penalty: oldPenalty=${this._upPenalty}`), this._upPenalty = 0);
5425
5560
  }
@@ -5430,7 +5565,7 @@ var wi = 2 ** 15 - 1, Ti = 1, Ei = 5, Di = 5, Oi = class e {
5430
5565
  }
5431
5566
  _calcDelay(e, t) {
5432
5567
  if (!(e <= 0)) {
5433
- if (this._delayAvgShort === -1 && (this._delayAvgShort = e, this._delayAvgLong = e), this._delayAvgShort = Math.round((this._delayAvgShort * 3 + e) / 4), this._delayAvgLong = Math.round((this._delayAvgLong * 23 + e) / 24), e > 0 && e < this._minDelay ? this._minDelay = e : e > this._maxDelay && (this._maxDelay = e), this._lastCheckDelay === 0 && (this._lastCheckDelay = t), e > Gi) {
5568
+ if (this._delayAvgShort === -1 && (this._delayAvgShort = e, this._delayAvgLong = e), this._delayAvgShort = Math.round((this._delayAvgShort * 3 + e) / 4), this._delayAvgLong = Math.round((this._delayAvgLong * 23 + e) / 24), e > 0 && e < this._minDelay ? this._minDelay = e : e > this._maxDelay && (this._maxDelay = e), this._lastCheckDelay === 0 && (this._lastCheckDelay = t), e > ta) {
5434
5569
  let e = t - this._lastCheckDelay;
5435
5570
  this._largeDelayDuration += e;
5436
5571
  }
@@ -5459,7 +5594,7 @@ var wi = 2 ** 15 - 1, Ti = 1, Ei = 5, Di = 5, Oi = class e {
5459
5594
  this._fps === 0 ? this._fps = Math.round(r) : this._fps = Math.round((this._fps * 3 + r) / 4), this._frames = 0, this._fps !== n && this._debug.log(`cc: fps=${this._fps}`);
5460
5595
  }
5461
5596
  }
5462
- }, Ji = class {
5597
+ }, ia = class {
5463
5598
  constructor(e) {
5464
5599
  h(this, "_maxSize", void 0), h(this, "_size", 0), h(this, "_buffer", void 0), h(this, "_head", 0), h(this, "_tail", 0), this._maxSize = e, this._buffer = Array(e);
5465
5600
  }
@@ -5533,11 +5668,11 @@ var wi = 2 ** 15 - 1, Ti = 1, Ei = 5, Di = 5, Oi = class e {
5533
5668
  clear() {
5534
5669
  this._buffer.fill(void 0), this._size = 0, this._head = 0, this._tail = 0;
5535
5670
  }
5536
- }, Yi = 65536, Xi = 50, Zi = 400, Qi = 1e6, $i = 3e5, ea = 3e4, ta = 2e3, na = 5, ra = 0, ia = class {
5671
+ }, aa = 65536, oa = 50, sa = 400, ca = 1e6, la = 3e5, ua = 3e4, da = 2e3, fa = 5, pa = 0, ma = class {
5537
5672
  constructor(e, t, n, r, i = R, a = null) {
5538
- h(this, "_encoder", void 0), h(this, "_datachannel", void 0), h(this, "_signaling", void 0), h(this, "_fastSharing", void 0), h(this, "_destroyed", !1), h(this, "_needKeyframe", !0), h(this, "DATA_SIZE", void 0), h(this, "_congestionControl", void 0), h(this, "_frameNum", 0), h(this, "_width", void 0), h(this, "_height", void 0), h(this, "_feedback", new Ji(1024)), h(this, "_lastSentFrameSeq", 0), h(this, "_lastDeliveredFrameSeq", 0), h(this, "_lastFrameDelay", 0), h(this, "_lastFramerateReduced", Date.now()), h(this, "_lastSharingStat", Date.now()), h(this, "_congestionControlEnabled", void 0), h(this, "_queue", new Mi()), h(this, "_fpsMeter", void 0), h(this, "_maxFrameDelay", void 0), h(this, "_debug", void 0), h(this, "_logger", void 0), this._debug = i, this._logger = a, this._debug.debug("ScreenCaptureSender started"), this.DATA_SIZE = M.consumerScreenDataChannelPacketSize - 11, this._datachannel = t, this._signaling = n, this._fastSharing = r, this._congestionControlEnabled = M.screenShareCongestionControl || this._fastSharing, this._width = e.getSettings().width, this._height = e.getSettings().height, this._maxFrameDelay = this._fastSharing ? M.screenShareCongestionControlThreshold : M.screenShareCongestionControlThreshold * 2;
5673
+ h(this, "_encoder", void 0), h(this, "_datachannel", void 0), h(this, "_signaling", void 0), h(this, "_fastSharing", void 0), h(this, "_destroyed", !1), h(this, "_needKeyframe", !0), h(this, "DATA_SIZE", void 0), h(this, "_congestionControl", void 0), h(this, "_frameNum", 0), h(this, "_width", void 0), h(this, "_height", void 0), h(this, "_feedback", new ia(1024)), h(this, "_lastSentFrameSeq", 0), h(this, "_lastDeliveredFrameSeq", 0), h(this, "_lastFrameDelay", 0), h(this, "_lastFramerateReduced", Date.now()), h(this, "_lastSharingStat", Date.now()), h(this, "_congestionControlEnabled", void 0), h(this, "_queue", new Hi()), h(this, "_fpsMeter", void 0), h(this, "_maxFrameDelay", void 0), h(this, "_debug", void 0), h(this, "_logger", void 0), this._debug = i, this._logger = a, this._debug.debug("ScreenCaptureSender started"), this.DATA_SIZE = M.consumerScreenDataChannelPacketSize - 11, this._datachannel = t, this._signaling = n, this._fastSharing = r, this._congestionControlEnabled = M.screenShareCongestionControl || this._fastSharing, this._width = e.getSettings().width, this._height = e.getSettings().height, this._maxFrameDelay = this._fastSharing ? M.screenShareCongestionControlThreshold : M.screenShareCongestionControlThreshold * 2;
5539
5674
  let o = M.getScreenFrameRate(this._fastSharing), { minBitrate: s, maxBitrate: c } = this._calcMinMaxBitrate(this._width, this._height), l = this._onCongestionCallback.bind(this);
5540
- this._debug.log(`ScreenCaptureSender: CongestionControl: enabled=${this._congestionControlEnabled} minBitrate=${Math.round(s / 1e3)}k maxBitrate=${Math.round(c / 1e3)}k delayThreshold=${M.screenShareCongestionControlThreshold}`), this._congestionControl = new qi(l, s, c, this._congestionControlEnabled, this._fastSharing, M.screenShareCongestionControlThreshold, o, this._debug);
5675
+ this._debug.log(`ScreenCaptureSender: CongestionControl: enabled=${this._congestionControlEnabled} minBitrate=${Math.round(s / 1e3)}k maxBitrate=${Math.round(c / 1e3)}k delayThreshold=${M.screenShareCongestionControlThreshold}`), this._congestionControl = new ra(l, s, c, this._congestionControlEnabled, this._fastSharing, M.screenShareCongestionControlThreshold, o, this._debug);
5541
5676
  let u = (e, t) => {
5542
5677
  if (this._destroyed) return;
5543
5678
  if (!e) {
@@ -5548,23 +5683,23 @@ var wi = 2 ** 15 - 1, Ti = 1, Ei = 5, Di = 5, Oi = class e {
5548
5683
  let n = this._sliceFrame(e);
5549
5684
  this._queue.merge(n), this._handleQueue(), this._sendSharingStat();
5550
5685
  };
5551
- if (Fi.isBrowserSupported()) {
5686
+ if (Gi.isBrowserSupported()) {
5552
5687
  let t = this._fastSharing;
5553
- this._encoder = new Fi(e, u, this._congestionControlEnabled, c, t, o, this._debug, this._logger);
5554
- } else this._encoder = new Pi(e, u, this._congestionControlEnabled, c, this._debug, this._logger);
5688
+ this._encoder = new Gi(e, u, this._congestionControlEnabled, c, t, o, this._debug, this._logger);
5689
+ } else this._encoder = new Wi(e, u, this._congestionControlEnabled, c, this._debug, this._logger);
5555
5690
  this._datachannel.onmessage = (e) => {
5556
- xi(e.data) && (this._debug.debug(`[${this._datachannel.label}] Requested keyframe`), this._needKeyframe = !0);
5557
- let t = Si(e.data);
5691
+ ji(e.data) && (this._debug.debug(`[${this._datachannel.label}] Requested keyframe`), this._needKeyframe = !0);
5692
+ let t = Mi(e.data);
5558
5693
  t !== null && this._checkCcFeedback(t);
5559
- }, this._encoder.init().then(() => this._handleQueue()).catch((e) => this._debug.warn("ScreenCaptureSender init failed", e)), this._fpsMeter = new ni((e) => this._debug.log(`[ScreenCaptureSender] fps: ${e}`), 5e3);
5694
+ }, this._encoder.init().then(() => this._handleQueue()).catch((e) => this._debug.warn("ScreenCaptureSender init failed", e)), this._fpsMeter = new fi((e) => this._debug.log(`[ScreenCaptureSender] fps: ${e}`), 5e3);
5560
5695
  }
5561
5696
  _handleQueue() {
5562
5697
  if (this._destroyed) return;
5563
5698
  let e = this._queue.shift();
5564
5699
  if (!e) {
5565
- if ((this._lastSentFrameSeq - this._lastDeliveredFrameSeq + Yi) % Yi > na && this._lastFrameDelay > this._maxFrameDelay) {
5700
+ if ((this._lastSentFrameSeq - this._lastDeliveredFrameSeq + aa) % aa > fa && this._lastFrameDelay > this._maxFrameDelay) {
5566
5701
  let e = Date.now();
5567
- e - this._lastFramerateReduced > ta && (this._lastFramerateReduced = e, this._debug.debug(`[ScreenCaptureSender] reduce framerate: delay=${this._lastFrameDelay} maxDelay=${this._maxFrameDelay}`));
5702
+ e - this._lastFramerateReduced > da && (this._lastFramerateReduced = e, this._debug.debug(`[ScreenCaptureSender] reduce framerate: delay=${this._lastFrameDelay} maxDelay=${this._maxFrameDelay}`));
5568
5703
  } else this._requestFrame();
5569
5704
  return;
5570
5705
  }
@@ -5590,7 +5725,7 @@ var wi = 2 ** 15 - 1, Ti = 1, Ei = 5, Di = 5, Oi = class e {
5590
5725
  this._destroyed || (this._encoder.requestFrame(this._needKeyframe), this._needKeyframe = !1);
5591
5726
  }
5592
5727
  _sliceFrame(e) {
5593
- let t = e.type === "key", n = e.data.byteLength, r = new Mi();
5728
+ let t = e.type === "key", n = e.data.byteLength, r = new Hi();
5594
5729
  for (let i = 0; i < n; i += this.DATA_SIZE) {
5595
5730
  let a = e.data.slice(i, i + this.DATA_SIZE), o = i === 0, s = n <= i + a.byteLength, c = this._wrapHeader(e.timestamp, o, s, t, a);
5596
5731
  r.push({
@@ -5606,11 +5741,11 @@ var wi = 2 ** 15 - 1, Ti = 1, Ei = 5, Di = 5, Oi = class e {
5606
5741
  return r;
5607
5742
  }
5608
5743
  _wrapHeader(e, t, n, r, i) {
5609
- let a = yi(e, t, n, r, ra, this._encoder.isVP9(), i), o = {
5610
- sequence: ra,
5744
+ let a = ki(e, t, n, r, pa, this._encoder.isVP9(), i), o = {
5745
+ sequence: pa,
5611
5746
  data: a
5612
5747
  };
5613
- return ra = (ra + 1) % Yi, o;
5748
+ return pa = (pa + 1) % aa, o;
5614
5749
  }
5615
5750
  _stopPacket() {
5616
5751
  return this._wrapHeader(Date.now(), !1, !1, !1, null).data;
@@ -5627,7 +5762,7 @@ var wi = 2 ** 15 - 1, Ti = 1, Ei = 5, Di = 5, Oi = class e {
5627
5762
  this._queue.clear(), this._fpsMeter.destroy(), this._datachannel.onmessage = null, this._feedback.clear(), this._datachannel.readyState === "open" && this._datachannel.send(this._stopPacket()), this._destroyed = !0, this._encoder.destroy(), this._debug.debug("ScreenCaptureSender destroyed");
5628
5763
  }
5629
5764
  static isBrowserSupported() {
5630
- return Fi.isBrowserSupported() || Pi.isBrowserSupported();
5765
+ return Gi.isBrowserSupported() || Wi.isBrowserSupported();
5631
5766
  }
5632
5767
  _onCongestionCallback(e, t, n) {
5633
5768
  this._encoder.setBitrate(e, t, n);
@@ -5640,8 +5775,8 @@ var wi = 2 ** 15 - 1, Ti = 1, Ei = 5, Di = 5, Oi = class e {
5640
5775
  (e === void 0 || e < 640) && (e = 640), (t === void 0 || t < 360) && (t = 360);
5641
5776
  let n = e * t / 256;
5642
5777
  return {
5643
- minBitrate: Math.max($i, Math.min(Qi, Math.round(n * Xi))),
5644
- maxBitrate: Math.round(n * Zi)
5778
+ minBitrate: Math.max(la, Math.min(ca, Math.round(n * oa))),
5779
+ maxBitrate: Math.round(n * sa)
5645
5780
  };
5646
5781
  }
5647
5782
  _checkCcFeedback(e) {
@@ -5655,14 +5790,14 @@ var wi = 2 ** 15 - 1, Ti = 1, Ei = 5, Di = 5, Oi = class e {
5655
5790
  }
5656
5791
  _sendSharingStat() {
5657
5792
  let e = Date.now();
5658
- if (e - this._lastSharingStat > ea) {
5793
+ if (e - this._lastSharingStat > ua) {
5659
5794
  let t = this._congestionControl.getStat();
5660
5795
  t !== null && (this._debug.debug(`cc: send stats: ${JSON.stringify(t)}`), this._signaling.reportSharingStat(t).catch((e) => {
5661
5796
  !(e instanceof wn) && !(e instanceof Tn) && this._debug.warn("Unable to send sharing stats", e);
5662
5797
  })), this._lastSharingStat = e;
5663
5798
  }
5664
5799
  }
5665
- }, aa = class {
5800
+ }, ha = class {
5666
5801
  constructor(e, t, n, r = R, i = null) {
5667
5802
  h(this, "_pc", null), h(this, "_transceiver", null), h(this, "_currentSimulcastInfo", null), h(this, "_signaling", void 0), h(this, "_mediaSource", void 0), h(this, "_getCameraSettings", void 0), h(this, "_debug", void 0), h(this, "_logger", void 0), this._signaling = e, this._mediaSource = t, this._getCameraSettings = n, this._debug = r, this._logger = i;
5668
5803
  }
@@ -5794,9 +5929,9 @@ var wi = 2 ** 15 - 1, Ti = 1, Ei = 5, Di = 5, Oi = class e {
5794
5929
  if (!(e instanceof Tn)) throw e;
5795
5930
  }
5796
5931
  }
5797
- }, oa = 90, sa = 4294967295, ca = class e extends Nr {
5932
+ }, ga = 90, _a = 4294967295, va = class e extends Ur {
5798
5933
  constructor(e, t, n, r = R, i = null, a = null, o = null, s = null) {
5799
- super(e, t, s), h(this, "_producerNotification", null), h(this, "_producerCommand", null), h(this, "_producerScreen", null), h(this, "_consumerScreen", null), h(this, "_asr", null), h(this, "_animojiDataChannel", null), h(this, "_animojiReceiver", null), h(this, "_animojiSender", null), h(this, "_isOpen", !1), h(this, "_observer", !1), h(this, "_reconnectionPrevented", !1), h(this, "_statInterval", null), h(this, "_settingsInterval", null), h(this, "_monitorRtpShareInterval", null), h(this, "_statBytes", {}), h(this, "_ssrcMap", {}), h(this, "_ssrcMapUpdated", !1), h(this, "_perfStatReporter", void 0), h(this, "_producerOfferIsProcessing", !1), h(this, "_producerNextOffer", null), h(this, "_producerNextSessionId", null), h(this, "_lastStat", null), h(this, "_serverSettings", void 0), h(this, "_prevConsumerSettings", {}), h(this, "_prevConsumerFastSharingSettings", {}), h(this, "_asrTrack", null), h(this, "_captureSender", null), h(this, "_captureReceiver", null), h(this, "_participantIdRegistry", null), h(this, "_disabledSenders", /* @__PURE__ */ new Set()), h(this, "_rtpReceiversByStreamId", {}), h(this, "_producerSessionId", ""), h(this, "_newAudioShareTrack", null), h(this, "_debug", void 0), h(this, "_logger", void 0), h(this, "_statAggregator", void 0), h(this, "_codecStatsAggregator", void 0), h(this, "_simulcast", void 0), this._debug = r, this._logger = i, this._statAggregator = a, this._codecStatsAggregator = o, this._serverSettings = n, this._simulcast = new aa(e, t, () => this._serverSettings.camera, r, i), this.subscribe(this._signaling, G.NOTIFICATION, this._onSignalingNotification.bind(this)), this.subscribe(this._mediaSource, qt.TRACK_REPLACED, this._onReplacedTrack.bind(this)), this.subscribe(this._mediaSource, qt.SOURCE_CHANGED, this._onSourcesChanged.bind(this)), this.subscribe(this._mediaSource, qt.SCREEN_STATUS, this._onScreenSharingStatus.bind(this)), this._createPerfStatsReporter(), this._debug.debug("ServerTransport: Created");
5934
+ super(e, t, s), h(this, "_producerNotification", null), h(this, "_producerCommand", null), h(this, "_producerScreen", null), h(this, "_consumerScreen", null), h(this, "_asr", null), h(this, "_animojiDataChannel", null), h(this, "_animojiReceiver", null), h(this, "_animojiSender", null), h(this, "_isOpen", !1), h(this, "_observer", !1), h(this, "_reconnectionPrevented", !1), h(this, "_statInterval", null), h(this, "_settingsInterval", null), h(this, "_monitorRtpShareInterval", null), h(this, "_statBytes", {}), h(this, "_ssrcMap", {}), h(this, "_ssrcMapUpdated", !1), h(this, "_perfStatReporter", void 0), h(this, "_producerOfferIsProcessing", !1), h(this, "_producerNextOffer", null), h(this, "_producerNextSessionId", null), h(this, "_lastStat", null), h(this, "_serverSettings", void 0), h(this, "_prevConsumerSettings", {}), h(this, "_prevConsumerFastSharingSettings", {}), h(this, "_asrTrack", null), h(this, "_captureSender", null), h(this, "_captureReceiver", null), h(this, "_participantIdRegistry", null), h(this, "_disabledSenders", /* @__PURE__ */ new Set()), h(this, "_rtpReceiversByStreamId", {}), h(this, "_producerSessionId", ""), h(this, "_newAudioShareTrack", null), h(this, "_debug", void 0), h(this, "_logger", void 0), h(this, "_statAggregator", void 0), h(this, "_sdpStats", void 0), h(this, "_codecStatsAggregator", void 0), h(this, "_simulcast", void 0), this._debug = r, this._logger = i, this._statAggregator = a, this._sdpStats = new Pr(a), this._codecStatsAggregator = o, this._serverSettings = n, this._simulcast = new ha(e, t, () => this._serverSettings.camera, r, i), this.subscribe(this._signaling, G.NOTIFICATION, this._onSignalingNotification.bind(this)), this.subscribe(this._mediaSource, qt.TRACK_REPLACED, this._onReplacedTrack.bind(this)), this.subscribe(this._mediaSource, qt.SOURCE_CHANGED, this._onSourcesChanged.bind(this)), this.subscribe(this._mediaSource, qt.SCREEN_STATUS, this._onScreenSharingStatus.bind(this)), this._createPerfStatsReporter(), this._debug.debug("ServerTransport: Created");
5800
5935
  }
5801
5936
  updateStatisticsInterval() {
5802
5937
  this._stopStatInterval();
@@ -5835,10 +5970,10 @@ var wi = 2 ** 15 - 1, Ti = 1, Ei = 5, Di = 5, Oi = class e {
5835
5970
  await this._simulcast.sync();
5836
5971
  }
5837
5972
  _createPerfStatsReporter() {
5838
- this._perfStatReporter?.destroy(), this._perfStatReporter = new pa(this, this._signaling, this._statAggregator, !1, this._debug);
5973
+ this._perfStatReporter?.destroy(), this._perfStatReporter = new Ca(this, this._signaling, this._statAggregator, !1, this._debug);
5839
5974
  }
5840
5975
  _closeConnection() {
5841
- this._signaling.resetProducerConnection(), this._disposeFirstMediaSentProbe(), this._stopStatInterval(), this._stopSettingsInterval(), this._stopMonitorRtpShareInterval(), this._removeAsrTrack(), this._removeCaptureSender(), this._removeCaptureReceiver(), this._simulcast.reset(), this._pc && (this._rtpReceiversByStreamId = {}, this._disabledSenders.forEach((e) => e.track?.stop()), this._disabledSenders.clear(), this._pc.ontrack = null, this._pc.onconnectionstatechange = null, this._pc.onsignalingstatechange = null, this._participantIdRegistry = null, e._closeDataChannel(this._producerNotification), e._closeDataChannel(this._producerCommand), e._closeDataChannel(this._producerScreen), e._closeDataChannel(this._consumerScreen), e._closeDataChannel(this._asr), e._closeDataChannel(this._animojiDataChannel), this._pc.close(), this._pc = null, this._producerOfferIsProcessing = !1, this._producerNextOffer = null), this._triggerEvent(X.PEER_CONNECTION_CLOSED);
5976
+ this._signaling.resetProducerConnection(), this._ssrcMap = {}, this._ssrcMapUpdated = !0, this._disposeFirstMediaSentProbe(), this._stopStatInterval(), this._stopSettingsInterval(), this._stopMonitorRtpShareInterval(), this._removeAsrTrack(), this._removeCaptureSender(), this._removeCaptureReceiver(), this._simulcast.reset(), this._pc && (this._rtpReceiversByStreamId = {}, this._disabledSenders.forEach((e) => e.track?.stop()), this._disabledSenders.clear(), this._pc.ontrack = null, this._pc.onconnectionstatechange = null, this._pc.onsignalingstatechange = null, this._sdpStats.stop(), this._participantIdRegistry = null, e._closeDataChannel(this._producerNotification), e._closeDataChannel(this._producerCommand), e._closeDataChannel(this._producerScreen), e._closeDataChannel(this._consumerScreen), e._closeDataChannel(this._asr), e._closeDataChannel(this._animojiDataChannel), this._pc.close(), this._pc = null, this._producerOfferIsProcessing = !1, this._producerNextOffer = null), this._triggerEvent(X.PEER_CONNECTION_CLOSED);
5842
5977
  }
5843
5978
  static _closeDataChannel(e) {
5844
5979
  e && (e.onopen = null, e.onmessage = null, e.onerror = null, e.close());
@@ -5864,14 +5999,14 @@ var wi = 2 ** 15 - 1, Ti = 1, Ei = 5, Di = 5, Oi = class e {
5864
5999
  }
5865
6000
  this._pc.ontrack = this._onAddTrack.bind(this, this._pc), this._pc.onconnectionstatechange = j.debounce((e) => {
5866
6001
  this._pc && this._onConnectionStateChange(this._pc, e);
5867
- }, 500), this._pc.onsignalingstatechange = this._onSignalingStateChange.bind(this, this._pc), this._participantIdRegistry = new Qr(this._debug), this._signaling.setParticipantIdRegistry(this._participantIdRegistry), this._createDataChannel(this._pc, Sr.producerNotification, (e) => {
6002
+ }, 500), this._pc.onsignalingstatechange = this._onSignalingStateChange.bind(this, this._pc), this._sdpStats.observe(this._pc), this._participantIdRegistry = new ci(this._debug), this._signaling.setParticipantIdRegistry(this._participantIdRegistry), this._createDataChannel(this._pc, Sr.producerNotification, (e) => {
5868
6003
  this._producerNotification = e, this._producerNotification.binaryType = "arraybuffer", this._signaling.setProducerNotificationDataChannel(e);
5869
6004
  }), this._signaling.useCommandDataChannel(!0), this._createDataChannel(this._pc, Sr.producerCommand, (e) => {
5870
6005
  this._producerCommand = e, this._signaling.setProducerCommandDataChannel(e);
5871
6006
  }), this._createDataChannel(this._pc, Sr.producerScreenShare, (e) => {
5872
6007
  this._producerScreen = e, this._producerScreen.binaryType = "arraybuffer", this._createCaptureReceiver();
5873
6008
  }), M.asrDataChannel && this._createDataChannel(this._pc, Sr.asr, (e) => {
5874
- this._asr = e, this._asr.binaryType = "arraybuffer", this._removeAsrTrack(), this._asrTrack = new Yr(e, this._participantIdRegistry, (e) => {
6009
+ this._asr = e, this._asr.binaryType = "arraybuffer", this._removeAsrTrack(), this._asrTrack = new ai(e, this._participantIdRegistry, (e) => {
5875
6010
  this._onAsrTranscription(e);
5876
6011
  }, this._debug);
5877
6012
  }), M.vmoji && this._createDataChannel(this._pc, Sr.animoji, (e) => {
@@ -5908,20 +6043,20 @@ var wi = 2 ** 15 - 1, Ti = 1, Ei = 5, Di = 5, Oi = class e {
5908
6043
  this._triggerEvent(X.NETWORK_STATUS, e);
5909
6044
  }
5910
6045
  _updateSSRCMap(e) {
5911
- e && ln(e.sdp).forEach((e) => {
5912
- let t = `a=ssrc:([0-9]+) label:(audio|video)-((?:[ug]?[\\d]+)|(?:mix)|(?:${qr.PARTICIPANT_AGNOSTIC_TRACK_PREFIX}-[0-9]+)|(?:${qr.TRANSPARENT_AUDIO_TRACK_PREFIX}-[0-9]+))`, n = new RegExp(t).exec(e);
5913
- n && (this._ssrcMap[n[1]] = n[3], this._ssrcMapUpdated = !0);
5914
- });
6046
+ e && (this._ssrcMap = {}, this._ssrcMapUpdated = !0, ln(e.sdp).forEach((e) => {
6047
+ let t = `a=ssrc:([0-9]+) label:(audio|video)-((?:[ug]?[\\d]+)|(?:mix)|(?:${ri.PARTICIPANT_AGNOSTIC_TRACK_PREFIX}-[0-9]+)|(?:${ri.TRANSPARENT_AUDIO_TRACK_PREFIX}-[0-9]+))`, n = new RegExp(t).exec(e);
6048
+ n && (this._ssrcMap[n[1]] = n[3]);
6049
+ }));
5915
6050
  }
5916
6051
  _createCaptureSender(e) {
5917
6052
  let t = this._mediaSource.mediaSettings;
5918
- !e || !this._consumerScreen || !t.isScreenSharingEnabled || (this._captureSender && this._removeCaptureSender(), this._captureSender = new ia(e, this._consumerScreen, this._signaling, t.isFastScreenSharingEnabled, this._debug, this._logger));
6053
+ !e || !this._consumerScreen || !t.isScreenSharingEnabled || (this._captureSender && this._removeCaptureSender(), this._captureSender = new ma(e, this._consumerScreen, this._signaling, t.isFastScreenSharingEnabled, this._debug, this._logger));
5919
6054
  }
5920
6055
  _removeCaptureSender() {
5921
6056
  this._captureSender?.destroy(), this._captureSender = null;
5922
6057
  }
5923
6058
  _createCaptureReceiver() {
5924
- this._producerScreen && (this._captureReceiver && this._removeCaptureReceiver(), this._captureReceiver = new Ai(this._producerScreen, this._participantIdRegistry, (e, t) => {
6059
+ this._producerScreen && (this._captureReceiver && this._removeCaptureReceiver(), this._captureReceiver = new Bi(this._producerScreen, this._participantIdRegistry, (e, t) => {
5925
6060
  this._triggerEvent(X.REMOTE_STREAM_SECOND, e, t);
5926
6061
  }, (e) => {
5927
6062
  this._triggerEvent(X.REMOTE_STREAM_SECOND, e, null);
@@ -6031,7 +6166,7 @@ var wi = 2 ** 15 - 1, Ti = 1, Ei = 5, Di = 5, Oi = class e {
6031
6166
  _detectStaleTracks(e) {
6032
6167
  let t = e.rtps.find((e) => e.type === "inbound-rtp" && e.kind === "audio" && this._ssrcMap[e.ssrc] === "mix");
6033
6168
  if (!t) return;
6034
- let n = qr.AUDIO_MIX, r = this._statBytes[n], i = !1;
6169
+ let n = ri.AUDIO_MIX, r = this._statBytes[n], i = !1;
6035
6170
  if (r) {
6036
6171
  let e = t.bytesReceived - r.bytesReceived;
6037
6172
  e >= 0 && e <= 5 && (i = !0), r.stalled !== i && this._triggerEvent(X.AUDIO_MIX_STALL, i);
@@ -6043,31 +6178,31 @@ var wi = 2 ** 15 - 1, Ti = 1, Ei = 5, Di = 5, Oi = class e {
6043
6178
  }
6044
6179
  _allocateConsumer() {
6045
6180
  if (!this._signaling.ready) return;
6046
- let e = ya.get();
6181
+ let e = ka.get();
6047
6182
  !M.videoTracksCount && !this._observer && this._debug.warn("Setting videoTracksCount to 0 is deprecated"), this._signaling.allocateConsumer(null, e).catch((e) => {
6048
6183
  e instanceof wn || this._debug.warn("ServerTransport: Unable to allocate consumer", e);
6049
6184
  });
6050
6185
  }
6051
6186
  async _processOffer(e, t) {
6052
6187
  if (!this._pc) throw Error("Interrupt allocation");
6188
+ this._sdpStats.logSdpReceived(e.type);
6053
6189
  try {
6054
6190
  await this._pc.setRemoteDescription(e);
6055
- } catch (e) {
6056
- throw this._debug.error("[single] unable to set remote offer", e), this._logger?.log(C.ERROR, "setRemoteDescription-single"), e;
6191
+ } catch (t) {
6192
+ throw this._debug.error("[single] unable to set remote offer", t), this._logger?.log(C.ERROR, "setRemoteDescription-single"), this._sdpStats.logSetRemoteFailed(e, t), t;
6057
6193
  }
6058
- await this._simulcast.configureFromRemoteOffer(this._pc);
6194
+ if (await this._simulcast.configureFromRemoteOffer(this._pc), await this._handleTracks(), this._debug.debug("[single] create local answer"), !this._pc) throw Error("Interrupt allocation");
6059
6195
  let n;
6060
6196
  try {
6061
- if (await this._handleTracks(), this._debug.debug("[single] create local answer"), !this._pc) throw Error("Interrupt allocation");
6062
- n = await this._pc.createAnswer();
6197
+ n = await this._pc.createAnswer(), this._sdpStats.logSdpGenerated("answer");
6063
6198
  } catch (e) {
6064
- throw this._debug.error("[single] unable to create answer", e), this._logger?.log(C.ERROR, "createAnswer-single"), e;
6199
+ throw this._debug.error("[single] unable to create answer", e), this._logger?.log(C.ERROR, "createAnswer-single"), this._sdpStats.logCreateFailed("answer", e), e;
6065
6200
  }
6066
6201
  try {
6067
6202
  if (!this._pc) throw Error("Interrupt allocation");
6068
6203
  n.sdp = j.patchLocalSDP(n.sdp, !1, T.isBrokenH264Decoder(), !1), this._debug.debug("[single] set local answer", { answer: n }), await this._pc.setLocalDescription(n);
6069
6204
  } catch (e) {
6070
- throw this._debug.error("[single] unable to set local answer", e), this._logger?.log(C.ERROR, "setLocalDescription-single"), e;
6205
+ throw this._debug.error("[single] unable to set local answer", e), this._logger?.log(C.ERROR, "setLocalDescription-single"), this._sdpStats.logSetLocalFailed(n, e), e;
6071
6206
  }
6072
6207
  n.sdp = this._simulcast.finalizeAnswer(n.sdp);
6073
6208
  try {
@@ -6219,11 +6354,11 @@ var wi = 2 ** 15 - 1, Ti = 1, Ei = 5, Di = 5, Oi = class e {
6219
6354
  if (!r || !r.length) return this._debug.log(`Cannot get stream waiting time, ${e} receiver has no synchronization sources`), 0;
6220
6355
  let i = r[0].rtpTimestamp;
6221
6356
  if (!Number.isInteger(i)) return this._logger?.log(C.PAT_WAITING_TIME_ERROR, "timestampNotInteger"), this._debug.error(`Cannot get stream waiting time, ${e} receiver's RTP timestamp is not an integer: ${i}`), 0;
6222
- let a = t - i & sa, o = Math.ceil(a / oa);
6357
+ let a = t - i & _a, o = Math.ceil(a / ga);
6223
6358
  return Math.min(100, Math.max(0, o));
6224
6359
  }
6225
6360
  async _monitorRtpShare() {
6226
- let e = Zr.getInstance().value;
6361
+ let e = si.getInstance().value;
6227
6362
  if (!this._mediaSource.mediaSettings.isFastScreenSharingEnabled || !M.consumerFastScreenShare || e < .6) return;
6228
6363
  let t = this._pc?.getSenders().find((e) => e.track?.kind === k.video && e.track?.contentHint === "motion");
6229
6364
  t && (await t.getStats()).forEach((e) => {
@@ -6254,7 +6389,7 @@ var wi = 2 ** 15 - 1, Ti = 1, Ei = 5, Di = 5, Oi = class e {
6254
6389
  }
6255
6390
  }, X = /* @__PURE__ */ function(e) {
6256
6391
  return e.REMOTE_TRACK_ADDED = "REMOTE_TRACK_ADDED", e.REMOTE_TRACK_REMOVED = "REMOTE_TRACK_REMOVED", e.REMOTE_STREAM_SECOND = "REMOTE_STREAM_SECOND", e.AUDIO_MIX_STALL = "AUDIO_MIX_STALL", e.REMOTE_DATA_STATS = "REMOTE_DATA_STATS", e.STATE_CHANGED = "STATE_CHANGED", e.LOCAL_STATE_CHANGED = "LOCAL_STATE_CHANGED", e.SIGNALLED_ACTIVE_PARTICIPANTS = "SIGNALLED_ACTIVE_PARTICIPANTS", e.SIGNALLED_SPEAKER_CHANGED = "SIGNALLED_SPEAKER_CHANGED", e.SIGNALLED_STALLED_PARTICIPANTS = "SIGNALLED_STALLED_PARTICIPANTS", e.TOPOLOGY_CHANGED = "TOPOLOGY_CHANGED", e.NETWORK_STATUS = "NETWORK_STATUS", e.PEER_CONNECTION_CLOSED = "PEER_CONNECTION_CLOSED", e.ASR_TRANSCRIPTION = "ASR_TRANSCRIPTION", e.ANIMOJI_STREAM = "ANIMOJI_STREAM", e.ANIMOJI_ERROR = "ANIMOJI_ERROR", e.SCREEN_SHARING_STAT = "SCREEN_SHARING_STAT", e;
6257
- }({}), la = class extends b {
6392
+ }({}), ya = class extends b {
6258
6393
  constructor(e, t, n, r, i = R, a = null, o = null, s = null, c = null) {
6259
6394
  super(), h(this, "_signaling", void 0), h(this, "_mediaSource", void 0), h(this, "_topology", void 0), h(this, "_allocated", []), h(this, "_opened", []), h(this, "_directTransport", null), h(this, "_serverTransport", null), h(this, "_serverSettings", void 0), h(this, "_dtListeners", []), h(this, "_stListeners", []), h(this, "_states", {}), h(this, "_localState", q.IDLE), h(this, "_animojiReceiver", null), h(this, "_animojiSender", null), h(this, "_debug", void 0), h(this, "_logger", void 0), h(this, "_statAggregator", void 0), h(this, "_codecStatsAggregator", void 0), h(this, "_onFirstMediaSent", void 0), h(this, "_firstMediaSentProbeStopped", !1), h(this, "_vadController", null), h(this, "_updateVadTrack", () => {
6260
6395
  this._vadController?.setSendTrack(this._mediaSource.getSendAudioTrack());
@@ -6375,11 +6510,11 @@ var wi = 2 ** 15 - 1, Ti = 1, Ei = 5, Di = 5, Oi = class e {
6375
6510
  }
6376
6511
  }
6377
6512
  _createDirectTransport(e, t = !1) {
6378
- let n = new Kr(e, t, this._signaling, this._mediaSource, this._serverSettings, this._debug, this._logger, this._statAggregator, this._codecStatsAggregator, this._getFirstMediaSentCallback());
6513
+ let n = new ni(e, t, this._signaling, this._mediaSource, this._serverSettings, this._debug, this._logger, this._statAggregator, this._codecStatsAggregator, this._getFirstMediaSentCallback());
6379
6514
  return this._dtListeners.length > 0 && this._debug.warn(`The list of direct listeners for the participant [${e}] is not empty`), this._dtListeners = [], this._dtListeners.push(n.addEventListener("REMOTE_TRACK_ADDED", this._onRemoteTrackAdded.bind(this, e)), n.addEventListener("REMOTE_TRACK_REMOVED", this._onRemoteTrackRemoved.bind(this, e)), n.addEventListener("REMOTE_DATA_STATS", this._onRemoteDataStats.bind(this)), n.addEventListener("STATE_CHANGED", this._onDirectTransportChanged.bind(this)), n.addEventListener("NETWORK_STATUS", this._onTransportNetworkStatus.bind(this)), n.addEventListener("PEER_CONNECTION_CLOSED", this._onPeerConnectionClosed.bind(this, J.DIRECT))), this._animojiReceiver && this._animojiSender && n.setAnimojiTransport(this._animojiReceiver, this._animojiSender), n;
6380
6515
  }
6381
6516
  _createServerTransport() {
6382
- let e = new ca(this._signaling, this._mediaSource, this._serverSettings, this._debug, this._logger, this._statAggregator, this._codecStatsAggregator, this._getFirstMediaSentCallback());
6517
+ let e = new va(this._signaling, this._mediaSource, this._serverSettings, this._debug, this._logger, this._statAggregator, this._codecStatsAggregator, this._getFirstMediaSentCallback());
6383
6518
  return this._stListeners.length > 0 && this._debug.warn("The list of server transport listeners is not empty"), this._stListeners = [], this._stListeners.push(e.addEventListener("REMOTE_TRACK_ADDED", this._onRemoteTrackAdded.bind(this)), e.addEventListener("REMOTE_TRACK_REMOVED", this._onRemoteTrackRemoved.bind(this)), e.addEventListener("AUDIO_MIX_STALL", this._onServerAudioMixStall.bind(this)), e.addEventListener("REMOTE_DATA_STATS", this._onRemoteDataStats.bind(this)), e.addEventListener("STATE_CHANGED", this._onServerTransportChanged.bind(this)), e.addEventListener("SIGNALLED_ACTIVE_PARTICIPANTS", this._onTransportActiveParticipants.bind(this)), e.addEventListener("SIGNALLED_SPEAKER_CHANGED", this._onTransportSpeakerChanged.bind(this)), e.addEventListener("SIGNALLED_STALLED_PARTICIPANTS", this._onTransportStalledParticipants.bind(this)), e.addEventListener("NETWORK_STATUS", this._onTransportNetworkStatus.bind(this)), e.addEventListener("REMOTE_STREAM_SECOND", this._onRemoteStreamSecond.bind(this)), e.addEventListener("PEER_CONNECTION_CLOSED", this._onPeerConnectionClosed.bind(this, J.SERVER)), e.addEventListener("ASR_TRANSCRIPTION", this._onAsrTranscription.bind(this))), this._animojiReceiver && this._animojiSender && e.setAnimojiTransport(this._animojiReceiver, this._animojiSender), e;
6384
6519
  }
6385
6520
  _releaseDirectTransport() {
@@ -6471,7 +6606,7 @@ var wi = 2 ** 15 - 1, Ti = 1, Ei = 5, Di = 5, Oi = class e {
6471
6606
  getStreamWaitingTimeMs(e, t) {
6472
6607
  return this._topology === J.SERVER ? this._serverTransport ? this._serverTransport.getStreamWaitingTimeMs(e, t) : (this._logger?.log(C.PAT_WAITING_TIME_ERROR, "noTransport"), this._debug.error("Cannot get stream waiting time, server transport is not initialized"), 0) : (this._logger?.log(C.PAT_WAITING_TIME_ERROR, "wrongTopology"), this._debug.error(`Cannot get stream waiting time, incorrect topology: ${this._topology}`), 0);
6473
6608
  }
6474
- }, ua = "videochat-epi", da = 5e3, fa = 500, pa = class extends b {
6609
+ }, ba = "videochat-epi", xa = 5e3, Sa = 500, Ca = class extends b {
6475
6610
  constructor(e, t, n = null, r = !1, i = R) {
6476
6611
  super(), h(this, "_previousPerfStatReportTimestamp", 0), h(this, "_previousNetworkStatReportTimestamp", Date.now()), h(this, "_previousCallStatReportTimestamp", Date.now()), h(this, "_previousCallStatReport", null), h(this, "_previousRemoteInboundRtps", /* @__PURE__ */ new Map()), h(this, "_screenShareStats", []), h(this, "_signaling", void 0), h(this, "_directTopology", void 0), h(this, "_debug", void 0), h(this, "_statAggregator", void 0), h(this, "_handleScreenSharingStat", (e) => {
6477
6612
  this._screenShareStats.push(e);
@@ -6484,7 +6619,7 @@ var wi = 2 ** 15 - 1, Ti = 1, Ei = 5, Di = 5, Oi = class e {
6484
6619
  }
6485
6620
  static getEstimatedPerformanceIndex() {
6486
6621
  try {
6487
- let e = parseInt(localStorage.getItem(ua) || "", 10);
6622
+ let e = parseInt(localStorage.getItem(ba) || "", 10);
6488
6623
  return isNaN(e) ? 0 : e;
6489
6624
  } catch {
6490
6625
  return 0;
@@ -6493,9 +6628,9 @@ var wi = 2 ** 15 - 1, Ti = 1, Ei = 5, Di = 5, Oi = class e {
6493
6628
  async _handleStats(e) {
6494
6629
  if (!e.inbound || !e.inbound.rtps) return;
6495
6630
  let t = Date.now();
6496
- !this._directTopology && M.perfStatReportEnabled && this._previousPerfStatReportTimestamp + da <= t && (await this.reportPerfStats(e), this._previousPerfStatReportTimestamp = t);
6631
+ !this._directTopology && M.perfStatReportEnabled && this._previousPerfStatReportTimestamp + xa <= t && (await this.reportPerfStats(e), this._previousPerfStatReportTimestamp = t);
6497
6632
  let n = e.outbound.transport.local?.protocol === "tcp";
6498
- !this._directTopology && n && this._previousNetworkStatReportTimestamp + fa <= t && (await this.reportNetworkStats(e), this._previousNetworkStatReportTimestamp = t), M.callStatReportEnabled && this._previousCallStatReportTimestamp + M.statisticsInterval <= t && (this._reportCallStats(e), this._previousCallStatReportTimestamp = t);
6633
+ !this._directTopology && n && this._previousNetworkStatReportTimestamp + Sa <= t && (await this.reportNetworkStats(e), this._previousNetworkStatReportTimestamp = t), M.callStatReportEnabled && this._previousCallStatReportTimestamp + M.statisticsInterval <= t && (this._reportCallStats(e), this._previousCallStatReportTimestamp = t);
6499
6634
  }
6500
6635
  async reportPerfStats(e) {
6501
6636
  let t = e.inbound.rtps.reduce((e, t) => (t.kind === "video" && (e.framesDecoded += t.framesDecoded || 0, e.framesReceived += t.framesReceived || 0), e), {
@@ -6504,7 +6639,7 @@ var wi = 2 ** 15 - 1, Ti = 1, Ei = 5, Di = 5, Oi = class e {
6504
6639
  });
6505
6640
  if (t.framesDecoded) try {
6506
6641
  let e = await this._signaling.reportPerfStat(t);
6507
- localStorage.setItem(ua, e.estimatedPerformanceIndex);
6642
+ localStorage.setItem(ba, e.estimatedPerformanceIndex);
6508
6643
  } catch {}
6509
6644
  }
6510
6645
  async reportNetworkStats(e) {
@@ -6544,11 +6679,11 @@ var wi = 2 ** 15 - 1, Ti = 1, Ei = 5, Di = 5, Oi = class e {
6544
6679
  rtt: Math.round(e.inbound.transport.currentRoundTripTime * 1e3),
6545
6680
  ss_freeze_count: 0,
6546
6681
  ss_total_freezes_duration: 0,
6547
- local_address: ha(e.inbound.transport.local),
6682
+ local_address: Ta(e.inbound.transport.local),
6548
6683
  local_connection_type: e.inbound.transport.local?.type,
6549
6684
  network_type: e.inbound.transport.local?.networkType,
6550
6685
  transport: e.inbound.transport.local?.protocol,
6551
- remote_address: ha(e.inbound.transport.remote),
6686
+ remote_address: Ta(e.inbound.transport.remote),
6552
6687
  remote_connection_type: e.inbound.transport.remote?.type
6553
6688
  };
6554
6689
  this._previousCallStatReport || (this._previousCallStatReport = Object.assign({}, t));
@@ -6569,11 +6704,11 @@ var wi = 2 ** 15 - 1, Ti = 1, Ei = 5, Di = 5, Oi = class e {
6569
6704
  frames_dropped: Math.max(0, t.frames_dropped - this._previousCallStatReport.frames_dropped),
6570
6705
  rtt: Math.max(0, t.rtt)
6571
6706
  };
6572
- if (M.simulcast && (i.is_simulcast = !0), navigator.hardwareConcurrency && (i.cpu_hardware_concurrency = navigator.hardwareConcurrency), n && !ga(t.jitter_video) && (i.jitter_video = Math.round(t.jitter_video)), r && !ga(t.jitter_audio) && (i.jitter_audio = Math.round(t.jitter_audio)), n && !ga(t.interframe_delay_variance) && (i.interframe_delay_variance = t.interframe_delay_variance), t.freeze_count && t.total_freezes_duration && (i.freeze_count = t.freeze_count, i.total_freezes_duration = Math.round(t.total_freezes_duration * 1e3)), t.ss_freeze_count && t.ss_total_freezes_duration && (i.ss_freeze_count = t.ss_freeze_count, i.ss_total_freezes_duration = t.ss_total_freezes_duration), r && !ga(t.total_audio_samples_received)) {
6707
+ if (M.simulcast && (i.is_simulcast = !0), navigator.hardwareConcurrency && (i.cpu_hardware_concurrency = navigator.hardwareConcurrency), n && !Ea(t.jitter_video) && (i.jitter_video = Math.round(t.jitter_video)), r && !Ea(t.jitter_audio) && (i.jitter_audio = Math.round(t.jitter_audio)), n && !Ea(t.interframe_delay_variance) && (i.interframe_delay_variance = t.interframe_delay_variance), t.freeze_count && t.total_freezes_duration && (i.freeze_count = t.freeze_count, i.total_freezes_duration = Math.round(t.total_freezes_duration * 1e3)), t.ss_freeze_count && t.ss_total_freezes_duration && (i.ss_freeze_count = t.ss_freeze_count, i.ss_total_freezes_duration = t.ss_total_freezes_duration), r && !Ea(t.total_audio_samples_received)) {
6573
6708
  let e = Math.max(0, t.total_audio_samples_received - this._previousCallStatReport.total_audio_samples_received), n = Math.max(0, t.inserted_audio_samples_for_deceleration - this._previousCallStatReport.inserted_audio_samples_for_deceleration), r = Math.max(0, t.removed_audio_samples_for_acceleration - this._previousCallStatReport.removed_audio_samples_for_acceleration), a = Math.max(0, t.concealed_audio_samples - this._previousCallStatReport.concealed_audio_samples), o = Math.max(0, t.silent_concealed_audio_samples - this._previousCallStatReport.silent_concealed_audio_samples), s = Math.max(0, t.audio_concealment_events - this._previousCallStatReport.audio_concealment_events);
6574
- i.inserted_audio_samples_for_deceleration = _a(n / e * 1e3), i.removed_audio_samples_for_acceleration = _a(r / e * 1e3), i.concealed_audio_samples = _a(a / e * 1e3), i.concealed_silent_audio_samples = _a(o / e * 1e3), i.concealment_audio_avg_size = _a(a / s), i.total_audio_energy = t.total_audio_energy;
6709
+ i.inserted_audio_samples_for_deceleration = Da(n / e * 1e3), i.removed_audio_samples_for_acceleration = Da(r / e * 1e3), i.concealed_audio_samples = Da(a / e * 1e3), i.concealed_silent_audio_samples = Da(o / e * 1e3), i.concealment_audio_avg_size = Da(a / s), i.total_audio_energy = t.total_audio_energy;
6575
6710
  }
6576
- ma(t, "local_address", "local_connection_type", "network_type", "transport") && (i.local_address = t.local_address, i.local_connection_type = t.local_connection_type, i.network_type = t.network_type, i.transport = t.transport), ma(t, "remote_address", "remote_connection_type") && (i.remote_address = t.remote_address, i.remote_connection_type = t.remote_connection_type);
6711
+ wa(t, "local_address", "local_connection_type", "network_type", "transport") && (i.local_address = t.local_address, i.local_connection_type = t.local_connection_type, i.network_type = t.network_type, i.transport = t.transport), wa(t, "remote_address", "remote_connection_type") && (i.remote_address = t.remote_address, i.remote_connection_type = t.remote_connection_type);
6577
6712
  let a = this._calculatePacketLoss(e.remoteInbound.rtps);
6578
6713
  a.video !== void 0 && (i.video_loss = a.video), a.audio !== void 0 && (i.audio_loss = a.audio), this._statAggregator?.logCallStat(i), M.enableLogPerfStatReport && this._debug.log("Sent call stats", i), this._previousCallStatReport = t;
6579
6714
  }
@@ -6605,26 +6740,26 @@ var wi = 2 ** 15 - 1, Ti = 1, Ei = 5, Di = 5, Oi = class e {
6605
6740
  return r;
6606
6741
  }
6607
6742
  };
6608
- function ma(e, ...t) {
6743
+ function wa(e, ...t) {
6609
6744
  for (let n of t) if (!Object.hasOwn(e, n) || e[n] === void 0) return !1;
6610
6745
  return !0;
6611
6746
  }
6612
- function ha(e, t = !1) {
6747
+ function Ta(e, t = !1) {
6613
6748
  if (e?.address) return e.address + (t ? `:${e.port}` : "");
6614
6749
  }
6615
- function ga(e) {
6750
+ function Ea(e) {
6616
6751
  return e === void 0;
6617
6752
  }
6618
- function _a(e) {
6753
+ function Da(e) {
6619
6754
  return Number.isNaN(e) ? 0 : e;
6620
6755
  }
6621
6756
  //#endregion
6622
6757
  //#region src/static/Capabilities.ts
6623
- var va;
6758
+ var Oa;
6624
6759
  (function(e) {
6625
6760
  function t() {
6626
6761
  return {
6627
- estimatedPerformanceIndex: pa.getEstimatedPerformanceIndex(),
6762
+ estimatedPerformanceIndex: Ca.getEstimatedPerformanceIndex(),
6628
6763
  audioMix: !0,
6629
6764
  consumerUpdate: !0,
6630
6765
  producerNotificationDataChannelVersion: 8,
@@ -6650,8 +6785,8 @@ var va;
6650
6785
  };
6651
6786
  }
6652
6787
  e.get = t;
6653
- })(va || (va = {}));
6654
- var ya = va, ba = {
6788
+ })(Oa || (Oa = {}));
6789
+ var ka = Oa, Aa = {
6655
6790
  producerScreenTrack: () => !0,
6656
6791
  videoTracksCount: () => M.videoTracksCount > 0,
6657
6792
  waitingHall: () => !0,
@@ -6671,28 +6806,28 @@ var ya = va, ba = {
6671
6806
  p2pRelay: () => !1,
6672
6807
  waitForAdmin: () => M.waitForAdminInGroupCalls,
6673
6808
  hold: () => M.hold
6674
- }, xa = class {
6809
+ }, ja = class {
6675
6810
  static getFlags() {
6676
- let e = Object.values(ba), t = 0;
6811
+ let e = Object.values(Aa), t = 0;
6677
6812
  for (let n = 0; n < e.length; n++) e[n]() && (t |= 1 << n);
6678
6813
  return t.toString(16).toUpperCase();
6679
6814
  }
6680
6815
  static parseCapabilities(e) {
6681
6816
  let t = parseInt(e || "0", 16);
6682
- return Object.keys(ba).reduce((e, n, r) => (e[n] = !!(t & 1 << r), e), {});
6817
+ return Object.keys(Aa).reduce((e, n, r) => (e[n] = !!(t & 1 << r), e), {});
6683
6818
  }
6684
- }, Sa = 63n, Ca = 16383n, wa = 1073741823, Ta = 4611686018427387903n, Ea = class {
6819
+ }, Ma = 63n, Na = 16383n, Pa = 1073741823, Fa = 4611686018427387903n, Ia = class {
6685
6820
  encode(e) {
6686
6821
  let t = typeof e == "number" ? BigInt(e) : e;
6687
- if (t <= Sa) return new Uint8Array([Number(t)]);
6688
- if (t <= Ca) return new Uint8Array([64 | Number(t >> 8n), Number(t & 255n)]);
6689
- if (t <= BigInt(wa)) return new Uint8Array([
6822
+ if (t <= Ma) return new Uint8Array([Number(t)]);
6823
+ if (t <= Na) return new Uint8Array([64 | Number(t >> 8n), Number(t & 255n)]);
6824
+ if (t <= BigInt(Pa)) return new Uint8Array([
6690
6825
  128 | Number(t >> 24n),
6691
6826
  Number(t >> 16n & 255n),
6692
6827
  Number(t >> 8n & 255n),
6693
6828
  Number(t & 255n)
6694
6829
  ]);
6695
- if (t <= Ta) return new Uint8Array([
6830
+ if (t <= Fa) return new Uint8Array([
6696
6831
  192 | Number(t >> 56n),
6697
6832
  Number(t >> 48n & 255n),
6698
6833
  Number(t >> 40n & 255n),
@@ -6704,7 +6839,7 @@ var ya = va, ba = {
6704
6839
  ]);
6705
6840
  throw RangeError("Number is too large to encode using varint");
6706
6841
  }
6707
- }, Da = class {
6842
+ }, La = class {
6708
6843
  decode(e) {
6709
6844
  let t = this.getNumBytesForLengthInteger(e);
6710
6845
  if (t < 0) throw Error("Invalid length prefix");
@@ -6730,9 +6865,9 @@ var ya = va, ba = {
6730
6865
  let t = e[0] & 192;
6731
6866
  return t === 0 ? 1 : t === 64 ? 2 : t === 128 ? 4 : t === 192 ? 8 : -1;
6732
6867
  }
6733
- }, Oa = class {
6868
+ }, Ra = class {
6734
6869
  constructor(e) {
6735
- h(this, "encoder", void 0), h(this, "compression", void 0), h(this, "lengthEncoder", void 0), this.encoder = new TextEncoder(), this.lengthEncoder = new Ea(), this.compression = e ?? null;
6870
+ h(this, "encoder", void 0), h(this, "compression", void 0), h(this, "lengthEncoder", void 0), this.encoder = new TextEncoder(), this.lengthEncoder = new Ia(), this.compression = e ?? null;
6736
6871
  }
6737
6872
  encode(e) {
6738
6873
  let t = this.encoder.encode(e);
@@ -6749,9 +6884,9 @@ var ya = va, ba = {
6749
6884
  default: return e;
6750
6885
  }
6751
6886
  }
6752
- }, ka = class {
6887
+ }, za = class {
6753
6888
  constructor(e) {
6754
- h(this, "decoder", void 0), h(this, "compression", void 0), h(this, "lengthDecoder", void 0), h(this, "buffer", void 0), h(this, "expectedLength", void 0), h(this, "offset", void 0), h(this, "lengthPrefixLength", void 0), this.decoder = new TextDecoder(), this.lengthDecoder = new Da(), this.compression = e ?? null, this.buffer = new Uint8Array(), this.expectedLength = null, this.offset = 0;
6889
+ h(this, "decoder", void 0), h(this, "compression", void 0), h(this, "lengthDecoder", void 0), h(this, "buffer", void 0), h(this, "expectedLength", void 0), h(this, "offset", void 0), h(this, "lengthPrefixLength", void 0), this.decoder = new TextDecoder(), this.lengthDecoder = new La(), this.compression = e ?? null, this.buffer = new Uint8Array(), this.expectedLength = null, this.offset = 0;
6755
6890
  }
6756
6891
  decode(e) {
6757
6892
  let t = [];
@@ -6781,12 +6916,12 @@ var ya = va, ba = {
6781
6916
  default: return e;
6782
6917
  }
6783
6918
  }
6784
- }, Aa = class {
6919
+ }, Ba = class {
6785
6920
  static isBrowserSupported() {
6786
6921
  return !(!("WebTransport" in window && typeof WebTransport == "function") || T.browserName() === "Safari");
6787
6922
  }
6788
6923
  constructor(e, t = {}, n = R) {
6789
- h(this, "onopen", null), h(this, "onmessage", null), h(this, "onerror", null), h(this, "onclose", null), h(this, "readyState", WebSocket.CONNECTING), h(this, "webTransport", null), h(this, "writer", null), h(this, "url", void 0), h(this, "options", void 0), h(this, "compression", void 0), h(this, "encoder", void 0), h(this, "decoder", void 0), h(this, "_debug", void 0), this._debug = n, this.url = e, this.options = t, this.compression = this.getCompressionTypeFromUrl(e), this.encoder = new Oa(this.compression), this.decoder = new ka(this.compression), this.connect();
6924
+ h(this, "onopen", null), h(this, "onmessage", null), h(this, "onerror", null), h(this, "onclose", null), h(this, "readyState", WebSocket.CONNECTING), h(this, "webTransport", null), h(this, "writer", null), h(this, "url", void 0), h(this, "options", void 0), h(this, "compression", void 0), h(this, "encoder", void 0), h(this, "decoder", void 0), h(this, "_debug", void 0), this._debug = n, this.url = e, this.options = t, this.compression = this.getCompressionTypeFromUrl(e), this.encoder = new Ra(this.compression), this.decoder = new za(this.compression), this.connect();
6790
6925
  }
6791
6926
  async send(e) {
6792
6927
  if (this.readyState !== WebSocket.OPEN) {
@@ -6912,9 +7047,9 @@ var ya = va, ba = {
6912
7047
  compression: this.compression
6913
7048
  }, n;
6914
7049
  }
6915
- }, ja = /* @__PURE__ */ function(e) {
7050
+ }, Va = /* @__PURE__ */ function(e) {
6916
7051
  return e.EMPTY_ENDPOINT = "EMPTY_ENDPOINT", e.NETWORK_ERROR = "NETWORK_ERROR", e.ABORTED = "ABORTED", e;
6917
- }({}), Ma = class {
7052
+ }({}), Ha = class {
6918
7053
  constructor(e = R, t) {
6919
7054
  h(this, "handlers", void 0), h(this, "socket", null), h(this, "endpoint", ""), h(this, "wtEndpoint", null), h(this, "peerId", null), h(this, "lastStamp", 0), h(this, "connectionType", void 0), h(this, "reconnectCount", 0), h(this, "reconnectTimer", 0), h(this, "doctorTimer", 0), h(this, "forceWebSocket", !1), h(this, "abortSignal", void 0), h(this, "manualClose", !1), h(this, "currentType", yr.WEBSOCKET), h(this, "_debug", void 0), this.handlers = t, this._debug = e;
6920
7055
  }
@@ -6964,7 +7099,7 @@ var ya = va, ba = {
6964
7099
  return;
6965
7100
  }
6966
7101
  let e = this._buildUrl(this.wtEndpoint, !0);
6967
- this.currentType = yr.WEBTRANSPORT, this.socket = new Aa(e, { congestionControl: "low-latency" }, this._debug), this._setSocketHandlers();
7102
+ this.currentType = yr.WEBTRANSPORT, this.socket = new Ba(e, { congestionControl: "low-latency" }, this._debug), this._setSocketHandlers();
6968
7103
  }
6969
7104
  _connectWebSocket() {
6970
7105
  if (!this.endpoint) {
@@ -6987,10 +7122,10 @@ var ya = va, ba = {
6987
7122
  }
6988
7123
  _buildUrl(e, t) {
6989
7124
  let n = new URL(e), r = n.searchParams;
6990
- return r.set("platform", M.platform), r.set("appVersion", String(M.appVersion)), r.set("version", String(M.protocolVersion)), r.set("device", M.device), r.set("capabilities", xa.getFlags()), r.set("clientType", M.clientType), this.connectionType && r.set("tgt", this.connectionType), this.connectionType === vr.RETRY && this.lastStamp && r.set("recoverTs", String(this.lastStamp)), M.useParticipantListChunk && (r.set("partIdx", String(M.participantListChunkInitIndex)), M.participantListChunkInitCount !== null && r.set("partCount", String(M.participantListChunkInitCount))), t && (r.set("compression", "deflate-raw"), r.set("ua", navigator.userAgent)), this.peerId !== null && r.set("peerId", String(this.peerId)), n.toString();
7125
+ return r.set("platform", M.platform), r.set("appVersion", M.appVersion), r.set("version", String(M.protocolVersion)), r.set("device", M.device), r.set("capabilities", ja.getFlags()), r.set("clientType", M.clientType), this.connectionType && r.set("tgt", this.connectionType), this.connectionType === vr.RETRY && this.lastStamp && r.set("recoverTs", String(this.lastStamp)), M.useParticipantListChunk && (r.set("partIdx", String(M.participantListChunkInitIndex)), M.participantListChunkInitCount !== null && r.set("partCount", String(M.participantListChunkInitCount))), t && (r.set("compression", "deflate-raw"), r.set("ua", navigator.userAgent)), this.peerId !== null && r.set("peerId", String(this.peerId)), n.toString();
6991
7126
  }
6992
7127
  _canUseWebTransport() {
6993
- return !this.forceWebSocket && Aa.isBrowserSupported() && this.wtEndpoint !== null && M.webtransport;
7128
+ return !this.forceWebSocket && Ba.isBrowserSupported() && this.wtEndpoint !== null && M.webtransport;
6994
7129
  }
6995
7130
  _onOpen() {
6996
7131
  this._startDoctor(), this.handlers.onOpen();
@@ -7044,31 +7179,31 @@ var ya = va, ba = {
7044
7179
  _stopDoctor() {
7045
7180
  window.clearTimeout(this.doctorTimer), this.doctorTimer = 0;
7046
7181
  }
7047
- }, Na = "open", Pa = 10, Fa = {
7182
+ }, Ua = "open", Wa = 10, Ga = {
7048
7183
  CONVERSATION_ENDED: "conversation-ended",
7049
7184
  OBSOLETE_CLIENT: "gen.obsoleteClient",
7050
7185
  INVALID_TOKEN: "invalid-token",
7051
7186
  PARTICIPANT_NOT_FOUND: "participant-not-found",
7052
7187
  ILLEGAL_PARTICIPANT_STATE: "illegal-participant-state",
7053
7188
  SERVICE_UNAVAILABLE: "service-unavailable"
7054
- }, Ia = {
7055
- [Fa.CONVERSATION_ENDED]: "conversation-ended",
7056
- [Fa.OBSOLETE_CLIENT]: "obsolete-client",
7057
- [Fa.INVALID_TOKEN]: "invalid-token",
7058
- [Fa.PARTICIPANT_NOT_FOUND]: "participant-not-found",
7059
- [Fa.ILLEGAL_PARTICIPANT_STATE]: "illegal-participant-state",
7060
- [Fa.SERVICE_UNAVAILABLE]: "service-unavailable"
7189
+ }, Ka = {
7190
+ [Ga.CONVERSATION_ENDED]: "conversation-ended",
7191
+ [Ga.OBSOLETE_CLIENT]: "obsolete-client",
7192
+ [Ga.INVALID_TOKEN]: "invalid-token",
7193
+ [Ga.PARTICIPANT_NOT_FOUND]: "participant-not-found",
7194
+ [Ga.ILLEGAL_PARTICIPANT_STATE]: "illegal-participant-state",
7195
+ [Ga.SERVICE_UNAVAILABLE]: "service-unavailable"
7061
7196
  };
7062
- function La(e, t) {
7197
+ function qa(e, t) {
7063
7198
  return e.errorMessage ?? e.message ?? e.error ?? t;
7064
7199
  }
7065
- var Ra = new Set([
7200
+ var Ja = new Set([
7066
7201
  D.CALLER_IS_BLOCKED,
7067
7202
  D.ENDED,
7068
7203
  D.NOT_FOUND,
7069
7204
  D.PARTICIPANT_LIMIT_REACHED,
7070
7205
  D.SERVICE_UNAVAILABLE
7071
- ]), za = class e extends En {
7206
+ ]), Ya = class e extends En {
7072
7207
  static get WAIT_CONNECTION_DELAY() {
7073
7208
  return M.waitConnectionDelay;
7074
7209
  }
@@ -7079,7 +7214,7 @@ var Ra = new Set([
7079
7214
  return !this.disposed && this.transport.readyState !== null;
7080
7215
  }
7081
7216
  constructor(e = R, t = null, n = null, r = null, i = null) {
7082
- super(), h(this, "transport", void 0), h(this, "sequence", 1), h(this, "lastStamp", 0), h(this, "websocketCommandsQueue", []), h(this, "datachannelCommandsQueue", []), h(this, "incomingCache", []), h(this, "responseHandlers", {}), h(this, "disposed", !1), h(this, "connectionType", void 0), h(this, "conversationResolve", null), h(this, "conversationReject", null), h(this, "connected", !1), h(this, "listenersReady", !1), h(this, "peerId", null), h(this, "connectionMessageWaitTimer", 0), h(this, "participantIdRegistry", null), h(this, "producerNotificationDataChannel", null), h(this, "producerCommandDataChannel", null), h(this, "producerCommandDataChannelEnabled", !1), h(this, "producerCommandSerializationService", void 0), h(this, "_debug", void 0), h(this, "_logger", void 0), h(this, "_statAggregator", void 0), h(this, "_statPings", void 0), h(this, "_statSignalingCommands", void 0), this._debug = e, this._logger = t, this._statAggregator = n, this._statPings = r, this._statSignalingCommands = i, this.producerCommandSerializationService = new $n(e), this.transport = new Ma(e, {
7217
+ super(), h(this, "transport", void 0), h(this, "sequence", 1), h(this, "lastStamp", 0), h(this, "websocketCommandsQueue", []), h(this, "datachannelCommandsQueue", []), h(this, "incomingCache", []), h(this, "responseHandlers", {}), h(this, "disposed", !1), h(this, "connectionType", void 0), h(this, "conversationResolve", null), h(this, "conversationReject", null), h(this, "connected", !1), h(this, "listenersReady", !1), h(this, "peerId", null), h(this, "connectionMessageWaitTimer", 0), h(this, "participantIdRegistry", null), h(this, "producerNotificationDataChannel", null), h(this, "producerCommandDataChannel", null), h(this, "producerCommandDataChannelEnabled", !1), h(this, "producerCommandSerializationService", void 0), h(this, "_debug", void 0), h(this, "_logger", void 0), h(this, "_statAggregator", void 0), h(this, "_statPings", void 0), h(this, "_statSignalingCommands", void 0), this._debug = e, this._logger = t, this._statAggregator = n, this._statPings = r, this._statSignalingCommands = i, this.producerCommandSerializationService = new $n(e), this.transport = new Ha(e, {
7083
7218
  onConnecting: this._onTransportConnecting.bind(this),
7084
7219
  onOpen: this._onOpen.bind(this),
7085
7220
  onMessage: this._onMessage.bind(this),
@@ -7166,20 +7301,20 @@ var Ra = new Set([
7166
7301
  return this._send(B.TRANSMIT_DATA, {
7167
7302
  participantId: e,
7168
7303
  data: r
7169
- }, !0, Pa);
7304
+ }, !0, Wa);
7170
7305
  }
7171
7306
  async acceptCall(e) {
7172
7307
  return this._send(B.ACCEPT_CALL, { mediaSettings: e });
7173
7308
  }
7174
7309
  async changeMediaSettings(e) {
7175
- return this._send(B.CHANGE_MEDIA_SETTINGS, { mediaSettings: e }, !0, Pa);
7310
+ return this._send(B.CHANGE_MEDIA_SETTINGS, { mediaSettings: e }, !0, Wa);
7176
7311
  }
7177
7312
  async changeParticipantState(e, t) {
7178
7313
  let n = { participantState: { state: e } };
7179
7314
  return t && (n.participantId = t), this._sendRaw(B.CHANGE_PARTICIPANT_STATE, n);
7180
7315
  }
7181
7316
  async hold(e) {
7182
- let t = ya.get();
7317
+ let t = ka.get();
7183
7318
  return this._send(B.HOLD, {
7184
7319
  hold: e,
7185
7320
  capabilities: e ? void 0 : t
@@ -7411,7 +7546,7 @@ var Ra = new Set([
7411
7546
  if (this.disposed) throw new wn(e);
7412
7547
  switch (t.route) {
7413
7548
  case "producer":
7414
- this.datachannelCommandsQueue.push(t), this.producerCommandDataChannel?.readyState === Na && this._handleCommandsQueue(this.datachannelCommandsQueue);
7549
+ this.datachannelCommandsQueue.push(t), this.producerCommandDataChannel?.readyState === Ua && this._handleCommandsQueue(this.datachannelCommandsQueue);
7415
7550
  break;
7416
7551
  case "websocket":
7417
7552
  if (this.transport.readyState === null) {
@@ -7481,9 +7616,9 @@ var Ra = new Set([
7481
7616
  }
7482
7617
  _handleErrorMessage(e) {
7483
7618
  this._logger?.log(C.SOCKET_ACTION, `error-${e.error}`);
7484
- let t = this._getSocketType(), n = e.error ? this._createSignalingCallError(e.error, e.errorCode, t) : void 0, r = La(e, "Unknown signaling error");
7619
+ let t = this._getSocketType(), n = e.error ? this._createSignalingCallError(e.error, e.errorCode, t) : void 0, r = qa(e, "Unknown signaling error");
7485
7620
  switch (this._debug.debug(`[signaling] error message [${e.sequence}]`, e), e.sequence && this.responseHandlers[e.sequence] && this._handleCommandResponse(!1, e), e.error) {
7486
- case Fa.SERVICE_UNAVAILABLE:
7621
+ case Ga.SERVICE_UNAVAILABLE:
7487
7622
  let i = new O(D.SERVICE_UNAVAILABLE, {
7488
7623
  callError: n,
7489
7624
  message: r,
@@ -7495,7 +7630,7 @@ var Ra = new Set([
7495
7630
  reason: D.SERVICE_UNAVAILABLE
7496
7631
  });
7497
7632
  break;
7498
- case Fa.CONVERSATION_ENDED:
7633
+ case Ga.CONVERSATION_ENDED:
7499
7634
  this.conversationReject ? this.conversationReject(new O(e.reason || x.SIGNALING_FAILED, {
7500
7635
  callError: n,
7501
7636
  message: r,
@@ -7506,22 +7641,22 @@ var Ra = new Set([
7506
7641
  reason: e.reason
7507
7642
  });
7508
7643
  break;
7509
- case Fa.ILLEGAL_PARTICIPANT_STATE:
7510
- case Fa.PARTICIPANT_NOT_FOUND:
7644
+ case Ga.ILLEGAL_PARTICIPANT_STATE:
7645
+ case Ga.PARTICIPANT_NOT_FOUND:
7511
7646
  this._throwError(new O(x.SIGNALING_FAILED, {
7512
7647
  callError: n,
7513
7648
  message: r,
7514
7649
  remote: !0
7515
7650
  }));
7516
7651
  break;
7517
- case Fa.OBSOLETE_CLIENT:
7652
+ case Ga.OBSOLETE_CLIENT:
7518
7653
  this.conversationReject?.(new O(e.reason || D.OBSOLETE_CLIENT, {
7519
7654
  callError: n,
7520
7655
  message: r,
7521
7656
  remote: !0
7522
7657
  }));
7523
7658
  break;
7524
- case Fa.INVALID_TOKEN:
7659
+ case Ga.INVALID_TOKEN:
7525
7660
  default:
7526
7661
  if (e.sequence || t === yr.WEBTRANSPORT) break;
7527
7662
  if (this.connected) this._throwError(new O(e.reason || x.SIGNALING_FAILED, {
@@ -7623,13 +7758,13 @@ var Ra = new Set([
7623
7758
  let r = this.responseHandlers[n.sequence];
7624
7759
  window.clearTimeout(r.responseTimer);
7625
7760
  let i = W.measureMark(r.statMarkName);
7626
- i !== null && this._statSignalingCommands?.mark(r.name, i, this._getSocketType()), this._debug.debug(`[signaling] command response [${n.sequence}]`, n), t ? (delete this.responseHandlers[n.sequence], r.resolve(n)) : n.type === "error" ? (delete this.responseHandlers[n.sequence], this._logger?.log(C.SOCKET_ACTION, "response-error"), r.reject(Error(La(n, `Response error [${r.name}]`)), !0)) : this.transport.readyState === WebSocket.OPEN ? (delete this.responseHandlers[n.sequence], this._logger?.log(C.SOCKET_ACTION, "response-timeout"), r.reject(Error(La(n, `Response timeout [${r.name}]`)))) : r.responseTimer = window.setTimeout(() => this._handleCommandResponse(t, n), e.WAIT_RESPONSE_DELAY);
7761
+ i !== null && this._statSignalingCommands?.mark(r.name, i, this._getSocketType()), this._debug.debug(`[signaling] command response [${n.sequence}]`, n), t ? (delete this.responseHandlers[n.sequence], r.resolve(n)) : n.type === "error" ? (delete this.responseHandlers[n.sequence], this._logger?.log(C.SOCKET_ACTION, "response-error"), r.reject(Error(qa(n, `Response error [${r.name}]`)), !0)) : this.transport.readyState === WebSocket.OPEN ? (delete this.responseHandlers[n.sequence], this._logger?.log(C.SOCKET_ACTION, "response-timeout"), r.reject(Error(qa(n, `Response timeout [${r.name}]`)))) : r.responseTimer = window.setTimeout(() => this._handleCommandResponse(t, n), e.WAIT_RESPONSE_DELAY);
7627
7762
  }
7628
7763
  _handleCommandsQueue(e) {
7629
7764
  for (; e.length > 0;) {
7630
7765
  let t = e.shift();
7631
7766
  if (this._debug.debug(`[signaling] command send [${t.sequence}]`, `'${t.name}'`, t.params), t.route === "producer") {
7632
- if (this.producerCommandDataChannel?.readyState !== Na) {
7767
+ if (this.producerCommandDataChannel?.readyState !== Ua) {
7633
7768
  t.reject(/* @__PURE__ */ Error(`Invalid data channel state: ${this.producerCommandDataChannel?.readyState}`));
7634
7769
  return;
7635
7770
  }
@@ -7714,7 +7849,7 @@ var Ra = new Set([
7714
7849
  }
7715
7850
  _onTransportFailed(e) {
7716
7851
  switch (e.failure) {
7717
- case ja.EMPTY_ENDPOINT:
7852
+ case Va.EMPTY_ENDPOINT:
7718
7853
  this.conversationReject?.(new O(x.SIGNALING_FAILED, {
7719
7854
  callError: {
7720
7855
  scope: "internal",
@@ -7725,7 +7860,7 @@ var Ra = new Set([
7725
7860
  remote: e.remote
7726
7861
  }));
7727
7862
  break;
7728
- case ja.NETWORK_ERROR:
7863
+ case Va.NETWORK_ERROR:
7729
7864
  this._fail(new O(D.NETWORK_ERROR, { callError: {
7730
7865
  scope: "network",
7731
7866
  source: e.source,
@@ -7733,7 +7868,7 @@ var Ra = new Set([
7733
7868
  description: "connection-failed"
7734
7869
  } }));
7735
7870
  break;
7736
- case ja.ABORTED:
7871
+ case Va.ABORTED:
7737
7872
  this._debug.debug("[signaling] aborted reconnect"), this._fail(new O(D.CANCELED));
7738
7873
  break;
7739
7874
  }
@@ -7745,7 +7880,7 @@ var Ra = new Set([
7745
7880
  this._debug.warn("[signaling] socket is dead, trying to reconnect"), this._logTransportStat(br.FAILED_PINGS);
7746
7881
  }
7747
7882
  _attachNotificationCallError(e) {
7748
- e.callError || !e.reason || e.reason === D.FAILED || e.reason === D.UNKNOWN_ERROR || !Ra.has(e.reason) && !e.errorCode || (e.callError = {
7883
+ e.callError || !e.reason || e.reason === D.FAILED || e.reason === D.UNKNOWN_ERROR || !Ja.has(e.reason) && !e.errorCode || (e.callError = {
7749
7884
  scope: "server",
7750
7885
  source: this._getSocketType(),
7751
7886
  code: e.errorCode || "protocol",
@@ -7753,7 +7888,7 @@ var Ra = new Set([
7753
7888
  });
7754
7889
  }
7755
7890
  _createSignalingCallError(e, t, n) {
7756
- let r = Ia[e];
7891
+ let r = Ka[e];
7757
7892
  if (r) return {
7758
7893
  scope: "server",
7759
7894
  source: n,
@@ -7775,39 +7910,39 @@ var Ra = new Set([
7775
7910
  ...t
7776
7911
  });
7777
7912
  }
7778
- }, Ba = /* @__PURE__ */ function(e) {
7913
+ }, Xa = /* @__PURE__ */ function(e) {
7779
7914
  return e.INCOMING = "INCOMING", e.OUTGOING = "OUTGOING", e.JOINING = "JOINING", e;
7780
- }(Ba || {}), Va = /* @__PURE__ */ function(e) {
7915
+ }(Xa || {}), Za = /* @__PURE__ */ function(e) {
7781
7916
  return e.USER = "USER", e.GROUP = "GROUP", e.CHAT = "CHAT", e;
7782
- }(Va || {}), Ha = /* @__PURE__ */ function(e) {
7917
+ }(Za || {}), Qa = /* @__PURE__ */ function(e) {
7783
7918
  return e.ATTENDEE = "ATTENDEE", e.HAND_UP = "HAND_UP", e;
7784
- }(Ha || {}), Ua = /* @__PURE__ */ function(e) {
7919
+ }(Qa || {}), $a = /* @__PURE__ */ function(e) {
7785
7920
  return e.ADD_PARTICIPANT = "ADD_PARTICIPANT", e.RECORD = "RECORD", e.MOVIE_SHARE = "MOVIE_SHARE", e;
7786
- }(Ua || {}), Wa = /* @__PURE__ */ function(e) {
7921
+ }($a || {}), eo = /* @__PURE__ */ function(e) {
7787
7922
  return e.REQUIRE_AUTH_TO_JOIN = "REQUIRE_AUTH_TO_JOIN", e.AUDIENCE_MODE = "AUDIENCE_MODE", e.WAITING_HALL = "WAITING_HALL", e.WAIT_FOR_ADMIN = "WAIT_FOR_ADMIN", e.ADMIN_IS_HERE = "ADMIN_IS_HERE", e.ASR = "ASR", e.FEEDBACK = "FEEDBACK", e.RECURRING = "RECURRING", e;
7788
- }(Wa || {});
7789
- function Ga(e, t) {
7923
+ }(eo || {});
7924
+ function to(e, t) {
7790
7925
  if (e.length !== t.length) return !1;
7791
7926
  for (let n of e) if (!t.includes(n)) return !1;
7792
7927
  return !0;
7793
7928
  }
7794
- function Ka(e, t) {
7929
+ function no(e, t) {
7795
7930
  let n = new Set(e);
7796
7931
  for (let [e, r] of Object.entries(t)) r ? n.add(e) : n.delete(e);
7797
7932
  return Array.from(n);
7798
7933
  }
7799
7934
  //#endregion
7800
7935
  //#region src/enums/MuteState.ts
7801
- var qa = /* @__PURE__ */ function(e) {
7936
+ var ro = /* @__PURE__ */ function(e) {
7802
7937
  return e.UNMUTE = "UNMUTE", e.MUTE = "MUTE", e.MUTE_PERMANENT = "MUTE_PERMANENT", e;
7803
- }(qa || {}), Z = /* @__PURE__ */ function(e) {
7938
+ }(ro || {}), Z = /* @__PURE__ */ function(e) {
7804
7939
  return e.CALLED = "CALLED", e.ACCEPTED = "ACCEPTED", e.REJECTED = "REJECTED", e.HUNGUP = "HUNGUP", e;
7805
- }(Z || {}), Ja = /* @__PURE__ */ function(e) {
7940
+ }(Z || {}), io = /* @__PURE__ */ function(e) {
7806
7941
  return e.UPDATE = "UPDATE", e.REMOVE = "REMOVE", e.ACTIVATE = "ACTIVATE", e.TIMEOUT = "TIMEOUT", e;
7807
- }(Ja || {}), Ya = /* @__PURE__ */ function(e) {
7942
+ }(io || {}), ao = /* @__PURE__ */ function(e) {
7808
7943
  return e.NO_AVAILABLE_TRACKS = "no-available-tracks", e.UNKNOWN_ERROR = "unknown-error", e;
7809
- }(Ya || {});
7810
- function Xa(e) {
7944
+ }(ao || {});
7945
+ function oo(e) {
7811
7946
  switch (e) {
7812
7947
  case 1: return "no-available-tracks";
7813
7948
  default: return "unknown-error";
@@ -7815,17 +7950,17 @@ function Xa(e) {
7815
7950
  }
7816
7951
  //#endregion
7817
7952
  //#region src/enums/UserRole.ts
7818
- var Za = /* @__PURE__ */ function(e) {
7953
+ var so = /* @__PURE__ */ function(e) {
7819
7954
  return e.CREATOR = "CREATOR", e.ADMIN = "ADMIN", e;
7820
- }(Za || {});
7821
- function Qa(e, t) {
7955
+ }(so || {});
7956
+ function co(e, t) {
7822
7957
  if (e.length !== t.length) return !1;
7823
7958
  for (let n of e) if (!t.includes(n)) return !1;
7824
7959
  return !0;
7825
7960
  }
7826
7961
  //#endregion
7827
7962
  //#region src/static/ParticipantConnectionStatusUtils.ts
7828
- var $a;
7963
+ var lo;
7829
7964
  (function(e) {
7830
7965
  function t(e) {
7831
7966
  let t = e?.transport ?? e?.lastEffective ?? N.WAITING, n = {
@@ -7877,8 +8012,8 @@ var $a;
7877
8012
  shouldNotify: !0
7878
8013
  });
7879
8014
  }
7880
- })($a || ($a = {}));
7881
- var eo = $a, to = /* @__PURE__ */ function(e) {
8015
+ })(lo || (lo = {}));
8016
+ var uo = lo, fo = /* @__PURE__ */ function(e) {
7882
8017
  return e.USER = "USER", e.ANONYM = "ANONYM", e.GROUP = "GROUP", e;
7883
8018
  }({}), Q;
7884
8019
  (function(e) {
@@ -7941,7 +8076,7 @@ var eo = $a, to = /* @__PURE__ */ function(e) {
7941
8076
  })(Q || (Q = {}));
7942
8077
  //#endregion
7943
8078
  //#region src/types/WaitingHall.ts
7944
- function no(e) {
8079
+ function po(e) {
7945
8080
  try {
7946
8081
  return btoa(JSON.stringify(e));
7947
8082
  } catch (t) {
@@ -7949,7 +8084,7 @@ function no(e) {
7949
8084
  }
7950
8085
  return null;
7951
8086
  }
7952
- function ro(e) {
8087
+ function mo(e) {
7953
8088
  try {
7954
8089
  return JSON.parse(atob(e));
7955
8090
  } catch (t) {
@@ -7959,12 +8094,12 @@ function ro(e) {
7959
8094
  }
7960
8095
  //#endregion
7961
8096
  //#region src/utils/Conversation.ts
7962
- var io = (e, t) => j.objectReduce(e, (e, n, r) => (n === t && e.push(r), e), []);
7963
- function ao(e) {
8097
+ var ho = (e, t) => j.objectReduce(e, (e, n, r) => (n === t && e.push(r), e), []);
8098
+ function go(e) {
7964
8099
  if (e.conversation?.muteStates) return e.conversation.muteStates;
7965
8100
  if (e.muteState && e.muteOptions) return e.muteOptions.reduce((t, n) => (t[n] = e.muteState, t), {});
7966
8101
  }
7967
- function oo(e, t) {
8102
+ function _o(e, t) {
7968
8103
  switch (e) {
7969
8104
  case S.AUDIO: return !!t.isAudioEnabled;
7970
8105
  case S.AUDIO_SHARING: return !!t.isAudioSharingEnabled;
@@ -7973,12 +8108,12 @@ function oo(e, t) {
7973
8108
  default: return !1;
7974
8109
  }
7975
8110
  }
7976
- function so(e, t) {
8111
+ function vo(e, t) {
7977
8112
  return j.objectReduce(e, (e, n, r) => {
7978
8113
  switch (n) {
7979
- case qa.MUTE:
7980
- case qa.MUTE_PERMANENT:
7981
- oo(r, t) || (e[r] = n);
8114
+ case ro.MUTE:
8115
+ case ro.MUTE_PERMANENT:
8116
+ _o(r, t) || (e[r] = n);
7982
8117
  break;
7983
8118
  default:
7984
8119
  e[r] = n;
@@ -7987,19 +8122,19 @@ function so(e, t) {
7987
8122
  return e;
7988
8123
  }, {});
7989
8124
  }
7990
- function co(e) {
8125
+ function yo(e) {
7991
8126
  let { muteStates: t = {}, mediaSettings: n } = e;
7992
- return so(t, n);
8127
+ return vo(t, n);
7993
8128
  }
7994
- function lo(e, t) {
8129
+ function bo(e, t) {
7995
8130
  let n = e.conversation.participants.find((t) => j.comparePeerId(t.peerId, e.peerId));
7996
8131
  if (!n) return t;
7997
8132
  let { mediaSettings: r } = n;
7998
- return so(t, r);
8133
+ return vo(t, r);
7999
8134
  }
8000
8135
  //#endregion
8001
8136
  //#region src/utils/IceServers.ts
8002
- function uo(e) {
8137
+ function xo(e) {
8003
8138
  if (!e) return null;
8004
8139
  let t = Array.from(new Set((e.urls ?? []).map((e) => e.trim()).filter((e) => e.length > 0)));
8005
8140
  return t.length ? {
@@ -8007,8 +8142,8 @@ function uo(e) {
8007
8142
  urls: t
8008
8143
  } : null;
8009
8144
  }
8010
- function fo(e, t) {
8011
- let n = [], r = uo(e), i = uo(t);
8145
+ function So(e, t) {
8146
+ let n = [], r = xo(e), i = xo(t);
8012
8147
  if (r && n.push(r), i) {
8013
8148
  let e = [...i.urls];
8014
8149
  e.push(`${e[e.length - 1]}?transport=tcp`), n.push({
@@ -8020,7 +8155,7 @@ function fo(e, t) {
8020
8155
  }
8021
8156
  //#endregion
8022
8157
  //#region src/utils/Lz4.ts
8023
- function po(e, t) {
8158
+ function Co(e, t) {
8024
8159
  let n = new Uint8Array(t), r = 0, i = 0;
8025
8160
  for (; r < e.length && i < t;) {
8026
8161
  let a = e[r++], o = a >> 4, s = a & 15;
@@ -8047,7 +8182,7 @@ function po(e, t) {
8047
8182
  }
8048
8183
  //#endregion
8049
8184
  //#region src/utils/SerializeLatest.ts
8050
- function mo(e) {
8185
+ function wo(e) {
8051
8186
  let t, n = !1, r, i = async () => {
8052
8187
  let t = !1, i;
8053
8188
  for (; n;) {
@@ -8068,7 +8203,7 @@ function mo(e) {
8068
8203
  }
8069
8204
  //#endregion
8070
8205
  //#region src/classes/AudioFix.ts
8071
- var ho = class {
8206
+ var To = class {
8072
8207
  constructor(e, t = R, n = null) {
8073
8208
  h(this, "_fixNoPacketsApplied", !1), h(this, "_fixNoPacketsChecked", !1), h(this, "_fixTooManyPacketsApplied", !1), h(this, "_fixTooManyPacketsSucceeded", !1), h(this, "_fixTooManyPacketsFailed", !1), h(this, "_fixTooManyPacketsTime", void 0), h(this, "_mediaSource", void 0), h(this, "_debug", void 0), h(this, "_logger", void 0), h(this, "_lastPacketsSent", void 0), h(this, "_lastPacketsSentTime", void 0), h(this, "_toggleAudioPromise", null), h(this, "_fixNoPacketsAppliedVideo", !1), this._mediaSource = e, this._debug = t, this._logger = n;
8074
8209
  }
@@ -8106,7 +8241,7 @@ var ho = class {
8106
8241
  this._debug.warn("[AudioFix] Failed to fix RV (no packets): video restart", e);
8107
8242
  }));
8108
8243
  }
8109
- }, go = class {
8244
+ }, Eo = class {
8110
8245
  constructor(e, t = !1, n = R, r = null) {
8111
8246
  h(this, "_audioElement", null), h(this, "_debug", void 0), h(this, "_preparedAudioElement", void 0), h(this, "_audioTracks", /* @__PURE__ */ new Map()), h(this, "_allowMultipleTracks", void 0), h(this, "_volume", 1), h(this, "_features", { setSinkId: !!Audio.prototype.setSinkId }), h(this, "_statFirstMediaReceived", void 0), h(this, "_logger", void 0), this._statFirstMediaReceived = e, this._allowMultipleTracks = t, this._debug = n, this._logger = r, this._preparedAudioElement = this._prepareAudioElement();
8112
8247
  }
@@ -8207,13 +8342,13 @@ var ho = class {
8207
8342
  };
8208
8343
  //#endregion
8209
8344
  //#region src/classes/conversation/ConversationResponseValidator.ts
8210
- function _o(e, t) {
8211
- e || yo(t, "response-empty"), e.id || yo(t, "id-empty"), e.endpoint || yo(t, "endpoint-empty"), !vo(e.stun_server) && !vo(e.turn_server) && yo(t, "ice-servers-empty");
8345
+ function Do(e, t) {
8346
+ e || ko(t, "response-empty"), e.id || ko(t, "id-empty"), e.endpoint || ko(t, "endpoint-empty"), !Oo(e.stun_server) && !Oo(e.turn_server) && ko(t, "ice-servers-empty");
8212
8347
  }
8213
- function vo(e) {
8348
+ function Oo(e) {
8214
8349
  return Array.isArray(e?.urls) && e.urls.length > 0;
8215
8350
  }
8216
- function yo(e, t) {
8351
+ function ko(e, t) {
8217
8352
  let n = e.replace(/[A-Z]/g, (e) => `-${e.toLowerCase()}`), r = e === "fastStart" || e === "fastJoin";
8218
8353
  throw new O(r ? e === "fastStart" ? D.FAST_START_ERROR : D.FAST_JOIN_ERROR : D.UNKNOWN_ERROR, {
8219
8354
  message: `Invalid ${e} response: ${t}`,
@@ -8232,7 +8367,7 @@ function yo(e, t) {
8232
8367
  }
8233
8368
  //#endregion
8234
8369
  //#region src/classes/DebugInfo.ts
8235
- var bo = 90, xo = 3, So = class extends b {
8370
+ var Ao = 90, jo = 3, Mo = class extends b {
8236
8371
  constructor(e = R) {
8237
8372
  super(), h(this, "_lastMemoryStat", {
8238
8373
  percent: 0,
@@ -8248,11 +8383,11 @@ var bo = 90, xo = 3, So = class extends b {
8248
8383
  let e = window?.performance?.memory;
8249
8384
  if (!e || !e.usedJSHeapSize || !e.jsHeapSizeLimit) return;
8250
8385
  let t = Number((100 * e.usedJSHeapSize / e.jsHeapSizeLimit).toFixed(2)), n = Number((e.usedJSHeapSize / 1024 / 1024).toFixed(1));
8251
- t > bo ? this._debug.warn(`High memory usage: ${t}% (${n} MiB)`) : (!this._lastMemoryStat.percent || Math.abs(t - this._lastMemoryStat.percent) >= xo) && (this._debug.debug(`Memory usage: ${t}% (${n} MiB)`), this._lastMemoryStat.percent = t, this._lastMemoryStat.bytes = e.usedJSHeapSize);
8386
+ t > Ao ? this._debug.warn(`High memory usage: ${t}% (${n} MiB)`) : (!this._lastMemoryStat.percent || Math.abs(t - this._lastMemoryStat.percent) >= jo) && (this._debug.debug(`Memory usage: ${t}% (${n} MiB)`), this._lastMemoryStat.percent = t, this._lastMemoryStat.bytes = e.usedJSHeapSize);
8252
8387
  }
8253
- }, Co = class {
8254
- constructor({ api: e, debug: t, getParticipants: n, isMe: r, updateDisplayLayout: i }) {
8255
- h(this, "_api", void 0), h(this, "_debug", void 0), h(this, "_getParticipants", void 0), h(this, "_isMe", void 0), h(this, "_updateDisplayLayout", void 0), h(this, "_requestedLayouts", {}), h(this, "_uncertainLayouts", {}), h(this, "_pendingRequests", null), h(this, "_pendingPromises", []), h(this, "_lastRequests", null), h(this, "_timer", null), h(this, "_inFlight", !1), h(this, "_lastFlushAt", null), h(this, "_generation", 0), h(this, "_forceNextFlush", !1), this._api = e, this._debug = t, this._getParticipants = n, this._isMe = r, this._updateDisplayLayout = i;
8388
+ }, No = class {
8389
+ constructor({ api: e, debug: t, getParticipants: n, isMe: r, updateDisplayLayout: i, onNonFatalError: a }) {
8390
+ h(this, "_api", void 0), h(this, "_debug", void 0), h(this, "_getParticipants", void 0), h(this, "_isMe", void 0), h(this, "_updateDisplayLayout", void 0), h(this, "_onNonFatalError", void 0), h(this, "_requestedLayouts", {}), h(this, "_uncertainLayouts", {}), h(this, "_pendingRequests", null), h(this, "_pendingPromises", []), h(this, "_lastRequests", null), h(this, "_timer", null), h(this, "_inFlight", !1), h(this, "_lastFlushAt", null), h(this, "_generation", 0), h(this, "_forceNextFlush", !1), this._api = e, this._debug = t, this._getParticipants = n, this._isMe = r, this._updateDisplayLayout = i, this._onNonFatalError = a;
8256
8391
  }
8257
8392
  request(e) {
8258
8393
  this._pendingRequests = e.slice(), this._lastRequests = e.slice();
@@ -8288,11 +8423,16 @@ var bo = 90, xo = 3, So = class extends b {
8288
8423
  this._pendingRequests = null, this._pendingPromises = [];
8289
8424
  let r = {};
8290
8425
  try {
8291
- r = this._getRequestLayouts(t);
8292
- let i = this._forceNextFlush || Object.keys(this._uncertainLayouts).length > 0;
8426
+ let i = this._getRequestLayouts(t);
8427
+ if (!i) {
8428
+ n.forEach(({ resolve: e }) => e());
8429
+ return;
8430
+ }
8431
+ r = i;
8432
+ let a = this._forceNextFlush || Object.keys(this._uncertainLayouts).length > 0;
8293
8433
  this._forceNextFlush = !1;
8294
- let a = this._getDiff(r, i);
8295
- a.length && await this._updateDisplayLayout(a), e === this._generation && (this._requestedLayouts = r, this._uncertainLayouts = {}), n.forEach(({ resolve: e }) => e());
8434
+ let o = this._getDiff(r, a);
8435
+ o.length && await this._updateDisplayLayout(o), e === this._generation && (this._requestedLayouts = r, this._uncertainLayouts = {}), n.forEach(({ resolve: e }) => e());
8296
8436
  } catch (t) {
8297
8437
  e === this._generation ? (this._uncertainLayouts = {
8298
8438
  ...this._uncertainLayouts,
@@ -8303,30 +8443,30 @@ var bo = 90, xo = 3, So = class extends b {
8303
8443
  }
8304
8444
  }
8305
8445
  _getRequestLayouts(e) {
8306
- let t = {}, n = this._getParticipants();
8307
- for (let r of e) {
8308
- let e = typeof r.uid == "object" ? r.uid : Q.fromId(r.uid), i = this._api.getCachedOkIdByExternalId(e);
8309
- if (!i) {
8310
- this._debug.log(`Unknown participant external ID ${typeof r.uid == "object" ? Q.toString(r.uid) : r.uid}`);
8446
+ let t = {}, n = [], r = this._getParticipants();
8447
+ for (let i of e) {
8448
+ let e = typeof i.uid == "object" ? i.uid : Q.fromId(i.uid), a = this._api.getCachedParticipantIdByExternalId(e);
8449
+ if (!a) {
8450
+ this._debug.log(`Unknown participant external ID ${typeof i.uid == "object" ? Q.toString(i.uid) : i.uid}`), n.push(e.id);
8311
8451
  continue;
8312
8452
  }
8313
- if (!n[i] && !this._isMe(i)) continue;
8314
- let a = Mn({
8315
- participantId: i,
8316
- mediaType: r.mediaType,
8317
- streamName: r.streamName
8453
+ if (!r[a] && !this._isMe(a)) continue;
8454
+ let o = Mn({
8455
+ participantId: a,
8456
+ mediaType: i.mediaType,
8457
+ streamName: i.streamName
8318
8458
  });
8319
- t[a] = {
8320
- uid: r.uid,
8321
- mediaType: r.mediaType,
8322
- width: r.width,
8323
- height: r.height,
8324
- fit: r.cover ? "cv" : "cn",
8325
- ...r.priority === void 0 ? {} : { priority: r.priority },
8326
- ...r.streamName === void 0 ? {} : { streamName: r.streamName }
8459
+ t[o] = {
8460
+ uid: i.uid,
8461
+ mediaType: i.mediaType,
8462
+ width: i.width,
8463
+ height: i.height,
8464
+ fit: i.cover ? "cv" : "cn",
8465
+ ...i.priority === void 0 ? {} : { priority: i.priority },
8466
+ ...i.streamName === void 0 ? {} : { streamName: i.streamName }
8327
8467
  };
8328
8468
  }
8329
- return t;
8469
+ return n.length ? (this._onNonFatalError(`Participant ID mapping not found for external IDs "${Array.from(new Set(n)).join("\", \"")}" while handling requestDisplayLayout`), null) : t;
8330
8470
  }
8331
8471
  _getDiff(e, t = !1) {
8332
8472
  let n = [];
@@ -8360,7 +8500,7 @@ var bo = 90, xo = 3, So = class extends b {
8360
8500
  let n = e, r = t;
8361
8501
  return n.width !== r.width || n.height !== r.height || n.fit !== r.fit || n.priority !== r.priority;
8362
8502
  }
8363
- }, wo = 44100, To = class {
8503
+ }, Po = 44100, Fo = class {
8364
8504
  constructor(e, t) {
8365
8505
  h(this, "_analyser", null), h(this, "_gainNode", null), h(this, "_fftBins", null), h(this, "_mediaStreamSource", null), h(this, "_lastSmoothedLevel", 0), h(this, "_trackId", void 0), h(this, "_track", void 0), h(this, "_stream", void 0), this._trackId = e, this._track = t, this._stream = new MediaStream([t]);
8366
8506
  try {
@@ -8377,7 +8517,7 @@ var bo = 90, xo = 3, So = class extends b {
8377
8517
  _getBins() {
8378
8518
  if (!this._fftBins || !this._analyser) return new Uint8Array();
8379
8519
  this._analyser.getByteFrequencyData(this._fftBins);
8380
- let e = wo / this._fftBins.length, t = Math.ceil(M.voiceParams.minFreq / e), n = Math.floor(M.voiceParams.maxFreq / e);
8520
+ let e = Po / this._fftBins.length, t = Math.ceil(M.voiceParams.minFreq / e), n = Math.floor(M.voiceParams.maxFreq / e);
8381
8521
  return this._fftBins.subarray(t, n);
8382
8522
  }
8383
8523
  getLevel() {
@@ -8390,7 +8530,7 @@ var bo = 90, xo = 3, So = class extends b {
8390
8530
  destroy() {
8391
8531
  this._mediaStreamSource && (this._mediaStreamSource.disconnect(), this._mediaStreamSource = null), this._gainNode && (this._gainNode.disconnect(), this._gainNode = null), this._analyser && (this._analyser.disconnect(), this._analyser = null, this._fftBins = null, this._lastSmoothedLevel = 0), this._stream.removeTrack(this._track);
8392
8532
  }
8393
- }, Eo = class extends b {
8533
+ }, Io = class extends b {
8394
8534
  constructor(e) {
8395
8535
  super(), h(this, "_detector", null), h(this, "_interval", null);
8396
8536
  let t = () => {
@@ -8406,7 +8546,7 @@ var bo = 90, xo = 3, So = class extends b {
8406
8546
  }), this.subscribe(e, qt.SOURCE_READY, n), n();
8407
8547
  }
8408
8548
  init(e) {
8409
- this._stopDetector(), this._detector = new To("local", e.clone());
8549
+ this._stopDetector(), this._detector = new Fo("local", e.clone());
8410
8550
  }
8411
8551
  _stopDetector() {
8412
8552
  this._detector && (this._detector.track.stop(), this._detector.destroy(), this._detector = null);
@@ -8414,7 +8554,7 @@ var bo = 90, xo = 3, So = class extends b {
8414
8554
  destroy() {
8415
8555
  this.unsubscribe(), this._interval && (window.clearTimeout(this._interval), this._interval = null), this._stopDetector();
8416
8556
  }
8417
- }, Do = class {
8557
+ }, Lo = class {
8418
8558
  constructor(e, t = R) {
8419
8559
  h(this, "processor", void 0), h(this, "queue", []), h(this, "isProcessing", !1), h(this, "_debug", void 0), this.processor = e, this._debug = t;
8420
8560
  }
@@ -8434,9 +8574,9 @@ var bo = 90, xo = 3, So = class extends b {
8434
8574
  this.isProcessing = !1;
8435
8575
  }
8436
8576
  }
8437
- }, Oo = /* @__PURE__ */ function(e) {
8577
+ }, Ro = /* @__PURE__ */ function(e) {
8438
8578
  return e.VOLUMES_DETECTED = "VOLUMES_DETECTED", e;
8439
- }({}), ko = class extends b {
8579
+ }({}), zo = class extends b {
8440
8580
  constructor(e) {
8441
8581
  super(), h(this, "_detectors", /* @__PURE__ */ new Map()), h(this, "_interval", null), h(this, "_activeParticipants", void 0), h(this, "_removedParticipants", void 0), h(this, "_topology", void 0), this._topology = e.getTopology(), this.subscribe(e, X.REMOTE_TRACK_ADDED, this._onRemoteTrackAdded.bind(this)), this.subscribe(e, X.REMOTE_TRACK_REMOVED, this._onRemoteTrackRemoved.bind(this)), this.subscribe(e, X.SIGNALLED_ACTIVE_PARTICIPANTS, this._onSignalledActiveParticipants.bind(this)), this.subscribe(e, X.TOPOLOGY_CHANGED, this._onTopologyChanged.bind(this));
8442
8582
  }
@@ -8444,7 +8584,7 @@ var bo = 90, xo = 3, So = class extends b {
8444
8584
  this._interval && (window.clearTimeout(this._interval), this._interval = null), this.unsubscribe(), this._destroyDetectors();
8445
8585
  }
8446
8586
  _onRemoteTrackAdded(e, t, n) {
8447
- if (n.kind === k.audio && (this._detectors.get(e)?.destroy(), this._detectors.set(e, new To(e, n)), !this._interval)) {
8587
+ if (n.kind === k.audio && (this._detectors.get(e)?.destroy(), this._detectors.set(e, new Fo(e, n)), !this._interval)) {
8448
8588
  let e = () => {
8449
8589
  this._collectVolumes(), this._interval = window.setTimeout(e, M.voiceParams.interval);
8450
8590
  };
@@ -8476,14 +8616,14 @@ var bo = 90, xo = 3, So = class extends b {
8476
8616
  }
8477
8617
  _getAudioTrackLevelByParticipantId(e) {
8478
8618
  if (this._isTransparentAudioMode()) return this._getTransparentAudioLevelByParticipantId(e);
8479
- let t = this._detectors.get(qr.AUDIO_MIX);
8619
+ let t = this._detectors.get(ri.AUDIO_MIX);
8480
8620
  return t ? t.getLevel() : null;
8481
8621
  }
8482
8622
  _getTransparentAudioLevelByParticipantId(e) {
8483
8623
  if (!this._activeParticipants?.includes(e)) return null;
8484
8624
  let t = null;
8485
8625
  return this._detectors.forEach((e, n) => {
8486
- if (!n.startsWith(`${qr.TRANSPARENT_AUDIO_TRACK_PREFIX}-`)) return;
8626
+ if (!n.startsWith(`${ri.TRANSPARENT_AUDIO_TRACK_PREFIX}-`)) return;
8487
8627
  let r = e.getLevel();
8488
8628
  (!t || r.real > t.real) && (t = r);
8489
8629
  }), t;
@@ -8502,11 +8642,11 @@ var bo = 90, xo = 3, So = class extends b {
8502
8642
  e.destroy();
8503
8643
  }), this._detectors.clear();
8504
8644
  }
8505
- }, Ao = /* @__PURE__ */ function(e) {
8645
+ }, Bo = /* @__PURE__ */ function(e) {
8506
8646
  return e.SPEAKER_CHANGED = "SPEAKER_CHANGED", e;
8507
- }({}), jo = class extends b {
8647
+ }({}), Vo = class extends b {
8508
8648
  constructor(e, t, n) {
8509
- super(), h(this, "_speakerId", null), h(this, "_serverSideSpeakerDetection", !1), this._serverSideSpeakerDetection = n === J.SERVER, this.subscribe(e, Oo.VOLUMES_DETECTED, this._onVolumesDetected.bind(this)), this.subscribe(t, X.SIGNALLED_SPEAKER_CHANGED, this._onServerSpeakerChanged.bind(this)), this.subscribe(t, X.TOPOLOGY_CHANGED, this._onTopologyChanged.bind(this));
8649
+ super(), h(this, "_speakerId", null), h(this, "_serverSideSpeakerDetection", !1), this._serverSideSpeakerDetection = n === J.SERVER, this.subscribe(e, Ro.VOLUMES_DETECTED, this._onVolumesDetected.bind(this)), this.subscribe(t, X.SIGNALLED_SPEAKER_CHANGED, this._onServerSpeakerChanged.bind(this)), this.subscribe(t, X.TOPOLOGY_CHANGED, this._onTopologyChanged.bind(this));
8510
8650
  }
8511
8651
  destroy() {
8512
8652
  this.unsubscribe();
@@ -8528,9 +8668,9 @@ var bo = 90, xo = 3, So = class extends b {
8528
8668
  _onTopologyChanged(e) {
8529
8669
  this._serverSideSpeakerDetection = e === J.SERVER;
8530
8670
  }
8531
- }, Mo = 15e3, No = 15e3, Po = class extends b {
8671
+ }, Ho = 15e3, Uo = 15e3, Wo = class extends b {
8532
8672
  constructor(e, t, n, r = R, i = null) {
8533
- super(), h(this, "_transport", void 0), h(this, "_volumes", {}), h(this, "_participants", {}), h(this, "_debug", void 0), h(this, "_logger", void 0), h(this, "_connectionTimeout", 0), h(this, "_connectionTimeoutSuppressed", !1), h(this, "_volumeTimeout", 0), this._transport = e, this._participants = n, this._debug = r, this._logger = i, this.subscribe(e, X.STATE_CHANGED, this._onTransportStateChanged.bind(this)), this.subscribe(t, Oo.VOLUMES_DETECTED, this._onVolumesDetected.bind(this));
8673
+ super(), h(this, "_transport", void 0), h(this, "_volumes", {}), h(this, "_participants", {}), h(this, "_debug", void 0), h(this, "_logger", void 0), h(this, "_connectionTimeout", 0), h(this, "_connectionTimeoutSuppressed", !1), h(this, "_volumeTimeout", 0), this._transport = e, this._participants = n, this._debug = r, this._logger = i, this.subscribe(e, X.STATE_CHANGED, this._onTransportStateChanged.bind(this)), this.subscribe(t, Ro.VOLUMES_DETECTED, this._onVolumesDetected.bind(this));
8534
8674
  }
8535
8675
  destroy() {
8536
8676
  this.unsubscribe(), this._connectionTimeout && window.clearTimeout(this._connectionTimeout), this._volumeTimeout && window.clearTimeout(this._volumeTimeout);
@@ -8542,10 +8682,10 @@ var bo = 90, xo = 3, So = class extends b {
8542
8682
  this._connectionTimeout || !this._connectionTimeoutSuppressed || this._reportConnectionTimeout();
8543
8683
  }
8544
8684
  _getConnectionTimeout() {
8545
- return this._transport.getTopology() === J.DIRECT ? Mo : M.specListenerParams.connectionTimeout;
8685
+ return this._transport.getTopology() === J.DIRECT ? Ho : M.specListenerParams.connectionTimeout;
8546
8686
  }
8547
8687
  _getVolumeTimeout() {
8548
- return this._transport.getTopology() === J.DIRECT ? No : M.specListenerParams.volumeTimeout;
8688
+ return this._transport.getTopology() === J.DIRECT ? Uo : M.specListenerParams.volumeTimeout;
8549
8689
  }
8550
8690
  _onTransportStateChanged(e, t) {
8551
8691
  t === q.OPENED && (this._connectionTimeout || (this._connectionTimeoutSuppressed = !1, this._connectionTimeout = window.setTimeout(this._onConnectionTimeout.bind(this), this._getConnectionTimeout()))), t === q.CONNECTED && (this._volumeTimeout || (this._volumeTimeout = window.setTimeout(this._onVolumeTimeout.bind(this), this._getVolumeTimeout())), this._volumeTimeout && (window.clearTimeout(this._volumeTimeout), this._volumeTimeout = window.setTimeout(this._onVolumeTimeout.bind(this), this._getVolumeTimeout()))), t === q.FAILED && this._connectionTimeout && (this._debug.warn("Transport failed, send callSpecError"), this._logger?.log(C.CALL_SPEC_ERROR, `${this._transport.getTopology()}_CONNECTION_TIMEOUT`));
@@ -8578,7 +8718,7 @@ var bo = 90, xo = 3, So = class extends b {
8578
8718
  r && r.platform && (n = r.platform), e.indexOf(n) < 0 && (e.push(n), this._logger?.log(C.CALL_SPEC_ERROR, `${this._transport.getTopology()}_VOLUME_TIMEOUT_${n}`));
8579
8719
  }), e.length && this._debug.warn("There is silent participant, send callSpecError"), this._volumeTimeout = 0;
8580
8720
  }
8581
- }, Fo = class extends f {
8721
+ }, Go = class extends f {
8582
8722
  constructor(e, t, n, r = () => void 0) {
8583
8723
  super(), h(this, "_externalLogger", void 0), h(this, "_api", void 0), h(this, "_conversationIdProvider", void 0), h(this, "_topologyProvider", void 0), h(this, "_batchInterval", 3e3), h(this, "_batchedClientStats", []), h(this, "_batchTimeout", null), h(this, "_serverTimeDelta", 0), h(this, "_waitingForServerTime", !0), h(this, "_deferredClientStats", []), this._api = e, this._externalLogger = t, this._conversationIdProvider = n, this._topologyProvider = r, this._calculateServerTimeDelta();
8584
8724
  }
@@ -8658,7 +8798,7 @@ var bo = 90, xo = 3, So = class extends b {
8658
8798
  _now() {
8659
8799
  return Date.now() - this._serverTimeDelta;
8660
8800
  }
8661
- }, Io = "invalid-error-metadata", Lo = 64, Ro = new Set(Object.values(D)), zo = new Set(Object.values(x)), Bo = {
8801
+ }, Ko = "invalid-error-metadata", qo = 64, Jo = new Set(Object.values(D)), Yo = new Set(Object.values(x)), Xo = {
8662
8802
  [D.CANCELED]: {
8663
8803
  type: "semantic",
8664
8804
  reason: "canceled"
@@ -8779,7 +8919,7 @@ var bo = 90, xo = 3, So = class extends b {
8779
8919
  type: "semantic",
8780
8920
  reason: "obsolete_client"
8781
8921
  }
8782
- }, Vo = {
8922
+ }, Zo = {
8783
8923
  [x.MIC_CAMERA_PERMISSION]: {
8784
8924
  type: "direct-error",
8785
8925
  error: {
@@ -8868,14 +9008,14 @@ var bo = 90, xo = 3, So = class extends b {
8868
9008
  }
8869
9009
  }
8870
9010
  };
8871
- function Ho(e) {
8872
- if (typeof e != "string" && typeof e != "number" || typeof e == "number" && !Number.isFinite(e)) return Io;
9011
+ function Qo(e) {
9012
+ if (typeof e != "string" && typeof e != "number" || typeof e == "number" && !Number.isFinite(e)) return Ko;
8873
9013
  let t = String(e).trim();
8874
- if (!t) return Io;
9014
+ if (!t) return Ko;
8875
9015
  let n = t.toLowerCase().replace(/[\s_:]+/g, "-").replace(/-+/g, "-").replace(/^-|-$/g, "");
8876
- return !n || !/^[a-z0-9.-]+$/.test(n) ? Io : n.length > Lo ? `${n.slice(0, Lo - 3)}...` : n;
9016
+ return !n || !/^[a-z0-9.-]+$/.test(n) ? Ko : n.length > qo ? `${n.slice(0, qo - 3)}...` : n;
8877
9017
  }
8878
- function Uo(e) {
9018
+ function $o(e) {
8879
9019
  if (!e || typeof e != "object") return !1;
8880
9020
  let t = e;
8881
9021
  switch (t.scope) {
@@ -8887,49 +9027,49 @@ function Uo(e) {
8887
9027
  default: return !1;
8888
9028
  }
8889
9029
  }
8890
- function Wo(e) {
8891
- let t = Ho(e.description);
9030
+ function es(e) {
9031
+ let t = Qo(e.description);
8892
9032
  if (e.scope === "unknown") return `unknown:${t}`;
8893
- let n = Ho(e.code);
9033
+ let n = Qo(e.code);
8894
9034
  return e.scope === "internal" ? `internal:${n}:${t}` : `${e.scope}:${e.source}:${n}:${t}`;
8895
9035
  }
8896
- function Go(e, t) {
9036
+ function ts(e, t) {
8897
9037
  return t === null ? e.type === "direct-error" ? {
8898
9038
  reason: "error",
8899
- string_value: Wo(e.error)
8900
- } : { reason: "failed" } : Uo(t) ? {
9039
+ string_value: es(e.error)
9040
+ } : { reason: "failed" } : $o(t) ? {
8901
9041
  reason: "error",
8902
- string_value: Wo(t)
9042
+ string_value: es(t)
8903
9043
  } : { reason: "failed" };
8904
9044
  }
8905
- function Ko(e) {
9045
+ function ns(e) {
8906
9046
  if (e.hangup) {
8907
- let t = Bo[e.hangup];
9047
+ let t = Xo[e.hangup];
8908
9048
  return t ? t.type === "semantic" ? e.hangup === D.OBSOLETE_CLIENT && e.custom_error?.vchat_detailed_api_error.code ? {
8909
9049
  reason: t.reason,
8910
9050
  string_value: e.custom_error.vchat_detailed_api_error.code
8911
- } : { reason: t.reason } : Go(t, e.callError) : { reason: "failed" };
9051
+ } : { reason: t.reason } : ts(t, e.callError) : { reason: "failed" };
8912
9052
  }
8913
9053
  if (e.error) {
8914
- let t = Vo[e.error];
8915
- return t ? Go(t, e.callError) : { reason: "failed" };
9054
+ let t = Zo[e.error];
9055
+ return t ? ts(t, e.callError) : { reason: "failed" };
8916
9056
  }
8917
9057
  return { reason: "failed" };
8918
9058
  }
8919
- function qo(e) {
8920
- return e instanceof O ? Ko(e) : typeof e == "string" && (Ro.has(e) || zo.has(e)) ? Ko(new O(e)) : { reason: "failed" };
9059
+ function rs(e) {
9060
+ return e instanceof O ? ns(e) : typeof e == "string" && (Jo.has(e) || Yo.has(e)) ? ns(new O(e)) : { reason: "failed" };
8921
9061
  }
8922
9062
  //#endregion
8923
9063
  //#region src/classes/stat/CallLifecycleStats.ts
8924
- var Jo = {
9064
+ var is = {
8925
9065
  wallNow: () => Date.now(),
8926
9066
  monotonicNow: () => performance.now()
8927
9067
  };
8928
- function Yo(e) {
9068
+ function as(e) {
8929
9069
  return e === "anonym_join" ? "join" : e;
8930
9070
  }
8931
- var Xo = class {
8932
- constructor(e, t = Jo) {
9071
+ var os = class {
9072
+ constructor(e, t = is) {
8933
9073
  h(this, "_logger", void 0), h(this, "_clock", void 0), h(this, "_conversationId", null), h(this, "_callStartLabel", null), h(this, "_lifecycleStartedAtMonotonic", 0), h(this, "_pendingEvents", []), h(this, "_callStarted", !1), h(this, "_accepted", !1), h(this, "_firstMediaSent", !1), h(this, "_finished", !1), h(this, "_destroyed", !1), this._logger = e, this._clock = t;
8934
9074
  }
8935
9075
  get firstMediaSentReported() {
@@ -8941,7 +9081,7 @@ var Xo = class {
8941
9081
  markInitializationStarted({ source: e, conversationId: t }) {
8942
9082
  if (this._destroyed || this._callStartLabel !== null) return;
8943
9083
  let n = this._clock.wallNow();
8944
- this._callStartLabel = Yo(e), this._lifecycleStartedAtMonotonic = this._clock.monotonicNow(), t && (this._conversationId = t), this._record({
9084
+ this._callStartLabel = as(e), this._lifecycleStartedAtMonotonic = this._clock.monotonicNow(), t && (this._conversationId = t), this._record({
8945
9085
  name: H.CALL_INIT,
8946
9086
  source: e
8947
9087
  }, n);
@@ -8969,7 +9109,7 @@ var Xo = class {
8969
9109
  !this._canRecord() || this._firstMediaSent || (this._firstMediaSent = !0, this._record({ name: H.FIRST_MEDIA_SENT }));
8970
9110
  }
8971
9111
  markFinished(e) {
8972
- this._finish(qo(e));
9112
+ this._finish(rs(e));
8973
9113
  }
8974
9114
  markTerminated() {
8975
9115
  this._finish({ reason: "terminated" });
@@ -9020,7 +9160,7 @@ var Xo = class {
9020
9160
  ...n && { immediately: !0 }
9021
9161
  });
9022
9162
  }
9023
- }, Zo = class {
9163
+ }, ss = class {
9024
9164
  constructor(e, t) {
9025
9165
  h(this, "_logger", void 0), h(this, "_codecUsages", /* @__PURE__ */ new Map()), h(this, "getCurrentTransportTopology", void 0), this._logger = e, this.getCurrentTransportTopology = t;
9026
9166
  }
@@ -9083,7 +9223,7 @@ var Xo = class {
9083
9223
  this.report(e);
9084
9224
  }), this._codecUsages.clear();
9085
9225
  }
9086
- }, Qo = class {
9226
+ }, cs = class {
9087
9227
  constructor(e) {
9088
9228
  h(this, "_logger", void 0), h(this, "_eventualLogs", /* @__PURE__ */ new Set()), h(this, "_lastCallStatContext", null), this._logger = e;
9089
9229
  }
@@ -9116,12 +9256,11 @@ var Xo = class {
9116
9256
  for (let t of e) this._logEventualStat(t), this._eventualLogs.delete(t);
9117
9257
  }
9118
9258
  _logEventualStat({ data: e, occurredAt: t }) {
9119
- this._logger.logClientStats({
9120
- ...e,
9121
- ...this._lastCallStatContext ?? {}
9122
- }, { occurredAt: t });
9259
+ let n = { ...this._lastCallStatContext ?? {} };
9260
+ for (let [t, r] of Object.entries(e)) r !== void 0 && (r === null ? delete n[t] : n[t] = r);
9261
+ this._logger.logClientStats(n, { occurredAt: t });
9123
9262
  }
9124
- }, $o = class {
9263
+ }, ls = class {
9125
9264
  constructor(e) {
9126
9265
  if (h(this, "q", void 0), h(this, "inits", []), h(this, "n", [
9127
9266
  1,
@@ -9180,7 +9319,7 @@ var Xo = class {
9180
9319
  5
9181
9320
  ];
9182
9321
  }
9183
- }, es = class {
9322
+ }, us = class {
9184
9323
  constructor() {
9185
9324
  h(this, "n", 0), h(this, "mean", 0);
9186
9325
  }
@@ -9192,9 +9331,9 @@ var Xo = class {
9192
9331
  get avg() {
9193
9332
  return this.n ? this.mean : NaN;
9194
9333
  }
9195
- }, ts = class {
9334
+ }, ds = class {
9196
9335
  constructor() {
9197
- h(this, "count", 0), h(this, "minVal", Infinity), h(this, "maxVal", -Infinity), h(this, "mean", new es()), h(this, "p50", new $o(.5)), h(this, "p95", new $o(.95));
9336
+ h(this, "count", 0), h(this, "minVal", Infinity), h(this, "maxVal", -Infinity), h(this, "mean", new us()), h(this, "p50", new ls(.5)), h(this, "p95", new ls(.95));
9198
9337
  }
9199
9338
  add(e) {
9200
9339
  e < this.minVal && (this.minVal = e), e > this.maxVal && (this.maxVal = e), this.mean.add(e), this.p50.add(e), this.p95.add(e), this.count++;
@@ -9212,11 +9351,11 @@ var Xo = class {
9212
9351
  get hasData() {
9213
9352
  return this.count > 0;
9214
9353
  }
9215
- }, ns = class {
9354
+ }, fs = class {
9216
9355
  constructor(e) {
9217
9356
  h(this, "_logger", void 0), h(this, "trackerByTransport", {
9218
- ws: new ts(),
9219
- wt: new ts()
9357
+ ws: new ds(),
9358
+ wt: new ds()
9220
9359
  }), h(this, "lastSeen", {}), this._logger = e;
9221
9360
  }
9222
9361
  mark(e) {
@@ -9245,17 +9384,17 @@ var Xo = class {
9245
9384
  }
9246
9385
  destroy() {
9247
9386
  this.trackerByTransport = {
9248
- ws: new ts(),
9249
- wt: new ts()
9387
+ ws: new ds(),
9388
+ wt: new ds()
9250
9389
  }, this.lastSeen = {};
9251
9390
  }
9252
- }, rs = class {
9391
+ }, ps = class {
9253
9392
  constructor(e) {
9254
9393
  h(this, "_logger", void 0), h(this, "trackerByCommand", /* @__PURE__ */ new Map()), this._logger = e;
9255
9394
  }
9256
9395
  mark(e, t, n) {
9257
9396
  let r = `${e}|${n}`, i;
9258
- this.trackerByCommand.has(r) ? i = this.trackerByCommand.get(r) : (i = new ts(), this.trackerByCommand.set(r, i)), i.add(t);
9397
+ this.trackerByCommand.has(r) ? i = this.trackerByCommand.get(r) : (i = new ds(), this.trackerByCommand.set(r, i)), i.add(t);
9259
9398
  }
9260
9399
  logMetrics() {
9261
9400
  for (let [e, t] of this.trackerByCommand.entries()) {
@@ -9277,9 +9416,9 @@ var Xo = class {
9277
9416
  destroy() {
9278
9417
  this.trackerByCommand.clear();
9279
9418
  }
9280
- }, is = class {
9419
+ }, ms = class {
9281
9420
  constructor(e, t, n, r) {
9282
- h(this, "logger", void 0), h(this, "lifecycle", void 0), h(this, "statAggregator", void 0), h(this, "codecStatsAggregator", void 0), h(this, "pings", void 0), h(this, "signalingCommands", void 0), this.logger = new Fo(e, t, n, r), this.lifecycle = new Xo(this.logger), this.statAggregator = new Qo(this.logger), this.codecStatsAggregator = new Zo(this.logger, r), this.pings = new ns(this.logger), this.signalingCommands = new rs(this.logger);
9421
+ h(this, "logger", void 0), h(this, "lifecycle", void 0), h(this, "statAggregator", void 0), h(this, "codecStatsAggregator", void 0), h(this, "pings", void 0), h(this, "signalingCommands", void 0), this.logger = new Go(e, t, n, r), this.lifecycle = new os(this.logger), this.statAggregator = new cs(this.logger), this.codecStatsAggregator = new ss(this.logger, r), this.pings = new fs(this.logger), this.signalingCommands = new ps(this.logger);
9283
9422
  }
9284
9423
  logHangup(e) {
9285
9424
  this.lifecycle.markFinished(e);
@@ -9290,7 +9429,7 @@ var Xo = class {
9290
9429
  destroy() {
9291
9430
  this.lifecycle.markTerminated(), this.lifecycle.destroy(), this.statAggregator.destroy(), this.codecStatsAggregator.destroy(), this.pings.destroy(), this.signalingCommands.destroy(), this.logger.destroy();
9292
9431
  }
9293
- }, as = class {
9432
+ }, hs = class {
9294
9433
  constructor(e) {
9295
9434
  h(this, "_statAggregator", void 0), h(this, "_isCallMarked", !1), h(this, "_isFinished", !1), h(this, "_callType", null), this._statAggregator = e;
9296
9435
  }
@@ -9315,8 +9454,8 @@ var Xo = class {
9315
9454
  call_type: this._callType
9316
9455
  }));
9317
9456
  }
9318
- }, os = 1e3, ss = 1e4;
9319
- function cs(e, t, n, r) {
9457
+ }, gs = 1e3, _s = 1e4;
9458
+ function vs(e, t, n, r) {
9320
9459
  return new O(e, {
9321
9460
  callError: {
9322
9461
  scope: "external",
@@ -9327,11 +9466,11 @@ function cs(e, t, n, r) {
9327
9466
  message: r
9328
9467
  });
9329
9468
  }
9330
- var ls = 15, $ = class e extends b {
9469
+ var ys = 15, $ = class e extends b {
9331
9470
  constructor(e, t) {
9332
- super(), h(this, "_api", void 0), h(this, "_signaling", void 0), h(this, "_signalingActor", void 0), h(this, "_displayLayoutRequester", void 0), h(this, "_mediaSource", null), h(this, "_conversation", null), h(this, "_myLastRequestedLayouts", {}), h(this, "_state", "IDLE"), h(this, "_previousState", null), h(this, "_waitingHallHoldPending", !1), h(this, "_participantState", Z.CALLED), h(this, "_participants", {}), h(this, "_directTransportIsMaster", void 0), h(this, "_transport", null), h(this, "_debugInfo", null), h(this, "_debug", R.createSessionLogger()), h(this, "_volumesDetector", null), h(this, "_speakerDetector", null), h(this, "_localVolumeDetector", null), h(this, "_specListener", null), h(this, "_activeSpeakerId", null), h(this, "_lastSignalledActiveSpeakerId", null), h(this, "_isRealTimeAsrRequested", !1), h(this, "_serverSettings", kr()), h(this, "_serverTimeOffset", 0), h(this, "_delayedHangup", !1), h(this, "_onFastHangup", void 0), h(this, "_hangupEmitted", !1), h(this, "_hangupPromise", null), h(this, "_abortController", null), h(this, "_registeredPeerReceived", !1), h(this, "_calleeUnavailableTimer", null), h(this, "_reservedId", null), h(this, "_onUnload", void 0), h(this, "_audioOutput", void 0), h(this, "_stats", void 0), h(this, "_lastStalled", {}), h(this, "_audioMixStalled", !1), h(this, "_audioFix", null), h(this, "_streamByStreamId", /* @__PURE__ */ new Map()), h(this, "_streamIdByStreamDescription", /* @__PURE__ */ new Map()), h(this, "_streamWaitTimerByStreamDescription", /* @__PURE__ */ new Map()), h(this, "_sequenceNumberByStreamDescription", /* @__PURE__ */ new Map()), h(this, "_cooldownTimestampByStreamDescription", /* @__PURE__ */ new Map()), h(this, "_cooldownQueueCleanupTimer", null), h(this, "_statFirstMediaReceived", void 0), h(this, "_toggleLocalVideo", mo((e) => {
9471
+ super(), h(this, "_api", void 0), h(this, "_signaling", void 0), h(this, "_signalingActor", void 0), h(this, "_displayLayoutRequester", void 0), h(this, "_mediaSource", null), h(this, "_conversation", null), h(this, "_myLastRequestedLayouts", {}), h(this, "_state", "IDLE"), h(this, "_previousState", null), h(this, "_waitingHallHoldPending", !1), h(this, "_participantState", Z.CALLED), h(this, "_participants", {}), h(this, "_directTransportIsMaster", void 0), h(this, "_transport", null), h(this, "_debugInfo", null), h(this, "_debug", R.createSessionLogger()), h(this, "_volumesDetector", null), h(this, "_speakerDetector", null), h(this, "_localVolumeDetector", null), h(this, "_specListener", null), h(this, "_activeSpeakerId", null), h(this, "_lastSignalledActiveSpeakerId", null), h(this, "_isRealTimeAsrRequested", !1), h(this, "_serverSettings", kr()), h(this, "_serverTimeOffset", 0), h(this, "_delayedHangup", !1), h(this, "_onFastHangup", void 0), h(this, "_hangupEmitted", !1), h(this, "_hangupPromise", null), h(this, "_abortController", null), h(this, "_registeredPeerReceived", !1), h(this, "_calleeUnavailableTimer", null), h(this, "_reservedId", null), h(this, "_onUnload", void 0), h(this, "_audioOutput", void 0), h(this, "_stats", void 0), h(this, "_lastStalled", {}), h(this, "_audioMixStalled", !1), h(this, "_audioFix", null), h(this, "_streamByStreamId", /* @__PURE__ */ new Map()), h(this, "_streamIdByStreamDescription", /* @__PURE__ */ new Map()), h(this, "_streamWaitTimerByStreamDescription", /* @__PURE__ */ new Map()), h(this, "_sequenceNumberByStreamDescription", /* @__PURE__ */ new Map()), h(this, "_cooldownTimestampByStreamDescription", /* @__PURE__ */ new Map()), h(this, "_cooldownQueueCleanupTimer", null), h(this, "_statFirstMediaReceived", void 0), h(this, "_toggleLocalVideo", wo((e) => {
9333
9472
  if (this._mediaSource) return this._stats.logger.log(C.MEDIA_STATUS, e ? "video_1" : "video_0"), this._mediaSource.toggleVideo(e);
9334
- })), h(this, "_toggleLocalAudio", mo((e) => {
9473
+ })), h(this, "_toggleLocalAudio", wo((e) => {
9335
9474
  if (this._mediaSource) return this._stats.logger.log(C.MEDIA_STATUS, e ? "audio_1" : "audio_0"), this._mediaSource.toggleAudio(e);
9336
9475
  })), h(this, "_changeMediaSettings", j.debounce(async (e) => {
9337
9476
  if (this._signaling.ready) try {
@@ -9343,21 +9482,22 @@ var ls = 15, $ = class e extends b {
9343
9482
  captureAudio: !1
9344
9483
  });
9345
9484
  }
9346
- }, 100)), this._stats = new is(e, t, () => this._conversation?.id || null, () => this._transport?.getTopology() ?? this._conversation?.topology), this._api = e, this._signaling = new za(this._debug, this._stats.logger, this._stats.statAggregator, this._stats.pings, this._stats.signalingCommands), this._signalingActor = new Do(this._onSignalingNotification.bind(this), this._debug), this._displayLayoutRequester = new Co({
9485
+ }, 100)), this._stats = new ms(e, t, () => this._conversation?.id || null, () => this._transport?.getTopology() ?? this._conversation?.topology), this._api = e, this._signaling = new Ya(this._debug, this._stats.logger, this._stats.statAggregator, this._stats.pings, this._stats.signalingCommands), this._signalingActor = new Lo(this._onSignalingNotification.bind(this), this._debug), this._displayLayoutRequester = new No({
9347
9486
  api: this._api,
9348
9487
  debug: this._debug,
9349
9488
  getParticipants: () => this._participants,
9350
9489
  isMe: (e) => this._isMe(e),
9351
- updateDisplayLayout: (e) => this.updateDisplayLayout(e)
9490
+ updateDisplayLayout: (e) => this.updateDisplayLayout(e),
9491
+ onNonFatalError: (e) => this._onNonFatalError(e)
9352
9492
  }), this._onUnload = () => {
9353
9493
  this._stopFirstMediaSentProbe(), this._conversation && this._api && this._sendHangupApi(this._conversation.id, this._state === "IDLE" ? D.CANCELED : D.HUNGUP), this._stats.destroy();
9354
- }, window.addEventListener("pagehide", this._onUnload), this._statFirstMediaReceived = new as(this._stats.statAggregator), this._audioOutput = new go(this._statFirstMediaReceived, M.transparentAudio, this._debug, this._stats.logger), M.videoTracksCount > 0 && (this._cooldownQueueCleanupTimer = window.setInterval(this._cleanupCooldownQueue.bind(this), os));
9494
+ }, window.addEventListener("pagehide", this._onUnload), this._statFirstMediaReceived = new hs(this._stats.statAggregator), this._audioOutput = new Eo(this._statFirstMediaReceived, M.transparentAudio, this._debug, this._stats.logger), M.videoTracksCount > 0 && (this._cooldownQueueCleanupTimer = window.setInterval(this._cleanupCooldownQueue.bind(this), gs));
9355
9495
  }
9356
9496
  static current() {
9357
9497
  return z.getActive() ?? (M.hold ? null : z.getFirst());
9358
9498
  }
9359
9499
  static hangupAfterInit(e) {
9360
- let t = us;
9500
+ let t = bs;
9361
9501
  if (t) {
9362
9502
  if (typeof e == "function" && (t._onFastHangup = e), t._delayedHangup === !1 && !t._conversation) {
9363
9503
  t._delayedHangup = !0, t._abortController?.abort(new O(D.CANCELED));
@@ -9384,6 +9524,9 @@ var ls = 15, $ = class e extends b {
9384
9524
  get isCallHeld() {
9385
9525
  return this._state === "HELD";
9386
9526
  }
9527
+ get isIncomingRinging() {
9528
+ return this._conversation?.direction === Xa.INCOMING && this._state === "IDLE";
9529
+ }
9387
9530
  static debugSessionId() {
9388
9531
  return e.current()?.debugSessionId ?? null;
9389
9532
  }
@@ -9401,8 +9544,14 @@ var ls = 15, $ = class e extends b {
9401
9544
  get debugSessionId() {
9402
9545
  return this._debug.sessionId;
9403
9546
  }
9404
- getCachedRawOkIdByExternalId(e) {
9405
- return this._api.getCachedRawOkIdByExternalId(e);
9547
+ getCachedParticipantIdByExternalId(e) {
9548
+ return this._api.getCachedParticipantIdByExternalId(e);
9549
+ }
9550
+ _onNonFatalError(e) {
9551
+ L.onNonFatalError(Error(e), this.id);
9552
+ }
9553
+ getIncomingCallerExternalId() {
9554
+ return this._conversation?.direction === Xa.INCOMING ? Object.values(this._participants).find((e) => !this._isMe(e.id))?.externalId ?? null : null;
9406
9555
  }
9407
9556
  _buildInternalParams() {
9408
9557
  let e = {
@@ -9412,24 +9561,24 @@ var ls = 15, $ = class e extends b {
9412
9561
  platform: M.platform,
9413
9562
  protocolVersion: M.protocolVersion,
9414
9563
  domainId: M.domain,
9415
- capabilities: xa.getFlags()
9564
+ capabilities: ja.getFlags()
9416
9565
  };
9417
9566
  return JSON.stringify(e);
9418
9567
  }
9419
9568
  async onStart({ opponentIds: e, opponentType: t, mediaOptions: n, payload: r = "", joiningAllowed: i = !1, requireAuthToJoin: a = !1, onlyAdminCanShareMovie: o, externalIds: s, onFastStart: c, conversationId: l }) {
9420
- let u = l ?? j.uuid(), d = (e?.length ?? 0) + (s?.length ?? 0), f = t === Va.USER && d === 1 ? M.calleeUnavailableWaitingTime : void 0;
9569
+ let u = l ?? j.uuid(), d = (e?.length ?? 0) + (s?.length ?? 0), f = t === Za.USER && d === 1 ? M.calleeUnavailableWaitingTime : void 0;
9421
9570
  this._stats.lifecycle.markInitializationStarted({
9422
9571
  source: "outgoing",
9423
9572
  conversationId: u
9424
- }), this._debug.setConversationId(u), us = this, this._abortController = new AbortController(), this._api.setAbortSignal(this._abortController?.signal), this._signaling.setAbortSignal(this._abortController?.signal);
9573
+ }), this._debug.setConversationId(u), bs = this, this._abortController = new AbortController(), this._api.setAbortSignal(this._abortController?.signal), this._signaling.setAbortSignal(this._abortController?.signal);
9425
9574
  try {
9426
9575
  this._mediaSource = this._createMediaSource(), await this._mediaSource.request(n);
9427
9576
  let l = this._mediaSource.mediaSettings;
9428
- t === Va.CHAT || e && e.length > 1 ? this._logWithMediaSettings(C.OUTGOING_MULTIPARTY_CALL, l) : this._logWithMediaSettings(C.OUTGOING_CALL, l);
9577
+ t === Za.CHAT || e && e.length > 1 ? this._logWithMediaSettings(C.OUTGOING_MULTIPARTY_CALL, l) : this._logWithMediaSettings(C.OUTGOING_CALL, l);
9429
9578
  let d = await this._startConversation({
9430
9579
  opponentIds: e,
9431
9580
  opponentType: t,
9432
- direction: Ba.OUTGOING,
9581
+ direction: Xa.OUTGOING,
9433
9582
  mediaOptions: n,
9434
9583
  payload: r,
9435
9584
  joiningAllowed: i,
@@ -9445,22 +9594,26 @@ var ls = 15, $ = class e extends b {
9445
9594
  description: "not-initialized-after-start"
9446
9595
  } });
9447
9596
  if (this._participantState = Z.ACCEPTED, this._changeMediaSettings(l), await this._processConnection(d), this._allocateTransport(), this._createSpeakerDetector(), this._createSpecListener(), this._signaling.readyToSend(), this._delayedHangup) throw new O(D.CANCELED);
9448
- return this._debug.debug("Outgoing call", {
9597
+ if (this._debug.debug("Outgoing call", {
9449
9598
  opponentIds: e,
9450
9599
  opponentType: t,
9451
9600
  mediaOptions: n
9452
- }), this._processConnectionSharedMovieInfo(d), this._processConversationUrlSharingInfo(d), L.onLocalStream(this._mediaSource.getStream(), this._mediaSource.mediaSettings, this.id), L.onConversation(this._conversation.externalId, this._conversation.mediaModifiers, this._getMuteStatesForCurrentRoom(), this._getMainRoomParticipants(), void 0, this.id), this._onConversationParticipantListChunk(d), this._processPinnedParticipants(d), L.onLocalStatus(N.WAITING, this.id), this._toggleJoinAvailability(), this._changeFeatureSet(), this._changeNeedRate(), z.add(this), await z.setActive(this.id), us = null, this._conversation.concurrent && await this._acceptConcurrent(), f && !this._registeredPeerReceived && this._state !== "CLOSE" && (this._calleeUnavailableTimer = window.setTimeout(() => {
9601
+ }), this._processConnectionSharedMovieInfo(d), this._processConversationUrlSharingInfo(d), L.onLocalStream(this._mediaSource.getStream(), this._mediaSource.mediaSettings, this.id), L.onConversation(this._conversation.externalId, this._conversation.mediaModifiers, this._getMuteStatesForCurrentRoom(), this._getMainRoomParticipants(), void 0, this.id), this._onConversationParticipantListChunk(d), this._processPinnedParticipants(d), L.onLocalStatus(N.WAITING, this.id), this._toggleJoinAvailability(), this._changeFeatureSet(), this._changeNeedRate(), this._conversation?.concurrent) {
9602
+ let e = z.get(this._conversation.id);
9603
+ e && e !== this && e._close(new O(D.HUNGUP, { remote: !0 }));
9604
+ }
9605
+ return z.add(this), await z.setActive(this.id), bs = null, this._conversation.concurrent && await this._acceptConcurrent(), f && !this._registeredPeerReceived && this._state !== "CLOSE" && (this._calleeUnavailableTimer = window.setTimeout(() => {
9453
9606
  this._calleeUnavailableTimer = null, this._close(new O(D.CALLEE_UNAVAILABLE), { signalingReason: D.CANCELED });
9454
9607
  }, f)), this._conversation;
9455
9608
  } catch (e) {
9456
- throw us = null, this._cleanupRegistry(), this._close(e, { errorText: "Unable to start conversation" }), e;
9609
+ throw bs = null, this._cleanupRegistry(), this._close(e, { errorText: "Unable to start conversation" }), e;
9457
9610
  }
9458
9611
  }
9459
9612
  async onJoin(e) {
9460
9613
  this._stats.lifecycle.markInitializationStarted({
9461
9614
  source: e.anonymous ? "anonym_join" : "join",
9462
9615
  conversationId: e.conversationId
9463
- }), us = this, this._state = "PROCESSING", this._debug.setConversationId(e.conversationId ?? null), this._abortController = new AbortController(), this._api.setAbortSignal(this._abortController?.signal), this._signaling.setAbortSignal(this._abortController?.signal);
9616
+ }), bs = this, this._state = "PROCESSING", this._debug.setConversationId(e.conversationId ?? null), this._abortController = new AbortController(), this._api.setAbortSignal(this._abortController?.signal), this._signaling.setAbortSignal(this._abortController?.signal);
9464
9617
  try {
9465
9618
  let t = !!e.observedIds?.length;
9466
9619
  if (t && M.videoTracksCount > 0) throw this._debug.error("Observer mode: please set videoTracksCount=0"), new O(D.UNSUPPORTED, { callError: {
@@ -9477,9 +9630,9 @@ var ls = 15, $ = class e extends b {
9477
9630
  code: "conversation",
9478
9631
  description: "not-initialized-after-join"
9479
9632
  } });
9480
- return this._conversation.observer = t, L.onLocalStream(this._mediaSource.getStream(), n, this.id), this._conversation.waitForAdmin || this._conversation.waitingHall ? (this._debug.log(this._conversation.waitForAdmin ? "Wait for admin" : "In waiting hall"), z.add(this), us = null, this._signaling.readyToSend(), L.onLocalStatus(this._conversation.waitForAdmin ? N.WAIT_FOR_ADMIN : N.WAITING_HALL, this.id), this._conversation) : this._onJoinPart2(r);
9633
+ return this._conversation.observer = t, L.onLocalStream(this._mediaSource.getStream(), n, this.id), this._conversation.waitForAdmin || this._conversation.waitingHall ? (this._debug.log(this._conversation.waitForAdmin ? "Wait for admin" : "In waiting hall"), z.add(this), bs = null, this._signaling.readyToSend(), L.onLocalStatus(this._conversation.waitForAdmin ? N.WAIT_FOR_ADMIN : N.WAITING_HALL, this.id), this._conversation) : this._onJoinPart2(r);
9481
9634
  } catch (e) {
9482
- throw us = null, this._cleanupRegistry(), this._close(e, { errorText: "Unable to join conversation" }), e;
9635
+ throw bs = null, this._cleanupRegistry(), this._close(e, { errorText: "Unable to join conversation" }), e;
9483
9636
  }
9484
9637
  }
9485
9638
  async _onJoinPart2(e, t = !0, n = !1) {
@@ -9494,7 +9647,7 @@ var ls = 15, $ = class e extends b {
9494
9647
  if (this._delayedHangup) throw new O(D.CANCELED);
9495
9648
  this._processConnectionSharedMovieInfo(e), this._processConversationUrlSharingInfo(e), this._processConnectionAsrInfo(e);
9496
9649
  let r = this._extractExternalRoomsData(e.rooms?.rooms, e.rooms?.roomId);
9497
- L.onConversation(this._conversation.externalId, this._conversation.mediaModifiers, this._getMuteStatesForCurrentRoom(), this._getMainRoomParticipants(), r, this.id), this._onConversationParticipantListChunk(e), this._processPinnedParticipants(e), L.onLocalStatus(N.WAITING, this.id), this._toggleJoinAvailability(), this._changeNeedRate(), t && (this._state = "ACTIVE"), this._changeFeatureSet(), t && (z.add(this), n ? await this._holdLocally() : await z.setActive(this.id), us = null);
9650
+ L.onConversation(this._conversation.externalId, this._conversation.mediaModifiers, this._getMuteStatesForCurrentRoom(), this._getMainRoomParticipants(), r, this.id), this._onConversationParticipantListChunk(e), this._processPinnedParticipants(e), L.onLocalStatus(N.WAITING, this.id), this._toggleJoinAvailability(), this._changeNeedRate(), t && (this._state = "ACTIVE"), this._changeFeatureSet(), t && (z.add(this), n ? await this._holdLocally() : await z.setActive(this.id), bs = null);
9498
9651
  let i = this._extractLocalParticipantFromConnection(e);
9499
9652
  if (i) {
9500
9653
  let e = j.mapParticipantState(i);
@@ -9502,11 +9655,15 @@ var ls = 15, $ = class e extends b {
9502
9655
  }
9503
9656
  return t && this._openTransport(Object.values(this._participants), !1), this._conversation;
9504
9657
  } catch (e) {
9505
- throw us = null, this._cleanupRegistry(), this._close(e, { errorText: "Unable to join conversation" }), e;
9658
+ throw bs = null, this._cleanupRegistry(), this._close(e, { errorText: "Unable to join conversation" }), e;
9506
9659
  }
9507
9660
  }
9508
9661
  _extractExternalRooms(e) {
9509
- return e.map(this._convertRoomToExternal.bind(this)).filter((e) => !!e);
9662
+ let t = [], n = [];
9663
+ return e.forEach((e) => {
9664
+ let { room: r, missingParticipantIds: i } = this._convertRoomToExternal(e);
9665
+ r && n.push(r), t.push(...i);
9666
+ }), this._reportMissingExternalIds(t, "EXTRACT_EXTERNAL_ROOMS"), n.filter((e) => !!e);
9510
9667
  }
9511
9668
  _extractExternalRoomsData(e, t) {
9512
9669
  if (!e || !e.length) return;
@@ -9518,7 +9675,7 @@ var ls = 15, $ = class e extends b {
9518
9675
  z.reserve(e), this._reservedId = e, this._stats.lifecycle.markInitializationStarted({
9519
9676
  source: "incoming",
9520
9677
  conversationId: e
9521
- }), this._debug.setConversationId(e), us = this, this._abortController = new AbortController(), this._api.setAbortSignal(this._abortController?.signal), this._signaling.setAbortSignal(this._abortController?.signal), a && this._api.setUserId(a);
9678
+ }), this._debug.setConversationId(e), bs = this, this._abortController = new AbortController(), this._api.setAbortSignal(this._abortController?.signal), this._signaling.setAbortSignal(this._abortController?.signal), a && this._api.setUserId(a);
9522
9679
  try {
9523
9680
  let a = await this._prepareConversation(e, t, n, r, i);
9524
9681
  if (this._mediaSource = this._createMediaSource(), !this._conversation) throw new O(D.UNKNOWN_ERROR, { callError: {
@@ -9527,20 +9684,20 @@ var ls = 15, $ = class e extends b {
9527
9684
  description: "incoming-not-initialized"
9528
9685
  } });
9529
9686
  if (!a.conversation.participants.find((e) => e.state === Z.CALLED && e.id === this._conversation?.userId)) throw this._debug.log("Push rejected (there is an active call)"), this._stats.logger.log(C.PUSH, "rejected"), new O(D.REJECTED);
9530
- if (await this._processConnection(a), this._extractConnectionUrlSharingInfo(a), this._allocateTransport(), this._createSpeakerDetector(), this._createSpecListener(), this._processPinnedParticipants(a), this._signaling.readyToSend(), this._stats.lifecycle.markCallStarted(), this._stats.logger.log(C.PUSH, "accepted"), z.add(this), us = null, this._delayedHangup) throw new O(D.CANCELED);
9687
+ if (await this._processConnection(a), this._extractConnectionUrlSharingInfo(a), this._allocateTransport(), this._createSpeakerDetector(), this._createSpecListener(), this._processPinnedParticipants(a), this._signaling.readyToSend(), this._stats.lifecycle.markCallStarted(), this._stats.logger.log(C.PUSH, "accepted"), z.add(this), bs = null, this._delayedHangup) throw new O(D.CANCELED);
9531
9688
  } catch (e) {
9532
- throw us = null, this._cleanupRegistry(), this._close(e, {
9689
+ throw bs = null, this._cleanupRegistry(), this._close(e, {
9533
9690
  errorText: "Unable to handle inbound call push",
9534
9691
  signalingReason: e instanceof O && e.hangup === D.BUSY ? D.BUSY : void 0
9535
9692
  }), e;
9536
9693
  }
9537
9694
  }
9538
9695
  _isInWaitingHall(e) {
9539
- return !e.conversation || !e.conversation.options.includes(Wa.WAITING_HALL) ? !1 : this._isRestricted(e);
9696
+ return !e.conversation || !e.conversation.options.includes(eo.WAITING_HALL) ? !1 : this._isRestricted(e);
9540
9697
  }
9541
9698
  _isWaitForAdmin(e) {
9542
9699
  if (!e.conversation) return !1;
9543
- let t = e.conversation.options.includes(Wa.WAIT_FOR_ADMIN), n = e.conversation.options.includes(Wa.ADMIN_IS_HERE);
9700
+ let t = e.conversation.options.includes(eo.WAIT_FOR_ADMIN), n = e.conversation.options.includes(eo.ADMIN_IS_HERE);
9544
9701
  return !t || t && n ? !1 : this._isRestricted(e);
9545
9702
  }
9546
9703
  _isRestricted(e) {
@@ -9548,7 +9705,7 @@ var ls = 15, $ = class e extends b {
9548
9705
  return t && t.restricted || !1;
9549
9706
  }
9550
9707
  _isAudienceMode(e) {
9551
- return e.conversation?.options?.includes(Wa.AUDIENCE_MODE) || !1;
9708
+ return e.conversation?.options?.includes(eo.AUDIENCE_MODE) || !1;
9552
9709
  }
9553
9710
  _isAudienceModeListener() {
9554
9711
  return this._conversation?.audienceMode && this._conversation?.restricted;
@@ -9578,7 +9735,7 @@ var ls = 15, $ = class e extends b {
9578
9735
  let i = atob(n), a = new Uint8Array(i.length);
9579
9736
  for (let e = 0; e < i.length; e++) a[e] = i.charCodeAt(e);
9580
9737
  try {
9581
- let e = po(a, r).reduce((e, t) => (e += String.fromCharCode(t), e), ""), { srcp: t, stne: n, tkn: i, trne: o, trnp: s, trnu: c, wse: l, wte: u } = JSON.parse(e);
9738
+ let e = Co(a, r).reduce((e, t) => (e += String.fromCharCode(t), e), ""), { srcp: t, stne: n, tkn: i, trne: o, trnp: s, trnu: c, wse: l, wte: u } = JSON.parse(e);
9582
9739
  return {
9583
9740
  token: i,
9584
9741
  endpoint: l,
@@ -9731,7 +9888,8 @@ var ls = 15, $ = class e extends b {
9731
9888
  D.CALLEE_IS_OFFLINE,
9732
9889
  D.CALLEE_UNAVAILABLE,
9733
9890
  D.CALLER_IS_BLOCKED,
9734
- D.CALLER_IS_REJECTED
9891
+ D.CALLER_IS_REJECTED,
9892
+ D.HAS_ACTIVE_CALL
9735
9893
  ].indexOf(e.hangup) !== -1 || e.hangup === D.REJECTED && !e.remote) {
9736
9894
  this._emitHangupOnce(e, i), this._destroy(r);
9737
9895
  return;
@@ -9780,10 +9938,10 @@ var ls = 15, $ = class e extends b {
9780
9938
  let t = await this._api.getConversationParams(e);
9781
9939
  this._debug.debug("Api.getConversationParams", t);
9782
9940
  let { turn_server: n, stun_server: r } = t;
9783
- return M.iceServers = fo(r, n), M.wssBase = t.endpoint, t.wt_endpoint && (M.wtsBase = t.wt_endpoint), M.wssToken = t.token, t.client_type && (M.clientType = t.client_type), t.external_user_type && (M.externalUserType = t.external_user_type), t;
9941
+ return M.iceServers = So(r, n), M.wssBase = t.endpoint, t.wt_endpoint && (M.wtsBase = t.wt_endpoint), M.wssToken = t.token, t.client_type && (M.clientType = t.client_type), t.external_user_type && (M.externalUserType = t.external_user_type), t;
9784
9942
  }
9785
9943
  _setConversationParams({ turn_server: e, stun_server: t, endpoint: n, wt_endpoint: r, token: i, client_type: a }) {
9786
- M.iceServers = fo(t, e), M.wssBase = n, M.wssToken = i, r && (M.wtsBase = r), a && (M.clientType = a);
9944
+ M.iceServers = So(t, e), M.wssBase = n, M.wssToken = i, r && (M.wtsBase = r), a && (M.clientType = a);
9787
9945
  }
9788
9946
  _buildSignalingEndpoint({ baseEndpoint: e, userId: t, type: n, deviceIdx: r, conversationId: i, token: a, conversationParams: o }) {
9789
9947
  let s = new URL(e), c = s.searchParams;
@@ -9815,10 +9973,10 @@ var ls = 15, $ = class e extends b {
9815
9973
  isVideo: f,
9816
9974
  joiningAllowed: a,
9817
9975
  requireAuthToJoin: o
9818
- }, this._abortController?.signal), !e) throw cs(D.FAST_START_ERROR, "invalid-response", "fast-start-response-empty");
9976
+ }, this._abortController?.signal), !e) throw vs(D.FAST_START_ERROR, "invalid-response", "fast-start-response-empty");
9819
9977
  if (!e.internalCallerParams) {
9820
9978
  let t = e.rejectedParticipants[0]?.status;
9821
- throw cs(D.FAST_START_ERROR, t ? "fast-start" : "invalid-response", t ?? "fast-start-internal-caller-params-empty", JSON.stringify(e));
9979
+ throw vs(D.FAST_START_ERROR, t ? "fast-start" : "invalid-response", t ?? "fast-start-internal-caller-params-empty", JSON.stringify(e));
9822
9980
  }
9823
9981
  } catch (e) {
9824
9982
  throw this._delayedHangup && this._abortController?.signal.aborted ? new O(D.CANCELED) : e instanceof O ? e : e instanceof Error ? new O(D.FAST_START_ERROR, { message: e.message }) : new O(D.FAST_START_ERROR, { message: String(e) });
@@ -9840,10 +9998,10 @@ var ls = 15, $ = class e extends b {
9840
9998
  token: new URL(t.endpoint).searchParams.get("token") ?? ""
9841
9999
  }, this._debug.debug("FastStart", p), m = "fastStart";
9842
10000
  } catch {
9843
- throw cs(D.FAST_START_ERROR, "invalid-response", "fast-start-internal-caller-params-invalid");
10001
+ throw vs(D.FAST_START_ERROR, "invalid-response", "fast-start-internal-caller-params-invalid");
9844
10002
  }
9845
10003
  } else p = await this._api.startConversation(d, e, t, f, i, a, o, { onlyAdminCanShareMovie: s }, c), this._debug.debug("Api.startConversation", p), m = "startConversation";
9846
- _o(p, m), this._setConversationParams(p), this._stats.lifecycle.bindConversationId(p.id);
10004
+ Do(p, m), this._setConversationParams(p), this._stats.lifecycle.bindConversationId(p.id);
9847
10005
  let ee = await this._connectSignaling(vr.START, p);
9848
10006
  return this._setConversation(p, ee, n), this._stats.lifecycle.markCallStarted(), ee;
9849
10007
  }
@@ -9868,9 +10026,9 @@ var ls = 15, $ = class e extends b {
9868
10026
  joinLink: i,
9869
10027
  isVideo: c,
9870
10028
  internalParams: this._buildInternalParams()
9871
- }, this._abortController?.signal), !e) throw cs(D.FAST_JOIN_ERROR, "invalid-response", "fast-join-response-empty");
9872
- if (!e.internalCallerParams) throw cs(D.FAST_JOIN_ERROR, "invalid-response", "fast-join-internal-caller-params-empty", JSON.stringify(e));
9873
- if (!e.conversationId) throw cs(D.FAST_JOIN_ERROR, "invalid-response", "fast-join-conversation-id-empty", JSON.stringify(e));
10029
+ }, this._abortController?.signal), !e) throw vs(D.FAST_JOIN_ERROR, "invalid-response", "fast-join-response-empty");
10030
+ if (!e.internalCallerParams) throw vs(D.FAST_JOIN_ERROR, "invalid-response", "fast-join-internal-caller-params-empty", JSON.stringify(e));
10031
+ if (!e.conversationId) throw vs(D.FAST_JOIN_ERROR, "invalid-response", "fast-join-conversation-id-empty", JSON.stringify(e));
9874
10032
  } catch (e) {
9875
10033
  throw this._delayedHangup && this._abortController?.signal.aborted ? new O(D.CANCELED) : e instanceof O ? e : e instanceof Error ? new O(D.FAST_JOIN_ERROR, { message: e.message }) : new O(D.FAST_JOIN_ERROR, { message: String(e) });
9876
10034
  }
@@ -9888,7 +10046,7 @@ var ls = 15, $ = class e extends b {
9888
10046
  token: new URL(t.endpoint).searchParams.get("token") ?? ""
9889
10047
  }, this._debug.debug("FastJoin", l), u = "fastJoin";
9890
10048
  } catch (e) {
9891
- throw e instanceof O ? e : cs(D.FAST_JOIN_ERROR, "invalid-response", "fast-join-internal-caller-params-invalid");
10049
+ throw e instanceof O ? e : vs(D.FAST_JOIN_ERROR, "invalid-response", "fast-join-internal-caller-params-invalid");
9892
10050
  }
9893
10051
  } else if (t) l = await this._api.joinConversation(t, c, r), u = "joinConversation";
9894
10052
  else if (i) l = await this._api.joinConversationByLink(i, c, a, o), u = "joinConversationByLink";
@@ -9897,13 +10055,13 @@ var ls = 15, $ = class e extends b {
9897
10055
  code: "join",
9898
10056
  description: "target-missing"
9899
10057
  } });
9900
- if (this._debug.debug("Api.joinConversation", l), l.id && this._stats.lifecycle.bindConversationId(l.id), _o(l, u), l.id) {
10058
+ if (this._debug.debug("Api.joinConversation", l), l.id && this._stats.lifecycle.bindConversationId(l.id), Do(l, u), l.id) {
9901
10059
  if (z.has(l.id)) throw new O(D.HAS_ACTIVE_CALL);
9902
10060
  z.reserve(l.id), this._reservedId = l.id;
9903
10061
  }
9904
10062
  this._setConversationParams(l);
9905
10063
  let d = await this._connectSignaling(vr.JOIN, l);
9906
- return this._setConversation(l, d, Ba.JOINING), this._stats.lifecycle.markCallStarted(), d;
10064
+ return this._setConversation(l, d, Xa.JOINING), this._stats.lifecycle.markCallStarted(), d;
9907
10065
  }
9908
10066
  async _prepareConversation(e, t = A.USER, n, r, i) {
9909
10067
  W.setMark(H.SIGNALING_CONNECTED), this._debug.debug("Conversation: push", {
@@ -9965,7 +10123,7 @@ var ls = 15, $ = class e extends b {
9965
10123
  }), l.wt_endpoint = c);
9966
10124
  }
9967
10125
  let u = await this._connectSignaling(vr.ACCEPT, l);
9968
- return z.callsLength >= M.maxParallelCalls || !M.hold && z.callsLength > 0 ? (this._debug.log("Push rejected (busy)"), this._stats.logger.log(C.PUSH, "busy"), Promise.reject(new O(D.BUSY))) : (this._setConversation(l, u, Ba.INCOMING, t), u);
10126
+ return z.callsLength >= M.maxParallelCalls || !M.hold && z.callsLength > 0 ? (this._debug.log("Push rejected (busy)"), this._stats.logger.log(C.PUSH, "busy"), Promise.reject(new O(D.BUSY))) : (this._setConversation(l, u, Xa.INCOMING, t), u);
9969
10127
  }
9970
10128
  _createParticipant(e, t, n = !0) {
9971
10129
  let r = Object.assign({
@@ -9988,19 +10146,17 @@ var ls = 15, $ = class e extends b {
9988
10146
  isInRoom: !1,
9989
10147
  markers: null
9990
10148
  }, e), i = !!r.externalId;
9991
- return i || (r.externalId = this._getParticipantId(t ?? r.id)), n && i && this._api.cacheExternalId(t ?? r.id, r.externalId), t && this._api.mapDecorativeId(t, r.id), r.observedIds?.length && (r.externalId.observer = !0), e.markers && (r.markers = this._denormalizeMarkers(r.id, e.markers)), r.connectionStatus = eo.create(r.connectionStatus), r;
10149
+ if (!i) {
10150
+ let e = this._getParticipantId(t ?? r.id);
10151
+ e && (r.externalId = e);
10152
+ }
10153
+ return n && i && this._api.cacheExternalId(t ?? r.id, r.externalId), t && this._api.mapDecorativeId(t, r.id), r.observedIds?.length && r.externalId && (r.externalId.observer = !0), e.markers && (r.markers = this._denormalizeMarkers(r.id, e.markers)), r.connectionStatus = uo.create(r.connectionStatus), r;
9992
10154
  }
9993
10155
  _getParticipantId(e) {
9994
- try {
9995
- return this._api.userId(e);
9996
- } catch (e) {
9997
- throw this._close(e instanceof O ? e : new O(D.NETWORK_ERROR, { callError: {
9998
- scope: "network",
9999
- source: "api",
10000
- code: "fetch-failed",
10001
- description: "request-failed"
10002
- } }), { errorText: e }), e;
10003
- }
10156
+ let t = this._api.userId(e);
10157
+ if (t) return t;
10158
+ let { compositeUserId: n, deviceIdx: r } = j.decomposeParticipantId(e), { id: i, type: a } = j.decomposeId(n);
10159
+ return a === A.GROUP ? Q.fromId(String(i), void 0, r) : null;
10004
10160
  }
10005
10161
  _cacheParticipantExternalIds(e) {
10006
10162
  e.forEach((e) => {
@@ -10008,7 +10164,7 @@ var ls = 15, $ = class e extends b {
10008
10164
  if (n) {
10009
10165
  this._api.cacheExternalId(t, n);
10010
10166
  let r = j.composeDecorativeId(e), i = Q.fromSignalingParticipant(e);
10011
- r && i && (this._api.cacheExternalId(r, i), this._api.mapDecorativeId(e.decorativeUserId, e.id));
10167
+ r && i && (this._api.cacheExternalId(r, i), this._api.mapDecorativeId(r, t));
10012
10168
  }
10013
10169
  });
10014
10170
  }
@@ -10057,7 +10213,11 @@ var ls = 15, $ = class e extends b {
10057
10213
  audienceMode: this._isAudienceMode(t),
10058
10214
  restricted: this._isRestricted(t),
10059
10215
  urlSharingInfoByRoom: /* @__PURE__ */ new Map()
10060
- }, this._debug.setConversationId(t.conversation.id || e.id), e.p2p_forbidden && (M.forceRelayPolicy = e.p2p_forbidden), this._stats.logger.log(C.RELAY_POLICY, M.forceRelayPolicy ? "1" : "0"), this._changeFeatureSet(), this._changeFeaturesPerRole(), this._logDevices();
10216
+ }, this._debug.setConversationId(t.conversation.id || e.id), e.p2p_forbidden && (M.forceRelayPolicy = e.p2p_forbidden), this._stats.logger.log(C.RELAY_POLICY, M.forceRelayPolicy ? "1" : "0");
10217
+ let l = z.get(this._conversation.id);
10218
+ if (l && l !== this) this._conversation.concurrent = !0;
10219
+ else if (!M.hold && z.callsLength > 0) throw new O(D.HAS_ACTIVE_CALL);
10220
+ this._changeFeatureSet(), this._changeFeaturesPerRole(), this._logDevices();
10061
10221
  }
10062
10222
  _updateConversation(e) {
10063
10223
  if (!this._conversation) throw new O(D.UNKNOWN_ERROR, { callError: {
@@ -10069,7 +10229,7 @@ var ls = 15, $ = class e extends b {
10069
10229
  }
10070
10230
  _createMediaSource() {
10071
10231
  let e = new Yt(this._debug, this._stats.logger);
10072
- return this.subscribe(e, qt.SOURCE_CHANGED, this._onLocalMediaStreamChanged.bind(this)), this.subscribe(e, qt.SCREEN_STATUS, this._onScreenSharingStatus.bind(this)), this._audioFix = new ho(e, this._debug, this._stats.logger), e;
10232
+ return this.subscribe(e, qt.SOURCE_CHANGED, this._onLocalMediaStreamChanged.bind(this)), this.subscribe(e, qt.SCREEN_STATUS, this._onScreenSharingStatus.bind(this)), this._audioFix = new To(e, this._debug, this._stats.logger), e;
10073
10233
  }
10074
10234
  async _connectSignaling(e, t) {
10075
10235
  this._signaling.setEndpoint(t.endpoint), this._signaling.setWebTransportEndpoint(t.wt_endpoint ? t.wt_endpoint : null), this.subscribe(this._signaling, G.NOTIFICATION, (e) => this._signalingActor.add(e)), this.subscribe(this._signaling, G.FAILED, this._onSignalingFailed.bind(this)), this.subscribe(this._signaling, G.RECONNECT, this._onSignalingReconnect.bind(this));
@@ -10077,7 +10237,7 @@ var ls = 15, $ = class e extends b {
10077
10237
  return this._stats.statAggregator.logEventualStat({ name: H.SIGNALING_CONNECTED }), n;
10078
10238
  }
10079
10239
  async _processConnection(e) {
10080
- await this._registerConnectionParticipants(e), this._processRooms(e), this._processMuteStates(e), this._processRecordInfos(e), this._onOptionsChanged(e.conversation.options), e.chatRoom && e.chatRoom.totalCount && this._onChatRoomUpdated(Ha.ATTENDEE, e.chatRoom.totalCount, e.chatRoom.firstParticipants, null, null);
10240
+ await this._registerConnectionParticipants(e), this._processRooms(e), this._processMuteStates(e), this._processRecordInfos(e), this._onOptionsChanged(e.conversation.options), e.chatRoom && e.chatRoom.totalCount && this._onChatRoomUpdated(Qa.ATTENDEE, e.chatRoom.totalCount, e.chatRoom.firstParticipants, null, null);
10081
10241
  }
10082
10242
  _onConversationParticipantListChunk(e) {
10083
10243
  let t = e.participants;
@@ -10146,7 +10306,7 @@ var ls = 15, $ = class e extends b {
10146
10306
  _registerParticipantLocalMuteState({ muteStates: e, unmuteOptions: t }) {
10147
10307
  if (!e) return;
10148
10308
  let n = async () => {
10149
- let n = io(e, qa.MUTE), r = io(e, qa.MUTE_PERMANENT);
10309
+ let n = ho(e, ro.MUTE), r = ho(e, ro.MUTE_PERMANENT);
10150
10310
  for (let i of [n, r]) i.length && await this._onMuteParticipant({
10151
10311
  muteStates: e,
10152
10312
  unmuteOptions: t,
@@ -10160,8 +10320,8 @@ var ls = 15, $ = class e extends b {
10160
10320
  if (!(!M.enableSessionStateUpdates || this._isMe(e))) return t;
10161
10321
  }
10162
10322
  _buildConnectionStatus(e, t, n, r = !1) {
10163
- return eo.create({
10164
- transport: r ? N.ONHOLD : eo.fromTransportState(n) ?? N.WAITING,
10323
+ return uo.create({
10324
+ transport: r ? N.ONHOLD : uo.fromTransportState(n) ?? N.WAITING,
10165
10325
  sessionState: this._remoteParticipantSessionState(e, t),
10166
10326
  sessionStateApplicable: this._isParticipantSessionStateApplicable(e)
10167
10327
  });
@@ -10170,12 +10330,12 @@ var ls = 15, $ = class e extends b {
10170
10330
  return M.enableSessionStateUpdates && !this._isMe(e) && this._conversation?.topology === J.SERVER;
10171
10331
  }
10172
10332
  _setTransportStatus(e, t) {
10173
- return eo.setTransport(e.connectionStatus, t);
10333
+ return uo.setTransport(e.connectionStatus, t);
10174
10334
  }
10175
10335
  _setSessionState(e, t) {
10176
- let n = eo.setSessionStateApplicable(e.connectionStatus, this._isParticipantSessionStateApplicable(e.id));
10336
+ let n = uo.setSessionStateApplicable(e.connectionStatus, this._isParticipantSessionStateApplicable(e.id));
10177
10337
  this._emitParticipantTransition(e, n);
10178
- let r = e.connectionStatus.sessionStateApplicable && e.id === this._activeSpeakerId && e.connectionStatus.transport === N.CONNECTED, i = eo.setSessionState(e.connectionStatus, t, r);
10338
+ let r = e.connectionStatus.sessionStateApplicable && e.id === this._activeSpeakerId && e.connectionStatus.transport === N.CONNECTED, i = uo.setSessionState(e.connectionStatus, t, r);
10179
10339
  return this._emitParticipantTransition(e, i), i;
10180
10340
  }
10181
10341
  _emitParticipantTransition(e, t, n = null) {
@@ -10187,33 +10347,40 @@ var ls = 15, $ = class e extends b {
10187
10347
  _getExistedParticipantByIdOrCreate(e) {
10188
10348
  let t = this._participants[e];
10189
10349
  if (t) return t;
10190
- let n = this._api.getDecorativeIdByInitialId(j.decomposeId(e).id), r = n ? j.composeUserId(n) : void 0, i = this._getParticipantId(e), { deviceIdx: a } = j.decomposeParticipantId(e);
10350
+ let n = this._api.getDecorativeIdByInitialId(e), r = this._getParticipantId(e), { deviceIdx: i } = j.decomposeParticipantId(e);
10191
10351
  return this._createParticipant({
10192
10352
  id: e,
10193
- externalId: {
10194
- ...i,
10195
- deviceIdx: a
10196
- }
10197
- }, r, !1);
10353
+ externalId: r ? {
10354
+ ...r,
10355
+ deviceIdx: i
10356
+ } : void 0
10357
+ }, n, !1);
10198
10358
  }
10199
10359
  _getExternalIdByParticipantId(e) {
10200
- if (this._isMe(e)) return this._conversation?.externalId;
10360
+ if (this._isMe(e)) return this._conversation?.externalId ?? null;
10201
10361
  if (M.useParticipantListChunk) return this._getExistedParticipantByIdOrCreate(e).externalId;
10202
10362
  let t = this._participants;
10203
10363
  if (t[e]?.externalId) return t[e].externalId;
10204
- {
10205
- let t = this._getParticipantId(e);
10206
- return this._api.cacheExternalId(e, t), t;
10207
- }
10364
+ let n = this._api.getCachedExternalIdByParticipantId(e);
10365
+ if (n) return n;
10366
+ let r = this._getParticipantId(e);
10367
+ return r && this._api.cacheExternalId(e, r), r;
10208
10368
  }
10209
- _getExternalIdsByOkIdsFromCache(e) {
10210
- return e.map((e) => this._api.getCachedExternalIdByOkId(e) ?? Q.fromId(String(e)));
10369
+ _getExternalIdsByParticipantIds(e) {
10370
+ let t = [], n = [];
10371
+ return e.forEach((e) => {
10372
+ let r = this._getExternalIdByParticipantId(e);
10373
+ r ? t.push(r) : n.push(e);
10374
+ }), {
10375
+ externalIds: t,
10376
+ missingIds: n
10377
+ };
10211
10378
  }
10212
- _getOrCacheExternalIdByCompositeId(e) {
10213
- let t = j.extractOkId(e), n = this._api.getCachedExternalIdByOkId(t);
10214
- if (n) return n;
10215
- let r = Q.fromId(String(t));
10216
- return this._api.cacheExternalId(e, r), r;
10379
+ _reportMissingExternalIds(e, t) {
10380
+ e.length && this._onNonFatalError(`External ID mapping not found for participants "${Array.from(new Set(e)).join("\", \"")}" while handling ${t}`);
10381
+ }
10382
+ _reportMissingExternalIdsById(e, t) {
10383
+ e.length && this._onNonFatalError(`Participant ID mapping not found for external IDs "${Array.from(new Set(e)).join("\", \"")}" while handling ${t}`);
10217
10384
  }
10218
10385
  _registerParticipantAndSetMarkersIfChunkEnabled(e, t) {
10219
10386
  if (M.useParticipantListChunk) {
@@ -10239,11 +10406,11 @@ var ls = 15, $ = class e extends b {
10239
10406
  this._onRoomSwitched(t, !0);
10240
10407
  }
10241
10408
  _processMuteStates(e, t = !1) {
10242
- let n = ao(e);
10409
+ let n = go(e);
10243
10410
  this._setMuteStatesForRoomId(n, null);
10244
10411
  for (let t of e.rooms?.rooms ?? []) this._setMuteStatesForRoomId(t.muteStates, t.id);
10245
10412
  let r = this._getMuteStatesForCurrentRoom();
10246
- t && (r = lo(e, r));
10413
+ t && (r = bo(e, r));
10247
10414
  let i = Object.keys(r), a = this._conversation?.roomId;
10248
10415
  i.length && this._onMuteParticipant({
10249
10416
  muteStates: r,
@@ -10263,15 +10430,15 @@ var ls = 15, $ = class e extends b {
10263
10430
  }
10264
10431
  _allocateTransport() {
10265
10432
  if (!this._conversation || !this._mediaSource) return;
10266
- this._transport = new la(this._conversation.topology, this._signaling, this._mediaSource, this._serverSettings, this._debug, this._stats.logger, this._stats.statAggregator, this._stats.codecStatsAggregator, this._getFirstMediaSentCallback()), this._debugInfo = new So(this._debug), this.subscribe(this._transport, X.STATE_CHANGED, this._onTransportStateChanged.bind(this)), this.subscribe(this._transport, X.LOCAL_STATE_CHANGED, this._onTransportLocalStateChanged.bind(this)), this.subscribe(this._transport, X.REMOTE_TRACK_ADDED, this._onRemoteTrackAdded.bind(this)), this.subscribe(this._transport, X.REMOTE_TRACK_REMOVED, this._onRemoteTrackRemoved.bind(this)), this.subscribe(this._transport, X.AUDIO_MIX_STALL, this._onAudioMixStall.bind(this)), this.subscribe(this._transport, X.REMOTE_DATA_STATS, this._onRemoteDataStats.bind(this)), this.subscribe(this._transport, X.SIGNALLED_STALLED_PARTICIPANTS, this._onRemoteSignalledStall.bind(this)), this.subscribe(this._transport, X.TOPOLOGY_CHANGED, this._onTopologyChanged.bind(this)), this.subscribe(this._transport, X.NETWORK_STATUS, this._onNetworkStatus.bind(this)), this.subscribe(this._transport, X.REMOTE_STREAM_SECOND, this._onRemoteStreamSecond.bind(this)), this.subscribe(this._transport, X.PEER_CONNECTION_CLOSED, this._onPeerConnectionClosed.bind(this)), this.subscribe(this._transport, X.ASR_TRANSCRIPTION, this._onAsrTranscription.bind(this)), this.subscribe(this._transport, X.ANIMOJI_STREAM, this._onAnimojiStream.bind(this)), this.subscribe(this._transport, X.ANIMOJI_ERROR, this._onAnimojiError.bind(this));
10267
- let e = this._conversation.direction === Ba.OUTGOING && !this._conversation.concurrent, t = this._participants;
10433
+ this._transport = new ya(this._conversation.topology, this._signaling, this._mediaSource, this._serverSettings, this._debug, this._stats.logger, this._stats.statAggregator, this._stats.codecStatsAggregator, this._getFirstMediaSentCallback()), this._debugInfo = new Mo(this._debug), this.subscribe(this._transport, X.STATE_CHANGED, this._onTransportStateChanged.bind(this)), this.subscribe(this._transport, X.LOCAL_STATE_CHANGED, this._onTransportLocalStateChanged.bind(this)), this.subscribe(this._transport, X.REMOTE_TRACK_ADDED, this._onRemoteTrackAdded.bind(this)), this.subscribe(this._transport, X.REMOTE_TRACK_REMOVED, this._onRemoteTrackRemoved.bind(this)), this.subscribe(this._transport, X.AUDIO_MIX_STALL, this._onAudioMixStall.bind(this)), this.subscribe(this._transport, X.REMOTE_DATA_STATS, this._onRemoteDataStats.bind(this)), this.subscribe(this._transport, X.SIGNALLED_STALLED_PARTICIPANTS, this._onRemoteSignalledStall.bind(this)), this.subscribe(this._transport, X.TOPOLOGY_CHANGED, this._onTopologyChanged.bind(this)), this.subscribe(this._transport, X.NETWORK_STATUS, this._onNetworkStatus.bind(this)), this.subscribe(this._transport, X.REMOTE_STREAM_SECOND, this._onRemoteStreamSecond.bind(this)), this.subscribe(this._transport, X.PEER_CONNECTION_CLOSED, this._onPeerConnectionClosed.bind(this)), this.subscribe(this._transport, X.ASR_TRANSCRIPTION, this._onAsrTranscription.bind(this)), this.subscribe(this._transport, X.ANIMOJI_STREAM, this._onAnimojiStream.bind(this)), this.subscribe(this._transport, X.ANIMOJI_ERROR, this._onAnimojiError.bind(this));
10434
+ let e = this._conversation.direction === Xa.OUTGOING && !this._conversation.concurrent, t = this._participants;
10268
10435
  for (let n of Object.values(t)) (n.state === Z.ACCEPTED || n.state === Z.CALLED) && this._allocateParticipantTransport(n.id, e);
10269
10436
  }
10270
10437
  _createSpeakerDetector() {
10271
- this._transport && this._conversation && (this._volumesDetector = new ko(this._transport), this.subscribe(this._volumesDetector, Oo.VOLUMES_DETECTED, this._onVolumesDetected.bind(this)), this._speakerDetector = new jo(this._volumesDetector, this._transport, this._conversation.topology), this.subscribe(this._speakerDetector, Ao.SPEAKER_CHANGED, this._onSpeakerChanged.bind(this)), this._localVolumeDetector = new Eo(this._mediaSource));
10438
+ this._transport && this._conversation && (this._volumesDetector = new zo(this._transport), this.subscribe(this._volumesDetector, Ro.VOLUMES_DETECTED, this._onVolumesDetected.bind(this)), this._speakerDetector = new Vo(this._volumesDetector, this._transport, this._conversation.topology), this.subscribe(this._speakerDetector, Bo.SPEAKER_CHANGED, this._onSpeakerChanged.bind(this)), this._localVolumeDetector = new Io(this._mediaSource));
10272
10439
  }
10273
10440
  _createSpecListener() {
10274
- this._transport && this._volumesDetector && (this._specListener = new Po(this._transport, this._volumesDetector, this._participants, this._debug, this._stats.logger));
10441
+ this._transport && this._volumesDetector && (this._specListener = new Wo(this._transport, this._volumesDetector, this._participants, this._debug, this._stats.logger));
10275
10442
  }
10276
10443
  _logDevices() {
10277
10444
  let e = T.getCameras().length, t = T.getMicrophones().length;
@@ -10370,7 +10537,7 @@ var ls = 15, $ = class e extends b {
10370
10537
  _onRemoveParticipant(e) {
10371
10538
  this._debug.debug(`Remove participant [${e}]`);
10372
10539
  let t = [], n = this._participants;
10373
- for (let r = 0; r <= ls; r++) {
10540
+ for (let r = 0; r <= ys; r++) {
10374
10541
  let i = n[j.compose(e, r)];
10375
10542
  i && t.push(i);
10376
10543
  }
@@ -10460,11 +10627,11 @@ var ls = 15, $ = class e extends b {
10460
10627
  this._waitingHallHoldPending = !1, await this._resumeLocalMedia(t, this._getWaitingForPromotionStatus()), this._allocateTransport(), this._createSpeakerDetector(), this._createSpecListener();
10461
10628
  return;
10462
10629
  }
10463
- let n = ya.get();
10630
+ let n = ka.get();
10464
10631
  await this._signaling.hold(!1, n), this._restoreStateAfterHold();
10465
10632
  let r = null;
10466
10633
  if (this._state === "IDLE" && this._participantState === Z.ACCEPTED && (r = Object.values(this._participants), r.some((e) => e.state === Z.ACCEPTED) && (this._state = "ACTIVE", this._changeFeatureSet())), await this._resumeLocalMedia(t, N.WAITING), this._allocateTransport(), this._createSpeakerDetector(), this._createSpecListener(), this._state === "ACTIVE") {
10467
- let e = this._conversation?.direction === Ba.OUTGOING && !this._conversation.concurrent;
10634
+ let e = this._conversation?.direction === Xa.OUTGOING && !this._conversation.concurrent;
10468
10635
  this._openTransport(r ?? Object.values(this._participants), e);
10469
10636
  }
10470
10637
  }
@@ -10498,30 +10665,34 @@ var ls = 15, $ = class e extends b {
10498
10665
  async updateDisplayLayout(e) {
10499
10666
  if (e.length < 1 || !this._signaling.ready) return;
10500
10667
  this._debug.log(`Update display layout request [${this._signaling.getNextCommandSequenceNumber()}]`, e);
10501
- let t = {}, n = [], r = this._participants;
10502
- for (let i of e) {
10503
- let e = typeof i.uid == "object" ? i.uid : Q.fromId(i.uid), a = this._api.getCachedOkIdByExternalId(e);
10504
- if (!a) {
10668
+ let t = {}, n = [], r = [], i = this._participants;
10669
+ for (let a of e) {
10670
+ let e = typeof a.uid == "object" ? a.uid : Q.fromId(a.uid), o = this._api.getCachedParticipantIdByExternalId(e);
10671
+ if (!o) {
10505
10672
  let t = Q.toString(e);
10506
- this._debug.log(`Unknown participant external ID ${t}`);
10673
+ this._debug.log(`Unknown participant external ID ${t}`), r.push(e.id);
10507
10674
  continue;
10508
10675
  }
10509
- let o = Mn({
10510
- participantId: a,
10511
- mediaType: i.mediaType,
10512
- streamName: i.streamName
10513
- }), s = r[a];
10514
- s ? n.push(() => {
10515
- s.lastRequestedLayouts[o] = i;
10516
- }) : this._isMe(a) && n.push(() => {
10517
- this._myLastRequestedLayouts[o] = i;
10518
- }), Dn(i) ? (this._isMe(a) && n.push(() => {
10519
- delete this._myLastRequestedLayouts[o];
10520
- }), this._streamIdByStreamDescription.has(o) && !this._cooldownTimestampByStreamDescription.has(o) && this._cooldownTimestampByStreamDescription.set(o, Date.now())) : (this._cooldownTimestampByStreamDescription.delete(o), !this._streamIdByStreamDescription.has(o) && M.videoTracksCount > 0 && this._streamIdByStreamDescription.set(o, null), t[o] = i), i.mediaType === V.SCREEN && !Dn(i) && W.setMark(W.getMarkNameScreenshareFirstFrame(a));
10521
- }
10522
- let i = this._cooldownTimestampByStreamDescription.keys();
10676
+ let s = Mn({
10677
+ participantId: o,
10678
+ mediaType: a.mediaType,
10679
+ streamName: a.streamName
10680
+ }), c = i[o];
10681
+ c ? n.push(() => {
10682
+ c.lastRequestedLayouts[s] = a;
10683
+ }) : this._isMe(o) && n.push(() => {
10684
+ this._myLastRequestedLayouts[s] = a;
10685
+ }), Dn(a) ? (this._isMe(o) && n.push(() => {
10686
+ delete this._myLastRequestedLayouts[s];
10687
+ }), this._streamIdByStreamDescription.has(s) && !this._cooldownTimestampByStreamDescription.has(s) && this._cooldownTimestampByStreamDescription.set(s, Date.now())) : (this._cooldownTimestampByStreamDescription.delete(s), !this._streamIdByStreamDescription.has(s) && M.videoTracksCount > 0 && this._streamIdByStreamDescription.set(s, null), t[s] = a), a.mediaType === V.SCREEN && !Dn(a) && W.setMark(W.getMarkNameScreenshareFirstFrame(o));
10688
+ }
10689
+ if (r.length) {
10690
+ this._reportMissingExternalIdsById(r, "updateDisplayLayout");
10691
+ return;
10692
+ }
10693
+ let a = this._cooldownTimestampByStreamDescription.keys();
10523
10694
  for (; this._streamIdByStreamDescription.size > M.videoTracksCount;) {
10524
- let e = i.next();
10695
+ let e = a.next();
10525
10696
  if (e.done) {
10526
10697
  this._debug.error("Cannot accommodate all streaming requests: tracks available " + M.videoTracksCount + "; requested streams: " + Array.from(this._streamIdByStreamDescription.keys()));
10527
10698
  break;
@@ -10583,13 +10754,13 @@ var ls = 15, $ = class e extends b {
10583
10754
  let n = Nn(e), a = i[n.participantId];
10584
10755
  if (a) {
10585
10756
  let e;
10586
- typeof t == "number" ? e = Xa(t) : (this._debug.warn(`Unexpected error code ${t} received for participant ${n.participantId}`), e = Ya.UNKNOWN_ERROR), r.push({
10757
+ typeof t == "number" ? e = oo(t) : (this._debug.warn(`Unexpected error code ${t} received for participant ${n.participantId}`), e = ao.UNKNOWN_ERROR), r.push({
10587
10758
  externalId: a.externalId,
10588
10759
  errorReason: e
10589
10760
  });
10590
10761
  }
10591
10762
  }
10592
- if (r && r.length && (this._debug.warn("Could not allocate one or more participants", r), t)) throw new ds("Could not allocate one or more participants", r);
10763
+ if (r && r.length && (this._debug.warn("Could not allocate one or more participants", r), t)) throw new xs("Could not allocate one or more participants", r);
10593
10764
  }
10594
10765
  async _cleanupCooldownQueue() {
10595
10766
  let e = {}, t = this._cooldownTimestampByStreamDescription.entries();
@@ -10597,7 +10768,7 @@ var ls = 15, $ = class e extends b {
10597
10768
  let n = t.next();
10598
10769
  if (n.done) break;
10599
10770
  let r = n.value;
10600
- if (r[1] + ss > Date.now()) break;
10771
+ if (r[1] + _s > Date.now()) break;
10601
10772
  let i = r[0];
10602
10773
  await this._stopStreaming(i), e[i] = { stopStream: !0 };
10603
10774
  } while (!0);
@@ -10613,17 +10784,22 @@ var ls = 15, $ = class e extends b {
10613
10784
  async _onParticipantPromoted(e) {
10614
10785
  this._conversation && this._conversation.audienceMode ? (this._debug.log("Promoted in audience mode", !e.demote), this._conversation.restricted = e.demote, this._processRecordInfos(e), !e.demote && this._mediaSource && this._changeMediaSettings(this._mediaSource.mediaSettings)) : (this._debug.log("Promoted in waiting hall", !e.demote), e.demote ? (this._debug.log("Kicked from waiting hall"), this._close(new O(D.REMOVED))) : (this._updateConversation(e), this._waitingHallHoldPending ? (await this._signaling.hold(!0), await this._onJoinPart2(e, !1), this._waitingHallHoldPending = !1) : z.getActive() && M.hold ? (await this._signaling.hold(!0), await this._onJoinPart2(e, !0, !0), this._waitingHallHoldPending = !1) : await this._onJoinPart2(e))), L.onPromoted(e.demote, this.id);
10615
10786
  }
10616
- async _onChatRoomUpdated(e, t = 0, n = [], r, i) {
10787
+ _onChatRoomUpdated(e, t = 0, n = [], r, i) {
10617
10788
  this._debug.log(`Chat room updated: ${e}`);
10618
- let a = [];
10789
+ let a = [], o = [];
10619
10790
  n.length && n.forEach((e) => {
10620
10791
  if (e.externalId) {
10621
10792
  let t = Q.fromSignaling(e.externalId);
10622
10793
  a.push(t), this._api.cacheExternalId(e.id.id, t);
10623
- } else a.push(this._getOrCacheExternalIdByCompositeId(e.id.id));
10794
+ } else {
10795
+ let t = this._getExternalIdByParticipantId(e.id.id);
10796
+ t ? a.push(t) : o.push(e.id.id);
10797
+ }
10624
10798
  });
10625
- let o = r?.map((e) => this._getOrCacheExternalIdByCompositeId(e)) ?? [], s = i?.map((e) => this._getOrCacheExternalIdByCompositeId(e)) ?? [];
10626
- L.onChatRoomUpdated(e, t, a, o, s, this.id);
10799
+ let { externalIds: s, missingIds: c } = this._getExternalIdsByParticipantIds(r ?? []);
10800
+ o.push(...c);
10801
+ let { externalIds: l, missingIds: u } = this._getExternalIdsByParticipantIds(i ?? []);
10802
+ o.push(...u), this._reportMissingExternalIds(o, "CHAT_ROOM_UPDATED"), L.onChatRoomUpdated(e, t, a, s, l, this.id);
10627
10803
  }
10628
10804
  _onSharedMovieUpdate(e) {
10629
10805
  let t = this._conversation?.externalId;
@@ -10796,10 +10972,10 @@ var ls = 15, $ = class e extends b {
10796
10972
  throw Error("transport is not initialized");
10797
10973
  }
10798
10974
  _isCallAdmin() {
10799
- return this._conversation ? j.includesOneOf(this._conversation.roles, [Za.ADMIN, Za.CREATOR]) : !1;
10975
+ return this._conversation ? j.includesOneOf(this._conversation.roles, [so.ADMIN, so.CREATOR]) : !1;
10800
10976
  }
10801
10977
  _checkAdminRole() {
10802
- if (this._conversation && !j.includesOneOf(this._conversation.roles, [Za.ADMIN, Za.CREATOR])) throw Error("You don't have the required permission");
10978
+ if (this._conversation && !j.includesOneOf(this._conversation.roles, [so.ADMIN, so.CREATOR])) throw Error("You don't have the required permission");
10803
10979
  }
10804
10980
  _isCalledState() {
10805
10981
  return this._participantState === Z.CALLED;
@@ -10837,43 +11013,46 @@ var ls = 15, $ = class e extends b {
10837
11013
  async changeOptions(e) {
10838
11014
  if (this._signaling.ready && this._conversation) {
10839
11015
  this._checkAdminRole(), await this._signaling.changeOptions(e);
10840
- let t = Ka(this._conversation.options, e);
11016
+ let t = no(this._conversation.options, e);
10841
11017
  this._onOptionsChanged(t);
10842
11018
  }
10843
11019
  }
10844
11020
  async getWaitingHall(e, t, n) {
10845
11021
  if (!this._signaling) return Promise.reject();
10846
11022
  let r = null;
10847
- if (e && (r = ro(e), r)) {
11023
+ if (e && (r = mo(e), r)) {
10848
11024
  let e = this._api.getDecorativeIdByInitialId(r.id);
10849
- r.id = e ? j.composeUserId(e) : r.id;
11025
+ r.id = e ?? r.id;
10850
11026
  }
10851
11027
  let i = await this._signaling.getWaitingHall(r, t, n);
10852
11028
  if (i.error) return Promise.reject(i.message);
10853
- let a = i.participants || [], { externalIds: o } = await this._resolveWaitingHallExternalIds(a), s = null;
10854
- return a.length && i.hasMore && (s = no(a[a.length - 1].id)), {
11029
+ let a = i.participants || [], { externalIds: o } = this._resolveWaitingHallExternalIds(a, "getWaitingHall"), s = null;
11030
+ return a.length && i.hasMore && (s = po(a[a.length - 1].id)), {
10855
11031
  participants: o,
10856
11032
  pageMarker: s,
10857
11033
  totalCount: i.totalCount || 0
10858
11034
  };
10859
11035
  }
10860
- async _resolveWaitingHallExternalIds(e) {
10861
- let t = [], n = [];
11036
+ _resolveWaitingHallExternalIds(e, t) {
11037
+ let n = [], r = [], i = [];
10862
11038
  return e.length && e.forEach((e) => {
10863
11039
  if (e.externalId) {
10864
- let r = Q.fromSignaling(e.externalId);
10865
- t.push(e.id.addedTs), n.push(r), this._api.cacheExternalId(e.id.id, r);
10866
- } else n.push(this._getOrCacheExternalIdByCompositeId(e.id.id)), t.push(e.id.addedTs);
10867
- }), {
10868
- externalIds: n,
10869
- timestamps: t
11040
+ let t = Q.fromSignaling(e.externalId);
11041
+ n.push(e.id.addedTs), r.push(t), this._api.cacheExternalId(e.id.id, t);
11042
+ } else {
11043
+ let t = this._getExternalIdByParticipantId(e.id.id);
11044
+ t ? (r.push(t), n.push(e.id.addedTs)) : i.push(e.id.id);
11045
+ }
11046
+ }), this._reportMissingExternalIds(i, t), {
11047
+ externalIds: r,
11048
+ timestamps: n
10870
11049
  };
10871
11050
  }
10872
11051
  async getAudienceModeHands() {
10873
11052
  if (!this._signaling.ready) throw Error("Signaling is not ready");
10874
11053
  let e = await this._signaling.getHandQueue();
10875
11054
  if (e.error) return Promise.reject(e.message);
10876
- let t = e.participants || [], { externalIds: n, timestamps: r } = await this._resolveWaitingHallExternalIds(t);
11055
+ let t = e.participants || [], { externalIds: n, timestamps: r } = this._resolveWaitingHallExternalIds(t, "getAudienceModeHands");
10877
11056
  return {
10878
11057
  timestamps: r,
10879
11058
  participants: n,
@@ -10882,7 +11061,7 @@ var ls = 15, $ = class e extends b {
10882
11061
  }
10883
11062
  async promoteParticipant(e, t) {
10884
11063
  if (this._signaling && this._conversation) try {
10885
- if (!j.includesOneOf(this._conversation.options, [Wa.WAITING_HALL, Wa.AUDIENCE_MODE])) throw Error("Unable to promote a participant in the conversation with current options");
11064
+ if (!j.includesOneOf(this._conversation.options, [eo.WAITING_HALL, eo.AUDIENCE_MODE])) throw Error("Unable to promote a participant in the conversation with current options");
10886
11065
  if (this._checkAdminRole(), !e && t) throw Error("participantId is required");
10887
11066
  await this._signaling.promoteParticipant(e, t);
10888
11067
  } catch (t) {
@@ -11042,7 +11221,7 @@ var ls = 15, $ = class e extends b {
11042
11221
  unmuteOptions: e.unmuteOptions || [],
11043
11222
  observedIds: e.observedIds || [],
11044
11223
  markers: this._denormalizeMarkers(t, e.markers)
11045
- }, e.decorativeUserId);
11224
+ }, j.composeDecorativeId(e));
11046
11225
  }));
11047
11226
  }
11048
11227
  async getParticipantListChunk(e) {
@@ -11054,7 +11233,7 @@ var ls = 15, $ = class e extends b {
11054
11233
  let a = this._transport?.getState();
11055
11234
  return n.participants.forEach((e) => {
11056
11235
  let t = j.composeId(e), n = r[t];
11057
- this._updateParticipantExternalId(n, e), this._setSessionState(n, this._remoteParticipantSessionState(t, e.sessionState)), n.isOnHold || this._setTransportStatus(n, eo.fromTransportState(a) ?? N.WAITING), n.movieShareInfos = e.movieShareInfos, Object.assign(n.mediaSettings, E(e.mediaSettings)), Object.assign(n.muteStates, e.muteStates), n.unmuteOptions = e.unmuteOptions ?? n.unmuteOptions, this._openTransport([n], !0);
11236
+ this._updateParticipantExternalId(n, e), this._setSessionState(n, this._remoteParticipantSessionState(t, e.sessionState)), n.isOnHold || this._setTransportStatus(n, uo.fromTransportState(a) ?? N.WAITING), n.movieShareInfos = e.movieShareInfos, Object.assign(n.mediaSettings, E(e.mediaSettings)), Object.assign(n.muteStates, e.muteStates), n.unmuteOptions = e.unmuteOptions ?? n.unmuteOptions, this._openTransport([n], !0);
11058
11237
  }), this._participantListChunkToExternalChunk(n);
11059
11238
  }
11060
11239
  async _getInitialParticiapntListChunk() {
@@ -11068,7 +11247,7 @@ var ls = 15, $ = class e extends b {
11068
11247
  _onLocalMediaStreamChanged(e) {
11069
11248
  if (!this._conversation || !this._mediaSource) return;
11070
11249
  let t = this._mediaSource.mediaSettings;
11071
- this._debug.debug("Local media stream changed", t), e.kind === k.audio && this._mediaSource && (this._audioFix = new ho(this._mediaSource, this._debug, this._stats.logger)), L.onLocalStreamUpdate(t, e.kind, this.id), !this._conversation?.waitingHall && !this._conversation?.observer && !this._isAudienceModeListener() && this._changeMediaSettings(t);
11250
+ this._debug.debug("Local media stream changed", t), e.kind === k.audio && this._mediaSource && (this._audioFix = new To(this._mediaSource, this._debug, this._stats.logger)), L.onLocalStreamUpdate(t, e.kind, this.id), !this._conversation?.waitingHall && !this._conversation?.observer && !this._isAudienceModeListener() && this._changeMediaSettings(t);
11072
11251
  }
11073
11252
  _onScreenSharingStatus(e) {
11074
11253
  let t = this.mediaSettings;
@@ -11088,7 +11267,7 @@ var ls = 15, $ = class e extends b {
11088
11267
  this._warnParticipantNotInConversation(e);
11089
11268
  return;
11090
11269
  }
11091
- r.mediaSettings = t, ["ACTIVE", "HELD"].includes(this._state) && L.onRemoteMediaSettings(r.externalId, t, r.markers, this.id), this._specListener && this._specListener.onChangeRemoteMediaSettings(e, t);
11270
+ r.mediaSettings = t, ["ACTIVE", "HELD"].includes(this._state) && (r.externalId ? L.onRemoteMediaSettings(r.externalId, t, r.markers, this.id) : this._reportMissingExternalIds([e], "REMOTE_MEDIA_SETTINGS")), this._specListener && this._specListener.onChangeRemoteMediaSettings(e, t);
11092
11271
  }
11093
11272
  _extractLocalParticipantFromConnection(e) {
11094
11273
  let t = this._api.getUserId();
@@ -11104,7 +11283,7 @@ var ls = 15, $ = class e extends b {
11104
11283
  this._warnParticipantNotInConversation(e);
11105
11284
  return;
11106
11285
  }
11107
- n.participantState = t || {}, ["ACTIVE", "HELD"].includes(this._state) && L.onRemoteParticipantState(n.externalId, n.participantState, n.markers, this.id);
11286
+ n.participantState = t || {}, ["ACTIVE", "HELD"].includes(this._state) && (n.externalId ? L.onRemoteParticipantState(n.externalId, n.participantState, n.markers, this.id) : this._reportMissingExternalIds([e], "REMOTE_PARTICIPANT_STATE"));
11108
11287
  }
11109
11288
  _changeMultipleParticipantState(e, t) {
11110
11289
  this._debug.debug("Multiple participants state changed", e);
@@ -11198,9 +11377,9 @@ var ls = 15, $ = class e extends b {
11198
11377
  for (let n of e.conversation.participants) {
11199
11378
  let e = j.composeId(n), i = n.roles || [];
11200
11379
  if (this._isMe(e)) {
11201
- Qa(this._conversation.roles, i) || this._onRolesChanged(e, i), t = () => {
11380
+ co(this._conversation.roles, i) || this._onRolesChanged(e, i), t = () => {
11202
11381
  this._registerParticipantLocalMuteState({
11203
- muteStates: co(n),
11382
+ muteStates: yo(n),
11204
11383
  unmuteOptions: n.unmuteOptions
11205
11384
  });
11206
11385
  };
@@ -11218,7 +11397,7 @@ var ls = 15, $ = class e extends b {
11218
11397
  let t = E(n.mediaSettings);
11219
11398
  Wt(t, a.mediaSettings) || this._changeRemoteMediaSettings(e, t);
11220
11399
  let r = j.mapParticipantState(n), o = a.participantState;
11221
- j.isEqualParticipantState(r, o) || await this._changeRemoteParticipantState(e, r), Qa(i, a.roles) || this._onRolesChanged(a.id, i), !!n.onHold != !!a.isOnHold && (a.isOnHold = !!n.onHold, this._setParticipantsStatus([a], n.onHold ? N.ONHOLD : N.CONNECTED));
11400
+ j.isEqualParticipantState(r, o) || await this._changeRemoteParticipantState(e, r), co(i, a.roles) || this._onRolesChanged(a.id, i), !!n.onHold != !!a.isOnHold && (a.isOnHold = !!n.onHold, this._setParticipantsStatus([a], n.onHold ? N.ONHOLD : N.CONNECTED));
11222
11401
  }
11223
11402
  }
11224
11403
  let i = this._participants;
@@ -11239,30 +11418,37 @@ var ls = 15, $ = class e extends b {
11239
11418
  async _onAcceptedCall(e) {
11240
11419
  let t = j.composeMessageId(e), n = j.getPeerIdString(e.peerId);
11241
11420
  if (this._debug.debug(`Participant accepted call [${t}]`), this._statFirstMediaReceived.markAcceptedCall(this._transport?.getTopology()), this._conversation && this._isMe(t)) {
11421
+ if (this._conversation.concurrent) return;
11242
11422
  this._close(new O(D.MISSED), { errorText: "Call accepted on other device" });
11243
11423
  return;
11244
11424
  }
11245
- this._conversation?.direction === Ba.OUTGOING && !this._conversation.concurrent && this._stats.lifecycle.markOutgoingAccepted();
11425
+ this._conversation?.direction === Xa.OUTGOING && !this._conversation.concurrent && this._stats.lifecycle.markOutgoingAccepted();
11246
11426
  let r = this._getParticipant(t);
11247
11427
  if (!r) {
11248
- let n = this._api.getDecorativeIdByInitialId(t), i = n ? j.composeUserId(n, e.participantType) : void 0;
11428
+ let n = this._api.getDecorativeIdByInitialId(t);
11249
11429
  r = this._registerParticipantInCache(this._createParticipant({
11250
11430
  id: t,
11251
11431
  externalId: e.externalId ? Q.fromSignaling(e.externalId, e.deviceIdx) : void 0,
11252
11432
  mediaSettings: E(e.mediaSettings)
11253
- }, i));
11433
+ }, n));
11254
11434
  } else if (e.externalId) {
11255
11435
  let t = Q.fromSignaling(e.externalId, e.deviceIdx);
11256
11436
  r.externalId = t, this._api.cacheExternalId(r.id, t);
11257
11437
  }
11258
- r.state = Z.ACCEPTED, r.mediaSettings = E(e.mediaSettings), this._logWithMediaSettings(C.ACCEPTED_OUTGOING, r.mediaSettings), this._conversation && this._conversation.direction === Ba.OUTGOING && (this._state === "IDLE" || this._state === "PROCESSING") && (this._state = "ACTIVE", this._changeFeatureSet()), this._state === "ACTIVE" && this._transport && this._transport.open([r.id], n), this._changeRemoteMediaSettings(t, r.mediaSettings), await this._changeRemoteParticipantState(t);
11438
+ r.state = Z.ACCEPTED, r.mediaSettings = E(e.mediaSettings), this._logWithMediaSettings(C.ACCEPTED_OUTGOING, r.mediaSettings), this._conversation && this._conversation.direction === Xa.OUTGOING && (this._state === "IDLE" || this._state === "PROCESSING") && (this._state = "ACTIVE", this._changeFeatureSet()), this._state === "ACTIVE" && this._transport && this._transport.open([r.id], n), this._changeRemoteMediaSettings(t, r.mediaSettings), await this._changeRemoteParticipantState(t);
11259
11439
  let i = Object.keys(r.muteStates);
11260
- i.length && this._onMuteParticipant({
11440
+ if (i.length && this._onMuteParticipant({
11261
11441
  muteStates: r.muteStates,
11262
11442
  mediaOptions: i,
11263
11443
  stateUpdated: !0,
11264
11444
  participantId: t
11265
- }), ["ACTIVE", "HELD"].includes(this._state) && L.onAcceptedCall(r.externalId, xa.parseCapabilities(e.capabilities), this.id);
11445
+ }), ["ACTIVE", "HELD"].includes(this._state)) {
11446
+ if (!r.externalId) {
11447
+ this._reportMissingExternalIds([t], "ACCEPTED_CALL");
11448
+ return;
11449
+ }
11450
+ L.onAcceptedCall(r.externalId, ja.parseCapabilities(e.capabilities), this.id);
11451
+ }
11266
11452
  }
11267
11453
  async _onHungup(e) {
11268
11454
  this._debug.debug(`Participant hungup [${e.participantId}]`, { reason: e.reason });
@@ -11298,7 +11484,7 @@ var ls = 15, $ = class e extends b {
11298
11484
  return;
11299
11485
  }
11300
11486
  if (e.connected) {
11301
- let e = eo.fromTransportState(this._transport?.getState());
11487
+ let e = uo.fromTransportState(this._transport?.getState());
11302
11488
  e && this._setTransportStatus(n, e);
11303
11489
  }
11304
11490
  this._setSessionState(n, { connected: e.connected });
@@ -11331,7 +11517,7 @@ var ls = 15, $ = class e extends b {
11331
11517
  return;
11332
11518
  }
11333
11519
  if (!n) {
11334
- let { participant: r } = e, i = r.decorativeUserId;
11520
+ let { participant: r } = e, i = j.composeDecorativeId(r);
11335
11521
  this._registerParticipant({
11336
11522
  id: t,
11337
11523
  externalId: Q.fromSignalingParticipant(r, !0, !0),
@@ -11358,7 +11544,7 @@ var ls = 15, $ = class e extends b {
11358
11544
  return;
11359
11545
  }
11360
11546
  if (!n) {
11361
- let { participant: r } = e, i = r.decorativeUserId;
11547
+ let { participant: r } = e, i = j.composeDecorativeId(r);
11362
11548
  this._registerParticipant({
11363
11549
  id: t,
11364
11550
  externalId: Q.fromSignalingParticipant(r, !0, !0),
@@ -11375,7 +11561,7 @@ var ls = 15, $ = class e extends b {
11375
11561
  isOnHold: !!r.onHold
11376
11562
  }, i), n = this._getParticipant(t);
11377
11563
  }
11378
- this._conversation && this._conversation.direction === Ba.OUTGOING && (this._state === "IDLE" || this._state === "PROCESSING") && (this._state = "ACTIVE", this._changeFeatureSet()), n.state = Z.ACCEPTED, n.mediaSettings = E(e.mediaSettings), n.participantState = j.mapParticipantState(e.participant), n.roles = e.participant.roles || [], this._updateParticipantSessionState(n, t, e.participant.sessionState), e.participant.onHold ? (n.isOnHold = !0, this._setParticipantsStatus([n], N.ONHOLD)) : this._transport?.isAllocated(n.id) ? this._setParticipantsStatus([n], N.CONNECTED) : this._setParticipantsStatus([n], N.WAITING), r && this._emitParticipantEffectiveStatusIfSessionOverridesTransport(n), this._state !== "IDLE" && this._transport && (this._transport.isAllocated(n.id) || this._allocateParticipantTransport(n.id, !0), this._transport.open([n.id], null, !!this._conversation?.observer)), L.onParticipantJoined(n.externalId, n.markers, this.id), this._changeRemoteMediaSettings(t, n.mediaSettings), await this._changeRemoteParticipantState(t, n.participantState), this._invokeRolesChangedCallbackIfNeeded(n);
11564
+ this._conversation && this._conversation.direction === Xa.OUTGOING && (this._state === "IDLE" || this._state === "PROCESSING") && (this._state = "ACTIVE", this._changeFeatureSet()), n.state = Z.ACCEPTED, n.mediaSettings = E(e.mediaSettings), n.participantState = j.mapParticipantState(e.participant), n.roles = e.participant.roles || [], this._updateParticipantSessionState(n, t, e.participant.sessionState), e.participant.onHold ? (n.isOnHold = !0, this._setParticipantsStatus([n], N.ONHOLD)) : this._transport?.isAllocated(n.id) ? this._setParticipantsStatus([n], N.CONNECTED) : this._setParticipantsStatus([n], N.WAITING), r && this._emitParticipantEffectiveStatusIfSessionOverridesTransport(n), this._state !== "IDLE" && this._transport && (this._transport.isAllocated(n.id) || this._allocateParticipantTransport(n.id, !0), this._transport.open([n.id], null, !!this._conversation?.observer)), L.onParticipantJoined(n.externalId, n.markers, this.id), this._changeRemoteMediaSettings(t, n.mediaSettings), await this._changeRemoteParticipantState(t, n.participantState), this._invokeRolesChangedCallbackIfNeeded(n);
11379
11565
  let i = Object.keys(n.muteStates);
11380
11566
  i.length && this._onMuteParticipant({
11381
11567
  muteStates: n.muteStates,
@@ -11401,7 +11587,7 @@ var ls = 15, $ = class e extends b {
11401
11587
  _onParticipantsStateChanged(e) {
11402
11588
  let { participants: t, roomId: n } = e;
11403
11589
  t.map(({ id: e, markers: t }) => this._registerParticipantAndSetMarkersIfChunkEnabled(e, t));
11404
- let r = /* @__PURE__ */ new Map(), i = t.map(({ id: e, participantState: t }) => [e, this._getExternalIdByParticipantId(e) && j.mapParticipantState({ participantState: t })]);
11590
+ let r = /* @__PURE__ */ new Map(), i = t.map(({ id: e, participantState: t }) => [e, this._getExternalIdByParticipantId(e) ? j.mapParticipantState({ participantState: t }) : void 0]);
11405
11591
  try {
11406
11592
  i.forEach(([e, t]) => {
11407
11593
  t && r.set(e, t);
@@ -11566,15 +11752,15 @@ var ls = 15, $ = class e extends b {
11566
11752
  L.onAsrTranscription(t, e.text, e.timestamp, e.duration, this.id);
11567
11753
  }
11568
11754
  async _onRolesChanged(e, t) {
11569
- if (this._conversation && this._isMe(e) && !Qa(this._conversation.roles, t)) {
11755
+ if (this._conversation && this._isMe(e) && !co(this._conversation.roles, t)) {
11570
11756
  this._debug.debug(`Local roles changed: ${t}`), this._conversation.roles = t, L.onLocalRolesChanged(t, !1, this.id), this._processMuteState({
11571
- mediaOptions: io(this._getMuteStatesForCurrentRoom(), qa.MUTE_PERMANENT),
11757
+ mediaOptions: ho(this._getMuteStatesForCurrentRoom(), ro.MUTE_PERMANENT),
11572
11758
  stateUpdated: !0
11573
- }), j.includesOneOf(t, [Za.ADMIN, Za.CREATOR]) ? this._refreshRooms(!0) : t.length || this._onRoomSwitched(null);
11759
+ }), j.includesOneOf(t, [so.ADMIN, so.CREATOR]) ? this._refreshRooms(!0) : t.length || this._onRoomSwitched(null);
11574
11760
  return;
11575
11761
  }
11576
11762
  let n = this._getParticipant(e);
11577
- n && !Qa(n.roles, t) && (this._debug.debug(`Roles for participant [${e}] changed: ${t}`), n.roles = t, L.onRolesChanged(n.externalId, t, !1, this.id));
11763
+ n && !co(n.roles, t) && (this._debug.debug(`Roles for participant [${e}] changed: ${t}`), n.roles = t, L.onRolesChanged(n.externalId, t, !1, this.id));
11578
11764
  }
11579
11765
  async _onMuteParticipant(e, t = !1) {
11580
11766
  if (!this._conversation) return;
@@ -11623,7 +11809,7 @@ var ls = 15, $ = class e extends b {
11623
11809
  let { mediaOptions: t = [], muteAll: n, unmute: r, stateUpdated: i, requestedMedia: a, roomId: o = null, unmuteOptions: s = [] } = e, c = e.adminId ? this._getExternalIdByParticipantId(e.adminId) : null, l = Object.assign({}, e.muteStates ?? this._getMuteStatesForRoomId(o)), u = this._mediaSource.mediaSettings, d = Object.entries(l);
11624
11810
  for (let [e, i] of d) {
11625
11811
  let a = this._isCallAdmin() && n;
11626
- if (!(i !== qa.MUTE && i !== qa.MUTE_PERMANENT || a) && (this._isCallAdmin() && i === qa.MUTE_PERMANENT && !n && (l[e] = qa.MUTE), !(!t.includes(e) || r))) switch (e) {
11812
+ if (!(i !== ro.MUTE && i !== ro.MUTE_PERMANENT || a) && (this._isCallAdmin() && i === ro.MUTE_PERMANENT && !n && (l[e] = ro.MUTE), !(!t.includes(e) || r))) switch (e) {
11627
11813
  case S.VIDEO:
11628
11814
  u.isVideoEnabled && (L.onDeviceSwitched(S.VIDEO, !1, this.id), await this.toggleLocalVideo(!1));
11629
11815
  break;
@@ -11660,7 +11846,7 @@ var ls = 15, $ = class e extends b {
11660
11846
  this._conversation.pinnedParticipantIdByRoom.set(r, t ? null : e);
11661
11847
  }
11662
11848
  _onOptionsChanged(e) {
11663
- this._conversation && !Ga(this._conversation.options, e) && (this._conversation.options = e, L.onOptionsChanged(e, this.id), e.includes(Wa.ADMIN_IS_HERE) ? this._conversation.restricted && this._conversation.waitingHall && L.onLocalStatus(N.WAITING_HALL, this.id) : e.includes(Wa.WAIT_FOR_ADMIN) && this._conversation.restricted && L.onLocalStatus(N.WAIT_FOR_ADMIN, this.id));
11849
+ this._conversation && !to(this._conversation.options, e) && (this._conversation.options = e, L.onOptionsChanged(e, this.id), e.includes(eo.ADMIN_IS_HERE) ? this._conversation.restricted && this._conversation.waitingHall && L.onLocalStatus(N.WAITING_HALL, this.id) : e.includes(eo.WAIT_FOR_ADMIN) && this._conversation.restricted && L.onLocalStatus(N.WAIT_FOR_ADMIN, this.id));
11664
11850
  }
11665
11851
  async _onNetworkStatus(e) {
11666
11852
  if (this._conversation) {
@@ -11670,7 +11856,7 @@ var ls = 15, $ = class e extends b {
11670
11856
  if (this._isMe(r) || r === "") e = this._conversation.networkRating;
11671
11857
  else if (n[r]) e = n[r].networkRating;
11672
11858
  else continue;
11673
- if (e !== i) if (this._isMe(r) || r === "") this._conversation.networkRating = i, Zr.getInstance().value = i, L.onLocalNetworkStatusChanged(i, this.id);
11859
+ if (e !== i) if (this._isMe(r) || r === "") this._conversation.networkRating = i, si.getInstance().value = i, L.onLocalNetworkStatusChanged(i, this.id);
11674
11860
  else {
11675
11861
  let e = n[r];
11676
11862
  e.networkRating = i, t.push({
@@ -11715,7 +11901,7 @@ var ls = 15, $ = class e extends b {
11715
11901
  }
11716
11902
  _changeFeatureSet() {
11717
11903
  if (this._conversation) {
11718
- let e = this._state === "ACTIVE", t = this._conversation.features.includes(Ua.ADD_PARTICIPANT);
11904
+ let e = this._state === "ACTIVE", t = this._conversation.features.includes($a.ADD_PARTICIPANT);
11719
11905
  L.onCallState(e, t, this._conversation, this.id);
11720
11906
  }
11721
11907
  }
@@ -11749,7 +11935,7 @@ var ls = 15, $ = class e extends b {
11749
11935
  let n = this._getParticipant(e);
11750
11936
  if (n) {
11751
11937
  if (n.connectionStatus.sessionStateApplicable && n.connectionStatus.sessionState?.connected === !1) {
11752
- let e = eo.fromTransportState(this._transport?.getState());
11938
+ let e = uo.fromTransportState(this._transport?.getState());
11753
11939
  e && this._setTransportStatus(n, e), n.connectionStatus.sessionStateConnectedBySpeaker = !0;
11754
11940
  let t = this._setTransportStatus(n, n.connectionStatus.transport);
11755
11941
  this._emitParticipantTransition(n, t);
@@ -11759,7 +11945,7 @@ var ls = 15, $ = class e extends b {
11759
11945
  }
11760
11946
  async _onTransportStateChanged(e, t) {
11761
11947
  this._debug.debug(`Transport state has changed: ${t}`, e);
11762
- let n = eo.fromTransportState(t);
11948
+ let n = uo.fromTransportState(t);
11763
11949
  if (!n) return;
11764
11950
  let r = this._participants, i = [], a = e.reduce((e, n) => {
11765
11951
  if (n in r) {
@@ -11793,15 +11979,15 @@ var ls = 15, $ = class e extends b {
11793
11979
  return e.every((e) => t[e]?.isOnHold);
11794
11980
  }
11795
11981
  _onRemoteTrackAdded(e, t, n) {
11796
- if (e.endsWith(qr.AUDIO_MIX)) this._debug.debug("Remote audio mix track added"), this._audioOutput.add(e, n), L.onRemoteMixedAudioStream(t, this.id);
11797
- else if (e.startsWith(qr.TRANSPARENT_AUDIO_TRACK_PREFIX)) this._debug.debug(`Remote transparent audio track added: ${e}`), this._audioOutput.add(e, n);
11798
- else if (e.startsWith(qr.PARTICIPANT_AGNOSTIC_TRACK_PREFIX)) this._debug.debug(`Participant-agnostic track added: ${e}`), this._streamByStreamId.set(e, t);
11982
+ if (e.endsWith(ri.AUDIO_MIX)) this._debug.debug("Remote audio mix track added"), this._audioOutput.add(e, n), L.onRemoteMixedAudioStream(t, this.id);
11983
+ else if (e.startsWith(ri.TRANSPARENT_AUDIO_TRACK_PREFIX)) this._debug.debug(`Remote transparent audio track added: ${e}`), this._audioOutput.add(e, n);
11984
+ else if (e.startsWith(ri.PARTICIPANT_AGNOSTIC_TRACK_PREFIX)) this._debug.debug(`Participant-agnostic track added: ${e}`), this._streamByStreamId.set(e, t);
11799
11985
  else {
11800
11986
  this._debug.debug(`Remote track added on the participant [${e}]`, { kind: n.kind });
11801
11987
  let r = this._getParticipant(e);
11802
11988
  if (!r) {
11803
- let t = this._api.getDecorativeIdByInitialId(e), n = t ? j.composeUserId(t) : void 0;
11804
- this._debug.warn(`Conversation: track added before participant [id: ${e}, decorativeId: ${n}]`), this._registerParticipant({ id: e }, n), r = this._getParticipant(e), this._setParticipantsStatus([r], N.WAITING), this._activeSpeakerId === e && this._lastSignalledActiveSpeakerId !== e && (L.onSpeakerChanged(r.externalId, this.id), this._lastSignalledActiveSpeakerId = e);
11989
+ let t = this._api.getDecorativeIdByInitialId(e);
11990
+ this._debug.warn(`Conversation: track added before participant [id: ${e}, decorativeId: ${t}]`), this._registerParticipant({ id: e }, t), r = this._getParticipant(e), this._setParticipantsStatus([r], N.WAITING), this._activeSpeakerId === e && this._lastSignalledActiveSpeakerId !== e && (L.onSpeakerChanged(r.externalId, this.id), this._lastSignalledActiveSpeakerId = e);
11805
11991
  }
11806
11992
  if (this._transport && !this._transport.isAllocated(r.id) && this._allocateParticipantTransport(r.id, !1), n.kind === k.audio && (this._audioOutput.add(e, n), M.preserveAudioTracks || (r.remoteAudioTrack = n, t.removeTrack(n))), r.remoteStream !== t && t.getTracks().length) {
11807
11993
  if (r.remoteStream = t, r.secondStream) return;
@@ -11822,7 +12008,7 @@ var ls = 15, $ = class e extends b {
11822
12008
  }
11823
12009
  }
11824
12010
  async _removeAudioTrack(e, t, n) {
11825
- if (e !== qr.AUDIO_MIX) {
12011
+ if (e !== ri.AUDIO_MIX) {
11826
12012
  let n = this._getParticipant(e);
11827
12013
  if (!n || n.remoteStream && n.remoteStream !== t) return;
11828
12014
  }
@@ -11837,7 +12023,7 @@ var ls = 15, $ = class e extends b {
11837
12023
  if (this._statFirstMediaReceived.markTopologyChanged(e), e === J.DIRECT && (this._onRemoteSignalledStall([]), this._onAudioMixStall(!1)), this._conversation) {
11838
12024
  this._conversation.topology = e;
11839
12025
  for (let e of Object.values(this._participants)) {
11840
- let t = eo.setSessionStateApplicable(e.connectionStatus, this._isParticipantSessionStateApplicable(e.id));
12026
+ let t = uo.setSessionStateApplicable(e.connectionStatus, this._isParticipantSessionStateApplicable(e.id));
11841
12027
  this._emitParticipantTransition(e, t);
11842
12028
  }
11843
12029
  this._changeFeatureSet(), this._forceOpenTransportForAloneInCall();
@@ -11893,7 +12079,7 @@ var ls = 15, $ = class e extends b {
11893
12079
  ].includes(t) ? null : this._setTransportStatus(e, t), n);
11894
12080
  }
11895
12081
  _setParticipantsStalled(e, t) {
11896
- this._updateParticipantsStatus(e, (e) => eo.setStalled(e.connectionStatus, t));
12082
+ this._updateParticipantsStatus(e, (e) => uo.setStalled(e.connectionStatus, t));
11897
12083
  }
11898
12084
  _updateParticipantsStatus(e, t, n = null) {
11899
12085
  let r = e.reduce((e, n) => {
@@ -11911,46 +12097,63 @@ var ls = 15, $ = class e extends b {
11911
12097
  }
11912
12098
  _onRoomsUpdated(e) {
11913
12099
  if (this._isCalledState()) return;
11914
- let t = {};
11915
- for (let n of Object.keys(Ja)) {
11916
- let r = e.updates[n];
11917
- r && (t[n] = {
11918
- rooms: r?.rooms?.map(this._convertRoomToExternal.bind(this)) || [],
11919
- roomIds: r?.roomIds,
11920
- deactivated: r?.deactivated
12100
+ let t = {}, n = [], r = [];
12101
+ for (let i of Object.keys(io)) {
12102
+ let a = e.updates[i];
12103
+ a && (a?.rooms?.forEach((e) => {
12104
+ let { room: t, missingParticipantIds: i } = this._convertRoomToExternal(e);
12105
+ t && n.push(t), r.push(...i);
12106
+ }), t[i] = {
12107
+ rooms: n,
12108
+ roomIds: a?.roomIds,
12109
+ deactivated: a?.deactivated
11921
12110
  });
11922
12111
  }
11923
- L.onRoomsUpdated(t, this.id);
12112
+ this._reportMissingExternalIds(r, "ROOMS_UPDATED"), L.onRoomsUpdated(t, this.id);
11924
12113
  }
11925
12114
  _onRoomUpdated(e) {
11926
- let t = this._convertRoomToExternal(e.room || null);
11927
- e.events.some((e) => e === Ja.UPDATE) && (e.muteStates !== void 0 && this._setMuteStatesForRoomId(e.muteStates, e.roomId), e.recordInfo !== void 0 && this._conversation?.recordsInfoByRoom.set(e.roomId, e.recordInfo), e.asrInfo !== void 0 && this._conversation?.asrInfoByRoom.set(e.roomId, e.asrInfo)), this._isCalledState() || L.onRoomUpdated(e.events, e.roomId, t, e.deactivate || null, this.id);
12115
+ let { room: t, missingParticipantIds: n } = this._convertRoomToExternal(e.room || null);
12116
+ e.events.some((e) => e === io.UPDATE) && (e.muteStates !== void 0 && this._setMuteStatesForRoomId(e.muteStates, e.roomId), e.recordInfo !== void 0 && this._conversation?.recordsInfoByRoom.set(e.roomId, e.recordInfo), e.asrInfo !== void 0 && this._conversation?.asrInfoByRoom.set(e.roomId, e.asrInfo)), this._isCalledState() || (this._reportMissingExternalIds(n, "ROOM_UPDATED"), L.onRoomUpdated(e.events, e.roomId, t, e.deactivate || null, this.id));
11928
12117
  }
11929
12118
  _convertRoomToExternal(e) {
11930
- if (!e) return null;
11931
- let t = e.participantIds?.map((e) => this._getExternalIdByParticipantId(e)) || [], n = e.addParticipantIds?.map((e) => this._getExternalIdByParticipantId(e)) || [], r = e.removeParticipantIds?.map?.((e) => this._getExternalIdByParticipantId(e)) || [], i = e.pinnedParticipantId ? this._getExternalIdByParticipantId(e.pinnedParticipantId) : void 0;
12119
+ if (!e) return {
12120
+ room: null,
12121
+ missingParticipantIds: []
12122
+ };
12123
+ let t = [], { externalIds: n, missingIds: r } = this._getExternalIdsByParticipantIds(e.participantIds ?? []), { externalIds: i, missingIds: a } = this._getExternalIdsByParticipantIds(e.addParticipantIds ?? []), { externalIds: o, missingIds: s } = this._getExternalIdsByParticipantIds(e.removeParticipantIds ?? []);
12124
+ t.push(...r, ...a, ...s);
12125
+ let c;
12126
+ if (e.pinnedParticipantId) {
12127
+ let n = this._getExternalIdByParticipantId(e.pinnedParticipantId);
12128
+ n ? c = n : t.push(e.pinnedParticipantId);
12129
+ }
11932
12130
  return {
11933
- id: e.id,
11934
- name: e.name,
11935
- participantCount: e.participantCount,
11936
- participantIds: t,
11937
- addParticipantIds: n,
11938
- removeParticipantIds: r,
11939
- participants: e.participants?.participants ? this._participantListChunkToExternalChunk(e.participants) : void 0,
11940
- active: e.active,
11941
- muteStates: e.muteStates,
11942
- pinnedParticipantId: i,
11943
- countdownSec: e.countdownSec,
11944
- timeoutMs: e.timeoutMs
12131
+ room: {
12132
+ id: e.id,
12133
+ name: e.name,
12134
+ participantCount: e.participantCount,
12135
+ participantIds: n,
12136
+ addParticipantIds: i,
12137
+ removeParticipantIds: o,
12138
+ participants: e.participants?.participants ? this._participantListChunkToExternalChunk(e.participants) : void 0,
12139
+ active: e.active,
12140
+ muteStates: e.muteStates,
12141
+ pinnedParticipantId: c,
12142
+ countdownSec: e.countdownSec,
12143
+ timeoutMs: e.timeoutMs
12144
+ },
12145
+ missingParticipantIds: t
11945
12146
  };
11946
12147
  }
11947
12148
  async _onRoomParticipantsUpdated(e) {
11948
- let t = this._transport?.getState(), n = e.roomId ?? null, r = e.addedParticipantIds?.map((e) => j.decomposeId(e).id) || [], i = this._getExternalIdsByOkIdsFromCache(r), a = e.addedParticipants;
11949
- if (i.length && a?.length !== i.length && !this._isCalledState()) {
12149
+ let t = this._transport?.getState(), n = e.roomId ?? null, r = [], { externalIds: i, missingIds: a } = this._getExternalIdsByParticipantIds(e.addedParticipantIds ?? []);
12150
+ r.push(...a);
12151
+ let o = e.addedParticipants;
12152
+ if (i.length && o?.length !== i.length && !this._isCalledState()) {
11950
12153
  let e = this._convertExternalIdsToServerExternalIds(i);
11951
- a = (await this._signaling.getParticipants(e)).participants;
12154
+ o = (await this._signaling.getParticipants(e)).participants;
11952
12155
  }
11953
- let o = a?.map((e) => {
12156
+ let s = o?.map((e) => {
11954
12157
  let r = j.composeId(e);
11955
12158
  return this._createParticipant({
11956
12159
  id: r,
@@ -11966,38 +12169,38 @@ var ls = 15, $ = class e extends b {
11966
12169
  observedIds: e.observedIds || [],
11967
12170
  markers: this._denormalizeMarkers(r, e.markers),
11968
12171
  isInRoom: n !== null
11969
- }, e.decorativeUserId);
11970
- }) || [], s = !1;
11971
- for (let e of o) e.id === this._conversation?.compositeUserId && (s = !0), this._registerParticipantInCache(e);
11972
- this._transport?.getState() === q.IDLE && !this._isCalledState() && this._openTransport(o, !0);
11973
- let c = [];
12172
+ }, j.composeDecorativeId(e));
12173
+ }) || [], c = !1;
12174
+ for (let e of s) e.id === this._conversation?.compositeUserId && (c = !0), this._registerParticipantInCache(e);
12175
+ this._transport?.getState() === q.IDLE && !this._isCalledState() && this._openTransport(s, !0);
12176
+ let l = [];
11974
12177
  if (e?.removedParticipantMarkers) {
11975
12178
  for (let t of e.removedParticipantMarkers) if (t.GRID?.id) {
11976
12179
  let e = this._getExternalIdByParticipantId(t.GRID.id);
11977
- c.push(e);
12180
+ e ? l.push(e) : r.push(t.GRID.id);
11978
12181
  }
11979
12182
  }
11980
- if (s && await this._onRoomSwitched(n), c) {
12183
+ if (this._reportMissingExternalIds(r, "ROOM_PARTICIPANTS_UPDATED"), c && await this._onRoomSwitched(n), l) {
11981
12184
  let e = this._conversation?.pinnedParticipantIdByRoom.get(n);
11982
12185
  if (e) {
11983
12186
  let t = this._getExternalIdByParticipantId(e);
11984
12187
  if (t) {
11985
- for (let e of c) if (Q.compare(t, e)) {
12188
+ for (let e of l) if (Q.compare(t, e)) {
11986
12189
  this._conversation?.pinnedParticipantIdByRoom.delete(n);
11987
12190
  break;
11988
12191
  }
11989
12192
  }
11990
12193
  }
11991
12194
  }
11992
- let l = {
12195
+ let u = {
11993
12196
  roomId: n,
11994
12197
  participantCount: e.participantCount,
11995
12198
  addedParticipantIds: i,
11996
- addedParticipants: j.mapSharedParticipants(o),
12199
+ addedParticipants: j.mapSharedParticipants(s),
11997
12200
  removedParticipantMarkers: e?.removedParticipantMarkers,
11998
- removedParticipantIds: c
12201
+ removedParticipantIds: l
11999
12202
  };
12000
- this._isCalledState() || L.onRoomParticipantsUpdated(l, this.id);
12203
+ this._isCalledState() || L.onRoomParticipantsUpdated(u, this.id);
12001
12204
  }
12002
12205
  async _onRoomSwitched(e, t = !1) {
12003
12206
  if (!this._conversation || this._conversation.roomId === e) return;
@@ -12017,11 +12220,11 @@ var ls = 15, $ = class e extends b {
12017
12220
  if (this._setMuteStatesForRoomId(t.muteStates, n), this._conversation?.recordsInfoByRoom.set(n, t.recordInfo ?? null), this._conversation?.pinnedParticipantIdByRoom.set(n, t.pinnedParticipantId ?? null), t.asrInfo && this._conversation?.asrInfoByRoom.set(n, t.asrInfo), t.urlSharingInfo ? this._conversation?.urlSharingInfoByRoom.set(n, t.urlSharingInfo) : this._conversation?.urlSharingInfoByRoom.delete(n), e) {
12018
12221
  let e = this._participants;
12019
12222
  await this._registerParticipants(t?.participants?.participants?.filter((t) => !e[j.composeId(t)]) || [], !0);
12020
- let n = this._convertRoomToExternal(t);
12223
+ let { room: n } = this._convertRoomToExternal(t);
12021
12224
  n && r.push(n);
12022
12225
  }
12023
12226
  }
12024
- r.length && !this._isCalledState() && L.onRoomsUpdated({ [Ja.UPDATE]: { rooms: r } }, this.id);
12227
+ r.length && !this._isCalledState() && L.onRoomsUpdated({ [io.UPDATE]: { rooms: r } }, this.id);
12025
12228
  }
12026
12229
  _onFeedback(e) {
12027
12230
  let t = [];
@@ -12051,7 +12254,9 @@ var ls = 15, $ = class e extends b {
12051
12254
  return;
12052
12255
  }
12053
12256
  let o = Q.fromSignaling(r, a.deviceIdx);
12054
- if (L.onParticipantIdChanged(a, o, this.id), this._api.cacheExternalId(n, o), this._api.mapDecorativeId(n, t), i) this._conversation.externalId = o;
12257
+ L.onParticipantIdChanged(a, o, this.id);
12258
+ let s = j.compose(n, a.deviceIdx), c = j.compose(t, a.deviceIdx);
12259
+ if (this._api.cacheExternalId(s, o), this._api.mapDecorativeId(s, c), i) this._conversation.externalId = o;
12055
12260
  else {
12056
12261
  let e = this._participants;
12057
12262
  e[t].externalId = o;
@@ -12095,19 +12300,19 @@ var ls = 15, $ = class e extends b {
12095
12300
  _getParticipant(e) {
12096
12301
  return this._participants[e];
12097
12302
  }
12098
- }, us = null, ds = class e extends Error {
12303
+ }, bs = null, xs = class e extends Error {
12099
12304
  constructor(t, n) {
12100
12305
  super(t), h(this, "participantErrors", void 0), Object.setPrototypeOf(this, e.prototype), this.participantErrors = n;
12101
12306
  }
12102
- }, fs = null, ps = null, ms = 64 * 1024;
12103
- function hs() {
12104
- fs = null, ps = null;
12307
+ }, Ss = null, Cs = null, ws = 64 * 1024;
12308
+ function Ts() {
12309
+ Ss = null, Cs = null;
12105
12310
  }
12106
- function gs(e) {
12311
+ function Es(e) {
12107
12312
  return e?.endsWith("/") ? e.slice(0, -1) : e;
12108
12313
  }
12109
- async function _s(e = null, t) {
12110
- let n = gs(e ?? M.apiBaseUrl);
12314
+ async function Ds(e = null, t) {
12315
+ let n = Es(e ?? M.apiBaseUrl);
12111
12316
  if (n) return n;
12112
12317
  if ((t ?? M.apiEnv) !== "AUTO") return M.apiEndpoint(t);
12113
12318
  try {
@@ -12122,25 +12327,25 @@ async function _s(e = null, t) {
12122
12327
  return R.warn("Failed to resolve API endpoint using DNS, default is used", e), M.apiEndpoint(t);
12123
12328
  }
12124
12329
  }
12125
- async function vs() {
12126
- return fs || ps || (ps = _s(), fs = await ps, ps = null, fs);
12330
+ async function Os() {
12331
+ return Ss || Cs || (Cs = Ds(), Ss = await Cs, Cs = null, Ss);
12127
12332
  }
12128
- async function ys(e, t = {}, n = !1) {
12333
+ async function ks(e, t = {}, n = !1) {
12129
12334
  if (!window.Blob || !window.navigator.sendBeacon) return;
12130
- await vs();
12131
- let r = Ts(e, t, n), i = new window.Blob([r], { type: "application/x-www-form-urlencoded" });
12132
- window.navigator.sendBeacon(`${fs}/fb.do`, i);
12335
+ await Os();
12336
+ let r = Fs(e, t, n), i = new window.Blob([r], { type: "application/x-www-form-urlencoded" });
12337
+ window.navigator.sendBeacon(`${Ss}/fb.do`, i);
12133
12338
  }
12134
- async function bs(e, t = {}, n = !1, r) {
12135
- return await vs(), Ss(Ts(e, t, n), r);
12339
+ async function As(e, t = {}, n = !1, r) {
12340
+ return await Os(), Ms(Fs(e, t, n), r);
12136
12341
  }
12137
- async function xs(e, t = {}, n = !1) {
12138
- await vs();
12139
- let r = Ts(e, t, n);
12140
- return Ss(r, void 0, new Blob([r]).size <= ms);
12342
+ async function js(e, t = {}, n = !1) {
12343
+ await Os();
12344
+ let r = Fs(e, t, n);
12345
+ return Ms(r, void 0, new Blob([r]).size <= ws);
12141
12346
  }
12142
- async function Ss(e, t, n = !1) {
12143
- let r = `${t ?? fs}/fb.do`, i = new AbortController(), a = new O(x.NETWORK, { callError: {
12347
+ async function Ms(e, t, n = !1) {
12348
+ let r = `${t ?? Ss}/fb.do`, i = new AbortController(), a = new O(x.NETWORK, { callError: {
12144
12349
  scope: "network",
12145
12350
  source: "api",
12146
12351
  code: "timeout",
@@ -12159,16 +12364,16 @@ async function Ss(e, t, n = !1) {
12159
12364
  } catch {
12160
12365
  o = { result: a };
12161
12366
  }
12162
- if (!t.ok && !Cs(o)) throw new O(x.API, { callError: {
12367
+ if (!t.ok && !Ns(o)) throw new O(x.API, { callError: {
12163
12368
  scope: "server",
12164
12369
  source: "api",
12165
12370
  code: `http-${t.status}`,
12166
12371
  description: "http-error"
12167
12372
  } });
12168
- if (Cs(o)) throw o;
12373
+ if (Ns(o)) throw o;
12169
12374
  return o;
12170
12375
  } catch (e) {
12171
- throw e instanceof O ? e : i.signal.aborted ? a : Cs(e) ? e : new O(x.NETWORK, { callError: {
12376
+ throw e instanceof O ? e : i.signal.aborted ? a : Ns(e) ? e : new O(x.NETWORK, { callError: {
12172
12377
  scope: "network",
12173
12378
  source: "api",
12174
12379
  code: "fetch-failed",
@@ -12178,12 +12383,12 @@ async function Ss(e, t, n = !1) {
12178
12383
  clearTimeout(o);
12179
12384
  }
12180
12385
  }
12181
- function Cs(e) {
12386
+ function Ns(e) {
12182
12387
  if (typeof e != "object" || !e) return !1;
12183
12388
  let t = e;
12184
12389
  return typeof t.error_code == "number" && typeof t.error_msg == "string";
12185
12390
  }
12186
- async function ws(e, t) {
12391
+ async function Ps(e, t) {
12187
12392
  try {
12188
12393
  let n = await fetch(e, {
12189
12394
  method: "POST",
@@ -12196,7 +12401,7 @@ async function ws(e, t) {
12196
12401
  throw R.warn("Failed to send form data", e), e;
12197
12402
  }
12198
12403
  }
12199
- function Ts(e, t = {}, n = !1) {
12404
+ function Fs(e, t = {}, n = !1) {
12200
12405
  t.method = e, t.format = "JSON", t.application_key || (t.application_key = M.apiKey), n || (y.sessionKey ? t.session_key = y.sessionKey : y.accessToken && (t.access_token = y.accessToken));
12201
12406
  for (let [e, n] of Object.entries(t)) typeof n == "object" && (t[e] = JSON.stringify(n));
12202
12407
  let r = "";
@@ -12205,7 +12410,7 @@ function Ts(e, t = {}, n = !1) {
12205
12410
  }
12206
12411
  //#endregion
12207
12412
  //#region src/abstract/BaseApi.ts
12208
- var Es = class {
12413
+ var Is = class {
12209
12414
  constructor() {
12210
12415
  h(this, "_abortSignal", void 0);
12211
12416
  }
@@ -12223,22 +12428,16 @@ var Es = class {
12223
12428
  }
12224
12429
  log(e) {}
12225
12430
  logClientStats(e) {}
12226
- getCachedOkIdByExternalId(e) {
12227
- return null;
12228
- }
12229
- getCachedRawOkIdByExternalId(e) {
12431
+ getCachedParticipantIdByExternalId(e) {
12230
12432
  return null;
12231
12433
  }
12232
- getCachedExternalIdByOkId(e) {
12434
+ getCachedExternalIdByParticipantId(e) {
12233
12435
  return null;
12234
12436
  }
12235
12437
  cacheExternalId(e, t) {}
12236
12438
  mapDecorativeId(e, t) {}
12237
12439
  unmapDecorativeId(e) {}
12238
12440
  getDecorativeIdByInitialId(e) {}
12239
- replaceByInitialIdIdIfExists(e) {
12240
- return typeof e == "string" ? parseInt(e, 10) : e;
12241
- }
12242
12441
  hangupConversation(e, t = D.HUNGUP, n) {}
12243
12442
  async removeHistoryRecords(e) {}
12244
12443
  async getServerTime() {
@@ -12248,78 +12447,62 @@ var Es = class {
12248
12447
  async getInbounds() {
12249
12448
  return [];
12250
12449
  }
12251
- }, Ds = class e {
12450
+ }, Ls = class e {
12252
12451
  constructor() {
12253
- h(this, "_okIdToExternalId", /* @__PURE__ */ new Map()), h(this, "_externalIdToOkId", /* @__PURE__ */ new Map()), h(this, "_decorativeIdToInitialId", /* @__PURE__ */ new Map()), h(this, "_initialIdToDecorativeId", /* @__PURE__ */ new Map());
12452
+ h(this, "_participantIdToExternalId", /* @__PURE__ */ new Map()), h(this, "_externalIdToParticipantId", /* @__PURE__ */ new Map()), h(this, "_decorativeIdToInitialId", /* @__PURE__ */ new Map()), h(this, "_initialIdToDecorativeId", /* @__PURE__ */ new Map());
12254
12453
  }
12255
12454
  static _normalizeType(e) {
12256
- return e.type === to.GROUP ? {
12455
+ return e.type === fo.GROUP ? {
12257
12456
  ...e,
12258
- type: to.USER
12457
+ type: fo.USER
12259
12458
  } : e;
12260
12459
  }
12261
- getOkId(t) {
12262
- let n = Q.toString(e._normalizeType(t)), r = this._externalIdToOkId.get(n);
12263
- return r == null ? null : this.replaceByInitialIdIdIfExists(r);
12264
- }
12265
12460
  getExternalId(e) {
12266
- let t = this.getDecorativeIdByInitialId(e) ?? e, n = this._okIdToExternalId.get(t);
12461
+ let t = this._initialIdToDecorativeId.get(e) ?? e, n = this._participantIdToExternalId.get(t);
12267
12462
  return n == null ? null : Q.fromString(n);
12268
12463
  }
12269
- hasByExternalId(t) {
12270
- return this._externalIdToOkId.has(Q.toString(e._normalizeType(t)));
12271
- }
12272
- hasByOkId(e) {
12273
- return this._okIdToExternalId.has(e);
12464
+ getParticipantId(t) {
12465
+ let n = Q.toString(e._normalizeType(t)), r = this._externalIdToParticipantId.get(n);
12466
+ return r == null ? null : this._decorativeIdToInitialId.get(r) ?? r;
12274
12467
  }
12275
12468
  cache(t, n) {
12276
- let r = j.extractOkId(t), i = e._normalizeType(n), a = Q.toString(i);
12277
- this._okIdToExternalId.set(r, a), this._externalIdToOkId.set(a, r);
12469
+ let r = e._normalizeType(n), i = Q.toString(r);
12470
+ this._participantIdToExternalId.set(t, i), this._externalIdToParticipantId.set(i, t);
12278
12471
  }
12279
12472
  mapDecorativeId(e, t) {
12280
- let n = j.extractOkId(e), r = j.extractOkId(t);
12281
- this._decorativeIdToInitialId.set(n, r), this._initialIdToDecorativeId.set(r, n);
12473
+ this._decorativeIdToInitialId.set(e, t), this._initialIdToDecorativeId.set(t, e);
12282
12474
  }
12283
12475
  unmapDecorativeId(e) {
12284
- let t = j.extractOkId(e), n = this.getDecorativeIdByInitialId(t);
12285
- n && this._decorativeIdToInitialId.delete(n), this._initialIdToDecorativeId.delete(t);
12476
+ let t = this._initialIdToDecorativeId.get(e);
12477
+ t && this._decorativeIdToInitialId.delete(t), this._initialIdToDecorativeId.delete(e);
12286
12478
  }
12287
12479
  getDecorativeIdByInitialId(e) {
12288
- let t = j.extractOkId(e);
12289
- return this._initialIdToDecorativeId.get(t);
12290
- }
12291
- replaceByInitialIdIdIfExists(e) {
12292
- let t = j.extractOkId(e);
12293
- return this._decorativeIdToInitialId.get(t) ?? t;
12294
- }
12295
- getParticipantIdByExternalId(e) {
12296
- let t = this.getOkId(e);
12297
- return t == null ? null : j.composeParticipantId(t, A.USER, e.deviceIdx ?? 0);
12480
+ return this._initialIdToDecorativeId.get(e);
12298
12481
  }
12299
12482
  clear() {
12300
- this._okIdToExternalId.clear(), this._externalIdToOkId.clear(), this._decorativeIdToInitialId.clear(), this._initialIdToDecorativeId.clear();
12483
+ this._participantIdToExternalId.clear(), this._externalIdToParticipantId.clear(), this._decorativeIdToInitialId.clear(), this._initialIdToDecorativeId.clear();
12301
12484
  }
12302
- }, Os = "anonymLogin:", ks = 700, As = 3e3;
12303
- function js(e) {
12485
+ }, Rs = "anonymLogin:", zs = 700, Bs = 3e3;
12486
+ function Vs(e) {
12304
12487
  let t = e.error_code;
12305
12488
  switch (t) {
12306
- case 2: return Ms(D.SERVICE_UNAVAILABLE, t, "service-unavailable");
12307
- case 4: return e.error_msg.includes("participants.limit.exceeded") ? Ms(D.PARTICIPANT_LIMIT_REACHED, t, "participants-limit-exceeded") : Ms(x.API, t, "request-error");
12308
- case 300: return Ms(D.NOT_FOUND, t, "not-found");
12309
- case 1101: return Ms(D.SERVICE_DISABLED, t, "vchat-service-disabled");
12310
- case 1102: return Ms(D.CALLEE_IS_OFFLINE, t, "target-user-unavailable");
12311
- case 1103: return Ms(D.NOT_FRIENDS, t, "friendship-required");
12312
- case 1104: return Ns(t, "youla-api-error");
12313
- case 1106: return Ns(t, "vk-api-error");
12314
- case 1113: return Ms(D.CALLER_IS_REJECTED, t, "caller-is-rejected");
12489
+ case 2: return Hs(D.SERVICE_UNAVAILABLE, t, "service-unavailable");
12490
+ case 4: return e.error_msg.includes("participants.limit.exceeded") ? Hs(D.PARTICIPANT_LIMIT_REACHED, t, "participants-limit-exceeded") : Hs(x.API, t, "request-error");
12491
+ case 300: return Hs(D.NOT_FOUND, t, "not-found");
12492
+ case 1101: return Hs(D.SERVICE_DISABLED, t, "vchat-service-disabled");
12493
+ case 1102: return Hs(D.CALLEE_IS_OFFLINE, t, "target-user-unavailable");
12494
+ case 1103: return Hs(D.NOT_FRIENDS, t, "friendship-required");
12495
+ case 1104: return Us(t, "youla-api-error");
12496
+ case 1106: return Us(t, "vk-api-error");
12497
+ case 1113: return Hs(D.CALLER_IS_REJECTED, t, "caller-is-rejected");
12315
12498
  case 1114: {
12316
12499
  let n = e.custom_error?.vchat_detailed_api_error?.code, r = n?.startsWith("obsolete_client");
12317
- return Ms(r ? D.OBSOLETE_CLIENT : D.VCHAT_DETAILED_ERROR, t, n ?? "detailed-error", r ? n : void 0);
12500
+ return Hs(r ? D.OBSOLETE_CLIENT : D.VCHAT_DETAILED_ERROR, t, n ?? "detailed-error", r ? n : void 0);
12318
12501
  }
12319
- default: return Ms(x.API, t, "api-error");
12502
+ default: return Hs(x.API, t, "api-error");
12320
12503
  }
12321
12504
  }
12322
- function Ms(e, t, n, r) {
12505
+ function Hs(e, t, n, r) {
12323
12506
  return {
12324
12507
  type: e,
12325
12508
  callError: {
@@ -12331,7 +12514,7 @@ function Ms(e, t, n, r) {
12331
12514
  message: r
12332
12515
  };
12333
12516
  }
12334
- function Ns(e, t) {
12517
+ function Us(e, t) {
12335
12518
  return {
12336
12519
  type: D.EXTERNAL_API_ERROR,
12337
12520
  callError: {
@@ -12342,19 +12525,19 @@ function Ns(e, t) {
12342
12525
  }
12343
12526
  };
12344
12527
  }
12345
- var Ps = class extends Es {
12528
+ var Ws = class extends Is {
12346
12529
  constructor(...e) {
12347
- super(...e), h(this, "_uuid", void 0), h(this, "_idCache", new Ds());
12530
+ super(...e), h(this, "_uuid", void 0), h(this, "_idCache", new Ls());
12348
12531
  }
12349
12532
  async _callUnsafe(e, t = {}, n = !1) {
12350
12533
  let r = async (i) => {
12351
12534
  try {
12352
- return await bs(e, t, n);
12535
+ return await As(e, t, n);
12353
12536
  } catch (t) {
12354
12537
  if (!t || typeof t != "object" || !Object.hasOwn(t, "error_msg")) {
12355
12538
  i++;
12356
12539
  let n = t && (typeof t == "object" || typeof t == "function") ? Object.getOwnPropertyNames(t).map((e) => `${e}: ${JSON.stringify(t[e])}`) : [String(t)];
12357
- if (R.debug(`${e} network error, attempt ${i}: ${n.join("\n ")}`), this._abortSignal?.aborted && (R.debug(`${e} aborted`), this._abortSignal.throwIfAborted()), i < M.apiMaxAttempt) return await j.delay(Math.min(i * ks, As), { signal: this._abortSignal }), r(i);
12540
+ if (R.debug(`${e} network error, attempt ${i}: ${n.join("\n ")}`), this._abortSignal?.aborted && (R.debug(`${e} aborted`), this._abortSignal.throwIfAborted()), i < M.apiMaxAttempt) return await j.delay(Math.min(i * zs, Bs), { signal: this._abortSignal }), r(i);
12358
12541
  }
12359
12542
  throw R.warn(e, "error", t), t;
12360
12543
  }
@@ -12377,16 +12560,19 @@ var Ps = class extends Es {
12377
12560
  message: i?.error_msg,
12378
12561
  code: i?.error_code
12379
12562
  };
12380
- if (i.custom_error && (a.custom_error = i.custom_error), Fs(i)) {
12381
- let e = js(i);
12563
+ if (i.custom_error && (a.custom_error = i.custom_error), Gs(i)) {
12564
+ let e = Vs(i);
12382
12565
  throw a.callError = e.callError, a.message = e.message ?? a.message, new O(e.type, a);
12383
12566
  }
12384
12567
  throw new O(x.API, a);
12385
12568
  }
12386
12569
  }
12387
12570
  userId(e) {
12388
- let { compositeUserId: t } = j.decomposeParticipantId(e), { id: n } = j.decomposeId(t);
12389
- return y.isEmpty() ? Q.fromId(String(n)) : this._idCache.getExternalId(n) || Q.fromId(String(n));
12571
+ if (y.isEmpty()) {
12572
+ let { compositeUserId: t } = j.decomposeParticipantId(e), { id: n } = j.decomposeId(t);
12573
+ return Q.fromId(String(n));
12574
+ }
12575
+ return this._idCache.getExternalId(e);
12390
12576
  }
12391
12577
  async authorize() {
12392
12578
  if (this._ensureUuid(), !M.apiKey) throw new O(x.API, {
@@ -12405,7 +12591,7 @@ var Ps = class extends Es {
12405
12591
  let t = { session_data: {
12406
12592
  version: 2,
12407
12593
  device_id: this._uuid,
12408
- client_version: M.appVersion,
12594
+ client_version: M.apiClientVersion,
12409
12595
  client_type: "SDK_JS"
12410
12596
  } };
12411
12597
  return M.authToken && (t.session_data.auth_token = M.authToken, t.session_data.version = 3), this._callUnsafe("auth.anonymLogin", t, !0).then((e) => {
@@ -12424,17 +12610,17 @@ var Ps = class extends Es {
12424
12610
  });
12425
12611
  }
12426
12612
  _getAnonymLoginCacheKey() {
12427
- return M.authToken ? `${Os}${M.authToken}` : null;
12613
+ return M.authToken ? `${Rs}${M.authToken}` : null;
12428
12614
  }
12429
12615
  _getCachedAnonymLogin() {
12430
12616
  let e = this._getAnonymLoginCacheKey();
12431
12617
  if (!e) return null;
12432
12618
  let t = at.get(e);
12433
- return Is(t) ? t : (t && at.remove(e), null);
12619
+ return Ks(t) ? t : (t && at.remove(e), null);
12434
12620
  }
12435
12621
  _setCachedAnonymLogin(e) {
12436
12622
  let t = this._getAnonymLoginCacheKey();
12437
- !t || !Is(e) || at.set(t, {
12623
+ !t || !Ks(e) || at.set(t, {
12438
12624
  session_key: e.session_key,
12439
12625
  session_secret_key: e.session_secret_key,
12440
12626
  uid: e.uid
@@ -12452,7 +12638,7 @@ var Ps = class extends Es {
12452
12638
  }
12453
12639
  async _sendClientStats(e, t = !0) {
12454
12640
  try {
12455
- (await xs("vchat.clientStats", e))?.items_responses?.forEach((e) => {
12641
+ (await js("vchat.clientStats", e))?.items_responses?.forEach((e) => {
12456
12642
  e.errors && R.error("[vchat.clientStats]", e);
12457
12643
  });
12458
12644
  } catch (n) {
@@ -12463,7 +12649,7 @@ var Ps = class extends Es {
12463
12649
  }
12464
12650
  logClientStats(e) {
12465
12651
  let t = {
12466
- app_version: String(M.appVersion),
12652
+ app_version: M.appVersion,
12467
12653
  sdk_type: "WEB",
12468
12654
  sdk_version: M.sdkVersion,
12469
12655
  version: 1,
@@ -12482,14 +12668,14 @@ var Ps = class extends Es {
12482
12668
  }, a = await this._callUnsafe("vchat.getLogUploadUrl", i), o = new FormData(), s = new Blob([r], { type: "application/json" });
12483
12669
  o.append("file", s, "log.json");
12484
12670
  let c = new URL(a.upload_url);
12485
- return c.searchParams.append("size", s.size.toString()), ws(c.toString(), o);
12671
+ return c.searchParams.append("size", s.size.toString()), Ps(c.toString(), o);
12486
12672
  }
12487
12673
  async joinConversation(e, t = !1, n) {
12488
12674
  let r = {
12489
12675
  conversationId: e,
12490
12676
  isVideo: t,
12491
12677
  protocolVersion: M.protocolVersion,
12492
- capabilities: xa.getFlags()
12678
+ capabilities: ja.getFlags()
12493
12679
  };
12494
12680
  return n && (r.chatId = n), this._call("vchat.joinConversation", r);
12495
12681
  }
@@ -12521,13 +12707,13 @@ var Ps = class extends Es {
12521
12707
  externalIds: l
12522
12708
  });
12523
12709
  if (t && t.length) switch (n) {
12524
- case Va.USER:
12710
+ case Za.USER:
12525
12711
  u.uids = t.join(",");
12526
12712
  break;
12527
- case Va.GROUP:
12713
+ case Za.GROUP:
12528
12714
  u.gid = t[0];
12529
12715
  break;
12530
- case Va.CHAT:
12716
+ case Za.CHAT:
12531
12717
  u.chatId = t[0];
12532
12718
  break;
12533
12719
  }
@@ -12570,17 +12756,14 @@ var Ps = class extends Es {
12570
12756
  joinLink: e,
12571
12757
  isVideo: t,
12572
12758
  protocolVersion: M.protocolVersion,
12573
- capabilities: xa.getFlags()
12759
+ capabilities: ja.getFlags()
12574
12760
  };
12575
12761
  return n?.length && (i.observedIds = n.join(",")), M.anonymToken && (i.anonymToken = M.anonymToken), r && (i.payload = r), this._call("vchat.joinConversationByLink", i);
12576
12762
  }
12577
- getCachedOkIdByExternalId(e) {
12578
- return this._idCache.getParticipantIdByExternalId(e);
12763
+ getCachedParticipantIdByExternalId(e) {
12764
+ return this._idCache.getParticipantId(e);
12579
12765
  }
12580
- getCachedRawOkIdByExternalId(e) {
12581
- return this._idCache.getOkId(e);
12582
- }
12583
- getCachedExternalIdByOkId(e) {
12766
+ getCachedExternalIdByParticipantId(e) {
12584
12767
  return this._idCache.getExternalId(e);
12585
12768
  }
12586
12769
  cacheExternalId(e, t) {
@@ -12595,9 +12778,6 @@ var Ps = class extends Es {
12595
12778
  getDecorativeIdByInitialId(e) {
12596
12779
  return this._idCache.getDecorativeIdByInitialId(e);
12597
12780
  }
12598
- replaceByInitialIdIdIfExists(e) {
12599
- return this._idCache.replaceByInitialIdIdIfExists(e);
12600
- }
12601
12781
  async getConversationParams(e) {
12602
12782
  let t = {};
12603
12783
  return M.anonymToken && (t.anonymToken = M.anonymToken), e && (t.conversationId = e), this._call("vchat.getConversationParams", t);
@@ -12613,7 +12793,7 @@ var Ps = class extends Es {
12613
12793
  conversationId: e,
12614
12794
  reason: t
12615
12795
  };
12616
- M.anonymToken && (r.anonymToken = M.anonymToken), n?.peerId && (r.peerId = n.peerId), ys("vchat.hangupConversation", r);
12796
+ M.anonymToken && (r.anonymToken = M.anonymToken), n?.peerId && (r.peerId = n.peerId), ks("vchat.hangupConversation", r);
12617
12797
  }
12618
12798
  async removeHistoryRecords(e) {
12619
12799
  await this._call("vchat.removeHistoryRecords", { recordIds: e.join(",") });
@@ -12629,19 +12809,19 @@ var Ps = class extends Es {
12629
12809
  return Array.isArray(e?.inbounds) ? e.inbounds : [];
12630
12810
  }
12631
12811
  };
12632
- function Fs(e) {
12812
+ function Gs(e) {
12633
12813
  return typeof e == "object" && !!e && "error_code" in e && "error_msg" in e;
12634
12814
  }
12635
- function Is(e) {
12815
+ function Ks(e) {
12636
12816
  return typeof e == "object" && !!e && "session_key" in e && "session_secret_key" in e && typeof e.session_key == "string" && e.session_key.length > 0 && typeof e.session_secret_key == "string" && e.session_secret_key.length > 0;
12637
12817
  }
12638
12818
  //#endregion
12639
12819
  //#region src/enums/RecordRole.ts
12640
- var Ls = /* @__PURE__ */ function(e) {
12820
+ var qs = /* @__PURE__ */ function(e) {
12641
12821
  return e.KING = "KING", e.PAWN = "PAWN", e;
12642
- }(Ls || {}), Rs = /* @__PURE__ */ function(e) {
12822
+ }(qs || {}), Js = /* @__PURE__ */ function(e) {
12643
12823
  return e.OFF = "0", e.ON = "1", e;
12644
- }({}), zs = class {
12824
+ }({}), Ys = class {
12645
12825
  constructor(e) {
12646
12826
  h(this, "_queue", void 0), h(this, "_readCursor", void 0), h(this, "_writeCursor", void 0), h(this, "_moveReadCursor", void 0), h(this, "_left", void 0), this._queue = Array(e).fill(null), this._readCursor = this._writeCursor = this._left = 0, this._moveReadCursor = !1;
12647
12827
  }
@@ -12664,21 +12844,21 @@ var Ls = /* @__PURE__ */ function(e) {
12664
12844
  let e = this._queue[this._readCursor];
12665
12845
  return e && (this._moveReadCursor = !1, this._queue[this._readCursor] = null, this._readCursor = this.nextCursor(this._readCursor), --this._left), e;
12666
12846
  }
12667
- }, Bs = class {
12847
+ }, Xs = class {
12668
12848
  constructor(e, t, n, r = null) {
12669
12849
  h(this, "_uuid", void 0), h(this, "_apiKey", void 0), h(this, "_callToken", void 0), h(this, "_apiEnv", void 0), h(this, "_baseApiUrl", void 0), h(this, "_sessionKey", void 0), this._uuid = j.uuid(), this._apiKey = t, this._callToken = n, this._apiEnv = e, this._baseApiUrl = r;
12670
12850
  }
12671
12851
  async authorize() {
12672
- let e = await bs("auth.anonymLogin", {
12852
+ let e = await As("auth.anonymLogin", {
12673
12853
  session_data: {
12674
12854
  device_id: this._uuid,
12675
- client_version: M.appVersion,
12855
+ client_version: M.apiClientVersion,
12676
12856
  client_type: "SDK_JS",
12677
12857
  auth_token: this._callToken,
12678
12858
  version: 3
12679
12859
  },
12680
12860
  application_key: this._apiKey
12681
- }, !0, await _s(this._baseApiUrl, this._apiEnv));
12861
+ }, !0, await Ds(this._baseApiUrl, this._apiEnv));
12682
12862
  return j.isObject(e) && !("error_msg" in e) ? (this._sessionKey = e.session_key, !0) : !1;
12683
12863
  }
12684
12864
  async hangupConversation(e, t) {
@@ -12688,9 +12868,9 @@ var Ls = /* @__PURE__ */ function(e) {
12688
12868
  application_key: this._apiKey,
12689
12869
  session_key: this._sessionKey
12690
12870
  };
12691
- t?.peerId && (n.peerId = t.peerId), await bs("vchat.hangupConversation", n, !0, await _s(this._baseApiUrl, this._apiEnv));
12871
+ t?.peerId && (n.peerId = t.peerId), await As("vchat.hangupConversation", n, !0, await Ds(this._baseApiUrl, this._apiEnv));
12692
12872
  }
12693
- }, Vs, Hs = null, Us = {
12873
+ }, Zs, Qs = null, $s = {
12694
12874
  getCameras: T.getCameras,
12695
12875
  getMicrophones: T.getMicrophones,
12696
12876
  getOutput: T.getOutput,
@@ -12716,27 +12896,27 @@ var Ls = /* @__PURE__ */ function(e) {
12716
12896
  baseChromeVersion: T.baseChromeVersion,
12717
12897
  getAudioContext: T.getAudioContext,
12718
12898
  isAudioShareSupported: T.isAudioShareSupported
12719
- }, Ws = { participantMarkerCompare: j.participantMarkerCompare };
12720
- function Gs(e) {
12721
- Hs = e;
12899
+ }, ec = { participantMarkerCompare: j.participantMarkerCompare };
12900
+ function tc(e) {
12901
+ Qs = e;
12722
12902
  }
12723
- function Ks(e) {
12903
+ function nc(e) {
12724
12904
  M.videoEffects = e;
12725
12905
  }
12726
- function qs(e) {
12906
+ function rc(e) {
12727
12907
  M.audioEffects = e;
12728
12908
  }
12729
- function Js(e, t = {}) {
12909
+ function ic(e, t = {}) {
12730
12910
  M.vad = e, M.vadOptions = t;
12731
12911
  }
12732
- function Ys(e, t = null, n = {}, r = 1) {
12912
+ function ac(e, t = null, n = {}, r = 1) {
12733
12913
  M.vmoji = e, M.vmojiOptions = {
12734
12914
  protocolVersion: r,
12735
12915
  renderingOptions: n
12736
12916
  }, t && e.setSDK(t);
12737
12917
  }
12738
- async function Xs(t) {
12739
- M.set(t), Vs || (Vs = new Ps()), e.disableLog(!M.debug), R.toggle(M.debug), R.log(`Calls SDK ${M.sdkVersion}`, t), await T.init();
12918
+ async function oc(t) {
12919
+ M.set(t), Zs || (Zs = new Ws()), e.disableLog(!M.debug), R.toggle(M.debug), R.log(`Calls SDK ${M.sdkVersion}`, t), await T.init();
12740
12920
  let n = T.getBrowserSupportFailure();
12741
12921
  if (n) throw new O(x.UNSUPPORTED, { callError: {
12742
12922
  scope: "internal",
@@ -12745,13 +12925,19 @@ async function Xs(t) {
12745
12925
  } });
12746
12926
  R.log("UserAgent:", navigator.userAgent), R.log("Screen resolution:", `${window.screen.width}x${window.screen.height}`), R.log("Permissions:", `Camera: ${T.hasCameraPermission()}, Mic: ${T.hasMicrophonePermission()}`), R.log("Simulcast:", `${t.simulcast} => ${M.simulcast}`);
12747
12927
  }
12748
- async function Zs(e, t = [S.AUDIO], n = "", r = !1, i = !1, a, o, s) {
12928
+ async function sc(e, t = [S.AUDIO], n = "", r = !1, i = !1, a, o, s) {
12749
12929
  let c = [];
12750
- return Array.isArray(e) ? c = e.length ? e : [] : e && (c = [e]), Qs([], Va.USER, t, n, r, i, a, c, o, s);
12930
+ return Array.isArray(e) ? c = e.length ? e : [] : e && (c = [e]), lc([], Za.USER, t, n, r, i, a, c, o, s);
12751
12931
  }
12752
- async function Qs(e, t = Va.USER, n, r = "", i = !1, a = !1, o, s, c, l) {
12753
- if (!M.hold && z.callsLength > 0) throw R.error("There is already active call"), new O(D.HAS_ACTIVE_CALL);
12754
- return new $(new Ps(), Hs).onStart({
12932
+ function cc(e, t = []) {
12933
+ let n = e.getIncomingCallerExternalId();
12934
+ return n ? t.length === 1 && t[0].id === n.id && t[0].type === n.type : !1;
12935
+ }
12936
+ async function lc(e, t = Za.USER, n, r = "", i = !1, a = !1, o, s, c, l) {
12937
+ if (!M.hold && z.getActive()) throw R.error("There is already active call"), new O(D.HAS_ACTIVE_CALL);
12938
+ let u = z.getAll().find((e) => e.isIncomingRinging);
12939
+ if (!M.hold && u && !cc(u, s)) throw R.error("There is already incoming call"), new O(D.HAS_ACTIVE_CALL);
12940
+ return new $(new Ws(), Qs).onStart({
12755
12941
  opponentIds: e,
12756
12942
  opponentType: t,
12757
12943
  mediaOptions: n,
@@ -12764,40 +12950,40 @@ async function Qs(e, t = Va.USER, n, r = "", i = !1, a = !1, o, s, c, l) {
12764
12950
  conversationId: l
12765
12951
  });
12766
12952
  }
12767
- async function $s(e, t) {
12768
- return ec(e, A.USER, void 0, t);
12953
+ async function uc(e, t) {
12954
+ return dc(e, A.USER, void 0, t);
12769
12955
  }
12770
- async function ec(e, t = A.USER, n, r, i, a) {
12956
+ async function dc(e, t = A.USER, n, r, i, a) {
12771
12957
  if (e === $.id()) throw Error("Push has already been processed");
12772
- return new $(new Ps(), Hs).onPush(e, t, n, r, i, a);
12958
+ return new $(new Ws(), Qs).onPush(e, t, n, r, i, a);
12773
12959
  }
12774
- async function tc() {
12775
- return Vs.getInbounds();
12960
+ async function fc() {
12961
+ return Zs.getInbounds();
12776
12962
  }
12777
- async function nc(e, t) {
12778
- return e && (M.authToken = e), t !== void 0 && M.apiBaseUrl !== t && (M.apiBaseUrl = t, hs()), Vs.authorize();
12963
+ async function pc(e, t) {
12964
+ return e && (M.authToken = e), t !== void 0 && M.apiBaseUrl !== t && (M.apiBaseUrl = t, Ts()), Zs.authorize();
12779
12965
  }
12780
- async function rc(e = [S.AUDIO], t) {
12781
- return El(t).accept(e);
12966
+ async function mc(e = [S.AUDIO], t) {
12967
+ return zl(t).accept(e);
12782
12968
  }
12783
- async function ic(e) {
12784
- let t = Tl(e?.conversationId);
12969
+ async function hc(e) {
12970
+ let t = Il(e?.conversationId);
12785
12971
  if (t) return t.decline(e);
12786
12972
  }
12787
- async function ac(e, t = [S.AUDIO]) {
12788
- return oc(e, t);
12973
+ async function gc(e, t = [S.AUDIO]) {
12974
+ return _c(e, t);
12789
12975
  }
12790
- async function oc(e, t, n) {
12976
+ async function _c(e, t, n) {
12791
12977
  if (!M.hold && z.callsLength > 0) throw R.error("There is already active call"), new O(D.HAS_ACTIVE_CALL);
12792
- return new $(new Ps(), Hs).onJoin({
12978
+ return new $(new Ws(), Qs).onJoin({
12793
12979
  conversationId: e,
12794
12980
  mediaOptions: t,
12795
12981
  chatId: n
12796
12982
  });
12797
12983
  }
12798
- async function sc(e, t = [S.AUDIO], n, r, i, a) {
12984
+ async function vc(e, t = [S.AUDIO], n, r, i, a) {
12799
12985
  if (!M.hold && z.callsLength > 0) throw R.error("There is already active call"), new O(D.HAS_ACTIVE_CALL);
12800
- return n && (M.anonymToken = n), new $(new Ps(), Hs).onJoin({
12986
+ return n && (M.anonymToken = n), new $(new Ws(), Qs).onJoin({
12801
12987
  joinLink: e,
12802
12988
  mediaOptions: t,
12803
12989
  observedIds: r,
@@ -12806,30 +12992,30 @@ async function sc(e, t = [S.AUDIO], n, r, i, a) {
12806
12992
  anonymous: !!M.anonymToken
12807
12993
  });
12808
12994
  }
12809
- function cc(e) {
12810
- let t = Tl(e?.conversationId);
12995
+ function yc(e) {
12996
+ let t = Il(e?.conversationId);
12811
12997
  return t ? t.hangup(e) : ($.hangupAfterInit(e?.onFastHangup), Promise.resolve());
12812
12998
  }
12813
- async function lc(e, t) {
12999
+ async function bc(e, t) {
12814
13000
  let n = Array.isArray(e) ? e : [e], r = $.current();
12815
13001
  r && await r.addParticipant(n, t);
12816
13002
  }
12817
- async function uc(e, t) {
13003
+ async function xc(e, t) {
12818
13004
  let n = $.current();
12819
13005
  if (n) {
12820
13006
  let r = e.map((e) => j.composeUserId(e));
12821
13007
  await n.addParticipantLegacy(r, t);
12822
13008
  }
12823
13009
  }
12824
- async function dc(e, t = !1) {
12825
- let n = $.current()?.getCachedRawOkIdByExternalId(e) ?? null;
12826
- if (!n) {
12827
- R.warn("removeParticipant: externalId not found in cache", e);
12828
- return;
13010
+ async function Sc(e, t = !1) {
13011
+ let n = Bl(e, "removeParticipant");
13012
+ if (n) try {
13013
+ await n.conversation.removeParticipant(j.decomposeParticipantId(n.participantId).compositeUserId, t);
13014
+ } catch (e) {
13015
+ R.warn(`Failed to remove participant ${n.participantId}. Perhaps he is no longer on the call. ${e}`);
12829
13016
  }
12830
- return fc(n, t);
12831
13017
  }
12832
- async function fc(e, t = !1) {
13018
+ async function Cc(e, t = !1) {
12833
13019
  let n = $.current();
12834
13020
  if (n) try {
12835
13021
  await n.removeParticipant(j.composeUserId(e), t);
@@ -12837,13 +13023,13 @@ async function fc(e, t = !1) {
12837
13023
  R.warn(`Failed to remove participant ${e}. Perhaps he is no longer on the call. ${t}`);
12838
13024
  }
12839
13025
  }
12840
- async function pc(e, t) {
13026
+ async function wc(e, t) {
12841
13027
  let n = $.current();
12842
13028
  if (e === "videoinput" && jt.contains(t)) return M.videoFacingMode = t, n ? (T.isMobile() && n.stopVideoTrack(), n.changeDevice(e)) : void 0;
12843
13029
  if (!await T._saveDeviceId(e, t)) throw Error(`Device not found: ${t}`);
12844
13030
  if (n) return n.changeDevice(e);
12845
13031
  }
12846
- async function mc(e, t) {
13032
+ async function Tc(e, t) {
12847
13033
  let n = typeof e == "object" ? {
12848
13034
  ...e,
12849
13035
  fastScreenSharing: e.captureScreen && e.fastScreenSharing,
@@ -12852,267 +13038,264 @@ async function mc(e, t) {
12852
13038
  captureScreen: e,
12853
13039
  fastScreenSharing: !1,
12854
13040
  captureAudio: !1
12855
- }, r = Tl(t);
13041
+ }, r = Il(t);
12856
13042
  return r ? r.toggleScreenCapturing(n) : Promise.reject();
12857
13043
  }
12858
- function hc(e) {
13044
+ function Ec(e) {
12859
13045
  let t = $.current();
12860
13046
  t && t.toggleAnimojiCapturing(e);
12861
13047
  }
12862
- async function gc(e, t = !1) {
13048
+ async function Dc(e, t = !1) {
12863
13049
  let n = $.current();
12864
13050
  n && await n.setVideoStream(e, t);
12865
13051
  }
12866
- async function _c(e, t) {
12867
- let n = Tl(t);
13052
+ async function Oc(e, t) {
13053
+ let n = Il(t);
12868
13054
  n && await n.toggleLocalVideo(e);
12869
13055
  }
12870
- async function vc(e, t) {
12871
- let n = Tl(t);
13056
+ async function kc(e, t) {
13057
+ let n = Il(t);
12872
13058
  n && await n.toggleLocalAudio(e);
12873
13059
  }
12874
- async function yc(e) {
13060
+ async function Ac(e) {
12875
13061
  let t = $.current();
12876
13062
  if (t) return t.setLocalResolution(e);
12877
13063
  }
12878
- async function bc(e) {
13064
+ async function jc(e) {
12879
13065
  let t = $.current();
12880
13066
  t && await t.changePriorities(e);
12881
13067
  }
12882
- async function xc(e, t) {
13068
+ async function Mc(e, t) {
12883
13069
  let n = $.current();
12884
13070
  if (n) {
12885
- let r;
12886
13071
  if (t) {
12887
- let e = n.getCachedRawOkIdByExternalId(t);
12888
- if (!e) {
12889
- R.warn("changeParticipantState: externalId not found in cache", t);
13072
+ let r = n.getCachedParticipantIdByExternalId(t);
13073
+ if (!r) {
13074
+ Ll(t, "changeParticipantState", n);
12890
13075
  return;
12891
13076
  }
12892
- r = j.composeParticipantId(e, A.USER, t.deviceIdx);
13077
+ await n.changeParticipantState(e, r);
13078
+ return;
12893
13079
  }
12894
- await n.changeParticipantState(e, r);
13080
+ await n.changeParticipantState(e);
12895
13081
  }
12896
13082
  }
12897
- async function Sc() {
13083
+ async function Nc() {
12898
13084
  let e = $.current();
12899
13085
  e && await e.putHandsDown();
12900
13086
  }
12901
- async function Cc(e) {
13087
+ async function Pc(e) {
12902
13088
  let t = $.current();
12903
13089
  t && await t.updateDisplayLayout(e);
12904
13090
  }
12905
- async function wc(e) {
13091
+ async function Fc(e) {
12906
13092
  let t = $.current();
12907
13093
  t && await t.requestDisplayLayout(e);
12908
13094
  }
12909
- async function Tc(e, t, n = !1) {
12910
- let r = $.current()?.getCachedRawOkIdByExternalId(e) ?? null;
12911
- if (!r) {
12912
- R.warn("grantRoles: externalId not found in cache", e);
12913
- return;
12914
- }
12915
- return Ec(r, Q.getDeviceIdx(e), t, n);
13095
+ async function Ic(e, t, n = !1) {
13096
+ let r = Bl(e, "grantRoles");
13097
+ r && await r.conversation.grantRoles(r.participantId, t, n);
12916
13098
  }
12917
- async function Ec(e, t, n, r = !1) {
13099
+ async function Lc(e, t, n, r = !1) {
12918
13100
  let i = $.current();
12919
13101
  i && await i.grantRoles(j.composeParticipantId(e, A.USER, t), n, r);
12920
13102
  }
12921
- async function Dc({ externalId: e = null, muteStates: t, requestedMedia: n = [], roomId: r = null }) {
12922
- let i = null;
12923
- return e && (i = $.current()?.getCachedRawOkIdByExternalId(e) ?? null, i || R.warn("muteParticipant: externalId not found in cache", e)), Oc({
12924
- uid: i,
12925
- muteStates: t,
12926
- requestedMedia: n,
12927
- deviceIdx: Q.getDeviceIdx(e),
12928
- roomId: r
12929
- });
13103
+ async function Rc({ externalId: e = null, muteStates: t, requestedMedia: n = [], roomId: r = null }) {
13104
+ if (e) {
13105
+ let i = Bl(e, "muteParticipant");
13106
+ return i ? i.conversation.muteParticipant(i.participantId, t, n, r) : void 0;
13107
+ }
13108
+ let i = $.current();
13109
+ i && await i.muteParticipant(null, t, n, r);
12930
13110
  }
12931
- async function Oc({ uid: e = null, muteStates: t, requestedMedia: n = [], deviceIdx: r = 0, roomId: i = null }) {
13111
+ async function zc({ uid: e = null, muteStates: t, requestedMedia: n = [], deviceIdx: r = 0, roomId: i = null }) {
12932
13112
  let a = $.current();
12933
13113
  if (a) {
12934
13114
  let o = e ? j.composeParticipantId(e, A.USER, r) : null;
12935
13115
  await a.muteParticipant(o, t, n, i);
12936
13116
  }
12937
13117
  }
12938
- async function kc(e, t = !1, n = null) {
12939
- let r = $.current()?.getCachedRawOkIdByExternalId(e) ?? null;
12940
- if (!r) {
12941
- R.warn("pinParticipant: externalId not found in cache", e);
12942
- return;
12943
- }
12944
- return Ac(r, t, Q.getDeviceIdx(e), n);
13118
+ async function Bc(e, t = !1, n = null) {
13119
+ let r = Bl(e, "pinParticipant");
13120
+ r && await r.conversation.pinParticipant(r.participantId, t, n);
12945
13121
  }
12946
- async function Ac(e, t = !1, n = 0, r = null) {
13122
+ async function Vc(e, t = !1, n = 0, r = null) {
12947
13123
  let i = $.current();
12948
13124
  i && await i.pinParticipant(j.composeParticipantId(e, A.USER, n), t, r);
12949
13125
  }
12950
- async function jc(e) {
13126
+ async function Hc(e) {
12951
13127
  let t = $.current();
12952
13128
  t && await t.updateMediaModifiers(e);
12953
13129
  }
12954
- async function Mc(e) {
13130
+ async function Uc(e) {
12955
13131
  let t = $.current();
12956
13132
  t && await t.enableVideoSuspend(e);
12957
13133
  }
12958
- async function Nc(e) {
13134
+ async function Wc(e) {
12959
13135
  let t = $.current();
12960
13136
  t && await t.enableVideoSuspendSuggest(e);
12961
13137
  }
12962
- async function Pc(e) {
13138
+ async function Gc(e) {
12963
13139
  let t = $.current();
12964
13140
  t && await t.changeOptions(e);
12965
13141
  }
12966
- async function Fc(e, t = null) {
12967
- let n = null;
12968
- return t && (n = $.current()?.getCachedRawOkIdByExternalId(t) ?? null, n || R.warn("chatMessage: externalId not found in cache", t)), Ic(e, n);
13142
+ async function Kc(e, t = null) {
13143
+ if (t) {
13144
+ let n = Bl(t, "chatMessage");
13145
+ return n ? n.conversation.chatMessage(e, j.decomposeParticipantId(n.participantId).compositeUserId) : void 0;
13146
+ }
13147
+ let n = $.current();
13148
+ n && await n.chatMessage(e, null);
12969
13149
  }
12970
- async function Ic(e, t = null) {
13150
+ async function qc(e, t = null) {
12971
13151
  let n = $.current();
12972
13152
  if (n) {
12973
13153
  let r = t ? j.composeUserId(t) : null;
12974
13154
  await n.chatMessage(e, r);
12975
13155
  }
12976
13156
  }
12977
- async function Lc(e = 10) {
13157
+ async function Jc(e = 10) {
12978
13158
  let t = $.current();
12979
13159
  if (t) return t.chatHistory(e);
12980
13160
  }
12981
- async function Rc(e, t = null) {
12982
- let n = null;
12983
- return t && (n = $.current()?.getCachedRawOkIdByExternalId(t) ?? null, n || R.warn("customData: externalId not found in cache", t)), zc(e, n, Q.getDeviceIdx(t));
13161
+ async function Yc(e, t = null) {
13162
+ if (t) {
13163
+ let n = Bl(t, "customData");
13164
+ return n ? n.conversation.customData(e, n.participantId) : void 0;
13165
+ }
13166
+ let n = $.current();
13167
+ n && await n.customData(e, null);
12984
13168
  }
12985
- async function zc(e, t = null, n = 0) {
13169
+ async function Xc(e, t = null, n = 0) {
12986
13170
  let r = $.current();
12987
13171
  if (r) {
12988
13172
  let i = t ? j.composeParticipantId(t, A.USER, n) : null;
12989
13173
  await r.customData(e, i);
12990
13174
  }
12991
13175
  }
12992
- async function Bc(e = "", t = !1, { onlyAdminCanShareMovie: n = !1, waitForAdmin: r = !1, closedConversation: i = !1 } = {}, a) {
12993
- return (await Vs.createConversation(a ?? j.uuid(), e, t, {
13176
+ async function Zc(e = "", t = !1, { onlyAdminCanShareMovie: n = !1, waitForAdmin: r = !1, closedConversation: i = !1 } = {}, a) {
13177
+ return (await Zs.createConversation(a ?? j.uuid(), e, t, {
12994
13178
  onlyAdminCanShareMovie: n,
12995
13179
  waitForAdmin: r,
12996
13180
  closedConversation: i
12997
13181
  })).join_link;
12998
13182
  }
12999
- async function Vc(e = "", t = !1, { onlyAdminCanShareMovie: n = !1, audioOnly: r = !1 } = {}, i) {
13183
+ async function Qc(e = "", t = !1, { onlyAdminCanShareMovie: n = !1, audioOnly: r = !1 } = {}, i) {
13000
13184
  let a = i.map((e) => Q.fromId(e));
13001
- return (await Vs.createConversation(j.uuid(), e, t, {
13185
+ return (await Zs.createConversation(j.uuid(), e, t, {
13002
13186
  onlyAdminCanShareMovie: n,
13003
13187
  audienceMode: !0,
13004
13188
  audioOnly: r
13005
13189
  }, a)).join_link;
13006
13190
  }
13007
- async function Hc() {
13191
+ async function $c() {
13008
13192
  let e = $.current();
13009
13193
  return e ? e.createJoinLink() : Promise.reject();
13010
13194
  }
13011
- async function Uc() {
13195
+ async function el() {
13012
13196
  let e = $.current();
13013
13197
  return e ? e.removeJoinLink() : Promise.reject();
13014
13198
  }
13015
- async function Wc(e, t) {
13016
- return Vs.getAnonymTokenByLink(e, t);
13199
+ async function tl(e, t) {
13200
+ return Zs.getAnonymTokenByLink(e, t);
13017
13201
  }
13018
- function Gc(e) {
13202
+ function nl(e) {
13019
13203
  let t = $.current();
13020
13204
  t && t.setVolume(e);
13021
13205
  }
13022
- function Kc(e) {
13206
+ function rl(e) {
13023
13207
  M.forceRelayPolicy = e;
13024
13208
  }
13025
- async function qc(e = !1, t = null, n = null, r = "DIRECT_LINK", i = null, a = null) {
13209
+ async function il(e = !1, t = null, n = null, r = "DIRECT_LINK", i = null, a = null) {
13026
13210
  let o = $.current();
13027
13211
  return o ? o.startStream(e, t, n, r, i, a) : Promise.reject();
13028
13212
  }
13029
- async function Jc(e = null, t) {
13213
+ async function al(e = null, t) {
13030
13214
  let n = $.current();
13031
13215
  return n ? n.stopStream(e, t) : Promise.reject();
13032
13216
  }
13033
- async function Yc(e = null) {
13217
+ async function ol(e = null) {
13034
13218
  let t = $.current();
13035
13219
  return t ? t.publishStream(e) : Promise.reject();
13036
13220
  }
13037
- async function Xc() {
13221
+ async function sl() {
13038
13222
  let e = $.current();
13039
13223
  return e ? e.getStreamInfo() : Promise.reject();
13040
13224
  }
13041
- async function Zc(e) {
13225
+ async function cl(e) {
13042
13226
  let t = $.current();
13043
13227
  return t ? t.addMovie(e) : Promise.reject();
13044
13228
  }
13045
- async function Qc(e) {
13229
+ async function ll(e) {
13046
13230
  let t = $.current();
13047
13231
  return t ? t.updateMovie(e) : Promise.reject();
13048
13232
  }
13049
- async function $c(e) {
13233
+ async function ul(e) {
13050
13234
  let t = $.current();
13051
13235
  return t ? t.removeMovie(e) : Promise.reject();
13052
13236
  }
13053
- async function el(e, t) {
13237
+ async function dl(e, t) {
13054
13238
  let n = $.current();
13055
13239
  if (n) {
13056
- let r = [];
13240
+ let r = [], i = [];
13057
13241
  for (let t of e) {
13058
- let e, i;
13242
+ let e, a;
13059
13243
  t.addParticipantIds && (e = [], t.addParticipantIds.forEach((t) => {
13060
- let r = n.getCachedRawOkIdByExternalId(t);
13061
- r ? e.push(j.composeUserId(r)) : R.warn("updateRooms addParticipant: externalId not found in cache", t);
13062
- })), t.removeParticipantIds && (i = [], t.removeParticipantIds.forEach((e) => {
13063
- let t = n.getCachedRawOkIdByExternalId(e);
13064
- t ? i.push(j.composeUserId(t)) : R.warn("updateRooms removeParticipant: externalId not found in cache", e);
13244
+ let r = n.getCachedParticipantIdByExternalId(t);
13245
+ r ? e.push(j.decomposeParticipantId(r).compositeUserId) : i.push(t.id);
13246
+ })), t.removeParticipantIds && (a = [], t.removeParticipantIds.forEach((e) => {
13247
+ let t = n.getCachedParticipantIdByExternalId(e);
13248
+ t ? a.push(j.decomposeParticipantId(t).compositeUserId) : i.push(e.id);
13065
13249
  })), r.push({
13066
13250
  id: t.id,
13067
13251
  name: t.name,
13068
13252
  participantCount: t.participantCount,
13069
13253
  addParticipantIds: e,
13070
- removeParticipantIds: i,
13254
+ removeParticipantIds: a,
13071
13255
  countdownSec: t.countdownSec
13072
13256
  });
13073
13257
  }
13258
+ if (i.length) {
13259
+ Rl(i, "updateRooms", n);
13260
+ return;
13261
+ }
13074
13262
  return n.updateRooms(r, t);
13075
13263
  }
13076
13264
  return Promise.reject();
13077
13265
  }
13078
- async function tl(e, t) {
13266
+ async function fl(e, t) {
13079
13267
  let n = $.current();
13080
13268
  return n ? n.activateRooms(e, t) : Promise.reject();
13081
13269
  }
13082
- async function nl(e = null, t = null) {
13270
+ async function pl(e = null, t = null) {
13083
13271
  let n = $.current();
13084
13272
  if (!n) return Promise.reject();
13085
13273
  let r;
13086
- if (t) {
13087
- let e = n.getCachedRawOkIdByExternalId(t);
13088
- if (!e) {
13089
- R.warn("switchRoom: externalId not found in cache", t);
13090
- return;
13091
- }
13092
- let i = Q.getDeviceIdx(t);
13093
- r = j.composeParticipantId(e, A.USER, i);
13274
+ if (t && (r = n.getCachedParticipantIdByExternalId(t) ?? void 0, !r)) {
13275
+ Ll(t, "switchRoom", n);
13276
+ return;
13094
13277
  }
13095
13278
  return n.switchRoom(e, r);
13096
13279
  }
13097
- async function rl(e) {
13280
+ async function ml(e) {
13098
13281
  let t = $.current();
13099
13282
  return t ? t.removeRooms(e) : Promise.reject();
13100
13283
  }
13101
- function il(e) {
13284
+ function hl(e) {
13102
13285
  M.statisticsInterval = e;
13103
13286
  let t = $.current();
13104
13287
  if (t) return t.updateStatisticsInterval();
13105
13288
  }
13106
- function al(t) {
13289
+ function gl(t) {
13107
13290
  e.disableLog(!t), R.toggle(t);
13108
13291
  }
13109
- function ol(e, ...t) {
13292
+ function _l(e, ...t) {
13110
13293
  M.debugLog && ($.debugMessage(e, "[external]", ...t) || R.send(e, "[external]", ...t));
13111
13294
  }
13112
- function sl(e, t, ...n) {
13295
+ function vl(e, t, ...n) {
13113
13296
  M.debugLog && ($.debugMessageWithContext(e, t, "[external]", ...n) || R.send(e, "[external]", ...n));
13114
13297
  }
13115
- var cl = {
13298
+ var yl = {
13116
13299
  list: Ne,
13117
13300
  get: Pe,
13118
13301
  getJson: Fe,
@@ -13120,7 +13303,7 @@ var cl = {
13120
13303
  clear: Le,
13121
13304
  stats: Re
13122
13305
  };
13123
- function ll() {
13306
+ function bl() {
13124
13307
  let e = [
13125
13308
  [`Calls SDK ${M.sdkVersion}`, M.toJSON()],
13126
13309
  ["UserAgent:", navigator.userAgent],
@@ -13137,124 +13320,139 @@ function ll() {
13137
13320
  d: e
13138
13321
  }));
13139
13322
  }
13140
- async function ul() {
13323
+ async function xl() {
13141
13324
  let e = $.id(), t = $.debugSessionId();
13142
13325
  if (!t || !e) throw R.error("[uploadDebugLogs]", "No conversation id found"), Error("No conversation id found");
13143
13326
  let n = await Pe({ sessionId: t });
13144
13327
  if (n.length === 0) throw R.error("[uploadDebugLogs]", "No logs found"), Error("No logs found");
13145
13328
  let r = n[0].t, i = n[n.length - 1].t;
13146
13329
  try {
13147
- return Vs?.uploadDebugLogs(e, r, i, JSON.stringify([...ll(), ...n]));
13330
+ return Zs?.uploadDebugLogs(e, r, i, JSON.stringify([...bl(), ...n]));
13148
13331
  } catch (e) {
13149
13332
  throw R.error("[uploadDebugLogs]", "Error while uploading logs", e), Error("Error while uploading logs", { cause: e });
13150
13333
  }
13151
13334
  }
13152
- async function dl(e) {
13335
+ async function Sl(e) {
13153
13336
  let t = $.current();
13154
13337
  if (t) return t.videoEffect(e);
13155
13338
  }
13156
- async function fl(e, t) {
13339
+ async function Cl(e, t) {
13157
13340
  let n = $.current();
13158
13341
  if (n) return n.audioEffect(e.length > 0 ? e : null, t);
13159
13342
  }
13160
- async function pl(e) {
13343
+ async function wl(e) {
13161
13344
  let t = $.current();
13162
13345
  t && await t.setAudioStream(e);
13163
13346
  }
13164
- async function ml(e, t = null, n = null) {
13347
+ async function Tl(e, t = null, n = null) {
13165
13348
  let r = $.current();
13166
13349
  if (!r) return;
13167
13350
  let i = n ?? t?.id, a = null;
13168
- if (t) {
13169
- let e = r.getCachedRawOkIdByExternalId(t);
13170
- if (!e) throw Error("Could not get user id to set animoji svg");
13171
- a = j.composeParticipantId(e, A.USER, Q.getDeviceIdx(t));
13351
+ if (t && (a = r.getCachedParticipantIdByExternalId(t), !a)) {
13352
+ Ll(t, "setVmojiSvg", r);
13353
+ return;
13172
13354
  }
13173
13355
  r.setAnimojiSvg(e, a, i);
13174
13356
  }
13175
- function hl(e) {
13357
+ function El(e) {
13176
13358
  let t = $.current();
13177
13359
  t && t.setAnimojiFill(e);
13178
13360
  }
13179
- async function gl(e = null, t, n = !1) {
13180
- return El().getWaitingHall(e, t, n);
13361
+ async function Dl(e = null, t, n = !1) {
13362
+ return zl().getWaitingHall(e, t, n);
13181
13363
  }
13182
- async function _l() {
13183
- return El().getAudienceModeHands();
13364
+ async function Ol() {
13365
+ return zl().getAudienceModeHands();
13184
13366
  }
13185
- async function vl(e, t = !1) {
13186
- let n = El(), r;
13367
+ async function kl(e, t = !1) {
13368
+ let n = zl(), r;
13187
13369
  if (e) {
13188
- let t = n.getCachedRawOkIdByExternalId(e);
13370
+ let t = n.getCachedParticipantIdByExternalId(e);
13189
13371
  if (!t) {
13190
- R.warn("promoteParticipant: externalId not found in cache", e);
13372
+ Ll(e, "promoteParticipant", n);
13191
13373
  return;
13192
13374
  }
13193
- r = j.composeUserId(t);
13375
+ r = j.decomposeParticipantId(t).compositeUserId;
13194
13376
  }
13195
13377
  return n.promoteParticipant(r, t);
13196
13378
  }
13197
- async function yl(e = !1) {
13198
- return El().requestPromotion(e);
13379
+ async function Al(e = !1) {
13380
+ return zl().requestPromotion(e);
13199
13381
  }
13200
- async function bl(e = !1) {
13201
- return El().acceptPromotion(e);
13382
+ async function jl(e = !1) {
13383
+ return zl().acceptPromotion(e);
13202
13384
  }
13203
- async function xl(e) {
13204
- return El().getParticipantListChunk(e);
13385
+ async function Ml(e) {
13386
+ return zl().getParticipantListChunk(e);
13205
13387
  }
13206
- async function Sl(e) {
13207
- return El().getParticipants(e);
13388
+ async function Nl(e) {
13389
+ return zl().getParticipants(e);
13208
13390
  }
13209
- async function Cl(e) {
13210
- return El().feedback(e);
13391
+ async function Pl(e) {
13392
+ return zl().feedback(e);
13211
13393
  }
13212
- async function wl(e, t, n) {
13213
- return El(n).enableFeatureForRoles(e, t);
13394
+ async function Fl(e, t, n) {
13395
+ return zl(n).enableFeatureForRoles(e, t);
13214
13396
  }
13215
- function Tl(e) {
13397
+ function Il(e) {
13216
13398
  return e ? z.get(e) ?? null : $.current() ?? z.getFirst();
13217
13399
  }
13218
- function El(e) {
13219
- let t = Tl(e);
13400
+ function Ll(e, t, n) {
13401
+ L.onNonFatalError(/* @__PURE__ */ Error(`Participant ID mapping not found for external ID "${e.id}" while handling ${t}`), n.id);
13402
+ }
13403
+ function Rl(e, t, n) {
13404
+ let r = Array.from(new Set(e));
13405
+ L.onNonFatalError(/* @__PURE__ */ Error(`Participant ID mapping not found for external IDs "${r.join("\", \"")}" while handling ${t}`), n.id);
13406
+ }
13407
+ function zl(e) {
13408
+ let t = Il(e);
13220
13409
  if (!t) throw Error("Conversation not found");
13221
13410
  return t;
13222
13411
  }
13223
- async function Dl(e) {
13224
- await Vs.removeHistoryRecords(e);
13412
+ function Bl(e, t) {
13413
+ let n = $.current();
13414
+ if (!n) return null;
13415
+ let r = n.getCachedParticipantIdByExternalId(e);
13416
+ return r ? {
13417
+ conversation: n,
13418
+ participantId: r
13419
+ } : (Ll(e, t, n), null);
13225
13420
  }
13226
- async function Ol(e) {
13421
+ async function Vl(e) {
13422
+ await Zs.removeHistoryRecords(e);
13423
+ }
13424
+ async function Hl(e) {
13227
13425
  let t = $.current() ?? z.getFirst();
13228
13426
  t && await t.startAsr(e);
13229
13427
  }
13230
- async function kl(e) {
13428
+ async function Ul(e) {
13231
13429
  let t = $.current() ?? z.getFirst();
13232
13430
  t && await t.stopAsr(e);
13233
13431
  }
13234
- async function Al(e) {
13432
+ async function Wl(e) {
13235
13433
  let t = $.current() ?? z.getFirst();
13236
13434
  t && await t.requestAsr(e);
13237
13435
  }
13238
- async function jl(e) {
13436
+ async function Gl(e) {
13239
13437
  let t = $.current();
13240
13438
  return t ? t.startUrlSharing(e) : Promise.reject();
13241
13439
  }
13242
- async function Ml() {
13440
+ async function Kl() {
13243
13441
  let e = $.current();
13244
13442
  return e ? e.stopUrlSharing() : Promise.reject();
13245
13443
  }
13246
- async function Nl(e) {
13444
+ async function ql(e) {
13247
13445
  await z.switchCall(e);
13248
13446
  }
13249
- function Pl() {
13447
+ function Jl() {
13250
13448
  return z.getActiveId();
13251
13449
  }
13252
- function Fl() {
13450
+ function Yl() {
13253
13451
  return $.getSyncedTime();
13254
13452
  }
13255
- function Il() {
13453
+ function Xl() {
13256
13454
  return M.sdkVersion;
13257
13455
  }
13258
13456
  typeof window < "u" && (window.__CALLS_SDK = yn);
13259
13457
  //#endregion
13260
- export { Ps as Api, Bs as ApiExternal, zs as ArrayDequeue, y as AuthData, f as BaseLogger, Ba as CallDirection, Va as CallType, Ha as ChatRoomEventType, Ua as ConversationFeature, Wa as ConversationOption, Sn as DebugMessageType, to as ExternalIdType, jt as FacingMode, x as FatalError, O as HangupReason, D as HangupType, S as MediaOption, k as MediaTrackKind, V as MediaType, qa as MuteState, Z as ParticipantState, Rs as ParticipantStateDataValue, N as ParticipantStatus, Ls as RecordRole, Ja as RoomsEventType, za as Signaling, B as SignalingCommandType, vr as SignalingConnectionType, K as SignalingNotification, J as TransportTopology, Za as UserRole, A as UserType, To as VolumeDetector, rc as acceptCall, bl as acceptPromotion, tl as activateRooms, Zc as addMovie, lc as addParticipant, uc as addParticipantInternal, nc as authorize, Us as browser, Qs as callInternal, Zs as callTo, mc as captureScreen, hc as captureVmoji, fl as changeAudioEffect, Pc as changeConversationOptions, pc as changeDevice, xc as changeParticipantState, bc as changePriorities, dl as changeVideoEffect, Lc as chatHistory, Fc as chatMessage, Ic as chatMessageInternal, Hc as createJoinLink, Rc as customData, zc as customDataInternal, al as debug, cl as debugLogs, ol as debugMessage, sl as debugMessageWithContext, ic as declineCall, wl as enableFeatureForRoles, Mc as enableVideoSuspend, Nc as enableVideoSuspendSuggest, Cl as feedback, Kc as forceRelayPolicy, Pl as getActiveCallId, Wc as getAnonymTokenByLink, _l as getAudienceModeHands, tc as getInbounds, xl as getParticipantListChunk, Sl as getParticipants, Xc as getStreamInfo, Fl as getSyncedTime, gl as getWaitingHall, Tc as grantRoles, Ec as grantRolesInternal, cc as hangup, Xs as init, ac as joinCall, sc as joinCallByLink, oc as joinCallInternal, Dc as muteParticipant, Oc as muteParticipantInternal, kc as pinParticipant, Ac as pinParticipantInternal, $s as processPush, ec as processPushInternal, vl as promoteParticipant, Yc as publishStream, Sc as putHandsDown, Dl as removeHistoryRecords, Uc as removeJoinLink, $c as removeMovie, dc as removeParticipant, fc as removeParticipantInternal, rl as removeRooms, Al as requestAsr, wc as requestDisplayLayout, yl as requestPromotion, qs as setAudioEffects, pl as setAudioStream, yc as setLocalResolution, Gs as setLogger, jc as setMediaModifiers, il as setStatisticsInterval, Js as setVad, Ks as setVideoEffects, gc as setVideoStream, Ys as setVmoji, hl as setVmojiFill, ml as setVmojiSvg, Gc as setVolume, Ol as startAsr, Vc as startAudienceConversation, Bc as startConversation, qc as startStream, jl as startUrlSharing, kl as stopAsr, Jc as stopStream, Ml as stopUrlSharing, Nl as switchCall, nl as switchRoom, vc as toggleLocalAudio, _c as toggleLocalVideo, Cc as updateDisplayLayout, Qc as updateMovie, el as updateRooms, ul as uploadDebugLogs, Ws as utils, Il as version };
13458
+ export { Ws as Api, Xs as ApiExternal, Ys as ArrayDequeue, y as AuthData, f as BaseLogger, Xa as CallDirection, Za as CallType, Qa as ChatRoomEventType, $a as ConversationFeature, eo as ConversationOption, Sn as DebugMessageType, fo as ExternalIdType, jt as FacingMode, x as FatalError, O as HangupReason, D as HangupType, S as MediaOption, k as MediaTrackKind, V as MediaType, ro as MuteState, Z as ParticipantState, Js as ParticipantStateDataValue, N as ParticipantStatus, qs as RecordRole, io as RoomsEventType, Ya as Signaling, B as SignalingCommandType, vr as SignalingConnectionType, K as SignalingNotification, J as TransportTopology, so as UserRole, A as UserType, Fo as VolumeDetector, mc as acceptCall, jl as acceptPromotion, fl as activateRooms, cl as addMovie, bc as addParticipant, xc as addParticipantInternal, pc as authorize, $s as browser, lc as callInternal, sc as callTo, Tc as captureScreen, Ec as captureVmoji, Cl as changeAudioEffect, Gc as changeConversationOptions, wc as changeDevice, Mc as changeParticipantState, jc as changePriorities, Sl as changeVideoEffect, Jc as chatHistory, Kc as chatMessage, qc as chatMessageInternal, $c as createJoinLink, Yc as customData, Xc as customDataInternal, gl as debug, yl as debugLogs, _l as debugMessage, vl as debugMessageWithContext, hc as declineCall, Fl as enableFeatureForRoles, Uc as enableVideoSuspend, Wc as enableVideoSuspendSuggest, Pl as feedback, rl as forceRelayPolicy, Jl as getActiveCallId, tl as getAnonymTokenByLink, Ol as getAudienceModeHands, fc as getInbounds, Ml as getParticipantListChunk, Nl as getParticipants, sl as getStreamInfo, Yl as getSyncedTime, Dl as getWaitingHall, Ic as grantRoles, Lc as grantRolesInternal, yc as hangup, oc as init, gc as joinCall, vc as joinCallByLink, _c as joinCallInternal, Rc as muteParticipant, zc as muteParticipantInternal, Bc as pinParticipant, Vc as pinParticipantInternal, uc as processPush, dc as processPushInternal, kl as promoteParticipant, ol as publishStream, Nc as putHandsDown, Vl as removeHistoryRecords, el as removeJoinLink, ul as removeMovie, Sc as removeParticipant, Cc as removeParticipantInternal, ml as removeRooms, Wl as requestAsr, Fc as requestDisplayLayout, Al as requestPromotion, rc as setAudioEffects, wl as setAudioStream, Ac as setLocalResolution, tc as setLogger, Hc as setMediaModifiers, hl as setStatisticsInterval, ic as setVad, nc as setVideoEffects, Dc as setVideoStream, ac as setVmoji, El as setVmojiFill, Tl as setVmojiSvg, nl as setVolume, Hl as startAsr, Qc as startAudienceConversation, Zc as startConversation, il as startStream, Gl as startUrlSharing, Ul as stopAsr, al as stopStream, Kl as stopUrlSharing, ql as switchCall, pl as switchRoom, kc as toggleLocalAudio, Oc as toggleLocalVideo, Pc as updateDisplayLayout, ll as updateMovie, dl as updateRooms, xl as uploadDebugLogs, ec as utils, Xl as version };