@nethesis/phone-island 0.15.2 → 0.15.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/App.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("./node_modules/tslib/tslib.es6.js"),n=require("react"),t=require("./components/Events.js"),s=require("./components/Socket.js"),i=require("./components/WebRTC.js"),o=require("./components/Island.js"),a=require("./components/RestAPI.js"),r=require("./utils/customHooks/useEventListener.js"),l=require("./utils/genericFunctions/eventDispatch.js"),u=require("./utils/genericFunctions/localStorage.js"),d=require("./store/index.js"),c=require("./services/user.js");require("./node_modules/react-redux/es/index.js"),require("./node_modules/@fortawesome/react-fontawesome/index.es.js"),require("./node_modules/i18next/dist/esm/i18next.js"),require("./node_modules/react-tooltip/dist/react-tooltip.min.mjs.js");var p=require("./node_modules/js-base64/base64.mjs.js"),h=require("./workers/wake_up.js"),v=require("./lib/i18n.js");require("./node_modules/react-tooltip/dist/react-tooltip.min.css.js");var f=require("./lib/webrtc/messages.js"),g=require("./lib/darkTheme.js"),m=require("./utils/genericFunctions/isEmpty.js"),E=require("./utils/genericFunctions/checkConnection.js"),I=require("./utils/genericFunctions/isBackCallVisible.js"),L=require("./node_modules/react-redux/es/components/Provider.js");function S(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}require("./node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js"),require("./node_modules/react-redux/node_modules/react-is/index.js"),require("./node_modules/react-redux/es/components/Context.js");var w=S(n),b=function(S){var b=S.dataConfig,y=S.showAlways,D=void 0!==y&&y,U=S.uaType,j=p.Base64.atob(b||"").split(":"),q=j[0],k=j[1],C=j[2],_=j[3],x=j[4],A=j[5],N=j[6],P=n.useState(!1),T=P[0],V=P[1],O=n.useState(!1),R=O[0],Q=O[1],z=n.useState(!1),$=z[0],F=z[1];n.useEffect((function(){var e=new Worker(h.default,{type:"module"});return e.onmessage=function(e){"wakeup"===e.data&&V(!0)},function(){e.terminate()}}),[]),n.useEffect((function(){$&&R&&(V(!1),Q(!1),F(!1))}),[$,R]),r.useEventListener("phone-island-expand",(function(){d.store.dispatch.island.toggleIsOpen(!0),l.eventDispatch("phone-island-expanded",{})})),r.useEventListener("phone-island-compress",(function(){d.store.dispatch.island.toggleIsOpen(!1),l.eventDispatch("phone-island-compressed",{})})),r.useEventListener("phone-island-call-keypad-close",(function(){d.store.dispatch.island.setIslandView("call"),l.eventDispatch("phone-island-call-keypad-closed",{})})),r.useEventListener("phone-island-call-transfer-close",(function(){d.store.dispatch.island.setIslandView("call"),l.eventDispatch("phone-island-call-transfer-closed",{})})),r.useEventListener("phone-island-recording-close",(function(){d.store.dispatch.island.setIslandView(null),l.eventDispatch("phone-island-recording-closed",{})})),r.useEventListener("phone-island-audio-player-close",(function(){d.store.dispatch.island.setIslandView(null),l.eventDispatch("phone-island-audio-player-closed",{})})),r.useEventListener("phone-island-detach",(function(e){f.detach(),l.eventDispatch("phone-island-detached",{})})),r.useEventListener("phone-island-audio-input-change",(function(e){u.setJSONItem("phone-island-audio-input-device",{deviceId:e.deviceId}),l.eventDispatch("phone-island-audio-input-changed",{})})),r.useEventListener("phone-island-video-input-change",(function(e){u.setJSONItem("phone-island-video-input-device",{deviceId:e.deviceId}),l.eventDispatch("phone-island-video-input-changed",{})}));var M=n.useState(!0),W=M[0],B=M[1],J=n.useState(!0),H=J[0],G=J[1];n.useEffect((function(){W&&(v.initI18n(),e.__awaiter(void 0,void 0,void 0,(function(){var n,t,s,i;return e.__generator(this,(function(e){switch(e.label){case 0:return e.trys.push([0,2,,3]),[4,c.getParamUrl()];case 1:return n=e.sent(),t=(null==n?void 0:n.url)||"",s=t&&""!==t.trim(),d.store.dispatch.paramUrl.setParamUrl({url:t,onlyQueues:(null==n?void 0:n.only_queues)||!1,hasValidUrl:s}),[3,3];case 2:return i=e.sent(),console.error("Error fetching URL parameter:",i),d.store.dispatch.paramUrl.setParamUrl({url:"",onlyQueues:!1,hasValidUrl:!1}),[3,3];case 3:return[2]}}))})),B(!1))}),[W]),r.useEventListener("phone-island-audio-output-change",(function(e){H||(d.store.dispatch.island.setIslandView(null),d.store.dispatch.island.toggleAvoidToShow(!0),l.eventDispatch("phone-island-call-start",{number:"*43"})),setTimeout((function(){var n=d.store.getState().player.remoteAudio;null==n||n.current.setSinkId(e.deviceId).then((function(){console.info("Default audio output device change with success!"),u.setJSONItem("phone-island-audio-output-device",{deviceId:e.deviceId}),l.eventDispatch("phone-island-audio-output-changed",{}),l.eventDispatch("phone-island-call-end",{}),d.store.dispatch.island.toggleAvoidToShow(!1)})).catch((function(e){console.error("Default audio output device change error:",e),l.eventDispatch("phone-island-call-end",{}),d.store.dispatch.island.toggleAvoidToShow(!1)}))}),500)})),r.useEventListener("phone-island-presence-change",(function(e){c.changeOperatorStatus(e),l.eventDispatch("phone-island-presence-changed",{})})),r.useEventListener("phone-island-view-changed",(function(e){var n=null==e?void 0:e.viewType;d.store.dispatch.island.setIslandView(n)}));var K=d.store.getState().player.remoteAudio;n.useEffect((function(){var e;if(H&&K){var n=null===(e=u.getJSONItem("phone-island-audio-output-device"))||void 0===e?void 0:e.deviceId;l.eventDispatch("phone-island-audio-output-change",{deviceId:n}),G(!1)}}),[H,K]),n.useEffect((function(){g.checkDarkTheme()}),[]),r.useEventListener("phone-island-theme-change",(function(e){g.setTheme(null==e?void 0:e.selectedTheme)})),r.useEventListener("phone-island-default-device-change",(function(e){d.store.dispatch.currentUser.updateCurrentDefaultDevice(null==e?void 0:e.deviceInformationObject),l.eventDispatch("phone-island-default-device-changed",{})})),r.useEventListener("phone-island-alert",(function(e){d.store.dispatch.alerts.setAlert(e.toString())})),r.useEventListener("phone-island-check-connection",(function(){E.checkInternetConnection().then((function(e){e?l.eventDispatch("phone-island-internet-connected",{}):l.eventDispatch("phone-island-internet-disconnected",{})}))})),n.useEffect((function(){var e=setInterval((function(){E.checkInternetConnection().then((function(e){e?l.eventDispatch("phone-island-internet-connected",{}):l.eventDispatch("phone-island-internet-disconnected",{})}))}),5e3);return function(){return clearInterval(e)}}),[]),r.useEventListener("phone-island-main-presence",(function(e){var n,t,s,i,o=null===(n=d.store.getState().currentUser)||void 0===n?void 0:n.username,a=d.store.getState().currentUser,r=null==a?void 0:a.mainPresence;if(void 0!==o&&""!==o&&!m.isEmpty(e[o])&&void 0!==(null===(t=e[o])||void 0===t?void 0:t.mainPresence)){var u=null===(s=e[o])||void 0===s?void 0:s.mainPresence;d.store.dispatch.currentUser.updateMainPresence(null===(i=e[o])||void 0===i?void 0:i.mainPresence),"online"===u&&"online"!==r&&l.eventDispatch("phone-island-call-ended",{})}})),r.useEventListener("phone-island-call-status",(function(){var e=d.store.getState().currentCall;console.log("Call status debug informations: ",e)}));var X=function(e,n,t,s){var i=d.store.getState().paramUrl;if(null==i?void 0:i.hasValidUrl){var o=i.url||"";if(o){var a=d.store.getState().island.urlOpened,r=i.openParamUrlType;if(!a||"button"===r){var u=o;u.includes("$CALLER_NUMBER")&&e&&(u=u.replace(/\$CALLER_NUMBER/g,encodeURIComponent(e))),u.includes("$CALLER_NAME")&&n&&(u=u.replace(/\$CALLER_NAME/g,encodeURIComponent(n))),u.includes("$UNIQUEID")&&s&&(u=u.replace(/\$UNIQUEID/g,encodeURIComponent(s))),u.includes("$CALLED")&&t&&(u=u.replace(/\$CALLED/g,encodeURIComponent(t))),u.includes("{phone}")&&e&&(u=u.replace(/\{phone\}/g,encodeURIComponent(e)));var c=u.startsWith("http")?u:"https://".concat(u);if("mobile"!==U){var p=window.open("about:blank","_blank");p&&(p.location.href=c,d.store.dispatch.island.setUrlOpened(!0))}else l.eventDispatch("phone-island-url-parameter-opened-external",{formattedUrl:c})}}}};return r.useEventListener("phone-island-already-opened-external-page",(function(){d.store.dispatch.island.setUrlOpened(!0)})),r.useEventListener("phone-island-url-parameter-opened",(function(e){var n=d.store.getState().paramUrl;if(n.hasValidUrl&&!d.store.getState().island.urlOpened){var t=n.onlyQueues||!1;"in"===(null==e?void 0:e.direction)&&(!0===t&&!0===(null==e?void 0:e.throughQueue)?X(null==e?void 0:e.counterpartNum,null==e?void 0:e.counterpartName,null==e?void 0:e.owner,null==e?void 0:e.uniqueId):!1!==t||!0!==(null==e?void 0:e.throughTrunk)&&!0!==(null==e?void 0:e.throughQueue)||X(null==e?void 0:e.counterpartNum,null==e?void 0:e.counterpartName,null==e?void 0:e.owner,null==e?void 0:e.uniqueId))}})),r.useEventListener("phone-island-user-status",(function(){var e=d.store.getState().currentUser;console.log("User status debug informations: ",e)})),r.useEventListener("phone-island-all-users-status",(function(){var e=d.store.getState().users;console.log("Users status debug informations: ",e)})),r.useEventListener("phone-island-status",(function(){var e=d.store.getState().island;console.log("Phone island status debug informations: ",e)})),r.useEventListener("phone-island-webrtc-status",(function(){var e=d.store.getState().webrtc;console.log("Webrtc status debug informations: ",e)})),r.useEventListener("phone-island-player-status",(function(){var e=d.store.getState().player;console.log("Player status debug informations: ",e)})),r.useEventListener("phone-island-conference-status",(function(){var e=d.store.getState().conference;console.log("Webrtc status debug informations: ",e)})),r.useEventListener("phone-island-streaming-status",(function(){var e=d.store.getState().streaming;console.log("Streaming status debug informations: ",e)})),r.useEventListener("phone-island-paramurl-status",(function(){var e=d.store.getState().paramUrl;console.log("Paramurl status debug informations: ",e)})),r.useEventListener("phone-island-player-force-stop",(function(){d.store.dispatch.player.reset(),console.log("Audio player is interrupted")})),r.useEventListener("phone-island-sideview-open",(function(){d.store.dispatch.island.toggleSideViewVisible(!0),d.store.dispatch.island.setUrlOpened(!1),l.eventDispatch("phone-island-sideview-opened",{})})),r.useEventListener("phone-island-sideview-close",(function(){d.store.dispatch.island.toggleSideViewVisible(!1),l.eventDispatch("phone-island-sideview-closed",{})})),r.useEventListener("phone-island-size-change",(function(n){var t=d.store.getState().island.sideViewIsVisible,s=n.sizeInformation,i=e.__assign(e.__assign({},s),{right:t?"42px":"0px",top:I.isBackCallActive()?"40px":"0px"});l.eventDispatch("phone-island-size-changed",{sizes:i})})),r.useEventListener("phone-island-call-ended",(function(){if("online"===d.store.getState().currentUser.mainPresence){l.eventDispatch("phone-island-size-change",{sizeInformation:{width:"0px",height:"0px"}}),l.eventDispatch("phone-island-sideview-close",{}),d.store.dispatch.island.resetIslandStore()}})),r.useEventListener("phone-island-conference-list-open",(function(){d.store.dispatch.island.toggleConferenceList(!0),l.eventDispatch("phone-island-conference-list-opened",{})})),r.useEventListener("phone-island-alert-removed",(function(e){var n=d.store.getState().alerts.status.activeAlertsCount,t=d.store.getState().island,s=t.view,i=t.previousView,o=d.store.getState().conference.isActive,a=d.store.getState().alerts.data,r=d.store.getState().currentCall,u=r.incoming,c=r.outgoing,p=r.accepted,h=null==e?void 0:e.type,v=r.incoming||r.outgoing||r.accepted||""!==r.conversationId;if(!(u||c||p||n>0||"player"===s||"recorder"===s||"physicalPhoneRecorder"===s||"waitingConference"===s&&o||"transfer"===s&&o||"settings"===s&&o||"settings"===s&&("recorder"===i||"player"===i))&&0===n&&(!h||a[h]&&!a[h].active)&&!v){l.eventDispatch("phone-island-size-change",{sizeInformation:{width:"0px",height:"0px"}}),l.eventDispatch("phone-island-sideview-close",{}),d.store.dispatch.island.resetIslandStore()}})),r.useEventListener("phone-island-conference-list-close",(function(){d.store.dispatch.island.toggleConferenceList(!1),l.eventDispatch("phone-island-conference-list-closed",{})})),r.useEventListener("phone-island-conversations",(function(e){var n,t=Object.keys(e)[0];if(t===(null===(n=d.store.getState().currentUser)||void 0===n?void 0:n.username)){var s=e[t].conversations,i=d.store.getState().paramUrl,o=d.store.getState().island.urlOpened;if(!i.hasValidUrl||o)return;if("answered"===i.openParamUrlType&&s&&Object.keys(s).length>0){var a=s[Object.keys(s)[0]];if((null==a?void 0:a.connected)&&"in"===(null==a?void 0:a.direction)){var r=i.onlyQueues||!1;!0===r&&!0===(null==a?void 0:a.throughQueue)?X(a.counterpartNum,a.counterpartName,a.owner,a.uniqueId):!1!==r||!0!==(null==a?void 0:a.throughTrunk)&&!0!==(null==a?void 0:a.throughQueue)||X(a.counterpartNum,a.counterpartName,a.owner,a.uniqueId)}}}})),w.default.createElement(w.default.Fragment,null,w.default.createElement(L.default,{store:d.store},w.default.createElement(i.WebRTC,{hostName:q,sipExten:_,sipSecret:x,sipHost:A,sipPort:N,reload:T,reloadedCallback:function(){return Q(!0)},uaType:U},w.default.createElement(a.RestAPI,{hostName:q,username:k,authToken:C},w.default.createElement(s.Socket,{hostName:q,username:k,authToken:C,reload:T,reloadedCallback:function(){return F(!0)},uaType:U},w.default.createElement(t.Events,{sipHost:A},w.default.createElement(o.Island,{showAlways:D,uaType:U})))))))};b.displayName="PhoneIsland",exports.PhoneIsland=b;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("./node_modules/tslib/tslib.es6.js"),n=require("react"),t=require("./components/Events.js"),s=require("./components/Socket.js"),i=require("./components/WebRTC.js"),o=require("./components/Island.js"),a=require("./components/RestAPI.js"),r=require("./utils/customHooks/useEventListener.js"),l=require("./utils/genericFunctions/eventDispatch.js"),u=require("./utils/genericFunctions/localStorage.js"),d=require("./store/index.js"),c=require("./services/user.js");require("./node_modules/react-redux/es/index.js"),require("./node_modules/@fortawesome/react-fontawesome/index.es.js"),require("./node_modules/i18next/dist/esm/i18next.js"),require("./node_modules/react-tooltip/dist/react-tooltip.min.mjs.js");var p=require("./node_modules/js-base64/base64.mjs.js"),h=require("./workers/wake_up.js"),v=require("./lib/i18n.js");require("./node_modules/react-tooltip/dist/react-tooltip.min.css.js");var f=require("./lib/webrtc/messages.js"),g=require("./lib/darkTheme.js"),m=require("./utils/genericFunctions/isEmpty.js"),E=require("./utils/genericFunctions/checkConnection.js"),I=require("./utils/genericFunctions/isBackCallVisible.js"),L=require("./lib/phone/trunk.js"),S=require("./node_modules/react-redux/es/components/Provider.js");function w(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}require("./node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js"),require("./node_modules/react-redux/node_modules/react-is/index.js"),require("./node_modules/react-redux/es/components/Context.js");var b=w(n),U=function(w){var U=w.dataConfig,y=w.showAlways,D=void 0!==y&&y,j=w.uaType,q=p.Base64.atob(U||"").split(":"),k=q[0],C=q[1],_=q[2],T=q[3],x=q[4],N=q[5],A=q[6],P=n.useState(!1),V=P[0],O=P[1],R=n.useState(!1),Q=R[0],z=R[1],F=n.useState(!1),$=F[0],M=F[1];n.useEffect((function(){var e=new Worker(h.default,{type:"module"});return e.onmessage=function(e){"wakeup"===e.data&&O(!0)},function(){e.terminate()}}),[]),n.useEffect((function(){$&&Q&&(O(!1),z(!1),M(!1))}),[$,Q]),r.useEventListener("phone-island-expand",(function(){d.store.dispatch.island.toggleIsOpen(!0),l.eventDispatch("phone-island-expanded",{})})),r.useEventListener("phone-island-compress",(function(){d.store.dispatch.island.toggleIsOpen(!1),l.eventDispatch("phone-island-compressed",{})})),r.useEventListener("phone-island-call-keypad-close",(function(){d.store.dispatch.island.setIslandView("call"),l.eventDispatch("phone-island-call-keypad-closed",{})})),r.useEventListener("phone-island-call-transfer-close",(function(){d.store.dispatch.island.setIslandView("call"),l.eventDispatch("phone-island-call-transfer-closed",{})})),r.useEventListener("phone-island-recording-close",(function(){d.store.dispatch.island.setIslandView(null),l.eventDispatch("phone-island-recording-closed",{})})),r.useEventListener("phone-island-audio-player-close",(function(){d.store.dispatch.island.setIslandView(null),l.eventDispatch("phone-island-audio-player-closed",{})})),r.useEventListener("phone-island-detach",(function(e){f.detach(),l.eventDispatch("phone-island-detached",{})})),r.useEventListener("phone-island-audio-input-change",(function(e){u.setJSONItem("phone-island-audio-input-device",{deviceId:e.deviceId}),l.eventDispatch("phone-island-audio-input-changed",{})})),r.useEventListener("phone-island-video-input-change",(function(e){u.setJSONItem("phone-island-video-input-device",{deviceId:e.deviceId}),l.eventDispatch("phone-island-video-input-changed",{})}));var W=n.useState(!0),B=W[0],J=W[1],H=n.useState(!0),G=H[0],K=H[1];n.useEffect((function(){B&&(v.initI18n(),e.__awaiter(void 0,void 0,void 0,(function(){var n,t,s,i;return e.__generator(this,(function(e){switch(e.label){case 0:return e.trys.push([0,2,,3]),[4,c.getParamUrl()];case 1:return n=e.sent(),t=(null==n?void 0:n.url)||"",s=t&&""!==t.trim(),d.store.dispatch.paramUrl.setParamUrl({url:t,onlyQueues:(null==n?void 0:n.only_queues)||!1,hasValidUrl:s}),[3,3];case 2:return i=e.sent(),console.error("Error fetching URL parameter:",i),d.store.dispatch.paramUrl.setParamUrl({url:"",onlyQueues:!1,hasValidUrl:!1}),[3,3];case 3:return[2]}}))})),J(!1))}),[B]),r.useEventListener("phone-island-audio-output-change",(function(e){G||(d.store.dispatch.island.setIslandView(null),d.store.dispatch.island.toggleAvoidToShow(!0),l.eventDispatch("phone-island-call-start",{number:"*43"})),setTimeout((function(){var n=d.store.getState().player.remoteAudio;null==n||n.current.setSinkId(e.deviceId).then((function(){console.info("Default audio output device change with success!"),u.setJSONItem("phone-island-audio-output-device",{deviceId:e.deviceId}),l.eventDispatch("phone-island-audio-output-changed",{}),l.eventDispatch("phone-island-call-end",{}),d.store.dispatch.island.toggleAvoidToShow(!1)})).catch((function(e){console.error("Default audio output device change error:",e),l.eventDispatch("phone-island-call-end",{}),d.store.dispatch.island.toggleAvoidToShow(!1)}))}),500)})),r.useEventListener("phone-island-presence-change",(function(e){c.changeOperatorStatus(e),l.eventDispatch("phone-island-presence-changed",{})})),r.useEventListener("phone-island-view-changed",(function(e){var n=null==e?void 0:e.viewType;d.store.dispatch.island.setIslandView(n)}));var X=d.store.getState().player.remoteAudio;n.useEffect((function(){var e;if(G&&X){var n=null===(e=u.getJSONItem("phone-island-audio-output-device"))||void 0===e?void 0:e.deviceId;l.eventDispatch("phone-island-audio-output-change",{deviceId:n}),K(!1)}}),[G,X]),n.useEffect((function(){g.checkDarkTheme()}),[]),r.useEventListener("phone-island-theme-change",(function(e){g.setTheme(null==e?void 0:e.selectedTheme)})),r.useEventListener("phone-island-default-device-change",(function(e){d.store.dispatch.currentUser.updateCurrentDefaultDevice(null==e?void 0:e.deviceInformationObject),l.eventDispatch("phone-island-default-device-changed",{})})),r.useEventListener("phone-island-alert",(function(e){d.store.dispatch.alerts.setAlert(e.toString())})),r.useEventListener("phone-island-check-connection",(function(){E.checkInternetConnection().then((function(e){e?l.eventDispatch("phone-island-internet-connected",{}):l.eventDispatch("phone-island-internet-disconnected",{})}))})),n.useEffect((function(){var e=setInterval((function(){E.checkInternetConnection().then((function(e){e?l.eventDispatch("phone-island-internet-connected",{}):l.eventDispatch("phone-island-internet-disconnected",{})}))}),5e3);return function(){return clearInterval(e)}}),[]),r.useEventListener("phone-island-main-presence",(function(e){var n,t,s,i,o=null===(n=d.store.getState().currentUser)||void 0===n?void 0:n.username,a=d.store.getState().currentUser,r=null==a?void 0:a.mainPresence;if(void 0!==o&&""!==o&&!m.isEmpty(e[o])&&void 0!==(null===(t=e[o])||void 0===t?void 0:t.mainPresence)){var u=null===(s=e[o])||void 0===s?void 0:s.mainPresence;d.store.dispatch.currentUser.updateMainPresence(null===(i=e[o])||void 0===i?void 0:i.mainPresence),"online"===u&&"online"!==r&&l.eventDispatch("phone-island-call-ended",{})}})),r.useEventListener("phone-island-call-status",(function(){var e=d.store.getState().currentCall;console.log("Call status debug informations: ",e)}));var Y=function(e,n,t,s){var i=d.store.getState().paramUrl;if(null==i?void 0:i.hasValidUrl){var o=i.url||"";if(o){var a=d.store.getState().island.urlOpened,r=i.openParamUrlType;if(!a||"button"===r){var u=o;u.includes("$CALLER_NUMBER")&&e&&(u=u.replace(/\$CALLER_NUMBER/g,encodeURIComponent(e))),u.includes("$CALLER_NAME")&&n&&(u=u.replace(/\$CALLER_NAME/g,encodeURIComponent(n))),u.includes("$UNIQUEID")&&s&&(u=u.replace(/\$UNIQUEID/g,encodeURIComponent(s))),u.includes("$CALLED")&&t&&(u=u.replace(/\$CALLED/g,encodeURIComponent(t))),u.includes("{phone}")&&e&&(u=u.replace(/\{phone\}/g,encodeURIComponent(e)));var c=u.startsWith("http")?u:"https://".concat(u);if("mobile"!==j){var p=window.open("about:blank","_blank");p&&(p.location.href=c,d.store.dispatch.island.setUrlOpened(!0))}else l.eventDispatch("phone-island-url-parameter-opened-external",{formattedUrl:c})}}}};return r.useEventListener("phone-island-already-opened-external-page",(function(){d.store.dispatch.island.setUrlOpened(!0)})),r.useEventListener("phone-island-url-parameter-opened",(function(e){var n=d.store.getState().paramUrl;if(n.hasValidUrl&&!d.store.getState().island.urlOpened){var t=n.onlyQueues||!1,s=L.isFromTrunk(null==e?void 0:e.counterpartNum);d.store.dispatch.paramUrl.setThroughTrunk(s),"in"===(null==e?void 0:e.direction)&&(!0===t&&!0===(null==e?void 0:e.throughQueue)?Y(null==e?void 0:e.counterpartNum,null==e?void 0:e.counterpartName,null==e?void 0:e.owner,null==e?void 0:e.uniqueId):!1!==t||!0!==s&&!0!==(null==e?void 0:e.throughQueue)||Y(null==e?void 0:e.counterpartNum,null==e?void 0:e.counterpartName,null==e?void 0:e.owner,null==e?void 0:e.uniqueId))}})),r.useEventListener("phone-island-user-status",(function(){var e=d.store.getState().currentUser;console.log("User status debug informations: ",e)})),r.useEventListener("phone-island-all-users-status",(function(){var e=d.store.getState().users;console.log("Users status debug informations: ",e)})),r.useEventListener("phone-island-status",(function(){var e=d.store.getState().island;console.log("Phone island status debug informations: ",e)})),r.useEventListener("phone-island-webrtc-status",(function(){var e=d.store.getState().webrtc;console.log("Webrtc status debug informations: ",e)})),r.useEventListener("phone-island-player-status",(function(){var e=d.store.getState().player;console.log("Player status debug informations: ",e)})),r.useEventListener("phone-island-conference-status",(function(){var e=d.store.getState().conference;console.log("Webrtc status debug informations: ",e)})),r.useEventListener("phone-island-streaming-status",(function(){var e=d.store.getState().streaming;console.log("Streaming status debug informations: ",e)})),r.useEventListener("phone-island-paramurl-status",(function(){var e=d.store.getState().paramUrl;console.log("Paramurl status debug informations: ",e)})),r.useEventListener("phone-island-player-force-stop",(function(){d.store.dispatch.player.reset(),console.log("Audio player is interrupted")})),r.useEventListener("phone-island-sideview-open",(function(){d.store.dispatch.island.toggleSideViewVisible(!0),d.store.dispatch.island.setUrlOpened(!1),l.eventDispatch("phone-island-sideview-opened",{})})),r.useEventListener("phone-island-sideview-close",(function(){d.store.dispatch.island.toggleSideViewVisible(!1),l.eventDispatch("phone-island-sideview-closed",{})})),r.useEventListener("phone-island-size-change",(function(n){var t=d.store.getState().island.sideViewIsVisible,s=n.sizeInformation,i=e.__assign(e.__assign({},s),{right:t?"42px":"0px",top:I.isBackCallActive()?"40px":"0px"});l.eventDispatch("phone-island-size-changed",{sizes:i})})),r.useEventListener("phone-island-call-ended",(function(){if("online"===d.store.getState().currentUser.mainPresence){l.eventDispatch("phone-island-size-change",{sizeInformation:{width:"0px",height:"0px"}}),l.eventDispatch("phone-island-sideview-close",{}),d.store.dispatch.island.resetIslandStore(),d.store.dispatch.paramUrl.setThroughTrunk(!1)}})),r.useEventListener("phone-island-conference-list-open",(function(){d.store.dispatch.island.toggleConferenceList(!0),l.eventDispatch("phone-island-conference-list-opened",{})})),r.useEventListener("phone-island-alert-removed",(function(e){var n=d.store.getState().alerts.status.activeAlertsCount,t=d.store.getState().island,s=t.view,i=t.previousView,o=d.store.getState().conference.isActive,a=d.store.getState().alerts.data,r=d.store.getState().currentCall,u=r.incoming,c=r.outgoing,p=r.accepted,h=null==e?void 0:e.type,v=r.incoming||r.outgoing||r.accepted||""!==r.conversationId;if(!(u||c||p||n>0||"player"===s||"recorder"===s||"physicalPhoneRecorder"===s||"waitingConference"===s&&o||"transfer"===s&&o||"settings"===s&&o||"settings"===s&&("recorder"===i||"player"===i))&&0===n&&(!h||a[h]&&!a[h].active)&&!v){l.eventDispatch("phone-island-size-change",{sizeInformation:{width:"0px",height:"0px"}}),l.eventDispatch("phone-island-sideview-close",{}),d.store.dispatch.island.resetIslandStore()}})),r.useEventListener("phone-island-conference-list-close",(function(){d.store.dispatch.island.toggleConferenceList(!1),l.eventDispatch("phone-island-conference-list-closed",{})})),r.useEventListener("phone-island-conversations",(function(e){var n,t=Object.keys(e)[0];if(t===(null===(n=d.store.getState().currentUser)||void 0===n?void 0:n.username)){var s=e[t].conversations,i=d.store.getState().paramUrl,o=d.store.getState().island.urlOpened;if(!i.hasValidUrl||o)return;if("answered"===i.openParamUrlType&&s&&Object.keys(s).length>0){var a=s[Object.keys(s)[0]];if((null==a?void 0:a.connected)&&"in"===(null==a?void 0:a.direction)){var r=i.onlyQueues||!1,l=L.isFromTrunk(a.counterpartNum);d.store.dispatch.paramUrl.setThroughTrunk(l),!0===r&&!0===(null==a?void 0:a.throughQueue)?Y(a.counterpartNum,a.counterpartName,a.owner,a.uniqueId):!1!==r||!0!==l&&!0!==(null==a?void 0:a.throughQueue)||Y(a.counterpartNum,a.counterpartName,a.owner,a.uniqueId)}}}})),b.default.createElement(b.default.Fragment,null,b.default.createElement(S.default,{store:d.store},b.default.createElement(i.WebRTC,{hostName:k,sipExten:T,sipSecret:x,sipHost:N,sipPort:A,reload:V,reloadedCallback:function(){return z(!0)},uaType:j},b.default.createElement(a.RestAPI,{hostName:k,username:C,authToken:_},b.default.createElement(s.Socket,{hostName:k,username:C,authToken:_,reload:V,reloadedCallback:function(){return M(!0)},uaType:j},b.default.createElement(t.Events,{sipHost:N},b.default.createElement(o.Island,{showAlways:D,uaType:j})))))))};U.displayName="PhoneIsland",exports.PhoneIsland=U;
2
2
  //# sourceMappingURL=App.js.map
