sip-connector 9.1.0 → 9.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{SipConnector-Eb3K8Ixo.js → SipConnector-7Qar6pDS.js} +283 -276
- package/dist/SipConnector-BhCqlPz2.cjs +1 -0
- package/dist/SipConnector.d.ts +8 -2
- package/dist/__fixtures__/RTCPeerConnectionMock.d.ts +2 -1
- package/dist/__fixtures__/RTCRtpSenderMock.d.ts +4 -1
- package/dist/doMock.cjs +1 -1
- package/dist/doMock.js +87 -51
- package/dist/index.cjs +1 -1
- package/dist/index.js +2 -2
- package/dist/types.d.ts +1 -1
- package/package.json +13 -13
- package/dist/SipConnector-Qzp-_Vxz.cjs +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sip-connector",
|
|
3
|
-
"version": "9.1
|
|
3
|
+
"version": "9.2.1",
|
|
4
4
|
"description": "Module for connect to Vinteo server",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"webrtc",
|
|
@@ -66,20 +66,20 @@
|
|
|
66
66
|
"@krivega/jssip": "^3.24.3",
|
|
67
67
|
"debug": "^4.3.7",
|
|
68
68
|
"events-constructor": "^1.2.3",
|
|
69
|
-
"repeated-calls": "^2.
|
|
69
|
+
"repeated-calls": "^2.3.0",
|
|
70
70
|
"sequent-promises": "^2.0.1",
|
|
71
71
|
"stack-promises": "^2.0.2",
|
|
72
72
|
"ts-debounce": "^4.0.0",
|
|
73
73
|
"webrtc-mock": "^1.1.6"
|
|
74
74
|
},
|
|
75
75
|
"devDependencies": {
|
|
76
|
-
"@babel/preset-typescript": "^7.
|
|
77
|
-
"@commitlint/cli": "^19.
|
|
78
|
-
"@commitlint/config-conventional": "^19.
|
|
76
|
+
"@babel/preset-typescript": "^7.25.7",
|
|
77
|
+
"@commitlint/cli": "^19.5.0",
|
|
78
|
+
"@commitlint/config-conventional": "^19.5.0",
|
|
79
79
|
"@nabla/vite-plugin-eslint": "^2.0.4",
|
|
80
80
|
"@types/debug": "^4.1.12",
|
|
81
|
-
"@types/dom-mediacapture-transform": "^0.1.
|
|
82
|
-
"@types/jest": "^29.5.
|
|
81
|
+
"@types/dom-mediacapture-transform": "^0.1.10",
|
|
82
|
+
"@types/jest": "^29.5.13",
|
|
83
83
|
"@typescript-eslint/eslint-plugin": "^7.15.0",
|
|
84
84
|
"@typescript-eslint/parser": "^7.15.0",
|
|
85
85
|
"cross-env": "^7.0.3",
|
|
@@ -89,11 +89,11 @@
|
|
|
89
89
|
"eslint-config-prettier": "^9.1.0",
|
|
90
90
|
"eslint-import-resolver-typescript": "^3.6.3",
|
|
91
91
|
"eslint-plugin-flowtype": "^8.0.3",
|
|
92
|
-
"eslint-plugin-import": "^2.
|
|
92
|
+
"eslint-plugin-import": "^2.31.0",
|
|
93
93
|
"eslint-plugin-jest": "^28.8.3",
|
|
94
94
|
"eslint-plugin-prettier": "^5.2.1",
|
|
95
|
-
"eslint-plugin-unicorn": "^
|
|
96
|
-
"husky": "^9.1.
|
|
95
|
+
"eslint-plugin-unicorn": "^56.0.0",
|
|
96
|
+
"husky": "^9.1.6",
|
|
97
97
|
"jest": "^29.7.0",
|
|
98
98
|
"jest-environment-jsdom": "^29.7.0",
|
|
99
99
|
"jest-extended": "^4.0.2",
|
|
@@ -104,9 +104,9 @@
|
|
|
104
104
|
"ts-jest": "^29.2.5",
|
|
105
105
|
"ts-node": "^10.9.2",
|
|
106
106
|
"tsc-files": "^1.1.4",
|
|
107
|
-
"typescript": "^5.6.
|
|
108
|
-
"vite": "^5.4.
|
|
109
|
-
"vite-plugin-dts": "^4.2.
|
|
107
|
+
"typescript": "^5.6.3",
|
|
108
|
+
"vite": "^5.4.8",
|
|
109
|
+
"vite-plugin-dts": "^4.2.3",
|
|
110
110
|
"vite-tsconfig-paths": "^5.0.1"
|
|
111
111
|
},
|
|
112
112
|
"peerDependencies": {
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";var Ot=Object.defineProperty;var ft=(r,e,t)=>e in r?Ot(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t;var i=(r,e,t)=>ft(r,typeof e!="symbol"?e+"":e,t);const N=require("@krivega/cancelable-promise"),ve=require("events-constructor"),be=require("repeated-calls"),B=require("debug"),Dt="Connection Error",qe="Request Timeout",Mt="SIP Failure Code",vt="Internal Error",bt="Busy",V="Rejected",yt="Redirected",wt="Unavailable",ke="Not Found",Ut="Address Incomplete",Lt="Incompatible SDP",Ht="Missing SDP",Wt="Authentication Error",Fe="Terminated",qt="WebRTC Error",Be="Canceled",kt="No Answer",Ft="Expires",Bt="No ACK",Vt="Dialog Error",Yt="User Denied Media Access",Ve="Bad Media Description",xt="RTP Timeout",Gt=Object.freeze(Object.defineProperty({__proto__:null,ADDRESS_INCOMPLETE:Ut,AUTHENTICATION_ERROR:Wt,BAD_MEDIA_DESCRIPTION:Ve,BUSY:bt,BYE:Fe,CANCELED:Be,CONNECTION_ERROR:Dt,DIALOG_ERROR:Vt,EXPIRES:Ft,INCOMPATIBLE_SDP:Lt,INTERNAL_ERROR:vt,MISSING_SDP:Ht,NOT_FOUND:ke,NO_ACK:Bt,NO_ANSWER:kt,REDIRECTED:yt,REJECTED:V,REQUEST_TIMEOUT:qe,RTP_TIMEOUT:xt,SIP_FAILURE_CODE:Mt,UNAVAILABLE:wt,USER_DENIED_MEDIA_ACCESS:Yt,WEBRTC_ERROR:qt},Symbol.toStringTag,{value:"Module"})),Y="incomingCall",x="declinedIncomingCall",G="failedIncomingCall",$="terminatedIncomingCall",k="connecting",m="connected",S="disconnected",v="newRTCSession",p="registered",X="unregistered",P="registrationFailed",Ye="newMessage",J="sipEvent",z="availableSecondRemoteStream",Q="notAvailableSecondRemoteStream",j="mustStopPresentation",b="shareState",K="enterRoom",Z="useLicense",ee="peerconnection:confirmed",te="peerconnection:ontrack",y="channels",ne="channels:notify",se="ended:fromserver",ie="main-cam-control",re="admin-stop-main-cam",oe="admin-start-main-cam",ae="admin-stop-mic",ce="admin-start-mic",w="admin-force-sync-media-state",_e="participant:added-to-list-moderators",Ee="participant:removed-from-list-moderators",le="participant:move-request-to-stream",he="participant:move-request-to-spectators",de="participation:accepting-word-request",Te="participation:cancelling-word-request",ue="webcast:started",Se="webcast:stopped",Ce="account:changed",Ne="account:deleted",ge="conference:participant-token-issued",O="ended",xe="sending",Ge="reinvite",$e="replaces",Xe="refer",Je="progress",ze="accepted",U="confirmed",L="peerconnection",A="failed",Qe="muted",je="unmuted",Ae="newDTMF",Re="newInfo",Ke="hold",Ze="unhold",et="update",tt="sdp",nt="icecandidate",st="getusermediafailed",it="peerconnection:createofferfailed",rt="peerconnection:createanswerfailed",ot="peerconnection:setlocaldescriptionfailed",at="peerconnection:setremotedescriptionfailed",ct="presentation:start",_t="presentation:started",Et="presentation:end",Ie="presentation:ended",H="presentation:failed",lt="SPECTATOR",ht=1e6,$t=Object.freeze(Object.defineProperty({__proto__:null,ACCEPTED:ze,ACCOUNT_CHANGED:Ce,ACCOUNT_DELETED:Ne,ADMIN_FORCE_SYNC_MEDIA_STATE:w,ADMIN_START_MAIN_CAM:oe,ADMIN_START_MIC:ce,ADMIN_STOP_MAIN_CAM:re,ADMIN_STOP_MIC:ae,AVAILABLE_SECOND_REMOTE_STREAM_EVENT:z,CHANNELS:y,CHANNELS_NOTIFY:ne,CONFERENCE_PARTICIPANT_TOKEN_ISSUED:ge,CONFIRMED:U,CONNECTED:m,CONNECTING:k,DECLINED_INCOMING_CALL:x,DISCONNECTED:S,ENDED:O,ENDED_FROM_SERVER:se,ENTER_ROOM:K,FAILED:A,FAILED_INCOMING_CALL:G,GET_USER_MEDIA_FAILED:st,HOLD:Ke,ICE_CANDIDATE:nt,INCOMING_CALL:Y,MAIN_CAM_CONTROL:ie,MUST_STOP_PRESENTATION_EVENT:j,MUTED:Qe,NEW_DTMF:Ae,NEW_INFO:Re,NEW_MESSAGE:Ye,NEW_RTC_SESSION:v,NOT_AVAILABLE_SECOND_REMOTE_STREAM_EVENT:Q,ONE_MEGABIT_IN_BITS:ht,PARTICIPANT_ADDED_TO_LIST_MODERATORS:_e,PARTICIPANT_MOVE_REQUEST_TO_SPECTATORS:he,PARTICIPANT_MOVE_REQUEST_TO_STREAM:le,PARTICIPANT_REMOVED_FROM_LIST_MODERATORS:Ee,PARTICIPATION_ACCEPTING_WORD_REQUEST:de,PARTICIPATION_CANCELLING_WORD_REQUEST:Te,PEER_CONNECTION:L,PEER_CONNECTION_CONFIRMED:ee,PEER_CONNECTION_CREATE_ANSWER_FAILED:rt,PEER_CONNECTION_CREATE_OFFER_FAILED:it,PEER_CONNECTION_ONTRACK:te,PEER_CONNECTION_SET_LOCAL_DESCRIPTION_FAILED:ot,PEER_CONNECTION_SET_REMOTE_DESCRIPTION_FAILED:at,PRESENTATION_END:Et,PRESENTATION_ENDED:Ie,PRESENTATION_FAILED:H,PRESENTATION_START:ct,PRESENTATION_STARTED:_t,PROGRESS:Je,REFER:Xe,REGISTERED:p,REGISTRATION_FAILED:P,REINVITE:Ge,REPLACES:$e,SDP:tt,SENDING:xe,SHARE_STATE:b,SIP_EVENT:J,SPECTATOR:lt,TERMINATED_INCOMING_CALL:$,UNHOLD:Ze,UNMUTED:je,UNREGISTERED:X,UPDATE:et,USE_LICENSE:Z,WEBCAST_STARTED:ue,WEBCAST_STOPPED:Se},Symbol.toStringTag,{value:"Module"})),dt=[Y,x,$,G,de,Te,le,ne,ge,Ce,Ne,ue,Se,_e,Ee],me=[k,m,S,v,p,X,P,Ye,J],Tt=[z,Q,j,b,K,Z,ee,te,y,se,ie,oe,re,ae,ce,w,he],pe=[O,k,xe,Ge,$e,Xe,Je,ze,U,L,A,Qe,je,Ae,Re,Ke,Ze,et,tt,nt,st,it,rt,ot,at,ct,_t,Et,Ie,H],Pe=[...me,...dt],Oe=[...pe,...Tt],Xt=Object.freeze(Object.defineProperty({__proto__:null,SESSION_EVENT_NAMES:Oe,SESSION_JSSIP_EVENT_NAMES:pe,SESSION_SYNTHETICS_EVENT_NAMES:Tt,UA_EVENT_NAMES:Pe,UA_JSSIP_EVENT_NAMES:me,UA_SYNTHETICS_EVENT_NAMES:dt},Symbol.toStringTag,{value:"Module"})),Jt=r=>{const e=[];return r&&e.push(`X-Vinteo-Remote: ${r}`),e},zt="content-type",Qt="x-webrtc-enter-room",f="application/vinteo.webrtc.sharedesktop",jt="application/vinteo.webrtc.roomname",Kt="application/vinteo.webrtc.channels",Zt="application/vinteo.webrtc.mediastate",en="application/vinteo.webrtc.refusal",ye="application/vinteo.webrtc.maincam",tn="application/vinteo.webrtc.mic",nn="application/vinteo.webrtc.uselic",sn="X-WEBRTC-USE-LICENSE",rn="X-WEBRTC-PARTICIPANT-NAME",we="X-WEBRTC-INPUT-CHANNELS",Ue="X-WEBRTC-OUTPUT-CHANNELS",on="X-WEBRTC-MAINCAM",an="X-WEBRTC-MIC",Le="X-WEBRTC-SYNC",cn="X-WEBRTC-MAINCAM-RESOLUTION",_n="X-WEBRTC-MEDIA-STATE",En="X-Vinteo-Media-Type",ln="X-Vinteo-MainCam-State",hn="X-Vinteo-Mic-State",dn="application/vinteo.webrtc.partstate",Tn="X-WEBRTC-PARTSTATE",un="application/vinteo.webrtc.notify",Sn="X-VINTEO-NOTIFY",I="x-webrtc-share-state",Cn=`${I}: LETMESTARTPRESENTATION`,Nn=`${I}: STOPPRESENTATION`,ut="YOUCANRECEIVECONTENT",St="CONTENTEND",Ct="YOUMUSTSTOPSENDCONTENT",gn=`${I}: ${Ct}`,An=`${I}: ${ut}`,Rn=`${I}: ${St}`,In="X-WEBRTC-REQUEST-ENABLE-MEDIA-DEVICE",mn=`${In}: LETMESTARTMAINCAM`,fe="sip-connector",M=B(fe),pn=()=>{B.enable(fe)},Pn=()=>{B.enable(`-${fe}`)},On=(r,e)=>{r.getVideoTracks().forEach(n=>{"contentHint"in n&&n.contentHint!==e&&(n.contentHint=e)})},D=(r,{videoMode:e,audioMode:t,contentHint:n}={})=>{if(!r||e==="recvonly"&&t==="recvonly")return;const s=t==="recvonly"?[]:r.getAudioTracks(),o=e==="recvonly"?[]:r.getVideoTracks(),a=[...s,...o],c=new MediaStream(a);return c.getTracks=()=>[...c.getAudioTracks(),...c.getVideoTracks()],n&&n!=="none"&&On(c,n),c};var R=(r=>(r.PAUSE_MAIN_CAM="PAUSEMAINCAM",r.RESUME_MAIN_CAM="RESUMEMAINCAM",r.MAX_MAIN_CAM_RESOLUTION="MAXMAINCAMRESOLUTION",r.ADMIN_STOP_MAIN_CAM="ADMINSTOPMAINCAM",r.ADMIN_START_MAIN_CAM="ADMINSTARTMAINCAM",r))(R||{}),W=(r=>(r.ADMIN_STOP_MIC="ADMINSTOPMIC",r.ADMIN_START_MIC="ADMINSTARTMIC",r))(W||{}),q=(r=>(r.ADMIN_SYNC_FORCED="1",r.ADMIN_SYNC_NOT_FORCED="0",r))(q||{}),Nt=(r=>(r.AUDIO="AUDIO",r.VIDEO="VIDEO",r.AUDIOPLUSPRESENTATION="AUDIOPLUSPRESENTATION",r))(Nt||{});function fn(r){return e=>`sip:${e}@${r}`}const Dn=(r,e)=>()=>Math.floor(Math.random()*(e-r))+r,He=r=>r.trim().replaceAll(" ","_"),Mn=Dn(1e5,99999999),vn=r=>r.some(t=>{const{kind:n}=t;return n==="video"}),bn="Error decline with 603",yn=1006,wn=r=>typeof r=="object"&&r!==null&&"code"in r&&r.code===yn,Un=r=>r.message===bn,Ln=(r,e)=>r.find(t=>t.track&&e.getTracks().includes(t.track)),gt=1,At=r=>(e,t)=>t!==void 0&&e!==t||t===void 0&&e!==r,Hn=At(gt),Wn=(r,e)=>{const t=r===void 0?void 0:Math.max(r,gt);if(t!==void 0&&Hn(t,e))return t},qn=At(),kn=(r,e)=>{if(qn(r,e))return r},Rt=async(r,e,t)=>{const n=r.getParameters();(n.encodings===void 0||n.encodings.length===0)&&(n.encodings=[{}]);const[s]=n.encodings,o=s.scaleResolutionDownBy,a=Wn(e.scaleResolutionDownBy,o);let c=!1;a!==void 0&&(n.encodings[0].scaleResolutionDownBy=a,c=!0);const _=s.maxBitrate,E=kn(e.maxBitrate,_);return E!==void 0&&(n.encodings[0].maxBitrate=E,c=!0),c?(t&&t(n),r.setParameters(n).then(()=>({parameters:n,isChanged:c}))):{parameters:n,isChanged:c}},Fn=async(r,e,t)=>{const n=Ln(r,e);if(n)return Rt(n,{maxBitrate:t})},Bn=486,Vn=487,F="local",We="remote",Yn=3,xn=1,Gn=(r=new Error)=>{const{originator:e,cause:t}=r;return N.isCanceledError(r)?!0:typeof t=="string"?t===qe||t===V||e===F&&(t===Be||t===Fe):!1},g="SipConnector",$n="channels",Xn="WebcastStarted",Jn="WebcastStopped",zn="accountChanged",Qn="accountDeleted",jn="addedToListModerators",Kn="removedFromListModerators",Zn="ParticipationRequestAccepted",es="ParticipationRequestRejected",ts="ParticipantMovedToWebcast",ns="ConferenceParticipantTokenIssued";class ss{constructor({JsSIP:e}){i(this,"_isRegisterConfig",!1);i(this,"_connectionConfiguration",{});i(this,"_remoteStreams",{});i(this,"JsSIP");i(this,"_sessionEvents");i(this,"_uaEvents");i(this,"_cancelableConnect");i(this,"_cancelableConnectWithRepeatedCalls");i(this,"_cancelableSendPresentationWithRepeatedCalls");i(this,"_cancelableInitUa");i(this,"_cancelableDisconnect");i(this,"_cancelableSet");i(this,"_cancelableCall");i(this,"_cancelableAnswer");i(this,"_cancelableSendDTMF");i(this,"getSipServerUrl",e=>e);i(this,"promisePendingStartPresentation");i(this,"promisePendingStopPresentation");i(this,"ua");i(this,"session");i(this,"incomingSession");i(this,"_streamPresentationCurrent");i(this,"socket");i(this,"connect",async(e,t)=>(this._cancelRequests(),this._connectWithDuplicatedCalls(e,t)));i(this,"initUa",async e=>this._cancelableInitUa.request(e));i(this,"set",async e=>this._cancelableSet.request(e));i(this,"call",async e=>this._cancelableCall.request(e));i(this,"disconnect",async()=>(this._cancelRequests(),this._disconnectWithoutCancelRequests()));i(this,"answerToIncomingCall",async e=>this._cancelableAnswer.request(e));i(this,"sendDTMF",async e=>this._cancelableSendDTMF.request(e));i(this,"hangUp",async()=>(this._cancelRequests(),this._hangUpWithoutCancelRequests()));i(this,"tryRegister",async()=>{if(!this.isRegisterConfig)throw new Error("Config is not registered");this._uaEvents.trigger(k,void 0);try{await this.unregister()}catch(e){M("tryRegister",e)}return this.register()});i(this,"declineToIncomingCall",async({statusCode:e=Vn}={})=>new Promise((t,n)=>{if(!this.isAvailableIncomingCall){n(new Error("no incomingSession"));return}const s=this.incomingSession,o=this.remoteCallerData;this._cancelableCall.cancelRequest(),this._cancelableAnswer.cancelRequest(),this.removeIncomingSession(),this._uaEvents.trigger(x,o),t(s.terminate({status_code:e}))}));i(this,"busyIncomingCall",async()=>this.declineToIncomingCall({statusCode:Bn}));i(this,"removeIncomingSession",()=>{delete this.incomingSession});i(this,"_connectWithDuplicatedCalls",async(e,{callLimit:t=Yn}={})=>{let n=!0;const s=async()=>(n=!1,this._cancelableConnect.request(e)),o=a=>{var h;const c=!!((h=this.ua)!=null&&h.isConnected()),_=!n&&c&&this.hasEqualConnectionConfiguration(e),E=!!a&&!wn(a);return _||E};return this._cancelableConnectWithRepeatedCalls=be.repeatedCallsAsync({targetFunction:s,isComplete:o,callLimit:t,isRejectAsValid:!0,onAfterCancel:()=>{this._cancelableConnect.cancelRequest()}}),this._cancelableConnectWithRepeatedCalls.then(a=>{if(a instanceof this.JsSIP.UA)return a;throw a})});i(this,"handleNewRTCSession",({originator:e,session:t})=>{if(e===We){this.incomingSession=t;const n=this.remoteCallerData;t.on(A,s=>{this.removeIncomingSession(),s.originator===F?this._uaEvents.trigger($,n):this._uaEvents.trigger(G,n)}),this._uaEvents.trigger(Y,n)}});i(this,"_connect",async e=>this.initUa(e).then(async()=>this._start()));i(this,"_initUa",async({user:e,password:t,sipServerUrl:n,sipWebSocketServerURL:s,remoteAddress:o,sessionTimers:a,registerExpires:c,connectionRecoveryMinInterval:_,connectionRecoveryMaxInterval:E,userAgent:h,displayName:l="",register:d=!1,extraHeaders:T=[]})=>{if(!n)throw new Error("sipServerUrl is required");if(!s)throw new Error("sipWebSocketServerURL is required");if(d&&!e)throw new Error("user is required for authorized connection");if(d&&!t)throw new Error("password is required for authorized connection");this._connectionConfiguration={sipServerUrl:n,displayName:l,register:d,user:e,password:t};const{configuration:C,helpers:u}=this.createUaConfiguration({user:e,sipServerUrl:n,sipWebSocketServerURL:s,password:t,displayName:l,register:d,sessionTimers:a,registerExpires:c,connectionRecoveryMinInterval:_,connectionRecoveryMaxInterval:E,userAgent:h});this.getSipServerUrl=u.getSipServerUrl,this.socket=u.socket,this.ua&&await this._disconnectWithoutCancelRequests(),this._isRegisterConfig=!!d,this.ua=this._createUa(C),this._uaEvents.eachTriggers((mt,pt)=>{const Me=me.find(Pt=>Pt===pt);Me&&this.ua&&this.ua.on(Me,mt)});const It=[...Jt(o),...T];return this.ua.registrator().setExtraHeaders(It),this.ua});i(this,"_createUa",e=>new this.JsSIP.UA(e));i(this,"_start",async()=>new Promise((e,t)=>{const{ua:n}=this;if(!n){t(new Error("this.ua is not initialized"));return}const s=()=>{c(),e(n)},o=_=>{c(),t(_)},a=()=>{this.isRegisterConfig?(this.on(p,s),this.on(P,o)):this.on(m,s),this.on(S,o)},c=()=>{this.off(p,s),this.off(P,o),this.off(m,s),this.off(S,o)};a(),this.on(v,this.handleNewRTCSession),n.start()}));i(this,"_set",async({displayName:e,password:t})=>new Promise((n,s)=>{const{ua:o}=this;if(!o){s(new Error("this.ua is not initialized"));return}let a=!1,c=!1;e!==void 0&&e!==this._connectionConfiguration.displayName&&(a=o.set("display_name",He(e)),this._connectionConfiguration.displayName=e),t!==void 0&&t!==this._connectionConfiguration.password&&(c=o.set("password",t),this._connectionConfiguration.password=t);const _=a||c;c&&this.isRegisterConfig?this.register().then(()=>{n(_)}).catch(E=>{s(E)}):_?n(_):s(new Error("nothing changed"))}));i(this,"_disconnectWithoutCancelRequests",async()=>this._cancelableDisconnect.request());i(this,"_disconnect",async()=>{this.off(v,this.handleNewRTCSession);const e=new Promise(t=>{this.once(S,()=>{delete this.ua,t()})});return this.ua?(await this._hangUpWithoutCancelRequests(),this.ua?this.ua.stop():this._uaEvents.trigger(S,void 0)):this._uaEvents.trigger(S,void 0),e});i(this,"_call",async({number:e,mediaStream:t,extraHeaders:n=[],ontrack:s,iceServers:o,videoMode:a,audioMode:c,degradationPreference:_,contentHint:E,offerToReceiveAudio:h=!0,offerToReceiveVideo:l=!0})=>new Promise((d,T)=>{const{ua:C}=this;if(!C){T(new Error("this.ua is not initialized"));return}this._connectionConfiguration.number=e,this._connectionConfiguration.answer=!1,this._handleCall({ontrack:s}).then(d).catch(u=>{T(u)}),this.session=C.call(this.getSipServerUrl(e),{extraHeaders:n,mediaStream:D(t,{videoMode:a,audioMode:c,contentHint:E}),eventHandlers:this._sessionEvents.triggers,videoMode:a,audioMode:c,degradationPreference:_,pcConfig:{iceServers:o},rtcOfferConstraints:{offerToReceiveAudio:h,offerToReceiveVideo:l}})}));i(this,"_answer",async({mediaStream:e,ontrack:t,extraHeaders:n=[],iceServers:s,videoMode:o,audioMode:a,degradationPreference:c,contentHint:_})=>new Promise((E,h)=>{if(!this.isAvailableIncomingCall){h(new Error("no incomingSession"));return}this.session=this.incomingSession,this.removeIncomingSession();const{session:l}=this;if(!l){h(new Error("No session established"));return}this._sessionEvents.eachTriggers((T,C)=>{const u=pe.find(De=>De===C);u&&l.on(u,T)}),this._connectionConfiguration.answer=!0,this._connectionConfiguration.number=l.remote_identity.uri.user,this._handleCall({ontrack:t}).then(E).catch(T=>{h(T)});const d=D(e,{videoMode:o,audioMode:a,contentHint:_});l.answer({extraHeaders:n,videoMode:o,audioMode:a,degradationPreference:c,mediaStream:d,pcConfig:{iceServers:s}})}));i(this,"_handleCall",async({ontrack:e})=>new Promise((t,n)=>{const s=()=>{this.onSession(L,h),this.onSession(U,l)},o=()=>{this.offSession(L,h),this.offSession(U,l)},a=()=>{this.onSession(A,_),this.onSession(O,_)},c=()=>{this.offSession(A,_),this.offSession(O,_)},_=d=>{o(),c(),n(d)};let E;const h=({peerconnection:d})=>{E=d,E.ontrack=T=>{this._sessionEvents.trigger(te,E),e&&e(T)}},l=()=>{E&&this._sessionEvents.trigger(ee,E),o(),c(),t(E)};s(),a()}));i(this,"_restoreSession",()=>{this._cancelRequestsAndResetPresentation(),delete this._connectionConfiguration.number,delete this.session,this._remoteStreams={}});i(this,"_sendDTMF",async e=>new Promise((t,n)=>{const{session:s}=this;if(!s){n(new Error("No session established"));return}this.onceSession(Ae,({originator:o})=>{o===F&&t()}),s.sendDTMF(e,{duration:120,interToneGap:600})}));i(this,"_hangUpWithoutCancelRequests",async()=>{if(this.ua&&this.session){const{session:e}=this;if(this._streamPresentationCurrent)try{await this.stopPresentation()}catch(t){M("error stop presentation: ",t)}if(this._restoreSession(),!e.isEnded())return e.terminateAsync()}});i(this,"_handleShareState",e=>{switch(e){case ut:{this._sessionEvents.trigger(z,void 0);break}case St:{this._sessionEvents.trigger(Q,void 0);break}case Ct:{this._sessionEvents.trigger(j,void 0);break}}});i(this,"_maybeTriggerChannels",e=>{const t=e.getHeader(we),n=e.getHeader(Ue);if(t&&n){const s={inputChannels:t,outputChannels:n};this._sessionEvents.trigger(y,s)}});i(this,"_handleNotify",e=>{switch(e.cmd){case $n:{const t=e;this._triggerChannelsNotify(t);break}case Xn:{const t=e;this._triggerWebcastStartedNotify(t);break}case Jn:{const t=e;this._triggerWebcastStoppedNotify(t);break}case jn:{const t=e;this._triggerAddedToListModeratorsNotify(t);break}case Kn:{const t=e;this._triggerRemovedFromListModeratorsNotify(t);break}case Zn:{const t=e;this._triggerParticipationAcceptingWordRequest(t);break}case es:{const t=e;this._triggerParticipationCancellingWordRequest(t);break}case ts:{const t=e;this._triggerParticipantMoveRequestToStream(t);break}case zn:{this._triggerAccountChangedNotify();break}case Qn:{this._triggerAccountDeletedNotify();break}case ns:{const t=e;this._triggerConferenceParticipantTokenIssued(t);break}default:M("unknown cmd",e.cmd)}});i(this,"_triggerRemovedFromListModeratorsNotify",({conference:e})=>{const t={conference:e};this._uaEvents.trigger(Ee,t)});i(this,"_triggerAddedToListModeratorsNotify",({conference:e})=>{const t={conference:e};this._uaEvents.trigger(_e,t)});i(this,"_triggerWebcastStartedNotify",({body:{conference:e,type:t}})=>{const n={conference:e,type:t};this._uaEvents.trigger(ue,n)});i(this,"_triggerWebcastStoppedNotify",({body:{conference:e,type:t}})=>{const n={conference:e,type:t};this._uaEvents.trigger(Se,n)});i(this,"_triggerAccountChangedNotify",()=>{this._uaEvents.trigger(Ce,void 0)});i(this,"_triggerAccountDeletedNotify",()=>{this._uaEvents.trigger(Ne,void 0)});i(this,"_triggerConferenceParticipantTokenIssued",({body:{conference:e,participant:t,jwt:n}})=>{const s={conference:e,participant:t,jwt:n};this._uaEvents.trigger(ge,s)});i(this,"_triggerChannelsNotify",e=>{const t=e.input,n=e.output,s={inputChannels:t,outputChannels:n};this._uaEvents.trigger(ne,s)});i(this,"_triggerParticipationAcceptingWordRequest",({body:{conference:e}})=>{const t={conference:e};this._uaEvents.trigger(de,t)});i(this,"_triggerParticipationCancellingWordRequest",({body:{conference:e}})=>{const t={conference:e};this._uaEvents.trigger(Te,t)});i(this,"_triggerParticipantMoveRequestToStream",({body:{conference:e}})=>{const t={conference:e};this._uaEvents.trigger(le,t)});i(this,"_triggerEnterRoom",e=>{const t=e.getHeader(Qt),n=e.getHeader(rn);this._sessionEvents.trigger(K,{room:t,participantName:n})});i(this,"_triggerShareState",e=>{const t=e.getHeader(I);this._sessionEvents.trigger(b,t)});i(this,"_maybeTriggerParticipantMoveRequestToSpectators",e=>{e.getHeader(Tn)===lt&&this._sessionEvents.trigger(he,void 0)});i(this,"_triggerMainCamControl",e=>{const t=e.getHeader(on),n=e.getHeader(Le),s=n===q.ADMIN_SYNC_FORCED;if(t===R.ADMIN_START_MAIN_CAM){this._sessionEvents.trigger(oe,{isSyncForced:s});return}if(t===R.ADMIN_STOP_MAIN_CAM){this._sessionEvents.trigger(re,{isSyncForced:s});return}(t===R.RESUME_MAIN_CAM||t===R.PAUSE_MAIN_CAM)&&n&&this._sessionEvents.trigger(w,{isSyncForced:s});const o=e.getHeader(cn);this._sessionEvents.trigger(ie,{mainCam:t,resolutionMainCam:o})});i(this,"_triggerMicControl",e=>{const t=e.getHeader(an),s=e.getHeader(Le)===q.ADMIN_SYNC_FORCED;t===W.ADMIN_START_MIC?this._sessionEvents.trigger(ce,{isSyncForced:s}):t===W.ADMIN_STOP_MIC&&this._sessionEvents.trigger(ae,{isSyncForced:s})});i(this,"_triggerUseLicense",e=>{const t=e.getHeader(sn);this._sessionEvents.trigger(Z,t)});i(this,"_handleNewInfo",e=>{const{originator:t}=e;if(t!=="remote")return;const{request:n}=e,s=n.getHeader(zt);if(s)switch(s){case jt:{this._triggerEnterRoom(n),this._maybeTriggerChannels(n);break}case un:{this._maybeHandleNotify(n);break}case f:{this._triggerShareState(n);break}case ye:{this._triggerMainCamControl(n);break}case tn:{this._triggerMicControl(n);break}case nn:{this._triggerUseLicense(n);break}case dn:{this._maybeTriggerParticipantMoveRequestToSpectators(n);break}}});i(this,"_handleSipEvent",({request:e})=>{this._maybeHandleNotify(e)});i(this,"_maybeHandleNotify",e=>{const t=e.getHeader(Sn);if(t){const n=JSON.parse(t);this._handleNotify(n)}});i(this,"_handleEnded",e=>{const{originator:t}=e;t===We&&this._sessionEvents.trigger(se,e),this._restoreSession()});this.JsSIP=e,this._sessionEvents=new ve(Oe),this._uaEvents=new ve(Pe),this._cancelableConnect=new N.CancelableRequest(this._connect,{moduleName:g,afterCancelRequest:()=>{this._cancelableInitUa.cancelRequest(),this._cancelableDisconnect.cancelRequest()}}),this._cancelableInitUa=new N.CancelableRequest(this._initUa,{moduleName:g}),this._cancelableDisconnect=new N.CancelableRequest(this._disconnect,{moduleName:g}),this._cancelableSet=new N.CancelableRequest(this._set,{moduleName:g}),this._cancelableCall=new N.CancelableRequest(this._call,{moduleName:g}),this._cancelableAnswer=new N.CancelableRequest(this._answer,{moduleName:g}),this._cancelableSendDTMF=new N.CancelableRequest(this._sendDTMF,{moduleName:g}),this.onSession(b,this._handleShareState),this.onSession(Re,this._handleNewInfo),this.on(J,this._handleSipEvent),this.onSession(A,this._handleEnded),this.onSession(O,this._handleEnded)}async register(){return new Promise((e,t)=>{this.isRegisterConfig&&this.ua?(this.ua.on(p,e),this.ua.on(P,t),this.ua.register()):t(new Error("Config is not registered"))})}async unregister(){return new Promise((e,t)=>{this.isRegistered&&this.ua?(this.ua.on(X,e),this.ua.unregister()):t(new Error("ua is not registered"))})}async sendOptions(e,t,n){if(!this.ua)throw new Error("is not connected");return new Promise((s,o)=>{try{this.ua.sendOptions(e,t,{extraHeaders:n,eventHandlers:{succeeded:()=>{s()},failed:o}})}catch(a){o(a)}})}async ping(e,t){var s;if(!((s=this.ua)!=null&&s.configuration.uri))throw new Error("is not connected");const n=this.ua.configuration.uri;return this.sendOptions(n,e,t)}async checkTelephony({userAgent:e,displayName:t,sipServerUrl:n,sipWebSocketServerURL:s}){return new Promise((o,a)=>{const{configuration:c}=this.createUaConfiguration({sipWebSocketServerURL:s,displayName:t,userAgent:e,sipServerUrl:n}),_=this._createUa(c),E=()=>{const l=new Error("Telephony is not available");a(l)};_.once(S,E);const h=()=>{_.removeAllListeners(),_.once(S,o),_.stop()};_.once(m,h),_.start()})}async replaceMediaStream(e,t){if(!this.session)throw new Error("No session established");const{contentHint:n}=t||{},s=D(e,{contentHint:n});return this.session.replaceMediaStream(s,t)}async askPermissionToEnableCam(e={}){if(!this.session)throw new Error("No session established");const t=[mn];return this.session.sendInfo(ye,void 0,{noTerminateWhenError:!0,...e,extraHeaders:t}).catch(n=>{if(Un(n))throw n})}get isPendingPresentation(){return!!this.promisePendingStartPresentation||!!this.promisePendingStopPresentation}async _sendPresentationWithDuplicatedCalls({session:e,stream:t,presentationOptions:n,options:s={callLimit:xn}}){const o=async()=>this._sendPresentation(e,t,n),a=()=>!!this._streamPresentationCurrent;return this._cancelableSendPresentationWithRepeatedCalls=be.repeatedCallsAsync({targetFunction:o,isComplete:a,isRejectAsValid:!0,...s}),this._cancelableSendPresentationWithRepeatedCalls.then(c=>c)}hasEqualConnectionConfiguration(e){var s;const{configuration:t}=this.createUaConfiguration(e),n=(s=this.ua)==null?void 0:s.configuration;return(n==null?void 0:n.password)===t.password&&(n==null?void 0:n.register)===t.register&&(n==null?void 0:n.uri.toString())===t.uri&&(n==null?void 0:n.display_name)===t.display_name&&(n==null?void 0:n.user_agent)===t.user_agent&&(n==null?void 0:n.sockets)===t.sockets&&(n==null?void 0:n.session_timers)===t.session_timers&&(n==null?void 0:n.register_expires)===t.register_expires&&(n==null?void 0:n.connection_recovery_min_interval)===t.connection_recovery_min_interval&&(n==null?void 0:n.connection_recovery_max_interval)===t.connection_recovery_max_interval}createUaConfiguration({user:e,password:t,sipWebSocketServerURL:n,displayName:s="",sipServerUrl:o,register:a=!1,sessionTimers:c=!1,registerExpires:_=60*5,connectionRecoveryMinInterval:E=2,connectionRecoveryMaxInterval:h=6,userAgent:l}){if(a&&!t)throw new Error("password is required for authorized connection");const d=a&&e?e.trim():`${Mn()}`,T=fn(o),C=T(d),u=new this.JsSIP.WebSocketInterface(n);return{configuration:{password:t,register:a,uri:C,display_name:He(s),user_agent:l,sdp_semantics:"unified-plan",sockets:[u],session_timers:c,register_expires:_,connection_recovery_min_interval:E,connection_recovery_max_interval:h},helpers:{socket:u,getSipServerUrl:T}}}async _sendPresentation(e,t,{maxBitrate:n=ht,degradationPreference:s="maintain-resolution",isNeedReinvite:o=!0,isP2P:a=!1,contentHint:c="detail"}){const _=D(t,{contentHint:c});this._streamPresentationCurrent=_;const E=a?[An]:[Cn],h=e.sendInfo(f,void 0,{extraHeaders:E}).then(async()=>e.startPresentation(_,o,s)).then(async()=>{const{connection:l}=this;if(!l||n===void 0)return;const d=l.getSenders();await Fn(d,t,n)}).then(()=>t).catch(l=>{throw this._removeStreamPresentationCurrent(),this._sessionEvents.trigger(H,l),l});return this.promisePendingStartPresentation=h,h.finally(()=>{this.promisePendingStartPresentation=void 0})}async startPresentation(e,{isNeedReinvite:t,isP2P:n,maxBitrate:s,degradationPreference:o,contentHint:a}={},c){const _=this.establishedSession;if(!_)throw new Error("No session established");if(this._streamPresentationCurrent)throw new Error("Presentation is already started");return n&&await this.sendMustStopPresentation(_),this._sendPresentationWithDuplicatedCalls({session:_,stream:e,presentationOptions:{isNeedReinvite:t,isP2P:n,maxBitrate:s,degradationPreference:o,contentHint:a},options:c})}async sendMustStopPresentation(e){await e.sendInfo(f,void 0,{extraHeaders:[gn]})}async stopPresentation({isP2P:e=!1}={}){this._cancelSendPresentationWithRepeatedCalls();const t=this._streamPresentationCurrent;let n=this.promisePendingStartPresentation??Promise.resolve();const s=e?[Rn]:[Nn],o=this.establishedSession;return o&&t&&(n=n.then(async()=>o.sendInfo(f,void 0,{extraHeaders:s})).then(async()=>o.stopPresentation(t)).catch(a=>{throw this._sessionEvents.trigger(H,a),a})),!o&&t&&this._sessionEvents.trigger(Ie,t),this.promisePendingStopPresentation=n,n.finally(()=>{this._resetPresentation()})}async updatePresentation(e,{isP2P:t,maxBitrate:n,degradationPreference:s,contentHint:o}={}){const a=this.establishedSession;if(!a)throw new Error("No session established");if(!this._streamPresentationCurrent)throw new Error("Presentation has not started yet");return this.promisePendingStartPresentation&&await this.promisePendingStartPresentation,this._sendPresentation(a,e,{isP2P:t,maxBitrate:n,degradationPreference:s,contentHint:o,isNeedReinvite:!1})}_removeStreamPresentationCurrent(){delete this._streamPresentationCurrent}_resetPresentation(){this._removeStreamPresentationCurrent(),this.promisePendingStartPresentation=void 0,this.promisePendingStopPresentation=void 0}_cancelRequestsAndResetPresentation(){this._cancelSendPresentationWithRepeatedCalls(),this._resetPresentation()}on(e,t){return this._uaEvents.on(e,t)}once(e,t){return this._uaEvents.once(e,t)}onceRace(e,t){return this._uaEvents.onceRace(e,t)}async wait(e){return this._uaEvents.wait(e)}off(e,t){this._uaEvents.off(e,t)}onSession(e,t){return this._sessionEvents.on(e,t)}onceSession(e,t){return this._sessionEvents.once(e,t)}onceRaceSession(e,t){return this._sessionEvents.onceRace(e,t)}async waitSession(e){return this._sessionEvents.wait(e)}offSession(e,t){this._sessionEvents.off(e,t)}isConfigured(){return!!this.ua}getConnectionConfiguration(){return{...this._connectionConfiguration}}getRemoteStreams(){if(!this.connection)return;const t=this.connection.getReceivers().map(({track:n})=>n);return vn(t)?this._generateStreams(t):this._generateAudioStreams(t)}get connection(){var t;return(t=this.session)==null?void 0:t.connection}get remoteCallerData(){var e,t,n,s,o,a;return{displayName:(t=(e=this.incomingSession)==null?void 0:e.remote_identity)==null?void 0:t.display_name,host:(s=(n=this.incomingSession)==null?void 0:n.remote_identity)==null?void 0:s.uri.host,incomingNumber:(a=(o=this.incomingSession)==null?void 0:o.remote_identity)==null?void 0:a.uri.user,session:this.incomingSession}}get requested(){return this._cancelableConnect.requested||this._cancelableInitUa.requested||this._cancelableCall.requested||this._cancelableAnswer.requested}get establishedSession(){var e;return(e=this.session)!=null&&e.isEstablished()?this.session:void 0}get isRegistered(){return!!this.ua&&this.ua.isRegistered()}get isRegisterConfig(){return!!this.ua&&this._isRegisterConfig}get isCallActive(){return!!(this.ua&&this.session)}get isAvailableIncomingCall(){return!!this.incomingSession}_generateStream(e,t){const{id:n}=e,s=this._remoteStreams[n]||new MediaStream;return t&&s.addTrack(t),s.addTrack(e),this._remoteStreams[n]=s,s}_generateAudioStream(e){const{id:t}=e,n=this._remoteStreams[t]||new MediaStream;return n.addTrack(e),this._remoteStreams[t]=n,n}_generateStreams(e){const t=[];return e.forEach((n,s)=>{if(n.kind==="audio")return;const o=n,a=e[s-1];let c;a&&a.kind==="audio"&&(c=a);const _=this._generateStream(o,c);t.push(_)}),t}_generateAudioStreams(e){return e.map(n=>this._generateAudioStream(n))}_cancelRequests(){this._cancelActionsRequests(),this._cancelCallRequests(),this._cancelConnectWithRepeatedCalls()}_cancelConnectWithRepeatedCalls(){var e;(e=this._cancelableConnectWithRepeatedCalls)==null||e.cancel()}_cancelSendPresentationWithRepeatedCalls(){var e;(e=this._cancelableSendPresentationWithRepeatedCalls)==null||e.cancel()}_cancelCallRequests(){this._cancelableCall.cancelRequest(),this._cancelableAnswer.cancelRequest()}_cancelActionsRequests(){this._cancelableAnswer.cancelRequest(),this._cancelableSendDTMF.cancelRequest()}async waitChannels(){return this.waitSession(y)}async waitSyncMediaState(){return this.waitSession(w)}async sendChannels({inputChannels:e,outputChannels:t}){if(!this.session)throw new Error("No session established");const n=`${we}: ${e}`,s=`${Ue}: ${t}`,o=[n,s];return this.session.sendInfo(Kt,void 0,{extraHeaders:o})}async sendMediaState({cam:e,mic:t},n={}){if(!this.session)throw new Error("No session established");const s=`${_n}: currentstate`,o=`${ln}: ${Number(e)}`,a=`${hn}: ${Number(t)}`,c=[s,o,a];return this.session.sendInfo(Zt,void 0,{noTerminateWhenError:!0,...n,extraHeaders:c})}async _sendRefusalToTurnOn(e,t={}){if(!this.session)throw new Error("No session established");const c=[`${En}: ${e==="mic"?0:1}`];return this.session.sendInfo(en,void 0,{noTerminateWhenError:!0,...t,extraHeaders:c})}async sendRefusalToTurnOnMic(e={}){if(!this.session)throw new Error("No session established");return this._sendRefusalToTurnOn("mic",{noTerminateWhenError:!0,...e})}async sendRefusalToTurnOnCam(e={}){if(!this.session)throw new Error("No session established");return this._sendRefusalToTurnOn("cam",{noTerminateWhenError:!0,...e})}}exports.BAD_MEDIA_DESCRIPTION=Ve;exports.EEventsMainCAM=R;exports.EEventsMic=W;exports.EEventsSyncMediaState=q;exports.EUseLicense=Nt;exports.NOT_FOUND=ke;exports.REJECTED=V;exports.SESSION_EVENT_NAMES=Oe;exports.SipConnector=ss;exports.UA_EVENT_NAMES=Pe;exports.causes=Gt;exports.constants=$t;exports.disableDebug=Pn;exports.enableDebug=pn;exports.eventNames=Xt;exports.hasCanceledCallError=Gn;exports.logger=M;exports.setEncodingsToSender=Rt;
|