sip-connector 13.0.0 → 13.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.
@@ -1,10 +1,48 @@
1
1
  import { UA } from '@krivega/jssip';
2
2
  import { default as SipConnector } from '../SipConnector';
3
3
  import { EUseLicense, TContentHint, TSimulcastEncoding } from '../types';
4
- declare class SipConnectorFacade {
5
- private readonly sipConnector;
4
+ interface IProxyMethods {
5
+ on: SipConnector['on'];
6
+ once: SipConnector['once'];
7
+ onceRace: SipConnector['onceRace'];
8
+ wait: SipConnector['wait'];
9
+ off: SipConnector['off'];
10
+ onSession: SipConnector['onSession'];
11
+ onceSession: SipConnector['onceSession'];
12
+ onceRaceSession: SipConnector['onceRaceSession'];
13
+ waitSession: SipConnector['waitSession'];
14
+ offSession: SipConnector['offSession'];
15
+ sendDTMF: SipConnector['sendDTMF'];
16
+ hangUp: SipConnector['hangUp'];
17
+ declineToIncomingCall: SipConnector['declineToIncomingCall'];
18
+ isConfigured: SipConnector['isConfigured'];
19
+ sendChannels: SipConnector['sendChannels'];
20
+ checkTelephony: SipConnector['checkTelephony'];
21
+ waitChannels: SipConnector['waitChannels'];
22
+ connection: SipConnector['connection'];
23
+ }
24
+ declare class SipConnectorFacade implements IProxyMethods {
25
+ readonly sipConnector: SipConnector;
6
26
  private readonly preferredMimeTypesVideoCodecs?;
7
27
  private readonly excludeMimeTypesVideoCodecs?;
28
+ on: IProxyMethods['on'];
29
+ once: IProxyMethods['once'];
30
+ onceRace: IProxyMethods['onceRace'];
31
+ wait: IProxyMethods['wait'];
32
+ off: IProxyMethods['off'];
33
+ onSession: IProxyMethods['onSession'];
34
+ onceSession: IProxyMethods['onceSession'];
35
+ onceRaceSession: IProxyMethods['onceRaceSession'];
36
+ waitSession: IProxyMethods['waitSession'];
37
+ offSession: IProxyMethods['offSession'];
38
+ sendDTMF: IProxyMethods['sendDTMF'];
39
+ hangUp: IProxyMethods['hangUp'];
40
+ declineToIncomingCall: IProxyMethods['declineToIncomingCall'];
41
+ isConfigured: IProxyMethods['isConfigured'];
42
+ sendChannels: IProxyMethods['sendChannels'];
43
+ checkTelephony: IProxyMethods['checkTelephony'];
44
+ waitChannels: IProxyMethods['waitChannels'];
45
+ connection: IProxyMethods['connection'];
8
46
  constructor(sipConnector: SipConnector, { preferredMimeTypesVideoCodecs, excludeMimeTypesVideoCodecs, }?: {
9
47
  preferredMimeTypesVideoCodecs?: string[];
10
48
  excludeMimeTypesVideoCodecs?: string[];
package/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";var ne=Object.defineProperty;var te=(n,e,t)=>e in n?ne(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t;var l=(n,e,t)=>te(n,typeof e!="symbol"?e+"":e,t);Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const s=require("./SipConnector-CE4F15z6.cjs"),re=require("sequent-promises"),se=require("stack-promises"),oe=require("@krivega/cancelable-promise"),ce=require("repeated-calls"),ie=require("ts-debounce"),ae=require("debug"),$=n=>{const{url:e,cause:t}=n;let r=e;return(t===s.BAD_MEDIA_DESCRIPTION||t===s.NOT_FOUND)&&(r=`${n.message.to.uri.user}@${n.message.to.uri.host}`),r};var j=(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))(j||{});const ue=(n=new Error)=>{var o;const{cause:e,socket:t}=n;let r="CONNECT_SERVER_FAILED";switch(e){case"Forbidden":{r="WRONG_USER_OR_PASSWORD";break}case s.BAD_MEDIA_DESCRIPTION:{r="BAD_MEDIA_ERROR";break}case s.NOT_FOUND:{r="NOT_FOUND_ERROR";break}default:t&&((o=t==null?void 0:t._ws)==null?void 0:o.readyState)===3?r="WS_CONNECTION_FAILED":$(n)&&(r="CONNECT_SERVER_FAILED_BY_LINK")}return r},le=n=>{let e="";try{e=JSON.stringify(n)}catch(t){s.logger("failed to stringify message",t)}return e},de=(n=new Error)=>{const{code:e,cause:t,message:r}=n,o=$(n),c={code:"",cause:"",message:""};return typeof r=="object"&&r!==null?c.message=le(r):r&&(c.message=String(r)),o&&(c.link=o),e&&(c.code=e),t&&(c.cause=t),c},ge=Object.freeze(Object.defineProperty({__proto__:null,EErrorTypes:j,getLinkError:$,getTypeFromError:ue,getValuesFromError:de},Symbol.toStringTag,{value:"Module"})),Se=({sessionId:n,remoteAddress:e,isMutedAudio:t,isMutedVideo:r,isRegistered:o,isPresentationCall:c})=>{const i=[],a=t?"0":"1",u=r?"0":"1";return i.push(`X-Vinteo-Mic-State: ${a}`,`X-Vinteo-MainCam-State: ${u}`),o||i.push("X-Vinteo-Purgatory-Call: yes"),n&&i.push(`X-Vinteo-Session: ${n}`),c&&i.push("X-Vinteo-Presentation-Call: yes"),e&&i.push(`X-Vinteo-Remote: ${e}`),i},Ce="[@*!|]",me="_",fe=n=>{let e=n;return e=e.replaceAll(new RegExp(Ce,"g"),me),e},Re=({appName:n,appVersion:e,browserName:t,browserVersion:r})=>{const c=`${fe(n)} ${e}`;return`ChromeNew - ${t?`${t} ${r}, ${c}`:c}`},he=({isUnifiedSdpSemantic:n,appVersion:e,browserName:t,browserVersion:r,appName:o})=>n?Re({appVersion:e,browserName:t,browserVersion:r,appName:o}):"Chrome",W="purgatory",I=n=>n===W,Ee=n=>e=>[...e].map(r=>async()=>n(r)),pe=async({accumulatedKeys:n,sendKey:e,canRunTask:t})=>{const o=Ee(e)(n);return re.sequentPromises(o,t)},ye=n=>t=>(s.logger("onStartMainCam"),n.onSession("admin-start-main-cam",t)),Te=n=>t=>(s.logger("onStartMic"),n.onSession("admin-start-mic",t)),Me=n=>t=>(s.logger("onStopMainCam"),n.onSession("admin-stop-main-cam",t)),be=n=>t=>(s.logger("onStopMic"),n.onSession("admin-stop-mic",t)),Ae=({sipConnector:n})=>{const e=(m,E)=>({isSyncForced:f=!1})=>{if(f){m();return}E()},t=ye(n),r=Me(n),o=Te(n),c=be(n);let i=()=>{},a=()=>{},u=()=>{},g=()=>{};const C=({onStartMainCamForced:m,onStartMainCamNotForced:E,onStopMainCamForced:f,onStopMainCamNotForced:R,onStartMicForced:p,onStartMicNotForced:y,onStopMicForced:T,onStopMicNotForced:M})=>{const _=e(m,E);i=t(_);const v=e(f,R);a=r(v);const O=e(p,y);u=o(O);const N=e(T,M);g=c(N)},S=()=>{i(),a(),u(),g()};return{start:m=>{C(m)},stop:()=>{S()}}},_e=Object.freeze(Object.defineProperty({__proto__:null,PURGATORY_CONFERENCE_NUMBER:W,createSyncMediaState:Ae,error:ge,getExtraHeaders:Se,getUserAgent:he,hasPurgatory:I,sendDTMFAccumulated:pe},Symbol.toStringTag,{value:"Module"})),ve=n=>[...n.keys()].map(e=>n.get(e)),Oe=(n,e)=>ve(n).find(t=>t.type===e),G=async n=>n.getStats().then(e=>{const t=Oe(e,"codec");return t==null?void 0:t.mimeType}),Ne=n=>n.find(e=>{var t;return((t=e==null?void 0:e.track)==null?void 0:t.kind)==="video"}),K=(n,e)=>n!==void 0&&e!==void 0&&n.toLowerCase().includes(e.toLowerCase()),Pe=1e6,h=n=>n*Pe,Y=h(.06),Be=h(4),De=n=>n<=64?Y:n<=128?h(.12):n<=256?h(.25):n<=384?h(.32):n<=426?h(.38):n<=640?h(.5):n<=848?h(.7):n<=1280?h(1):n<=1920?h(2):Be,Ie="av1",we=n=>K(n,Ie),Fe=.6,z=(n,e)=>we(e)?n*Fe:n,ke=n=>z(Y,n),Q=(n,e)=>{const t=De(n);return z(t,e)},Ue=1,J=({videoTrack:n,targetSize:e,codec:t})=>{const r=n.getSettings(),o=r.width,c=r.height,i=o/e.width,a=c/e.height,u=Math.max(i,a,Ue),g=Q(e.width,t);return{scaleResolutionDownBy:u,maxBitrate:g}},Z=se.createStackPromises(),Ve=async()=>Z().catch(n=>{s.logger("videoSendingBalancer: error",n)}),Le=async n=>(Z.add(n),Ve()),q=async({sender:n,scaleResolutionDownBy:e,maxBitrate:t,onSetParameters:r})=>Le(async()=>s.setEncodingsToSender(n,{scaleResolutionDownBy:e,maxBitrate:t},r)),xe=async({sender:n,codec:e},t)=>{const o=ke(e);return q({sender:n,maxBitrate:o,onSetParameters:t,scaleResolutionDownBy:200})},L=async({sender:n,videoTrack:e,codec:t},r)=>{const i=e.getSettings().width,a=Q(i,t);return q({sender:n,maxBitrate:a,onSetParameters:r,scaleResolutionDownBy:1})},$e=async({sender:n,videoTrack:e,resolution:t,codec:r},o)=>{const[c,i]=t.split("x"),{maxBitrate:a,scaleResolutionDownBy:u}=J({videoTrack:e,codec:r,targetSize:{width:Number(c),height:Number(i)}});return q({sender:n,maxBitrate:a,onSetParameters:o,scaleResolutionDownBy:u})},qe=async({mainCam:n,resolutionMainCam:e,sender:t,videoTrack:r,codec:o},c)=>{switch(n){case s.EEventsMainCAM.PAUSE_MAIN_CAM:return xe({sender:t,codec:o},c);case s.EEventsMainCAM.RESUME_MAIN_CAM:return L({sender:t,videoTrack:r,codec:o},c);case s.EEventsMainCAM.MAX_MAIN_CAM_RESOLUTION:return e!==void 0?$e({sender:t,videoTrack:r,codec:o,resolution:e},c):L({sender:t,videoTrack:r,codec:o},c);default:return L({sender:t,videoTrack:r,codec:o},c)}},H={isChanged:!1,parameters:{encodings:[{}],transactionId:"0",codecs:[],headerExtensions:[],rtcp:{}}},X=async({mainCam:n,resolutionMainCam:e,connection:t,onSetParameters:r,ignoreForCodec:o})=>{const c=t.getSenders(),i=Ne(c);if(!(i!=null&&i.track))return H;const a=await G(i);return K(a,o)?H:qe({mainCam:n,resolutionMainCam:e,sender:i,codec:a,videoTrack:i.track},r)},He=(n,{ignoreForCodec:e,onSetParameters:t}={})=>{const r=async()=>{const{connection:u}=n;if(!u)throw new Error("connection is not exist");return X({connection:u,onSetParameters:t,ignoreForCodec:e})};let o=r;const c=async u=>(o=async()=>{const{mainCam:g,resolutionMainCam:C}=u,{connection:S}=n;if(!S)throw new Error("connection is not exist");return X({mainCam:g,resolutionMainCam:C,connection:S,onSetParameters:t,ignoreForCodec:e})},o());return{subscribe:()=>{n.onSession("main-cam-control",c)},unsubscribe:()=>{n.offSession("main-cam-control",c)},balanceByTrack:r,resetMainCamControl(){o=r},async reBalance(){return o()}}},Xe=n=>n.getVideoTracks()[0],B=({mediaStream:n,simulcastEncodings:e,sendEncodings:t})=>{if(e&&e.length>0){const r=t??[],o=Xe(n);return e.forEach((c,i)=>{const a=r[i]??{};a.active=!0,c.rid!==void 0&&(a.rid=c.rid),c.scalabilityMode!==void 0&&(a.scalabilityMode=c.scalabilityMode);const{maxBitrate:u,scaleResolutionDownBy:g}=J({videoTrack:o,targetSize:{width:c.width,height:c.height}});a.maxBitrate=u,a.scaleResolutionDownBy=g,r[i]=a}),r}return t},je=(n,e)=>[...n,...e].filter((o,c,i)=>c===i.findIndex(a=>a.clockRate===o.clockRate&&a.mimeType===o.mimeType&&a.channels===o.channels&&a.sdpFmtpLine===o.sdpFmtpLine)),We=n=>{const e=RTCRtpSender.getCapabilities(n),t=RTCRtpReceiver.getCapabilities(n),r=e===null?[]:e.codecs,o=t===null?[]:t.codecs;return je(r,o)},Ge=(n,e)=>e===void 0||e.length===0?n:n.sort((t,r)=>{const o=e.indexOf(t.mimeType),c=e.indexOf(r.mimeType),i=o===-1?Number.MAX_VALUE:o,a=c===-1?Number.MAX_VALUE:c;return i-a}),Ke=(n,e)=>e===void 0||e.length===0?n:n.filter(t=>!e.includes(t.mimeType)),D=(n,{preferredMimeTypesVideoCodecs:e,excludeMimeTypesVideoCodecs:t})=>async r=>{var o;if(typeof r.setCodecPreferences=="function"&&((o=r.sender.track)==null?void 0:o.kind)==="video"&&(e!==void 0&&(e==null?void 0:e.length)>0||t!==void 0&&(t==null?void 0:t.length)>0)){const c=We("video"),i=Ke(c,t),a=Ge(i,e);r.setCodecPreferences(a)}Object.keys(n).length>0&&await s.setParametersToSender(r.sender,n)},x=n=>{if(!oe.isCanceledError(n)&&!ce.hasCanceledError(n))throw n;return{isSuccessful:!1}},Ye=({kind:n,readyState:e})=>n==="video"&&e==="live";class ze{constructor(e,{preferredMimeTypesVideoCodecs:t,excludeMimeTypesVideoCodecs:r}={}){l(this,"sipConnector");l(this,"preferredMimeTypesVideoCodecs");l(this,"excludeMimeTypesVideoCodecs");l(this,"connectToServer",async e=>{const{userAgent:t,sipWebSocketServerURL:r,sipServerUrl:o,remoteAddress:c,displayName:i,name:a,password:u,isRegisteredUser:g,isDisconnectOnFail:C}=e;return s.logger("connectToServer",e),this.sipConnector.connect({userAgent:t,sipWebSocketServerURL:r,sipServerUrl:o,remoteAddress:c,displayName:i,password:u,user:a,register:g}).then(S=>(s.logger("connectToServer then"),{ua:S,isSuccessful:!0})).catch(async S=>(s.logger("connectToServer catch: error",S),C===!0?this.sipConnector.disconnect().then(()=>x(S)).catch(()=>x(S)):x(S)))});l(this,"callToServer",async e=>{const{conference:t,mediaStream:r,extraHeaders:o,iceServers:c,contentHint:i,simulcastEncodings:a,degradationPreference:u,sendEncodings:g,offerToReceiveAudio:C,offerToReceiveVideo:S,directionVideo:w,directionAudio:F,setRemoteStreams:m,onBeforeProgressCall:E,onSuccessProgressCall:f,onEnterPurgatory:R,onEnterConference:p,onFailProgressCall:y,onFinishProgressCall:T,onEndedCall:M}=e,_=this.resolveHandleReadyRemoteStreamsDebounced({onReadyRemoteStreams:m}),v=this.resolveHandleReadyRemoteStreams({onReadyRemoteStreams:_}),O=D({degradationPreference:u},{preferredMimeTypesVideoCodecs:this.preferredMimeTypesVideoCodecs,excludeMimeTypesVideoCodecs:this.excludeMimeTypesVideoCodecs});s.logger("callToServer",e);const N=async()=>(s.logger("startCall"),this.sipConnector.call({mediaStream:r,extraHeaders:o,iceServers:c,contentHint:i,offerToReceiveAudio:C,offerToReceiveVideo:S,directionVideo:w,directionAudio:F,sendEncodings:B({mediaStream:r,simulcastEncodings:a,sendEncodings:g}),number:t,onAddedTransceiver:O,ontrack:v}));let b=!1,A;const P=(s.logger("subscribeEnterConference: onEnterConference",p),R??p?this.sipConnector.onSession("enterRoom",({room:d})=>{s.logger("enterRoom",{_room:d,isSuccessProgressCall:b}),A=d,I(A)?R&&R():p&&p({isSuccessProgressCall:b})}):()=>{}),k=d=>(s.logger("onSuccess"),b=!0,_(),f&&f({isPurgatory:I(A)}),this.sipConnector.onceRaceSession(["ended","failed"],()=>{P(),M&&M()}),d),U=d=>{throw s.logger("onFail"),y&&y(),P(),d},V=()=>{s.logger("onFinish"),T&&T()};return s.logger("onBeforeProgressCall"),E&&E(t),N().then(k).catch(d=>U(d)).finally(V)});l(this,"disconnectFromServer",async()=>this.sipConnector.disconnect().then(()=>(s.logger("disconnectFromServer: then"),{isSuccessful:!0})).catch(e=>(s.logger("disconnectFromServer: catch",e),{isSuccessful:!1})));l(this,"answerIncomingCall",async e=>{const{mediaStream:t,extraHeaders:r,iceServers:o,contentHint:c,simulcastEncodings:i,degradationPreference:a,sendEncodings:u,offerToReceiveAudio:g,offerToReceiveVideo:C,directionVideo:S,directionAudio:w,setRemoteStreams:F,onBeforeProgressCall:m,onSuccessProgressCall:E,onEnterPurgatory:f,onEnterConference:R,onFailProgressCall:p,onFinishProgressCall:y,onEndedCall:T}=e,M=this.resolveHandleReadyRemoteStreamsDebounced({onReadyRemoteStreams:F}),_=this.resolveHandleReadyRemoteStreams({onReadyRemoteStreams:M}),v=D({degradationPreference:a},{preferredMimeTypesVideoCodecs:this.preferredMimeTypesVideoCodecs,excludeMimeTypesVideoCodecs:this.excludeMimeTypesVideoCodecs});s.logger("answerIncomingCall",e);const O=async()=>this.sipConnector.answerToIncomingCall({mediaStream:t,extraHeaders:r,iceServers:o,contentHint:c,offerToReceiveAudio:g,offerToReceiveVideo:C,directionVideo:S,directionAudio:w,sendEncodings:B({mediaStream:t,simulcastEncodings:i,sendEncodings:u}),onAddedTransceiver:v,ontrack:_}),N=()=>{const{remoteCallerData:d}=this.sipConnector;return d.incomingNumber};let b=!1,A;const P=(s.logger("subscribeEnterConference: onEnterConference",R),f??R?this.sipConnector.onSession("enterRoom",d=>{s.logger("enterRoom",{_room:d,isSuccessProgressCall:b}),A=d,I(A)?f&&f():R&&R({isSuccessProgressCall:b})}):()=>{}),k=d=>(s.logger("onSuccess"),b=!0,M(),E&&E({isPurgatory:I(A)}),this.sipConnector.onceRaceSession(["ended","failed"],()=>{P(),T&&T()}),d),U=d=>{throw s.logger("onFail"),p&&p(),P(),d},V=()=>{s.logger("onFinish"),y&&y()};if(s.logger("onBeforeProgressCall"),m){const d=N();m(d)}return O().then(k).catch(d=>U(d)).finally(V)});l(this,"updatePresentation",async({mediaStream:e,isP2P:t,maxBitrate:r,contentHint:o,simulcastEncodings:c,degradationPreference:i,sendEncodings:a,preferredMimeTypesVideoCodecs:u,excludeMimeTypesVideoCodecs:g})=>{const C=D({degradationPreference:i},{preferredMimeTypesVideoCodecs:u,excludeMimeTypesVideoCodecs:g});return s.logger("updatePresentation"),this.sipConnector.updatePresentation(e,{isP2P:t,maxBitrate:r,contentHint:o,sendEncodings:B({mediaStream:e,simulcastEncodings:c,sendEncodings:a}),onAddedTransceiver:C})});l(this,"startPresentation",async({mediaStream:e,isP2P:t,maxBitrate:r,contentHint:o,simulcastEncodings:c,degradationPreference:i,sendEncodings:a,preferredMimeTypesVideoCodecs:u,excludeMimeTypesVideoCodecs:g},C)=>{const S=D({degradationPreference:i},{preferredMimeTypesVideoCodecs:u,excludeMimeTypesVideoCodecs:g});return s.logger("startPresentation"),this.sipConnector.startPresentation(e,{isP2P:t,maxBitrate:r,contentHint:o,sendEncodings:B({mediaStream:e,simulcastEncodings:c,sendEncodings:a}),onAddedTransceiver:S},C)});l(this,"stopShareSipConnector",async({isP2P:e=!1}={})=>(s.logger("stopShareSipConnector"),this.sipConnector.stopPresentation({isP2P:e}).catch(t=>{s.logger(t)})));l(this,"sendRefusalToTurnOnMic",async()=>{if(this.sipConnector.isCallActive)return s.logger("sendRefusalToTurnOnMic"),this.sipConnector.sendRefusalToTurnOnMic().catch(e=>{s.logger("sendRefusalToTurnOnMic: error",e)})});l(this,"sendRefusalToTurnOnCam",async()=>{if(this.sipConnector.isCallActive)return s.logger("sendRefusalToTurnOnCam"),this.sipConnector.sendRefusalToTurnOnCam().catch(e=>{s.logger("sendRefusalToTurnOnCam: error",e)})});l(this,"sendMediaState",async({isEnabledCam:e,isEnabledMic:t})=>{if(this.sipConnector.isCallActive)return s.logger("sendMediaState"),this.sipConnector.sendMediaState({cam:e,mic:t})});l(this,"replaceMediaStream",async(e,{deleteExisting:t,addMissing:r,forceRenegotiation:o,contentHint:c,simulcastEncodings:i,degradationPreference:a,sendEncodings:u}={})=>{const g=D({degradationPreference:a},{preferredMimeTypesVideoCodecs:this.preferredMimeTypesVideoCodecs,excludeMimeTypesVideoCodecs:this.excludeMimeTypesVideoCodecs});return s.logger("replaceMediaStream"),this.sipConnector.replaceMediaStream(e,{deleteExisting:t,addMissing:r,forceRenegotiation:o,contentHint:c,sendEncodings:B({mediaStream:e,simulcastEncodings:i,sendEncodings:u}),onAddedTransceiver:g})});l(this,"askPermissionToEnableCam",async()=>{if(this.sipConnector.isCallActive)return s.logger("askPermissionToEnableCam"),this.sipConnector.askPermissionToEnableCam()});l(this,"resolveHandleReadyRemoteStreamsDebounced",({onReadyRemoteStreams:e})=>ie.debounce(()=>{const t=this.sipConnector.getRemoteStreams();s.logger("remoteStreams",t),t&&e(t)},200));l(this,"resolveHandleReadyRemoteStreams",({onReadyRemoteStreams:e})=>({track:t})=>{Ye(t)&&e()});l(this,"getRemoteStreams",()=>(s.logger("getRemoteStreams"),this.sipConnector.getRemoteStreams()));l(this,"onUseLicense",e=>(s.logger("onUseLicense"),this.sipConnector.onSession("useLicense",e)));l(this,"onMustStopPresentation",e=>(s.logger("onMustStopPresentation"),this.sipConnector.onSession("mustStopPresentation",e)));l(this,"onMoveToSpectators",e=>(s.logger("onMoveToSpectators"),this.sipConnector.onSession(s.PARTICIPANT_MOVE_REQUEST_TO_SPECTATORS,e)));l(this,"onMoveToParticipants",e=>(s.logger("onMoveToParticipants"),this.sipConnector.onSession(s.PARTICIPANT_MOVE_REQUEST_TO_PARTICIPANTS,e)));this.sipConnector=e,this.preferredMimeTypesVideoCodecs=t,this.excludeMimeTypesVideoCodecs=r}}exports.EEventsMainCAM=s.EEventsMainCAM;exports.EEventsMic=s.EEventsMic;exports.EEventsSyncMediaState=s.EEventsSyncMediaState;exports.EMimeTypesVideoCodecs=s.EMimeTypesVideoCodecs;exports.EUseLicense=s.EUseLicense;exports.causes=s.causes;exports.constants=s.constants;exports.default=s.SipConnector;exports.disableDebug=s.disableDebug;exports.enableDebug=s.enableDebug;exports.eventNames=s.eventNames;exports.hasCanceledCallError=s.hasCanceledCallError;exports.setParametersToSender=s.setParametersToSender;exports.debug=ae;exports.SipConnectorFacade=ze;exports.getCodecFromSender=G;exports.resolveVideoSendingBalancer=He;exports.tools=_e;
1
+ "use strict";var ne=Object.defineProperty;var te=(n,e,t)=>e in n?ne(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t;var u=(n,e,t)=>te(n,typeof e!="symbol"?e+"":e,t);Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const o=require("./SipConnector-CE4F15z6.cjs"),se=require("sequent-promises"),oe=require("stack-promises"),re=require("@krivega/cancelable-promise"),ie=require("repeated-calls"),ce=require("ts-debounce"),ae=require("debug"),$=n=>{const{url:e,cause:t}=n;let s=e;return(t===o.BAD_MEDIA_DESCRIPTION||t===o.NOT_FOUND)&&(s=`${n.message.to.uri.user}@${n.message.to.uri.host}`),s};var j=(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))(j||{});const ue=(n=new Error)=>{var r;const{cause:e,socket:t}=n;let s="CONNECT_SERVER_FAILED";switch(e){case"Forbidden":{s="WRONG_USER_OR_PASSWORD";break}case o.BAD_MEDIA_DESCRIPTION:{s="BAD_MEDIA_ERROR";break}case o.NOT_FOUND:{s="NOT_FOUND_ERROR";break}default:t&&((r=t==null?void 0:t._ws)==null?void 0:r.readyState)===3?s="WS_CONNECTION_FAILED":$(n)&&(s="CONNECT_SERVER_FAILED_BY_LINK")}return s},le=n=>{let e="";try{e=JSON.stringify(n)}catch(t){o.logger("failed to stringify message",t)}return e},de=(n=new Error)=>{const{code:e,cause:t,message:s}=n,r=$(n),i={code:"",cause:"",message:""};return typeof s=="object"&&s!==null?i.message=le(s):s&&(i.message=String(s)),r&&(i.link=r),e&&(i.code=e),t&&(i.cause=t),i},ge=Object.freeze(Object.defineProperty({__proto__:null,EErrorTypes:j,getLinkError:$,getTypeFromError:ue,getValuesFromError:de},Symbol.toStringTag,{value:"Module"})),Se=({sessionId:n,remoteAddress:e,isMutedAudio:t,isMutedVideo:s,isRegistered:r,isPresentationCall:i})=>{const c=[],a=t?"0":"1",l=s?"0":"1";return c.push(`X-Vinteo-Mic-State: ${a}`,`X-Vinteo-MainCam-State: ${l}`),r||c.push("X-Vinteo-Purgatory-Call: yes"),n&&c.push(`X-Vinteo-Session: ${n}`),i&&c.push("X-Vinteo-Presentation-Call: yes"),e&&c.push(`X-Vinteo-Remote: ${e}`),c},Ce="[@*!|]",fe="_",me=n=>{let e=n;return e=e.replaceAll(new RegExp(Ce,"g"),fe),e},he=({appName:n,appVersion:e,browserName:t,browserVersion:s})=>{const i=`${me(n)} ${e}`;return`ChromeNew - ${t?`${t} ${s}, ${i}`:i}`},Re=({isUnifiedSdpSemantic:n,appVersion:e,browserName:t,browserVersion:s,appName:r})=>n?he({appVersion:e,browserName:t,browserVersion:s,appName:r}):"Chrome",W="purgatory",w=n=>n===W,pe=n=>e=>[...e].map(s=>async()=>n(s)),Ee=async({accumulatedKeys:n,sendKey:e,canRunTask:t})=>{const r=pe(e)(n);return se.sequentPromises(r,t)},ye=n=>t=>(o.logger("onStartMainCam"),n.onSession("admin-start-main-cam",t)),Te=n=>t=>(o.logger("onStartMic"),n.onSession("admin-start-mic",t)),Me=n=>t=>(o.logger("onStopMainCam"),n.onSession("admin-stop-main-cam",t)),be=n=>t=>(o.logger("onStopMic"),n.onSession("admin-stop-mic",t)),Ae=({sipConnector:n})=>{const e=(f,p)=>({isSyncForced:m=!1})=>{if(m){f();return}p()},t=ye(n),s=Me(n),r=Te(n),i=be(n);let c=()=>{},a=()=>{},l=()=>{},g=()=>{};const C=({onStartMainCamForced:f,onStartMainCamNotForced:p,onStopMainCamForced:m,onStopMainCamNotForced:h,onStartMicForced:E,onStartMicNotForced:y,onStopMicForced:T,onStopMicNotForced:M})=>{const _=e(f,p);c=t(_);const v=e(m,h);a=s(v);const O=e(E,y);l=r(O);const N=e(T,M);g=i(N)},S=()=>{c(),a(),l(),g()};return{start:f=>{C(f)},stop:()=>{S()}}},_e=Object.freeze(Object.defineProperty({__proto__:null,PURGATORY_CONFERENCE_NUMBER:W,createSyncMediaState:Ae,error:ge,getExtraHeaders:Se,getUserAgent:Re,hasPurgatory:w,sendDTMFAccumulated:Ee},Symbol.toStringTag,{value:"Module"})),ve=n=>[...n.keys()].map(e=>n.get(e)),Oe=(n,e)=>ve(n).find(t=>t.type===e),G=async n=>n.getStats().then(e=>{const t=Oe(e,"codec");return t==null?void 0:t.mimeType}),Ne=n=>n.find(e=>{var t;return((t=e==null?void 0:e.track)==null?void 0:t.kind)==="video"}),K=(n,e)=>n!==void 0&&e!==void 0&&n.toLowerCase().includes(e.toLowerCase()),Pe=1e6,R=n=>n*Pe,Y=R(.06),Be=R(4),De=n=>n<=64?Y:n<=128?R(.12):n<=256?R(.25):n<=384?R(.32):n<=426?R(.38):n<=640?R(.5):n<=848?R(.7):n<=1280?R(1):n<=1920?R(2):Be,we="av1",Ie=n=>K(n,we),Fe=.6,z=(n,e)=>Ie(e)?n*Fe:n,ke=n=>z(Y,n),Q=(n,e)=>{const t=De(n);return z(t,e)},Ue=1,J=({videoTrack:n,targetSize:e,codec:t})=>{const s=n.getSettings(),r=s.width,i=s.height,c=r/e.width,a=i/e.height,l=Math.max(c,a,Ue),g=Q(e.width,t);return{scaleResolutionDownBy:l,maxBitrate:g}},Z=oe.createStackPromises(),Ve=async()=>Z().catch(n=>{o.logger("videoSendingBalancer: error",n)}),Le=async n=>(Z.add(n),Ve()),q=async({sender:n,scaleResolutionDownBy:e,maxBitrate:t,onSetParameters:s})=>Le(async()=>o.setEncodingsToSender(n,{scaleResolutionDownBy:e,maxBitrate:t},s)),xe=async({sender:n,codec:e},t)=>{const r=ke(e);return q({sender:n,maxBitrate:r,onSetParameters:t,scaleResolutionDownBy:200})},L=async({sender:n,videoTrack:e,codec:t},s)=>{const c=e.getSettings().width,a=Q(c,t);return q({sender:n,maxBitrate:a,onSetParameters:s,scaleResolutionDownBy:1})},$e=async({sender:n,videoTrack:e,resolution:t,codec:s},r)=>{const[i,c]=t.split("x"),{maxBitrate:a,scaleResolutionDownBy:l}=J({videoTrack:e,codec:s,targetSize:{width:Number(i),height:Number(c)}});return q({sender:n,maxBitrate:a,onSetParameters:r,scaleResolutionDownBy:l})},qe=async({mainCam:n,resolutionMainCam:e,sender:t,videoTrack:s,codec:r},i)=>{switch(n){case o.EEventsMainCAM.PAUSE_MAIN_CAM:return xe({sender:t,codec:r},i);case o.EEventsMainCAM.RESUME_MAIN_CAM:return L({sender:t,videoTrack:s,codec:r},i);case o.EEventsMainCAM.MAX_MAIN_CAM_RESOLUTION:return e!==void 0?$e({sender:t,videoTrack:s,codec:r,resolution:e},i):L({sender:t,videoTrack:s,codec:r},i);default:return L({sender:t,videoTrack:s,codec:r},i)}},H={isChanged:!1,parameters:{encodings:[{}],transactionId:"0",codecs:[],headerExtensions:[],rtcp:{}}},X=async({mainCam:n,resolutionMainCam:e,connection:t,onSetParameters:s,ignoreForCodec:r})=>{const i=t.getSenders(),c=Ne(i);if(!(c!=null&&c.track))return H;const a=await G(c);return K(a,r)?H:qe({mainCam:n,resolutionMainCam:e,sender:c,codec:a,videoTrack:c.track},s)},He=(n,{ignoreForCodec:e,onSetParameters:t}={})=>{const s=async()=>{const{connection:l}=n;if(!l)throw new Error("connection is not exist");return X({connection:l,onSetParameters:t,ignoreForCodec:e})};let r=s;const i=async l=>(r=async()=>{const{mainCam:g,resolutionMainCam:C}=l,{connection:S}=n;if(!S)throw new Error("connection is not exist");return X({mainCam:g,resolutionMainCam:C,connection:S,onSetParameters:t,ignoreForCodec:e})},r());return{subscribe:()=>{n.onSession("main-cam-control",i)},unsubscribe:()=>{n.offSession("main-cam-control",i)},balanceByTrack:s,resetMainCamControl(){r=s},async reBalance(){return r()}}},Xe=n=>n.getVideoTracks()[0],B=({mediaStream:n,simulcastEncodings:e,sendEncodings:t})=>{if(e&&e.length>0){const s=t??[],r=Xe(n);return e.forEach((i,c)=>{const a=s[c]??{};a.active=!0,i.rid!==void 0&&(a.rid=i.rid),i.scalabilityMode!==void 0&&(a.scalabilityMode=i.scalabilityMode);const{maxBitrate:l,scaleResolutionDownBy:g}=J({videoTrack:r,targetSize:{width:i.width,height:i.height}});a.maxBitrate=l,a.scaleResolutionDownBy=g,s[c]=a}),s}return t},je=(n,e)=>[...n,...e].filter((r,i,c)=>i===c.findIndex(a=>a.clockRate===r.clockRate&&a.mimeType===r.mimeType&&a.channels===r.channels&&a.sdpFmtpLine===r.sdpFmtpLine)),We=n=>{const e=RTCRtpSender.getCapabilities(n),t=RTCRtpReceiver.getCapabilities(n),s=e===null?[]:e.codecs,r=t===null?[]:t.codecs;return je(s,r)},Ge=(n,e)=>e===void 0||e.length===0?n:n.sort((t,s)=>{const r=e.indexOf(t.mimeType),i=e.indexOf(s.mimeType),c=r===-1?Number.MAX_VALUE:r,a=i===-1?Number.MAX_VALUE:i;return c-a}),Ke=(n,e)=>e===void 0||e.length===0?n:n.filter(t=>!e.includes(t.mimeType)),D=(n,{preferredMimeTypesVideoCodecs:e,excludeMimeTypesVideoCodecs:t})=>async s=>{var r;if(typeof s.setCodecPreferences=="function"&&((r=s.sender.track)==null?void 0:r.kind)==="video"&&(e!==void 0&&(e==null?void 0:e.length)>0||t!==void 0&&(t==null?void 0:t.length)>0)){const i=We("video"),c=Ke(i,t),a=Ge(c,e);s.setCodecPreferences(a)}Object.keys(n).length>0&&await o.setParametersToSender(s.sender,n)},x=n=>{if(!re.isCanceledError(n)&&!ie.hasCanceledError(n))throw n;return{isSuccessful:!1}},Ye=({kind:n,readyState:e})=>n==="video"&&e==="live",ze=new Set(["on","once","onceRace","wait","off","onSession","onceSession","onceRaceSession","waitSession","offSession","sendDTMF","hangUp","declineToIncomingCall","isConfigured","sendChannels","checkTelephony","waitChannels","connection"]);class Qe{constructor(e,{preferredMimeTypesVideoCodecs:t,excludeMimeTypesVideoCodecs:s}={}){u(this,"sipConnector");u(this,"preferredMimeTypesVideoCodecs");u(this,"excludeMimeTypesVideoCodecs");u(this,"on");u(this,"once");u(this,"onceRace");u(this,"wait");u(this,"off");u(this,"onSession");u(this,"onceSession");u(this,"onceRaceSession");u(this,"waitSession");u(this,"offSession");u(this,"sendDTMF");u(this,"hangUp");u(this,"declineToIncomingCall");u(this,"isConfigured");u(this,"sendChannels");u(this,"checkTelephony");u(this,"waitChannels");u(this,"connection");u(this,"connectToServer",async e=>{const{userAgent:t,sipWebSocketServerURL:s,sipServerUrl:r,remoteAddress:i,displayName:c,name:a,password:l,isRegisteredUser:g,isDisconnectOnFail:C}=e;return o.logger("connectToServer",e),this.sipConnector.connect({userAgent:t,sipWebSocketServerURL:s,sipServerUrl:r,remoteAddress:i,displayName:c,password:l,user:a,register:g}).then(S=>(o.logger("connectToServer then"),{ua:S,isSuccessful:!0})).catch(async S=>(o.logger("connectToServer catch: error",S),C===!0?this.sipConnector.disconnect().then(()=>x(S)).catch(()=>x(S)):x(S)))});u(this,"callToServer",async e=>{const{conference:t,mediaStream:s,extraHeaders:r,iceServers:i,contentHint:c,simulcastEncodings:a,degradationPreference:l,sendEncodings:g,offerToReceiveAudio:C,offerToReceiveVideo:S,directionVideo:I,directionAudio:F,setRemoteStreams:f,onBeforeProgressCall:p,onSuccessProgressCall:m,onEnterPurgatory:h,onEnterConference:E,onFailProgressCall:y,onFinishProgressCall:T,onEndedCall:M}=e,_=this.resolveHandleReadyRemoteStreamsDebounced({onReadyRemoteStreams:f}),v=this.resolveHandleReadyRemoteStreams({onReadyRemoteStreams:_}),O=D({degradationPreference:l},{preferredMimeTypesVideoCodecs:this.preferredMimeTypesVideoCodecs,excludeMimeTypesVideoCodecs:this.excludeMimeTypesVideoCodecs});o.logger("callToServer",e);const N=async()=>(o.logger("startCall"),this.sipConnector.call({mediaStream:s,extraHeaders:r,iceServers:i,contentHint:c,offerToReceiveAudio:C,offerToReceiveVideo:S,directionVideo:I,directionAudio:F,sendEncodings:B({mediaStream:s,simulcastEncodings:a,sendEncodings:g}),number:t,onAddedTransceiver:O,ontrack:v}));let b=!1,A;const P=(o.logger("subscribeEnterConference: onEnterConference",E),h??E?this.sipConnector.onSession("enterRoom",({room:d})=>{o.logger("enterRoom",{_room:d,isSuccessProgressCall:b}),A=d,w(A)?h&&h():E&&E({isSuccessProgressCall:b})}):()=>{}),k=d=>(o.logger("onSuccess"),b=!0,_(),m&&m({isPurgatory:w(A)}),this.sipConnector.onceRaceSession(["ended","failed"],()=>{P(),M&&M()}),d),U=d=>{throw o.logger("onFail"),y&&y(),P(),d},V=()=>{o.logger("onFinish"),T&&T()};return o.logger("onBeforeProgressCall"),p&&p(t),N().then(k).catch(d=>U(d)).finally(V)});u(this,"disconnectFromServer",async()=>this.sipConnector.disconnect().then(()=>(o.logger("disconnectFromServer: then"),{isSuccessful:!0})).catch(e=>(o.logger("disconnectFromServer: catch",e),{isSuccessful:!1})));u(this,"answerIncomingCall",async e=>{const{mediaStream:t,extraHeaders:s,iceServers:r,contentHint:i,simulcastEncodings:c,degradationPreference:a,sendEncodings:l,offerToReceiveAudio:g,offerToReceiveVideo:C,directionVideo:S,directionAudio:I,setRemoteStreams:F,onBeforeProgressCall:f,onSuccessProgressCall:p,onEnterPurgatory:m,onEnterConference:h,onFailProgressCall:E,onFinishProgressCall:y,onEndedCall:T}=e,M=this.resolveHandleReadyRemoteStreamsDebounced({onReadyRemoteStreams:F}),_=this.resolveHandleReadyRemoteStreams({onReadyRemoteStreams:M}),v=D({degradationPreference:a},{preferredMimeTypesVideoCodecs:this.preferredMimeTypesVideoCodecs,excludeMimeTypesVideoCodecs:this.excludeMimeTypesVideoCodecs});o.logger("answerIncomingCall",e);const O=async()=>this.sipConnector.answerToIncomingCall({mediaStream:t,extraHeaders:s,iceServers:r,contentHint:i,offerToReceiveAudio:g,offerToReceiveVideo:C,directionVideo:S,directionAudio:I,sendEncodings:B({mediaStream:t,simulcastEncodings:c,sendEncodings:l}),onAddedTransceiver:v,ontrack:_}),N=()=>{const{remoteCallerData:d}=this.sipConnector;return d.incomingNumber};let b=!1,A;const P=(o.logger("subscribeEnterConference: onEnterConference",h),m??h?this.sipConnector.onSession("enterRoom",d=>{o.logger("enterRoom",{_room:d,isSuccessProgressCall:b}),A=d,w(A)?m&&m():h&&h({isSuccessProgressCall:b})}):()=>{}),k=d=>(o.logger("onSuccess"),b=!0,M(),p&&p({isPurgatory:w(A)}),this.sipConnector.onceRaceSession(["ended","failed"],()=>{P(),T&&T()}),d),U=d=>{throw o.logger("onFail"),E&&E(),P(),d},V=()=>{o.logger("onFinish"),y&&y()};if(o.logger("onBeforeProgressCall"),f){const d=N();f(d)}return O().then(k).catch(d=>U(d)).finally(V)});u(this,"updatePresentation",async({mediaStream:e,isP2P:t,maxBitrate:s,contentHint:r,simulcastEncodings:i,degradationPreference:c,sendEncodings:a,preferredMimeTypesVideoCodecs:l,excludeMimeTypesVideoCodecs:g})=>{const C=D({degradationPreference:c},{preferredMimeTypesVideoCodecs:l,excludeMimeTypesVideoCodecs:g});return o.logger("updatePresentation"),this.sipConnector.updatePresentation(e,{isP2P:t,maxBitrate:s,contentHint:r,sendEncodings:B({mediaStream:e,simulcastEncodings:i,sendEncodings:a}),onAddedTransceiver:C})});u(this,"startPresentation",async({mediaStream:e,isP2P:t,maxBitrate:s,contentHint:r,simulcastEncodings:i,degradationPreference:c,sendEncodings:a,preferredMimeTypesVideoCodecs:l,excludeMimeTypesVideoCodecs:g},C)=>{const S=D({degradationPreference:c},{preferredMimeTypesVideoCodecs:l,excludeMimeTypesVideoCodecs:g});return o.logger("startPresentation"),this.sipConnector.startPresentation(e,{isP2P:t,maxBitrate:s,contentHint:r,sendEncodings:B({mediaStream:e,simulcastEncodings:i,sendEncodings:a}),onAddedTransceiver:S},C)});u(this,"stopShareSipConnector",async({isP2P:e=!1}={})=>(o.logger("stopShareSipConnector"),this.sipConnector.stopPresentation({isP2P:e}).catch(t=>{o.logger(t)})));u(this,"sendRefusalToTurnOnMic",async()=>{if(this.sipConnector.isCallActive)return o.logger("sendRefusalToTurnOnMic"),this.sipConnector.sendRefusalToTurnOnMic().catch(e=>{o.logger("sendRefusalToTurnOnMic: error",e)})});u(this,"sendRefusalToTurnOnCam",async()=>{if(this.sipConnector.isCallActive)return o.logger("sendRefusalToTurnOnCam"),this.sipConnector.sendRefusalToTurnOnCam().catch(e=>{o.logger("sendRefusalToTurnOnCam: error",e)})});u(this,"sendMediaState",async({isEnabledCam:e,isEnabledMic:t})=>{if(this.sipConnector.isCallActive)return o.logger("sendMediaState"),this.sipConnector.sendMediaState({cam:e,mic:t})});u(this,"replaceMediaStream",async(e,{deleteExisting:t,addMissing:s,forceRenegotiation:r,contentHint:i,simulcastEncodings:c,degradationPreference:a,sendEncodings:l}={})=>{const g=D({degradationPreference:a},{preferredMimeTypesVideoCodecs:this.preferredMimeTypesVideoCodecs,excludeMimeTypesVideoCodecs:this.excludeMimeTypesVideoCodecs});return o.logger("replaceMediaStream"),this.sipConnector.replaceMediaStream(e,{deleteExisting:t,addMissing:s,forceRenegotiation:r,contentHint:i,sendEncodings:B({mediaStream:e,simulcastEncodings:c,sendEncodings:l}),onAddedTransceiver:g})});u(this,"askPermissionToEnableCam",async()=>{if(this.sipConnector.isCallActive)return o.logger("askPermissionToEnableCam"),this.sipConnector.askPermissionToEnableCam()});u(this,"resolveHandleReadyRemoteStreamsDebounced",({onReadyRemoteStreams:e})=>ce.debounce(()=>{const t=this.sipConnector.getRemoteStreams();o.logger("remoteStreams",t),t&&e(t)},200));u(this,"resolveHandleReadyRemoteStreams",({onReadyRemoteStreams:e})=>({track:t})=>{Ye(t)&&e()});u(this,"getRemoteStreams",()=>(o.logger("getRemoteStreams"),this.sipConnector.getRemoteStreams()));u(this,"onUseLicense",e=>(o.logger("onUseLicense"),this.sipConnector.onSession("useLicense",e)));u(this,"onMustStopPresentation",e=>(o.logger("onMustStopPresentation"),this.sipConnector.onSession("mustStopPresentation",e)));u(this,"onMoveToSpectators",e=>(o.logger("onMoveToSpectators"),this.sipConnector.onSession(o.PARTICIPANT_MOVE_REQUEST_TO_SPECTATORS,e)));u(this,"onMoveToParticipants",e=>(o.logger("onMoveToParticipants"),this.sipConnector.onSession(o.PARTICIPANT_MOVE_REQUEST_TO_PARTICIPANTS,e)));return this.preferredMimeTypesVideoCodecs=t,this.excludeMimeTypesVideoCodecs=s,this.sipConnector=e,new Proxy(this,{get:(r,i,c)=>{if(typeof i=="string"&&ze.has(i)&&i in this.sipConnector){const l=Reflect.get(this.sipConnector,i,this.sipConnector);return typeof l=="function"?l.bind(this.sipConnector):l}const a=Reflect.get(r,i,c);return typeof a=="function"?a.bind(r):a}})}}exports.EEventsMainCAM=o.EEventsMainCAM;exports.EEventsMic=o.EEventsMic;exports.EEventsSyncMediaState=o.EEventsSyncMediaState;exports.EMimeTypesVideoCodecs=o.EMimeTypesVideoCodecs;exports.EUseLicense=o.EUseLicense;exports.causes=o.causes;exports.constants=o.constants;exports.default=o.SipConnector;exports.disableDebug=o.disableDebug;exports.enableDebug=o.enableDebug;exports.eventNames=o.eventNames;exports.hasCanceledCallError=o.hasCanceledCallError;exports.setParametersToSender=o.setParametersToSender;exports.debug=ae;exports.SipConnectorFacade=Qe;exports.getCodecFromSender=G;exports.resolveVideoSendingBalancer=He;exports.tools=_e;
package/dist/index.js CHANGED
@@ -1,14 +1,14 @@
1
1
  var se = Object.defineProperty;
2
- var re = (n, e, t) => e in n ? se(n, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : n[e] = t;
3
- var l = (n, e, t) => re(n, typeof e != "symbol" ? e + "" : e, t);
4
- import { B as G, N as K, l as a, E as L, s as oe, a as ie, P as ce, b as ae, S as tn } from "./SipConnector-B4xLnl6L.js";
5
- import { i as Cn, j as fn, m as hn, k as Rn, c as gn, d as pn, f as yn, g as En, e as Tn, h as bn } from "./SipConnector-B4xLnl6L.js";
2
+ var oe = (n, e, t) => e in n ? se(n, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : n[e] = t;
3
+ var u = (n, e, t) => oe(n, typeof e != "symbol" ? e + "" : e, t);
4
+ import { B as G, N as K, l as a, E as x, s as re, a as ie, P as ce, b as ae, S as sn } from "./SipConnector-B4xLnl6L.js";
5
+ import { i as mn, j as hn, m as Rn, k as gn, c as pn, d as yn, f as En, g as Tn, e as bn, h as Mn } from "./SipConnector-B4xLnl6L.js";
6
6
  import { sequentPromises as ue } from "sequent-promises";
7
7
  import { createStackPromises as le } from "stack-promises";
8
8
  import { isCanceledError as de } from "@krivega/cancelable-promise";
9
9
  import { hasCanceledError as Se } from "repeated-calls";
10
- import { debounce as me } from "ts-debounce";
11
- import { default as An } from "debug";
10
+ import { debounce as fe } from "ts-debounce";
11
+ import { default as _n } from "debug";
12
12
  const H = (n) => {
13
13
  const { url: e, cause: t } = n;
14
14
  let s = e;
@@ -16,7 +16,7 @@ const H = (n) => {
16
16
  };
17
17
  var q = /* @__PURE__ */ ((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))(q || {});
18
18
  const Ce = (n = new Error()) => {
19
- var r;
19
+ var o;
20
20
  const { cause: e, socket: t } = n;
21
21
  let s = "CONNECT_SERVER_FAILED";
22
22
  switch (e) {
@@ -33,10 +33,10 @@ const Ce = (n = new Error()) => {
33
33
  break;
34
34
  }
35
35
  default:
36
- t && ((r = t == null ? void 0 : t._ws) == null ? void 0 : r.readyState) === 3 ? s = "WS_CONNECTION_FAILED" : H(n) && (s = "CONNECT_SERVER_FAILED_BY_LINK");
36
+ t && ((o = t == null ? void 0 : t._ws) == null ? void 0 : o.readyState) === 3 ? s = "WS_CONNECTION_FAILED" : H(n) && (s = "CONNECT_SERVER_FAILED_BY_LINK");
37
37
  }
38
38
  return s;
39
- }, fe = (n) => {
39
+ }, me = (n) => {
40
40
  let e = "";
41
41
  try {
42
42
  e = JSON.stringify(n);
@@ -45,8 +45,8 @@ const Ce = (n = new Error()) => {
45
45
  }
46
46
  return e;
47
47
  }, he = (n = new Error()) => {
48
- const { code: e, cause: t, message: s } = n, r = H(n), o = { code: "", cause: "", message: "" };
49
- return typeof s == "object" && s !== null ? o.message = fe(s) : s && (o.message = String(s)), r && (o.link = r), e && (o.code = e), t && (o.cause = t), o;
48
+ const { code: e, cause: t, message: s } = n, o = H(n), r = { code: "", cause: "", message: "" };
49
+ return typeof s == "object" && s !== null ? r.message = me(s) : s && (r.message = String(s)), o && (r.link = o), e && (r.code = e), t && (r.cause = t), r;
50
50
  }, Re = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
51
51
  __proto__: null,
52
52
  EErrorTypes: q,
@@ -58,11 +58,11 @@ const Ce = (n = new Error()) => {
58
58
  remoteAddress: e,
59
59
  isMutedAudio: t,
60
60
  isMutedVideo: s,
61
- isRegistered: r,
62
- isPresentationCall: o
61
+ isRegistered: o,
62
+ isPresentationCall: r
63
63
  }) => {
64
- const i = [], c = t ? "0" : "1", u = s ? "0" : "1";
65
- return i.push(`X-Vinteo-Mic-State: ${c}`, `X-Vinteo-MainCam-State: ${u}`), r || i.push("X-Vinteo-Purgatory-Call: yes"), n && i.push(`X-Vinteo-Session: ${n}`), o && i.push("X-Vinteo-Presentation-Call: yes"), e && i.push(`X-Vinteo-Remote: ${e}`), i;
64
+ const i = [], c = t ? "0" : "1", l = s ? "0" : "1";
65
+ return i.push(`X-Vinteo-Mic-State: ${c}`, `X-Vinteo-MainCam-State: ${l}`), o || i.push("X-Vinteo-Purgatory-Call: yes"), n && i.push(`X-Vinteo-Session: ${n}`), r && i.push("X-Vinteo-Presentation-Call: yes"), e && i.push(`X-Vinteo-Remote: ${e}`), i;
66
66
  }, pe = "[@*!|]", ye = "_", Ee = (n) => {
67
67
  let e = n;
68
68
  return e = e.replaceAll(new RegExp(pe, "g"), ye), e;
@@ -72,36 +72,36 @@ const Ce = (n = new Error()) => {
72
72
  browserName: t,
73
73
  browserVersion: s
74
74
  }) => {
75
- const o = `${Ee(n)} ${e}`;
76
- return `ChromeNew - ${t ? `${t} ${s}, ${o}` : o}`;
75
+ const r = `${Ee(n)} ${e}`;
76
+ return `ChromeNew - ${t ? `${t} ${s}, ${r}` : r}`;
77
77
  }, be = ({
78
78
  isUnifiedSdpSemantic: n,
79
79
  appVersion: e,
80
80
  browserName: t,
81
81
  browserVersion: s,
82
- appName: r
83
- }) => n ? Te({ appVersion: e, browserName: t, browserVersion: s, appName: r }) : "Chrome", Y = "purgatory", D = (n) => n === Y, Me = (n) => (e) => [...e].map((s) => async () => n(s)), Ae = async ({
82
+ appName: o
83
+ }) => n ? Te({ appVersion: e, browserName: t, browserVersion: s, appName: o }) : "Chrome", Y = "purgatory", D = (n) => n === Y, Me = (n) => (e) => [...e].map((s) => async () => n(s)), Ae = async ({
84
84
  accumulatedKeys: n,
85
85
  sendKey: e,
86
86
  canRunTask: t
87
87
  }) => {
88
- const r = Me(e)(n);
89
- return ue(r, t);
90
- }, _e = (n) => (t) => (a("onStartMainCam"), n.onSession("admin-start-main-cam", t)), ve = (n) => (t) => (a("onStartMic"), n.onSession("admin-start-mic", t)), Oe = (n) => (t) => (a("onStopMainCam"), n.onSession("admin-stop-main-cam", t)), Ne = (n) => (t) => (a("onStopMic"), n.onSession("admin-stop-mic", t)), Be = ({ sipConnector: n }) => {
91
- const e = (f, p) => ({ isSyncForced: h = !1 }) => {
88
+ const o = Me(e)(n);
89
+ return ue(o, t);
90
+ }, _e = (n) => (t) => (a("onStartMainCam"), n.onSession("admin-start-main-cam", t)), ve = (n) => (t) => (a("onStartMic"), n.onSession("admin-start-mic", t)), Oe = (n) => (t) => (a("onStopMainCam"), n.onSession("admin-stop-main-cam", t)), Ne = (n) => (t) => (a("onStopMic"), n.onSession("admin-stop-mic", t)), we = ({ sipConnector: n }) => {
91
+ const e = (m, p) => ({ isSyncForced: h = !1 }) => {
92
92
  if (h) {
93
- f();
93
+ m();
94
94
  return;
95
95
  }
96
96
  p();
97
- }, t = _e(n), s = Oe(n), r = ve(n), o = Ne(n);
97
+ }, t = _e(n), s = Oe(n), o = ve(n), r = Ne(n);
98
98
  let i = () => {
99
99
  }, c = () => {
100
- }, u = () => {
100
+ }, l = () => {
101
101
  }, S = () => {
102
102
  };
103
103
  const C = ({
104
- onStartMainCamForced: f,
104
+ onStartMainCamForced: m,
105
105
  onStartMainCamNotForced: p,
106
106
  onStopMainCamForced: h,
107
107
  onStopMainCamNotForced: R,
@@ -111,7 +111,7 @@ const Ce = (n = new Error()) => {
111
111
  onStopMicNotForced: b
112
112
  }) => {
113
113
  const _ = e(
114
- f,
114
+ m,
115
115
  p
116
116
  );
117
117
  i = t(_);
@@ -121,36 +121,36 @@ const Ce = (n = new Error()) => {
121
121
  );
122
122
  c = s(v);
123
123
  const O = e(y, E);
124
- u = r(O);
124
+ l = o(O);
125
125
  const N = e(T, b);
126
- S = o(N);
127
- }, m = () => {
128
- i(), c(), u(), S();
126
+ S = r(N);
127
+ }, f = () => {
128
+ i(), c(), l(), S();
129
129
  };
130
130
  return {
131
- start: (f) => {
132
- C(f);
131
+ start: (m) => {
132
+ C(m);
133
133
  },
134
134
  stop: () => {
135
- m();
135
+ f();
136
136
  }
137
137
  };
138
- }, un = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
138
+ }, ln = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
139
139
  __proto__: null,
140
140
  PURGATORY_CONFERENCE_NUMBER: Y,
141
- createSyncMediaState: Be,
141
+ createSyncMediaState: we,
142
142
  error: Re,
143
143
  getExtraHeaders: ge,
144
144
  getUserAgent: be,
145
145
  hasPurgatory: D,
146
146
  sendDTMFAccumulated: Ae
147
- }, Symbol.toStringTag, { value: "Module" })), Pe = (n) => [...n.keys()].map((e) => n.get(e)), we = (n, e) => Pe(n).find((t) => t.type === e), De = async (n) => n.getStats().then((e) => {
148
- const t = we(e, "codec");
147
+ }, Symbol.toStringTag, { value: "Module" })), Be = (n) => [...n.keys()].map((e) => n.get(e)), Pe = (n, e) => Be(n).find((t) => t.type === e), De = async (n) => n.getStats().then((e) => {
148
+ const t = Pe(e, "codec");
149
149
  return t == null ? void 0 : t.mimeType;
150
150
  }), Ie = (n) => n.find((e) => {
151
151
  var t;
152
152
  return ((t = e == null ? void 0 : e.track) == null ? void 0 : t.kind) === "video";
153
- }), z = (n, e) => n !== void 0 && e !== void 0 && n.toLowerCase().includes(e.toLowerCase()), Fe = 1e6, g = (n) => n * Fe, Q = g(0.06), ke = g(4), Ue = (n) => n <= 64 ? Q : n <= 128 ? g(0.12) : n <= 256 ? g(0.25) : n <= 384 ? g(0.32) : n <= 426 ? g(0.38) : n <= 640 ? g(0.5) : n <= 848 ? g(0.7) : n <= 1280 ? g(1) : n <= 1920 ? g(2) : ke, Ve = "av1", Le = (n) => z(n, Ve), xe = 0.6, J = (n, e) => Le(e) ? n * xe : n, $e = (n) => J(Q, n), Z = (n, e) => {
153
+ }), z = (n, e) => n !== void 0 && e !== void 0 && n.toLowerCase().includes(e.toLowerCase()), Fe = 1e6, g = (n) => n * Fe, Q = g(0.06), ke = g(4), Ue = (n) => n <= 64 ? Q : n <= 128 ? g(0.12) : n <= 256 ? g(0.25) : n <= 384 ? g(0.32) : n <= 426 ? g(0.38) : n <= 640 ? g(0.5) : n <= 848 ? g(0.7) : n <= 1280 ? g(1) : n <= 1920 ? g(2) : ke, Ve = "av1", xe = (n) => z(n, Ve), Le = 0.6, J = (n, e) => xe(e) ? n * Le : n, $e = (n) => J(Q, n), Z = (n, e) => {
154
154
  const t = Ue(n);
155
155
  return J(t, e);
156
156
  }, He = 1, ee = ({
@@ -158,8 +158,8 @@ const Ce = (n = new Error()) => {
158
158
  targetSize: e,
159
159
  codec: t
160
160
  }) => {
161
- const s = n.getSettings(), r = s.width, o = s.height, i = r / e.width, c = o / e.height, u = Math.max(i, c, He), S = Z(e.width, t);
162
- return { scaleResolutionDownBy: u, maxBitrate: S };
161
+ const s = n.getSettings(), o = s.width, r = s.height, i = o / e.width, c = r / e.height, l = Math.max(i, c, He), S = Z(e.width, t);
162
+ return { scaleResolutionDownBy: l, maxBitrate: S };
163
163
  }, ne = le(), Xe = async () => ne().catch((n) => {
164
164
  a("videoSendingBalancer: error", n);
165
165
  }), je = async (n) => (ne.add(n), Xe()), X = async ({
@@ -167,15 +167,15 @@ const Ce = (n = new Error()) => {
167
167
  scaleResolutionDownBy: e,
168
168
  maxBitrate: t,
169
169
  onSetParameters: s
170
- }) => je(async () => oe(n, { scaleResolutionDownBy: e, maxBitrate: t }, s)), We = async ({ sender: n, codec: e }, t) => {
171
- const r = $e(e);
170
+ }) => je(async () => re(n, { scaleResolutionDownBy: e, maxBitrate: t }, s)), We = async ({ sender: n, codec: e }, t) => {
171
+ const o = $e(e);
172
172
  return X({
173
173
  sender: n,
174
- maxBitrate: r,
174
+ maxBitrate: o,
175
175
  onSetParameters: t,
176
176
  scaleResolutionDownBy: 200
177
177
  });
178
- }, x = async ({
178
+ }, L = async ({
179
179
  sender: n,
180
180
  videoTrack: e,
181
181
  codec: t
@@ -192,40 +192,40 @@ const Ce = (n = new Error()) => {
192
192
  videoTrack: e,
193
193
  resolution: t,
194
194
  codec: s
195
- }, r) => {
196
- const [o, i] = t.split("x"), { maxBitrate: c, scaleResolutionDownBy: u } = ee({
195
+ }, o) => {
196
+ const [r, i] = t.split("x"), { maxBitrate: c, scaleResolutionDownBy: l } = ee({
197
197
  videoTrack: e,
198
198
  codec: s,
199
199
  targetSize: {
200
- width: Number(o),
200
+ width: Number(r),
201
201
  height: Number(i)
202
202
  }
203
203
  });
204
204
  return X({
205
205
  sender: n,
206
206
  maxBitrate: c,
207
- onSetParameters: r,
208
- scaleResolutionDownBy: u
207
+ onSetParameters: o,
208
+ scaleResolutionDownBy: l
209
209
  });
210
210
  }, Ke = async ({
211
211
  mainCam: n,
212
212
  resolutionMainCam: e,
213
213
  sender: t,
214
214
  videoTrack: s,
215
- codec: r
216
- }, o) => {
215
+ codec: o
216
+ }, r) => {
217
217
  switch (n) {
218
- case L.PAUSE_MAIN_CAM:
219
- return We({ sender: t, codec: r }, o);
220
- case L.RESUME_MAIN_CAM:
221
- return x({ sender: t, videoTrack: s, codec: r }, o);
222
- case L.MAX_MAIN_CAM_RESOLUTION:
218
+ case x.PAUSE_MAIN_CAM:
219
+ return We({ sender: t, codec: o }, r);
220
+ case x.RESUME_MAIN_CAM:
221
+ return L({ sender: t, videoTrack: s, codec: o }, r);
222
+ case x.MAX_MAIN_CAM_RESOLUTION:
223
223
  return e !== void 0 ? Ge(
224
- { sender: t, videoTrack: s, codec: r, resolution: e },
225
- o
226
- ) : x({ sender: t, videoTrack: s, codec: r }, o);
224
+ { sender: t, videoTrack: s, codec: o, resolution: e },
225
+ r
226
+ ) : L({ sender: t, videoTrack: s, codec: o }, r);
227
227
  default:
228
- return x({ sender: t, videoTrack: s, codec: r }, o);
228
+ return L({ sender: t, videoTrack: s, codec: o }, r);
229
229
  }
230
230
  }, j = {
231
231
  isChanged: !1,
@@ -241,13 +241,13 @@ const Ce = (n = new Error()) => {
241
241
  resolutionMainCam: e,
242
242
  connection: t,
243
243
  onSetParameters: s,
244
- ignoreForCodec: r
244
+ ignoreForCodec: o
245
245
  }) => {
246
- const o = t.getSenders(), i = Ie(o);
246
+ const r = t.getSenders(), i = Ie(r);
247
247
  if (!(i != null && i.track))
248
248
  return j;
249
249
  const c = await De(i);
250
- return z(c, r) ? j : Ke(
250
+ return z(c, o) ? j : Ke(
251
251
  {
252
252
  mainCam: n,
253
253
  resolutionMainCam: e,
@@ -257,82 +257,82 @@ const Ce = (n = new Error()) => {
257
257
  },
258
258
  s
259
259
  );
260
- }, ln = (n, {
260
+ }, dn = (n, {
261
261
  ignoreForCodec: e,
262
262
  onSetParameters: t
263
263
  } = {}) => {
264
264
  const s = async () => {
265
- const { connection: u } = n;
266
- if (!u)
265
+ const { connection: l } = n;
266
+ if (!l)
267
267
  throw new Error("connection is not exist");
268
268
  return W({
269
- connection: u,
269
+ connection: l,
270
270
  onSetParameters: t,
271
271
  ignoreForCodec: e
272
272
  });
273
273
  };
274
- let r = s;
275
- const o = async (u) => (r = async () => {
276
- const { mainCam: S, resolutionMainCam: C } = u, { connection: m } = n;
277
- if (!m)
274
+ let o = s;
275
+ const r = async (l) => (o = async () => {
276
+ const { mainCam: S, resolutionMainCam: C } = l, { connection: f } = n;
277
+ if (!f)
278
278
  throw new Error("connection is not exist");
279
279
  return W({
280
280
  mainCam: S,
281
281
  resolutionMainCam: C,
282
- connection: m,
282
+ connection: f,
283
283
  onSetParameters: t,
284
284
  ignoreForCodec: e
285
285
  });
286
- }, r());
286
+ }, o());
287
287
  return {
288
288
  subscribe: () => {
289
- n.onSession("main-cam-control", o);
289
+ n.onSession("main-cam-control", r);
290
290
  },
291
291
  unsubscribe: () => {
292
- n.offSession("main-cam-control", o);
292
+ n.offSession("main-cam-control", r);
293
293
  },
294
294
  balanceByTrack: s,
295
295
  resetMainCamControl() {
296
- r = s;
296
+ o = s;
297
297
  },
298
298
  async reBalance() {
299
- return r();
299
+ return o();
300
300
  }
301
301
  };
302
- }, qe = (n) => n.getVideoTracks()[0], P = ({
302
+ }, qe = (n) => n.getVideoTracks()[0], B = ({
303
303
  mediaStream: n,
304
304
  simulcastEncodings: e,
305
305
  sendEncodings: t
306
306
  }) => {
307
307
  if (e && e.length > 0) {
308
- const s = t ?? [], r = qe(n);
309
- return e.forEach((o, i) => {
308
+ const s = t ?? [], o = qe(n);
309
+ return e.forEach((r, i) => {
310
310
  const c = s[i] ?? {};
311
- c.active = !0, o.rid !== void 0 && (c.rid = o.rid), o.scalabilityMode !== void 0 && (c.scalabilityMode = o.scalabilityMode);
312
- const { maxBitrate: u, scaleResolutionDownBy: S } = ee({
313
- videoTrack: r,
311
+ c.active = !0, r.rid !== void 0 && (c.rid = r.rid), r.scalabilityMode !== void 0 && (c.scalabilityMode = r.scalabilityMode);
312
+ const { maxBitrate: l, scaleResolutionDownBy: S } = ee({
313
+ videoTrack: o,
314
314
  targetSize: {
315
- width: o.width,
316
- height: o.height
315
+ width: r.width,
316
+ height: r.height
317
317
  }
318
318
  });
319
- c.maxBitrate = u, c.scaleResolutionDownBy = S, s[i] = c;
319
+ c.maxBitrate = l, c.scaleResolutionDownBy = S, s[i] = c;
320
320
  }), s;
321
321
  }
322
322
  return t;
323
- }, Ye = (n, e) => [...n, ...e].filter((r, o, i) => o === i.findIndex((c) => c.clockRate === r.clockRate && c.mimeType === r.mimeType && c.channels === r.channels && c.sdpFmtpLine === r.sdpFmtpLine)), ze = (n) => {
324
- const e = RTCRtpSender.getCapabilities(n), t = RTCRtpReceiver.getCapabilities(n), s = e === null ? [] : e.codecs, r = t === null ? [] : t.codecs;
325
- return Ye(s, r);
323
+ }, Ye = (n, e) => [...n, ...e].filter((o, r, i) => r === i.findIndex((c) => c.clockRate === o.clockRate && c.mimeType === o.mimeType && c.channels === o.channels && c.sdpFmtpLine === o.sdpFmtpLine)), ze = (n) => {
324
+ const e = RTCRtpSender.getCapabilities(n), t = RTCRtpReceiver.getCapabilities(n), s = e === null ? [] : e.codecs, o = t === null ? [] : t.codecs;
325
+ return Ye(s, o);
326
326
  }, Qe = (n, e) => e === void 0 || e.length === 0 ? n : n.sort((t, s) => {
327
- const r = e.indexOf(t.mimeType), o = e.indexOf(s.mimeType), i = r === -1 ? Number.MAX_VALUE : r, c = o === -1 ? Number.MAX_VALUE : o;
327
+ const o = e.indexOf(t.mimeType), r = e.indexOf(s.mimeType), i = o === -1 ? Number.MAX_VALUE : o, c = r === -1 ? Number.MAX_VALUE : r;
328
328
  return i - c;
329
- }), Je = (n, e) => e === void 0 || e.length === 0 ? n : n.filter((t) => !e.includes(t.mimeType)), w = (n, {
329
+ }), Je = (n, e) => e === void 0 || e.length === 0 ? n : n.filter((t) => !e.includes(t.mimeType)), P = (n, {
330
330
  preferredMimeTypesVideoCodecs: e,
331
331
  excludeMimeTypesVideoCodecs: t
332
332
  }) => async (s) => {
333
- var r;
334
- if (typeof s.setCodecPreferences == "function" && ((r = s.sender.track) == null ? void 0 : r.kind) === "video" && (e !== void 0 && (e == null ? void 0 : e.length) > 0 || t !== void 0 && (t == null ? void 0 : t.length) > 0)) {
335
- const o = ze("video"), i = Je(o, t), c = Qe(i, e);
333
+ var o;
334
+ if (typeof s.setCodecPreferences == "function" && ((o = s.sender.track) == null ? void 0 : o.kind) === "video" && (e !== void 0 && (e == null ? void 0 : e.length) > 0 || t !== void 0 && (t == null ? void 0 : t.length) > 0)) {
335
+ const r = ze("video"), i = Je(r, t), c = Qe(i, e);
336
336
  s.setCodecPreferences(c);
337
337
  }
338
338
  Object.keys(n).length > 0 && await ie(s.sender, n);
@@ -340,53 +340,108 @@ const Ce = (n = new Error()) => {
340
340
  if (!de(n) && !Se(n))
341
341
  throw n;
342
342
  return { isSuccessful: !1 };
343
- }, Ze = ({ kind: n, readyState: e }) => n === "video" && e === "live";
344
- class dn {
343
+ }, Ze = ({ kind: n, readyState: e }) => n === "video" && e === "live", en = /* @__PURE__ */ new Set([
344
+ "on",
345
+ "once",
346
+ "onceRace",
347
+ "wait",
348
+ "off",
349
+ "onSession",
350
+ "onceSession",
351
+ "onceRaceSession",
352
+ "waitSession",
353
+ "offSession",
354
+ "sendDTMF",
355
+ "hangUp",
356
+ "declineToIncomingCall",
357
+ "isConfigured",
358
+ "sendChannels",
359
+ "checkTelephony",
360
+ "waitChannels",
361
+ "connection"
362
+ ]);
363
+ class Sn {
345
364
  constructor(e, {
346
365
  preferredMimeTypesVideoCodecs: t,
347
366
  excludeMimeTypesVideoCodecs: s
348
367
  } = {}) {
349
- l(this, "sipConnector");
350
- l(this, "preferredMimeTypesVideoCodecs");
351
- l(this, "excludeMimeTypesVideoCodecs");
352
- l(this, "connectToServer", async (e) => {
368
+ u(this, "sipConnector");
369
+ u(this, "preferredMimeTypesVideoCodecs");
370
+ u(this, "excludeMimeTypesVideoCodecs");
371
+ // @ts-expect-error: proxy method
372
+ u(this, "on");
373
+ // @ts-expect-error: proxy method
374
+ u(this, "once");
375
+ // @ts-expect-error: proxy method
376
+ u(this, "onceRace");
377
+ // @ts-expect-error: proxy method
378
+ u(this, "wait");
379
+ // @ts-expect-error: proxy method
380
+ u(this, "off");
381
+ // @ts-expect-error: proxy method
382
+ u(this, "onSession");
383
+ // @ts-expect-error: proxy method
384
+ u(this, "onceSession");
385
+ // @ts-expect-error: proxy method
386
+ u(this, "onceRaceSession");
387
+ // @ts-expect-error: proxy method
388
+ u(this, "waitSession");
389
+ // @ts-expect-error: proxy method
390
+ u(this, "offSession");
391
+ // @ts-expect-error: proxy method
392
+ u(this, "sendDTMF");
393
+ // @ts-expect-error: proxy method
394
+ u(this, "hangUp");
395
+ // @ts-expect-error: proxy method
396
+ u(this, "declineToIncomingCall");
397
+ // @ts-expect-error: proxy method
398
+ u(this, "isConfigured");
399
+ // @ts-expect-error: proxy method
400
+ u(this, "sendChannels");
401
+ // @ts-expect-error: proxy method
402
+ u(this, "checkTelephony");
403
+ // @ts-expect-error: proxy method
404
+ u(this, "waitChannels");
405
+ // proxy method
406
+ u(this, "connection");
407
+ u(this, "connectToServer", async (e) => {
353
408
  const {
354
409
  userAgent: t,
355
410
  sipWebSocketServerURL: s,
356
- sipServerUrl: r,
357
- remoteAddress: o,
411
+ sipServerUrl: o,
412
+ remoteAddress: r,
358
413
  displayName: i,
359
414
  name: c,
360
- password: u,
415
+ password: l,
361
416
  isRegisteredUser: S,
362
417
  isDisconnectOnFail: C
363
418
  } = e;
364
419
  return a("connectToServer", e), this.sipConnector.connect({
365
420
  userAgent: t,
366
421
  sipWebSocketServerURL: s,
367
- sipServerUrl: r,
368
- remoteAddress: o,
422
+ sipServerUrl: o,
423
+ remoteAddress: r,
369
424
  displayName: i,
370
- password: u,
425
+ password: l,
371
426
  user: c,
372
427
  register: S
373
- }).then((m) => (a("connectToServer then"), { ua: m, isSuccessful: !0 })).catch(async (m) => (a("connectToServer catch: error", m), C === !0 ? this.sipConnector.disconnect().then(() => $(m)).catch(() => $(m)) : $(m)));
428
+ }).then((f) => (a("connectToServer then"), { ua: f, isSuccessful: !0 })).catch(async (f) => (a("connectToServer catch: error", f), C === !0 ? this.sipConnector.disconnect().then(() => $(f)).catch(() => $(f)) : $(f)));
374
429
  });
375
- l(this, "callToServer", async (e) => {
430
+ u(this, "callToServer", async (e) => {
376
431
  const {
377
432
  conference: t,
378
433
  mediaStream: s,
379
- extraHeaders: r,
380
- iceServers: o,
434
+ extraHeaders: o,
435
+ iceServers: r,
381
436
  contentHint: i,
382
437
  simulcastEncodings: c,
383
- degradationPreference: u,
438
+ degradationPreference: l,
384
439
  sendEncodings: S,
385
440
  offerToReceiveAudio: C,
386
- offerToReceiveVideo: m,
441
+ offerToReceiveVideo: f,
387
442
  directionVideo: I,
388
443
  directionAudio: F,
389
- setRemoteStreams: f,
444
+ setRemoteStreams: m,
390
445
  onBeforeProgressCall: p,
391
446
  onSuccessProgressCall: h,
392
447
  onEnterPurgatory: R,
@@ -395,12 +450,12 @@ class dn {
395
450
  onFinishProgressCall: T,
396
451
  onEndedCall: b
397
452
  } = e, _ = this.resolveHandleReadyRemoteStreamsDebounced({
398
- onReadyRemoteStreams: f
453
+ onReadyRemoteStreams: m
399
454
  }), v = this.resolveHandleReadyRemoteStreams({
400
455
  onReadyRemoteStreams: _
401
- }), O = w(
456
+ }), O = P(
402
457
  {
403
- degradationPreference: u
458
+ degradationPreference: l
404
459
  },
405
460
  {
406
461
  preferredMimeTypesVideoCodecs: this.preferredMimeTypesVideoCodecs,
@@ -410,14 +465,14 @@ class dn {
410
465
  a("callToServer", e);
411
466
  const N = async () => (a("startCall"), this.sipConnector.call({
412
467
  mediaStream: s,
413
- extraHeaders: r,
414
- iceServers: o,
468
+ extraHeaders: o,
469
+ iceServers: r,
415
470
  contentHint: i,
416
471
  offerToReceiveAudio: C,
417
- offerToReceiveVideo: m,
472
+ offerToReceiveVideo: f,
418
473
  directionVideo: I,
419
474
  directionAudio: F,
420
- sendEncodings: P({
475
+ sendEncodings: B({
421
476
  mediaStream: s,
422
477
  simulcastEncodings: c,
423
478
  sendEncodings: S
@@ -427,34 +482,34 @@ class dn {
427
482
  ontrack: v
428
483
  }));
429
484
  let M = !1, A;
430
- const B = (a("subscribeEnterConference: onEnterConference", y), R ?? y ? this.sipConnector.onSession("enterRoom", ({ room: d }) => {
485
+ const w = (a("subscribeEnterConference: onEnterConference", y), R ?? y ? this.sipConnector.onSession("enterRoom", ({ room: d }) => {
431
486
  a("enterRoom", { _room: d, isSuccessProgressCall: M }), A = d, D(A) ? R && R() : y && y({ isSuccessProgressCall: M });
432
487
  }) : () => {
433
488
  }), k = (d) => (a("onSuccess"), M = !0, _(), h && h({ isPurgatory: D(A) }), this.sipConnector.onceRaceSession(["ended", "failed"], () => {
434
- B(), b && b();
489
+ w(), b && b();
435
490
  }), d), U = (d) => {
436
- throw a("onFail"), E && E(), B(), d;
491
+ throw a("onFail"), E && E(), w(), d;
437
492
  }, V = () => {
438
493
  a("onFinish"), T && T();
439
494
  };
440
495
  return a("onBeforeProgressCall"), p && p(t), N().then(k).catch((d) => U(d)).finally(V);
441
496
  });
442
- l(this, "disconnectFromServer", async () => this.sipConnector.disconnect().then(() => (a("disconnectFromServer: then"), { isSuccessful: !0 })).catch((e) => (a("disconnectFromServer: catch", e), { isSuccessful: !1 })));
443
- l(this, "answerIncomingCall", async (e) => {
497
+ u(this, "disconnectFromServer", async () => this.sipConnector.disconnect().then(() => (a("disconnectFromServer: then"), { isSuccessful: !0 })).catch((e) => (a("disconnectFromServer: catch", e), { isSuccessful: !1 })));
498
+ u(this, "answerIncomingCall", async (e) => {
444
499
  const {
445
500
  mediaStream: t,
446
501
  extraHeaders: s,
447
- iceServers: r,
448
- contentHint: o,
502
+ iceServers: o,
503
+ contentHint: r,
449
504
  simulcastEncodings: i,
450
505
  degradationPreference: c,
451
- sendEncodings: u,
506
+ sendEncodings: l,
452
507
  offerToReceiveAudio: S,
453
508
  offerToReceiveVideo: C,
454
- directionVideo: m,
509
+ directionVideo: f,
455
510
  directionAudio: I,
456
511
  setRemoteStreams: F,
457
- onBeforeProgressCall: f,
512
+ onBeforeProgressCall: m,
458
513
  onSuccessProgressCall: p,
459
514
  onEnterPurgatory: h,
460
515
  onEnterConference: R,
@@ -465,7 +520,7 @@ class dn {
465
520
  onReadyRemoteStreams: F
466
521
  }), _ = this.resolveHandleReadyRemoteStreams({
467
522
  onReadyRemoteStreams: b
468
- }), v = w(
523
+ }), v = P(
469
524
  {
470
525
  degradationPreference: c
471
526
  },
@@ -478,16 +533,16 @@ class dn {
478
533
  const O = async () => this.sipConnector.answerToIncomingCall({
479
534
  mediaStream: t,
480
535
  extraHeaders: s,
481
- iceServers: r,
482
- contentHint: o,
536
+ iceServers: o,
537
+ contentHint: r,
483
538
  offerToReceiveAudio: S,
484
539
  offerToReceiveVideo: C,
485
- directionVideo: m,
540
+ directionVideo: f,
486
541
  directionAudio: I,
487
- sendEncodings: P({
542
+ sendEncodings: B({
488
543
  mediaStream: t,
489
544
  simulcastEncodings: i,
490
- sendEncodings: u
545
+ sendEncodings: l
491
546
  }),
492
547
  onAddedTransceiver: v,
493
548
  ontrack: _
@@ -496,71 +551,71 @@ class dn {
496
551
  return d.incomingNumber;
497
552
  };
498
553
  let M = !1, A;
499
- const B = (a("subscribeEnterConference: onEnterConference", R), h ?? R ? this.sipConnector.onSession("enterRoom", (d) => {
554
+ const w = (a("subscribeEnterConference: onEnterConference", R), h ?? R ? this.sipConnector.onSession("enterRoom", (d) => {
500
555
  a("enterRoom", { _room: d, isSuccessProgressCall: M }), A = d, D(A) ? h && h() : R && R({ isSuccessProgressCall: M });
501
556
  }) : () => {
502
557
  }), k = (d) => (a("onSuccess"), M = !0, b(), p && p({ isPurgatory: D(A) }), this.sipConnector.onceRaceSession(["ended", "failed"], () => {
503
- B(), T && T();
558
+ w(), T && T();
504
559
  }), d), U = (d) => {
505
- throw a("onFail"), y && y(), B(), d;
560
+ throw a("onFail"), y && y(), w(), d;
506
561
  }, V = () => {
507
562
  a("onFinish"), E && E();
508
563
  };
509
- if (a("onBeforeProgressCall"), f) {
564
+ if (a("onBeforeProgressCall"), m) {
510
565
  const d = N();
511
- f(d);
566
+ m(d);
512
567
  }
513
568
  return O().then(k).catch((d) => U(d)).finally(V);
514
569
  });
515
- l(this, "updatePresentation", async ({
570
+ u(this, "updatePresentation", async ({
516
571
  mediaStream: e,
517
572
  isP2P: t,
518
573
  maxBitrate: s,
519
- contentHint: r,
520
- simulcastEncodings: o,
574
+ contentHint: o,
575
+ simulcastEncodings: r,
521
576
  degradationPreference: i,
522
577
  sendEncodings: c,
523
- preferredMimeTypesVideoCodecs: u,
578
+ preferredMimeTypesVideoCodecs: l,
524
579
  excludeMimeTypesVideoCodecs: S
525
580
  }) => {
526
- const C = w(
581
+ const C = P(
527
582
  {
528
583
  degradationPreference: i
529
584
  },
530
585
  {
531
- preferredMimeTypesVideoCodecs: u,
586
+ preferredMimeTypesVideoCodecs: l,
532
587
  excludeMimeTypesVideoCodecs: S
533
588
  }
534
589
  );
535
590
  return a("updatePresentation"), this.sipConnector.updatePresentation(e, {
536
591
  isP2P: t,
537
592
  maxBitrate: s,
538
- contentHint: r,
539
- sendEncodings: P({
593
+ contentHint: o,
594
+ sendEncodings: B({
540
595
  mediaStream: e,
541
- simulcastEncodings: o,
596
+ simulcastEncodings: r,
542
597
  sendEncodings: c
543
598
  }),
544
599
  onAddedTransceiver: C
545
600
  });
546
601
  });
547
- l(this, "startPresentation", async ({
602
+ u(this, "startPresentation", async ({
548
603
  mediaStream: e,
549
604
  isP2P: t,
550
605
  maxBitrate: s,
551
- contentHint: r,
552
- simulcastEncodings: o,
606
+ contentHint: o,
607
+ simulcastEncodings: r,
553
608
  degradationPreference: i,
554
609
  sendEncodings: c,
555
- preferredMimeTypesVideoCodecs: u,
610
+ preferredMimeTypesVideoCodecs: l,
556
611
  excludeMimeTypesVideoCodecs: S
557
612
  }, C) => {
558
- const m = w(
613
+ const f = P(
559
614
  {
560
615
  degradationPreference: i
561
616
  },
562
617
  {
563
- preferredMimeTypesVideoCodecs: u,
618
+ preferredMimeTypesVideoCodecs: l,
564
619
  excludeMimeTypesVideoCodecs: S
565
620
  }
566
621
  );
@@ -569,51 +624,51 @@ class dn {
569
624
  {
570
625
  isP2P: t,
571
626
  maxBitrate: s,
572
- contentHint: r,
573
- sendEncodings: P({
627
+ contentHint: o,
628
+ sendEncodings: B({
574
629
  mediaStream: e,
575
- simulcastEncodings: o,
630
+ simulcastEncodings: r,
576
631
  sendEncodings: c
577
632
  }),
578
- onAddedTransceiver: m
633
+ onAddedTransceiver: f
579
634
  },
580
635
  C
581
636
  );
582
637
  });
583
- l(this, "stopShareSipConnector", async ({ isP2P: e = !1 } = {}) => (a("stopShareSipConnector"), this.sipConnector.stopPresentation({
638
+ u(this, "stopShareSipConnector", async ({ isP2P: e = !1 } = {}) => (a("stopShareSipConnector"), this.sipConnector.stopPresentation({
584
639
  isP2P: e
585
640
  }).catch((t) => {
586
641
  a(t);
587
642
  })));
588
- l(this, "sendRefusalToTurnOnMic", async () => {
643
+ u(this, "sendRefusalToTurnOnMic", async () => {
589
644
  if (this.sipConnector.isCallActive)
590
645
  return a("sendRefusalToTurnOnMic"), this.sipConnector.sendRefusalToTurnOnMic().catch((e) => {
591
646
  a("sendRefusalToTurnOnMic: error", e);
592
647
  });
593
648
  });
594
- l(this, "sendRefusalToTurnOnCam", async () => {
649
+ u(this, "sendRefusalToTurnOnCam", async () => {
595
650
  if (this.sipConnector.isCallActive)
596
651
  return a("sendRefusalToTurnOnCam"), this.sipConnector.sendRefusalToTurnOnCam().catch((e) => {
597
652
  a("sendRefusalToTurnOnCam: error", e);
598
653
  });
599
654
  });
600
- l(this, "sendMediaState", async ({
655
+ u(this, "sendMediaState", async ({
601
656
  isEnabledCam: e,
602
657
  isEnabledMic: t
603
658
  }) => {
604
659
  if (this.sipConnector.isCallActive)
605
660
  return a("sendMediaState"), this.sipConnector.sendMediaState({ cam: e, mic: t });
606
661
  });
607
- l(this, "replaceMediaStream", async (e, {
662
+ u(this, "replaceMediaStream", async (e, {
608
663
  deleteExisting: t,
609
664
  addMissing: s,
610
- forceRenegotiation: r,
611
- contentHint: o,
665
+ forceRenegotiation: o,
666
+ contentHint: r,
612
667
  simulcastEncodings: i,
613
668
  degradationPreference: c,
614
- sendEncodings: u
669
+ sendEncodings: l
615
670
  } = {}) => {
616
- const S = w(
671
+ const S = P(
617
672
  {
618
673
  degradationPreference: c
619
674
  },
@@ -625,56 +680,65 @@ class dn {
625
680
  return a("replaceMediaStream"), this.sipConnector.replaceMediaStream(e, {
626
681
  deleteExisting: t,
627
682
  addMissing: s,
628
- forceRenegotiation: r,
629
- contentHint: o,
630
- sendEncodings: P({
683
+ forceRenegotiation: o,
684
+ contentHint: r,
685
+ sendEncodings: B({
631
686
  mediaStream: e,
632
687
  simulcastEncodings: i,
633
- sendEncodings: u
688
+ sendEncodings: l
634
689
  }),
635
690
  onAddedTransceiver: S
636
691
  });
637
692
  });
638
- l(this, "askPermissionToEnableCam", async () => {
693
+ u(this, "askPermissionToEnableCam", async () => {
639
694
  if (this.sipConnector.isCallActive)
640
695
  return a("askPermissionToEnableCam"), this.sipConnector.askPermissionToEnableCam();
641
696
  });
642
- l(this, "resolveHandleReadyRemoteStreamsDebounced", ({
697
+ u(this, "resolveHandleReadyRemoteStreamsDebounced", ({
643
698
  onReadyRemoteStreams: e
644
- }) => me(() => {
699
+ }) => fe(() => {
645
700
  const t = this.sipConnector.getRemoteStreams();
646
701
  a("remoteStreams", t), t && e(t);
647
702
  }, 200));
648
- l(this, "resolveHandleReadyRemoteStreams", ({
703
+ u(this, "resolveHandleReadyRemoteStreams", ({
649
704
  onReadyRemoteStreams: e
650
705
  }) => ({ track: t }) => {
651
706
  Ze(t) && e();
652
707
  });
653
- l(this, "getRemoteStreams", () => (a("getRemoteStreams"), this.sipConnector.getRemoteStreams()));
654
- l(this, "onUseLicense", (e) => (a("onUseLicense"), this.sipConnector.onSession("useLicense", e)));
655
- l(this, "onMustStopPresentation", (e) => (a("onMustStopPresentation"), this.sipConnector.onSession("mustStopPresentation", e)));
656
- l(this, "onMoveToSpectators", (e) => (a("onMoveToSpectators"), this.sipConnector.onSession(ce, e)));
657
- l(this, "onMoveToParticipants", (e) => (a("onMoveToParticipants"), this.sipConnector.onSession(ae, e)));
658
- this.sipConnector = e, this.preferredMimeTypesVideoCodecs = t, this.excludeMimeTypesVideoCodecs = s;
708
+ u(this, "getRemoteStreams", () => (a("getRemoteStreams"), this.sipConnector.getRemoteStreams()));
709
+ u(this, "onUseLicense", (e) => (a("onUseLicense"), this.sipConnector.onSession("useLicense", e)));
710
+ u(this, "onMustStopPresentation", (e) => (a("onMustStopPresentation"), this.sipConnector.onSession("mustStopPresentation", e)));
711
+ u(this, "onMoveToSpectators", (e) => (a("onMoveToSpectators"), this.sipConnector.onSession(ce, e)));
712
+ u(this, "onMoveToParticipants", (e) => (a("onMoveToParticipants"), this.sipConnector.onSession(ae, e)));
713
+ return this.preferredMimeTypesVideoCodecs = t, this.excludeMimeTypesVideoCodecs = s, this.sipConnector = e, new Proxy(this, {
714
+ get: (o, r, i) => {
715
+ if (typeof r == "string" && en.has(r) && r in this.sipConnector) {
716
+ const l = Reflect.get(this.sipConnector, r, this.sipConnector);
717
+ return typeof l == "function" ? l.bind(this.sipConnector) : l;
718
+ }
719
+ const c = Reflect.get(o, r, i);
720
+ return typeof c == "function" ? c.bind(o) : c;
721
+ }
722
+ });
659
723
  }
660
724
  }
661
725
  export {
662
- L as EEventsMainCAM,
663
- Cn as EEventsMic,
664
- fn as EEventsSyncMediaState,
665
- hn as EMimeTypesVideoCodecs,
666
- Rn as EUseLicense,
667
- dn as SipConnectorFacade,
668
- gn as causes,
669
- pn as constants,
670
- An as debug,
671
- tn as default,
672
- yn as disableDebug,
673
- En as enableDebug,
674
- Tn as eventNames,
726
+ x as EEventsMainCAM,
727
+ mn as EEventsMic,
728
+ hn as EEventsSyncMediaState,
729
+ Rn as EMimeTypesVideoCodecs,
730
+ gn as EUseLicense,
731
+ Sn as SipConnectorFacade,
732
+ pn as causes,
733
+ yn as constants,
734
+ _n as debug,
735
+ sn as default,
736
+ En as disableDebug,
737
+ Tn as enableDebug,
738
+ bn as eventNames,
675
739
  De as getCodecFromSender,
676
- bn as hasCanceledCallError,
677
- ln as resolveVideoSendingBalancer,
740
+ Mn as hasCanceledCallError,
741
+ dn as resolveVideoSendingBalancer,
678
742
  ie as setParametersToSender,
679
- un as tools
743
+ ln as tools
680
744
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sip-connector",
3
- "version": "13.0.0",
3
+ "version": "13.2.0",
4
4
  "description": "Module for connect to Vinteo server",
5
5
  "keywords": [
6
6
  "webrtc",
@@ -64,7 +64,7 @@
64
64
  "dependencies": {
65
65
  "@krivega/cancelable-promise": "^1.1.3",
66
66
  "@krivega/jssip": "^5.1.0",
67
- "debug": "^4.3.7",
67
+ "debug": "^4.4.0",
68
68
  "events-constructor": "^1.3.0",
69
69
  "repeated-calls": "^2.3.0",
70
70
  "sequent-promises": "^2.0.1",
@@ -87,7 +87,7 @@
87
87
  "eslint-config-airbnb-base": "^15.0.0",
88
88
  "eslint-config-airbnb-typescript": "^18.0.0",
89
89
  "eslint-config-prettier": "^9.1.0",
90
- "eslint-import-resolver-typescript": "^3.6.3",
90
+ "eslint-import-resolver-typescript": "^3.7.0",
91
91
  "eslint-plugin-flowtype": "^8.0.3",
92
92
  "eslint-plugin-import": "^2.31.0",
93
93
  "eslint-plugin-jest": "^28.9.0",
@@ -99,20 +99,20 @@
99
99
  "jest-extended": "^4.0.2",
100
100
  "jest-junit": "^16.0.0",
101
101
  "lint-staged": "^15.2.10",
102
- "prettier": "^3.4.1",
102
+ "prettier": "^3.4.2",
103
103
  "standard-version": "^9.5.0",
104
104
  "ts-jest": "^29.2.5",
105
105
  "ts-node": "^10.9.2",
106
106
  "tsc-files": "^1.1.4",
107
107
  "typescript": "^5.7.2",
108
- "vite": "^6.0.2",
108
+ "vite": "^6.0.3",
109
109
  "vite-plugin-dts": "^4.3.0",
110
- "vite-tsconfig-paths": "^5.1.3"
110
+ "vite-tsconfig-paths": "^5.1.4"
111
111
  },
112
112
  "peerDependencies": {
113
113
  "@krivega/cancelable-promise": "^1.1.3",
114
114
  "@krivega/jssip": "^5.1.0",
115
- "debug": "^4.3.7",
115
+ "debug": "^4.4.0",
116
116
  "events-constructor": "^1.3.0",
117
117
  "repeated-calls": "^2.2.1",
118
118
  "sequent-promises": "^2.0.1",