sip-connector 14.1.0-alpha.10 → 14.1.0-alpha.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/doMock.js CHANGED
@@ -1,12 +1,12 @@
1
- import { O as v, S as D } from "./@SipConnector-D4tn0Ep5.js";
1
+ import { O as D, S as L } from "./@SipConnector-C-ThpS1P.js";
2
2
  import y from "@krivega/jssip/lib/NameAddrHeader";
3
- import L from "@krivega/jssip/lib/URI";
4
- import { EventEmitter as F } from "node:events";
5
- import { IncomingRequest as b } from "@krivega/jssip/lib/SIPMessage";
6
- import { NameAddrHeader as V, URI as E, C as S } from "@krivega/jssip";
7
- import { createAudioMediaStreamTrackMock as k, createVideoMediaStreamTrackMock as W } from "webrtc-mock";
8
- import R from "events-constructor";
9
- class _ extends b {
3
+ import F from "@krivega/jssip/lib/URI";
4
+ import { EventEmitter as b } from "node:events";
5
+ import { IncomingRequest as V } from "@krivega/jssip/lib/SIPMessage";
6
+ import { NameAddrHeader as k, URI as E, C as N } from "@krivega/jssip";
7
+ import { createAudioMediaStreamTrackMock as W, createVideoMediaStreamTrackMock as U } from "webrtc-mock";
8
+ import { Events as _ } from "events-constructor";
9
+ class T extends V {
10
10
  headers;
11
11
  constructor(e) {
12
12
  super(), this.headers = new Headers(e);
@@ -15,34 +15,33 @@ class _ extends b {
15
15
  return this.headers.get(e) ?? "";
16
16
  }
17
17
  }
18
- const U = "incomingCall", G = "declinedIncomingCall", H = "failedIncomingCall", x = "terminatedIncomingCall", M = "connecting", q = "connected", Y = "disconnected", j = "newRTCSession", z = "registered", B = "unregistered", J = "registrationFailed", K = "newMessage", $ = "sipEvent", Q = "availableSecondRemoteStream", X = "notAvailableSecondRemoteStream", Z = "mustStopPresentation", ee = "shareState", te = "enterRoom", re = "useLicense", ne = "peerconnection:confirmed", oe = "peerconnection:ontrack", se = "channels", ie = "channels:notify", ae = "ended:fromserver", ce = "main-cam-control", de = "admin-stop-main-cam", Ee = "admin-start-main-cam", he = "admin-stop-mic", me = "admin-start-mic", le = "admin-force-sync-media-state", ue = "participant:added-to-list-moderators", pe = "participant:removed-from-list-moderators", ge = "participant:move-request-to-stream", _e = "participant:move-request-to-spectators", Te = "participant:move-request-to-participants", Ie = "participation:accepting-word-request", we = "participation:cancelling-word-request", Se = "webcast:started", Ne = "webcast:stopped", fe = "account:changed", Ce = "account:deleted", Re = "conference:participant-token-issued", Me = "ended", Ae = "sending", Oe = "reinvite", Pe = "replaces", ve = "refer", De = "progress", ye = "accepted", Le = "confirmed", Fe = "peerconnection", be = "failed", Ve = "muted", ke = "unmuted", We = "newDTMF", Ue = "newInfo", Ge = "hold", He = "unhold", xe = "update", qe = "sdp", Ye = "icecandidate", je = "getusermediafailed", ze = "peerconnection:createofferfailed", Be = "peerconnection:createanswerfailed", Je = "peerconnection:setlocaldescriptionfailed", Ke = "peerconnection:setremotedescriptionfailed", $e = "presentation:start", Qe = "presentation:started", Xe = "presentation:end", Ze = "presentation:ended", et = "presentation:failed", tt = [
19
- U,
18
+ const G = "incomingCall", H = "declinedIncomingCall", x = "failedIncomingCall", q = "terminatedIncomingCall", A = "connecting", Y = "connected", j = "disconnected", z = "newRTCSession", B = "registered", $ = "unregistered", J = "registrationFailed", K = "newMessage", Q = "sipEvent", X = "availableSecondRemoteStream", Z = "notAvailableSecondRemoteStream", ee = "mustStopPresentation", te = "shareState", re = "enterRoom", ne = "useLicense", oe = "peerconnection:confirmed", se = "peerconnection:ontrack", ie = "channels", ae = "channels:notify", ce = "ended:fromserver", de = "main-cam-control", Ee = "admin-stop-main-cam", he = "admin-start-main-cam", me = "admin-stop-mic", le = "admin-start-mic", ue = "admin-force-sync-media-state", pe = "participant:added-to-list-moderators", ge = "participant:removed-from-list-moderators", _e = "participant:move-request-to-stream", Te = "participant:move-request-to-spectators", Ie = "participant:move-request-to-participants", we = "participation:accepting-word-request", Se = "participation:cancelling-word-request", Ne = "webcast:started", fe = "webcast:stopped", Ce = "account:changed", Re = "account:deleted", Me = "conference:participant-token-issued", Ae = "ended", Oe = "sending", Pe = "reinvite", ve = "replaces", De = "refer", Le = "progress", ye = "accepted", Fe = "confirmed", be = "peerconnection", Ve = "failed", ke = "muted", We = "unmuted", Ue = "newDTMF", Ge = "newInfo", He = "hold", xe = "unhold", qe = "update", Ye = "sdp", je = "icecandidate", ze = "getusermediafailed", Be = "peerconnection:createofferfailed", $e = "peerconnection:createanswerfailed", Je = "peerconnection:setlocaldescriptionfailed", Ke = "peerconnection:setremotedescriptionfailed", Qe = "presentation:start", Xe = "presentation:started", Ze = "presentation:end", et = "presentation:ended", tt = "presentation:failed", rt = [
20
19
  G,
21
- x,
22
20
  H,
23
- Ie,
21
+ q,
22
+ x,
24
23
  we,
25
- ge,
26
- ie,
27
- Re,
28
- fe,
29
- Ce,
30
24
  Se,
25
+ _e,
26
+ ae,
27
+ Me,
28
+ Ce,
29
+ Re,
31
30
  Ne,
32
- ue,
33
- pe
34
- ], A = [
35
- M,
36
- q,
31
+ fe,
32
+ pe,
33
+ ge
34
+ ], O = [
35
+ A,
37
36
  Y,
38
37
  j,
39
38
  z,
40
39
  B,
40
+ $,
41
41
  J,
42
42
  K,
43
- $
44
- ], rt = [
45
- Q,
43
+ Q
44
+ ], nt = [
46
45
  X,
47
46
  Z,
48
47
  ee,
@@ -51,25 +50,25 @@ const U = "incomingCall", G = "declinedIncomingCall", H = "failedIncomingCall",
51
50
  ne,
52
51
  oe,
53
52
  se,
54
- ae,
53
+ ie,
55
54
  ce,
56
- Ee,
57
55
  de,
58
56
  he,
57
+ Ee,
59
58
  me,
60
59
  le,
61
- _e,
62
- Te
63
- ], nt = [
64
- Me,
65
- M,
60
+ ue,
61
+ Te,
62
+ Ie
63
+ ], p = [
66
64
  Ae,
65
+ A,
67
66
  Oe,
68
67
  Pe,
69
68
  ve,
70
69
  De,
71
- ye,
72
70
  Le,
71
+ ye,
73
72
  Fe,
74
73
  be,
75
74
  Ve,
@@ -84,20 +83,21 @@ const U = "incomingCall", G = "declinedIncomingCall", H = "failedIncomingCall",
84
83
  je,
85
84
  ze,
86
85
  Be,
86
+ $e,
87
87
  Je,
88
88
  Ke,
89
- $e,
90
89
  Qe,
91
90
  Xe,
92
91
  Ze,
93
- et
92
+ et,
93
+ tt
94
94
  ];
95
- [...A, ...tt];
96
- const ot = [
97
- ...nt,
98
- ...rt
95
+ [...O, ...rt];
96
+ [
97
+ ...p,
98
+ ...nt
99
99
  ];
100
- class st {
100
+ class ot {
101
101
  originator;
102
102
  connection;
103
103
  events;
@@ -108,7 +108,7 @@ class st {
108
108
  eventHandlers: t,
109
109
  remoteIdentity: r
110
110
  }) {
111
- this.originator = e, this.events = new R(ot), this.initEvents(t), this.remote_identity = r;
111
+ this.originator = e, this.events = new _(p), this.initEvents(t), this.remote_identity = r;
112
112
  }
113
113
  get contact() {
114
114
  throw new Error("Method not implemented.");
@@ -236,12 +236,14 @@ class st {
236
236
  throw new Error("Method not implemented.");
237
237
  }
238
238
  initEvents(e) {
239
- e && Object.entries(e).forEach(([t, r]) => this.on(t, r));
239
+ e && Object.entries(e).forEach(([t, r]) => {
240
+ this.on(t, r);
241
+ });
240
242
  }
241
243
  // @ts-expect-error
242
244
  // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters
243
245
  on(e, t) {
244
- return this.events.on(e, t), this;
246
+ return p.includes(e) && this.events.on(e, t), this;
245
247
  }
246
248
  trigger(e, t) {
247
249
  this.events.trigger(e, t);
@@ -266,7 +268,7 @@ class st {
266
268
  return !0;
267
269
  }
268
270
  }
269
- class it {
271
+ class st {
270
272
  dtmf = null;
271
273
  track = null;
272
274
  transport = null;
@@ -309,6 +311,7 @@ class it {
309
311
  throw new Error("Method not implemented.");
310
312
  }
311
313
  }
314
+ const it = ["track"];
312
315
  class at {
313
316
  senders = [];
314
317
  receivers = [];
@@ -338,8 +341,9 @@ class at {
338
341
  // eslint-disable-next-line unicorn/no-null
339
342
  sctp = null;
340
343
  signalingState;
344
+ events;
341
345
  constructor(e, t) {
342
- this.receivers = t.map((r) => ({ track: r }));
346
+ this.events = new _(it), this.receivers = t.map((r) => ({ track: r }));
343
347
  }
344
348
  getRemoteStreams() {
345
349
  throw new Error("Method not implemented.");
@@ -390,10 +394,10 @@ class at {
390
394
  throw new Error("Method not implemented.");
391
395
  }
392
396
  addEventListener(e, t, r) {
393
- console.warn("Method not implemented. Type:", e);
397
+ this.events.on(e, t);
394
398
  }
395
399
  removeEventListener(e, t, r) {
396
- console.warn("Method not implemented. Type:", e);
400
+ this.events.off(e, t);
397
401
  }
398
402
  dispatchEvent(e) {
399
403
  throw new Error("Method not implemented.");
@@ -401,8 +405,8 @@ class at {
401
405
  getReceivers = () => this.receivers;
402
406
  getSenders = () => this.senders;
403
407
  addTrack = (e) => {
404
- const t = new it({ track: e });
405
- return this.senders.push(t), t;
408
+ const t = new st({ track: e });
409
+ return this.senders.push(t), this.events.trigger("track", { track: e }), t;
406
410
  };
407
411
  }
408
412
  function ct(n) {
@@ -411,8 +415,8 @@ function ct(n) {
411
415
  throw new Error("wrong sip url");
412
416
  return e[0];
413
417
  }
414
- const u = 400, dt = "777", Et = (n) => n.getVideoTracks().length > 0;
415
- class s extends st {
418
+ const f = 400, dt = "777", Et = (n) => n.getVideoTracks().length > 0;
419
+ class i extends ot {
416
420
  static presentationError;
417
421
  static startPresentationError;
418
422
  static countStartPresentationError = Number.POSITIVE_INFINITY;
@@ -437,23 +441,21 @@ class s extends st {
437
441
  }, 100), setTimeout(() => {
438
442
  this.trigger("confirmed");
439
443
  }, 200);
440
- }, u);
444
+ }, f);
441
445
  });
442
446
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
443
447
  replaceMediaStream = jest.fn(async (e) => {
444
448
  });
445
449
  isEndedInner = !1;
446
450
  constructor({
447
- url: e = "",
448
- mediaStream: t,
449
- eventHandlers: r,
450
- originator: i,
451
- remoteIdentity: a = new V(
451
+ eventHandlers: e,
452
+ originator: t,
453
+ remoteIdentity: r = new k(
452
454
  new E("sip", "caller1", "test1.com", 5060),
453
455
  "Test Caller 1"
454
456
  )
455
457
  }) {
456
- super({ originator: i, eventHandlers: r, remoteIdentity: a }), this.url = e, this.initPeerconnection(t);
458
+ super({ originator: t, eventHandlers: e, remoteIdentity: r });
457
459
  }
458
460
  static setPresentationError(e) {
459
461
  this.presentationError = e;
@@ -468,45 +470,43 @@ class s extends st {
468
470
  this.startPresentationError = void 0, this.countStartPresentationError = Number.POSITIVE_INFINITY, this.countStartsPresentation = 0;
469
471
  }
470
472
  startPresentation = async (e) => {
471
- if (s.countStartsPresentation += 1, s.presentationError)
472
- throw this.trigger("presentation:start", e), this.trigger("presentation:failed", e), s.presentationError;
473
- if (s.startPresentationError && s.countStartsPresentation < s.countStartPresentationError)
474
- throw this.trigger("presentation:start", e), this.trigger("presentation:failed", e), s.startPresentationError;
473
+ if (i.countStartsPresentation += 1, i.presentationError)
474
+ throw this.trigger("presentation:start", e), this.trigger("presentation:failed", e), i.presentationError;
475
+ if (i.startPresentationError && i.countStartsPresentation < i.countStartPresentationError)
476
+ throw this.trigger("presentation:start", e), this.trigger("presentation:failed", e), i.startPresentationError;
475
477
  return super.startPresentation(e);
476
478
  };
477
479
  stopPresentation = async (e) => {
478
- if (s.presentationError)
479
- throw this.trigger("presentation:end", e), this.trigger("presentation:failed", e), s.presentationError;
480
+ if (i.presentationError)
481
+ throw this.trigger("presentation:end", e), this.trigger("presentation:failed", e), i.presentationError;
480
482
  return super.stopPresentation(e);
481
483
  };
482
484
  initPeerconnection(e) {
483
485
  return e ? (this.createPeerconnection(e), !0) : !1;
484
486
  }
485
487
  createPeerconnection(e) {
486
- const t = k();
488
+ const t = W();
487
489
  t.id = "mainaudio1";
488
490
  const r = [t];
489
491
  if (Et(e)) {
490
- const a = W();
492
+ const a = U();
491
493
  a.id = "mainvideo1", r.push(a);
492
494
  }
493
- this.connection = new at(void 0, r), this.addStream(e), setTimeout(() => {
494
- this.trigger("peerconnection", { peerconnection: this.connection });
495
- }, u);
496
- }
497
- connect(e) {
498
- const t = ct(e);
499
- setTimeout(() => {
500
- this.url.includes(dt) ? this.trigger("failed", {
495
+ this.connection = new at(void 0, r), this.addStream(e), this.trigger("peerconnection", { peerconnection: this.connection });
496
+ }
497
+ connect(e, { mediaStream: t } = {}) {
498
+ const r = ct(e);
499
+ return this.initPeerconnection(t), setTimeout(() => {
500
+ e.includes(dt) ? this.trigger("failed", {
501
501
  originator: "remote",
502
502
  message: "IncomingResponse",
503
503
  cause: "Rejected"
504
504
  }) : (this.trigger("connecting"), setTimeout(() => {
505
505
  this.newInfo({
506
- originator: v.REMOTE,
506
+ originator: D.REMOTE,
507
507
  // @ts-expect-error
508
508
  request: {
509
- getHeader: (r) => r === "content-type" ? "application/vinteo.webrtc.roomname" : r === "x-webrtc-enter-room" ? t : r === "x-webrtc-participant-name" ? "Test Caller 1" : ""
509
+ getHeader: (s) => s === "content-type" ? "application/vinteo.webrtc.roomname" : s === "x-webrtc-enter-room" ? r : s === "x-webrtc-participant-name" ? "Test Caller 1" : ""
510
510
  }
511
511
  });
512
512
  }, 100), setTimeout(() => {
@@ -514,7 +514,7 @@ class s extends st {
514
514
  }, 200), setTimeout(() => {
515
515
  this.trigger("confirmed");
516
516
  }, 300));
517
- }, u);
517
+ }, f), this.connection;
518
518
  }
519
519
  terminate({ status_code: e, cause: t } = {}) {
520
520
  return this.status_code = e, this.trigger("ended", { status_code: e, cause: t, originator: "local" }), this.isEndedInner = !1, this;
@@ -585,14 +585,14 @@ class ht {
585
585
  setExtraContactParams() {
586
586
  }
587
587
  }
588
- const c = "PASSWORD_CORRECT", N = "PASSWORD_CORRECT_2", mt = "NAME_INCORRECT", d = 400, p = {
588
+ const c = "PASSWORD_CORRECT", C = "PASSWORD_CORRECT_2", mt = "NAME_INCORRECT", d = 400, u = {
589
589
  url: "wss://sipServerUrl/webrtc/wss/",
590
590
  sip_uri: "sip:sipServerUrl;transport=ws",
591
591
  via_transport: "WSS"
592
- }, f = {
592
+ }, R = {
593
593
  status_code: 200,
594
594
  reason_phrase: "OK"
595
- }, C = {
595
+ }, M = {
596
596
  status_code: 401,
597
597
  reason_phrase: "Unauthorized"
598
598
  };
@@ -606,8 +606,8 @@ class o {
606
606
  // @ts-expect-error – Jest создаёт функцию-замок.
607
607
  call = jest.fn(
608
608
  (e, t) => {
609
- const { mediaStream: r, eventHandlers: i } = t;
610
- return this.session = new s({ url: e, mediaStream: r, eventHandlers: i, originator: "local" }), this.session.connect(e), this.session;
609
+ const { mediaStream: r, eventHandlers: s } = t;
610
+ return this.session = new i({ eventHandlers: s, originator: "local" }), this.session.connect(e, { mediaStream: r }), this.session;
611
611
  }
612
612
  );
613
613
  sendOptions = jest.fn(
@@ -630,8 +630,8 @@ class o {
630
630
  */
631
631
  stop = jest.fn(() => {
632
632
  this.startedTimeout && clearTimeout(this.startedTimeout), this.stopedTimeout && clearTimeout(this.stopedTimeout), this.unregister(), this.isStarted() ? this.stopedTimeout = setTimeout(() => {
633
- this.trigger("disconnected", { error: !0, socket: p });
634
- }, d) : this.trigger("disconnected", { error: !0, socket: p });
633
+ this.trigger("disconnected", { error: !0, socket: u });
634
+ }, d) : this.trigger("disconnected", { error: !0, socket: u });
635
635
  });
636
636
  removeAllListeners = jest.fn(() => (this.events.removeEventHandlers(), this));
637
637
  once = jest.fn((e, t) => (this.events.once(e, t), this));
@@ -642,10 +642,10 @@ class o {
642
642
  isConnectedInner;
643
643
  configuration;
644
644
  constructor(e) {
645
- this.events = new R(A);
646
- const [t, r] = e.uri.split(":"), [i, a] = r.split("@"), l = {
645
+ this.events = new _(O);
646
+ const [t, r] = e.uri.split(":"), [s, a] = r.split("@"), l = {
647
647
  ...e,
648
- uri: new E(t, i, a)
648
+ uri: new E(t, s, a)
649
649
  };
650
650
  this.configuration = l, this.registratorInner = new ht();
651
651
  }
@@ -693,12 +693,12 @@ class o {
693
693
  this.startedTimeout && clearTimeout(this.startedTimeout);
694
694
  const { password: e, register: t, uri: r } = this.configuration;
695
695
  t === !0 && r.user.includes(mt) ? (this.isRegisteredInner = !1, this.isConnectedInner = !1, this.startedTimeout = setTimeout(() => {
696
- this.trigger("registrationFailed", { response: C, cause: S.causes.REJECTED });
697
- }, d)) : !this.isRegistered() && t === !0 && (e === c || e === N) ? (this.isRegisteredInner = !0, this.startedTimeout = setTimeout(() => {
698
- this.trigger("registered", { response: f });
699
- }, d)) : t === !0 && e !== c && e !== N && (this.isRegisteredInner = !1, this.isConnectedInner = !1, this.startedTimeout = setTimeout(() => {
700
- this.trigger("registrationFailed", { response: C, cause: S.causes.REJECTED });
701
- }, d)), o.isAvailableTelephony ? (this.trigger("connected", { socket: p }), this.isConnectedInner = !0) : this.stop();
696
+ this.trigger("registrationFailed", { response: M, cause: N.causes.REJECTED });
697
+ }, d)) : !this.isRegistered() && t === !0 && (e === c || e === C) ? (this.isRegisteredInner = !0, this.startedTimeout = setTimeout(() => {
698
+ this.trigger("registered", { response: R });
699
+ }, d)) : t === !0 && e !== c && e !== C && (this.isRegisteredInner = !1, this.isConnectedInner = !1, this.startedTimeout = setTimeout(() => {
700
+ this.trigger("registrationFailed", { response: M, cause: N.causes.REJECTED });
701
+ }, d)), o.isAvailableTelephony ? (this.trigger("connected", { socket: u }), this.isConnectedInner = !0) : this.stop();
702
702
  }
703
703
  /**
704
704
  * unregister
@@ -706,7 +706,7 @@ class o {
706
706
  * @returns {undefined}
707
707
  */
708
708
  unregister() {
709
- this.isRegisteredInner = !1, this.isConnectedInner = !1, this.trigger("unregistered", { response: f });
709
+ this.isRegisteredInner = !1, this.isConnectedInner = !1, this.trigger("unregistered", { response: R });
710
710
  }
711
711
  isRegistered() {
712
712
  return this.isRegisteredInner === !0;
@@ -735,7 +735,7 @@ class lt {
735
735
  this.url = e;
736
736
  }
737
737
  }
738
- class ut extends F {
738
+ class ut extends b {
739
739
  contentType;
740
740
  body;
741
741
  constructor(e, t) {
@@ -743,31 +743,31 @@ class ut extends F {
743
743
  }
744
744
  }
745
745
  const g = "remote", pt = (n, e) => {
746
- const t = new _(e), r = {
746
+ const t = new T(e), r = {
747
747
  originator: g,
748
748
  request: t,
749
749
  info: new ut("", "")
750
750
  };
751
751
  n.newInfo(r);
752
752
  }, gt = (n, e) => {
753
- const r = { event: "sipEvent", request: new _(e) };
753
+ const r = { event: "sipEvent", request: new T(e) };
754
754
  n.newSipEvent(r);
755
755
  }, _t = (n, {
756
756
  incomingNumber: e = "1234",
757
757
  displayName: t,
758
758
  host: r
759
759
  }) => {
760
- const i = new s({ originator: g, eventHandlers: {} }), a = new L("sip", e, r);
761
- i.remote_identity = new y(a, t);
762
- const l = new _([]);
760
+ const s = new i({ originator: g, eventHandlers: {} }), a = new F("sip", e, r);
761
+ s.remote_identity = new y(a, t);
762
+ const l = new T([]);
763
763
  n.trigger("newRTCSession", {
764
764
  originator: g,
765
- session: i,
765
+ session: s,
766
766
  request: l
767
767
  });
768
768
  }, Tt = (n, e) => {
769
769
  e ? n.trigger("failed", e) : n.trigger("failed", n);
770
- }, O = {
770
+ }, P = {
771
771
  triggerNewInfo: pt,
772
772
  triggerNewSipEvent: gt,
773
773
  triggerIncomingSession: _t,
@@ -777,22 +777,22 @@ const g = "remote", pt = (n, e) => {
777
777
  C: {
778
778
  INVITE: "INVITE"
779
779
  }
780
- }, T = "user", h = "displayName", I = "SIP_SERVER_URL", P = "SIP_WEB_SOCKET_SERVER_URL", It = new O.WebSocketInterface(P), w = {
780
+ }, I = "user", h = "displayName", w = "SIP_SERVER_URL", v = "SIP_WEB_SOCKET_SERVER_URL", It = new P.WebSocketInterface(v), S = {
781
781
  userAgent: "Chrome",
782
- sipServerUrl: I,
783
- sipWebSocketServerURL: P
782
+ sipServerUrl: w,
783
+ sipWebSocketServerURL: v
784
784
  }, vt = {
785
- ...w
785
+ ...S
786
786
  }, wt = {
787
- ...w,
788
- user: T,
787
+ ...S,
788
+ user: I,
789
789
  password: c,
790
790
  register: !0
791
791
  }, Dt = {
792
792
  ...wt,
793
793
  displayName: h
794
- }, yt = {
795
- ...w,
794
+ }, Lt = {
795
+ ...S,
796
796
  displayName: h,
797
797
  register: !1
798
798
  }, m = {
@@ -803,16 +803,16 @@ const g = "remote", pt = (n, e) => {
803
803
  register_expires: 300,
804
804
  connection_recovery_max_interval: 6,
805
805
  connection_recovery_min_interval: 2
806
- }, Lt = {
806
+ }, yt = {
807
807
  ...m,
808
808
  password: c,
809
- uri: new E("sip", T, I),
809
+ uri: new E("sip", I, w),
810
810
  display_name: "",
811
811
  register: !0
812
812
  }, Ft = {
813
813
  ...m,
814
814
  password: c,
815
- uri: new E("sip", T, I),
815
+ uri: new E("sip", I, w),
816
816
  display_name: h,
817
817
  register: !0
818
818
  }, bt = {
@@ -823,28 +823,28 @@ const g = "remote", pt = (n, e) => {
823
823
  ...m,
824
824
  display_name: "",
825
825
  register: !1
826
- }, St = "10.10.10.10", kt = [`X-Vinteo-Remote: ${St}`], Wt = () => new D({
827
- JsSIP: O
826
+ }, St = "10.10.10.10", kt = [`X-Vinteo-Remote: ${St}`], Wt = () => new L({
827
+ JsSIP: P
828
828
  });
829
829
  export {
830
830
  dt as FAILED_CONFERENCE_NUMBER,
831
- O as JsSIP,
831
+ P as JsSIP,
832
832
  mt as NAME_INCORRECT,
833
833
  c as PASSWORD_CORRECT,
834
- N as PASSWORD_CORRECT_2,
835
- I as SIP_SERVER_URL,
836
- P as SIP_WEB_SOCKET_SERVER_URL,
834
+ C as PASSWORD_CORRECT_2,
835
+ w as SIP_SERVER_URL,
836
+ v as SIP_WEB_SOCKET_SERVER_URL,
837
837
  wt as dataForConnectionWithAuthorization,
838
838
  Dt as dataForConnectionWithAuthorizationWithDisplayName,
839
- yt as dataForConnectionWithoutAuthorization,
839
+ Lt as dataForConnectionWithoutAuthorization,
840
840
  vt as dataForConnectionWithoutAuthorizationWithoutDisplayName,
841
841
  h as displayName,
842
842
  Wt as doMockSipConnector,
843
843
  kt as extraHeadersRemoteAddress,
844
844
  St as remoteAddress,
845
- Lt as uaConfigurationWithAuthorization,
845
+ yt as uaConfigurationWithAuthorization,
846
846
  Ft as uaConfigurationWithAuthorizationWithDisplayName,
847
847
  bt as uaConfigurationWithoutAuthorization,
848
848
  Vt as uaConfigurationWithoutAuthorizationWithoutDisplayName,
849
- T as user
849
+ I as user
850
850
  };
package/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require("events-constructor");const i=require("./@SipConnector-Bkm1XX-8.cjs"),W=require("@krivega/cancelable-promise"),ce=require("repeated-calls"),ae=require("ts-debounce"),_=require("debug"),le=require("sequent-promises"),ue=require("stack-promises"),de=e=>e instanceof Object&&("originator"in e||"cause"in e),ge=e=>{if(W.isCanceledError(e))return!0;if(!de(e))return!1;const{originator:n,cause:t}=e;return typeof t=="string"?t===i.ECallCause.REQUEST_TIMEOUT||t===i.ECallCause.REJECTED||n===i.Originator.LOCAL&&(t===i.ECallCause.CANCELED||t===i.ECallCause.BYE):!1},fe=(e,n)=>(e.degradationPreference=n.degradationPreference,e),Ce=(e,n)=>{e.encodings??=[];for(let t=e.encodings.length;t<n;t+=1)e.encodings.push({});return e},G=e=>(n,t)=>t!==void 0&&n!==t||t===void 0&&n!==e,he=G(),Se=(e,n)=>{if(he(e,n))return e},me=(e,n)=>{const t=e.maxBitrate,o=Se(n,t);return o!==void 0&&(e.maxBitrate=o),e},K=1,Re=G(K),ye=(e,n)=>{const t=e===void 0?void 0:Math.max(e,K);if(t!==void 0&&Re(t,n))return t},pe=(e,n)=>{const t=e.scaleResolutionDownBy,o=ye(n,t);return o!==void 0&&(e.scaleResolutionDownBy=o),e},Ee=(e,n)=>{const t=n.encodings?.length??0;return Ce(e,t),e.encodings.forEach((o,r)=>{const s=(n?.encodings??[])[r],c=s?.maxBitrate,a=s?.scaleResolutionDownBy;me(o,c),pe(o,a)}),e},Te=(e,n)=>{if(e.codecs?.length!==n.codecs?.length)return!0;for(let t=0;t<(e.codecs?.length??0);t++)if(JSON.stringify(e.codecs[t])!==JSON.stringify(n.codecs[t]))return!0;if(e.headerExtensions?.length!==n.headerExtensions?.length)return!0;for(let t=0;t<(e.headerExtensions?.length??0);t++)if(JSON.stringify(e.headerExtensions[t])!==JSON.stringify(n.headerExtensions[t]))return!0;if(e.encodings?.length!==n.encodings?.length)return!0;for(let t=0;t<(e.encodings.length??0);t++)if(JSON.stringify(e.encodings[t])!==JSON.stringify(n.encodings[t]))return!0;return e.rtcp?.cname!==n.rtcp?.cname||e.rtcp?.reducedSize!==n.rtcp?.reducedSize||e.degradationPreference!==n.degradationPreference},q=async(e,n)=>{const t=e.getParameters(),o=JSON.parse(JSON.stringify(t));Ee(t,n),fe(t,n);const r=Te(o,t);return r&&await e.setParameters(t),{parameters:t,isChanged:r}},Me=e=>e.getVideoTracks()[0],ve=1e6,m=e=>e*ve,Y=m(.06),be=m(4),_e=e=>e<=64?Y:e<=128?m(.12):e<=256?m(.25):e<=384?m(.32):e<=426?m(.38):e<=640?m(.5):e<=848?m(.7):e<=1280?m(1):e<=1920?m(2):be,z=(e,n)=>e!==void 0&&n!==void 0&&e.toLowerCase().includes(n.toLowerCase()),Ae="av1",Oe=e=>z(e,Ae),Ne=.6,Q=(e,n)=>Oe(n)?e*Ne:e,Be=e=>Q(Y,e),Z=(e,n)=>{const t=_e(e);return Q(t,n)},H=1,ee=({videoTrack:e,targetSize:n,codec:t})=>{const o=e.getSettings(),r=o.width,s=o.height,c=r===void 0?H:r/n.width,a=s===void 0?H:s/n.height,l=Math.max(c,a,H),d=Z(n.width,t);return{scaleResolutionDownBy:l,maxBitrate:d}},w=({mediaStream:e,simulcastEncodings:n,sendEncodings:t})=>{if(n&&n.length>0){const o=t??[],r=Me(e);if(r===void 0)throw new Error("No video track");return n.forEach((s,c)=>{const a=o[c]??{};a.active=!0,s.rid!==void 0&&(a.rid=s.rid),s.scalabilityMode!==void 0&&(a.scalabilityMode=s.scalabilityMode);const{maxBitrate:l,scaleResolutionDownBy:d}=ee({videoTrack:r,targetSize:{width:s.width,height:s.height}});a.maxBitrate=l,a.scaleResolutionDownBy=d,o[c]=a}),o}return t},ne="purgatory",P=e=>e===ne,we=(e,n)=>e.filter(o=>n.some(r=>r.clockRate===o.clockRate&&r.mimeType===o.mimeType&&r.channels===o.channels&&r.sdpFmtpLine===o.sdpFmtpLine)),De=e=>{const n=RTCRtpSender.getCapabilities(e),t=RTCRtpReceiver.getCapabilities(e),o=n===null?[]:n.codecs,r=t===null?[]:t.codecs;return we(o,r)},Pe=(e,n)=>n===void 0||n.length===0?e:e.sort((t,o)=>{const r=n.indexOf(t.mimeType),s=n.indexOf(o.mimeType),c=r===-1?Number.MAX_VALUE:r,a=s===-1?Number.MAX_VALUE:s;return c-a}),Ie=(e,n)=>n===void 0||n.length===0?e:e.filter(t=>!n.includes(t.mimeType)),D=(e,{preferredMimeTypesVideoCodecs:n,excludeMimeTypesVideoCodecs:t})=>async o=>{try{if(typeof o.setCodecPreferences=="function"&&o.sender.track?.kind==="video"&&(n!==void 0&&n.length>0||t!==void 0&&t.length>0)){const r=De("video"),s=Ie(r,t),c=Pe(s,n);o.setCodecPreferences(c)}Object.keys(e).length>0&&await q(o.sender,e)}catch(r){i.logger("updateTransceiver error",r)}},$=e=>{if(!W.isCanceledError(e)&&!ce.hasCanceledError(e))throw e;return{isSuccessful:!1}},xe=({kind:e,readyState:n})=>e==="video"&&n==="live",Fe=new Set(["on","once","onceRace","wait","off","sendDTMF","hangUp","declineToIncomingCall","sendChannels","checkTelephony","waitChannels","ping","connection","isConfigured","isRegistered"]);class ke{on;once;onceRace;wait;off;sendDTMF;hangUp;declineToIncomingCall;sendChannels;checkTelephony;waitChannels;ping;connection;isConfigured;isRegistered;sipConnector;preferredMimeTypesVideoCodecs;excludeMimeTypesVideoCodecs;constructor(n,{preferredMimeTypesVideoCodecs:t,excludeMimeTypesVideoCodecs:o}={}){return this.preferredMimeTypesVideoCodecs=t,this.excludeMimeTypesVideoCodecs=o,this.sipConnector=n,new Proxy(this,{get:(r,s,c)=>{if(typeof s=="string"&&Fe.has(s)&&s in this.sipConnector){const l=Reflect.get(this.sipConnector,s,this.sipConnector);return typeof l=="function"?l.bind(this.sipConnector):l}const a=Reflect.get(r,s,c);return typeof a=="function"?a.bind(r):a}})}connectToServer=async n=>{const{userAgent:t,sipWebSocketServerURL:o,sipServerUrl:r,remoteAddress:s,displayName:c,name:a,password:l,isRegisteredUser:d,isDisconnectOnFail:f}=n;return i.logger("connectToServer",n),this.sipConnector.connect({userAgent:t,sipWebSocketServerURL:o,sipServerUrl:r,remoteAddress:s,displayName:c,password:l,user:a,register:d}).then(g=>(i.logger("connectToServer then"),{ua:g,isSuccessful:!0})).catch(async g=>(i.logger("connectToServer catch: error",g),f===!0?this.sipConnector.disconnect().then(()=>$(g)).catch(()=>$(g)):$(g)))};callToServer=async n=>{const{conference:t,mediaStream:o,extraHeaders:r,iceServers:s,contentHint:c,simulcastEncodings:a,degradationPreference:l,sendEncodings:d,offerToReceiveAudio:f,offerToReceiveVideo:g,directionVideo:I,directionAudio:x,setRemoteStreams:C,onBeforeProgressCall:R,onSuccessProgressCall:h,onEnterPurgatory:S,onEnterConference:y,onFailProgressCall:p,onFinishProgressCall:E,onEndedCall:T}=n,b=this.resolveHandleReadyRemoteStreamsDebounced({onReadyRemoteStreams:C}),A=this.resolveHandleReadyRemoteStreams({onReadyRemoteStreams:()=>{b().catch(_)}}),O=D({degradationPreference:l},{preferredMimeTypesVideoCodecs:this.preferredMimeTypesVideoCodecs,excludeMimeTypesVideoCodecs:this.excludeMimeTypesVideoCodecs});i.logger("callToServer",n);const N=async()=>(i.logger("startCall"),this.sipConnector.call({mediaStream:o,extraHeaders:r,iceServers:s,contentHint:c,offerToReceiveAudio:f,offerToReceiveVideo:g,directionVideo:I,directionAudio:x,sendEncodings:w({mediaStream:o,simulcastEncodings:a,sendEncodings:d}),number:t,onAddedTransceiver:O,ontrack:A}));let M=!1,v;const B=(i.logger("subscribeEnterConference: onEnterConference",y),S??y?this.sipConnector.on("api:enterRoom",({room:u})=>{i.logger("enterRoom",{_room:u,isSuccessProgressCall:M}),v=u,P(v)?S&&S():y&&y({isSuccessProgressCall:M})}):()=>{}),U=u=>(i.logger("onSuccess"),M=!0,b().catch(_),h&&h({isPurgatory:P(v)}),this.sipConnector.onceRace(["call:ended","call:failed"],()=>{B(),T&&T()}),u),V=u=>{throw i.logger("onFail"),p&&p(),B(),u},L=()=>{i.logger("onFinish"),E&&E()};return i.logger("onBeforeProgressCall"),R&&R(t),N().then(U).catch(u=>V(u)).finally(L)};disconnectFromServer=async()=>this.sipConnector.disconnect().then(()=>(i.logger("disconnectFromServer: then"),{isSuccessful:!0})).catch(n=>(i.logger("disconnectFromServer: catch",n),{isSuccessful:!1}));answerToIncomingCall=async n=>{const{mediaStream:t,extraHeaders:o,iceServers:r,contentHint:s,simulcastEncodings:c,degradationPreference:a,sendEncodings:l,offerToReceiveAudio:d,offerToReceiveVideo:f,directionVideo:g,directionAudio:I,setRemoteStreams:x,onBeforeProgressCall:C,onSuccessProgressCall:R,onEnterPurgatory:h,onEnterConference:S,onFailProgressCall:y,onFinishProgressCall:p,onEndedCall:E}=n,T=this.resolveHandleReadyRemoteStreamsDebounced({onReadyRemoteStreams:x}),b=this.resolveHandleReadyRemoteStreams({onReadyRemoteStreams:()=>{T().catch(_)}}),A=D({degradationPreference:a},{preferredMimeTypesVideoCodecs:this.preferredMimeTypesVideoCodecs,excludeMimeTypesVideoCodecs:this.excludeMimeTypesVideoCodecs});i.logger("answerToIncomingCall",n);const O=async()=>this.sipConnector.answerToIncomingCall({mediaStream:t,extraHeaders:o,iceServers:r,contentHint:s,offerToReceiveAudio:d,offerToReceiveVideo:f,directionVideo:g,directionAudio:I,sendEncodings:w({mediaStream:t,simulcastEncodings:c,sendEncodings:l}),onAddedTransceiver:A,ontrack:b}),N=()=>{const{remoteCallerData:u}=this.sipConnector;return u.incomingNumber};let M=!1,v;const B=(i.logger("subscribeEnterConference: onEnterConference",S),h??S?this.sipConnector.on("api:enterRoom",u=>{i.logger("enterRoom",{_room:u,isSuccessProgressCall:M}),v=u,P(v)?h&&h():S&&S({isSuccessProgressCall:M})}):()=>{}),U=u=>(i.logger("onSuccess"),M=!0,T().catch(_),R&&R({isPurgatory:P(v)}),this.sipConnector.onceRace(["call:ended","call:failed"],()=>{B(),E&&E()}),u),V=u=>{throw i.logger("onFail"),y&&y(),B(),u},L=()=>{i.logger("onFinish"),p&&p()};if(i.logger("onBeforeProgressCall"),C){const u=N();C(u)}return O().then(U).catch(u=>V(u)).finally(L)};updatePresentation=async({mediaStream:n,isP2P:t,maxBitrate:o,contentHint:r,simulcastEncodings:s,degradationPreference:c,sendEncodings:a,preferredMimeTypesVideoCodecs:l,excludeMimeTypesVideoCodecs:d})=>{const f=D({degradationPreference:c},{preferredMimeTypesVideoCodecs:l,excludeMimeTypesVideoCodecs:d});return i.logger("updatePresentation"),this.sipConnector.updatePresentation(n,{isP2P:t,maxBitrate:o,contentHint:r,sendEncodings:w({mediaStream:n,simulcastEncodings:s,sendEncodings:a}),onAddedTransceiver:f})};startPresentation=async({mediaStream:n,isP2P:t,maxBitrate:o,contentHint:r,simulcastEncodings:s,degradationPreference:c,sendEncodings:a,preferredMimeTypesVideoCodecs:l,excludeMimeTypesVideoCodecs:d,callLimit:f})=>{const g=D({degradationPreference:c},{preferredMimeTypesVideoCodecs:l,excludeMimeTypesVideoCodecs:d});return i.logger("startPresentation"),this.sipConnector.startPresentation(n,{isP2P:t,maxBitrate:o,contentHint:r,callLimit:f,sendEncodings:w({mediaStream:n,simulcastEncodings:s,sendEncodings:a}),onAddedTransceiver:g})};stopShareSipConnector=async({isP2P:n=!1}={})=>(i.logger("stopShareSipConnector"),this.sipConnector.stopPresentation({isP2P:n}).catch(t=>{i.logger(t)}));sendRefusalToTurnOnMic=async()=>{i.logger("sendRefusalToTurnOnMic"),await this.sipConnector.sendRefusalToTurnOnMic().catch(n=>{i.logger("sendRefusalToTurnOnMic: error",n)})};sendRefusalToTurnOnCam=async()=>{i.logger("sendRefusalToTurnOnCam"),await this.sipConnector.sendRefusalToTurnOnCam().catch(n=>{i.logger("sendRefusalToTurnOnCam: error",n)})};sendMediaState=async({isEnabledCam:n,isEnabledMic:t})=>{i.logger("sendMediaState"),await this.sipConnector.sendMediaState({cam:n,mic:t})};replaceMediaStream=async(n,{deleteExisting:t,addMissing:o,forceRenegotiation:r,contentHint:s,simulcastEncodings:c,degradationPreference:a,sendEncodings:l}={})=>{const d=D({degradationPreference:a},{preferredMimeTypesVideoCodecs:this.preferredMimeTypesVideoCodecs,excludeMimeTypesVideoCodecs:this.excludeMimeTypesVideoCodecs});return i.logger("replaceMediaStream"),this.sipConnector.replaceMediaStream(n,{deleteExisting:t,addMissing:o,forceRenegotiation:r,contentHint:s,sendEncodings:w({mediaStream:n,simulcastEncodings:c,sendEncodings:l}),onAddedTransceiver:d})};askPermissionToEnableCam=async()=>{i.logger("askPermissionToEnableCam"),await this.sipConnector.askPermissionToEnableCam()};resolveHandleReadyRemoteStreamsDebounced=({onReadyRemoteStreams:n})=>ae.debounce(()=>{const t=this.sipConnector.getRemoteStreams();i.logger("remoteStreams",t),t&&n(t)},200);resolveHandleReadyRemoteStreams=({onReadyRemoteStreams:n})=>({track:t})=>{xe(t)&&n()};getRemoteStreams=()=>(i.logger("getRemoteStreams"),this.sipConnector.getRemoteStreams());onUseLicense=n=>(i.logger("onUseLicense"),this.sipConnector.on("api:useLicense",n));onMustStopPresentation=n=>(i.logger("onMustStopPresentation"),this.sipConnector.on("api:mustStopPresentation",n));onMoveToSpectators=n=>(i.logger("onMoveToSpectators"),this.sipConnector.on("api:participant:move-request-to-spectators",n));onMoveToParticipants=n=>(i.logger("onMoveToParticipants"),this.sipConnector.on("api:participant:move-request-to-participants",n))}const k=e=>{const{url:n,cause:t}=e;let o=n;return(t===i.ECallCause.BAD_MEDIA_DESCRIPTION||t===i.ECallCause.NOT_FOUND)&&(o=`${e.message.to.uri.user}@${e.message.to.uri.host}`),o};var te=(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))(te||{});const Ue=new Error("Unknown error"),Ve=(e=Ue)=>{const{cause:n,socket:t}=e;let o="CONNECT_SERVER_FAILED";switch(n){case"Forbidden":{o="WRONG_USER_OR_PASSWORD";break}case i.ECallCause.BAD_MEDIA_DESCRIPTION:{o="BAD_MEDIA_ERROR";break}case i.ECallCause.NOT_FOUND:{o="NOT_FOUND_ERROR";break}default:t!==void 0&&t._ws?.readyState===3?o="WS_CONNECTION_FAILED":k(e)!==void 0&&k(e)!==""&&(o="CONNECT_SERVER_FAILED_BY_LINK")}return o},Le=e=>{let n="";try{n=JSON.stringify(e)}catch(t){i.logger("failed to stringify message",t)}return n},He=new Error("Unknown error"),$e=(e=He)=>{const{code:n,cause:t,message:o}=e,r=k(e),s={code:"",cause:"",message:""};return typeof o=="object"&&o!==null?s.message=Le(o):o&&(s.message=String(o)),r!==void 0&&r!==""&&(s.link=r),n!==void 0&&n!==""&&(s.code=n),t!==void 0&&t!==""&&(s.cause=t),s},qe=Object.freeze(Object.defineProperty({__proto__:null,EErrorTypes:te,getLinkError:k,getTypeFromError:Ve,getValuesFromError:$e},Symbol.toStringTag,{value:"Module"})),Je=({sessionId:e,remoteAddress:n,isMutedAudio:t,isMutedVideo:o,isRegistered:r,isPresentationCall:s})=>{const c=[],a=t?"0":"1",l=o?"0":"1";return c.push(`X-Vinteo-Mic-State: ${a}`,`X-Vinteo-MainCam-State: ${l}`),(r===!1||r===void 0)&&c.push("X-Vinteo-Purgatory-Call: yes"),e!==void 0&&e!==""&&c.push(`X-Vinteo-Session: ${e}`),s===!0&&c.push("X-Vinteo-Presentation-Call: yes"),n!==void 0&&n!==""&&c.push(`X-Vinteo-Remote: ${n}`),c},Xe="[@*!|]",je="_",We=e=>{let n=e;return n=n.replaceAll(new RegExp(Xe,"g"),je),n},Ge=({appName:e,appVersion:n,browserName:t,browserVersion:o})=>{const s=`${We(e)} ${n}`;return`ChromeNew - ${t===void 0?s:`${t} ${o}, ${s}`}`},Ke=({isUnifiedSdpSemantic:e,appVersion:n,browserName:t,browserVersion:o,appName:r})=>e?Ge({appVersion:n,browserName:t,browserVersion:o,appName:r}):"Chrome",Ye=e=>n=>[...n].map(o=>async()=>e(o)),ze=async({accumulatedKeys:e,sendKey:n,canRunTask:t})=>{const r=Ye(n)(e);return le.sequentPromises(r,t)},Qe=e=>t=>(i.logger("onStartMainCam"),e.on("api:admin-start-main-cam",t)),Ze=e=>t=>(i.logger("onStartMic"),e.on("api:admin-start-mic",t)),en=e=>t=>(i.logger("onStopMainCam"),e.on("api:admin-stop-main-cam",t)),nn=e=>t=>(i.logger("onStopMic"),e.on("api:admin-stop-mic",t)),tn=({sipConnector:e})=>{const n=(C,R)=>({isSyncForced:h})=>{if(h===!0){C();return}R()},t=Qe(e),o=en(e),r=Ze(e),s=nn(e);let c,a,l,d;const f=({onStartMainCamForced:C,onStartMainCamNotForced:R,onStopMainCamForced:h,onStopMainCamNotForced:S,onStartMicForced:y,onStartMicNotForced:p,onStopMicForced:E,onStopMicNotForced:T})=>{const b=n(C,R);c=t(b);const A=n(h,S);a=o(A);const O=n(y,p);l=r(O);const N=n(E,T);d=s(N)},g=()=>{c?.(),a?.(),l?.(),d?.()};return{start:C=>{f(C)},stop:()=>{g()}}},on=Object.freeze(Object.defineProperty({__proto__:null,PURGATORY_CONFERENCE_NUMBER:ne,createSyncMediaState:tn,error:qe,getExtraHeaders:Je,getUserAgent:Ke,hasPurgatory:P,sendDtmfAccumulated:ze},Symbol.toStringTag,{value:"Module"}));var oe=(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))(oe||{});const rn=e=>[...e.keys()].map(n=>e.get(n)),sn=(e,n)=>rn(e).find(t=>t?.type===n),re=async e=>e.getStats().then(n=>sn(n,"codec")?.mimeType),cn=e=>e.find(n=>n.track?.kind==="video"),an=async(e,n,t)=>{const{isChanged:o,parameters:r}=await q(e,{encodings:[{scaleResolutionDownBy:n.scaleResolutionDownBy,maxBitrate:n.maxBitrate}]});return o&&t&&t(r),{isChanged:o,parameters:r}},se=ue.createStackPromises(),ln=async()=>se().catch(e=>{i.logger("videoSendingBalancer: error",e)}),un=async e=>(se.add(e),ln()),J=async({sender:e,scaleResolutionDownBy:n,maxBitrate:t,onSetParameters:o})=>un(async()=>an(e,{scaleResolutionDownBy:n,maxBitrate:t},o)),dn=async({sender:e,codec:n},t)=>{const r=Be(n);return J({sender:e,maxBitrate:r,onSetParameters:t,scaleResolutionDownBy:200})},F=async({sender:e,videoTrack:n,codec:t},o)=>{const c=n.getSettings().width,a=Z(c??0,t);return J({sender:e,maxBitrate:a,onSetParameters:o,scaleResolutionDownBy:1})},gn=async({sender:e,videoTrack:n,resolution:t,codec:o},r)=>{const[s,c]=t.split("x"),{maxBitrate:a,scaleResolutionDownBy:l}=ee({videoTrack:n,codec:o,targetSize:{width:Number(s),height:Number(c)}});return J({sender:e,maxBitrate:a,onSetParameters:r,scaleResolutionDownBy:l})},fn=async({mainCam:e,resolutionMainCam:n,sender:t,videoTrack:o,codec:r},s)=>{switch(e){case i.EEventsMainCAM.PAUSE_MAIN_CAM:return dn({sender:t,codec:r},s);case i.EEventsMainCAM.RESUME_MAIN_CAM:return F({sender:t,videoTrack:o,codec:r},s);case i.EEventsMainCAM.MAX_MAIN_CAM_RESOLUTION:return n!==void 0?gn({sender:t,videoTrack:o,codec:r,resolution:n},s):F({sender:t,videoTrack:o,codec:r},s);case i.EEventsMainCAM.ADMIN_STOP_MAIN_CAM:case i.EEventsMainCAM.ADMIN_START_MAIN_CAM:case void 0:return F({sender:t,videoTrack:o,codec:r},s);default:return F({sender:t,videoTrack:o,codec:r},s)}},X={isChanged:!1,parameters:{encodings:[{}],transactionId:"0",codecs:[],headerExtensions:[],rtcp:{}}},j=async({mainCam:e,resolutionMainCam:n,connection:t,onSetParameters:o,ignoreForCodec:r})=>{const s=t.getSenders(),c=cn(s);if(!c?.track)return X;const a=await re(c);return z(a,r)?X:fn({mainCam:e,resolutionMainCam:n,sender:c,codec:a,videoTrack:c.track},o)},Cn=(e,{ignoreForCodec:n,onSetParameters:t}={})=>{const o=async()=>{const{connection:l}=e;if(!l)throw new Error("connection is not exist");return j({connection:l,onSetParameters:t,ignoreForCodec:n})};let r=o;const s=l=>{r=async()=>{const{mainCam:d,resolutionMainCam:f}=l,{connection:g}=e;if(!g)throw new Error("connection is not exist");return j({mainCam:d,resolutionMainCam:f,connection:g,onSetParameters:t,ignoreForCodec:n})},r().catch(_)};return{subscribe:()=>{e.on("api:main-cam-control",s)},unsubscribe:()=>{e.off("api:main-cam-control",s)},balanceByTrack:o,resetMainCamControl(){r=o},async reBalance(){return r()}}};exports.ECallCause=i.ECallCause;exports.EUseLicense=i.EUseLicense;exports.SipConnector=i.SipConnector;exports.disableDebug=i.disableDebug;exports.enableDebug=i.enableDebug;exports.hasCanceledStartPresentationError=i.hasCanceledStartPresentationError;exports.debug=_;exports.EMimeTypesVideoCodecs=oe;exports.SipConnectorFacade=ke;exports.getCodecFromSender=re;exports.hasCanceledCallError=ge;exports.resolveVideoSendingBalancer=Cn;exports.setParametersToSender=q;exports.tools=on;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require("events-constructor");const i=require("./@SipConnector-Xh6_JpUI.cjs"),W=require("@krivega/cancelable-promise"),ce=require("repeated-calls"),ae=require("ts-debounce"),_=require("debug"),le=require("sequent-promises"),ue=require("stack-promises"),de=e=>e instanceof Object&&("originator"in e||"cause"in e),ge=e=>{if(W.isCanceledError(e))return!0;if(!de(e))return!1;const{originator:n,cause:t}=e;return typeof t=="string"?t===i.ECallCause.REQUEST_TIMEOUT||t===i.ECallCause.REJECTED||n===i.Originator.LOCAL&&(t===i.ECallCause.CANCELED||t===i.ECallCause.BYE):!1},fe=(e,n)=>(e.degradationPreference=n.degradationPreference,e),Ce=(e,n)=>{e.encodings??=[];for(let t=e.encodings.length;t<n;t+=1)e.encodings.push({});return e},G=e=>(n,t)=>t!==void 0&&n!==t||t===void 0&&n!==e,he=G(),Se=(e,n)=>{if(he(e,n))return e},me=(e,n)=>{const t=e.maxBitrate,o=Se(n,t);return o!==void 0&&(e.maxBitrate=o),e},K=1,Re=G(K),pe=(e,n)=>{const t=e===void 0?void 0:Math.max(e,K);if(t!==void 0&&Re(t,n))return t},ye=(e,n)=>{const t=e.scaleResolutionDownBy,o=pe(n,t);return o!==void 0&&(e.scaleResolutionDownBy=o),e},Ee=(e,n)=>{const t=n.encodings?.length??0;return Ce(e,t),e.encodings.forEach((o,r)=>{const s=(n?.encodings??[])[r],c=s?.maxBitrate,a=s?.scaleResolutionDownBy;me(o,c),ye(o,a)}),e},Te=(e,n)=>{if(e.codecs?.length!==n.codecs?.length)return!0;for(let t=0;t<(e.codecs?.length??0);t++)if(JSON.stringify(e.codecs[t])!==JSON.stringify(n.codecs[t]))return!0;if(e.headerExtensions?.length!==n.headerExtensions?.length)return!0;for(let t=0;t<(e.headerExtensions?.length??0);t++)if(JSON.stringify(e.headerExtensions[t])!==JSON.stringify(n.headerExtensions[t]))return!0;if(e.encodings?.length!==n.encodings?.length)return!0;for(let t=0;t<(e.encodings.length??0);t++)if(JSON.stringify(e.encodings[t])!==JSON.stringify(n.encodings[t]))return!0;return e.rtcp?.cname!==n.rtcp?.cname||e.rtcp?.reducedSize!==n.rtcp?.reducedSize||e.degradationPreference!==n.degradationPreference},q=async(e,n)=>{const t=e.getParameters(),o=JSON.parse(JSON.stringify(t));Ee(t,n),fe(t,n);const r=Te(o,t);return r&&await e.setParameters(t),{parameters:t,isChanged:r}},ve=e=>e.getVideoTracks()[0],Me=1e6,m=e=>e*Me,Y=m(.06),be=m(4),_e=e=>e<=64?Y:e<=128?m(.12):e<=256?m(.25):e<=384?m(.32):e<=426?m(.38):e<=640?m(.5):e<=848?m(.7):e<=1280?m(1):e<=1920?m(2):be,z=(e,n)=>e!==void 0&&n!==void 0&&e.toLowerCase().includes(n.toLowerCase()),Ae="av1",Oe=e=>z(e,Ae),Ne=.6,Q=(e,n)=>Oe(n)?e*Ne:e,Be=e=>Q(Y,e),Z=(e,n)=>{const t=_e(e);return Q(t,n)},H=1,ee=({videoTrack:e,targetSize:n,codec:t})=>{const o=e.getSettings(),r=o.width,s=o.height,c=r===void 0?H:r/n.width,a=s===void 0?H:s/n.height,l=Math.max(c,a,H),d=Z(n.width,t);return{scaleResolutionDownBy:l,maxBitrate:d}},w=({mediaStream:e,simulcastEncodings:n,sendEncodings:t})=>{if(n&&n.length>0){const o=t??[],r=ve(e);if(r===void 0)throw new Error("No video track");return n.forEach((s,c)=>{const a=o[c]??{};a.active=!0,s.rid!==void 0&&(a.rid=s.rid),s.scalabilityMode!==void 0&&(a.scalabilityMode=s.scalabilityMode);const{maxBitrate:l,scaleResolutionDownBy:d}=ee({videoTrack:r,targetSize:{width:s.width,height:s.height}});a.maxBitrate=l,a.scaleResolutionDownBy=d,o[c]=a}),o}return t},ne="purgatory",P=e=>e===ne,we=(e,n)=>e.filter(o=>n.some(r=>r.clockRate===o.clockRate&&r.mimeType===o.mimeType&&r.channels===o.channels&&r.sdpFmtpLine===o.sdpFmtpLine)),De=e=>{const n=RTCRtpSender.getCapabilities(e),t=RTCRtpReceiver.getCapabilities(e),o=n===null?[]:n.codecs,r=t===null?[]:t.codecs;return we(o,r)},Pe=(e,n)=>n===void 0||n.length===0?e:e.sort((t,o)=>{const r=n.indexOf(t.mimeType),s=n.indexOf(o.mimeType),c=r===-1?Number.MAX_VALUE:r,a=s===-1?Number.MAX_VALUE:s;return c-a}),Ie=(e,n)=>n===void 0||n.length===0?e:e.filter(t=>!n.includes(t.mimeType)),xe=(e,{preferredMimeTypesVideoCodecs:n,excludeMimeTypesVideoCodecs:t})=>{if(typeof e.setCodecPreferences=="function"&&e.sender.track?.kind==="video"&&(n!==void 0&&n.length>0||t!==void 0&&t.length>0)){const o=De("video"),r=Ie(o,t),s=Pe(r,n);e.setCodecPreferences(s)}},D=(e,{preferredMimeTypesVideoCodecs:n,excludeMimeTypesVideoCodecs:t})=>async o=>{try{xe(o,{preferredMimeTypesVideoCodecs:n,excludeMimeTypesVideoCodecs:t}),Object.values(e).filter(s=>s!=null).length>0&&(i.logger("updateTransceiver setParametersToSender",e),await q(o.sender,e))}catch(r){i.logger("updateTransceiver error",r)}},$=e=>{if(!W.isCanceledError(e)&&!ce.hasCanceledError(e))throw e;return{isSuccessful:!1}},Fe=({kind:e,readyState:n})=>e==="video"&&n==="live",Ue=new Set(["on","once","onceRace","wait","off","sendDTMF","hangUp","declineToIncomingCall","sendChannels","checkTelephony","waitChannels","ping","connection","isConfigured","isRegistered"]);class ke{on;once;onceRace;wait;off;sendDTMF;hangUp;declineToIncomingCall;sendChannels;checkTelephony;waitChannels;ping;connection;isConfigured;isRegistered;sipConnector;preferredMimeTypesVideoCodecs;excludeMimeTypesVideoCodecs;constructor(n,{preferredMimeTypesVideoCodecs:t,excludeMimeTypesVideoCodecs:o}={}){return this.preferredMimeTypesVideoCodecs=t,this.excludeMimeTypesVideoCodecs=o,this.sipConnector=n,new Proxy(this,{get:(r,s,c)=>{if(typeof s=="string"&&Ue.has(s)&&s in this.sipConnector){const l=Reflect.get(this.sipConnector,s,this.sipConnector);return typeof l=="function"?l.bind(this.sipConnector):l}const a=Reflect.get(r,s,c);return typeof a=="function"?a.bind(r):a}})}connectToServer=async n=>{const{userAgent:t,sipWebSocketServerURL:o,sipServerUrl:r,remoteAddress:s,displayName:c,name:a,password:l,isRegisteredUser:d,isDisconnectOnFail:f}=n;return i.logger("connectToServer",n),this.sipConnector.connect({userAgent:t,sipWebSocketServerURL:o,sipServerUrl:r,remoteAddress:s,displayName:c,password:l,user:a,register:d}).then(g=>(i.logger("connectToServer then"),{ua:g,isSuccessful:!0})).catch(async g=>(i.logger("connectToServer catch: error",g),f===!0?this.sipConnector.disconnect().then(()=>$(g)).catch(()=>$(g)):$(g)))};callToServer=async n=>{const{conference:t,mediaStream:o,extraHeaders:r,iceServers:s,contentHint:c,simulcastEncodings:a,degradationPreference:l,sendEncodings:d,offerToReceiveAudio:f,offerToReceiveVideo:g,directionVideo:I,directionAudio:x,setRemoteStreams:C,onBeforeProgressCall:R,onSuccessProgressCall:h,onEnterPurgatory:S,onEnterConference:p,onFailProgressCall:y,onFinishProgressCall:E,onEndedCall:T}=n,b=this.resolveHandleReadyRemoteStreamsDebounced({onReadyRemoteStreams:C}),A=this.resolveHandleReadyRemoteStreams({onReadyRemoteStreams:()=>{b().catch(_)}}),O=D({degradationPreference:l},{preferredMimeTypesVideoCodecs:this.preferredMimeTypesVideoCodecs,excludeMimeTypesVideoCodecs:this.excludeMimeTypesVideoCodecs});i.logger("callToServer",n);const N=async()=>(i.logger("startCall"),this.sipConnector.call({mediaStream:o,extraHeaders:r,iceServers:s,contentHint:c,offerToReceiveAudio:f,offerToReceiveVideo:g,directionVideo:I,directionAudio:x,sendEncodings:w({mediaStream:o,simulcastEncodings:a,sendEncodings:d}),number:t,onAddedTransceiver:O,ontrack:A}));let v=!1,M;const B=(i.logger("subscribeEnterConference: onEnterConference",p),S??p?this.sipConnector.on("api:enterRoom",({room:u})=>{i.logger("enterRoom",{_room:u,isSuccessProgressCall:v}),M=u,P(M)?S&&S():p&&p({isSuccessProgressCall:v})}):()=>{}),k=u=>(i.logger("onSuccess"),v=!0,b().catch(_),h&&h({isPurgatory:P(M)}),this.sipConnector.onceRace(["call:ended","call:failed"],()=>{B(),T&&T()}),u),V=u=>{throw i.logger("onFail"),y&&y(),B(),u},L=()=>{i.logger("onFinish"),E&&E()};return i.logger("onBeforeProgressCall"),R&&R(t),N().then(k).catch(u=>V(u)).finally(L)};disconnectFromServer=async()=>this.sipConnector.disconnect().then(()=>(i.logger("disconnectFromServer: then"),{isSuccessful:!0})).catch(n=>(i.logger("disconnectFromServer: catch",n),{isSuccessful:!1}));answerToIncomingCall=async n=>{const{mediaStream:t,extraHeaders:o,iceServers:r,contentHint:s,simulcastEncodings:c,degradationPreference:a,sendEncodings:l,offerToReceiveAudio:d,offerToReceiveVideo:f,directionVideo:g,directionAudio:I,setRemoteStreams:x,onBeforeProgressCall:C,onSuccessProgressCall:R,onEnterPurgatory:h,onEnterConference:S,onFailProgressCall:p,onFinishProgressCall:y,onEndedCall:E}=n,T=this.resolveHandleReadyRemoteStreamsDebounced({onReadyRemoteStreams:x}),b=this.resolveHandleReadyRemoteStreams({onReadyRemoteStreams:()=>{T().catch(_)}}),A=D({degradationPreference:a},{preferredMimeTypesVideoCodecs:this.preferredMimeTypesVideoCodecs,excludeMimeTypesVideoCodecs:this.excludeMimeTypesVideoCodecs});i.logger("answerToIncomingCall",n);const O=async()=>this.sipConnector.answerToIncomingCall({mediaStream:t,extraHeaders:o,iceServers:r,contentHint:s,offerToReceiveAudio:d,offerToReceiveVideo:f,directionVideo:g,directionAudio:I,sendEncodings:w({mediaStream:t,simulcastEncodings:c,sendEncodings:l}),onAddedTransceiver:A,ontrack:b}),N=()=>{const{remoteCallerData:u}=this.sipConnector;return u.incomingNumber};let v=!1,M;const B=(i.logger("subscribeEnterConference: onEnterConference",S),h??S?this.sipConnector.on("api:enterRoom",u=>{i.logger("enterRoom",{_room:u,isSuccessProgressCall:v}),M=u,P(M)?h&&h():S&&S({isSuccessProgressCall:v})}):()=>{}),k=u=>(i.logger("onSuccess"),v=!0,T().catch(_),R&&R({isPurgatory:P(M)}),this.sipConnector.onceRace(["call:ended","call:failed"],()=>{B(),E&&E()}),u),V=u=>{throw i.logger("onFail"),p&&p(),B(),u},L=()=>{i.logger("onFinish"),y&&y()};if(i.logger("onBeforeProgressCall"),C){const u=N();C(u)}return O().then(k).catch(u=>V(u)).finally(L)};updatePresentation=async({mediaStream:n,isP2P:t,maxBitrate:o,contentHint:r,simulcastEncodings:s,degradationPreference:c,sendEncodings:a,preferredMimeTypesVideoCodecs:l,excludeMimeTypesVideoCodecs:d})=>{const f=D({degradationPreference:c},{preferredMimeTypesVideoCodecs:l,excludeMimeTypesVideoCodecs:d});return i.logger("updatePresentation"),this.sipConnector.updatePresentation(n,{isP2P:t,maxBitrate:o,contentHint:r,sendEncodings:w({mediaStream:n,simulcastEncodings:s,sendEncodings:a}),onAddedTransceiver:f})};startPresentation=async({mediaStream:n,isP2P:t,maxBitrate:o,contentHint:r,simulcastEncodings:s,degradationPreference:c,sendEncodings:a,preferredMimeTypesVideoCodecs:l,excludeMimeTypesVideoCodecs:d,callLimit:f})=>{const g=D({degradationPreference:c},{preferredMimeTypesVideoCodecs:l,excludeMimeTypesVideoCodecs:d});return i.logger("startPresentation"),this.sipConnector.startPresentation(n,{isP2P:t,maxBitrate:o,contentHint:r,callLimit:f,sendEncodings:w({mediaStream:n,simulcastEncodings:s,sendEncodings:a}),onAddedTransceiver:g})};stopShareSipConnector=async({isP2P:n=!1}={})=>(i.logger("stopShareSipConnector"),this.sipConnector.stopPresentation({isP2P:n}).catch(t=>{i.logger(t)}));sendRefusalToTurnOnMic=async()=>{i.logger("sendRefusalToTurnOnMic"),await this.sipConnector.sendRefusalToTurnOnMic().catch(n=>{i.logger("sendRefusalToTurnOnMic: error",n)})};sendRefusalToTurnOnCam=async()=>{i.logger("sendRefusalToTurnOnCam"),await this.sipConnector.sendRefusalToTurnOnCam().catch(n=>{i.logger("sendRefusalToTurnOnCam: error",n)})};sendMediaState=async({isEnabledCam:n,isEnabledMic:t})=>{i.logger("sendMediaState"),await this.sipConnector.sendMediaState({cam:n,mic:t})};replaceMediaStream=async(n,{deleteExisting:t,addMissing:o,forceRenegotiation:r,contentHint:s,simulcastEncodings:c,degradationPreference:a,sendEncodings:l}={})=>{const d=D({degradationPreference:a},{preferredMimeTypesVideoCodecs:this.preferredMimeTypesVideoCodecs,excludeMimeTypesVideoCodecs:this.excludeMimeTypesVideoCodecs});return i.logger("replaceMediaStream"),this.sipConnector.replaceMediaStream(n,{deleteExisting:t,addMissing:o,forceRenegotiation:r,contentHint:s,sendEncodings:w({mediaStream:n,simulcastEncodings:c,sendEncodings:l}),onAddedTransceiver:d})};askPermissionToEnableCam=async()=>{i.logger("askPermissionToEnableCam"),await this.sipConnector.askPermissionToEnableCam()};resolveHandleReadyRemoteStreamsDebounced=({onReadyRemoteStreams:n})=>ae.debounce(()=>{const t=this.sipConnector.getRemoteStreams();i.logger("remoteStreams",t),t&&n(t)},200);resolveHandleReadyRemoteStreams=({onReadyRemoteStreams:n})=>({track:t})=>{Fe(t)&&n()};getRemoteStreams=()=>(i.logger("getRemoteStreams"),this.sipConnector.getRemoteStreams());onUseLicense=n=>(i.logger("onUseLicense"),this.sipConnector.on("api:useLicense",n));onMustStopPresentation=n=>(i.logger("onMustStopPresentation"),this.sipConnector.on("api:mustStopPresentation",n));onMoveToSpectators=n=>(i.logger("onMoveToSpectators"),this.sipConnector.on("api:participant:move-request-to-spectators",n));onMoveToParticipants=n=>(i.logger("onMoveToParticipants"),this.sipConnector.on("api:participant:move-request-to-participants",n))}const U=e=>{const{url:n,cause:t}=e;let o=n;return(t===i.ECallCause.BAD_MEDIA_DESCRIPTION||t===i.ECallCause.NOT_FOUND)&&(o=`${e.message.to.uri.user}@${e.message.to.uri.host}`),o};var te=(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))(te||{});const Ve=new Error("Unknown error"),Le=(e=Ve)=>{const{cause:n,socket:t}=e;let o="CONNECT_SERVER_FAILED";switch(n){case"Forbidden":{o="WRONG_USER_OR_PASSWORD";break}case i.ECallCause.BAD_MEDIA_DESCRIPTION:{o="BAD_MEDIA_ERROR";break}case i.ECallCause.NOT_FOUND:{o="NOT_FOUND_ERROR";break}default:t!==void 0&&t._ws?.readyState===3?o="WS_CONNECTION_FAILED":U(e)!==void 0&&U(e)!==""&&(o="CONNECT_SERVER_FAILED_BY_LINK")}return o},He=e=>{let n="";try{n=JSON.stringify(e)}catch(t){i.logger("failed to stringify message",t)}return n},$e=new Error("Unknown error"),qe=(e=$e)=>{const{code:n,cause:t,message:o}=e,r=U(e),s={code:"",cause:"",message:""};return typeof o=="object"&&o!==null?s.message=He(o):o&&(s.message=String(o)),r!==void 0&&r!==""&&(s.link=r),n!==void 0&&n!==""&&(s.code=n),t!==void 0&&t!==""&&(s.cause=t),s},Je=Object.freeze(Object.defineProperty({__proto__:null,EErrorTypes:te,getLinkError:U,getTypeFromError:Le,getValuesFromError:qe},Symbol.toStringTag,{value:"Module"})),Xe=({sessionId:e,remoteAddress:n,isMutedAudio:t,isMutedVideo:o,isRegistered:r,isPresentationCall:s})=>{const c=[],a=t?"0":"1",l=o?"0":"1";return c.push(`X-Vinteo-Mic-State: ${a}`,`X-Vinteo-MainCam-State: ${l}`),(r===!1||r===void 0)&&c.push("X-Vinteo-Purgatory-Call: yes"),e!==void 0&&e!==""&&c.push(`X-Vinteo-Session: ${e}`),s===!0&&c.push("X-Vinteo-Presentation-Call: yes"),n!==void 0&&n!==""&&c.push(`X-Vinteo-Remote: ${n}`),c},je="[@*!|]",We="_",Ge=e=>{let n=e;return n=n.replaceAll(new RegExp(je,"g"),We),n},Ke=({appName:e,appVersion:n,browserName:t,browserVersion:o})=>{const s=`${Ge(e)} ${n}`;return`ChromeNew - ${t===void 0?s:`${t} ${o}, ${s}`}`},Ye=({isUnifiedSdpSemantic:e,appVersion:n,browserName:t,browserVersion:o,appName:r})=>e?Ke({appVersion:n,browserName:t,browserVersion:o,appName:r}):"Chrome",ze=e=>n=>[...n].map(o=>async()=>e(o)),Qe=async({accumulatedKeys:e,sendKey:n,canRunTask:t})=>{const r=ze(n)(e);return le.sequentPromises(r,t)},Ze=e=>t=>(i.logger("onStartMainCam"),e.on("api:admin-start-main-cam",t)),en=e=>t=>(i.logger("onStartMic"),e.on("api:admin-start-mic",t)),nn=e=>t=>(i.logger("onStopMainCam"),e.on("api:admin-stop-main-cam",t)),tn=e=>t=>(i.logger("onStopMic"),e.on("api:admin-stop-mic",t)),on=({sipConnector:e})=>{const n=(C,R)=>({isSyncForced:h})=>{if(h===!0){C();return}R()},t=Ze(e),o=nn(e),r=en(e),s=tn(e);let c,a,l,d;const f=({onStartMainCamForced:C,onStartMainCamNotForced:R,onStopMainCamForced:h,onStopMainCamNotForced:S,onStartMicForced:p,onStartMicNotForced:y,onStopMicForced:E,onStopMicNotForced:T})=>{const b=n(C,R);c=t(b);const A=n(h,S);a=o(A);const O=n(p,y);l=r(O);const N=n(E,T);d=s(N)},g=()=>{c?.(),a?.(),l?.(),d?.()};return{start:C=>{f(C)},stop:()=>{g()}}},rn=Object.freeze(Object.defineProperty({__proto__:null,PURGATORY_CONFERENCE_NUMBER:ne,createSyncMediaState:on,error:Je,getExtraHeaders:Xe,getUserAgent:Ye,hasPurgatory:P,sendDtmfAccumulated:Qe},Symbol.toStringTag,{value:"Module"}));var oe=(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))(oe||{});const sn=e=>[...e.keys()].map(n=>e.get(n)),cn=(e,n)=>sn(e).find(t=>t?.type===n),re=async e=>e.getStats().then(n=>cn(n,"codec")?.mimeType),an=e=>e.find(n=>n.track?.kind==="video"),ln=async(e,n,t)=>{const{isChanged:o,parameters:r}=await q(e,{encodings:[{scaleResolutionDownBy:n.scaleResolutionDownBy,maxBitrate:n.maxBitrate}]});return o&&t&&t(r),{isChanged:o,parameters:r}},se=ue.createStackPromises(),un=async()=>se().catch(e=>{i.logger("videoSendingBalancer: error",e)}),dn=async e=>(se.add(e),un()),J=async({sender:e,scaleResolutionDownBy:n,maxBitrate:t,onSetParameters:o})=>dn(async()=>ln(e,{scaleResolutionDownBy:n,maxBitrate:t},o)),gn=async({sender:e,codec:n},t)=>{const r=Be(n);return J({sender:e,maxBitrate:r,onSetParameters:t,scaleResolutionDownBy:200})},F=async({sender:e,videoTrack:n,codec:t},o)=>{const c=n.getSettings().width,a=Z(c??0,t);return J({sender:e,maxBitrate:a,onSetParameters:o,scaleResolutionDownBy:1})},fn=async({sender:e,videoTrack:n,resolution:t,codec:o},r)=>{const[s,c]=t.split("x"),{maxBitrate:a,scaleResolutionDownBy:l}=ee({videoTrack:n,codec:o,targetSize:{width:Number(s),height:Number(c)}});return J({sender:e,maxBitrate:a,onSetParameters:r,scaleResolutionDownBy:l})},Cn=async({mainCam:e,resolutionMainCam:n,sender:t,videoTrack:o,codec:r},s)=>{switch(e){case i.EEventsMainCAM.PAUSE_MAIN_CAM:return gn({sender:t,codec:r},s);case i.EEventsMainCAM.RESUME_MAIN_CAM:return F({sender:t,videoTrack:o,codec:r},s);case i.EEventsMainCAM.MAX_MAIN_CAM_RESOLUTION:return n!==void 0?fn({sender:t,videoTrack:o,codec:r,resolution:n},s):F({sender:t,videoTrack:o,codec:r},s);case i.EEventsMainCAM.ADMIN_STOP_MAIN_CAM:case i.EEventsMainCAM.ADMIN_START_MAIN_CAM:case void 0:return F({sender:t,videoTrack:o,codec:r},s);default:return F({sender:t,videoTrack:o,codec:r},s)}},X={isChanged:!1,parameters:{encodings:[{}],transactionId:"0",codecs:[],headerExtensions:[],rtcp:{}}},j=async({mainCam:e,resolutionMainCam:n,connection:t,onSetParameters:o,ignoreForCodec:r})=>{const s=t.getSenders(),c=an(s);if(!c?.track)return X;const a=await re(c);return z(a,r)?X:Cn({mainCam:e,resolutionMainCam:n,sender:c,codec:a,videoTrack:c.track},o)},hn=(e,{ignoreForCodec:n,onSetParameters:t}={})=>{const o=async()=>{const{connection:l}=e;if(!l)throw new Error("connection is not exist");return j({connection:l,onSetParameters:t,ignoreForCodec:n})};let r=o;const s=l=>{r=async()=>{const{mainCam:d,resolutionMainCam:f}=l,{connection:g}=e;if(!g)throw new Error("connection is not exist");return j({mainCam:d,resolutionMainCam:f,connection:g,onSetParameters:t,ignoreForCodec:n})},r().catch(_)};return{subscribe:()=>{e.on("api:main-cam-control",s)},unsubscribe:()=>{e.off("api:main-cam-control",s)},balanceByTrack:o,resetMainCamControl(){r=o},async reBalance(){return r()}}};exports.ECallCause=i.ECallCause;exports.EUseLicense=i.EUseLicense;exports.SipConnector=i.SipConnector;exports.disableDebug=i.disableDebug;exports.enableDebug=i.enableDebug;exports.hasCanceledStartPresentationError=i.hasCanceledStartPresentationError;exports.debug=_;exports.EMimeTypesVideoCodecs=oe;exports.SipConnectorFacade=ke;exports.getCodecFromSender=re;exports.hasCanceledCallError=ge;exports.resolveVideoSendingBalancer=hn;exports.setParametersToSender=q;exports.tools=rn;