sip-connector 19.8.3 → 20.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 (44) hide show
  1. package/README.md +131 -138
  2. package/dist/@SipConnector-CZiURTVf.cjs +1 -0
  3. package/dist/{@SipConnector-BmkeKEDD.js → @SipConnector-D4DfiZRM.js} +1117 -977
  4. package/dist/ApiManager/@ApiManager.d.ts +0 -1
  5. package/dist/ApiManager/constants.d.ts +3 -8
  6. package/dist/ApiManager/eventNames.d.ts +15 -6
  7. package/dist/ApiManager/index.d.ts +0 -1
  8. package/dist/ApiManager/types.d.ts +0 -6
  9. package/dist/CallManager/@CallManager.d.ts +44 -15
  10. package/dist/CallManager/MCUSession.d.ts +0 -2
  11. package/dist/CallManager/RecvSession.d.ts +29 -0
  12. package/dist/CallManager/RemoteStreamsManager.d.ts +20 -5
  13. package/dist/CallManager/RoleManager.d.ts +31 -0
  14. package/dist/CallManager/eventNames.d.ts +9 -2
  15. package/dist/CallManager/index.d.ts +1 -2
  16. package/dist/CallManager/types.d.ts +29 -35
  17. package/dist/ConnectionManager/@ConnectionManager.d.ts +2 -2
  18. package/dist/ConnectionManager/ConfigurationManager.d.ts +6 -1
  19. package/dist/ConnectionManager/ConnectionFlow.d.ts +5 -4
  20. package/dist/ConnectionManager/SipOperations.d.ts +2 -2
  21. package/dist/ConnectionManager/UAFactory.d.ts +4 -4
  22. package/dist/SipConnector/@SipConnector.d.ts +4 -4
  23. package/dist/SipConnector/eventNames.d.ts +1 -1
  24. package/dist/SipConnectorFacade/@SipConnectorFacade.d.ts +0 -2
  25. package/dist/VideoSendingBalancer/__fixtures__/createMockTrack.d.ts +1 -1
  26. package/dist/__fixtures__/RTCPeerConnectionMock.d.ts +14 -18
  27. package/dist/__fixtures__/index.d.ts +4 -4
  28. package/dist/doMock.cjs +1 -1
  29. package/dist/doMock.js +134 -131
  30. package/dist/index.cjs +1 -1
  31. package/dist/index.js +156 -171
  32. package/dist/tools/__fixtures__/connectToServer.d.ts +15 -15
  33. package/dist/tools/__fixtures__/permissions.d.ts +2 -2
  34. package/dist/tools/__fixtures__/processRequest.d.ts +2 -2
  35. package/dist/tools/index.d.ts +1 -0
  36. package/dist/tools/sendOffer.d.ts +39 -0
  37. package/dist/utils/utils.d.ts +1 -1
  38. package/package.json +13 -5
  39. package/dist/@SipConnector-BHakZWEK.cjs +0 -1
  40. package/dist/CallManager/AbstractCallStrategy.d.ts +0 -54
  41. package/dist/CallManager/MCUCallStrategy.d.ts +0 -31
  42. package/dist/TransceiverManager/@TransceiverManager.d.ts +0 -70
  43. package/dist/TransceiverManager/index.d.ts +0 -1
  44. package/dist/TransceiverManager/types.d.ts +0 -11
package/dist/doMock.js CHANGED
@@ -1,12 +1,12 @@
1
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";
2
+ import k from "@krivega/jssip/lib/NameAddrHeader";
3
+ import F from "@krivega/jssip/lib/URI";
4
+ import { IncomingRequest as b } from "@krivega/jssip/lib/SIPMessage";
5
5
  import { NameAddrHeader as V, URI as E, SessionStatus as W, C as N } from "@krivega/jssip";
