sip-connector 16.2.0 → 18.0.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 (34) hide show
  1. package/README.md +128 -45
  2. package/dist/@SipConnector-CFYT0HQB.cjs +1 -0
  3. package/dist/{@SipConnector-D1YBDd7g.js → @SipConnector-UTHCoMXw.js} +880 -800
  4. package/dist/ApiManager/__tests-utils__/helpers.d.ts +2 -4
  5. package/dist/ApiManager/constants.d.ts +1 -2
  6. package/dist/ApiManager/eventNames.d.ts +1 -2
  7. package/dist/ApiManager/index.d.ts +1 -0
  8. package/dist/CallManager/@CallManager.d.ts +7 -6
  9. package/dist/CallManager/AbstractCallStrategy.d.ts +5 -1
  10. package/dist/CallManager/MCUCallStrategy.d.ts +1 -0
  11. package/dist/CallManager/eventNames.d.ts +42 -2
  12. package/dist/CallManager/index.d.ts +2 -1
  13. package/dist/CallManager/types.d.ts +5 -4
  14. package/dist/PresentationManager/types.d.ts +1 -1
  15. package/dist/SipConnector/@SipConnector.d.ts +4 -1
  16. package/dist/SipConnector/eventNames.d.ts +1 -1
  17. package/dist/SipConnectorFacade/index.d.ts +1 -1
  18. package/dist/StatsPeerConnection/index.d.ts +1 -1
  19. package/dist/TransceiverManager/@TransceiverManager.d.ts +70 -0
  20. package/dist/TransceiverManager/index.d.ts +1 -0
  21. package/dist/TransceiverManager/types.d.ts +11 -0
  22. package/dist/VideoSendingBalancer/index.d.ts +1 -1
  23. package/dist/__fixtures__/RTCPeerConnectionMock.d.ts +2 -1
  24. package/dist/__fixtures__/RTCRtpTransceiverMock.d.ts +16 -0
  25. package/dist/__fixtures__/eventNames.d.ts +1 -1
  26. package/dist/doMock.cjs +1 -1
  27. package/dist/doMock.js +166 -143
  28. package/dist/index.cjs +1 -1
  29. package/dist/index.js +83 -83
  30. package/package.json +12 -12
  31. package/dist/@SipConnector-B5FFHZzJ.cjs +0 -1
  32. /package/dist/SipConnectorFacade/{SipConnectorFacade.d.ts → @SipConnectorFacade.d.ts} +0 -0
  33. /package/dist/StatsPeerConnection/{StatsPeerConnection.d.ts → @StatsPeerConnection.d.ts} +0 -0
  34. /package/dist/VideoSendingBalancer/{VideoSendingBalancer.d.ts → @VideoSendingBalancer.d.ts} +0 -0
package/dist/doMock.js CHANGED
@@ -1,12 +1,12 @@
1
- import { EventEmitter as D } from "node:events";
2
- import y from "@krivega/jssip/lib/NameAddrHeader";
3
- import L from "@krivega/jssip/lib/URI";
4
- import { IncomingRequest as F } from "@krivega/jssip/lib/SIPMessage";
5
- import { NameAddrHeader as b, URI as E, C as N } from "@krivega/jssip";
6
- import { createAudioMediaStreamTrackMock as V, createVideoMediaStreamTrackMock as k } from "webrtc-mock";
1
+ import { EventEmitter as L } from "node:events";
2
+ import F from "@krivega/jssip/lib/NameAddrHeader";
3
+ import b from "@krivega/jssip/lib/URI";
4
+ import { IncomingRequest as k } from "@krivega/jssip/lib/SIPMessage";
5
+ import { NameAddrHeader as V, URI as E, C as N } from "@krivega/jssip";
6
+ import { createAudioMediaStreamTrackMock as W, createVideoMediaStreamTrackMock as U } from "webrtc-mock";
7
7
  import { Events as T } from "events-constructor";
