sip-connector 15.0.0 → 15.2.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.
Files changed (89) hide show
  1. package/README.md +160 -11
  2. package/dist/{@SipConnector-DbvV1Leg.js → @SipConnector-BEZk1hmx.js} +511 -229
  3. package/dist/@SipConnector-hpySQIBa.cjs +1 -0
  4. package/dist/ApiManager/__tests-utils__/helpers.d.ts +9 -0
  5. package/dist/ApiManager/constants.d.ts +2 -1
  6. package/dist/ApiManager/eventNames.d.ts +2 -1
  7. package/dist/CallManager/MCUCallStrategy.d.ts +1 -1
  8. package/dist/ConnectionManager/@ConnectionManager.d.ts +3 -3
  9. package/dist/ConnectionManager/getExtraHeadersRemoteAddress.d.ts +2 -2
  10. package/dist/IncomingCallManager/@IncomingCallManager.d.ts +2 -2
  11. package/dist/SipConnector/@SipConnector.d.ts +4 -2
  12. package/dist/SipConnector/eventNames.d.ts +1 -1
  13. package/dist/SipConnectorFacade/SipConnectorFacade.d.ts +15 -1
  14. package/dist/StatsManager/@StatsManager.d.ts +19 -0
  15. package/dist/StatsManager/eventNames.d.ts +2 -0
  16. package/dist/StatsManager/index.d.ts +2 -0
  17. package/dist/StatsPeerConnection/StatsPeerConnection.d.ts +20 -0
  18. package/dist/StatsPeerConnection/__fixtures__/callStaticsState.d.ts +3923 -0
  19. package/dist/StatsPeerConnection/constants.d.ts +14 -0
  20. package/dist/StatsPeerConnection/eventNames.d.ts +10 -0
  21. package/dist/StatsPeerConnection/index.d.ts +4 -0
  22. package/dist/StatsPeerConnection/parseStatsReports.d.ts +14 -0
  23. package/dist/StatsPeerConnection/requestAllStatistics.d.ts +11 -0
  24. package/dist/StatsPeerConnection/typings.d.ts +194 -0
  25. package/dist/StatsPeerConnection/utils/hasAvailableStats.d.ts +2 -0
  26. package/dist/StatsPeerConnection/utils/index.d.ts +3 -0
  27. package/dist/StatsPeerConnection/utils/now.d.ts +2 -0
  28. package/dist/StatsPeerConnection/utils/statsReportToObject.d.ts +4 -0
  29. package/dist/VideoSendingBalancer/CodecProvider.d.ts +7 -0
  30. package/dist/VideoSendingBalancer/ParametersSetterWithQueue.d.ts +12 -0
  31. package/dist/VideoSendingBalancer/SenderBalancer.d.ts +52 -0
  32. package/dist/VideoSendingBalancer/SenderFinder.d.ts +7 -0
  33. package/dist/VideoSendingBalancer/TaskQueue.d.ts +20 -0
  34. package/dist/VideoSendingBalancer/VideoSendingBalancer.d.ts +44 -0
  35. package/dist/VideoSendingBalancer/VideoSendingEventHandler.d.ts +25 -0
  36. package/dist/VideoSendingBalancer/calcBitrate/calcMaxBitrateByWidth.d.ts +4 -0
  37. package/dist/VideoSendingBalancer/calcBitrate/calcMaxBitrateByWidthAndCodec.d.ts +4 -0
  38. package/dist/VideoSendingBalancer/calcBitrate/index.d.ts +1 -0
  39. package/dist/VideoSendingBalancer/calcResolution/calcScaleResolutionDownBy.d.ts +6 -0
  40. package/dist/VideoSendingBalancer/calcResolution/index.d.ts +1 -0
  41. package/dist/VideoSendingBalancer/index.d.ts +3 -0
  42. package/dist/VideoSendingBalancer/types.d.ts +36 -0
  43. package/dist/__fixtures__/BaseSession.mock.d.ts +1 -1
  44. package/dist/__fixtures__/RTCPeerConnectionMock.d.ts +2 -2
  45. package/dist/__fixtures__/RTCRtpSenderMock.d.ts +1 -0
  46. package/dist/__fixtures__/RTCSessionMock.d.ts +2 -2
  47. package/dist/__fixtures__/UA.mock.d.ts +2 -2
  48. package/dist/__fixtures__/eventNames.d.ts +1 -1
  49. package/dist/__fixtures__/jssip.mock.d.ts +1 -1
  50. package/dist/doMock.cjs +1 -1
  51. package/dist/doMock.js +21 -22
  52. package/dist/index.cjs +1 -1
  53. package/dist/index.d.ts +2 -2
  54. package/dist/index.js +697 -562
  55. package/dist/tools/createUaParser/createUaParser.d.ts +4 -0
  56. package/dist/tools/createUaParser/index.d.ts +1 -0
  57. package/dist/tools/createUaParser/isElectronEnvironment.d.ts +2 -0
  58. package/dist/tools/error/index.d.ts +1 -1
  59. package/dist/tools/index.d.ts +5 -1
  60. package/dist/{setParametersToSender → tools/setParametersToSender}/configureDegradationPreference.d.ts +1 -1
  61. package/dist/{setParametersToSender → tools/setParametersToSender}/configureEncodings.d.ts +1 -1
  62. package/dist/tools/setParametersToSender/index.d.ts +3 -0
  63. package/dist/tools/setParametersToSender/setEncodingsToSender.d.ts +6 -0
  64. package/dist/tools/setParametersToSender/setMaxBitrateToSender.d.ts +2 -0
  65. package/dist/tools/setParametersToSender/setParametersToSender.d.ts +4 -0
  66. package/dist/tools/setParametersToSender/types.d.ts +5 -0
  67. package/dist/tools/syncMediaState/createSyncMediaState.d.ts +18 -0
  68. package/dist/tools/syncMediaState/index.d.ts +1 -18
  69. package/dist/utils/utils.d.ts +4 -0
  70. package/package.json +12 -18
  71. package/dist/@SipConnector-CZo7A8_q.cjs +0 -1
  72. package/dist/setParametersToSender/index.d.ts +0 -1
  73. package/dist/setParametersToSender/setParametersToSender.d.ts +0 -7
  74. package/dist/videoSendingBalancer/balance.d.ts +0 -10
  75. package/dist/videoSendingBalancer/getMaxBitrateByWidth.d.ts +0 -4
  76. package/dist/videoSendingBalancer/getMaxBitrateByWidthAndCodec.d.ts +0 -4
  77. package/dist/videoSendingBalancer/index.d.ts +0 -13
  78. package/dist/videoSendingBalancer/processSender.d.ts +0 -10
  79. package/dist/videoSendingBalancer/scaleBitrate.d.ts +0 -2
  80. package/dist/videoSendingBalancer/setEncodingsToSender.d.ts +0 -10
  81. /package/dist/{videoSendingBalancer → VideoSendingBalancer/calcBitrate}/hasAv1Codec.d.ts +0 -0
  82. /package/dist/{videoSendingBalancer → VideoSendingBalancer/calcBitrate}/scaleBitrateByCodec.d.ts +0 -0
  83. /package/dist/{videoSendingBalancer → tools}/scaleResolutionAndBitrate.d.ts +0 -0
  84. /package/dist/{setParametersToSender → tools/setParametersToSender}/configureEmptyEncodings.d.ts +0 -0
  85. /package/dist/{setParametersToSender → tools/setParametersToSender}/configureMaxBitrate.d.ts +0 -0
  86. /package/dist/{setParametersToSender → tools/setParametersToSender}/configureScaleResolutionDownBy.d.ts +0 -0
  87. /package/dist/{setParametersToSender → tools/setParametersToSender}/hasChangedRTCRtpSendParameters.d.ts +0 -0
  88. /package/dist/{setParametersToSender → tools/setParametersToSender}/resolveHasNeedToUpdateItemEncoding.d.ts +0 -0
  89. /package/dist/{videoSendingBalancer → utils}/hasIncludesString.d.ts +0 -0
package/dist/index.js CHANGED
@@ -1,140 +1,555 @@
1
1
  import "events-constructor";
2
- import { E as y, O as ae, l as i, a as w } from "./@SipConnector-DbvV1Leg.js";
3
- import { b as Bn, S as wn, d as Dn, e as Pn, h as xn } from "./@SipConnector-DbvV1Leg.js";
2
+ import { E as R, O as ae, l as i, p as de, a as O } from "./@SipConnector-BEZk1hmx.js";
3
+ import { c as xn, b as Un, S as Vn, f as Ln, d as Hn, e as $n, h as Wn } from "./@SipConnector-BEZk1hmx.js";
4
4
  import { isCanceledError as Y } from "@krivega/cancelable-promise";
5
5
  import { hasCanceledError as ue } from "repeated-calls";
