@nethesis/phone-island 0.8.29 → 0.8.31
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 +1 -1
- package/dist/App.js.map +1 -1
- package/dist/components/AlertView/index.js +1 -1
- package/dist/components/AlertView/index.js.map +1 -1
- package/dist/models/alerts.d.ts +1 -0
- package/dist/models/alerts.js +1 -1
- package/dist/models/alerts.js.map +1 -1
- package/dist/models/currentUser.d.ts +1 -0
- package/dist/models/currentUser.js +1 -1
- package/dist/models/currentUser.js.map +1 -1
- package/dist/services/astproxy.js +1 -1
- package/dist/services/astproxy.js.map +1 -1
- package/package.json +1 -1
package/dist/App.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("./components/Events.js"),n=require("./components/Socket.js"),s=require("./components/WebRTC.js"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("./components/Events.js"),n=require("./components/Socket.js"),s=require("./components/WebRTC.js"),i=require("./components/Island.js"),a=require("./components/RestAPI.js"),o=require("./utils/customHooks/useEventListener.js"),r=require("./utils/genericFunctions/eventDispatch.js"),d=require("./utils/genericFunctions/localStorage.js");require("./node_modules/react-redux/es/index.js");var u=require("./store/index.js");require("./node_modules/@fortawesome/react-fontawesome/index.es.js"),require("./node_modules/i18next/dist/esm/i18next.js");var c=require("./node_modules/js-base64/base64.mjs.js"),l=require("./workers/wake_up.js"),p=require("./lib/i18n.js");require("./node_modules/react-tooltip/dist/react-tooltip.min.css.js");var h=require("./lib/webrtc/messages.js"),v=require("./lib/darkTheme.js"),f=require("./services/user.js"),m=require("./utils/genericFunctions/isEmpty.js"),g=require("./node_modules/react-redux/es/components/Provider.js");function E(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 j=E(e),I=function(E){var I=E.dataConfig,q=E.i18nLoadPath,D=void 0===q?void 0:q,S=E.showAlways,k=void 0!==S&&S,y=E.uaType,w=c.Base64.atob(I||"").split(":"),x=w[0],L=w[1],b=w[2],P=w[3],_=w[4],T=w[5],O=w[6],C=e.useState(!1),A=C[0],N=C[1],U=e.useState(!1),F=U[0],R=U[1],V=e.useState(!1),H=V[0],J=V[1];e.useEffect((function(){var e=new Worker(l.default,{type:"module"});return e.onmessage=function(e){"wakeup"===e.data&&N(!0)},function(){e.terminate()}}),[]),e.useEffect((function(){H&&F&&(N(!1),R(!1),J(!1))}),[H,F]),o.useEventListener("phone-island-expand",(function(){u.store.dispatch.island.toggleIsOpen(!0),r.eventDispatch("phone-island-expanded",{})})),o.useEventListener("phone-island-compress",(function(){u.store.dispatch.island.toggleIsOpen(!1),r.eventDispatch("phone-island-compressed",{})})),o.useEventListener("phone-island-call-keypad-close",(function(){u.store.dispatch.island.setIslandView("call"),r.eventDispatch("phone-island-call-keypad-closed",{})})),o.useEventListener("phone-island-call-transfer-close",(function(){u.store.dispatch.island.setIslandView("call"),r.eventDispatch("phone-island-call-transfer-closed",{})})),o.useEventListener("phone-island-recording-close",(function(){u.store.dispatch.island.setIslandView(null),r.eventDispatch("phone-island-recording-closed",{})})),o.useEventListener("phone-island-audio-player-close",(function(){u.store.dispatch.island.setIslandView(null),r.eventDispatch("phone-island-audio-player-closed",{})})),o.useEventListener("phone-island-detach",(function(e){h.detach(),u.store.dispatch.currentUser.updateCurrentDefaultDevice(null==e?void 0:e.deviceInformationObject),r.eventDispatch("phone-island-detached",{})})),o.useEventListener("phone-island-audio-input-change",(function(e){d.setJSONItem("phone-island-audio-input-device",{deviceId:e.deviceId}),r.eventDispatch("phone-island-audio-input-changed",{})})),o.useEventListener("phone-island-audio-output-change",(function(e){var t=u.store.getState().player.remoteAudio;null==t||t.current.setSinkId(e.deviceId).then((function(){console.info("Default audio output device change with success!"),d.setJSONItem("phone-island-audio-output-device",{deviceId:e.deviceId}),r.eventDispatch("phone-island-audio-output-changed",{})})).catch((function(e){console.error("Default audio output device change error:",e)}))})),o.useEventListener("phone-island-presence-change",(function(e){f.changeOperatorStatus(e),r.eventDispatch("phone-island-presence-changed",{})}));var W=e.useState(!0),M=W[0],B=W[1],z=e.useState(!0),G=z[0],K=z[1];e.useEffect((function(){M&&(p.loadI18n(D),B(!1))}),[M]);var Q=u.store.getState().player.remoteAudio;return e.useEffect((function(){var e;if(G&&Q){var t=null===(e=d.getJSONItem("phone-island-audio-output-device"))||void 0===e?void 0:e.deviceId;r.eventDispatch("phone-island-audio-output-change",{deviceId:t}),K(!1)}}),[G,Q]),e.useEffect((function(){v.checkDarkTheme()}),[]),o.useEventListener("phone-island-theme-change",(function(e){v.setTheme(null==e?void 0:e.selectedTheme)})),o.useEventListener("phone-island-default-device-change",(function(e){u.store.dispatch.currentUser.updateCurrentDefaultDevice(null==e?void 0:e.deviceInformationObject),r.eventDispatch("phone-island-default-device-changed",{})})),o.useEventListener("phone-island-alert",(function(e){u.store.dispatch.alerts.setAlert(e.toString())})),o.useEventListener("phone-island-main-presence",(function(e){var t,n,s,i,a=null===(t=u.store.getState().currentUser)||void 0===t?void 0:t.username,o=u.store.getState().currentUser,d=null==o?void 0:o.mainPresence;if(void 0!==a&&""!==a&&!m.isEmpty(e[a])&&void 0!==(null===(n=e[a])||void 0===n?void 0:n.mainPresence)){var c=null===(s=e[a])||void 0===s?void 0:s.mainPresence;u.store.dispatch.currentUser.updateMainPresence(null===(i=e[a])||void 0===i?void 0:i.mainPresence),"online"===c&&"online"!==d&&r.eventDispatch("phone-island-call-ended",{})}})),j.default.createElement(j.default.Fragment,null,j.default.createElement(g.default,{store:u.store},j.default.createElement(s.WebRTC,{hostName:x,sipExten:P,sipSecret:_,sipHost:T,sipPort:O,reload:A,reloadedCallback:function(){return R(!0)},uaType:y},j.default.createElement(a.RestAPI,{hostName:x,username:L,authToken:b},j.default.createElement(n.Socket,{hostName:x,username:L,authToken:b,reload:A,reloadedCallback:function(){return J(!0)},uaType:y},j.default.createElement(t.Events,{sipHost:T},j.default.createElement(i.Island,{showAlways:k})))))))};I.displayName="PhoneIsland",exports.PhoneIsland=I;
|
|
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 loadI18n from './lib/i18n'\nimport i18next, { i18n } from 'i18next'\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'\n\ninterface PhoneIslandProps {\n dataConfig: string\n i18nLoadPath?: string\n showAlways?: boolean\n uaType: string\n}\n\ninterface DeviceInputOutputTypes {\n deviceId: string\n}\n\nexport const PhoneIsland: FC<PhoneIslandProps> = ({\n dataConfig,\n i18nLoadPath = undefined,\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 store.dispatch.currentUser.updateCurrentDefaultDevice(data?.deviceInformationObject)\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-audio-output-change', (data: DeviceInputOutputTypes) => {\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 })\n .catch(function (err) {\n console.error('Default audio output device change error:', err)\n })\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 const [firstRenderI18n, setFirstRenderI18n] = useState(true)\n const [firstAudioOutputInit, setFirstAudioOutputInit] = useState(true)\n\n //initialize i18n\n useEffect(() => {\n if (firstRenderI18n) {\n loadI18n(i18nLoadPath)\n setFirstRenderI18n(false)\n }\n }, [firstRenderI18n])\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', { deviceId: defaultAudioOutputDevice })\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 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} />\n </Events>\n </Socket>\n </RestAPI>\n </WebRTC>\n </Provider>\n </>\n )\n}\n\nPhoneIsland.displayName = 'PhoneIsland'\n"],"names":["PhoneIsland","_a","dataConfig","_b","i18nLoadPath","undefined","_c","showAlways","uaType","CONFIG","Base64","atob","split","HOST_NAME","USERNAME","AUTH_TOKEN","SIP_EXTEN","SIP_SECRET","SIP_HOST","SIP_PORT","_d","useState","reload","setReload","_e","reloadedWebRTC","setReloadedWebRTC","_f","reloadedSocket","setReloadedSocket","useEffect","worker","Worker","wakeUpWorker","type","onmessage","event","data","terminate","useEventListener","store","dispatch","island","toggleIsOpen","eventDispatch","setIslandView","detach","currentUser","updateCurrentDefaultDevice","deviceInformationObject","setJSONItem","deviceId","remoteAudioElement","getState","player","remoteAudio","current","setSinkId","then","console","info","catch","err","error","changeOperatorStatus","_g","firstRenderI18n","setFirstRenderI18n","_h","firstAudioOutputInit","setFirstAudioOutputInit","loadI18n","defaultAudioOutputDevice","getJSONItem","checkDarkTheme","theme","setTheme","selectedTheme","alertType","alerts","setAlert","toString","React","createElement","Fragment","Provider","WebRTC","hostName","sipExten","sipSecret","sipHost","sipPort","reloadedCallback","RestAPI","username","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 loadI18n from './lib/i18n'\nimport i18next, { i18n } from 'i18next'\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 { isEmpty } from './utils/genericFunctions/isEmpty'\n\ninterface PhoneIslandProps {\n dataConfig: string\n i18nLoadPath?: string\n showAlways?: boolean\n uaType: string\n}\n\ninterface DeviceInputOutputTypes {\n deviceId: string\n}\n\nexport const PhoneIsland: FC<PhoneIslandProps> = ({\n dataConfig,\n i18nLoadPath = undefined,\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 store.dispatch.currentUser.updateCurrentDefaultDevice(data?.deviceInformationObject)\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-audio-output-change', (data: DeviceInputOutputTypes) => {\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 })\n .catch(function (err) {\n console.error('Default audio output device change error:', err)\n })\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 const [firstRenderI18n, setFirstRenderI18n] = useState(true)\n const [firstAudioOutputInit, setFirstAudioOutputInit] = useState(true)\n\n //initialize i18n\n useEffect(() => {\n if (firstRenderI18n) {\n loadI18n(i18nLoadPath)\n setFirstRenderI18n(false)\n }\n }, [firstRenderI18n])\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', { deviceId: defaultAudioOutputDevice })\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 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 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} />\n </Events>\n </Socket>\n </RestAPI>\n </WebRTC>\n </Provider>\n </>\n )\n}\n\nPhoneIsland.displayName = 'PhoneIsland'\n"],"names":["PhoneIsland","_a","dataConfig","_b","i18nLoadPath","undefined","_c","showAlways","uaType","CONFIG","Base64","atob","split","HOST_NAME","USERNAME","AUTH_TOKEN","SIP_EXTEN","SIP_SECRET","SIP_HOST","SIP_PORT","_d","useState","reload","setReload","_e","reloadedWebRTC","setReloadedWebRTC","_f","reloadedSocket","setReloadedSocket","useEffect","worker","Worker","wakeUpWorker","type","onmessage","event","data","terminate","useEventListener","store","dispatch","island","toggleIsOpen","eventDispatch","setIslandView","detach","currentUser","updateCurrentDefaultDevice","deviceInformationObject","setJSONItem","deviceId","remoteAudioElement","getState","player","remoteAudio","current","setSinkId","then","console","info","catch","err","error","changeOperatorStatus","_g","firstRenderI18n","setFirstRenderI18n","_h","firstAudioOutputInit","setFirstAudioOutputInit","loadI18n","defaultAudioOutputDevice","getJSONItem","checkDarkTheme","theme","setTheme","selectedTheme","alertType","alerts","setAlert","toString","currentUsernameInformation","username","currentUserObject","mainPresenceValueBeforeUpdate","mainPresence","isEmpty","newMainPresenceValue","updateMainPresence","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});var e=require("react");require("../../node_modules/react-redux/es/index.js");var t=require("../../node_modules/@fortawesome/react-fontawesome/index.es.js"),r=require("../../node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react");require("../../node_modules/react-redux/es/index.js");var t=require("../../node_modules/@fortawesome/react-fontawesome/index.es.js"),r=require("../../node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js"),i=require("../Button.js"),a=require("../../node_modules/i18next/dist/esm/i18next.js"),n=require("../../utils/genericFunctions/eventDispatch.js"),l=require("../../node_modules/react-redux/es/hooks/useSelector.js"),s=require("../../node_modules/react-redux/es/hooks/useDispatch.js");function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var d=o(e);exports.default=function(){var e=l.useSelector((function(e){return e.alerts})).data,o=l.useSelector((function(e){return e.currentUser})).default_device,u=s.useDispatch(),c=Object.values(e).filter((function(e){return e.active})),p=c.length>0?c[c.length-1]:null;return p&&d.default.createElement("div",{className:"pi-relative pi-rounded-md pi-w-full pi-flex"},d.default.createElement("div",{className:"pi-flex pi-items-center"},d.default.createElement("div",{className:"pi-flex pi-items-center pi-justify-center pi-flex-shrink-0 pi-mr-4 pi-rounded-full pi-h-10 pi-w-10 ".concat("call_transfered"===(null==p?void 0:p.type)?"pi-bg-green-200 dark:pi-bg-green-900":"pi-bg-rose-200 dark:pi-bg-rose-900")},d.default.createElement(t.FontAwesomeIcon,{icon:"call_transfered"===(null==p?void 0:p.type)?r.faCircleCheck:r.faCircleXmark,className:"pi-h-[1.1rem] pi-w-10 ".concat("call_transfered"===(null==p?void 0:p.type)?"pi-text-green-700 dark:pi-text-green-200":"pi-text-rose-700 dark:pi-text-rose-200"),"aria-hidden":"true"})),d.default.createElement("div",{className:"ml-3"},d.default.createElement("h3",{className:"pi-text-lg pi-font-medium pi-text-gray-900 dark:pi-text-gray-50 pi-dark:text-rose-100 margin-block-property"},a.t("Errors.".concat("nethlink"===(null==o?void 0:o.type)&&"webrtc_down"===(null==p?void 0:p.type)?null==p?void 0:p.nethlink_message:null==p?void 0:p.type))),d.default.createElement("div",{className:"pi-text-sm pi-font-normal pi-text-gray-700 dark:pi-text-gray-200 pi-dark:text-rose-200 pi-leading-5"},a.t("Errors.".concat(null==p?void 0:p.message))))),d.default.createElement(i.Button,{variant:"transparent",onClick:function(){return u.alerts.removeAllAlerts(),void n.eventDispatch("phone-island-all-alerts-removed",{})},className:"pi-absolute pi-right-[-1.28rem] pi-top-[8%] pi-transform pi--translate-y-[57%]"},d.default.createElement(t.FontAwesomeIcon,{icon:r.faTimes,className:"pi-text-gray-700 dark:pi-text-gray-50 pi-w-4 pi-h-4"})))};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/components/AlertView/index.tsx"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { FC } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { Dispatch, RootState } from '../../store'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faTimes, faCircleXmark, faCircleCheck } from '@fortawesome/free-solid-svg-icons'\nimport { Button } from '../Button'\nimport { t } from 'i18next'\nimport { eventDispatch } from '../../utils'\n\n/**\n * Shows user alerts\n */\nconst AlertView: FC = () => {\n const { data } = useSelector((state: RootState) => state.alerts)\n const dispatch = useDispatch<Dispatch>()\n\n // Extract active alerts\n const activeAlerts = Object.values(data).filter((alert: any) => alert.active)\n\n // Display the latest active alert\n const latestAlert = activeAlerts.length > 0 ? activeAlerts[activeAlerts.length - 1] : null\n\n const handleClearAllAlerts = () => {\n dispatch.alerts.removeAllAlerts()\n eventDispatch('phone-island-all-alerts-removed', {})\n }\n\n return (\n latestAlert && (\n <div className='pi-relative pi-rounded-md pi-w-full pi-flex'>\n <div className='pi-flex pi-items-center'>\n <div\n className={`pi-flex pi-items-center pi-justify-center pi-flex-shrink-0 pi-mr-4 pi-rounded-full pi-h-10 pi-w-10 ${\n latestAlert?.type === 'call_transfered'\n ? 'pi-bg-green-200 dark:pi-bg-green-900'\n : 'pi-bg-rose-200 dark:pi-bg-rose-900'\n }`}\n >\n {/* Icon */}\n <FontAwesomeIcon\n icon={latestAlert?.type === 'call_transfered' ? faCircleCheck : faCircleXmark}\n className={`pi-h-[1.1rem] pi-w-10 ${\n latestAlert?.type === 'call_transfered'\n ? 'pi-text-green-700 dark:pi-text-green-200'\n : 'pi-text-rose-700 dark:pi-text-rose-200'\n }`}\n aria-hidden='true'\n />\n </div>\n\n <div className='ml-3'>\n <h3 className='pi-text-lg pi-font-medium pi-text-gray-900 dark:pi-text-gray-50 pi-dark:text-rose-100 margin-block-property'>\n {t(`Errors.${latestAlert?.type}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/AlertView/index.tsx"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { FC } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { Dispatch, RootState } from '../../store'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faTimes, faCircleXmark, faCircleCheck } from '@fortawesome/free-solid-svg-icons'\nimport { Button } from '../Button'\nimport { t } from 'i18next'\nimport { eventDispatch } from '../../utils'\nimport { store } from '../../store'\n\n/**\n * Shows user alerts\n */\nconst AlertView: FC = () => {\n const { data } = useSelector((state: RootState) => state.alerts)\n const { default_device } = useSelector((state: RootState) => state.currentUser)\n const dispatch = useDispatch<Dispatch>()\n\n // Extract active alerts\n const activeAlerts = Object.values(data).filter((alert: any) => alert.active)\n\n // Display the latest active alert\n const latestAlert = activeAlerts.length > 0 ? activeAlerts[activeAlerts.length - 1] : null\n\n const handleClearAllAlerts = () => {\n dispatch.alerts.removeAllAlerts()\n eventDispatch('phone-island-all-alerts-removed', {})\n }\n\n return (\n latestAlert && (\n <div className='pi-relative pi-rounded-md pi-w-full pi-flex'>\n <div className='pi-flex pi-items-center'>\n <div\n className={`pi-flex pi-items-center pi-justify-center pi-flex-shrink-0 pi-mr-4 pi-rounded-full pi-h-10 pi-w-10 ${\n latestAlert?.type === 'call_transfered'\n ? 'pi-bg-green-200 dark:pi-bg-green-900'\n : 'pi-bg-rose-200 dark:pi-bg-rose-900'\n }`}\n >\n {/* Icon */}\n <FontAwesomeIcon\n icon={latestAlert?.type === 'call_transfered' ? faCircleCheck : faCircleXmark}\n className={`pi-h-[1.1rem] pi-w-10 ${\n latestAlert?.type === 'call_transfered'\n ? 'pi-text-green-700 dark:pi-text-green-200'\n : 'pi-text-rose-700 dark:pi-text-rose-200'\n }`}\n aria-hidden='true'\n />\n </div>\n\n <div className='ml-3'>\n <h3 className='pi-text-lg pi-font-medium pi-text-gray-900 dark:pi-text-gray-50 pi-dark:text-rose-100 margin-block-property'>\n {t(\n `Errors.${\n default_device?.type === 'nethlink' && latestAlert?.type === 'webrtc_down'\n ? latestAlert?.nethlink_message\n : latestAlert?.type\n }`,\n )}\n </h3>\n <div className='pi-text-sm pi-font-normal pi-text-gray-700 dark:pi-text-gray-200 pi-dark:text-rose-200 pi-leading-5'>\n {t(`Errors.${latestAlert?.message}`)}\n </div>\n </div>\n </div>\n\n {/* Close button */}\n <Button\n variant='transparent'\n onClick={() => handleClearAllAlerts()}\n className='pi-absolute pi-right-[-1.28rem] pi-top-[8%] pi-transform pi--translate-y-[57%]'\n >\n <FontAwesomeIcon\n icon={faTimes}\n className='pi-text-gray-700 dark:pi-text-gray-50 pi-w-4 pi-h-4'\n />\n </Button>\n </div>\n )\n )\n}\n\nexport default AlertView\n"],"names":["data","useSelector","state","alerts","default_device","currentUser","dispatch","useDispatch","activeAlerts","Object","values","filter","alert","active","latestAlert","length","React","createElement","className","concat","type","FontAwesomeIcon","icon","faCircleCheck","faCircleXmark","t","nethlink_message","message","Button","variant","onClick","removeAllAlerts","eventDispatch","faTimes"],"mappings":"2qBAgBsB,WACZ,IAAAA,EAASC,eAAY,SAACC,GAAqB,OAAAA,EAAMC,eACjDC,EAAmBH,eAAY,SAACC,GAAqB,OAAAA,EAAMG,8BAC7DC,EAAWC,EAAAA,cAGXC,EAAeC,OAAOC,OAAOV,GAAMW,QAAO,SAACC,GAAe,OAAAA,EAAMC,MAAM,IAGtEC,EAAcN,EAAaO,OAAS,EAAIP,EAAaA,EAAaO,OAAS,GAAK,KAOtF,OACED,GACEE,EAAAA,QAAKC,cAAA,MAAA,CAAAC,UAAU,+CACbF,EAAAA,QAAKC,cAAA,MAAA,CAAAC,UAAU,2BACbF,EAAA,QAAAC,cAAA,MAAA,CACEC,UAAW,sGACTC,OAAsB,qBAAtBL,aAAW,EAAXA,EAAaM,MACT,uCACA,uCAINJ,EAAAA,QAAAC,cAACI,EAAAA,gBAAe,CACdC,KAA4B,qBAAtBR,aAAW,EAAXA,EAAaM,MAA6BG,EAAaA,cAAGC,EAAaA,cAC7EN,UAAW,yBACTC,OAAsB,qBAAtBL,aAAA,EAAAA,EAAaM,MACT,2CACA,0CAEM,cAAA,UAIhBJ,EAAAA,QAAKC,cAAA,MAAA,CAAAC,UAAU,QACbF,EAAAA,QAAIC,cAAA,KAAA,CAAAC,UAAU,+GACXO,IACC,UAAAN,OAC2B,cAAzBf,aAAA,EAAAA,EAAgBgB,OAA6C,iBAAtBN,aAAW,EAAXA,EAAaM,MAChDN,aAAA,EAAAA,EAAaY,iBACbZ,aAAW,EAAXA,EAAaM,QAIvBJ,UAAAC,cAAA,MAAA,CAAKC,UAAU,uGACZO,EAAAA,EAAE,iBAAUX,aAAW,EAAXA,EAAaa,aAMhCX,EAAAA,QAAAC,cAACW,EAAAA,OACC,CAAAC,QAAQ,cACRC,QAAS,WAAM,OA9CrBxB,EAASH,OAAO4B,uBAChBC,gBAAc,kCAAmC,CAAA,IA8C3Cd,UAAU,kFAEVF,UAAAC,cAACI,EAAeA,gBAAA,CACdC,KAAMW,UACNf,UAAU,yDAMtB"}
|
package/dist/models/alerts.d.ts
CHANGED
package/dist/models/alerts.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../node_modules/tslib/tslib.es6.js"),s=require("../node_modules/@rematch/core/dist/core.esm.js").createModel()({state:{data:{browser_permissions:{active:!1,break:!0,message:"No microphone or camera permissions.",type:"browser_permissions"},user_permissions:{active:!1,break:!0,message:"You must accept audio and video permissions.",type:"user_permissions"},unknown_media_permissions:{active:!1,break:!0,message:"Unknown audio or camera permissions.",type:"unknown_media_permissions"},webrtc_down:{active:!1,break:!0,message:"Web Phone connection is down.",type:"webrtc_down"},socket_down:{active:!1,break:!1,message:"Server connection is down.",type:"socket_down"},busy_camera:{active:!1,message:"Camera is already used.",type:"busy_camera"},call_transfered:{active:!1,success:!0,message:"Call transferred successfully.",type:"call_transfered"}},status:{activeAlertsCount:0,breakActiveAlertsCount:0}},reducers:{setAlert:function(s,t){var a;if(!s.data[t].active){var r=s.status.activeAlertsCount+1,i=s.data[t].break?s.status.breakActiveAlertsCount+1:s.status.breakActiveAlertsCount;return e.__assign(e.__assign({},s),{data:e.__assign(e.__assign({},s.data),(a={},a[t]=e.__assign(e.__assign({},s.data[t]),{active:!0}),a)),status:e.__assign(e.__assign({},s.status),{activeAlertsCount:r,breakActiveAlertsCount:i})})}},removeAlert:function(s,t){var a;if(s.data[t].active){var r=s.status.activeAlertsCount-1,i=s.data[t].break?s.status.breakActiveAlertsCount-1:s.status.breakActiveAlertsCount;return{data:e.__assign(e.__assign({},s.data),(a={},a[t]=e.__assign(e.__assign({},s.data[t]),{active:!1,activeAlertsCount:r,breakActiveAlertsCount:i}),a)),status:e.__assign(e.__assign({},s.status),{activeAlertsCount:r,breakActiveAlertsCount:i})}}},removeAllAlerts:function(e){for(var s in e.data)e.data[s].active=!1;e.status.activeAlertsCount=0,e.status.breakActiveAlertsCount=0}}});exports.alerts=s;
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../node_modules/tslib/tslib.es6.js"),s=require("../node_modules/@rematch/core/dist/core.esm.js").createModel()({state:{data:{browser_permissions:{active:!1,break:!0,message:"No microphone or camera permissions.",type:"browser_permissions"},user_permissions:{active:!1,break:!0,message:"You must accept audio and video permissions.",type:"user_permissions"},unknown_media_permissions:{active:!1,break:!0,message:"Unknown audio or camera permissions.",type:"unknown_media_permissions"},webrtc_down:{active:!1,break:!0,message:"Web Phone connection is down.",nethlink_message:"NethLink connection is down.",type:"webrtc_down"},socket_down:{active:!1,break:!1,message:"Server connection is down.",type:"socket_down"},busy_camera:{active:!1,message:"Camera is already used.",type:"busy_camera"},call_transfered:{active:!1,success:!0,message:"Call transferred successfully.",type:"call_transfered"}},status:{activeAlertsCount:0,breakActiveAlertsCount:0}},reducers:{setAlert:function(s,t){var a;if(!s.data[t].active){var r=s.status.activeAlertsCount+1,i=s.data[t].break?s.status.breakActiveAlertsCount+1:s.status.breakActiveAlertsCount;return e.__assign(e.__assign({},s),{data:e.__assign(e.__assign({},s.data),(a={},a[t]=e.__assign(e.__assign({},s.data[t]),{active:!0}),a)),status:e.__assign(e.__assign({},s.status),{activeAlertsCount:r,breakActiveAlertsCount:i})})}},removeAlert:function(s,t){var a;if(s.data[t].active){var r=s.status.activeAlertsCount-1,i=s.data[t].break?s.status.breakActiveAlertsCount-1:s.status.breakActiveAlertsCount;return{data:e.__assign(e.__assign({},s.data),(a={},a[t]=e.__assign(e.__assign({},s.data[t]),{active:!1,activeAlertsCount:r,breakActiveAlertsCount:i}),a)),status:e.__assign(e.__assign({},s.status),{activeAlertsCount:r,breakActiveAlertsCount:i})}}},removeAllAlerts:function(e){for(var s in e.data)e.data[s].active=!1;e.status.activeAlertsCount=0,e.status.breakActiveAlertsCount=0}}});exports.alerts=s;
|
|
2
2
|
//# sourceMappingURL=alerts.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alerts.js","sources":["../../src/models/alerts.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: AlertsTypes = {\n data: {\n // Alerts that break calls\n browser_permissions: {\n active: false,\n break: true,\n message: \"No microphone or camera permissions.\",\n type: 'browser_permissions',\n },\n user_permissions: {\n active: false,\n break: true,\n message: 'You must accept audio and video permissions.',\n type: 'user_permissions',\n },\n unknown_media_permissions: {\n active: false,\n break: true,\n message: \"Unknown audio or camera permissions.\",\n type: 'unknown_media_permissions',\n },\n webrtc_down: {\n active: false,\n break: true,\n message: 'Web Phone connection is down.',\n type: 'webrtc_down',\n },\n socket_down: {\n active: false,\n break: false,\n message: 'Server connection is down.',\n type: 'socket_down',\n },\n // Warning alerts\n busy_camera: {\n active: false,\n message: 'Camera is already used.',\n type: 'busy_camera',\n },\n // Success alerts\n call_transfered: {\n active: false,\n success: true,\n message: 'Call transferred successfully.',\n type: 'call_transfered',\n },\n },\n status: {\n activeAlertsCount: 0,\n breakActiveAlertsCount: 0,\n },\n}\n\nexport const alerts = createModel<RootModel>()({\n state: defaultState,\n reducers: {\n setAlert: (state, payload: AlertsKeys) => {\n if (!state.data[payload].active) {\n const newActiveAlertsCount = state.status.activeAlertsCount + 1\n const newBreakActiveAlertsCount = state.data[payload].break\n ? state.status.breakActiveAlertsCount + 1\n : state.status.breakActiveAlertsCount\n\n return {\n ...state,\n data: {\n ...state.data,\n [payload]: {\n ...state.data[payload],\n active: true,\n },\n },\n status: {\n ...state.status,\n activeAlertsCount: newActiveAlertsCount,\n breakActiveAlertsCount: newBreakActiveAlertsCount,\n },\n }\n }\n },\n removeAlert: (state, payload: AlertsKeys) => {\n if (state.data[payload].active) {\n const newActiveAlertsCount = state.status.activeAlertsCount - 1\n const newBreakActiveAlertsCount = state.data[payload].break\n ? state.status.breakActiveAlertsCount - 1\n : state.status.breakActiveAlertsCount\n\n return {\n data: {\n ...state.data,\n [payload]: {\n ...state.data[payload],\n active: false,\n activeAlertsCount: newActiveAlertsCount,\n breakActiveAlertsCount: newBreakActiveAlertsCount,\n },\n },\n status: {\n ...state.status,\n activeAlertsCount: newActiveAlertsCount,\n breakActiveAlertsCount: newBreakActiveAlertsCount,\n },\n }\n }\n },\n //remove all alerts\n removeAllAlerts: (state) => {\n for (const key in state.data) {\n state.data[key].active = false\n }\n state.status.activeAlertsCount = 0\n state.status.breakActiveAlertsCount = 0\n },\n },\n})\n\nexport type AlertsTypes = {\n data: { [key in AlertsKeys]: AlertTypes }\n status: {\n activeAlertsCount: number\n breakActiveAlertsCount: number\n }\n}\n\ntype AlertsKeys =\n | 'browser_permissions'\n | 'user_permissions'\n | 'busy_camera'\n | 'unknown_media_permissions'\n | 'webrtc_down'\n | 'socket_down'\n | 'call_transfered'\n\nexport interface AlertTypes {\n active: boolean\n message: string\n break?: boolean // This means that it brokes WebRTC audio calls or Socket connection\n success?: boolean\n type: string\n}\n"],"names":["alerts","createModel","state","data","browser_permissions","active","break","message","type","user_permissions","unknown_media_permissions","webrtc_down","socket_down","busy_camera","call_transfered","success","status","activeAlertsCount","breakActiveAlertsCount","reducers","setAlert","payload","newActiveAlertsCount","newBreakActiveAlertsCount","__assign","_a","removeAlert","removeAllAlerts","key"],"mappings":"
|
|
1
|
+
{"version":3,"file":"alerts.js","sources":["../../src/models/alerts.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: AlertsTypes = {\n data: {\n // Alerts that break calls\n browser_permissions: {\n active: false,\n break: true,\n message: \"No microphone or camera permissions.\",\n type: 'browser_permissions',\n },\n user_permissions: {\n active: false,\n break: true,\n message: 'You must accept audio and video permissions.',\n type: 'user_permissions',\n },\n unknown_media_permissions: {\n active: false,\n break: true,\n message: \"Unknown audio or camera permissions.\",\n type: 'unknown_media_permissions',\n },\n webrtc_down: {\n active: false,\n break: true,\n message: 'Web Phone connection is down.',\n nethlink_message: 'NethLink connection is down.',\n type: 'webrtc_down',\n },\n socket_down: {\n active: false,\n break: false,\n message: 'Server connection is down.',\n type: 'socket_down',\n },\n // Warning alerts\n busy_camera: {\n active: false,\n message: 'Camera is already used.',\n type: 'busy_camera',\n },\n // Success alerts\n call_transfered: {\n active: false,\n success: true,\n message: 'Call transferred successfully.',\n type: 'call_transfered',\n },\n },\n status: {\n activeAlertsCount: 0,\n breakActiveAlertsCount: 0,\n },\n}\n\nexport const alerts = createModel<RootModel>()({\n state: defaultState,\n reducers: {\n setAlert: (state, payload: AlertsKeys) => {\n if (!state.data[payload].active) {\n const newActiveAlertsCount = state.status.activeAlertsCount + 1\n const newBreakActiveAlertsCount = state.data[payload].break\n ? state.status.breakActiveAlertsCount + 1\n : state.status.breakActiveAlertsCount\n\n return {\n ...state,\n data: {\n ...state.data,\n [payload]: {\n ...state.data[payload],\n active: true,\n },\n },\n status: {\n ...state.status,\n activeAlertsCount: newActiveAlertsCount,\n breakActiveAlertsCount: newBreakActiveAlertsCount,\n },\n }\n }\n },\n removeAlert: (state, payload: AlertsKeys) => {\n if (state.data[payload].active) {\n const newActiveAlertsCount = state.status.activeAlertsCount - 1\n const newBreakActiveAlertsCount = state.data[payload].break\n ? state.status.breakActiveAlertsCount - 1\n : state.status.breakActiveAlertsCount\n\n return {\n data: {\n ...state.data,\n [payload]: {\n ...state.data[payload],\n active: false,\n activeAlertsCount: newActiveAlertsCount,\n breakActiveAlertsCount: newBreakActiveAlertsCount,\n },\n },\n status: {\n ...state.status,\n activeAlertsCount: newActiveAlertsCount,\n breakActiveAlertsCount: newBreakActiveAlertsCount,\n },\n }\n }\n },\n //remove all alerts\n removeAllAlerts: (state) => {\n for (const key in state.data) {\n state.data[key].active = false\n }\n state.status.activeAlertsCount = 0\n state.status.breakActiveAlertsCount = 0\n },\n },\n})\n\nexport type AlertsTypes = {\n data: { [key in AlertsKeys]: AlertTypes }\n status: {\n activeAlertsCount: number\n breakActiveAlertsCount: number\n }\n}\n\ntype AlertsKeys =\n | 'browser_permissions'\n | 'user_permissions'\n | 'busy_camera'\n | 'unknown_media_permissions'\n | 'webrtc_down'\n | 'socket_down'\n | 'call_transfered'\n\nexport interface AlertTypes {\n active: boolean\n message: string\n break?: boolean // This means that it brokes WebRTC audio calls or Socket connection\n success?: boolean\n type: string\n nethlink_message?: string\n}\n"],"names":["alerts","createModel","state","data","browser_permissions","active","break","message","type","user_permissions","unknown_media_permissions","webrtc_down","nethlink_message","socket_down","busy_camera","call_transfered","success","status","activeAlertsCount","breakActiveAlertsCount","reducers","setAlert","payload","newActiveAlertsCount","newBreakActiveAlertsCount","__assign","_a","removeAlert","removeAllAlerts","key"],"mappings":"wHA4DaA,4DAAoBC,aAAXA,CAAyB,CAC7CC,MAvDgC,CAChCC,KAAM,CAEJC,oBAAqB,CACnBC,QAAQ,EACRC,OAAO,EACPC,QAAS,uCACTC,KAAM,uBAERC,iBAAkB,CAChBJ,QAAQ,EACRC,OAAO,EACPC,QAAS,+CACTC,KAAM,oBAERE,0BAA2B,CACzBL,QAAQ,EACRC,OAAO,EACPC,QAAS,uCACTC,KAAM,6BAERG,YAAa,CACXN,QAAQ,EACRC,OAAO,EACPC,QAAS,gCACTK,iBAAkB,+BAClBJ,KAAM,eAERK,YAAa,CACXR,QAAQ,EACRC,OAAO,EACPC,QAAS,6BACTC,KAAM,eAGRM,YAAa,CACXT,QAAQ,EACRE,QAAS,0BACTC,KAAM,eAGRO,gBAAiB,CACfV,QAAQ,EACRW,SAAS,EACTT,QAAS,iCACTC,KAAM,oBAGVS,OAAQ,CACNC,kBAAmB,EACnBC,uBAAwB,IAM1BC,SAAU,CACRC,SAAU,SAACnB,EAAOoB,SAChB,IAAKpB,EAAMC,KAAKmB,GAASjB,OAAQ,CAC/B,IAAMkB,EAAuBrB,EAAMe,OAAOC,kBAAoB,EACxDM,EAA4BtB,EAAMC,KAAKmB,GAAShB,MAClDJ,EAAMe,OAAOE,uBAAyB,EACtCjB,EAAMe,OAAOE,uBAEjB,OAAAM,EAAAA,SAAAA,EAAAA,SAAA,GACKvB,GAAK,CACRC,KAAIsB,WAAAA,EAAAA,SAAA,CAAA,EACCvB,EAAMC,OACRuB,EAAA,CAAA,EAAAA,EAAAJ,4BACIpB,EAAMC,KAAKmB,IAAQ,CACtBjB,QAAQ,IAAIqB,IAGhBT,OAAMQ,WAAAA,EAAAA,SAAA,CAAA,EACDvB,EAAMe,QACT,CAAAC,kBAAmBK,EACnBJ,uBAAwBK,KAG7B,CACF,EACDG,YAAa,SAACzB,EAAOoB,SACnB,GAAIpB,EAAMC,KAAKmB,GAASjB,OAAQ,CAC9B,IAAMkB,EAAuBrB,EAAMe,OAAOC,kBAAoB,EACxDM,EAA4BtB,EAAMC,KAAKmB,GAAShB,MAClDJ,EAAMe,OAAOE,uBAAyB,EACtCjB,EAAMe,OAAOE,uBAEjB,MAAO,CACLhB,KAAIsB,EAAAA,SAAAA,EAAAA,SAAA,CAAA,EACCvB,EAAMC,OAAIuB,EAAA,CAAA,EAAAA,EACZJ,GACIG,EAAAA,SAAAA,EAAAA,SAAA,GAAAvB,EAAMC,KAAKmB,IACd,CAAAjB,QAAQ,EACRa,kBAAmBK,EACnBJ,uBAAwBK,IAE3BE,IACDT,OACKQ,EAAAA,SAAAA,WAAA,CAAA,EAAAvB,EAAMe,QACT,CAAAC,kBAAmBK,EACnBJ,uBAAwBK,IAG7B,CACF,EAEDI,gBAAiB,SAAC1B,GAChB,IAAK,IAAM2B,KAAO3B,EAAMC,KACtBD,EAAMC,KAAK0B,GAAKxB,QAAS,EAE3BH,EAAMe,OAAOC,kBAAoB,EACjChB,EAAMe,OAAOE,uBAAyB,CACvC"}
|
|
@@ -29,6 +29,7 @@ export declare const currentUser: {
|
|
|
29
29
|
currentUserReady: boolean;
|
|
30
30
|
conversations: UserConversationTypes;
|
|
31
31
|
};
|
|
32
|
+
updateMainPresence: (state: CurrentUserTypes, payload: any) => void;
|
|
32
33
|
updateCurrentDefaultDevice: (state: CurrentUserTypes, payload: any) => void;
|
|
33
34
|
setCurrentUserReady: (state: CurrentUserTypes, payload: boolean) => {
|
|
34
35
|
currentUserReady: boolean;
|
|
@@ -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").createModel()({state:{currentUserReady:!1,conversations:{}},reducers:{updateCurrentUser:function(r,s){return e.__assign(e.__assign({},r),s)},updateCurrentDefaultDevice:function(e,r){e.default_device=r},setCurrentUserReady:function(r,s){return e.__assign(e.__assign({},r),{currentUserReady:s})},updateConversations:function(e,r){return e.conversations[r.exten]=r.conversations,e}}});exports.currentUser=r;
|
|
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").createModel()({state:{currentUserReady:!1,conversations:{}},reducers:{updateCurrentUser:function(r,s){return e.__assign(e.__assign({},r),s)},updateMainPresence:function(e,r){e.mainPresence=r},updateCurrentDefaultDevice:function(e,r){e.default_device=r},setCurrentUserReady:function(r,s){return e.__assign(e.__assign({},r),{currentUserReady:s})},updateConversations:function(e,r){return e.conversations[r.exten]=r.conversations,e}}});exports.currentUser=r;
|
|
2
2
|
//# sourceMappingURL=currentUser.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"currentUser.js","sources":["../../src/models/currentUser.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 '.'\nimport type { UserInfoTypes, ExtensionTypes, ConversationsTypes } from '../types'\n\nconst defaultState: CurrentUserTypes = {\n currentUserReady: false,\n conversations: {},\n}\n\nexport const currentUser = createModel<RootModel>()({\n state: defaultState,\n reducers: {\n updateCurrentUser: (state, payload: UserInfoTypes) => {\n return {\n ...state,\n ...payload,\n }\n },\n updateCurrentDefaultDevice: (state, payload) => {\n state.default_device = payload\n },\n setCurrentUserReady: (state, payload: boolean) => {\n return {\n ...state,\n currentUserReady: payload,\n }\n },\n updateConversations: (state, payload: ExtensionTypes) => {\n // Update the conversatins of the exten\n state.conversations[payload.exten] = payload.conversations\n return state\n },\n },\n})\n\ninterface CurrentUserTypes extends UserInfoTypes {\n currentUserReady: boolean\n conversations: UserConversationTypes\n}\n\ninterface UserConversationTypes {\n [exten: string]: ConversationsTypes\n}\n"],"names":["currentUser","createModel","state","currentUserReady","conversations","reducers","updateCurrentUser","payload","__assign","updateCurrentDefaultDevice","default_device","setCurrentUserReady","updateConversations","exten"],"mappings":"wHAYaA,4DAAyBC,aAAXA,CAAyB,CAClDC,MANqC,CACrCC,kBAAkB,EAClBC,cAAe,CAAE,GAKjBC,SAAU,CACRC,kBAAmB,SAACJ,EAAOK,GACzB,OACKC,EAAAA,SAAAA,EAAAA,SAAA,CAAA,EAAAN,GACAK,EAEN,EACDE,
|
|
1
|
+
{"version":3,"file":"currentUser.js","sources":["../../src/models/currentUser.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 '.'\nimport type { UserInfoTypes, ExtensionTypes, ConversationsTypes } from '../types'\n\nconst defaultState: CurrentUserTypes = {\n currentUserReady: false,\n conversations: {},\n}\n\nexport const currentUser = createModel<RootModel>()({\n state: defaultState,\n reducers: {\n updateCurrentUser: (state, payload: UserInfoTypes) => {\n return {\n ...state,\n ...payload,\n }\n },\n updateMainPresence: (state, payload) => {\n state.mainPresence = payload\n },\n updateCurrentDefaultDevice: (state, payload) => {\n state.default_device = payload\n },\n setCurrentUserReady: (state, payload: boolean) => {\n return {\n ...state,\n currentUserReady: payload,\n }\n },\n updateConversations: (state, payload: ExtensionTypes) => {\n // Update the conversatins of the exten\n state.conversations[payload.exten] = payload.conversations\n return state\n },\n },\n})\n\ninterface CurrentUserTypes extends UserInfoTypes {\n currentUserReady: boolean\n conversations: UserConversationTypes\n}\n\ninterface UserConversationTypes {\n [exten: string]: ConversationsTypes\n}\n"],"names":["currentUser","createModel","state","currentUserReady","conversations","reducers","updateCurrentUser","payload","__assign","updateMainPresence","mainPresence","updateCurrentDefaultDevice","default_device","setCurrentUserReady","updateConversations","exten"],"mappings":"wHAYaA,4DAAyBC,aAAXA,CAAyB,CAClDC,MANqC,CACrCC,kBAAkB,EAClBC,cAAe,CAAE,GAKjBC,SAAU,CACRC,kBAAmB,SAACJ,EAAOK,GACzB,OACKC,EAAAA,SAAAA,EAAAA,SAAA,CAAA,EAAAN,GACAK,EAEN,EACDE,mBAAoB,SAACP,EAAOK,GAC1BL,EAAMQ,aAAeH,CACtB,EACDI,2BAA4B,SAACT,EAAOK,GAClCL,EAAMU,eAAiBL,CACxB,EACDM,oBAAqB,SAACX,EAAOK,GAC3B,OAAAC,EAAAA,SAAAA,EAAAA,SAAA,GACKN,GAAK,CACRC,iBAAkBI,GAErB,EACDO,oBAAqB,SAACZ,EAAOK,GAG3B,OADAL,EAAME,cAAcG,EAAQQ,OAASR,EAAQH,cACtCF,CACR"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../node_modules/tslib/tslib.es6.js"),t=require("../store/index.js");exports.answerPhysical=function(){return e.__awaiter(this,void 0,void 0,(function(){var r,s,n,a,o,i,c;return e.__generator(this,(function(u){switch(u.label){case 0:r=t.store.getState().currentUser.default_device,s={endpointId:null==r?void 0:r.id,endpointType:"extension"},u.label=1;case 1:return u.trys.push([1,3,,4]),n=t.store.getState().fetchDefaults,a=n.baseURL,o=n.headers,[4,fetch("".concat(a,"/astproxy/answer"),{method:"POST",headers:e.__assign({},o),body:JSON.stringify(s)})];case 2:if(!(i=u.sent()).ok)throw new Error(i.statusText);return[2,!0];case 3:throw c=u.sent(),new Error(c);case 4:return[2]}}))}))},exports.attendedTransfer=function(r){return e.__awaiter(this,void 0,void 0,(function(){var s,n,a,o,i;return e.__generator(this,(function(c){switch(c.label){case 0:return c.trys.push([0,2,,3]),s=t.store.getState().fetchDefaults,n=s.baseURL,a=s.headers,[4,fetch("".concat(n,"/astproxy/atxfer"),{method:"POST",headers:e.__assign({},a),body:JSON.stringify(r)})];case 1:if(!(o=c.sent()).ok)throw new Error(o.statusText);return[2,!0];case 2:throw i=c.sent(),new Error(i);case 3:return[2]}}))}))},exports.callPhysical=function(r){return e.__awaiter(this,void 0,void 0,(function(){var s,n,a,o,i,c,u;return e.__generator(this,(function(h){switch(h.label){case 0:s=t.store.getState().currentCall.ownerExtension,n={endpointId:s,endpointTpe:"extension",number:r},h.label=1;case 1:return h.trys.push([1,3,,4]),a=t.store.getState().fetchDefaults,o=a.baseURL,i=a.headers,[4,fetch("".concat(o,"/astproxy/call"),{method:"POST",headers:e.__assign({},i),body:JSON.stringify(n)})];case 2:if(!(c=h.sent()).ok)throw new Error(c.statusText);return[2,!0];case 3:throw u=h.sent(),new Error(u);case 4:return[2]}}))}))},exports.getAllExtensions=function(){return e.__awaiter(this,void 0,void 0,(function(){var r,s,n,a,o;return e.__generator(this,(function(i){switch(i.label){case 0:return i.trys.push([0,3,,4]),r=t.store.getState().fetchDefaults,s=r.baseURL,n=r.headers,[4,fetch("".concat(s,"/astproxy/extensions"),{headers:e.__assign({},n)})];case 1:if(!(a=i.sent()).ok)throw new Error(a.statusText);return[4,a.json()];case 2:return[2,i.sent()];case 3:throw o=i.sent(),new Error(o);case 4:return[2]}}))}))},exports.hangupConversation=function(r){return e.__awaiter(this,void 0,void 0,(function(){var s,n,a,o,i;return e.__generator(this,(function(c){switch(c.label){case 0:return c.trys.push([0,2,,3]),s=t.store.getState().fetchDefaults,n=s.baseURL,a=s.headers,[4,fetch("".concat(n,"/astproxy/hangup"),{method:"POST",headers:e.__assign({},a),body:JSON.stringify(r)})];case 1:if(!(o=c.sent()).ok)throw new Error(o.statusText);return[2,!0];case 2:throw i=c.sent(),new Error(i);case 3:return[2]}}))}))},exports.hangupPhysical=function(){return e.__awaiter(this,void 0,void 0,(function(){var
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../node_modules/tslib/tslib.es6.js"),t=require("../store/index.js");exports.answerPhysical=function(){return e.__awaiter(this,void 0,void 0,(function(){var r,s,n,a,o,i,c;return e.__generator(this,(function(u){switch(u.label){case 0:r=t.store.getState().currentUser.default_device,s={endpointId:null==r?void 0:r.id,endpointType:"extension"},u.label=1;case 1:return u.trys.push([1,3,,4]),n=t.store.getState().fetchDefaults,a=n.baseURL,o=n.headers,[4,fetch("".concat(a,"/astproxy/answer"),{method:"POST",headers:e.__assign({},o),body:JSON.stringify(s)})];case 2:if(!(i=u.sent()).ok)throw new Error(i.statusText);return[2,!0];case 3:throw c=u.sent(),new Error(c);case 4:return[2]}}))}))},exports.attendedTransfer=function(r){return e.__awaiter(this,void 0,void 0,(function(){var s,n,a,o,i;return e.__generator(this,(function(c){switch(c.label){case 0:return c.trys.push([0,2,,3]),s=t.store.getState().fetchDefaults,n=s.baseURL,a=s.headers,[4,fetch("".concat(n,"/astproxy/atxfer"),{method:"POST",headers:e.__assign({},a),body:JSON.stringify(r)})];case 1:if(!(o=c.sent()).ok)throw new Error(o.statusText);return[2,!0];case 2:throw i=c.sent(),new Error(i);case 3:return[2]}}))}))},exports.callPhysical=function(r){return e.__awaiter(this,void 0,void 0,(function(){var s,n,a,o,i,c,u;return e.__generator(this,(function(h){switch(h.label){case 0:s=t.store.getState().currentCall.ownerExtension,n={endpointId:s,endpointTpe:"extension",number:r},h.label=1;case 1:return h.trys.push([1,3,,4]),a=t.store.getState().fetchDefaults,o=a.baseURL,i=a.headers,[4,fetch("".concat(o,"/astproxy/call"),{method:"POST",headers:e.__assign({},i),body:JSON.stringify(n)})];case 2:if(!(c=h.sent()).ok)throw new Error(c.statusText);return[2,!0];case 3:throw u=h.sent(),new Error(u);case 4:return[2]}}))}))},exports.getAllExtensions=function(){return e.__awaiter(this,void 0,void 0,(function(){var r,s,n,a,o;return e.__generator(this,(function(i){switch(i.label){case 0:return i.trys.push([0,3,,4]),r=t.store.getState().fetchDefaults,s=r.baseURL,n=r.headers,[4,fetch("".concat(s,"/astproxy/extensions"),{headers:e.__assign({},n)})];case 1:if(!(a=i.sent()).ok)throw new Error(a.statusText);return[4,a.json()];case 2:return[2,i.sent()];case 3:throw o=i.sent(),new Error(o);case 4:return[2]}}))}))},exports.hangupConversation=function(r){return e.__awaiter(this,void 0,void 0,(function(){var s,n,a,o,i;return e.__generator(this,(function(c){switch(c.label){case 0:return c.trys.push([0,2,,3]),s=t.store.getState().fetchDefaults,n=s.baseURL,a=s.headers,[4,fetch("".concat(n,"/astproxy/hangup"),{method:"POST",headers:e.__assign({},a),body:JSON.stringify(r)})];case 1:if(!(o=c.sent()).ok)throw new Error(o.statusText);return[2,!0];case 2:throw i=c.sent(),new Error(i);case 3:return[2]}}))}))},exports.hangupPhysical=function(){var r;return e.__awaiter(this,void 0,void 0,(function(){var s,n,a,o,i,c,u,h,d,l,f,w;return e.__generator(this,(function(_){switch(_.label){case 0:s=t.store.getState().currentCall,n=s.ownerExtension,a=s.conversationId,o=t.store.getState().currentUser,c="/astproxy/",u="",""!==(null==(i={convid:a,endpointId:n,endpointType:"extension"})?void 0:i.convid)&&void 0!==(null==i?void 0:i.convid)?u="hangup":(u="cancel",i.endpointId=null===(r=null==o?void 0:o.default_device)||void 0===r?void 0:r.id),_.label=1;case 1:return _.trys.push([1,3,,4]),h=t.store.getState().fetchDefaults,d=h.baseURL,l=h.headers,[4,fetch("".concat(d)+"".concat(c)+"".concat(u),{method:"POST",headers:e.__assign({},l),body:JSON.stringify(i)})];case 2:if(!(f=_.sent()).ok)throw new Error(f.statusText);return[2,!0];case 3:throw w=_.sent(),new Error(w);case 4:return[2]}}))}))},exports.hangupPhysicalRecordingCall=function(){return e.__awaiter(this,void 0,void 0,(function(){var r,s,n,a,o,i,c,u,h;return e.__generator(this,(function(d){switch(d.label){case 0:r=t.store.getState().physicalRecorder,s=r.ownerExtension,n=r.conversationId,a={convid:n,endpointId:s,endpointType:"extension"},d.label=1;case 1:return d.trys.push([1,3,,4]),o=t.store.getState().fetchDefaults,i=o.baseURL,c=o.headers,[4,fetch("".concat(i,"/astproxy/hangup"),{method:"POST",headers:e.__assign({},c),body:JSON.stringify(a)})];case 2:if(!(u=d.sent()).ok)throw new Error(u.statusText);return[2,!0];case 3:throw h=d.sent(),new Error(h);case 4:return[2]}}))}))},exports.mutePhysical=function(r){return e.__awaiter(this,void 0,void 0,(function(){var s,n,a,o,i,c,u,h,d;return e.__generator(this,(function(l){switch(l.label){case 0:s=t.store.getState().currentCall,n=s.ownerExtension,a=s.conversationId,o={convid:a,endpointId:n},l.label=1;case 1:return l.trys.push([1,3,,4]),i=t.store.getState().fetchDefaults,c=i.baseURL,u=i.headers,[4,fetch("".concat(c,"/astproxy/toggle_mute"),{method:"POST",headers:e.__assign({},u),body:JSON.stringify(o)})];case 2:if(!(h=l.sent()).ok)throw new Error(h.statusText);return t.store.dispatch.currentCall.updateCurrentCall({muted:r}),[2,!0];case 3:throw d=l.sent(),new Error(d);case 4:return[2]}}))}))},exports.parkConversation=function(r){return e.__awaiter(this,void 0,void 0,(function(){var s,n,a,o,i;return e.__generator(this,(function(c){switch(c.label){case 0:return c.trys.push([0,2,,3]),s=t.store.getState().fetchDefaults,n=s.baseURL,a=s.headers,[4,fetch("".concat(n,"/astproxy/park"),{method:"POST",headers:e.__assign({},a),body:JSON.stringify(r)})];case 1:if(!(o=c.sent()).ok)throw new Error(o.statusText);return[2,!0];case 2:throw i=c.sent(),new Error(i);case 3:return[2]}}))}))},exports.pausePhysical=function(r){return e.__awaiter(this,void 0,void 0,(function(){var s,n,a,o,i,c,u,h;return e.__generator(this,(function(d){switch(d.label){case 0:s=t.store.getState().currentCall,n=s.ownerExtension,s.conversationId,a={endpointId:n},d.label=1;case 1:return d.trys.push([1,3,,4]),o=t.store.getState().fetchDefaults,i=o.baseURL,c=o.headers,[4,fetch("".concat(i,"/astproxy/toggle_hold"),{method:"POST",headers:e.__assign({},c),body:JSON.stringify(a)})];case 2:if(!(u=d.sent()).ok)throw new Error(u.statusText);return t.store.dispatch.currentCall.updateCurrentCall({paused:r}),[2,!0];case 3:throw h=d.sent(),new Error(h);case 4:return[2]}}))}))},exports.sendPhysicalDTMF=function(r){return e.__awaiter(this,void 0,void 0,(function(){var s,n,a,o,i,c,u,h,d;return e.__generator(this,(function(l){switch(l.label){case 0:s=t.store.getState().currentCall,n=s.ownerExtension,a=s.conversationId,o={convid:a,endpointId:n,tone:r.toString()},l.label=1;case 1:return l.trys.push([1,3,,4]),i=t.store.getState().fetchDefaults,c=i.baseURL,u=i.headers,[4,fetch("".concat(c,"/astproxy/dtmf"),{method:"POST",headers:e.__assign({},u),body:JSON.stringify(o)})];case 2:if(!(h=l.sent()).ok)throw new Error(h.statusText);return[2,!0];case 3:throw d=l.sent(),new Error(d);case 4:return[2]}}))}))},exports.toggleRecord=function(r,s){return e.__awaiter(this,void 0,void 0,(function(){var n,a,o,i;return e.__generator(this,(function(c){switch(c.label){case 0:return c.trys.push([0,2,,3]),n=t.store.getState().fetchDefaults,a=n.baseURL,o=n.headers,[4,fetch("".concat(a,"/astproxy/").concat(r),{method:"POST",headers:e.__assign({},o),body:JSON.stringify(s)})];case 1:if(!(i=c.sent()).ok)throw new Error(i.statusText);return[2,!0];case 2:throw c.sent();case 3:return[2]}}))}))};
|
|
2
2
|
//# sourceMappingURL=astproxy.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"astproxy.js","sources":["../../src/services/astproxy.ts"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport { store } from '../store'\nimport { ExtensionsTypes, TransferTypes } from '../types'\nimport { useSelector } from 'react-redux'\n\n/**\n * Get all extensions\n */\nexport async function getAllExtensions(): Promise<ExtensionsTypes> {\n try {\n const { baseURL, headers } = store.getState().fetchDefaults\n const response = await fetch(`${baseURL}/astproxy/extensions`, {\n headers: { ...headers },\n })\n if (!response.ok) {\n throw new Error(response.statusText)\n }\n const data = await response.json()\n return data\n } catch (error: any) {\n throw new Error(error)\n }\n}\n\n/**\n * Start blind transfer\n */\nexport async function blindTransfer(body: TransferTypes) {\n try {\n const { baseURL, headers } = store.getState().fetchDefaults\n const response = await fetch(`${baseURL}/astproxy/blindtransfer`, {\n method: 'POST',\n headers: { ...headers },\n body: JSON.stringify(body),\n })\n if (!response.ok) {\n throw new Error(response.statusText)\n }\n return true\n } catch (error: any) {\n throw new Error(error)\n }\n}\n\n/**\n * Start attended transfer\n */\nexport async function attendedTransfer(body: TransferTypes) {\n try {\n const { baseURL, headers } = store.getState().fetchDefaults\n const response = await fetch(`${baseURL}/astproxy/atxfer`, {\n method: 'POST',\n headers: { ...headers },\n body: JSON.stringify(body),\n })\n if (!response.ok) {\n throw new Error(response.statusText)\n }\n return true\n } catch (error: any) {\n throw new Error(error)\n }\n}\n\n/**\n * Hangup a conversation\n */\nexport async function hangupConversation(body: { convid: string; endpointId: string }) {\n try {\n const { baseURL, headers } = store.getState().fetchDefaults\n const response = await fetch(`${baseURL}/astproxy/hangup`, {\n method: 'POST',\n headers: { ...headers },\n body: JSON.stringify(body),\n })\n if (!response.ok) {\n throw new Error(response.statusText)\n }\n return true\n } catch (error: any) {\n throw new Error(error)\n }\n}\n\nexport async function parkConversation(body: {\n applicantId: string // Current user main extension\n convid: string\n endpointId: string // Current user main extension\n}) {\n try {\n const { baseURL, headers } = store.getState().fetchDefaults\n const response = await fetch(`${baseURL}/astproxy/park`, {\n method: 'POST',\n headers: { ...headers },\n body: JSON.stringify(body),\n })\n if (!response.ok) {\n throw new Error(response.statusText)\n }\n return true\n } catch (error: any) {\n throw new Error(error)\n }\n}\n\nexport async function answerPhysical() {\n // get data\n const { default_device } = store.getState().currentUser\n\n // compose body\n let body: any = {\n endpointId: default_device?.id,\n endpointType: 'extension',\n }\n\n try {\n const { baseURL, headers } = store.getState().fetchDefaults\n const response = await fetch(`${baseURL}/astproxy/answer`, {\n method: 'POST',\n headers: { ...headers },\n body: JSON.stringify(body),\n })\n if (!response.ok) {\n throw new Error(response.statusText)\n }\n return true\n } catch (error: any) {\n throw new Error(error)\n }\n}\n\nexport async function hangupPhysical() {\n // get data\n const { ownerExtension, conversationId } = store.getState().currentCall\n // compose body\n let body: any = {\n convid: conversationId,\n endpointId: ownerExtension,\n endpointType: 'extension',\n }\n\n try {\n const { baseURL, headers } = store.getState().fetchDefaults\n const response = await fetch(`${baseURL}/astproxy/hangup`, {\n method: 'POST',\n headers: { ...headers },\n body: JSON.stringify(body),\n })\n if (!response.ok) {\n throw new Error(response.statusText)\n }\n return true\n } catch (error: any) {\n throw new Error(error)\n }\n}\n\nexport async function hangupPhysicalRecordingCall() {\n // get data\n const { ownerExtension, conversationId } = store.getState().physicalRecorder\n // compose body\n let body: any = {\n convid: conversationId,\n endpointId: ownerExtension,\n endpointType: 'extension',\n }\n\n try {\n const { baseURL, headers } = store.getState().fetchDefaults\n const response = await fetch(`${baseURL}/astproxy/hangup`, {\n method: 'POST',\n headers: { ...headers },\n body: JSON.stringify(body),\n })\n if (!response.ok) {\n throw new Error(response.statusText)\n }\n return true\n } catch (error: any) {\n throw new Error(error)\n }\n}\n\nexport async function mutePhysical(toggleMute: boolean) {\n // get data\n const { ownerExtension, conversationId } = store.getState().currentCall\n\n // compose body\n let body: any = {\n convid: conversationId,\n endpointId: ownerExtension,\n }\n\n try {\n const { baseURL, headers } = store.getState().fetchDefaults\n const response = await fetch(`${baseURL}/astproxy/toggle_mute`, {\n method: 'POST',\n headers: { ...headers },\n body: JSON.stringify(body),\n })\n if (!response.ok) {\n throw new Error(response.statusText)\n }\n store.dispatch.currentCall.updateCurrentCall({\n muted: toggleMute,\n })\n return true\n } catch (error: any) {\n throw new Error(error)\n }\n}\n\nexport async function pausePhysical(togglePause: boolean) {\n // get data\n const { ownerExtension, conversationId } = store.getState().currentCall\n\n // compose body\n let body: any = {\n endpointId: ownerExtension,\n }\n\n try {\n const { baseURL, headers } = store.getState().fetchDefaults\n const response = await fetch(`${baseURL}/astproxy/toggle_hold`, {\n method: 'POST',\n headers: { ...headers },\n body: JSON.stringify(body),\n })\n if (!response.ok) {\n throw new Error(response.statusText)\n }\n store.dispatch.currentCall.updateCurrentCall({\n paused: togglePause,\n })\n return true\n } catch (error: any) {\n throw new Error(error)\n }\n}\n\nexport async function sendPhysicalDTMF(key: string) {\n // get data\n const { ownerExtension, conversationId } = store.getState().currentCall\n\n // compose body\n let body: any = {\n convid: conversationId,\n endpointId: ownerExtension,\n tone: key.toString(),\n }\n\n try {\n const { baseURL, headers } = store.getState().fetchDefaults\n const response = await fetch(`${baseURL}/astproxy/dtmf`, {\n method: 'POST',\n headers: { ...headers },\n body: JSON.stringify(body),\n })\n if (!response.ok) {\n throw new Error(response.statusText)\n }\n return true\n } catch (error: any) {\n throw new Error(error)\n }\n}\n\nexport async function callPhysical(to: string) {\n // get data\n const { ownerExtension } = store.getState().currentCall\n\n // compose body\n let body: any = {\n endpointId: ownerExtension,\n endpointTpe: 'extension',\n number: to,\n }\n\n try {\n const { baseURL, headers } = store.getState().fetchDefaults\n const response = await fetch(`${baseURL}/astproxy/call`, {\n method: 'POST',\n headers: { ...headers },\n body: JSON.stringify(body),\n })\n if (!response.ok) {\n throw new Error(response.statusText)\n }\n return true\n } catch (error: any) {\n throw new Error(error)\n }\n}\n\nexport async function toggleRecord(recordingType: any, obj: any) {\n try {\n const { baseURL, headers } = store.getState().fetchDefaults\n const response = await fetch(`${baseURL}/astproxy/${recordingType}`, {\n method: 'POST',\n headers: { ...headers },\n body: JSON.stringify(obj),\n })\n if (!response.ok) {\n throw new Error(response.statusText)\n }\n return true\n } catch (error: any) {\n throw error\n }\n}\n"],"names":["default_device","store","getState","currentUser","body","endpointId","id","endpointType","_a","fetchDefaults","baseURL","headers","fetch","concat","method","__assign","JSON","stringify","response","_b","sent","ok","Error","statusText","error_6","error_3","to","ownerExtension","currentCall","endpointTpe","number","error_12","json","error_1","error_4","conversationId","convid","_c","error_7","physicalRecorder","error_8","toggleMute","dispatch","updateCurrentCall","muted","error_9","error_5","togglePause","paused","error_10","key","tone","toString","error_11","recordingType","obj"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"astproxy.js","sources":["../../src/services/astproxy.ts"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport { store } from '../store'\nimport { ExtensionsTypes, TransferTypes } from '../types'\nimport { useSelector } from 'react-redux'\n\n/**\n * Get all extensions\n */\nexport async function getAllExtensions(): Promise<ExtensionsTypes> {\n try {\n const { baseURL, headers } = store.getState().fetchDefaults\n const response = await fetch(`${baseURL}/astproxy/extensions`, {\n headers: { ...headers },\n })\n if (!response.ok) {\n throw new Error(response.statusText)\n }\n const data = await response.json()\n return data\n } catch (error: any) {\n throw new Error(error)\n }\n}\n\n/**\n * Start blind transfer\n */\nexport async function blindTransfer(body: TransferTypes) {\n try {\n const { baseURL, headers } = store.getState().fetchDefaults\n const response = await fetch(`${baseURL}/astproxy/blindtransfer`, {\n method: 'POST',\n headers: { ...headers },\n body: JSON.stringify(body),\n })\n if (!response.ok) {\n throw new Error(response.statusText)\n }\n return true\n } catch (error: any) {\n throw new Error(error)\n }\n}\n\n/**\n * Start attended transfer\n */\nexport async function attendedTransfer(body: TransferTypes) {\n try {\n const { baseURL, headers } = store.getState().fetchDefaults\n const response = await fetch(`${baseURL}/astproxy/atxfer`, {\n method: 'POST',\n headers: { ...headers },\n body: JSON.stringify(body),\n })\n if (!response.ok) {\n throw new Error(response.statusText)\n }\n return true\n } catch (error: any) {\n throw new Error(error)\n }\n}\n\n/**\n * Hangup a conversation\n */\nexport async function hangupConversation(body: { convid: string; endpointId: string }) {\n try {\n const { baseURL, headers } = store.getState().fetchDefaults\n const response = await fetch(`${baseURL}/astproxy/hangup`, {\n method: 'POST',\n headers: { ...headers },\n body: JSON.stringify(body),\n })\n if (!response.ok) {\n throw new Error(response.statusText)\n }\n return true\n } catch (error: any) {\n throw new Error(error)\n }\n}\n\nexport async function parkConversation(body: {\n applicantId: string // Current user main extension\n convid: string\n endpointId: string // Current user main extension\n}) {\n try {\n const { baseURL, headers } = store.getState().fetchDefaults\n const response = await fetch(`${baseURL}/astproxy/park`, {\n method: 'POST',\n headers: { ...headers },\n body: JSON.stringify(body),\n })\n if (!response.ok) {\n throw new Error(response.statusText)\n }\n return true\n } catch (error: any) {\n throw new Error(error)\n }\n}\n\nexport async function answerPhysical() {\n // get data\n const { default_device } = store.getState().currentUser\n\n // compose body\n let body: any = {\n endpointId: default_device?.id,\n endpointType: 'extension',\n }\n\n try {\n const { baseURL, headers } = store.getState().fetchDefaults\n const response = await fetch(`${baseURL}/astproxy/answer`, {\n method: 'POST',\n headers: { ...headers },\n body: JSON.stringify(body),\n })\n if (!response.ok) {\n throw new Error(response.statusText)\n }\n return true\n } catch (error: any) {\n throw new Error(error)\n }\n}\n\nexport async function hangupPhysical() {\n // get data\n const { ownerExtension, conversationId } = store.getState().currentCall\n const currentUserInformation = store.getState().currentUser\n // compose body\n let body: any = {\n convid: conversationId,\n endpointId: ownerExtension,\n endpointType: 'extension',\n }\n let astproxyUrl = '/astproxy/'\n let actionUrl = ''\n if (body?.convid !== '' && body?.convid !== undefined) {\n actionUrl = 'hangup'\n } else {\n actionUrl = 'cancel'\n // set user default device as endpointId on cancel action\n body.endpointId = currentUserInformation?.default_device?.id\n }\n try {\n const { baseURL, headers } = store.getState().fetchDefaults\n // if default device is physical check if conversation is empty or not\n // if conversation is empty then cancel the call else hangup the call\n const response = await fetch(`${baseURL}` + `${astproxyUrl}` + `${actionUrl}`, {\n method: 'POST',\n headers: { ...headers },\n body: JSON.stringify(body),\n })\n if (!response.ok) {\n throw new Error(response.statusText)\n }\n return true\n } catch (error: any) {\n throw new Error(error)\n }\n}\n\nexport async function hangupPhysicalRecordingCall() {\n // get data\n const { ownerExtension, conversationId } = store.getState().physicalRecorder\n // compose body\n let body: any = {\n convid: conversationId,\n endpointId: ownerExtension,\n endpointType: 'extension',\n }\n\n try {\n const { baseURL, headers } = store.getState().fetchDefaults\n const response = await fetch(`${baseURL}/astproxy/hangup`, {\n method: 'POST',\n headers: { ...headers },\n body: JSON.stringify(body),\n })\n if (!response.ok) {\n throw new Error(response.statusText)\n }\n return true\n } catch (error: any) {\n throw new Error(error)\n }\n}\n\nexport async function mutePhysical(toggleMute: boolean) {\n // get data\n const { ownerExtension, conversationId } = store.getState().currentCall\n\n // compose body\n let body: any = {\n convid: conversationId,\n endpointId: ownerExtension,\n }\n\n try {\n const { baseURL, headers } = store.getState().fetchDefaults\n const response = await fetch(`${baseURL}/astproxy/toggle_mute`, {\n method: 'POST',\n headers: { ...headers },\n body: JSON.stringify(body),\n })\n if (!response.ok) {\n throw new Error(response.statusText)\n }\n store.dispatch.currentCall.updateCurrentCall({\n muted: toggleMute,\n })\n return true\n } catch (error: any) {\n throw new Error(error)\n }\n}\n\nexport async function pausePhysical(togglePause: boolean) {\n // get data\n const { ownerExtension, conversationId } = store.getState().currentCall\n\n // compose body\n let body: any = {\n endpointId: ownerExtension,\n }\n\n try {\n const { baseURL, headers } = store.getState().fetchDefaults\n const response = await fetch(`${baseURL}/astproxy/toggle_hold`, {\n method: 'POST',\n headers: { ...headers },\n body: JSON.stringify(body),\n })\n if (!response.ok) {\n throw new Error(response.statusText)\n }\n store.dispatch.currentCall.updateCurrentCall({\n paused: togglePause,\n })\n return true\n } catch (error: any) {\n throw new Error(error)\n }\n}\n\nexport async function sendPhysicalDTMF(key: string) {\n // get data\n const { ownerExtension, conversationId } = store.getState().currentCall\n\n // compose body\n let body: any = {\n convid: conversationId,\n endpointId: ownerExtension,\n tone: key.toString(),\n }\n\n try {\n const { baseURL, headers } = store.getState().fetchDefaults\n const response = await fetch(`${baseURL}/astproxy/dtmf`, {\n method: 'POST',\n headers: { ...headers },\n body: JSON.stringify(body),\n })\n if (!response.ok) {\n throw new Error(response.statusText)\n }\n return true\n } catch (error: any) {\n throw new Error(error)\n }\n}\n\nexport async function callPhysical(to: string) {\n // get data\n const { ownerExtension } = store.getState().currentCall\n\n // compose body\n let body: any = {\n endpointId: ownerExtension,\n endpointTpe: 'extension',\n number: to,\n }\n\n try {\n const { baseURL, headers } = store.getState().fetchDefaults\n const response = await fetch(`${baseURL}/astproxy/call`, {\n method: 'POST',\n headers: { ...headers },\n body: JSON.stringify(body),\n })\n if (!response.ok) {\n throw new Error(response.statusText)\n }\n return true\n } catch (error: any) {\n throw new Error(error)\n }\n}\n\nexport async function toggleRecord(recordingType: any, obj: any) {\n try {\n const { baseURL, headers } = store.getState().fetchDefaults\n const response = await fetch(`${baseURL}/astproxy/${recordingType}`, {\n method: 'POST',\n headers: { ...headers },\n body: JSON.stringify(obj),\n })\n if (!response.ok) {\n throw new Error(response.statusText)\n }\n return true\n } catch (error: any) {\n throw error\n }\n}\n"],"names":["default_device","store","getState","currentUser","body","endpointId","id","endpointType","_a","fetchDefaults","baseURL","headers","fetch","concat","method","__assign","JSON","stringify","response","_b","sent","ok","Error","statusText","error_6","error_3","to","ownerExtension","currentCall","endpointTpe","number","error_12","json","error_1","error_4","conversationId","currentUserInformation","astproxyUrl","actionUrl","convid","undefined","_c","_d","error_7","physicalRecorder","error_8","toggleMute","dispatch","updateCurrentCall","muted","error_9","error_5","togglePause","paused","error_10","key","tone","toString","error_11","recordingType","obj"],"mappings":"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"}
|