sip-connector 15.0.0 → 15.2.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.
- package/README.md +160 -11
- package/dist/{@SipConnector-DbvV1Leg.js → @SipConnector-BEZk1hmx.js} +511 -229
- package/dist/@SipConnector-hpySQIBa.cjs +1 -0
- package/dist/ApiManager/__tests-utils__/helpers.d.ts +9 -0
- package/dist/ApiManager/constants.d.ts +2 -1
- package/dist/ApiManager/eventNames.d.ts +2 -1
- package/dist/CallManager/MCUCallStrategy.d.ts +1 -1
- package/dist/ConnectionManager/@ConnectionManager.d.ts +3 -3
- package/dist/ConnectionManager/getExtraHeadersRemoteAddress.d.ts +2 -2
- package/dist/IncomingCallManager/@IncomingCallManager.d.ts +2 -2
- package/dist/SipConnector/@SipConnector.d.ts +4 -2
- package/dist/SipConnector/eventNames.d.ts +1 -1
- package/dist/SipConnectorFacade/SipConnectorFacade.d.ts +15 -1
- package/dist/StatsManager/@StatsManager.d.ts +19 -0
- package/dist/StatsManager/eventNames.d.ts +2 -0
- package/dist/StatsManager/index.d.ts +2 -0
- package/dist/StatsPeerConnection/StatsPeerConnection.d.ts +20 -0
- package/dist/StatsPeerConnection/__fixtures__/callStaticsState.d.ts +3923 -0
- package/dist/StatsPeerConnection/constants.d.ts +14 -0
- package/dist/StatsPeerConnection/eventNames.d.ts +10 -0
- package/dist/StatsPeerConnection/index.d.ts +4 -0
- package/dist/StatsPeerConnection/parseStatsReports.d.ts +14 -0
- package/dist/StatsPeerConnection/requestAllStatistics.d.ts +11 -0
- package/dist/StatsPeerConnection/typings.d.ts +194 -0
- package/dist/StatsPeerConnection/utils/hasAvailableStats.d.ts +2 -0
- package/dist/StatsPeerConnection/utils/index.d.ts +3 -0
- package/dist/StatsPeerConnection/utils/now.d.ts +2 -0
- package/dist/StatsPeerConnection/utils/statsReportToObject.d.ts +4 -0
- package/dist/VideoSendingBalancer/CodecProvider.d.ts +7 -0
- package/dist/VideoSendingBalancer/ParametersSetterWithQueue.d.ts +12 -0
- package/dist/VideoSendingBalancer/SenderBalancer.d.ts +52 -0
- package/dist/VideoSendingBalancer/SenderFinder.d.ts +7 -0
- package/dist/VideoSendingBalancer/TaskQueue.d.ts +20 -0
- package/dist/VideoSendingBalancer/VideoSendingBalancer.d.ts +44 -0
- package/dist/VideoSendingBalancer/VideoSendingEventHandler.d.ts +25 -0
- package/dist/VideoSendingBalancer/calcBitrate/calcMaxBitrateByWidth.d.ts +4 -0
- package/dist/VideoSendingBalancer/calcBitrate/calcMaxBitrateByWidthAndCodec.d.ts +4 -0
- package/dist/VideoSendingBalancer/calcBitrate/index.d.ts +1 -0
- package/dist/VideoSendingBalancer/calcResolution/calcScaleResolutionDownBy.d.ts +6 -0
- package/dist/VideoSendingBalancer/calcResolution/index.d.ts +1 -0
- package/dist/VideoSendingBalancer/index.d.ts +3 -0
- package/dist/VideoSendingBalancer/types.d.ts +36 -0
- package/dist/__fixtures__/BaseSession.mock.d.ts +1 -1
- package/dist/__fixtures__/RTCPeerConnectionMock.d.ts +2 -2
- package/dist/__fixtures__/RTCRtpSenderMock.d.ts +1 -0
- package/dist/__fixtures__/RTCSessionMock.d.ts +2 -2
- package/dist/__fixtures__/UA.mock.d.ts +2 -2
- package/dist/__fixtures__/eventNames.d.ts +1 -1
- package/dist/__fixtures__/jssip.mock.d.ts +1 -1
- package/dist/doMock.cjs +1 -1
- package/dist/doMock.js +21 -22
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +697 -562
- package/dist/tools/createUaParser/createUaParser.d.ts +4 -0
- package/dist/tools/createUaParser/index.d.ts +1 -0
- package/dist/tools/createUaParser/isElectronEnvironment.d.ts +2 -0
- package/dist/tools/error/index.d.ts +1 -1
- package/dist/tools/index.d.ts +5 -1
- package/dist/{setParametersToSender → tools/setParametersToSender}/configureDegradationPreference.d.ts +1 -1
- package/dist/{setParametersToSender → tools/setParametersToSender}/configureEncodings.d.ts +1 -1
- package/dist/tools/setParametersToSender/index.d.ts +3 -0
- package/dist/tools/setParametersToSender/setEncodingsToSender.d.ts +6 -0
- package/dist/tools/setParametersToSender/setMaxBitrateToSender.d.ts +2 -0
- package/dist/tools/setParametersToSender/setParametersToSender.d.ts +4 -0
- package/dist/tools/setParametersToSender/types.d.ts +5 -0
- package/dist/tools/syncMediaState/createSyncMediaState.d.ts +18 -0
- package/dist/tools/syncMediaState/index.d.ts +1 -18
- package/dist/utils/utils.d.ts +4 -0
- package/package.json +12 -18
- package/dist/@SipConnector-CZo7A8_q.cjs +0 -1
- package/dist/setParametersToSender/index.d.ts +0 -1
- package/dist/setParametersToSender/setParametersToSender.d.ts +0 -7
- package/dist/videoSendingBalancer/balance.d.ts +0 -10
- package/dist/videoSendingBalancer/getMaxBitrateByWidth.d.ts +0 -4
- package/dist/videoSendingBalancer/getMaxBitrateByWidthAndCodec.d.ts +0 -4
- package/dist/videoSendingBalancer/index.d.ts +0 -13
- package/dist/videoSendingBalancer/processSender.d.ts +0 -10
- package/dist/videoSendingBalancer/scaleBitrate.d.ts +0 -2
- package/dist/videoSendingBalancer/setEncodingsToSender.d.ts +0 -10
- /package/dist/{videoSendingBalancer → VideoSendingBalancer/calcBitrate}/hasAv1Codec.d.ts +0 -0
- /package/dist/{videoSendingBalancer → VideoSendingBalancer/calcBitrate}/scaleBitrateByCodec.d.ts +0 -0
- /package/dist/{videoSendingBalancer → tools}/scaleResolutionAndBitrate.d.ts +0 -0
- /package/dist/{setParametersToSender → tools/setParametersToSender}/configureEmptyEncodings.d.ts +0 -0
- /package/dist/{setParametersToSender → tools/setParametersToSender}/configureMaxBitrate.d.ts +0 -0
- /package/dist/{setParametersToSender → tools/setParametersToSender}/configureScaleResolutionDownBy.d.ts +0 -0
- /package/dist/{setParametersToSender → tools/setParametersToSender}/hasChangedRTCRtpSendParameters.d.ts +0 -0
- /package/dist/{setParametersToSender → tools/setParametersToSender}/resolveHasNeedToUpdateItemEncoding.d.ts +0 -0
- /package/dist/{videoSendingBalancer → utils}/hasIncludesString.d.ts +0 -0
package/dist/doMock.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const P=require("./@SipConnector-CZo7A8_q.cjs"),b=require("@krivega/jssip/lib/NameAddrHeader"),V=require("@krivega/jssip/lib/URI"),k=require("node:events"),U=require("@krivega/jssip/lib/SIPMessage"),a=require("@krivega/jssip"),f=require("webrtc-mock"),S=require("events-constructor");class w extends U.IncomingRequest{headers;constructor(e){super(),this.headers=new Headers(e)}getHeader(e){return this.headers.get(e)??""}}const H="incomingCall",q="declinedIncomingCall",G="failedIncomingCall",x="terminatedIncomingCall",v="connecting",z="connected",j="disconnected",Y="newRTCSession",B="registered",K="unregistered",J="registrationFailed",$="newMessage",Q="sipEvent",X="availableSecondRemoteStream",Z="notAvailableSecondRemoteStream",ee="mustStopPresentation",te="shareState",re="enterRoom",ne="useLicense",oe="peerconnection:confirmed",ie="peerconnection:ontrack",se="channels",ae="channels:notify",ce="ended:fromserver",de="main-cam-control",Ee="admin-stop-main-cam",he="admin-start-main-cam",ue="admin-stop-mic",me="admin-start-mic",le="admin-force-sync-media-state",pe="participant:added-to-list-moderators",ge="participant:removed-from-list-moderators",_e="participant:move-request-to-stream",Te="participant:move-request-to-spectators",Ie="participant:move-request-to-participants",Se="participation:accepting-word-request",we="participation:cancelling-word-request",Ne="webcast:started",Ce="webcast:stopped",Re="account:changed",fe="account:deleted",Ae="conference:participant-token-issued",Me="ended",Oe="sending",Pe="reinvite",ve="replaces",De="refer",ye="progress",Le="accepted",Fe="confirmed",We="peerconnection",be="failed",Ve="muted",ke="unmuted",Ue="newDTMF",He="newInfo",qe="hold",Ge="unhold",xe="update",ze="sdp",je="icecandidate",Ye="getusermediafailed",Be="peerconnection:createofferfailed",Ke="peerconnection:createanswerfailed",Je="peerconnection:setlocaldescriptionfailed",$e="peerconnection:setremotedescriptionfailed",Qe="presentation:start",Xe="presentation:started",Ze="presentation:end",et="presentation:ended",tt="presentation:failed",rt=[H,q,x,G,Se,we,_e,ae,Ae,Re,fe,Ne,Ce,pe,ge],D=[v,z,j,Y,B,K,J,$,Q],nt=[X,Z,ee,te,re,ne,oe,ie,se,ce,de,he,Ee,ue,me,le,Te,Ie],_=[Me,v,Oe,Pe,ve,De,ye,Le,Fe,We,be,Ve,ke,Ue,He,qe,Ge,xe,ze,je,Ye,Be,Ke,Je,$e,Qe,Xe,Ze,et,tt];[...D,...rt];[..._,...nt];class ot{originator;connection;events;remote_identity;mutedOptions={audio:!1,video:!1};constructor({originator:e="local",eventHandlers:t,remoteIdentity:r}){this.originator=e,this.events=new S.Events(_),this.initEvents(t),this.remote_identity=r}get contact(){throw new Error("Method not implemented.")}get direction(){throw new Error("Method not implemented.")}get local_identity(){throw new Error("Method not implemented.")}get start_time(){throw new Error("Method not implemented.")}get end_time(){throw new Error("Method not implemented.")}get status(){throw new Error("Method not implemented.")}get C(){throw new Error("Method not implemented.")}get causes(){throw new Error("Method not implemented.")}get id(){throw new Error("Method not implemented.")}get data(){throw new Error("Method not implemented.")}set data(e){throw new Error("Method not implemented.")}isInProgress(){throw new Error("Method not implemented.")}isEnded(){throw new Error("Method not implemented.")}isReadyToReOffer(){throw new Error("Method not implemented.")}answer(e){throw new Error("Method not implemented.")}terminate(e){throw new Error("Method not implemented.")}async sendInfo(e,t,r){throw new Error("Method not implemented.")}hold(e,t){throw new Error("Method not implemented.")}unhold(e,t){throw new Error("Method not implemented.")}async renegotiate(e,t){throw new Error("Method not implemented.")}isOnHold(){throw new Error("Method not implemented.")}mute(e){throw new Error("Method not implemented.")}unmute(e){throw new Error("Method not implemented.")}isMuted(){throw new Error("Method not implemented.")}refer(e,t){throw new Error("Method not implemented.")}resetLocalMedia(){throw new Error("Method not implemented.")}async replaceMediaStream(e,t){throw new Error("Method not implemented.")}addListener(e,t){throw new Error("Method not implemented.")}once(e,t){throw new Error("Method not implemented.")}removeListener(e,t){throw new Error("Method not implemented.")}off(e,t){return this.events.off(e,t),this}removeAllListeners(e){return console.warn("Method not implemented. Event:",e),this}setMaxListeners(e){throw new Error("Method not implemented.")}getMaxListeners(){throw new Error("Method not implemented.")}listeners(e){throw new Error("Method not implemented.")}rawListeners(e){throw new Error("Method not implemented.")}emit(e,...t){throw new Error("Method not implemented.")}listenerCount(e){throw new Error("Method not implemented.")}prependListener(e,t){throw new Error("Method not implemented.")}prependOnceListener(e,t){throw new Error("Method not implemented.")}eventNames(){throw new Error("Method not implemented.")}initEvents(e){e&&Object.entries(e).forEach(([t,r])=>{this.on(t,r)})}on(e,t){return _.includes(e)&&this.events.on(e,t),this}trigger(e,t){this.events.trigger(e,t)}sendDTMF(){this.trigger("newDTMF",{originator:this.originator})}async startPresentation(e){return this.trigger("presentation:start",e),this.trigger("presentation:started",e),e}async stopPresentation(e){return this.trigger("presentation:end",e),this.trigger("presentation:ended",e),e}isEstablished(){return!0}}class it{dtmf=null;track=null;transport=null;transform=null;parameters={encodings:[{}],transactionId:"0",codecs:[],headerExtensions:[],rtcp:{}};parametersGets;constructor({track:e}={}){this.track=e??null}async getStats(){throw new Error("Method not implemented.")}async replaceTrack(e){this.track=e??null}async setParameters(e){if(e!==this.parametersGets)throw new Error("Failed to execute 'setParameters' on 'RTCRtpSender': Read-only field modified in setParameters().");const{transactionId:t}=this.parameters;this.parameters={...this.parameters,...e,transactionId:`${Number(t)+1}`}}getParameters(){return this.parametersGets={...this.parameters},this.parametersGets}setStreams(){throw new Error("Method not implemented.")}}const st=["track"];class at{senders=[];receivers=[];canTrickleIceCandidates;connectionState;currentLocalDescription;currentRemoteDescription;iceConnectionState;iceGatheringState;idpErrorInfo;idpLoginUrl;localDescription;onconnectionstatechange;ondatachannel;onicecandidate;onicecandidateerror=null;oniceconnectionstatechange;onicegatheringstatechange;onnegotiationneeded;onsignalingstatechange;ontrack;peerIdentity=void 0;pendingLocalDescription;pendingRemoteDescription;remoteDescription;sctp=null;signalingState;events;constructor(e,t){this.events=new S.Events(st),this.receivers=t.map(r=>({track:r}))}getRemoteStreams(){throw new Error("Method not implemented.")}async addIceCandidate(e){throw new Error("Method not implemented.")}addTransceiver(e,t){throw new Error("Method not implemented.")}close(){throw new Error("Method not implemented.")}restartIce(){throw new Error("Method not implemented.")}async createAnswer(e,t){throw new Error("Method not implemented.")}createDataChannel(e,t){throw new Error("Method not implemented.")}async createOffer(e,t,r){throw new Error("Method not implemented.")}getConfiguration(){throw new Error("Method not implemented.")}async getIdentityAssertion(){throw new Error("Method not implemented.")}async getStats(e){throw new Error("Method not implemented.")}getTransceivers(){throw new Error("Method not implemented.")}removeTrack(e){throw new Error("Method not implemented.")}setConfiguration(e){throw new Error("Method not implemented.")}async setLocalDescription(e){throw new Error("Method not implemented.")}async setRemoteDescription(e){throw new Error("Method not implemented.")}addEventListener(e,t,r){this.events.on(e,t)}removeEventListener(e,t,r){this.events.off(e,t)}dispatchEvent(e){throw new Error("Method not implemented.")}getReceivers=()=>this.receivers;getSenders=()=>this.senders;addTrack=e=>{const t=new it({track:e});return this.senders.push(t),this.events.trigger("track",{track:e}),t}}function ct(n){const e=n.match(/(purgatory)|[\d.]+/g);if(!e)throw new Error("wrong sip url");return e[0]}const A=400,y="777",dt=n=>n.getVideoTracks().length>0;class s extends ot{static presentationError;static startPresentationError;static countStartPresentationError=Number.POSITIVE_INFINITY;static countStartsPresentation=0;url;status_code;answer=jest.fn(({mediaStream:e})=>{if(this.originator!=="remote")throw new Error("answer available only for remote sessions");this.initPeerconnection(e),setTimeout(()=>{this.trigger("connecting"),setTimeout(()=>{this.trigger("accepted")},100),setTimeout(()=>{this.trigger("confirmed")},200)},A)});replaceMediaStream=jest.fn(async e=>{});isEndedInner=!1;constructor({eventHandlers:e,originator:t,remoteIdentity:r=new a.NameAddrHeader(new a.URI("sip","caller1","test1.com",5060),"Test Caller 1")}){super({originator:t,eventHandlers:e,remoteIdentity:r})}static setPresentationError(e){this.presentationError=e}static resetPresentationError(){this.presentationError=void 0}static setStartPresentationError(e,{count:t=Number.POSITIVE_INFINITY}={}){this.startPresentationError=e,this.countStartPresentationError=t}static resetStartPresentationError(){this.startPresentationError=void 0,this.countStartPresentationError=Number.POSITIVE_INFINITY,this.countStartsPresentation=0}startPresentation=async e=>{if(s.countStartsPresentation+=1,s.presentationError)throw this.trigger("presentation:start",e),this.trigger("presentation:failed",e),s.presentationError;if(s.startPresentationError&&s.countStartsPresentation<s.countStartPresentationError)throw this.trigger("presentation:start",e),this.trigger("presentation:failed",e),s.startPresentationError;return super.startPresentation(e)};stopPresentation=async e=>{if(s.presentationError)throw this.trigger("presentation:end",e),this.trigger("presentation:failed",e),s.presentationError;return super.stopPresentation(e)};initPeerconnection(e){return e?(this.createPeerconnection(e),!0):!1}createPeerconnection(e){const t=f.createAudioMediaStreamTrackMock();t.id="mainaudio1";const r=[t];if(dt(e)){const c=f.createVideoMediaStreamTrackMock();c.id="mainvideo1",r.push(c)}this.connection=new at(void 0,r),this.addStream(e),this.trigger("peerconnection",{peerconnection:this.connection})}connect(e,{mediaStream:t}={}){const r=ct(e);return this.initPeerconnection(t),setTimeout(()=>{e.includes(y)?this.trigger("failed",{originator:"remote",message:"IncomingResponse",cause:"Rejected"}):(this.trigger("connecting"),setTimeout(()=>{this.newInfo({originator:P.Originator.REMOTE,request:{getHeader:i=>i==="content-type"?"application/vinteo.webrtc.roomname":i==="x-webrtc-enter-room"?r:i==="x-webrtc-participant-name"?"Test Caller 1":""}})},100),setTimeout(()=>{this.trigger("accepted")},200),setTimeout(()=>{this.trigger("confirmed")},300))},A),this.connection}terminate({status_code:e,cause:t}={}){return this.status_code=e,this.trigger("ended",{status_code:e,cause:t,originator:"local"}),this.isEndedInner=!1,this}async terminateAsync({status_code:e,cause:t}={}){this.terminate({status_code:e,cause:t})}terminateRemote({status_code:e}={}){return this.status_code=e,this.trigger("ended",{status_code:e,originator:"remote"}),this}addStream(e,t="getTracks"){e[t]().forEach(r=>this.connection.addTrack(r))}forEachSenders(e){const t=this.connection.getSenders();for(const r of t)e(r);return t}toggleMuteAudio(e){this.forEachSenders(({track:t})=>{t&&t.kind==="audio"&&(t.enabled=!e)})}toggleMuteVideo(e){this.forEachSenders(({track:t})=>{t&&t.kind==="video"&&(t.enabled=!e)})}mute(e){e.audio&&(this.mutedOptions.audio=!0,this.toggleMuteAudio(this.mutedOptions.audio)),e.video&&(this.mutedOptions.video=!0,this.toggleMuteVideo(this.mutedOptions.video)),this.onmute(e)}unmute(e){e.audio&&(this.mutedOptions.audio=!1),e.video&&(this.mutedOptions.video=!1),this.trigger("unmuted",e)}isMuted(){return this.mutedOptions}onmute({audio:e,video:t}){this.trigger("muted",{audio:e,video:t})}async sendInfo(){}isEnded(){return this.isEndedInner}newInfo(e){this.trigger("newInfo",e)}}class Et{extraHeaders=[];setExtraHeaders(e){this.extraHeaders=e}setExtraContactParams(){}}const d="PASSWORD_CORRECT",T="PASSWORD_CORRECT_2",L="NAME_INCORRECT",h=400,g={url:"wss://sipServerUrl/webrtc/wss/",sip_uri:"sip:sipServerUrl;transport=ws",via_transport:"WSS"},M={status_code:200,reason_phrase:"OK"},O={status_code:401,reason_phrase:"Unauthorized"};class o{static isAvailableTelephony=!0;static startError;static countStartError=Number.POSITIVE_INFINITY;static countStarts=0;events;registratorInner;call=jest.fn((e,t)=>{const{mediaStream:r,eventHandlers:i}=t;return this.session=new s({eventHandlers:i,originator:"local"}),this.session.connect(e,{mediaStream:r}),this.session});sendOptions=jest.fn((e,t,r)=>{console.log("sendOptions",e,t,r)});start=jest.fn(()=>{if(o.countStarts+=1,o.startError&&o.countStarts<o.countStartError){this.trigger("disconnected",o.startError);return}this.register()});stop=jest.fn(()=>{this.startedTimeout&&clearTimeout(this.startedTimeout),this.stopedTimeout&&clearTimeout(this.stopedTimeout),this.unregister(),this.isStarted()?this.stopedTimeout=setTimeout(()=>{this.trigger("disconnected",{error:!0,socket:g})},h):this.trigger("disconnected",{error:!0,socket:g})});removeAllListeners=jest.fn(()=>(this.events.removeEventHandlers(),this));once=jest.fn((e,t)=>(this.events.once(e,t),this));startedTimeout;stopedTimeout;session;isRegisteredInner;isConnectedInner;configuration;constructor(e){this.events=new S.Events(D);const[t,r]=e.uri.split(":"),[i,c]=r.split("@"),p={...e,uri:new a.URI(t,i,c)};this.configuration=p,this.registratorInner=new Et}static setStartError(e,{count:t=Number.POSITIVE_INFINITY}={}){o.startError=e,o.countStartError=t}static resetStartError(){o.startError=void 0,o.countStartError=Number.POSITIVE_INFINITY,o.countStarts=0}static setAvailableTelephony(){o.isAvailableTelephony=!0}static setNotAvailableTelephony(){o.isAvailableTelephony=!1}static reset(){o.resetStartError(),o.setAvailableTelephony()}on(e,t){return this.events.on(e,t),this}off(e,t){return this.events.off(e,t),this}trigger(e,t){this.events.trigger(e,t)}terminateSessions(){this.session?.terminate()}set(e,t){return this.configuration[e]=t,!0}register(){this.startedTimeout&&clearTimeout(this.startedTimeout);const{password:e,register:t,uri:r}=this.configuration;t===!0&&r.user.includes(L)?(this.isRegisteredInner=!1,this.isConnectedInner=!1,this.startedTimeout=setTimeout(()=>{this.trigger("registrationFailed",{response:O,cause:a.C.causes.REJECTED})},h)):!this.isRegistered()&&t===!0&&(e===d||e===T)?(this.isRegisteredInner=!0,this.startedTimeout=setTimeout(()=>{this.trigger("registered",{response:M})},h)):t===!0&&e!==d&&e!==T&&(this.isRegisteredInner=!1,this.isConnectedInner=!1,this.startedTimeout=setTimeout(()=>{this.trigger("registrationFailed",{response:O,cause:a.C.causes.REJECTED})},h)),o.isAvailableTelephony?(this.trigger("connected",{socket:g}),this.isConnectedInner=!0):this.stop()}unregister(){this.isRegisteredInner=!1,this.isConnectedInner=!1,this.trigger("unregistered",{response:M})}isRegistered(){return this.isRegisteredInner===!0}isConnected(){return this.isConnectedInner===!0}isStarted(){return this.configuration.register===!0&&this.isRegisteredInner===!0||this.configuration.register!==!0&&this.isConnectedInner===!0}newSipEvent(e){this.trigger("sipEvent",e)}registrator(){return this.registratorInner}}class ht{url;constructor(e){this.url=e}}class ut extends k.EventEmitter{contentType;body;constructor(e,t){super(),this.contentType=e,this.body=t}}const I="remote",mt=(n,e)=>{const t=new w(e),r={originator:I,request:t,info:new ut("","")};n.newInfo(r)},lt=(n,e)=>{const r={event:"sipEvent",request:new w(e)};n.newSipEvent(r)},pt=(n,{incomingNumber:e="1234",displayName:t,host:r})=>{const i=new s({originator:I,eventHandlers:{}}),c=new V("sip",e,r);i.remote_identity=new b(c,t);const p=new w([]);n.trigger("newRTCSession",{originator:I,session:i,request:p})},gt=(n,e)=>{e?n.trigger("failed",e):n.trigger("failed",n)},N={triggerNewInfo:mt,triggerNewSipEvent:lt,triggerIncomingSession:pt,triggerFailIncomingSession:gt,WebSocketInterface:ht,UA:o,C:{INVITE:"INVITE"}},u="user",E="displayName",m="SIP_SERVER_URL",C="SIP_WEB_SOCKET_SERVER_URL",_t=new N.WebSocketInterface(C),R={userAgent:"Chrome",sipServerUrl:m,sipWebSocketServerURL:C},Tt={...R},F={...R,user:u,password:d,register:!0},It={...F,displayName:E},St={...R,displayName:E,register:!1},l={session_timers:!1,sockets:[_t],user_agent:"Chrome",sdpSemantics:"unified-plan",register_expires:300,connection_recovery_max_interval:6,connection_recovery_min_interval:2},wt={...l,password:d,uri:new a.URI("sip",u,m),display_name:"",register:!0},Nt={...l,password:d,uri:new a.URI("sip",u,m),display_name:E,register:!0},Ct={...l,display_name:E,register:!1},Rt={...l,display_name:"",register:!1},W="10.10.10.10",ft=[`X-Vinteo-Remote: ${W}`],At=()=>new P.SipConnector({JsSIP:N});exports.FAILED_CONFERENCE_NUMBER=y;exports.JsSIP=N;exports.NAME_INCORRECT=L;exports.PASSWORD_CORRECT=d;exports.PASSWORD_CORRECT_2=T;exports.SIP_SERVER_URL=m;exports.SIP_WEB_SOCKET_SERVER_URL=C;exports.dataForConnectionWithAuthorization=F;exports.dataForConnectionWithAuthorizationWithDisplayName=It;exports.dataForConnectionWithoutAuthorization=St;exports.dataForConnectionWithoutAuthorizationWithoutDisplayName=Tt;exports.displayName=E;exports.doMockSipConnector=At;exports.extraHeadersRemoteAddress=ft;exports.remoteAddress=W;exports.uaConfigurationWithAuthorization=wt;exports.uaConfigurationWithAuthorizationWithDisplayName=Nt;exports.uaConfigurationWithoutAuthorization=Ct;exports.uaConfigurationWithoutAuthorizationWithoutDisplayName=Rt;exports.user=u;
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const b=require("node:events"),V=require("@krivega/jssip/lib/NameAddrHeader"),k=require("@krivega/jssip/lib/URI"),U=require("@krivega/jssip/lib/SIPMessage"),a=require("@krivega/jssip"),f=require("webrtc-mock"),S=require("events-constructor"),P=require("./@SipConnector-hpySQIBa.cjs");class N extends U.IncomingRequest{headers;constructor(e){super(),this.headers=new Headers(e)}getHeader(e){return this.headers.get(e)??""}}const H="incomingCall",q="declinedIncomingCall",G="failedIncomingCall",x="terminatedIncomingCall",v="connecting",z="connected",j="disconnected",Y="newRTCSession",B="registered",K="unregistered",J="registrationFailed",$="newMessage",Q="sipEvent",X="availableSecondRemoteStream",Z="notAvailableSecondRemoteStream",ee="mustStopPresentation",te="shareState",re="enterRoom",ne="useLicense",oe="peerconnection:confirmed",se="peerconnection:ontrack",ie="channels",ae="channels:notify",ce="ended:fromserver",de="main-cam-control",Ee="admin-stop-main-cam",he="admin-start-main-cam",ue="admin-stop-mic",me="admin-start-mic",le="admin-force-sync-media-state",pe="participant:added-to-list-moderators",ge="participant:removed-from-list-moderators",_e="participant:move-request-to-stream",Te="participant:move-request-to-spectators",Ie="participant:move-request-to-participants",Se="participation:accepting-word-request",Ne="participation:cancelling-word-request",we="webcast:started",Ce="webcast:stopped",Re="account:changed",fe="account:deleted",Ae="conference:participant-token-issued",Me="ended",Oe="sending",Pe="reinvite",ve="replaces",De="refer",ye="progress",Le="accepted",Fe="confirmed",We="peerconnection",be="failed",Ve="muted",ke="unmuted",Ue="newDTMF",He="newInfo",qe="hold",Ge="unhold",xe="update",ze="sdp",je="icecandidate",Ye="getusermediafailed",Be="peerconnection:createofferfailed",Ke="peerconnection:createanswerfailed",Je="peerconnection:setlocaldescriptionfailed",$e="peerconnection:setremotedescriptionfailed",Qe="presentation:start",Xe="presentation:started",Ze="presentation:end",et="presentation:ended",tt="presentation:failed",rt=[H,q,x,G,Se,Ne,_e,ae,Ae,Re,fe,we,Ce,pe,ge],D=[v,z,j,Y,B,K,J,$,Q],nt=[X,Z,ee,te,re,ne,oe,se,ie,ce,de,he,Ee,ue,me,le,Te,Ie],_=[Me,v,Oe,Pe,ve,De,ye,Le,Fe,We,be,Ve,ke,Ue,He,qe,Ge,xe,ze,je,Ye,Be,Ke,Je,$e,Qe,Xe,Ze,et,tt];[...D,...rt];[..._,...nt];class ot{originator;connection;events;remote_identity;mutedOptions={audio:!1,video:!1};constructor({originator:e="local",eventHandlers:t,remoteIdentity:r}){this.originator=e,this.events=new S.Events(_),this.initEvents(t),this.remote_identity=r}get contact(){throw new Error("Method not implemented.")}get direction(){throw new Error("Method not implemented.")}get local_identity(){throw new Error("Method not implemented.")}get start_time(){throw new Error("Method not implemented.")}get end_time(){throw new Error("Method not implemented.")}get status(){throw new Error("Method not implemented.")}get C(){throw new Error("Method not implemented.")}get causes(){throw new Error("Method not implemented.")}get id(){throw new Error("Method not implemented.")}get data(){throw new Error("Method not implemented.")}set data(e){throw new Error("Method not implemented.")}isInProgress(){throw new Error("Method not implemented.")}isEnded(){throw new Error("Method not implemented.")}isReadyToReOffer(){throw new Error("Method not implemented.")}answer(e){throw new Error("Method not implemented.")}terminate(e){throw new Error("Method not implemented.")}async sendInfo(e,t,r){throw new Error("Method not implemented.")}hold(e,t){throw new Error("Method not implemented.")}unhold(e,t){throw new Error("Method not implemented.")}async renegotiate(e,t){throw new Error("Method not implemented.")}isOnHold(){throw new Error("Method not implemented.")}mute(e){throw new Error("Method not implemented.")}unmute(e){throw new Error("Method not implemented.")}isMuted(){throw new Error("Method not implemented.")}refer(e,t){throw new Error("Method not implemented.")}resetLocalMedia(){throw new Error("Method not implemented.")}async replaceMediaStream(e,t){throw new Error("Method not implemented.")}addListener(e,t){throw new Error("Method not implemented.")}once(e,t){throw new Error("Method not implemented.")}removeListener(e,t){throw new Error("Method not implemented.")}off(e,t){return this.events.off(e,t),this}removeAllListeners(e){return console.warn("Method not implemented. Event:",e),this}setMaxListeners(e){throw new Error("Method not implemented.")}getMaxListeners(){throw new Error("Method not implemented.")}listeners(e){throw new Error("Method not implemented.")}rawListeners(e){throw new Error("Method not implemented.")}emit(e,...t){throw new Error("Method not implemented.")}listenerCount(e){throw new Error("Method not implemented.")}prependListener(e,t){throw new Error("Method not implemented.")}prependOnceListener(e,t){throw new Error("Method not implemented.")}eventNames(){throw new Error("Method not implemented.")}initEvents(e){e&&Object.entries(e).forEach(([t,r])=>{this.on(t,r)})}on(e,t){return _.includes(e)&&this.events.on(e,t),this}trigger(e,t){this.events.trigger(e,t)}sendDTMF(){this.trigger("newDTMF",{originator:this.originator})}async startPresentation(e){return this.trigger("presentation:start",e),this.trigger("presentation:started",e),e}async stopPresentation(e){return this.trigger("presentation:end",e),this.trigger("presentation:ended",e),e}isEstablished(){return!0}}class st{stats=new Map().set("codec",{mimeType:"video/h264"});dtmf=null;track=null;transport=null;transform=null;parameters={encodings:[{}],transactionId:"0",codecs:[],headerExtensions:[],rtcp:{}};parametersGets;constructor({track:e}={}){this.track=e??null}async getStats(){return this.stats}async replaceTrack(e){this.track=e??null}async setParameters(e){if(e!==this.parametersGets)throw new Error("Failed to execute 'setParameters' on 'RTCRtpSender': Read-only field modified in setParameters().");const{transactionId:t}=this.parameters;this.parameters={...this.parameters,...e,transactionId:`${Number(t)+1}`}}getParameters(){return this.parametersGets={...this.parameters},this.parametersGets}setStreams(){throw new Error("Method not implemented.")}}const it=["track"];class at{senders=[];receivers=[];canTrickleIceCandidates;connectionState;currentLocalDescription;currentRemoteDescription;iceConnectionState;iceGatheringState;idpErrorInfo;idpLoginUrl;localDescription;onconnectionstatechange;ondatachannel;onicecandidate;onicecandidateerror=null;oniceconnectionstatechange;onicegatheringstatechange;onnegotiationneeded;onsignalingstatechange;ontrack;peerIdentity=void 0;pendingLocalDescription;pendingRemoteDescription;remoteDescription;sctp=null;signalingState;events;constructor(e,t){this.events=new S.Events(it),this.receivers=t.map(r=>({track:r}))}getRemoteStreams(){throw new Error("Method not implemented.")}async addIceCandidate(e){throw new Error("Method not implemented.")}addTransceiver(e,t){throw new Error("Method not implemented.")}close(){throw new Error("Method not implemented.")}restartIce(){throw new Error("Method not implemented.")}async createAnswer(e,t){throw new Error("Method not implemented.")}createDataChannel(e,t){throw new Error("Method not implemented.")}async createOffer(e,t,r){throw new Error("Method not implemented.")}getConfiguration(){throw new Error("Method not implemented.")}async getIdentityAssertion(){throw new Error("Method not implemented.")}async getStats(e){throw new Error("Method not implemented.")}getTransceivers(){throw new Error("Method not implemented.")}removeTrack(e){throw new Error("Method not implemented.")}setConfiguration(e){throw new Error("Method not implemented.")}async setLocalDescription(e){throw new Error("Method not implemented.")}async setRemoteDescription(e){throw new Error("Method not implemented.")}addEventListener(e,t,r){this.events.on(e,t)}removeEventListener(e,t,r){this.events.off(e,t)}dispatchEvent(e){throw new Error("Method not implemented.")}getReceivers=()=>this.receivers;getSenders=()=>this.senders;addTrack=e=>{const t=new st({track:e});return this.senders.push(t),this.events.trigger("track",{track:e}),t}}function ct(n){const e=n.match(/(purgatory)|[\d.]+/g);if(!e)throw new Error("wrong sip url");return e[0]}const A=400,y="777",dt=n=>n.getVideoTracks().length>0;class i extends ot{static presentationError;static startPresentationError;static countStartPresentationError=Number.POSITIVE_INFINITY;static countStartsPresentation=0;url;status_code;answer=jest.fn(({mediaStream:e})=>{if(this.originator!=="remote")throw new Error("answer available only for remote sessions");this.initPeerconnection(e),setTimeout(()=>{this.trigger("connecting"),setTimeout(()=>{this.trigger("accepted")},100),setTimeout(()=>{this.trigger("confirmed")},200)},A)});replaceMediaStream=jest.fn(async e=>{});isEndedInner=!1;constructor({eventHandlers:e,originator:t,remoteIdentity:r=new a.NameAddrHeader(new a.URI("sip","caller1","test1.com",5060),"Test Caller 1")}){super({originator:t,eventHandlers:e,remoteIdentity:r})}static setPresentationError(e){this.presentationError=e}static resetPresentationError(){this.presentationError=void 0}static setStartPresentationError(e,{count:t=Number.POSITIVE_INFINITY}={}){this.startPresentationError=e,this.countStartPresentationError=t}static resetStartPresentationError(){this.startPresentationError=void 0,this.countStartPresentationError=Number.POSITIVE_INFINITY,this.countStartsPresentation=0}startPresentation=async e=>{if(i.countStartsPresentation+=1,i.presentationError)throw this.trigger("presentation:start",e),this.trigger("presentation:failed",e),i.presentationError;if(i.startPresentationError&&i.countStartsPresentation<i.countStartPresentationError)throw this.trigger("presentation:start",e),this.trigger("presentation:failed",e),i.startPresentationError;return super.startPresentation(e)};stopPresentation=async e=>{if(i.presentationError)throw this.trigger("presentation:end",e),this.trigger("presentation:failed",e),i.presentationError;return super.stopPresentation(e)};initPeerconnection(e){return e?(this.createPeerconnection(e),!0):!1}createPeerconnection(e){const t=f.createAudioMediaStreamTrackMock();t.id="mainaudio1";const r=[t];if(dt(e)){const c=f.createVideoMediaStreamTrackMock();c.id="mainvideo1",r.push(c)}this.connection=new at(void 0,r),this.addStream(e),this.trigger("peerconnection",{peerconnection:this.connection})}connect(e,{mediaStream:t}={}){const r=ct(e);return this.initPeerconnection(t),setTimeout(()=>{e.includes(y)?this.trigger("failed",{originator:"remote",message:"IncomingResponse",cause:"Rejected"}):(this.trigger("connecting"),setTimeout(()=>{this.newInfo({originator:P.Originator.REMOTE,request:{getHeader:s=>s==="content-type"?"application/vinteo.webrtc.roomname":s==="x-webrtc-enter-room"?r:s==="x-webrtc-participant-name"?"Test Caller 1":""}})},100),setTimeout(()=>{this.trigger("accepted")},200),setTimeout(()=>{this.trigger("confirmed")},300))},A),this.connection}terminate({status_code:e,cause:t}={}){return this.status_code=e,this.trigger("ended",{status_code:e,cause:t,originator:"local"}),this.isEndedInner=!1,this}async terminateAsync({status_code:e,cause:t}={}){this.terminate({status_code:e,cause:t})}terminateRemote({status_code:e}={}){return this.status_code=e,this.trigger("ended",{status_code:e,originator:"remote"}),this}addStream(e,t="getTracks"){e[t]().forEach(r=>this.connection.addTrack(r))}forEachSenders(e){const t=this.connection.getSenders();for(const r of t)e(r);return t}toggleMuteAudio(e){this.forEachSenders(({track:t})=>{t&&t.kind==="audio"&&(t.enabled=!e)})}toggleMuteVideo(e){this.forEachSenders(({track:t})=>{t&&t.kind==="video"&&(t.enabled=!e)})}mute(e){e.audio&&(this.mutedOptions.audio=!0,this.toggleMuteAudio(this.mutedOptions.audio)),e.video&&(this.mutedOptions.video=!0,this.toggleMuteVideo(this.mutedOptions.video)),this.onmute(e)}unmute(e){e.audio&&(this.mutedOptions.audio=!1),e.video&&(this.mutedOptions.video=!1),this.trigger("unmuted",e)}isMuted(){return this.mutedOptions}onmute({audio:e,video:t}){this.trigger("muted",{audio:e,video:t})}async sendInfo(){}isEnded(){return this.isEndedInner}newInfo(e){this.trigger("newInfo",e)}}class Et{extraHeaders=[];setExtraHeaders(e){this.extraHeaders=e}setExtraContactParams(){}}const d="PASSWORD_CORRECT",T="PASSWORD_CORRECT_2",L="NAME_INCORRECT",h=400,g={url:"wss://sipServerUrl/webrtc/wss/",sip_uri:"sip:sipServerUrl;transport=ws",via_transport:"WSS"},M={status_code:200,reason_phrase:"OK"},O={status_code:401,reason_phrase:"Unauthorized"};class o{static isAvailableTelephony=!0;static startError;static countStartError=Number.POSITIVE_INFINITY;static countStarts=0;events;registratorInner;call=jest.fn((e,t)=>{const{mediaStream:r,eventHandlers:s}=t;return this.session=new i({eventHandlers:s,originator:"local"}),this.session.connect(e,{mediaStream:r}),this.session});sendOptions=jest.fn((e,t,r)=>{console.log("sendOptions",e,t,r)});start=jest.fn(()=>{if(o.countStarts+=1,o.startError&&o.countStarts<o.countStartError){this.trigger("disconnected",o.startError);return}this.register()});stop=jest.fn(()=>{this.startedTimeout&&clearTimeout(this.startedTimeout),this.stopedTimeout&&clearTimeout(this.stopedTimeout),this.unregister(),this.isStarted()?this.stopedTimeout=setTimeout(()=>{this.trigger("disconnected",{error:!0,socket:g})},h):this.trigger("disconnected",{error:!0,socket:g})});removeAllListeners=jest.fn(()=>(this.events.removeEventHandlers(),this));once=jest.fn((e,t)=>(this.events.once(e,t),this));startedTimeout;stopedTimeout;session;isRegisteredInner;isConnectedInner;configuration;constructor(e){this.events=new S.Events(D);const[t,r]=e.uri.split(":"),[s,c]=r.split("@"),p={...e,uri:new a.URI(t,s,c)};this.configuration=p,this.registratorInner=new Et}static setStartError(e,{count:t=Number.POSITIVE_INFINITY}={}){o.startError=e,o.countStartError=t}static resetStartError(){o.startError=void 0,o.countStartError=Number.POSITIVE_INFINITY,o.countStarts=0}static setAvailableTelephony(){o.isAvailableTelephony=!0}static setNotAvailableTelephony(){o.isAvailableTelephony=!1}static reset(){o.resetStartError(),o.setAvailableTelephony()}on(e,t){return this.events.on(e,t),this}off(e,t){return this.events.off(e,t),this}trigger(e,t){this.events.trigger(e,t)}terminateSessions(){this.session?.terminate()}set(e,t){return this.configuration[e]=t,!0}register(){this.startedTimeout&&clearTimeout(this.startedTimeout);const{password:e,register:t,uri:r}=this.configuration;t===!0&&r.user.includes(L)?(this.isRegisteredInner=!1,this.isConnectedInner=!1,this.startedTimeout=setTimeout(()=>{this.trigger("registrationFailed",{response:O,cause:a.C.causes.REJECTED})},h)):!this.isRegistered()&&t===!0&&(e===d||e===T)?(this.isRegisteredInner=!0,this.startedTimeout=setTimeout(()=>{this.trigger("registered",{response:M})},h)):t===!0&&e!==d&&e!==T&&(this.isRegisteredInner=!1,this.isConnectedInner=!1,this.startedTimeout=setTimeout(()=>{this.trigger("registrationFailed",{response:O,cause:a.C.causes.REJECTED})},h)),o.isAvailableTelephony?(this.trigger("connected",{socket:g}),this.isConnectedInner=!0):this.stop()}unregister(){this.isRegisteredInner=!1,this.isConnectedInner=!1,this.trigger("unregistered",{response:M})}isRegistered(){return this.isRegisteredInner===!0}isConnected(){return this.isConnectedInner===!0}isStarted(){return this.configuration.register===!0&&this.isRegisteredInner===!0||this.configuration.register!==!0&&this.isConnectedInner===!0}newSipEvent(e){this.trigger("sipEvent",e)}registrator(){return this.registratorInner}}class ht{url;constructor(e){this.url=e}}class ut extends b.EventEmitter{contentType;body;constructor(e,t){super(),this.contentType=e,this.body=t}}const I="remote",mt=(n,e)=>{const t=new N(e),r={originator:I,request:t,info:new ut("","")};n.newInfo(r)},lt=(n,e)=>{const r={event:"sipEvent",request:new N(e)};n.newSipEvent(r)},pt=(n,{incomingNumber:e="1234",displayName:t,host:r})=>{const s=new i({originator:I,eventHandlers:{}}),c=new k("sip",e,r);s.remote_identity=new V(c,t);const p=new N([]);n.trigger("newRTCSession",{originator:I,session:s,request:p})},gt=(n,e)=>{e?n.trigger("failed",e):n.trigger("failed",n)},w={triggerNewInfo:mt,triggerNewSipEvent:lt,triggerIncomingSession:pt,triggerFailIncomingSession:gt,WebSocketInterface:ht,UA:o,C:{INVITE:"INVITE"}},u="user",E="displayName",m="SIP_SERVER_URL",C="SIP_WEB_SOCKET_SERVER_URL",_t=new w.WebSocketInterface(C),R={userAgent:"Chrome",sipServerUrl:m,sipWebSocketServerURL:C},Tt={...R},F={...R,user:u,password:d,register:!0},It={...F,displayName:E},St={...R,displayName:E,register:!1},l={session_timers:!1,sockets:[_t],user_agent:"Chrome",sdpSemantics:"unified-plan",register_expires:300,connection_recovery_max_interval:6,connection_recovery_min_interval:2},Nt={...l,password:d,uri:new a.URI("sip",u,m),display_name:"",register:!0},wt={...l,password:d,uri:new a.URI("sip",u,m),display_name:E,register:!0},Ct={...l,display_name:E,register:!1},Rt={...l,display_name:"",register:!1},W="10.10.10.10",ft=[`X-Vinteo-Remote: ${W}`],At=()=>new P.SipConnector({JsSIP:w});exports.FAILED_CONFERENCE_NUMBER=y;exports.JsSIP=w;exports.NAME_INCORRECT=L;exports.PASSWORD_CORRECT=d;exports.PASSWORD_CORRECT_2=T;exports.SIP_SERVER_URL=m;exports.SIP_WEB_SOCKET_SERVER_URL=C;exports.dataForConnectionWithAuthorization=F;exports.dataForConnectionWithAuthorizationWithDisplayName=It;exports.dataForConnectionWithoutAuthorization=St;exports.dataForConnectionWithoutAuthorizationWithoutDisplayName=Tt;exports.displayName=E;exports.doMockSipConnector=At;exports.extraHeadersRemoteAddress=ft;exports.remoteAddress=W;exports.uaConfigurationWithAuthorization=Nt;exports.uaConfigurationWithAuthorizationWithDisplayName=wt;exports.uaConfigurationWithoutAuthorization=Ct;exports.uaConfigurationWithoutAuthorizationWithoutDisplayName=Rt;exports.user=u;
|
package/dist/doMock.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import { createAudioMediaStreamTrackMock as W, createVideoMediaStreamTrackMock as U } from "webrtc-mock";
|
|
1
|
+
import { EventEmitter as D } from "node:events";
|
|
2
|
+
import L from "@krivega/jssip/lib/NameAddrHeader";
|
|
3
|
+
import y from "@krivega/jssip/lib/URI";
|
|
4
|
+
import { IncomingRequest as F } from "@krivega/jssip/lib/SIPMessage";
|
|
5
|
+
import { NameAddrHeader as b, URI as E, C as N } from "@krivega/jssip";
|
|
6
|
+
import { createAudioMediaStreamTrackMock as V, createVideoMediaStreamTrackMock as k } from "webrtc-mock";
|
|
8
7
|
import { Events as _ } from "events-constructor";
|
|
9
|
-
|
|
8
|
+
import { O as W, S as U } from "./@SipConnector-BEZk1hmx.js";
|
|
9
|
+
class T extends F {
|
|
10
10
|
headers;
|
|
11
11
|
constructor(e) {
|
|
12
12
|
super(), this.headers = new Headers(e);
|
|
@@ -269,6 +269,7 @@ class ot {
|
|
|
269
269
|
}
|
|
270
270
|
}
|
|
271
271
|
class st {
|
|
272
|
+
stats = (/* @__PURE__ */ new Map()).set("codec", { mimeType: "video/h264" });
|
|
272
273
|
dtmf = null;
|
|
273
274
|
track = null;
|
|
274
275
|
transport = null;
|
|
@@ -284,9 +285,8 @@ class st {
|
|
|
284
285
|
constructor({ track: e } = {}) {
|
|
285
286
|
this.track = e ?? null;
|
|
286
287
|
}
|
|
287
|
-
// eslint-disable-next-line class-methods-use-this
|
|
288
288
|
async getStats() {
|
|
289
|
-
|
|
289
|
+
return this.stats;
|
|
290
290
|
}
|
|
291
291
|
async replaceTrack(e) {
|
|
292
292
|
this.track = e ?? null;
|
|
@@ -306,7 +306,7 @@ class st {
|
|
|
306
306
|
getParameters() {
|
|
307
307
|
return this.parametersGets = { ...this.parameters }, this.parametersGets;
|
|
308
308
|
}
|
|
309
|
-
// eslint-disable-next-line class-methods-use-this
|
|
309
|
+
// eslint-disable-next-line @typescript-eslint/class-methods-use-this
|
|
310
310
|
setStreams() {
|
|
311
311
|
throw new Error("Method not implemented.");
|
|
312
312
|
}
|
|
@@ -443,14 +443,13 @@ class i extends ot {
|
|
|
443
443
|
}, 200);
|
|
444
444
|
}, f);
|
|
445
445
|
});
|
|
446
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
447
446
|
replaceMediaStream = jest.fn(async (e) => {
|
|
448
447
|
});
|
|
449
448
|
isEndedInner = !1;
|
|
450
449
|
constructor({
|
|
451
450
|
eventHandlers: e,
|
|
452
451
|
originator: t,
|
|
453
|
-
remoteIdentity: r = new
|
|
452
|
+
remoteIdentity: r = new b(
|
|
454
453
|
new E("sip", "caller1", "test1.com", 5060),
|
|
455
454
|
"Test Caller 1"
|
|
456
455
|
)
|
|
@@ -485,11 +484,11 @@ class i extends ot {
|
|
|
485
484
|
return e ? (this.createPeerconnection(e), !0) : !1;
|
|
486
485
|
}
|
|
487
486
|
createPeerconnection(e) {
|
|
488
|
-
const t =
|
|
487
|
+
const t = V();
|
|
489
488
|
t.id = "mainaudio1";
|
|
490
489
|
const r = [t];
|
|
491
490
|
if (Et(e)) {
|
|
492
|
-
const a =
|
|
491
|
+
const a = k();
|
|
493
492
|
a.id = "mainvideo1", r.push(a);
|
|
494
493
|
}
|
|
495
494
|
this.connection = new at(void 0, r), this.addStream(e), this.trigger("peerconnection", { peerconnection: this.connection });
|
|
@@ -503,7 +502,7 @@ class i extends ot {
|
|
|
503
502
|
cause: "Rejected"
|
|
504
503
|
}) : (this.trigger("connecting"), setTimeout(() => {
|
|
505
504
|
this.newInfo({
|
|
506
|
-
originator:
|
|
505
|
+
originator: W.REMOTE,
|
|
507
506
|
// @ts-expect-error
|
|
508
507
|
request: {
|
|
509
508
|
getHeader: (s) => s === "content-type" ? "application/vinteo.webrtc.roomname" : s === "x-webrtc-enter-room" ? r : s === "x-webrtc-participant-name" ? "Test Caller 1" : ""
|
|
@@ -565,7 +564,7 @@ class i extends ot {
|
|
|
565
564
|
video: t
|
|
566
565
|
});
|
|
567
566
|
}
|
|
568
|
-
// eslint-disable-next-line @typescript-eslint/no-empty-function, class-methods-use-this
|
|
567
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-function, @typescript-eslint/class-methods-use-this
|
|
569
568
|
async sendInfo() {
|
|
570
569
|
}
|
|
571
570
|
isEnded() {
|
|
@@ -581,7 +580,7 @@ class ht {
|
|
|
581
580
|
setExtraHeaders(e) {
|
|
582
581
|
this.extraHeaders = e;
|
|
583
582
|
}
|
|
584
|
-
// eslint-disable-next-line class-methods-use-this
|
|
583
|
+
// eslint-disable-next-line @typescript-eslint/class-methods-use-this
|
|
585
584
|
setExtraContactParams() {
|
|
586
585
|
}
|
|
587
586
|
}
|
|
@@ -735,7 +734,7 @@ class lt {
|
|
|
735
734
|
this.url = e;
|
|
736
735
|
}
|
|
737
736
|
}
|
|
738
|
-
class ut extends
|
|
737
|
+
class ut extends D {
|
|
739
738
|
contentType;
|
|
740
739
|
body;
|
|
741
740
|
constructor(e, t) {
|
|
@@ -757,8 +756,8 @@ const g = "remote", pt = (n, e) => {
|
|
|
757
756
|
displayName: t,
|
|
758
757
|
host: r
|
|
759
758
|
}) => {
|
|
760
|
-
const s = new i({ originator: g, eventHandlers: {} }), a = new
|
|
761
|
-
s.remote_identity = new
|
|
759
|
+
const s = new i({ originator: g, eventHandlers: {} }), a = new y("sip", e, r);
|
|
760
|
+
s.remote_identity = new L(a, t);
|
|
762
761
|
const l = new T([]);
|
|
763
762
|
n.trigger("newRTCSession", {
|
|
764
763
|
originator: g,
|
|
@@ -823,7 +822,7 @@ const g = "remote", pt = (n, e) => {
|
|
|
823
822
|
...m,
|
|
824
823
|
display_name: "",
|
|
825
824
|
register: !1
|
|
826
|
-
}, St = "10.10.10.10", kt = [`X-Vinteo-Remote: ${St}`], Wt = () => new
|
|
825
|
+
}, St = "10.10.10.10", kt = [`X-Vinteo-Remote: ${St}`], Wt = () => new U({
|
|
827
826
|
JsSIP: P
|
|
828
827
|
});
|
|
829
828
|
export {
|
package/dist/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require("events-constructor");const i=require("./@SipConnector-CZo7A8_q.cjs"),G=require("@krivega/cancelable-promise"),ae=require("repeated-calls"),le=require("ts-debounce"),_=require("debug"),ue=require("sequent-promises"),de=require("stack-promises"),ge=e=>e instanceof Object&&("originator"in e||"cause"in e),fe=e=>{if(G.isCanceledError(e))return!0;if(!ge(e))return!1;const{originator:n,cause:t}=e;return typeof t=="string"?t===i.ECallCause.REQUEST_TIMEOUT||t===i.ECallCause.REJECTED||n===i.Originator.LOCAL&&(t===i.ECallCause.CANCELED||t===i.ECallCause.BYE):!1},Ce=(e,n)=>(e.degradationPreference=n.degradationPreference,e),he=(e,n)=>{e.encodings??=[];for(let t=e.encodings.length;t<n;t+=1)e.encodings.push({});return e},K=e=>(n,t)=>t!==void 0&&n!==t||t===void 0&&n!==e,Se=K(),me=(e,n)=>{if(Se(e,n))return e},Re=(e,n)=>{const t=e.maxBitrate,o=me(n,t);return o!==void 0&&(e.maxBitrate=o),e},Y=1,pe=K(Y),ye=(e,n)=>{const t=e===void 0?void 0:Math.max(e,Y);if(t!==void 0&&pe(t,n))return t},Ee=(e,n)=>{const t=e.scaleResolutionDownBy,o=ye(n,t);return o!==void 0&&(e.scaleResolutionDownBy=o),e},Te=(e,n)=>{const t=n.encodings?.length??0;return he(e,t),e.encodings.forEach((o,r)=>{const s=(n?.encodings??[])[r],c=s?.maxBitrate,a=s?.scaleResolutionDownBy;Re(o,c),Ee(o,a)}),e},ve=(e,n)=>{if(e.codecs?.length!==n.codecs?.length)return!0;for(let t=0;t<(e.codecs?.length??0);t++)if(JSON.stringify(e.codecs[t])!==JSON.stringify(n.codecs[t]))return!0;if(e.headerExtensions?.length!==n.headerExtensions?.length)return!0;for(let t=0;t<(e.headerExtensions?.length??0);t++)if(JSON.stringify(e.headerExtensions[t])!==JSON.stringify(n.headerExtensions[t]))return!0;if(e.encodings?.length!==n.encodings?.length)return!0;for(let t=0;t<(e.encodings.length??0);t++)if(JSON.stringify(e.encodings[t])!==JSON.stringify(n.encodings[t]))return!0;return e.rtcp?.cname!==n.rtcp?.cname||e.rtcp?.reducedSize!==n.rtcp?.reducedSize||e.degradationPreference!==n.degradationPreference},q=async(e,n)=>{const t=e.getParameters(),o=JSON.parse(JSON.stringify(t));Te(t,n),Ce(t,n);const r=ve(o,t);return r&&await e.setParameters(t),{parameters:t,isChanged:r}},Me=e=>e.getVideoTracks()[0],be=1e6,m=e=>e*be,z=m(.06),Q=m(4),_e=e=>e<=64?z:e<=128?m(.12):e<=256?m(.25):e<=384?m(.32):e<=426?m(.38):e<=640?m(.5):e<=848?m(.7):e<=1280?m(1):e<=1920?m(2):Q,Z=(e,n)=>e!==void 0&&n!==void 0&&e.toLowerCase().includes(n.toLowerCase()),Ae="av1",Oe=e=>Z(e,Ae),Ne=.6,J=(e,n)=>Oe(n)?e*Ne:e,Be=e=>J(z,e),we=e=>J(Q,e),ee=(e,n)=>{const t=_e(e);return J(t,n)},H=1,ne=({videoTrack:e,targetSize:n,codec:t})=>{const o=e.getSettings(),r=o.width,s=o.height,c=r===void 0?H:r/n.width,a=s===void 0?H:s/n.height,l=Math.max(c,a,H),d=ee(n.width,t);return{scaleResolutionDownBy:l,maxBitrate:d}},w=({mediaStream:e,simulcastEncodings:n,sendEncodings:t})=>{if(n&&n.length>0){const o=t??[],r=Me(e);if(r===void 0)throw new Error("No video track");return n.forEach((s,c)=>{const a=o[c]??{};a.active=!0,s.rid!==void 0&&(a.rid=s.rid),s.scalabilityMode!==void 0&&(a.scalabilityMode=s.scalabilityMode);const{maxBitrate:l,scaleResolutionDownBy:d}=ne({videoTrack:r,targetSize:{width:s.width,height:s.height}});a.maxBitrate=l,a.scaleResolutionDownBy=d,o[c]=a}),o}return t},te="purgatory",P=e=>e===te,De=(e,n)=>e.filter(o=>n.some(r=>r.clockRate===o.clockRate&&r.mimeType===o.mimeType&&r.channels===o.channels&&r.sdpFmtpLine===o.sdpFmtpLine)),Pe=e=>{const n=RTCRtpSender.getCapabilities(e),t=RTCRtpReceiver.getCapabilities(e),o=n===null?[]:n.codecs,r=t===null?[]:t.codecs;return De(o,r)},Ie=(e,n)=>n===void 0||n.length===0?e:e.sort((t,o)=>{const r=n.indexOf(t.mimeType),s=n.indexOf(o.mimeType),c=r===-1?Number.MAX_VALUE:r,a=s===-1?Number.MAX_VALUE:s;return c-a}),xe=(e,n)=>n===void 0||n.length===0?e:e.filter(t=>!n.includes(t.mimeType)),Fe=(e,{preferredMimeTypesVideoCodecs:n,excludeMimeTypesVideoCodecs:t})=>{if(typeof e.setCodecPreferences=="function"&&e.sender.track?.kind==="video"&&(n!==void 0&&n.length>0||t!==void 0&&t.length>0)){const o=Pe("video"),r=xe(o,t),s=Ie(r,n);e.setCodecPreferences(s)}},D=(e,{preferredMimeTypesVideoCodecs:n,excludeMimeTypesVideoCodecs:t})=>async o=>{try{Fe(o,{preferredMimeTypesVideoCodecs:n,excludeMimeTypesVideoCodecs:t}),Object.values(e).filter(s=>s!=null).length>0&&(i.logger("updateTransceiver setParametersToSender",e),await q(o.sender,e))}catch(r){i.logger("updateTransceiver error",r)}},$=e=>{if(!G.isCanceledError(e)&&!ae.hasCanceledError(e))throw e;return{isSuccessful:!1}},Ue=({kind:e,readyState:n})=>e==="video"&&n==="live",ke=new Set(["on","once","onceRace","wait","off","sendDTMF","hangUp","declineToIncomingCall","sendChannels","checkTelephony","waitChannels","ping","connection","isConfigured","isRegistered"]);class Ve{on;once;onceRace;wait;off;sendDTMF;hangUp;declineToIncomingCall;sendChannels;checkTelephony;waitChannels;ping;connection;isConfigured;isRegistered;sipConnector;preferredMimeTypesVideoCodecs;excludeMimeTypesVideoCodecs;constructor(n,{preferredMimeTypesVideoCodecs:t,excludeMimeTypesVideoCodecs:o}={}){return this.preferredMimeTypesVideoCodecs=t,this.excludeMimeTypesVideoCodecs=o,this.sipConnector=n,new Proxy(this,{get:(r,s,c)=>{if(typeof s=="string"&&ke.has(s)&&s in this.sipConnector){const l=Reflect.get(this.sipConnector,s,this.sipConnector);return typeof l=="function"?l.bind(this.sipConnector):l}const a=Reflect.get(r,s,c);return typeof a=="function"?a.bind(r):a}})}connectToServer=async n=>{const{userAgent:t,sipWebSocketServerURL:o,sipServerUrl:r,remoteAddress:s,displayName:c,name:a,password:l,isRegisteredUser:d,isDisconnectOnFail:f}=n;return i.logger("connectToServer",n),this.sipConnector.connect({userAgent:t,sipWebSocketServerURL:o,sipServerUrl:r,remoteAddress:s,displayName:c,password:l,user:a,register:d}).then(g=>(i.logger("connectToServer then"),{ua:g,isSuccessful:!0})).catch(async g=>(i.logger("connectToServer catch: error",g),f===!0?this.sipConnector.disconnect().then(()=>$(g)).catch(()=>$(g)):$(g)))};callToServer=async n=>{const{conference:t,mediaStream:o,extraHeaders:r,iceServers:s,contentHint:c,simulcastEncodings:a,degradationPreference:l,sendEncodings:d,offerToReceiveAudio:f,offerToReceiveVideo:g,directionVideo:I,directionAudio:x,setRemoteStreams:C,onBeforeProgressCall:R,onSuccessProgressCall:h,onEnterPurgatory:S,onEnterConference:p,onFailProgressCall:y,onFinishProgressCall:E,onEndedCall:T}=n,b=this.resolveHandleReadyRemoteStreamsDebounced({onReadyRemoteStreams:C}),A=this.resolveHandleReadyRemoteStreams({onReadyRemoteStreams:()=>{b().catch(_)}}),O=D({degradationPreference:l},{preferredMimeTypesVideoCodecs:this.preferredMimeTypesVideoCodecs,excludeMimeTypesVideoCodecs:this.excludeMimeTypesVideoCodecs});i.logger("callToServer",n);const N=async()=>(i.logger("startCall"),this.sipConnector.call({mediaStream:o,extraHeaders:r,iceServers:s,contentHint:c,offerToReceiveAudio:f,offerToReceiveVideo:g,directionVideo:I,directionAudio:x,sendEncodings:w({mediaStream:o,simulcastEncodings:a,sendEncodings:d}),number:t,onAddedTransceiver:O,ontrack:A}));let v=!1,M;const B=(i.logger("subscribeEnterConference: onEnterConference",p),S??p?this.sipConnector.on("api:enterRoom",({room:u})=>{i.logger("enterRoom",{_room:u,isSuccessProgressCall:v}),M=u,P(M)?S&&S():p&&p({isSuccessProgressCall:v})}):()=>{}),k=u=>(i.logger("onSuccess"),v=!0,b().catch(_),h&&h({isPurgatory:P(M)}),this.sipConnector.onceRace(["call:ended","call:failed"],()=>{B(),T&&T()}),u),V=u=>{throw i.logger("onFail"),y&&y(),B(),u},L=()=>{i.logger("onFinish"),E&&E()};return i.logger("onBeforeProgressCall"),R&&R(t),N().then(k).catch(u=>V(u)).finally(L)};disconnectFromServer=async()=>this.sipConnector.disconnect().then(()=>(i.logger("disconnectFromServer: then"),{isSuccessful:!0})).catch(n=>(i.logger("disconnectFromServer: catch",n),{isSuccessful:!1}));answerToIncomingCall=async n=>{const{mediaStream:t,extraHeaders:o,iceServers:r,contentHint:s,simulcastEncodings:c,degradationPreference:a,sendEncodings:l,offerToReceiveAudio:d,offerToReceiveVideo:f,directionVideo:g,directionAudio:I,setRemoteStreams:x,onBeforeProgressCall:C,onSuccessProgressCall:R,onEnterPurgatory:h,onEnterConference:S,onFailProgressCall:p,onFinishProgressCall:y,onEndedCall:E}=n,T=this.resolveHandleReadyRemoteStreamsDebounced({onReadyRemoteStreams:x}),b=this.resolveHandleReadyRemoteStreams({onReadyRemoteStreams:()=>{T().catch(_)}}),A=D({degradationPreference:a},{preferredMimeTypesVideoCodecs:this.preferredMimeTypesVideoCodecs,excludeMimeTypesVideoCodecs:this.excludeMimeTypesVideoCodecs});i.logger("answerToIncomingCall",n);const O=async()=>this.sipConnector.answerToIncomingCall({mediaStream:t,extraHeaders:o,iceServers:r,contentHint:s,offerToReceiveAudio:d,offerToReceiveVideo:f,directionVideo:g,directionAudio:I,sendEncodings:w({mediaStream:t,simulcastEncodings:c,sendEncodings:l}),onAddedTransceiver:A,ontrack:b}),N=()=>{const{remoteCallerData:u}=this.sipConnector;return u.incomingNumber};let v=!1,M;const B=(i.logger("subscribeEnterConference: onEnterConference",S),h??S?this.sipConnector.on("api:enterRoom",u=>{i.logger("enterRoom",{_room:u,isSuccessProgressCall:v}),M=u,P(M)?h&&h():S&&S({isSuccessProgressCall:v})}):()=>{}),k=u=>(i.logger("onSuccess"),v=!0,T().catch(_),R&&R({isPurgatory:P(M)}),this.sipConnector.onceRace(["call:ended","call:failed"],()=>{B(),E&&E()}),u),V=u=>{throw i.logger("onFail"),p&&p(),B(),u},L=()=>{i.logger("onFinish"),y&&y()};if(i.logger("onBeforeProgressCall"),C){const u=N();C(u)}return O().then(k).catch(u=>V(u)).finally(L)};updatePresentation=async({mediaStream:n,isP2P:t,maxBitrate:o,contentHint:r,simulcastEncodings:s,degradationPreference:c,sendEncodings:a,preferredMimeTypesVideoCodecs:l,excludeMimeTypesVideoCodecs:d})=>{const f=D({degradationPreference:c},{preferredMimeTypesVideoCodecs:l,excludeMimeTypesVideoCodecs:d});return i.logger("updatePresentation"),this.sipConnector.updatePresentation(n,{isP2P:t,maxBitrate:o,contentHint:r,sendEncodings:w({mediaStream:n,simulcastEncodings:s,sendEncodings:a}),onAddedTransceiver:f})};startPresentation=async({mediaStream:n,isP2P:t,maxBitrate:o,contentHint:r,simulcastEncodings:s,degradationPreference:c,sendEncodings:a,preferredMimeTypesVideoCodecs:l,excludeMimeTypesVideoCodecs:d,callLimit:f})=>{const g=D({degradationPreference:c},{preferredMimeTypesVideoCodecs:l,excludeMimeTypesVideoCodecs:d});return i.logger("startPresentation"),this.sipConnector.startPresentation(n,{isP2P:t,maxBitrate:o,contentHint:r,callLimit:f,sendEncodings:w({mediaStream:n,simulcastEncodings:s,sendEncodings:a}),onAddedTransceiver:g})};stopShareSipConnector=async({isP2P:n=!1}={})=>(i.logger("stopShareSipConnector"),this.sipConnector.stopPresentation({isP2P:n}).catch(t=>{i.logger(t)}));sendRefusalToTurnOnMic=async()=>{i.logger("sendRefusalToTurnOnMic"),await this.sipConnector.sendRefusalToTurnOnMic().catch(n=>{i.logger("sendRefusalToTurnOnMic: error",n)})};sendRefusalToTurnOnCam=async()=>{i.logger("sendRefusalToTurnOnCam"),await this.sipConnector.sendRefusalToTurnOnCam().catch(n=>{i.logger("sendRefusalToTurnOnCam: error",n)})};sendMediaState=async({isEnabledCam:n,isEnabledMic:t})=>{i.logger("sendMediaState"),await this.sipConnector.sendMediaState({cam:n,mic:t})};replaceMediaStream=async(n,{deleteExisting:t,addMissing:o,forceRenegotiation:r,contentHint:s,simulcastEncodings:c,degradationPreference:a,sendEncodings:l}={})=>{const d=D({degradationPreference:a},{preferredMimeTypesVideoCodecs:this.preferredMimeTypesVideoCodecs,excludeMimeTypesVideoCodecs:this.excludeMimeTypesVideoCodecs});return i.logger("replaceMediaStream"),this.sipConnector.replaceMediaStream(n,{deleteExisting:t,addMissing:o,forceRenegotiation:r,contentHint:s,sendEncodings:w({mediaStream:n,simulcastEncodings:c,sendEncodings:l}),onAddedTransceiver:d})};askPermissionToEnableCam=async()=>{i.logger("askPermissionToEnableCam"),await this.sipConnector.askPermissionToEnableCam()};resolveHandleReadyRemoteStreamsDebounced=({onReadyRemoteStreams:n})=>le.debounce(()=>{const t=this.sipConnector.getRemoteStreams();i.logger("remoteStreams",t),t&&n(t)},200);resolveHandleReadyRemoteStreams=({onReadyRemoteStreams:n})=>({track:t})=>{Ue(t)&&n()};getRemoteStreams=()=>(i.logger("getRemoteStreams"),this.sipConnector.getRemoteStreams());onUseLicense=n=>(i.logger("onUseLicense"),this.sipConnector.on("api:useLicense",n));onMustStopPresentation=n=>(i.logger("onMustStopPresentation"),this.sipConnector.on("api:mustStopPresentation",n));onMoveToSpectators=n=>(i.logger("onMoveToSpectators"),this.sipConnector.on("api:participant:move-request-to-spectators",n));onMoveToParticipants=n=>(i.logger("onMoveToParticipants"),this.sipConnector.on("api:participant:move-request-to-participants",n))}const U=e=>{const{url:n,cause:t}=e;let o=n;return(t===i.ECallCause.BAD_MEDIA_DESCRIPTION||t===i.ECallCause.NOT_FOUND)&&(o=`${e.message.to.uri.user}@${e.message.to.uri.host}`),o};var oe=(e=>(e.CONNECT_SERVER_FAILED="CONNECT_SERVER_FAILED",e.WRONG_USER_OR_PASSWORD="WRONG_USER_OR_PASSWORD",e.BAD_MEDIA_ERROR="BAD_MEDIA_ERROR",e.NOT_FOUND_ERROR="NOT_FOUND_ERROR",e.WS_CONNECTION_FAILED="WS_CONNECTION_FAILED",e.CONNECT_SERVER_FAILED_BY_LINK="CONNECT_SERVER_FAILED_BY_LINK",e))(oe||{});const Le=new Error("Unknown error"),He=(e=Le)=>{const{cause:n,socket:t}=e;let o="CONNECT_SERVER_FAILED";switch(n){case"Forbidden":{o="WRONG_USER_OR_PASSWORD";break}case i.ECallCause.BAD_MEDIA_DESCRIPTION:{o="BAD_MEDIA_ERROR";break}case i.ECallCause.NOT_FOUND:{o="NOT_FOUND_ERROR";break}default:t!==void 0&&t._ws?.readyState===3?o="WS_CONNECTION_FAILED":U(e)!==void 0&&U(e)!==""&&(o="CONNECT_SERVER_FAILED_BY_LINK")}return o},$e=e=>{let n="";try{n=JSON.stringify(e)}catch(t){i.logger("failed to stringify message",t)}return n},qe=new Error("Unknown error"),Je=(e=qe)=>{const{code:n,cause:t,message:o}=e,r=U(e),s={code:"",cause:"",message:""};return typeof o=="object"&&o!==null?s.message=$e(o):o&&(s.message=String(o)),r!==void 0&&r!==""&&(s.link=r),n!==void 0&&n!==""&&(s.code=n),t!==void 0&&t!==""&&(s.cause=t),s},Xe=Object.freeze(Object.defineProperty({__proto__:null,EErrorTypes:oe,getLinkError:U,getTypeFromError:He,getValuesFromError:Je},Symbol.toStringTag,{value:"Module"})),je=({sessionId:e,remoteAddress:n,isMutedAudio:t,isMutedVideo:o,isRegistered:r,isPresentationCall:s})=>{const c=[],a=t?"0":"1",l=o?"0":"1";return c.push(`X-Vinteo-Mic-State: ${a}`,`X-Vinteo-MainCam-State: ${l}`),(r===!1||r===void 0)&&c.push("X-Vinteo-Purgatory-Call: yes"),e!==void 0&&e!==""&&c.push(`X-Vinteo-Session: ${e}`),s===!0&&c.push("X-Vinteo-Presentation-Call: yes"),n!==void 0&&n!==""&&c.push(`X-Vinteo-Remote: ${n}`),c},We="[@*!|]",Ge="_",Ke=e=>{let n=e;return n=n.replaceAll(new RegExp(We,"g"),Ge),n},Ye=({appName:e,appVersion:n,browserName:t,browserVersion:o})=>{const s=`${Ke(e)} ${n}`;return`ChromeNew - ${t===void 0?s:`${t} ${o}, ${s}`}`},ze=({isUnifiedSdpSemantic:e,appVersion:n,browserName:t,browserVersion:o,appName:r})=>e?Ye({appVersion:n,browserName:t,browserVersion:o,appName:r}):"Chrome",Qe=e=>n=>[...n].map(o=>async()=>e(o)),Ze=async({accumulatedKeys:e,sendKey:n,canRunTask:t})=>{const r=Qe(n)(e);return ue.sequentPromises(r,t)},en=e=>t=>(i.logger("onStartMainCam"),e.on("api:admin-start-main-cam",t)),nn=e=>t=>(i.logger("onStartMic"),e.on("api:admin-start-mic",t)),tn=e=>t=>(i.logger("onStopMainCam"),e.on("api:admin-stop-main-cam",t)),on=e=>t=>(i.logger("onStopMic"),e.on("api:admin-stop-mic",t)),rn=({sipConnector:e})=>{const n=(C,R)=>({isSyncForced:h})=>{if(h===!0){C();return}R()},t=en(e),o=tn(e),r=nn(e),s=on(e);let c,a,l,d;const f=({onStartMainCamForced:C,onStartMainCamNotForced:R,onStopMainCamForced:h,onStopMainCamNotForced:S,onStartMicForced:p,onStartMicNotForced:y,onStopMicForced:E,onStopMicNotForced:T})=>{const b=n(C,R);c=t(b);const A=n(h,S);a=o(A);const O=n(p,y);l=r(O);const N=n(E,T);d=s(N)},g=()=>{c?.(),a?.(),l?.(),d?.()};return{start:C=>{f(C)},stop:()=>{g()}}},sn=Object.freeze(Object.defineProperty({__proto__:null,PURGATORY_CONFERENCE_NUMBER:te,createSyncMediaState:rn,error:Xe,getExtraHeaders:je,getUserAgent:ze,hasPurgatory:P,sendDtmfAccumulated:Ze},Symbol.toStringTag,{value:"Module"}));var re=(e=>(e.VP8="video/VP8",e.VP9="video/VP9",e.H264="video/H264",e.AV1="video/AV1",e.rtx="video/rtx",e.red="video/red",e.flexfec03="video/flexfec-03",e))(re||{});const cn=e=>[...e.keys()].map(n=>e.get(n)),an=(e,n)=>cn(e).find(t=>t?.type===n),se=async e=>e.getStats().then(n=>an(n,"codec")?.mimeType),ln=e=>e.find(n=>n.track?.kind==="video"),un=async(e,n,t)=>{const{isChanged:o,parameters:r}=await q(e,{encodings:[{scaleResolutionDownBy:n.scaleResolutionDownBy,maxBitrate:n.maxBitrate}]});return o&&t&&t(r),{isChanged:o,parameters:r}},ie=de.createStackPromises(),dn=async()=>ie().catch(e=>{i.logger("videoSendingBalancer: error",e)}),gn=async e=>(ie.add(e),dn()),X=async({sender:e,scaleResolutionDownBy:n,maxBitrate:t,onSetParameters:o})=>gn(async()=>un(e,{scaleResolutionDownBy:n,maxBitrate:t},o)),fn=async({sender:e,codec:n},t)=>{const r=Be(n);return X({sender:e,maxBitrate:r,onSetParameters:t,scaleResolutionDownBy:200})},F=async({sender:e,videoTrack:n,codec:t},o)=>{const c=n.getSettings().width,a=c===void 0?we(t):ee(c,t);return X({sender:e,maxBitrate:a,onSetParameters:o,scaleResolutionDownBy:1})},Cn=async({sender:e,videoTrack:n,resolution:t,codec:o},r)=>{const[s,c]=t.split("x"),{maxBitrate:a,scaleResolutionDownBy:l}=ne({videoTrack:n,codec:o,targetSize:{width:Number(s),height:Number(c)}});return X({sender:e,maxBitrate:a,onSetParameters:r,scaleResolutionDownBy:l})},hn=async({mainCam:e,resolutionMainCam:n,sender:t,videoTrack:o,codec:r},s)=>{switch(e){case i.EEventsMainCAM.PAUSE_MAIN_CAM:return fn({sender:t,codec:r},s);case i.EEventsMainCAM.RESUME_MAIN_CAM:return F({sender:t,videoTrack:o,codec:r},s);case i.EEventsMainCAM.MAX_MAIN_CAM_RESOLUTION:return n!==void 0?Cn({sender:t,videoTrack:o,codec:r,resolution:n},s):F({sender:t,videoTrack:o,codec:r},s);case i.EEventsMainCAM.ADMIN_STOP_MAIN_CAM:case i.EEventsMainCAM.ADMIN_START_MAIN_CAM:case void 0:return F({sender:t,videoTrack:o,codec:r},s);default:return F({sender:t,videoTrack:o,codec:r},s)}},j={isChanged:!1,parameters:{encodings:[{}],transactionId:"0",codecs:[],headerExtensions:[],rtcp:{}}},W=async({mainCam:e,resolutionMainCam:n,connection:t,onSetParameters:o,ignoreForCodec:r})=>{const s=t.getSenders(),c=ln(s);if(!c?.track)return j;const a=await se(c);return Z(a,r)?j:hn({mainCam:e,resolutionMainCam:n,sender:c,codec:a,videoTrack:c.track},o)},Sn=(e,{ignoreForCodec:n,onSetParameters:t}={})=>{const o=async()=>{const{connection:l}=e;if(!l)throw new Error("connection is not exist");return W({connection:l,onSetParameters:t,ignoreForCodec:n})};let r=o;const s=l=>{r=async()=>{const{mainCam:d,resolutionMainCam:f}=l,{connection:g}=e;if(!g)throw new Error("connection is not exist");return W({mainCam:d,resolutionMainCam:f,connection:g,onSetParameters:t,ignoreForCodec:n})},r().catch(_)};return{subscribe:()=>{e.on("api:main-cam-control",s)},unsubscribe:()=>{e.off("api:main-cam-control",s)},balanceByTrack:o,resetMainCamControl(){r=o},async reBalance(){return r()}}};exports.ECallCause=i.ECallCause;exports.EUseLicense=i.EUseLicense;exports.SipConnector=i.SipConnector;exports.disableDebug=i.disableDebug;exports.enableDebug=i.enableDebug;exports.hasCanceledStartPresentationError=i.hasCanceledStartPresentationError;exports.debug=_;exports.EMimeTypesVideoCodecs=re;exports.SipConnectorFacade=Ve;exports.getCodecFromSender=se;exports.hasCanceledCallError=fe;exports.resolveVideoSendingBalancer=Sn;exports.setParametersToSender=q;exports.tools=sn;
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require("events-constructor");const o=require("./@SipConnector-hpySQIBa.cjs"),j=require("@krivega/cancelable-promise"),de=require("repeated-calls"),ue=require("ts-debounce"),le=require("ua-parser-js"),ge=require("sequent-promises"),he=require("stack-promises"),B=require("debug"),Ce=n=>n instanceof Object&&("originator"in n||"cause"in n),Se=n=>{if(j.isCanceledError(n))return!0;if(!Ce(n))return!1;const{originator:e,cause:t}=n;return typeof t=="string"?t===o.ECallCause.REQUEST_TIMEOUT||t===o.ECallCause.REJECTED||e===o.Originator.LOCAL&&(t===o.ECallCause.CANCELED||t===o.ECallCause.BYE):!1},fe=()=>globalThis.process?.versions?.electron!==void 0,G=()=>{const n=new le.UAParser,{name:e}=n.getBrowser(),t=fe();return{isChrome:e==="Chrome"||t}},F=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 K=(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))(K||{});const me=new Error("Unknown error"),pe=(n=me)=>{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":F(n)!==void 0&&F(n)!==""&&(r="CONNECT_SERVER_FAILED_BY_LINK")}return r},Re=n=>{let e="";try{e=JSON.stringify(n)}catch(t){o.logger("failed to stringify message",t)}return e},Ee=new Error("Unknown error"),ye=(n=Ee)=>{const{code:e,cause:t,message:r}=n,s=F(n),i={code:"",cause:"",message:""};return typeof r=="object"&&r!==null?i.message=Re(r):r&&(i.message=String(r)),s!==void 0&&s!==""&&(i.link=s),e!==void 0&&e!==""&&(i.code=e),t!==void 0&&t!==""&&(i.cause=t),i},ve=Object.freeze(Object.defineProperty({__proto__:null,EErrorTypes:K,getLinkError:F,getTypeFromError:pe,getValuesFromError:ye},Symbol.toStringTag,{value:"Module"})),Te=({sessionId:n,remoteAddress:e,isMutedAudio:t,isMutedVideo:r,isRegistered:s,isPresentationCall:i})=>{const c=[],a=t?"0":"1",d=r?"0":"1";return c.push(`X-Vinteo-Mic-State: ${a}`,`X-Vinteo-MainCam-State: ${d}`),(s===!1||s===void 0)&&c.push("X-Vinteo-Purgatory-Call: yes"),n!==void 0&&n!==""&&c.push(`X-Vinteo-Session: ${n}`),i===!0&&c.push("X-Vinteo-Presentation-Call: yes"),e!==void 0&&e!==""&&c.push(`X-Vinteo-Remote: ${e}`),c},Me="[@*!|]",be="_",Be=n=>{let e=n;return e=e.replaceAll(new RegExp(Me,"g"),be),e},Pe=({appName:n,appVersion:e,browserName:t,browserVersion:r})=>{const i=`${Be(n)} ${e}`;return`ChromeNew - ${t===void 0?i:`${t} ${r}, ${i}`}`},Ae=({isUnifiedSdpSemantic:n,appVersion:e,browserName:t,browserVersion:r,appName:s})=>n?Pe({appVersion:e,browserName:t,browserVersion:r,appName:s}):"Chrome",Y="purgatory",I=n=>n===Y,_e=n=>e=>[...e].map(r=>async()=>n(r)),Ne=async({accumulatedKeys:n,sendKey:e,canRunTask:t})=>{const s=_e(e)(n);return ge.sequentPromises(s,t)},Oe=(n,e)=>(n.degradationPreference=e.degradationPreference,n),we=(n,e)=>{n.encodings??=[];for(let t=n.encodings.length;t<e;t+=1)n.encodings.push({});return n},z=n=>(e,t)=>t!==void 0&&e!==t||t===void 0&&e!==n,De=z(),ke=(n,e)=>{if(De(n,e))return n},Fe=(n,e)=>{const t=n.maxBitrate,r=ke(e,t);return r!==void 0&&(n.maxBitrate=r),n},Z=1,Ie=z(Z),xe=(n,e)=>{const t=n===void 0?void 0:Math.max(n,Z);if(t!==void 0&&Ie(t,e))return t},Ue=(n,e)=>{const t=n.scaleResolutionDownBy,r=xe(e,t);return r!==void 0&&(n.scaleResolutionDownBy=r),n},Ve=(n,e)=>{const t=e.encodings?.length??0;return we(n,t),n.encodings.forEach((r,s)=>{const i=(e?.encodings??[])[s],c=i?.maxBitrate,a=i?.scaleResolutionDownBy;Fe(r,c),Ue(r,a)}),n},Le=(n,e)=>{if(n.codecs?.length!==e.codecs?.length)return!0;for(let t=0;t<(n.codecs?.length??0);t++)if(JSON.stringify(n.codecs[t])!==JSON.stringify(e.codecs[t]))return!0;if(n.headerExtensions?.length!==e.headerExtensions?.length)return!0;for(let t=0;t<(n.headerExtensions?.length??0);t++)if(JSON.stringify(n.headerExtensions[t])!==JSON.stringify(e.headerExtensions[t]))return!0;if(n.encodings?.length!==e.encodings?.length)return!0;for(let t=0;t<(n.encodings?.length??0);t++)if(JSON.stringify(n.encodings[t])!==JSON.stringify(e.encodings[t]))return!0;return n.rtcp?.cname!==e.rtcp?.cname||n.rtcp?.reducedSize!==e.rtcp?.reducedSize||n.degradationPreference!==e.degradationPreference},$=async(n,e)=>{const t=n.getParameters(),r=JSON.parse(JSON.stringify(t));Ve(t,e),Oe(t,e);const s=Le(r,t);return s&&await n.setParameters(t),{parameters:t,isChanged:s}},ee=async(n,e,t)=>{const{isChanged:r,parameters:s}=await $(n,{encodings:[{scaleResolutionDownBy:e.scaleResolutionDownBy,maxBitrate:e.maxBitrate}]});return r&&t&&t(s),{isChanged:r,parameters:s}},He=n=>t=>(o.logger("onStartMainCam"),n.on("api:admin-start-main-cam",t)),qe=n=>t=>(o.logger("onStartMic"),n.on("api:admin-start-mic",t)),$e=n=>t=>(o.logger("onStopMainCam"),n.on("api:admin-stop-main-cam",t)),We=n=>t=>(o.logger("onStopMic"),n.on("api:admin-stop-mic",t)),Qe=({sipConnector:n})=>{const e=(C,f)=>({isSyncForced:m})=>{if(m===!0){C();return}f()},t=He(n),r=$e(n),s=qe(n),i=We(n);let c,a,d,l;const h=({onStartMainCamForced:C,onStartMainCamNotForced:f,onStopMainCamForced:m,onStopMainCamNotForced:p,onStartMicForced:R,onStartMicNotForced:v,onStopMicForced:T,onStopMicNotForced:M})=>{const b=e(C,f);c=t(b);const P=e(m,p);a=r(P);const A=e(R,v);d=s(A);const _=e(T,M);l=i(_)},g=()=>{c?.(),a?.(),d?.(),l?.()};return{start:C=>{h(C)},stop:()=>{g()}}},Je=Object.freeze(Object.defineProperty({__proto__:null,PURGATORY_CONFERENCE_NUMBER:Y,createSyncMediaState:Qe,createUaParser:G,error:ve,getExtraHeaders:Te,getUserAgent:Ae,hasPurgatory:I,prepareMediaStream:o.prepareMediaStream,sendDtmfAccumulated:Ne,setEncodingsToSender:ee,setParametersToSender:$},Symbol.toStringTag,{value:"Module"})),Xe=()=>G().isChrome,je=n=>n.getVideoTracks()[0],Ge=1e6,S=n=>n*Ge,ne=S(.06),te=S(4),Ke=n=>n<=64?ne:n<=128?S(.12):n<=256?S(.25):n<=384?S(.32):n<=426?S(.38):n<=640?S(.5):n<=848?S(.7):n<=1280?S(1):n<=1920?S(2):te,re=(n,e)=>n!==void 0&&e!==void 0&&n.toLowerCase().includes(e.toLowerCase()),Ye="av1",ze=n=>re(n,Ye),Ze=.6,W=(n,e)=>ze(e)?n*Ze:n,en=n=>W(ne,n),nn=n=>W(te,n),q=(n,e)=>{const t=Ke(n);return W(t,e)},L=1,se=({videoTrack:n,targetSize:e})=>{const t=n.getSettings(),r=t.width,s=t.height,i=r===void 0?L:r/e.width,c=s===void 0?L:s/e.height;return Math.max(i,c,L)},tn=n=>[...n.keys()].map(e=>n.get(e)),rn=(n,e)=>tn(n).find(t=>t?.type===e),oe=async n=>n.getStats().then(e=>rn(e,"codec")?.mimeType);class sn{async getCodecFromSender(e){return await oe(e)??""}}class on{stackPromises=he.createStackPromises({noRunIsNotActual:!0});async add(e){return this.stackPromises.add(e),this.run()}stop(){this.stackPromises.stop()}async run(){return this.stackPromises().catch(e=>{o.logger("TaskQueue: error",e)})}}class cn{taskQueue;onSetParameters;constructor(e){this.onSetParameters=e,this.taskQueue=new on}async setEncodingsToSender(e,t){return this.taskQueue.add(async()=>ee(e,t,this.onSetParameters))}stop(){this.taskQueue.stop()}}class an{ignoreForCodec;senderFinder;codecProvider;parametersSetter;resultNoChanged={isChanged:!1,parameters:{encodings:[{}],transactionId:"0",codecs:[],headerExtensions:[],rtcp:{}}};constructor({senderFinder:e,codecProvider:t,parametersSetter:r},s){this.senderFinder=e,this.codecProvider=t,this.parametersSetter=r,this.ignoreForCodec=s.ignoreForCodec}async balance(e,t){const r=e.getSenders(),s=this.senderFinder.findVideoSender(r);if(!s?.track)return this.resultNoChanged;const i=await this.codecProvider.getCodecFromSender(s);if(re(i,this.ignoreForCodec))return this.resultNoChanged;const{mainCam:c,resolutionMainCam:a}=t??{};return this.processSender({mainCam:c,resolutionMainCam:a},{sender:s,codec:i,videoTrack:s.track})}async processSender(e,t){const{mainCam:r,resolutionMainCam:s}=e;switch(r){case o.EEventsMainCAM.PAUSE_MAIN_CAM:return this.downgradeResolutionSender(t);case o.EEventsMainCAM.RESUME_MAIN_CAM:return this.setBitrateByTrackResolution(t);case o.EEventsMainCAM.MAX_MAIN_CAM_RESOLUTION:return s!==void 0?this.setResolutionSender(s,t):this.setBitrateByTrackResolution(t);case o.EEventsMainCAM.ADMIN_STOP_MAIN_CAM:case o.EEventsMainCAM.ADMIN_START_MAIN_CAM:case void 0:return this.setBitrateByTrackResolution(t);default:return this.setBitrateByTrackResolution(t)}}async downgradeResolutionSender(e){const{sender:t,codec:r}=e,s={scaleResolutionDownBy:200,maxBitrate:en(r)};return this.parametersSetter.setEncodingsToSender(t,s)}async setBitrateByTrackResolution(e){const{sender:t,videoTrack:r,codec:s}=e,c=r.getSettings().width,a=c===void 0?nn(s):q(c,s);return this.parametersSetter.setEncodingsToSender(t,{scaleResolutionDownBy:1,maxBitrate:a})}async setResolutionSender(e,t){const[r,s]=e.split("x"),{sender:i,videoTrack:c,codec:a}=t,d={width:Number(r),height:Number(s)},l=se({videoTrack:c,targetSize:d}),h=q(d.width,a),g={scaleResolutionDownBy:l,maxBitrate:h};return this.parametersSetter.setEncodingsToSender(i,g)}}const dn=n=>n.find(e=>e.track?.kind==="video");class un{findVideoSender(e){return dn(e)}}class ln{sipConnector;currentHandler;constructor(e){this.sipConnector=e}subscribe(e){this.currentHandler=e,this.sipConnector.on("api:main-cam-control",e)}unsubscribe(){this.currentHandler&&(this.sipConnector.off("api:main-cam-control",this.currentHandler),this.currentHandler=void 0)}getConnection(){return this.sipConnector.connection}}class ie{eventHandler;senderBalancer;parametersSetterWithQueue;serverHeaders;constructor(e,{ignoreForCodec:t,onSetParameters:r}={}){this.eventHandler=new ln(e),this.parametersSetterWithQueue=new cn(r),this.senderBalancer=new an({senderFinder:new un,codecProvider:new sn,parametersSetter:this.parametersSetterWithQueue},{ignoreForCodec:t})}subscribe(){this.eventHandler.subscribe(this.handleMainCamControl)}unsubscribe(){this.eventHandler.unsubscribe(),this.parametersSetterWithQueue.stop(),this.reset()}reset(){delete this.serverHeaders}async reBalance(){return this.balanceByTrack()}async balanceByTrack(){const e=this.eventHandler.getConnection();if(!e)throw new Error("connection is not exist");return this.senderBalancer.balance(e,this.serverHeaders)}handleMainCamControl=e=>{this.serverHeaders=e,this.balanceByTrack().catch(B)}}const gn=(n,e={})=>new ie(n,e),hn=({videoTrack:n,targetSize:e,codec:t})=>{const r=se({videoTrack:n,targetSize:e}),s=q(e.width,t);return{scaleResolutionDownBy:r,maxBitrate:s}},O=({mediaStream:n,simulcastEncodings:e,sendEncodings:t})=>{if(e&&e.length>0){const r=t??[],s=je(n);if(s===void 0)throw new Error("No video track");return e.forEach((i,c)=>{const a=r[c]??{};a.active=!0,i.rid!==void 0&&(a.rid=i.rid),i.scalabilityMode!==void 0&&(a.scalabilityMode=i.scalabilityMode);const{maxBitrate:d,scaleResolutionDownBy:l}=hn({videoTrack:s,targetSize:{width:i.width,height:i.height}});a.maxBitrate=d,a.scaleResolutionDownBy=l,r[c]=a}),r}return t},Cn=(n,e)=>n.filter(r=>e.some(s=>s.clockRate===r.clockRate&&s.mimeType===r.mimeType&&s.channels===r.channels&&s.sdpFmtpLine===r.sdpFmtpLine)),Sn=n=>{const e=RTCRtpSender.getCapabilities(n),t=RTCRtpReceiver.getCapabilities(n),r=e===null?[]:e.codecs,s=t===null?[]:t.codecs;return Cn(r,s)},fn=(n,e)=>e===void 0||e.length===0?n:n.sort((t,r)=>{const s=e.indexOf(t.mimeType),i=e.indexOf(r.mimeType),c=s===-1?Number.MAX_VALUE:s,a=i===-1?Number.MAX_VALUE:i;return c-a}),mn=(n,e)=>e===void 0||e.length===0?n:n.filter(t=>!e.includes(t.mimeType)),pn=(n,{preferredMimeTypesVideoCodecs:e,excludeMimeTypesVideoCodecs:t})=>{if(typeof n.setCodecPreferences=="function"&&n.sender.track?.kind==="video"&&(e!==void 0&&e.length>0||t!==void 0&&t.length>0)){const r=Sn("video"),s=mn(r,t),i=fn(s,e);n.setCodecPreferences(i)}},w=(n,{preferredMimeTypesVideoCodecs:e,excludeMimeTypesVideoCodecs:t})=>async r=>{try{pn(r,{preferredMimeTypesVideoCodecs:e,excludeMimeTypesVideoCodecs:t}),Object.values(n).filter(i=>i!=null).length>0&&(o.logger("updateTransceiver setParametersToSender",n),await $(r.sender,n))}catch(s){o.logger("updateTransceiver error",s)}},H=n=>{if(!j.isCanceledError(n)&&!de.hasCanceledError(n))throw n;return{isSuccessful:!1}},Rn=({kind:n,readyState:e})=>n==="video"&&e==="live",Q=(n,e,{onEnterPurgatory:t,onEnterConference:r})=>{I(n)?t&&t():r&&r({isSuccessProgressCall:e})},J=(n,e)=>{n(),e&&e()},X=(n,e,t)=>{throw n&&n(),e(),t},En=new Set(["on","once","onceRace","wait","off","sendDTMF","hangUp","declineToIncomingCall","sendChannels","checkTelephony","waitChannels","ping","connection","isConfigured","isRegistered"]);class yn{on;once;onceRace;wait;off;sendDTMF;hangUp;declineToIncomingCall;sendChannels;checkTelephony;waitChannels;ping;connection;isConfigured;isRegistered;sipConnector;preferredMimeTypesVideoCodecs;excludeMimeTypesVideoCodecs;constructor(e,{preferredMimeTypesVideoCodecs:t,excludeMimeTypesVideoCodecs:r}={}){return this.preferredMimeTypesVideoCodecs=t,this.excludeMimeTypesVideoCodecs=r,this.sipConnector=e,new Proxy(this,{get:(s,i,c)=>{if(typeof i=="string"&&En.has(i)&&i in this.sipConnector){const d=Reflect.get(this.sipConnector,i,this.sipConnector);return typeof d=="function"?d.bind(this.sipConnector):d}const a=Reflect.get(s,i,c);return typeof a=="function"?a.bind(s):a}})}connectToServer=async e=>{const{userAgent:t,sipWebSocketServerURL:r,sipServerUrl:s,remoteAddress:i,displayName:c,name:a,password:d,isRegisteredUser:l,isDisconnectOnFail:h}=e;return o.logger("connectToServer",e),this.sipConnector.connect({userAgent:t,sipWebSocketServerURL:r,sipServerUrl:s,remoteAddress:i,displayName:c,password:d,user:a,register:l}).then(g=>(o.logger("connectToServer then"),{ua:g,isSuccessful:!0})).catch(async g=>(o.logger("connectToServer catch: error",g),h===!0?this.sipConnector.disconnect().then(()=>H(g)).catch(()=>H(g)):H(g)))};callToServer=async e=>{const{conference:t,mediaStream:r,extraHeaders:s,iceServers:i,contentHint:c,simulcastEncodings:a,degradationPreference:d,sendEncodings:l,offerToReceiveAudio:h,offerToReceiveVideo:g,directionVideo:D,directionAudio:k,setRemoteStreams:C,onBeforeProgressCall:f,onSuccessProgressCall:m,onEnterPurgatory:p,onEnterConference:R,onFailProgressCall:v,onFinishProgressCall:T,onEndedCall:M}=e,b=this.resolveHandleReadyRemoteStreamsDebounced({onReadyRemoteStreams:C}),P=this.resolveHandleReadyRemoteStreams({onReadyRemoteStreams:()=>{b().catch(B)}}),A=w({degradationPreference:d},{preferredMimeTypesVideoCodecs:this.preferredMimeTypesVideoCodecs,excludeMimeTypesVideoCodecs:this.excludeMimeTypesVideoCodecs});o.logger("callToServer",e);const _=async()=>(o.logger("startCall"),this.sipConnector.call({mediaStream:r,extraHeaders:s,iceServers:i,contentHint:c,offerToReceiveAudio:h,offerToReceiveVideo:g,directionVideo:D,directionAudio:k,sendEncodings:O({mediaStream:r,simulcastEncodings:a,sendEncodings:l}),number:t,onAddedTransceiver:A,ontrack:P}));let E=!1,y;const N=(o.logger("subscribeEnterConference: onEnterConference",R),this.sipConnector.on("api:enterRoom",({room:u})=>{o.logger("enterRoom",{_room:u,isSuccessProgressCall:E}),y=u,(p??R)&&Q(y,E,{onEnterPurgatory:p,onEnterConference:R})})),x=u=>(o.logger("onSuccess"),E=!0,b().catch(B),m&&m({isPurgatory:I(y)}),this.sipConnector.onceRace(["call:ended","call:failed"],()=>{J(N,M)}),u),U=u=>(o.logger("onFail"),X(v,N,u)),V=()=>{o.logger("onFinish"),T&&T()};return o.logger("onBeforeProgressCall"),f&&f(t),_().then(x).catch(u=>U(u)).finally(V)};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:s,contentHint:i,simulcastEncodings:c,degradationPreference:a,sendEncodings:d,offerToReceiveAudio:l,offerToReceiveVideo:h,directionVideo:g,directionAudio:D,setRemoteStreams:k,onBeforeProgressCall:C,onSuccessProgressCall:f,onEnterPurgatory:m,onEnterConference:p,onFailProgressCall:R,onFinishProgressCall:v,onEndedCall:T}=e,M=this.resolveHandleReadyRemoteStreamsDebounced({onReadyRemoteStreams:k}),b=this.resolveHandleReadyRemoteStreams({onReadyRemoteStreams:()=>{M().catch(B)}}),P=w({degradationPreference:a},{preferredMimeTypesVideoCodecs:this.preferredMimeTypesVideoCodecs,excludeMimeTypesVideoCodecs:this.excludeMimeTypesVideoCodecs});o.logger("answerToIncomingCall",e);const A=async()=>this.sipConnector.answerToIncomingCall({mediaStream:t,extraHeaders:r,iceServers:s,contentHint:i,offerToReceiveAudio:l,offerToReceiveVideo:h,directionVideo:g,directionAudio:D,sendEncodings:O({mediaStream:t,simulcastEncodings:c,sendEncodings:d}),onAddedTransceiver:P,ontrack:b}),_=()=>{const{remoteCallerData:u}=this.sipConnector;return u.incomingNumber};let E=!1,y;const N=(o.logger("subscribeEnterConference: onEnterConference",p),this.sipConnector.on("api:enterRoom",u=>{o.logger("enterRoom",{_room:u,isSuccessProgressCall:E}),y=u,(m??p)&&Q(y,E,{onEnterPurgatory:m,onEnterConference:p})})),x=u=>(o.logger("onSuccess"),E=!0,M().catch(B),f&&f({isPurgatory:I(y)}),this.sipConnector.onceRace(["call:ended","call:failed"],()=>{J(N,T)}),u),U=u=>(o.logger("onFail"),X(R,N,u)),V=()=>{o.logger("onFinish"),v&&v()};if(o.logger("onBeforeProgressCall"),C){const u=_();C(u)}return A().then(x).catch(u=>U(u)).finally(V)};updatePresentation=async({mediaStream:e,isP2P:t,maxBitrate:r,contentHint:s,simulcastEncodings:i,degradationPreference:c,sendEncodings:a,preferredMimeTypesVideoCodecs:d,excludeMimeTypesVideoCodecs:l})=>{const h=w({degradationPreference:c},{preferredMimeTypesVideoCodecs:d,excludeMimeTypesVideoCodecs:l});return o.logger("updatePresentation"),this.sipConnector.updatePresentation(e,{isP2P:t,maxBitrate:r,contentHint:s,sendEncodings:O({mediaStream:e,simulcastEncodings:i,sendEncodings:a}),onAddedTransceiver:h})};startPresentation=async({mediaStream:e,isP2P:t,maxBitrate:r,contentHint:s,simulcastEncodings:i,degradationPreference:c,sendEncodings:a,preferredMimeTypesVideoCodecs:d,excludeMimeTypesVideoCodecs:l,callLimit:h})=>{const g=w({degradationPreference:c},{preferredMimeTypesVideoCodecs:d,excludeMimeTypesVideoCodecs:l});return o.logger("startPresentation"),this.sipConnector.startPresentation(e,{isP2P:t,maxBitrate:r,contentHint:s,callLimit:h,sendEncodings:O({mediaStream:e,simulcastEncodings:i,sendEncodings:a}),onAddedTransceiver:g})};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:s,contentHint:i,simulcastEncodings:c,degradationPreference:a,sendEncodings:d})=>{const l=w({degradationPreference:a},{preferredMimeTypesVideoCodecs:this.preferredMimeTypesVideoCodecs,excludeMimeTypesVideoCodecs:this.excludeMimeTypesVideoCodecs});return o.logger("replaceMediaStream"),this.sipConnector.replaceMediaStream(e,{deleteExisting:t,addMissing:r,forceRenegotiation:s,contentHint:i,sendEncodings:O({mediaStream:e,simulcastEncodings:c,sendEncodings:d}),onAddedTransceiver:l})};askPermissionToEnableCam=async()=>{o.logger("askPermissionToEnableCam"),await this.sipConnector.askPermissionToEnableCam()};resolveHandleReadyRemoteStreamsDebounced=({onReadyRemoteStreams:e})=>ue.debounce(()=>{const t=this.sipConnector.getRemoteStreams();o.logger("remoteStreams",t),t&&e(t)},200);resolveHandleReadyRemoteStreams=({onReadyRemoteStreams:e})=>({track:t})=>{Rn(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 ce=(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))(ce||{});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.hasCanceledStartPresentationError=o.hasCanceledStartPresentationError;exports.debug=B;exports.EMimeTypesVideoCodecs=ce;exports.SipConnectorFacade=yn;exports.VideoSendingBalancer=ie;exports.getCodecFromSender=oe;exports.hasAvailableStats=Xe;exports.hasCanceledCallError=Se;exports.resolveVideoSendingBalancer=gn;exports.tools=Je;
|
package/dist/index.d.ts
CHANGED
|
@@ -4,11 +4,11 @@ export type { TCustomError } from './CallManager';
|
|
|
4
4
|
export { debug, disableDebug, enableDebug } from './logger';
|
|
5
5
|
export { hasCanceledStartPresentationError } from './PresentationManager';
|
|
6
6
|
export type { TContentHint } from './PresentationManager';
|
|
7
|
-
export { default as setParametersToSender } from './setParametersToSender';
|
|
8
7
|
export { SipConnector } from './SipConnector';
|
|
9
8
|
export { SipConnectorFacade } from './SipConnectorFacade';
|
|
9
|
+
export { EStatsTypes, hasAvailableStats, StatsPeerConnection } from './StatsPeerConnection';
|
|
10
10
|
export * as tools from './tools';
|
|
11
11
|
export { EMimeTypesVideoCodecs } from './types';
|
|
12
12
|
export type { TJsSIP } from './types';
|
|
13
13
|
export { default as getCodecFromSender } from './utils/getCodecFromSender';
|
|
14
|
-
export {
|
|
14
|
+
export { resolveVideoSendingBalancer, VideoSendingBalancer } from './VideoSendingBalancer';
|