var N=Object.defineProperty,G=Object.defineProperties,M=Object.getOwnPropertyDescriptor,H=Object.getOwnPropertyDescriptors;var h=Object.getOwnPropertySymbols;var F=Object.prototype.hasOwnProperty,K=Object.prototype.propertyIsEnumerable;var O=(s,e,r)=>e in s?N(s,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):s[e]=r,E=(s,e)=>{for(var r in e||(e={}))F.call(e,r)&&O(s,r,e[r]);if(h)for(var r of h(e))K.call(e,r)&&O(s,r,e[r]);return s},A=(s,e)=>G(s,H(e));var _=(s,e,r,o)=>{for(var t=o>1?void 0:o?M(e,r):e,a=s.length-1,n;a>=0;a--)(n=s[a])&&(t=(o?n(e,r,t):n(t))||t);return o&&t&&N(e,r,t),t};var b=(s,e,r)=>(O(s,typeof e!="symbol"?e+"":e,r),r);var P={properties:{roomId:{type:"number"},strRoomId:{type:"string"}}},I={name:"option",required:!0,properties:A(E({},P.properties),{userId:{type:"string"}})},L={name:"option",required:!0,properties:{updateList:{type:"array",required:!0,arrayItem:{required:!0,type:"object",properties:A(E({},I.properties),{userId:{required:!1,type:"string"},muteAudio:{type:"boolean"},muteVideo:{type:"boolean"},muteSubStream:{type:"boolean"}})}}}},k={name:"option",properties:E({},P.properties)};var p=s=>typeof s=="function";var W=0,j=1,V=2;function q({retryFunction:s,settings:e,onError:r,onRetrying:o,onRetryFailed:t,onRetrySuccess:a,context:n}){return function(...d){let{retries:m=5,timeout:u=1e3}=e,i=0,l=-1,c=W,R=async(C,y)=>{let w=n||this;try{let g=await s.apply(w,d);i>0&&a&&a.call(this,i),i=0,C(g)}catch(g){let U=()=>{clearTimeout(l),i=0,c=V,y(g)},x=()=>{c!==V&&i<(p(m)?m():m)?(i++,c=j,p(o)&&o.call(this,i,U),l=window.setTimeout(()=>{l=-1,R(C,y)},p(u)?u(i):u)):(U(),p(t)&&t.call(this,g))};p(r)?r.call(this,{error:g,retry:x,reject:y,retryFuncArgs:d,retriedCount:i}):x()}};return new Promise(R)}}var B=q;var T=new WeakMap;function D({settings:s={retries:5,timeout:2e3},onError:e,onRetrying:r,onRetryFailed:o}){return function(t,a,n){let d=B({retryFunction:n.value,settings:s,onError({error:m,retry:u,reject:i,retryFuncArgs:l}){var c;e?e.call(this,m,()=>{var R;(R=T.get(t))!=null&&R.has(a)?u():i(m)},i,l):(c=T.get(t))!=null&&c.has(a)?u():i(m)},onRetrying(m,u){var i;p(r)&&r.call(this,m,u),(i=T.get(t))!=null&&i.has(a)&&(T.get(t).get(a).stopRetry=u)},onRetryFailed:o});return n.value=function(...m){let u=T.get(t);return u?u.set(a,{args:m}):T.set(t,new Map([[a,{args:m}]])),d.apply(this,m).finally(()=>{var i;return(i=T.get(t))==null?void 0:i.delete(a)})},n}}var S=class S{constructor(e){this.core=e;b(this,"disableRandomCall",!0);b(this,"connectedRoomIdSet",new Set);b(this,"updateSeq",0);b(this,"_log");this._log=this.core.log.createChild({id:`${this.getAlias()}`})}getName(){return S.Name}getAlias(){return"crs-r"}getGroup(e){var o;let r=(e==null?void 0:e.userId)||((o=e==null?void 0:e.updateList)==null?void 0:o[0].userId)||"";return r||(e?e.updateList?String(e.updateList[0].roomId)||e.updateList[0].strRoomId||"":String(e.roomId)||e.strRoomId||"":"*")}getValidateRule(e){switch(e){case"start":return I;case"update":return L;case"stop":return k}}async start({roomId:e,strRoomId:r,userId:o}){let{RtcError:t,ErrorCode:a}=this.core.errorModule;if(!this.core.room.sendSignalMessage)throw new t({code:a.ENV_NOT_SUPPORTED});let n=e||r,d=await this.core.room.sendSignalMessage({command:"connect_other_room",responseCommand:String(8209),data:{roomId:n,userId:o,localRoomId:o?void 0:this.core.room.roomId},retries:3});if(d.data.code!==0)throw new t({code:a.SERVER_ERROR,extraCode:d.data.code,message:d.data.message});o||this.connectedRoomIdSet.add(n)}async update({updateList:e}){var n;let{RtcError:r,ErrorCode:o}=this.core.errorModule;if(!this.core.room.sendSignalMessage)throw new r({code:o.ENV_NOT_SUPPORTED});let t=e.find(d=>d.userId)?0:1,a=await this.core.room.sendSignalMessage({command:"update_other_room_forward_mode",responseCommand:String(8213),data:{seq:++this.updateSeq,operationType:t,updateList:e.map(({roomId:d,strRoomId:m,userId:u,muteAudio:i,muteVideo:l,muteSubStream:c})=>({roomId:d||m,userId:u,muteAudio:i,muteVideo:l,muteSubStream:c}))},retries:3});if(a.data.data.expectSeq)return this.updateSeq=a.data.data.expectSeq,this.update({updateList:e});if(a.data.code!==0)throw new r({code:o.SERVER_ERROR,extraCode:a.data.code,message:a.data.message});if(((n=a.data.data.errorList)==null?void 0:n.length)>0)throw new r({code:o.UNKNOWN_ERROR,message:a.data.data.errorList[0].message})}async stop({roomId:e,strRoomId:r}={}){let o=e||r;if(o)await this.doStop(o);else if(this.connectedRoomIdSet.size>0)for(let t of[...this.connectedRoomIdSet.values()])await this.doStop(t);else await this.doStop()}async doStop(e){let{RtcError:r,ErrorCode:o}=this.core.errorModule;if(!this.core.room.sendSignalMessage)throw new r({code:o.ENV_NOT_SUPPORTED});let t=await this.core.room.sendSignalMessage({command:"disconnect_other_room",responseCommand:String(8211),data:{roomId:e,localRoomId:this.core.room.roomId},retries:3});if(t.data.code!==0)throw new r({code:o.SERVER_ERROR,extraCode:t.data.code,message:t.data.message});this.connectedRoomIdSet.delete(e)}destroy(){}};b(S,"Name","CrossRoom"),_([D({settings:{retries:3,timeout:1e3},onRetrying(s){this._log.warn(`retry start: ${s}`)}})],S.prototype,"start",1),_([D({settings:{retries:3,timeout:1e3},onRetrying(s){this._log.warn(`retry update: ${s}`)}})],S.prototype,"update",1);var f=S;var ne=f;export{f as CrossRoom,ne as default};