6
- import { debounce as de } from "ts-debounce";
7
- import x from "debug";
8
- import { default as Fn } from "debug";
9
- import { sequentPromises as le } from "sequent-promises";
10
- import { createStackPromises as fe } from "stack-promises";
11
- const he = (e) => e instanceof Object && ("originator" in e || "cause" in e), Mn = (e) => {
12
- if (Y(e))
6
+ import { debounce as le } from "ts-debounce";
7
+ import { UAParser as he } from "ua-parser-js";
8
+ import { sequentPromises as fe } from "sequent-promises";
9
+ import { createStackPromises as Se } from "stack-promises";
10
+ import k from "debug";
11
+ import { default as Jn } from "debug";
12
+ const me = (n) => n instanceof Object && ("originator" in n || "cause" in n), Pn = (n) => {
13
+ if (Y(n))
13
14
  return !0;
14
- if (!he(e))
15
+ if (!me(n))
15
16
  return !1;
16
- const { originator: n, cause: t } = e;
17
- return typeof t == "string" ? t === y.REQUEST_TIMEOUT || t === y.REJECTED || n === ae.LOCAL && (t === y.CANCELED || t === y.BYE) : !1;
18
- }, ge = (e, n) => (e.degradationPreference = n.degradationPreference, e), Ce = (e, n) => {
19
- e.encodings ??= [];
20
- for (let t = e.encodings.length; t < n; t += 1)
21
- e.encodings.push({});
17
+ const { originator: e, cause: t } = n;
18
+ return typeof t == "string" ? t === R.REQUEST_TIMEOUT || t === R.REJECTED || e === ae.LOCAL && (t === R.CANCELED || t === R.BYE) : !1;
19
+ }, Ce = () => globalThis.process?.versions?.electron !== void 0, q = () => {
20
+ const n = new he(), { name: e } = n.getBrowser(), t = Ce();
21
+ return {
22
+ isChrome: e === "Chrome" || t
23
+ };
24
+ }, x = (n) => {
25
+ const { url: e, cause: t } = n;
26
+ let r = e;
27
+ return (t === R.BAD_MEDIA_DESCRIPTION || t === R.NOT_FOUND) && (r = `${n.message.to.uri.user}@${n.message.to.uri.host}`), r;
28
+ };
29
+ var z = /* @__PURE__ */ ((n) => (n.CONNECT_SERVER_FAILED = "CONNECT_SERVER_FAILED", n.WRONG_USER_OR_PASSWORD = "WRONG_USER_OR_PASSWORD", n.BAD_MEDIA_ERROR = "BAD_MEDIA_ERROR", n.NOT_FOUND_ERROR = "NOT_FOUND_ERROR", n.WS_CONNECTION_FAILED = "WS_CONNECTION_FAILED", n.CONNECT_SERVER_FAILED_BY_LINK = "CONNECT_SERVER_FAILED_BY_LINK", n))(z || {});
30
+ const ge = new Error("Unknown error"), pe = (n = ge) => {
31
+ const { cause: e, socket: t } = n;
32
+ let r = "CONNECT_SERVER_FAILED";
33
+ switch (e) {
34
+ case "Forbidden": {
35
+ r = "WRONG_USER_OR_PASSWORD";
36
+ break;
37
+ }
38
+ case R.BAD_MEDIA_DESCRIPTION: {
39
+ r = "BAD_MEDIA_ERROR";
40
+ break;
41
+ }
42
+ case R.NOT_FOUND: {
43
+ r = "NOT_FOUND_ERROR";
44
+ break;
45
+ }
46
+ default:
47
+ t !== void 0 && t._ws?.readyState === 3 ? r = "WS_CONNECTION_FAILED" : x(n) !== void 0 && x(n) !== "" && (r = "CONNECT_SERVER_FAILED_BY_LINK");
48
+ }
49
+ return r;
50
+ }, Re = (n) => {
51
+ let e = "";
52
+ try {
53
+ e = JSON.stringify(n);
54
+ } catch (t) {
55
+ i("failed to stringify message", t);
56
+ }
22
57
  return e;
23
- }, q = (e) => (n, t) => t !== void 0 && n !== t || t === void 0 && n !== e, Se = q(), me = (e, n) => {
24
- if (Se(e, n))
25
- return e;
26
- }, Re = (e, n) => {
27
- const t = e.maxBitrate, o = me(n, t);
28
- return o !== void 0 && (e.maxBitrate = o), e;
29
- }, z = 1, pe = q(
30
- z
31
- ), ye = (e, n) => {
32
- const t = e === void 0 ? void 0 : Math.max(e, z);
33
- if (t !== void 0 && pe(
58
+ }, ye = new Error("Unknown error"), ve = (n = ye) => {
59
+ const { code: e, cause: t, message: r } = n, s = x(n), o = { code: "", cause: "", message: "" };
60
+ return typeof r == "object" && r !== null ? o.message = Re(r) : r && (o.message = String(r)), s !== void 0 && s !== "" && (o.link = s), e !== void 0 && e !== "" && (o.code = e), t !== void 0 && t !== "" && (o.cause = t), o;
61
+ }, Te = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
62
+ __proto__: null,
63
+ EErrorTypes: z,
64
+ getLinkError: x,
65
+ getTypeFromError: pe,
66
+ getValuesFromError: ve
67
+ }, Symbol.toStringTag, { value: "Module" })), Ee = ({
68
+ sessionId: n,
69
+ remoteAddress: e,
70
+ isMutedAudio: t,
71
+ isMutedVideo: r,
72
+ isRegistered: s,
73
+ isPresentationCall: o
74
+ }) => {
75
+ const c = [], a = t ? "0" : "1", d = r ? "0" : "1";
76
+ return c.push(`X-Vinteo-Mic-State: ${a}`, `X-Vinteo-MainCam-State: ${d}`), (s === !1 || s === void 0) && c.push("X-Vinteo-Purgatory-Call: yes"), n !== void 0 && n !== "" && c.push(`X-Vinteo-Session: ${n}`), o === !0 && c.push("X-Vinteo-Presentation-Call: yes"), e !== void 0 && e !== "" && c.push(`X-Vinteo-Remote: ${e}`), c;
77
+ }, Me = "[@*!|]", be = "_", Be = (n) => {
78
+ let e = n;
79
+ return e = e.replaceAll(new RegExp(Me, "g"), be), e;
80
+ }, _e = ({
81
+ appName: n,
82
+ appVersion: e,
83
+ browserName: t,
84
+ browserVersion: r
85
+ }) => {
86
+ const o = `${Be(n)} ${e}`;
87
+ return `ChromeNew - ${t === void 0 ? o : `${t} ${r}, ${o}`}`;
88
+ }, Ae = ({
89
+ isUnifiedSdpSemantic: n,
90
+ appVersion: e,
91
+ browserName: t,
92
+ browserVersion: r,
93
+ appName: s
94
+ }) => n ? _e({ appVersion: e, browserName: t, browserVersion: r, appName: s }) : "Chrome", Z = "purgatory", U = (n) => n === Z, Ne = (n) => (e) => [...e].map((r) => async () => n(r)), Pe = async ({
95
+ accumulatedKeys: n,
96
+ sendKey: e,
97
+ canRunTask: t
98
+ }) => {
99
+ const s = Ne(e)(n);
100
+ return fe(s, t);
101
+ }, Oe = (n, e) => (n.degradationPreference = e.degradationPreference, n), we = (n, e) => {
102
+ n.encodings ??= [];
103
+ for (let t = n.encodings.length; t < e; t += 1)
104
+ n.encodings.push({});
105
+ return n;
106
+ }, ee = (n) => (e, t) => t !== void 0 && e !== t || t === void 0 && e !== n, De = ee(), ke = (n, e) => {
107
+ if (De(n, e))
108
+ return n;
109
+ }, Ie = (n, e) => {
110
+ const t = n.maxBitrate, r = ke(e, t);
111
+ return r !== void 0 && (n.maxBitrate = r), n;
112
+ }, ne = 1, Fe = ee(
113
+ ne
114
+ ), xe = (n, e) => {
115
+ const t = n === void 0 ? void 0 : Math.max(n, ne);
116
+ if (t !== void 0 && Fe(
34
117
  t,
35
- n
118
+ e
36
119
  ))
37
120
  return t;
38
- }, Ee = (e, n) => {
39
- const t = e.scaleResolutionDownBy, o = ye(
40
- n,
121
+ }, Ue = (n, e) => {
122
+ const t = n.scaleResolutionDownBy, r = xe(
123
+ e,
41
124
  t
42
125
  );
43
- return o !== void 0 && (e.scaleResolutionDownBy = o), e;
44
- }, Te = (e, n) => {
45
- const t = n.encodings?.length ?? 0;
46
- return Ce(e, t), e.encodings.forEach((o, s) => {
47
- const r = (n?.encodings ?? [])[s], c = r?.maxBitrate, a = r?.scaleResolutionDownBy;
48
- Re(o, c), Ee(o, a);
49
- }), e;
50
- }, ve = (e, n) => {
51
- if (e.codecs?.length !== n.codecs?.length)
126
+ return r !== void 0 && (n.scaleResolutionDownBy = r), n;
127
+ }, Ve = (n, e) => {
128
+ const t = e.encodings?.length ?? 0;
129
+ return we(n, t), n.encodings.forEach((r, s) => {
130
+ const o = (e?.encodings ?? [])[s], c = o?.maxBitrate, a = o?.scaleResolutionDownBy;
131
+ Ie(r, c), Ue(r, a);
132
+ }), n;
133
+ }, Le = (n, e) => {
134
+ if (n.codecs?.length !== e.codecs?.length)
52
135
  return !0;
53
- for (let t = 0; t < (e.codecs?.length ?? 0); t++)
54
- if (JSON.stringify(e.codecs[t]) !== JSON.stringify(n.codecs[t]))
136
+ for (let t = 0; t < (n.codecs?.length ?? 0); t++)
137
+ if (JSON.stringify(n.codecs[t]) !== JSON.stringify(e.codecs[t]))
55
138
  return !0;
56
- if (e.headerExtensions?.length !== n.headerExtensions?.length)
139
+ if (n.headerExtensions?.length !== e.headerExtensions?.length)
57
140
  return !0;
58
- for (let t = 0; t < (e.headerExtensions?.length ?? 0); t++)
59
- if (JSON.stringify(e.headerExtensions[t]) !== JSON.stringify(n.headerExtensions[t]))
141
+ for (let t = 0; t < (n.headerExtensions?.length ?? 0); t++)
142
+ if (JSON.stringify(n.headerExtensions[t]) !== JSON.stringify(e.headerExtensions[t]))
60
143
  return !0;
61
- if (e.encodings?.length !== n.encodings?.length)
144
+ if (n.encodings?.length !== e.encodings?.length)
62
145
  return !0;
63
- for (let t = 0; t < (e.encodings.length ?? 0); t++)
64
- if (JSON.stringify(e.encodings[t]) !== JSON.stringify(n.encodings[t]))
146
+ for (let t = 0; t < (n.encodings?.length ?? 0); t++)
147
+ if (JSON.stringify(n.encodings[t]) !== JSON.stringify(e.encodings[t]))
65
148
  return !0;
66
- return e.rtcp?.cname !== n.rtcp?.cname || e.rtcp?.reducedSize !== n.rtcp?.reducedSize || e.degradationPreference !== n.degradationPreference;
67
- }, Q = async (e, n) => {
68
- const t = e.getParameters(), o = JSON.parse(
149
+ return n.rtcp?.cname !== e.rtcp?.cname || n.rtcp?.reducedSize !== e.rtcp?.reducedSize || n.degradationPreference !== e.degradationPreference;
150
+ }, J = async (n, e) => {
151
+ const t = n.getParameters(), r = JSON.parse(
69
152
  JSON.stringify(t)
70
153
  );
71
- Te(t, n), ge(t, n);
72
- const s = ve(o, t);
73
- return s && await e.setParameters(t), { parameters: t, isChanged: s };
74
- }, Me = (e) => e.getVideoTracks()[0], be = 1e6, m = (e) => e * be, Z = m(0.06), ee = m(4), _e = (e) => e <= 64 ? Z : e <= 128 ? m(0.12) : e <= 256 ? m(0.25) : e <= 384 ? m(0.32) : e <= 426 ? m(0.38) : e <= 640 ? m(0.5) : e <= 848 ? m(0.7) : e <= 1280 ? m(1) : e <= 1920 ? m(2) : ee, ne = (e, n) => e !== void 0 && n !== void 0 && e.toLowerCase().includes(n.toLowerCase()), Ae = "av1", Oe = (e) => ne(e, Ae), Ne = 0.6, W = (e, n) => Oe(n) ? e * Ne : e, Be = (e) => W(Z, e), we = (e) => W(ee, e), te = (e, n) => {
75
- const t = _e(e);
76
- return W(t, n);
77
- }, J = 1, oe = ({
78
- videoTrack: e,
79
- targetSize: n,
154
+ Ve(t, e), Oe(t, e);
155
+ const s = Le(r, t);
156
+ return s && await n.setParameters(t), { parameters: t, isChanged: s };
157
+ }, te = async (n, e, t) => {
158
+ const { isChanged: r, parameters: s } = await J(n, {
159
+ encodings: [
160
+ {
161
+ scaleResolutionDownBy: e.scaleResolutionDownBy,
162
+ maxBitrate: e.maxBitrate
163
+ }
164
+ ]
165
+ });
166
+ return r && t && t(s), { isChanged: r, parameters: s };
167
+ }, He = (n) => (t) => (i("onStartMainCam"), n.on("api:admin-start-main-cam", t)), $e = (n) => (t) => (i("onStartMic"), n.on("api:admin-start-mic", t)), We = (n) => (t) => (i("onStopMainCam"), n.on("api:admin-stop-main-cam", t)), Qe = (n) => (t) => (i("onStopMic"), n.on("api:admin-stop-mic", t)), Je = ({ sipConnector: n }) => {
168
+ const e = (S, C) => ({ isSyncForced: g }) => {
169
+ if (g === !0) {
170
+ S();
171
+ return;
172
+ }
173
+ C();
174
+ }, t = He(n), r = We(n), s = $e(n), o = Qe(n);
175
+ let c, a, d, l;
176
+ const f = ({
177
+ onStartMainCamForced: S,
178
+ onStartMainCamNotForced: C,
179
+ onStopMainCamForced: g,
180
+ onStopMainCamNotForced: p,
181
+ onStartMicForced: y,
182
+ onStartMicNotForced: E,
183
+ onStopMicForced: M,
184
+ onStopMicNotForced: b
185
+ }) => {
186
+ const B = e(
187
+ S,
188
+ C
189
+ );
190
+ c = t(B);
191
+ const _ = e(
192
+ g,
193
+ p
194
+ );
195
+ a = r(_);
196
+ const A = e(y, E);
197
+ d = s(A);
198
+ const N = e(M, b);
199
+ l = o(N);
200
+ }, h = () => {
201
+ c?.(), a?.(), d?.(), l?.();
202
+ };
203
+ return {
204
+ start: (S) => {
205
+ f(S);
206
+ },
207
+ stop: () => {
208
+ h();
209
+ }
210
+ };
211
+ }, On = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
212
+ __proto__: null,
213
+ PURGATORY_CONFERENCE_NUMBER: Z,
214
+ createSyncMediaState: Je,
215
+ createUaParser: q,
216
+ error: Te,
217
+ getExtraHeaders: Ee,
218
+ getUserAgent: Ae,
219
+ hasPurgatory: U,
220
+ prepareMediaStream: de,
221
+ sendDtmfAccumulated: Pe,
222
+ setEncodingsToSender: te,
223
+ setParametersToSender: J
224
+ }, Symbol.toStringTag, { value: "Module" })), wn = () => q().isChrome, Xe = (n) => n.getVideoTracks()[0], je = 1e6, m = (n) => n * je, re = m(0.06), se = m(4), Ge = (n) => n <= 64 ? re : n <= 128 ? m(0.12) : n <= 256 ? m(0.25) : n <= 384 ? m(0.32) : n <= 426 ? m(0.38) : n <= 640 ? m(0.5) : n <= 848 ? m(0.7) : n <= 1280 ? m(1) : n <= 1920 ? m(2) : se, oe = (n, e) => n !== void 0 && e !== void 0 && n.toLowerCase().includes(e.toLowerCase()), Ke = "av1", Ye = (n) => oe(n, Ke), qe = 0.6, X = (n, e) => Ye(e) ? n * qe : n, ze = (n) => X(re, n), Ze = (n) => X(se, n), Q = (n, e) => {
225
+ const t = Ge(n);
226
+ return X(t, e);
227
+ }, $ = 1, ie = ({
228
+ videoTrack: n,
229
+ targetSize: e
230
+ }) => {
231
+ const t = n.getSettings(), r = t.width, s = t.height, o = r === void 0 ? $ : r / e.width, c = s === void 0 ? $ : s / e.height;
232
+ return Math.max(o, c, $);
233
+ }, en = (n) => [...n.keys()].map((e) => n.get(e)), nn = (n, e) => en(n).find((t) => t?.type === e), tn = async (n) => n.getStats().then((e) => nn(e, "codec")?.mimeType);
234
+ class rn {
235
+ // eslint-disable-next-line @typescript-eslint/class-methods-use-this
236
+ async getCodecFromSender(e) {
237
+ return await tn(e) ?? "";
238
+ }
239
+ }
240
+ class sn {
241
+ stackPromises = Se({
242
+ noRunIsNotActual: !0
243
+ });
244
+ /**
245
+ * Добавляет задачу в очередь и возвращает Promise с результатом
246
+ * @param task - Функция для выполнения
247
+ * @returns Promise с результатом выполнения задачи
248
+ */
249
+ async add(e) {
250
+ return this.stackPromises.add(e), this.run();
251
+ }
252
+ stop() {
253
+ this.stackPromises.stop();
254
+ }
255
+ /**
256
+ * Выполняет задачи из очереди с обработкой ошибок
257
+ * @returns Promise с результатом выполнения
258
+ */
259
+ async run() {
260
+ return this.stackPromises().catch((e) => {
261
+ i("TaskQueue: error", e);
262
+ });
263
+ }
264
+ }
265
+ class on {
266
+ taskQueue;
267
+ onSetParameters;
268
+ constructor(e) {
269
+ this.onSetParameters = e, this.taskQueue = new sn();
270
+ }
271
+ async setEncodingsToSender(e, t) {
272
+ return this.taskQueue.add(async () => te(e, t, this.onSetParameters));
273
+ }
274
+ stop() {
275
+ this.taskQueue.stop();
276
+ }
277
+ }
278
+ class cn {
279
+ ignoreForCodec;
280
+ senderFinder;
281
+ codecProvider;
282
+ parametersSetter;
283
+ resultNoChanged = {
284
+ isChanged: !1,
285
+ parameters: {
286
+ encodings: [{}],
287
+ transactionId: "0",
288
+ codecs: [],
289
+ headerExtensions: [],
290
+ rtcp: {}
291
+ }
292
+ };
293
+ constructor({
294
+ senderFinder: e,
295
+ codecProvider: t,
296
+ parametersSetter: r
297
+ }, s) {
298
+ this.senderFinder = e, this.codecProvider = t, this.parametersSetter = r, this.ignoreForCodec = s.ignoreForCodec;
299
+ }
300
+ /**
301
+ * Выполняет балансировку на основе заголовков от сервера
302
+ * @param connection - RTCPeerConnection для получения отправителей
303
+ * @param headers - Заголовки от сервера с командами управления
304
+ * @returns Promise с результатом балансировки
305
+ */
306
+ async balance(e, t) {
307
+ const r = e.getSenders(), s = this.senderFinder.findVideoSender(r);
308
+ if (!s?.track)
309
+ return this.resultNoChanged;
310
+ const o = await this.codecProvider.getCodecFromSender(s);
311
+ if (oe(o, this.ignoreForCodec))
312
+ return this.resultNoChanged;
313
+ const { mainCam: c, resolutionMainCam: a } = t ?? {};
314
+ return this.processSender(
315
+ { mainCam: c, resolutionMainCam: a },
316
+ {
317
+ sender: s,
318
+ codec: o,
319
+ videoTrack: s.track
320
+ }
321
+ );
322
+ }
323
+ /**
324
+ * Обрабатывает отправитель в зависимости от команды управления
325
+ * @param context - Контекст балансировки
326
+ * @returns Promise с результатом обработки
327
+ */
328
+ async processSender(e, t) {
329
+ const { mainCam: r, resolutionMainCam: s } = e;
330
+ switch (r) {
331
+ case O.PAUSE_MAIN_CAM:
332
+ return this.downgradeResolutionSender(t);
333
+ case O.RESUME_MAIN_CAM:
334
+ return this.setBitrateByTrackResolution(t);
335
+ case O.MAX_MAIN_CAM_RESOLUTION:
336
+ return s !== void 0 ? this.setResolutionSender(s, t) : this.setBitrateByTrackResolution(t);
337
+ case O.ADMIN_STOP_MAIN_CAM:
338
+ case O.ADMIN_START_MAIN_CAM:
339
+ case void 0:
340
+ return this.setBitrateByTrackResolution(t);
341
+ default:
342
+ return this.setBitrateByTrackResolution(t);
343
+ }
344
+ }
345
+ /**
346
+ * Понижает разрешение отправителя (пауза камеры)
347
+ * @param context - Контекст балансировки
348
+ * @returns Promise с результатом
349
+ */
350
+ async downgradeResolutionSender(e) {
351
+ const { sender: t, codec: r } = e, s = {
352
+ scaleResolutionDownBy: 200,
353
+ maxBitrate: ze(r)
354
+ };
355
+ return this.parametersSetter.setEncodingsToSender(t, s);
356
+ }
357
+ /**
358
+ * Устанавливает битрейт на основе разрешения трека
359
+ * @param context - Контекст балансировки
360
+ * @returns Promise с результатом
361
+ */
362
+ async setBitrateByTrackResolution(e) {
363
+ const { sender: t, videoTrack: r, codec: s } = e, c = r.getSettings().width, a = c === void 0 ? Ze(s) : Q(c, s);
364
+ return this.parametersSetter.setEncodingsToSender(t, {
365
+ scaleResolutionDownBy: 1,
366
+ maxBitrate: a
367
+ });
368
+ }
369
+ /**
370
+ * Устанавливает разрешение отправителя на основе заголовка
371
+ * @param resolutionMainCam - Разрешение главной камеры
372
+ * @param context - Контекст балансировки
373
+ * @returns Promise с результатом
374
+ */
375
+ async setResolutionSender(e, t) {
376
+ const [r, s] = e.split("x"), { sender: o, videoTrack: c, codec: a } = t, d = {
377
+ width: Number(r),
378
+ height: Number(s)
379
+ }, l = ie({
380
+ videoTrack: c,
381
+ targetSize: d
382
+ }), f = Q(d.width, a), h = {
383
+ scaleResolutionDownBy: l,
384
+ maxBitrate: f
385
+ };
386
+ return this.parametersSetter.setEncodingsToSender(o, h);
387
+ }
388
+ }
389
+ const an = (n) => n.find((e) => e.track?.kind === "video");
390
+ class dn {
391
+ // eslint-disable-next-line @typescript-eslint/class-methods-use-this
392
+ findVideoSender(e) {
393
+ return an(e);
394
+ }
395
+ }
396
+ class un {
397
+ sipConnector;
398
+ currentHandler;
399
+ constructor(e) {
400
+ this.sipConnector = e;
401
+ }
402
+ /**
403
+ * Подписывается на события управления главной камерой
404
+ * @param handler - Обработчик события
405
+ */
406
+ subscribe(e) {
407
+ this.currentHandler = e, this.sipConnector.on("api:main-cam-control", e);
408
+ }
409
+ /**
410
+ * Отписывается от событий управления главной камерой
411
+ */
412
+ unsubscribe() {
413
+ this.currentHandler && (this.sipConnector.off("api:main-cam-control", this.currentHandler), this.currentHandler = void 0);
414
+ }
415
+ /**
416
+ * Получает соединение из SipConnector
417
+ * @returns RTCPeerConnection или undefined
418
+ */
419
+ getConnection() {
420
+ return this.sipConnector.connection;
421
+ }
422
+ }
423
+ class ln {
424
+ eventHandler;
425
+ senderBalancer;
426
+ parametersSetterWithQueue;
427
+ serverHeaders;
428
+ constructor(e, { ignoreForCodec: t, onSetParameters: r } = {}) {
429
+ this.eventHandler = new un(e), this.parametersSetterWithQueue = new on(r), this.senderBalancer = new cn(
430
+ {
431
+ senderFinder: new dn(),
432
+ codecProvider: new rn(),
433
+ parametersSetter: this.parametersSetterWithQueue
434
+ },
435
+ {
436
+ ignoreForCodec: t
437
+ }
438
+ );
439
+ }
440
+ /**
441
+ * Подписывается на события управления главной камерой
442
+ */
443
+ subscribe() {
444
+ this.eventHandler.subscribe(this.handleMainCamControl);
445
+ }
446
+ /**
447
+ * Отписывается от событий и сбрасывает состояние
448
+ */
449
+ unsubscribe() {
450
+ this.eventHandler.unsubscribe(), this.parametersSetterWithQueue.stop(), this.reset();
451
+ }
452
+ /**
453
+ * Сбрасывает состояние балансировщика
454
+ */
455
+ reset() {
456
+ delete this.serverHeaders;
457
+ }
458
+ /**
459
+ * Перебалансирует текущее состояние
460
+ * @returns Promise с результатом балансировки
461
+ */
462
+ async reBalance() {
463
+ return this.balanceByTrack();
464
+ }
465
+ /**
466
+ * Выполняет балансировку на основе текущего состояния
467
+ * @returns Promise с результатом балансировки
468
+ */
469
+ async balanceByTrack() {
470
+ const e = this.eventHandler.getConnection();
471
+ if (!e)
472
+ throw new Error("connection is not exist");
473
+ return this.senderBalancer.balance(e, this.serverHeaders);
474
+ }
475
+ /**
476
+ * Обработчик событий управления главной камерой
477
+ * @param headers - Заголовки от сервера
478
+ */
479
+ handleMainCamControl = (e) => {
480
+ this.serverHeaders = e, this.balanceByTrack().catch(k);
481
+ };
482
+ }
483
+ const Dn = (n, e = {}) => new ln(n, e), hn = ({
484
+ videoTrack: n,
485
+ targetSize: e,
80
486
  codec: t
81
487
  }) => {
82
- const o = e.getSettings(), s = o.width, r = o.height, c = s === void 0 ? J : s / n.width, a = r === void 0 ? J : r / n.height, u = Math.max(c, a, J), l = te(n.width, t);
83
- return { scaleResolutionDownBy: u, maxBitrate: l };
84
- }, D = ({
85
- mediaStream: e,
86
- simulcastEncodings: n,
488
+ const r = ie({
489
+ videoTrack: n,
490
+ targetSize: e
491
+ }), s = Q(e.width, t);
492
+ return { scaleResolutionDownBy: r, maxBitrate: s };
493
+ }, w = ({
494
+ mediaStream: n,
495
+ simulcastEncodings: e,
87
496
  sendEncodings: t
88
497
  }) => {
89
- if (n && n.length > 0) {
90
- const o = t ?? [], s = Me(e);
498
+ if (e && e.length > 0) {
499
+ const r = t ?? [], s = Xe(n);
91
500
  if (s === void 0)
92
501
  throw new Error("No video track");
93
- return n.forEach((r, c) => {
94
- const a = o[c] ?? {};
95
- a.active = !0, r.rid !== void 0 && (a.rid = r.rid), r.scalabilityMode !== void 0 && (a.scalabilityMode = r.scalabilityMode);
96
- const { maxBitrate: u, scaleResolutionDownBy: l } = oe({
502
+ return e.forEach((o, c) => {
503
+ const a = r[c] ?? {};
504
+ a.active = !0, o.rid !== void 0 && (a.rid = o.rid), o.scalabilityMode !== void 0 && (a.scalabilityMode = o.scalabilityMode);
505
+ const { maxBitrate: d, scaleResolutionDownBy: l } = hn({
97
506
  videoTrack: s,
98
507
  targetSize: {
99
- width: r.width,
100
- height: r.height
508
+ width: o.width,
509
+ height: o.height
101
510
  }
102
511
  });
103
- a.maxBitrate = u, a.scaleResolutionDownBy = l, o[c] = a;
104
- }), o;
512
+ a.maxBitrate = d, a.scaleResolutionDownBy = l, r[c] = a;
513
+ }), r;
105
514
  }
106
515
  return t;
107
- }, se = "purgatory", I = (e) => e === se, De = (e, n) => e.filter((o) => n.some((s) => s.clockRate === o.clockRate && s.mimeType === o.mimeType && s.channels === o.channels && s.sdpFmtpLine === o.sdpFmtpLine)), Pe = (e) => {
108
- const n = RTCRtpSender.getCapabilities(e), t = RTCRtpReceiver.getCapabilities(e), o = n === null ? [] : n.codecs, s = t === null ? [] : t.codecs;
109
- return De(o, s);
110
- }, xe = (e, n) => n === void 0 || n.length === 0 ? e : e.sort((t, o) => {
111
- const s = n.indexOf(t.mimeType), r = n.indexOf(o.mimeType), c = s === -1 ? Number.MAX_VALUE : s, a = r === -1 ? Number.MAX_VALUE : r;
516
+ }, fn = (n, e) => n.filter((r) => e.some((s) => s.clockRate === r.clockRate && s.mimeType === r.mimeType && s.channels === r.channels && s.sdpFmtpLine === r.sdpFmtpLine)), Sn = (n) => {
517
+ const e = RTCRtpSender.getCapabilities(n), t = RTCRtpReceiver.getCapabilities(n), r = e === null ? [] : e.codecs, s = t === null ? [] : t.codecs;
518
+ return fn(r, s);
519
+ }, mn = (n, e) => e === void 0 || e.length === 0 ? n : n.sort((t, r) => {
520
+ const s = e.indexOf(t.mimeType), o = e.indexOf(r.mimeType), c = s === -1 ? Number.MAX_VALUE : s, a = o === -1 ? Number.MAX_VALUE : o;
112
521
  return c - a;
113
- }), Ie = (e, n) => n === void 0 || n.length === 0 ? e : e.filter((t) => !n.includes(t.mimeType)), Fe = (e, {
114
- preferredMimeTypesVideoCodecs: n,
522
+ }), Cn = (n, e) => e === void 0 || e.length === 0 ? n : n.filter((t) => !e.includes(t.mimeType)), gn = (n, {
523
+ preferredMimeTypesVideoCodecs: e,
115
524
  excludeMimeTypesVideoCodecs: t
116
525
  }) => {
117
- if (typeof e.setCodecPreferences == "function" && e.sender.track?.kind === "video" && (n !== void 0 && n.length > 0 || t !== void 0 && t.length > 0)) {
118
- const o = Pe("video"), s = Ie(o, t), r = xe(s, n);
119
- e.setCodecPreferences(r);
526
+ if (typeof n.setCodecPreferences == "function" && n.sender.track?.kind === "video" && (e !== void 0 && e.length > 0 || t !== void 0 && t.length > 0)) {
527
+ const r = Sn("video"), s = Cn(r, t), o = mn(s, e);
528
+ n.setCodecPreferences(o);
120
529
  }
121
- }, P = (e, {
122
- preferredMimeTypesVideoCodecs: n,
530
+ }, D = (n, {
531
+ preferredMimeTypesVideoCodecs: e,
123
532
  excludeMimeTypesVideoCodecs: t
124
- }) => async (o) => {
533
+ }) => async (r) => {
125
534
  try {
126
- Fe(o, {
127
- preferredMimeTypesVideoCodecs: n,
535
+ gn(r, {
536
+ preferredMimeTypesVideoCodecs: e,
128
537
  excludeMimeTypesVideoCodecs: t
129
- }), Object.values(e).filter((r) => r != null).length > 0 && (i("updateTransceiver setParametersToSender", e), await Q(o.sender, e));
538
+ }), Object.values(n).filter((o) => o != null).length > 0 && (i("updateTransceiver setParametersToSender", n), await J(r.sender, n));
130
539
  } catch (s) {
131
540
  i("updateTransceiver error", s);
132
541
  }
133
- }, X = (e) => {
134
- if (!Y(e) && !ue(e))
135
- throw e;
542
+ }, W = (n) => {
543
+ if (!Y(n) && !ue(n))
544
+ throw n;
136
545
  return { isSuccessful: !1 };
137
- }, Ue = ({ kind: e, readyState: n }) => e === "video" && n === "live", ke = /* @__PURE__ */ new Set([
546
+ }, pn = ({ kind: n, readyState: e }) => n === "video" && e === "live", j = (n, e, { onEnterPurgatory: t, onEnterConference: r }) => {
547
+ U(n) ? t && t() : r && r({ isSuccessProgressCall: e });
548
+ }, G = (n, e) => {
549
+ n(), e && e();
550
+ }, K = (n, e, t) => {
551
+ throw n && n(), e(), t;
552
+ }, Rn = /* @__PURE__ */ new Set([
138
553
  "on",
139
554
  "once",
140
555
  "onceRace",
@@ -151,7 +566,7 @@ const he = (e) => e instanceof Object && ("originator" in e || "cause" in e), Mn
151
566
  "isConfigured",
152
567
  "isRegistered"
153
568
  ]);
154
- class bn {
569
+ class kn {
155
570
  // @ts-expect-error: proxy method
156
571
  on;
157
572
  // @ts-expect-error: proxy method
@@ -185,142 +600,142 @@ class bn {
185
600
  sipConnector;
186
601
  preferredMimeTypesVideoCodecs;
187
602
  excludeMimeTypesVideoCodecs;
188
- constructor(n, {
603
+ constructor(e, {
189
604
  preferredMimeTypesVideoCodecs: t,
190
- excludeMimeTypesVideoCodecs: o
605
+ excludeMimeTypesVideoCodecs: r
191
606
  } = {}) {
192
- return this.preferredMimeTypesVideoCodecs = t, this.excludeMimeTypesVideoCodecs = o, this.sipConnector = n, new Proxy(this, {
193
- get: (s, r, c) => {
194
- if (typeof r == "string" && ke.has(r) && r in this.sipConnector) {
195
- const u = Reflect.get(this.sipConnector, r, this.sipConnector);
196
- return typeof u == "function" ? u.bind(this.sipConnector) : u;
607
+ return this.preferredMimeTypesVideoCodecs = t, this.excludeMimeTypesVideoCodecs = r, this.sipConnector = e, new Proxy(this, {
608
+ get: (s, o, c) => {
609
+ if (typeof o == "string" && Rn.has(o) && o in this.sipConnector) {
610
+ const d = Reflect.get(this.sipConnector, o, this.sipConnector);
611
+ return typeof d == "function" ? d.bind(this.sipConnector) : d;
197
612
  }
198
- const a = Reflect.get(s, r, c);
613
+ const a = Reflect.get(s, o, c);
199
614
  return typeof a == "function" ? a.bind(s) : a;
200
615
  }
201
616
  });
202
617
  }
203
- connectToServer = async (n) => {
618
+ connectToServer = async (e) => {
204
619
  const {
205
620
  userAgent: t,
206
- sipWebSocketServerURL: o,
621
+ sipWebSocketServerURL: r,
207
622
  sipServerUrl: s,
208
- remoteAddress: r,
623
+ remoteAddress: o,
209
624
  displayName: c,
210
625
  name: a,
211
- password: u,
626
+ password: d,
212
627
  isRegisteredUser: l,
213
- isDisconnectOnFail: h
214
- } = n;
215
- return i("connectToServer", n), this.sipConnector.connect({
628
+ isDisconnectOnFail: f
629
+ } = e;
630
+ return i("connectToServer", e), this.sipConnector.connect({
216
631
  userAgent: t,
217
- sipWebSocketServerURL: o,
632
+ sipWebSocketServerURL: r,
218
633
  sipServerUrl: s,
219
- remoteAddress: r,
634
+ remoteAddress: o,
220
635
  displayName: c,
221
- password: u,
636
+ password: d,
222
637
  user: a,
223
638
  register: l
224
- }).then((f) => (i("connectToServer then"), { ua: f, isSuccessful: !0 })).catch(async (f) => (i("connectToServer catch: error", f), h === !0 ? this.sipConnector.disconnect().then(() => X(f)).catch(() => X(f)) : X(f)));
639
+ }).then((h) => (i("connectToServer then"), { ua: h, isSuccessful: !0 })).catch(async (h) => (i("connectToServer catch: error", h), f === !0 ? this.sipConnector.disconnect().then(() => W(h)).catch(() => W(h)) : W(h)));
225
640
  };
226
- callToServer = async (n) => {
641
+ callToServer = async (e) => {
227
642
  const {
228
643
  conference: t,
229
- mediaStream: o,
644
+ mediaStream: r,
230
645
  extraHeaders: s,
231
- iceServers: r,
646
+ iceServers: o,
232
647
  contentHint: c,
233
648
  simulcastEncodings: a,
234
- degradationPreference: u,
649
+ degradationPreference: d,
235
650
  sendEncodings: l,
236
- offerToReceiveAudio: h,
237
- offerToReceiveVideo: f,
238
- directionVideo: F,
239
- directionAudio: U,
240
- setRemoteStreams: g,
241
- onBeforeProgressCall: R,
242
- onSuccessProgressCall: C,
243
- onEnterPurgatory: S,
244
- onEnterConference: p,
651
+ offerToReceiveAudio: f,
652
+ offerToReceiveVideo: h,
653
+ directionVideo: I,
654
+ directionAudio: F,
655
+ setRemoteStreams: S,
656
+ onBeforeProgressCall: C,
657
+ onSuccessProgressCall: g,
658
+ onEnterPurgatory: p,
659
+ onEnterConference: y,
245
660
  onFailProgressCall: E,
246
- onFinishProgressCall: T,
247
- onEndedCall: v
248
- } = n, _ = this.resolveHandleReadyRemoteStreamsDebounced({
249
- onReadyRemoteStreams: g
250
- }), A = this.resolveHandleReadyRemoteStreams({
661
+ onFinishProgressCall: M,
662
+ onEndedCall: b
663
+ } = e, B = this.resolveHandleReadyRemoteStreamsDebounced({
664
+ onReadyRemoteStreams: S
665
+ }), _ = this.resolveHandleReadyRemoteStreams({
251
666
  onReadyRemoteStreams: () => {
252
- _().catch(x);
667
+ B().catch(k);
253
668
  }
254
- }), O = P(
669
+ }), A = D(
255
670
  {
256
- degradationPreference: u
671
+ degradationPreference: d
257
672
  },
258
673
  {
259
674
  preferredMimeTypesVideoCodecs: this.preferredMimeTypesVideoCodecs,
260
675
  excludeMimeTypesVideoCodecs: this.excludeMimeTypesVideoCodecs
261
676
  }
262
677
  );
263
- i("callToServer", n);
678
+ i("callToServer", e);
264
679
  const N = async () => (i("startCall"), this.sipConnector.call({
265
- mediaStream: o,
680
+ mediaStream: r,
266
681
  extraHeaders: s,
267
- iceServers: r,
682
+ iceServers: o,
268
683
  contentHint: c,
269
- offerToReceiveAudio: h,
270
- offerToReceiveVideo: f,
271
- directionVideo: F,
272
- directionAudio: U,
273
- sendEncodings: D({
274
- mediaStream: o,
684
+ offerToReceiveAudio: f,
685
+ offerToReceiveVideo: h,
686
+ directionVideo: I,
687
+ directionAudio: F,
688
+ sendEncodings: w({
689
+ mediaStream: r,
275
690
  simulcastEncodings: a,
276
691
  sendEncodings: l
277
692
  }),
278
693
  number: t,
279
- onAddedTransceiver: O,
280
- ontrack: A
694
+ onAddedTransceiver: A,
695
+ ontrack: _
281
696
  }));
282
- let M = !1, b;
283
- const B = (i("subscribeEnterConference: onEnterConference", p), S ?? p ? this.sipConnector.on("api:enterRoom", ({ room: d }) => {
284
- i("enterRoom", { _room: d, isSuccessProgressCall: M }), b = d, I(b) ? S && S() : p && p({ isSuccessProgressCall: M });
285
- }) : () => {
286
- }), L = (d) => (i("onSuccess"), M = !0, _().catch(x), C && C({ isPurgatory: I(b) }), this.sipConnector.onceRace(["call:ended", "call:failed"], () => {
287
- B(), v && v();
288
- }), d), H = (d) => {
289
- throw i("onFail"), E && E(), B(), d;
290
- }, $ = () => {
291
- i("onFinish"), T && T();
697
+ let v = !1, T;
698
+ const P = (i("subscribeEnterConference: onEnterConference", y), this.sipConnector.on("api:enterRoom", ({ room: u }) => {
699
+ i("enterRoom", { _room: u, isSuccessProgressCall: v }), T = u, (p ?? y) && j(T, v, {
700
+ onEnterPurgatory: p,
701
+ onEnterConference: y
702
+ });
703
+ })), V = (u) => (i("onSuccess"), v = !0, B().catch(k), g && g({ isPurgatory: U(T) }), this.sipConnector.onceRace(["call:ended", "call:failed"], () => {
704
+ G(P, b);
705
+ }), u), L = (u) => (i("onFail"), K(E, P, u)), H = () => {
706
+ i("onFinish"), M && M();
292
707
  };
293
- return i("onBeforeProgressCall"), R && R(t), N().then(L).catch((d) => H(d)).finally($);
708
+ return i("onBeforeProgressCall"), C && C(t), N().then(V).catch((u) => L(u)).finally(H);
294
709
  };
295
- disconnectFromServer = async () => this.sipConnector.disconnect().then(() => (i("disconnectFromServer: then"), { isSuccessful: !0 })).catch((n) => (i("disconnectFromServer: catch", n), { isSuccessful: !1 }));
296
- answerToIncomingCall = async (n) => {
710
+ disconnectFromServer = async () => this.sipConnector.disconnect().then(() => (i("disconnectFromServer: then"), { isSuccessful: !0 })).catch((e) => (i("disconnectFromServer: catch", e), { isSuccessful: !1 }));
711
+ answerToIncomingCall = async (e) => {
297
712
  const {
298
713
  mediaStream: t,
299
- extraHeaders: o,
714
+ extraHeaders: r,
300
715
  iceServers: s,
301
- contentHint: r,
716
+ contentHint: o,
302
717
  simulcastEncodings: c,
303
718
  degradationPreference: a,
304
- sendEncodings: u,
719
+ sendEncodings: d,
305
720
  offerToReceiveAudio: l,
306
- offerToReceiveVideo: h,
307
- directionVideo: f,
308
- directionAudio: F,
309
- setRemoteStreams: U,
310
- onBeforeProgressCall: g,
311
- onSuccessProgressCall: R,
312
- onEnterPurgatory: C,
313
- onEnterConference: S,
314
- onFailProgressCall: p,
721
+ offerToReceiveVideo: f,
722
+ directionVideo: h,
723
+ directionAudio: I,
724
+ setRemoteStreams: F,
725
+ onBeforeProgressCall: S,
726
+ onSuccessProgressCall: C,
727
+ onEnterPurgatory: g,
728
+ onEnterConference: p,
729
+ onFailProgressCall: y,
315
730
  onFinishProgressCall: E,
316
- onEndedCall: T
317
- } = n, v = this.resolveHandleReadyRemoteStreamsDebounced({
318
- onReadyRemoteStreams: U
319
- }), _ = this.resolveHandleReadyRemoteStreams({
731
+ onEndedCall: M
732
+ } = e, b = this.resolveHandleReadyRemoteStreamsDebounced({
733
+ onReadyRemoteStreams: F
734
+ }), B = this.resolveHandleReadyRemoteStreams({
320
735
  onReadyRemoteStreams: () => {
321
- v().catch(x);
736
+ b().catch(k);
322
737
  }
323
- }), A = P(
738
+ }), _ = D(
324
739
  {
325
740
  degradationPreference: a
326
741
  },
@@ -329,141 +744,141 @@ class bn {
329
744
  excludeMimeTypesVideoCodecs: this.excludeMimeTypesVideoCodecs
330
745
  }
331
746
  );
332
- i("answerToIncomingCall", n);
333
- const O = async () => this.sipConnector.answerToIncomingCall({
747
+ i("answerToIncomingCall", e);
748
+ const A = async () => this.sipConnector.answerToIncomingCall({
334
749
  mediaStream: t,
335
- extraHeaders: o,
750
+ extraHeaders: r,
336
751
  iceServers: s,
337
- contentHint: r,
752
+ contentHint: o,
338
753
  offerToReceiveAudio: l,
339
- offerToReceiveVideo: h,
340
- directionVideo: f,
341
- directionAudio: F,
342
- sendEncodings: D({
754
+ offerToReceiveVideo: f,
755
+ directionVideo: h,
756
+ directionAudio: I,
757
+ sendEncodings: w({
343
758
  mediaStream: t,
344
759
  simulcastEncodings: c,
345
- sendEncodings: u
760
+ sendEncodings: d
346
761
  }),
347
- onAddedTransceiver: A,
348
- ontrack: _
762
+ onAddedTransceiver: _,
763
+ ontrack: B
349
764
  }), N = () => {
350
- const { remoteCallerData: d } = this.sipConnector;
351
- return d.incomingNumber;
765
+ const { remoteCallerData: u } = this.sipConnector;
766
+ return u.incomingNumber;
352
767
  };
353
- let M = !1, b;
354
- const B = (i("subscribeEnterConference: onEnterConference", S), C ?? S ? this.sipConnector.on("api:enterRoom", (d) => {
355
- i("enterRoom", { _room: d, isSuccessProgressCall: M }), b = d, I(b) ? C && C() : S && S({ isSuccessProgressCall: M });
356
- }) : () => {
357
- }), L = (d) => (i("onSuccess"), M = !0, v().catch(x), R && R({ isPurgatory: I(b) }), this.sipConnector.onceRace(["call:ended", "call:failed"], () => {
358
- B(), T && T();
359
- }), d), H = (d) => {
360
- throw i("onFail"), p && p(), B(), d;
361
- }, $ = () => {
768
+ let v = !1, T;
769
+ const P = (i("subscribeEnterConference: onEnterConference", p), this.sipConnector.on("api:enterRoom", (u) => {
770
+ i("enterRoom", { _room: u, isSuccessProgressCall: v }), T = u, (g ?? p) && j(T, v, {
771
+ onEnterPurgatory: g,
772
+ onEnterConference: p
773
+ });
774
+ })), V = (u) => (i("onSuccess"), v = !0, b().catch(k), C && C({ isPurgatory: U(T) }), this.sipConnector.onceRace(["call:ended", "call:failed"], () => {
775
+ G(P, M);
776
+ }), u), L = (u) => (i("onFail"), K(y, P, u)), H = () => {
362
777
  i("onFinish"), E && E();
363
778
  };
364
- if (i("onBeforeProgressCall"), g) {
365
- const d = N();
366
- g(d);
779
+ if (i("onBeforeProgressCall"), S) {
780
+ const u = N();
781
+ S(u);
367
782
  }
368
- return O().then(L).catch((d) => H(d)).finally($);
783
+ return A().then(V).catch((u) => L(u)).finally(H);
369
784
  };
370
785
  updatePresentation = async ({
371
- mediaStream: n,
786
+ mediaStream: e,
372
787
  isP2P: t,
373
- maxBitrate: o,
788
+ maxBitrate: r,
374
789
  contentHint: s,
375
- simulcastEncodings: r,
790
+ simulcastEncodings: o,
376
791
  degradationPreference: c,
377
792
  sendEncodings: a,
378
- preferredMimeTypesVideoCodecs: u,
793
+ preferredMimeTypesVideoCodecs: d,
379
794
  excludeMimeTypesVideoCodecs: l
380
795
  }) => {
381
- const h = P(
796
+ const f = D(
382
797
  {
383
798
  degradationPreference: c
384
799
  },
385
800
  {
386
- preferredMimeTypesVideoCodecs: u,
801
+ preferredMimeTypesVideoCodecs: d,
387
802
  excludeMimeTypesVideoCodecs: l
388
803
  }
389
804
  );
390
- return i("updatePresentation"), this.sipConnector.updatePresentation(n, {
805
+ return i("updatePresentation"), this.sipConnector.updatePresentation(e, {
391
806
  isP2P: t,
392
- maxBitrate: o,
807
+ maxBitrate: r,
393
808
  contentHint: s,
394
- sendEncodings: D({
395
- mediaStream: n,
396
- simulcastEncodings: r,
809
+ sendEncodings: w({
810
+ mediaStream: e,
811
+ simulcastEncodings: o,
397
812
  sendEncodings: a
398
813
  }),
399
- onAddedTransceiver: h
814
+ onAddedTransceiver: f
400
815
  });
401
816
  };
402
817
  startPresentation = async ({
403
- mediaStream: n,
818
+ mediaStream: e,
404
819
  isP2P: t,
405
- maxBitrate: o,
820
+ maxBitrate: r,
406
821
  contentHint: s,
407
- simulcastEncodings: r,
822
+ simulcastEncodings: o,
408
823
  degradationPreference: c,
409
824
  sendEncodings: a,
410
- preferredMimeTypesVideoCodecs: u,
825
+ preferredMimeTypesVideoCodecs: d,
411
826
  excludeMimeTypesVideoCodecs: l,
412
- callLimit: h
827
+ callLimit: f
413
828
  }) => {
414
- const f = P(
829
+ const h = D(
415
830
  {
416
831
  degradationPreference: c
417
832
  },
418
833
  {
419
- preferredMimeTypesVideoCodecs: u,
834
+ preferredMimeTypesVideoCodecs: d,
420
835
  excludeMimeTypesVideoCodecs: l
421
836
  }
422
837
  );
423
- return i("startPresentation"), this.sipConnector.startPresentation(n, {
838
+ return i("startPresentation"), this.sipConnector.startPresentation(e, {
424
839
  isP2P: t,
425
- maxBitrate: o,
840
+ maxBitrate: r,
426
841
  contentHint: s,
427
- callLimit: h,
428
- sendEncodings: D({
429
- mediaStream: n,
430
- simulcastEncodings: r,
842
+ callLimit: f,
843
+ sendEncodings: w({
844
+ mediaStream: e,
845
+ simulcastEncodings: o,
431
846
  sendEncodings: a
432
847
  }),
433
- onAddedTransceiver: f
848
+ onAddedTransceiver: h
434
849
  });
435
850
  };
436
- stopShareSipConnector = async ({ isP2P: n = !1 } = {}) => (i("stopShareSipConnector"), this.sipConnector.stopPresentation({
437
- isP2P: n
851
+ stopShareSipConnector = async ({ isP2P: e = !1 } = {}) => (i("stopShareSipConnector"), this.sipConnector.stopPresentation({
852
+ isP2P: e
438
853
  }).catch((t) => {
439
854
  i(t);
440
855
  }));
441
856
  sendRefusalToTurnOnMic = async () => {
442
- i("sendRefusalToTurnOnMic"), await this.sipConnector.sendRefusalToTurnOnMic().catch((n) => {
443
- i("sendRefusalToTurnOnMic: error", n);
857
+ i("sendRefusalToTurnOnMic"), await this.sipConnector.sendRefusalToTurnOnMic().catch((e) => {
858
+ i("sendRefusalToTurnOnMic: error", e);
444
859
  });
445
860
  };
446
861
  sendRefusalToTurnOnCam = async () => {
447
- i("sendRefusalToTurnOnCam"), await this.sipConnector.sendRefusalToTurnOnCam().catch((n) => {
448
- i("sendRefusalToTurnOnCam: error", n);
862
+ i("sendRefusalToTurnOnCam"), await this.sipConnector.sendRefusalToTurnOnCam().catch((e) => {
863
+ i("sendRefusalToTurnOnCam: error", e);
449
864
  });
450
865
  };
451
866
  sendMediaState = async ({
452
- isEnabledCam: n,
867
+ isEnabledCam: e,
453
868
  isEnabledMic: t
454
869
  }) => {
455
- i("sendMediaState"), await this.sipConnector.sendMediaState({ cam: n, mic: t });
870
+ i("sendMediaState"), await this.sipConnector.sendMediaState({ cam: e, mic: t });
456
871
  };
457
- replaceMediaStream = async (n, {
872
+ replaceMediaStream = async (e, {
458
873
  deleteExisting: t,
459
- addMissing: o,
874
+ addMissing: r,
460
875
  forceRenegotiation: s,
461
- contentHint: r,
876
+ contentHint: o,
462
877
  simulcastEncodings: c,
463
878
  degradationPreference: a,
464
- sendEncodings: u
465
- } = {}) => {
466
- const l = P(
879
+ sendEncodings: d
880
+ }) => {
881
+ const l = D(
467
882
  {
468
883
  degradationPreference: a
469
884
  },
@@ -472,15 +887,15 @@ class bn {
472
887
  excludeMimeTypesVideoCodecs: this.excludeMimeTypesVideoCodecs
473
888
  }
474
889
  );
475
- return i("replaceMediaStream"), this.sipConnector.replaceMediaStream(n, {
890
+ return i("replaceMediaStream"), this.sipConnector.replaceMediaStream(e, {
476
891
  deleteExisting: t,
477
- addMissing: o,
892
+ addMissing: r,
478
893
  forceRenegotiation: s,
479
- contentHint: r,
480
- sendEncodings: D({
481
- mediaStream: n,
894
+ contentHint: o,
895
+ sendEncodings: w({
896
+ mediaStream: e,
482
897
  simulcastEncodings: c,
483
- sendEncodings: u
898
+ sendEncodings: d
484
899
  }),
485
900
  onAddedTransceiver: l
486
901
  });
@@ -489,324 +904,44 @@ class bn {
489
904
  i("askPermissionToEnableCam"), await this.sipConnector.askPermissionToEnableCam();
490
905
  };
491
906
  resolveHandleReadyRemoteStreamsDebounced = ({
492
- onReadyRemoteStreams: n
493
- }) => de(() => {
907
+ onReadyRemoteStreams: e
908
+ }) => le(() => {
494
909
  const t = this.sipConnector.getRemoteStreams();
495
- i("remoteStreams", t), t && n(t);
910
+ i("remoteStreams", t), t && e(t);
496
911
  }, 200);
497
- // eslint-disable-next-line class-methods-use-this
912
+ // eslint-disable-next-line @typescript-eslint/class-methods-use-this
498
913
  resolveHandleReadyRemoteStreams = ({
499
- onReadyRemoteStreams: n
914
+ onReadyRemoteStreams: e
500
915
  }) => ({ track: t }) => {
501
- Ue(t) && n();
916
+ pn(t) && e();
502
917
  };
503
918
  getRemoteStreams = () => (i("getRemoteStreams"), this.sipConnector.getRemoteStreams());
504
- onUseLicense = (n) => (i("onUseLicense"), this.sipConnector.on("api:useLicense", n));
505
- onMustStopPresentation = (n) => (i("onMustStopPresentation"), this.sipConnector.on("api:mustStopPresentation", n));
506
- onMoveToSpectators = (n) => (i("onMoveToSpectators"), this.sipConnector.on("api:participant:move-request-to-spectators", n));
507
- onMoveToParticipants = (n) => (i("onMoveToParticipants"), this.sipConnector.on("api:participant:move-request-to-participants", n));
508
- }
509
- const V = (e) => {
510
- const { url: n, cause: t } = e;
511
- let o = n;
512
- return (t === y.BAD_MEDIA_DESCRIPTION || t === y.NOT_FOUND) && (o = `${e.message.to.uri.user}@${e.message.to.uri.host}`), o;
513
- };
514
- var re = /* @__PURE__ */ ((e) => (e.CONNECT_SERVER_FAILED = "CONNECT_SERVER_FAILED", e.WRONG_USER_OR_PASSWORD = "WRONG_USER_OR_PASSWORD", e.BAD_MEDIA_ERROR = "BAD_MEDIA_ERROR", e.NOT_FOUND_ERROR = "NOT_FOUND_ERROR", e.WS_CONNECTION_FAILED = "WS_CONNECTION_FAILED", e.CONNECT_SERVER_FAILED_BY_LINK = "CONNECT_SERVER_FAILED_BY_LINK", e))(re || {});
515
- const Ve = new Error("Unknown error"), Le = (e = Ve) => {
516
- const { cause: n, socket: t } = e;
517
- let o = "CONNECT_SERVER_FAILED";
518
- switch (n) {
519
- case "Forbidden": {
520
- o = "WRONG_USER_OR_PASSWORD";
521
- break;
522
- }
523
- case y.BAD_MEDIA_DESCRIPTION: {
524
- o = "BAD_MEDIA_ERROR";
525
- break;
526
- }
527
- case y.NOT_FOUND: {
528
- o = "NOT_FOUND_ERROR";
529
- break;
530
- }
531
- default:
532
- t !== void 0 && t._ws?.readyState === 3 ? o = "WS_CONNECTION_FAILED" : V(e) !== void 0 && V(e) !== "" && (o = "CONNECT_SERVER_FAILED_BY_LINK");
533
- }
534
- return o;
535
- }, He = (e) => {
536
- let n = "";
537
- try {
538
- n = JSON.stringify(e);
539
- } catch (t) {
540
- i("failed to stringify message", t);
541
- }
542
- return n;
543
- }, $e = new Error("Unknown error"), Je = (e = $e) => {
544
- const { code: n, cause: t, message: o } = e, s = V(e), r = { code: "", cause: "", message: "" };
545
- return typeof o == "object" && o !== null ? r.message = He(o) : o && (r.message = String(o)), s !== void 0 && s !== "" && (r.link = s), n !== void 0 && n !== "" && (r.code = n), t !== void 0 && t !== "" && (r.cause = t), r;
546
- }, Xe = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
547
- __proto__: null,
548
- EErrorTypes: re,
549
- getLinkError: V,
550
- getTypeFromError: Le,
551
- getValuesFromError: Je
552
- }, Symbol.toStringTag, { value: "Module" })), We = ({
553
- sessionId: e,
554
- remoteAddress: n,
555
- isMutedAudio: t,
556
- isMutedVideo: o,
557
- isRegistered: s,
558
- isPresentationCall: r
559
- }) => {
560
- const c = [], a = t ? "0" : "1", u = o ? "0" : "1";
561
- return c.push(`X-Vinteo-Mic-State: ${a}`, `X-Vinteo-MainCam-State: ${u}`), (s === !1 || s === void 0) && c.push("X-Vinteo-Purgatory-Call: yes"), e !== void 0 && e !== "" && c.push(`X-Vinteo-Session: ${e}`), r === !0 && c.push("X-Vinteo-Presentation-Call: yes"), n !== void 0 && n !== "" && c.push(`X-Vinteo-Remote: ${n}`), c;
562
- }, je = "[@*!|]", Ge = "_", Ke = (e) => {
563
- let n = e;
564
- return n = n.replaceAll(new RegExp(je, "g"), Ge), n;
565
- }, Ye = ({
566
- appName: e,
567
- appVersion: n,
568
- browserName: t,
569
- browserVersion: o
570
- }) => {
571
- const r = `${Ke(e)} ${n}`;
572
- return `ChromeNew - ${t === void 0 ? r : `${t} ${o}, ${r}`}`;
573
- }, qe = ({
574
- isUnifiedSdpSemantic: e,
575
- appVersion: n,
576
- browserName: t,
577
- browserVersion: o,
578
- appName: s
579
- }) => e ? Ye({ appVersion: n, browserName: t, browserVersion: o, appName: s }) : "Chrome", ze = (e) => (n) => [...n].map((o) => async () => e(o)), Qe = async ({
580
- accumulatedKeys: e,
581
- sendKey: n,
582
- canRunTask: t
583
- }) => {
584
- const s = ze(n)(e);
585
- return le(s, t);
586
- }, Ze = (e) => (t) => (i("onStartMainCam"), e.on("api:admin-start-main-cam", t)), en = (e) => (t) => (i("onStartMic"), e.on("api:admin-start-mic", t)), nn = (e) => (t) => (i("onStopMainCam"), e.on("api:admin-stop-main-cam", t)), tn = (e) => (t) => (i("onStopMic"), e.on("api:admin-stop-mic", t)), on = ({ sipConnector: e }) => {
587
- const n = (g, R) => ({ isSyncForced: C }) => {
588
- if (C === !0) {
589
- g();
590
- return;
591
- }
592
- R();
593
- }, t = Ze(e), o = nn(e), s = en(e), r = tn(e);
594
- let c, a, u, l;
595
- const h = ({
596
- onStartMainCamForced: g,
597
- onStartMainCamNotForced: R,
598
- onStopMainCamForced: C,
599
- onStopMainCamNotForced: S,
600
- onStartMicForced: p,
601
- onStartMicNotForced: E,
602
- onStopMicForced: T,
603
- onStopMicNotForced: v
604
- }) => {
605
- const _ = n(
606
- g,
607
- R
608
- );
609
- c = t(_);
610
- const A = n(
611
- C,
612
- S
613
- );
614
- a = o(A);
615
- const O = n(p, E);
616
- u = s(O);
617
- const N = n(T, v);
618
- l = r(N);
619
- }, f = () => {
620
- c?.(), a?.(), u?.(), l?.();
621
- };
622
- return {
623
- start: (g) => {
624
- h(g);
625
- },
626
- stop: () => {
627
- f();
628
- }
919
+ onUseLicense = (e) => (i("onUseLicense"), this.sipConnector.on("api:useLicense", e));
920
+ onMustStopPresentation = (e) => (i("onMustStopPresentation"), this.sipConnector.on("api:mustStopPresentation", e));
921
+ onMoveToSpectators = (e) => (i("onMoveToSpectators"), this.sipConnector.on("api:participant:move-request-to-spectators", e));
922
+ onMoveToParticipants = (e) => (i("onMoveToParticipants"), this.sipConnector.on("api:participant:move-request-to-participants", e));
923
+ onStats = (e) => (i("onStats"), this.sipConnector.on("stats:collected", e));
924
+ offStats = (e) => {
925
+ i("offStats"), this.sipConnector.off("stats:collected", e);
629
926
  };
630
- }, _n = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
631
- __proto__: null,
632
- PURGATORY_CONFERENCE_NUMBER: se,
633
- createSyncMediaState: on,
634
- error: Xe,
635
- getExtraHeaders: We,
636
- getUserAgent: qe,
637
- hasPurgatory: I,
638
- sendDtmfAccumulated: Qe
639
- }, Symbol.toStringTag, { value: "Module" }));
640
- var sn = /* @__PURE__ */ ((e) => (e.VP8 = "video/VP8", e.VP9 = "video/VP9", e.H264 = "video/H264", e.AV1 = "video/AV1", e.rtx = "video/rtx", e.red = "video/red", e.flexfec03 = "video/flexfec-03", e))(sn || {});
641
- const rn = (e) => [...e.keys()].map((n) => e.get(n)), cn = (e, n) => rn(e).find((t) => t?.type === n), an = async (e) => e.getStats().then((n) => cn(n, "codec")?.mimeType), un = (e) => e.find((n) => n.track?.kind === "video"), dn = async (e, n, t) => {
642
- const { isChanged: o, parameters: s } = await Q(e, {
643
- encodings: [
644
- {
645
- scaleResolutionDownBy: n.scaleResolutionDownBy,
646
- maxBitrate: n.maxBitrate
647
- }
648
- ]
649
- });
650
- return o && t && t(s), { isChanged: o, parameters: s };
651
- }, ie = fe(), ln = async () => ie().catch((e) => {
652
- i("videoSendingBalancer: error", e);
653
- }), fn = async (e) => (ie.add(e), ln()), j = async ({
654
- sender: e,
655
- scaleResolutionDownBy: n,
656
- maxBitrate: t,
657
- onSetParameters: o
658
- }) => fn(async () => dn(e, { scaleResolutionDownBy: n, maxBitrate: t }, o)), hn = async ({ sender: e, codec: n }, t) => {
659
- const s = Be(n);
660
- return j({
661
- sender: e,
662
- maxBitrate: s,
663
- onSetParameters: t,
664
- scaleResolutionDownBy: 200
665
- });
666
- }, k = async ({
667
- sender: e,
668
- videoTrack: n,
669
- codec: t
670
- }, o) => {
671
- const c = n.getSettings().width, a = c === void 0 ? we(t) : te(c, t);
672
- return j({
673
- sender: e,
674
- maxBitrate: a,
675
- onSetParameters: o,
676
- scaleResolutionDownBy: 1
677
- });
678
- }, gn = async ({
679
- sender: e,
680
- videoTrack: n,
681
- resolution: t,
682
- codec: o
683
- }, s) => {
684
- const [r, c] = t.split("x"), { maxBitrate: a, scaleResolutionDownBy: u } = oe({
685
- videoTrack: n,
686
- codec: o,
687
- targetSize: {
688
- width: Number(r),
689
- height: Number(c)
690
- }
691
- });
692
- return j({
693
- sender: e,
694
- maxBitrate: a,
695
- onSetParameters: s,
696
- scaleResolutionDownBy: u
697
- });
698
- }, Cn = async ({
699
- mainCam: e,
700
- resolutionMainCam: n,
701
- sender: t,
702
- videoTrack: o,
703
- codec: s
704
- }, r) => {
705
- switch (e) {
706
- case w.PAUSE_MAIN_CAM:
707
- return hn({ sender: t, codec: s }, r);
708
- case w.RESUME_MAIN_CAM:
709
- return k({ sender: t, videoTrack: o, codec: s }, r);
710
- case w.MAX_MAIN_CAM_RESOLUTION:
711
- return n !== void 0 ? gn(
712
- { sender: t, videoTrack: o, codec: s, resolution: n },
713
- r
714
- ) : k({ sender: t, videoTrack: o, codec: s }, r);
715
- case w.ADMIN_STOP_MAIN_CAM:
716
- case w.ADMIN_START_MAIN_CAM:
717
- case void 0:
718
- return k({ sender: t, videoTrack: o, codec: s }, r);
719
- default:
720
- return k({ sender: t, videoTrack: o, codec: s }, r);
721
- }
722
- }, G = {
723
- isChanged: !1,
724
- parameters: {
725
- encodings: [{}],
726
- transactionId: "0",
727
- codecs: [],
728
- headerExtensions: [],
729
- rtcp: {}
730
- }
731
- }, K = async ({
732
- mainCam: e,
733
- resolutionMainCam: n,
734
- connection: t,
735
- onSetParameters: o,
736
- ignoreForCodec: s
737
- }) => {
738
- const r = t.getSenders(), c = un(r);
739
- if (!c?.track)
740
- return G;
741
- const a = await an(c);
742
- return ne(a, s) ? G : Cn(
743
- {
744
- mainCam: e,
745
- resolutionMainCam: n,
746
- sender: c,
747
- codec: a,
748
- videoTrack: c.track
749
- },
750
- o
751
- );
752
- }, An = (e, {
753
- ignoreForCodec: n,
754
- onSetParameters: t
755
- } = {}) => {
756
- const o = async () => {
757
- const { connection: u } = e;
758
- if (!u)
759
- throw new Error("connection is not exist");
760
- return K({
761
- connection: u,
762
- onSetParameters: t,
763
- ignoreForCodec: n
764
- });
765
- };
766
- let s = o;
767
- const r = (u) => {
768
- s = async () => {
769
- const { mainCam: l, resolutionMainCam: h } = u, { connection: f } = e;
770
- if (!f)
771
- throw new Error("connection is not exist");
772
- return K({
773
- mainCam: l,
774
- resolutionMainCam: h,
775
- connection: f,
776
- onSetParameters: t,
777
- ignoreForCodec: n
778
- });
779
- }, s().catch(x);
780
- };
781
- return {
782
- subscribe: () => {
783
- e.on("api:main-cam-control", r);
784
- },
785
- unsubscribe: () => {
786
- e.off("api:main-cam-control", r);
787
- },
788
- balanceByTrack: o,
789
- resetMainCamControl() {
790
- s = o;
791
- },
792
- async reBalance() {
793
- return s();
794
- }
795
- };
796
- };
927
+ }
928
+ var yn = /* @__PURE__ */ ((n) => (n.VP8 = "video/VP8", n.VP9 = "video/VP9", n.H264 = "video/H264", n.AV1 = "video/AV1", n.rtx = "video/rtx", n.red = "video/red", n.flexfec03 = "video/flexfec-03", n))(yn || {});
797
929
  export {
798
- y as ECallCause,
799
- sn as EMimeTypesVideoCodecs,
800
- Bn as EUseLicense,
801
- wn as SipConnector,
802
- bn as SipConnectorFacade,
803
- Fn as debug,
804
- Dn as disableDebug,
805
- Pn as enableDebug,
806
- an as getCodecFromSender,
807
- Mn as hasCanceledCallError,
808
- xn as hasCanceledStartPresentationError,
809
- An as resolveVideoSendingBalancer,
810
- Q as setParametersToSender,
811
- _n as tools
930
+ R as ECallCause,
931
+ yn as EMimeTypesVideoCodecs,
932
+ xn as EStatsTypes,
933
+ Un as EUseLicense,
934
+ Vn as SipConnector,
935
+ kn as SipConnectorFacade,
936
+ Ln as StatsPeerConnection,
937
+ ln as VideoSendingBalancer,
938
+ Jn as debug,
939
+ Hn as disableDebug,
940
+ $n as enableDebug,
941
+ tn as getCodecFromSender,
942
+ wn as hasAvailableStats,
943
+ Pn as hasCanceledCallError,
944
+ Wn as hasCanceledStartPresentationError,
945
+ Dn as resolveVideoSendingBalancer,
946
+ On as tools
812
947
  };