package/dist/App.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"App.js","sources":["../src/App.tsx"],"sourcesContent":["import React, { type FC, useState, useEffect } from 'react'\nimport { Events, Socket, WebRTC, Island, RestAPI } from './components'\nimport { Provider } from 'react-redux'\nimport { store } from './store'\nimport { Base64 } from 'js-base64'\nimport wakeUpWorker from './workers/wake_up'\nimport { initI18n } from './lib/i18n'\n\nimport 'react-tooltip/dist/react-tooltip.css'\nimport { useEventListener, eventDispatch, setJSONItem, getJSONItem } from './utils'\nimport { detach } from './lib/webrtc/messages'\nimport { checkDarkTheme, setTheme } from './lib/darkTheme'\nimport { changeOperatorStatus } from './services/user'\nimport { getParamUrl } from './services/user'\nimport { isEmpty } from './utils/genericFunctions/isEmpty'\nimport { checkInternetConnection } from './utils/genericFunctions/checkConnection'\nimport { isBackCallActive } from './utils/genericFunctions/isBackCallVisible'\n\ninterface PhoneIslandProps {\n dataConfig: string\n showAlways?: boolean\n uaType: string\n}\n\ninterface DeviceInputOutputTypes {\n deviceId: string\n}\n\nexport const PhoneIsland: FC<PhoneIslandProps> = ({\n dataConfig,\n showAlways = false,\n uaType,\n}: PhoneIslandProps) => {\n const CONFIG: string[] = Base64.atob(dataConfig || '').split(':')\n const HOST_NAME: string = CONFIG[0]\n const USERNAME: string = CONFIG[1]\n const AUTH_TOKEN: string = CONFIG[2]\n const SIP_EXTEN: string = CONFIG[3]\n const SIP_SECRET: string = CONFIG[4]\n const SIP_HOST: string = CONFIG[5]\n const SIP_PORT: string = CONFIG[6]\n\n // Initialize the state to manage the reload events\n const [reload, setReload] = useState<boolean>(false)\n const [reloadedWebRTC, setReloadedWebRTC] = useState<boolean>(false)\n const [reloadedSocket, setReloadedSocket] = useState<boolean>(false)\n\n useEffect(() => {\n const worker = new Worker(wakeUpWorker, { type: 'module' })\n worker.onmessage = (event: MessageEvent<string>) => {\n // Handle wakeup message\n if (event.data === 'wakeup') {\n setReload(true)\n }\n }\n\n return () => {\n worker.terminate()\n }\n }, [])\n\n useEffect(() => {\n if (reloadedSocket && reloadedWebRTC) {\n setReload(false)\n setReloadedWebRTC(false)\n setReloadedSocket(false)\n }\n }, [reloadedSocket, reloadedWebRTC])\n\n useEventListener('phone-island-expand', () => {\n store.dispatch.island.toggleIsOpen(true)\n eventDispatch('phone-island-expanded', {})\n })\n useEventListener('phone-island-compress', () => {\n store.dispatch.island.toggleIsOpen(false)\n eventDispatch('phone-island-compressed', {})\n })\n\n useEventListener('phone-island-call-keypad-close', () => {\n store.dispatch.island.setIslandView('call')\n eventDispatch('phone-island-call-keypad-closed', {})\n })\n useEventListener('phone-island-call-transfer-close', () => {\n store.dispatch.island.setIslandView('call')\n eventDispatch('phone-island-call-transfer-closed', {})\n })\n useEventListener('phone-island-recording-close', () => {\n store.dispatch.island.setIslandView(null)\n eventDispatch('phone-island-recording-closed', {})\n })\n useEventListener('phone-island-audio-player-close', () => {\n store.dispatch.island.setIslandView(null)\n eventDispatch('phone-island-audio-player-closed', {})\n })\n\n useEventListener('phone-island-detach', (data) => {\n detach()\n eventDispatch('phone-island-detached', {})\n })\n\n useEventListener('phone-island-audio-input-change', (data: DeviceInputOutputTypes) => {\n setJSONItem('phone-island-audio-input-device', { deviceId: data.deviceId })\n eventDispatch('phone-island-audio-input-changed', {})\n })\n\n useEventListener('phone-island-video-input-change', (data: DeviceInputOutputTypes) => {\n setJSONItem('phone-island-video-input-device', { deviceId: data.deviceId })\n eventDispatch('phone-island-video-input-changed', {})\n })\n\n const [firstRender, setFirstRender] = useState(true)\n const [firstAudioOutputInit, setFirstAudioOutputInit] = useState(true)\n\n // Initialize application on first render\n useEffect(() => {\n const initParamUrl = async () => {\n try {\n const paramUrlResponse: any = await getParamUrl()\n const url = paramUrlResponse?.url || ''\n const isValid = url && url.trim() !== ''\n\n // Save data inside the store\n store.dispatch.paramUrl.setParamUrl({\n url: url,\n onlyQueues: paramUrlResponse?.only_queues || false,\n hasValidUrl: isValid,\n })\n\n } catch (error) {\n console.error('Error fetching URL parameter:', error)\n store.dispatch.paramUrl.setParamUrl({\n url: '',\n onlyQueues: false,\n hasValidUrl: false,\n })\n }\n }\n\n if (firstRender) {\n // Initialize i18n\n initI18n()\n // Initialize param URL\n initParamUrl()\n setFirstRender(false)\n }\n }, [firstRender])\n\n useEventListener('phone-island-audio-output-change', (data: DeviceInputOutputTypes) => {\n if (!firstAudioOutputInit) {\n store.dispatch.island.setIslandView(null)\n store.dispatch.island.toggleAvoidToShow(true)\n eventDispatch('phone-island-call-start', { number: '*43' })\n }\n\n setTimeout(() => {\n const remoteAudioElement: any = store.getState().player.remoteAudio\n // set audio output\n remoteAudioElement?.current\n .setSinkId(data.deviceId)\n .then(function () {\n console.info('Default audio output device change with success!')\n // set device to localstorage\n setJSONItem('phone-island-audio-output-device', { deviceId: data.deviceId })\n\n // dispatch event\n eventDispatch('phone-island-audio-output-changed', {})\n eventDispatch('phone-island-call-end', {})\n store.dispatch.island.toggleAvoidToShow(false)\n })\n .catch(function (err) {\n console.error('Default audio output device change error:', err)\n eventDispatch('phone-island-call-end', {})\n store.dispatch.island.toggleAvoidToShow(false)\n })\n }, 500)\n })\n\n // Listen for the operator status change\n useEventListener('phone-island-presence-change', (data: any) => {\n changeOperatorStatus(data)\n eventDispatch('phone-island-presence-changed', {})\n })\n\n useEventListener('phone-island-view-changed', (data) => {\n const viewType = data?.viewType\n store.dispatch.island.setIslandView(viewType)\n })\n\n const remoteAudioElement: any = store.getState().player.remoteAudio\n\n //get output device from localstorage\n useEffect(() => {\n if (firstAudioOutputInit && remoteAudioElement) {\n const defaultAudioOutputDevice: any = getJSONItem(\n `phone-island-audio-output-device`,\n )?.deviceId\n eventDispatch('phone-island-audio-output-change', {\n deviceId: defaultAudioOutputDevice,\n })\n setFirstAudioOutputInit(false)\n }\n }, [firstAudioOutputInit, remoteAudioElement])\n\n useEffect(() => {\n checkDarkTheme()\n }, [])\n\n useEventListener('phone-island-theme-change', (theme: any) => {\n setTheme(theme?.selectedTheme)\n })\n\n useEventListener('phone-island-default-device-change', (data) => {\n store.dispatch.currentUser.updateCurrentDefaultDevice(data?.deviceInformationObject)\n eventDispatch('phone-island-default-device-changed', {})\n })\n\n useEventListener('phone-island-alert', (alertType: any) => {\n store.dispatch.alerts.setAlert(alertType.toString())\n })\n\n // Manually check if internet connection is enabled or not\n useEventListener('phone-island-check-connection', () => {\n checkInternetConnection().then((internetIsActive) => {\n if (internetIsActive) {\n eventDispatch('phone-island-internet-connected', {})\n } else {\n eventDispatch('phone-island-internet-disconnected', {})\n }\n })\n })\n\n // Check internet connection every 5 seconds\n useEffect(() => {\n const intervalId = setInterval(() => {\n checkInternetConnection().then((internetIsActive) => {\n if (internetIsActive) {\n eventDispatch('phone-island-internet-connected', {})\n } else {\n eventDispatch('phone-island-internet-disconnected', {})\n }\n })\n }, 5000)\n\n return () => clearInterval(intervalId)\n }, [])\n\n useEventListener('phone-island-main-presence', (data: any) => {\n const currentUsernameInformation: any = store.getState().currentUser?.username\n const currentUserObject: any = store.getState().currentUser\n let mainPresenceValueBeforeUpdate = currentUserObject?.mainPresence\n if (\n currentUsernameInformation !== undefined &&\n currentUsernameInformation !== '' &&\n !isEmpty(data[currentUsernameInformation]) &&\n data[currentUsernameInformation]?.mainPresence !== undefined\n ) {\n let newMainPresenceValue = data[currentUsernameInformation]?.mainPresence\n store.dispatch.currentUser.updateMainPresence(data[currentUsernameInformation]?.mainPresence)\n let mainPresenceValueAfterUpdate = newMainPresenceValue\n if (mainPresenceValueAfterUpdate === 'online' && mainPresenceValueBeforeUpdate !== 'online') {\n eventDispatch('phone-island-call-ended', {})\n }\n }\n })\n\n useEventListener('phone-island-call-status', () => {\n const callInformation = store.getState().currentCall\n console.log('Call status debug informations: ', callInformation)\n })\n\n const openParameterizedUrl = (callerNum: any, callerName: any, called: any, uniqueId: any) => {\n const paramUrlInfo = store.getState().paramUrl\n\n if (!paramUrlInfo?.hasValidUrl) {\n return\n }\n\n const paramUrl = paramUrlInfo.url || ''\n\n if (!paramUrl) {\n return\n }\n\n const { urlOpened } = store.getState().island\n const openParamUrlType = paramUrlInfo.openParamUrlType\n\n if (urlOpened && openParamUrlType !== 'button') {\n return\n }\n\n let processedUrl = paramUrl\n\n if (processedUrl.includes('$CALLER_NUMBER') && callerNum) {\n processedUrl = processedUrl.replace(/\\$CALLER_NUMBER/g, encodeURIComponent(callerNum))\n }\n if (processedUrl.includes('$CALLER_NAME') && callerName) {\n processedUrl = processedUrl.replace(/\\$CALLER_NAME/g, encodeURIComponent(callerName))\n }\n if (processedUrl.includes('$UNIQUEID') && uniqueId) {\n processedUrl = processedUrl.replace(/\\$UNIQUEID/g, encodeURIComponent(uniqueId))\n }\n if (processedUrl.includes('$CALLED') && called) {\n processedUrl = processedUrl.replace(/\\$CALLED/g, encodeURIComponent(called))\n }\n if (processedUrl.includes('{phone}') && callerNum) {\n processedUrl = processedUrl.replace(/\\{phone\\}/g, encodeURIComponent(callerNum))\n }\n\n const formattedUrl = processedUrl.startsWith('http') ? processedUrl : `https://${processedUrl}`\n\n if (uaType !== 'mobile') {\n const newWindow = window.open('about:blank', '_blank')\n if (newWindow) {\n newWindow.location.href = formattedUrl\n store.dispatch.island.setUrlOpened(true)\n }\n } else {\n eventDispatch('phone-island-url-parameter-opened-external', { formattedUrl })\n }\n }\n\n useEventListener('phone-island-already-opened-external-page', () => {\n store.dispatch.island.setUrlOpened(true)\n })\n\n useEventListener('phone-island-url-parameter-opened', (data) => {\n const paramUrlInfo = store.getState().paramUrl\n\n if (!paramUrlInfo.hasValidUrl) {\n return\n }\n\n const { urlOpened } = store.getState().island\n if (urlOpened) {\n return\n }\n\n const onlyQueues = paramUrlInfo.onlyQueues || false\n\n if (data?.direction === 'in') {\n if (onlyQueues === true && data?.throughQueue === true) {\n openParameterizedUrl(\n data?.counterpartNum,\n data?.counterpartName,\n data?.owner,\n data?.uniqueId\n )\n } else if (\n onlyQueues === false &&\n (data?.throughTrunk === true || data?.throughQueue === true)\n ) {\n openParameterizedUrl(\n data?.counterpartNum,\n data?.counterpartName,\n data?.owner,\n data?.uniqueId\n )\n }\n }\n })\n\n useEventListener('phone-island-user-status', () => {\n const userInformation = store.getState().currentUser\n console.log('User status debug informations: ', userInformation)\n })\n\n useEventListener('phone-island-all-users-status', () => {\n const allUsersInformation = store.getState().users\n console.log('Users status debug informations: ', allUsersInformation)\n })\n\n useEventListener('phone-island-status', () => {\n const phoneIslandInformation = store.getState().island\n console.log('Phone island status debug informations: ', phoneIslandInformation)\n })\n\n useEventListener('phone-island-webrtc-status', () => {\n const webrtcInformation = store.getState().webrtc\n console.log('Webrtc status debug informations: ', webrtcInformation)\n })\n\n useEventListener('phone-island-player-status', () => {\n const playerInformation = store.getState().player\n console.log('Player status debug informations: ', playerInformation)\n })\n\n useEventListener('phone-island-conference-status', () => {\n const conferenceInformation = store.getState().conference\n console.log('Webrtc status debug informations: ', conferenceInformation)\n })\n\n useEventListener('phone-island-streaming-status', () => {\n const streamingInformation = store.getState().streaming\n console.log('Streaming status debug informations: ', streamingInformation)\n })\n\n useEventListener('phone-island-paramurl-status', () => {\n const paramurl = store.getState().paramUrl\n console.log('Paramurl status debug informations: ', paramurl)\n })\n\n useEventListener('phone-island-player-force-stop', () => {\n store.dispatch.player.reset()\n console.log('Audio player is interrupted')\n })\n\n useEventListener('phone-island-sideview-open', () => {\n store.dispatch.island.toggleSideViewVisible(true)\n store.dispatch.island.setUrlOpened(false)\n eventDispatch('phone-island-sideview-opened', {})\n })\n\n useEventListener('phone-island-sideview-close', () => {\n store.dispatch.island.toggleSideViewVisible(false)\n eventDispatch('phone-island-sideview-closed', {})\n })\n\n useEventListener('phone-island-size-change', (args: any) => {\n const { sideViewIsVisible } = store.getState().island\n\n // Get current dimensions from args\n const { sizeInformation } = args\n\n // // Calculate extra row dimension ( side view and back call )\n const updatedSizeInformation = {\n ...sizeInformation,\n right: sideViewIsVisible ? '42px' : '0px',\n top: isBackCallActive() ? '40px' : '0px',\n }\n eventDispatch('phone-island-size-changed', { sizes: updatedSizeInformation })\n })\n\n // Listen for the call end event and set the island size to 0\n useEventListener('phone-island-call-ended', () => {\n const { mainPresence } = store.getState().currentUser\n if (mainPresence === 'online') {\n const sizeInformation: any = {\n width: '0px',\n height: '0px',\n }\n eventDispatch('phone-island-size-change', { sizeInformation })\n eventDispatch('phone-island-sideview-close', {})\n store.dispatch.island.resetIslandStore()\n }\n })\n\n useEventListener('phone-island-conference-list-open', () => {\n store.dispatch.island.toggleConferenceList(true)\n eventDispatch('phone-island-conference-list-opened', {})\n })\n\n useEventListener('phone-island-alert-removed', (alertRemovedType) => {\n // Get current alerts status\n const { activeAlertsCount } = store.getState().alerts.status\n const { view, previousView } = store.getState().island\n const { isActive } = store.getState().conference\n const alertsData = store.getState().alerts.data\n const currentCall = store.getState().currentCall\n const { incoming, outgoing, accepted } = currentCall\n\n // Check if alert type was provided\n const alertType = alertRemovedType?.type\n\n // Check if user is in a call\n const isInCall =\n currentCall.incoming ||\n currentCall.outgoing ||\n currentCall.accepted ||\n currentCall.conversationId !== ''\n\n // Determine if the island should remain visible\n const shouldKeepVisible =\n incoming ||\n outgoing ||\n accepted ||\n activeAlertsCount > 0 ||\n view === 'player' ||\n view === 'recorder' ||\n view === 'physicalPhoneRecorder' ||\n (view === 'waitingConference' && isActive) ||\n (view === 'transfer' && isActive) ||\n (view === 'settings' && isActive) ||\n (view === 'settings' && (previousView === 'recorder' || previousView === 'player'))\n\n // Reset the island store only if:\n // 1. The island should not remain visible\n // 2. No more active alerts\n // 3. The specific alert is not active anymore\n // 4. User is not currently in a call\n if (\n !shouldKeepVisible &&\n activeAlertsCount === 0 &&\n (!alertType || (alertsData[alertType] && !alertsData[alertType].active)) &&\n !isInCall\n ) {\n const sizeInformation: any = {\n width: '0px',\n height: '0px',\n }\n eventDispatch('phone-island-size-change', { sizeInformation })\n eventDispatch('phone-island-sideview-close', {})\n store.dispatch.island.resetIslandStore()\n }\n })\n\n useEventListener('phone-island-conference-list-close', () => {\n store.dispatch.island.toggleConferenceList(false)\n eventDispatch('phone-island-conference-list-closed', {})\n })\n\n // Listen for conversations updates to handle 'answered' preference for parameterized URL\n useEventListener('phone-island-conversations', (data: any) => {\n // Get the current username (first key in the data object)\n const username = Object.keys(data)[0]\n const currentUsernameInformation: any = store.getState().currentUser?.username\n\n if (username === currentUsernameInformation) {\n const conversations = data[username].conversations\n const paramUrlInfo = store.getState().paramUrl\n const { urlOpened } = store.getState().island\n\n // Only proceed if URL is valid and not already opened\n if (!paramUrlInfo.hasValidUrl || urlOpened) {\n return\n }\n\n // Check if the openParamUrlType is set to 'answered'\n if (paramUrlInfo.openParamUrlType === 'answered') {\n // Check if there are any conversations\n if (conversations && Object.keys(conversations).length > 0) {\n // Get the first conversation (usually there's only one active call)\n const convId = Object.keys(conversations)[0]\n const conv = conversations[convId]\n\n // Check conditions: must be connected and incoming\n if (conv?.connected && conv?.direction === 'in') {\n const onlyQueues = paramUrlInfo.onlyQueues || false\n\n // Check queue conditions based on preferences\n if (onlyQueues === true && conv?.throughQueue === true) {\n // Open URL only for queue calls when onlyQueues is true\n openParameterizedUrl(\n conv.counterpartNum,\n conv.counterpartName,\n conv.owner,\n conv.uniqueId\n )\n } else if (\n onlyQueues === false &&\n (conv?.throughTrunk === true || conv?.throughQueue === true)\n ) {\n // Open URL for both trunk and queue calls when onlyQueues is false\n openParameterizedUrl(\n conv.counterpartNum,\n conv.counterpartName,\n conv.owner,\n conv.uniqueId\n )\n }\n }\n }\n }\n }\n })\n\n return (\n <>\n <Provider store={store}>\n <WebRTC\n hostName={HOST_NAME}\n sipExten={SIP_EXTEN}\n sipSecret={SIP_SECRET}\n sipHost={SIP_HOST}\n sipPort={SIP_PORT}\n reload={reload}\n reloadedCallback={() => setReloadedWebRTC(true)}\n uaType={uaType}\n >\n <RestAPI hostName={HOST_NAME} username={USERNAME} authToken={AUTH_TOKEN}>\n <Socket\n hostName={HOST_NAME}\n username={USERNAME}\n authToken={AUTH_TOKEN}\n reload={reload}\n reloadedCallback={() => setReloadedSocket(true)}\n uaType={uaType}\n >\n <Events sipHost={SIP_HOST}>\n <Island showAlways={showAlways} uaType={uaType} />\n </Events>\n </Socket>\n </RestAPI>\n </WebRTC>\n </Provider>\n </>\n )\n}\n\nPhoneIsland.displayName = 'PhoneIsland'\n"],"names":["PhoneIsland","_a","dataConfig","_b","showAlways","uaType","CONFIG","Base64","atob","split","HOST_NAME","USERNAME","AUTH_TOKEN","SIP_EXTEN","SIP_SECRET","SIP_HOST","SIP_PORT","_c","useState","reload","setReload","_d","reloadedWebRTC","setReloadedWebRTC","_e","reloadedSocket","setReloadedSocket","useEffect","worker","Worker","wakeUpWorker","type","onmessage","event","data","terminate","useEventListener","store","dispatch","island","toggleIsOpen","eventDispatch","setIslandView","detach","setJSONItem","deviceId","_f","firstRender","setFirstRender","_g","firstAudioOutputInit","setFirstAudioOutputInit","initI18n","__awaiter","getParamUrl","paramUrlResponse","sent","url","isValid","trim","paramUrl","setParamUrl","onlyQueues","only_queues","hasValidUrl","console","error","error_1","toggleAvoidToShow","number","setTimeout","remoteAudioElement","getState","player","remoteAudio","current","setSinkId","then","info","catch","err","changeOperatorStatus","viewType","defaultAudioOutputDevice","getJSONItem","checkDarkTheme","theme","setTheme","selectedTheme","currentUser","updateCurrentDefaultDevice","deviceInformationObject","alertType","alerts","setAlert","toString","checkInternetConnection","internetIsActive","intervalId","setInterval","clearInterval","currentUsernameInformation","username","currentUserObject","mainPresenceValueBeforeUpdate","mainPresence","undefined","isEmpty","newMainPresenceValue","updateMainPresence","callInformation","currentCall","log","openParameterizedUrl","callerNum","callerName","called","uniqueId","paramUrlInfo","urlOpened","openParamUrlType","processedUrl","includes","replace","encodeURIComponent","formattedUrl","startsWith","concat","newWindow","window","open","location","href","setUrlOpened","direction","throughQueue","counterpartNum","counterpartName","owner","throughTrunk","userInformation","allUsersInformation","users","phoneIslandInformation","webrtcInformation","webrtc","playerInformation","conferenceInformation","conference","streamingInformation","streaming","paramurl","reset","toggleSideViewVisible","args","sideViewIsVisible","sizeInformation","updatedSizeInformation","__assign","right","top","isBackCallActive","sizes","width","height","resetIslandStore","toggleConferenceList","alertRemovedType","activeAlertsCount","status","view","previousView","isActive","alertsData","incoming","outgoing","accepted","isInCall","conversationId","active","Object","keys","conversations","length","conv","connected","React","createElement","Fragment","Provider","WebRTC","hostName","sipExten","sipSecret","sipHost","sipPort","reloadedCallback","RestAPI","authToken","Socket","Events","Island","displayName"],"mappings":"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"}
1
+ {"version":3,"file":"App.js","sources":["../src/App.tsx"],"sourcesContent":["import React, { type FC, useState, useEffect } from 'react'\nimport { Events, Socket, WebRTC, Island, RestAPI } from './components'\nimport { Provider } from 'react-redux'\nimport { store } from './store'\nimport { Base64 } from 'js-base64'\nimport wakeUpWorker from './workers/wake_up'\nimport { initI18n } from './lib/i18n'\n\nimport 'react-tooltip/dist/react-tooltip.css'\nimport { useEventListener, eventDispatch, setJSONItem, getJSONItem } from './utils'\nimport { detach } from './lib/webrtc/messages'\nimport { checkDarkTheme, setTheme } from './lib/darkTheme'\nimport { changeOperatorStatus } from './services/user'\nimport { getParamUrl } from './services/user'\nimport { isEmpty } from './utils/genericFunctions/isEmpty'\nimport { checkInternetConnection } from './utils/genericFunctions/checkConnection'\nimport { isBackCallActive } from './utils/genericFunctions/isBackCallVisible'\nimport { isFromTrunk } from './lib/user/extensions'\n\ninterface PhoneIslandProps {\n dataConfig: string\n showAlways?: boolean\n uaType: string\n}\n\ninterface DeviceInputOutputTypes {\n deviceId: string\n}\n\nexport const PhoneIsland: FC<PhoneIslandProps> = ({\n dataConfig,\n showAlways = false,\n uaType,\n}: PhoneIslandProps) => {\n const CONFIG: string[] = Base64.atob(dataConfig || '').split(':')\n const HOST_NAME: string = CONFIG[0]\n const USERNAME: string = CONFIG[1]\n const AUTH_TOKEN: string = CONFIG[2]\n const SIP_EXTEN: string = CONFIG[3]\n const SIP_SECRET: string = CONFIG[4]\n const SIP_HOST: string = CONFIG[5]\n const SIP_PORT: string = CONFIG[6]\n\n // Initialize the state to manage the reload events\n const [reload, setReload] = useState<boolean>(false)\n const [reloadedWebRTC, setReloadedWebRTC] = useState<boolean>(false)\n const [reloadedSocket, setReloadedSocket] = useState<boolean>(false)\n\n useEffect(() => {\n const worker = new Worker(wakeUpWorker, { type: 'module' })\n worker.onmessage = (event: MessageEvent<string>) => {\n // Handle wakeup message\n if (event.data === 'wakeup') {\n setReload(true)\n }\n }\n\n return () => {\n worker.terminate()\n }\n }, [])\n\n useEffect(() => {\n if (reloadedSocket && reloadedWebRTC) {\n setReload(false)\n setReloadedWebRTC(false)\n setReloadedSocket(false)\n }\n }, [reloadedSocket, reloadedWebRTC])\n\n useEventListener('phone-island-expand', () => {\n store.dispatch.island.toggleIsOpen(true)\n eventDispatch('phone-island-expanded', {})\n })\n useEventListener('phone-island-compress', () => {\n store.dispatch.island.toggleIsOpen(false)\n eventDispatch('phone-island-compressed', {})\n })\n\n useEventListener('phone-island-call-keypad-close', () => {\n store.dispatch.island.setIslandView('call')\n eventDispatch('phone-island-call-keypad-closed', {})\n })\n useEventListener('phone-island-call-transfer-close', () => {\n store.dispatch.island.setIslandView('call')\n eventDispatch('phone-island-call-transfer-closed', {})\n })\n useEventListener('phone-island-recording-close', () => {\n store.dispatch.island.setIslandView(null)\n eventDispatch('phone-island-recording-closed', {})\n })\n useEventListener('phone-island-audio-player-close', () => {\n store.dispatch.island.setIslandView(null)\n eventDispatch('phone-island-audio-player-closed', {})\n })\n\n useEventListener('phone-island-detach', (data) => {\n detach()\n eventDispatch('phone-island-detached', {})\n })\n\n useEventListener('phone-island-audio-input-change', (data: DeviceInputOutputTypes) => {\n setJSONItem('phone-island-audio-input-device', { deviceId: data.deviceId })\n eventDispatch('phone-island-audio-input-changed', {})\n })\n\n useEventListener('phone-island-video-input-change', (data: DeviceInputOutputTypes) => {\n setJSONItem('phone-island-video-input-device', { deviceId: data.deviceId })\n eventDispatch('phone-island-video-input-changed', {})\n })\n\n const [firstRender, setFirstRender] = useState(true)\n const [firstAudioOutputInit, setFirstAudioOutputInit] = useState(true)\n\n // Initialize application on first render\n useEffect(() => {\n const initParamUrl = async () => {\n try {\n const paramUrlResponse: any = await getParamUrl()\n const url = paramUrlResponse?.url || ''\n const isValid = url && url.trim() !== ''\n\n // Save data inside the store\n store.dispatch.paramUrl.setParamUrl({\n url: url,\n onlyQueues: paramUrlResponse?.only_queues || false,\n hasValidUrl: isValid,\n })\n } catch (error) {\n console.error('Error fetching URL parameter:', error)\n store.dispatch.paramUrl.setParamUrl({\n url: '',\n onlyQueues: false,\n hasValidUrl: false,\n })\n }\n }\n\n if (firstRender) {\n // Initialize i18n\n initI18n()\n // Initialize param URL\n initParamUrl()\n setFirstRender(false)\n }\n }, [firstRender])\n\n useEventListener('phone-island-audio-output-change', (data: DeviceInputOutputTypes) => {\n if (!firstAudioOutputInit) {\n store.dispatch.island.setIslandView(null)\n store.dispatch.island.toggleAvoidToShow(true)\n eventDispatch('phone-island-call-start', { number: '*43' })\n }\n\n setTimeout(() => {\n const remoteAudioElement: any = store.getState().player.remoteAudio\n // set audio output\n remoteAudioElement?.current\n .setSinkId(data.deviceId)\n .then(function () {\n console.info('Default audio output device change with success!')\n // set device to localstorage\n setJSONItem('phone-island-audio-output-device', { deviceId: data.deviceId })\n\n // dispatch event\n eventDispatch('phone-island-audio-output-changed', {})\n eventDispatch('phone-island-call-end', {})\n store.dispatch.island.toggleAvoidToShow(false)\n })\n .catch(function (err) {\n console.error('Default audio output device change error:', err)\n eventDispatch('phone-island-call-end', {})\n store.dispatch.island.toggleAvoidToShow(false)\n })\n }, 500)\n })\n\n // Listen for the operator status change\n useEventListener('phone-island-presence-change', (data: any) => {\n changeOperatorStatus(data)\n eventDispatch('phone-island-presence-changed', {})\n })\n\n useEventListener('phone-island-view-changed', (data) => {\n const viewType = data?.viewType\n store.dispatch.island.setIslandView(viewType)\n })\n\n const remoteAudioElement: any = store.getState().player.remoteAudio\n\n //get output device from localstorage\n useEffect(() => {\n if (firstAudioOutputInit && remoteAudioElement) {\n const defaultAudioOutputDevice: any = getJSONItem(\n `phone-island-audio-output-device`,\n )?.deviceId\n eventDispatch('phone-island-audio-output-change', {\n deviceId: defaultAudioOutputDevice,\n })\n setFirstAudioOutputInit(false)\n }\n }, [firstAudioOutputInit, remoteAudioElement])\n\n useEffect(() => {\n checkDarkTheme()\n }, [])\n\n useEventListener('phone-island-theme-change', (theme: any) => {\n setTheme(theme?.selectedTheme)\n })\n\n useEventListener('phone-island-default-device-change', (data) => {\n store.dispatch.currentUser.updateCurrentDefaultDevice(data?.deviceInformationObject)\n eventDispatch('phone-island-default-device-changed', {})\n })\n\n useEventListener('phone-island-alert', (alertType: any) => {\n store.dispatch.alerts.setAlert(alertType.toString())\n })\n\n // Manually check if internet connection is enabled or not\n useEventListener('phone-island-check-connection', () => {\n checkInternetConnection().then((internetIsActive) => {\n if (internetIsActive) {\n eventDispatch('phone-island-internet-connected', {})\n } else {\n eventDispatch('phone-island-internet-disconnected', {})\n }\n })\n })\n\n // Check internet connection every 5 seconds\n useEffect(() => {\n const intervalId = setInterval(() => {\n checkInternetConnection().then((internetIsActive) => {\n if (internetIsActive) {\n eventDispatch('phone-island-internet-connected', {})\n } else {\n eventDispatch('phone-island-internet-disconnected', {})\n }\n })\n }, 5000)\n\n return () => clearInterval(intervalId)\n }, [])\n\n useEventListener('phone-island-main-presence', (data: any) => {\n const currentUsernameInformation: any = store.getState().currentUser?.username\n const currentUserObject: any = store.getState().currentUser\n let mainPresenceValueBeforeUpdate = currentUserObject?.mainPresence\n if (\n currentUsernameInformation !== undefined &&\n currentUsernameInformation !== '' &&\n !isEmpty(data[currentUsernameInformation]) &&\n data[currentUsernameInformation]?.mainPresence !== undefined\n ) {\n let newMainPresenceValue = data[currentUsernameInformation]?.mainPresence\n store.dispatch.currentUser.updateMainPresence(data[currentUsernameInformation]?.mainPresence)\n let mainPresenceValueAfterUpdate = newMainPresenceValue\n if (mainPresenceValueAfterUpdate === 'online' && mainPresenceValueBeforeUpdate !== 'online') {\n eventDispatch('phone-island-call-ended', {})\n }\n }\n })\n\n useEventListener('phone-island-call-status', () => {\n const callInformation = store.getState().currentCall\n console.log('Call status debug informations: ', callInformation)\n })\n\n const openParameterizedUrl = (callerNum: any, callerName: any, called: any, uniqueId: any) => {\n const paramUrlInfo = store.getState().paramUrl\n\n if (!paramUrlInfo?.hasValidUrl) {\n return\n }\n\n const paramUrl = paramUrlInfo.url || ''\n\n if (!paramUrl) {\n return\n }\n\n const { urlOpened } = store.getState().island\n const openParamUrlType = paramUrlInfo.openParamUrlType\n\n if (urlOpened && openParamUrlType !== 'button') {\n return\n }\n\n let processedUrl = paramUrl\n\n if (processedUrl.includes('$CALLER_NUMBER') && callerNum) {\n processedUrl = processedUrl.replace(/\\$CALLER_NUMBER/g, encodeURIComponent(callerNum))\n }\n if (processedUrl.includes('$CALLER_NAME') && callerName) {\n processedUrl = processedUrl.replace(/\\$CALLER_NAME/g, encodeURIComponent(callerName))\n }\n if (processedUrl.includes('$UNIQUEID') && uniqueId) {\n processedUrl = processedUrl.replace(/\\$UNIQUEID/g, encodeURIComponent(uniqueId))\n }\n if (processedUrl.includes('$CALLED') && called) {\n processedUrl = processedUrl.replace(/\\$CALLED/g, encodeURIComponent(called))\n }\n if (processedUrl.includes('{phone}') && callerNum) {\n processedUrl = processedUrl.replace(/\\{phone\\}/g, encodeURIComponent(callerNum))\n }\n\n const formattedUrl = processedUrl.startsWith('http') ? processedUrl : `https://${processedUrl}`\n\n if (uaType !== 'mobile') {\n const newWindow = window.open('about:blank', '_blank')\n if (newWindow) {\n newWindow.location.href = formattedUrl\n store.dispatch.island.setUrlOpened(true)\n }\n } else {\n eventDispatch('phone-island-url-parameter-opened-external', { formattedUrl })\n }\n }\n\n useEventListener('phone-island-already-opened-external-page', () => {\n store.dispatch.island.setUrlOpened(true)\n })\n\n useEventListener('phone-island-url-parameter-opened', (data) => {\n const paramUrlInfo = store.getState().paramUrl\n\n if (!paramUrlInfo.hasValidUrl) {\n return\n }\n\n const { urlOpened } = store.getState().island\n if (urlOpened) {\n return\n }\n\n const onlyQueues = paramUrlInfo.onlyQueues || false\n const throughTrunk = isFromTrunk(data?.counterpartNum)\n store.dispatch.paramUrl.setThroughTrunk(throughTrunk)\n\n if (data?.direction === 'in') {\n if (onlyQueues === true && data?.throughQueue === true) {\n openParameterizedUrl(\n data?.counterpartNum,\n data?.counterpartName,\n data?.owner,\n data?.uniqueId,\n )\n } else if (onlyQueues === false && (throughTrunk === true || data?.throughQueue === true)) {\n openParameterizedUrl(\n data?.counterpartNum,\n data?.counterpartName,\n data?.owner,\n data?.uniqueId,\n )\n }\n }\n })\n\n useEventListener('phone-island-user-status', () => {\n const userInformation = store.getState().currentUser\n console.log('User status debug informations: ', userInformation)\n })\n\n useEventListener('phone-island-all-users-status', () => {\n const allUsersInformation = store.getState().users\n console.log('Users status debug informations: ', allUsersInformation)\n })\n\n useEventListener('phone-island-status', () => {\n const phoneIslandInformation = store.getState().island\n console.log('Phone island status debug informations: ', phoneIslandInformation)\n })\n\n useEventListener('phone-island-webrtc-status', () => {\n const webrtcInformation = store.getState().webrtc\n console.log('Webrtc status debug informations: ', webrtcInformation)\n })\n\n useEventListener('phone-island-player-status', () => {\n const playerInformation = store.getState().player\n console.log('Player status debug informations: ', playerInformation)\n })\n\n useEventListener('phone-island-conference-status', () => {\n const conferenceInformation = store.getState().conference\n console.log('Webrtc status debug informations: ', conferenceInformation)\n })\n\n useEventListener('phone-island-streaming-status', () => {\n const streamingInformation = store.getState().streaming\n console.log('Streaming status debug informations: ', streamingInformation)\n })\n\n useEventListener('phone-island-paramurl-status', () => {\n const paramurl = store.getState().paramUrl\n console.log('Paramurl status debug informations: ', paramurl)\n })\n\n useEventListener('phone-island-player-force-stop', () => {\n store.dispatch.player.reset()\n console.log('Audio player is interrupted')\n })\n\n useEventListener('phone-island-sideview-open', () => {\n store.dispatch.island.toggleSideViewVisible(true)\n store.dispatch.island.setUrlOpened(false)\n eventDispatch('phone-island-sideview-opened', {})\n })\n\n useEventListener('phone-island-sideview-close', () => {\n store.dispatch.island.toggleSideViewVisible(false)\n eventDispatch('phone-island-sideview-closed', {})\n })\n\n useEventListener('phone-island-size-change', (args: any) => {\n const { sideViewIsVisible } = store.getState().island\n\n // Get current dimensions from args\n const { sizeInformation } = args\n\n // // Calculate extra row dimension ( side view and back call )\n const updatedSizeInformation = {\n ...sizeInformation,\n right: sideViewIsVisible ? '42px' : '0px',\n top: isBackCallActive() ? '40px' : '0px',\n }\n eventDispatch('phone-island-size-changed', { sizes: updatedSizeInformation })\n })\n\n // Listen for the call end event and set the island size to 0\n useEventListener('phone-island-call-ended', () => {\n const { mainPresence } = store.getState().currentUser\n if (mainPresence === 'online') {\n const sizeInformation: any = {\n width: '0px',\n height: '0px',\n }\n eventDispatch('phone-island-size-change', { sizeInformation })\n eventDispatch('phone-island-sideview-close', {})\n store.dispatch.island.resetIslandStore()\n store.dispatch.paramUrl.setThroughTrunk(false)\n }\n })\n\n useEventListener('phone-island-conference-list-open', () => {\n store.dispatch.island.toggleConferenceList(true)\n eventDispatch('phone-island-conference-list-opened', {})\n })\n\n useEventListener('phone-island-alert-removed', (alertRemovedType) => {\n // Get current alerts status\n const { activeAlertsCount } = store.getState().alerts.status\n const { view, previousView } = store.getState().island\n const { isActive } = store.getState().conference\n const alertsData = store.getState().alerts.data\n const currentCall = store.getState().currentCall\n const { incoming, outgoing, accepted } = currentCall\n\n // Check if alert type was provided\n const alertType = alertRemovedType?.type\n\n // Check if user is in a call\n const isInCall =\n currentCall.incoming ||\n currentCall.outgoing ||\n currentCall.accepted ||\n currentCall.conversationId !== ''\n\n // Determine if the island should remain visible\n const shouldKeepVisible =\n incoming ||\n outgoing ||\n accepted ||\n activeAlertsCount > 0 ||\n view === 'player' ||\n view === 'recorder' ||\n view === 'physicalPhoneRecorder' ||\n (view === 'waitingConference' && isActive) ||\n (view === 'transfer' && isActive) ||\n (view === 'settings' && isActive) ||\n (view === 'settings' && (previousView === 'recorder' || previousView === 'player'))\n\n // Reset the island store only if:\n // 1. The island should not remain visible\n // 2. No more active alerts\n // 3. The specific alert is not active anymore\n // 4. User is not currently in a call\n if (\n !shouldKeepVisible &&\n activeAlertsCount === 0 &&\n (!alertType || (alertsData[alertType] && !alertsData[alertType].active)) &&\n !isInCall\n ) {\n const sizeInformation: any = {\n width: '0px',\n height: '0px',\n }\n eventDispatch('phone-island-size-change', { sizeInformation })\n eventDispatch('phone-island-sideview-close', {})\n store.dispatch.island.resetIslandStore()\n }\n })\n\n useEventListener('phone-island-conference-list-close', () => {\n store.dispatch.island.toggleConferenceList(false)\n eventDispatch('phone-island-conference-list-closed', {})\n })\n\n // Listen for conversations updates to handle 'answered' preference for parameterized URL\n useEventListener('phone-island-conversations', (data: any) => {\n // Get the current username (first key in the data object)\n const username = Object.keys(data)[0]\n const currentUsernameInformation: any = store.getState().currentUser?.username\n\n if (username === currentUsernameInformation) {\n const conversations = data[username].conversations\n const paramUrlInfo = store.getState().paramUrl\n const { urlOpened } = store.getState().island\n\n // Only proceed if URL is valid and not already opened\n if (!paramUrlInfo.hasValidUrl || urlOpened) {\n return\n }\n\n // Check if the openParamUrlType is set to 'answered'\n if (paramUrlInfo.openParamUrlType === 'answered') {\n // Check if there are any conversations\n if (conversations && Object.keys(conversations).length > 0) {\n // Get the first conversation (usually there's only one active call)\n const convId = Object.keys(conversations)[0]\n const conv = conversations[convId]\n\n // Check conditions: must be connected and incoming\n if (conv?.connected && conv?.direction === 'in') {\n const onlyQueues = paramUrlInfo.onlyQueues || false\n const calculatedThroughTrunk = isFromTrunk(conv.counterpartNum)\n // Update throughTrunk in paramUrl store\n store.dispatch.paramUrl.setThroughTrunk(calculatedThroughTrunk)\n\n // Check queue conditions based on preferences\n if (onlyQueues === true && conv?.throughQueue === true) {\n // Open URL only for queue calls when onlyQueues is true\n openParameterizedUrl(\n conv.counterpartNum,\n conv.counterpartName,\n conv.owner,\n conv.uniqueId,\n )\n } else if (\n onlyQueues === false &&\n (calculatedThroughTrunk === true || conv?.throughQueue === true)\n ) {\n // Open URL for both trunk and queue calls when onlyQueues is false\n openParameterizedUrl(\n conv.counterpartNum,\n conv.counterpartName,\n conv.owner,\n conv.uniqueId,\n )\n }\n }\n }\n }\n }\n })\n\n return (\n <>\n <Provider store={store}>\n <WebRTC\n hostName={HOST_NAME}\n sipExten={SIP_EXTEN}\n sipSecret={SIP_SECRET}\n sipHost={SIP_HOST}\n sipPort={SIP_PORT}\n reload={reload}\n reloadedCallback={() => setReloadedWebRTC(true)}\n uaType={uaType}\n >\n <RestAPI hostName={HOST_NAME} username={USERNAME} authToken={AUTH_TOKEN}>\n <Socket\n hostName={HOST_NAME}\n username={USERNAME}\n authToken={AUTH_TOKEN}\n reload={reload}\n reloadedCallback={() => setReloadedSocket(true)}\n uaType={uaType}\n >\n <Events sipHost={SIP_HOST}>\n <Island showAlways={showAlways} uaType={uaType} />\n </Events>\n </Socket>\n </RestAPI>\n </WebRTC>\n </Provider>\n </>\n )\n}\n\nPhoneIsland.displayName = 'PhoneIsland'\n"],"names":["PhoneIsland","_a","dataConfig","_b","showAlways","uaType","CONFIG","Base64","atob","split","HOST_NAME","USERNAME","AUTH_TOKEN","SIP_EXTEN","SIP_SECRET","SIP_HOST","SIP_PORT","_c","useState","reload","setReload","_d","reloadedWebRTC","setReloadedWebRTC","_e","reloadedSocket","setReloadedSocket","useEffect","worker","Worker","wakeUpWorker","type","onmessage","event","data","terminate","useEventListener","store","dispatch","island","toggleIsOpen","eventDispatch","setIslandView","detach","setJSONItem","deviceId","_f","firstRender","setFirstRender","_g","firstAudioOutputInit","setFirstAudioOutputInit","initI18n","__awaiter","getParamUrl","paramUrlResponse","sent","url","isValid","trim","paramUrl","setParamUrl","onlyQueues","only_queues","hasValidUrl","console","error","error_1","toggleAvoidToShow","number","setTimeout","remoteAudioElement","getState","player","remoteAudio","current","setSinkId","then","info","catch","err","changeOperatorStatus","viewType","defaultAudioOutputDevice","getJSONItem","checkDarkTheme","theme","setTheme","selectedTheme","currentUser","updateCurrentDefaultDevice","deviceInformationObject","alertType","alerts","setAlert","toString","checkInternetConnection","internetIsActive","intervalId","setInterval","clearInterval","currentUsernameInformation","username","currentUserObject","mainPresenceValueBeforeUpdate","mainPresence","undefined","isEmpty","newMainPresenceValue","updateMainPresence","callInformation","currentCall","log","openParameterizedUrl","callerNum","callerName","called","uniqueId","paramUrlInfo","urlOpened","openParamUrlType","processedUrl","includes","replace","encodeURIComponent","formattedUrl","startsWith","concat","newWindow","window","open","location","href","setUrlOpened","throughTrunk","isFromTrunk","counterpartNum","setThroughTrunk","direction","throughQueue","counterpartName","owner","userInformation","allUsersInformation","users","phoneIslandInformation","webrtcInformation","webrtc","playerInformation","conferenceInformation","conference","streamingInformation","streaming","paramurl","reset","toggleSideViewVisible","args","sideViewIsVisible","sizeInformation","updatedSizeInformation","__assign","right","top","isBackCallActive","sizes","width","height","resetIslandStore","toggleConferenceList","alertRemovedType","activeAlertsCount","status","view","previousView","isActive","alertsData","incoming","outgoing","accepted","isInCall","conversationId","active","Object","keys","conversations","length","conv","connected","calculatedThroughTrunk","React","createElement","Fragment","Provider","WebRTC","hostName","sipExten","sipSecret","sipHost","sipPort","reloadedCallback","RestAPI","authToken","Socket","Events","Island","displayName"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});exports.propTypes={exports:{}};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});exports.__exports={};
2
2
  //# sourceMappingURL=index6.js.map
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});exports.reactIs={exports:{}};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});exports.propTypes={exports:{}};
2
2
  //# sourceMappingURL=index7.js.map
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});exports.__exports={};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});exports.reactIs={exports:{}};
2
2
  //# sourceMappingURL=index8.js.map
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../node_modules/tslib/tslib.es6.js"),t=require("react"),r=require("../services/user.js"),s=require("../lib/avatars/avatars.js");require("../node_modules/react-redux/es/index.js");var n=require("../services/astproxy.js"),u=require("../lib/user/extensions.js"),a=require("../node_modules/react-redux/es/hooks/useDispatch.js"),i=require("../node_modules/react-redux/es/hooks/useSelector.js");function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var c=o(t);exports.RestAPI=function(o){var l=o.hostName,f=o.username,d=o.authToken,h=o.children,p=a.useDispatch(),v=i.useSelector((function(e){return e.fetchDefaults})).fetchReady;return t.useEffect((function(){f&&d&&l&&(p.fetchDefaults.updateFetchBaseURL("https://".concat(l,"/webrest")),p.fetchDefaults.updateFetchHeaders({Authorization:"".concat(f,":").concat(d)}),p.fetchDefaults.setFetchReady())}),[f,d,l]),t.useEffect((function(){v&&(function(){e.__awaiter(this,void 0,void 0,(function(){var t;return e.__generator(this,(function(s){switch(s.label){case 0:return[4,r.getCurrentUserInfo()];case 1:return(t=s.sent())&&(p.currentUser.updateCurrentUser(t),p.currentUser.setCurrentUserReady(!0),t.settings&&t.settings.open_param_url?p.paramUrl.setOpenParamUrlType(t.settings.open_param_url):p.paramUrl.setOpenParamUrlType("never"),function(){e.__awaiter(this,void 0,void 0,(function(){var t,r;return e.__generator(this,(function(e){switch(e.label){case 0:return[4,n.getAllExtensions()];case 1:return(t=e.sent())&&(p.users.updateExtensions(t),r=u.getExtensionsList(),Object.values(t).filter((function(e){return r.includes(e.exten)})).forEach((function(e){return p.currentUser.updateConversations(e)}))),[2]}}))}))}()),[2]}}))}))}(),function(){e.__awaiter(this,void 0,void 0,(function(){var t;return e.__generator(this,(function(e){switch(e.label){case 0:return[4,r.getAllUsersEndpoints()];case 1:return(t=e.sent())&&p.users.updateEndpoints(t),[2]}}))}))}(),function(){e.__awaiter(this,void 0,void 0,(function(){var t;return e.__generator(this,(function(e){switch(e.label){case 0:return[4,r.getVideoSources()];case 1:return(t=e.sent())&&p.streaming.updateVideoSources(t),[2]}}))}))}())}),[v]),t.useLayoutEffect((function(){f&&v&&s.retrieveAvatars(f)}),[v,f]),c.default.createElement(c.default.Fragment,null,v&&h)};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../node_modules/tslib/tslib.es6.js"),t=require("react"),r=require("../services/user.js"),s=require("../lib/avatars/avatars.js");require("../node_modules/react-redux/es/index.js");var n=require("../services/astproxy.js"),u=require("../lib/user/extensions.js"),a=require("../utils/genericFunctions/eventDispatch.js");require("../store/index.js");var i=require("../node_modules/react-redux/es/hooks/useDispatch.js"),o=require("../node_modules/react-redux/es/hooks/useSelector.js");function c(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var l=c(t);exports.RestAPI=function(c){var d=c.hostName,f=c.username,h=c.authToken,p=c.children,v=i.useDispatch(),_=o.useSelector((function(e){return e.fetchDefaults})).fetchReady;return t.useEffect((function(){f&&h&&d&&(v.fetchDefaults.updateFetchBaseURL("https://".concat(d,"/webrest")),v.fetchDefaults.updateFetchHeaders({Authorization:"".concat(f,":").concat(h)}),v.fetchDefaults.setFetchReady())}),[f,h,d]),t.useEffect((function(){_&&(function(){e.__awaiter(this,void 0,void 0,(function(){var t;return e.__generator(this,(function(s){switch(s.label){case 0:return[4,r.getCurrentUserInfo()];case 1:return(t=s.sent())&&(v.currentUser.updateCurrentUser(t),a.eventDispatch("phone-island-user-informations-update",e.__assign({},t)),v.currentUser.setCurrentUserReady(!0),t.settings&&t.settings.open_param_url?v.paramUrl.setOpenParamUrlType(t.settings.open_param_url):v.paramUrl.setOpenParamUrlType("never"),function(){e.__awaiter(this,void 0,void 0,(function(){var t,r;return e.__generator(this,(function(e){switch(e.label){case 0:return[4,n.getAllExtensions()];case 1:return(t=e.sent())&&(v.users.updateExtensions(t),r=u.getExtensionsList(),Object.values(t).filter((function(e){return r.includes(e.exten)})).forEach((function(e){return v.currentUser.updateConversations(e)}))),[2]}}))}))}()),[2]}}))}))}(),function(){e.__awaiter(this,void 0,void 0,(function(){var t;return e.__generator(this,(function(e){switch(e.label){case 0:return[4,r.getAllUsersEndpoints()];case 1:return(t=e.sent())&&v.users.updateEndpoints(t),[2]}}))}))}(),function(){e.__awaiter(this,void 0,void 0,(function(){var t;return e.__generator(this,(function(e){switch(e.label){case 0:return[4,r.getVideoSources()];case 1:return(t=e.sent())&&v.streaming.updateVideoSources(t),[2]}}))}))}())}),[_]),t.useLayoutEffect((function(){f&&_&&s.retrieveAvatars(f)}),[_,f]),l.default.createElement(l.default.Fragment,null,_&&p)};
2
2
  //# sourceMappingURL=RestAPI.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"RestAPI.js","sources":["../../src/components/RestAPI.tsx"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type ReactNode, type FC, useEffect, useLayoutEffect } from 'react'\nimport { getCurrentUserInfo, getVideoSources } from '../services/user'\nimport { retrieveAvatars } from '../lib/avatars/avatars'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { Dispatch, RootState } from '../store'\nimport { getAllExtensions } from '../services/astproxy'\nimport { getAllUsersEndpoints } from '../services/user'\nimport { getExtensionsList } from '../lib/user/extensions'\n\nexport const RestAPI: FC<RestAPIProps> = ({ hostName, username, authToken, children }) => {\n const dispatch = useDispatch<Dispatch>()\n const { fetchReady } = useSelector((state: RootState) => state.fetchDefaults)\n\n useEffect(() => {\n if (username && authToken && hostName) {\n // Initialize API defaults\n dispatch.fetchDefaults.updateFetchBaseURL(`https://${hostName}/webrest`)\n dispatch.fetchDefaults.updateFetchHeaders({\n Authorization: `${username}:${authToken}`,\n })\n dispatch.fetchDefaults.setFetchReady()\n }\n }, [username, authToken, hostName])\n\n useEffect(() => {\n // Get all extensions info and set to store\n async function initExtensions() {\n const extensions = await getAllExtensions()\n if (extensions) {\n dispatch.users.updateExtensions(extensions)\n // Update the current user conversations\n const currentUserExtensionsList = getExtensionsList()\n const extensionsData = Object.values(extensions).filter((extension) =>\n currentUserExtensionsList.includes(extension.exten),\n )\n // Update the user conversations to store\n extensionsData.forEach((extension) => dispatch.currentUser.updateConversations(extension))\n }\n }\n // Get users info and set to store\n async function initCurrentUser() {\n const userInfo = await getCurrentUserInfo()\n if (userInfo) {\n dispatch.currentUser.updateCurrentUser(userInfo)\n dispatch.currentUser.setCurrentUserReady(true)\n\n // Update open param URL type if it exists in paramurl store\n if (userInfo.settings && userInfo.settings.open_param_url) {\n dispatch.paramUrl.setOpenParamUrlType(userInfo.settings.open_param_url);\n } else {\n dispatch.paramUrl.setOpenParamUrlType('never');\n }\n\n // Inizialize all extensions after user initialization\n initExtensions()\n }\n }\n // Get all users and endpoints info and set to store\n async function initUsersEndpoints() {\n const usersEndpoints = await getAllUsersEndpoints()\n if (usersEndpoints) {\n dispatch.users.updateEndpoints(usersEndpoints)\n }\n }\n // Get all streaming source info and set to store\n async function initVideoSources() {\n const videoSources: any = await getVideoSources()\n if (videoSources) {\n dispatch.streaming.updateVideoSources(videoSources)\n }\n }\n // Call the needed APIs on startup\n if (fetchReady) {\n initCurrentUser()\n initUsersEndpoints()\n initVideoSources()\n }\n }, [fetchReady])\n\n useLayoutEffect(() => {\n // Initialize avatars request it or get from storage\n if (username && fetchReady) {\n retrieveAvatars(username)\n }\n }, [fetchReady, username])\n\n return <>{fetchReady && children}</>\n}\n\ninterface RestAPIProps {\n children: ReactNode\n hostName: string\n username: string\n authToken: string\n}\n"],"names":["_a","hostName","username","authToken","children","dispatch","useDispatch","fetchReady","useSelector","state","fetchDefaults","useEffect","updateFetchBaseURL","concat","updateFetchHeaders","Authorization","setFetchReady","getCurrentUserInfo","userInfo","sent","currentUser","updateCurrentUser","setCurrentUserReady","settings","open_param_url","paramUrl","setOpenParamUrlType","getAllExtensions","extensions","users","updateExtensions","currentUserExtensionsList_1","getExtensionsList","Object","values","filter","extension","includes","exten","forEach","updateConversations","initExtensions","initCurrentUser","getAllUsersEndpoints","usersEndpoints","updateEndpoints","initUsersEndpoints","getVideoSources","videoSources","streaming","updateVideoSources","initVideoSources","useLayoutEffect","retrieveAvatars","React","createElement","Fragment"],"mappings":"2jBAYyC,SAACA,OAAEC,EAAQD,EAAAC,SAAEC,EAAQF,EAAAE,SAAEC,EAASH,EAAAG,UAAEC,EAAQJ,EAAAI,SAC3EC,EAAWC,EAAAA,cACTC,EAAeC,eAAY,SAACC,GAAqB,OAAAA,EAAMC,4BA2E/D,OAzEAC,EAAAA,WAAU,WACJT,GAAYC,GAAaF,IAE3BI,EAASK,cAAcE,mBAAmB,WAAWC,OAAAZ,EAAkB,aACvEI,EAASK,cAAcI,mBAAmB,CACxCC,cAAe,GAAAF,OAAGX,EAAQ,KAAAW,OAAIV,KAEhCE,EAASK,cAAcM,gBAE1B,GAAE,CAACd,EAAUC,EAAWF,IAEzBU,EAAAA,WAAU,WAgDJJ,IAhCJ,0HACmB,MAAM,CAAA,EAAAU,EAAAA,oCAAjBC,EAAWlB,EAA0BmB,UAEzCd,EAASe,YAAYC,kBAAkBH,GACvCb,EAASe,YAAYE,qBAAoB,GAGrCJ,EAASK,UAAYL,EAASK,SAASC,eACzCnB,EAASoB,SAASC,oBAAoBR,EAASK,SAASC,gBAExDnB,EAASoB,SAASC,oBAAoB,SAxB5C,4HACqB,MAAM,CAAA,EAAAC,EAAAA,kCAAnBC,EAAa5B,EAAwBmB,UAEzCd,EAASwB,MAAMC,iBAAiBF,GAE1BG,EAA4BC,EAAiBA,oBAC5BC,OAAOC,OAAON,GAAYO,QAAO,SAACC,GACvD,OAAAL,EAA0BM,SAASD,EAAUE,MAA7C,IAGaC,SAAQ,SAACH,GAAc,OAAA/B,EAASe,YAAYoB,oBAAoBJ,EAAzC,eAEzC,CAgBGK,cAEH,CAiBCC,GAfF,0HACyB,MAAM,CAAA,EAAAC,EAAAA,sCAAvBC,EAAiB5C,EAA4BmB,SAEjDd,EAASwB,MAAMgB,gBAAgBD,aAElC,CAWCE,GATF,0HAC4B,MAAM,CAAA,EAAAC,EAAAA,iCAA1BC,EAAoBhD,EAAuBmB,SAE/Cd,EAAS4C,UAAUC,mBAAmBF,aAEzC,CAKCG,GAEJ,GAAG,CAAC5C,IAEJ6C,EAAAA,iBAAgB,WAEVlD,GAAYK,GACd8C,EAAeA,gBAACnD,EAEpB,GAAG,CAACK,EAAYL,IAEToD,EAAAA,QAAGC,cAAAD,EAAA,QAAAE,SAAA,KAAAjD,GAAcH,EAC1B"}
