@nethesis/phone-island 0.8.28 → 0.8.30
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/components/Socket.js +1 -1
- package/dist/components/Socket.js.map +1 -1
- package/dist/events/SocketEvents.d.ts +6 -0
- package/dist/events/SocketEvents.js +1 -1
- package/dist/events/SocketEvents.js.map +1 -1
- package/dist/services/astproxy.js +1 -1
- package/dist/services/astproxy.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../node_modules/tslib/tslib.es6.js"),n=require("react");require("../node_modules/react-redux/es/index.js");var t=require("../node_modules/socket.io-client/build/esm/index.js"),r=require("../lib/phone/conversation.js"),c=require("../utils/genericFunctions/eventDispatch.js"),o=require("../utils/genericFunctions/withTimeout.js");require("../lib/webrtc/janus.js");var a=require("../store/index.js");require("../node_modules/webrtc-adapter/src/js/adapter_core.js"),require("../node_modules/mic-check/lib/index.js");var s=require("../events/SocketEvents.js"),i=require("../utils/genericFunctions/timestamp.js"),u=require("../lib/user/extensions.js"),l=require("../utils/genericFunctions/isEmpty.js"),d=require("../node_modules/react-redux/es/hooks/useSelector.js");require("../node_modules/react-redux/es/components/Context.js"),require("../node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js"),require("../node_modules/react-redux/node_modules/react-is/index.js");var p=require("../node_modules/react-redux/es/hooks/useDispatch.js");function m(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var f=m(n);exports.Socket=function(m){var h=m.hostName,v=m.username,g=m.authToken,k=m.reload,b=m.reloadedCallback,y=m.children,C=m.uaType,S=p.useDispatch(),_=n.useRef(),N=n.useRef(),j=d.useSelector((function(e){return e.currentUser}));return n.useEffect((function(){var n=function(e,n){var t,o=a.store.getState().currentCall,s=o.transferring,l=o.transferSwitching,d=o.transferCalls,p=a.store.getState().island.view;if(Object.keys(n).length>0){if(e.status){var m=a.store.getState().users.extensions;switch(e.status){case"ringing":S.currentCall.checkIncomingUpdatePlay({conversationId:n.id,displayName:r.getDisplayName(n),number:"".concat(n.counterpartNum),incomingSocket:!0,username:"".concat(m&&m[n.counterpartNum]&&m[n.counterpartNum].username)||"",ownerExtension:n.owner}),c.eventDispatch("phone-island-call-ringing",{});break;case"busy":if(n&&n.connected&&(S.currentCall.updateCurrentCall({conversationId:n.id,displayName:r.getDisplayName(n),number:"".concat(n.counterpartNum),ownerExtension:n.owner,username:"".concat(m&&m[n.counterpartNum]&&m[n.counterpartNum].username)||""}),S.currentCall.checkAcceptedUpdate({acceptedSocket:!0}),S.currentCall.addTransferCalls({type:"transferred",displayName:r.getDisplayName(n),number:"".concat(n.counterpartNum),startTime:"".concat(i.getTimestampInSeconds())}),"physical"===(null===(t=null==j?void 0:j.default_device)||void 0===t?void 0:t.type)&&function(e){S.currentCall.updateCurrentCall({conversationId:e.id,accepted:!0,incoming:"in"!==e.direction&&void 0}),c.eventDispatch("phone-island-call-answered",{}),a.store.dispatch.player.stopAudioPlayer()}(n),"call"===p&&s&&S.currentCall.updateCurrentCall({transferring:!1})),d.length>1)S.currentCall.deleteTransferCalls();else if(n&&!n.connected){if(s&&!l){var f=d.find((function(e){return e.number===n.counterpartNum}));!n.connected&&f&&(S.currentCall.updateCurrentCall({transferring:!1}),c.eventDispatch("phone-island-call-transfer-failed",{}),S.currentCall.updateTransferSwitching(!1))}"REC"===(null==n?void 0:n.counterpartName)&&S.physicalRecorder.setRecordingTempVariable(!0)}n&&!n.connected&&"out"===n.direction&&S.currentCall.checkOutgoingUpdate({outgoingSocket:!0,displayName:r.getDisplayName(n),number:"".concat(n.counterpartNum),username:"".concat(m&&m[n.counterpartNum]&&m[n.counterpartNum].username)||""});case"onhold":var h=n.counterpartName,v=n.counterpartNum,g=n.startTime;s&&v&&h&&"<unknown>"!==h&&(S.currentCall.addTransferCalls({type:"destination",displayName:r.getDisplayName(n),number:v,startTime:"".concat(i.getTimestampInSeconds())}),S.currentCall.updateCurrentCall({displayName:r.getDisplayName(n),number:v,startTime:"".concat(g/1e3),conversationId:n.id}),S.island.setIslandView("call"));break;case"busy_ringing":c.eventDispatch("phone-island-call-ringing",{})}}}else"online"==e.status&&u.userTotallyFree()&&(S.player.stopAudioPlayer(),S.currentCall.reset(),S.physicalRecorder.setRecordingTempVariable(!1))};return N.current=t.io("https://"+h,{upgrade:!1,transports:["websocket"],reconnection:!0,reconnectionDelay:2e3}),N.current.on("connect",(function(){console.debug("Socket connected sid: ".concat(N.current.id)),c.eventDispatch("phone-island-socket-connected",{})})),N.current.on("disconnect",(function(e){console.debug("Socket disconnect - reason: ".concat(e)),e.includes("server disconnect")?c.eventDispatch("phone-island-server-disconnected",{}):c.eventDispatch("phone-island-socket-disconnected",{})})),N.current.io.on("error",(function(e){console.debug("Socket error: ",e)})),N.current.on("connect_error",(function(e){console.debug("Socket connect_error: ",e)})),N.current.io.on("reconnect",(function(e){c.eventDispatch("phone-island-socket-reconnected",{}),console.debug("Socket reconnect attemp ".concat(e," (sid: ").concat(N.current.id,")"))})),N.current.io.on("reconnect_attempt",(function(e){console.debug("Socket reconnect_attempt ".concat(e))})),N.current.io.on("reconnect_error",(function(e){console.debug("Socket reconnect_error: ",e)})),N.current.io.on("reconnect_failed",(function(){console.debug("Socket reconnect_failed")})),_.current=setInterval((function(){var e=Date.now();N.current.volatile.emit("ping",o.withTimeout((function(){S.alerts.removeAlert("socket_down"),c.eventDispatch("phone-island-socket-disconnected-popup-close",{});var n=Date.now()-e;console.debug("Socket latency: ".concat(n,"ms")),console.debug("Socket is reachable!")}),(function(){S.alerts.setAlert("socket_down"),c.eventDispatch("phone-island-socket-disconnected-popup-open",{}),console.debug("Socket is unreachable!")}),7e3))}),7e3),N.current.on("connect",(function(){console.debug("Socket on: "+h+" is connected!"),N.current.emit("login",{accessKeyId:"".concat(v),token:g,uaType:C})})),N.current.on("authe_ok",(function(){console.debug("Socket authentication success!")})),N.current.on("userMainPresenceUpdate",(function(n){a.store.dispatch.users.updateEndpointMainPresence(e.__assign({},n.mainPresence)),s.dispatchMainPresence(n)})),N.current.on("extenUpdate",(function(e){S.users.updateExtension(e);var t=a.store.getState().users.extensions,r={};for(var c in t){var o=t[c].username,i=t[c].exten;r[o]||(r[o]=[]),r[o].push(i)}var u=r[e.username],d=e.conversations[Object.keys(e.conversations)[0]]||{};if(s.dispatchExtensions(e),l.isEmpty(d)){var p=null==u?void 0:u.some((function(e){var n,r=null===(n=t[e])||void 0===n?void 0:n.conversations;return!l.isEmpty(r)}));p||s.dispatchConversations(e)}else s.dispatchConversations(e);e.username===v&&(n(e,d),S.currentUser.updateConversations(e))})),N.current.on("queueUpdate",(function(e){s.dispatchQueueUpdate(e)})),N.current.on("queueMemberUpdate",(function(e){s.dispatchQueueMemberUpdate(e)})),N.current.on("takeOver",(function(){s.dispatchAlreadyLogin()})),N.current.on("serverReloaded",(function(){s.dispatchServerReload()})),N.current.on("parkingUpdate",(function(){s.dispatchParkingUpdate()})),N.current.on("actionNethLink",(function(e,n){s.dispatchUrlCall(e,n)})),function(){clearInterval(_.current),N.current.close()}}),[]),n.useEffect((function(){k&&(console.info("websocket reconnection"),N.current.disconnect(),N.current.connect(),b())}),[k]),f.default.createElement(f.default.Fragment,null,y)};
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../node_modules/tslib/tslib.es6.js"),n=require("react");require("../node_modules/react-redux/es/index.js");var t=require("../node_modules/socket.io-client/build/esm/index.js"),r=require("../lib/phone/conversation.js"),c=require("../utils/genericFunctions/eventDispatch.js"),o=require("../utils/genericFunctions/withTimeout.js");require("../lib/webrtc/janus.js");var a=require("../store/index.js");require("../node_modules/webrtc-adapter/src/js/adapter_core.js"),require("../node_modules/mic-check/lib/index.js");var s=require("../events/SocketEvents.js"),i=require("../utils/genericFunctions/timestamp.js"),u=require("../lib/user/extensions.js"),l=require("../utils/genericFunctions/isEmpty.js"),d=require("../node_modules/react-redux/es/hooks/useSelector.js");require("../node_modules/react-redux/es/components/Context.js"),require("../node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js"),require("../node_modules/react-redux/node_modules/react-is/index.js");var p=require("../node_modules/react-redux/es/hooks/useDispatch.js");function m(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var f=m(n);exports.Socket=function(m){var h=m.hostName,v=m.username,g=m.authToken,k=m.reload,b=m.reloadedCallback,y=m.children,C=m.uaType,S=p.useDispatch(),_=n.useRef(),N=n.useRef(),j=d.useSelector((function(e){return e.currentUser}));return n.useEffect((function(){var n=function(e,n){var t,o=a.store.getState().currentCall,s=o.transferring,l=o.transferSwitching,d=o.transferCalls,p=a.store.getState().island.view;if(Object.keys(n).length>0){if(e.status){var m=a.store.getState().users.extensions;switch(e.status){case"ringing":S.currentCall.checkIncomingUpdatePlay({conversationId:n.id,displayName:r.getDisplayName(n),number:"".concat(n.counterpartNum),incomingSocket:!0,username:"".concat(m&&m[n.counterpartNum]&&m[n.counterpartNum].username)||"",ownerExtension:n.owner}),c.eventDispatch("phone-island-call-ringing",{});break;case"busy":if(n&&n.connected&&(S.currentCall.updateCurrentCall({conversationId:n.id,displayName:r.getDisplayName(n),number:"".concat(n.counterpartNum),ownerExtension:n.owner,username:"".concat(m&&m[n.counterpartNum]&&m[n.counterpartNum].username)||""}),S.currentCall.checkAcceptedUpdate({acceptedSocket:!0}),S.currentCall.addTransferCalls({type:"transferred",displayName:r.getDisplayName(n),number:"".concat(n.counterpartNum),startTime:"".concat(i.getTimestampInSeconds())}),"physical"===(null===(t=null==j?void 0:j.default_device)||void 0===t?void 0:t.type)&&function(e){S.currentCall.updateCurrentCall({conversationId:e.id,accepted:!0,incoming:"in"!==e.direction&&void 0}),c.eventDispatch("phone-island-call-answered",{}),a.store.dispatch.player.stopAudioPlayer()}(n),"call"===p&&s&&S.currentCall.updateCurrentCall({transferring:!1})),d.length>1)S.currentCall.deleteTransferCalls();else if(n&&!n.connected){if(s&&!l){var f=d.find((function(e){return e.number===n.counterpartNum}));!n.connected&&f&&(S.currentCall.updateCurrentCall({transferring:!1}),c.eventDispatch("phone-island-call-transfer-failed",{}),S.currentCall.updateTransferSwitching(!1))}"REC"===(null==n?void 0:n.counterpartName)&&S.physicalRecorder.setRecordingTempVariable(!0)}n&&!n.connected&&"out"===n.direction&&S.currentCall.checkOutgoingUpdate({outgoingSocket:!0,displayName:r.getDisplayName(n),number:"".concat(n.counterpartNum),username:"".concat(m&&m[n.counterpartNum]&&m[n.counterpartNum].username)||""});case"onhold":var h=n.counterpartName,v=n.counterpartNum,g=n.startTime;s&&v&&h&&"<unknown>"!==h&&(S.currentCall.addTransferCalls({type:"destination",displayName:r.getDisplayName(n),number:v,startTime:"".concat(i.getTimestampInSeconds())}),S.currentCall.updateCurrentCall({displayName:r.getDisplayName(n),number:v,startTime:"".concat(g/1e3),conversationId:n.id}),S.island.setIslandView("call"));break;case"busy_ringing":c.eventDispatch("phone-island-call-ringing",{})}}}else"online"==e.status&&u.userTotallyFree()&&(S.player.stopAudioPlayer(),S.currentCall.reset(),S.physicalRecorder.setRecordingTempVariable(!1))};return N.current=t.io("https://"+h,{upgrade:!1,transports:["websocket"],reconnection:!0,reconnectionDelay:2e3}),N.current.on("connect",(function(){console.debug("Socket connected sid: ".concat(N.current.id)),c.eventDispatch("phone-island-socket-connected",{})})),N.current.on("disconnect",(function(e){console.debug("Socket disconnect - reason: ".concat(e)),e.includes("server disconnect")?c.eventDispatch("phone-island-server-disconnected",{}):c.eventDispatch("phone-island-socket-disconnected",{})})),N.current.io.on("error",(function(e){console.debug("Socket error: ",e)})),N.current.on("connect_error",(function(e){console.debug("Socket connect_error: ",e)})),N.current.io.on("reconnect",(function(e){c.eventDispatch("phone-island-socket-reconnected",{}),console.debug("Socket reconnect attemp ".concat(e," (sid: ").concat(N.current.id,")"))})),N.current.io.on("reconnect_attempt",(function(e){console.debug("Socket reconnect_attempt ".concat(e))})),N.current.io.on("reconnect_error",(function(e){console.debug("Socket reconnect_error: ",e)})),N.current.io.on("reconnect_failed",(function(){console.debug("Socket reconnect_failed")})),_.current=setInterval((function(){var e=Date.now();N.current.volatile.emit("ping",o.withTimeout((function(){S.alerts.removeAlert("socket_down"),c.eventDispatch("phone-island-socket-disconnected-popup-close",{});var n=Date.now()-e;console.debug("Socket latency: ".concat(n,"ms")),console.debug("Socket is reachable!")}),(function(){S.alerts.setAlert("socket_down"),c.eventDispatch("phone-island-socket-disconnected-popup-open",{}),console.debug("Socket is unreachable!")}),7e3))}),7e3),N.current.on("connect",(function(){console.debug("Socket on: "+h+" is connected!"),N.current.emit("login",{accessKeyId:"".concat(v),token:g,uaType:C})})),N.current.on("authe_ok",(function(){console.debug("Socket authentication success!")})),N.current.on("userMainPresenceUpdate",(function(n){a.store.dispatch.users.updateEndpointMainPresence(e.__assign({},n.mainPresence)),s.dispatchMainPresence(n)})),N.current.on("extenUpdate",(function(e){S.users.updateExtension(e);var t=a.store.getState().users.extensions,r={};for(var c in t){var o=t[c].username,i=t[c].exten;r[o]||(r[o]=[]),r[o].push(i)}var u=r[e.username],d=e.conversations[Object.keys(e.conversations)[0]]||{};if(s.dispatchExtensions(e),l.isEmpty(d)){var p=null==u?void 0:u.some((function(e){var n,r=null===(n=t[e])||void 0===n?void 0:n.conversations;return!l.isEmpty(r)}));p||s.dispatchConversations(e)}else s.dispatchConversations(e);e.username===v&&(n(e,d),S.currentUser.updateConversations(e))})),N.current.on("queueUpdate",(function(e){s.dispatchQueueUpdate(e)})),N.current.on("queueMemberUpdate",(function(e){s.dispatchQueueMemberUpdate(e)})),N.current.on("takeOver",(function(){s.dispatchAlreadyLogin()})),N.current.on("serverReloaded",(function(){s.dispatchServerReload()})),N.current.on("parkingUpdate",(function(){s.dispatchParkingUpdate()})),N.current.on("actionNethLink",(function(e,n){s.dispatchUrlCall(e,n)})),N.current.on("updateDefaultDevice",(function(e){s.dispatchDefaultDeviceUpdate(e)})),function(){clearInterval(_.current),N.current.close()}}),[]),n.useEffect((function(){k&&(console.info("websocket reconnection"),N.current.disconnect(),N.current.connect(),b())}),[k]),f.default.createElement(f.default.Fragment,null,y)};
|
|
2
2
|
//# sourceMappingURL=Socket.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Socket.js","sources":["../../src/components/Socket.tsx"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type ReactNode, FC, useEffect, useRef } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { Dispatch, RootState } from '../store'\nimport { io } from 'socket.io-client'\nimport { getDisplayName } from '../lib/phone/conversation'\nimport {\n dispatchMainPresence,\n dispatchConversations,\n dispatchQueueUpdate,\n dispatchQueueMemberUpdate,\n dispatchAlreadyLogin,\n dispatchServerReload,\n dispatchParkingUpdate,\n dispatchExtensions,\n dispatchUrlCall,\n} from '../events'\nimport { store } from '../store'\nimport { eventDispatch, withTimeout } from '../utils'\nimport type {\n ConversationTypes,\n ExtensionTypes,\n QueuesUpdateTypes,\n QueueUpdateMemberTypes,\n MainPresenceTypes,\n} from '../types'\nimport { getTimestampInSeconds } from '../utils/genericFunctions/timestamp'\nimport { userTotallyFree } from '../lib/user/extensions'\nimport { isEmpty } from '../utils/genericFunctions/isEmpty'\n\ninterface SocketProps {\n children: ReactNode\n hostName: string\n username: string\n authToken: string\n reload: boolean\n reloadedCallback: () => void\n uaType: string\n}\n\nexport const Socket: FC<SocketProps> = ({\n hostName,\n username,\n authToken,\n reload,\n reloadedCallback,\n children,\n uaType,\n}) => {\n const dispatch = useDispatch<Dispatch>()\n const connectionCheckInterval = useRef<any>()\n const socket = useRef<any>()\n\n // get user information\n const userInformation = useSelector((state: RootState) => state.currentUser)\n\n const checkDefaultDeviceConversationActive = (conv: any) => {\n dispatch.currentCall.updateCurrentCall({\n conversationId: conv.id,\n accepted: true,\n incoming: conv.direction === 'in' ? false : undefined,\n })\n eventDispatch('phone-island-call-answered', {})\n\n // Stop the local audio element ringing\n store.dispatch.player.stopAudioPlayer()\n }\n\n const checkDefaultDeviceConversationClosed = (conv: any) => {\n // store.dispatch.player.stopAudioPlayer()\n store.dispatch.currentCall.reset()\n // store.dispatch.listen.reset()\n }\n\n useEffect(() => {\n /**\n * Manages event and data for the currentUser\n *\n * @param res The data from the socket\n * @param conv The conversation data\n */\n const handleCurrentUserEvents = (res: ExtensionTypes, conv: ConversationTypes) => {\n // Handle transferring data\n const { transferring, transferSwitching, transferCalls } = store.getState().currentCall\n\n const view = store.getState().island.view\n // Check conversation isn't empty\n if (Object.keys(conv).length > 0) {\n // With conversation\n if (res.status) {\n const { extensions } = store.getState().users\n switch (res.status) {\n case 'ringing':\n // The name and the number are updated here not in webrtc\n dispatch.currentCall.checkIncomingUpdatePlay({\n conversationId: conv.id,\n displayName: getDisplayName(conv),\n number: `${conv.counterpartNum}`,\n incomingSocket: true,\n username:\n `${\n extensions &&\n extensions[conv.counterpartNum] &&\n extensions[conv.counterpartNum].username\n }` || '',\n ownerExtension: conv.owner,\n })\n\n eventDispatch('phone-island-call-ringing', {})\n\n break\n // @ts-ignore\n case 'busy':\n if (conv && conv.connected) {\n // Current call accepted and update connected call\n dispatch.currentCall.updateCurrentCall({\n conversationId: conv.id,\n displayName: getDisplayName(conv),\n number: `${conv.counterpartNum}`,\n ownerExtension: conv.owner,\n username:\n `${\n extensions &&\n extensions[conv.counterpartNum] &&\n extensions[conv.counterpartNum].username\n }` || '',\n })\n // Update the current call informations for physical devices\n dispatch.currentCall.checkAcceptedUpdate({\n acceptedSocket: true,\n })\n // Add call to transfer calls\n dispatch.currentCall.addTransferCalls({\n type: 'transferred',\n displayName: getDisplayName(conv),\n number: `${conv.counterpartNum}`,\n startTime: `${getTimestampInSeconds()}`,\n })\n\n if (userInformation?.default_device?.type === 'physical') {\n checkDefaultDeviceConversationActive(conv)\n }\n if (view === 'call' && transferring) {\n dispatch.currentCall.updateCurrentCall({\n transferring: false,\n })\n }\n }\n // Delete transfer calls if there are more than one ( in case of call switch after transfer)\n if (transferCalls.length > 1) {\n dispatch.currentCall.deleteTransferCalls()\n }\n // Handle not connected calls\n else if (conv && !conv.connected) {\n if (transferring && !transferSwitching) {\n // Handle hangup during transfer\n const inTransferCalls = transferCalls.find(\n (item) => item.number === conv.counterpartNum,\n )\n if (!conv.connected && inTransferCalls) {\n // Update transferring data for the current call\n dispatch.currentCall.updateCurrentCall({\n transferring: false,\n })\n eventDispatch('phone-island-call-transfer-failed', {})\n // Reset transfer switching\n // TODO - It needs to enhance how conversation connections (conv.connected) are updated server side\n // TODO - The transfer end is not handled when the an user hangups or after call switch\n dispatch.currentCall.updateTransferSwitching(false)\n }\n }\n if (conv?.counterpartName === 'REC') {\n dispatch.physicalRecorder.setRecordingTempVariable(true)\n }\n }\n // Handle outgoing call\n if (conv && !conv.connected && conv.direction === 'out') {\n // Update the current outgoing conversation\n dispatch.currentCall.checkOutgoingUpdate({\n outgoingSocket: true,\n displayName: getDisplayName(conv),\n number: `${conv.counterpartNum}`,\n username:\n `${\n extensions &&\n extensions[conv.counterpartNum] &&\n extensions[conv.counterpartNum].username\n }` || '',\n })\n }\n case 'onhold':\n // The new conversation during transferring\n const { counterpartName, counterpartNum, startTime } = conv\n if (\n transferring &&\n counterpartNum &&\n counterpartName &&\n counterpartName !== '<unknown>'\n ) {\n // Add call to transfer calls\n dispatch.currentCall.addTransferCalls({\n type: 'destination',\n displayName: getDisplayName(conv),\n number: counterpartNum,\n startTime: `${getTimestampInSeconds()}`,\n })\n // Set the current call informations\n dispatch.currentCall.updateCurrentCall({\n displayName: getDisplayName(conv),\n number: counterpartNum,\n startTime: `${startTime / 1000}`,\n conversationId: conv.id,\n })\n // Set the view of the island to call\n dispatch.island.setIslandView('call')\n }\n break\n case 'busy_ringing':\n eventDispatch('phone-island-call-ringing', {})\n break\n default:\n break\n }\n }\n } else {\n // Without conversation for physical phone management\n if (res.status == 'online' && userTotallyFree()) {\n // Stop ringing sounds\n dispatch.player.stopAudioPlayer()\n // Reset current call info\n dispatch.currentCall.reset()\n dispatch.physicalRecorder.setRecordingTempVariable(false)\n }\n }\n }\n\n /**\n * Initialize socket connection and listeners\n */\n const initSocketConnection = () => {\n socket.current = io('https://' + hostName, {\n upgrade: false,\n transports: ['websocket'],\n reconnection: true,\n reconnectionDelay: 2000,\n })\n\n // Handle socket errors\n socket.current.on('connect', () => {\n console.debug(`Socket connected sid: ${socket.current.id}`)\n eventDispatch('phone-island-socket-connected', {})\n })\n socket.current.on('disconnect', (reason) => {\n console.debug(`Socket disconnect - reason: ${reason}`)\n if (reason.includes('server disconnect')) {\n eventDispatch('phone-island-server-disconnected', {})\n } else {\n eventDispatch('phone-island-socket-disconnected', {})\n }\n })\n socket.current.io.on('error', (err) => {\n console.debug(`Socket error: `, err)\n })\n socket.current.on('connect_error', (err) => {\n console.debug(`Socket connect_error: `, err)\n })\n socket.current.io.on('reconnect', (attempt) => {\n eventDispatch('phone-island-socket-reconnected', {})\n console.debug(`Socket reconnect attemp ${attempt} (sid: ${socket.current.id})`)\n })\n socket.current.io.on('reconnect_attempt', (attempt) => {\n console.debug(`Socket reconnect_attempt ${attempt}`)\n })\n socket.current.io.on('reconnect_error', (err) => {\n console.debug(`Socket reconnect_error: `, err)\n })\n socket.current.io.on('reconnect_failed', () => {\n console.debug(`Socket reconnect_failed`)\n })\n\n // Checks if socket is reachable every 5 seconds\n connectionCheckInterval.current = setInterval(() => {\n const start = Date.now()\n socket.current.volatile.emit(\n 'ping',\n withTimeout(\n () => {\n // Remove socket_down alert\n dispatch.alerts.removeAlert('socket_down')\n eventDispatch('phone-island-socket-disconnected-popup-close', {})\n // Calculate and log latency\n const latency = Date.now() - start\n console.debug(`Socket latency: ${latency}ms`)\n console.debug('Socket is reachable!')\n },\n () => {\n // Set socket_down alert\n dispatch.alerts.setAlert('socket_down')\n eventDispatch('phone-island-socket-disconnected-popup-open', {})\n console.debug('Socket is unreachable!')\n },\n 7 * 1000, // Waits for the response 7 seconds\n ),\n )\n }, 7 * 1000) // Executes a new check every 7 seconds\n\n // Handle connection message\n socket.current.on('connect', () => {\n console.debug('Socket on: ' + hostName + ' is connected!')\n socket.current.emit('login', {\n accessKeyId: `${username}`,\n token: authToken,\n uaType: uaType,\n })\n })\n\n // Handle authentication success message\n socket.current.on('authe_ok', () => {\n console.debug('Socket authentication success!')\n })\n\n socket.current.on('userMainPresenceUpdate', (res: MainPresenceTypes) => {\n // Update endpoints store\n store.dispatch.users.updateEndpointMainPresence({ ...res.mainPresence })\n // Dispatch dispatchMainPresence Event\n dispatchMainPresence(res)\n })\n\n socket.current.on('extenUpdate', (res: ExtensionTypes) => {\n // Update extensions and conversations in users store\n dispatch.users.updateExtension(res)\n\n //retrieve all extensions from store\n const { extensions }: any = store.getState().users\n const deviceMap: any = {}\n\n // Create a map of extensions for each user\n for (const key in extensions) {\n const user: any = extensions[key].username\n const ext: any = extensions[key].exten\n\n if (!deviceMap[user]) {\n deviceMap[user] = []\n }\n\n deviceMap[user].push(ext)\n }\n\n const associatedExtensions: any = deviceMap[res.username]\n\n // Initialize conversation\n let conv = res.conversations[Object.keys(res.conversations)[0]] || {}\n\n // Update all extensions and send the dispatch event\n dispatchExtensions(res)\n\n // second step update conversation\n\n // Check if conversation is empty\n if (isEmpty(conv)) {\n // Check if there is at least one conversation not empty\n const hasNonEmptyConversation = associatedExtensions?.some((ext: any) => {\n const extConversations = extensions[ext]?.conversations\n\n if (!isEmpty(extConversations)) {\n // not empty conversation found\n return true\n }\n\n return false\n })\n\n if (!hasNonEmptyConversation) {\n // Conversation is empty and there is no conversation for the user\n dispatchConversations(res)\n }\n } else {\n // Dispatch conversation event\n dispatchConversations(res)\n }\n\n // Handle only the events of the user\n if (res.username === username) {\n handleCurrentUserEvents(res, conv)\n // Update the conversations of the user\n dispatch.currentUser.updateConversations(res)\n }\n })\n\n // `queueUpdate` is the socket event when the data of a queue updates\n socket.current.on('queueUpdate', (res: QueuesUpdateTypes) => {\n // Dispatch queueUpdate event\n dispatchQueueUpdate(res)\n })\n\n // `queueMemberUpdate` is the socket event when the data of a queue member changes\n socket.current.on('queueMemberUpdate', (res: QueueUpdateMemberTypes) => {\n // Dispatch queueMemberUpdate event\n dispatchQueueMemberUpdate(res)\n })\n\n // `takeOver` is the socket event when the user does login from another new window\n socket.current.on('takeOver', () => {\n // Dispatch takeOver event\n dispatchAlreadyLogin()\n })\n\n // `serverReload` is the socket event when server is reloaded\n socket.current.on('serverReloaded', () => {\n // Dispatch serverReload event\n dispatchServerReload()\n })\n\n // `serverReload` is the socket event when server is reloaded\n socket.current.on('parkingUpdate', () => {\n // Dispatch serverReload event\n dispatchParkingUpdate()\n })\n\n // `actionNethLink` is the socket event when user make a call or a action from NethLink and has a physical device\n socket.current.on('actionNethLink', (link, urlType) => {\n // Dispatch phone island physical call event with the link and the urlType\n dispatchUrlCall(link, urlType)\n })\n }\n\n initSocketConnection()\n\n // Stop the check socket interval\n // Close the socket connection\n return () => {\n clearInterval(connectionCheckInterval.current)\n socket.current.close()\n }\n }, [])\n\n // Manage reload events\n useEffect(() => {\n if (reload) {\n console.info('websocket reconnection')\n socket.current.disconnect()\n socket.current.connect()\n reloadedCallback()\n }\n }, [reload])\n\n return <>{children}</>\n}\n"],"names":["_a","hostName","username","authToken","reload","reloadedCallback","children","uaType","dispatch","useDispatch","connectionCheckInterval","useRef","socket","userInformation","useSelector","state","currentUser","useEffect","handleCurrentUserEvents","res","conv","_b","store","getState","currentCall","transferring","transferSwitching","transferCalls","view","island","Object","keys","length","status","extensions","users","checkIncomingUpdatePlay","conversationId","id","displayName","getDisplayName","number","concat","counterpartNum","incomingSocket","ownerExtension","owner","eventDispatch","connected","updateCurrentCall","checkAcceptedUpdate","acceptedSocket","addTransferCalls","type","startTime","getTimestampInSeconds","default_device","accepted","incoming","direction","undefined","player","stopAudioPlayer","checkDefaultDeviceConversationActive","deleteTransferCalls","inTransferCalls","find","item","updateTransferSwitching","counterpartName","physicalRecorder","setRecordingTempVariable","checkOutgoingUpdate","outgoingSocket","setIslandView","userTotallyFree","reset","current","io","upgrade","transports","reconnection","reconnectionDelay","on","console","debug","reason","includes","err","attempt","setInterval","start","Date","now","volatile","emit","withTimeout","alerts","removeAlert","latency","setAlert","accessKeyId","token","updateEndpointMainPresence","__assign","mainPresence","dispatchMainPresence","updateExtension","deviceMap","key","user","ext","exten","push","associatedExtensions","conversations","dispatchExtensions","isEmpty","hasNonEmptyConversation","some","extConversations","dispatchConversations","updateConversations","dispatchQueueUpdate","dispatchQueueMemberUpdate","dispatchAlreadyLogin","dispatchServerReload","dispatchParkingUpdate","link","urlType","dispatchUrlCall","clearInterval","close","info","disconnect","connect","React","createElement","Fragment"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Socket.js","sources":["../../src/components/Socket.tsx"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type ReactNode, FC, useEffect, useRef } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { Dispatch, RootState } from '../store'\nimport { io } from 'socket.io-client'\nimport { getDisplayName } from '../lib/phone/conversation'\nimport {\n dispatchMainPresence,\n dispatchConversations,\n dispatchQueueUpdate,\n dispatchQueueMemberUpdate,\n dispatchAlreadyLogin,\n dispatchServerReload,\n dispatchParkingUpdate,\n dispatchExtensions,\n dispatchUrlCall,\n dispatchDefaultDeviceUpdate,\n} from '../events'\nimport { store } from '../store'\nimport { eventDispatch, withTimeout } from '../utils'\nimport type {\n ConversationTypes,\n ExtensionTypes,\n QueuesUpdateTypes,\n QueueUpdateMemberTypes,\n MainPresenceTypes,\n} from '../types'\nimport { getTimestampInSeconds } from '../utils/genericFunctions/timestamp'\nimport { userTotallyFree } from '../lib/user/extensions'\nimport { isEmpty } from '../utils/genericFunctions/isEmpty'\n\ninterface SocketProps {\n children: ReactNode\n hostName: string\n username: string\n authToken: string\n reload: boolean\n reloadedCallback: () => void\n uaType: string\n}\n\nexport const Socket: FC<SocketProps> = ({\n hostName,\n username,\n authToken,\n reload,\n reloadedCallback,\n children,\n uaType,\n}) => {\n const dispatch = useDispatch<Dispatch>()\n const connectionCheckInterval = useRef<any>()\n const socket = useRef<any>()\n\n // get user information\n const userInformation = useSelector((state: RootState) => state.currentUser)\n\n const checkDefaultDeviceConversationActive = (conv: any) => {\n dispatch.currentCall.updateCurrentCall({\n conversationId: conv.id,\n accepted: true,\n incoming: conv.direction === 'in' ? false : undefined,\n })\n eventDispatch('phone-island-call-answered', {})\n\n // Stop the local audio element ringing\n store.dispatch.player.stopAudioPlayer()\n }\n\n const checkDefaultDeviceConversationClosed = (conv: any) => {\n // store.dispatch.player.stopAudioPlayer()\n store.dispatch.currentCall.reset()\n // store.dispatch.listen.reset()\n }\n\n useEffect(() => {\n /**\n * Manages event and data for the currentUser\n *\n * @param res The data from the socket\n * @param conv The conversation data\n */\n const handleCurrentUserEvents = (res: ExtensionTypes, conv: ConversationTypes) => {\n // Handle transferring data\n const { transferring, transferSwitching, transferCalls } = store.getState().currentCall\n\n const view = store.getState().island.view\n // Check conversation isn't empty\n if (Object.keys(conv).length > 0) {\n // With conversation\n if (res.status) {\n const { extensions } = store.getState().users\n switch (res.status) {\n case 'ringing':\n // The name and the number are updated here not in webrtc\n dispatch.currentCall.checkIncomingUpdatePlay({\n conversationId: conv.id,\n displayName: getDisplayName(conv),\n number: `${conv.counterpartNum}`,\n incomingSocket: true,\n username:\n `${\n extensions &&\n extensions[conv.counterpartNum] &&\n extensions[conv.counterpartNum].username\n }` || '',\n ownerExtension: conv.owner,\n })\n\n eventDispatch('phone-island-call-ringing', {})\n\n break\n // @ts-ignore\n case 'busy':\n if (conv && conv.connected) {\n // Current call accepted and update connected call\n dispatch.currentCall.updateCurrentCall({\n conversationId: conv.id,\n displayName: getDisplayName(conv),\n number: `${conv.counterpartNum}`,\n ownerExtension: conv.owner,\n username:\n `${\n extensions &&\n extensions[conv.counterpartNum] &&\n extensions[conv.counterpartNum].username\n }` || '',\n })\n // Update the current call informations for physical devices\n dispatch.currentCall.checkAcceptedUpdate({\n acceptedSocket: true,\n })\n // Add call to transfer calls\n dispatch.currentCall.addTransferCalls({\n type: 'transferred',\n displayName: getDisplayName(conv),\n number: `${conv.counterpartNum}`,\n startTime: `${getTimestampInSeconds()}`,\n })\n\n if (userInformation?.default_device?.type === 'physical') {\n checkDefaultDeviceConversationActive(conv)\n }\n if (view === 'call' && transferring) {\n dispatch.currentCall.updateCurrentCall({\n transferring: false,\n })\n }\n }\n // Delete transfer calls if there are more than one ( in case of call switch after transfer)\n if (transferCalls.length > 1) {\n dispatch.currentCall.deleteTransferCalls()\n }\n // Handle not connected calls\n else if (conv && !conv.connected) {\n if (transferring && !transferSwitching) {\n // Handle hangup during transfer\n const inTransferCalls = transferCalls.find(\n (item) => item.number === conv.counterpartNum,\n )\n if (!conv.connected && inTransferCalls) {\n // Update transferring data for the current call\n dispatch.currentCall.updateCurrentCall({\n transferring: false,\n })\n eventDispatch('phone-island-call-transfer-failed', {})\n // Reset transfer switching\n // TODO - It needs to enhance how conversation connections (conv.connected) are updated server side\n // TODO - The transfer end is not handled when the an user hangups or after call switch\n dispatch.currentCall.updateTransferSwitching(false)\n }\n }\n if (conv?.counterpartName === 'REC') {\n dispatch.physicalRecorder.setRecordingTempVariable(true)\n }\n }\n // Handle outgoing call\n if (conv && !conv.connected && conv.direction === 'out') {\n // Update the current outgoing conversation\n dispatch.currentCall.checkOutgoingUpdate({\n outgoingSocket: true,\n displayName: getDisplayName(conv),\n number: `${conv.counterpartNum}`,\n username:\n `${\n extensions &&\n extensions[conv.counterpartNum] &&\n extensions[conv.counterpartNum].username\n }` || '',\n })\n }\n case 'onhold':\n // The new conversation during transferring\n const { counterpartName, counterpartNum, startTime } = conv\n if (\n transferring &&\n counterpartNum &&\n counterpartName &&\n counterpartName !== '<unknown>'\n ) {\n // Add call to transfer calls\n dispatch.currentCall.addTransferCalls({\n type: 'destination',\n displayName: getDisplayName(conv),\n number: counterpartNum,\n startTime: `${getTimestampInSeconds()}`,\n })\n // Set the current call informations\n dispatch.currentCall.updateCurrentCall({\n displayName: getDisplayName(conv),\n number: counterpartNum,\n startTime: `${startTime / 1000}`,\n conversationId: conv.id,\n })\n // Set the view of the island to call\n dispatch.island.setIslandView('call')\n }\n break\n case 'busy_ringing':\n eventDispatch('phone-island-call-ringing', {})\n break\n default:\n break\n }\n }\n } else {\n // Without conversation for physical phone management\n if (res.status == 'online' && userTotallyFree()) {\n // Stop ringing sounds\n dispatch.player.stopAudioPlayer()\n // Reset current call info\n dispatch.currentCall.reset()\n dispatch.physicalRecorder.setRecordingTempVariable(false)\n }\n }\n }\n\n /**\n * Initialize socket connection and listeners\n */\n const initSocketConnection = () => {\n socket.current = io('https://' + hostName, {\n upgrade: false,\n transports: ['websocket'],\n reconnection: true,\n reconnectionDelay: 2000,\n })\n\n // Handle socket errors\n socket.current.on('connect', () => {\n console.debug(`Socket connected sid: ${socket.current.id}`)\n eventDispatch('phone-island-socket-connected', {})\n })\n socket.current.on('disconnect', (reason) => {\n console.debug(`Socket disconnect - reason: ${reason}`)\n if (reason.includes('server disconnect')) {\n eventDispatch('phone-island-server-disconnected', {})\n } else {\n eventDispatch('phone-island-socket-disconnected', {})\n }\n })\n socket.current.io.on('error', (err) => {\n console.debug(`Socket error: `, err)\n })\n socket.current.on('connect_error', (err) => {\n console.debug(`Socket connect_error: `, err)\n })\n socket.current.io.on('reconnect', (attempt) => {\n eventDispatch('phone-island-socket-reconnected', {})\n console.debug(`Socket reconnect attemp ${attempt} (sid: ${socket.current.id})`)\n })\n socket.current.io.on('reconnect_attempt', (attempt) => {\n console.debug(`Socket reconnect_attempt ${attempt}`)\n })\n socket.current.io.on('reconnect_error', (err) => {\n console.debug(`Socket reconnect_error: `, err)\n })\n socket.current.io.on('reconnect_failed', () => {\n console.debug(`Socket reconnect_failed`)\n })\n\n // Checks if socket is reachable every 5 seconds\n connectionCheckInterval.current = setInterval(() => {\n const start = Date.now()\n socket.current.volatile.emit(\n 'ping',\n withTimeout(\n () => {\n // Remove socket_down alert\n dispatch.alerts.removeAlert('socket_down')\n eventDispatch('phone-island-socket-disconnected-popup-close', {})\n // Calculate and log latency\n const latency = Date.now() - start\n console.debug(`Socket latency: ${latency}ms`)\n console.debug('Socket is reachable!')\n },\n () => {\n // Set socket_down alert\n dispatch.alerts.setAlert('socket_down')\n eventDispatch('phone-island-socket-disconnected-popup-open', {})\n console.debug('Socket is unreachable!')\n },\n 7 * 1000, // Waits for the response 7 seconds\n ),\n )\n }, 7 * 1000) // Executes a new check every 7 seconds\n\n // Handle connection message\n socket.current.on('connect', () => {\n console.debug('Socket on: ' + hostName + ' is connected!')\n socket.current.emit('login', {\n accessKeyId: `${username}`,\n token: authToken,\n uaType: uaType,\n })\n })\n\n // Handle authentication success message\n socket.current.on('authe_ok', () => {\n console.debug('Socket authentication success!')\n })\n\n socket.current.on('userMainPresenceUpdate', (res: MainPresenceTypes) => {\n // Update endpoints store\n store.dispatch.users.updateEndpointMainPresence({ ...res.mainPresence })\n // Dispatch dispatchMainPresence Event\n dispatchMainPresence(res)\n })\n\n socket.current.on('extenUpdate', (res: ExtensionTypes) => {\n // Update extensions and conversations in users store\n dispatch.users.updateExtension(res)\n\n //retrieve all extensions from store\n const { extensions }: any = store.getState().users\n const deviceMap: any = {}\n\n // Create a map of extensions for each user\n for (const key in extensions) {\n const user: any = extensions[key].username\n const ext: any = extensions[key].exten\n\n if (!deviceMap[user]) {\n deviceMap[user] = []\n }\n\n deviceMap[user].push(ext)\n }\n\n const associatedExtensions: any = deviceMap[res.username]\n\n // Initialize conversation\n let conv = res.conversations[Object.keys(res.conversations)[0]] || {}\n\n // Update all extensions and send the dispatch event\n dispatchExtensions(res)\n\n // second step update conversation\n\n // Check if conversation is empty\n if (isEmpty(conv)) {\n // Check if there is at least one conversation not empty\n const hasNonEmptyConversation = associatedExtensions?.some((ext: any) => {\n const extConversations = extensions[ext]?.conversations\n\n if (!isEmpty(extConversations)) {\n // not empty conversation found\n return true\n }\n\n return false\n })\n\n if (!hasNonEmptyConversation) {\n // Conversation is empty and there is no conversation for the user\n dispatchConversations(res)\n }\n } else {\n // Dispatch conversation event\n dispatchConversations(res)\n }\n\n // Handle only the events of the user\n if (res.username === username) {\n handleCurrentUserEvents(res, conv)\n // Update the conversations of the user\n dispatch.currentUser.updateConversations(res)\n }\n })\n\n // `queueUpdate` is the socket event when the data of a queue updates\n socket.current.on('queueUpdate', (res: QueuesUpdateTypes) => {\n // Dispatch queueUpdate event\n dispatchQueueUpdate(res)\n })\n\n // `queueMemberUpdate` is the socket event when the data of a queue member changes\n socket.current.on('queueMemberUpdate', (res: QueueUpdateMemberTypes) => {\n // Dispatch queueMemberUpdate event\n dispatchQueueMemberUpdate(res)\n })\n\n // `takeOver` is the socket event when the user does login from another new window\n socket.current.on('takeOver', () => {\n // Dispatch takeOver event\n dispatchAlreadyLogin()\n })\n\n // `serverReload` is the socket event when server is reloaded\n socket.current.on('serverReloaded', () => {\n // Dispatch serverReload event\n dispatchServerReload()\n })\n\n // `serverReload` is the socket event when server is reloaded\n socket.current.on('parkingUpdate', () => {\n // Dispatch serverReload event\n dispatchParkingUpdate()\n })\n\n // `actionNethLink` is the socket event when user make a call or a action from NethLink and has a physical device\n socket.current.on('actionNethLink', (link, urlType) => {\n // Dispatch phone island physical call event with the link and the urlType\n dispatchUrlCall(link, urlType)\n })\n\n // `updateDefaultDevice` is the socket event when user change the default device\n socket.current.on('updateDefaultDevice', (extension:string) => {\n // Dispatch phone island physical call event with the link and the urlType\n dispatchDefaultDeviceUpdate(extension)\n })\n }\n\n initSocketConnection()\n\n // Stop the check socket interval\n // Close the socket connection\n return () => {\n clearInterval(connectionCheckInterval.current)\n socket.current.close()\n }\n }, [])\n\n // Manage reload events\n useEffect(() => {\n if (reload) {\n console.info('websocket reconnection')\n socket.current.disconnect()\n socket.current.connect()\n reloadedCallback()\n }\n }, [reload])\n\n return <>{children}</>\n}\n"],"names":["_a","hostName","username","authToken","reload","reloadedCallback","children","uaType","dispatch","useDispatch","connectionCheckInterval","useRef","socket","userInformation","useSelector","state","currentUser","useEffect","handleCurrentUserEvents","res","conv","_b","store","getState","currentCall","transferring","transferSwitching","transferCalls","view","island","Object","keys","length","status","extensions","users","checkIncomingUpdatePlay","conversationId","id","displayName","getDisplayName","number","concat","counterpartNum","incomingSocket","ownerExtension","owner","eventDispatch","connected","updateCurrentCall","checkAcceptedUpdate","acceptedSocket","addTransferCalls","type","startTime","getTimestampInSeconds","default_device","accepted","incoming","direction","undefined","player","stopAudioPlayer","checkDefaultDeviceConversationActive","deleteTransferCalls","inTransferCalls","find","item","updateTransferSwitching","counterpartName","physicalRecorder","setRecordingTempVariable","checkOutgoingUpdate","outgoingSocket","setIslandView","userTotallyFree","reset","current","io","upgrade","transports","reconnection","reconnectionDelay","on","console","debug","reason","includes","err","attempt","setInterval","start","Date","now","volatile","emit","withTimeout","alerts","removeAlert","latency","setAlert","accessKeyId","token","updateEndpointMainPresence","__assign","mainPresence","dispatchMainPresence","updateExtension","deviceMap","key","user","ext","exten","push","associatedExtensions","conversations","dispatchExtensions","isEmpty","hasNonEmptyConversation","some","extConversations","dispatchConversations","updateConversations","dispatchQueueUpdate","dispatchQueueMemberUpdate","dispatchAlreadyLogin","dispatchServerReload","dispatchParkingUpdate","link","urlType","dispatchUrlCall","extension","dispatchDefaultDeviceUpdate","clearInterval","close","info","disconnect","connect","React","createElement","Fragment"],"mappings":"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"}
|
|
@@ -53,3 +53,9 @@ export declare function dispatchParkingUpdate(): void;
|
|
|
53
53
|
* @param event The parking update event from socket
|
|
54
54
|
*/
|
|
55
55
|
export declare function dispatchUrlCall(url: string, urlType: string): void;
|
|
56
|
+
/**
|
|
57
|
+
* The dispatch function to update the default device
|
|
58
|
+
*
|
|
59
|
+
* @param extension The default_device_update event from socket
|
|
60
|
+
*/
|
|
61
|
+
export declare function dispatchDefaultDeviceUpdate(extension: string): void;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),require("react");var e=require("../utils/genericFunctions/eventDispatch.js");exports.dispatchAlreadyLogin=function(){e.eventDispatch("phone-island-user-already-login",{})},exports.dispatchConversations=function(n){var t,
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),require("react");var e=require("../utils/genericFunctions/eventDispatch.js");exports.dispatchAlreadyLogin=function(){e.eventDispatch("phone-island-user-already-login",{})},exports.dispatchConversations=function(n){var t,i=((t={})[n.username]={conversations:null==n?void 0:n.conversations,status:null==n?void 0:n.status,sipuseragent:null==n?void 0:n.sipuseragent,username:null==n?void 0:n.username,port:null==n?void 0:n.port,dnd:null==n?void 0:n.dnd,number:null==n?void 0:n.exten,ip:null==n?void 0:n.ip,exten:null==n?void 0:n.exten,name:null==n?void 0:n.name},t);e.eventDispatch("phone-island-conversations",i)},exports.dispatchDefaultDeviceUpdate=function(n){e.eventDispatch("phone-island-default-device-updated",{id:n})},exports.dispatchExtensions=function(n){var t,i=((t={})[n.username]={conversations:null==n?void 0:n.conversations,status:null==n?void 0:n.status,sipuseragent:null==n?void 0:n.sipuseragent,username:null==n?void 0:n.username,port:null==n?void 0:n.port,dnd:null==n?void 0:n.dnd,number:null==n?void 0:n.exten,ip:null==n?void 0:n.ip,exten:null==n?void 0:n.exten,name:null==n?void 0:n.name},t);e.eventDispatch("phone-island-extensions-update",i)},exports.dispatchMainPresence=function(n){var t,i=((t={})[n.mainPresence.username]={mainPresence:n.mainPresence.status},t);e.eventDispatch("phone-island-main-presence",i)},exports.dispatchParkingUpdate=function(){e.eventDispatch("phone-island-parking-update",{})},exports.dispatchQueueMemberUpdate=function(n){var t,i=((t={})[n.member]=n,t);e.eventDispatch("phone-island-queue-member-update",i)},exports.dispatchQueueUpdate=function(n){var t,i=((t={})[n.queue]=n,t);e.eventDispatch("phone-island-queue-update",i)},exports.dispatchServerReload=function(){e.eventDispatch("phone-island-server-reloaded",{})},exports.dispatchUrlCall=function(n,t){var i={url:n,urlType:t};e.eventDispatch("phone-island-action-physical",{urlCallObject:i})};
|
|
2
2
|
//# sourceMappingURL=SocketEvents.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SocketEvents.js","sources":["../../src/events/SocketEvents.ts"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport { eventDispatch } from '../utils'\nimport type {\n MainPresenceTypes,\n MainPresenceEventTypes,\n ExtensionTypes,\n ConversationsEventType,\n QueuesUpdateTypes,\n QueuesEventType,\n QueueUpdateMemberTypes,\n QueuesMemberEventType,\n} from '../types'\n\n/**\n * The dispatch function for the userMainPresenceUpdate event\n *\n * @param event The userMainPresenceUpdate event from socket\n */\nexport function dispatchMainPresence(event: MainPresenceTypes) {\n const data: MainPresenceEventTypes = {\n [event.mainPresence.username]: {\n mainPresence: event.mainPresence.status,\n },\n }\n eventDispatch('phone-island-main-presence', data)\n}\n\n/**\n * The dispatch function for the extenUpdate event\n *\n * @param event The extenUpdate event from socket\n */\nexport function dispatchExtensions(event: ExtensionTypes) {\n const data: any = {\n [event.username]: {\n conversations: event?.conversations,\n status: event?.status,\n sipuseragent: event?.sipuseragent,\n username: event?.username,\n port: event?.port,\n dnd: event?.dnd,\n number: event?.exten,\n ip: event?.ip,\n exten: event?.exten,\n name: event?.name,\n },\n }\n // Dispatch the event on window for external handlers\n eventDispatch('phone-island-extensions-update', data)\n}\n\n/**\n * The dispatch function for the extenUpdate event\n *\n * @param event The extenUpdate event from socket\n */\nexport function dispatchConversations(event: ExtensionTypes) {\n const data: any = {\n [event.username]: {\n conversations: event?.conversations,\n status: event?.status,\n sipuseragent: event?.sipuseragent,\n username: event?.username,\n port: event?.port,\n dnd: event?.dnd,\n number: event?.exten,\n ip: event?.ip,\n exten: event?.exten,\n name: event?.name,\n },\n }\n // Dispatch the event on window for external handlers\n eventDispatch('phone-island-conversations', data)\n}\n\n/**\n * The dispatch function for the queueUpdate event\n *\n * @param event The queueUpdate event from socket\n */\nexport function dispatchQueueUpdate(event: QueuesUpdateTypes) {\n const data: QueuesEventType = {\n [event.queue]: event,\n }\n // Dispatch the event on window for external handlers\n eventDispatch('phone-island-queue-update', data)\n}\n\n/**\n * The dispatch function for the queueMemberUpdate event\n *\n * @param event The queueMemberUpdate event from socket\n */\nexport function dispatchQueueMemberUpdate(event: QueueUpdateMemberTypes) {\n const data: QueuesMemberEventType = {\n [event.member]: event,\n }\n // Dispatch the event on window for external handlers\n eventDispatch('phone-island-queue-member-update', data)\n}\n\n/**\n * The dispatch function for the takeOver event\n *\n * @param event The takeOver event from socket\n */\nexport function dispatchAlreadyLogin() {\n // Dispatch the event on window for external handlers\n eventDispatch('phone-island-user-already-login', {})\n}\n\n/**\n * The dispatch function for server reload\n *\n * @param event The serverReload event from socket\n */\nexport function dispatchServerReload() {\n // Dispatch the event on window for external handlers\n eventDispatch('phone-island-server-reloaded', {})\n}\n\n/**\n * The dispatch function for parking update\n *\n * @param event The parking update event from socket\n */\nexport function dispatchParkingUpdate() {\n // Dispatch the event on window for external handlers\n eventDispatch('phone-island-parking-update', {})\n}\n\n/**\n * The dispatch function for url physical call\n *\n * @param event The parking update event from socket\n */\nexport function dispatchUrlCall(url: string, urlType: string) {\n // Dispatch the event on window for external handlers\n let urlCallObject = {\n url: url,\n urlType: urlType,\n }\n eventDispatch('phone-island-action-physical', { urlCallObject })\n}\n"],"names":["eventDispatch","event","data","_a","username","conversations","status","sipuseragent","port","dnd","number","exten","ip","name","mainPresence","member","queue","url","urlType","urlCallObject"],"mappings":"yLA8GEA,gBAAc,kCAAmC,CAAA,EACnD,gCArDM,SAAgCC,SAC9BC,IAAIC,EAAA,CAAA,GACPF,EAAMG,UAAW,CAChBC,cAAeJ,aAAA,EAAAA,EAAOI,cACtBC,OAAQL,aAAA,EAAAA,EAAOK,OACfC,aAAcN,aAAA,EAAAA,EAAOM,aACrBH,SAAUH,aAAA,EAAAA,EAAOG,SACjBI,KAAMP,aAAA,EAAAA,EAAOO,KACbC,IAAKR,aAAA,EAAAA,EAAOQ,IACZC,OAAQT,aAAA,EAAAA,EAAOU,MACfC,GAAIX,aAAA,EAAAA,EAAOW,GACXD,MAAOV,aAAA,EAAAA,EAAOU,MACdE,KAAMZ,aAAA,EAAAA,EAAOY,SAIjBb,gBAAc,6BAA8BE,EAC9C,
|
|
1
|
+
{"version":3,"file":"SocketEvents.js","sources":["../../src/events/SocketEvents.ts"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport { eventDispatch } from '../utils'\nimport type {\n MainPresenceTypes,\n MainPresenceEventTypes,\n ExtensionTypes,\n ConversationsEventType,\n QueuesUpdateTypes,\n QueuesEventType,\n QueueUpdateMemberTypes,\n QueuesMemberEventType,\n} from '../types'\n\n/**\n * The dispatch function for the userMainPresenceUpdate event\n *\n * @param event The userMainPresenceUpdate event from socket\n */\nexport function dispatchMainPresence(event: MainPresenceTypes) {\n const data: MainPresenceEventTypes = {\n [event.mainPresence.username]: {\n mainPresence: event.mainPresence.status,\n },\n }\n eventDispatch('phone-island-main-presence', data)\n}\n\n/**\n * The dispatch function for the extenUpdate event\n *\n * @param event The extenUpdate event from socket\n */\nexport function dispatchExtensions(event: ExtensionTypes) {\n const data: any = {\n [event.username]: {\n conversations: event?.conversations,\n status: event?.status,\n sipuseragent: event?.sipuseragent,\n username: event?.username,\n port: event?.port,\n dnd: event?.dnd,\n number: event?.exten,\n ip: event?.ip,\n exten: event?.exten,\n name: event?.name,\n },\n }\n // Dispatch the event on window for external handlers\n eventDispatch('phone-island-extensions-update', data)\n}\n\n/**\n * The dispatch function for the extenUpdate event\n *\n * @param event The extenUpdate event from socket\n */\nexport function dispatchConversations(event: ExtensionTypes) {\n const data: any = {\n [event.username]: {\n conversations: event?.conversations,\n status: event?.status,\n sipuseragent: event?.sipuseragent,\n username: event?.username,\n port: event?.port,\n dnd: event?.dnd,\n number: event?.exten,\n ip: event?.ip,\n exten: event?.exten,\n name: event?.name,\n },\n }\n // Dispatch the event on window for external handlers\n eventDispatch('phone-island-conversations', data)\n}\n\n/**\n * The dispatch function for the queueUpdate event\n *\n * @param event The queueUpdate event from socket\n */\nexport function dispatchQueueUpdate(event: QueuesUpdateTypes) {\n const data: QueuesEventType = {\n [event.queue]: event,\n }\n // Dispatch the event on window for external handlers\n eventDispatch('phone-island-queue-update', data)\n}\n\n/**\n * The dispatch function for the queueMemberUpdate event\n *\n * @param event The queueMemberUpdate event from socket\n */\nexport function dispatchQueueMemberUpdate(event: QueueUpdateMemberTypes) {\n const data: QueuesMemberEventType = {\n [event.member]: event,\n }\n // Dispatch the event on window for external handlers\n eventDispatch('phone-island-queue-member-update', data)\n}\n\n/**\n * The dispatch function for the takeOver event\n *\n * @param event The takeOver event from socket\n */\nexport function dispatchAlreadyLogin() {\n // Dispatch the event on window for external handlers\n eventDispatch('phone-island-user-already-login', {})\n}\n\n/**\n * The dispatch function for server reload\n *\n * @param event The serverReload event from socket\n */\nexport function dispatchServerReload() {\n // Dispatch the event on window for external handlers\n eventDispatch('phone-island-server-reloaded', {})\n}\n\n/**\n * The dispatch function for parking update\n *\n * @param event The parking update event from socket\n */\nexport function dispatchParkingUpdate() {\n // Dispatch the event on window for external handlers\n eventDispatch('phone-island-parking-update', {})\n}\n\n/**\n * The dispatch function for url physical call\n *\n * @param event The parking update event from socket\n */\nexport function dispatchUrlCall(url: string, urlType: string) {\n // Dispatch the event on window for external handlers\n let urlCallObject = {\n url: url,\n urlType: urlType,\n }\n eventDispatch('phone-island-action-physical', { urlCallObject })\n}\n\n/**\n * The dispatch function to update the default device\n *\n * @param extension The default_device_update event from socket\n */\nexport function dispatchDefaultDeviceUpdate(extension: string) {\n // Dispatch the event on window for external handlers\n eventDispatch('phone-island-default-device-updated', { id: extension })\n}\n"],"names":["eventDispatch","event","data","_a","username","conversations","status","sipuseragent","port","dnd","number","exten","ip","name","extension","id","mainPresence","member","queue","url","urlType","urlCallObject"],"mappings":"yLA8GEA,gBAAc,kCAAmC,CAAA,EACnD,gCArDM,SAAgCC,SAC9BC,IAAIC,EAAA,CAAA,GACPF,EAAMG,UAAW,CAChBC,cAAeJ,aAAA,EAAAA,EAAOI,cACtBC,OAAQL,aAAA,EAAAA,EAAOK,OACfC,aAAcN,aAAA,EAAAA,EAAOM,aACrBH,SAAUH,aAAA,EAAAA,EAAOG,SACjBI,KAAMP,aAAA,EAAAA,EAAOO,KACbC,IAAKR,aAAA,EAAAA,EAAOQ,IACZC,OAAQT,aAAA,EAAAA,EAAOU,MACfC,GAAIX,aAAA,EAAAA,EAAOW,GACXD,MAAOV,aAAA,EAAAA,EAAOU,MACdE,KAAMZ,aAAA,EAAAA,EAAOY,SAIjBb,gBAAc,6BAA8BE,EAC9C,sCA6EM,SAAsCY,GAE1Cd,EAAAA,cAAc,sCAAuC,CAAEe,GAAID,GAC7D,6BAzHM,SAA6Bb,SAC3BC,IAAIC,EAAA,CAAA,GACPF,EAAMG,UAAW,CAChBC,cAAeJ,aAAA,EAAAA,EAAOI,cACtBC,OAAQL,aAAA,EAAAA,EAAOK,OACfC,aAAcN,aAAA,EAAAA,EAAOM,aACrBH,SAAUH,aAAA,EAAAA,EAAOG,SACjBI,KAAMP,aAAA,EAAAA,EAAOO,KACbC,IAAKR,aAAA,EAAAA,EAAOQ,IACZC,OAAQT,aAAA,EAAAA,EAAOU,MACfC,GAAIX,aAAA,EAAAA,EAAOW,GACXD,MAAOV,aAAA,EAAAA,EAAOU,MACdE,KAAMZ,aAAA,EAAAA,EAAOY,SAIjBb,gBAAc,iCAAkCE,EAClD,+BA/BM,SAA+BD,SAC7BC,IAAIC,EAAA,CAAA,GACPF,EAAMe,aAAaZ,UAAW,CAC7BY,aAAcf,EAAMe,aAAaV,WAGrCN,gBAAc,6BAA8BE,EAC9C,2CAuGEF,gBAAc,8BAA+B,CAAA,EAC/C,oCApCM,SAAoCC,SAClCC,IAAIC,EAAA,CAAA,GACPF,EAAMgB,QAAShB,KAGlBD,gBAAc,mCAAoCE,EACpD,8BAnBM,SAA8BD,SAC5BC,IAAIC,EAAA,CAAA,GACPF,EAAMiB,OAAQjB,KAGjBD,gBAAc,4BAA6BE,EAC7C,0CAgCEF,gBAAc,+BAAgC,CAAA,EAChD,0BAiBgB,SAAgBmB,EAAaC,GAE3C,IAAIC,EAAgB,CAClBF,IAAKA,EACLC,QAASA,GAEXpB,EAAAA,cAAc,+BAAgC,CAAEqB,cAAaA,GAC/D"}
|
|
@@ -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":"2TA6GUA,EAAmBC,EAAAA,MAAMC,WAAWC,2BAGxCC,EAAY,CACdC,WAAYL,aAAA,EAAAA,EAAgBM,GAC5BC,aAAc,8BAKG,6BADXC,EAAuBP,EAAKA,MAACC,WAAWO,cAAtCC,EAAOF,EAAAE,QAAEC,EAAOH,EAAAG,QACP,CAAA,EAAMC,MAAM,GAAGC,OAAAH,sBAA2B,CACzDI,OAAQ,OACRH,QAAOI,EAAAA,SAAA,CAAA,EAAOJ,GACdP,KAAMY,KAAKC,UAAUb,aAEvB,KALMc,EAAWC,EAIfC,QACYC,GACZ,MAAM,IAAIC,MAAMJ,EAASK,YAE3B,MAAA,CAAA,GAAO,UAEP,iBAAM,IAAID,MAAME,0BAEnB,2BAlFK,SAAiCpB,iIAGlB,6BADXI,EAAuBP,EAAKA,MAACC,WAAWO,cAAtCC,EAAOF,EAAAE,QAAEC,EAAOH,EAAAG,QACP,CAAA,EAAMC,MAAM,GAAGC,OAAAH,sBAA2B,CACzDI,OAAQ,OACRH,QAAOI,EAAAA,SAAA,CAAA,EAAOJ,GACdP,KAAMY,KAAKC,UAAUb,aAEvB,KALMc,EAAWC,EAIfC,QACYC,GACZ,MAAM,IAAIC,MAAMJ,EAASK,YAE3B,MAAA,CAAA,GAAO,UAEP,iBAAM,IAAID,MAAMG,0BAEnB,uBAwNK,SAA6BC,qIAEzBC,EAAmB1B,EAAAA,MAAMC,WAAW0B,2BAGxCxB,EAAY,CACdC,WAAYsB,EACZE,YAAa,YACbC,OAAQJ,oBAKS,6BADXlB,EAAuBP,EAAKA,MAACC,WAAWO,cAAtCC,EAAOF,EAAAE,QAAEC,EAAOH,EAAAG,QACP,CAAA,EAAMC,MAAM,GAAGC,OAAAH,oBAAyB,CACvDI,OAAQ,OACRH,QAAOI,EAAAA,SAAA,CAAA,EAAOJ,GACdP,KAAMY,KAAKC,UAAUb,aAEvB,KALMc,EAAWC,EAIfC,QACYC,GACZ,MAAM,IAAIC,MAAMJ,EAASK,YAE3B,MAAA,CAAA,GAAO,UAEP,iBAAM,IAAID,MAAMS,0BAEnB,oKApSoB,6BADXvB,EAAuBP,EAAKA,MAACC,WAAWO,cAAtCC,EAAOF,EAAAE,QAAEC,EAAOH,EAAAG,QACP,CAAA,EAAMC,MAAM,GAAGC,OAAAH,0BAA+B,CAC7DC,QAAOI,EAAAA,SAAA,CAAA,EAAOJ,aAEhB,KAHMO,EAAWC,EAEfC,QACYC,GACZ,MAAM,IAAIC,MAAMJ,EAASK,YAEd,MAAA,CAAA,EAAML,EAASc,eAC5B,MAAA,CAAA,EADab,EAAqBC,eAGlC,iBAAM,IAAIE,MAAMW,0BAEnB,6BA6CK,SAAmC7B,iIAGpB,6BADXI,EAAuBP,EAAKA,MAACC,WAAWO,cAAtCC,EAAOF,EAAAE,QAAEC,EAAOH,EAAAG,QACP,CAAA,EAAMC,MAAM,GAAGC,OAAAH,sBAA2B,CACzDI,OAAQ,OACRH,QAAOI,EAAAA,SAAA,CAAA,EAAOJ,GACdP,KAAMY,KAAKC,UAAUb,aAEvB,KALMc,EAAWC,EAIfC,QACYC,GACZ,MAAM,IAAIC,MAAMJ,EAASK,YAE3B,MAAA,CAAA,GAAO,UAEP,iBAAM,IAAID,MAAMY,0BAEnB,sLAmDOf,EAAqClB,EAAKA,MAACC,WAAW0B,YAApDD,EAAcR,EAAAQ,eAAEQ,EAAchB,EAAAgB,eAChCC,EAAyBnC,EAAKA,MAACC,WAAWC,YAO5CkC,EAAc,aACdC,EAAY,GACK,MAAjBlC,OAPAA,EAAY,CACdmC,OAAQJ,EACR9B,WAAYsB,EACZpB,aAAc,qBAIZH,EAAMmC,cAAkCC,KAAjBpC,aAAI,EAAJA,EAAMmC,QAC/BD,EAAY,UAEZA,EAAY,SAEZlC,EAAKC,WAAmD,QAAtCG,EAAA4B,aAAsB,EAAtBA,EAAwBpC,sBAAc,IAAAQ,OAAA,EAAAA,EAAEF,qBAMzC,6BAHXmC,EAAuBxC,EAAKA,MAACC,WAAWO,cAAtCC,EAAO+B,EAAA/B,QAAEC,EAAO8B,EAAA9B,QAGP,CAAA,EAAMC,MAAM,GAAGC,OAAAH,GAAY,GAAGG,OAAAwB,GAAgB,GAAGxB,OAAAyB,GAAa,CAC7ExB,OAAQ,OACRH,QAAOI,EAAAA,SAAA,CAAA,EAAOJ,GACdP,KAAMY,KAAKC,UAAUb,aAEvB,KALMc,EAAWwB,EAIftB,QACYC,GACZ,MAAM,IAAIC,MAAMJ,EAASK,YAE3B,MAAA,CAAA,GAAO,UAEP,iBAAM,IAAID,MAAMqB,0BAEnB,uLAIOnC,EAAqCP,EAAKA,MAACC,WAAW0C,iBAApDjB,EAAcnB,EAAAmB,eAAEQ,EAAc3B,EAAA2B,eAElC/B,EAAY,CACdmC,OAAQJ,EACR9B,WAAYsB,EACZpB,aAAc,8BAKG,6BADXY,EAAuBlB,EAAKA,MAACC,WAAWO,cAAtCC,EAAOS,EAAAT,QAAEC,EAAOQ,EAAAR,QACP,CAAA,EAAMC,MAAM,GAAGC,OAAAH,sBAA2B,CACzDI,OAAQ,OACRH,QAAOI,EAAAA,SAAA,CAAA,EAAOJ,GACdP,KAAMY,KAAKC,UAAUb,aAEvB,KALMc,EAAWuB,EAIfrB,QACYC,GACZ,MAAM,IAAIC,MAAMJ,EAASK,YAE3B,MAAA,CAAA,GAAO,UAEP,iBAAM,IAAID,MAAMuB,0BAEnB,uBAEK,SAA6BC,yIAE3BtC,EAAqCP,EAAKA,MAACC,WAAW0B,YAApDD,EAAcnB,EAAAmB,eAAEQ,EAAc3B,EAAA2B,eAGlC/B,EAAY,CACdmC,OAAQJ,EACR9B,WAAYsB,oBAKK,6BADXR,EAAuBlB,EAAKA,MAACC,WAAWO,cAAtCC,EAAOS,EAAAT,QAAEC,EAAOQ,EAAAR,QACP,CAAA,EAAMC,MAAM,GAAGC,OAAAH,2BAAgC,CAC9DI,OAAQ,OACRH,QAAOI,EAAAA,SAAA,CAAA,EAAOJ,GACdP,KAAMY,KAAKC,UAAUb,aAEvB,KALMc,EAAWuB,EAIfrB,QACYC,GACZ,MAAM,IAAIC,MAAMJ,EAASK,YAK3B,OAHAtB,QAAM8C,SAASnB,YAAYoB,kBAAkB,CAC3CC,MAAOH,IAET,CAAA,GAAO,UAEP,iBAAM,IAAIxB,MAAM4B,0BAEnB,2BAzIK,SAAiC9C,iIAOlB,6BADXI,EAAuBP,EAAKA,MAACC,WAAWO,cAAtCC,EAAOF,EAAAE,QAAEC,EAAOH,EAAAG,QACP,CAAA,EAAMC,MAAM,GAAGC,OAAAH,oBAAyB,CACvDI,OAAQ,OACRH,QAAOI,EAAAA,SAAA,CAAA,EAAOJ,GACdP,KAAMY,KAAKC,UAAUb,aAEvB,KALMc,EAAWC,EAIfC,QACYC,GACZ,MAAM,IAAIC,MAAMJ,EAASK,YAE3B,MAAA,CAAA,GAAO,UAEP,iBAAM,IAAID,MAAM6B,0BAEnB,wBAwHK,SAA8BC,uIAE5B5C,EAAqCP,EAAAA,MAAMC,WAAW0B,YAApDD,EAAcnB,EAAAmB,eAAgBnB,EAAA2B,eAGlC/B,EAAY,CACdC,WAAYsB,oBAKK,6BADXR,EAAuBlB,EAAKA,MAACC,WAAWO,cAAtCC,EAAOS,EAAAT,QAAEC,EAAOQ,EAAAR,QACP,CAAA,EAAMC,MAAM,GAAGC,OAAAH,2BAAgC,CAC9DI,OAAQ,OACRH,QAAOI,EAAAA,SAAA,CAAA,EAAOJ,GACdP,KAAMY,KAAKC,UAAUb,aAEvB,KALMc,EAAWuB,EAIfrB,QACYC,GACZ,MAAM,IAAIC,MAAMJ,EAASK,YAK3B,OAHAtB,QAAM8C,SAASnB,YAAYoB,kBAAkB,CAC3CK,OAAQD,IAEV,CAAA,GAAO,UAEP,iBAAM,IAAI9B,MAAMgC,0BAEnB,2BAEK,SAAiCC,yIAE/B/C,EAAqCP,EAAKA,MAACC,WAAW0B,YAApDD,EAAcnB,EAAAmB,eAAEQ,EAAc3B,EAAA2B,eAGlC/B,EAAY,CACdmC,OAAQJ,EACR9B,WAAYsB,EACZ6B,KAAMD,EAAIE,6BAKO,6BADXtC,EAAuBlB,EAAKA,MAACC,WAAWO,cAAtCC,EAAOS,EAAAT,QAAEC,EAAOQ,EAAAR,QACP,CAAA,EAAMC,MAAM,GAAGC,OAAAH,oBAAyB,CACvDI,OAAQ,OACRH,QAAOI,EAAAA,SAAA,CAAA,EAAOJ,GACdP,KAAMY,KAAKC,UAAUb,aAEvB,KALMc,EAAWuB,EAIfrB,QACYC,GACZ,MAAM,IAAIC,MAAMJ,EAASK,YAE3B,MAAA,CAAA,GAAO,UAEP,iBAAM,IAAID,MAAMoC,0BAEnB,uBA6BqB,SAAaC,EAAoBC,+HAGlC,6BADXpD,EAAuBP,EAAKA,MAACC,WAAWO,cAAtCC,EAAOF,EAAAE,QAAEC,EAAOH,EAAAG,QACP,CAAA,EAAMC,MAAM,GAAAC,OAAGH,EAAoB,cAAAG,OAAA8C,GAAiB,CACnE7C,OAAQ,OACRH,QAAOI,EAAAA,SAAA,CAAA,EAAOJ,GACdP,KAAMY,KAAKC,UAAU2C,aAEvB,KALM1C,EAAWC,EAIfC,QACYC,GACZ,MAAM,IAAIC,MAAMJ,EAASK,YAE3B,MAAA,CAAA,GAAO,UAEP,sCAEH"}
|