@voicenter-team/events-sdk 0.0.64 → 0.0.66

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.
@@ -16,5 +16,5 @@
16
16
  `+D+ut.join(`,
17
17
  `+D)+`
18
18
  `+te+"}":"{"+ut.join(",")+"}":"{}";return P.pop(),ee}};l.stringify=function(R,U,I){var F,N,D,P;if(typeof U=="function"||typeof U=="object"&&U){if((P=d.call(U))==a)N=U;else if(P==g){D={};for(var L,M=0,J=U.length;J>M;L=U[M++],P=d.call(L),(P==y||P==f)&&(D[L]=1));}}if(I)if((P=d.call(I))==f){if((I-=I%1)>0)for(F="",I>10&&(I=10);F.length<I;F+=" ");}else P==y&&(F=I.length<=10?I:I.slice(0,10));return x("",(L={},L[""]=R,L),N,D,F,"",[])}}if(!o("json-parse")){var A,q,j=String.fromCharCode,$={92:"\\",34:'"',47:"/",98:"\b",116:" ",110:`
19
- `,102:"\f",114:"\r"},X=function(){throw A=q=null,SyntaxError()},et=function(){for(var R,U,I,F,N,D=q,P=D.length;P>A;)switch(N=D.charCodeAt(A)){case 9:case 10:case 13:case 32:A++;break;case 123:case 125:case 91:case 93:case 58:case 44:return R=B?D.charAt(A):D[A],A++,R;case 34:for(R="@",A++;P>A;)if(N=D.charCodeAt(A),32>N)X();else if(N==92)switch(N=D.charCodeAt(++A)){case 92:case 34:case 47:case 98:case 116:case 110:case 102:case 114:R+=$[N],A++;break;case 117:for(U=++A,I=A+4;I>A;A++)N=D.charCodeAt(A),N>=48&&57>=N||N>=97&&102>=N||N>=65&&70>=N||X();R+=j("0x"+D.slice(U,A));break;default:X()}else{if(N==34)break;for(N=D.charCodeAt(A),U=A;N>=32&&N!=92&&N!=34;)N=D.charCodeAt(++A);R+=D.slice(U,A)}if(D.charCodeAt(A)==34)return A++,R;X();default:if(U=A,N==45&&(F=!0,N=D.charCodeAt(++A)),N>=48&&57>=N){for(N==48&&(N=D.charCodeAt(A+1),N>=48&&57>=N)&&X(),F=!1;P>A&&(N=D.charCodeAt(A),N>=48&&57>=N);A++);if(D.charCodeAt(A)==46){for(I=++A;P>I&&(N=D.charCodeAt(I),N>=48&&57>=N);I++);I==A&&X(),A=I}if(N=D.charCodeAt(A),N==101||N==69){for(N=D.charCodeAt(++A),(N==43||N==45)&&A++,I=A;P>I&&(N=D.charCodeAt(I),N>=48&&57>=N);I++);I==A&&X(),A=I}return+D.slice(U,A)}if(F&&X(),D.slice(A,A+4)=="true")return A+=4,!0;if(D.slice(A,A+5)=="false")return A+=5,!1;if(D.slice(A,A+4)=="null")return A+=4,null;X()}return"$"},Ot=function(R){var U,I;if(R=="$"&&X(),typeof R=="string"){if((B?R.charAt(0):R[0])=="@")return R.slice(1);if(R=="["){for(U=[];R=et(),R!="]";I||(I=!0))I&&(R==","?(R=et(),R=="]"&&X()):X()),R==","&&X(),U.push(Ot(R));return U}if(R=="{"){for(U={};R=et(),R!="}";I||(I=!0))I&&(R==","?(R=et(),R=="}"&&X()):X()),(R==","||typeof R!="string"||(B?R.charAt(0):R[0])!="@"||et()!=":")&&X(),U[R.slice(1)]=Ot(et());return U}X()}return R},Be=function(R,U,I){var F=_e(R,U,I);F===h?delete R[U]:R[U]=F},_e=function(R,U,I){var F,N=R[U];if(typeof N=="object"&&N)if(d.call(N)==g)for(F=N.length;F--;)Be(N,F,I);else u(N,function(D){Be(N,D,I)});return I.call(R,U,N)};l.parse=function(R,U){var I,F;return A=0,q=""+R,I=Ot(et()),et()!="$"&&X(),A=q=null,U&&d.call(U)==a?_e((F={},F[""]=I,F),"",U):I}}}})(this)},{}],48:[function(t,e){function r(n,o){var i=[];o=o||0;for(var u=o||0;u<n.length;u++)i[u-o]=n[u];return i}e.exports=r},{}]},{},[1])(1)}const Mo=Object.freeze(Object.defineProperty({__proto__:null,default:jo},Symbol.toStringTag,{value:"Module"})),qo=Object.assign({"./v1_3_7.js":Mo}),zo=/v\d+_\d+_\d+/;function Xo(t){return typeof t=="function"}const ve=Object.entries(qo).reduce((t,e)=>{var o;const r=e[1].default,n=(o=e[0].match(zo))==null?void 0:o[0];return Xo(r)&&n&&(t[n]=r()),t},{}),Sr=t=>{if(t in ve)return ve[t];throw new Error(`Socket version ${t} not found`)},Wo=(t,...e)=>Sr(t)(...e),Ko={...ve,getSocketVersion:Sr,makeSocketVersion:Wo};var Er=(t=>(t.RINGING="Ringing",t.TALKING="Talking",t.DIALING="Dialing",t.HOLD="Hold",t))(Er||{}),Ar=(t=>(t.INCOMING="Incoming",t.OUTGOING="Outgoing",t))(Ar||{}),dt=(t=>(t.CONNECTED="connected",t.DISCONNECTED="disconnected",t.TRYING_TO_CONNECT="tryingToConnect",t))(dt||{}),Tr=(t=>(t.AUTOMATIC="Automatic",t.IVR="IVR",t))(Tr||{}),Nr=(t=>(t.INCOMINC="Incoming",t.OUTGOING="Outgoing",t.SPY="Spy",t.CLICK2CALL="Click2Call",t))(Nr||{}),Or=(t=>(t.RESPONSE_FROM_API_VALID="RESPONSE_FROM_API_VALID",t.RESPONSE_FROM_API_INVALID="RESPONSE_FROM_API_INVALID",t))(Or||{}),z=(t=>(t.ALL_DIALER_STATUS="AllDialersStatus",t.ALL_EXTENSION_STATUS="AllExtensionsStatus",t.ALL_USERS_STATUS="AllUsersStatus",t.CONNECT="connect",t.DISCONNECT="disconnect",t.CONNECT_ERROR_EVENT="connect_error",t.EXTENSION_EVENT="ExtensionEvent",t.KEEP_ALIVE="keepalive",t.KEEP_ALIVE_RESPONSE="keepaliveResponse",t.LOGIN_STATUS="loginStatus",t.LOGIN_SUCCESS="loginSuccess",t.QUEUE_EVENT="QueueEvent",t.ONLINE_STATUS_EVENT="onlineStatusEvent",t.DIALER_EVENT="DialerEvent",t.EXTENSIONS_UPDATED="ExtensionsUpdated",t))(z||{}),Re=(t=>(t.NEWCALL="NEWCALL",t.ANSWER="ANSWER",t.HOLD="HOLD",t.UNHOLD="UNHOLD",t.HANGUP="HANGUP",t.USER_STATUS_UPDATE="userStatusUpdate",t))(Re||{}),xr=(t=>(t.NORMAL_HANGUP="Normal hangup",t.USER_BUSY="User busy",t.CALL_REJECTED="Call Rejected",t.UNALLOCATED_NUMBER="Unallocated (unassigned) number",t.UNKNOWN="Unknown",t.NO_USER_RESPONDING="No user responding",t.USER_ALERTING="User alerting, no answer",t.ANSWERED_ELSEWHERE="Answered elsewhere",t))(xr||{}),Rr=(t=>(t.ANSWER="ANSWER",t.ABANDONED="ABANDONED",t.EXIT="EXIT",t.JOIN="JOIN",t))(Rr||{});class ce{static mapExtensionEvent(e){var u,h;const r=e.reason;let n,o;e.data.currentCall&&(o=this.mapExtensionCall(e,e.data.currentCall));const i=this.mapExtensionData(e,e.data);return r===Re.HANGUP?n={...e,reason:r,data:{...i,currentCall:o?{...o,duration:Date.now()-((o==null?void 0:o.callAnswered_UTC_CLIENT)??0)}:void 0,calls:(u=e.data.calls)==null?void 0:u.map(d=>{const c=this.mapExtensionCall(e,d);return{...c,duration:Date.now()-(c.callAnswered_UTC_CLIENT??0)}})}}:n={...e,data:{...i,currentCall:o,calls:(h=e.data.calls)==null?void 0:h.map(d=>this.mapExtensionCall(e,d))},reason:r},n}static mapAllExtensionStatus(e){return{...e,extensions:e.extensions.map(r=>{var n;return{...this.mapExtensionData(e,r),currentCall:r.currentCall?this.mapExtensionCall(e,r.currentCall):void 0,calls:(n=r.calls)==null?void 0:n.map(o=>this.mapExtensionCall(e,o))}})}}static mapExtensionData(e,r){return this.configureUTCForObject(r,[{key:"lastAnsweredCallEventEpoch",format:"sec"},{key:"lastCallEventEpoch",format:"sec"},{key:"lastHangupCallEpoch",format:"sec"},{key:"representativeUpdated",format:"ms"}],e.servertime,e.servertimeoffset)}static mapExtensionCall(e,r){return this.configureUTCForObject(r,[{key:"callAnswered",format:"sec"},{key:"callStarted",format:"sec"}],e.servertime,e.servertimeoffset)}static mapQueueEvent(e){var r;return{...e,data:{...e.data,Calls:(r=e.data.Calls)==null?void 0:r.map(n=>this.configureUTCForObject(n,[{key:"JoinTimeStamp",format:"sec"}],e.servertime,e.servertimeoffset))}}}static assignProperty(e,r,n){e[r]=n}static configureUTCForObject(e,r,n,o){const i=(n-o*60)*1e3,u=Date.now()-i,h={};return r.forEach(d=>{const c=e[d.key],l=d.key;if(c!==0&&typeof c=="number"&&!isNaN(c)){let p=c;d.format==="ms"&&(p=Math.floor(p/1e3));const a=(p-o*60)*1e3;this.assignProperty(h,`${l}_UTC`,a),this.assignProperty(h,`${l}_UTC_CLIENT`,a+u)}else this.assignProperty(h,`${l}_UTC`,0),this.assignProperty(h,`${l}_UTC_CLIENT`,0)}),{...e,...h}}}var Ie=(t=>(t.UPDATE_MONITORED_EXTENSIONS="updateMonitoredExtensions",t.KEEP_ALIVE="keepAlive",t))(Ie||{});class Ho{constructor(e){H(this,"io");H(this,"ioFunction");H(this,"lastEventTimestamp",new Date().getTime());H(this,"doReconnect",!0);H(this,"keepAliveInterval");H(this,"keepReconnectInterval");H(this,"connected",!1);this.eventsSdkClass=e,this.eventsSdkClass=e}getSocketIoFunction(e){const r=e.split("v="),n="v".concat(r[r.length-1]).replaceAll(".","_");this.ioFunction=Ko.getSocketVersion(n)}initSocketConnection(){const e=this.eventsSdkClass.authClass.token,r=this.eventsSdkClass.options.protocol,n=this.eventsSdkClass.server;try{const o=n?n.Domain:this.eventsSdkClass.URL,i=n?`${r}://${o}`:this.eventsSdkClass.URL;this.eventsSdkClass.eventEmitterClass.emit(z.ONLINE_STATUS_EVENT,{attemptToConnect:i,connectionStatus:dt.TRYING_TO_CONNECT});const u={reconnection:!1,upgrade:!1,transports:["websocket"],forceNew:!0,query:{token:e},timeout:this.eventsSdkClass.options.timeout};if(e&&(u.query={token:e}),this.ioFunction&&i)this.io=this.ioFunction(i,u),this.eventsSdkClass.loggerClass.log({Message:`${this.eventsSdkClass.options.loggerConfig.system} tries to connect to WS server ${o}`,ActionName:at.WSCONNECT,isShowClient:!1,Status:"Switching Protocols",StatusCode:101,Level:tt.INFO,LogType:ct.INFO});else throw new Error("Socket server url no defined")}catch(o){this.eventsSdkClass.loggerClass.log({Message:`${o}`,ActionName:at.WSCONNECT,isShowClient:!1,Status:"Connection error",StatusCode:500,Level:tt.ERROR,LogType:ct.ERROR})}}clearKeepAliveInterval(){this.keepAliveInterval&&clearInterval(this.keepAliveInterval)}initKeepAlive(){this.clearKeepAliveInterval(),this.keepAliveInterval=setInterval(async()=>{if(new Date().getTime()>this.lastEventTimestamp+this.eventsSdkClass.options.keepAliveTimeout&&this.io&&this.eventsSdkClass.authClass.token){this.eventsSdkClass.emit(Ie.KEEP_ALIVE,this.eventsSdkClass.authClass.token),this.eventsSdkClass.loggerClass.log({Message:`Keep alive event emitted with this token: ${this.eventsSdkClass.authClass.token}`,ActionName:at.WSCONNECT,isShowClient:!1,Level:tt.INFO,LogType:ct.INFO});return}},this.eventsSdkClass.options.keepAliveTimeout)}closeAllConnections(){var e;this.io&&(this.io.close(),(e=this.io)==null||e.disconnect(),this.io=void 0),It.clearSessionStorage()}initSocketEvents(){this.io&&this.io.on(z.LOGIN_SUCCESS,e=>this.onLoginSuccessEvent(e)).on(z.QUEUE_EVENT,e=>this.onQueueEvent(e)).on(z.EXTENSION_EVENT,e=>this.onExtensionEvent(e)).on(z.DIALER_EVENT,e=>this.onDialerEvent(e)).on(z.LOGIN_STATUS,e=>this.onLoginStatusEvent(e)).on(z.ALL_EXTENSION_STATUS,e=>this.onAllExtensionStatus(e)).on(z.ALL_DIALER_STATUS,e=>this.onAllDialerStatus(e)).on(z.KEEP_ALIVE_RESPONSE,e=>this.onKeepAliveResponse(e)).on(z.EXTENSIONS_UPDATED,e=>this.onExtensionsUpdatedEvent(e)).on(z.CONNECT,()=>this.onConnect()).on(z.DISCONNECT,e=>this.onDisconnect(e)).on(z.CONNECT_ERROR_EVENT,e=>this.onConnectError(e))}onLoginSuccessEvent(e){this.eventsSdkClass.eventEmitterClass.emit(z.LOGIN_SUCCESS,e)}onQueueEvent(e){this.eventsSdkClass.eventEmitterClass.emit(z.QUEUE_EVENT,ce.mapQueueEvent(e))}onExtensionEvent(e){const r=ce.mapExtensionEvent(e);r&&this.eventsSdkClass.eventEmitterClass.emit(z.EXTENSION_EVENT,r)}onDialerEvent(e){this.eventsSdkClass.eventEmitterClass.emit(z.DIALER_EVENT,e)}onLoginStatusEvent(e){this.eventsSdkClass.eventEmitterClass.emit(z.LOGIN_STATUS,e)}onAllExtensionStatus(e){const r=ce.mapAllExtensionStatus(e);this.eventsSdkClass.eventEmitterClass.emit(z.ALL_EXTENSION_STATUS,r)}onAllDialerStatus(e){this.eventsSdkClass.eventEmitterClass.emit(z.ALL_DIALER_STATUS,e)}onKeepAliveResponse(e){if(e.errorCode){this.initSocketConnection();return}this.eventsSdkClass.loggerClass.log({Message:`Keep alive response: ${e}`,ActionName:at.WSCONNECT,isShowClient:!1,Status:"Successful",StatusCode:200,Level:tt.INFO,LogType:ct.INFO}),this.connected?this.lastEventTimestamp=new Date().getTime():this.initSocketConnection()}onExtensionsUpdatedEvent(e){this.eventsSdkClass.eventEmitterClass.emit(z.EXTENSIONS_UPDATED,e)}onConnect(){this.keepReconnectInterval&&clearInterval(this.keepReconnectInterval),this.connected=!0,this.eventsSdkClass.eventEmitterClass.emit(z.ONLINE_STATUS_EVENT,{connectionStatus:dt.CONNECTED}),this.eventsSdkClass.loggerClass.log({Message:`Sdk connected to the socket server ${this.eventsSdkClass.server&&this.eventsSdkClass.server.Domain?this.eventsSdkClass.server.Domain:this.eventsSdkClass.URL}`,ActionName:at.WSCONNECT,isShowClient:!1,Status:"Connection established",StatusCode:200,Level:tt.INFO,LogType:ct.INFO})}onDisconnect(e){this.connected=!1,this.closeAllConnections(),this.eventsSdkClass.eventEmitterClass.emit(z.ONLINE_STATUS_EVENT,{connectionStatus:this.doReconnect?dt.TRYING_TO_CONNECT:dt.DISCONNECTED}),this.eventsSdkClass.loggerClass.log({Message:`Sdk disconnected from the socket server ${this.eventsSdkClass.server&&this.eventsSdkClass.server.Domain?this.eventsSdkClass.server.Domain:this.eventsSdkClass.URL} (${e})`,ActionName:at.WSCONNECT,isShowClient:!1,Status:"Connection closed",StatusCode:200,Level:tt.INFO,LogType:ct.INFO}),this.doReconnect&&this.eventsSdkClass.connect(vt.NEXT)}onConnectError(e){this.eventsSdkClass.eventEmitterClass.emit(z.ONLINE_STATUS_EVENT,{connectionStatus:this.doReconnect?dt.TRYING_TO_CONNECT:dt.DISCONNECTED}),this.eventsSdkClass.loggerClass.log({Message:`Sdk tries to connect to the socket server ${this.eventsSdkClass.URL} but error (${e})`,ActionName:at.WSCONNECT,isShowClient:!1,Status:"Connection attempt error",StatusCode:500,Level:tt.ERROR,LogType:ct.ERROR}),setTimeout(()=>{this.eventsSdkClass.connect(vt.NEXT)},this.eventsSdkClass.options.reconnectionDelay)}}class Jo{constructor(e){H(this,"storageLogger");this.eventsSdkClass=e,this.eventsSdkClass=e}init(){if(!this.eventsSdkClass.options.useLogger)return;if(this.eventsSdkClass.options.storageLoggerInstance){this.storageLogger=this.eventsSdkClass.options.storageLoggerInstance;return}let e;this.eventsSdkClass.options.loggerSocketConnection&&(e=this.eventsSdkClass.options.loggerSocketConnection),this.eventsSdkClass.socketIoClass.ioFunction&&!e&&(e=this.eventsSdkClass.socketIoClass.ioFunction(this.eventsSdkClass.options.loggerServer,this.eventsSdkClass.options.loggerConnectOptions)),e&&(this.storageLogger=new Do({socket:e,loggerOptions:this.eventsSdkClass.options.loggerConfig}))}log(e){this.storageLogger?e.Level===tt.INFO?this.storageLogger.log(e):e.Level===tt.ERROR&&this.storageLogger.error(e):e.Level===tt.INFO?console.log(e):e.Level===tt.ERROR&&console.error(e)}sdkInitializedLog(){const e={...this.eventsSdkClass.options,token:"CENSORED",password:"CENSORED"};this.log({Message:"Sdk initialized with provided options",Body:JSON.stringify(e,this.eventsSdkClass.getCircularReplacer()),ActionName:at.WSCONNECT,isShowClient:!1,Status:"Sdk initialized",StatusCode:200,Level:tt.INFO,LogType:ct.INFO})}}class Vo{constructor(e){H(this,"listeners",{[z.ALL_EXTENSION_STATUS]:[],[z.ALL_DIALER_STATUS]:[],[z.ALL_USERS_STATUS]:[],[z.QUEUE_EVENT]:[],[z.EXTENSION_EVENT]:[],[z.DIALER_EVENT]:[],[z.LOGIN_SUCCESS]:[],[z.LOGIN_STATUS]:[],[z.KEEP_ALIVE_RESPONSE]:[],[z.ONLINE_STATUS_EVENT]:[],[z.EXTENSIONS_UPDATED]:[]});H(this,"allListeners",[]);this.eventsSdkClass=e,this.eventsSdkClass=e}on(e,r){e==="*"?this.allListeners.push(r):this.listeners[e].push(r)}off(e,r){if(e==="*")this.allListeners=this.allListeners.filter(n=>n!==r);else{const o=this.listeners[e].filter(i=>i!==r);this.listeners={...this.listeners,[e]:o}}}emit(e,r){this.eventsSdkClass.socketIoClass.lastEventTimestamp=new Date().getTime(),this.listeners[e].forEach(o=>o({name:e,data:r}));const n={name:e,data:r};this.allListeners.forEach(o=>o(n))}}class $o{constructor(e){H(this,"options");H(this,"servers",[]);H(this,"URLList",[]);H(this,"server");H(this,"URL");H(this,"socket");H(this,"mainServer");H(this,"alreadyAttemptedOtherServers",[]);H(this,"authClass",new Po(this));H(this,"socketIoClass",new Ho(this));H(this,"loggerClass",new Jo(this));H(this,"eventEmitterClass",new Vo(this));H(this,"getCircularReplacer",()=>{const e=new WeakSet;return(r,n)=>{if(!(r==="socket"||r==="io"||r==="nsps")){if(typeof n=="object"&&n!==null){if(e.has(n))return;e.add(n)}return n}}});this.options={...Fo,...e}}on(e,r){this.eventEmitterClass.on(e,r)}emit(e,...r){this.socketIoClass.io&&this.socketIoClass.io.emit(e,...r)}connect(e){e===vt.MAIN&&this.findMainServer(),e===vt.NEXT&&this.findNextServer(),this.socketIoClass.doReconnect=!0,this.loggerClass.init(),this.socketIoClass.initSocketConnection(),this.socketIoClass.initSocketEvents(),this.socketIoClass.initKeepAlive()}disconnect(){this.socketIoClass.doReconnect=!1,this.socketIoClass.closeAllConnections()}clearKeepAliveInterval(){this.socketIoClass.clearKeepAliveInterval()}findMainServer(){this.servers.length?(this.mainServer=this.servers.reduce((e,r)=>r.Priority>e.Priority?r:e),this.server=this.mainServer):this.URLList.length&&(this.URL=this.URLList[0])}findNextServer(){if(this.servers.length&&this.server)if(this.server.Priority===this.mainServer.Priority){let e=this.servers.filter(r=>r.Priority!==this.mainServer.Priority&&this.alreadyAttemptedOtherServers.indexOf(r.Priority)+1===0);e.length||(this.alreadyAttemptedOtherServers=[],e=this.servers.filter(r=>r.Priority!==this.mainServer.Priority&&this.alreadyAttemptedOtherServers.indexOf(r.Priority)+1===0)),e.length&&(this.server=e.reduce((r,n)=>n.Priority>r.Priority?n:r),this.alreadyAttemptedOtherServers.push(this.server.Priority))}else this.server=this.mainServer;else if(this.URLList.length)if(this.URL===this.URLList[0]){let e=this.URLList.filter(r=>r!==this.URLList[0]&&this.alreadyAttemptedOtherServers.indexOf(r)+1===0);e.length||(this.alreadyAttemptedOtherServers=[],e=this.URLList.filter(r=>r!==this.URLList[0]&&this.alreadyAttemptedOtherServers.indexOf(r)+1===0)),e.length&&(this.URL=e[0],this.alreadyAttemptedOtherServers.push(this.URL))}else this.URL=this.URLList[0]}async init(){const e=await this.authClass.login();return e&&this.authClass.onLoginResponse(e),this.loggerClass.sdkInitializedLog(),!0}}exports.CallStatusEnum=Er;exports.CallTypeEnum=Ar;exports.ConnectionStatusEnum=dt;exports.DialerTypeEnum=Tr;exports.DirectionEnum=Nr;exports.DoNotCallMeStatusCodeEnum=Or;exports.EventsEnum=z;exports.ExtensionEventReasonEnum=Re;exports.ExtensionHangupCauseEnum=xr;exports.LoginType=st;exports.QueueEventReasonEnum=Rr;exports.ServerListenerEventsEnum=Ie;exports.default=$o;
19
+ `,102:"\f",114:"\r"},X=function(){throw A=q=null,SyntaxError()},et=function(){for(var R,U,I,F,N,D=q,P=D.length;P>A;)switch(N=D.charCodeAt(A)){case 9:case 10:case 13:case 32:A++;break;case 123:case 125:case 91:case 93:case 58:case 44:return R=B?D.charAt(A):D[A],A++,R;case 34:for(R="@",A++;P>A;)if(N=D.charCodeAt(A),32>N)X();else if(N==92)switch(N=D.charCodeAt(++A)){case 92:case 34:case 47:case 98:case 116:case 110:case 102:case 114:R+=$[N],A++;break;case 117:for(U=++A,I=A+4;I>A;A++)N=D.charCodeAt(A),N>=48&&57>=N||N>=97&&102>=N||N>=65&&70>=N||X();R+=j("0x"+D.slice(U,A));break;default:X()}else{if(N==34)break;for(N=D.charCodeAt(A),U=A;N>=32&&N!=92&&N!=34;)N=D.charCodeAt(++A);R+=D.slice(U,A)}if(D.charCodeAt(A)==34)return A++,R;X();default:if(U=A,N==45&&(F=!0,N=D.charCodeAt(++A)),N>=48&&57>=N){for(N==48&&(N=D.charCodeAt(A+1),N>=48&&57>=N)&&X(),F=!1;P>A&&(N=D.charCodeAt(A),N>=48&&57>=N);A++);if(D.charCodeAt(A)==46){for(I=++A;P>I&&(N=D.charCodeAt(I),N>=48&&57>=N);I++);I==A&&X(),A=I}if(N=D.charCodeAt(A),N==101||N==69){for(N=D.charCodeAt(++A),(N==43||N==45)&&A++,I=A;P>I&&(N=D.charCodeAt(I),N>=48&&57>=N);I++);I==A&&X(),A=I}return+D.slice(U,A)}if(F&&X(),D.slice(A,A+4)=="true")return A+=4,!0;if(D.slice(A,A+5)=="false")return A+=5,!1;if(D.slice(A,A+4)=="null")return A+=4,null;X()}return"$"},Ot=function(R){var U,I;if(R=="$"&&X(),typeof R=="string"){if((B?R.charAt(0):R[0])=="@")return R.slice(1);if(R=="["){for(U=[];R=et(),R!="]";I||(I=!0))I&&(R==","?(R=et(),R=="]"&&X()):X()),R==","&&X(),U.push(Ot(R));return U}if(R=="{"){for(U={};R=et(),R!="}";I||(I=!0))I&&(R==","?(R=et(),R=="}"&&X()):X()),(R==","||typeof R!="string"||(B?R.charAt(0):R[0])!="@"||et()!=":")&&X(),U[R.slice(1)]=Ot(et());return U}X()}return R},Be=function(R,U,I){var F=_e(R,U,I);F===h?delete R[U]:R[U]=F},_e=function(R,U,I){var F,N=R[U];if(typeof N=="object"&&N)if(d.call(N)==g)for(F=N.length;F--;)Be(N,F,I);else u(N,function(D){Be(N,D,I)});return I.call(R,U,N)};l.parse=function(R,U){var I,F;return A=0,q=""+R,I=Ot(et()),et()!="$"&&X(),A=q=null,U&&d.call(U)==a?_e((F={},F[""]=I,F),"",U):I}}}})(this)},{}],48:[function(t,e){function r(n,o){var i=[];o=o||0;for(var u=o||0;u<n.length;u++)i[u-o]=n[u];return i}e.exports=r},{}]},{},[1])(1)}const Mo=Object.freeze(Object.defineProperty({__proto__:null,default:jo},Symbol.toStringTag,{value:"Module"})),qo=Object.assign({"./v1_3_7.js":Mo}),zo=/v\d+_\d+_\d+/;function Xo(t){return typeof t=="function"}const ve=Object.entries(qo).reduce((t,e)=>{var o;const r=e[1].default,n=(o=e[0].match(zo))==null?void 0:o[0];return Xo(r)&&n&&(t[n]=r()),t},{}),Sr=t=>{if(t in ve)return ve[t];throw new Error(`Socket version ${t} not found`)},Wo=(t,...e)=>Sr(t)(...e),Ko={...ve,getSocketVersion:Sr,makeSocketVersion:Wo};var Er=(t=>(t.RINGING="Ringing",t.TALKING="Talking",t.DIALING="Dialing",t.HOLD="Hold",t))(Er||{}),Ar=(t=>(t.INCOMING="Incoming",t.OUTGOING="Outgoing",t))(Ar||{}),dt=(t=>(t.CONNECTED="connected",t.DISCONNECTED="disconnected",t.TRYING_TO_CONNECT="tryingToConnect",t))(dt||{}),Tr=(t=>(t.AUTOMATIC="Automatic",t.IVR="IVR",t))(Tr||{}),Nr=(t=>(t.INCOMINC="Incoming",t.OUTGOING="Outgoing",t.SPY="Spy",t.CLICK2CALL="Click2Call",t))(Nr||{}),Or=(t=>(t.RESPONSE_FROM_API_VALID="RESPONSE_FROM_API_VALID",t.RESPONSE_FROM_API_INVALID="RESPONSE_FROM_API_INVALID",t))(Or||{}),z=(t=>(t.ALL_DIALER_STATUS="AllDialersStatus",t.ALL_EXTENSION_STATUS="AllExtensionsStatus",t.ALL_USERS_STATUS="AllUsersStatus",t.CONNECT="connect",t.DISCONNECT="disconnect",t.CONNECT_ERROR_EVENT="connect_error",t.EXTENSION_EVENT="ExtensionEvent",t.KEEP_ALIVE="keepalive",t.KEEP_ALIVE_RESPONSE="keepaliveResponse",t.LOGIN_STATUS="loginStatus",t.LOGIN_SUCCESS="loginSuccess",t.QUEUE_EVENT="QueueEvent",t.ONLINE_STATUS_EVENT="onlineStatusEvent",t.DIALER_EVENT="DialerEvent",t.EXTENSIONS_UPDATED="ExtensionsUpdated",t))(z||{}),Re=(t=>(t.NEWCALL="NEWCALL",t.ANSWER="ANSWER",t.HOLD="HOLD",t.UNHOLD="UNHOLD",t.HANGUP="HANGUP",t.USER_STATUS_UPDATE="userStatusUpdate",t))(Re||{}),xr=(t=>(t.NORMAL_HANGUP="Normal hangup",t.USER_BUSY="User busy",t.CALL_REJECTED="Call Rejected",t.UNALLOCATED_NUMBER="Unallocated (unassigned) number",t.UNKNOWN="Unknown",t.NO_USER_RESPONDING="No user responding",t.USER_ALERTING="User alerting, no answer",t.ANSWERED_ELSEWHERE="Answered elsewhere",t))(xr||{}),Rr=(t=>(t.ANSWER="ANSWER",t.ABANDONED="ABANDONED",t.EXIT="EXIT",t.JOIN="JOIN",t))(Rr||{});class ce{static mapExtensionEvent(e){var u,h;const r=e.reason;let n,o;e.data.currentCall&&(o=this.mapExtensionCall(e,e.data.currentCall));const i=this.mapExtensionData(e,e.data);return r===Re.HANGUP?n={...e,reason:r,data:{...i,currentCall:o?{...o,duration:o.callAnswered_UTC_CLIENT?Date.now()-o.callAnswered_UTC_CLIENT:0}:void 0,calls:(u=e.data.calls)==null?void 0:u.map(d=>{const c=this.mapExtensionCall(e,d);return{...c,duration:c.callAnswered_UTC_CLIENT?Date.now()-c.callAnswered_UTC_CLIENT:0}})}}:n={...e,data:{...i,currentCall:o,calls:(h=e.data.calls)==null?void 0:h.map(d=>this.mapExtensionCall(e,d))},reason:r},n}static mapAllExtensionStatus(e){return{...e,extensions:e.extensions.map(r=>{var n;return{...this.mapExtensionData(e,r),currentCall:r.currentCall?this.mapExtensionCall(e,r.currentCall):void 0,calls:(n=r.calls)==null?void 0:n.map(o=>this.mapExtensionCall(e,o))}})}}static mapExtensionData(e,r){return this.configureUTCForObject(r,[{key:"lastAnsweredCallEventEpoch",format:"sec"},{key:"lastCallEventEpoch",format:"sec"},{key:"lastHangupCallEpoch",format:"sec"},{key:"representativeUpdated",format:"ms"}],e.servertime,e.servertimeoffset)}static mapExtensionCall(e,r){return this.configureUTCForObject(r,[{key:"callAnswered",format:"sec"},{key:"callStarted",format:"sec"}],e.servertime,e.servertimeoffset)}static mapQueueEvent(e){var r;return{...e,data:{...e.data,Calls:(r=e.data.Calls)==null?void 0:r.map(n=>this.configureUTCForObject(n,[{key:"JoinTimeStamp",format:"sec"}],e.servertime,e.servertimeoffset))}}}static assignProperty(e,r,n){e[r]=n}static configureUTCForObject(e,r,n,o){const i=(n-o*60)*1e3,u=Date.now()-i,h={};return r.forEach(d=>{const c=e[d.key],l=d.key;if(c!==0&&typeof c=="number"&&!isNaN(c)){let p=c;d.format==="ms"&&(p=Math.floor(p/1e3));const a=(p-o*60)*1e3;this.assignProperty(h,`${l}_UTC`,a),this.assignProperty(h,`${l}_UTC_CLIENT`,a+u)}else this.assignProperty(h,`${l}_UTC`,0),this.assignProperty(h,`${l}_UTC_CLIENT`,0)}),{...e,...h}}}var Ie=(t=>(t.UPDATE_MONITORED_EXTENSIONS="updateMonitoredExtensions",t.KEEP_ALIVE="keepAlive",t))(Ie||{});class Ho{constructor(e){H(this,"io");H(this,"ioFunction");H(this,"lastEventTimestamp",new Date().getTime());H(this,"doReconnect",!0);H(this,"keepAliveInterval");H(this,"keepReconnectInterval");H(this,"connected",!1);this.eventsSdkClass=e,this.eventsSdkClass=e}getSocketIoFunction(e){const r=e.split("v="),n="v".concat(r[r.length-1]).replaceAll(".","_");this.ioFunction=Ko.getSocketVersion(n)}initSocketConnection(){const e=this.eventsSdkClass.authClass.token,r=this.eventsSdkClass.options.protocol,n=this.eventsSdkClass.server;try{const o=n?n.Domain:this.eventsSdkClass.URL,i=n?`${r}://${o}`:this.eventsSdkClass.URL;this.eventsSdkClass.eventEmitterClass.emit(z.ONLINE_STATUS_EVENT,{attemptToConnect:i,connectionStatus:dt.TRYING_TO_CONNECT});const u={reconnection:!1,upgrade:!1,transports:["websocket"],forceNew:!0,query:{token:e},timeout:this.eventsSdkClass.options.timeout};if(e&&(u.query={token:e}),this.ioFunction&&i)this.io=this.ioFunction(i,u),this.eventsSdkClass.loggerClass.log({Message:`${this.eventsSdkClass.options.loggerConfig.system} tries to connect to WS server ${o}`,ActionName:at.WSCONNECT,isShowClient:!1,Status:"Switching Protocols",StatusCode:101,Level:tt.INFO,LogType:ct.INFO});else throw new Error("Socket server url no defined")}catch(o){this.eventsSdkClass.loggerClass.log({Message:`${o}`,ActionName:at.WSCONNECT,isShowClient:!1,Status:"Connection error",StatusCode:500,Level:tt.ERROR,LogType:ct.ERROR})}}clearKeepAliveInterval(){this.keepAliveInterval&&clearInterval(this.keepAliveInterval)}initKeepAlive(){this.clearKeepAliveInterval(),this.keepAliveInterval=setInterval(async()=>{if(new Date().getTime()>this.lastEventTimestamp+this.eventsSdkClass.options.keepAliveTimeout&&this.io&&this.eventsSdkClass.authClass.token){this.eventsSdkClass.emit(Ie.KEEP_ALIVE,this.eventsSdkClass.authClass.token),this.eventsSdkClass.loggerClass.log({Message:`Keep alive event emitted with this token: ${this.eventsSdkClass.authClass.token}`,ActionName:at.WSCONNECT,isShowClient:!1,Level:tt.INFO,LogType:ct.INFO});return}},this.eventsSdkClass.options.keepAliveTimeout)}closeAllConnections(){var e;this.io&&(this.io.close(),(e=this.io)==null||e.disconnect(),this.io=void 0),It.clearSessionStorage()}initSocketEvents(){this.io&&this.io.on(z.LOGIN_SUCCESS,e=>this.onLoginSuccessEvent(e)).on(z.QUEUE_EVENT,e=>this.onQueueEvent(e)).on(z.EXTENSION_EVENT,e=>this.onExtensionEvent(e)).on(z.DIALER_EVENT,e=>this.onDialerEvent(e)).on(z.LOGIN_STATUS,e=>this.onLoginStatusEvent(e)).on(z.ALL_EXTENSION_STATUS,e=>this.onAllExtensionStatus(e)).on(z.ALL_DIALER_STATUS,e=>this.onAllDialerStatus(e)).on(z.KEEP_ALIVE_RESPONSE,e=>this.onKeepAliveResponse(e)).on(z.EXTENSIONS_UPDATED,e=>this.onExtensionsUpdatedEvent(e)).on(z.CONNECT,()=>this.onConnect()).on(z.DISCONNECT,e=>this.onDisconnect(e)).on(z.CONNECT_ERROR_EVENT,e=>this.onConnectError(e))}onLoginSuccessEvent(e){this.eventsSdkClass.eventEmitterClass.emit(z.LOGIN_SUCCESS,e)}onQueueEvent(e){this.eventsSdkClass.eventEmitterClass.emit(z.QUEUE_EVENT,ce.mapQueueEvent(e))}onExtensionEvent(e){const r=ce.mapExtensionEvent(e);r&&this.eventsSdkClass.eventEmitterClass.emit(z.EXTENSION_EVENT,r)}onDialerEvent(e){this.eventsSdkClass.eventEmitterClass.emit(z.DIALER_EVENT,e)}onLoginStatusEvent(e){this.eventsSdkClass.eventEmitterClass.emit(z.LOGIN_STATUS,e)}onAllExtensionStatus(e){const r=ce.mapAllExtensionStatus(e);this.eventsSdkClass.eventEmitterClass.emit(z.ALL_EXTENSION_STATUS,r)}onAllDialerStatus(e){this.eventsSdkClass.eventEmitterClass.emit(z.ALL_DIALER_STATUS,e)}onKeepAliveResponse(e){if(e.errorCode){this.initSocketConnection();return}this.eventsSdkClass.loggerClass.log({Message:`Keep alive response: ${e}`,ActionName:at.WSCONNECT,isShowClient:!1,Status:"Successful",StatusCode:200,Level:tt.INFO,LogType:ct.INFO}),this.connected?this.lastEventTimestamp=new Date().getTime():this.initSocketConnection()}onExtensionsUpdatedEvent(e){this.eventsSdkClass.eventEmitterClass.emit(z.EXTENSIONS_UPDATED,e)}onConnect(){this.keepReconnectInterval&&clearInterval(this.keepReconnectInterval),this.connected=!0,this.eventsSdkClass.eventEmitterClass.emit(z.ONLINE_STATUS_EVENT,{connectionStatus:dt.CONNECTED}),this.eventsSdkClass.loggerClass.log({Message:`Sdk connected to the socket server ${this.eventsSdkClass.server&&this.eventsSdkClass.server.Domain?this.eventsSdkClass.server.Domain:this.eventsSdkClass.URL}`,ActionName:at.WSCONNECT,isShowClient:!1,Status:"Connection established",StatusCode:200,Level:tt.INFO,LogType:ct.INFO})}onDisconnect(e){this.connected=!1,this.closeAllConnections(),this.eventsSdkClass.eventEmitterClass.emit(z.ONLINE_STATUS_EVENT,{connectionStatus:this.doReconnect?dt.TRYING_TO_CONNECT:dt.DISCONNECTED}),this.eventsSdkClass.loggerClass.log({Message:`Sdk disconnected from the socket server ${this.eventsSdkClass.server&&this.eventsSdkClass.server.Domain?this.eventsSdkClass.server.Domain:this.eventsSdkClass.URL} (${e})`,ActionName:at.WSCONNECT,isShowClient:!1,Status:"Connection closed",StatusCode:200,Level:tt.INFO,LogType:ct.INFO}),this.doReconnect&&this.eventsSdkClass.connect(vt.NEXT)}onConnectError(e){this.eventsSdkClass.eventEmitterClass.emit(z.ONLINE_STATUS_EVENT,{connectionStatus:this.doReconnect?dt.TRYING_TO_CONNECT:dt.DISCONNECTED}),this.eventsSdkClass.loggerClass.log({Message:`Sdk tries to connect to the socket server ${this.eventsSdkClass.URL} but error (${e})`,ActionName:at.WSCONNECT,isShowClient:!1,Status:"Connection attempt error",StatusCode:500,Level:tt.ERROR,LogType:ct.ERROR}),setTimeout(()=>{this.eventsSdkClass.connect(vt.NEXT)},this.eventsSdkClass.options.reconnectionDelay)}}class Jo{constructor(e){H(this,"storageLogger");this.eventsSdkClass=e,this.eventsSdkClass=e}init(){if(!this.eventsSdkClass.options.useLogger)return;if(this.eventsSdkClass.options.storageLoggerInstance){this.storageLogger=this.eventsSdkClass.options.storageLoggerInstance;return}let e;this.eventsSdkClass.options.loggerSocketConnection&&(e=this.eventsSdkClass.options.loggerSocketConnection),this.eventsSdkClass.socketIoClass.ioFunction&&!e&&(e=this.eventsSdkClass.socketIoClass.ioFunction(this.eventsSdkClass.options.loggerServer,this.eventsSdkClass.options.loggerConnectOptions)),e&&(this.storageLogger=new Do({socket:e,loggerOptions:this.eventsSdkClass.options.loggerConfig}))}log(e){this.storageLogger?e.Level===tt.INFO?this.storageLogger.log(e):e.Level===tt.ERROR&&this.storageLogger.error(e):e.Level===tt.INFO?console.log(e):e.Level===tt.ERROR&&console.error(e)}sdkInitializedLog(){const e={...this.eventsSdkClass.options,token:"CENSORED",password:"CENSORED"};this.log({Message:"Sdk initialized with provided options",Body:JSON.stringify(e,this.eventsSdkClass.getCircularReplacer()),ActionName:at.WSCONNECT,isShowClient:!1,Status:"Sdk initialized",StatusCode:200,Level:tt.INFO,LogType:ct.INFO})}}class Vo{constructor(e){H(this,"listeners",{[z.ALL_EXTENSION_STATUS]:[],[z.ALL_DIALER_STATUS]:[],[z.ALL_USERS_STATUS]:[],[z.QUEUE_EVENT]:[],[z.EXTENSION_EVENT]:[],[z.DIALER_EVENT]:[],[z.LOGIN_SUCCESS]:[],[z.LOGIN_STATUS]:[],[z.KEEP_ALIVE_RESPONSE]:[],[z.ONLINE_STATUS_EVENT]:[],[z.EXTENSIONS_UPDATED]:[]});H(this,"allListeners",[]);this.eventsSdkClass=e,this.eventsSdkClass=e}on(e,r){e==="*"?this.allListeners.push(r):this.listeners[e].push(r)}off(e,r){if(e==="*")this.allListeners=this.allListeners.filter(n=>n!==r);else{const o=this.listeners[e].filter(i=>i!==r);this.listeners={...this.listeners,[e]:o}}}emit(e,r){this.eventsSdkClass.socketIoClass.lastEventTimestamp=new Date().getTime(),this.listeners[e].forEach(o=>o({name:e,data:r}));const n={name:e,data:r};this.allListeners.forEach(o=>o(n))}}class $o{constructor(e){H(this,"options");H(this,"servers",[]);H(this,"URLList",[]);H(this,"server");H(this,"URL");H(this,"socket");H(this,"mainServer");H(this,"alreadyAttemptedOtherServers",[]);H(this,"authClass",new Po(this));H(this,"socketIoClass",new Ho(this));H(this,"loggerClass",new Jo(this));H(this,"eventEmitterClass",new Vo(this));H(this,"getCircularReplacer",()=>{const e=new WeakSet;return(r,n)=>{if(!(r==="socket"||r==="io"||r==="nsps")){if(typeof n=="object"&&n!==null){if(e.has(n))return;e.add(n)}return n}}});this.options={...Fo,...e}}on(e,r){this.eventEmitterClass.on(e,r)}emit(e,...r){this.socketIoClass.io&&this.socketIoClass.io.emit(e,...r)}connect(e){e===vt.MAIN&&this.findMainServer(),e===vt.NEXT&&this.findNextServer(),this.socketIoClass.doReconnect=!0,this.loggerClass.init(),this.socketIoClass.initSocketConnection(),this.socketIoClass.initSocketEvents(),this.socketIoClass.initKeepAlive()}disconnect(){this.socketIoClass.doReconnect=!1,this.socketIoClass.closeAllConnections()}clearKeepAliveInterval(){this.socketIoClass.clearKeepAliveInterval()}findMainServer(){this.servers.length?(this.mainServer=this.servers.reduce((e,r)=>r.Priority>e.Priority?r:e),this.server=this.mainServer):this.URLList.length&&(this.URL=this.URLList[0])}findNextServer(){if(this.servers.length&&this.server)if(this.server.Priority===this.mainServer.Priority){let e=this.servers.filter(r=>r.Priority!==this.mainServer.Priority&&this.alreadyAttemptedOtherServers.indexOf(r.Priority)+1===0);e.length||(this.alreadyAttemptedOtherServers=[],e=this.servers.filter(r=>r.Priority!==this.mainServer.Priority&&this.alreadyAttemptedOtherServers.indexOf(r.Priority)+1===0)),e.length&&(this.server=e.reduce((r,n)=>n.Priority>r.Priority?n:r),this.alreadyAttemptedOtherServers.push(this.server.Priority))}else this.server=this.mainServer;else if(this.URLList.length)if(this.URL===this.URLList[0]){let e=this.URLList.filter(r=>r!==this.URLList[0]&&this.alreadyAttemptedOtherServers.indexOf(r)+1===0);e.length||(this.alreadyAttemptedOtherServers=[],e=this.URLList.filter(r=>r!==this.URLList[0]&&this.alreadyAttemptedOtherServers.indexOf(r)+1===0)),e.length&&(this.URL=e[0],this.alreadyAttemptedOtherServers.push(this.URL))}else this.URL=this.URLList[0]}async init(){const e=await this.authClass.login();return e&&this.authClass.onLoginResponse(e),this.loggerClass.sdkInitializedLog(),!0}getCurrentMonitorServer(){return this.server}}exports.CallStatusEnum=Er;exports.CallTypeEnum=Ar;exports.ConnectionStatusEnum=dt;exports.DialerTypeEnum=Tr;exports.DirectionEnum=Nr;exports.DoNotCallMeStatusCodeEnum=Or;exports.EventsEnum=z;exports.ExtensionEventReasonEnum=Re;exports.ExtensionHangupCauseEnum=xr;exports.LoginType=st;exports.QueueEventReasonEnum=Rr;exports.ServerListenerEventsEnum=Ie;exports.default=$o;
20
20
  //# sourceMappingURL=voicenter-events-sdk.cjs.js.map