1
+ {"version":3,"file":"RestAPI.js","sources":["../../src/components/RestAPI.tsx"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type ReactNode, type FC, useEffect, useLayoutEffect } from 'react'\nimport { getCurrentUserInfo, getVideoSources } from '../services/user'\nimport { retrieveAvatars } from '../lib/avatars/avatars'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { Dispatch, RootState } from '../store'\nimport { getAllExtensions } from '../services/astproxy'\nimport { getAllUsersEndpoints } from '../services/user'\nimport { getExtensionsList } from '../lib/user/extensions'\nimport { eventDispatch } from '../utils'\n\nexport const RestAPI: FC<RestAPIProps> = ({ hostName, username, authToken, children }) => {\n const dispatch = useDispatch<Dispatch>()\n const { fetchReady } = useSelector((state: RootState) => state.fetchDefaults)\n\n useEffect(() => {\n if (username && authToken && hostName) {\n // Initialize API defaults\n dispatch.fetchDefaults.updateFetchBaseURL(`https://${hostName}/webrest`)\n dispatch.fetchDefaults.updateFetchHeaders({\n Authorization: `${username}:${authToken}`,\n })\n dispatch.fetchDefaults.setFetchReady()\n }\n }, [username, authToken, hostName])\n\n useEffect(() => {\n // Get all extensions info and set to store\n async function initExtensions() {\n const extensions = await getAllExtensions()\n if (extensions) {\n dispatch.users.updateExtensions(extensions)\n // Update the current user conversations\n const currentUserExtensionsList = getExtensionsList()\n const extensionsData = Object.values(extensions).filter((extension) =>\n currentUserExtensionsList.includes(extension.exten),\n )\n // Update the user conversations to store\n extensionsData.forEach((extension) => dispatch.currentUser.updateConversations(extension))\n }\n }\n // Get users info and set to store\n async function initCurrentUser() {\n const userInfo = await getCurrentUserInfo()\n if (userInfo) {\n dispatch.currentUser.updateCurrentUser(userInfo)\n eventDispatch('phone-island-user-informations-update', { ...userInfo })\n dispatch.currentUser.setCurrentUserReady(true)\n // Update open param URL type if it exists in paramurl store\n if (userInfo.settings && userInfo.settings.open_param_url) {\n dispatch.paramUrl.setOpenParamUrlType(userInfo.settings.open_param_url)\n } else {\n dispatch.paramUrl.setOpenParamUrlType('never')\n }\n\n // Inizialize all extensions after user initialization\n initExtensions()\n }\n }\n // Get all users and endpoints info and set to store\n async function initUsersEndpoints() {\n const usersEndpoints = await getAllUsersEndpoints()\n if (usersEndpoints) {\n dispatch.users.updateEndpoints(usersEndpoints)\n }\n }\n // Get all streaming source info and set to store\n async function initVideoSources() {\n const videoSources: any = await getVideoSources()\n if (videoSources) {\n dispatch.streaming.updateVideoSources(videoSources)\n }\n }\n // Call the needed APIs on startup\n if (fetchReady) {\n initCurrentUser()\n initUsersEndpoints()\n initVideoSources()\n }\n }, [fetchReady])\n\n useLayoutEffect(() => {\n // Initialize avatars request it or get from storage\n if (username && fetchReady) {\n retrieveAvatars(username)\n }\n }, [fetchReady, username])\n\n return <>{fetchReady && children}</>\n}\n\ninterface RestAPIProps {\n children: ReactNode\n hostName: string\n username: string\n authToken: string\n}\n"],"names":["_a","hostName","username","authToken","children","dispatch","useDispatch","fetchReady","useSelector","state","fetchDefaults","useEffect","updateFetchBaseURL","concat","updateFetchHeaders","Authorization","setFetchReady","getCurrentUserInfo","userInfo","sent","currentUser","updateCurrentUser","eventDispatch","__assign","setCurrentUserReady","settings","open_param_url","paramUrl","setOpenParamUrlType","getAllExtensions","extensions","users","updateExtensions","currentUserExtensionsList_1","getExtensionsList","Object","values","filter","extension","includes","exten","forEach","updateConversations","initExtensions","initCurrentUser","getAllUsersEndpoints","usersEndpoints","updateEndpoints","initUsersEndpoints","getVideoSources","videoSources","streaming","updateVideoSources","initVideoSources","useLayoutEffect","retrieveAvatars","React","createElement","Fragment"],"mappings":"opBAayC,SAACA,OAAEC,EAAQD,EAAAC,SAAEC,EAAQF,EAAAE,SAAEC,EAASH,EAAAG,UAAEC,EAAQJ,EAAAI,SAC3EC,EAAWC,EAAAA,cACTC,EAAeC,eAAY,SAACC,GAAqB,OAAAA,EAAMC,4BA2E/D,OAzEAC,EAAAA,WAAU,WACJT,GAAYC,GAAaF,IAE3BI,EAASK,cAAcE,mBAAmB,WAAWC,OAAAZ,EAAkB,aACvEI,EAASK,cAAcI,mBAAmB,CACxCC,cAAe,GAAAF,OAAGX,EAAQ,KAAAW,OAAIV,KAEhCE,EAASK,cAAcM,gBAE1B,GAAE,CAACd,EAAUC,EAAWF,IAEzBU,EAAAA,WAAU,WAgDJJ,IAhCJ,0HACmB,MAAM,CAAA,EAAAU,EAAAA,oCAAjBC,EAAWlB,EAA0BmB,UAEzCd,EAASe,YAAYC,kBAAkBH,GACvCI,EAAAA,cAAc,wCAA8CC,EAAAA,SAAA,CAAA,EAAAL,IAC5Db,EAASe,YAAYI,qBAAoB,GAErCN,EAASO,UAAYP,EAASO,SAASC,eACzCrB,EAASsB,SAASC,oBAAoBV,EAASO,SAASC,gBAExDrB,EAASsB,SAASC,oBAAoB,SAxB5C,4HACqB,MAAM,CAAA,EAAAC,EAAAA,kCAAnBC,EAAa9B,EAAwBmB,UAEzCd,EAAS0B,MAAMC,iBAAiBF,GAE1BG,EAA4BC,EAAiBA,oBAC5BC,OAAOC,OAAON,GAAYO,QAAO,SAACC,GACvD,OAAAL,EAA0BM,SAASD,EAAUE,MAA7C,IAGaC,SAAQ,SAACH,GAAc,OAAAjC,EAASe,YAAYsB,oBAAoBJ,EAAzC,eAEzC,CAgBGK,cAEH,CAiBCC,GAfF,0HACyB,MAAM,CAAA,EAAAC,EAAAA,sCAAvBC,EAAiB9C,EAA4BmB,SAEjDd,EAAS0B,MAAMgB,gBAAgBD,aAElC,CAWCE,GATF,0HAC4B,MAAM,CAAA,EAAAC,EAAAA,iCAA1BC,EAAoBlD,EAAuBmB,SAE/Cd,EAAS8C,UAAUC,mBAAmBF,aAEzC,CAKCG,GAEJ,GAAG,CAAC9C,IAEJ+C,EAAAA,iBAAgB,WAEVpD,GAAYK,GACdgD,EAAeA,gBAACrD,EAEpB,GAAG,CAACK,EAAYL,IAETsD,EAAAA,QAAGC,cAAAD,EAAA,QAAAE,SAAA,KAAAnD,GAAcH,EAC1B"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../../node_modules/tslib/tslib.es6.js"),i=require("react");require("../../../node_modules/react-redux/es/index.js");var n=require("../../../store/index.js"),r=require("../../../utils/deviceUtils.js"),u=require("../../../lib/webrtc/janus.js"),o=require("../../../lib/devices/devices.js"),t=require("../../../utils/genericFunctions/eventDispatch.js"),l=require("../../../node_modules/react-redux/es/hooks/useDispatch.js"),s=require("../../../node_modules/react-redux/es/hooks/useSelector.js");exports.useSideViewLogic=function(a){var d,c,v,h,f,p,g,b,m=l.useDispatch(),_=s.useSelector((function(e){return e.currentUser})),S=s.useSelector((function(e){return e.users})),j=s.useSelector((function(e){return e.paramUrl})),w=n.store.select.mediaDevices.videoInputDevices(n.store.getState()),k=i.useRef(u.default),q=s.useSelector((function(e){return e.currentUser.conversations})),C=i.useState([]),V=C[0],D=C[1],U=i.useState(!0),y=U[0],T=U[1],x=i.useCallback((function(e){if(m.island.toggleSideViewVisible(!1),"openUrl"===e){var i=Object.values(q).find((function(e){return Object.keys(e).length>0})),n=i?Object.values(i)[0]:null;if((null==n?void 0:n.connected)&&"in"===(null==n?void 0:n.direction)){var r={counterpartNum:n.counterpartNum,counterpartName:n.counterpartName,owner:n.owner,uniqueId:n.uniqueId,throughQueue:n.throughQueue,throughTrunk:n.throughTrunk,direction:n.direction,connected:n.connected};t.eventDispatch("phone-island-url-parameter-opened",r)}}else null!==e&&m.island.setIslandView(e)}),[m.island,q]),O=i.useCallback((function(){return e.__awaiter(void 0,void 0,void 0,(function(){var i;return e.__generator(this,(function(e){switch(e.label){case 0:return w.length>0?[4,o.checkWebCamPermission()]:[3,2];case 1:return i=e.sent(),T(i),[2,i];case 2:return T(!1),[2,!1]}}))}))}),[w.length]),Q=i.useCallback((function(){return e.__awaiter(void 0,void 0,void 0,(function(){return e.__generator(this,(function(e){switch(e.label){case 0:return[4,O()];case 1:return e.sent()&&(x("video"),n.store.dispatch.currentCall.updateCurrentCall({isLocalVideoEnabled:!0,isStartingVideoCall:!0})),[2]}}))}))}),[O,x]),I=i.useCallback((function(){x("video"),n.store.dispatch.screenShare.update({isStartingScreenShare:!0})}),[x]),P=i.useMemo((function(){var e;return(null===(e=null==_?void 0:_.profile)||void 0===e?void 0:e.macro_permissions)||{}}),[null===(d=null==_?void 0:_.profile)||void 0===d?void 0:d.macro_permissions]),E=i.useMemo((function(){var e,i,n,r,u,o;return{canRecord:(null===(n=null===(i=null===(e=null==P?void 0:P.settings)||void 0===e?void 0:e.permissions)||void 0===i?void 0:i.recording)||void 0===n?void 0:n.value)||!1,canShareScreen:"safari"!==k.current.webRTCAdapter.browserDetails.browser&&((null===(o=null===(u=null===(r=null==P?void 0:P.nethvoice_cti)||void 0===r?void 0:r.permissions)||void 0===u?void 0:u.screen_sharing)||void 0===o?void 0:o.value)||!1),canSwitchDevice:(null==V?void 0:V.length)>0}}),[null===(h=null===(v=null===(c=null==P?void 0:P.settings)||void 0===c?void 0:c.permissions)||void 0===v?void 0:v.recording)||void 0===h?void 0:h.value,null===(g=null===(p=null===(f=null==P?void 0:P.nethvoice_cti)||void 0===f?void 0:f.permissions)||void 0===p?void 0:p.screen_sharing)||void 0===g?void 0:g.value,null==V?void 0:V.length,null===(b=null==_?void 0:_.default_device)||void 0===b?void 0:b.type,a]),M=i.useMemo((function(){var e=Object.values(q).find((function(e){return Object.keys(e).length>0})),i=e?Object.values(e)[0]:null;if("never"===j.openParamUrlType)return!1;if(!(null==i?void 0:i.connected)||"in"!==(null==i?void 0:i.direction))return!1;if("button"===j.openParamUrlType){if(j.onlyQueues&&(null==i?void 0:i.throughQueue))return!0;if(!j.onlyQueues&&((null==i?void 0:i.throughTrunk)||(null==i?void 0:i.throughQueue)))return!0}return!1}),[q,j.onlyQueues,j.openParamUrlType]);return i.useEffect((function(){if(_&&S){var e=r.getAvailableDevices(_,S);D(e)}}),[_,S]),e.__assign(e.__assign({userInformation:_,availableDevices:V,videoInputDevices:w,isVideoCallButtonVisible:y,isUrlButtonEnabled:M,hasValidUrl:j.hasValidUrl},E),{goToVideoCall:Q,goToScreenSharing:I,closeSideViewAndLaunchEvent:x})};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../../node_modules/tslib/tslib.es6.js"),i=require("react");require("../../../node_modules/react-redux/es/index.js");var n=require("../../../store/index.js"),r=require("../../../utils/deviceUtils.js"),u=require("../../../lib/webrtc/janus.js"),o=require("../../../lib/phone/trunk.js"),t=require("../../../lib/devices/devices.js"),l=require("../../../utils/genericFunctions/eventDispatch.js"),s=require("../../../node_modules/react-redux/es/hooks/useDispatch.js"),a=require("../../../node_modules/react-redux/es/hooks/useSelector.js");exports.useSideViewLogic=function(c){var d,v,h,p,f,g,b,m,_=s.useDispatch(),S=a.useSelector((function(e){return e.currentUser})),j=a.useSelector((function(e){return e.users})),w=a.useSelector((function(e){return e.paramUrl})),k=n.store.select.mediaDevices.videoInputDevices(n.store.getState()),q=i.useRef(u.default),C=a.useSelector((function(e){return e.currentUser.conversations})),V=i.useState([]),D=V[0],U=V[1],y=i.useState(!0),T=y[0],x=y[1],O=i.useCallback((function(e){if(_.island.toggleSideViewVisible(!1),"openUrl"===e){var i=Object.values(C).find((function(e){return Object.keys(e).length>0})),n=i?Object.values(i)[0]:null;if((null==n?void 0:n.connected)&&"in"===(null==n?void 0:n.direction)){var r={counterpartNum:n.counterpartNum,counterpartName:n.counterpartName,owner:n.owner,uniqueId:n.uniqueId,throughQueue:n.throughQueue,throughTrunk:n.throughTrunk,direction:n.direction,connected:n.connected};l.eventDispatch("phone-island-url-parameter-opened",r)}}else null!==e&&_.island.setIslandView(e)}),[_.island,C]),Q=i.useCallback((function(){return e.__awaiter(void 0,void 0,void 0,(function(){var i;return e.__generator(this,(function(e){switch(e.label){case 0:return k.length>0?[4,t.checkWebCamPermission()]:[3,2];case 1:return i=e.sent(),x(i),[2,i];case 2:return x(!1),[2,!1]}}))}))}),[k.length]),I=i.useCallback((function(){return e.__awaiter(void 0,void 0,void 0,(function(){return e.__generator(this,(function(e){switch(e.label){case 0:return[4,Q()];case 1:return e.sent()&&(O("video"),n.store.dispatch.currentCall.updateCurrentCall({isLocalVideoEnabled:!0,isStartingVideoCall:!0})),[2]}}))}))}),[Q,O]),N=i.useCallback((function(){O("video"),n.store.dispatch.screenShare.update({isStartingScreenShare:!0})}),[O]),P=i.useMemo((function(){var e;return(null===(e=null==S?void 0:S.profile)||void 0===e?void 0:e.macro_permissions)||{}}),[null===(d=null==S?void 0:S.profile)||void 0===d?void 0:d.macro_permissions]),E=i.useMemo((function(){var e,i,n,r,u,o;return{canRecord:(null===(n=null===(i=null===(e=null==P?void 0:P.settings)||void 0===e?void 0:e.permissions)||void 0===i?void 0:i.recording)||void 0===n?void 0:n.value)||!1,canShareScreen:"safari"!==q.current.webRTCAdapter.browserDetails.browser&&((null===(o=null===(u=null===(r=null==P?void 0:P.nethvoice_cti)||void 0===r?void 0:r.permissions)||void 0===u?void 0:u.screen_sharing)||void 0===o?void 0:o.value)||!1),canSwitchDevice:(null==D?void 0:D.length)>0}}),[null===(p=null===(h=null===(v=null==P?void 0:P.settings)||void 0===v?void 0:v.permissions)||void 0===h?void 0:h.recording)||void 0===p?void 0:p.value,null===(b=null===(g=null===(f=null==P?void 0:P.nethvoice_cti)||void 0===f?void 0:f.permissions)||void 0===g?void 0:g.screen_sharing)||void 0===b?void 0:b.value,null==D?void 0:D.length,null===(m=null==S?void 0:S.default_device)||void 0===m?void 0:m.type,c]),M=i.useMemo((function(){var e=Object.values(C).find((function(e){return Object.keys(e).length>0})),i=e?Object.values(e)[0]:null;if("never"===w.openParamUrlType)return!1;if(!(null==i?void 0:i.connected)||"in"!==(null==i?void 0:i.direction))return!1;if("button"===w.openParamUrlType){if(w.onlyQueues&&(null==i?void 0:i.throughQueue))return!0;if(!w.onlyQueues&&(o.isFromTrunk(i.counterpartNum)||(null==i?void 0:i.throughQueue)))return!0}return!1}),[C,w.onlyQueues,w.openParamUrlType]);return i.useEffect((function(){if(S&&j){var e=r.getAvailableDevices(S,j);U(e)}}),[S,j]),e.__assign(e.__assign({userInformation:S,availableDevices:D,videoInputDevices:k,isVideoCallButtonVisible:T,isUrlButtonEnabled:M,hasValidUrl:w.hasValidUrl},E),{goToVideoCall:I,goToScreenSharing:N,closeSideViewAndLaunchEvent:O})};
2
2
  //# sourceMappingURL=useSideViewLogic.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useSideViewLogic.js","sources":["../../../../src/components/SideView/hooks/useSideViewLogic.ts"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { Dispatch, RootState, store } from '../../../store'\nimport { getAvailableDevices } from '../../../utils/deviceUtils'\nimport JanusLib from '../../../lib/webrtc/janus.js'\nimport { checkWebCamPermission } from '../../../lib/devices/devices'\nimport { eventDispatch } from '../../../utils'\n\nexport const useSideViewLogic = (uaType?: string) => {\n const dispatch = useDispatch<Dispatch>()\n const userInformation = useSelector((state: RootState) => state.currentUser)\n const allUsersInformation = useSelector((state: RootState) => state.users)\n const paramUrlData = useSelector((state: RootState) => state.paramUrl)\n const videoInputDevices = store.select.mediaDevices.videoInputDevices(store.getState())\n const janus = useRef<any>(JanusLib)\n const conversations = useSelector((state: RootState) => state.currentUser.conversations)\n\n const [availableDevices, setAvailableDevices] = useState([])\n const [isVideoCallButtonVisible, setIsVideoCallButtonVisible] = useState(true)\n\n const closeSideViewAndLaunchEvent = useCallback(\n (viewType: any) => {\n dispatch.island.toggleSideViewVisible(false)\n if (viewType === 'openUrl') {\n const activeConversation = Object.values(conversations).find(\n (conv) => Object.keys(conv).length > 0,\n )\n const conversationData = activeConversation ? Object.values(activeConversation)[0] : null\n\n if (conversationData?.connected && conversationData?.direction === 'in') {\n const eventData = {\n counterpartNum: conversationData.counterpartNum,\n counterpartName: conversationData.counterpartName,\n owner: conversationData.owner,\n uniqueId: conversationData.uniqueId,\n throughQueue: conversationData.throughQueue,\n throughTrunk: conversationData.throughTrunk,\n direction: conversationData.direction,\n connected: conversationData.connected,\n }\n eventDispatch('phone-island-url-parameter-opened', eventData)\n }\n } else if (viewType !== null) {\n dispatch.island.setIslandView(viewType)\n }\n },\n [dispatch.island, conversations],\n )\n\n const checkCameraPermission = useCallback(async () => {\n if (videoInputDevices.length > 0) {\n const isWebCamAccepted = await checkWebCamPermission()\n setIsVideoCallButtonVisible(isWebCamAccepted)\n return isWebCamAccepted\n } else {\n setIsVideoCallButtonVisible(false)\n return false\n }\n }, [videoInputDevices.length])\n\n const goToVideoCall = useCallback(async () => {\n const cameraPermission = await checkCameraPermission()\n if (cameraPermission) {\n closeSideViewAndLaunchEvent('video')\n store.dispatch.currentCall.updateCurrentCall({\n isLocalVideoEnabled: true,\n isStartingVideoCall: true,\n })\n }\n }, [checkCameraPermission, closeSideViewAndLaunchEvent])\n\n const goToScreenSharing = useCallback(() => {\n closeSideViewAndLaunchEvent('video')\n store.dispatch.screenShare.update({\n isStartingScreenShare: true,\n })\n }, [closeSideViewAndLaunchEvent])\n\n const permissions = useMemo(\n () => userInformation?.profile?.macro_permissions || {},\n [userInformation?.profile?.macro_permissions],\n )\n\n const userCapabilities = useMemo(\n () => ({\n canRecord: permissions?.settings?.permissions?.recording?.value || false,\n canShareScreen:\n janus.current.webRTCAdapter.browserDetails.browser !== 'safari' &&\n (permissions?.nethvoice_cti?.permissions?.screen_sharing?.value || false),\n canSwitchDevice: availableDevices?.length > 0,\n }),\n [\n permissions?.settings?.permissions?.recording?.value,\n permissions?.nethvoice_cti?.permissions?.screen_sharing?.value,\n availableDevices?.length,\n userInformation?.default_device?.type,\n uaType,\n ],\n )\n\n const isUrlButtonEnabled = useMemo(() => {\n const activeConversation = Object.values(conversations).find(\n (conv) => Object.keys(conv).length > 0,\n )\n const conversationData = activeConversation ? Object.values(activeConversation)[0] : null\n\n // If param url type is 'never', return false\n if (paramUrlData.openParamUrlType === 'never') {\n return false\n }\n\n if (!conversationData?.connected || conversationData?.direction !== 'in') {\n return false\n }\n\n // open param url type is set to 'button'\n if (paramUrlData.openParamUrlType === 'button') {\n if (paramUrlData.onlyQueues && conversationData?.throughQueue) {\n return true\n } else if (\n !paramUrlData.onlyQueues &&\n (conversationData?.throughTrunk || conversationData?.throughQueue)\n ) {\n return true\n }\n }\n\n return false\n }, [conversations, paramUrlData.onlyQueues, paramUrlData.openParamUrlType])\n\n useEffect(() => {\n if (userInformation && allUsersInformation) {\n const devices = getAvailableDevices(userInformation, allUsersInformation)\n setAvailableDevices(devices)\n }\n }, [userInformation, allUsersInformation])\n\n return {\n userInformation,\n availableDevices,\n videoInputDevices,\n isVideoCallButtonVisible,\n isUrlButtonEnabled,\n hasValidUrl: paramUrlData.hasValidUrl,\n ...userCapabilities,\n goToVideoCall,\n goToScreenSharing,\n closeSideViewAndLaunchEvent,\n }\n}\n"],"names":["uaType","dispatch","useDispatch","userInformation","useSelector","state","currentUser","allUsersInformation","users","paramUrlData","paramUrl","videoInputDevices","store","select","mediaDevices","getState","janus","useRef","JanusLib","conversations","_j","useState","availableDevices","setAvailableDevices","_k","isVideoCallButtonVisible","setIsVideoCallButtonVisible","closeSideViewAndLaunchEvent","useCallback","viewType","island","toggleSideViewVisible","activeConversation","Object","values","find","conv","keys","length","conversationData","connected","direction","eventData","counterpartNum","counterpartName","owner","uniqueId","throughQueue","throughTrunk","eventDispatch","setIslandView","checkCameraPermission","__awaiter","checkWebCamPermission","isWebCamAccepted","_a","sent","goToVideoCall","currentCall","updateCurrentCall","isLocalVideoEnabled","isStartingVideoCall","goToScreenSharing","screenShare","update","isStartingScreenShare","permissions","useMemo","profile","macro_permissions","userCapabilities","canRecord","_c","settings","_b","recording","value","canShareScreen","current","webRTCAdapter","browserDetails","browser","_f","_e","nethvoice_cti","_d","screen_sharing","canSwitchDevice","_g","_h","default_device","type","isUrlButtonEnabled","openParamUrlType","onlyQueues","useEffect","devices","getAvailableDevices","__assign","hasValidUrl"],"mappings":"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"}
1
+ {"version":3,"file":"useSideViewLogic.js","sources":["../../../../src/components/SideView/hooks/useSideViewLogic.ts"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { Dispatch, RootState, store } from '../../../store'\nimport { getAvailableDevices } from '../../../utils/deviceUtils'\nimport JanusLib from '../../../lib/webrtc/janus.js'\nimport { isFromTrunk } from '../../../lib/user/extensions'\nimport { checkWebCamPermission } from '../../../lib/devices/devices'\nimport { eventDispatch } from '../../../utils'\n\nexport const useSideViewLogic = (uaType?: string) => {\n const dispatch = useDispatch<Dispatch>()\n const userInformation = useSelector((state: RootState) => state.currentUser)\n const allUsersInformation = useSelector((state: RootState) => state.users)\n const paramUrlData = useSelector((state: RootState) => state.paramUrl)\n const videoInputDevices = store.select.mediaDevices.videoInputDevices(store.getState())\n const janus = useRef<any>(JanusLib)\n const conversations = useSelector((state: RootState) => state.currentUser.conversations)\n\n const [availableDevices, setAvailableDevices] = useState([])\n const [isVideoCallButtonVisible, setIsVideoCallButtonVisible] = useState(true)\n\n const closeSideViewAndLaunchEvent = useCallback(\n (viewType: any) => {\n dispatch.island.toggleSideViewVisible(false)\n if (viewType === 'openUrl') {\n const activeConversation = Object.values(conversations).find(\n (conv) => Object.keys(conv).length > 0,\n )\n const conversationData = activeConversation ? Object.values(activeConversation)[0] : null\n\n if (conversationData?.connected && conversationData?.direction === 'in') {\n const eventData = {\n counterpartNum: conversationData.counterpartNum,\n counterpartName: conversationData.counterpartName,\n owner: conversationData.owner,\n uniqueId: conversationData.uniqueId,\n throughQueue: conversationData.throughQueue,\n throughTrunk: conversationData.throughTrunk,\n direction: conversationData.direction,\n connected: conversationData.connected,\n }\n eventDispatch('phone-island-url-parameter-opened', eventData)\n }\n } else if (viewType !== null) {\n dispatch.island.setIslandView(viewType)\n }\n },\n [dispatch.island, conversations],\n )\n\n const checkCameraPermission = useCallback(async () => {\n if (videoInputDevices.length > 0) {\n const isWebCamAccepted = await checkWebCamPermission()\n setIsVideoCallButtonVisible(isWebCamAccepted)\n return isWebCamAccepted\n } else {\n setIsVideoCallButtonVisible(false)\n return false\n }\n }, [videoInputDevices.length])\n\n const goToVideoCall = useCallback(async () => {\n const cameraPermission = await checkCameraPermission()\n if (cameraPermission) {\n closeSideViewAndLaunchEvent('video')\n store.dispatch.currentCall.updateCurrentCall({\n isLocalVideoEnabled: true,\n isStartingVideoCall: true,\n })\n }\n }, [checkCameraPermission, closeSideViewAndLaunchEvent])\n\n const goToScreenSharing = useCallback(() => {\n closeSideViewAndLaunchEvent('video')\n store.dispatch.screenShare.update({\n isStartingScreenShare: true,\n })\n }, [closeSideViewAndLaunchEvent])\n\n const permissions = useMemo(\n () => userInformation?.profile?.macro_permissions || {},\n [userInformation?.profile?.macro_permissions],\n )\n\n const userCapabilities = useMemo(\n () => ({\n canRecord: permissions?.settings?.permissions?.recording?.value || false,\n canShareScreen:\n janus.current.webRTCAdapter.browserDetails.browser !== 'safari' &&\n (permissions?.nethvoice_cti?.permissions?.screen_sharing?.value || false),\n canSwitchDevice: availableDevices?.length > 0,\n }),\n [\n permissions?.settings?.permissions?.recording?.value,\n permissions?.nethvoice_cti?.permissions?.screen_sharing?.value,\n availableDevices?.length,\n userInformation?.default_device?.type,\n uaType,\n ],\n )\n\n const isUrlButtonEnabled = useMemo(() => {\n const activeConversation = Object.values(conversations).find(\n (conv) => Object.keys(conv).length > 0,\n )\n const conversationData = activeConversation ? Object.values(activeConversation)[0] : null\n\n // If param url type is 'never', return false\n if (paramUrlData.openParamUrlType === 'never') {\n return false\n }\n\n if (!conversationData?.connected || conversationData?.direction !== 'in') {\n return false\n }\n\n // open param url type is set to 'button'\n if (paramUrlData.openParamUrlType === 'button') {\n if (paramUrlData.onlyQueues && conversationData?.throughQueue) {\n return true\n } else if (\n !paramUrlData.onlyQueues &&\n (isFromTrunk(conversationData.counterpartNum) || conversationData?.throughQueue)\n ) {\n return true\n }\n }\n\n return false\n }, [conversations, paramUrlData.onlyQueues, paramUrlData.openParamUrlType])\n\n useEffect(() => {\n if (userInformation && allUsersInformation) {\n const devices = getAvailableDevices(userInformation, allUsersInformation)\n setAvailableDevices(devices)\n }\n }, [userInformation, allUsersInformation])\n\n return {\n userInformation,\n availableDevices,\n videoInputDevices,\n isVideoCallButtonVisible,\n isUrlButtonEnabled,\n hasValidUrl: paramUrlData.hasValidUrl,\n ...userCapabilities,\n goToVideoCall,\n goToScreenSharing,\n closeSideViewAndLaunchEvent,\n }\n}\n"],"names":["uaType","dispatch","useDispatch","userInformation","useSelector","state","currentUser","allUsersInformation","users","paramUrlData","paramUrl","videoInputDevices","store","select","mediaDevices","getState","janus","useRef","JanusLib","conversations","_j","useState","availableDevices","setAvailableDevices","_k","isVideoCallButtonVisible","setIsVideoCallButtonVisible","closeSideViewAndLaunchEvent","useCallback","viewType","island","toggleSideViewVisible","activeConversation","Object","values","find","conv","keys","length","conversationData","connected","direction","eventData","counterpartNum","counterpartName","owner","uniqueId","throughQueue","throughTrunk","eventDispatch","setIslandView","checkCameraPermission","__awaiter","checkWebCamPermission","isWebCamAccepted","_a","sent","goToVideoCall","currentCall","updateCurrentCall","isLocalVideoEnabled","isStartingVideoCall","goToScreenSharing","screenShare","update","isStartingScreenShare","permissions","useMemo","profile","macro_permissions","userCapabilities","canRecord","_c","settings","_b","recording","value","canShareScreen","current","webRTCAdapter","browserDetails","browser","_f","_e","nethvoice_cti","_d","screen_sharing","canSwitchDevice","_g","_h","default_device","type","isUrlButtonEnabled","openParamUrlType","onlyQueues","isFromTrunk","useEffect","devices","getAvailableDevices","__assign","hasValidUrl"],"mappings":"moBASgC,SAACA,uBACzBC,EAAWC,EAAAA,cACXC,EAAkBC,EAAWA,aAAC,SAACC,GAAqB,OAAAA,EAAMC,WAAN,IACpDC,EAAsBH,EAAWA,aAAC,SAACC,GAAqB,OAAAA,EAAMG,KAAN,IACxDC,EAAeL,EAAWA,aAAC,SAACC,GAAqB,OAAAA,EAAMK,QAAN,IACjDC,EAAoBC,EAAKA,MAACC,OAAOC,aAAaH,kBAAkBC,EAAKA,MAACG,YACtEC,EAAQC,SAAYC,EAAAA,SACpBC,EAAgBf,eAAY,SAACC,GAAqB,OAAAA,EAAMC,YAAYa,aAAlB,IAElDC,EAA0CC,EAAAA,SAAS,IAAlDC,EAAgBF,EAAA,GAAEG,EAAmBH,EAAA,GACtCI,EAA0DH,EAAAA,UAAS,GAAlEI,EAAwBD,EAAA,GAAEE,EAA2BF,EAAA,GAEtDG,EAA8BC,eAClC,SAACC,GAEC,GADA5B,EAAS6B,OAAOC,uBAAsB,GACrB,YAAbF,EAAwB,CAC1B,IAAMG,EAAqBC,OAAOC,OAAOf,GAAegB,MACtD,SAACC,GAAS,OAAAH,OAAOI,KAAKD,GAAME,OAAS,CAAC,IAElCC,EAAmBP,EAAqBC,OAAOC,OAAOF,GAAoB,GAAK,KAErF,IAAIO,aAAA,EAAAA,EAAkBC,YAA6C,QAAhCD,aAAA,EAAAA,EAAkBE,WAAoB,CACvE,IAAMC,EAAY,CAChBC,eAAgBJ,EAAiBI,eACjCC,gBAAiBL,EAAiBK,gBAClCC,MAAON,EAAiBM,MACxBC,SAAUP,EAAiBO,SAC3BC,aAAcR,EAAiBQ,aAC/BC,aAAcT,EAAiBS,aAC/BP,UAAWF,EAAiBE,UAC5BD,UAAWD,EAAiBC,WAE9BS,gBAAc,oCAAqCP,EACpD,CACF,MAAuB,OAAbb,GACT5B,EAAS6B,OAAOoB,cAAcrB,EAEjC,GACD,CAAC5B,EAAS6B,OAAQX,IAGdgC,EAAwBvB,eAAY,WAAA,OAAAwB,EAAAA,eAAA,OAAA,OAAA,GAAA,+EACpC,OAAAzC,EAAkB2B,OAAS,EACE,CAAA,EAAAe,EAAqBA,yBADtB,CAAA,EAAA,UAG9B,OAFMC,EAAmBC,EAA6BC,OACtD9B,EAA4B4B,GAC5B,CAAA,EAAOA,UAGP,OADA5B,GAA4B,GAC5B,CAAA,GAAO,MAEV,GAAA,GAAE,CAACf,EAAkB2B,SAEhBmB,EAAgB7B,eAAY,WAAA,OAAAwB,EAAAA,eAAA,OAAA,OAAA,GAAA,yEACP,MAAM,CAAA,EAAAD,mBAANI,EAA6BC,SAEpD7B,EAA4B,SAC5Bf,QAAMX,SAASyD,YAAYC,kBAAkB,CAC3CC,qBAAqB,EACrBC,qBAAqB,YAG1B,GAAA,GAAE,CAACV,EAAuBxB,IAErBmC,EAAoBlC,EAAAA,aAAY,WACpCD,EAA4B,SAC5Bf,QAAMX,SAAS8D,YAAYC,OAAO,CAChCC,uBAAuB,GAE3B,GAAG,CAACtC,IAEEuC,EAAcC,WAClB,iBAAM,OAA0B,QAA1BZ,EAAApD,aAAe,EAAfA,EAAiBiE,eAAS,IAAAb,OAAA,EAAAA,EAAAc,oBAAqB,CAAA,CAAE,GACvD,CAAyB,QAAxBd,EAAApD,aAAA,EAAAA,EAAiBiE,eAAO,IAAAb,OAAA,EAAAA,EAAEc,oBAGvBC,EAAmBH,EAAAA,SACvB,2BAAM,MAAC,CACLI,WAA0D,QAA/CC,EAAkC,kBAAlCjB,EAAAW,aAAW,EAAXA,EAAaO,+BAAUP,mBAAW,IAAAQ,OAAA,EAAAA,EAAEC,iBAAW,IAAAH,OAAA,EAAAA,EAAAI,SAAS,EACnEC,eACyD,WAAvD7D,EAAM8D,QAAQC,cAAcC,eAAeC,mBAC1CC,EAAyC,QAAzCC,EAA0B,UAA1BjB,aAAA,EAAAA,EAAakB,qBAAa,IAAAC,OAAA,EAAAA,EAAEnB,mBAAa,IAAAiB,OAAA,EAAAA,EAAAG,qCAAgBV,SAAS,GACrEW,iBAAiBjE,eAAAA,EAAkBgB,QAAS,KAE9C,SACE+C,EAAoC,QAApCb,EAAuB,QAAvBE,EAAAR,aAAA,EAAAA,EAAaO,gBAAU,IAAAC,OAAA,EAAAA,EAAAR,mBAAa,IAAAM,OAAA,EAAAA,EAAAG,gCAAWC,cAC/CY,EAAyC,QAAzCN,EAA4B,QAA5BC,EAAAjB,aAAA,EAAAA,EAAakB,qBAAe,IAAAD,OAAA,EAAAA,EAAAjB,mBAAa,IAAAgB,OAAA,EAAAA,EAAAI,qCAAgBV,MACzDtD,aAAA,EAAAA,EAAkBgB,eAClBmD,EAAAtF,aAAe,EAAfA,EAAiBuF,qCAAgBC,KACjC3F,IAIE4F,EAAqBzB,EAAAA,SAAQ,WACjC,IAAMnC,EAAqBC,OAAOC,OAAOf,GAAegB,MACtD,SAACC,GAAS,OAAAH,OAAOI,KAAKD,GAAME,OAAS,CAAC,IAElCC,EAAmBP,EAAqBC,OAAOC,OAAOF,GAAoB,GAAK,KAGrF,GAAsC,UAAlCvB,EAAaoF,iBACf,OAAO,EAGT,KAAKtD,aAAA,EAAAA,EAAkBC,YAA6C,QAAhCD,aAAgB,EAAhBA,EAAkBE,WACpD,OAAO,EAIT,GAAsC,WAAlChC,EAAaoF,iBAA+B,CAC9C,GAAIpF,EAAaqF,aAAcvD,aAAgB,EAAhBA,EAAkBQ,cAC/C,OAAO,EACF,IACJtC,EAAaqF,aACbC,EAAAA,YAAYxD,EAAiBI,kBAAmBJ,eAAAA,EAAkBQ,eAEnE,OAAO,CAEV,CAED,OAAO,CACT,GAAG,CAAC5B,EAAeV,EAAaqF,WAAYrF,EAAaoF,mBASzD,OAPAG,EAAAA,WAAU,WACR,GAAI7F,GAAmBI,EAAqB,CAC1C,IAAM0F,EAAUC,EAAAA,oBAAoB/F,EAAiBI,GACrDgB,EAAoB0E,EACrB,CACH,GAAG,CAAC9F,EAAiBI,IAErB4F,WAAAA,EAAAA,SAAA,CACEhG,gBAAeA,EACfmB,iBAAgBA,EAChBX,kBAAiBA,EACjBc,yBAAwBA,EACxBmE,mBAAkBA,EAClBQ,YAAa3F,EAAa2F,aACvB9B,GACH,CAAAb,cAAaA,EACbK,kBAAiBA,EACjBnC,+BAEJ"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../node_modules/tslib/tslib.es6.js"),n=require("react");require("../node_modules/react-redux/es/index.js");var t=require("../node_modules/socket.io-client/build/esm/index.js"),r=require("../lib/phone/conversation.js"),o=require("../services/user.js"),i=require("../utils/genericFunctions/eventDispatch.js"),c=require("../utils/genericFunctions/withTimeout.js"),s=require("../store/index.js");require("../lib/webrtc/janus.js"),require("../node_modules/webrtc-adapter/src/js/adapter_core.js");var a=require("../lib/devices/devices.js"),u=require("../lib/user/default_device.js"),l=require("../utils/genericFunctions/isEmpty.js"),d=require("../utils/streaming/getStreamingSourceId.js"),p=require("../events/SocketEvents.js"),m=require("../utils/genericFunctions/timestamp.js"),g=require("../lib/user/extensions.js"),v=require("../utils/streaming/isFromStreaming.js"),f=require("../node_modules/react-redux/es/hooks/useSelector.js");require("../node_modules/react-redux/es/components/Context.js"),require("../node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js"),require("../node_modules/react-redux/node_modules/react-is/index.js");var h=require("../node_modules/react-redux/es/hooks/useDispatch.js");function S(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var y=S(n);exports.Socket=function(S){var b=S.hostName,k=S.username,C=S.authToken,_=S.reload,w=S.reloadedCallback,N=S.children,D=S.uaType,j=h.useDispatch(),U=n.useRef(),x=n.useRef(),T=n.useRef(!1);f.useSelector((function(e){return e.currentUser}));return n.useEffect((function(){var n=function(e){if(e.counterpartNum&&v.isFromStreaming(e.counterpartNum)){j.island.setIsFromStreaming(!0),j.currentCall.updateCurrentCall({streamingSourceNumber:e.counterpartNum});var n=d.getStreamingSourceId(e.counterpartNum);n&&o.subscribe({id:n}).catch((function(e){return console.error("Error subscribing to streaming source:",e)}))}},f=function(e,t){var c=s.store.getState().currentCall,a=c.transferring,l=c.transferSwitching,d=c.transferCalls,p=s.store.getState().island.view;if(Object.keys(t).length>0){if(e.status){var v=s.store.getState().users.extensions,f=s.store.getState().currentUser.default_device,h=s.store.getState().currentUser,S=h.endpoints,y=h.username,b=s.store.getState().currentCall;b.incoming,b.outgoing;var k=function(){if(!v||!y)return!1;var e=Object.values(v).filter((function(e){return(null==e?void 0:e.username)===y}));return null==e?void 0:e.some((function(e){var n=null==S?void 0:S.extension.find((function(n){return n.id===(null==e?void 0:e.exten)}));return"nethlink"===(null==n?void 0:n.type)&&"offline"!==(null==e?void 0:e.status)}))};switch(e.status){case"ringing":if(n(t),"mobile"===D&&k()||"desktop"===D&&("webrtc"===(null==f?void 0:f.type)||void 0===(null==f?void 0:f.type)&&!k()||!k()&&"physical"===(null==f?void 0:f.type))){T.current||(T.current=!0,o.getCurrentUserInfo().then((function(e){e&&(j.currentUser.updateCurrentUser(e),e.settings&&e.settings.open_param_url?j.paramUrl.setOpenParamUrlType(e.settings.open_param_url):j.paramUrl.setOpenParamUrlType("never"))})).catch((function(e){console.error("Error getting current user info:",e)})).finally((function(){setTimeout((function(){T.current=!1}),100)}))),j.currentCall.checkIncomingUpdatePlay({conversationId:t.id,displayName:r.getDisplayName(t),number:"".concat(t.counterpartNum),incomingSocket:!0,incoming:!0,username:"".concat(v&&v[t.counterpartNum]&&v[t.counterpartNum].username)||"",ownerExtension:t.owner}),t.id,r.getDisplayName(t),"".concat(t.counterpartNum),t.owner,"".concat(v&&v[t.counterpartNum]&&v[t.counterpartNum].username),null==t||t.chDest,null==t||t.chSource,t.direction,t.inConference,t.linkedId,t.uniqueId,t.throughQueue,t.throughTrunk,t.recording,s.store.dispatch.island.setIslandView("call"),i.eventDispatch("phone-island-call-ringing",{});var C=s.store.getState().paramUrl.openParamUrlType,_=s.store.getState().island.urlOpened;"ringing"!==C||_||(s.store.dispatch.island.setUrlOpened(!1),i.eventDispatch("phone-island-url-parameter-opened",{counterpartNum:t.counterpartNum,counterpartName:r.getDisplayName(t),owner:t.owner,uniqueId:t.uniqueId,throughQueue:t.throughQueue,throughTrunk:t.throughTrunk,direction:t.direction,connected:t.connected}))}break;case"busy":if(n(t),"mobile"===D&&k()||"desktop"===D&&("webrtc"===(null==f?void 0:f.type)||void 0===(null==f?void 0:f.type)&&!k()||!k()&&"physical"===(null==f?void 0:f.type))){if(t&&t.connected)j.currentCall.updateCurrentCall({conversationId:t.id,displayName:r.getDisplayName(t),number:"".concat(t.counterpartNum),ownerExtension:t.owner,username:"".concat(v&&v[t.counterpartNum]&&v[t.counterpartNum].username)||"",chDest:(null==t?void 0:t.chDest)||{},chSource:(null==t?void 0:t.chSource)||{}}),j.currentCall.checkAcceptedUpdate({acceptedSocket:!0}),j.currentCall.addTransferCalls({type:"transferred",displayName:r.getDisplayName(t),number:"".concat(t.counterpartNum),startTime:"".concat(m.getTimestampInSeconds())}),s.store.getState().island.isFromStreaming&&"out"===t.direction&&setTimeout((function(){j.island.setIslandView("streamingAnswer")}),200),u.isPhysical()&&function(e){j.currentCall.updateCurrentCall({conversationId:e.id,accepted:!0,incoming:"in"!==e.direction&&void 0}),i.eventDispatch("phone-island-call-answered",{}),s.store.dispatch.player.stopAudioPlayer(),s.store.dispatch.player.setAudioPlayerLoop(!1)}(t),"call"===p&&a&&j.currentCall.updateCurrentCall({transferring:!1});if(d.length>1)j.currentCall.deleteTransferCalls();else if(t&&!t.connected){if(a&&!l){var w=d.find((function(e){return e.number===t.counterpartNum}));!t.connected&&w&&(j.currentCall.updateCurrentCall({transferring:!1}),i.eventDispatch("phone-island-call-transfer-failed",{}),j.currentCall.updateTransferSwitching(!1))}"REC"===(null==t?void 0:t.counterpartName)&&j.physicalRecorder.setRecordingTempVariable(!0)}t&&!t.connected&&"out"===t.direction&&j.currentCall.checkOutgoingUpdate({outgoingSocket:!0,outgoing:"REC"!==(null==t?void 0:t.counterpartName),displayName:r.getDisplayName(t),number:"".concat(null==t?void 0:t.counterpartNum),username:"".concat(v&&v[null==t?void 0:t.counterpartNum]&&v[null==t?void 0:t.counterpartNum].username)||""})}break;case"onhold":var N=t.counterpartName,U=t.counterpartNum,x=t.startTime;a&&U&&N&&"<unknown>"!==N&&(j.currentCall.addTransferCalls({type:"destination",displayName:r.getDisplayName(t),number:U,startTime:"".concat(m.getTimestampInSeconds())}),j.currentCall.updateCurrentCall({displayName:r.getDisplayName(t),number:U,startTime:"".concat(x/1e3),conversationId:t.id}),j.island.setIslandView("call"));break;case"busy_ringing":i.eventDispatch("phone-island-call-ringing",{})}}}else"online"==e.status&&g.userTotallyFree()&&(j.player.stopAudioPlayer(),j.currentCall.reset(),j.physicalRecorder.setRecordingTempVariable(!1),j.island.setIsFromStreaming(!1))};return x.current=t.io("https://"+b,{upgrade:!1,transports:["websocket"],reconnection:!0,reconnectionDelay:2e3}),j.websocket.update({socket:x.current}),x.current.on("connect",(function(){console.debug("Socket connected sid: ".concat(x.current.id)),i.eventDispatch("phone-island-socket-connected",{})})),x.current.on("disconnect",(function(e){console.debug("Socket disconnect - reason: ".concat(e)),e.includes("server disconnect")?i.eventDispatch("phone-island-server-disconnected",{}):i.eventDispatch("phone-island-socket-disconnected",{})})),x.current.io.on("error",(function(e){console.debug("Socket error: ",e)})),x.current.on("connect_error",(function(e){console.debug("Socket connect_error: ",e)})),x.current.io.on("reconnect",(function(e){i.eventDispatch("phone-island-socket-reconnected",{}),console.debug("Socket reconnect attemp ".concat(e," (sid: ").concat(x.current.id,")"))})),x.current.io.on("reconnect_attempt",(function(e){console.debug("Socket reconnect_attempt ".concat(e))})),x.current.io.on("reconnect_error",(function(e){console.debug("Socket reconnect_error: ",e)})),x.current.io.on("reconnect_failed",(function(){console.debug("Socket reconnect_failed")})),U.current=setInterval((function(){x.current.volatile.emit("ping",c.withTimeout((function(){j.alerts.removeAlert("socket_down"),i.eventDispatch("phone-island-alert-removed",{type:"socket_down"}),i.eventDispatch("phone-island-socket-disconnected-popup-close",{})}),(function(){j.alerts.setAlert("socket_down"),i.eventDispatch("phone-island-socket-disconnected-popup-open",{}),console.error("Socket is unreachable!")}),7e3))}),7e3),x.current.on("connect",(function(){console.debug("Socket on: "+b+" is connected!"),x.current.emit("login",{accessKeyId:"".concat(k),token:C,uaType:D})})),x.current.on("authe_ok",(function(){console.debug("Socket authentication success!"),i.eventDispatch("phone-island-socket-authorized",{})})),x.current.on("userMainPresenceUpdate",(function(n){s.store.dispatch.users.updateEndpointMainPresence(e.__assign({},n.mainPresence)),p.dispatchMainPresence(n)})),x.current.on("extenHangup",(function(e){var n=s.store.getState().currentUser,t=n.endpoints,r=n.username,o=s.store.getState().conference,c=o.isActive,a=o.conferenceStartedFrom,u=s.store.getState().island.view,l=((null==t?void 0:t.extension)||[]).find((function(n){return n.id===e.callerNum})),d=null==l?void 0:l.type;"normal_clearing"===e.cause&&("physical"===d||"mobile"===d)||"user_busy"===(null==e?void 0:e.cause)||"not_defined"===(null==e?void 0:e.cause)||"call_rejected"===(null==e?void 0:e.cause)?(setTimeout((function(){s.store.dispatch.island.toggleAvoidToShow(!1)}),500),c&&a!==r&&s.store.dispatch.conference.resetConference()):"normal_circuit_congestion"===(null==e?void 0:e.cause)&&c&&a===r?i.eventDispatch("phone-island-view-changed",{viewType:"waitingConference"}):"normal_clearing"!==e.cause&&"user_busy"!==(null==e?void 0:e.cause)&&"not_defined"!==(null==e?void 0:e.cause)&&"call_rejected"!==(null==e?void 0:e.cause)||"webrtc"!==d&&"nethlink"!==d||!c||a===r||s.store.dispatch.conference.resetConference(),"interworking"===(null==e?void 0:e.cause)&&c&&a===r&&"waitingConference"!==u&&i.eventDispatch("phone-island-view-changed",{viewType:"waitingConference"})})),x.current.on("extenConnected",(function(e){var n=s.store.getState().currentUser,t=n.default_device,r=n.endpoints,o=((null==r?void 0:r.extension)||[]).find((function(n){return n.id===e.extenConnected})),c=null==o?void 0:o.type;(("webrtc"===(null==t?void 0:t.type)||"nethlink"===(null==t?void 0:t.type))&&c&&("mobile"===c||"physical"===c)||"physical"===(null==t?void 0:t.type)&&c&&"physical"!==c)&&(s.store.dispatch.island.toggleAvoidToShow(!0),i.eventDispatch("phone-island-call-answered",{extensionType:c}))})),x.current.on("extenUpdate",(function(e){j.users.updateExtension(e);var n=s.store.getState().users.extensions,t={};for(var r in n){var o=n[r].username,i=n[r].exten;t[o]||(t[o]=[]),t[o].push(i)}var c=t[e.username],a=e.conversations[Object.keys(e.conversations)[0]]||{};if(p.dispatchExtensions(e),l.isEmpty(a)){var u=null==c?void 0:c.some((function(e){var t,r=null===(t=n[e])||void 0===t?void 0:t.conversations;return!l.isEmpty(r)}));u||p.dispatchConversations(e)}else p.dispatchConversations(e);e.username===k&&(f(e,a),j.currentUser.updateConversations(e))})),x.current.on("queueUpdate",(function(e){p.dispatchQueueUpdate(e)})),x.current.on("queueMemberUpdate",(function(e){p.dispatchQueueMemberUpdate(e)})),x.current.on("takeOver",(function(){p.dispatchAlreadyLogin()})),x.current.on("serverReloaded",(function(){p.dispatchServerReload()})),x.current.on("parkingUpdate",(function(){p.dispatchParkingUpdate()})),x.current.on("actionNethLink",(function(e,n){p.dispatchUrlCall(e,n)})),x.current.on("message",(function(e){switch(e.message){case"screenSharingStart":j.island.toggleSideViewVisible(!1),j.island.setIslandView("video"),j.screenShare.update({isJoiningScreenShare:!0,room:e.roomId});break;case"screenSharingStop":j.island.toggleSideViewVisible(!1),j.island.setIslandView("video"),j.screenShare.update({isLeavingScreenShare:!0});break;default:console.warn("Socket: unknown message type ",e.message)}})),x.current.on("updateDefaultDevice",(function(n){p.dispatchDefaultDeviceUpdate(n);var t=s.store.getState().users.extensions,r=s.store.getState().currentUser.endpoints;if(t&&r){var o=Object.values(t).filter((function(e){return(null==e?void 0:e.exten)===n}));if(0!==o.length){var i=o[0],c=r.extension.find((function(e){return e.id===i.exten}));c&&(i=e.__assign(e.__assign({},i),{type:c.type})),s.store.dispatch.currentUser.updateCurrentDefaultDevice(i),a.checkMediaPermissions()}}})),x.current.on("confBridgeUpdate",(function(n){if(n&&(null==n?void 0:n.users)){var t=null==n?void 0:n.id,r=null==n?void 0:n.users,o=s.store.getState().conference.usersList,i=e.__assign({},r);o&&Object.keys(i).forEach((function(n){o[n]&&(i[n]=e.__assign(e.__assign({},i[n]),{muted:o[n].muted}))})),s.store.dispatch.conference.updateConferenceUsersList(i),s.store.dispatch.conference.updateConferenceId(t)}})),x.current.on("confBridgeEnd",(function(e){e&&(null==e?void 0:e.id)&&(s.store.dispatch.conference.resetConference(),i.eventDispatch("phone-island-conference-finished",{}))})),x.current.on("callWebrtc",(function(e){i.eventDispatch("phone-island-call-start",{number:e})})),x.current.on("newVoiceMessageCounter",(function(e){i.eventDispatch("phone-island-voicemail-received",{voicemailInfo:e})})),x.current.on("streamingSourceUpdate",(function(e){i.eventDispatch("phone-island-streaming-information-received",{res:e});var n=e.streaming||e.res&&e.res.streaming;if(n){var t=n.source,r=n.image;if(t&&r){s.store.getState().island.isFromStreaming;var o=s.store.getState().currentCall.streamingSourceNumber;d.getStreamingSourceId(o),j.streaming.updateSourceImage({source:t,image:r})}}})),function(){clearInterval(U.current),x.current.close()}}),[b,k,C,D,j]),n.useEffect((function(){_&&(console.info("websocket reconnection"),x.current.disconnect(),x.current.connect(),w())}),[_]),y.default.createElement(y.default.Fragment,null,N)};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../node_modules/tslib/tslib.es6.js"),n=require("react");require("../node_modules/react-redux/es/index.js");var t=require("../node_modules/socket.io-client/build/esm/index.js"),r=require("../lib/phone/conversation.js"),o=require("../services/user.js"),i=require("../utils/genericFunctions/eventDispatch.js"),c=require("../utils/genericFunctions/withTimeout.js"),s=require("../store/index.js");require("../lib/webrtc/janus.js"),require("../node_modules/webrtc-adapter/src/js/adapter_core.js");var a=require("../lib/devices/devices.js"),u=require("../lib/user/default_device.js"),l=require("../utils/genericFunctions/isEmpty.js"),d=require("../utils/streaming/getStreamingSourceId.js"),p=require("../events/SocketEvents.js"),m=require("../utils/genericFunctions/timestamp.js"),g=require("../lib/user/extensions.js"),v=require("../utils/streaming/isFromStreaming.js"),f=require("../node_modules/react-redux/es/hooks/useSelector.js");require("../node_modules/react-redux/es/components/Context.js"),require("../node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js"),require("../node_modules/react-redux/node_modules/react-is/index.js");var h=require("../node_modules/react-redux/es/hooks/useDispatch.js"),S=require("../lib/phone/trunk.js");function y(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var b=y(n);exports.Socket=function(y){var k=y.hostName,_=y.username,C=y.authToken,w=y.reload,N=y.reloadedCallback,D=y.children,j=y.uaType,U=h.useDispatch(),T=n.useRef(),x=n.useRef(),q=n.useRef(!1);f.useSelector((function(e){return e.currentUser}));return n.useEffect((function(){var n=function(e){if(e.counterpartNum&&v.isFromStreaming(e.counterpartNum)){U.island.setIsFromStreaming(!0),U.currentCall.updateCurrentCall({streamingSourceNumber:e.counterpartNum});var n=d.getStreamingSourceId(e.counterpartNum);n&&o.subscribe({id:n}).catch((function(e){return console.error("Error subscribing to streaming source:",e)}))}},f=function(t,c){var a=s.store.getState().currentCall,l=a.transferring,d=a.transferSwitching,p=a.transferCalls,v=s.store.getState().island.view;if(Object.keys(c).length>0){if(t.status){var f=s.store.getState().users.extensions,h=s.store.getState().currentUser.default_device,y=s.store.getState().currentUser,b=y.endpoints,k=y.username,_=s.store.getState().currentCall;_.incoming,_.outgoing;var C=function(){if(!f||!k)return!1;var e=Object.values(f).filter((function(e){return(null==e?void 0:e.username)===k}));return null==e?void 0:e.some((function(e){var n=null==b?void 0:b.extension.find((function(n){return n.id===(null==e?void 0:e.exten)}));return"nethlink"===(null==n?void 0:n.type)&&"offline"!==(null==e?void 0:e.status)}))};switch(t.status){case"ringing":if(n(c),"mobile"===j&&C()||"desktop"===j&&("webrtc"===(null==h?void 0:h.type)||void 0===(null==h?void 0:h.type)&&!C()||!C()&&"physical"===(null==h?void 0:h.type))){q.current||(q.current=!0,o.getCurrentUserInfo().then((function(n){n&&(U.currentUser.updateCurrentUser(n),i.eventDispatch("phone-island-user-informations-update",e.__assign({},n)),n.settings&&n.settings.open_param_url?U.paramUrl.setOpenParamUrlType(n.settings.open_param_url):U.paramUrl.setOpenParamUrlType("never"))})).catch((function(e){console.error("Error getting current user info:",e)})).finally((function(){setTimeout((function(){q.current=!1}),100)}))),U.currentCall.checkIncomingUpdatePlay({conversationId:c.id,displayName:r.getDisplayName(c),number:"".concat(c.counterpartNum),incomingSocket:!0,incoming:!0,username:"".concat(f&&f[c.counterpartNum]&&f[c.counterpartNum].username)||"",ownerExtension:c.owner}),c.id,r.getDisplayName(c),"".concat(c.counterpartNum),c.owner,"".concat(f&&f[c.counterpartNum]&&f[c.counterpartNum].username),null==c||c.chDest,null==c||c.chSource,c.direction,c.inConference,c.linkedId,c.uniqueId,c.throughQueue,c.throughTrunk,c.recording,s.store.dispatch.island.setIslandView("call"),i.eventDispatch("phone-island-call-ringing",{});var w=s.store.getState().paramUrl.openParamUrlType,N=s.store.getState().island.urlOpened;if("ringing"===w&&!N){var D=S.isFromTrunk(c.counterpartNum);s.store.dispatch.paramUrl.setThroughTrunk(D),s.store.dispatch.island.setUrlOpened(!1),i.eventDispatch("phone-island-url-parameter-opened",{counterpartNum:c.counterpartNum,counterpartName:r.getDisplayName(c),owner:c.owner,uniqueId:c.uniqueId,throughQueue:c.throughQueue,throughTrunk:D,direction:c.direction,connected:c.connected})}}break;case"busy":if(n(c),"mobile"===j&&C()||"desktop"===j&&("webrtc"===(null==h?void 0:h.type)||void 0===(null==h?void 0:h.type)&&!C()||!C()&&"physical"===(null==h?void 0:h.type))){if(c&&c.connected)U.currentCall.updateCurrentCall({conversationId:c.id,displayName:r.getDisplayName(c),number:"".concat(c.counterpartNum),ownerExtension:c.owner,username:"".concat(f&&f[c.counterpartNum]&&f[c.counterpartNum].username)||"",chDest:(null==c?void 0:c.chDest)||{},chSource:(null==c?void 0:c.chSource)||{}}),U.currentCall.checkAcceptedUpdate({acceptedSocket:!0}),U.currentCall.addTransferCalls({type:"transferred",displayName:r.getDisplayName(c),number:"".concat(c.counterpartNum),startTime:"".concat(m.getTimestampInSeconds())}),s.store.getState().island.isFromStreaming&&"out"===c.direction&&setTimeout((function(){U.island.setIslandView("streamingAnswer")}),200),u.isPhysical()&&function(e){U.currentCall.updateCurrentCall({conversationId:e.id,accepted:!0,incoming:"in"!==e.direction&&void 0}),i.eventDispatch("phone-island-call-answered",{}),s.store.dispatch.player.stopAudioPlayer(),s.store.dispatch.player.setAudioPlayerLoop(!1)}(c),"call"===v&&l&&U.currentCall.updateCurrentCall({transferring:!1});if(p.length>1)U.currentCall.deleteTransferCalls();else if(c&&!c.connected){if(l&&!d){var T=p.find((function(e){return e.number===c.counterpartNum}));!c.connected&&T&&(U.currentCall.updateCurrentCall({transferring:!1}),i.eventDispatch("phone-island-call-transfer-failed",{}),U.currentCall.updateTransferSwitching(!1))}"REC"===(null==c?void 0:c.counterpartName)&&U.physicalRecorder.setRecordingTempVariable(!0)}c&&!c.connected&&"out"===c.direction&&U.currentCall.checkOutgoingUpdate({outgoingSocket:!0,outgoing:"REC"!==(null==c?void 0:c.counterpartName),displayName:r.getDisplayName(c),number:"".concat(null==c?void 0:c.counterpartNum),username:"".concat(f&&f[null==c?void 0:c.counterpartNum]&&f[null==c?void 0:c.counterpartNum].username)||""})}break;case"onhold":var x=c.counterpartName,I=c.counterpartNum,E=c.startTime;l&&I&&x&&"<unknown>"!==x&&(U.currentCall.addTransferCalls({type:"destination",displayName:r.getDisplayName(c),number:I,startTime:"".concat(m.getTimestampInSeconds())}),U.currentCall.updateCurrentCall({displayName:r.getDisplayName(c),number:I,startTime:"".concat(E/1e3),conversationId:c.id}),U.island.setIslandView("call"));break;case"busy_ringing":i.eventDispatch("phone-island-call-ringing",{})}}}else"online"==t.status&&g.userTotallyFree()&&(U.player.stopAudioPlayer(),U.currentCall.reset(),U.physicalRecorder.setRecordingTempVariable(!1),U.island.setIsFromStreaming(!1))};return x.current=t.io("https://"+k,{upgrade:!1,transports:["websocket"],reconnection:!0,reconnectionDelay:2e3}),U.websocket.update({socket:x.current}),x.current.on("connect",(function(){console.debug("Socket connected sid: ".concat(x.current.id)),i.eventDispatch("phone-island-socket-connected",{})})),x.current.on("disconnect",(function(e){console.debug("Socket disconnect - reason: ".concat(e)),e.includes("server disconnect")?i.eventDispatch("phone-island-server-disconnected",{}):i.eventDispatch("phone-island-socket-disconnected",{})})),x.current.io.on("error",(function(e){console.debug("Socket error: ",e)})),x.current.on("connect_error",(function(e){console.debug("Socket connect_error: ",e)})),x.current.io.on("reconnect",(function(e){i.eventDispatch("phone-island-socket-reconnected",{}),console.debug("Socket reconnect attemp ".concat(e," (sid: ").concat(x.current.id,")"))})),x.current.io.on("reconnect_attempt",(function(e){console.debug("Socket reconnect_attempt ".concat(e))})),x.current.io.on("reconnect_error",(function(e){console.debug("Socket reconnect_error: ",e)})),x.current.io.on("reconnect_failed",(function(){console.debug("Socket reconnect_failed")})),T.current=setInterval((function(){x.current.volatile.emit("ping",c.withTimeout((function(){U.alerts.removeAlert("socket_down"),i.eventDispatch("phone-island-alert-removed",{type:"socket_down"}),i.eventDispatch("phone-island-socket-disconnected-popup-close",{})}),(function(){U.alerts.setAlert("socket_down"),i.eventDispatch("phone-island-socket-disconnected-popup-open",{}),console.error("Socket is unreachable!")}),7e3))}),7e3),x.current.on("connect",(function(){console.debug("Socket on: "+k+" is connected!"),x.current.emit("login",{accessKeyId:"".concat(_),token:C,uaType:j})})),x.current.on("authe_ok",(function(){console.debug("Socket authentication success!"),i.eventDispatch("phone-island-socket-authorized",{})})),x.current.on("userMainPresenceUpdate",(function(n){s.store.dispatch.users.updateEndpointMainPresence(e.__assign({},n.mainPresence)),p.dispatchMainPresence(n)})),x.current.on("extenHangup",(function(e){var n=s.store.getState().currentUser,t=n.endpoints,r=n.username,o=s.store.getState().conference,c=o.isActive,a=o.conferenceStartedFrom,u=s.store.getState().island.view,l=((null==t?void 0:t.extension)||[]).find((function(n){return n.id===e.callerNum})),d=null==l?void 0:l.type;"normal_clearing"===e.cause&&("physical"===d||"mobile"===d)||"user_busy"===(null==e?void 0:e.cause)||"not_defined"===(null==e?void 0:e.cause)||"call_rejected"===(null==e?void 0:e.cause)?(setTimeout((function(){s.store.dispatch.island.toggleAvoidToShow(!1)}),500),c&&a!==r&&s.store.dispatch.conference.resetConference()):"normal_circuit_congestion"===(null==e?void 0:e.cause)&&c&&a===r?i.eventDispatch("phone-island-view-changed",{viewType:"waitingConference"}):"normal_clearing"!==e.cause&&"user_busy"!==(null==e?void 0:e.cause)&&"not_defined"!==(null==e?void 0:e.cause)&&"call_rejected"!==(null==e?void 0:e.cause)||"webrtc"!==d&&"nethlink"!==d||!c||a===r||s.store.dispatch.conference.resetConference(),"interworking"===(null==e?void 0:e.cause)&&c&&a===r&&"waitingConference"!==u&&i.eventDispatch("phone-island-view-changed",{viewType:"waitingConference"})})),x.current.on("extenConnected",(function(e){var n=s.store.getState().currentUser,t=n.default_device,r=n.endpoints,o=((null==r?void 0:r.extension)||[]).find((function(n){return n.id===e.extenConnected})),c=null==o?void 0:o.type;(("webrtc"===(null==t?void 0:t.type)||"nethlink"===(null==t?void 0:t.type))&&c&&("mobile"===c||"physical"===c)||"physical"===(null==t?void 0:t.type)&&c&&"physical"!==c)&&(s.store.dispatch.island.toggleAvoidToShow(!0),i.eventDispatch("phone-island-call-answered",{extensionType:c}))})),x.current.on("extenUpdate",(function(e){U.users.updateExtension(e);var n=s.store.getState().users.extensions,t={};for(var r in n){var o=n[r].username,i=n[r].exten;t[o]||(t[o]=[]),t[o].push(i)}var c=t[e.username],a=e.conversations[Object.keys(e.conversations)[0]]||{};if(p.dispatchExtensions(e),l.isEmpty(a)){var u=null==c?void 0:c.some((function(e){var t,r=null===(t=n[e])||void 0===t?void 0:t.conversations;return!l.isEmpty(r)}));u||p.dispatchConversations(e)}else p.dispatchConversations(e);e.username===_&&(f(e,a),U.currentUser.updateConversations(e))})),x.current.on("queueUpdate",(function(e){p.dispatchQueueUpdate(e)})),x.current.on("queueMemberUpdate",(function(e){p.dispatchQueueMemberUpdate(e)})),x.current.on("takeOver",(function(){p.dispatchAlreadyLogin()})),x.current.on("serverReloaded",(function(){p.dispatchServerReload()})),x.current.on("parkingUpdate",(function(){p.dispatchParkingUpdate()})),x.current.on("actionNethLink",(function(e,n){p.dispatchUrlCall(e,n)})),x.current.on("message",(function(e){switch(e.message){case"screenSharingStart":U.island.toggleSideViewVisible(!1),U.island.setIslandView("video"),U.screenShare.update({isJoiningScreenShare:!0,room:e.roomId});break;case"screenSharingStop":U.island.toggleSideViewVisible(!1),U.island.setIslandView("video"),U.screenShare.update({isLeavingScreenShare:!0});break;default:console.warn("Socket: unknown message type ",e.message)}})),x.current.on("updateDefaultDevice",(function(n){p.dispatchDefaultDeviceUpdate(n);var t=s.store.getState().users.extensions,r=s.store.getState().currentUser.endpoints;if(t&&r){var o=Object.values(t).filter((function(e){return(null==e?void 0:e.exten)===n}));if(0!==o.length){var i=o[0],c=r.extension.find((function(e){return e.id===i.exten}));c&&(i=e.__assign(e.__assign({},i),{type:c.type})),s.store.dispatch.currentUser.updateCurrentDefaultDevice(i),a.checkMediaPermissions()}}})),x.current.on("confBridgeUpdate",(function(n){if(n&&(null==n?void 0:n.users)){var t=null==n?void 0:n.id,r=null==n?void 0:n.users,o=s.store.getState().conference.usersList,i=e.__assign({},r);o&&Object.keys(i).forEach((function(n){o[n]&&(i[n]=e.__assign(e.__assign({},i[n]),{muted:o[n].muted}))})),s.store.dispatch.conference.updateConferenceUsersList(i),s.store.dispatch.conference.updateConferenceId(t)}})),x.current.on("confBridgeEnd",(function(e){e&&(null==e?void 0:e.id)&&(s.store.dispatch.conference.resetConference(),i.eventDispatch("phone-island-conference-finished",{}))})),x.current.on("callWebrtc",(function(e){i.eventDispatch("phone-island-call-start",{number:e})})),x.current.on("newVoiceMessageCounter",(function(e){i.eventDispatch("phone-island-voicemail-received",{voicemailInfo:e})})),x.current.on("streamingSourceUpdate",(function(e){i.eventDispatch("phone-island-streaming-information-received",{res:e});var n=e.streaming||e.res&&e.res.streaming;if(n){var t=n.source,r=n.image;if(t&&r){s.store.getState().island.isFromStreaming;var o=s.store.getState().currentCall.streamingSourceNumber;d.getStreamingSourceId(o),U.streaming.updateSourceImage({source:t,image:r})}}})),function(){clearInterval(T.current),x.current.close()}}),[k,_,C,j,U]),n.useEffect((function(){w&&(console.info("websocket reconnection"),x.current.disconnect(),x.current.connect(),N())}),[w]),b.default.createElement(b.default.Fragment,null,D)};
2
2
  //# sourceMappingURL=Socket.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Socket.js","sources":["../../src/components/Socket.tsx"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type ReactNode, FC, useEffect, useRef } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { Dispatch, RootState } from '../store'\nimport { io } from 'socket.io-client'\nimport { getDisplayName } from '../lib/phone/conversation'\nimport { getCurrentUserInfo } from '../services/user'\nimport {\n dispatchMainPresence,\n dispatchConversations,\n dispatchQueueUpdate,\n dispatchQueueMemberUpdate,\n dispatchAlreadyLogin,\n dispatchServerReload,\n dispatchParkingUpdate,\n dispatchExtensions,\n dispatchUrlCall,\n dispatchDefaultDeviceUpdate,\n} from '../events'\nimport { store } from '../store'\nimport { eventDispatch, withTimeout } from '../utils'\nimport type {\n ConversationTypes,\n ExtensionTypes,\n QueuesUpdateTypes,\n QueueUpdateMemberTypes,\n MainPresenceTypes,\n} from '../types'\nimport { getTimestampInSeconds } from '../utils/genericFunctions/timestamp'\nimport { userTotallyFree } from '../lib/user/extensions'\nimport { isEmpty } from '../utils/genericFunctions/isEmpty'\nimport { isPhysical } from '../lib/user/default_device'\nimport { ScreenSharingMessage } from './VideoView'\nimport { checkMediaPermissions } from '../lib/devices/devices'\nimport { isFromStreaming } from '../utils/streaming/isFromStreaming'\nimport { getStreamingSourceId } from '../utils/streaming/getStreamingSourceId'\nimport { subscribe } from '../services/user'\n\ninterface SocketProps {\n children: ReactNode\n hostName: string\n username: string\n authToken: string\n reload: boolean\n reloadedCallback: () => void\n uaType: string\n}\n\nexport const Socket: FC<SocketProps> = ({\n hostName,\n username,\n authToken,\n reload,\n reloadedCallback,\n children,\n uaType,\n}) => {\n const dispatch = useDispatch<Dispatch>()\n const connectionCheckInterval = useRef<any>()\n const socket = useRef<any>()\n const isUpdatingUserInfo = useRef(false)\n\n // get user information\n const userInformation = useSelector((state: RootState) => state.currentUser)\n\n const checkDefaultDeviceConversationActive = (conv: any) => {\n dispatch.currentCall.updateCurrentCall({\n conversationId: conv.id,\n accepted: true,\n incoming: conv.direction === 'in' ? false : undefined,\n })\n eventDispatch('phone-island-call-answered', {})\n\n // Stop the local audio element ringing\n store.dispatch.player.stopAudioPlayer()\n store.dispatch.player.setAudioPlayerLoop(false)\n }\n\n const checkDefaultDeviceConversationClosed = (conv: any) => {\n // store.dispatch.player.stopAudioPlayer()\n store.dispatch.currentCall.reset()\n // store.dispatch.listen.reset()\n }\n\n useEffect(() => {\n /**\n * Helper function to handle streaming source detection and subscription\n */\n const handleStreamingSource = (conv: ConversationTypes) => {\n // Check if the call is from a streaming source\n if (conv.counterpartNum && isFromStreaming(conv.counterpartNum)) {\n // Set isFromStreaming flag to true\n dispatch.island.setIsFromStreaming(true)\n\n // Store the streaming source number in the currentCall state for future reference\n dispatch.currentCall.updateCurrentCall({\n streamingSourceNumber: conv.counterpartNum,\n })\n\n // Find the source ID and subscribe to streaming updates\n const sourceId = getStreamingSourceId(conv.counterpartNum)\n if (sourceId) {\n // Subscribe to streaming updates\n subscribe({ id: sourceId })\n .catch((error) =>\n console.error('Error subscribing to streaming source:', error),\n )\n }\n }\n }\n\n /**\n * Manages event and data for the currentUser\n *\n * @param res The data from the socket\n * @param conv The conversation data\n */\n const handleCurrentUserEvents = (res: ExtensionTypes, conv: ConversationTypes) => {\n // Handle transferring data\n const { transferring, transferSwitching, transferCalls } = store.getState().currentCall\n\n const view = store.getState().island.view\n // Check conversation isn't empty\n if (Object.keys(conv).length > 0) {\n // With conversation\n if (res.status) {\n const { extensions } = store.getState().users\n const { default_device } = store.getState().currentUser\n const { endpoints, username } = store.getState().currentUser\n const { incoming, outgoing } = store.getState().currentCall\n\n const hasOnlineNethlink = () => {\n if (!extensions || !username) return false\n\n // Get all extensions for current user\n const userExtensions: any = Object.values(extensions).filter(\n (ext) => ext?.username === username,\n )\n\n // Check if any extension is nethlink type and online\n return userExtensions?.some((ext) => {\n const endpointExtension = endpoints?.extension.find(\n (endpoint) => endpoint.id === ext?.exten,\n )\n return endpointExtension?.type === 'nethlink' && ext?.status !== 'offline'\n })\n }\n switch (res.status) {\n case 'ringing':\n // Handle streaming source for incoming calls\n handleStreamingSource(conv)\n\n if (\n (uaType === 'mobile' && hasOnlineNethlink()) ||\n (uaType === 'desktop' &&\n (default_device?.type === 'webrtc' ||\n (default_device?.type === undefined && !hasOnlineNethlink()) ||\n (!hasOnlineNethlink() && default_device?.type === 'physical')))\n ) {\n // Get updated user info\n if (!isUpdatingUserInfo.current) {\n isUpdatingUserInfo.current = true\n getCurrentUserInfo().then((userInfo) => {\n if (userInfo) {\n dispatch.currentUser.updateCurrentUser(userInfo)\n if (userInfo.settings && userInfo.settings.open_param_url) {\n dispatch.paramUrl.setOpenParamUrlType(userInfo.settings.open_param_url);\n } else {\n dispatch.paramUrl.setOpenParamUrlType('never');\n }\n }\n }).catch((error) => {\n console.error('Error getting current user info:', error)\n }).finally(() => {\n setTimeout(() => {\n isUpdatingUserInfo.current = false\n }, 100)\n })\n }\n dispatch.currentCall.checkIncomingUpdatePlay({\n conversationId: conv.id,\n displayName: getDisplayName(conv),\n number: `${conv.counterpartNum}`,\n incomingSocket: true,\n incoming: true,\n username:\n `${extensions &&\n extensions[conv.counterpartNum] &&\n extensions[conv.counterpartNum].username\n }` || '',\n ownerExtension: conv.owner,\n\n })\n let callInformations = {\n conversationId: conv.id,\n displayName: getDisplayName(conv),\n counterpartNum: `${conv.counterpartNum}`,\n ownerExtension: conv.owner,\n username:\n `${extensions &&\n extensions[conv.counterpartNum] &&\n extensions[conv.counterpartNum].username\n }` || '',\n chDest: conv?.chDest || {},\n chSource: conv?.chSource || {},\n direction: conv.direction,\n inConference: conv.inConference,\n linkedId: conv.linkedId,\n uniqueId: conv.uniqueId,\n throughQueue: conv.throughQueue,\n throughTrunk: conv.throughTrunk,\n recording: conv.recording,\n }\n store.dispatch.island.setIslandView('call')\n\n eventDispatch('phone-island-call-ringing', {})\n const { openParamUrlType } = store.getState().paramUrl\n const { urlOpened } = store.getState().island\n\n if (openParamUrlType === 'ringing' && !urlOpened) {\n store.dispatch.island.setUrlOpened(false)\n eventDispatch('phone-island-url-parameter-opened', {\n counterpartNum: conv.counterpartNum,\n counterpartName: getDisplayName(conv),\n owner: conv.owner,\n uniqueId: conv.uniqueId,\n throughQueue: conv.throughQueue,\n throughTrunk: conv.throughTrunk,\n direction: conv.direction,\n connected: conv.connected\n })\n }\n }\n break\n // @ts-ignore\n case 'busy':\n // Handle streaming source for outgoing calls\n handleStreamingSource(conv)\n\n if (\n (uaType === 'mobile' && hasOnlineNethlink()) ||\n (uaType === 'desktop' &&\n (default_device?.type === 'webrtc' ||\n (default_device?.type === undefined && !hasOnlineNethlink()) ||\n (!hasOnlineNethlink() && default_device?.type === 'physical')))\n ) {\n if (conv && conv.connected) {\n // Current call accepted and update connected call\n dispatch.currentCall.updateCurrentCall({\n conversationId: conv.id,\n displayName: getDisplayName(conv),\n number: `${conv.counterpartNum}`,\n ownerExtension: conv.owner,\n username:\n `${extensions &&\n extensions[conv.counterpartNum] &&\n extensions[conv.counterpartNum].username\n }` || '',\n chDest: conv?.chDest || {},\n chSource: conv?.chSource || {},\n })\n // Update the current call informations for physical devices\n dispatch.currentCall.checkAcceptedUpdate({\n acceptedSocket: true,\n })\n // Add call to transfer calls\n dispatch.currentCall.addTransferCalls({\n type: 'transferred',\n displayName: getDisplayName(conv),\n number: `${conv.counterpartNum}`,\n startTime: `${getTimestampInSeconds()}`,\n })\n\n // Check if this is a streaming call that was accepted\n const { isFromStreaming } = store.getState().island\n if (isFromStreaming && conv.direction === 'out') {\n // Set view to streamingAnswer for outgoing streaming calls when accepted\n setTimeout(() => {\n dispatch.island.setIslandView('streamingAnswer')\n }, 200)\n }\n\n if (isPhysical()) {\n checkDefaultDeviceConversationActive(conv)\n }\n if (view === 'call' && transferring) {\n dispatch.currentCall.updateCurrentCall({\n transferring: false,\n })\n }\n }\n // Delete transfer calls if there are more than one ( in case of call switch after transfer)\n if (transferCalls.length > 1) {\n dispatch.currentCall.deleteTransferCalls()\n }\n // Handle not connected calls\n else if (conv && !conv.connected) {\n if (transferring && !transferSwitching) {\n // Handle hangup during transfer\n const inTransferCalls = transferCalls.find(\n (item) => item.number === conv.counterpartNum,\n )\n if (!conv.connected && inTransferCalls) {\n // Update transferring data for the current call\n dispatch.currentCall.updateCurrentCall({\n transferring: false,\n })\n eventDispatch('phone-island-call-transfer-failed', {})\n // Reset transfer switching\n // TODO - It needs to enhance how conversation connections (conv.connected) are updated server side\n // TODO - The transfer end is not handled when the an user hangups or after call switch\n dispatch.currentCall.updateTransferSwitching(false)\n }\n }\n if (conv?.counterpartName === 'REC') {\n dispatch.physicalRecorder.setRecordingTempVariable(true)\n }\n }\n // Handle outgoing call\n if (conv && !conv.connected && conv.direction === 'out') {\n // Update the current outgoing conversation\n dispatch.currentCall.checkOutgoingUpdate({\n outgoingSocket: true,\n outgoing: conv?.counterpartName === 'REC' ? false : true,\n displayName: getDisplayName(conv),\n number: `${conv?.counterpartNum}`,\n username:\n `${extensions &&\n extensions[conv?.counterpartNum] &&\n extensions[conv?.counterpartNum].username\n }` || '',\n })\n }\n }\n break\n\n case 'onhold':\n // The new conversation during transferring\n const { counterpartName, counterpartNum, startTime } = conv\n if (\n transferring &&\n counterpartNum &&\n counterpartName &&\n counterpartName !== '<unknown>'\n ) {\n // Add call to transfer calls\n dispatch.currentCall.addTransferCalls({\n type: 'destination',\n displayName: getDisplayName(conv),\n number: counterpartNum,\n startTime: `${getTimestampInSeconds()}`,\n })\n // Set the current call informations\n dispatch.currentCall.updateCurrentCall({\n displayName: getDisplayName(conv),\n number: counterpartNum,\n startTime: `${startTime / 1000}`,\n conversationId: conv.id,\n })\n // Set the view of the island to call\n dispatch.island.setIslandView('call')\n }\n break\n case 'busy_ringing':\n eventDispatch('phone-island-call-ringing', {})\n break\n default:\n break\n }\n }\n } else {\n // Without conversation for physical phone management\n if (res.status == 'online' && userTotallyFree()) {\n // Stop ringing sounds\n dispatch.player.stopAudioPlayer()\n // Reset current call info\n dispatch.currentCall.reset()\n dispatch.physicalRecorder.setRecordingTempVariable(false)\n // Reset isFromStreaming flag\n dispatch.island.setIsFromStreaming(false)\n }\n }\n }\n\n /**\n * Initialize socket connection and listeners\n */\n const initSocketConnection = () => {\n socket.current = io('https://' + hostName, {\n upgrade: false,\n transports: ['websocket'],\n reconnection: true,\n reconnectionDelay: 2000,\n })\n\n // save websocket to store\n dispatch.websocket.update({ socket: socket.current })\n\n // Handle socket errors\n socket.current.on('connect', () => {\n console.debug(`Socket connected sid: ${socket.current.id}`)\n eventDispatch('phone-island-socket-connected', {})\n })\n socket.current.on('disconnect', (reason) => {\n console.debug(`Socket disconnect - reason: ${reason}`)\n if (reason.includes('server disconnect')) {\n eventDispatch('phone-island-server-disconnected', {})\n } else {\n eventDispatch('phone-island-socket-disconnected', {})\n }\n })\n socket.current.io.on('error', (err) => {\n console.debug(`Socket error: `, err)\n })\n socket.current.on('connect_error', (err) => {\n console.debug(`Socket connect_error: `, err)\n })\n socket.current.io.on('reconnect', (attempt) => {\n eventDispatch('phone-island-socket-reconnected', {})\n console.debug(`Socket reconnect attemp ${attempt} (sid: ${socket.current.id})`)\n })\n socket.current.io.on('reconnect_attempt', (attempt) => {\n console.debug(`Socket reconnect_attempt ${attempt}`)\n })\n socket.current.io.on('reconnect_error', (err) => {\n console.debug(`Socket reconnect_error: `, err)\n })\n socket.current.io.on('reconnect_failed', () => {\n console.debug(`Socket reconnect_failed`)\n })\n\n // Checks if socket is reachable every 5 seconds\n connectionCheckInterval.current = setInterval(() => {\n const start = Date.now()\n socket.current.volatile.emit(\n 'ping',\n withTimeout(\n () => {\n // Remove socket_down alert\n dispatch.alerts.removeAlert('socket_down')\n eventDispatch('phone-island-alert-removed', {\n type: 'socket_down',\n })\n eventDispatch('phone-island-socket-disconnected-popup-close', {})\n },\n () => {\n // Set socket_down alert\n dispatch.alerts.setAlert('socket_down')\n eventDispatch('phone-island-socket-disconnected-popup-open', {})\n console.error('Socket is unreachable!')\n },\n 7 * 1000, // Waits for the response 7 seconds\n ),\n )\n }, 7 * 1000) // Executes a new check every 7 seconds\n\n // Handle connection message\n socket.current.on('connect', () => {\n console.debug('Socket on: ' + hostName + ' is connected!')\n socket.current.emit('login', {\n accessKeyId: `${username}`,\n token: authToken,\n uaType: uaType,\n })\n })\n\n // Handle authentication success message\n socket.current.on('authe_ok', () => {\n console.debug('Socket authentication success!')\n eventDispatch('phone-island-socket-authorized', {})\n })\n\n socket.current.on('userMainPresenceUpdate', (res: MainPresenceTypes) => {\n // Update endpoints store\n store.dispatch.users.updateEndpointMainPresence({ ...res.mainPresence })\n // Dispatch dispatchMainPresence Event\n dispatchMainPresence(res)\n })\n\n socket.current.on('extenHangup', (res: any) => {\n const { endpoints, username } = store.getState().currentUser\n const { isActive, conferenceStartedFrom } = store.getState().conference\n const { view } = store.getState().island\n\n // Get user extensions\n const userExtensions = endpoints?.extension || []\n\n // Find the extension type based on callerNum\n const connectedExtension = userExtensions.find((ext) => ext.id === res.callerNum)\n const extensionType: any = connectedExtension?.type\n\n // If cause is normal_clearing and extension is physical or mobile\n // Clean phone-island visibility also after user_busy ( useful for physical devices )\n if (\n (res.cause === 'normal_clearing' &&\n (extensionType === 'physical' || extensionType === 'mobile')) ||\n res?.cause === 'user_busy' ||\n res?.cause === 'not_defined' ||\n res?.cause === 'call_rejected'\n ) {\n // Reset phone island visibility after 2 seconds to avoid glitches\n setTimeout(() => {\n store.dispatch.island.toggleAvoidToShow(false)\n }, 500)\n if (isActive && conferenceStartedFrom !== username) {\n store.dispatch.conference.resetConference()\n }\n } else if (\n res?.cause === 'normal_circuit_congestion' &&\n isActive &&\n conferenceStartedFrom === username\n ) {\n eventDispatch('phone-island-view-changed', { viewType: 'waitingConference' })\n } else if (\n (res.cause === 'normal_clearing' ||\n res?.cause === 'user_busy' ||\n res?.cause === 'not_defined' ||\n res?.cause === 'call_rejected') &&\n (extensionType === 'webrtc' || extensionType === 'nethlink') &&\n isActive &&\n conferenceStartedFrom !== username\n ) {\n store.dispatch.conference.resetConference()\n }\n // if conference owner call the call with the added user inside conference\n if (\n res?.cause === 'interworking' &&\n isActive &&\n conferenceStartedFrom === username &&\n view !== 'waitingConference'\n ) {\n eventDispatch('phone-island-view-changed', { viewType: 'waitingConference' })\n }\n })\n\n // Avoid to show phone island if call is connected with other extension\n socket.current.on('extenConnected', (res: { extenConnected: string }) => {\n // Get the current user's extensions\n\n const { default_device, endpoints } = store.getState().currentUser\n const userExtensions = endpoints?.extension || []\n\n // Find the extension type\n const connectedExtension = userExtensions.find((ext) => ext.id === res.extenConnected)\n const extensionType: any = connectedExtension?.type\n\n // Reset only if the extension type is not webrtc or nethlink\n // ( avoid to not show phone island if default is physical and extensionType is physical)\n if (\n ((default_device?.type === 'webrtc' || default_device?.type === 'nethlink') &&\n extensionType &&\n (extensionType === 'mobile' || extensionType === 'physical')) ||\n (default_device?.type === 'physical' && extensionType && extensionType !== 'physical')\n ) {\n // Avoid to show phone island in case of answer from physical or mobile device\n store.dispatch.island.toggleAvoidToShow(true)\n // Launch an event to advert the user that the call it's answered from another device\n eventDispatch('phone-island-call-answered', { extensionType })\n }\n })\n\n socket.current.on('extenUpdate', (res: ExtensionTypes) => {\n // Update extensions and conversations in users store\n dispatch.users.updateExtension(res)\n\n //retrieve all extensions from store\n const { extensions }: any = store.getState().users\n const deviceMap: any = {}\n\n // Create a map of extensions for each user\n for (const key in extensions) {\n const user: any = extensions[key].username\n const ext: any = extensions[key].exten\n\n if (!deviceMap[user]) {\n deviceMap[user] = []\n }\n\n deviceMap[user].push(ext)\n }\n\n const associatedExtensions: any = deviceMap[res.username]\n\n // Initialize conversation\n let conv = res.conversations[Object.keys(res.conversations)[0]] || {}\n\n // Update all extensions and send the dispatch event\n dispatchExtensions(res)\n\n // second step update conversation\n\n // Check if conversation is empty\n if (isEmpty(conv)) {\n // Check if there is at least one conversation not empty\n const hasNonEmptyConversation = associatedExtensions?.some((ext: any) => {\n const extConversations = extensions[ext]?.conversations\n\n if (!isEmpty(extConversations)) {\n // not empty conversation found\n return true\n }\n\n return false\n })\n\n if (!hasNonEmptyConversation) {\n // Conversation is empty and there is no conversation for the user\n dispatchConversations(res)\n }\n } else {\n // Dispatch conversation event\n dispatchConversations(res)\n }\n\n // Handle only the events of the user\n if (res.username === username) {\n handleCurrentUserEvents(res, conv)\n // Update the conversations of the user\n dispatch.currentUser.updateConversations(res)\n }\n })\n\n // `queueUpdate` is the socket event when the data of a queue updates\n socket.current.on('queueUpdate', (res: QueuesUpdateTypes) => {\n // Dispatch queueUpdate event\n dispatchQueueUpdate(res)\n })\n\n // `queueMemberUpdate` is the socket event when the data of a queue member changes\n socket.current.on('queueMemberUpdate', (res: QueueUpdateMemberTypes) => {\n // Dispatch queueMemberUpdate event\n dispatchQueueMemberUpdate(res)\n })\n\n // `takeOver` is the socket event when the user does login from another new window\n socket.current.on('takeOver', () => {\n // Dispatch takeOver event\n dispatchAlreadyLogin()\n })\n\n // `serverReload` is the socket event when server is reloaded\n socket.current.on('serverReloaded', () => {\n // Dispatch serverReload event\n dispatchServerReload()\n })\n\n // `serverReload` is the socket event when server is reloaded\n socket.current.on('parkingUpdate', () => {\n // Dispatch serverReload event\n dispatchParkingUpdate()\n })\n\n // `actionNethLink` is the socket event when user make a call or a action from NethLink and has a physical device\n socket.current.on('actionNethLink', (link, urlType) => {\n // Dispatch phone island physical call event with the link and the urlType\n dispatchUrlCall(link, urlType)\n })\n\n socket.current.on('message', (data: any) => {\n switch (data.message) {\n case 'screenSharingStart':\n dispatch.island.toggleSideViewVisible(false)\n dispatch.island.setIslandView('video')\n\n dispatch.screenShare.update({\n isJoiningScreenShare: true,\n room: (data as ScreenSharingMessage).roomId,\n })\n break\n case 'screenSharingStop':\n dispatch.island.toggleSideViewVisible(false)\n dispatch.island.setIslandView('video')\n\n dispatch.screenShare.update({\n isLeavingScreenShare: true,\n })\n break\n default:\n console.warn('Socket: unknown message type ', data.message)\n }\n })\n\n // `updateDefaultDevice` is the socket event when user change the default device\n socket.current.on('updateDefaultDevice', (extension: string) => {\n // Dispatch phone island physical call event with the link and the urlType\n dispatchDefaultDeviceUpdate(extension)\n // Update the internal store\n const { extensions } = store.getState().users\n const { endpoints } = store.getState().currentUser\n if (!extensions || !endpoints) return\n\n const extensionInformations: any = Object.values(extensions).filter(\n (ext) => ext?.exten === extension,\n )\n if (extensionInformations.length === 0) return\n\n let objectComplete = extensionInformations[0]\n const endpointExtension = endpoints.extension.find(\n (endpoint) => endpoint.id === objectComplete.exten,\n )\n if (endpointExtension) {\n objectComplete = { ...objectComplete, type: endpointExtension.type }\n }\n\n store.dispatch.currentUser.updateCurrentDefaultDevice(objectComplete)\n //make sure to check the media permissions\n checkMediaPermissions()\n })\n\n socket.current.on('confBridgeUpdate', (res: any) => {\n if (res && res?.users) {\n // Get User informations\n const conferenceId = res?.id\n const conferenceUsers = res?.users\n\n // Get current users list to preserve mute status\n const { usersList } = store.getState().conference\n\n // Create a copy of the new conference users while preserving mute status\n const updatedConferenceUsers = { ...conferenceUsers }\n\n // Preserve mute status for existing users\n if (usersList) {\n Object.keys(updatedConferenceUsers).forEach((userId) => {\n if (usersList[userId]) {\n // Keep the existing mute status instead of using the server's value\n updatedConferenceUsers[userId] = {\n ...updatedConferenceUsers[userId],\n muted: usersList[userId].muted,\n }\n }\n })\n }\n\n store.dispatch.conference.updateConferenceUsersList(updatedConferenceUsers)\n store.dispatch.conference.updateConferenceId(conferenceId)\n }\n })\n\n socket.current.on('confBridgeEnd', (res: any) => {\n if (res && res?.id) {\n // Reset the conference store when conference ends\n store.dispatch.conference.resetConference()\n eventDispatch('phone-island-conference-finished', {})\n }\n })\n\n socket.current.on('callWebrtc', (res: any) => {\n // On call event from socket dispatch the call start event\n eventDispatch('phone-island-call-start', { number: res })\n })\n\n socket.current.on('newVoiceMessageCounter', (res: any) => {\n eventDispatch('phone-island-voicemail-received', { voicemailInfo: res })\n })\n\n socket.current.on('streamingSourceUpdate', (res: any) => {\n eventDispatch('phone-island-streaming-information-received', { res })\n const streamingData = res.streaming || (res.res && res.res.streaming)\n\n if (streamingData) {\n const { source, image } = streamingData\n if (source && image) {\n const { isFromStreaming } = store.getState().island\n const { streamingSourceNumber } = store.getState().currentCall\n const sourceId = getStreamingSourceId(streamingSourceNumber)\n\n dispatch.streaming.updateSourceImage({\n source: source,\n image: image,\n })\n }\n }\n })\n }\n\n initSocketConnection()\n\n // Stop the check socket interval\n // Close the socket connection\n return () => {\n clearInterval(connectionCheckInterval.current)\n socket.current.close()\n }\n }, [hostName, username, authToken, uaType, dispatch])\n\n // Manage reload events\n useEffect(() => {\n if (reload) {\n console.info('websocket reconnection')\n socket.current.disconnect()\n socket.current.connect()\n reloadedCallback()\n }\n }, [reload])\n\n return <>{children}</>\n}\n"],"names":["_a","hostName","username","authToken","reload","reloadedCallback","children","uaType","dispatch","useDispatch","connectionCheckInterval","useRef","socket","isUpdatingUserInfo","useSelector","state","currentUser","useEffect","handleStreamingSource","conv","counterpartNum","isFromStreaming","island","setIsFromStreaming","currentCall","updateCurrentCall","streamingSourceNumber","sourceId","getStreamingSourceId","subscribe","id","catch","error","console","handleCurrentUserEvents","res","store","getState","transferring","transferSwitching","transferCalls","view","Object","keys","length","status","extensions_1","users","extensions","default_device","_b","endpoints_1","endpoints","username_1","_c","incoming","hasOnlineNethlink","userExtensions","values","filter","ext","some","endpointExtension","extension","find","endpoint","exten","type","undefined","current","getCurrentUserInfo","then","userInfo","updateCurrentUser","settings","open_param_url","paramUrl","setOpenParamUrlType","finally","setTimeout","checkIncomingUpdatePlay","conversationId","displayName","getDisplayName","number","concat","incomingSocket","ownerExtension","owner","chDest","chSource","direction","inConference","linkedId","uniqueId","throughQueue","throughTrunk","recording","setIslandView","eventDispatch","openParamUrlType","urlOpened","setUrlOpened","counterpartName","connected","checkAcceptedUpdate","acceptedSocket","addTransferCalls","startTime","getTimestampInSeconds","isPhysical","accepted","player","stopAudioPlayer","setAudioPlayerLoop","checkDefaultDeviceConversationActive","deleteTransferCalls","inTransferCalls","item","updateTransferSwitching","physicalRecorder","setRecordingTempVariable","checkOutgoingUpdate","outgoingSocket","outgoing","userTotallyFree","reset","io","upgrade","transports","reconnection","reconnectionDelay","websocket","update","on","debug","reason","includes","err","attempt","setInterval","volatile","emit","withTimeout","alerts","removeAlert","setAlert","accessKeyId","token","updateEndpointMainPresence","__assign","mainPresence","dispatchMainPresence","conference","isActive","conferenceStartedFrom","connectedExtension","callerNum","extensionType","cause","toggleAvoidToShow","resetConference","viewType","extenConnected","updateExtension","deviceMap","key","user","push","associatedExtensions","conversations","dispatchExtensions","isEmpty","hasNonEmptyConversation","extConversations","dispatchConversations","updateConversations","dispatchQueueUpdate","dispatchQueueMemberUpdate","dispatchAlreadyLogin","dispatchServerReload","dispatchParkingUpdate","link","urlType","dispatchUrlCall","data","message","toggleSideViewVisible","screenShare","isJoiningScreenShare","room","roomId","isLeavingScreenShare","warn","dispatchDefaultDeviceUpdate","extensionInformations","objectComplete","updateCurrentDefaultDevice","checkMediaPermissions","conferenceId","conferenceUsers","usersList_1","usersList","updatedConferenceUsers_1","forEach","userId","muted","updateConferenceUsersList","updateConferenceId","voicemailInfo","streamingData","streaming","source","image","updateSourceImage","clearInterval","close","info","disconnect","connect","React","createElement","Fragment"],"mappings":"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"}
1
+ {"version":3,"file":"Socket.js","sources":["../../src/components/Socket.tsx"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type ReactNode, FC, useEffect, useRef } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { Dispatch, RootState } from '../store'\nimport { io } from 'socket.io-client'\nimport { getDisplayName } from '../lib/phone/conversation'\nimport { getCurrentUserInfo } from '../services/user'\nimport {\n dispatchMainPresence,\n dispatchConversations,\n dispatchQueueUpdate,\n dispatchQueueMemberUpdate,\n dispatchAlreadyLogin,\n dispatchServerReload,\n dispatchParkingUpdate,\n dispatchExtensions,\n dispatchUrlCall,\n dispatchDefaultDeviceUpdate,\n} from '../events'\nimport { store } from '../store'\nimport { eventDispatch, withTimeout } from '../utils'\nimport type {\n ConversationTypes,\n ExtensionTypes,\n QueuesUpdateTypes,\n QueueUpdateMemberTypes,\n MainPresenceTypes,\n} from '../types'\nimport { getTimestampInSeconds } from '../utils/genericFunctions/timestamp'\nimport { userTotallyFree } from '../lib/user/extensions'\nimport { isEmpty } from '../utils/genericFunctions/isEmpty'\nimport { isPhysical } from '../lib/user/default_device'\nimport { ScreenSharingMessage } from './VideoView'\nimport { checkMediaPermissions } from '../lib/devices/devices'\nimport { isFromStreaming } from '../utils/streaming/isFromStreaming'\nimport { getStreamingSourceId } from '../utils/streaming/getStreamingSourceId'\nimport { subscribe } from '../services/user'\nimport { isFromTrunk } from '../lib/user/extensions'\n\ninterface SocketProps {\n children: ReactNode\n hostName: string\n username: string\n authToken: string\n reload: boolean\n reloadedCallback: () => void\n uaType: string\n}\n\nexport const Socket: FC<SocketProps> = ({\n hostName,\n username,\n authToken,\n reload,\n reloadedCallback,\n children,\n uaType,\n}) => {\n const dispatch = useDispatch<Dispatch>()\n const connectionCheckInterval = useRef<any>()\n const socket = useRef<any>()\n const isUpdatingUserInfo = useRef(false)\n\n // get user information\n const userInformation = useSelector((state: RootState) => state.currentUser)\n\n const checkDefaultDeviceConversationActive = (conv: any) => {\n dispatch.currentCall.updateCurrentCall({\n conversationId: conv.id,\n accepted: true,\n incoming: conv.direction === 'in' ? false : undefined,\n })\n eventDispatch('phone-island-call-answered', {})\n\n // Stop the local audio element ringing\n store.dispatch.player.stopAudioPlayer()\n store.dispatch.player.setAudioPlayerLoop(false)\n }\n\n const checkDefaultDeviceConversationClosed = (conv: any) => {\n // store.dispatch.player.stopAudioPlayer()\n store.dispatch.currentCall.reset()\n // store.dispatch.listen.reset()\n }\n\n useEffect(() => {\n /**\n * Helper function to handle streaming source detection and subscription\n */\n const handleStreamingSource = (conv: ConversationTypes) => {\n // Check if the call is from a streaming source\n if (conv.counterpartNum && isFromStreaming(conv.counterpartNum)) {\n // Set isFromStreaming flag to true\n dispatch.island.setIsFromStreaming(true)\n\n // Store the streaming source number in the currentCall state for future reference\n dispatch.currentCall.updateCurrentCall({\n streamingSourceNumber: conv.counterpartNum,\n })\n\n // Find the source ID and subscribe to streaming updates\n const sourceId = getStreamingSourceId(conv.counterpartNum)\n if (sourceId) {\n // Subscribe to streaming updates\n subscribe({ id: sourceId }).catch((error) =>\n console.error('Error subscribing to streaming source:', error),\n )\n }\n }\n }\n\n /**\n * Manages event and data for the currentUser\n *\n * @param res The data from the socket\n * @param conv The conversation data\n */\n const handleCurrentUserEvents = (res: ExtensionTypes, conv: ConversationTypes) => {\n // Handle transferring data\n const { transferring, transferSwitching, transferCalls } = store.getState().currentCall\n\n const view = store.getState().island.view\n // Check conversation isn't empty\n if (Object.keys(conv).length > 0) {\n // With conversation\n if (res.status) {\n const { extensions } = store.getState().users\n const { default_device } = store.getState().currentUser\n const { endpoints, username } = store.getState().currentUser\n const { incoming, outgoing } = store.getState().currentCall\n\n const hasOnlineNethlink = () => {\n if (!extensions || !username) return false\n\n // Get all extensions for current user\n const userExtensions: any = Object.values(extensions).filter(\n (ext) => ext?.username === username,\n )\n\n // Check if any extension is nethlink type and online\n return userExtensions?.some((ext) => {\n const endpointExtension = endpoints?.extension.find(\n (endpoint) => endpoint.id === ext?.exten,\n )\n return endpointExtension?.type === 'nethlink' && ext?.status !== 'offline'\n })\n }\n switch (res.status) {\n case 'ringing':\n // Handle streaming source for incoming calls\n handleStreamingSource(conv)\n\n if (\n (uaType === 'mobile' && hasOnlineNethlink()) ||\n (uaType === 'desktop' &&\n (default_device?.type === 'webrtc' ||\n (default_device?.type === undefined && !hasOnlineNethlink()) ||\n (!hasOnlineNethlink() && default_device?.type === 'physical')))\n ) {\n // Get updated user info\n if (!isUpdatingUserInfo.current) {\n isUpdatingUserInfo.current = true\n getCurrentUserInfo()\n .then((userInfo) => {\n if (userInfo) {\n dispatch.currentUser.updateCurrentUser(userInfo)\n eventDispatch('phone-island-user-informations-update', { ...userInfo })\n if (userInfo.settings && userInfo.settings.open_param_url) {\n dispatch.paramUrl.setOpenParamUrlType(userInfo.settings.open_param_url)\n } else {\n dispatch.paramUrl.setOpenParamUrlType('never')\n }\n }\n })\n .catch((error) => {\n console.error('Error getting current user info:', error)\n })\n .finally(() => {\n setTimeout(() => {\n isUpdatingUserInfo.current = false\n }, 100)\n })\n }\n dispatch.currentCall.checkIncomingUpdatePlay({\n conversationId: conv.id,\n displayName: getDisplayName(conv),\n number: `${conv.counterpartNum}`,\n incomingSocket: true,\n incoming: true,\n username:\n `${\n extensions &&\n extensions[conv.counterpartNum] &&\n extensions[conv.counterpartNum].username\n }` || '',\n ownerExtension: conv.owner,\n })\n let callInformations = {\n conversationId: conv.id,\n displayName: getDisplayName(conv),\n counterpartNum: `${conv.counterpartNum}`,\n ownerExtension: conv.owner,\n username:\n `${\n extensions &&\n extensions[conv.counterpartNum] &&\n extensions[conv.counterpartNum].username\n }` || '',\n chDest: conv?.chDest || {},\n chSource: conv?.chSource || {},\n direction: conv.direction,\n inConference: conv.inConference,\n linkedId: conv.linkedId,\n uniqueId: conv.uniqueId,\n throughQueue: conv.throughQueue,\n throughTrunk: conv.throughTrunk,\n recording: conv.recording,\n }\n store.dispatch.island.setIslandView('call')\n\n eventDispatch('phone-island-call-ringing', {})\n const { openParamUrlType } = store.getState().paramUrl\n const { urlOpened } = store.getState().island\n\n if (openParamUrlType === 'ringing' && !urlOpened) {\n // Calculate throughTrunk based on counterpartNum\n const calculatedThroughTrunk = isFromTrunk(conv.counterpartNum)\n\n // Update throughTrunk in paramUrl store\n store.dispatch.paramUrl.setThroughTrunk(calculatedThroughTrunk)\n\n store.dispatch.island.setUrlOpened(false)\n eventDispatch('phone-island-url-parameter-opened', {\n counterpartNum: conv.counterpartNum,\n counterpartName: getDisplayName(conv),\n owner: conv.owner,\n uniqueId: conv.uniqueId,\n throughQueue: conv.throughQueue,\n throughTrunk: calculatedThroughTrunk,\n direction: conv.direction,\n connected: conv.connected,\n })\n }\n }\n break\n // @ts-ignore\n case 'busy':\n // Handle streaming source for outgoing calls\n handleStreamingSource(conv)\n\n if (\n (uaType === 'mobile' && hasOnlineNethlink()) ||\n (uaType === 'desktop' &&\n (default_device?.type === 'webrtc' ||\n (default_device?.type === undefined && !hasOnlineNethlink()) ||\n (!hasOnlineNethlink() && default_device?.type === 'physical')))\n ) {\n if (conv && conv.connected) {\n // Current call accepted and update connected call\n dispatch.currentCall.updateCurrentCall({\n conversationId: conv.id,\n displayName: getDisplayName(conv),\n number: `${conv.counterpartNum}`,\n ownerExtension: conv.owner,\n username:\n `${\n extensions &&\n extensions[conv.counterpartNum] &&\n extensions[conv.counterpartNum].username\n }` || '',\n chDest: conv?.chDest || {},\n chSource: conv?.chSource || {},\n })\n // Update the current call informations for physical devices\n dispatch.currentCall.checkAcceptedUpdate({\n acceptedSocket: true,\n })\n // Add call to transfer calls\n dispatch.currentCall.addTransferCalls({\n type: 'transferred',\n displayName: getDisplayName(conv),\n number: `${conv.counterpartNum}`,\n startTime: `${getTimestampInSeconds()}`,\n })\n\n // Check if this is a streaming call that was accepted\n const { isFromStreaming } = store.getState().island\n if (isFromStreaming && conv.direction === 'out') {\n // Set view to streamingAnswer for outgoing streaming calls when accepted\n setTimeout(() => {\n dispatch.island.setIslandView('streamingAnswer')\n }, 200)\n }\n\n if (isPhysical()) {\n checkDefaultDeviceConversationActive(conv)\n }\n if (view === 'call' && transferring) {\n dispatch.currentCall.updateCurrentCall({\n transferring: false,\n })\n }\n }\n // Delete transfer calls if there are more than one ( in case of call switch after transfer)\n if (transferCalls.length > 1) {\n dispatch.currentCall.deleteTransferCalls()\n }\n // Handle not connected calls\n else if (conv && !conv.connected) {\n if (transferring && !transferSwitching) {\n // Handle hangup during transfer\n const inTransferCalls = transferCalls.find(\n (item) => item.number === conv.counterpartNum,\n )\n if (!conv.connected && inTransferCalls) {\n // Update transferring data for the current call\n dispatch.currentCall.updateCurrentCall({\n transferring: false,\n })\n eventDispatch('phone-island-call-transfer-failed', {})\n // Reset transfer switching\n // TODO - It needs to enhance how conversation connections (conv.connected) are updated server side\n // TODO - The transfer end is not handled when the an user hangups or after call switch\n dispatch.currentCall.updateTransferSwitching(false)\n }\n }\n if (conv?.counterpartName === 'REC') {\n dispatch.physicalRecorder.setRecordingTempVariable(true)\n }\n }\n // Handle outgoing call\n if (conv && !conv.connected && conv.direction === 'out') {\n // Update the current outgoing conversation\n dispatch.currentCall.checkOutgoingUpdate({\n outgoingSocket: true,\n outgoing: conv?.counterpartName === 'REC' ? false : true,\n displayName: getDisplayName(conv),\n number: `${conv?.counterpartNum}`,\n username:\n `${\n extensions &&\n extensions[conv?.counterpartNum] &&\n extensions[conv?.counterpartNum].username\n }` || '',\n })\n }\n }\n break\n\n case 'onhold':\n // The new conversation during transferring\n const { counterpartName, counterpartNum, startTime } = conv\n if (\n transferring &&\n counterpartNum &&\n counterpartName &&\n counterpartName !== '<unknown>'\n ) {\n // Add call to transfer calls\n dispatch.currentCall.addTransferCalls({\n type: 'destination',\n displayName: getDisplayName(conv),\n number: counterpartNum,\n startTime: `${getTimestampInSeconds()}`,\n })\n // Set the current call informations\n dispatch.currentCall.updateCurrentCall({\n displayName: getDisplayName(conv),\n number: counterpartNum,\n startTime: `${startTime / 1000}`,\n conversationId: conv.id,\n })\n // Set the view of the island to call\n dispatch.island.setIslandView('call')\n }\n break\n case 'busy_ringing':\n eventDispatch('phone-island-call-ringing', {})\n break\n default:\n break\n }\n }\n } else {\n // Without conversation for physical phone management\n if (res.status == 'online' && userTotallyFree()) {\n // Stop ringing sounds\n dispatch.player.stopAudioPlayer()\n // Reset current call info\n dispatch.currentCall.reset()\n dispatch.physicalRecorder.setRecordingTempVariable(false)\n // Reset isFromStreaming flag\n dispatch.island.setIsFromStreaming(false)\n }\n }\n }\n\n /**\n * Initialize socket connection and listeners\n */\n const initSocketConnection = () => {\n socket.current = io('https://' + hostName, {\n upgrade: false,\n transports: ['websocket'],\n reconnection: true,\n reconnectionDelay: 2000,\n })\n\n // save websocket to store\n dispatch.websocket.update({ socket: socket.current })\n\n // Handle socket errors\n socket.current.on('connect', () => {\n console.debug(`Socket connected sid: ${socket.current.id}`)\n eventDispatch('phone-island-socket-connected', {})\n })\n socket.current.on('disconnect', (reason) => {\n console.debug(`Socket disconnect - reason: ${reason}`)\n if (reason.includes('server disconnect')) {\n eventDispatch('phone-island-server-disconnected', {})\n } else {\n eventDispatch('phone-island-socket-disconnected', {})\n }\n })\n socket.current.io.on('error', (err) => {\n console.debug(`Socket error: `, err)\n })\n socket.current.on('connect_error', (err) => {\n console.debug(`Socket connect_error: `, err)\n })\n socket.current.io.on('reconnect', (attempt) => {\n eventDispatch('phone-island-socket-reconnected', {})\n console.debug(`Socket reconnect attemp ${attempt} (sid: ${socket.current.id})`)\n })\n socket.current.io.on('reconnect_attempt', (attempt) => {\n console.debug(`Socket reconnect_attempt ${attempt}`)\n })\n socket.current.io.on('reconnect_error', (err) => {\n console.debug(`Socket reconnect_error: `, err)\n })\n socket.current.io.on('reconnect_failed', () => {\n console.debug(`Socket reconnect_failed`)\n })\n\n // Checks if socket is reachable every 5 seconds\n connectionCheckInterval.current = setInterval(() => {\n const start = Date.now()\n socket.current.volatile.emit(\n 'ping',\n withTimeout(\n () => {\n // Remove socket_down alert\n dispatch.alerts.removeAlert('socket_down')\n eventDispatch('phone-island-alert-removed', {\n type: 'socket_down',\n })\n eventDispatch('phone-island-socket-disconnected-popup-close', {})\n },\n () => {\n // Set socket_down alert\n dispatch.alerts.setAlert('socket_down')\n eventDispatch('phone-island-socket-disconnected-popup-open', {})\n console.error('Socket is unreachable!')\n },\n 7 * 1000, // Waits for the response 7 seconds\n ),\n )\n }, 7 * 1000) // Executes a new check every 7 seconds\n\n // Handle connection message\n socket.current.on('connect', () => {\n console.debug('Socket on: ' + hostName + ' is connected!')\n socket.current.emit('login', {\n accessKeyId: `${username}`,\n token: authToken,\n uaType: uaType,\n })\n })\n\n // Handle authentication success message\n socket.current.on('authe_ok', () => {\n console.debug('Socket authentication success!')\n eventDispatch('phone-island-socket-authorized', {})\n })\n\n socket.current.on('userMainPresenceUpdate', (res: MainPresenceTypes) => {\n // Update endpoints store\n store.dispatch.users.updateEndpointMainPresence({ ...res.mainPresence })\n // Dispatch dispatchMainPresence Event\n dispatchMainPresence(res)\n })\n\n socket.current.on('extenHangup', (res: any) => {\n const { endpoints, username } = store.getState().currentUser\n const { isActive, conferenceStartedFrom } = store.getState().conference\n const { view } = store.getState().island\n\n // Get user extensions\n const userExtensions = endpoints?.extension || []\n\n // Find the extension type based on callerNum\n const connectedExtension = userExtensions.find((ext) => ext.id === res.callerNum)\n const extensionType: any = connectedExtension?.type\n\n // If cause is normal_clearing and extension is physical or mobile\n // Clean phone-island visibility also after user_busy ( useful for physical devices )\n if (\n (res.cause === 'normal_clearing' &&\n (extensionType === 'physical' || extensionType === 'mobile')) ||\n res?.cause === 'user_busy' ||\n res?.cause === 'not_defined' ||\n res?.cause === 'call_rejected'\n ) {\n // Reset phone island visibility after 2 seconds to avoid glitches\n setTimeout(() => {\n store.dispatch.island.toggleAvoidToShow(false)\n }, 500)\n if (isActive && conferenceStartedFrom !== username) {\n store.dispatch.conference.resetConference()\n }\n } else if (\n res?.cause === 'normal_circuit_congestion' &&\n isActive &&\n conferenceStartedFrom === username\n ) {\n eventDispatch('phone-island-view-changed', { viewType: 'waitingConference' })\n } else if (\n (res.cause === 'normal_clearing' ||\n res?.cause === 'user_busy' ||\n res?.cause === 'not_defined' ||\n res?.cause === 'call_rejected') &&\n (extensionType === 'webrtc' || extensionType === 'nethlink') &&\n isActive &&\n conferenceStartedFrom !== username\n ) {\n store.dispatch.conference.resetConference()\n }\n // if conference owner call the call with the added user inside conference\n if (\n res?.cause === 'interworking' &&\n isActive &&\n conferenceStartedFrom === username &&\n view !== 'waitingConference'\n ) {\n eventDispatch('phone-island-view-changed', { viewType: 'waitingConference' })\n }\n })\n\n // Avoid to show phone island if call is connected with other extension\n socket.current.on('extenConnected', (res: { extenConnected: string }) => {\n // Get the current user's extensions\n\n const { default_device, endpoints } = store.getState().currentUser\n const userExtensions = endpoints?.extension || []\n\n // Find the extension type\n const connectedExtension = userExtensions.find((ext) => ext.id === res.extenConnected)\n const extensionType: any = connectedExtension?.type\n\n // Reset only if the extension type is not webrtc or nethlink\n // ( avoid to not show phone island if default is physical and extensionType is physical)\n if (\n ((default_device?.type === 'webrtc' || default_device?.type === 'nethlink') &&\n extensionType &&\n (extensionType === 'mobile' || extensionType === 'physical')) ||\n (default_device?.type === 'physical' && extensionType && extensionType !== 'physical')\n ) {\n // Avoid to show phone island in case of answer from physical or mobile device\n store.dispatch.island.toggleAvoidToShow(true)\n // Launch an event to advert the user that the call it's answered from another device\n eventDispatch('phone-island-call-answered', { extensionType })\n }\n })\n\n socket.current.on('extenUpdate', (res: ExtensionTypes) => {\n // Update extensions and conversations in users store\n dispatch.users.updateExtension(res)\n\n //retrieve all extensions from store\n const { extensions }: any = store.getState().users\n const deviceMap: any = {}\n\n // Create a map of extensions for each user\n for (const key in extensions) {\n const user: any = extensions[key].username\n const ext: any = extensions[key].exten\n\n if (!deviceMap[user]) {\n deviceMap[user] = []\n }\n\n deviceMap[user].push(ext)\n }\n\n const associatedExtensions: any = deviceMap[res.username]\n\n // Initialize conversation\n let conv = res.conversations[Object.keys(res.conversations)[0]] || {}\n\n // Update all extensions and send the dispatch event\n dispatchExtensions(res)\n\n // second step update conversation\n\n // Check if conversation is empty\n if (isEmpty(conv)) {\n // Check if there is at least one conversation not empty\n const hasNonEmptyConversation = associatedExtensions?.some((ext: any) => {\n const extConversations = extensions[ext]?.conversations\n\n if (!isEmpty(extConversations)) {\n // not empty conversation found\n return true\n }\n\n return false\n })\n\n if (!hasNonEmptyConversation) {\n // Conversation is empty and there is no conversation for the user\n dispatchConversations(res)\n }\n } else {\n // Dispatch conversation event\n dispatchConversations(res)\n }\n\n // Handle only the events of the user\n if (res.username === username) {\n handleCurrentUserEvents(res, conv)\n // Update the conversations of the user\n dispatch.currentUser.updateConversations(res)\n }\n })\n\n // `queueUpdate` is the socket event when the data of a queue updates\n socket.current.on('queueUpdate', (res: QueuesUpdateTypes) => {\n // Dispatch queueUpdate event\n dispatchQueueUpdate(res)\n })\n\n // `queueMemberUpdate` is the socket event when the data of a queue member changes\n socket.current.on('queueMemberUpdate', (res: QueueUpdateMemberTypes) => {\n // Dispatch queueMemberUpdate event\n dispatchQueueMemberUpdate(res)\n })\n\n // `takeOver` is the socket event when the user does login from another new window\n socket.current.on('takeOver', () => {\n // Dispatch takeOver event\n dispatchAlreadyLogin()\n })\n\n // `serverReload` is the socket event when server is reloaded\n socket.current.on('serverReloaded', () => {\n // Dispatch serverReload event\n dispatchServerReload()\n })\n\n // `serverReload` is the socket event when server is reloaded\n socket.current.on('parkingUpdate', () => {\n // Dispatch serverReload event\n dispatchParkingUpdate()\n })\n\n // `actionNethLink` is the socket event when user make a call or a action from NethLink and has a physical device\n socket.current.on('actionNethLink', (link, urlType) => {\n // Dispatch phone island physical call event with the link and the urlType\n dispatchUrlCall(link, urlType)\n })\n\n socket.current.on('message', (data: any) => {\n switch (data.message) {\n case 'screenSharingStart':\n dispatch.island.toggleSideViewVisible(false)\n dispatch.island.setIslandView('video')\n\n dispatch.screenShare.update({\n isJoiningScreenShare: true,\n room: (data as ScreenSharingMessage).roomId,\n })\n break\n case 'screenSharingStop':\n dispatch.island.toggleSideViewVisible(false)\n dispatch.island.setIslandView('video')\n\n dispatch.screenShare.update({\n isLeavingScreenShare: true,\n })\n break\n default:\n console.warn('Socket: unknown message type ', data.message)\n }\n })\n\n // `updateDefaultDevice` is the socket event when user change the default device\n socket.current.on('updateDefaultDevice', (extension: string) => {\n // Dispatch phone island physical call event with the link and the urlType\n dispatchDefaultDeviceUpdate(extension)\n // Update the internal store\n const { extensions } = store.getState().users\n const { endpoints } = store.getState().currentUser\n if (!extensions || !endpoints) return\n\n const extensionInformations: any = Object.values(extensions).filter(\n (ext) => ext?.exten === extension,\n )\n if (extensionInformations.length === 0) return\n\n let objectComplete = extensionInformations[0]\n const endpointExtension = endpoints.extension.find(\n (endpoint) => endpoint.id === objectComplete.exten,\n )\n if (endpointExtension) {\n objectComplete = { ...objectComplete, type: endpointExtension.type }\n }\n\n store.dispatch.currentUser.updateCurrentDefaultDevice(objectComplete)\n //make sure to check the media permissions\n checkMediaPermissions()\n })\n\n socket.current.on('confBridgeUpdate', (res: any) => {\n if (res && res?.users) {\n // Get User informations\n const conferenceId = res?.id\n const conferenceUsers = res?.users\n\n // Get current users list to preserve mute status\n const { usersList } = store.getState().conference\n\n // Create a copy of the new conference users while preserving mute status\n const updatedConferenceUsers = { ...conferenceUsers }\n\n // Preserve mute status for existing users\n if (usersList) {\n Object.keys(updatedConferenceUsers).forEach((userId) => {\n if (usersList[userId]) {\n // Keep the existing mute status instead of using the server's value\n updatedConferenceUsers[userId] = {\n ...updatedConferenceUsers[userId],\n muted: usersList[userId].muted,\n }\n }\n })\n }\n\n store.dispatch.conference.updateConferenceUsersList(updatedConferenceUsers)\n store.dispatch.conference.updateConferenceId(conferenceId)\n }\n })\n\n socket.current.on('confBridgeEnd', (res: any) => {\n if (res && res?.id) {\n // Reset the conference store when conference ends\n store.dispatch.conference.resetConference()\n eventDispatch('phone-island-conference-finished', {})\n }\n })\n\n socket.current.on('callWebrtc', (res: any) => {\n // On call event from socket dispatch the call start event\n eventDispatch('phone-island-call-start', { number: res })\n })\n\n socket.current.on('newVoiceMessageCounter', (res: any) => {\n eventDispatch('phone-island-voicemail-received', { voicemailInfo: res })\n })\n\n socket.current.on('streamingSourceUpdate', (res: any) => {\n eventDispatch('phone-island-streaming-information-received', { res })\n const streamingData = res.streaming || (res.res && res.res.streaming)\n\n if (streamingData) {\n const { source, image } = streamingData\n if (source && image) {\n const { isFromStreaming } = store.getState().island\n const { streamingSourceNumber } = store.getState().currentCall\n const sourceId = getStreamingSourceId(streamingSourceNumber)\n\n dispatch.streaming.updateSourceImage({\n source: source,\n image: image,\n })\n }\n }\n })\n }\n\n initSocketConnection()\n\n // Stop the check socket interval\n // Close the socket connection\n return () => {\n clearInterval(connectionCheckInterval.current)\n socket.current.close()\n }\n }, [hostName, username, authToken, uaType, dispatch])\n\n // Manage reload events\n useEffect(() => {\n if (reload) {\n console.info('websocket reconnection')\n socket.current.disconnect()\n socket.current.connect()\n reloadedCallback()\n }\n }, [reload])\n\n return <>{children}</>\n}\n"],"names":["_a","hostName","username","authToken","reload","reloadedCallback","children","uaType","dispatch","useDispatch","connectionCheckInterval","useRef","socket","isUpdatingUserInfo","useSelector","state","currentUser","useEffect","handleStreamingSource","conv","counterpartNum","isFromStreaming","island","setIsFromStreaming","currentCall","updateCurrentCall","streamingSourceNumber","sourceId","getStreamingSourceId","subscribe","id","catch","error","console","handleCurrentUserEvents","res","store","getState","transferring","transferSwitching","transferCalls","view","Object","keys","length","status","extensions_1","users","extensions","default_device","_b","endpoints_1","endpoints","username_1","_c","incoming","hasOnlineNethlink","userExtensions","values","filter","ext","some","endpointExtension","extension","find","endpoint","exten","type","undefined","current","getCurrentUserInfo","then","userInfo","updateCurrentUser","eventDispatch","__assign","settings","open_param_url","paramUrl","setOpenParamUrlType","finally","setTimeout","checkIncomingUpdatePlay","conversationId","displayName","getDisplayName","number","concat","incomingSocket","ownerExtension","owner","chDest","chSource","direction","inConference","linkedId","uniqueId","throughQueue","throughTrunk","recording","setIslandView","openParamUrlType","urlOpened","calculatedThroughTrunk","isFromTrunk","setThroughTrunk","setUrlOpened","counterpartName","connected","checkAcceptedUpdate","acceptedSocket","addTransferCalls","startTime","getTimestampInSeconds","isPhysical","accepted","player","stopAudioPlayer","setAudioPlayerLoop","checkDefaultDeviceConversationActive","deleteTransferCalls","inTransferCalls","item","updateTransferSwitching","physicalRecorder","setRecordingTempVariable","checkOutgoingUpdate","outgoingSocket","outgoing","userTotallyFree","reset","io","upgrade","transports","reconnection","reconnectionDelay","websocket","update","on","debug","reason","includes","err","attempt","setInterval","volatile","emit","withTimeout","alerts","removeAlert","setAlert","accessKeyId","token","updateEndpointMainPresence","mainPresence","dispatchMainPresence","conference","isActive","conferenceStartedFrom","connectedExtension","callerNum","extensionType","cause","toggleAvoidToShow","resetConference","viewType","extenConnected","updateExtension","deviceMap","key","user","push","associatedExtensions","conversations","dispatchExtensions","isEmpty","hasNonEmptyConversation","extConversations","dispatchConversations","updateConversations","dispatchQueueUpdate","dispatchQueueMemberUpdate","dispatchAlreadyLogin","dispatchServerReload","dispatchParkingUpdate","link","urlType","dispatchUrlCall","data","message","toggleSideViewVisible","screenShare","isJoiningScreenShare","room","roomId","isLeavingScreenShare","warn","dispatchDefaultDeviceUpdate","extensionInformations","objectComplete","updateCurrentDefaultDevice","checkMediaPermissions","conferenceId","conferenceUsers","usersList_1","usersList","updatedConferenceUsers_1","forEach","userId","muted","updateConferenceUsersList","updateConferenceId","voicemailInfo","streamingData","streaming","source","image","updateSourceImage","clearInterval","close","info","disconnect","connect","React","createElement","Fragment"],"mappings":"25CAmDuC,SAACA,GACtC,IAAAC,aACAC,aACAC,cACAC,EAAMJ,EAAAI,OACNC,EAAgBL,EAAAK,iBAChBC,EAAQN,EAAAM,SACRC,EAAMP,EAAAO,OAEAC,EAAWC,EAAAA,cACXC,EAA0BC,EAAAA,SAC1BC,EAASD,EAAAA,SACTE,EAAqBF,UAAO,GAGVG,EAAWA,aAAC,SAACC,GAAqB,OAAAA,EAAMC,WAAN,IAyuB1D,OAptBAC,EAAAA,WAAU,WAIR,IAAMC,EAAwB,SAACC,GAE7B,GAAIA,EAAKC,gBAAkBC,EAAeA,gBAACF,EAAKC,gBAAiB,CAE/DZ,EAASc,OAAOC,oBAAmB,GAGnCf,EAASgB,YAAYC,kBAAkB,CACrCC,sBAAuBP,EAAKC,iBAI9B,IAAMO,EAAWC,EAAAA,qBAAqBT,EAAKC,gBACvCO,GAEFE,EAASA,UAAC,CAAEC,GAAIH,IAAYI,OAAM,SAACC,GACjC,OAAAC,QAAQD,MAAM,yCAA0CA,EAAxD,GAGL,CACH,EAQME,EAA0B,SAACC,EAAqBhB,GAE9C,IAAAnB,EAAqDoC,EAAKA,MAACC,WAAWb,YAApEc,EAAYtC,EAAAsC,aAAEC,EAAiBvC,EAAAuC,kBAAEC,kBAEnCC,EAAOL,EAAKA,MAACC,WAAWf,OAAOmB,KAErC,GAAIC,OAAOC,KAAKxB,GAAMyB,OAAS,GAE7B,GAAIT,EAAIU,OAAQ,CACN,IAAAC,EAAeV,EAAKA,MAACC,WAAWU,MAAKC,WACrCC,EAAmBb,EAAKA,MAACC,WAAWrB,YAAWiC,eACjDC,EAA0Bd,EAAAA,MAAMC,WAAWrB,YAAzCmC,EAASD,EAAAE,UAAEC,aACbC,EAAyBlB,QAAMC,WAAWb,YAAhC8B,EAAAC,oBAEhB,IAAMC,EAAoB,WACxB,IAAKV,IAAeO,EAAU,OAAO,EAGrC,IAAMI,EAAsBf,OAAOgB,OAAOZ,GAAYa,QACpD,SAACC,GAAQ,OAAAA,aAAG,EAAHA,EAAK1D,YAAamD,CAAQ,IAIrC,OAAOI,aAAc,EAAdA,EAAgBI,MAAK,SAACD,GAC3B,IAAME,EAAoBX,aAAS,EAATA,EAAWY,UAAUC,MAC7C,SAACC,GAAa,OAAAA,EAASnC,MAAO8B,aAAG,EAAHA,EAAKM,MAAK,IAE1C,MAAmC,cAA5BJ,eAAAA,EAAmBK,OAAuC,aAAhBP,aAAG,EAAHA,EAAKf,OACxD,GACF,EACA,OAAQV,EAAIU,QACV,IAAK,UAIH,GAFA3B,EAAsBC,GAGR,WAAXZ,GAAuBiD,KACZ,YAAXjD,IAC2B,YAAzB0C,eAAAA,EAAgBkB,YACWC,KAAzBnB,eAAAA,EAAgBkB,QAAuBX,MACtCA,KAAgD,cAAzBP,aAAA,EAAAA,EAAgBkB,OAC7C,CAEKtD,EAAmBwD,UACtBxD,EAAmBwD,SAAU,EAC7BC,uBACGC,MAAK,SAACC,GACDA,IACFhE,EAASQ,YAAYyD,kBAAkBD,GACvCE,EAAAA,cAAc,wCAA8CC,EAAAA,SAAA,CAAA,EAAAH,IACxDA,EAASI,UAAYJ,EAASI,SAASC,eACzCrE,EAASsE,SAASC,oBAAoBP,EAASI,SAASC,gBAExDrE,EAASsE,SAASC,oBAAoB,SAG5C,IACChD,OAAM,SAACC,GACNC,QAAQD,MAAM,mCAAoCA,EACpD,IACCgD,SAAQ,WACPC,YAAW,WACTpE,EAAmBwD,SAAU,CAC9B,GAAE,IACL,KAEJ7D,EAASgB,YAAY0D,wBAAwB,CAC3CC,eAAgBhE,EAAKW,GACrBsD,YAAaC,EAAcA,eAAClE,GAC5BmE,OAAQ,GAAAC,OAAGpE,EAAKC,gBAChBoE,gBAAgB,EAChBjC,UAAU,EACVrD,SACE,UACE4C,GACAA,EAAW3B,EAAKC,iBAChB0B,EAAW3B,EAAKC,gBAAgBlB,WAC5B,GACRuF,eAAgBtE,EAAKuE,QAGLvE,EAAKW,GACRuD,EAAcA,eAAClE,GACZ,GAAAoE,OAAGpE,EAAKC,gBACRD,EAAKuE,MAEnB,UACE5C,GACAA,EAAW3B,EAAKC,iBAChB0B,EAAW3B,EAAKC,gBAAgBlB,UAE5BiB,SAAAA,EAAMwE,OACJxE,SAAAA,EAAMyE,SACLzE,EAAK0E,UACF1E,EAAK2E,aACT3E,EAAK4E,SACL5E,EAAK6E,SACD7E,EAAK8E,aACL9E,EAAK+E,aACR/E,EAAKgF,UAElB/D,EAAAA,MAAM5B,SAASc,OAAO8E,cAAc,QAEpC1B,gBAAc,4BAA6B,CAAA,GACnC,IAAA2B,EAAqBjE,EAAKA,MAACC,WAAWyC,SAAQuB,iBAC9CC,EAAclE,EAAKA,MAACC,WAAWf,OAAMgF,UAE7C,GAAyB,YAArBD,IAAmCC,EAAW,CAEhD,IAAMC,EAAyBC,EAAAA,YAAYrF,EAAKC,gBAGhDgB,EAAAA,MAAM5B,SAASsE,SAAS2B,gBAAgBF,GAExCnE,EAAAA,MAAM5B,SAASc,OAAOoF,cAAa,GACnChC,EAAAA,cAAc,oCAAqC,CACjDtD,eAAgBD,EAAKC,eACrBuF,gBAAiBtB,EAAcA,eAAClE,GAChCuE,MAAOvE,EAAKuE,MACZM,SAAU7E,EAAK6E,SACfC,aAAc9E,EAAK8E,aACnBC,aAAcK,EACdV,UAAW1E,EAAK0E,UAChBe,UAAWzF,EAAKyF,WAEnB,CACF,CACD,MAEF,IAAK,OAIH,GAFA1F,EAAsBC,GAGR,WAAXZ,GAAuBiD,KACZ,YAAXjD,IAC2B,YAAzB0C,eAAAA,EAAgBkB,YACWC,KAAzBnB,eAAAA,EAAgBkB,QAAuBX,MACtCA,KAAgD,cAAzBP,aAAA,EAAAA,EAAgBkB,OAC7C,CACA,GAAIhD,GAAQA,EAAKyF,UAEfpG,EAASgB,YAAYC,kBAAkB,CACrC0D,eAAgBhE,EAAKW,GACrBsD,YAAaC,EAAcA,eAAClE,GAC5BmE,OAAQ,GAAAC,OAAGpE,EAAKC,gBAChBqE,eAAgBtE,EAAKuE,MACrBxF,SACE,UACE4C,GACAA,EAAW3B,EAAKC,iBAChB0B,EAAW3B,EAAKC,gBAAgBlB,WAC5B,GACRyF,QAAQxE,eAAAA,EAAMwE,SAAU,CAAE,EAC1BC,UAAUzE,eAAAA,EAAMyE,WAAY,CAAE,IAGhCpF,EAASgB,YAAYqF,oBAAoB,CACvCC,gBAAgB,IAGlBtG,EAASgB,YAAYuF,iBAAiB,CACpC5C,KAAM,cACNiB,YAAaC,EAAcA,eAAClE,GAC5BmE,OAAQ,GAAAC,OAAGpE,EAAKC,gBAChB4F,UAAW,GAAAzB,OAAG0B,EAAAA,2BAIY7E,EAAKA,MAACC,WAAWf,OAAMD,iBACT,QAAnBF,EAAK0E,WAE1BZ,YAAW,WACTzE,EAASc,OAAO8E,cAAc,kBAC/B,GAAE,KAGDc,EAAUA,cApOe,SAAC/F,GAC5CX,EAASgB,YAAYC,kBAAkB,CACrC0D,eAAgBhE,EAAKW,GACrBqF,UAAU,EACV5D,SAA6B,OAAnBpC,EAAK0E,gBAA6BzB,IAE9CM,gBAAc,6BAA8B,CAAA,GAG5CtC,EAAAA,MAAM5B,SAAS4G,OAAOC,kBACtBjF,EAAAA,MAAM5B,SAAS4G,OAAOE,oBAAmB,EAC3C,CA0NkBC,CAAqCpG,GAE1B,SAATsB,GAAmBH,GACrB9B,EAASgB,YAAYC,kBAAkB,CACrCa,cAAc,IAKpB,GAAIE,EAAcI,OAAS,EACzBpC,EAASgB,YAAYgG,2BAGlB,GAAIrG,IAASA,EAAKyF,UAAW,CAChC,GAAItE,IAAiBC,EAAmB,CAEtC,IAAMkF,EAAkBjF,EAAcwB,MACpC,SAAC0D,GAAS,OAAAA,EAAKpC,SAAWnE,EAAKC,cAAc,KAE1CD,EAAKyF,WAAaa,IAErBjH,EAASgB,YAAYC,kBAAkB,CACrCa,cAAc,IAEhBoC,gBAAc,oCAAqC,CAAA,GAInDlE,EAASgB,YAAYmG,yBAAwB,GAEhD,CAC6B,SAA1BxG,aAAI,EAAJA,EAAMwF,kBACRnG,EAASoH,iBAAiBC,0BAAyB,EAEtD,CAEG1G,IAASA,EAAKyF,WAAgC,QAAnBzF,EAAK0E,WAElCrF,EAASgB,YAAYsG,oBAAoB,CACvCC,gBAAgB,EAChBC,SAAoC,SAA1B7G,aAAI,EAAJA,EAAMwF,iBAChBvB,YAAaC,EAAcA,eAAClE,GAC5BmE,OAAQ,UAAGnE,aAAA,EAAAA,EAAMC,gBACjBlB,SACE,UACE4C,GACAA,EAAW3B,eAAAA,EAAMC,iBACjB0B,EAAW3B,aAAA,EAAAA,EAAMC,gBAAgBlB,WAC7B,IAGb,CACD,MAEF,IAAK,SAEK,IAAAyG,EAA+CxF,EAAIwF,gBAAlCvF,EAA8BD,EAAIC,eAAlB4F,EAAc7F,YAErDmB,GACAlB,GACAuF,GACoB,cAApBA,IAGAnG,EAASgB,YAAYuF,iBAAiB,CACpC5C,KAAM,cACNiB,YAAaC,EAAcA,eAAClE,GAC5BmE,OAAQlE,EACR4F,UAAW,GAAAzB,OAAG0B,EAAAA,2BAGhBzG,EAASgB,YAAYC,kBAAkB,CACrC2D,YAAaC,EAAcA,eAAClE,GAC5BmE,OAAQlE,EACR4F,UAAW,GAAAzB,OAAGyB,EAAY,KAC1B7B,eAAgBhE,EAAKW,KAGvBtB,EAASc,OAAO8E,cAAc,SAEhC,MACF,IAAK,eACH1B,gBAAc,4BAA6B,CAAA,GAKhD,MAGiB,UAAdvC,EAAIU,QAAsBoF,EAAeA,oBAE3CzH,EAAS4G,OAAOC,kBAEhB7G,EAASgB,YAAY0G,QACrB1H,EAASoH,iBAAiBC,0BAAyB,GAEnDrH,EAASc,OAAOC,oBAAmB,GAGzC,EA8YA,OAxYEX,EAAOyD,QAAU8D,KAAG,WAAalI,EAAU,CACzCmI,SAAS,EACTC,WAAY,CAAC,aACbC,cAAc,EACdC,kBAAmB,MAIrB/H,EAASgI,UAAUC,OAAO,CAAE7H,OAAQA,EAAOyD,UAG3CzD,EAAOyD,QAAQqE,GAAG,WAAW,WAC3BzG,QAAQ0G,MAAM,yBAAyBpD,OAAA3E,EAAOyD,QAAQvC,KACtD4C,gBAAc,gCAAiC,CAAA,EACjD,IACA9D,EAAOyD,QAAQqE,GAAG,cAAc,SAACE,GAC/B3G,QAAQ0G,MAAM,sCAA+BC,IACzCA,EAAOC,SAAS,qBAClBnE,gBAAc,mCAAoC,CAAA,GAElDA,gBAAc,mCAAoC,CAAA,EAEtD,IACA9D,EAAOyD,QAAQ8D,GAAGO,GAAG,SAAS,SAACI,GAC7B7G,QAAQ0G,MAAM,iBAAkBG,EAClC,IACAlI,EAAOyD,QAAQqE,GAAG,iBAAiB,SAACI,GAClC7G,QAAQ0G,MAAM,yBAA0BG,EAC1C,IACAlI,EAAOyD,QAAQ8D,GAAGO,GAAG,aAAa,SAACK,GACjCrE,gBAAc,kCAAmC,CAAA,GACjDzC,QAAQ0G,MAAM,2BAAApD,OAA2BwD,EAAO,WAAAxD,OAAU3E,EAAOyD,QAAQvC,GAAE,KAC7E,IACAlB,EAAOyD,QAAQ8D,GAAGO,GAAG,qBAAqB,SAACK,GACzC9G,QAAQ0G,MAAM,mCAA4BI,GAC5C,IACAnI,EAAOyD,QAAQ8D,GAAGO,GAAG,mBAAmB,SAACI,GACvC7G,QAAQ0G,MAAM,2BAA4BG,EAC5C,IACAlI,EAAOyD,QAAQ8D,GAAGO,GAAG,oBAAoB,WACvCzG,QAAQ0G,MAAM,0BAChB,IAGAjI,EAAwB2D,QAAU2E,aAAY,WAE5CpI,EAAOyD,QAAQ4E,SAASC,KACtB,OACAC,EAAWA,aACT,WAEE3I,EAAS4I,OAAOC,YAAY,eAC5B3E,EAAAA,cAAc,6BAA8B,CAC1CP,KAAM,gBAERO,gBAAc,+CAAgD,CAAA,EAChE,IACA,WAEElE,EAAS4I,OAAOE,SAAS,eACzB5E,gBAAc,8CAA+C,CAAA,GAC7DzC,QAAQD,MAAM,yBAChB,GACA,KAGN,GAAG,KAGHpB,EAAOyD,QAAQqE,GAAG,WAAW,WAC3BzG,QAAQ0G,MAAM,cAAgB1I,EAAW,kBACzCW,EAAOyD,QAAQ6E,KAAK,QAAS,CAC3BK,YAAa,GAAGhE,OAAArF,GAChBsJ,MAAOrJ,EACPI,OAAQA,GAEZ,IAGAK,EAAOyD,QAAQqE,GAAG,YAAY,WAC5BzG,QAAQ0G,MAAM,kCACdjE,gBAAc,iCAAkC,CAAA,EAClD,IAEA9D,EAAOyD,QAAQqE,GAAG,0BAA0B,SAACvG,GAE3CC,QAAM5B,SAASuC,MAAM0G,2BAA0B9E,EAAAA,SAAA,GAAMxC,EAAIuH,eAEzDC,EAAoBA,qBAACxH,EACvB,IAEAvB,EAAOyD,QAAQqE,GAAG,eAAe,SAACvG,GAC1B,IAAAnC,EAA0BoC,EAAAA,MAAMC,WAAWrB,YAAzCoC,EAASpD,EAAAoD,UAAElD,aACbgD,EAAsCd,EAAAA,MAAMC,WAAWuH,WAArDC,EAAQ3G,EAAA2G,SAAEC,0BACVrH,EAASL,EAAKA,MAACC,WAAWf,OAAMmB,KAMlCsH,IAHiB3G,aAAA,EAAAA,EAAWW,YAAa,IAGLC,MAAK,SAACJ,GAAQ,OAAAA,EAAI9B,KAAOK,EAAI6H,SAAS,IAC1EC,EAAqBF,aAAA,EAAAA,EAAoB5F,KAK9B,oBAAdhC,EAAI+H,QACgB,aAAlBD,GAAkD,WAAlBA,IACpB,eAAf9H,aAAG,EAAHA,EAAK+H,QACU,iBAAf/H,aAAG,EAAHA,EAAK+H,QACU,mBAAf/H,aAAG,EAAHA,EAAK+H,QAGLjF,YAAW,WACT7C,EAAAA,MAAM5B,SAASc,OAAO6I,mBAAkB,EACzC,GAAE,KACCN,GAAYC,IAA0B5J,GACxCkC,EAAAA,MAAM5B,SAASoJ,WAAWQ,mBAGb,+BAAfjI,eAAAA,EAAK+H,QACLL,GACAC,IAA0B5J,EAE1BwE,EAAAA,cAAc,4BAA6B,CAAE2F,SAAU,sBAExC,oBAAdlI,EAAI+H,OACY,eAAf/H,aAAG,EAAHA,EAAK+H,QACU,iBAAf/H,aAAG,EAAHA,EAAK+H,QACU,mBAAf/H,aAAG,EAAHA,EAAK+H,QACY,WAAlBD,GAAgD,aAAlBA,IAC/BJ,GACAC,IAA0B5J,GAE1BkC,EAAAA,MAAM5B,SAASoJ,WAAWQ,kBAIX,kBAAfjI,eAAAA,EAAK+H,QACLL,GACAC,IAA0B5J,GACjB,sBAATuC,GAEAiC,EAAAA,cAAc,4BAA6B,CAAE2F,SAAU,qBAE3D,IAGAzJ,EAAOyD,QAAQqE,GAAG,kBAAkB,SAACvG,GAG7B,IAAAnC,EAAgCoC,EAAAA,MAAMC,WAAWrB,YAA/CiC,EAAcjD,EAAAiD,eAAEG,cAIlB2G,IAHiB3G,aAAA,EAAAA,EAAWW,YAAa,IAGLC,MAAK,SAACJ,GAAQ,OAAAA,EAAI9B,KAAOK,EAAImI,cAAc,IAC/EL,EAAqBF,aAAA,EAAAA,EAAoB5F,OAKlB,YAAzBlB,aAAc,EAAdA,EAAgBkB,OAA8C,cAAzBlB,aAAc,EAAdA,EAAgBkB,QACrD8F,IACmB,WAAlBA,GAAgD,aAAlBA,IACP,cAAzBhH,aAAc,EAAdA,EAAgBkB,OAAuB8F,GAAmC,aAAlBA,KAGzD7H,EAAAA,MAAM5B,SAASc,OAAO6I,mBAAkB,GAExCzF,EAAAA,cAAc,6BAA8B,CAAEuF,cAAaA,IAE/D,IAEArJ,EAAOyD,QAAQqE,GAAG,eAAe,SAACvG,GAEhC3B,EAASuC,MAAMwH,gBAAgBpI,GAGvB,IAAAa,EAAoBZ,EAAKA,MAACC,WAAWU,MAAKC,WAC5CwH,EAAiB,CAAA,EAGvB,IAAK,IAAMC,KAAOzH,EAAY,CAC5B,IAAM0H,EAAY1H,EAAWyH,GAAKvK,SAC5B0D,EAAWZ,EAAWyH,GAAKvG,MAE5BsG,EAAUE,KACbF,EAAUE,GAAQ,IAGpBF,EAAUE,GAAMC,KAAK/G,EACtB,CAED,IAAMgH,EAA4BJ,EAAUrI,EAAIjC,UAG5CiB,EAAOgB,EAAI0I,cAAcnI,OAAOC,KAAKR,EAAI0I,eAAe,KAAO,CAAA,EAQnE,GALAC,EAAkBA,mBAAC3I,GAKf4I,EAAAA,QAAQ5J,GAAO,CAEjB,IAAM6J,EAA0BJ,aAAA,EAAAA,EAAsB/G,MAAK,SAACD,SACpDqH,EAAoC,QAAjBjL,EAAAgD,EAAWY,UAAM,IAAA5D,OAAA,EAAAA,EAAA6K,cAE1C,OAAKE,EAAAA,QAAQE,EAMf,IAEKD,GAEHE,EAAqBA,sBAAC/I,EAEzB,MAEC+I,EAAqBA,sBAAC/I,GAIpBA,EAAIjC,WAAaA,IACnBgC,EAAwBC,EAAKhB,GAE7BX,EAASQ,YAAYmK,oBAAoBhJ,GAE7C,IAGAvB,EAAOyD,QAAQqE,GAAG,eAAe,SAACvG,GAEhCiJ,EAAmBA,oBAACjJ,EACtB,IAGAvB,EAAOyD,QAAQqE,GAAG,qBAAqB,SAACvG,GAEtCkJ,EAAyBA,0BAAClJ,EAC5B,IAGAvB,EAAOyD,QAAQqE,GAAG,YAAY,WAE5B4C,EAAAA,sBACF,IAGA1K,EAAOyD,QAAQqE,GAAG,kBAAkB,WAElC6C,EAAAA,sBACF,IAGA3K,EAAOyD,QAAQqE,GAAG,iBAAiB,WAEjC8C,EAAAA,uBACF,IAGA5K,EAAOyD,QAAQqE,GAAG,kBAAkB,SAAC+C,EAAMC,GAEzCC,kBAAgBF,EAAMC,EACxB,IAEA9K,EAAOyD,QAAQqE,GAAG,WAAW,SAACkD,GAC5B,OAAQA,EAAKC,SACX,IAAK,qBACHrL,EAASc,OAAOwK,uBAAsB,GACtCtL,EAASc,OAAO8E,cAAc,SAE9B5F,EAASuL,YAAYtD,OAAO,CAC1BuD,sBAAsB,EACtBC,KAAOL,EAA8BM,SAEvC,MACF,IAAK,oBACH1L,EAASc,OAAOwK,uBAAsB,GACtCtL,EAASc,OAAO8E,cAAc,SAE9B5F,EAASuL,YAAYtD,OAAO,CAC1B0D,sBAAsB,IAExB,MACF,QACElK,QAAQmK,KAAK,gCAAiCR,EAAKC,SAEzD,IAGAjL,EAAOyD,QAAQqE,GAAG,uBAAuB,SAAC3E,GAExCsI,EAA2BA,4BAACtI,GAEpB,IAAAf,EAAeZ,EAAKA,MAACC,WAAWU,MAAKC,WACrCI,EAAchB,EAAKA,MAACC,WAAWrB,YAAWoC,UAClD,GAAKJ,GAAeI,EAApB,CAEA,IAAMkJ,EAA6B5J,OAAOgB,OAAOV,GAAYW,QAC3D,SAACC,GAAQ,OAAAA,aAAG,EAAHA,EAAKM,SAAUH,CAAS,IAEnC,GAAqC,IAAjCuI,EAAsB1J,OAA1B,CAEA,IAAI2J,EAAiBD,EAAsB,GACrCxI,EAAoBV,EAAUW,UAAUC,MAC5C,SAACC,GAAa,OAAAA,EAASnC,KAAOyK,EAAerI,KAAK,IAEhDJ,IACFyI,EAAc5H,EAAAA,SAAAA,EAAAA,SAAA,GAAQ4H,GAAgB,CAAApI,KAAML,EAAkBK,QAGhE/B,EAAAA,MAAM5B,SAASQ,YAAYwL,2BAA2BD,GAEtDE,EAAAA,uBAZ8C,CALT,CAkBvC,IAEA7L,EAAOyD,QAAQqE,GAAG,oBAAoB,SAACvG,GACrC,GAAIA,IAAOA,eAAAA,EAAKY,OAAO,CAErB,IAAM2J,EAAevK,aAAA,EAAAA,EAAKL,GACpB6K,EAAkBxK,aAAA,EAAAA,EAAKY,MAGrB6J,EAAcxK,EAAKA,MAACC,WAAWuH,WAAUiD,UAG3CC,EAAsBnI,EAAAA,SAAA,CAAA,EAAQgI,GAGhCC,GACFlK,OAAOC,KAAKmK,GAAwBC,SAAQ,SAACC,GACvCJ,EAAUI,KAEZF,EAAuBE,4BAClBF,EAAuBE,IAAO,CACjCC,MAAOL,EAAUI,GAAQC,QAG/B,IAGF7K,EAAAA,MAAM5B,SAASoJ,WAAWsD,0BAA0BJ,GACpD1K,EAAAA,MAAM5B,SAASoJ,WAAWuD,mBAAmBT,EAC9C,CACH,IAEA9L,EAAOyD,QAAQqE,GAAG,iBAAiB,SAACvG,GAC9BA,IAAOA,eAAAA,EAAKL,MAEdM,EAAAA,MAAM5B,SAASoJ,WAAWQ,kBAC1B1F,gBAAc,mCAAoC,CAAA,GAEtD,IAEA9D,EAAOyD,QAAQqE,GAAG,cAAc,SAACvG,GAE/BuC,EAAAA,cAAc,0BAA2B,CAAEY,OAAQnD,GACrD,IAEAvB,EAAOyD,QAAQqE,GAAG,0BAA0B,SAACvG,GAC3CuC,EAAAA,cAAc,kCAAmC,CAAE0I,cAAejL,GACpE,IAEAvB,EAAOyD,QAAQqE,GAAG,yBAAyB,SAACvG,GAC1CuC,EAAAA,cAAc,8CAA+C,CAAEvC,IAAGA,IAClE,IAAMkL,EAAgBlL,EAAImL,WAAcnL,EAAIA,KAAOA,EAAIA,IAAImL,UAE3D,GAAID,EAAe,CACT,IAAAE,EAAkBF,EAAaE,OAAvBC,EAAUH,EAAaG,MACvC,GAAID,GAAUC,EAAO,CACSpL,QAAMC,WAAWf,OAAMD,gBAC3C,IAAAK,EAA0BU,EAAKA,MAACC,WAAWb,YAAWE,sBAC7CE,EAAAA,qBAAqBF,GAEtClB,EAAS8M,UAAUG,kBAAkB,CACnCF,OAAQA,EACRC,MAAOA,GAEV,CACF,CACH,IAOK,WACLE,cAAchN,EAAwB2D,SACtCzD,EAAOyD,QAAQsJ,OACjB,CACF,GAAG,CAAC1N,EAAUC,EAAUC,EAAWI,EAAQC,IAG3CS,EAAAA,WAAU,WACJb,IACF6B,QAAQ2L,KAAK,0BACbhN,EAAOyD,QAAQwJ,aACfjN,EAAOyD,QAAQyJ,UACfzN,IAEJ,GAAG,CAACD,IAEG2N,EAAAA,QAAAC,cAAAD,EAAAA,QAAAE,SAAA,KAAG3N,EACZ"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),require("../../node_modules/mic-check/lib/index.js");var e=require("../webrtc/janus.js"),i=require("../../store/index.js"),r=require("../user/default_device.js");require("react");var t=require("../../utils/genericFunctions/localStorage.js"),s=require("../../_virtual/index8.js"),n=e.default;exports.checkMediaPermissions=function(){if(r.isPhysical())return i.store.dispatch.alerts.removeAlert("browser_permissions"),i.store.dispatch.alerts.removeAlert("user_permissions"),i.store.dispatch.alerts.removeAlert("busy_camera"),void i.store.dispatch.alerts.removeAlert("unknown_media_permissions");s.__exports.requestMediaPermissions({audio:!0}).then((function(){})).catch((function(e){var r,t,o=e.type,u=null!==(t=((r={})[s.__exports.MediaPermissionsErrorType.SystemPermissionDenied]={alert:"browser_permissions",message:"WebRTC: browser does not have permission to access camera or microphone"},r[s.__exports.MediaPermissionsErrorType.UserPermissionDenied]={alert:"user_permissions",message:"WebRTC: user didn't allow app to access camera or microphone"},r)[o])&&void 0!==t?t:{alert:"unknown_media_permissions",message:"WebRTC: can't access audio or camera on this device. unknown error"};i.store.dispatch.alerts.setAlert(u.alert),n.error&&n.error(u.message)}))},exports.checkWebCamPermission=function(){return new Promise((function(e){s.__exports.requestMediaPermissions({video:!0}).then((function(){e(!0)})).catch((function(i){console.error("Error requesting webcam permission:",i),e(!1)}))}))},exports.getCurrentAudioInputDeviceId=function(){var e=t.getJSONItem("phone-island-audio-input-device").deviceId||null;return i.store.select.mediaDevices.audioInputDevices(i.store.getState()).find((function(i){return i.deviceId===e}))?e:null},exports.getCurrentAudioOutputDeviceId=function(){var e=t.getJSONItem("phone-island-audio-output-device").deviceId||null;return i.store.select.mediaDevices.audioOutputDevices(i.store.getState()).find((function(i){return i.deviceId===e}))?e:null},exports.getCurrentVideoInputDeviceId=function(){var e=t.getJSONItem("phone-island-video-input-device").deviceId||null;return i.store.select.mediaDevices.videoInputDevices(i.store.getState()).find((function(i){return i.deviceId===e}))?e:null},exports.getSupportedDevices=function(e){var i,r,t=!1,s=!1,o=!1,u=!1;i=function(){var i={audio:t,audioCap:o,video:s,videoCap:u};n.log&&n.log("supportedDevices=",i),e()},r=[],navigator.mediaDevices.enumerateDevices().then((function(e){e.forEach((function(e){var i=!1;r.forEach((function(r){r.deviceId===e.deviceId&&r.kind===e.kind&&(i=!0)})),i||("videoinput"!==e.kind||u||(u=!0),"audioinput"!==e.kind||o||(o=!0),"audioinput"===e.kind&&(t=!0),e.kind,"videoinput"===e.kind&&(s=!0),r.push(e))})),i&&i()}))};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),require("../../node_modules/mic-check/lib/index.js");var e=require("../webrtc/janus.js"),i=require("../../store/index.js"),r=require("../user/default_device.js");require("react");var t=require("../../utils/genericFunctions/localStorage.js"),s=require("../../_virtual/index6.js"),n=e.default;exports.checkMediaPermissions=function(){if(r.isPhysical())return i.store.dispatch.alerts.removeAlert("browser_permissions"),i.store.dispatch.alerts.removeAlert("user_permissions"),i.store.dispatch.alerts.removeAlert("busy_camera"),void i.store.dispatch.alerts.removeAlert("unknown_media_permissions");s.__exports.requestMediaPermissions({audio:!0}).then((function(){})).catch((function(e){var r,t,o=e.type,u=null!==(t=((r={})[s.__exports.MediaPermissionsErrorType.SystemPermissionDenied]={alert:"browser_permissions",message:"WebRTC: browser does not have permission to access camera or microphone"},r[s.__exports.MediaPermissionsErrorType.UserPermissionDenied]={alert:"user_permissions",message:"WebRTC: user didn't allow app to access camera or microphone"},r)[o])&&void 0!==t?t:{alert:"unknown_media_permissions",message:"WebRTC: can't access audio or camera on this device. unknown error"};i.store.dispatch.alerts.setAlert(u.alert),n.error&&n.error(u.message)}))},exports.checkWebCamPermission=function(){return new Promise((function(e){s.__exports.requestMediaPermissions({video:!0}).then((function(){e(!0)})).catch((function(i){console.error("Error requesting webcam permission:",i),e(!1)}))}))},exports.getCurrentAudioInputDeviceId=function(){var e=t.getJSONItem("phone-island-audio-input-device").deviceId||null;return i.store.select.mediaDevices.audioInputDevices(i.store.getState()).find((function(i){return i.deviceId===e}))?e:null},exports.getCurrentAudioOutputDeviceId=function(){var e=t.getJSONItem("phone-island-audio-output-device").deviceId||null;return i.store.select.mediaDevices.audioOutputDevices(i.store.getState()).find((function(i){return i.deviceId===e}))?e:null},exports.getCurrentVideoInputDeviceId=function(){var e=t.getJSONItem("phone-island-video-input-device").deviceId||null;return i.store.select.mediaDevices.videoInputDevices(i.store.getState()).find((function(i){return i.deviceId===e}))?e:null},exports.getSupportedDevices=function(e){var i,r,t=!1,s=!1,o=!1,u=!1;i=function(){var i={audio:t,audioCap:o,video:s,videoCap:u};n.log&&n.log("supportedDevices=",i),e()},r=[],navigator.mediaDevices.enumerateDevices().then((function(e){e.forEach((function(e){var i=!1;r.forEach((function(r){r.deviceId===e.deviceId&&r.kind===e.kind&&(i=!0)})),i||("videoinput"!==e.kind||u||(u=!0),"audioinput"!==e.kind||o||(o=!0),"audioinput"===e.kind&&(t=!0),e.kind,"videoinput"===e.kind&&(s=!0),r.push(e))})),i&&i()}))};
2
2
  //# sourceMappingURL=devices.js.map
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../store/index.js");exports.isFromTrunk=function(r){var s=e.store.getState().users.extensions;return!(!s||!r)&&!Object.keys(s).includes(r)};
2
+ //# sourceMappingURL=trunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trunk.js","sources":["../../../src/lib/phone/trunk.ts"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport { store } from '../../store'\n\n/**\n * Checks if a number is from an external source (trunk) by verifying\n * if it's not an internal extension\n *\n * @param counterpartNum The number to check\n * @returns true if the call is from trunk (external), false if internal extension\n */\nexport function isFromTrunk(counterpartNum: string): boolean {\n const { extensions } = store.getState().users\n\n if (!extensions || !counterpartNum) {\n return false\n }\n\n // Check if the counterpartNum exists as an extension\n const isInternalExtension = Object.keys(extensions).includes(counterpartNum)\n\n // If it's not an internal extension, it's from trunk (external)\n return !isInternalExtension\n}\n"],"names":["counterpartNum","extensions","store","getState","users","Object","keys","includes"],"mappings":"8HAYM,SAAsBA,GAClB,IAAAC,EAAeC,EAAKA,MAACC,WAAWC,MAAKH,WAE7C,SAAKA,IAAeD,KAKQK,OAAOC,KAAKL,GAAYM,SAASP,EAI/D"}
@@ -1 +1 @@
1
- {"version":3,"file":"extensions.js","sources":["../../../src/lib/user/extensions.ts"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport { UserExtensionTypes } from '../../types'\nimport { store } from '../../store'\nimport { ExtensionTypes } from '../../types'\n\n/**\n * Retrive the webrtc extensions for currentUser extensions\n *\n * @returns An extension object, an array of extension objects or null\n */\nexport function getWebrtcExtensions(): UserExtensionTypes | UserExtensionTypes[] | null {\n // Get endpoints currentUser store\n const { endpoints } = store.getState().currentUser\n if (endpoints?.extension && endpoints.extension.length > 0) {\n const webrtcExtensions = endpoints?.extension.filter((extension) => extension?.type === 'webrtc' || extension?.type === 'nethlink')\n return webrtcExtensions.length === 1\n ? webrtcExtensions[0]\n : webrtcExtensions.length > 1\n ? webrtcExtensions\n : null\n }\n return null\n}\n\n/**\n * Retrieve the data of the id extension passed as parameter\n *\n * @param id The extension id\n * @return The extension data with conversations\n */\nexport function getExtensionData(id: string): ExtensionTypes | null {\n const { extensions } = store.getState().users\n return extensions && extensions[id] ? extensions[id] : null\n}\n\n/**\n * Checks if all the extensions are free\n */\nexport function userTotallyFree() {\n const { extensions } = store.getState().users\n const { endpoints } = store.getState().currentUser\n // Check all extensions for conversations\n if (extensions && endpoints) {\n for (const extension of endpoints.extension) {\n if (extensions[extension.id] && extensions[extension.id].conversations) {\n if (Object.keys(extensions[extension.id].conversations).length > 0) {\n return false\n }\n }\n }\n }\n return true\n}\n\n/**\n * Retrieve the list of the extensions of the current user\n */\nexport function getExtensionsList(): string[] {\n const { endpoints } = store.getState().currentUser\n return endpoints?.extension.map((extension) => extension.id) || []\n}\n"],"names":["id","extensions","store","getState","users","endpoints","currentUser","extension","map","length","webrtcExtensions","filter","type","_i","_a","conversations","Object","keys"],"mappings":"mIAgCM,SAA2BA,GACvB,IAAAC,EAAeC,EAAKA,MAACC,WAAWC,MAAKH,WAC7C,OAAOA,GAAcA,EAAWD,GAAMC,EAAWD,GAAM,IACzD,uCAyBU,IAAAK,EAAcH,EAAKA,MAACC,WAAWG,YAAWD,UAClD,OAAOA,eAAAA,EAAWE,UAAUC,KAAI,SAACD,GAAc,OAAAA,EAAUP,QAAO,EAClE,yCAhDU,IAAAK,EAAcH,EAAKA,MAACC,WAAWG,YAAWD,UAClD,IAAIA,aAAS,EAATA,EAAWE,YAAaF,EAAUE,UAAUE,OAAS,EAAG,CAC1D,IAAMC,EAAmBL,aAAS,EAATA,EAAWE,UAAUI,QAAO,SAACJ,GAAc,MAAoB,YAApBA,aAAA,EAAAA,EAAWK,OAAyC,cAApBL,aAAA,EAAAA,EAAWK,KAA3C,IACpE,OAAmC,IAA5BF,EAAiBD,OACpBC,EAAiB,GACjBA,EAAiBD,OAAS,EAC1BC,EACA,IACL,CACD,OAAO,IACT,qCAiBU,IAAAT,EAAeC,EAAKA,MAACC,WAAWC,MAAKH,WACrCI,EAAcH,EAAKA,MAACC,WAAWG,YAAWD,UAElD,GAAIJ,GAAcI,EAChB,IAAwB,IAAAQ,EAAA,EAAAC,EAAAT,EAAUE,UAAVM,EAAAC,EAAAL,OAAAI,IAAqB,CAAxC,IAAMN,EAASO,EAAAD,GAClB,GAAIZ,EAAWM,EAAUP,KAAOC,EAAWM,EAAUP,IAAIe,eACnDC,OAAOC,KAAKhB,EAAWM,EAAUP,IAAIe,eAAeN,OAAS,EAC/D,OAAO,CAGZ,CAEH,OAAO,CACT"}
1
+ {"version":3,"file":"extensions.js","sources":["../../../src/lib/user/extensions.ts"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport { UserExtensionTypes } from '../../types'\nimport { store } from '../../store'\nimport { ExtensionTypes } from '../../types'\nimport { isFromTrunk } from '../phone/trunk'\n\n/**\n * Retrive the webrtc extensions for currentUser extensions\n *\n * @returns An extension object, an array of extension objects or null\n */\nexport function getWebrtcExtensions(): UserExtensionTypes | UserExtensionTypes[] | null {\n // Get endpoints currentUser store\n const { endpoints } = store.getState().currentUser\n if (endpoints?.extension && endpoints.extension.length > 0) {\n const webrtcExtensions = endpoints?.extension.filter(\n (extension) => extension?.type === 'webrtc' || extension?.type === 'nethlink',\n )\n return webrtcExtensions.length === 1\n ? webrtcExtensions[0]\n : webrtcExtensions.length > 1\n ? webrtcExtensions\n : null\n }\n return null\n}\n\n/**\n * Retrieve the data of the id extension passed as parameter\n *\n * @param id The extension id\n * @return The extension data with conversations\n */\nexport function getExtensionData(id: string): ExtensionTypes | null {\n const { extensions } = store.getState().users\n return extensions && extensions[id] ? extensions[id] : null\n}\n\n/**\n * Checks if all the extensions are free\n */\nexport function userTotallyFree() {\n const { extensions } = store.getState().users\n const { endpoints } = store.getState().currentUser\n // Check all extensions for conversations\n if (extensions && endpoints) {\n for (const extension of endpoints.extension) {\n if (extensions[extension.id] && extensions[extension.id].conversations) {\n if (Object.keys(extensions[extension.id].conversations).length > 0) {\n return false\n }\n }\n }\n }\n return true\n}\n\n/**\n * Retrieve the list of the extensions of the current user\n */\nexport function getExtensionsList(): string[] {\n const { endpoints } = store.getState().currentUser\n return endpoints?.extension.map((extension) => extension.id) || []\n}\n\nexport { isFromTrunk }\n"],"names":["id","extensions","store","getState","users","endpoints","currentUser","extension","map","length","webrtcExtensions","filter","type","_i","_a","conversations","Object","keys"],"mappings":"mIAmCM,SAA2BA,GACvB,IAAAC,EAAeC,EAAKA,MAACC,WAAWC,MAAKH,WAC7C,OAAOA,GAAcA,EAAWD,GAAMC,EAAWD,GAAM,IACzD,uCAyBU,IAAAK,EAAcH,EAAKA,MAACC,WAAWG,YAAWD,UAClD,OAAOA,eAAAA,EAAWE,UAAUC,KAAI,SAACD,GAAc,OAAAA,EAAUP,QAAO,EAClE,yCAlDU,IAAAK,EAAcH,EAAKA,MAACC,WAAWG,YAAWD,UAClD,IAAIA,aAAS,EAATA,EAAWE,YAAaF,EAAUE,UAAUE,OAAS,EAAG,CAC1D,IAAMC,EAAmBL,aAAS,EAATA,EAAWE,UAAUI,QAC5C,SAACJ,GAAc,MAAoB,YAApBA,aAAA,EAAAA,EAAWK,OAAyC,cAApBL,aAAA,EAAAA,EAAWK,KAA3C,IAEjB,OAAmC,IAA5BF,EAAiBD,OACpBC,EAAiB,GACjBA,EAAiBD,OAAS,EAC1BC,EACA,IACL,CACD,OAAO,IACT,qCAiBU,IAAAT,EAAeC,EAAKA,MAACC,WAAWC,MAAKH,WACrCI,EAAcH,EAAKA,MAACC,WAAWG,YAAWD,UAElD,GAAIJ,GAAcI,EAChB,IAAwB,IAAAQ,EAAA,EAAAC,EAAAT,EAAUE,UAAVM,EAAAC,EAAAL,OAAAI,IAAqB,CAAxC,IAAMN,EAASO,EAAAD,GAClB,GAAIZ,EAAWM,EAAUP,KAAOC,EAAWM,EAAUP,IAAIe,eACnDC,OAAOC,KAAKhB,EAAWM,EAAUP,IAAIe,eAAeN,OAAS,EAC/D,OAAO,CAGZ,CAEH,OAAO,CACT"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../node_modules/tslib/tslib.es6.js"),r=require("../node_modules/@rematch/core/dist/core.esm.js"),a={url:"",onlyQueues:!1,hasValidUrl:!1,openParamUrlType:"never"},s=r.createModel()({state:a,reducers:{setParamUrl:function(e,r){return{url:r.url||"",onlyQueues:r.onlyQueues||!1,hasValidUrl:r.hasValidUrl||!1,openParamUrlType:r.openParamUrlType||e.openParamUrlType}},setOpenParamUrlType:function(r,a){return e.__assign(e.__assign({},r),{openParamUrlType:a})},reset:function(){return a}}});exports.paramUrl=s;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var r=require("../node_modules/tslib/tslib.es6.js"),e=require("../node_modules/@rematch/core/dist/core.esm.js"),u={url:"",onlyQueues:!1,hasValidUrl:!1,openParamUrlType:"never",throughTrunk:!1},n=e.createModel()({state:u,reducers:{setParamUrl:function(r,e){return{url:e.url||"",onlyQueues:e.onlyQueues||!1,hasValidUrl:e.hasValidUrl||!1,openParamUrlType:e.openParamUrlType||r.openParamUrlType,throughTrunk:void 0!==e.throughTrunk?e.throughTrunk:r.throughTrunk}},setOpenParamUrlType:function(e,u){return r.__assign(r.__assign({},e),{openParamUrlType:u})},setThroughTrunk:function(e,u){return r.__assign(r.__assign({},e),{throughTrunk:u})},reset:function(){return r.__assign({},u)}}});exports.paramUrl=n;
2
2
  //# sourceMappingURL=paramUrl.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"paramUrl.js","sources":["../../src/models/paramUrl.ts"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport { createModel } from '@rematch/core'\nimport type { RootModel } from '.'\n\nconst defaultState: ParamUrlTypes = {\n url: '',\n onlyQueues: false,\n hasValidUrl: false,\n openParamUrlType: 'never',\n}\n\nexport const paramUrl = createModel<RootModel>()({\n state: defaultState,\n reducers: {\n setParamUrl: (\n state,\n payload: { url?: string; onlyQueues?: boolean; hasValidUrl?: boolean; openParamUrlType?: string },\n ) => {\n return {\n url: payload.url || '',\n onlyQueues: payload.onlyQueues || false,\n hasValidUrl: payload.hasValidUrl || false,\n openParamUrlType: payload.openParamUrlType || state.openParamUrlType,\n }\n },\n setOpenParamUrlType: (state, payload: string) => {\n return {\n ...state,\n openParamUrlType: payload,\n }\n },\n reset: () => {\n return defaultState\n },\n },\n})\n\ninterface ParamUrlTypes {\n url: string\n onlyQueues: boolean\n hasValidUrl: boolean\n openParamUrlType: string\n}\n"],"names":["defaultState","url","onlyQueues","hasValidUrl","openParamUrlType","paramUrl","createModel","state","reducers","setParamUrl","payload","setOpenParamUrlType","__assign","reset"],"mappings":"oLAMMA,EAA8B,CAClCC,IAAK,GACLC,YAAY,EACZC,aAAa,EACbC,iBAAkB,SAGPC,EAAWC,EAAWA,aAAXA,CAAyB,CAC/CC,MAAOP,EACPQ,SAAU,CACRC,YAAa,SACXF,EACAG,GAEA,MAAO,CACLT,IAAKS,EAAQT,KAAO,GACpBC,WAAYQ,EAAQR,aAAc,EAClCC,YAAaO,EAAQP,cAAe,EACpCC,iBAAkBM,EAAQN,kBAAoBG,EAAMH,iBAEvD,EACDO,oBAAqB,SAACJ,EAAOG,GAC3B,OAAAE,EAAAA,SAAAA,EAAAA,SAAA,GACKL,GAAK,CACRH,iBAAkBM,GAErB,EACDG,MAAO,WACL,OAAOb,CACR"}
1
+ {"version":3,"file":"paramUrl.js","sources":["../../src/models/paramUrl.ts"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport { createModel } from '@rematch/core'\nimport type { RootModel } from '.'\n\nconst defaultState: ParamUrlTypes = {\n url: '',\n onlyQueues: false,\n hasValidUrl: false,\n openParamUrlType: 'never',\n throughTrunk: false,\n}\n\nexport const paramUrl = createModel<RootModel>()({\n state: defaultState,\n reducers: {\n setParamUrl: (\n state,\n payload: {\n url?: string\n onlyQueues?: boolean\n hasValidUrl?: boolean\n openParamUrlType?: string\n throughTrunk?: boolean\n },\n ) => {\n return {\n url: payload.url || '',\n onlyQueues: payload.onlyQueues || false,\n hasValidUrl: payload.hasValidUrl || false,\n openParamUrlType: payload.openParamUrlType || state.openParamUrlType,\n throughTrunk:\n payload.throughTrunk !== undefined ? payload.throughTrunk : state.throughTrunk,\n }\n },\n setOpenParamUrlType: (state, payload: string) => {\n return {\n ...state,\n openParamUrlType: payload,\n }\n },\n setThroughTrunk: (state, payload: boolean) => {\n return {\n ...state,\n throughTrunk: payload,\n }\n },\n reset: () => {\n return {\n ...defaultState,\n }\n },\n },\n})\n\ninterface ParamUrlTypes {\n url: string\n onlyQueues: boolean\n hasValidUrl: boolean\n openParamUrlType: string\n throughTrunk: boolean\n}\n"],"names":["defaultState","url","onlyQueues","hasValidUrl","openParamUrlType","throughTrunk","paramUrl","createModel","state","reducers","setParamUrl","payload","undefined","setOpenParamUrlType","__assign","setThroughTrunk","reset"],"mappings":"oLAMMA,EAA8B,CAClCC,IAAK,GACLC,YAAY,EACZC,aAAa,EACbC,iBAAkB,QAClBC,cAAc,GAGHC,EAAWC,EAAWA,aAAXA,CAAyB,CAC/CC,MAAOR,EACPS,SAAU,CACRC,YAAa,SACXF,EACAG,GAQA,MAAO,CACLV,IAAKU,EAAQV,KAAO,GACpBC,WAAYS,EAAQT,aAAc,EAClCC,YAAaQ,EAAQR,cAAe,EACpCC,iBAAkBO,EAAQP,kBAAoBI,EAAMJ,iBACpDC,kBAC2BO,IAAzBD,EAAQN,aAA6BM,EAAQN,aAAeG,EAAMH,aAEvE,EACDQ,oBAAqB,SAACL,EAAOG,GAC3B,OAAAG,EAAAA,SAAAA,EAAAA,SAAA,GACKN,GAAK,CACRJ,iBAAkBO,GAErB,EACDI,gBAAiB,SAACP,EAAOG,GACvB,OAAAG,EAAAA,SAAAA,EAAAA,SAAA,GACKN,GAAK,CACRH,aAAcM,GAEjB,EACDK,MAAO,WACL,OAAAF,EAAAA,SAAA,GACKd,EAEN"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../fontawesome-svg-core/index.mjs.js");require("../../prop-types/index.js");var r=require("react"),t=require("../../../_virtual/index6.js");function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var n=o(r);function s(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,o)}return t}function p(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?s(Object(t),!0).forEach((function(r){i(e,r,t[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):s(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}))}return e}function a(e){return a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},a(e)}function i(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function l(e,r){if(null==e)return{};var t,o,n=function(e,r){if(null==e)return{};var t,o,n={},s=Object.keys(e);for(o=0;o<s.length;o++)t=s[o],r.indexOf(t)>=0||(n[t]=e[t]);return n}(e,r);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(o=0;o<s.length;o++)t=s[o],r.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(n[t]=e[t])}return n}function f(e){return function(e){if(Array.isArray(e))return c(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,r){if(!e)return;if("string"==typeof e)return c(e,r);var t=Object.prototype.toString.call(e).slice(8,-1);"Object"===t&&e.constructor&&(t=e.constructor.name);if("Map"===t||"Set"===t)return Array.from(e);if("Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return c(e,r)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function c(e,r){(null==r||r>e.length)&&(r=e.length);for(var t=0,o=new Array(r);t<r;t++)o[t]=e[t];return o}function u(e){return r=e,(r-=0)==r?e:(e=e.replace(/[\-_\s]+(.)?/g,(function(e,r){return r?r.toUpperCase():""}))).substr(0,1).toLowerCase()+e.substr(1);var r}var y=["style"];var b=!1;try{b="production"===process.env.NODE_ENV}catch(e){}function d(r){return r&&"object"===a(r)&&r.prefix&&r.iconName&&r.icon?r:e.parse.icon?e.parse.icon(r):null===r?null:r&&"object"===a(r)&&r.prefix&&r.iconName?r:Array.isArray(r)&&2===r.length?{prefix:r[0],iconName:r[1]}:"string"==typeof r?{prefix:"fas",iconName:r}:void 0}function x(e,r){return Array.isArray(r)&&r.length>0||!Array.isArray(r)&&r?i({},e,r):{}}var m=n.default.forwardRef((function(r,t){var o=r.icon,n=r.mask,s=r.symbol,a=r.className,l=r.title,c=r.titleId,u=r.maskId,y=d(o),v=x("classes",[].concat(f(function(e){var r,t=e.beat,o=e.fade,n=e.beatFade,s=e.bounce,p=e.shake,a=e.flash,l=e.spin,f=e.spinPulse,c=e.spinReverse,u=e.pulse,y=e.fixedWidth,b=e.inverse,d=e.border,x=e.listItem,m=e.flip,O=e.size,v=e.rotation,T=e.pull,h=(i(r={"fa-beat":t,"fa-fade":o,"fa-beat-fade":n,"fa-bounce":s,"fa-shake":p,"fa-flash":a,"fa-spin":l,"fa-spin-reverse":c,"fa-spin-pulse":f,"fa-pulse":u,"fa-fw":y,"fa-inverse":b,"fa-border":d,"fa-li":x,"fa-flip":!0===m,"fa-flip-horizontal":"horizontal"===m||"both"===m,"fa-flip-vertical":"vertical"===m||"both"===m},"fa-".concat(O),null!=O),i(r,"fa-rotate-".concat(v),null!=v&&0!==v),i(r,"fa-pull-".concat(T),null!=T),i(r,"fa-swap-opacity",e.swapOpacity),r);return Object.keys(h).map((function(e){return h[e]?e:null})).filter((function(e){return e}))}(r)),f(a.split(" ")))),T=x("transform","string"==typeof r.transform?e.parse.transform(r.transform):r.transform),h=x("mask",d(n)),g=e.icon(y,p(p(p(p({},v),T),h),{},{symbol:s,title:l,titleId:c,maskId:u}));if(!g)return function(){var e;!b&&console&&"function"==typeof console.error&&(e=console).error.apply(e,arguments)}("Could not find icon",y),null;var j=g.abstract,w={ref:t};return Object.keys(r).forEach((function(e){m.defaultProps.hasOwnProperty(e)||(w[e]=r[e])})),O(j[0],w)}));m.displayName="FontAwesomeIcon",m.propTypes={beat:t.propTypes.exports.bool,border:t.propTypes.exports.bool,beatFade:t.propTypes.exports.bool,bounce:t.propTypes.exports.bool,className:t.propTypes.exports.string,fade:t.propTypes.exports.bool,flash:t.propTypes.exports.bool,mask:t.propTypes.exports.oneOfType([t.propTypes.exports.object,t.propTypes.exports.array,t.propTypes.exports.string]),maskId:t.propTypes.exports.string,fixedWidth:t.propTypes.exports.bool,inverse:t.propTypes.exports.bool,flip:t.propTypes.exports.oneOf([!0,!1,"horizontal","vertical","both"]),icon:t.propTypes.exports.oneOfType([t.propTypes.exports.object,t.propTypes.exports.array,t.propTypes.exports.string]),listItem:t.propTypes.exports.bool,pull:t.propTypes.exports.oneOf(["right","left"]),pulse:t.propTypes.exports.bool,rotation:t.propTypes.exports.oneOf([0,90,180,270]),shake:t.propTypes.exports.bool,size:t.propTypes.exports.oneOf(["2xs","xs","sm","lg","xl","2xl","1x","2x","3x","4x","5x","6x","7x","8x","9x","10x"]),spin:t.propTypes.exports.bool,spinPulse:t.propTypes.exports.bool,spinReverse:t.propTypes.exports.bool,symbol:t.propTypes.exports.oneOfType([t.propTypes.exports.bool,t.propTypes.exports.string]),title:t.propTypes.exports.string,titleId:t.propTypes.exports.string,transform:t.propTypes.exports.oneOfType([t.propTypes.exports.string,t.propTypes.exports.object]),swapOpacity:t.propTypes.exports.bool},m.defaultProps={border:!1,className:"",mask:null,maskId:null,fixedWidth:!1,inverse:!1,flip:!1,icon:null,listItem:!1,pull:null,pulse:!1,rotation:null,size:null,spin:!1,spinPulse:!1,spinReverse:!1,beat:!1,fade:!1,beatFade:!1,bounce:!1,shake:!1,symbol:!1,title:"",titleId:null,transform:null,swapOpacity:!1};var O=function e(r,t){var o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if("string"==typeof t)return t;var n=(t.children||[]).map((function(t){return e(r,t)})),s=Object.keys(t.attributes||{}).reduce((function(e,r){var o=t.attributes[r];switch(r){case"class":e.attrs.className=o,delete t.attributes.class;break;case"style":e.attrs.style=o.split(";").map((function(e){return e.trim()})).filter((function(e){return e})).reduce((function(e,r){var t,o=r.indexOf(":"),n=u(r.slice(0,o)),s=r.slice(o+1).trim();return n.startsWith("webkit")?e[(t=n,t.charAt(0).toUpperCase()+t.slice(1))]=s:e[n]=s,e}),{});break;default:0===r.indexOf("aria-")||0===r.indexOf("data-")?e.attrs[r.toLowerCase()]=o:e.attrs[u(r)]=o}return e}),{attrs:{}}),a=o.style,i=void 0===a?{}:a,c=l(o,y);return s.attrs.style=p(p({},s.attrs.style),i),r.apply(void 0,[t.tag,p(p({},s.attrs),c)].concat(f(n)))}.bind(null,n.default.createElement);exports.FontAwesomeIcon=m;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../fontawesome-svg-core/index.mjs.js");require("../../prop-types/index.js");var r=require("react"),t=require("../../../_virtual/index7.js");function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var n=o(r);function s(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,o)}return t}function p(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?s(Object(t),!0).forEach((function(r){i(e,r,t[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):s(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}))}return e}function a(e){return a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},a(e)}function i(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function l(e,r){if(null==e)return{};var t,o,n=function(e,r){if(null==e)return{};var t,o,n={},s=Object.keys(e);for(o=0;o<s.length;o++)t=s[o],r.indexOf(t)>=0||(n[t]=e[t]);return n}(e,r);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(o=0;o<s.length;o++)t=s[o],r.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(n[t]=e[t])}return n}function f(e){return function(e){if(Array.isArray(e))return c(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,r){if(!e)return;if("string"==typeof e)return c(e,r);var t=Object.prototype.toString.call(e).slice(8,-1);"Object"===t&&e.constructor&&(t=e.constructor.name);if("Map"===t||"Set"===t)return Array.from(e);if("Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return c(e,r)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function c(e,r){(null==r||r>e.length)&&(r=e.length);for(var t=0,o=new Array(r);t<r;t++)o[t]=e[t];return o}function u(e){return r=e,(r-=0)==r?e:(e=e.replace(/[\-_\s]+(.)?/g,(function(e,r){return r?r.toUpperCase():""}))).substr(0,1).toLowerCase()+e.substr(1);var r}var y=["style"];var b=!1;try{b="production"===process.env.NODE_ENV}catch(e){}function d(r){return r&&"object"===a(r)&&r.prefix&&r.iconName&&r.icon?r:e.parse.icon?e.parse.icon(r):null===r?null:r&&"object"===a(r)&&r.prefix&&r.iconName?r:Array.isArray(r)&&2===r.length?{prefix:r[0],iconName:r[1]}:"string"==typeof r?{prefix:"fas",iconName:r}:void 0}function x(e,r){return Array.isArray(r)&&r.length>0||!Array.isArray(r)&&r?i({},e,r):{}}var m=n.default.forwardRef((function(r,t){var o=r.icon,n=r.mask,s=r.symbol,a=r.className,l=r.title,c=r.titleId,u=r.maskId,y=d(o),v=x("classes",[].concat(f(function(e){var r,t=e.beat,o=e.fade,n=e.beatFade,s=e.bounce,p=e.shake,a=e.flash,l=e.spin,f=e.spinPulse,c=e.spinReverse,u=e.pulse,y=e.fixedWidth,b=e.inverse,d=e.border,x=e.listItem,m=e.flip,O=e.size,v=e.rotation,T=e.pull,h=(i(r={"fa-beat":t,"fa-fade":o,"fa-beat-fade":n,"fa-bounce":s,"fa-shake":p,"fa-flash":a,"fa-spin":l,"fa-spin-reverse":c,"fa-spin-pulse":f,"fa-pulse":u,"fa-fw":y,"fa-inverse":b,"fa-border":d,"fa-li":x,"fa-flip":!0===m,"fa-flip-horizontal":"horizontal"===m||"both"===m,"fa-flip-vertical":"vertical"===m||"both"===m},"fa-".concat(O),null!=O),i(r,"fa-rotate-".concat(v),null!=v&&0!==v),i(r,"fa-pull-".concat(T),null!=T),i(r,"fa-swap-opacity",e.swapOpacity),r);return Object.keys(h).map((function(e){return h[e]?e:null})).filter((function(e){return e}))}(r)),f(a.split(" ")))),T=x("transform","string"==typeof r.transform?e.parse.transform(r.transform):r.transform),h=x("mask",d(n)),g=e.icon(y,p(p(p(p({},v),T),h),{},{symbol:s,title:l,titleId:c,maskId:u}));if(!g)return function(){var e;!b&&console&&"function"==typeof console.error&&(e=console).error.apply(e,arguments)}("Could not find icon",y),null;var j=g.abstract,w={ref:t};return Object.keys(r).forEach((function(e){m.defaultProps.hasOwnProperty(e)||(w[e]=r[e])})),O(j[0],w)}));m.displayName="FontAwesomeIcon",m.propTypes={beat:t.propTypes.exports.bool,border:t.propTypes.exports.bool,beatFade:t.propTypes.exports.bool,bounce:t.propTypes.exports.bool,className:t.propTypes.exports.string,fade:t.propTypes.exports.bool,flash:t.propTypes.exports.bool,mask:t.propTypes.exports.oneOfType([t.propTypes.exports.object,t.propTypes.exports.array,t.propTypes.exports.string]),maskId:t.propTypes.exports.string,fixedWidth:t.propTypes.exports.bool,inverse:t.propTypes.exports.bool,flip:t.propTypes.exports.oneOf([!0,!1,"horizontal","vertical","both"]),icon:t.propTypes.exports.oneOfType([t.propTypes.exports.object,t.propTypes.exports.array,t.propTypes.exports.string]),listItem:t.propTypes.exports.bool,pull:t.propTypes.exports.oneOf(["right","left"]),pulse:t.propTypes.exports.bool,rotation:t.propTypes.exports.oneOf([0,90,180,270]),shake:t.propTypes.exports.bool,size:t.propTypes.exports.oneOf(["2xs","xs","sm","lg","xl","2xl","1x","2x","3x","4x","5x","6x","7x","8x","9x","10x"]),spin:t.propTypes.exports.bool,spinPulse:t.propTypes.exports.bool,spinReverse:t.propTypes.exports.bool,symbol:t.propTypes.exports.oneOfType([t.propTypes.exports.bool,t.propTypes.exports.string]),title:t.propTypes.exports.string,titleId:t.propTypes.exports.string,transform:t.propTypes.exports.oneOfType([t.propTypes.exports.string,t.propTypes.exports.object]),swapOpacity:t.propTypes.exports.bool},m.defaultProps={border:!1,className:"",mask:null,maskId:null,fixedWidth:!1,inverse:!1,flip:!1,icon:null,listItem:!1,pull:null,pulse:!1,rotation:null,size:null,spin:!1,spinPulse:!1,spinReverse:!1,beat:!1,fade:!1,beatFade:!1,bounce:!1,shake:!1,symbol:!1,title:"",titleId:null,transform:null,swapOpacity:!1};var O=function e(r,t){var o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if("string"==typeof t)return t;var n=(t.children||[]).map((function(t){return e(r,t)})),s=Object.keys(t.attributes||{}).reduce((function(e,r){var o=t.attributes[r];switch(r){case"class":e.attrs.className=o,delete t.attributes.class;break;case"style":e.attrs.style=o.split(";").map((function(e){return e.trim()})).filter((function(e){return e})).reduce((function(e,r){var t,o=r.indexOf(":"),n=u(r.slice(0,o)),s=r.slice(o+1).trim();return n.startsWith("webkit")?e[(t=n,t.charAt(0).toUpperCase()+t.slice(1))]=s:e[n]=s,e}),{});break;default:0===r.indexOf("aria-")||0===r.indexOf("data-")?e.attrs[r.toLowerCase()]=o:e.attrs[u(r)]=o}return e}),{attrs:{}}),a=o.style,i=void 0===a?{}:a,c=l(o,y);return s.attrs.style=p(p({},s.attrs.style),i),r.apply(void 0,[t.tag,p(p({},s.attrs),c)].concat(f(n)))}.bind(null,n.default.createElement);exports.FontAwesomeIcon=m;
2
2
  //# sourceMappingURL=index.es.js.map
@@ -1,2 +1,2 @@
1
- "use strict";var e=require("../../../_virtual/index8.js");require("./requestMediaPermissions.js");var r=require("../../../_virtual/requestMediaPermissions.js");!function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.requestMediaPermissions=e.MediaPermissionsErrorType=void 0;var i=r.__exports;Object.defineProperty(e,"MediaPermissionsErrorType",{enumerable:!0,get:function(){return i.MediaPermissionsErrorType}}),Object.defineProperty(e,"requestMediaPermissions",{enumerable:!0,get:function(){return i.requestMediaPermissions}})}(e.__exports);
1
+ "use strict";var e=require("../../../_virtual/index6.js");require("./requestMediaPermissions.js");var r=require("../../../_virtual/requestMediaPermissions.js");!function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.requestMediaPermissions=e.MediaPermissionsErrorType=void 0;var i=r.__exports;Object.defineProperty(e,"MediaPermissionsErrorType",{enumerable:!0,get:function(){return i.MediaPermissionsErrorType}}),Object.defineProperty(e,"requestMediaPermissions",{enumerable:!0,get:function(){return i.requestMediaPermissions}})}(e.__exports);
2
2
  //# sourceMappingURL=index.js.map
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../_virtual/index6.js"),r=require("./node_modules/react-is/index.js"),s=require("./factoryWithTypeCheckers.js"),i=require("./factoryWithThrowingShims.js");if("production"!==process.env.NODE_ENV){var o=r.__require();e.propTypes.exports=s.__require()(o.isElement,!0)}else e.propTypes.exports=i.__require()();exports.default=e.propTypes.exports;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../_virtual/index7.js"),r=require("./node_modules/react-is/index.js"),s=require("./factoryWithTypeCheckers.js"),i=require("./factoryWithThrowingShims.js");if("production"!==process.env.NODE_ENV){var o=r.__require();e.propTypes.exports=s.__require()(o.isElement,!0)}else e.propTypes.exports=i.__require()();exports.default=e.propTypes.exports;
2
2
  //# sourceMappingURL=index.js.map
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e,r=require("../../../../_virtual/index7.js"),s=require("./cjs/react-is.production.min.js"),t=require("./cjs/react-is.development.js");exports.__require=function(){return e||(e=1,i=r.reactIs,"production"===process.env.NODE_ENV?i.exports=s.__require():i.exports=t.__require()),r.reactIs.exports;var i};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e,r=require("../../../../_virtual/index8.js"),s=require("./cjs/react-is.production.min.js"),t=require("./cjs/react-is.development.js");exports.__require=function(){return e||(e=1,i=r.reactIs,"production"===process.env.NODE_ENV?i.exports=s.__require():i.exports=t.__require()),r.reactIs.exports;var i};
2
2
  //# sourceMappingURL=index.js.map
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@nethesis/phone-island",
3
3
  "author": "Nethesis",
4
- "version": "0.15.2",
4
+ "version": "0.15.4",
5
5
  "description": "NethVoice CTI Phone Island",
6
6
  "keywords": [
7
7
  "nethserver",