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