sip-connector 7.0.8 → 7.0.10

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"),K=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",p=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})=>K.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:u,onBeforeProgressCall:l,onSuccessProgressCall:d,onEnterPurgatory:m,onEnterConference:g,onFailProgressCall:C,onFinishProgressCall:S,onEndedCall:f}=n,M=D({setRemoteStreams:u,getRemoteStreams:I(e)}),y=V(M);r.logger("answerIncomingCall",n);const _=async()=>e.answerToIncomingCall({mediaStream:s,extraHeaders:o,iceServers:c,degradationPreference:a,ontrack:y}),h=()=>{const{remoteCallerData:i}=e;return i.incomingNumber};let R=!1,T;const b=(r.logger("subscribeEnterConference: onEnterConference",g),m??g?e.onSession("enterRoom",i=>{r.logger("enterRoom",{_room:i,isSuccessProgressCall:R}),T=i,p(T)?m&&m():g&&g({isSuccessProgressCall:R})}):()=>{}),v=i=>(r.logger("onSuccess"),R=!0,M(),d&&d({isPurgatory:p(T)}),e.onceRaceSession(["ended","failed"],()=>{b(),f&&f()}),i),O=i=>{throw r.logger("onFail"),C&&C(),b(),i},A=()=>{r.logger("onFinish"),S&&S()};if(r.logger("onBeforeProgressCall"),l){const i=h();l(i)}return _().then(v).catch(i=>O(i)).finally(A)},ne=e=>async n=>{const{conference:s,mediaStream:o,extraHeaders:c,iceServers:a,degradationPreference:u,setRemoteStreams:l,onBeforeProgressCall:d,onSuccessProgressCall:m,onEnterPurgatory:g,onEnterConference:C,onFailProgressCall:S,onFinishProgressCall:f,onEndedCall:M}=n,y=D({setRemoteStreams:l,getRemoteStreams:I(e)}),_=V(y);r.logger("callToServer",n);const h=async()=>(r.logger("startCall"),e.call({mediaStream:o,extraHeaders:c,iceServers:a,degradationPreference:u,number:s,ontrack:_}));let R=!1,T;const b=(r.logger("subscribeEnterConference: onEnterConference",C),g??C?e.onSession("enterRoom",({room:i})=>{r.logger("enterRoom",{_room:i,isSuccessProgressCall:R}),T=i,p(T)?g&&g():C&&C({isSuccessProgressCall:R})}):()=>{}),v=i=>(r.logger("onSuccess"),R=!0,y(),m&&m({isPurgatory:p(T)}),e.onceRaceSession(["ended","failed"],()=>{b(),M&&M()}),i),O=i=>{throw r.logger("onFail"),S&&S(),b(),i},A=()=>{r.logger("onFinish"),f&&f()};return r.logger("onBeforeProgressCall"),d&&d(s),h().then(v).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:u,name:l,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:u,password:d,user:l,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=[],u=n?"0":"1",l=s?"0":"1";return a.push(`X-Vinteo-Mic-State: ${u}`,`X-Vinteo-MainCam-State: ${l}`),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="[@*!|]",le="_",ge=e=>{let t=e;return t=t.replaceAll(new RegExp(ue,"g"),le),t},Se=({appName:e,appVersion:t,browserName:n,browserVersion:s})=>{const c=`${ge(e)} ${t}`;return`ChromeNew - ${n?`${n} ${s}, ${c}`:c}`},de=({isUnifiedSdpSemantic:e,appVersion:t,browserName:n,browserVersion:s,appName:o})=>e?Se({appVersion:t,browserName:n,browserVersion:s,appName:o}):"Chrome",me=e=>async()=>{if(e.isCallActive)return r.logger("askPermissionToEnableCam"),e.askPermissionToEnableCam()},fe=e=>n=>(r.logger("onMustStopPresentation"),e.onSession("mustStopPresentation",n)),Ce=e=>n=>(r.logger("onMoveToSpectators"),e.onSession("participant:move-request-to-spectators",n)),Ee=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})},Re=e=>async()=>{if(e.isCallActive)return r.logger("sendRefusalToTurnOnCam"),e.sendRefusalToTurnOnCam().catch(n=>{r.logger("sendRefusalToTurnOnCam: error",n)})},Te=e=>async()=>{if(e.isCallActive)return r.logger("sendRefusalToTurnOnMic"),e.sendRefusalToTurnOnMic().catch(n=>{r.logger("sendRefusalToTurnOnMic: error",n)})},ye=1e6,be=({maxBitrate:e=ye,sipConnector:t})=>async({mediaStream:s,isP2P:o=!1})=>(r.logger("startPresentation"),t.startPresentation(s,{isP2P:o,maxBitrate:e})),_e=({sipConnector:e})=>async({isP2P:n=!1}={})=>(r.logger("stopShareSipConnector"),e.stopPresentation({isP2P:n}).catch(s=>{r.logger(s)})),he=1e6,ve=({sipConnector:e,maxBitrate:t=he})=>async({mediaStream:s,isP2P:o=!1})=>(r.logger("updatePresentation"),e.updatePresentation(s,{isP2P:o,maxBitrate:t})),Oe=e=>t=>[...t].map(s=>async()=>e(s)),Ae=async({accumulatedKeys:e,sendKey:t,canRunTask:n})=>{const o=Oe(t)(e);return z.sequentPromises(o,n)},pe=e=>n=>(r.logger("onStartMainCam"),e.onSession("admin-start-main-cam",n)),Ne=e=>n=>(r.logger("onStartMic"),e.onSession("admin-start-mic",n)),Pe=e=>n=>(r.logger("onStopMainCam"),e.onSession("admin-stop-main-cam",n)),Be=e=>n=>(r.logger("onStopMic"),e.onSession("admin-stop-mic",n)),Ie=({sipConnector:e})=>{const t=(f,M)=>({isSyncForced:y=!1})=>{if(y){f();return}M()},n=pe(e),s=Pe(e),o=Ne(e),c=Be(e);let a=()=>{},u=()=>{},l=()=>{},d=()=>{};const m=({onStartMainCamForced:f,onStartMainCamNotForced:M,onStopMainCamForced:y,onStopMainCamNotForced:_,onStartMicForced:h,onStartMicNotForced:R,onStopMicForced:T,onStopMicNotForced:N})=>{const b=t(f,M);a=n(b);const v=t(y,_);u=s(v);const O=t(h,R);l=o(O);const A=t(T,N);d=c(A)},g=()=>{a(),u(),l(),d()};return{start:f=>{m(f)},stop:()=>{g()}}},De=Object.freeze(Object.defineProperty({__proto__:null,PURGATORY_CONFERENCE_NUMBER:L,createSyncMediaState:Ie,error:ae,getExtraHeaders:ie,getUserAgent:de,hasPurgatory:p,resolveAnswerIncomingCall:ee,resolveAskPermissionToEnableCam:me,resolveCallToServer:ne,resolveConnectToServer:te,resolveDisconnectFromServer:re,resolveGetRemoteStreams:I,resolveOnMoveToSpectators:Ce,resolveOnMustStopPresentation:fe,resolveOnUseLicense:Ee,resolveSendMediaState:Me,resolveSendRefusalToTurnOnCam:Re,resolveSendRefusalToTurnOnMic:Te,resolveStartPresentation:be,resolveStopShareSipConnector:_e,resolveUpdatePresentation:ve,resolveUpdateRemoteStreams:D,sendDTMFAccumulated:Ae},Symbol.toStringTag,{value:"Module"})),we=e=>[...e.keys()].map(t=>e.get(t)),Fe=(e,t)=>we(e).find(n=>n.type===t),x=async e=>e.getStats().then(t=>{const n=Fe(t,"codec");return n==null?void 0:n.mimeType}),ke=e=>e.find(t=>{var n;return((n=t==null?void 0:t.track)==null?void 0:n.kind)==="video"}),q=(e,t)=>e!==void 0&&t!==void 0&&e.toLowerCase().includes(t.toLowerCase()),Ue=1e6,E=e=>e*Ue,G=E(.06),Le=E(4),Ve=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):Le,$e="av1",xe=e=>q(e,$e),qe=.6,X=(e,t)=>xe(t)?e*qe:e,Ge=e=>X(G,e),W=(e,t)=>{const n=Ve(e);return X(n,t)},j=J.createStackPromises(),Xe=async()=>j().catch(e=>{r.logger("videoSendingBalancer: error",e)}),We=async e=>(j.add(e),Xe()),F=async({sender:e,scaleResolutionDownBy:t,maxBitrate:n,onSetParameters:s})=>We(async()=>r.setEncodingsToSender(e,{scaleResolutionDownBy:t,maxBitrate:n},s)),je=async({sender:e,codec:t},n)=>{const o=Ge(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,u=W(a,n);return F({sender:e,maxBitrate:u,onSetParameters:s,scaleResolutionDownBy:1})},Ke=async({sender:e,track:t,resolution:n,codec:s},o)=>{const c=t.getSettings(),a=c.width,u=c.height,[l,d]=n.split("x"),m=a/Number(l),g=u/Number(d),S=Math.max(m,g,1),f=W(Number(l),s);return F({sender:e,maxBitrate:f,onSetParameters:o,scaleResolutionDownBy:S})},He=async({mainCam:e,resolutionMainCam:t,sender:n,track:s,codec:o},c)=>{switch(e){case r.EEventsMainCAM.PAUSE_MAIN_CAM:return je({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?Ke({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=ke(c);if(!(a!=null&&a.track))return k;const u=await x(a);return q(u,o)?k:He({mainCam:e,resolutionMainCam:t,sender:a,codec:u,track:a.track},s)},Ye=(e,{ignoreForCodec:t,onSetParameters:n}={})=>{const s=async()=>{const{connection:l}=e;if(!l)throw new Error("connection is not exist");return U({connection:l,onSetParameters:n,ignoreForCodec:t})};let o=s;const c=async l=>(o=async()=>{const{mainCam:d,resolutionMainCam:m}=l,{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=x;exports.resolveVideoSendingBalancer=Ye;exports.tools=De;
package/dist/index.js CHANGED
@@ -1,14 +1,14 @@
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 x, E as B, s as q, S as Qe } from "./SipConnector-3gRIidBJ.js";
2
+ import { f as un, g as ln, i as Sn, c as mn, a as dn, d as fn, b as Cn, e as gn, h as Rn } 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";
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 }) => {
8
+ import { default as Tn } from "debug";
9
+ const $ = "purgatory", N = (e) => e === $, w = (e) => () => (o("getRemoteStreams"), e.getRemoteStreams()), ne = ({ kind: e, readyState: t }) => e === "video" && t === "live", G = (e) => ({ track: t }) => {
10
10
  ne(t) && e();
11
- }, w = ({
11
+ }, D = ({
12
12
  getRemoteStreams: e,
13
13
  setRemoteStreams: t
14
14
  }) => z(() => {
@@ -20,85 +20,85 @@ const x = "purgatory", N = (e) => e === x, D = (e) => () => (o("getRemoteStreams
20
20
  extraHeaders: s,
21
21
  iceServers: a,
22
22
  degradationPreference: c,
23
- setRemoteStreams: l,
24
- onBeforeProgressCall: u,
23
+ setRemoteStreams: u,
24
+ onBeforeProgressCall: l,
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
- } = n, E = w({
32
- setRemoteStreams: l,
33
- getRemoteStreams: D(e)
34
- }), _ = G(E);
31
+ } = n, E = D({
32
+ setRemoteStreams: u,
33
+ getRemoteStreams: w(e)
34
+ }), y = G(E);
35
35
  o("answerIncomingCall", n);
36
36
  const h = async () => e.answerToIncomingCall({
37
37
  mediaStream: r,
38
38
  extraHeaders: s,
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
46
  let T = !1, M;
47
- const y = (o("subscribeEnterConference: onEnterConference", S), f ?? S ? e.onSession("enterRoom", (i) => {
47
+ const _ = (o("subscribeEnterConference: onEnterConference", S), f ?? S ? e.onSession("enterRoom", (i) => {
48
48
  o("enterRoom", { _room: i, isSuccessProgressCall: T }), M = i, N(M) ? f && f() : S && S({ isSuccessProgressCall: T });
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
+ }), p = (i) => (o("onSuccess"), T = !0, E(), d && d({ isPurgatory: N(M) }), e.onceRaceSession(["ended", "failed"], () => {
51
+ _(), C && C();
52
+ }), i), O = (i) => {
53
+ throw o("onFail"), g && g(), _(), i;
54
+ }, v = () => {
55
55
  o("onFinish"), m && m();
56
56
  };
57
- if (o("onBeforeProgressCall"), u) {
57
+ if (o("onBeforeProgressCall"), l) {
58
58
  const i = b();
59
- u(i);
59
+ l(i);
60
60
  }
61
- return h().then(O).catch((i) => v(i)).finally(p);
61
+ return h().then(p).catch((i) => O(i)).finally(v);
62
62
  }, re = (e) => async (n) => {
63
63
  const {
64
64
  conference: r,
65
65
  mediaStream: s,
66
66
  extraHeaders: a,
67
67
  iceServers: c,
68
- degradationPreference: l,
69
- setRemoteStreams: u,
68
+ degradationPreference: u,
69
+ setRemoteStreams: l,
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({
78
- setRemoteStreams: u,
79
- getRemoteStreams: D(e)
80
- }), h = G(_);
77
+ } = n, y = D({
78
+ setRemoteStreams: l,
79
+ getRemoteStreams: w(e)
80
+ }), h = G(y);
81
81
  o("callToServer", n);
82
82
  const b = async () => (o("startCall"), e.call({
83
83
  mediaStream: s,
84
84
  extraHeaders: a,
85
85
  iceServers: c,
86
- degradationPreference: l,
86
+ degradationPreference: u,
87
87
  number: r,
88
88
  ontrack: h
89
89
  }));
90
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 });
91
+ const _ = (o("subscribeEnterConference: onEnterConference", g), S ?? g ? e.onSession("enterRoom", ({ room: i }) => {
92
+ o("enterRoom", { _room: i, isSuccessProgressCall: T }), M = i, N(M) ? S && S() : g && g({ isSuccessProgressCall: T });
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
+ }), p = (i) => (o("onSuccess"), T = !0, y(), f && f({ isPurgatory: N(M) }), e.onceRaceSession(["ended", "failed"], () => {
95
+ _(), E && E();
96
+ }), i), O = (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(r), b().then(p).catch((i) => O(i)).finally(v);
102
102
  }, I = (e) => {
103
103
  if (!J(e) && !Q(e))
104
104
  throw e;
@@ -109,12 +109,12 @@ const x = "purgatory", N = (e) => e === x, D = (e) => () => (o("getRemoteStreams
109
109
  sipWebSocketServerURL: s,
110
110
  sipServerUrl: a,
111
111
  remoteAddress: c,
112
- displayName: l,
113
- name: u,
112
+ displayName: u,
113
+ name: l,
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
120
  userAgent: r,
@@ -122,15 +122,15 @@ const x = "purgatory", N = (e) => e === x, D = (e) => () => (o("getRemoteStreams
122
122
  sipWebSocketServerURL: s,
123
123
  sipServerUrl: a,
124
124
  remoteAddress: c,
125
- displayName: l,
125
+ displayName: u,
126
126
  password: d,
127
- user: u,
127
+ user: l,
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
132
  let r = t;
133
- return (n === V || n === $) && (r = `${e.message.to.uri.user}@${e.message.to.uri.host}`), r;
133
+ return (n === V || n === x) && (r = `${e.message.to.uri.user}@${e.message.to.uri.host}`), r;
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()) => {
@@ -146,7 +146,7 @@ const ae = (e = new Error()) => {
146
146
  r = "BAD_MEDIA_ERROR";
147
147
  break;
148
148
  }
149
- case $: {
149
+ case x: {
150
150
  r = "NOT_FOUND_ERROR";
151
151
  break;
152
152
  }
@@ -154,16 +154,24 @@ const ae = (e = new Error()) => {
154
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");
155
155
  }
156
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({
157
+ }, ce = (e) => {
158
+ let t = "";
159
+ try {
160
+ t = JSON.stringify(e);
161
+ } catch (n) {
162
+ o("failed to stringify message", n);
163
+ }
164
+ return t;
165
+ }, ie = (e = new Error()) => {
166
+ const { code: t, cause: n, message: r } = e, s = F(e), a = { code: "", cause: "", message: "" };
167
+ return typeof r == "object" && r !== null ? a.message = ce(r) : r && (a.message = String(r)), s && (a.link = s), 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,
@@ -171,43 +179,46 @@ const ae = (e = new Error()) => {
171
179
  isRegistered: s,
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 = [], u = n ? "0" : "1", l = r ? "0" : "1";
183
+ return c.push(`X-Vinteo-Mic-State: ${u}`, `X-Vinteo-MainCam-State: ${l}`), 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;
184
+ }, Se = "[@*!|]", me = "_", de = (e) => {
185
+ let t = e;
186
+ return t = t.replaceAll(new RegExp(Se, "g"), me), t;
187
+ }, fe = ({
177
188
  appName: e,
178
189
  appVersion: t,
179
190
  browserName: n,
180
191
  browserVersion: r
181
192
  }) => {
182
- const s = `${e} ${t}`;
183
- return `ChromeNew - ${n ? `${n} ${r}, ${s}` : s}`;
184
- }, Se = ({
193
+ const a = `${de(e)} ${t}`;
194
+ return `ChromeNew - ${n ? `${n} ${r}, ${a}` : a}`;
195
+ }, Ce = ({
185
196
  isUnifiedSdpSemantic: e,
186
197
  appVersion: t,
187
198
  browserName: n,
188
199
  browserVersion: r,
189
200
  appName: s
190
- }) => e ? le({ appVersion: t, browserName: n, browserVersion: r, appName: s }) : "Chrome", me = (e) => async () => {
201
+ }) => e ? fe({ appVersion: t, browserName: n, browserVersion: r, appName: s }) : "Chrome", ge = (e) => async () => {
191
202
  if (e.isCallActive)
192
203
  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 ({
204
+ }, Re = (e) => (n) => (o("onMustStopPresentation"), e.onSession("mustStopPresentation", n)), Ee = (e) => (n) => (o("onMoveToSpectators"), e.onSession("participant:move-request-to-spectators", n)), Te = (e) => (n) => (o("onUseLicense"), e.onSession("useLicense", n)), Me = (e) => async ({
194
205
  isEnabledCam: n,
195
206
  isEnabledMic: r
196
207
  }) => {
197
208
  if (e.isCallActive)
198
209
  return o("sendMediaState"), e.sendMediaState({ cam: n, mic: r });
199
- }, ge = (e) => async () => {
210
+ }, ye = (e) => async () => {
200
211
  if (e.isCallActive)
201
212
  return o("sendRefusalToTurnOnCam"), e.sendRefusalToTurnOnCam().catch((n) => {
202
213
  o("sendRefusalToTurnOnCam: error", n);
203
214
  });
204
- }, Ee = (e) => async () => {
215
+ }, _e = (e) => async () => {
205
216
  if (e.isCallActive)
206
217
  return o("sendRefusalToTurnOnMic"), e.sendRefusalToTurnOnMic().catch((n) => {
207
218
  o("sendRefusalToTurnOnMic: error", n);
208
219
  });
209
- }, Te = 1e6, Me = ({
210
- maxBitrate: e = Te,
220
+ }, he = 1e6, be = ({
221
+ maxBitrate: e = he,
211
222
  sipConnector: t
212
223
  }) => async ({
213
224
  mediaStream: r,
@@ -215,65 +226,65 @@ const ae = (e = new Error()) => {
215
226
  }) => (o("startPresentation"), t.startPresentation(r, {
216
227
  isP2P: s,
217
228
  maxBitrate: e
218
- })), _e = ({ sipConnector: e }) => async ({ isP2P: n = !1 } = {}) => (o("stopShareSipConnector"), e.stopPresentation({
229
+ })), pe = ({ sipConnector: e }) => async ({ isP2P: n = !1 } = {}) => (o("stopShareSipConnector"), e.stopPresentation({
219
230
  isP2P: n
220
231
  }).catch((r) => {
221
232
  o(r);
222
- })), ye = 1e6, he = ({
233
+ })), Oe = 1e6, ve = ({
223
234
  sipConnector: e,
224
- maxBitrate: t = ye
235
+ maxBitrate: t = Oe
225
236
  }) => async ({
226
237
  mediaStream: r,
227
238
  isP2P: s = !1
228
239
  }) => (o("updatePresentation"), e.updatePresentation(r, {
229
240
  isP2P: s,
230
241
  maxBitrate: t
231
- })), be = (e) => (t) => [...t].map((r) => async () => e(r)), Oe = async ({
242
+ })), Ne = (e) => (t) => [...t].map((r) => async () => e(r)), Ae = async ({
232
243
  accumulatedKeys: e,
233
244
  sendKey: t,
234
245
  canRunTask: n
235
246
  }) => {
236
- const s = be(t)(e);
247
+ const s = Ne(t)(e);
237
248
  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 (_) {
249
+ }, Be = (e) => (n) => (o("onStartMainCam"), e.onSession("admin-start-main-cam", n)), Ie = (e) => (n) => (o("onStartMic"), e.onSession("admin-start-mic", n)), Pe = (e) => (n) => (o("onStopMainCam"), e.onSession("admin-stop-main-cam", n)), we = (e) => (n) => (o("onStopMic"), e.onSession("admin-stop-mic", n)), De = ({ sipConnector: e }) => {
250
+ const t = (C, E) => ({ isSyncForced: y = !1 }) => {
251
+ if (y) {
241
252
  C();
242
253
  return;
243
254
  }
244
255
  E();
245
- }, n = ve(e), r = Ne(e), s = pe(e), a = Ae(e);
256
+ }, n = Be(e), r = Pe(e), s = Ie(e), a = we(e);
246
257
  let c = () => {
247
- }, l = () => {
248
258
  }, u = () => {
259
+ }, l = () => {
249
260
  }, d = () => {
250
261
  };
251
262
  const f = ({
252
263
  onStartMainCamForced: C,
253
264
  onStartMainCamNotForced: E,
254
- onStopMainCamForced: _,
265
+ onStopMainCamForced: y,
255
266
  onStopMainCamNotForced: h,
256
267
  onStartMicForced: b,
257
268
  onStartMicNotForced: T,
258
269
  onStopMicForced: M,
259
270
  onStopMicNotForced: A
260
271
  }) => {
261
- const y = t(
272
+ const _ = t(
262
273
  C,
263
274
  E
264
275
  );
265
- c = n(y);
266
- const O = t(
267
- _,
276
+ c = n(_);
277
+ const p = t(
278
+ y,
268
279
  h
269
280
  );
270
- l = r(O);
271
- const v = t(b, T);
272
- u = s(v);
273
- const p = t(M, A);
274
- d = a(p);
281
+ u = r(p);
282
+ const O = t(b, T);
283
+ l = s(O);
284
+ const v = t(M, A);
285
+ d = a(v);
275
286
  }, S = () => {
276
- c(), l(), u(), d();
287
+ c(), u(), l(), d();
277
288
  };
278
289
  return {
279
290
  start: (C) => {
@@ -283,49 +294,49 @@ const ae = (e = new Error()) => {
283
294
  S();
284
295
  }
285
296
  };
286
- }, en = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
297
+ }, sn = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
287
298
  __proto__: null,
288
- PURGATORY_CONFERENCE_NUMBER: x,
289
- createSyncMediaState: Be,
290
- error: ie,
291
- getExtraHeaders: ue,
292
- getUserAgent: Se,
299
+ PURGATORY_CONFERENCE_NUMBER: $,
300
+ createSyncMediaState: De,
301
+ error: ue,
302
+ getExtraHeaders: le,
303
+ getUserAgent: Ce,
293
304
  hasPurgatory: N,
294
305
  resolveAnswerIncomingCall: te,
295
- resolveAskPermissionToEnableCam: me,
306
+ resolveAskPermissionToEnableCam: ge,
296
307
  resolveCallToServer: re,
297
308
  resolveConnectToServer: se,
298
309
  resolveDisconnectFromServer: oe,
299
- resolveGetRemoteStreams: D,
300
- resolveOnMoveToSpectators: fe,
301
- resolveOnMustStopPresentation: de,
302
- resolveOnUseLicense: Ce,
303
- resolveSendMediaState: Re,
304
- resolveSendRefusalToTurnOnCam: ge,
305
- resolveSendRefusalToTurnOnMic: Ee,
306
- resolveStartPresentation: Me,
307
- resolveStopShareSipConnector: _e,
308
- resolveUpdatePresentation: he,
309
- 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");
310
+ resolveGetRemoteStreams: w,
311
+ resolveOnMoveToSpectators: Ee,
312
+ resolveOnMustStopPresentation: Re,
313
+ resolveOnUseLicense: Te,
314
+ resolveSendMediaState: Me,
315
+ resolveSendRefusalToTurnOnCam: ye,
316
+ resolveSendRefusalToTurnOnMic: _e,
317
+ resolveStartPresentation: be,
318
+ resolveStopShareSipConnector: pe,
319
+ resolveUpdatePresentation: ve,
320
+ resolveUpdateRemoteStreams: D,
321
+ sendDTMFAccumulated: Ae
322
+ }, Symbol.toStringTag, { value: "Module" })), Fe = (e) => [...e.keys()].map((t) => e.get(t)), ke = (e, t) => Fe(e).find((n) => n.type === t), Ue = async (e) => e.getStats().then((t) => {
323
+ const n = ke(t, "codec");
313
324
  return n == null ? void 0 : n.mimeType;
314
- }), we = (e) => e.find((t) => {
325
+ }), Le = (e) => e.find((t) => {
315
326
  var n;
316
327
  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) => {
328
+ }), W = (e, t) => e !== void 0 && t !== void 0 && e.toLowerCase().includes(t.toLowerCase()), Ve = 1e6, R = (e) => e * Ve, K = R(0.06), xe = R(4), $e = (e) => e <= 64 ? K : 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) : xe, Ge = "av1", Xe = (e) => W(e, Ge), We = 0.6, j = (e, t) => Xe(t) ? e * We : e, Ke = (e) => j(K, e), H = (e, t) => {
329
+ const n = $e(e);
330
+ return j(n, t);
331
+ }, Y = ee(), je = async () => Y().catch((e) => {
321
332
  o("videoSendingBalancer: error", e);
322
- }), Xe = async (e) => (Y.add(e), Ge()), k = async ({
333
+ }), He = async (e) => (Y.add(e), je()), k = async ({
323
334
  sender: e,
324
335
  scaleResolutionDownBy: t,
325
336
  maxBitrate: n,
326
337
  onSetParameters: r
327
- }) => Xe(async () => q(e, { scaleResolutionDownBy: t, maxBitrate: n }, r)), Ke = async ({ sender: e, codec: t }, n) => {
328
- const s = xe(t);
338
+ }) => He(async () => q(e, { scaleResolutionDownBy: t, maxBitrate: n }, r)), Ye = async ({ sender: e, codec: t }, n) => {
339
+ const s = Ke(t);
329
340
  return k({
330
341
  sender: e,
331
342
  maxBitrate: s,
@@ -333,27 +344,27 @@ const ae = (e = new Error()) => {
333
344
  scaleResolutionDownBy: 200
334
345
  });
335
346
  }, P = async ({ sender: e, track: t, codec: n }, r) => {
336
- const c = t.getSettings().width, l = j(c, n);
347
+ const c = t.getSettings().width, u = H(c, n);
337
348
  return k({
338
349
  sender: e,
339
- maxBitrate: l,
350
+ maxBitrate: u,
340
351
  onSetParameters: r,
341
352
  scaleResolutionDownBy: 1
342
353
  });
343
- }, We = async ({
354
+ }, qe = async ({
344
355
  sender: e,
345
356
  track: t,
346
357
  resolution: n,
347
358
  codec: r
348
359
  }, 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);
360
+ const a = t.getSettings(), c = a.width, u = a.height, [l, d] = n.split("x"), f = c / Number(l), S = u / Number(d), m = Math.max(f, S, 1), C = H(Number(l), r);
350
361
  return k({
351
362
  sender: e,
352
363
  maxBitrate: C,
353
364
  onSetParameters: s,
354
365
  scaleResolutionDownBy: m
355
366
  });
356
- }, He = async ({
367
+ }, ze = async ({
357
368
  mainCam: e,
358
369
  resolutionMainCam: t,
359
370
  sender: n,
@@ -362,11 +373,11 @@ const ae = (e = new Error()) => {
362
373
  }, a) => {
363
374
  switch (e) {
364
375
  case B.PAUSE_MAIN_CAM:
365
- return Ke({ sender: n, codec: s }, a);
376
+ return Ye({ sender: n, codec: s }, a);
366
377
  case B.RESUME_MAIN_CAM:
367
378
  return P({ sender: n, track: r, codec: s }, a);
368
379
  case B.MAX_MAIN_CAM_RESOLUTION:
369
- return t !== void 0 ? We(
380
+ return t !== void 0 ? qe(
370
381
  { sender: n, track: r, codec: s, resolution: t },
371
382
  a
372
383
  ) : P({ sender: n, track: r, codec: s }, a);
@@ -389,31 +400,31 @@ const ae = (e = new Error()) => {
389
400
  onSetParameters: r,
390
401
  ignoreForCodec: s
391
402
  }) => {
392
- const a = n.getSenders(), c = we(a);
403
+ const a = n.getSenders(), c = Le(a);
393
404
  if (!(c != null && c.track))
394
405
  return U;
395
- const l = await De(c);
396
- return K(l, s) ? U : He(
397
- { mainCam: e, resolutionMainCam: t, sender: c, codec: l, track: c.track },
406
+ const u = await Ue(c);
407
+ return W(u, s) ? U : ze(
408
+ { mainCam: e, resolutionMainCam: t, sender: c, codec: u, track: c.track },
398
409
  r
399
410
  );
400
- }, nn = (e, {
411
+ }, on = (e, {
401
412
  ignoreForCodec: t,
402
413
  onSetParameters: n
403
414
  } = {}) => {
404
415
  const r = async () => {
405
- const { connection: u } = e;
406
- if (!u)
416
+ const { connection: l } = e;
417
+ if (!l)
407
418
  throw new Error("connection is not exist");
408
419
  return L({
409
- connection: u,
420
+ connection: l,
410
421
  onSetParameters: n,
411
422
  ignoreForCodec: t
412
423
  });
413
424
  };
414
425
  let s = r;
415
- const a = async (u) => (s = async () => {
416
- const { mainCam: d, resolutionMainCam: f } = u, { connection: S } = e;
426
+ const a = async (l) => (s = async () => {
427
+ const { mainCam: d, resolutionMainCam: f } = l, { connection: S } = e;
417
428
  if (!S)
418
429
  throw new Error("connection is not exist");
419
430
  return L({
@@ -442,18 +453,18 @@ const ae = (e = new Error()) => {
442
453
  };
443
454
  export {
444
455
  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
456
+ un as EEventsMic,
457
+ ln as EEventsSyncMediaState,
458
+ Sn as EUseLicense,
459
+ mn as causes,
460
+ dn as constants,
461
+ Tn as debug,
462
+ Qe as default,
463
+ fn as disableDebug,
464
+ Cn as enableDebug,
465
+ gn as eventNames,
466
+ Ue as getCodecFromSender,
467
+ Rn as hasCanceledCallError,
468
+ on as resolveVideoSendingBalancer,
469
+ sn as tools
459
470
  };
@@ -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;
@@ -0,0 +1,2 @@
1
+ declare const replaceForbiddenSymbolsWithUnderscore: (text: string) => string;
2
+ export default replaceForbiddenSymbolsWithUnderscore;
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.10",
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.15.0",
83
+ "@typescript-eslint/parser": "^7.15.0",
84
84
  "cross-env": "^7.0.3",
85
85
  "eslint": "^8.57.0",
86
86
  "eslint-config-airbnb-base": "^15.0.0",
@@ -103,8 +103,8 @@
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",
107
- "vite": "^5.3.1",
106
+ "typescript": "^5.5.3",
107
+ "vite": "^5.3.3",
108
108
  "vite-plugin-dts": "^3.9.1",
109
109
  "vite-tsconfig-paths": "^4.3.2"
110
110
  },