UNPKG

@nethesis/phone-island

Version:
3 lines (2 loc) 11.3 kB
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../node_modules/tslib/tslib.es6.js"),t=require("react");require("../node_modules/react-redux/es/index.js");var r=require("../node_modules/webrtc-adapter/src/js/adapter_core.js"),n=require("../lib/webrtc/janus.js"),a=require("../lib/webrtc/messages.js"),i=require("../store/index.js"),o=require("../lib/devices/devices.js"),c=require("../lib/phone/call.js"),u=require("../lib/webrtc/connection.js"),s=require("../static/outgoing_ringtone.js"),l=require("../utils/customHooks/useEventListener.js"),d=require("../utils/genericFunctions/eventDispatch.js"),g=require("../lib/user/default_device.js"),v=require("../node_modules/react-redux/es/hooks/useDispatch.js");function p(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var f=p(t);exports.WebRTC=function(p){var m,b,h=p.hostName,w=p.sipExten,S=p.sipSecret,y=p.children,k=p.sipHost,C=p.sipPort,D=p.reload,T=p.uaType,E=p.reloadedCallback,j=v.useDispatch(),_=t.useRef(null),A=t.useRef(n.default),R={},L=t.useCallback((function(){A.current.init({debug:"all",dependencies:A.current.useDefaultDependencies({adapter:r.default}),callback:function(){var e=new A.current({server:"https://".concat(h,"/janus"),success:function(){e.attach&&e.attach({plugin:"janus.plugin.sip",opaqueId:"sebastian_"+(new Date).getTime(),success:function(e){e&&(j.webrtc.updateWebRTC({sipcall:e}),a.register({sipExten:w,sipSecret:S,sipHost:k,sipPort:C}),e&&A.current.log&&A.current.log("SIP plugin attached! ("+e.getPlugin()+", id = )"))},error:function(e){A.current.error&&(A.current.error(" -- Error attaching plugin..."),A.current.error(e))},consentDialog:function(e){A.current.log&&A.current.log("janus consentDialog (on: ".concat(e,")"))},webrtcState:function(e){A.current.log&&A.current.log("Janus says our WebRTC PeerConnection is "+(e?"up":"down")+" now")},iceState:function(e){i.store.getState().webrtc.sipcall&&A.current.log&&A.current.log('ICE state of PeerConnection of handle has changed to "'.concat(e,'"'))},mediaState:function(e,t){A.current.log&&A.current.log("Janus "+(t?"started":"stopped")+" receiving our "+e)},slowLink:function(e,t){e?A.current.warn&&A.current.warn("SLOW link: several missing packets from janus (".concat(t,")")):A.current.warn&&A.current.warn("SLOW link: janus is not receiving all your packets (".concat(t,")"))},onmessage:function(e,t){var r=i.store.getState().webrtc.sipcall;A.current.debug&&(A.current.debug(" ::: Got a message :::"),A.current.debug(JSON.stringify(e)));var n=e.error;if(null==n||null==n){var o=e.result;if(null!=o&&void 0!==o.event&&null!==o.event){var u=o.event,l=i.store.getState().recorder.recording,v=i.store.getState().island.view;switch(u){case"registration_failed":A.current.error&&A.current.error("Registration failed: "+o.code+" "+o.reason);break;case"unregistered":A.current.log&&A.current.log("Successfully un-registered as "+o.username+"!"),d.eventDispatch("phone-island-webrtc-unregistered",{});break;case"registered":A.current.log&&A.current.log("Successfully registered as "+o.username+"!"),d.eventDispatch("phone-island-webrtc-registered",{}),i.store.getState().webrtc.registered||i.store.dispatch.webrtc.updateWebRTC({registered:!0}),j.alerts.removeAlert("webrtc_down"),d.eventDispatch("phone-island-alert-removed",{type:"webrtc_down"}),j.webrtc.updateLastActivity((new Date).getTime());break;case"registering":A.current.log&&A.current.log("janus registering");break;case"calling":j.currentCall.checkOutgoingUpdate({outgoingWebRTC:!0}),j.webrtc.updateLastActivity((new Date).getTime());break;case"ringing":i.store.getState().player.audioPlayerPlaying||j.player.updateStartAudioPlayer({src:s.default,loop:!0}),j.webrtc.updateLastActivity((new Date).getTime()),"call"!==v&&j.island.setIslandView("call");break;case"progress":A.current.log&&A.current.log("There's early media from "+o.username+", wairing for the call!"),t&&a.handleRemote(t),j.webrtc.updateLastActivity((new Date).getTime());break;case"incomingcall":var p=i.store.getState().currentUser.default_device,f=i.store.getState().currentUser,m=f.endpoints,b=f.username,h=i.store.getState().users.extensions,w=function(){if(!h||!b)return!1;var e=Object.values(h).filter((function(e){return(null==e?void 0:e.username)===b}));return null==e?void 0:e.some((function(e){var t=null==m?void 0:m.extension.find((function(t){return t.id===(null==e?void 0:e.exten)}));return"nethlink"===(null==t?void 0:t.type)&&"offline"!==(null==e?void 0:e.status)}))};("mobile"===T&&w()||"desktop"===T&&("webrtc"===(null==p?void 0:p.type)||void 0===(null==p?void 0:p.type)&&!w()||!w()&&"physical"===(null==p?void 0:p.type)))&&(j.webrtc.updateWebRTC({jsepGlobal:t}),l?j.recorder.setIncoming(!0):(j.currentCall.checkIncomingUpdatePlay({incoming:!0,incomingWebRTC:!0}),A.current.log&&(j.currentCall.updateIncoming(!0),A.current.log("Incoming call from "+o.username+"!"))),j.webrtc.updateLastActivity((new Date).getTime()));break;case"accepted":var S=Math.floor(Date.now()/1e3);A.current.log&&A.current.log(o.username+" accepted the call!"),t&&a.handleRemote(t),j.currentCall.checkAcceptedUpdate({acceptedWebRTC:!0}),j.currentCall.updateCurrentCall({incoming:!1,incomingWebRTC:!1,startTime:null==S?void 0:S.toString()}),i.store.dispatch.player.stopAudioPlayer(),j.webrtc.updateLastActivity((new Date).getTime());break;case"hangup":l&&j.recorder.setRecording(!1),g.isPhysical()||"mobile"===T||(c.hangupCurrentCall(),r.hangup(),i.store.dispatch.player.stopAudioPlayer(),i.store.dispatch.currentCall.reset(),A.current.log&&A.current.log("Call hung up ("+o.code+" "+o.reason+")!"),j.webrtc.updateLastActivity((new Date).getTime())),i.store.dispatch.player.stopAudioPlayer();var y=i.store.getState().screenShare,k=y.active,C=y.plugin,D=y.localScreenStream,E=y.remoteScreenStream;k&&(A.current.stopAllTracks(D),A.current.stopAllTracks(E),j.screenShare.update({active:!1}),C.detach());break;case"gateway_down":console.warn("THE GATEWAY IS DOWN");break;case"info":"application/media_control+xml"===o.type&&o.content.includes("<picture_fast_update")&&r.send({message:{request:"keyframe",user:!0,peer:!0}});break;default:A.current.debug&&A.current.debug("Event not handled:",u)}}}else i.store.getState().webrtc.registered?(r&&r.hangup(),i.store.dispatch.player.stopAudioPlayer()):A.current.log&&A.current.log("User is not registered")},onlocaltrack:function(e,t){A.current.debug&&A.current.debug("Local track "+(t?"added":"removed")+":",e);var r=e.id.replace(/[{}]/g,"");if(!t){var n=R[r];if(n)try{var a=n.getTracks();for(var o in a){var c=a[o];c&&c.stop()}}catch(e){A.current.error&&A.current.error("Error removing track:",e)}return e.kind,void delete R[r]}var u=R[r];if(!u)if("audio"===e.kind)u=new MediaStream([e]),i.store.dispatch.webrtc.updateLocalAudioStream(u);else{u=new MediaStream([e]),i.store.dispatch.webrtc.updateLocalVideoStream(u),R[r]=u,A.current.debug&&A.current.debug("Created local stream:",u);var s=i.store.getState().player.localVideo;A.current.attachMediaStream&&s&&s.current&&A.current.attachMediaStream(s.current,u)}},onremotetrack:function(e,t,r){if(A.current.debug&&A.current.debug("Remote track (mid="+t+") "+(r?"added":"removed")+":",e),i.store.dispatch.player.stopAudioPlayer(),!r)return e.kind,void j.currentCall.updateCurrentCall({showRemoteVideoPlaceHolder:!0});if("audio"===e.kind){var n=new MediaStream([e]);A.current.debug&&A.current.debug("Created remote audio stream: "+n);var a=i.store.getState().player.remoteAudio;a&&a.current&&A.current.attachMediaStream&&A.current.attachMediaStream(a.current,n),i.store.dispatch.webrtc.updateRemoteAudioStream(n)}else{n=new MediaStream([e]);i.store.dispatch.webrtc.updateRemoteVideoStream(n),A.current.debug&&A.current.debug("Created remote video stream:"+n);var o=i.store.getState().player.largeRemoteVideo,c=i.store.getState().player.smallRemoteVideo;A.current.attachMediaStream&&o&&o.current&&A.current.attachMediaStream(o.current,n),A.current.attachMediaStream&&c&&c.current&&(A.current.attachMediaStream(c.current,n),j.currentCall.updateCurrentCall({showRemoteVideoPlaceHolder:!1}))}},oncleanup:function(){A.current.log&&A.current.log(" ::: janus Got a cleanup notification :::")}})},error:function(e){A.current.log&&A.current.log("error",e),j.alerts.setAlert("webrtc_down")},destroyed:function(){j.webrtc.updateWebRTC({destroyed:!0}),j.alerts.setAlert("webrtc_down")}});j.webrtc.updateWebRTC({janusInstance:e})}})}),[A.current]);t.useEffect((function(){void 0!==i.store.getState().currentUser.default_device&&o.checkMediaPermissions()}),[null===(b=null===(m=null===i.store||void 0===i.store?void 0:i.store.getState())||void 0===m?void 0:m.currentUser)||void 0===b?void 0:b.default_device]);var P=t.useState(navigator.onLine),M=P[0],I=P[1],q=t.useState(!1),W=q[0],x=q[1],V=t.useRef(!1);return t.useEffect((function(){var e=function(){return I(!0)},t=function(){return I(!1)};return window.addEventListener("online",e),window.addEventListener("offline",t),function(){window.removeEventListener("online",e),window.removeEventListener("offline",t)}}),[]),t.useEffect((function(){M?V.current&&(console.log("Internet connection restored."),x(!0),V.current=!1):(console.log("Internet connection lost."),V.current=!0,x(!1))}),[M]),t.useEffect((function(){var e;return L(),e=i.store.getState().webrtc.CHECK_INTERVAL_TIME,_.current||(_.current=setInterval((function(){return u.webrtcCheck((function(){a.register({sipExten:w,sipSecret:S,sipHost:k,sipPort:C})}))}),e)),function(){a.unregister(),clearInterval(_.current)}}),[]),t.useEffect((function(){if(D||W){a.unregister();var e=i.store.getState().webrtc.sipcall;e&&e.detach(),A.current.destroy&&A.current.destroy(),setTimeout((function(){L(),E&&E()}),1e4)}}),[D,W]),t.useEffect((function(){var e,t=function(){var e;navigator&&(null===navigator||void 0===navigator?void 0:navigator.mediaDevices)&&(null===(e=null===navigator||void 0===navigator?void 0:navigator.mediaDevices)||void 0===e?void 0:e.enumerateDevices)?null===navigator||void 0===navigator||navigator.mediaDevices.enumerateDevices().then((function(e){j.mediaDevices.updateMediaDevices(e)})).catch((function(e){console.error("Error fetching devices:",e)})):(console.warn("MediaDevices API not supported in this browser or context"),j.mediaDevices.updateMediaDevices([]))};if(t(),navigator&&(null===navigator||void 0===navigator?void 0:navigator.mediaDevices))return null===(e=null===navigator||void 0===navigator?void 0:navigator.mediaDevices)||void 0===e||e.addEventListener("devicechange",t),function(){var e;null===(e=null===navigator||void 0===navigator?void 0:navigator.mediaDevices)||void 0===e||e.removeEventListener("devicechange",t)}}),[]),l.useEventListener("phone-island-attach",(function(e){L(),d.eventDispatch("phone-island-attached",{})})),l.useEventListener("phone-island-call-transfer",(function(t){var r=null==t?void 0:t.to;j.island.toggleIsOpen(!0),function(t){e.__awaiter(this,void 0,void 0,(function(){return e.__generator(this,(function(e){switch(e.label){case 0:return[4,c.attendedTransfer(t)];case 1:return e.sent()&&(j.currentCall.updateCurrentCall({transferring:!0,paused:!1}),j.player.playRemoteAudio()),[2]}}))}))}(r),d.eventDispatch("phone-island-call-transfer-opened",{})})),f.default.createElement(f.default.Fragment,null,y)}; //# sourceMappingURL=WebRTC.js.map