goeasy-rtc 0.3.2 → 0.3.6
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/goeasy-rtc.esm.min.js +1 -1
- package/package.json +1 -1
package/goeasy-rtc.esm.min.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
function t(t,e,i,s){return new(i||(i=Promise))((function(n,o){function r(t){try{c(s.next(t))}catch(t){o(t)}}function a(t){try{c(s.throw(t))}catch(t){o(t)}}function c(t){var e;t.done?n(t.value):(e=t.value,e instanceof i?e:new i((function(t){t(e)}))).then(r,a)}c((s=s.apply(t,e||[])).next())}))}var e;"function"==typeof SuppressedError&&SuppressedError,function(t){t.RTC_LOST="RTC_LOST",t.RTC_RECONNECT="RTC_RECONNECT",t.RTC_TIMEOUT="RTC_TIMEOUT",t.RTC_ACCEPTED="RTC_ACCEPTED",t.RECEIVED_RTC_REMOTE_FLOW="RECEIVED_RTC_REMOTE_FLOW",t.GOEASY_TIMEOUT="GOEASY_TIMEOUT",t.GOEASY_DISCONNECTED="GOEASY_DISCONNECTED",t.RTC_REMOTE_MIC_CHANGED="RTC_REMOTE_MIC_CHANGED",t.RTC_REMOTE_CAMERA_CHANGED="RTC_REMOTE_CAMERA_CHANGED"}(e||(e={}));var i={exports:{}};!function(t){function e(t){if(t)return function(t){for(var i in e.prototype)t[i]=e.prototype[i];return t}(t)}i.exports=e,e.prototype.on=e.prototype.addEventListener=function(t,e){return this._callbacks=this._callbacks||{},(this._callbacks["$"+t]=this._callbacks["$"+t]||[]).push(e),this},e.prototype.once=function(t,e){function i(){this.off(t,i),e.apply(this,arguments)}return i.fn=e,this.on(t,i),this},e.prototype.off=e.prototype.removeListener=e.prototype.removeAllListeners=e.prototype.removeEventListener=function(t,e){if(this._callbacks=this._callbacks||{},0==arguments.length)return this._callbacks={},this;var i,s=this._callbacks["$"+t];if(!s)return this;if(1==arguments.length)return delete this._callbacks["$"+t],this;for(var n=0;n<s.length;n++)if((i=s[n])===e||i.fn===e){s.splice(n,1);break}return this},e.prototype.emit=function(t){this._callbacks=this._callbacks||{};var e=[].slice.call(arguments,1),i=this._callbacks["$"+t];if(i)for(var s=0,n=(i=i.slice(0)).length;s<n;++s)i[s].apply(this,e);return this},e.prototype.listeners=function(t){return this._callbacks=this._callbacks||{},this._callbacks["$"+t]||[]},e.prototype.hasListeners=function(t){return!!this.listeners(t).length}}();var s=i.exports,n={exports:{}},o="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof window.msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto);if(o){var r=new Uint8Array(16);n.exports=function(){return o(r),r}}else{var a=new Array(16);n.exports=function(){for(var t,e=0;e<16;e++)0==(3&e)&&(t=4294967296*Math.random()),a[e]=t>>>((3&e)<<3)&255;return a}}for(var c=[],l=0;l<256;++l)c[l]=(l+256).toString(16).substr(1);var u,d,h=function(t,e){var i=e||0,s=c;return[s[t[i++]],s[t[i++]],s[t[i++]],s[t[i++]],"-",s[t[i++]],s[t[i++]],"-",s[t[i++]],s[t[i++]],"-",s[t[i++]],s[t[i++]],"-",s[t[i++]],s[t[i++]],s[t[i++]],s[t[i++]],s[t[i++]],s[t[i++]]].join("")},C=n.exports,m=h,E=0,T=0;var p=function(t,e,i){var s=e&&i||0,n=e||[],o=(t=t||{}).node||u,r=void 0!==t.clockseq?t.clockseq:d;if(null==o||null==r){var a=C();null==o&&(o=u=[1|a[0],a[1],a[2],a[3],a[4],a[5]]),null==r&&(r=d=16383&(a[6]<<8|a[7]))}var c=void 0!==t.msecs?t.msecs:(new Date).getTime(),l=void 0!==t.nsecs?t.nsecs:T+1,h=c-E+(l-T)/1e4;if(h<0&&void 0===t.clockseq&&(r=r+1&16383),(h<0||c>E)&&void 0===t.nsecs&&(l=0),l>=1e4)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");E=c,T=l,d=r;var p=(1e4*(268435455&(c+=122192928e5))+l)%4294967296;n[s++]=p>>>24&255,n[s++]=p>>>16&255,n[s++]=p>>>8&255,n[s++]=255&p;var R=c/4294967296*1e4&268435455;n[s++]=R>>>8&255,n[s++]=255&R,n[s++]=R>>>24&15|16,n[s++]=R>>>16&255,n[s++]=r>>>8|128,n[s++]=255&r;for(var f=0;f<6;++f)n[s+f]=o[f];return e||m(n)},R=n.exports,f=h;var g=function(t,e,i){var s=e&&i||0;"string"==typeof t&&(e="binary"===t?new Array(16):null,t=null);var n=(t=t||{}).random||(t.rng||R)();if(n[6]=15&n[6]|64,n[8]=63&n[8]|128,e)for(var o=0;o<16;++o)e[s+o]=n[o];return e||f(n)},y=p,v=g,_=v;_.v1=y,_.v4=v;var I=_;class A{support(){return!0}getParams(){return this.params}setData(t){this.active=t.a,this.data=t.d}preConnect(t){}postConnect(){}}const S=s;class b{constructor(){this.emitter=new S}on(t,e){return this.emitter.on(t,e),this}once(t,e){return this.emitter.once(t,e),this}off(t,e){return this.emitter.off(t,e),this}fire(t,e){return this.emitter.emit(t,e),this}}class D{constructor(){this.eventDriver=new b}on(t,e){this.eventDriver.on(t,e)}off(t,e){this.eventDriver.off(t,e)}fire(t,e){this.eventDriver.fire(t,e)}}let N=new class{isDef(t){return!this.isUndef(t)}isUndef(t){return null==t}isPrimitive(t){return"string"==typeof t||"number"==typeof t||"symbol"==typeof t||"boolean"==typeof t}isObject(t){return null!==t&&"object"==typeof t}isPlainObject(t){return"[object Object]"===Object.prototype.toString.call(t)}isRegExp(t){return"[object RegExp]"===Object.prototype.toString.call(t)}isValidArrayIndex(t){let e=parseFloat(String(t));return e>=0&&Math.floor(e)===e&&isFinite(t)}isString(t){return"string"==typeof t}isNumber(t){return"number"==typeof t}isStringOrNumber(t){return this.isString(t)||this.isNumber(t)}isArray(t){return"[object Array]"===Object.prototype.toString.call(t)}isEmpty(t){return this.isArray(t)?0===t.length:this.isObject(t)?!this.isDef(t):!this.isNumber(t)&&(this.isString(t)?""===t.trim():!this.isDef(t))}isNative(t){return"function"==typeof t&&/native code/.test(t.toString())}isFunction(t){return"function"==typeof t}isBoolean(t){return"boolean"==typeof t}isTrue(t){return!0===t}isFalse(t){return!1===t}isNull(t){return null===t}};const w=s;class k{constructor(){this.emitter=new w}on(t,e){if(!N.isString(t))throw Error("event require a string.");if(!N.isFunction(e))throw Error("callback must be a function");this.emitter.on(t,e)}fire(t,e){this.emitter.emit(t,e)}off(t,e){this.emitter.off(t,e)}}class M{static init(t,e,i,s,n,o){this.Socket=t,this.N=e,this.Member=i,this.v=s,this.Platform=n,this.GModules=o}}const O=I;class U{static get(){return O.v1().replace(/-/g,"")}}var L,P,G,x,j;(P=L||(L={})).WRITE="WRITE",P.READ="READ",P.NONE="NONE";class q{constructor(t){this.permission=L.NONE,this.singleTimeout=0,this.totalTimeout=0,this.startTime=0,this.complete=!1,this.retried=0,this.unique=!1,this.uuid=U.get(),this.name=t.name,this.params=t.params,this.permission=t.permission,this.totalTimeout=t.totalTimeout,this.singleTimeout=t.singleTimeout,t.unique&&(this.unique=t.unique),this.success=e=>{this.complete||(this.end(),t.success(e))},this.fail=e=>{this.complete||(this.end(),t.fail(e))}}start(){this.startTime=Date.now(),this.initAutoTimeout()}end(){this.complete=!0,clearTimeout(this.timeoutHandler)}initAutoTimeout(){this.timeoutHandler=setTimeout((()=>{this.complete||this.fail({resultCode:408,content:"Host unreachable or timeout"})}),this.totalTimeout)}}class F extends D{static init(){this.i=new F}}class V{constructor(){F.i.on(e.RTC_LOST,(()=>this.onRTCLost())),F.i.on(e.RTC_RECONNECT,(()=>this.onRTCReconnect()))}onRTCLost(){this.rtcLostTimeoutId=setTimeout((()=>{F.i.fire(e.RTC_TIMEOUT)}),1e4)}onRTCReconnect(){clearTimeout(this.rtcLostTimeoutId)}onGoEasyLost(){this.goeasyLostTimeoutId=setTimeout((()=>{F.i.fire(e.GOEASY_TIMEOUT)}),2e4)}onGoEasyReconnected(){clearTimeout(this.goeasyLostTimeoutId)}}!function(t){t.RTC_CMD="RTC_CMD",t.RTC_PKT="RTC_PKT"}(G||(G={}));class H{constructor(t,e,i){this.name=t,this.callId=e,this.data=i}static createCallCommand(t,e,i){let s={calleeIds:t.callees.map((t=>t.id)),mediaType:i.mediaType,groupId:i.groupId,callId:e};return i.notification&&(s.notification=i.notification),new H(x.CALL,e,s)}}!function(t){t.CALL="CALL",t.QUIT="QUIT",t.BUSY="BUSY",t.ACCEPT="ACCEPT",t.RANG="RANG",t.HANGUP="HANGUP",t.CANCEL="CANCEL",t.REJECT="REJECT",t.RTC_DISCONNECT="RTC_DISCONNECT",t.GET_TOKEN="GET_TOKEN"}(x||(x={})),function(t){t[t.connect=3e3]="connect",t[t.reconnectionDelayMax=3e3]="reconnectionDelayMax",t[t.commonQuerySingle=2500]="commonQuerySingle",t[t.commonQueryTotal=12e3]="commonQueryTotal",t[t.commonRequestSingle=1700]="commonRequestSingle",t[t.commonRequestTotal=12e3]="commonRequestTotal",t[t.commonInfiniteSingle=1700]="commonInfiniteSingle",t[t.commonInfiniteTotal=864e5]="commonInfiniteTotal"}(j||(j={}));class Q{constructor(){this.joined=!1}play(t){}getNewToken(e){return t(this,void 0,void 0,(function*(){let t={name:x.GET_TOKEN};return e&&(t.callId=e),new Promise(((e,i)=>{let s=new q({name:G.RTC_CMD,params:t,permission:L.WRITE,singleTimeout:j.commonRequestSingle,totalTimeout:j.commonRequestTotal,success:t=>{e(t.content)},fail:t=>{i(t)}});M.Socket.e(s)}))}))}}var W,B;!function(t){t[t.AUDIO=0]="AUDIO",t[t.VIDEO=1]="VIDEO"}(W||(W={}));class Y extends Q{constructor(){if(super(),this.client=uni.requireNativePlugin("RTCClientPlugin"),!this.client)throw"Please configure GoEasy RTC native plugin first: https://www.goeasy.io";plus.globalEvent.addEventListener("connectionLost",(()=>{F.i.fire(e.RTC_LOST)})),plus.globalEvent.addEventListener("connectionRecovery",(t=>{F.i.fire(e.RTC_RECONNECT)})),plus.globalEvent.addEventListener("receivedRemoteFlow",(t=>{F.i.fire(e.RECEIVED_RTC_REMOTE_FLOW,t)})),plus.globalEvent.addEventListener("remoteMicChanged",(t=>{F.i.fire(e.RTC_REMOTE_MIC_CHANGED,t)})),plus.globalEvent.addEventListener("remoteCameraChanged",(t=>{F.i.fire(e.RTC_REMOTE_CAMERA_CHANGED,t)}))}destroy(){plus.globalEvent.removeEventListener("connectionLost"),plus.globalEvent.removeEventListener("connectionRecovery"),plus.globalEvent.removeEventListener("receivedRemoteFlow"),plus.globalEvent.removeEventListener("remoteMicChanged"),plus.globalEvent.removeEventListener("remoteCameraChanged"),this.joined&&(this.leave(),this.joined=!1),this.client.destroyEngine()}createEngine(e,i){return t(this,void 0,void 0,(function*(){return this.token=yield this.getNewToken(i),this.token.video=e===W.VIDEO,this.token.userId=M.Socket.user().id,this.client.createRTCClient({vendor:this.token.vendor,userId:this.token.userId}),this.token.callId}))}join(){return new Promise(((t,e)=>{this.client.joinChannel(this.token,(()=>{this.token.userId,this.token.callId,this.joined=!0,t()}),(t=>{this.token.userId,this.token.callId,e({code:400,content:"Failed to join Channel, error code:"+t})}))}))}push(){this.token.video?this.client.callVideo():this.client.callAudio()}leave(){this.client.leaveChannel()}requestPermission(t){return new Promise(((e,i)=>{W.VIDEO===t?this.client.requestVideoCallPermission((t=>{200===t?e():i({code:403,content:"Failed to request video call permission, error code:"+t})})):W.AUDIO===t?this.client.requestVoiceCallPermission((t=>{200===t?e():i({code:403,content:"Failed to request voice call permission, error code:"+t})})):i({code:400,content:"Unsupported media type"})}))}accept(){return t(this,void 0,void 0,(function*(){yield this.join(),this.push()}))}muteMic(t){this.client.muteMic({enabled:t})}toggleSpeaker(t){this.client.enableSpeaker({enabled:t})}muteCamera(t){this.client.muteCamera({enabled:t})}switchCamera(){this.client.switchCamera()}}class ${static setStatus(t){this.status&&this.status.destroy(),this.status=t,pt.callContext.call.status=t.name()}static clearStatus(){this.status.destroy(),this.status=null}}!function(t){t.RING="RING",t.USER_RANG="U_RANG",t.USER_QUIT="U_QUIT",t.USER_ACCEPTED="U_ACCEPTED",t.ENDED="ENDED"}(B||(B={}));class K{static init(){this.eventCenter=new k}static on(t,e){this.eventCenter.on(t,e)}static fire(t,e){this.eventCenter.fire(t,e)}static off(t,e){this.eventCenter.off(t,e)}}class J extends A{static init(t){t.c(M),this.module=new J,this.module.name=this.RTC_MODULE_NAME;let e=null;if(this.supportApp()){let t=uni.requireNativePlugin("RTCClientPlugin");t&&(e=t.v())}this.module.params={v:{n:"goeasy-rtc",v:"0.3.2",npv:e}},M.GModules.initModule(this.module)}static check(){if(!this.module)throw new Error("Please init GRTC first.");if(!this.module.active)throw new Error("RTC unavailable. Please confirm if your GoEasy application supports RTC or contact GoEasy team.");if(!this.supportApp()&&!this.supportBrowser())throw new Error("GRTC is only supported in Android and iOS apps developed with UniApp and Browsers");if(!this.supportGoEasyVersion())throw new Error("GRTC is only supported in GoEasy SDK version 2.10.0 or later")}static supportGoEasyVersion(){return M.v.localeCompare("2.10.0",void 0,{numeric:!0,sensitivity:"base"})>=0}static supportApp(){return[M.Platform.type.UNI_ANDROID,M.Platform.type.UNI_IOS].includes(M.Platform.current)}static supportBrowser(){return M.Platform.type.BROWSER===M.Platform.current}support(){return J.supportGoEasyVersion()&&(J.supportApp()||J.supportBrowser())}postConnect(){F.init(),K.init(),Rt.init()}}J.RTC_MODULE_NAME="GRTC";class z{constructor(t,e){this.userId=t,this.muted=e}}let X=new class{isDef(t){return!this.isUndef(t)}isUndef(t){return null==t}isPrimitive(t){return"string"==typeof t||"number"==typeof t||"symbol"==typeof t||"boolean"==typeof t}isObject(t){return null!==t&&"object"==typeof t}isString(t){return"string"==typeof t}isNumber(t){return"number"==typeof t}isStringOrNumber(t){return this.isString(t)||this.isNumber(t)}isArray(t){return"[object Array]"===Object.prototype.toString.call(t)}isEmpty(t){return this.isArray(t)?0===t.length:this.isObject(t)?!this.isDef(t):!this.isNumber(t)&&(this.isString(t)?""===t.trim():!this.isDef(t))}isNative(t){return"function"==typeof t&&/native code/.test(t.toString())}isFunction(t){return"function"==typeof t}};class Z extends Q{constructor(){super(),this.localTracks=[],this.remoteTracks=new Map;this.QNRTC=(()=>{try{return require("qnweb-rtc").default}catch(t){throw new Error("Please run npm install qnweb-rtc")}})(),this.QNRTC.setLogLevel("NONE"),this.client=this.QNRTC.createClient(),this.initListeners()}initListeners(){this.client.on("connection-state-changed",((t,i)=>{"RECONNECTED"===t?F.i.fire(e.RTC_RECONNECT):"DISCONNECTED"===t&&F.i.fire(e.RTC_LOST)})),this.client.on("user-published",((t,e)=>{this.subscribe(t,e)}))}listenRemoteTrackMutedChanged(t){t.on("mute-state-changed",(i=>{let s=t.isAudio(),n=t.userID,o=s?e.RTC_REMOTE_MIC_CHANGED:e.RTC_REMOTE_CAMERA_CHANGED;F.i.fire(o,new z(n,i))}))}subscribe(i,s){return t(this,void 0,void 0,(function*(){const t=yield this.client.subscribe(s);if(t.audioTracks.length>0&&this.listenRemoteTrackMutedChanged(t.audioTracks[0]),t.videoTracks.length>0&&this.listenRemoteTrackMutedChanged(t.videoTracks[0]),this.remoteTracks.set(i,t),F.i.fire(e.RECEIVED_RTC_REMOTE_FLOW,{userId:i}),!1===this.token.video)this.playRemoteMicrophoneTracks();else{let t=this.getView(i);t&&this.playRemoteTrack(i,t)}}))}createEngine(e,i){return t(this,void 0,void 0,(function*(){return this.token=yield this.getNewToken(i),this.token.video=e===W.VIDEO,this.token.userId=M.Socket.user().id,yield this.initLocalTracks(),this.token.callId}))}join(){return t(this,void 0,void 0,(function*(){const t=this.token.vendorToken.token;yield this.client.join(t),this.joined=!0}))}push(){return t(this,void 0,void 0,(function*(){yield this.client.publish(this.localTracks)}))}accept(){return t(this,void 0,void 0,(function*(){yield this.join(),yield this.push()}))}initLocalTracks(){return t(this,void 0,void 0,(function*(){this.localTracks.length>0||(this.token.video?this.localTracks=yield this.QNRTC.createMicrophoneAndCameraTracks():this.localTracks=[yield this.QNRTC.createMicrophoneAudioTrack()])}))}play(e){return t(this,void 0,void 0,(function*(){if(this.token.video)if(M.Socket.user().id===e){yield this.initLocalTracks();const t=this.getView(e);this.listenCustomAttributes(t),this.playLocalTrack(t)}else{const t=this.getView(e);this.listenCustomAttributes(t),this.playRemoteTrack(e,t)}else this.playRemoteMicrophoneTracks()}))}getView(t){const e=document.getElementsByClassName("grtc-video");for(let i=0;i<e.length;i++){const s=e[i];if(s.getAttribute("userId")===t)return s}}listenCustomAttributes(t){new MutationObserver((e=>{e.forEach((e=>{const i=e.oldValue,s=t.getAttribute("userId");X.isEmpty(s)||s===i||(M.Socket.user().id===s?this.playLocalTrack(t):this.playRemoteTrack(s,t))}))})).observe(t,{attributes:!0,attributeOldValue:!0,attributeFilter:["userid"]})}playRemoteMicrophoneTracks(){const t=document.getElementsByClassName("grtc-audio")[0];t&&this.remoteTracks.forEach(((e,i)=>{for(const i of e.audioTracks)i.play(t)}))}playLocalTrack(t){for(const e of this.localTracks)e.isAudio()||e.play(t,{mirror:!0})}playRemoteTrack(t,e){const i=this.remoteTracks.get(t);if(i)for(const t of[...i.videoTracks,...i.audioTracks])t.play(e)}destroy(){this.joined&&this.leave(),this.releaseMediaTracks()}releaseMediaTracks(){for(const t of this.localTracks)t.destroy();this.localTracks=[],this.remoteTracks.clear()}leave(){return t(this,void 0,void 0,(function*(){yield this.client.leave()}))}requestPermission(e){return t(this,void 0,void 0,(function*(){}))}toggleSpeaker(t){throw new Error("not support.")}muteCamera(t){for(const e of this.localTracks)e.isVideo()&&e.setMuted(t)}muteMic(t){for(const e of this.localTracks)e.isAudio()&&e.setMuted(t)}switchCamera(){throw new Error("not support.")}}class tt{constructor(){this.callees=new Array}getDuration(){return Math.floor((Date.now()-this.acceptedAt)/1e3)}}class et{constructor(t,e,i){this.micMuted=!1,this.cameraMuted=!1,this.id=t,this.data=e,this.status=i}}class it{constructor(t){this.call=new tt,this.acceptedUsers=new st,this.call=t,J.supportApp()?this.cloudRTC=new Y:J.supportBrowser()&&(this.cloudRTC=new Z)}}class st{constructor(){this.acceptedUsers=new Map,this.onRTCRemoteFlow=t=>{this.updateUserStatus(t.userId,{remoteFlow:!0}),this.tryFireUserAccepted(t.userId)},this.onUserAcceptPacket=t=>{t.name===B.USER_ACCEPTED&&(this.updateUserStatus(t.data.userId,{acceptPacket:!0}),this.tryFireUserAccepted(t.data.userId))},M.Socket.onMessage(G.RTC_PKT,this.onUserAcceptPacket),F.i.on(e.RECEIVED_RTC_REMOTE_FLOW,this.onRTCRemoteFlow)}updateUserStatus(t,e){let i;const s=this.acceptedUsers;i=s.has(t)?s.get(t):{acceptPacket:!1,remoteFlow:!1},s.set(t,Object.assign(Object.assign({},i),e))}tryFireUserAccepted(t){const e=this.acceptedUsers;if(e.has(t)){const i=e.get(t);i.remoteFlow&&i.acceptPacket&&(e.delete(t),$.status.onUserAccepted({userId:t}))}}destroy(){M.Socket.offMessage(G.RTC_PKT,this.onUserAcceptPacket),F.i.off(e.RECEIVED_RTC_REMOTE_FLOW,this.onRTCRemoteFlow)}}var nt;!function(t){t.RING="RING",t.USER_RANG="USER_RANG",t.USER_QUIT="USER_QUIT",t.USER_ACCEPTED="USER_ACCEPTED",t.CALL_ENDED="CALL_ENDED",t.USER_MIC_CHANGED="USER_MIC_CHANGED",t.USER_CAMERA_CHANGED="USER_CAMERA_CHANGED"}(nt||(nt={}));const ot=new class{validateId(t,e){if(X.isEmpty(t))throw{code:400,content:` ${e} is required.`};if(!X.isStringOrNumber(t))throw{code:400,content:`TypeError: ${e} require string or number.`}}validateNotification(t){function e(t,e,i){if(!(X.isString(t[e])&&t[e].length<=i))throw{code:400,content:`notification.${e} must be a string of no more than ${i} characters`}}function i(t,e,i,s){let n=t[e];if(X.isObject(n)&&X.isDef(n[i])){let t={code:400,content:`notification.vendorOptions.${e}.${i} require a ${s}}`},o=n[i];if("string"===s&&!X.isString(o))throw t;if("number"===s&&!X.isNumber(o))throw t}}if(!X.isObject(t))throw{code:400,content:"TypeError: notification requires an object."};{if(e(t,"title",32),e(t,"body",50),X.isDef(t.sound)&&!X.isString(t.sound))throw{code:400,content:"notification.sound must be a string"};if(X.isDef(t.badge)&&!X.isString(t.badge))throw{code:400,content:"notification.badge must be a string"};t.badge=t.badge||"0";let s=t.vendorOptions;X.isObject(s)&&(i(s,"huawei","category","string"),i(s,"xiaomi","channel_id","string"),i(s,"oppo","channel_id","string"),i(s,"vivo","classification","number"),i(s,"vivo","category","string"))}}validateObject(t,e){if(X.isUndef(t)||!X.isObject(t))throw{code:400,content:e+" must be an object."}}validateString(t,e){if(X.isUndef(t)||!X.isString(t))throw{code:400,content:e+" must be a string."}}};var rt;!function(t){t.ALL_BUSY="ALL_BUSY",t.DIAL_FAILED="DIAL_FAILED",t.CANCELLED="CANCELLED",t.REJECTED="REJECTED",t.HUNG_UP="HUNG_UP",t.RTC_DISCONNECTED="RTC_DISCONNECTED",t.GOEASY_DISCONNECTED="GOEASY_DISCONNECTED",t.HANDLED_ON_ANOTHER_DEVICE="HANDLED_ON_ANOTHER_DEVICE",t.RING_TIMEOUT="RING_TIMEOUT",t.ACCEPT_FAILED="ACCEPT_FAILED",t.DIAL_TIMEOUT="DIAL_TIMEOUT"}(rt||(rt={}));class at{onRTCRemoteFlow(t){}onUserAcceptPacket(t){}onUserRang(e){return t(this,void 0,void 0,(function*(){pt.updateMemberStatus(e.callerId,"Ringing");const t=yield M.Member.i.getData(e.callerId),i={id:e.callerId,data:t.get(e.callerId)};K.fire(nt.USER_RANG,{user:i})}))}onUserQuit(e){return t(this,void 0,void 0,(function*(){pt.updateMemberStatus(e.userId,"Quit");const t=yield M.Member.i.getData(e.userId),i={id:e.userId,data:t.get(e.userId)};e.userId===M.Socket.user().id?pt.destroyWithEvent(rt.HANDLED_ON_ANOTHER_DEVICE):!0===e.ended?pt.destroyWithEvent(e.reason,i):K.fire(nt.USER_QUIT,{user:i,reason:e.reason})}))}onRTCTimeout(){}onGoEasyDisconnected(){pt.destroyWithEvent(rt.GOEASY_DISCONNECTED)}destroy(){}muteMic(t){}toggleSpeaker(t){}switchCamera(){pt.callContext.cloudRTC.switchCamera()}muteCamera(t){pt.callContext.cloudRTC.muteCamera(t),pt.muteMemberCamera(M.Socket.user().id,t)}play(t){pt.callContext.cloudRTC.play(t)}onRTCRemoteMicChanged(t){}onRTCRemoteCameraChanged(e){return t(this,void 0,void 0,(function*(){}))}}class ct{static sendRequest(t){return new Promise(((e,i)=>{let s=new q({name:G.RTC_CMD,params:t,permission:L.WRITE,singleTimeout:j.commonRequestSingle,totalTimeout:j.commonRequestTotal,success:t=>{e(t)},fail:t=>{i({code:400,content:t.content})}});M.Socket.e(s)}))}}class lt extends at{constructor(){super(),pt.callContext.call.acceptedAt=Date.now()}name(){return"InCall"}accept(){return Promise.reject("The call has already been accepted")}end(){const t=new H(x.HANGUP,pt.callContext.call.id);ct.sendRequest(t),pt.destroyWithEvent(rt.HUNG_UP)}onRTCTimeout(){const t=new H(x.RTC_DISCONNECT,pt.callContext.call.id);ct.sendRequest(t),pt.destroyWithEvent(rt.RTC_DISCONNECTED)}onUserAccepted(e){return t(this,void 0,void 0,(function*(){const t=pt.callContext.call;pt.updateMemberStatus(e.userId,t.status);const i=yield M.Member.i.getData(e.userId),s={id:e.userId,data:i.get(e.userId)};K.fire(nt.USER_ACCEPTED,{user:s})}))}muteMic(t){pt.callContext.cloudRTC.muteMic(t),pt.muteMemberMic(M.Socket.user().id,t)}toggleSpeaker(t){pt.callContext.cloudRTC.toggleSpeaker(t),pt.toggleSpeaker(t)}onRTCRemoteMicChanged(e){return t(this,void 0,void 0,(function*(){let t=e.userId;pt.muteMemberMic(t,e.muted);const i={user:{id:t,data:(yield M.Member.i.getData(t)).get(t)},micMuted:e.muted};K.fire(nt.USER_MIC_CHANGED,i)}))}onRTCRemoteCameraChanged(e){return t(this,void 0,void 0,(function*(){let t=e.userId;pt.muteMemberCamera(t,e.muted);const i={user:{id:t,data:(yield M.Member.i.getData(t)).get(t)},cameraMuted:e.muted};K.fire(nt.USER_CAMERA_CHANGED,i)}))}}class ut extends at{constructor(){super(),this.dialTimeoutId=setTimeout((()=>{pt.destroyWithEvent(rt.DIAL_TIMEOUT)}),45e3)}name(){return"Dialing"}accept(){return Promise.reject("Cannot accept the call during dialing.")}end(){const t=new H(x.CANCEL,pt.callContext.call.id);ct.sendRequest(t),pt.destroyWithEvent(rt.CANCELLED)}onUserAccepted(e){return t(this,void 0,void 0,(function*(){$.setStatus(new lt),pt.callContext.cloudRTC.push();const t=pt.callContext.call;t.caller.status=t.status,pt.updateMemberStatus(e.userId,t.status);const i=yield M.Member.i.getData(e.userId),s={id:e.userId,data:i.get(e.userId)};K.fire(nt.USER_ACCEPTED,{user:s})}))}destroy(){clearTimeout(this.dialTimeoutId)}}class dt extends at{name(){return"Ringing"}constructor(){super(),this.startAccept=!1;const t=Date.now()-pt.callContext.call.time;t>0&&(this.ringTimeoutId=setTimeout((()=>{pt.destroyWithEvent(rt.RING_TIMEOUT)}),45e3-t))}accept(){return new Promise(((i,s)=>t(this,void 0,void 0,(function*(){try{if(this.startAccept)return void s("The call has already been accepted.");this.startAccept=!0;const t=s=>{$.setStatus(new lt);let n=pt.callContext.call;"Quit"!==n.caller.status&&(n.caller.status=n.status),pt.updateMemberStatus(M.Socket.user().id,n.status),pt.updateMemberStatus(s.userId,n.status),F.i.off(e.RTC_ACCEPTED,t),i()};F.i.on(e.RTC_ACCEPTED,t);const n=new H(x.ACCEPT,pt.callContext.call.id);yield ct.sendRequest(n),yield pt.callContext.cloudRTC.join(),pt.callContext.cloudRTC.push()}catch(t){pt.destroyWithEvent(rt.ACCEPT_FAILED),console.warn("accepte failed:",t),s(t)}}))))}onUserAcceptPacket(t){t.userId===M.Socket.user().id?pt.destroyWithEvent(rt.HANDLED_ON_ANOTHER_DEVICE):pt.updateMemberStatus(t.userId,"InCall")}end(){const t=new H(x.REJECT,pt.callContext.call.id);ct.sendRequest(t),pt.destroyWithEvent(rt.REJECTED)}onRTCRemoteFlow(t){const i=pt.callContext.call;"Quit"!==[...i.callees,i.caller].find((e=>e.id===t.userId)).status&&F.i.fire(e.RTC_ACCEPTED,t)}onUserRang(e){return t(this,void 0,void 0,(function*(){}))}destroy(){clearTimeout(this.ringTimeoutId)}onUserAccepted(t){}}class ht{static initNotificationAssembler(){M.N.addAssembler({assemble:t=>({callId:t.callId}),support:t=>!!t.callId})}static createLocalNotification(t){const e=M.N.supportAppNotification();let i=t.notification;if(!X.isObject(i)||!e)return;let s={callId:t.callId};M.N.createLocalNotification(i.title,i.body,s,i.sound,i.badge)}}class Ct{onServerPacket(t,e){switch(t){case B.RING:this.onRing(e);break;case B.USER_RANG:this.onUserRang(e);break;case B.USER_ACCEPTED:this.onUserAcceptPacket(e);break;case B.USER_QUIT:this.onUserQuit(e)}}}class mt extends Ct{name(){return"Busy"}accept(){return $.status.accept()}end(){$.status.end(),Tt.setStatus(new Et)}call(t){return Promise.reject("Another call is in progress.")}onRing(t){const e=new H(x.BUSY,t.id);ct.sendRequest(e)}onUserAcceptPacket(t){$.status.onUserAcceptPacket(t)}onUserRang(t){$.status.onUserRang(t)}onUserQuit(t){$.status.onUserQuit(t)}onRTCTimeout(){$.status.onRTCTimeout()}onRTCRemoteFlow(t){$.status.onRTCRemoteFlow(t)}onGoEasyDisconnected(){$.status.onGoEasyDisconnected()}muteMic(t){$.status.muteMic(t)}toggleSpeaker(t){$.status.toggleSpeaker(t)}muteCamera(t){$.status.muteCamera(t)}switchCamera(){$.status.switchCamera()}play(t){$.status.play(t)}onRTCRemoteMicChanged(t){$.status.onRTCRemoteMicChanged(t)}onRTCRemoteCameraChanged(t){$.status.onRTCRemoteCameraChanged(t)}}class Et extends Ct{name(){return"Idle"}call(e){if(J.check(),ot.validateNotification(e.notification),!M.Socket.user().id)throw new Error("Dialing failed: `id` is required when connecting to GoEasy.");return new Promise(((i,s)=>t(this,void 0,void 0,(function*(){try{Tt.setStatus(new mt),"calleeIds"in e?pt.initGroupCall(e):pt.initPrivateCall(e),$.setStatus(new ut);const t=pt.callContext.cloudRTC;yield t.requestPermission(e.mediaType);const n=yield t.createEngine(e.mediaType);t.join();const o=pt.callContext.call;o.id=n;const r=$.status.name();o.status=r;const a="calleeIds"in e?e.calleeIds:[e.calleeId],c=yield M.Member.i.getData(...a);o.callees=a.map((t=>new et(t,c.get(t),"Ringing")));const l=H.createCallCommand(o,n,e);const u=(yield ct.sendRequest(l)).content.users;o.callees=o.callees.filter((t=>!u.find((e=>e.userId===t.id&&e.busy))));u.every((t=>t.busy))?(pt.destroy(),s({code:400,content:"all callees are busy"})):i()}catch(t){pt.destroy(),console.warn("Call failed",t),s(t)}}))))}onRing(e){return t(this,void 0,void 0,(function*(){try{Tt.setStatus(new mt),pt.ring(e),$.setStatus(new dt),ht.createLocalNotification(e);const t=$.status.name(),i=pt.callContext.call;i.status=t;const s=e.users.map((t=>t.id)),n=yield M.Member.i.getData(e.callerId,...s);i.caller=new et(e.callerId,n.get(e.callerId),t),i.callees=e.users.map((e=>new et(e.id,n.get(e.id),t)));const o=pt.callContext.cloudRTC;o.requestPermission(e.type),yield o.createEngine(e.type,e.callId);const r=new H(x.RANG,i.id);ct.sendRequest(r);const a=yield M.Member.i.getData(e.callerId),c={id:e.callerId,data:a.get(e.callerId)};K.fire(nt.RING,{user:c})}catch(t){console.warn("Ring failed",t),pt.destroy()}}))}accept(){return Promise.reject("No active call to accept.")}end(){}onUserRang(t){}onUserAcceptPacket(t){}onUserQuit(t){}onRTCTimeout(){}onRTCRemoteFlow(t){}onGoEasyDisconnected(){}muteMic(){}toggleSpeaker(){}muteCamera(){}switchCamera(){}play(t){}onRTCRemoteCameraChanged(t){}onRTCRemoteMicChanged(t){}}class Tt{static setStatus(t){this.status=t}}Tt.status=new Et;class pt{static ring(t){const e=new tt;e.id=t.callId,e.time=t.time,e.mediaType=t.type,e.groupId=t.groupId,e.speakerOn=!0,this.callContext=new it(e)}static initPrivateCall(t){const e=new tt;e.mediaType=t.mediaType,e.speakerOn=!0,e.caller=new et(M.Socket.user().id,M.Socket.user().data,"Dialing"),this.callContext=new it(e)}static initGroupCall(t){if(t.calleeIds.length>8)throw new Error("calleeIds can not more than 8");const e=new tt;e.groupId=t.groupId,e.mediaType=t.mediaType,e.speakerOn=!0,e.caller=new et(M.Socket.user().id,M.Socket.user().data,"Dialing"),this.callContext=new it(e)}static updateMemberStatus(t,e){const i=this.callContext.call;[...i.callees,i.caller].find((e=>e.id===t)).status=e}static muteMemberMic(t,e){const i=this.callContext.call,s=[...i.callees,i.caller].find((e=>e.id===t));s.micMuted&&e||!s.micMuted&&!e||(s.micMuted=e)}static muteMemberCamera(t,e){const i=this.callContext.call,s=[...i.callees,i.caller].find((e=>e.id===t));s.cameraMuted&&e||!s.cameraMuted&&!e||(s.cameraMuted=e)}static toggleSpeaker(t){this.callContext.call.speakerOn=t}static isCaller(){return this.callContext.call.caller.id===M.Socket.user().id}static destroyWithEvent(t,e=M.Socket.user()){K.fire(nt.USER_QUIT,{user:e,reason:t}),K.fire(nt.CALL_ENDED),this.destroy()}static destroy(){this.callContext.cloudRTC.destroy(),this.callContext.acceptedUsers.destroy(),this.callContext=null,$.clearStatus(),Tt.setStatus(new Et)}}class Rt{static init(){this.instance=new Rt}static i(){if(this.instance)return this.instance;throw new Error("Please connect GoEasy first.")}constructor(){this.rtcStabilizer=new V,ht.initNotificationAssembler(),M.Socket.onMessage(G.RTC_PKT,this.onServerPacket.bind(this)),F.i.on(e.RECEIVED_RTC_REMOTE_FLOW,this.onRTCRemoteFlow.bind(this)),F.i.on(e.RTC_TIMEOUT,this.onRTCTimeout.bind(this)),F.i.on(e.RTC_REMOTE_MIC_CHANGED,this.onRTCRemoteMicChanged.bind(this)),F.i.on(e.RTC_REMOTE_CAMERA_CHANGED,this.onRTCRemoteCameraChanged.bind(this)),M.Socket.on(M.Socket.EVENT.LOST,this.onGoEasyDisconnected.bind(this)),M.Socket.on(M.Socket.EVENT.DISCONNECT,this.onGoEasyDisconnected.bind(this))}on(t,e){K.on(t.toString(),e)}off(t,e){K.off(t.toString(),e)}call(e){return t(this,void 0,void 0,(function*(){return Tt.status.call(e)}))}groupCall(e){return t(this,void 0,void 0,(function*(){return Tt.status.call(e)}))}accept(){return Tt.status.accept()}getCurrentCall(){return pt.callContext.call}end(){Tt.status.end()}muteMic(t){Tt.status.muteMic(t)}toggleSpeaker(t){Tt.status.toggleSpeaker(t)}muteCamera(t){Tt.status.muteCamera(t)}switchCamera(){Tt.status.switchCamera()}play(t){Tt.status.play(t)}onServerPacket(t){Tt.status.onServerPacket(t.name,t.data)}onRTCTimeout(){Tt.status.onRTCTimeout()}onRTCRemoteFlow(t){Tt.status.onRTCRemoteFlow(t)}onGoEasyDisconnected(){Tt.status.onGoEasyDisconnected()}onRTCRemoteMicChanged(t){Tt.status.onRTCRemoteMicChanged(t)}onRTCRemoteCameraChanged(t){Tt.status.onRTCRemoteCameraChanged(t)}}class ft{static init(t){J.init(t)}static call(t){return Rt.i().call(t)}static groupCall(t){return Rt.i().groupCall(t)}static accept(){return Rt.i().accept()}static currentCall(){return Rt.i().getCurrentCall()}static end(){Rt.i().end()}static muteMic(t){Rt.i().muteMic(t)}static toggleSpeaker(t){Rt.i().toggleSpeaker(t)}static muteCamera(t){Rt.i().muteCamera(t)}static switchCamera(){Rt.i().switchCamera()}static play(t){Rt.i().play(t)}static on(t,e){Rt.i().on(t,e)}static off(t,e){Rt.i().off(t,e)}}ft.EVENT=nt;export{ft as default};
|
|
1
|
+
function t(t,e,i,s){return new(i||(i=Promise))((function(n,o){function r(t){try{c(s.next(t))}catch(t){o(t)}}function a(t){try{c(s.throw(t))}catch(t){o(t)}}function c(t){var e;t.done?n(t.value):(e=t.value,e instanceof i?e:new i((function(t){t(e)}))).then(r,a)}c((s=s.apply(t,e||[])).next())}))}var e;"function"==typeof SuppressedError&&SuppressedError,function(t){t.RTC_LOST="RTC_LOST",t.RTC_RECONNECT="RTC_RECONNECT",t.RTC_TIMEOUT="RTC_TIMEOUT",t.RTC_ACCEPTED="RTC_ACCEPTED",t.RECEIVED_RTC_REMOTE_FLOW="RECEIVED_RTC_REMOTE_FLOW",t.GOEASY_TIMEOUT="GOEASY_TIMEOUT",t.GOEASY_DISCONNECTED="GOEASY_DISCONNECTED",t.RTC_REMOTE_MIC_CHANGED="RTC_REMOTE_MIC_CHANGED",t.RTC_REMOTE_CAMERA_CHANGED="RTC_REMOTE_CAMERA_CHANGED"}(e||(e={}));var i={exports:{}};!function(t){function e(t){if(t)return function(t){for(var i in e.prototype)t[i]=e.prototype[i];return t}(t)}i.exports=e,e.prototype.on=e.prototype.addEventListener=function(t,e){return this._callbacks=this._callbacks||{},(this._callbacks["$"+t]=this._callbacks["$"+t]||[]).push(e),this},e.prototype.once=function(t,e){function i(){this.off(t,i),e.apply(this,arguments)}return i.fn=e,this.on(t,i),this},e.prototype.off=e.prototype.removeListener=e.prototype.removeAllListeners=e.prototype.removeEventListener=function(t,e){if(this._callbacks=this._callbacks||{},0==arguments.length)return this._callbacks={},this;var i,s=this._callbacks["$"+t];if(!s)return this;if(1==arguments.length)return delete this._callbacks["$"+t],this;for(var n=0;n<s.length;n++)if((i=s[n])===e||i.fn===e){s.splice(n,1);break}return this},e.prototype.emit=function(t){this._callbacks=this._callbacks||{};var e=[].slice.call(arguments,1),i=this._callbacks["$"+t];if(i)for(var s=0,n=(i=i.slice(0)).length;s<n;++s)i[s].apply(this,e);return this},e.prototype.listeners=function(t){return this._callbacks=this._callbacks||{},this._callbacks["$"+t]||[]},e.prototype.hasListeners=function(t){return!!this.listeners(t).length}}();var s=i.exports,n={exports:{}},o="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof window.msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto);if(o){var r=new Uint8Array(16);n.exports=function(){return o(r),r}}else{var a=new Array(16);n.exports=function(){for(var t,e=0;e<16;e++)0==(3&e)&&(t=4294967296*Math.random()),a[e]=t>>>((3&e)<<3)&255;return a}}for(var c=[],l=0;l<256;++l)c[l]=(l+256).toString(16).substr(1);var u,d,h=function(t,e){var i=e||0,s=c;return[s[t[i++]],s[t[i++]],s[t[i++]],s[t[i++]],"-",s[t[i++]],s[t[i++]],"-",s[t[i++]],s[t[i++]],"-",s[t[i++]],s[t[i++]],"-",s[t[i++]],s[t[i++]],s[t[i++]],s[t[i++]],s[t[i++]],s[t[i++]]].join("")},m=n.exports,C=h,T=0,E=0;var p=function(t,e,i){var s=e&&i||0,n=e||[],o=(t=t||{}).node||u,r=void 0!==t.clockseq?t.clockseq:d;if(null==o||null==r){var a=m();null==o&&(o=u=[1|a[0],a[1],a[2],a[3],a[4],a[5]]),null==r&&(r=d=16383&(a[6]<<8|a[7]))}var c=void 0!==t.msecs?t.msecs:(new Date).getTime(),l=void 0!==t.nsecs?t.nsecs:E+1,h=c-T+(l-E)/1e4;if(h<0&&void 0===t.clockseq&&(r=r+1&16383),(h<0||c>T)&&void 0===t.nsecs&&(l=0),l>=1e4)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");T=c,E=l,d=r;var p=(1e4*(268435455&(c+=122192928e5))+l)%4294967296;n[s++]=p>>>24&255,n[s++]=p>>>16&255,n[s++]=p>>>8&255,n[s++]=255&p;var R=c/4294967296*1e4&268435455;n[s++]=R>>>8&255,n[s++]=255&R,n[s++]=R>>>24&15|16,n[s++]=R>>>16&255,n[s++]=r>>>8|128,n[s++]=255&r;for(var f=0;f<6;++f)n[s+f]=o[f];return e||C(n)},R=n.exports,f=h;var v=function(t,e,i){var s=e&&i||0;"string"==typeof t&&(e="binary"===t?new Array(16):null,t=null);var n=(t=t||{}).random||(t.rng||R)();if(n[6]=15&n[6]|64,n[8]=63&n[8]|128,e)for(var o=0;o<16;++o)e[s+o]=n[o];return e||f(n)},g=p,y=v,k=y;k.v1=g,k.v4=y;var b=k;class _{support(){return!0}getParams(){return this.params}setData(t){this.active=t.a,this.data=t.d}preConnect(t){}postConnect(){}}const I=s;class A{constructor(){this.emitter=new I}on(t,e){return this.emitter.on(t,e),this}once(t,e){return this.emitter.once(t,e),this}off(t,e){return this.emitter.off(t,e),this}fire(t,e){return this.emitter.emit(t,e),this}}class w{constructor(){this.eventDriver=new A}on(t,e){this.eventDriver.on(t,e)}off(t,e){this.eventDriver.off(t,e)}fire(t,e){this.eventDriver.fire(t,e)}}let S=new class{isDef(t){return!this.isUndef(t)}isUndef(t){return null==t}isPrimitive(t){return"string"==typeof t||"number"==typeof t||"symbol"==typeof t||"boolean"==typeof t}isObject(t){return null!==t&&"object"==typeof t}isPlainObject(t){return"[object Object]"===Object.prototype.toString.call(t)}isRegExp(t){return"[object RegExp]"===Object.prototype.toString.call(t)}isValidArrayIndex(t){let e=parseFloat(String(t));return e>=0&&Math.floor(e)===e&&isFinite(t)}isString(t){return"string"==typeof t}isNumber(t){return"number"==typeof t}isStringOrNumber(t){return this.isString(t)||this.isNumber(t)}isArray(t){return"[object Array]"===Object.prototype.toString.call(t)}isEmpty(t){return this.isArray(t)?0===t.length:this.isObject(t)?!this.isDef(t):!this.isNumber(t)&&(this.isString(t)?""===t.trim():!this.isDef(t))}isNative(t){return"function"==typeof t&&/native code/.test(t.toString())}isFunction(t){return"function"==typeof t}isBoolean(t){return"boolean"==typeof t}isTrue(t){return!0===t}isFalse(t){return!1===t}isNull(t){return null===t}};const N=s;class D{constructor(){this.emitter=new N}on(t,e){if(!S.isString(t))throw Error("event require a string.");if(!S.isFunction(e))throw Error("callback must be a function");this.emitter.on(t,e)}fire(t,e){this.emitter.emit(t,e)}off(t,e){this.emitter.off(t,e)}}class M{static init(t,e,i,s,n,o){this.Socket=t,this.N=e,this.Member=i,this.v=s,this.Platform=n,this.GModules=o}}const L=b;class O{static get(){return L.v1().replace(/-/g,"")}}var P,U,G,x;(U=P||(P={})).WRITE="WRITE",U.READ="READ",U.NONE="NONE";class V{constructor(t){this.permission=P.NONE,this.singleTimeout=0,this.totalTimeout=0,this.startTime=0,this.complete=!1,this.retried=0,this.unique=!1,this.uuid=O.get(),this.name=t.name,this.params=t.params,this.permission=t.permission,this.totalTimeout=t.totalTimeout,this.singleTimeout=t.singleTimeout,t.unique&&(this.unique=t.unique),this.success=e=>{this.complete||(this.end(),t.success(e))},this.fail=e=>{this.complete||(this.end(),t.fail(e))}}start(){this.startTime=Date.now(),this.initAutoTimeout()}end(){this.complete=!0,clearTimeout(this.timeoutHandler)}initAutoTimeout(){this.timeoutHandler=setTimeout((()=>{this.complete||this.fail({resultCode:408,content:"Host unreachable or timeout"})}),this.totalTimeout)}}class j extends w{static init(){this.i=new j}}class q{constructor(){j.i.on(e.RTC_LOST,(()=>this.onRTCLost())),j.i.on(e.RTC_RECONNECT,(()=>this.onRTCReconnect()))}onRTCLost(){this.rtcLostTimeoutId=setTimeout((()=>{j.i.fire(e.RTC_TIMEOUT)}),1e4)}onRTCReconnect(){clearTimeout(this.rtcLostTimeoutId)}onGoEasyLost(){this.goeasyLostTimeoutId=setTimeout((()=>{j.i.fire(e.GOEASY_TIMEOUT)}),2e4)}onGoEasyReconnected(){clearTimeout(this.goeasyLostTimeoutId)}}!function(t){t.RTC_CMD="RTC_CMD",t.RTC_PKT="RTC_PKT"}(G||(G={}));class K{constructor(){this.callees=new Array}getDuration(){return Math.floor((Date.now()-this.acceptedAt)/1e3)}}class F{constructor(t,e,i){this.micMuted=!1,this.cameraMuted=!1,this.id=t,this.data=e,this.status=i}}class H{constructor(t){this.call=new K,this.call=t}}class Q{static init(){this.eventCenter=new D}static on(t,e){this.eventCenter.on(t,e)}static fire(t,e){this.eventCenter.fire(t,e)}static off(t,e){this.eventCenter.off(t,e)}}!function(t){t.RING="RING",t.USER_RANG="USER_RANG",t.USER_QUIT="USER_QUIT",t.USER_ACCEPTED="USER_ACCEPTED",t.CALL_ENDED="CALL_ENDED",t.USER_MIC_CHANGED="USER_MIC_CHANGED",t.USER_CAMERA_CHANGED="USER_CAMERA_CHANGED"}(x||(x={}));class W{static setStatus(t){this.status&&this.status.destroy(),this.status=t,yt.callContext.call.status=t.name()}static clearStatus(){this.status.destroy(),this.status=null}}var B;!function(t){t[t.AUDIO=0]="AUDIO",t[t.VIDEO=1]="VIDEO"}(B||(B={}));class Y extends _{static init(t){t.c(M),this.module=new Y,this.module.name=this.RTC_MODULE_NAME;let e=null;if(this.supportApp()){let t=uni.requireNativePlugin("RTCClientPlugin");t&&(e=t.v())}this.module.params={v:{n:"goeasy-rtc",v:"0.3.6",npv:e}},M.GModules.initModule(this.module)}static check(){if(!this.module)throw new Error("Please init GRTC first.");if(!this.module.active)throw new Error("RTC unavailable. Please confirm if your GoEasy application supports RTC or contact GoEasy team.");if(!this.supportApp()&&!this.supportBrowser())throw new Error("GRTC is only supported in Android and iOS apps developed with UniApp and Browsers");if(!this.supportGoEasyVersion())throw new Error("GRTC is only supported in GoEasy SDK version 2.10.0 or later")}static supportGoEasyVersion(){return M.v.localeCompare("2.10.0",void 0,{numeric:!0,sensitivity:"base"})>=0}static supportApp(){return[M.Platform.type.UNI_ANDROID,M.Platform.type.UNI_IOS].includes(M.Platform.current)}static supportBrowser(){return M.Platform.type.BROWSER===M.Platform.current}support(){return Y.supportGoEasyVersion()&&(Y.supportApp()||Y.supportBrowser())}postConnect(){j.init(),Q.init(),kt.init()}}Y.RTC_MODULE_NAME="GRTC";let $=new class{isDef(t){return!this.isUndef(t)}isUndef(t){return null==t}isPrimitive(t){return"string"==typeof t||"number"==typeof t||"symbol"==typeof t||"boolean"==typeof t}isObject(t){return null!==t&&"object"==typeof t}isString(t){return"string"==typeof t}isNumber(t){return"number"==typeof t}isStringOrNumber(t){return this.isString(t)||this.isNumber(t)}isArray(t){return"[object Array]"===Object.prototype.toString.call(t)}isEmpty(t){return this.isArray(t)?0===t.length:this.isObject(t)?!this.isDef(t):!this.isNumber(t)&&(this.isString(t)?""===t.trim():!this.isDef(t))}isNative(t){return"function"==typeof t&&/native code/.test(t.toString())}isFunction(t){return"function"==typeof t}};const J=new class{validateId(t,e){if($.isEmpty(t))throw{code:400,content:` ${e} is required.`};if(!$.isStringOrNumber(t))throw{code:400,content:`TypeError: ${e} require string or number.`}}validateNotification(t){if(t){if(!$.isObject(t))throw{code:400,content:"TypeError: notification requires an object."};{if(e(t,"title",32),e(t,"body",50),$.isDef(t.sound)&&!$.isString(t.sound))throw{code:400,content:"notification.sound must be a string"};if($.isDef(t.badge)&&!$.isString(t.badge))throw{code:400,content:"notification.badge must be a string"};t.badge=t.badge||"0";let s=t.vendorOptions;$.isObject(s)&&(i(s,"huawei","category","string"),i(s,"xiaomi","channel_id","string"),i(s,"oppo","channel_id","string"),i(s,"vivo","classification","number"),i(s,"vivo","category","string"))}}function e(t,e,i){if(!($.isString(t[e])&&t[e].length<=i))throw{code:400,content:`notification.${e} must be a string of no more than ${i} characters`}}function i(t,e,i,s){let n=t[e];if($.isObject(n)&&$.isDef(n[i])){let t={code:400,content:`notification.vendorOptions.${e}.${i} require a ${s}}`},o=n[i];if("string"===s&&!$.isString(o))throw t;if("number"===s&&!$.isNumber(o))throw t}}}validateObject(t,e){if($.isUndef(t)||!$.isObject(t))throw{code:400,content:e+" must be an object."}}validateString(t,e){if($.isUndef(t)||!$.isString(t))throw{code:400,content:e+" must be a string."}}};var X,z,Z,tt,et;!function(t){t.ALL_BUSY="ALL_BUSY",t.DIAL_FAILED="DIAL_FAILED",t.CANCELLED="CANCELLED",t.REJECTED="REJECTED",t.HUNG_UP="HUNG_UP",t.RTC_DISCONNECTED="RTC_DISCONNECTED",t.GOEASY_DISCONNECTED="GOEASY_DISCONNECTED",t.HANDLED_ON_ANOTHER_DEVICE="HANDLED_ON_ANOTHER_DEVICE",t.RING_TIMEOUT="RING_TIMEOUT",t.ACCEPT_FAILED="ACCEPT_FAILED",t.DIAL_TIMEOUT="DIAL_TIMEOUT"}(X||(X={}));class it{}class st{constructor(t,e){this.joined=!1,this.token=e,this.video=t===B.VIDEO,this.userId=M.Socket.user().id}play(t){}initLocal(){}}class nt extends st{constructor(t,i,s){super(i,s),this.client=t,this.client.createRTCClient({vendor:this.token.vendor,userId:this.userId}),plus.globalEvent.addEventListener("connectionLost",(()=>{j.i.fire(e.RTC_LOST)})),plus.globalEvent.addEventListener("connectionRecovery",(t=>{j.i.fire(e.RTC_RECONNECT)})),plus.globalEvent.addEventListener("receivedRemoteFlow",(t=>{j.i.fire(e.RECEIVED_RTC_REMOTE_FLOW,t)})),plus.globalEvent.addEventListener("remoteMicChanged",(t=>{j.i.fire(e.RTC_REMOTE_MIC_CHANGED,t)})),plus.globalEvent.addEventListener("remoteCameraChanged",(t=>{j.i.fire(e.RTC_REMOTE_CAMERA_CHANGED,t)}))}destroy(){plus.globalEvent.removeEventListener("connectionLost"),plus.globalEvent.removeEventListener("connectionRecovery"),plus.globalEvent.removeEventListener("receivedRemoteFlow"),plus.globalEvent.removeEventListener("remoteMicChanged"),plus.globalEvent.removeEventListener("remoteCameraChanged"),this.joined&&(this.leave(),this.joined=!1),this.client.destroyEngine()}join(){return this.token.video=this.video,this.token.userId=this.userId,new Promise(((t,e)=>{this.client.joinChannel(this.token,(()=>{this.userId,this.token.callId,this.joined=!0,t()}),(t=>{this.userId,this.token.callId,e({code:400,content:"Failed to join Channel, error code:"+t})}))}))}push(){this.video?this.client.callVideo():this.client.callAudio()}leave(){this.client.leaveChannel()}accept(){return t(this,void 0,void 0,(function*(){yield this.join(),this.push()}))}muteMic(t){this.client.muteMic({enabled:t})}toggleSpeaker(t){this.client.enableSpeaker({enabled:t})}muteCamera(t){this.client.muteCamera({enabled:t})}switchCamera(){this.client.switchCamera()}}class ot extends it{constructor(){if(super(),this.nativePlugin=uni.requireNativePlugin("RTCClientPlugin"),!this.nativePlugin)throw"Please configure GoEasy RTC native plugin first: https://www.goeasy.io"}createClient(e,i){return t(this,void 0,void 0,(function*(){return new nt(this.nativePlugin,e,i)}))}requestPermission(t){return new Promise(((e,i)=>{B.VIDEO===t?this.nativePlugin.requestVideoCallPermission((t=>{200===t?e():i({code:403,content:"Failed to request video call permission, error code:"+t})})):B.AUDIO===t?this.nativePlugin.requestVoiceCallPermission((t=>{200===t?e():i({code:403,content:"Failed to request voice call permission, error code:"+t})})):i({code:400,content:"Unsupported media type"})}))}}!function(t){t.QN="QN",t.ALI="ALI",t.TX="TX",t.LK="LK"}(z||(z={}));class rt{constructor(t,e){this.userId=t,this.muted=e}}class at extends st{constructor(t,e){super(t,e),this.localTracks=[],this.remoteTracks=new Map;this.QNRTC=(()=>{try{return require("qnweb-rtc").default||require("qnweb-rtc")}catch(t){throw new Error("Please run npm install qnweb-rtc")}})(),this.QNRTC.setLogLevel("NONE"),this.client=this.QNRTC.createClient(),this.initListeners()}initListeners(){this.client.on("connection-state-changed",((t,i)=>{"RECONNECTED"===t?j.i.fire(e.RTC_RECONNECT):"DISCONNECTED"===t&&j.i.fire(e.RTC_LOST)})),this.client.on("user-published",((t,e)=>{this.subscribe(t,e)}))}listenRemoteTrackMutedChanged(t){t.on("mute-state-changed",(i=>{let s=t.isAudio(),n=t.userID,o=s?e.RTC_REMOTE_MIC_CHANGED:e.RTC_REMOTE_CAMERA_CHANGED;j.i.fire(o,new rt(n,i))}))}subscribe(i,s){return t(this,void 0,void 0,(function*(){const t=yield this.client.subscribe(s);if(t.audioTracks.length>0&&this.listenRemoteTrackMutedChanged(t.audioTracks[0]),t.videoTracks.length>0&&this.listenRemoteTrackMutedChanged(t.videoTracks[0]),this.remoteTracks.set(i,t),j.i.fire(e.RECEIVED_RTC_REMOTE_FLOW,{userId:i}),!1===this.video)this.playRemoteMicrophoneTracks();else{let t=this.getView(i);t&&this.playRemoteTrack(i,t)}}))}initLocal(){return t(this,void 0,void 0,(function*(){yield this.initLocalTracks()}))}join(){return t(this,void 0,void 0,(function*(){const t=this.token.vendorToken.token;yield this.client.join(t),this.joined=!0}))}push(){return t(this,void 0,void 0,(function*(){yield this.client.publish(this.localTracks)}))}accept(){return t(this,void 0,void 0,(function*(){yield this.join(),yield this.push()}))}initLocalTracks(){return t(this,void 0,void 0,(function*(){this.localTracks.length>0||(this.video?this.localTracks=yield this.QNRTC.createMicrophoneAndCameraTracks():this.localTracks=[yield this.QNRTC.createMicrophoneAudioTrack()])}))}play(e){return t(this,void 0,void 0,(function*(){if(this.video){const t=this.getView(e);this.userId===e?(yield this.initLocalTracks(),this.listenCustomAttributes(t),this.playLocalTrack(t)):(this.listenCustomAttributes(t),this.playRemoteTrack(e,t))}else this.playRemoteMicrophoneTracks()}))}getView(t){const e=document.getElementsByClassName("grtc-video");for(let i=0;i<e.length;i++){const s=e[i];if(s.getAttribute("userId")===t)return s}}listenCustomAttributes(t){new MutationObserver((e=>{e.forEach((e=>{const i=e.oldValue,s=t.getAttribute("userId");$.isEmpty(s)||s===i||(this.userId===s?this.playLocalTrack(t):this.playRemoteTrack(s,t))}))})).observe(t,{attributes:!0,attributeOldValue:!0,attributeFilter:["userid"]})}playRemoteMicrophoneTracks(){const t=document.getElementsByClassName("grtc-audio")[0];t&&this.remoteTracks.forEach(((e,i)=>{for(const i of e.audioTracks)i.play(t)}))}playLocalTrack(t){for(const e of this.localTracks)e.isAudio()||e.play(t,{mirror:!0})}playRemoteTrack(t,e){const i=this.remoteTracks.get(t);if(i)for(const t of[...i.videoTracks,...i.audioTracks])t.play(e)}destroy(){this.joined&&this.leave(),this.releaseMediaTracks()}releaseMediaTracks(){for(const t of this.localTracks)t.destroy();this.localTracks=[],this.remoteTracks.clear()}leave(){return t(this,void 0,void 0,(function*(){yield this.client.leave()}))}requestPermission(e){return t(this,void 0,void 0,(function*(){}))}toggleSpeaker(t){throw new Error("not support.")}muteCamera(t){for(const e of this.localTracks)e.isVideo()&&e.setMuted(t)}muteMic(t){for(const e of this.localTracks)e.isAudio()&&e.setMuted(t)}switchCamera(){throw new Error("not support.")}}class ct extends st{constructor(t,e){super(t,e),this.localTracks=[],this.remoteTracks=new Map,this.isFrontFacing=!0,this.LiveKitRTC=this.loadLiveKitRTC(),this.resolution=this.LiveKitRTC.VideoPresets.h720.resolution;const i=new this.LiveKitRTC.DefaultReconnectPolicy([0,1e3,4e3,9e3,16e3]);this.client=new this.LiveKitRTC.Room({adaptiveStream:!1,dynacast:!1,videoCaptureDefaults:{resolution:this.resolution},reconnectPolicy:i}),this.initListeners()}loadLiveKitRTC(){try{return require("livekit-client")}catch(t){throw new Error("Please run npm install livekit-client@2.5.10")}}initListeners(){this.client.on(this.LiveKitRTC.RoomEvent.Reconnected,(()=>{j.i.fire(e.RTC_RECONNECT)})),this.client.on(this.LiveKitRTC.RoomEvent.Disconnected,(()=>{j.i.fire(e.RTC_LOST)})),this.client.on(this.LiveKitRTC.RoomEvent.TrackPublished,((t,e)=>{e.identity,t.setSubscribed(!0)})),this.client.on(this.LiveKitRTC.RoomEvent.ParticipantConnected,(t=>{t.identity,this.listenRemoteParticipant(t)})),this.client.on(this.LiveKitRTC.RoomEvent.TrackSubscribed,((t,e,i)=>{i.identity,this.handleTrackSubscribed(t,e,i)}))}handleTrackSubscribed(t,i,s){let n=s.identity;if(t.kind===this.LiveKitRTC.Track.Kind.Video||t.kind===this.LiveKitRTC.Track.Kind.Audio)if(this.video?t.kind===this.LiveKitRTC.Track.Kind.Video&&j.i.fire(e.RECEIVED_RTC_REMOTE_FLOW,{userId:n}):j.i.fire(e.RECEIVED_RTC_REMOTE_FLOW,{userId:n}),this.updateRemoteTracks(n,t),this.video){let t=this.getVideoView(n);t&&this.playRemoteTrack(n,t)}else this.playRemoteMicTracks()}updateRemoteTracks(t,e){let i=this.remoteTracks.get(t)||[];i.push(e),this.remoteTracks.set(t,i)}listenRemoteParticipant(t){const e=t.identity;t.on(this.LiveKitRTC.RoomEvent.TrackMuted,(t=>this.onTrackMuted(t,e))),t.on(this.LiveKitRTC.RoomEvent.TrackUnmuted,(t=>this.onTrackUnmuted(t,e)))}onTrackMuted(t,i){let s=t.kind;t.kind,s===this.LiveKitRTC.Track.Kind.Video?j.i.fire(e.RTC_REMOTE_CAMERA_CHANGED,new rt(i,!0)):s===this.LiveKitRTC.Track.Kind.Audio&&j.i.fire(e.RTC_REMOTE_MIC_CHANGED,new rt(i,!0))}onTrackUnmuted(t,i){let s=t.kind;s===this.LiveKitRTC.Track.Kind.Video?j.i.fire(e.RTC_REMOTE_CAMERA_CHANGED,new rt(i,!1)):s===this.LiveKitRTC.Track.Kind.Audio&&j.i.fire(e.RTC_REMOTE_MIC_CHANGED,new rt(i,!1))}initLocal(){return t(this,void 0,void 0,(function*(){yield this.initLocalTracks()}))}join(){return t(this,void 0,void 0,(function*(){const t=this.token.vendorToken;yield this.client.connect(t.url,t.token,{autoSubscribe:!1}),this.joined=!0}))}push(){return t(this,void 0,void 0,(function*(){yield Promise.all(this.localTracks.map((t=>this.client.localParticipant.publishTrack(t,{simulcast:!1})))),this.client.remoteParticipants.forEach((t=>{t.trackPublications.forEach((t=>t.setSubscribed(!0))),this.listenRemoteParticipant(t)}))}))}accept(){return t(this,void 0,void 0,(function*(){yield this.join(),yield this.push()}))}initLocalTracks(){return t(this,void 0,void 0,(function*(){const t=yield this.LiveKitRTC.createLocalAudioTrack({echoCancellation:!0,noiseSuppression:!0});if(this.localTracks.push(t),this.video){const t=yield this.LiveKitRTC.createLocalVideoTrack({facingMode:"user"});this.localTracks.push(t)}}))}play(e){return t(this,void 0,void 0,(function*(){if(this.video){const t=this.getVideoView(e);this.listenCustomAttributes(t),this.userId===e?this.playLocalTrack(t):this.playRemoteTrack(e,t)}else this.playRemoteMicTracks()}))}getVideoView(t){const e=document.getElementsByClassName("grtc-video");for(let i=0;i<e.length;i++){const s=e[i];if(s.getAttribute("userId")===t)return s}}listenCustomAttributes(t){new MutationObserver((e=>{e.forEach((e=>{const i=e.oldValue,s=t.getAttribute("userId");$.isEmpty(s)||s===i||(this.userId===s?this.playLocalTrack(t):this.playRemoteTrack(s,t))}))})).observe(t,{attributes:!0,attributeOldValue:!0,attributeFilter:["userid"]})}playRemoteMicTracks(){const t=document.getElementsByClassName("grtc-audio")[0];if(t)for(const e of this.remoteTracks.values())for(const i of e){let e=i.attach();t.appendChild(e)}}playLocalTrack(t){this.playTrack(this.localTracks,t)}playRemoteTrack(t,e){const i=this.remoteTracks.get(t);i&&this.playTrack(i,e)}playTrack(t,e){for(const i of t){let t,s=i.kind,n=i.attach();s===this.LiveKitRTC.Track.Kind.Video?(n.style.width="100%",n.style.height="100%",n.style.objectFit="cover",t=e.querySelector("video")):s===this.LiveKitRTC.Track.Kind.Audio&&(t=e.querySelector("audio")),t?t.replaceWith(n):e.appendChild(n)}}destroy(){this.joined&&this.leave(),this.releaseMediaTracks()}releaseMediaTracks(){for(const t of this.localTracks)t.detach(),t.stop();this.localTracks=[],this.remoteTracks.clear()}leave(){return t(this,void 0,void 0,(function*(){yield this.client.disconnect()}))}toggleSpeaker(t){throw new Error("not support.")}muteCamera(t){for(const e of this.localTracks)e.kind===this.LiveKitRTC.Track.Kind.Video&&this.client.localParticipant.setCameraEnabled(!t)}muteMic(t){for(const e of this.localTracks)e.kind===this.LiveKitRTC.Track.Kind.Audio&&this.client.localParticipant.setMicrophoneEnabled(!t)}switchCamera(){var t;const e=this.client.localParticipant.getTrackPublication(this.LiveKitRTC.Track.Source.Camera);if(!e)return;this.isFrontFacing=!this.isFrontFacing;const i={resolution:this.resolution,facingMode:this.isFrontFacing?"user":"environment"};null===(t=e.videoTrack)||void 0===t||t.restartTrack(i)}}class lt extends it{createClient(e,i){return t(this,void 0,void 0,(function*(){let t,s=i.vendor;if(z.QN===s)t=new at(e,i);else{if(z.LK!==s)throw z.ALI===s?new Error("ali web rtc not implement"):z.TX===s?new Error("tencent web rtc not implement"):new Error("rtc vendor not support");t=new ct(e,i)}return yield t.initLocal(),t}))}requestPermission(t){return Promise.resolve()}}class ut{constructor(t,e,i){this.name=t,this.callId=e,this.data=i}static createCallCommand(t,e,i){let s={calleeIds:t.callees.map((t=>t.id)),mediaType:i.mediaType,groupId:i.groupId,callId:e};return i.notification&&(s.notification=i.notification),new ut(Z.CALL,e,s)}}!function(t){t.CALL="CALL",t.QUIT="QUIT",t.BUSY="BUSY",t.ACCEPT="ACCEPT",t.RANG="RANG",t.HANGUP="HANGUP",t.CANCEL="CANCEL",t.REJECT="REJECT",t.RTC_DISCONNECT="RTC_DISCONNECT",t.GET_TOKEN="GET_TOKEN"}(Z||(Z={})),function(t){t[t.connect=3e3]="connect",t[t.reconnectionDelayMax=3e3]="reconnectionDelayMax",t[t.commonQuerySingle=2500]="commonQuerySingle",t[t.commonQueryTotal=12e3]="commonQueryTotal",t[t.commonRequestSingle=1700]="commonRequestSingle",t[t.commonRequestTotal=12e3]="commonRequestTotal",t[t.commonInfiniteSingle=1700]="commonInfiniteSingle",t[t.commonInfiniteTotal=864e5]="commonInfiniteTotal"}(tt||(tt={}));class dt{static init(){Y.supportApp()?this.rtcPlugin=new ot:this.rtcPlugin=new lt}static initClient(e,i){return t(this,void 0,void 0,(function*(){let t=yield this.getNewToken(i);return this.vendorClient=yield this.rtcPlugin.createClient(e,t),t.callId}))}static getNewToken(e){return t(this,void 0,void 0,(function*(){let t={name:Z.GET_TOKEN};return e&&(t.callId=e),new Promise(((e,i)=>{let s=new V({name:G.RTC_CMD,params:t,permission:P.WRITE,singleTimeout:tt.commonRequestSingle,totalTimeout:tt.commonRequestTotal,success:t=>{e(t.content)},fail:t=>{i(t)}});M.Socket.e(s)}))}))}}class ht{onRTCRemoteFlow(t){}onUserAcceptPacket(t){}onUserRang(e){return t(this,void 0,void 0,(function*(){yt.updateMemberStatus(e.callerId,"Ringing");const t=yield M.Member.i.getData(e.callerId),i={id:e.callerId,data:t.get(e.callerId)};Q.fire(x.USER_RANG,{user:i})}))}onUserQuit(e){return t(this,void 0,void 0,(function*(){return Promise.resolve()}))}onRTCTimeout(){}onGoEasyDisconnected(){yt.destroyWithEvent(X.GOEASY_DISCONNECTED)}destroy(){}muteMic(t){}toggleSpeaker(t){}switchCamera(){dt.vendorClient.switchCamera()}muteCamera(t){dt.vendorClient.muteCamera(t),yt.muteMemberCamera(M.Socket.user().id,t)}play(t){dt.vendorClient.play(t)}onRTCRemoteMicChanged(t){}onRTCRemoteCameraChanged(e){return t(this,void 0,void 0,(function*(){}))}}class mt{static sendRequest(t){return new Promise(((e,i)=>{let s=new V({name:G.RTC_CMD,params:t,permission:P.WRITE,singleTimeout:tt.commonRequestSingle,totalTimeout:tt.commonRequestTotal,success:t=>{e(t)},fail:t=>{i({code:400,content:t.content})}});M.Socket.e(s)}))}}class Ct extends ht{constructor(){super(),yt.callContext.call.acceptedAt=Date.now()}name(){return"InCall"}accept(){return Promise.reject("The call has already been accepted")}end(){const t=new ut(Z.HANGUP,yt.callContext.call.id);mt.sendRequest(t),yt.destroyWithEvent(X.HUNG_UP)}onRTCTimeout(){const t=new ut(Z.RTC_DISCONNECT,yt.callContext.call.id);mt.sendRequest(t),yt.destroyWithEvent(X.RTC_DISCONNECTED)}onUserQuit(e){return t(this,void 0,void 0,(function*(){yt.updateMemberStatus(e.userId,"Quit");const t=yield M.Member.i.getData(e.userId),i={id:e.userId,data:t.get(e.userId)};!0===e.ended?yt.destroyWithEvent(e.reason,i):Q.fire(x.USER_QUIT,{user:i,reason:e.reason})}))}onRTCRemoteFlow(e){return t(this,void 0,void 0,(function*(){const t=yt.callContext.call;yt.updateMemberStatus(e.userId,t.status);const i=yield M.Member.i.getData(e.userId),s={id:e.userId,data:i.get(e.userId)};Q.fire(x.USER_ACCEPTED,{user:s})}))}muteMic(t){dt.vendorClient.muteMic(t),yt.muteMemberMic(M.Socket.user().id,t)}toggleSpeaker(t){dt.vendorClient.toggleSpeaker(t),yt.toggleSpeaker(t)}onRTCRemoteMicChanged(e){return t(this,void 0,void 0,(function*(){let t=e.userId;yt.muteMemberMic(t,e.muted);const i={user:{id:t,data:(yield M.Member.i.getData(t)).get(t)},micMuted:e.muted};Q.fire(x.USER_MIC_CHANGED,i)}))}onRTCRemoteCameraChanged(e){return t(this,void 0,void 0,(function*(){let t=e.userId;yt.muteMemberCamera(t,e.muted);const i={user:{id:t,data:(yield M.Member.i.getData(t)).get(t)},cameraMuted:e.muted};Q.fire(x.USER_CAMERA_CHANGED,i)}))}}class Tt extends ht{constructor(){super(),this.dialTimeoutId=setTimeout((()=>{yt.destroyWithEvent(X.DIAL_TIMEOUT)}),45e3)}name(){return"Dialing"}onUserQuit(e){return t(this,void 0,void 0,(function*(){yt.updateMemberStatus(e.userId,"Quit");const t=yield M.Member.i.getData(e.userId),i={id:e.userId,data:t.get(e.userId)};!0===e.ended?yt.destroyWithEvent(e.reason,i):Q.fire(x.USER_QUIT,{user:i,reason:e.reason})}))}accept(){return Promise.reject("Cannot accept the call during dialing.")}end(){const t=new ut(Z.CANCEL,yt.callContext.call.id);mt.sendRequest(t),yt.destroyWithEvent(X.CANCELLED)}onRTCRemoteFlow(e){return t(this,void 0,void 0,(function*(){W.setStatus(new Ct),dt.vendorClient.push();const t=yt.callContext.call;t.caller.status=t.status,yt.updateMemberStatus(e.userId,t.status);const i=yield M.Member.i.getData(e.userId),s={id:e.userId,data:i.get(e.userId)};Q.fire(x.USER_ACCEPTED,{user:s})}))}destroy(){clearTimeout(this.dialTimeoutId)}}class Et{static initNotificationAssembler(){M.N.addAssembler({assemble:t=>({callId:t.callId}),support:t=>!!t.callId})}static createLocalNotification(t){const e=M.N.supportAppNotification();let i=t.notification;if(!$.isObject(i)||!e)return;let s={callId:t.callId};M.N.createLocalNotification(i.title,i.body,s,i.sound,i.badge)}}class pt extends ht{constructor(){super(),this.startAccept=!1;const t=Date.now()-yt.callContext.call.time;t>0&&(this.ringTimeoutId=setTimeout((()=>{yt.destroyWithEvent(X.RING_TIMEOUT)}),45e3-t))}name(){return"Ringing"}accept(){return new Promise(((i,s)=>t(this,void 0,void 0,(function*(){try{if(this.startAccept)return void s("The call has already been accepted.");this.startAccept=!0;const t=()=>{j.i.off(e.RTC_ACCEPTED,t),i()};j.i.on(e.RTC_ACCEPTED,t),yield dt.vendorClient.join(),dt.vendorClient.push()}catch(t){console.warn("accept failed:",t),yt.destroyWithEvent(X.ACCEPT_FAILED),s(t)}}))))}onUserAcceptPacket(t){t.userId===M.Socket.user().id&&yt.destroyWithEvent(X.HANDLED_ON_ANOTHER_DEVICE)}onUserQuit(e){return t(this,void 0,void 0,(function*(){try{yield this.startPromise}catch(t){return void console.warn("ring error",t)}yt.updateMemberStatus(e.userId,"Quit");const t=yield M.Member.i.getData(e.userId),i={id:e.userId,data:t.get(e.userId)};e.userId===M.Socket.user().id?yt.destroyWithEvent(X.HANDLED_ON_ANOTHER_DEVICE):!0===e.ended?yt.destroyWithEvent(e.reason,i):Q.fire(x.USER_QUIT,{user:i,reason:e.reason})}))}end(){const t=new ut(Z.REJECT,yt.callContext.call.id);mt.sendRequest(t),yt.destroyWithEvent(X.REJECTED)}onRTCRemoteFlow(i){return t(this,void 0,void 0,(function*(){W.setStatus(new Ct);const t=new ut(Z.ACCEPT,yt.callContext.call.id);yield mt.sendRequest(t);let s=yt.callContext.call;"Quit"!==s.caller.status&&(s.caller.status=s.status),yt.updateMemberStatus(M.Socket.user().id,s.status),yt.updateMemberStatus(i.userId,s.status),j.i.fire(e.RTC_ACCEPTED)}))}onUserRang(e){return t(this,void 0,void 0,(function*(){}))}destroy(){clearTimeout(this.ringTimeoutId)}startRing(e){this.startPromise=new Promise(((i,s)=>t(this,void 0,void 0,(function*(){try{Et.createLocalNotification(e);const t=W.status.name(),s=yt.callContext.call;s.status=t;const n=e.users.map((t=>t.id)),o=yield M.Member.i.getData(e.callerId,...n);s.caller=new F(e.callerId,o.get(e.callerId),t),s.callees=e.users.map((e=>new F(e.id,o.get(e.id),t))),dt.rtcPlugin.requestPermission(e.type),yield dt.initClient(e.type,e.callId);const r=new ut(Z.RANG,s.id);yield mt.sendRequest(r);const a=yield M.Member.i.getData(e.callerId),c={id:e.callerId,data:a.get(e.callerId)};Q.fire(x.RING,{user:c}),i()}catch(t){console.warn("Ring failed",t),yt.destroy(),s(t)}}))))}}!function(t){t.RING="RING",t.USER_RANG="U_RANG",t.USER_QUIT="U_QUIT",t.USER_ACCEPTED="U_ACCEPTED",t.ENDED="ENDED"}(et||(et={}));class Rt{onServerPacket(t,e){switch(t){case et.RING:this.onRing(e);break;case et.USER_RANG:this.onUserRang(e);break;case et.USER_ACCEPTED:this.onUserAcceptPacket(e);break;case et.USER_QUIT:this.onUserQuit(e)}}}class ft extends Rt{name(){return"Busy"}accept(){return W.status.accept()}end(){W.status.end(),gt.setStatus(new vt)}call(t){return Promise.reject("Another call is in progress.")}onRing(t){const e=new ut(Z.BUSY,t.id);mt.sendRequest(e)}onUserAcceptPacket(t){W.status.onUserAcceptPacket(t)}onUserRang(t){W.status.onUserRang(t)}onUserQuit(t){W.status.onUserQuit(t)}onRTCTimeout(){W.status.onRTCTimeout()}onRTCRemoteFlow(t){W.status.onRTCRemoteFlow(t)}onGoEasyDisconnected(){W.status.onGoEasyDisconnected()}muteMic(t){W.status.muteMic(t)}toggleSpeaker(t){W.status.toggleSpeaker(t)}muteCamera(t){W.status.muteCamera(t)}switchCamera(){W.status.switchCamera()}play(t){W.status.play(t)}onRTCRemoteMicChanged(t){W.status.onRTCRemoteMicChanged(t)}onRTCRemoteCameraChanged(t){W.status.onRTCRemoteCameraChanged(t)}}class vt extends Rt{name(){return"Idle"}call(e){if(Y.check(),J.validateNotification(e.notification),!M.Socket.user().id)throw new Error("Dialing failed: `id` is required when connecting to GoEasy.");return new Promise(((i,s)=>t(this,void 0,void 0,(function*(){try{gt.setStatus(new ft),yield dt.rtcPlugin.requestPermission(e.mediaType),"calleeIds"in e?yt.initGroupCall(e):yt.initPrivateCall(e),W.setStatus(new Tt);let t=yield dt.initClient(e.mediaType);dt.vendorClient.join();const n=yt.callContext.call;n.id=t;const o=W.status.name();n.status=o;const r="calleeIds"in e?e.calleeIds:[e.calleeId],a=yield M.Member.i.getData(...r);n.callees=r.map((t=>new F(t,a.get(t),"Ringing")));const c=ut.createCallCommand(n,t,e);const l=(yield mt.sendRequest(c)).content.users;n.callees=n.callees.filter((t=>!l.find((e=>e.userId===t.id&&e.busy))));l.every((t=>t.busy))?(yt.destroy(),s({code:400,content:"all callees are busy"})):i()}catch(t){console.warn("Call failed",t),yt.destroy(),s(t)}}))))}onRing(e){return t(this,void 0,void 0,(function*(){gt.setStatus(new ft),yt.ring(e);let t=new pt;W.setStatus(t),t.startRing(e)}))}accept(){return Promise.reject("No active call to accept.")}end(){}onUserRang(t){}onUserAcceptPacket(t){}onUserQuit(t){}onRTCTimeout(){}onRTCRemoteFlow(t){}onGoEasyDisconnected(){}muteMic(){}toggleSpeaker(){}muteCamera(){}switchCamera(){}play(t){}onRTCRemoteCameraChanged(t){}onRTCRemoteMicChanged(t){}}class gt{static setStatus(t){this.status=t}}gt.status=new vt;class yt{static ring(t){const e=new K;e.id=t.callId,e.time=t.time,e.mediaType=t.type,e.groupId=t.groupId,e.speakerOn=!0,this.callContext=new H(e)}static initPrivateCall(e){return t(this,void 0,void 0,(function*(){const t=new K;t.mediaType=e.mediaType,t.speakerOn=!0,t.caller=new F(M.Socket.user().id,M.Socket.user().data,"Dialing"),this.callContext=new H(t)}))}static initGroupCall(t){if(t.calleeIds.length>8)throw new Error("calleeIds can not more than 8");const e=new K;e.groupId=t.groupId,e.mediaType=t.mediaType,e.speakerOn=!0,e.caller=new F(M.Socket.user().id,M.Socket.user().data,"Dialing"),this.callContext=new H(e)}static updateMemberStatus(t,e){const i=this.callContext.call;[...i.callees,i.caller].find((e=>e.id===t)).status=e}static muteMemberMic(t,e){const i=this.callContext.call,s=[...i.callees,i.caller].find((e=>e.id===t));s.micMuted&&e||!s.micMuted&&!e||(s.micMuted=e)}static muteMemberCamera(t,e){const i=this.callContext.call,s=[...i.callees,i.caller].find((e=>e.id===t));s.cameraMuted&&e||!s.cameraMuted&&!e||(s.cameraMuted=e)}static toggleSpeaker(t){this.callContext.call.speakerOn=t}static isCaller(){return this.callContext.call.caller.id===M.Socket.user().id}static destroyWithEvent(t,e=M.Socket.user()){this.updateMemberStatus(e.id,"Quit"),Q.fire(x.USER_QUIT,{user:e,reason:t}),Q.fire(x.CALL_ENDED),this.destroy()}static destroy(){dt.vendorClient.destroy(),this.callContext=null,W.clearStatus(),gt.setStatus(new vt)}}class kt{static init(){this.instance=new kt}static i(){if(this.instance)return this.instance;throw new Error("Please connect GoEasy first.")}constructor(){this.rtcStabilizer=new q,dt.init(),Et.initNotificationAssembler(),M.Socket.onMessage(G.RTC_PKT,this.onServerPacket.bind(this)),j.i.on(e.RECEIVED_RTC_REMOTE_FLOW,this.onRTCRemoteFlow.bind(this)),j.i.on(e.RTC_TIMEOUT,this.onRTCTimeout.bind(this)),j.i.on(e.RTC_REMOTE_MIC_CHANGED,this.onRTCRemoteMicChanged.bind(this)),j.i.on(e.RTC_REMOTE_CAMERA_CHANGED,this.onRTCRemoteCameraChanged.bind(this)),M.Socket.on(M.Socket.EVENT.LOST,this.onGoEasyDisconnected.bind(this)),M.Socket.on(M.Socket.EVENT.DISCONNECT,this.onGoEasyDisconnected.bind(this))}on(t,e){Q.on(t.toString(),e)}off(t,e){Q.off(t.toString(),e)}call(e){return t(this,void 0,void 0,(function*(){return gt.status.call(e)}))}groupCall(e){return t(this,void 0,void 0,(function*(){return gt.status.call(e)}))}accept(){return gt.status.accept()}getCurrentCall(){var t;return(null===(t=yt.callContext)||void 0===t?void 0:t.call)||null}end(){gt.status.end()}muteMic(t){gt.status.muteMic(t)}toggleSpeaker(t){gt.status.toggleSpeaker(t)}muteCamera(t){gt.status.muteCamera(t)}switchCamera(){gt.status.switchCamera()}play(t){gt.status.play(t)}onServerPacket(t){gt.status.onServerPacket(t.name,t.data)}onRTCTimeout(){gt.status.onRTCTimeout()}onRTCRemoteFlow(t){gt.status.onRTCRemoteFlow(t)}onGoEasyDisconnected(){gt.status.onGoEasyDisconnected()}onRTCRemoteMicChanged(t){gt.status.onRTCRemoteMicChanged(t)}onRTCRemoteCameraChanged(t){gt.status.onRTCRemoteCameraChanged(t)}}class bt{static init(t){Y.init(t)}static call(t){return kt.i().call(t)}static groupCall(t){return kt.i().groupCall(t)}static accept(){return kt.i().accept()}static currentCall(){return kt.i().getCurrentCall()}static end(){kt.i().end()}static muteMic(t){kt.i().muteMic(t)}static toggleSpeaker(t){kt.i().toggleSpeaker(t)}static muteCamera(t){kt.i().muteCamera(t)}static switchCamera(){kt.i().switchCamera()}static play(t){kt.i().play(t)}static on(t,e){kt.i().on(t,e)}static off(t,e){kt.i().off(t,e)}}bt.EVENT=x;export{bt as default};
|