sip-connector 19.9.0 → 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 (35) hide show
  1. package/README.md +131 -37
  2. package/dist/@SipConnector-CZiURTVf.cjs +1 -0
  3. package/dist/{@SipConnector-BpypVXj0.js → @SipConnector-D4DfiZRM.js} +860 -554
  4. package/dist/ApiManager/eventNames.d.ts +10 -3
  5. package/dist/CallManager/@CallManager.d.ts +18 -4
  6. package/dist/CallManager/MCUSession.d.ts +0 -1
  7. package/dist/CallManager/RecvSession.d.ts +1 -1
  8. package/dist/CallManager/RemoteStreamsManager.d.ts +20 -5
  9. package/dist/CallManager/RoleManager.d.ts +31 -0
  10. package/dist/CallManager/eventNames.d.ts +9 -2
  11. package/dist/CallManager/index.d.ts +1 -1
  12. package/dist/CallManager/types.d.ts +17 -5
  13. package/dist/ConnectionManager/@ConnectionManager.d.ts +2 -2
  14. package/dist/ConnectionManager/ConfigurationManager.d.ts +6 -1
  15. package/dist/ConnectionManager/ConnectionFlow.d.ts +5 -4
  16. package/dist/ConnectionManager/SipOperations.d.ts +2 -2
  17. package/dist/ConnectionManager/UAFactory.d.ts +4 -4
  18. package/dist/SipConnector/@SipConnector.d.ts +4 -2
  19. package/dist/SipConnector/eventNames.d.ts +1 -1
  20. package/dist/SipConnectorFacade/@SipConnectorFacade.d.ts +0 -2
  21. package/dist/VideoSendingBalancer/__fixtures__/createMockTrack.d.ts +1 -1
  22. package/dist/__fixtures__/RTCPeerConnectionMock.d.ts +1 -1
  23. package/dist/__fixtures__/index.d.ts +4 -4
  24. package/dist/doMock.cjs +1 -1
  25. package/dist/doMock.js +23 -21
  26. package/dist/index.cjs +1 -1
  27. package/dist/index.js +156 -171
  28. package/dist/tools/__fixtures__/connectToServer.d.ts +15 -15
  29. package/dist/tools/__fixtures__/permissions.d.ts +2 -2
  30. package/dist/tools/__fixtures__/processRequest.d.ts +2 -2
  31. package/dist/tools/index.d.ts +1 -0
  32. package/dist/tools/sendOffer.d.ts +39 -0
  33. package/dist/utils/utils.d.ts +1 -1
  34. package/package.json +4 -4
  35. package/dist/@SipConnector-CR3DyIpB.cjs +0 -1
package/dist/doMock.js CHANGED
@@ -3,9 +3,9 @@ import k from "@krivega/jssip/lib/NameAddrHeader";
3
3
  import F from "@krivega/jssip/lib/URI";
4
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 { MediaStreamTrackMock as U, createAudioMediaStreamTrackMock as G, createVideoMediaStreamTrackMock as H } from "webrtc-mock";
6
+ import { MediaStreamTrackMock as U, createAudioMediaStreamTrackMock as j, createVideoMediaStreamTrackMock as G } from "webrtc-mock";
7
7
  import { Events as O } from "events-constructor";