8
- import { O as W, S as U } from "./@SipConnector-D1YBDd7g.js";
9
- class _ extends F {
8
+ import { O as G, S as H } from "./@SipConnector-UTHCoMXw.js";
9
+ class _ extends k {
10
10
  headers;
11
11
  constructor(e) {
12
12
  super(), this.headers = new Headers(e);
@@ -15,35 +15,33 @@ class _ extends F {
15
15
  return this.headers.get(e) ?? "";
16
16
  }
17
17
  }
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", ue = "admin-start-mic", le = "admin-force-sync-media-state", pe = "participant:added-to-list-moderators", ge = "participant:removed-from-list-moderators", Te = "participant:move-request-to-stream", _e = "participant:move-request-to-spectators", Ie = "participant:move-request-to-participants", Se = "participation:accepting-word-request", we = "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", ye = "progress", Le = "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 = [
19
- G,
20
- H,
21
- q,
18
+ const x = "incomingCall", q = "declinedIncomingCall", Y = "failedIncomingCall", j = "terminatedIncomingCall", P = "connecting", z = "connected", B = "disconnected", $ = "newRTCSession", J = "registered", K = "unregistered", Q = "registrationFailed", X = "newMessage", Z = "sipEvent", ee = "availableSecondRemoteStream", te = "notAvailableSecondRemoteStream", re = "mustStopPresentation", ne = "shareState", oe = "enterRoom", se = "useLicense", ie = "peerconnection:confirmed", ae = "peerconnection:ontrack", ce = "channels", de = "channels:notify", Ee = "ended:fromserver", he = "main-cam-control", me = "admin-stop-main-cam", ue = "admin-start-main-cam", le = "admin-stop-mic", pe = "admin-start-mic", ge = "admin-force-sync-media-state", Te = "participant:added-to-list-moderators", _e = "participant:removed-from-list-moderators", Ie = "participant:move-request-to-stream", we = "participant:move-request-to-spectators", Se = "participant:move-request-to-participants", Ne = "participation:accepting-word-request", fe = "participation:cancelling-word-request", Ce = "webcast:started", Re = "webcast:stopped", Me = "account:changed", Ae = "account:deleted", Oe = "conference:participant-token-issued", Pe = "ended", ve = "sending", De = "reinvite", ye = "replaces", Le = "refer", Fe = "progress", be = "accepted", ke = "confirmed", Ve = "peerconnection", We = "failed", Ue = "muted", Ge = "unmuted", He = "newDTMF", xe = "newInfo", qe = "hold", Ye = "unhold", je = "update", ze = "sdp", Be = "icecandidate", $e = "getusermediafailed", Je = "peerconnection:createofferfailed", Ke = "peerconnection:createanswerfailed", Qe = "peerconnection:setlocaldescriptionfailed", Xe = "peerconnection:setremotedescriptionfailed", Ze = "presentation:start", et = "presentation:started", tt = "presentation:end", rt = "presentation:ended", nt = "presentation:failed", ot = [
22
19
  x,
23
- Se,
24
- we,
25
- Te,
26
- ae,
20
+ q,
21
+ j,
22
+ Y,
23
+ Ne,
24
+ fe,
25
+ Ie,
26
+ de,
27
+ Oe,
27
28
  Me,
29
+ Ae,
28
30
  Ce,
29
31
  Re,
30
- Ne,
31
- fe,
32
- pe,
33
- ge
34
- ], O = [
35
- A,
36
- Y,
37
- j,
32
+ Te,
33
+ _e
34
+ ], v = [
35
+ P,
38
36
  z,
39
37
  B,
40
38
  $,
41
39
  J,
42
40
  K,
43
- Q
44
- ], nt = [
41
+ Q,
45
42
  X,
46
- Z,
43
+ Z
44
+ ], st = [
47
45
  ee,
48
46
  te,
49
47
  re,
@@ -51,28 +49,28 @@ const G = "incomingCall", H = "declinedIncomingCall", x = "failedIncomingCall",
51
49
  oe,
52
50
  se,
53
51
  ie,
52
+ ae,
54
53
  ce,
55
- de,
56
- he,
57
54
  Ee,
58
- me,
55
+ he,
59
56
  ue,
57
+ me,
60
58
  le,
61
- _e,
62
- Ie
59
+ pe,
60
+ ge,
61
+ we,
62
+ Se
63
63
  ], p = [
64
- Ae,
65
- A,
66
- Oe,
67
64
  Pe,
65
+ P,
68
66
  ve,
69
67
  De,
70
68
  ye,
71
69
  Le,
72
70
  Fe,
73
71
  be,
74
- Ve,
75
72
  ke,
73
+ Ve,
76
74
  We,
77
75
  Ue,
78
76
  Ge,
@@ -90,14 +88,16 @@ const G = "incomingCall", H = "declinedIncomingCall", x = "failedIncomingCall",
90
88
  Xe,
91
89
  Ze,
92
90
  et,
93
- tt
91
+ tt,
92
+ rt,
93
+ nt
94
94
  ];
95
- [...O, ...rt];
95
+ [...v, ...ot];
96
96
  [
97
97
  ...p,
98
- ...nt
98
+ ...st
99
99
  ];
100
- class ot {
100
+ class it {
101
101
  originator;
102
102
  connection;
103
103
  events;
@@ -268,7 +268,7 @@ class ot {
268
268
  return !0;
269
269
  }
270
270
  }
271
- class st {
271
+ class f {
272
272
  stats = (/* @__PURE__ */ new Map()).set("codec", { mimeType: "video/h264" });
273
273
  dtmf = null;
274
274
  track = null;
@@ -311,8 +311,26 @@ class st {
311
311
  throw new Error("Method not implemented.");
312
312
  }
313
313
  }
314
- const it = ["track"];
315
- class at {
314
+ class C {
315
+ currentDirection = "sendrecv";
316
+ direction = "sendrecv";
317
+ // eslint-disable-next-line unicorn/no-null
318
+ mid = null;
319
+ receiver;
320
+ sender;
321
+ stopped = !1;
322
+ constructor(e) {
323
+ this.sender = e;
324
+ }
325
+ // eslint-disable-next-line @typescript-eslint/class-methods-use-this
326
+ setCodecPreferences(e) {
327
+ }
328
+ // eslint-disable-next-line @typescript-eslint/class-methods-use-this
329
+ stop() {
330
+ }
331
+ }
332
+ const at = ["track"];
333
+ class ct {
316
334
  senders = [];
317
335
  receivers = [];
318
336
  canTrickleIceCandidates;
@@ -343,7 +361,7 @@ class at {
343
361
  signalingState;
344
362
  events;
345
363
  constructor(e, t) {
346
- this.events = new T(it), this.receivers = t.map((r) => ({ track: r }));
364
+ this.events = new T(at), this.receivers = t.map((r) => ({ track: r }));
347
365
  }
348
366
  getRemoteStreams() {
349
367
  throw new Error("Method not implemented.");
@@ -404,19 +422,24 @@ class at {
404
422
  }
405
423
  getReceivers = () => this.receivers;
406
424
  getSenders = () => this.senders;
407
- addTrack = (e) => {
408
- const t = new st({ track: e });
409
- return this.senders.push(t), this.events.trigger("track", { track: e }), t;
425
+ addTrack = (e, ...t) => {
426
+ const r = new f({ track: e }), n = new C(r);
427
+ return n.mid = e.kind === "audio" ? "0" : "1", this.senders.push(r), this.events.trigger("track", { track: e, transceiver: n }), r;
428
+ };
429
+ // Дополнительный метод для тестов с возможностью установки mid
430
+ addTrackWithMid = (e, t) => {
431
+ const r = new f({ track: e }), n = new C(r);
432
+ return t === void 0 ? n.mid = e.kind === "audio" ? "0" : "1" : n.mid = t, this.senders.push(r), this.events.trigger("track", { track: e, transceiver: n }), r;
410
433
  };
411
434
  }
412
- function ct(n) {
413
- const e = n.match(/(purgatory)|[\d.]+/g);
435
+ function dt(o) {
436
+ const e = o.match(/(purgatory)|[\d.]+/g);
414
437
  if (!e)
415
438
  throw new Error("wrong sip url");
416
439
  return e[0];
417
440
  }
418
- const f = 400, dt = "777", Et = (n) => n.getVideoTracks().length > 0;
419
- class i extends ot {
441
+ const R = 400, Et = "777", ht = (o) => o.getVideoTracks().length > 0;
442
+ class i extends it {
420
443
  static presentationError;
421
444
  static startPresentationError;
422
445
  static countStartPresentationError = Number.POSITIVE_INFINITY;
@@ -441,7 +464,7 @@ class i extends ot {
441
464
  }, 100), setTimeout(() => {
442
465
  this.trigger("confirmed");
443
466
  }, 200);
444
- }, f);
467
+ }, R);
445
468
  });
446
469
  replaceMediaStream = jest.fn(async (e) => {
447
470
  });
@@ -458,13 +481,13 @@ class i extends ot {
458
481
  constructor({
459
482
  eventHandlers: e,
460
483
  originator: t,
461
- remoteIdentity: r = new b(
484
+ remoteIdentity: r = new V(
462
485
  new E("sip", "caller1", "test1.com", 5060),
463
486
  "Test Caller 1"
464
487
  ),
465
- delayStartPresentation: s = 0
488
+ delayStartPresentation: n = 0
466
489
  }) {
467
- super({ originator: t, eventHandlers: e, remoteIdentity: r }), this.delayStartPresentation = s;
490
+ super({ originator: t, eventHandlers: e, remoteIdentity: r }), this.delayStartPresentation = n;
468
491
  }
469
492
  static setPresentationError(e) {
470
493
  this.presentationError = e;
@@ -500,28 +523,28 @@ class i extends ot {
500
523
  return e ? (this.createPeerconnection(e), !0) : !1;
501
524
  }
502
525
  createPeerconnection(e) {
503
- const t = V();
526
+ const t = W();
504
527
  t.id = "mainaudio1";
505
528
  const r = [t];
506
- if (Et(e)) {
507
- const a = k();
529
+ if (ht(e)) {
530
+ const a = U();
508
531
  a.id = "mainvideo1", r.push(a);
509
532
  }
510
- this.connection = new at(void 0, r), this.addStream(e), this.trigger("peerconnection", { peerconnection: this.connection });
533
+ this.connection = new ct(void 0, r), this.addStream(e), this.trigger("peerconnection", { peerconnection: this.connection });
511
534
  }
512
535
  connect(e, { mediaStream: t } = {}) {
513
- const r = ct(e);
536
+ const r = dt(e);
514
537
  return this.initPeerconnection(t), this.timeoutConnect = setTimeout(() => {
515
- e.includes(dt) ? this.trigger("failed", {
538
+ e.includes(Et) ? this.trigger("failed", {
516
539
  originator: "remote",
517
540
  message: "IncomingResponse",
518
541
  cause: "Rejected"
519
542
  }) : (this.trigger("connecting"), this.timeoutNewInfo = setTimeout(() => {
520
543
  this.newInfo({
521
- originator: W.REMOTE,
544
+ originator: G.REMOTE,
522
545
  // @ts-expect-error
523
546
  request: {
524
- getHeader: (s) => s === "content-type" ? "application/vinteo.webrtc.roomname" : s === "x-webrtc-enter-room" ? r : s === "x-webrtc-participant-name" ? "Test Caller 1" : ""
547
+ getHeader: (n) => n === "content-type" ? "application/vinteo.webrtc.roomname" : n === "x-webrtc-enter-room" ? r : n === "x-webrtc-participant-name" ? "Test Caller 1" : ""
525
548
  }
526
549
  });
527
550
  }, 100), this.timeoutAccepted = setTimeout(() => {
@@ -529,7 +552,7 @@ class i extends ot {
529
552
  }, 200), this.timeoutConfirmed = setTimeout(() => {
530
553
  this.trigger("confirmed");
531
554
  }, 300));
532
- }, f), this.connection;
555
+ }, R), this.connection;
533
556
  }
534
557
  terminate({ status_code: e, cause: t } = {}) {
535
558
  return this.status_code = e, this.trigger("ended", { status_code: e, cause: t, originator: "local" }), this.isEndedInner = !1, this;
@@ -594,7 +617,7 @@ class i extends ot {
594
617
  }
595
618
  /* eslint-enable no-param-reassign */
596
619
  }
597
- class ht {
620
+ class mt {
598
621
  extraHeaders = [];
599
622
  setExtraHeaders(e) {
600
623
  this.extraHeaders = e;
@@ -603,18 +626,18 @@ class ht {
603
626
  setExtraContactParams() {
604
627
  }
605
628
  }
606
- const c = "PASSWORD_CORRECT", C = "PASSWORD_CORRECT_2", mt = "NAME_INCORRECT", d = 400, l = {
629
+ const c = "PASSWORD_CORRECT", M = "PASSWORD_CORRECT_2", ut = "NAME_INCORRECT", d = 400, l = {
607
630
  url: "wss://sipServerUrl/webrtc/wss/",
608
631
  sip_uri: "sip:sipServerUrl;transport=ws",
609
632
  via_transport: "WSS"
610
- }, R = {
633
+ }, A = {
611
634
  status_code: 200,
612
635
  reason_phrase: "OK"
613
- }, M = {
636
+ }, O = {
614
637
  status_code: 401,
615
638
  reason_phrase: "Unauthorized"
616
639
  };
617
- class o {
640
+ class s {
618
641
  static isAvailableTelephony = !0;
619
642
  static startError;
620
643
  static countStartError = Number.POSITIVE_INFINITY;
@@ -624,8 +647,8 @@ class o {
624
647
  // @ts-expect-error – Jest создаёт функцию-замок.
625
648
  call = jest.fn(
626
649
  (e, t) => {
627
- const { mediaStream: r, eventHandlers: s } = t;
628
- return this.session = new i({ eventHandlers: s, originator: "local" }), this.session.connect(e, { mediaStream: r }), this.session;
650
+ const { mediaStream: r, eventHandlers: n } = t;
651
+ return this.session = new i({ eventHandlers: n, originator: "local" }), this.session.connect(e, { mediaStream: r }), this.session;
629
652
  }
630
653
  );
631
654
  sendOptions = jest.fn(
@@ -637,8 +660,8 @@ class o {
637
660
  * start – имитирует запуск UA.
638
661
  */
639
662
  start = jest.fn(() => {
640
- if (o.countStarts += 1, o.startError && o.countStarts < o.countStartError) {
641
- this.trigger("disconnected", o.startError);
663
+ if (s.countStarts += 1, s.startError && s.countStarts < s.countStartError) {
664
+ this.trigger("disconnected", s.startError);
642
665
  return;
643
666
  }
644
667
  this.register();
@@ -660,27 +683,27 @@ class o {
660
683
  isConnectedInner;
661
684
  configuration;
662
685
  constructor(e) {
663
- this.events = new T(O);
664
- const [t, r] = e.uri.split(":"), [s, a] = r.split("@"), u = {
686
+ this.events = new T(v);
687
+ const [t, r] = e.uri.split(":"), [n, a] = r.split("@"), u = {
665
688
  ...e,
666
- uri: new E(t, s, a)
689
+ uri: new E(t, n, a)
667
690
  };
668
- this.configuration = u, this.registratorInner = new ht();
691
+ this.configuration = u, this.registratorInner = new mt();
669
692
  }
670
693
  static setStartError(e, { count: t = Number.POSITIVE_INFINITY } = {}) {
671
- o.startError = e, o.countStartError = t;
694
+ s.startError = e, s.countStartError = t;
672
695
  }
673
696
  static resetStartError() {
674
- o.startError = void 0, o.countStartError = Number.POSITIVE_INFINITY, o.countStarts = 0;
697
+ s.startError = void 0, s.countStartError = Number.POSITIVE_INFINITY, s.countStarts = 0;
675
698
  }
676
699
  static setAvailableTelephony() {
677
- o.isAvailableTelephony = !0;
700
+ s.isAvailableTelephony = !0;
678
701
  }
679
702
  static setNotAvailableTelephony() {
680
- o.isAvailableTelephony = !1;
703
+ s.isAvailableTelephony = !1;
681
704
  }
682
705
  static reset() {
683
- o.resetStartError(), o.setAvailableTelephony();
706
+ s.resetStartError(), s.setAvailableTelephony();
684
707
  }
685
708
  on(e, t) {
686
709
  return this.events.on(e, t), this;
@@ -710,13 +733,13 @@ class o {
710
733
  register() {
711
734
  this.startedTimeout && clearTimeout(this.startedTimeout);
712
735
  const { password: e, register: t, uri: r } = this.configuration;
713
- t === !0 && r.user.includes(mt) ? (this.isRegisteredInner = !1, this.isConnectedInner = !1, this.startedTimeout = setTimeout(() => {
714
- this.trigger("registrationFailed", { response: M, cause: N.causes.REJECTED });
715
- }, d)) : !this.isRegistered() && t === !0 && (e === c || e === C) ? (this.isRegisteredInner = !0, this.startedTimeout = setTimeout(() => {
716
- this.trigger("registered", { response: R });
717
- }, d)) : t === !0 && e !== c && e !== C && (this.isRegisteredInner = !1, this.isConnectedInner = !1, this.startedTimeout = setTimeout(() => {
718
- this.trigger("registrationFailed", { response: M, cause: N.causes.REJECTED });
719
- }, d)), o.isAvailableTelephony ? (this.trigger("connected", { socket: l }), this.isConnectedInner = !0) : this.stop();
736
+ t === !0 && r.user.includes(ut) ? (this.isRegisteredInner = !1, this.isConnectedInner = !1, this.startedTimeout = setTimeout(() => {
737
+ this.trigger("registrationFailed", { response: O, cause: N.causes.REJECTED });
738
+ }, d)) : !this.isRegistered() && t === !0 && (e === c || e === M) ? (this.isRegisteredInner = !0, this.startedTimeout = setTimeout(() => {
739
+ this.trigger("registered", { response: A });
740
+ }, d)) : t === !0 && e !== c && e !== M && (this.isRegisteredInner = !1, this.isConnectedInner = !1, this.startedTimeout = setTimeout(() => {
741
+ this.trigger("registrationFailed", { response: O, cause: N.causes.REJECTED });
742
+ }, d)), s.isAvailableTelephony ? (this.trigger("connected", { socket: l }), this.isConnectedInner = !0) : this.stop();
720
743
  }
721
744
  /**
722
745
  * unregister
@@ -724,7 +747,7 @@ class o {
724
747
  * @returns {undefined}
725
748
  */
726
749
  unregister() {
727
- this.isRegisteredInner = !1, this.isConnectedInner = !1, this.trigger("unregistered", { response: R });
750
+ this.isRegisteredInner = !1, this.isConnectedInner = !1, this.trigger("unregistered", { response: A });
728
751
  }
729
752
  isRegistered() {
730
753
  return this.isRegisteredInner === !0;
@@ -747,93 +770,93 @@ class o {
747
770
  return this.registratorInner;
748
771
  }
749
772
  }
750
- class ut {
773
+ class lt {
751
774
  url;
752
775
  constructor(e) {
753
776
  this.url = e;
754
777
  }
755
778
  }
756
- class lt extends D {
779
+ class pt extends L {
757
780
  contentType;
758
781
  body;
759
782
  constructor(e, t) {
760
783
  super(), this.contentType = e, this.body = t;
761
784
  }
762
785
  }
763
- const g = "remote", pt = (n, e) => {
786
+ const g = "remote", gt = (o, e) => {
764
787
  const t = new _(e), r = {
765
788
  originator: g,
766
789
  request: t,
767
- info: new lt("", "")
790
+ info: new pt("", "")
768
791
  };
769
- n.newInfo(r);
770
- }, gt = (n, e) => {
792
+ o.newInfo(r);
793
+ }, Tt = (o, e) => {
771
794
  const r = { event: "sipEvent", request: new _(e) };
772
- n.newSipEvent(r);
773
- }, Tt = (n, {
795
+ o.newSipEvent(r);
796
+ }, _t = (o, {
774
797
  incomingNumber: e = "1234",
775
798
  displayName: t,
776
799
  host: r
777
800
  }) => {
778
- const s = new i({ originator: g, eventHandlers: {} }), a = new L("sip", e, r);
779
- s.remote_identity = new y(a, t);
801
+ const n = new i({ originator: g, eventHandlers: {} }), a = new b("sip", e, r);
802
+ n.remote_identity = new F(a, t);
780
803
  const u = new _([]);
781
- n.trigger("newRTCSession", {
804
+ o.trigger("newRTCSession", {
782
805
  originator: g,
783
- session: s,
806
+ session: n,
784
807
  request: u
785
808
  });
786
- }, _t = (n, e) => {
787
- e ? n.trigger("failed", e) : n.trigger("failed", n);
788
- }, P = {
789
- triggerNewInfo: pt,
790
- triggerNewSipEvent: gt,
791
- triggerIncomingSession: Tt,
792
- triggerFailIncomingSession: _t,
793
- WebSocketInterface: ut,
794
- UA: o,
809
+ }, It = (o, e) => {
810
+ e ? o.trigger("failed", e) : o.trigger("failed", o);
811
+ }, D = {
812
+ triggerNewInfo: gt,
813
+ triggerNewSipEvent: Tt,
814
+ triggerIncomingSession: _t,
815
+ triggerFailIncomingSession: It,
816
+ WebSocketInterface: lt,
817
+ UA: s,
795
818
  C: {
796
819
  INVITE: "INVITE"
797
820
  }
798
- }, I = "user", h = "displayName", S = "SIP_SERVER_URL", v = "SIP_WEB_SOCKET_SERVER_URL", It = new P.WebSocketInterface(v), w = {
821
+ }, I = "user", h = "displayName", w = "SIP_SERVER_URL", y = "SIP_WEB_SOCKET_SERVER_URL", wt = new D.WebSocketInterface(y), S = {
799
822
  userAgent: "Chrome",
800
- sipServerUrl: S,
801
- sipWebSocketServerURL: v
802
- }, vt = {
803
- ...w
823
+ sipServerUrl: w,
824
+ sipWebSocketServerURL: y
825
+ }, Dt = {
826
+ ...S
804
827
  }, St = {
805
- ...w,
828
+ ...S,
806
829
  user: I,
807
830
  password: c,
808
831
  register: !0
809
- }, Dt = {
832
+ }, yt = {
810
833
  ...St,
811
834
  displayName: h
812
- }, yt = {
813
- ...w,
835
+ }, Lt = {
836
+ ...S,
814
837
  displayName: h,
815
838
  register: !1
816
839
  }, m = {
817
840
  session_timers: !1,
818
- sockets: [It],
841
+ sockets: [wt],
819
842
  user_agent: "Chrome",
820
843
  sdpSemantics: "unified-plan",
821
844
  register_expires: 300,
822
845
  connection_recovery_max_interval: 6,
823
846
  connection_recovery_min_interval: 2
824
- }, Lt = {
847
+ }, Ft = {
825
848
  ...m,
826
849
  password: c,
827
- uri: new E("sip", I, S),
850
+ uri: new E("sip", I, w),
828
851
  display_name: "",
829
852
  register: !0
830
- }, Ft = {
853
+ }, bt = {
831
854
  ...m,
832
855
  password: c,
833
- uri: new E("sip", I, S),
856
+ uri: new E("sip", I, w),
834
857
  display_name: h,
835
858
  register: !0
836
- }, bt = {
859
+ }, kt = {
837
860
  ...m,
838
861
  display_name: h,
839
862
  register: !1
@@ -841,28 +864,28 @@ const g = "remote", pt = (n, e) => {
841
864
  ...m,
842
865
  display_name: "",
843
866
  register: !1
844
- }, wt = "10.10.10.10", kt = [`X-Vinteo-Remote: ${wt}`], Wt = () => new U({
845
- JsSIP: P
867
+ }, Nt = "10.10.10.10", Wt = [`X-Vinteo-Remote: ${Nt}`], Ut = () => new H({
868
+ JsSIP: D
846
869
  });
847
870
  export {
848
- dt as FAILED_CONFERENCE_NUMBER,
849
- P as JsSIP,
850
- mt as NAME_INCORRECT,
871
+ Et as FAILED_CONFERENCE_NUMBER,
872
+ D as JsSIP,
873
+ ut as NAME_INCORRECT,
851
874
  c as PASSWORD_CORRECT,
852
- C as PASSWORD_CORRECT_2,
853
- S as SIP_SERVER_URL,
854
- v as SIP_WEB_SOCKET_SERVER_URL,
875
+ M as PASSWORD_CORRECT_2,
876
+ w as SIP_SERVER_URL,
877
+ y as SIP_WEB_SOCKET_SERVER_URL,
855
878
  St as dataForConnectionWithAuthorization,
856
- Dt as dataForConnectionWithAuthorizationWithDisplayName,
857
- yt as dataForConnectionWithoutAuthorization,
858
- vt as dataForConnectionWithoutAuthorizationWithoutDisplayName,
879
+ yt as dataForConnectionWithAuthorizationWithDisplayName,
880
+ Lt as dataForConnectionWithoutAuthorization,
881
+ Dt as dataForConnectionWithoutAuthorizationWithoutDisplayName,
859
882
  h as displayName,
860
- Wt as doMockSipConnector,
861
- kt as extraHeadersRemoteAddress,
862
- wt as remoteAddress,
863
- Lt as uaConfigurationWithAuthorization,
864
- Ft as uaConfigurationWithAuthorizationWithDisplayName,
865
- bt as uaConfigurationWithoutAuthorization,
883
+ Ut as doMockSipConnector,
884
+ Wt as extraHeadersRemoteAddress,
885
+ Nt as remoteAddress,
886
+ Ft as uaConfigurationWithAuthorization,
887
+ bt as uaConfigurationWithAuthorizationWithDisplayName,
888
+ kt as uaConfigurationWithoutAuthorization,
866
889
  Vt as uaConfigurationWithoutAuthorizationWithoutDisplayName,
867
890
  I as user
868
891
  };
package/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require("events-constructor");const r=require("./@SipConnector-B5FFHZzJ.cjs"),x=require("@krivega/cancelable-promise"),j=require("repeated-calls"),K=require("ts-debounce"),X=require("ua-parser-js"),Y=require("sequent-promises"),G=n=>n instanceof Object&&("originator"in n||"cause"in n),J=n=>{if(x.isCanceledError(n))return!0;if(!G(n))return!1;const{originator:e,cause:t}=n;return typeof t=="string"?t===r.ECallCause.REQUEST_TIMEOUT||t===r.ECallCause.REJECTED||e===r.Originator.LOCAL&&(t===r.ECallCause.CANCELED||t===r.ECallCause.BYE):!1},z=()=>globalThis.process?.versions?.electron!==void 0,B=()=>{const n=new X.UAParser,{name:e}=n.getBrowser(),t=z();return{isChrome:e==="Chrome"||t}},A=n=>{const{url:e,cause:t}=n;let o=e;return(t===r.ECallCause.BAD_MEDIA_DESCRIPTION||t===r.ECallCause.NOT_FOUND)&&(o=`${n.message.to.uri.user}@${n.message.to.uri.host}`),o};var $=(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))($||{});const Q=new Error("Unknown error"),Z=(n=Q)=>{const{cause:e,socket:t}=n;let o="CONNECT_SERVER_FAILED";switch(e){case"Forbidden":{o="WRONG_USER_OR_PASSWORD";break}case r.ECallCause.BAD_MEDIA_DESCRIPTION:{o="BAD_MEDIA_ERROR";break}case r.ECallCause.NOT_FOUND:{o="NOT_FOUND_ERROR";break}default:t!==void 0&&t._ws?.readyState===3?o="WS_CONNECTION_FAILED":A(n)!==void 0&&A(n)!==""&&(o="CONNECT_SERVER_FAILED_BY_LINK")}return o},ee=n=>{let e="";try{e=JSON.stringify(n)}catch(t){r.logger("failed to stringify message",t)}return e},ne=new Error("Unknown error"),te=(n=ne)=>{const{code:e,cause:t,message:o}=n,a=A(n),s={code:"",cause:"",message:""};return typeof o=="object"&&o!==null?s.message=ee(o):o&&(s.message=String(o)),a!==void 0&&a!==""&&(s.link=a),e!==void 0&&e!==""&&(s.code=e),t!==void 0&&t!==""&&(s.cause=t),s},re=Object.freeze(Object.defineProperty({__proto__:null,EErrorTypes:$,getLinkError:A,getTypeFromError:Z,getValuesFromError:te},Symbol.toStringTag,{value:"Module"})),oe=({sessionId:n,remoteAddress:e,isMutedAudio:t,isMutedVideo:o,isRegistered:a,isPresentationCall:s})=>{const c=[],l=t?"0":"1",u=o?"0":"1";return c.push(`X-Vinteo-Mic-State: ${l}`,`X-Vinteo-MainCam-State: ${u}`),(a===!1||a===void 0)&&c.push("X-Vinteo-Purgatory-Call: yes"),n!==void 0&&n!==""&&c.push(`X-Vinteo-Session: ${n}`),s===!0&&c.push("X-Vinteo-Presentation-Call: yes"),e!==void 0&&e!==""&&c.push(`X-Vinteo-Remote: ${e}`),c},se="[@*!|]",ae="_",ce=n=>{let e=n;return e=e.replaceAll(new RegExp(se,"g"),ae),e},ie=({appName:n,appVersion:e,browserName:t,browserVersion:o})=>{const s=`${ce(n)} ${e}`;return`ChromeNew - ${t===void 0?s:`${t} ${o}, ${s}`}`},le=({isUnifiedSdpSemantic:n,appVersion:e,browserName:t,browserVersion:o,appName:a})=>n?ie({appVersion:e,browserName:t,browserVersion:o,appName:a}):"Chrome",H="purgatory",D=n=>n===H,ue=n=>e=>[...e].map(o=>async()=>n(o)),de=async({accumulatedKeys:n,sendKey:e,canRunTask:t})=>{const a=ue(e)(n);return Y.sequentPromises(a,t)},ge=n=>t=>(r.logger("onStartMainCam"),n.on("api:admin-start-main-cam",t)),Se=n=>t=>(r.logger("onStartMic"),n.on("api:admin-start-mic",t)),Ce=n=>t=>(r.logger("onStopMainCam"),n.on("api:admin-stop-main-cam",t)),me=n=>t=>(r.logger("onStopMic"),n.on("api:admin-stop-mic",t)),fe=({sipConnector:n})=>{const e=(g,C)=>({isSyncForced:S})=>{if(S===!0){g();return}C()},t=ge(n),o=Ce(n),a=Se(n),s=me(n);let c,l,u,f;const h=({onStartMainCamForced:g,onStartMainCamNotForced:C,onStopMainCamForced:S,onStopMainCamNotForced:p,onStartMicForced:E,onStartMicNotForced:b,onStopMicForced:O,onStopMicNotForced:v})=>{const T=e(g,C);c=t(T);const P=e(S,p);l=o(P);const _=e(E,b);u=a(_);const m=e(O,v);f=s(m)},d=()=>{c?.(),l?.(),u?.(),f?.()};return{start:g=>{h(g)},stop:()=>{d()}}},he=Object.freeze(Object.defineProperty({__proto__:null,PURGATORY_CONFERENCE_NUMBER:H,createSyncMediaState:fe,createUaParser:B,error:re,getExtraHeaders:oe,getUserAgent:le,hasPurgatory:D,prepareMediaStream:r.prepareMediaStream,sendDtmfAccumulated:de,setEncodingsToSender:r.setEncodingsToSender,setParametersToSender:r.setParametersToSender},Symbol.toStringTag,{value:"Module"})),pe=()=>B().isChrome,U=n=>{if(!x.isCanceledError(n)&&!j.hasCanceledError(n))throw n;return{isSuccessful:!1}},Re=({kind:n,readyState:e})=>n==="video"&&e==="live",k=(n,e,{onEnterPurgatory:t,onEnterConference:o})=>{D(n)?t&&t():o&&o({isSuccessProgressCall:e})},L=(n,e)=>{n(),e&&e()},V=(n,e,t)=>{throw n&&n(),e(),t},Ee=new Set(["on","once","onceRace","wait","off","sendDTMF","hangUp","declineToIncomingCall","sendChannels","checkTelephony","waitChannels","ping","connection","isConfigured","isRegistered"]);class be{on;once;onceRace;wait;off;sendDTMF;hangUp;declineToIncomingCall;sendChannels;checkTelephony;waitChannels;ping;connection;isConfigured;isRegistered;sipConnector;constructor(e){return this.sipConnector=e,new Proxy(this,{get:(t,o,a)=>{if(typeof o=="string"&&Ee.has(o)&&o in this.sipConnector){const c=Reflect.get(this.sipConnector,o,this.sipConnector);return typeof c=="function"?c.bind(this.sipConnector):c}const s=Reflect.get(t,o,a);return typeof s=="function"?s.bind(t):s}})}connectToServer=async e=>{const{userAgent:t,sipWebSocketServerURL:o,sipServerUrl:a,remoteAddress:s,displayName:c,name:l,password:u,isRegisteredUser:f,isDisconnectOnFail:h}=e;return r.logger("connectToServer",e),this.sipConnector.connect({userAgent:t,sipWebSocketServerURL:o,sipServerUrl:a,remoteAddress:s,displayName:c,password:u,user:l,register:f}).then(d=>(r.logger("connectToServer then"),{ua:d,isSuccessful:!0})).catch(async d=>(r.logger("connectToServer catch: error",d),h===!0?this.sipConnector.disconnect().then(()=>U(d)).catch(()=>U(d)):U(d)))};callToServer=async e=>{const{conference:t,mediaStream:o,extraHeaders:a,iceServers:s,contentHint:c,degradationPreference:l,sendEncodings:u,offerToReceiveAudio:f,offerToReceiveVideo:h,directionVideo:d,directionAudio:N,setRemoteStreams:y,onBeforeProgressCall:g,onSuccessProgressCall:C,onEnterPurgatory:S,onEnterConference:p,onFailProgressCall:E,onFinishProgressCall:b,onEndedCall:O,onAddedTransceiver:v}=e,T=this.resolveHandleReadyRemoteStreamsDebounced({onReadyRemoteStreams:y}),P=this.resolveHandleReadyRemoteStreams({onReadyRemoteStreams:()=>{T().catch(r.logger)}});r.logger("callToServer",e);const _=async()=>(r.logger("startCall"),this.sipConnector.call({mediaStream:o,extraHeaders:a,iceServers:s,contentHint:c,offerToReceiveAudio:f,offerToReceiveVideo:h,directionVideo:d,directionAudio:N,degradationPreference:l,onAddedTransceiver:v,sendEncodings:u,number:t,ontrack:P}));let m=!1,R;const M=(r.logger("subscribeEnterConference: onEnterConference",p),this.sipConnector.on("api:enterRoom",({room:i})=>{r.logger("enterRoom",{_room:i,isSuccessProgressCall:m}),R=i,(S??p)&&k(R,m,{onEnterPurgatory:S,onEnterConference:p})})),F=i=>(r.logger("onSuccess"),m=!0,T().catch(r.logger),C&&C({isPurgatory:D(R)}),this.sipConnector.onceRace(["call:ended","call:failed"],()=>{L(M,O)}),i),w=i=>(r.logger("onFail"),V(E,M,i)),I=()=>{r.logger("onFinish"),b&&b()};return r.logger("onBeforeProgressCall"),g&&g(t),_().then(F).catch(i=>w(i)).finally(I)};disconnectFromServer=async()=>this.sipConnector.disconnect().then(()=>(r.logger("disconnectFromServer: then"),{isSuccessful:!0})).catch(e=>(r.logger("disconnectFromServer: catch",e),{isSuccessful:!1}));answerToIncomingCall=async e=>{const{mediaStream:t,extraHeaders:o,iceServers:a,contentHint:s,degradationPreference:c,sendEncodings:l,offerToReceiveAudio:u,offerToReceiveVideo:f,directionVideo:h,directionAudio:d,setRemoteStreams:N,onBeforeProgressCall:y,onSuccessProgressCall:g,onEnterPurgatory:C,onEnterConference:S,onFailProgressCall:p,onFinishProgressCall:E,onEndedCall:b,onAddedTransceiver:O}=e,v=this.resolveHandleReadyRemoteStreamsDebounced({onReadyRemoteStreams:N}),T=this.resolveHandleReadyRemoteStreams({onReadyRemoteStreams:()=>{v().catch(r.logger)}});r.logger("answerToIncomingCall",e);const P=async()=>this.sipConnector.answerToIncomingCall({mediaStream:t,extraHeaders:o,iceServers:a,contentHint:s,offerToReceiveAudio:u,offerToReceiveVideo:f,directionVideo:h,directionAudio:d,degradationPreference:c,onAddedTransceiver:O,sendEncodings:l,ontrack:T}),_=()=>{const{remoteCallerData:i}=this.sipConnector;return i.incomingNumber};let m=!1,R;const M=(r.logger("subscribeEnterConference: onEnterConference",S),this.sipConnector.on("api:enterRoom",i=>{r.logger("enterRoom",{_room:i,isSuccessProgressCall:m}),R=i,(C??S)&&k(R,m,{onEnterPurgatory:C,onEnterConference:S})})),F=i=>(r.logger("onSuccess"),m=!0,v().catch(r.logger),g&&g({isPurgatory:D(R)}),this.sipConnector.onceRace(["call:ended","call:failed"],()=>{L(M,b)}),i),w=i=>(r.logger("onFail"),V(p,M,i)),I=()=>{r.logger("onFinish"),E&&E()};if(r.logger("onBeforeProgressCall"),y){const i=_();y(i)}return P().then(F).catch(i=>w(i)).finally(I)};updatePresentation=async({mediaStream:e,isP2P:t,contentHint:o,degradationPreference:a,sendEncodings:s,onAddedTransceiver:c})=>(r.logger("updatePresentation"),this.sipConnector.updatePresentation(e,{isP2P:t,contentHint:o,degradationPreference:a,onAddedTransceiver:c,sendEncodings:s}));startPresentation=async({mediaStream:e,isP2P:t,contentHint:o,degradationPreference:a,sendEncodings:s,callLimit:c,onAddedTransceiver:l})=>(r.logger("startPresentation"),this.sipConnector.startPresentation(e,{isP2P:t,contentHint:o,callLimit:c,degradationPreference:a,onAddedTransceiver:l,sendEncodings:s}));stopShareSipConnector=async({isP2P:e=!1}={})=>(r.logger("stopShareSipConnector"),this.sipConnector.stopPresentation({isP2P:e}).catch(t=>{r.logger(t)}));sendRefusalToTurnOnMic=async()=>{r.logger("sendRefusalToTurnOnMic"),await this.sipConnector.sendRefusalToTurnOnMic().catch(e=>{r.logger("sendRefusalToTurnOnMic: error",e)})};sendRefusalToTurnOnCam=async()=>{r.logger("sendRefusalToTurnOnCam"),await this.sipConnector.sendRefusalToTurnOnCam().catch(e=>{r.logger("sendRefusalToTurnOnCam: error",e)})};sendMediaState=async({isEnabledCam:e,isEnabledMic:t})=>{r.logger("sendMediaState"),await this.sipConnector.sendMediaState({cam:e,mic:t})};replaceMediaStream=async(e,{deleteExisting:t,addMissing:o,forceRenegotiation:a,contentHint:s,degradationPreference:c,sendEncodings:l,onAddedTransceiver:u})=>(r.logger("replaceMediaStream"),this.sipConnector.replaceMediaStream(e,{deleteExisting:t,addMissing:o,forceRenegotiation:a,contentHint:s,degradationPreference:c,onAddedTransceiver:u,sendEncodings:l}));askPermissionToEnableCam=async()=>{r.logger("askPermissionToEnableCam"),await this.sipConnector.askPermissionToEnableCam()};resolveHandleReadyRemoteStreamsDebounced=({onReadyRemoteStreams:e})=>K.debounce(()=>{const t=this.sipConnector.getRemoteStreams();r.logger("remoteStreams",t),t&&e(t)},200);resolveHandleReadyRemoteStreams=({onReadyRemoteStreams:e})=>({track:t})=>{Re(t)&&e()};getRemoteStreams=()=>(r.logger("getRemoteStreams"),this.sipConnector.getRemoteStreams());onUseLicense=e=>(r.logger("onUseLicense"),this.sipConnector.on("api:useLicense",e));onMustStopPresentation=e=>(r.logger("onMustStopPresentation"),this.sipConnector.on("api:mustStopPresentation",e));onMoveToSpectators=e=>(r.logger("onMoveToSpectators"),this.sipConnector.on("api:participant:move-request-to-spectators",e));onMoveToParticipants=e=>(r.logger("onMoveToParticipants"),this.sipConnector.on("api:participant:move-request-to-participants",e));onStats=e=>(r.logger("onStats"),this.sipConnector.on("stats:collected",e));offStats=e=>{r.logger("offStats"),this.sipConnector.off("stats:collected",e)}}var W=(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))(W||{});exports.ECallCause=r.ECallCause;exports.EStatsTypes=r.EStatsTypes;exports.EUseLicense=r.EUseLicense;exports.SipConnector=r.SipConnector;exports.StatsPeerConnection=r.StatsPeerConnection;exports.disableDebug=r.disableDebug;exports.enableDebug=r.enableDebug;exports.getCodecFromSender=r.getCodecFromSender;exports.hasCanceledStartPresentationError=r.hasCanceledStartPresentationError;exports.EMimeTypesVideoCodecs=W;exports.SipConnectorFacade=be;exports.hasAvailableStats=pe;exports.hasCanceledCallError=J;exports.tools=he;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require("events-constructor");const r=require("./@SipConnector-CFYT0HQB.cjs"),x=require("@krivega/cancelable-promise"),j=require("repeated-calls"),K=require("ts-debounce"),X=require("ua-parser-js"),Y=require("sequent-promises"),G=n=>n instanceof Object&&("originator"in n||"cause"in n),J=n=>{if(x.isCanceledError(n))return!0;if(!G(n))return!1;const{originator:e,cause:t}=n;return typeof t=="string"?t===r.ECallCause.REQUEST_TIMEOUT||t===r.ECallCause.REJECTED||e==="local"&&(t===r.ECallCause.CANCELED||t===r.ECallCause.BYE):!1},z=()=>globalThis.process?.versions?.electron!==void 0,B=()=>{const n=new X.UAParser,{name:e}=n.getBrowser(),t=z();return{isChrome:e==="Chrome"||t}},A=n=>{const{url:e,cause:t}=n;let o=e;return(t===r.ECallCause.BAD_MEDIA_DESCRIPTION||t===r.ECallCause.NOT_FOUND)&&(o=`${n.message.to.uri.user}@${n.message.to.uri.host}`),o};var $=(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))($||{});const Q=new Error("Unknown error"),Z=(n=Q)=>{const{cause:e,socket:t}=n;let o="CONNECT_SERVER_FAILED";switch(e){case"Forbidden":{o="WRONG_USER_OR_PASSWORD";break}case r.ECallCause.BAD_MEDIA_DESCRIPTION:{o="BAD_MEDIA_ERROR";break}case r.ECallCause.NOT_FOUND:{o="NOT_FOUND_ERROR";break}default:t!==void 0&&t._ws?.readyState===3?o="WS_CONNECTION_FAILED":A(n)!==void 0&&A(n)!==""&&(o="CONNECT_SERVER_FAILED_BY_LINK")}return o},ee=n=>{let e="";try{e=JSON.stringify(n)}catch(t){r.logger("failed to stringify message",t)}return e},ne=new Error("Unknown error"),te=(n=ne)=>{const{code:e,cause:t,message:o}=n,a=A(n),s={code:"",cause:"",message:""};return typeof o=="object"&&o!==null?s.message=ee(o):o&&(s.message=String(o)),a!==void 0&&a!==""&&(s.link=a),e!==void 0&&e!==""&&(s.code=e),t!==void 0&&t!==""&&(s.cause=t),s},re=Object.freeze(Object.defineProperty({__proto__:null,EErrorTypes:$,getLinkError:A,getTypeFromError:Z,getValuesFromError:te},Symbol.toStringTag,{value:"Module"})),oe=({sessionId:n,remoteAddress:e,isMutedAudio:t,isMutedVideo:o,isRegistered:a,isPresentationCall:s})=>{const c=[],l=t?"0":"1",u=o?"0":"1";return c.push(`X-Vinteo-Mic-State: ${l}`,`X-Vinteo-MainCam-State: ${u}`),(a===!1||a===void 0)&&c.push("X-Vinteo-Purgatory-Call: yes"),n!==void 0&&n!==""&&c.push(`X-Vinteo-Session: ${n}`),s===!0&&c.push("X-Vinteo-Presentation-Call: yes"),e!==void 0&&e!==""&&c.push(`X-Vinteo-Remote: ${e}`),c},se="[@*!|]",ae="_",ce=n=>{let e=n;return e=e.replaceAll(new RegExp(se,"g"),ae),e},ie=({appName:n,appVersion:e,browserName:t,browserVersion:o})=>{const s=`${ce(n)} ${e}`;return`ChromeNew - ${t===void 0?s:`${t} ${o}, ${s}`}`},le=({isUnifiedSdpSemantic:n,appVersion:e,browserName:t,browserVersion:o,appName:a})=>n?ie({appVersion:e,browserName:t,browserVersion:o,appName:a}):"Chrome",H="purgatory",D=n=>n===H,ue=n=>e=>[...e].map(o=>async()=>n(o)),de=async({accumulatedKeys:n,sendKey:e,canRunTask:t})=>{const a=ue(e)(n);return Y.sequentPromises(a,t)},ge=n=>t=>(r.logger("onStartMainCam"),n.on("api:admin-start-main-cam",t)),Se=n=>t=>(r.logger("onStartMic"),n.on("api:admin-start-mic",t)),Ce=n=>t=>(r.logger("onStopMainCam"),n.on("api:admin-stop-main-cam",t)),me=n=>t=>(r.logger("onStopMic"),n.on("api:admin-stop-mic",t)),fe=({sipConnector:n})=>{const e=(g,C)=>({isSyncForced:S})=>{if(S===!0){g();return}C()},t=ge(n),o=Ce(n),a=Se(n),s=me(n);let c,l,u,f;const h=({onStartMainCamForced:g,onStartMainCamNotForced:C,onStopMainCamForced:S,onStopMainCamNotForced:p,onStartMicForced:E,onStartMicNotForced:b,onStopMicForced:P,onStopMicNotForced:v})=>{const T=e(g,C);c=t(T);const O=e(S,p);l=o(O);const _=e(E,b);u=a(_);const m=e(P,v);f=s(m)},d=()=>{c?.(),l?.(),u?.(),f?.()};return{start:g=>{h(g)},stop:()=>{d()}}},he=Object.freeze(Object.defineProperty({__proto__:null,PURGATORY_CONFERENCE_NUMBER:H,createSyncMediaState:fe,createUaParser:B,error:re,getExtraHeaders:oe,getUserAgent:le,hasPurgatory:D,prepareMediaStream:r.prepareMediaStream,sendDtmfAccumulated:de,setEncodingsToSender:r.setEncodingsToSender,setParametersToSender:r.setParametersToSender},Symbol.toStringTag,{value:"Module"})),pe=()=>B().isChrome,U=n=>{if(!x.isCanceledError(n)&&!j.hasCanceledError(n))throw n;return{isSuccessful:!1}},Re=({kind:n,readyState:e})=>n==="video"&&e==="live",k=(n,e,{onEnterPurgatory:t,onEnterConference:o})=>{D(n)?t&&t():o&&o({isSuccessProgressCall:e})},L=(n,e)=>{n(),e&&e()},V=(n,e,t)=>{throw n&&n(),e(),t},Ee=new Set(["on","once","onceRace","wait","off","sendDTMF","hangUp","declineToIncomingCall","sendChannels","checkTelephony","waitChannels","ping","connection","isConfigured","isRegistered"]);class be{on;once;onceRace;wait;off;sendDTMF;hangUp;declineToIncomingCall;sendChannels;checkTelephony;waitChannels;ping;connection;isConfigured;isRegistered;sipConnector;constructor(e){return this.sipConnector=e,new Proxy(this,{get:(t,o,a)=>{if(typeof o=="string"&&Ee.has(o)&&o in this.sipConnector){const c=Reflect.get(this.sipConnector,o,this.sipConnector);return typeof c=="function"?c.bind(this.sipConnector):c}const s=Reflect.get(t,o,a);return typeof s=="function"?s.bind(t):s}})}connectToServer=async e=>{const{userAgent:t,sipWebSocketServerURL:o,sipServerUrl:a,remoteAddress:s,displayName:c,name:l,password:u,isRegisteredUser:f,isDisconnectOnFail:h}=e;return r.logger("connectToServer",e),this.sipConnector.connect({userAgent:t,sipWebSocketServerURL:o,sipServerUrl:a,remoteAddress:s,displayName:c,password:u,user:l,register:f}).then(d=>(r.logger("connectToServer then"),{ua:d,isSuccessful:!0})).catch(async d=>(r.logger("connectToServer catch: error",d),h===!0?this.sipConnector.disconnect().then(()=>U(d)).catch(()=>U(d)):U(d)))};callToServer=async e=>{const{conference:t,mediaStream:o,extraHeaders:a,iceServers:s,contentHint:c,degradationPreference:l,sendEncodings:u,offerToReceiveAudio:f,offerToReceiveVideo:h,directionVideo:d,directionAudio:N,setRemoteStreams:y,onBeforeProgressCall:g,onSuccessProgressCall:C,onEnterPurgatory:S,onEnterConference:p,onFailProgressCall:E,onFinishProgressCall:b,onEndedCall:P,onAddedTransceiver:v}=e,T=this.resolveHandleReadyRemoteStreamsDebounced({onReadyRemoteStreams:y}),O=this.resolveHandleReadyRemoteStreams({onReadyRemoteStreams:()=>{T().catch(r.logger)}});r.logger("callToServer",e);const _=async()=>(r.logger("startCall"),this.sipConnector.call({mediaStream:o,extraHeaders:a,iceServers:s,contentHint:c,offerToReceiveAudio:f,offerToReceiveVideo:h,directionVideo:d,directionAudio:N,degradationPreference:l,onAddedTransceiver:v,sendEncodings:u,number:t,ontrack:O}));let m=!1,R;const M=(r.logger("subscribeEnterConference: onEnterConference",p),this.sipConnector.on("api:enterRoom",({room:i})=>{r.logger("enterRoom",{_room:i,isSuccessProgressCall:m}),R=i,(S??p)&&k(R,m,{onEnterPurgatory:S,onEnterConference:p})})),F=i=>(r.logger("onSuccess"),m=!0,T().catch(r.logger),C&&C({isPurgatory:D(R)}),this.sipConnector.onceRace(["call:ended","call:failed"],()=>{L(M,P)}),i),w=i=>(r.logger("onFail"),V(E,M,i)),I=()=>{r.logger("onFinish"),b&&b()};return r.logger("onBeforeProgressCall"),g&&g(t),_().then(F).catch(i=>w(i)).finally(I)};disconnectFromServer=async()=>this.sipConnector.disconnect().then(()=>(r.logger("disconnectFromServer: then"),{isSuccessful:!0})).catch(e=>(r.logger("disconnectFromServer: catch",e),{isSuccessful:!1}));answerToIncomingCall=async e=>{const{mediaStream:t,extraHeaders:o,iceServers:a,contentHint:s,degradationPreference:c,sendEncodings:l,offerToReceiveAudio:u,offerToReceiveVideo:f,directionVideo:h,directionAudio:d,setRemoteStreams:N,onBeforeProgressCall:y,onSuccessProgressCall:g,onEnterPurgatory:C,onEnterConference:S,onFailProgressCall:p,onFinishProgressCall:E,onEndedCall:b,onAddedTransceiver:P}=e,v=this.resolveHandleReadyRemoteStreamsDebounced({onReadyRemoteStreams:N}),T=this.resolveHandleReadyRemoteStreams({onReadyRemoteStreams:()=>{v().catch(r.logger)}});r.logger("answerToIncomingCall",e);const O=async()=>this.sipConnector.answerToIncomingCall({mediaStream:t,extraHeaders:o,iceServers:a,contentHint:s,offerToReceiveAudio:u,offerToReceiveVideo:f,directionVideo:h,directionAudio:d,degradationPreference:c,onAddedTransceiver:P,sendEncodings:l,ontrack:T}),_=()=>{const{remoteCallerData:i}=this.sipConnector;return i.incomingNumber};let m=!1,R;const M=(r.logger("subscribeEnterConference: onEnterConference",S),this.sipConnector.on("api:enterRoom",i=>{r.logger("enterRoom",{_room:i,isSuccessProgressCall:m}),R=i,(C??S)&&k(R,m,{onEnterPurgatory:C,onEnterConference:S})})),F=i=>(r.logger("onSuccess"),m=!0,v().catch(r.logger),g&&g({isPurgatory:D(R)}),this.sipConnector.onceRace(["call:ended","call:failed"],()=>{L(M,b)}),i),w=i=>(r.logger("onFail"),V(p,M,i)),I=()=>{r.logger("onFinish"),E&&E()};if(r.logger("onBeforeProgressCall"),y){const i=_();y(i)}return O().then(F).catch(i=>w(i)).finally(I)};updatePresentation=async({mediaStream:e,isP2P:t,contentHint:o,degradationPreference:a,sendEncodings:s,onAddedTransceiver:c})=>(r.logger("updatePresentation"),this.sipConnector.updatePresentation(e,{isP2P:t,contentHint:o,degradationPreference:a,onAddedTransceiver:c,sendEncodings:s}));startPresentation=async({mediaStream:e,isP2P:t,contentHint:o,degradationPreference:a,sendEncodings:s,callLimit:c,onAddedTransceiver:l})=>(r.logger("startPresentation"),this.sipConnector.startPresentation(e,{isP2P:t,contentHint:o,callLimit:c,degradationPreference:a,onAddedTransceiver:l,sendEncodings:s}));stopShareSipConnector=async({isP2P:e=!1}={})=>(r.logger("stopShareSipConnector"),this.sipConnector.stopPresentation({isP2P:e}).catch(t=>{r.logger(t)}));sendRefusalToTurnOnMic=async()=>{r.logger("sendRefusalToTurnOnMic"),await this.sipConnector.sendRefusalToTurnOnMic().catch(e=>{r.logger("sendRefusalToTurnOnMic: error",e)})};sendRefusalToTurnOnCam=async()=>{r.logger("sendRefusalToTurnOnCam"),await this.sipConnector.sendRefusalToTurnOnCam().catch(e=>{r.logger("sendRefusalToTurnOnCam: error",e)})};sendMediaState=async({isEnabledCam:e,isEnabledMic:t})=>{r.logger("sendMediaState"),await this.sipConnector.sendMediaState({cam:e,mic:t})};replaceMediaStream=async(e,{deleteExisting:t,addMissing:o,forceRenegotiation:a,contentHint:s,degradationPreference:c,sendEncodings:l,onAddedTransceiver:u})=>(r.logger("replaceMediaStream"),this.sipConnector.replaceMediaStream(e,{deleteExisting:t,addMissing:o,forceRenegotiation:a,contentHint:s,degradationPreference:c,onAddedTransceiver:u,sendEncodings:l}));askPermissionToEnableCam=async()=>{r.logger("askPermissionToEnableCam"),await this.sipConnector.askPermissionToEnableCam()};resolveHandleReadyRemoteStreamsDebounced=({onReadyRemoteStreams:e})=>K.debounce(()=>{const t=this.sipConnector.getRemoteStreams();r.logger("remoteStreams",t),t&&e(t)},200);resolveHandleReadyRemoteStreams=({onReadyRemoteStreams:e})=>({track:t})=>{Re(t)&&e()};getRemoteStreams=()=>(r.logger("getRemoteStreams"),this.sipConnector.getRemoteStreams());onUseLicense=e=>(r.logger("onUseLicense"),this.sipConnector.on("api:useLicense",e));onMustStopPresentation=e=>(r.logger("onMustStopPresentation"),this.sipConnector.on("api:mustStopPresentation",e));onMoveToSpectators=e=>(r.logger("onMoveToSpectators"),this.sipConnector.on("api:participant:move-request-to-spectators",e));onMoveToParticipants=e=>(r.logger("onMoveToParticipants"),this.sipConnector.on("api:participant:move-request-to-participants",e));onStats=e=>(r.logger("onStats"),this.sipConnector.on("stats:collected",e));offStats=e=>{r.logger("offStats"),this.sipConnector.off("stats:collected",e)}}var W=(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))(W||{});exports.ECallCause=r.ECallCause;exports.EStatsTypes=r.EStatsTypes;exports.EUseLicense=r.EUseLicense;exports.SipConnector=r.SipConnector;exports.StatsPeerConnection=r.StatsPeerConnection;exports.disableDebug=r.disableDebug;exports.enableDebug=r.enableDebug;exports.getCodecFromSender=r.getCodecFromSender;exports.hasCanceledStartPresentationError=r.hasCanceledStartPresentationError;exports.EMimeTypesVideoCodecs=W;exports.SipConnectorFacade=be;exports.hasAvailableStats=pe;exports.hasCanceledCallError=J;exports.tools=he;