6
- import { createAudioMediaStreamTrackMock as U, createVideoMediaStreamTrackMock as G } from "webrtc-mock";
7
- import { Events as _ } from "events-constructor";
8
- import { O as H, S as x } from "./@SipConnector-BmkeKEDD.js";
9
- class T extends k {
6
+ import { MediaStreamTrackMock as U, createAudioMediaStreamTrackMock as j, createVideoMediaStreamTrackMock as G } from "webrtc-mock";
7
+ import { Events as O } from "events-constructor";
8
+ import { O as H, S as x } from "./@SipConnector-D4DfiZRM.js";
9
+ class T extends b {
10
10
  headers;
11
11
  constructor(e) {
12
12
  super(), this.headers = new Headers(e);
@@ -15,34 +15,33 @@ class T extends k {
15
15
  return this.headers.get(e) ?? "";
16
16
  }
17
17
  }
18
- const Y = "incomingCall", j = "declinedIncomingCall", q = "failedIncomingCall", z = "terminatedIncomingCall", P = "connecting", B = "connected", K = "disconnected", $ = "newRTCSession", J = "registered", Q = "unregistered", X = "registrationFailed", Z = "newMessage", ee = "sipEvent", te = "availableSecondRemoteStream", re = "notAvailableSecondRemoteStream", ne = "mustStopPresentation", oe = "shareState", se = "enterRoom", ie = "useLicense", ae = "peerconnection:confirmed", ce = "peerconnection:ontrack", de = "channels", Ee = "channels:notify", he = "ended:fromserver", me = "main-cam-control", ue = "admin-stop-main-cam", le = "admin-start-main-cam", pe = "admin-stop-mic", ge = "admin-start-mic", _e = "admin-force-sync-media-state", Te = "participant:added-to-list-moderators", Ie = "participant:removed-from-list-moderators", Se = "participant:move-request-to-stream", we = "participant:move-request-to-spectators", Ne = "participant:move-request-to-participants", fe = "participation:accepting-word-request", Ce = "participation:cancelling-word-request", Re = "webcast:started", Ae = "webcast:stopped", Me = "account:changed", Oe = "account:deleted", Pe = "conference:participant-token-issued", ve = "ended", De = "sending", ye = "reinvite", Le = "replaces", Fe = "refer", be = "progress", ke = "accepted", Ve = "confirmed", We = "peerconnection", Ue = "failed", Ge = "muted", He = "unmuted", xe = "newDTMF", Ye = "newInfo", je = "hold", qe = "unhold", ze = "update", Be = "sdp", Ke = "icecandidate", $e = "getusermediafailed", Je = "peerconnection:createofferfailed", Qe = "peerconnection:createanswerfailed", Xe = "peerconnection:setlocaldescriptionfailed", Ze = "peerconnection:setremotedescriptionfailed", et = "presentation:start", tt = "presentation:started", rt = "presentation:end", nt = "presentation:ended", ot = "presentation:failed", st = [
18
+ const Y = "incomingCall", q = "declinedIncomingCall", z = "failedIncomingCall", B = "terminatedIncomingCall", P = "connecting", K = "connected", $ = "disconnected", J = "newRTCSession", Q = "registered", X = "unregistered", Z = "registrationFailed", ee = "newMessage", te = "sipEvent", re = "availableSecondRemoteStream", ne = "notAvailableSecondRemoteStream", oe = "mustStopPresentation", se = "shareState", ie = "enterRoom", ae = "useLicense", ce = "peerconnection:confirmed", de = "peerconnection:ontrack", Ee = "channels", he = "channels:notify", me = "ended:fromserver", ue = "main-cam-control", le = "admin-stop-main-cam", pe = "admin-start-main-cam", ge = "admin-stop-mic", Te = "admin-start-mic", _e = "admin-force-sync-media-state", Ie = "participant:added-to-list-moderators", Se = "participant:removed-from-list-moderators", Ne = "participant:move-request-to-stream", we = "participant:move-request-to-spectators", fe = "participant:move-request-to-participants", Ce = "participation:accepting-word-request", Re = "participation:cancelling-word-request", Ae = "webcast:started", Me = "webcast:stopped", Oe = "account:changed", Pe = "account:deleted", ve = "conference:participant-token-issued", De = "ended", ye = "sending", Le = "reinvite", ke = "replaces", Fe = "refer", be = "progress", Ve = "accepted", We = "confirmed", Ue = "peerconnection", je = "failed", Ge = "muted", He = "unmuted", xe = "newDTMF", Ye = "newInfo", qe = "hold", ze = "unhold", Be = "update", Ke = "sdp", $e = "icecandidate", Je = "getusermediafailed", Qe = "peerconnection:createofferfailed", Xe = "peerconnection:createanswerfailed", Ze = "peerconnection:setlocaldescriptionfailed", et = "peerconnection:setremotedescriptionfailed", tt = "presentation:start", rt = "presentation:started", nt = "presentation:end", ot = "presentation:ended", st = "presentation:failed", it = [
19
19
  Y,
20
- j,
21
- z,
22
20
  q,
23
- fe,
21
+ B,
22
+ z,
24
23
  Ce,
25
- Se,
26
- Ee,
27
- Pe,
28
- Me,
29
- Oe,
30
24
  Re,
25
+ Ne,
26
+ he,
27
+ ve,
28
+ Oe,
29
+ Pe,
31
30
  Ae,
32
- Te,
33
- Ie
31
+ Me,
32
+ Ie,
33
+ Se
34
34
  ], v = [
35
35
  P,
36
- B,
37
36
  K,
38
37
  $,
39
38
  J,
40
39
  Q,
41
40
  X,
42
41
  Z,
43
- ee
44
- ], it = [
45
- te,
42
+ ee,
43
+ te
44
+ ], at = [
46
45
  re,
47
46
  ne,
48
47
  oe,
@@ -51,32 +50,32 @@ const Y = "incomingCall", j = "declinedIncomingCall", q = "failedIncomingCall",
51
50
  ae,
52
51
  ce,
53
52
  de,
54
- he,
53
+ Ee,
55
54
  me,
56
- le,
57
55
  ue,
58
56
  pe,
57
+ le,
59
58
  ge,
59
+ Te,
60
60
  _e,
61
61
  we,
62
- Ne
62
+ fe
63
63
  ], p = [
64
- ve,
65
- P,
66
64
  De,
65
+ P,
67
66
  ye,
68
67
  Le,
68
+ ke,
69
69
  Fe,
70
70
  be,
71
- ke,
72
71
  Ve,
73
72
  We,
74
73
  Ue,
74
+ je,
75
75
  Ge,
76
76
  He,
77
77
  xe,
78
78
  Ye,
79
- je,
80
79
  qe,
81
80
  ze,
82
81
  Be,
@@ -90,14 +89,15 @@ const Y = "incomingCall", j = "declinedIncomingCall", q = "failedIncomingCall",
90
89
  tt,
91
90
  rt,
92
91
  nt,
93
- ot
92
+ ot,
93
+ st
94
94
  ];
95
- [...v, ...st];
95
+ [...v, ...it];
96
96
  [
97
97
  ...p,
98
- ...it
98
+ ...at
99
99
  ];
100
- class at {
100
+ class ct {
101
101
  originator;
102
102
  connection;
103
103
  events;
@@ -108,7 +108,7 @@ class at {
108
108
  eventHandlers: t,
109
109
  remoteIdentity: r
110
110
  }) {
111
- this.originator = e, this.events = new _(p), this.initEvents(t), this.remote_identity = r;
111
+ this.originator = e, this.events = new O(p), this.initEvents(t), this.remote_identity = r;
112
112
  }
113
113
  get contact() {
114
114
  throw new Error("Method not implemented.");
@@ -268,7 +268,7 @@ class at {
268
268
  return !0;
269
269
  }
270
270
  }
271
- class f {
271
+ class w {
272
272
  stats = (/* @__PURE__ */ new Map()).set("codec", { mimeType: "video/h264" });
273
273
  dtmf = null;
274
274
  track = null;
@@ -311,7 +311,7 @@ class f {
311
311
  throw new Error("Method not implemented.");
312
312
  }
313
313
  }
314
- class C {
314
+ class f {
315
315
  currentDirection = "sendrecv";
316
316
  direction = "sendrecv";
317
317
  // eslint-disable-next-line unicorn/no-null
@@ -329,8 +329,7 @@ class C {
329
329
  stop() {
330
330
  }
331
331
  }
332
- const ct = ["track"];
333
- class dt {
332
+ class dt extends EventTarget {
334
333
  senders = [];
335
334
  receivers = [];
336
335
  canTrickleIceCandidates;
@@ -359,9 +358,23 @@ class dt {
359
358
  // eslint-disable-next-line unicorn/no-null
360
359
  sctp = null;
361
360
  signalingState;
362
- events;
361
+ close = jest.fn();
362
+ setLocalDescription = jest.fn(
363
+ async (e) => {
364
+ }
365
+ );
366
+ setRemoteDescription = jest.fn(
367
+ async (e) => {
368
+ }
369
+ );
370
+ addTransceiver = jest.fn(
371
+ (e, t) => ({})
372
+ );
373
+ createOffer = jest.fn(
374
+ async (e, t, r) => ({ type: "offer", sdp: "offer-sdp" })
375
+ );
363
376
  constructor(e, t) {
364
- this.events = new _(ct), this.receivers = t.map((r) => ({ track: r }));
377
+ super(), this.receivers = t?.map((r) => ({ track: r })) ?? [];
365
378
  }
366
379
  getRemoteStreams() {
367
380
  throw new Error("Method not implemented.");
@@ -369,12 +382,6 @@ class dt {
369
382
  async addIceCandidate(e) {
370
383
  throw new Error("Method not implemented.");
371
384
  }
372
- addTransceiver(e, t) {
373
- throw new Error("Method not implemented.");
374
- }
375
- close() {
376
- throw new Error("Method not implemented.");
377
- }
378
385
  restartIce() {
379
386
  throw new Error("Method not implemented.");
380
387
  }
@@ -384,9 +391,6 @@ class dt {
384
391
  createDataChannel(e, t) {
385
392
  throw new Error("Method not implemented.");
386
393
  }
387
- async createOffer(e, t, r) {
388
- throw new Error("Method not implemented.");
389
- }
390
394
  getConfiguration() {
391
395
  throw new Error("Method not implemented.");
392
396
  }
@@ -405,41 +409,40 @@ class dt {
405
409
  setConfiguration(e) {
406
410
  throw new Error("Method not implemented.");
407
411
  }
408
- async setLocalDescription(e) {
409
- throw new Error("Method not implemented.");
410
- }
411
- async setRemoteDescription(e) {
412
- throw new Error("Method not implemented.");
413
- }
414
- addEventListener(e, t, r) {
415
- this.events.on(e, t);
416
- }
417
- removeEventListener(e, t, r) {
418
- this.events.off(e, t);
419
- }
420
- dispatchEvent(e) {
421
- throw new Error("Method not implemented.");
422
- }
423
412
  getReceivers = () => this.receivers;
424
413
  getSenders = () => this.senders;
425
414
  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;
415
+ const r = new w({ track: e }), o = new f(r);
416
+ return o.mid = e.kind === "audio" ? "0" : "1", this.senders.push(r), this.dispatchTrackInternal(e, ...t), r;
428
417
  };
429
418
  // Дополнительный метод для тестов с возможностью установки mid
430
419
  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;
420
+ const r = new w({ track: e }), o = new f(r);
421
+ return t === void 0 ? o.mid = e.kind === "audio" ? "0" : "1" : o.mid = t, this.senders.push(r), this.dispatchTrackInternal(e), r;
433
422
  };
423
+ dispatchTrack(e) {
424
+ this.dispatchTrackInternal(new U(e));
425
+ }
426
+ dispatchTrackInternal(e, ...t) {
427
+ const r = new Event(
428
+ "track"
429
+ /* TRACK */
430
+ );
431
+ Object.defineProperty(r, "track", {
432
+ value: e
433
+ }), Object.defineProperty(r, "streams", {
434
+ value: t.length === 0 ? [new MediaStream([e])] : t
435
+ }), this.dispatchEvent(r);
436
+ }
434
437
  }
435
- function Et(o) {
436
- const e = o.match(/(purgatory)|[\d.]+/g);
438
+ function Et(n) {
439
+ const e = n.match(/(purgatory)|[\d.]+/g);
437
440
  if (!e)
438
441
  throw new Error("wrong sip url");
439
442
  return e[0];
440
443
  }
441
- const R = 400, ht = "777", mt = (o) => o.getVideoTracks().length > 0;
442
- class i extends at {
444
+ const C = 400, ht = "777", mt = (n) => n.getVideoTracks().length > 0;
445
+ class i extends ct {
443
446
  static presentationError;
444
447
  static startPresentationError;
445
448
  static countStartPresentationError = Number.POSITIVE_INFINITY;
@@ -464,7 +467,7 @@ class i extends at {
464
467
  }, 100), setTimeout(() => {
465
468
  this.trigger("confirmed");
466
469
  }, 200);
467
- }, R);
470
+ }, C);
468
471
  });
469
472
  replaceMediaStream = jest.fn(async (e) => {
470
473
  });
@@ -489,9 +492,9 @@ class i extends at {
489
492
  new E("sip", "caller1", "test1.com", 5060),
490
493
  "Test Caller 1"
491
494
  ),
492
- delayStartPresentation: n = 0
495
+ delayStartPresentation: o = 0
493
496
  }) {
494
- super({ originator: t, eventHandlers: e, remoteIdentity: r }), this.delayStartPresentation = n;
497
+ super({ originator: t, eventHandlers: e, remoteIdentity: r }), this.delayStartPresentation = o;
495
498
  }
496
499
  static get C() {
497
500
  return W;
@@ -530,14 +533,14 @@ class i extends at {
530
533
  return e ? (this.createPeerconnection(e), !0) : !1;
531
534
  }
532
535
  createPeerconnection(e) {
533
- const t = U();
536
+ const t = j();
534
537
  t.id = "mainaudio1";
535
538
  const r = [t];
536
539
  if (mt(e)) {
537
540
  const a = G();
538
541
  a.id = "mainvideo1", r.push(a);
539
542
  }
540
- this.connection = new dt(void 0, r), this.addStream(e), this.trigger("peerconnection", { peerconnection: this.connection });
543
+ this.connection = new dt(void 0, r), this.trigger("peerconnection", { peerconnection: this.connection }), this.addStream(e);
541
544
  }
542
545
  connect(e, { mediaStream: t } = {}) {
543
546
  const r = Et(e);
@@ -551,7 +554,7 @@ class i extends at {
551
554
  originator: H.REMOTE,
552
555
  // @ts-expect-error
553
556
  request: {
554
- getHeader: (n) => n === "content-type" ? "application/vinteo.webrtc.roomname" : n === "x-webrtc-enter-room" ? r : n === "x-webrtc-participant-name" ? "Test Caller 1" : ""
557
+ getHeader: (o) => o === "content-type" ? "application/vinteo.webrtc.roomname" : o === "x-webrtc-enter-room" ? r : o === "x-webrtc-participant-name" ? "Test Caller 1" : ""
555
558
  }
556
559
  });
557
560
  }, 100), this.timeoutAccepted = setTimeout(() => {
@@ -559,7 +562,7 @@ class i extends at {
559
562
  }, 200), this.timeoutConfirmed = setTimeout(() => {
560
563
  this.trigger("confirmed");
561
564
  }, 300));
562
- }, R), this.connection;
565
+ }, C), this.connection;
563
566
  }
