sip-connector 6.22.1 → 6.22.2

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.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const r=require("./SipConnector-4TW1xlov.cjs"),W=require("ts-debounce"),H=require("@krivega/cancelable-promise"),Y=require("stack-promises"),z=require("debug");require("events-constructor");const L="purgatory",A=e=>e===L,p=e=>()=>(r.logger("getRemoteStreams"),e.getRemoteStreams()),J=({kind:e,readyState:n})=>e==="video"&&n==="live",V=e=>({track:n})=>{J(n)&&e()},D=({getRemoteStreams:e,setRemoteStreams:n})=>W.debounce(()=>{const t=e();r.logger("remoteStreams",t),t&&n(t)},200),Q=e=>async t=>{const{mediaStream:s,extraHeaders:o,iceServers:c,degradationPreference:a,setRemoteStreams:i,onBeforeProgressCall:u,onSuccessProgressCall:S,onEnterPurgatory:d,onEnterConference:l,onFailProgressCall:C,onFinishProgressCall:m,onEndedCall:f}=t,R=D({setRemoteStreams:i,getRemoteStreams:p(e)}),_=V(R);r.logger("answerIncomingCall",t);const b=async()=>e.answerToIncomingCall({mediaStream:s,extraHeaders:o,iceServers:c,degradationPreference:a,ontrack:_}),h=()=>{const{remoteCallerData:g}=e;return g.incomingNumber};let M=!1,T;const y=(r.logger("subscribeEnterConference: onEnterConference",l),d??l?e.onSession("enterRoom",g=>{r.logger("enterRoom",{_room:g,isSuccessProgressCall:M}),T=g,A(T)?d&&d():l&&l({isSuccessProgressCall:M})}):()=>{}),O=g=>(r.logger("onSuccess"),M=!0,R(),S&&S({isPurgatory:A(T)}),e.onceRaceSession(["ended","failed"],()=>{y(),f&&f()}),g),v=g=>{throw r.logger("onFail"),C&&C(),y(),g},N=()=>{r.logger("onFinish"),m&&m()};if(r.logger("onBeforeProgressCall"),u){const g=h();u(g)}return b().then(O).catch(v).finally(N)},Z=e=>async t=>{const{conference:s,mediaStream:o,extraHeaders:c,iceServers:a,degradationPreference:i,setRemoteStreams:u,onBeforeProgressCall:S,onSuccessProgressCall:d,onEnterPurgatory:l,onEnterConference:C,onFailProgressCall:m,onFinishProgressCall:f,onEndedCall:R}=t,_=D({setRemoteStreams:u,getRemoteStreams:p(e)}),b=V(_);r.logger("callToServer",t);const h=async()=>(r.logger("startCall"),e.call({mediaStream:o,extraHeaders:c,iceServers:a,degradationPreference:i,number:s,ontrack:b}));let M=!1,T;const y=(r.logger("subscribeEnterConference: onEnterConference",C),l??C?e.onSession("enterRoom",g=>{r.logger("enterRoom",{_room:g,isSuccessProgressCall:M}),T=g,A(T)?l&&l():C&&C({isSuccessProgressCall:M})}):()=>{}),O=g=>(r.logger("onSuccess"),M=!0,_(),d&&d({isPurgatory:A(T)}),e.onceRaceSession(["ended","failed"],()=>{y(),R&&R()}),g),v=g=>{throw r.logger("onFail"),m&&m(),y(),g},N=()=>{r.logger("onFinish"),f&&f()};return r.logger("onBeforeProgressCall"),S&&S(s),h().then(O).catch(v).finally(N)},I=e=>{if(!H.isCanceledError(e))throw e;return!1},ee=e=>async t=>{const{userAgent:s,sipWebSocketServerURL:o,sipServerUrl:c,remoteAddress:a,displayName:i,name:u,password:S,isRegisteredUser:d,sdpSemantics:l,isDisconnectOnFail:C}=t;return r.logger("connectToServer",t),e.connect({userAgent:s,sdpSemantics:l,sipWebSocketServerURL:o,sipServerUrl:c,remoteAddress:a,displayName:i,password:S,user:u,register:d}).then(()=>(r.logger("connectToServer then"),!0)).catch(async m=>(r.logger("connectToServer catch: error",m),C===!0?e.disconnect().then(()=>I(m)).catch(()=>I(m)):I(m)))},ne=e=>async()=>(r.logger("disconnectFromServer"),e.disconnect().then(()=>(r.logger("disconnectFromServer: then"),!1)).catch(n=>(r.logger("disconnectFromServer: catch",n),!1))),w=e=>{const{url:n,cause:t}=e;let s=n;return(t===r.BAD_MEDIA_DESCRIPTION||t===r.NOT_FOUND)&&(s=`${e.message.to.uri.user}@${e.message.to.uri.host}`),s};var $=(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))($||{});const te=(e=new Error)=>{var o;const{cause:n,socket:t}=e;let s="CONNECT_SERVER_FAILED";switch(n){case"Forbidden":{s="WRONG_USER_OR_PASSWORD";break}case r.BAD_MEDIA_DESCRIPTION:{s="BAD_MEDIA_ERROR";break}case r.NOT_FOUND:{s="NOT_FOUND_ERROR";break}default:t&&((o=t==null?void 0:t._ws)==null?void 0:o.readyState)===3?s="WS_CONNECTION_FAILED":w(e)&&(s="CONNECT_SERVER_FAILED_BY_LINK")}return s},re=(e=new Error)=>{const{code:n,cause:t,message:s}=e,o=w(e),c={};return s&&(c.message=s),o&&(c.link=o),n&&(c.code=n),t&&(c.cause=t),c},se=Object.freeze(Object.defineProperty({__proto__:null,EErrorTypes:$,getLinkError:w,getTypeFromError:te,getValuesFromError:re},Symbol.toStringTag,{value:"Module"})),oe=({sessionId:e,remoteAddress:n,isMutedAudio:t,isMutedVideo:s,isRegistered:o,isPresentationCall:c})=>{const a=[],i=t?"0":"1",u=s?"0":"1";return a.push(`X-Vinteo-Mic-State: ${i}`,`X-Vinteo-MainCam-State: ${u}`),o||a.push("X-Vinteo-Purgatory-Call: yes"),e&&a.push(`X-Vinteo-Session: ${e}`),c&&a.push("X-Vinteo-Presentation-Call: yes"),n&&a.push(`X-Vinteo-Remote: ${n}`),a},ce=({appName:e,appVersion:n,browserName:t,browserVersion:s})=>{const o=`${e} ${n}`;return`ChromeNew - ${t?`${t} ${s}, ${o}`:o}`},ae=({isUnifiedSdpSemantic:e,appVersion:n,browserName:t,browserVersion:s,appName:o})=>e?ce({appVersion:n,browserName:t,browserVersion:s,appName:o}):"Chrome",ie=e=>async()=>{if(e.isCallActive)return r.logger("askPermissionToEnableCam"),e.askPermissionToEnableCam()},ue=e=>t=>(r.logger("onMustStopPresentation"),e.onSession("mustStopPresentation",t)),le=e=>t=>(r.logger("onUseLicense"),e.onSession("useLicense",t)),ge=e=>async({isEnabledCam:t,isEnabledMic:s})=>{if(e.isCallActive)return r.logger("sendMediaState"),e.sendMediaState({cam:t,mic:s})},Se=e=>async()=>{if(e.isCallActive)return r.logger("sendRefusalToTurnOnCam"),e.sendRefusalToTurnOnCam().catch(t=>{r.logger("sendRefusalToTurnOnCam: error",t)})},de=e=>async()=>{if(e.isCallActive)return r.logger("sendRefusalToTurnOnMic"),e.sendRefusalToTurnOnMic().catch(t=>{r.logger("sendRefusalToTurnOnMic: error",t)})},me=1e6,fe=({maxBitrate:e=me,sipConnector:n})=>async({mediaStream:s,isP2P:o=!1})=>(r.logger("startPresentation"),n.startPresentation(s,{isP2P:o,maxBitrate:e})),Ce=({sipConnector:e})=>async({isP2P:t=!1}={})=>(r.logger("stopShareSipConnector"),e.stopPresentation({isP2P:t}).catch(r.logger)),Ee=1e6,Re=({sipConnector:e,maxBitrate:n=Ee})=>async({mediaStream:s,isP2P:o=!1})=>(r.logger("updatePresentation"),e.updatePresentation(s,{isP2P:o,maxBitrate:n})),Me="ERROR_NOT_RUNNING",Te=e=>{const n=new Error("Promise was not running");return n.basePromise=e,n.id=Me,n.name="Not running",n},_e=async(e,n)=>e.reduce(async(t,s)=>t.then(async({success:o,errors:c,results:a})=>(!n||n(s)?s():Promise.reject(Te(s))).then(i=>({errors:c,success:[...o,i],results:[...a,i],isSuccessful:!0,isError:!1})).catch(i=>({success:o,errors:[...c,i],results:[...a,i],isSuccessful:!1,isError:!0}))),Promise.resolve({success:[],errors:[],results:[],isSuccessful:!1,isError:!1})),ye=e=>n=>[...n].map(s=>async()=>e(s)),be=async({accumulatedKeys:e,sendKey:n,canRunTask:t})=>{const o=ye(n)(e);return _e(o,t)},he=e=>t=>(r.logger("onStartMainCam"),e.onSession("admin-start-main-cam",t)),Oe=e=>t=>(r.logger("onStartMic"),e.onSession("admin-start-mic",t)),ve=e=>t=>(r.logger("onStopMainCam"),e.onSession("admin-stop-main-cam",t)),Ne=e=>t=>(r.logger("onStopMic"),e.onSession("admin-stop-mic",t)),Ae=({sipConnector:e})=>{const n=(f,R)=>({isSyncForced:_=!1})=>{if(_){f();return}R()},t=he(e),s=ve(e),o=Oe(e),c=Ne(e);let a=()=>{},i=()=>{},u=()=>{},S=()=>{};const d=({onStartMainCamForced:f,onStartMainCamNotForced:R,onStopMainCamForced:_,onStopMainCamNotForced:b,onStartMicForced:h,onStartMicNotForced:M,onStopMicForced:T,onStopMicNotForced:P})=>{const y=n(f,R);a=t(y);const O=n(_,b);i=s(O);const v=n(h,M);u=o(v);const N=n(T,P);S=c(N)},l=()=>{a(),i(),u(),S()};return{start:f=>{d(f)},stop:()=>{l()}}},Pe=Object.freeze(Object.defineProperty({__proto__:null,PURGATORY_CONFERENCE_NUMBER:L,createSyncMediaState:Ae,error:se,getExtraHeaders:oe,getUserAgent:ae,hasPurgatory:A,resolveAnswerIncomingCall:Q,resolveAskPermissionToEnableCam:ie,resolveCallToServer:Z,resolveConnectToServer:ee,resolveDisconnectFromServer:ne,resolveGetRemoteStreams:p,resolveOnMustStopPresentation:ue,resolveOnUseLicense:le,resolveSendMediaState:ge,resolveSendRefusalToTurnOnCam:Se,resolveSendRefusalToTurnOnMic:de,resolveStartPresentation:fe,resolveStopShareSipConnector:Ce,resolveUpdatePresentation:Re,resolveUpdateRemoteStreams:D,sendDTMFAccumulated:be},Symbol.toStringTag,{value:"Module"})),Ie=e=>[...e.keys()].map(n=>e.get(n)),Be=(e,n)=>Ie(e).find(t=>t.type===n),x=async e=>e.getStats().then(n=>{const t=Be(n,"codec");return t==null?void 0:t.mimeType}),pe=e=>e.find(n=>{var t;return((t=n==null?void 0:n.track)==null?void 0:t.kind)==="video"}),G=(e,n)=>e!==void 0&&n!==void 0&&e.toLowerCase().includes(n.toLowerCase()),De=1e6,E=e=>e*De,X=E(.06),we=E(4),Fe=e=>e<=64?X:e<=128?E(.12):e<=256?E(.25):e<=384?E(.32):e<=426?E(.38):e<=640?E(.5):e<=848?E(.7):e<=1280?E(1):e<=1920?E(2):we,ke="av1",Ue=e=>G(e,ke),Le=.6,j=(e,n)=>Ue(n)?e*Le:e,Ve=e=>j(X,e),q=(e,n)=>{const t=Fe(e);return j(t,n)},K=Y(),$e=async()=>K().catch(e=>{r.logger("videoSendingBalancer: error",e)}),xe=async e=>(K.add(e),$e()),F=async({sender:e,scaleResolutionDownBy:n,maxBitrate:t,onSetParameters:s})=>xe(async()=>r.setEncodingsToSender(e,{scaleResolutionDownBy:n,maxBitrate:t},s)),Ge=async({sender:e,codec:n},t)=>{const o=Ve(n);return F({sender:e,maxBitrate:o,onSetParameters:t,scaleResolutionDownBy:200})},B=async({sender:e,track:n,codec:t},s)=>{const a=n.getSettings().width,i=q(a,t);return F({sender:e,maxBitrate:i,onSetParameters:s,scaleResolutionDownBy:1})},Xe=async({sender:e,track:n,resolution:t,codec:s},o)=>{const c=n.getSettings(),a=c.width,i=c.height,[u,S]=t.split("x"),d=a/Number(u),l=i/Number(S),m=Math.max(d,l,1),f=q(Number(u),s);return F({sender:e,maxBitrate:f,onSetParameters:o,scaleResolutionDownBy:m})},je=async({mainCam:e,resolutionMainCam:n,sender:t,track:s,codec:o},c)=>{switch(e){case r.EEventsMainCAM.PAUSE_MAIN_CAM:return Ge({sender:t,codec:o},c);case r.EEventsMainCAM.RESUME_MAIN_CAM:return B({sender:t,track:s,codec:o},c);case r.EEventsMainCAM.MAX_MAIN_CAM_RESOLUTION:return n!==void 0?Xe({sender:t,track:s,codec:o,resolution:n},c):B({sender:t,track:s,codec:o},c);default:return B({sender:t,track:s,codec:o},c)}},k={isChanged:!1,parameters:{encodings:[{}],transactionId:"0",codecs:[],headerExtensions:[],rtcp:{}}},U=async({mainCam:e,resolutionMainCam:n,connection:t,onSetParameters:s,ignoreForCodec:o})=>{const c=t.getSenders(),a=pe(c);if(!(a!=null&&a.track))return k;const i=await x(a);return G(i,o)?k:je({mainCam:e,resolutionMainCam:n,sender:a,codec:i,track:a.track},s)},qe=(e,{ignoreForCodec:n,onSetParameters:t}={})=>{const s=async()=>{const{connection:u}=e;if(!u)throw new Error("connection is not exist");return U({connection:u,onSetParameters:t,ignoreForCodec:n})};let o=s;const c=async u=>(o=async()=>{const{mainCam:S,resolutionMainCam:d}=u,{connection:l}=e;if(!l)throw new Error("connection is not exist");return U({mainCam:S,resolutionMainCam:d,connection:l,onSetParameters:t,ignoreForCodec:n})},o());return{subscribe:()=>{e.onSession("main-cam-control",c)},unsubscribe:()=>{e.offSession("main-cam-control",c)},balanceByTrack:s,resetMainCamControl(){o=s},async reBalance(){return o()}}};exports.EEventsMainCAM=r.EEventsMainCAM;exports.EEventsMic=r.EEventsMic;exports.EEventsSyncMediaState=r.EEventsSyncMediaState;exports.EUseLicense=r.EUseLicense;exports.causes=r.causes;exports.constants=r.constants;exports.default=r.SipConnector;exports.disableDebug=r.disableDebug;exports.enableDebug=r.enableDebug;exports.eventNames=r.eventNames;exports.hasCanceledCallError=r.hasCanceledCallError;exports.debug=z;exports.getCodecFromSender=x;exports.resolveVideoSendingBalancer=qe;exports.tools=Pe;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const s=require("./SipConnector-4TW1xlov.cjs"),H=require("ts-debounce"),Y=require("@krivega/cancelable-promise"),z=require("debug");require("events-constructor");const x="purgatory",P=e=>e===x,B=e=>()=>(s.logger("getRemoteStreams"),e.getRemoteStreams()),J=({kind:e,readyState:n})=>e==="video"&&n==="live",V=e=>({track:n})=>{J(n)&&e()},D=({getRemoteStreams:e,setRemoteStreams:n})=>H.debounce(()=>{const t=e();s.logger("remoteStreams",t),t&&n(t)},200),Q=e=>async t=>{const{mediaStream:r,extraHeaders:o,iceServers:c,degradationPreference:a,setRemoteStreams:u,onBeforeProgressCall:d,onSuccessProgressCall:E,onEnterPurgatory:f,onEnterConference:m,onFailProgressCall:y,onFinishProgressCall:h,onEndedCall:M}=t,C=D({setRemoteStreams:u,getRemoteStreams:B(e)}),T=V(C);s.logger("answerIncomingCall",t);const O=async()=>e.answerToIncomingCall({mediaStream:r,extraHeaders:o,iceServers:c,degradationPreference:a,ontrack:T}),A=()=>{const{remoteCallerData:S}=e;return S.incomingNumber};let _=!1,i;const l=(s.logger("subscribeEnterConference: onEnterConference",m),f??m?e.onSession("enterRoom",S=>{s.logger("enterRoom",{_room:S,isSuccessProgressCall:_}),i=S,P(i)?f&&f():m&&m({isSuccessProgressCall:_})}):()=>{}),R=S=>(s.logger("onSuccess"),_=!0,C(),E&&E({isPurgatory:P(i)}),e.onceRaceSession(["ended","failed"],()=>{l(),M&&M()}),S),b=S=>{throw s.logger("onFail"),y&&y(),l(),S},N=()=>{s.logger("onFinish"),h&&h()};if(s.logger("onBeforeProgressCall"),d){const S=A();d(S)}return O().then(R).catch(b).finally(N)},Z=e=>async t=>{const{conference:r,mediaStream:o,extraHeaders:c,iceServers:a,degradationPreference:u,setRemoteStreams:d,onBeforeProgressCall:E,onSuccessProgressCall:f,onEnterPurgatory:m,onEnterConference:y,onFailProgressCall:h,onFinishProgressCall:M,onEndedCall:C}=t,T=D({setRemoteStreams:d,getRemoteStreams:B(e)}),O=V(T);s.logger("callToServer",t);const A=async()=>(s.logger("startCall"),e.call({mediaStream:o,extraHeaders:c,iceServers:a,degradationPreference:u,number:r,ontrack:O}));let _=!1,i;const l=(s.logger("subscribeEnterConference: onEnterConference",y),m??y?e.onSession("enterRoom",S=>{s.logger("enterRoom",{_room:S,isSuccessProgressCall:_}),i=S,P(i)?m&&m():y&&y({isSuccessProgressCall:_})}):()=>{}),R=S=>(s.logger("onSuccess"),_=!0,T(),f&&f({isPurgatory:P(i)}),e.onceRaceSession(["ended","failed"],()=>{l(),C&&C()}),S),b=S=>{throw s.logger("onFail"),h&&h(),l(),S},N=()=>{s.logger("onFinish"),M&&M()};return s.logger("onBeforeProgressCall"),E&&E(r),A().then(R).catch(b).finally(N)},p=e=>{if(!Y.isCanceledError(e))throw e;return!1},ee=e=>async t=>{const{userAgent:r,sipWebSocketServerURL:o,sipServerUrl:c,remoteAddress:a,displayName:u,name:d,password:E,isRegisteredUser:f,sdpSemantics:m,isDisconnectOnFail:y}=t;return s.logger("connectToServer",t),e.connect({userAgent:r,sdpSemantics:m,sipWebSocketServerURL:o,sipServerUrl:c,remoteAddress:a,displayName:u,password:E,user:d,register:f}).then(()=>(s.logger("connectToServer then"),!0)).catch(async h=>(s.logger("connectToServer catch: error",h),y===!0?e.disconnect().then(()=>p(h)).catch(()=>p(h)):p(h)))},ne=e=>async()=>(s.logger("disconnectFromServer"),e.disconnect().then(()=>(s.logger("disconnectFromServer: then"),!1)).catch(n=>(s.logger("disconnectFromServer: catch",n),!1))),k=e=>{const{url:n,cause:t}=e;let r=n;return(t===s.BAD_MEDIA_DESCRIPTION||t===s.NOT_FOUND)&&(r=`${e.message.to.uri.user}@${e.message.to.uri.host}`),r};var $=(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))($||{});const te=(e=new Error)=>{var o;const{cause:n,socket:t}=e;let r="CONNECT_SERVER_FAILED";switch(n){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":k(e)&&(r="CONNECT_SERVER_FAILED_BY_LINK")}return r},re=(e=new Error)=>{const{code:n,cause:t,message:r}=e,o=k(e),c={};return r&&(c.message=r),o&&(c.link=o),n&&(c.code=n),t&&(c.cause=t),c},se=Object.freeze(Object.defineProperty({__proto__:null,EErrorTypes:$,getLinkError:k,getTypeFromError:te,getValuesFromError:re},Symbol.toStringTag,{value:"Module"})),oe=({sessionId:e,remoteAddress:n,isMutedAudio:t,isMutedVideo:r,isRegistered:o,isPresentationCall:c})=>{const a=[],u=t?"0":"1",d=r?"0":"1";return a.push(`X-Vinteo-Mic-State: ${u}`,`X-Vinteo-MainCam-State: ${d}`),o||a.push("X-Vinteo-Purgatory-Call: yes"),e&&a.push(`X-Vinteo-Session: ${e}`),c&&a.push("X-Vinteo-Presentation-Call: yes"),n&&a.push(`X-Vinteo-Remote: ${n}`),a},ce=({appName:e,appVersion:n,browserName:t,browserVersion:r})=>{const o=`${e} ${n}`;return`ChromeNew - ${t?`${t} ${r}, ${o}`:o}`},ae=({isUnifiedSdpSemantic:e,appVersion:n,browserName:t,browserVersion:r,appName:o})=>e?ce({appVersion:n,browserName:t,browserVersion:r,appName:o}):"Chrome",ie=e=>async()=>{if(e.isCallActive)return s.logger("askPermissionToEnableCam"),e.askPermissionToEnableCam()},ue=e=>t=>(s.logger("onMustStopPresentation"),e.onSession("mustStopPresentation",t)),le=e=>t=>(s.logger("onUseLicense"),e.onSession("useLicense",t)),ge=e=>async({isEnabledCam:t,isEnabledMic:r})=>{if(e.isCallActive)return s.logger("sendMediaState"),e.sendMediaState({cam:t,mic:r})},Se=e=>async()=>{if(e.isCallActive)return s.logger("sendRefusalToTurnOnCam"),e.sendRefusalToTurnOnCam().catch(t=>{s.logger("sendRefusalToTurnOnCam: error",t)})},de=e=>async()=>{if(e.isCallActive)return s.logger("sendRefusalToTurnOnMic"),e.sendRefusalToTurnOnMic().catch(t=>{s.logger("sendRefusalToTurnOnMic: error",t)})},me=1e6,fe=({maxBitrate:e=me,sipConnector:n})=>async({mediaStream:r,isP2P:o=!1})=>(s.logger("startPresentation"),n.startPresentation(r,{isP2P:o,maxBitrate:e})),Ee=({sipConnector:e})=>async({isP2P:t=!1}={})=>(s.logger("stopShareSipConnector"),e.stopPresentation({isP2P:t}).catch(s.logger)),Ce=1e6,Re=({sipConnector:e,maxBitrate:n=Ce})=>async({mediaStream:r,isP2P:o=!1})=>(s.logger("updatePresentation"),e.updatePresentation(r,{isP2P:o,maxBitrate:n})),he="ERROR_NOT_RUNNING",Me=e=>{const n=new Error("Promise was not running");return n.basePromise=e,n.id=he,n.name="Not running",n},ye=async(e,n)=>e.reduce(async(t,r)=>t.then(async({success:o,errors:c,results:a})=>(!n||n(r)?r():Promise.reject(Me(r))).then(u=>({errors:c,success:[...o,u],results:[...a,u],isSuccessful:!0,isError:!1})).catch(u=>({success:o,errors:[...c,u],results:[...a,u],isSuccessful:!1,isError:!0}))),Promise.resolve({success:[],errors:[],results:[],isSuccessful:!1,isError:!1})),Te=e=>n=>[...n].map(r=>async()=>e(r)),_e=async({accumulatedKeys:e,sendKey:n,canRunTask:t})=>{const o=Te(n)(e);return ye(o,t)},be=e=>t=>(s.logger("onStartMainCam"),e.onSession("admin-start-main-cam",t)),ve=e=>t=>(s.logger("onStartMic"),e.onSession("admin-start-mic",t)),Ne=e=>t=>(s.logger("onStopMainCam"),e.onSession("admin-stop-main-cam",t)),Oe=e=>t=>(s.logger("onStopMic"),e.onSession("admin-stop-mic",t)),Ae=({sipConnector:e})=>{const n=(M,C)=>({isSyncForced:T=!1})=>{if(T){M();return}C()},t=be(e),r=Ne(e),o=ve(e),c=Oe(e);let a=()=>{},u=()=>{},d=()=>{},E=()=>{};const f=({onStartMainCamForced:M,onStartMainCamNotForced:C,onStopMainCamForced:T,onStopMainCamNotForced:O,onStartMicForced:A,onStartMicNotForced:_,onStopMicForced:i,onStopMicNotForced:g})=>{const l=n(M,C);a=t(l);const R=n(T,O);u=r(R);const b=n(A,_);d=o(b);const N=n(i,g);E=c(N)},m=()=>{a(),u(),d(),E()};return{start:M=>{f(M)},stop:()=>{m()}}},Pe=Object.freeze(Object.defineProperty({__proto__:null,PURGATORY_CONFERENCE_NUMBER:x,createSyncMediaState:Ae,error:se,getExtraHeaders:oe,getUserAgent:ae,hasPurgatory:P,resolveAnswerIncomingCall:Q,resolveAskPermissionToEnableCam:ie,resolveCallToServer:Z,resolveConnectToServer:ee,resolveDisconnectFromServer:ne,resolveGetRemoteStreams:B,resolveOnMustStopPresentation:ue,resolveOnUseLicense:le,resolveSendMediaState:ge,resolveSendRefusalToTurnOnCam:Se,resolveSendRefusalToTurnOnMic:de,resolveStartPresentation:fe,resolveStopShareSipConnector:Ee,resolveUpdatePresentation:Re,resolveUpdateRemoteStreams:D,sendDTMFAccumulated:_e},Symbol.toStringTag,{value:"Module"})),pe=e=>[...e.keys()].map(n=>e.get(n)),Ie=(e,n)=>pe(e).find(t=>t.type===n),j=async e=>e.getStats().then(n=>{const t=Ie(n,"codec");return t==null?void 0:t.mimeType}),we=e=>e.find(n=>{var t;return((t=n==null?void 0:n.track)==null?void 0:t.kind)==="video"}),G=(e,n)=>e!==void 0&&n!==void 0&&e.toLowerCase().includes(n.toLowerCase()),Be="ERROR_NOT_RUNNING",De=e=>{const n=new Error("Promise was not running");return n.basePromise=e,n.id=Be,n.name="Not running",n},ke=async(e,n)=>e.reduce(async(t,r)=>t.then(async({success:o,errors:c,results:a})=>(!n||n(r)?r():Promise.reject(De(r))).then(u=>({errors:c,success:[...o,u],results:[...a,u],isSuccessful:!0,isError:!1})).catch(u=>({success:o,errors:[...c,u],results:[...a,u],isSuccessful:!1,isError:!0}))),Promise.resolve({success:[],errors:[],results:[],isSuccessful:!1,isError:!1})),Fe=new Error("Stack is empty"),I=e=>e[e.length-1],Ue=new Error("Promise is not actual"),Le=new Error("stackPromises only works with functions that returns a Promise"),xe=({noRejectIsNotActual:e=!1,noRunIsNotActual:n=!1}={})=>{const t=[],r=[],o=({task:i,index:g})=>{r.push({task:i,index:g})},c=(i,{task:g,index:l})=>{const R=r.find(({task:b,index:N})=>g===b&&l===N);if(!R)throw new Error("Task not found");if(R.promise)throw new Error("Task is already running");R.promise=i},a=({task:i,index:g})=>{const l=r.find(({task:R,index:b})=>i===R&&g===b);if(l)return l.promise},u=({task:i})=>{const g=I(r);return(g==null?void 0:g.task)===i},d=({task:i,index:g})=>(o({task:i,index:g}),async()=>{let l=a({task:i,index:g});const R=u({task:i});return!l&&n&&!R?Promise.resolve():(l||(l=i({isActual:R}),c(l,{task:i,index:g})),l)}),E=({resolve:i,reject:g})=>({results:l,isSuccessful:R})=>{const b=l.length,N=t.length;if(b===N){const S=I(l);if(R){i(S);return}g(S);return}if(e){const S=I(l);i(S);return}g(Ue)};let f=!1;const m=()=>{f=!0},y=()=>{f=!1},h=()=>f,M=async()=>(m(),ke(t,h)),C=async()=>{if(t.length===0)throw Fe;return new Promise((i,g)=>{const l=E({resolve:i,reject:g});M().then(l).catch(l)})},T=i=>{if(typeof i!="function")throw Le;const g=t.length;return t.push(d({task:i,index:g})),C},O=async i=>(T(i),C()),A=()=>{t.length=0,r.length=0},_=()=>{y(),A()};return C.add=T,C.run=O,C.stop=_,C},Ve=1e6,v=e=>e*Ve,X=v(.06),$e=v(4),je=e=>e<=64?X:e<=128?v(.12):e<=256?v(.25):e<=384?v(.32):e<=426?v(.38):e<=640?v(.5):e<=848?v(.7):e<=1280?v(1):e<=1920?v(2):$e,Ge="av1",Xe=e=>G(e,Ge),Ke=.6,K=(e,n)=>Xe(n)?e*Ke:e,We=e=>K(X,e),W=(e,n)=>{const t=je(e);return K(t,n)},q=xe(),qe=async()=>q().catch(e=>{s.logger("videoSendingBalancer: error",e)}),He=async e=>(q.add(e),qe()),F=async({sender:e,scaleResolutionDownBy:n,maxBitrate:t,onSetParameters:r})=>He(async()=>s.setEncodingsToSender(e,{scaleResolutionDownBy:n,maxBitrate:t},r)),Ye=async({sender:e,codec:n},t)=>{const o=We(n);return F({sender:e,maxBitrate:o,onSetParameters:t,scaleResolutionDownBy:200})},w=async({sender:e,track:n,codec:t},r)=>{const a=n.getSettings().width,u=W(a,t);return F({sender:e,maxBitrate:u,onSetParameters:r,scaleResolutionDownBy:1})},ze=async({sender:e,track:n,resolution:t,codec:r},o)=>{const c=n.getSettings(),a=c.width,u=c.height,[d,E]=t.split("x"),f=a/Number(d),m=u/Number(E),h=Math.max(f,m,1),M=W(Number(d),r);return F({sender:e,maxBitrate:M,onSetParameters:o,scaleResolutionDownBy:h})},Je=async({mainCam:e,resolutionMainCam:n,sender:t,track:r,codec:o},c)=>{switch(e){case s.EEventsMainCAM.PAUSE_MAIN_CAM:return Ye({sender:t,codec:o},c);case s.EEventsMainCAM.RESUME_MAIN_CAM:return w({sender:t,track:r,codec:o},c);case s.EEventsMainCAM.MAX_MAIN_CAM_RESOLUTION:return n!==void 0?ze({sender:t,track:r,codec:o,resolution:n},c):w({sender:t,track:r,codec:o},c);default:return w({sender:t,track:r,codec:o},c)}},U={isChanged:!1,parameters:{encodings:[{}],transactionId:"0",codecs:[],headerExtensions:[],rtcp:{}}},L=async({mainCam:e,resolutionMainCam:n,connection:t,onSetParameters:r,ignoreForCodec:o})=>{const c=t.getSenders(),a=we(c);if(!(a!=null&&a.track))return U;const u=await j(a);return G(u,o)?U:Je({mainCam:e,resolutionMainCam:n,sender:a,codec:u,track:a.track},r)},Qe=(e,{ignoreForCodec:n,onSetParameters:t}={})=>{const r=async()=>{const{connection:d}=e;if(!d)throw new Error("connection is not exist");return L({connection:d,onSetParameters:t,ignoreForCodec:n})};let o=r;const c=async d=>(o=async()=>{const{mainCam:E,resolutionMainCam:f}=d,{connection:m}=e;if(!m)throw new Error("connection is not exist");return L({mainCam:E,resolutionMainCam:f,connection:m,onSetParameters:t,ignoreForCodec:n})},o());return{subscribe:()=>{e.onSession("main-cam-control",c)},unsubscribe:()=>{e.offSession("main-cam-control",c)},balanceByTrack:r,resetMainCamControl(){o=r},async reBalance(){return o()}}};exports.EEventsMainCAM=s.EEventsMainCAM;exports.EEventsMic=s.EEventsMic;exports.EEventsSyncMediaState=s.EEventsSyncMediaState;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.debug=z;exports.getCodecFromSender=j;exports.resolveVideoSendingBalancer=Qe;exports.tools=Pe;
package/dist/index.js CHANGED
@@ -1,132 +1,131 @@
1
- import { l as o, B as V, N as $, E as B, s as z, S as Ye } from "./SipConnector-Hg44qtgr.js";
2
- import { f as sn, g as rn, i as on, c as an, a as cn, d as un, b as ln, e as Sn, h as mn } from "./SipConnector-Hg44qtgr.js";
3
- import { debounce as q } from "ts-debounce";
4
- import { isCanceledError as J } from "@krivega/cancelable-promise";
5
- import Q from "stack-promises";
6
- import { default as fn } from "debug";
1
+ import { l as c, B as V, N as $, E as P, s as q, S as nn } from "./SipConnector-Hg44qtgr.js";
2
+ import { f as ln, g as Sn, i as dn, c as mn, a as fn, d as Cn, b as En, e as gn, h as Rn } from "./SipConnector-Hg44qtgr.js";
3
+ import { debounce as J } from "ts-debounce";
4
+ import { isCanceledError as Q } from "@krivega/cancelable-promise";
5
+ import { default as yn } from "debug";
7
6
  import "events-constructor";
8
- const x = "purgatory", A = (e) => e === x, w = (e) => () => (o("getRemoteStreams"), e.getRemoteStreams()), Z = ({ kind: e, readyState: n }) => e === "video" && n === "live", G = (e) => ({ track: n }) => {
7
+ const G = "purgatory", A = (e) => e === G, k = (e) => () => (c("getRemoteStreams"), e.getRemoteStreams()), Z = ({ kind: e, readyState: n }) => e === "video" && n === "live", j = (e) => ({ track: n }) => {
9
8
  Z(n) && e();
10
9
  }, D = ({
11
10
  getRemoteStreams: e,
12
11
  setRemoteStreams: n
13
- }) => q(() => {
12
+ }) => J(() => {
14
13
  const t = e();
15
- o("remoteStreams", t), t && n(t);
14
+ c("remoteStreams", t), t && n(t);
16
15
  }, 200), ee = (e) => async (t) => {
17
16
  const {
18
17
  mediaStream: s,
19
18
  extraHeaders: r,
20
- iceServers: a,
21
- degradationPreference: c,
22
- setRemoteStreams: i,
23
- onBeforeProgressCall: u,
24
- onSuccessProgressCall: m,
25
- onEnterPurgatory: d,
26
- onEnterConference: l,
27
- onFailProgressCall: R,
28
- onFinishProgressCall: f,
29
- onEndedCall: C
19
+ iceServers: o,
20
+ degradationPreference: a,
21
+ setRemoteStreams: u,
22
+ onBeforeProgressCall: m,
23
+ onSuccessProgressCall: E,
24
+ onEnterPurgatory: C,
25
+ onEnterConference: f,
26
+ onFailProgressCall: T,
27
+ onFinishProgressCall: h,
28
+ onEndedCall: y
30
29
  } = t, g = D({
31
- setRemoteStreams: i,
32
- getRemoteStreams: w(e)
33
- }), y = G(g);
34
- o("answerIncomingCall", t);
35
- const h = async () => e.answerToIncomingCall({
30
+ setRemoteStreams: u,
31
+ getRemoteStreams: k(e)
32
+ }), M = j(g);
33
+ c("answerIncomingCall", t);
34
+ const v = async () => e.answerToIncomingCall({
36
35
  mediaStream: s,
37
36
  extraHeaders: r,
38
- iceServers: a,
39
- degradationPreference: c,
40
- ontrack: y
41
- }), b = () => {
42
- const { remoteCallerData: S } = e;
43
- return S.incomingNumber;
37
+ iceServers: o,
38
+ degradationPreference: a,
39
+ ontrack: M
40
+ }), p = () => {
41
+ const { remoteCallerData: d } = e;
42
+ return d.incomingNumber;
44
43
  };
45
- let T = !1, M;
46
- const _ = (o("subscribeEnterConference: onEnterConference", l), d ?? l ? e.onSession("enterRoom", (S) => {
47
- o("enterRoom", { _room: S, isSuccessProgressCall: T }), M = S, A(M) ? d && d() : l && l({ isSuccessProgressCall: T });
44
+ let _ = !1, i;
45
+ const l = (c("subscribeEnterConference: onEnterConference", f), C ?? f ? e.onSession("enterRoom", (d) => {
46
+ c("enterRoom", { _room: d, isSuccessProgressCall: _ }), i = d, A(i) ? C && C() : f && f({ isSuccessProgressCall: _ });
48
47
  }) : () => {
49
- }), O = (S) => (o("onSuccess"), T = !0, g(), m && m({ isPurgatory: A(M) }), e.onceRaceSession(["ended", "failed"], () => {
50
- _(), C && C();
51
- }), S), N = (S) => {
52
- throw o("onFail"), R && R(), _(), S;
53
- }, v = () => {
54
- o("onFinish"), f && f();
48
+ }), R = (d) => (c("onSuccess"), _ = !0, g(), E && E({ isPurgatory: A(i) }), e.onceRaceSession(["ended", "failed"], () => {
49
+ l(), y && y();
50
+ }), d), b = (d) => {
51
+ throw c("onFail"), T && T(), l(), d;
52
+ }, O = () => {
53
+ c("onFinish"), h && h();
55
54
  };
56
- if (o("onBeforeProgressCall"), u) {
57
- const S = b();
58
- u(S);
55
+ if (c("onBeforeProgressCall"), m) {
56
+ const d = p();
57
+ m(d);
59
58
  }
60
- return h().then(O).catch(N).finally(v);
59
+ return v().then(R).catch(b).finally(O);
61
60
  }, ne = (e) => async (t) => {
62
61
  const {
63
62
  conference: s,
64
63
  mediaStream: r,
65
- extraHeaders: a,
66
- iceServers: c,
67
- degradationPreference: i,
68
- setRemoteStreams: u,
69
- onBeforeProgressCall: m,
70
- onSuccessProgressCall: d,
71
- onEnterPurgatory: l,
72
- onEnterConference: R,
73
- onFailProgressCall: f,
74
- onFinishProgressCall: C,
64
+ extraHeaders: o,
65
+ iceServers: a,
66
+ degradationPreference: u,
67
+ setRemoteStreams: m,
68
+ onBeforeProgressCall: E,
69
+ onSuccessProgressCall: C,
70
+ onEnterPurgatory: f,
71
+ onEnterConference: T,
72
+ onFailProgressCall: h,
73
+ onFinishProgressCall: y,
75
74
  onEndedCall: g
76
- } = t, y = D({
77
- setRemoteStreams: u,
78
- getRemoteStreams: w(e)
79
- }), h = G(y);
80
- o("callToServer", t);
81
- const b = async () => (o("startCall"), e.call({
75
+ } = t, M = D({
76
+ setRemoteStreams: m,
77
+ getRemoteStreams: k(e)
78
+ }), v = j(M);
79
+ c("callToServer", t);
80
+ const p = async () => (c("startCall"), e.call({
82
81
  mediaStream: r,
83
- extraHeaders: a,
84
- iceServers: c,
85
- degradationPreference: i,
82
+ extraHeaders: o,
83
+ iceServers: a,
84
+ degradationPreference: u,
86
85
  number: s,
87
- ontrack: h
86
+ ontrack: v
88
87
  }));
89
- let T = !1, M;
90
- const _ = (o("subscribeEnterConference: onEnterConference", R), l ?? R ? e.onSession("enterRoom", (S) => {
91
- o("enterRoom", { _room: S, isSuccessProgressCall: T }), M = S, A(M) ? l && l() : R && R({ isSuccessProgressCall: T });
88
+ let _ = !1, i;
89
+ const l = (c("subscribeEnterConference: onEnterConference", T), f ?? T ? e.onSession("enterRoom", (d) => {
90
+ c("enterRoom", { _room: d, isSuccessProgressCall: _ }), i = d, A(i) ? f && f() : T && T({ isSuccessProgressCall: _ });
92
91
  }) : () => {
93
- }), O = (S) => (o("onSuccess"), T = !0, y(), d && d({ isPurgatory: A(M) }), e.onceRaceSession(["ended", "failed"], () => {
94
- _(), g && g();
95
- }), S), N = (S) => {
96
- throw o("onFail"), f && f(), _(), S;
97
- }, v = () => {
98
- o("onFinish"), C && C();
92
+ }), R = (d) => (c("onSuccess"), _ = !0, M(), C && C({ isPurgatory: A(i) }), e.onceRaceSession(["ended", "failed"], () => {
93
+ l(), g && g();
94
+ }), d), b = (d) => {
95
+ throw c("onFail"), h && h(), l(), d;
96
+ }, O = () => {
97
+ c("onFinish"), y && y();
99
98
  };
100
- return o("onBeforeProgressCall"), m && m(s), b().then(O).catch(N).finally(v);
101
- }, P = (e) => {
102
- if (!J(e))
99
+ return c("onBeforeProgressCall"), E && E(s), p().then(R).catch(b).finally(O);
100
+ }, w = (e) => {
101
+ if (!Q(e))
103
102
  throw e;
104
103
  return !1;
105
104
  }, te = (e) => async (t) => {
106
105
  const {
107
106
  userAgent: s,
108
107
  sipWebSocketServerURL: r,
109
- sipServerUrl: a,
110
- remoteAddress: c,
111
- displayName: i,
112
- name: u,
113
- password: m,
114
- isRegisteredUser: d,
115
- sdpSemantics: l,
116
- isDisconnectOnFail: R
108
+ sipServerUrl: o,
109
+ remoteAddress: a,
110
+ displayName: u,
111
+ name: m,
112
+ password: E,
113
+ isRegisteredUser: C,
114
+ sdpSemantics: f,
115
+ isDisconnectOnFail: T
117
116
  } = t;
118
- return o("connectToServer", t), e.connect({
117
+ return c("connectToServer", t), e.connect({
119
118
  userAgent: s,
120
- sdpSemantics: l,
119
+ sdpSemantics: f,
121
120
  sipWebSocketServerURL: r,
122
- sipServerUrl: a,
123
- remoteAddress: c,
124
- displayName: i,
125
- password: m,
126
- user: u,
127
- register: d
128
- }).then(() => (o("connectToServer then"), !0)).catch(async (f) => (o("connectToServer catch: error", f), R === !0 ? e.disconnect().then(() => P(f)).catch(() => P(f)) : P(f)));
129
- }, se = (e) => async () => (o("disconnectFromServer"), e.disconnect().then(() => (o("disconnectFromServer: then"), !1)).catch((n) => (o("disconnectFromServer: catch", n), !1))), F = (e) => {
121
+ sipServerUrl: o,
122
+ remoteAddress: a,
123
+ displayName: u,
124
+ password: E,
125
+ user: m,
126
+ register: C
127
+ }).then(() => (c("connectToServer then"), !0)).catch(async (h) => (c("connectToServer catch: error", h), T === !0 ? e.disconnect().then(() => w(h)).catch(() => w(h)) : w(h)));
128
+ }, se = (e) => async () => (c("disconnectFromServer"), e.disconnect().then(() => (c("disconnectFromServer: then"), !1)).catch((n) => (c("disconnectFromServer: catch", n), !1))), F = (e) => {
130
129
  const { url: n, cause: t } = e;
131
130
  let s = n;
132
131
  return (t === V || t === $) && (s = `${e.message.to.uri.user}@${e.message.to.uri.host}`), s;
@@ -154,24 +153,24 @@ const re = (e = new Error()) => {
154
153
  }
155
154
  return s;
156
155
  }, oe = (e = new Error()) => {
157
- const { code: n, cause: t, message: s } = e, r = F(e), a = {};
158
- return s && (a.message = s), r && (a.link = r), n && (a.code = n), t && (a.cause = t), a;
159
- }, ae = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
156
+ const { code: n, cause: t, message: s } = e, r = F(e), o = {};
157
+ return s && (o.message = s), r && (o.link = r), n && (o.code = n), t && (o.cause = t), o;
158
+ }, ce = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
160
159
  __proto__: null,
161
160
  EErrorTypes: X,
162
161
  getLinkError: F,
163
162
  getTypeFromError: re,
164
163
  getValuesFromError: oe
165
- }, Symbol.toStringTag, { value: "Module" })), ce = ({
164
+ }, Symbol.toStringTag, { value: "Module" })), ae = ({
166
165
  sessionId: e,
167
166
  remoteAddress: n,
168
167
  isMutedAudio: t,
169
168
  isMutedVideo: s,
170
169
  isRegistered: r,
171
- isPresentationCall: a
170
+ isPresentationCall: o
172
171
  }) => {
173
- const c = [], i = t ? "0" : "1", u = s ? "0" : "1";
174
- return c.push(`X-Vinteo-Mic-State: ${i}`, `X-Vinteo-MainCam-State: ${u}`), r || c.push("X-Vinteo-Purgatory-Call: yes"), e && c.push(`X-Vinteo-Session: ${e}`), a && c.push("X-Vinteo-Presentation-Call: yes"), n && c.push(`X-Vinteo-Remote: ${n}`), c;
172
+ const a = [], u = t ? "0" : "1", m = s ? "0" : "1";
173
+ return a.push(`X-Vinteo-Mic-State: ${u}`, `X-Vinteo-MainCam-State: ${m}`), r || a.push("X-Vinteo-Purgatory-Call: yes"), e && a.push(`X-Vinteo-Session: ${e}`), o && a.push("X-Vinteo-Presentation-Call: yes"), n && a.push(`X-Vinteo-Remote: ${n}`), a;
175
174
  }, ie = ({
176
175
  appName: e,
177
176
  appVersion: n,
@@ -188,57 +187,57 @@ const re = (e = new Error()) => {
188
187
  appName: r
189
188
  }) => e ? ie({ appVersion: n, browserName: t, browserVersion: s, appName: r }) : "Chrome", le = (e) => async () => {
190
189
  if (e.isCallActive)
191
- return o("askPermissionToEnableCam"), e.askPermissionToEnableCam();
192
- }, Se = (e) => (t) => (o("onMustStopPresentation"), e.onSession("mustStopPresentation", t)), me = (e) => (t) => (o("onUseLicense"), e.onSession("useLicense", t)), de = (e) => async ({
190
+ return c("askPermissionToEnableCam"), e.askPermissionToEnableCam();
191
+ }, Se = (e) => (t) => (c("onMustStopPresentation"), e.onSession("mustStopPresentation", t)), de = (e) => (t) => (c("onUseLicense"), e.onSession("useLicense", t)), me = (e) => async ({
193
192
  isEnabledCam: t,
194
193
  isEnabledMic: s
195
194
  }) => {
196
195
  if (e.isCallActive)
197
- return o("sendMediaState"), e.sendMediaState({ cam: t, mic: s });
196
+ return c("sendMediaState"), e.sendMediaState({ cam: t, mic: s });
198
197
  }, fe = (e) => async () => {
199
198
  if (e.isCallActive)
200
- return o("sendRefusalToTurnOnCam"), e.sendRefusalToTurnOnCam().catch((t) => {
201
- o("sendRefusalToTurnOnCam: error", t);
199
+ return c("sendRefusalToTurnOnCam"), e.sendRefusalToTurnOnCam().catch((t) => {
200
+ c("sendRefusalToTurnOnCam: error", t);
202
201
  });
203
202
  }, Ce = (e) => async () => {
204
203
  if (e.isCallActive)
205
- return o("sendRefusalToTurnOnMic"), e.sendRefusalToTurnOnMic().catch((t) => {
206
- o("sendRefusalToTurnOnMic: error", t);
204
+ return c("sendRefusalToTurnOnMic"), e.sendRefusalToTurnOnMic().catch((t) => {
205
+ c("sendRefusalToTurnOnMic: error", t);
207
206
  });
208
- }, Re = 1e6, Ee = ({
209
- maxBitrate: e = Re,
207
+ }, Ee = 1e6, ge = ({
208
+ maxBitrate: e = Ee,
210
209
  sipConnector: n
211
210
  }) => async ({
212
211
  mediaStream: s,
213
212
  isP2P: r = !1
214
- }) => (o("startPresentation"), n.startPresentation(s, {
213
+ }) => (c("startPresentation"), n.startPresentation(s, {
215
214
  isP2P: r,
216
215
  maxBitrate: e
217
- })), ge = ({ sipConnector: e }) => async ({ isP2P: t = !1 } = {}) => (o("stopShareSipConnector"), e.stopPresentation({
216
+ })), Re = ({ sipConnector: e }) => async ({ isP2P: t = !1 } = {}) => (c("stopShareSipConnector"), e.stopPresentation({
218
217
  isP2P: t
219
- }).catch(o)), Te = 1e6, Me = ({
218
+ }).catch(c)), he = 1e6, ye = ({
220
219
  sipConnector: e,
221
- maxBitrate: n = Te
220
+ maxBitrate: n = he
222
221
  }) => async ({
223
222
  mediaStream: s,
224
223
  isP2P: r = !1
225
- }) => (o("updatePresentation"), e.updatePresentation(s, {
224
+ }) => (c("updatePresentation"), e.updatePresentation(s, {
226
225
  isP2P: r,
227
226
  maxBitrate: n
228
- })), ye = "ERROR_NOT_RUNNING", _e = (e) => {
227
+ })), Te = "ERROR_NOT_RUNNING", Me = (e) => {
229
228
  const n = new Error("Promise was not running");
230
- return n.basePromise = e, n.id = ye, n.name = "Not running", n;
231
- }, he = async (e, n) => e.reduce(
232
- async (t, s) => t.then(async ({ success: r, errors: a, results: c }) => (!n || n(s) ? s() : Promise.reject(_e(s))).then((i) => ({
233
- errors: a,
234
- success: [...r, i],
235
- results: [...c, i],
229
+ return n.basePromise = e, n.id = Te, n.name = "Not running", n;
230
+ }, _e = async (e, n) => e.reduce(
231
+ async (t, s) => t.then(async ({ success: r, errors: o, results: a }) => (!n || n(s) ? s() : Promise.reject(Me(s))).then((u) => ({
232
+ errors: o,
233
+ success: [...r, u],
234
+ results: [...a, u],
236
235
  isSuccessful: !0,
237
236
  isError: !1
238
- })).catch((i) => ({
237
+ })).catch((u) => ({
239
238
  success: r,
240
- errors: [...a, i],
241
- results: [...c, i],
239
+ errors: [...o, u],
240
+ results: [...a, u],
242
241
  isSuccessful: !1,
243
242
  isError: !0
244
243
  }))),
@@ -249,67 +248,67 @@ const re = (e = new Error()) => {
249
248
  isSuccessful: !1,
250
249
  isError: !1
251
250
  })
252
- ), be = (e) => (n) => [...n].map((s) => async () => e(s)), Oe = async ({
251
+ ), be = (e) => (n) => [...n].map((s) => async () => e(s)), Ne = async ({
253
252
  accumulatedKeys: e,
254
253
  sendKey: n,
255
254
  canRunTask: t
256
255
  }) => {
257
256
  const r = be(n)(e);
258
- return he(r, t);
259
- }, Ne = (e) => (t) => (o("onStartMainCam"), e.onSession("admin-start-main-cam", t)), ve = (e) => (t) => (o("onStartMic"), e.onSession("admin-start-mic", t)), Ae = (e) => (t) => (o("onStopMainCam"), e.onSession("admin-stop-main-cam", t)), pe = (e) => (t) => (o("onStopMic"), e.onSession("admin-stop-mic", t)), Be = ({ sipConnector: e }) => {
260
- const n = (C, g) => ({ isSyncForced: y = !1 }) => {
261
- if (y) {
262
- C();
257
+ return _e(r, t);
258
+ }, Oe = (e) => (t) => (c("onStartMainCam"), e.onSession("admin-start-main-cam", t)), ve = (e) => (t) => (c("onStartMic"), e.onSession("admin-start-mic", t)), pe = (e) => (t) => (c("onStopMainCam"), e.onSession("admin-stop-main-cam", t)), Ae = (e) => (t) => (c("onStopMic"), e.onSession("admin-stop-mic", t)), Pe = ({ sipConnector: e }) => {
259
+ const n = (y, g) => ({ isSyncForced: M = !1 }) => {
260
+ if (M) {
261
+ y();
263
262
  return;
264
263
  }
265
264
  g();
266
- }, t = Ne(e), s = Ae(e), r = ve(e), a = pe(e);
267
- let c = () => {
268
- }, i = () => {
265
+ }, t = Oe(e), s = pe(e), r = ve(e), o = Ae(e);
266
+ let a = () => {
269
267
  }, u = () => {
270
268
  }, m = () => {
269
+ }, E = () => {
271
270
  };
272
- const d = ({
273
- onStartMainCamForced: C,
271
+ const C = ({
272
+ onStartMainCamForced: y,
274
273
  onStartMainCamNotForced: g,
275
- onStopMainCamForced: y,
276
- onStopMainCamNotForced: h,
277
- onStartMicForced: b,
278
- onStartMicNotForced: T,
279
- onStopMicForced: M,
280
- onStopMicNotForced: p
274
+ onStopMainCamForced: M,
275
+ onStopMainCamNotForced: v,
276
+ onStartMicForced: p,
277
+ onStartMicNotForced: _,
278
+ onStopMicForced: i,
279
+ onStopMicNotForced: S
281
280
  }) => {
282
- const _ = n(
283
- C,
281
+ const l = n(
282
+ y,
284
283
  g
285
284
  );
286
- c = t(_);
287
- const O = n(
288
- y,
289
- h
285
+ a = t(l);
286
+ const R = n(
287
+ M,
288
+ v
290
289
  );
291
- i = s(O);
292
- const N = n(b, T);
293
- u = r(N);
294
- const v = n(M, p);
295
- m = a(v);
296
- }, l = () => {
297
- c(), i(), u(), m();
290
+ u = s(R);
291
+ const b = n(p, _);
292
+ m = r(b);
293
+ const O = n(i, S);
294
+ E = o(O);
295
+ }, f = () => {
296
+ a(), u(), m(), E();
298
297
  };
299
298
  return {
300
- start: (C) => {
301
- d(C);
299
+ start: (y) => {
300
+ C(y);
302
301
  },
303
302
  stop: () => {
304
- l();
303
+ f();
305
304
  }
306
305
  };
307
- }, Ze = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
306
+ }, on = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
308
307
  __proto__: null,
309
- PURGATORY_CONFERENCE_NUMBER: x,
310
- createSyncMediaState: Be,
311
- error: ae,
312
- getExtraHeaders: ce,
308
+ PURGATORY_CONFERENCE_NUMBER: G,
309
+ createSyncMediaState: Pe,
310
+ error: ce,
311
+ getExtraHeaders: ae,
313
312
  getUserAgent: ue,
314
313
  hasPurgatory: A,
315
314
  resolveAnswerIncomingCall: ee,
@@ -317,83 +316,180 @@ const re = (e = new Error()) => {
317
316
  resolveCallToServer: ne,
318
317
  resolveConnectToServer: te,
319
318
  resolveDisconnectFromServer: se,
320
- resolveGetRemoteStreams: w,
319
+ resolveGetRemoteStreams: k,
321
320
  resolveOnMustStopPresentation: Se,
322
- resolveOnUseLicense: me,
323
- resolveSendMediaState: de,
321
+ resolveOnUseLicense: de,
322
+ resolveSendMediaState: me,
324
323
  resolveSendRefusalToTurnOnCam: fe,
325
324
  resolveSendRefusalToTurnOnMic: Ce,
326
- resolveStartPresentation: Ee,
327
- resolveStopShareSipConnector: ge,
328
- resolveUpdatePresentation: Me,
325
+ resolveStartPresentation: ge,
326
+ resolveStopShareSipConnector: Re,
327
+ resolveUpdatePresentation: ye,
329
328
  resolveUpdateRemoteStreams: D,
330
- sendDTMFAccumulated: Oe
331
- }, Symbol.toStringTag, { value: "Module" })), Pe = (e) => [...e.keys()].map((n) => e.get(n)), Ie = (e, n) => Pe(e).find((t) => t.type === n), we = async (e) => e.getStats().then((n) => {
329
+ sendDTMFAccumulated: Ne
330
+ }, Symbol.toStringTag, { value: "Module" })), we = (e) => [...e.keys()].map((n) => e.get(n)), Ie = (e, n) => we(e).find((t) => t.type === n), Be = async (e) => e.getStats().then((n) => {
332
331
  const t = Ie(n, "codec");
333
332
  return t == null ? void 0 : t.mimeType;
334
- }), De = (e) => e.find((n) => {
333
+ }), ke = (e) => e.find((n) => {
335
334
  var t;
336
335
  return ((t = n == null ? void 0 : n.track) == null ? void 0 : t.kind) === "video";
337
- }), K = (e, n) => e !== void 0 && n !== void 0 && e.toLowerCase().includes(n.toLowerCase()), Fe = 1e6, E = (e) => e * Fe, W = E(0.06), ke = E(4), Ue = (e) => e <= 64 ? W : e <= 128 ? E(0.12) : e <= 256 ? E(0.25) : e <= 384 ? E(0.32) : e <= 426 ? E(0.38) : e <= 640 ? E(0.5) : e <= 848 ? E(0.7) : e <= 1280 ? E(1) : e <= 1920 ? E(2) : ke, Le = "av1", Ve = (e) => K(e, Le), $e = 0.6, j = (e, n) => Ve(n) ? e * $e : e, xe = (e) => j(W, e), H = (e, n) => {
338
- const t = Ue(e);
339
- return j(t, n);
340
- }, Y = Q(), Ge = async () => Y().catch((e) => {
341
- o("videoSendingBalancer: error", e);
342
- }), Xe = async (e) => (Y.add(e), Ge()), k = async ({
336
+ }), K = (e, n) => e !== void 0 && n !== void 0 && e.toLowerCase().includes(n.toLowerCase()), De = "ERROR_NOT_RUNNING", Fe = (e) => {
337
+ const n = new Error("Promise was not running");
338
+ return n.basePromise = e, n.id = De, n.name = "Not running", n;
339
+ }, Ue = async (e, n) => e.reduce(
340
+ async (t, s) => t.then(async ({ success: r, errors: o, results: a }) => (!n || n(s) ? s() : Promise.reject(Fe(s))).then((u) => ({
341
+ errors: o,
342
+ success: [...r, u],
343
+ results: [...a, u],
344
+ isSuccessful: !0,
345
+ isError: !1
346
+ })).catch((u) => ({
347
+ success: r,
348
+ errors: [...o, u],
349
+ results: [...a, u],
350
+ isSuccessful: !1,
351
+ isError: !0
352
+ }))),
353
+ Promise.resolve({
354
+ success: [],
355
+ errors: [],
356
+ results: [],
357
+ isSuccessful: !1,
358
+ isError: !1
359
+ })
360
+ ), Le = new Error("Stack is empty"), I = (e) => e[e.length - 1], xe = new Error("Promise is not actual"), Ve = new Error(
361
+ "stackPromises only works with functions that returns a Promise"
362
+ ), $e = ({
363
+ noRejectIsNotActual: e = !1,
364
+ noRunIsNotActual: n = !1
365
+ } = {}) => {
366
+ const t = [], s = [], r = ({ task: i, index: S }) => {
367
+ s.push({ task: i, index: S });
368
+ }, o = (i, { task: S, index: l }) => {
369
+ const R = s.find(({ task: b, index: O }) => S === b && l === O);
370
+ if (!R)
371
+ throw new Error("Task not found");
372
+ if (R.promise)
373
+ throw new Error("Task is already running");
374
+ R.promise = i;
375
+ }, a = ({
376
+ task: i,
377
+ index: S
378
+ }) => {
379
+ const l = s.find(({ task: R, index: b }) => i === R && S === b);
380
+ if (l)
381
+ return l.promise;
382
+ }, u = ({ task: i }) => {
383
+ const S = I(s);
384
+ return (S == null ? void 0 : S.task) === i;
385
+ }, m = ({ task: i, index: S }) => (r({ task: i, index: S }), async () => {
386
+ let l = a({ task: i, index: S });
387
+ const R = u({ task: i });
388
+ return !l && n && !R ? Promise.resolve() : (l || (l = i({ isActual: R }), o(l, { task: i, index: S })), l);
389
+ }), E = ({
390
+ resolve: i,
391
+ reject: S
392
+ }) => ({ results: l, isSuccessful: R }) => {
393
+ const b = l.length, O = t.length;
394
+ if (b === O) {
395
+ const d = I(l);
396
+ if (R) {
397
+ i(d);
398
+ return;
399
+ }
400
+ S(d);
401
+ return;
402
+ }
403
+ if (e) {
404
+ const d = I(l);
405
+ i(d);
406
+ return;
407
+ }
408
+ S(xe);
409
+ };
410
+ let C = !1;
411
+ const f = () => {
412
+ C = !0;
413
+ }, T = () => {
414
+ C = !1;
415
+ }, h = () => C, y = async () => (f(), Ue(t, h)), g = async () => {
416
+ if (t.length === 0)
417
+ throw Le;
418
+ return new Promise((i, S) => {
419
+ const l = E({ resolve: i, reject: S });
420
+ y().then(l).catch(l);
421
+ });
422
+ }, M = (i) => {
423
+ if (typeof i != "function")
424
+ throw Ve;
425
+ const S = t.length;
426
+ return t.push(m({ task: i, index: S })), g;
427
+ }, v = async (i) => (M(i), g()), p = () => {
428
+ t.length = 0, s.length = 0;
429
+ }, _ = () => {
430
+ T(), p();
431
+ };
432
+ return g.add = M, g.run = v, g.stop = _, g;
433
+ }, Ge = 1e6, N = (e) => e * Ge, W = N(0.06), je = N(4), Xe = (e) => e <= 64 ? W : e <= 128 ? N(0.12) : e <= 256 ? N(0.25) : e <= 384 ? N(0.32) : e <= 426 ? N(0.38) : e <= 640 ? N(0.5) : e <= 848 ? N(0.7) : e <= 1280 ? N(1) : e <= 1920 ? N(2) : je, Ke = "av1", We = (e) => K(e, Ke), He = 0.6, H = (e, n) => We(n) ? e * He : e, Ye = (e) => H(W, e), Y = (e, n) => {
434
+ const t = Xe(e);
435
+ return H(t, n);
436
+ }, z = $e(), ze = async () => z().catch((e) => {
437
+ c("videoSendingBalancer: error", e);
438
+ }), qe = async (e) => (z.add(e), ze()), U = async ({
343
439
  sender: e,
344
440
  scaleResolutionDownBy: n,
345
441
  maxBitrate: t,
346
442
  onSetParameters: s
347
- }) => Xe(async () => z(e, { scaleResolutionDownBy: n, maxBitrate: t }, s)), Ke = async ({ sender: e, codec: n }, t) => {
348
- const r = xe(n);
349
- return k({
443
+ }) => qe(async () => q(e, { scaleResolutionDownBy: n, maxBitrate: t }, s)), Je = async ({ sender: e, codec: n }, t) => {
444
+ const r = Ye(n);
445
+ return U({
350
446
  sender: e,
351
447
  maxBitrate: r,
352
448
  onSetParameters: t,
353
449
  scaleResolutionDownBy: 200
354
450
  });
355
- }, I = async ({ sender: e, track: n, codec: t }, s) => {
356
- const c = n.getSettings().width, i = H(c, t);
357
- return k({
451
+ }, B = async ({ sender: e, track: n, codec: t }, s) => {
452
+ const a = n.getSettings().width, u = Y(a, t);
453
+ return U({
358
454
  sender: e,
359
- maxBitrate: i,
455
+ maxBitrate: u,
360
456
  onSetParameters: s,
361
457
  scaleResolutionDownBy: 1
362
458
  });
363
- }, We = async ({
459
+ }, Qe = async ({
364
460
  sender: e,
365
461
  track: n,
366
462
  resolution: t,
367
463
  codec: s
368
464
  }, r) => {
369
- const a = n.getSettings(), c = a.width, i = a.height, [u, m] = t.split("x"), d = c / Number(u), l = i / Number(m), f = Math.max(d, l, 1), C = H(Number(u), s);
370
- return k({
465
+ const o = n.getSettings(), a = o.width, u = o.height, [m, E] = t.split("x"), C = a / Number(m), f = u / Number(E), h = Math.max(C, f, 1), y = Y(Number(m), s);
466
+ return U({
371
467
  sender: e,
372
- maxBitrate: C,
468
+ maxBitrate: y,
373
469
  onSetParameters: r,
374
- scaleResolutionDownBy: f
470
+ scaleResolutionDownBy: h
375
471
  });
376
- }, je = async ({
472
+ }, Ze = async ({
377
473
  mainCam: e,
378
474
  resolutionMainCam: n,
379
475
  sender: t,
380
476
  track: s,
381
477
  codec: r
382
- }, a) => {
478
+ }, o) => {
383
479
  switch (e) {
384
- case B.PAUSE_MAIN_CAM:
385
- return Ke({ sender: t, codec: r }, a);
386
- case B.RESUME_MAIN_CAM:
387
- return I({ sender: t, track: s, codec: r }, a);
388
- case B.MAX_MAIN_CAM_RESOLUTION:
389
- return n !== void 0 ? We(
480
+ case P.PAUSE_MAIN_CAM:
481
+ return Je({ sender: t, codec: r }, o);
482
+ case P.RESUME_MAIN_CAM:
483
+ return B({ sender: t, track: s, codec: r }, o);
484
+ case P.MAX_MAIN_CAM_RESOLUTION:
485
+ return n !== void 0 ? Qe(
390
486
  { sender: t, track: s, codec: r, resolution: n },
391
- a
392
- ) : I({ sender: t, track: s, codec: r }, a);
487
+ o
488
+ ) : B({ sender: t, track: s, codec: r }, o);
393
489
  default:
394
- return I({ sender: t, track: s, codec: r }, a);
490
+ return B({ sender: t, track: s, codec: r }, o);
395
491
  }
396
- }, U = {
492
+ }, L = {
397
493
  isChanged: !1,
398
494
  parameters: {
399
495
  encodings: [{}],
@@ -402,54 +498,54 @@ const re = (e = new Error()) => {
402
498
  headerExtensions: [],
403
499
  rtcp: {}
404
500
  }
405
- }, L = async ({
501
+ }, x = async ({
406
502
  mainCam: e,
407
503
  resolutionMainCam: n,
408
504
  connection: t,
409
505
  onSetParameters: s,
410
506
  ignoreForCodec: r
411
507
  }) => {
412
- const a = t.getSenders(), c = De(a);
413
- if (!(c != null && c.track))
414
- return U;
415
- const i = await we(c);
416
- return K(i, r) ? U : je(
417
- { mainCam: e, resolutionMainCam: n, sender: c, codec: i, track: c.track },
508
+ const o = t.getSenders(), a = ke(o);
509
+ if (!(a != null && a.track))
510
+ return L;
511
+ const u = await Be(a);
512
+ return K(u, r) ? L : Ze(
513
+ { mainCam: e, resolutionMainCam: n, sender: a, codec: u, track: a.track },
418
514
  s
419
515
  );
420
- }, en = (e, {
516
+ }, cn = (e, {
421
517
  ignoreForCodec: n,
422
518
  onSetParameters: t
423
519
  } = {}) => {
424
520
  const s = async () => {
425
- const { connection: u } = e;
426
- if (!u)
521
+ const { connection: m } = e;
522
+ if (!m)
427
523
  throw new Error("connection is not exist");
428
- return L({
429
- connection: u,
524
+ return x({
525
+ connection: m,
430
526
  onSetParameters: t,
431
527
  ignoreForCodec: n
432
528
  });
433
529
  };
434
530
  let r = s;
435
- const a = async (u) => (r = async () => {
436
- const { mainCam: m, resolutionMainCam: d } = u, { connection: l } = e;
437
- if (!l)
531
+ const o = async (m) => (r = async () => {
532
+ const { mainCam: E, resolutionMainCam: C } = m, { connection: f } = e;
533
+ if (!f)
438
534
  throw new Error("connection is not exist");
439
- return L({
440
- mainCam: m,
441
- resolutionMainCam: d,
442
- connection: l,
535
+ return x({
536
+ mainCam: E,
537
+ resolutionMainCam: C,
538
+ connection: f,
443
539
  onSetParameters: t,
444
540
  ignoreForCodec: n
445
541
  });
446
542
  }, r());
447
543
  return {
448
544
  subscribe: () => {
449
- e.onSession("main-cam-control", a);
545
+ e.onSession("main-cam-control", o);
450
546
  },
451
547
  unsubscribe: () => {
452
- e.offSession("main-cam-control", a);
548
+ e.offSession("main-cam-control", o);
453
549
  },
454
550
  balanceByTrack: s,
455
551
  resetMainCamControl() {
@@ -461,19 +557,19 @@ const re = (e = new Error()) => {
461
557
  };
462
558
  };
463
559
  export {
464
- B as EEventsMainCAM,
465
- sn as EEventsMic,
466
- rn as EEventsSyncMediaState,
467
- on as EUseLicense,
468
- an as causes,
469
- cn as constants,
470
- fn as debug,
471
- Ye as default,
472
- un as disableDebug,
473
- ln as enableDebug,
474
- Sn as eventNames,
475
- we as getCodecFromSender,
476
- mn as hasCanceledCallError,
477
- en as resolveVideoSendingBalancer,
478
- Ze as tools
560
+ P as EEventsMainCAM,
561
+ ln as EEventsMic,
562
+ Sn as EEventsSyncMediaState,
563
+ dn as EUseLicense,
564
+ mn as causes,
565
+ fn as constants,
566
+ yn as debug,
567
+ nn as default,
568
+ Cn as disableDebug,
569
+ En as enableDebug,
570
+ gn as eventNames,
571
+ Be as getCodecFromSender,
572
+ Rn as hasCanceledCallError,
573
+ cn as resolveVideoSendingBalancer,
574
+ on as tools
479
575
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sip-connector",
3
- "version": "6.22.1",
3
+ "version": "6.22.2",
4
4
  "description": "Module for connect to Vinteo server",
5
5
  "keywords": [
6
6
  "webrtc",
@@ -78,7 +78,7 @@
78
78
  "@commitlint/config-conventional": "^18.6.0",
79
79
  "@nabla/vite-plugin-eslint": "^2.0.2",
80
80
  "@types/debug": "^4.1.12",
81
- "@types/jest": "^29.5.11",
81
+ "@types/jest": "^29.5.12",
82
82
  "@typescript-eslint/eslint-plugin": "^6.20.0",
83
83
  "@typescript-eslint/parser": "^6.20.0",
84
84
  "cross-env": "^7.0.3",
@@ -92,7 +92,7 @@
92
92
  "eslint-plugin-jest": "^27.6.3",
93
93
  "eslint-plugin-prettier": "^5.1.3",
94
94
  "eslint-plugin-unicorn": "^50.0.1",
95
- "husky": "^9.0.7",
95
+ "husky": "^9.0.10",
96
96
  "jest": "^29.7.0",
97
97
  "jest-environment-jsdom": "^29.7.0",
98
98
  "jest-extended": "^4.0.2",
@@ -113,7 +113,6 @@
113
113
  "@krivega/jssip": "^3.22.0",
114
114
  "debug": "^4.3.4",
115
115
  "events-constructor": "^1.2.2",
116
- "stack-promises": "^1.0.2",
117
116
  "ts-debounce": "^4.0.0",
118
117
  "webrtc-mock": "^1.0.2"
119
118
  },