sip-connector 7.0.8 → 7.0.9

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.
@@ -219,13 +219,13 @@ export default class SipConnector {
219
219
  offSession<T>(eventName: TEventSession, handler: (data: T) => void): void;
220
220
  isConfigured(): boolean;
221
221
  getConnectionConfiguration(): {
222
- sipServerUrl?: string | undefined;
223
- displayName?: string | undefined;
224
- register?: boolean | undefined;
225
- user?: string | undefined;
226
- password?: string | undefined;
227
- number?: string | undefined;
228
- answer?: boolean | undefined;
222
+ sipServerUrl?: string;
223
+ displayName?: string;
224
+ register?: boolean;
225
+ user?: string;
226
+ password?: string;
227
+ number?: string;
228
+ answer?: boolean;
229
229
  };
230
230
  getRemoteStreams(): MediaStream[] | undefined;
231
231
  get connection(): RTCPeerConnection | undefined;
@@ -3,21 +3,15 @@ import { default as UAmock } from './UA.mock';
3
3
  import { default as WebSocketInterfaceMock } from './WebSocketInterface.mock';
4
4
 
5
5
  declare const jssip: {
6
- triggerNewInfo: (session: RTCSession, extraHeaders: [
7
- string,
8
- string
9
- ][]) => void;
10
- triggerNewSipEvent: (ua: UA, extraHeaders: [
11
- string,
12
- string
13
- ][]) => void;
6
+ triggerNewInfo: (session: RTCSession, extraHeaders: [string, string][]) => void;
7
+ triggerNewSipEvent: (ua: UA, extraHeaders: [string, string][]) => void;
14
8
  triggerIncomingSession: (ua: UAmock, { incomingNumber, displayName, host, }: {
15
9
  incomingNumber?: string;
16
10
  displayName: string;
17
11
  host: string;
18
12
  }) => void;
19
13
  triggerFailIncomingSession: (incomingSession: unknown, options?: {
20
- originator: 'local' | 'remote';
14
+ originator: "local" | "remote";
21
15
  }) => void;
22
16
  WebSocketInterface: typeof WebSocketInterfaceMock;
23
17
  UA: typeof UAmock;
package/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const r=require("./SipConnector-3pnvrFP5.cjs"),j=require("ts-debounce"),H=require("@krivega/cancelable-promise"),Y=require("repeated-calls"),z=require("sequent-promises"),J=require("stack-promises"),Q=require("debug"),L="purgatory",N=e=>e===L,I=e=>()=>(r.logger("getRemoteStreams"),e.getRemoteStreams()),Z=({kind:e,readyState:t})=>e==="video"&&t==="live",V=e=>({track:t})=>{Z(t)&&e()},D=({getRemoteStreams:e,setRemoteStreams:t})=>j.debounce(()=>{const n=e();r.logger("remoteStreams",n),n&&t(n)},200),ee=e=>async n=>{const{mediaStream:s,extraHeaders:o,iceServers:c,degradationPreference:a,setRemoteStreams:l,onBeforeProgressCall:u,onSuccessProgressCall:d,onEnterPurgatory:m,onEnterConference:S,onFailProgressCall:f,onFinishProgressCall:g,onEndedCall:C}=n,M=D({setRemoteStreams:l,getRemoteStreams:I(e)}),_=V(M);r.logger("answerIncomingCall",n);const y=async()=>e.answerToIncomingCall({mediaStream:s,extraHeaders:o,iceServers:c,degradationPreference:a,ontrack:_}),v=()=>{const{remoteCallerData:i}=e;return i.incomingNumber};let R=!1,T;const b=(r.logger("subscribeEnterConference: onEnterConference",S),m??S?e.onSession("enterRoom",i=>{r.logger("enterRoom",{_room:i,isSuccessProgressCall:R}),T=i,N(T)?m&&m():S&&S({isSuccessProgressCall:R})}):()=>{}),h=i=>(r.logger("onSuccess"),R=!0,M(),d&&d({isPurgatory:N(T)}),e.onceRaceSession(["ended","failed"],()=>{b(),C&&C()}),i),O=i=>{throw r.logger("onFail"),f&&f(),b(),i},A=()=>{r.logger("onFinish"),g&&g()};if(r.logger("onBeforeProgressCall"),u){const i=v();u(i)}return y().then(h).catch(i=>O(i)).finally(A)},ne=e=>async n=>{const{conference:s,mediaStream:o,extraHeaders:c,iceServers:a,degradationPreference:l,setRemoteStreams:u,onBeforeProgressCall:d,onSuccessProgressCall:m,onEnterPurgatory:S,onEnterConference:f,onFailProgressCall:g,onFinishProgressCall:C,onEndedCall:M}=n,_=D({setRemoteStreams:u,getRemoteStreams:I(e)}),y=V(_);r.logger("callToServer",n);const v=async()=>(r.logger("startCall"),e.call({mediaStream:o,extraHeaders:c,iceServers:a,degradationPreference:l,number:s,ontrack:y}));let R=!1,T;const b=(r.logger("subscribeEnterConference: onEnterConference",f),S??f?e.onSession("enterRoom",({room:i})=>{r.logger("enterRoom",{_room:i,isSuccessProgressCall:R}),T=i,N(T)?S&&S():f&&f({isSuccessProgressCall:R})}):()=>{}),h=i=>(r.logger("onSuccess"),R=!0,_(),m&&m({isPurgatory:N(T)}),e.onceRaceSession(["ended","failed"],()=>{b(),M&&M()}),i),O=i=>{throw r.logger("onFail"),g&&g(),b(),i},A=()=>{r.logger("onFinish"),C&&C()};return r.logger("onBeforeProgressCall"),d&&d(s),v().then(h).catch(i=>O(i)).finally(A)},P=e=>{if(!H.isCanceledError(e)&&!Y.hasCanceledError(e))throw e;return{isSuccessful:!1}},te=e=>async n=>{const{userAgent:s,sipWebSocketServerURL:o,sipServerUrl:c,remoteAddress:a,displayName:l,name:u,password:d,isRegisteredUser:m,sdpSemantics:S,isDisconnectOnFail:f}=n;return r.logger("connectToServer",n),e.connect({userAgent:s,sdpSemantics:S,sipWebSocketServerURL:o,sipServerUrl:c,remoteAddress:a,displayName:l,password:d,user:u,register:m}).then(g=>(r.logger("connectToServer then"),{ua:g,isSuccessful:!0})).catch(async g=>(r.logger("connectToServer catch: error",g),f===!0?e.disconnect().then(()=>P(g)).catch(()=>P(g)):P(g)))},re=e=>async()=>(r.logger("disconnectFromServer"),e.disconnect().then(()=>(r.logger("disconnectFromServer: then"),{isSuccessful:!0})).catch(t=>(r.logger("disconnectFromServer: catch",t),{isSuccessful:!1}))),w=e=>{const{url:t,cause:n}=e;let s=t;return(n===r.BAD_MEDIA_DESCRIPTION||n===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 se=(e=new Error)=>{var o;const{cause:t,socket:n}=e;let s="CONNECT_SERVER_FAILED";switch(t){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:n&&((o=n==null?void 0:n._ws)==null?void 0:o.readyState)===3?s="WS_CONNECTION_FAILED":w(e)&&(s="CONNECT_SERVER_FAILED_BY_LINK")}return s},oe=(e=new Error)=>{const{code:t,cause:n,message:s}=e,o=w(e),c={};return s&&(c.message=s),o&&(c.link=o),t&&(c.code=t),n&&(c.cause=n),c},ce=Object.freeze(Object.defineProperty({__proto__:null,EErrorTypes:$,getLinkError:w,getTypeFromError:se,getValuesFromError:oe},Symbol.toStringTag,{value:"Module"})),ae=({sessionId:e,remoteAddress:t,isMutedAudio:n,isMutedVideo:s,isRegistered:o,isPresentationCall:c})=>{const a=[],l=n?"0":"1",u=s?"0":"1";return a.push(`X-Vinteo-Mic-State: ${l}`,`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"),t&&a.push(`X-Vinteo-Remote: ${t}`),a},ie=({appName:e,appVersion:t,browserName:n,browserVersion:s})=>{const o=`${e} ${t}`;return`ChromeNew - ${n?`${n} ${s}, ${o}`:o}`},ue=({isUnifiedSdpSemantic:e,appVersion:t,browserName:n,browserVersion:s,appName:o})=>e?ie({appVersion:t,browserName:n,browserVersion:s,appName:o}):"Chrome",le=e=>async()=>{if(e.isCallActive)return r.logger("askPermissionToEnableCam"),e.askPermissionToEnableCam()},Se=e=>n=>(r.logger("onMustStopPresentation"),e.onSession("mustStopPresentation",n)),ge=e=>n=>(r.logger("onMoveToSpectators"),e.onSession("participant:move-request-to-spectators",n)),de=e=>n=>(r.logger("onUseLicense"),e.onSession("useLicense",n)),me=e=>async({isEnabledCam:n,isEnabledMic:s})=>{if(e.isCallActive)return r.logger("sendMediaState"),e.sendMediaState({cam:n,mic:s})},Ce=e=>async()=>{if(e.isCallActive)return r.logger("sendRefusalToTurnOnCam"),e.sendRefusalToTurnOnCam().catch(n=>{r.logger("sendRefusalToTurnOnCam: error",n)})},fe=e=>async()=>{if(e.isCallActive)return r.logger("sendRefusalToTurnOnMic"),e.sendRefusalToTurnOnMic().catch(n=>{r.logger("sendRefusalToTurnOnMic: error",n)})},Ee=1e6,Me=({maxBitrate:e=Ee,sipConnector:t})=>async({mediaStream:s,isP2P:o=!1})=>(r.logger("startPresentation"),t.startPresentation(s,{isP2P:o,maxBitrate:e})),Re=({sipConnector:e})=>async({isP2P:n=!1}={})=>(r.logger("stopShareSipConnector"),e.stopPresentation({isP2P:n}).catch(s=>{r.logger(s)})),Te=1e6,_e=({sipConnector:e,maxBitrate:t=Te})=>async({mediaStream:s,isP2P:o=!1})=>(r.logger("updatePresentation"),e.updatePresentation(s,{isP2P:o,maxBitrate:t})),be=e=>t=>[...t].map(s=>async()=>e(s)),ye=async({accumulatedKeys:e,sendKey:t,canRunTask:n})=>{const o=be(t)(e);return z.sequentPromises(o,n)},ve=e=>n=>(r.logger("onStartMainCam"),e.onSession("admin-start-main-cam",n)),he=e=>n=>(r.logger("onStartMic"),e.onSession("admin-start-mic",n)),Oe=e=>n=>(r.logger("onStopMainCam"),e.onSession("admin-stop-main-cam",n)),Ae=e=>n=>(r.logger("onStopMic"),e.onSession("admin-stop-mic",n)),Ne=({sipConnector:e})=>{const t=(C,M)=>({isSyncForced:_=!1})=>{if(_){C();return}M()},n=ve(e),s=Oe(e),o=he(e),c=Ae(e);let a=()=>{},l=()=>{},u=()=>{},d=()=>{};const m=({onStartMainCamForced:C,onStartMainCamNotForced:M,onStopMainCamForced:_,onStopMainCamNotForced:y,onStartMicForced:v,onStartMicNotForced:R,onStopMicForced:T,onStopMicNotForced:p})=>{const b=t(C,M);a=n(b);const h=t(_,y);l=s(h);const O=t(v,R);u=o(O);const A=t(T,p);d=c(A)},S=()=>{a(),l(),u(),d()};return{start:C=>{m(C)},stop:()=>{S()}}},pe=Object.freeze(Object.defineProperty({__proto__:null,PURGATORY_CONFERENCE_NUMBER:L,createSyncMediaState:Ne,error:ce,getExtraHeaders:ae,getUserAgent:ue,hasPurgatory:N,resolveAnswerIncomingCall:ee,resolveAskPermissionToEnableCam:le,resolveCallToServer:ne,resolveConnectToServer:te,resolveDisconnectFromServer:re,resolveGetRemoteStreams:I,resolveOnMoveToSpectators:ge,resolveOnMustStopPresentation:Se,resolveOnUseLicense:de,resolveSendMediaState:me,resolveSendRefusalToTurnOnCam:Ce,resolveSendRefusalToTurnOnMic:fe,resolveStartPresentation:Me,resolveStopShareSipConnector:Re,resolveUpdatePresentation:_e,resolveUpdateRemoteStreams:D,sendDTMFAccumulated:ye},Symbol.toStringTag,{value:"Module"})),Pe=e=>[...e.keys()].map(t=>e.get(t)),Be=(e,t)=>Pe(e).find(n=>n.type===t),q=async e=>e.getStats().then(t=>{const n=Be(t,"codec");return n==null?void 0:n.mimeType}),Ie=e=>e.find(t=>{var n;return((n=t==null?void 0:t.track)==null?void 0:n.kind)==="video"}),x=(e,t)=>e!==void 0&&t!==void 0&&e.toLowerCase().includes(t.toLowerCase()),De=1e6,E=e=>e*De,G=E(.06),we=E(4),Fe=e=>e<=64?G: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=>x(e,ke),Le=.6,X=(e,t)=>Ue(t)?e*Le:e,Ve=e=>X(G,e),K=(e,t)=>{const n=Fe(e);return X(n,t)},W=J.createStackPromises(),$e=async()=>W().catch(e=>{r.logger("videoSendingBalancer: error",e)}),qe=async e=>(W.add(e),$e()),F=async({sender:e,scaleResolutionDownBy:t,maxBitrate:n,onSetParameters:s})=>qe(async()=>r.setEncodingsToSender(e,{scaleResolutionDownBy:t,maxBitrate:n},s)),xe=async({sender:e,codec:t},n)=>{const o=Ve(t);return F({sender:e,maxBitrate:o,onSetParameters:n,scaleResolutionDownBy:200})},B=async({sender:e,track:t,codec:n},s)=>{const a=t.getSettings().width,l=K(a,n);return F({sender:e,maxBitrate:l,onSetParameters:s,scaleResolutionDownBy:1})},Ge=async({sender:e,track:t,resolution:n,codec:s},o)=>{const c=t.getSettings(),a=c.width,l=c.height,[u,d]=n.split("x"),m=a/Number(u),S=l/Number(d),g=Math.max(m,S,1),C=K(Number(u),s);return F({sender:e,maxBitrate:C,onSetParameters:o,scaleResolutionDownBy:g})},Xe=async({mainCam:e,resolutionMainCam:t,sender:n,track:s,codec:o},c)=>{switch(e){case r.EEventsMainCAM.PAUSE_MAIN_CAM:return xe({sender:n,codec:o},c);case r.EEventsMainCAM.RESUME_MAIN_CAM:return B({sender:n,track:s,codec:o},c);case r.EEventsMainCAM.MAX_MAIN_CAM_RESOLUTION:return t!==void 0?Ge({sender:n,track:s,codec:o,resolution:t},c):B({sender:n,track:s,codec:o},c);default:return B({sender:n,track:s,codec:o},c)}},k={isChanged:!1,parameters:{encodings:[{}],transactionId:"0",codecs:[],headerExtensions:[],rtcp:{}}},U=async({mainCam:e,resolutionMainCam:t,connection:n,onSetParameters:s,ignoreForCodec:o})=>{const c=n.getSenders(),a=Ie(c);if(!(a!=null&&a.track))return k;const l=await q(a);return x(l,o)?k:Xe({mainCam:e,resolutionMainCam:t,sender:a,codec:l,track:a.track},s)},Ke=(e,{ignoreForCodec:t,onSetParameters:n}={})=>{const s=async()=>{const{connection:u}=e;if(!u)throw new Error("connection is not exist");return U({connection:u,onSetParameters:n,ignoreForCodec:t})};let o=s;const c=async u=>(o=async()=>{const{mainCam:d,resolutionMainCam:m}=u,{connection:S}=e;if(!S)throw new Error("connection is not exist");return U({mainCam:d,resolutionMainCam:m,connection:S,onSetParameters:n,ignoreForCodec:t})},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=Q;exports.getCodecFromSender=q;exports.resolveVideoSendingBalancer=Ke;exports.tools=pe;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const r=require("./SipConnector-3pnvrFP5.cjs"),W=require("ts-debounce"),H=require("@krivega/cancelable-promise"),Y=require("repeated-calls"),z=require("sequent-promises"),J=require("stack-promises"),Q=require("debug"),L="purgatory",N=e=>e===L,I=e=>()=>(r.logger("getRemoteStreams"),e.getRemoteStreams()),Z=({kind:e,readyState:t})=>e==="video"&&t==="live",V=e=>({track:t})=>{Z(t)&&e()},D=({getRemoteStreams:e,setRemoteStreams:t})=>W.debounce(()=>{const n=e();r.logger("remoteStreams",n),n&&t(n)},200),ee=e=>async n=>{const{mediaStream:s,extraHeaders:o,iceServers:c,degradationPreference:a,setRemoteStreams:l,onBeforeProgressCall:u,onSuccessProgressCall:d,onEnterPurgatory:m,onEnterConference:g,onFailProgressCall:C,onFinishProgressCall:S,onEndedCall:f}=n,M=D({setRemoteStreams:l,getRemoteStreams:I(e)}),y=V(M);r.logger("answerIncomingCall",n);const b=async()=>e.answerToIncomingCall({mediaStream:s,extraHeaders:o,iceServers:c,degradationPreference:a,ontrack:y}),v=()=>{const{remoteCallerData:i}=e;return i.incomingNumber};let R=!1,T;const _=(r.logger("subscribeEnterConference: onEnterConference",g),m??g?e.onSession("enterRoom",i=>{r.logger("enterRoom",{_room:i,isSuccessProgressCall:R}),T=i,N(T)?m&&m():g&&g({isSuccessProgressCall:R})}):()=>{}),h=i=>(r.logger("onSuccess"),R=!0,M(),d&&d({isPurgatory:N(T)}),e.onceRaceSession(["ended","failed"],()=>{_(),f&&f()}),i),O=i=>{throw r.logger("onFail"),C&&C(),_(),i},A=()=>{r.logger("onFinish"),S&&S()};if(r.logger("onBeforeProgressCall"),u){const i=v();u(i)}return b().then(h).catch(i=>O(i)).finally(A)},ne=e=>async n=>{const{conference:s,mediaStream:o,extraHeaders:c,iceServers:a,degradationPreference:l,setRemoteStreams:u,onBeforeProgressCall:d,onSuccessProgressCall:m,onEnterPurgatory:g,onEnterConference:C,onFailProgressCall:S,onFinishProgressCall:f,onEndedCall:M}=n,y=D({setRemoteStreams:u,getRemoteStreams:I(e)}),b=V(y);r.logger("callToServer",n);const v=async()=>(r.logger("startCall"),e.call({mediaStream:o,extraHeaders:c,iceServers:a,degradationPreference:l,number:s,ontrack:b}));let R=!1,T;const _=(r.logger("subscribeEnterConference: onEnterConference",C),g??C?e.onSession("enterRoom",({room:i})=>{r.logger("enterRoom",{_room:i,isSuccessProgressCall:R}),T=i,N(T)?g&&g():C&&C({isSuccessProgressCall:R})}):()=>{}),h=i=>(r.logger("onSuccess"),R=!0,y(),m&&m({isPurgatory:N(T)}),e.onceRaceSession(["ended","failed"],()=>{_(),M&&M()}),i),O=i=>{throw r.logger("onFail"),S&&S(),_(),i},A=()=>{r.logger("onFinish"),f&&f()};return r.logger("onBeforeProgressCall"),d&&d(s),v().then(h).catch(i=>O(i)).finally(A)},P=e=>{if(!H.isCanceledError(e)&&!Y.hasCanceledError(e))throw e;return{isSuccessful:!1}},te=e=>async n=>{const{userAgent:s,sipWebSocketServerURL:o,sipServerUrl:c,remoteAddress:a,displayName:l,name:u,password:d,isRegisteredUser:m,sdpSemantics:g,isDisconnectOnFail:C}=n;return r.logger("connectToServer",n),e.connect({userAgent:s,sdpSemantics:g,sipWebSocketServerURL:o,sipServerUrl:c,remoteAddress:a,displayName:l,password:d,user:u,register:m}).then(S=>(r.logger("connectToServer then"),{ua:S,isSuccessful:!0})).catch(async S=>(r.logger("connectToServer catch: error",S),C===!0?e.disconnect().then(()=>P(S)).catch(()=>P(S)):P(S)))},re=e=>async()=>(r.logger("disconnectFromServer"),e.disconnect().then(()=>(r.logger("disconnectFromServer: then"),{isSuccessful:!0})).catch(t=>(r.logger("disconnectFromServer: catch",t),{isSuccessful:!1}))),w=e=>{const{url:t,cause:n}=e;let s=t;return(n===r.BAD_MEDIA_DESCRIPTION||n===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 se=(e=new Error)=>{var o;const{cause:t,socket:n}=e;let s="CONNECT_SERVER_FAILED";switch(t){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:n&&((o=n==null?void 0:n._ws)==null?void 0:o.readyState)===3?s="WS_CONNECTION_FAILED":w(e)&&(s="CONNECT_SERVER_FAILED_BY_LINK")}return s},oe=e=>{let t="";try{t=JSON.stringify(e)}catch(n){r.logger("failed to stringify message",n)}return t},ce=(e=new Error)=>{const{code:t,cause:n,message:s}=e,o=w(e),c={code:"",cause:"",message:""};return typeof s=="object"&&s!==null?c.message=oe(s):s&&(c.message=String(s)),o&&(c.link=o),t&&(c.code=t),n&&(c.cause=n),c},ae=Object.freeze(Object.defineProperty({__proto__:null,EErrorTypes:$,getLinkError:w,getTypeFromError:se,getValuesFromError:ce},Symbol.toStringTag,{value:"Module"})),ie=({sessionId:e,remoteAddress:t,isMutedAudio:n,isMutedVideo:s,isRegistered:o,isPresentationCall:c})=>{const a=[],l=n?"0":"1",u=s?"0":"1";return a.push(`X-Vinteo-Mic-State: ${l}`,`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"),t&&a.push(`X-Vinteo-Remote: ${t}`),a},ue=({appName:e,appVersion:t,browserName:n,browserVersion:s})=>{const o=`${e} ${t}`;return`ChromeNew - ${n?`${n} ${s}, ${o}`:o}`},le=({isUnifiedSdpSemantic:e,appVersion:t,browserName:n,browserVersion:s,appName:o})=>e?ue({appVersion:t,browserName:n,browserVersion:s,appName:o}):"Chrome",ge=e=>async()=>{if(e.isCallActive)return r.logger("askPermissionToEnableCam"),e.askPermissionToEnableCam()},Se=e=>n=>(r.logger("onMustStopPresentation"),e.onSession("mustStopPresentation",n)),de=e=>n=>(r.logger("onMoveToSpectators"),e.onSession("participant:move-request-to-spectators",n)),me=e=>n=>(r.logger("onUseLicense"),e.onSession("useLicense",n)),fe=e=>async({isEnabledCam:n,isEnabledMic:s})=>{if(e.isCallActive)return r.logger("sendMediaState"),e.sendMediaState({cam:n,mic:s})},Ce=e=>async()=>{if(e.isCallActive)return r.logger("sendRefusalToTurnOnCam"),e.sendRefusalToTurnOnCam().catch(n=>{r.logger("sendRefusalToTurnOnCam: error",n)})},Ee=e=>async()=>{if(e.isCallActive)return r.logger("sendRefusalToTurnOnMic"),e.sendRefusalToTurnOnMic().catch(n=>{r.logger("sendRefusalToTurnOnMic: error",n)})},Me=1e6,Re=({maxBitrate:e=Me,sipConnector:t})=>async({mediaStream:s,isP2P:o=!1})=>(r.logger("startPresentation"),t.startPresentation(s,{isP2P:o,maxBitrate:e})),Te=({sipConnector:e})=>async({isP2P:n=!1}={})=>(r.logger("stopShareSipConnector"),e.stopPresentation({isP2P:n}).catch(s=>{r.logger(s)})),ye=1e6,_e=({sipConnector:e,maxBitrate:t=ye})=>async({mediaStream:s,isP2P:o=!1})=>(r.logger("updatePresentation"),e.updatePresentation(s,{isP2P:o,maxBitrate:t})),be=e=>t=>[...t].map(s=>async()=>e(s)),ve=async({accumulatedKeys:e,sendKey:t,canRunTask:n})=>{const o=be(t)(e);return z.sequentPromises(o,n)},he=e=>n=>(r.logger("onStartMainCam"),e.onSession("admin-start-main-cam",n)),Oe=e=>n=>(r.logger("onStartMic"),e.onSession("admin-start-mic",n)),Ae=e=>n=>(r.logger("onStopMainCam"),e.onSession("admin-stop-main-cam",n)),Ne=e=>n=>(r.logger("onStopMic"),e.onSession("admin-stop-mic",n)),pe=({sipConnector:e})=>{const t=(f,M)=>({isSyncForced:y=!1})=>{if(y){f();return}M()},n=he(e),s=Ae(e),o=Oe(e),c=Ne(e);let a=()=>{},l=()=>{},u=()=>{},d=()=>{};const m=({onStartMainCamForced:f,onStartMainCamNotForced:M,onStopMainCamForced:y,onStopMainCamNotForced:b,onStartMicForced:v,onStartMicNotForced:R,onStopMicForced:T,onStopMicNotForced:p})=>{const _=t(f,M);a=n(_);const h=t(y,b);l=s(h);const O=t(v,R);u=o(O);const A=t(T,p);d=c(A)},g=()=>{a(),l(),u(),d()};return{start:f=>{m(f)},stop:()=>{g()}}},Pe=Object.freeze(Object.defineProperty({__proto__:null,PURGATORY_CONFERENCE_NUMBER:L,createSyncMediaState:pe,error:ae,getExtraHeaders:ie,getUserAgent:le,hasPurgatory:N,resolveAnswerIncomingCall:ee,resolveAskPermissionToEnableCam:ge,resolveCallToServer:ne,resolveConnectToServer:te,resolveDisconnectFromServer:re,resolveGetRemoteStreams:I,resolveOnMoveToSpectators:de,resolveOnMustStopPresentation:Se,resolveOnUseLicense:me,resolveSendMediaState:fe,resolveSendRefusalToTurnOnCam:Ce,resolveSendRefusalToTurnOnMic:Ee,resolveStartPresentation:Re,resolveStopShareSipConnector:Te,resolveUpdatePresentation:_e,resolveUpdateRemoteStreams:D,sendDTMFAccumulated:ve},Symbol.toStringTag,{value:"Module"})),Be=e=>[...e.keys()].map(t=>e.get(t)),Ie=(e,t)=>Be(e).find(n=>n.type===t),q=async e=>e.getStats().then(t=>{const n=Ie(t,"codec");return n==null?void 0:n.mimeType}),De=e=>e.find(t=>{var n;return((n=t==null?void 0:t.track)==null?void 0:n.kind)==="video"}),x=(e,t)=>e!==void 0&&t!==void 0&&e.toLowerCase().includes(t.toLowerCase()),we=1e6,E=e=>e*we,G=E(.06),Fe=E(4),ke=e=>e<=64?G: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):Fe,Ue="av1",Le=e=>x(e,Ue),Ve=.6,X=(e,t)=>Le(t)?e*Ve:e,$e=e=>X(G,e),j=(e,t)=>{const n=ke(e);return X(n,t)},K=J.createStackPromises(),qe=async()=>K().catch(e=>{r.logger("videoSendingBalancer: error",e)}),xe=async e=>(K.add(e),qe()),F=async({sender:e,scaleResolutionDownBy:t,maxBitrate:n,onSetParameters:s})=>xe(async()=>r.setEncodingsToSender(e,{scaleResolutionDownBy:t,maxBitrate:n},s)),Ge=async({sender:e,codec:t},n)=>{const o=$e(t);return F({sender:e,maxBitrate:o,onSetParameters:n,scaleResolutionDownBy:200})},B=async({sender:e,track:t,codec:n},s)=>{const a=t.getSettings().width,l=j(a,n);return F({sender:e,maxBitrate:l,onSetParameters:s,scaleResolutionDownBy:1})},Xe=async({sender:e,track:t,resolution:n,codec:s},o)=>{const c=t.getSettings(),a=c.width,l=c.height,[u,d]=n.split("x"),m=a/Number(u),g=l/Number(d),S=Math.max(m,g,1),f=j(Number(u),s);return F({sender:e,maxBitrate:f,onSetParameters:o,scaleResolutionDownBy:S})},je=async({mainCam:e,resolutionMainCam:t,sender:n,track:s,codec:o},c)=>{switch(e){case r.EEventsMainCAM.PAUSE_MAIN_CAM:return Ge({sender:n,codec:o},c);case r.EEventsMainCAM.RESUME_MAIN_CAM:return B({sender:n,track:s,codec:o},c);case r.EEventsMainCAM.MAX_MAIN_CAM_RESOLUTION:return t!==void 0?Xe({sender:n,track:s,codec:o,resolution:t},c):B({sender:n,track:s,codec:o},c);default:return B({sender:n,track:s,codec:o},c)}},k={isChanged:!1,parameters:{encodings:[{}],transactionId:"0",codecs:[],headerExtensions:[],rtcp:{}}},U=async({mainCam:e,resolutionMainCam:t,connection:n,onSetParameters:s,ignoreForCodec:o})=>{const c=n.getSenders(),a=De(c);if(!(a!=null&&a.track))return k;const l=await q(a);return x(l,o)?k:je({mainCam:e,resolutionMainCam:t,sender:a,codec:l,track:a.track},s)},Ke=(e,{ignoreForCodec:t,onSetParameters:n}={})=>{const s=async()=>{const{connection:u}=e;if(!u)throw new Error("connection is not exist");return U({connection:u,onSetParameters:n,ignoreForCodec:t})};let o=s;const c=async u=>(o=async()=>{const{mainCam:d,resolutionMainCam:m}=u,{connection:g}=e;if(!g)throw new Error("connection is not exist");return U({mainCam:d,resolutionMainCam:m,connection:g,onSetParameters:n,ignoreForCodec:t})},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=Q;exports.getCodecFromSender=q;exports.resolveVideoSendingBalancer=Ke;exports.tools=Pe;
package/dist/index.js CHANGED
@@ -1,11 +1,11 @@
1
- import { l as o, B as V, N as $, E as B, s as q, S as Ye } from "./SipConnector-3gRIidBJ.js";
2
- import { f as sn, g as on, i as an, c as cn, a as un, d as ln, b as Sn, e as mn, h as dn } from "./SipConnector-3gRIidBJ.js";
1
+ import { l as o, B as V, N as $, E as B, s as q, S as qe } from "./SipConnector-3gRIidBJ.js";
2
+ import { f as on, g as an, i as cn, c as un, a as ln, d as Sn, b as mn, e as dn, h as fn } from "./SipConnector-3gRIidBJ.js";
3
3
  import { debounce as z } from "ts-debounce";
4
4
  import { isCanceledError as J } from "@krivega/cancelable-promise";
5
5
  import { hasCanceledError as Q } from "repeated-calls";
6
6
  import { sequentPromises as Z } from "sequent-promises";
7
7
  import { createStackPromises as ee } from "stack-promises";
8
- import { default as Cn } from "debug";
8
+ import { default as gn } from "debug";
9
9
  const x = "purgatory", N = (e) => e === x, D = (e) => () => (o("getRemoteStreams"), e.getRemoteStreams()), ne = ({ kind: e, readyState: t }) => e === "video" && t === "live", G = (e) => ({ track: t }) => {
10
10
  ne(t) && e();
11
11
  }, w = ({
@@ -16,8 +16,8 @@ const x = "purgatory", N = (e) => e === x, D = (e) => () => (o("getRemoteStreams
16
16
  o("remoteStreams", n), n && t(n);
17
17
  }, 200), te = (e) => async (n) => {
18
18
  const {
19
- mediaStream: r,
20
- extraHeaders: s,
19
+ mediaStream: s,
20
+ extraHeaders: r,
21
21
  iceServers: a,
22
22
  degradationPreference: c,
23
23
  setRemoteStreams: l,
@@ -25,44 +25,44 @@ const x = "purgatory", N = (e) => e === x, D = (e) => () => (o("getRemoteStreams
25
25
  onSuccessProgressCall: d,
26
26
  onEnterPurgatory: f,
27
27
  onEnterConference: S,
28
- onFailProgressCall: R,
28
+ onFailProgressCall: g,
29
29
  onFinishProgressCall: m,
30
30
  onEndedCall: C
31
31
  } = n, E = w({
32
32
  setRemoteStreams: l,
33
33
  getRemoteStreams: D(e)
34
- }), _ = G(E);
34
+ }), y = G(E);
35
35
  o("answerIncomingCall", n);
36
36
  const h = async () => e.answerToIncomingCall({
37
- mediaStream: r,
38
- extraHeaders: s,
37
+ mediaStream: s,
38
+ extraHeaders: r,
39
39
  iceServers: a,
40
40
  degradationPreference: c,
41
- ontrack: _
41
+ ontrack: y
42
42
  }), b = () => {
43
43
  const { remoteCallerData: i } = e;
44
44
  return i.incomingNumber;
45
45
  };
46
- let T = !1, M;
47
- const y = (o("subscribeEnterConference: onEnterConference", S), f ?? S ? e.onSession("enterRoom", (i) => {
48
- o("enterRoom", { _room: i, isSuccessProgressCall: T }), M = i, N(M) ? f && f() : S && S({ isSuccessProgressCall: T });
46
+ let M = !1, T;
47
+ const _ = (o("subscribeEnterConference: onEnterConference", S), f ?? S ? e.onSession("enterRoom", (i) => {
48
+ o("enterRoom", { _room: i, isSuccessProgressCall: M }), T = i, N(T) ? f && f() : S && S({ isSuccessProgressCall: M });
49
49
  }) : () => {
50
- }), O = (i) => (o("onSuccess"), T = !0, E(), d && d({ isPurgatory: N(M) }), e.onceRaceSession(["ended", "failed"], () => {
51
- y(), C && C();
52
- }), i), v = (i) => {
53
- throw o("onFail"), R && R(), y(), i;
54
- }, p = () => {
50
+ }), O = (i) => (o("onSuccess"), M = !0, E(), d && d({ isPurgatory: N(T) }), e.onceRaceSession(["ended", "failed"], () => {
51
+ _(), C && C();
52
+ }), i), p = (i) => {
53
+ throw o("onFail"), g && g(), _(), i;
54
+ }, v = () => {
55
55
  o("onFinish"), m && m();
56
56
  };
57
57
  if (o("onBeforeProgressCall"), u) {
58
58
  const i = b();
59
59
  u(i);
60
60
  }
61
- return h().then(O).catch((i) => v(i)).finally(p);
62
- }, re = (e) => async (n) => {
61
+ return h().then(O).catch((i) => p(i)).finally(v);
62
+ }, se = (e) => async (n) => {
63
63
  const {
64
- conference: r,
65
- mediaStream: s,
64
+ conference: s,
65
+ mediaStream: r,
66
66
  extraHeaders: a,
67
67
  iceServers: c,
68
68
  degradationPreference: l,
@@ -70,43 +70,43 @@ const x = "purgatory", N = (e) => e === x, D = (e) => () => (o("getRemoteStreams
70
70
  onBeforeProgressCall: d,
71
71
  onSuccessProgressCall: f,
72
72
  onEnterPurgatory: S,
73
- onEnterConference: R,
73
+ onEnterConference: g,
74
74
  onFailProgressCall: m,
75
75
  onFinishProgressCall: C,
76
76
  onEndedCall: E
77
- } = n, _ = w({
77
+ } = n, y = w({
78
78
  setRemoteStreams: u,
79
79
  getRemoteStreams: D(e)
80
- }), h = G(_);
80
+ }), h = G(y);
81
81
  o("callToServer", n);
82
82
  const b = async () => (o("startCall"), e.call({
83
- mediaStream: s,
83
+ mediaStream: r,
84
84
  extraHeaders: a,
85
85
  iceServers: c,
86
86
  degradationPreference: l,
87
- number: r,
87
+ number: s,
88
88
  ontrack: h
89
89
  }));
90
- let T = !1, M;
91
- const y = (o("subscribeEnterConference: onEnterConference", R), S ?? R ? e.onSession("enterRoom", ({ room: i }) => {
92
- o("enterRoom", { _room: i, isSuccessProgressCall: T }), M = i, N(M) ? S && S() : R && R({ isSuccessProgressCall: T });
90
+ let M = !1, T;
91
+ const _ = (o("subscribeEnterConference: onEnterConference", g), S ?? g ? e.onSession("enterRoom", ({ room: i }) => {
92
+ o("enterRoom", { _room: i, isSuccessProgressCall: M }), T = i, N(T) ? S && S() : g && g({ isSuccessProgressCall: M });
93
93
  }) : () => {
94
- }), O = (i) => (o("onSuccess"), T = !0, _(), f && f({ isPurgatory: N(M) }), e.onceRaceSession(["ended", "failed"], () => {
95
- y(), E && E();
96
- }), i), v = (i) => {
97
- throw o("onFail"), m && m(), y(), i;
98
- }, p = () => {
94
+ }), O = (i) => (o("onSuccess"), M = !0, y(), f && f({ isPurgatory: N(T) }), e.onceRaceSession(["ended", "failed"], () => {
95
+ _(), E && E();
96
+ }), i), p = (i) => {
97
+ throw o("onFail"), m && m(), _(), i;
98
+ }, v = () => {
99
99
  o("onFinish"), C && C();
100
100
  };
101
- return o("onBeforeProgressCall"), d && d(r), b().then(O).catch((i) => v(i)).finally(p);
101
+ return o("onBeforeProgressCall"), d && d(s), b().then(O).catch((i) => p(i)).finally(v);
102
102
  }, I = (e) => {
103
103
  if (!J(e) && !Q(e))
104
104
  throw e;
105
105
  return { isSuccessful: !1 };
106
- }, se = (e) => async (n) => {
106
+ }, re = (e) => async (n) => {
107
107
  const {
108
- userAgent: r,
109
- sipWebSocketServerURL: s,
108
+ userAgent: s,
109
+ sipWebSocketServerURL: r,
110
110
  sipServerUrl: a,
111
111
  remoteAddress: c,
112
112
  displayName: l,
@@ -114,135 +114,143 @@ const x = "purgatory", N = (e) => e === x, D = (e) => () => (o("getRemoteStreams
114
114
  password: d,
115
115
  isRegisteredUser: f,
116
116
  sdpSemantics: S,
117
- isDisconnectOnFail: R
117
+ isDisconnectOnFail: g
118
118
  } = n;
119
119
  return o("connectToServer", n), e.connect({
120
- userAgent: r,
120
+ userAgent: s,
121
121
  sdpSemantics: S,
122
- sipWebSocketServerURL: s,
122
+ sipWebSocketServerURL: r,
123
123
  sipServerUrl: a,
124
124
  remoteAddress: c,
125
125
  displayName: l,
126
126
  password: d,
127
127
  user: u,
128
128
  register: f
129
- }).then((m) => (o("connectToServer then"), { ua: m, isSuccessful: !0 })).catch(async (m) => (o("connectToServer catch: error", m), R === !0 ? e.disconnect().then(() => I(m)).catch(() => I(m)) : I(m)));
129
+ }).then((m) => (o("connectToServer then"), { ua: m, isSuccessful: !0 })).catch(async (m) => (o("connectToServer catch: error", m), g === !0 ? e.disconnect().then(() => I(m)).catch(() => I(m)) : I(m)));
130
130
  }, oe = (e) => async () => (o("disconnectFromServer"), e.disconnect().then(() => (o("disconnectFromServer: then"), { isSuccessful: !0 })).catch((t) => (o("disconnectFromServer: catch", t), { isSuccessful: !1 }))), F = (e) => {
131
131
  const { url: t, cause: n } = e;
132
- let r = t;
133
- return (n === V || n === $) && (r = `${e.message.to.uri.user}@${e.message.to.uri.host}`), r;
132
+ let s = t;
133
+ return (n === V || n === $) && (s = `${e.message.to.uri.user}@${e.message.to.uri.host}`), s;
134
134
  };
135
135
  var X = /* @__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))(X || {});
136
136
  const ae = (e = new Error()) => {
137
- var s;
137
+ var r;
138
138
  const { cause: t, socket: n } = e;
139
- let r = "CONNECT_SERVER_FAILED";
139
+ let s = "CONNECT_SERVER_FAILED";
140
140
  switch (t) {
141
141
  case "Forbidden": {
142
- r = "WRONG_USER_OR_PASSWORD";
142
+ s = "WRONG_USER_OR_PASSWORD";
143
143
  break;
144
144
  }
145
145
  case V: {
146
- r = "BAD_MEDIA_ERROR";
146
+ s = "BAD_MEDIA_ERROR";
147
147
  break;
148
148
  }
149
149
  case $: {
150
- r = "NOT_FOUND_ERROR";
150
+ s = "NOT_FOUND_ERROR";
151
151
  break;
152
152
  }
153
153
  default:
154
- n && ((s = n == null ? void 0 : n._ws) == null ? void 0 : s.readyState) === 3 ? r = "WS_CONNECTION_FAILED" : F(e) && (r = "CONNECT_SERVER_FAILED_BY_LINK");
154
+ n && ((r = n == null ? void 0 : n._ws) == null ? void 0 : r.readyState) === 3 ? s = "WS_CONNECTION_FAILED" : F(e) && (s = "CONNECT_SERVER_FAILED_BY_LINK");
155
+ }
156
+ return s;
157
+ }, ce = (e) => {
158
+ let t = "";
159
+ try {
160
+ t = JSON.stringify(e);
161
+ } catch (n) {
162
+ o("failed to stringify message", n);
155
163
  }
156
- return r;
157
- }, ce = (e = new Error()) => {
158
- const { code: t, cause: n, message: r } = e, s = F(e), a = {};
159
- return r && (a.message = r), s && (a.link = s), t && (a.code = t), n && (a.cause = n), a;
160
- }, ie = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
164
+ return t;
165
+ }, ie = (e = new Error()) => {
166
+ const { code: t, cause: n, message: s } = e, r = F(e), a = { code: "", cause: "", message: "" };
167
+ return typeof s == "object" && s !== null ? a.message = ce(s) : s && (a.message = String(s)), r && (a.link = r), t && (a.code = t), n && (a.cause = n), a;
168
+ }, ue = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
161
169
  __proto__: null,
162
170
  EErrorTypes: X,
163
171
  getLinkError: F,
164
172
  getTypeFromError: ae,
165
- getValuesFromError: ce
166
- }, Symbol.toStringTag, { value: "Module" })), ue = ({
173
+ getValuesFromError: ie
174
+ }, Symbol.toStringTag, { value: "Module" })), le = ({
167
175
  sessionId: e,
168
176
  remoteAddress: t,
169
177
  isMutedAudio: n,
170
- isMutedVideo: r,
171
- isRegistered: s,
178
+ isMutedVideo: s,
179
+ isRegistered: r,
172
180
  isPresentationCall: a
173
181
  }) => {
174
- const c = [], l = n ? "0" : "1", u = r ? "0" : "1";
175
- return c.push(`X-Vinteo-Mic-State: ${l}`, `X-Vinteo-MainCam-State: ${u}`), s || c.push("X-Vinteo-Purgatory-Call: yes"), e && c.push(`X-Vinteo-Session: ${e}`), a && c.push("X-Vinteo-Presentation-Call: yes"), t && c.push(`X-Vinteo-Remote: ${t}`), c;
176
- }, le = ({
182
+ const c = [], l = n ? "0" : "1", u = s ? "0" : "1";
183
+ return c.push(`X-Vinteo-Mic-State: ${l}`, `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"), t && c.push(`X-Vinteo-Remote: ${t}`), c;
184
+ }, Se = ({
177
185
  appName: e,
178
186
  appVersion: t,
179
187
  browserName: n,
180
- browserVersion: r
188
+ browserVersion: s
181
189
  }) => {
182
- const s = `${e} ${t}`;
183
- return `ChromeNew - ${n ? `${n} ${r}, ${s}` : s}`;
184
- }, Se = ({
190
+ const r = `${e} ${t}`;
191
+ return `ChromeNew - ${n ? `${n} ${s}, ${r}` : r}`;
192
+ }, me = ({
185
193
  isUnifiedSdpSemantic: e,
186
194
  appVersion: t,
187
195
  browserName: n,
188
- browserVersion: r,
189
- appName: s
190
- }) => e ? le({ appVersion: t, browserName: n, browserVersion: r, appName: s }) : "Chrome", me = (e) => async () => {
196
+ browserVersion: s,
197
+ appName: r
198
+ }) => e ? Se({ appVersion: t, browserName: n, browserVersion: s, appName: r }) : "Chrome", de = (e) => async () => {
191
199
  if (e.isCallActive)
192
200
  return o("askPermissionToEnableCam"), e.askPermissionToEnableCam();
193
- }, de = (e) => (n) => (o("onMustStopPresentation"), e.onSession("mustStopPresentation", n)), fe = (e) => (n) => (o("onMoveToSpectators"), e.onSession("participant:move-request-to-spectators", n)), Ce = (e) => (n) => (o("onUseLicense"), e.onSession("useLicense", n)), Re = (e) => async ({
201
+ }, fe = (e) => (n) => (o("onMustStopPresentation"), e.onSession("mustStopPresentation", n)), Ce = (e) => (n) => (o("onMoveToSpectators"), e.onSession("participant:move-request-to-spectators", n)), ge = (e) => (n) => (o("onUseLicense"), e.onSession("useLicense", n)), Re = (e) => async ({
194
202
  isEnabledCam: n,
195
- isEnabledMic: r
203
+ isEnabledMic: s
196
204
  }) => {
197
205
  if (e.isCallActive)
198
- return o("sendMediaState"), e.sendMediaState({ cam: n, mic: r });
199
- }, ge = (e) => async () => {
206
+ return o("sendMediaState"), e.sendMediaState({ cam: n, mic: s });
207
+ }, Ee = (e) => async () => {
200
208
  if (e.isCallActive)
201
209
  return o("sendRefusalToTurnOnCam"), e.sendRefusalToTurnOnCam().catch((n) => {
202
210
  o("sendRefusalToTurnOnCam: error", n);
203
211
  });
204
- }, Ee = (e) => async () => {
212
+ }, Me = (e) => async () => {
205
213
  if (e.isCallActive)
206
214
  return o("sendRefusalToTurnOnMic"), e.sendRefusalToTurnOnMic().catch((n) => {
207
215
  o("sendRefusalToTurnOnMic: error", n);
208
216
  });
209
- }, Te = 1e6, Me = ({
217
+ }, Te = 1e6, ye = ({
210
218
  maxBitrate: e = Te,
211
219
  sipConnector: t
212
220
  }) => async ({
213
- mediaStream: r,
214
- isP2P: s = !1
215
- }) => (o("startPresentation"), t.startPresentation(r, {
216
- isP2P: s,
221
+ mediaStream: s,
222
+ isP2P: r = !1
223
+ }) => (o("startPresentation"), t.startPresentation(s, {
224
+ isP2P: r,
217
225
  maxBitrate: e
218
226
  })), _e = ({ sipConnector: e }) => async ({ isP2P: n = !1 } = {}) => (o("stopShareSipConnector"), e.stopPresentation({
219
227
  isP2P: n
220
- }).catch((r) => {
221
- o(r);
222
- })), ye = 1e6, he = ({
228
+ }).catch((s) => {
229
+ o(s);
230
+ })), he = 1e6, be = ({
223
231
  sipConnector: e,
224
- maxBitrate: t = ye
232
+ maxBitrate: t = he
225
233
  }) => async ({
226
- mediaStream: r,
227
- isP2P: s = !1
228
- }) => (o("updatePresentation"), e.updatePresentation(r, {
229
- isP2P: s,
234
+ mediaStream: s,
235
+ isP2P: r = !1
236
+ }) => (o("updatePresentation"), e.updatePresentation(s, {
237
+ isP2P: r,
230
238
  maxBitrate: t
231
- })), be = (e) => (t) => [...t].map((r) => async () => e(r)), Oe = async ({
239
+ })), Oe = (e) => (t) => [...t].map((s) => async () => e(s)), pe = async ({
232
240
  accumulatedKeys: e,
233
241
  sendKey: t,
234
242
  canRunTask: n
235
243
  }) => {
236
- const s = be(t)(e);
237
- return Z(s, n);
238
- }, ve = (e) => (n) => (o("onStartMainCam"), e.onSession("admin-start-main-cam", n)), pe = (e) => (n) => (o("onStartMic"), e.onSession("admin-start-mic", n)), Ne = (e) => (n) => (o("onStopMainCam"), e.onSession("admin-stop-main-cam", n)), Ae = (e) => (n) => (o("onStopMic"), e.onSession("admin-stop-mic", n)), Be = ({ sipConnector: e }) => {
239
- const t = (C, E) => ({ isSyncForced: _ = !1 }) => {
240
- if (_) {
244
+ const r = Oe(t)(e);
245
+ return Z(r, n);
246
+ }, ve = (e) => (n) => (o("onStartMainCam"), e.onSession("admin-start-main-cam", n)), Ne = (e) => (n) => (o("onStartMic"), e.onSession("admin-start-mic", n)), Ae = (e) => (n) => (o("onStopMainCam"), e.onSession("admin-stop-main-cam", n)), Be = (e) => (n) => (o("onStopMic"), e.onSession("admin-stop-mic", n)), Ie = ({ sipConnector: e }) => {
247
+ const t = (C, E) => ({ isSyncForced: y = !1 }) => {
248
+ if (y) {
241
249
  C();
242
250
  return;
243
251
  }
244
252
  E();
245
- }, n = ve(e), r = Ne(e), s = pe(e), a = Ae(e);
253
+ }, n = ve(e), s = Ae(e), r = Ne(e), a = Be(e);
246
254
  let c = () => {
247
255
  }, l = () => {
248
256
  }, u = () => {
@@ -251,27 +259,27 @@ const ae = (e = new Error()) => {
251
259
  const f = ({
252
260
  onStartMainCamForced: C,
253
261
  onStartMainCamNotForced: E,
254
- onStopMainCamForced: _,
262
+ onStopMainCamForced: y,
255
263
  onStopMainCamNotForced: h,
256
264
  onStartMicForced: b,
257
- onStartMicNotForced: T,
258
- onStopMicForced: M,
265
+ onStartMicNotForced: M,
266
+ onStopMicForced: T,
259
267
  onStopMicNotForced: A
260
268
  }) => {
261
- const y = t(
269
+ const _ = t(
262
270
  C,
263
271
  E
264
272
  );
265
- c = n(y);
273
+ c = n(_);
266
274
  const O = t(
267
- _,
275
+ y,
268
276
  h
269
277
  );
270
- l = r(O);
271
- const v = t(b, T);
272
- u = s(v);
273
- const p = t(M, A);
274
- d = a(p);
278
+ l = s(O);
279
+ const p = t(b, M);
280
+ u = r(p);
281
+ const v = t(T, A);
282
+ d = a(v);
275
283
  }, S = () => {
276
284
  c(), l(), u(), d();
277
285
  };
@@ -283,95 +291,95 @@ const ae = (e = new Error()) => {
283
291
  S();
284
292
  }
285
293
  };
286
- }, en = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
294
+ }, nn = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
287
295
  __proto__: null,
288
296
  PURGATORY_CONFERENCE_NUMBER: x,
289
- createSyncMediaState: Be,
290
- error: ie,
291
- getExtraHeaders: ue,
292
- getUserAgent: Se,
297
+ createSyncMediaState: Ie,
298
+ error: ue,
299
+ getExtraHeaders: le,
300
+ getUserAgent: me,
293
301
  hasPurgatory: N,
294
302
  resolveAnswerIncomingCall: te,
295
- resolveAskPermissionToEnableCam: me,
296
- resolveCallToServer: re,
297
- resolveConnectToServer: se,
303
+ resolveAskPermissionToEnableCam: de,
304
+ resolveCallToServer: se,
305
+ resolveConnectToServer: re,
298
306
  resolveDisconnectFromServer: oe,
299
307
  resolveGetRemoteStreams: D,
300
- resolveOnMoveToSpectators: fe,
301
- resolveOnMustStopPresentation: de,
302
- resolveOnUseLicense: Ce,
308
+ resolveOnMoveToSpectators: Ce,
309
+ resolveOnMustStopPresentation: fe,
310
+ resolveOnUseLicense: ge,
303
311
  resolveSendMediaState: Re,
304
- resolveSendRefusalToTurnOnCam: ge,
305
- resolveSendRefusalToTurnOnMic: Ee,
306
- resolveStartPresentation: Me,
312
+ resolveSendRefusalToTurnOnCam: Ee,
313
+ resolveSendRefusalToTurnOnMic: Me,
314
+ resolveStartPresentation: ye,
307
315
  resolveStopShareSipConnector: _e,
308
- resolveUpdatePresentation: he,
316
+ resolveUpdatePresentation: be,
309
317
  resolveUpdateRemoteStreams: w,
310
- sendDTMFAccumulated: Oe
311
- }, Symbol.toStringTag, { value: "Module" })), Ie = (e) => [...e.keys()].map((t) => e.get(t)), Pe = (e, t) => Ie(e).find((n) => n.type === t), De = async (e) => e.getStats().then((t) => {
312
- const n = Pe(t, "codec");
318
+ sendDTMFAccumulated: pe
319
+ }, Symbol.toStringTag, { value: "Module" })), Pe = (e) => [...e.keys()].map((t) => e.get(t)), De = (e, t) => Pe(e).find((n) => n.type === t), we = async (e) => e.getStats().then((t) => {
320
+ const n = De(t, "codec");
313
321
  return n == null ? void 0 : n.mimeType;
314
- }), we = (e) => e.find((t) => {
322
+ }), Fe = (e) => e.find((t) => {
315
323
  var n;
316
324
  return ((n = t == null ? void 0 : t.track) == null ? void 0 : n.kind) === "video";
317
- }), K = (e, t) => e !== void 0 && t !== void 0 && e.toLowerCase().includes(t.toLowerCase()), Fe = 1e6, g = (e) => e * Fe, W = g(0.06), ke = g(4), Ue = (e) => e <= 64 ? W : e <= 128 ? g(0.12) : e <= 256 ? g(0.25) : e <= 384 ? g(0.32) : e <= 426 ? g(0.38) : e <= 640 ? g(0.5) : e <= 848 ? g(0.7) : e <= 1280 ? g(1) : e <= 1920 ? g(2) : ke, Le = "av1", Ve = (e) => K(e, Le), $e = 0.6, H = (e, t) => Ve(t) ? e * $e : e, xe = (e) => H(W, e), j = (e, t) => {
318
- const n = Ue(e);
319
- return H(n, t);
320
- }, Y = ee(), Ge = async () => Y().catch((e) => {
325
+ }), K = (e, t) => e !== void 0 && t !== void 0 && e.toLowerCase().includes(t.toLowerCase()), ke = 1e6, R = (e) => e * ke, W = R(0.06), Ue = R(4), Le = (e) => e <= 64 ? W : e <= 128 ? R(0.12) : e <= 256 ? R(0.25) : e <= 384 ? R(0.32) : e <= 426 ? R(0.38) : e <= 640 ? R(0.5) : e <= 848 ? R(0.7) : e <= 1280 ? R(1) : e <= 1920 ? R(2) : Ue, Ve = "av1", $e = (e) => K(e, Ve), xe = 0.6, j = (e, t) => $e(t) ? e * xe : e, Ge = (e) => j(W, e), H = (e, t) => {
326
+ const n = Le(e);
327
+ return j(n, t);
328
+ }, Y = ee(), Xe = async () => Y().catch((e) => {
321
329
  o("videoSendingBalancer: error", e);
322
- }), Xe = async (e) => (Y.add(e), Ge()), k = async ({
330
+ }), Ke = async (e) => (Y.add(e), Xe()), k = async ({
323
331
  sender: e,
324
332
  scaleResolutionDownBy: t,
325
333
  maxBitrate: n,
326
- onSetParameters: r
327
- }) => Xe(async () => q(e, { scaleResolutionDownBy: t, maxBitrate: n }, r)), Ke = async ({ sender: e, codec: t }, n) => {
328
- const s = xe(t);
334
+ onSetParameters: s
335
+ }) => Ke(async () => q(e, { scaleResolutionDownBy: t, maxBitrate: n }, s)), We = async ({ sender: e, codec: t }, n) => {
336
+ const r = Ge(t);
329
337
  return k({
330
338
  sender: e,
331
- maxBitrate: s,
339
+ maxBitrate: r,
332
340
  onSetParameters: n,
333
341
  scaleResolutionDownBy: 200
334
342
  });
335
- }, P = async ({ sender: e, track: t, codec: n }, r) => {
336
- const c = t.getSettings().width, l = j(c, n);
343
+ }, P = async ({ sender: e, track: t, codec: n }, s) => {
344
+ const c = t.getSettings().width, l = H(c, n);
337
345
  return k({
338
346
  sender: e,
339
347
  maxBitrate: l,
340
- onSetParameters: r,
348
+ onSetParameters: s,
341
349
  scaleResolutionDownBy: 1
342
350
  });
343
- }, We = async ({
351
+ }, je = async ({
344
352
  sender: e,
345
353
  track: t,
346
354
  resolution: n,
347
- codec: r
348
- }, s) => {
349
- const a = t.getSettings(), c = a.width, l = a.height, [u, d] = n.split("x"), f = c / Number(u), S = l / Number(d), m = Math.max(f, S, 1), C = j(Number(u), r);
355
+ codec: s
356
+ }, r) => {
357
+ const a = t.getSettings(), c = a.width, l = a.height, [u, d] = n.split("x"), f = c / Number(u), S = l / Number(d), m = Math.max(f, S, 1), C = H(Number(u), s);
350
358
  return k({
351
359
  sender: e,
352
360
  maxBitrate: C,
353
- onSetParameters: s,
361
+ onSetParameters: r,
354
362
  scaleResolutionDownBy: m
355
363
  });
356
364
  }, He = async ({
357
365
  mainCam: e,
358
366
  resolutionMainCam: t,
359
367
  sender: n,
360
- track: r,
361
- codec: s
368
+ track: s,
369
+ codec: r
362
370
  }, a) => {
363
371
  switch (e) {
364
372
  case B.PAUSE_MAIN_CAM:
365
- return Ke({ sender: n, codec: s }, a);
373
+ return We({ sender: n, codec: r }, a);
366
374
  case B.RESUME_MAIN_CAM:
367
- return P({ sender: n, track: r, codec: s }, a);
375
+ return P({ sender: n, track: s, codec: r }, a);
368
376
  case B.MAX_MAIN_CAM_RESOLUTION:
369
- return t !== void 0 ? We(
370
- { sender: n, track: r, codec: s, resolution: t },
377
+ return t !== void 0 ? je(
378
+ { sender: n, track: s, codec: r, resolution: t },
371
379
  a
372
- ) : P({ sender: n, track: r, codec: s }, a);
380
+ ) : P({ sender: n, track: s, codec: r }, a);
373
381
  default:
374
- return P({ sender: n, track: r, codec: s }, a);
382
+ return P({ sender: n, track: s, codec: r }, a);
375
383
  }
376
384
  }, U = {
377
385
  isChanged: !1,
@@ -386,22 +394,22 @@ const ae = (e = new Error()) => {
386
394
  mainCam: e,
387
395
  resolutionMainCam: t,
388
396
  connection: n,
389
- onSetParameters: r,
390
- ignoreForCodec: s
397
+ onSetParameters: s,
398
+ ignoreForCodec: r
391
399
  }) => {
392
- const a = n.getSenders(), c = we(a);
400
+ const a = n.getSenders(), c = Fe(a);
393
401
  if (!(c != null && c.track))
394
402
  return U;
395
- const l = await De(c);
396
- return K(l, s) ? U : He(
403
+ const l = await we(c);
404
+ return K(l, r) ? U : He(
397
405
  { mainCam: e, resolutionMainCam: t, sender: c, codec: l, track: c.track },
398
- r
406
+ s
399
407
  );
400
- }, nn = (e, {
408
+ }, tn = (e, {
401
409
  ignoreForCodec: t,
402
410
  onSetParameters: n
403
411
  } = {}) => {
404
- const r = async () => {
412
+ const s = async () => {
405
413
  const { connection: u } = e;
406
414
  if (!u)
407
415
  throw new Error("connection is not exist");
@@ -411,8 +419,8 @@ const ae = (e = new Error()) => {
411
419
  ignoreForCodec: t
412
420
  });
413
421
  };
414
- let s = r;
415
- const a = async (u) => (s = async () => {
422
+ let r = s;
423
+ const a = async (u) => (r = async () => {
416
424
  const { mainCam: d, resolutionMainCam: f } = u, { connection: S } = e;
417
425
  if (!S)
418
426
  throw new Error("connection is not exist");
@@ -423,7 +431,7 @@ const ae = (e = new Error()) => {
423
431
  onSetParameters: n,
424
432
  ignoreForCodec: t
425
433
  });
426
- }, s());
434
+ }, r());
427
435
  return {
428
436
  subscribe: () => {
429
437
  e.onSession("main-cam-control", a);
@@ -431,29 +439,29 @@ const ae = (e = new Error()) => {
431
439
  unsubscribe: () => {
432
440
  e.offSession("main-cam-control", a);
433
441
  },
434
- balanceByTrack: r,
442
+ balanceByTrack: s,
435
443
  resetMainCamControl() {
436
- s = r;
444
+ r = s;
437
445
  },
438
446
  async reBalance() {
439
- return s();
447
+ return r();
440
448
  }
441
449
  };
442
450
  };
443
451
  export {
444
452
  B as EEventsMainCAM,
445
- sn as EEventsMic,
446
- on as EEventsSyncMediaState,
447
- an as EUseLicense,
448
- cn as causes,
449
- un as constants,
450
- Cn as debug,
451
- Ye as default,
452
- ln as disableDebug,
453
- Sn as enableDebug,
454
- mn as eventNames,
455
- De as getCodecFromSender,
456
- dn as hasCanceledCallError,
457
- nn as resolveVideoSendingBalancer,
458
- en as tools
453
+ on as EEventsMic,
454
+ an as EEventsSyncMediaState,
455
+ cn as EUseLicense,
456
+ un as causes,
457
+ ln as constants,
458
+ gn as debug,
459
+ qe as default,
460
+ Sn as disableDebug,
461
+ mn as enableDebug,
462
+ dn as eventNames,
463
+ we as getCodecFromSender,
464
+ fn as hasCanceledCallError,
465
+ tn as resolveVideoSendingBalancer,
466
+ nn as tools
459
467
  };
@@ -11,7 +11,7 @@ declare const resolveConnectToServer: (sipConnector: SipConnector) => (parameter
11
11
  password?: string;
12
12
  isRegisteredUser?: boolean;
13
13
  isDisconnectOnFail?: boolean;
14
- sdpSemantics: 'plan-b' | 'unified-plan';
14
+ sdpSemantics: "plan-b" | "unified-plan";
15
15
  }) => Promise<{
16
16
  ua?: UA;
17
17
  isSuccessful: boolean;
@@ -1,10 +1,10 @@
1
1
  import { TCustomError } from '../../types';
2
2
 
3
3
  export type TValues = {
4
- message?: string;
4
+ code: string;
5
+ cause: string;
6
+ message: string;
5
7
  link?: string;
6
- code?: string;
7
- cause?: string;
8
8
  };
9
9
  declare const getValuesFromError: (error?: TCustomError) => TValues;
10
10
  export default getValuesFromError;
@@ -0,0 +1,2 @@
1
+ declare const stringifyMessage: (message: unknown) => string;
2
+ export default stringifyMessage;
@@ -1,3 +1,3 @@
1
1
  export declare const PURGATORY_CONFERENCE_NUMBER = "purgatory";
2
- declare const hasPurgatory: (room?: string) => boolean;
2
+ declare const hasPurgatory: (room?: string) => room is "purgatory";
3
3
  export default hasPurgatory;
@@ -2,7 +2,7 @@ declare const resolveUpdateRemoteStreams: ({ getRemoteStreams, setRemoteStreams,
2
2
  getRemoteStreams: () => MediaStream[] | undefined;
3
3
  setRemoteStreams: (streams: MediaStream[]) => void;
4
4
  }) => {
5
- (this: unknown, ...args: [] & any[]): Promise<void>;
5
+ (this: unknown, ...args: [] & any[]): Promise<ReturnType<() => void>>;
6
6
  cancel: (reason?: any) => void;
7
7
  };
8
8
  export default resolveUpdateRemoteStreams;
package/dist/utils.d.ts CHANGED
@@ -2,7 +2,7 @@ export declare function resolveSipUrl(serverUrl: string): (string: string) => st
2
2
  export declare const parseDisplayName: (displayName: string) => string;
3
3
  export declare const generateUserId: () => number;
4
4
  export declare const prepareMediaStream: (mediaStream?: MediaStream, { videoMode, audioMode, }?: {
5
- videoMode?: 'recvonly' | 'sendonly' | 'sendrecv';
6
- audioMode?: 'recvonly' | 'sendonly' | 'sendrecv';
5
+ videoMode?: "recvonly" | "sendonly" | "sendrecv";
6
+ audioMode?: "recvonly" | "sendonly" | "sendrecv";
7
7
  }) => MediaStream | undefined;
8
8
  export declare const hasVideoTracks: (remoteTracks: MediaStreamTrack[]) => boolean;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sip-connector",
3
- "version": "7.0.8",
3
+ "version": "7.0.9",
4
4
  "description": "Module for connect to Vinteo server",
5
5
  "keywords": [
6
6
  "webrtc",
@@ -79,8 +79,8 @@
79
79
  "@nabla/vite-plugin-eslint": "^2.0.4",
80
80
  "@types/debug": "^4.1.12",
81
81
  "@types/jest": "^29.5.12",
82
- "@typescript-eslint/eslint-plugin": "^7.13.0",
83
- "@typescript-eslint/parser": "^7.13.0",
82
+ "@typescript-eslint/eslint-plugin": "^7.13.1",
83
+ "@typescript-eslint/parser": "^7.13.1",
84
84
  "cross-env": "^7.0.3",
85
85
  "eslint": "^8.57.0",
86
86
  "eslint-config-airbnb-base": "^15.0.0",
@@ -103,7 +103,7 @@
103
103
  "ts-jest": "^29.1.5",
104
104
  "ts-node": "^10.9.2",
105
105
  "tsc-files": "^1.1.4",
106
- "typescript": "^5.4.5",
106
+ "typescript": "^5.5.2",
107
107
  "vite": "^5.3.1",
108
108
  "vite-plugin-dts": "^3.9.1",
109
109
  "vite-tsconfig-paths": "^4.3.2"