564
567
  terminate({ status_code: e, cause: t } = {}) {
565
568
  return this.status_code = e, this.trigger("ended", { status_code: e, cause: t, originator: "local" }), this.isEndedInner = !1, this;
@@ -574,7 +577,7 @@ class i extends at {
574
577
  return this.status_code = e, this.trigger("ended", { status_code: e, originator: "remote" }), this;
575
578
  }
576
579
  addStream(e, t = "getTracks") {
577
- e[t]().forEach((r) => this.connection.addTrack(r));
580
+ e[t]().forEach((r) => this.connection.addTrack(r, e));
578
581
  }
579
582
  forEachSenders(e) {
580
583
  const t = this.connection.getSenders();
@@ -629,14 +632,14 @@ class ut {
629
632
  setExtraContactParams() {
630
633
  }
631
634
  }
632
- const c = "PASSWORD_CORRECT", A = "PASSWORD_CORRECT_2", lt = "NAME_INCORRECT", d = 400, l = {
635
+ const c = "PASSWORD_CORRECT", R = "PASSWORD_CORRECT_2", lt = "NAME_INCORRECT", d = 400, l = {
633
636
  url: "wss://sipServerUrl/webrtc/wss/",
634
637
  sip_uri: "sip:sipServerUrl;transport=ws",
635
638
  via_transport: "WSS"
636
- }, M = {
639
+ }, A = {
637
640
  status_code: 200,
638
641
  reason_phrase: "OK"
639
- }, O = {
642
+ }, M = {
640
643
  status_code: 401,
641
644
  reason_phrase: "Unauthorized"
642
645
  };
@@ -650,8 +653,8 @@ class s {
650
653
  // @ts-expect-error – Jest создаёт функцию-замок.
651
654
  call = jest.fn(
652
655
  (e, t) => {
653
- const { mediaStream: r, eventHandlers: n } = t;
654
- return this.session = new i({ eventHandlers: n, originator: "local" }), this.session.connect(e, { mediaStream: r }), this.session;
656
+ const { mediaStream: r, eventHandlers: o } = t;
657
+ return this.session = new i({ eventHandlers: o, originator: "local" }), this.session.connect(e, { mediaStream: r }), this.session;
655
658
  }
656
659
  );
657
660
  sendOptions = jest.fn(
@@ -686,10 +689,10 @@ class s {
686
689
  isConnectedInner;
687
690
  configuration;
688
691
  constructor(e) {
689
- this.events = new _(v);
690
- const [t, r] = e.uri.split(":"), [n, a] = r.split("@"), u = {
692
+ this.events = new O(v);
693
+ const [t, r] = e.uri.split(":"), [o, a] = r.split("@"), u = {
691
694
  ...e,
692
- uri: new E(t, n, a)
695
+ uri: new E(t, o, a)
693
696
  };
694
697
  this.configuration = u, this.registratorInner = new ut();
695
698
  }
@@ -737,11 +740,11 @@ class s {
737
740
  this.startedTimeout && clearTimeout(this.startedTimeout);
738
741
  const { password: e, register: t, uri: r } = this.configuration;
739
742
  t === !0 && r.user.includes(lt) ? (this.isRegisteredInner = !1, this.isConnectedInner = !1, this.startedTimeout = setTimeout(() => {
740
- this.trigger("registrationFailed", { response: O, cause: N.causes.REJECTED });
741
- }, d)) : !this.isRegistered() && t === !0 && (e === c || e === A) ? (this.isRegisteredInner = !0, this.startedTimeout = setTimeout(() => {
742
- this.trigger("registered", { response: M });
743
- }, d)) : t === !0 && e !== c && e !== A && (this.isRegisteredInner = !1, this.isConnectedInner = !1, this.startedTimeout = setTimeout(() => {
744
- this.trigger("registrationFailed", { response: O, cause: N.causes.REJECTED });
743
+ this.trigger("registrationFailed", { response: M, cause: N.causes.REJECTED });
744
+ }, d)) : !this.isRegistered() && t === !0 && (e === c || e === R) ? (this.isRegisteredInner = !0, this.startedTimeout = setTimeout(() => {
745
+ this.trigger("registered", { response: A });
746
+ }, d)) : t === !0 && e !== c && e !== R && (this.isRegisteredInner = !1, this.isConnectedInner = !1, this.startedTimeout = setTimeout(() => {
747
+ this.trigger("registrationFailed", { response: M, cause: N.causes.REJECTED });
745
748
  }, d)), s.isAvailableTelephony ? (this.trigger("connected", { socket: l }), this.isConnectedInner = !0) : this.stop();
746
749
  }
747
750
  /**
@@ -750,7 +753,7 @@ class s {
750
753
  * @returns {undefined}
751
754
  */
752
755
  unregister() {
753
- this.isRegisteredInner = !1, this.isConnectedInner = !1, this.trigger("unregistered", { response: M });
756
+ this.isRegisteredInner = !1, this.isConnectedInner = !1, this.trigger("unregistered", { response: A });
754
757
  }
755
758
  isRegistered() {
756
759
  return this.isRegisteredInner === !0;
@@ -786,34 +789,34 @@ class gt extends L {
786
789
  super(), this.contentType = e, this.body = t;
787
790
  }
788
791
  }
789
- const g = "remote", _t = (o, e) => {
792
+ const g = "remote", Tt = (n, e) => {
790
793
  const t = new T(e), r = {
791
794
  originator: g,
792
795
  request: t,
793
796
  info: new gt("", "")
794
797
  };
795
- o.newInfo(r);
796
- }, Tt = (o, e) => {
798
+ n.newInfo(r);
799
+ }, _t = (n, e) => {
797
800
  const r = { event: "sipEvent", request: new T(e) };
798
- o.newSipEvent(r);
799
- }, It = (o, {
801
+ n.newSipEvent(r);
802
+ }, It = (n, {
800
803
  incomingNumber: e = "1234",
801
804
  displayName: t,
802
805
  host: r
803
806
  }) => {
804
- const n = new i({ originator: g, eventHandlers: {} }), a = new b("sip", e, r);
805
- n.remote_identity = new F(a, t);
807
+ const o = new i({ originator: g, eventHandlers: {} }), a = new F("sip", e, r);
808
+ o.remote_identity = new k(a, t);
806
809
  const u = new T([]);
807
- o.trigger("newRTCSession", {
810
+ n.trigger("newRTCSession", {
808
811
  originator: g,
809
- session: n,
812
+ session: o,
810
813
  request: u
811
814
  });
812
- }, St = (o, e) => {
813
- e ? o.trigger("failed", e) : o.trigger("failed", o);
815
+ }, St = (n, e) => {
816
+ e ? n.trigger("failed", e) : n.trigger("failed", n);
814
817
  }, D = {
815
- triggerNewInfo: _t,
816
- triggerNewSipEvent: Tt,
818
+ triggerNewInfo: Tt,
819
+ triggerNewSipEvent: _t,
817
820
  triggerIncomingSession: It,
818
821
  triggerFailIncomingSession: St,
819
822
  WebSocketInterface: pt,
@@ -821,45 +824,45 @@ const g = "remote", _t = (o, e) => {
821
824
  C: {
822
825
  INVITE: "INVITE"
823
826
  }
824
- }, I = "user", h = "displayName", S = "SIP_SERVER_URL", y = "SIP_WEB_SOCKET_SERVER_URL", wt = new D.WebSocketInterface(y), w = {
827
+ }, _ = "user", h = "displayName", I = "SIP_SERVER_URL", y = "SIP_WEB_SOCKET_SERVER_URL", Nt = new D.WebSocketInterface(`wss://${y}/webrtc/wss/`), S = {
825
828
  displayName: "DISPLAY_NAME",
826
829
  userAgent: "Chrome",
827
- sipServerUrl: S,
828
- sipWebSocketServerURL: y
830
+ sipServerIp: I,
831
+ sipServerUrl: y
829
832
  }, yt = {
830
- ...w,
833
+ ...S,
831
834
  displayName: "DISPLAY_NAME",
832
835
  register: !1
833
- }, Nt = {
834
- ...w,
835
- user: I,
836
+ }, wt = {
837
+ ...S,
838
+ user: _,
836
839
  password: c,
837
840
  register: !0
838
841
  }, Lt = {
839
- ...Nt,
842
+ ...wt,
840
843
  displayName: h
841
- }, Ft = {
842
- ...w,
844
+ }, kt = {
845
+ ...S,
843
846
  displayName: h,
844
847
  register: !1
845
848
  }, m = {
846
849
  session_timers: !1,
847
- sockets: [wt],
850
+ sockets: [Nt],
848
851
  user_agent: "Chrome",
849
852
  sdpSemantics: "unified-plan",
850
853
  register_expires: 300,
851
854
  connection_recovery_max_interval: 6,
852
855
  connection_recovery_min_interval: 2
853
- }, bt = {
856
+ }, Ft = {
854
857
  ...m,
855
858
  password: c,
856
- uri: new E("sip", I, S),
859
+ uri: new E("sip", _, I),
857
860
  display_name: "DISPLAY_NAME",
858
861
  register: !0
859
- }, kt = {
862
+ }, bt = {
860
863
  ...m,
861
864
  password: c,
862
- uri: new E("sip", I, S),
865
+ uri: new E("sip", _, I),
863
866
  display_name: h,
864
867
  register: !0
865
868
  }, Vt = {
@@ -870,7 +873,7 @@ const g = "remote", _t = (o, e) => {
870
873
  ...m,
871
874
  display_name: "DISPLAY_NAME",
872
875
  register: !1
873
- }, ft = "10.10.10.10", Ut = [`X-Vinteo-Remote: ${ft}`], Gt = () => new x({
876
+ }, ft = "10.10.10.10", Ut = [`X-Vinteo-Remote: ${ft}`], jt = () => new x({
874
877
  JsSIP: D
875
878
  });
876
879
  export {
@@ -878,20 +881,20 @@ export {
878
881
  D as JsSIP,
879
882
  lt as NAME_INCORRECT,
880
883
  c as PASSWORD_CORRECT,
881
- A as PASSWORD_CORRECT_2,
882
- S as SIP_SERVER_URL,
884
+ R as PASSWORD_CORRECT_2,
885
+ I as SIP_SERVER_URL,
883
886
  y as SIP_WEB_SOCKET_SERVER_URL,
884
- Nt as dataForConnectionWithAuthorization,
887
+ wt as dataForConnectionWithAuthorization,
885
888
  Lt as dataForConnectionWithAuthorizationWithDisplayName,
886
- Ft as dataForConnectionWithoutAuthorization,
889
+ kt as dataForConnectionWithoutAuthorization,
887
890
  yt as dataForConnectionWithoutAuthorizationWithoutDisplayName,
888
891
  h as displayName,
889
- Gt as doMockSipConnector,
892
+ jt as doMockSipConnector,
890
893
  Ut as extraHeadersRemoteAddress,
891
894
  ft as remoteAddress,
892
- bt as uaConfigurationWithAuthorization,
893
- kt as uaConfigurationWithAuthorizationWithDisplayName,
895
+ Ft as uaConfigurationWithAuthorization,
896
+ bt as uaConfigurationWithAuthorizationWithDisplayName,
894
897
  Vt as uaConfigurationWithoutAuthorization,
895
898
  Wt as uaConfigurationWithoutAuthorizationWithoutDisplayName,
896
- I as user
899
+ _ as user
897
900
  };
package/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require("events-constructor");const o=require("./@SipConnector-BHakZWEK.cjs"),V=require("@krivega/cancelable-promise"),W=require("repeated-calls"),j=require("ts-debounce"),K=require("ua-parser-js"),X=require("sequent-promises"),Y=require("stack-promises"),G=n=>n instanceof Object&&("originator"in n||"cause"in n),J=n=>{if(V.isCanceledError(n))return!0;if(!G(n))return!1;const{originator:e,cause:t}=n;return typeof t=="string"?t===o.ECallCause.REQUEST_TIMEOUT||t===o.ECallCause.REJECTED||e==="local"&&(t===o.ECallCause.CANCELED||t===o.ECallCause.BYE):!1},z=()=>globalThis.process?.versions?.electron!==void 0,x=()=>{const n=new K.UAParser,{name:e}=n.getBrowser(),t=z();return{isChrome:e==="Chrome"||t}},A=n=>{const{url:e,cause:t}=n;let r=e;return(t===o.ECallCause.BAD_MEDIA_DESCRIPTION||t===o.ECallCause.NOT_FOUND)&&(r=`${n.message.to.uri.user}@${n.message.to.uri.host}`),r};var B=(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))(B||{});const Q=new Error("Unknown error"),Z=(n=Q)=>{const{cause:e,socket:t}=n;let r="CONNECT_SERVER_FAILED";switch(e){case"Forbidden":{r="WRONG_USER_OR_PASSWORD";break}case o.ECallCause.BAD_MEDIA_DESCRIPTION:{r="BAD_MEDIA_ERROR";break}case o.ECallCause.NOT_FOUND:{r="NOT_FOUND_ERROR";break}default:t!==void 0&&t._ws?.readyState===3?r="WS_CONNECTION_FAILED":A(n)!==void 0&&A(n)!==""&&(r="CONNECT_SERVER_FAILED_BY_LINK")}return r},ee=n=>{let e="";try{e=JSON.stringify(n)}catch(t){o.logger("failed to stringify message",t)}return e},ne=new Error("Unknown error"),te=(n=ne)=>{const{code:e,cause:t,message:r}=n,a=A(n),s={code:"",cause:"",message:""};return typeof r=="object"&&r!==null?s.message=ee(r):r&&(s.message=String(r)),a!==void 0&&a!==""&&(s.link=a),e!==void 0&&e!==""&&(s.code=e),t!==void 0&&t!==""&&(s.cause=t),s},oe=Object.freeze(Object.defineProperty({__proto__:null,EErrorTypes:B,getLinkError:A,getTypeFromError:Z,getValuesFromError:te},Symbol.toStringTag,{value:"Module"})),re=({sessionId:n,remoteAddress:e,isMutedAudio:t,isMutedVideo:r,isRegistered:a,isPresentationCall:s})=>{const c=[],l=t?"0":"1",d=r?"0":"1";return c.push(`X-Vinteo-Mic-State: ${l}`,`X-Vinteo-MainCam-State: ${d}`),(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:r})=>{const s=`${ce(n)} ${e}`;return`ChromeNew - ${t===void 0?s:`${t} ${r}, ${s}`}`},le=({isUnifiedSdpSemantic:n,appVersion:e,browserName:t,browserVersion:r,appName:a})=>n?ie({appVersion:e,browserName:t,browserVersion:r,appName:a}):"Chrome",$="purgatory",D=n=>n===$,ue=n=>e=>[...e].map(r=>async()=>n(r)),de=async({accumulatedKeys:n,sendKey:e,canRunTask:t})=>{const a=ue(e)(n);return X.sequentPromises(a,t)},ge=n=>t=>(o.logger("onStartMainCam"),n.on("api:admin-start-main-cam",t)),Ce=n=>t=>(o.logger("onStartMic"),n.on("api:admin-start-mic",t)),Se=n=>t=>(o.logger("onStopMainCam"),n.on("api:admin-stop-main-cam",t)),me=n=>t=>(o.logger("onStopMic"),n.on("api:admin-stop-mic",t)),fe=({sipConnector:n})=>{const e=(u,C)=>({isSyncForced:g})=>{if(g===!0){u();return}C()},t=ge(n),r=Se(n),a=Ce(n),s=me(n);let c,l,d,h;const P=({onStartMainCamForced:u,onStartMainCamNotForced:C,onStopMainCamForced:g,onStopMainCamNotForced:m,onStartMicForced:p,onStartMicNotForced:R,onStopMicForced:y,onStopMicNotForced:E})=>{const b=e(u,C);c=t(b);const _=e(g,m);l=r(_);const O=e(p,R);d=a(O);const S=e(y,E);h=s(S)},T=()=>{c?.(),l?.(),d?.(),h?.()};return{start:u=>{P(u)},stop:()=>{T()}}},he=Object.freeze(Object.defineProperty({__proto__:null,PURGATORY_CONFERENCE_NUMBER:$,createSyncMediaState:fe,createUaParser:x,error:oe,getExtraHeaders:re,getUserAgent:le,hasPurgatory:D,prepareMediaStream:o.prepareMediaStream,sendDtmfAccumulated:de,setEncodingsToSender:o.setEncodingsToSender,setParametersToSender:o.setParametersToSender},Symbol.toStringTag,{value:"Module"})),pe=()=>x().isChrome,Re=n=>{if(!V.isCanceledError(n)&&!W.hasCanceledError(n)&&!o.hasNotReadyForConnectionError(n))throw n;return{configuration:void 0,isSuccessful:!1}},Ee=({kind:n,readyState:e})=>n==="video"&&e==="live",U=(n,e,{onEnterPurgatory:t,onEnterConference:r})=>{D(n)?t&&t():r&&r({isSuccessProgressCall:e})},k=(n,e)=>{n(),e&&e()},L=(n,e,t)=>{throw n&&n(),e(),t},be=new Set(["on","once","onceRace","wait","off","sendDTMF","hangUp","declineToIncomingCall","sendChannels","checkTelephony","waitChannels","ping","startAutoConnect","stopAutoConnect","connection","isConfigured","isRegistered"]);class Pe{on;once;onceRace;wait;off;sendDTMF;hangUp;declineToIncomingCall;sendChannels;checkTelephony;waitChannels;ping;startAutoConnect;stopAutoConnect;connection;isConfigured;isRegistered;sipConnector;constructor(e){return this.sipConnector=e,new Proxy(this,{get:(t,r,a)=>{if(typeof r=="string"&&be.has(r)&&r in this.sipConnector){const c=Reflect.get(this.sipConnector,r,this.sipConnector);return typeof c=="function"?c.bind(this.sipConnector):c}const s=Reflect.get(t,r,a);return typeof s=="function"?s.bind(t):s}})}connectToServer=async(e,t)=>this.sipConnector.connect(e,t).then(r=>(o.logger("connectToServer then"),{configuration:r,isSuccessful:!0})).catch(async r=>(o.logger("connectToServer catch: error",r),Re(r)));callToServer=async e=>{const{conference:t,mediaStream:r,extraHeaders:a,iceServers:s,contentHint:c,degradationPreference:l,sendEncodings:d,offerToReceiveAudio:h,offerToReceiveVideo:P,directionVideo:T,directionAudio:N,setRemoteStreams:v,onBeforeProgressCall:u,onSuccessProgressCall:C,onEnterPurgatory:g,onEnterConference:m,onFailProgressCall:p,onFinishProgressCall:R,onEndedCall:y,onAddedTransceiver:E}=e,b=this.resolveHandleReadyRemoteStreamsDebounced({onReadyRemoteStreams:v}),_=this.resolveHandleReadyRemoteStreams({onReadyRemoteStreams:()=>{b().catch(o.logger)}});o.logger("callToServer",e);const O=async()=>(o.logger("startCall"),this.sipConnector.call({mediaStream:r,extraHeaders:a,iceServers:s,contentHint:c,offerToReceiveAudio:h,offerToReceiveVideo:P,directionVideo:T,directionAudio:N,degradationPreference:l,onAddedTransceiver:E,sendEncodings:d,number:t,ontrack:_}));let S=!1,f;const M=(o.logger("subscribeEnterConference: onEnterConference",m),this.sipConnector.on("api:enterRoom",({room:i})=>{o.logger("enterRoom",{_room:i,isSuccessProgressCall:S}),f=i,(g??m)&&U(f,S,{onEnterPurgatory:g,onEnterConference:m})})),F=i=>(o.logger("onSuccess"),S=!0,b().catch(o.logger),C&&C({isPurgatory:D(f)}),this.sipConnector.onceRace(["call:ended","call:failed"],()=>{k(M,y)}),i),w=i=>(o.logger("onFail"),L(p,M,i)),I=()=>{o.logger("onFinish"),R&&R()};return o.logger("onBeforeProgressCall"),u&&u(t),O().then(F).catch(i=>w(i)).finally(I)};disconnectFromServer=async()=>this.sipConnector.disconnect().then(()=>(o.logger("disconnectFromServer: then"),{isSuccessful:!0})).catch(e=>(o.logger("disconnectFromServer: catch",e),{isSuccessful:!1}));answerToIncomingCall=async e=>{const{mediaStream:t,extraHeaders:r,iceServers:a,contentHint:s,degradationPreference:c,sendEncodings:l,offerToReceiveAudio:d,offerToReceiveVideo:h,directionVideo:P,directionAudio:T,setRemoteStreams:N,onBeforeProgressCall:v,onSuccessProgressCall:u,onEnterPurgatory:C,onEnterConference:g,onFailProgressCall:m,onFinishProgressCall:p,onEndedCall:R,onAddedTransceiver:y}=e,E=this.resolveHandleReadyRemoteStreamsDebounced({onReadyRemoteStreams:N}),b=this.resolveHandleReadyRemoteStreams({onReadyRemoteStreams:()=>{E().catch(o.logger)}});o.logger("answerToIncomingCall",e);const _=async()=>this.sipConnector.answerToIncomingCall({mediaStream:t,extraHeaders:r,iceServers:a,contentHint:s,offerToReceiveAudio:d,offerToReceiveVideo:h,directionVideo:P,directionAudio:T,degradationPreference:c,onAddedTransceiver:y,sendEncodings:l,ontrack:b}),O=()=>{const{remoteCallerData:i}=this.sipConnector;return i.incomingNumber};let S=!1,f;const M=(o.logger("subscribeEnterConference: onEnterConference",g),this.sipConnector.on("api:enterRoom",i=>{o.logger("enterRoom",{room:i.room,isSuccessProgressCall:S}),f=i.room,(C??g)&&U(f,S,{onEnterPurgatory:C,onEnterConference:g})})),F=i=>(o.logger("onSuccess"),S=!0,E().catch(o.logger),u&&u({isPurgatory:D(f)}),this.sipConnector.onceRace(["call:ended","call:failed"],()=>{k(M,R)}),i),w=i=>(o.logger("onFail"),L(m,M,i)),I=()=>{o.logger("onFinish"),p&&p()};if(o.logger("onBeforeProgressCall"),v){const i=O();v(i)}return _().then(F).catch(i=>w(i)).finally(I)};updatePresentation=async({mediaStream:e,isP2P:t,contentHint:r,degradationPreference:a,sendEncodings:s,onAddedTransceiver:c})=>(o.logger("updatePresentation"),this.sipConnector.updatePresentation(e,{isP2P:t,contentHint:r,degradationPreference:a,onAddedTransceiver:c,sendEncodings:s}));startPresentation=async({mediaStream:e,isP2P:t,contentHint:r,degradationPreference:a,sendEncodings:s,callLimit:c,onAddedTransceiver:l})=>(o.logger("startPresentation"),this.sipConnector.startPresentation(e,{isP2P:t,contentHint:r,callLimit:c,degradationPreference:a,onAddedTransceiver:l,sendEncodings:s}));stopShareSipConnector=async({isP2P:e=!1}={})=>(o.logger("stopShareSipConnector"),this.sipConnector.stopPresentation({isP2P:e}).catch(t=>{o.logger(t)}));sendRefusalToTurnOnMic=async()=>{o.logger("sendRefusalToTurnOnMic"),await this.sipConnector.sendRefusalToTurnOnMic().catch(e=>{o.logger("sendRefusalToTurnOnMic: error",e)})};sendRefusalToTurnOnCam=async()=>{o.logger("sendRefusalToTurnOnCam"),await this.sipConnector.sendRefusalToTurnOnCam().catch(e=>{o.logger("sendRefusalToTurnOnCam: error",e)})};sendMediaState=async({isEnabledCam:e,isEnabledMic:t})=>{o.logger("sendMediaState"),await this.sipConnector.sendMediaState({cam:e,mic:t})};replaceMediaStream=async(e,{deleteExisting:t,addMissing:r,forceRenegotiation:a,contentHint:s,degradationPreference:c,sendEncodings:l,onAddedTransceiver:d})=>(o.logger("replaceMediaStream"),this.sipConnector.replaceMediaStream(e,{deleteExisting:t,addMissing:r,forceRenegotiation:a,contentHint:s,degradationPreference:c,onAddedTransceiver:d,sendEncodings:l}));askPermissionToEnableCam=async()=>{o.logger("askPermissionToEnableCam"),await this.sipConnector.askPermissionToEnableCam()};resolveHandleReadyRemoteStreamsDebounced=({onReadyRemoteStreams:e})=>j.debounce(()=>{const t=this.sipConnector.getRemoteStreams();o.logger("remoteStreams",t),t&&e(t)},200);resolveHandleReadyRemoteStreams=({onReadyRemoteStreams:e})=>({track:t})=>{Ee(t)&&e()};getRemoteStreams=()=>(o.logger("getRemoteStreams"),this.sipConnector.getRemoteStreams());onUseLicense=e=>(o.logger("onUseLicense"),this.sipConnector.on("api:useLicense",e));onMustStopPresentation=e=>(o.logger("onMustStopPresentation"),this.sipConnector.on("api:mustStopPresentation",e));onMoveToSpectators=e=>(o.logger("onMoveToSpectators"),this.sipConnector.on("api:participant:move-request-to-spectators",e));onMoveToParticipants=e=>(o.logger("onMoveToParticipants"),this.sipConnector.on("api:participant:move-request-to-participants",e));onStats=e=>(o.logger("onStats"),this.sipConnector.on("stats:collected",e));offStats=e=>{o.logger("offStats"),this.sipConnector.off("stats:collected",e)}}var H=(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))(H||{});exports.ECallCause=o.ECallCause;exports.EStatsTypes=o.EStatsTypes;exports.EUseLicense=o.EUseLicense;exports.SipConnector=o.SipConnector;exports.StatsPeerConnection=o.StatsPeerConnection;exports.disableDebug=o.disableDebug;exports.enableDebug=o.enableDebug;exports.getCodecFromSender=o.getCodecFromSender;exports.hasCanceledStartPresentationError=o.hasCanceledStartPresentationError;Object.defineProperty(exports,"hasConnectionPromiseIsNotActualError",{enumerable:!0,get:()=>Y.isPromiseIsNotActualError});exports.EMimeTypesVideoCodecs=H;exports.SipConnectorFacade=Pe;exports.hasAvailableStats=pe;exports.hasCanceledCallError=J;exports.tools=he;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require("events-constructor");const o=require("./@SipConnector-CZiURTVf.cjs"),k=require("@krivega/cancelable-promise"),$=require("repeated-calls"),q=require("ts-debounce"),W=require("ua-parser-js"),H=require("sequent-promises"),j=require("stack-promises"),K=n=>n instanceof Object&&("originator"in n||"cause"in n),X=n=>{if(k.isCanceledError(n))return!0;if(!K(n))return!1;const{originator:e,cause:t}=n;return typeof t=="string"?t===o.ECallCause.REQUEST_TIMEOUT||t===o.ECallCause.REJECTED||e==="local"&&(t===o.ECallCause.CANCELED||t===o.ECallCause.BYE):!1},Y=()=>globalThis.process?.versions?.electron!==void 0,L=()=>{const n=new W.UAParser,{name:e}=n.getBrowser(),t=Y();return{isChrome:e==="Chrome"||t}},M=n=>{const{url:e,cause:t}=n;let r=e;return(t===o.ECallCause.BAD_MEDIA_DESCRIPTION||t===o.ECallCause.NOT_FOUND)&&(r=`${n.message.to.uri.user}@${n.message.to.uri.host}`),r};var V=(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))(V||{});const G=new Error("Unknown error"),J=(n=G)=>{const{cause:e,socket:t}=n;let r="CONNECT_SERVER_FAILED";switch(e){case"Forbidden":{r="WRONG_USER_OR_PASSWORD";break}case o.ECallCause.BAD_MEDIA_DESCRIPTION:{r="BAD_MEDIA_ERROR";break}case o.ECallCause.NOT_FOUND:{r="NOT_FOUND_ERROR";break}default:t!==void 0&&t._ws?.readyState===3?r="WS_CONNECTION_FAILED":M(n)!==void 0&&M(n)!==""&&(r="CONNECT_SERVER_FAILED_BY_LINK")}return r},z=n=>{let e="";try{e=JSON.stringify(n)}catch(t){o.logger("failed to stringify message",t)}return e},Q=new Error("Unknown error"),Z=(n=Q)=>{const{code:e,cause:t,message:r}=n,a=M(n),s={code:"",cause:"",message:""};return typeof r=="object"&&r!==null?s.message=z(r):r&&(s.message=String(r)),a!==void 0&&a!==""&&(s.link=a),e!==void 0&&e!==""&&(s.code=e),t!==void 0&&t!==""&&(s.cause=t),s},ee=Object.freeze(Object.defineProperty({__proto__:null,EErrorTypes:V,getLinkError:M,getTypeFromError:J,getValuesFromError:Z},Symbol.toStringTag,{value:"Module"})),ne=({sessionId:n,remoteAddress:e,isMutedAudio:t,isMutedVideo:r,isRegistered:a,isPresentationCall:s})=>{const c=[],l=t?"0":"1",g=r?"0":"1";return c.push(`X-Vinteo-Mic-State: ${l}`,`X-Vinteo-MainCam-State: ${g}`),(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},te="[@*!|]",oe="_",re=n=>{let e=n;return e=e.replaceAll(new RegExp(te,"g"),oe),e},se=({appName:n,appVersion:e,browserName:t,browserVersion:r})=>{const s=`${re(n)} ${e}`;return`ChromeNew - ${t===void 0?s:`${t} ${r}, ${s}`}`},ae=({isUnifiedSdpSemantic:n,appVersion:e,browserName:t,browserVersion:r,appName:a})=>n?se({appVersion:e,browserName:t,browserVersion:r,appName:a}):"Chrome",x="purgatory",y=n=>n===x,ce=n=>e=>[...e].map(r=>async()=>n(r)),ie=async({accumulatedKeys:n,sendKey:e,canRunTask:t})=>{const a=ce(e)(n);return H.sequentPromises(a,t)},le=n=>t=>(o.logger("onStartMainCam"),n.on("api:admin-start-main-cam",t)),ue=n=>t=>(o.logger("onStartMic"),n.on("api:admin-start-mic",t)),ge=n=>t=>(o.logger("onStopMainCam"),n.on("api:admin-stop-main-cam",t)),de=n=>t=>(o.logger("onStopMic"),n.on("api:admin-stop-mic",t)),Ce=({sipConnector:n})=>{const e=(u,d)=>({isSyncForced:C})=>{if(C===!0){u();return}d()},t=le(n),r=ge(n),a=ue(n),s=de(n);let c,l,g,p;const b=({onStartMainCamForced:u,onStartMainCamNotForced:d,onStopMainCamForced:C,onStopMainCamNotForced:h,onStartMicForced:R,onStartMicNotForced:O,onStopMicForced:_,onStopMicNotForced:v})=>{const S=e(u,d);c=t(S);const f=e(C,h);l=r(f);const N=e(R,O);g=a(N);const m=e(_,v);p=s(m)},P=()=>{c?.(),l?.(),g?.(),p?.()};return{start:u=>{b(u)},stop:()=>{P()}}},Se=Object.freeze(Object.defineProperty({__proto__:null,PURGATORY_CONFERENCE_NUMBER:x,createSyncMediaState:Ce,createUaParser:L,error:ee,getExtraHeaders:ne,getUserAgent:ae,hasPurgatory:y,prepareMediaStream:o.prepareMediaStream,sendDtmfAccumulated:ie,sendOffer:o.sendOffer,setEncodingsToSender:o.setEncodingsToSender,setParametersToSender:o.setParametersToSender},Symbol.toStringTag,{value:"Module"})),fe=()=>L().isChrome,me=n=>{if(!k.isCanceledError(n)&&!$.hasCanceledError(n)&&!o.hasNotReadyForConnectionError(n))throw n;return{configuration:void 0,isSuccessful:!1}},pe=({kind:n,readyState:e})=>n==="video"&&e==="live",w=(n,e,{onEnterPurgatory:t,onEnterConference:r})=>{y(n)?t&&t():r&&r({isSuccessProgressCall:e})},I=(n,e)=>{n(),e&&e()},U=(n,e,t)=>{throw n&&n(),e(),t},Ee=new Set(["on","once","onceRace","wait","off","sendDTMF","hangUp","declineToIncomingCall","sendChannels","checkTelephony","waitChannels","ping","startAutoConnect","stopAutoConnect","connection","isConfigured","isRegistered"]);class he{on;once;onceRace;wait;off;sendDTMF;hangUp;declineToIncomingCall;sendChannels;checkTelephony;waitChannels;ping;startAutoConnect;stopAutoConnect;connection;isConfigured;isRegistered;sipConnector;constructor(e){return this.sipConnector=e,new Proxy(this,{get:(t,r,a)=>{if(typeof r=="string"&&Ee.has(r)&&r in this.sipConnector){const c=Reflect.get(this.sipConnector,r,this.sipConnector);return typeof c=="function"?c.bind(this.sipConnector):c}const s=Reflect.get(t,r,a);return typeof s=="function"?s.bind(t):s}})}connectToServer=async(e,t)=>this.sipConnector.connect(e,t).then(r=>(o.logger("connectToServer then"),{configuration:r,isSuccessful:!0})).catch(async r=>(o.logger("connectToServer catch: error",r),me(r)));callToServer=async e=>{const{conference:t,mediaStream:r,extraHeaders:a,iceServers:s,contentHint:c,degradationPreference:l,sendEncodings:g,offerToReceiveAudio:p,offerToReceiveVideo:b,directionVideo:P,directionAudio:T,onBeforeProgressCall:E,onSuccessProgressCall:u,onEnterPurgatory:d,onEnterConference:C,onFailProgressCall:h,onFinishProgressCall:R,onEndedCall:O,onAddedTransceiver:_}=e;o.logger("callToServer",e);const v=async()=>(o.logger("startCall"),this.sipConnector.call({mediaStream:r,extraHeaders:a,iceServers:s,contentHint:c,offerToReceiveAudio:p,offerToReceiveVideo:b,directionVideo:P,directionAudio:T,degradationPreference:l,onAddedTransceiver:_,sendEncodings:g,number:t}));let S=!1,f;const m=(o.logger("subscribeEnterConference: onEnterConference",C),this.sipConnector.on("api:enterRoom",({room:i})=>{o.logger("enterRoom",{_room:i,isSuccessProgressCall:S}),f=i,(d??C)&&w(f,S,{onEnterPurgatory:d,onEnterConference:C})})),A=i=>(o.logger("onSuccess"),S=!0,u&&u({isPurgatory:y(f)}),this.sipConnector.onceRace(["call:ended","call:failed"],()=>{I(m,O)}),i),F=i=>(o.logger("onFail"),U(h,m,i)),D=()=>{o.logger("onFinish"),R&&R()};return o.logger("onBeforeProgressCall"),E&&E(t),v().then(A).catch(i=>F(i)).finally(D)};disconnectFromServer=async()=>this.sipConnector.disconnect().then(()=>(o.logger("disconnectFromServer: then"),{isSuccessful:!0})).catch(e=>(o.logger("disconnectFromServer: catch",e),{isSuccessful:!1}));answerToIncomingCall=async e=>{const{mediaStream:t,extraHeaders:r,iceServers:a,contentHint:s,degradationPreference:c,sendEncodings:l,offerToReceiveAudio:g,offerToReceiveVideo:p,directionVideo:b,directionAudio:P,onBeforeProgressCall:T,onSuccessProgressCall:E,onEnterPurgatory:u,onEnterConference:d,onFailProgressCall:C,onFinishProgressCall:h,onEndedCall:R,onAddedTransceiver:O}=e;o.logger("answerToIncomingCall",e);const _=async()=>this.sipConnector.answerToIncomingCall({mediaStream:t,extraHeaders:r,iceServers:a,contentHint:s,offerToReceiveAudio:g,offerToReceiveVideo:p,directionVideo:b,directionAudio:P,degradationPreference:c,onAddedTransceiver:O,sendEncodings:l}),v=()=>{const{remoteCallerData:i}=this.sipConnector;return i.incomingNumber};let S=!1,f;const m=(o.logger("subscribeEnterConference: onEnterConference",d),this.sipConnector.on("api:enterRoom",i=>{o.logger("enterRoom",{room:i.room,isSuccessProgressCall:S}),f=i.room,(u??d)&&w(f,S,{onEnterPurgatory:u,onEnterConference:d})})),A=i=>(o.logger("onSuccess"),S=!0,E&&E({isPurgatory:y(f)}),this.sipConnector.onceRace(["call:ended","call:failed"],()=>{I(m,R)}),i),F=i=>(o.logger("onFail"),U(C,m,i)),D=()=>{o.logger("onFinish"),h&&h()};if(o.logger("onBeforeProgressCall"),T){const i=v();T(i)}return _().then(A).catch(i=>F(i)).finally(D)};updatePresentation=async({mediaStream:e,isP2P:t,contentHint:r,degradationPreference:a,sendEncodings:s,onAddedTransceiver:c})=>(o.logger("updatePresentation"),this.sipConnector.updatePresentation(e,{isP2P:t,contentHint:r,degradationPreference:a,onAddedTransceiver:c,sendEncodings:s}));startPresentation=async({mediaStream:e,isP2P:t,contentHint:r,degradationPreference:a,sendEncodings:s,callLimit:c,onAddedTransceiver:l})=>(o.logger("startPresentation"),this.sipConnector.startPresentation(e,{isP2P:t,contentHint:r,callLimit:c,degradationPreference:a,onAddedTransceiver:l,sendEncodings:s}));stopShareSipConnector=async({isP2P:e=!1}={})=>(o.logger("stopShareSipConnector"),this.sipConnector.stopPresentation({isP2P:e}).catch(t=>{o.logger(t)}));sendRefusalToTurnOnMic=async()=>{o.logger("sendRefusalToTurnOnMic"),await this.sipConnector.sendRefusalToTurnOnMic().catch(e=>{o.logger("sendRefusalToTurnOnMic: error",e)})};sendRefusalToTurnOnCam=async()=>{o.logger("sendRefusalToTurnOnCam"),await this.sipConnector.sendRefusalToTurnOnCam().catch(e=>{o.logger("sendRefusalToTurnOnCam: error",e)})};sendMediaState=async({isEnabledCam:e,isEnabledMic:t})=>{o.logger("sendMediaState"),await this.sipConnector.sendMediaState({cam:e,mic:t})};replaceMediaStream=async(e,{deleteExisting:t,addMissing:r,forceRenegotiation:a,contentHint:s,degradationPreference:c,sendEncodings:l,onAddedTransceiver:g})=>(o.logger("replaceMediaStream"),this.sipConnector.replaceMediaStream(e,{deleteExisting:t,addMissing:r,forceRenegotiation:a,contentHint:s,degradationPreference:c,onAddedTransceiver:g,sendEncodings:l}));askPermissionToEnableCam=async()=>{o.logger("askPermissionToEnableCam"),await this.sipConnector.askPermissionToEnableCam()};resolveHandleReadyRemoteStreamsDebounced=({onReadyRemoteStreams:e})=>q.debounce(()=>{const t=this.sipConnector.getRemoteStreams();o.logger("remoteStreams",t),e(t)},200);resolveHandleReadyRemoteStreams=({onReadyRemoteStreams:e})=>({track:t})=>{pe(t)&&e()};getRemoteStreams=()=>(o.logger("getRemoteStreams"),this.sipConnector.getRemoteStreams());onUseLicense=e=>(o.logger("onUseLicense"),this.sipConnector.on("api:useLicense",e));onMustStopPresentation=e=>(o.logger("onMustStopPresentation"),this.sipConnector.on("api:mustStopPresentation",e));onMoveToSpectators=e=>(o.logger("onMoveToSpectators"),this.sipConnector.on("api:participant:move-request-to-spectators",e));onMoveToParticipants=e=>(o.logger("onMoveToParticipants"),this.sipConnector.on("api:participant:move-request-to-participants",e));onStats=e=>(o.logger("onStats"),this.sipConnector.on("stats:collected",e));offStats=e=>{o.logger("offStats"),this.sipConnector.off("stats:collected",e)}}var B=(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))(B||{});exports.ECallCause=o.ECallCause;exports.EStatsTypes=o.EStatsTypes;exports.EUseLicense=o.EUseLicense;exports.SipConnector=o.SipConnector;exports.StatsPeerConnection=o.StatsPeerConnection;exports.disableDebug=o.disableDebug;exports.enableDebug=o.enableDebug;exports.getCodecFromSender=o.getCodecFromSender;exports.hasCanceledStartPresentationError=o.hasCanceledStartPresentationError;Object.defineProperty(exports,"hasConnectionPromiseIsNotActualError",{enumerable:!0,get:()=>j.isPromiseIsNotActualError});exports.EMimeTypesVideoCodecs=B;exports.SipConnectorFacade=he;exports.hasAvailableStats=fe;exports.hasCanceledCallError=X;exports.tools=Se;