8
- import { O as j, S as x } from "./@SipConnector-BpypVXj0.js";
8
+ import { O as H, S as x } from "./@SipConnector-D4DfiZRM.js";
9
9
  class T extends b {
10
10
  headers;
11
11
  constructor(e) {
@@ -15,7 +15,7 @@ class T extends b {
15
15
  return this.headers.get(e) ?? "";
16
16
  }
17
17
  }
18
- const Y = "incomingCall", q = "declinedIncomingCall", z = "failedIncomingCall", B = "terminatedIncomingCall", P = "connecting", K = "connected", J = "disconnected", $ = "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", Ge = "failed", He = "muted", je = "unmuted", xe = "newDTMF", Ye = "newInfo", qe = "hold", ze = "unhold", Be = "update", Ke = "sdp", Je = "icecandidate", $e = "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 = [
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
20
  q,
21
21
  B,
@@ -34,8 +34,8 @@ const Y = "incomingCall", q = "declinedIncomingCall", z = "failedIncomingCall",
34
34
  ], v = [
35
35
  P,
36
36
  K,
37
- J,
38
37
  $,
38
+ J,
39
39
  Q,
40
40
  X,
41
41
  Z,
@@ -71,17 +71,17 @@ const Y = "incomingCall", q = "declinedIncomingCall", z = "failedIncomingCall",
71
71
  Ve,
72
72
  We,
73
73
  Ue,
74
+ je,
74
75
  Ge,
75
76
  He,
76
- je,
77
77
  xe,
78
78
  Ye,
79
79
  qe,
80
80
  ze,
81
81
  Be,
82
82
  Ke,
83
- Je,
84
83
  $e,
84
+ Je,
85
85
  Qe,
86
86
  Xe,
87
87
  Ze,
@@ -413,7 +413,7 @@ class dt extends EventTarget {
413
413
  getSenders = () => this.senders;
414
414
  addTrack = (e, ...t) => {
415
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), r;
416
+ return o.mid = e.kind === "audio" ? "0" : "1", this.senders.push(r), this.dispatchTrackInternal(e, ...t), r;
417
417
  };
418
418
  // Дополнительный метод для тестов с возможностью установки mid
419
419
  addTrackWithMid = (e, t) => {
@@ -423,14 +423,16 @@ class dt extends EventTarget {
423
423
  dispatchTrack(e) {
424
424
  this.dispatchTrackInternal(new U(e));
425
425
  }
426
- dispatchTrackInternal(e) {
427
- const t = new Event(
426
+ dispatchTrackInternal(e, ...t) {
427
+ const r = new Event(
428
428
  "track"
429
429
  /* TRACK */
430
430
  );
431
- Object.defineProperty(t, "track", {
431
+ Object.defineProperty(r, "track", {
432
432
  value: e
433
- }), this.dispatchEvent(t);
433
+ }), Object.defineProperty(r, "streams", {
434
+ value: t.length === 0 ? [new MediaStream([e])] : t
435
+ }), this.dispatchEvent(r);
434
436
  }
435
437
  }
436
438
  function Et(n) {
@@ -531,14 +533,14 @@ class i extends ct {
531
533
  return e ? (this.createPeerconnection(e), !0) : !1;
532
534
  }
533
535
  createPeerconnection(e) {
534
- const t = G();
536
+ const t = j();
535
537
  t.id = "mainaudio1";
536
538
  const r = [t];
537
539
  if (mt(e)) {
538
- const a = H();
540
+ const a = G();
539
541
  a.id = "mainvideo1", r.push(a);
540
542
  }
541
- 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);
542
544
  }
543
545
  connect(e, { mediaStream: t } = {}) {
544
546
  const r = Et(e);
@@ -549,7 +551,7 @@ class i extends ct {
549
551
  cause: "Rejected"
550
552
  }) : (this.trigger("connecting"), this.timeoutNewInfo = setTimeout(() => {
551
553
  this.newInfo({
552
- originator: j.REMOTE,
554
+ originator: H.REMOTE,
553
555
  // @ts-expect-error
554
556
  request: {
555
557
  getHeader: (o) => o === "content-type" ? "application/vinteo.webrtc.roomname" : o === "x-webrtc-enter-room" ? r : o === "x-webrtc-participant-name" ? "Test Caller 1" : ""
@@ -575,7 +577,7 @@ class i extends ct {
575
577
  return this.status_code = e, this.trigger("ended", { status_code: e, originator: "remote" }), this;
576
578
  }
577
579
  addStream(e, t = "getTracks") {
578
- e[t]().forEach((r) => this.connection.addTrack(r));
580
+ e[t]().forEach((r) => this.connection.addTrack(r, e));
579
581
  }
580
582
  forEachSenders(e) {
581
583
  const t = this.connection.getSenders();
@@ -822,11 +824,11 @@ const g = "remote", Tt = (n, e) => {
822
824
  C: {
823
825
  INVITE: "INVITE"
824
826
  }
825
- }, _ = "user", h = "displayName", I = "SIP_SERVER_URL", y = "SIP_WEB_SOCKET_SERVER_URL", Nt = new D.WebSocketInterface(y), S = {
827
+ }, _ = "user", h = "displayName", I = "SIP_SERVER_URL", y = "SIP_WEB_SOCKET_SERVER_URL", Nt = new D.WebSocketInterface(`wss://${y}/webrtc/wss/`), S = {
826
828
  displayName: "DISPLAY_NAME",
827
829
  userAgent: "Chrome",
828
- sipServerUrl: I,
829
- sipWebSocketServerURL: y
830
+ sipServerIp: I,
831
+ sipServerUrl: y
830
832
  }, yt = {
831
833
  ...S,
832
834
  displayName: "DISPLAY_NAME",
@@ -871,7 +873,7 @@ const g = "remote", Tt = (n, e) => {
871
873
  ...m,
872
874
  display_name: "DISPLAY_NAME",
873
875
  register: !1
874
- }, 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({
875
877
  JsSIP: D
876
878
  });
877
879
  export {
@@ -887,7 +889,7 @@ export {
887
889
  kt as dataForConnectionWithoutAuthorization,
888
890
  yt as dataForConnectionWithoutAuthorizationWithoutDisplayName,
889
891
  h as displayName,
890
- Gt as doMockSipConnector,
892
+ jt as doMockSipConnector,
891
893
  Ut as extraHeadersRemoteAddress,
892
894
  ft as remoteAddress,
893
895
  Ft as uaConfigurationWithAuthorization,
package/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require("events-constructor");const o=require("./@SipConnector-CR3DyIpB.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;