@rongcloud/plugin-wechat-rtc
Version:
@rongcloud/plugin-wechat-rtc
1 lines • 69.9 kB
JavaScript
import{HttpMethod as e,isObject as t,EventEmitter as n,ErrorCode as s,validate as i,notEmptyString as o,RCConnectionStatus as r,RTCJoinType as u,ConversationType as a,RTCApiType as c,forEach as d,VersionManage as _,assert as R,isHttpUrl as h,isNumber as l}from"@rongcloud/engine";function I(e,t,n,s){return new(n||(n=Promise))(function(i,o){function r(e){try{a(s.next(e))}catch(e){o(e)}}function u(e){try{a(s.throw(e))}catch(e){o(e)}}function a(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(r,u)}a((s=s.apply(e,t||[])).next())})}var m,p,S,g;"function"==typeof SuppressedError&&SuppressedError,function(e){e[e.SUCCESS=1e4]="SUCCESS",e[e.SIGNAL_DISCONNECTED=5e4]="SIGNAL_DISCONNECTED",e[e.PARAMS_ERROR=50001]="PARAMS_ERROR",e[e.REPERT_JOIN_ROOM=50002]="REPERT_JOIN_ROOM",e[e.NOT_IN_ROOM=50003]="NOT_IN_ROOM",e[e.SERVICE_INVALID=50004]="SERVICE_INVALID",e[e.RTC_TOKEN_INVALID=50006]="RTC_TOKEN_INVALID",e[e.SIGNAL_ERROR=53001]="SIGNAL_ERROR",e[e.CREATE_OFFER_FAILED=53003]="CREATE_OFFER_FAILED",e[e.REQUEST_FAILED=53004]="REQUEST_FAILED",e[e.MCU_SERVER_NOT_FOUND=53005]="MCU_SERVER_NOT_FOUND",e[e.BROADCAST_SUB_LIST_NOT_EMPTY=53007]="BROADCAST_SUB_LIST_NOT_EMPTY",e[e.ROOM_HAS_BEEN_DESTROYED=53008]="ROOM_HAS_BEEN_DESTROYED",e[e.NOT_OPEN_VIDEO_AUDIO_SERVER=53009]="NOT_OPEN_VIDEO_AUDIO_SERVER",e[e.GET_USER_MEDIA_FAILED=53010]="GET_USER_MEDIA_FAILED",e[e.GET_DISPLAY_MEDIA_FAILED=53011]="GET_DISPLAY_MEDIA_FAILED",e[e.PERMISSION_DENIED=53012]="PERMISSION_DENIED",e[e.CREATE_CUSTOM_TRACK_FAILED=53013]="CREATE_CUSTOM_TRACK_FAILED",e[e.INVALID_TAGS=53014]="INVALID_TAGS",e[e.INVALID_USER_ID=53015]="INVALID_USER_ID",e[e.CREATE_FILE_TRACK_FAILED=53016]="CREATE_FILE_TRACK_FAILED",e[e.INVALID_FILE_INSTANCE=53017]="INVALID_FILE_INSTANCE",e[e.SET_REMOTE_DESCRIPTION_FAILED=53018]="SET_REMOTE_DESCRIPTION_FAILED",e[e.BROWSER_NOT_SUPPORT=53019]="BROWSER_NOT_SUPPORT",e[e.TRACK_NOT_READY=53020]="TRACK_NOT_READY",e[e.VIDEO_TRACK_MISS_MEDIA_ELEMENT=53021]="VIDEO_TRACK_MISS_MEDIA_ELEMENT",e[e.TRACK_PLAY_ERROR=53022]="TRACK_PLAY_ERROR",e[e.SIGNAL_AUDIENCE_JOIN_ROOM_FAILED=53023]="SIGNAL_AUDIENCE_JOIN_ROOM_FAILED",e[e.SIGNAL_ROOM_CHANGE_IDENTITY_FAILED=53024]="SIGNAL_ROOM_CHANGE_IDENTITY_FAILED",e[e.PACKAGE_ENVIRONMENT_ERROR=53025]="PACKAGE_ENVIRONMENT_ERROR",e[e.PUBLISH_TRACK_LIMIT_EXCEEDED=53026]="PUBLISH_TRACK_LIMIT_EXCEEDED",e[e.CDN_RESOURCE_IS_EMPTY=53027]="CDN_RESOURCE_IS_EMPTY",e[e.INVALID_MEDIATYPE=53028]="INVALID_MEDIATYPE",e[e.SIGNAL_JOIN_RTC_ROOM_REFUSED=53029]="SIGNAL_JOIN_RTC_ROOM_REFUSED"}(m||(m={})),function(e){e[e.JOIN_REFUSED=40032]="JOIN_REFUSED"}(p||(p={})),function(e){e[e.AUDIO_ONLY=0]="AUDIO_ONLY",e[e.VIDEO_ONLY=1]="VIDEO_ONLY",e[e.AUDIO_VIDEO=2]="AUDIO_VIDEO"}(S||(S={})),function(e){e.T="_",e.L_INIT_RTC_O="L_INIT_RTC_O",e.L_APP_CALLBACK_O="L_APP_CALLBACK_O",e.L_APP_CALLBACK_E="L_APP_CALLBACK_E",e.L_CORE_CTX_CALLBACK_E="L_CORE_CTX_CALLBACK_E",e.L_PUSHER_CTX_CALLBACK_E="L_PUSHER_CTX_CALLBACK_E",e.L_PLAYER_CTX_CALLBACK_E="L_PLAYER_CTX_CALLBACK_E",e.A_SEND_MSG_R="A_SEND_MSG_R",e.A_SET_ROOM_ATTRS_R="A_SET_ROOM_ATTRS_R",e.A_DEL_ROOM_ATTRS_R="A_DEL_ROOM_ATTRS_R",e.A_GET_ROOM_ATTRS_R="A_GET_ROOM_ATTRS_R",e.L_INVOKER_EXECUTE_T="L_INVOKER_EXECUTE_T",e.L_INVOKER_EXECUTE_R="L_INVOKER_EXECUTE_R",e.L_INVOKER_PUSH_O="L_INVOKER_PUSH_O",e.L_INVOKER_DESTROY_O="L_INVOKER_DESTROY_O",e.L_PINGER_START_O="L_PINGER_START_O",e.L_PINGER_SEND_RTCPING_R="L_PINGER_SEND_RTCPING_R",e.L_PINGER_STOP_O="L_PINGER_STOP_O"}(g||(g={}));class E{constructor(e,t,n="https://rtc-miniapp-wctgw-prod-bdcbj.ronghub.com/wechat",s=5e3,i){this._runtime=e,this._logger=t,this._msUrl=n,this._timeout=s,this._store=i}_request(t,n){return I(this,void 0,void 0,function*(){const s={"Content-Type":"application/json;charset=UTF-8","Cache-Control":"no-cache",ClientType:"WeChat-MiniProgram",ClientVersion:"5.4.0","Request-Id":Date.now().toString()},i=`${this._msUrl}${t}`;this._logger.info(g.T,`request -> Request-Id: ${s["Request-Id"]}, url: ${i}`);const{status:o,data:r}=yield this._runtime.httpReq({url:i,body:JSON.stringify(n),headers:Object.assign(Object.assign({},s),this._store.getHttpHeaders()),method:e.POST,timeout:this._timeout});return 200===o&&1e4===r.resultCode?(this._logger.info(g.T,`request success -> Request-Id: ${s["Request-Id"]}`),{code:m.SUCCESS,data:r}):(this._logger.warn(g.T,`request failed -> Request-Id: ${s["Request-Id"]}, status: ${o}, resultCode: ${JSON.stringify(r)}, url: ${i}`),{code:m.REQUEST_FAILED})})}exchange(e){return I(this,void 0,void 0,function*(){return this._request("/exchange",e)})}exit(){return I(this,void 0,void 0,function*(){return this._request("/exit",{})})}}const T=(e,t)=>{const n={},s=Object.keys(e.users);return s.length&&s.forEach(s=>{const i=[],o=e.users[s];if(o.uris)try{i.push(...JSON.parse(o.uris))}catch(e){t.warn(`invalid user data -> userId: ${s}, userData: ${o}`)}n[s]=i}),n},C=e=>`${e.msid}_${e.mediaType}`,O=(e,t,n=!1)=>{e=e.slice();const s=[],i=[],o=[];return t.forEach(t=>{const i=C(t);let r=e.findIndex(e=>C(e)===i);if(n&&(r=e.findIndex(e=>e.uri===t.uri)),-1===r)return void s.push(t);const u=e[r];u.uri!==t.uri?s.push(t):u.state!==t.state&&o.push(t),e.splice(r,1)}),i.push(...e),{publishedList:s,unpublishedList:i,modifiedList:o}},f=(e,t)=>({name:e,content:JSON.stringify({uris:t,ignore:!0})}),v=e=>JSON.stringify(e),A=e=>e.map(e=>Object.assign({},e)),N=e=>{if(!t(e)||void 0===e.low||void 0===e.high)return e;let{low:n}=e;n<0&&(n+=4294967296),n=n.toString(16);return parseInt(e.high.toString(16)+"00000000".replace(new RegExp(`0{${n.length}}$`),n),16)},y=(e,t,n)=>{n.dispatch("showComponent"),e===S.AUDIO_ONLY?n.dispatch(t?"openMicphone":"closeMicphone"):n.dispatch(t?"openCamera":"closeCamera")};var L,U,D,b,P,M,V,k,w,x,$,B,K;!function(e){e.PUBLISH="RCRTC:PublishResource",e.UNPUBLISH="RCRTC:UnpublishResource",e.MODIFY="RCRTC:ModifyResource",e.TOTAL_CONTENT_RESOURCE="RCRTC:TotalContentResources",e.STATE="RCRTC:state",e.ROOM_NOTIFY="RCRTC:RoomNtf",e.USER_NOTIFY="RCRTC:UserNtf",e.KICK="RCRTC:kick",e.PK_INVITE="RCRTC:invite",e.PK_INVITE_TIMEOUT="RCRTC:inviteTimeout",e.PK_CANCEL_INVITE="RCRTC:cancelInvite",e.PK_INVITE_ANSWER="RCRTC:answerInvite",e.PK_END="RCRTC:endInvite",e.OTHER_ROOM_OFFLINE="RCRTC:otherRoomOffline"}(L||(L={})),function(e){e[e.NORMAL=1]="NORMAL",e[e.TINY=2]="TINY"}(U||(U={})),function(e){e.VERTICAL="vertical",e.HORIZONTAL="horizontal"}(D||(D={})),function(e){e[e.THREEDIVIDEFOUR=.75]="THREEDIVIDEFOUR",e[e.NINEDIVIDESIXTEEN=.5625]="NINEDIVIDESIXTEEN"}(b||(b={})),function(e){e.AUTO="auto",e.ENABLE="enable",e.DISABLE="disable"}(P||(P={})),function(e){e[e.CLOSE=0]="CLOSE",e[e.KTV=1]="KTV",e[e.LITTLEROOM=2]="LITTLEROOM",e[e.GREATHALL=3]="GREATHALL",e[e.LOW=4]="LOW",e[e.LOUD=5]="LOUD",e[e.METALLIC=6]="METALLIC",e[e.MAGNETIC=7]="MAGNETIC"}(M||(M={})),function(e){e.SMOOTH="smooth",e.NATURE="nature"}(V||(V={})),function(e){e.STANDARD="standard",e.PINK="pink",e.NOSTALGIA="nostalgia",e.BLUES="blues",e.ROMANTIC="romantic",e.COOL="cool",e.FRESHER="fresher",e.SOLOR="solor",e.AESTHETICISM="aestheticism",e.WHITENING="whitening",e.CERISERED="cerisered"}(k||(k={})),function(e){e.CONTAIN="contain",e.FILLCROP="fillCrop"}(w||(w={})),function(e){e.ORIGIN="origin",e.NOREFERRER="no-referrer"}(x||(x={})),function(e){e.SPEAKER="speaker",e.EAR="ear"}($||($={})),function(e){e.AUTO="auto",e.MEDIA="media",e.VOICECALL="voicecall"}(B||(B={})),function(e){e.FRONT="front",e.BACK="back"}(K||(K={}));class q{constructor(){this._listeners=[]}addEventListener(e){this._listeners.push(e)}dispatch(e,...t){this._listeners.forEach(n=>{const s=n[e];if(s)try{s(...t)}catch(t){console.error(e,t)}})}}const F=new class extends q{constructor(){super(...arguments),this._soundMode=$.SPEAKER}setSoundMode(e){this._soundMode!==e&&(this._soundMode=e,this.dispatch("setSoundMode",e))}getSoundMode(){return this._soundMode}},Y=new class extends n{setNetStatusListener(e){this.removeAll("netStatus"),e&&this.on("netStatus",e)}setLocalAudioLevelListener(e){this.removeAll("audioVolumeNotify"),e&&this.on("audioVolumeNotify",e)}},G=new class extends n{setNetStatusListener(e){this.removeAll("netStatus"),e&&this.on("netStatus",e)}setRemoteAudioLevelListener(e){this.removeAll("audioVolumeNotify"),e&&this.on("audioVolumeNotify",e)}},J=()=>F,H=()=>Y,j=()=>G;globalThis.coreContext=F,globalThis.pusherContext=Y,globalThis.playerContext=G;const Q=J();class X extends n{constructor(e,t,n,s){super(),this._logger=e,this._userId=t,this._tag=n,this._mediaType=s,this._ownerDisableVideo=!0,this._ownerMuteAudio=!0,this._isSubscribed=!1,this._listener=null}registerStreamEventListener(e){this._logger.warn(g.T,"registerStreamEventListener is deprecated"),this._listener=e}__innerSetMediaType(e){const t=this._mediaType;if(this._mediaType=e,e!==t){const n=t>=S.VIDEO_ONLY,s=t!==S.VIDEO_ONLY,i=e>=S.VIDEO_ONLY,o=e!==S.VIDEO_ONLY;n!==i&&(n?this._callListener("onVideoUnpublish"):this._callListener("onVideoPublish")),s!==o&&(s?this._callListener("onAudioUnpublish"):this._callListener("onAudioPublish"))}}_callListener(e){var t;try{null===(t=this._listener)||void 0===t||t[e]()}catch(t){this._logger.error(g.L_APP_CALLBACK_E,`method: ${e}, stack: ${null==t?void 0:t.stack}`)}}__innerSetRtmpUrl(e){Q.dispatch("setPlayerSrc",`${this._userId}_${this._tag}`,e),this._rtmpUrl=e}__innerSetOwnerMuteAudio(e){const t=this._ownerMuteAudio!==e;return this._ownerMuteAudio=e,t}__innerSetOwnerDisableVideo(e){const t=this._ownerDisableVideo!==e;return this._ownerDisableVideo=e,t}__innerSetIsSubscribed(e){this._isSubscribed=e}isOwnerMuteAudio(){return this._ownerMuteAudio}isOwnerDisableVideo(){return this._ownerDisableVideo}isSubscribed(){return this._isSubscribed}hasVideo(){return this._mediaType>S.AUDIO_ONLY}hasAudio(){return this._mediaType===S.AUDIO_ONLY||this._mediaType===S.AUDIO_VIDEO}getRTMPUrl(){return this._rtmpUrl}getTag(){return this._tag}getUserId(){return this._userId}getMsid(){return`${this._userId}_${this._tag}`}getMediaType(){return this._mediaType}mute(){Q.dispatch("mute",`${this._userId}_${this._tag}`)}unmute(){Q.dispatch("unmute",`${this._userId}_${this._tag}`)}setAudioOutputDevice(e){this._logger.warn(g.T,"'setAudioOutputDevice has beem deprecated, please use 'room.setAudioOutputDevice(mode)' instead"),Q.setSoundMode(e)}}var W,z,Z;!function(e){e[e.LOW=0]="LOW",e[e.NORMAL=1]="NORMAL",e[e.HIGH=2]="HIGH"}(W||(W={})),function(e){e[e.Destroy=40400]="Destroy"}(z||(z={}));class ee{get priority(){return W.LOW}}!function(e){e.UNKNOWN="UNKNOWN",e.ChangeEnableCommand="ChangeEnableCommand",e.JoinRTCRoomCommand="JoinRTCRoomCommand",e.RemoteUserCommand="RemoteUserCommand",e.UnsubCommand="UnsubCommand",e.PubCommand="PubCommand",e.ReconnectCommand="ReconnectCommand",e.UnpubCommand="UnpubCommand",e.SubscribeCommand="SubscribeCommand",e.RemoteResourceCommand="RemoteResourceCommand",e.PullRTCRoomStatusCommand="PullRTCRoomStatusCommand"}(Z||(Z={}));class te extends ee{constructor(e,t=!1){super(),this._subParams=e,this._forceSub=t,this._transSubParams=[];const n={};this._subParams.forEach(e=>{const t=e instanceof X?{stream:e,subTiny:!0}:e,s=t.stream.getMsid();n[s]=t}),this._transSubParams=Object.values(n)}get kind(){return Z.SubscribeCommand}_filterNewSubParams(e){const t=[...e.getSubscribedParams()],n=this._transSubParams.filter(e=>se(e,t)),s=t.filter(e=>ie(e,n));return{newSubParams:n,restSubParams:s}}_updateStoreData(e,t,n){t.forEach(t=>{const{stream:n}=t,s=((e,t)=>{let n="";return t.forEach(t=>{t.msid===e&&(n=t.uri)}),n})(n.getMsid(),e);n.__innerSetRtmpUrl(s),n.__innerSetIsSubscribed(!0)}),n.setSubscribeParams(t)}_exchange(e,t){return I(this,void 0,void 0,function*(){const{logger:n,store:s,service:i}=t,o=yield ae(s,i,e);return o.code!==m.SUCCESS?(n.warn(g.T,`subscribe failed -> roomId: ${s.getRoomId()}, code: ${o.code}`),o):(n.info(g.T,`exchange subscribe success, subscribeList: ${JSON.stringify(e.map(e=>({subTiny:!!e.subTiny,msid:e.stream.getMsid()})))}`),o)})}execute(e){return I(this,void 0,void 0,function*(){const{newSubParams:t,restSubParams:n}=this._filterNewSubParams(e.store);if(!t.length&&!this._forceSub)return{code:m.SUCCESS};const s=[...t,...n],i=yield this._exchange(s,e),{code:o}=i;if(o===m.SUCCESS){const{rtmpSubscribeList:t}=i.data;this._updateStoreData(t,s,e.store)}return{code:o}})}}class ne extends ee{constructor(e){super(),this._unsubStreams=e,this._unsubStreams=[...new Set(this._unsubStreams)]}get kind(){return Z.UnsubCommand}_exchange(e,t){return I(this,void 0,void 0,function*(){const{store:n,service:s,logger:i}=t,o=yield ae(n,s,e);return o.code!==m.SUCCESS?(i.warn(g.T,`unsubscribe failed -> roomId: ${n.getRoomId()}, code: ${o.code}`),o):(i.info(g.T,`exchange subscribe success, subscribeList: ${JSON.stringify(e.map(e=>({subTiny:!!e.subTiny,msid:e.stream.getMsid()})))}`),o)})}execute(e){return I(this,void 0,void 0,function*(){const{store:t}=e,n=t.getSubscribedParams();if(!n.length)return{code:m.SUCCESS};const s=this._unsubStreams.filter(e=>n.some(({stream:t},n)=>e.getMsid()===t.getMsid())),i=n.filter(({stream:e})=>s.some(t=>t.getMsid()!==e.getMsid())),{code:o}=yield this._exchange(i,e);return o!==m.SUCCESS?{code:o}:(s.length&&t.deleteSubscribeParams(s),s.forEach(e=>{e.__innerSetRtmpUrl(""),e.__innerSetIsSubscribed(!1)}),e.emit(De.DEL_RECV_NET_STAT,s),{code:m.SUCCESS})})}}const se=(e,t)=>{const n=t.some(t=>{const n=e.stream.getMsid()===t.stream.getMsid(),s=e.subTiny===t.subTiny;return n&&s});return!t.length||!n},ie=(e,t)=>t.every(t=>!(e.stream.getMsid()===t.stream.getMsid())),oe=(e,t,n)=>I(void 0,void 0,void 0,function*(){const{store:s}=e,i=[],o=new Set,r=new Set,u=new Set,a=s.getResourceByUserId(n),c=a.map(C);t.forEach(t=>I(void 0,void 0,void 0,function*(){const n=C(t),d=c.indexOf(n),{userId:_,tag:R,mediaType:h}=(e=>{const t=e.split("_");return{mediaType:parseInt(t.pop()),tag:t.pop(),userId:t.join("_")}})(n),l=`${_}_${R}`;d>-1?a[d]=t:a.push(t);let I=s.getRemoteStream(l);if(!I)return I=new X(e.logger,_,R,t.mediaType),h===S.AUDIO_ONLY?I.__innerSetOwnerMuteAudio(0===t.state):I.__innerSetOwnerDisableVideo(0===t.state),s.setRemoteStream(l,I),void i.push(I);if(i.indexOf(I)>=0)return I.__innerSetMediaType(S.AUDIO_VIDEO),void(h===S.AUDIO_ONLY?I.__innerSetOwnerMuteAudio(0===t.state):I.__innerSetOwnerDisableVideo(0===t.state));I.isSubscribed()&&o.add(I);const m=I.getMediaType();m!==S.AUDIO_VIDEO&&m!==h?(I.__innerSetMediaType(S.AUDIO_VIDEO),h===S.AUDIO_ONLY?I.__innerSetOwnerMuteAudio(0===t.state)&&r.add(I):I.__innerSetOwnerDisableVideo(0===t.state)&&u.add(I)):h===S.AUDIO_ONLY?I.__innerSetOwnerMuteAudio(0===t.state)&&r.add(I):I.__innerSetOwnerDisableVideo(0===t.state)&&u.add(I)})),s.setResourcesByUserId(n,a),o.size&&(yield((e,t)=>I(void 0,void 0,void 0,function*(){const n=e.map(e=>({msid:e.getMsid(),mediaType:e.getMediaType()}));t.logger.info(g.T,`resub stream -> ${JSON.stringify(n)}`);const s=new te(e,!0);yield s.execute(t)}))([...o],e)),i.length&&e.emit(De.ON_STREAM_PUBLISH,i),r.size&&r.forEach(t=>{e.emit(De.ON_AUDIO_MUTE_CHANGE,t)}),u.size&&u.forEach(t=>{e.emit(De.ON_VIDEO_MUTE_CHANGE,t)})}),re=(e,t,n)=>I(void 0,void 0,void 0,function*(){const{store:s}=e,i=s.getResourceByUserId(n),o=t.map(C);for(let e=i.length-1;e>=0;e-=1){const t=i[e];o.includes(C(t))&&s.updateResourceByUserId(n,e,null)}const{unpubStreams:r,restStreams:u}=((e,t)=>{const n=t.getRemoteStreams(),s={},i={};return e.forEach(e=>{const{mediaType:t,msid:o}=e,r=n[o];t===S.AUDIO_ONLY&&(r.hasVideo()?(r.__innerSetMediaType(S.VIDEO_ONLY),i[o]=r):(delete i[o],s[o]=r)),t===S.VIDEO_ONLY&&(r.hasAudio()?(i[o]=r,r.__innerSetMediaType(S.AUDIO_ONLY)):(delete i[o],s[o]=r))}),{unpubStreams:Object.values(s),restStreams:Object.values(i)}})(t,s);if(r.length&&(yield new ne(r).execute(e),s.deleteRemoteStreams(r),e.emit(De.ON_STREAM_UNPUBLISH,r)),u.length){const t=new Set,n=new Set;u.forEach(e=>{e.getMediaType()===S.AUDIO_ONLY&&e.__innerSetOwnerDisableVideo(!0)&&n.add(e),e.getMediaType()===S.VIDEO_ONLY&&e.__innerSetOwnerMuteAudio(!0)&&t.add(e)}),t.size&&t.forEach(t=>{e.emit(De.ON_AUDIO_MUTE_CHANGE,t)}),n.size&&n.forEach(t=>{e.emit(De.ON_VIDEO_MUTE_CHANGE,t)})}}),ue=(e,t,n)=>{const{store:s}=e,i=s.getResourceByUserId(n).map(C),o=new Set,r=new Set;for(let e=0;e<t.length;e+=1){const u=t[e],{msid:a,mediaType:c}=u,d=C(u),_=i.indexOf(d);s.updateResourceByUserId(n,_,u);const R=s.getRemoteStream(a);R?c===S.AUDIO_ONLY?R.__innerSetOwnerMuteAudio(0===u.state)&&o.add(R):R.__innerSetOwnerDisableVideo(0===u.state)&&r.add(R):console.warn(`!!! stream is not found: ${a} !!!`)}o.size&&o.forEach(t=>{e.emit(De.ON_AUDIO_MUTE_CHANGE,t)}),r.size&&r.forEach(t=>{e.emit(De.ON_VIDEO_MUTE_CHANGE,t)})},ae=(e,t,n,s=!1)=>I(void 0,void 0,void 0,function*(){const i=((e,t)=>{const n=[];return t.forEach(t=>{const{stream:s,subTiny:i}=t instanceof X?{stream:t,subTiny:!0}:t,o=s.getUserId(),r=s.hasVideo(),u=s.hasAudio(),a=s.getTag();r&&n.push({uri:e.getUriByResourceId(o,a,S.VIDEO_ONLY),simulcast:i?U.TINY:U.NORMAL}),u&&n.push({uri:e.getUriByResourceId(o,a,S.AUDIO_ONLY)})}),n})(e,n),o=s?null:e.getPublishParams();if(!(i&&i.length||o))return t.exit();const r={rtmp:o?[{msid:`${e.getCrtUserId()}_${o.tag}`,mediaType:o.mediaType,resolution:"640X480"}]:[],subscribeList:i||[]};return t.exchange(r)});function ce(e,t,n,s,i,o){return I(this,void 0,void 0,function*(){const{logger:s}=n,i=[],o={},r={},u={},a=T(e,s),c=Object.keys(a),d=t.getAllUserIds();for(let e=c.length-1;e>=0;e-=1){const n=c[e],s=d.indexOf(n);if(-1===s){i.push(n),o[n]=A(a[n]);continue}const _=t.getResourceByUserId(n),R=a[n],{publishedList:h,modifiedList:l,unpublishedList:I}=O(_,R,!0);o[n]=A(h),r[n]=A(I),u[n]=A(l),d.splice(s,1)}d.length&&d.forEach(e=>{t.deleteResourceByUserId(e)}),t.assignRoomData(a),d.length&&(yield((e,t,n)=>I(void 0,void 0,void 0,function*(){const s=[];e.forEach(e=>{s.push(...t.getRemoteStreamByUserId(e))}),s.length&&(yield new ne(s).execute(n)),e.forEach(e=>{t.deleteRemoteStreamByUserId(e),t.deleteResourceByUserId(e)})}))(d,t,n),n.emit(De.ON_USER_LEAVE,d)),i.length&&n.emit(De.ON_USER_JOIN,i);for(const e in r)e!==t.getCrtUserId()&&(yield re(n,r[e],e));for(const e in o){const t=o[e];t.length&&oe(n,t,e)}for(const e in u)ue(n,u[e],e)})}function de(e){var t,n;const{userId:s,userData:i}=e,o=(e=>e.some(e=>"uris"===e.key||"cdn_uris"===e.key))(i);if(!o)return;const r=null===(t=i.filter(e=>"uris"===e.key)[0])||void 0===t?void 0:t.value,u=null===(n=i.filter(e=>"cdn_uris"===e.key)[0])||void 0===n?void 0:n.value;return{userId:s,content:{uris:r?JSON.parse(r):[],cdn_uris:u&&JSON.parse(u)}}}function _e(e){var t;const{userId:n,userData:s,event:i,switchRoleType:o}=e;return{users:[{userId:n,extra:null===(t=s.filter(e=>"extra"===e.key)[0])||void 0===t?void 0:t.value,state:i,switchRoleType:o}]}}class Re extends ee{constructor(e,t,n){super(),this._tag=e,this._mediaType=t,this._room=n,this._coreContext=J()}get kind(){return Z.PubCommand}_getResourceState(e,t){let n;return n=e===S.AUDIO_ONLY?this._room.isMicphoneOpen()?1:0:this._room.isCameraOpen()?1:0,n}_sendTotalUris(e,t){return I(this,void 0,void 0,function*(){const{store:n,context:s}=t,{publishList:i,rtmpPublishList:o,rtmpSubscribeList:r}=e,u=o[0].uri,a=n.getRoomResource()[n.getCrtUserId()],c=i.map(e=>Object.assign(Object.assign({tag:e.msid.split("_").pop(),state:this._getResourceState(e.mediaType,n)},e),{rtmpUri:u})),{publishedList:d}=O(a,c);return{code:yield s.setRTCTotalRes(n.getRoomId(),[f(L.PUBLISH,d)],v(c),L.TOTAL_CONTENT_RESOURCE),publishList:c}})}_updateStore(e,t){e.setResourcesByUserId(e.getCrtUserId(),t),e.setPubMediaType(this._mediaType),this._mediaType===S.AUDIO_VIDEO?(e.setIsPubVideo(!0),e.setIsPubAudio(!0)):this._mediaType===S.AUDIO_ONLY?e.setIsPubAudio(!0):e.setIsPubVideo(!0)}execute(e){return I(this,void 0,void 0,function*(){if(t=this._tag,!/^[a-zA-Z\d-=]+$/g.test(t))return{code:m.INVALID_TAGS};var t,n;if(n=this._mediaType,!S[n])return{code:m.INVALID_MEDIATYPE};const{store:i,logger:o,service:r}=e;this._coreContext.dispatch("showComponent"),i.setPublishParams(this._tag,this._mediaType),e.emit(De.OPERATE_DEVICE_BY_MEDIA_TYPE,this._mediaType);const u=yield ae(i,r,i.getSubscribedParams());if(u.code!==m.SUCCESS)return i.setPublishParams(""),o.warn(g.T,`publish failed -> roomId: ${i.getRoomId()}, code: ${u.code}`),{code:u.code};const{rtmpPublishList:a}=u.data,{code:c,publishList:d}=yield this._sendTotalUris(u.data,e);if(c!==s.SUCCESS)return o.warn(g.T,`send publish streams notification failed: ${c}`),i.setPublishParams(""),{code:c};o.info(g.T,`publish success, tag: ${this._tag}, mediaType: ${this._mediaType}`),this._updateStore(i,d);const _=a[0].uri;return this._coreContext.dispatch("setPusherUrl",_),{code:m.SUCCESS}})}}class he{constructor(e,t,n,s){this._logger=e,this._context=t,this._store=n,this.abortCode=s,this._queue=[],this._busy=!1,this._isDestroyed=!1}_next(){this._busy=!1,this._execute()}_execute(){return I(this,void 0,void 0,function*(){if(this._isDestroyed||this._busy||0===this._queue.length)return;this._busy=!0;const{command:e,resolve:t}=this._queue.shift();let n;const i=this._logger.createTraceId();try{this._logger.info(g.L_INVOKER_EXECUTE_T,`kind: ${e.kind}, length: ${this._queue.length}`,i),n=yield e.execute(this._context,this._store,this)}catch(t){return console.error(t),this._logger.error(g.L_INVOKER_EXECUTE_R,e.kind,i),void this._next()}const{code:o}=n;o!==m.SUCCESS&&o!==s.SUCCESS?this._logger.warn(g.L_INVOKER_EXECUTE_R,`code: ${o}, kind: ${e.kind}`,i):this._logger.info(g.L_INVOKER_EXECUTE_R,`kind: ${e.kind}, Done`,i),t(n),this._next()})}push(e){return new Promise(t=>{if(this._logger.info(g.L_INVOKER_PUSH_O,JSON.stringify({isDestroyed:this._isDestroyed,kind:e.kind,length:this._queue.length})),this._isDestroyed)return void t({code:m.NOT_IN_ROOM});const{priority:n}=e;if(n===W.LOW||0===this._queue.length)this._queue.push({command:e,resolve:t});else{const s=this._queue.findIndex(e=>e.command.priority<n),i=-1===s?this._queue.length:s;this._queue.splice(i,0,{command:e,resolve:t})}setTimeout(()=>{this._execute()},0)})}isDestroyed(){return this._isDestroyed}destroy(){this._isDestroyed||(this._logger.info(g.L_INVOKER_DESTROY_O),this._isDestroyed=!0,this._queue.forEach(e=>{e.resolve({code:this.abortCode})}),this._queue.length=0)}}class le extends he{constructor(e,t){super(e.logger,e,t,m.ROOM_HAS_BEEN_DESTROYED)}get store(){return this._store}}class Ie extends ee{constructor(e){super(),this._msgContent=e,this._userId=""}get kind(){return Z.RemoteUserCommand}get priority(){return W.NORMAL}execute(e){return I(this,void 0,void 0,function*(){const{users:t}=this._msgContent;if(0===t.length)return{code:m.SUCCESS};const{logger:n,store:s}=e,i=s.getRoomResource(),o=[],r=[];if(t.forEach(e=>{0===+e.state?(n.info(g.T,`user joined -> ${e.userId}`),i[e.userId]||o.push(e.userId),s.setResourcesByUserId(e.userId,[])):(n.info(g.T,`user left -> ${e.userId}`),r.push(e.userId))}),r.length){const t=[];r.forEach(e=>{t.push(...s.getRemoteStreamByUserId(e))}),t.length&&(yield new ne(t).execute(e)),r.forEach(e=>{s.deleteRemoteStreamByUserId(e),s.deleteResourceByUserId(e)})}return o.length&&e.emit(De.ON_USER_JOIN,o),r.length&&e.emit(De.ON_USER_LEAVE,r),{code:m.SUCCESS}})}}class me extends ee{constructor(e,t,n){super(),this._content=e,this._messageType=t,this._userId=n}get kind(){return Z.RemoteResourceCommand}get priority(){return W.NORMAL}_parseRemoteResource(e){const{uris:t}=this._content,n=[],s=[],i=[];let o;switch(this._messageType){case L.MODIFY:i.push(...t);break;case L.PUBLISH:n.push(...t);break;case L.UNPUBLISH:s.push(...t);break;case L.TOTAL_CONTENT_RESOURCE:o=O(e,t),n.push(...o.publishedList),s.push(...o.unpublishedList),i.push(...o.modifiedList)}return{publishedList:n,unpublishedList:s,modifiedList:i}}execute(e){return I(this,void 0,void 0,function*(){if(this._content.ignore)return{code:m.SUCCESS};const{store:t}=e,n=t.getResourceByUserId(this._userId),s=this._parseRemoteResource(n),{publishedList:i,unpublishedList:o,modifiedList:r}=s;return i.length&&(yield oe(e,i,this._userId)),o.length&&(yield re(e,o,this._userId)),r.length&&ue(e,r,this._userId),{code:m.SUCCESS}})}}var pe,Se,ge;!function(e){e[e.enable=1]="enable",e[e.disable=0]="disable"}(pe||(pe={}));class Ee extends ee{constructor(e,t){super(),this._mediaType=e,this._enable=t}get kind(){return Z.ChangeEnableCommand}execute(e){return I(this,void 0,void 0,function*(){const{logger:t,context:n,store:i}=e,o=i.getCrtUserId(),r=i.getResourceByUserId(o),u=r.filter(e=>e.mediaType===this._mediaType)[0];u.state=this._enable?pe.enable:pe.disable;const a=yield n.setRTCTotalRes(i.getRoomId(),[f(L.MODIFY,[u])],v(r),L.TOTAL_CONTENT_RESOURCE);return a!==s.SUCCESS?(t.warn(g.T,"notice `video.enabled` change failed -> code: "+a),{code:m.SIGNAL_ERROR}):(i.setResourcesByUserId(o,r),{code:m.SUCCESS})})}}class Te extends ee{constructor(){super(...arguments),this._coreContext=J()}get kind(){return Z.UnpubCommand}_sendTotalUris(e){return I(this,void 0,void 0,function*(){const{store:t}=e,n=t.getRoomResource()[t.getCrtUserId()];return{code:yield e.context.setRTCTotalRes(t.getRoomId(),[f(L.UNPUBLISH,n)],v([]),L.TOTAL_CONTENT_RESOURCE)}})}execute(e){return I(this,void 0,void 0,function*(){const{store:t,logger:n}=e;if(!t.getPublishParams())return n.warn(g.T,"You have not published resource, please execute the method of publish"),{code:m.SUCCESS};const{code:i}=yield this._sendTotalUris(e);if(i!==s.SUCCESS)return n.warn(g.T,`send publish streams notification failed: ${i}`),{code:m.SIGNAL_ERROR};const o=t.getSubscribedParams(),r=yield ae(t,e.service,o,!0);return r.code!==m.SUCCESS?(n.warn(g.T,`unpublish failed -> roomId: ${t.getRoomId()}, code: ${r.code}`),{code:r.code}):(n.info(g.T,"unpublish success"),e.emit(De.DEL_SEND_NET_STAT),t.setResourcesByUserId(t.getCrtUserId(),[]),t.setPublishParams(""),t.setIsPubVideo(!1),t.setIsPubAudio(!1),this._coreContext.dispatch("setPusherUrl",""),{code:m.SUCCESS})})}}!function(e){e.SUCCESS="Success",e.FAIL="Fail"}(Se||(Se={})),function(e){e[e.RTC=0]="RTC",e[e.LIVE=2]="LIVE",e[e.CROSS_MUTI=7]="CROSS_MUTI",e[e.SIP=4]="SIP",e[e.CALL=5]="CALL"}(ge||(ge={}));class Ce{constructor(e,t,n,s=5e3){this._context=e,this._roomId=t,this._logger=n,this._gap=s,this._latestTimestamp=Date.now(),this._started=!1,this._timer=null}start(e){this._started||(e<15e3&&(e=15e3),this._logger.info(g.L_PINGER_START_O,JSON.stringify({interval:this._gap,offlineKickTime:e})),this._started=!0,this._checkAlive(e))}_sendPing(e){return I(this,void 0,void 0,function*(){return new Promise(e=>{this._context.rtcPing(this._roomId,ge.RTC).then(e),setTimeout(e,5e3,s.TIMEOUT)})})}_checkAlive(e){var t,n;return I(this,void 0,void 0,function*(){const i=this._logger.createTraceId(),{code:o,data:r}=yield this._sendPing(i),u=Date.now();return o===s.SUCCESS?(this._latestTimestamp=u,null===(t=this.onPingResult)||void 0===t||t.call(this,Se.SUCCESS,r.version),void(this._timer=setTimeout(()=>this._checkAlive(e),this._gap))):(this._logger.warn(g.L_PINGER_SEND_RTCPING_R,`roomId: ${this._roomId}, code: ${o}`,i),null===(n=this.onPingResult)||void 0===n||n.call(this,Se.FAIL),40003===o||u-this._latestTimestamp>e?(this.stop(),void this.onFailed(40003===o)):void(this._timer=setTimeout(()=>this._checkAlive(e),500)))})}stop(){this._started&&(this._logger.info(g.L_PINGER_STOP_O),this._started=!1,this._timer&&(clearTimeout(this._timer),this._timer=null))}}class Oe extends ee{get kind(){return Z.ReconnectCommand}get priority(){return W.HIGH}execute(e){return I(this,void 0,void 0,function*(){const{context:t,store:n,logger:i}=e,{code:o,data:r}=yield t.joinRTCRoom(n.getRoomId(),n.mode);if(o!==s.SUCCESS)return i.warn(g.T,`__onReconnected getRTCRoomInfo failed: ${o}`),{code:m.SIGNAL_ERROR};i.info(g.T,`__onReconnected getRTCRoomInfo success: ${JSON.stringify(r)}`);const u=[],a={},c={},d={},_=T(r,i),R=n.getRoomResource(),h=Object.keys(_),l=Object.keys(R);for(let e=h.length-1;e>=0;e-=1){const t=h[e],n=l.indexOf(t);if(-1===n){u.push(t),a[t]=A(_[t]);continue}const s=R[t],i=_[t],{publishedList:o,modifiedList:r,unpublishedList:I}=O(s,i,!0);a[t]=A(o),c[t]=A(I),d[t]=A(r),l.splice(n,1)}n.setRoomResource(_),l.length&&e.emit(De.ON_USER_LEAVE,l),u.length&&e.emit(De.ON_USER_JOIN,u);for(const t in a){const n=a[t];n.length&&oe(e,n,t)}for(const t in c){const n=c[t];n.length&&re(e,n,t)}for(const t in d){const n=d[t];n.length&&ue(e,n,t)}return{code:m.SUCCESS}})}}class fe extends n{constructor(e,t,n,s,i){super(),this.logger=e,this.context=t,this.runtime=n,this.store=s,this.service=i}}class ve{constructor(e,t,n){this._appkey=e,this._crtRoomId=t,this._crtUserId=n,this._roomResource={},this._subscribeParams=[],this._roomIsDestroyed=!0,this._remoteStreams={},this._publishParams=null,this._crtRoomToken="",this._crtSeesionId="",this._isPubVideo=!1,this._isPubAudio=!1,this._pubMediaType=S.AUDIO_VIDEO,this._isOpenCamera=!1,this._isOpenMic=!1,this._roomStatusVersion=0,this._supportNtf=!0}getRoomResource(){return this._roomResource}getResourceByUserId(e){return this._roomResource[e]||[]}getUriByResourceId(e,t,n){return this._roomResource[e].filter(e=>e.tag===t&&e.mediaType===n)[0].uri}getPublishParams(){return this._publishParams}getSubscribedParams(){return this._subscribeParams}getSubscribeStreams(){const e={};return this._subscribeParams.forEach(t=>{const{stream:n}=t,s=n.getMsid();e[s]=n}),e}getRemoteStreams(){return this._remoteStreams}getRemoteStream(e){return this._remoteStreams[e]}getAllUserIds(){return Object.keys(this._roomResource)}getRemoteUserIds(e){return Object.keys(this._roomResource).filter(t=>t!==e)}getRemoteStreamByUserId(e){const t=[];for(const n in this._remoteStreams){const s=n.split("_")[0],i=this._remoteStreams[n];e===s&&t.push(i)}return t}getCrtRoomToken(){return this._crtRoomToken}getCrtSessionId(){return this._crtSeesionId}getRoomId(){return this._crtRoomId}get mode(){return ge.RTC}getIsPubVideo(){return this._isPubVideo}getIsPubAudio(){return this._isPubAudio}getPubMediaType(){return this._pubMediaType}getCrtUserId(){return this._crtUserId}getHttpHeaders(){return{"App-Key":this._appkey,UserId:this._crtUserId,Token:this._crtRoomToken,RoomId:this._crtRoomId,RoomType:ge.RTC}}getRoomStatusVersion(){return this._roomStatusVersion}getSupportNtf(){return this._supportNtf}}class Ae extends ve{setRoomResource(e){this._roomResource=e}assignRoomData(e){Object.assign(this._roomResource,e)}setResourcesByUserId(e,t){this._roomResource[e]=t}deleteResourceByUserId(e){delete this._roomResource[e]}updateResourceByUserId(e,t,n){n?this._roomResource[e][t]=n:this._roomResource[e].splice(t,1)}setPublishParams(e="",t=S.AUDIO_VIDEO){this._publishParams=e?{tag:e,mediaType:t}:null}setSubscribeParams(e){this._subscribeParams=e}addSubscribeParams(e){this._subscribeParams.push(...e)}deleteSubscribeParams(e){this._subscribeParams=this._subscribeParams.filter(t=>{const{stream:n}=t;return e.every(e=>e.getMsid()!==n.getMsid())})}setRemoteStream(e,t){this._remoteStreams[e]=t}deleteRemoteStreams(e){e.map(e=>e.getMsid()).forEach(e=>{delete this._remoteStreams[e]})}deleteRemoteStreamByUserId(e){for(const t in this._remoteStreams){e===t.split("_")[0]&&delete this._remoteStreams[t]}}setCrtRoomToken(e){this._crtRoomToken=e}setCrtSessionId(e){this._crtSeesionId=e}setIsPubVideo(e){this._isPubVideo=e}setIsPubAudio(e){this._isPubAudio=e}setPubMediaType(e){this._pubMediaType=e}setRoomStatusVersion(e){this._roomStatusVersion=N(e)}}class Ne extends ee{constructor(e){super(),this._joinType=e}get kind(){return Z.JoinRTCRoomCommand}_updateStore(e,t,n,s,i){e.setRoomResource(t);const o=e.getRemoteStreams();Object.keys(t).forEach(n=>{t[n].forEach(t=>{const{msid:s,mediaType:r,rtmpUri:u,state:a}=t,c=s.split("_").pop();let d=o[s];d?d.__innerSetMediaType(S.AUDIO_VIDEO):d=new X(i,n,c,r),r===S.AUDIO_ONLY?d.__innerSetOwnerMuteAudio(0===a):d.__innerSetOwnerDisableVideo(0===a),e.setRemoteStream(s,d)})}),e.setCrtRoomToken(n),e.setCrtSessionId(s)}_unPubPrevResource(e,t){return I(this,void 0,void 0,function*(){const{logger:n,context:i,store:o}=t;n.info(g.T,`unpublish uris prev login: ${JSON.stringify(e)}`);const r=yield i.setRTCTotalRes(o.getRoomId(),[f(L.UNPUBLISH,e)],v([]),L.TOTAL_CONTENT_RESOURCE,v([]));e.length=0,r!==s.SUCCESS?n.warn(g.T,`unpublish prev uris failed -> code: ${r}`):n.info(g.T,"unpublish uris prev login succeed")})}execute(e){return I(this,void 0,void 0,function*(){const{store:t,context:n,logger:a}=e,c=t.getRoomId(),d=t.getCrtUserId();if(!i("roomId",t.getRoomId(),o,!0))return{code:m.PARAMS_ERROR};if(n.getConnectionStatus()!==r.CONNECTED)return{code:m.SIGNAL_DISCONNECTED};a.info(g.T,`joinRoom -> roomId: ${c}; joinType: ${this._joinType||u.KICK}`);const _=t.getSupportNtf(),{code:R,data:h}=yield n.joinRTCRoom(c,ge.RTC,void 0,this._joinType,void 0,void 0,_);if(R!==s.SUCCESS){a.warn(g.T,`joinRoom failed -> code: ${R}`);return{code:R===p.JOIN_REFUSED?m.SIGNAL_JOIN_RTC_ROOM_REFUSED:R}}a.info(g.T,`joinRoom success -> userId: ${d}, roomId: ${c}, data: ${JSON.stringify(h)}`);const l=T(h,a),I=l[d]||[];return I.length&&(yield this._unPubPrevResource(I,e)),this._updateStore(t,l,h.token,h.sessionId,a),{code:m.SUCCESS}})}}var ye,Le;!function(e){e.PUBLISH="RCRTC:PublishResource",e.UNPUBLISH="RCRTC:UnpublishResource",e.MODIFY="RCRTC:ModifyResource",e.TOTAL_CONTENT_RESOURCE="RCRTC:TotalContentResources",e.STATE="RCRTC:state",e.ROOM_NOTIFY="RCRTC:RoomNtf",e.USER_NOTIFY="RCRTC:UserNtf",e.KICK="RCRTC:kick",e.PK_INVITE="RCRTC:invite",e.PK_INVITE_TIMEOUT="RCRTC:inviteTimeout",e.PK_CANCEL_INVITE="RCRTC:cancelInvite",e.PK_INVITE_ANSWER="RCRTC:answerInvite",e.PK_END="RCRTC:endInvite",e.OTHER_ROOM_OFFLINE="RCRTC:otherRoomOffline",e.ROOM_TASK_FINISH="RCRTC:roomTaskFinish"}(ye||(ye={})),function(e){e[e.JOIN=0]="JOIN",e[e.LEAVE=1]="LEAVE",e[e.OFFLINE=2]="OFFLINE",e[e.RESOURCECHANGE=3]="RESOURCECHANGE"}(Le||(Le={}));class Ue extends ee{constructor(e,t,n,s){super(),this._roomId=e,this._traceId=t,this._context=n,this._targetPullVersion=s}get kind(){return Z.PullRTCRoomStatusCommand}execute(e,t,n){return I(this,void 0,void 0,function*(){const{logger:n}=e,i=t.getRoomStatusVersion();if(n.info(g.T,JSON.stringify({roomId:this._roomId,localVersion:i}),this._traceId),this._targetPullVersion&&this._targetPullVersion<=i)return n.info(g.T,JSON.stringify({status:"success",msg:"the roomData has been pulled",localVersion:i,targetPullVersion:this._targetPullVersion}),this._traceId),{code:s.SUCCESS};const{code:o,data:r}=yield this._context.pullRTCRoomStatus(this._roomId,i);if(o!==s.SUCCESS)return n.info(g.T,JSON.stringify({status:"failed",code:o}),this._traceId),{code:o};const{bFullStatus:u,version:a,usersData:c,roomStatus:d}=r;if(n.info(g.T,JSON.stringify({bFullStatus:u,version:N(a),usersData:c,roomStatus:d}),this._traceId),t.setRoomStatusVersion(a),u){const{urisData:n,CDNUris:s}=function(e){const t={users:{}};let n="";return e.forEach(e=>{var s,i;const{userId:o,userData:r}=e;t.users[o]={};const u=null===(s=r.filter(e=>"uris"===e.key)[0])||void 0===s?void 0:s.value,a=null===(i=r.filter(e=>"cdn_uris"===e.key)[0])||void 0===i?void 0:i.value;n=a||n,t.users[o]={uris:u}}),{urisData:t,CDNUris:n&&JSON.stringify(JSON.parse(n)[0])}}(c);return yield ce(n,t,e,0,0,this._traceId),{code:o}}for(const n of d)if(n.event===Le.RESOURCECHANGE){const s=de(n);if(!s)continue;const{content:i,userId:o}=s;if(o===t.getCrtUserId())continue;yield new me(i,ye.TOTAL_CONTENT_RESOURCE,o).execute(e)}else{const t=_e(n);yield new Ie(t).execute(e)}return{code:o}})}}const De={LEAVE:"leave",DEL_RECV_NET_STAT:"delete_recv_net_status",DEL_SEND_NET_STAT:"delete_sender_net_status",ON_USER_JOIN:"on_user_join",ON_USER_LEAVE:"on_user_leave",ON_STREAM_PUBLISH:"on_stream_publish",ON_STREAM_UNPUBLISH:"on_stream_unpublish",ON_AUDIO_MUTE_CHANGE:"on_audio_mute_change",ON_VIDEO_MUTE_CHANGE:"on_video_mute_change",OPERATE_DEVICE_BY_MEDIA_TYPE:"OPERATE_DEVICE_BY_MEDIA_TYPE"};class be extends n{constructor(e,t,n,s,i){super(),this._context=e,this._logger=t,this._runtime=n,this._initOptions=s,this._roomId=i,this._isOpenCamera=!0,this._isOpenMic=!0,this._resourceListener=null,this._reportListener=null,this._netStatusData={};const o=e.getCurrentId(),r=new Ae(e.getAppkey(),i,o);this._mediaServer=new E(this._runtime,this._logger,this._initOptions.mediaServer,this._initOptions.timeout,r);const u=this._commandCtx=new fe(this._logger,this._context,this._runtime,r,this._mediaServer);this._invoker=new le(u,r),this._store=this._invoker.store,this._pinger=new Ce(e,i,t,s.pingGap),this._pinger.onFailed=this._kickOff.bind(this),this._pinger.onPingResult=this._handlePingResult.bind(this),J().setSoundMode($.SPEAKER),this._bindRoomEvent(),this._context.registerRTCSignalListener(e=>I(this,void 0,void 0,function*(){const{time:t,type:n,roomId:s}=this._context.decodeRtcNotify(e);if(this._invoker.isDestroyed())this._logger.info(g.T,JSON.stringify({isDestroyed:!0,type:n,time:t,roomId:s}));else if(2===n&&s===this._roomId){const e=this._logger.createTraceId();this._logger.info(g.T,null,e),this._startPullRTCRoomStatus(s,e,t)}}))}_startPullRTCRoomStatus(e,t,n){return I(this,void 0,void 0,function*(){yield this._invoker.push(new Ue(e,t,this._context,n))})}_handlePingResult(e,t){if(e===Se.SUCCESS){if(t>this._store.getRoomStatusVersion()&&this._store.getSupportNtf()){const e=this._logger.createTraceId();this._logger.info(g.T,JSON.stringify({dataVersion:t}),e),this._startPullRTCRoomStatus(this._roomId,e,t)}}}__innerInitialize(e){return I(this,void 0,void 0,function*(){const{code:t}=yield this._invoker.push(new Ne(e));return t===m.SUCCESS&&this._pinger.start(3e4),t})}_callAppListener(e,...t){var n;const s=null===(n=this._resourceListener)||void 0===n?void 0:n[e];if(this._logger.info(g.L_APP_CALLBACK_O,`method: ${e}`),s)try{s(...t)}catch(t){this._logger.error(g.L_APP_CALLBACK_E,`event: ${e}, error: ${null==t?void 0:t.stack}`)}else this._logger.warn(g.L_APP_CALLBACK_E,`No listener: ${e}`)}_bindRoomEvent(){this._commandCtx.on(De.DEL_RECV_NET_STAT,this._deleteReceiverNetStatus,this),this._commandCtx.on(De.DEL_SEND_NET_STAT,this._deleteSerderNetStatus,this),this._commandCtx.on(De.ON_STREAM_PUBLISH,this._onStreamPublish,this),this._commandCtx.on(De.ON_STREAM_UNPUBLISH,this._onStreamUnpublish,this),this._commandCtx.on(De.ON_AUDIO_MUTE_CHANGE,this._onAudioMuteChange,this),this._commandCtx.on(De.ON_VIDEO_MUTE_CHANGE,this._onVideoMuteChange,this),this._commandCtx.on(De.ON_USER_LEAVE,this._onUserLeave,this),this._commandCtx.on(De.ON_USER_JOIN,this._onUserJoin,this),this._commandCtx.on(De.OPERATE_DEVICE_BY_MEDIA_TYPE,this._operateDeviceByMediaType,this)}_operateDeviceByMediaType(e){switch(e){case S.AUDIO_VIDEO:this.openCamera(),this.openMicphone();break;case S.AUDIO_ONLY:this.openMicphone(),this.closeCamera();break;case S.VIDEO_ONLY:this.openCamera(),this.closeMicphone()}}_onStreamPublish(e){this._callAppListener("onStreamPublish",e)}_onStreamUnpublish(e){this._callAppListener("onStreamUnpublish",e)}_onAudioMuteChange(e){this._callAppListener("onAudioMuteChange",e)}_onVideoMuteChange(e){this._callAppListener("onVideoMuteChange",e)}_onUserJoin(e){this._callAppListener("onUserJoin",e)}_onUserLeave(e){this._callAppListener("onUserLeave",e)}_kickOff(e,t){return I(this,void 0,void 0,function*(){const n=this._store.getCrtUserId();let s;if(t){const e=t.users.find(e=>e.userId===n);s=null==e?void 0:e.type}this._callAppListener("onKickOff",e,s),this.__leaveHandle(!e)})}__parseInnerMessage(e){const{targetId:t}=e;if(t!==this._store.getRoomId())return;if(this.isDestroyed())return;this._logger.info(g.T,`recv inner msg -> message: ${JSON.stringify(e)} | roomid: ${this._store.getRoomId()}`);const n=e.content;switch(e.messageType){case L.KICK:this._kickOff(!0,n);break;case L.STATE:this._invoker.push(new Ie(n));break;case L.MODIFY:case L.PUBLISH:case L.UNPUBLISH:if(n.ignore)return;this._invoker.push(new me(n,e.messageType,e.senderUserId));break;case L.TOTAL_CONTENT_RESOURCE:this._invoker.push(new me(n,e.messageType,e.senderUserId));break;case L.ROOM_NOTIFY:this._callAppListener("onRoomAttributeChange",e.messageType,e.content);break;case L.USER_NOTIFY:this._logger.warn(g.T,`TODO: ${L.USER_NOTIFY}`);break;default:this._callAppListener("onMessageReceive",e.messageType,e.content,e.senderUserId,e.messageUId)}}registerRoomEventListener(e){this._resourceListener=e}registerReportListener(e){this._reportListener=e;const t=H(),n=e?this._pusherNetStatusListener.bind(this):null;t.setNetStatusListener(n);const s=j(),i=e?this._playerNetStatusListener.bind(this):null;s.setNetStatusListener(i)}_pusherNetStatusListener(e){this._netStatusData.sender=e,this._reportListener&&this._reportListener(this._netStatusData)}_playerNetStatusListener(e,t){this._netStatusData.receiver=this._netStatusData.receiver||{},this._netStatusData.receiver[e]=t,this._reportListener&&this._reportListener(this._netStatusData)}onLocalAudioLevelChange(e){H().setLocalAudioLevelListener(e)}onRemoteAudioLevelChange(e){j().setRemoteAudioLevelListener(e)}startPreview(){const e=J();e.dispatch("showComponent"),e.dispatch("startPreview")}stopPreview(){const e=J();e.dispatch("showComponent"),e.dispatch("stopPreview")}openCamera(){return I(this,void 0,void 0,function*(){return this._isOpenCamera?{code:m.SUCCESS}:(y(S.VIDEO_ONLY,!0,J()),this._isOpenCamera=!0,this._store.getIsPubVideo()?this._invoker.push(new Ee(S.VIDEO_ONLY,!0)):{code:m.SUCCESS})})}closeCamera(){return I(this,void 0,void 0,function*(){return this._isOpenCamera?(y(S.VIDEO_ONLY,!1,J()),this._isOpenCamera=!1,this._store.getIsPubVideo()?this._invoker.push(new Ee(S.VIDEO_ONLY,!1)):{code:m.SUCCESS}):{code:m.SUCCESS}})}switchCamera(){J().dispatch("switchCamera")}openMicphone(){return I(this,void 0,void 0,function*(){return this._isOpenMic?{code:m.SUCCESS}:(y(S.AUDIO_ONLY,!0,J()),this._isOpenMic=!0,this._store.getIsPubAudio()?this._invoker.push(new Ee(S.AUDIO_ONLY,!0)):{code:m.SUCCESS})})}closeMicphone(){return I(this,void 0,void 0,function*(){return this._isOpenMic?(y(S.AUDIO_ONLY,!1,J()),this._isOpenMic=!1,this._store.getIsPubAudio()?this._invoker.push(new Ee(S.AUDIO_ONLY,!1)):{code:m.SUCCESS}):{code:m.SUCCESS}})}publishStream(e="RongCloudRTC",t=S.AUDIO_VIDEO){return I(this,void 0,void 0,function*(){return this._invoker.push(new Re(e,t,this))})}unpublishStream(){return I(this,void 0,void 0,function*(){return this._invoker.push(new Te)})}subscribe(e){return I(this,void 0,void 0,function*(){return this._invoker.push(new te(e))})}unsubscribe(e){return I(this,void 0,void 0,function*(){return this._invoker.push(new ne(e))})}_deleteReceiverNetStatus(e){e.map(e=>e.getMsid()).forEach(e=>{this._netStatusData.receiver&&delete this._netStatusData.receiver[e]})}_deleteSerderNetStatus(){delete this._netStatusData.sender}__onReconnected(){this._invoker.push(new Oe)}__leaveHandle(e){return I(this,void 0,void 0,function*(){this.isDestroyed()||(this.emit(De.LEAVE),this._invoker.destroy(),this._pinger.stop(),e&&(yield this._context.quitRTCRoom(this._roomId)),yield this._mediaServer.exit(),this.registerReportListener(null),this.onLocalAudioLevelChange(null),this.onRemoteAudioLevelChange(null),this._resourceListener=null,this._netStatusData=null)})}isCameraOpen(){return this._isOpenCamera}isMicphoneOpen(){return this._isOpenMic}isDestroyed(){return this._invoker.isDestroyed()}getRoomId(){return this._store.getRoomId()}getSessionId(){return this._store.getCrtSessionId()}getCrtUserId(){return this._context.getCurrentId()}getRemoteUserIds(){const e=this._context.getCurrentId();return this._store.getRemoteUserIds(e)}getRemoteStreams(){return Object.values(this._store.getRemoteStreams())}getRemoteStreamsByUserId(e){return this._store.getRemoteStreamByUserId(e)}sendMessage(e,t){return I(this,void 0,void 0,function*(){const{code:n}=yield this._context.sendMessage(a.RTC_ROOM,this._store.getRoomId(),{messageType:e,content:t,isStatusMessage:!0});return n!==s.SUCCESS?(this._logger.warn(g.A_SEND_MSG_R,`send message failed -> code: ${n}`),{code:m.SIGNAL_ERROR}):{code:m.SUCCESS}})}setRoomAttribute(e,t,n,i=!1){return I(this,void 0,void 0,function*(){const o=yield this._context.setRTCData(this._store.getRoomId(),e,t,i,c.ROOM,n);return o!==s.SUCCESS?(this._logger.warn(g.A_SET_ROOM_ATTRS_R,`SetRoomAttributeValue Failed: ${o}`),{code:m.SIGNAL_ERROR}):{code:m.SUCCESS}})}deleteRoomAttributes(e,t,n=!1){return I(this,void 0,void 0,function*(){const i=yield this._context.removeRTCData(this._store.getRoomId(),e,n,c.ROOM,t);return i!==s.SUCCESS?(this._logger.warn(g.A_DEL_ROOM_ATTRS_R,`DeleteRoomAttribute Failed: ${i}`),{code:m.SIGNAL_ERROR}):{code:m.SUCCESS}})}getRoomAttributes(e=[],t=!1){return I(this,void 0,void 0,function*(){const{code:n,data:i}=yield this._context.getRTCData(this._store.getRoomId(),e,t,c.ROOM);return n!==s.SUCCESS?(this._logger.warn(g.A_GET_ROOM_ATTRS_R,`GetRoomAttributes Failed: ${n}`),{code:m.SIGNAL_ERROR}):{code:m.SUCCESS,data:i}})}setAudioOutputDevice(e){J().setSoundMode(e)}getAudioOutputDevice(){return J().getSoundMode()}}class Pe{constructor(e,t,n,s){this._context=e,this._logger=t,this._runtime=n,this._options=s,this._crtRoom=null,this._context.registerConnectionStateChangeListener(this._onIMStatusChange.bind(this)),this._context.registerDestroyListener(this._onIMUninit.bind(this)),this._context.registerMessageListener(this._handleMessage.bind(this))}_onIMStatusChange(e){this._logger.info(g.T,`signal server connection state change: ${e}`),e===r.CONNECTED&&this._crtRoom&&this._crtRoom.__onReconnected()}_onIMDisconnect(){this._logger.info(g.T,"IM disconnect")}_onIMUninit(){this._logger.info(g.T,"TODO -> on IM client ondestroy")}_handleMessage(e){var t;return e.conversationType===a.RTC_ROOM&&(null===(t=this._crtRoom)||void 0===t||t.__parseInnerMessage(e),!0)}joinRTCRoom(e,t,n){return I(this,void 0,void 0,function*(){if(this._logger.info(g.T,`join room -> ${e}`),this._crtRoom)return this._logger.warn(g.T,"Repeat join!"),{code:m.REPERT_JOIN_ROOM};const t=this._crtRoom=new be(this._context,this._logger,this._runtime,this._options,e),s=yield t.__innerInitialize(n);return s!==m.SUCCESS?(this._logger.warn(g.T,`join room failed: ${s}`),this._crtRoom=null,{code:s}):(this._logger.info(g.T,`join room success: ${e}`),t.once(De.LEAVE,()=>{this._crtRoom=null}),{code:s,data:{room:t,userIds:t.getRemoteUserIds(),streams:t.getRemoteStreams()}})})}leaveRoom(e){return I(this,void 0,void 0,function*(){this._crtRoom===e&&(this._crtRoom.removeAll(De.LEAVE),this._crtRoom=null),yield e.__leaveHandle(!0)})}}var Me;!function(e){e[e.SERVER_KICK=1]="SERVER_KICK",e[e.OTHER_KICK=2]="OTHER_KICK"}(Me||(Me={}));const Ve="rtcRJoin_data",ke="rtcRExit",we="rtcRInfo",xe="rtcUDel",$e="rtcSetData",Be="userSetData",Ke="rtcQryData",qe="rtcDelData",Fe="rtcToken",Ye="rtcUserState",Ge="rtcUList",Je="rtcQueryJoined",He="rtcPullRoomStatus",je="reportsdk",Qe="rtcPing";var Xe;!function(e){e.RtcInput="RtcInput",e.RtcOutput="RtcOutput",e.RtcUserListOutput="RtcUserListOutput",e.SetUserStatusInput="SetUserStatusInput",e.RtcSetDataInput="RtcSetDataInput",e.RtcUserSetDataInput="RtcUserSetDataInput",e.RtcDataInput="RtcDataInput",e.RtcSetOutDataInput="RtcSetOutDataInput",e.MCFollowInput="MCFollowInput",e.RtcTokenOutput="RtcTokenOutput",e.RtcQryOutput="RtcQryOutput",e.RtcQryUserOutDataInput="RtcQryUserOutDataInput",e.RtcUserOutDataOutput="RtcUserOutDataOutput",e.RtcQueryListInput="RtcQueryListInput",e.RtcRoomInfoOutput="RtcRoomInfoOutput",e.RtcValueInfo="RtcValueInfo",e.RtcKeyDeleteInput="RtcKeyDeleteInput",e.RtcNotifyMsg="RtcNotifyMsg",e.RtcPullKV="RtcPullKV",e.RtcKVOutput="RtcKVOutput",e.RtcQueryUserJoinedInput="RtcQueryUserJoinedInput",e.RtcQueryUserJoinedOutput="RtcQueryUserJoinedOutput",e.RtcViewerJoinedOutput="RtcViewerJoinedOutput",e.RtcInviteInput="RtcInviteInput",e.RtcCancelInviteInput="RtcCancelInviteInput",e.RtcInviteAnswerInput="RtcInviteAnswerInput",e.RtcEndInviteInput="RtcEndInviteInput",e.RtcRoomStatusInput="RtcRoomStatusInput",e.RtcRoomStatusOutput="RtcRoomStatusOutput",e.RtcReportSDKInput="RtcReportSDKInput",e.RtcPBPolaris="RCRTCPBPolaris",e.RtcPBR1Info="RCRTCPBR1Info",e.RtcPBR2Info="RCRTCPBR2Info",e.RtcPBR3Info="RCRTCPBR3Info",e.RtcPBR4Info="RCRTCPBR4Info",e.RtcPBStatusInfo="RCRTCPBStatusInfo",e.RtcPBStreamInfo="RCRTCPBStreamInfo"}(Xe||(Xe={}));const We={[Xe.RtcInput]:["roomType","broadcastType","extraInnerData","needSysChatroom","identityChangeType","joinType","innerDatas","outerDatas","supportNtf"],[Xe.RtcOutput]:["version"],[Xe.RtcUserListOutput]:["users","token","sessionId","roomInfo","version"],[Xe.SetUserStatusInput]:["status"],[Xe.RtcSetDataInput]:["interior","target","key","value","objectName","content"],[Xe.RtcUserSetDataInput]:["valueInfo","objectName","content"],[Xe.RtcDataInput]:["interior","target","key","objectName","content"],[Xe.RtcSetOutDataInput]:["target","valueInfo","objectName","content"],[Xe.MCFollowInput]:["state"],[Xe.RtcTokenOutput]:["rtcToken"],[Xe.RtcQryOutput]:["outInfo"],[Xe.RtcQryUserOutDataInput]:["userId"],[Xe.RtcUserOutDataOutput]:["user"],[Xe.RtcQueryListInput]:["order"],[Xe.RtcRoomInfoOutput]:["roomId","roomData","userCount","list"],[Xe.RtcValueInfo]:["key","value"],[Xe.RtcKeyDeleteInput]:["key"],[Xe.RtcNotifyMsg]:["type","time","roomId"],[Xe.RtcPullKV]:["timestamp","roomId"],[Xe.RtcKVOutput]:["entries","bFullUpdate","syncTime"],[Xe.RtcQueryUserJoinedInput]:["userId"],[Xe.RtcQueryUserJoinedOutput]:["info"],[Xe.RtcInviteInput]:["invitedUserId","timeoutTime","invitedRoomId","inviteInfo","inviteSessionId"],[Xe.RtcCancelInviteInput]:["invitedUserId","invitedRoomId","inviteInfo","inviteSessionId"],[Xe.RtcInviteAnswerInput]:["inviteUserId","answerCode","inviteRoomId","inviteSessionId","content","key","value"],[Xe.RtcEndInviteInput]:["inviteRoomId","inviteSessionId","inviteContent","inviteRoomKeys"],[Xe.RtcRoomStatusInput]:["version"],[Xe.RtcRoomStatusOutput]:["bFullStatus","version","usersData","roomStatus"],[Xe.RtcReportSDKInput]:["sdkInfo"],[Xe.RtcPBPolaris]:["type","appKey","sessionId","roomId","roomCreateTime","userId","userRole","joinTime","signalDataCenter","r1Info","r2Info","r3Info","r4Info"],[Xe.RtcPBR1Info]:["joinTime","rtcVersion","imVersion","platform","device","os","browserName","browserVersion"],[Xe.RtcPBR2Info]:["joinTime","sendTime","rtcActionType","rtcActionStatus","trackId"],[Xe.RtcPBR3Info]:["info"],[Xe.RtcPBR4Info]:["info"],[Xe.RtcPBStatusInfo]:["joinTime","receiveTime","to