sip-connector 14.1.0-alpha.12 → 14.1.0-alpha.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require("events-constructor");const i=require("./@SipConnector-Xh6_JpUI.cjs"),W=require("@krivega/cancelable-promise"),ce=require("repeated-calls"),ae=require("ts-debounce"),_=require("debug"),le=require("sequent-promises"),ue=require("stack-promises"),de=e=>e instanceof Object&&("originator"in e||"cause"in e),ge=e=>{if(W.isCanceledError(e))return!0;if(!de(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},fe=(e,n)=>(e.degradationPreference=n.degradationPreference,e),Ce=(e,n)=>{e.encodings??=[];for(let t=e.encodings.length;t<n;t+=1)e.encodings.push({});return e},G=e=>(n,t)=>t!==void 0&&n!==t||t===void 0&&n!==e,he=G(),Se=(e,n)=>{if(he(e,n))return e},me=(e,n)=>{const t=e.maxBitrate,o=Se(n,t);return o!==void 0&&(e.maxBitrate=o),e},K=1,Re=G(K),pe=(e,n)=>{const t=e===void 0?void 0:Math.max(e,K);if(t!==void 0&&Re(t,n))return t},ye=(e,n)=>{const t=e.scaleResolutionDownBy,o=pe(n,t);return o!==void 0&&(e.scaleResolutionDownBy=o),e},Ee=(e,n)=>{const t=n.encodings?.length??0;return Ce(e,t),e.encodings.forEach((o,r)=>{const s=(n?.encodings??[])[r],c=s?.maxBitrate,a=s?.scaleResolutionDownBy;me(o,c),ye(o,a)}),e},Te=(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));Ee(t,n),fe(t,n);const r=Te(o,t);return r&&await e.setParameters(t),{parameters:t,isChanged:r}},ve=e=>e.getVideoTracks()[0],Me=1e6,m=e=>e*Me,Y=m(.06),be=m(4),_e=e=>e<=64?Y: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):be,z=(e,n)=>e!==void 0&&n!==void 0&&e.toLowerCase().includes(n.toLowerCase()),Ae="av1",Oe=e=>z(e,Ae),Ne=.6,Q=(e,n)=>Oe(n)?e*Ne:e,Be=e=>Q(Y,e),Z=(e,n)=>{const t=_e(e);return Q(t,n)},H=1,ee=({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=Z(n.width,t);return{scaleResolutionDownBy:l,maxBitrate:d}},w=({mediaStream:e,simulcastEncodings:n,sendEncodings:t})=>{if(n&&n.length>0){const o=t??[],r=ve(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}=ee({videoTrack:r,targetSize:{width:s.width,height:s.height}});a.maxBitrate=l,a.scaleResolutionDownBy=d,o[c]=a}),o}return t},ne="purgatory",P=e=>e===ne,we=(e,n)=>e.filter(o=>n.some(r=>r.clockRate===o.clockRate&&r.mimeType===o.mimeType&&r.channels===o.channels&&r.sdpFmtpLine===o.sdpFmtpLine)),De=e=>{const n=RTCRtpSender.getCapabilities(e),t=RTCRtpReceiver.getCapabilities(e),o=n===null?[]:n.codecs,r=t===null?[]:t.codecs;return we(o,r)},Pe=(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}),Ie=(e,n)=>n===void 0||n.length===0?e:e.filter(t=>!n.includes(t.mimeType)),xe=(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=De("video"),r=Ie(o,t),s=Pe(r,n);e.setCodecPreferences(s)}},D=(e,{preferredMimeTypesVideoCodecs:n,excludeMimeTypesVideoCodecs:t})=>async o=>{try{xe(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(!W.isCanceledError(e)&&!ce.hasCanceledError(e))throw e;return{isSuccessful:!1}},Fe=({kind:e,readyState:n})=>e==="video"&&n==="live",Ue=new Set(["on","once","onceRace","wait","off","sendDTMF","hangUp","declineToIncomingCall","sendChannels","checkTelephony","waitChannels","ping","connection","isConfigured","isRegistered"]);class ke{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"&&Ue.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})=>ae.debounce(()=>{const t=this.sipConnector.getRemoteStreams();i.logger("remoteStreams",t),t&&n(t)},200);resolveHandleReadyRemoteStreams=({onReadyRemoteStreams:n})=>({track:t})=>{Fe(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 te=(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))(te||{});const Ve=new Error("Unknown error"),Le=(e=Ve)=>{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},He=e=>{let n="";try{n=JSON.stringify(e)}catch(t){i.logger("failed to stringify message",t)}return n},$e=new Error("Unknown error"),qe=(e=$e)=>{const{code:n,cause:t,message:o}=e,r=U(e),s={code:"",cause:"",message:""};return typeof o=="object"&&o!==null?s.message=He(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},Je=Object.freeze(Object.defineProperty({__proto__:null,EErrorTypes:te,getLinkError:U,getTypeFromError:Le,getValuesFromError:qe},Symbol.toStringTag,{value:"Module"})),Xe=({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},je="[@*!|]",We="_",Ge=e=>{let n=e;return n=n.replaceAll(new RegExp(je,"g"),We),n},Ke=({appName:e,appVersion:n,browserName:t,browserVersion:o})=>{const s=`${Ge(e)} ${n}`;return`ChromeNew - ${t===void 0?s:`${t} ${o}, ${s}`}`},Ye=({isUnifiedSdpSemantic:e,appVersion:n,browserName:t,browserVersion:o,appName:r})=>e?Ke({appVersion:n,browserName:t,browserVersion:o,appName:r}):"Chrome",ze=e=>n=>[...n].map(o=>async()=>e(o)),Qe=async({accumulatedKeys:e,sendKey:n,canRunTask:t})=>{const r=ze(n)(e);return le.sequentPromises(r,t)},Ze=e=>t=>(i.logger("onStartMainCam"),e.on("api:admin-start-main-cam",t)),en=e=>t=>(i.logger("onStartMic"),e.on("api:admin-start-mic",t)),nn=e=>t=>(i.logger("onStopMainCam"),e.on("api:admin-stop-main-cam",t)),tn=e=>t=>(i.logger("onStopMic"),e.on("api:admin-stop-mic",t)),on=({sipConnector:e})=>{const n=(C,R)=>({isSyncForced:h})=>{if(h===!0){C();return}R()},t=Ze(e),o=nn(e),r=en(e),s=tn(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()}}},rn=Object.freeze(Object.defineProperty({__proto__:null,PURGATORY_CONFERENCE_NUMBER:ne,createSyncMediaState:on,error:Je,getExtraHeaders:Xe,getUserAgent:Ye,hasPurgatory:P,sendDtmfAccumulated:Qe},Symbol.toStringTag,{value:"Module"}));var oe=(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))(oe||{});const sn=e=>[...e.keys()].map(n=>e.get(n)),cn=(e,n)=>sn(e).find(t=>t?.type===n),re=async e=>e.getStats().then(n=>cn(n,"codec")?.mimeType),an=e=>e.find(n=>n.track?.kind==="video"),ln=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}},se=ue.createStackPromises(),un=async()=>se().catch(e=>{i.logger("videoSendingBalancer: error",e)}),dn=async e=>(se.add(e),un()),J=async({sender:e,scaleResolutionDownBy:n,maxBitrate:t,onSetParameters:o})=>dn(async()=>ln(e,{scaleResolutionDownBy:n,maxBitrate:t},o)),gn=async({sender:e,codec:n},t)=>{const r=Be(n);return J({sender:e,maxBitrate:r,onSetParameters:t,scaleResolutionDownBy:200})},F=async({sender:e,videoTrack:n,codec:t},o)=>{const c=n.getSettings().width,a=Z(c??0,t);return J({sender:e,maxBitrate:a,onSetParameters:o,scaleResolutionDownBy:1})},fn=async({sender:e,videoTrack:n,resolution:t,codec:o},r)=>{const[s,c]=t.split("x"),{maxBitrate:a,scaleResolutionDownBy:l}=ee({videoTrack:n,codec:o,targetSize:{width:Number(s),height:Number(c)}});return J({sender:e,maxBitrate:a,onSetParameters:r,scaleResolutionDownBy:l})},Cn=async({mainCam:e,resolutionMainCam:n,sender:t,videoTrack:o,codec:r},s)=>{switch(e){case i.EEventsMainCAM.PAUSE_MAIN_CAM:return gn({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?fn({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)}},X={isChanged:!1,parameters:{encodings:[{}],transactionId:"0",codecs:[],headerExtensions:[],rtcp:{}}},j=async({mainCam:e,resolutionMainCam:n,connection:t,onSetParameters:o,ignoreForCodec:r})=>{const s=t.getSenders(),c=an(s);if(!c?.track)return X;const a=await re(c);return z(a,r)?X:Cn({mainCam:e,resolutionMainCam:n,sender:c,codec:a,videoTrack:c.track},o)},hn=(e,{ignoreForCodec:n,onSetParameters:t}={})=>{const o=async()=>{const{connection:l}=e;if(!l)throw new Error("connection is not exist");return j({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 j({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=oe;exports.SipConnectorFacade=ke;exports.getCodecFromSender=re;exports.hasCanceledCallError=ge;exports.resolveVideoSendingBalancer=hn;exports.setParametersToSender=q;exports.tools=rn;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require("events-constructor");const i=require("./@SipConnector-Xh6_JpUI.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;
package/dist/index.js CHANGED
@@ -1,53 +1,53 @@
1
1
  import "events-constructor";
2
- import { E as y, O as ce, l as i, a as w } from "./@SipConnector-C-ThpS1P.js";
3
- import { b as Nn, S as Bn, d as wn, e as Dn, h as Pn } from "./@SipConnector-C-ThpS1P.js";
4
- import { isCanceledError as K } from "@krivega/cancelable-promise";
5
- import { hasCanceledError as ae } from "repeated-calls";
6
- import { debounce as ue } from "ts-debounce";
7
- import I from "debug";
8
- import { default as xn } from "debug";
9
- import { sequentPromises as de } from "sequent-promises";
10
- import { createStackPromises as le } from "stack-promises";
11
- const fe = (e) => e instanceof Object && ("originator" in e || "cause" in e), vn = (e) => {
12
- if (K(e))
2
+ import { E as y, O as ae, l as i, a as w } from "./@SipConnector-C-ThpS1P.js";
3
+ import { b as Bn, S as wn, d as Dn, e as Pn, h as xn } from "./@SipConnector-C-ThpS1P.js";
4
+ import { isCanceledError as Y } from "@krivega/cancelable-promise";
5
+ import { hasCanceledError as ue } from "repeated-calls";
6
+ import { debounce as de } from "ts-debounce";
7
+ import x from "debug";
8
+ import { default as Fn } from "debug";
9
+ import { sequentPromises as le } from "sequent-promises";
10
+ import { createStackPromises as fe } from "stack-promises";
11
+ const he = (e) => e instanceof Object && ("originator" in e || "cause" in e), Mn = (e) => {
12
+ if (Y(e))
13
13
  return !0;
14
- if (!fe(e))
14
+ if (!he(e))
15
15
  return !1;
16
16
  const { originator: n, cause: t } = e;
17
- return typeof t == "string" ? t === y.REQUEST_TIMEOUT || t === y.REJECTED || n === ce.LOCAL && (t === y.CANCELED || t === y.BYE) : !1;
18
- }, he = (e, n) => (e.degradationPreference = n.degradationPreference, e), ge = (e, n) => {
17
+ return typeof t == "string" ? t === y.REQUEST_TIMEOUT || t === y.REJECTED || n === ae.LOCAL && (t === y.CANCELED || t === y.BYE) : !1;
18
+ }, ge = (e, n) => (e.degradationPreference = n.degradationPreference, e), Ce = (e, n) => {
19
19
  e.encodings ??= [];
20
20
  for (let t = e.encodings.length; t < n; t += 1)
21
21
  e.encodings.push({});
22
22
  return e;
23
- }, Y = (e) => (n, t) => t !== void 0 && n !== t || t === void 0 && n !== e, Ce = Y(), Se = (e, n) => {
24
- if (Ce(e, n))
23
+ }, q = (e) => (n, t) => t !== void 0 && n !== t || t === void 0 && n !== e, Se = q(), me = (e, n) => {
24
+ if (Se(e, n))
25
25
  return e;
26
- }, me = (e, n) => {
27
- const t = e.maxBitrate, o = Se(n, t);
26
+ }, Re = (e, n) => {
27
+ const t = e.maxBitrate, o = me(n, t);
28
28
  return o !== void 0 && (e.maxBitrate = o), e;
29
- }, q = 1, Re = Y(
30
- q
31
- ), pe = (e, n) => {
32
- const t = e === void 0 ? void 0 : Math.max(e, q);
33
- if (t !== void 0 && Re(
29
+ }, z = 1, pe = q(
30
+ z
31
+ ), ye = (e, n) => {
32
+ const t = e === void 0 ? void 0 : Math.max(e, z);
33
+ if (t !== void 0 && pe(
34
34
  t,
35
35
  n
36
36
  ))
37
37
  return t;
38
- }, ye = (e, n) => {
39
- const t = e.scaleResolutionDownBy, o = pe(
38
+ }, Ee = (e, n) => {
39
+ const t = e.scaleResolutionDownBy, o = ye(
40
40
  n,
41
41
  t
42
42
  );
43
43
  return o !== void 0 && (e.scaleResolutionDownBy = o), e;
44
- }, Ee = (e, n) => {
44
+ }, Te = (e, n) => {
45
45
  const t = n.encodings?.length ?? 0;
46
- return ge(e, t), e.encodings.forEach((o, s) => {
46
+ return Ce(e, t), e.encodings.forEach((o, s) => {
47
47
  const r = (n?.encodings ?? [])[s], c = r?.maxBitrate, a = r?.scaleResolutionDownBy;
48
- me(o, c), ye(o, a);
48
+ Re(o, c), Ee(o, a);
49
49
  }), e;
50
- }, Te = (e, n) => {
50
+ }, ve = (e, n) => {
51
51
  if (e.codecs?.length !== n.codecs?.length)
52
52
  return !0;
53
53
  for (let t = 0; t < (e.codecs?.length ?? 0); t++)
@@ -64,22 +64,22 @@ const fe = (e) => e instanceof Object && ("originator" in e || "cause" in e), vn
64
64
  if (JSON.stringify(e.encodings[t]) !== JSON.stringify(n.encodings[t]))
65
65
  return !0;
66
66
  return e.rtcp?.cname !== n.rtcp?.cname || e.rtcp?.reducedSize !== n.rtcp?.reducedSize || e.degradationPreference !== n.degradationPreference;
67
- }, z = async (e, n) => {
67
+ }, Q = async (e, n) => {
68
68
  const t = e.getParameters(), o = JSON.parse(
69
69
  JSON.stringify(t)
70
70
  );
71
- Ee(t, n), he(t, n);
72
- const s = Te(o, t);
71
+ Te(t, n), ge(t, n);
72
+ const s = ve(o, t);
73
73
  return s && await e.setParameters(t), { parameters: t, isChanged: s };
74
- }, ve = (e) => e.getVideoTracks()[0], Me = 1e6, m = (e) => e * Me, Q = m(0.06), be = m(4), _e = (e) => e <= 64 ? Q : e <= 128 ? m(0.12) : e <= 256 ? m(0.25) : e <= 384 ? m(0.32) : e <= 426 ? m(0.38) : e <= 640 ? m(0.5) : e <= 848 ? m(0.7) : e <= 1280 ? m(1) : e <= 1920 ? m(2) : be, Z = (e, n) => e !== void 0 && n !== void 0 && e.toLowerCase().includes(n.toLowerCase()), Ae = "av1", Oe = (e) => Z(e, Ae), Ne = 0.6, ee = (e, n) => Oe(n) ? e * Ne : e, Be = (e) => ee(Q, e), ne = (e, n) => {
74
+ }, Me = (e) => e.getVideoTracks()[0], be = 1e6, m = (e) => e * be, Z = m(0.06), ee = m(4), _e = (e) => e <= 64 ? Z : e <= 128 ? m(0.12) : e <= 256 ? m(0.25) : e <= 384 ? m(0.32) : e <= 426 ? m(0.38) : e <= 640 ? m(0.5) : e <= 848 ? m(0.7) : e <= 1280 ? m(1) : e <= 1920 ? m(2) : ee, ne = (e, n) => e !== void 0 && n !== void 0 && e.toLowerCase().includes(n.toLowerCase()), Ae = "av1", Oe = (e) => ne(e, Ae), Ne = 0.6, W = (e, n) => Oe(n) ? e * Ne : e, Be = (e) => W(Z, e), we = (e) => W(ee, e), te = (e, n) => {
75
75
  const t = _e(e);
76
- return ee(t, n);
77
- }, J = 1, te = ({
76
+ return W(t, n);
77
+ }, J = 1, oe = ({
78
78
  videoTrack: e,
79
79
  targetSize: n,
80
80
  codec: t
81
81
  }) => {
82
- const o = e.getSettings(), s = o.width, r = o.height, c = s === void 0 ? J : s / n.width, a = r === void 0 ? J : r / n.height, u = Math.max(c, a, J), l = ne(n.width, t);
82
+ const o = e.getSettings(), s = o.width, r = o.height, c = s === void 0 ? J : s / n.width, a = r === void 0 ? J : r / n.height, u = Math.max(c, a, J), l = te(n.width, t);
83
83
  return { scaleResolutionDownBy: u, maxBitrate: l };
84
84
  }, D = ({
85
85
  mediaStream: e,
@@ -87,13 +87,13 @@ const fe = (e) => e instanceof Object && ("originator" in e || "cause" in e), vn
87
87
  sendEncodings: t
88
88
  }) => {
89
89
  if (n && n.length > 0) {
90
- const o = t ?? [], s = ve(e);
90
+ const o = t ?? [], s = Me(e);
91
91
  if (s === void 0)
92
92
  throw new Error("No video track");
93
93
  return n.forEach((r, c) => {
94
94
  const a = o[c] ?? {};
95
95
  a.active = !0, r.rid !== void 0 && (a.rid = r.rid), r.scalabilityMode !== void 0 && (a.scalabilityMode = r.scalabilityMode);
96
- const { maxBitrate: u, scaleResolutionDownBy: l } = te({
96
+ const { maxBitrate: u, scaleResolutionDownBy: l } = oe({
97
97
  videoTrack: s,
98
98
  targetSize: {
99
99
  width: r.width,
@@ -104,18 +104,18 @@ const fe = (e) => e instanceof Object && ("originator" in e || "cause" in e), vn
104
104
  }), o;
105
105
  }
106
106
  return t;
107
- }, oe = "purgatory", x = (e) => e === oe, we = (e, n) => e.filter((o) => n.some((s) => s.clockRate === o.clockRate && s.mimeType === o.mimeType && s.channels === o.channels && s.sdpFmtpLine === o.sdpFmtpLine)), De = (e) => {
107
+ }, se = "purgatory", I = (e) => e === se, De = (e, n) => e.filter((o) => n.some((s) => s.clockRate === o.clockRate && s.mimeType === o.mimeType && s.channels === o.channels && s.sdpFmtpLine === o.sdpFmtpLine)), Pe = (e) => {
108
108
  const n = RTCRtpSender.getCapabilities(e), t = RTCRtpReceiver.getCapabilities(e), o = n === null ? [] : n.codecs, s = t === null ? [] : t.codecs;
109
- return we(o, s);
110
- }, Pe = (e, n) => n === void 0 || n.length === 0 ? e : e.sort((t, o) => {
109
+ return De(o, s);
110
+ }, xe = (e, n) => n === void 0 || n.length === 0 ? e : e.sort((t, o) => {
111
111
  const s = n.indexOf(t.mimeType), r = n.indexOf(o.mimeType), c = s === -1 ? Number.MAX_VALUE : s, a = r === -1 ? Number.MAX_VALUE : r;
112
112
  return c - a;
113
- }), Ie = (e, n) => n === void 0 || n.length === 0 ? e : e.filter((t) => !n.includes(t.mimeType)), xe = (e, {
113
+ }), Ie = (e, n) => n === void 0 || n.length === 0 ? e : e.filter((t) => !n.includes(t.mimeType)), Fe = (e, {
114
114
  preferredMimeTypesVideoCodecs: n,
115
115
  excludeMimeTypesVideoCodecs: t
116
116
  }) => {
117
117
  if (typeof e.setCodecPreferences == "function" && e.sender.track?.kind === "video" && (n !== void 0 && n.length > 0 || t !== void 0 && t.length > 0)) {
118
- const o = De("video"), s = Ie(o, t), r = Pe(s, n);
118
+ const o = Pe("video"), s = Ie(o, t), r = xe(s, n);
119
119
  e.setCodecPreferences(r);
120
120
  }
121
121
  }, P = (e, {
@@ -123,18 +123,18 @@ const fe = (e) => e instanceof Object && ("originator" in e || "cause" in e), vn
123
123
  excludeMimeTypesVideoCodecs: t
124
124
  }) => async (o) => {
125
125
  try {
126
- xe(o, {
126
+ Fe(o, {
127
127
  preferredMimeTypesVideoCodecs: n,
128
128
  excludeMimeTypesVideoCodecs: t
129
- }), Object.values(e).filter((r) => r != null).length > 0 && (i("updateTransceiver setParametersToSender", e), await z(o.sender, e));
129
+ }), Object.values(e).filter((r) => r != null).length > 0 && (i("updateTransceiver setParametersToSender", e), await Q(o.sender, e));
130
130
  } catch (s) {
131
131
  i("updateTransceiver error", s);
132
132
  }
133
133
  }, X = (e) => {
134
- if (!K(e) && !ae(e))
134
+ if (!Y(e) && !ue(e))
135
135
  throw e;
136
136
  return { isSuccessful: !1 };
137
- }, Fe = ({ kind: e, readyState: n }) => e === "video" && n === "live", Ue = /* @__PURE__ */ new Set([
137
+ }, Ue = ({ kind: e, readyState: n }) => e === "video" && n === "live", ke = /* @__PURE__ */ new Set([
138
138
  "on",
139
139
  "once",
140
140
  "onceRace",
@@ -151,7 +151,7 @@ const fe = (e) => e instanceof Object && ("originator" in e || "cause" in e), vn
151
151
  "isConfigured",
152
152
  "isRegistered"
153
153
  ]);
154
- class Mn {
154
+ class bn {
155
155
  // @ts-expect-error: proxy method
156
156
  on;
157
157
  // @ts-expect-error: proxy method
@@ -191,7 +191,7 @@ class Mn {
191
191
  } = {}) {
192
192
  return this.preferredMimeTypesVideoCodecs = t, this.excludeMimeTypesVideoCodecs = o, this.sipConnector = n, new Proxy(this, {
193
193
  get: (s, r, c) => {
194
- if (typeof r == "string" && Ue.has(r) && r in this.sipConnector) {
194
+ if (typeof r == "string" && ke.has(r) && r in this.sipConnector) {
195
195
  const u = Reflect.get(this.sipConnector, r, this.sipConnector);
196
196
  return typeof u == "function" ? u.bind(this.sipConnector) : u;
197
197
  }
@@ -249,7 +249,7 @@ class Mn {
249
249
  onReadyRemoteStreams: g
250
250
  }), A = this.resolveHandleReadyRemoteStreams({
251
251
  onReadyRemoteStreams: () => {
252
- _().catch(I);
252
+ _().catch(x);
253
253
  }
254
254
  }), O = P(
255
255
  {
@@ -281,9 +281,9 @@ class Mn {
281
281
  }));
282
282
  let M = !1, b;
283
283
  const B = (i("subscribeEnterConference: onEnterConference", p), S ?? p ? this.sipConnector.on("api:enterRoom", ({ room: d }) => {
284
- i("enterRoom", { _room: d, isSuccessProgressCall: M }), b = d, x(b) ? S && S() : p && p({ isSuccessProgressCall: M });
284
+ i("enterRoom", { _room: d, isSuccessProgressCall: M }), b = d, I(b) ? S && S() : p && p({ isSuccessProgressCall: M });
285
285
  }) : () => {
286
- }), L = (d) => (i("onSuccess"), M = !0, _().catch(I), C && C({ isPurgatory: x(b) }), this.sipConnector.onceRace(["call:ended", "call:failed"], () => {
286
+ }), L = (d) => (i("onSuccess"), M = !0, _().catch(x), C && C({ isPurgatory: I(b) }), this.sipConnector.onceRace(["call:ended", "call:failed"], () => {
287
287
  B(), v && v();
288
288
  }), d), H = (d) => {
289
289
  throw i("onFail"), E && E(), B(), d;
@@ -318,7 +318,7 @@ class Mn {
318
318
  onReadyRemoteStreams: U
319
319
  }), _ = this.resolveHandleReadyRemoteStreams({
320
320
  onReadyRemoteStreams: () => {
321
- v().catch(I);
321
+ v().catch(x);
322
322
  }
323
323
  }), A = P(
324
324
  {
@@ -352,9 +352,9 @@ class Mn {
352
352
  };
353
353
  let M = !1, b;
354
354
  const B = (i("subscribeEnterConference: onEnterConference", S), C ?? S ? this.sipConnector.on("api:enterRoom", (d) => {
355
- i("enterRoom", { _room: d, isSuccessProgressCall: M }), b = d, x(b) ? C && C() : S && S({ isSuccessProgressCall: M });
355
+ i("enterRoom", { _room: d, isSuccessProgressCall: M }), b = d, I(b) ? C && C() : S && S({ isSuccessProgressCall: M });
356
356
  }) : () => {
357
- }), L = (d) => (i("onSuccess"), M = !0, v().catch(I), R && R({ isPurgatory: x(b) }), this.sipConnector.onceRace(["call:ended", "call:failed"], () => {
357
+ }), L = (d) => (i("onSuccess"), M = !0, v().catch(x), R && R({ isPurgatory: I(b) }), this.sipConnector.onceRace(["call:ended", "call:failed"], () => {
358
358
  B(), T && T();
359
359
  }), d), H = (d) => {
360
360
  throw i("onFail"), p && p(), B(), d;
@@ -490,7 +490,7 @@ class Mn {
490
490
  };
491
491
  resolveHandleReadyRemoteStreamsDebounced = ({
492
492
  onReadyRemoteStreams: n
493
- }) => ue(() => {
493
+ }) => de(() => {
494
494
  const t = this.sipConnector.getRemoteStreams();
495
495
  i("remoteStreams", t), t && n(t);
496
496
  }, 200);
@@ -498,7 +498,7 @@ class Mn {
498
498
  resolveHandleReadyRemoteStreams = ({
499
499
  onReadyRemoteStreams: n
500
500
  }) => ({ track: t }) => {
501
- Fe(t) && n();
501
+ Ue(t) && n();
502
502
  };
503
503
  getRemoteStreams = () => (i("getRemoteStreams"), this.sipConnector.getRemoteStreams());
504
504
  onUseLicense = (n) => (i("onUseLicense"), this.sipConnector.on("api:useLicense", n));
@@ -511,8 +511,8 @@ const V = (e) => {
511
511
  let o = n;
512
512
  return (t === y.BAD_MEDIA_DESCRIPTION || t === y.NOT_FOUND) && (o = `${e.message.to.uri.user}@${e.message.to.uri.host}`), o;
513
513
  };
514
- var se = /* @__PURE__ */ ((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))(se || {});
515
- const ke = new Error("Unknown error"), Ve = (e = ke) => {
514
+ var re = /* @__PURE__ */ ((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))(re || {});
515
+ const Ve = new Error("Unknown error"), Le = (e = Ve) => {
516
516
  const { cause: n, socket: t } = e;
517
517
  let o = "CONNECT_SERVER_FAILED";
518
518
  switch (n) {
@@ -532,7 +532,7 @@ const ke = new Error("Unknown error"), Ve = (e = ke) => {
532
532
  t !== void 0 && t._ws?.readyState === 3 ? o = "WS_CONNECTION_FAILED" : V(e) !== void 0 && V(e) !== "" && (o = "CONNECT_SERVER_FAILED_BY_LINK");
533
533
  }
534
534
  return o;
535
- }, Le = (e) => {
535
+ }, He = (e) => {
536
536
  let n = "";
537
537
  try {
538
538
  n = JSON.stringify(e);
@@ -540,16 +540,16 @@ const ke = new Error("Unknown error"), Ve = (e = ke) => {
540
540
  i("failed to stringify message", t);
541
541
  }
542
542
  return n;
543
- }, He = new Error("Unknown error"), $e = (e = He) => {
543
+ }, $e = new Error("Unknown error"), Je = (e = $e) => {
544
544
  const { code: n, cause: t, message: o } = e, s = V(e), r = { code: "", cause: "", message: "" };
545
- return typeof o == "object" && o !== null ? r.message = Le(o) : o && (r.message = String(o)), s !== void 0 && s !== "" && (r.link = s), n !== void 0 && n !== "" && (r.code = n), t !== void 0 && t !== "" && (r.cause = t), r;
546
- }, Je = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
545
+ return typeof o == "object" && o !== null ? r.message = He(o) : o && (r.message = String(o)), s !== void 0 && s !== "" && (r.link = s), n !== void 0 && n !== "" && (r.code = n), t !== void 0 && t !== "" && (r.cause = t), r;
546
+ }, Xe = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
547
547
  __proto__: null,
548
- EErrorTypes: se,
548
+ EErrorTypes: re,
549
549
  getLinkError: V,
550
- getTypeFromError: Ve,
551
- getValuesFromError: $e
552
- }, Symbol.toStringTag, { value: "Module" })), Xe = ({
550
+ getTypeFromError: Le,
551
+ getValuesFromError: Je
552
+ }, Symbol.toStringTag, { value: "Module" })), We = ({
553
553
  sessionId: e,
554
554
  remoteAddress: n,
555
555
  isMutedAudio: t,
@@ -559,38 +559,38 @@ const ke = new Error("Unknown error"), Ve = (e = ke) => {
559
559
  }) => {
560
560
  const c = [], a = t ? "0" : "1", u = o ? "0" : "1";
561
561
  return c.push(`X-Vinteo-Mic-State: ${a}`, `X-Vinteo-MainCam-State: ${u}`), (s === !1 || s === void 0) && c.push("X-Vinteo-Purgatory-Call: yes"), e !== void 0 && e !== "" && c.push(`X-Vinteo-Session: ${e}`), r === !0 && c.push("X-Vinteo-Presentation-Call: yes"), n !== void 0 && n !== "" && c.push(`X-Vinteo-Remote: ${n}`), c;
562
- }, We = "[@*!|]", je = "_", Ge = (e) => {
562
+ }, je = "[@*!|]", Ge = "_", Ke = (e) => {
563
563
  let n = e;
564
- return n = n.replaceAll(new RegExp(We, "g"), je), n;
565
- }, Ke = ({
564
+ return n = n.replaceAll(new RegExp(je, "g"), Ge), n;
565
+ }, Ye = ({
566
566
  appName: e,
567
567
  appVersion: n,
568
568
  browserName: t,
569
569
  browserVersion: o
570
570
  }) => {
571
- const r = `${Ge(e)} ${n}`;
571
+ const r = `${Ke(e)} ${n}`;
572
572
  return `ChromeNew - ${t === void 0 ? r : `${t} ${o}, ${r}`}`;
573
- }, Ye = ({
573
+ }, qe = ({
574
574
  isUnifiedSdpSemantic: e,
575
575
  appVersion: n,
576
576
  browserName: t,
577
577
  browserVersion: o,
578
578
  appName: s
579
- }) => e ? Ke({ appVersion: n, browserName: t, browserVersion: o, appName: s }) : "Chrome", qe = (e) => (n) => [...n].map((o) => async () => e(o)), ze = async ({
579
+ }) => e ? Ye({ appVersion: n, browserName: t, browserVersion: o, appName: s }) : "Chrome", ze = (e) => (n) => [...n].map((o) => async () => e(o)), Qe = async ({
580
580
  accumulatedKeys: e,
581
581
  sendKey: n,
582
582
  canRunTask: t
583
583
  }) => {
584
- const s = qe(n)(e);
585
- return de(s, t);
586
- }, Qe = (e) => (t) => (i("onStartMainCam"), e.on("api:admin-start-main-cam", t)), Ze = (e) => (t) => (i("onStartMic"), e.on("api:admin-start-mic", t)), en = (e) => (t) => (i("onStopMainCam"), e.on("api:admin-stop-main-cam", t)), nn = (e) => (t) => (i("onStopMic"), e.on("api:admin-stop-mic", t)), tn = ({ sipConnector: e }) => {
584
+ const s = ze(n)(e);
585
+ return le(s, t);
586
+ }, Ze = (e) => (t) => (i("onStartMainCam"), e.on("api:admin-start-main-cam", t)), en = (e) => (t) => (i("onStartMic"), e.on("api:admin-start-mic", t)), nn = (e) => (t) => (i("onStopMainCam"), e.on("api:admin-stop-main-cam", t)), tn = (e) => (t) => (i("onStopMic"), e.on("api:admin-stop-mic", t)), on = ({ sipConnector: e }) => {
587
587
  const n = (g, R) => ({ isSyncForced: C }) => {
588
588
  if (C === !0) {
589
589
  g();
590
590
  return;
591
591
  }
592
592
  R();
593
- }, t = Qe(e), o = en(e), s = Ze(e), r = nn(e);
593
+ }, t = Ze(e), o = nn(e), s = en(e), r = tn(e);
594
594
  let c, a, u, l;
595
595
  const h = ({
596
596
  onStartMainCamForced: g,
@@ -627,19 +627,19 @@ const ke = new Error("Unknown error"), Ve = (e = ke) => {
627
627
  f();
628
628
  }
629
629
  };
630
- }, bn = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
630
+ }, _n = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
631
631
  __proto__: null,
632
- PURGATORY_CONFERENCE_NUMBER: oe,
633
- createSyncMediaState: tn,
634
- error: Je,
635
- getExtraHeaders: Xe,
636
- getUserAgent: Ye,
637
- hasPurgatory: x,
638
- sendDtmfAccumulated: ze
632
+ PURGATORY_CONFERENCE_NUMBER: se,
633
+ createSyncMediaState: on,
634
+ error: Xe,
635
+ getExtraHeaders: We,
636
+ getUserAgent: qe,
637
+ hasPurgatory: I,
638
+ sendDtmfAccumulated: Qe
639
639
  }, Symbol.toStringTag, { value: "Module" }));
640
- var on = /* @__PURE__ */ ((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))(on || {});
641
- const sn = (e) => [...e.keys()].map((n) => e.get(n)), rn = (e, n) => sn(e).find((t) => t?.type === n), cn = async (e) => e.getStats().then((n) => rn(n, "codec")?.mimeType), an = (e) => e.find((n) => n.track?.kind === "video"), un = async (e, n, t) => {
642
- const { isChanged: o, parameters: s } = await z(e, {
640
+ var sn = /* @__PURE__ */ ((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))(sn || {});
641
+ const rn = (e) => [...e.keys()].map((n) => e.get(n)), cn = (e, n) => rn(e).find((t) => t?.type === n), an = async (e) => e.getStats().then((n) => cn(n, "codec")?.mimeType), un = (e) => e.find((n) => n.track?.kind === "video"), dn = async (e, n, t) => {
642
+ const { isChanged: o, parameters: s } = await Q(e, {
643
643
  encodings: [
644
644
  {
645
645
  scaleResolutionDownBy: n.scaleResolutionDownBy,
@@ -648,16 +648,16 @@ const sn = (e) => [...e.keys()].map((n) => e.get(n)), rn = (e, n) => sn(e).find(
648
648
  ]
649
649
  });
650
650
  return o && t && t(s), { isChanged: o, parameters: s };
651
- }, re = le(), dn = async () => re().catch((e) => {
651
+ }, ie = fe(), ln = async () => ie().catch((e) => {
652
652
  i("videoSendingBalancer: error", e);
653
- }), ln = async (e) => (re.add(e), dn()), W = async ({
653
+ }), fn = async (e) => (ie.add(e), ln()), j = async ({
654
654
  sender: e,
655
655
  scaleResolutionDownBy: n,
656
656
  maxBitrate: t,
657
657
  onSetParameters: o
658
- }) => ln(async () => un(e, { scaleResolutionDownBy: n, maxBitrate: t }, o)), fn = async ({ sender: e, codec: n }, t) => {
658
+ }) => fn(async () => dn(e, { scaleResolutionDownBy: n, maxBitrate: t }, o)), hn = async ({ sender: e, codec: n }, t) => {
659
659
  const s = Be(n);
660
- return W({
660
+ return j({
661
661
  sender: e,
662
662
  maxBitrate: s,
663
663
  onSetParameters: t,
@@ -668,20 +668,20 @@ const sn = (e) => [...e.keys()].map((n) => e.get(n)), rn = (e, n) => sn(e).find(
668
668
  videoTrack: n,
669
669
  codec: t
670
670
  }, o) => {
671
- const c = n.getSettings().width, a = ne(c ?? 0, t);
672
- return W({
671
+ const c = n.getSettings().width, a = c === void 0 ? we(t) : te(c, t);
672
+ return j({
673
673
  sender: e,
674
674
  maxBitrate: a,
675
675
  onSetParameters: o,
676
676
  scaleResolutionDownBy: 1
677
677
  });
678
- }, hn = async ({
678
+ }, gn = async ({
679
679
  sender: e,
680
680
  videoTrack: n,
681
681
  resolution: t,
682
682
  codec: o
683
683
  }, s) => {
684
- const [r, c] = t.split("x"), { maxBitrate: a, scaleResolutionDownBy: u } = te({
684
+ const [r, c] = t.split("x"), { maxBitrate: a, scaleResolutionDownBy: u } = oe({
685
685
  videoTrack: n,
686
686
  codec: o,
687
687
  targetSize: {
@@ -689,13 +689,13 @@ const sn = (e) => [...e.keys()].map((n) => e.get(n)), rn = (e, n) => sn(e).find(
689
689
  height: Number(c)
690
690
  }
691
691
  });
692
- return W({
692
+ return j({
693
693
  sender: e,
694
694
  maxBitrate: a,
695
695
  onSetParameters: s,
696
696
  scaleResolutionDownBy: u
697
697
  });
698
- }, gn = async ({
698
+ }, Cn = async ({
699
699
  mainCam: e,
700
700
  resolutionMainCam: n,
701
701
  sender: t,
@@ -704,11 +704,11 @@ const sn = (e) => [...e.keys()].map((n) => e.get(n)), rn = (e, n) => sn(e).find(
704
704
  }, r) => {
705
705
  switch (e) {
706
706
  case w.PAUSE_MAIN_CAM:
707
- return fn({ sender: t, codec: s }, r);
707
+ return hn({ sender: t, codec: s }, r);
708
708
  case w.RESUME_MAIN_CAM:
709
709
  return k({ sender: t, videoTrack: o, codec: s }, r);
710
710
  case w.MAX_MAIN_CAM_RESOLUTION:
711
- return n !== void 0 ? hn(
711
+ return n !== void 0 ? gn(
712
712
  { sender: t, videoTrack: o, codec: s, resolution: n },
713
713
  r
714
714
  ) : k({ sender: t, videoTrack: o, codec: s }, r);
@@ -719,7 +719,7 @@ const sn = (e) => [...e.keys()].map((n) => e.get(n)), rn = (e, n) => sn(e).find(
719
719
  default:
720
720
  return k({ sender: t, videoTrack: o, codec: s }, r);
721
721
  }
722
- }, j = {
722
+ }, G = {
723
723
  isChanged: !1,
724
724
  parameters: {
725
725
  encodings: [{}],
@@ -728,18 +728,18 @@ const sn = (e) => [...e.keys()].map((n) => e.get(n)), rn = (e, n) => sn(e).find(
728
728
  headerExtensions: [],
729
729
  rtcp: {}
730
730
  }
731
- }, G = async ({
731
+ }, K = async ({
732
732
  mainCam: e,
733
733
  resolutionMainCam: n,
734
734
  connection: t,
735
735
  onSetParameters: o,
736
736
  ignoreForCodec: s
737
737
  }) => {
738
- const r = t.getSenders(), c = an(r);
738
+ const r = t.getSenders(), c = un(r);
739
739
  if (!c?.track)
740
- return j;
741
- const a = await cn(c);
742
- return Z(a, s) ? j : gn(
740
+ return G;
741
+ const a = await an(c);
742
+ return ne(a, s) ? G : Cn(
743
743
  {
744
744
  mainCam: e,
745
745
  resolutionMainCam: n,
@@ -749,7 +749,7 @@ const sn = (e) => [...e.keys()].map((n) => e.get(n)), rn = (e, n) => sn(e).find(
749
749
  },
750
750
  o
751
751
  );
752
- }, _n = (e, {
752
+ }, An = (e, {
753
753
  ignoreForCodec: n,
754
754
  onSetParameters: t
755
755
  } = {}) => {
@@ -757,7 +757,7 @@ const sn = (e) => [...e.keys()].map((n) => e.get(n)), rn = (e, n) => sn(e).find(
757
757
  const { connection: u } = e;
758
758
  if (!u)
759
759
  throw new Error("connection is not exist");
760
- return G({
760
+ return K({
761
761
  connection: u,
762
762
  onSetParameters: t,
763
763
  ignoreForCodec: n
@@ -769,14 +769,14 @@ const sn = (e) => [...e.keys()].map((n) => e.get(n)), rn = (e, n) => sn(e).find(
769
769
  const { mainCam: l, resolutionMainCam: h } = u, { connection: f } = e;
770
770
  if (!f)
771
771
  throw new Error("connection is not exist");
772
- return G({
772
+ return K({
773
773
  mainCam: l,
774
774
  resolutionMainCam: h,
775
775
  connection: f,
776
776
  onSetParameters: t,
777
777
  ignoreForCodec: n
778
778
  });
779
- }, s().catch(I);
779
+ }, s().catch(x);
780
780
  };
781
781
  return {
782
782
  subscribe: () => {
@@ -796,17 +796,17 @@ const sn = (e) => [...e.keys()].map((n) => e.get(n)), rn = (e, n) => sn(e).find(
796
796
  };
797
797
  export {
798
798
  y as ECallCause,
799
- on as EMimeTypesVideoCodecs,
800
- Nn as EUseLicense,
801
- Bn as SipConnector,
802
- Mn as SipConnectorFacade,
803
- xn as debug,
804
- wn as disableDebug,
805
- Dn as enableDebug,
806
- cn as getCodecFromSender,
807
- vn as hasCanceledCallError,
808
- Pn as hasCanceledStartPresentationError,
809
- _n as resolveVideoSendingBalancer,
810
- z as setParametersToSender,
811
- bn as tools
799
+ sn as EMimeTypesVideoCodecs,
800
+ Bn as EUseLicense,
801
+ wn as SipConnector,
802
+ bn as SipConnectorFacade,
803
+ Fn as debug,
804
+ Dn as disableDebug,
805
+ Pn as enableDebug,
806
+ an as getCodecFromSender,
807
+ Mn as hasCanceledCallError,
808
+ xn as hasCanceledStartPresentationError,
809
+ An as resolveVideoSendingBalancer,
810
+ Q as setParametersToSender,
811
+ _n as tools
812
812
  };
@@ -1,3 +1,4 @@
1
1
  export declare const MINIMUM_BITRATE: number;
2
+ export declare const MAXIMUM_BITRATE: number;
2
3
  declare const getMaxBitrateByWidth: (maxWidth: number) => number;
3
4
  export default getMaxBitrateByWidth;
@@ -1,3 +1,4 @@
1
1
  export declare const getMinimumBitrate: (codec?: string) => number;
2
+ export declare const getMaximumBitrate: (codec?: string) => number;
2
3
  declare const getMaxBitrateByWidthAndCodec: (maxWidth: number, codec?: string) => number;
3
4
  export default getMaxBitrateByWidthAndCodec;
@@ -1,2 +1,2 @@
1
- declare const scaleMaxBitrateBySender: (senders: RTCRtpSender[], mediaStream: MediaStream, maxBitrate: number) => Promise<import('./setEncodingsToSender').TResult | undefined>;
2
- export default scaleMaxBitrateBySender;
1
+ declare const scaleBitrate: (senders: RTCRtpSender[], mediaStream: MediaStream, maxBitrate: number) => Promise<import('./setEncodingsToSender').TResult | undefined>;
2
+ export default scaleBitrate;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sip-connector",
3
- "version": "14.1.0-alpha.12",
3
+ "version": "14.1.0-alpha.13",
4
4
  "description": "Module for connect to Vinteo server",
5
5
  "keywords": [
6
6
  "webrtc",