@nethesis/phone-island
Version:
NethVoice CTI Phone Island
3 lines (2 loc) • 12.9 kB
JavaScript
;Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../node_modules/tslib/tslib.es6.js"),n=require("react");require("../node_modules/react-redux/es/index.js");var t=require("../node_modules/socket.io-client/build/esm/index.js"),r=require("../lib/phone/conversation.js"),o=require("../utils/genericFunctions/eventDispatch.js"),i=require("../utils/genericFunctions/withTimeout.js"),c=require("../store/index.js"),s=require("../services/user.js");require("../lib/webrtc/janus.js"),require("../node_modules/webrtc-adapter/src/js/adapter_core.js");var a=require("../lib/devices/devices.js"),u=require("../lib/user/default_device.js"),l=require("../utils/genericFunctions/isEmpty.js"),d=require("../utils/streaming/getStreamingSourceId.js"),p=require("../events/SocketEvents.js"),m=require("../utils/genericFunctions/timestamp.js"),v=require("../lib/user/extensions.js"),g=require("../utils/streaming/isFromStreaming.js"),f=require("../node_modules/react-redux/es/hooks/useSelector.js");require("../node_modules/react-redux/es/components/Context.js"),require("../node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js"),require("../node_modules/react-redux/node_modules/react-is/index.js");var h=require("../node_modules/react-redux/es/hooks/useDispatch.js");function S(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var b=S(n);exports.Socket=function(S){var y=S.hostName,k=S.username,C=S.authToken,_=S.reload,w=S.reloadedCallback,D=S.children,N=S.uaType,j=h.useDispatch(),x=n.useRef(),q=n.useRef();f.useSelector((function(e){return e.currentUser}));return n.useEffect((function(){var n=function(e){if(e.counterpartNum&&g.isFromStreaming(e.counterpartNum)){j.island.setIsFromStreaming(!0),j.currentCall.updateCurrentCall({streamingSourceNumber:e.counterpartNum});var n=d.getStreamingSourceId(e.counterpartNum);n&&s.subscribe({id:n}).catch((function(e){return console.error("Error subscribing to streaming source:",e)}))}},f=function(e,t){var i=c.store.getState().currentCall,s=i.transferring,a=i.transferSwitching,l=i.transferCalls,d=c.store.getState().island.view;if(Object.keys(t).length>0){if(e.status){var p=c.store.getState().users.extensions,g=c.store.getState().currentUser.default_device,f=c.store.getState().currentUser,h=f.endpoints,S=f.username,b=c.store.getState().currentCall;b.incoming,b.outgoing;var y=function(){if(!p||!S)return!1;var e=Object.values(p).filter((function(e){return(null==e?void 0:e.username)===S}));return null==e?void 0:e.some((function(e){var n=null==h?void 0:h.extension.find((function(n){return n.id===(null==e?void 0:e.exten)}));return"nethlink"===(null==n?void 0:n.type)&&"offline"!==(null==e?void 0:e.status)}))};switch(e.status){case"ringing":n(t),("mobile"===N&&y()||"desktop"===N&&("webrtc"===(null==g?void 0:g.type)||void 0===(null==g?void 0:g.type)&&!y()||!y()&&"physical"===(null==g?void 0:g.type)))&&(j.currentCall.checkIncomingUpdatePlay({conversationId:t.id,displayName:r.getDisplayName(t),number:"".concat(t.counterpartNum),incomingSocket:!0,incoming:!0,username:"".concat(p&&p[t.counterpartNum]&&p[t.counterpartNum].username)||"",ownerExtension:t.owner}),c.store.dispatch.island.setIslandView("call"),o.eventDispatch("phone-island-call-ringing",{}));break;case"busy":if(n(t),"mobile"===N&&y()||"desktop"===N&&("webrtc"===(null==g?void 0:g.type)||void 0===(null==g?void 0:g.type)&&!y()||!y()&&"physical"===(null==g?void 0:g.type))){if(t&&t.connected)j.currentCall.updateCurrentCall({conversationId:t.id,displayName:r.getDisplayName(t),number:"".concat(t.counterpartNum),ownerExtension:t.owner,username:"".concat(p&&p[t.counterpartNum]&&p[t.counterpartNum].username)||"",chDest:(null==t?void 0:t.chDest)||{},chSource:(null==t?void 0:t.chSource)||{}}),j.currentCall.checkAcceptedUpdate({acceptedSocket:!0}),j.currentCall.addTransferCalls({type:"transferred",displayName:r.getDisplayName(t),number:"".concat(t.counterpartNum),startTime:"".concat(m.getTimestampInSeconds())}),c.store.getState().island.isFromStreaming&&"out"===t.direction&&setTimeout((function(){j.island.setIslandView("streamingAnswer")}),200),u.isPhysical()&&function(e){j.currentCall.updateCurrentCall({conversationId:e.id,accepted:!0,incoming:"in"!==e.direction&&void 0}),o.eventDispatch("phone-island-call-answered",{}),c.store.dispatch.player.stopAudioPlayer(),c.store.dispatch.player.setAudioPlayerLoop(!1)}(t),"call"===d&&s&&j.currentCall.updateCurrentCall({transferring:!1});if(l.length>1)j.currentCall.deleteTransferCalls();else if(t&&!t.connected){if(s&&!a){var k=l.find((function(e){return e.number===t.counterpartNum}));!t.connected&&k&&(j.currentCall.updateCurrentCall({transferring:!1}),o.eventDispatch("phone-island-call-transfer-failed",{}),j.currentCall.updateTransferSwitching(!1))}"REC"===(null==t?void 0:t.counterpartName)&&j.physicalRecorder.setRecordingTempVariable(!0)}t&&!t.connected&&"out"===t.direction&&j.currentCall.checkOutgoingUpdate({outgoingSocket:!0,outgoing:"REC"!==(null==t?void 0:t.counterpartName),displayName:r.getDisplayName(t),number:"".concat(null==t?void 0:t.counterpartNum),username:"".concat(p&&p[null==t?void 0:t.counterpartNum]&&p[null==t?void 0:t.counterpartNum].username)||""})}break;case"onhold":var C=t.counterpartName,_=t.counterpartNum,w=t.startTime;s&&_&&C&&"<unknown>"!==C&&(j.currentCall.addTransferCalls({type:"destination",displayName:r.getDisplayName(t),number:_,startTime:"".concat(m.getTimestampInSeconds())}),j.currentCall.updateCurrentCall({displayName:r.getDisplayName(t),number:_,startTime:"".concat(w/1e3),conversationId:t.id}),j.island.setIslandView("call"));break;case"busy_ringing":o.eventDispatch("phone-island-call-ringing",{})}}}else"online"==e.status&&v.userTotallyFree()&&(j.player.stopAudioPlayer(),j.currentCall.reset(),j.physicalRecorder.setRecordingTempVariable(!1),j.island.setIsFromStreaming(!1))};return q.current=t.io("https://"+y,{upgrade:!1,transports:["websocket"],reconnection:!0,reconnectionDelay:2e3}),j.websocket.update({socket:q.current}),q.current.on("connect",(function(){console.debug("Socket connected sid: ".concat(q.current.id)),o.eventDispatch("phone-island-socket-connected",{})})),q.current.on("disconnect",(function(e){console.debug("Socket disconnect - reason: ".concat(e)),e.includes("server disconnect")?o.eventDispatch("phone-island-server-disconnected",{}):o.eventDispatch("phone-island-socket-disconnected",{})})),q.current.io.on("error",(function(e){console.debug("Socket error: ",e)})),q.current.on("connect_error",(function(e){console.debug("Socket connect_error: ",e)})),q.current.io.on("reconnect",(function(e){o.eventDispatch("phone-island-socket-reconnected",{}),console.debug("Socket reconnect attemp ".concat(e," (sid: ").concat(q.current.id,")"))})),q.current.io.on("reconnect_attempt",(function(e){console.debug("Socket reconnect_attempt ".concat(e))})),q.current.io.on("reconnect_error",(function(e){console.debug("Socket reconnect_error: ",e)})),q.current.io.on("reconnect_failed",(function(){console.debug("Socket reconnect_failed")})),x.current=setInterval((function(){q.current.volatile.emit("ping",i.withTimeout((function(){j.alerts.removeAlert("socket_down"),o.eventDispatch("phone-island-alert-removed",{type:"socket_down"}),o.eventDispatch("phone-island-socket-disconnected-popup-close",{})}),(function(){j.alerts.setAlert("socket_down"),o.eventDispatch("phone-island-socket-disconnected-popup-open",{}),console.error("Socket is unreachable!")}),7e3))}),7e3),q.current.on("connect",(function(){console.debug("Socket on: "+y+" is connected!"),q.current.emit("login",{accessKeyId:"".concat(k),token:C,uaType:N})})),q.current.on("authe_ok",(function(){console.debug("Socket authentication success!"),o.eventDispatch("phone-island-socket-authorized",{})})),q.current.on("userMainPresenceUpdate",(function(n){c.store.dispatch.users.updateEndpointMainPresence(e.__assign({},n.mainPresence)),p.dispatchMainPresence(n)})),q.current.on("extenHangup",(function(e){var n=c.store.getState().currentUser,t=n.endpoints,r=n.username,i=c.store.getState().conference,s=i.isActive,a=i.conferenceStartedFrom,u=c.store.getState().island.view,l=((null==t?void 0:t.extension)||[]).find((function(n){return n.id===e.callerNum})),d=null==l?void 0:l.type;"normal_clearing"===e.cause&&("physical"===d||"mobile"===d)||"user_busy"===(null==e?void 0:e.cause)||"not_defined"===(null==e?void 0:e.cause)||"call_rejected"===(null==e?void 0:e.cause)?(setTimeout((function(){c.store.dispatch.island.toggleAvoidToShow(!1)}),500),s&&a!==r&&c.store.dispatch.conference.resetConference()):"normal_circuit_congestion"===(null==e?void 0:e.cause)&&s&&a===r?o.eventDispatch("phone-island-view-changed",{viewType:"waitingConference"}):"normal_clearing"!==e.cause&&"user_busy"!==(null==e?void 0:e.cause)&&"not_defined"!==(null==e?void 0:e.cause)&&"call_rejected"!==(null==e?void 0:e.cause)||"webrtc"!==d&&"nethlink"!==d||!s||a===r||c.store.dispatch.conference.resetConference(),"interworking"===(null==e?void 0:e.cause)&&s&&a===r&&"waitingConference"!==u&&o.eventDispatch("phone-island-view-changed",{viewType:"waitingConference"})})),q.current.on("extenConnected",(function(e){var n=c.store.getState().currentUser,t=n.default_device,r=n.endpoints,i=((null==r?void 0:r.extension)||[]).find((function(n){return n.id===e.extenConnected})),s=null==i?void 0:i.type;(("webrtc"===(null==t?void 0:t.type)||"nethlink"===(null==t?void 0:t.type))&&s&&("mobile"===s||"physical"===s)||"physical"===(null==t?void 0:t.type)&&s&&"physical"!==s)&&(c.store.dispatch.island.toggleAvoidToShow(!0),o.eventDispatch("phone-island-call-answered",{extensionType:s}))})),q.current.on("extenUpdate",(function(e){j.users.updateExtension(e);var n=c.store.getState().users.extensions,t={};for(var r in n){var o=n[r].username,i=n[r].exten;t[o]||(t[o]=[]),t[o].push(i)}var s=t[e.username],a=e.conversations[Object.keys(e.conversations)[0]]||{};if(p.dispatchExtensions(e),l.isEmpty(a)){var u=null==s?void 0:s.some((function(e){var t,r=null===(t=n[e])||void 0===t?void 0:t.conversations;return!l.isEmpty(r)}));u||p.dispatchConversations(e)}else p.dispatchConversations(e);e.username===k&&(f(e,a),j.currentUser.updateConversations(e))})),q.current.on("queueUpdate",(function(e){p.dispatchQueueUpdate(e)})),q.current.on("queueMemberUpdate",(function(e){p.dispatchQueueMemberUpdate(e)})),q.current.on("takeOver",(function(){p.dispatchAlreadyLogin()})),q.current.on("serverReloaded",(function(){p.dispatchServerReload()})),q.current.on("parkingUpdate",(function(){p.dispatchParkingUpdate()})),q.current.on("actionNethLink",(function(e,n){p.dispatchUrlCall(e,n)})),q.current.on("message",(function(e){switch(e.message){case"screenSharingStart":j.island.toggleSideViewVisible(!1),j.island.setIslandView("video"),j.screenShare.update({isJoiningScreenShare:!0,room:e.roomId});break;case"screenSharingStop":j.island.toggleSideViewVisible(!1),j.island.setIslandView("video"),j.screenShare.update({isLeavingScreenShare:!0});break;default:console.warn("Socket: unknown message type ",e.message)}})),q.current.on("updateDefaultDevice",(function(n){p.dispatchDefaultDeviceUpdate(n);var t=c.store.getState().users.extensions,r=c.store.getState().currentUser.endpoints;if(t&&r){var o=Object.values(t).filter((function(e){return(null==e?void 0:e.exten)===n}));if(0!==o.length){var i=o[0],s=r.extension.find((function(e){return e.id===i.exten}));s&&(i=e.__assign(e.__assign({},i),{type:s.type})),c.store.dispatch.currentUser.updateCurrentDefaultDevice(i),a.checkMediaPermissions()}}})),q.current.on("confBridgeUpdate",(function(n){if(n&&(null==n?void 0:n.users)){var t=null==n?void 0:n.id,r=null==n?void 0:n.users,o=c.store.getState().conference.usersList,i=e.__assign({},r);o&&Object.keys(i).forEach((function(n){o[n]&&(i[n]=e.__assign(e.__assign({},i[n]),{muted:o[n].muted}))})),c.store.dispatch.conference.updateConferenceUsersList(i),c.store.dispatch.conference.updateConferenceId(t)}})),q.current.on("confBridgeEnd",(function(e){e&&(null==e?void 0:e.id)&&(c.store.dispatch.conference.resetConference(),o.eventDispatch("phone-island-conference-finished",{}))})),q.current.on("callWebrtc",(function(e){o.eventDispatch("phone-island-call-start",{number:e})})),q.current.on("newVoiceMessageCounter",(function(e){o.eventDispatch("phone-island-voicemail-received",{voicemailInfo:e})})),q.current.on("streamingSourceUpdate",(function(e){o.eventDispatch("phone-island-streaming-information-received",{res:e});var n=e.streaming||e.res&&e.res.streaming;if(n){var t=n.source,r=n.image;if(t&&r){c.store.getState().island.isFromStreaming;var i=c.store.getState().currentCall.streamingSourceNumber;d.getStreamingSourceId(i),j.streaming.updateSourceImage({source:t,image:r})}}})),function(){clearInterval(x.current),q.current.close()}}),[y,k,C,N,j]),n.useEffect((function(){_&&(console.info("websocket reconnection"),q.current.disconnect(),q.current.connect(),w())}),[_]),b.default.createElement(b.default.Fragment,null,D)};
//# sourceMappingURL=Socket.js.map