@nethesis/phone-island 0.15.1 → 0.15.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/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),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=Object.keys(e)[0];if(n){var t=e[n].conversations,s=d.store.getState().paramUrl,i=d.store.getState().island.urlOpened;if(!s.hasValidUrl||i)return;if("answered"===s.openParamUrlType&&t&&Object.keys(t).length>0){var o=t[Object.keys(t)[0]];if((null==o?void 0:o.connected)&&"in"===(null==o?void 0:o.direction)){var a=s.onlyQueues||!1;!0===a&&!0===(null==o?void 0:o.throughQueue)?X(o.counterpartNum,o.counterpartName,o.owner,o.uniqueId):!1!==a||!0!==(null==o?void 0:o.throughTrunk)&&!0!==(null==o?void 0:o.throughQueue)||X(o.counterpartNum,o.counterpartName,o.owner,o.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("./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;
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 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\n if (username) {\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'\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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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@nethesis/phone-island",
3
3
  "author": "Nethesis",
4
- "version": "0.15.1",
4
+ "version": "0.15.2",
5
5
  "description": "NethVoice CTI Phone Island",
6
6
  "keywords": [
7
7
  "nethserver",
@@ -72,7 +72,7 @@
72
72
  "build:css": "NODE_ENV=production npx tailwindcss -o ./dist/index.css --minify",
73
73
  "build:win": "del /s /q dist && npm run build:wincss && rollup -c --configPlugin typescript",
74
74
  "build:wincss": "set NODE_ENV=production npx tailwindcss -o ./dist/index.css --minify",
75
- "build:widget": "parcel build ./src/index.widget.tsx --no-source-maps",
75
+ "build:widget": "rm -rf ./dist-widget && parcel build ./src/index.widget.tsx --no-source-maps",
76
76
  "serve:widget": "rm -rf ./widget-example/static/* && cp -rf ./dist-widget/* ./widget-example/static && npx http-server ./widget-example -o -c-1",
77
77
  "build-storybook": "storybook build -s public",
78
78
  "release": "npm publish",