From 21c4c037d4075d36e000b740405fe08ab3228849 Mon Sep 17 00:00:00 2001 From: Yuan <294065614@qq.com> Date: Thu, 4 Jul 2024 21:22:42 +0800 Subject: [PATCH 01/12] 1 --- sdk/src/AppController.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sdk/src/AppController.js b/sdk/src/AppController.js index 9c130bd..ed3f8ee 100644 --- a/sdk/src/AppController.js +++ b/sdk/src/AppController.js @@ -354,7 +354,7 @@ class AppController { initPlyerAndStart() { this.initPlayer(); if (this.player) { - if (this.options.keycodeInput || this.isMobile) { + if (this.options.keycodeInput || this.options.isMobile) { this.keyboardListener = new KeyboardListener(this.options.containerId, this.send); } else { this.keyboardInput = new KeyboardInput(this.options.containerId, this.send, this.options.isMobile); @@ -370,7 +370,7 @@ class AppController { containerId: this.options.containerId, }); this.touchHandler.start(); - if (this.options.keycodeInput || this.isMobile) { + if (this.options.keycodeInput || this.options.isMobile) { this.keyboardListener.start(this.touchHandler); } else { this.keyboardInput.getTouchHandler(this.touchHandler); -- Gitee From dbd12f24116ae8c117a090e4c990aa31f7325e85 Mon Sep 17 00:00:00 2001 From: Yuan <294065614@qq.com> Date: Thu, 4 Jul 2024 21:35:47 +0800 Subject: [PATCH 02/12] 1 --- sdk/src/AppController.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/sdk/src/AppController.js b/sdk/src/AppController.js index ed3f8ee..2cc69ee 100644 --- a/sdk/src/AppController.js +++ b/sdk/src/AppController.js @@ -111,6 +111,7 @@ class AppController { this.util = new Util(); this.render = true; this.player = null; + this.currentVisible = 'visibility'; this.playerContainerId = undefined; this.videoEleId = 'phoenixVideo'; this.canvasEleId = 'phoenixCanvas'; @@ -1320,18 +1321,20 @@ class AppController { } this.handleVisibilityChange = () => { - if (document[hidden]) { + if (document[hidden] && this.currentVisible == 'visibility') { // 页面隐藏后停止发送心跳 Logger.debug('Page hidden, pause'); // 页面隐藏后虚拟设备停止发送数据 this.pauseDeviceHardware(); this.pauseCloudPhone(); - } else if (this.wsState === WEBSOCKET_READY_STATE.OPEN) { + this.currentVisible = 'hidden' + } else if (this.wsState === WEBSOCKET_READY_STATE.OPEN && this.currentVisible == 'hidden') { Logger.debug('Page visibility, resume'); // 恢复虚拟设备发送数据 this.resumeDeviceHardware(); this.resumeCloudPhone(); this.checkAndRecoverSocket('visibilityChange'); + this.currentVisible = 'visibility' } }; -- Gitee From cc67b615cd26f2600cbac5e1b959ee736b093667 Mon Sep 17 00:00:00 2001 From: Yuan <294065614@qq.com> Date: Thu, 11 Jul 2024 09:41:36 +0800 Subject: [PATCH 03/12] 1 --- sdk/demo/demo.html | 3 +- sdk/enter.html | 31 - sdk/package.json | 1 + .../3rd/video-codec-lib/libffmpeg_264_265.js | 1 - .../video-codec-lib/libffmpeg_264_265.wasm | Bin 2061766 -> 0 bytes sdk/src/AppController.js | 6 - sdk/src/CanvasPlayer.js | 130 +- sdk/src/CloudApp.js | 4 - sdk/src/codec/Decode.js | 113 -- sdk/src/rtc/MessageHandler.js | 253 --- sdk/src/rtc/RTCChannel.js | 721 ------- sdk/src/rtc/RTCCloudApp.js | 67 - sdk/src/rtc/TouchController.js | 276 --- sdk/src/rtc/grs.js | 695 ------- sdk/src/rtc/sdk/hrtc.d.ts | 1794 ----------------- sdk/src/rtc/sdk/hrtc.js | 18 - sdk/src/worker/H264NALDecoderWorker.js | 2 + sdk/src/worker/VideoDecoder.js | 33 - 18 files changed, 46 insertions(+), 4102 deletions(-) delete mode 100644 sdk/src/3rd/video-codec-lib/libffmpeg_264_265.js delete mode 100644 sdk/src/3rd/video-codec-lib/libffmpeg_264_265.wasm delete mode 100644 sdk/src/codec/Decode.js delete mode 100644 sdk/src/rtc/MessageHandler.js delete mode 100644 sdk/src/rtc/RTCChannel.js delete mode 100644 sdk/src/rtc/RTCCloudApp.js delete mode 100644 sdk/src/rtc/TouchController.js delete mode 100644 sdk/src/rtc/grs.js delete mode 100644 sdk/src/rtc/sdk/hrtc.d.ts delete mode 100644 sdk/src/rtc/sdk/hrtc.js create mode 100644 sdk/src/worker/H264NALDecoderWorker.js delete mode 100644 sdk/src/worker/VideoDecoder.js diff --git a/sdk/demo/demo.html b/sdk/demo/demo.html index 8aaaf45..5f5a492 100644 --- a/sdk/demo/demo.html +++ b/sdk/demo/demo.html @@ -580,7 +580,8 @@ Copyright 2022 Huawei Cloud Computing Technology Co., Ltd. ...cloudPhoneParams, channelType: channelType, ticket: '256random'.padStart(256, '0'), - aes_key: '11111111111111111111111111111111', + aes_key: '38cd1479423e42369f099661d3f61ee6', + // aes_key: '18718724bdab49658868d43a9c3b13db', // 10706 auth_ts: 'test_auth_ts', _debug: true, auto_rotate: true, diff --git a/sdk/enter.html b/sdk/enter.html index 058a76f..acd4f8f 100644 --- a/sdk/enter.html +++ b/sdk/enter.html @@ -173,10 +173,6 @@
WebSocket
-
-
- WebRtc -
@@ -195,33 +191,6 @@
-
-
-
- - -
-
- - -
-
- - -
-
- - -
-
- -
-
-
diff --git a/sdk/package.json b/sdk/package.json index e4b01bd..56362d7 100644 --- a/sdk/package.json +++ b/sdk/package.json @@ -19,6 +19,7 @@ "crypto-js": "4.1.1", "gl-matrix": "^3.4.3", "jmuxer": "1.2.0", + "tinyh264": "^0.0.7", "webworkify-webpack": "2.1.5" }, "devDependencies": { diff --git a/sdk/src/3rd/video-codec-lib/libffmpeg_264_265.js b/sdk/src/3rd/video-codec-lib/libffmpeg_264_265.js deleted file mode 100644 index 29628c1..0000000 --- a/sdk/src/3rd/video-codec-lib/libffmpeg_264_265.js +++ /dev/null @@ -1 +0,0 @@ -var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var arguments_=[];var thisProgram="./this.program";var quit_=function(status,toThrow){throw toThrow};var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_HAS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_HAS_NODE=typeof process==="object"&&typeof process.versions==="object"&&typeof process.versions.node==="string";ENVIRONMENT_IS_NODE=ENVIRONMENT_HAS_NODE&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;if(ENVIRONMENT_IS_NODE){scriptDirectory=__dirname+"/";var nodeFS;var nodePath;read_=function shell_read(filename,binary){var ret;if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename);return binary?ret:ret.toString()};readBinary=function readBinary(filename){var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){thisProgram=process["argv"][1].replace(/\\/g,"/")}arguments_=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);quit_=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){read_=function shell_read(f){return read(f)}}readBinary=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){arguments_=scriptArgs}else if(typeof arguments!="undefined"){arguments_=arguments}if(typeof quit==="function"){quit_=function(status){quit(status)}}if(typeof print!=="undefined"){if(typeof console==="undefined")console={};console.log=print;console.warn=console.error=typeof printErr!=="undefined"?printErr:print}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}read_=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};setWindowTitle=function(title){document.title=title}}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var STACK_ALIGN=16;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end>_emscripten_get_heap_size()){abort()}HEAP32[DYNAMICTOP_PTR>>2]=end;return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){}};var jsCallStartIndex=1;var functionPointers=new Array(14);function convertJsFunctionToWasm(func,sig){var typeSection=[1,0,1,96];var sigRet=sig.slice(0,1);var sigParam=sig.slice(1);var typeCodes={"i":127,"j":126,"f":125,"d":124};typeSection.push(sigParam.length);for(var i=0;i>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function getCFunc(ident){var func=Module["_"+ident];assert(func,"Cannot call unknown function "+ident+", make sure it is exported");return func}function ccall(ident,returnType,argTypes,args,opts){var toC={"string":function(str){var ret=0;if(str!==null&&str!==undefined&&str!==0){var len=(str.length<<2)+1;ret=stackAlloc(len);stringToUTF8(str,ret,len)}return ret},"array":function(arr){var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}};function convertReturnValue(ret){if(returnType==="string")return UTF8ToString(ret);if(returnType==="boolean")return Boolean(ret);return ret}var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8(str){var size=lengthBytesUTF8(str)+1;var ret=_malloc(size);if(ret)stringToUTF8Array(str,HEAP8,ret,size);return ret}function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}var PAGE_SIZE=16384;var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module["HEAP8"]=HEAP8=new Int8Array(buf);Module["HEAP16"]=HEAP16=new Int16Array(buf);Module["HEAP32"]=HEAP32=new Int32Array(buf);Module["HEAPU8"]=HEAPU8=new Uint8Array(buf);Module["HEAPU16"]=HEAPU16=new Uint16Array(buf);Module["HEAPU32"]=HEAPU32=new Uint32Array(buf);Module["HEAPF32"]=HEAPF32=new Float32Array(buf);Module["HEAPF64"]=HEAPF64=new Float64Array(buf)}var STACK_BASE=238208,DYNAMIC_BASE=5481088,DYNAMICTOP_PTR=238176;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||67108864;if(Module["wasmMemory"]){wasmMemory=Module["wasmMemory"]}else{wasmMemory=new WebAssembly.Memory({"initial":INITIAL_TOTAL_MEMORY/WASM_PAGE_SIZE,"maximum":INITIAL_TOTAL_MEMORY/WASM_PAGE_SIZE})}if(wasmMemory){buffer=wasmMemory.buffer}INITIAL_TOTAL_MEMORY=buffer.byteLength;updateGlobalBufferAndViews(buffer);HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var Math_trunc=Math.trunc;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="libffmpeg_264_265.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"wasi_unstable":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})})}else{return instantiateArrayBuffer(receiveInstantiatedSource)}}if(Module["instantiateWasm"]){try{var exports=Module["instantiateWasm"](info,receiveInstance);return exports}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}instantiateAsync();return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":2704,"maximum":2704,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};var tempDouble;var tempI64;__ATINIT__.push({func:function(){___emscripten_environ_constructor()}});var tempDoublePtr=238192;function demangle(func){return func}function demangleAll(text){var regex=/\b__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var ENV={};function ___buildEnvironment(environ){var MAX_ENV_VALUES=64;var TOTAL_ENV_SIZE=1024;var poolPtr;var envPtr;if(!___buildEnvironment.called){___buildEnvironment.called=true;ENV["USER"]=ENV["LOGNAME"]="web_user";ENV["PATH"]="/";ENV["PWD"]="/";ENV["HOME"]="/home/web_user";ENV["LANG"]=(typeof navigator==="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8";ENV["_"]=thisProgram;poolPtr=getMemory(TOTAL_ENV_SIZE);envPtr=getMemory(MAX_ENV_VALUES*4);HEAP32[envPtr>>2]=poolPtr;HEAP32[environ>>2]=envPtr}else{envPtr=HEAP32[environ>>2];poolPtr=HEAP32[envPtr>>2]}var strings=[];var totalSize=0;for(var key in ENV){if(typeof ENV[key]==="string"){var line=key+"="+ENV[key];strings.push(line);totalSize+=line.length}}if(totalSize>TOTAL_ENV_SIZE){throw new Error("Environment size exceeded TOTAL_ENV_SIZE!")}var ptrSize=4;for(var i=0;i>2]=poolPtr;poolPtr+=line.length+1}HEAP32[envPtr+strings.length*ptrSize>>2]=0}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)}};function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH_FS={resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH_FS.resolve(from).substr(1);to=PATH_FS.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err&&!errored){errored=true;return callback(err)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};transaction.oncomplete=function(e){if(!errored){callback(null)}};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer["alloc"]?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_HAS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH_FS.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-22}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-22;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-22}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;if(!node){return-2}var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-13}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(9);return stream},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();var HIGH_OFFSET=4294967296;var offset=offset_high*HIGH_OFFSET+(offset_low>>>0);var DOUBLE_LIMIT=9007199254740992;if(offset<=-DOUBLE_LIMIT||offset>=DOUBLE_LIMIT){return-75}FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-22}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-22;case 9:___setErrNo(22);return-1;default:{return-22}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall3(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),buf=SYSCALLS.get(),count=SYSCALLS.get();return FS.read(stream,HEAP8,buf,count)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-25;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-25;return 0}case 21519:{if(!stream.tty)return-25;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-25;return-22}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-25;return 0}case 21524:{if(!stream.tty)return-25;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function _fd_write(stream,iov,iovcnt,pnum){try{stream=FS.getStream(stream);if(!stream)throw new FS.ErrnoError(9);var num=SYSCALLS.doWritev(stream,iov,iovcnt);HEAP32[pnum>>2]=num;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___wasi_fd_write(){return _fd_write.apply(null,arguments)}function _abort(){Module["abort"]()}function _clock(){if(_clock.start===undefined)_clock.start=Date.now();return(Date.now()-_clock.start)*(1e6/1e3)|0}function _emscripten_get_heap_size(){return HEAP8.length}var _fabs=Math_abs;function _getenv(name){if(name===0)return 0;name=UTF8ToString(name);if(!ENV.hasOwnProperty(name))return 0;if(_getenv.ret)_free(_getenv.ret);_getenv.ret=allocateUTF8(ENV[name]);return _getenv.ret}function _gettimeofday(ptr){var now=Date.now();HEAP32[ptr>>2]=now/1e3|0;HEAP32[ptr+4>>2]=now%1e3*1e3|0;return 0}var ___tm_timezone=(stringToUTF8("GMT",238080,4),238080);function _gmtime_r(time,tmPtr){var date=new Date(HEAP32[time>>2]*1e3);HEAP32[tmPtr>>2]=date.getUTCSeconds();HEAP32[tmPtr+4>>2]=date.getUTCMinutes();HEAP32[tmPtr+8>>2]=date.getUTCHours();HEAP32[tmPtr+12>>2]=date.getUTCDate();HEAP32[tmPtr+16>>2]=date.getUTCMonth();HEAP32[tmPtr+20>>2]=date.getUTCFullYear()-1900;HEAP32[tmPtr+24>>2]=date.getUTCDay();HEAP32[tmPtr+36>>2]=0;HEAP32[tmPtr+32>>2]=0;var start=Date.UTC(date.getUTCFullYear(),0,1,0,0,0,0);var yday=(date.getTime()-start)/(1e3*60*60*24)|0;HEAP32[tmPtr+28>>2]=yday;HEAP32[tmPtr+40>>2]=___tm_timezone;return tmPtr}function _llvm_exp2_f32(x){return Math.pow(2,x)}function _llvm_exp2_f64(a0){return _llvm_exp2_f32(a0)}var _llvm_trunc_f64=Math_trunc;function _tzset(){if(_tzset.called)return;_tzset.called=true;HEAP32[__get_timezone()>>2]=(new Date).getTimezoneOffset()*60;var winter=new Date(2e3,0,1);var summer=new Date(2e3,6,1);HEAP32[__get_daylight()>>2]=Number(winter.getTimezoneOffset()!=summer.getTimezoneOffset());function extractZone(date){var match=date.toTimeString().match(/\(([A-Za-z ]+)\)$/);return match?match[1]:"GMT"}var winterName=extractZone(winter);var summerName=extractZone(summer);var winterNamePtr=allocate(intArrayFromString(winterName),"i8",ALLOC_NORMAL);var summerNamePtr=allocate(intArrayFromString(summerName),"i8",ALLOC_NORMAL);if(summer.getTimezoneOffset()>2]=winterNamePtr;HEAP32[__get_tzname()+4>>2]=summerNamePtr}else{HEAP32[__get_tzname()>>2]=summerNamePtr;HEAP32[__get_tzname()+4>>2]=winterNamePtr}}function _localtime_r(time,tmPtr){_tzset();var date=new Date(HEAP32[time>>2]*1e3);HEAP32[tmPtr>>2]=date.getSeconds();HEAP32[tmPtr+4>>2]=date.getMinutes();HEAP32[tmPtr+8>>2]=date.getHours();HEAP32[tmPtr+12>>2]=date.getDate();HEAP32[tmPtr+16>>2]=date.getMonth();HEAP32[tmPtr+20>>2]=date.getFullYear()-1900;HEAP32[tmPtr+24>>2]=date.getDay();var start=new Date(date.getFullYear(),0,1);var yday=(date.getTime()-start.getTime())/(1e3*60*60*24)|0;HEAP32[tmPtr+28>>2]=yday;HEAP32[tmPtr+36>>2]=-(date.getTimezoneOffset()*60);var summerOffset=new Date(2e3,6,1).getTimezoneOffset();var winterOffset=start.getTimezoneOffset();var dst=(summerOffset!=winterOffset&&date.getTimezoneOffset()==Math.min(winterOffset,summerOffset))|0;HEAP32[tmPtr+32>>2]=dst;var zonePtr=HEAP32[__get_tzname()+(dst?4:0)>>2];HEAP32[tmPtr+40>>2]=zonePtr;return tmPtr}function _emscripten_memcpy_big(dest,src,num){HEAPU8.set(HEAPU8.subarray(src,src+num),dest)}function _mktime(tmPtr){_tzset();var date=new Date(HEAP32[tmPtr+20>>2]+1900,HEAP32[tmPtr+16>>2],HEAP32[tmPtr+12>>2],HEAP32[tmPtr+8>>2],HEAP32[tmPtr+4>>2],HEAP32[tmPtr>>2],0);var dst=HEAP32[tmPtr+32>>2];var guessedOffset=date.getTimezoneOffset();var start=new Date(date.getFullYear(),0,1);var summerOffset=new Date(2e3,6,1).getTimezoneOffset();var winterOffset=start.getTimezoneOffset();var dstOffset=Math.min(winterOffset,summerOffset);if(dst<0){HEAP32[tmPtr+32>>2]=Number(summerOffset!=winterOffset&&dstOffset==guessedOffset)}else if(dst>0!=(dstOffset==guessedOffset)){var nonDstOffset=Math.max(winterOffset,summerOffset);var trueOffset=dst>0?dstOffset:nonDstOffset;date.setTime(date.getTime()+(trueOffset-guessedOffset)*6e4)}HEAP32[tmPtr+24>>2]=date.getDay();var yday=(date.getTime()-start.getTime())/(1e3*60*60*24)|0;HEAP32[tmPtr+28>>2]=yday;return date.getTime()/1e3|0}function _pthread_cond_destroy(){return 0}function _pthread_cond_init(){return 0}function _pthread_cond_signal(){return 0}function _pthread_cond_wait(){return 0}function _pthread_create(){return 11}function _pthread_join(){}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _sysconf(name){switch(name){case 30:return PAGE_SIZE;case 85:var maxHeapSize=2*1024*1024*1024-65536;maxHeapSize=HEAPU8.length;return maxHeapSize/PAGE_SIZE;case 132:case 133:case 12:case 137:case 138:case 15:case 235:case 16:case 17:case 18:case 19:case 20:case 149:case 13:case 10:case 236:case 153:case 9:case 21:case 22:case 159:case 154:case 14:case 77:case 78:case 139:case 80:case 81:case 82:case 68:case 67:case 164:case 11:case 29:case 47:case 48:case 95:case 52:case 51:case 46:return 200809;case 79:return 0;case 27:case 246:case 127:case 128:case 23:case 24:case 160:case 161:case 181:case 182:case 242:case 183:case 184:case 243:case 244:case 245:case 165:case 178:case 179:case 49:case 50:case 168:case 169:case 175:case 170:case 171:case 172:case 97:case 76:case 32:case 173:case 35:return-1;case 176:case 177:case 7:case 155:case 8:case 157:case 125:case 126:case 92:case 93:case 129:case 130:case 131:case 94:case 91:return 1;case 74:case 60:case 69:case 70:case 4:return 1024;case 31:case 42:case 72:return 32;case 87:case 26:case 33:return 2147483647;case 34:case 1:return 47839;case 38:case 36:return 99;case 43:case 37:return 2048;case 0:return 2097152;case 3:return 65536;case 28:return 32768;case 44:return 32767;case 75:return 16384;case 39:return 1e3;case 89:return 700;case 71:return 256;case 40:return 255;case 2:return 100;case 180:return 64;case 25:return 20;case 5:return 16;case 6:return 6;case 73:return 4;case 84:{if(typeof navigator==="object")return navigator["hardwareConcurrency"]||1;return 1}}___setErrNo(22);return-1}FS.staticInit();Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;if(ENVIRONMENT_HAS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}var ASSERTIONS=false;function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}function jsCall_dd(index,a1){return functionPointers[index](a1)}function jsCall_did(index,a1,a2){return functionPointers[index](a1,a2)}function jsCall_didd(index,a1,a2,a3){return functionPointers[index](a1,a2,a3)}function jsCall_ii(index,a1){return functionPointers[index](a1)}function jsCall_iidiiii(index,a1,a2,a3,a4,a5,a6){return functionPointers[index](a1,a2,a3,a4,a5,a6)}function jsCall_iii(index,a1,a2){return functionPointers[index](a1,a2)}function jsCall_iiii(index,a1,a2,a3){return functionPointers[index](a1,a2,a3)}function jsCall_iiiii(index,a1,a2,a3,a4){return functionPointers[index](a1,a2,a3,a4)}function jsCall_iiiiii(index,a1,a2,a3,a4,a5){return functionPointers[index](a1,a2,a3,a4,a5)}function jsCall_iiiiiii(index,a1,a2,a3,a4,a5,a6){return functionPointers[index](a1,a2,a3,a4,a5,a6)}function jsCall_jiji(index,a1,a2,a3){return functionPointers[index](a1,a2,a3)}function jsCall_v(index){functionPointers[index]()}function jsCall_vi(index,a1){functionPointers[index](a1)}function jsCall_vii(index,a1,a2){functionPointers[index](a1,a2)}function jsCall_viii(index,a1,a2,a3){functionPointers[index](a1,a2,a3)}function jsCall_viiii(index,a1,a2,a3,a4){functionPointers[index](a1,a2,a3,a4)}function jsCall_viiiii(index,a1,a2,a3,a4,a5){functionPointers[index](a1,a2,a3,a4,a5)}function jsCall_viiiiii(index,a1,a2,a3,a4,a5,a6){functionPointers[index](a1,a2,a3,a4,a5,a6)}function jsCall_viiiiiii(index,a1,a2,a3,a4,a5,a6,a7){functionPointers[index](a1,a2,a3,a4,a5,a6,a7)}function jsCall_viiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8){functionPointers[index](a1,a2,a3,a4,a5,a6,a7,a8)}function jsCall_viiiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9){functionPointers[index](a1,a2,a3,a4,a5,a6,a7,a8,a9)}function jsCall_viiiiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10){functionPointers[index](a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)}function jsCall_viiiiiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11){functionPointers[index](a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11)}function jsCall_viiiiiiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12){functionPointers[index](a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12)}function jsCall_viiiiiiiiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14){functionPointers[index](a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14)}var asmGlobalArg={};var asmLibraryArg={"abort":abort,"setTempRet0":setTempRet0,"getTempRet0":getTempRet0,"jsCall_dd":jsCall_dd,"jsCall_did":jsCall_did,"jsCall_didd":jsCall_didd,"jsCall_ii":jsCall_ii,"jsCall_iidiiii":jsCall_iidiiii,"jsCall_iii":jsCall_iii,"jsCall_iiii":jsCall_iiii,"jsCall_iiiii":jsCall_iiiii,"jsCall_iiiiii":jsCall_iiiiii,"jsCall_iiiiiii":jsCall_iiiiiii,"jsCall_jiji":jsCall_jiji,"jsCall_v":jsCall_v,"jsCall_vi":jsCall_vi,"jsCall_vii":jsCall_vii,"jsCall_viii":jsCall_viii,"jsCall_viiii":jsCall_viiii,"jsCall_viiiii":jsCall_viiiii,"jsCall_viiiiii":jsCall_viiiiii,"jsCall_viiiiiii":jsCall_viiiiiii,"jsCall_viiiiiiii":jsCall_viiiiiiii,"jsCall_viiiiiiiii":jsCall_viiiiiiiii,"jsCall_viiiiiiiiii":jsCall_viiiiiiiiii,"jsCall_viiiiiiiiiii":jsCall_viiiiiiiiiii,"jsCall_viiiiiiiiiiii":jsCall_viiiiiiiiiiii,"jsCall_viiiiiiiiiiiiii":jsCall_viiiiiiiiiiiiii,"___buildEnvironment":___buildEnvironment,"___setErrNo":___setErrNo,"___syscall140":___syscall140,"___syscall221":___syscall221,"___syscall3":___syscall3,"___syscall5":___syscall5,"___syscall54":___syscall54,"___syscall6":___syscall6,"___wasi_fd_write":___wasi_fd_write,"_abort":_abort,"_clock":_clock,"_emscripten_get_heap_size":_emscripten_get_heap_size,"_emscripten_memcpy_big":_emscripten_memcpy_big,"_emscripten_resize_heap":_emscripten_resize_heap,"_fabs":_fabs,"_fd_write":_fd_write,"_getenv":_getenv,"_gettimeofday":_gettimeofday,"_gmtime_r":_gmtime_r,"_llvm_exp2_f32":_llvm_exp2_f32,"_llvm_exp2_f64":_llvm_exp2_f64,"_llvm_trunc_f64":_llvm_trunc_f64,"_localtime_r":_localtime_r,"_mktime":_mktime,"_pthread_cond_destroy":_pthread_cond_destroy,"_pthread_cond_init":_pthread_cond_init,"_pthread_cond_signal":_pthread_cond_signal,"_pthread_cond_wait":_pthread_cond_wait,"_pthread_create":_pthread_create,"_pthread_join":_pthread_join,"_sysconf":_sysconf,"_tzset":_tzset,"abortOnCannotGrowMemory":abortOnCannotGrowMemory,"demangle":demangle,"demangleAll":demangleAll,"jsStackTrace":jsStackTrace,"stackTrace":stackTrace,"tempDoublePtr":tempDoublePtr,"DYNAMICTOP_PTR":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___emscripten_environ_constructor=Module["___emscripten_environ_constructor"]=function(){return Module["asm"]["___emscripten_environ_constructor"].apply(null,arguments)};var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["___errno_location"].apply(null,arguments)};var __get_daylight=Module["__get_daylight"]=function(){return Module["asm"]["__get_daylight"].apply(null,arguments)};var __get_environ=Module["__get_environ"]=function(){return Module["asm"]["__get_environ"].apply(null,arguments)};var __get_timezone=Module["__get_timezone"]=function(){return Module["asm"]["__get_timezone"].apply(null,arguments)};var __get_tzname=Module["__get_tzname"]=function(){return Module["asm"]["__get_tzname"].apply(null,arguments)};var _closeDecoder=Module["_closeDecoder"]=function(){return Module["asm"]["_closeDecoder"].apply(null,arguments)};var _decodeData=Module["_decodeData"]=function(){return Module["asm"]["_decodeData"].apply(null,arguments)};var _flushDecoder=Module["_flushDecoder"]=function(){return Module["asm"]["_flushDecoder"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["_free"].apply(null,arguments)};var _llvm_bswap_i16=Module["_llvm_bswap_i16"]=function(){return Module["asm"]["_llvm_bswap_i16"].apply(null,arguments)};var _llvm_bswap_i32=Module["_llvm_bswap_i32"]=function(){return Module["asm"]["_llvm_bswap_i32"].apply(null,arguments)};var _llvm_round_f64=Module["_llvm_round_f64"]=function(){return Module["asm"]["_llvm_round_f64"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["_main"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["_malloc"].apply(null,arguments)};var _memalign=Module["_memalign"]=function(){return Module["asm"]["_memalign"].apply(null,arguments)};var _memcpy=Module["_memcpy"]=function(){return Module["asm"]["_memcpy"].apply(null,arguments)};var _memmove=Module["_memmove"]=function(){return Module["asm"]["_memmove"].apply(null,arguments)};var _memset=Module["_memset"]=function(){return Module["asm"]["_memset"].apply(null,arguments)};var _openDecoder=Module["_openDecoder"]=function(){return Module["asm"]["_openDecoder"].apply(null,arguments)};var _pthread_cond_broadcast=Module["_pthread_cond_broadcast"]=function(){return Module["asm"]["_pthread_cond_broadcast"].apply(null,arguments)};var _sbrk=Module["_sbrk"]=function(){return Module["asm"]["_sbrk"].apply(null,arguments)};var establishStackSpace=Module["establishStackSpace"]=function(){return Module["asm"]["establishStackSpace"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["stackAlloc"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["stackRestore"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["stackSave"].apply(null,arguments)};var dynCall_dd=Module["dynCall_dd"]=function(){return Module["asm"]["dynCall_dd"].apply(null,arguments)};var dynCall_did=Module["dynCall_did"]=function(){return Module["asm"]["dynCall_did"].apply(null,arguments)};var dynCall_didd=Module["dynCall_didd"]=function(){return Module["asm"]["dynCall_didd"].apply(null,arguments)};var dynCall_ii=Module["dynCall_ii"]=function(){return Module["asm"]["dynCall_ii"].apply(null,arguments)};var dynCall_iidiiii=Module["dynCall_iidiiii"]=function(){return Module["asm"]["dynCall_iidiiii"].apply(null,arguments)};var dynCall_iii=Module["dynCall_iii"]=function(){return Module["asm"]["dynCall_iii"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["dynCall_iiii"].apply(null,arguments)};var dynCall_iiiii=Module["dynCall_iiiii"]=function(){return Module["asm"]["dynCall_iiiii"].apply(null,arguments)};var dynCall_iiiiii=Module["dynCall_iiiiii"]=function(){return Module["asm"]["dynCall_iiiiii"].apply(null,arguments)};var dynCall_iiiiiii=Module["dynCall_iiiiiii"]=function(){return Module["asm"]["dynCall_iiiiiii"].apply(null,arguments)};var dynCall_jiji=Module["dynCall_jiji"]=function(){return Module["asm"]["dynCall_jiji"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["dynCall_v"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["dynCall_vi"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["dynCall_vii"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["dynCall_viii"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["dynCall_viiii"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["dynCall_viiiii"].apply(null,arguments)};var dynCall_viiiiii=Module["dynCall_viiiiii"]=function(){return Module["asm"]["dynCall_viiiiii"].apply(null,arguments)};var dynCall_viiiiiii=Module["dynCall_viiiiiii"]=function(){return Module["asm"]["dynCall_viiiiiii"].apply(null,arguments)};var dynCall_viiiiiiii=Module["dynCall_viiiiiiii"]=function(){return Module["asm"]["dynCall_viiiiiiii"].apply(null,arguments)};var dynCall_viiiiiiiii=Module["dynCall_viiiiiiiii"]=function(){return Module["asm"]["dynCall_viiiiiiiii"].apply(null,arguments)};var dynCall_viiiiiiiiii=Module["dynCall_viiiiiiiiii"]=function(){return Module["asm"]["dynCall_viiiiiiiiii"].apply(null,arguments)};var dynCall_viiiiiiiiiii=Module["dynCall_viiiiiiiiiii"]=function(){return Module["asm"]["dynCall_viiiiiiiiiii"].apply(null,arguments)};var dynCall_viiiiiiiiiiii=Module["dynCall_viiiiiiiiiiii"]=function(){return Module["asm"]["dynCall_viiiiiiiiiiii"].apply(null,arguments)};var dynCall_viiiiiiiiiiiiii=Module["dynCall_viiiiiiiiiiiiii"]=function(){return Module["asm"]["dynCall_viiiiiiiiiiiiii"].apply(null,arguments)};Module["asm"]=asm;Module["getMemory"]=getMemory;Module["addRunDependency"]=addRunDependency;Module["removeRunDependency"]=removeRunDependency;Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;Module["addFunction"]=addFunction;Module["calledRun"]=calledRun;var calledRun;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}var calledMain=false;dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function callMain(args){args=args||[];var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(thisProgram);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){noExitRuntime=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);quit_(1,e)}}finally{calledMain=true}}function run(args){args=args||arguments_;if(runDependencies>0){return}preRun();if(runDependencies>0)return;function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(shouldRunNow)callMain(args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&noExitRuntime&&status===0){return}if(noExitRuntime){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}quit_(status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}what+="";out(what);err(what);ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"])shouldRunNow=false;noExitRuntime=true;run(); diff --git a/sdk/src/3rd/video-codec-lib/libffmpeg_264_265.wasm b/sdk/src/3rd/video-codec-lib/libffmpeg_264_265.wasm deleted file mode 100644 index 1754c0b749f962125365a9f8c6415dde2675e4c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2061766 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

?&@7V%X_CV-|E;hiXA5zyiF%GQeRWvD8UehA`LM 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 z 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

sf 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

1Ka*>gnmJ z{_5GMr_ZL&cfe^D`#{=bYA0KGb`8Q`+tna%Z5JB->U1@vEl0$eeZ}UU&LrjR-cY4jx>E%sy^!La>| zw3~PV)$H9@?!`;S+`$2~U8xA$APBs}Y7f}8Oe?hc3C^lrnX}5SG!h!Bhxlah`KI7| zJ>~Qn#U#C_uXWM_Y+9osT*+2RB_W8QpwCQrcVw&!NJArth>$=AWF!=L3oi*?i)xeu z5Zpp)@?LB zv-V&&mGNMWlu_ZRcU{A;&@Xq~kjghg8ESVgum5*oJV$3JqR6U#vjY<|P`oXGk_a(% zZwUxNim^*`P{I_-8EhN90C{=>Hb=of(qde5*AtJ{d*?mHJ!cd| zL}mpS&pR@4(}Hw)PY^9PYUCy66_`0>%~zkA0S(Z6;w>XhUgV!hCGiEiQd$i5X7eXD z+Y5+IgeE8(_7+)ZZK+o2O}3(wMQL0b+qvB-t6{yR9E z*~sMj#9|1%C3d1+w`A$c2B*}BewB_c+~TlPL2-}zj>dx~aZSJll+={lKM`<&JoA7H zaxo9M#O^*~9~N+7`}jPx!gdjPz=Z)RpF-fiES{7&kiFdb+L$qRHH;bsr7bwdGaEcJ`sOki-gH8XqoN*qsLgm@&Li6` zti5PcSq#lDn(w{D3kmh%6s0cVM#6pAgpJNbiu%u+i)S*dZJdEKciCpY8d?9jXL3CB zVZP^x`{j8}U#}LRc{( zQvF4X#;^x}7BzjapY3vpAmZIG?sD(_$AA5?oo@a-cjIlgnR?ShZu`1ZzexvnFBCE? z%!5Ai8p1kDMR;pj^B@($ps?s!+T|+D>*YcQUo5mHE||(!6+umY-)|I{DiYqTo?pgC~kqWfLjf^A$XyR;X-Ho zr!zjzXg@^NjY;oI+0#x6M8ZH=2TUx+#Bqdzjs<15fu1>tWgs?%z%VcrfYkv1QN##q zrgiG1h$x8PAXM8X+6fEVtPr@FIkR10J10lX6J}k0G&{n7y+PZp%UW!B$h~G|QE%v3 z@Z2=ZU!u?BJey&!4E9`c>&REN2@Eglfe1M*v`AkvpNYs3HHfX)0D8ygAob-wd*pf}R0de5Fjhv-i0G49Tsm#+;kb9%iG zC*!-Cp&x8;p+7|(S_%-^9!dCO)8L&waM-@)wB)C_k_#ql;6W^0Gc=q1Kh519is~~y zf>pmnF(0F9_CGTtKM6_>@B95f=dDK62dP`G@BWcl>jtydSUI1WfzS90>cm#(@;Cg5 zP;K)md5N2o=g1%t?fyK}3XGfbdqot@*BerN)P7NMMN1Sj^3bZHa%Ubvt)PIh1mzmC znXK8~b(%oOpK9d(6kFIKFYzKx(eevaW?2zfQjp7#*b%5d*&_@F<6^*ZfRFDi+dxz{fa|MxsrvBqz5Qv@@_UbHgTYLB6;Yv^ zG{GwB2zqJQ-P#G7DSx9$i6I-TDAHs8d0@4rBo;d(~_zj~Y`|yCjJj921^|Ywi z3cV5e$OgAabB-QG&|U0{Se1oPPf-_MptD~RLBr@J;_=-0cyZQ{P7Kx9CN`+_#?GPW zy}dyGN!H!kkPeye{c(3<1Qq|+?p_Q4!rgwrvG_d)tmPHaawFRIBWOPwQSyQ`qD?=d ztuUhEPCue%8nmk;D%>E|K}{TFDTV!r>N7v0hxp8oXe%F4eHTXb5Fh#xZRI1X55tHa z;=_DIM+UJa&CX0MW5-0D_!4O)0pSOeQ4eE*$&xVI4Srks*ftape#uZKink0KFV51D zu_auw6XwpF6#vV76aLykEJ@|WxsWPIsAz*!f-HTBWNBz49jBk#HmE#r#-@c$v#A-s z{a|i>JmO}Ucn-bs+d;NNZ|rWeHymA?al9X5IrJuean>He7`kX@K9L1Mhe)(i7lbsC zIM(6A9f^kLFNV0`ej_yd*p12ZtvyDgbC3ofn{nb)Psyu+q+o$hKX))PV!hsH8%f)% zqE>D*w1zmiRZ9E9!X8c+sw#gIc*^_h?xAnV%S&D?{gamf z#GSx7?agzA2qKLFrkEMP6oWa)J%mA}_ap(3Z*k)WWqDFZvujuKQGbLbS{D(Zqp_Us!dxelG=o&2}sE=@uplV zB^b+h@vSq2jEcXG7SGx}kIg0|M!f?GDO$263EjkQ)#7X;P7;oIz*4qkA&o%9@M`1L zFGV}KXr4!U)0Oc~B{{uRZ`c#A&H3ebL_2reey@H?&n+cbp15Hf{a$#=JSr+{vALX8 zrVmFdOUufPo+c}kJn3U;AxN+a57TyLXtwni}6@5EqFWw5KvLhl=~ z4h+ynd-6(bqdjf5i(|qLsDw^)Fl}#K;(*dyOafKGL?BfGP4{J~0othnv@-^1vQ=bi z|IGQ91rFfs-k7y7%##0yzT}UPai+_BSI}m%q~-a2bIb+7j`u~8P3pDEsMqElnw!%5 zB}EfMDj0@_qAfnEi~wW&WO(@dZLnFooxro8BCv>6ityvv8N+D)23=&)JRRnWUqrmDR2~r-Mmy6v8vRvS*PUa>6_%5~kI^cSdpb-q+)? zDxr%V^ueE*p(3EIZAsRM^+m=&$M2ZU+;U&JtSj8fb95KIGF&q^e~ZjQx)r&9`49(D zKoLQHI`h<^)n#Ebk?D*E00S(7W&Pw3c*Ja)c;FOIx#i46ZG=jE&+z7(*TE27h0q9Xa`wW2 zr0sm`SEG=&q=V99g=sHy)jhkku#~^F;DW!jtyD9}Dz`MLm=o#ItS?yvE4_f00MgV? z%vh4W#GgR~we;NwUdci75+gk7O&Jb}gG9YIwfwmjQ#s|^2|2v+F*>A5-2X$O1u`0> zp~DT_!CHfGgWQ=$xHfdlXFG;-bPb6sX0{(gk!}1rC0WHe+{DT5zLW?Kq`ZTE!4!&` z$TL|xRI(KvGy_4`3K$RjTrkOyG4a?ac2G7R$zTuUvAc&JYB5GOX9G$V)HYfcL8!7l zE335}+6;!Uq#9_+C1l@Po+x@=iOkyod|MnR~J5y18@Vq(6czN>K#qA09kq(5( zw{(VHQ26{MIzi8S0H`& zp;oqHZC3CfyO*A|i**X5(F=9qu=-Mq=bD@eMf5aGbj-QCXFE~5)oi4RHrcuARb6ei z_8NZJZs1aWAj*sQArb1^uk32o&)4}$d+q^#(Bl7-A5`?4Zk-j1vRU_guky=xbOb6= zrvF|@4m=QA7DS40hf7TygiFnAgv%+hGyl{nNa2$8Mm$E!++Jq48n>wF1H$rqwakM- zVgXDfws%w8>6tEOwws|uoxQiU{K^dJ+8Z}3vV@%$v(>Ii*uL$IJ ziCgr0&1R-+`d>kN+oLH!Mu2hy1F2Ug|Chu-x0s4FA=4}!eGiYye`hLB*tI7lyKvf>#~Jv+a{LVK@E>4G5SsVE6#+eW^((~J11R1* zvt$}Dxb6O@W|b`vJ_6@9eH#iZvT6Ng0+_-r3R??$h7s5QE_+c^=`aSOAwi}T31NNc zXi_*$Dor_gzB&Zg%S@aAQHqa_Do#Mpi0w`GWbYSwp5icKMZ7&h6?Thm}U z?Q3aLwSM-Z7PYD#tKQf}ZiTPA;qDx-n?19cI`^C;isMI)gqGaUQY-%VVp}#S?0VqPQGhqVbwGP22lU6x17`5BuR(n zZAEzwT!+Px{)Gz+$GpoeKlT^4f{o z*>|tJoxnf+l05OimGx_?QuQ%U#NsWjmT>5vsQ+oExgbq*i4^kiv$cx#L@=m+FhTS~ zB9?wg`_oV6e>VG{Q~l4gsdUStUWZT5@Xwi*1HHY?Jaw}y<(p_zBNskX!T%|bF}_eA zYr0l(tFT5^j+@n;MHgJW^??IlyzjPs-+DuG;np8zOZdC?+no9^x#1O>4WS4%?0F%w z2E0>27BBxz$~V3UCG|~ABr3hoh=UJbIBcMJXqo}!AhHXn(zmc25UMU~KEH8c)`Xxe zX@yiA0WU`meR}r%4VU&VYOvC*i5I#x{ux2|Gq{13)jD(*O1pi}E`(9@Y#6s8KXJUk z(*8(f9BsYG*7#_d&-q)E7hoJlEKNo7ZCTJMrUIC~-M1Rtm9irrzHt5mx+rx|NCT@O zJqLHwCrLE7(-{E040hZ~3la?Ru6a_&fm|(jeufwR!jdl{bG+v+W^PA2+7CNmGk=5@ z(4+2!=QC2-r2}bGyz%(_VLNM{4->=2FTg?1V*Zk?CtAoZJOBLikulFz?jHrx8!p=# zUre3xrI�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 diff --git a/sdk/src/AppController.js b/sdk/src/AppController.js index 2cc69ee..d0fd1a6 100644 --- a/sdk/src/AppController.js +++ b/sdk/src/AppController.js @@ -402,12 +402,6 @@ class AppController { }); this.autoRotation.init(); - // start success后再初始化编码器 - if (!this.isMSE) { - const frameType = this.recMediaConfig.frame_type.toUpperCase(); - this.avc.loadjs(frameType); - } - this.updateResolutionAndTouch(); } } diff --git a/sdk/src/CanvasPlayer.js b/sdk/src/CanvasPlayer.js index 7d91bd9..23688a4 100644 --- a/sdk/src/CanvasPlayer.js +++ b/sdk/src/CanvasPlayer.js @@ -27,18 +27,41 @@ class CanvasPlayer extends BaseClass { this.moduleInit = false; this.streamList = []; this.document = document; + this.tinyH264Worker = null; + this.videoStreamId = 1; this.util = new Util(); this.options.events = getEvents(); this.setCanvas(); this.setImagerPlayer(); - /* javascript-obfuscator:disable */ - this.videoDecoderWorker = work(require.resolve('./worker/VideoDecoder.js')); - - /* javascript-obfuscator:enable */ - this.videoDecoderWorker.addEventListener('message', this.eventMessageHandel.bind(this)); - } + //将本行代码放主线程执行 + this.tinyH264Worker = work(require.resolve('./worker/H264NALDecoderWorker.js')); + this.tinyH264Worker.addEventListener('message', (e) => { + const message = /** @type {{type:string, width:number, height:number, data:ArrayBuffer, renderStateId:number}} */e.data + switch (message.type) { + case 'pictureReady': + const { width, height, data } = message; + self.postMessage({ + type: 'decoded', + data: { + data, + width, + height, + }, + }); + this.onRenderImage({ + data, + width, + height, + }); + break; + case 'decoderReady': + this.moduleInit = true; + break; + } + }); + } setCanvas () { const $canvas = this.util.createCanvas(this.options.isMobile, CLOUD_PHONE_RATIO); @@ -55,31 +78,6 @@ class CanvasPlayer extends BaseClass { }); } - loadjs(decoderType) { - if (!decoderType) { - decoderType = 'H264'; - } - this.videoDecoderWorker.postMessage({ - type: 'loadwasm', - libPath: this.options.libPath, - decoderType - }) - } - - eventMessageHandel(event) { - let workerData = event.data - let type = workerData.type - let data = workerData.data - switch (type) { - case 'decoded': - this.onRenderImage(data); - break - case 'decoderReady': - this.moduleInit = true; - break; - } - } - onRenderImage(obj) { let unData = new Uint8Array(obj.data); let width = obj.width; @@ -95,68 +93,21 @@ class CanvasPlayer extends BaseClass { startDecod() { const streamData = this.streamList.shift(); if (streamData && streamData.buffer) { - this.videoDecoderWorker.postMessage({ - type: 'startDecode', - data: streamData - }, [streamData.buffer]) + this.tinyH264Worker.postMessage( + { + type: 'decode', + data: streamData.buffer, + offset: streamData.byteOffset, + length: streamData.byteLength, + renderStateId: this.videoStreamId, + }, + [streamData.buffer], + ); } else { Logger.error('startDecode', 'data is null', 'data:', data) } } - messageHandler(evt) { - const message = evt.data; - if (!Object.prototype.hasOwnProperty.call(message, 'type')) { - return; - } - - switch (message.type) { - // worker 中 onHeadersReady 被调用时触发 - case 'pictureParams': { - const croppingParams = message.croppingParams; - if (croppingParams === null) { - this.canvas.width = message.width; - this.canvas.height = message.height; - } else { - this.canvas.width = croppingParams.width; - this.canvas.height = croppingParams.height; - } - - break; - } - - // worker 中 onPictureReady 被调用时触发 - case 'pictureReady': - /*global __IS_DEBUG__*/ - if (__IS_DEBUG__) { - let traceId = window.delayAnalysis.shiftTraceId('decode'); - window.delayAnalysis.record(['decode', 'end', traceId]); - } - - this.h264bsdCanvas.drawNextOutputPicture( - message.width, - message.height, - message.croppingParams, - new Uint8Array(message.data) - ); - break; - - // 当前队列中所有数据被处理完后触发 - case 'noInput': - break; - - // decode 方法返回错误码 - case 'decodeError': - case 'paramSetError': - case 'memAllocError': - Logger.debug('Decoder error: ' + message.type); - break; - - default: - // do nothing - } - } - decode(data) { /*global __IS_DEBUG__*/ if (__IS_DEBUG__) { @@ -173,7 +124,8 @@ class CanvasPlayer extends BaseClass { } destroy() { - this.videoDecoderWorker.terminate(); + this.tinyH264Worker.postMessage({ type: 'release', renderStateId: this.videoStreamId }); + this.tinyH264Worker.terminate(); } } diff --git a/sdk/src/CloudApp.js b/sdk/src/CloudApp.js index 3a7c14a..f72fe0c 100644 --- a/sdk/src/CloudApp.js +++ b/sdk/src/CloudApp.js @@ -11,7 +11,6 @@ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. -import RTCCloudApp from "./rtc/RTCCloudApp"; import CPHCloudApp from "./CPHCloudApp"; import AppController from "./AppController"; @@ -106,9 +105,6 @@ class CloudApp { _getChannel(containerId, options) { const channelType = options.channelType || 'WebSocket'; - if (channelType === 'WebRtc') { - return new RTCCloudApp(containerId, options); - } if (channelType === 'WebSocket') { return new CPHCloudApp(containerId, options); } diff --git a/sdk/src/codec/Decode.js b/sdk/src/codec/Decode.js deleted file mode 100644 index b435a6e..0000000 --- a/sdk/src/codec/Decode.js +++ /dev/null @@ -1,113 +0,0 @@ -// Copyright 2023 Huawei Cloud Computing Technology Co., Ltd. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -import Util from '../Util'; -import { DECODER_TYPE_MAP } from '../config/commonConfig'; - -class Decode { - constructor() { - this.decoderType = DECODER_TYPE_MAP.H264; - this.moduleInit = false; - this.util = new Util(); - } - - loadWASM(event) { - let that = this; - let libPath = event.data.libPath; - const decoderType = event.data.decoderType.toUpperCase(); - this.decoderType = DECODER_TYPE_MAP[decoderType]; - self.Module = { - locateFile: function (wasm) { - return libPath + wasm; - } - } - - self.importScripts(libPath + 'libffmpeg_264_265.js'); - self.Module.onRuntimeInitialized = function() { - that.openDecode(); - } - } - - push(data) { - if (this.moduleInit) { - this.decodeData(data); - } - } - - openDecode() { - let videoCallback = Module.addFunction(function (addr_y, addr_u, addr_v, stride_y, stride_u, stride_v, width, height, pts) { - let size = width * height + (width / 2) * (height / 2) + (width / 2) * (height / 2); - let data = new Uint8Array(size); - let pos = 0; - for(let i=0; i< height; i++) { - let src = addr_y + i * stride_y; - let tmp = HEAPU8.subarray(src, src + width); - tmp = new Uint8Array(tmp); - data.set(tmp, pos); - pos += tmp.length; - } - for(let i=0; i< height / 2; i++) { - let src = addr_u + i * stride_u; - let tmp = HEAPU8.subarray(src, src + width / 2); - tmp = new Uint8Array(tmp); - data.set(tmp, pos); - pos += tmp.length; - } - for(let i=0; i< height / 2; i++) { - let src = addr_v + i * stride_v; - let tmp = HEAPU8.subarray(src, src + width / 2); - tmp = new Uint8Array(tmp); - data.set(tmp, pos); - pos += tmp.length; - } - let obj = { - data: data, - width, - height - } - - self.postMessage({ - type: 'decoded', - data: obj - }); - }); - let ret = Module._openDecoder(this.decoderType, videoCallback, 1); - if (ret === 0) { - this.moduleInit = true; - console.log('openDecode success'); - - // 告诉主线程,解码器准备好了 - self.postMessage({ - type: 'decoderReady', - data: null - }); - - }else { - console.log('openDecode error'); - } - } - - decodeData(pes) { - let fileSize = pes.length; - let cacheBuffer = Module._malloc(fileSize); - Module.HEAPU8.set(pes, cacheBuffer); - Module._decodeData(cacheBuffer, fileSize); - Module._free(cacheBuffer); - } - - closeDecode() { - Module._closeDecoder(); - } -} -export default Decode; \ No newline at end of file diff --git a/sdk/src/rtc/MessageHandler.js b/sdk/src/rtc/MessageHandler.js deleted file mode 100644 index 94e79ed..0000000 --- a/sdk/src/rtc/MessageHandler.js +++ /dev/null @@ -1,253 +0,0 @@ -import PROTOCOL_CONFIG from "../config/protocolConfig"; - -const MSG_TYPE_MAP = { - 2: 'Audio', - 3: 'Video', - 7: 'CmdControl', - 8: 'HeartBeat', - 9: 'Orientation', - 14: 'KeyboardInput', - 21: 'Camera', - 22: 'MicroPhone', - 60: 'PhoneControl' -}; -const INVALID_MSG_TYPE = 'Invalid'; - -const STREAM_DELIMITER_MAGIC_WORD = 0x5A5A; -const MSG_HEADER_LENGTH = 8; - -const KEY_COMMAND = "command"; -const KEY_MEDIA_CONFIG = "media_config"; - -class MessageHandler { - constructor(sendMessage, options) { - this.sendMessage = sendMessage; - this.options = options; - } - - sendStartCmdControl(startParams) { - const mediaConfig = startParams.media_config; - if (typeof mediaConfig !== 'string') { - if (mediaConfig.encode_type !== 0) { - delete mediaConfig.remote_scheduling_elb_ip; - delete mediaConfig.remote_scheduling_elb_port; - } - startParams.media_config = this._objToString(mediaConfig, ':'); - } - - const parametersMap = new Map(); - parametersMap.set(KEY_COMMAND, PROTOCOL_CONFIG.CMD_TYPE.START); - for (let key in startParams) { - parametersMap.set(key, startParams[key]); - } - return this._sendCommandMsgData(PROTOCOL_CONFIG.MSG_TYPE.CMD_CONTROL, parametersMap); - } - - sendStopCmdControl() { - return this._sendNormalCmdControl(PROTOCOL_CONFIG.CMD_TYPE.STOP) - } - - sendPauseCmdControl() { - return this._sendNormalCmdControl(PROTOCOL_CONFIG.CMD_TYPE.PAUSE); - } - - sendResumeCmdControl() { - return this._sendNormalCmdControl(PROTOCOL_CONFIG.CMD_TYPE.RESUME); - } - - _sendNormalCmdControl(cmdType) { - const parametersMap = new Map(); - parametersMap.set(KEY_COMMAND, cmdType); - return this._sendCommandMsgData(PROTOCOL_CONFIG.MSG_TYPE.CMD_CONTROL, parametersMap); - } - - sendHeartBeat() { - const parametersMap = new Map(); - parametersMap.set(KEY_COMMAND, PROTOCOL_CONFIG.CMD_TYPE.HEART_BEAT); - return this._sendCommandMsgData(PROTOCOL_CONFIG.MSG_TYPE.HEART_BEAT, parametersMap); - } - - sendMediaConfig(mediaConfig) { - const mediaConfigStr = this._parametersToString(mediaConfig, ':'); - const parametersMap = new Map(); - parametersMap.set(KEY_COMMAND, PROTOCOL_CONFIG.CMD_TYPE.SET_MEDIA_CONFIG); - parametersMap.set(KEY_MEDIA_CONFIG, mediaConfigStr); - return this._sendCommandMsgData(PROTOCOL_CONFIG.MSG_TYPE.CMD_CONTROL, parametersMap); - } - - sendTouchMsgData(touchData) { - const msgBody = new Uint8Array(17); - msgBody[0] = touchData.id; - msgBody[1] = touchData.action; - msgBody[2] = (touchData.x >> 8) & 0xFF; - msgBody[3] = touchData.x & 0xFF; - msgBody[4] = (touchData.y >> 8) & 0xFF; - msgBody[5] = touchData.y & 0xFF; - msgBody[6] = (touchData.pressure >> 8) & 0xFF; - msgBody[7] = touchData.pressure & 0xFF; - msgBody[8] = (touchData.time & 0xFF000000) >> 24; - msgBody[9] = (touchData.time & 0xFF000000) >> 16; - msgBody[10] = (touchData.time & 0xFF000000) >> 8; - msgBody[11] = touchData.time & 0xFF000000; - msgBody[12] = touchData.orientation; - msgBody[13] = (touchData.height >> 8) & 0xFF; - msgBody[14] = touchData.height & 0xFF; - msgBody[15] = (touchData.width >> 8) & 0xFF; - msgBody[16] = touchData.width & 0xFF; - return this._sendMsgData(PROTOCOL_CONFIG.MSG_TYPE.TOUCH, msgBody, 17); - } - - _sendCommandMsgData(msgType, parametersMap) { - const msgBody = this._makeCommand(parametersMap); - return this._sendMsgData(msgType, msgBody, msgBody.length); - } - - _sendMsgData(msgType, msgBody, bodyLen) { - const len = MSG_HEADER_LENGTH + bodyLen; - const msgData = new Uint8Array(len); - msgData[0] = 0x5A; - msgData[1] = 0x5A; - msgData[2] = this._generateChecksum(msgType); - msgData[3] = msgType; - msgData[4] = ((bodyLen >> 24) & 0xFF); - msgData[5] = ((bodyLen >> 16) & 0xFF); - msgData[6] = ((bodyLen >> 8) & 0xFF); - msgData[7] = ((bodyLen) & 0xFF); - msgData.set(msgBody, 8); - return this.sendMessage(msgData); - } - - _generateChecksum(msgType) { - return ((msgType + ((STREAM_DELIMITER_MAGIC_WORD >> 8) & 0xFF) + (STREAM_DELIMITER_MAGIC_WORD & 0xFF)) & 0xFF); - } - - _makeCommand(parametersMap, separator = '&') { - return new TextEncoder().encode(this._parametersToString(parametersMap, separator)); - } - - _objToString(obj, separator = '&') { - let objStr = ''; - let count = 0; - for (let key in obj) { - count++; - objStr += `${key}=${obj[key]}`; - if (count !== objStr.length) { - objStr += separator; - } - } - return objStr; - } - - _parametersToString(parametersMap, separator = '&') { - let parametersStr = ''; - let count = 0; - parametersMap.forEach((value, key) => { - count++; - parametersStr += `${key}=${value}` - if (count !== parametersMap.size) { - parametersStr += separator; - } - }); - return parametersStr; - } - - dealReceiveMsg(receiveMsg, callback) { - const msgType = this._getMsgTypeFromReceiveMsg(receiveMsg); - if (msgType === INVALID_MSG_TYPE) { - return; - } - - const msgBody = receiveMsg.slice(MSG_HEADER_LENGTH); - - const msgData = new TextEncoder().encode(msgBody); - - switch (msgType) { - case MSG_TYPE_MAP["7"]: - // cmd control - this._processCmdControlResp(msgData, callback.cmdControlCallback); - break; - case MSG_TYPE_MAP["8"]: - // heart beat - this._processHeartBeatResp(msgData, callback.heartBeatCallback); - break; - case MSG_TYPE_MAP["9"]: - // orientation - this._processOrientation(msgData, callback.orientationCallback); - break; - case MSG_TYPE_MAP["14"]: - // KeyboardInput - this._processKeyboardInput(msgData, callback.keyboardInputCallback); - break; - case MSG_TYPE_MAP["21"]: - // Camera - this._processCamera(msgData, callback.cameraCallback); - break; - case MSG_TYPE_MAP["22"]: - // MicroPhone - this._processMicrophone(msgData, callback.microphoneCallback); - break; - case MSG_TYPE_MAP["60"]: - // PhoneControl - this._processPhoneControl(msgData, callback.phoneControlCallback); - break; - } - } - - _processCmdControlResp(msg, cmdControlCallback) { - if (!msg) { - return; - } - let buf = new Uint8Array(msg); - let text = ''; - buf.forEach(c => { - text += String.fromCharCode(c); - }); - let resp = this._params2JSON(text); - let code = (Number(resp.code) & 0xFF00) >> 8; - cmdControlCallback && cmdControlCallback(code); - } - - _processHeartBeatResp(msg, heartBeatCallback) { - heartBeatCallback && heartBeatCallback(msg); - } - - _processOrientation(msg, orientationCallback) { - const body = msg & 0xFF; - const orientation = PROTOCOL_CONFIG.ORIENTATION[body]; - orientationCallback && orientationCallback(orientation); - } - - _processKeyboardInput(msg, keyboardInputCallback) { - keyboardInputCallback && keyboardInputCallback(msg); - } - - _processCamera(msg, cameraCallback) { - cameraCallback && cameraCallback(msg); - } - - _processMicrophone(msg, microphoneCallback) { - microphoneCallback && microphoneCallback(msg); - } - - _processPhoneControl(msg, phoneControlCallback) { - phoneControlCallback && phoneControlCallback(msg); - } - - _params2JSON(params = '') { - let json = {}; - params.split('&').forEach(kv => { - let [key, val] = kv.split('='); - json[key] = val; - }); - return json; - } - - _getMsgTypeFromReceiveMsg(receiveMsg) { - if (!receiveMsg || receiveMsg.length < MSG_HEADER_LENGTH) { - return INVALID_MSG_TYPE; - } - return MSG_TYPE_MAP[receiveMsg.charCodeAt(3)] || INVALID_MSG_TYPE; - } -} - -export default MessageHandler; \ No newline at end of file diff --git a/sdk/src/rtc/RTCChannel.js b/sdk/src/rtc/RTCChannel.js deleted file mode 100644 index 726cfa7..0000000 --- a/sdk/src/rtc/RTCChannel.js +++ /dev/null @@ -1,721 +0,0 @@ -import HRTC from './sdk/hrtc' -import {HmacSHA256} from "crypto-js"; -import TouchController from "./TouchController"; -import MessageHandler from "./MessageHandler"; -import Util from "../Util"; -import {rtc_webjs_grs_sdk_global_route_config} from "./grs"; -import PROTOCOL_CONFIG from "../config/protocolConfig"; -import Subscribe from "../common/Subscribe"; -import {FRAME_TYPE_MAP} from "../config/commonConfig"; -import AESGCMCrypto from "../AESGCMCrypto"; -import AutoRotation from "../AutoRotation"; -import DirectionHandler from "../DirectionHandler"; -import TouchHandler from "../TouchHandler"; -import KeyboardInput from "../KeyboardInput"; -import FrameParser from "../FrameParser"; -import Logger from "../Logger"; - -const PLAYER = 'player'; -const DEFAULT_VOLUME_VALUE = 50; -const DEFAULT_ORIENTATION = 'PORTRAIT'; - -class RTCChannel { - constructor(options) { - this.util = new Util(); - this.subscribe = new Subscribe([ - 'netStateChange', - 'appStateChange', - 'audioStateChange', - 'cloudAppData' - ]); - this.fullscreenStatus = false; - this.options = { - appId: String(options.appId), - appKey: String(options.appKey), - env: String(options.env), - roomId: String(options.roomId), - phoneIp: String(options.ip), - phonePort: String(options.port), - sessionId: String(options.session_id), - backgroundTimeout: String(options.background_timeout), - availablePlayTime: String(options.available_playtime), - ticket: String(options.ticket), - aesKey: String(options.aes_key), - authTimeStamp: String(options.auth_ts), - containerId: options.containerId, - userId: String(options.user_id || ''), - isMobile: /(iPhone|iPad|iPod|iOS|Android)/i.test(navigator.userAgent), - touchTimeout: String(Math.max(Number(options.touch_timeout || 0), 0)), - sdkVersion: __APP_VERSION__, - } - this.options.autoRotate = options.auto_rotate && this.options.isMobile; - if (this.options.autoRotate) { - this.autoRotation = null; - } - - if (options.media_config) { - this.options.mediaConfig = options.media_config; - } - this.options.volume = DEFAULT_VOLUME_VALUE; - this.sessionId = this.options.sessionId || this._generateGUID(); - - this._configEnv(this.options.env); - - this.options.role = 'anchor'; - this.options.userId = this.options.userId || this._generateGUID(); - - this.resolution = { - x: 720, - y: 1280 - } - - this.orientation = PROTOCOL_CONFIG.ORIENTATION[0]; - - this.curResolution = {...PROTOCOL_CONFIG.DEFAULT_RESOLUTION}; - this.nextResolution = {...PROTOCOL_CONFIG.DEFAULT_RESOLUTION}; - this.frameParser = new FrameParser(this.options.supportAudio); - } - - updateResolutionAndTouch() { - if (this.player) { - // resize之前更新canvas大小 - if (!this.options.isMobile) { - this.directionHandler.updateCanvasSize(this.orientation, this.isMSE); - } - this.touchHandler.updateOrientation(this.orientation); - this.autoRotation && this.autoRotation.updateOrientation(this.orientation); - this.directionHandler.update(this.orientation, this.touchHandler.displayBox); - } - } - - init() { - let crypt = new AESGCMCrypto(); - let iv = crypt.iv(); - let verifiedData = { - ip: this.options.phoneIp, - port: this.options.phonePort, - session_id: this.sessionId, - backgroundTimeout: this.options.backgroundTimeout, - available_playtime: this.options.availablePlayTime, - user_id: this.options.userId - } - - let encryptedData = {...verifiedData, touch_timeout: this.options.touchTimeout}; - Promise.all([ - crypt.encrypt(JSON.stringify(encryptedData), this.options.aesKey, iv), - crypt.abstract(Object.values(verifiedData).join('')) - ]).then(([cipherText, verifyText]) => { - this.startParams = { - user_id: this.options.user_id, - ticket: this.options.ticket, - session_id: this.options.session_id, - auth_ts: this.options.auth_ts, - verify_data: verifyText, - encrypted_data: cipherText, - aes_iv: iv, - sdk_version: this.options.sdkVersion, - protocol_version: 'v2', - client_type: '3', - media_config: { - ...this.options.mediaConfig, - frame_type: FRAME_TYPE_MAP.TYPE264 - } - }; - this._connect(); - - this.keyboardInput = new KeyboardInput(this.options.containerId, this.sendMessage); - this.keyboardInput.init(); - this.touchHandler = new TouchHandler({ - player: this.player, - isMobile: this.options.isMobile, - sendHandler: this.sendMessage2, - isDebug: this.options.isDebug, - autoRotate: this.options.autoRotate, - inputId: this.keyboardInput && this.keyboardInput.inputId || '' - }); - this.touchHandler.start(); - if (this.touchHandler.displayBox.width && this.touchHandler.displayBox.height) { - const ctrlEle = document.getElementById('controlBtn'); - const containerEle = document.getElementById('container'); - const left = (containerEle.offsetWidth - this.touchHandler.displayBox.width) / 2 + 20; - const top = (containerEle.offsetHeight - this.touchHandler.displayBox.height) / 2 + 125; - if (this.options.isMobile) { - ctrlEle.style.top = `20%`; - ctrlEle.style.left = `5%`; - } else { - ctrlEle.style.top = `${top}px`; - ctrlEle.style.left = `${left}px`; - } - } - - if (this.options.autoRotate) { - this.autoRotation = new AutoRotation(this.options.containerId, - DEFAULT_ORIENTATION, this.options.isMobile, rotateDegrees => { - // 旋转后更新触控,并根据旋转角度判断使用云机键盘还是真机键盘 - this.touchHandler.resize(); - }); - this.autoRotation.init(); - } - - this.directionHandler = new DirectionHandler({ - containerId: this.options.containerId, - isMobile: this.options.isMobile, - playerContainerId: this.playerContainer - }); - - this.listenPlayerSizeChange(); - this.updateResolution(); - }); - } - - updateResolution() { - if (this.curResolution.width === this.nextResolution.width && this.curResolution.height === this.nextResolution.height) { - return; - } - - this.touchHandler.updateResolution(this.nextResolution.width, this.nextResolution.height); - this.curResolution = this.nextResolution; - } - - listenPlayerSizeChange() { - if (this.isMSE) { - // 视频元信息加载完成后,主动触发 resize 事件更新相关坐标位置 - this.loadedmetadataCallback = () => { - this.touchHandler.resize(); - // 使用完毕移除事件监听 - this.player.removeEventListener('loadedmetadata', this.loadedmetadataCallback); - this.loadedmetadataCallback = null; - }; - - this.player.addEventListener('loadedmetadata', this.loadedmetadataCallback); - - // video 大小变化时需要持续更新坐标位置 - this.videoResizeCallback = () => { - this.touchHandler.resize(); - }; - - this.player.addEventListener('resize', this.videoResizeCallback); - } else { - // 监听 canvas 大小变化 - const MutationObserver = window.MutationObserver; - this.canvasObserver = new MutationObserver(mutations => { - mutations.forEach(mutation => { - if (mutation.attributeName === 'width' || mutation.attributeName === 'height') { - this.touchHandler.resize(); - } - }); - }); - this.canvasObserver.observe(this.player, {attributes: true}); - } - } - - async _connect() { - this._initPlayer(); - this._initHandler(); - this._createEngine(); - this._initClientEvent(); - this._joinRoomPre() - await this._joinRoom(); - await this._joinRoomPost(); - } - - destroy() { - this.messageHandler.sendStopCmdControl(); - setTimeout(() => { - this._stopHeartBeat(); - this.touchController.destroy(); - this.stream.unsubscribe(); - this.client.leave().then(r => console.log("leave success!")); - }, 1000); - } - - getVolume() { - return this.options.volume; - } - - setVolume(value) { - this.options.volume = value; - } - - pause() { - this.messageHandler.sendPauseCmdControl(); - } - - resume() { - this.messageHandler.sendResumeCmdControl(); - } - - reconnect() { - this.destroy(); - this.init(); - } - - fullscreenToggle(fullscreenElementId) { - if (this.fullscreenStatus) { - this._exitFullscreen(); - } else { - this._enterFullscreen(fullscreenElementId); - } - } - - isFullscreen() { - return this.fullscreenStatus; - } - - on(eventName, callback) { - this.subscribe.on(eventName, callback); - } - - off(eventName, callback) { - this.subscribe.off(eventName, callback); - } - - setResolution(clarityVal) { - const frameType = 'H264'; - - const allMediaConfig = PROTOCOL_CONFIG[frameType]; - const config = allMediaConfig[`${mediaWidth}P`][clarityVal]; - this.setMediaConfig(config); - } - - setMediaConfig(config) { - this.messageHandler.sendMediaConfig(config); - } - - sendMessage(message) { - return this.client.sendCommandMsg(message); - } - - sendMessage2(message) { - } - - _generateGUID() { - return 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, c => { - const r = AESGCMCrypto.getRandomValue() * 16 | 0; - const v = c === 'x' ? r : (r & 0x3 | 0x8); - return v.toString(16); - }); - } - - _initPlayer() { - this.player = document.createElement('div'); - this.player.id = PLAYER; - this.player.style.margin = '0 auto'; - - this.rtcStatsInfo = document.createElement('p'); - this.rtcStatsInfo.style.color = 'white'; - this.rtcStatsInfo.style.backgroundColor = 'green'; - this.rtcStatsInfo.style.fontSize = '6px'; - - this.fullscreenBtn = document.createElement('button'); - this.fullscreenBtn.innerHTML = "全屏"; - this.fullscreenBtn.addEventListener('click', () => { - this.fullscreenToggle(); - }); - - this.playBtn = document.createElement('button'); - this.playBtn.innerHTML = "播放"; - this.playBtn.disabled = true; - this.playBtn.addEventListener('click', () => { - this.stream.resume(); - }); - - this.rtcContainer = document.createElement('div'); - this.rtcContainer.style.position = 'fixed'; - this.rtcContainer.style.left = '0px'; - this.rtcContainer.style.top = '0px'; - - this.rtcContainer.appendChild(this.rtcStatsInfo); - this.rtcContainer.appendChild(this.fullscreenBtn); - this.rtcContainer.appendChild(this.playBtn); - - this.playerContainer = document.createElement('div'); - this.playerContainer.style.margin = '0 auto'; - this.playerContainer.appendChild(this.player); - this.playerContainer.appendChild(this.rtcContainer); - - const container = document.getElementById(this.options.containerId); - container.appendChild(this.playerContainer); - - document.addEventListener('webkitfullscreenchange', this._fullscreenStateRefresh.bind(this)); - document.addEventListener('mozfullscreenchange', this._fullscreenStateRefresh.bind(this)); - document.addEventListener('fullscreenchange', this._fullscreenStateRefresh.bind(this)); - document.addEventListener('msFullscreenChange', this._fullscreenStateRefresh.bind(this)); - } - - _initHandler() { - this.messageHandler = new MessageHandler(this.sendMessage.bind(this), this.options); - this.touchController = new TouchController({ - resolution: this.resolution, - player: this.player, - messageHandler: this.messageHandler - }); - this.touchController.init(); - } - - _createEngine() { - this.client = HRTC.createClient({ - appId: this.options.appId, - countryCode: 'CN', - }); - console.log(`rtc engine version:${HRTC.VERSION}`); - } - - _initClientEvent() { - this.client.off('Error'); - this.client.off('peer-join'); - this.client.off('peer-leave'); - this.client.off('stream-added'); - this.client.off('stream-updated'); - this.client.off('stream-removed'); - this.client.off('stream-subscribed'); - this.client.off('rtc-stats'); - this.client.off('network-quality'); - this.client.off('cmd-msg-received'); - - this.client.on('Error', (errorInfo) => { - console.log(`Error:${JSON.stringify(errorInfo)}`); - }); - this.client.on('peer-join', (event) => { - console.log(`peer-join`); - this.cloudOnline = true; - }); - this.client.on('peer-leave', (event) => { - console.log(`peer-leave`); - this.cloudOnline = false; - this.isSendStartCmdControl = false; - }); - this.client.on('stream-added', (event) => { - console.log(`stream-add`); - this._subscribeStream(event.stream); - this._sendStartCmdControl(); - }); - this.client.on('stream-updated', (event) => { - console.log('stream-updated'); - this._subscribeStream(event.stream); - }); - this.client.on('stream-removed', (event) => { - console.log('stream-removed'); - this._streamClose(event.stream); - }); - this.client.on('stream-subscribed', (event) => { - console.log('stream-subscribed'); - this._streamPlay(event.stream); - }); - this.client.on('rtc-stats', (rtcStatsInfo) => { - this._dealRtcStats(rtcStatsInfo); - }); - this.client.on('network-quality', (networkQualityInfo) => { - console.log(`network-quality:${JSON.stringify(networkQualityInfo)}`); - }); - this.client.on('cmd-msg-received', (commandMsgInfo) => { - this._dealCommandMsgInfo(commandMsgInfo); - }); - this.client.on('cmd-channel-established', () => { - console.log('cmd-channel-established'); - this.cmdChannelEstablished = true; - this._sendStartCmdControl(); - }); - } - - _sendStartCmdControl() { - if (this.isSendStartCmdControl || !this.cmdChannelEstablished || !this.cloudOnline) { - // 已发送、未建立通道、云机不在线情况,不发送cmd start,直接返回 - console.log(`_sendStartCmdControl return isSendStartCmdControl:${this.isSendStartCmdControl}, cmdChannelEstablished:${this.cmdChannelEstablished}, cloudOnline:${this.cloudOnline}`); - return; - } - let ret = this.messageHandler.sendStartCmdControl(this.startParams); - console.log(`_sendStartCmdControl ret:${ret}`); - if (ret) { - this.isSendStartCmdControl = true; - } - } - - _joinRoomPre() { - this.client.enableCommandMsg(true); - this.client.setNetworkBandwidth({maxBandwidth: 30 * 1024}); - } - - async _joinRoom() { - try { - const userInfo = this._getUserInfo(); - await this.client.join(this.options.roomId, { - userId: userInfo.userId, - username: userInfo.userId, - signature: userInfo.signature, - ctime: userInfo.ctime, - role: userInfo.role, - }); - } catch (e) { - console.log(`join room failure:${e}`); - } - } - - async _joinRoomPost() { - await this.client.enableRtcStats(true, 1000); - } - - _getUserInfo() { - const signatureCtime = 12 * 60 * (60 - 2) * 1000; - const ctime = Math.floor((signatureCtime + new Date().getTime()) / 1000); - - let message; - const authWithRole = this.options.authWithRole; - if (authWithRole) { - message = `${this.options.appId}+${this.options.roomId}+${this.options.userId}+${this.options.role}+${ctime}`; - } else { - message = `${this.options.appId}+${this.options.roomId}+${this.options.userId}+${ctime}`; - } - const signature = HmacSHA256(message, this.options.appKey).toString(); - return { - userId: this.options.userId, - signature: signature, - ctime: ctime, - role: 0, - } - } - - async _subscribeStream(stream) { - return this.client.subscribe(stream, { - video: true, - audio: true, - }); - } - - async _streamPlay(stream) { - this.playBtn.disabled = false; - this.stream = stream; - return stream.play(PLAYER, { - objectFit: 'contain', - muted: false - }); - } - - _streamClose(stream) { - stream.close(); - this.stream = null; - this.playBtn.disabled = true; - } - - _startHeartBeat() { - this.heartBeatTimer = setTimeout(() => { - this._stopHeartBeat(); - this.messageHandler.sendHeartBeat(); - this._startHeartBeat(); - }, 100); - } - - _stopHeartBeat() { - if (this.heartBeatTimer) { - clearTimeout(this.heartBeatTimer); - } - } - - _configEnv(env) { - switch (env) { - case 'root': - this._configRoot(); - break; - case 'gammagreen': - this._configGammagreen(); - break; - case 'gammablue': - this._configGammablue(); - break; - } - } - - _configRoot() { - HRTC.setParameter('FRAME_ENCRYPTION_MODE', 3); - this.options.authWithRole = false; - } - - _configGammagreen() { - HRTC.setParameter('ENVIRONMENT_SUFFIX', {grsKey: 'GREEN', pathSuffix: 'gammagreen'}); - HRTC.setParameter('GRS_LOCAL_EXT_INFO', { - rtc_webjs_grs_sdk_global_route_config: rtc_webjs_grs_sdk_global_route_config, - }); - this.options.authWithRole = false; - } - - _configGammablue() { - HRTC.setParameter('FRAME_ENCRYPTION_MODE', 3); - HRTC.setParameter('GRS_LOCAL_EXT_INFO', { - rtc_webjs_grs_sdk_global_route_config: rtc_webjs_grs_sdk_global_route_config, - }); - this.options.authWithRole = true; - } - - _enterFullscreen(fullscreenElementId) { - this.fullscreenEle = document.getElementById(fullscreenElementId) || document.documentElement; - - const requestMethod = this.fullscreenEle.requestFullScreen // W3C - || this.fullscreenEle.mozRequestFullScreen // Chrome 等 - || this.fullscreenEle.webkitRequestFullScreen // FireFox - || this.fullscreenEle.msRequestFullScreen; // IE11 - if (requestMethod) { - requestMethod.call(this.fullscreenEle); - } - this.fullscreenStatus = true; - } - - _exitFullscreen() { - const exitMethod = document.exitFullscreen // W3C - || document.mozCancelFullScreen // FireFox - || document.webkitExitFullscreen // Chrome 等 - || document.msExitFullscreen; // IE11 - if (exitMethod) { - exitMethod.call(document); - } - this.fullscreenStatus = false; - } - - _dealRtcStats(rtcStatsInfo) { - function getStats(info, stats) { - return info[stats] !== undefined ? stats + ':' + info[stats] + ' |' : ''; - } - - let infoStr = ''; - for (let i = 0, len = rtcStatsInfo.length; i < len; i++) { - let info = rtcStatsInfo[i]; - infoStr += ` - ${info.mediaType}: - ${getStats(info, 'bitrate')} - ${getStats(info, 'frameRate')} - ${getStats(info, 'rtt')} - ${getStats(info, 'jitter')} - ${getStats(info, 'pktLossRate')} -
- ` - } - this.rtcStatsInfo.innerHTML = infoStr; - } - - _dealCommandMsgInfo(commandMsgInfo) { - console.log(`_dealCommandMsgInfo:${commandMsgInfo.msg}`); - this.messageHandler.dealReceiveMsg( - commandMsgInfo.msg, - { - cmdControlCallback: this._dealCmdControlCallback.bind(this), - heartBeatCallback: this._dealHeartBeatCallback.bind(this), - orientationCallback: this._dealOrientationCallback.bind(this), - keyboardInputCallback: this._dealKeyboardInputCallback.bind(this), - cameraCallback: this._dealCameraCallback.bind(this), - microphoneCallback: this._dealMicrophoneCallback.bind(this), - phoneControlCallback: this._dealPhoneControlCallback.bind(this), - } - ) - } - - _dealCmdControlCallback(code) { - console.log(`cmd control callback:${code}`); - const codeConfig = PROTOCOL_CONFIG.CMD_RESP_TYPE; - switch (code) { - case codeConfig.CONNECT_FAILED: - case codeConfig.VERIFY_FAILED: - case codeConfig.START_FAILED: - Logger.debug('Receive failed response, destroy'); - this.destroy(); - break; - case codeConfig.PLAY_TIMEOUT: - Logger.debug('Play timeout, destroy'); - this.destroy(); - break; - case codeConfig.TOUCH_TIMEOUT: - Logger.debug('Touch timeout, destroy'); - this.destroy(); - break; - case codeConfig.PAUSE_TIMEOUT: - Logger.debug('Pause timeout, destroy'); - this.destroy(); - break; - case codeConfig.MEDIA_CONFIG_SUCCESS: - Logger.debug('Setting media config success'); - this.updateResolution(); - break; - case codeConfig.START_SUCCESS: - Logger.debug('START_SUCCESS'); - break; - case codeConfig.INVALID_OPERATION: - case codeConfig.RECONNECT_PARAMETER_INVALID: - case codeConfig.RECONNECT_SERVER_UNREACHABLE: - case codeConfig.RECONNECT_ENGING_START_ERROR: - Logger.debug('RECONNECT_FAILED'); - break; - case codeConfig.H265_NOT_SUPPORT: - Logger.debug('H265_NOT_SUPPORT'); - break; - default: - break; - } - } - - _dealHeartBeatCallback(msg) { - console.log(`heart beat callback:${msg}`); - } - - _dealOrientationCallback(orientation) { - console.log(`orientation callback:${orientation}`); - this.orientation = orientation; - this.updateResolutionAndTouch(); - } - - _dealKeyboardInputCallback(msg) { - console.log(`keyboard input callback:${msg}`); - if (!this.keyboardInput || msg.length < PROTOCOL_CONFIG.KEYBOARD_INPUT_HEADER_LENGTH) { - return; - } - const [type, highBytesSize, lowByteSize] = msg; - if (type === PROTOCOL_CONFIG.KEYBOARD_INPUT_MSG_TYPE.INPUT_EVENT) { - const len = (highBytesSize << 8) + lowByteSize; - const input = len > 0 ? this.util.decodeUTF8(msg, PROTOCOL_CONFIG.KEYBOARD_INPUT_HEADER_LENGTH, - PROTOCOL_CONFIG.KEYBOARD_INPUT_HEADER_LENGTH + len) : ''; - this.keyboardInput.start(input); - this.touchHandler.updateKeyBoardMode('KEYBOARD_INPUT'); - } else if (type === PROTOCOL_CONFIG.KEYBOARD_INPUT_MSG_TYPE.HIDE_KEYBOARD_EVENT) { - this.keyboardInput.stop(); - this.touchHandler.updateKeyBoardMode('KEYBOARD_MAP'); - } - } - - _dealCameraCallback(msg) { - console.log(`camera callback:${msg}`); - } - - _dealMicrophoneCallback(msg) { - console.log(`microphone callback:${msg}`); - } - - _dealPhoneControlCallback(msg) { - console.log(`phone control callback:${msg}`); - if (!msg) { - return; - } - const buf = new Uint8Array(msg); - if (!buf.length) { - return; - } - const code = buf[0]; - const stateConfig = PROTOCOL_CONFIG.PHONE_CONNECTION_STATE[code]; - if (stateConfig) { - Logger.debug(stateConfig.message); - this.appState = stateConfig; - this.subscribe.trigger('appStateChange', {...this.appState}); - } - } - - _fullscreenStateRefresh() { - this.fullscreenStatus = Boolean(document.fullscreenElement - || document.msFullscreenElement - || document.mozFullScreenElement - || document.webkitFullscreenElement); - console.log(`_fullscreenStateRefresh:${this.isFullscreen()}`); - if (this.isFullscreen()) { - this.fullscreenBtn.innerHTML = '退出全屏'; - } else { - this.fullscreenBtn.innerHTML = '全屏'; - } - } -} - -export default RTCChannel; \ No newline at end of file diff --git a/sdk/src/rtc/RTCCloudApp.js b/sdk/src/rtc/RTCCloudApp.js deleted file mode 100644 index 8d275f7..0000000 --- a/sdk/src/rtc/RTCCloudApp.js +++ /dev/null @@ -1,67 +0,0 @@ -import RTCChannel from "./RTCChannel"; - -class RTCCloudApp { - constructor(containerId, options) { - this.options = {containerId: containerId, ...options} - this.rtcChannel = new RTCChannel(this.options); - this.rtcChannel.init(); - - window.addEventListener('pagehide', () => { - this.exit(); - }); - } - - getVolume() { - return this.rtcChannel.getVolume(); - } - - setVolume(value) { - this.rtcChannel.setVolume(value); - } - - exit() { - this.rtcChannel.destroy(); - } - - pause() { - this.rtcChannel.pause(); - } - - resume() { - this.rtcChannel.resume(); - } - - reconnect() { - this.rtcChannel.reconnect(); - } - - fullscreenToggle(fullscreenElementId) { - this.rtcChannel.fullscreenToggle(fullscreenElementId); - } - - isFullscreen() { - return this.rtcChannel.isFullscreen(); - } - - on(eventName, callback) { - this.rtcChannel.on(eventName, callback); - } - - off(eventName, callback) { - this.rtcChannel.off(eventName, callback); - } - - setResolution(clarityVal) { - this.rtcChannel.setResolution(clarityVal); - } - - setMediaConfig(config) { - this.rtcChannel.setMediaConfig(config); - } - - sendDataToCloudApp(data) { - this.rtcChannel.sendMessage(data); - } -} - -export default RTCCloudApp \ No newline at end of file diff --git a/sdk/src/rtc/TouchController.js b/sdk/src/rtc/TouchController.js deleted file mode 100644 index 935b119..0000000 --- a/sdk/src/rtc/TouchController.js +++ /dev/null @@ -1,276 +0,0 @@ -import PROTOCOL_CONFIG from "../config/protocolConfig"; - -class TouchController { - constructor(options) { - this.options = options; - } - - setResolution(resolution) { - this.options.resolution = resolution; - } - - init() { - this._initPlayer(); - this._initMouseEventListener(); - this._initTouchEventListener(); - this._initWindowsEventListener(); - } - - destroy() { - - } - - _initPlayer() { - let resolution = this.options.resolution; - - const documentW = document.documentElement.clientWidth; - const documentH = document.documentElement.clientHeight; - - const resolutionRatio = resolution.x / resolution.y; - const documentRatio = documentW / documentH; - - let w; - let h; - if (resolutionRatio > documentRatio) { - w = documentW; - h = w * resolution.y / resolution.x; - } else { - h = documentH; - w = h * resolution.x / resolution.y; - } - - this.options.player.style.width = w + 'px'; - this.options.player.style.height = h + 'px'; - this.options.player.style.marginTop = (documentH - h) / 2 + 'px'; - - this.ratio = resolution.x / w; - } - - _initMouseEventListener() { - this.options.player.addEventListener('mousedown', this._onMouseDown.bind(this)); - this.options.player.addEventListener('mousemove', this._onMouseMove.bind(this)); - this.options.player.addEventListener('mouseup', this._onMouseUp.bind(this)); - } - - _initTouchEventListener() { - this.options.player.addEventListener('touchstart', this._onTouchStart.bind(this)); - this.options.player.addEventListener('touchmove', this._onTouchMove.bind(this)); - this.options.player.addEventListener('touchend', this._onTouchEnd.bind(this)); - this.options.player.addEventListener('touchcancel', this._onTouchCancel.bind(this)); - } - - _initWindowsEventListener() { - window.addEventListener('resize', this._onResize.bind(this)); - } - - _onMouseDown(event) { - this._preventDefault(event); - this.isMouseDown = true; - this._sendTouchEvent({ - touchId: 0, - touchEvent: event, - isTouchPointer: false, - touchFunc: '_sendTouchStart' - }); - } - - _onMouseMove(event) { - this._preventDefault(event); - if (!this.isMouseDown) { - return; - } - this._sendTouchEvent({ - touchId: 0, - touchEvent: event, - isTouchPointer: false, - touchFunc: '_sendTouchMove' - }); - } - - _onMouseUp(event) { - this._preventDefault(event); - this.isMouseDown = false; - this._sendTouchEvent({ - touchId: 0, - touchEvent: event, - isTouchPointer: false, - touchFunc: '_sendTouchEnd' - }); - } - - _onTouchStart(event) { - this._preventDefault(event); - const touchList = event['changedTouches'] || {length: 0}; - for (let len = touchList.length, index = 0; index < len; index++) { - const touch = touchList.item(index); - const touchId = this._getTouchId(touch); - this._sendTouchEvent({ - touchId: touchId, - touchEvent: touch, - isTouchPointer: this._isMultiPointer(), - touchFunc: '_sendTouchStart', - touchPointerFunc: '_sendTouchPointerStart' - }); - } - } - - _onTouchMove(event) { - this._preventDefault(event); - const touchList = event['changedTouches'] || {length: 0}; - for (let len = touchList.length, index = 0; index < len; index++) { - const touch = touchList.item(index); - const touchId = this._getTouchId(touch); - this._sendTouchEvent({ - touchId: touchId, - touchEvent: touch, - isTouchPointer: this._isMultiPointer(), - touchFunc: '_sendTouchMove', - touchPointerFunc: '_sendTouchMove' - }); - } - } - - _onTouchEnd(event) { - this._preventDefault(event); - const touchList = event['changedTouches'] || {length: 0}; - for (let len = touchList.length, index = 0; index < len; index++) { - const touch = touchList.item(index); - const touchId = this._getTouchId(touch); - this._sendTouchEvent({ - touchId: touchId, - touchEvent: touch, - isTouchPointer: this._isMultiPointer(), - touchFunc: '_sendTouchEnd', - touchPointerFunc: '_sendTouchPointerEnd' - }); - this._freeTouchId(touchId); - this.touchIdMap.delete(touch.identifier); - } - } - - _onTouchCancel(event) { - this._onTouchEnd(event); - } - - _onResize() { - this._initPlayer(); - } - - _preventDefault(event) { - event.stopPropagation(); - event.preventDefault(); - } - - _getEventPos(event) { - const documentRect = document.documentElement.getClientRects().item(0); - const displayRect = this.options.player.getClientRects().item(0); - return { - x: Math.max(event.pageX - displayRect.left, 0), - y: Math.max(event.pageY - displayRect.top + documentRect.top, 0), - } - } - - _sendTouchEvent(touchInfo) { - const eventPos = this._getEventPos(touchInfo.touchEvent); - if (touchInfo.isTouchPointer && touchInfo.touchPointerFunc) { - this[touchInfo.touchPointerFunc](touchInfo.touchId, { - x: eventPos.x * this.ratio, - y: eventPos.y * this.ratio - }); - return; - } - this[touchInfo.touchFunc](touchInfo.touchId, { - x: eventPos.x * this.ratio, - y: eventPos.y * this.ratio - }); - } - - _sendTouchStart(touchId, touchPos) { - this.options.messageHandler.sendTouchMsgData({ - action: PROTOCOL_CONFIG.ACTIONS_TYPE.DOWN, - ...this._generateMouseCommonData(touchId, touchPos) - }); - } - - _sendTouchPointerStart(touchId, touchPos) { - this.options.messageHandler.sendTouchMsgData({ - action: PROTOCOL_CONFIG.ACTIONS_TYPE.POINTER_DOWN, - ...this._generateMouseCommonData(touchId, touchPos) - }); - } - - _sendTouchMove(touchId, touchPos) { - this.options.messageHandler.sendTouchMsgData({ - action: PROTOCOL_CONFIG.ACTIONS_TYPE.MOVE, - ...this._generateMouseCommonData(touchId, touchPos) - }); - } - - _sendTouchPointerEnd(touchId, touchPos) { - this.options.messageHandler.sendTouchMsgData({ - action: PROTOCOL_CONFIG.ACTIONS_TYPE.POINTER_UP, - ...this._generateMouseCommonData(touchId, touchPos) - }); - } - - _sendTouchEnd(touchId, touchPos) { - this.options.messageHandler.sendTouchMsgData({ - action: PROTOCOL_CONFIG.ACTIONS_TYPE.UP, - ...this._generateMouseCommonData(touchId, touchPos) - }); - } - - _generateMouseCommonData(touchId, touchPos) { - const boundingClientRect = this.options.player.getBoundingClientRect(); - const w = boundingClientRect.width * this.ratio; - const h = boundingClientRect.height * this.ratio; - return { - id: touchId, - x: touchPos.x, - y: touchPos.y, - pressure: 129, - time: -1, - orientation: 0, - height: h, - width: w - } - } - - _getTouchId(touchEvent) { - if (!this.touchIdMap) { - this.touchIdMap = new Map(); - } - let touchIdMap = this.touchIdMap; - let touchId = touchIdMap.get(touchEvent.identifier); - if (touchId === null || touchId === undefined) { - touchId = this._allocateTouchId(); - } - touchIdMap.set(touchEvent.identifier, touchId); - return touchId; - } - - _allocateTouchId() { - if (!this.touchIds) { - this.touchIds = new Uint8Array(20); - } - let touchIds = this.touchIds; - const index = touchIds.indexOf(0); - if (index === -1) { - touchIds.map(() => 0); - touchIds[0] = 1; - return 0; - } - touchIds[index] = 1; - return index; - } - - _freeTouchId(touchId) { - this.touchIds[touchId] = 0; - } - - _isMultiPointer() { - return this.touchIdMap.size > 1; - } -} - -export default TouchController; \ No newline at end of file diff --git a/sdk/src/rtc/grs.js b/sdk/src/rtc/grs.js deleted file mode 100644 index 962e939..0000000 --- a/sdk/src/rtc/grs.js +++ /dev/null @@ -1,695 +0,0 @@ -export const rtc_webjs_grs_sdk_global_route_config = { - grs_sdk_global_route_config_hwrtc: { - applications: [], - services: [ - { - name: 'com.huawei.cloud.videortn', - routeBy: 'ser_country>geo_ip', - servings: [ - { - countryOrAreaGroup: 'DR1', - addresses: { - GLOBAL: 'wss://rtc.platform.dbankcloud.com', - GREEN: 'wss://vediortn-green.huaweicloud.cn:8445', - BLUE: 'wss://rtcmirror.hwcloudtest.cn:8445', - ROOT: 'wss://rtc-drcn.platform.dbankcloud.com', - }, - }, - { - countryOrAreaGroup: 'DR2', - addresses: { - GLOBAL: 'wss://rtc.platform.dbankcloud.com', - GREEN: 'wss://vediortn-green.huaweicloud.cn:8445', - BLUE: 'wss://rtcmirror.hwcloudtest.cn:8445', - ROOT: 'wss://rtc-dra.platform.dbankcloud.com', - }, - }, - { - countryOrAreaGroup: 'DR3', - addresses: { - GLOBAL: 'wss://rtc.platform.dbankcloud.com', - GREEN: 'wss://vediortn-green.huaweicloud.cn:8445', - BLUE: 'wss://rtcmirror.hwcloudtest.cn:8445', - ROOT: 'wss://rtc-dre.platform.dbankcloud.com', - }, - }, - { - countryOrAreaGroup: 'DR4', - addresses: { - GLOBAL: 'wss://rtc.platform.dbankcloud.com', - GREEN: 'wss://vediortn-green.huaweicloud.cn:8445', - BLUE: 'wss://rtcmirror.hwcloudtest.cn:8445', - ROOT: 'wss://rtc-drru.platform.dbankcloud.com', - }, - }, - ], - countryOrAreaGroups: [], - }, - ], - countryOrAreaGroups: [ - { - id: 'DR1', - name: 'China', - countriesOrAreas: ['CN'], - description: 'China zone', - }, - { - id: 'DR2', - name: 'Asian-African-Latin American', - countriesOrAreas: [ - 'AE', - 'AF', - 'AG', - 'AI', - 'AM', - 'AO', - 'AQ', - 'AR', - 'AS', - 'AW', - 'AZ', - 'BB', - 'BD', - 'BF', - 'BH', - 'BI', - 'BJ', - 'BL', - 'BM', - 'BN', - 'BO', - 'BR', - 'BS', - 'BT', - 'BV', - 'BW', - 'BY', - 'BZ', - 'CC', - 'CD', - 'CF', - 'CG', - 'CI', - 'CK', - 'CL', - 'CM', - 'CO', - 'CR', - 'CU', - 'CV', - 'CX', - 'DJ', - 'DM', - 'DO', - 'DZ', - 'EC', - 'EG', - 'EH', - 'ER', - 'ET', - 'FJ', - 'FK', - 'FM', - 'GA', - 'GD', - 'GE', - 'GF', - 'GH', - 'GM', - 'GN', - 'GP', - 'GQ', - 'GS', - 'GT', - 'GU', - 'GW', - 'GY', - 'HK', - 'HM', - 'HN', - 'HT', - 'ID', - 'IN', - 'IO', - 'IQ', - 'JM', - 'JO', - 'JP', - 'KE', - 'KG', - 'KH', - 'KI', - 'KM', - 'KN', - 'KP', - 'KR', - 'KW', - 'KY', - 'KZ', - 'LA', - 'LB', - 'LC', - 'LK', - 'LR', - 'LS', - 'LY', - 'MA', - 'MG', - 'MH', - 'ML', - 'MM', - 'MN', - 'MO', - 'MP', - 'MQ', - 'MR', - 'MS', - 'MU', - 'MV', - 'MW', - 'MX', - 'MY', - 'MZ', - 'NA', - 'NC', - 'NE', - 'NF', - 'NG', - 'NI', - 'NP', - 'NR', - 'NU', - 'OM', - 'PA', - 'PE', - 'PF', - 'PG', - 'PH', - 'PK', - 'PN', - 'PR', - 'PS', - 'PW', - 'PY', - 'QA', - 'RE', - 'RW', - 'SA', - 'SB', - 'SC', - 'SD', - 'SG', - 'SH', - 'SL', - 'SN', - 'SO', - 'SR', - 'SS', - 'ST', - 'SV', - 'SY', - 'SZ', - 'TC', - 'TD', - 'TF', - 'TG', - 'TH', - 'TJ', - 'TK', - 'TL', - 'TM', - 'TN', - 'TO', - 'TT', - 'TV', - 'TW', - 'TZ', - 'UG', - 'UY', - 'UZ', - 'VE', - 'VG', - 'VI', - 'VN', - 'VU', - 'WF', - 'WS', - 'YE', - 'YT', - 'ZA', - 'ZM', - 'ZW', - ], - description: 'Asian-African-Latin American zone', - }, - { - id: 'DR3', - name: 'Europe', - countriesOrAreas: [ - 'AD', - 'AL', - 'AN', - 'AT', - 'AU', - 'AX', - 'BA', - 'BE', - 'BG', - 'BQ', - 'CA', - 'CH', - 'CW', - 'CY', - 'CZ', - 'DE', - 'DK', - 'EE', - 'ES', - 'FI', - 'FO', - 'FR', - 'GB', - 'GG', - 'GI', - 'GL', - 'GR', - 'HR', - 'HU', - 'IE', - 'IL', - 'IM', - 'IS', - 'IT', - 'JE', - 'LI', - 'LT', - 'LU', - 'LV', - 'MC', - 'MD', - 'ME', - 'MF', - 'MK', - 'MT', - 'NL', - 'NO', - 'NZ', - 'PL', - 'PM', - 'PT', - 'RO', - 'RS', - 'SE', - 'SI', - 'SJ', - 'SK', - 'SM', - 'SX', - 'TR', - 'UA', - 'UM', - 'US', - 'VA', - 'VC', - 'XK', - 'YK', - ], - description: 'Europe zone', - }, - { - id: 'DR4', - name: 'Russia', - countriesOrAreas: ['RU'], - description: 'Russia zone', - }, - { - id: 'DR5', - name: 'A2', - countriesOrAreas: ['IR'], - description: 'A2 zone', - }, - ], - }, - grs_sdk_global_route_config_rtcha: { - applications: [], - services: [ - { - name: 'com.huawei.cloud.hianalytics', - routeBy: 'ser_country', - servings: [ - { - countryOrAreaGroup: 'DR1', - addresses: { - ROOT: 'https://metrics1.data.hicloud.com:6447', - }, - }, - { - countryOrAreaGroup: 'DR2', - addresses: { - ROOT: 'https://metrics3.data.hicloud.com:6447', - }, - }, - { - countryOrAreaGroup: 'DR3', - addresses: { - ROOT: 'https://metrics2.data.hicloud.com:6447', - }, - }, - { - countryOrAreaGroup: 'DR4', - addresses: { - ROOT: 'https://metrics5.data.hicloud.com:6447', - }, - }, - { - countryOrAreaGroup: 'DR5', - addresses: { - ROOT: 'https://metrics4.data.hicloud.com:6447', - }, - }, - ], - countryOrAreaGroups: [], - }, - { - name: 'com.huawei.cloud.hianalytics.aspg', - routeBy: 'ser_country', - servings: [ - { - countryOrAreaGroup: 'DR1', - addresses: { - ROOT: 'https://metrics1.data.hicloud.com:6447', - }, - }, - { - countryOrAreaGroup: 'DR2', - addresses: { - ROOT: 'https://metrics-dra.dt.hicloud.com:6447', - }, - }, - { - countryOrAreaGroup: 'DR3', - addresses: { - ROOT: 'https://metrics2.data.hicloud.com:6447', - }, - }, - { - countryOrAreaGroup: 'DR4', - addresses: { - ROOT: 'https://metrics5.data.hicloud.com:6447', - }, - }, - { - countryOrAreaGroup: 'DR5', - addresses: { - ROOT: 'https://metrics4.data.hicloud.com:6447', - }, - }, - ], - countryOrAreaGroups: [], - }, - ], - countryOrAreaGroups: [ - { - id: 'DR1', - name: 'China', - countriesOrAreas: ['CN'], - description: 'China zone', - }, - { - id: 'DR2', - name: 'Asian-African-Latin American', - countriesOrAreas: [ - 'AE', - 'AF', - 'AG', - 'AI', - 'AM', - 'AO', - 'AQ', - 'AR', - 'AS', - 'AW', - 'AZ', - 'BB', - 'BD', - 'BF', - 'BH', - 'BI', - 'BJ', - 'BL', - 'BM', - 'BN', - 'BO', - 'BR', - 'BS', - 'BT', - 'BV', - 'BW', - 'BY', - 'BZ', - 'CC', - 'CD', - 'CF', - 'CG', - 'CI', - 'CK', - 'CL', - 'CM', - 'CO', - 'CR', - 'CU', - 'CV', - 'CX', - 'DJ', - 'DM', - 'DO', - 'DZ', - 'EC', - 'EG', - 'EH', - 'ER', - 'ET', - 'FJ', - 'FK', - 'FM', - 'GA', - 'GD', - 'GE', - 'GF', - 'GH', - 'GM', - 'GN', - 'GP', - 'GQ', - 'GS', - 'GT', - 'GU', - 'GW', - 'GY', - 'HK', - 'HM', - 'HN', - 'HT', - 'ID', - 'IN', - 'IO', - 'IQ', - 'JM', - 'JO', - 'JP', - 'KE', - 'KG', - 'KH', - 'KI', - 'KM', - 'KN', - 'KP', - 'KR', - 'KW', - 'KY', - 'KZ', - 'LA', - 'LB', - 'LC', - 'LK', - 'LR', - 'LS', - 'LY', - 'MA', - 'MG', - 'MH', - 'ML', - 'MM', - 'MN', - 'MO', - 'MP', - 'MQ', - 'MR', - 'MS', - 'MU', - 'MV', - 'MW', - 'MX', - 'MY', - 'MZ', - 'NA', - 'NC', - 'NE', - 'NF', - 'NG', - 'NI', - 'NP', - 'NR', - 'NU', - 'OM', - 'PA', - 'PE', - 'PF', - 'PG', - 'PH', - 'PK', - 'PN', - 'PR', - 'PS', - 'PW', - 'PY', - 'QA', - 'RE', - 'RW', - 'SA', - 'SB', - 'SC', - 'SD', - 'SG', - 'SH', - 'SL', - 'SN', - 'SO', - 'SR', - 'SS', - 'ST', - 'SV', - 'SY', - 'SZ', - 'TC', - 'TD', - 'TF', - 'TG', - 'TH', - 'TJ', - 'TK', - 'TL', - 'TM', - 'TN', - 'TO', - 'TT', - 'TV', - 'TW', - 'TZ', - 'UG', - 'UY', - 'UZ', - 'VE', - 'VG', - 'VI', - 'VN', - 'VU', - 'WF', - 'WS', - 'YE', - 'YT', - 'ZA', - 'ZM', - 'ZW', - ], - description: 'Asian-African-Latin American zone', - }, - { - id: 'DR3', - name: 'Europe', - countriesOrAreas: [ - 'AD', - 'AL', - 'AN', - 'AT', - 'AU', - 'AX', - 'BA', - 'BE', - 'BG', - 'BQ', - 'CA', - 'CH', - 'CW', - 'CY', - 'CZ', - 'DE', - 'DK', - 'EE', - 'ES', - 'FI', - 'FO', - 'FR', - 'GB', - 'GG', - 'GI', - 'GL', - 'GR', - 'HR', - 'HU', - 'IE', - 'IL', - 'IM', - 'IS', - 'IT', - 'JE', - 'LI', - 'LT', - 'LU', - 'LV', - 'MC', - 'MD', - 'ME', - 'MF', - 'MK', - 'MT', - 'NL', - 'NO', - 'NZ', - 'PL', - 'PM', - 'PT', - 'RO', - 'RS', - 'SE', - 'SI', - 'SJ', - 'SK', - 'SM', - 'SX', - 'TR', - 'UA', - 'UM', - 'US', - 'VA', - 'VC', - 'XK', - 'YK', - ], - description: 'Europe zone', - }, - { - id: 'DR4', - name: 'Russia', - countriesOrAreas: ['RU'], - description: 'Russia zone', - }, - { - id: 'DR5', - name: 'A2', - countriesOrAreas: ['IR'], - description: 'A2 zone', - }, - ], - }, -} \ No newline at end of file diff --git a/sdk/src/rtc/sdk/hrtc.d.ts b/sdk/src/rtc/sdk/hrtc.d.ts deleted file mode 100644 index 6c67333..0000000 --- a/sdk/src/rtc/sdk/hrtc.d.ts +++ /dev/null @@ -1,1794 +0,0 @@ -/// -import { EventEmitter } from "events"; -declare enum MediaType { - TRACK_TYPE_AUDIO = "audio", - TRACK_TYPE_VIDEO = "video", - TYPE_APPLICATION = "application" -} -declare enum StreamType { - STREAM_TYPE_MAIN = "main", - STREAM_TYPE_AUX = "aux" -} -interface OptionInfo { - [propName: string]: any; -} -interface JoinConfig { - userId: string; - userName?: string; - signature: string; - ctime: string; - role: number; - optionInfo?: OptionInfo; -} -interface NetworkBandwidth { - maxBandwidth: number; -} -interface APP_DATA { - nickname?: string; - show_window?: boolean; -} -interface LocalUser { - userId: string; - encUserId: string; - userName?: string; - signature: string; - ctime: string; - role: number; - roleSignalType: string; - appData?: APP_DATA; - roomId: string; - removeRelayInfo(roomId: string): void; - addRelayInfo(roomId: string, role: number): void; - getRelayInfos(): userRelayInfo[]; -} -interface userRelayInfo { - roomId: string; - role: number; -} -interface AudioStream { - content?: string; - mute?: boolean; - maxMbps?: number; - minMbps?: number; - sampleRate?: number; - channels?: number; - codec?: string; - pt: number; - streamData?: { - [key: string]: string; - }; - streamUid?: number; - ssrc: number; - createDate?: number; - streamId?: number; -} -interface RelayUserSrcInfo { - roomId?: string; - roomUid?: number; - userUid?: number; - userId?: string; - userHashId?: string; - role?: string; -} -interface VideoStream { - content?: string; - originalContent?: string; - mute?: boolean; - width?: number; - height?: number; - fps?: number; - maxMbps?: number; - minMbps?: number; - maxFs?: number; - codec?: string; - pt: number; - streamData?: { - [key: string]: string; - }; - streamUid?: number; - ssrc: number; - createDate?: number; -} -interface UpStreamData { - userId?: string; - userEid?: string; - userUid?: number; - userRid?: number; - encCountryCode?: string; - videoStreams?: Array; - audioStreams?: Array; - appData?: { - [key: string]: string; - }; - userVersion?: number; - relayUserSrcInfo?: RelayUserSrcInfo; -} -interface SubStreamInfoReq { - minReceiveContent?: string; - mediaData?: any; - pUserId?: string; - pUserUid?: number; - pStreamUid?: number; - pSsrcId: number; - cSsrcId: number; - code?: number; -} -interface CryptoType { - type: number; -} -interface StreamCodec { - content?: string; - codec?: string; - pt?: number; - decode?: string; - encode?: string; - streamUid?: number; - level?: number; -} -interface AudioRepSdpInfo { - streamCodecs?: Array; - audioLevel?: number; - port?: number; - sendSsrcRange?: Array; - sendSsrcBegin?: number; - sendSsrcEnd?: number; - receiveSsrcRange?: Array; - receiveSsrcBegin?: number; - receiveSsrcEnd?: number; - streamId?: number; - topNSsrcBegin?: number; - topNSsrcEnd?: number; - topNSsrcRange?: Array; -} -interface CmdRepSdpInfo { - sendSsrc?: number; - receiveSsrc?: number; - streamUid?: number; - content?: string; - codec?: string; - pt?: number; -} -interface VideoRepSdpInfo { - secCap?: string; - streamCodecs?: Array; - port?: number; - sendSsrcRange?: Array; - sendSsrcBegin?: number; - sendSsrcEnd?: number; - receiveSsrcRange?: Array; - receiveSsrcBegin?: number; - receiveSsrcEnd?: number; -} -interface CodecData { - codec?: string; - pt: number; - ability?: number; -} -interface VideoReqSdpInfo { - content?: string; - codecs: Array; -} -interface SdpRepInfo { - sfuIp?: string; - sfuPrivateIp?: string; - ltrFrame?: boolean; - crypto?: CryptoType; - audio?: AudioRepSdpInfo; - video?: VideoRepSdpInfo; - desktopVideo?: VideoRepSdpInfo; - cmd?: CmdRepSdpInfo; - videoReqSdpInfoList?: Array; - domain?: string; -} -interface PublishConfig { - width: number; - height: number; - videoBitrate: number; - videoFramerate: number; - videoGop: number; - audioSampleRate: number; - audioBitrate: number; - audioChannels: number; - audioCodecProfile?: number; - videoCodecProfile?: number; - template?: number; - backGroundColor?: number; -} -interface UpStreams { - content?: string; - mute?: boolean; - width?: number; - height?: number; - fps?: number; - maxFs?: number; - sampleRate?: number; - channels?: number; - maxMbps?: number; - codec?: string; - pt?: number; - streamData?: { - [key: string]: string; - }; - streamUid: number; - ssrc?: number; - createDate?: number; - streamId?: number; -} -interface SubscribeStream { - userid: string; - nickname?: string; - streamid?: string; - roomid?: string; - width?: number; - height?: number; - bandwidth?: number; - ssrc: number; - audioSsrc?: number; - aux?: boolean; - codec?: number; - auto_adjust_resolution?: number; - min_resolution?: string; - action?: number; - media?: number; -} -interface Authorization { - signature: string; - ctime: string; -} -declare enum ContentType { - main = "main", - middle1 = "middle1", - middle2 = "middle2", - middle3 = "middle3", - middle4 = "middle4", - slides = "slides", - desktop = "desktop" -} -declare const enum ClientStatus { - Idle = 0, - Joining = 1, - Joined = 2, - Leaving = 3, - Rejoining = 4 -} -interface ClientConfig { - appId: string; - domain?: string; - countryCode?: string; -} -interface PublishOption { - autoPushVideo?: boolean; -} -interface SubscribeOption { - video?: boolean; - audio?: boolean; - resolutionIds?: string[]; - autoAdjustResolution?: number; -} -interface InnerSubscribeOption extends SubscribeOption { - minResolution?: ResolutionType; -} -interface SubscribeParam { - userId: string; - resolutionIds?: string[]; - autoAdjustResolution?: number; - minResolution?: ResolutionType; -} -type ResolutionType = "FHD" | "HD" | "SD" | "LD"; -interface BatchSubscribeOption { - userId: string; - resolutionIds: string[]; - autoAdjustResolution?: number; - minResolution?: ResolutionType; -} -declare enum PortType { - portNormal = 1, - portReduce = 2 -} -interface JoinQos { - id: number; - domain: string; - start_ms: number; - delay_ms: number; - stepName: string; - rspCode: string; - errMsg?: string; -} -interface TransportStats { - bytesSent: number; - bytesReceived: number; - sendBitrate: number; - recvBitrate: number; - rtt: number; - upPktsLostRate: number; - downPktsLostRate: number; - downVideoStreams: any; -} -interface ResolutionLayout { - resolutionId: string; - subWidth?: number; - subHeight?: number; - localX?: number; - localY?: number; - renderMode?: number; - alpha?: number; - subBackGroundColor?: number; - zorder?: number; -} -interface UserConfig { - userId: string; - audio: boolean; - resolutionIds: string[]; - layouts?: ResolutionLayout[]; -} -interface TurnServerConfig { - turnServers: string[]; - udpPort?: number; - userName?: string; - credential?: string; -} -interface SrcMultiRoomRelayInfo { - userId: string; - authorization?: string; - ctime?: number; -} -interface DstMultiRoomRelayInfo { - roomId: string; - role: number; - authorization?: string; - ctime?: number; -} -interface MultiRoomMediaRelayInfo { - srcRoomRelayInfo?: SrcMultiRoomRelayInfo; - dstRoomRelayInfo: DstMultiRoomRelayInfo[]; -} -interface MultiRoomMediaRelayResult { - roomId: string; - result: number; - msg: string; -} -declare const enum CommandMsgFormat { - ARRAY_BUFFER = 0, - STRING = 1 -} -interface ProviderInfo { - moduleName: string; - appId?: string; - roomId?: string; - userName?: string; - userId?: string; - domain?: string; - caller?: string; - userDomain?: string; - upStreamData?: UpStreamData; - sdpRepInfo?: SdpRepInfo; - countryCode?: string; -} -declare const LogLevels: string[]; -interface ILoggerAble { - logger: Logger; - getInfo(): ProviderInfo; -} -type LogLevel = (typeof LogLevels)[number]; -declare class Logger { - private logBuffer; - private logBufferSize; - error(tag: string, msg: string, info?: ProviderInfo): void; - warn(tag: string, msg: string, info?: ProviderInfo): void; - info(tag: string, msg: string, info?: ProviderInfo): void; - debug(tag: string, msg: string, info?: ProviderInfo): void; - log(level: LogLevel, tag: string, msg: string, info?: ProviderInfo): void; - clearLogs(): void; - setLogBufferSize(size: number): void; - getLogBufferSize(): number; - getLogBuffer(): string[]; -} -declare class RtcError extends Error { - code: number; - constructor(code: number, message?: string); - getCode(): number; - getMsg(): string; - toString(): string; -} -declare class RTCPlayer { - private state_; - protected event_: EventEmitter; - protected mediaStream_: MediaStream; - protected track_: MediaStreamTrack; - protected playerDiv_: any; - protected log_: Logger; - protected playerElement_: any; - protected playerId_: string; - protected playTimeOutTimer: NodeJS.Timeout; - protected module_: string; - protected pauseCount: number; - protected sysEventRegisterUid: string; - protected trackEnable: boolean; - protected listenHandlers: { - canPlayHandler: any; - playingHandler: any; - playerEndedHandler: any; - playerPausedHandler: any; - trackEndedHandler: any; - trackMutedHandler: any; - trackUnmutedHandler: any; - playHandler: any; - backgroundHandler: any; - foregroundHandler: any; - }; - constructor(option: { - logger: Logger; - track: MediaStreamTrack; - playerDiv: any; - playerId: string; - }); - on(event: any, func: any): void; - off(event: any, func: any): void; - private foregroundHandler; - private backgroundHandler; - private canPlayHandler; - private playingHandler; - private playerEndedHandler; - private playerPausedHandler; - private trackEndedHandler; - private trackMutedHandler; - private trackUnmutedHandler; - protected closeAllEvents(): void; - protected handleEvents(): void; - stop(): void; - replaceTrack(track: MediaStreamTrack): void; - protected resume(playParameters: any): Promise; - private multiPlatformAdapter; - protected doPlay(resolve: any, reject: any, playParam: any): Promise; - private afterPlayStrategy; -} -declare class RTCAudioPlayer extends RTCPlayer { - private readonly muted_; - private outputDeviceId_; - private volume_; - private soundMeter_; - constructor(option: { - logger: Logger; - playerDiv?: any; - playerId: string; - track: MediaStreamTrack; - muted?: boolean; - volume?: number; - }); - play(): Promise; - setSinkId(deviceId: string): Promise; - setVolume(volume: number): void; - getAudioLevel(): number; - stop(): void; - resume(): Promise; - replaceTrack(track: MediaStreamTrack): void; -} -interface StreamConfig { - audio?: boolean; - microphoneId?: string; - video?: boolean; - cameraId?: string; - facingMode?: string; - screen?: boolean; - screenAudio?: boolean; - audioSource?: MediaStreamTrack; - videoSource?: MediaStreamTrack; - mirror?: boolean; - userId?: string; -} -interface RTCAudioProfile { - sampleRate?: number; - channelCount?: number; - bitrate?: number; -} -interface RTCVideoProfile { - width?: number; - height?: number; - frameRate?: number; - minBitrate?: number; - maxBitrate?: number; -} -interface RTCVideoProfileInfo extends RTCVideoProfile { - resolutionId: string; - hasTrack?: boolean; -} -interface RTCScreenProfile { - width?: number; - height?: number; - frameRate?: number; - bitrate?: number; -} -interface LocalAudioStats { - bytesSent: number; - packetsSent: number; -} -interface LocalVideoStats { - bytesSent: number; - packetsSent: number; - framesEncoded: number; - framesSent: number; - frameWidth: number; - frameHeight: number; -} -interface AllLocalVideoStats { - mainStream: LocalVideoStats[]; - subStream: LocalVideoStats; -} -interface RemoteAudioStats { - bytesReceived: number; - packetsReceived: number; - packetsLost: number; -} -interface RemoteVideoStats { - streamId: string; - bytesReceived: number; - packetsReceived: number; - packetsLost: number; - framesDecoded: number; - frameWidth: number; - frameHeight: number; - frameRate: number; - frameDropped: number; -} -interface AllRemoteVideoStats { - mainStream: RemoteVideoStats[]; - subStream: RemoteVideoStats; -} -interface AudioMixOption { - filePath: string; - startTime?: number; - replace?: boolean; - loop?: boolean; - repeatCount?: number; -} -type AudioPlayStatus = "init" | "notAllow" | "normal" | "otherError"; -interface AudioStream$0 { - audioPlayer: RTCAudioPlayer; - audioMediaTrack: MediaStreamTrack; - streamId: string; - playStatus: AudioPlayStatus; - ssrc?: number; -} -interface MediaCaptureResult { - type: MediaType; - track?: MediaStreamTrack; - error?: RtcError; -} -interface CommonProfile { - streamId: string; - width?: number; - height?: number; -} -interface StreamOption { - video?: boolean; - audio?: boolean; - resolutionIds?: string[]; -} -interface VideoCaptureOption { - cameraId?: string; - resolutionId?: string; -} -interface MediaQueryFilter { - hasTrack?: boolean; - mediaType?: MediaType; -} -interface PlayResult { - trackType: MediaType; - error: Error; -} -declare class HRTCTrack { - private readonly log_; - private readonly resolutionId_; - private trackId_; - private readonly trackType_; - private track_; - private readonly streamType_; - private profile_; - private readonly isRemote_; - private player_; - private elementId_; - private objectFit_; - private playState_; - private trackMuted_; - private audioVolume_; - private content; - private readonly statusChangeReporter_; - private readonly statusTraceReporter_; - private event_; - private cameraCaptureHandleTimer; - constructor(options: { - trackType: MediaType; - streamType: StreamType; - isRemote: boolean; - resolutionId: string; - trackProfile?: any; - logger?: Logger; - track?: MediaStreamTrack; - event?: EventEmitter; - }); - initScreenShare(screenAudio?: boolean): Promise; - initAudioCapture(microphoneId?: string): Promise; - initVideoCapture(cameraId: string, content: ContentType): Promise; - private getUserMedia; - private static isTrackAvailable; - private setCameraCaptureReport; - private clearCameraCaptureReport; - private handleCaptureError; - isClosed(): boolean; - isPlaying(): boolean; - getTrackType(): MediaType; - getResolutionId(): string; - getTrackId(): string; - getElementId(): string; - getObjectFit(): string; - setTrackId(trackId: string): void; - getTrackProfile(): any; - setTrackContentType(content: ContentType): void; - getTrackContentType(): ContentType; - updateTrackProfile(profile: CommonProfile): void; - setTrackProfile(profile: any): void; - getTrack(): MediaStreamTrack; - replaceTrack(track: MediaStreamTrack): Promise; - setLocalProfileByTrack(track: MediaStreamTrack): void; - removeTrack(): void; - play(playerDiv: HTMLElement, elementId: string, options?: { - objectFit?: string; - mirror?: boolean; - muted?: boolean; - }): Promise; - replay(): Promise; - stop(): void; - close(): void; - resume(): Promise; - restart(): Promise; - getTrackMuted(): boolean; - muteTrack(): void; - unmuteTrack(): void; - setSinkId(deviceId: string): Promise; - setAudioVolume(volume: number): void; - getAudioLevel(): number; - getVideoFrame(): string; - setAudioOutput(outputDeviceId: string): void; -} -interface CommInfo { - timestamp?: number; - trace_id?: string; - instance_id?: string; - room_uid?: string; - domain?: string; - appid?: string; - corp?: string; - room_id?: string; - user_id?: string; - sdk_version?: string; - event: number; - event_name?: string; - sdk_name?: string; - service_name?: string; - operator?: string; - net_type?: string; - country?: string; - province?: string; - city?: string; -} -interface Media { - ssrc_uid: string; - stream_uid: string; - sfu_addr: string; -} -interface MediaInfo extends CommInfo { - streams: Media[]; -} -interface MediaStreamReceiverFrame { - userId: string; - isAux?: boolean; - decodedFrame: number; -} -interface StreamInfo$0 { - uid: string; - streamId: string; - ssrc: number; - type: MediaType; - width?: number; - height?: number; - frame?: number; - publishInfo?: any; -} -interface StartupQoSInfo { - timestamp: number; - traceId: string; - spanId: string; - originIntfName: string; - interfaceName: string; - source: string; - target: string; - resultCode: string; - successFlag: string; - duration: number; - async: string; - extendInfo: string; -} -interface StartupQoSCoreInfo { - traceId: string; - spanId: string; - originIntfName: string; - interfaceName: string; - id: string; - streamIds: string[]; - start: number; -} -interface TraceInfo { - version: string; - startTimestamp: number; - traceId: string; - spanId: string; - parentSpanId: string; - ip: string; - source: string; - target: string; - spanName: string; - status: string; - endTimestamp: number; - url: string; - httpMethod: string; - requestSize: string; - responseSize: string; - statusCode: string; - tag: string; - Events: string; - scope: string; -} -interface SsrcInfo { - ssrc: number; - userid: string; - packet_cnt: number; -} -interface InBoundAudioSsrcInfo extends CommInfo { - access_addr: string; - sfu_addr: string; - audio_policy: number; - topn: number; - audios_change_cnt: number; - audios: SsrcInfo[]; - no_stream_cnt: number; -} -declare const enum ConnectionType { - "SIGNAL" = 0, - "MEDIA" = 1 -} -interface SfuInfo { - ipAddress: string; - videoPort?: number; - audioPort?: number; - auxPort: number; -} -interface AudioLevel { - type: string; - level: number; - ssrc?: number; - userId?: string; -} -interface RTCIceTransportStat { - currentRoundTripTime?: number; - availableOutgoingBitrate?: number; - bytesSent?: number; - bytesReceived?: number; -} -interface LocalTrackInfo { - type: MediaType; - resolutionId: string; - upstream: UpStreams; -} -interface LocalTrackPublishInfo extends LocalTrackInfo { - published: boolean; - watched: boolean; - ssrc: number; - sender: RTCRtpSender; -} -type resolutionId = string; -interface LocalStreamInfo { - localStream: LocalStream; - streamId: string; - localTrackPublishInfos: Map; -} -interface NotifyClientJoinRoomSuccess { - status?: string; - role?: string; - userId?: string; - userUid?: number; - userEid?: string; - userRid?: number; - appData?: { - [key: string]: string; - }; - streamId?: number; - videoStreamCodecs?: Array; - encCountryCode?: string; - relayUserSrcInfo?: RelayUserSrcInfo; -} -interface UserInfo { - userId: string; - userUid: number; - roomId: string; - nickname: string; - relaySrcRoomId?: string; -} -declare const enum RemoteUserState { - NotJoin = 0, - Joined = 1, - Rejoining = 2 -} -declare const enum TrackState { - normal = 0, - resolutionChange = 1, - remoteRejoinCache = 2, - localRejoin = 3 -} -interface CachedPlayParam { - playElement?: string; - objectFit?: string; - muted?: boolean; -} -interface RemoteTrackInfo extends CachedPlayParam { - content: string; - trackId: string; - pssrc: number; - cssrc: number; - type: MediaType; - width?: number; - height?: number; - state: TrackState; - isSubscribed: boolean; - isTrackReady: boolean; - streamType: StreamType; - autoAdjustResolution?: number; - minResolution?: ResolutionType; - mute: boolean; - streamData?: { - [key: string]: string; - }; - fps?: number; - maxMbps?: number; - maxFs?: number; - codec?: string; - pt: number; - sampleRate?: number; - channels?: number; -} -interface RemoteUserInfo { - userInfo: UserInfo; - userState: RemoteUserState; - mainStream: RemoteStreamInfo; - auxStream: RemoteStreamInfo; -} -interface ResolutionInfo extends CachedPlayParam { - resolutionId: string; - width: number; - height: number; -} -interface FllSubscribeOption { - video?: boolean; - audio?: boolean; - resolutions?: ResolutionInfo[]; - audioPlayInfo?: CachedPlayParam; - autoAdjustResolution?: number; - minResolution?: ResolutionType; -} -interface RemoteStreamInfo { - remoteTrackInfos: Map; - remoteStream: RemoteStream; - subscribeOption: FllSubscribeOption; -} -interface RemoteStreamUpdateInfo { - remoteStream: RemoteStream; - preTracks?: RemoteTrackInfo[]; - curTracks?: RemoteTrackInfo[]; - addedTracks?: RemoteTrackInfo[]; - updatedTracks?: RemoteTrackInfo[]; - removedTracks?: RemoteTrackInfo[]; - subscribedTracks?: RemoteTrackInfo[]; - tracks4Subscribe?: RemoteTrackInfo[]; - tracks4Unsubscribe?: RemoteTrackInfo[]; - allSubscribeTracks: RemoteTrackInfo[]; -} -interface RemoteUserUpdateInfo { - userInfo: UserInfo; - preUserState: RemoteUserState; - curUserState: RemoteUserState; - isUserNameChanged?: boolean; - mainStream: RemoteStreamUpdateInfo; - auxStream: RemoteStreamUpdateInfo; -} -interface RemoteUserSubscribeResult { - successSubscribeInfos: RemoteUserSubscribeInfo[]; - failSubscribeInfos: RemoteUserSubscribeInfo[]; - successUnsubscribeInfos: RemoteUserSubscribeInfo[]; - failUnsubscribeInfos: RemoteUserSubscribeInfo[]; -} -interface StreamBasicInfo { - remoteStream: RemoteStream; - tracks: RemoteTrackInfo[]; -} -interface RemoteUserSubscribeInfo { - userId: string; - roomId: string; - mainStream: StreamBasicInfo; - auxStream: StreamBasicInfo; -} -interface HRTCRemoteUserManager { - checkSsrcIsMute(ssrc: number): boolean; - checkRemoteTop3NeedReport(): boolean; - initialize(localUserId: string, sdpInfo: SdpRepInfo): void; - updateUserListInfo(roomId: string, userInfos: NotifyClientJoinRoomSuccess[]): RemoteUserUpdateInfo[]; - refreshRemoteUserList(roomId: string, roomUserInfos: UpStreamData[], isLocalRejoin: boolean): RemoteUserUpdateInfo[]; - refreshRemoteStreamList(userInfo: UserInfo, allVideoStreams: VideoStream[], allAudioStreams: AudioStream$0[]): RemoteUserUpdateInfo[]; - updateRemoteStream(userInfo: UserInfo, videoStreams: VideoStream[], audioStreams: AudioStream$0[]): RemoteUserUpdateInfo; - remoteUserReconnect(userInfo: UserInfo, videoStreams: VideoStream[], audioStreams: AudioStream$0[]): void; - getAllUserStreamsByType(roomId: string, streamType: StreamType, mediaType: MediaType): RemoteUserSubscribeInfo[]; - getUserInfoById(userId: string, roomId: string): RemoteUserInfo; - getUserInfoByUid(userUid: number, roomId: string): RemoteUserInfo; - batchSubscribeMainStream(roomId: string, options: BatchSubscribeOption[]): RemoteUserUpdateInfo[]; - subscribeStream(userId: string, roomId: string, streamType: StreamType, trackOption: InnerSubscribeOption, audioPolicy: number, isVideoSubscribeOverride: boolean, startupQoSCoreInfo: StartupQoSCoreInfo): RemoteUserUpdateInfo[]; - resubscribeMainStreamAudio(roomId: string): RemoteUserUpdateInfo[]; - unsubscribeAllMainStreamAudio(roomId: string): RemoteUserUpdateInfo[]; - unsubscribeStream(userId: string, roomId: string, streamType: StreamType, trackOption: InnerSubscribeOption): RemoteUserUpdateInfo[]; - enableTopThreeAudioMode(roomId: string): any; - updateUserName(userId: string, roomId: string, nickName: string): void; - isRemoteUserSubscribed(userId: string, roomId: string): boolean; - getUserInfoByStreamId(roomId: string, streamId: string): RemoteUserInfo; - subscribeResultCallback(subscribeResult: RemoteUserSubscribeResult, isException: boolean): void; - clear(roomId?: string): any; - getStreamInfoByPStreamUid(pStreamUid: number): RemoteTrackInfo; - getAllSubscribedUpdateInfos4Unsubscribe(roomId: string): RemoteUserUpdateInfo[]; -} -interface AddUserRes { - offerSdp?: string; - answerSdp?: string; - streamId?: string; -} -declare class PeerConnectionsManager extends EmitterAbleAndStatisticAbleBase { - private peerConnections; - private sdpDescMode; - private rtcSdp; - private portType; - private mainReceiverPreStatisticMap; - private auxReceiverPreStatisticMap; - private isFireFox; - private turnServerConfig; - private uniqueId; - constructor(logger: Logger, stat: RTCStat, eventEmitter: EventEmitter); - setPortType(portType: PortType): void; - getPortType(): PortType; - setTurnServer(turnServerConfig: TurnServerConfig): void; - isConnectionsExist(): boolean; - getConnectionId(): string; - getReceivers(pcType: StreamType): RTCRtpReceiver[]; - getSenders(pcType: StreamType): RTCRtpSender[]; - calcChangedStatistic(ssrcLabel: string, statistics: any, properties?: string[]): any; - private doCalcChangedStatisticObject; - private clearReveiverPreStatisticBySsrcLabel; - initConnectionAndSdp(roomId: string, pcType: StreamType, handlers: { - onTrackHandler: any; - }, isRetry?: boolean): Promise; - setSsrcsMapping(sdp: SdpRepInfo): void; - getMappingSsrcs(ssrcs: number | number[], pcType?: StreamType): any; - private createOffer; - private iceCandidateListener; - private iceRestart; - private onConnection; - private iceAddressCollect; - private createPeerConnection; - destroyPeerConnection(pcType: StreamType, removeSenders?: RTCRtpSender[]): void; - modifySdpInfo(pcType: StreamType, negCmd?: boolean): Promise; - private getDataChannelTemplate; - private setLocalDescriptionShim; - handleAnswerSdpFromServer(pcType: StreamType, answerSdp: string, handler?: (arg: any) => any): Promise; - getSfuInfoFromSdp(sdp: string, auxSdp: string): SfuInfo; - generateAndSetOfferSdpByHandler(pcType: StreamType, handler?: any): Promise; - generateAndSetAnswerSdpByHandler(pcType: StreamType, handler?: any): Promise; - deleteUser(pcType: StreamType, videoSSRCs: number[], audioSSRCs: number[]): Promise; - private recordCurrentReceiverStatistic; - private getAllIdleReceiverTransceivers; - private getIdleSendTransceiver; - addTrack(pcType: StreamType, track: MediaStreamTrack, mediaStream: MediaStream, ssrc?: number): Promise; - removeTrack(pcType: StreamType, sender: RTCRtpSender): void; - modifyPublishOfferSdp(pcType: StreamType, userId: string, videoSsrcs?: number[], audioSsrc?: number, removeVideoSsrcs?: number[], removeAudioSsrc?: number): Promise; - addTopAudioUserBatch(answerSdp: string, startAudioSsrc: number, batchSize: number, handler: any): Promise; - addUserBatch(pcType: StreamType, ssrcInfos: Map): Promise; - private addTransceiver; - getConnection(pcType: StreamType): RTCPeerConnection; - getConnectionRTT(): number; - getICETransportStat(pcType: StreamType): RTCIceTransportStat; - getInfo(): ProviderInfo; - refreshOffer(pcType: StreamType): Promise; -} -declare class MediaStats { - private readonly logger; - private connectionsManager; - private videoFreezeKey; - private mediaStatInfo; - private mediaStatDebugInfo; - private mediaStatSumInfo; - private mediaStatSumDebugInfo; - private ACSAddr; - private SFUAddr; - private lastSenderInfo; - private lastSenderDebugInfo; - private encryUserId; - private remoteStreamInfo; - private audioPolicy; - private LocalStreamInfo; - private auxsStreamInfo; - private audioReceiveInfo; - private videoReceiveInfo; - private audioReceiveDebugInfo; - private videoReceiveDebugInfo; - private rtcStatsInteval; - private inBoundAudioSsrcInfos; - private audioPolicyLastCycle; - private audioStreamReceiverMap; - private ssrcChangeCount; - private audioStreamInfos; - private audioCount; - private audioStreamAllInfos; - private audioAllCount; - private audioStreamTop3Count; - private audioStreamTop3CountTimer; - private module_; - private tempStat; - private stat; - private audioLevelInfo; - private startSsrc; - private remoteUserManager; - private remoteUserMuteStatus; - constructor(logger: Logger); - setEncryInfo(userId: string, encryUserId: string): void; - getEncryInfo(userId: string): string; - clearEncryUserId(): void; - setRemoteUserManager(remoteUserManager: HRTCRemoteUserManager): void; - setStartSsrc(startSsrc: number): void; - updateAudioLevel(audioLevel: AudioLevel): void; - private getAudioLevel; - setConnectionsManager(connectionsManager: PeerConnectionsManager): void; - setSubscribeInfo(streamInfo: RemoteUserSubscribeInfo): void; - private doClearRemoteStreamInfoCache; - private clearRemoteStreamInfoCache; - private clearRemoteStreamInfoCache4Stream; - private clearLocalStreamInfoCache; - private clearAuxsStreamInfoCache; - setLocalMainStreamInfo(uid: string, publishInfos: LocalTrackPublishInfo[]): boolean; - setLocalAuxsStreamInfo(uid: string, streamInfo: LocalStreamInfo): boolean; - deleteSubscribeInfo(uid: string, streamType: StreamType, streamId?: string): void; - setAudioPolicy(audioPolicy: number): void; - setSFUAddr(addr: string): void; - setACSAddr(addr: string): void; - leaveRoom(): void; - getAudioPolicy(): number; - getTransportMediaStats(): TransportStats; - getMediaStatInfo(): MediaInfo[]; - getMediaStatSum(): CommInfo[]; - getInBoundAudioSsrc(): InBoundAudioSsrcInfo[]; - dealStats(): Promise; - clearTempStats(): void; - clearMediaStatBytes(): void; - cleanAudioStreamInfos(): void; - updateAudioStreamInfos(userid: string, type: string): void; - updateAudioStreamTop3(length: number): void; - private checkAudioStreamInfosIsExist; - private setAudioStreamInfo; - private getAudioStreamInfo; - buildAudioStreamInfo3(): Promise; - buildAudioStreamInfo2(): Promise; - getVideoReceiverFrameDecodedMap(): Promise>; - private buildFrameDecodedMap; - private getReceiverInfo; - private buildReceiverInfo; - private checkMuteStatusIsChange; - private buildAudioReceiverInfo; - private buildAudioReceiver4SubscribedMode; - private buildVideoReceiverInfo; - private buildBitRateVideoRecvInfo; - private static buildVideoTrackInfo; - private buildCommonVideoRecvInfo; - private getSenderInfo; - private buildSenderInfo; - private buildAudioSenderInfo; - private addExpectInfo; - private addRembInfo; - private getConnectionRemb; - private getRemb; - private buildVideoSenderInfo; - private static buildCommonVideoSendInfo; - buildRtcStatsDebugInfo(interval: number): Promise<{ - mediaStatsDebugInfo: any; - mediaStatsSumDebugInfo: any; - }>; -} -declare class RTCStat { - private module_; - private readonly logger; - private eventInfoMap; - private reqInfoMap; - private user; - private joinTime; - private sfuInfo; - commInfo: CommInfo; - deviceInfo: { - audioOutputId: any; - audioInputId: any; - videoInputId: any; - }; - private mediaStats; - private mediaOpsData; - private mediaCollectionTimer; - private remoteUserManager; - private signalSendMsgs; - private signalReceiveMsgs; - private parentSpanIdMap; - private spanIdMap; - constructor(logger: Logger, clientConfig?: ClientConfig); - private static isStatiscEnable; - private addCommInfo; - setRemoteUserManager(remoteUserManager: HRTCRemoteUserManager): void; - clearMediaStatBytes(): void; - collectReceiverDecodedFrameMap(): Promise>; - setLocalUserInfo(localUser: LocalUser): void; - setTraceInfo(traceId: string): void; - setRoomUid(roomUid: string): void; - setSFUAddress(info: SfuInfo): void; - getMediaStat(): MediaStats; - leaveRoom(): void; - startMediaCollector(): void; - reportAudioMuteInfo(type: number, mute: boolean): void; - reportVideoMuteInfo(userId: string, mute: boolean): void; - setDeviceStatusInfo(): Promise; - recordUploadRequsetInfo(data: any): void; - getDownloadRequestInfo(data: any): string; - recordDownloadRequestInfo(data: any): void; - private setMediaStatInfo; - private setMediaStatSumInfo; - private setInBoundAudioSsrcInfos; - private setRequestId; - private transformJoinInfoResult; - reportJoinInfo(code: number, acsAddr?: string, isRejoin?: boolean, joinQosInfo?: JoinQos[], failMessage?: string): void; - reportRelayJoinInfo(info: { - code: number; - acsAddr: string; - requestId: string; - traceId: string; - roomId: string; - role: number; - roomUid: number; - failMessage: string; - }): void; - reportRelayLeavInfo(info: { - code: number; - requestId: string; - traceId: string; - roomId: string; - roomUid: number; - }): void; - reportLeavInfo(result: number): void; - reportVideoSub(type: number, requestId: string, videoStream: SubStreamInfoReq[], result: number, resultMessage: string): void; - reportSwitchDevicesInfo(type: number, deviceId: string, result: number, opt?: number): void; - reportSwitchRoleInfo(role: number, result: number): void; - reportStartSendMediaStream(type: number, opt: string): void; - setMediaCaptureSucc(deviceType: number, deviceName: string): void; - reportAuxiliaryStreamShareInfo(action: number, result: number): void; - setAudioSubscribeInfo(streams: SubscribeStream[], requestId: string, result: number): void; - reportAudioSub(action: number, requestId: string, audioStream: SubStreamInfoReq[], result: number): void; - setConnectionStatusInfo(on: number, type: ConnectionType): void; - reportUpStreamVideoInfo(upStreams: VideoStream[], requestId: string, result: number): void; - reportAudioPolicyInfo(policy: number, requestId: string, result: number): void; - setSysBasicInfo(): void; - setCameraInfo(vdieoTrackActual: MediaTrackSettings, vdieoTrackSettings: MediaTrackSettings): void; - setSpeakerInputInfo(): void; - setMicrophoneInfo(): void; - setSpeakerDeviceInfo(speakers: MediaDeviceInfo[]): Promise; - setCameraDeviceInfo(cameras: MediaDeviceInfo[]): Promise; - setMicrophoneDeviceInfo(microphones: MediaDeviceInfo[]): Promise; - setDeviceChangedInfo(type: string, deviceId: string, state: number): void; - setDeviceUserAgent(): void; - reportSignalReqForLogUpload(filename: string): void; - reportSignalReqForHeartBeatLost(data: any, sendTime: number): void; - reportSignalReqForWeb2Server(data: any): void; - reportSignalReqForServer2Web(data: any): void; - reportSignalRepForLogUpload(filename: string, status: number): void; - reportSignalRepForServer2Web(request: any, response: any): void; - setApiCallInfo(apiShortName: string, start: number, end: number, exception: any, ret: any, ...params: any): void; - recordCallbackInfo(event: string, module: string, start: number, end: number, params: any, handler: any): void; - recordCallbackInfoBeacon(event: string, module: string, start: number, end: number, params: any, handler: any): void; - setFirstFrameInfo(startupQoSInfo: StartupQoSInfo): void; - setSpanId(parentSpanId: string, spanId: string): void; - getSpanId(parentSpanId: string): string; - setParentSpanId(spanId: string, parentSpanId: string): void; - getParentSpanId(spanId: string): string; - checkSignalReceiveMsgs(spanName: string): boolean; - checkSignalSendMsgs(spanName: string): boolean; - reportTraceInfo2Nuwa(traceInfo: TraceInfo): void; - buildRtcStatsDebugInfo(interval: number): Promise<{ - mediaStatsDebugInfo: any; - mediaStatsSumDebugInfo: any; - }>; -} -interface IStatisticAble { - stat: RTCStat; - getStatInfo(): any; -} -type ExecutableFunction = (...args: any[]) => any; -interface IEmitterAble { - eventEmitter: EventEmitter; - on(event: any, onCallbackFun: any): any; - off(event: any, offCallbackFun: any): any; - emit(event: any, data: any): any; -} -declare class EmitterAble { - eventEmitter_: EventEmitter; - constructor(emitter: boolean | EventEmitter); - on(event: any, func: any): void; - off(event: any, func?: any): void; - emit(event: any, data: any): void; - get eventEmitter(): EventEmitter; - set eventEmitter(value: EventEmitter); -} -declare class LoggerAble { - logger_: Logger; - constructor(argument: any, identityId?: symbol); - get logger(): Logger; - set logger(value: Logger); -} -declare class StatisticAble { - stat_: RTCStat; - constructor(argument?: any, clientConfig?: any); - set stat(value: RTCStat); - get stat(): RTCStat; -} -interface IdentifiedSymbol { - identifiedID: symbol; -} -declare abstract class EmitterAbleAndStatisticAbleBase implements IStatisticAble, ILoggerAble, IEmitterAble, IdentifiedSymbol { - readonly identifiedID_: symbol; - readonly loggerAble_: LoggerAble; - readonly statisticAble_: StatisticAble; - readonly emitterAble_: EmitterAble; - onCallbackMap_: Map; - protected constructor(options?: { - emitter?: EventEmitter | boolean; - logger?: Logger | boolean; - stat?: RTCStat | boolean; - config?: ClientConfig | boolean; - }, uid?: symbol); - on(event: any, func: any, withTimeout?: boolean): void; - off(event: any, func?: any, withTimeout?: boolean): void; - emit(event: any, data?: any): void; - onWithTimeout(event: any, func: any): void; - offWithTimeout(event: any, func?: any): void; - getOnCallback(event: any, func: any): ExecutableFunction; - getOffCallback(event: any, func: any): ExecutableFunction; - get stat(): RTCStat; - get logger(): Logger; - get eventEmitter(): EventEmitter; - get identifiedID(): symbol; - getStatInfo(): any; - abstract getInfo(): ProviderInfo; -} -declare class StreamInitializeResult extends RtcError { - private readonly captureResults; - constructor(code: number, message: string, captureResults?: MediaCaptureResult[]); - getMediaCaptureResult(): MediaCaptureResult[]; - getMediaCaptureResultByType(type: MediaType): MediaCaptureResult; - toString(): string; -} -declare class Stream extends EmitterAbleAndStatisticAbleBase { - private playDivContainers; - protected id_: string; - protected module_: string; - protected tracks: Record>; - protected isRemote_: boolean; - protected isAuxiliary_: boolean; - protected type_: string; - protected userId_: string; - protected mirror_: boolean; - protected client_: Client[]; - private readonly traceHandler; - protected mediaStream: MediaStream; - constructor(option: { - isRemote: boolean; - type: string; - log: Logger; - }); - getStreamInfo(): StreamInfo$0; - private getStreamInfoImpl; - getMaxResolutionHRTCTrack(includeUninitialized?: boolean): HRTCTrack; - protected getMaxResolutionProfile(profiles: Map): RTCVideoProfileInfo; - getHRTCTracks(option?: MediaQueryFilter): HRTCTrack[]; - protected getHRTCTrackIds(option?: MediaQueryFilter): string[]; - protected getAnyVideoHRTCTrack(resolutionId?: string): HRTCTrack; - getVideoHRTCTrack(resolutionId?: string): HRTCTrack; - protected getAnyAudioHRTCTrack(): HRTCTrack; - protected getUninitializedAudioHRTCTrack(): HRTCTrack; - protected getUninitializedVideoHRTCTrack(resolutionId?: string): HRTCTrack; - getAudioHRTCTrack(): HRTCTrack; - getUniqueId(): string; - getInfo(): ProviderInfo; - private startupPlay; - play(elementId: string, options?: { - objectFit?: string; - muted?: boolean; - resolutionId?: string; - playerElementHidden?: boolean; - }): Promise; - private playImpl; - private reportCanPlay; - private playerStatusTrace; - private playTracks; - stop(option?: StreamOption): void; - private stopImpl; - resume(option?: StreamOption): Promise; - private resumeImpl; - close(option?: StreamOption): void; - protected closeImpl(option?: StreamOption): void; - private closeAudio; - muteAudio(): boolean; - private muteAudioImpl; - muteVideo(): boolean; - private muteVideoImpl; - unmuteAudio(): boolean; - private unmuteAudioImpl; - unmuteVideo(): boolean; - private unmuteVideoImpl; - getId(): string; - getUserId(): string; - getType(): string; - setAudioOutput(deviceId: string): Promise; - private setAudioOutputImpl; - setAudioVolume(volume: number): void; - private setAudioVolumeImpl; - getAudioLevel(): number; - hasAudioTrack(): boolean; - hasVideoTrack(): boolean; - isAuxiliary(): boolean; - getAudioTrack(): MediaStreamTrack; - getVideoTrack(resolutionId?: string): MediaStreamTrack; - getVideoFrame(resolutionId?: string): string; - on(event: any, func: any): void; - off(event: any, func: any): void; - restart(resolutionId?: string): Promise; - rePlayAudio(): Promise; - getStatInfo(): any; - protected getStatExtraInfo(): any; - hasAudio(): boolean; - hasVideo(): boolean; -} -declare class LocalStream extends Stream { - private readonly audio_; - private readonly video_; - private cameraId_; - private effectiveCameraId_; - private readonly facingMode_; - private microphoneId_; - private effectiveMicrophoneId_; - private readonly videoSource_; - private readonly audioSource_; - private readonly screen_; - private readonly screenAudio_; - private audioProfile_; - private readonly videoProfiles_; - private screenProfile_; - private readonly videoContents; - private audioMixOption_; - private audioMixInfo_; - private auxStreamStopByNativeHandler; - private mutePackageData; - private muteSendInfo; - private screenShareMixInfo; - constructor(config: StreamConfig); - private setMediaStream; - getMediaStream(): MediaStream; - getLocalId(): string; - initialize(): Promise; - setVideoContentHint(hint: string): void; - private reset; - private initAuxStreamWithTrack; - private initAuxStream; - private initMainStreamWithCfg; - private initMainStream; - private initializeImpl; - setCameraCaptureReport(videoTrackActual: MediaTrackSettings, videoTrackSettings: MediaTrackSettings): void; - private addCaptureWithCfg; - private appendDefaultLocalTrack; - private generateResolutionId; - private initMainStreamWithTrack; - addAudioTrackCapture(microphoneId?: string): Promise; - private addAudioTrackCaptureImpl; - addVideoTrackCapture(option?: VideoCaptureOption): Promise; - private addVideoTrackCaptureImpl; - private updateEffectiveDeviceInfo; - private getCurrentCameraId; - private getCurrentMicrophoneId; - getAudioSendBitrate(): number; - isAudioMuted(): boolean; - isVideoMuted(resolutionId?: string): boolean; - setAudioProfile(profile: string | RTCAudioProfile): void; - private setAudioProfileImpl; - getVideoMaxBitrate(resolutionId?: string): number; - getVideoMaxSendBitrate(resolutionId?: string): number; - getVideoMiniBitrate(resolutionId?: string): number; - getVideoWidth(resolutionId?: string): number; - getVideoHeight(resolutionId?: string): number; - getVideoFrameRate(resolutionId?: string): number; - getVideoProfile(resolutionId?: string): RTCVideoProfile; - setVideoProfile(profile: string | RTCVideoProfile, resolutionId?: string): Promise; - addResolution(profile: string | RTCVideoProfile, audio?: boolean): Promise; - private addResolutionImpl; - removeResolution(resolutionId: string): Promise; - private removeResolutionImpl; - private setVideoProfileImpl; - getScreenSendBitrate(): number; - getScreenWidth(): number; - getScreenHeight(): number; - getScreenFrameRate(): number; - setScreenProfile(profile: string | RTCScreenProfile): void; - private setScreenProfileImpl; - private switchVideoDevice; - private switchAudioDevice; - switchDevice(type: string, deviceId: string): Promise; - private switchDeviceImpl; - addTrack(track: MediaStreamTrack, resolutionId?: string): Promise; - private addTrackImpl; - removeTrack(track: MediaStreamTrack): Promise; - private removeTrackImpl; - replaceTrack(track: MediaStreamTrack, type: string, resolutionId?: string): Promise; - private replaceTrackImpl; - addClient(client: Client): void; - removeClient(client: Client): void; - muteAudio(): boolean; - muteVideo(): boolean; - unmuteAudio(): boolean; - unmuteVideo(): boolean; - protected closeImpl(option?: StreamOption): void; - clearEffectiveDeviceId(deviceId: string, type: string): void; - startSendMutePackage(): void; - stopSendMutePackage(): void; - bindScreenAudio2RelatedStream(bindStream: LocalStream, muteMainStreamAudio?: boolean): void; - private bindScreenAudio2RelatedStreamImpl; - private mixScreenAudio; - getPublishAudioTrack(): MediaStreamTrack; - resumeMixScreenAudio(): Promise; - stopMixScreenAudio(): Promise; - setAudioVolume(volume: number): void; - private closeScreenShareAudio; - startAudioMixing(option: AudioMixOption): Promise; - private startAudioMixingImpl; - private doAudioMixing; - private setAudioMixOption; - private initIdleAudioMixInfo; - private checkAudioMixingParameter; - private replaceMixAudioTrack; - stopAudioMixing(): Promise; - private stopAudioMixingImpl; - pauseAudioMixing(): void; - private pauseAudioMixingImpl; - resumeAudioMixing(): void; - private resumeAudioMixingImpl; - getAudioMixingCurrentPosition(): number; - getAudioMixingDuration(): number; - setAudioMixingVolume(level: number): void; - private setAudioMixingVolumeImpl; - setAudioMixingPosition(position: number): void; - private setAudioMixingPositionImpl; - getStatInfo(): any; -} -declare class RemoteStream extends Stream { - private readonly roomId_; - constructor(option: { - type: string; - log: Logger; - userId: string; - client: Client; - roomId?: string; - }); - muteAudio(): boolean; - unmuteAudio(): boolean; - getVideoHRTCTrackByTrackId(trackId: string): HRTCTrack; - updateRemoteResolutions(streamType: StreamType, streamProfiles: CommonProfile[], hasAudioTrack: boolean): void; - private getHRTCTracksProfileString; - addRemoteTrack(track: MediaStreamTrack, trackId: string): void; - isTracksReady(videoTrackIds: string[], includeAudio?: boolean): boolean; - isTrackReady(mediaType: MediaType, trackId: string): boolean; - removeRemoteAudioTrack(): void; - removeRemoteVideoTrack(resolutionId: string): void; -} -declare class Client extends EmitterAbleAndStatisticAbleBase { - readonly clientSymbol: symbol; - readonly mainRelayRoomSymbol: symbol; - status: ClientStatus; - userInfo: LocalUser; - private locker; - private signal; - private roomId; - readonly clientConfig: ClientConfig; - private waitConfigCallbackFunc; - private validSignatureFunc; - private streamPublishManager; - private localRejoinFlag; - private isLoopRejoining; - private connectState; - private accessManager; - private audioPolicy; - private bandwidthParam; - private netQualityTimer; - private transportStatsTimer; - private lastCycleFrameDecodedMap; - private readonly streamInterruptedUsersMap; - private streamInterruptedDetectInterval; - private streamDetectionCriterion; - private rtcStatsInterval; - private rtcStatsCriterion; - private audioStreams4TopN; - private topNAudioVolume; - private downLinkData; - private upLinkData; - private preNetQuality; - private readonly top3VolumeUserIds; - private readonly connectionsManager; - private readonly remoteUserManager; - private audioLevelTimer; - private readonly audioLevelInterval; - private upStreamData; - private sdpRepInfo; - private startupQoSMap; - private cmdMsgAbility; - private roomStreamStatus; - private isSignatureExpired; - private signatureExpiredRejoinTimeout; - private resolutionChangeInfo; - private pktsLostRate; - private predownVideoStreams; - private sfuConfigs; - constructor(config: ClientConfig, mainRelayRoomSymbol?: symbol); - private initReport4WindowEvent; - getSessionStatus(): ClientStatus; - on(event: any, func: any): void; - off(event: any, func?: any): void; - getSymbol(): symbol; - getInfo(): ProviderInfo; - enableTopThreeAudioMode(enable: boolean): boolean; - private enableTopThreeAudioModeImpl; - switchAudioMode(audioMode: number): Promise; - private switchAudioPolicyTop2User; - private resubscribeUserAudio; - private switchAudioPolicyUser2Top; - unsubscribeAudio4SubscribeUsers(): Promise; - unsubscribeAudio4Top(): Promise; - unsubscribeAudio4SubscribeAll(): Promise; - unsubscribeUsersAudio(): Promise; - getLocalAudioStats(): Promise>; - getLocalVideoStats(): Promise>; - getRemoteAudioStats(): Promise>; - getRemoteVideoStats(): Promise>; - isSendingStream(): boolean; - isReceivingStream(): boolean; - private getRemoteVideoTracksStatistic; - private getDownloadStatistic; - private getTrackDownloadStatistic; - private static getSenderType; - private getUploadStatistic; - getConnectionState(): string; - getTransportStats(): Promise; - private transportStatsRegularReport; - getICETransportStat(streamType: StreamType): RTCIceTransportStat; - private cleanTransportStats; - setNetworkBandwidth(bandwidthParam: NetworkBandwidth): void; - join(roomId: string, options: JoinConfig): Promise; - private joinImpl; - reportLogs(): void; - private statJoinRoomInfo; - enableRtcStats(enable: boolean, interval: number): Promise; - private enableRtcStatsImpl; - private doEnableRtcStats; - private doTriggerRtcStats; - private addRtcStatInfos; - leave(): Promise; - private leaveImpl; - private doLeaveRoom; - private resetConnection; - private rejoin; - changeStreamMuteStatusNotify(mute: boolean, mediaType: MediaType, content?: ContentType, hasSlideTrack?: boolean): Promise; - setSendBitrate(rtpSender: RTCRtpSender, maxBitrate: number, mediaType: string): Promise; - private static judgeNetworkQuality; - private calcPktsLostRate; - private smoothData; - private netQualityRegularReport; - private validatePublishRequest; - publish(stream: Stream, option?: PublishOption): Promise; - private publishImpl; - private publishStream; - private sendPublishRequest; - private startStreamResolutionDetection; - private stopStreamResolutionDetection; - private updateStreamTracks; - private updateMainStreamTrack; - private updateAuxStreamTrack; - private sendAudioMedia; - private sendVideoMedia; - private generateNewOfferSdp; - private sendPublishReq; - private addVideoTracksWhenPublish; - private addAudioTrackWhenPublish; - private removeTracksWhenPublish; - private getKeepAudioTrackSsrcSender; - private getKeepVideoTracksSsrcSender; - private buildSendMediaStreamInfo; - unpublish(stream: Stream): Promise; - private unpublishImpl; - private unPublishStream; - private unpublishSteamAndSignalIfNeed; - private rejoinPublishStreams; - private addLocalAuxStreamEndedHandler; - subscribeAudio(userId: string): Promise; - private subscribeAudioImpl; - unSubscribeAudio(userId: string): Promise; - unSubscribeAudioImpl(userId: string): Promise; - startupQoSReportPlay(id: string, start: number): void; - startupQoSReportCanPlay(event: any): void; - subscribe(stream: RemoteStream, option?: SubscribeOption): Promise; - private subscribeImpl; - doSubscribe(stream: RemoteStream, option: SubscribeOption, startupQoSCoreInfo: StartupQoSCoreInfo): Promise; - batchSubscribe(subscribeInfos: SubscribeParam[]): Promise; - private checkSubscribeParams; - doBatchSubscribe(subscribeInfos: SubscribeParam[]): Promise; - private batchDeleteUnusedSsrcInSdp; - enableStreamStateDetection(enable: boolean, interval: number): Promise; - private startStreamDetection; - unsubscribe(stream: Stream, option?: SubscribeOption): Promise; - private unsubscribeImpl; - switchRole(role: number, authorization: Authorization): Promise; - private switchRoleImpl; - getPublishAudioSender(): RTCRtpSender; - getPublishedMainAudioTrackInfo(): LocalTrackPublishInfo; - getPublishedMainVideoTrackInfos(): LocalTrackPublishInfo[]; - getPublishVideoSender(streamType: StreamType): RTCRtpSender[]; - getMainStreamSenderByTrack(trackId: string): RTCRtpSender; - private waitForTrackBatch; - private computeSucceedStreamCount; - private newSignal; - private negTransportChannelHandler; - private websocketChannelInit; - private onTrackHandler; - private static isStreamAdd; - private static isStreamRemove; - private static isStreamUpdate; - private static getMuteChangeStatus; - private static getMediaMuteChangeFlag; - private static getMuteChangeFlag; - private updateSubscribe; - private modifyBrowerSdp; - private getSubscribeExceptionResult; - private getSubscribeResultString; - private rollbackResource; - private isNormalStateStream; - private handleReadyStream; - private handleReadyStreamByType; - private getMediaNotifyInfo; - private reportMediaStatus; - private handleReadyTrack; - private handleRemoteStreamsState; - private isStreamTrackReady; - private handleRemoteStreamsStateByType; - private getRemoteUserSubscribeInfoString; - private releaseTrack; - private clearResource; - private generateReceiveSdp; - private static getWatchType4Ops; - private static isSubscriptionChange; - private appendSubscribeResult; - private buildSubsReq; - private subscribeSignal; - private buildDefaultSubsRep; - private static getUserTrackSubscribeInfo; - private static getUserUpdateInfos; - private getSubscribeResult; - private getStreamSubscribeResult; - private appendToSubscribeResult; - private static newRemoteUserSubscribeInfo; - private handleUnsubscribeReq; - private hasTrackSignalReq; - private getTracksSubscribeResults; - private getTrackSubscribeResult; - private updateUserList; - private refreshRemoteStreamList; - private updateSingleUser; - private updateAudioStreamInfo; - private remoteUserDisconnectNotify; - private remoteUserReconnectNotify; - private updateAppData; - private updateRemoteStream; - private handleMuteStatus; - private removeRemoteStream; - private emitMediaStatusChange; - private waitNotifyConfig; - private handleConfigNotifyBody; - private uploadLog; - private handleWatchMsg; - private reportMediaStreamInfo; - private publishWhenWatch; - setCameraCaptureReport(vdieoTrackActual: MediaTrackSettings, vdieoTrackSettings: MediaTrackSettings): void; - private signalEvent; - private kickRoom; - private refreshRoomUserInfos; - private doRefreshRoomUserInfos; - private rejoinLoop; - private handleRejoin; - private rejoinPublish; - private handleNotifySignatureExpired; - private handleNotifyConnectStateChange; - private cleanNetworkStatistic; - private cleanup; - private addSsrc4Top3; - private setAudioLevelStatTimer; - private addSsrc2SdpBatch; - private saveAudioStream4TopN; - private handleMaxVolumeNotify; - private handlePublishStatusNotify; - setVolume4TopThree(volume: number): void; - private setVolume4TopThreeImpl; - muteAudio4TopThree(enable: boolean): void; - private muteAudio4TopThreeImpl; - setAudioOutput4TopThree(deviceId: string): Promise; - isTopNAudioMuted(): boolean; - private isTopNAudioMutedImpl; - changeUserName(userName: string): Promise; - private changeUserNameImpl; - reportAudioMuteInfo(type: number, mute: boolean): void; - reportVideoMuteInfo(userId: string, mute: boolean): void; - startLiveStreaming(taskId: string, urls: string[], publishConfig: PublishConfig, userConfigs: UserConfig[]): Promise; - private startLiveStreamingImpl; - private getLiveStreamingUserInfos; - private getLocalLiveStreamingUserInfos; - private static getSsrcLayout; - private getRemoteLiveStreamingUserInfos; - private static updateSlidePublishInfo; - updateLiveStreaming(taskId: string, urls: string[], publishConfig: PublishConfig, userConfigs: UserConfig[]): Promise; - private updateLiveStreamingImpl; - stopLiveStreaming(taskId: string): Promise; - private stopLiveStreamingImpl; - setProxyServer(proxyServer: string): void; - setTurnServer(turnServerConfig: TurnServerConfig): void; - addMultiRoomMediaRelay(addRoomMediaRelayInfo: MultiRoomMediaRelayInfo): Promise; - stopMultiRoomMediaRelay(removeRoomMediaRelayInfo?: MultiRoomMediaRelayInfo): Promise; - addRelayClient(roomId: string): Client; - stopRelayClient(roomId: string): Promise; - enableCommandMsg(enable: boolean, options?: { - msgFormat?: CommandMsgFormat; - }): boolean; - sendCommandMsg(msg: string | ArrayBuffer, userId?: string): boolean; - private handleNotifyRoomStreamStatus; - private handleRoomStreamStatus; - renewSignature(ctime: string, signature: string): boolean; -} -type LogLevel$0 = (typeof LogLevels)[number]; -declare class HRTCEnter extends EmitterAbleAndStatisticAbleBase { - VERSION: string; - constructor(); - setLogLevel(level: LogLevel$0): void; - checkSystemRequirements(strictCheckBrowser?: boolean): Promise; - isScreenShareSupported(): boolean; - getDevices(): Promise; - getCameras(): Promise; - getMicrophones(): Promise; - getSpeakers(): Promise; - setParameter(parameterKey: string, parameterValue: any): boolean; - createClient(config: ClientConfig): Client; - createStream(config: StreamConfig): LocalStream; - getInfo(): ProviderInfo; -} -declare const expDefault: HRTCEnter; -export { expDefault as default }; diff --git a/sdk/src/rtc/sdk/hrtc.js b/sdk/src/rtc/sdk/hrtc.js deleted file mode 100644 index a634d00..0000000 --- a/sdk/src/rtc/sdk/hrtc.js +++ /dev/null @@ -1,18 +0,0 @@ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).HRTC=t()}(this,(function(){function e(e,t){return t.forEach((function(t){t&&"string"!=typeof t&&!Array.isArray(t)&&Object.keys(t).forEach((function(r){if("default"!==r&&!(r in e)){var i=Object.getOwnPropertyDescriptor(t,r);Object.defineProperty(e,r,i.get?i:{enumerable:!0,get:function(){return t[r]}})}}))})),Object.freeze(e)}function t(e){return t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},t(e)}function r(e){var r=function(e,r){if("object"!==t(e)||null===e)return e;var i=e[Symbol.toPrimitive];if(void 0!==i){var n=i.call(e,r||"default");if("object"!==t(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(e)}(e,"string");return"symbol"===t(r)?r:String(r)}function i(e,t,i){return(t=r(t))in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}function n(e,t,r,i,n){var o={};return Object.keys(i).forEach((function(e){o[e]=i[e]})),o.enumerable=!!o.enumerable,o.configurable=!!o.configurable,("value"in o||o.initializer)&&(o.writable=!0),o=r.slice().reverse().reduce((function(r,i){return i(e,t,r)||r}),o),n&&void 0!==o.initializer&&(o.value=o.initializer?o.initializer.call(n):void 0,o.initializer=void 0),void 0===o.initializer&&(Object.defineProperty(e,t,o),o=null),o}var o="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function s(e){var t=e.default;if("function"==typeof t){var r=function(){return t.apply(this,arguments)};r.prototype=t.prototype}else r={};return Object.defineProperty(r,"__esModule",{value:!0}),Object.keys(e).forEach((function(t){var i=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,i.get?i:{enumerable:!0,get:function(){return e[t]}})})),r}var a=function(e){return e&&e.Math==Math&&e},c=a("object"==typeof globalThis&&globalThis)||a("object"==typeof window&&window)||a("object"==typeof self&&self)||a("object"==typeof o&&o)||function(){return this}()||Function("return this")(),u={},d=function(e){try{return!!e()}catch(t){return!0}},l=!d((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]})),h=!d((function(){var e=function(){}.bind();return"function"!=typeof e||e.hasOwnProperty("prototype")})),f=h,p=Function.prototype.call,m=f?p.bind(p):function(){return p.apply(p,arguments)},g={},_={}.propertyIsEnumerable,S=Object.getOwnPropertyDescriptor,v=S&&!_.call({1:2},1);g.f=v?function(e){var t=S(this,e);return!!t&&t.enumerable}:_;var y,I,T=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}},R=h,E=Function.prototype,b=E.bind,C=E.call,A=R&&b.bind(C,C),w=R?function(e){return e&&A(e)}:function(e){return e&&function(){return C.apply(e,arguments)}},k=w,O=k({}.toString),P=k("".slice),M=function(e){return P(O(e),8,-1)},D=d,N=M,U=Object,x=w("".split),L=D((function(){return!U("z").propertyIsEnumerable(0)}))?function(e){return"String"==N(e)?x(e,""):U(e)}:U,B=TypeError,V=function(e){if(null==e)throw B("Can't call method on "+e);return e},Y=L,j=V,F=function(e){return Y(j(e))},H=function(e){return"function"==typeof e},K=H,z=function(e){return"object"==typeof e?null!==e:K(e)},W=c,G=H,J=function(e,t){return arguments.length<2?(r=W[e],G(r)?r:void 0):W[e]&&W[e][t];var r},q=w({}.isPrototypeOf),X=J("navigator","userAgent")||"",Q=c,$=X,Z=Q.process,ee=Q.Deno,te=Z&&Z.versions||ee&&ee.version,re=te&&te.v8;re&&(I=(y=re.split("."))[0]>0&&y[0]<4?1:+(y[0]+y[1])),!I&&$&&(!(y=$.match(/Edge\/(\d+)/))||y[1]>=74)&&(y=$.match(/Chrome\/(\d+)/))&&(I=+y[1]);var ie=I,ne=ie,oe=d,se=!!Object.getOwnPropertySymbols&&!oe((function(){var e=Symbol();return!String(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&ne&&ne<41})),ae=se&&!Symbol.sham&&"symbol"==typeof Symbol.iterator,ce=J,ue=H,de=q,le=Object,he=ae?function(e){return"symbol"==typeof e}:function(e){var t=ce("Symbol");return ue(t)&&de(t.prototype,le(e))},fe=String,pe=function(e){try{return fe(e)}catch(t){return"Object"}},me=H,ge=pe,_e=TypeError,Se=function(e){if(me(e))return e;throw _e(ge(e)+" is not a function")},ve=Se,ye=function(e,t){var r=e[t];return null==r?void 0:ve(r)},Ie=m,Te=H,Re=z,Ee=TypeError,be={exports:{}},Ce=c,Ae=Object.defineProperty,we=function(e,t){try{Ae(Ce,e,{value:t,configurable:!0,writable:!0})}catch(r){Ce[e]=t}return t},ke=we,Oe="__core-js_shared__",Pe=c[Oe]||ke(Oe,{}),Me=Pe;(be.exports=function(e,t){return Me[e]||(Me[e]=void 0!==t?t:{})})("versions",[]).push({version:"3.23.3",mode:"global",copyright:"© 2014-2022 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.23.3/LICENSE",source:"https://github.com/zloirock/core-js"});var De=V,Ne=Object,Ue=function(e){return Ne(De(e))},xe=Ue,Le=w({}.hasOwnProperty),Be=Object.hasOwn||function(e,t){return Le(xe(e),t)},Ve=w,Ye=0,je=Math.random(),Fe=Ve(1..toString),He=function(e){return"Symbol("+(void 0===e?"":e)+")_"+Fe(++Ye+je,36)},Ke=c,ze=be.exports,We=Be,Ge=He,Je=se,qe=ae,Xe=ze("wks"),Qe=Ke.Symbol,$e=Qe&&Qe.for,Ze=qe?Qe:Qe&&Qe.withoutSetter||Ge,et=function(e){if(!We(Xe,e)||!Je&&"string"!=typeof Xe[e]){var t="Symbol."+e;Je&&We(Qe,e)?Xe[e]=Qe[e]:Xe[e]=qe&&$e?$e(t):Ze(t)}return Xe[e]},tt=m,rt=z,it=he,nt=ye,ot=function(e,t){var r,i;if("string"===t&&Te(r=e.toString)&&!Re(i=Ie(r,e)))return i;if(Te(r=e.valueOf)&&!Re(i=Ie(r,e)))return i;if("string"!==t&&Te(r=e.toString)&&!Re(i=Ie(r,e)))return i;throw Ee("Can't convert object to primitive value")},st=TypeError,at=et("toPrimitive"),ct=function(e,t){if(!rt(e)||it(e))return e;var r,i=nt(e,at);if(i){if(void 0===t&&(t="default"),r=tt(i,e,t),!rt(r)||it(r))return r;throw st("Can't convert object to primitive value")}return void 0===t&&(t="number"),ot(e,t)},ut=ct,dt=he,lt=function(e){var t=ut(e,"string");return dt(t)?t:t+""},ht=z,ft=c.document,pt=ht(ft)&&ht(ft.createElement),mt=function(e){return pt?ft.createElement(e):{}},gt=mt,_t=!l&&!d((function(){return 7!=Object.defineProperty(gt("div"),"a",{get:function(){return 7}}).a})),St=l,vt=m,yt=g,It=T,Tt=F,Rt=lt,Et=Be,bt=_t,Ct=Object.getOwnPropertyDescriptor;u.f=St?Ct:function(e,t){if(e=Tt(e),t=Rt(t),bt)try{return Ct(e,t)}catch(r){}if(Et(e,t))return It(!vt(yt.f,e,t),e[t])};var At={},wt=l&&d((function(){return 42!=Object.defineProperty((function(){}),"prototype",{value:42,writable:!1}).prototype})),kt=z,Ot=String,Pt=TypeError,Mt=function(e){if(kt(e))return e;throw Pt(Ot(e)+" is not an object")},Dt=l,Nt=_t,Ut=wt,xt=Mt,Lt=lt,Bt=TypeError,Vt=Object.defineProperty,Yt=Object.getOwnPropertyDescriptor,jt="enumerable",Ft="configurable",Ht="writable";At.f=Dt?Ut?function(e,t,r){if(xt(e),t=Lt(t),xt(r),"function"==typeof e&&"prototype"===t&&"value"in r&&Ht in r&&!r[Ht]){var i=Yt(e,t);i&&i[Ht]&&(e[t]=r.value,r={configurable:Ft in r?r[Ft]:i[Ft],enumerable:jt in r?r[jt]:i[jt],writable:!1})}return Vt(e,t,r)}:Vt:function(e,t,r){if(xt(e),t=Lt(t),xt(r),Nt)try{return Vt(e,t,r)}catch(i){}if("get"in r||"set"in r)throw Bt("Accessors not supported");return"value"in r&&(e[t]=r.value),e};var Kt=At,zt=T,Wt=l?function(e,t,r){return Kt.f(e,t,zt(1,r))}:function(e,t,r){return e[t]=r,e},Gt={exports:{}},Jt=l,qt=Be,Xt=Function.prototype,Qt=Jt&&Object.getOwnPropertyDescriptor,$t=qt(Xt,"name"),Zt={EXISTS:$t,PROPER:$t&&"something"===function(){}.name,CONFIGURABLE:$t&&(!Jt||Jt&&Qt(Xt,"name").configurable)},er=H,tr=Pe,rr=w(Function.toString);er(tr.inspectSource)||(tr.inspectSource=function(e){return rr(e)});var ir,nr,or,sr=tr.inspectSource,ar=H,cr=sr,ur=c.WeakMap,dr=ar(ur)&&/native code/.test(cr(ur)),lr=be.exports,hr=He,fr=lr("keys"),pr=function(e){return fr[e]||(fr[e]=hr(e))},mr={},gr=dr,_r=c,Sr=w,vr=z,yr=Wt,Ir=Be,Tr=Pe,Rr=pr,Er=mr,br="Object already initialized",Cr=_r.TypeError,Ar=_r.WeakMap;if(gr||Tr.state){var wr=Tr.state||(Tr.state=new Ar),kr=Sr(wr.get),Or=Sr(wr.has),Pr=Sr(wr.set);ir=function(e,t){if(Or(wr,e))throw new Cr(br);return t.facade=e,Pr(wr,e,t),t},nr=function(e){return kr(wr,e)||{}},or=function(e){return Or(wr,e)}}else{var Mr=Rr("state");Er[Mr]=!0,ir=function(e,t){if(Ir(e,Mr))throw new Cr(br);return t.facade=e,yr(e,Mr,t),t},nr=function(e){return Ir(e,Mr)?e[Mr]:{}},or=function(e){return Ir(e,Mr)}}var Dr={set:ir,get:nr,has:or,enforce:function(e){return or(e)?nr(e):ir(e,{})},getterFor:function(e){return function(t){var r;if(!vr(t)||(r=nr(t)).type!==e)throw Cr("Incompatible receiver, "+e+" required");return r}}},Nr=d,Ur=H,xr=Be,Lr=l,Br=Zt.CONFIGURABLE,Vr=sr,Yr=Dr.enforce,jr=Dr.get,Fr=Object.defineProperty,Hr=Lr&&!Nr((function(){return 8!==Fr((function(){}),"length",{value:8}).length})),Kr=String(String).split("String"),zr=Gt.exports=function(e,t,r){"Symbol("===String(t).slice(0,7)&&(t="["+String(t).replace(/^Symbol\(([^)]*)\)/,"$1")+"]"),r&&r.getter&&(t="get "+t),r&&r.setter&&(t="set "+t),(!xr(e,"name")||Br&&e.name!==t)&&(Lr?Fr(e,"name",{value:t,configurable:!0}):e.name=t),Hr&&r&&xr(r,"arity")&&e.length!==r.arity&&Fr(e,"length",{value:r.arity});try{r&&xr(r,"constructor")&&r.constructor?Lr&&Fr(e,"prototype",{writable:!1}):e.prototype&&(e.prototype=void 0)}catch(n){}var i=Yr(e);return xr(i,"source")||(i.source=Kr.join("string"==typeof t?t:"")),e};Function.prototype.toString=zr((function(){return Ur(this)&&jr(this).source||Vr(this)}),"toString");var Wr=H,Gr=At,Jr=Gt.exports,qr=we,Xr=function(e,t,r,i){i||(i={});var n=i.enumerable,o=void 0!==i.name?i.name:t;if(Wr(r)&&Jr(r,o,i),i.global)n?e[t]=r:qr(t,r);else{try{i.unsafe?e[t]&&(n=!0):delete e[t]}catch(s){}n?e[t]=r:Gr.f(e,t,{value:r,enumerable:!1,configurable:!i.nonConfigurable,writable:!i.nonWritable})}return e},Qr={},$r=Math.ceil,Zr=Math.floor,ei=Math.trunc||function(e){var t=+e;return(t>0?Zr:$r)(t)},ti=ei,ri=function(e){var t=+e;return t!=t||0===t?0:ti(t)},ii=ri,ni=Math.max,oi=Math.min,si=function(e,t){var r=ii(e);return r<0?ni(r+t,0):oi(r,t)},ai=ri,ci=Math.min,ui=function(e){return e>0?ci(ai(e),9007199254740991):0},di=ui,li=function(e){return di(e.length)},hi=F,fi=si,pi=li,mi=function(e){return function(t,r,i){var n,o=hi(t),s=pi(o),a=fi(i,s);if(e&&r!=r){for(;s>a;)if((n=o[a++])!=n)return!0}else for(;s>a;a++)if((e||a in o)&&o[a]===r)return e||a||0;return!e&&-1}},gi={includes:mi(!0),indexOf:mi(!1)},_i=Be,Si=F,vi=gi.indexOf,yi=mr,Ii=w([].push),Ti=function(e,t){var r,i=Si(e),n=0,o=[];for(r in i)!_i(yi,r)&&_i(i,r)&&Ii(o,r);for(;t.length>n;)_i(i,r=t[n++])&&(~vi(o,r)||Ii(o,r));return o},Ri=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],Ei=Ti,bi=Ri.concat("length","prototype");Qr.f=Object.getOwnPropertyNames||function(e){return Ei(e,bi)};var Ci={};Ci.f=Object.getOwnPropertySymbols;var Ai=J,wi=Qr,ki=Ci,Oi=Mt,Pi=w([].concat),Mi=Ai("Reflect","ownKeys")||function(e){var t=wi.f(Oi(e)),r=ki.f;return r?Pi(t,r(e)):t},Di=Be,Ni=Mi,Ui=u,xi=At,Li=function(e,t,r){for(var i=Ni(t),n=xi.f,o=Ui.f,s=0;s=51&&/native code/.test(e))return!1;var r=new Ts((function(e){e(1)})),i=function(e){e((function(){}),(function(){}))};return(r.constructor={})[ks]=i,!(Os=r.then((function(){}))instanceof i)||!t&&As&&!Ps})),Ds={CONSTRUCTOR:Ms,REJECTION_EVENT:Ps,SUBCLASSING:Os},Ns={},Us=Se,xs=function(e){var t,r;this.promise=new e((function(e,i){if(void 0!==t||void 0!==r)throw TypeError("Bad Promise constructor");t=e,r=i})),this.resolve=Us(t),this.reject=Us(r)};Ns.f=function(e){return new xs(e)};var Ls,Bs,Vs,Ys=en,js=tn,Fs=c,Hs=m,Ks=Xr,zs=un,Ws=fn,Gs=Sn,Js=Se,qs=H,Xs=z,Qs=In,$s=to,Zs=Xo.set,ea=ps,ta=function(e,t){var r=ms.console;r&&r.error&&(1==arguments.length?r.error(e):r.error(e,t))},ra=gs,ia=Ss,na=Dr,oa=vs,sa=Ns,aa="Promise",ca=Ds.CONSTRUCTOR,ua=Ds.REJECTION_EVENT,da=Ds.SUBCLASSING,la=na.getterFor(aa),ha=na.set,fa=oa&&oa.prototype,pa=oa,ma=fa,ga=Fs.TypeError,_a=Fs.document,Sa=Fs.process,va=sa.f,ya=va,Ia=!!(_a&&_a.createEvent&&Fs.dispatchEvent),Ta="unhandledrejection",Ra=function(e){var t;return!(!Xs(e)||!qs(t=e.then))&&t},Ea=function(e,t){var r,i,n,o=t.value,s=1==t.state,a=s?e.ok:e.fail,c=e.resolve,u=e.reject,d=e.domain;try{a?(s||(2===t.rejection&&ka(t),t.rejection=1),!0===a?r=o:(d&&d.enter(),r=a(o),d&&(d.exit(),n=!0)),r===e.promise?u(ga("Promise-chain cycle")):(i=Ra(r))?Hs(i,r,c,u):c(r)):u(o)}catch(jN){d&&!n&&d.exit(),u(jN)}},ba=function(e,t){e.notified||(e.notified=!0,ea((function(){for(var r,i=e.reactions;r=i.get();)Ea(r,e);e.notified=!1,t&&!e.rejection&&Aa(e)})))},Ca=function(e,t,r){var i,n;Ia?((i=_a.createEvent("Event")).promise=t,i.reason=r,i.initEvent(e,!1,!0),Fs.dispatchEvent(i)):i={promise:t,reason:r},!ua&&(n=Fs["on"+e])?n(i):e===Ta&&ta("Unhandled promise rejection",r)},Aa=function(e){Hs(Zs,Fs,(function(){var t,r=e.facade,i=e.value;if(wa(e)&&(t=ra((function(){js?Sa.emit("unhandledRejection",i,r):Ca(Ta,r,i)})),e.rejection=js||wa(e)?2:1,t.error))throw t.value}))},wa=function(e){return 1!==e.rejection&&!e.parent},ka=function(e){Hs(Zs,Fs,(function(){var t=e.facade;js?Sa.emit("rejectionHandled",t):Ca("rejectionhandled",t,e.value)}))},Oa=function(e,t,r){return function(i){e(t,i,r)}},Pa=function(e,t,r){e.done||(e.done=!0,r&&(e=r),e.value=t,e.state=2,ba(e,!0))},Ma=function(e,t,r){if(!e.done){e.done=!0,r&&(e=r);try{if(e.facade===t)throw ga("Promise can't be resolved itself");var i=Ra(t);i?ea((function(){var r={done:!1};try{Hs(i,t,Oa(Ma,r,e),Oa(Pa,r,e))}catch(jN){Pa(r,jN,e)}})):(e.value=t,e.state=1,ba(e,!1))}catch(jN){Pa({done:!1},jN,e)}}};if(ca&&(ma=(pa=function(e){Qs(this,ma),Js(e),Hs(Ls,this);var t=la(this);try{e(Oa(Ma,t),Oa(Pa,t))}catch(jN){Pa(t,jN)}}).prototype,(Ls=function(e){ha(this,{type:aa,done:!1,notified:!1,parent:!1,reactions:new ia,rejection:!1,state:0,value:void 0})}).prototype=Ks(ma,"then",(function(e,t){var r=la(this),i=va($s(this,pa));return r.parent=!0,i.ok=!qs(e)||e,i.fail=qs(t)&&t,i.domain=js?Sa.domain:void 0,0==r.state?r.reactions.add(i):ea((function(){Ea(i,r)})),i.promise})),Bs=function(){var e=new Ls,t=la(e);this.promise=e,this.resolve=Oa(Ma,t),this.reject=Oa(Pa,t)},sa.f=va=function(e){return e===pa||undefined===e?new Bs(e):ya(e)},qs(oa)&&fa!==Object.prototype)){Vs=fa.then,da||Ks(fa,"then",(function(e,t){var r=this;return new pa((function(e,t){Hs(Vs,r,e,t)})).then(e,t)}),{unsafe:!0});try{delete fa.constructor}catch(jN){}zs&&zs(fa,ma)}Ys({global:!0,constructor:!0,wrap:!0,forced:ca},{Promise:pa}),Ws(pa,aa,!1),Gs(aa);var Da={},Na=Da,Ua=et("iterator"),xa=Array.prototype,La=function(e){return void 0!==e&&(Na.Array===e||xa[Ua]===e)},Ba=kn,Va=ye,Ya=Da,ja=et("iterator"),Fa=function(e){if(null!=e)return Va(e,ja)||Va(e,"@@iterator")||Ya[Ba(e)]},Ha=m,Ka=Se,za=Mt,Wa=pe,Ga=Fa,Ja=TypeError,qa=function(e,t){var r=arguments.length<2?Ga(e):t;if(Ka(r))return za(Ha(r,e));throw Ja(Wa(e)+" is not iterable")},Xa=m,Qa=Mt,$a=ye,Za=lo,ec=m,tc=Mt,rc=pe,ic=La,nc=li,oc=q,sc=qa,ac=Fa,cc=function(e,t,r){var i,n;Qa(e);try{if(!(i=$a(e,"return"))){if("throw"===t)throw r;return r}i=Xa(i,e)}catch(jN){n=!0,i=jN}if("throw"===t)throw r;if(n)throw i;return Qa(i),r},uc=TypeError,dc=function(e,t){this.stopped=e,this.result=t},lc=dc.prototype,hc=function(e,t,r){var i,n,o,s,a,c,u,d=r&&r.that,l=!(!r||!r.AS_ENTRIES),h=!(!r||!r.IS_ITERATOR),f=!(!r||!r.INTERRUPTED),p=Za(t,d),m=function(e){return i&&cc(i,"normal",e),new dc(!0,e)},g=function(e){return l?(tc(e),f?p(e[0],e[1],m):p(e[0],e[1])):f?p(e,m):p(e)};if(h)i=e;else{if(!(n=ac(e)))throw uc(rc(e)+" is not iterable");if(ic(n)){for(o=0,s=nc(e);s>o;o++)if((a=g(e[o]))&&oc(lc,a))return a;return new dc(!1)}i=sc(e,n)}for(c=i.next;!(u=ec(c,i)).done;){try{a=g(u.value)}catch(jN){cc(i,"throw",jN)}if("object"==typeof a&&a&&oc(lc,a))return a}return new dc(!1)},fc=et("iterator"),pc=!1;try{var mc=0,gc={next:function(){return{done:!!mc++}},return:function(){pc=!0}};gc[fc]=function(){return this},Array.from(gc,(function(){throw 2}))}catch(jN){}var _c=function(e,t){if(!t&&!pc)return!1;var r=!1;try{var i={};i[fc]=function(){return{next:function(){return{done:r=!0}}}},e(i)}catch(jN){}return r},Sc=vs,vc=Ds.CONSTRUCTOR||!_c((function(e){Sc.all(e).then(void 0,(function(){}))})),yc=m,Ic=Se,Tc=Ns,Rc=gs,Ec=hc;en({target:"Promise",stat:!0,forced:vc},{all:function(e){var t=this,r=Tc.f(t),i=r.resolve,n=r.reject,o=Rc((function(){var r=Ic(t.resolve),o=[],s=0,a=1;Ec(e,(function(e){var c=s++,u=!1;a++,yc(r,t,e).then((function(e){u||(u=!0,o[c]=e,--a||i(o))}),n)})),--a||i(o)}));return o.error&&n(o.value),r.promise}});var bc=en,Cc=Ds.CONSTRUCTOR,Ac=vs,wc=J,kc=H,Oc=Xr,Pc=Ac&&Ac.prototype;if(bc({target:"Promise",proto:!0,forced:Cc,real:!0},{catch:function(e){return this.then(void 0,e)}}),kc(Ac)){var Mc=wc("Promise").prototype.catch;Pc.catch!==Mc&&Oc(Pc,"catch",Mc,{unsafe:!0})}var Dc=m,Nc=Se,Uc=Ns,xc=gs,Lc=hc;en({target:"Promise",stat:!0,forced:vc},{race:function(e){var t=this,r=Uc.f(t),i=r.reject,n=xc((function(){var n=Nc(t.resolve);Lc(e,(function(e){Dc(n,t,e).then(r.resolve,i)}))}));return n.error&&i(n.value),r.promise}});var Bc=m,Vc=Ns;en({target:"Promise",stat:!0,forced:Ds.CONSTRUCTOR},{reject:function(e){var t=Vc.f(this);return Bc(t.reject,void 0,e),t.promise}});var Yc=Mt,jc=z,Fc=Ns,Hc=function(e,t){if(Yc(e),jc(t)&&t.constructor===e)return t;var r=Fc.f(e);return(0,r.resolve)(t),r.promise},Kc=en,zc=Ds.CONSTRUCTOR,Wc=Hc;J("Promise"),Kc({target:"Promise",stat:!0,forced:zc},{resolve:function(e){return Wc(this,e)}});let Gc=function(e){return e[e.RTC_ERR_CODE_SUCCESS=0]="RTC_ERR_CODE_SUCCESS",e[e.RTC_ERR_CODE_RTC_SDK_ERROR=90000001]="RTC_ERR_CODE_RTC_SDK_ERROR",e[e.RTC_ERR_CODE_WAIT_RSP_TIMEOUT=90000004]="RTC_ERR_CODE_WAIT_RSP_TIMEOUT",e[e.RTC_ERR_CODE_INVALID_PARAMETER=90000005]="RTC_ERR_CODE_INVALID_PARAMETER",e[e.RTC_ERR_CODE_INVALID_OPERATION=90100001]="RTC_ERR_CODE_INVALID_OPERATION",e[e.RTC_ERR_CODE_NOT_SUPPORT_MEDIA_DEVICES=90100002]="RTC_ERR_CODE_NOT_SUPPORT_MEDIA_DEVICES",e[e.RTC_ERR_CODE_NO_AVAILABLE_DEVICES=90100003]="RTC_ERR_CODE_NO_AVAILABLE_DEVICES",e[e.RTC_ERR_CODE_NO_AVAILABLE_VIDEO_INPUT_DEVICES=90100004]="RTC_ERR_CODE_NO_AVAILABLE_VIDEO_INPUT_DEVICES",e[e.RTC_ERR_CODE_NO_AVAILABLE_AUDIO_INPUT_DEVICES=90100005]="RTC_ERR_CODE_NO_AVAILABLE_AUDIO_INPUT_DEVICES",e[e.RTC_ERR_CODE_NO_AVAILABLE_AUDIO_OUTPUT_DEVICES=90100006]="RTC_ERR_CODE_NO_AVAILABLE_AUDIO_OUTPUT_DEVICES",e[e.RTC_ERR_CODE_STATUS_ERROR=90100007]="RTC_ERR_CODE_STATUS_ERROR",e[e.RTC_ERR_CODE_WEBSOCKET_NOT_CONNECTED=90100008]="RTC_ERR_CODE_WEBSOCKET_NOT_CONNECTED",e[e.RTC_ERR_CODE_WAIT_CONFIG_FAIL=90100009]="RTC_ERR_CODE_WAIT_CONFIG_FAIL",e[e.RTC_ERR_CODE_PUBLISH_RESPONSE_FAIL=90100010]="RTC_ERR_CODE_PUBLISH_RESPONSE_FAIL",e[e.RTC_ERR_CODE_REGION_NOT_COVERED=90100011]="RTC_ERR_CODE_REGION_NOT_COVERED",e[e.RTC_ERR_CODE_WEBSOCKET_CONNECT_TIMEOUT=90100012]="RTC_ERR_CODE_WEBSOCKET_CONNECT_TIMEOUT",e[e.RTC_ERR_CODE_WEBSOCKET_RECONNECT_TIMEOUT=90100013]="RTC_ERR_CODE_WEBSOCKET_RECONNECT_TIMEOUT",e[e.RTC_ERR_CODE_WEBSOCKET_NOT_OPEN=90100014]="RTC_ERR_CODE_WEBSOCKET_NOT_OPEN",e[e.RTC_ERR_CODE_WEBSOCKET_INTERRUPTED=90100015]="RTC_ERR_CODE_WEBSOCKET_INTERRUPTED",e[e.RTC_ERR_CODE_WEBSOCKET_CONNECT_ERROR=90100016]="RTC_ERR_CODE_WEBSOCKET_CONNECT_ERROR",e[e.RTC_ERR_CODE_CAPTURE_PERMISSION_DENIED=90100017]="RTC_ERR_CODE_CAPTURE_PERMISSION_DENIED",e[e.RTC_ERR_CODE_CAPTURE_OVER_CONSTRAINED=90100018]="RTC_ERR_CODE_CAPTURE_OVER_CONSTRAINED",e[e.RTC_ERR_CODE_CAPTURE_DEVICE_NOT_FOUND=90100019]="RTC_ERR_CODE_CAPTURE_DEVICE_NOT_FOUND",e[e.RTC_ERR_CODE_CAPTURE_DEVICE_NOT_READABLE=90100020]="RTC_ERR_CODE_CAPTURE_DEVICE_NOT_READABLE",e[e.RTC_ERR_CODE_PLAY_NOT_ALLOW=90100021]="RTC_ERR_CODE_PLAY_NOT_ALLOW",e[e.RTC_ERR_CODE_ROLE_NO_PERMISSION=90100022]="RTC_ERR_CODE_ROLE_NO_PERMISSION",e[e.RTC_ERR_CODE_ANSWER_SDP_INVALID=90100023]="RTC_ERR_CODE_ANSWER_SDP_INVALID",e[e.RTC_ERR_CODE_MEDIA_UPSTREAM_UNSUPPORTED=90100024]="RTC_ERR_CODE_MEDIA_UPSTREAM_UNSUPPORTED",e[e.RTC_ERR_CODE_WEBRTC_UNSUPPORTED=90100025]="RTC_ERR_CODE_WEBRTC_UNSUPPORTED",e[e.RTC_ERR_CODE_MEDIA_NETWORK_ERROR=90100026]="RTC_ERR_CODE_MEDIA_NETWORK_ERROR",e[e.RTC_ERR_CODE_CLIENT_RELAY_ROOM_OVER_MAXNUM=90100027]="RTC_ERR_CODE_CLIENT_RELAY_ROOM_OVER_MAXNUM",e[e.RTC_ERR_CODE_CLIENT_RELAY_JOINER_OVER_MAXNUM=90100028]="RTC_ERR_CODE_CLIENT_RELAY_JOINER_OVER_MAXNUM",e[e.RTC_ERR_CODE_ROOM_STREAM_STATUS_PAUSED=90100029]="RTC_ERR_CODE_ROOM_STREAM_STATUS_PAUSED",e[e.RTC_ERR_CODE_SIGNATURE_EXPIRED=90100030]="RTC_ERR_CODE_SIGNATURE_EXPIRED",e[e.RTC_ERR_CODE_SIGNATURE_INVALID=90100031]="RTC_ERR_CODE_SIGNATURE_INVALID",e[e.RTC_ERR_CODE_RTC_ACS=90100100]="RTC_ERR_CODE_RTC_ACS",e[e.RTC_ERR_CODE_RTC_CONTROL_ERROR=90100200]="RTC_ERR_CODE_RTC_CONTROL_ERROR",e[e.RTC_ERR_CODE_SFU_ERROR=90100600]="RTC_ERR_CODE_SFU_ERROR",e}({});const Jc={[Gc.RTC_ERR_CODE_SUCCESS]:"success",[Gc.RTC_ERR_CODE_RTC_SDK_ERROR]:"sdk internal error",[Gc.RTC_ERR_CODE_NOT_SUPPORT_MEDIA_DEVICES]:"not support enumerate devices",[Gc.RTC_ERR_CODE_NO_AVAILABLE_DEVICES]:"no available devices",[Gc.RTC_ERR_CODE_NO_AVAILABLE_VIDEO_INPUT_DEVICES]:"no available video input devices",[Gc.RTC_ERR_CODE_NO_AVAILABLE_AUDIO_INPUT_DEVICES]:"no available audio input devices",[Gc.RTC_ERR_CODE_NO_AVAILABLE_AUDIO_OUTPUT_DEVICES]:"no available audio output devices",[Gc.RTC_ERR_CODE_STATUS_ERROR]:"room status error",[Gc.RTC_ERR_CODE_INVALID_PARAMETER]:"invalid parameter",[Gc.RTC_ERR_CODE_WEBSOCKET_NOT_CONNECTED]:'websocket connection state is not "CONNECTED"',[Gc.RTC_ERR_CODE_WEBSOCKET_NOT_OPEN]:"websocket is not open",[Gc.RTC_ERR_CODE_WAIT_CONFIG_FAIL]:"wait server config fail",[Gc.RTC_ERR_CODE_WAIT_RSP_TIMEOUT]:"message response timeout",[Gc.RTC_ERR_CODE_PUBLISH_RESPONSE_FAIL]:"publish response fail",[Gc.RTC_ERR_CODE_REGION_NOT_COVERED]:"current region is not covered, service unavailable",[Gc.RTC_ERR_CODE_WEBSOCKET_CONNECT_TIMEOUT]:"websocket connect timeout",[Gc.RTC_ERR_CODE_WEBSOCKET_RECONNECT_TIMEOUT]:"websocket reconnect timeout",[Gc.RTC_ERR_CODE_WEBSOCKET_INTERRUPTED]:"websocket connection state is idle, interrupt operation",[Gc.RTC_ERR_CODE_CAPTURE_PERMISSION_DENIED]:"capture failed, permission denied",[Gc.RTC_ERR_CODE_CAPTURE_OVER_CONSTRAINED]:"capture failed, Constraint parameter invalid",[Gc.RTC_ERR_CODE_CAPTURE_DEVICE_NOT_FOUND]:"capture failed, requested device not found",[Gc.RTC_ERR_CODE_CAPTURE_DEVICE_NOT_READABLE]:"capture failed, maybe device is occupied by other application",[Gc.RTC_ERR_CODE_PLAY_NOT_ALLOW]:"the user didn't interact with the document first, please trigger by gesture",[Gc.RTC_ERR_CODE_ROLE_NO_PERMISSION]:"the user role have no permission to operate",[Gc.RTC_ERR_CODE_ANSWER_SDP_INVALID]:"the answer sdp is invalid",[Gc.RTC_ERR_CODE_MEDIA_UPSTREAM_UNSUPPORTED]:"the upstream media is not supported",[Gc.RTC_ERR_CODE_WEBRTC_UNSUPPORTED]:"the browser does not support",[Gc.RTC_ERR_CODE_MEDIA_NETWORK_ERROR]:"media connection establish failed, please switch network or try again later",[Gc.RTC_ERR_CODE_CLIENT_RELAY_ROOM_OVER_MAXNUM]:"relay room number over maxium number.",[Gc.RTC_ERR_CODE_ROOM_STREAM_STATUS_PAUSED]:"room stream status paused",[Gc.RTC_ERR_CODE_CLIENT_RELAY_JOINER_OVER_MAXNUM]:"joiner already exist in relay rooms.",[Gc.RTC_ERR_CODE_SIGNATURE_INVALID]:"signature invalid",[Gc.RTC_ERR_CODE_SIGNATURE_EXPIRED]:"signature expired"};class qc extends Error{constructor(e,t){const r=e;let i,n="";r>9e7&&r<90100100||r<100?(i=r,n=t||r in Gc&&Jc[r]):r>=6e5&&r<7e5?(i=Gc.RTC_ERR_CODE_SFU_ERROR,n="code: ".concat(r,", msg: ").concat(t)):r>=2e5&&r<3e5?(i=Gc.RTC_ERR_CODE_RTC_CONTROL_ERROR,n="code: ".concat(r,", msg: ").concat(t)):r>=1e5&&r<2e5?(i=Gc.RTC_ERR_CODE_RTC_ACS,n="code: ".concat(r,", msg: ").concat(t)):(n="unknow error",i=r),super(n),this.code=i,this.message=n}getCode(){return this.code}getMsg(){return this.message}toString(){return'["code": '.concat(this.code,', "message": "').concat(this.message,'"]')}}var Xc=kn,Qc=String,$c=function(e){if("Symbol"===Xc(e))throw TypeError("Cannot convert a Symbol value to a string");return Qc(e)},Zc=en,eu=l,tu=c,ru=w,iu=Be,nu=H,ou=q,su=$c,au=At.f,cu=Li,uu=tu.Symbol,du=uu&&uu.prototype;if(eu&&nu(uu)&&(!("description"in du)||void 0!==uu().description)){var lu={},hu=function(){var e=arguments.length<1||void 0===arguments[0]?void 0:su(arguments[0]),t=ou(du,this)?new uu(e):void 0===e?uu():uu(e);return""===e&&(lu[t]=!0),t};cu(hu,uu),hu.prototype=du,du.constructor=hu;var fu="Symbol(test)"==String(uu("test")),pu=ru(du.toString),mu=ru(du.valueOf),gu=/^Symbol\((.*)\)[^)]+$/,_u=ru("".replace),Su=ru("".slice);au(du,"description",{configurable:!0,get:function(){var e=mu(this),t=pu(e);if(iu(lu,e))return"";var r=fu?Su(t,7,-1):_u(t,gu,"$1");return""===r?void 0:r}}),Zc({global:!0,constructor:!0,forced:!0},{Symbol:hu})}var vu={},yu=Ti,Iu=Ri,Tu=Object.keys||function(e){return yu(e,Iu)},Ru=l,Eu=wt,bu=At,Cu=Mt,Au=F,wu=Tu;vu.f=Ru&&!Eu?Object.defineProperties:function(e,t){Cu(e);for(var r,i=Au(t),n=wu(t),o=n.length,s=0;o>s;)bu.f(e,r=n[s++],i[r]);return e};var ku,Ou=Mt,Pu=vu,Mu=Ri,Du=mr,Nu=ho,Uu=mt,xu="prototype",Lu="script",Bu=pr("IE_PROTO"),Vu=function(){},Yu=function(e){return"<"+Lu+">"+e+""},ju=function(e){e.write(Yu("")),e.close();var t=e.parentWindow.Object;return e=null,t},Fu=function(){try{ku=new ActiveXObject("htmlfile")}catch(jN){}var e,t,r;Fu="undefined"!=typeof document?document.domain&&ku?ju(ku):(t=Uu("iframe"),r="java"+Lu+":",t.style.display="none",Nu.appendChild(t),t.src=String(r),(e=t.contentWindow.document).open(),e.write(Yu("document.F=Object")),e.close(),e.F):ju(ku);for(var i=Mu.length;i--;)delete Fu[xu][Mu[i]];return Fu()};Du[Bu]=!0;var Hu=Object.create||function(e,t){var r;return null!==e?(Vu[xu]=Ou(e),r=new Vu,Vu[xu]=null,r[Bu]=e):r=Fu(),void 0===t?r:Pu.f(r,t)},Ku=et,zu=Hu,Wu=At.f,Gu=Ku("unscopables"),Ju=Array.prototype;null==Ju[Gu]&&Wu(Ju,Gu,{configurable:!0,value:zu(null)});var qu,Xu,Qu,$u=function(e){Ju[Gu][e]=!0},Zu=!d((function(){function e(){}return e.prototype.constructor=null,Object.getPrototypeOf(new e)!==e.prototype})),ed=Be,td=H,rd=Ue,id=Zu,nd=pr("IE_PROTO"),od=Object,sd=od.prototype,ad=id?od.getPrototypeOf:function(e){var t=rd(e);if(ed(t,nd))return t[nd];var r=t.constructor;return td(r)&&t instanceof r?r.prototype:t instanceof od?sd:null},cd=d,ud=H,dd=ad,ld=Xr,hd=et("iterator"),fd=!1;[].keys&&("next"in(Qu=[].keys())?(Xu=dd(dd(Qu)))!==Object.prototype&&(qu=Xu):fd=!0);var pd=null==qu||cd((function(){var e={};return qu[hd].call(e)!==e}));pd&&(qu={}),ud(qu[hd])||ld(qu,hd,(function(){return this}));var md={IteratorPrototype:qu,BUGGY_SAFARI_ITERATORS:fd},gd=md.IteratorPrototype,_d=Hu,Sd=T,vd=fn,yd=Da,Id=function(){return this},Td=en,Rd=m,Ed=H,bd=function(e,t,r,i){var n=t+" Iterator";return e.prototype=_d(gd,{next:Sd(+!i,r)}),vd(e,n,!1),yd[n]=Id,e},Cd=ad,Ad=un,wd=fn,kd=Wt,Od=Xr,Pd=Da,Md=Zt.PROPER,Dd=Zt.CONFIGURABLE,Nd=md.IteratorPrototype,Ud=md.BUGGY_SAFARI_ITERATORS,xd=et("iterator"),Ld="keys",Bd="values",Vd="entries",Yd=function(){return this},jd=F,Fd=$u,Hd=Da,Kd=Dr,zd=At.f,Wd=function(e,t,r,i,n,o,s){bd(r,t,i);var a,c,u,d=function(e){if(e===n&&m)return m;if(!Ud&&e in f)return f[e];switch(e){case Ld:case Bd:case Vd:return function(){return new r(this,e)}}return function(){return new r(this)}},l=t+" Iterator",h=!1,f=e.prototype,p=f[xd]||f["@@iterator"]||n&&f[n],m=!Ud&&p||d(n),g="Array"==t&&f.entries||p;if(g&&(a=Cd(g.call(new e)))!==Object.prototype&&a.next&&(Cd(a)!==Nd&&(Ad?Ad(a,Nd):Ed(a[xd])||Od(a,xd,Yd)),wd(a,l,!0)),Md&&n==Bd&&p&&p.name!==Bd&&(Dd?kd(f,"name",Bd):(h=!0,m=function(){return Rd(p,this)})),n)if(c={values:d(Bd),keys:o?m:d(Ld),entries:d(Vd)},s)for(u in c)(Ud||h||!(u in f))&&Od(f,u,c[u]);else Td({target:t,proto:!0,forced:Ud||h},c);return f[xd]!==m&&Od(f,xd,m,{name:n}),Pd[t]=m,c},Gd=l,Jd="Array Iterator",qd=Kd.set,Xd=Kd.getterFor(Jd),Qd=Wd(Array,"Array",(function(e,t){qd(this,{type:Jd,target:jd(e),index:0,kind:t})}),(function(){var e=Xd(this),t=e.target,r=e.kind,i=e.index++;return!t||i>=t.length?(e.target=void 0,{value:void 0,done:!0}):"keys"==r?{value:i,done:!1}:"values"==r?{value:t[i],done:!1}:{value:[i,t[i]],done:!1}}),"values"),$d=Hd.Arguments=Hd.Array;if(Fd("keys"),Fd("values"),Fd("entries"),Gd&&"values"!==$d.name)try{zd($d,"name",{value:"values"})}catch(jN){}var Zd=m,el=Se,tl=Mt,rl=function(){for(var e,t=tl(this),r=el(t.delete),i=!0,n=0,o=arguments.length;n1?arguments[1]:void 0);return!cl(r,(function(e,r,n){if(!i(r,e,t))return n()}),{AS_ENTRIES:!0,IS_ITERATOR:!0,INTERRUPTED:!0}).stopped}});var ul=J,dl=lo,ll=m,hl=Se,fl=Mt,pl=to,ml=nl,gl=hc;en({target:"Map",proto:!0,real:!0,forced:!0},{filter:function(e){var t=fl(this),r=ml(t),i=dl(e,arguments.length>1?arguments[1]:void 0),n=new(pl(t,ul("Map"))),o=hl(n.set);return gl(r,(function(e,r){i(r,e,t)&&ll(o,n,e,r)}),{AS_ENTRIES:!0,IS_ITERATOR:!0}),n}});var _l=Mt,Sl=lo,vl=nl,yl=hc;en({target:"Map",proto:!0,real:!0,forced:!0},{find:function(e){var t=_l(this),r=vl(t),i=Sl(e,arguments.length>1?arguments[1]:void 0);return yl(r,(function(e,r,n){if(i(r,e,t))return n(r)}),{AS_ENTRIES:!0,IS_ITERATOR:!0,INTERRUPTED:!0}).result}});var Il=Mt,Tl=lo,Rl=nl,El=hc;en({target:"Map",proto:!0,real:!0,forced:!0},{findKey:function(e){var t=Il(this),r=Rl(t),i=Tl(e,arguments.length>1?arguments[1]:void 0);return El(r,(function(e,r,n){if(i(r,e,t))return n(e)}),{AS_ENTRIES:!0,IS_ITERATOR:!0,INTERRUPTED:!0}).result}});var bl=Mt,Cl=nl,Al=function(e,t){return e===t||e!=e&&t!=t},wl=hc;en({target:"Map",proto:!0,real:!0,forced:!0},{includes:function(e){return wl(Cl(bl(this)),(function(t,r,i){if(Al(r,e))return i()}),{AS_ENTRIES:!0,IS_ITERATOR:!0,INTERRUPTED:!0}).stopped}});var kl=Mt,Ol=nl,Pl=hc;en({target:"Map",proto:!0,real:!0,forced:!0},{keyOf:function(e){return Pl(Ol(kl(this)),(function(t,r,i){if(r===e)return i(t)}),{AS_ENTRIES:!0,IS_ITERATOR:!0,INTERRUPTED:!0}).result}});var Ml=J,Dl=lo,Nl=m,Ul=Se,xl=Mt,Ll=to,Bl=nl,Vl=hc;en({target:"Map",proto:!0,real:!0,forced:!0},{mapKeys:function(e){var t=xl(this),r=Bl(t),i=Dl(e,arguments.length>1?arguments[1]:void 0),n=new(Ll(t,Ml("Map"))),o=Ul(n.set);return Vl(r,(function(e,r){Nl(o,n,i(r,e,t),r)}),{AS_ENTRIES:!0,IS_ITERATOR:!0}),n}});var Yl=J,jl=lo,Fl=m,Hl=Se,Kl=Mt,zl=to,Wl=nl,Gl=hc;en({target:"Map",proto:!0,real:!0,forced:!0},{mapValues:function(e){var t=Kl(this),r=Wl(t),i=jl(e,arguments.length>1?arguments[1]:void 0),n=new(zl(t,Yl("Map"))),o=Hl(n.set);return Gl(r,(function(e,r){Fl(o,n,e,i(r,e,t))}),{AS_ENTRIES:!0,IS_ITERATOR:!0}),n}});var Jl=Se,ql=Mt,Xl=hc;en({target:"Map",proto:!0,real:!0,arity:1,forced:!0},{merge:function(e){for(var t=ql(this),r=Jl(t.set),i=arguments.length,n=0;n1?arguments[1]:void 0);return oh(r,(function(e,r,n){if(i(r,e,t))return n()}),{AS_ENTRIES:!0,IS_ITERATOR:!0,INTERRUPTED:!0}).stopped}});var sh=m,ah=Mt,ch=Se,uh=TypeError;en({target:"Map",proto:!0,real:!0,forced:!0},{update:function(e,t){var r=ah(this),i=ch(r.get),n=ch(r.has),o=ch(r.set),s=arguments.length;ch(t);var a=sh(n,r,e);if(!a&&s<3)throw uh("Updating absent value");var c=a?sh(i,r,e):ch(s>2?arguments[2]:void 0)(e,r);return sh(o,r,e,t(c,e,r)),r}});var dh={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0},lh=mt("span").classList,hh=lh&&lh.constructor&&lh.constructor.prototype,fh=hh===Object.prototype?void 0:hh,ph=c,mh=dh,gh=fh,_h=Qd,Sh=Wt,vh=et,yh=vh("iterator"),Ih=vh("toStringTag"),Th=_h.values,Rh=function(e,t){if(e){if(e[yh]!==Th)try{Sh(e,yh,Th)}catch(jN){e[yh]=Th}if(e[Ih]||Sh(e,Ih,t),mh[t])for(var r in _h)if(e[r]!==_h[r])try{Sh(e,r,_h[r])}catch(jN){e[r]=_h[r]}}};for(var Eh in mh)Rh(ph[Eh]&&ph[Eh].prototype,Eh);Rh(gh,"DOMTokenList");var bh=M,Ch=Array.isArray||function(e){return"Array"==bh(e)},Ah=Gn,wh=z,kh=et("species"),Oh=Array,Ph=function(e){var t;return Ch(e)&&(t=e.constructor,(Ah(t)&&(t===Oh||Ch(t.prototype))||wh(t)&&null===(t=t[kh]))&&(t=void 0)),void 0===t?Oh:t},Mh=lo,Dh=L,Nh=Ue,Uh=li,xh=function(e,t){return new(Ph(e))(0===t?0:t)},Lh=w([].push),Bh=function(e){var t=1==e,r=2==e,i=3==e,n=4==e,o=6==e,s=7==e,a=5==e||o;return function(c,u,d,l){for(var h,f,p=Nh(c),m=Dh(p),g=Mh(u,d),_=Uh(m),S=0,v=l||xh,y=t?v(c,_):r||s?v(c,0):void 0;_>S;S++)if((a||S in m)&&(f=g(h=m[S],S,p),e))if(t)y[S]=f;else if(f)switch(e){case 3:return!0;case 5:return h;case 6:return S;case 2:Lh(y,h)}else switch(e){case 4:return!1;case 7:Lh(y,h)}return o?-1:i||n?n:y}},Vh={forEach:Bh(0),map:Bh(1),filter:Bh(2),some:Bh(3),every:Bh(4),find:Bh(5),findIndex:Bh(6),filterReject:Bh(7)},Yh=d,jh=function(e,t){var r=[][e];return!!r&&Yh((function(){r.call(null,t||function(){return 1},1)}))},Fh=Vh.forEach,Hh=jh("forEach")?[].forEach:function(e){return Fh(this,e,arguments.length>1?arguments[1]:void 0)},Kh=c,zh=dh,Wh=fh,Gh=Hh,Jh=Wt,qh=function(e){if(e&&e.forEach!==Gh)try{Jh(e,"forEach",Gh)}catch(jN){e.forEach=Gh}};for(var Xh in zh)zh[Xh]&&qh(Kh[Xh]&&Kh[Xh].prototype);qh(Wh);var Qh=gi.includes,$h=$u;en({target:"Array",proto:!0,forced:d((function(){return!Array(1).includes()}))},{includes:function(e){return Qh(this,e,arguments.length>1?arguments[1]:void 0)}}),$h("includes");var Zh=Mt,ef=function(){var e=Zh(this),t="";return e.hasIndices&&(t+="d"),e.global&&(t+="g"),e.ignoreCase&&(t+="i"),e.multiline&&(t+="m"),e.dotAll&&(t+="s"),e.unicode&&(t+="u"),e.unicodeSets&&(t+="v"),e.sticky&&(t+="y"),t},tf=d,rf=c.RegExp,nf=tf((function(){var e=rf("a","y");return e.lastIndex=2,null!=e.exec("abcd")})),of=nf||tf((function(){return!rf("a","y").sticky})),sf=nf||tf((function(){var e=rf("^r","gy");return e.lastIndex=2,null!=e.exec("str")})),af={BROKEN_CARET:sf,MISSED_STICKY:of,UNSUPPORTED_Y:nf},cf=d,uf=c.RegExp,df=cf((function(){var e=uf(".","s");return!(e.dotAll&&e.exec("\n")&&"s"===e.flags)})),lf=d,hf=c.RegExp,ff=lf((function(){var e=hf("(?
b)","g");return"b"!==e.exec("b").groups.a||"bc"!=="b".replace(e,"$c")})),pf=m,mf=w,gf=$c,_f=ef,Sf=af,vf=be.exports,yf=Hu,If=Dr.get,Tf=df,Rf=ff,Ef=vf("native-string-replace",String.prototype.replace),bf=RegExp.prototype.exec,Cf=bf,Af=mf("".charAt),wf=mf("".indexOf),kf=mf("".replace),Of=mf("".slice),Pf=function(){var e=/a/,t=/b*/g;return pf(bf,e,"a"),pf(bf,t,"a"),0!==e.lastIndex||0!==t.lastIndex}(),Mf=Sf.BROKEN_CARET,Df=void 0!==/()??/.exec("")[1];(Pf||Df||Mf||Tf||Rf)&&(Cf=function(e){var t,r,i,n,o,s,a,c=this,u=If(c),d=gf(e),l=u.raw;if(l)return l.lastIndex=c.lastIndex,t=pf(Cf,l,d),c.lastIndex=l.lastIndex,t;var h=u.groups,f=Mf&&c.sticky,p=pf(_f,c),m=c.source,g=0,_=d;if(f&&(p=kf(p,"y",""),-1===wf(p,"g")&&(p+="g"),_=Of(d,c.lastIndex),c.lastIndex>0&&(!c.multiline||c.multiline&&"\n"!==Af(d,c.lastIndex-1))&&(m="(?: "+m+")",_=" "+_,g++),r=new RegExp("^(?:"+m+")",p)),Df&&(r=new RegExp("^"+m+"$(?!\\s)",p)),Pf&&(i=c.lastIndex),n=pf(bf,f?r:c,_),f?n?(n.input=Of(n.input,g),n[0]=Of(n[0],g),n.index=c.lastIndex,c.lastIndex+=n[0].length):c.lastIndex=0:Pf&&n&&(c.lastIndex=c.global?n.index+n[0].length:i),Df&&n&&n.length>1&&pf(Ef,n[0],r,(function(){for(o=1;o=a?e?"":void 0:(i=Jf(o,s))<55296||i>56319||s+1===a||(n=Jf(o,s+1))<56320||n>57343?e?Gf(o,s):i:e?qf(o,s,s+2):n-56320+(i-55296<<10)+65536}},Qf={codeAt:Xf(!1),charAt:Xf(!0)}.charAt,$f=w,Zf=Ue,ep=Math.floor,tp=$f("".charAt),rp=$f("".replace),ip=$f("".slice),np=/\$([$&'`]|\d{1,2}|<[^>]*>)/g,op=/\$([$&'`]|\d{1,2})/g,sp=function(e,t,r,i,n,o){var s=r+e.length,a=i.length,c=op;return void 0!==n&&(n=Zf(n),c=np),rp(o,c,(function(o,c){var u;switch(tp(c,0)){case"$":return"$";case"&":return e;case"`":return ip(t,0,r);case"'":return ip(t,s);case"<":u=n[ip(c,1,-1)];break;default:var d=+c;if(0===d)return o;if(d>a){var l=ep(d/10);return 0===l?o:l<=a?void 0===i[l-1]?tp(c,1):i[l-1]+tp(c,1):o}u=i[d-1]}return void 0===u?"":u}))},ap=m,cp=Mt,up=H,dp=M,lp=Nf,hp=TypeError,fp=so,pp=m,mp=w,gp=function(e,t,r,i){var n=Vf(e),o=!Bf((function(){var t={};return t[n]=function(){return 7},7!=""[e](t)})),s=o&&!Bf((function(){var t=!1,r=/a/;return"split"===e&&((r={}).constructor={},r.constructor[jf]=function(){return r},r.flags="",r[n]=/./[n]),r.exec=function(){return t=!0,null},r[n](""),!t}));if(!o||!s||r){var a=Uf(/./[n]),c=t(n,""[e],(function(e,t,r,i,n){var s=Uf(e),c=t.exec;return c===Lf||c===Ff.exec?o&&!n?{done:!0,value:a(t,r,i)}:{done:!0,value:s(r,t,i)}:{done:!1}}));xf(String.prototype,e,c[0]),xf(Ff,n,c[1])}i&&Yf(Ff[n],"sham",!0)},_p=d,Sp=Mt,vp=H,yp=ri,Ip=ui,Tp=$c,Rp=V,Ep=function(e,t,r){return t+(r?Qf(e,t).length:1)},bp=ye,Cp=sp,Ap=function(e,t){var r=e.exec;if(up(r)){var i=ap(r,e,t);return null!==i&&cp(i),i}if("RegExp"===dp(e))return ap(lp,e,t);throw hp("RegExp#exec called on incompatible receiver")},wp=et("replace"),kp=Math.max,Op=Math.min,Pp=mp([].concat),Mp=mp([].push),Dp=mp("".indexOf),Np=mp("".slice),Up="$0"==="a".replace(/./,"$0"),xp=!!/./[wp]&&""===/./[wp]("a","$0"),Lp=!_p((function(){var e=/./;return e.exec=function(){var e=[];return e.groups={a:"7"},e},"7"!=="".replace(e,"$")}));gp("replace",(function(e,t,r){var i=xp?"$":"$0";return[function(e,r){var i=Rp(this),n=null==e?void 0:bp(e,wp);return n?pp(n,e,i,r):pp(t,Tp(i),e,r)},function(e,n){var o=Sp(this),s=Tp(e);if("string"==typeof n&&-1===Dp(n,i)&&-1===Dp(n,"$<")){var a=r(t,o,s,n);if(a.done)return a.value}var c=vp(n);c||(n=Tp(n));var u=o.global;if(u){var d=o.unicode;o.lastIndex=0}for(var l=[];;){var h=Ap(o,s);if(null===h)break;if(Mp(l,h),!u)break;""===Tp(h[0])&&(o.lastIndex=Ep(s,Ip(o.lastIndex),d))}for(var f,p="",m=0,g=0;g=m&&(p+=Np(s,m,S)+R,m=S+_.length)}return p+Np(s,m)}]}),!Lp||!Up||xp);var Bp=z,Vp=M,Yp=et("match"),jp=function(e){var t;return Bp(e)&&(void 0!==(t=e[Yp])?!!t:"RegExp"==Vp(e))},Fp=m,Hp=Be,Kp=q,zp=ef,Wp=RegExp.prototype,Gp=function(e){var t=e.flags;return void 0!==t||"flags"in Wp||Hp(e,"flags")||!Kp(Wp,e)?t:Fp(zp,e)},Jp=en,qp=m,Xp=w,Qp=V,$p=H,Zp=jp,em=$c,tm=ye,rm=Gp,im=sp,nm=et("replace"),om=TypeError,sm=Xp("".indexOf);Xp("".replace);var am=Xp("".slice),cm=Math.max,um=function(e,t,r){return r>e.length?-1:""===t?r:sm(e,t,r)};Jp({target:"String",proto:!0},{replaceAll:function(e,t){var r,i,n,o,s,a,c,u,d=Qp(this),l=0,h=0,f="";if(null!=e){if(Zp(e)&&(r=em(Qp(rm(e))),!~sm(r,"g")))throw om("`.replaceAll` does not allow non-global regexes");if(i=tm(e,nm))return qp(i,e,d,t)}for(n=em(d),o=em(e),(s=$p(t))||(t=em(t)),a=o.length,c=cm(1,a),l=um(n,o,0);-1!==l;)u=s?em(t(o,l,n)):im(o,n,l,[],void 0,t),f+=am(n,h,l)+u,h=l+a,l=um(n,o,l+c);return h@^][^\s!#%&*+<=>@^]*>/,zm=/a/g,Wm=/a/g,Gm=new xm(zm)!==zm,Jm=Cm.MISSED_STICKY,qm=Cm.UNSUPPORTED_Y,Xm=mm&&(!Gm||Jm||Dm||Nm||km((function(){return Wm[Um]=!1,xm(zm)!=zm||xm(Wm)==Wm||"/a/i"!=xm(zm,"i")})));if(Sm("RegExp",Xm)){for(var Qm=function(e,t){var r,i,n,o,s,a,c=Tm(Lm,this),u=Rm(e),d=void 0===t,l=[],h=e;if(!c&&u&&d&&e.constructor===Qm)return e;if((u||Tm(Lm,e))&&(e=e.source,d&&(t=bm(h))),e=void 0===e?"":Em(e),t=void 0===t?"":Em(t),h=e,Dm&&"dotAll"in zm&&(i=!!t&&Fm(t,"s")>-1)&&(t=jm(t,/s/g,"")),r=t,Jm&&"sticky"in zm&&(n=!!t&&Fm(t,"y")>-1)&&qm&&(t=jm(t,/y/g,"")),Nm&&(o=function(e){for(var t,r=e.length,i=0,n="",o=[],s={},a=!1,c=!1,u=0,d="";i<=r;i++){if("\\"===(t=Ym(e,i)))t+=Ym(e,++i);else if("]"===t)a=!1;else if(!a)switch(!0){case"["===t:a=!0;break;case"("===t:Vm(Km,Hm(e,i+1))&&(i+=2,c=!0),n+=t,u++;continue;case">"===t&&c:if(""===d||Om(s,d))throw new Bm("Invalid capture group name");s[d]=!0,o[o.length]=[d,u],c=!1,d="";continue}c?d+=t:n+=t}return[n,o]}(e),e=o[0],l=o[1]),s=vm(xm(e,t),c?this:Lm,Qm),(i||n||l.length)&&(a=Pm(s),i&&(a.dotAll=!0,a.raw=Qm(function(e){for(var t,r=e.length,i=0,n="",o=!1;i<=r;i++)"\\"!==(t=Ym(e,i))?o||"."!==t?("["===t?o=!0:"]"===t&&(o=!1),n+=t):n+="[\\s\\S]":n+=t+Ym(e,++i);return n}(e),r)),n&&(a.sticky=!0),l.length&&(a.groups=l)),e!==h)try{ym(s,"source",""===h?"(?:)":h)}catch(jN){}return s},$m=Im(xm),Zm=0;$m.length>Zm;)Am(Qm,xm,$m[Zm++]);Lm.constructor=Qm,Qm.prototype=Lm,wm(gm,"RegExp",Qm,{constructor:!0})}Mm("RegExp");const eg=["none","error","warn","info","debug"];var tg="undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},rg=[],ig=[],ng="undefined"!=typeof Uint8Array?Uint8Array:Array,og=!1;function sg(){og=!0;for(var e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",t=0;t<64;++t)rg[t]=e[t],ig[e.charCodeAt(t)]=t;ig["-".charCodeAt(0)]=62,ig["_".charCodeAt(0)]=63}function ag(e,t,r){for(var i,n,o=[],s=t;s>18&63]+rg[n>>12&63]+rg[n>>6&63]+rg[63&n]);return o.join("")}function cg(e){var t;og||sg();for(var r=e.length,i=r%3,n="",o=[],s=16383,a=0,c=r-i;ac?c:a+s));return 1===i?(t=e[r-1],n+=rg[t>>2],n+=rg[t<<4&63],n+="=="):2===i&&(t=(e[r-2]<<8)+e[r-1],n+=rg[t>>10],n+=rg[t>>4&63],n+=rg[t<<2&63],n+="="),o.push(n),o.join("")}function ug(e,t,r,i,n){var o,s,a=8*n-i-1,c=(1<>1,d=-7,l=r?n-1:0,h=r?-1:1,f=e[t+l];for(l+=h,o=f&(1<<-d)-1,f>>=-d,d+=a;d>0;o=256*o+e[t+l],l+=h,d-=8);for(s=o&(1<<-d)-1,o>>=-d,d+=i;d>0;s=256*s+e[t+l],l+=h,d-=8);if(0===o)o=1-u;else{if(o===c)return s?NaN:1/0*(f?-1:1);s+=Math.pow(2,i),o-=u}return(f?-1:1)*s*Math.pow(2,o-i)}function dg(e,t,r,i,n,o){var s,a,c,u=8*o-n-1,d=(1<>1,h=23===n?Math.pow(2,-24)-Math.pow(2,-77):0,f=i?0:o-1,p=i?1:-1,m=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(a=isNaN(t)?1:0,s=d):(s=Math.floor(Math.log(t)/Math.LN2),t*(c=Math.pow(2,-s))<1&&(s--,c*=2),(t+=s+l>=1?h/c:h*Math.pow(2,1-l))*c>=2&&(s++,c/=2),s+l>=d?(a=0,s=d):s+l>=1?(a=(t*c-1)*Math.pow(2,n),s+=l):(a=t*Math.pow(2,l-1)*Math.pow(2,n),s=0));n>=8;e[r+f]=255&a,f+=p,a/=256,n-=8);for(s=s<0;e[r+f]=255&s,f+=p,s/=256,u-=8);e[r+f-p]|=128*m}var lg={}.toString,hg=Array.isArray||function(e){return"[object Array]"==lg.call(e)};function fg(){return mg.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function pg(e,t){if(fg()=fg())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+fg().toString(16)+" bytes");return 0|e}function Ig(e){return!(null==e||!e._isBuffer)}function Tg(e,t){if(Ig(e))return e.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e.byteLength;"string"!=typeof e&&(e=""+e);var r=e.length;if(0===r)return 0;for(var i=!1;;)switch(t){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":case void 0:return qg(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return Xg(e).length;default:if(i)return qg(e).length;t=(""+t).toLowerCase(),i=!0}}function Rg(e,t,r){var i=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if((r>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return Bg(this,t,r);case"utf8":case"utf-8":return Ng(this,t,r);case"ascii":return xg(this,t,r);case"latin1":case"binary":return Lg(this,t,r);case"base64":return Dg(this,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return Vg(this,t,r);default:if(i)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),i=!0}}function Eg(e,t,r){var i=e[t];e[t]=e[r],e[r]=i}function bg(e,t,r,i,n){if(0===e.length)return-1;if("string"==typeof r?(i=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),r=+r,isNaN(r)&&(r=n?0:e.length-1),r<0&&(r=e.length+r),r>=e.length){if(n)return-1;r=e.length-1}else if(r<0){if(!n)return-1;r=0}if("string"==typeof t&&(t=mg.from(t,i)),Ig(t))return 0===t.length?-1:Cg(e,t,r,i,n);if("number"==typeof t)return t&=255,mg.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?n?Uint8Array.prototype.indexOf.call(e,t,r):Uint8Array.prototype.lastIndexOf.call(e,t,r):Cg(e,[t],r,i,n);throw new TypeError("val must be string, number or Buffer")}function Cg(e,t,r,i,n){var o,s=1,a=e.length,c=t.length;if(void 0!==i&&("ucs2"===(i=String(i).toLowerCase())||"ucs-2"===i||"utf16le"===i||"utf-16le"===i)){if(e.length<2||t.length<2)return-1;s=2,a/=2,c/=2,r/=2}function u(e,t){return 1===s?e[t]:e.readUInt16BE(t*s)}if(n){var d=-1;for(o=r;oa&&(r=a-c),o=r;o>=0;o--){for(var l=!0,h=0;hn&&(i=n):i=n;var o=t.length;if(o%2!=0)throw new TypeError("Invalid hex string");i>o/2&&(i=o/2);for(var s=0;s>8,n=r%256,o.push(n),o.push(i);return o}(t,e.length-r),e,r,i)}function Dg(e,t,r){return 0===t&&r===e.length?cg(e):cg(e.slice(t,r))}function Ng(e,t,r){r=Math.min(e.length,r);for(var i=[],n=t;n239?4:u>223?3:u>191?2:1;if(n+l<=r)switch(l){case 1:u<128&&(d=u);break;case 2:128==(192&(o=e[n+1]))&&(c=(31&u)<<6|63&o)>127&&(d=c);break;case 3:o=e[n+1],s=e[n+2],128==(192&o)&&128==(192&s)&&(c=(15&u)<<12|(63&o)<<6|63&s)>2047&&(c<55296||c>57343)&&(d=c);break;case 4:o=e[n+1],s=e[n+2],a=e[n+3],128==(192&o)&&128==(192&s)&&128==(192&a)&&(c=(15&u)<<18|(63&o)<<12|(63&s)<<6|63&a)>65535&&c<1114112&&(d=c)}null===d?(d=65533,l=1):d>65535&&(d-=65536,i.push(d>>>10&1023|55296),d=56320|1023&d),i.push(d),n+=l}return function(e){var t=e.length;if(t<=Ug)return String.fromCharCode.apply(String,e);var r="",i=0;for(;i0&&(e=this.toString("hex",0,50).match(/.{2}/g).join(" "),this.length>50&&(e+=" ... ")),""},mg.prototype.compare=function(e,t,r,i,n){if(!Ig(e))throw new TypeError("Argument must be a Buffer");if(void 0===t&&(t=0),void 0===r&&(r=e?e.length:0),void 0===i&&(i=0),void 0===n&&(n=this.length),t<0||r>e.length||i<0||n>this.length)throw new RangeError("out of range index");if(i>=n&&t>=r)return 0;if(i>=n)return-1;if(t>=r)return 1;if(this===e)return 0;for(var o=(n>>>=0)-(i>>>=0),s=(r>>>=0)-(t>>>=0),a=Math.min(o,s),c=this.slice(i,n),u=e.slice(t,r),d=0;dn)&&(r=n),e.length>0&&(r<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");i||(i="utf8");for(var o=!1;;)switch(i){case"hex":return Ag(this,e,t,r);case"utf8":case"utf-8":return wg(this,e,t,r);case"ascii":return kg(this,e,t,r);case"latin1":case"binary":return Og(this,e,t,r);case"base64":return Pg(this,e,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return Mg(this,e,t,r);default:if(o)throw new TypeError("Unknown encoding: "+i);i=(""+i).toLowerCase(),o=!0}},mg.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var Ug=4096;function xg(e,t,r){var i="";r=Math.min(e.length,r);for(var n=t;ni)&&(r=i);for(var n="",o=t;or)throw new RangeError("Trying to access beyond buffer length")}function jg(e,t,r,i,n,o){if(!Ig(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>n||te.length)throw new RangeError("Index out of range")}function Fg(e,t,r,i){t<0&&(t=65535+t+1);for(var n=0,o=Math.min(e.length-r,2);n>>8*(i?n:1-n)}function Hg(e,t,r,i){t<0&&(t=4294967295+t+1);for(var n=0,o=Math.min(e.length-r,4);n>>8*(i?n:3-n)&255}function Kg(e,t,r,i,n,o){if(r+i>e.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function zg(e,t,r,i,n){return n||Kg(e,0,r,4),dg(e,t,r,i,23,4),r+4}function Wg(e,t,r,i,n){return n||Kg(e,0,r,8),dg(e,t,r,i,52,8),r+8}mg.prototype.slice=function(e,t){var r,i=this.length;if((e=~~e)<0?(e+=i)<0&&(e=0):e>i&&(e=i),(t=void 0===t?i:~~t)<0?(t+=i)<0&&(t=0):t>i&&(t=i),t0&&(n*=256);)i+=this[e+--t]*n;return i},mg.prototype.readUInt8=function(e,t){return t||Yg(e,1,this.length),this[e]},mg.prototype.readUInt16LE=function(e,t){return t||Yg(e,2,this.length),this[e]|this[e+1]<<8},mg.prototype.readUInt16BE=function(e,t){return t||Yg(e,2,this.length),this[e]<<8|this[e+1]},mg.prototype.readUInt32LE=function(e,t){return t||Yg(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},mg.prototype.readUInt32BE=function(e,t){return t||Yg(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},mg.prototype.readIntLE=function(e,t,r){e|=0,t|=0,r||Yg(e,t,this.length);for(var i=this[e],n=1,o=0;++o=(n*=128)&&(i-=Math.pow(2,8*t)),i},mg.prototype.readIntBE=function(e,t,r){e|=0,t|=0,r||Yg(e,t,this.length);for(var i=t,n=1,o=this[e+--i];i>0&&(n*=256);)o+=this[e+--i]*n;return o>=(n*=128)&&(o-=Math.pow(2,8*t)),o},mg.prototype.readInt8=function(e,t){return t||Yg(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},mg.prototype.readInt16LE=function(e,t){t||Yg(e,2,this.length);var r=this[e]|this[e+1]<<8;return 32768&r?4294901760|r:r},mg.prototype.readInt16BE=function(e,t){t||Yg(e,2,this.length);var r=this[e+1]|this[e]<<8;return 32768&r?4294901760|r:r},mg.prototype.readInt32LE=function(e,t){return t||Yg(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},mg.prototype.readInt32BE=function(e,t){return t||Yg(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},mg.prototype.readFloatLE=function(e,t){return t||Yg(e,4,this.length),ug(this,e,!0,23,4)},mg.prototype.readFloatBE=function(e,t){return t||Yg(e,4,this.length),ug(this,e,!1,23,4)},mg.prototype.readDoubleLE=function(e,t){return t||Yg(e,8,this.length),ug(this,e,!0,52,8)},mg.prototype.readDoubleBE=function(e,t){return t||Yg(e,8,this.length),ug(this,e,!1,52,8)},mg.prototype.writeUIntLE=function(e,t,r,i){(e=+e,t|=0,r|=0,i)||jg(this,e,t,r,Math.pow(2,8*r)-1,0);var n=1,o=0;for(this[t]=255&e;++o=0&&(o*=256);)this[t+n]=e/o&255;return t+r},mg.prototype.writeUInt8=function(e,t,r){return e=+e,t|=0,r||jg(this,e,t,1,255,0),mg.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[t]=255&e,t+1},mg.prototype.writeUInt16LE=function(e,t,r){return e=+e,t|=0,r||jg(this,e,t,2,65535,0),mg.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):Fg(this,e,t,!0),t+2},mg.prototype.writeUInt16BE=function(e,t,r){return e=+e,t|=0,r||jg(this,e,t,2,65535,0),mg.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):Fg(this,e,t,!1),t+2},mg.prototype.writeUInt32LE=function(e,t,r){return e=+e,t|=0,r||jg(this,e,t,4,4294967295,0),mg.TYPED_ARRAY_SUPPORT?(this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e):Hg(this,e,t,!0),t+4},mg.prototype.writeUInt32BE=function(e,t,r){return e=+e,t|=0,r||jg(this,e,t,4,4294967295,0),mg.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):Hg(this,e,t,!1),t+4},mg.prototype.writeIntLE=function(e,t,r,i){if(e=+e,t|=0,!i){var n=Math.pow(2,8*r-1);jg(this,e,t,r,n-1,-n)}var o=0,s=1,a=0;for(this[t]=255&e;++o>0)-a&255;return t+r},mg.prototype.writeIntBE=function(e,t,r,i){if(e=+e,t|=0,!i){var n=Math.pow(2,8*r-1);jg(this,e,t,r,n-1,-n)}var o=r-1,s=1,a=0;for(this[t+o]=255&e;--o>=0&&(s*=256);)e<0&&0===a&&0!==this[t+o+1]&&(a=1),this[t+o]=(e/s>>0)-a&255;return t+r},mg.prototype.writeInt8=function(e,t,r){return e=+e,t|=0,r||jg(this,e,t,1,127,-128),mg.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),e<0&&(e=255+e+1),this[t]=255&e,t+1},mg.prototype.writeInt16LE=function(e,t,r){return e=+e,t|=0,r||jg(this,e,t,2,32767,-32768),mg.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):Fg(this,e,t,!0),t+2},mg.prototype.writeInt16BE=function(e,t,r){return e=+e,t|=0,r||jg(this,e,t,2,32767,-32768),mg.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):Fg(this,e,t,!1),t+2},mg.prototype.writeInt32LE=function(e,t,r){return e=+e,t|=0,r||jg(this,e,t,4,2147483647,-2147483648),mg.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24):Hg(this,e,t,!0),t+4},mg.prototype.writeInt32BE=function(e,t,r){return e=+e,t|=0,r||jg(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),mg.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):Hg(this,e,t,!1),t+4},mg.prototype.writeFloatLE=function(e,t,r){return zg(this,e,t,!0,r)},mg.prototype.writeFloatBE=function(e,t,r){return zg(this,e,t,!1,r)},mg.prototype.writeDoubleLE=function(e,t,r){return Wg(this,e,t,!0,r)},mg.prototype.writeDoubleBE=function(e,t,r){return Wg(this,e,t,!1,r)},mg.prototype.copy=function(e,t,r,i){if(r||(r=0),i||0===i||(i=this.length),t>=e.length&&(t=e.length),t||(t=0),i>0&&i=this.length)throw new RangeError("sourceStart out of bounds");if(i<0)throw new RangeError("sourceEnd out of bounds");i>this.length&&(i=this.length),e.length-t=0;--n)e[n+t]=this[n+r];else if(o<1e3||!mg.TYPED_ARRAY_SUPPORT)for(n=0;n>>=0,r=void 0===r?this.length:r>>>0,e||(e=0),"number"==typeof e)for(o=t;o55295&&r<57344){if(!n){if(r>56319){(t-=3)>-1&&o.push(239,191,189);continue}if(s+1===i){(t-=3)>-1&&o.push(239,191,189);continue}n=r;continue}if(r<56320){(t-=3)>-1&&o.push(239,191,189),n=r;continue}r=65536+(n-55296<<10|r-56320)}else n&&(t-=3)>-1&&o.push(239,191,189);if(n=null,r<128){if((t-=1)<0)break;o.push(r)}else if(r<2048){if((t-=2)<0)break;o.push(r>>6|192,63&r|128)}else if(r<65536){if((t-=3)<0)break;o.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;o.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return o}function Xg(e){return function(e){var t,r,i,n,o,s;og||sg();var a=e.length;if(a%4>0)throw new Error("Invalid string. Length must be a multiple of 4");o="="===e[a-2]?2:"="===e[a-1]?1:0,s=new ng(3*a/4-o),i=o>0?a-4:a;var c=0;for(t=0,r=0;t>16&255,s[c++]=n>>8&255,s[c++]=255&n;return 2===o?(n=ig[e.charCodeAt(t)]<<2|ig[e.charCodeAt(t+1)]>>4,s[c++]=255&n):1===o&&(n=ig[e.charCodeAt(t)]<<10|ig[e.charCodeAt(t+1)]<<4|ig[e.charCodeAt(t+2)]>>2,s[c++]=n>>8&255,s[c++]=255&n),s}(function(e){if((e=function(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")}(e).replace(Gg,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function Qg(e,t,r,i){for(var n=0;n=t.length||n>=e.length);++n)t[n+r]=e[n];return n}function $g(e){return null!=e&&(!!e._isBuffer||Zg(e)||function(e){return"function"==typeof e.readFloatLE&&"function"==typeof e.slice&&Zg(e.slice(0,0))}(e))}function Zg(e){return!!e.constructor&&"function"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}function e_(){throw new Error("setTimeout has not been defined")}function t_(){throw new Error("clearTimeout has not been defined")}var r_=e_,i_=t_;function n_(e){if(r_===setTimeout)return setTimeout(e,0);if((r_===e_||!r_)&&setTimeout)return r_=setTimeout,setTimeout(e,0);try{return r_(e,0)}catch(Aw){try{return r_.call(null,e,0)}catch(Aw){return r_.call(this,e,0)}}}"function"==typeof tg.setTimeout&&(r_=setTimeout),"function"==typeof tg.clearTimeout&&(i_=clearTimeout);var o_,s_=[],a_=!1,c_=-1;function u_(){a_&&o_&&(a_=!1,o_.length?s_=o_.concat(s_):c_=-1,s_.length&&d_())}function d_(){if(!a_){var e=n_(u_);a_=!0;for(var t=s_.length;t;){for(o_=s_,s_=[];++c_>2,a=(3&t)<<4|r>>4,c=1>6:64,u=2>4,r=(15&s)<<4|(a=o.indexOf(e.charAt(u++)))>>2,i=(3&a)<<6|(c=o.indexOf(e.charAt(u++))),h[d++]=t,64!==a&&(h[d++]=r),64!==c&&(h[d++]=i);return h}},{"./support":30,"./utils":32}],2:[function(e,t,r){var i=e("./external"),n=e("./stream/DataWorker"),o=e("./stream/Crc32Probe"),s=e("./stream/DataLengthProbe");function a(e,t,r,i,n){this.compressedSize=e,this.uncompressedSize=t,this.crc32=r,this.compression=i,this.compressedContent=n}a.prototype={getContentWorker:function(){var e=new n(i.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new s("data_length")),t=this;return e.on("end",(function(){if(this.streamInfo.data_length!==t.uncompressedSize)throw new Error("Bug : uncompressed data size mismatch")})),e},getCompressedWorker:function(){return new n(i.Promise.resolve(this.compressedContent)).withStreamInfo("compressedSize",this.compressedSize).withStreamInfo("uncompressedSize",this.uncompressedSize).withStreamInfo("crc32",this.crc32).withStreamInfo("compression",this.compression)}},a.createWorkerFrom=function(e,t,r){return e.pipe(new o).pipe(new s("uncompressedSize")).pipe(t.compressWorker(r)).pipe(new s("compressedSize")).withStreamInfo("compression",t)},t.exports=a},{"./external":6,"./stream/Crc32Probe":25,"./stream/DataLengthProbe":26,"./stream/DataWorker":27}],3:[function(e,t,r){var i=e("./stream/GenericWorker");r.STORE={magic:"\0\0",compressWorker:function(e){return new i("STORE compression")},uncompressWorker:function(){return new i("STORE decompression")}},r.DEFLATE=e("./flate")},{"./flate":7,"./stream/GenericWorker":28}],4:[function(e,t,r){var i=e("./utils"),n=function(){for(var e,t=[],r=0;r<256;r++){e=r;for(var i=0;i<8;i++)e=1&e?3988292384^e>>>1:e>>>1;t[r]=e}return t}();t.exports=function(e,t){return void 0!==e&&e.length?"string"!==i.getTypeOf(e)?function(e,t,r,i){var o=n,s=i+r;e^=-1;for(var a=i;a>>8^o[255&(e^t[a])];return-1^e}(0|t,e,e.length,0):function(e,t,r,i){var o=n,s=i+r;e^=-1;for(var a=i;a>>8^o[255&(e^t.charCodeAt(a))];return-1^e}(0|t,e,e.length,0):0}},{"./utils":32}],5:[function(e,t,r){r.base64=!1,r.binary=!1,r.dir=!1,r.createFolders=!0,r.date=null,r.compression=null,r.compressionOptions=null,r.comment=null,r.unixPermissions=null,r.dosPermissions=null},{}],6:[function(e,t,r){var i=null;i="undefined"!=typeof Promise?Promise:e("lie"),t.exports={Promise:i}},{lie:37}],7:[function(e,t,r){var i="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Uint32Array,n=e("pako"),o=e("./utils"),s=e("./stream/GenericWorker"),a=i?"uint8array":"array";function c(e,t){s.call(this,"FlateWorker/"+e),this._pako=null,this._pakoAction=e,this._pakoOptions=t,this.meta={}}r.magic="\b\0",o.inherits(c,s),c.prototype.processChunk=function(e){this.meta=e.meta,null===this._pako&&this._createPako(),this._pako.push(o.transformTo(a,e.data),!1)},c.prototype.flush=function(){s.prototype.flush.call(this),null===this._pako&&this._createPako(),this._pako.push([],!0)},c.prototype.cleanUp=function(){s.prototype.cleanUp.call(this),this._pako=null},c.prototype._createPako=function(){this._pako=new n[this._pakoAction]({raw:!0,level:this._pakoOptions.level||-1});var e=this;this._pako.onData=function(t){e.push({data:t,meta:e.meta})}},r.compressWorker=function(e){return new c("Deflate",e)},r.uncompressWorker=function(){return new c("Inflate",{})}},{"./stream/GenericWorker":28,"./utils":32,pako:38}],8:[function(e,t,r){function i(e,t){var r,i="";for(r=0;r>>=8;return i}function n(e,t,r,n,s,d){var l,h,f=e.file,p=e.compression,m=d!==a.utf8encode,g=o.transformTo("string",d(f.name)),_=o.transformTo("string",a.utf8encode(f.name)),S=f.comment,v=o.transformTo("string",d(S)),y=o.transformTo("string",a.utf8encode(S)),I=_.length!==f.name.length,T=y.length!==S.length,R="",E="",b="",C=f.dir,A=f.date,w={crc32:0,compressedSize:0,uncompressedSize:0};t&&!r||(w.crc32=e.crc32,w.compressedSize=e.compressedSize,w.uncompressedSize=e.uncompressedSize);var k=0;t&&(k|=8),m||!I&&!T||(k|=2048);var O=0,P=0;C&&(O|=16),"UNIX"===s?(P=798,O|=function(e,t){var r=e;return e||(r=t?16893:33204),(65535&r)<<16}(f.unixPermissions,C)):(P=20,O|=function(e){return 63&(e||0)}(f.dosPermissions)),l=A.getUTCHours(),l<<=6,l|=A.getUTCMinutes(),l<<=5,l|=A.getUTCSeconds()/2,h=A.getUTCFullYear()-1980,h<<=4,h|=A.getUTCMonth()+1,h<<=5,h|=A.getUTCDate(),I&&(E=i(1,1)+i(c(g),4)+_,R+="up"+i(E.length,2)+E),T&&(b=i(1,1)+i(c(v),4)+y,R+="uc"+i(b.length,2)+b);var M="";return M+="\n\0",M+=i(k,2),M+=p.magic,M+=i(l,2),M+=i(h,2),M+=i(w.crc32,4),M+=i(w.compressedSize,4),M+=i(w.uncompressedSize,4),M+=i(g.length,2),M+=i(R.length,2),{fileRecord:u.LOCAL_FILE_HEADER+M+g+R,dirRecord:u.CENTRAL_FILE_HEADER+i(P,2)+M+i(v.length,2)+"\0\0\0\0"+i(O,4)+i(n,4)+g+R+v}}var o=e("../utils"),s=e("../stream/GenericWorker"),a=e("../utf8"),c=e("../crc32"),u=e("../signature");function d(e,t,r,i){s.call(this,"ZipFileWorker"),this.bytesWritten=0,this.zipComment=t,this.zipPlatform=r,this.encodeFileName=i,this.streamFiles=e,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}o.inherits(d,s),d.prototype.push=function(e){var t=e.meta.percent||0,r=this.entriesCount,i=this._sources.length;this.accumulate?this.contentBuffer.push(e):(this.bytesWritten+=e.data.length,s.prototype.push.call(this,{data:e.data,meta:{currentFile:this.currentFile,percent:r?(t+100*(r-i-1))/r:100}}))},d.prototype.openedSource=function(e){this.currentSourceOffset=this.bytesWritten,this.currentFile=e.file.name;var t=this.streamFiles&&!e.file.dir;if(t){var r=n(e,t,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:r.fileRecord,meta:{percent:0}})}else this.accumulate=!0},d.prototype.closedSource=function(e){this.accumulate=!1;var t=this.streamFiles&&!e.file.dir,r=n(e,t,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(r.dirRecord),t)this.push({data:function(e){return u.DATA_DESCRIPTOR+i(e.crc32,4)+i(e.compressedSize,4)+i(e.uncompressedSize,4)}(e),meta:{percent:100}});else for(this.push({data:r.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},d.prototype.flush=function(){for(var e=this.bytesWritten,t=0;t=this.index;t--)r=(r<<8)+this.byteAt(t);return this.index+=e,r},readString:function(e){return i.transformTo("string",this.readData(e))},readData:function(e){},lastIndexOfSignature:function(e){},readAndCheckSignature:function(e){},readDate:function(){var e=this.readInt(4);return new Date(Date.UTC(1980+(e>>25&127),(e>>21&15)-1,e>>16&31,e>>11&31,e>>5&63,(31&e)<<1))}},t.exports=n},{"../utils":32}],19:[function(e,t,r){var i=e("./Uint8ArrayReader");function n(e){i.call(this,e)}e("../utils").inherits(n,i),n.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=n},{"../utils":32,"./Uint8ArrayReader":21}],20:[function(e,t,r){var i=e("./DataReader");function n(e){i.call(this,e)}e("../utils").inherits(n,i),n.prototype.byteAt=function(e){return this.data.charCodeAt(this.zero+e)},n.prototype.lastIndexOfSignature=function(e){return this.data.lastIndexOf(e)-this.zero},n.prototype.readAndCheckSignature=function(e){return e===this.readData(4)},n.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=n},{"../utils":32,"./DataReader":18}],21:[function(e,t,r){var i=e("./ArrayReader");function n(e){i.call(this,e)}e("../utils").inherits(n,i),n.prototype.readData=function(e){if(this.checkOffset(e),0===e)return new Uint8Array(0);var t=this.data.subarray(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=n},{"../utils":32,"./ArrayReader":17}],22:[function(e,t,r){var i=e("../utils"),n=e("../support"),o=e("./ArrayReader"),s=e("./StringReader"),a=e("./NodeBufferReader"),c=e("./Uint8ArrayReader");t.exports=function(e){var t=i.getTypeOf(e);return i.checkSupport(t),"string"!==t||n.uint8array?"nodebuffer"===t?new a(e):n.uint8array?new c(i.transformTo("uint8array",e)):new o(i.transformTo("array",e)):new s(e)}},{"../support":30,"../utils":32,"./ArrayReader":17,"./NodeBufferReader":19,"./StringReader":20,"./Uint8ArrayReader":21}],23:[function(e,t,r){r.LOCAL_FILE_HEADER="PK",r.CENTRAL_FILE_HEADER="PK",r.CENTRAL_DIRECTORY_END="PK",r.ZIP64_CENTRAL_DIRECTORY_LOCATOR="PK",r.ZIP64_CENTRAL_DIRECTORY_END="PK",r.DATA_DESCRIPTOR="PK\b"},{}],24:[function(e,t,r){var i=e("./GenericWorker"),n=e("../utils");function o(e){i.call(this,"ConvertWorker to "+e),this.destType=e}n.inherits(o,i),o.prototype.processChunk=function(e){this.push({data:n.transformTo(this.destType,e.data),meta:e.meta})},t.exports=o},{"../utils":32,"./GenericWorker":28}],25:[function(e,t,r){var i=e("./GenericWorker"),n=e("../crc32");function o(){i.call(this,"Crc32Probe"),this.withStreamInfo("crc32",0)}e("../utils").inherits(o,i),o.prototype.processChunk=function(e){this.streamInfo.crc32=n(e.data,this.streamInfo.crc32||0),this.push(e)},t.exports=o},{"../crc32":4,"../utils":32,"./GenericWorker":28}],26:[function(e,t,r){var i=e("../utils"),n=e("./GenericWorker");function o(e){n.call(this,"DataLengthProbe for "+e),this.propName=e,this.withStreamInfo(e,0)}i.inherits(o,n),o.prototype.processChunk=function(e){if(e){var t=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=t+e.data.length}n.prototype.processChunk.call(this,e)},t.exports=o},{"../utils":32,"./GenericWorker":28}],27:[function(e,t,r){var i=e("../utils"),n=e("./GenericWorker");function o(e){n.call(this,"DataWorker");var t=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type="",this._tickScheduled=!1,e.then((function(e){t.dataIsReady=!0,t.data=e,t.max=e&&e.length||0,t.type=i.getTypeOf(e),t.isPaused||t._tickAndRepeat()}),(function(e){t.error(e)}))}i.inherits(o,n),o.prototype.cleanUp=function(){n.prototype.cleanUp.call(this),this.data=null},o.prototype.resume=function(){return!!n.prototype.resume.call(this)&&(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,i.delay(this._tickAndRepeat,[],this)),!0)},o.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(i.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},o.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var e=null,t=Math.min(this.max,this.index+16384);if(this.index>=this.max)return this.end();switch(this.type){case"string":e=this.data.substring(this.index,t);break;case"uint8array":e=this.data.subarray(this.index,t);break;case"array":case"nodebuffer":e=this.data.slice(this.index,t)}return this.index=t,this.push({data:e,meta:{percent:this.max?this.index/this.max*100:0}})},t.exports=o},{"../utils":32,"./GenericWorker":28}],28:[function(e,t,r){function i(e){this.name=e||"default",this.streamInfo={},this.generatedError=null,this.extraStreamInfo={},this.isPaused=!0,this.isFinished=!1,this.isLocked=!1,this._listeners={data:[],end:[],error:[]},this.previous=null}i.prototype={push:function(e){this.emit("data",e)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit("end"),this.cleanUp(),this.isFinished=!0}catch(e){this.emit("error",e)}return!0},error:function(e){return!this.isFinished&&(this.isPaused?this.generatedError=e:(this.isFinished=!0,this.emit("error",e),this.previous&&this.previous.error(e),this.cleanUp()),!0)},on:function(e,t){return this._listeners[e].push(t),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(e,t){if(this._listeners[e])for(var r=0;r "+e:e}},t.exports=i},{}],29:[function(e,t,r){var i=e("../utils"),n=e("./ConvertWorker"),o=e("./GenericWorker"),s=e("../base64"),a=e("../support"),c=e("../external"),u=null;if(a.nodestream)try{u=e("../nodejs/NodejsStreamOutputAdapter")}catch(e){}function d(e,t){return new c.Promise((function(r,n){var o=[],a=e._internalType,c=e._outputType,u=e._mimeType;e.on("data",(function(e,r){o.push(e),t&&t(r)})).on("error",(function(e){o=[],n(e)})).on("end",(function(){try{var e=function(e,t,r){switch(e){case"blob":return i.newBlob(i.transformTo("arraybuffer",t),r);case"base64":return s.encode(t);default:return i.transformTo(e,t)}}(c,function(e,t){var r,i=0,n=null,o=0;for(r=0;r>>6:(r<65536?t[s++]=224|r>>>12:(t[s++]=240|r>>>18,t[s++]=128|r>>>12&63),t[s++]=128|r>>>6&63),t[s++]=128|63&r);return t}(e)},r.utf8decode=function(e){return n.nodebuffer?i.transformTo("nodebuffer",e).toString("utf-8"):function(e){var t,r,n,o,s=e.length,c=new Array(2*s);for(t=r=0;t>10&1023,c[r++]=56320|1023&n)}return c.length!==r&&(c.subarray?c=c.subarray(0,r):c.length=r),i.applyFromCharCode(c)}(e=i.transformTo(n.uint8array?"uint8array":"array",e))},i.inherits(u,s),u.prototype.processChunk=function(e){var t=i.transformTo(n.uint8array?"uint8array":"array",e.data);if(this.leftOver&&this.leftOver.length){if(n.uint8array){var o=t;(t=new Uint8Array(o.length+this.leftOver.length)).set(this.leftOver,0),t.set(o,this.leftOver.length)}else t=this.leftOver.concat(t);this.leftOver=null}var s=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;0<=r&&128==(192&e[r]);)r--;return r<0||0===r?t:r+a[e[r]]>t?r:t}(t),c=t;s!==t.length&&(n.uint8array?(c=t.subarray(0,s),this.leftOver=t.subarray(s,t.length)):(c=t.slice(0,s),this.leftOver=t.slice(s,t.length))),this.push({data:r.utf8decode(c),meta:e.meta})},u.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:r.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},r.Utf8DecodeWorker=u,i.inherits(d,s),d.prototype.processChunk=function(e){this.push({data:r.utf8encode(e.data),meta:e.meta})},r.Utf8EncodeWorker=d},{"./nodejsUtils":14,"./stream/GenericWorker":28,"./support":30,"./utils":32}],32:[function(e,t,r){var i=e("./support"),n=e("./base64"),o=e("./nodejsUtils"),s=e("./external");function a(e){return e}function c(e,t){for(var r=0;r>8;this.dir=!!(16&this.externalFileAttributes),0==e&&(this.dosPermissions=63&this.externalFileAttributes),3==e&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||"/"!==this.fileNameStr.slice(-1)||(this.dir=!0)},parseZIP64ExtraField:function(e){if(this.extraFields[1]){var t=i(this.extraFields[1].value);this.uncompressedSize===n.MAX_VALUE_32BITS&&(this.uncompressedSize=t.readInt(8)),this.compressedSize===n.MAX_VALUE_32BITS&&(this.compressedSize=t.readInt(8)),this.localHeaderOffset===n.MAX_VALUE_32BITS&&(this.localHeaderOffset=t.readInt(8)),this.diskNumberStart===n.MAX_VALUE_32BITS&&(this.diskNumberStart=t.readInt(4))}},readExtraFields:function(e){var t,r,i,n=e.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});e.index+4>>6:(r<65536?t[s++]=224|r>>>12:(t[s++]=240|r>>>18,t[s++]=128|r>>>12&63),t[s++]=128|r>>>6&63),t[s++]=128|63&r);return t},r.buf2binstring=function(e){return c(e,e.length)},r.binstring2buf=function(e){for(var t=new i.Buf8(e.length),r=0,n=t.length;r>10&1023,u[i++]=56320|1023&n)}return c(u,i)},r.utf8border=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;0<=r&&128==(192&e[r]);)r--;return r<0||0===r?t:r+s[e[r]]>t?r:t}},{"./common":41}],43:[function(e,t,r){t.exports=function(e,t,r,i){for(var n=65535&e|0,o=e>>>16&65535|0,s=0;0!==r;){for(r-=s=2e3>>1:e>>>1;t[r]=e}return t}();t.exports=function(e,t,r,n){var o=i,s=n+r;e^=-1;for(var a=n;a>>8^o[255&(e^t[a])];return-1^e}},{}],46:[function(e,t,r){var i,n=e("../utils/common"),o=e("./trees"),s=e("./adler32"),a=e("./crc32"),c=e("./messages"),u=0,d=4,l=0,h=-2,f=-1,p=4,m=2,g=8,_=9,S=286,v=30,y=19,I=2*S+1,T=15,R=3,E=258,b=E+R+1,C=42,A=113,w=1,k=2,O=3,P=4;function M(e,t){return e.msg=c[t],t}function D(e){return(e<<1)-(4e.avail_out&&(r=e.avail_out),0!==r&&(n.arraySet(e.output,t.pending_buf,t.pending_out,r,e.next_out),e.next_out+=r,t.pending_out+=r,e.total_out+=r,e.avail_out-=r,t.pending-=r,0===t.pending&&(t.pending_out=0))}function x(e,t){o._tr_flush_block(e,0<=e.block_start?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,U(e.strm)}function L(e,t){e.pending_buf[e.pending++]=t}function B(e,t){e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=255&t}function V(e,t){var r,i,n=e.max_chain_length,o=e.strstart,s=e.prev_length,a=e.nice_match,c=e.strstart>e.w_size-b?e.strstart-(e.w_size-b):0,u=e.window,d=e.w_mask,l=e.prev,h=e.strstart+E,f=u[o+s-1],p=u[o+s];e.prev_length>=e.good_match&&(n>>=2),a>e.lookahead&&(a=e.lookahead);do{if(u[(r=t)+s]===p&&u[r+s-1]===f&&u[r]===u[o]&&u[++r]===u[o+1]){o+=2,r++;do{}while(u[++o]===u[++r]&&u[++o]===u[++r]&&u[++o]===u[++r]&&u[++o]===u[++r]&&u[++o]===u[++r]&&u[++o]===u[++r]&&u[++o]===u[++r]&&u[++o]===u[++r]&&oc&&0!=--n);return s<=e.lookahead?s:e.lookahead}function Y(e){var t,r,i,o,c,u,d,l,h,f,p=e.w_size;do{if(o=e.window_size-e.lookahead-e.strstart,e.strstart>=p+(p-b)){for(n.arraySet(e.window,e.window,p,p,0),e.match_start-=p,e.strstart-=p,e.block_start-=p,t=r=e.hash_size;i=e.head[--t],e.head[t]=p<=i?i-p:0,--r;);for(t=r=p;i=e.prev[--t],e.prev[t]=p<=i?i-p:0,--r;);o+=p}if(0===e.strm.avail_in)break;if(u=e.strm,d=e.window,l=e.strstart+e.lookahead,f=void 0,(h=o)<(f=u.avail_in)&&(f=h),r=0===f?0:(u.avail_in-=f,n.arraySet(d,u.input,u.next_in,f,l),1===u.state.wrap?u.adler=s(u.adler,d,f,l):2===u.state.wrap&&(u.adler=a(u.adler,d,f,l)),u.next_in+=f,u.total_in+=f,f),e.lookahead+=r,e.lookahead+e.insert>=R)for(c=e.strstart-e.insert,e.ins_h=e.window[c],e.ins_h=(e.ins_h<=R&&(e.ins_h=(e.ins_h<=R)if(i=o._tr_tally(e,e.strstart-e.match_start,e.match_length-R),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=R){for(e.match_length--;e.strstart++,e.ins_h=(e.ins_h<=R&&(e.ins_h=(e.ins_h<=R&&e.match_length<=e.prev_length){for(n=e.strstart+e.lookahead-R,i=o._tr_tally(e,e.strstart-1-e.prev_match,e.prev_length-R),e.lookahead-=e.prev_length-1,e.prev_length-=2;++e.strstart<=n&&(e.ins_h=(e.ins_h<e.pending_buf_size-5&&(r=e.pending_buf_size-5);;){if(e.lookahead<=1){if(Y(e),0===e.lookahead&&t===u)return w;if(0===e.lookahead)break}e.strstart+=e.lookahead,e.lookahead=0;var i=e.block_start+r;if((0===e.strstart||e.strstart>=i)&&(e.lookahead=e.strstart-i,e.strstart=i,x(e,!1),0===e.strm.avail_out))return w;if(e.strstart-e.block_start>=e.w_size-b&&(x(e,!1),0===e.strm.avail_out))return w}return e.insert=0,t===d?(x(e,!0),0===e.strm.avail_out?O:P):(e.strstart>e.block_start&&(x(e,!1),e.strm.avail_out),w)})),new H(4,4,8,4,j),new H(4,5,16,8,j),new H(4,6,32,32,j),new H(4,4,16,16,F),new H(8,16,32,32,F),new H(8,16,128,128,F),new H(8,32,128,256,F),new H(32,128,258,1024,F),new H(32,258,258,4096,F)],r.deflateInit=function(e,t){return G(e,t,g,15,8,0)},r.deflateInit2=G,r.deflateReset=W,r.deflateResetKeep=z,r.deflateSetHeader=function(e,t){return e&&e.state?2!==e.state.wrap?h:(e.state.gzhead=t,l):h},r.deflate=function(e,t){var r,n,s,c;if(!e||!e.state||5>8&255),L(n,n.gzhead.time>>16&255),L(n,n.gzhead.time>>24&255),L(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),L(n,255&n.gzhead.os),n.gzhead.extra&&n.gzhead.extra.length&&(L(n,255&n.gzhead.extra.length),L(n,n.gzhead.extra.length>>8&255)),n.gzhead.hcrc&&(e.adler=a(e.adler,n.pending_buf,n.pending,0)),n.gzindex=0,n.status=69):(L(n,0),L(n,0),L(n,0),L(n,0),L(n,0),L(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),L(n,3),n.status=A);else{var f=g+(n.w_bits-8<<4)<<8;f|=(2<=n.strategy||n.level<2?0:n.level<6?1:6===n.level?2:3)<<6,0!==n.strstart&&(f|=32),f+=31-f%31,n.status=A,B(n,f),0!==n.strstart&&(B(n,e.adler>>>16),B(n,65535&e.adler)),e.adler=1}if(69===n.status)if(n.gzhead.extra){for(s=n.pending;n.gzindex<(65535&n.gzhead.extra.length)&&(n.pending!==n.pending_buf_size||(n.gzhead.hcrc&&n.pending>s&&(e.adler=a(e.adler,n.pending_buf,n.pending-s,s)),U(e),s=n.pending,n.pending!==n.pending_buf_size));)L(n,255&n.gzhead.extra[n.gzindex]),n.gzindex++;n.gzhead.hcrc&&n.pending>s&&(e.adler=a(e.adler,n.pending_buf,n.pending-s,s)),n.gzindex===n.gzhead.extra.length&&(n.gzindex=0,n.status=73)}else n.status=73;if(73===n.status)if(n.gzhead.name){s=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>s&&(e.adler=a(e.adler,n.pending_buf,n.pending-s,s)),U(e),s=n.pending,n.pending===n.pending_buf_size)){c=1;break}c=n.gzindexs&&(e.adler=a(e.adler,n.pending_buf,n.pending-s,s)),0===c&&(n.gzindex=0,n.status=91)}else n.status=91;if(91===n.status)if(n.gzhead.comment){s=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>s&&(e.adler=a(e.adler,n.pending_buf,n.pending-s,s)),U(e),s=n.pending,n.pending===n.pending_buf_size)){c=1;break}c=n.gzindexs&&(e.adler=a(e.adler,n.pending_buf,n.pending-s,s)),0===c&&(n.status=103)}else n.status=103;if(103===n.status&&(n.gzhead.hcrc?(n.pending+2>n.pending_buf_size&&U(e),n.pending+2<=n.pending_buf_size&&(L(n,255&e.adler),L(n,e.adler>>8&255),e.adler=0,n.status=A)):n.status=A),0!==n.pending){if(U(e),0===e.avail_out)return n.last_flush=-1,l}else if(0===e.avail_in&&D(t)<=D(r)&&t!==d)return M(e,-5);if(666===n.status&&0!==e.avail_in)return M(e,-5);if(0!==e.avail_in||0!==n.lookahead||t!==u&&666!==n.status){var p=2===n.strategy?function(e,t){for(var r;;){if(0===e.lookahead&&(Y(e),0===e.lookahead)){if(t===u)return w;break}if(e.match_length=0,r=o._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,r&&(x(e,!1),0===e.strm.avail_out))return w}return e.insert=0,t===d?(x(e,!0),0===e.strm.avail_out?O:P):e.last_lit&&(x(e,!1),0===e.strm.avail_out)?w:k}(n,t):3===n.strategy?function(e,t){for(var r,i,n,s,a=e.window;;){if(e.lookahead<=E){if(Y(e),e.lookahead<=E&&t===u)return w;if(0===e.lookahead)break}if(e.match_length=0,e.lookahead>=R&&0e.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=R?(r=o._tr_tally(e,1,e.match_length-R),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(r=o._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),r&&(x(e,!1),0===e.strm.avail_out))return w}return e.insert=0,t===d?(x(e,!0),0===e.strm.avail_out?O:P):e.last_lit&&(x(e,!1),0===e.strm.avail_out)?w:k}(n,t):i[n.level].func(n,t);if(p!==O&&p!==P||(n.status=666),p===w||p===O)return 0===e.avail_out&&(n.last_flush=-1),l;if(p===k&&(1===t?o._tr_align(n):5!==t&&(o._tr_stored_block(n,0,0,!1),3===t&&(N(n.head),0===n.lookahead&&(n.strstart=0,n.block_start=0,n.insert=0))),U(e),0===e.avail_out))return n.last_flush=-1,l}return t!==d?l:n.wrap<=0?1:(2===n.wrap?(L(n,255&e.adler),L(n,e.adler>>8&255),L(n,e.adler>>16&255),L(n,e.adler>>24&255),L(n,255&e.total_in),L(n,e.total_in>>8&255),L(n,e.total_in>>16&255),L(n,e.total_in>>24&255)):(B(n,e.adler>>>16),B(n,65535&e.adler)),U(e),0=r.w_size&&(0===a&&(N(r.head),r.strstart=0,r.block_start=0,r.insert=0),f=new n.Buf8(r.w_size),n.arraySet(f,t,p-r.w_size,r.w_size,0),t=f,p=r.w_size),c=e.avail_in,u=e.next_in,d=e.input,e.avail_in=p,e.next_in=0,e.input=t,Y(r);r.lookahead>=R;){for(i=r.strstart,o=r.lookahead-(R-1);r.ins_h=(r.ins_h<>>=y=v>>>24,p-=y,0==(y=v>>>16&255))C[o++]=65535&v;else{if(!(16&y)){if(0==(64&y)){v=m[(65535&v)+(f&(1<>>=y,p-=y),p<15&&(f+=b[i++]<>>=y=v>>>24,p-=y,!(16&(y=v>>>16&255))){if(0==(64&y)){v=g[(65535&v)+(f&(1<>>=y,p-=y,(y=o-s)>3,f&=(1<<(p-=I<<3))-1,e.next_in=i,e.next_out=o,e.avail_in=i>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24)}function g(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new i.Buf16(320),this.work=new i.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function _(e){var t;return e&&e.state?(t=e.state,e.total_in=e.total_out=t.total=0,e.msg="",t.wrap&&(e.adler=1&t.wrap),t.mode=h,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new i.Buf32(f),t.distcode=t.distdyn=new i.Buf32(p),t.sane=1,t.back=-1,d):l}function S(e){var t;return e&&e.state?((t=e.state).wsize=0,t.whave=0,t.wnext=0,_(e)):l}function v(e,t){var r,i;return e&&e.state?(i=e.state,t<0?(r=0,t=-t):(r=1+(t>>4),t<48&&(t&=15)),t&&(t<8||15=s.wsize?(i.arraySet(s.window,t,r-s.wsize,s.wsize,0),s.wnext=0,s.whave=s.wsize):(n<(o=s.wsize-s.wnext)&&(o=n),i.arraySet(s.window,t,r-n,o,s.wnext),(n-=o)?(i.arraySet(s.window,t,r-n,n,0),s.wnext=n,s.whave=s.wsize):(s.wnext+=o,s.wnext===s.wsize&&(s.wnext=0),s.whave>>8&255,r.check=o(r.check,Y,2,0),I=y=0,r.mode=2;break}if(r.flags=0,r.head&&(r.head.done=!1),!(1&r.wrap)||(((255&y)<<8)+(y>>8))%31){e.msg="incorrect header check",r.mode=30;break}if(8!=(15&y)){e.msg="unknown compression method",r.mode=30;break}if(I-=4,U=8+(15&(y>>>=4)),0===r.wbits)r.wbits=U;else if(U>r.wbits){e.msg="invalid window size",r.mode=30;break}r.dmax=1<>8&1),512&r.flags&&(Y[0]=255&y,Y[1]=y>>>8&255,r.check=o(r.check,Y,2,0)),I=y=0,r.mode=3;case 3:for(;I<32;){if(0===S)break e;S--,y+=f[g++]<>>8&255,Y[2]=y>>>16&255,Y[3]=y>>>24&255,r.check=o(r.check,Y,4,0)),I=y=0,r.mode=4;case 4:for(;I<16;){if(0===S)break e;S--,y+=f[g++]<>8),512&r.flags&&(Y[0]=255&y,Y[1]=y>>>8&255,r.check=o(r.check,Y,2,0)),I=y=0,r.mode=5;case 5:if(1024&r.flags){for(;I<16;){if(0===S)break e;S--,y+=f[g++]<>>8&255,r.check=o(r.check,Y,2,0)),I=y=0}else r.head&&(r.head.extra=null);r.mode=6;case 6:if(1024&r.flags&&(S<(C=r.length)&&(C=S),C&&(r.head&&(U=r.head.extra_len-r.length,r.head.extra||(r.head.extra=new Array(r.head.extra_len)),i.arraySet(r.head.extra,f,g,C,U)),512&r.flags&&(r.check=o(r.check,f,C,g)),S-=C,g+=C,r.length-=C),r.length))break e;r.length=0,r.mode=7;case 7:if(2048&r.flags){if(0===S)break e;for(C=0;U=f[g+C++],r.head&&U&&r.length<65536&&(r.head.name+=String.fromCharCode(U)),U&&C>9&1,r.head.done=!0),e.adler=r.check=0,r.mode=12;break;case 10:for(;I<32;){if(0===S)break e;S--,y+=f[g++]<>>=7&I,I-=7&I,r.mode=27;break}for(;I<3;){if(0===S)break e;S--,y+=f[g++]<>>=1)){case 0:r.mode=14;break;case 1:if(E(r),r.mode=20,6!==t)break;y>>>=2,I-=2;break e;case 2:r.mode=17;break;case 3:e.msg="invalid block type",r.mode=30}y>>>=2,I-=2;break;case 14:for(y>>>=7&I,I-=7&I;I<32;){if(0===S)break e;S--,y+=f[g++]<>>16^65535)){e.msg="invalid stored block lengths",r.mode=30;break}if(r.length=65535&y,I=y=0,r.mode=15,6===t)break e;case 15:r.mode=16;case 16:if(C=r.length){if(S>>=5,I-=5,r.ndist=1+(31&y),y>>>=5,I-=5,r.ncode=4+(15&y),y>>>=4,I-=4,286>>=3,I-=3}for(;r.have<19;)r.lens[j[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,L={bits:r.lenbits},x=a(0,r.lens,0,19,r.lencode,0,r.work,L),r.lenbits=L.bits,x){e.msg="invalid code lengths set",r.mode=30;break}r.have=0,r.mode=19;case 19:for(;r.have>>16&255,P=65535&V,!((k=V>>>24)<=I);){if(0===S)break e;S--,y+=f[g++]<>>=k,I-=k,r.lens[r.have++]=P;else{if(16===P){for(B=k+2;I>>=k,I-=k,0===r.have){e.msg="invalid bit length repeat",r.mode=30;break}U=r.lens[r.have-1],C=3+(3&y),y>>>=2,I-=2}else if(17===P){for(B=k+3;I>>=k)),y>>>=3,I-=3}else{for(B=k+7;I>>=k)),y>>>=7,I-=7}if(r.have+C>r.nlen+r.ndist){e.msg="invalid bit length repeat",r.mode=30;break}for(;C--;)r.lens[r.have++]=U}}if(30===r.mode)break;if(0===r.lens[256]){e.msg="invalid code -- missing end-of-block",r.mode=30;break}if(r.lenbits=9,L={bits:r.lenbits},x=a(c,r.lens,0,r.nlen,r.lencode,0,r.work,L),r.lenbits=L.bits,x){e.msg="invalid literal/lengths set",r.mode=30;break}if(r.distbits=6,r.distcode=r.distdyn,L={bits:r.distbits},x=a(u,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,L),r.distbits=L.bits,x){e.msg="invalid distances set",r.mode=30;break}if(r.mode=20,6===t)break e;case 20:r.mode=21;case 21:if(6<=S&&258<=v){e.next_out=_,e.avail_out=v,e.next_in=g,e.avail_in=S,r.hold=y,r.bits=I,s(e,R),_=e.next_out,p=e.output,v=e.avail_out,g=e.next_in,f=e.input,S=e.avail_in,y=r.hold,I=r.bits,12===r.mode&&(r.back=-1);break}for(r.back=0;O=(V=r.lencode[y&(1<>>16&255,P=65535&V,!((k=V>>>24)<=I);){if(0===S)break e;S--,y+=f[g++]<>M)])>>>16&255,P=65535&V,!(M+(k=V>>>24)<=I);){if(0===S)break e;S--,y+=f[g++]<>>=M,I-=M,r.back+=M}if(y>>>=k,I-=k,r.back+=k,r.length=P,0===O){r.mode=26;break}if(32&O){r.back=-1,r.mode=12;break}if(64&O){e.msg="invalid literal/length code",r.mode=30;break}r.extra=15&O,r.mode=22;case 22:if(r.extra){for(B=r.extra;I>>=r.extra,I-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=23;case 23:for(;O=(V=r.distcode[y&(1<>>16&255,P=65535&V,!((k=V>>>24)<=I);){if(0===S)break e;S--,y+=f[g++]<>M)])>>>16&255,P=65535&V,!(M+(k=V>>>24)<=I);){if(0===S)break e;S--,y+=f[g++]<>>=M,I-=M,r.back+=M}if(y>>>=k,I-=k,r.back+=k,64&O){e.msg="invalid distance code",r.mode=30;break}r.offset=P,r.extra=15&O,r.mode=24;case 24:if(r.extra){for(B=r.extra;I>>=r.extra,I-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){e.msg="invalid distance too far back",r.mode=30;break}r.mode=25;case 25:if(0===v)break e;if(C=R-v,r.offset>C){if((C=r.offset-C)>r.whave&&r.sane){e.msg="invalid distance too far back",r.mode=30;break}A=C>r.wnext?(C-=r.wnext,r.wsize-C):r.wnext-C,C>r.length&&(C=r.length),w=r.window}else w=p,A=_-r.offset,C=r.length;for(vS?(y=L[B+l[E]],D[N+l[E]]):(y=96,0),f=1<>k)+(p-=f)]=v<<24|y<<16|I|0,0!==p;);for(f=1<>=1;if(0!==f?(M&=f-1,M+=f):M=0,E++,0==--U[R]){if(R===C)break;R=t[r+l[E]]}if(A>>7)]}function L(e,t){e.pending_buf[e.pending++]=255&t,e.pending_buf[e.pending++]=t>>>8&255}function B(e,t,r){e.bi_valid>m-r?(e.bi_buf|=t<>m-e.bi_valid,e.bi_valid+=r-m):(e.bi_buf|=t<>>=1,r<<=1,0<--t;);return r>>>1}function j(e,t,r){var i,n,o=new Array(p+1),s=0;for(i=1;i<=p;i++)o[i]=s=s+r[i-1]<<1;for(n=0;n<=t;n++){var a=e[2*n+1];0!==a&&(e[2*n]=Y(o[a]++,a))}}function F(e){var t;for(t=0;t>1;1<=r;r--)z(e,o,r);for(n=c;r=e.heap[1],e.heap[1]=e.heap[e.heap_len--],z(e,o,1),i=e.heap[1],e.heap[--e.heap_max]=r,e.heap[--e.heap_max]=i,o[2*n]=o[2*r]+o[2*i],e.depth[n]=(e.depth[r]>=e.depth[i]?e.depth[r]:e.depth[i])+1,o[2*r+1]=o[2*i+1]=n,e.heap[1]=n++,z(e,o,1),2<=e.heap_len;);e.heap[--e.heap_max]=e.heap[1],function(e,t){var r,i,n,o,s,a,c=t.dyn_tree,u=t.max_code,d=t.stat_desc.static_tree,l=t.stat_desc.has_stree,h=t.stat_desc.extra_bits,m=t.stat_desc.extra_base,g=t.stat_desc.max_length,_=0;for(o=0;o<=p;o++)e.bl_count[o]=0;for(c[2*e.heap[e.heap_max]+1]=0,r=e.heap_max+1;r>=7;i>>=1)if(1&r&&0!==e.dyn_ltree[2*t])return n;if(0!==e.dyn_ltree[18]||0!==e.dyn_ltree[20]||0!==e.dyn_ltree[26])return o;for(t=32;t>>3,(a=e.static_len+3+7>>>3)<=s&&(s=a)):s=a=r+5,r+4<=s&&-1!==t?Q(e,t,r,i):4===e.strategy||a===s?(B(e,2+(i?1:0),3),W(e,b,C)):(B(e,4+(i?1:0),3),function(e,t,r,i){var n;for(B(e,t-257,5),B(e,r-1,5),B(e,i-4,4),n=0;n>>8&255,e.pending_buf[e.d_buf+2*e.last_lit+1]=255&t,e.pending_buf[e.l_buf+e.last_lit]=255&r,e.last_lit++,0===t?e.dyn_ltree[2*r]++:(e.matches++,t--,e.dyn_ltree[2*(w[r]+u+1)]++,e.dyn_dtree[2*x(t)]++),e.last_lit===e.lit_bufsize-1},r._tr_align=function(e){B(e,2,3),V(e,_,b),function(e){16===e.bi_valid?(L(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):8<=e.bi_valid&&(e.pending_buf[e.pending++]=255&e.bi_buf,e.bi_buf>>=8,e.bi_valid-=8)}(e)}},{"../utils/common":41}],53:[function(e,t,r){t.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}},{}],54:[function(e,t,r){(function(e){!function(e,t){if(!e.setImmediate){var r,i,n,o,s=1,a={},c=!1,u=e.document,d=Object.getPrototypeOf&&Object.getPrototypeOf(e);d=d&&d.setTimeout?d:e,r="[object process]"==={}.toString.call(e.process)?function(e){!function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var r=1;r>1,d=23===t?E_(2,-24)-E_(2,-77):0,l=e<0||0===e&&1/e<0?1:0,h=0;for((e=R_(e))!=e||e===1/0?(n=e!=e?1:0,i=c):(i=b_(C_(e)/A_),e*(o=E_(2,-i))<1&&(i--,o*=2),(e+=i+u>=1?d/o:d*E_(2,1-u))*o>=2&&(i++,o/=2),i+u>=c?(n=0,i=c):i+u>=1?(n=(e*o-1)*E_(2,t),i+=u):(n=e*E_(2,u-1)*E_(2,t),i=0));t>=8;)s[h++]=255&n,n/=256,t-=8;for(i=i<0;)s[h++]=255&i,i/=256,a-=8;return s[--h]|=128*l,s},unpack:function(e,t){var r,i=e.length,n=8*i-t-1,o=(1<>1,a=n-7,c=i-1,u=e[c--],d=127&u;for(u>>=7;a>0;)d=256*d+e[c--],a-=8;for(r=d&(1<<-a)-1,d>>=-a,a+=t;a>0;)r=256*r+e[c--],a-=8;if(0===d)d=1-s;else{if(d===o)return r?NaN:u?-1/0:1/0;r+=E_(2,t),d-=s}return(u?-1:1)*r*E_(2,d-t)}},k_=Ue,O_=si,P_=li,M_=function(e){for(var t=k_(this),r=P_(t),i=arguments.length,n=O_(i>1?arguments[1]:void 0,r),o=i>2?arguments[2]:void 0,s=void 0===o?r:O_(o,r);s>n;)t[n++]=e;return t},D_=lt,N_=At,U_=T,x_=si,L_=li,B_=function(e,t,r){var i=D_(t);i in e?N_.f(e,i,U_(0,r)):e[i]=r},V_=Array,Y_=Math.max,j_=function(e,t,r){for(var i=L_(e),n=x_(t,i),o=x_(void 0===r?i:r,i),s=V_(Y_(o-n,0)),a=0;n>8&255]},OS=function(e){return[255&e,e>>8&255,e>>16&255,e>>24&255]},PS=function(e){return e[3]<<24|e[2]<<16|e[1]<<8|e[0]},MS=function(e){return CS(e,23,4)},DS=function(e){return CS(e,52,8)},NS=function(e,t){nS(e[pS],t,{get:function(){return dS(this)[t]}})},US=function(e,t,r,i){var n=Z_(r),o=dS(e);if(n+t>o.byteLength)throw RS(mS);var s=dS(o.buffer).bytes,a=n+o.byteOffset,c=sS(s,a,a+t);return i?c:bS(c)},xS=function(e,t,r,i,n,o){var s=Z_(r),a=dS(e);if(s+t>a.byteLength)throw RS(mS);for(var c=dS(a.buffer).bytes,u=s+a.byteOffset,d=i(+n),l=0;lYS;)(BS=VS[YS++])in _S||G_(_S,BS,gS[BS]);SS.constructor=_S}rS&&tS(yS)!==IS&&rS(yS,IS);var jS=new vS(new _S(2)),FS=H_(yS.setInt8);jS.setInt8(0,2147483648),jS.setInt8(1,2147483649),!jS.getInt8(0)&&jS.getInt8(1)||J_(yS,{setInt8:function(e,t){FS(this,e,t<<24>>24)},setUint8:function(e,t){FS(this,e,t<<24>>24)}},{unsafe:!0})}else _S=function(e){X_(this,SS);var t=Z_(e);lS(this,{bytes:ES(TS(t),0),byteLength:t}),K_||(this.byteLength=t)},SS=_S[pS],vS=function(e,t,r){X_(this,yS),X_(e,SS);var i=dS(e).byteLength,n=Q_(t);if(n<0||n>i)throw RS("Wrong offset");if(n+(r=void 0===r?i-n:$_(r))>i)throw RS("Wrong length");lS(this,{buffer:e,byteLength:r,byteOffset:n}),K_||(this.buffer=e,this.byteLength=r,this.byteOffset=n)},yS=vS[pS],K_&&(NS(_S,"byteLength"),NS(vS,"buffer"),NS(vS,"byteLength"),NS(vS,"byteOffset")),J_(yS,{getInt8:function(e){return US(this,1,e)[0]<<24>>24},getUint8:function(e){return US(this,1,e)[0]},getInt16:function(e){var t=US(this,2,e,arguments.length>1?arguments[1]:void 0);return(t[1]<<8|t[0])<<16>>16},getUint16:function(e){var t=US(this,2,e,arguments.length>1?arguments[1]:void 0);return t[1]<<8|t[0]},getInt32:function(e){return PS(US(this,4,e,arguments.length>1?arguments[1]:void 0))},getUint32:function(e){return PS(US(this,4,e,arguments.length>1?arguments[1]:void 0))>>>0},getFloat32:function(e){return AS(US(this,4,e,arguments.length>1?arguments[1]:void 0),23)},getFloat64:function(e){return AS(US(this,8,e,arguments.length>1?arguments[1]:void 0),52)},setInt8:function(e,t){xS(this,1,e,wS,t)},setUint8:function(e,t){xS(this,1,e,wS,t)},setInt16:function(e,t){xS(this,2,e,kS,t,arguments.length>2?arguments[2]:void 0)},setUint16:function(e,t){xS(this,2,e,kS,t,arguments.length>2?arguments[2]:void 0)},setInt32:function(e,t){xS(this,4,e,OS,t,arguments.length>2?arguments[2]:void 0)},setUint32:function(e,t){xS(this,4,e,OS,t,arguments.length>2?arguments[2]:void 0)},setFloat32:function(e,t){xS(this,4,e,MS,t,arguments.length>2?arguments[2]:void 0)},setFloat64:function(e,t){xS(this,8,e,DS,t,arguments.length>2?arguments[2]:void 0)}});aS(_S,hS),aS(vS,fS);var HS={ArrayBuffer:_S,DataView:vS},KS=en,zS=w,WS=d,GS=Mt,JS=si,qS=ui,XS=to,QS=HS.ArrayBuffer,$S=HS.DataView,ZS=$S.prototype,ev=zS(QS.prototype.slice),tv=zS(ZS.getUint8),rv=zS(ZS.setUint8);KS({target:"ArrayBuffer",proto:!0,unsafe:!0,forced:WS((function(){return!new QS(2).slice(1,void 0).byteLength}))},{slice:function(e,t){if(ev&&void 0===t)return ev(GS(this),e);for(var r=GS(this).byteLength,i=JS(e,r),n=JS(void 0===t?r:t,r),o=new(XS(this,QS))(qS(n-i)),s=new $S(this),a=new $S(o),c=0;i1?arguments[1]:void 0,l=void 0!==d,h=dy(c);if(h&&!ly(h))for(s=(o=uy(c,h)).next,c=[];!(n=oy(s,o)).done;)c.push(n.value);for(l&&u>2&&(d=ny(d,arguments[2])),r=cy(c),i=new(hy(a))(r),t=0;r>t;t++)i[t]=l?d(c[t],t):c[t];return i},Ly=Vh.forEach,By=Sn,Vy=At,Yy=u,jy=fm,Fy=Dr.get,Hy=Dr.set,Ky=Dr.enforce,zy=Vy.f,Wy=Yy.f,Gy=Math.round,Jy=py.RangeError,qy=vy.ArrayBuffer,Xy=qy.prototype,Qy=vy.DataView,$y=Sy.NATIVE_ARRAY_BUFFER_VIEWS,Zy=Sy.TYPED_ARRAY_TAG,eI=Sy.TypedArray,tI=Sy.TypedArrayPrototype,rI=Sy.aTypedArrayConstructor,iI=Sy.isTypedArray,nI="BYTES_PER_ELEMENT",oI="Wrong length",sI=function(e,t){rI(e);for(var r=0,i=t.length,n=new e(i);i>r;)n[r]=t[r++];return n},aI=function(e,t){zy(e,t,{get:function(){return Fy(this)[t]}})},cI=function(e){var t;return Dy(Xy,e)||"ArrayBuffer"==(t=ky(e))||"SharedArrayBuffer"==t},uI=function(e,t){return iI(e)&&!Py(t)&&t in e&&Ry(+t)&&t>=0},dI=function(e,t){return t=Ay(t),uI(e,t)?Iy(2,e[t]):Wy(e,t)},lI=function(e,t,r){return t=Ay(t),!(uI(e,t)&&Oy(r)&&wy(r,"value"))||wy(r,"get")||wy(r,"set")||r.configurable||wy(r,"writable")&&!r.writable||wy(r,"enumerable")&&!r.enumerable?zy(e,t,r):(e[t]=r.value,e)};gy?($y||(Yy.f=dI,Vy.f=lI,aI(tI,"buffer"),aI(tI,"byteOffset"),aI(tI,"byteLength"),aI(tI,"length")),fy({target:"Object",stat:!0,forced:!$y},{getOwnPropertyDescriptor:dI,defineProperty:lI}),sv.exports=function(e,t,r){var i=e.match(/\d+$/)[0]/8,n=e+(r?"Clamped":"")+"Array",o="get"+e,s="set"+e,a=py[n],c=a,u=c&&c.prototype,d={},l=function(e,t){zy(e,t,{get:function(){return function(e,t){var r=Fy(e);return r.view[o](t*i+r.byteOffset,!0)}(this,t)},set:function(e){return function(e,t,n){var o=Fy(e);r&&(n=(n=Gy(n))<0?0:n>255?255:255&n),o.view[s](t*i+o.byteOffset,n,!0)}(this,t,e)},enumerable:!0})};$y?_y&&(c=t((function(e,t,r,n){return yy(e,u),jy(Oy(t)?cI(t)?void 0!==n?new a(t,Cy(r,i),n):void 0!==r?new a(t,Cy(r,i)):new a(t):iI(t)?sI(c,t):my(xy,c,t):new a(by(t)),e,c)})),Ny&&Ny(c,eI),Ly(Uy(a),(function(e){e in c||Ty(c,e,a[e])})),c.prototype=u):(c=t((function(e,t,r,n){yy(e,u);var o,s,a,d=0,h=0;if(Oy(t)){if(!cI(t))return iI(t)?sI(c,t):my(xy,c,t);o=t,h=Cy(r,i);var f=t.byteLength;if(void 0===n){if(f%i)throw Jy(oI);if((s=f-h)<0)throw Jy(oI)}else if((s=Ey(n)*i)+h>f)throw Jy(oI);a=s/i}else a=by(t),o=new qy(s=a*i);for(Hy(e,{buffer:o,byteOffset:h,byteLength:s,length:a,view:new Qy(o)});d1?arguments[1]:void 0,t>2?arguments[2]:void 0)}),SI((function(){var e=0;return new Int8Array(2).fill({valueOf:function(){return e++}}),1!==e})));var TI=c,RI=m,EI=Fv,bI=li,CI=iy,AI=Ue,wI=d,kI=TI.RangeError,OI=TI.Int8Array,PI=OI&&OI.prototype,MI=PI&&PI.set,DI=EI.aTypedArray,NI=EI.exportTypedArrayMethod,UI=!wI((function(){var e=new Uint8ClampedArray(2);return RI(MI,e,{length:1,0:3},1),3!==e[1]})),xI=UI&&EI.NATIVE_ARRAY_BUFFER_VIEWS&&wI((function(){var e=new OI(2);return e.set(1),e.set("2",1),0!==e[0]||2!==e[1]}));NI("set",(function(e){DI(this);var t=CI(arguments.length>1?arguments[1]:void 0,1),r=AI(e);if(UI)return RI(MI,this,r,t);var i=this.length,n=bI(r),o=0;if(n+t>i)throw kI("Wrong length");for(;o0;)e[i]=e[--i];i!==o++&&(e[i]=r)}return e},jI=function(e,t,r,i){for(var n=t.length,o=r.length,s=0,a=0;s0&&1/r<0?1:-1:t>r}}(e))}),!aT||sT);var cT,uT={exports:{}},dT={exports:{}},lT=s(Object.freeze({__proto__:null,default:{}}));function hT(){return cT||(cT=1,function(e,t){var r;e.exports=(r=r||function(e,t){var r;if("undefined"!=typeof window&&window.crypto&&(r=window.crypto),"undefined"!=typeof self&&self.crypto&&(r=self.crypto),"undefined"!=typeof globalThis&&globalThis.crypto&&(r=globalThis.crypto),!r&&"undefined"!=typeof window&&window.msCrypto&&(r=window.msCrypto),!r&&void 0!==o&&o.crypto&&(r=o.crypto),!r)try{r=lT}catch(g){}var i=function(){if(r){if("function"==typeof r.getRandomValues)try{return r.getRandomValues(new Uint32Array(1))[0]}catch(g){}if("function"==typeof r.randomBytes)try{return r.randomBytes(4).readInt32LE()}catch(g){}}throw new Error("Native crypto module could not be used to get secure random number.")},n=Object.create||function(){function e(){}return function(t){var r;return e.prototype=t,r=new e,e.prototype=null,r}}(),s={},a=s.lib={},c=a.Base={extend:function(e){var t=n(this);return e&&t.mixIn(e),t.hasOwnProperty("init")&&this.init!==t.init||(t.init=function(){t.$super.init.apply(this,arguments)}),t.init.prototype=t,t.$super=this,t},create:function(){var e=this.extend();return e.init.apply(e,arguments),e},init:function(){},mixIn:function(e){for(var t in e)e.hasOwnProperty(t)&&(this[t]=e[t]);e.hasOwnProperty("toString")&&(this.toString=e.toString)},clone:function(){return this.init.prototype.extend(this)}},u=a.WordArray=c.extend({init:function(e,r){e=this.words=e||[],this.sigBytes=r!=t?r:4*e.length},toString:function(e){return(e||l).stringify(this)},concat:function(e){var t=this.words,r=e.words,i=this.sigBytes,n=e.sigBytes;if(this.clamp(),i%4)for(var o=0;o>>2]>>>24-o%4*8&255;t[i+o>>>2]|=s<<24-(i+o)%4*8}else for(var a=0;a>>2]=r[a>>>2];return this.sigBytes+=n,this},clamp:function(){var t=this.words,r=this.sigBytes;t[r>>>2]&=4294967295<<32-r%4*8,t.length=e.ceil(r/4)},clone:function(){var e=c.clone.call(this);return e.words=this.words.slice(0),e},random:function(e){for(var t=[],r=0;r>>2]>>>24-n%4*8&255;i.push((o>>>4).toString(16)),i.push((15&o).toString(16))}return i.join("")},parse:function(e){for(var t=e.length,r=[],i=0;i>>3]|=parseInt(e.substr(i,2),16)<<24-i%8*4;return new u.init(r,t/2)}},h=d.Latin1={stringify:function(e){for(var t=e.words,r=e.sigBytes,i=[],n=0;n>>2]>>>24-n%4*8&255;i.push(String.fromCharCode(o))}return i.join("")},parse:function(e){for(var t=e.length,r=[],i=0;i>>2]|=(255&e.charCodeAt(i))<<24-i%4*8;return new u.init(r,t)}},f=d.Utf8={stringify:function(e){try{return decodeURIComponent(escape(h.stringify(e)))}catch(Aw){throw new Error("Malformed UTF-8 data")}},parse:function(e){return h.parse(unescape(encodeURIComponent(e)))}},p=a.BufferedBlockAlgorithm=c.extend({reset:function(){this._data=new u.init,this._nDataBytes=0},_append:function(e){"string"==typeof e&&(e=f.parse(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes},_process:function(t){var r,i=this._data,n=i.words,o=i.sigBytes,s=this.blockSize,a=o/(4*s),c=(a=t?e.ceil(a):e.max((0|a)-this._minBufferSize,0))*s,d=e.min(4*c,o);if(c){for(var l=0;l>>2]|=e[n]<<24-n%4*8;t.call(this,i,r)}else t.apply(this,arguments)};i.prototype=e}}(),r.lib.WordArray)}(_T)),_T.exports}var vT,yT={exports:{}};function IT(){return vT||(vT=1,function(e,t){var r;e.exports=(r=hT(),function(){var e=r,t=e.lib.WordArray,i=e.enc;function n(e){return e<<8&4278255360|e>>>8&16711935}i.Utf16=i.Utf16BE={stringify:function(e){for(var t=e.words,r=e.sigBytes,i=[],n=0;n>>2]>>>16-n%4*8&65535;i.push(String.fromCharCode(o))}return i.join("")},parse:function(e){for(var r=e.length,i=[],n=0;n>>1]|=e.charCodeAt(n)<<16-n%2*16;return t.create(i,2*r)}},i.Utf16LE={stringify:function(e){for(var t=e.words,r=e.sigBytes,i=[],o=0;o>>2]>>>16-o%4*8&65535);i.push(String.fromCharCode(s))}return i.join("")},parse:function(e){for(var r=e.length,i=[],o=0;o>>1]|=n(e.charCodeAt(o)<<16-o%2*16);return t.create(i,2*r)}}}(),r.enc.Utf16)}(yT)),yT.exports}var TT,RT={exports:{}};function ET(){return TT||(TT=1,function(e,t){var r;e.exports=(r=hT(),function(){var e=r,t=e.lib.WordArray;function i(e,r,i){for(var n=[],o=0,s=0;s>>6-s%4*2;n[o>>>2]|=a<<24-o%4*8,o++}return t.create(n,o)}e.enc.Base64={stringify:function(e){var t=e.words,r=e.sigBytes,i=this._map;e.clamp();for(var n=[],o=0;o>>2]>>>24-o%4*8&255)<<16|(t[o+1>>>2]>>>24-(o+1)%4*8&255)<<8|t[o+2>>>2]>>>24-(o+2)%4*8&255,a=0;a<4&&o+.75*a>>6*(3-a)&63));var c=i.charAt(64);if(c)for(;n.length%4;)n.push(c);return n.join("")},parse:function(e){var t=e.length,r=this._map,n=this._reverseMap;if(!n){n=this._reverseMap=[];for(var o=0;o>>6-s%4*2;n[o>>>2]|=a<<24-o%4*8,o++}return t.create(n,o)}e.enc.Base64url={stringify:function(e,t=!0){var r=e.words,i=e.sigBytes,n=t?this._safe_map:this._map;e.clamp();for(var o=[],s=0;s>>2]>>>24-s%4*8&255)<<16|(r[s+1>>>2]>>>24-(s+1)%4*8&255)<<8|r[s+2>>>2]>>>24-(s+2)%4*8&255,c=0;c<4&&s+.75*c>>6*(3-c)&63));var u=n.charAt(64);if(u)for(;o.length%4;)o.push(u);return o.join("")},parse:function(e,t=!0){var r=e.length,n=t?this._safe_map:this._map,o=this._reverseMap;if(!o){o=this._reverseMap=[];for(var s=0;s>>24)|4278255360&(n<<24|n>>>8)}var o=this._hash.words,s=e[t+0],c=e[t+1],f=e[t+2],p=e[t+3],m=e[t+4],g=e[t+5],_=e[t+6],S=e[t+7],v=e[t+8],y=e[t+9],I=e[t+10],T=e[t+11],R=e[t+12],E=e[t+13],b=e[t+14],C=e[t+15],A=o[0],w=o[1],k=o[2],O=o[3];A=u(A,w,k,O,s,7,a[0]),O=u(O,A,w,k,c,12,a[1]),k=u(k,O,A,w,f,17,a[2]),w=u(w,k,O,A,p,22,a[3]),A=u(A,w,k,O,m,7,a[4]),O=u(O,A,w,k,g,12,a[5]),k=u(k,O,A,w,_,17,a[6]),w=u(w,k,O,A,S,22,a[7]),A=u(A,w,k,O,v,7,a[8]),O=u(O,A,w,k,y,12,a[9]),k=u(k,O,A,w,I,17,a[10]),w=u(w,k,O,A,T,22,a[11]),A=u(A,w,k,O,R,7,a[12]),O=u(O,A,w,k,E,12,a[13]),k=u(k,O,A,w,b,17,a[14]),A=d(A,w=u(w,k,O,A,C,22,a[15]),k,O,c,5,a[16]),O=d(O,A,w,k,_,9,a[17]),k=d(k,O,A,w,T,14,a[18]),w=d(w,k,O,A,s,20,a[19]),A=d(A,w,k,O,g,5,a[20]),O=d(O,A,w,k,I,9,a[21]),k=d(k,O,A,w,C,14,a[22]),w=d(w,k,O,A,m,20,a[23]),A=d(A,w,k,O,y,5,a[24]),O=d(O,A,w,k,b,9,a[25]),k=d(k,O,A,w,p,14,a[26]),w=d(w,k,O,A,v,20,a[27]),A=d(A,w,k,O,E,5,a[28]),O=d(O,A,w,k,f,9,a[29]),k=d(k,O,A,w,S,14,a[30]),A=l(A,w=d(w,k,O,A,R,20,a[31]),k,O,g,4,a[32]),O=l(O,A,w,k,v,11,a[33]),k=l(k,O,A,w,T,16,a[34]),w=l(w,k,O,A,b,23,a[35]),A=l(A,w,k,O,c,4,a[36]),O=l(O,A,w,k,m,11,a[37]),k=l(k,O,A,w,S,16,a[38]),w=l(w,k,O,A,I,23,a[39]),A=l(A,w,k,O,E,4,a[40]),O=l(O,A,w,k,s,11,a[41]),k=l(k,O,A,w,p,16,a[42]),w=l(w,k,O,A,_,23,a[43]),A=l(A,w,k,O,y,4,a[44]),O=l(O,A,w,k,R,11,a[45]),k=l(k,O,A,w,C,16,a[46]),A=h(A,w=l(w,k,O,A,f,23,a[47]),k,O,s,6,a[48]),O=h(O,A,w,k,S,10,a[49]),k=h(k,O,A,w,b,15,a[50]),w=h(w,k,O,A,g,21,a[51]),A=h(A,w,k,O,R,6,a[52]),O=h(O,A,w,k,p,10,a[53]),k=h(k,O,A,w,I,15,a[54]),w=h(w,k,O,A,c,21,a[55]),A=h(A,w,k,O,v,6,a[56]),O=h(O,A,w,k,C,10,a[57]),k=h(k,O,A,w,_,15,a[58]),w=h(w,k,O,A,E,21,a[59]),A=h(A,w,k,O,m,6,a[60]),O=h(O,A,w,k,T,10,a[61]),k=h(k,O,A,w,f,15,a[62]),w=h(w,k,O,A,y,21,a[63]),o[0]=o[0]+A|0,o[1]=o[1]+w|0,o[2]=o[2]+k|0,o[3]=o[3]+O|0},_doFinalize:function(){var t=this._data,r=t.words,i=8*this._nDataBytes,n=8*t.sigBytes;r[n>>>5]|=128<<24-n%32;var o=e.floor(i/4294967296),s=i;r[15+(n+64>>>9<<4)]=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8),r[14+(n+64>>>9<<4)]=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),t.sigBytes=4*(r.length+1),this._process();for(var a=this._hash,c=a.words,u=0;u<4;u++){var d=c[u];c[u]=16711935&(d<<8|d>>>24)|4278255360&(d<<24|d>>>8)}return a},clone:function(){var e=o.clone.call(this);return e._hash=this._hash.clone(),e}});function u(e,t,r,i,n,o,s){var a=e+(t&r|~t&i)+n+s;return(a<>>32-o)+t}function d(e,t,r,i,n,o,s){var a=e+(t&i|r&~i)+n+s;return(a<>>32-o)+t}function l(e,t,r,i,n,o,s){var a=e+(t^r^i)+n+s;return(a<>>32-o)+t}function h(e,t,r,i,n,o,s){var a=e+(r^(t|~i))+n+s;return(a<>>32-o)+t}t.MD5=o._createHelper(c),t.HmacMD5=o._createHmacHelper(c)}(Math),r.MD5)}(kT)),kT.exports}var PT,MT={exports:{}};function DT(){return PT||(PT=1,function(e,t){var r;e.exports=(r=hT(),function(){var e=r,t=e.lib,i=t.WordArray,n=t.Hasher,o=e.algo,s=[],a=o.SHA1=n.extend({_doReset:function(){this._hash=new i.init([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(e,t){for(var r=this._hash.words,i=r[0],n=r[1],o=r[2],a=r[3],c=r[4],u=0;u<80;u++){if(u<16)s[u]=0|e[t+u];else{var d=s[u-3]^s[u-8]^s[u-14]^s[u-16];s[u]=d<<1|d>>>31}var l=(i<<5|i>>>27)+c+s[u];l+=u<20?1518500249+(n&o|~n&a):u<40?1859775393+(n^o^a):u<60?(n&o|n&a|o&a)-1894007588:(n^o^a)-899497514,c=a,a=o,o=n<<30|n>>>2,n=i,i=l}r[0]=r[0]+i|0,r[1]=r[1]+n|0,r[2]=r[2]+o|0,r[3]=r[3]+a|0,r[4]=r[4]+c|0},_doFinalize:function(){var e=this._data,t=e.words,r=8*this._nDataBytes,i=8*e.sigBytes;return t[i>>>5]|=128<<24-i%32,t[14+(i+64>>>9<<4)]=Math.floor(r/4294967296),t[15+(i+64>>>9<<4)]=r,e.sigBytes=4*t.length,this._process(),this._hash},clone:function(){var e=n.clone.call(this);return e._hash=this._hash.clone(),e}});e.SHA1=n._createHelper(a),e.HmacSHA1=n._createHmacHelper(a)}(),r.SHA1)}(MT)),MT.exports}var NT,UT={exports:{}};function xT(){return NT||(NT=1,function(e,t){var r;e.exports=(r=hT(),function(e){var t=r,i=t.lib,n=i.WordArray,o=i.Hasher,s=t.algo,a=[],c=[];!function(){function t(t){for(var r=e.sqrt(t),i=2;i<=r;i++)if(!(t%i))return!1;return!0}function r(e){return 4294967296*(e-(0|e))|0}for(var i=2,n=0;n<64;)t(i)&&(n<8&&(a[n]=r(e.pow(i,.5))),c[n]=r(e.pow(i,1/3)),n++),i++}();var u=[],d=s.SHA256=o.extend({_doReset:function(){this._hash=new n.init(a.slice(0))},_doProcessBlock:function(e,t){for(var r=this._hash.words,i=r[0],n=r[1],o=r[2],s=r[3],a=r[4],d=r[5],l=r[6],h=r[7],f=0;f<64;f++){if(f<16)u[f]=0|e[t+f];else{var p=u[f-15],m=(p<<25|p>>>7)^(p<<14|p>>>18)^p>>>3,g=u[f-2],_=(g<<15|g>>>17)^(g<<13|g>>>19)^g>>>10;u[f]=m+u[f-7]+_+u[f-16]}var S=i&n^i&o^n&o,v=(i<<30|i>>>2)^(i<<19|i>>>13)^(i<<10|i>>>22),y=h+((a<<26|a>>>6)^(a<<21|a>>>11)^(a<<7|a>>>25))+(a&d^~a&l)+c[f]+u[f];h=l,l=d,d=a,a=s+y|0,s=o,o=n,n=i,i=y+(v+S)|0}r[0]=r[0]+i|0,r[1]=r[1]+n|0,r[2]=r[2]+o|0,r[3]=r[3]+s|0,r[4]=r[4]+a|0,r[5]=r[5]+d|0,r[6]=r[6]+l|0,r[7]=r[7]+h|0},_doFinalize:function(){var t=this._data,r=t.words,i=8*this._nDataBytes,n=8*t.sigBytes;return r[n>>>5]|=128<<24-n%32,r[14+(n+64>>>9<<4)]=e.floor(i/4294967296),r[15+(n+64>>>9<<4)]=i,t.sigBytes=4*r.length,this._process(),this._hash},clone:function(){var e=o.clone.call(this);return e._hash=this._hash.clone(),e}});t.SHA256=o._createHelper(d),t.HmacSHA256=o._createHmacHelper(d)}(Math),r.SHA256)}(UT)),UT.exports}var LT,BT={exports:{}};var VT,YT={exports:{}};function jT(){return VT||(VT=1,function(e,t){var r;e.exports=(r=hT(),mT(),function(){var e=r,t=e.lib.Hasher,i=e.x64,n=i.Word,o=i.WordArray,s=e.algo;function a(){return n.create.apply(n,arguments)}var c=[a(1116352408,3609767458),a(1899447441,602891725),a(3049323471,3964484399),a(3921009573,2173295548),a(961987163,4081628472),a(1508970993,3053834265),a(2453635748,2937671579),a(2870763221,3664609560),a(3624381080,2734883394),a(310598401,1164996542),a(607225278,1323610764),a(1426881987,3590304994),a(1925078388,4068182383),a(2162078206,991336113),a(2614888103,633803317),a(3248222580,3479774868),a(3835390401,2666613458),a(4022224774,944711139),a(264347078,2341262773),a(604807628,2007800933),a(770255983,1495990901),a(1249150122,1856431235),a(1555081692,3175218132),a(1996064986,2198950837),a(2554220882,3999719339),a(2821834349,766784016),a(2952996808,2566594879),a(3210313671,3203337956),a(3336571891,1034457026),a(3584528711,2466948901),a(113926993,3758326383),a(338241895,168717936),a(666307205,1188179964),a(773529912,1546045734),a(1294757372,1522805485),a(1396182291,2643833823),a(1695183700,2343527390),a(1986661051,1014477480),a(2177026350,1206759142),a(2456956037,344077627),a(2730485921,1290863460),a(2820302411,3158454273),a(3259730800,3505952657),a(3345764771,106217008),a(3516065817,3606008344),a(3600352804,1432725776),a(4094571909,1467031594),a(275423344,851169720),a(430227734,3100823752),a(506948616,1363258195),a(659060556,3750685593),a(883997877,3785050280),a(958139571,3318307427),a(1322822218,3812723403),a(1537002063,2003034995),a(1747873779,3602036899),a(1955562222,1575990012),a(2024104815,1125592928),a(2227730452,2716904306),a(2361852424,442776044),a(2428436474,593698344),a(2756734187,3733110249),a(3204031479,2999351573),a(3329325298,3815920427),a(3391569614,3928383900),a(3515267271,566280711),a(3940187606,3454069534),a(4118630271,4000239992),a(116418474,1914138554),a(174292421,2731055270),a(289380356,3203993006),a(460393269,320620315),a(685471733,587496836),a(852142971,1086792851),a(1017036298,365543100),a(1126000580,2618297676),a(1288033470,3409855158),a(1501505948,4234509866),a(1607167915,987167468),a(1816402316,1246189591)],u=[];!function(){for(var e=0;e<80;e++)u[e]=a()}();var d=s.SHA512=t.extend({_doReset:function(){this._hash=new o.init([new n.init(1779033703,4089235720),new n.init(3144134277,2227873595),new n.init(1013904242,4271175723),new n.init(2773480762,1595750129),new n.init(1359893119,2917565137),new n.init(2600822924,725511199),new n.init(528734635,4215389547),new n.init(1541459225,327033209)])},_doProcessBlock:function(e,t){for(var r=this._hash.words,i=r[0],n=r[1],o=r[2],s=r[3],a=r[4],d=r[5],l=r[6],h=r[7],f=i.high,p=i.low,m=n.high,g=n.low,_=o.high,S=o.low,v=s.high,y=s.low,I=a.high,T=a.low,R=d.high,E=d.low,b=l.high,C=l.low,A=h.high,w=h.low,k=f,O=p,P=m,M=g,D=_,N=S,U=v,x=y,L=I,B=T,V=R,Y=E,j=b,F=C,H=A,K=w,z=0;z<80;z++){var W,G,J=u[z];if(z<16)G=J.high=0|e[t+2*z],W=J.low=0|e[t+2*z+1];else{var q=u[z-15],X=q.high,Q=q.low,$=(X>>>1|Q<<31)^(X>>>8|Q<<24)^X>>>7,Z=(Q>>>1|X<<31)^(Q>>>8|X<<24)^(Q>>>7|X<<25),ee=u[z-2],te=ee.high,re=ee.low,ie=(te>>>19|re<<13)^(te<<3|re>>>29)^te>>>6,ne=(re>>>19|te<<13)^(re<<3|te>>>29)^(re>>>6|te<<26),oe=u[z-7],se=oe.high,ae=oe.low,ce=u[z-16],ue=ce.high,de=ce.low;G=(G=(G=$+se+((W=Z+ae)>>>0>>0?1:0))+ie+((W+=ne)>>>0>>0?1:0))+ue+((W+=de)>>>0>>0?1:0),J.high=G,J.low=W}var le,he=L&V^~L&j,fe=B&Y^~B&F,pe=k&P^k&D^P&D,me=O&M^O&N^M&N,ge=(k>>>28|O<<4)^(k<<30|O>>>2)^(k<<25|O>>>7),_e=(O>>>28|k<<4)^(O<<30|k>>>2)^(O<<25|k>>>7),Se=(L>>>14|B<<18)^(L>>>18|B<<14)^(L<<23|B>>>9),ve=(B>>>14|L<<18)^(B>>>18|L<<14)^(B<<23|L>>>9),ye=c[z],Ie=ye.high,Te=ye.low,Re=H+Se+((le=K+ve)>>>0>>0?1:0),Ee=_e+me;H=j,K=F,j=V,F=Y,V=L,Y=B,L=U+(Re=(Re=(Re=Re+he+((le+=fe)>>>0>>0?1:0))+Ie+((le+=Te)>>>0>>0?1:0))+G+((le+=W)>>>0>>0?1:0))+((B=x+le|0)>>>0>>0?1:0)|0,U=D,x=N,D=P,N=M,P=k,M=O,k=Re+(ge+pe+(Ee>>>0<_e>>>0?1:0))+((O=le+Ee|0)>>>0>>0?1:0)|0}p=i.low=p+O,i.high=f+k+(p>>>0>>0?1:0),g=n.low=g+M,n.high=m+P+(g>>>0>>0?1:0),S=o.low=S+N,o.high=_+D+(S>>>0>>0?1:0),y=s.low=y+x,s.high=v+U+(y>>>0>>0?1:0),T=a.low=T+B,a.high=I+L+(T>>>0>>0?1:0),E=d.low=E+Y,d.high=R+V+(E>>>0>>0?1:0),C=l.low=C+F,l.high=b+j+(C>>>0>>0?1:0),w=h.low=w+K,h.high=A+H+(w>>>0>>0?1:0)},_doFinalize:function(){var e=this._data,t=e.words,r=8*this._nDataBytes,i=8*e.sigBytes;return t[i>>>5]|=128<<24-i%32,t[30+(i+128>>>10<<5)]=Math.floor(r/4294967296),t[31+(i+128>>>10<<5)]=r,e.sigBytes=4*t.length,this._process(),this._hash.toX32()},clone:function(){var e=t.clone.call(this);return e._hash=this._hash.clone(),e},blockSize:32});e.SHA512=t._createHelper(d),e.HmacSHA512=t._createHmacHelper(d)}(),r.SHA512)}(YT)),YT.exports}var FT,HT={exports:{}};var KT,zT={exports:{}};function WT(){return KT||(KT=1,function(e,t){var r;e.exports=(r=hT(),mT(),function(e){var t=r,i=t.lib,n=i.WordArray,o=i.Hasher,s=t.x64.Word,a=t.algo,c=[],u=[],d=[];!function(){for(var e=1,t=0,r=0;r<24;r++){c[e+5*t]=(r+1)*(r+2)/2%64;var i=(2*e+3*t)%5;e=t%5,t=i}for(e=0;e<5;e++)for(t=0;t<5;t++)u[e+5*t]=t+(2*e+3*t)%5*5;for(var n=1,o=0;o<24;o++){for(var a=0,l=0,h=0;h<7;h++){if(1&n){var f=(1<>>24)|4278255360&(o<<24|o>>>8),s=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),(w=r[n]).high^=s,w.low^=o}for(var a=0;a<24;a++){for(var h=0;h<5;h++){for(var f=0,p=0,m=0;m<5;m++)f^=(w=r[h+5*m]).high,p^=w.low;var g=l[h];g.high=f,g.low=p}for(h=0;h<5;h++){var _=l[(h+4)%5],S=l[(h+1)%5],v=S.high,y=S.low;for(f=_.high^(v<<1|y>>>31),p=_.low^(y<<1|v>>>31),m=0;m<5;m++)(w=r[h+5*m]).high^=f,w.low^=p}for(var I=1;I<25;I++){var T=(w=r[I]).high,R=w.low,E=c[I];E<32?(f=T<>>32-E,p=R<>>32-E):(f=R<>>64-E,p=T<>>64-E);var b=l[u[I]];b.high=f,b.low=p}var C=l[0],A=r[0];for(C.high=A.high,C.low=A.low,h=0;h<5;h++)for(m=0;m<5;m++){var w=r[I=h+5*m],k=l[I],O=l[(h+1)%5+5*m],P=l[(h+2)%5+5*m];w.high=k.high^~O.high&P.high,w.low=k.low^~O.low&P.low}w=r[0];var M=d[a];w.high^=M.high,w.low^=M.low}},_doFinalize:function(){var t=this._data,r=t.words;this._nDataBytes;var i=8*t.sigBytes,o=32*this.blockSize;r[i>>>5]|=1<<24-i%32,r[(e.ceil((i+1)/o)*o>>>5)-1]|=128,t.sigBytes=4*r.length,this._process();for(var s=this._state,a=this.cfg.outputLength/8,c=a/8,u=[],d=0;d>>24)|4278255360&(h<<24|h>>>8),f=16711935&(f<<8|f>>>24)|4278255360&(f<<24|f>>>8),u.push(f),u.push(h)}return new n.init(u,a)},clone:function(){for(var e=o.clone.call(this),t=e._state=this._state.slice(0),r=0;r<25;r++)t[r]=t[r].clone();return e}});t.SHA3=o._createHelper(h),t.HmacSHA3=o._createHmacHelper(h)}(Math),r.SHA3)}(zT)),zT.exports}var GT,JT={exports:{}};var qT,XT={exports:{}};function QT(){return qT||(qT=1,function(e,t){var r;e.exports=(r=hT(),void function(){var e=r,t=e.lib.Base,i=e.enc.Utf8;e.algo.HMAC=t.extend({init:function(e,t){e=this._hasher=new e.init,"string"==typeof t&&(t=i.parse(t));var r=e.blockSize,n=4*r;t.sigBytes>n&&(t=e.finalize(t)),t.clamp();for(var o=this._oKey=t.clone(),s=this._iKey=t.clone(),a=o.words,c=s.words,u=0;u>>2];e.sigBytes-=t}};i.BlockCipher=d.extend({cfg:d.cfg.extend({mode:f,padding:p}),reset:function(){var e;d.reset.call(this);var t=this.cfg,r=t.iv,i=t.mode;this._xformMode==this._ENC_XFORM_MODE?e=i.createEncryptor:(e=i.createDecryptor,this._minBufferSize=1),this._mode&&this._mode.__creator==e?this._mode.init(this,r&&r.words):(this._mode=e.call(i,this,r&&r.words),this._mode.__creator=e)},_doProcessBlock:function(e,t){this._mode.processBlock(e,t)},_doFinalize:function(){var e,t=this.cfg.padding;return this._xformMode==this._ENC_XFORM_MODE?(t.pad(this._data,this.blockSize),e=this._process(!0)):(e=this._process(!0),t.unpad(e)),e},blockSize:4});var m=i.CipherParams=n.extend({init:function(e){this.mixIn(e)},toString:function(e){return(e||this.formatter).stringify(this)}}),g=(t.format={}).OpenSSL={stringify:function(e){var t=e.ciphertext,r=e.salt;return(r?o.create([1398893684,1701076831]).concat(r).concat(t):t).toString(c)},parse:function(e){var t,r=c.parse(e),i=r.words;return 1398893684==i[0]&&1701076831==i[1]&&(t=o.create(i.slice(2,4)),i.splice(0,4),r.sigBytes-=16),m.create({ciphertext:r,salt:t})}},_=i.SerializableCipher=n.extend({cfg:n.extend({format:g}),encrypt:function(e,t,r,i){i=this.cfg.extend(i);var n=e.createEncryptor(r,i),o=n.finalize(t),s=n.cfg;return m.create({ciphertext:o,key:r,iv:s.iv,algorithm:e,mode:s.mode,padding:s.padding,blockSize:e.blockSize,formatter:i.format})},decrypt:function(e,t,r,i){return i=this.cfg.extend(i),t=this._parse(t,i.format),e.createDecryptor(r,i).finalize(t.ciphertext)},_parse:function(e,t){return"string"==typeof e?t.parse(e,this):e}}),S=(t.kdf={}).OpenSSL={execute:function(e,t,r,i){i||(i=o.random(8));var n=u.create({keySize:t+r}).compute(e,i),s=o.create(n.words.slice(t),4*r);return n.sigBytes=4*t,m.create({key:n,iv:s,salt:i})}},v=i.PasswordBasedCipher=_.extend({cfg:_.cfg.extend({kdf:S}),encrypt:function(e,t,r,i){var n=(i=this.cfg.extend(i)).kdf.execute(r,e.keySize,e.ivSize);i.iv=n.iv;var o=_.encrypt.call(this,e,t,n.key,i);return o.mixIn(n),o},decrypt:function(e,t,r,i){i=this.cfg.extend(i),t=this._parse(t,i.format);var n=i.kdf.execute(r,e.keySize,e.ivSize,t.salt);return i.iv=n.iv,_.decrypt.call(this,e,t,n.key,i)}})}()))}(nR)),nR.exports}var sR,aR={exports:{}};function cR(){return sR||(sR=1,function(e,t){var r;e.exports=(r=hT(),oR(),r.mode.CFB=function(){var e=r.lib.BlockCipherMode.extend();function t(e,t,r,i){var n,o=this._iv;o?(n=o.slice(0),this._iv=void 0):n=this._prevBlock,i.encryptBlock(n,0);for(var s=0;s>24&255)){var t=e>>16&255,r=e>>8&255,i=255&e;255===t?(t=0,255===r?(r=0,255===i?i=0:++i):++r):++t,e=0,e+=t<<16,e+=r<<8,e+=i}else e+=1<<24;return e}function i(e){return 0===(e[0]=t(e[0]))&&(e[1]=t(e[1])),e}var n=e.Encryptor=e.extend({processBlock:function(e,t){var r=this._cipher,n=r.blockSize,o=this._iv,s=this._counter;o&&(s=this._counter=o.slice(0),this._iv=void 0),i(s);var a=s.slice(0);r.encryptBlock(a,0);for(var c=0;c>>5]>>>31-i%32&1}for(var n=this._subKeys=[],o=0;o<16;o++){var u=n[o]=[],d=c[o];for(r=0;r<24;r++)u[r/6|0]|=t[(a[r]-1+d)%28]<<31-r%6,u[4+(r/6|0)]|=t[28+(a[r+24]-1+d)%28]<<31-r%6;for(u[0]=u[0]<<1|u[0]>>>31,r=1;r<7;r++)u[r]=u[r]>>>4*(r-1)+3;u[7]=u[7]<<5|u[7]>>>27}var l=this._invSubKeys=[];for(r=0;r<16;r++)l[r]=n[15-r]},encryptBlock:function(e,t){this._doCryptBlock(e,t,this._subKeys)},decryptBlock:function(e,t){this._doCryptBlock(e,t,this._invSubKeys)},_doCryptBlock:function(e,t,r){this._lBlock=e[t],this._rBlock=e[t+1],h.call(this,4,252645135),h.call(this,16,65535),f.call(this,2,858993459),f.call(this,8,16711935),h.call(this,1,1431655765);for(var i=0;i<16;i++){for(var n=r[i],o=this._lBlock,s=this._rBlock,a=0,c=0;c<8;c++)a|=u[c][((s^n[c])&d[c])>>>0];this._lBlock=s,this._rBlock=o^a}var l=this._lBlock;this._lBlock=this._rBlock,this._rBlock=l,h.call(this,1,1431655765),f.call(this,8,16711935),f.call(this,2,858993459),h.call(this,16,65535),h.call(this,4,252645135),e[t]=this._lBlock,e[t+1]=this._rBlock},keySize:2,ivSize:2,blockSize:2});function h(e,t){var r=(this._lBlock>>>e^this._rBlock)&t;this._rBlock^=r,this._lBlock^=r<>>e^this._lBlock)&t;this._lBlock^=r,this._rBlock^=r<192.");var t=e.slice(0,2),r=e.length<4?e.slice(0,2):e.slice(2,4),n=e.length<6?e.slice(0,2):e.slice(4,6);this._des1=l.createEncryptor(i.create(t)),this._des2=l.createEncryptor(i.create(r)),this._des3=l.createEncryptor(i.create(n))},encryptBlock:function(e,t){this._des1.encryptBlock(e,t),this._des2.decryptBlock(e,t),this._des3.encryptBlock(e,t)},decryptBlock:function(e,t){this._des3.decryptBlock(e,t),this._des2.encryptBlock(e,t),this._des1.decryptBlock(e,t)},keySize:6,ivSize:2,blockSize:2});e.TripleDES=n._createHelper(p)}(),r.TripleDES)}(UR)),UR.exports}var LR,BR={exports:{}};var VR,YR={exports:{}};var jR,FR={exports:{}};!function(e,t){var r;e.exports=(r=hT(),mT(),ST(),IT(),ET(),AT(),OT(),DT(),xT(),LT||(LT=1,function(e,t){var r;e.exports=(r=hT(),xT(),function(){var e=r,t=e.lib.WordArray,i=e.algo,n=i.SHA256,o=i.SHA224=n.extend({_doReset:function(){this._hash=new t.init([3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428])},_doFinalize:function(){var e=n._doFinalize.call(this);return e.sigBytes-=4,e}});e.SHA224=n._createHelper(o),e.HmacSHA224=n._createHmacHelper(o)}(),r.SHA224)}(BT)),jT(),FT||(FT=1,function(e,t){var r;e.exports=(r=hT(),mT(),jT(),function(){var e=r,t=e.x64,i=t.Word,n=t.WordArray,o=e.algo,s=o.SHA512,a=o.SHA384=s.extend({_doReset:function(){this._hash=new n.init([new i.init(3418070365,3238371032),new i.init(1654270250,914150663),new i.init(2438529370,812702999),new i.init(355462360,4144912697),new i.init(1731405415,4290775857),new i.init(2394180231,1750603025),new i.init(3675008525,1694076839),new i.init(1203062813,3204075428)])},_doFinalize:function(){var e=s._doFinalize.call(this);return e.sigBytes-=16,e}});e.SHA384=s._createHelper(a),e.HmacSHA384=s._createHmacHelper(a)}(),r.SHA384)}(HT)),WT(),GT||(GT=1,function(e,t){var r;e.exports=(r=hT(), -/** @preserve - (c) 2012 by Cédric Mesnil. All rights reserved. - - Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - - - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -function(e){var t=r,i=t.lib,n=i.WordArray,o=i.Hasher,s=t.algo,a=n.create([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13]),c=n.create([5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11]),u=n.create([11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6]),d=n.create([8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11]),l=n.create([0,1518500249,1859775393,2400959708,2840853838]),h=n.create([1352829926,1548603684,1836072691,2053994217,0]),f=s.RIPEMD160=o.extend({_doReset:function(){this._hash=n.create([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(e,t){for(var r=0;r<16;r++){var i=t+r,n=e[i];e[i]=16711935&(n<<8|n>>>24)|4278255360&(n<<24|n>>>8)}var o,s,f,y,I,T,R,E,b,C,A,w=this._hash.words,k=l.words,O=h.words,P=a.words,M=c.words,D=u.words,N=d.words;for(T=o=w[0],R=s=w[1],E=f=w[2],b=y=w[3],C=I=w[4],r=0;r<80;r+=1)A=o+e[t+P[r]]|0,A+=r<16?p(s,f,y)+k[0]:r<32?m(s,f,y)+k[1]:r<48?g(s,f,y)+k[2]:r<64?_(s,f,y)+k[3]:S(s,f,y)+k[4],A=(A=v(A|=0,D[r]))+I|0,o=I,I=y,y=v(f,10),f=s,s=A,A=T+e[t+M[r]]|0,A+=r<16?S(R,E,b)+O[0]:r<32?_(R,E,b)+O[1]:r<48?g(R,E,b)+O[2]:r<64?m(R,E,b)+O[3]:p(R,E,b)+O[4],A=(A=v(A|=0,N[r]))+C|0,T=C,C=b,b=v(E,10),E=R,R=A;A=w[1]+f+b|0,w[1]=w[2]+y+C|0,w[2]=w[3]+I+T|0,w[3]=w[4]+o+R|0,w[4]=w[0]+s+E|0,w[0]=A},_doFinalize:function(){var e=this._data,t=e.words,r=8*this._nDataBytes,i=8*e.sigBytes;t[i>>>5]|=128<<24-i%32,t[14+(i+64>>>9<<4)]=16711935&(r<<8|r>>>24)|4278255360&(r<<24|r>>>8),e.sigBytes=4*(t.length+1),this._process();for(var n=this._hash,o=n.words,s=0;s<5;s++){var a=o[s];o[s]=16711935&(a<<8|a>>>24)|4278255360&(a<<24|a>>>8)}return n},clone:function(){var e=o.clone.call(this);return e._hash=this._hash.clone(),e}});function p(e,t,r){return e^t^r}function m(e,t,r){return e&t|~e&r}function g(e,t,r){return(e|~t)^r}function _(e,t,r){return e&r|t&~r}function S(e,t,r){return e^(t|~r)}function v(e,t){return e<>>32-t}t.RIPEMD160=o._createHelper(f),t.HmacRIPEMD160=o._createHmacHelper(f)}(),r.RIPEMD160)}(JT)),QT(),$T||($T=1,function(e,t){var r;e.exports=(r=hT(),DT(),QT(),function(){var e=r,t=e.lib,i=t.Base,n=t.WordArray,o=e.algo,s=o.SHA1,a=o.HMAC,c=o.PBKDF2=i.extend({cfg:i.extend({keySize:4,hasher:s,iterations:1}),init:function(e){this.cfg=this.cfg.extend(e)},compute:function(e,t){for(var r=this.cfg,i=a.create(r.hasher,e),o=n.create(),s=n.create([1]),c=o.words,u=s.words,d=r.keySize,l=r.iterations;c.length>>2]|=n<<24-o%4*8,e.sigBytes+=n},unpad:function(e){var t=255&e.words[e.sigBytes-1>>>2];e.sigBytes-=t}},r.pad.Ansix923)}(IR)),TR||(TR=1,function(e,t){var r;e.exports=(r=hT(),oR(),r.pad.Iso10126={pad:function(e,t){var i=4*t,n=i-e.sigBytes%i;e.concat(r.lib.WordArray.random(n-1)).concat(r.lib.WordArray.create([n<<24],1))},unpad:function(e){var t=255&e.words[e.sigBytes-1>>>2];e.sigBytes-=t}},r.pad.Iso10126)}(RR)),ER||(ER=1,function(e,t){var r;e.exports=(r=hT(),oR(),r.pad.Iso97971={pad:function(e,t){e.concat(r.lib.WordArray.create([2147483648],1)),r.pad.ZeroPadding.pad(e,t)},unpad:function(e){r.pad.ZeroPadding.unpad(e),e.sigBytes--}},r.pad.Iso97971)}(bR)),CR||(CR=1,function(e,t){var r;e.exports=(r=hT(),oR(),r.pad.ZeroPadding={pad:function(e,t){var r=4*t;e.clamp(),e.sigBytes+=r-(e.sigBytes%r||r)},unpad:function(e){var t=e.words,r=e.sigBytes-1;for(r=e.sigBytes-1;r>=0;r--)if(t[r>>>2]>>>24-r%4*8&255){e.sigBytes=r+1;break}}},r.pad.ZeroPadding)}(AR)),wR||(wR=1,function(e,t){var r;e.exports=(r=hT(),oR(),r.pad.NoPadding={pad:function(){},unpad:function(){}},r.pad.NoPadding)}(kR)),OR||(OR=1,function(e,t){var r;e.exports=(r=hT(),oR(),function(e){var t=r,i=t.lib.CipherParams,n=t.enc.Hex;t.format.Hex={stringify:function(e){return e.ciphertext.toString(n)},parse:function(e){var t=n.parse(e);return i.create({ciphertext:t})}}}(),r.format.Hex)}(PR)),MR||(MR=1,function(e,t){var r;e.exports=(r=hT(),ET(),OT(),rR(),oR(),function(){var e=r,t=e.lib.BlockCipher,i=e.algo,n=[],o=[],s=[],a=[],c=[],u=[],d=[],l=[],h=[],f=[];!function(){for(var e=[],t=0;t<256;t++)e[t]=t<128?t<<1:t<<1^283;var r=0,i=0;for(t=0;t<256;t++){var p=i^i<<1^i<<2^i<<3^i<<4;p=p>>>8^255&p^99,n[r]=p,o[p]=r;var m=e[r],g=e[m],_=e[g],S=257*e[p]^16843008*p;s[r]=S<<24|S>>>8,a[r]=S<<16|S>>>16,c[r]=S<<8|S>>>24,u[r]=S,S=16843009*_^65537*g^257*m^16843008*r,d[p]=S<<24|S>>>8,l[p]=S<<16|S>>>16,h[p]=S<<8|S>>>24,f[p]=S,r?(r=m^e[e[e[_^m]]],i^=e[e[i]]):r=i=1}}();var p=[0,1,2,4,8,16,32,64,128,27,54],m=i.AES=t.extend({_doReset:function(){if(!this._nRounds||this._keyPriorReset!==this._key){for(var e=this._keyPriorReset=this._key,t=e.words,r=e.sigBytes/4,i=4*((this._nRounds=r+6)+1),o=this._keySchedule=[],s=0;s6&&s%r==4&&(u=n[u>>>24]<<24|n[u>>>16&255]<<16|n[u>>>8&255]<<8|n[255&u]):(u=n[(u=u<<8|u>>>24)>>>24]<<24|n[u>>>16&255]<<16|n[u>>>8&255]<<8|n[255&u],u^=p[s/r|0]<<24),o[s]=o[s-r]^u);for(var a=this._invKeySchedule=[],c=0;c>>24]]^l[n[u>>>16&255]]^h[n[u>>>8&255]]^f[n[255&u]]}}},encryptBlock:function(e,t){this._doCryptBlock(e,t,this._keySchedule,s,a,c,u,n)},decryptBlock:function(e,t){var r=e[t+1];e[t+1]=e[t+3],e[t+3]=r,this._doCryptBlock(e,t,this._invKeySchedule,d,l,h,f,o),r=e[t+1],e[t+1]=e[t+3],e[t+3]=r},_doCryptBlock:function(e,t,r,i,n,o,s,a){for(var c=this._nRounds,u=e[t]^r[0],d=e[t+1]^r[1],l=e[t+2]^r[2],h=e[t+3]^r[3],f=4,p=1;p>>24]^n[d>>>16&255]^o[l>>>8&255]^s[255&h]^r[f++],g=i[d>>>24]^n[l>>>16&255]^o[h>>>8&255]^s[255&u]^r[f++],_=i[l>>>24]^n[h>>>16&255]^o[u>>>8&255]^s[255&d]^r[f++],S=i[h>>>24]^n[u>>>16&255]^o[d>>>8&255]^s[255&l]^r[f++];u=m,d=g,l=_,h=S}m=(a[u>>>24]<<24|a[d>>>16&255]<<16|a[l>>>8&255]<<8|a[255&h])^r[f++],g=(a[d>>>24]<<24|a[l>>>16&255]<<16|a[h>>>8&255]<<8|a[255&u])^r[f++],_=(a[l>>>24]<<24|a[h>>>16&255]<<16|a[u>>>8&255]<<8|a[255&d])^r[f++],S=(a[h>>>24]<<24|a[u>>>16&255]<<16|a[d>>>8&255]<<8|a[255&l])^r[f++],e[t]=m,e[t+1]=g,e[t+2]=_,e[t+3]=S},keySize:8});e.AES=t._createHelper(m)}(),r.AES)}(DR)),xR(),LR||(LR=1,function(e,t){var r;e.exports=(r=hT(),ET(),OT(),rR(),oR(),function(){var e=r,t=e.lib.StreamCipher,i=e.algo,n=i.RC4=t.extend({_doReset:function(){for(var e=this._key,t=e.words,r=e.sigBytes,i=this._S=[],n=0;n<256;n++)i[n]=n;n=0;for(var o=0;n<256;n++){var s=n%r,a=t[s>>>2]>>>24-s%4*8&255;o=(o+i[n]+a)%256;var c=i[n];i[n]=i[o],i[o]=c}this._i=this._j=0},_doProcessBlock:function(e,t){e[t]^=o.call(this)},keySize:8,ivSize:0});function o(){for(var e=this._S,t=this._i,r=this._j,i=0,n=0;n<4;n++){r=(r+e[t=(t+1)%256])%256;var o=e[t];e[t]=e[r],e[r]=o,i|=e[(e[t]+e[r])%256]<<24-8*n}return this._i=t,this._j=r,i}e.RC4=t._createHelper(n);var s=i.RC4Drop=n.extend({cfg:n.cfg.extend({drop:192}),_doReset:function(){n._doReset.call(this);for(var e=this.cfg.drop;e>0;e--)o.call(this)}});e.RC4Drop=t._createHelper(s)}(),r.RC4)}(BR)),VR||(VR=1,function(e,t){var r;e.exports=(r=hT(),ET(),OT(),rR(),oR(),function(){var e=r,t=e.lib.StreamCipher,i=e.algo,n=[],o=[],s=[],a=i.Rabbit=t.extend({_doReset:function(){for(var e=this._key.words,t=this.cfg.iv,r=0;r<4;r++)e[r]=16711935&(e[r]<<8|e[r]>>>24)|4278255360&(e[r]<<24|e[r]>>>8);var i=this._X=[e[0],e[3]<<16|e[2]>>>16,e[1],e[0]<<16|e[3]>>>16,e[2],e[1]<<16|e[0]>>>16,e[3],e[2]<<16|e[1]>>>16],n=this._C=[e[2]<<16|e[2]>>>16,4294901760&e[0]|65535&e[1],e[3]<<16|e[3]>>>16,4294901760&e[1]|65535&e[2],e[0]<<16|e[0]>>>16,4294901760&e[2]|65535&e[3],e[1]<<16|e[1]>>>16,4294901760&e[3]|65535&e[0]];for(this._b=0,r=0;r<4;r++)c.call(this);for(r=0;r<8;r++)n[r]^=i[r+4&7];if(t){var o=t.words,s=o[0],a=o[1],u=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),d=16711935&(a<<8|a>>>24)|4278255360&(a<<24|a>>>8),l=u>>>16|4294901760&d,h=d<<16|65535&u;for(n[0]^=u,n[1]^=l,n[2]^=d,n[3]^=h,n[4]^=u,n[5]^=l,n[6]^=d,n[7]^=h,r=0;r<4;r++)c.call(this)}},_doProcessBlock:function(e,t){var r=this._X;c.call(this),n[0]=r[0]^r[5]>>>16^r[3]<<16,n[1]=r[2]^r[7]>>>16^r[5]<<16,n[2]=r[4]^r[1]>>>16^r[7]<<16,n[3]=r[6]^r[3]>>>16^r[1]<<16;for(var i=0;i<4;i++)n[i]=16711935&(n[i]<<8|n[i]>>>24)|4278255360&(n[i]<<24|n[i]>>>8),e[t+i]^=n[i]},blockSize:4,ivSize:2});function c(){for(var e=this._X,t=this._C,r=0;r<8;r++)o[r]=t[r];for(t[0]=t[0]+1295307597+this._b|0,t[1]=t[1]+3545052371+(t[0]>>>0>>0?1:0)|0,t[2]=t[2]+886263092+(t[1]>>>0>>0?1:0)|0,t[3]=t[3]+1295307597+(t[2]>>>0>>0?1:0)|0,t[4]=t[4]+3545052371+(t[3]>>>0>>0?1:0)|0,t[5]=t[5]+886263092+(t[4]>>>0>>0?1:0)|0,t[6]=t[6]+1295307597+(t[5]>>>0>>0?1:0)|0,t[7]=t[7]+3545052371+(t[6]>>>0>>0?1:0)|0,this._b=t[7]>>>0>>0?1:0,r=0;r<8;r++){var i=e[r]+t[r],n=65535&i,a=i>>>16,c=((n*n>>>17)+n*a>>>15)+a*a,u=((4294901760&i)*i|0)+((65535&i)*i|0);s[r]=c^u}e[0]=s[0]+(s[7]<<16|s[7]>>>16)+(s[6]<<16|s[6]>>>16)|0,e[1]=s[1]+(s[0]<<8|s[0]>>>24)+s[7]|0,e[2]=s[2]+(s[1]<<16|s[1]>>>16)+(s[0]<<16|s[0]>>>16)|0,e[3]=s[3]+(s[2]<<8|s[2]>>>24)+s[1]|0,e[4]=s[4]+(s[3]<<16|s[3]>>>16)+(s[2]<<16|s[2]>>>16)|0,e[5]=s[5]+(s[4]<<8|s[4]>>>24)+s[3]|0,e[6]=s[6]+(s[5]<<16|s[5]>>>16)+(s[4]<<16|s[4]>>>16)|0,e[7]=s[7]+(s[6]<<8|s[6]>>>24)+s[5]|0}e.Rabbit=t._createHelper(a)}(),r.Rabbit)}(YR)),jR||(jR=1,function(e,t){var r;e.exports=(r=hT(),ET(),OT(),rR(),oR(),function(){var e=r,t=e.lib.StreamCipher,i=e.algo,n=[],o=[],s=[],a=i.RabbitLegacy=t.extend({_doReset:function(){var e=this._key.words,t=this.cfg.iv,r=this._X=[e[0],e[3]<<16|e[2]>>>16,e[1],e[0]<<16|e[3]>>>16,e[2],e[1]<<16|e[0]>>>16,e[3],e[2]<<16|e[1]>>>16],i=this._C=[e[2]<<16|e[2]>>>16,4294901760&e[0]|65535&e[1],e[3]<<16|e[3]>>>16,4294901760&e[1]|65535&e[2],e[0]<<16|e[0]>>>16,4294901760&e[2]|65535&e[3],e[1]<<16|e[1]>>>16,4294901760&e[3]|65535&e[0]];this._b=0;for(var n=0;n<4;n++)c.call(this);for(n=0;n<8;n++)i[n]^=r[n+4&7];if(t){var o=t.words,s=o[0],a=o[1],u=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),d=16711935&(a<<8|a>>>24)|4278255360&(a<<24|a>>>8),l=u>>>16|4294901760&d,h=d<<16|65535&u;for(i[0]^=u,i[1]^=l,i[2]^=d,i[3]^=h,i[4]^=u,i[5]^=l,i[6]^=d,i[7]^=h,n=0;n<4;n++)c.call(this)}},_doProcessBlock:function(e,t){var r=this._X;c.call(this),n[0]=r[0]^r[5]>>>16^r[3]<<16,n[1]=r[2]^r[7]>>>16^r[5]<<16,n[2]=r[4]^r[1]>>>16^r[7]<<16,n[3]=r[6]^r[3]>>>16^r[1]<<16;for(var i=0;i<4;i++)n[i]=16711935&(n[i]<<8|n[i]>>>24)|4278255360&(n[i]<<24|n[i]>>>8),e[t+i]^=n[i]},blockSize:4,ivSize:2});function c(){for(var e=this._X,t=this._C,r=0;r<8;r++)o[r]=t[r];for(t[0]=t[0]+1295307597+this._b|0,t[1]=t[1]+3545052371+(t[0]>>>0>>0?1:0)|0,t[2]=t[2]+886263092+(t[1]>>>0>>0?1:0)|0,t[3]=t[3]+1295307597+(t[2]>>>0>>0?1:0)|0,t[4]=t[4]+3545052371+(t[3]>>>0>>0?1:0)|0,t[5]=t[5]+886263092+(t[4]>>>0>>0?1:0)|0,t[6]=t[6]+1295307597+(t[5]>>>0>>0?1:0)|0,t[7]=t[7]+3545052371+(t[6]>>>0>>0?1:0)|0,this._b=t[7]>>>0>>0?1:0,r=0;r<8;r++){var i=e[r]+t[r],n=65535&i,a=i>>>16,c=((n*n>>>17)+n*a>>>15)+a*a,u=((4294901760&i)*i|0)+((65535&i)*i|0);s[r]=c^u}e[0]=s[0]+(s[7]<<16|s[7]>>>16)+(s[6]<<16|s[6]>>>16)|0,e[1]=s[1]+(s[0]<<8|s[0]>>>24)+s[7]|0,e[2]=s[2]+(s[1]<<16|s[1]>>>16)+(s[0]<<16|s[0]>>>16)|0,e[3]=s[3]+(s[2]<<8|s[2]>>>24)+s[1]|0,e[4]=s[4]+(s[3]<<16|s[3]>>>16)+(s[2]<<16|s[2]>>>16)|0,e[5]=s[5]+(s[4]<<8|s[4]>>>24)+s[3]|0,e[6]=s[6]+(s[5]<<16|s[5]>>>16)+(s[4]<<16|s[4]>>>16)|0,e[7]=s[7]+(s[6]<<8|s[6]>>>24)+s[5]|0}e.RabbitLegacy=t._createHelper(a)}(),r.RabbitLegacy)}(FR)),r)}(uT);const HR=window.crypto||window.webkitCrypto||window.mozCrypto||window.oCrypto||window.msCrypto,KR={Mac:/(mac os x)\s+([\w_]+)/,Windows:/(windows nt)\s+([\w.]+)/,Ios:/(i(?:pad|phone|pod)).*cpu(?: i(?:pad|phone|pod))? os (\d+(?:[.|_]\d+)+)/,Android:/(android)\s+([\d.]+)/,Ipad:/(ipad).*os\s([\d_]+)/,Iphone:/(iphone\sos)\s([\d_]+)/,Linux:/(x11;)\s(linux)\s(x86_64|mips64|aarch64)/,ChromiumOS:/(x11;)\s(cros)\s(x86_64|mips64|aarch64)\s([\w.]+)\)/},zR=["0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","-","_"];let WR,GR;const JR="CommonUtil";class qR{constructor(){this.uuidCount=0,this.timeDiff=0,this.platform=(()=>{const e=navigator.userAgent.toLowerCase(),t=e.match(/(micromessenger)\/([\w.()]+)/i),r=t?"-WeChat".concat(t[2]):"";for(const i in KR)if(Object.prototype.hasOwnProperty.call(KR,i)){const t=e.match(KR[i]);if(t)return GR="Ios"===i?t[2].replace(/_/g,"."):"Linux"===i?t[3]:"ChromiumOS"===i?t[4]:t[2],WR=["Ios","Ipad","Iphone"].includes(i)?"IOS":i,i+GR+r}return"unknown"})(),this.userAgent=(()=>{const e=navigator.userAgent.match(/(chrome|safari|firefox|microMessenger)\/(\d+(\.\d+)*)/i);return e?"".concat(e[1],"-").concat(e[2]):""})()}async sleep(e){return new Promise((t=>{const r=setTimeout((()=>{clearTimeout(r),t()}),e)}))}getDeviceID(){return this.deviceID||(this.deviceID=this.generateStandardUuid()),this.deviceID}generateStandardUuid(){let e;if(HR&&(e="function"==typeof HR.randomUUID?HR.randomUUID():""),!e){let t=(new Date).getTime();window.performance&&"function"==typeof window.performance.now&&(t+=performance.now()),e="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx".replace(/[x]/g,(()=>{const e=(t+16*this.getRandom())%16|0;return t=Math.floor(t/16),e.toString(16)}))}return e}static getRandomArray(e){const t=new Uint8Array(e);return HR&&HR.getRandomValues(t),t}getRandom(){return qR.getRandomArray(1)[0]/256}getRandomUint32(){const e=qR.getRandomArray(4);return new DataView(e.buffer).getUint32(0)}generateUuid(e){let t="";const r=qR.getRandomArray(33),i=e?22:33;for(let s=0;s>=6;let o=this.uuidCount.toString(16);for(let s=3-o.length;s>0;s--)o="0"+o;return this.uuidCount>4094?this.uuidCount=0:this.uuidCount++,"".concat(t).concat(n).concat(o)}generateRandomId(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:62,r="";const i=qR.getRandomArray(e);for(let n=0;n=0?p:-p,g=(p<=0?"+":"-")+(m<10?"0".concat(m):"".concat(m))+":00";return{year:"".concat(t),month:"".concat(i),day:"".concat(o),hour:"".concat(a),min:"".concat(u),sec:"".concat(l),millsec:f,zoneOff:g}}adjustTimeByOffset(e){return e-this.timeDiff}convertString2Timestamp(e){return new Date(e).getTime()}generateStreamId(){return"2xxxxxxx-8xxx-xxxx-yxxx-xxxx".replace(/[xy]/g,(e=>{const t=16*this.getRandom()|0;return("x"==e?t:3&t|8).toString(16)}))}isWKWebview(){return/I.*-WeChat.*/gi.test(this.platform)}isAppleDevice(){return/^(Mac|I).*/gi.test(this.platform)}isSafari(){return this.isAppleDevice()&&/Safari/i.test(this.getUserAgent())}isMobileDevice(){return!/^(Mac|Windows).*/gi.test(this.platform)}isMobileWeChatBrowser(){return this.isMobileDevice()&&/.*MicroMessenger.*/gi.test(navigator.userAgent)}isSupportConstraints(e){var t;return!!(null===(t=navigator.mediaDevices)||void 0===t?void 0:t.getSupportedConstraints())[e]}async calculateSha256(e){return new Promise((t=>{const r=new FileReader;r.onloadend=e=>{if(e.target.readyState==FileReader.DONE){const r=uT.exports.lib.WordArray.create(e.target.result),i=uT.exports.SHA256(r).toString();t(i)}},r.readAsArrayBuffer(e)}))}getValue(e,t){return e||t}shieldIpAddress(e){return e?e.replace(/\b(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])\.(?:25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])\.(?:25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])\b/g,"$1.*.*.$2"):null}shieldUrlParameters(e){if(!e)return e;const t=e.match(/([^?|=|&]+)=([^&]+)/g);return t&&t.forEach((t=>{const r=/([^=]*)=(.*)/g.exec(t);e=e.replace(t,"".concat(r[1],"=").concat(this.secretString(r[2])))})),e}shieldNickname(e){if(!e)return e;let t="";for(let r=0;r{r.includes(t)&&(r=r.replace(e.pattern,e.newString))}));const n=XR.getCurrentTime(),o=["".concat(n.year,"-").concat(n.month,"-").concat(n.day," ").concat(n.hour,":").concat(n.min,":").concat(n.sec,".").concat(n.millsec),e];Object.entries($R($R({},i),{},{tag:t,msg:r})).forEach((e=>{let[t,r]=e;"string"==typeof r&&o.push("[".concat(t,": ").concat(r,"]"))}));const s=o.join(" ");for(this.logBuffer.push(s);this.logBuffer.length>=this.logBufferSize;)this.logBuffer.shift();const a=["".concat(n.year,"-").concat(n.month,"-").concat(n.day," ").concat(n.hour,":").concat(n.min,":").concat(n.sec,".").concat(n.millsec)];eg.indexOf(iE.logLevel)>=eg.indexOf(e)&&console[e](a+" [HRTC] "+"[".concat(e,"] [").concat(t,"] [").concat(r,"]"))}clearLogs(){this.logBuffer=[]}setLogBufferSize(e){this.logBufferSize=e}getLogBufferSize(){return this.logBufferSize}getLogBuffer(){return this.logBuffer}}class iE{static getLogger(e){const t=e||ZR;if(!eE.has(t)){const e=new rE;return eE.set(t,e),e}return eE.get(t)}static setAllLogLevel(e){if(!(eg.indexOf(e)>=0))throw new qc(Gc.RTC_ERR_CODE_INVALID_PARAMETER,"log level is invalid");iE.logLevel=e}static addPrivacyString(e){if(!e)return;if(tE.has(e))return;const t=XR.secretString(e);if(!t)return;const r=e.replaceAll(/([\^|\$|\\|\.|\*|\+|\?|\(|\)|\[|\]|\{|\}|\|])/g,"\\$1"),i={pattern:new RegExp("\\b"+r+"\\b","g"),newString:t};tE.set(e,i)}static async getLogFile(e,t){const r=e.logger,i=XR.getCurrentTime(),n="".concat(i.year,"-").concat(i.month,"-").concat(i.day,"T").concat(i.hour,":").concat(i.min,":").concat(i.sec).concat(i.zoneOff),o="".concat(i.year,"-").concat(i.month,"-").concat(i.day,"T").concat(i.hour,".").concat(i.min,".").concat(i.sec).concat(i.zoneOff.replace(":",".")),s=iE.getLogger(),a=r.getLogBuffer(),c=s.getLogBuffer();if(0===a.length&&0===c.length)return null;const u=e.getInfo(),d="".concat(u.userName,"_").concat(u.userId,"##").concat(u.domain,"##").concat(u.appId,"##").concat(o),l=XR.getDeviceID(),h=encodeURIComponent("".concat(t,"##").concat(l,"##").concat(u.appId,"##").concat(n)),f=new m_,p=f.folder("".concat(u.userName,"_").concat(u.userId,"##").concat(u.roomId,"##").concat(u.domain,"##").concat(u.appId));p.file("".concat(d,".log"),"".concat(a.join("\n"))),p.file("hrtc##".concat(n,".log"),"".concat(c.join("\n")));const m=await f.generateAsync({type:"blob",compression:"DEFLATE",compressionOptions:{level:9}});return{sha256:await XR.calculateSha256(m),length:m.size,content:m,urlFileNameEncode:h}}}i(iE,"logLevel",eg[3]);var nE=en,oE=vs,sE=d,aE=J,cE=H,uE=to,dE=Hc,lE=Xr,hE=oE&&oE.prototype;if(nE({target:"Promise",proto:!0,real:!0,forced:!!oE&&sE((function(){hE.finally.call({then:function(){}},(function(){}))}))},{finally:function(e){var t=uE(this,aE("Promise")),r=cE(e);return this.then(r?function(r){return dE(t,e()).then((function(){return r}))}:e,r?function(r){return dE(t,e()).then((function(){throw r}))}:e)}}),cE(oE)){var fE=aE("Promise").prototype.finally;hE.finally!==fE&&lE(hE,"finally",fE,{unsafe:!0})}var pE=Se,mE=Ue,gE=L,_E=li,SE=TypeError,vE=function(e){return function(t,r,i,n){pE(r);var o=mE(t),s=gE(o),a=_E(o),c=e?a-1:0,u=e?-1:1;if(i<2)for(;;){if(c in s){n=s[c],c+=u;break}if(c+=u,e?c<0:a<=c)throw SE("Reduce of empty array with no initial value")}for(;e?c>=0:a>c;c+=u)c in s&&(n=r(n,s[c],c,o));return n}},yE={left:vE(!1),right:vE(!0)}.left,IE=ie,TE=tn;en({target:"Array",proto:!0,forced:!jh("reduce")||!TE&&IE>79&&IE<83},{reduce:function(e){var t=arguments.length;return yE(this,e,t,t>1?arguments[1]:void 0)}});var RE=m,EE=Se,bE=Mt,CE=function(){for(var e=bE(this),t=EE(e.add),r=0,i=arguments.length;r1?arguments[1]:void 0);return!BE(r,(function(e,r){if(!i(e,e,t))return r()}),{IS_ITERATOR:!0,INTERRUPTED:!0}).stopped}});var VE=J,YE=m,jE=Se,FE=Mt,HE=lo,KE=to,zE=NE,WE=hc;en({target:"Set",proto:!0,real:!0,forced:!0},{filter:function(e){var t=FE(this),r=zE(t),i=HE(e,arguments.length>1?arguments[1]:void 0),n=new(KE(t,VE("Set"))),o=jE(n.add);return WE(r,(function(e){i(e,e,t)&&YE(o,n,e)}),{IS_ITERATOR:!0}),n}});var GE=Mt,JE=lo,qE=NE,XE=hc;en({target:"Set",proto:!0,real:!0,forced:!0},{find:function(e){var t=GE(this),r=qE(t),i=JE(e,arguments.length>1?arguments[1]:void 0);return XE(r,(function(e,r){if(i(e,e,t))return r(e)}),{IS_ITERATOR:!0,INTERRUPTED:!0}).result}});var QE=J,$E=m,ZE=Se,eb=Mt,tb=to,rb=hc;en({target:"Set",proto:!0,real:!0,forced:!0},{intersection:function(e){var t=eb(this),r=new(tb(t,QE("Set"))),i=ZE(t.has),n=ZE(r.add);return rb(e,(function(e){$E(i,t,e)&&$E(n,r,e)})),r}});var ib=m,nb=Se,ob=Mt,sb=hc;en({target:"Set",proto:!0,real:!0,forced:!0},{isDisjointFrom:function(e){var t=ob(this),r=nb(t.has);return!sb(e,(function(e,i){if(!0===ib(r,t,e))return i()}),{INTERRUPTED:!0}).stopped}});var ab=J,cb=m,ub=Se,db=H,lb=Mt,hb=qa,fb=hc;en({target:"Set",proto:!0,real:!0,forced:!0},{isSubsetOf:function(e){var t=hb(this),r=lb(e),i=r.has;return db(i)||(r=new(ab("Set"))(e),i=ub(r.has)),!fb(t,(function(e,t){if(!1===cb(i,r,e))return t()}),{IS_ITERATOR:!0,INTERRUPTED:!0}).stopped}});var pb=m,mb=Se,gb=Mt,_b=hc;en({target:"Set",proto:!0,real:!0,forced:!0},{isSupersetOf:function(e){var t=gb(this),r=mb(t.has);return!_b(e,(function(e,i){if(!1===pb(r,t,e))return i()}),{INTERRUPTED:!0}).stopped}});var Sb=en,vb=Mt,yb=$c,Ib=NE,Tb=hc,Rb=w([].join),Eb=[].push;Sb({target:"Set",proto:!0,real:!0,forced:!0},{join:function(e){var t=vb(this),r=Ib(t),i=void 0===e?",":yb(e),n=[];return Tb(r,Eb,{that:n,IS_ITERATOR:!0}),Rb(n,i)}});var bb=J,Cb=lo,Ab=m,wb=Se,kb=Mt,Ob=to,Pb=NE,Mb=hc;en({target:"Set",proto:!0,real:!0,forced:!0},{map:function(e){var t=kb(this),r=Pb(t),i=Cb(e,arguments.length>1?arguments[1]:void 0),n=new(Ob(t,bb("Set"))),o=wb(n.add);return Mb(r,(function(e){Ab(o,n,i(e,e,t))}),{IS_ITERATOR:!0}),n}});var Db=Se,Nb=Mt,Ub=NE,xb=hc,Lb=TypeError;en({target:"Set",proto:!0,real:!0,forced:!0},{reduce:function(e){var t=Nb(this),r=Ub(t),i=arguments.length<2,n=i?void 0:arguments[1];if(Db(e),xb(r,(function(r){i?(i=!1,n=r):n=e(n,r,r,t)}),{IS_ITERATOR:!0}),i)throw Lb("Reduce of empty set with no initial value");return n}});var Bb=Mt,Vb=lo,Yb=NE,jb=hc;en({target:"Set",proto:!0,real:!0,forced:!0},{some:function(e){var t=Bb(this),r=Yb(t),i=Vb(e,arguments.length>1?arguments[1]:void 0);return jb(r,(function(e,r){if(i(e,e,t))return r()}),{IS_ITERATOR:!0,INTERRUPTED:!0}).stopped}});var Fb=J,Hb=m,Kb=Se,zb=Mt,Wb=to,Gb=hc;en({target:"Set",proto:!0,real:!0,forced:!0},{symmetricDifference:function(e){var t=zb(this),r=new(Wb(t,Fb("Set")))(t),i=Kb(r.delete),n=Kb(r.add);return Gb(e,(function(e){Hb(i,r,e)||Hb(n,r,e)})),r}});var Jb=J,qb=Se,Xb=Mt,Qb=to,$b=hc;en({target:"Set",proto:!0,real:!0,forced:!0},{union:function(e){var t=Xb(this),r=new(Qb(t,Jb("Set")))(t);return $b(e,qb(r.add),{that:r}),r}});const Zb="player-state-change",eC="screen-sharing-stopped",tC="audio-mixing-finished",rC="audio-mixing-played",iC="player-state-trace",nC=["camera-capture"],oC={CameraCapture:nC[0]},sC={low:{sampleRate:16e3,channelCount:1,bitrate:24e3},standard:{sampleRate:48e3,channelCount:1,bitrate:4e4},high:{sampleRate:48e3,channelCount:1,bitrate:128e3}},aC=["low","standard","high"],cC={"90p_1":{width:160,height:90,frameRate:15,minBitrate:64e3,maxBitrate:11e4},"90p_2":{width:120,height:90,frameRate:15,minBitrate:64e3,maxBitrate:11e4},"120p_1":{width:160,height:120,frameRate:15,minBitrate:64e3,maxBitrate:12e4},"120p_2":{width:120,height:120,frameRate:15,minBitrate:64e3,maxBitrate:11e4},"180p_1":{width:320,height:180,frameRate:15,minBitrate:8e4,maxBitrate:32e4},"180p_2":{width:240,height:180,frameRate:15,minBitrate:8e4,maxBitrate:17e4},"180p_3":{width:180,height:180,frameRate:15,minBitrate:64e3,maxBitrate:13e4},"240p_1":{width:320,height:240,frameRate:15,minBitrate:1e5,maxBitrate:4e5},"240p_2":{width:240,height:240,frameRate:15,minBitrate:8e4,maxBitrate:32e4},"270p_1":{width:480,height:270,frameRate:15,minBitrate:16e4,maxBitrate:6e5},"300p_1":{width:400,height:300,frameRate:15,minBitrate:2e5,maxBitrate:5e5},"360p_1":{width:640,height:360,frameRate:15,minBitrate:2e5,maxBitrate:8e5},"360p_2":{width:480,height:360,frameRate:15,minBitrate:2e5,maxBitrate:7e5},"360p_3":{width:360,height:360,frameRate:15,minBitrate:15e4,maxBitrate:6e5},"450p_1":{width:800,height:450,frameRate:15,minBitrate:3e5,maxBitrate:95e4},"480p_1":{width:640,height:480,frameRate:15,minBitrate:25e4,maxBitrate:9e5},"480p_2":{width:480,height:480,frameRate:15,minBitrate:2e5,maxBitrate:8e5},"540p_1":{width:960,height:540,frameRate:15,minBitrate:4e5,maxBitrate:1e6},"630p_1":{width:1120,height:630,frameRate:15,minBitrate:45e4,maxBitrate:115e4},"720p_1":{width:1280,height:720,frameRate:15,minBitrate:5e5,maxBitrate:15e5},"720p_2":{width:960,height:720,frameRate:15,minBitrate:45e4,maxBitrate:11e5},"1080p_1":{width:1920,height:1080,frameRate:15,minBitrate:6e5,maxBitrate:2e6},"1080p_2":{width:1440,height:1080,frameRate:15,minBitrate:55e4,maxBitrate:17e5}},uC=["90p_1","90p_2","120p_1","120p_2","180p_1","180p_2","180p_3","240p_1","240p_2","270p_1","300p_1","360p_1","360p_2","360p_3","450p_1","480p_1","480p_2","540p_1","630p_1","720p_1","720p_2","1080p_1","1080p_2"],dC={"720p":{width:1280,height:720,frameRate:15,bitrate:12e5},"1080p":{width:1920,height:1080,frameRate:15,bitrate:2e6}},lC=["720p","1080p"],hC="inbound-rtp-audio",fC="inbound-rtp-video",pC="outbound-rtp-audio",mC="outbound-rtp-video",gC="remote-inbound-rtp-audio",_C="remote-inbound-rtp-video";let SC=function(e){return e[e.IDLE=0]="IDLE",e[e.INIT=1]="INIT",e[e.PLAY=2]="PLAY",e[e.PAUSE=3]="PAUSE",e}({});const vC=["IDLE","DISCONNECTED","CONNECTING","RECONNECTING","CONNECTED"];let yC=function(e){return e[e.IDLE=0]="IDLE",e[e.DISCONNECTED=1]="DISCONNECTED",e[e.CONNECTING=2]="CONNECTING",e[e.RECONNECTING=3]="RECONNECTING",e[e.CONNECTED=4]="CONNECTED",e}({}),IC=function(e){return e[e.MediaStatusAvailable=1]="MediaStatusAvailable",e[e.MediaStatusUnavailable=2]="MediaStatusUnavailable",e}({}),TC=function(e){return e[e.BackgroundMusic=1]="BackgroundMusic",e[e.Audio=2]="Audio",e[e.Video=3]="Video",e[e.Aux=4]="Aux",e}({}),RC=function(e){return e[e.MediaOffline=0]="MediaOffline",e[e.MediaMuted=1]="MediaMuted",e[e.MediaUnmuted=2]="MediaUnmuted",e}({});const EC=new Set(["TOP_AUDIO"]);let bC=function(e){return e.configNotify="NOTIFY_CONFIG",e.watchStreamNotify="WATCH_STREAM_NOTIFY",e.disconnectNotify="DISCONNECT_NOTIFY",e.pushStreamNotify="PUSH_STREAM_NOTIFY",e.reconnectNotify="RECONNECT_NOTIFY",e.stopPushStreamNotify="STOP_PUSH_STREAM_NOTIFY",e.changeStreamStatusNotify="CHANGE_STREAM_STATUS_NOTIFY",e.appDataChangeNotify="APP_DATA_NOTIFY",e.top3AudioVolumeNotify="TOP_AUDIO",e.statusChangeNotify="NOTIFY_STATUS",e.publishStatusNotify="PUBLISH_STATUS_NOTIFY",e.uploadLogNotify="UPLOAD_LOG_NOTIFY",e.roomStreamStatusNotify="ROOM_STREAM_STATUS_NOTIFY",e}({}),CC=function(e){return e.main="main",e.middle1="middle1",e.middle2="middle2",e.middle3="middle3",e.middle4="middle4",e.slides="slides",e.desktop="desktop",e}({});async function AC(){return new Promise(((e,t)=>{navigator.mediaDevices&&navigator.mediaDevices.enumerateDevices||t(new qc(Gc.RTC_ERR_CODE_NOT_SUPPORT_MEDIA_DEVICES)),navigator.mediaDevices.enumerateDevices().then((r=>{r&&0!==r.length?e(r):t(new qc(Gc.RTC_ERR_CODE_NO_AVAILABLE_DEVICES))})).catch((e=>{t(e)}))}))}const wC="0",kC=-1e3;let OC=function(e){return e[e.Idle=0]="Idle",e[e.Joining=1]="Joining",e[e.Joined=2]="Joined",e[e.Leaving=3]="Leaving",e[e.Rejoining=4]="Rejoining",e}({}),PC=function(e){return e[e.DEFAULT_BANDWIDTH_4M=4096e3]="DEFAULT_BANDWIDTH_4M",e[e.MIN_BAND_WIDTH=3072]="MIN_BAND_WIDTH",e[e.MAX_BAND_WIDTH=51200]="MAX_BAND_WIDTH",e}({}),MC=function(e){return e[e.HRTC_LEAVE_REASON_USER_LEAVE_ROOM=0]="HRTC_LEAVE_REASON_USER_LEAVE_ROOM",e[e.HRTC_LEAVE_REASON_SERVER_ERROR=1]="HRTC_LEAVE_REASON_SERVER_ERROR",e[e.HRTC_LEAVE_REASON_BREAKDOWN=2]="HRTC_LEAVE_REASON_BREAKDOWN",e[e.HRTC_LEAVE_REASON_SERVICE_UNREACHABLE=3]="HRTC_LEAVE_REASON_SERVICE_UNREACHABLE",e[e.HRTC_LEAVE_REASON_INTERNAL_ERROR=4]="HRTC_LEAVE_REASON_INTERNAL_ERROR",e[e.HRTC_LEAVE_REASON_KICKED_OFF=5]="HRTC_LEAVE_REASON_KICKED_OFF",e[e.HRTC_LEAVE_REASON_SIGNATURE_EXPIRED=6]="HRTC_LEAVE_REASON_SIGNATURE_EXPIRED",e[e.HRTC_LEAVE_REASON_RECONNECT_FAILED=7]="HRTC_LEAVE_REASON_RECONNECT_FAILED",e[e.HRTC_LEAVE_REASON_NETWORK_TEST=8]="HRTC_LEAVE_REASON_NETWORK_TEST",e[e.HRTC_LEAVE_REASON_USER_REMOVED=9]="HRTC_LEAVE_REASON_USER_REMOVED",e[e.HRTC_LEAVE_REASON_ROOM_DISMISSED=10]="HRTC_LEAVE_REASON_ROOM_DISMISSED",e}({}),DC=function(e){return e[e.ON=1]="ON",e[e.OFF=2]="OFF",e}({}),NC=function(e){return e[e.portNormal=1]="portNormal",e[e.portReduce=2]="portReduce",e}({});const UC={Error:"Error",StreamAdded:"stream-added",StreamRemoved:"stream-removed",StreamUpdated:"stream-updated",StreamSubscribed:"stream-subscribed",ClientBanned:"client-banned",NetworkQuality:"network-quality",ConnectionStateChanged:"connection-state-changed",PeerJoin:"peer-join",PeerLeave:"peer-leave",MuteAudio:"mute-audio",UnmuteAudio:"unmute-audio",MuteVideo:"mute-video",UnmuteVideo:"unmute-video",LogUploaded:"log-upload-result",SignatureExpired:"signature-expired",CameraChanged:"camera-changed",RecordingDeviceChanged:"recording-device-changed",PlaybackDeviceChanged:"playback-device-changed",StreamInterrupted:"stream-interrupted",StreamRecovered:"stream-recovered",VolumeIndicator:"volume-indicator",UserNameChanged:"remote-user-name-changed",BatchSubscribeFailed:"batch-subscribe-failed",LiveStreamingUpdated:"live-streaming-updated",RtcStats:"rtc-stats",CmdMsgReceived:"cmd-msg-received",CmdChannelEstablished:"cmd-channel-established",CmdChannelDisconnect:"cmd-channel-disconnect",MediaConnectionStateChanged:"media-connection-state-changed",TransportProtocolChanged:"transport-protocol-changed",TransportStats:"transport-stats",RoomStreamStatus:"room-stream-status"};let xC=function(e){return e[e.NON_ENCRYPTION=0]="NON_ENCRYPTION",e[e.ENCRYPTION_FRAME_SDK=1]="ENCRYPTION_FRAME_SDK",e[e.ENCRYPTION_FRAME_APP=2]="ENCRYPTION_FRAME_APP",e[e.ENCRYPTION_E2E_WITHOUT_MEDIA=3]="ENCRYPTION_E2E_WITHOUT_MEDIA",e}({}),LC=function(e){return e.Connected="CONNECTED",e.Reconnecting="RECONNECTING",e.DisConnected="DISCONNECTED",e}({}),BC=function(e){return e.WEBSOCKET="WebSocket",e.DATA_CHANNEL="DataChannel",e}({}),VC=function(e){return e[e.ARRAY_BUFFER=0]="ARRAY_BUFFER",e[e.STRING=1]="STRING",e}({}),YC=function(e){return e[e.PAUSE=0]="PAUSE",e[e.NORMAL=1]="NORMAL",e}({}),jC=function(e){return e[e.NET_OR_SERVERIP_ERROR=1]="NET_OR_SERVERIP_ERROR",e[e.ROOM_NOT_AVAILABLE=2]="ROOM_NOT_AVAILABLE",e[e.SERVER_ERROR=3]="SERVER_ERROR",e[e.SERVER_NO_RESPONSE=4]="SERVER_NO_RESPONSE",e[e.AUTHENTICATION_FAILED=5]="AUTHENTICATION_FAILED",e[e.RETRY_AUTHENTICATION=6]="RETRY_AUTHENTICATION",e[e.SYNCHRONIZE_FAILED=7]="SYNCHRONIZE_FAILED",e[e.URL_ERROR=8]="URL_ERROR",e[e.TERMINAL_ERROR=9]="TERMINAL_ERROR",e}({}),FC=function(e){return e[e.LEAVE_ROOM_SUCCESS=0]="LEAVE_ROOM_SUCCESS",e[e.LEAVE_ROOM_ERROR=1]="LEAVE_ROOM_ERROR",e}({}),HC=function(e){return e[e.ACTION_START=0]="ACTION_START",e[e.ACTION_STOP=1]="ACTION_STOP",e}({}),KC=function(e){return e[e.RESULT_SUCCESS=0]="RESULT_SUCCESS",e[e.RESULT_ERROR=1]="RESULT_ERROR",e}({}),zC=function(e){return e[e.OUTPUT_AUDIO=0]="OUTPUT_AUDIO",e[e.INPUT_AUDIO=1]="INPUT_AUDIO",e[e.INPUT_VIDEO=2]="INPUT_VIDEO",e}({}),WC=function(e){return e[e.AUDIO=0]="AUDIO",e[e.VIDEO=1]="VIDEO",e[e.AUX=2]="AUX",e}({}),GC=function(e){return e[e.SUCCESS=0]="SUCCESS",e[e.FAIL=1]="FAIL",e}({});const JC=0,qC=1;let XC=function(e){return e[e.SIGNAL=0]="SIGNAL",e[e.MEDIA=1]="MEDIA",e}({}),QC=function(e){return e[e.CLOSED=0]="CLOSED",e[e.CONNECTED=1]="CONNECTED",e}({}),$C=function(e){return e[e.EVENT_JOIN_ROOM=1]="EVENT_JOIN_ROOM",e[e.EVENT_LEAVE_ROOM=2]="EVENT_LEAVE_ROOM",e[e.EVENT_WATCH=3]="EVENT_WATCH",e[e.EVENT_OPT_AUDIO=5]="EVENT_OPT_AUDIO",e[e.EVENT_SWITCH_NET=6]="EVENT_SWITCH_NET",e[e.EVENT_OPT_VIDEO=7]="EVENT_OPT_VIDEO",e[e.EVENT_SWITCH_DEVICE=9]="EVENT_SWITCH_DEVICE",e[e.EVENT_DNS_TIME=10]="EVENT_DNS_TIME",e[e.EVENT_SWITCH_ROLE=11]="EVENT_SWITCH_ROLE",e[e.EVENT_SEND_MEDIA=12]="EVENT_SEND_MEDIA",e[e.EVENT_START_MEDIA=13]="EVENT_START_MEDIA",e[e.EVENT_SEND_AUX_STREAM=14]="EVENT_SEND_AUX_STREAM",e[e.EVENT_SUBSCIBE=16]="EVENT_SUBSCIBE",e[e.EVENT_CONNECT_OTHER_ROOM=17]="EVENT_CONNECT_OTHER_ROOM",e[e.EVENT_CONNECTION_CHANNEL_STATUS=18]="EVENT_CONNECTION_CHANNEL_STATUS",e[e.EVENT_SET_UP_STREAM=19]="EVENT_SET_UP_STREAM",e[e.EVENT_SET_AUDIO_POLICY=20]="EVENT_SET_AUDIO_POLICY",e}({}),ZC=function(e){return e[e.QoS_UP_STREAM_VIDEO=1001]="QoS_UP_STREAM_VIDEO",e[e.QoS_DOWN_STREAM_VIDEO=1002]="QoS_DOWN_STREAM_VIDEO",e[e.QoS_UP_STREAM_AUDIO=1003]="QoS_UP_STREAM_AUDIO",e[e.QoS_DOWN_STREAM_AUDIO=1004]="QoS_DOWN_STREAM_AUDIO",e[e.QoS_AUX_UP_STREAM_VIDEO=1005]="QoS_AUX_UP_STREAM_VIDEO",e[e.QoS_AUX_DOWN_STREAM_VIDEO=1006]="QoS_AUX_DOWN_STREAM_VIDEO",e[e.QoS_DOWN_STREAM_AUDIO_STAT=1007]="QoS_DOWN_STREAM_AUDIO_STAT",e[e.QoS_UP_STREAM_VIDEO_SUM=1011]="QoS_UP_STREAM_VIDEO_SUM",e[e.QoS_DOWN_STREAM_VIDEO_SUM=1012]="QoS_DOWN_STREAM_VIDEO_SUM",e[e.QoS_UP_STREAM_AUDIO_SUM=1013]="QoS_UP_STREAM_AUDIO_SUM",e[e.QoS_DOWN_STREAM_AUDIO_SUM=1014]="QoS_DOWN_STREAM_AUDIO_SUM",e}({}),eA=function(e){return e[e.DEVICE_RT_SYSTEM=2001]="DEVICE_RT_SYSTEM",e[e.DEVICE_RT_CAMERA=2002]="DEVICE_RT_CAMERA",e[e.DEVICE_RT_SPEAKER=2003]="DEVICE_RT_SPEAKER",e[e.DEVICE_RT_MICROPHONE=2004]="DEVICE_RT_MICROPHONE",e}({}),tA=function(e){return e[e.DEVICE_STATUS_SPEAKER=3001]="DEVICE_STATUS_SPEAKER",e[e.DEVICE_STATUS_CAMERA=3002]="DEVICE_STATUS_CAMERA",e[e.DEVICE_STATUS_MICROPHONE=3003]="DEVICE_STATUS_MICROPHONE",e[e.DEVICE_STATUS_DEVICE_CHANGE=3004]="DEVICE_STATUS_DEVICE_CHANGE",e[e.DEVICE_STATUS_ERROR=3005]="DEVICE_STATUS_ERROR",e[e.DEVICE_STATUS_MEDIA_QUALITY=3006]="DEVICE_STATUS_MEDIA_QUALITY",e[e.DEVICE_STATUS_USERAGENT=3007]="DEVICE_STATUS_USERAGENT",e}({}),rA=function(e){return e[e.SIGNAL_REQUEST=401]="SIGNAL_REQUEST",e[e.SIGNAL_RESPONSE=402]="SIGNAL_RESPONSE",e}({}),iA=function(e){return e[e.API_CALL=501]="API_CALL",e[e.CALLBACK_API=502]="CALLBACK_API",e}({}),nA=function(e){return e[e.FirstFrame=606]="FirstFrame",e}({}),oA=function(e){return e[e.TraceNuwa=2998]="TraceNuwa",e}({}),sA=function(e){return e[e.SUCCESS=0]="SUCCESS",e[e.FAIL=1]="FAIL",e}({});const aA=["watch","batch_watch","cancel_watch"];let cA=function(e){return e[e.SUCCESS=0]="SUCCESS",e[e.NETWORK_CONNECT_ERROR=1]="NETWORK_CONNECT_ERROR",e[e.CLIENT_NOT_IDEL=2]="CLIENT_NOT_IDEL",e[e.SERVER_ERROR=3]="SERVER_ERROR",e[e.INTERNAL_ERROR=9]="INTERNAL_ERROR",e}({});const uA="2.0.9.302",dA="ac7b7a8",lA="v3",hA=5e3,fA=1e4,pA=5,mA=6,gA=120,_A="https://logservice.hicloud.com:443",SA="1090",vA=4,yA=["webCongestionAlgorithm"],IA=["webLowLatency"];let TA=!0,RA=!0;function EA(e,t,r){const i=e.match(t);return i&&i.length>=r&&parseInt(i[r],10)}function bA(e,t,r){if(!e.RTCPeerConnection)return;const i=e.RTCPeerConnection.prototype,n=i.addEventListener;i.addEventListener=function(e,i){if(e!==t)return n.apply(this,arguments);const o=e=>{const t=r(e);t&&(i.handleEvent?i.handleEvent(t):i(t))};return this._eventMap=this._eventMap||{},this._eventMap[t]||(this._eventMap[t]=new Map),this._eventMap[t].set(i,o),n.apply(this,[e,o])};const o=i.removeEventListener;i.removeEventListener=function(e,r){if(e!==t||!this._eventMap||!this._eventMap[t])return o.apply(this,arguments);if(!this._eventMap[t].has(r))return o.apply(this,arguments);const i=this._eventMap[t].get(r);return this._eventMap[t].delete(r),0===this._eventMap[t].size&&delete this._eventMap[t],0===Object.keys(this._eventMap).length&&delete this._eventMap,o.apply(this,[e,i])},Object.defineProperty(i,"on"+t,{get(){return this["_on"+t]},set(e){this["_on"+t]&&(this.removeEventListener(t,this["_on"+t]),delete this["_on"+t]),e&&this.addEventListener(t,this["_on"+t]=e)},enumerable:!0,configurable:!0})}function CA(e){return"boolean"!=typeof e?new Error("Argument type: "+typeof e+". Please use a boolean."):(TA=e,e?"adapter.js logging disabled":"adapter.js logging enabled")}function AA(e){return"boolean"!=typeof e?new Error("Argument type: "+typeof e+". Please use a boolean."):(RA=!e,"adapter.js deprecation warnings "+(e?"disabled":"enabled"))}function wA(){if("object"==typeof window){if(TA)return;"undefined"!=typeof console&&"function"==typeof console.log&&console.log.apply(console,arguments)}}function kA(e,t){RA&&console.warn(e+" is deprecated, please use "+t+" instead.")}function OA(e){return"[object Object]"===Object.prototype.toString.call(e)}function PA(e){return OA(e)?Object.keys(e).reduce((function(t,r){const i=OA(e[r]),n=i?PA(e[r]):e[r],o=i&&!Object.keys(n).length;return void 0===n||o?t:Object.assign(t,{[r]:n})}),{}):e}function MA(e,t,r){t&&!r.has(t.id)&&(r.set(t.id,t),Object.keys(t).forEach((i=>{i.endsWith("Id")?MA(e,e.get(t[i]),r):i.endsWith("Ids")&&t[i].forEach((t=>{MA(e,e.get(t),r)}))})))}function DA(e,t,r){const i=r?"outbound-rtp":"inbound-rtp",n=new Map;if(null===t)return n;const o=[];return e.forEach((e=>{"track"===e.type&&e.trackIdentifier===t.id&&o.push(e)})),o.forEach((t=>{e.forEach((r=>{r.type===i&&r.trackId===t.id&&MA(e,r,n)}))})),n}const NA=wA;function UA(e,t){const r=e&&e.navigator;if(!r.mediaDevices)return;const i=function(e){if("object"!=typeof e||e.mandatory||e.optional)return e;const t={};return Object.keys(e).forEach((r=>{if("require"===r||"advanced"===r||"mediaSource"===r)return;const i="object"==typeof e[r]?e[r]:{ideal:e[r]};void 0!==i.exact&&"number"==typeof i.exact&&(i.min=i.max=i.exact);const n=function(e,t){return e?e+t.charAt(0).toUpperCase()+t.slice(1):"deviceId"===t?"sourceId":t};if(void 0!==i.ideal){t.optional=t.optional||[];let e={};"number"==typeof i.ideal?(e[n("min",r)]=i.ideal,t.optional.push(e),e={},e[n("max",r)]=i.ideal,t.optional.push(e)):(e[n("",r)]=i.ideal,t.optional.push(e))}void 0!==i.exact&&"number"!=typeof i.exact?(t.mandatory=t.mandatory||{},t.mandatory[n("",r)]=i.exact):["min","max"].forEach((e=>{void 0!==i[e]&&(t.mandatory=t.mandatory||{},t.mandatory[n(e,r)]=i[e])}))})),e.advanced&&(t.optional=(t.optional||[]).concat(e.advanced)),t},n=function(e,n){if(t.version>=61)return n(e);if((e=JSON.parse(JSON.stringify(e)))&&"object"==typeof e.audio){const t=function(e,t,r){t in e&&!(r in e)&&(e[r]=e[t],delete e[t])};t((e=JSON.parse(JSON.stringify(e))).audio,"autoGainControl","googAutoGainControl"),t(e.audio,"noiseSuppression","googNoiseSuppression"),e.audio=i(e.audio)}if(e&&"object"==typeof e.video){let o=e.video.facingMode;o=o&&("object"==typeof o?o:{ideal:o});const s=t.version<66;if(o&&("user"===o.exact||"environment"===o.exact||"user"===o.ideal||"environment"===o.ideal)&&(!r.mediaDevices.getSupportedConstraints||!r.mediaDevices.getSupportedConstraints().facingMode||s)){let t;if(delete e.video.facingMode,"environment"===o.exact||"environment"===o.ideal?t=["back","rear"]:"user"!==o.exact&&"user"!==o.ideal||(t=["front"]),t)return r.mediaDevices.enumerateDevices().then((r=>{r=r.filter((e=>"videoinput"===e.kind));let s=r.find((e=>t.some((t=>e.label.toLowerCase().includes(t)))));return!s&&r.length&&t.includes("back")&&(s=r[r.length-1]),s&&(e.video.deviceId=o.exact?{exact:s.deviceId}:{ideal:s.deviceId}),e.video=i(e.video),NA("chrome: "+JSON.stringify(e)),n(e)}))}e.video=i(e.video)}return NA("chrome: "+JSON.stringify(e)),n(e)},o=function(e){return t.version>=64?e:{name:{PermissionDeniedError:"NotAllowedError",PermissionDismissedError:"NotAllowedError",InvalidStateError:"NotAllowedError",DevicesNotFoundError:"NotFoundError",ConstraintNotSatisfiedError:"OverconstrainedError",TrackStartError:"NotReadableError",MediaDeviceFailedDueToShutdown:"NotAllowedError",MediaDeviceKillSwitchOn:"NotAllowedError",TabCaptureError:"AbortError",ScreenCaptureError:"AbortError",DeviceCaptureError:"AbortError"}[e.name]||e.name,message:e.message,constraint:e.constraint||e.constraintName,toString(){return this.name+(this.message&&": ")+this.message}}};if(r.getUserMedia=function(e,t,i){n(e,(e=>{r.webkitGetUserMedia(e,t,(e=>{i&&i(o(e))}))}))}.bind(r),r.mediaDevices.getUserMedia){const e=r.mediaDevices.getUserMedia.bind(r.mediaDevices);r.mediaDevices.getUserMedia=function(t){return n(t,(t=>e(t).then((e=>{if(t.audio&&!e.getAudioTracks().length||t.video&&!e.getVideoTracks().length)throw e.getTracks().forEach((e=>{e.stop()})),new DOMException("","NotFoundError");return e}),(e=>Promise.reject(o(e))))))}}}function xA(e){e.MediaStream=e.MediaStream||e.webkitMediaStream}function LA(e){if("object"==typeof e&&e.RTCPeerConnection&&!("ontrack"in e.RTCPeerConnection.prototype)){Object.defineProperty(e.RTCPeerConnection.prototype,"ontrack",{get(){return this._ontrack},set(e){this._ontrack&&this.removeEventListener("track",this._ontrack),this.addEventListener("track",this._ontrack=e)},enumerable:!0,configurable:!0});const t=e.RTCPeerConnection.prototype.setRemoteDescription;e.RTCPeerConnection.prototype.setRemoteDescription=function(){return this._ontrackpoly||(this._ontrackpoly=t=>{t.stream.addEventListener("addtrack",(r=>{let i;i=e.RTCPeerConnection.prototype.getReceivers?this.getReceivers().find((e=>e.track&&e.track.id===r.track.id)):{track:r.track};const n=new Event("track");n.track=r.track,n.receiver=i,n.transceiver={receiver:i},n.streams=[t.stream],this.dispatchEvent(n)})),t.stream.getTracks().forEach((r=>{let i;i=e.RTCPeerConnection.prototype.getReceivers?this.getReceivers().find((e=>e.track&&e.track.id===r.id)):{track:r};const n=new Event("track");n.track=r,n.receiver=i,n.transceiver={receiver:i},n.streams=[t.stream],this.dispatchEvent(n)}))},this.addEventListener("addstream",this._ontrackpoly)),t.apply(this,arguments)}}else bA(e,"track",(e=>(e.transceiver||Object.defineProperty(e,"transceiver",{value:{receiver:e.receiver}}),e)))}function BA(e){if("object"==typeof e&&e.RTCPeerConnection&&!("getSenders"in e.RTCPeerConnection.prototype)&&"createDTMFSender"in e.RTCPeerConnection.prototype){const t=function(e,t){return{track:t,get dtmf(){return void 0===this._dtmf&&("audio"===t.kind?this._dtmf=e.createDTMFSender(t):this._dtmf=null),this._dtmf},_pc:e}};if(!e.RTCPeerConnection.prototype.getSenders){e.RTCPeerConnection.prototype.getSenders=function(){return this._senders=this._senders||[],this._senders.slice()};const r=e.RTCPeerConnection.prototype.addTrack;e.RTCPeerConnection.prototype.addTrack=function(e,i){let n=r.apply(this,arguments);return n||(n=t(this,e),this._senders.push(n)),n};const i=e.RTCPeerConnection.prototype.removeTrack;e.RTCPeerConnection.prototype.removeTrack=function(e){i.apply(this,arguments);const t=this._senders.indexOf(e);-1!==t&&this._senders.splice(t,1)}}const r=e.RTCPeerConnection.prototype.addStream;e.RTCPeerConnection.prototype.addStream=function(e){this._senders=this._senders||[],r.apply(this,[e]),e.getTracks().forEach((e=>{this._senders.push(t(this,e))}))};const i=e.RTCPeerConnection.prototype.removeStream;e.RTCPeerConnection.prototype.removeStream=function(e){this._senders=this._senders||[],i.apply(this,[e]),e.getTracks().forEach((e=>{const t=this._senders.find((t=>t.track===e));t&&this._senders.splice(this._senders.indexOf(t),1)}))}}else if("object"==typeof e&&e.RTCPeerConnection&&"getSenders"in e.RTCPeerConnection.prototype&&"createDTMFSender"in e.RTCPeerConnection.prototype&&e.RTCRtpSender&&!("dtmf"in e.RTCRtpSender.prototype)){const t=e.RTCPeerConnection.prototype.getSenders;e.RTCPeerConnection.prototype.getSenders=function(){const e=t.apply(this,[]);return e.forEach((e=>e._pc=this)),e},Object.defineProperty(e.RTCRtpSender.prototype,"dtmf",{get(){return void 0===this._dtmf&&("audio"===this.track.kind?this._dtmf=this._pc.createDTMFSender(this.track):this._dtmf=null),this._dtmf}})}}function VA(e){if(!e.RTCPeerConnection)return;const t=e.RTCPeerConnection.prototype.getStats;e.RTCPeerConnection.prototype.getStats=function(){const[e,r,i]=arguments;if(arguments.length>0&&"function"==typeof e)return t.apply(this,arguments);if(0===t.length&&(0===arguments.length||"function"!=typeof e))return t.apply(this,[]);const n=function(e){const t={};return e.result().forEach((e=>{const r={id:e.id,timestamp:e.timestamp,type:{localcandidate:"local-candidate",remotecandidate:"remote-candidate"}[e.type]||e.type};e.names().forEach((t=>{r[t]=e.stat(t)})),t[r.id]=r})),t},o=function(e){return new Map(Object.keys(e).map((t=>[t,e[t]])))};if(arguments.length>=2){const i=function(e){r(o(n(e)))};return t.apply(this,[i,e])}return new Promise(((e,r)=>{t.apply(this,[function(t){e(o(n(t)))},r])})).then(r,i)}}function YA(e){if(!("object"==typeof e&&e.RTCPeerConnection&&e.RTCRtpSender&&e.RTCRtpReceiver))return;if(!("getStats"in e.RTCRtpSender.prototype)){const t=e.RTCPeerConnection.prototype.getSenders;t&&(e.RTCPeerConnection.prototype.getSenders=function(){const e=t.apply(this,[]);return e.forEach((e=>e._pc=this)),e});const r=e.RTCPeerConnection.prototype.addTrack;r&&(e.RTCPeerConnection.prototype.addTrack=function(){const e=r.apply(this,arguments);return e._pc=this,e}),e.RTCRtpSender.prototype.getStats=function(){const e=this;return this._pc.getStats().then((t=>DA(t,e.track,!0)))}}if(!("getStats"in e.RTCRtpReceiver.prototype)){const t=e.RTCPeerConnection.prototype.getReceivers;t&&(e.RTCPeerConnection.prototype.getReceivers=function(){const e=t.apply(this,[]);return e.forEach((e=>e._pc=this)),e}),bA(e,"track",(e=>(e.receiver._pc=e.srcElement,e))),e.RTCRtpReceiver.prototype.getStats=function(){const e=this;return this._pc.getStats().then((t=>DA(t,e.track,!1)))}}if(!("getStats"in e.RTCRtpSender.prototype)||!("getStats"in e.RTCRtpReceiver.prototype))return;const t=e.RTCPeerConnection.prototype.getStats;e.RTCPeerConnection.prototype.getStats=function(){if(arguments.length>0&&arguments[0]instanceof e.MediaStreamTrack){const e=arguments[0];let t,r,i;return this.getSenders().forEach((r=>{r.track===e&&(t?i=!0:t=r)})),this.getReceivers().forEach((t=>(t.track===e&&(r?i=!0:r=t),t.track===e))),i||t&&r?Promise.reject(new DOMException("There are more than one sender or receiver for the track.","InvalidAccessError")):t?t.getStats():r?r.getStats():Promise.reject(new DOMException("There is no sender or receiver for the track.","InvalidAccessError"))}return t.apply(this,arguments)}}function jA(e){e.RTCPeerConnection.prototype.getLocalStreams=function(){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},Object.keys(this._shimmedLocalStreams).map((e=>this._shimmedLocalStreams[e][0]))};const t=e.RTCPeerConnection.prototype.addTrack;e.RTCPeerConnection.prototype.addTrack=function(e,r){if(!r)return t.apply(this,arguments);this._shimmedLocalStreams=this._shimmedLocalStreams||{};const i=t.apply(this,arguments);return this._shimmedLocalStreams[r.id]?-1===this._shimmedLocalStreams[r.id].indexOf(i)&&this._shimmedLocalStreams[r.id].push(i):this._shimmedLocalStreams[r.id]=[r,i],i};const r=e.RTCPeerConnection.prototype.addStream;e.RTCPeerConnection.prototype.addStream=function(e){this._shimmedLocalStreams=this._shimmedLocalStreams||{},e.getTracks().forEach((e=>{const t=this.getSenders().find((t=>t.track===e));if(t)throw new DOMException("Track already exists.","InvalidAccessError")}));const t=this.getSenders();r.apply(this,arguments);const i=this.getSenders().filter((e=>-1===t.indexOf(e)));this._shimmedLocalStreams[e.id]=[e].concat(i)};const i=e.RTCPeerConnection.prototype.removeStream;e.RTCPeerConnection.prototype.removeStream=function(e){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},delete this._shimmedLocalStreams[e.id],i.apply(this,arguments)};const n=e.RTCPeerConnection.prototype.removeTrack;e.RTCPeerConnection.prototype.removeTrack=function(e){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},e&&Object.keys(this._shimmedLocalStreams).forEach((t=>{const r=this._shimmedLocalStreams[t].indexOf(e);-1!==r&&this._shimmedLocalStreams[t].splice(r,1),1===this._shimmedLocalStreams[t].length&&delete this._shimmedLocalStreams[t]})),n.apply(this,arguments)}}function FA(e,t){if(!e.RTCPeerConnection)return;if(e.RTCPeerConnection.prototype.addTrack&&t.version>=65)return jA(e);const r=e.RTCPeerConnection.prototype.getLocalStreams;e.RTCPeerConnection.prototype.getLocalStreams=function(){const e=r.apply(this);return this._reverseStreams=this._reverseStreams||{},e.map((e=>this._reverseStreams[e.id]))};const i=e.RTCPeerConnection.prototype.addStream;e.RTCPeerConnection.prototype.addStream=function(t){if(this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{},t.getTracks().forEach((e=>{const t=this.getSenders().find((t=>t.track===e));if(t)throw new DOMException("Track already exists.","InvalidAccessError")})),!this._reverseStreams[t.id]){const r=new e.MediaStream(t.getTracks());this._streams[t.id]=r,this._reverseStreams[r.id]=t,t=r}i.apply(this,[t])};const n=e.RTCPeerConnection.prototype.removeStream;function o(e,t){let r=t.sdp;return Object.keys(e._reverseStreams||[]).forEach((t=>{const i=e._reverseStreams[t],n=e._streams[i.id];r=r.replace(new RegExp(n.id,"g"),i.id)})),new RTCSessionDescription({type:t.type,sdp:r})}e.RTCPeerConnection.prototype.removeStream=function(e){this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{},n.apply(this,[this._streams[e.id]||e]),delete this._reverseStreams[this._streams[e.id]?this._streams[e.id].id:e.id],delete this._streams[e.id]},e.RTCPeerConnection.prototype.addTrack=function(t,r){if("closed"===this.signalingState)throw new DOMException("The RTCPeerConnection's signalingState is 'closed'.","InvalidStateError");const i=[].slice.call(arguments,1);if(1!==i.length||!i[0].getTracks().find((e=>e===t)))throw new DOMException("The adapter.js addTrack polyfill only supports a single stream which is associated with the specified track.","NotSupportedError");const n=this.getSenders().find((e=>e.track===t));if(n)throw new DOMException("Track already exists.","InvalidAccessError");this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{};const o=this._streams[r.id];if(o)o.addTrack(t),Promise.resolve().then((()=>{this.dispatchEvent(new Event("negotiationneeded"))}));else{const i=new e.MediaStream([t]);this._streams[r.id]=i,this._reverseStreams[i.id]=r,this.addStream(i)}return this.getSenders().find((e=>e.track===t))},["createOffer","createAnswer"].forEach((function(t){const r=e.RTCPeerConnection.prototype[t],i={[t](){const e=arguments;return arguments.length&&"function"==typeof arguments[0]?r.apply(this,[t=>{const r=o(this,t);e[0].apply(null,[r])},t=>{e[1]&&e[1].apply(null,t)},arguments[2]]):r.apply(this,arguments).then((e=>o(this,e)))}};e.RTCPeerConnection.prototype[t]=i[t]}));const s=e.RTCPeerConnection.prototype.setLocalDescription;e.RTCPeerConnection.prototype.setLocalDescription=function(){return arguments.length&&arguments[0].type?(arguments[0]=function(e,t){let r=t.sdp;return Object.keys(e._reverseStreams||[]).forEach((t=>{const i=e._reverseStreams[t],n=e._streams[i.id];r=r.replace(new RegExp(i.id,"g"),n.id)})),new RTCSessionDescription({type:t.type,sdp:r})}(this,arguments[0]),s.apply(this,arguments)):s.apply(this,arguments)};const a=Object.getOwnPropertyDescriptor(e.RTCPeerConnection.prototype,"localDescription");Object.defineProperty(e.RTCPeerConnection.prototype,"localDescription",{get(){const e=a.get.apply(this);return""===e.type?e:o(this,e)}}),e.RTCPeerConnection.prototype.removeTrack=function(e){if("closed"===this.signalingState)throw new DOMException("The RTCPeerConnection's signalingState is 'closed'.","InvalidStateError");if(!e._pc)throw new DOMException("Argument 1 of RTCPeerConnection.removeTrack does not implement interface RTCRtpSender.","TypeError");if(!(e._pc===this))throw new DOMException("Sender was not created by this connection.","InvalidAccessError");let t;this._streams=this._streams||{},Object.keys(this._streams).forEach((r=>{this._streams[r].getTracks().find((t=>e.track===t))&&(t=this._streams[r])})),t&&(1===t.getTracks().length?this.removeStream(this._reverseStreams[t.id]):t.removeTrack(e.track),this.dispatchEvent(new Event("negotiationneeded")))}}function HA(e,t){!e.RTCPeerConnection&&e.webkitRTCPeerConnection&&(e.RTCPeerConnection=e.webkitRTCPeerConnection),e.RTCPeerConnection&&t.version<53&&["setLocalDescription","setRemoteDescription","addIceCandidate"].forEach((function(t){const r=e.RTCPeerConnection.prototype[t],i={[t](){return arguments[0]=new("addIceCandidate"===t?e.RTCIceCandidate:e.RTCSessionDescription)(arguments[0]),r.apply(this,arguments)}};e.RTCPeerConnection.prototype[t]=i[t]}))}function KA(e,t){bA(e,"negotiationneeded",(e=>{const r=e.target;if(!(t.version<72||r.getConfiguration&&"plan-b"===r.getConfiguration().sdpSemantics)||"stable"===r.signalingState)return e}))}var zA=Object.freeze({__proto__:null,shimMediaStream:xA,shimOnTrack:LA,shimGetSendersWithDtmf:BA,shimGetStats:VA,shimSenderReceiverGetStats:YA,shimAddTrackRemoveTrackWithNative:jA,shimAddTrackRemoveTrack:FA,shimPeerConnection:HA,fixNegotiationNeeded:KA,shimGetUserMedia:UA,shimGetDisplayMedia:function(e,t){e.navigator.mediaDevices&&"getDisplayMedia"in e.navigator.mediaDevices||e.navigator.mediaDevices&&("function"==typeof t?e.navigator.mediaDevices.getDisplayMedia=function(r){return t(r).then((t=>{const i=r.video&&r.video.width,n=r.video&&r.video.height,o=r.video&&r.video.frameRate;return r.video={mandatory:{chromeMediaSource:"desktop",chromeMediaSourceId:t,maxFrameRate:o||3}},i&&(r.video.mandatory.maxWidth=i),n&&(r.video.mandatory.maxHeight=n),e.navigator.mediaDevices.getUserMedia(r)}))}:console.error("shimGetDisplayMedia: getSourceId argument is not a function"))}});function WA(e,t){const r=e&&e.navigator,i=e&&e.MediaStreamTrack;if(r.getUserMedia=function(e,t,i){kA("navigator.getUserMedia","navigator.mediaDevices.getUserMedia"),r.mediaDevices.getUserMedia(e).then(t,i)},!(t.version>55&&"autoGainControl"in r.mediaDevices.getSupportedConstraints())){const e=function(e,t,r){t in e&&!(r in e)&&(e[r]=e[t],delete e[t])},t=r.mediaDevices.getUserMedia.bind(r.mediaDevices);if(r.mediaDevices.getUserMedia=function(r){return"object"==typeof r&&"object"==typeof r.audio&&(r=JSON.parse(JSON.stringify(r)),e(r.audio,"autoGainControl","mozAutoGainControl"),e(r.audio,"noiseSuppression","mozNoiseSuppression")),t(r)},i&&i.prototype.getSettings){const t=i.prototype.getSettings;i.prototype.getSettings=function(){const r=t.apply(this,arguments);return e(r,"mozAutoGainControl","autoGainControl"),e(r,"mozNoiseSuppression","noiseSuppression"),r}}if(i&&i.prototype.applyConstraints){const t=i.prototype.applyConstraints;i.prototype.applyConstraints=function(r){return"audio"===this.kind&&"object"==typeof r&&(r=JSON.parse(JSON.stringify(r)),e(r,"autoGainControl","mozAutoGainControl"),e(r,"noiseSuppression","mozNoiseSuppression")),t.apply(this,[r])}}}}function GA(e){"object"==typeof e&&e.RTCTrackEvent&&"receiver"in e.RTCTrackEvent.prototype&&!("transceiver"in e.RTCTrackEvent.prototype)&&Object.defineProperty(e.RTCTrackEvent.prototype,"transceiver",{get(){return{receiver:this.receiver}}})}function JA(e,t){if("object"!=typeof e||!e.RTCPeerConnection&&!e.mozRTCPeerConnection)return;!e.RTCPeerConnection&&e.mozRTCPeerConnection&&(e.RTCPeerConnection=e.mozRTCPeerConnection),t.version<53&&["setLocalDescription","setRemoteDescription","addIceCandidate"].forEach((function(t){const r=e.RTCPeerConnection.prototype[t],i={[t](){return arguments[0]=new("addIceCandidate"===t?e.RTCIceCandidate:e.RTCSessionDescription)(arguments[0]),r.apply(this,arguments)}};e.RTCPeerConnection.prototype[t]=i[t]}));const r={inboundrtp:"inbound-rtp",outboundrtp:"outbound-rtp",candidatepair:"candidate-pair",localcandidate:"local-candidate",remotecandidate:"remote-candidate"},i=e.RTCPeerConnection.prototype.getStats;e.RTCPeerConnection.prototype.getStats=function(){const[e,n,o]=arguments;return i.apply(this,[e||null]).then((e=>{if(t.version<53&&!n)try{e.forEach((e=>{e.type=r[e.type]||e.type}))}catch(Aw){if("TypeError"!==Aw.name)throw Aw;e.forEach(((t,i)=>{e.set(i,Object.assign({},t,{type:r[t.type]||t.type}))}))}return e})).then(n,o)}}function qA(e){if("object"!=typeof e||!e.RTCPeerConnection||!e.RTCRtpSender)return;if(e.RTCRtpSender&&"getStats"in e.RTCRtpSender.prototype)return;const t=e.RTCPeerConnection.prototype.getSenders;t&&(e.RTCPeerConnection.prototype.getSenders=function(){const e=t.apply(this,[]);return e.forEach((e=>e._pc=this)),e});const r=e.RTCPeerConnection.prototype.addTrack;r&&(e.RTCPeerConnection.prototype.addTrack=function(){const e=r.apply(this,arguments);return e._pc=this,e}),e.RTCRtpSender.prototype.getStats=function(){return this.track?this._pc.getStats(this.track):Promise.resolve(new Map)}}function XA(e){if("object"!=typeof e||!e.RTCPeerConnection||!e.RTCRtpSender)return;if(e.RTCRtpSender&&"getStats"in e.RTCRtpReceiver.prototype)return;const t=e.RTCPeerConnection.prototype.getReceivers;t&&(e.RTCPeerConnection.prototype.getReceivers=function(){const e=t.apply(this,[]);return e.forEach((e=>e._pc=this)),e}),bA(e,"track",(e=>(e.receiver._pc=e.srcElement,e))),e.RTCRtpReceiver.prototype.getStats=function(){return this._pc.getStats(this.track)}}function QA(e){e.RTCPeerConnection&&!("removeStream"in e.RTCPeerConnection.prototype)&&(e.RTCPeerConnection.prototype.removeStream=function(e){kA("removeStream","removeTrack"),this.getSenders().forEach((t=>{t.track&&e.getTracks().includes(t.track)&&this.removeTrack(t)}))})}function $A(e){e.DataChannel&&!e.RTCDataChannel&&(e.RTCDataChannel=e.DataChannel)}function ZA(e){if("object"!=typeof e||!e.RTCPeerConnection)return;const t=e.RTCPeerConnection.prototype.addTransceiver;t&&(e.RTCPeerConnection.prototype.addTransceiver=function(){this.setParametersPromises=[];const e=arguments[1],r=e&&"sendEncodings"in e;r&&e.sendEncodings.forEach((e=>{if("rid"in e){if(!/^[a-z0-9]{0,16}$/i.test(e.rid))throw new TypeError("Invalid RID value provided.")}if("scaleResolutionDownBy"in e&&!(parseFloat(e.scaleResolutionDownBy)>=1))throw new RangeError("scale_resolution_down_by must be >= 1.0");if("maxFramerate"in e&&!(parseFloat(e.maxFramerate)>=0))throw new RangeError("max_framerate must be >= 0.0")}));const i=t.apply(this,arguments);if(r){const{sender:t}=i,r=t.getParameters();(!("encodings"in r)||1===r.encodings.length&&0===Object.keys(r.encodings[0]).length)&&(r.encodings=e.sendEncodings,t.sendEncodings=e.sendEncodings,this.setParametersPromises.push(t.setParameters(r).then((()=>{delete t.sendEncodings})).catch((()=>{delete t.sendEncodings}))))}return i})}function ew(e){if("object"!=typeof e||!e.RTCRtpSender)return;const t=e.RTCRtpSender.prototype.getParameters;t&&(e.RTCRtpSender.prototype.getParameters=function(){const e=t.apply(this,arguments);return"encodings"in e||(e.encodings=[].concat(this.sendEncodings||[{}])),e})}function tw(e){if("object"!=typeof e||!e.RTCPeerConnection)return;const t=e.RTCPeerConnection.prototype.createOffer;e.RTCPeerConnection.prototype.createOffer=function(){return this.setParametersPromises&&this.setParametersPromises.length?Promise.all(this.setParametersPromises).then((()=>t.apply(this,arguments))).finally((()=>{this.setParametersPromises=[]})):t.apply(this,arguments)}}function rw(e){if("object"!=typeof e||!e.RTCPeerConnection)return;const t=e.RTCPeerConnection.prototype.createAnswer;e.RTCPeerConnection.prototype.createAnswer=function(){return this.setParametersPromises&&this.setParametersPromises.length?Promise.all(this.setParametersPromises).then((()=>t.apply(this,arguments))).finally((()=>{this.setParametersPromises=[]})):t.apply(this,arguments)}}var iw=Object.freeze({__proto__:null,shimOnTrack:GA,shimPeerConnection:JA,shimSenderGetStats:qA,shimReceiverGetStats:XA,shimRemoveStream:QA,shimRTCDataChannel:$A,shimAddTransceiver:ZA,shimGetParameters:ew,shimCreateOffer:tw,shimCreateAnswer:rw,shimGetUserMedia:WA,shimGetDisplayMedia:function(e,t){e.navigator.mediaDevices&&"getDisplayMedia"in e.navigator.mediaDevices||e.navigator.mediaDevices&&(e.navigator.mediaDevices.getDisplayMedia=function(r){if(!r||!r.video){const e=new DOMException("getDisplayMedia without video constraints is undefined");return e.name="NotFoundError",e.code=8,Promise.reject(e)}return!0===r.video?r.video={mediaSource:t}:r.video.mediaSource=t,e.navigator.mediaDevices.getUserMedia(r)})}});function nw(e){if("object"==typeof e&&e.RTCPeerConnection){if("getLocalStreams"in e.RTCPeerConnection.prototype||(e.RTCPeerConnection.prototype.getLocalStreams=function(){return this._localStreams||(this._localStreams=[]),this._localStreams}),!("addStream"in e.RTCPeerConnection.prototype)){const t=e.RTCPeerConnection.prototype.addTrack;e.RTCPeerConnection.prototype.addStream=function(e){this._localStreams||(this._localStreams=[]),this._localStreams.includes(e)||this._localStreams.push(e),e.getAudioTracks().forEach((r=>t.call(this,r,e))),e.getVideoTracks().forEach((r=>t.call(this,r,e)))},e.RTCPeerConnection.prototype.addTrack=function(e,...r){return r&&r.forEach((e=>{this._localStreams?this._localStreams.includes(e)||this._localStreams.push(e):this._localStreams=[e]})),t.apply(this,arguments)}}"removeStream"in e.RTCPeerConnection.prototype||(e.RTCPeerConnection.prototype.removeStream=function(e){this._localStreams||(this._localStreams=[]);const t=this._localStreams.indexOf(e);if(-1===t)return;this._localStreams.splice(t,1);const r=e.getTracks();this.getSenders().forEach((e=>{r.includes(e.track)&&this.removeTrack(e)}))})}}function ow(e){if("object"==typeof e&&e.RTCPeerConnection&&("getRemoteStreams"in e.RTCPeerConnection.prototype||(e.RTCPeerConnection.prototype.getRemoteStreams=function(){return this._remoteStreams?this._remoteStreams:[]}),!("onaddstream"in e.RTCPeerConnection.prototype))){Object.defineProperty(e.RTCPeerConnection.prototype,"onaddstream",{get(){return this._onaddstream},set(e){this._onaddstream&&(this.removeEventListener("addstream",this._onaddstream),this.removeEventListener("track",this._onaddstreampoly)),this.addEventListener("addstream",this._onaddstream=e),this.addEventListener("track",this._onaddstreampoly=e=>{e.streams.forEach((e=>{if(this._remoteStreams||(this._remoteStreams=[]),this._remoteStreams.includes(e))return;this._remoteStreams.push(e);const t=new Event("addstream");t.stream=e,this.dispatchEvent(t)}))})}});const t=e.RTCPeerConnection.prototype.setRemoteDescription;e.RTCPeerConnection.prototype.setRemoteDescription=function(){const e=this;return this._onaddstreampoly||this.addEventListener("track",this._onaddstreampoly=function(t){t.streams.forEach((t=>{if(e._remoteStreams||(e._remoteStreams=[]),e._remoteStreams.indexOf(t)>=0)return;e._remoteStreams.push(t);const r=new Event("addstream");r.stream=t,e.dispatchEvent(r)}))}),t.apply(e,arguments)}}}function sw(e){if("object"!=typeof e||!e.RTCPeerConnection)return;const t=e.RTCPeerConnection.prototype,r=t.createOffer,i=t.createAnswer,n=t.setLocalDescription,o=t.setRemoteDescription,s=t.addIceCandidate;t.createOffer=function(e,t){const i=arguments.length>=2?arguments[2]:arguments[0],n=r.apply(this,[i]);return t?(n.then(e,t),Promise.resolve()):n},t.createAnswer=function(e,t){const r=arguments.length>=2?arguments[2]:arguments[0],n=i.apply(this,[r]);return t?(n.then(e,t),Promise.resolve()):n};let a=function(e,t,r){const i=n.apply(this,[e]);return r?(i.then(t,r),Promise.resolve()):i};t.setLocalDescription=a,a=function(e,t,r){const i=o.apply(this,[e]);return r?(i.then(t,r),Promise.resolve()):i},t.setRemoteDescription=a,a=function(e,t,r){const i=s.apply(this,[e]);return r?(i.then(t,r),Promise.resolve()):i},t.addIceCandidate=a}function aw(e){const t=e&&e.navigator;if(t.mediaDevices&&t.mediaDevices.getUserMedia){const e=t.mediaDevices,r=e.getUserMedia.bind(e);t.mediaDevices.getUserMedia=e=>r(cw(e))}!t.getUserMedia&&t.mediaDevices&&t.mediaDevices.getUserMedia&&(t.getUserMedia=function(e,r,i){t.mediaDevices.getUserMedia(e).then(r,i)}.bind(t))}function cw(e){return e&&void 0!==e.video?Object.assign({},e,{video:PA(e.video)}):e}function uw(e){if(!e.RTCPeerConnection)return;const t=e.RTCPeerConnection;e.RTCPeerConnection=function(e,r){if(e&&e.iceServers){const t=[];for(let r=0;rt.generateCertificate})}function dw(e){"object"==typeof e&&e.RTCTrackEvent&&"receiver"in e.RTCTrackEvent.prototype&&!("transceiver"in e.RTCTrackEvent.prototype)&&Object.defineProperty(e.RTCTrackEvent.prototype,"transceiver",{get(){return{receiver:this.receiver}}})}function lw(e){const t=e.RTCPeerConnection.prototype.createOffer;e.RTCPeerConnection.prototype.createOffer=function(e){if(e){void 0!==e.offerToReceiveAudio&&(e.offerToReceiveAudio=!!e.offerToReceiveAudio);const t=this.getTransceivers().find((e=>"audio"===e.receiver.track.kind));!1===e.offerToReceiveAudio&&t?"sendrecv"===t.direction?t.setDirection?t.setDirection("sendonly"):t.direction="sendonly":"recvonly"===t.direction&&(t.setDirection?t.setDirection("inactive"):t.direction="inactive"):!0!==e.offerToReceiveAudio||t||this.addTransceiver("audio"),void 0!==e.offerToReceiveVideo&&(e.offerToReceiveVideo=!!e.offerToReceiveVideo);const r=this.getTransceivers().find((e=>"video"===e.receiver.track.kind));!1===e.offerToReceiveVideo&&r?"sendrecv"===r.direction?r.setDirection?r.setDirection("sendonly"):r.direction="sendonly":"recvonly"===r.direction&&(r.setDirection?r.setDirection("inactive"):r.direction="inactive"):!0!==e.offerToReceiveVideo||r||this.addTransceiver("video")}return t.apply(this,arguments)}}function hw(e){"object"!=typeof e||e.AudioContext||(e.AudioContext=e.webkitAudioContext)}var fw=Object.freeze({__proto__:null,shimLocalStreamsAPI:nw,shimRemoteStreamsAPI:ow,shimCallbacksAPI:sw,shimGetUserMedia:aw,shimConstraints:cw,shimRTCIceServerUrls:uw,shimTrackEventTransceiver:dw,shimCreateOfferLegacy:lw,shimAudioContext:hw}),pw={exports:{}};!function(e){const t={generateIdentifier:function(){return Math.random().toString(36).substring(2,12)}};t.localCName=t.generateIdentifier(),t.splitLines=function(e){return e.trim().split("\n").map((e=>e.trim()))},t.splitSections=function(e){return e.split("\nm=").map(((e,t)=>(t>0?"m="+e:e).trim()+"\r\n"))},t.getDescription=function(e){const r=t.splitSections(e);return r&&r[0]},t.getMediaSections=function(e){const r=t.splitSections(e);return r.shift(),r},t.matchPrefix=function(e,r){return t.splitLines(e).filter((e=>0===e.indexOf(r)))},t.parseCandidate=function(e){let t;t=0===e.indexOf("a=candidate:")?e.substring(12).split(" "):e.substring(10).split(" ");const r={foundation:t[0],component:{1:"rtp",2:"rtcp"}[t[1]]||t[1],protocol:t[2].toLowerCase(),priority:parseInt(t[3],10),ip:t[4],address:t[4],port:parseInt(t[5],10),type:t[7]};for(let i=8;i0?t[0].split("/")[1]:"sendrecv",uri:t[1],attributes:t.slice(2).join(" ")}},t.writeExtmap=function(e){return"a=extmap:"+(e.id||e.preferredId)+(e.direction&&"sendrecv"!==e.direction?"/"+e.direction:"")+" "+e.uri+(e.attributes?" "+e.attributes:"")+"\r\n"},t.parseFmtp=function(e){const t={};let r;const i=e.substring(e.indexOf(" ")+1).split(";");for(let n=0;n{void 0!==e.parameters[t]?i.push(t+"="+e.parameters[t]):i.push(t)})),t+="a=fmtp:"+r+" "+i.join(";")+"\r\n"}return t},t.parseRtcpFb=function(e){const t=e.substring(e.indexOf(" ")+1).split(" ");return{type:t.shift(),parameter:t.join(" ")}},t.writeRtcpFb=function(e){let t="",r=e.payloadType;return void 0!==e.preferredPayloadType&&(r=e.preferredPayloadType),e.rtcpFeedback&&e.rtcpFeedback.length&&e.rtcpFeedback.forEach((e=>{t+="a=rtcp-fb:"+r+" "+e.type+(e.parameter&&e.parameter.length?" "+e.parameter:"")+"\r\n"})),t},t.parseSsrcMedia=function(e){const t=e.indexOf(" "),r={ssrc:parseInt(e.substring(7,t),10)},i=e.indexOf(":",t);return i>-1?(r.attribute=e.substring(t+1,i),r.value=e.substring(i+1)):r.attribute=e.substring(t+1),r},t.parseSsrcGroup=function(e){const t=e.substring(13).split(" ");return{semantics:t.shift(),ssrcs:t.map((e=>parseInt(e,10)))}},t.getMid=function(e){const r=t.matchPrefix(e,"a=mid:")[0];if(r)return r.substring(6)},t.parseFingerprint=function(e){const t=e.substring(14).split(" ");return{algorithm:t[0].toLowerCase(),value:t[1].toUpperCase()}},t.getDtlsParameters=function(e,r){return{role:"auto",fingerprints:t.matchPrefix(e+r,"a=fingerprint:").map(t.parseFingerprint)}},t.writeDtlsParameters=function(e,t){let r="a=setup:"+t+"\r\n";return e.fingerprints.forEach((e=>{r+="a=fingerprint:"+e.algorithm+" "+e.value+"\r\n"})),r},t.parseCryptoLine=function(e){const t=e.substring(9).split(" ");return{tag:parseInt(t[0],10),cryptoSuite:t[1],keyParams:t[2],sessionParams:t.slice(3)}},t.writeCryptoLine=function(e){return"a=crypto:"+e.tag+" "+e.cryptoSuite+" "+("object"==typeof e.keyParams?t.writeCryptoKeyParams(e.keyParams):e.keyParams)+(e.sessionParams?" "+e.sessionParams.join(" "):"")+"\r\n"},t.parseCryptoKeyParams=function(e){if(0!==e.indexOf("inline:"))return null;const t=e.substring(7).split("|");return{keyMethod:"inline",keySalt:t[0],lifeTime:t[1],mkiValue:t[2]?t[2].split(":")[0]:void 0,mkiLength:t[2]?t[2].split(":")[1]:void 0}},t.writeCryptoKeyParams=function(e){return e.keyMethod+":"+e.keySalt+(e.lifeTime?"|"+e.lifeTime:"")+(e.mkiValue&&e.mkiLength?"|"+e.mkiValue+":"+e.mkiLength:"")},t.getCryptoParameters=function(e,r){return t.matchPrefix(e+r,"a=crypto:").map(t.parseCryptoLine)},t.getIceParameters=function(e,r){const i=t.matchPrefix(e+r,"a=ice-ufrag:")[0],n=t.matchPrefix(e+r,"a=ice-pwd:")[0];return i&&n?{usernameFragment:i.substring(12),password:n.substring(10)}:null},t.writeIceParameters=function(e){let t="a=ice-ufrag:"+e.usernameFragment+"\r\na=ice-pwd:"+e.password+"\r\n";return e.iceLite&&(t+="a=ice-lite\r\n"),t},t.parseRtpParameters=function(e){const r={codecs:[],headerExtensions:[],fecMechanisms:[],rtcp:[]},i=t.splitLines(e)[0].split(" ");r.profile=i[2];for(let o=3;o{r.headerExtensions.push(t.parseExtmap(e))}));const n=t.matchPrefix(e,"a=rtcp-fb:* ").map(t.parseRtcpFb);return r.codecs.forEach((e=>{n.forEach((t=>{e.rtcpFeedback.find((e=>e.type===t.type&&e.parameter===t.parameter))||e.rtcpFeedback.push(t)}))})),r},t.writeRtpDescription=function(e,r){let i="";i+="m="+e+" ",i+=r.codecs.length>0?"9":"0",i+=" "+(r.profile||"UDP/TLS/RTP/SAVPF")+" ",i+=r.codecs.map((e=>void 0!==e.preferredPayloadType?e.preferredPayloadType:e.payloadType)).join(" ")+"\r\n",i+="c=IN IP4 0.0.0.0\r\n",i+="a=rtcp:9 IN IP4 0.0.0.0\r\n",r.codecs.forEach((e=>{i+=t.writeRtpMap(e),i+=t.writeFmtp(e),i+=t.writeRtcpFb(e)}));let n=0;return r.codecs.forEach((e=>{e.maxptime>n&&(n=e.maxptime)})),n>0&&(i+="a=maxptime:"+n+"\r\n"),r.headerExtensions&&r.headerExtensions.forEach((e=>{i+=t.writeExtmap(e)})),i},t.parseRtpEncodingParameters=function(e){const r=[],i=t.parseRtpParameters(e),n=-1!==i.fecMechanisms.indexOf("RED"),o=-1!==i.fecMechanisms.indexOf("ULPFEC"),s=t.matchPrefix(e,"a=ssrc:").map((e=>t.parseSsrcMedia(e))).filter((e=>"cname"===e.attribute)),a=s.length>0&&s[0].ssrc;let c;const u=t.matchPrefix(e,"a=ssrc-group:FID").map((e=>e.substring(17).split(" ").map((e=>parseInt(e,10)))));u.length>0&&u[0].length>1&&u[0][0]===a&&(c=u[0][1]),i.codecs.forEach((e=>{if("RTX"===e.name.toUpperCase()&&e.parameters.apt){let t={ssrc:a,codecPayloadType:parseInt(e.parameters.apt,10)};a&&c&&(t.rtx={ssrc:c}),r.push(t),n&&(t=JSON.parse(JSON.stringify(t)),t.fec={ssrc:a,mechanism:o?"red+ulpfec":"red"},r.push(t))}})),0===r.length&&a&&r.push({ssrc:a});let d=t.matchPrefix(e,"b=");return d.length&&(d=0===d[0].indexOf("b=TIAS:")?parseInt(d[0].substring(7),10):0===d[0].indexOf("b=AS:")?1e3*parseInt(d[0].substring(5),10)*.95-16e3:void 0,r.forEach((e=>{e.maxBitrate=d}))),r},t.parseRtcpParameters=function(e){const r={},i=t.matchPrefix(e,"a=ssrc:").map((e=>t.parseSsrcMedia(e))).filter((e=>"cname"===e.attribute))[0];i&&(r.cname=i.value,r.ssrc=i.ssrc);const n=t.matchPrefix(e,"a=rtcp-rsize");r.reducedSize=n.length>0,r.compound=0===n.length;const o=t.matchPrefix(e,"a=rtcp-mux");return r.mux=o.length>0,r},t.writeRtcpParameters=function(e){let t="";return e.reducedSize&&(t+="a=rtcp-rsize\r\n"),e.mux&&(t+="a=rtcp-mux\r\n"),void 0!==e.ssrc&&e.cname&&(t+="a=ssrc:"+e.ssrc+" cname:"+e.cname+"\r\n"),t},t.parseMsid=function(e){let r;const i=t.matchPrefix(e,"a=msid:");if(1===i.length)return r=i[0].substring(7).split(" "),{stream:r[0],track:r[1]};const n=t.matchPrefix(e,"a=ssrc:").map((e=>t.parseSsrcMedia(e))).filter((e=>"msid"===e.attribute));return n.length>0?(r=n[0].value.split(" "),{stream:r[0],track:r[1]}):void 0},t.parseSctpDescription=function(e){const r=t.parseMLine(e),i=t.matchPrefix(e,"a=max-message-size:");let n;i.length>0&&(n=parseInt(i[0].substring(19),10)),isNaN(n)&&(n=65536);const o=t.matchPrefix(e,"a=sctp-port:");if(o.length>0)return{port:parseInt(o[0].substring(12),10),protocol:r.fmt,maxMessageSize:n};const s=t.matchPrefix(e,"a=sctpmap:");if(s.length>0){const e=s[0].substring(10).split(" ");return{port:parseInt(e[0],10),protocol:e[1],maxMessageSize:n}}},t.writeSctpDescription=function(e,t){let r=[];return r="DTLS/SCTP"!==e.protocol?["m="+e.kind+" 9 "+e.protocol+" "+t.protocol+"\r\n","c=IN IP4 0.0.0.0\r\n","a=sctp-port:"+t.port+"\r\n"]:["m="+e.kind+" 9 "+e.protocol+" "+t.port+"\r\n","c=IN IP4 0.0.0.0\r\n","a=sctpmap:"+t.port+" "+t.protocol+" 65535\r\n"],void 0!==t.maxMessageSize&&r.push("a=max-message-size:"+t.maxMessageSize+"\r\n"),r.join("")},t.generateSessionId=function(){return Math.random().toString().substr(2,22)},t.writeSessionBoilerplate=function(e,r,i){let n;const o=void 0!==r?r:2;n=e||t.generateSessionId();return"v=0\r\no="+(i||"thisisadapterortc")+" "+n+" "+o+" IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\n"},t.getDirection=function(e,r){const i=t.splitLines(e);for(let t=0;t(t.candidate&&Object.defineProperty(t,"candidate",{value:new e.RTCIceCandidate(t.candidate),writable:"false"}),t)))}function Sw(e,t){if(!e.RTCPeerConnection)return;"sctp"in e.RTCPeerConnection.prototype||Object.defineProperty(e.RTCPeerConnection.prototype,"sctp",{get(){return void 0===this._sctp?null:this._sctp}});const r=e.RTCPeerConnection.prototype.setRemoteDescription;e.RTCPeerConnection.prototype.setRemoteDescription=function(){if(this._sctp=null,"chrome"===t.browser&&t.version>=76){const{sdpSemantics:e}=this.getConfiguration();"plan-b"===e&&Object.defineProperty(this,"sctp",{get(){return void 0===this._sctp?null:this._sctp},enumerable:!0,configurable:!0})}if(function(e){if(!e||!e.sdp)return!1;const t=mw.splitSections(e.sdp);return t.shift(),t.some((e=>{const t=mw.parseMLine(e);return t&&"application"===t.kind&&-1!==t.protocol.indexOf("SCTP")}))}(arguments[0])){const e=function(e){const t=e.sdp.match(/mozilla...THIS_IS_SDPARTA-(\d+)/);if(null===t||t.length<2)return-1;const r=parseInt(t[1],10);return r!=r?-1:r}(arguments[0]),r=function(e){let r=65536;return"firefox"===t.browser&&(r=t.version<57?-1===e?16384:2147483637:t.version<60?57===t.version?65535:65536:2147483637),r}(e),i=function(e,r){let i=65536;"firefox"===t.browser&&57===t.version&&(i=65535);const n=mw.matchPrefix(e.sdp,"a=max-message-size:");return n.length>0?i=parseInt(n[0].substr(19),10):"firefox"===t.browser&&-1!==r&&(i=2147483637),i}(arguments[0],e);let n;n=0===r&&0===i?Number.POSITIVE_INFINITY:0===r||0===i?Math.max(r,i):Math.min(r,i);const o={};Object.defineProperty(o,"maxMessageSize",{get:()=>n}),this._sctp=o}return r.apply(this,arguments)}}function vw(e){if(!e.RTCPeerConnection||!("createDataChannel"in e.RTCPeerConnection.prototype))return;function t(e,t){const r=e.send;e.send=function(){const i=arguments[0],n=i.length||i.size||i.byteLength;if("open"===e.readyState&&t.sctp&&n>t.sctp.maxMessageSize)throw new TypeError("Message too large (can send a maximum of "+t.sctp.maxMessageSize+" bytes)");return r.apply(e,arguments)}}const r=e.RTCPeerConnection.prototype.createDataChannel;e.RTCPeerConnection.prototype.createDataChannel=function(){const e=r.apply(this,arguments);return t(e,this),e},bA(e,"datachannel",(e=>(t(e.channel,e.target),e)))}function yw(e){if(!e.RTCPeerConnection||"connectionState"in e.RTCPeerConnection.prototype)return;const t=e.RTCPeerConnection.prototype;Object.defineProperty(t,"connectionState",{get(){return{completed:"connected",checking:"connecting"}[this.iceConnectionState]||this.iceConnectionState},enumerable:!0,configurable:!0}),Object.defineProperty(t,"onconnectionstatechange",{get(){return this._onconnectionstatechange||null},set(e){this._onconnectionstatechange&&(this.removeEventListener("connectionstatechange",this._onconnectionstatechange),delete this._onconnectionstatechange),e&&this.addEventListener("connectionstatechange",this._onconnectionstatechange=e)},enumerable:!0,configurable:!0}),["setLocalDescription","setRemoteDescription"].forEach((e=>{const r=t[e];t[e]=function(){return this._connectionstatechangepoly||(this._connectionstatechangepoly=e=>{const t=e.target;if(t._lastConnectionState!==t.connectionState){t._lastConnectionState=t.connectionState;const r=new Event("connectionstatechange",e);t.dispatchEvent(r)}return e},this.addEventListener("iceconnectionstatechange",this._connectionstatechangepoly)),r.apply(this,arguments)}}))}function Iw(e,t){if(!e.RTCPeerConnection)return;if("chrome"===t.browser&&t.version>=71)return;if("safari"===t.browser&&t.version>=605)return;const r=e.RTCPeerConnection.prototype.setRemoteDescription;e.RTCPeerConnection.prototype.setRemoteDescription=function(t){if(t&&t.sdp&&-1!==t.sdp.indexOf("\na=extmap-allow-mixed")){const r=t.sdp.split("\n").filter((e=>"a=extmap-allow-mixed"!==e.trim())).join("\n");e.RTCSessionDescription&&t instanceof e.RTCSessionDescription?arguments[0]=new e.RTCSessionDescription({type:t.type,sdp:r}):t.sdp=r}return r.apply(this,arguments)}}function Tw(e,t){if(!e.RTCPeerConnection||!e.RTCPeerConnection.prototype)return;const r=e.RTCPeerConnection.prototype.addIceCandidate;r&&0!==r.length&&(e.RTCPeerConnection.prototype.addIceCandidate=function(){return arguments[0]?("chrome"===t.browser&&t.version<78||"firefox"===t.browser&&t.version<68||"safari"===t.browser)&&arguments[0]&&""===arguments[0].candidate?Promise.resolve():r.apply(this,arguments):(arguments[1]&&arguments[1].apply(null),Promise.resolve())})}function Rw(e,t){if(!e.RTCPeerConnection||!e.RTCPeerConnection.prototype)return;const r=e.RTCPeerConnection.prototype.setLocalDescription;r&&0!==r.length&&(e.RTCPeerConnection.prototype.setLocalDescription=function(){let e=arguments[0]||{};if("object"!=typeof e||e.type&&e.sdp)return r.apply(this,arguments);if(e={type:e.type,sdp:e.sdp},!e.type)switch(this.signalingState){case"stable":case"have-local-offer":case"have-remote-pranswer":e.type="offer";break;default:e.type="answer"}if(e.sdp||"offer"!==e.type&&"answer"!==e.type)return r.apply(this,[e]);return("offer"===e.type?this.createOffer:this.createAnswer).apply(this).then((e=>r.apply(this,[e])))})}var Ew=Object.freeze({__proto__:null,shimRTCIceCandidate:_w,shimMaxMessageSize:Sw,shimSendThrowTypeError:vw,shimConnectionState:yw,removeExtmapAllowMixed:Iw,shimAddIceCandidateNullOrEmpty:Tw,shimParameterlessSetLocalDescription:Rw});const bw=function({window:e}={},t={shimChrome:!0,shimFirefox:!0,shimSafari:!0}){const r=wA,i=function(e){const t={browser:null,version:null};if(void 0===e||!e.navigator)return t.browser="Not a browser.",t;const{navigator:r}=e;if(r.mozGetUserMedia)t.browser="firefox",t.version=EA(r.userAgent,/Firefox\/(\d+)\./,1);else if(r.webkitGetUserMedia||!1===e.isSecureContext&&e.webkitRTCPeerConnection&&!e.RTCIceGatherer)t.browser="chrome",t.version=EA(r.userAgent,/Chrom(e|ium)\/(\d+)\./,2);else{if(!e.RTCPeerConnection||!r.userAgent.match(/AppleWebKit\/(\d+)\./))return t.browser="Not a supported browser.",t;t.browser="safari",t.version=EA(r.userAgent,/AppleWebKit\/(\d+)\./,1),t.supportsUnifiedPlan=e.RTCRtpTransceiver&&"currentDirection"in e.RTCRtpTransceiver.prototype}return t}(e),n={browserDetails:i,commonShim:Ew,extractVersion:EA,disableLog:CA,disableWarnings:AA,sdp:gw};switch(i.browser){case"chrome":if(!zA||!HA||!t.shimChrome)return r("Chrome shim is not included in this adapter release."),n;if(null===i.version)return r("Chrome shim can not determine version, not shimming."),n;r("adapter.js shimming chrome."),n.browserShim=zA,Tw(e,i),Rw(e),UA(e,i),xA(e),HA(e,i),LA(e),FA(e,i),BA(e),VA(e),YA(e),KA(e,i),_w(e),yw(e),Sw(e,i),vw(e),Iw(e,i);break;case"firefox":if(!iw||!JA||!t.shimFirefox)return r("Firefox shim is not included in this adapter release."),n;r("adapter.js shimming firefox."),n.browserShim=iw,Tw(e,i),Rw(e),WA(e,i),JA(e,i),GA(e),QA(e),qA(e),XA(e),$A(e),ZA(e),ew(e),tw(e),rw(e),_w(e),yw(e),Sw(e,i),vw(e);break;case"safari":if(!fw||!t.shimSafari)return r("Safari shim is not included in this adapter release."),n;r("adapter.js shimming safari."),n.browserShim=fw,Tw(e,i),Rw(e),uw(e),lw(e),sw(e),nw(e),ow(e),dw(e),aw(e),hw(e),_w(e),Sw(e,i),vw(e),Iw(e,i);break;default:r("Unsupported browser!")}return n}({window:"undefined"==typeof window?void 0:window});window.AudioContext=window.AudioContext||window.webkitAudioContext,window.RTCPeerConnection=window.RTCPeerConnection||window.webkitRTCPeerConnection||window.mozRTCPeerConnection;class Cw{static async checkSystemRequirements(){let e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];if(!window||!navigator)throw new qc(Gc.RTC_ERR_CODE_WEBRTC_UNSUPPORTED,"window or navigator error");if("chrome"===bw.browserDetails.browser&&Cw.getBrowserVersion()<67)throw new qc(Gc.RTC_ERR_CODE_WEBRTC_UNSUPPORTED,"browser not support: ".concat(navigator.userAgent));if(!("WebSocket"in window))throw new qc(Gc.RTC_ERR_CODE_WEBRTC_UNSUPPORTED,"WebSocket error");if(!window.RTCPeerConnection)throw new qc(Gc.RTC_ERR_CODE_WEBRTC_UNSUPPORTED,"RTCPeerConnection Object not exist");let t=null;try{let e=new RTCPeerConnection;t=await e.createOffer({offerToReceiveAudio:!1,offerToReceiveVideo:!0}),Cw.isChrome()&&!/H264/i.test(t.sdp)&&(e.close(),e=new RTCPeerConnection,t=await e.createOffer({offerToReceiveAudio:!1,offerToReceiveVideo:!0})),e.close()}catch(jN){throw new qc(Gc.RTC_ERR_CODE_WEBRTC_UNSUPPORTED,"RTCPeerConnection construct error: ".concat(jN.message))}if(t&&!/H264/i.test(t.sdp))throw new qc(Gc.RTC_ERR_CODE_WEBRTC_UNSUPPORTED,"RTCPeerConnection unsupport AVC codec.");if(!("mediaDevices"in navigator))throw new qc(Gc.RTC_ERR_CODE_MEDIA_UPSTREAM_UNSUPPORTED,"navigator.mediaDevices is not supported");return!XR.isMobileWeChatBrowser()||!e||await Cw.checkwWeChatSupported()}static async checkwWeChatSupported(){let e=[".*(iphone|ipad).*OS\\s1[4-9]_.*MicroMessenger.*",".*huawei.*(TBS|XWEB).*MicroMessenger.*",".*honor.*(TBS|XWEB).*MicroMessenger.*"];if(localStorage){const r=JSON.parse(localStorage.getItem("supportDeviceWhiteList")||"{}");var t;if(XR.getCurrentTimestamp()-parseInt(r.expire||"0")<=3e4)e=r.rules;else null===(t=localStorage)||void 0===t||t.removeItem("supportDeviceWhiteList")}if(Cw.checkSupportByRegexRules(e))return!0;const r={rules:[".*(iphone|ipad).*MicroMessenger.*",".*huawei.*(TBS|XWEB).*MicroMessenger.*",".*honor.*(TBS|XWEB).*MicroMessenger.*",".*Linux; Android.*; V.*(TBS|XWEB).*MicroMessenger.*",".*Linux; Android.*; (C?P|OPPO).*(TBS|XWEB).*MicroMessenger.*",".*Linux; Android.*; (Redmi|MI).*(TBS|XWEB).*MicroMessenger.*",".*Linux; Android.*; SM-.*(TBS|XWEB).*MicroMessenger.*",".*Linux; Android.*; M2.*(TBS|XWEB).*MicroMessenger.*",".*Linux; Android.*; RMX.*(TBS|XWEB).*MicroMessenger.*"]};if(r){var i;const e=r;if(e.expire=XR.getCurrentTimestamp(),null===(i=localStorage)||void 0===i||i.setItem("supportDeviceWhiteList",JSON.stringify(e)),Cw.checkSupportByRegexRules(e.rules)&&this.checkIOSVersion())return!0}else{var n;null===(n=localStorage)||void 0===n||n.removeItem("supportDeviceWhiteList")}throw new Error("browser not support")}static checkIOSVersion(){const e=navigator.userAgent;if(/(iPhone|iPad|iPod|iOS)/i.test(e)){const t=e.match(/OS (\d+)_(\d+)_?(\d+)?/);if(t&&parseFloat(t[1]+"."+t[2])<14.3)throw new Error("browser not support,iOS system is earlier than or equal to 14.3")}return!0}static checkSupportByRegexRules(e){const t=navigator.userAgent;let r=!1;for(const i of e){if(new RegExp(i,"ig").test(t)){r=!0;break}}return r}static isRTCScreenShareSupported(){return"mediaDevices"in navigator&&"getDisplayMedia"in navigator.mediaDevices}static isChrome(){return"chrome"===bw.browserDetails.browser}static isFirefox(){return"firefox"===bw.browserDetails.browser}static getBrowserVersion(){if("safari"===bw.browserDetails.browser){const e=/.*Version\/(\d+).*/gi.exec(navigator.userAgent);if(e&&2===e.length)return parseInt(e[1])}return"chrome"===bw.browserDetails.browser?bw.browserDetails.version||91:bw.browserDetails.version}static isOnlySupportUnfiedPlan(){let e=!0;if("chrome"===bw.browserDetails.browser){e=Cw.getBrowserVersion()>90}else"safari"===bw.browserDetails.browser&&(e=bw.browserDetails.supportsUnifiedPlan);return e}static getBrowserInfo(){return"".concat(bw.browserDetails.browser.toLowerCase(),"-").concat(Cw.getBrowserVersion())}}var Aw=function(e){return function(t){return function(e){return Object.prototype.toString.call(e).slice(8,-1).toLowerCase()}(t)===e}},ww=Aw("function"),kw=Aw("object"),Ow=Aw("array"),Pw=Aw("string"),Mw=Aw("number"),Dw=Aw("boolean"),Nw=Aw("undefined"),Uw=Aw("null");function xw(e){return xw="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},xw(e)}function Lw(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Bw(e,t){for(var r=0;re.length)&&(t=e.length);for(var r=0,i=new Array(t);r=0&&i.length===Math.floor(i.length)&&i.length3&&void 0!==arguments[3]&&arguments[3];e.addEventListener?e.addEventListener(t,r,i):e.attachEvent("on".concat(t),r)}var Mk=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],r=Gw(e.split("?"),2),i=r[0],n=r[1];if(!n)return e;var o=n.split("&").filter((function(e){return!ak(t,e.split("=")[0].toLocaleLowerCase())}));return o.length?"".concat(i,"?").concat(o.join("&")):i},Dk=function(e){var t={};e.includes("#")&&(e=e.split("#")[0]);var r=e.split("?")[1];if(!r)return t;for(var i=r.split("&"),n=0;n0&&void 0!==arguments[0]&&arguments[0];Lw(this,e),this.isH5=r,this.waitTime=0,this.waitTimeFlagTime=0,this.waitTimeFlag=!0,this.accessTime=Ik(),this.config={defaultCookie:{},useCookie:!0,isInit:!1,usedPageUrl:!0,intervalTime:18e5,batchSend:!1},this.globals={idsite:"",title:xk.title,id:"unknown",rid:"unknown",idts:Ik(),idvc:0,idn:"",di:{sessionId:"unknown"},refts:Ik(),viewts:Ik(),CXX:"",uid:"",cvar:""},this.customData={},ck(Nk,(function(e,r){t[r]=e})),Pk(Lk,"beforeunload",this.beforeUnloadHandler.bind(this)),Pk(xk,"visibilitychange",this.stateChanged.bind(this)),this.updateSessionId()}return Vw(e,[{key:"updateSessionId",value:function(){var e=Ek("sessionId");e&&e.sessionId&&(this.globals.di.sessionId=e.sessionId)}},{key:"beforeUnloadHandler",value:function(){this.config.isInit&&this.config.useCookie&&kk(this.getStoreName(nk),Ik(),31536e6,"/"),this.stateChanged()}},{key:"getStoreName",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:ek,r=arguments.length>2?arguments[2]:void 0;return e&&this.globals.idsite?"".concat(t).concat(e,"_").concat(this.globals.idsite,"_").concat((r||location.host).replace(/\./g,"_")):""}},{key:"handleSessionId",value:function(){var e=this.getStoreName("idn"),t=wk(e);t||(t=lk()),this.globals.idn=t,this.config.useCookie&&kk(e,t,this.config.intervalTime,"/")}},{key:"stateChanged",value:function(){"visible"===xk.visibilityState&&this.updateSessionId(),"hidden"===xk.visibilityState&&this.config.batchSend&&this.batchSendNow(),this.waitTimeFlag?this.waitTime+=Ik()-(this.waitTimeFlagTime||this.accessTime):this.waitTimeFlagTime=Ik(),this.waitTimeFlag=!this.waitTimeFlag}},{key:"getData",value:function(e,t,r){var i=Lk.navigator.userAgent,n=this.globals,o=n.id,s=n.rid,a=n.di,c=n.CXX,u=n.idsite,d=n.uid,l=n.cvar,h=n.idts,f=n.idvc,p=n.idn,m=n.refts,g=n.viewts;return{type:e,vf:o,rid:s,nsid:a.sessionId,rt:t.eventTime,ut:i.match(/AppleWebKit.*Mobile.*/)?-1!==dk(i," wv")?2:1:0,cxx:c,idsite:u,suid:d,cvar:t.cvar||l,idts:h,idvc:f,idn:p,refts:m,viewts:g,hsv:hk,data:r}}},{key:"getFinalSendData",value:function(e){var t=new Date,r=this.globals,i=r.title,n=r.id,o=r.idsite,s=r.cvar,a=r.idts,c=r.idvc,u=r.idn,d=r.refts,l=r.viewts,h=r.rid,f=r.di,p=this.config.usedPageUrl,m={idsite:encodeURIComponent(o),rec:"1",r:"886244",h:t.getHours(),m:t.getMinutes(),s:t.getSeconds(),url:encodeURIComponent(this.deleteUrlQuery(p?Lk.location.href:"/",fk)),_id:encodeURIComponent(n),_rid:encodeURIComponent(h),_nsid:encodeURIComponent(f.sessionId),_idts:a,_idvc:c,_idn:u,urlref:this.deleteUrlQuery(xk.referrer,fk),_refts:d,_viewts:l,scd:"24",vpr:"".concat(Lk.screen.width," X ").concat(Lk.screen.height),cvar:kw(e.cvar||s)?encodeURIComponent(JSON.stringify(e.cvar||s)):encodeURIComponent(e.cvar||s),pdf:"1",qt:"0",data:this.isH5?JSON.stringify(e):encodeURIComponent(JSON.stringify(e))};return e.type===Zw||e.type===$w?uk({link:encodeURIComponent(i)},m):uk({action_name:encodeURIComponent(i)},m)}},{key:"initCookie",value:function(e){this.config.isInit=!0;var t=this.config,r=t.useCookie,i=t.defaultCookie.domain;if(r){if(i){var n=this.getStoreName(rk,ek),o=this.getStoreName(ik,ek);Ok(n),Ok(o)}var s=this.getStoreName(rk,ek,i),a=this.getStoreName(ik,ek,i),c=wk(s),u=wk(a);e&&e(s,c,a,u,i),c||(Ck.isSupport()&&Ck.get(s)?(c=Ck.get(s),u=Ck.get(a)||Ik()):(c=lk(),u=Ik()),kk(s,c,31536e6,"/",i),kk(a,u,31536e6,"/",i)),this.globals.id=c,this.globals.idts=u||Ik();var d=this.getStoreName("refts"),l=wk(d);l||xk.referrer&&(l=Ik(),kk(d,l,15552e6,"/")),this.globals.refts=l||Ik();var h=this.getStoreName(nk),f=wk(h);this.globals.viewts=f||Ik();var p=this.getStoreName("idvc"),m=wk(p);m=m?Number(m)+1:Ck.isSupport()&&Ck.get(p)?Number(Ck.get(p))+1:1,kk(p,m,31536e6,"/"),this.globals.idvc=m,Ck.isSupport()&&!Ck.get(s)&&(Ck.set(s,c),Ck.set(a,u),Ck.set(p,m))}else this.globals.id="unknown",this.globals.idts=Ik(),this.globals.refts=Ik(),this.globals.viewts=Ik(),this.globals.idvc=0;this.handleSessionId()}},{key:"setIdsite",value:function(e){return Pw(e)?new RegExp("^[a-zA-Z0-9_./][A-Za-z0-9_./]*$").test(e)?(this.globals.idsite=e,this.initCookie(),this):(console.error("idsite is invalid."),this):(console.error("idsite type should be string."),this)}},{key:"setAutoTrack",value:function(e,t,r){var i=this;if(!kw(e))return this;var n=function(t,r){var n=new t(i);n.init(e),r&&r(n)};if(t)n(t,r);else if(Lk.HAAutoTracker)n(Lk.HAAutoTracker,r);else{var o=Ik();!function(e,t){var r=Uk.createElement("script");r.type="text/javascript",r.readyState?r.onreadystatechange=function(){"loaded"!==r.readyState&&"complete"!==r.readyState||(r.onreadystatechange=null,t())}:r.onload=t,r.src=e,Uk.getElementsByTagName("head")[0].appendChild(r)}(e.autotracker_url||pk,(function(){var e=Ik();Tk("[load+excute] HAWebSDK autotracker module use ".concat(e-o," ms.")),n(Lk.HAAutoTracker,r)}))}return this}}]),e}(),Vk=function(){function e(t,r,i){Lw(this,e),this.core=t,this.dataType=r,this.serverUrl=i,this.state=0,this.keys=[],this.queue=[],this.intervalID=null}return Vw(e,[{key:"isH5",value:function(){return!0===this.core.isH5||void 0!==Rk().haGetDeviceInfo}},{key:"init",value:function(){var e=this;this.core.config.batchSend?(ck(["batchSend"],(function(t){var r=e[t];e[t]=function(){0===this.state?r.apply(this,arguments):this.queue.push([t,arguments])}})),!this.intervalID&&this.core.config.batchSend.interval&&(this.intervalID=setInterval((function(){e.batchSend()}),this.core.config.batchSend.interval))):this.intervalID&&clearInterval(this.intervalID)}},{key:"batchSend",value:function(){var e=this,t=this.getEventsToSendFromStorage();0!==t.length&&(this.state=1,this.onReport(this.core.getFinalSendData(t),(function(t){e.state=0,200===t.status?(e.core.config.batchSend.retryTimes=10,ck(e.keys,(function(e){Ck.remove(e)})),e.keys=[],e.batchSend(),e.queue.length>0&&(e[e.queue[0][0]].apply(e,e.queue[0][1]),e.queue=e.queue.splice(0,1))):e.core.config.batchSend.retryTimes<=1?e.intervalID&&clearInterval(e.intervalID):e.core.config.batchSend.retryTimes--}),!0))}},{key:"onceSend",value:function(e,t){this.onReport(this.core.getFinalSendData(e),t,!1)}},{key:"addToStorage",value:function(e,t){try{var r=JSON.stringify(e);if(Rk().haEncrypt){var i=Ik();r=Rk().haEncrypt(r);var n=Ik();Tk("data encrypt use ".concat(n-i," ms. encrypted data: ").concat(r))}Ck.set(this.core.getStoreName(lk(),tk),r)}catch(r){r.message===ok&&(this.onceSend(e,t),this.batchSend())}}},{key:"getEventsToSendFromStorage",value:function(){var e=[],t=0;if(this.isH5())for(var r=0;r0&&void 0!==arguments[0]&&arguments[0];return Lw(this,r),(e=t.call(this,i)).config.linker={},e.config.serverUrl="",e.config.requestMode="",e.config.isImg=!1,e.config.debugMode=!1,e.config.customUrlParams={},e.config.defaultHeaders={"Content-type":"application/x-www-form-urlencoded;charset=UTF-8"},e.defaultSender=new Vk(Kw(e)),e.reportMap={},Pk(Yk,"click",e.hrefIntercept.bind(Kw(e)),!0),e}return Vw(r,[{key:"urlAddLinker",value:function(e,t){if(!e)return e;var r=e.split("#"),i=r[0],n=r[1]?"#".concat(r[1]):"",o=i.replace(/(https|http):\/\/([^/?]+)(.*)/,"$2"),s=!1;if(this.config.linker.exclude&&(s=this.config.linker.exclude.includes(o)),this.config.linker.domains&&!s&&this.config.linker.domains.filter((function(e){return new RegExp("".concat(e,"$"),"i").test(o)})).length){t&&t.preventDefault();var a=this.getStoreName(rk,ek,this.config.defaultCookie.domain),c={ts:Ik(),id:wk(a)};this.config.linker.ext&&(c.ext=this.config.linker.ext),i=dk(i,"?")>-1?"".concat(i,"&ha_linker=").concat(jk.btoa(JSON.stringify(c))).concat(n):"".concat(i,"?ha_linker=").concat(jk.btoa(JSON.stringify(c))).concat(n)}return i}},{key:"hrefIntercept",value:function(e){var t=e.target||e.srcElement;if("a"!==mk(t)){var r=yk(t);if(!r)return;t=r}var i=t.getAttribute("href");i&&(i=this.urlAddLinker(i,e),dk(i,"ha_linker")>-1&&jk.open(i,t.getAttribute("target")||"_self"))}},{key:"initCookie",value:function(){var e=this;Ww(Fw(r.prototype),"initCookie",this).call(this,(function(t,r,i,n,o){var s=Dk(Yk.location.href).ha_linker;if(s)try{var a=JSON.parse(jk.atob(s));!(Ik()-a.ts>(a.ext||1e4))&&a.id&&(r||(r=a.id,kk(t,r,31536e6,"/",o),n=Ik(),kk(i,n,31536e6,"/",o)),e.globals.rid=a.id)}catch(e){console.error("Invalid linker:"+e)}}))}},{key:"getSender",value:function(){var e=this,t=null;return ck(this.reportMap,(function(r){r.url===e.config.serverUrl&&(t=r.sender)})),t||this.defaultSender}},{key:"push",value:function(){for(var e=arguments,t=this,r=function(){var r=e[i],n=r.shift();setTimeout((function(){try{Pw(n)?t[n].apply(t,r):t.apply(t,r)}catch(e){console.error("Invalid method:"+n+", please check!")}}),0)},i=0;i0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0;this.config.serverUrl=e;var r=e;return Nw(t)||(r=t),this.reportMap[r]||(this.reportMap[r]={url:e,sender:new Vk(this,r,e)},this.config.batchSend&&this.reportMap[r].sender.init()),this}},{key:"setTitle",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return this.globals.title=e,this}},{key:"setUserAccount",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return this.globals.id=e,this}},{key:"setCXX",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return this.globals.CXX=e,this}},{key:"setUid",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return this.globals.uid=e,this}},{key:"setPageData",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return this.globals.cvar=e,this}},{key:"setCustomData",value:function(e){return kw(e)||ww(e)?this.customData=e:console.error("The arguments of the setCustomData() method is invalid."),this}},{key:"setHttpHeader",value:function(e){return kw(e)?(uk(this.config.defaultHeaders,e),this):(console.error("custom header type should be object."),this)}},{key:"setIsUseCookie",value:function(e){if(!Dw(e))return console.error("useCookie type should be boolean"),this;if(this.config.useCookie=e,!this.config.useCookie){var t=Yk.cookie.split("; "),r=/^(HW_)(id|idts|idvc|idn|viewts|refts)_/;ck(t,(function(e){var t=e.split("=");r.test(t[0])&&Ok(t[0])})),this.initCookie()}return this}},{key:"setReportMethod",value:function(e){return Dw(e)?(this.config.isImg=e,this):(console.error("isImg type should be boolean."),this)}},{key:"setSessionTimeoutDuration",value:function(e){return Mw(e)?(this.config.intervalTime=e,this):(console.error("intervalTime type should be number."),this)}},{key:"setDebugMode",value:function(e){return Dw(e)?(this.config.debugMode=e,this):(console.error("debugMode type should be boolean"),this)}},{key:"setCustomUrlParams",value:function(e){if(!kw(e))return console.error("customUrlParams type should be object"),this;for(var t in e){if(ak(["x_hasdk_debug","url","_id","_idts","_idvc","h","m","s","_rid"],t))return console.error("customUrlParams can'n include x_hasdk_debug, url, _id, _idts, _idvc, h, m, s, _rid"),this;var r=e[t];if(!r||!Mw(r)&&!Pw(r))return console.error("customUrlParams object value should be number or string"),this;if(!new RegExp("^[a-zA-Z0-9_./][A-Za-z0-9_./]*$").test(t)||!new RegExp("^[a-zA-Z_0-9_./][A-Za-z0-9_./]*$").test(r))return console.error("customUrlParams object include invalid key or value"),this;uk(this.config.customUrlParams,Yw({},t,r))}return this}},{key:"setIstUseUrl",value:function(e){return Dw(e)?(this.config.usedPageUrl=e,this):(console.error("usedPageUrl type should be boolean."),this)}},{key:"setRequestMode",value:function(e){return"ajax"!==e||_k()?"beacon"!==e||vk()?(ak(["beacon","ajax","img"],e)&&(this.config.requestMode=e),this):(console.error("navigator.sendBeacon() is not supported."),this):(console.error("XMLHttpRequest is not supported."),this)}},{key:"setBatchSend",value:function(e){if(!Ck.isSupport())return console.error("localStorage is not supported, so batch send is not supported."),this;if(!_k())return console.error("XMLHttpRequest is not supported, so batch send is not supported."),this;var t={timeout:6e3,interval:6e3,maxLength:6,retryTimes:10};return Dw(e)&&e?this.config.batchSend=t:kw(e)&&(this.config.batchSend=uk(t,e)),ck(this.reportMap,(function(e){e.sender&&e.sender.init()})),this}},{key:"batchSendNow",value:function(){return ck(this.reportMap,(function(e){e.sender&&e.sender.batchSend()})),this}},{key:"setLinker",value:function(e){return kw(e)?Ow(e.domains)?e.exclude&&!Ow(e.exclude)?(console.error("custom exclude type should be Array."),this):(this.config.linker=e,this):(console.error("custom domains type should be Array."),this):(console.error("custom linker type should be object."),this)}},{key:"setUrlLinker",value:function(e){return this.urlAddLinker(e)}},{key:"setCookie",value:function(e){return kw(e)?(this.config.defaultCookie=e,this):(console.error("custom cookie type should be object."),this)}}]),r}(),Hk=document,Kk=window,zk=Hk.documentElement,Wk=Hk.body,Gk=document,Jk=window,qk=function(e){jw(r,Fk);var t=zw(r);function r(){var e;return Lw(this,r),(e=t.call(this)).config.baseinfotypeSwitch1=!1,e.switch1Num=0,e.config.baseinfotypeSwitch2=!1,e.switch2Num=0,e}return Vw(r,[{key:"setBaseinfotypeSwitch",value:function(e){return Dw(e)?(this.config.baseinfotypeSwitch1=e,e&&0===this.switch1Num&&(this.switch1Num++,Pk(Gk,"DOMContentLoaded",this.reportPageEntryEvent.bind(this))),this):(console.error("baseinfotypeSwitch1 type should be boolean."),this)}},{key:"setWindowCloseSwitch",value:function(e){return Dw(e)?(this.config.baseinfotypeSwitch2=e,e&&0===this.switch2Num&&(this.switch2Num++,Pk(Jk,"beforeunload",this.reportPageCloseEvent.bind(this))),this):(console.error("baseinfotypeSwitch2 type should be boolean."),this)}},{key:"sendPageinfo",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return this.waitTime=0,this.waitTimeFlagTime=0,this.waitTimeFlag=!0,this.accessTime=Ik(),this.config.baseinfotypeSwitch1=!0,this.reportPageEntryEvent(e,t),this}},{key:"sendPageClose",value:function(){return this.config.baseinfotypeSwitch2=!0,this.reportPageCloseEvent(),this}},{key:"sendData",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"",n=arguments.length>4?arguments[4]:void 0,o=arguments.length>5&&void 0!==arguments[5]&&arguments[5],s={eventTime:Ik(),eventName:e,eventLabel:t,customData:r,cvar:i};return this.execReport(Qw,s,n,o),this}},{key:"sendClickData",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"",n=arguments.length>4?arguments[4]:void 0,o=arguments.length>5&&void 0!==arguments[5]&&arguments[5],s={eventTime:Ik(),eventName:e,eventLabel:t,customData:r,cvar:i};return this.execReport(Zw,s,n,o),this}},{key:"bindclick",value:function(e,t,r,i,n){var o=this,s=arguments.length>5&&void 0!==arguments[5]&&arguments[5],a=e===Gk?Gk:Gk.getElementById(e);return a?(Pk(a,t,(function(t){var c=t.screenX,u=t.screenY,d=t.clientX,l=t.clientY,h=Kk.innerHeight||zk.clientHeight||Wk.clientHeight||0,f=Kk.innerWidth||zk.clientWidth||Wk.clientWidth||0,p={eventTime:Ik(),elementId:e,cls:a.className,data:r,cvar:i,position:{res:"".concat(c,"X").concat(u),vpr:"".concat(d,"X").concat(l),doc:"".concat(f,"X").concat(h)}};o.execReport($w,p,n,s)})),this):this}},{key:"reportPageEntryEvent",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];this.execReport(Xw,{eventTime:Ik()},e,t)}},{key:"reportPageCloseEvent",value:function(){this.execReport(Xw,{eventTime:Ik()})}},{key:"execReport",value:function(e,t,r){var i=arguments.length>3&&void 0!==arguments[3]&&arguments[3];this.handleSessionId();var n=this.getEventData(e,t),o=this.getSender();this.config.batchSend&&!i?(n.dataType=o.dataType,o.addToStorage(n,r)):o.onceSend(n,r)}},{key:"getEventData",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=t.currentUrl,i=void 0===r?Jk.location.href:r,n={url:Mk(this.config.usedPageUrl?i:"/",fk),title:this.globals.title,at:this.accessTime,rf:Mk(Gk.referrer,fk)};return e===Xw?(n.res="".concat(Jk.screen.width," X ").concat(Jk.screen.height),n.cwt=t.eventTime,n.dt=this.waitTime):e===Qw||e===Zw?(n.en=t.eventName,n.el=t.eventLabel,n.cd=t.customData):e===$w&&(n.ei=t.elementId===Gk?"#document":t.elementId,n.ec=t.cls,n.ps=t.position,n.data=t.data||""),this.getData(e,t,n)}}]),r}(),Xk=Ik(),Qk=new qk,$k=Ik();Tk("[excute] hawebsdk use ".concat($k-Xk," ms."));class Zk{static checkStringParameter(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1/0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,i=arguments.length>3?arguments[3]:void 0;if(!e&&0===r)return;if("string"!=typeof e)throw new qc(Gc.RTC_ERR_CODE_INVALID_PARAMETER,"invalid type: ".concat(e));const n=this.getStringBytes(e);if(n>t||n?@[\\]^_{}|~,]{1,128}$")}static checkRoomId(e){this.checkStringParameter(e,64,1,"^[a-zA-Z0-9-_]{1,64}$")}static checkUserId(e){this.checkStringParameter(e,64,1,"^[a-zA-Z0-9-_]{1,64}$")}static checkUserName(e){this.checkStringParameter(e,256,0)}static checkUserRole(e){if("number"!=typeof e)throw new qc(Gc.RTC_ERR_CODE_INVALID_PARAMETER,"invalid parameter: ".concat(e));this.checkStringParameter("".concat(e),1,1,"^[0|2]$")}static checkSFUResourceType(e){if(null!=e){if("number"!=typeof e)throw new qc(Gc.RTC_ERR_CODE_INVALID_PARAMETER,"invalid paramter: ".concat(e));this.checkStringParameter("".concat(e),1,1,"^[0|1|2|3]$")}}static checkResourceTags(e){if(null!=e&&(!Array.isArray(e)||e.filter((e=>"string"!=typeof e)).length>0))throw new qc(Gc.RTC_ERR_CODE_INVALID_PARAMETER,"invalid paramter of resourceTags: ".concat(e))}static checkUserInfo(e){if("object"!=typeof e)throw this.logger.error("ParameterValidator","userInfo type invalid "),new qc(Gc.RTC_ERR_CODE_INVALID_PARAMETER,"userInfo type invalid");this.checkUserId(e.userId),this.checkUserName(e.userName),this.checkUserRole(e.role),this.checkUserOptionInfo(e.optionInfo)}static checkJoinParams(e,t){this.checkRoomId(e),this.checkUserInfo(t)}static getStringBytes(e){if(!e)return 0;if("string"!=typeof e)return e.byteLength;let t=0;if(window.TextEncoder){return t=(new TextEncoder).encode(e).length,t}const r=e.length;for(let i=0;i255?t+=3:t++;return t}static checkUserOptionInfo(e){if(e&&![!0,!1,null,void 0].includes(e.recordPlaceholder))throw new qc(Gc.RTC_ERR_CODE_INVALID_PARAMETER,"invalid parameter: ".concat(e.recordPlaceholder))}static checkSrcMultiRoomInfo(e){if(!e.authorization||!e.ctime||"0"!==e.userId)throw new qc(Gc.RTC_ERR_CODE_INVALID_PARAMETER,"invalid paramters: ".concat(e.authorization," ").concat(e.ctime," ").concat(e.userId))}static checkDstMultiRoomInfo(e,t){this.checkRoomId(e.roomId),this.checkUserRole(t);const r=e.role>=t;if(!e.authorization||!e.ctime||!r)throw new qc(Gc.RTC_ERR_CODE_INVALID_PARAMETER,"invalid paramters: ".concat(e.authorization," ").concat(e.ctime," ").concat(e.role))}static checkCmdMsgValid(e){const t=Zk.getStringBytes(e);if(t>32768)throw new qc(Gc.RTC_ERR_CODE_INVALID_PARAMETER,"invalid msg length: ".concat(t))}}i(Zk,"logger",iE.getLogger());var eO=new class{setPorxyServer(e){Zk.checkStringParameter(e,256,1);const t=/(.*:\/\/)?([^:]+):?(.*)?/.exec(e);let r=e;/^((\d|[1-9]\d|1\d\d|2([0-4]\d|5[0-5]))(\.|$)){4}$/.test(t[2])?t[1]||(r="http://".concat(t[2]).concat(t[3]?":":"").concat(t[3]||"")):t[1]||(r="https://".concat(t[2]).concat(t[3]?":":"").concat(t[3]||"")),this.proxyServer=r}getProxyServer(){return this.proxyServer}};const tO={},rO={grs_sdk_global_route_config_hwrtc:{applications:[],services:[{name:"com.huawei.cloud.videortn",routeBy:"ser_country>geo_ip",servings:[{countryOrAreaGroup:"DR1",addresses:{GLOBAL:"wss://rtc.platform.dbankcloud.com",ROOT:"wss://rtc-drcn.platform.dbankcloud.com"}},{countryOrAreaGroup:"DR2",addresses:{GLOBAL:"wss://rtc.platform.dbankcloud.com",ROOT:"wss://rtc-dra.platform.dbankcloud.com"}},{countryOrAreaGroup:"DR3",addresses:{GLOBAL:"wss://rtc.platform.dbankcloud.com",ROOT:"wss://rtc-dre.platform.dbankcloud.com"}},{countryOrAreaGroup:"DR4",addresses:{GLOBAL:"wss://rtc.platform.dbankcloud.com",ROOT:"wss://rtc-drru.platform.dbankcloud.com"}}],countryOrAreaGroups:[]}],countryOrAreaGroups:[{id:"DR1",name:"China",countriesOrAreas:["CN"],description:"China zone"},{id:"DR2",name:"Asian-African-Latin American",countriesOrAreas:["AE","AF","AG","AI","AM","AO","AQ","AR","AS","AW","AZ","BB","BD","BF","BH","BI","BJ","BL","BM","BN","BO","BR","BS","BT","BV","BW","BY","BZ","CC","CD","CF","CG","CI","CK","CL","CM","CO","CR","CU","CV","CX","DJ","DM","DO","DZ","EC","EG","EH","ER","ET","FJ","FK","FM","GA","GD","GE","GF","GH","GM","GN","GP","GQ","GS","GT","GU","GW","GY","HK","HM","HN","HT","ID","IN","IO","IQ","JM","JO","JP","KE","KG","KH","KI","KM","KN","KP","KR","KW","KY","KZ","LA","LB","LC","LK","LR","LS","LY","MA","MG","MH","ML","MM","MN","MO","MP","MQ","MR","MS","MU","MV","MW","MX","MY","MZ","NA","NC","NE","NF","NG","NI","NP","NR","NU","OM","PA","PE","PF","PG","PH","PK","PN","PR","PS","PW","PY","QA","RE","RW","SA","SB","SC","SD","SG","SH","SL","SN","SO","SR","SS","ST","SV","SY","SZ","TC","TD","TF","TG","TH","TJ","TK","TL","TM","TN","TO","TT","TV","TW","TZ","UG","UY","UZ","VE","VG","VI","VN","VU","WF","WS","YE","YT","ZA","ZM","ZW"],description:"Asian-African-Latin American zone"},{id:"DR3",name:"Europe",countriesOrAreas:["AD","AL","AN","AT","AU","AX","BA","BE","BG","BQ","CA","CH","CW","CY","CZ","DE","DK","EE","ES","FI","FO","FR","GB","GG","GI","GL","GR","HR","HU","IE","IL","IM","IS","IT","JE","LI","LT","LU","LV","MC","MD","ME","MF","MK","MT","NL","NO","NZ","PL","PM","PT","RO","RS","SE","SI","SJ","SK","SM","SX","TR","UA","UM","US","VA","VC","XK","YK"],description:"Europe zone"},{id:"DR4",name:"Russia",countriesOrAreas:["RU"],description:"Russia zone"},{id:"DR5",name:"A2",countriesOrAreas:["IR"],description:"A2 zone"}]},grs_sdk_global_route_config_rtcha:{applications:[],services:[{name:"com.huawei.cloud.hianalytics",routeBy:"ser_country",servings:[{countryOrAreaGroup:"DR1",addresses:{ROOT:"https://metrics1.data.hicloud.com:6447"}},{countryOrAreaGroup:"DR2",addresses:{ROOT:"https://metrics3.data.hicloud.com:6447"}},{countryOrAreaGroup:"DR3",addresses:{ROOT:"https://metrics2.data.hicloud.com:6447"}},{countryOrAreaGroup:"DR4",addresses:{ROOT:"https://metrics5.data.hicloud.com:6447"}},{countryOrAreaGroup:"DR5",addresses:{ROOT:"https://metrics4.data.hicloud.com:6447"}}],countryOrAreaGroups:[]},{name:"com.huawei.cloud.hianalytics.aspg",routeBy:"ser_country",servings:[{countryOrAreaGroup:"DR1",addresses:{ROOT:"https://metrics1.data.hicloud.com:6447"}},{countryOrAreaGroup:"DR2",addresses:{ROOT:"https://metrics-dra.dt.hicloud.com:6447"}},{countryOrAreaGroup:"DR3",addresses:{ROOT:"https://metrics2.data.hicloud.com:6447"}},{countryOrAreaGroup:"DR4",addresses:{ROOT:"https://metrics5.data.hicloud.com:6447"}},{countryOrAreaGroup:"DR5",addresses:{ROOT:"https://metrics4.data.hicloud.com:6447"}}],countryOrAreaGroups:[]}],countryOrAreaGroups:[{id:"DR1",name:"China",countriesOrAreas:["CN"],description:"China zone"},{id:"DR2",name:"Asian-African-Latin American",countriesOrAreas:["AE","AF","AG","AI","AM","AO","AQ","AR","AS","AW","AZ","BB","BD","BF","BH","BI","BJ","BL","BM","BN","BO","BR","BS","BT","BV","BW","BY","BZ","CC","CD","CF","CG","CI","CK","CL","CM","CO","CR","CU","CV","CX","DJ","DM","DO","DZ","EC","EG","EH","ER","ET","FJ","FK","FM","GA","GD","GE","GF","GH","GM","GN","GP","GQ","GS","GT","GU","GW","GY","HK","HM","HN","HT","ID","IN","IO","IQ","JM","JO","JP","KE","KG","KH","KI","KM","KN","KP","KR","KW","KY","KZ","LA","LB","LC","LK","LR","LS","LY","MA","MG","MH","ML","MM","MN","MO","MP","MQ","MR","MS","MU","MV","MW","MX","MY","MZ","NA","NC","NE","NF","NG","NI","NP","NR","NU","OM","PA","PE","PF","PG","PH","PK","PN","PR","PS","PW","PY","QA","RE","RW","SA","SB","SC","SD","SG","SH","SL","SN","SO","SR","SS","ST","SV","SY","SZ","TC","TD","TF","TG","TH","TJ","TK","TL","TM","TN","TO","TT","TV","TW","TZ","UG","UY","UZ","VE","VG","VI","VN","VU","WF","WS","YE","YT","ZA","ZM","ZW"],description:"Asian-African-Latin American zone"},{id:"DR3",name:"Europe",countriesOrAreas:["AD","AL","AN","AT","AU","AX","BA","BE","BG","BQ","CA","CH","CW","CY","CZ","DE","DK","EE","ES","FI","FO","FR","GB","GG","GI","GL","GR","HR","HU","IE","IL","IM","IS","IT","JE","LI","LT","LU","LV","MC","MD","ME","MF","MK","MT","NL","NO","NZ","PL","PM","PT","RO","RS","SE","SI","SJ","SK","SM","SX","TR","UA","UM","US","VA","VC","XK","YK"],description:"Europe zone"},{id:"DR4",name:"Russia",countriesOrAreas:["RU"],description:"Russia zone"},{id:"DR5",name:"A2",countriesOrAreas:["IR"],description:"A2 zone"}]}},iO="RTCReport";const nO=new class{constructor(){this.logger=iE.getLogger(),this.regularReport(hA),Qk.push(["setOnReportUrl","".concat(rO.grs_sdk_global_route_config_rtcha.services[0].servings[0].addresses.ROOT,"/webv4")]),Qk.push(["setIdsite","com.huawei.rtcsdk"]),Qk.setBatchSend({timeout:13e3,interval:!0,maxLength:30}),this.records=[],Cw.isFirefox()||(window.onbeforeunload=()=>{this.logger.info("stat","window is closing, emergency report"),this.records.length>0&&this.reportRecordsBeacon(this.records),this.clearData()})}setReportServer(e){this.opsServer=null;const t=eO.getProxyServer();if(t){const r=e.replace(/http(s)?:\/\//,"");this.opsServer="".concat(t,"/").concat(r,"/webv4")}else this.opsServer="".concat(e,"/webv4");Qk.push(["setOnReportUrl",this.opsServer])}regularReport(e){this.reportInterval&&clearInterval(this.reportInterval),this.reportInterval=setInterval((()=>{if(this.opsServer&&0!=this.records.length)try{Qk.setRequestMode("ajax"),this.records.forEach((e=>{const t=e.event.toString(),r={rtc_sdk:e};Qk.push(["sendData",t,t,r,null,null])})),this.clearData()}catch(jN){this.logger.error(iO,"regularReport failed")}}),e)}async addRecords(e){this.records=this.records.concat(e||[]),this.adjustRecordsLength(this.records)}async addRecord(e){this.records.push(e),this.adjustRecordsLength(this.records)}adjustRecordsLength(e){e.length>1e4&&e.splice(0,e.length-1e4)}clearData(){this.records.length=0}immediateReportRecords(){this.opsServer&&(this.reportRecords(this.records),this.clearData())}reportRecords(e){if(this.opsServer)try{Qk.setRequestMode("ajax"),e.forEach((e=>{const t=e.event.toString(),r={rtc_sdk:e};Qk.push(["sendData",t,t,r,null,t=>{4===t.readyState&&200===t.status||this.addRecord(e)},!0])}))}catch(jN){throw this.logger.error(iO,"fetch request failed"),jN}}async reportRecordsBeacon(e){if(this.opsServer)try{Qk.setRequestMode("beacon"),e.forEach((e=>{const t=e.event.toString(),r={rtc_sdk:e};Qk.push(["sendData",t,t,r,null,null,!0])}))}catch(jN){throw this.logger.error(iO,"beacon request failed"),jN}}},oO="STATISTIC_ENABLE",sO="ACCESS_RESOURCE_TYPE",aO="RESOURCE_TAGS",cO="FRAME_ENCRYPTION_MODE",uO="PORT_TYPE",dO="ENVIRONMENT_SUFFIX",lO="GRS_LOCAL_EXT_INFO",hO={ACCESS_RESOURCE_TYPE:e=>Zk.checkSFUResourceType(e),RESOURCE_TAGS:e=>Zk.checkResourceTags(e)},fO="ParametersUtil";const pO=new class{constructor(){this.logger=iE.getLogger(),this.parameters=new Map}setParameter(e,t){if(!e)return this.logger.error(fO,"setParameter, parameterKey is null"),!1;try{return this.logger.debug(fO,"setParameter, parameterKey: ".concat(e,", parameterValue: ").concat(t)),hO[e]&&hO[e](t),this.parameters.set(e.toLowerCase(),t),!0}catch(jN){return this.logger.error(fO,"setParameter occur error: ".concat(jN)),!1}}getParameter(e){try{return e&&this.parameters.has(e.toLowerCase())?this.parameters.get(e.toLowerCase()):null}catch(jN){return this.logger.error(fO,"getParameter occur error: ".concat(jN)),null}}};let mO=function(e){return e.TRACK_TYPE_AUDIO="audio",e.TRACK_TYPE_VIDEO="video",e.TYPE_APPLICATION="application",e}({}),gO=function(e){return e.STREAM_TYPE_MAIN="main",e.STREAM_TYPE_AUX="aux",e}({}),_O=function(e){return e[e.USER_SUBSCRIBE_AUDIOPOLICY=0]="USER_SUBSCRIBE_AUDIOPOLICY",e[e.TOPN_AUDIOPOLICY=1]="TOPN_AUDIOPOLICY",e}({}),SO=function(e){return e[e.USER_SUBSCRIBE_AUDIOPOLICY=2]="USER_SUBSCRIBE_AUDIOPOLICY",e[e.TOPN_AUDIOPOLICY=3]="TOPN_AUDIOPOLICY",e}({}),vO=function(e){return e[e.COMMON_SFU_RESOURCE=0]="COMMON_SFU_RESOURCE",e[e.COMPANY_SFU_RESOURCE=1]="COMPANY_SFU_RESOURCE",e[e.MPC_SFU_RESOURCE=2]="MPC_SFU_RESOURCE",e[e.LLL_SFU_RESOURCE=3]="LLL_SFU_RESOURCE",e}({});let yO=function(e){return e[e.NETWORK_QUALITY_UNKNOW=0]="NETWORK_QUALITY_UNKNOW",e[e.NETWORK_QUALITY_GREAT=1]="NETWORK_QUALITY_GREAT",e[e.NETWORK_QUALITY_GOOD=2]="NETWORK_QUALITY_GOOD",e[e.NETWORK_QUALITY_DEFECTS=3]="NETWORK_QUALITY_DEFECTS",e[e.NETWORK_QUALITY_WEAK=4]="NETWORK_QUALITY_WEAK",e[e.NETWORK_QUALITY_BAD=5]="NETWORK_QUALITY_BAD",e[e.NETWORK_QUALITY_DISCONNECT=6]="NETWORK_QUALITY_DISCONNECT",e}({}),IO=function(e){return e[e.NotJoin=0]="NotJoin",e[e.Joined=1]="Joined",e[e.Rejoining=2]="Rejoining",e}({}),TO=function(e){return e[e.normal=0]="normal",e[e.resolutionChange=1]="resolutionChange",e[e.remoteRejoinCache=2]="remoteRejoinCache",e[e.localRejoin=3]="localRejoin",e}({});const RO={"90p-":{width:120,height:90},"90p":{width:160,height:90},"120p":{width:160,height:120},"180p-":{width:240,height:180},"180p":{width:320,height:180},"240p":{width:320,height:240},"270p":{width:480,height:270},"300p":{width:400,height:300},"360p-":{width:480,height:360},"360p":{width:640,height:360},"450p":{width:800,height:450},"480p":{width:640,height:480},"540p":{width:960,height:540},"630p":{width:1120,height:630},"720p-":{width:960,height:720},"720p":{width:1280,height:720},"1080p":{width:1920,height:1080}};class EO{static getResolution(e,t){const r=Math.min(e,t);return r<180?"LD":r<360?"SD":r<720?"HD":"FHD"}static getResolutionType(e,t){return Object.keys(RO).find((r=>RO[r].width===e&&RO[r].height===t))}}class bO{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:50;this.elements=new Array(e+1),this.front=0,this.tail=0,this._size=0}getCapacity(){return this.elements.length-1}isEmpty(){return this.front===this.tail}size(){return this._size}push(e){this._size===this.getCapacity()&&this.dequeue(),this.elements[this.tail]=e,this.tail=(this.tail+1)%this.elements.length,this._size++}dequeue(){if(this.isEmpty())throw new Error("Cannot dequeue from an empty queue.");const e=this.elements[this.front];return this.elements[this.front]=null,this.front=(this.front+1)%this.elements.length,this._size--,e}getFront(){return this.isEmpty()?null:this.elements[this.front]}getTail(){if(this.isEmpty())return null;const e=0===this.tail?this.elements.length-1:this.tail-1;return this.elements[e]}getElement(e){return e<0||e>=this.size()?null:this.elements[(this.front+e)%this.elements.length]}}const CO=new class{constructor(){i(this,"isFireFox",Cw.isFirefox()),this.reportSymbol=Symbol("RTCInterval_".concat(XR.getCurrentTimestamp())),this.mapInterval=new bO}getSymbol(){return this.reportSymbol}reset(){delete this.mapInterval,this.mapInterval=new bO,clearTimeout(this.gatherTimer),this.gatherTimer=null}addConnection(e,t){this.connectionsManagers||(this.connectionsManagers=new Map),this.connectionsManagers.set(e,t),this.execMyInterval((async()=>{await this.execInterval()}),100)}checkIsMediaStatsType(e){return["inbound-rtp","outbound-rtp","remote-inbound-rtp","remote-outbound-rtp"].includes(e.type)}checkCandidatePair(e){return"candidate-pair"===e.type.toString()&&(!0===e.selected||!0===e["nominated "]||"succeeded"===e.state)}async getStatsData(e,t){const r=await(null==t?void 0:t.getStats());r&&r.forEach(((t,r)=>{this.checkIsMediaStatsType(t)?e.set(t.type+"-"+t.kind+"_"+t.ssrc,t):this.checkCandidatePair(t)?(t.currentRoundTripTime=t.currentRoundTripTime||Math.abs(t.lastPacketReceivedTimestamp-t.lastPacketSentTimestamp),e.set(t.type,t)):"track"===t.type.toString()&&e.set(r,t)}))}async getData(e,t,r){const i=e.getConnection(r);await this.getStatsData(t,i)}async execInterval(){const e=new Map;for(const t of this.connectionsManagers.keys()){const r=new Map,i=new Map,n=new Map,o=[];o.push(this.getData(this.connectionsManagers.get(t),i,gO.STREAM_TYPE_MAIN)),o.push(this.getData(this.connectionsManagers.get(t),n,gO.STREAM_TYPE_AUX)),await Promise.all(o),r.set(gO.STREAM_TYPE_MAIN,i),r.set(gO.STREAM_TYPE_AUX,n),e.set(t,r)}this.mapInterval.push(e)}getLatestRemoteInboundStats(e,t,r){var i,n;const o=null===(i=this.mapInterval.getTail())||void 0===i||null===(n=i.get(e))||void 0===n?void 0:n.get(t);if(this.isFireFox){const t=r.split("_"),i=parseInt(t[1]),n=this.connectionsManagers.get(e).getMappingSsrcs(i),s=t[0].concat("_").concat(n).toString();return o&&o.get(s)}return o&&o.get(r)?o.get(r):null}getLatestStatsByTrackId(e,t,r){var i,n;const o=null===(i=this.mapInterval.getTail())||void 0===i||null===(n=i.get(e))||void 0===n?void 0:n.get(t);return o&&o.get(r)?o.get(r):null}getLatestReport(e,t){var r,i;return null===(r=this.mapInterval.getTail())||void 0===r||null===(i=r.get(e))||void 0===i?void 0:i.get(t)}getLatestStats(e,t,r){const i=this.getLatestReport(e,t);return this.getStatsBySsrcLabel(i,r,e)}getElementStats(e,t,r,i){var n,o;const s=null===(n=this.mapInterval.getElement(i))||void 0===n||null===(o=n.get(e))||void 0===o?void 0:o.get(t);return this.getStatsBySsrcLabel(s,r,e)}getStatsBySsrcLabel(e,t,r){if(!e)return null;if(this.isFireFox){const i=t.split("_"),n=parseInt(i[1]),o=this.connectionsManagers.get(r).getMappingSsrcs(n),s=i[0].concat("_").concat(o).toString();return e.get(s)}return e.get(t)}getLatestValue(e,t,r,i){const n=this.getLatestStats(e,t,r);return n?n[i]:null}getAllNumber(e,t,r,i){const n=this.mapInterval.size(),o=new Array(n);for(let s=0;sn&&(c+=a),a=0);return a>n&&(c+=a),c}execMyInterval(e,t){const r=()=>{this.gatherTimer=setTimeout((()=>{e(),r()}),t)};e(),r()}};class AO{constructor(e){i(this,"videoFreezeKey",Cw.isFirefox()?"packetsReceived":"framesReceived"),i(this,"mediaStatInfo",[]),i(this,"mediaStatDebugInfo",[]),i(this,"mediaStatSumInfo",[]),i(this,"mediaStatSumDebugInfo",[]),i(this,"ACSAddr",""),i(this,"SFUAddr",""),i(this,"lastSenderInfo",new Map),i(this,"lastSenderDebugInfo",new Map),i(this,"encryUserId",new Map),i(this,"remoteStreamInfo",[]),i(this,"audioPolicy",_O.USER_SUBSCRIBE_AUDIOPOLICY),i(this,"LocalStreamInfo",new Map),i(this,"auxsStreamInfo",new Map),i(this,"audioReceiveInfo",{audioReceivePackets:new Map,audioReceivePacketsLost:new Map,audioReceiveBytes:new Map}),i(this,"videoReceiveInfo",{videoReceivePackets:new Map,videoReceivePacketsLost:new Map,videoReceiveBytes:new Map,videoReceiveFrame:new Map}),i(this,"audioReceiveDebugInfo",{audioReceivePackets:new Map,audioReceivePacketsLost:new Map,audioReceiveBytes:new Map}),i(this,"videoReceiveDebugInfo",{videoReceivePackets:new Map,videoReceivePacketsLost:new Map,videoReceiveBytes:new Map,videoReceiveFrame:new Map}),i(this,"inBoundAudioSsrcInfos",[]),i(this,"audioPolicyLastCycle",_O.USER_SUBSCRIBE_AUDIOPOLICY),i(this,"audioStreamReceiverMap",new Map),i(this,"ssrcChangeCount",0),i(this,"audioStreamInfos",[]),i(this,"audioCount",0),i(this,"audioStreamAllInfos",[]),i(this,"audioAllCount",0),i(this,"audioStreamTop3Count",0),i(this,"module_","MediaStats"),i(this,"tempStat",{bytesSent:0,bytesReceived:0,sendBitrate:0,recvBitrate:0,rtt:0,upPktsLostRate:0,downPktsLostRate:0}),i(this,"stat",{bytesSent:0,bytesReceived:0,sendBitrate:0,recvBitrate:0,rtt:0,upPktsLostRate:0,downPktsLostRate:0}),i(this,"audioLevelInfo",{localAudio:new Map,remoteAudio:new Map,top3Audio:new Map}),i(this,"remoteUserMuteStatus",new Map),this.logger=e}setEncryInfo(e,t){this.encryUserId.set(e,t)}getEncryInfo(e){return this.encryUserId.get(e)}clearEncryUserId(){this.encryUserId.clear()}setRemoteUserManager(e){this.remoteUserManager=e}setStartSsrc(e){this.startSsrc=e}updateAudioLevel(e){if("local"===e.type){if(!this.audioLevelInfo.localAudio.get("local")){const e=[];this.audioLevelInfo.localAudio.set("local",e)}this.audioLevelInfo.localAudio.get("local").push(e.level)}else if("remoteTop3"===e.type){if(!this.audioLevelInfo.top3Audio.get("".concat(null==e?void 0:e.ssrc))){const t=[];this.audioLevelInfo.top3Audio.set("".concat(null==e?void 0:e.ssrc),t)}this.audioLevelInfo.top3Audio.get("".concat(null==e?void 0:e.ssrc)).push(e.level)}else{if(!this.audioLevelInfo.remoteAudio.get("".concat(null==e?void 0:e.ssrc,"_").concat(null==e?void 0:e.userId))){const t=[];this.audioLevelInfo.remoteAudio.set("".concat(null==e?void 0:e.ssrc,"_").concat(null==e?void 0:e.userId),t)}this.audioLevelInfo.remoteAudio.get("".concat(null==e?void 0:e.ssrc,"_").concat(null==e?void 0:e.userId)).push(e.level)}}getAudioLevel(e,t,r){let i=0,n=0;return"local"===e&&this.audioLevelInfo.localAudio.get("local")?(this.audioLevelInfo.localAudio.get("local").forEach((e=>{i+=e||0,n++})),this.audioLevelInfo.localAudio.clear()):"remoteTop3"===e&&this.audioLevelInfo.top3Audio.get("".concat(t))?(this.audioLevelInfo.top3Audio.get("".concat(t)).forEach((e=>{i+=e||0,n++})),this.audioLevelInfo.top3Audio.clear()):"remote"===e&&this.audioLevelInfo.remoteAudio.get("".concat(t,"_").concat(r))&&(this.audioLevelInfo.remoteAudio.get("".concat(t,"_").concat(r)).forEach((e=>{i+=e||0,n++})),this.audioLevelInfo.remoteAudio.clear()),0===n?0:Math.ceil(i/n)}setConnectionsManager(e){this.logger.info(this.module_,"setConnectionsManager"),this.connectionsManager=e}setSubscribeInfo(e){var t,r,i,n;if(!e)return;const o=this.remoteStreamInfo.find((t=>t.userId===e.userId));if(!o)return this.clearRemoteStreamInfoCache(e),void this.remoteStreamInfo.push(e);(null===(t=e.mainStream)||void 0===t||null===(r=t.tracks)||void 0===r?void 0:r.length)>0&&e.mainStream.tracks.forEach((t=>{o.mainStream.tracks.find((e=>e.trackId===t.trackId))||(this.doClearRemoteStreamInfoCache(e,e.userId,t.cssrc),o.mainStream.tracks.push(t))})),(null===(i=e.auxStream)||void 0===i||null===(n=i.tracks)||void 0===n?void 0:n.length)>0&&e.auxStream.tracks.forEach((t=>{o.auxStream.tracks.find((e=>e.trackId===t.trackId))||(this.doClearRemoteStreamInfoCache(e,e.userId,t.cssrc),o.auxStream.tracks.push(t))}))}doClearRemoteStreamInfoCache(e,t,r){let i=null;if(e.mainStream.tracks.forEach((e=>{e.cssrc===r&&(i=e.type)})),e.auxStream.tracks.forEach((e=>{e.cssrc===r&&(i=e.type)})),i===mO.TRACK_TYPE_AUDIO){const e="".concat(r,"-").concat(t);this.audioReceiveInfo.audioReceivePackets.delete(e),this.audioReceiveInfo.audioReceivePacketsLost.delete(e),this.audioReceiveInfo.audioReceiveBytes.delete(e)}else if(i===mO.TRACK_TYPE_VIDEO){const e="".concat(r,"-").concat(t);this.videoReceiveInfo.videoReceivePackets.delete(e),this.videoReceiveInfo.videoReceivePacketsLost.delete(e),this.videoReceiveInfo.videoReceiveBytes.delete(e),this.videoReceiveInfo.videoReceiveFrame.delete(e)}}clearRemoteStreamInfoCache(e){this.remoteStreamInfo.filter((t=>t.userId===e.userId)).forEach((t=>{this.clearRemoteStreamInfoCache4Stream(e,t.mainStream),this.clearRemoteStreamInfoCache4Stream(e,t.auxStream)}))}clearRemoteStreamInfoCache4Stream(e,t){t.tracks.forEach((t=>{const r=t.trackId,i=t.cssrc,n=e.userId;e.mainStream.tracks.forEach((t=>{t.cssrc===i&&t.trackId!==r&&this.doClearRemoteStreamInfoCache(e,n,i)}))}))}clearLocalStreamInfoCache(e){e&&this.LocalStreamInfo.forEach((t=>{e.ssrc===t.ssrc&&e.uid===t.uid&&e.streamId!==t.streamId&&this.lastSenderInfo.delete("".concat(e.ssrc,"-").concat(e.uid))}))}clearAuxsStreamInfoCache(e){e&&this.auxsStreamInfo.forEach((t=>{e.ssrc===t.ssrc&&e.uid===t.uid&&e.streamId!==t.streamId&&this.lastSenderInfo.delete("".concat(e.ssrc,"-").concat(e.uid))}))}setLocalMainStreamInfo(e,t){return!(!t||0===t.length)&&(this.LocalStreamInfo.clear(),t.forEach((t=>{const r={uid:e,streamId:"",ssrc:t.ssrc,type:t.type};t.type===mO.TRACK_TYPE_AUDIO?r.streamId=t.upstream.streamUid.toString():(r.streamId=t.upstream.streamUid.toString(),r.width=t.upstream.width,r.height=t.upstream.height,r.frame=t.upstream.fps),this.clearLocalStreamInfoCache(r),this.LocalStreamInfo.set(t.resolutionId,r)})),!0)}setLocalAuxsStreamInfo(e,t){if(!t)return!1;const r=Array.from(t.localTrackPublishInfos.values());return!!r&&(this.auxsStreamInfo.clear(),r.forEach((r=>{const i={uid:e,streamId:r.upstream.streamUid.toString(),ssrc:r.ssrc,type:r.type};r.type===mO.TRACK_TYPE_VIDEO&&(i.publishInfo={stream:t.localStream}),this.clearAuxsStreamInfoCache(i),this.auxsStreamInfo.set(r.resolutionId,i)})),!0)}deleteSubscribeInfo(e,t,r){if(r||t){if(t){const i=this.remoteStreamInfo.find((t=>t.userId===e));if(!i)return;const n=t===gO.STREAM_TYPE_MAIN?i.mainStream:i.auxStream;n.tracks=r?n.tracks.filter((e=>e.trackId!==r)):null}}else this.remoteStreamInfo=this.remoteStreamInfo.filter((t=>t.userId!==e))}setAudioPolicy(e){this.audioPolicyLastCycle=this.audioPolicy,this.audioPolicy=e,this.setAudioStreamInfo()}setSFUAddr(e){this.SFUAddr=e}setACSAddr(e){this.ACSAddr=e}leaveRoom(){this.mediaStatInfo=[]}getAudioPolicy(){return this.audioPolicy}getTransportMediaStats(){return this.stat}getMediaStatInfo(){const e=this.mediaStatInfo;return this.mediaStatInfo=[],e}getMediaStatSum(){const e=this.mediaStatSumInfo;return this.mediaStatSumInfo=[],e}getInBoundAudioSsrc(){const e=this.inBoundAudioSsrcInfos;return this.inBoundAudioSsrcInfos=[],e}async dealStats(){this.connectionsManager.isConnectionsExist()?(this.getAudioStreamInfo(),await this.getSenderInfo(!1),await this.getReceiverInfo(!1),this.stat.bytesSent+=this.tempStat.bytesSent,this.stat.bytesReceived+=this.tempStat.bytesReceived,this.stat.sendBitrate=this.tempStat.sendBitrate,this.stat.recvBitrate=this.tempStat.recvBitrate,this.clearTempStats()):this.logger.debug(this.module_,"peerConnection is undefined")}clearTempStats(){this.tempStat.bytesSent=0,this.tempStat.bytesReceived=0,this.tempStat.sendBitrate=0,this.tempStat.recvBitrate=0}clearMediaStatBytes(){this.stat.bytesSent=0,this.stat.bytesReceived=0}cleanAudioStreamInfos(){this.audioCount=this.audioStreamInfos.length,this.audioAllCount=this.audioStreamAllInfos.length,this.audioStreamInfos=[],this.audioStreamAllInfos=[]}updateAudioStreamInfos(e,t){if("add"===t){let t=0;this.remoteStreamInfo.forEach((r=>{if(e===r.userId){const e=r.mainStream.tracks.filter((e=>e.streamType===gO.STREAM_TYPE_MAIN&&e.type===mO.TRACK_TYPE_AUDIO));t=e.length>0?e[0].cssrc:0}}));const r={userid:e,audioSsrc:t};this.audioStreamInfos=this.audioStreamInfos.filter((r=>r.userid!=e||r.audioSsrc!=t)),this.audioStreamAllInfos=this.audioStreamAllInfos.filter((r=>r.userid!=e||r.audioSsrc!=t)),this.audioStreamInfos.push(r),this.audioStreamAllInfos.push(r)}"delete"!==t&&"removed"!==t||(this.audioStreamInfos=this.audioStreamInfos.filter((t=>t.userid!==e)),this.audioStreamAllInfos=this.audioStreamAllInfos.filter((t=>t.userid!==e))),this.audioPolicy!==_O.USER_SUBSCRIBE_AUDIOPOLICY&&this.audioCount===this.audioStreamInfos.length||this.ssrcChangeCount++,this.audioPolicy!==_O.TOPN_AUDIOPOLICY&&this.audioAllCount===this.audioStreamAllInfos.length||this.ssrcChangeCount++}updateAudioStreamTop3(e){this.audioStreamTop3CountTimer&&clearTimeout(this.audioStreamTop3CountTimer),this.audioStreamTop3CountTimer=setTimeout((()=>{this.audioStreamTop3Count=0}),4e3),this.audioStreamTop3Count=e}checkAudioStreamInfosIsExist(e,t){return 0!==this.audioStreamInfos.filter((r=>r.userid===e&&r.audioSsrc===t)).length}setAudioStreamInfo(){this.audioPolicy!==this.audioPolicyLastCycle&&(this.ssrcChangeCount=1,this.audioStreamReceiverMap.clear(),this.audioStreamTop3Count=0,this.audioReceiveInfo.audioReceiveBytes.clear(),this.audioReceiveInfo.audioReceivePackets.clear(),this.audioReceiveInfo.audioReceivePacketsLost.clear())}async getAudioStreamInfo(){this.audioPolicy===_O.TOPN_AUDIOPOLICY?await this.buildAudioStreamInfo3():this.audioPolicy===_O.USER_SUBSCRIBE_AUDIOPOLICY?await this.buildAudioStreamInfo2():this.logger.debug(this.module_,"mode 1 not uesed")}async buildAudioStreamInfo3(){const e=[],t={timestamp:XR.getCurrentTimestamp(),event:ZC.QoS_DOWN_STREAM_AUDIO_STAT,access_addr:this.ACSAddr,sfu_addr:this.SFUAddr,audio_policy:this.audioPolicy,topn:3,audios_change_cnt:0,audios:e,no_stream_cnt:0};for(let n=0;n<3;n++){var r;const i=this.startSsrc+n,o="".concat(hC,"_").concat(i),s=CO.getLatestStats(null===(r=this.connectionsManager)||void 0===r?void 0:r.getConnectionId(),gO.STREAM_TYPE_MAIN,o);if(s){const r=this.connectionsManager.calcChangedStatistic(s.id,s.packetsReceived||0,["packetsReceived"])||s.packetsReceived,n=this.audioStreamReceiverMap.get(i)||0;let o=!0;0===r?o=!1:void 0===n?o=!0:r===n&&(o=!1),e.push({ssrc:i,userid:"",packet_cnt:r-n}),this.audioStreamReceiverMap.set(i,r),o||t.no_stream_cnt++}}const i=this.audioAllCount<3?this.audioAllCount:3;if(i<3){const e=t.no_stream_cnt-(3-i);t.no_stream_cnt=e<0?0:e}t.audios_change_cnt=this.ssrcChangeCount,this.inBoundAudioSsrcInfos.push(t)}async buildAudioStreamInfo2(){const e=[],t={timestamp:XR.getCurrentTimestamp(),event:ZC.QoS_DOWN_STREAM_AUDIO_STAT,access_addr:this.ACSAddr,sfu_addr:this.SFUAddr,audio_policy:this.audioPolicy,topn:17,audios_change_cnt:0,audios:e,no_stream_cnt:0};this.remoteStreamInfo.every((r=>{var i;if(-1===this.audioStreamInfos.findIndex((e=>e.userid===r.userId)))return!0;const n=Array.from(r.mainStream.tracks.values()).find((e=>e.type===mO.TRACK_TYPE_AUDIO)),o="".concat(hC,"_").concat(null==n?void 0:n.cssrc),s=CO.getLatestStats(null===(i=this.connectionsManager)||void 0===i?void 0:i.getConnectionId(),gO.STREAM_TYPE_MAIN,o);if(r&&n&&s){const i=r.userId,o=this.connectionsManager.calcChangedStatistic(s.id,s.packetsReceived||0,["packetsReceived"])||s.packetsReceived,a=this.audioStreamReceiverMap.get(n.cssrc)||0;let c=!0;0===o?c=!1:void 0===a?c=!0:o===a&&(c=!1);const u=this.getEncryInfo(r.userId)||XR.secretString(r.userId)||"";e.push({ssrc:n.cssrc,userid:u,packet_cnt:o-a}),this.audioStreamReceiverMap.set(n.cssrc,o),!c&&this.checkAudioStreamInfosIsExist(i,n.cssrc)&&t.no_stream_cnt++}return!0})),t.audios_change_cnt=this.ssrcChangeCount,e.length>0&&this.inBoundAudioSsrcInfos.push(t)}async getVideoReceiverFrameDecodedMap(){const e=new Map;return await this.buildFrameDecodedMap(gO.STREAM_TYPE_MAIN,e),await this.buildFrameDecodedMap(gO.STREAM_TYPE_AUX,e),e}async buildFrameDecodedMap(e,t){const r=e===gO.STREAM_TYPE_AUX,i=this.connectionsManager.getReceivers(r?gO.STREAM_TYPE_AUX:gO.STREAM_TYPE_MAIN);for(let n=0;n{const n={};(r?i.auxStream.tracks:i.mainStream.tracks).forEach((o=>{var s;const a=CO.getLatestStats(null===(s=this.connectionsManager)||void 0===s?void 0:s.getConnectionId(),e,"".concat(fC,"_").concat(o.cssrc));if(a){n.userId=i.userId,n.isAux=r,n.decodedFrame=this.connectionsManager.calcChangedStatistic(a.id,a.framesDecoded||0,["framesDecoded"]);const e="".concat(i.userId,",").concat(r?"1":"0");t.get(e)||t.set(e,n)}}))}))}}async getReceiverInfo(e){const t={timestamp:XR.getCurrentTimestamp(),event:ZC.QoS_DOWN_STREAM_AUDIO_SUM,real_band_width:0,bytes:0,pkt_loss:0},r={timestamp:XR.getCurrentTimestamp(),event:ZC.QoS_DOWN_STREAM_VIDEO_SUM,real_band_width:0,tmmbr:0,video_tmmbr:0,req_band_width:0,pkt_loss:0,jitter:0,frame_rate:0,first_frame_count:0,bytes:0},i={isAudio:!1,isVideo:!1};await this.buildReceiverInfo(gO.STREAM_TYPE_MAIN,t,r,i,e),await this.buildReceiverInfo(gO.STREAM_TYPE_AUX,t,r,i,e),i.isAudio&&(e?this.mediaStatSumDebugInfo.push(t):this.mediaStatSumInfo.push(t)),i.isVideo&&(e?this.mediaStatSumDebugInfo.push(r):this.mediaStatSumInfo.push(r))}async buildReceiverInfo(e,t,r,i,n){const o=e===gO.STREAM_TYPE_AUX,s={timestamp:XR.getCurrentTimestamp(),event:ZC.QoS_DOWN_STREAM_AUDIO,streams:[]},a={timestamp:XR.getCurrentTimestamp(),event:o?ZC.QoS_AUX_DOWN_STREAM_VIDEO:ZC.QoS_DOWN_STREAM_VIDEO,qos_estimate:3,streams:[]};o||this.buildAudioReceiverInfo(s,t,n),this.buildVideoReceiverInfo(e,a,r,n),0!==a.streams.length&&(n?this.mediaStatDebugInfo.push(a):this.mediaStatInfo.push(a),i.isVideo=!0),0!==s.streams.length&&(n?this.mediaStatDebugInfo.push(s):this.mediaStatInfo.push(s),i.isAudio=!0)}checkMuteStatusIsChange(e){const t=this.remoteUserManager.checkSsrcIsMute(e),r=this.remoteUserMuteStatus.get(e),i=!t&&t===r;return this.remoteUserMuteStatus.set(e,t),i}buildAudioReceiverInfo(e,t,r){let i=null,n=null,o=null,s=0;if(r?(i=this.audioReceiveDebugInfo.audioReceivePackets,n=this.audioReceiveDebugInfo.audioReceivePacketsLost,o=this.audioReceiveDebugInfo.audioReceiveBytes,s=this.rtcStatsInteval):(i=this.audioReceiveInfo.audioReceivePackets,n=this.audioReceiveInfo.audioReceivePacketsLost,o=this.audioReceiveInfo.audioReceiveBytes,s=5),this.audioPolicy===_O.TOPN_AUDIOPOLICY){for(let u=0;u<3;u++){var a;const d={ssrc_uid:"",stream_uid:"",sfu_addr:"",dst_rcv_vel:0,dst_rcv_nel:0,bit_rate:0,pkt_loss:0,rtt:0,jitter:0,bytes:0,pkts:0,lost_pkt_cnt:0,srtp_decode_err:0,max_cont_lost_pkts:0,mos:0,jb_depth:0,play_err:0,play_total_time:5e3,freeze_loss_time:0,freeze_time:0,jitter90:0,jitter95:0,jitter100:0,tsm_count:0,ts_exp_cnt:0,ssrc_change_cnt:0,audio_pkt_error:0,audio_decode_error:0,dst_burst_pkt_lost_cnt:0,dst_burst_cnt:0,dst_burst_pkt_lost_rate:0,dst_audio_jb_discard_lost_rate:0,net_loss:0,rtp_loss:0,dst_mean_lost_rate:0,buffer_max_length:0,buffer_mean_length:0,net_ate_max_delay:0,net_ate_cur_delay:0,jb_max_num_delay:0,jb_cur_num_delay:0,pkt_recv_max_interval:0,pkt_recv_mean_interval:0,ui_sample_rate:0,ui_channels:0,en_codec_type:0,ui_total_pkt_loss:0,ui_buffer_total_length:0,ui_buffer_cal_cnt:0,ui_rec_pkt_cnt:0,i_channel_id:0,ui_dst_inc_bytes:0,ui_recv_redn_rate:0,ui_plc_count:0,bad_pkt_cnt:0,empty_pkt_cnt:0,buf_drop_pkt_cnt:0},l=this.startSsrc+u,h="".concat(hC,"_").concat(l),f=CO.getLatestStats(null===(a=this.connectionsManager)||void 0===a?void 0:a.getConnectionId(),gO.STREAM_TYPE_MAIN,h);if(f){d.ssrc_uid="".concat(l,"-").concat(l),d.stream_uid="STREAMUUID-".concat(l),d.sfu_addr=this.SFUAddr,this.connectionsManager.calcChangedStatistic(f.id,f,["bytesReceived","packetsReceived","packetsLost"]);const e=f.bytesReceived||0;o.get(l)||o.set(l,0),d.bytes=en.get(l)?a-n.get(l):0;d.lost_pkt_cnt=u;const p=t{var o;const s={ssrc_uid:"",stream_uid:"",sfu_addr:"",dst_rcv_vel:0,dst_rcv_nel:0,bit_rate:0,pkt_loss:0,rtt:0,jitter:0,bytes:0,pkts:0,lost_pkt_cnt:0,srtp_decode_err:0,max_cont_lost_pkts:0,mos:0,jb_depth:0,play_err:0,play_total_time:5e3,freeze_loss_time:0,freeze_time:0,jitter90:0,jitter95:0,jitter100:0,tsm_count:0,ts_exp_cnt:0,ssrc_change_cnt:0,audio_pkt_error:0,audio_decode_error:0,dst_burst_pkt_lost_cnt:0,dst_burst_cnt:0,dst_burst_pkt_lost_rate:0,dst_audio_jb_discard_lost_rate:0,net_loss:0,rtp_loss:0,dst_mean_lost_rate:0,buffer_max_length:0,buffer_mean_length:0,net_ate_max_delay:0,net_ate_cur_delay:0,jb_max_num_delay:0,jb_cur_num_delay:0,pkt_recv_max_interval:0,pkt_recv_mean_interval:0,ui_sample_rate:0,ui_channels:0,en_codec_type:0,ui_total_pkt_loss:0,ui_buffer_total_length:0,ui_buffer_cal_cnt:0,ui_rec_pkt_cnt:0,i_channel_id:0,ui_dst_inc_bytes:0,ui_recv_redn_rate:0,ui_plc_count:0,bad_pkt_cnt:0,empty_pkt_cnt:0,buf_drop_pkt_cnt:0},a=Array.from(n.mainStream.tracks.values()).find((e=>e.type===mO.TRACK_TYPE_AUDIO&&e.state===TO.normal)),c="".concat(hC,"_").concat(null==a?void 0:a.cssrc),u=CO.getLatestStats(null===(o=this.connectionsManager)||void 0===o?void 0:o.getConnectionId(),gO.STREAM_TYPE_MAIN,c);if(n&&a&&u){const t=this.getEncryInfo(n.userId)||XR.secretString(n.userId),r="".concat(a.cssrc,"-").concat(t);s.ssrc_uid=r,s.stream_uid="".concat(a.trackId)||"STREAMUUID-".concat(a.cssrc),s.sfu_addr=this.SFUAddr,this.connectionsManager.calcChangedStatistic(u.id,u,["bytesReceived","packetsReceived","packetsLost"]);const o=u.bytesReceived||0;e.audioReceiveBytes.get(r)||e.audioReceiveBytes.set(r,0),s.bytes=oe.audioReceivePacketsLost.get(r)?h-e.audioReceivePacketsLost.get(r):0;s.lost_pkt_cnt=f;const p=l{(e===gO.STREAM_TYPE_MAIN?d.mainStream.tracks.filter((e=>e.type===mO.TRACK_TYPE_VIDEO&&e.state===TO.normal)):d.auxStream.tracks.filter((e=>e.type===mO.TRACK_TYPE_VIDEO&&e.state===TO.normal))).forEach((l=>{var h,f;const p={ssrc_uid:"",stream_uid:"",sfu_addr:"",expect_pic_w:0,expect_pic_h:0,image_width:0,image_height:0,roc:0,buffered:0,bit_rate:0,frame_rate:0,pkt_loss:0,rtt:0,jitter:0,bytes:0,jb_depth:0,fir_req_cnt:0,parse_srtp_fail:0,fir_frame_cnt:0,freeze_200ms_cnt:0,freeze_600ms_cnt:0,freeze_1000ms_cnt:0,freeze_200ms_time:0,freeze_600ms_time:0,freeze_1000ms_time:0,dec_key_frame_cnt:0,dec_key_frame_size:0,max_cont_lost_pkts:0,freeze_cnt:0,act_dec_runtime:5e3,ui_first_rcv_seq:0,ui_max_decode_delay:0,ui_min_decode_delay:0,ui_mean_decode_delay:0,ui_current_decode_delay:0,ui_max_channel_decode_delay:0,ui_min_channel_decode_delay:0,ui_mean_channel_decode_delay:0,ui_current_channel_decode_delay:0,ui_abnormal_pkt_count:0,ui_codec_pt_error:0,ui_no_dec_data_cnt:0,jb_discard_bytes:0,net_lost_pkt_counts:0,rcv_frame_counts:0,dec_bytes_out:0,rcv_red_bytes:0,dec_delay_over_time_cnt:0,channel_decode_over_time_cnt:0,dec_non_key_frame_size:0,dec_non_key_frame_cnt:0,us_loss_frame_rate:0,ui_pkt_rate:0,us_residual_pkt_loss:0,ul_decoder_start_time:0,us_mean_pkt_loss:0,ui_mean_rtt:0,e_dec_protocol:0,ui_distribute_tmmbr:0,frame_fail_cnt:0,advanced_frame_count:0,base_frame_count:0,before_postprocess_frames_rate:0,after_postprocess_frames_rate:0,red_rate:0,recover_rate:0,jb_listpacket_num:0,not_recv_pkt_cnt:0,not_recv_pkt_total_time:0,nack_request_cnt:0,send_key_request_cnt:0,jb_jitter:0,recv_frame_rate:0,recv_base_layer_frame_cnt:0,recv_mid_layer_frame_cnt:0,recv_out_layer_frame_cnt:0,jb_total_frame_cnt:0,jb_listframe_num:0,output_total_freezetime:0,output_freeze_cnt:0,ref_frame_error_cnt:0,force_out4_key_cnt:0,force_out4_struct_cnt:0,current_output_diftime:0,current_complete_type:0,jb_base_layer_frame_num:0,jb_mid_layer_frame_num:0,jb_out_layer_frame_num:0,freeze_400ms_cnt:0,freeze_400ms_time:0,freeze_200ms_rate:0,freeze_400ms_rate:0,freeze_600ms_rate:0,freeze_1000ms_rate:0,freeze_loss_time:0,first_frame_cnt:0,p_frame_cnt:0,lost_pkt_cnt:0,play_err:0,bad_pkt_cnt:0,empty_pkt_cnt:0,buf_drop_pkt_cnt:0},m="".concat(fC,"_").concat(l.cssrc),g=CO.getLatestStats(null===(h=this.connectionsManager)||void 0===h?void 0:h.getConnectionId(),e,m);if(g){const t=this.getEncryInfo(d.userId)||XR.secretString(d.userId),r="".concat(l.cssrc,"-").concat(t);p.ssrc_uid=r,this.connectionsManager.calcChangedStatistic(g.id,g,["keyFramesDecoded","packetsReceived","packetsLost","bytesReceived","framesDecoded","freezeCount"]),this.buildCommonVideoRecvInfo(p,g,l),this.buildBitRateVideoRecvInfo(g,r,o,s,p);const h=XR.getValue(g.bytesReceived,0),f=a.get(r)||0;p.bytes=hc?s-c:0;n.real_lost_pkt_cnt=u;const d=oe.type!==mO.TRACK_TYPE_AUDIO)):Array.from(this.LocalStreamInfo.values());if(0===c.length)return;const u=c.find((e=>e.type===mO.TRACK_TYPE_AUDIO)),d=c.filter((e=>e.type===mO.TRACK_TYPE_VIDEO)),l=n?this.rtcStatsInteval:5;this.buildAudioSenderInfo(u,a,n),a.ssrc_uid&&(t.real_band_width+=Math.round(a.bytes/(1024*l)*8),i.isAudio=!0,s.push(a)),null==d||d.forEach((t=>{const s={ssrc_uid:"",stream_uid:"",sfu_addr:"",expect_pic_w:0,expect_pic_h:0,expect_frame_rate:0,image_width:0,image_height:0,frame_rate:0,bit_rate:0,max_cont_loss:0,pkt_loss:0,rtt:0,jitter:0,bytes:0,pkts:0,roc:0,first_req_count:0,first_frame_count:0,frame_count:0,redn_rate:0,ui_first_send_seq:0,ui_no_ref_redundance_rate:0,ui_enc_max_bit_rate_set:0,ui_enc_min_bit_rate_set:0,ui_enc_current_bit_rate_set:0,ui_max_encode_delay:0,ui_min_encode_delay:0,ui_mean_encode_delay:0,ui_current_encode_delay:0,ui_buffer_data:0,ui_snd_fir_frame_key_count:0,ui_snd_fir_frame_arq_count:0,ui_snd_fir_frame_period_count:0,ui_max_channel_encode_delay:0,ui_min_channel_encode_delay:0,ui_mean_channel_encode_delay:0,ui_current_channel_encode_delay:0,ui_enc_frame_counts:0,ui_enc_bytes_out:0,ui_estimate_bitrate:0,ui_red_bytes_out:0,ui_nack_bytes_out:0,ui_enc_over_time_cnt:0,ui_enc_delay_over_time_cnt:0,ui_channel_encode_over_time_cnt:0,ui_before_pre_process_frm_cnt:0,ui_after_pre_process_frm_cnt:0,repeat_red_pkt_count:0,usable_bitrate:0,available_enc_bitrate:0,send_pkt_hungry_cnt:0,send_buffer_frm_cnt:0,advanced_frame_cnt:0,base_frame_cnt:0,avg_pre_process_time_in_period:0,max_pre_process_time:0,before_encode_lost_frm_cnt:0,us_sent_mean_lost_rate:0,ui_mean_r_t_t:0,ui_cumulative_lost:0,ui_extended_max_seq_num:0,ui_pkt_rate:0,ui_send_bit_rate:0,f_key_redundance_rate:0,f_ref_redundance_rate:0,f_no_ref_redundance_rate:0,e_enc_protocol:0,before_encode_frames_rate:0,before_send_frames_rate:0,after_send_frames_rate:0,data_cache_bytes:0,input_frame_cnt:0,input_pacing_pkt_cnt:0,input_pacing_fec_pkt_cnt:0,input_pacing_arq_pkt_cnt:0,send_fec_pkt_cnt:0,send_arq_pkt_cnt:0,nack_not_rsp_for_not_find_cnt:0,nack_not_rsp_for_key_cnt:0,nack_not_rsp_for_rtt_cnt:0,nack_not_rsp_for_time_cnt:0,nack_not_rsp_for_bw_cnt:0,deliver_red_rate:0,output_frame_cnt:0,estimate_bit_rate:0,tmmbr:0,p_frame_count:0,key_frame_count:0,bad_pkt_cnt:0,qos_estimate:3};this.buildVideoSenderInfo(t,s,e,n),s.ssrc_uid&&(r.real_band_width+=Math.round(s.bytes/(1024*l)*8),i.isVideo=!0,o.push(s))}));const h=this.getConnectionRemb(e);if(r.video_tmmbr=h>0?Math.round(h/1024):0,r.tmmbr+=r.video_tmmbr,s.length>0){const e={timestamp:XR.getCurrentTimestamp()};e.event=ZC.QoS_UP_STREAM_AUDIO,e.streams=s,n?this.mediaStatDebugInfo.push(e):this.mediaStatInfo.push(e)}if(o.length>0){const t={timestamp:XR.getCurrentTimestamp()};t.event=e?ZC.QoS_AUX_UP_STREAM_VIDEO:ZC.QoS_UP_STREAM_VIDEO,t.streams=o,n?this.mediaStatDebugInfo.push(t):this.mediaStatInfo.push(t)}}buildAudioSenderInfo(e,t,r){var i,n;if(!e)return;const o=r?this.lastSenderDebugInfo:this.lastSenderInfo,s=r?this.rtcStatsInteval:5,a=o.get("".concat(e.ssrc,"-").concat(e.uid))||{audioSendPackets:0,audioSendPacketsLost:0,audioSendBytes:0,videoSendPackets:0,videoSendPacketsLost:0,videoSendBytes:0};let c="".concat(pC,"_").concat(e.ssrc),u=CO.getLatestStats(null===(i=this.connectionsManager)||void 0===i?void 0:i.getConnectionId(),gO.STREAM_TYPE_MAIN,c);if(u){const i=this.getEncryInfo(e.uid)||XR.secretString(e.uid);t.ssrc_uid="".concat(e.ssrc,"-").concat(i),t.stream_uid=e.streamId,t.sfu_addr=this.SFUAddr;const n=u.bytesSent||0;t.bytes=na.audioSendPacketsLost?e-a.audioSendPacketsLost:0,i=t.pkts;t.pkt_loss=i>0?Math.round(r/(i+r)*100):0,a.audioSendPacketsLost=e}o.set("".concat(e.ssrc,"-").concat(e.uid),a)}addExpectInfo(e,t){t.expect_pic_w=(null==e?void 0:e.width)||0,t.expect_pic_h=(null==e?void 0:e.height)||0,t.expect_frame_rate=(null==e?void 0:e.frame)||0}addRembInfo(e,t){const r=this.getConnectionRemb(e);t.usable_bitrate=r>0?Math.round(r/1024):0}getConnectionRemb(e){let t=0;return this.connectionsManager.isConnectionsExist()?(t+=e?this.getRemb(gO.STREAM_TYPE_AUX):this.getRemb(gO.STREAM_TYPE_MAIN),t):t}getRemb(e){let t=0;try{const r=CO.getLatestReport(this.connectionsManager.getConnectionId(),e);if(r){const e=r.get("candidate-pair");e&&Object.prototype.hasOwnProperty.call(e,"availableOutgoingBitrate")&&(t=e.availableOutgoingBitrate||0)}}catch(jN){this.logger.error(this.module_,"getRemb failed",jN)}return t}buildVideoSenderInfo(e,t,r,i){var n,o;if(!e)return;const s=i?this.lastSenderDebugInfo:this.lastSenderInfo,a=i?this.rtcStatsInteval:5,c=s.get("".concat(e.ssrc,"-").concat(e.uid))||{audioSendPackets:0,audioSendPacketsLost:0,audioSendBytes:0,videoSendPackets:0,videoSendPacketsLost:0,videoSendBytes:0};this.addExpectInfo(e,t),this.addRembInfo(r,t);const u="".concat(mC,"_").concat(e.ssrc),d=CO.getLatestStats(null===(n=this.connectionsManager)||void 0===n?void 0:n.getConnectionId(),r?gO.STREAM_TYPE_AUX:gO.STREAM_TYPE_MAIN,u);if(d){const n=this.getEncryInfo(e.uid)||XR.secretString(e.uid);t.ssrc_uid="".concat(e.ssrc,"-").concat(n),t.stream_uid=e.streamId,t.sfu_addr=this.SFUAddr,AO.buildCommonVideoSendInfo(t,d,e,r);const o=XR.getValue(d.bytesSent,0);t.bytes=oc.videoSendPacketsLost?e-c.videoSendPacketsLost:0,i=t.pkts;t.pkt_loss=Math.round(r/(i+r)*100)}else t.pkt_loss=0;c.videoSendPacketsLost=e,t.rtt=Math.round(1e3*(h.roundTripTime||0))}s.set("".concat(e.ssrc,"-").concat(e.uid),c)}static buildCommonVideoSendInfo(e,t,r,i){if(i){var n;const t=null===(n=r.publishInfo)||void 0===n?void 0:n.stream;e.image_width=(null==t?void 0:t.getScreenWidth())||0,e.image_height=(null==t?void 0:t.getScreenHeight())||0,e.frame_rate=(null==t?void 0:t.getScreenFrameRate())||0}else e.image_width=(null==r?void 0:r.width)||0,e.image_height=(null==r?void 0:r.height)||0,e.frame_rate=(null==r?void 0:r.frame)||0;e.image_width=t.frameWidth||0,e.image_height=t.frameHeight||0,e.frame_rate=Math.round(t.framesPerSecond||0),e.first_frame_count=t.firCount||0,e.frame_count=t.framesSent||0}async buildRtcStatsDebugInfo(e){this.rtcStatsInteval=e;const t={mediaStatsDebugInfo:null,mediaStatsSumDebugInfo:null};return this.connectionsManager.isConnectionsExist()?(await this.getSenderInfo(!0),await this.getReceiverInfo(!0),t.mediaStatsDebugInfo=this.mediaStatDebugInfo,t.mediaStatsSumDebugInfo=this.mediaStatSumDebugInfo,this.mediaStatDebugInfo=[],this.mediaStatSumDebugInfo=[],t):(this.logger.debug(this.module_,"peerConnection is undefined"),t)}}class wO{constructor(e,t){i(this,"eventInfoMap",new Map),i(this,"reqInfoMap",new Map),i(this,"sfuInfo",{ipAddress:"",videoPort:0,audioPort:0,auxPort:0}),i(this,"deviceInfo",{audioOutputId:void 0,audioInputId:void 0,videoInputId:void 0}),i(this,"mediaOpsData",[]),i(this,"signalSendMsgs",[]),i(this,"signalReceiveMsgs",[]),i(this,"parentSpanIdMap",new Map),i(this,"spanIdMap",new Map),this.logger=e,this.mediaStats=new AO(e),this.module_="RTCStat",this.commInfo={},this.commInfo.instance_id=XR.getDeviceID(),t&&(this.commInfo.appid=t.appId,this.commInfo.domain=t.domain),this.commInfo.sdk_name="hwwebrtc",this.commInfo.corp="",this.commInfo.service_name="rtc",this.commInfo.operator="",this.commInfo.sdk_version="web-".concat(uA,"-").concat(dA),this.signalSendMsgs.push("BYE"),this.signalSendMsgs.push("PUSH_STREAM_RES_ALL"),this.signalSendMsgs.push("APPLY_PUSH_STREAM"),this.signalSendMsgs.push("AUDIO_POLICY"),this.signalSendMsgs.push("SWITCH_ROLE"),this.signalSendMsgs.push("CHANGE_STREAM_STATUS"),this.signalSendMsgs.push("APP_DATA"),this.signalSendMsgs.push("ENABLE_AUDIO"),this.signalSendMsgs.push("DISABLE_AUDIO"),this.signalSendMsgs.push("ENABLE_VIDEO"),this.signalSendMsgs.push("DISABLE_VIDEO"),this.signalSendMsgs.push("JOIN_ROOM"),this.signalSendMsgs.push("EXIT_ROOM"),this.signalSendMsgs.push("PING"),this.signalSendMsgs.push("PUSH_STREAM_RESULT"),this.signalSendMsgs.push("GET_ROOM_USERINFO"),this.signalSendMsgs.push("QUERY_PUBLISH"),this.signalSendMsgs.push("START_PUBLISH"),this.signalSendMsgs.push("STOP_PUSH_STREAM"),this.signalSendMsgs.push("STOP_PUBLISH"),this.signalSendMsgs.push("CANCEL_SUBS_STREAM"),this.signalSendMsgs.push("SUBS_STREAM"),this.signalSendMsgs.push("UPDATE_PUBLISH"),this.signalReceiveMsgs.push("WATCH_STREAM_NOTIFY")}static isStatiscEnable(){return"off"!==pO.getParameter(oO)}addCommInfo(e){return e.timestamp=XR.getCurrentTimestamp(),e.trace_id=this.commInfo.trace_id||"",e.instance_id=this.commInfo.instance_id,e.room_uid=this.commInfo.room_uid||"",e.domain=this.commInfo.domain||"",e.event_name=(null==e?void 0:e.event_name)||"",e.appid=this.commInfo.appid||"",e.corp=this.commInfo.corp||"",e.room_id=this.commInfo.room_id||"",e.user_id=this.getMediaStat().getEncryInfo(this.commInfo.user_id)||XR.secretString(this.commInfo.user_id)||"",e.sdk_version=this.commInfo.sdk_version||"",e.sdk_name=this.commInfo.sdk_name||"",e.service_name=this.commInfo.service_name||"",e.operator=this.commInfo.operator||"",e.net_type=XR.getNetworkType()||"",e.country="",e.province="",e.city="",e}setRemoteUserManager(e){this.remoteUserManager=e,this.mediaStats.setRemoteUserManager(e)}clearMediaStatBytes(){this.mediaStats.clearMediaStatBytes()}async collectReceiverDecodedFrameMap(){return this.mediaStats.getVideoReceiverFrameDecodedMap()}setLocalUserInfo(e){this.commInfo.room_id=e.roomId,this.commInfo.user_id=e.userId,this.user=e}setTraceInfo(e){this.commInfo.trace_id=e}setRoomUid(e){this.commInfo.room_uid=e}setSFUAddress(e){this.sfuInfo=e,e.ipAddress&&this.mediaStats.setSFUAddr(e.ipAddress)}getMediaStat(){return this.mediaStats}leaveRoom(){this.mediaCollectionTimer&&clearTimeout(this.mediaCollectionTimer),this.mediaStats.leaveRoom()}startMediaCollector(){clearTimeout(this.mediaCollectionTimer),this.mediaCollectionTimer=setTimeout((async()=>{try{await this.mediaStats.dealStats(),this.setMediaStatInfo(),this.setMediaStatSumInfo(),this.setInBoundAudioSsrcInfos(),nO.addRecords(this.mediaOpsData),this.mediaOpsData.length=0}catch(jN){this.logger.error(this.module_,"startMediaCollector failed ".concat(jN))}finally{this.startMediaCollector()}}),5e3)}reportAudioMuteInfo(e,t){const r=t?1:3;let i;i=1===e?zC.INPUT_AUDIO:zC.OUTPUT_AUDIO,this.reportSwitchDevicesInfo(i,this.deviceInfo.audioInputId,0,r)}reportVideoMuteInfo(e,t){const r=t?4:5;this.reportSwitchDevicesInfo(zC.INPUT_VIDEO,this.deviceInfo.videoInputId,0,r)}async setDeviceStatusInfo(){(async function(){return new Promise(((e,t)=>{navigator.mediaDevices&&navigator.mediaDevices.enumerateDevices||t(new qc(Gc.RTC_ERR_CODE_NOT_SUPPORT_MEDIA_DEVICES)),navigator.mediaDevices.enumerateDevices().then((r=>{if(r&&0!==r.length){const t={};r.forEach((e=>{"default"!==e.deviceId&&"communications"!==e.deviceId&&(t[e.kind]=[...t[e.kind]||[],e])})),e(t)}else t(new qc(Gc.RTC_ERR_CODE_NO_AVAILABLE_DEVICES))})).catch((e=>{t(e)}))}))})().then((e=>{this.setSpeakerDeviceInfo(e.audiooutput||[]),this.setCameraDeviceInfo(e.videoinput||[]),this.setMicrophoneDeviceInfo(e.audioinput||[])})).catch((e=>{this.logger.error(this.module_,"getRTCDeviceGroups failed ".concat(e))}))}recordUploadRequsetInfo(e){if(null!=e&&e.type&&"PING"!==e.type)switch(this.reqInfoMap.set(e.requestId,e),e.type){case"JOIN_ROOM":e.eventId=$C.EVENT_JOIN_ROOM,this.eventInfoMap.set(e.eventId,e);break;case"EXIT_ROOM":e.eventId=$C.EVENT_LEAVE_ROOM,this.eventInfoMap.set(e.eventId,e);break;case"SWITCH_ROLE":e.eventId=$C.EVENT_SWITCH_ROLE,this.eventInfoMap.set(e.eventId,e);break;case"PUSH_STREAM_RES_ALL":if(e.videoStreams&&e.videoStreams.length>0){e.videoStreams.find((e=>(null==e?void 0:e.content)===CC.desktop))&&(e.eventId=$C.EVENT_SEND_AUX_STREAM,this.eventInfoMap.set(e.eventId,e))}}}getDownloadRequestInfo(e){if(null==e||!e.requestId)return"";if("PONG"===e.resultMessage)return"PONG";const t=this.reqInfoMap.get(e.requestId);return t&&(null==t?void 0:t.type)||""}recordDownloadRequestInfo(e){if(null==e||!e.requestId)return;if("PONG"===e.resultMessage)return;const t=this.reqInfoMap.get(e.requestId);if(t){switch(this.reportSignalRepForServer2Web(t,e),t.type){case"SUBS_STREAM":t.videoUpstreams&&this.reportVideoSub(t.videoSubType,t.requestId,t.videoUpstreams,e.resultCode,e.resultMessage),t.audioUpstreams&&this.reportAudioSub(t.audioSubType,t.requestId,t.audioUpstreams,e.resultCode);break;case"PUSH_STREAM_RES_ALL":t.videoStreams&&t.videoStreams.length>0&&this.reportUpStreamVideoInfo(t.videoStreams,t.requestId,e.resultCode);break;case"AUDIO_POLICY":this.reportAudioPolicyInfo(t.audioPolicy,t.requestId,e.resultCode)}this.reqInfoMap.delete(e.requestId)}}setMediaStatInfo(){const e=this.mediaStats.getMediaStatInfo()||[];e.forEach((e=>{this.addCommInfo(e)})),this.mediaOpsData=this.mediaOpsData.concat(e)}setMediaStatSumInfo(){const e=this.mediaStats.getMediaStatSum()||[];e.forEach((e=>{this.addCommInfo(e)})),this.mediaOpsData=this.mediaOpsData.concat(e)}setInBoundAudioSsrcInfos(){const e=this.mediaStats.getInBoundAudioSsrc()||[];e.forEach((e=>{this.addCommInfo(e)})),this.mediaOpsData=this.mediaOpsData.concat(e)}setRequestId(e){const t=this.eventInfoMap.get(e.event);return t&&(e.request_id=t.requestId),this}transformJoinInfoResult(e){if(!e&&0!==e)return cA.INTERNAL_ERROR;let t=cA.INTERNAL_ERROR;switch(e){case Gc.RTC_ERR_CODE_SUCCESS:t=cA.SUCCESS;break;case Gc.RTC_ERR_CODE_WEBSOCKET_NOT_CONNECTED:case Gc.RTC_ERR_CODE_WEBSOCKET_INTERRUPTED:case Gc.RTC_ERR_CODE_WEBSOCKET_RECONNECT_TIMEOUT:case Gc.RTC_ERR_CODE_WEBSOCKET_CONNECT_TIMEOUT:case Gc.RTC_ERR_CODE_WEBSOCKET_CONNECT_ERROR:case Gc.RTC_ERR_CODE_STATUS_ERROR:t=cA.NETWORK_CONNECT_ERROR;break;case Gc.RTC_ERR_CODE_WAIT_CONFIG_FAIL:case Gc.RTC_ERR_CODE_WEBSOCKET_NOT_OPEN:t=cA.SERVER_ERROR;break;case Gc.RTC_ERR_CODE_INVALID_PARAMETER:t=cA.INTERNAL_ERROR}return t}reportJoinInfo(e,t,r,i,n){var o,s;this.getMediaStat().setACSAddr(t);const a={};a.event=$C.EVENT_JOIN_ROOM,a.access_addr=t,a.sfu_addr=this.sfuInfo.ipAddress,a.aport=this.sfuInfo.audioPort,a.vport=this.sfuInfo.videoPort,this.setRequestId(a),a.result=this.transformJoinInfoResult(e),a.platform="web-"+XR.getPlatform(),a.user_agent="web-"+XR.getUserAgent(),a.role=null===(o=this.user)||void 0===o?void 0:o.role,a.join_qos=JSON.stringify(i||{}),a.is_rejoin=r?1:0,a.nick_name=XR.shieldNickname((null===(s=this.user)||void 0===s?void 0:s.userName)||""),a.time_diff_server=0,a.failMessage="".concat(e||" ").concat(n||" "),this.addCommInfo(a),this.joinTime=a.timestamp,this.eventInfoMap.delete($C.EVENT_JOIN_ROOM),nO.reportRecords([a])}reportRelayJoinInfo(e){var t;const r={};r.event=$C.EVENT_JOIN_ROOM,r.access_addr=e.acsAddr,r.sfu_addr=this.sfuInfo.ipAddress,r.aport=this.sfuInfo.audioPort,r.vport=this.sfuInfo.videoPort,r.request_id=e.requestId,r.result=this.transformJoinInfoResult(e.code),r.platform="web-"+XR.getPlatform(),r.user_agent="web-"+XR.getUserAgent(),r.role=e.role,r.join_qos=JSON.stringify({}),r.is_rejoin=0,r.nick_name=XR.shieldNickname((null===(t=this.user)||void 0===t?void 0:t.userName)||""),r.time_diff_server=0,r.failMessage="".concat(e.code||" ").concat(e.failMessage||" "),this.addCommInfo(r),r.trace_id=e.traceId,r.room_id=e.roomId,r.room_uid=String(e.roomUid),nO.reportRecords([r])}reportRelayLeavInfo(e){const t={};t.event=$C.EVENT_LEAVE_ROOM,t.reason=0,t.result=e.code,t.a_snd_lost_mean=0,t.v_snd_lost_mean=0,t.a_snd_band_width_mean=0,t.v_snd_band_width_mean=0,t.a_snd_rtt_mean=0,t.a_recv_rtt_mean=0,t.v_snd_rtt_mean=0,t.v_recv_rtt_mean=0,t.a_recv_lost_mean=0,t.v_recv_lost_mean=0,t.a_recv_band_width_mean=0,t.v_recv_band_width_mean=0,t.freeze_200ms_cnt=0,t.freeze_600ms_cnt=0,t.freeze_1000ms_cnt=0,t.stut_time_mean=0,t.freeze_400ms_cnt=0,t.freeze_200ms_rate=0,t.freeze_400ms_rate=0,t.freeze_600ms_rate=0,t.freeze_1000ms_rate=0,t.v_snd_frame_rate=0,t.v_snd_pkt_rate=0,t.a_snd_pkt_rate=0,t.v_recv_frame_rate=0,t.v_recv_pkt_rate=0,t.a_recv_pkt_rate=0,t.v_snd_jitter=0,t.v_recv_jitter=0,this.addCommInfo(t),t.trace_id=e.traceId,t.room_id=e.roomId,t.room_uid=String(e.roomUid),t.request_id=e.requestId,t.elapsed=0,nO.reportRecords([t])}reportLeavInfo(e){const t={};t.event=$C.EVENT_LEAVE_ROOM,t.reason=0,t.result=e,t.a_snd_lost_mean=0,t.v_snd_lost_mean=0,t.a_snd_band_width_mean=0,t.v_snd_band_width_mean=0,t.a_snd_rtt_mean=0,t.a_recv_rtt_mean=0,t.v_snd_rtt_mean=0,t.v_recv_rtt_mean=0,t.a_recv_lost_mean=0,t.v_recv_lost_mean=0,t.a_recv_band_width_mean=0,t.v_recv_band_width_mean=0,t.freeze_200ms_cnt=0,t.freeze_600ms_cnt=0,t.freeze_1000ms_cnt=0,t.stut_time_mean=0,t.freeze_400ms_cnt=0,t.freeze_200ms_rate=0,t.freeze_400ms_rate=0,t.freeze_600ms_rate=0,t.freeze_1000ms_rate=0,t.v_snd_frame_rate=0,t.v_snd_pkt_rate=0,t.a_snd_pkt_rate=0,t.v_recv_frame_rate=0,t.v_recv_pkt_rate=0,t.a_recv_pkt_rate=0,t.v_snd_jitter=0,t.v_recv_jitter=0,t.elapsed=(XR.getCurrentTimestamp()-this.joinTime)/1e3,this.addCommInfo(t),this.setRequestId(t),this.eventInfoMap.delete($C.EVENT_LEAVE_ROOM),nO.reportRecords([t])}reportVideoSub(e,t,r,i,n){const o=[],s=[],a=[],c=[],u=[];null==r||r.forEach((e=>{const t=this.getMediaStat().getEncryInfo(e.pUserId)||XR.secretString(e.pUserId)||"";s.push(t),o.push(e.pSsrcId),u.push((null==e?void 0:e.code)||0);const r=this.remoteUserManager.getStreamInfoByPStreamUid(e.pStreamUid);if(r){const e=EO.getResolutionType(r.width,r.height);a.push(e&&e.toUpperCase().replace("-",""))}else this.logger.warn(this.module_,"Can not getStreamInfoByPStreamUid for reportVideoSub");c.push(String(e.pStreamUid))}));const d={event:$C.EVENT_WATCH,action:aA[e],request_id:t,ssrc_list:o.join(","),stream_uid_list:c.join(","),uid_list:s.join(","),img_list:a.join(","),reasonList:u.join(","),result:i,failMessage:0===i?"":n};this.addCommInfo(d),nO.reportRecords([d])}reportSwitchDevicesInfo(e,t,r){let i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:6;e===zC.OUTPUT_AUDIO?this.deviceInfo.audioOutputId=t:e==zC.INPUT_AUDIO?this.deviceInfo.audioInputId=t:e===zC.INPUT_VIDEO&&(this.deviceInfo.videoInputId=t);const n={event:$C.EVENT_SWITCH_DEVICE,type:e,name:t,result:r,opt:i};this.addCommInfo(n),nO.addRecord(n)}reportSwitchRoleInfo(e,t){const r={event:$C.EVENT_SWITCH_ROLE,role:e,result:t};this.setRequestId(r),this.addCommInfo(r),nO.addRecord(r)}reportStartSendMediaStream(e,t){const r={event:$C.EVENT_SEND_MEDIA,type:e,opt:t};this.addCommInfo(r),nO.reportRecords([r])}setMediaCaptureSucc(e,t){const r={event:$C.EVENT_START_MEDIA,type:e,dev_name:t};this.addCommInfo(r),nO.addRecord(r)}reportAuxiliaryStreamShareInfo(e,t){const r={event:$C.EVENT_SEND_AUX_STREAM,action:e,result:t};this.setRequestId(r),this.addCommInfo(r),nO.reportRecords([r])}setAudioSubscribeInfo(e,t,r){const i=[];let n;null==e||e.forEach((e=>{const t={uid:this.getMediaStat().getEncryInfo(null==e?void 0:e.userid)||XR.secretString(null==e?void 0:e.userid)||"",ssrc:(null==e?void 0:e.ssrc)||0};i.push(t),n=e.action-1}));const o={event:$C.EVENT_SUBSCIBE,request_id:t,policy:this.getMediaStat().getAudioPolicy(),streams:i,action:n,result:r};this.addCommInfo(o),nO.reportRecords([o])}reportAudioSub(e,t,r,i){const n=[];null==r||r.forEach((e=>{const t={uid:this.getMediaStat().getEncryInfo(null==e?void 0:e.pUserId)||XR.secretString(null==e?void 0:e.pUserId)||"",ssrc:(null==e?void 0:e.pSsrcId)||0,reason:(null==e?void 0:e.code)||0};n.push(t)}));const o={event:$C.EVENT_SUBSCIBE,request_id:t,policy:this.getMediaStat().getAudioPolicy(),streams:n,action:e,result:i};this.addCommInfo(o),nO.reportRecords([o])}setConnectionStatusInfo(e,t){const r={timestamp:0,event:$C.EVENT_CONNECTION_CHANNEL_STATUS,type:t,on:e};this.addCommInfo(r),nO.reportRecords([r])}reportUpStreamVideoInfo(e,t,r){const i=[],n=[];e.forEach((e=>{n.push(EO.getResolution(e.width,e.height)),i.push("".concat(e.width,"*").concat(e.height))}));const o={event:$C.EVENT_SET_UP_STREAM,request_id:t,resolution_name_list:n.join(","),width_height_list:i.join(","),result:0===r?GC.SUCCESS:GC.FAIL};this.addCommInfo(o),nO.addRecord(o)}reportAudioPolicyInfo(e,t,r){const i={event:$C.EVENT_SET_AUDIO_POLICY,request_id:t,policy:e,result:r,topn:e===_O.TOPN_AUDIOPOLICY?3:17};this.addCommInfo(i),nO.addRecord(i)}setSysBasicInfo(){const e={event:eA.DEVICE_RT_SYSTEM,device_cpu:0,app_cpu:0,mem_ratio:0};this.addCommInfo(e),nO.addRecord(e)}setCameraInfo(e,t){const r={event:eA.DEVICE_RT_CAMERA,cap_format:0,cap_width:(null==e?void 0:e.width)||0,cap_height:(null==e?void 0:e.height)||0,cap_frame_rate:(null==e?void 0:e.frameRate)||0,out_width:(null==t?void 0:t.width)||0,out_height:(null==t?void 0:t.height)||0,out_cap_frames:(null==t?void 0:t.frameRate)||0,cap_overtime_cnt:0,frame_capture_time:0,render_frame_rate:0,frame_render_time:0};this.addCommInfo(r),nO.addRecord(r)}setSpeakerInputInfo(){const e={event:eA.DEVICE_RT_SPEAKER,dst_down_vel:0,dst_down_nel:0,speaker_vol:0,speaker_play_err_num:0};this.addCommInfo(e),nO.addRecord(e)}setMicrophoneInfo(){const e={event:eA.DEVICE_RT_MICROPHONE,src_cap_vel:0,src_cap_nel:0,src_mic_vol_scale:0,capture_abnormal:0,mic_vol:0,mic_recoder_err_num:0};this.addCommInfo(e),nO.addRecord(e)}async setSpeakerDeviceInfo(e){const t=[];for(let i=0;i5?s-5:0),c=5;ct!==e)):this.clientEventEmitter=null}registerDeviceChangedNotify(){let e=!1;AC().then((e=>{(!e||e.length<=0)&&this.logger.info(MO,"no device available now"),e=e||[],this.preDevices=new Map;for(const t of e)iE.addPrivacyString(t.deviceId),t.deviceId&&"default"!==t.deviceId&&"communications"!==t.deviceId&&this.preDevices.set(t.deviceId,t.kind)})).finally((()=>{navigator.mediaDevices.ondevicechange=async t=>{if(t.isTrusted){if(this.deviceChangeCallBack.push(this.handleDeviceChangeEvent.bind(this)),!e)for(;this.deviceChangeCallBack.length>0;)e=!0,await this.deviceChangeCallBack.shift()(),this.deviceChangeCallBack.length<1&&(e=!1)}else this.logger.error(MO,"device change event trigger by script")}}))}async handleDeviceChangeEvent(){let e=await AC();e=e||[];const t=new Map;for(const i of e)i.deviceId&&"default"!==i.deviceId&&"communications"!==i.deviceId&&t.set(i.deviceId,i.kind);let r=this.internalEventEmitters;this.clientEventEmitter&&(r=[...this.internalEventEmitters,this.clientEventEmitter]),this.preDevices.forEach(((e,i)=>{t.has(i)||(this.logger.info(MO,"deviceType: ".concat(e," deviceId: ").concat(i," remove")),r.forEach((t=>{t.emit(UC[kO[e]],{deviceId:i,state:PO})})),this.stat.setDeviceChangedInfo(e,i,1))})),t.forEach(((e,t)=>{this.preDevices.has(t)||(this.logger.info(MO,"deviceType: ".concat(e," deviceId: ").concat(t," add")),r.forEach((r=>{r.emit(UC[kO[e]],{deviceId:t,state:OO})})),this.stat.setDeviceChangedInfo(e,t,0))})),this.preDevices=t}};function NO(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,i)}return r}function UO(e){for(var t=1;t1&&void 0!==arguments[1]?arguments[1]:{},i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:2e4,o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0,s=arguments.length>5?arguments[5]:void 0,a=0;for(;a1&&void 0!==arguments[1]?arguments[1]:{},i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},n=arguments.length>3?arguments[3]:void 0,o=arguments.length>4?arguments[4]:void 0;const s=new Promise(((e,r)=>{t=setTimeout((()=>{clearTimeout(t),r(new qc(Gc.RTC_ERR_CODE_WAIT_RSP_TIMEOUT))}),n)})),a=new Promise(((n,s)=>{fetch(this.getFetchUrl(e),UO(UO(UO({},this.defaultRequestOption),r),{headers:i})).then((t=>{if(XR.syncLocalTime(t.headers.get("Date")),!t.ok)return 504===t.status?this.logger.error(xO,"[HTTP_ID:".concat(o,"] doFetch failed: 504")):0===t.status?this.logger.error(xO,"[HTTP_ID:".concat(o,"] doFetch failed: 0")):this.logger.error(xO,"[HTTP_ID:".concat(o,"] doFetch failed: ").concat(t.status)),void s(new qc(t.status,"network error"));let r;const a=t.headers.get("Content-Type")||i["Content-Type"];r=/.*application\/json.*/.test(a)?t.json():/^text.*/.test(a)?t.text():t.arrayBuffer(),r.then((e=>{n({httpCode:t.status,data:e})})).catch((t=>{this.logger.error(xO,"[HTTP_ID:".concat(o,"], requestUrl: ").concat(XR.shieldUrlParameters(e),", doFetch get response failed: ").concat(t)),s(new qc(null==t?void 0:t.name,null==t?void 0:t.message))}))})).catch((t=>{this.logger.error(xO,"[HTTP_ID:".concat(o,"], requestUrl: ").concat(XR.shieldUrlParameters(e),", doFetch failed for exception: ").concat(t)),s(new qc(null==t?void 0:t.name,null==t?void 0:t.message))})).finally((()=>{clearTimeout(t)}))}));return Promise.race([s,a])}extendInfosHandle(e,t,r,i,n){i&&("start"===t?Object.assign(r,{id:i.length+1,domain:e,start_ms:XR.getCurrentTimestamp(),delay_ms:0,stepName:"dispatch",rspCode:"",errMsg:""}):"end"===t?((/v1\/dns/.test(e)||/global\.talk-cloud\.net/.test(e))&&(r.start_ms=XR.adjustTimeByOffset(r.start_ms)),n instanceof qc?(r.delay_ms=XR.getCurrentTimestamp()-r.start_ms,r.rspCode="".concat(n.getCode()),r.errMsg=n.getMsg()):(r.delay_ms=XR.getCurrentTimestamp()-r.start_ms,r.rspCode=n.httpCode||"200"),i.push(r)):this.logger.info(xO,"cannot handle"))}};function BO(){}function VO(){VO.init.call(this)}function YO(e){return void 0===e._maxListeners?VO.defaultMaxListeners:e._maxListeners}function jO(e,t,r,i){var n,o,s;if("function"!=typeof r)throw new TypeError('"listener" argument must be a function');if((o=e._events)?(o.newListener&&(e.emit("newListener",t,r.listener?r.listener:r),o=e._events),s=o[t]):(o=e._events=new BO,e._eventsCount=0),s){if("function"==typeof s?s=o[t]=i?[r,s]:[s,r]:i?s.unshift(r):s.push(r),!s.warned&&(n=YO(e))&&n>0&&s.length>n){s.warned=!0;var a=new Error("Possible EventEmitter memory leak detected. "+s.length+" "+t+" listeners added. Use emitter.setMaxListeners() to increase limit");a.name="MaxListenersExceededWarning",a.emitter=e,a.type=t,a.count=s.length,function(e){"function"==typeof console.warn?console.warn(e):console.log(e)}(a)}}else s=o[t]=r,++e._eventsCount;return e}function FO(e,t,r){var i=!1;function n(){e.removeListener(t,n),i||(i=!0,r.apply(e,arguments))}return n.listener=r,n}function HO(e){var t=this._events;if(t){var r=t[e];if("function"==typeof r)return 1;if(r)return r.length}return 0}function KO(e,t){for(var r=new Array(t);t--;)r[t]=e[t];return r}BO.prototype=Object.create(null),VO.EventEmitter=VO,VO.usingDomains=!1,VO.prototype.domain=void 0,VO.prototype._events=void 0,VO.prototype._maxListeners=void 0,VO.defaultMaxListeners=10,VO.init=function(){this.domain=null,VO.usingDomains&&undefined.active,this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=new BO,this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},VO.prototype.setMaxListeners=function(e){if("number"!=typeof e||e<0||isNaN(e))throw new TypeError('"n" argument must be a positive number');return this._maxListeners=e,this},VO.prototype.getMaxListeners=function(){return YO(this)},VO.prototype.emit=function(e){var t,r,i,n,o,s,a,c="error"===e;if(s=this._events)c=c&&null==s.error;else if(!c)return!1;if(a=this.domain,c){if(t=arguments[1],!a){if(t instanceof Error)throw t;var u=new Error('Uncaught, unspecified "error" event. ('+t+")");throw u.context=t,u}return t||(t=new Error('Uncaught, unspecified "error" event')),t.domainEmitter=this,t.domain=a,t.domainThrown=!1,a.emit("error",t),!1}if(!(r=s[e]))return!1;var d="function"==typeof r;switch(i=arguments.length){case 1:!function(e,t,r){if(t)e.call(r);else for(var i=e.length,n=KO(e,i),o=0;o0;)if(r[o]===t||r[o].listener&&r[o].listener===t){s=r[o].listener,n=o;break}if(n<0)return this;if(1===r.length){if(r[0]=void 0,0==--this._eventsCount)return this._events=new BO,this;delete i[e]}else!function(e,t){for(var r=t,i=r+1,n=e.length;i0?Reflect.ownKeys(this._events):[]};const zO=new class{constructor(){i(this,"eventHandlers",{visibilitychange:()=>{let e="FOREGROUND";document.hidden&&(e="BACKGROUND");for(const t of this.eventBus.values())t.emit(e)}}),i(this,"eventListeners",{visibilitychange:e=>{"ADD"===e?document.addEventListener("visibilitychange",this.eventHandlers.visibilitychange):document.removeEventListener("visibilitychange",this.eventHandlers.visibilitychange)}}),this.eventBus=new Map,this.addListener("visibilitychange",XR.isMobileDevice.bind(XR))}register(e){const t=XR.generateRandomId(32);return this.eventBus.set(t,e),t}unregister(e){e&&this.eventBus.delete(e)}addListener(e,t){t&&!t()||this.eventListeners[e]&&this.eventListeners[e]("ADD")}removeListener(e){this.eventListeners[e]&&this.eventListeners[e]("REMOVE")}};class WO{constructor(){this.context_=new AudioContext,this.script_=this.context_.createScriptProcessor(2048,1,1),this.script_.onaudioprocess=e=>{const t=e.inputBuffer.getChannelData(0);let r=0,i=0;for(let n=0;n.99&&(i+=1);this.instant_=Math.sqrt(r/t.length),this.slow_=.95*this.slow_+.05*this.instant_,this.clip_=i/t.length},this.instant_=0,this.slow_=0,this.clip_=0}connectToSource(e){return new Promise(((t,r)=>{try{const r=new MediaStream;r.addTrack(e),this.mic_=this.context_.createMediaStreamSource(r),this.mic_.connect(this.script_),this.script_.connect(this.context_.destination),t()}catch(Aw){r(Aw)}}))}stop(){this.mic_.disconnect(),this.script_.disconnect(),this.context_.close()}getVolume(){return parseFloat(this.instant_.toFixed(2))}}class GO{constructor(e){this.module_="RTCPlayer",this.mediaStream_=new MediaStream,this.log_=e.logger,this.track_=e.track,this.playerDiv_=e.playerDiv,this.playerId_=e.playerId,this.playerElement_=null,this.state_="NONE",this.event_=new VO,this.pauseCount=0,this.listenHandlers={canPlayHandler:this.canPlayHandler.bind(this),playingHandler:this.playingHandler.bind(this),playerEndedHandler:this.playerEndedHandler.bind(this),playerPausedHandler:this.playerPausedHandler.bind(this),trackEndedHandler:this.trackEndedHandler.bind(this),trackMutedHandler:this.trackMutedHandler.bind(this),trackUnmutedHandler:this.trackUnmutedHandler.bind(this),playHandler:null,backgroundHandler:this.backgroundHandler.bind(this),foregroundHandler:this.foregroundHandler.bind(this)}}on(e,t){this.event_.on(e,t)}off(e,t){this.event_.removeListener(e,t)}foregroundHandler(){this.log_.debug("".concat(this.module_,"#").concat(this.playerId_),"handleEvents, application is foreground"),this.module_.indexOf("Audio")>0&&this.track_&&this.trackEnable!==this.track_.enabled&&(this.track_.enabled=this.trackEnable),"PAUSED"===this.state_&&(this.module_.indexOf("Video")>0?this.event_.emit("videoCanPlay"):this.event_.emit("audioCanPlay"))}backgroundHandler(){this.log_.debug("".concat(this.module_,"#").concat(this.playerId_),"handleEvents, application is background"),this.module_.indexOf("Audio")>0&&this.track_&&(this.trackEnable=this.track_.enabled,this.trackEnable&&(this.track_.enabled=!1))}canPlayHandler(){this.log_.debug("".concat(this.module_,"#").concat(this.playerId_),"handleEvents, player is canplay status"),this.event_.emit(this.module_.indexOf("Video")>0?"videoCanPlay":"audioCanPlay"),this.event_.emit(iC,{event:"playerCanplay",type:"".concat(this.module_),streamId:this.playerId_})}playingHandler(){this.log_.debug("".concat(this.module_,"#").concat(this.playerId_),"handleEvents, player is starting playing"),this.event_.emit(iC,{event:"playerPlaying",type:"".concat(this.module_),streamId:this.playerId_}),this.state_="PLAYING",this.event_.emit(Zb,{state:this.state_,reason:"playing"})}playerEndedHandler(){this.log_.debug("".concat(this.module_,"#").concat(this.playerId_),"handleEvents, player is ended"),this.event_.emit(iC,{event:"playerEnded",type:"".concat(this.module_),streamId:this.playerId_}),"STOPPED"!==this.state_&&(this.state_="STOPPED",this.event_.emit(Zb,{state:this.state_,reason:"ended"}))}playerPausedHandler(){this.log_.debug("".concat(this.module_,"#").concat(this.playerId_),"handleEvents, player is paused"),this.event_.emit(iC,{event:"playerPause",type:"".concat(this.module_),streamId:this.playerId_}),this.state_="PAUSED",this.event_.emit(Zb,{state:this.state_,reason:"pause"}),this.module_.indexOf("Video")>0?(this.log_.debug("".concat(this.module_,"#").concat(this.playerId_),"try to play again"),this.event_.emit("videoCanPlay")):(this.log_.debug("".concat(this.module_,"#").concat(this.playerId_),"try to play again"),this.event_.emit("audioCanPlay"))}trackEndedHandler(){this.log_.debug("".concat(this.module_,"#").concat(this.playerId_),"handleEvents, player track is ended"),this.event_.emit(iC,{event:"trackEnded",type:"".concat(this.module_),streamId:this.playerId_}),"STOPPED"!==this.state_&&(this.state_="STOPPED",this.event_.emit(Zb,{state:this.state_,reason:"ended",trackEnded:!0}))}trackMutedHandler(){this.log_.debug("".concat(this.module_,"#").concat(this.playerId_),"handleEvents, track is muted"),this.event_.emit(iC,{event:"trackMute",type:"".concat(this.module_),streamId:this.playerId_}),"PAUSED"!==this.state_&&(this.state_="PAUSED",this.event_.emit(Zb,{state:this.state_,reason:"mute"}))}trackUnmutedHandler(){this.log_.debug("".concat(this.module_,"#[").concat(this.playerId_,"]"),"handleEvents, track is unmuted"),this.event_.emit(iC,{event:"trackUnmute",type:"".concat(this.module_),streamId:this.playerId_}),"PAUSED"===this.state_&&(this.state_="PLAYING",this.event_.emit(Zb,{state:this.state_,reason:"unmute"}))}closeAllEvents(){var e,t,r,i,n,o,s,a,c;null===(e=this.playerElement_)||void 0===e||e.removeEventListener("canplay",this.listenHandlers.canPlayHandler),null===(t=this.playerElement_)||void 0===t||t.removeEventListener("playing",this.listenHandlers.playingHandler),null===(r=this.playerElement_)||void 0===r||r.removeEventListener("ended",this.listenHandlers.playerEndedHandler),null===(i=this.playerElement_)||void 0===i||i.removeEventListener("pause",this.listenHandlers.playerPausedHandler),null===(n=this.track_)||void 0===n||n.removeEventListener("ended",this.listenHandlers.trackEndedHandler),null===(o=this.track_)||void 0===o||o.removeEventListener("mute",this.listenHandlers.trackMutedHandler),null===(s=this.track_)||void 0===s||s.removeEventListener("unmute",this.listenHandlers.trackUnmutedHandler),null===(a=this.event_)||void 0===a||a.removeListener("videoCanPlay",this.listenHandlers.playHandler),null===(c=this.event_)||void 0===c||c.removeListener("audioCanPlay",this.listenHandlers.playHandler),this.event_.removeListener("FOREGROUND",this.listenHandlers.foregroundHandler),this.event_.removeListener("BACKGROUND",this.listenHandlers.backgroundHandler),zO.unregister(this.sysEventRegisterUid)}handleEvents(){this.playerElement_.addEventListener("canplay",this.listenHandlers.canPlayHandler),this.playerElement_.addEventListener("playing",this.listenHandlers.playingHandler),this.playerElement_.addEventListener("ended",this.listenHandlers.playerEndedHandler),this.playerElement_.addEventListener("pause",this.listenHandlers.playerPausedHandler),this.track_.addEventListener("ended",this.listenHandlers.trackEndedHandler),this.track_.addEventListener("mute",this.listenHandlers.trackMutedHandler),this.track_.addEventListener("unmute",this.listenHandlers.trackUnmutedHandler),this.event_.on("FOREGROUND",this.listenHandlers.foregroundHandler),this.event_.on("BACKGROUND",this.listenHandlers.backgroundHandler),this.sysEventRegisterUid=zO.register(this.event_)}stop(){this.closeAllEvents(),this.playerElement_&&(this.playerElement_.srcObject=null),this.playerElement_=null,this.mediaStream_=new MediaStream,this.log_.info(this.module_,"stop success")}replaceTrack(e){this.log_.info(this.module_,"replaceTrack start");const t=this.module_.indexOf("Audio")>0?this.mediaStream_.getAudioTracks():this.mediaStream_.getVideoTracks(),r=t.length?t[0]:null;r!==e&&(r&&this.mediaStream_.removeTrack(r),this.mediaStream_.addTrack(e),this.track_=e)}async resume(e){return new Promise(((t,r)=>{this.playerElement_?this.playerElement_.play().then((()=>{this.log_.info(this.module_,"audio player resume success, streamId:".concat(this.playerId_,", playParameters: ").concat(JSON.stringify(e))),t(null)})).catch((t=>{this.log_.error(this.module_,"player resume failed, errmsg=".concat(t," , playParameters: ").concat(JSON.stringify(e))),"NotAllowedError"===t.name?r(new qc(Gc.RTC_ERR_CODE_PLAY_NOT_ALLOW)):r(new qc(Gc.RTC_ERR_CODE_RTC_SDK_ERROR,t.message))})):r(new qc(Gc.RTC_ERR_CODE_INVALID_OPERATION,"resume failed, element is null"))}))}async multiPlatformAdapter(){return new Promise((e=>{if(XR.isWKWebview()){const t=window.WeixinJSBridge;t?(this.log_.info(this.module_,"multiPlatformAdapter handle begin"),t.invoke("getNetworkType",{},(()=>{e()}),!1)):document.addEventListener("WeixinJSBridgeReady",(()=>{this.log_.info(this.module_,"multiPlatformAdapter WeixinJSBridgeReady, handle begin"),t.invoke("getNetworkType",{},(()=>{e()}),!1)}))}else e()}))}async doPlay(e,t,r){let i;return await this.multiPlatformAdapter(),i=this.module_.indexOf("Video")>0?", screenFit:".concat(r.objectFit,", mirror:").concat(r.mirror):", deviceId:".concat(r.outputDeviceId,", volume:").concat(r.volume,", muted:").concat(r.muted),this.playerElement_.play().then((()=>{var t,r;this.log_.info(this.module_,"play success, parentDiv id:".concat(null===(t=this.playerDiv_)||void 0===t?void 0:t.id,", resolutionId or streamId:").concat(this.playerId_,", physical track id:").concat(null===(r=this.track_)||void 0===r?void 0:r.id).concat(i)),this.afterPlayStrategy(),e(null)})).catch((e=>{var r,n;this.log_.error(this.module_,"play failed, errmsg=".concat(e,",parentDiv id:").concat(null===(r=this.playerDiv_)||void 0===r?void 0:r.id,", resolutionId or streamId:").concat(this.playerId_,", physical track id:").concat(null===(n=this.track_)||void 0===n?void 0:n.id).concat(i)),"NotAllowedError"===e.name?t(new qc(Gc.RTC_ERR_CODE_PLAY_NOT_ALLOW)):t(new qc(Gc.RTC_ERR_CODE_RTC_SDK_ERROR,e.message))})).finally((()=>{clearTimeout(this.playTimeOutTimer)}))}afterPlayStrategy(){if(!this.pauseCount&&XR.getPlatform().indexOf("Ios15")>=0){this.log_.error(this.module_,XR.getPlatform());const e=setTimeout((()=>{clearTimeout(e),this.playerElement_.pause(),this.pauseCount++}),100)}}}class JO extends GO{constructor(e){super({logger:e.logger,track:e.track,playerDiv:e.playerDiv,playerId:e.playerId}),this.module_="RTCAudioPlayer",this.muted_=e.muted,this.outputDeviceId_="",this.volume_="number"==typeof(null==e?void 0:e.volume)?e.volume:.5,this.soundMeter_=null}async play(){return new Promise(((e,t)=>{let r,i=!0;var n;(r=this.playerDiv_?this.playerDiv_.querySelector("#audio_".concat(this.playerId_)):this.playerElement_,r)||(r=document.createElement("audio"),r.muted=this.muted_,r.setAttribute("id","audio_".concat(this.playerId_)),r.setAttribute("autoplay",""),r.setAttribute("playsinline",""),r.setAttribute("muted",""),null===(n=this.playerDiv_)||void 0===n||n.appendChild(r),i=!1);"sinkId"in HTMLMediaElement.prototype&&this.outputDeviceId_&&r.setSinkId(this.outputDeviceId_),0===this.mediaStream_.getAudioTracks().length&&this.mediaStream_.addTrack(this.track_),r.srcObject=this.mediaStream_,this.playerElement_=r,this.setVolume(this.volume_),this.handleEvents(),clearTimeout(this.playTimeOutTimer),this.playTimeOutTimer=setTimeout((()=>{this.log_.info(this.module_,"trigger audioCanPlay event by Timer"),this.event_.emit("audioCanPlay"),this.playTimeOutTimer&&(clearTimeout(this.playTimeOutTimer),this.playTimeOutTimer=setTimeout((()=>{this.log_.info(this.module_,"audio playing timeout"),clearTimeout(this.playTimeOutTimer),this.playTimeOutTimer=null,e(null)}),2e3))}),i?0:1e3),this.listenHandlers.playHandler&&this.event_.removeListener("audioCanPlay",this.listenHandlers.playHandler),this.listenHandlers.playHandler=this.doPlay.bind(this,e,t,{deviceId:this.outputDeviceId_,volume:this.volume_,muted:this.muted_}),this.event_.on("audioCanPlay",this.listenHandlers.playHandler)}))}async setSinkId(e){this.outputDeviceId_!==e&&(await this.playerElement_.setSinkId(e),this.outputDeviceId_=e)}setVolume(e){this.playerElement_.volume=e}getAudioLevel(){return this.soundMeter_||(this.soundMeter_=new WO,this.soundMeter_.connectToSource(this.track_)),this.soundMeter_.getVolume()}stop(){super.stop(),this.soundMeter_&&(this.soundMeter_.stop(),this.soundMeter_=null)}async resume(){return super.resume({streamId:this.playerId_,deviceId:this.outputDeviceId_,volume:this.volume_,muted:this.muted_})}replaceTrack(e){super.replaceTrack(e),this.soundMeter_&&(this.soundMeter_.stop(),this.soundMeter_=null)}}class qO extends GO{constructor(e){super({logger:e.logger,track:e.track,playerDiv:e.parentDiv,playerId:e.playerId}),this.module_="RTCVideoPlayer",this.objectFit_=e.objectFit,this.mirror_=e.mirror}async play(){return new Promise(((e,t)=>{let r=this.playerDiv_.querySelector("#video_".concat(this.playerId_)),i=!0;if(!r){r=document.createElement("video"),r.muted=!0;let e="0";this.mirror_&&(e="180deg"),r.setAttribute("id","video_".concat(this.playerId_)),r.style.width="100%",r.style.height="100%",r.style.position="absolute",r.style.transform="rotateY(".concat(e,")"),r.style["object-fit"]=this.objectFit_,r.setAttribute("autoplay",""),r.setAttribute("playsinline",""),r.setAttribute("muted",""),this.playerDiv_.appendChild(r),i=!1}0===this.mediaStream_.getVideoTracks().length&&this.mediaStream_.addTrack(this.track_),r.srcObject=this.mediaStream_,this.playerElement_=r,this.handleEvents(),clearTimeout(this.playTimeOutTimer),this.playTimeOutTimer=setTimeout((()=>{this.log_.info(this.module_,"trigger videoCanPlay event by Timer"),this.event_.emit("videoCanPlay"),this.playTimeOutTimer&&(clearTimeout(this.playTimeOutTimer),this.playTimeOutTimer=setTimeout((()=>{this.log_.info(this.module_,"video playing timeout"),clearTimeout(this.playTimeOutTimer),this.playTimeOutTimer=null,e(null)}),2e3))}),i?0:1e3),this.listenHandlers.playHandler&&this.event_.removeListener("videoCanPlay",this.listenHandlers.playHandler),this.listenHandlers.playHandler=this.doPlay.bind(this,e,t,{objectFit:this.objectFit_,mirror:this.mirror_}),this.event_.on("videoCanPlay",this.listenHandlers.playHandler)}))}async resume(){return super.resume({streamId:this.playerId_,screentFit:this.objectFit_,mirror:this.mirror_})}getVideoFrame(){const e=document.createElement("canvas");return e.width=this.playerElement_.videoWidth,e.height=this.playerElement_.videoHeight,e.getContext("2d").drawImage(this.playerElement_,0,0),e.toDataURL("image/png")}}function XO(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,i)}return r}function QO(e){for(var t=1;tt.startsWith("".concat(e.height))&&cC[t].width===e.width||parseInt(t)>e.height));t&&(e.maxBitrate&&e.minBitrate||(e.maxBitrate=cC[t].maxBitrate,e.minBitrate=cC[t].minBitrate),e.frameRate||(e.frameRate=cC[t].frameRate))}class ZO{static getLocalProfileByTrack(e){const t={},r=e.getSettings();if(e.kind===mO.TRACK_TYPE_AUDIO)t.sampleRate=r.sampleRate,t.channelCount=1;else{var i,n,o,s;const a=e.getConstraints();t.width=("number"==typeof a.width?a.width:null===(i=a.width)||void 0===i?void 0:i.ideal)||r.width,t.height=("number"==typeof a.height?a.height:null===(n=a.height)||void 0===n?void 0:n.ideal)||r.height,t.frameRate=("number"==typeof a.frameRate?a.frameRate:null===(o=a.frameRate)||void 0===o?void 0:o.ideal)||parseInt(null===(s=r.frameRate)||void 0===s?void 0:s.toString()),t.minBitrate=null,t.maxBitrate=null,$O(t)}return t}static formatVideoProfile(e){let t={};if(!e){return t=QO({},cC["360p_2"]),t}if("string"==typeof e){if(uC.includes(e)){t=QO({},cC[e])}}else t.height=e.height,t.width=e.width,t.frameRate=e.frameRate,t.maxBitrate=e.maxBitrate,t.minBitrate=e.minBitrate,void 0!==t.width&&void 0!==t.height||(t.width=cC["360p_2"].width,t.height=cC["360p_2"].height),$O(t);return t}static formatAudioProfile(e){let t={};if(!e){return t=QO({},sC.standard),t}if("string"==typeof e){if(aC.includes(e)){t=QO({},sC[e])}}else t.bitrate=e.bitrate,t.channelCount=e.channelCount,t.sampleRate=e.sampleRate,t.sampleRate||(t.sampleRate=16e3),t.channelCount||(t.channelCount=1),t.bitrate||(t.bitrate=24e3);return t}static formatScreenProfile(e){let t={};if(!e){return t=QO({},dC["720p"]),t}if("string"==typeof e){if(lC.includes(e)){t=QO({},dC[e])}}else t.height=e.height,t.width=e.width,t.bitrate=e.bitrate,t.frameRate=e.frameRate,t.width&&t.height||(t.width=dC["720p"].width,t.height=dC["720p"].height),t.frameRate||(t.frameRate=15),t.bitrate||(t.bitrate=dC["720p"].bitrate);return t}}const eP=XR.isSafari(),tP=(e,t)=>{XR.isSupportConstraints("aspectRatio")&&!eP&&(e.aspectRatio={ideal:t.width/t.height}),e.width=eP?{min:cC["90p_2"].width}:{min:cC["90p_2"].width,ideal:t.width},e.height=eP?{min:cC["90p_2"].height}:{min:cC["90p_2"].height,ideal:t.height},e.frameRate=t.frameRate};class rP{static getOptimalVideoConstraint(e,t){const r={},i=[];["user","environment","left","right"].includes(e)?r.facingMode={exact:e}:r.deviceId={exact:e};const n=[{width:t.width,height:t.height},{aspectRatio:t.width/t.height}];i.push(...n),tP(r,t),r.advanced=i;const o={};return o.video=r,o}static getSuboptimalVideoConstraint(e,t){const r={};["user","environment","left","right"].includes(e)?r.facingMode={exact:e}:r.deviceId={exact:e},tP(r,t);const i={};return i.video=r,i}static getNextVideoConstraint(e,t){const r={};["user","environment","left","right"].includes(e)?r.facingMode={exact:e}:r.deviceId={exact:e},tP(r,t);const i={};return i.video=r,i}static getWorstVideoConstraint(e,t){const r={};["user","environment","left","right"].includes(e)?r.facingMode={ideal:e}:r.deviceId={ideal:e},tP(r,t);const i={};return i.video=r,i}static getRecoveryVideoConstraint(){const e={video:!0};return e}static initScreenShareConstraint(e,t){const r={};if(eP?(r.video={frameRate:t.frameRate},t.width&&(r.video.width={max:t.width}),t.height&&(r.video.height={max:t.height})):r.video={width:t.width||void 0,height:t.height||void 0,frameRate:t.frameRate},e){const e={sampleRate:sC.high.sampleRate,channelCount:1,echoCancellation:!0,noiseSuppression:!0,autoGainControl:!0};Cw.isChrome()&&(e.googNoiseSuppression=!0,e.googAutoGainControl=!0,e.googAutoGainControl2=!0),r.audio=e}return r}static initAudioConstraint(e,t){const r={},i={sampleRate:t.sampleRate,channelCount:t.channelCount,deviceId:e,echoCancellation:!0};return Cw.isFirefox()&&e&&(i.deviceId={exact:e}),i.noiseSuppression=!0,i.autoGainControl=!0,Cw.isChrome()&&(i.googNoiseSuppression=!0,i.googAutoGainControl=!0,i.googAutoGainControl2=!0),r.audio=i,r}}var iP=function(e){return e[e.Stopped=0]="Stopped",e[e.Playing=1]="Playing",e[e.Closed=2]="Closed",e}(iP||{});const nP="HRTCTrack";class oP{constructor(e){this.log_=e.logger||iE.getLogger(),this.trackType_=e.trackType,this.streamType_=e.streamType,this.isRemote_=e.isRemote,this.resolutionId_=e.resolutionId,e.track?this.setLocalProfileByTrack(e.track):this.setTrackProfile(e.trackProfile),this.track_=e.track,this.playState_=iP.Closed,this.trackMuted_=!1,this.event_=e.event||new VO,this.trackType_===mO.TRACK_TYPE_AUDIO?this.statusChangeReporter_=e=>{this.event_.emit(Zb,{type:mO.TRACK_TYPE_AUDIO,id:this.getResolutionId(),state:e.state,reason:e.reason})}:this.statusChangeReporter_=e=>{this.event_.emit(Zb,{type:mO.TRACK_TYPE_VIDEO,id:this.getResolutionId(),state:e.state,reason:e.reason})},this.statusTraceReporter_=e=>{this.event_.emit(iC,e)}}async initScreenShare(e){const t=rP.initScreenShareConstraint(e,this.profile_);this.log_.info(nP,"initScreenShare, screen constraints: ".concat(JSON.stringify(t)));const r=[],i={type:mO.TRACK_TYPE_AUDIO},n={type:mO.TRACK_TYPE_VIDEO};return new Promise((o=>{navigator.mediaDevices.getDisplayMedia(t).then((t=>{const r=t.getVideoTracks()[0];this.track_&&(this.track_.stop(),this.player_&&this.player_.replaceTrack(r)),this.track_=r,n.track=r,this.content=CC.desktop,r.onended=()=>{this.event_.emit(eC,this.trackId_||this.resolutionId_)},e&&(0===(t.getAudioTracks()||[]).length?this.log_.info(nP,"initScreenShare, cannot capture system output audio, pls make sure checked the share Audio option in share page"):i.track=t.getAudioTracks()[0])})).catch((e=>{this.log_.error(nP,"initScreenShare, getDisplayMedia failed, errMsg= ".concat(e)),i.error=this.handleCaptureError(e),n.error=i.error})).finally((()=>{r.push(i),r.push(n),o(r)}))}))}async initAudioCapture(e){const t=rP.initAudioConstraint(e,this.profile_);return await this.getUserMedia(t,mO.TRACK_TYPE_AUDIO,CC.main)}async initVideoCapture(e,t){let r;return this.log_.info(nP,"initVideoCapture, try getOptimalVideoConstraint"),r=await this.getUserMedia(rP.getOptimalVideoConstraint(e,this.profile_),mO.TRACK_TYPE_VIDEO,t),oP.isTrackAvailable(r.track)?r:(this.log_.info(nP,"initVideoCapture, try getSuboptimalVideoConstraint"),r=await this.getUserMedia(rP.getSuboptimalVideoConstraint(e,this.profile_),mO.TRACK_TYPE_VIDEO,t),oP.isTrackAvailable(r.track)?r:(this.log_.info(nP,"initVideoCapture, try getNextVideoConstraint"),r=await this.getUserMedia(rP.getNextVideoConstraint(e,this.profile_),mO.TRACK_TYPE_VIDEO,t),oP.isTrackAvailable(r.track)?r:(this.log_.info(nP,"initVideoCapture, try getWorstVideoConstraint"),r=await this.getUserMedia(rP.getWorstVideoConstraint(e,this.profile_),mO.TRACK_TYPE_VIDEO,t),oP.isTrackAvailable(r.track)?r:(this.log_.info(nP,"initVideoCapture, try getRecoveryVideoConstraint"),await this.getUserMedia(rP.getRecoveryVideoConstraint(),mO.TRACK_TYPE_VIDEO,t)))))}async getUserMedia(e,t,r){const i={type:t};try{var n;null===(n=this.track_)||void 0===n||n.stop();const o=await navigator.mediaDevices.getUserMedia(e),s=t===mO.TRACK_TYPE_VIDEO?o.getVideoTracks()[0]:o.getAudioTracks()[0];return await this.replaceTrack(s),i.track=this.track_,this.content=r,i.type===mO.TRACK_TYPE_VIDEO&&this.setCameraCaptureReport(),i}catch(jN){return i.error=this.handleCaptureError(jN,t),i}}static isTrackAvailable(e){return!!e&&(e.enabled&&!e.muted&&"live"===e.readyState)}setCameraCaptureReport(){this.cameraCaptureHandleTimer&&clearInterval(this.cameraCaptureHandleTimer),this.cameraCaptureHandleTimer=setInterval((()=>{if(this.track_&&this.profile_){var e;const t=this.track_.getSettings(),r={width:this.profile_.width,height:this.profile_.height,frameRate:parseInt(null===(e=this.profile_.frameRate)||void 0===e?void 0:e.toString())||0};this.event_.emit(oC.CameraCapture,t,r)}}),2e3)}clearCameraCaptureReport(){this.cameraCaptureHandleTimer&&clearInterval(this.cameraCaptureHandleTimer)}handleCaptureError(e,t){if(/.*Malformed constraints.*/gi.test(e.message))return this.log_.warn(nP,"init ".concat(t||"screen","capture getUserMedia failed, handleCaptureError: ").concat(e)),null;const r=e.name||"";let i;return i=/.*NotAllowedError.*/gi.test(r)?new qc(Gc.RTC_ERR_CODE_CAPTURE_PERMISSION_DENIED):/.*OverConstrainedError.*/gi.test(r)?new qc(Gc.RTC_ERR_CODE_CAPTURE_OVER_CONSTRAINED):/.*NotReadableError.*/gi.test(r)?new qc(Gc.RTC_ERR_CODE_CAPTURE_DEVICE_NOT_READABLE):/.*NotFoundError.*/gi.test(r)?new qc(Gc.RTC_ERR_CODE_CAPTURE_DEVICE_NOT_FOUND):new qc(Gc.RTC_ERR_CODE_RTC_SDK_ERROR,e.message),this.log_.error(nP,"init ".concat(t||"screen","capture getUserMedia failed, handleCaptureError: ").concat(i)),i}isClosed(){return this.playState_===iP.Closed}isPlaying(){return this.playState_===iP.Playing}getTrackType(){return this.trackType_}getResolutionId(){return this.resolutionId_}getTrackId(){return this.trackId_}getElementId(){return this.elementId_}getObjectFit(){return this.objectFit_}setTrackId(e){this.trackId_=e}getTrackProfile(){return this.profile_}setTrackContentType(e){this.content=e}getTrackContentType(){return this.content||CC.main}updateTrackProfile(e){this.trackType_===mO.TRACK_TYPE_VIDEO&&e&&(this.profile_.width=e.width,this.profile_.height=e.height)}setTrackProfile(e){this.log_.info(nP,"setTrackProfile begin,uniqueId_:".concat(this.resolutionId_,", ").concat(this.trackType_,",")+"".concat(this.streamType_,", profile:").concat(JSON.stringify(e))),this.trackType_!==mO.TRACK_TYPE_AUDIO?this.trackType_!==mO.TRACK_TYPE_VIDEO||this.streamType_!==gO.STREAM_TYPE_MAIN?this.trackType_===mO.TRACK_TYPE_VIDEO&&this.streamType_===gO.STREAM_TYPE_AUX&&(this.profile_=ZO.formatScreenProfile(e)):this.profile_=ZO.formatVideoProfile(e):this.profile_=ZO.formatAudioProfile(e)}getTrack(){return this.track_}async replaceTrack(e){var t;if(e){var r;if(null===(t=this.player_)||void 0===t||t.replaceTrack(e),!this.isRemote_)null===(r=this.track_)||void 0===r||r.stop();this.track_=e,this.track_.enabled=!this.trackMuted_,this.isRemote_||(this.setLocalProfileByTrack(e),this.playState_===iP.Playing&&await this.restart())}}setLocalProfileByTrack(e){this.profile_=ZO.getLocalProfileByTrack(e),this.log_.info(nP,"setLocalProfileByTrack, this.profile_:".concat(JSON.stringify(this.profile_)))}removeTrack(){var e;(this.player_&&this.player_.stop(),this.isRemote_)||(null===(e=this.track_)||void 0===e||e.stop());this.track_=null}async play(e,t,r){const i=this.getTrackType();if(this.log_.info(nP,"".concat(i," track begin play, elementId:").concat(t,", playerDiv.id:").concat(e.id,", options:").concat(JSON.stringify(r)," ")),this.playState_===iP.Playing)return this.log_.info(nP,"".concat(i," track is playing, return")),{trackType:i,error:null};if(!this.track_)return this.log_.error(nP,"".concat(i," track is empty")),{trackType:i,error:new qc(Gc.RTC_ERR_CODE_INVALID_OPERATION,"".concat(i," track is empty"))};switch(this.elementId_=t,this.trackType_){case mO.TRACK_TYPE_AUDIO:this.player_||(this.log_.info(nP,"create AudioPlayer"),this.player_=new JO({logger:this.log_,playerDiv:e,playerId:this.getTrackId()||this.getResolutionId(),track:this.track_,muted:r.muted,volume:this.audioVolume_}));break;case mO.TRACK_TYPE_VIDEO:this.objectFit_=r.objectFit,this.player_||(this.log_.info(nP,"create VideoPlayer"),this.player_=new qO({logger:this.log_,parentDiv:e,playerId:this.getTrackId()||this.getResolutionId(),track:this.track_,objectFit:r.objectFit,mirror:r.mirror}))}this.player_.off(Zb,this.statusChangeReporter_),this.player_.on(Zb,this.statusChangeReporter_),this.player_.off(iC,this.statusTraceReporter_),this.player_.on(iC,this.statusTraceReporter_),this.log_.info(nP,"play ".concat(i," track start")),this.playState_=iP.Playing;try{return await this.player_.play(),{trackType:i,error:null}}catch(jN){const t=jN instanceof qc&&/.*timeout.*/i.test(jN.getMsg());return this.log_[t?"warn":"error"](nP,"play ".concat(i," failed: ").concat(jN)),this.playState_=iP.Stopped,{trackType:i,error:jN}}}async replay(){if(!this.player_)return this.log_.info(nP,"".concat(this.getTrackType()," player is null")),new qc(Gc.RTC_ERR_CODE_INVALID_OPERATION,"".concat(this.getTrackType()," player is null"));this.player_.off(Zb,this.statusChangeReporter_),this.player_.on(Zb,this.statusChangeReporter_),this.player_.off(iC,this.statusTraceReporter_),this.player_.on(iC,this.statusTraceReporter_),this.log_.info(nP,"rePlay ".concat(this.getTrackType()," track start")),this.playState_=iP.Playing;try{return await this.player_.play(),null}catch(jN){return this.log_.error(nP,"replay".concat(this.getTrackType(),", replay failed: ").concat(jN)),this.playState_=iP.Stopped,jN}}stop(){this.player_?(this.player_.off(Zb,this.statusChangeReporter_),this.player_.stop(),this.player_=null,this.playState_=iP.Stopped,this.trackMuted_=!1,this.log_.info(nP,"".concat(this.getTrackType()," stop player success"))):this.log_.info(nP,"".concat(this.getTrackType()," player is null"))}close(){var e;(this.stop(),this.isRemote_)||(null===(e=this.track_)||void 0===e||e.stop());this.elementId_="",this.log_.info(nP,"".concat(this.getTrackType()," close success")),this.playState_=iP.Closed,this.clearCameraCaptureReport()}async resume(){if(!this.player_)return this.log_.info(nP,"".concat(this.getTrackType()," player is null")),null;try{return await this.player_.resume(),null}catch(jN){return this.log_.error(nP,"".concat(this.getTrackType()," resume failed: ").concat(jN)),jN}}async restart(){this.player_&&(this.player_.stop(),await this.player_.play(),this.log_.info(nP,"restart success"))}getTrackMuted(){return this.track_?!this.track_.enabled:this.trackMuted_}muteTrack(){this.track_&&(this.track_.enabled=!1),this.trackMuted_=!0}unmuteTrack(){this.track_&&(this.track_.enabled=!0),this.trackMuted_=!1}async setSinkId(e){this.trackType_===mO.TRACK_TYPE_AUDIO&&this.player_&&await this.player_.setSinkId(e)}setAudioVolume(e){this.trackType_===mO.TRACK_TYPE_AUDIO&&(this.audioVolume_=e/100,this.player_&&this.player_.setVolume(this.audioVolume_))}getAudioLevel(){return this.trackType_===mO.TRACK_TYPE_AUDIO&&this.player_?this.player_.getAudioLevel():0}getVideoFrame(){return this.trackType_===mO.TRACK_TYPE_VIDEO&&this.player_?this.player_.getVideoFrame():null}setAudioOutput(e){this.trackType_===mO.TRACK_TYPE_AUDIO&&this.player_&&this.player_.setSinkId(e)}}const sP="AsyncLock";class aP{constructor(){i(this,"callback_",[]),this.callback_=[],this.logger=iE.getLogger()}async lock(e){this.logger.info(sP,"".concat(e," try to get lock")),await new Promise((t=>{const r={callbackFunc:()=>t(),lockTrigger:"".concat(e)};this.callback_.push(r),1===this.callback_.length&&(this.callback_[0].callbackFunc(),this.logger.info(sP,"".concat(this.callback_[0].lockTrigger," got lock")))}))}unlock(e){if(this.logger.info(sP,"".concat(e," try to unlock")),this.callback_.length>0){const e=this.callback_.shift();this.logger.info(sP,"".concat(e.lockTrigger," unlocked")),this.callback_.length>0&&(this.callback_[0].callbackFunc(),this.logger.info(sP,"".concat(this.callback_[0].lockTrigger," got lock")))}else this.logger.error(sP,"unlock, but no lock exist")}clear(){for(;this.callback_.length>0;)this.unlock(this.callback_[0].lockTrigger)}}const cP=new aP;function uP(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,i)}return r}function dP(e){for(var t=1;t{const n=i.value;return dP(dP({},i),{},{async value(){const t=this.locker||cP;try{var i,o;null===(i=this.log)||void 0===i||i.info(e,"function ".concat(r," is wating for lock. ")),await t.lock(e),null===(o=this.log)||void 0===o||o.info(e,"function ".concat(r," get a lock. "));for(var s=arguments.length,a=new Array(s),c=0;c{const n=i.value,o=e.substr(0,e.indexOf("$"));return dP(dP({},i),{},{async value(){let t,r;const i=XR.getCurrentTimestamp();for(var s=arguments.length,a=new Array(s),c=0;c{const n=i.value,o=e.substr(0,e.indexOf("$"));return dP(dP({},i),{},{value(){let t,r;const i=XR.getCurrentTimestamp();for(var s=arguments.length,a=new Array(s),c=0;c["object","function"].includes(typeof e)?e.getStatInfo?e.getStatInfo():e.getInfo?e.getInfo():e:e))}catch(Aw){return e}}class mP{static async callAsyncApi(e,t,r,i){let n,o;const s=XR.getCurrentTimestamp(),a=r||[];try{return o=await t.call(e,...a),o}catch(jN){throw n=jN,jN}finally{const t=XR.getCurrentTimestamp(),r=mP.doFinalParam([o,...a,e]);e.stat.setApiCallInfo(i,s,t,n,...r)}}static doFinalParam(e){return e.map((e=>["object","function"].includes(typeof e)&&e.getStatInfo?e.getStatInfo():e))}static callApi(e,t,r,i){let n,o;const s=XR.getCurrentTimestamp(),a=r||[];try{return o=t.call(e,...a),o}catch(jN){throw n=jN,jN}finally{const t=XR.getCurrentTimestamp(),r=mP.doFinalParam([o,...a,e]);e.stat.setApiCallInfo(i,s,t,n,...r)}}static callWithTimeout(e,t){let r;const i=new qc(Gc.RTC_ERR_CODE_WAIT_RSP_TIMEOUT),n=new Promise(((e,t)=>{r=t}));let o=null;return t&&(o=setTimeout((()=>{o&&clearTimeout(o),r(i)}),t)),Promise.race([e.finally((()=>{o&&clearTimeout(o)})),n])}static async callWithRetryTimes(e,t,r,i,n){let o=r>=0?r+1:-1,s=1,a=!1;for(;-1===o||o;){let c,u;try{u=await e(s)}catch(jN){c=jN,a=n&&n(c),console.warn("FunctionUtil","callWithRetryTimes, func:".concat(e.name,", isInterrupted:").concat(a,",")+"retryTimes:".concat(r,", left times:").concat(-1===o?-1:o-1,", tryNumber:").concat(s,", err: ").concat(c))}finally{if(!((c||!c&&t)&&!a&&(-1===o||--o>0))){if(!c)return u;throw c}{const e="number"==typeof i?i:i(c);await XR.sleep(e),s++}}}}}class gP{constructor(e){"boolean"!=typeof e?this.eventEmitter_=e:e&&(this.eventEmitter_=new VO)}on(e,t){this.eventEmitter.on(e,t)}off(e,t){t?this.eventEmitter.removeListener(e,t):this.eventEmitter.removeAllListeners(e)}emit(e,t){this.eventEmitter.emit(e,t)}get eventEmitter(){return this.eventEmitter_}set eventEmitter(e){this.eventEmitter_=e}}class _P{constructor(e,t){"boolean"!=typeof e?this.logger_=e:e&&(this.logger_=iE.getLogger(t))}get logger(){return this.logger_}set logger(e){this.logger_=e}}class SP{constructor(e,t){"boolean"!=typeof e?this.stat_=e:e&&(this.stat_="boolean"!=typeof t?new wO(iE.getLogger(),t):new wO(iE.getLogger()))}set stat(e){this.stat_=e}get stat(){return this.stat_}}var vP,yP,IP,TP,RP,EP,bP,CP,AP,wP,kP,OP,PP,MP,DP,NP,UP,xP,LP,BP,VP,YP,jP,FP,HP,KP,zP,WP,GP,JP,qP,XP,QP=new class{constructor(){this.gen=(()=>{let e=0;return()=>e++})()}getSequence(){return this.gen()}};class $P{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{emitter:!1,logger:!1,stat:!1,config:!1},t=arguments.length>1?arguments[1]:void 0;i(this,"onCallbackMap_",new Map),this.identifiedID_=t||Symbol("identifiedID_".concat(QP.getSequence())),!1!==e.emitter&&(this.emitterAble_=new gP(e.emitter)),!1!==e.logger&&(this.loggerAble_=new _P(e.logger,this.identifiedID_)),!1!==e.stat&&(this.statisticAble_=new SP(e.stat,e.config))}on(e,t,r){var i;r?this.onWithTimeout(e,t):null===(i=this.emitterAble_)||void 0===i||i.on(e,t)}off(e,t,r){var i;r?this.offWithTimeout(e,t):null===(i=this.emitterAble_)||void 0===i||i.off(e,t)}emit(e,t){var r;null===(r=this.emitterAble_)||void 0===r||r.emit(e,t)}onWithTimeout(e,t){var r;const i=this.getOnCallback(e,t);null===(r=this.emitterAble_)||void 0===r||r.on(e,i)}offWithTimeout(e,t){var r;null===(r=this.emitterAble_)||void 0===r||r.off(e,this.getOffCallback(e,t)||t)}getOnCallback(e,t){const r=async r=>{const i=XR.getCurrentTimestamp();let n;try{await mP.callWithTimeout(Promise.resolve(await t&&t(r)),1e4),n=XR.getCurrentTimestamp()}catch(jN){n=i+5e3}finally{var o,s;null===(o=this.stat)||void 0===o||o.recordCallbackInfo(e.toString(),null===(s=this.getInfo())||void 0===s?void 0:s.moduleName,i,n,r,(e=>["object","function"].includes(typeof e)&&e.getStatInfo?JSON.stringify(e.getStatInfo()):JSON.stringify(e||{})))}},i=this.onCallbackMap_.get(e)||[];return i.push({func:t,callbackFun:r}),this.onCallbackMap_.set(e,i),r}getOffCallback(e,t){const r=this.onCallbackMap_.get(e)||[],i=r.findIndex((e=>e.func===t));if(i>-1){var n;const e=null===(n=r[i])||void 0===n?void 0:n.callbackFun;return r.splice(i,1),e}return null}get stat(){var e;return null===(e=this.statisticAble_)||void 0===e?void 0:e.stat}get logger(){var e;return null===(e=this.loggerAble_)||void 0===e?void 0:e.logger}get eventEmitter(){if(!this.emitterAble_||!this.emitterAble_.eventEmitter)throw new qc(Gc.RTC_ERR_CODE_RTC_SDK_ERROR);return this.emitterAble_.eventEmitter}get identifiedID(){return this.identifiedID_}getStatInfo(){}}class ZP extends qc{constructor(e,t,r){super(e,t),this.captureResults=r}getMediaCaptureResult(){return this.captureResults}getMediaCaptureResultByType(e){var t;return null===(t=this.captureResults)||void 0===t?void 0:t.find((t=>t.type===e))}toString(){return'["code": '.concat(this.code,', "message": "').concat(this.message," : ").concat(JSON.stringify(this.captureResults),'"]')}}let eM=(vP=fP("Stream$getStreamInfo#StreamInfo"),yP=hP("Stream$play#Promise#string#{ objectFit?: string; muted: boolean; resolutionId?: string; playerElementHidden?: boolean }#string"),IP=fP("Stream$stop#void#StreamOption"),TP=hP("Stream$resume#Promise#StreamOption"),RP=fP("Stream$close#void#StreamOption"),EP=fP("Stream$muteAudio#boolean"),bP=fP("Stream$muteVideo#boolean"),CP=fP("Stream$unmuteAudio#boolean"),AP=fP("Stream$unmuteVideo#boolean"),wP=hP("Stream$setAudioOutput#Promise#string"),kP=fP("Stream$setAudioVolume#void#number"),OP=class extends $P{constructor(e){super({emitter:!0,logger:e.log||!0,stat:!0}),i(this,"module_","Stream"),this.isRemote_=e.isRemote,this.id_=XR.generateStreamId(),this.type_=e.type,this.isAuxiliary_="auxiliary"===e.type,this.tracks={video:new Map,audio:new Map},this.playDivContainers=new Map,this.traceHandler=this.playerStatusTrace.bind(this)}getStreamInfo(){return this.getStreamInfoImpl()}getStreamInfoImpl(){const e={videoProfiles:[]};for(const[r,i]of this.tracks[mO.TRACK_TYPE_VIDEO])if(i.getTrackType()===mO.TRACK_TYPE_VIDEO){const t={resolutionId:r,hasTrack:!!i.getTrack(),width:i.getTrackProfile().width,height:i.getTrackProfile().height,frameRate:i.getTrackProfile().frameRate,minBitrate:i.getTrackProfile().minBitrate,maxBitrate:i.getTrackProfile().maxBitrate};e.videoProfiles.push(t)}const t=this.getAnyAudioHRTCTrack();return t&&(e.audioProfile={sampleRate:t.getTrackProfile().sampleRate,channelCount:t.getTrackProfile().channelCount,bitrate:t.getTrackProfile().bitrate}),this.logger.info(this.module_,"getStreamInfoImpl success: ".concat(JSON.stringify(e))),e}getMaxResolutionHRTCTrack(e){let t;const r=Array.from(this.tracks[mO.TRACK_TYPE_VIDEO].values()),i=e?r:r.filter((e=>e.getTrack()));for(const n of i)t?t&&Math.max(n.getTrackProfile().width,n.getTrackProfile().height)-Math.max(t.getTrackProfile().width,t.getTrackProfile().height)>0&&(t=n):t=n;return t}getMaxResolutionProfile(e){if(0===e.size)return null;let t,r;for(const[i,n]of e)t?Math.max(n.width,n.height)-Math.max(t.width,t.height)>0&&(t=n,r=i):(t=n,r=i);return t?{resolutionId:r,width:t.width,height:t.height,frameRate:t.frameRate,minBitrate:t.minBitrate,maxBitrate:t.maxBitrate}:null}getHRTCTracks(e){const t=[],r=Array.from(this.tracks[mO.TRACK_TYPE_AUDIO].values()),i=Array.from(this.tracks[mO.TRACK_TYPE_VIDEO].values());if(!e)return[...r,...i];const n=void 0===e.hasTrack?r:r.filter((t=>!!t.getTrack()===e.hasTrack)),o=void 0===e.hasTrack?i:i.filter((t=>!!t.getTrack()===e.hasTrack));return e.mediaType?e.mediaType===mO.TRACK_TYPE_VIDEO?t.push(...o):t.push(...n):(t.push(...n),t.push(...o)),t}getHRTCTrackIds(e){const t=[];for(const r of this.getHRTCTracks(e))t.push(r.getTrackId());return t}getAnyVideoHRTCTrack(e){let t;return t=e?this.tracks[mO.TRACK_TYPE_VIDEO].get(e):this.getMaxResolutionHRTCTrack(!0),t}getVideoHRTCTrack(e){var t;let r;return r=e?this.tracks[mO.TRACK_TYPE_VIDEO].get(e):this.getMaxResolutionHRTCTrack(),null!==(t=r)&&void 0!==t&&t.getTrack()?r:null}getAnyAudioHRTCTrack(){return this.isAuxiliary_?this.tracks[mO.TRACK_TYPE_AUDIO].get("auxAudio"):this.tracks[mO.TRACK_TYPE_AUDIO].get("mainAudio")}getUninitializedAudioHRTCTrack(){const e=this.getAnyAudioHRTCTrack();return null!=e&&e.getTrack()?null:e}getUninitializedVideoHRTCTrack(e){var t;let r;return r=e?this.tracks[mO.TRACK_TYPE_VIDEO].get(e):this.getMaxResolutionHRTCTrack(!0),null!==(t=r)&&void 0!==t&&t.getTrack()?null:r}getAudioHRTCTrack(){const e=this.getAnyAudioHRTCTrack();return null!=e&&e.getTrack()?e:null}getUniqueId(){return this.id_}getInfo(){return{moduleName:"Stream",appId:"",roomId:"",userName:"",userId:"",domain:""}}startupPlay(e,t){this.client_.forEach((r=>{r.startupQoSReportPlay(e,t)}))}async play(e,t){const r=XR.getCurrentTimestamp();this.startupPlay(this.getUniqueId(),r),await this.playImpl(e,t)}async playImpl(e,t){let r;if(null!=t&&t.objectFit){if(!/^cover|contain|fill$/.test(t.objectFit))throw this.logger.error(this.module_,"invalid play options.objectFit: ".concat(t.objectFit)),new qc(Gc.RTC_ERR_CODE_INVALID_PARAMETER,"invalid play options.objectFit: ".concat(t.objectFit));r=t.objectFit}else r=this.isRemote_&&"auxiliary"===this.getType()?"contain":"cover";const i=!(null==t||!t.muted);if(this.logger.info(this.module_,"stream start to play with elementId: ".concat(e,", options.objectFit: ").concat(r,",options.muted: ").concat(i," resolutionId:").concat(null==t?void 0:t.resolutionId)),!e)throw this.logger.error(this.module_,"elementId:".concat(e," not a invalid HTMLElement Id")),new qc(Gc.RTC_ERR_CODE_INVALID_PARAMETER,"elementId:".concat(e," not a invalid HTMLElement Id"));const n=document.getElementById(e);if(!n)throw this.logger.error(this.module_,"document.getElementById by elementId:".concat(e," failed")),new qc(Gc.RTC_ERR_CODE_INVALID_PARAMETER,"document.getElementById by elementId:".concat(e," failed"));let o;const s=null!=t&&t.resolutionId?this.getVideoHRTCTrack(t.resolutionId):this.getMaxResolutionHRTCTrack(),a=s?s.getResolutionId():this.id_,c=this.playDivContainers.get(e);if(c){var u;o=c.HTMLElement,n.querySelector("#".concat(o.id))||n.appendChild(o),this.logger.info(this.module_,"get exist player div, key:".concat(e,", div: ").concat(null===(u=c.HTMLElement)||void 0===u?void 0:u.id))}else{o=document.createElement("div"),o.setAttribute("id","player_".concat(a)),o.style.width="100%",o.style.height="100%",o.style.position="relative",o.style.overflow="hidden",o.style["background-color"]="#000",n.appendChild(o);const t={HTMLElement:o,hasVideoTrack:!1,hasAudioTrack:!1};this.playDivContainers.set(e,t),this.logger.info(this.module_,"new player div, key:".concat(e,", div: ").concat(o.id))}o.style.display=null!=t&&t.playerElementHidden?"none":"block",await this.playTracks(e,o,r,i,null==t?void 0:t.resolutionId)}reportCanPlay(e){this.client_.forEach((t=>{t.startupQoSReportCanPlay(e)}))}playerStatusTrace(e){this.logger.debug(this.module_,"playerStatusTrace, ".concat(JSON.stringify(e))),null!=e&&e.event&&"playerCanplay"===e.event&&(e.id=this.getUniqueId(),this.reportCanPlay(e))}async playTracks(e,t,r,i,n){const o=[],s=this.isAuxiliary_?null:this.getAudioHRTCTrack(),a=n?this.getVideoHRTCTrack(n):this.getMaxResolutionHRTCTrack();null!=a&&a.getTrack()&&o.push(a.play(t,e,{objectFit:r,mirror:this.mirror_})),null!=s&&s.getTrack()&&o.push(s.play(t,e,{muted:i})),0!==o.length?(this.off(iC,this.traceHandler),this.on(iC,this.traceHandler),await Promise.all(o).then((r=>{const i=r.filter((e=>null!==e.error));i.length===o.length&&t&&t.remove();const n=r.filter((e=>null===e.error)),s=null==n?void 0:n.some((e=>e.trackType===mO.TRACK_TYPE_AUDIO)),a=null==n?void 0:n.some((e=>e.trackType===mO.TRACK_TYPE_VIDEO));if(this.playDivContainers.has(e)&&this.playDivContainers.set(e,{HTMLElement:t,hasAudioTrack:s,hasVideoTrack:a}),i.length>0)throw i[0].error}))):this.logger.warn(this.module_,"no available track for play")}stop(e){this.stopImpl(e)}stopImpl(e){var t;this.logger.info(this.module_,"stopImpl begin, option:".concat(JSON.stringify(e)));const r=this.getHRTCTracks({hasTrack:!0,mediaType:mO.TRACK_TYPE_VIDEO}),i=[];var n;(!e||e.video&&!e.resolutionIds?i.push(...r):e.video&&null!==(t=e.resolutionIds)&&void 0!==t&&t.length&&e.resolutionIds.forEach((e=>{const t=this.getVideoHRTCTrack(e);t&&i.push(t)})),i.forEach((e=>{e.stop()})),!e||e.audio)&&(null===(n=this.getAudioHRTCTrack())||void 0===n||n.stop())}async resume(e){await this.resumeImpl(e)}async resumeImpl(e){var t;this.logger.info(this.module_,"resumeImpl begin, option:".concat(JSON.stringify(e)));const r=this.getHRTCTracks({hasTrack:!0,mediaType:mO.TRACK_TYPE_VIDEO}),i=[];!e||e.video&&!e.resolutionIds?i.push(...r):e.video&&null!==(t=e.resolutionIds)&&void 0!==t&&t.length&&e.resolutionIds.forEach((e=>{const t=this.getVideoHRTCTrack(e);t&&i.push(t)}));const n=[];if(i.forEach((e=>{n.push(e.resume())})),!e||e.audio){const e=this.getAudioHRTCTrack();e&&n.push(e.resume())}await Promise.all(n)}close(e){this.closeImpl(e)}closeImpl(e){if(this.logger.info(this.module_,"closeImpl begin, options:".concat(JSON.stringify(e))),!e||e.video&&!e.resolutionIds&&e.audio){for(const e of this.getHRTCTracks({hasTrack:!0}))e.close();for(const e of this.playDivContainers.values())e.HTMLElement&&e.HTMLElement.remove();return this.playDivContainers.clear(),void DO.removeEventEmitter(this.eventEmitter)}if(e.video){var t;const r=[];if(null!==(t=e.resolutionIds)&&void 0!==t&&t.length)e.resolutionIds.forEach((e=>{const t=this.getVideoHRTCTrack(e);t&&r.push(t)}));else{const e=this.getHRTCTracks({hasTrack:!0,mediaType:mO.TRACK_TYPE_VIDEO});r.push(...e)}r.forEach((e=>{const t=null==e?void 0:e.getElementId();if(e.close(),t){const e=this.playDivContainers.get(t);var r,i,n;if(e)if(e.hasVideoTrack=!1,this.logger.debug(this.module_,"closeImpl, elementId:".concat(t,", divInfo: ").concat(null===(r=e.HTMLElement)||void 0===r?void 0:r.id,", hasAudioTrack: ").concat(e.hasAudioTrack,", hasVideoTrack: ").concat(e.hasVideoTrack,"}")),!e.hasAudioTrack)null===(i=this.playDivContainers.get(t))||void 0===i||null===(n=i.HTMLElement)||void 0===n||n.remove(),this.playDivContainers.delete(t),this.logger.info(this.module_,"closeImpl, release elementId: ".concat(t))}}))}e.audio&&this.closeAudio();this.getHRTCTracks({hasTrack:!0}).every((e=>e.isClosed()))&&(DO.removeEventEmitter(this.eventEmitter),this.mediaStream=null)}closeAudio(){const e=this.getAudioHRTCTrack();if(e){const n=e.getElementId();if(e.close(),n){const e=this.playDivContainers.get(n);var t,r,i;if(e)if(e.hasAudioTrack=!1,this.logger.debug(this.module_,"closeAudio, elementId:".concat(n,", divInfo: ").concat(null===(t=e.HTMLElement)||void 0===t?void 0:t.id,", hasAudioTrack: ").concat(e.hasAudioTrack,", hasVideoTrack: ").concat(e.hasVideoTrack,"}")),!e.hasVideoTrack)null===(r=this.playDivContainers.get(n))||void 0===r||null===(i=r.HTMLElement)||void 0===i||i.remove(),this.playDivContainers.delete(n),this.logger.info(this.module_,"closeAudio, release elementId: ".concat(n))}}}muteAudio(){return this.muteAudioImpl()}muteAudioImpl(){try{const e=this.getAudioHRTCTrack();return!!e&&(e.muteTrack(),!0)}catch(jN){return this.logger.error(this.module_,"muteAudio failed: ".concat(jN)),!1}}muteVideo(){return this.muteVideoImpl()}muteVideoImpl(){try{if(!this.hasVideoTrack())return!1;for(const e of this.getHRTCTracks({hasTrack:!0,mediaType:mO.TRACK_TYPE_VIDEO}))e.muteTrack();return!0}catch(jN){return this.logger.error(this.module_,"muteVideo failed: ".concat(jN)),!1}}unmuteAudio(){return this.unmuteAudioImpl()}unmuteAudioImpl(){try{const e=this.getAudioHRTCTrack();return!!e&&(e.unmuteTrack(),!0)}catch(jN){return this.logger.error(this.module_,"unmuteAudio failed: ".concat(jN)),!1}}unmuteVideo(){return this.unmuteVideoImpl()}unmuteVideoImpl(){try{if(!this.hasVideoTrack())return!1;for(const e of this.getHRTCTracks({hasTrack:!0,mediaType:mO.TRACK_TYPE_VIDEO}))e.unmuteTrack();return!0}catch(jN){return this.logger.error(this.module_,"unmuteVideo failed: ".concat(jN)),!1}}getId(){var e;return null===(e=this.getMaxResolutionHRTCTrack(!0))||void 0===e?void 0:e.getTrackId()}getUserId(){return this.userId_}getType(){return this.type_}async setAudioOutput(e){return this.setAudioOutputImpl(e)}async setAudioOutputImpl(e){try{const t=this.getAudioHRTCTrack();t&&await t.setSinkId(e),this.stat.reportSwitchDevicesInfo(zC.OUTPUT_AUDIO,e,sA.SUCCESS)}catch(jN){throw this.stat.reportSwitchDevicesInfo(zC.OUTPUT_AUDIO,e,sA.FAIL),jN}}setAudioVolume(e){this.setAudioVolumeImpl(e)}setAudioVolumeImpl(e){const t=this.getAudioHRTCTrack();t&&t.setAudioVolume(e)}getAudioLevel(){const e=this.getAudioHRTCTrack();return e?e.getAudioLevel():0}hasAudioTrack(){return!!this.getAudioHRTCTrack()}hasVideoTrack(){return Array.from(this.tracks[mO.TRACK_TYPE_VIDEO].values()).filter((e=>e.getTrack())).length>0}isAuxiliary(){return this.isAuxiliary_}getAudioTrack(){const e=this.getAudioHRTCTrack();return e?e.getTrack():null}getVideoTrack(e){const t=this.getVideoHRTCTrack(e);return t?t.getTrack():null}getVideoFrame(e){const t=this.getVideoHRTCTrack(e);return t?t.getVideoFrame():null}on(e,t){super.on(e,t,-1===nC.indexOf(e.toString()))}off(e,t){super.off(e,t,-1===nC.indexOf(e.toString()))}async restart(e){var t;if(e)return void(await(null===(t=this.getVideoHRTCTrack(e))||void 0===t?void 0:t.restart()));const r=[];for(const i of this.getHRTCTracks({hasTrack:!0}))r.push(i.restart());await Promise.all(r)}async rePlayAudio(){const e=this.getAudioHRTCTrack();e&&!e.isPlaying()&&await e.replay()}getStatInfo(){return{isRemote_:this.isRemote_,type_:this.type_,userId_:this.userId_,id_:this.id_,isAuxiliary_:this.isAuxiliary_}}getStatExtraInfo(){return{isRemote:this.isRemote_,id:this.id_,userId:this.userId_}}hasAudio(){var e;const t=!!(null===(e=this.getAudioHRTCTrack())||void 0===e?void 0:e.getTrack());return this.logger.debug(this.module_,"hasAudio: ".concat(t)),t}hasVideo(){const e=this.hasVideoTrack();return this.logger.debug(this.module_,"hasVideo: ".concat(e)),e}},n(OP.prototype,"getStreamInfo",[vP],Object.getOwnPropertyDescriptor(OP.prototype,"getStreamInfo"),OP.prototype),n(OP.prototype,"play",[yP],Object.getOwnPropertyDescriptor(OP.prototype,"play"),OP.prototype),n(OP.prototype,"stop",[IP],Object.getOwnPropertyDescriptor(OP.prototype,"stop"),OP.prototype),n(OP.prototype,"resume",[TP],Object.getOwnPropertyDescriptor(OP.prototype,"resume"),OP.prototype),n(OP.prototype,"close",[RP],Object.getOwnPropertyDescriptor(OP.prototype,"close"),OP.prototype),n(OP.prototype,"muteAudio",[EP],Object.getOwnPropertyDescriptor(OP.prototype,"muteAudio"),OP.prototype),n(OP.prototype,"muteVideo",[bP],Object.getOwnPropertyDescriptor(OP.prototype,"muteVideo"),OP.prototype),n(OP.prototype,"unmuteAudio",[CP],Object.getOwnPropertyDescriptor(OP.prototype,"unmuteAudio"),OP.prototype),n(OP.prototype,"unmuteVideo",[AP],Object.getOwnPropertyDescriptor(OP.prototype,"unmuteVideo"),OP.prototype),n(OP.prototype,"setAudioOutput",[wP],Object.getOwnPropertyDescriptor(OP.prototype,"setAudioOutput"),OP.prototype),n(OP.prototype,"setAudioVolume",[kP],Object.getOwnPropertyDescriptor(OP.prototype,"setAudioVolume"),OP.prototype),OP),tM=(PP=hP("LocalStream$initialize#Promise"),MP=hP("LocalStream$addAudioTrackCapture#Promise#string"),DP=hP("LocalStream$addVideoTrackCapture#Promise#VideoCaptureOption"),NP=fP("LocalStream$setAudioProfile#void#string|RTCAudioProfile"),UP=hP("LocalStream$setVideoProfile#void#string|RTCVideoProfile"),xP=hP("LocalStream$addResolution#Promise#string|RTCVideoProfile#boolean"),LP=hP("LocalStream$removeResolution#Promise#string"),BP=fP("LocalStream$setScreenProfile#void#string|RTCScreenProfile"),VP=hP("LocalStream$switchDevice#Promise#string#string"),YP=hP("LocalStream$addTrack#Promise#MediaStreamTrack#string"),jP=hP("LocalStream$removeTrack#Promise#MediaStreamTrack#string"),FP=hP("LocalStream$replaceTrack#Promise#MediaStreamTrack#string#string"),HP=fP("LocalStream$bindScreenAudio2RelatedStream#void#LocalStream#boolean"),KP=hP("LocalStream$startAudioMixing#Promise#AudioMixOption"),zP=hP("LocalStream$stopAudioMixing#Promise"),WP=fP("LocalStream$pauseAudioMixing#void"),GP=fP("LocalStream$resumeAudioMixing#void"),JP=fP("LocalStream$setAudioMixingVolume#void#number"),qP=fP("LocalStream$setAudioMixingPosition#void#number"),XP=class extends eM{constructor(e){super({isRemote:!1,type:"local",log:null}),this.module_="LocalStream",this.userId_=e.userId,this.audio_=e.audio,this.microphoneId_=e.microphoneId,this.video_=e.video,this.cameraId_=e.cameraId,this.facingMode_=e.facingMode,this.screen_=e.screen,this.isAuxiliary_=!!this.screen_,this.screenAudio_=e.screenAudio,this.audioSource_=e.audioSource,this.videoSource_=e.videoSource,this.mirror_=e.mirror,this.client_=[],this.audioMixOption_={filePath:null,startTime:0,replace:!1,loop:!1,repeatCount:1},this.audioMixInfo_={audioMixState:SC.IDLE,audioCtx:null,mediaNode:null,sourceNode:null,buffer:null,destNode:null,gainNode:null,gainValue:.5,startAt:0,pauseAt:0,pauseDur:0,playAutoEnded:!1,totalDur:0},this.mutePackageData=new Uint8Array([255,241,80,128,3,223,252,222,2,0,76,97,118,99,53,56,46,55,53,46,49,48,48,0,66,32,8,193,24,56,255,241,80,128,1,191,252,33,16,4,96,140,28,255,241,80,128,1,191,252,33,16,4,96,140,28,255,241,80,128,1,191,252,33,16,4,96,140,28,255,241,80,128,1,191,252,33,16,4,96,140,28,255,241,80,128,1,191,252,33,16,4,96,140,28,255,241,80,128,1,191,252,33,16,4,96,140,28,255,241,80,128,1,191,252,33,16,4,96,140,28,255,241,80,128,1,191,252,33,16,4,96,140,28,255,241,80,128,1,191,252,33,16,4,96,140,28,255,241,80,128,1,191,252,33,16,4,96,140,28,255,241,80,128,1,191,252,33,16,4,96,140,28,255,241,80,128,1,191,252,33,16,4,96,140,28,255,241,80,128,1,191,252,33,16,4,96,140,28,255,241,80,128,1,191,252,33,16,4,96,140,28,255,241,80,128,1,191,252,33,16,4,96,140,28,255,241,80,128,1,191,252,33,16,4,96,140,28,255,241,80,128,1,191,252,33,16,4,96,140,28,255,241,80,128,1,191,252,33,16,4,96,140,28,255,241,80,128,1,191,252,33,16,4,96,140,28,255,241,80,128,1,191,252,33,16,4,96,140,28,255,241,80,128,1,191,252,33,16,4,96,140,28,255,241,80,128,1,191,252,33,16,4,96,140,28]).buffer,this.muteSendInfo={audioMixState:SC.IDLE,audioCtx:null,mediaNode:null,sourceNode:null,destNode:null},this.screenShareMixInfo={bindStream:null,screenShareAudioNode:null,destNode:null,gainNode:null,gainValue:.5,status:SC.INIT,muteMainAudio:!1},this.videoProfiles_=new Map,this.videoContents=new Map,this.logger.info(this.module_,"new local stream, stream config: ".concat(JSON.stringify(e)))}setMediaStream(e){this.mediaStream||(this.mediaStream=new MediaStream),this.mediaStream.addTrack(e)}getMediaStream(){return this.mediaStream}getLocalId(){return this.id_}async initialize(){return await this.initializeImpl()}setVideoContentHint(e){if("detail"!==e&&"motion"!==e&&"text"!==e){const e=new qc(Gc.RTC_ERR_CODE_INVALID_PARAMETER,"invalid input parameter type");throw this.logger.error(this.module_,"setVideoContentHint fail, errMsg: ".concat(e)),e}const t=this.getVideoTrack();t&&"contentHint"in t?(t.contentHint=e,this.logger.info(this.module_,"set video track contentHint to: ".concat(e))):this.logger.info(this.module_,"no video track or no video contentHint in track")}async reset(){this.closeImpl();for(const e of this.getHRTCTracks({hasTrack:!0})){const t=e.getTrack();t&&await this.removeTrack(t)}this.tracks[mO.TRACK_TYPE_VIDEO].clear(),this.tracks[mO.TRACK_TYPE_AUDIO].clear()}initAuxStreamWithTrack(e,t){const r=[];if(e){const t=new oP({streamType:gO.STREAM_TYPE_AUX,trackType:mO.TRACK_TYPE_AUDIO,isRemote:!1,logger:this.logger,resolutionId:this.generateResolutionId(),track:e,event:this.eventEmitter});this.tracks[mO.TRACK_TYPE_AUDIO].set("auxAudio",t),r.push({type:mO.TRACK_TYPE_AUDIO,track:e})}if(t){const e=new oP({streamType:gO.STREAM_TYPE_AUX,trackType:mO.TRACK_TYPE_VIDEO,isRemote:!1,logger:this.logger,resolutionId:this.generateResolutionId(),track:t,event:this.eventEmitter});this.tracks[mO.TRACK_TYPE_VIDEO].set(e.getResolutionId(),e),r.push({type:mO.TRACK_TYPE_VIDEO,track:t})}return this.appendDefaultLocalTrack(this.getMaxResolutionProfile(this.videoProfiles_),this.audioProfile_),new ZP(Gc.RTC_ERR_CODE_SUCCESS,"",r)}async initAuxStream(){if(this.audioSource_||this.videoSource_)return this.initAuxStreamWithTrack(this.audioSource_,this.videoSource_);{var e,t,r,i;const n=new oP({streamType:gO.STREAM_TYPE_AUX,trackType:mO.TRACK_TYPE_VIDEO,isRemote:!1,trackProfile:this.screenProfile_,logger:this.logger,resolutionId:this.generateResolutionId(),event:this.eventEmitter}),o=await n.initScreenShare(this.screenAudio_),s=null===(e=o.find((e=>e.error)))||void 0===e?void 0:e.error;if(s)throw this.logger.error(this.module_,"initAuxStream, fail, errMsg = ".concat(s)),s instanceof qc?new ZP(s.getCode(),s.getMsg(),o):s;this.stat.setMediaCaptureSucc(WC.AUX,null===(t=n.getTrack())||void 0===t?void 0:t.label),this.tracks[mO.TRACK_TYPE_VIDEO].set(n.getResolutionId(),n),this.setMediaStream(null===(r=o.find((e=>e.type===mO.TRACK_TYPE_VIDEO&&e.track)))||void 0===r?void 0:r.track),this.setVideoContentHint("detail");const a=null===(i=o.find((e=>e.type===mO.TRACK_TYPE_AUDIO&&e.track)))||void 0===i?void 0:i.track;return a&&this.tracks[mO.TRACK_TYPE_AUDIO].set("auxAudio",new oP({streamType:gO.STREAM_TYPE_AUX,trackType:mO.TRACK_TYPE_AUDIO,isRemote:!1,logger:this.logger,resolutionId:this.generateResolutionId(),track:a,event:this.eventEmitter})),this.auxStreamStopByNativeHandler=()=>{this.close(),this.eventEmitter.removeListener(eC,this.auxStreamStopByNativeHandler)},this.eventEmitter.on(eC,this.auxStreamStopByNativeHandler),new ZP(Gc.RTC_ERR_CODE_SUCCESS,"",o)}}async initMainStreamWithCfg(){const e=this.getMaxResolutionProfile(this.videoProfiles_);return await this.addCaptureWithCfg(this.video_,this.audio_,e,this.audioProfile_,CC.main)}async initMainStream(){return DO.initDeviceChangedNotify(this.eventEmitter,!0),this.on(UC.CameraChanged,(e=>{"REMOVE"===e.state&&this.clearEffectiveDeviceId(e.deviceId,"videoInput")})),this.on(UC.RecordingDeviceChanged,(e=>{"REMOVE"===e.state&&this.client_.length>0&&this.client_[0].getPublishAudioSender()&&(this.startSendMutePackage(),this.clearEffectiveDeviceId(e.deviceId,"audioInput"))})),this.on(oC.CameraCapture,((e,t)=>{this.setCameraCaptureReport(e,t)})),this.audioSource_||this.videoSource_?this.initMainStreamWithTrack(this.audioSource_,this.videoSource_):await this.initMainStreamWithCfg()}async initializeImpl(){this.logger.info(this.module_,"initializeImpl begin");try{return await this.reset(),this.screen_?await this.initAuxStream():await this.initMainStream()}catch(jN){throw this.logger.error(this.module_,"initializeImpl fail, errMsg:".concat(jN)),"function"!=typeof jN.getMediaCaptureResult&&"function"==typeof jN.getCode?new ZP(jN.getCode(),jN.getMsg(),null):jN}}setCameraCaptureReport(e,t){this.client_.forEach((r=>{r.setCameraCaptureReport(e,t)}))}async addCaptureWithCfg(e,t,r,i,n){this.logger.info(this.module_,"addCaptureWithCfg begin, video:".concat(e,", audio:").concat(t,",")+"camera:".concat(this.getCurrentCameraId(),", microphone:").concat(this.getCurrentMicrophoneId(),",")+"videoProfileInfo:".concat(JSON.stringify(r),", audioProfile:").concat(JSON.stringify(i)));if((this.tracks&&this.tracks[mO.TRACK_TYPE_VIDEO].size)>=2){const e=new qc(Gc.RTC_ERR_CODE_INVALID_PARAMETER,"resolution count can not be greater than ".concat(2));throw this.logger.error(this.module_,"addCaptureWithCfg fail, errMsg is=".concat(e)),e}const o=[];let s,a;e&&(s=new oP({streamType:gO.STREAM_TYPE_MAIN,trackType:mO.TRACK_TYPE_VIDEO,isRemote:!1,trackProfile:r,logger:this.logger,resolutionId:r?r.resolutionId:this.generateResolutionId(),event:this.eventEmitter}),o.push(s.initVideoCapture(this.getCurrentCameraId()||this.facingMode_,n))),t&&(a=new oP({streamType:gO.STREAM_TYPE_MAIN,trackType:mO.TRACK_TYPE_AUDIO,isRemote:!1,trackProfile:i,logger:this.logger,resolutionId:this.generateResolutionId(),event:this.eventEmitter}),o.push(a.initAudioCapture(this.getCurrentMicrophoneId())));const c=await Promise.all(o);let u=null;for(const l of c)if(l.error)u="".concat(u).concat(u?"":";").concat(l.error.getMsg());else{var d;if(l.type===mO.TRACK_TYPE_AUDIO)this.tracks[mO.TRACK_TYPE_AUDIO].set("mainAudio",a),this.stat.setMediaCaptureSucc(WC.AUDIO,a.getTrack().label);else Array.from(Array.from(this.tracks[mO.TRACK_TYPE_VIDEO].values()).values()).some((e=>e.getTrackMuted()))&&s.muteTrack(),this.tracks[mO.TRACK_TYPE_VIDEO].set(s.getResolutionId(),s),this.stat.setMediaCaptureSucc(WC.VIDEO,null===(d=s.getTrack())||void 0===d?void 0:d.label),r&&this.videoProfiles_.set(s.getResolutionId(),r),this.videoContents.set(s.getResolutionId(),n);this.setMediaStream(l.track),this.appendDefaultLocalTrack(r,i),this.updateEffectiveDeviceInfo(l)}if(u){const e=new ZP(Gc.RTC_ERR_CODE_INVALID_OPERATION,"browser initialize capture fail, ".concat(u),c);throw this.logger.error(this.module_,"addCaptureWithCfg fail, errMsg= ".concat(e)),e}return this.logger.info(this.module_,"addCaptureWithCfg success, camera:".concat(this.getCurrentCameraId(),", microphone:").concat(this.getCurrentMicrophoneId())),new ZP(Gc.RTC_ERR_CODE_SUCCESS,"",c)}appendDefaultLocalTrack(e,t){if(!this.getAnyAudioHRTCTrack()){const e=new oP({streamType:gO.STREAM_TYPE_MAIN,trackType:mO.TRACK_TYPE_AUDIO,isRemote:!1,trackProfile:t,logger:this.logger,resolutionId:this.generateResolutionId(),event:this.eventEmitter});e.setTrackContentType(CC.main),this.tracks[mO.TRACK_TYPE_AUDIO].set("mainAudio",e),this.logger.info(this.module_,"addDefaultEmptyTrack success, audioTrack:".concat(e.getResolutionId(),",")+"track profile:".concat(JSON.stringify(e.getTrackProfile())))}if(!this.getAnyVideoHRTCTrack(null==e?void 0:e.resolutionId)){const t=new oP({streamType:gO.STREAM_TYPE_MAIN,trackType:mO.TRACK_TYPE_VIDEO,isRemote:!1,trackProfile:e,logger:this.logger,resolutionId:e?e.resolutionId:this.generateResolutionId(),event:this.eventEmitter});t.setTrackContentType(CC.main),this.tracks[mO.TRACK_TYPE_VIDEO].set(t.getResolutionId(),t),this.logger.info(this.module_,"addDefaultEmptyTrack success, videoTrack:".concat(t.getResolutionId(),",")+"track profile:".concat(JSON.stringify(t.getTrackProfile())))}}generateResolutionId(){return this.id_+"-"+XR.generateRandomId(8,16)}initMainStreamWithTrack(e,t){const r=[];if(e){const t=new oP({streamType:gO.STREAM_TYPE_MAIN,trackType:mO.TRACK_TYPE_AUDIO,isRemote:!1,logger:this.logger,resolutionId:this.generateResolutionId(),track:e,event:this.eventEmitter});this.tracks[mO.TRACK_TYPE_AUDIO].set("mainAudio",t),r.push({type:mO.TRACK_TYPE_AUDIO,track:e})}if(t){const e=new oP({streamType:gO.STREAM_TYPE_MAIN,trackType:mO.TRACK_TYPE_VIDEO,isRemote:!1,logger:this.logger,resolutionId:this.generateResolutionId(),track:t,event:this.eventEmitter});this.tracks[mO.TRACK_TYPE_VIDEO].set(e.getResolutionId(),e),r.push({type:mO.TRACK_TYPE_VIDEO,track:t})}return this.appendDefaultLocalTrack(this.getMaxResolutionProfile(this.videoProfiles_),this.audioProfile_),new ZP(Gc.RTC_ERR_CODE_SUCCESS,"",r)}async addAudioTrackCapture(e){return await this.addAudioTrackCaptureImpl(e)}async addAudioTrackCaptureImpl(e){var t;this.logger.info(this.module_,"addAudioTrackCaptureImpl, microphoneId: ".concat(e));const r=new oP({streamType:gO.STREAM_TYPE_MAIN,trackType:mO.TRACK_TYPE_AUDIO,isRemote:!1,trackProfile:this.audioProfile_,logger:this.logger,resolutionId:this.generateResolutionId(),event:this.eventEmitter}),i=await r.initAudioCapture(e||this.microphoneId_);if(i.error)throw this.logger.error(this.module_,"addAudioTrackCaptureImpl fail, errMsg: ".concat(i.error)),i.error;return this.stat.setMediaCaptureSucc(WC.AUDIO,null===(t=i.track)||void 0===t?void 0:t.label),this.updateEffectiveDeviceInfo(i),await this.addTrackImpl(i.track),i.track}async addVideoTrackCapture(e){return await this.addVideoTrackCaptureImpl(e)}async addVideoTrackCaptureImpl(e){var t;this.logger.info(this.module_,"addVideoTrackCaptureImpl, option: ".concat(JSON.stringify(e)));const r=null==e?void 0:e.resolutionId,i=r?this.videoProfiles_.get(r):this.getMaxResolutionProfile(this.videoProfiles_),n=new oP({streamType:gO.STREAM_TYPE_MAIN,trackType:mO.TRACK_TYPE_VIDEO,isRemote:!1,trackProfile:i,logger:this.logger,resolutionId:this.generateResolutionId(),event:this.eventEmitter}),o=(null==e?void 0:e.cameraId)||this.cameraId_||this.facingMode_,s=await n.initVideoCapture(o,r?this.videoContents.get(r):CC.main);if(s.error)throw this.logger.error(this.module_,"addVideoTrackCaptureImpl fail, errMsg: ".concat(s.error)),s.error;return this.updateEffectiveDeviceInfo(s),this.stat.setMediaCaptureSucc(WC.AUDIO,null===(t=s.track)||void 0===t?void 0:t.label),await this.addTrackImpl(s.track,r),s.track}updateEffectiveDeviceInfo(e){e.type===mO.TRACK_TYPE_VIDEO?(this.effectiveCameraId_=e.track.getSettings().deviceId,this.logger.info(this.module_,"updateEffectiveDeviceInfo, effectiveCameraId_: ".concat(this.effectiveCameraId_))):e.type===mO.TRACK_TYPE_AUDIO&&(this.effectiveMicrophoneId_=e.track.getSettings().deviceId,this.logger.info(this.module_,"updateEffectiveDeviceInfo, effectiveMicrophoneId_: ".concat(this.effectiveMicrophoneId_)))}getCurrentCameraId(){return this.cameraId_||this.effectiveCameraId_}getCurrentMicrophoneId(){return this.microphoneId_||this.effectiveMicrophoneId_}getAudioSendBitrate(){const e=this.getAudioHRTCTrack();return e?e.getTrackProfile().bitrate:0}isAudioMuted(){const e=this.getAudioHRTCTrack();return!e||e.getTrackMuted()}isVideoMuted(e){const t=this.getVideoHRTCTrack(e);return!t||t.getTrackMuted()}setAudioProfile(e){this.setAudioProfileImpl(e)}setAudioProfileImpl(e){const t=this.getAudioHRTCTrack();this.audioProfile_=e,null==t||t.setTrackProfile(e)}getVideoMaxBitrate(e){var t;const r=null===(t=this.getVideoHRTCTrack(e))||void 0===t?void 0:t.getTrackProfile();return r?r.maxBitrate:0}getVideoMaxSendBitrate(e){var t;const r=null===(t=this.getVideoHRTCTrack(e))||void 0===t?void 0:t.getTrackProfile();return r?r.maxBitrate<35e4?r.maxBitrate-2e4:r.maxBitrate:0}getVideoMiniBitrate(e){var t;const r=null===(t=this.getVideoHRTCTrack(e))||void 0===t?void 0:t.getTrackProfile();return r?r.minBitrate:0}getVideoWidth(e){var t;const r=null===(t=this.getVideoHRTCTrack(e))||void 0===t?void 0:t.getTrackProfile();return r?r.width:0}getVideoHeight(e){var t;const r=null===(t=this.getVideoHRTCTrack(e))||void 0===t?void 0:t.getTrackProfile();return r?r.height:0}getVideoFrameRate(e){var t;const r=null===(t=this.getVideoHRTCTrack(e))||void 0===t?void 0:t.getTrackProfile();return r?r.frameRate:0}getVideoProfile(e){var t;return null===(t=this.getVideoHRTCTrack(e))||void 0===t?void 0:t.getTrackProfile()}async setVideoProfile(e,t){await this.setVideoProfileImpl(e,t)}async addResolution(e,t){return await this.addResolutionImpl(e,t)}async addResolutionImpl(e,t){try{if(this.videoSource_||this.audioSource_)throw new qc(Gc.RTC_ERR_CODE_INVALID_OPERATION,"localStream created by videoSource or audioSource");const r=ZO.formatVideoProfile(e),i={resolutionId:this.generateResolutionId(),width:r.width,height:r.height,frameRate:r.frameRate,minBitrate:r.minBitrate,maxBitrate:r.maxBitrate};this.logger.info(this.module_,"addResolutionImpl begin, profile:".concat(JSON.stringify(i)," ")),await this.addCaptureWithCfg(!0,t,i,this.audioProfile_,CC.slides);for(const e of this.client_)await e.publish(this);return this.logger.info(this.module_,"addResolutionImpl success"),i}catch(jN){throw this.logger.error(this.module_,"addResolutionImpl fail, errMsg:".concat(jN)),"function"!=typeof jN.getMediaCaptureResult?new ZP(jN.getCode(),jN.getMsg(),null):jN}}async removeResolution(e){return this.removeResolutionImpl(e)}async removeResolutionImpl(e){this.logger.info(this.module_,"removeResolutionImpl begin, resolutionId:".concat(e));const t=this.getVideoHRTCTrack(e);if(!t)throw this.logger.error(this.module_,"removeResolutionImpl, resolutionId:".concat(e," not found ")),new qc(Gc.RTC_ERR_CODE_INVALID_OPERATION,"resolutionId:".concat(e," not found"));this.tracks[mO.TRACK_TYPE_VIDEO].delete(e),t.removeTrack();const r=this.getHRTCTracks({mediaType:mO.TRACK_TYPE_VIDEO});r&&0!==r.length||this.tracks[mO.TRACK_TYPE_AUDIO].delete("mainAudio");for(const i of this.client_)await i.publish(this);this.logger.info(this.module_,"removeResolutionImpl success, resolutionId:".concat(e))}async setVideoProfileImpl(e,t){var r;this.logger.info(this.module_,"setVideoProfile begin, profile: ".concat(JSON.stringify(e)));const i=this.getVideoHRTCTrack(t),n=ZO.formatVideoProfile(e);if(!i){const e=this.generateResolutionId();return void this.videoProfiles_.set(e,n)}const o={};XR.isSupportConstraints("aspectRatio")&&(o.aspectRatio={ideal:n.width/n.height}),o.width={ideal:n.width},o.height={ideal:n.height},o.frameRate={ideal:n.frameRate},await(null===(r=i.getTrack())||void 0===r?void 0:r.applyConstraints(o).then((()=>{this.logger.info(this.module_,"setVideoProfile, constraint: ".concat(JSON.stringify(i.getTrack().getConstraints()))),i.setLocalProfileByTrack(i.getTrack()),this.videoProfiles_.set(i.getResolutionId(),n),this.client_.forEach((async e=>{if(e){const t=e.getMainStreamSenderByTrack(i.getTrackId());await e.setSendBitrate(t,this.getVideoMaxSendBitrate(i.getResolutionId()),this.isAuxiliary()?"auxVideo":"mainVideo"),await e.publish(this)}}))})))}getScreenSendBitrate(){const e=this.getVideoHRTCTrack();return e?e.getTrackProfile().bitrate:0}getScreenWidth(){const e=this.getVideoHRTCTrack();return e?e.getTrackProfile().width:0}getScreenHeight(){const e=this.getVideoHRTCTrack();return e?e.getTrackProfile().height:0}getScreenFrameRate(){const e=this.getVideoHRTCTrack();return e?e.getTrackProfile().frameRate:0}setScreenProfile(e){this.setScreenProfileImpl(e)}setScreenProfileImpl(e){const t=this.getVideoHRTCTrack();this.screenProfile_=e,t&&t.setTrackProfile(e)}async switchVideoDevice(e){var t;this.logger.info(this.module_,"switchVideoDevice begin, cameraId is ".concat(e));const r=this.getHRTCTracks({hasTrack:!0,mediaType:mO.TRACK_TYPE_VIDEO});if(0===r.length)return void this.logger.error(this.module_,"switchVideoDevice failed, no video tracks");const i=[];for(const d of r){var n;null===(n=this.mediaStream)||void 0===n||n.removeTrack(d.getTrack()),d.setTrackProfile(this.videoProfiles_.get(d.getResolutionId())),i.push(d.initVideoCapture(e,d.getTrackContentType()))}const o=await Promise.all(i),s=[];for(const d of o){var a,c,u;if(d.error)throw d.error;null===(a=this.mediaStream)||void 0===a||a.addTrack(d.track);const e=d.track.getConstraints(),t=d.track.getSettings(),i="number"==typeof e.width?e.width:(null===(c=e.width)||void 0===c?void 0:c.ideal)||t.width,n="number"==typeof e.height?e.height:(null===(u=e.height)||void 0===u?void 0:u.ideal)||t.height,o=r.find((e=>{const t=e.getTrackProfile();return t.width===i&&t.height===n}));for(const r of this.client_){const e=r.getMainStreamSenderByTrack(null==o?void 0:o.getTrackId());e&&s.push(e.replaceTrack(d.track))}}if(o.length&&(this.cameraId_=e,this.effectiveCameraId_=e),0!==s.length){this.stat.setMediaCaptureSucc(WC.VIDEO,null===(t=o[0].track)||void 0===t?void 0:t.label),await Promise.all(s);for(const e of this.client_)await e.publish(this);this.logger.info(this.module_,"switchVideoDevice success")}else this.logger.debug(this.module_,"switchVideoDevice, no need replace sender track")}async switchAudioDevice(e){var t,r,i;this.logger.info(this.module_,"switchAudioDevice begin, microphoneId is ".concat(e));const n=this.getAudioHRTCTrack();if(!n)return void this.logger.error(this.module_,"switchAudioDevice failed, no audio tracks");null===(t=this.mediaStream)||void 0===t||t.removeTrack(n.getTrack());const o=await n.initAudioCapture(e);if(o.error)throw o.error;this.stat.setMediaCaptureSucc(WC.AUDIO,null===(r=o.track)||void 0===r?void 0:r.label),this.replaceMixAudioTrack(o.track),null===(i=this.mediaStream)||void 0===i||i.addTrack(o.track);const s=[];this.client_.forEach((e=>{const t=e.getPublishAudioSender();t&&s.push(t.replaceTrack(this.getPublishAudioTrack()))})),0===s.length&&this.logger.info(this.module_,"switchAudioDevice, no need replace sender track"),this.microphoneId_=e,this.effectiveMicrophoneId_=e,await Promise.all(s)}async switchDevice(e,t){return await this.switchDeviceImpl(e,t)}async switchDeviceImpl(e,t){return new Promise(((r,i)=>{if(this.logger.info(this.module_,"switchDeviceImpl begin, type:".concat(e,", deviceId:").concat(t)),e===mO.TRACK_TYPE_AUDIO){if("default"!==t&&(this.effectiveMicrophoneId_===t||this.audioSource_))return void r();this.switchAudioDevice(t).then((()=>{this.stopSendMutePackage(),this.stat.reportSwitchDevicesInfo(zC.INPUT_AUDIO,t,sA.SUCCESS),r()})).catch((e=>{this.stat.reportSwitchDevicesInfo(zC.INPUT_AUDIO,t,sA.FAIL),this.logger.error(this.module_,"switchDevice failed, errmsg= ".concat(e)),i(new qc(Gc.RTC_ERR_CODE_RTC_SDK_ERROR))}))}else if(e===mO.TRACK_TYPE_VIDEO){if(this.effectiveCameraId_===t||this.videoSource_)return void r();this.switchVideoDevice(t).then((()=>{this.stat.reportSwitchDevicesInfo(zC.INPUT_VIDEO,t,sA.SUCCESS),r()})).catch((e=>{this.stat.reportSwitchDevicesInfo(zC.INPUT_VIDEO,t,sA.FAIL),this.logger.error(this.module_,"switchDevice failed, errmsg= ".concat(e)),i(new qc(Gc.RTC_ERR_CODE_RTC_SDK_ERROR))}))}else i(new qc(Gc.RTC_ERR_CODE_INVALID_OPERATION,"invalid media type:".concat(e)))}))}async addTrack(e,t){return await this.addTrackImpl(e,t)}async addTrackImpl(e,t){var r;if(!e)throw this.logger.error(this.module_,"addTrack, track is null"),new qc(Gc.RTC_ERR_CODE_INVALID_OPERATION,"track is null");if(this.logger.info(this.module_,"addTrackImpl begin, resolutionId:".concat(t,", physical track id:").concat(e.id)),e.kind===mO.TRACK_TYPE_AUDIO){const r=this.getUninitializedAudioHRTCTrack();if(!r)throw this.logger.error(this.module_,"addTrackImpl failed, audio track already exist"),new qc(Gc.RTC_ERR_CODE_INVALID_OPERATION,"audio track already exist");{await r.replaceTrack(e),this.replaceMixAudioTrack(e);const i=this.getAnyVideoHRTCTrack(t),n=null!=i&&i.isPlaying()?i:null;n&&await this.play(n.getElementId(),{objectFit:n.getObjectFit(),muted:n.getTrackMuted(),resolutionId:n.getResolutionId()}),this.logger.info(this.module_,"addTrackImpl success , track type is audio,"+"physical track id:".concat(e.id))}}else{const r=this.getUninitializedVideoHRTCTrack(t);if(!r)throw this.logger.error(this.module_,"addTrackImpl failed, video track already exist"),new qc(Gc.RTC_ERR_CODE_INVALID_OPERATION,"video track already exist");{await r.replaceTrack(e);const t=this.getAnyAudioHRTCTrack(),i=null!=t&&t.isPlaying()?t:null;i&&await this.play(i.getElementId(),{objectFit:i.getObjectFit(),muted:i.getTrackMuted(),resolutionId:null}),this.logger.info(this.module_,"addTrackImpl success , track type is video,"+"physical track id:".concat(e.id))}}null===(r=this.mediaStream)||void 0===r||r.addTrack(e);for(const i of this.client_)i&&await i.publish(this)}async removeTrack(e){return await this.removeTrackImpl(e)}async removeTrackImpl(e){var t;if(!e)throw this.logger.error(this.module_,"removeTrack, track is null"),new qc(Gc.RTC_ERR_CODE_INVALID_OPERATION,"track is null");if(e.kind===mO.TRACK_TYPE_AUDIO)for(const[n,o]of this.tracks[mO.TRACK_TYPE_AUDIO]){var r;e.id===(null==o||null===(r=o.getTrack())||void 0===r?void 0:r.id)&&(o.removeTrack(),this.tracks[mO.TRACK_TYPE_AUDIO].set(n,o),this.logger.info(this.module_,"removeTrackImpl success , track type is ".concat(o.getTrackType(),",")+"physical track id:".concat(e.id)))}else for(const[n,o]of this.tracks[mO.TRACK_TYPE_VIDEO]){var i;e.id===(null==o||null===(i=o.getTrack())||void 0===i?void 0:i.id)&&(o.removeTrack(),this.tracks[mO.TRACK_TYPE_VIDEO].set(n,o),this.logger.info(this.module_,"removeTrackImpl success , track type is ".concat(o.getTrackType(),",")+"physical track id:".concat(e.id)))}null===(t=this.mediaStream)||void 0===t||t.removeTrack(e);for(const n of this.client_)n&&await n.publish(this)}async replaceTrack(e,t,r){return await this.replaceTrackImpl(e,t,r)}async replaceTrackImpl(e,t,r){var i,n,o;if(!e)throw this.logger.error(this.module_,"replaceTrack, track is null"),new qc(Gc.RTC_ERR_CODE_RTC_SDK_ERROR);let s;t===mO.TRACK_TYPE_AUDIO?(s=this.getAudioHRTCTrack(),this.replaceMixAudioTrack(e)):t===mO.TRACK_TYPE_VIDEO&&(s=this.getVideoHRTCTrack(r)),null===(i=this.mediaStream)||void 0===i||i.removeTrack(s.getTrack()),null===(n=this.mediaStream)||void 0===n||n.addTrack(e),await(null===(o=s)||void 0===o?void 0:o.replaceTrack(e));for(const a of this.client_)a&&await a.publish(this)}addClient(e){this.client_=this.client_.filter((t=>t&&t.getSymbol()!==e.getSymbol())),e&&this.client_.push(e)}removeClient(e){e&&-1!==this.client_.indexOf(e)&&this.client_.splice(this.client_.indexOf(e),1)}muteAudio(){return!!super.muteAudio()&&(this.stat.reportAudioMuteInfo(1,!0),this.client_.forEach((e=>{e.changeStreamMuteStatusNotify(!0,mO.TRACK_TYPE_AUDIO),e.reportAudioMuteInfo(1,!0)})),!0)}muteVideo(){return!!super.muteVideo()&&(this.stat.reportVideoMuteInfo(this.userId_,!0),this.client_.forEach((e=>{var t;const r=(null===(t=this.getHRTCTracks({hasTrack:!0,mediaType:mO.TRACK_TYPE_VIDEO}))||void 0===t?void 0:t.length)>1;e.changeStreamMuteStatusNotify(!0,mO.TRACK_TYPE_VIDEO,this.isAuxiliary_?CC.desktop:CC.main,r),e.reportVideoMuteInfo(this.userId_,!0)})),!0)}unmuteAudio(){return!!super.unmuteAudio()&&(this.stat.reportAudioMuteInfo(1,!1),this.client_.forEach((e=>{e.changeStreamMuteStatusNotify(!1,mO.TRACK_TYPE_AUDIO),e.reportAudioMuteInfo(1,!1)})),!0)}unmuteVideo(){return!!super.unmuteVideo()&&(this.stat.reportVideoMuteInfo(this.userId_,!1),this.client_.forEach((e=>{var t;const r=(null===(t=this.getHRTCTracks({hasTrack:!0,mediaType:mO.TRACK_TYPE_VIDEO}))||void 0===t?void 0:t.length)>1;e.changeStreamMuteStatusNotify(!1,mO.TRACK_TYPE_VIDEO,this.isAuxiliary_?CC.desktop:CC.main,r),e.reportVideoMuteInfo(this.userId_,!1)})),!0)}closeImpl(e){!1!==(null==e?void 0:e.audio)&&(this.closeScreenShareAudio(),this.isAuxiliary()||this.audioMixInfo_.playAutoEnded||this.audioMixInfo_.audioMixState===SC.IDLE||this.audioMixInfo_.audioMixState===SC.INIT||this.stopAudioMixing()),super.closeImpl(e)}clearEffectiveDeviceId(e,t){this.logger.info(this.module_,"clearEffectiveDeviceId, Input:".concat(e,", type:").concat(t)),"audioInput"===t?this.effectiveMicrophoneId_===e&&(this.effectiveMicrophoneId_="",this.logger.info(this.module_,"clearEffectiveDeviceId, audioInput:".concat(e))):"videoInput"===t&&this.effectiveCameraId_===e&&(this.effectiveCameraId_="",this.logger.info(this.module_,"clearEffectiveDeviceId, videoInput:".concat(e)))}startSendMutePackage(){var e;this.logger.debug(this.module_,"start SendMutePackage");const t=null===(e=this.getAudioHRTCTrack())||void 0===e?void 0:e.getTrack();if(!t||"ended"!==t.readyState)return void this.logger.info(this.module_,"removed device is not in use, startSendMutePackage end");if(this.muteSendInfo.audioMixState!=SC.IDLE||!this.client_[0].getPublishAudioSender())return void this.logger.info(this.module_,"the condition is not met, startSendMutePackage end");this.muteSendInfo.audioCtx||(this.muteSendInfo.audioCtx=new AudioContext);let r=this.mutePackageData.slice(0);this.muteSendInfo.audioCtx.decodeAudioData(r,(e=>{var t;this.muteSendInfo.destNode=this.muteSendInfo.audioCtx.createMediaStreamDestination(),this.muteSendInfo.sourceNode=this.muteSendInfo.audioCtx.createBufferSource(),this.muteSendInfo.sourceNode.buffer=e,this.muteSendInfo.sourceNode.connect(this.muteSendInfo.destNode),this.muteSendInfo.sourceNode.loop=!0,this.muteSendInfo.sourceNode.start(0,0),this.muteSendInfo.audioMixState=SC.PLAY,null===(t=this.client_[0].getPublishAudioSender())||void 0===t||t.replaceTrack(this.muteSendInfo.destNode.stream.getAudioTracks()[0]),this.logger.info(this.module_,"startSendMutePackage success"),r=null}),(()=>{this.muteSendInfo.audioMixState=SC.IDLE,this.logger.info(this.module_,"startSendMutePackage failed"),r=null}))}stopSendMutePackage(){var e,t,r;this.logger.info(this.module_,"stopSendMutePackage begin"),this.muteSendInfo.audioMixState===SC.PLAY?(null===(e=this.muteSendInfo.mediaNode)||void 0===e||e.connect(this.muteSendInfo.destNode),null===(t=this.muteSendInfo.sourceNode)||void 0===t||t.stop(),null===(r=this.muteSendInfo.sourceNode)||void 0===r||r.disconnect(),this.muteSendInfo.sourceNode=null,this.muteSendInfo.audioMixState=SC.IDLE):this.logger.info(this.module_,"stopSendMutePackage end")}bindScreenAudio2RelatedStream(e,t){this.bindScreenAudio2RelatedStreamImpl(e,t)}bindScreenAudio2RelatedStreamImpl(e,t){if(this.logger.info(this.module_,"bindScreenAudio2RelatedStreamImpl, streamId: ".concat(e.getId())),t&&!e.hasAudioTrack()){const t=this.getAudioTrack();if(t){const r=new oP({streamType:gO.STREAM_TYPE_MAIN,trackType:mO.TRACK_TYPE_AUDIO,isRemote:!1,logger:this.logger,resolutionId:this.generateResolutionId(),track:t,event:this.eventEmitter});e.tracks[mO.TRACK_TYPE_AUDIO].set("mainAudio",r)}}this.screenShareMixInfo.bindStream=e,e.screenShareMixInfo.bindStream=this;this.mixScreenAudio(t)||(this.screenShareMixInfo.bindStream=null,e.screenShareMixInfo.bindStream=null)}mixScreenAudio(){var e;let t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];const r=this.screenShareMixInfo.bindStream;if(!this.isAuxiliary()||null==r||!r.getAudioHRTCTrack()||!this.getAudioHRTCTrack())return this.logger.error(this.module_,"mixScreenAudio2MainStreamAudio failed, isAuxiliary: ".concat(this.isAuxiliary()," ,main stream or audio track is null")),!1;if(this.screenShareMixInfo.status=SC.PLAY,!r.audioMixInfo_.audioCtx){var i;r.audioMixInfo_.audioCtx=new AudioContext,r.audioMixInfo_.destNode=r.audioMixInfo_.audioCtx.createMediaStreamDestination();const e=null===(i=r.getAudioHRTCTrack())||void 0===i?void 0:i.getTrack();e&&(r.audioMixInfo_.mediaNode=r.audioMixInfo_.audioCtx.createMediaStreamSource(new MediaStream([e])),r.audioMixInfo_.mediaNode.connect(r.audioMixInfo_.destNode))}t&&(r.audioMixInfo_.mediaNode.disconnect(r.screenShareMixInfo.destNode),this.logger.info(this.module_,"mixScreenAudio2MainStreamAudio, only play screen share audio stream"));const n=null===(e=this.getAudioHRTCTrack())||void 0===e?void 0:e.getTrack();return this.screenShareMixInfo.screenShareAudioNode=r.audioMixInfo_.audioCtx.createMediaStreamSource(new MediaStream([n])),this.screenShareMixInfo.destNode=r.audioMixInfo_.destNode,this.screenShareMixInfo.gainNode=r.audioMixInfo_.audioCtx.createGain(),this.screenShareMixInfo.gainNode.gain.value=this.screenShareMixInfo.gainValue,this.screenShareMixInfo.screenShareAudioNode.connect(this.screenShareMixInfo.gainNode),this.screenShareMixInfo.gainNode.connect(this.screenShareMixInfo.destNode),this.screenShareMixInfo.muteMainAudio=t,!0}getPublishAudioTrack(){var e;if(this.isAuxiliary()){if(this.screenShareMixInfo.destNode&&this.screenShareMixInfo.destNode.stream){const e=this.screenShareMixInfo.destNode.stream.getAudioTracks();if(e&&e.length>0)return e[0]}}else{const e=this.screenShareMixInfo.bindStream;if(e){const t=e.client_.length>0&&e.client_[0].getPublishVideoSender(gO.STREAM_TYPE_AUX).length,r=this.audioMixInfo_.audioMixState===SC.PAUSE||this.audioMixInfo_.audioMixState===SC.PLAY;if((t||r)&&this.audioMixInfo_.destNode&&this.audioMixInfo_.destNode.stream){const e=this.audioMixInfo_.destNode.stream.getAudioTracks();if(e&&e.length>0)return e[0]}}else if(this.audioMixInfo_.destNode&&this.audioMixInfo_.destNode.stream){const e=this.audioMixInfo_.destNode.stream.getAudioTracks();if(e&&e.length>0)return e[0]}}return null===(e=super.getAudioHRTCTrack())||void 0===e?void 0:e.getTrack()}async resumeMixScreenAudio(){const e=this.screenShareMixInfo.bindStream;if(!(this.isAuxiliary()&&e&&this.screenShareMixInfo.gainNode&&this.screenShareMixInfo.destNode))return void this.logger.info(this.module_,"cannot resumeMixScreenAudio, isAuxiliary: ".concat(this.isAuxiliary()));this.screenShareMixInfo.gainNode.connect(this.screenShareMixInfo.destNode);const t=e.client_.length>0&&e.client_[0].getPublishAudioSender(),r=this.client_.length>0&&this.client_[0].getPublishVideoSender(gO.STREAM_TYPE_AUX).length;t&&r&&await e.client_[0].getPublishAudioSender().replaceTrack(this.getPublishAudioTrack())}async stopMixScreenAudio(){this.screenShareMixInfo.gainNode&&this.screenShareMixInfo.destNode?this.screenShareMixInfo.gainNode.disconnect(this.screenShareMixInfo.destNode):this.logger.info(this.module_,"stopScreenAudio gainNode or destNode is null")}setAudioVolume(e){if(this.isAuxiliary()){if(!this.screenShareMixInfo.bindStream||this.screenShareMixInfo.status!==SC.PLAY)return void this.logger.error(this.module_,"setScreenAudioVolume failed for play status error");const t=e/100;this.logger.info(this.module_,"setScreenAudioVolume: "+t),this.screenShareMixInfo.gainNode.gain.value=t,this.screenShareMixInfo.gainValue=t}else super.setAudioVolume(e)}closeScreenShareAudio(){if(this.isAuxiliary())this.screenShareMixInfo.gainNode&&this.screenShareMixInfo.gainNode.disconnect(),this.screenShareMixInfo.screenShareAudioNode&&this.screenShareMixInfo.screenShareAudioNode.disconnect(),this.screenShareMixInfo.gainNode=null,this.screenShareMixInfo.gainValue=.5,this.screenShareMixInfo.screenShareAudioNode=null,this.screenShareMixInfo.bindStream=null,this.screenShareMixInfo.status=SC.INIT;else{const e=this.screenShareMixInfo.bindStream;if(!e)return void this.logger.debug(this.module_,"closeScreenShareAudio, no need closeScreenShareAudio, aux stream is null");e.closeScreenShareAudio(),this.screenShareMixInfo.bindStream=null}}async startAudioMixing(e){await this.startAudioMixingImpl(e),this.eventEmitter.emit(rC),this.logger.info(this.module_,"emit ".concat(rC," at startAudioMixing"))}async startAudioMixingImpl(e){var t,r;if(this.logger.info(this.module_,"startAudioMixing start at: "+e.startTime),this.checkAudioMixingParameter(),this.audioMixInfo_.audioMixState===SC.IDLE&&this.initIdleAudioMixInfo(),this.audioMixInfo_.audioMixState!==SC.INIT)throw this.logger.error(this.module_,"startAudioMixing status: ".concat(this.audioMixInfo_.audioMixState)),new qc(Gc.RTC_ERR_CODE_STATUS_ERROR,"startAudioMixing status: ".concat(this.audioMixInfo_.audioMixState));(this.setAudioMixOption(e),this.audioMixOption_.replace)?this.logger.info(this.module_,"startAudioMixing: replace"):null===(r=this.audioMixInfo_.mediaNode)||void 0===r||r.connect(this.audioMixInfo_.destNode);await(null===(t=this.client_[0].getPublishAudioSender())||void 0===t?void 0:t.replaceTrack(this.audioMixInfo_.destNode.stream.getAudioTracks()[0]));try{const e=await LO.fetch(this.audioMixOption_.filePath);await this.audioMixInfo_.audioCtx.decodeAudioData(e.data,(e=>{this.audioMixInfo_.startAt=XR.getCurrentTimestamp(),this.audioMixInfo_.pauseAt=0,this.audioMixInfo_.pauseDur=0,this.audioMixInfo_.playAutoEnded=!1,this.audioMixInfo_.totalDur=0,this.audioMixInfo_.sourceNode=this.audioMixInfo_.audioCtx.createBufferSource(),this.audioMixInfo_.sourceNode.onended=()=>{Math.abs(this.audioMixInfo_.totalDur-(XR.getCurrentTimestamp()-this.audioMixInfo_.startAt-this.audioMixInfo_.pauseDur))<200&&(this.stopAudioMixing(),this.audioMixInfo_.playAutoEnded=!0,this.eventEmitter.emit(tC),this.logger.info(this.module_,"emit ".concat(tC," at startAudioMixingImpl")))},this.audioMixInfo_.sourceNode.buffer=e,this.audioMixInfo_.buffer=e,this.audioMixInfo_.sourceNode.connect(this.audioMixInfo_.gainNode),this.audioMixInfo_.gainNode.connect(this.audioMixInfo_.destNode),this.audioMixInfo_.audioMixState=SC.PLAY,this.logger.info(this.module_,"startAudioMixing, duration: ".concat(this.getAudioMixingDuration())),this.doAudioMixing(),this.logger.info(this.module_,"startAudioMixing end")}),(e=>{throw this.logger.error(this.module_,"startAudioMixing, decode audio failed"),e}))}catch(jN){var i,n,o;if(this.logger.error(this.module_,"startAudioMixing failed: ".concat(jN)),this.audioMixInfo_.audioMixState=SC.INIT,!this.audioMixOption_.replace)null===(o=this.audioMixInfo_.mediaNode)||void 0===o||o.disconnect(this.audioMixInfo_.destNode);throw null===(i=this.client_[0].getPublishAudioSender())||void 0===i||i.replaceTrack(null===(n=this.getAudioHRTCTrack())||void 0===n?void 0:n.getTrack()),jN}}doAudioMixing(){if(this.audioMixOption_.repeatCount>1){if(this.audioMixOption_.startTime>=this.getAudioMixingDuration())throw this.logger.error(this.module_,"startAudioMixing: ".concat(this.audioMixInfo_.audioMixState)),new qc(Gc.RTC_ERR_CODE_INVALID_PARAMETER,"startAudioMixing: not valid startTime");this.audioMixInfo_.sourceNode.loop=!0;const e=this.audioMixOption_.repeatCount*this.getAudioMixingDuration()-this.audioMixOption_.startTime;this.audioMixInfo_.totalDur=e,this.audioMixInfo_.sourceNode.start(0,this.audioMixOption_.startTime/1e3,e/1e3)}else this.audioMixInfo_.sourceNode.loop=this.audioMixOption_.loop,this.audioMixOption_.loop?this.audioMixInfo_.totalDur=1/0:(this.getAudioMixingDuration()<=this.audioMixOption_.startTime&&(this.logger.info(this.module_,"startAudioMixing, bookmark: ".concat(this.audioMixOption_.startTime," invalid and reset to begin.")),this.audioMixOption_.startTime=0),this.audioMixInfo_.totalDur=this.getAudioMixingDuration()-this.audioMixOption_.startTime),this.audioMixInfo_.sourceNode.start(0,this.audioMixOption_.startTime/1e3)}setAudioMixOption(e){e.replace||(e.replace=!1),e.startTime||(e.startTime=0),e.loop||(e.loop=!1),e.repeatCount&&!e.loop||(e.repeatCount=0),this.audioMixOption_=e}initIdleAudioMixInfo(){if(!this.audioMixInfo_.audioCtx){var e;this.audioMixInfo_.audioCtx=new AudioContext,this.audioMixInfo_.destNode=this.audioMixInfo_.audioCtx.createMediaStreamDestination();const t=null===(e=this.getAudioHRTCTrack())||void 0===e?void 0:e.getTrack();t&&(this.audioMixInfo_.mediaNode=this.audioMixInfo_.audioCtx.createMediaStreamSource(new MediaStream([t])))}this.audioMixInfo_.gainNode=this.audioMixInfo_.audioCtx.createGain(),this.audioMixInfo_.gainNode.gain.value=this.audioMixInfo_.gainValue,this.audioMixInfo_.audioMixState=SC.INIT}checkAudioMixingParameter(){if(!this.client_||this.client_.length<1||!this.client_[0].getPublishAudioSender())throw this.logger.error(this.module_,"startAudioMixing failed"),new qc(Gc.RTC_ERR_CODE_INVALID_OPERATION,"no mediaStream or no client or no audio!")}replaceMixAudioTrack(e){if(this.audioMixInfo_.audioMixState!==SC.IDLE&&this.audioMixInfo_.audioMixState!==SC.INIT&&this.audioMixInfo_.mediaNode&&this.audioMixInfo_.destNode){if(this.audioMixOption_.replace)return;return this.audioMixInfo_.mediaNode.disconnect(this.audioMixInfo_.destNode),this.audioMixInfo_.mediaNode=null,this.audioMixInfo_.mediaNode=this.audioMixInfo_.audioCtx.createMediaStreamSource(new MediaStream([e])),void this.audioMixInfo_.mediaNode.connect(this.audioMixInfo_.destNode)}if(!this.isAuxiliary_){var t;const r=null===(t=this.screenShareMixInfo.bindStream)||void 0===t?void 0:t.screenShareMixInfo;r&&!r.muteMainAudio&&this.audioMixInfo_.audioCtx&&this.audioMixInfo_.destNode&&(this.audioMixInfo_.mediaNode=this.audioMixInfo_.audioCtx.createMediaStreamSource(new MediaStream([e])),this.audioMixInfo_.mediaNode.connect(this.audioMixInfo_.destNode))}}async stopAudioMixing(){await this.stopAudioMixingImpl()}async stopAudioMixingImpl(){if(!this.audioMixInfo_.playAutoEnded)if(this.audioMixInfo_.audioMixState!==SC.IDLE&&this.audioMixInfo_.audioMixState!==SC.INIT){try{var e,t;await(null===(e=this.client_[0].getPublishAudioSender())||void 0===e?void 0:e.replaceTrack(null===(t=this.getAudioHRTCTrack())||void 0===t?void 0:t.getTrack()))}catch(Aw){throw this.logger.error(this.module_,"stopAudioMixing: ".concat(this.audioMixInfo_.audioMixState,", errMsg = ").concat(Aw)),new qc(Gc.RTC_ERR_CODE_RTC_SDK_ERROR)}var r;if(this.logger.info(this.module_,"stopAudioMixing"),!this.audioMixOption_.replace&&this.audioMixInfo_.audioMixState!==SC.PAUSE)null===(r=this.audioMixInfo_.mediaNode)||void 0===r||r.disconnect(this.audioMixInfo_.destNode);this.audioMixInfo_.sourceNode.stop(),this.audioMixInfo_.buffer=null,this.audioMixInfo_.sourceNode.disconnect(),this.audioMixInfo_.gainNode.disconnect(),this.audioMixInfo_.gainValue=.5,this.audioMixInfo_.sourceNode=null,this.audioMixInfo_.playAutoEnded=!1,this.audioMixInfo_.audioMixState=SC.INIT}else this.logger.info(this.module_,"stopAudioMixing: ".concat(this.audioMixInfo_.audioMixState))}pauseAudioMixing(){this.pauseAudioMixingImpl()}pauseAudioMixingImpl(){if(this.audioMixInfo_.audioMixState===SC.PLAY){this.logger.info(this.module_,"pauseAudioMixing"),this.audioMixOption_.replace||this.audioMixInfo_.mediaNode.disconnect(this.audioMixInfo_.destNode);try{var e,t;null===(e=this.client_[0].getPublishAudioSender())||void 0===e||e.replaceTrack(null===(t=this.getAudioHRTCTrack())||void 0===t?void 0:t.getTrack())}catch(Aw){throw this.logger.error(this.module_,"pauseAudioMixing, errMsg = ".concat(Aw)),new qc(Gc.RTC_ERR_CODE_RTC_SDK_ERROR)}this.audioMixInfo_.sourceNode.stop(),this.audioMixInfo_.sourceNode.disconnect(),this.audioMixInfo_.gainNode.disconnect(),this.audioMixInfo_.pauseAt=XR.getCurrentTimestamp(),this.audioMixInfo_.audioMixState=SC.PAUSE}else this.logger.error(this.module_,"pauseAudioMixing: ".concat(this.audioMixInfo_.audioMixState))}resumeAudioMixing(){this.resumeAudioMixingImpl(),this.eventEmitter.emit(rC),this.logger.info(this.module_,"emit ".concat(rC," at resumeAudioMixing"))}resumeAudioMixingImpl(){if(this.audioMixInfo_.audioMixState!==SC.PAUSE)return void this.logger.error(this.module_,"resumeAudioMixing: ".concat(this.audioMixInfo_.audioMixState));this.logger.info(this.module_,"resumeAudioMixing"),this.audioMixOption_.replace||this.audioMixInfo_.mediaNode.connect(this.audioMixInfo_.destNode);try{var e;null===(e=this.client_[0].getPublishAudioSender())||void 0===e||e.replaceTrack(this.audioMixInfo_.destNode.stream.getAudioTracks()[0])}catch(Aw){throw this.logger.error(this.module_,"pauseAudioMixing, errMsg = ".concat(Aw)),new qc(Gc.RTC_ERR_CODE_RTC_SDK_ERROR)}this.audioMixInfo_.sourceNode=this.audioMixInfo_.audioCtx.createBufferSource(),this.audioMixInfo_.sourceNode.onended=()=>{Math.abs(this.audioMixInfo_.totalDur-(XR.getCurrentTimestamp()-this.audioMixInfo_.startAt-this.audioMixInfo_.pauseDur))<200&&(this.stopAudioMixing(),this.audioMixInfo_.playAutoEnded=!0,this.eventEmitter.emit(tC),this.logger.info(this.module_,"emit ".concat(tC," at resumeAudioMixingImpl")))},this.audioMixInfo_.sourceNode.buffer=this.audioMixInfo_.buffer,this.audioMixInfo_.sourceNode.connect(this.audioMixInfo_.gainNode),this.audioMixInfo_.gainNode.connect(this.audioMixInfo_.destNode);const t=this.audioMixInfo_.pauseAt-this.audioMixInfo_.startAt-this.audioMixInfo_.pauseDur,r=t+this.audioMixOption_.startTime;if(this.audioMixOption_.repeatCount>1){this.audioMixInfo_.sourceNode.loop=!0;const e=this.audioMixOption_.repeatCount*this.getAudioMixingDuration()-this.audioMixOption_.startTime-t;this.audioMixInfo_.sourceNode.start(0,r%this.getAudioMixingDuration()/1e3,e/1e3)}else this.audioMixInfo_.sourceNode.loop=this.audioMixOption_.loop,this.audioMixInfo_.sourceNode.start(0,r%this.getAudioMixingDuration()/1e3);this.audioMixInfo_.pauseDur=this.audioMixInfo_.pauseDur+XR.getCurrentTimestamp()-this.audioMixInfo_.pauseAt,this.audioMixInfo_.audioMixState=SC.PLAY}getAudioMixingCurrentPosition(){let e=0;if(this.audioMixInfo_.audioMixState===SC.PAUSE)e=this.audioMixInfo_.pauseAt;else{if(this.audioMixInfo_.audioMixState!==SC.PLAY)return 0;e=XR.getCurrentTimestamp()}const t=this.getAudioMixingDuration();let r=(e-this.audioMixInfo_.startAt-this.audioMixInfo_.pauseDur+this.audioMixOption_.startTime)%t;return r=Math.min(Math.round(r),t),this.logger.debug(this.module_,"getAudioMixingDuration: ".concat(r)),r}getAudioMixingDuration(){if(this.audioMixInfo_.audioMixState!==SC.PLAY&&this.audioMixInfo_.audioMixState!==SC.PAUSE)return this.logger.error(this.module_,"getAudioMixingDuration failed for play status error"),0;const e=1e3*this.audioMixInfo_.sourceNode.buffer.duration;return this.logger.debug(this.module_,"getAudioMixingDuration: ".concat(e)),e}setAudioMixingVolume(e){this.setAudioMixingVolumeImpl(e)}setAudioMixingVolumeImpl(e){if(this.audioMixInfo_.audioMixState!==SC.PLAY&&this.audioMixInfo_.audioMixState!==SC.PAUSE)return void this.logger.error(this.module_,"setAudioMixingVolume failed for play status error");const t=e/100;this.logger.debug(this.module_,"setAudioMixingVolume: "+t),this.audioMixInfo_.gainValue=t,this.audioMixInfo_.gainNode.gain.value=t}setAudioMixingPosition(e){this.setAudioMixingPositionImpl(e)}setAudioMixingPositionImpl(e){if(this.audioMixInfo_.audioMixState!==SC.PLAY&&this.audioMixInfo_.audioMixState!==SC.PAUSE)return void this.logger.error(this.module_,"setAudioMixingPosition failed for play status error");const t=this.getAudioMixingDuration();if(e<0||e>t)return void this.logger.error(this.module_,"setAudioMixingPosition failed for params error");let r;this.logger.debug(this.module_,"setAudioMixingPosition: ".concat(e)),this.audioMixInfo_.mediaNode.connect(this.audioMixInfo_.destNode),this.audioMixInfo_.sourceNode.stop(),this.audioMixInfo_.sourceNode.disconnect(),this.audioMixInfo_.gainNode.disconnect(),this.audioMixInfo_.sourceNode=null,r=this.audioMixInfo_.audioMixState===SC.PAUSE?this.audioMixInfo_.pauseAt:XR.getCurrentTimestamp();const i=r-this.audioMixInfo_.startAt-this.audioMixInfo_.pauseDur+this.audioMixOption_.startTime;if(this.audioMixOption_.replace&&(this.audioMixInfo_.mediaNode.disconnect(this.audioMixInfo_.destNode),this.logger.info(this.module_,"resumeAudioMixing: replace")),this.audioMixInfo_.startAt=XR.getCurrentTimestamp(),this.audioMixInfo_.pauseAt=0,this.audioMixInfo_.pauseDur=0,this.audioMixInfo_.playAutoEnded=!1,this.audioMixInfo_.sourceNode=this.audioMixInfo_.audioCtx.createBufferSource(),this.audioMixInfo_.sourceNode.onended=()=>{Math.abs(this.audioMixInfo_.totalDur-(XR.getCurrentTimestamp()-this.audioMixInfo_.startAt-this.audioMixInfo_.pauseDur))<200&&(this.stopAudioMixing(),this.audioMixInfo_.playAutoEnded=!0,this.eventEmitter.emit(tC),this.logger.info(this.module_,"emit ".concat(tC," at setAudioMixingPositionImpl")))},this.audioMixInfo_.sourceNode.buffer=this.audioMixInfo_.buffer,this.audioMixInfo_.sourceNode.connect(this.audioMixInfo_.gainNode),this.audioMixInfo_.gainNode.connect(this.audioMixInfo_.destNode),i>=t&&this.audioMixOption_.repeatCount>1&&(this.audioMixOption_.repeatCount=Math.max(0,this.audioMixOption_.repeatCount-Math.floor(i/t))),this.audioMixOption_.repeatCount>1){this.audioMixInfo_.sourceNode.loop=!0;const r=this.audioMixOption_.repeatCount*t-e;this.audioMixInfo_.totalDur=r,this.audioMixInfo_.sourceNode.start(0,e/1e3,r/1e3)}else this.audioMixOption_.loop?this.audioMixInfo_.totalDur=1/0:this.audioMixInfo_.totalDur=t-e,this.audioMixInfo_.sourceNode.loop=this.audioMixOption_.loop,this.audioMixInfo_.sourceNode.start(0,e/1e3);this.audioMixOption_.startTime=e,this.audioMixInfo_.audioMixState===SC.PAUSE&&this.pauseAudioMixing()}getStatInfo(){return{audioProfile_:this.audioProfile_,videoProfile_:this.videoProfiles_,screenProfile_:this.screenProfile_,audio_:this.audio_,video_:this.video_,cameraId_:this.getCurrentCameraId(),facingMode_:this.facingMode_,microphoneId_:this.getCurrentMicrophoneId(),screen_:this.screen_,screenAudio_:this.screenAudio_}}},n(XP.prototype,"initialize",[PP],Object.getOwnPropertyDescriptor(XP.prototype,"initialize"),XP.prototype),n(XP.prototype,"addAudioTrackCapture",[MP],Object.getOwnPropertyDescriptor(XP.prototype,"addAudioTrackCapture"),XP.prototype),n(XP.prototype,"addVideoTrackCapture",[DP],Object.getOwnPropertyDescriptor(XP.prototype,"addVideoTrackCapture"),XP.prototype),n(XP.prototype,"setAudioProfile",[NP],Object.getOwnPropertyDescriptor(XP.prototype,"setAudioProfile"),XP.prototype),n(XP.prototype,"setVideoProfile",[UP],Object.getOwnPropertyDescriptor(XP.prototype,"setVideoProfile"),XP.prototype),n(XP.prototype,"addResolution",[xP],Object.getOwnPropertyDescriptor(XP.prototype,"addResolution"),XP.prototype),n(XP.prototype,"removeResolution",[LP],Object.getOwnPropertyDescriptor(XP.prototype,"removeResolution"),XP.prototype),n(XP.prototype,"setScreenProfile",[BP],Object.getOwnPropertyDescriptor(XP.prototype,"setScreenProfile"),XP.prototype),n(XP.prototype,"switchDevice",[VP],Object.getOwnPropertyDescriptor(XP.prototype,"switchDevice"),XP.prototype),n(XP.prototype,"addTrack",[YP],Object.getOwnPropertyDescriptor(XP.prototype,"addTrack"),XP.prototype),n(XP.prototype,"removeTrack",[jP],Object.getOwnPropertyDescriptor(XP.prototype,"removeTrack"),XP.prototype),n(XP.prototype,"replaceTrack",[FP],Object.getOwnPropertyDescriptor(XP.prototype,"replaceTrack"),XP.prototype),n(XP.prototype,"bindScreenAudio2RelatedStream",[HP],Object.getOwnPropertyDescriptor(XP.prototype,"bindScreenAudio2RelatedStream"),XP.prototype),n(XP.prototype,"startAudioMixing",[KP],Object.getOwnPropertyDescriptor(XP.prototype,"startAudioMixing"),XP.prototype),n(XP.prototype,"stopAudioMixing",[zP],Object.getOwnPropertyDescriptor(XP.prototype,"stopAudioMixing"),XP.prototype),n(XP.prototype,"pauseAudioMixing",[WP],Object.getOwnPropertyDescriptor(XP.prototype,"pauseAudioMixing"),XP.prototype),n(XP.prototype,"resumeAudioMixing",[GP],Object.getOwnPropertyDescriptor(XP.prototype,"resumeAudioMixing"),XP.prototype),n(XP.prototype,"setAudioMixingVolume",[JP],Object.getOwnPropertyDescriptor(XP.prototype,"setAudioMixingVolume"),XP.prototype),n(XP.prototype,"setAudioMixingPosition",[qP],Object.getOwnPropertyDescriptor(XP.prototype,"setAudioMixingPosition"),XP.prototype),XP);class rM extends eM{constructor(e){super({isRemote:!0,type:e.type,log:e.log}),this.userId_=e.userId,this.client_=[],this.client_.push(e.client),this.module_="RemoteStream",this.roomId_=e.roomId}muteAudio(){return!!super.muteAudio()&&(this.stat.reportAudioMuteInfo(2,!0),!0)}unmuteAudio(){return!!super.unmuteAudio()&&(this.stat.reportAudioMuteInfo(2,!1),!0)}getVideoHRTCTrackByTrackId(e){let t;for(const r of this.tracks[mO.TRACK_TYPE_VIDEO].values())if(r.getTrackId()===e){t=r;break}return t}updateRemoteResolutions(e,t,r){if(!t)return;const i=this.getHRTCTrackIds({mediaType:mO.TRACK_TYPE_VIDEO}),n=t.map((e=>e.streamId));for(const a of i)if(null==n||!n.includes(a))for(const t of this.getHRTCTracks({mediaType:mO.TRACK_TYPE_VIDEO}))if((null==t?void 0:t.getTrackId())===a){this.logger.info(this.module_,"updateRemoteResolutions, streamType:".concat(e,",delete track:").concat(a)),this.stop({audio:!1,video:!0,resolutionIds:[a]}),this.removeRemoteVideoTrack(a),this.tracks[mO.TRACK_TYPE_VIDEO].delete(t.getResolutionId());break}for(const a of t){if(i.includes(a.streamId)){var o;null===(o=this.getVideoHRTCTrackByTrackId(a.streamId))||void 0===o||o.updateTrackProfile(a);continue}const t=new oP({streamType:e,trackType:mO.TRACK_TYPE_VIDEO,isRemote:!0,trackProfile:{width:a.width,height:a.height},logger:this.logger,resolutionId:a.streamId,event:this.eventEmitter});t.setTrackId(a.streamId||t.getResolutionId()),this.tracks[mO.TRACK_TYPE_VIDEO].set(a.streamId,t)}const s=this.getAnyAudioHRTCTrack();if(r){if(!s){const t=new oP({streamType:e,trackType:mO.TRACK_TYPE_AUDIO,isRemote:!0,logger:this.logger,resolutionId:this.id_,event:this.eventEmitter});this.tracks[mO.TRACK_TYPE_AUDIO].set("mainAudio",t)}}else s&&(this.logger.info(this.module_,"updateRemoteResolutions, streamType:".concat(e,",delete audio track")),this.stop({audio:!0,video:!1}),this.removeRemoteAudioTrack(),this.tracks[mO.TRACK_TYPE_AUDIO].delete("mainAudio"));this.logger.info(this.module_,"updateResolutions success,userId:".concat(this.getUserId(),", streamType:").concat(e,",")+"new resolution is ".concat(this.getHRTCTracksProfileString()," hasAudio: ").concat(this.hasAudioTrack()))}getHRTCTracksProfileString(){const e=this.getHRTCTracks();let t="";return e.forEach((e=>{t=t+e.getTrackId()+":"+JSON.stringify(e.getTrackProfile())+","})),t}addRemoteTrack(e,t){if(e.kind===mO.TRACK_TYPE_AUDIO){const t=this.getAnyAudioHRTCTrack();null==t||t.replaceTrack(e)}else{const r=Array.from(this.tracks[mO.TRACK_TYPE_VIDEO].values()).find((e=>e.getTrackId()===t));null==r||r.replaceTrack(e)}this.logger.info(this.module_,"addRemoteTrack MediaStreamTrack for trackId:".concat(t," success,userId:").concat(this.getUserId(),", type:").concat(this.getType(),",")+"new resolution is ".concat(this.getHRTCTracksProfileString(),", hasAudio: ").concat(this.hasAudioTrack()))}isTracksReady(e,t){if(this.isRemote_){let r=!0;if(null!=e&&e.length){const t=this.getHRTCTrackIds();for(const i of e)if(!t.includes(i)||!this.getVideoHRTCTrackByTrackId(i).getTrack()){r=!1;break}}const i=this.getAudioHRTCTrack(),n=i&&!!i.getTrack(),o=r&&(!t||n);return this.logger.debug(this.module_,"isTracksReady userId:".concat(this.getUserId(),", type:").concat(this.getType(),",")+"result: ".concat(o,",videoTrackIds: ").concat(e,", isVideoReady:").concat(r,", isAudioReady:").concat(n)),o}return!0}isTrackReady(e,t){if(this.isRemote_){var r;if(e===mO.TRACK_TYPE_VIDEO)return!(null===(r=this.getVideoHRTCTrackByTrackId(t))||void 0===r||!r.getTrack());return!!this.getAudioHRTCTrack()}return!1}removeRemoteAudioTrack(){const e=this.getAnyAudioHRTCTrack();e&&e.removeTrack()}removeRemoteVideoTrack(e){const t=this.tracks[mO.TRACK_TYPE_VIDEO].get(e);t&&t.removeTrack()}}const iM=0,nM=2;let oM=function(e){return e.JOINER="anchor",e.PLAYER="audience",e}({}),sM=function(e){return e[e.JOINER=0]="JOINER",e[e.PLAYER=2]="PLAYER",e}({});class aM{get identifiedID(){return this.identifiedID_}set identifiedID(e){this.identifiedID_=e}get roomId(){return this.roomId_}set roomId(e){this.roomId_=e}get signature(){return this.signature_}set signature(e){this.signature_=e}get ctime(){return this.ctime_}set ctime(e){this.ctime_=e}get userId(){return this.userId_}set userId(e){this.userId_=e}get encUserId(){return this.encUserId_}set encUserId(e){this.encUserId_=e}get userName(){return this.userName_}set userName(e){this.userName_=e}get role(){return this.role_}set role(e){this.role_=e}get roleSignalType(){return nM===this.role_?oM.PLAYER:oM.JOINER}get appData(){return this.appData_}set appData(e){this.appData_=e}removeRelayInfo(e){this.relayInfos_=this.relayInfos_.filter((t=>t.roomId!==e))}addRelayInfo(e,t){this.relayInfos_||(this.relayInfos_=[]),this.relayInfos_.push({roomId:e,role:t})}getRelayInfos(){return this.relayInfos_}}const cM=new Map;class uM{static get(e){return cM.get(e)}static delete(e){cM.delete(e)}static init(e,t,r){const i=new aM;return i.identifiedID=e,i.userId=r.userId,i.userName=r.userName,i.role=r.role,i.signature=r.signature,i.ctime=r.ctime,i.appData={},r.userName&&(i.appData.nickname=r.userName),r.optionInfo&&[!0,!1].includes(r.optionInfo.recordPlaceholder)&&(i.appData.show_window=r.optionInfo.recordPlaceholder),i.roomId=t,cM.set(e,i),i}static transLocalUserToJoinConfig(e){var t;return{userId:e.userId,userName:e.userName,signature:e.signature,ctime:e.ctime,role:e.role,optionInfo:{recordPlaceholder:null===(t=e.appData)||void 0===t?void 0:t.show_window}}}static renewSignature(e,t,r){if(cM.has(e)){const i=cM.get(e);return i.ctime=t,i.signature=r,i}return null}}let dM=function(e){return e.ReceiveData="ReceiveData",e.ConnectionQuality="ConnectionQuality",e.Reconnected="Reconnected",e.SessionUnavailable="SessionUnavailable",e.ConnectionUnavailable="ConnectionUnavailable",e.ConnectionStateChanged="ConnectionStateChanged",e.AuthenticateFail="AuthenticateFail",e.SignatureExpired="SignatureExpired",e.ClientBanned="ClientBanned",e}({});class lM{constructor(){i(this,"state_",[])}default(e){return this.defaultVal_=e,this}get(){return 0!=this.state_.length?this.state_[this.state_.length-1]:null}set(e){return 2==this.state_.length&&this.state_.unshift(),this.state_.push(e),this}pre(){return this.state_.length>=2?this.state_[this.state_.length-2]:null}reset(){return this.state_=[],this.state_[0]=this.defaultVal_,this}get state(){return this.state_}}class hM extends lM{isChanged(){return this.state.length>1&&this.get()!==this.pre()}getDiffInfo(){return this.isChanged()?{updated:this.state[1]}:{}}}let fM=function(e){return e[e.Health=1]="Health",e[e.SubHealth=4]="SubHealth",e[e.Unavailable=6]="Unavailable",e}({});const pM="HealthMonitor";class mM extends $P{constructor(e){super({emitter:!0,logger:e.logger}),this.client=e,this.reset()}reset(){this.streamDetectTimer&&(clearInterval(this.streamDetectTimer),this.streamDetectTimer=null),this.streamStats={mainStream:{bytesIn:(new hM).default(0).set(0).set(0),bytesOut:(new hM).default(0).set(0).set(0)},auxStream:{bytesIn:(new hM).default(0).set(0).set(0),bytesOut:(new hM).default(0).set(0).set(0)},upQuality:(new hM).default(yO.NETWORK_QUALITY_UNKNOW).set(yO.NETWORK_QUALITY_UNKNOW).set(yO.NETWORK_QUALITY_UNKNOW),downQuality:(new hM).default(yO.NETWORK_QUALITY_UNKNOW).set(yO.NETWORK_QUALITY_UNKNOW).set(yO.NETWORK_QUALITY_UNKNOW)}}isStreamAvailable(){if(!this.client)return!1;const e=this.isAvailableStreamIncoming(gO.STREAM_TYPE_MAIN),t=this.isAvailableStreamIncoming(gO.STREAM_TYPE_AUX),r=this.isAvailableStreamOutgoing(gO.STREAM_TYPE_MAIN),i=this.isAvailableStreamOutgoing(gO.STREAM_TYPE_AUX);return e||t||r||i}getWsConnectionHealthStatus(){return this.streamDetectTimer?this.isStreamAvailable()?fM.SubHealth:fM.Unavailable:fM.Health}startStreamStateDetection(){this.streamDetectTimer||(this.streamDetectTimer=setInterval((async()=>{if(this.client){const e=this.client.getICETransportStat(gO.STREAM_TYPE_MAIN);e&&this.updateStreamStat(e,gO.STREAM_TYPE_MAIN);const t=this.client.getICETransportStat(gO.STREAM_TYPE_AUX);t&&this.updateStreamStat(t,gO.STREAM_TYPE_AUX),this.updateConnectionQuality(this.getWsConnectionHealthStatus())}}),3e3))}stopStreamStateDetection(){this.streamDetectTimer&&(clearInterval(this.streamDetectTimer),this.streamDetectTimer=null,this.updateConnectionQuality(this.getWsConnectionHealthStatus()))}updateConnectionQuality(e){if(!this.client)return;const t=this.client.isSendingStream()?e:yO.NETWORK_QUALITY_UNKNOW,r=this.client.isReceivingStream()?e:yO.NETWORK_QUALITY_UNKNOW;this.updateSignalQuality(t,r)}isAvailableStreamIncoming(e){const t=e===gO.STREAM_TYPE_MAIN?this.streamStats.mainStream:this.streamStats.auxStream;return t.bytesIn.get()-t.bytesIn.pre()>mM.getMinAvailableBytes()}static getMinAvailableBytes(){return sC.low.bitrate/8*3}isAvailableStreamOutgoing(e){const t=e===gO.STREAM_TYPE_MAIN?this.streamStats.mainStream:this.streamStats.auxStream;return t.bytesOut.get()-t.bytesOut.pre()>mM.getMinAvailableBytes()}updateStreamStat(e,t){const r=t===gO.STREAM_TYPE_MAIN?this.streamStats.mainStream:this.streamStats.auxStream;this.logger.info(pM,"".concat(t," : bytesIn:").concat(e.bytesReceived," ,bytesOut:").concat(e.bytesSent)),r.bytesIn.set(e.bytesReceived),r.bytesOut.set(e.bytesSent)}updateSignalQuality(e,t){if(this.streamStats.upQuality.set(e),this.streamStats.downQuality.set(t),this.logger.info(pM,"upQuality:".concat(this.streamStats.upQuality.pre(),",").concat("".concat(e)," ,downQuality:").concat(this.streamStats.downQuality.pre(),",").concat("".concat(t))),this.streamStats.upQuality.isChanged()||this.streamStats.downQuality.isChanged()){const r={uplinkNetworkQuality:e,downlinkNetworkQuality:t};this.logger.info(pM,"emit network-quality:".concat(JSON.stringify(r))),this.eventEmitter.emit(dM.ConnectionQuality,r)}}getInfo(){return{moduleName:"HealthMonitor"}}}function gM(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,i)}return r}const _M="Socket",SM="heartbeat",vM="reconnectingEnd";var yM=function(e){return e[e.normal=1e3]="normal",e[e.multiKickoff=4e3]="multiKickoff",e[e.authenticateFail=4001]="authenticateFail",e[e.kickoff=4002]="kickoff",e[e.releaseRoom=4003]="releaseRoom",e[e.heartbeatTimeout=4004]="heartbeatTimeout",e[e.serverReconnectReq=4005]="serverReconnectReq",e[e.serveReconnectReqWithoutSfu=4006]="serveReconnectReqWithoutSfu",e[e.signatureFail=4009]="signatureFail",e}(yM||{});let IM=0;class TM extends $P{constructor(e,t,r){super({emitter:!0,logger:r.logger,stat:r.stat}),i(this,"callbacks",new Map),this.taskId=1e3,this.appId=e,this.edgeNodeDomains=t,this.clientConfig=r.clientConfig;const n=new hM;n.default(yC.IDLE).reset().set(yC.IDLE),this.wsStatus={state:n,isHeartbeat:!1,isWsReconnecting:!1,hasEverConnected:!1},this.healthMonitor=new mM(r),this.healthMonitor.on(dM.ConnectionQuality,this.getConnectionQualityListener()),this.wsReset()}setKeepAliveParams(e){this.heartBeatConfig=e}setTraceId(e){this.traceId=e}wsReset(){var e;this.closeConnection(),this.traceId="",this.connectId="",this.wsUrl="",this.acsIP="",this.wsStatus.state.reset(),this.wsStatus.hasEverConnected=!1,this.userInfo=void 0,null===(e=this.healthMonitor)||void 0===e||e.reset()}wsDisconnect(){this.healthMonitor.off(dM.ConnectionQuality),this.wsReset(),this.healthMonitor=void 0}getConnectionQualityListener(){return e=>{this.emit(dM.ConnectionQuality,e)}}async wsConnect(e,t,r,i,n,o,s){this.logger.info(_M,"wsConnect, acsIP:".concat(t,", firstTimeout:").concat(n,", retryTimeout:").concat(o,", retryCount:").concat(i,",retryInterval:").concat(s)),this.wsStatus.isWsReconnecting&&(this.logger.info(_M,"wsConnect, waiting for reconnecting ending"),await this.stopReconnecting(),this.logger.info(_M,"wsConnect, reconnecting end")),this.acsIP=t,this.userInfo=e,this.wsStatus.state.set(yC.DISCONNECTED),await this.doConnect(t,r,i,n,o,s,!1)}refreshUserInfo(e){this.userInfo=e}async startHeartbeat(){try{if(this.wsStatus.isHeartbeat)return void this.logger.warn(_M,"startHeartbeat, isHeartbeat so return");this.wsStatus.isHeartbeat=!0;const e=async e=>await this.sendHeartbeat(e);return await mP.callWithRetryTimes(e,!0,-1,this.getAsyncInterval(1e3*this.heartBeatConfig.heartBeatPeriod),this.needInterrupted())}catch(jN){this.logger.warn(_M,"startHeartbeat, error:".concat(jN))}finally{this.wsStatus.isHeartbeat=!1}}async wsSendRequest(e,t,r,i,n){this.logger.debug(_M,"wsSendRequest: ".concat(e.type," - ").concat(e.requestId));return await mP.callWithRetryTimes((async i=>await this.wsSendReqOnce(e.requestId,e,t,r,i)),!1,i,this.getAsyncInterval(n),this.needInterrupted())}wsSendResponse(e){this.ws.send(e)}generateRequestId(){return this.traceId,this.traceId+"Web"+(this.taskId++).toString()}async doConnect(e,t,r,i,n,o,s){return await mP.callWithRetryTimes((async r=>await this.wsConnectOnce(e,t,i,n,r,s)),!1,r,this.getAsyncInterval(o),this.needInterrupted())}async wsConnectOnce(e,t,r,i,n,o){if([yC.IDLE,yC.CONNECTING].includes(this.wsStatus.state.get())||!this.userInfo)throw new qc(Gc.RTC_ERR_CODE_WEBSOCKET_INTERRUPTED);if(this.wsStatus.state.get()!==yC.DISCONNECTED)return this.logger.error(_M,"wsConnectOnce, cusState:".concat(this.wsStatus.state.get(),", not DISCONNECTED, return")),null;this.connectId=this.taskId.toString(),this.wsUrl=this.getWsUrl(e,o);const s=XR.getCurrentTimestamp();this.ws=new WebSocket(this.wsUrl),this.logger.info(_M,"wsConnectOnce, url:".concat(XR.shieldUrlParameters(this.wsUrl),", connectId:").concat(this.connectId,", begin create websocket connection with server ")),1!==n||o?this.triggerConnectStatesChangeEvent(yC.RECONNECTING):this.triggerConnectStatesChangeEvent(yC.CONNECTING),this.ws.onopen=this.onopen.bind(this),this.ws.onerror=this.onerror.bind(this),this.ws.onmessage=this.onmessage.bind(this),this.ws.onclose=this.onclose.bind(this);const a={id:((null==t?void 0:t.length)||0)+1,domain:this.edgeNodeDomains.get(e),start_ms:XR.getCurrentTimestamp(),delay_ms:0,stepName:"wsConnect",rspCode:"",errMsg:""};try{const e=1===n?r:i;await this.getConnectionResp(e),a.delay_ms=XR.getCurrentTimestamp()-a.start_ms,a.rspCode="101"}catch(jN){throw this.logger.error(_M,"wsConnectOnce, connect occur exception, connectId:".concat(this.connectId,", error: ").concat(jN)),a.delay_ms=XR.getCurrentTimestamp()-a.start_ms,"function"==typeof jN.getCode&&(a.rspCode="".concat(jN.getCode()),a.errMsg=jN.getMsg()),jN}finally{null==t||t.push(a);const e=XR.getCurrentTimestamp(),r={version:"v1",startTimestamp:s,traceId:this.xNuwaTraceId,spanId:this.xNuwaSpanId,parentSpanId:"0000000000000000",ip:"",source:"SDK",target:"WiseCloudRtcAccessService",spanName:"connect",status:"0",endTimestamp:e,url:"",httpMethod:"",requestSize:"",responseSize:"",statusCode:"",tag:"",Events:"",scope:"videortn"};this.stat.reportTraceInfo2Nuwa(r)}}async stopReconnecting(){let e=null;this.wsStatus.state.set(yC.IDLE);const t=[new Promise((t=>{this.callbacks.set(vM,(r=>{e&&clearTimeout(e),t(r)}))})),new Promise(((t,r)=>{e=setTimeout((()=>{r(new qc(Gc.RTC_ERR_CODE_WEBSOCKET_RECONNECT_TIMEOUT))}),3e4)}))];return await Promise.race(t).then((e=>e)).finally((()=>{this.callbacks.delete(vM)}))}async getConnectionResp(e){const t=this.connectId;await mP.callWithTimeout(new Promise(((e,r)=>{this.callbacks.set(t,(i=>{if(i.isSuccess)this.logger.info(_M,"getConnectionResp, connectId:".concat(t,", connect success")),this.triggerConnectStatesChangeEvent(yC.CONNECTED),e();else{const e=TM.newSocketException(i);this.logger.info(_M,"getConnectionResp, connectId:".concat(t,", connect fail, errMsg=").concat(e)),r(e)}}))})),e).catch((r=>{if(this.triggerConnectStatesChangeEvent(yC.DISCONNECTED),r.getCode()!==Gc.RTC_ERR_CODE_WAIT_RSP_TIMEOUT)throw r;throw this.logger.error(_M,"getConnectionResp, connectId:".concat(t,", websocket connect timeout after ").concat(e," ms")),this.ws&&this.ws.readyState===this.ws.CONNECTING&&(this.logger.info(_M,"getConnectionResp, connectId:".concat(t,",websocket connect timeout, close webSocket manual")),this.ws.close()),new qc(Gc.RTC_ERR_CODE_WEBSOCKET_CONNECT_TIMEOUT)})).finally((()=>{this.callbacks.delete(t)}))}static newSocketException(e){if(e.isSuccess)return null;const t=Gc.RTC_ERR_CODE_WEBSOCKET_CONNECT_ERROR,r=e.code,i="".concat(r||""," websocket connect error");return new qc(t,i)}getWsUrl(e,t){let r,i;this.xNuwaTraceId=XR.generateRandomId(32,16),this.xNuwaSpanId=XR.generateRandomId(16,16);let n,o="443";const s=/ws(?:s)?:\/\/([^/]+)(.*)/.exec(this.edgeNodeDomains.get(e));if(s&&3===s.length){const e=s[1].split(":");i=e[0],o=e[1]||"443",n=s[2]}else i=this.edgeNodeDomains.get(e),n="/websocket";const a=eO.getProxyServer();return r=a?/^http.*/.test(a)?a.replace("http","ws"):a.replace("https","wss"):"".concat("wss","://").concat(i,":").concat(o),r="".concat(r).concat(n,"?appId=").concat(escape(this.appId),"&roomId=").concat(escape(this.userInfo.roomId))+"&userId=".concat(escape(this.userInfo.userId),"&role=").concat(this.userInfo.roleSignalType,"&Authorization=").concat(escape(this.userInfo.signature))+"&ctime=".concat(this.userInfo.ctime,"&clientVersion=").concat(uA,"&clientType=").concat(XR.getSystemType())+"&romVersion=".concat(XR.getRomVersion(),"&agentType=").concat(2,"&netType=").concat(XR.getNetworkType())+"&traceId=".concat(this.traceId,"&x-nuwa-trace-id=").concat(this.xNuwaTraceId,"&x-nuwa-span-id=").concat(this.xNuwaSpanId)+"&HoldTime=".concat(120).concat(t?"&reconnect=true":"")+"&instanceId=".concat(XR.getDeviceID().replace(/[-]/g,"")).concat(this.clientConfig.countryCode?"&clientCountryCode=".concat(this.clientConfig.countryCode):""),a&&(r="".concat(r,"&org_domain=").concat(i,"&org_port=").concat(o)),r}cancelWsCloseCallBack(){this.ws&&(this.ws.onclose=e=>{this.logger.info(_M,"cancelWsCloseCallBack, connect close,code:".concat(e.code,", reason:").concat(e.reason))})}closeConnection(){this.ws&&(this.logger.info(_M,"close ws when reset"),this.cancelWsCloseCallBack(),this.ws.close(),this.ws=null)}triggerConnectStatesChangeEvent(e,t){this.wsStatus.state.set(e);const r=function(e){for(var t=1;t"function"==typeof(null==e?void 0:e.getCode)&&e.getCode()===Gc.RTC_ERR_CODE_WEBSOCKET_INTERRUPTED}getAsyncInterval(e){return t=>"function"==typeof(null==t?void 0:t.getCode)&&t.getCode()===Gc.RTC_ERR_CODE_WAIT_RSP_TIMEOUT?0:e}async wsSendReqOnce(e,t,r,i,n){const o=TM.removeWatchType(t),s=XR.getCurrentTimestamp();try{if(this.wsStatus.state.get()===yC.IDLE)throw new qc(Gc.RTC_ERR_CODE_WEBSOCKET_INTERRUPTED);if(!this.ws||this.ws.readyState!==this.ws.OPEN)throw new qc(Gc.RTC_ERR_CODE_WEBSOCKET_NOT_OPEN);n>1&&this.logger.debug(_M,"wsSendReq: ".concat(e,", retry send message"));const s=JSON.stringify(o);this.ws.send(s),this.stat&&(this.stat.reportSignalReqForWeb2Server(o),this.stat.recordUploadRequsetInfo(t));const a=1===n?r:i;return await this.getResponse(o,a)}catch(jN){throw this.logger.error(_M,"wsSendReq: ".concat(e,", type: ").concat(o.type,", tryNumber: ").concat(n,",error: ").concat(jN)),"PING"===t.type&&this.healthMonitor.startStreamStateDetection(),this.recordWsException(t,jN,s),jN}finally{const e=this.stat.checkSignalSendMsgs((null==o?void 0:o.type)||""),t=o["x-nuwa-span-id"],r=XR.getCurrentTimestamp(),i={version:"v1",startTimestamp:s,traceId:o["x-nuwa-trace-id"],spanId:t,parentSpanId:e?"0000000000000000":this.stat.getParentSpanId(o["x-nuwa-span-id"]),ip:"",source:"SDK",target:"WiseCloudRtcAccessService",spanName:(null==o?void 0:o.type)||"",status:"0",endTimestamp:r,url:"",httpMethod:"",requestSize:"",responseSize:"",statusCode:"",tag:"",Events:"",scope:"videortn"};this.stat.reportTraceInfo2Nuwa(i)}}recordWsException(e,t,r){if("PING"!==e.type)switch(e.type){case"SUBS_STREAM":{const r=t.getCode(),i=t.getMsg();e.videoUpstreams&&this.stat.reportVideoSub(e.videoSubType,e.requestId,e.videoUpstreams,r,i),e.audioUpstreams&&this.stat.reportAudioSub(e.audioSubType,e.requestId,e.audioUpstreams,r);break}}else this.stat.reportSignalReqForHeartBeatLost(e,r)}async getResponse(e,t){let r=null;const i=[new Promise((t=>{const i="PING"===e.type?SM:e.requestId;this.callbacks.set(i,(e=>{r&&clearTimeout(r),t(e)}))})),new Promise(((e,i)=>{r=setTimeout((()=>{i(new qc(Gc.RTC_ERR_CODE_WAIT_RSP_TIMEOUT))}),t)}))];return await Promise.race(i).finally((()=>{const t="PING"===e.type?SM:e.requestId;this.callbacks.delete(t)}))}onopen(e){this.callbacks.has(this.connectId)&&this.callbacks.get(this.connectId)({isSuccess:!0}),this.logger.info(_M,"onopen, wss[".concat(XR.shieldUrlParameters(this.wsUrl),"], connectId:").concat(this.connectId,", connect success, ").concat(JSON.stringify(e))),this.stat.setConnectionStatusInfo(QC.CONNECTED,XC.SIGNAL)}onerror(e){this.logger.error(_M,"onerror, connectId:".concat(this.connectId,", websocket occur error:").concat(JSON.stringify(e))),this.stat.setConnectionStatusInfo(QC.CLOSED,XC.SIGNAL),this.callbacks.has(this.connectId)&&this.callbacks.get(this.connectId)({isSuccess:!1})}onmessage(e){if(null==e||!e.data)return;const t=JSON.parse(e.data);this.wsStatus.hasEverConnected=!0,IM=0;const r=this.callbacks.get(SM);if(r&&r(t),t.type)this.emit(dM.ReceiveData,t);else{const e=this.callbacks.get(t.requestId);e&&e(t)}this.stat.reportSignalReqForServer2Web(t);const i=this.stat.getDownloadRequestInfo(t);this.stat.recordDownloadRequestInfo(t);const n=this.stat.checkSignalReceiveMsgs((null==t?void 0:t.type)||""),o=XR.generateRandomId(16,16),s=t["x-nuwa-span-id"];n&&this.stat.setSpanId(s,o);const a=XR.getCurrentTimestamp(),c={version:"v1",startTimestamp:a,traceId:t["x-nuwa-trace-id"],spanId:o,parentSpanId:s,ip:"",source:"WiseCloudRtcAccessService",target:"SDK",spanName:(null==t?void 0:t.type)||i,status:"0",endTimestamp:a,url:"",httpMethod:"",requestSize:"",responseSize:"",statusCode:"",tag:"",Events:"",scope:"videortn"};this.stat.reportTraceInfo2Nuwa(c)}async onclose(e){const t=e.code,r=e.reason;if(this.logger.warn(_M,"onclose,connectId:".concat(this.connectId,", code:").concat(t,", reason:").concat(r)),this.stat.setConnectionStatusInfo(QC.CLOSED,XC.SIGNAL),this.callbacks.has(this.connectId)&&this.callbacks.get(this.connectId)({isSuccess:!1,code:t,reason:r}),this.triggerConnectStatesChangeEvent(yC.DISCONNECTED,{code:t,reason:r}),TM.isServerAuthFail(t))this.handleServerAuthFail();else{if(!TM.isSignatureFail(t))return TM.isKickedOff(t)?(this.logger.warn(_M,"handleKickedOff, emit:".concat(dM.ClientBanned)),void this.emit(dM.ClientBanned)):TM.isServerSessionValidateFail(t)?(this.logger.warn(_M,"onclose, emit:".concat(dM.SessionUnavailable)),void this.emit(dM.SessionUnavailable)):void(t===yM.heartbeatTimeout||t===yM.serveReconnectReqWithoutSfu||t>1e3&&t<4e3?await this.reconnect():this.logger.error(_M,"onclose, no handler"));this.handleSignatureFail()}}handleServerAuthFail(){this.logger.error(_M,"handleServerAuthFail, auth failed to leave room"),this.logger.warn(_M,"handleServerAuthFail, emit:".concat(dM.AuthenticateFail," ")),this.emit(dM.AuthenticateFail)}async handleSignatureFail(){this.logger.warn(_M,"handle signature fail, emit:".concat(dM.SignatureExpired)),this.wsStatus.hasEverConnected?(this.emit(dM.SignatureExpired,{type:"reconnect"}),IM<5?(this.logger.warn(_M,"signature expired, try reconnect: retry times: ".concat(IM+1)),await this.reconnect(),IM++):this.emit(dM.SessionUnavailable)):this.emit(dM.SignatureExpired,{type:"join"})}async reconnect(){if(this.logger.info(_M,"reconnect, not user call leave, network error, go ws reconnecting"),!this.wsStatus.hasEverConnected)return this.logger.info(_M,"reconnect, haven't connect yet, so return"),null;if(this.wsStatus.isWsReconnecting)return this.logger.info(_M,"reconnect, isWsReConnecting so return"),null;try{this.wsStatus.isWsReconnecting=!0;const e=12e3,t=1e3;await this.doConnect(this.acsIP,null,-1,e,e,t,!0),this.logger.info(_M,"wsReconnect, success");const r=this.callbacks.get(vM);r&&r("success"),this.logger.warn(_M,"emit:".concat(dM.Reconnected)),this.emit(dM.Reconnected)}catch(jN){this.logger.error(_M,"wsReconnect, errMsg:".concat(jN));const t=this.callbacks.get(vM);t&&t(jN)}finally{this.wsStatus.isWsReconnecting=!1}}static isServerAuthFail(e){return[yM.authenticateFail,yM.releaseRoom].includes(e)}static isSignatureFail(e){return[yM.signatureFail].includes(e)}static isKickedOff(e){return[yM.multiKickoff,yM.kickoff].includes(e)}static isServerSessionValidateFail(e){return[yM.serverReconnectReq].includes(e)}async sendHeartbeat(e){try{if([yC.IDLE,yC.CONNECTING].includes(this.wsStatus.state.get()))throw this.logger.info(_M,"sendHeartbeat, but wsStatus is IDLE or CONNECTING, interrupted"),new qc(Gc.RTC_ERR_CODE_WEBSOCKET_INTERRUPTED);if(!this.traceId)throw this.logger.error(_M,"sendHeartbeat, traceId is null"),new qc(Gc.RTC_ERR_CODE_WEBSOCKET_INTERRUPTED);const e={type:"PING",traceId:this.traceId,requestId:this.generateRequestId(),version:lA,"x-nuwa-trace-id":XR.generateRandomId(32,16),"x-nuwa-span-id":XR.generateRandomId(16,16)};await this.wsSendRequest(e,1e3*this.heartBeatConfig.heartBeatPeriod,1e3*this.heartBeatConfig.heartBeatPeriod,this.heartBeatConfig.heartBeatRetryTimes,1e3*this.heartBeatConfig.heartBeatPeriod),this.healthMonitor.stopStreamStateDetection()}catch(jN){this.logger.info(_M,"sendHeartbeat,father tryNumber:".concat(e,",child heartbeat retry out of limit:").concat(this.heartBeatConfig.heartBeatRetryTimes," and fail, error:").concat(jN)),this.handleHeartbeatFail(jN)}}handleHeartbeatFail(e){if("function"==typeof(null==e?void 0:e.getCode)&&e.getCode()===Gc.RTC_ERR_CODE_WEBSOCKET_INTERRUPTED)throw this.logger.warn(_M,"handleHeartbeatFail, ErrorCode.RTC_ERR_CODE_WEBSOCKET_INTERRUPTED"),e;const t=this.healthMonitor.getWsConnectionHealthStatus();this.logger.warn(_M,"handleHeartbeatFail, healthStatus:".concat(t)),t===fM.Unavailable&&(this.logger.info(_M,"handleHeartbeatFail, connection unavailable when error:".concat(e)),this.logger.warn(_M,"emit:".concat(dM.ConnectionUnavailable)),this.emit(dM.ConnectionUnavailable))}getInfo(){return{moduleName:"Socket"}}}let RM=function(e){return e[e.MAIN=0]="MAIN",e[e.DESKTOP=1]="DESKTOP",e}({}),EM=function(e){return e.SEND_RECV="sendrecv",e.SEND_ONLY="sendonly",e.RECV_ONLY="recvonly",e.INACTIVE="inactive",e}({}),bM=function(e){return e[e.cmdPayload=99]="cmdPayload",e}({}),CM=function(e){return e[e.opusPayload=112]="opusPayload",e}({}),AM=function(e){return e[e.rtxPayLoad=107]="rtxPayLoad",e[e.h264PayLoad=122]="h264PayLoad",e[e.redPayLoad=110]="redPayLoad",e[e.ulpfecPayLoad=127]="ulpfecPayLoad",e}({}),wM=function(e){return e.H264="H264",e.H265="H265",e.H264H265="H264H265",e.OPUS="opus",e}({});const kM="signal",OM=5e3;class PM extends $P{constructor(e,t,r){super({emitter:!0,logger:r.logger,stat:r.stat},r.getSymbol()),this.edgeNodeDomains=t,this.socket=new TM(e,t,r),this.onSocketEvent(),this.reset()}on(e,t){super.on(e,t)}off(e,t){super.off(e,t)}reset(){var e;this.traceId="",this.isConnecting=!1,null===(e=this.socket)||void 0===e||e.wsReset()}disconnect(){var e;this.offSocketEvent(),this.reset(),null===(e=this.socket)||void 0===e||e.wsDisconnect(),this.socket=void 0}getConnectionQualityListener(){return e=>{this.emit(UC.NetworkQuality,e)}}getConnectionStateChangedListener(){return e=>{this.emit(UC.ConnectionStateChanged,e)}}getSignatureExpiredListener(){return e=>{this.emit(dM.SignatureExpired,e)}}getReceiveDataListener(){return e=>{this.receiveMsg(e)}}getSessionUnavailableListener(){return e=>{this.emit(dM.SessionUnavailable,e)}}getConnectionUnavailableListener(){return e=>{this.emit(dM.ConnectionUnavailable,e)}}getReconnectedListener(){return e=>{this.emit(dM.Reconnected,e)}}getAuthenticateFailListener(){return e=>{this.emit(dM.AuthenticateFail,e)}}getKickedOffListener(){return e=>{this.emit(dM.ClientBanned,e)}}onSocketEvent(){this.socket&&(this.socket.on(dM.ConnectionQuality,this.getConnectionQualityListener()),this.socket.on(dM.ConnectionStateChanged,this.getConnectionStateChangedListener()),this.socket.on(dM.SignatureExpired,this.getSignatureExpiredListener()),this.socket.on(dM.ReceiveData,this.getReceiveDataListener()),this.socket.on(dM.SessionUnavailable,this.getSessionUnavailableListener()),this.socket.on(dM.ConnectionUnavailable,this.getConnectionUnavailableListener()),this.socket.on(dM.Reconnected,this.getReconnectedListener()),this.socket.on(dM.AuthenticateFail,this.getAuthenticateFailListener()),this.socket.on(dM.ClientBanned,this.getKickedOffListener()))}offSocketEvent(){this.socket&&(this.socket.off(dM.ConnectionQuality),this.socket.off(dM.ConnectionStateChanged),this.socket.off(dM.SignatureExpired),this.socket.off(dM.ReceiveData),this.socket.off(dM.SessionUnavailable),this.socket.off(dM.ConnectionUnavailable),this.socket.off(dM.Reconnected),this.socket.off(dM.AuthenticateFail),this.socket.off(dM.ClientBanned))}getRandomAcsIp(){let e,t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(1===this.edgeNodeDomains.size||t)return this.selectedAcsIp="default",this.selectedAcsIp;let r=0;return this.selectedAcsIp?(e=[...this.edgeNodeDomains.keys()].filter((e=>"default"!==e&&e!==this.selectedAcsIp)),e.length<1||(r=Math.round(XR.getRandom()*(e.length-1)),this.selectedAcsIp=e[r]),this.selectedAcsIp):(e=[...this.edgeNodeDomains.keys()].filter((e=>"default"!==e)),r=Math.round(XR.getRandom()*(e.length-1)),this.selectedAcsIp=e[r],this.selectedAcsIp)}async connect(e,t){if(this.isConnecting)return this.logger.info(kM,"connect, isConnecting so return"),null;this.traceId=XR.generateStandardUuid(),this.socket.setTraceId(this.traceId);try{this.isConnecting=!0;const r=async r=>await this.connectOnce(e,t,r);return await mP.callWithRetryTimes(r,!1,2,this.getAsyncInterval(),this.needInterrupted())}finally{this.isConnecting=!1}}refreshUserInfo(e){this.socket.refreshUserInfo(e)}needInterrupted(){return e=>"function"==typeof(null==e?void 0:e.getCode)&&e.getCode()===Gc.RTC_ERR_CODE_WEBSOCKET_INTERRUPTED}getAsyncInterval(){return()=>Math.round(500*XR.getRandom()+500)}async connectOnce(e,t,r){const i=this.getRandomAcsIp(PM.isLastTry(2,r));if(!i)throw this.logger.error(kM,"selectedAcsIP is null"),new qc(Gc.RTC_ERR_CODE_WEBSOCKET_NOT_CONNECTED,"no available servers to connect");return await this.socket.wsConnect(e,i,t,0,1e4,0,0),"default"===i?this.edgeNodeDomains.get("default"):i}static isLastTry(e,t){return t===e+1}async join(e,t,r,i,n,o,s,a){return new Promise(((c,u)=>{const d=PM.setJoinRequest(e,t,r,i,n,o,s,a);this.sendRequest(d).then((e=>{var t;0!==e.resultCode?(this.logger.error(kM,"join code:".concat(e.resultCode,",msg:").concat(e.resultMessage)),u(new qc(Number(e.resultCode),e.resultMessage))):(null===(t=e.userInfos)||void 0===t||t.forEach((e=>{iE.addPrivacyString(e.userId),iE.addPrivacyString(e.appData.nickname)})),c(e))})).catch((e=>{u(e)}))}))}async subscribe(e,t,r){const i={type:"SUBS_STREAM",videoUpstreams:e,audioUpstreams:t,videoSubType:1,audioSubType:1,watchType:r,"x-nuwa-trace-id":XR.generateRandomId(32,16),"x-nuwa-span-id":XR.generateRandomId(16,16)},n=await this.sendRequest(i);if(0!==n.resultCode){const e=JSON.stringify(i);throw this.logger.error(kM,"subscribe fail,err_code:".concat(n.resultCode,",")+"error_msg:".concat(n.resultMessage,",request ").concat(e)),new qc(Number(n.resultCode),n.resultMessage)}return this.logger.info(kM,"subscribe send msg result:".concat(n.resultMessage)),n}async queryRoomUsers(e){var t;const r={type:"GET_ROOM_USERINFO","x-nuwa-trace-id":XR.generateRandomId(32,16),"x-nuwa-span-id":XR.generateRandomId(16,16)};null!=e&&e.length&&(r.userIds=e);const i=await this.sendRequest(r);if(0!==i.resultCode)throw this.logger.error(kM,"queryRoomUsers fail,err_code:".concat(i.resultCode,",error_msg:").concat(i.resultMessage)),new qc(Number(i.resultCode),i.resultMessage);return null===(t=i.userInfos)||void 0===t||t.forEach((e=>{iE.addPrivacyString(e.userId),iE.addPrivacyString(e.appData.nickname)})),this.logger.info(kM,"queryRoomUsers send msg result:".concat(i.resultMessage)),i}async leave(){try{const e=await this.sendRequest({type:"EXIT_ROOM"});if(0!==e.resultCode)throw this.logger.error(kM,"leave, exit room, err_code:".concat(e.resultCode,",error_msg:").concat(e.resultMessage)),new qc(Number(e.resultCode),e.resultMessage);const t=await this.sendRequest({type:"BYE"});if(0!==t.resultCode)throw this.logger.error(kM,"leave, exit room, err_code:".concat(t.resultCode,",error_msg:").concat(t.resultMessage)),new qc(Number(t.resultCode),t.resultMessage)}catch(jN){throw new qc(Gc.RTC_ERR_CODE_RTC_SDK_ERROR)}}async changeStreamStatus(e){try{return e.type="CHANGE_STREAM_STATUS",await this.sendRequest(e)}catch(jN){throw this.logger.error(kM,"changeStreamStatus fail, error:".concat(jN)),new qc(Gc.RTC_ERR_CODE_RTC_SDK_ERROR)}}static setJoinRequest(e,t,r,i,n,o,s,a){const c={type:"JOIN_ROOM",sdp:{secCap:"sec3.0",sfuType:pO.getParameter(sO)||vO.COMMON_SFU_RESOURCE,crypto:{type:1},frameType:pO.getParameter(cO)||xC.NON_ENCRYPTION,audios:[{content:CC.main,codecs:[{codec:wM.OPUS,pt:CM.opusPayload,ability:2}],audioLevel:3}],videos:[{content:CC.main,codecs:[{codec:wM.H264,pt:AM.h264PayLoad,ability:2}]},{content:CC.slides,codecs:[{codec:wM.H264,pt:AM.h264PayLoad,ability:2}]}],desktopVideos:[{content:CC.desktop,codecs:[{codec:wM.H264,pt:AM.h264PayLoad,ability:2}]}],audioPolicy:i,bandwidths:n},negSdp:[{type:RM.MAIN,sdp:t},{type:RM.DESKTOP,sdp:r}],scenario:1,relayMode:0,agentType:2,appData:e.appData,mediaData:{portType:o},"x-nuwa-trace-id":XR.generateRandomId(32,16),"x-nuwa-span-id":XR.generateRandomId(16,16)},u=pO.getParameter(aO);return u&&(c.sdp.resourceTags=u),s&&(c.sdp.command={codecs:[{codec:wM.OPUS,pt:bM.cmdPayload}],content:"cmd=1"}),Object.assign(c.mediaData,a||{}),c}async switchRole(e,t){const r=PM.setSwitchRoleRequest(e,t),i=await this.sendRequest(r);if(0!==i.resultCode)throw this.logger.error(kM,"switch user role fail,err_code:".concat(i.resultCode,",error_msg:").concat(i.resultMessage)),new qc(Number(i.resultCode),i.resultMessage);return i}static setSwitchRoleRequest(e,t){return{type:"SWITCH_ROLE",role:e===iM?oM.JOINER:oM.PLAYER,authorization:t.signature,ctime:parseInt(t.ctime),"x-nuwa-trace-id":XR.generateRandomId(32,16),"x-nuwa-span-id":XR.generateRandomId(16,16)}}async pushStreamResponse(e){this.logger.info(kM,"pushStreamRep send msg start:");try{await this.socket.wsSendResponse(JSON.stringify(e)),this.logger.info(kM,"pushStreamRep send response")}catch(Aw){throw this.logger.error(kM,"pushStreamRep send response fail, errMsg = ".concat(Aw)),new qc(Gc.RTC_ERR_CODE_PUBLISH_RESPONSE_FAIL)}}keepAlive(){this.logger.info(kM,"keepAlive"),this.socket.startHeartbeat()}async sendRequest(e){return this.assignCommonMsgInfo(e),await this.socket.wsSendRequest(e,OM,OM,2,OM)}assignCommonMsgInfo(e){Object.assign(e,{traceId:this.traceId,requestId:this.socket.generateRequestId(),version:lA,"x-nuwa-trace-id":XR.generateRandomId(32,16),"x-nuwa-span-id":XR.generateRandomId(16,16)})}async publish(e){return new Promise(((t,r)=>{const i=[],n=[];e.forEach((e=>{e.codec===wM.H264?i.push({content:e.content,mute:e.mute,width:e.width,height:e.height,fps:e.fps,maxFs:e.maxFs,maxMbps:e.maxMbps,codec:e.codec,pt:e.pt,streamData:e.streamData,streamUid:e.streamUid,ssrc:e.ssrc,createDate:e.createDate}):e.codec===wM.OPUS&&n.push({content:e.content,mute:e.mute,channels:e.channels,sampleRate:e.sampleRate,maxMbps:e.maxMbps,codec:e.codec,pt:e.pt,streamData:e.streamData,streamUid:e.streamUid,ssrc:e.ssrc,createDate:e.createDate})}));const o={type:"PUSH_STREAM_RES_ALL",pushStreamType:0,videoStreams:i,audioStreams:n,"x-nuwa-trace-id":XR.generateRandomId(32,16),"x-nuwa-span-id":XR.generateRandomId(16,16)};this.sendRequest(o).then((e=>{0!==e.resultCode?(this.logger.error(kM,"publish resp code:".concat(e.resultCode,",msg:").concat(e.resultMessage)),r(new qc(Number(e.resultCode),e.resultMessage))):t(e)})).catch((e=>{r(e)}))}))}async appData(e,t,r){return new Promise(((i,n)=>{const o={};Object.assign(o,e),o[t]=r;const s={type:"APP_DATA",appData:o};this.sendRequest(s).then((e=>{0!==e.resultCode?(this.logger.error(kM,"appset code:".concat(e.resultCode,",msg:").concat(e.resultMessage)),n(new qc(Number(e.resultCode),e.resultMessage))):i(e)})).catch((e=>{n(e)}))}))}async changeAudioPolicy(e){return new Promise(((t,r)=>{const i={type:"AUDIO_POLICY",audioPolicy:e,"x-nuwa-trace-id":XR.generateRandomId(32,16),"x-nuwa-span-id":XR.generateRandomId(16,16)};this.sendRequest(i).then((n=>{if(0!==n.resultCode){const t=JSON.stringify(i);this.logger.error(kM,"change audioPolicy code:".concat(n.resultCode,",audioPolicy:").concat(e,",msg:").concat(n.resultMessage," request ").concat(t)),r(new qc(Number(n.resultCode),n.resultMessage))}else this.logger.info(kM,"change audioPolicy ".concat(e," success")),t(n)})).catch((t=>{this.logger.info(kM,"change audioPolicy ".concat(e," exception")),r(t)}))}))}async updateLiveStreaming(e,t,r){return new Promise(((i,n)=>{const o={type:"UPDATE_PUBLISH",traceId:XR.generateStandardUuid(),taskId:e,config:t,userInfos:r,"x-nuwa-trace-id":XR.generateRandomId(32,16),"x-nuwa-span-id":XR.generateRandomId(16,16)};this.sendRequest(o).then((e=>{if(0!==e.resultCode){const t=JSON.stringify(o);this.logger.error(kM,"updateLiveStreaming code:".concat(e.resultCode,", msg:").concat(e.resultMessage,", request ").concat(t)),n(new qc(Number(e.resultCode),e.resultMessage))}else this.logger.info(kM,"updateLiveStreaming success"),i(e)})).catch((e=>{this.logger.info(kM,"updateLiveStreaming failed: ".concat(e)),n(e)}))}))}async startLiveStreaming(e,t,r,i){return new Promise(((n,o)=>{const s={type:"START_PUBLISH",traceId:XR.generateStandardUuid(),taskId:e,config:r,userInfos:i,urls:t,"x-nuwa-trace-id":XR.generateRandomId(32,16),"x-nuwa-span-id":XR.generateRandomId(16,16)};this.sendRequest(s).then((e=>{if(0!==e.resultCode){const t=JSON.stringify(s);this.logger.error(kM,"startLiveStreamRequest code:".concat(e.resultCode,", msg:").concat(e.resultMessage,", request ").concat(t)),o(new qc(Number(e.resultCode),e.resultMessage))}else this.logger.info(kM,"startLiveStreamRequest success"),n(e)})).catch((e=>{this.logger.info(kM,"startLiveStreamRequest failed: ".concat(e)),o(e)}))}))}async stopLiveStreaming(e){return new Promise(((t,r)=>{const i={type:"STOP_PUBLISH",traceId:XR.generateStandardUuid(),taskId:e,"x-nuwa-trace-id":XR.generateRandomId(32,16),"x-nuwa-span-id":XR.generateRandomId(16,16)};this.sendRequest(i).then((e=>{if(0!==e.resultCode){const t=JSON.stringify(i);this.logger.error(kM,"stopLiveStreaming code:".concat(e.resultCode,", msg:").concat(e.resultMessage,", request ").concat(t)),r(new qc(Number(e.resultCode),e.resultMessage))}else this.logger.info(kM,"stopLiveStreaming success"),t(e)})).catch((e=>{this.logger.info(kM,"stopLiveStreaming failed: ".concat(e)),r(e)}))}))}receiveMsg(e){if(e.type)switch(EC.has("".concat(e.type))||this.logger.info(kM,"message type: ".concat(e.type)),e.type){case bC.statusChangeNotify:var t;null===(t=e.infos)||void 0===t||t.forEach((e=>{iE.addPrivacyString(e.userId),iE.addPrivacyString(e.appData.nickname)})),this.emit(bC.statusChangeNotify,e);break;case bC.uploadLogNotify:this.emit(bC.uploadLogNotify,e);break;case bC.pushStreamNotify:{const t=e;iE.addPrivacyString(t.userId),this.emit(bC.pushStreamNotify,e);break}case bC.stopPushStreamNotify:{const t=e;iE.addPrivacyString(t.userId),this.emit(bC.stopPushStreamNotify,e);break}case bC.watchStreamNotify:this.emit(bC.watchStreamNotify,e);break;case bC.changeStreamStatusNotify:{const t=e;iE.addPrivacyString(t.userId),this.emit(bC.changeStreamStatusNotify,e);break}case bC.disconnectNotify:{const t=e;iE.addPrivacyString(t.userId),this.emit(bC.disconnectNotify,e);break}case bC.reconnectNotify:{const t=e;iE.addPrivacyString(t.userId),this.emit(bC.reconnectNotify,e);break}case bC.configNotify:this.emit(bC.configNotify,e);break;case bC.appDataChangeNotify:{const t=e;iE.addPrivacyString(t.userId),this.emit(bC.appDataChangeNotify,e);break}case bC.top3AudioVolumeNotify:var r;null===(r=e.topUserAudios)||void 0===r||r.forEach((e=>{iE.addPrivacyString(e.userId)})),this.emit(bC.top3AudioVolumeNotify,e);break;case bC.publishStatusNotify:this.emit(bC.publishStatusNotify,e);break;case bC.roomStreamStatusNotify:this.emit(bC.roomStreamStatusNotify,e);break;default:this.logger.error(kM,"unknown message type ".concat(e.type))}else this.logger.error(kM,"unknown message:".concat(e))}setConfigParams(e){this.socket.setKeepAliveParams(e)}getInfo(){return{traceId:this.traceId}}mediaRelay(e,t,r){return new Promise(((i,n)=>{var o,s,a;const c={type:"ROOM_MEDIA_RELAY",srcRoomToken:{roomId:r.roomId,userId:(null===(o=e.srcRoomRelayInfo)||void 0===o?void 0:o.userId)||"0",role:0===r.role?oM.JOINER:oM.PLAYER,ctime:null===(s=e.srcRoomRelayInfo)||void 0===s?void 0:s.ctime,token:null===(a=e.srcRoomRelayInfo)||void 0===a?void 0:a.authorization}};c[t?"addDstRoomInfo":"removeDstRoomInfo"]=e.dstRoomRelayInfo.map((e=>({roomId:e.roomId,userId:r.userId,role:0===e.role?oM.JOINER:oM.PLAYER,ctime:e.ctime,token:e.authorization}))),this.sendRequest(c).then((e=>{0!==e.resultCode?n(new qc(Number(e.resultCode),e.resultMessage)):(this.logger.info(kM,"mediaRelay success"),i(e))})).catch((e=>{this.logger.info(kM,"mediaRelay failed: ".concat(e)),n(e)}))}))}}class MM{constructor(){this.audioStreams=new Map,this.logger=iE.getLogger()}getAudioStreams(){return[...this.audioStreams.values()]}getAudioStream(e){return this.audioStreams.get(e)}addAudioStream(e,t){const r={audioPlayer:null,audioMediaTrack:null,streamId:e,ssrc:t,playStatus:"init"};this.audioStreams.set(e,r)}updateAudioStream(e,t){const r=this.audioStreams.get(e);r.audioMediaTrack=t,r.audioPlayer=new JO({logger:this.logger,playerId:e,track:t})}getAudioLevel(){const e=[];for(const r of this.audioStreams.values()){var t;e.push({streamId:r.streamId,ssrc:r.ssrc,level:null===(t=r.audioPlayer)||void 0===t?void 0:t.getAudioLevel()})}return e}async setAudioOutput(e){if("sinkId"in HTMLMediaElement.prototype&&e)for(const t of this.audioStreams.values())await t.audioPlayer.setSinkId(e)}setAudioVolume(e){const t=e/100;for(const i of this.audioStreams.values()){var r;if("notAllow"===i.playStatus)this.resume(i.streamId).then((()=>{var e;null===(e=i.audioPlayer)||void 0===e||e.setVolume(t)}));else null===(r=i.audioPlayer)||void 0===r||r.setVolume(t)}}muteAudio(e){for(const t of this.audioStreams.values())e||"notAllow"!==t.playStatus?t.audioMediaTrack.enabled=!e:this.resume(t.streamId).then((()=>{t.audioMediaTrack.enabled=!e}))}isAudioMuted(){const e=Array.from(this.audioStreams.values());return!e.every((e=>"normal"===e.playStatus))||!e.every((e=>e.audioMediaTrack.enabled))}async play(e){for(const i of this.audioStreams.values())try{var t;if(e){if(i.streamId===e){var r;await(null===(r=i.audioPlayer)||void 0===r?void 0:r.play()),i.playStatus="normal";break}}else await(null===(t=i.audioPlayer)||void 0===t?void 0:t.play()),i.playStatus="normal"}catch(jN){this.logger.error("RemoteTopNAudioStreams","resume failed, error: ".concat(jN)),i.playStatus="notAllow"}}async resume(e){for(const i of this.audioStreams.values())try{var t;if(e){if(i.streamId===e){var r;await(null===(r=i.audioPlayer)||void 0===r?void 0:r.resume()),i.playStatus="normal";break}}else await(null===(t=i.audioPlayer)||void 0===t?void 0:t.resume()),i.playStatus="normal"}catch(jN){this.logger.error("RemoteTopNAudioStreams","resume failed, error: ".concat(jN)),i.playStatus="notAllow"}}setAudioVolume4Id(e,t){for(const r of this.audioStreams.values())if(r.streamId===e&&r.audioPlayer){"notAllow"===r.playStatus?this.resume(e).then((()=>{r.audioPlayer.setVolume(t/100)})):r.audioPlayer.setVolume(t/100);break}}close(e){if(e&&this.audioStreams.has(e)){const t=this.audioStreams.get(e);return t.audioPlayer.stop(),t.audioMediaTrack=null,t.audioPlayer=null,t.playStatus="init",void this.audioStreams.delete(e)}for(const t of this.audioStreams.values())t.audioPlayer.stop(),t.audioMediaTrack=null,t.audioPlayer=null,t.playStatus="init";this.audioStreams.clear()}}const DM="LocalStreamPublishManager";class NM{constructor(){this.logger=iE.getLogger(),this.localStreams=new Map,this.sdpRepInfo=null}reset(){Array.from(this.localStreams.values()).forEach((e=>{e.localTrackPublishInfos.clear()})),this.logger.info(DM,"reset successfully")}getStreamTrackInfo(e){const t=[];let r;return e.getHRTCTracks({hasTrack:!0}).forEach((i=>{const n=i.getTrackProfile();if(i.getTrackType()===mO.TRACK_TYPE_AUDIO)i.setTrackId(this.sdpRepInfo.audio.streamCodecs[0].streamUid.toString()),r={type:mO.TRACK_TYPE_AUDIO,resolutionId:i.getResolutionId(),upstream:{content:CC.main,mute:i.getTrackMuted(),maxMbps:Math.round((n.bitrate||0)/1e3),sampleRate:n.sampleRate,channels:n.channelCount,codec:wM.OPUS,pt:CM.opusPayload,streamUid:this.sdpRepInfo.audio.streamCodecs[0].streamUid,ssrc:this.sdpRepInfo.audio.sendSsrcBegin}};else{let t;if(e.isAuxiliary())i.setTrackId(this.sdpRepInfo.desktopVideo.streamCodecs[0].streamUid.toString()),t={content:CC.desktop,mute:i.getTrackMuted(),width:n.width,height:n.height,fps:n.frameRate,maxMbps:Math.round((n.maxBitrate||0)/1e3),maxFs:n.frameRate,codec:wM.H264,pt:AM.h264PayLoad,streamUid:this.sdpRepInfo.desktopVideo.streamCodecs[0].streamUid,ssrc:this.sdpRepInfo.desktopVideo.sendSsrcBegin};else{const e=i.getTrackContentType(),r=this.sdpRepInfo.video.streamCodecs.find((t=>t.content===e)).streamUid;i.setTrackId(r.toString()),t={content:e,mute:i.getTrackMuted(),width:n.width,height:n.height,fps:n.frameRate,maxMbps:Math.round((n.maxBitrate||0)/1e3),maxFs:n.frameRate,codec:wM.H264,pt:AM.h264PayLoad,streamUid:r,ssrc:e===CC.main?this.sdpRepInfo.video.sendSsrcBegin:this.sdpRepInfo.video.sendSsrcEnd}}r={type:mO.TRACK_TYPE_VIDEO,resolutionId:i.getResolutionId(),upstream:t}}t.push(r)})),this.logger.debug(DM,"getStreamTrackInfo, get trackInfos: ".concat(JSON.stringify(t))),t}getLocalStream(e){const t=this.localStreams.get(e);return t?t.localStream:null}generatePubInfoWhenPublish(e,t){const r={allTracks2Publish:[],tracks2NewPublish:[],tracks2KeepPublish:[],tracks2UnPublish:[]},i=e.isAuxiliary()?gO.STREAM_TYPE_AUX:gO.STREAM_TYPE_MAIN,n=this.localStreams.get(i);return n&&0!==n.localTrackPublishInfos.size?this.isSameStreamId(e)?this.updateStream(e,r):this.replaceStream(e,r):this.addStream(e,r,t),this.buildAll2PublishTrackInfo(r.allTracks2Publish,e.isAuxiliary(),!0),this.logger.info(DM,"generatePubInfoWhenPublish tracks2Update input: ".concat(JSON.stringify(r))),r}setSdpRepInfo(e){this.sdpRepInfo=e}buildAll2PublishTrackInfo(e,t,r){t?(this.buildMediaPubInfo(e,mO.TRACK_TYPE_VIDEO,gO.STREAM_TYPE_MAIN),this.buildMediaPubInfo(e,mO.TRACK_TYPE_AUDIO,gO.STREAM_TYPE_MAIN),r&&this.buildMediaPubInfo(e,mO.TRACK_TYPE_VIDEO,gO.STREAM_TYPE_AUX)):(this.buildMediaPubInfo(e,mO.TRACK_TYPE_VIDEO,gO.STREAM_TYPE_AUX),r&&(this.buildMediaPubInfo(e,mO.TRACK_TYPE_VIDEO,gO.STREAM_TYPE_MAIN),this.buildMediaPubInfo(e,mO.TRACK_TYPE_AUDIO,gO.STREAM_TYPE_MAIN)))}buildMediaPubInfo(e,t,r){var i;const n=null===(i=this.localStreams.get(r))||void 0===i?void 0:i.localTrackPublishInfos;n&&Array.from(n.values()).filter((e=>e.type===t)).forEach((t=>{t.sender&&(t.upstream.mute=!t.sender.track.enabled),e.push(t)}))}isSameStreamId(e){const t=e.isAuxiliary()?gO.STREAM_TYPE_AUX:gO.STREAM_TYPE_MAIN;return this.localStreams.get(t).streamId===e.getLocalId()}static getString4TrackPublishInfos(e){let t;for(const r of e.entries())t="".concat(t||""," resolutionId: ").concat(r[0],", track type: ").concat(r[1].type,", watched: ").concat(r[1].watched,", published: ").concat(r[1].published);return t}updateStream(e,t){this.logger.info(DM,"updateStream, update stream begin");const r=[],i=e.isAuxiliary()?gO.STREAM_TYPE_AUX:gO.STREAM_TYPE_MAIN,n=this.getStreamTrackInfo(e),o=this.localStreams.get(i);n.forEach((e=>{const n=o.localTrackPublishInfos.get(e.resolutionId);r.push(e),n?(n.upstream.mute=e.upstream.mute,n.published&&t.tracks2KeepPublish.push(n),n.watched&&!n.published&&t.tracks2NewPublish.push(n)):this.addTrack(i,e,t,o)}));const s=[];Array.from(o.localTrackPublishInfos.values()).forEach((e=>{const i=r.find((t=>t.resolutionId===e.resolutionId));if(i){if(!NM.isSameResolution(i,e)){const t={type:i.type,resolutionId:i.resolutionId,upstream:i.upstream,published:e.published,watched:e.watched,ssrc:e.ssrc,sender:e.sender};o.localTrackPublishInfos.set(i.resolutionId,t)}}else e.published&&t.tracks2UnPublish.push(e),s.push(e.resolutionId)})),s.forEach((e=>{o.localTrackPublishInfos.delete(e)})),this.logger.info(DM,"updateStream, update stream ".concat(e.getLocalId()," successfully\n ").concat(NM.getString4TrackPublishInfos(o.localTrackPublishInfos)))}static isSameResolution(e,t){return e.upstream.height===t.upstream.height&&e.upstream.width===t.upstream.width}replaceStream(e,t){return this.logger.info(DM,"replaceStream begin"),this.addStream(e,t)}addStream(e,t,r){const i=e.isAuxiliary()?gO.STREAM_TYPE_AUX:gO.STREAM_TYPE_MAIN,n=this.getStreamTrackInfo(e),o={localStream:e,streamId:e.getLocalId(),localTrackPublishInfos:new Map};n.forEach((e=>{this.addTrack(i,e,t,o,r)})),this.localStreams.set(i,o),this.logger.info(DM,"addStream, add stream ".concat(e.getLocalId()," successfully ,\n ").concat(NM.getString4TrackPublishInfos(o.localTrackPublishInfos)))}generatePubInfoWhenUnPublish(e){const t=e.isAuxiliary()?gO.STREAM_TYPE_AUX:gO.STREAM_TYPE_MAIN,r={allTracks2Publish:[],tracks2KeepPublish:[],tracks2NewPublish:[],tracks2UnPublish:[]},i=this.localStreams.get(t);return i?(Array.from(i.localTrackPublishInfos.values()).filter((e=>e.published)).forEach((e=>{r.tracks2UnPublish.push(e)})),this.buildAll2PublishTrackInfo(r.allTracks2Publish,e.isAuxiliary(),!1),r):(this.logger.warn(DM,"stream not publish"),r.allTracks2Publish=null,r)}removeStream(e){const t=e.isAuxiliary()?gO.STREAM_TYPE_AUX:gO.STREAM_TYPE_MAIN;if(!this.localStreams.has(t))throw this.logger.error(DM,"removeStream, stream not exist"),new qc(Gc.RTC_ERR_CODE_INVALID_PARAMETER);this.localStreams.delete(t)}generatePubInfoWhenWatch(e,t,r,i){if(this.logger.info(DM,"generatePubInfoWhenWatch watch ".concat(e," streams")),!t||!r)return null;const n={allTracks2Publish:null,tracks2KeepPublish:[],tracks2NewPublish:[],tracks2UnPublish:[]},o=this.localStreams.get(e);if(!o)return this.logger.info(DM,"generatePubInfoWhenWatch, stream not exist"),null;const s=Array.from(o.localTrackPublishInfos.values());return 0===t.length&&0===r.length?s.forEach((e=>{this.renewTrack2Update(!1,e,n)})):i===mO.TRACK_TYPE_VIDEO&&0===t.length&&r.length>0&&s.filter((e=>e.type===mO.TRACK_TYPE_VIDEO)).forEach((e=>{this.renewTrack2Update(!1,e,n)})),s.forEach((e=>{if(t.length>0&&e.type===mO.TRACK_TYPE_VIDEO){const r=t.find((t=>t===e.upstream.ssrc));this.renewTrack2Update(!!r,e,n)}if(r.length>0&&e.type===mO.TRACK_TYPE_AUDIO){const t=r.find((t=>t===e.upstream.ssrc));this.renewTrack2Update(!!t,e,n)}})),t.forEach((e=>{s.some((t=>e===t.upstream.ssrc))||this.logger.error(DM,"generatePubInfoWhenWatch, watch video ssrc:".concat(e," is not exist"))})),r.forEach((e=>{s.some((t=>e===t.upstream.ssrc))||this.logger.error(DM,"generatePubInfoWhenWatch, watch audio ssrc:".concat(e," is not exist"))})),n}renewTrack2Update(e,t,r){e?t.published?(r.tracks2KeepPublish.push(t),this.logger.info(DM,"generatePubInfoWhenWatch, keep ".concat(t.type," ssrc:").concat(t.ssrc))):(t.watched=!0,r.tracks2NewPublish.push(t),this.logger.info(DM,"generatePubInfoWhenWatch, new publish ".concat(t.type," ssrc:").concat(t.ssrc))):t.published&&(t.watched=!1,r.tracks2UnPublish.push(t),this.logger.info(DM,"generatePubInfoWhenWatch, new unpublish ".concat(t.type," ssrc:").concat(t.ssrc)))}addTrack(e,t,r,i,n){const o=NM.getDefaultWatchFlag(e,t.type,n),s={type:t.type,resolutionId:t.resolutionId,published:!1,watched:o,upstream:t.upstream,ssrc:t.upstream.ssrc,sender:null};s.watched&&r.tracks2NewPublish.push(s),i.localTrackPublishInfos.set(t.resolutionId,s),this.logger.info(DM,"addTrack, add track for resolutionId ".concat(t.resolutionId," successfully"))}static getDefaultWatchFlag(e,t,r){return e===gO.STREAM_TYPE_MAIN&&t===mO.TRACK_TYPE_AUDIO||(null==r?void 0:r.autoPushVideo)&&t===mO.TRACK_TYPE_VIDEO}publishAuxVideoTrackOK(e,t){this.publishTrackSuccess(gO.STREAM_TYPE_AUX,mO.TRACK_TYPE_VIDEO,e,t)}publishMainVideoTrackOK(e,t,r){this.publishTrackSuccess(gO.STREAM_TYPE_MAIN,mO.TRACK_TYPE_VIDEO,e,t,r)}publishMainAudioTrackOK(e,t){this.publishTrackSuccess(gO.STREAM_TYPE_MAIN,mO.TRACK_TYPE_AUDIO,e,t)}publishTrackSuccess(e,t,r,i,n){const o=this.localStreams.get(e);if(!o)throw this.logger.error(DM,"stream is empty"),new qc(Gc.RTC_ERR_CODE_INVALID_PARAMETER);const s=this.getTrackInfo(o,t,n);if(!s)throw this.logger.error(DM,"getTrackInfo return empty"),new qc(Gc.RTC_ERR_CODE_INVALID_PARAMETER);s.published&&this.logger.info(DM,"stream already published"),s.published=!0,s.sender=r,this.logger.info(DM,"publish track for trackId: ".concat(n," successfully"))}unPublishTrackSuccess(e,t,r){const i=this.localStreams.get(e);if(!i)throw this.logger.error(DM,"stream is empty"),new qc(Gc.RTC_ERR_CODE_INVALID_PARAMETER);if(t===mO.TRACK_TYPE_VIDEO&&!r)throw this.logger.error(DM,"video trackId is empty"),new qc(Gc.RTC_ERR_CODE_INVALID_PARAMETER);const n=this.getTrackInfo(i,t,r);n?(n.published||this.logger.info(DM,"stream already unPublished"),n.published=!1,n.sender=null,this.logger.info(DM,"unPublish track for trackId: ".concat(r," successfully"))):this.logger.info(DM,"getTrackInfo return empty")}getMainStreamVideoPublishInfo(){return this.getTrackPublishInfos(gO.STREAM_TYPE_MAIN,mO.TRACK_TYPE_VIDEO)}getPublishedMainVideoTrackInfo(e){const t=this.getTrackPublishInfo(gO.STREAM_TYPE_MAIN,mO.TRACK_TYPE_VIDEO,e);return null!=t&&t.published&&t.sender?t:null}getPublishedMainAudioTrackInfo(){const e=this.getTrackPublishInfo(gO.STREAM_TYPE_MAIN,mO.TRACK_TYPE_AUDIO);return null!=e&&e.published&&e.sender?e:null}getPublishedAuxVideoTrackInfo(){const e=this.getTrackPublishInfo(gO.STREAM_TYPE_AUX,mO.TRACK_TYPE_VIDEO);return null!=e&&e.published&&e.sender?e:null}getPublishedMainVideoTrackInfos(){const e=this.getTrackPublishInfos(gO.STREAM_TYPE_MAIN,mO.TRACK_TYPE_VIDEO);return(null==e?void 0:e.length)>0?e.filter((e=>e.published&&e.sender)):null}getPublishedMainStreamInfos(){const e=this.getTrackPublishInfos(gO.STREAM_TYPE_MAIN);return(null==e?void 0:e.length)>0?e.filter((e=>e.published&&e.sender)):null}getPublishedAuxStreamInfo(){const e=this.localStreams.get(gO.STREAM_TYPE_AUX);if(!e)return null;return Array.from(e.localTrackPublishInfos.values()).find((e=>e.published&&e.sender))?e:null}getTrackPublishInfos(e,t){const r=this.localStreams.get(e);return r?t?Array.from(r.localTrackPublishInfos.values()).filter((e=>e.type===t)):Array.from(r.localTrackPublishInfos.values()):(this.logger.info(DM,"getTrackPublishInfos, not found"),null)}getTrackPublishInfo(e,t,r){const i=this.localStreams.get(e);return i?this.getTrackInfo(i,t,r):null}isAuxVideoTrackPublished(){const e=this.isTrackPublished(gO.STREAM_TYPE_AUX,mO.TRACK_TYPE_VIDEO);return this.logger.info(DM,"isAuxVideoTrackPublished: ".concat(e)),e}isMainStreamPublished(){const e=this.isTrackPublished(gO.STREAM_TYPE_MAIN,mO.TRACK_TYPE_VIDEO)||this.isTrackPublished(gO.STREAM_TYPE_MAIN,mO.TRACK_TYPE_AUDIO);return this.logger.info(DM,"isMainVideoTrackPublished: ".concat(e)),e}isTrackPublished(e,t,r){const i=this.localStreams.get(e);if(!i)return this.logger.info(DM,"isTrackPublished, not found"),!1;const n=this.getTrackInfo(i,t,r);return n?n.published&&!!n.sender:(this.logger.info(DM,"isTrackPublished, not found"),!1)}getTrackInfo(e,t,r){if(!e||0===e.localTrackPublishInfos.size)return null;if(t===mO.TRACK_TYPE_AUDIO)return Array.from(e.localTrackPublishInfos.values()).find((e=>e.type===mO.TRACK_TYPE_AUDIO));if(r)return Array.from(e.localTrackPublishInfos.values()).find((e=>e.type===mO.TRACK_TYPE_VIDEO&&e.upstream.streamUid.toString()===r));const i=NM.getMaxResolutionId(e);return i?e.localTrackPublishInfos.get(i):null}static getMaxResolutionId(e){var t,r;return null==e||null===(t=e.localStream)||void 0===t||null===(r=t.getMaxResolutionHRTCTrack())||void 0===r?void 0:r.getResolutionId()}unPublishAuxStreamOK(){this.unPublishStreamSuccess(gO.STREAM_TYPE_AUX)}unPublishMainStreamOK(){this.unPublishStreamSuccess(gO.STREAM_TYPE_MAIN)}unPublishStreamSuccess(e){var t;const r=this.localStreams.get(e);r?(null===(t=r.localStream)||void 0===t||t.getHRTCTracks({hasTrack:!0,mediaType:mO.TRACK_TYPE_VIDEO}).forEach((e=>e&&e.setTrackId(""))),this.removeStream(r.localStream),this.logger.info(DM,"unPublishStreamSuccess, ".concat(e))):this.logger.warn(DM,"stream not publish")}isAuxVideoTrackValid(e){return this.isTrackValid(gO.STREAM_TYPE_AUX,mO.TRACK_TYPE_VIDEO,e)}isTrackValid(e,t,r){const i=this.localStreams.get(e);return i?Array.from(i.localTrackPublishInfos.values()).some((e=>e.type===t&&e.upstream.streamUid.toString()===r)):(this.logger.info(DM,"isTrackValid, not found"),!1)}generateOptTags(e,t){const r=[],i=this.localStreams.get(e);if(!i)return r;return Array.from(i.localTrackPublishInfos.values()).filter((e=>e.type===t&&e.published&&e.sender)).forEach((e=>{if(t===mO.TRACK_TYPE_VIDEO){const t=e.upstream?e.upstream.height:0,i=e.upstream?e.upstream.width:0,n="".concat(e.ssrc,":").concat(t,"*").concat(i);r.push(n)}else{var n;const t=null===(n=i.localStream.getAudioHRTCTrack())||void 0===n?void 0:n.getTrackProfile(),o="".concat(e.ssrc,":").concat(t?t.sampleRate:0);r.push(o)}})),r}generateMainAudioOptTag(){const e=this.generateOptTags(gO.STREAM_TYPE_MAIN,mO.TRACK_TYPE_AUDIO);return e.length>0?e[0]:null}generateAuxOptTag(){const e=this.generateOptTags(gO.STREAM_TYPE_AUX,mO.TRACK_TYPE_VIDEO);return e.length>0?e[0]:null}generateMainVideoOptTags(){const e=this.generateOptTags(gO.STREAM_TYPE_MAIN,mO.TRACK_TYPE_VIDEO);return e.length>0?e:null}}var UM={},xM={exports:{}},LM=xM.exports={v:[{name:"version",reg:/^(\d*)$/}],o:[{name:"origin",reg:/^(\S*) (\d*) (\d*) (\S*) IP(\d) (\S*)/,names:["username","sessionId","sessionVersion","netType","ipVer","address"],format:"%s %s %d %s IP%d %s"}],s:[{name:"name"}],i:[{name:"description"}],u:[{name:"uri"}],e:[{name:"email"}],p:[{name:"phone"}],z:[{name:"timezones"}],r:[{name:"repeats"}],t:[{name:"timing",reg:/^(\d*) (\d*)/,names:["start","stop"],format:"%d %d"}],c:[{name:"connection",reg:/^IN IP(\d) (\S*)/,names:["version","ip"],format:"IN IP%d %s"}],b:[{push:"bandwidth",reg:/^(TIAS|AS|CT|RR|RS):(\d*)/,names:["type","limit"],format:"%s:%s"}],m:[{reg:/^(\w*) (\d*) ([\w/]*)(?: (.*))?/,names:["type","port","protocol","payloads"],format:"%s %d %s %s"}],a:[{push:"rtp",reg:/^rtpmap:(\d*) ([\w\-.]*)(?:\s*\/(\d*)(?:\s*\/(\S*))?)?/,names:["payload","codec","rate","encoding"],format:function(e){return e.encoding?"rtpmap:%d %s/%s/%s":e.rate?"rtpmap:%d %s/%s":"rtpmap:%d %s"}},{push:"fmtp",reg:/^fmtp:(\d*) ([\S| ]*)/,names:["payload","config"],format:"fmtp:%d %s"},{name:"control",reg:/^control:(.*)/,format:"control:%s"},{name:"rtcp",reg:/^rtcp:(\d*)(?: (\S*) IP(\d) (\S*))?/,names:["port","netType","ipVer","address"],format:function(e){return null!=e.address?"rtcp:%d %s IP%d %s":"rtcp:%d"}},{push:"rtcpFbTrrInt",reg:/^rtcp-fb:(\*|\d*) trr-int (\d*)/,names:["payload","value"],format:"rtcp-fb:%s trr-int %d"},{push:"rtcpFb",reg:/^rtcp-fb:(\*|\d*) ([\w-_]*)(?: ([\w-_]*))?/,names:["payload","type","subtype"],format:function(e){return null!=e.subtype?"rtcp-fb:%s %s %s":"rtcp-fb:%s %s"}},{push:"ext",reg:/^extmap:(\d+)(?:\/(\w+))?(?: (urn:ietf:params:rtp-hdrext:encrypt))? (\S*)(?: (\S*))?/,names:["value","direction","encrypt-uri","uri","config"],format:function(e){return"extmap:%d"+(e.direction?"/%s":"%v")+(e["encrypt-uri"]?" %s":"%v")+" %s"+(e.config?" %s":"")}},{name:"extmapAllowMixed",reg:/^(extmap-allow-mixed)/},{push:"crypto",reg:/^crypto:(\d*) ([\w_]*) (\S*)(?: (\S*))?/,names:["id","suite","config","sessionConfig"],format:function(e){return null!=e.sessionConfig?"crypto:%d %s %s %s":"crypto:%d %s %s"}},{name:"setup",reg:/^setup:(\w*)/,format:"setup:%s"},{name:"connectionType",reg:/^connection:(new|existing)/,format:"connection:%s"},{name:"mid",reg:/^mid:([^\s]*)/,format:"mid:%s"},{name:"msid",reg:/^msid:(.*)/,format:"msid:%s"},{name:"ptime",reg:/^ptime:(\d*(?:\.\d*)*)/,format:"ptime:%d"},{name:"maxptime",reg:/^maxptime:(\d*(?:\.\d*)*)/,format:"maxptime:%d"},{name:"direction",reg:/^(sendrecv|recvonly|sendonly|inactive)/},{name:"icelite",reg:/^(ice-lite)/},{name:"iceUfrag",reg:/^ice-ufrag:(\S*)/,format:"ice-ufrag:%s"},{name:"icePwd",reg:/^ice-pwd:(\S*)/,format:"ice-pwd:%s"},{name:"fingerprint",reg:/^fingerprint:(\S*) (\S*)/,names:["type","hash"],format:"fingerprint:%s %s"},{push:"candidates",reg:/^candidate:(\S*) (\d*) (\S*) (\d*) (\S*) (\d*) typ (\S*)(?: raddr (\S*) rport (\d*))?(?: tcptype (\S*))?(?: generation (\d*))?(?: network-id (\d*))?(?: network-cost (\d*))?/,names:["foundation","component","transport","priority","ip","port","type","raddr","rport","tcptype","generation","network-id","network-cost"],format:function(e){var t="candidate:%s %d %s %d %s %d typ %s";return t+=null!=e.raddr?" raddr %s rport %d":"%v%v",t+=null!=e.tcptype?" tcptype %s":"%v",null!=e.generation&&(t+=" generation %d"),t+=null!=e["network-id"]?" network-id %d":"%v",t+=null!=e["network-cost"]?" network-cost %d":"%v"}},{name:"endOfCandidates",reg:/^(end-of-candidates)/},{name:"remoteCandidates",reg:/^remote-candidates:(.*)/,format:"remote-candidates:%s"},{name:"iceOptions",reg:/^ice-options:(\S*)/,format:"ice-options:%s"},{push:"ssrcs",reg:/^ssrc:(\d*) ([\w_-]*)(?::(.*))?/,names:["id","attribute","value"],format:function(e){var t="ssrc:%d";return null!=e.attribute&&(t+=" %s",null!=e.value&&(t+=":%s")),t}},{push:"ssrcGroups",reg:/^ssrc-group:([\x21\x23\x24\x25\x26\x27\x2A\x2B\x2D\x2E\w]*) (.*)/,names:["semantics","ssrcs"],format:"ssrc-group:%s %s"},{name:"msidSemantic",reg:/^msid-semantic:\s?(\w*) (\S*)/,names:["semantic","token"],format:"msid-semantic: %s %s"},{push:"groups",reg:/^group:(\w*) (.*)/,names:["type","mids"],format:"group:%s %s"},{name:"rtcpMux",reg:/^(rtcp-mux)/},{name:"rtcpRsize",reg:/^(rtcp-rsize)/},{name:"sctpmap",reg:/^sctpmap:([\w_/]*) (\S*)(?: (\S*))?/,names:["sctpmapNumber","app","maxMessageSize"],format:function(e){return null!=e.maxMessageSize?"sctpmap:%s %s %s":"sctpmap:%s %s"}},{name:"xGoogleFlag",reg:/^x-google-flag:([^\s]*)/,format:"x-google-flag:%s"},{push:"rids",reg:/^rid:([\d\w]+) (\w+)(?: ([\S| ]*))?/,names:["id","direction","params"],format:function(e){return e.params?"rid:%s %s %s":"rid:%s %s"}},{push:"imageattrs",reg:new RegExp("^imageattr:(\\d+|\\*)[\\s\\t]+(send|recv)[\\s\\t]+(\\*|\\[\\S+\\](?:[\\s\\t]+\\[\\S+\\])*)(?:[\\s\\t]+(recv|send)[\\s\\t]+(\\*|\\[\\S+\\](?:[\\s\\t]+\\[\\S+\\])*))?"),names:["pt","dir1","attrs1","dir2","attrs2"],format:function(e){return"imageattr:%s %s %s"+(e.dir2?" %s %s":"")}},{name:"simulcast",reg:new RegExp("^simulcast:(send|recv) ([a-zA-Z0-9\\-_~;,]+)(?:\\s?(send|recv) ([a-zA-Z0-9\\-_~;,]+))?$"),names:["dir1","list1","dir2","list2"],format:function(e){return"simulcast:%s %s"+(e.dir2?" %s %s":"")}},{name:"simulcast_03",reg:/^simulcast:[\s\t]+([\S+\s\t]+)$/,names:["value"],format:"simulcast: %s"},{name:"framerate",reg:/^framerate:(\d+(?:$|\.\d+))/,format:"framerate:%s"},{name:"sourceFilter",reg:/^source-filter: *(excl|incl) (\S*) (IP4|IP6|\*) (\S*) (.*)/,names:["filterMode","netType","addressTypes","destAddress","srcList"],format:"source-filter: %s %s %s %s %s"},{name:"bundleOnly",reg:/^(bundle-only)/},{name:"label",reg:/^label:(.+)/,format:"label:%s"},{name:"sctpPort",reg:/^sctp-port:(\d+)$/,format:"sctp-port:%s"},{name:"maxMessageSize",reg:/^max-message-size:(\d+)$/,format:"max-message-size:%s"},{push:"tsRefClocks",reg:/^ts-refclk:([^\s=]*)(?:=(\S*))?/,names:["clksrc","clksrcExt"],format:function(e){return"ts-refclk:%s"+(null!=e.clksrcExt?"=%s":"")}},{name:"mediaClk",reg:/^mediaclk:(?:id=(\S*))? *([^\s=]*)(?:=(\S*))?(?: *rate=(\d+)\/(\d+))?/,names:["id","mediaClockName","mediaClockValue","rateNumerator","rateDenominator"],format:function(e){var t="mediaclk:";return t+=null!=e.id?"id=%s %s":"%v%s",t+=null!=e.mediaClockValue?"=%s":"",t+=null!=e.rateNumerator?" rate=%s":"",t+=null!=e.rateDenominator?"/%s":""}},{name:"keywords",reg:/^keywds:(.+)$/,format:"keywds:%s"},{name:"content",reg:/^content:(.+)/,format:"content:%s"},{name:"bfcpFloorCtrl",reg:/^floorctrl:(c-only|s-only|c-s)/,format:"floorctrl:%s"},{name:"bfcpConfId",reg:/^confid:(\d+)/,format:"confid:%s"},{name:"bfcpUserId",reg:/^userid:(\d+)/,format:"userid:%s"},{name:"bfcpFloorId",reg:/^floorid:(.+) (?:m-stream|mstrm):(.+)/,names:["id","mStream"],format:"floorid:%s mstrm:%s"},{push:"invalid",names:["value"]}]};Object.keys(LM).forEach((function(e){LM[e].forEach((function(e){e.reg||(e.reg=/(.*)/),e.format||(e.format="%s")}))})),function(e){var t=function(e){return String(Number(e))===e?Number(e):e},r=function(e,r,i){var n=e.name&&e.names;e.push&&!r[e.push]?r[e.push]=[]:n&&!r[e.name]&&(r[e.name]={});var o=e.push?{}:n?r[e.name]:r;!function(e,r,i,n){if(n&&!i)r[n]=t(e[1]);else for(var o=0;o1&&(e[i[0]]=void 0),e};e.parseParams=function(e){return e.split(/;\s?/).reduce(o,{})},e.parseFmtpConfig=e.parseParams,e.parsePayloads=function(e){return e.toString().split(" ").map(Number)},e.parseRemoteCandidates=function(e){for(var r=[],i=e.split(" ").map(t),n=0;n=i)return e;var n=r[t];switch(t+=1,e){case"%%":return"%";case"%s":return String(n);case"%d":return Number(n);case"%v":return""}}))},jM=function(e,t,r){var i=[e+"="+(t.format instanceof Function?t.format(t.push?r:r[t.name]):t.format)];if(t.names)for(var n=0;n{for(const t in e)ZM.includes(t)||delete e[t]})));return XR.shieldIpAddress(WM(t))}}getMedias(e,t){return e.media.filter((e=>{let{type:r}=e;return r===t}))}deleteUnexpectedMedia(e){e.media&&(e.media=e.media.filter((e=>{let{type:t}=e;return t===mO.TRACK_TYPE_VIDEO||t===mO.TRACK_TYPE_AUDIO||t===mO.TYPE_APPLICATION})),this.portType_===NC.portNormal&&e.groups&&(e.groups=e.groups.filter((e=>{let{type:t}=e;return"BUNDLE"!==t.toLocaleUpperCase()}))))}transformVideoPayload(e){if(!e.rtp)return void this.logger_.warn(this.module_,"transformVideoPayload failed ,rtp is null");let t=null,r=null,i=0;for(const n of e.rtp){if(n.codec.toUpperCase()!==wM.H264)continue;r||(r=n.payload,this.logger_.info(this.module_,"record firstPayload, firstPayload: ".concat(r)));const o=eD.getPacketizationMode(e.fmtp,n.payload),s=eD.getProfileLevelId(e.fmtp,n.payload);if(1===o&&(0===i&&(r=n.payload,i=1),"42e01f"===s)){t=n.payload,this.logger_.info(this.module_,"set retainPayload in transformVideoPayload, retainPayload: ".concat(t));break}}t||(t=r,this.logger_.info(this.module_,"no expected payload, use firstPayload as retainPayload, retainPayload: ".concat(t))),t?(eD.deletePayload(e,t),eD.modifyPayload(e,AM.h264PayLoad),eD.addVideoFec(e),eD.addFmtpAttr(e,AM.h264PayLoad,"max-br","5000000"),eD.addFmtpAttr(e,AM.h264PayLoad,QM,"1"),eD.addFmtpAttr(e,AM.rtxPayLoad,"apt","".concat(AM.h264PayLoad)),eD.addFmtpAttr(e,AM.rtxPayLoad,QM,"1")):this.logger_.error(this.module_,"transformVideoPayload failed,can not find expected payload.")}transformAudioPayload(e){if(!e.rtp)return void this.logger_.warn(this.module_,"transformAudioPayload failed, rtp is null");let t;for(const r of e.rtp)if(r.codec.toLowerCase()===wM.OPUS){t=r.payload;break}t?(eD.deletePayload(e,t),eD.modifyPayload(e,CM.opusPayload),eD.addNack(e)):this.logger_.error(this.module_,"transformAudioPayload failed,can not find expected payload.")}deleteRetransmissionSsrc(e){if(!e.ssrcGroups||!e.ssrcs)return;const t=[];e.ssrcGroups.forEach((e=>{let{ssrcs:r}=e;const i=this.getRetransmissionSsrc(r);null!=i&&t.push(i)})),0!==t.length&&(e.ssrcGroups=void 0,e.ssrcs=e.ssrcs.filter((e=>{let{id:r}=e;return!t.includes(r.toString())})))}addVideoSsrcRange(e,t){!t||t.length<1||(e.invalid||(e.invalid=[]),e.invalid.push({value:"send-ssrc-list:".concat(t.join(","))}))}static addAudioSsrcRange(e,t,r){if(t)if(e.invalid||(e.invalid=[]),r){const r=XR.getRandomUint32();e.invalid.push({value:"send-ssrc-list:".concat(t,",").concat(r)})}else e.invalid.push({value:"send-ssrc-list:".concat(t)})}modifyCandidate(e,t){if(!e.candidates){const r=null==t?void 0:t.find((t=>"".concat(e.mid)==="".concat(t.sdpMid)));if(r){const t=/.*generation\s(\d+).*/.exec(r.candidate)||[],i=/.*network\-id\s(\d+).*/.exec(r.candidate)||[],n=/.*network\-cost\s(\d+).*/.exec(r.candidate)||[];e.candidates=e.candidates||[],e.candidates.push({foundation:r.foundation,component:"rtp"===r.component?1:2,transport:r.protocol,priority:r.priority,ip:r.address,port:r.port,type:r.type,raddr:r.relatedAddress,rport:r.relatedPort,tcptype:r.tcpType,generation:2===t.length?parseInt(t[1]):void 0,"network-id":2===i.length?parseInt(i[1]):void 0,"network-cost":2===n.length?parseInt(n[1]):void 0})}}}static getPacketizationMode(e,t){if(!e)return 1;for(const r of e){if(r.payload!==t)continue;if(!r.config.includes(qM))return 1;const e=JM(r.config);return null==e[qM]?1:parseInt(String(e[qM]),10)}return 1}static getProfileLevelId(e,t){if(!e)return"";for(const r of e){if(r.payload!==t)continue;if(!r.config.includes(XM))return"";const e=JM(r.config);return e[XM]?String(e[XM]):""}return""}static deletePayload(e,t){e.rtp&&(e.rtp=e.rtp.filter((e=>{let{payload:r}=e;return r===t}))),e.rtcpFb&&(e.rtcpFb=e.rtcpFb.filter((e=>{let{payload:r}=e;return r===t}))),e.fmtp&&(e.fmtp=e.fmtp.filter((e=>{let{payload:r}=e;return r===t}))),e.payloads=t.toString()}static modifyPayload(e,t){e.rtp&&e.rtp.forEach((e=>{e.payload=t})),e.rtcpFb&&e.rtcpFb.forEach((e=>{e.payload=t})),e.fmtp&&e.fmtp.forEach((r=>{r.payload=t,e.type===mO.TRACK_TYPE_AUDIO&&/stereo/.test(r.config)&&(r.config=r.config.replace("stereo=1","stereo=0"))})),e.payloads=t.toString()}static addVideoFec(e){e.rtp||(e.rtp=[]),e.rtp.push({payload:AM.rtxPayLoad,codec:"rtx",rate:9e4}),e.rtp.push({payload:AM.redPayLoad,codec:"red",rate:9e4}),e.rtp.push({payload:AM.ulpfecPayLoad,codec:"ulpfec",rate:9e4}),e.payloads="".concat(AM.rtxPayLoad," ").concat(e.payloads," ").concat(AM.redPayLoad," ").concat(AM.ulpfecPayLoad)}static addFmtpAttr(e,t,r,i){if(!e.fmtp||0===e.fmtp.length)return e.fmtp=[],void e.fmtp.push({payload:t,config:r+"="+i});const n=e.fmtp.find((e=>e.payload===t));if(n){if(JM(n.config)[r])return;n.config=n.config+";"+r+"="+i}else e.fmtp.push({payload:t,config:r+"="+i})}static addNack(e){const t=e.rtp[0].payload;e.rtcpFb||(e.rtcpFb=[]),e.rtcpFb.push({payload:t,type:"ccm",subtype:"fir"}),e.rtcpFb.push({payload:t,type:"nack"}),e.rtcpFb.push({payload:t,type:"nack",subtype:"pli"})}getRetransmissionSsrc(e){if(!e)return void this.logger_.warn(this.module_,"getRetransmissionSsrc failed, ssrcs is null");const t=e.split(" ");if(2===t.length)return t[1];this.logger_.warn(this.module_,"getRetransmissionSsrc failed, ssrcs(".concat(e,") is invalid"))}static generateSsrcLabel(){return"".concat(XR.generateRandomId(8,36),"-").concat(XR.generateRandomId(4,36),"-").concat(XR.generateRandomId(4,36),"-").concat(XR.generateRandomId(4,36),"-").concat(XR.generateRandomId(12,36))}static addSsrcAttr(e,t,r){e.ssrcs||(e.ssrcs=[]);for(let i=0;i{let{id:r}=e;return!t.find((e=>e.toString()===r.toString()))})))}static getNegCmdInfoAndDelete(e){let t="",r="",i=!1;for(let n=0;n{e.value.indexOf("bindCrypto-key")>=0&&(t=e.value.substring(15)),e.value.indexOf("websocket-uri")>=0&&(r=e.value.substring(14))})),e.splice(n,1)):/SCTP/gi.test(e[n].protocol)&&(i=!0));return{bindCryptoKey:t,wsUrl:r,dataChannelEnable:i}}generateSsrcMslabel(){return XR.generateRandomId(36)}containsValidVideoPayload(e){this.logger_.debug(this.module_,"containsValidVideoPayload, offerSdp: ".concat(this.printSdpInfo(e)));const t=this.parseSdp(e);if(!t)return this.logger_.error(this.module_,"containsValidVideoPayload failed,the sdp is invalid"),!1;return this.getMedias(t,mO.TRACK_TYPE_VIDEO).some((e=>{var t;return null===(t=e.rtp)||void 0===t?void 0:t.some((e=>e.codec.toUpperCase()===wM.H264))}))}transformOfferSdp(e){this.logger_.info(this.module_,"transformOfferSdp begin");const t=this.parseSdp(e);if(!t)return void this.logger_.error(this.module_,"transformOfferSdp failed,the sdp is invalid");this.deleteUnexpectedMedia(t);const r=this.getMedias(t,mO.TRACK_TYPE_VIDEO),i=this.getMedias(t,mO.TRACK_TYPE_AUDIO);r.forEach((e=>{this.transformVideoPayload(e),this.deleteRetransmissionSsrc(e)})),i.forEach((e=>{this.transformAudioPayload(e),this.deleteRetransmissionSsrc(e)}));const n=WM(t);return this.logger_.debug(this.module_,"transformOfferSdp success, sdp: ".concat(this.printSdpInfo(n))),n}editOrigin(e){e.origin&&(e.origin.username=Cw.getBrowserInfo())}modifyAuxSdpInfo(e,t,r){const i=this.parseSdp(e);if(!i)return void this.logger_.error(this.module_,"modifyAuxSdpInfo failed,the sdp is invalid : ".concat(e));this.editOrigin(i);const n=this.getMedias(i,mO.TRACK_TYPE_VIDEO);n&&n.length>0&&(this.addVideoSsrcRange(n[0],r),this.modifyCandidate(n[0],t));const o=WM(i);return this.logger_.debug(this.module_,"modifyAuxSdpInfo success, sdp: ".concat(this.printSdpInfo(o))),o}modifyMainSdpInfo(e,t,r,i,n,o){const s=this.parseSdp(e);if(!s)return void this.logger_.error(this.module_,"modifyMainSdpInfo failed, the sdp is invalid : ".concat(e));this.editOrigin(s);const a=this.getMedias(s,mO.TRACK_TYPE_VIDEO),c=this.getMedias(s,mO.TRACK_TYPE_AUDIO);let u="",d="";if(a&&a.length>0&&(this.addVideoSsrcRange(a[0],r),this.modifyCandidate(a[0],t),d=a[0].mid,a.length>1))for(let h=0;h0&&(eD.addAudioSsrcRange(c[0],i,n),this.modifyCandidate(c[0],t),u=c[0].mid);for(const h of s.groups||[])if("BUNDLE"===h.type){h.mids="".concat(u," ").concat(d);break}n&&this.addNegCmdInfo(s,o);const l=WM(s);return this.logger_.debug(this.module_,"modifyMainSdpInfo success, sdp: ".concat(this.printSdpInfo(l))),l}addNegCmdInfo(e,t){if(t){const r=this.parseSdp(t).media.find((e=>e.type===mO.TYPE_APPLICATION)),i=e.media.filter((e=>null==e?void 0:e.type)),n=i[i.length-1];r.mid=["audio","video"].includes(n.mid)?"data":n.mid+1,e.media.push(r),e.groups.forEach((e=>{"BUNDLE"===e.type&&(e.mids="".concat(e.mids," ").concat(r.mid))}))}const r={type:"application",port:443,protocol:"TCP/WSS/RTP *",setup:"active",invalid:[]};r.invalid.push({value:"connection:new"}),r.invalid.push({value:"content:cmd"}),r.invalid.push({value:"bindCrypto-type:0"}),r.invalid.push({value:"bindCrypto-method:hmac-share256"}),e.media.push(r)}getSfuInfo(e,t){const r=this.parseSdp(e),i={ipAddress:"",auxPort:0};let n;const o=this.getMedias(r,mO.TRACK_TYPE_AUDIO);o&&o.length>0&&(i.audioPort=o[0].port,n=o[0].connection);const s=this.getMedias(r,mO.TRACK_TYPE_VIDEO);if(s&&s.length>0&&(i.videoPort=s[0].port,n=s[0].connection),n&&(i.ipAddress=n.ip),t){const e=this.parseSdp(t),r=this.getMedias(e,mO.TRACK_TYPE_VIDEO);r&&r.length>0&&r[0].connection&&(i.auxPort=r[0].port)}return i}}class tD extends eD{static modifyDirection(e){e.ssrcs&&0!==e.ssrcs.length?e.direction=EM.SEND_RECV:e.direction=EM.RECV_ONLY}hasSSRC(e,t){const r=this.parseSdp(e);if(!r)return this.logger_.error(this.module_,"hasSSRC failed"),!1;const i=this.getMedias(r,t);return i&&i.length>0&&!!i[0].ssrcs}getMslabelByCname(e,t){if(!e)return null;if(!e.ssrcs)return null;let r;for(const i of e.ssrcs)if(i.attribute.toLocaleLowerCase()===this.ssrcAttrCname_&&i.value===t){r=i.id;break}if(!r)return null;for(const i of e.ssrcs)if(i.id===r&&i.attribute.toLocaleLowerCase()===this.ssrcAttrMslabel_)return i.value;return null}addSsrc(e,t,r,i,n,o){const s=r,a=this.getMslabelByCname(e,s),c=this.getMslabelByCname(t,s);let u,d,l=!1,h=!1;if(a&&a===i||!n||(h=!0),c&&c===i||!o||(l=!0),h&&(u=c||i||this.generateSsrcMslabel()),l&&(d=i||this.generateSsrcMslabel()),this.logger_.debug(this.module_,"addSsrc, userId: ".concat(r,", audioMslabel: ").concat(u," videooMslabel: ").concat(d)),u){const t=eD.generateSsrcLabel(),r=[[this.ssrcAttrCname_,s],[this.ssrcAttrMslabel_,u],[this.ssrcAttrLabel_,t],[this.ssrcAttrMsid_,u+" "+t]];eD.addSsrcAttr(e,n,r)}if(d){const e=eD.generateSsrcLabel(),r=[[this.ssrcAttrCname_,s],[this.ssrcAttrMslabel_,d],[this.ssrcAttrLabel_,e],[this.ssrcAttrMsid_,d+" "+e]];eD.addSsrcAttr(t,o,r)}return d||u}static modifyMediaSsrc(e,t){if(!e.ssrcs)return;for(let r=0;r0&&(this.portType_===NC.portNormal&&(r[0].rtcpMux=void 0),tD.modifyDirection(r[0])),i&&i.length>0&&(this.portType_===NC.portNormal&&(i[0].rtcpMux=void 0),tD.modifyDirection(i[0])),this.portType_===NC.portNormal&&(t.groups=void 0);const{bindCryptoKey:n,wsUrl:o,dataChannelEnable:s}=eD.getNegCmdInfoAndDelete(t.media),a=WM(t);return this.logger_.debug(this.module_,"transformAnswerSdp success,answerSdp: ".concat(this.printSdpInfo(a))),{remoteDescription:a,bindCryptoKey:n,wsUrl:o,dataChannelEnable:s}}deleteSSRC(e,t,r){if(0===t.length&&!r)return e;this.logger_.info(this.module_,"deleteVideoSSRC ".concat(t,", ").concat(r));const i=this.parseSdp(e);if(!i)return void this.logger_.error(this.module_,"deleteVideoSSRC failed");const n=this.getMedias(i,mO.TRACK_TYPE_VIDEO);n&&n.length>0&&(t&&eD.deleteSsrcAttr(n[0],t),tD.modifyDirection(n[0]));const o=this.getMedias(i,mO.TRACK_TYPE_AUDIO);o&&o.length>0&&(r&&eD.deleteSsrcAttr(o[0],[r]),tD.modifyDirection(o[0]));const s=WM(i);return this.logger_.info(this.module_,"deleteVideoSSRC ".concat(t," success")),s}addUser(e,t,r,i){const n=this.parseSdp(e);if(!n)return void this.logger_.error(this.module_,"addUser failed,the sdp is invalid : ".concat(e));const o=this.getMedias(n,mO.TRACK_TYPE_VIDEO),s=this.getMedias(n,mO.TRACK_TYPE_AUDIO);let a,c;o&&o.length>0&&(a=o[0]),s&&s.length>0&&(c=s[0]);const u=this.addSsrc(c,a,t,r,i.audioSsrc,i.videoSsrc);a&&tD.modifyDirection(a),c&&tD.modifyDirection(c);const d=WM(n);return this.logger_.debug(this.module_,"addUser success, answerSdp: ".concat(this.printSdpInfo(d))),{answerSdp:d,streamId:u}}deleteUser(e,t,r){const i=this.parseSdp(e);if(!i)return void this.logger_.error(this.module_,"deleteUser failed,the sdp is invalid : ".concat(e));if((null==t?void 0:t.length)>0){const e=this.getMedias(i,mO.TRACK_TYPE_VIDEO);e&&e.length>0&&(t.forEach((t=>{t&&eD.deleteSsrcAttr(e[0],[t])})),tD.modifyDirection(e[0]))}if((null==r?void 0:r.length)>0){const e=this.getMedias(i,mO.TRACK_TYPE_AUDIO);e&&e.length>0&&(r.forEach((t=>{t&&eD.deleteSsrcAttr(e[0],[t])})),tD.modifyDirection(e[0]))}const n=WM(i);return this.logger_.debug(this.module_,"deleteUser success, answerSdp: ".concat(this.printSdpInfo(n))),n}modifyPublishOfferSdp(e,t,r){this.logger_.debug(this.module_,"modifyPublishOfferSdp start, sdp: ".concat(this.printSdpInfo(e)));const i=this.parseSdp(e);if(!i)return void this.logger_.error(this.module_,"modifyPublishOfferSdp failed, the sdp is invalid: ".concat(e));this.deleteUnexpectedMedia(i);const n=this.getMedias(i,mO.TRACK_TYPE_VIDEO),o=this.getMedias(i,mO.TRACK_TYPE_AUDIO);if(n&&n.length>0&&(this.transformVideoPayload(n[0]),this.deleteRetransmissionSsrc(n[0]),t&&t.length>0&&tD.modifyMediaSsrc(n[0],t)),o&&o.length>0&&(this.transformAudioPayload(o[0]),this.deleteRetransmissionSsrc(o[0]),r)){const e=[r];tD.modifyMediaSsrc(o[0],e)}const s=WM(i);return this.logger_.debug(this.module_,"modifyPublishOfferSdp success, sdp: ".concat(this.printSdpInfo(s))),s}}class rD extends eD{static modifyDirectionWhenAddUser(e,t){e&&(e.direction===EM.RECV_ONLY?e.direction=EM.SEND_RECV:e.direction===EM.INACTIVE&&(e.direction=EM.SEND_ONLY)),t&&(t.direction===EM.SEND_ONLY?t.direction=EM.SEND_RECV:t.direction===EM.INACTIVE&&(t.direction=EM.RECV_ONLY))}addSSRC(e,t,r,i){const n=r||this.generateSsrcMslabel();this.logger_.debug(this.module_,"addSSRC, userId:".concat(t,", mslabel:").concat(n,", streamId:").concat(r,", ssrc:").concat(i)),e.ssrcs&&delete e.ssrcs;const o=eD.generateSsrcLabel(),s=[[this.ssrcAttrCname_,t],[this.ssrcAttrMslabel_,n],[this.ssrcAttrLabel_,o],[this.ssrcAttrMsid_,n+" "+o]];return eD.addSsrcAttr(e,i,s),n}static modifyDirectionWhenDelUser(e,t){e.direction===EM.SEND_RECV?e.direction=EM.RECV_ONLY:e.direction===EM.SEND_ONLY&&(e.direction=EM.INACTIVE),t.direction===EM.SEND_RECV?t.direction=EM.SEND_ONLY:t.direction===EM.RECV_ONLY&&(t.direction=EM.INACTIVE)}hasSSRC(e,t){const r=this.parseSdp(e);if(!r)return this.logger_.error(this.module_,"hasSSRC failed"),!1;return this.getMedias(r,t).some((e=>(e.direction===EM.SEND_ONLY||e.direction===EM.SEND_RECV)&&!!e.ssrcs))}delteInvalidLines(e){this.deleteUnexpectedMedia(e);const t=this.getMedias(e,mO.TRACK_TYPE_VIDEO),r=this.getMedias(e,mO.TRACK_TYPE_AUDIO);t.forEach((e=>{this.transformVideoPayload(e),this.deleteRetransmissionSsrc(e)})),r.forEach((e=>{this.transformAudioPayload(e),this.deleteRetransmissionSsrc(e)}))}getAvailableSenderMedia(e,t){return e.media.filter((e=>{let{type:r,direction:i}=e;return r===t&&(i===EM.SEND_ONLY||i===EM.SEND_RECV)}))}modifyUnifiedMediaSsrc(e,t,r){if(e.ssrcs&&0!==e.ssrcs.length)e.ssrcs.forEach((e=>{e.attribute===this.ssrcAttrCname_&&(e.value=r),e.id=t}));else{const i=[[this.ssrcAttrCname_,r]];eD.addSsrcAttr(e,t,i)}}static modifyBundle(e,t){for(const r of e.groups||[])if("BUNDLE"===r.type){r.mids.split(" ").includes("".concat(t))||(r.mids="".concat(r.mids," ").concat(t));break}}modifyAnswerDirection(e,t){var r;const i=this.parseSdp(e);if(!i)return void this.logger_.error(this.module_,"modifyAnswerDirection failed,the sdp is invalid");const n=null===(r=i.media)||void 0===r?void 0:r.find((e=>"".concat(e.mid)==="".concat(t)));return n&&(n.direction===EM.INACTIVE?n.direction=EM.RECV_ONLY:n.direction===EM.SEND_ONLY&&(n.direction=EM.SEND_RECV)),WM(i)}transformAnswerSdp(e,t){this.logger_.debug(this.module_,"transformAnswerSdp, answerSdp: ".concat(this.printSdpInfo(e)));const r=this.parseSdp(e),i=this.parseSdp(t);if(!r||!i)return void this.logger_.error(this.module_,"transformAnswerSdp failed,the sdp is invalid");this.getMedias(r,mO.TRACK_TYPE_AUDIO).forEach((e=>{this.portType_===NC.portNormal&&(e.rtcpMux=void 0),e.ssrcs||(e.direction=EM.INACTIVE)}));let n=this.getMedias(r,mO.TRACK_TYPE_VIDEO);const o=this.getMedias(i,mO.TRACK_TYPE_VIDEO);if(o.length!==n.length){const e=n.map((e=>"".concat(e.mid)));o.forEach((t=>{if(!e.includes("".concat(t.mid))){const e=JSON.parse(JSON.stringify(n[0]));e.mid=t.mid,r.media.push(e),rD.modifyBundle(r,t.mid)}}))}n=this.getMedias(r,mO.TRACK_TYPE_VIDEO),n.forEach((e=>{this.portType_===NC.portNormal&&(e.rtcpMux=void 0),e.direction=EM.INACTIVE})),this.portType_===NC.portNormal&&(r.groups=void 0);const{bindCryptoKey:s,wsUrl:a,dataChannelEnable:c}=eD.getNegCmdInfoAndDelete(r.media),u=this.getMedias(r,mO.TYPE_APPLICATION);if(r.media=r.media.filter((e=>e.type!==mO.TYPE_APPLICATION)),u.length>0){const e=this.getMedias(r,mO.TRACK_TYPE_VIDEO).map((e=>parseInt("".concat(e.mid))));u[0].mid="".concat(Math.max(...e)+1),Cw.isFirefox()&&(u[0].port=9),r.media.push(...u),rD.modifyBundle(r,"".concat(u[0].mid))}const d=WM(r);return this.logger_.debug(this.module_,"transformAnswerSdp success,answerSdp: ".concat(this.printSdpInfo(d))),{remoteDescription:d,bindCryptoKey:s,wsUrl:a,dataChannelEnable:c}}addUser(e,t,r,i,n,o){var s,a;const c=this.parseSdp(e);if(!c)return this.logger_.error(this.module_,"addUser failed,the sdp is invalid : ".concat(e)),null;const u=this.parseSdp(t);if(!u)return this.logger_.error(this.module_,"addUser failed,the sdp is invalid : ".concat(t)),null;this.delteInvalidLines(u);const d=null===(s=u.media)||void 0===s?void 0:s.find((e=>"".concat(e.mid)===r)),l=null===(a=c.media)||void 0===a?void 0:a.find((e=>e.type===d.type)),h=JSON.parse(JSON.stringify(l));h.mid=r,h.direction=EM.SEND_ONLY,h.type===mO.TRACK_TYPE_AUDIO&&this.portType_===NC.portReduce&&delete h.candidates;const f=this.addSSRC(h,i,n,o);c.media.push(h),rD.modifyBundle(c,r),rD.modifyDirectionWhenAddUser(h,d);const p=WM(c),m=WM(u);return this.logger_.debug(this.module_,"addUser success, offer: ".concat(this.printSdpInfo(m)," answer: ").concat(this.printSdpInfo(p))),{offerSdp:m,answerSdp:p,streamId:f}}async deleteUser(e,t,r,i,n){const o=this.parseSdp(e);if(!o)return this.logger_.error(this.module_,"deleteUser failed,the sdp is invalid : ".concat(e)),null;const s=this.parseSdp(t);if(!s)return this.logger_.error(this.module_,"deleteUser failed,the sdp is invalid : ".concat(t)),null;for(const u of o.media)if(u.ssrcs&&u.ssrcs.some((e=>r.includes(parseInt("".concat(e.id)))))){rD.modifyDirectionWhenDelUser(u,s.media.find((e=>e.mid===u.mid))),u.ssrcs.forEach((e=>{e.value="-"}));const e=i.find((e=>"".concat(e.mid)==="".concat(u.mid)));e&&(e.direction=e.currentDirection===EM.SEND_RECV||e.currentDirection===EM.SEND_ONLY?EM.SEND_ONLY:EM.INACTIVE,await n(e.receiver))}const a=WM(o),c=WM(s);return this.logger_.debug(this.module_,"deleteUser success, offer: ".concat(this.printSdpInfo(c)," answer: ").concat(this.printSdpInfo(a))),{offerSdp:c,answerSdp:a}}modifySdpByMid(e,t,r,i,n,o){var s,a;const c=this.parseSdp(e);if(!c)return this.logger_.error(this.module_,"modifySdpByMid failed,the sdp is invalid : ".concat(e)),null;const u=null===(s=c.media)||void 0===s?void 0:s.find((e=>"".concat(e.mid)===r)),d=this.addSSRC(u,i,n,o),l=this.parseSdp(t);l||this.logger_.error(this.module_,"modifySdpByMid failed,the sdp is invalid : ".concat(t));const h=null===(a=l.media)||void 0===a?void 0:a.find((e=>"".concat(e.mid)===r));rD.modifyDirectionWhenAddUser(u,h);const f=WM(c),p=WM(l);return this.logger_.debug(this.module_,"modifySdpByMid success, offer: ".concat(this.printSdpInfo(p)," answer: ").concat(this.printSdpInfo(f))),{offerSdp:p,answerSdp:f,streamId:d}}getAllMidsByType(e,t){var r;const i=this.parseSdp(e),n=[];return i?(null===(r=i.media)||void 0===r||r.forEach((e=>{e.type===t&&n.push("".concat(e.mid))})),n):(this.logger_.error(this.module_,"getAllMidsByType failed,the sdp is invalid : ".concat(e)),n)}getOfferVideoMidBySsrc(e,t,r){var i;const n=this.parseSdp(e);let o=null;return n?(null===(i=n.media)||void 0===i||i.forEach((e=>{e.type===t&&e.ssrcs&&e.ssrcs.length>0&&"".concat(e.ssrcs[0].id)==="".concat(r)&&(o="".concat(e.mid))})),o):(this.logger_.error(this.module_,"getOfferVideoMidBySsrc failed,the sdp is invalid : ".concat(e)),o)}getIdleTransceiverWithSameSsrc(e,t,r){if(!t||0===t.length)return null;const i=this.parseSdp(e);if(!i)return this.logger_.error(this.module_,"getIdleMidWithSameSsrc failed,the sdp is invalid : ".concat(e)),null;const n=i.media.find((e=>!(!e.ssrcs||0===e.ssrcs.length)&&e.ssrcs[0].id===r));let o;for(const s of t)if(n){if("".concat(n.mid)==="".concat(s.mid)){o=t.splice(t.indexOf(s),1)[0];break}}else{const e=i.media.find((e=>"".concat(e.mid)==="".concat(s.mid)));if(!e.ssrcs||0===e.ssrcs.length){o=t.shift();break}}return o}deleteSSRC(e,t,r,i){if(0===r.length&&!i)return e;this.logger_.info(this.module_,"deleteSSRC ".concat(r,", ").concat(i));const n=this.parseSdp(e),o=this.parseSdp(t);if(!n)return void this.logger_.error(this.module_,"deleteSSRC failed");null==r||r.forEach((e=>{n.media.filter((e=>e.type===mO.TRACK_TYPE_VIDEO)).forEach((t=>{var r;if(null!==(r=t.ssrcs)&&void 0!==r&&r.find((t=>t.id===e))){var i;const e=null===(i=o.media)||void 0===i?void 0:i.find((e=>"".concat(e.mid)==="".concat(t.mid)));rD.modifyDirectionWhenPublish(t,e,!1),t.ssrcs=void 0}}))})),n.media.filter((e=>e.type===mO.TRACK_TYPE_AUDIO)).forEach((e=>{var t;if(null!==(t=e.ssrcs)&&void 0!==t&&t.find((e=>e.id===i))){var r;const t=null===(r=o.media)||void 0===r?void 0:r.find((t=>"".concat(t.mid)==="".concat(e.mid)));rD.modifyDirectionWhenPublish(e,t,!1),e.ssrcs=void 0}}));const s=WM(n),a=WM(o);return this.logger_.debug(this.module_,"deleteSSRC ".concat(r," success, offer: ").concat(this.printSdpInfo(s)," answer: ").concat(this.printSdpInfo(a))),{offerSdp:s,answerSdp:a}}modifyPublishOfferSdp(e,t,r,i,n){this.logger_.debug(this.module_,"modifyPublishOfferSdp start, sdp: ".concat(this.printSdpInfo(e)));const o=this.parseSdp(e),s=this.parseSdp(t);if(!o)return void this.logger_.error(this.module_,"modifyPublishOfferSdp failed, the sdp is invalid: ".concat(e));if(this.deleteUnexpectedMedia(o),i&&i.length>0){let e=this.getAvailableSenderMedia(o,mO.TRACK_TYPE_VIDEO);null==i||i.forEach((t=>{var i;let n=e.find((e=>{var r;return null===(r=e.ssrcs)||void 0===r?void 0:r.find((e=>"".concat(e.id)==="".concat(t)))}));n?e=e.filter((e=>{var r;return!e.ssrcs||(null===(r=e.ssrcs)||void 0===r?void 0:r.find((e=>"".concat(e.id)!=="".concat(t))))})):n=e.shift(),this.transformVideoPayload(n),this.deleteRetransmissionSsrc(n),this.modifyUnifiedMediaSsrc(n,t,r);const o=null===(i=s.media)||void 0===i?void 0:i.find((e=>"".concat(e.mid)==="".concat(n.mid)));rD.modifyDirectionWhenPublish(n,o,!0)}))}o.media.filter((e=>{let{type:t,direction:r}=e;return t===mO.TRACK_TYPE_VIDEO&&r!==EM.SEND_ONLY&&r!==EM.SEND_RECV})).forEach((e=>{this.transformVideoPayload(e),this.deleteRetransmissionSsrc(e),e.ssrcs=void 0}));const a=this.getAvailableSenderMedia(o,mO.TRACK_TYPE_AUDIO);if(a&&a.length>0){const e=a[0];if(this.transformAudioPayload(e),this.deleteRetransmissionSsrc(e),n){var c;const t=null===(c=s.media)||void 0===c?void 0:c.find((t=>"".concat(t.mid)==="".concat(e.mid)));this.modifyUnifiedMediaSsrc(e,n,r),rD.modifyDirectionWhenPublish(e,t,!0)}}const u=WM(o),d=WM(s);return this.logger_.debug(this.module_,"modifyPublishOfferSdp success, offerSdp: ".concat(this.printSdpInfo(u),", answerSdp: ").concat(this.printSdpInfo(d))),{offerSdp:u,answerSdp:d}}static modifyDirectionWhenPublish(e,t,r){r?e.direction===EM.RECV_ONLY?e.direction=EM.SEND_RECV:e.direction===EM.INACTIVE&&(e.direction=EM.SEND_ONLY):e.direction===EM.SEND_ONLY?e.direction=EM.INACTIVE:e.direction===EM.SEND_RECV&&(e.direction=EM.RECV_ONLY),r?t.direction===EM.SEND_ONLY?t.direction=EM.SEND_RECV:t.direction===EM.INACTIVE&&(t.direction=EM.RECV_ONLY):t.direction===EM.SEND_RECV?t.direction=EM.SEND_ONLY:t.direction===EM.RECV_ONLY&&(t.direction=EM.INACTIVE)}generateMatchedAnswerWithOffer(e,t,r){this.logger_.debug(this.module_,"generateCorrespondingRemoteSdpMedia start, sdp: ".concat(this.printSdpInfo(e)));const i=this.parseSdp(e);this.portType_!==NC.portNormal&&rD.modifyBundle(i,t);const n=this.getMedias(i,r);if(!n||0===n.length)return e;const o=JSON.parse(JSON.stringify(n[0]));o.mid=t,delete o.ssrcs,delete o.candidates,o.direction=EM.INACTIVE,i.media.push(o);const s=WM(i);return this.logger_.debug(this.module_,"generateCorrespondingRemoteSdpMedia success, sdp: ".concat(this.printSdpInfo(s))),s}getBrowserDefaultSsrc(e){const t=this.parseSdp(e),r=this.getMedias(t,mO.TRACK_TYPE_VIDEO),i=this.getMedias(t,mO.TRACK_TYPE_AUDIO),n=[];let o;if(r&&r.length>0&&r.forEach((e=>{e.ssrcs&&e.ssrcs.length>0&&n.push(parseInt(e.ssrcs[0].id.toString()))})),i&&i.length>0)for(const s of i)if(s.ssrcs&&s.ssrcs.length>0){o=parseInt(s.ssrcs[0].id.toString());break}return{videoSsrcs:n,audioSsrc:o}}getLeastMid(e){const t=this.parseSdp(e);if(!t)return void this.logger_.error(this.module_,"getLeastMid failed, the sdp is invalid : ".concat(e));let r;for(const i of t.groups||[])if("BUNDLE"===i.type){const e=(i.mids||"").split(" ");r=e[e.length-1];break}return r}}const iD="PeerConnectionsManager";class nD extends $P{constructor(e,t,r){super({logger:e,stat:t,emitter:r}),i(this,"isFireFox",Cw.isFirefox()),this.peerConnections=new Map,Cw.isOnlySupportUnfiedPlan()?(this.sdpDescMode="unified-plan",this.rtcSdp=new rD(this.logger)):(this.sdpDescMode="plan-b",this.rtcSdp=new tD(this.logger)),this.logger.debug(iD,"ConnectionsManager, SDP mode: ".concat(this.sdpDescMode)),this.setPortType(NC.portReduce),this.mainReceiverPreStatisticMap=new Map,this.auxReceiverPreStatisticMap=new Map}setPortType(e){const t=pO.getParameter(uO)||0;0!==t&&(e=t),e===NC.portNormal&&Cw.isOnlySupportUnfiedPlan()&&(e=NC.portReduce),this.portType=e,this.portType===NC.portNormal&&(this.sdpDescMode="plan-b",this.rtcSdp=new tD(this.logger)),this.logger.debug(iD,"ConnectionsManager, portType: ".concat(1===this.portType?"normal":"reduce")),this.rtcSdp.setPortType(this.portType)}getPortType(){return this.portType}setTurnServer(e){this.turnServerConfig=e}isConnectionsExist(){return this.peerConnections.size>0}getConnectionId(){return this.uniqueId}getReceivers(e){var t;const r=null===(t=this.peerConnections.get(e))||void 0===t?void 0:t.connection;if("plan-b"===this.sdpDescMode)return null==r?void 0:r.getReceivers();const i=[],n=null==r?void 0:r.getTransceivers();if(!n)return null;for(const o of n)o.currentDirection!==EM.SEND_RECV&&o.currentDirection!==EM.RECV_ONLY||i.push(o.receiver);return i}getSenders(e){var t;const r=null===(t=this.peerConnections.get(e))||void 0===t?void 0:t.connection;if("plan-b"===this.sdpDescMode)return null==r?void 0:r.getSenders();const i=[],n=null==r?void 0:r.getTransceivers();if(!n)return null;for(const o of n)o.currentDirection!==EM.SEND_RECV&&o.currentDirection!==EM.SEND_ONLY||i.push(o.sender);return i}calcChangedStatistic(e,t,r){if(this.mainReceiverPreStatisticMap.has(e)||this.auxReceiverPreStatisticMap.has(e)){const i=this.mainReceiverPreStatisticMap.get(e)||this.auxReceiverPreStatisticMap.get(e);if("number"==typeof t)return Object.prototype.hasOwnProperty.call(i,r[0])?t>=i[r[0]]?t-i[r[0]]:(this.clearReveiverPreStatisticBySsrcLabel(e),t):t;this.doCalcChangedStatisticObject(e,t,i,r)}else if("number"==typeof t)return t}doCalcChangedStatisticObject(e,t,r,i){if(i&&i.length>0){let n=0;for(const e of i)Object.prototype.hasOwnProperty.call(r,e)&&(t[e]>=r[e]?t[e]=t[e]-r[e]:n++);n>=i.length-1&&this.clearReveiverPreStatisticBySsrcLabel(e)}else{let i=0;for(const e in t)Object.prototype.hasOwnProperty.call(r,e)&&(t[e]>=r[e]?t[e]=t[e]-r[e]:i++);i===Object.keys(t).length&&this.clearReveiverPreStatisticBySsrcLabel(e)}}clearReveiverPreStatisticBySsrcLabel(e){this.mainReceiverPreStatisticMap.delete(e)||this.auxReceiverPreStatisticMap.delete(e)}async initConnectionAndSdp(e,t,r,i){this.uniqueId=e;const n=this.createPeerConnection(t),o="main"!==t;let s=await this.createOffer(t,{offerToReceiveAudio:!o,offerToReceiveVideo:!0});if(this.isFireFox){t===gO.STREAM_TYPE_MAIN&&(await n.connection.setLocalDescription({type:"offer",sdp:this.rtcSdp.transformOfferSdp(s.sdp)}),n.connection.addTransceiver("video",{direction:EM.INACTIVE}),s=await n.connection.createOffer());const e=this.rtcSdp.getBrowserDefaultSsrc(s.sdp);n.videoSendSsrcs=e.videoSsrcs,n.sendSsrcsMapping=new Map,e.videoSsrcs.forEach(((e,t)=>{n.sendSsrcsMapping.set(t,e)})),!o&&e.audioSsrc&&(n.audioSendSsrc=e.audioSsrc,n.sendSsrcsMapping.set(2,e.audioSsrc))}const a=this.rtcSdp.transformOfferSdp(s.sdp);if(await n.connection.setLocalDescription({type:"offer",sdp:a}),await this.iceAddressCollect(n.connection),!this.isFireFox){const e=n.connection.localDescription.sdp;this.logger.debug(iD,"setLocalDescription, ".concat(t,"sdp offer: ").concat(this.rtcSdp.printSdpInfo(e))),await n.connection.setLocalDescription({type:"offer",sdp:this.rtcSdp.transformOfferSdp(e)})}o?this.onConnection(n,r.onTrackHandler,!0):this.rtcSdp.containsValidVideoPayload(s.sdp)||i?this.onConnection(n,r.onTrackHandler,!1):(this.destroyPeerConnection(t),this.logger.error(iD,"initConnectionAndSdp, no H264 payload and try createOffer again"),await this.initConnectionAndSdp(e,t,r,!0))}setSsrcsMapping(e){const t=this.peerConnections.get(gO.STREAM_TYPE_MAIN);t.sendSsrcsMapping&&t.sendSsrcsMapping.size>0&&(t.sendSsrcsMapping.has(0)&&(t.sendSsrcsMapping.set(e.video.sendSsrcBegin,t.sendSsrcsMapping.get(0)),t.sendSsrcsMapping.delete(0)),t.sendSsrcsMapping.has(1)&&(t.sendSsrcsMapping.set(e.video.sendSsrcEnd,t.sendSsrcsMapping.get(1)),t.sendSsrcsMapping.delete(1)),t.sendSsrcsMapping.has(2)&&(t.sendSsrcsMapping.set(e.audio.sendSsrcBegin,t.sendSsrcsMapping.get(2)),t.sendSsrcsMapping.delete(2)));const r=this.peerConnections.get(gO.STREAM_TYPE_AUX);r.sendSsrcsMapping&&r.sendSsrcsMapping.size>0&&r.sendSsrcsMapping.has(0)&&(r.sendSsrcsMapping.set(e.desktopVideo.sendSsrcBegin,r.sendSsrcsMapping.get(0)),r.sendSsrcsMapping.delete(0))}getMappingSsrcs(e,t){if(!e)return;let r;return t||"number"!=typeof e?(r=this.peerConnections.get(t),!r.sendSsrcsMapping||r.sendSsrcsMapping.size<1?e:"number"==typeof e?r.sendSsrcsMapping.has(e)?r.sendSsrcsMapping.get(e):e:e.map((e=>r.sendSsrcsMapping.has(e)?r.sendSsrcsMapping.get(e):e))):(r=this.peerConnections.get(gO.STREAM_TYPE_MAIN),r.sendSsrcsMapping.has(e)?r.sendSsrcsMapping.get(e):(r=this.peerConnections.get(gO.STREAM_TYPE_AUX),r.sendSsrcsMapping.get(e)||e))}async createOffer(e,t){const r=this.peerConnections.get(e).connection,i=await r.createOffer(t);return"plan-b"!==this.sdpDescMode&&r.getTransceivers().forEach((e=>{e.direction=EM.INACTIVE})),i}iceCandidateListener(e,t){this.logger.info(iD,"iceCandidateListener of ".concat(t)),e.connection.onicecandidate=r=>{var i;r.candidate&&"udp"===r.candidate.protocol&&(this.logger.info(iD,"".concat(t," onicecandidate: ").concat(XR.shieldIpAddress(null===(i=r.candidate)||void 0===i?void 0:i.candidate))),e.candidate||(e.candidate=[]),e.candidate.push(r.candidate))}}iceRestart(e,t,r){if(this.stat.setConnectionStatusInfo(QC.CLOSED,XC.MEDIA),e.connectFailedTimes++,this.logger.error(iD,"".concat(t?"aux":"main"," connection statechange, connectFailedTimes: ").concat(e.connectFailedTimes,".")),e.connectFailedTimes<=30&&(this.logger.error(iD,"".concat(t?"aux":"main"," connection statechange, emit media error event.")),e.connectFailedTimes%2==0&&this.eventEmitter.emit(UC.Error,{errCode:Gc.RTC_ERR_CODE_MEDIA_NETWORK_ERROR,errDesc:"".concat(t?"aux":"main"," peerConnection: ").concat(Jc[Gc.RTC_ERR_CODE_MEDIA_NETWORK_ERROR])}),30===e.connectFailedTimes))return this.eventEmitter.emit(UC.MediaConnectionStateChanged,{roomId:this.uniqueId,type:t?"aux":"main",state:LC.DisConnected}),void(e.connectFailedTimes=0);e.connection.createOffer({iceRestart:!0}).then((r=>{this.eventEmitter.emit(UC.MediaConnectionStateChanged,{roomId:this.uniqueId,type:t?"aux":"main",state:LC.Reconnecting}),e.connection.setLocalDescription({type:"offer",sdp:this.rtcSdp.transformOfferSdp(r.sdp)}),e.connection.setRemoteDescription({sdp:e.connection.remoteDescription.sdp,type:"answer"})})).finally((()=>{r&&r()}))}onConnection(e,t,r){e.connection.ontrack=e=>{t(e,r)},e.connection.onconnectionstatechange=()=>{if(this.logger.info(iD,"onconnectionstatechange, ".concat(r?"aux":"main"," connect state is: ").concat(e.connection.connectionState," ;iceConnectionState: ").concat(e.connection.iceConnectionState)),"disconnected"!==e.connection.iceConnectionState)clearTimeout(e.disConnectDelayHandleTimer),e.disConnectDelayHandleTimer=null,"failed"===e.connection.iceConnectionState||"closed"===e.connection.iceConnectionState?(this.logger.info(iD,"connect state failed go iceRestart: ".concat(e.connection.iceConnectionState)),this.iceRestart(e,r)):"connected"===e.connection.iceConnectionState&&(this.logger.info(iD,"connect state connect: ".concat(e.connection.iceConnectionState)),this.stat.setConnectionStatusInfo(QC.CONNECTED,XC.MEDIA),e.connectFailedTimes=0,this.eventEmitter.emit(UC.MediaConnectionStateChanged,{roomId:this.uniqueId,type:r?"aux":"main",state:LC.Connected}),e.connection.getStats().then((e=>{let t=null;e.forEach((e=>{"candidate-pair"===e.type&&(this.isFireFox&&e.selected||e.nominated)&&(t=e.localCandidateId)})),t&&e.forEach((e=>{e.id===t&&(this.logger.info(iD,"transport protocol changed, candidateType: ".concat(e.candidateType,", protocol: ").concat(e.protocol)),this.eventEmitter.emit(UC.TransportProtocolChanged,{protocol:e.protocol,candidateType:e.candidateType}))}))})));else{if(e.disConnectDelayHandleTimer)return;e.disConnectDelayHandleTimer=setTimeout((()=>{this.logger.info(iD,"disConnect state delay handler, go iceRestart: ".concat(e.connection.iceConnectionState)),this.iceRestart(e,r,(()=>{clearTimeout(e.disConnectDelayHandleTimer),e.disConnectDelayHandleTimer=null}))}),5e3)}}}async iceAddressCollect(e){await new Promise((t=>{let r=null;const i=()=>{this.logger.info(iD,"ICE collect Gathering State change: ".concat(e.iceGatheringState)),"complete"===e.iceGatheringState&&(clearTimeout(r),this.logger.info(iD,"ICE collect complete"),e.removeEventListener("icegatheringstatechange",i),t())};e.addEventListener("icegatheringstatechange",i),r=setTimeout((()=>{this.logger.error(iD,"ICE collect timeout"),clearTimeout(r),t()}),6e3)}))}createPeerConnection(e){const t={rtcpMuxPolicy:this.portType===NC.portReduce?"require":"negotiate",bundlePolicy:this.portType===NC.portReduce?"max-bundle":"balanced"},r=[];if(this.turnServerConfig){for(const e of this.turnServerConfig.turnServers)r.push("turn:".concat(e,":").concat(this.turnServerConfig.udpPort||3478,"?transport=udp"));t.iceServers=[{urls:r,username:this.turnServerConfig.userName,credential:this.turnServerConfig.credential}],t.iceTransportPolicy="relay"}t.sdpSemantics=this.sdpDescMode;const i=new RTCPeerConnection(t);var n;this.peerConnections.has(e)&&(null===(n=this.peerConnections.get(e).connection)||void 0===n||n.close());const o={connection:i,connectFailedTimes:0};return this.peerConnections.set(e,o),this.iceCandidateListener(o,e),o}destroyPeerConnection(e,t){const r=this.peerConnections.get(e);r&&(clearTimeout(r.disConnectDelayHandleTimer),r.connectFailedTimes=0,"closed"!==r.connection.signalingState&&(null==t||t.forEach((e=>r.connection.removeTrack(e))),r.connection.close()),"main"===e?this.mainReceiverPreStatisticMap.clear():this.auxReceiverPreStatisticMap.clear(),this.peerConnections.delete(e))}async modifySdpInfo(e,t){const r=this.peerConnections.get(e);let i=null;if(r)if("main"===e){const e=await this.getDataChannelTemplate(t);i=this.rtcSdp.modifyMainSdpInfo(r.connection.localDescription.sdp,r.candidate,r.videoSendSsrcs,r.audioSendSsrc,t,e)}else i=this.rtcSdp.modifyAuxSdpInfo(r.connection.localDescription.sdp,r.candidate,r.videoSendSsrcs);return i}async getDataChannelTemplate(e){let t=null;if(!e)return t;let r=null;try{r=new RTCPeerConnection,r.createDataChannel("dataChannelTemplate"),t=(await r.createOffer()).sdp}catch(jN){this.logger.error(iD,"getDataChannelTemplate failed, unsupport datachannel: ".concat(jN))}finally{r&&r.close()}return t}async setLocalDescriptionShim(e,t){let r;!this.isFireFox&&t||(r=(await e.createOffer()).sdp),await e.setLocalDescription({type:"offer",sdp:this.rtcSdp.transformOfferSdp(r||t)})}async handleAnswerSdpFromServer(e,t,r){const i=this.peerConnections.get(e).connection,{remoteDescription:n,bindCryptoKey:o,wsUrl:s,dataChannelEnable:a}=this.rtcSdp.transformAnswerSdp(t,i.localDescription.sdp);let c;this.logger.debug(iD,"handleAnswerSdpFromServer, ".concat(e," sdp answer: ").concat(this.rtcSdp.printSdpInfo(n))),c=r?await r({remoteDescription:n,bindCryptoKey:o,wsUrl:s,dataChannelEnable:a}):{answerSdp:n},c.offerSdp&&c.offerSdp!==i.localDescription.sdp&&await this.setLocalDescriptionShim(i,c.offerSdp);try{await i.setRemoteDescription({type:"answer",sdp:c.answerSdp})}catch(jN){throw this.logger.error(iD,"setRemoteDescription error, answer sdp invalid or offer sdp invalid"),new qc(Gc.RTC_ERR_CODE_ANSWER_SDP_INVALID,(null==jN?void 0:jN.message)||"setRemoteDescription error, answer sdp invalid or offer sdp invalid")}}getSfuInfoFromSdp(e,t){return this.rtcSdp.getSfuInfo(e,t)}async generateAndSetOfferSdpByHandler(e,t){const r=this.peerConnections.get(e).connection;let i;i=t?await t(r.localDescription.sdp):r.localDescription.sdp,await this.setLocalDescriptionShim(r,i)}async generateAndSetAnswerSdpByHandler(e,t){const r=this.peerConnections.get(e).connection;let i;i=t?(await t(r.remoteDescription.sdp)).answerSdp:r.remoteDescription.sdp,await r.setRemoteDescription({type:"answer",sdp:i})}async deleteUser(e,t,r){const i=this.peerConnections.get(e).connection,n=i.remoteDescription.sdp;let o={offerSdp:i.localDescription.sdp,answerSdp:n};if("plan-b"===this.sdpDescMode)o.answerSdp=this.rtcSdp.deleteUser(o.answerSdp,t,r);else{const n=i.getTransceivers();t&&t.length>0&&(o=await this.rtcSdp.deleteUser(o.answerSdp,o.offerSdp,t,n,(t=>this.recordCurrentReceiverStatistic(e,t)))),r&&r.length>0&&(o=await this.rtcSdp.deleteUser(o.answerSdp,o.offerSdp,r,n,(t=>this.recordCurrentReceiverStatistic(e,t))))}await this.setLocalDescriptionShim(i,o.offerSdp),await i.setRemoteDescription({type:"answer",sdp:o.answerSdp})}async recordCurrentReceiverStatistic(e,t){const r=await t.getStats();r&&r.forEach(((t,r)=>{(this.isFireFox||/RTCInboundRTP(Video|Audio)Stream_.*/gi.test(r))&&this["main"===e?"mainReceiverPreStatisticMap":"auxReceiverPreStatisticMap"].set(r,t)}))}getAllIdleReceiverTransceivers(e,t,r){const i=e.getTransceivers(),n=this.rtcSdp.getAllMidsByType(r,t);return i.filter((e=>n.includes("".concat(e.mid))&&e.currentDirection!==EM.SEND_RECV&&e.currentDirection!==EM.RECV_ONLY))}getIdleSendTransceiver(e,t,r,i){const n=e.getTransceivers();if(this.isFireFox&&i){const e=this.rtcSdp.getOfferVideoMidBySsrc(r,t,this.getMappingSsrcs(i));return null==n?void 0:n.find((t=>t.mid===e))}const o=this.rtcSdp.getAllMidsByType(r,t);return null==n?void 0:n.find((e=>o.includes("".concat(e.mid))&&e.currentDirection!==EM.SEND_ONLY&&e.currentDirection!==EM.SEND_RECV))}async addTrack(e,t,r,i){const n=this.peerConnections.get(e).connection;if("plan-b"===this.sdpDescMode)return n.addTrack(t,r);const o=n.localDescription.sdp;let s=this.getIdleSendTransceiver(n,"audio"===t.kind?mO.TRACK_TYPE_AUDIO:mO.TRACK_TYPE_VIDEO,o,i);if(s){await s.sender.replaceTrack(t),s.direction=s.currentDirection===EM.RECV_ONLY?EM.SEND_RECV:EM.SEND_ONLY;const e=this.rtcSdp.modifyAnswerDirection(n.remoteDescription.sdp,s.mid);await this.setLocalDescriptionShim(n),await n.setRemoteDescription({type:"answer",sdp:e})}else this.logger.info(iD,"addTrack, no available sender, addTranscevier"),s=await this.addTransceiver(n,"audio"===t.kind?mO.TRACK_TYPE_AUDIO:mO.TRACK_TYPE_VIDEO),await s.sender.replaceTrack(t),s.direction=s.currentDirection===EM.RECV_ONLY?EM.SEND_RECV:EM.SEND_ONLY;return s.sender}removeTrack(e,t){const r=this.peerConnections.get(e).connection;"closed"!==r.signalingState&&r.removeTrack(t)}async modifyPublishOfferSdp(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,n=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[],o=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0;const s=this.peerConnections.get(e).connection;let a,c,u=(await s.createOffer()).sdp;return(n&&n.length>0||o)&&("plan-b"===this.sdpDescMode?u=this.rtcSdp.deleteSSRC(u,n,o):a=this.rtcSdp.deleteSSRC(u,s.remoteDescription.sdp,this.getMappingSsrcs(n,e),this.getMappingSsrcs(o,e))),"plan-b"===this.sdpDescMode?u=this.rtcSdp.modifyPublishOfferSdp(u,r,i):a=this.rtcSdp.modifyPublishOfferSdp(a?a.offerSdp:u,a?a.answerSdp:s.remoteDescription.sdp,t,this.getMappingSsrcs(r,e),this.getMappingSsrcs(i,e)),"plan-b"===this.sdpDescMode?(await s.setLocalDescription({type:"offer",sdp:u}),await s.setRemoteDescription(s.remoteDescription),c=u):(await this.setLocalDescriptionShim(s,a.offerSdp),await s.setRemoteDescription({type:"answer",sdp:a.answerSdp}),c=a.offerSdp),c}async addTopAudioUserBatch(e,t,r,i){const n=this.peerConnections.get("main").connection;let o,s={offerSdp:n.localDescription.sdp,answerSdp:e};"plan-b"!==this.sdpDescMode&&(o=this.getAllIdleReceiverTransceivers(n,mO.TRACK_TYPE_AUDIO,s.answerSdp));for(let a=0;a{clearTimeout(e),t.receiver.track.enabled=!0}),300)}}else t=await this.addTransceiver(r,mO.TRACK_TYPE_VIDEO,a);t.direction=t.currentDirection===EM.SEND_ONLY?EM.SEND_RECV:EM.RECV_ONLY,a=this.rtcSdp.modifySdpByMid(a.answerSdp,a.offerSdp,t.mid,c,e.streamId,e.videoSsrc)}await this.setLocalDescriptionShim(r,a.offerSdp),await r.setRemoteDescription({type:"answer",sdp:a.answerSdp})}}async addTransceiver(e,t,r){var i;e.addTransceiver(t,{direction:EM.INACTIVE});const n=await e.createOffer();await this.setLocalDescriptionShim(e,n.sdp);const o=this.rtcSdp.getLeastMid(n.sdp),s=this.rtcSdp.generateMatchedAnswerWithOffer((null==r?void 0:r.answerSdp)||e.remoteDescription.sdp,o,t);return r&&(r.offerSdp=n.sdp,r.answerSdp=s),await e.setRemoteDescription({type:"answer",sdp:s}),null===(i=e.getTransceivers())||void 0===i?void 0:i.find((e=>"".concat(e.mid)===o))}getConnection(e){var t;return this.isConnectionsExist()&&this.peerConnections.get(e)?null===(t=this.peerConnections.get(e))||void 0===t?void 0:t.connection:null}getConnectionRTT(){let e=0;if(!this.isConnectionsExist())return e;const t=CO.getLatestReport(this.uniqueId,gO.STREAM_TYPE_MAIN);if(t){const r=t.get("candidate-pair");e=r&&r.currentRoundTripTime||0}return e}getICETransportStat(e){if(!e)throw this.logger.error(iD,"getICETransportStat, pcType is null"),new qc(Gc.RTC_ERR_CODE_INVALID_PARAMETER,"pcType is null");const t=CO.getLatestReport(this.uniqueId,e);if(!t)return null;try{const e=t.get("candidate-pair");return{currentRoundTripTime:e.currentRoundTripTime||0,availableOutgoingBitrate:e.availableOutgoingBitrate||0,bytesSent:e.bytesSent||0,bytesReceived:e.bytesReceived||0}}catch(jN){return this.logger.error(iD,"getICETransportStat failed",jN),null}}getInfo(){return{moduleName:"PeerConnectionsManager"}}async refreshOffer(e){const t=this.peerConnections.get(e).connection,r=await t.createOffer();return await t.setLocalDescription({type:"offer",sdp:this.rtcSdp.transformOfferSdp(r.sdp)}),r}}var oD={exports:{}};!function(e,t){self,e.exports=function(){var e={d:function(t,r){for(var i in r)e.o(r,i)&&!e.o(t,i)&&Object.defineProperty(t,i,{enumerable:!0,get:r[i]})},o:function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r:function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};e.r(t),e.d(t,{GrsBaseInfo:function(){return O},GrsClient:function(){return M},GrsErrorCode:function(){return s},Logger:function(){return l}});var r=function(e){return"string"!=typeof e||""==e},i=function(e){return void 0===e||null==e||"{}"==JSON.stringify(e)},n=function(e){return!(void 0!==e&&e instanceof Array&&"[]"!=JSON.stringify(e))},o=function(e){if("string"!=typeof e||""==e)return{};try{var t=JSON.parse(e);return void 0===t||null==t?{}:t}catch(e){return{}}},s={ERR_OK:0,ERR_INTERNAL_ERROR:1,ERR_INVALID_PARAM:2,ERR_INIT:3,GRS_SET_ROUTER_DIR:4,GRS_SET_SYSTEM_INFO:5,GRS_SERVICE_CONFIGURE_NO_FILE:6,GRS_SERVICE_CONFIGURE_READ_ERROR:7,GRS_SET_CA_FILE:8,GRS_SERVICE_CONFIGURE_PARSE_ERROR:9,GRS_SERVICE_CONFIGURE_PARSE_VALUE_ERROR:10,GRS_ROUTER_CONFIGURE_EMPTY:11,GRS_ROUTER_APP_CONFIGURE_READ_ERROR:12,GRS_ROUTER_SDK_CONFIGURE_READ_ERROR:13,GRS_ROUTER_CONFIGURE_PARSE_VALUE_ERROR:14,GRS_ROUTER_SERVER_NAME_EMPTY:15,GRS_ROUTER_BY_EMPTY:16,GRS_APK_ROUTER_NO_APPLICATION:17,GRS_NOT_FIND:18,GRS_NOT_FIND_APPLICATION:19,GRS_NOT_FIND_SERVICE_LIST:20,GRS_NOT_FIND_SERVING_COUNTRY_GROUP:21,GRS_NOT_FIND_SERVICE:22,GRS_NOT_FIND_ADDRESS:23,GRS_NOT_FIND_COUNTRY:24};function a(e){return function(e){if(Array.isArray(e))return c(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return c(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?c(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,i=new Array(t);r");for(var c in a){if("ser_country"===a[c]&&!r(t)){s=t;break}if("reg_country"===a[c]&&!r(i)){s=i;break}if("issue_country"===a[c]&&!r(n)){s=n;break}if("geo_ip"===a[c]&&!r(o)){s=o;break}}return s},p=function(e,t){var r="";for(var i in e)if(e[i].countriesOrAreas.includes(t)){r=e[i].id;break}return r},m=function(e,t){var r={};if(i(e))return r;var n=e.errorList;if(!i(n)&&t in n)return r.results=n[t],r.status="failure",r;var o=e.services;return!i(o)&&t in o?(r.results=o[t],r.status="success",r):(r.results="GRS_NOT_FIND_SERVICE",r.status="notFindService",r)},g=function(e,t,r,i){var n="",o=m(e,r);if("success"===o.status&&i in o.results)return l.i("getGrsUrl","Return The Server Cached Data"),o.results[i];l.i("getGrsUrl","Cannot find "+r+"("+i+") in serverUrlInfo: ",JSON.stringify(e));var s=m(t,r);return"success"===s.status&&i in s.results?(l.i("getGrsUrl","Return The Local JSON Data"),n=s.results[i]):l.i("getGrsUrl","Cannot find "+r+"("+i+") in localUrlInfo: ",JSON.stringify(t)),n},_=function(e,t,r){var i={},n=m(e,r);if("success"===n.status)return l.i("getGrsUrl","Return The Server Cached Data"),n.results;l.i("getGrsUrl","Cannot find "+r+" in serverUrlInfo: ",JSON.stringify(e));var o=m(t,r);return"success"===o.status?i=o.results:l.i("getGrsUrl","Cannot find "+r+" in localUrlInfo: ",JSON.stringify(t)),i};function S(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,i)}return r}function v(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,i=new Array(t);r=(new Date).getTime())return l.i("getGrsDataFromServerOrCache","During The Suppression Or The Cache Not Expired"),void t(a);c=r(a.header.ETag)?"&":a.header.ETag,b(t,e,a,s,c)}))},b=function(e,t,n,o,s){C(t,s).then((function(t){if(l.d("getGrsDataFromServerOrCache","handleGrsDataFromServer: ",t),t.success){if(200===t.statusCode)return localStorage.setItem(o,JSON.stringify(t)),void e(t);if(304===t.statusCode)return n["cache-time"]=(new Date).getTime(),n.header=t.header,localStorage.setItem(o,JSON.stringify(n)),void e(n);if(503===t.statusCode)return void function(e,t,n,o){i(e)||r(e)?(t.header["cache-control"]="private,max-age="+t.header["Retry-After"],localStorage.setItem(n,JSON.stringify(t)),o(t)):(e["cache-time"]=(new Date).getTime(),e.header["cache-control"]="private,max-age="+t.header["Retry-After"],localStorage.setItem(n,JSON.stringify(e)),o(e))}(n,t,o,e);i(n)||r(n)?(t.header["cache-control"]="private,max-age=300",localStorage.setItem(o,JSON.stringify(t)),e(t)):(n["cache-time"]=(new Date).getTime(),n.header["cache-control"]="private,max-age=300",localStorage.setItem(o,JSON.stringify(n)),e(n))}})).catch((function(t){l.i("getGrsDataFromServerOrCache","handleGrsDataFromServer catch: ",t),i(n)||r(n)?(localStorage.setItem(o,JSON.stringify(t)),e(t)):(n["cache-time"]=(new Date).getTime(),n.header["cache-control"]="private,max-age=300",localStorage.setItem(o,JSON.stringify(n)),e(n))}))},C=function(e,t){var r=e.getServerConfig().grs_server.grs_query_timeout,i=e.getServerConfig().grs_server.grs_base_url,n=e.getServerConfig().grs_server.grs_query_endpoint,o=[];for(var s in i)o.push(i[s]+n+"?"+e.getGrsReqParamJoint());return function(e,t,r,i){l.i("post","urls: ",e);var n=[];return e.forEach((function(e){n.push(R(e,t,r,1e3*i))})),Promise.race(n)}(o,e._servicList,{"Content-Type":"application/json;charset=UTF-8","User-Agent":e.getUserAgent(),"If-None-Match":t},r)};function A(e){return function(e){if(Array.isArray(e))return w(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return w(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?w(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function w(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,i=new Array(t);r0?t.match(/msie [\d.]+;/gi):t.indexOf("firefox")>0?t.match(/firefox\/[\d.]+/gi):t.indexOf("chrome")>0?t.match(/chrome\/[\d.]+/gi):t.indexOf("safari")>0&&t.indexOf("chrome")<0?t.match(/safari\/[\d.]+/gi):void 0)[0].replace("/","; ")}catch(t){e="unknown; web-browser"}return this.packageName+"/"+this.versionName+" ("+e+"; NA) network-grs-web/5.0.9.300 "+this.serviceName}}])&&k(t.prototype,n),Object.defineProperty(t,"prototype",{writable:!1}),e}();function P(e,t){for(var r=0;r{r.userState===IO.Joined&&(r.mainStream&&r.mainStream.remoteTrackInfos&&r.mainStream.remoteTrackInfos.forEach((r=>{r.cssrc===e&&(t=r.mute)})),r.auxStream&&r.auxStream.remoteTrackInfos&&r.auxStream.remoteTrackInfos.forEach((r=>{r.cssrc===e&&(t=r.mute)})))})),t}checkRemoteTop3NeedReport(){let e=0;return this.remoteUserInfos.forEach((t=>{t.userState===IO.Joined&&t.mainStream&&t.mainStream.remoteTrackInfos&&t.mainStream.remoteTrackInfos.forEach((t=>{t.type===mO.TRACK_TYPE_AUDIO&&e++}))})),!(e<3)}initialize(e,t){e&&t&&(this.localUserId=e,this.audioCssrcs=this.getCssrcRangeByType(t,_D.audio),this.mainVideoCssrcs=this.getCssrcRangeByType(t,_D.mainVideo),this.auxVideoCssrcs=this.getCssrcRangeByType(t,_D.auxVideo))}getStreamInfoByPStreamUid(e){let t=null;return Array.from(this.remoteUserInfos.values()).forEach((r=>{var i,n,o;if(null!==(i=r.mainStream)&&void 0!==i&&i.remoteTrackInfos.get(e.toString()))t=null===(o=r.mainStream)||void 0===o?void 0:o.remoteTrackInfos.get(e.toString());else if(null!==(n=r.auxStream)&&void 0!==n&&n.remoteTrackInfos.get(e.toString())){var s;t=null===(s=r.auxStream)||void 0===s?void 0:s.remoteTrackInfos.get(e.toString())}})),t}getCssrcRangeByType(e,t){if(!e)throw this.logger.error(SD,"sdpRepInfo is null"),new qc(Gc.RTC_ERR_CODE_RTC_SDK_ERROR);const r=t===_D.audio?e.audio:t===_D.mainVideo?e.video:e.desktopVideo,i=null==r?void 0:r.receiveSsrcBegin,n=null==r?void 0:r.receiveSsrcEnd;if(!i||!n||i>=n)throw this.logger.error(SD,"begin or end is invalid"),new qc(Gc.RTC_ERR_CODE_RTC_SDK_ERROR);return vD.getCssrcRange(i,n)}static getCssrcRange(e,t){const r=[];let i;for(i=e;i<=t;i++)r.push(i);return r}refreshRemoteUserList(e,t,r){const i=[],n=this.getUserStreamUpdatedList(e,t);return n?(n.addedUsers.forEach((t=>{const n=this.addUser(t,e,r);n&&i.push(n)})),n.updatedUsers.forEach((t=>{const n=this.updateUser(t,e,r);n&&i.push(n)})),n.removedUsers.forEach((t=>{const n=this.removeUser(t,e,r);n&&i.push(n)})),this.logger.info(SD,"refreshRemoteUserStreamList success, ".concat(this.getTracksUpdateInfosString(i))),i):null}addUser(e,t,r){return this.updateUser(e,t,r)}updateUser(e,t,r){var i,n,o;if(e.userId===this.localUserId)return null;const s={userId:e.userId,userUid:e.userUid,nickname:e.appData.nickname,roomId:t,relaySrcRoomId:null===(i=e.relayUserSrcInfo)||void 0===i?void 0:i.roomId},a=null===(n=e.videoStreams)||void 0===n?void 0:n.filter((e=>e.content!==CC.desktop)),c=null===(o=e.videoStreams)||void 0===o?void 0:o.filter((e=>e.content===CC.desktop)),u=e.audioStreams,d=this.getUserInfoById(s.userId,s.roomId),l=this.doRefreshRemoteStreamList(s,gO.STREAM_TYPE_MAIN,a,u,r),h=this.doRefreshRemoteStreamList(s,gO.STREAM_TYPE_AUX,c,null,r),f=this.getUserInfoById(s.userId,s.roomId);return{userInfo:f.userInfo,preUserState:d?f.userState:IO.NotJoin,curUserState:f.userState,isUserNameChanged:null,mainStream:l,auxStream:h}}removeUser(e,t,r){if(e.userId===this.localUserId)return null;const i={userId:e.userId,userUid:e.userUid,nickname:e.appData.nickname,roomId:t};this.doRefreshRemoteStreamList(i,gO.STREAM_TYPE_MAIN,[],[],r),this.doRefreshRemoteStreamList(i,gO.STREAM_TYPE_AUX,[],[],r);const n={status:pD.exitRoom,userId:e.userId,userUid:e.userUid},o=this.updateUserListInfo(t,[n]);return o&&0!==o.length?o[0]:null}getUserStreamUpdatedList(e,t){const r=this.getAllUserInfos(e),i=[],n=[],o=[];return r.forEach((e=>{if(e.userInfo.userId===wC)return;const r=t.find((t=>t.userId===e.userInfo.userId)),i=this.getAllTracksByMediaType(e.userInfo.roomId,e.userInfo.userId,mO.TRACK_TYPE_VIDEO),s=this.getAllTracksByMediaType(e.userInfo.roomId,e.userInfo.userId,mO.TRACK_TYPE_AUDIO);if(r){r.audioStreams&&(r.audioStreams=r.audioStreams.filter((e=>"main"===e.content)));const e={userId:r.userId,userUid:r.userUid,appData:r.appData,videoStreams:r.videoStreams,audioStreams:r.audioStreams,relayUserSrcInfo:r.relayUserSrcInfo};n.push(e)}else{const t=i.map((e=>({content:e.content,codec:e.codec,fps:e.fps,height:e.height,maxFs:e.maxFs,maxMbps:e.maxMbps,mute:e.mute,pt:e.pt,ssrc:e.pssrc,streamData:e.streamData,streamUid:parseInt(e.trackId),width:e.width}))),r=s.map((e=>({content:e.content,codec:e.codec,maxMbps:e.maxMbps,mute:e.mute,pt:e.pt,ssrc:e.pssrc,streamData:e.streamData,streamUid:parseInt(e.trackId),channels:e.channels,sampleRate:e.sampleRate}))),n={userId:e.userInfo.userId,userUid:e.userInfo.userUid,appData:{nickname:e.userInfo.nickname},videoStreams:t,audioStreams:r};o.push(n)}})),t.forEach((e=>{if(!r.some((t=>t.userInfo.userId===e.userId))){e.audioStreams&&(e.audioStreams=e.audioStreams.filter((e=>"main"===e.content)));const t={userId:e.userId,userUid:e.userUid,appData:e.appData,videoStreams:e.videoStreams,audioStreams:e.audioStreams,relayUserSrcInfo:e.relayUserSrcInfo};i.push(t)}})),{addedUsers:i,updatedUsers:n,removedUsers:o}}updateUserListInfo(e,t){if(!t||!e)return null;const r=[],i=[];return t.forEach((t=>{var n;const o={userId:t.userId,userUid:t.userUid,roomId:e,nickname:t.appData?t.appData.nickname:null,relaySrcRoomId:null===(n=t.relayUserSrcInfo)||void 0===n?void 0:n.roomId},s=this.updateUserInfo(o,t.status);s&&r.push(s),i.push(t.userId)})),r.push(...this.getOtherRemoteUserPublishInfos(i,e)),this.logger.info(SD,"updateUserListInfo success, ".concat(this.getTracksUpdateInfosString(r))),r}updateUserInfo(e,t){if(this.logger.info(SD,"updateUserInfo begin, updateType:".concat(t,", userInfo: ").concat(JSON.stringify(e))),e.userId===this.localUserId)return null;const r=this.getUserInfoById(e.userId,e.roomId),i=r?r.userState:IO.NotJoin,n=!!r&&vD.isUserNameChanged(r.userInfo,null==e?void 0:e.nickname);switch(t){case pD.exitRoom:if(!r)return this.logger.error(SD,"remote user leave, but user not exist"),null;break;case pD.joinRoom:r||this.initializeRemoteUser(e,!0);break;default:this.logger.error(SD,"updateUserInfo, unknown user status:".concat(t))}const o=this.getUserInfoById(e.userId,e.roomId),s=t===pD.joinRoom?vD.getUserUpdateInfoWhenJoin(i,n,o):vD.getUserUpdateInfoWhenQuit(i,o);if(t===pD.exitRoom&&o.userState===IO.NotJoin){const t=vD.generateUniqueId(e.userId,e.roomId);this.remoteUserInfos.delete(t)}return s}static getUserUpdateInfoWhenJoin(e,t,r){return r.userState=e===IO.Rejoining?IO.Joined:r.userState,{userInfo:r.userInfo,preUserState:e,curUserState:r.userState,isUserNameChanged:t,mainStream:null,auxStream:null}}static getUserUpdateInfoWhenQuit(e,t){return t.userState=e===IO.Rejoining?e:IO.NotJoin,{userInfo:t.userInfo,preUserState:e,curUserState:t.userState,isUserNameChanged:null,mainStream:vD.getStreamListUpdateInfoWhenQuitOrRejoin(t,gO.STREAM_TYPE_MAIN,e),auxStream:vD.getStreamListUpdateInfoWhenQuitOrRejoin(t,gO.STREAM_TYPE_AUX,e)}}static getStreamListUpdateInfoWhenQuitOrRejoin(e,t,r){return r===IO.Rejoining?vD.getStreamListUpdateInfoWhenRejoin(e,t):vD.getStreamListUpdateInfoWhenQuit(e,t)}static getStreamListUpdateInfoWhenQuit(e,t){const r=t===gO.STREAM_TYPE_MAIN?e.mainStream:e.auxStream,i=vD.getRemoteTrackInfos(r),n=null==i?void 0:i.filter((e=>e.isSubscribed));return{remoteStream:null==r?void 0:r.remoteStream,preTracks:i,curTracks:i,addedTracks:[],updatedTracks:[],removedTracks:i,subscribedTracks:n,tracks4Subscribe:[],tracks4Unsubscribe:n,allSubscribeTracks:[]}}static getStreamListUpdateInfoWhenRejoin(e,t){const r=t===gO.STREAM_TYPE_MAIN?e.mainStream:e.auxStream,i=vD.getRemoteTrackInfos(r),n=null==i?void 0:i.filter((e=>e.isSubscribed));return{remoteStream:null==r?void 0:r.remoteStream,preTracks:i,curTracks:i,addedTracks:[],updatedTracks:[],removedTracks:i,subscribedTracks:n,tracks4Subscribe:[],tracks4Unsubscribe:[],allSubscribeTracks:n}}getTracks4UnSubscribe(e){if(!e)throw new qc(Gc.RTC_ERR_CODE_INVALID_PARAMETER);const t=[];return e.forEach((e=>{e.isSubscribed&&(e.isSubscribed=!1,t.push(e))})),this.logger.info(SD,"getTracks4UnSubscribe success, tracks4Unsubscribe: ".concat(JSON.stringify(t))),t}cachePlayInfo(e,t,r,i,n){if(!n)return;const o=this.getUserInfoById(e.userId,e.roomId),s=t===gO.STREAM_TYPE_MAIN?o.mainStream:o.auxStream,a=null==s?void 0:s.subscribeOption;return a?vD.isStreamRemoved(r,i)?(a.audio=!1,a.video=!1,void(a.resolutions=null)):void n.forEach((e=>{if(e.isSubscribed){if(a.audio&&e.type===mO.TRACK_TYPE_AUDIO){var t;const r=null==s||null===(t=s.remoteStream)||void 0===t?void 0:t.getAudioHRTCTrack();r&&(a.audioPlayInfo.playElement=r.getElementId(),a.audioPlayInfo.objectFit=r.getObjectFit(),a.audioPlayInfo.muted=r.getTrackMuted(),e.muted=r.getTrackMuted())}if(a.video&&e.type===mO.TRACK_TYPE_VIDEO){var r;const t=null==s||null===(r=s.remoteStream)||void 0===r?void 0:r.getVideoHRTCTrackByTrackId(e.trackId);if(t){var i;const r=null===(i=a.resolutions)||void 0===i?void 0:i.find((t=>t.resolutionId===e.trackId));r&&(r.playElement=t.getElementId(),r.objectFit=t.getObjectFit(),r.muted=t.getTrackMuted(),e.muted=t.getTrackMuted())}}}})):void 0}static isStreamRemoved(e,t){return!(e&&0!==e.length||t&&0!==t.length)}getTracks4Subscribe(e,t,r,i,n){if(this.logger.debug(SD,"getTracks4Subscribe begin"),!(i&&0!==i.length||n&&0!==n.length))return this.logger.debug(SD,"getTracks4Subscribe success, tracks4Subscribe: []"),[];const o=n.filter((e=>e.isSubscribed)),s=[],a=this.isAudioTrackNeedSubscribe(e.userId,e.roomId,t),c=i.find((e=>e.type===mO.TRACK_TYPE_AUDIO));if(a&&c){c.cssrc=this.allocateAudioReceiveSsrc(e.roomId),c.isSubscribed=!0,c.state=TO.resolutionChange;const r=this.getAudioTrackPlayInfo(e.userId,e.roomId,t);r&&(c.playElement=r.playElement,c.objectFit=r.objectFit,c.muted=r.muted);const i=o.find((e=>e.type===mO.TRACK_TYPE_AUDIO));i&&(c.state=i.state,c.muted=i.muted),s.push(c)}const u=o.filter((e=>e.type===mO.TRACK_TYPE_VIDEO)),d=i.filter((e=>e.type===mO.TRACK_TYPE_VIDEO));for(const l of d){const r={resolutionId:l.trackId,width:l.width,height:l.height};if(this.updateVideoSubscribeOption(e.userId,e.roomId,t,r,u)){l.cssrc=this.allocateVideoReceiveSsrc(e.roomId,t),l.isSubscribed=!0,l.state=TO.resolutionChange;const i=this.getVideoTrackPlayInfo(e.userId,e.roomId,t,r);i&&(l.playElement=i.playElement,l.objectFit=i.objectFit,l.muted=i.muted);const n=this.getTrack4Replace(l,u);n&&n.state!==TO.normal&&(l.state=n.state,l.muted=n.muted),s.push(l)}}return this.logger.info(SD,"getTracks4Subscribe success, tracks4Subscribe: ".concat(JSON.stringify(s))),s}getAudioTrackPlayInfo(e,t,r){var i;const n=this.getUserInfoById(e,t);return null===(i=(r===gO.STREAM_TYPE_MAIN?n.mainStream:n.auxStream).subscribeOption)||void 0===i?void 0:i.audioPlayInfo}getVideoTrackPlayInfo(e,t,r,i){var n,o;const s=this.getUserInfoById(e,t),a=null===(n=(r===gO.STREAM_TYPE_MAIN?s.mainStream:s.auxStream).subscribeOption)||void 0===n||null===(o=n.resolutions)||void 0===o?void 0:o.find((e=>e.resolutionId===i.resolutionId));return a?{playElement:a.playElement,objectFit:a.objectFit,muted:a.muted}:null}updateVideoSubscribeOption(e,t,r,i,n){const o=this.getUserInfoById(e,t),s=r===gO.STREAM_TYPE_MAIN?o.mainStream:o.auxStream,a=null==s?void 0:s.subscribeOption;if(!a)return!1;if(!a.video)return!1;const c=a.resolutions.find((e=>e.resolutionId===i.resolutionId||e.height===i.height&&e.width===i.width||(null==n?void 0:n.length)));return c&&(c.resolutionId=i.resolutionId),!!c}enableTopThreeAudioMode(e){const t=this.getAllUserInfos(e);null==t||t.forEach((e=>{var t,r;null!==(t=e.mainStream)&&void 0!==t&&t.subscribeOption&&(e.mainStream.subscribeOption.audio=!1),null!==(r=e.auxStream)&&void 0!==r&&r.subscribeOption&&(e.auxStream.subscribeOption.audio=!1)})),this.logger.info(SD,"enableTopThreeAudioMode success")}isAudioTrackNeedSubscribe(e,t,r){var i;const n=this.getUserInfoById(e,t),o=r===gO.STREAM_TYPE_MAIN?n.mainStream:n.auxStream;return null==o||null===(i=o.subscribeOption)||void 0===i?void 0:i.audio}getTrack4Replace(e,t){return(null==t?void 0:t.find((t=>t.trackId===e.trackId||t.height===e.height&&t.width===e.width)))||(null!=t&&t.length?t[0]:null)}getAllUserStreamsByType(e,t,r){return this.getAllUserInfos(e).map((i=>{const n=t&&t!==gO.STREAM_TYPE_MAIN?null:vD.getStreamInfoByType(i,gO.STREAM_TYPE_MAIN,r),o=t&&t!==gO.STREAM_TYPE_AUX?null:vD.getStreamInfoByType(i,gO.STREAM_TYPE_AUX,r);return{userId:i.userInfo.userId,roomId:e,mainStream:n,auxStream:o}}))}static getStreamInfoByType(e,t,r){const i=t===gO.STREAM_TYPE_MAIN?e.mainStream:e.auxStream,n=vD.getRemoteTrackInfos(i),o=vD.getTracksByType(n,r);return{remoteStream:i?i.remoteStream:null,tracks:o}}getUserInfoById(e,t){const r=vD.generateUniqueId(e,t);return this.remoteUserInfos.get(r)}getUserInfoByUid(e,t){let r=null;for(const i of this.remoteUserInfos.values())if(i.userInfo.userUid===e&&i.userInfo.roomId===t){r=i;break}return r}static getTracksByType(e,t){return e&&0!==e.length?t?e.filter((e=>e.type===t)):e:[]}static isUserNameChanged(e,t){return t&&e&&e.nickname&&e.nickname!==t}static getRemoteTrackInfos(e){return null!=e&&e.remoteTrackInfos?Array.from(e.remoteTrackInfos.values()):null}getAllTracksByMediaType(e,t,r){var i,n;const o=vD.generateUniqueId(t,e),s=this.remoteUserInfos.get(o);if(!s)return null;const a=[],c=null===(i=vD.getRemoteTrackInfos(s.mainStream))||void 0===i?void 0:i.filter((e=>e.type===r));c&&a.push(...c);const u=null===(n=vD.getRemoteTrackInfos(s.auxStream))||void 0===n?void 0:n.filter((e=>e.type===r));return u&&a.push(...u),a}getMaxResolutionTrack(e){let t;for(const r of e)r.type!==mO.TRACK_TYPE_AUDIO&&(t?Math.max(r.width,r.height)-Math.max(t.width,t.height)>0&&(t=r):t=r);return this.logger.info(SD,"getMaxResolutionTrackId, maxResolution: ".concat(JSON.stringify(t))),t}getMaxResolutionTrackId(e){var t;if(!e)return null;const r=Array.from(e.remoteTrackInfos.values());let i;for(const n of r)n.type!==mO.TRACK_TYPE_AUDIO&&(i?Math.max(n.width,n.height)-Math.max(i.width,i.height)>0&&(i=n):i=n);return this.logger.info(SD,"getMaxResolutionTrackId, maxResolution: ".concat(JSON.stringify(i))),null===(t=i)||void 0===t?void 0:t.trackId}getAllSubscribedMainStream(e){const t=this.getAllUserInfos(e),r=[];return t.forEach((e=>{var t;null!==(t=e.mainStream)&&void 0!==t&&t.remoteTrackInfos&&Array.from(e.mainStream.remoteTrackInfos.values()).some((e=>e.isSubscribed))&&r.push(e)})),r}batchSubscribeMainStream(e,t){if(!e||!t)return null;const r=this.getAllSubscribedMainStream(e),i=[],n=t.find((e=>e.userId===wC));if(n){this.getUserInfoById(wC,e)||this.createRemoteShadowUser(e,n.resolutionIds)}return this.getAllUserInfos(e).forEach((n=>{const o=t.find((e=>e.userId===n.userInfo.userId));if(o){const t={video:!0,audio:!1,resolutionIds:o.resolutionIds,autoAdjustResolution:o.autoAdjustResolution,minResolution:o.minResolution},r=this.subscribeSingleStream(o.userId,e,gO.STREAM_TYPE_MAIN,t,_O.TOPN_AUDIOPOLICY,!0);i.push(r)}else{var s;const e=vD.getRemoteTrackInfos(n.mainStream),o=null==e?void 0:e.filter((e=>e.isSubscribed)),a=this.needUnsubscribeMainStream(n,t,r),c=vD.getAnotherStreamUpdateInfo(gO.STREAM_TYPE_MAIN,n),u={userInfo:n.userInfo,curUserState:n.userState,preUserState:n.userState,mainStream:{remoteStream:null===(s=n.mainStream)||void 0===s?void 0:s.remoteStream,preTracks:e,curTracks:e,addedTracks:null,updatedTracks:null,removedTracks:null,subscribedTracks:o,tracks4Subscribe:null,tracks4Unsubscribe:o,allSubscribeTracks:a?null:o},auxStream:c};i.push(u)}})),this.logger.info(SD,"batchSubscribeMainStream success, infos: ".concat(this.getTracksUpdateInfosString(i))),i}needUnsubscribeMainStream(e,t,r){const i=!t.some((t=>t.userId===e.userInfo.userId)),n=r.some((t=>e.userInfo.userId===t.userInfo.userId));return i&&n}createRemoteShadowUser(e,t){const r={userId:wC,userUid:kC,nickname:"",roomId:e},i=[];null==t||t.forEach((e=>{const t=gD[e]||gD.LD,r={content:CC.main,ssrc:t.pssrc,streamUid:t.streamUid,pt:AM.h264PayLoad,width:t.width,height:t.height};i.push(r)})),this.doRefreshRemoteStreamList(r,gO.STREAM_TYPE_MAIN,i,null,!1),this.logger.info(SD,"createRemoteShadowUser success, upstreams: ".concat(JSON.stringify(i)))}subscribeResultCallback(e,t){if(e)try{e.successSubscribeInfos.forEach((e=>{var t,r,i,n;null===(t=e.mainStream)||void 0===t||null===(r=t.tracks)||void 0===r||r.forEach((e=>{e.state=TO.normal})),null===(i=e.auxStream)||void 0===i||null===(n=i.tracks)||void 0===n||n.forEach((e=>{e.state=TO.normal}))})),e.failSubscribeInfos.forEach((e=>this.releaseResource(e,t))),e.successUnsubscribeInfos.forEach((e=>this.releaseResource(e,!1))),e.failUnsubscribeInfos.forEach((e=>this.recoverUnsubscribeResource(e,t))),this.logger.info(SD,"subscribeResultCallback success")}catch(jN){this.logger.error(SD,"subscribeResultCallback fail, errMsg:".concat(jN))}}releaseResource(e,t){var r,i,n,o;const s=this.getUserInfoById(e.userId,e.roomId);null==e||null===(r=e.mainStream)||void 0===r||null===(i=r.tracks)||void 0===i||i.forEach((r=>{if(this.unAllocateReceiveSsrc(e.roomId,gO.STREAM_TYPE_MAIN,r.type,r.cssrc),r.state=TO.normal,r.isSubscribed=!1,r.isTrackReady=!1,r.cssrc=0,t){const e=s.mainStream.subscribeOption;vD.recoverUnsubscribeOption(e,r)}})),null==e||null===(n=e.auxStream)||void 0===n||null===(o=n.tracks)||void 0===o||o.forEach((r=>{if(this.unAllocateReceiveSsrc(e.roomId,gO.STREAM_TYPE_AUX,r.type,r.cssrc),r.state=TO.normal,r.isSubscribed=!1,r.isTrackReady=!1,r.cssrc=0,t){const e=s.mainStream.subscribeOption;vD.recoverUnsubscribeOption(e,r)}}))}recoverUnsubscribeResource(e,t){var r,i,n,o;const s=this.getUserInfoById(e.userId,e.roomId);null==e||null===(r=e.mainStream)||void 0===r||null===(i=r.tracks)||void 0===i||i.forEach((r=>{var i;this.recoverReceiveSsrc(e.roomId,gO.STREAM_TYPE_MAIN,r.type,r.cssrc),r.isSubscribed=!0;const n=null===(i=s.mainStream)||void 0===i?void 0:i.remoteTrackInfos;if(n.has(r.trackId)||n.set(r.trackId,r),t){const e=s.mainStream.subscribeOption;vD.recoverSubscribeOption(e,r)}})),null==e||null===(n=e.auxStream)||void 0===n||null===(o=n.tracks)||void 0===o||o.forEach((r=>{var i;this.recoverReceiveSsrc(e.roomId,gO.STREAM_TYPE_AUX,r.type,r.cssrc),r.isSubscribed=!0;const n=null===(i=s.auxStream)||void 0===i?void 0:i.remoteTrackInfos;if(n.has(r.trackId)||n.set(r.trackId,r),t){const e=s.mainStream.subscribeOption;vD.recoverSubscribeOption(e,r)}}))}static recoverSubscribeOption(e,t){if(t.type===mO.TRACK_TYPE_AUDIO)e.audio=!0;else{e.video=!0;const r={resolutionId:t.trackId,width:t.width,height:t.height};e.resolutions.push(r)}}static recoverUnsubscribeOption(e,t){if(t.type===mO.TRACK_TYPE_AUDIO)e.audio=!1;else{if(!e.video)return;e.resolutions?e.resolutions.forEach((t=>{var r;const i=null==e||null===(r=e.resolutions)||void 0===r?void 0:r.map((e=>e.resolutionId)).indexOf(t.resolutionId);i>-1&&e.resolutions.splice(i,1)})):(e.video=!1,e.resolutions=null)}}subscribeStream(e,t,r,i,n,o,s){const a=this.subscribeSingleStream(e,t,r,i,n,o),c=[];if(s&&(s.streamIds=[]),a){c.push(a);(r===gO.STREAM_TYPE_MAIN?a.mainStream.tracks4Subscribe:a.auxStream.tracks4Subscribe).forEach((e=>{e.trackId&&s&&s.streamIds.push(e.trackId)}))}return c.push(...this.getOtherRemoteUserPublishInfos([e],t)),this.logger.info(SD,"subscribeStream success, ".concat(this.getTracksUpdateInfosString(c))),c}subscribeSingleStream(e,t,r,i,n){var o,s;let a=arguments.length>5&&void 0!==arguments[5]&&arguments[5],c=arguments.length>6&&void 0!==arguments[6]&&arguments[6];if(!e||!t||!i)return null;const u=this.getUserInfoById(e,t);if(!u)return this.logger.error(SD,"subscribeStream fail, user not exist}"),null;const d=[],l=[],h=[],f=vD.getRemoteTrackInfos(u.mainStream),p=vD.getRemoteTrackInfos(u.auxStream),m=r===gO.STREAM_TYPE_MAIN?f:p,g=null==m?void 0:m.filter((e=>e.isSubscribed));this.updateAudioTrackSubInfo(r,i,c,u,n,d,l,h),this.updateVideoTrackSubInfo(r,i,a,u,d,l,h),this.updateSubscribeOption(e,t,r,i,mD.subscribe);const _={remoteStream:r===gO.STREAM_TYPE_MAIN?null===(o=u.mainStream)||void 0===o?void 0:o.remoteStream:null===(s=u.auxStream)||void 0===s?void 0:s.remoteStream,preTracks:m,curTracks:m,addedTracks:null,updatedTracks:null,removedTracks:null,subscribedTracks:g,tracks4Subscribe:d,tracks4Unsubscribe:l,allSubscribeTracks:h},S=vD.getAnotherStreamUpdateInfo(r,u);return{curUserState:u.userState,preUserState:u.userState,userInfo:u.userInfo,mainStream:r===gO.STREAM_TYPE_MAIN?_:S,auxStream:r===gO.STREAM_TYPE_AUX?_:S}}resubscribeMainStreamAudio(e){const t=this.previousAudioSubscribedUsers.get(e),r=t?Array.from(t.values()):null;if(this.logger.info(SD,"resubscribeMainStreamAudio, preAudioSubscribedUsers: ".concat(r)),!r)return null;const i={video:!1,audio:!0},n=[];r.forEach((t=>{var r,o;const s=this.subscribeSingleStream(t,e,gO.STREAM_TYPE_MAIN,i,_O.USER_SUBSCRIBE_AUDIOPOLICY);(null==s||null===(r=s.mainStream)||void 0===r||null===(o=r.tracks4Subscribe)||void 0===o?void 0:o.length)>0&&n.push(s)}));const o=[];return o.push(...n),o.push(...this.getOtherRemoteUserPublishInfos(r,e)),this.logger.info(SD,"resubscribeMainStreamAudio success, ".concat(this.getTracksUpdateInfosString(o))),n}unsubscribeAllMainStreamAudio(e){const t={video:!1,audio:!0},r=[],i=[];return this.getAllUserInfos(e).forEach((n=>{var o;if(null!==(o=n.mainStream)&&void 0!==o&&o.remoteTrackInfos?Array.from(n.mainStream.remoteTrackInfos.values()).some((e=>e.type===mO.TRACK_TYPE_AUDIO&&e.isSubscribed)):null){i.push(n.userInfo.userId);const o=this.unsubscribeSingleStream(n.userInfo.userId,e,gO.STREAM_TYPE_MAIN,t,_O.TOPN_AUDIOPOLICY);r.push(o)}})),r.push(...this.getOtherRemoteUserPublishInfos(i,e)),this.logger.info(SD,"unsubscribeAllMainStreamAudio success, ".concat(this.getTracksUpdateInfosString(r))),r}updateAudioTrackSubInfo(e,t,r,i,n,o,s,a){if(!i)return;const c=vD.getRemoteTrackInfos(i.mainStream),u=vD.getRemoteTrackInfos(i.auxStream),d=e===gO.STREAM_TYPE_MAIN?c:u,l=null==d?void 0:d.find((e=>e.type===mO.TRACK_TYPE_AUDIO));if(!l)return void this.logger.info(SD,"updateAudioTrackSubInfo: ".concat(e,", no audio track exist"));const h=l.isSubscribed?l:null;if(t.audio&&!l.isSubscribed){n===_O.USER_SUBSCRIBE_AUDIOPOLICY?(l.isSubscribed=!0,l.cssrc=this.allocateAudioReceiveSsrc(i.userInfo.roomId),o.push(l)):this.logger.warn(SD,"updateAudioTrackSubInfo, not common audio mode, but audio option is true, reserve it");const e=this.previousAudioSubscribedUsers.get(i.userInfo.roomId);null==e||e.set(i.userInfo.userId,i.userInfo.userId)}if((h||!h&&o.some((e=>e.type===mO.TRACK_TYPE_AUDIO)))&&a.push(l),r&&!t.audio&&h){l.isSubscribed=!1,s.push(l);const e=this.previousAudioSubscribedUsers.get(i.userInfo.roomId);null==e||e.delete(i.userInfo.userId)}}updateVideoTrackSubInfo(e,t,r,i,n,o,s){const a=vD.getRemoteTrackInfos(i.mainStream),c=vD.getRemoteTrackInfos(i.auxStream),u=e===gO.STREAM_TYPE_MAIN?a:c,d=null==u?void 0:u.filter((e=>e.type===mO.TRACK_TYPE_VIDEO));if(!d||0===d.length)return;const l=[];d.filter((e=>e.isSubscribed)).forEach((e=>{l.push(e)}));const h=[];if(t.video)if(t.resolutionIds)t.resolutionIds.forEach((t=>{const r=i.userInfo.userId===wC?gD[t].streamUid.toString():t,o=d.find((e=>e.trackId.toString()===r));o&&(h.push(o),l.some((e=>e.trackId.toString()===r))||(o.isSubscribed=!0,o.cssrc=this.allocateVideoReceiveSsrc(i.userInfo.roomId,e),n.push(o)))}));else{const t=this.getMaxResolutionTrack(d).trackId,r=t&&d.find((e=>e.trackId===t));r&&(h.push(r),l.some((e=>e.trackId===t))||(r.isSubscribed=!0,r.cssrc=this.allocateVideoReceiveSsrc(i.userInfo.roomId,e),n.push(r)))}const f=n.filter((e=>e.type===mO.TRACK_TYPE_VIDEO));f.forEach((e=>{e.autoAdjustResolution=t.autoAdjustResolution||DC.ON,e.minResolution=t.minResolution||"LD"})),s.push(...f),r?l.forEach((e=>{h.some((t=>t.trackId===e.trackId))?s.push(e):(e.isSubscribed=!1,o.push(e))})):s.push(...l)}unAllocateReceiveSsrc(e,t,r,i){r!==mO.TRACK_TYPE_AUDIO?this.unAllocateVideoReceiveSsrc(e,t,i):this.unAllocateAudioReceiveSsrc(e,i)}recoverReceiveSsrc(e,t,r,i){r!==mO.TRACK_TYPE_AUDIO?this.recoverVideoReceiveSsrc(e,t,i):this.recoverAudioReceiveSsrc(e,i)}unAllocateAudioReceiveSsrc(e,t){const r=this.roomSsrc.get(e);if(!r)throw this.logger.error(SD,"no roomId exist"),new qc(Gc.RTC_ERR_CODE_INVALID_PARAMETER);const i=r.audioReceiveSsrcs.indexOf(t);-1===i&&this.logger.error(SD,"unAllocateAudioReceiveSsrc error, ".concat(t," not allocated")),r.audioReceiveSsrcs.splice(i,1),this.logger.info(SD,"unAllocateAudioReceiveSsrc success, ".concat(t))}recoverAudioReceiveSsrc(e,t){const r=this.roomSsrc.get(e);if(!r)throw this.logger.error(SD,"no roomId exist"),new qc(Gc.RTC_ERR_CODE_INVALID_PARAMETER);-1===r.audioReceiveSsrcs.indexOf(t)&&r.audioReceiveSsrcs.push(t),this.logger.info(SD,"recoverAudioReceiveSsrc success, ".concat(t))}unAllocateVideoReceiveSsrc(e,t,r){const i=this.roomSsrc.get(e);if(!i)throw this.logger.error(SD,"no roomId exist"),new qc(Gc.RTC_ERR_CODE_INVALID_PARAMETER);const n=i.videoReceiveSsrcs.indexOf(r);-1!==n?(i.videoReceiveSsrcs.splice(n,1),this.logger.info(SD,"unAllocateVideoReceiveSsrc success, ".concat(t,", ").concat(r))):this.logger.error(SD,"unAllocateVideoReceiveSsrc error, ".concat(t,", ").concat(r," not allocated"))}recoverVideoReceiveSsrc(e,t,r){const i=this.roomSsrc.get(e);if(!i)throw this.logger.error(SD,"no roomId exist"),new qc(Gc.RTC_ERR_CODE_INVALID_PARAMETER);-1===i.videoReceiveSsrcs.indexOf(r)&&i.videoReceiveSsrcs.push(r),this.logger.info(SD,"recoverVideoReceiveSsrc success, ".concat(t,", ").concat(r))}allocateAudioReceiveSsrc(e){const t=this.roomSsrc.get(e);if(!t)throw this.logger.error(SD,"no roomId exist"),new qc(Gc.RTC_ERR_CODE_INVALID_PARAMETER);if(!this.audioCssrcs||0===this.audioCssrcs.length)throw this.logger.error(SD,"audio ssrc not found"),new qc(Gc.RTC_ERR_CODE_RTC_SDK_ERROR);for(const r of this.audioCssrcs)if(!t.audioReceiveSsrcs.includes(r))return t.audioReceiveSsrcs.push(r),this.logger.info(SD,"allocateAudioReceiveSsrc success, ".concat(r)),r;throw this.logger.error(SD,"have no available audio receive ssrc"),new qc(Gc.RTC_ERR_CODE_INVALID_PARAMETER)}allocateVideoReceiveSsrc(e,t){const r=this.roomSsrc.get(e);if(!r)throw this.logger.error(SD,"no roomId exist"),new qc(Gc.RTC_ERR_CODE_INVALID_PARAMETER);return t===gO.STREAM_TYPE_AUX?this.doAllocateVideoReceiveSsrc(this.auxVideoCssrcs,r.videoReceiveSsrcs):this.doAllocateVideoReceiveSsrc(this.mainVideoCssrcs,r.videoReceiveSsrcs)}doAllocateVideoReceiveSsrc(e,t){if(!e||0===e.length)throw this.logger.error(SD,"video ssrc not found"),new qc(Gc.RTC_ERR_CODE_RTC_SDK_ERROR);for(const r of e)if(!t.includes(r))return t.push(r),this.logger.info(SD,"allocateVideoReceiveSsrc success, ".concat(r)),r;throw this.logger.error(SD,"have no available video receive ssrc"),new qc(Gc.RTC_ERR_CODE_INVALID_PARAMETER)}unsubscribeStream(e,t,r,i){const n=this.unsubscribeSingleStream(e,t,r,i,_O.USER_SUBSCRIBE_AUDIOPOLICY);this.updateSubscribeOption(e,t,r,i,mD.unsubscribe);const o=[];return n&&o.push(n),o.push(...this.getOtherRemoteUserPublishInfos([e],t)),this.logger.info(SD,"unsubscribeStream success, ".concat(this.getTracksUpdateInfosString(o))),o}updateSubscribeOption(e,t,r,i,n){if(!i)throw this.logger.error(SD,"updateSubscribeOption fail, trackOption is null}"),new qc(Gc.RTC_ERR_CODE_INVALID_PARAMETER);const o=this.getUserInfoById(e,t),s=r===gO.STREAM_TYPE_MAIN?o.mainStream:o.auxStream;n===mD.subscribe?s.subscribeOption=this.getFullSubscribeOptions(s,i):(i.audio&&(s.subscribeOption.audio=!1),i.video&&(i.resolutionIds?i.resolutionIds.forEach((e=>{var t,r;const i=null===(t=s.subscribeOption)||void 0===t||null===(r=t.resolutions)||void 0===r?void 0:r.map((e=>e.resolutionId)).indexOf(e);i>-1&&s.subscribeOption.resolutions.splice(i,1)})):(s.subscribeOption.video=!1,s.subscribeOption.resolutions=null)))}getFullSubscribeOptions(e,t){if(!t)throw this.logger.error(SD,"trackOption is null"),new qc(Gc.RTC_ERR_CODE_INVALID_PARAMETER);const r=[],i={};if(t.video)if(t.resolutionIds)t.resolutionIds.forEach((t=>{vD.appendResolutions(e,t,r)}));else{const t=this.getMaxResolutionTrackId(e);vD.appendResolutions(e,t,r)}if(t.audio){const t=Array.from(e.remoteTrackInfos.values()).find((e=>e.type===mO.TRACK_TYPE_AUDIO));null!=t&&t.playElement&&(i.playElement=t.playElement,i.objectFit=t.objectFit,i.muted=t.muted)}return{audio:t.audio,video:t.video,resolutions:r,audioPlayInfo:i,autoAdjustResolution:t.autoAdjustResolution,minResolution:t.minResolution}}static appendResolutions(e,t,r){const i=e.remoteTrackInfos.get(t);if(i){const e={resolutionId:t,width:i.width,height:i.height};i.playElement&&(e.playElement=i.playElement,e.objectFit=i.objectFit,e.muted=i.muted),r.push(e)}}getRemoteUserInfoById(e,t){if(!e||!t)return null;const r=this.getUserInfoById(e,t);return r||(this.logger.error(SD,"unsubscribeSingleStream fail, user not exist}"),null)}unsubscribeSingleStream(e,t,r,i,n){var o,s;const a=this.getRemoteUserInfoById(e,t);if(null===a)return null;const c=vD.getRemoteTrackInfos(a.mainStream),u=vD.getRemoteTrackInfos(a.auxStream),d=r===gO.STREAM_TYPE_MAIN?c:u;if(!d||0===d.length)return this.logger.warn(SD,"unsubscribeSingleStream, no track exist ".concat(e)),null;const l=d.filter((e=>e.isSubscribed)),h=[];if(i.audio){const r=d.find((e=>e.type===mO.TRACK_TYPE_AUDIO&&e.isSubscribed));if(r&&(r.isSubscribed=!1,h.push(r),n===_O.USER_SUBSCRIBE_AUDIOPOLICY)){const r=this.previousAudioSubscribedUsers.get(t);null==r||r.delete(e)}}i.video&&this.unsubscribeVideo(i,l,h,e,d);const f={remoteStream:r===gO.STREAM_TYPE_MAIN?null===(o=a.mainStream)||void 0===o?void 0:o.remoteStream:null===(s=a.auxStream)||void 0===s?void 0:s.remoteStream,preTracks:d,curTracks:d,addedTracks:null,updatedTracks:null,removedTracks:null,subscribedTracks:l,tracks4Subscribe:null,tracks4Unsubscribe:h,allSubscribeTracks:Array.from(d.values()).filter((e=>e.isSubscribed))},p=vD.getAnotherStreamUpdateInfo(r,a);return{preUserState:a.userState,curUserState:a.userState,userInfo:a.userInfo,mainStream:r===gO.STREAM_TYPE_MAIN?f:p,auxStream:r===gO.STREAM_TYPE_AUX?f:p}}unsubscribeVideo(e,t,r,i,n){if(e.resolutionIds)e.resolutionIds.forEach((e=>{const t=i===wC?gD[e].streamUid.toString():e,o=null==n?void 0:n.find((e=>e.trackId.toString()===t&&e.isSubscribed));o&&(o.isSubscribed=!1,r.push(o))}));else{const e=null==t?void 0:t.filter((e=>e.type==mO.TRACK_TYPE_VIDEO));null==e||e.forEach((e=>{e.isSubscribed=!1,r.push(e)}))}}updateUserName(e,t,r){const i=this.getUserInfoById(e,t);i?(i.userInfo.nickname=r,this.logger.info(SD,"updateUserName success, userId: ".concat(e,", nickName: ").concat(r))):this.logger.error(SD,"updateUserName fail, user not exist}")}isRemoteUserSubscribed(e,t){var r,i;const n=this.getUserInfoById(e,t);if(!n)return this.logger.info(SD,"isRemoteUserSubscribed, user not exist}"),!1;const o=!(null===(r=n.mainStream)||void 0===r||!r.remoteTrackInfos)&&Array.from(n.mainStream.remoteTrackInfos.values()).filter((e=>e.isSubscribed)).length>0,s=!(null===(i=n.auxStream)||void 0===i||!i.remoteTrackInfos)&&Array.from(n.auxStream.remoteTrackInfos.values()).filter((e=>e.isSubscribed)).length>0;return o||s}getUserInfoByStreamId(e,t){return this.getAllUserInfos(e).find((e=>{var r,i;return(null===(r=e.mainStream)||void 0===r?void 0:r.remoteTrackInfos.has(t))||(null===(i=e.auxStream)||void 0===i?void 0:i.remoteTrackInfos.has(t))}))}getAllUserInfos(e){return Array.from(this.remoteUserInfos.values()).filter((t=>t.userInfo.roomId===e))}getAllSubscribedUpdateInfos4Unsubscribe(e){return this.getAllUserInfos(e).map((e=>{const t=vD.getRemoteTrackInfos(e.mainStream).filter((e=>e.isSubscribed));t.forEach((e=>{e.isSubscribed=!1}));const r=vD.getRemoteTrackInfos(e.auxStream).filter((e=>e.isSubscribed));return r.forEach((e=>{e.isSubscribed=!1})),{userInfo:e.userInfo,preUserState:e.userState,curUserState:e.userState,mainStream:{remoteStream:e.mainStream.remoteStream,tracks4Unsubscribe:t,allSubscribeTracks:[]},auxStream:{remoteStream:e.auxStream.remoteStream,tracks4Unsubscribe:r,allSubscribeTracks:[]}}}))}initializeRemoteUser(e,t){if(!e)throw new qc(Gc.RTC_ERR_CODE_INVALID_PARAMETER);const r={userInfo:e,userState:t?IO.Joined:IO.NotJoin,mainStream:null,auxStream:null},i=vD.generateUniqueId(e.userId,e.roomId);return this.remoteUserInfos.set(i,r),this.roomSsrc.has(e.roomId)||this.roomSsrc.set(e.roomId,{audioReceiveSsrcs:[],videoReceiveSsrcs:[]}),this.logger.info(SD,"initializeRemoteUser success, userInfo: ".concat(JSON.stringify(e))),r}updateRemoteUser(e){if(!e)throw new qc(Gc.RTC_ERR_CODE_INVALID_PARAMETER);const t=this.getUserInfoById(e.userId,e.roomId);return t?(e.nickname=e.nickname||t.userInfo.nickname,t.userInfo=e,this.logger.info(SD,"updateRemoteUser success, userInfo: ".concat(JSON.stringify(e))),t):null}initializeRemoteStream(e,t,r){const i=e===gO.STREAM_TYPE_MAIN?"main":"auxiliary",n=new rM({type:i,log:this.logger,userId:t,client:this.client,roomId:r}),o={remoteTrackInfos:new Map,remoteStream:n,subscribeOption:{audio:!1,video:!1}};if(!this.previousAudioSubscribedUsers.has(r)){const e=new Map;this.previousAudioSubscribedUsers.set(r,e)}return this.logger.info(SD,"initializeStreamInfo success, userId: ".concat(t,", type: ").concat(o.remoteStream.getType())),o}refreshRemoteStreamList(e,t,r){const i=null==t?void 0:t.filter((e=>e.content!==CC.desktop)),n=null==t?void 0:t.filter((e=>e.content===CC.desktop)),o=this.getUserInfoById(e.userId,e.roomId),s=this.doRefreshRemoteStreamList(e,gO.STREAM_TYPE_MAIN,i,r,!1),a=this.doRefreshRemoteStreamList(e,gO.STREAM_TYPE_AUX,n,null,!1),c=this.getUserInfoById(e.userId,e.roomId);return this.getAllPublishInfosWhenStreamUpdate(!o,s,a,c)}doRefreshRemoteStreamList(e,t,r,i,n){if(this.logger.info(SD,"doRefreshRemoteStreamList begin, streamType:".concat(t,",isLocalRejoin:").concat(n,",")+"userInfo: ".concat(JSON.stringify(e),", allVideoStreams: ").concat(JSON.stringify(r),", allAudioStreams: ").concat(JSON.stringify(i))),e.userId===this.localUserId)return null;const o=this.getUserInfoById(e.userId,e.roomId);e.relaySrcRoomId=e.relaySrcRoomId||(null==o?void 0:o.userInfo.relaySrcRoomId);const s=o?this.updateRemoteUser(e):this.initializeRemoteUser(e,!0),a=this.getStreamInfoByStreamType(t,s,e),c=vD.getRemoteTrackInfos(a),u=null==c?void 0:c.filter((e=>e.isSubscribed)),d=a.remoteTrackInfos,l=[],h=[],f=[];null==c||c.forEach((e=>{this.isPreTrackInvalid(r,i,e,n)&&(n&&e.isSubscribed&&(e.state=TO.localRejoin),f.push(e),d.delete(e.trackId))})),this.refreshTracks(r,i,c,d,n,l,h,f),this.cachePlayInfo(e,t,r,i,f);const p=this.getTracks4Subscribe(e,t,a.remoteStream,l,f),m=this.getTracks4UnSubscribe(f),g=Array.from(a.remoteTrackInfos.values());return this.updateRemoteStreamTracks(g,a.remoteStream),{remoteStream:a.remoteStream,preTracks:c,curTracks:g,addedTracks:l,updatedTracks:h,removedTracks:f,subscribedTracks:u,tracks4Subscribe:p,tracks4Unsubscribe:m,allSubscribeTracks:null==g?void 0:g.filter((e=>e.isSubscribed))}}refreshTracks(e,t,r,i,n,o,s,a){(null!=e&&e.length||null!=t&&t.length)&&(null==r||r.forEach((e=>{e.state===TO.remoteRejoinCache&&(a.push(e),i.delete(e.trackId))}))),this.refreshVideoStreamTracks(e,r,i,n,o,s),this.refreshAudioStreamTracks(t,r,i,n,o,s)}refreshVideoStreamTracks(e,t,r,i,n,o){null==e||e.forEach((e=>{const s=null==t?void 0:t.find((t=>t.trackId===e.streamUid.toString()));if(s){const t=vD.generateUpdateVideoTrack(e,s);r.set(e.streamUid.toString(),t),s.state===TO.remoteRejoinCache||i?(t.isSubscribed=!1,t.isTrackReady=!1,n.push(t)):vD.isSameResolution(s,e)&&!vD.isMuteStatusChange(s,e)||o.push(s)}else{const t=vD.generateNewVideoTrack(e);r.set(e.streamUid.toString(),t),n.push(t)}}))}refreshAudioStreamTracks(e,t,r,i,n,o){null==e||e.forEach((e=>{if("main"===(null==e?void 0:e.content)){const s=null==t?void 0:t.find((t=>t.trackId===e.streamUid.toString()));if(s){const t=vD.generateUpdateAudioTrack(e,s);r.set(e.streamUid.toString(),t),s.state===TO.remoteRejoinCache||i?(t.isSubscribed=!1,t.isTrackReady=!1,n.push(t)):vD.isMuteStatusChange(s,e)&&o.push(s)}else{const t=vD.generateNewAudioTrack(e);r.set(e.streamUid.toString(),t),n.push(t)}}}))}remoteUserReconnect(e){if(!e)return;const t=this.getUserInfoById(e.userId,e.roomId);if(!t)return this.logger.error(SD,"remoteUserReconnect, user not exist"),null;this.isRemoteUserSubscribed(e.userId,e.roomId)&&this.cacheHistorySubscription(t),t.userState=IO.Rejoining,this.logger.info(SD,"remoteUserReconnect, update user state to rejoining")}cacheHistorySubscription(e){if(!e)return null;const t=this.getSubscribedTracksInfo(e.userInfo.userId,e.userInfo.roomId,gO.STREAM_TYPE_MAIN),r=this.getSubscribedTracksInfo(e.userInfo.userId,e.userInfo.roomId,gO.STREAM_TYPE_AUX);null==t||t.forEach((e=>{e.state=TO.remoteRejoinCache})),null==r||r.forEach((e=>{e.state=TO.remoteRejoinCache}))}getSubscribedTracksInfo(e,t,r){var i,n;const o=this.getUserInfoById(e,t);if(!o)return this.logger.error(SD,"getSubscribedMainTracksInfo, user not exist}"),null;const s=r===gO.STREAM_TYPE_MAIN?null===(i=o.mainStream)||void 0===i?void 0:i.remoteTrackInfos:null===(n=o.auxStream)||void 0===n?void 0:n.remoteTrackInfos;return s&&Array.from(s.values()).filter((e=>e.isSubscribed))}getStreamInfoByStreamType(e,t,r){if(!(e===gO.STREAM_TYPE_MAIN?t.mainStream:t.auxStream)){const i=this.initializeRemoteStream(e,r.userId,r.roomId);e===gO.STREAM_TYPE_MAIN?t.mainStream=i:t.auxStream=i}return e===gO.STREAM_TYPE_MAIN?t.mainStream:t.auxStream}static generateNewVideoTrack(e){return{pt:e.pt,content:e.content,streamType:e.content===CC.desktop?gO.STREAM_TYPE_AUX:gO.STREAM_TYPE_MAIN,trackId:e.streamUid.toString(),isSubscribed:!1,isTrackReady:!1,pssrc:e.ssrc,cssrc:0,type:mO.TRACK_TYPE_VIDEO,width:e.width,height:e.height,state:TO.normal,mute:e.mute,maxFs:e.maxFs,fps:e.fps}}static generateNewAudioTrack(e){return{pt:e.pt,content:e.content,streamType:e.content===CC.desktop?gO.STREAM_TYPE_AUX:gO.STREAM_TYPE_MAIN,trackId:e.streamUid.toString(),isSubscribed:!1,isTrackReady:!1,pssrc:e.ssrc,cssrc:0,type:mO.TRACK_TYPE_AUDIO,state:TO.normal,mute:e.mute}}static generateUpdateVideoTrack(e,t){return{pt:e.pt,content:e.content,streamType:e.content===CC.desktop?gO.STREAM_TYPE_AUX:gO.STREAM_TYPE_MAIN,trackId:e.streamUid.toString(),isSubscribed:t.isSubscribed,isTrackReady:t.isTrackReady,pssrc:t.pssrc,cssrc:t.cssrc,type:mO.TRACK_TYPE_VIDEO,width:e.width,height:e.height,state:t.state,mute:e.mute}}static generateUpdateAudioTrack(e,t){return{pt:e.pt,content:e.content,streamType:e.content===CC.desktop?gO.STREAM_TYPE_AUX:gO.STREAM_TYPE_MAIN,trackId:e.streamUid.toString(),isSubscribed:t.isSubscribed,isTrackReady:t.isTrackReady,pssrc:t.pssrc,cssrc:t.cssrc,type:mO.TRACK_TYPE_AUDIO,state:t.state,mute:e.mute}}updateRemoteStream(e,t,r){const i=null==t?void 0:t.filter((e=>e.content!==CC.desktop)),n=null==t?void 0:t.filter((e=>e.content===CC.desktop)),o=this.doUpdateRemoteStream(e,gO.STREAM_TYPE_MAIN,i,r),s=this.doUpdateRemoteStream(e,gO.STREAM_TYPE_AUX,n,null),a=this.getUserInfoById(e.userId,e.roomId);return{userInfo:a.userInfo,preUserState:a.userState,curUserState:a.userState,isUserNameChanged:null,mainStream:o,auxStream:s}}doUpdateRemoteStream(e,t,r,i){this.logger.info(SD,"updateRemoteStreamInfo begin, streamType:".concat(t)+"userInfo: ".concat(JSON.stringify(e),", videoStreams: ").concat(JSON.stringify(r),", audioStreams: ").concat(JSON.stringify(i),","));if(!this.getUserInfoById(e.userId,e.roomId))return this.logger.error(SD,"updateRemoteStream, user not exist"),null;const n=this.getUserInfoById(e.userId,e.roomId),o=this.getStreamInfoByStreamType(t,n,e),s=vD.getRemoteTrackInfos(o),a=null==s?void 0:s.filter((e=>e.isSubscribed)),c=o.remoteTrackInfos,u=[];null==r||r.forEach((e=>{const t=null==s?void 0:s.find((t=>t.trackId===e.streamUid.toString()));if(t&&(!vD.isSameResolution(t,e)||vD.isMuteStatusChange(t,e))){const r=vD.generateUpdateVideoTrack(e,t);c.set(e.streamUid.toString(),r),u.push(t)}})),null==i||i.forEach((e=>{const t=null==s?void 0:s.find((t=>t.trackId===e.streamUid.toString()));if(t&&vD.isMuteStatusChange(t,e)){const r=vD.generateUpdateAudioTrack(e,t);c.set(e.streamUid.toString(),r),u.push(t)}}));const d=Array.from(o.remoteTrackInfos.values());return this.updateRemoteStreamTracks(d,o.remoteStream),{remoteStream:o.remoteStream,preTracks:s,curTracks:d,addedTracks:[],updatedTracks:u,removedTracks:[],subscribedTracks:a,tracks4Subscribe:[],tracks4Unsubscribe:[],allSubscribeTracks:null==d?void 0:d.filter((e=>e.isSubscribed))}}getAllPublishInfosWhenStreamUpdate(e,t,r,i){const n={userInfo:i.userInfo,preUserState:e?IO.NotJoin:i.userState,curUserState:i.userState,isUserNameChanged:null,mainStream:t,auxStream:r},o=[];return o.push(n),o.push(...this.getOtherRemoteUserPublishInfos([i.userInfo.userId],i.userInfo.roomId)),this.logger.info(SD,"updateRemoteStreamInfo success, ".concat(this.getTracksUpdateInfosString(o))),o}getOtherRemoteUserPublishInfos(e,t){const r=[];return this.getAllUserInfos(t).forEach((t=>{if(!e.includes(t.userInfo.userId)){var i,n,o,s,a,c;const e=null!==(i=t.mainStream)&&void 0!==i&&null!==(n=i.remoteTrackInfos)&&void 0!==n&&n.size?Array.from(t.mainStream.remoteTrackInfos.values()).filter((e=>e.isSubscribed)):null,u=null!==(o=t.auxStream)&&void 0!==o&&null!==(s=o.remoteTrackInfos)&&void 0!==s&&s.size?Array.from(t.auxStream.remoteTrackInfos.values()).filter((e=>e.isSubscribed)):null,d={userInfo:t.userInfo,curUserState:t.userState,preUserState:t.userState,mainStream:{remoteStream:null===(a=t.mainStream)||void 0===a?void 0:a.remoteStream,allSubscribeTracks:e},auxStream:{remoteStream:null===(c=t.auxStream)||void 0===c?void 0:c.remoteStream,allSubscribeTracks:u}};r.push(d)}})),r}static getAnotherStreamUpdateInfo(e,t){const r=e===gO.STREAM_TYPE_MAIN?t.auxStream:t.mainStream,i=vD.getRemoteTrackInfos(r),n=i?i.filter((e=>e.isSubscribed)):null;return{remoteStream:null==r?void 0:r.remoteStream,preTracks:i,curTracks:i,addedTracks:null,updatedTracks:null,removedTracks:null,subscribedTracks:n?[...n]:null,tracks4Subscribe:null,tracks4Unsubscribe:null,allSubscribeTracks:n?[...n]:null}}getTracksUpdateInfosString(e){if(!e)return"";let t="";return e.forEach((e=>{t=t+vD.getTracksUpdateInfoString(e)+" "})),t}static getTracksUpdateInfoString(e){var t,r,i,n,o,s,a,c,u,d,l,h,f,p,m,g,_,S,v,y,I,T,R,E,b,C,A,w,k,O,P,M,D,N,U,x,L,B,V,Y,j,F,H,K,z,W,G,J,q,X,Q,$,Z,ee;return e?"userId:".concat(e.userInfo.userId,", preUserState: ").concat(e.preUserState,",curUserState: ").concat(e.curUserState,",")+"main stream:"+"".concat(null!==(t=e.mainStream)&&void 0!==t&&null!==(r=t.preTracks)&&void 0!==r&&r.length?"preTracks:"+JSON.stringify(null===(i=e.mainStream)||void 0===i?void 0:i.preTracks)+",":"")+"".concat(null!==(n=e.mainStream)&&void 0!==n&&null!==(o=n.curTracks)&&void 0!==o&&o.length?"curTracks:"+JSON.stringify(null===(s=e.mainStream)||void 0===s?void 0:s.curTracks)+",":"")+"".concat(null!==(a=e.mainStream)&&void 0!==a&&null!==(c=a.addedTracks)&&void 0!==c&&c.length?"addedTracks:"+JSON.stringify(null===(u=e.mainStream)||void 0===u?void 0:u.addedTracks)+",":"")+"".concat(null!==(d=e.mainStream)&&void 0!==d&&null!==(l=d.updatedTracks)&&void 0!==l&&l.length?"updatedTracks:"+JSON.stringify(null===(h=e.mainStream)||void 0===h?void 0:h.updatedTracks)+",":"")+"".concat(null!==(f=e.mainStream)&&void 0!==f&&null!==(p=f.removedTracks)&&void 0!==p&&p.length?"removedTracks:"+JSON.stringify(null===(m=e.mainStream)||void 0===m?void 0:m.removedTracks)+",":"")+"".concat(null!==(g=e.mainStream)&&void 0!==g&&null!==(_=g.subscribedTracks)&&void 0!==_&&_.length?"subscribedTracks:"+JSON.stringify(null===(S=e.mainStream)||void 0===S?void 0:S.subscribedTracks)+",":"")+"".concat(null!==(v=e.mainStream)&&void 0!==v&&null!==(y=v.tracks4Subscribe)&&void 0!==y&&y.length?"tracks4Subscribe:"+JSON.stringify(null===(I=e.mainStream)||void 0===I?void 0:I.tracks4Subscribe)+",":"")+"".concat(null!==(T=e.mainStream)&&void 0!==T&&null!==(R=T.tracks4Unsubscribe)&&void 0!==R&&R.length?"tracks4Unsubscribe:"+JSON.stringify(null===(E=e.mainStream)||void 0===E?void 0:E.tracks4Unsubscribe)+",":"")+"".concat(null!==(b=e.mainStream)&&void 0!==b&&null!==(C=b.allSubscribeTracks)&&void 0!==C&&C.length?"allSubscribeTracks:"+JSON.stringify(null===(A=e.mainStream)||void 0===A?void 0:A.allSubscribeTracks)+",":"")+"aux stream:"+"".concat(null!==(w=e.auxStream)&&void 0!==w&&null!==(k=w.preTracks)&&void 0!==k&&k.length?"preTracks:"+JSON.stringify(null===(O=e.auxStream)||void 0===O?void 0:O.preTracks)+",":"")+"".concat(null!==(P=e.auxStream)&&void 0!==P&&null!==(M=P.curTracks)&&void 0!==M&&M.length?"curTracks:"+JSON.stringify(null===(D=e.auxStream)||void 0===D?void 0:D.curTracks)+",":"")+"".concat(null!==(N=e.auxStream)&&void 0!==N&&null!==(U=N.addedTracks)&&void 0!==U&&U.length?"addedTracks:"+JSON.stringify(null===(x=e.auxStream)||void 0===x?void 0:x.addedTracks)+",":"")+"".concat(null!==(L=e.auxStream)&&void 0!==L&&null!==(B=L.updatedTracks)&&void 0!==B&&B.length?"updatedTracks:"+JSON.stringify(null===(V=e.auxStream)||void 0===V?void 0:V.updatedTracks)+",":"")+"".concat(null!==(Y=e.auxStream)&&void 0!==Y&&null!==(j=Y.removedTracks)&&void 0!==j&&j.length?"removedTracks:"+JSON.stringify(null===(F=e.auxStream)||void 0===F?void 0:F.removedTracks)+",":"")+"".concat(null!==(H=e.auxStream)&&void 0!==H&&null!==(K=H.subscribedTracks)&&void 0!==K&&K.length?"subscribedTracks:"+JSON.stringify(null===(z=e.auxStream)||void 0===z?void 0:z.subscribedTracks)+",":"")+"".concat(null!==(W=e.auxStream)&&void 0!==W&&null!==(G=W.tracks4Subscribe)&&void 0!==G&&G.length?"tracks4Subscribe:"+JSON.stringify(null===(J=e.auxStream)||void 0===J?void 0:J.tracks4Subscribe)+",":"")+"".concat(null!==(q=e.auxStream)&&void 0!==q&&null!==(X=q.tracks4Unsubscribe)&&void 0!==X&&X.length?"tracks4Unsubscribe:"+JSON.stringify(null===(Q=e.auxStream)||void 0===Q?void 0:Q.tracks4Unsubscribe)+",":"")+"".concat(null!==($=e.auxStream)&&void 0!==$&&null!==(Z=$.allSubscribeTracks)&&void 0!==Z&&Z.length?"allSubscribeTracks:"+JSON.stringify(null===(ee=e.auxStream)||void 0===ee?void 0:ee.allSubscribeTracks):""):""}updateRemoteStreamTracks(e,t){if(!t)throw new qc(Gc.RTC_ERR_CODE_INVALID_PARAMETER);if(!e)return void this.logger.error(SD,"updateRemoteStreamTracks , curAllTracks is null");const r=new Map;e.filter((e=>e.type===mO.TRACK_TYPE_VIDEO)).forEach((e=>{r.set(e.trackId.toString(),{streamId:e.trackId.toString(),width:e.width,height:e.height})}));const i=e.some((e=>e.type===mO.TRACK_TYPE_AUDIO)),n=t.isAuxiliary()?gO.STREAM_TYPE_AUX:gO.STREAM_TYPE_MAIN;t.updateRemoteResolutions(n,[...r.values()],i)}isPreTrackInvalid(e,t,r,i){return!!i||r.state!==TO.remoteRejoinCache&&(r.type===mO.TRACK_TYPE_VIDEO&&this.isPreVideoTrackRemoved(e,r)||r.type===mO.TRACK_TYPE_AUDIO&&this.isPreAudioTrackRemoved(t,r))}isPreVideoTrackRemoved(e,t){return!(null!=e&&e.some((e=>e.streamUid.toString()===t.trackId)))}isPreAudioTrackRemoved(e,t){return!(null!=e&&e.some((e=>e.streamUid.toString()===t.trackId)))}static isSameResolution(e,t){if(!e||!t)throw new qc(Gc.RTC_ERR_CODE_INVALID_PARAMETER);return e.height===t.height&&e.width===t.width}static isMuteStatusChange(e,t){if(!e||!t)throw new qc(Gc.RTC_ERR_CODE_INVALID_PARAMETER);return e.mute!==t.mute}clear(e){if(e){for(const o of this.remoteUserInfos.keys())if(o.indexOf("#".concat(e))>0){var t,r,i,n;const e=this.remoteUserInfos.get(o);null===(t=e.mainStream)||void 0===t||null===(r=t.remoteStream)||void 0===r||r.close(),null===(i=e.auxStream)||void 0===i||null===(n=i.remoteStream)||void 0===n||n.close(),this.remoteUserInfos.delete(o)}this.roomSsrc.delete(e),this.previousAudioSubscribedUsers.delete(e)}}static generateUniqueId(e,t){if(!e)throw new qc(Gc.RTC_ERR_CODE_INVALID_PARAMETER);return"".concat(e,"#").concat(t)}}function yD(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,i)}return r}const ID=[200,201,204];const TD=new class{setLogServerConfigs(e){this.logServerConfigs=function(e){for(var t=1;tvA)throw this.logger.error(RD,"relayClients size over maxium: ".concat(vA)),new qc(Gc.RTC_ERR_CODE_CLIENT_RELAY_ROOM_OVER_MAXNUM);if(this.find(e.clientSymbol,t))throw this.logger.error(RD,"addRelayConnection:".concat(t," already exist")),new qc(Gc.RTC_ERR_CODE_INVALID_OPERATION,"addRelayConnection:".concat(t," already exist"));return new AN(e.clientConfig,e.clientSymbol)}getRelayConnection(e,t){return this.find(e.clientSymbol,t)}stopRelayConnection(e,t){e.mainRelayRoomSymbol?(this.find(e.mainRelayRoomSymbol,t)||this.logger.error(RD,"stopRelayClient:".concat(t," not exist")),this.remove(e.mainRelayRoomSymbol,t)):t?this.remove(e.clientSymbol,t):this.remove(e.clientSymbol)}roleValidCheck4RelayRoom(e,t){if(t===sM.JOINER){let t=!1;for(const r of this.relayClients.get(e.mainRelayRoomSymbol||e.clientSymbol).values())if(r.userInfo.role===sM.JOINER){t=!0;break}if(t)throw this.logger.error(RD,"only one joiner can include in relayRooms."),new qc(Gc.RTC_ERR_CODE_CLIENT_RELAY_JOINER_OVER_MAXNUM)}}switchRoleParamsCheck(e,t,r){if(t!==sM.JOINER&&t!==sM.PLAYER||null==r||!r.signature||null==r||!r.ctime)throw new qc(Gc.RTC_ERR_CODE_INVALID_PARAMETER);this.roleValidCheck4RelayRoom(e,t)}};var bD=Sn,CD="ArrayBuffer",AD=HS[CD];en({global:!0,constructor:!0,forced:c[CD]!==AD},{ArrayBuffer:AD}),bD(CD);var wD={exports:{}};!function(e,t){e.exports=function(){var e=Math.imul,t=Math.clz32;function r(e){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r(e)}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(e,t){for(var r,i=0;ie.length)&&(t=e.length);for(var r=0,i=Array(t);r=e.length?{done:!0}:{done:!1,value:e[i++]}},e:function(e){throw e},f:n}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,s=!0,a=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return s=e.done,e},e:function(e){a=!0,o=e},f:function(){try{s||null==r.return||r.return()}finally{if(a)throw o}}}}var R=function(e){var t=Math.abs,n=Math.max,a=Math.floor;function c(e,t){var r;if(i(this,c),(r=u.call(this,e)).sign=t,Object.setPrototypeOf(f(r),c.prototype),e>c.__kMaxLength)throw new RangeError("Maximum BigInt size exceeded");return r}s(c,e);var u=m(c);return o(c,[{key:"toDebugString",value:function(){var e,t=["BigInt["],r=T(this);try{for(r.s();!(e=r.n()).done;){var i=e.value;t.push((i?(i>>>0).toString(16):i)+", ")}}catch(e){r.e(e)}finally{r.f()}return t.push("]"),t.join("")}},{key:"toString",value:function(){var e=0e||36this.length&&(r=this.length);for(var i=32767&e,n=e>>>15,o=0,s=t,a=0;a>>15,h=c.__imul(d,i),f=c.__imul(d,n),p=c.__imul(l,i),m=s+h+o;o=m>>>30,m&=1073741823,o+=(m+=((32767&f)<<15)+((32767&p)<<15))>>>30,s=c.__imul(l,n)+(f>>>15)+(p>>>15),this.__setDigit(a,1073741823&m)}if(0!==o||0!==s)throw new Error("implementation bug")}},{key:"__inplaceAdd",value:function(e,t,r){for(var i,n=0,o=0;o>>15,this.__setHalfDigit(t+o,32767&i);return n}},{key:"__inplaceSub",value:function(e,t,r){var i=0;if(1&t){t>>=1;for(var n=this.__digit(t),o=32767&n,s=0;s>>1;s++){var a=e.__digit(s),c=(n>>>15)-(32767&a)-i;i=1&c>>>15,this.__setDigit(t+s,(32767&c)<<15|32767&o),i=1&(o=(32767&(n=this.__digit(t+s+1)))-(a>>>15)-i)>>>15}var u=e.__digit(s),d=(n>>>15)-(32767&u)-i;if(i=1&d>>>15,this.__setDigit(t+s,(32767&d)<<15|32767&o),t+s+1>=this.length)throw new RangeError("out of bounds");0==(1&r)&&(i=1&(o=(32767&(n=this.__digit(t+s+1)))-(u>>>15)-i)>>>15,this.__setDigit(t+e.length,1073709056&n|32767&o))}else{t>>=1;for(var l=0;l>>15)-(f>>>15)-(i=1&p>>>15);i=1&m>>>15,this.__setDigit(t+l,(32767&m)<<15|32767&p)}var g=this.__digit(t+l),_=e.__digit(l),S=(32767&g)-(32767&_)-i;i=1&S>>>15;var v=0;0==(1&r)&&(i=1&(v=(g>>>15)-(_>>>15)-i)>>>15),this.__setDigit(t+l,(32767&v)<<15|32767&S)}return i}},{key:"__inplaceRightShift",value:function(e){if(0!==e){for(var t,r=this.__digit(0)>>>e,i=this.length-1,n=0;n>>e;this.__setDigit(i,r)}}},{key:"__digit",value:function(e){return this[e]}},{key:"__unsignedDigit",value:function(e){return this[e]>>>0}},{key:"__setDigit",value:function(e,t){this[e]=0|t}},{key:"__setDigitGrow",value:function(e,t){this[e]=0|t}},{key:"__halfDigitLength",value:function(){var e=this.length;return 32767>=this.__unsignedDigit(e-1)?2*e-1:2*e}},{key:"__halfDigit",value:function(e){return 32767&this[e>>>1]>>>15*(1&e)}},{key:"__setHalfDigit",value:function(e,t){var r=e>>>1,i=this.__digit(r),n=1&e?32767&i|t<<15:1073709056&i|32767&t;this.__setDigit(r,n)}}],[{key:"BigInt",value:function(e){var t=Number.isFinite;if("number"==typeof e){if(0===e)return c.__zero();if(c.__isOneDigitInt(e))return 0>e?c.__oneDigit(-e,!0):c.__oneDigit(e,!1);if(!t(e)||a(e)!==e)throw new RangeError("The number "+e+" cannot be converted to BigInt because it is not an integer");return c.__fromDouble(e)}if("string"==typeof e){var i=c.__fromString(e);if(null===i)throw new SyntaxError("Cannot convert "+e+" to a BigInt");return i}if("boolean"==typeof e)return!0===e?c.__oneDigit(1,!1):c.__zero();if("object"===r(e)){if(e.constructor===c)return e;var n=c.__toPrimitive(e);return c.BigInt(n)}throw new TypeError("Cannot convert "+e+" to a BigInt")}},{key:"toNumber",value:function(e){var t=e.length;if(0===t)return 0;if(1===t){var r=e.__unsignedDigit(0);return e.sign?-r:r}var i=e.__digit(t-1),n=c.__clz30(i),o=30*t-n;if(1024>>=12;var h=d-12,f=12<=d?0:a<<20+d,p=20+d;for(0>>30-h,f=a<>>30-p,p-=30;var m=c.__decideRounding(e,p,u,a);if((1===m||0===m&&1==(1&f))&&0==(f=f+1>>>0)&&0!=++l>>>20&&(l=0,1023<++s))return e.sign?-1/0:1/0;var g=e.sign?-2147483648:0;return s=s+1023<<20,c.__kBitConversionInts[1]=g|s|l,c.__kBitConversionInts[0]=f,c.__kBitConversionDouble[0]}},{key:"unaryMinus",value:function(e){if(0===e.length)return e;var t=e.__copy();return t.sign=!e.sign,t}},{key:"bitwiseNot",value:function(e){return e.sign?c.__absoluteSubOne(e).__trim():c.__absoluteAddOne(e,!0)}},{key:"exponentiate",value:function(e,t){if(t.sign)throw new RangeError("Exponent must be positive");if(0===t.length)return c.__oneDigit(1,!1);if(0===e.length)return e;if(1===e.length&&1===e.__digit(0))return e.sign&&0==(1&t.__digit(0))?c.unaryMinus(e):e;if(1=c.__kMaxLengthBits)throw new RangeError("BigInt too big");if(1===e.length&&2===e.__digit(0)){var i=1+(0|r/30),n=new c(i,e.sign&&0!=(1&r));n.__initializeDigits();var o=1<>=1;0!==r;r>>=1)a=c.multiply(a,a),0!=(1&r)&&(s=null===s?a:c.multiply(s,a));return s}},{key:"multiply",value:function(e,t){if(0===e.length)return e;if(0===t.length)return t;var r=e.length+t.length;30<=e.__clzmsd()+t.__clzmsd()&&r--;var i=new c(r,e.sign!==t.sign);i.__initializeDigits();for(var n=0;nc.__absoluteCompare(e,t))return c.__zero();var r,i=e.sign!==t.sign,n=t.__unsignedDigit(0);if(1===t.length&&32767>=n){if(1===n)return i===e.sign?e:c.unaryMinus(e);r=c.__absoluteDivSmall(e,n,null)}else r=c.__absoluteDivLarge(e,t,!0,!1);return r.sign=i,r.__trim()}},{key:"remainder",value:function(e,t){if(0===t.length)throw new RangeError("Division by zero");if(0>c.__absoluteCompare(e,t))return e;var r=t.__unsignedDigit(0);if(1===t.length&&32767>=r){if(1===r)return c.__zero();var i=c.__absoluteModSmall(e,r);return 0===i?c.__zero():c.__oneDigit(i,e.sign)}var n=c.__absoluteDivLarge(e,t,!1,!0);return n.sign=e.sign,n.__trim()}},{key:"add",value:function(e,t){var r=e.sign;return r===t.sign?c.__absoluteAdd(e,t,r):0<=c.__absoluteCompare(e,t)?c.__absoluteSub(e,t,r):c.__absoluteSub(t,e,!r)}},{key:"subtract",value:function(e,t){var r=e.sign;return r===t.sign?0<=c.__absoluteCompare(e,t)?c.__absoluteSub(e,t,r):c.__absoluteSub(t,e,!r):c.__absoluteAdd(e,t,r)}},{key:"leftShift",value:function(e,t){return 0===t.length||0===e.length?e:t.sign?c.__rightShiftByAbsolute(e,t):c.__leftShiftByAbsolute(e,t)}},{key:"signedRightShift",value:function(e,t){return 0===t.length||0===e.length?e:t.sign?c.__leftShiftByAbsolute(e,t):c.__rightShiftByAbsolute(e,t)}},{key:"unsignedRightShift",value:function(){throw new TypeError("BigInts have no unsigned right shift; use >> instead")}},{key:"lessThan",value:function(e,t){return 0>c.__compareToBigInt(e,t)}},{key:"lessThanOrEqual",value:function(e,t){return 0>=c.__compareToBigInt(e,t)}},{key:"greaterThan",value:function(e,t){return 0(e=a(e)))throw new RangeError("Invalid value: not (convertible to) a safe integer");if(0===e)return c.__zero();if(e>=c.__kMaxLengthBits)return t;var r=0|(e+29)/30;if(t.length(e=a(e)))throw new RangeError("Invalid value: not (convertible to) a safe integer");if(0===e)return c.__zero();if(t.sign){if(e>c.__kMaxLengthBits)throw new RangeError("BigInt too big");return c.__truncateAndSubFromPowerOfTwo(e,t,!1)}if(e>=c.__kMaxLengthBits)return t;var r=0|(e+29)/30;if(t.length>>i)return t}return c.__truncateToNBits(e,t)}},{key:"ADD",value:function(e,t){if(e=c.__toPrimitive(e),t=c.__toPrimitive(t),"string"==typeof e)return"string"!=typeof t&&(t=t.toString()),e+t;if("string"==typeof t)return e.toString()+t;if(e=c.__toNumeric(e),t=c.__toNumeric(t),c.__isBigInt(e)&&c.__isBigInt(t))return c.add(e,t);if("number"==typeof e&&"number"==typeof t)return e+t;throw new TypeError("Cannot mix BigInt and other types, use explicit conversions")}},{key:"LT",value:function(e,t){return c.__compare(e,t,0)}},{key:"LE",value:function(e,t){return c.__compare(e,t,1)}},{key:"GT",value:function(e,t){return c.__compare(e,t,2)}},{key:"GE",value:function(e,t){return c.__compare(e,t,3)}},{key:"EQ",value:function(e,t){for(;;){if(c.__isBigInt(e))return c.__isBigInt(t)?c.equal(e,t):c.EQ(t,e);if("number"==typeof e){if(c.__isBigInt(t))return c.__equalToNumber(t,e);if("object"!==r(t))return e==t;t=c.__toPrimitive(t)}else if("string"==typeof e){if(c.__isBigInt(t))return null!==(e=c.__fromString(e))&&c.equal(e,t);if("object"!==r(t))return e==t;t=c.__toPrimitive(t)}else if("boolean"==typeof e){if(c.__isBigInt(t))return c.__equalToNumber(t,+e);if("object"!==r(t))return e==t;t=c.__toPrimitive(t)}else if("symbol"===r(e)){if(c.__isBigInt(t))return!1;if("object"!==r(t))return e==t;t=c.__toPrimitive(t)}else{if("object"!==r(e))return e==t;if("object"===r(t)&&t.constructor!==c)return e==t;e=c.__toPrimitive(e)}}}},{key:"NE",value:function(e,t){return!c.EQ(e,t)}},{key:"DataViewGetBigInt64",value:function(e,t){var r=!!(2>>30),u.__setDigit(2,s>>>28),u.__trim()}},{key:"DataViewSetBigInt64",value:function(e,t,r){var i=!!(3>>2,2t)n=-t-1;else{if(0===r)return-1;r--,i=e.__digit(r),n=29}var o=1<>>20)-1023,i=1+(0|r/30),n=new c(i,0>e),o=1048575&c.__kBitConversionInts[1]|1048576,s=c.__kBitConversionInts[0],a=20,u=r%30,d=0;if(u>>l,o=o<<32-l|s>>>l,s<<=32-l}else if(u===a)d=32,t=o,o=s,s=0;else{var h=u-a;d=32-h,t=o<>>32-h,o=s<>>2,o=o<<30|s>>>2,s<<=30):t=0,n.__setDigit(f,t);return n.__trim()}},{key:"__isWhitespace",value:function(e){return!!(13>=e&&9<=e)||(159>=e?32==e:131071>=e?160==e||5760==e:196607>=e?10>=(e&=131071)||40==e||41==e||47==e||95==e||4096==e:65279==e)}},{key:"__fromString",value:function(e){var t=11073741824/a)return null;var d=new c(0|(29+(a*s+u>>>c.__kBitsPerCharTableShift))/30,!1),l=10>t?t:10,h=10>=c.__kBitsPerCharTableShift;var f=[],p=[],m=!1;do{for(var g,_=0,S=0;;){if(g=void 0,o-48>>>0>>0>>0>>0>>c.__kBitsPerCharTableShift)/30;d.__inplaceMultiplyAdd(R,T,b)}while(!v)}if(n!==i){if(!c.__isWhitespace(o))return null;for(n++;n>>c-(o-=30))}if(0!==n){if(i>=e.length)throw new Error("implementation bug");e.__setDigit(i++,n)}for(;i>>1)+(85&i))>>>2)+(51&i))>>>4)+(15&i),o=t-1,s=e.__digit(r-1),a=0|(30*r-c.__clz30(s)+n-1)/n;if(e.sign&&a++,268435456>>g,h=30-g;h>=n;)u[d--]=c.__kConversionChars[l&o],l>>>=n,h-=n}var _=(l|s<>>n-h;0!==l;)u[d--]=c.__kConversionChars[l&o],l>>>=n;if(e.sign&&(u[d--]="-"),-1!==d)throw new Error("implementation bug");return u.join("")}},{key:"__toStringGeneric",value:function(e,t,r){var i=e.length;if(0===i)return"";if(1===i){var n=e.__unsignedDigit(0).toString(t);return!1===r&&e.sign&&(n="-"+n),n}var o,s,a=30*i-c.__clz30(e.__digit(i-1)),u=c.__kMaxBitsPerChar[t]-1,d=a*c.__kBitsPerCharTableMultiplier,l=1+(d=0|(d+=u-1)/u)>>1,h=c.exponentiate(c.__oneDigit(t,!1),c.__oneDigit(l,!1)),f=h.__unsignedDigit(0);if(1===h.length&&32767>=f){(o=new c(e.length,!1)).__initializeDigits();for(var p,m=0,g=2*e.length-1;0<=g;g--)p=m<<15|e.__halfDigit(g),o.__setHalfDigit(g,0|p/f),m=0|p%f;s=m.toString(t)}else{var _=c.__absoluteDivLarge(e,h,!0,!0);o=_.quotient;var S=_.remainder.__trim();s=c.__toStringGeneric(S,t,!0)}o.__trim();for(var v=c.__toStringGeneric(o,t,!0);s.lengthi?c.__absoluteLess(r):0}},{key:"__compareToNumber",value:function(e,r){if(c.__isOneDigitInt(r)){var i=e.sign,n=0>r;if(i!==n)return c.__unequalSign(i);if(0===e.length){if(n)throw new Error("implementation bug");return 0===r?0:-1}if(1o?c.__absoluteGreater(i):st)return c.__unequalSign(r);if(0===t)throw new Error("implementation bug: should be handled elsewhere");if(0===e.length)return-1;c.__kBitConversionDouble[0]=t;var i=2047&c.__kBitConversionInts[1]>>>20;if(2047==i)throw new Error("implementation bug: handled elsewhere");var n=i-1023;if(0>n)return c.__absoluteGreater(r);var o=e.length,s=e.__digit(o-1),a=c.__clz30(s),u=30*o-a,d=n+1;if(ud)return c.__absoluteGreater(r);var l=1048576|1048575&c.__kBitConversionInts[1],h=c.__kBitConversionInts[0],f=20,p=29-a;if(p!==(0|(u-1)%30))throw new Error("implementation bug");var m,g=0;if(p>>_,l=l<<32-_|h>>>_,h<<=32-_}else if(p===f)g=32,m=l,l=h,h=0;else{var S=p-f;g=32-S,m=l<>>32-S,l=h<>>=0)>(m>>>=0))return c.__absoluteGreater(r);if(s>>2,l=l<<30|h>>>2,h<<=30):m=0;var y=e.__unsignedDigit(v);if(y>m)return c.__absoluteGreater(r);if(yr&&e.__unsignedDigit(0)===t(r):0===c.__compareToDouble(e,r)}},{key:"__comparisonResultToBool",value:function(e,t){return 0===t?0>e:1===t?0>=e:2===t?0t;case 3:return e>=t}if(c.__isBigInt(e)&&"string"==typeof t)return null!==(t=c.__fromString(t))&&c.__comparisonResultToBool(c.__compareToBigInt(e,t),r);if("string"==typeof e&&c.__isBigInt(t))return null!==(e=c.__fromString(e))&&c.__comparisonResultToBool(c.__compareToBigInt(e,t),r);if(e=c.__toNumeric(e),t=c.__toNumeric(t),c.__isBigInt(e)){if(c.__isBigInt(t))return c.__comparisonResultToBool(c.__compareToBigInt(e,t),r);if("number"!=typeof t)throw new Error("implementation bug");return c.__comparisonResultToBool(c.__compareToNumber(e,t),r)}if("number"!=typeof e)throw new Error("implementation bug");if(c.__isBigInt(t))return c.__comparisonResultToBool(c.__compareToNumber(t,e),2^r);if("number"!=typeof t)throw new Error("implementation bug");return 0===r?et:3===r?e>=t:void 0}},{key:"__absoluteAdd",value:function(e,t,r){if(e.length>>30,o.__setDigit(a,1073741823&n);for(;a>>30,o.__setDigit(a,1073741823&u)}return a>>30,n.__setDigit(s,1073741823&i);for(;s>>30,n.__setDigit(s,1073741823&a)}return n.__trim()}},{key:"__absoluteAddOne",value:function(e,t){var r=2>>30,r.__setDigit(s,1073741823&n);return 0!==o&&r.__setDigitGrow(i,1),r}},{key:"__absoluteSubOne",value:function(e,t){for(var r,i=e.length,n=new c(t=t||i,!1),o=1,s=0;s>>30,n.__setDigit(s,1073741823&r);if(0!==o)throw new Error("implementation bug");for(var a=i;ai?0:e.__unsignedDigit(i)>t.__unsignedDigit(i)?1:-1}},{key:"__multiplyAccumulate",value:function(e,t,r,i){if(0!==t){for(var n=32767&t,o=t>>>15,s=0,a=0,u=0;u>>15,p=c.__imul(h,n),m=c.__imul(h,o),g=c.__imul(f,n);s=(d+=a+p+s)>>>30,d&=1073741823,s+=(d+=((32767&m)<<15)+((32767&g)<<15))>>>30,a=c.__imul(f,o)+(m>>>15)+(g>>>15),r.__setDigit(i,1073741823&d)}for(;0!==s||0!==a;i++){var _=r.__digit(i);_+=s+a,a=0,s=_>>>30,r.__setDigit(i,1073741823&_)}}}},{key:"__internalMultiplyAdd",value:function(e,t,r,i,n){for(var o=r,s=0,a=0;a>>15,t),h=d+((32767&l)<<15)+s+o;o=h>>>30,s=l>>>15,n.__setDigit(a,1073741823&h)}if(n.length>i)for(n.__setDigit(i++,o+s);i>>0,s=0|o/t,a=0|(o=((i=0|o%t)<<15|e.__halfDigit(n-1))>>>0)/t;i=0|o%t,r.__setDigit(n>>>1,s<<15|a)}return r}},{key:"__absoluteModSmall",value:function(e,t){for(var r=0,i=2*e.length-1;0<=i;i--)r=0|((r<<15|e.__halfDigit(i))>>>0)%t;return r}},{key:"__absoluteDivLarge",value:function(e,t,r,i){var n=t.__halfDigitLength(),o=t.length,s=e.__halfDigitLength()-n,a=null;r&&(a=new c(s+2>>>1,!1)).__initializeDigits();var u=new c(n+2>>>1,!1);u.__initializeDigits();var d=c.__clz15(t.__halfDigit(n-1));0>>0;m=0|_/h;for(var S=0|_%h,v=t.__halfDigit(n-2),y=l.__halfDigit(p+n-2);c.__imul(m,v)>>>0>(S<<16|y)>>>0&&(m--,!(32767<(S+=h))););}c.__internalMultiplyAdd(t,m,0,o,u);var I=l.__inplaceSub(u,p,n+1);0!==I&&(I=l.__inplaceAdd(t,p,n),l.__setHalfDigit(p+n,32767&l.__halfDigit(p+n)+I),m--),r&&(1&p?f=m<<15:a.__setDigit(p>>>1,f|m))}if(i)return l.__inplaceRightShift(d),r?{quotient:a,remainder:l}:l;if(r)return a;throw new Error("unreachable")}},{key:"__clz15",value:function(e){return c.__clz30(e)-15}},{key:"__specialLeftShift",value:function(e,t,r){var i=e.length,n=new c(i+r,!1);if(0===t){for(var o=0;o>>30-t;return 0r)throw new RangeError("BigInt too big");var i=0|r/30,n=r%30,o=e.length,s=0!==n&&0!=e.__digit(o-1)>>>30-n,a=o+i+(s?1:0),u=new c(a,e.sign);if(0===n){for(var d=0;d>>30-n;if(s)u.__setDigit(o+i,l);else if(0!==l)throw new Error("implementation bug")}return u.__trim()}},{key:"__rightShiftByAbsolute",value:function(e,t){var r=e.length,i=e.sign,n=c.__toShiftAmount(t);if(0>n)return c.__rightShiftByMaximum(i);var o=0|n/30,s=n%30,a=r-o;if(0>=a)return c.__rightShiftByMaximum(i);var u=!1;if(i)if(0!=(e.__digit(o)&(1<>>s,m=r-o-1,g=0;g>>s;l.__setDigit(m,p)}return u&&(l=c.__absoluteAddOne(l,!0,l)),l.__trim()}},{key:"__rightShiftByMaximum",value:function(e){return e?c.__oneDigit(1,!0):c.__zero()}},{key:"__toShiftAmount",value:function(e){if(1c.__kMaxLengthBits?-1:t}},{key:"__toPrimitive",value:function(e){var t=1>>a}return i.__setDigit(n,s),i.__trim()}},{key:"__truncateAndSubFromPowerOfTwo",value:function(e,t,r){for(var i,n=Math.min,o=0|(e+29)/30,s=new c(o,r),a=0,u=o-1,d=0,l=n(u,t.length);a>>30,s.__setDigit(a,1073741823&i);for(;a>>m)-d,h&=g-1}return s.__setDigit(u,h),s.__trim()}},{key:"__digitPow",value:function(e,t){for(var r=1;0>>=1,e*=e;return r}},{key:"__isOneDigitInt",value:function(e){return(1073741823&e)===e}}]),c}(h(Array));return R.__kMaxLength=33554432,R.__kMaxLengthBits=R.__kMaxLength<<5,R.__kMaxBitsPerChar=[0,0,32,51,64,75,83,90,96,102,107,111,115,119,122,126,128,131,134,136,139,141,143,145,147,149,151,153,154,156,158,159,160,162,163,165,166],R.__kBitsPerCharTableShift=5,R.__kBitsPerCharTableMultiplier=1<>>0)/t)},R.__imul=e||function(e,t){return 0|e*t},R}()}(wD);var kD=wD.exports;const OD="CommandMsgManager";class PD{constructor(e,t){i(this,"RTP_HEADER_V_P_X_CC",144),i(this,"RTP_HEADER_V_P_X_CC_BRODACAST",128),this.event=e,this.remoteUserManager=t,this.cmdMsgPacketSeqNum=0}receivedCmdRtpPacketDecode(e){var t,r;const i=new DataView(e),n=i.getUint16(2),o=i.getUint32(4);iE.getLogger().debug(OD,"receive ".concat(n," msg of timeStamp ").concat(o));const s=i.getUint32(8);if(s!==this.cmdReceiveSsrc)return void iE.getLogger().error(OD,"receive msg ssrc not matched, ".concat(this.cmdReceiveSsrc," - ").concat(s));let a=0;if(0==(16&i.getUint8(0)))a=12;else{a=16+4*i.getUint16(14)}const c=kD.toNumber(kD.DataViewGetBigUint64(i,a)),u=i.buffer.slice(a+16);let d=null;d=this.msgFormat===VC.STRING?MD.ArrayBufferToMsg(u):u,this.event.emit(UC.CmdMsgReceived,{msg:d,srcUserId:null===(t=this.remoteUserManager.getUserInfoByUid(c,this.roomId))||void 0===t||null===(r=t.userInfo)||void 0===r?void 0:r.userId})}genCmdRtpPacketMsg(e){const t=!e.userUid,r=new DataView(new ArrayBuffer(t?28:44));t?r.setUint8(0,this.RTP_HEADER_V_P_X_CC_BRODACAST):r.setUint8(0,this.RTP_HEADER_V_P_X_CC),r.setUint8(1,this.RTP_HEADER_M_PT),r.setUint16(2,this.cmdMsgPacketSeqNum++),r.setUint32(4,Math.floor((new Date).getTime()/1e3)),r.setUint32(8,this.cmdSendSsrc);const{userUid:i=0,msg:n}=e;let o=0;return t?o=12:(r.setUint16(12,4096),r.setUint16(14,3),r.setUint8(16,21),r.setUint8(17,8),kD.DataViewSetBigUint64(r,18,kD.BigInt(i)),r.setUint16(26,0),o=28),kD.DataViewSetBigUint64(r,o,kD.BigInt(this.selfUserUid)),kD.DataViewSetBigUint64(r,o+8,kD.BigInt(0)),MD.concatArrayBuffer(r.buffer,MD.msgBodyToArrayBuffer(n))}sendCommandMsg(e,t,r){let i=0;var n,o;t&&(i=null===(n=this.remoteUserManager.getUserInfoById(t,r))||void 0===n||null===(o=n.userInfo)||void 0===o?void 0:o.userUid);return this.transportChannel.sendMessage(this.genCmdRtpPacketMsg({msg:e,userUid:i}))}setCommandChannelParams(e,t){this.reset(),this.RTP_HEADER_M_PT=t.tranportOptions.payload,this.roomId=e,this.msgFormat=t.msgFormat,this.cmdSendSsrc=t.tranportOptions.sendSsrc,this.cmdReceiveSsrc=t.tranportOptions.receiveSsrc,this.selfUserUid=t.tranportOptions.userUid,this.extraParamsHandle(t),this.initCmdTranportChannel()}}class MD{static msgBodyToArrayBuffer(e){if("string"==typeof e){return(new TextEncoder).encode(e).buffer}return e}static ArrayBufferToMsg(e){return new TextDecoder("utf-8").decode(e)}static concatArrayBuffer(){let e=0;for(var t=arguments.length,r=new Array(t),i=0;iawait this.wsConnectOnce(e,r,i,t)),!1,t,this.getAsyncInterval(n),this.needInterrupted())}getAsyncInterval(e){return t=>"function"==typeof(null==t?void 0:t.getCode)&&t.getCode()===Gc.RTC_ERR_CODE_WAIT_RSP_TIMEOUT?0:e}needInterrupted(){return e=>"function"==typeof(null==e?void 0:e.getCode)&&e.getCode()===Gc.RTC_ERR_CODE_WEBSOCKET_INTERRUPTED}async wsConnectOnce(e,t,r,i){this.close(),this.connectionId=XR.generateRandomId(32),this.websocket=new WebSocket(e),this.websocket.binaryType="arraybuffer",iE.getLogger().info(DD,"wsConnectOnce, url:".concat(XR.shieldUrlParameters(e),", begin create websocket ").concat(this.connectionId," connection with server ")),this.websocket.onopen=this.onopen.bind(this),this.websocket.onerror=this.onerror.bind(this),this.websocket.onmessage=this.onmessage.bind(this),this.websocket.onclose=this.onclose.bind(this);try{const e=1===i?t:r;await this.getConnectionResp(e,this.connectionId)}catch(jN){throw iE.getLogger().error(DD,"wsConnectOnce, connect occur exception, error: ".concat(jN)),jN}finally{this.connectionCallbacks.delete(this.connectionId)}}async getConnectionResp(e,t){await mP.callWithTimeout(new Promise(((e,r)=>{this.connectionCallbacks.set(t,(i=>{if(i.isSuccess)iE.getLogger().info(DD,"getConnectionResp, connectId:".concat(t,", connect success")),e();else{const e=Gc.RTC_ERR_CODE_WEBSOCKET_CONNECT_ERROR,n=i.code,o="".concat(n||""," websocket connect error"),s=new qc(e,o);iE.getLogger().info(DD,"getConnectionResp, connectId:".concat(t,", connect fail, errMsg=").concat(s)),r(s)}}))})),e).catch((t=>{if(t.getCode()!==Gc.RTC_ERR_CODE_WAIT_RSP_TIMEOUT)throw t;throw iE.getLogger().error(DD,"getConnectionResp, websocket connect timeout after ".concat(e," ms")),this.websocket&&this.websocket.readyState===this.websocket.CONNECTING&&(iE.getLogger().info(DD,"getConnectionResp, websocket connect timeout, close webSocket manual"),this.close()),new qc(Gc.RTC_ERR_CODE_WEBSOCKET_CONNECT_TIMEOUT)})).finally((()=>{this.connectionCallbacks.delete(t)}))}onopen(){iE.getLogger().info(DD,"onopen, wss connection success."),this.connectionCallbacks.has(this.connectionId)&&this.connectionCallbacks.get(this.connectionId)({isSuccess:!0}),this.event_.emit("CMD_CHANNEL_ESTABLISHED")}onmessage(e){e.data?this.event_.emit("CMD_MSG_REVEIVED",e.data):iE.getLogger().error(DD,"onerror, websocket message is null.")}onerror(e){iE.getLogger().error(DD,"onerror, websocket occur error:".concat(JSON.stringify(e))),this.connectionCallbacks.has(this.connectionId)&&this.connectionCallbacks.get(this.connectionId)({isSuccess:!1})}async onclose(e){const t=e.code,r=e.reason;iE.getLogger().warn(DD,"onclose, code:".concat(t,", reason:").concat(r)),this.connectionCallbacks.has(this.connectionId)&&this.connectionCallbacks.get(this.connectionId)({isSuccess:!1,code:t,reason:r}),iE.getLogger().error(DD,"reconnect"),this.event_.emit("CMD_CONNECTION_RECONNECT")}sendMessage(e){if(!this.websocket)return iE.getLogger().error(DD,"send cmd message failed for websocket is null."),!1;try{return this.websocket.send(e),!0}catch(jN){return iE.getLogger().error(DD,"send cmd message failed."),!1}}close(){this.websocket&&(this.websocket.onopen=null,this.websocket.onerror=null,this.websocket.onmessage=null,this.websocket.onclose=null,this.websocket.close(),this.websocket=null,this.connectionCallbacks.clear())}}class UD extends PD{constructor(e,t){super(e,t),this.reconnctInterval=[2,5,10,20],this.reconnctIdx=0}initCmdTranportChannel(){this.transportChannel||(this.transportChannel=new ND),this.transportChannel.on("CMD_MSG_REVEIVED",(e=>{this.receivedCmdRtpPacketDecode(e)})),this.transportChannel.on("CMD_CHANNEL_ESTABLISHED",(()=>{iE.getLogger().info(DD,"cmd websocket connection established."),this.event.emit(UC.CmdChannelEstablished,BC.WEBSOCKET),this.reconnctIdx=0,this.transportChannel.sendMessage(this.genCmdBindRtpPacketMsg())})),this.transportChannel.on("CMD_CONNECTION_RECONNECT",(async()=>{if(this.reconnctIdx===this.reconnctInterval.length)iE.getLogger().info(DD,"cmd websocket connection disconnect."),this.event.emit(UC.CmdChannelDisconnect,BC.WEBSOCKET);else try{this.event.emit(UC.CmdChannelReconnecting);const e=this.reconnctInterval[Math.min(this.reconnctIdx,this.reconnctInterval.length-1)];if(iE.getLogger().error(DD,"cmd websocket reconnect wait for ".concat(e,"s.")),await XR.sleep(1e3*e),!this.transportChannel)return;this.reconnctIdx++,iE.getLogger().error(DD,"cmd websocket reconnect begin."),await this.transportChannel.wsConnect(this.cmdSocketUrl,1,1e4,1e4,500)}catch(jN){iE.getLogger().error(DD,"cmd websocket reconnect failed: ".concat(jN))}}));try{this.transportChannel.wsConnect(this.cmdSocketUrl,1,1e4,1e4,500)}catch(jN){iE.getLogger().error(DD,"cmd websocket connect failed: ".concat(jN))}}extraParamsHandle(e){this.bindCryptoKey=e.wsOptions.bindCryptoKey,this.cmdSocketUrl=e.wsOptions.wsDomain?e.wsOptions.wsUrl.replace(/(ws(s)?:\/\/)[^\/|:]+(.*)/,"$1".concat(e.wsOptions.wsDomain,"$3")):e.wsOptions.wsUrl}reset(){this.roomId=null,this.cmdSendSsrc=0,this.cmdReceiveSsrc=0,this.selfUserUid=0,this.bindCryptoKey=null,this.cmdMsgPacketSeqNum=0,this.reconnctIdx=0,this.transportChannel&&(this.transportChannel.off("CMD_MSG_REVEIVED"),this.transportChannel.off("CMD_CHANNEL_ESTABLISHED"),this.transportChannel.off("CMD_CONNECTION_RECONNECT"),this.transportChannel.close(),this.transportChannel=null)}genCmdBindRtpPacketMsg(){const e=new DataView(new ArrayBuffer(20));e.setUint8(0,this.RTP_HEADER_V_P_X_CC),e.setUint8(1,this.RTP_HEADER_M_PT),e.setUint16(2,this.cmdMsgPacketSeqNum++),e.setUint32(4,Math.floor((new Date).getTime()/1e3)),e.setUint32(8,this.cmdSendSsrc),e.setUint16(12,4096),e.setUint16(14,1),e.setUint8(16,24),e.setUint8(17,1),e.setUint8(18,0),e.setUint8(19,0);const t=MD.numberArrayToArrayBuffer(uT.exports.HmacSHA256(uT.exports.lib.WordArray.create(MD.arrayBufferToNumberArray(e)),this.bindCryptoKey).words);return MD.concatArrayBuffer(e.buffer,t)}}const xD="DataChannelMsgManager";class LD{constructor(e){this.event_=new VO,this.dataChannel=e.createDataChannel("commandMsgDataChannel",{ordered:!0}),this.dataChannel.binaryType="arraybuffer",this.dataChannel.onopen=this.onopen.bind(this),this.dataChannel.onerror=this.onerror.bind(this),this.dataChannel.onmessage=this.onmessage.bind(this),this.dataChannel.onclose=this.onclose.bind(this)}on(e,t){this.event_.on(e,t)}off(e,t){t?this.event_.removeListener(e,t):this.event_.removeAllListeners(e)}sendMessage(e){var t;if(!this.dataChannel||"open"!==this.dataChannel.readyState)return iE.getLogger().error(xD,"send message with dataChannel failed for dataChannel unavaliable: ".concat(null===(t=this.dataChannel)||void 0===t?void 0:t.readyState,".")),!1;try{return this.dataChannel.bufferedAmount>=1024e6&&iE.getLogger().warn(xD,"buffer over high threshold of 1M: ".concat(this.dataChannel.bufferedAmount,", send message may blocked and delay.")),this.dataChannel.send(e),!0}catch(jN){return iE.getLogger().error(xD,"send message with dataChannel occur error: ".concat(jN,".")),!1}}close(){this.dataChannel&&(this.dataChannel.onopen=null,this.dataChannel.onerror=null,this.dataChannel.onmessage=null,this.dataChannel.onclose=null,this.dataChannel.close(),this.dataChannel=null)}onopen(){iE.getLogger().info(xD,"onopen, RTCDataChannel connection status: ".concat(this.dataChannel.readyState)),clearTimeout(this.dataChannelDisConnectTimer),this.event_.emit("CMD_CHANNEL_ESTABLISHED")}onmessage(e){e.data?this.event_.emit("CMD_MSG_REVEIVED",e.data):iE.getLogger().error(xD,"onerror, RTCDataChannel message is null.")}onerror(e){iE.getLogger().error(xD,"onerror, RTCDataChannel occur error: ".concat(e)),this.dataChannelDisConnectTimer||(this.dataChannelDisConnectTimer=setTimeout((()=>{clearTimeout(this.dataChannelDisConnectTimer),this.event_.emit("CMD_CHANNEL_DISCONNECT")}),3e4))}onclose(e){iE.getLogger().info(xD,"onclose, RTCDataChannel closed: ".concat(e)),this.dataChannelDisConnectTimer||(this.dataChannelDisConnectTimer=setTimeout((()=>{clearTimeout(this.dataChannelDisConnectTimer),this.event_.emit("CMD_CHANNEL_DISCONNECT")}),3e4))}}class BD extends PD{initCmdTranportChannel(){this.transportChannel||(this.transportChannel=new LD(this.connection)),this.transportChannel.on("CMD_MSG_REVEIVED",(e=>{super.receivedCmdRtpPacketDecode(e)})),this.transportChannel.on("CMD_CHANNEL_ESTABLISHED",(()=>{iE.getLogger().info(xD,"cmd dataChannel connection established."),this.event.emit(UC.CmdChannelEstablished,BC.DATA_CHANNEL)})),this.transportChannel.on("CMD_CHANNEL_DISCONNECT",(()=>{iE.getLogger().info(xD,"cmd dataChannel connection disconnect."),this.event.emit(UC.CmdChannelDisconnect,BC.DATA_CHANNEL)}))}extraParamsHandle(e){this.connection=e.dataChannelOptions.connection}reset(){this.roomId=null,this.cmdSendSsrc=0,this.cmdReceiveSsrc=0,this.selfUserUid=0,this.cmdMsgPacketSeqNum=0,this.transportChannel&&(this.transportChannel.off("CMD_MSG_REVEIVED"),this.transportChannel.off("CMD_CHANNEL_ESTABLISHED"),this.transportChannel.close(),this.transportChannel=null)}}var VD,YD,jD,FD,HD,KD,zD,WD,GD,JD,qD,XD,QD,$D,ZD,eN,tN,rN,iN,nN,oN,sN,aN,cN,uN,dN,lN,hN,fN,pN,mN,gN,_N,SN,vN,yN,IN,TN;const RN=1e4;var EN=function(e){return e[e.mute=0]="mute",e[e.unmute=1]="unmute",e[e.noChange=2]="noChange",e}(EN||{});const bN={FHD:CC.main,HD:CC.middle1,SD:CC.middle2,LD:CC.slides},CN="Client";let AN=(VD=fP("Client$enableTopThreeAudioMode#boolean#boolean"),YD=lP("".concat(CN,"_switchAudioMode")),jD=fP("Client$getConnectionState#string"),FD=fP("Client$setNetworkBandwidth#void#NetworkBandwidth"),HD=hP("Client$join#Promise#string#JoinConfig"),KD=hP("Client$enableRtcStats#Promise#boolean#number"),zD=hP("Client$leave#Promise"),WD=hP("Client$publish#Promise#Stream#PublishOption"),GD=lP("".concat(CN,"_publishImpl")),JD=hP("Client$unpublish#Promise#Stream"),qD=hP("Client$subscribeAudio#Promise#string"),XD=hP("Client$unSubscribeAudio#Promise#string"),QD=hP("Client$subscribe#Promise#RemoteStream#SubscribeOption"),$D=hP("Client$batchSubscribe#Promise#SubscribeParam[]"),ZD=hP("Client$unsubscribe#Promise#Stream#SubscribeOption"),eN=hP("Client$switchRole#Promise#number#Authorization"),tN=lP("".concat(CN,"_refreshRemoteStreamList")),rN=lP("".concat(CN,"_updateRemoteStream")),iN=lP("".concat(CN,"_removeRemoteStream")),nN=lP("".concat(CN,"_handleWatchMsg")),oN=lP("".concat(CN,"_refreshRoomUserInfos")),sN=fP("Client$setVolume4TopThree#void#number"),aN=fP("Client$muteAudio4TopThree#void#boolean"),cN=hP("Client$setAudioOutput4TopThree#void"),uN=fP("Client$isTopNAudioMuted#boolean"),dN=hP("Client$changeUserName#Promise#string"),lN=hP("Client$startLiveStreaming#Promise#string#string[]#PublishConfig#UserConfig[]"),hN=hP("Client$updateLiveStreaming#Promise#string#string[]#PublishConfig#UserConfig[]"),fN=hP("Client$stopLiveStreaming#Promise#string"),pN=fP("Client$setProxyServer#void#string"),mN=fP("Client$setTurnServer#void#TurnServerConfig"),gN=hP("Client$addMultiRoomMediaRelay#Promise#MultiRoomMediaRelayInfo"),_N=hP("Client$stopMultiRoomMediaRelay#Promise#MultiRoomMediaRelayInfo"),SN=fP("Client$addRelayClient#Client#string"),vN=hP("Client$stopRelayClient#Promise#string"),yN=fP("Client$enableCommandMsg#boolean#boolean"),IN=fP("Client$renewSignature#boolean#ctime#signature"),TN=class e extends $P{constructor(e,t){super({logger:!0,stat:!0,emitter:!0,config:e}),i(this,"status",OC.Idle),i(this,"localRejoinFlag",!1),i(this,"resolutionChangeInfo",{mainResolutionChangeTimer:null,auxResolutionChangeTimer:null,preVideoHeight:new Map}),this.clientSymbol=Symbol("".concat(CN,"_").concat(QP.getSequence())),t&&(this.mainRelayRoomSymbol=t),this.locker=new aP,this.roomId="",this.clientConfig=e,this.userInfo=void 0,this.waitConfigCallbackFunc=void 0,this.topNAudioVolume=100,this.audioPolicy=_O.USER_SUBSCRIBE_AUDIOPOLICY,this.connectState={prevState:"DISCONNECTED",curState:"DISCONNECTED"},this.logger.info(CN,"HRTC VERSION = ".concat(uA,", userAgent = ").concat(navigator.userAgent)),this.top3VolumeUserIds=[],DO.initDeviceChangedNotify(this.eventEmitter,!1),this.accessManager=new fD(this.logger),this.lastCycleFrameDecodedMap=new Map,this.streamInterruptedUsersMap=new Map,this.streamDetectionCriterion=0,this.audioStreams4TopN=new MM,this.downLinkData=null,this.upLinkData=null,this.preNetQuality=null,this.remoteUserManager=new vD(this),this.stat.setRemoteUserManager(this.remoteUserManager),this.connectionsManager=new nD(this.logger,this.stat,this.eventEmitter),this.streamPublishManager=new NM,this.audioLevelInterval=1e3,this.isLoopRejoining=!1,this.upStreamData=null,this.sdpRepInfo=null,this.startupQoSMap=new Map,this.initReport4WindowEvent(),this.cmdMsgAbility={enable:!1,cmdManager:null,msgFormat:VC.STRING},this.roomStreamStatus={},this.isSignatureExpired=!1,this.pktsLostRate={up:0,down:0,preDownRate:[],preRTT:0}}initReport4WindowEvent(){window.onunload=()=>{var e,t;const r=XR.getCurrentTimestamp();null===(e=this.stat)||void 0===e||e.recordCallbackInfoBeacon("window-onunload",null===(t=this.getInfo())||void 0===t?void 0:t.moduleName,r,r,{event:"window-onunload"},(e=>["object","function"].includes(typeof e)&&e.getStatInfo?JSON.stringify(e.getStatInfo()):JSON.stringify(e||{})))},window.onbeforeunload=()=>{var e,t;const r=XR.getCurrentTimestamp();null===(e=this.stat)||void 0===e||e.recordCallbackInfoBeacon("window-onbeforeunload",null===(t=this.getInfo())||void 0===t?void 0:t.moduleName,r,r,{event:"window-onbeforeunload"},(e=>["object","function"].includes(typeof e)&&e.getStatInfo?JSON.stringify(e.getStatInfo()):JSON.stringify(e||{})))},window.onhashchange=e=>{var t,r;const i=XR.getCurrentTimestamp();null===(t=this.stat)||void 0===t||t.recordCallbackInfoBeacon("window-onhashchange",null===(r=this.getInfo())||void 0===r?void 0:r.moduleName,i,i,{event:"window-onhashchange",newURL:(null==e?void 0:e.newURL)||"",oldURL:(null==e?void 0:e.oldURL)||""},(e=>["object","function"].includes(typeof e)&&e.getStatInfo?JSON.stringify(e.getStatInfo()):JSON.stringify(e||{})))}}getSessionStatus(){return this.status}on(e,t){super.on(e,t,![UC.VolumeIndicator,UC.TransportStats].includes(e.toString()))}off(e,t){super.off(e,t,![UC.VolumeIndicator,UC.TransportStats].includes(e.toString()))}getSymbol(){return this.identifiedID}getInfo(){var e,t;return{moduleName:"Client",appId:this.clientConfig.appId,roomId:this.roomId,userName:null===(e=this.userInfo)||void 0===e?void 0:e.userName,userId:null===(t=this.userInfo)||void 0===t?void 0:t.userId,domain:this.clientConfig.domain,upStreamData:this.upStreamData,sdpRepInfo:this.sdpRepInfo,countryCode:this.clientConfig.countryCode}}enableTopThreeAudioMode(e){return this.enableTopThreeAudioModeImpl(e)}enableTopThreeAudioModeImpl(e){let t=!1;return e&&this.status===OC.Idle&&(this.audioPolicy=_O.TOPN_AUDIOPOLICY,t=!0),t}async switchAudioMode(e){try{if(e!==SO.TOPN_AUDIOPOLICY&&e!==SO.USER_SUBSCRIBE_AUDIOPOLICY)throw this.logger.error(CN,"audioMode is invalid"),new qc(Gc.RTC_ERR_CODE_INVALID_PARAMETER);return e%=2,this.logger.info(CN,"switchAudioMode start, new audioPolicy: ".concat(e,", original audioPolicy: ").concat(this.audioPolicy)),this.status===OC.Joined&&(e===_O.USER_SUBSCRIBE_AUDIOPOLICY&&this.audioPolicy===_O.TOPN_AUDIOPOLICY?(this.audioPolicy=e,await this.switchAudioPolicyTop2User()):e===_O.TOPN_AUDIOPOLICY&&this.audioPolicy===_O.USER_SUBSCRIBE_AUDIOPOLICY&&(this.audioPolicy=e,await this.switchAudioPolicyUser2Top(),this.top3VolumeUserIds&&this.top3VolumeUserIds.length>0&&this.eventEmitter.emit(UC.VolumeIndicator,{userVolumeInfos:this.top3VolumeUserIds}))),this.stat.getMediaStat().setAudioPolicy(this.audioPolicy),this.audioPolicy===_O.USER_SUBSCRIBE_AUDIOPOLICY?SO.USER_SUBSCRIBE_AUDIOPOLICY:SO.TOPN_AUDIOPOLICY}catch(jN){this.logger.error(CN,"switchAudioMode, audioPolicy: ".concat(e,", error: ").concat(jN))}return this.audioPolicy}async switchAudioPolicyTop2User(){await this.signal.changeAudioPolicy(_O.USER_SUBSCRIBE_AUDIOPOLICY),await this.unsubscribeAudio4Top();const e=this.remoteUserManager.getAllUserStreamsByType(this.roomId,null,mO.TRACK_TYPE_VIDEO);for(const t of e){const e=t.mainStream.tracks;for(const t of e)t.isSubscribed&&await this.resubscribeUserAudio()}}async resubscribeUserAudio(){this.logger.info(CN,"resubscribeUserAudio start");const e=this.remoteUserManager.resubscribeMainStreamAudio(this.roomId);await this.updateSubscribe(e),null==e||e.forEach((e=>{var t,r,i,n;(null===(t=e.mainStream)||void 0===t||null===(r=t.tracks4Subscribe)||void 0===r?void 0:r.length)>0&&(null===(i=e.mainStream)||void 0===i||null===(n=i.remoteStream)||void 0===n||n.rePlayAudio())}))}async switchAudioPolicyUser2Top(){await this.unsubscribeAudio4SubscribeUsers(),await this.signal.changeAudioPolicy(_O.TOPN_AUDIOPOLICY),this.remoteUserManager.enableTopThreeAudioMode(this.roomId),await this.connectionsManager.generateAndSetOfferSdpByHandler(gO.STREAM_TYPE_MAIN),await this.connectionsManager.generateAndSetAnswerSdpByHandler(gO.STREAM_TYPE_MAIN,this.addSsrc4Top3.bind(this))}async unsubscribeAudio4SubscribeUsers(){this.logger.info(CN,"unsubscribeAudio4SubscribeUsers start");const e=this.remoteUserManager.unsubscribeAllMainStreamAudio(this.roomId);await this.updateSubscribe(e)}async unsubscribeAudio4Top(){await this.unsubscribeUsersAudio()}async unsubscribeAudio4SubscribeAll(){await this.unsubscribeUsersAudio()}async unsubscribeUsersAudio(){const e=[];for(const t of this.audioStreams4TopN.getAudioStreams()){const r=t.ssrc;this.audioStreams4TopN.close(t.streamId),this.logger.info(CN,"delete audio ssrc:".concat(r)),e.push(r)}e.length>0&&await this.connectionsManager.deleteUser(gO.STREAM_TYPE_MAIN,null,e)}async getLocalAudioStats(){const e=new Map,t=this.streamPublishManager.getPublishedMainAudioTrackInfo();if(!t)return this.logger.error(CN,"local stream has not published yet."),e;if("function"!=typeof t.sender.getStats)return this.logger.error(CN,"audio rtpsender is not support getStat"),e;const r={bytesSent:0,packetsSent:0},i=this.streamPublishManager.getLocalStream(gO.STREAM_TYPE_MAIN),n=this.userInfo.userId||(null==i?void 0:i.getUserId()),o=CO.getLatestStats(this.userInfo.roomId,gO.STREAM_TYPE_MAIN,"".concat(pC,"_").concat(t.ssrc));return o&&(r.bytesSent=o.bytesSent,r.packetsSent=o.packetsSent,e.set(n,r)),e}async getLocalVideoStats(){const e=new Map,t={mainStream:[],subStream:null};let r=null,i=null;const n=this.streamPublishManager.getMainStreamVideoPublishInfo();if(n){const i=this.streamPublishManager.getLocalStream(gO.STREAM_TYPE_MAIN),o=this.userInfo.userId||(null==i?void 0:i.getUserId());for(const s of n){r={bytesSent:0,packetsSent:0,framesEncoded:0,framesSent:0,frameWidth:0,frameHeight:0};const i=CO.getLatestStats(this.userInfo.roomId,gO.STREAM_TYPE_MAIN,"".concat(mC,"_").concat(s.ssrc));i&&(r.bytesSent=XR.getValue(i.bytesSent,0),r.packetsSent=XR.getValue(i.packetsSent,0),r.framesEncoded=XR.getValue(i.framesEncoded,0),r.framesSent=XR.getValue(i.framesSent,0),r.frameWidth=XR.getValue(i.frameWidth,0),r.frameHeight=XR.getValue(i.frameHeight,0),e.has(o)?e.get(o).mainStream.push(r):(t.mainStream.push(r),e.set(o,t)))}}else this.logger.debug(CN,"have no local mainstream collect stats");const o=this.streamPublishManager.getPublishedAuxVideoTrackInfo();if(o&&"function"==typeof o.sender.getStats){const r=this.streamPublishManager.getLocalStream(gO.STREAM_TYPE_MAIN),n=this.userInfo.userId||(null==r?void 0:r.getUserId());i={bytesSent:0,packetsSent:0,framesEncoded:0,framesSent:0,frameWidth:0,frameHeight:0};const s=CO.getLatestStats(this.userInfo.roomId,gO.STREAM_TYPE_AUX,"".concat(mC,"_").concat(o.ssrc));s&&(i.bytesSent=XR.getValue(s.bytesSent,0),i.packetsSent=XR.getValue(s.packetsSent,0),i.framesEncoded=XR.getValue(s.framesEncoded,0),i.framesSent=XR.getValue(s.framesSent,0),i.frameWidth=XR.getValue(s.frameWidth,0),i.frameHeight=XR.getValue(s.frameHeight,0),e.has(n)?e.get(n).subStream=i:(t.subStream=i,e.set(n,t)))}else this.logger.debug(CN,"have no local substream collect stats");return e}async getRemoteAudioStats(){const e=new Map,t=this.remoteUserManager.getAllUserStreamsByType(this.roomId,gO.STREAM_TYPE_MAIN,mO.TRACK_TYPE_AUDIO),r=this.connectionsManager.getReceivers(gO.STREAM_TYPE_MAIN);if(!r||0===r.length)return this.logger.error(CN,"getRemoteAudioStats, peerConnection is not support getReceivers"),e;for(const i of t){const t=i.userId;if(i.mainStream)for(const r of i.mainStream.tracks){const i={bytesReceived:0,packetsReceived:0,packetsLost:0},n=CO.getLatestStats(this.userInfo.roomId,gO.STREAM_TYPE_MAIN,"".concat(hC,"_").concat(r.cssrc));t&&n&&(i.bytesReceived=XR.getValue(n.bytesReceived,0),i.packetsReceived=XR.getValue(n.packetsReceived,0),i.packetsLost=XR.getValue(n.packetsLost,0),this.connectionsManager.calcChangedStatistic(n.id,i,["bytesReceived","packetsReceived","packetsLost"]),e.set(t,i))}}return e}async getRemoteVideoStats(){const e=new Map,t=this.remoteUserManager.getAllUserStreamsByType(this.roomId,null,mO.TRACK_TYPE_VIDEO);for(const r of t)r.mainStream&&await this.getRemoteVideoTracksStatistic(r.userId,gO.STREAM_TYPE_MAIN,!1,r.mainStream.tracks,e),r.auxStream&&await this.getRemoteVideoTracksStatistic(r.userId,gO.STREAM_TYPE_AUX,!0,r.auxStream.tracks,e);return e}isSendingStream(){var e,t;const r=(null===(e=this.connectionsManager.getSenders(gO.STREAM_TYPE_MAIN))||void 0===e?void 0:e.length)>0,i=(null===(t=this.connectionsManager.getSenders(gO.STREAM_TYPE_AUX))||void 0===t?void 0:t.length)>0;return r||i}isReceivingStream(){var e,t;const r=(null===(e=this.connectionsManager.getReceivers(gO.STREAM_TYPE_MAIN))||void 0===e?void 0:e.length)>0,i=(null===(t=this.connectionsManager.getReceivers(gO.STREAM_TYPE_AUX))||void 0===t?void 0:t.length)>0;return r||i}async getRemoteVideoTracksStatistic(e,t,r,i,n){if(i&&0!==i.length)for(const o of i){const i=CO.getLatestStats(this.userInfo.roomId,r?gO.STREAM_TYPE_AUX:gO.STREAM_TYPE_MAIN,"".concat(fC,"_").concat(o.cssrc));if(!i)continue;const s={streamId:o.trackId,bytesReceived:0,packetsReceived:0,packetsLost:0,framesDecoded:0,frameWidth:0,frameHeight:0,frameRate:0,frameDropped:0};if(s.bytesReceived=XR.getValue(i.bytesReceived,0),s.packetsReceived=XR.getValue(i.packetsReceived,0),s.packetsLost=XR.getValue(i.packetsLost,0),s.framesDecoded=XR.getValue(i.framesDecoded,0),s.frameDropped=XR.getValue(i.framesDropped,0),s.frameRate=XR.getValue(i.framesPerSecond,0),s.frameWidth=i.frameWidth,s.frameHeight=i.frameHeight,this.connectionsManager.calcChangedStatistic(i.id,s,["bytesReceived","packetsReceived","packetsLost","framesDecoded"]),s.frameWidth&&s.frameHeight){const e=i.trackId;if(e){const t=CO.getLatestStats(this.userInfo.roomId,r?gO.STREAM_TYPE_AUX:gO.STREAM_TYPE_MAIN,e)||{frameWidth:0,frameHeight:0};s.frameWidth=t.frameWidth,s.frameHeight=t.frameHeight}}if(n.has(e))t===gO.STREAM_TYPE_AUX?n.get(e).subStream=s:n.get(e).mainStream.push(s);else{const r={mainStream:[],subStream:null};t===gO.STREAM_TYPE_AUX?r.subStream=s:r.mainStream.push(s),n.set(e,r)}}}async getDownloadStatistic(e){const t=new Map,r=this.remoteUserManager.getAllUserStreamsByType(this.roomId,null,e);for(const a of r)await this.getTrackDownloadStatistic([...a.mainStream.tracks,...a.auxStream.tracks],t);if(0===t.size)return this.downLinkData=null,-1;let i=0,n=0,o=0;for(const[a,c]of t)if(this.downLinkData&&this.downLinkData.has(a)){const e=c.packetsReceived-this.downLinkData.get(a).packetsReceived;e>0&&(n+=e,i+=Math.max(c.packetsLost-this.downLinkData.get(a).packetsLost,0),o+=Math.max(c.nackCount-this.downLinkData.get(a).nackCount,0))}else n+=c.packetsReceived,i+=c.packetsLost,o+=c.nackCount;let s=0;if(n<=0)s=-1;else{let e=1e3*this.connectionsManager.getConnectionRTT();e?this.pktsLostRate.preRTT=e:e=this.pktsLostRate.preRTT,s=e<=40?100*o/(o+n):e<=60?.9*o*100/(.9*o+n):e<=100?.8*o*100/(.8*o+n):e<=150?.7*o*100/(.7*o+n):.6*o*100/(.6*o+n),s=Math.min(Math.max(100*i/(i+n),s),100)}return this.downLinkData=t,this.logger.debug(CN,"downLinkData packetsLost:".concat(i,", packetsReceived:").concat(n,",rate:").concat(s)),s}async getTrackDownloadStatistic(e,t){for(const r of e){const e=r.type===mO.TRACK_TYPE_VIDEO?"".concat(fC):"".concat(hC),i=CO.getLatestStats(this.userInfo.roomId,r.streamType,"".concat(e,"_").concat(r.cssrc)),n={packetsReceived:0,packetsLost:0,nackCount:0};i&&(n.packetsReceived=XR.getValue(i.packetsReceived,0),n.packetsLost=XR.getValue(i.packetsLost,0),n.nackCount=XR.getValue(i.nackCount,0),this.connectionsManager.calcChangedStatistic(i.id,n),t.set(r.cssrc.toString(),n))}}static getSenderType(e,t){return"audio"===e||t&&t.sender?gO.STREAM_TYPE_MAIN:gO.STREAM_TYPE_AUX}async getUploadStatistic(t){var r,i;const n=this.streamPublishManager.getPublishedMainVideoTrackInfo(),o=this.streamPublishManager.getPublishedMainAudioTrackInfo(),s=this.streamPublishManager.getPublishedAuxVideoTrackInfo();if(!n&&!o&&!s)return-1;const a={packetsLost:0,packetsSent:0,fractionLost:0},c=t===mO.TRACK_TYPE_VIDEO?"".concat(mC):"".concat(pC),u=t===mO.TRACK_TYPE_VIDEO?(null==n?void 0:n.ssrc)||(null==s?void 0:s.ssrc):null==o?void 0:o.ssrc;if(u){const r=CO.getLatestStats(this.userInfo.roomId,e.getSenderType(t,n),"".concat(c,"_").concat(u));if(r&&(a.packetsSent=XR.getValue(r.packetsSent,0),r.remoteId)){const r=t===mO.TRACK_TYPE_VIDEO?"".concat(_C):"".concat(gC),i=CO.getLatestRemoteInboundStats(this.userInfo.roomId,e.getSenderType(t,n),"".concat(r,"_").concat(u));a.packetsLost=XR.getValue(null==i?void 0:i.packetsLost,0),a.fractionLost=XR.getValue(null==i?void 0:i.fractionLost,0)}}let d=0,l=0;this.upLinkData?(l=a.packetsSent-this.upLinkData.packetsSent,d=a.packetsLost-this.upLinkData.packetsLost):(l=a.packetsSent,d=a.packetsLost);const h=(null===(r=this.upLinkData)||void 0===r?void 0:r.deltaPacketsSend)||0,f=(null===(i=this.upLinkData)||void 0===i?void 0:i.deltaPacketsLost)||0;this.upLinkData=a,d<=0?(l=h||this.upLinkData.packetsSent,d=f||this.upLinkData.packetsLost):(this.upLinkData.deltaPacketsSend=l,this.upLinkData.deltaPacketsLost=d);const p=l>0?Math.max(d/l*100,100*(a.fractionLost||0)):-1;return this.logger.debug(CN,"upLinkData packetsLost:".concat(a.packetsLost," ").concat(d," ").concat(100*(a.fractionLost||0),", packetssend:").concat(l,", rate:").concat(p)),p}getConnectionState(){return this.connectState.curState}async getTransportStats(){const e=this.stat.getMediaStat().getTransportMediaStats(),t=this.streamPublishManager.getPublishedMainVideoTrackInfo();if(t){const r=CO.getLatestStats(this.userInfo.roomId,gO.STREAM_TYPE_MAIN,"".concat(_C,"_").concat(t.ssrc))||{};e.rtt=1e3*(r.roundTripTime||0)}else e.rtt=1e3*this.connectionsManager.getConnectionRTT();return e.upPktsLostRate=this.pktsLostRate.up,e.downPktsLostRate=this.pktsLostRate.down,e}transportStatsRegularReport(){clearTimeout(this.transportStatsTimer),this.transportStatsTimer=setTimeout((()=>{clearTimeout(this.transportStatsTimer),this.calcPktsLostRate().then((async()=>{const e=await this.getTransportStats();if(e.downVideoStreams=await this.getRemoteVideoStats(),this.predownVideoStreams)for(const a of e.downVideoStreams.keys()){var t;for(const t of(null===(r=e.downVideoStreams.get(a))||void 0===r?void 0:r.mainStream)||[]){var r,i;const e=((null===(i=this.predownVideoStreams.get(a))||void 0===i?void 0:i.mainStream)||[]).find((e=>e.streamId===t.streamId));t.bitrate=e?8*Math.max(t.bytesReceived-e.bytesReceived,0):t.bytesReceived,t.frameRate=t.frameRate||(e?Math.max(t.framesDecoded-e.framesDecoded,0):t.framesDecoded)}const o=null===(t=e.downVideoStreams.get(a))||void 0===t?void 0:t.subStream;if(o){var n;const e=null===(n=this.predownVideoStreams.get(a))||void 0===n?void 0:n.subStream;o.bitrate=e?8*Math.max(o.bytesReceived-e.bytesReceived,0):o.bytesReceived,o.frameRate=o.frameRate||(e?Math.max(o.framesDecoded-e.framesDecoded,0):o.framesDecoded)}}else for(const a of e.downVideoStreams.keys()){var o;for(const r of(null===(s=e.downVideoStreams.get(a))||void 0===s?void 0:s.mainStream)||[]){var s;r.bitrate=0}const t=null===(o=e.downVideoStreams.get(a))||void 0===o?void 0:o.subStream;t&&(t.bitrate=0)}this.predownVideoStreams=e.downVideoStreams,this.eventEmitter.emit(UC.TransportStats,e)})).finally(this.transportStatsRegularReport.bind(this,this.predownVideoStreams))}),1e3)}getICETransportStat(e){return this.connectionsManager.getICETransportStat(e)}cleanTransportStats(){this.stat.clearMediaStatBytes()}setNetworkBandwidth(e){if((null==e?void 0:e.maxBandwidth)PC.MAX_BAND_WIDTH)throw this.logger.info(CN,"MaxBandWidth Limits [3072Kpbs, 51200Kpbs]"),new qc(Gc.RTC_ERR_CODE_INVALID_PARAMETER);this.bandwidthParam={maxBandwidth:1e3*(null==e?void 0:e.maxBandwidth)||PC.DEFAULT_BANDWIDTH_4M}}async join(e,t){return await this.joinImpl(e,t)}async joinImpl(e,t){iE.addPrivacyString(null==t?void 0:t.userId),iE.addPrivacyString(null==t?void 0:t.userName),iE.addPrivacyString(null==t?void 0:t.signature),this.logger.info(CN,"join room roomId:".concat(e," userId:").concat(t.userId," role:").concat(t.role));const r=[];let i="";this.roomId=e;try{var n,o,s,a;if(this.status!==OC.Idle)throw this.logger.error(CN,"room status error!"),this.stat.reportJoinInfo(jC.ROOM_NOT_AVAILABLE,void 0,!1,void 0,"room status error!"),new qc(Gc.RTC_ERR_CODE_STATUS_ERROR);Zk.checkJoinParams(e,t),this.mainRelayRoomSymbol&&ED.roleValidCheck4RelayRoom(this,t.role);const c=uM.init(this.identifiedID,e,t);this.userInfo=c;const u=await this.accessManager.getAccessInfo(this.clientConfig.countryCode,r);this.stat.getMediaStat().setAudioPolicy(this.audioPolicy),this.stat.setLocalUserInfo(c),await this.locker.lock("".concat(CN,":joinImpl")),this.newSignal(u),this.signalEvent(),this.status=OC.Joining,i=await this.signal.connect(c,r),this.logger.info(CN,"joinImpl, actualAcsIp:".concat(i)),await this.waitNotifyConfig(r),await this.connectionsManager.initConnectionAndSdp(this.roomId,gO.STREAM_TYPE_MAIN,{onTrackHandler:this.onTrackHandler.bind(this)}),await this.connectionsManager.initConnectionAndSdp(this.roomId,gO.STREAM_TYPE_AUX,{onTrackHandler:this.onTrackHandler.bind(this)});const d=await this.connectionsManager.modifySdpInfo(gO.STREAM_TYPE_MAIN,this.cmdMsgAbility.enable),l=await this.connectionsManager.modifySdpInfo(gO.STREAM_TYPE_AUX),h=await this.signal.join(this.userInfo,d,l,this.audioPolicy,null===(n=this.bandwidthParam)||void 0===n?void 0:n.maxBandwidth,this.connectionsManager.getPortType(),this.cmdMsgAbility.enable,this.sfuConfigs);!this.clientConfig.countryCode&&h.countryCode&&this.accessManager.setOpsUrl(h.countryCode),this.sdpRepInfo=h.sdp,h.userInfos.forEach((e=>{this.stat.getMediaStat().setEncryInfo(e.userId,e.userEid)})),null!=h&&h.userEid&&this.stat.getMediaStat().setEncryInfo(this.userInfo.userId,h.userEid.toString());const f=String(h.roomUid);this.stat.setRoomUid(f);const p=null===(o=h.roomStreamStatus)||void 0===o?void 0:o.audience;let m;m=this.audioPolicy===_O.TOPN_AUDIOPOLICY?async e=>{let{remoteDescription:t,bindCryptoKey:r,wsUrl:i,dataChannelEnable:n}=e;return await this.negTransportChannelHandler(h,r,i,n),p===YC.PAUSE&&this.userInfo.role===nM?{answerSdp:t}:await this.addSsrc4Top3(t)}:async e=>{let{remoteDescription:t,bindCryptoKey:r,wsUrl:i,dataChannelEnable:n}=e;return await this.negTransportChannelHandler(h,r,i,n),{answerSdp:t}};const g=null===(s=h.negSdp.find((e=>e.type===RM.MAIN)))||void 0===s?void 0:s.sdp,_=null===(a=h.negSdp.find((e=>e.type===RM.DESKTOP)))||void 0===a?void 0:a.sdp;this.connectionsManager.setSsrcsMapping(this.sdpRepInfo),await this.connectionsManager.handleAnswerSdpFromServer(gO.STREAM_TYPE_MAIN,g,m),await this.connectionsManager.handleAnswerSdpFromServer(gO.STREAM_TYPE_AUX,_),await this.handleRoomStreamStatus(p),this.upStreamData=h.userInfos.find((e=>{var t;return e.userId===(null===(t=this.userInfo)||void 0===t?void 0:t.userId)})),this.remoteUserManager.initialize(this.userInfo.userId,h.sdp),this.stat.setSFUAddress(this.connectionsManager.getSfuInfoFromSdp(g,_)),this.signal.keepAlive(),this.status=OC.Joined,this.logger.info(CN,"join room success"),this.streamPublishManager.setSdpRepInfo(this.sdpRepInfo),this.statJoinRoomInfo(i,!1,r),this.cleanNetworkStatistic(),this.netQualityRegularReport(),this.cleanTransportStats(),this.transportStatsRegularReport(),this.setAudioLevelStatTimer(),ED.addConnectionCache(this.mainRelayRoomSymbol||this.clientSymbol,this.roomId,this),await this.doRefreshRoomUserInfos(this.userInfo.roomId,h.userInfos,!1),this.locker.unlock("".concat(CN,":joinImpl"))}catch(jN){throw this.locker.unlock("".concat(CN,":joinImpl")),this.logger.error(CN,"join occur error: ".concat(jN)),this.cleanup(),this.stat.reportJoinInfo(null==jN?void 0:jN.code,i,!1,r,null==jN?void 0:jN.message),await TD.uploadLogFile(this),jN}}reportLogs(){TD.uploadLogFile(this).then((()=>{this.eventEmitter.emit(UC.LogUploaded,{status:200})})).catch((e=>{this.logger.error(CN,"reportLogs occur error: ".concat(e)),this.eventEmitter.emit(UC.LogUploaded,{status:500})}))}statJoinRoomInfo(e,t,r){this.stat.reportJoinInfo(0,e,t,r,""),this.stat.getMediaStat().setConnectionsManager(this.connectionsManager),CO.addConnection(this.userInfo.roomId,this.connectionsManager),this.stat.getMediaStat().setLocalMainStreamInfo(this.userInfo.userId,this.streamPublishManager.getPublishedMainStreamInfos()),this.stat.getMediaStat().setLocalAuxsStreamInfo(this.userInfo.userId,this.streamPublishManager.getPublishedAuxStreamInfo()),this.stat.startMediaCollector()}async enableRtcStats(e,t){return await this.enableRtcStatsImpl(e,t)}async enableRtcStatsImpl(e,t){if(this.status!==OC.Joined)throw this.logger.error(CN,"cannot enableRtcStats before join room"),new qc(Gc.RTC_ERR_CODE_INVALID_OPERATION,"cannot enableRtcStats before join room");if(!e)return clearTimeout(this.rtcStatsInterval),this.rtcStatsInterval=null,void this.logger.info(CN,"enableRtcStats is disable");if(!Number.isInteger(t)||t<100)throw this.logger.error(CN,"invalid interval"),new qc(Gc.RTC_ERR_CODE_INVALID_PARAMETER);if(e&&this.rtcStatsInterval)throw this.logger.error(CN,"enableRtcStats has been invoked, no need do again"),new qc(Gc.RTC_ERR_CODE_INVALID_OPERATION,"enableRtcStats has been invoked, no need do again");return this.rtcStatsCriterion=t,this.doEnableRtcStats()}async doEnableRtcStats(){let e=0;const t=()=>{this.rtcStatsInterval=setTimeout((async()=>{const r=(await this.stat.buildRtcStatsDebugInfo(this.rtcStatsCriterion/1e3)).mediaStatsDebugInfo;this.doTriggerRtcStats(r,e),e++,t()}),0===e?0:this.rtcStatsCriterion)};t()}doTriggerRtcStats(e,t){if(0===t)return;if(!e||0==e.length)return;const r=[];e.forEach((e=>{if(!e.event)return;const t=e.streams||[];switch(e.event){case ZC.QoS_UP_STREAM_VIDEO:this.addRtcStatInfos(t,!1,mO.TRACK_TYPE_VIDEO,r);break;case ZC.QoS_UP_STREAM_AUDIO:this.addRtcStatInfos(t,!1,mO.TRACK_TYPE_AUDIO,r,CC.main);break;case ZC.QoS_AUX_UP_STREAM_VIDEO:this.addRtcStatInfos(t,!1,mO.TRACK_TYPE_VIDEO,r,CC.desktop);break;case ZC.QoS_DOWN_STREAM_VIDEO:this.addRtcStatInfos(t,!0,mO.TRACK_TYPE_VIDEO,r);break;case ZC.QoS_DOWN_STREAM_AUDIO:this.addRtcStatInfos(t,!0,mO.TRACK_TYPE_AUDIO,r,CC.main);break;case ZC.QoS_AUX_DOWN_STREAM_VIDEO:this.addRtcStatInfos(t,!0,mO.TRACK_TYPE_VIDEO,r,CC.desktop);break;default:this.logger.debug(CN,"".concat(e.event," no need stats"))}})),this.connectState.curState===vC[yC.CONNECTED]&&r.length>0&&this.eventEmitter.emit(UC.RtcStats,r)}addRtcStatInfos(e,t,r,i,n){let o={};const s=this.userInfo.userName||this.userInfo.userId;for(let v=0;v{this.logger.info(CN,"leave room"),this.status!==OC.Joined&&this.status!==OC.Rejoining?t(new qc(Gc.RTC_ERR_CODE_STATUS_ERROR)):(this.status=OC.Leaving,this.signal.leave().then((r=>{if(r instanceof qc)return this.stat.reportLeavInfo(FC.LEAVE_ROOM_ERROR),this.stat.getMediaStat().clearEncryUserId(),void t(r);this.doLeaveRoom(),this.stat.reportLeavInfo(FC.LEAVE_ROOM_SUCCESS),this.stat.getMediaStat().clearEncryUserId(),this.stopStreamResolutionDetection(),this.logger.info(CN,"leave success"),e()})))}))}doLeaveRoom(){this.cleanup(),this.cleanTransportStats(),this.stat.leaveRoom(),nO.immediateReportRecords(),this.roomStreamStatus={}}resetConnection(){const e=[],t=this.streamPublishManager.getPublishedMainVideoTrackInfo();t&&e.push(t.sender);const r=this.streamPublishManager.getPublishedMainAudioTrackInfo();r&&e.push(r.sender),this.connectionsManager.destroyPeerConnection(gO.STREAM_TYPE_MAIN,e);const i=this.streamPublishManager.getPublishedAuxVideoTrackInfo();this.connectionsManager.destroyPeerConnection(gO.STREAM_TYPE_AUX,i?[i.sender]:[])}async rejoin(e,t){this.logger.info(CN,"rejoin room roomId:".concat(e," JoinConfig:").concat(JSON.stringify(t)));const r=[];let i="";this.roomId=e;try{var n,o,s,a;Zk.checkJoinParams(e,t),this.mainRelayRoomSymbol&&ED.roleValidCheck4RelayRoom(this,t.role);const c=uM.init(this.identifiedID,e,t);if(this.userInfo=c,this.stat.setLocalUserInfo(c),this.resetConnection(),this.streamPublishManager.reset(),clearTimeout(this.netQualityTimer),clearTimeout(this.transportStatsTimer),this.signal)this.signal.reset();else{const e=await this.accessManager.getAccessInfo(this.clientConfig.countryCode,r);this.newSignal(e),this.signalEvent()}this.status=OC.Joining,i=await this.signal.connect(c,r),this.logger.info(CN,"rejoin, actualAcsIp:".concat(i)),await this.waitNotifyConfig(r),await this.connectionsManager.initConnectionAndSdp(this.roomId,gO.STREAM_TYPE_MAIN,{onTrackHandler:this.onTrackHandler.bind(this)}),await this.connectionsManager.initConnectionAndSdp(this.roomId,gO.STREAM_TYPE_AUX,{onTrackHandler:this.onTrackHandler.bind(this)});const u=await this.connectionsManager.modifySdpInfo(gO.STREAM_TYPE_MAIN,this.cmdMsgAbility.enable),d=await this.connectionsManager.modifySdpInfo(gO.STREAM_TYPE_AUX),l=await this.signal.join(this.userInfo,u,d,this.audioPolicy,null===(n=this.bandwidthParam)||void 0===n?void 0:n.maxBandwidth,this.connectionsManager.getPortType(),this.cmdMsgAbility.enable,this.sfuConfigs);!this.clientConfig.countryCode&&l.countryCode&&this.accessManager.setOpsUrl(l.countryCode),this.sdpRepInfo=l.sdp,l.userInfos.forEach((e=>{this.stat.getMediaStat().setEncryInfo(e.userId,e.userEid)})),null!=l&&l.userEid&&this.stat.getMediaStat().setEncryInfo(this.userInfo.userId,l.userEid.toString());const h=String(l.roomUid);this.stat.setRoomUid(h);const f=null===(o=l.roomStreamStatus)||void 0===o?void 0:o.audience;let p;p=this.audioPolicy===_O.TOPN_AUDIOPOLICY?async e=>{let{remoteDescription:t,bindCryptoKey:r,wsUrl:i,dataChannelEnable:n}=e;return await this.negTransportChannelHandler(l,r,i,n),f===YC.PAUSE&&this.userInfo.role===nM?{answerSdp:t}:await this.addSsrc4Top3(t)}:async e=>{let{remoteDescription:t,bindCryptoKey:r,wsUrl:i,dataChannelEnable:n}=e;return await this.negTransportChannelHandler(l,r,i,n),{answerSdp:t}};const m=null===(s=l.negSdp.find((e=>e.type===RM.MAIN)))||void 0===s?void 0:s.sdp,g=null===(a=l.negSdp.find((e=>e.type===RM.DESKTOP)))||void 0===a?void 0:a.sdp;this.connectionsManager.setSsrcsMapping(this.sdpRepInfo),await this.connectionsManager.handleAnswerSdpFromServer(gO.STREAM_TYPE_MAIN,m,p),await this.connectionsManager.handleAnswerSdpFromServer(gO.STREAM_TYPE_AUX,g),await this.handleRoomStreamStatus(f),this.upStreamData=l.userInfos.find((e=>{var t;return e.userId===(null===(t=this.userInfo)||void 0===t?void 0:t.userId)})),this.remoteUserManager.initialize(this.userInfo.userId,l.sdp),this.stat.setSFUAddress(this.connectionsManager.getSfuInfoFromSdp(m,g)),this.signal.keepAlive(),this.status=OC.Joined,this.localRejoinFlag=!0,this.streamPublishManager.setSdpRepInfo(this.sdpRepInfo),this.statJoinRoomInfo(i,!0,r),this.cleanNetworkStatistic(),this.netQualityRegularReport(),this.cleanTransportStats(),this.transportStatsRegularReport(),this.setAudioLevelStatTimer(),ED.addConnectionCache(this.mainRelayRoomSymbol||this.clientSymbol,this.roomId,this),await this.doRefreshRoomUserInfos(this.userInfo.roomId,l.userInfos,!0),this.logger.info(CN,"rejoin, rejoin room success")}catch(jN){throw this.logger.error(CN,"rejoin room fail, error:".concat(jN)),this.stat.reportJoinInfo(null==jN?void 0:jN.code,i,!0,r,null==jN?void 0:jN.message),await TD.uploadLogFile(this),jN}}async changeStreamMuteStatusNotify(e,t,r,i){const n={"x-nuwa-trace-id":XR.generateRandomId(32,16),"x-nuwa-span-id":XR.generateRandomId(16,16),videoStreams:[]};if(t===mO.TRACK_TYPE_VIDEO){const t={ssrc:0,mute:e};if(r===CC.desktop)t.ssrc=this.sdpRepInfo.desktopVideo.sendSsrcBegin;else if(t.ssrc=this.sdpRepInfo.video.sendSsrcBegin,i){const t={ssrc:this.sdpRepInfo.video.sendSsrcEnd,mute:e};n.videoStreams.push(t)}n.videoStreams.push(t)}else{const t={ssrc:this.sdpRepInfo.audio.sendSsrcBegin,mute:e};n.audioStreams=[t]}await this.signal.changeStreamStatus(n)}async setSendBitrate(e,t,r){if(!e)return void this.logger.info(CN,"sender is null");if("function"!=typeof e.getParameters)return void this.logger.info(CN,"sender not support getParameters");if("function"!=typeof e.setParameters)return void this.logger.info(CN,"sender not support setParameters");const i=e.getParameters();i.encodings.length<=0?this.logger.info(CN,"sender has no track, can not set maxBitRate"):(i.encodings[0].maxBitrate=t,await e.setParameters(i),this.logger.info(CN,"success set ".concat(r," sender maxBitrate: ").concat(t)))}static judgeNetworkQuality(e){return-1===e?yO.NETWORK_QUALITY_UNKNOW:e<1?yO.NETWORK_QUALITY_GREAT:e<3?yO.NETWORK_QUALITY_GOOD:e<6?yO.NETWORK_QUALITY_DEFECTS:e<12?yO.NETWORK_QUALITY_WEAK:e<20?yO.NETWORK_QUALITY_BAD:yO.NETWORK_QUALITY_DISCONNECT}async calcPktsLostRate(){const e=this.connectionsManager.getConnection(gO.STREAM_TYPE_MAIN);if(!e||["disconnected","failed","closed"].includes(e.connectionState))return;let t=await this.getUploadStatistic("video");if(t<0&&(t=await this.getUploadStatistic("audio")),this.pktsLostRate.up=Math.round(t),t=await this.getDownloadStatistic(mO.TRACK_TYPE_VIDEO),t<0&&(t=await this.getDownloadStatistic(mO.TRACK_TYPE_AUDIO)),t<0)return void(this.pktsLostRate.down=-1);this.pktsLostRate.preDownRate.push(t),this.pktsLostRate.preDownRate.length>3&&this.pktsLostRate.preDownRate.splice(0,1);const r=this.smoothData(this.pktsLostRate.preDownRate,.9);this.pktsLostRate.down=Math.round(r[r.length-1])}smoothData(e,t){const r=e=>e.reduce((function(e,t){return e+t}),0)/e.length,i=r(e)*t,n=[];for(let o=0;o0?n[o-1]:e[e.length-1],a=o{clearTimeout(this.netQualityTimer);let t={uploadPkgLoss:0,downloadPkgLoss:0};try{const r=this.connectionsManager.getConnection(gO.STREAM_TYPE_MAIN);if(r&&!["disconnected","failed","closed"].includes(r.connectionState)||(t={uploadPkgLoss:yO.NETWORK_QUALITY_DISCONNECT,downloadPkgLoss:yO.NETWORK_QUALITY_DISCONNECT}),t.uploadPkgLoss=e.judgeNetworkQuality(this.pktsLostRate.up),t.downloadPkgLoss=e.judgeNetworkQuality(this.pktsLostRate.down),!this.preNetQuality||this.preNetQuality.uploadPkgLoss!==t.uploadPkgLoss||this.preNetQuality.downloadPkgLoss!==t.downloadPkgLoss){const e={uplinkNetworkQuality:t.uploadPkgLoss,downlinkNetworkQuality:t.downloadPkgLoss};this.logger.info(CN,"emit:".concat(UC.NetworkQuality,", quality:").concat(JSON.stringify(e))),this.eventEmitter.emit(UC.NetworkQuality,e),this.preNetQuality=t}}finally{this.netQualityRegularReport.bind(this)}}),2e3)}validatePublishRequest(e){if(this.status!==OC.Joined)throw this.logger.error(CN,"can not publish stream before join room"),new qc(Gc.RTC_ERR_CODE_INVALID_OPERATION,"can not publish stream before join room");if(this.userInfo.role===nM)throw this.logger.error(CN,"the player role can not publish stream"),new qc(Gc.RTC_ERR_CODE_INVALID_OPERATION,"the player role can not publish stream");if(!e)throw this.logger.error(CN,"stream is null"),new qc(Gc.RTC_ERR_CODE_INVALID_PARAMETER);if(e.hasAudioTrack()||e.hasVideoTrack()||this.logger.warn(CN,"stream has no audio and video"),"local"!==e.getType())throw this.logger.error(CN,"stream type: ".concat(e.getType()," cannot publish")),new qc(Gc.RTC_ERR_CODE_INVALID_OPERATION,"stream type: ".concat(e.getType()," cannot publish"))}async publish(e,t){try{return await this.publishImpl(e,t),void(e.isAuxiliary()&&this.stat.reportAuxiliaryStreamShareInfo(HC.ACTION_START,KC.RESULT_SUCCESS))}catch(Aw){throw e.isAuxiliary()&&this.stat.reportAuxiliaryStreamShareInfo(HC.ACTION_START,KC.RESULT_ERROR),Aw}}async publishImpl(e,t){try{if(!e)throw new qc(Gc.RTC_ERR_CODE_INVALID_PARAMETER,"stream is null");if(await this.publishStream(e,t),!e.isAuxiliary()){if(this.stat.getMediaStat().setLocalMainStreamInfo(this.userInfo.userId,this.streamPublishManager.getPublishedMainStreamInfos())&&(e.hasAudioTrack()&&this.buildSendMediaStreamInfo(TC.Audio),t&&e.hasVideoTrack())){const e=this.streamPublishManager.getPublishedMainVideoTrackInfos().map((e=>e.ssrc));this.buildSendMediaStreamInfo(TC.Video,e)}}}catch(jN){throw this.logger.error(CN,"publishImpl fail, errMsg = ".concat(jN)),jN}}async publishStream(e,t){this.logger.info(CN,"publish ".concat(e.isAuxiliary()?"aux":"main"," stream")),this.validatePublishRequest(e);const r=e,i=this.streamPublishManager.generatePubInfoWhenPublish(r,t);await this.sendPublishRequest(i.allTracks2Publish),await this.updateStreamTracks(r,i),this.startStreamResolutionDetection(r),r.addClient(this)}async sendPublishRequest(e){e&&await this.sendPublishReq(e)}startStreamResolutionDetection(e){var t;if(!e||Cw.isFirefox())return;const r=e.isAuxiliary();!r&&this.resolutionChangeInfo.mainResolutionChangeTimer&&(clearInterval(this.resolutionChangeInfo.mainResolutionChangeTimer),this.resolutionChangeInfo.mainResolutionChangeTimer),r&&this.resolutionChangeInfo.auxResolutionChangeTimer&&(clearInterval(this.resolutionChangeInfo.auxResolutionChangeTimer),this.resolutionChangeInfo.auxResolutionChangeTimer=null),this.logger.info(CN,"startStreamResolutionDetection isAuxiliary: ".concat(r));const i=r?this.streamPublishManager.getLocalStream(gO.STREAM_TYPE_AUX):null===(t=this.streamPublishManager)||void 0===t?void 0:t.getLocalStream(gO.STREAM_TYPE_MAIN);if(i)try{this.resolutionChangeInfo[r?"auxResolutionChangeTimer":"mainResolutionChangeTimer"]=setInterval((async()=>{const e=this.streamPublishManager.getStreamTrackInfo(i),t={"x-nuwa-trace-id":XR.generateRandomId(32,16),"x-nuwa-span-id":XR.generateRandomId(16,16),videoStreams:[]};for(const n of e){if("audio"===n.type)return;if(!(r?CO.getLatestValue(this.userInfo.roomId,gO.STREAM_TYPE_AUX,"".concat(mC,"_").concat(n.upstream.ssrc),"packetsSent"):CO.getLatestValue(this.userInfo.roomId,gO.STREAM_TYPE_MAIN,"".concat(mC,"_").concat(n.upstream.ssrc),"packetsSent")))continue;const e={resolutionId:n.resolutionId,content:n.upstream.content,streamUid:n.upstream.streamUid,ssrc:n.upstream.ssrc,mute:n.upstream.mute,width:0,height:0};this.resolutionChangeInfo.preVideoHeight.has(e.resolutionId)||this.resolutionChangeInfo.preVideoHeight.set(e.resolutionId,i.getVideoHeight(e.resolutionId));let o=!1;r?(e.height=CO.getLatestValue(this.userInfo.roomId,gO.STREAM_TYPE_AUX,"".concat(mC,"_").concat(e.ssrc),"frameHeight"),e.width=CO.getLatestValue(this.userInfo.roomId,gO.STREAM_TYPE_AUX,"".concat(mC,"_").concat(e.ssrc),"frameWidth")):(e.height=CO.getLatestValue(this.userInfo.roomId,gO.STREAM_TYPE_MAIN,"".concat(mC,"_").concat(e.ssrc),"frameHeight"),e.width=CO.getLatestValue(this.userInfo.roomId,gO.STREAM_TYPE_MAIN,"".concat(mC,"_").concat(e.ssrc),"frameWidth")),o=Math.abs(this.resolutionChangeInfo.preVideoHeight.get(e.resolutionId)-e.height)/this.resolutionChangeInfo.preVideoHeight.get(e.resolutionId)>.1,o&&(t.videoStreams.push(e),this.resolutionChangeInfo.preVideoHeight.set(e.resolutionId,e.height))}t.videoStreams.length>0&&await this.signal.changeStreamStatus(t)}),5e3)}catch(jN){throw this.logger.error(CN,"startStreamResolutionDetection, occur error: ".concat(jN)),jN}}stopStreamResolutionDetection(e){var t;if(!e)return clearInterval(this.resolutionChangeInfo.mainResolutionChangeTimer),this.resolutionChangeInfo.mainResolutionChangeTimer=null,clearInterval(this.resolutionChangeInfo.auxResolutionChangeTimer),this.resolutionChangeInfo.auxResolutionChangeTimer=null,void this.resolutionChangeInfo.preVideoHeight.clear();e.isAuxiliary()?(clearInterval(this.resolutionChangeInfo.auxResolutionChangeTimer),this.resolutionChangeInfo.auxResolutionChangeTimer=null):(clearInterval(this.resolutionChangeInfo.mainResolutionChangeTimer),this.resolutionChangeInfo.mainResolutionChangeTimer=null),null===(t=e.getStreamInfo().videoProfiles)||void 0===t||t.forEach((e=>this.resolutionChangeInfo.preVideoHeight.delete(e.resolutionId)))}async updateStreamTracks(e,t){if(!e)return;const r=e.isAuxiliary();t.tracks2UnPublish&&0!==t.tracks2UnPublish.length||t.tracks2NewPublish&&0!==t.tracks2NewPublish.length?r?await this.updateAuxStreamTrack(e,t):await this.updateMainStreamTrack(e,t):this.logger.info(CN,"update ".concat(r?"aux":"main"," streamTracks, no new publish and unpublish, so no need update sdp"))}async updateMainStreamTrack(e,t){const r=t.tracks2UnPublish.filter((e=>e.type===mO.TRACK_TYPE_VIDEO)),i=this.removeTracksWhenPublish(r),n=t.tracks2UnPublish.filter((e=>e.type===mO.TRACK_TYPE_AUDIO)),o=this.removeTracksWhenPublish(n),s=o.length>0?o[0]:null,a=t.tracks2NewPublish.filter((e=>e.type===mO.TRACK_TYPE_VIDEO)),c=await this.addVideoTracksWhenPublish(e,a),u=t.tracks2NewPublish.filter((e=>e.type===mO.TRACK_TYPE_AUDIO)),d=await this.addAudioTrackWhenPublish(e,u),l=t.tracks2KeepPublish.filter((e=>e.type===mO.TRACK_TYPE_AUDIO)),h=this.getKeepAudioTrackSsrcSender(l),f=t.tracks2KeepPublish.filter((e=>e.type===mO.TRACK_TYPE_VIDEO)),p=this.getKeepVideoTracksSsrcSender(f);await this.generateNewOfferSdp(h,d,p,c,i,s),u.length>0&&await this.sendAudioMedia(e,d),a.length>0&&await this.sendVideoMedia(e,c),null==r||r.forEach((e=>{this.streamPublishManager.unPublishTrackSuccess(gO.STREAM_TYPE_MAIN,mO.TRACK_TYPE_VIDEO,e.upstream.streamUid.toString())})),null==n||n.forEach((e=>{this.streamPublishManager.unPublishTrackSuccess(gO.STREAM_TYPE_MAIN,mO.TRACK_TYPE_AUDIO,e.upstream.streamUid.toString())}))}async updateAuxStreamTrack(e,t){if(t.tracks2NewPublish&&t.tracks2NewPublish.length>0){const r=t.tracks2NewPublish&&t.tracks2NewPublish.filter((e=>e.type===mO.TRACK_TYPE_VIDEO))[0].ssrc,i=await this.connectionsManager.addTrack(gO.STREAM_TYPE_AUX,e.getVideoTrack(),e.getMediaStream());await this.connectionsManager.modifyPublishOfferSdp(gO.STREAM_TYPE_AUX,this.userInfo.userId,[r]),this.logger.info(CN,"aux send bitrate ".concat(e.getScreenSendBitrate())),await this.setSendBitrate(i,e.getScreenSendBitrate(),"auxVideo"),this.streamPublishManager.publishAuxVideoTrackOK(i,r);const n=this.streamPublishManager.getLocalStream(gO.STREAM_TYPE_AUX);n&&(n.off(eC,this.addLocalAuxStreamEndedHandler.bind(this)),n.on(eC,this.addLocalAuxStreamEndedHandler.bind(this))),await e.resumeMixScreenAudio()}else{const r=t.tracks2UnPublish;let i=0;r.forEach((e=>{i=e.ssrc,this.connectionsManager.removeTrack(gO.STREAM_TYPE_AUX,e.sender)})),await this.connectionsManager.modifyPublishOfferSdp(gO.STREAM_TYPE_AUX,this.userInfo.userId,[],0,[i]),await e.stopMixScreenAudio()}}async sendAudioMedia(e,t){if(t)try{await this.setSendBitrate(t.sender,e.getAudioSendBitrate(),"audio"),this.streamPublishManager.publishMainAudioTrackOK(t.sender,t.ssrc),this.logger.info(CN,"sendAudioMedia, send audio media successfully")}catch(jN){throw this.logger.error(CN,"sendAudioMedia, occur error: ".concat(jN)),jN}}async sendVideoMedia(e,t){if(0!==t.length)try{const r=[];t.forEach((t=>{r.push(this.setSendBitrate(t.sender,e.getVideoMaxSendBitrate(t.resolutionId),"mainVideo"))})),await Promise.all(r).then((()=>{t.forEach((e=>{this.streamPublishManager.publishMainVideoTrackOK(e.sender,e.ssrc,e.streamId)}))})),this.logger.info(CN,"sendVideoMedia, send video media successfully")}catch(jN){throw this.logger.error(CN,"sendVideoMedia, occur error: ".concat(jN)),jN}}async generateNewOfferSdp(e,t,r,i,n,o){try{const s=[];r.forEach((e=>s.push(e.ssrc))),i.forEach((e=>s.push(e.ssrc)));const a=t?t.ssrc:e?e.ssrc:null,c=[];n.forEach((e=>c.push(e.ssrc)));const u=o?o.ssrc:null,d=await this.connectionsManager.modifyPublishOfferSdp(gO.STREAM_TYPE_MAIN,this.userInfo.userId,s,a,c,u);return this.logger.info(CN,"generateNewOfferSdp successfully"),d}catch(jN){throw this.logger.error(CN,"generateNewOfferSdp, occur error: ".concat(jN)),jN}}async sendPublishReq(e){try{const t=[];e.forEach((e=>{t.push(e.upstream),this.logger.info(CN,"prepare to send publish req, streamId:".concat(e.upstream.streamUid))})),await this.signal.publish(t),this.logger.info(CN,"sendPublishReq successfully")}catch(jN){throw this.logger.error(CN,"sendPublishReq, occur error: ".concat(jN)),jN}}async addVideoTracksWhenPublish(e,t){if(0===t.length)return[];try{const r=[];for(const i of t){const t=e.getVideoTrack(i.resolutionId),n=i.ssrc,o=await this.connectionsManager.addTrack(gO.STREAM_TYPE_MAIN,t,e.getMediaStream(),n);r.push({ssrc:n,sender:o,streamId:i.upstream.streamUid.toString(),resolutionId:i.resolutionId}),this.logger.info(CN,"addVideoTracksWhenPublish, add video track of resolutionId:".concat(i.resolutionId,",")+"physical track id:".concat(t.id,", streamId: ").concat(i.upstream.streamUid," with ssrc: ").concat(n," to connection successfully"))}return r}catch(jN){throw this.logger.error(CN,"addVideoTracksWhenPublish, occur error: ".concat(jN)),jN}}async addAudioTrackWhenPublish(e,t){if(0===t.length)return null;try{const r=e.getPublishAudioTrack(),i=t[0].ssrc,n={ssrc:i,sender:await this.connectionsManager.addTrack(gO.STREAM_TYPE_MAIN,r,e.getMediaStream()),streamId:t[0].upstream.streamUid.toString(),resolutionId:null};return this.logger.info(CN,"addAudioTrackWhenPublish, add audio track for streamId: ".concat(t[0].upstream.streamUid,",")+"physical track id:".concat(null==r?void 0:r.id," to connection successfully")),n}catch(jN){throw this.logger.error(CN,"addAudioTrackWhenPublish, occur error: ".concat(jN)),jN}}removeTracksWhenPublish(e){if(0===e.length)return[];try{const t=[];return e.forEach((e=>{this.connectionsManager.removeTrack(gO.STREAM_TYPE_MAIN,e.sender),t.push({ssrc:e.ssrc,sender:e.sender,streamId:e.upstream.streamUid.toString(),resolutionId:e.resolutionId}),this.logger.info(CN,"removeTracksWhenPublish, remove ".concat(e.type," track for streamId: ").concat(e.upstream.streamUid," to connection successfully"))})),t}catch(jN){throw this.logger.error(CN,"removeTracksWhenPublish, occur error: ".concat(jN)),jN}}getKeepAudioTrackSsrcSender(e){const t=[];return e.forEach((e=>{t.push({ssrc:e.ssrc,sender:e.sender,streamId:e.upstream.streamUid.toString(),resolutionId:e.resolutionId})})),t.length>0?t[0]:null}getKeepVideoTracksSsrcSender(e){const t=[];return e.forEach((e=>{t.push({ssrc:e.ssrc,sender:e.sender,streamId:e.upstream.streamUid.toString(),resolutionId:e.resolutionId})})),t}buildSendMediaStreamInfo(e,t){switch(e){case TC.Aux:{const e=this.streamPublishManager.generateAuxOptTag();e&&this.stat.reportStartSendMediaStream(WC.AUX,e);break}case TC.Video:{const e=this.streamPublishManager.generateMainVideoOptTags();e&&e.length>0&&e.forEach((e=>{t.find((t=>-1!=e.indexOf("".concat(t))))&&this.stat.reportStartSendMediaStream(WC.VIDEO,e)}));break}case TC.Audio:{const e=this.streamPublishManager.generateMainAudioOptTag();e&&this.stat.reportStartSendMediaStream(WC.AUDIO,e);break}}}async unpublish(e){try{return await this.unpublishImpl(e),e.isAuxiliary()&&this.stat.reportAuxiliaryStreamShareInfo(HC.ACTION_STOP,KC.RESULT_SUCCESS),void this.stopStreamResolutionDetection(e)}catch(Aw){throw e.isAuxiliary()&&this.stat.reportAuxiliaryStreamShareInfo(HC.ACTION_STOP,KC.RESULT_ERROR),Aw}}async unpublishImpl(e){if(this.userInfo.role===nM)throw this.logger.error(CN,"the player role can not unpublish stream"),new qc(Gc.RTC_ERR_CODE_INVALID_OPERATION,"the player role can not unpublish stream");if(!e)throw this.logger.error(CN,"stream is null"),new qc(Gc.RTC_ERR_CODE_INVALID_PARAMETER);if("local"!==e.getType())throw this.logger.error(CN,"stream type: ".concat(e.getType()," cannot unpublish")),new qc(Gc.RTC_ERR_CODE_INVALID_OPERATION,"stream type: ".concat(e.getType()," cannot unpublish"));try{await this.locker.lock("".concat(CN,":unpublishImpl")),await this.unPublishStream(e)}finally{this.locker.unlock("".concat(CN,":unpublishImpl"))}}async unPublishStream(e){await this.unpublishSteamAndSignalIfNeed(e,this.sendPublishRequest.bind(this))}async unpublishSteamAndSignalIfNeed(e,t){const r=e.isAuxiliary(),i=r?"aux":"main";try{this.logger.info(CN,"unpublish ".concat(i," stream:").concat(e.getId()));const n=e,o=this.streamPublishManager.generatePubInfoWhenUnPublish(n);t&&await t(o.allTracks2Publish),await this.startStreamResolutionDetection(n),await this.updateStreamTracks(n,o),n.removeClient(this),r?this.streamPublishManager.unPublishAuxStreamOK():this.streamPublishManager.unPublishMainStreamOK(),this.logger.info(CN,"unpublish ".concat(i,"stream success: ").concat(e.getId()))}catch(jN){throw this.logger.error(CN,"unpublish ".concat(i," stream, ").concat(e.getId()," occur error: ").concat(jN)),jN}}async rejoinPublishStreams(e){let t=[];for(const r of e){this.logger.info(CN,"rejoin publish ".concat(r.isAuxiliary()?"aux":"main"," stream"));const e=r;e.removeClient(this),this.validatePublishRequest(r);const i=this.streamPublishManager.generatePubInfoWhenPublish(e);await this.updateStreamTracks(e,i),e.addClient(this),t=[...t,...i.allTracks2Publish]}t=[...new Set(t)],await this.sendPublishRequest(t);for(const r of e){const e=r;await this.startStreamResolutionDetection(e)}}addLocalAuxStreamEndedHandler(e){this.streamPublishManager.isAuxVideoTrackValid(e)&&this.unpublish(this.streamPublishManager.getLocalStream(gO.STREAM_TYPE_AUX))}async subscribeAudio(e){return await this.subscribeAudioImpl(e)}async subscribeAudioImpl(e){if(!e)throw this.logger.error(CN,"subscribeAudioImpl, userId is null"),new qc(Gc.RTC_ERR_CODE_INVALID_PARAMETER,"userId is null");const t=new rM({type:"main",log:this.logger,userId:e,client:this,roomId:this.roomId});this.logger.info(CN,"subscribeAudioImpl begin, userId:".concat(e)),await this.subscribeImpl(t,{audio:!0,video:!1});const r=this.remoteUserManager.getUserInfoById(e,this.roomId);if(r){let e=!1;for(const t of null===(i=r.mainStream.remoteTrackInfos)||void 0===i?void 0:i.values()){var i;if(t.type===mO.TRACK_TYPE_AUDIO&&t.isSubscribed){e=!0;break}}if(e)return r.mainStream.remoteStream}}async unSubscribeAudio(e){return await this.unSubscribeAudioImpl(e)}async unSubscribeAudioImpl(e){if(!e)throw this.logger.error(CN,"unSubscribeAudioImpl, userId is null"),new qc(Gc.RTC_ERR_CODE_INVALID_PARAMETER,"userId is null");const t=new rM({type:"main",log:this.logger,userId:e,client:this,roomId:this.roomId});this.logger.info(CN,"unSubscribeAudioImpl begin, userId:".concat(e)),await this.unsubscribeImpl(t,{audio:!0,video:!1})}startupQoSReportPlay(e,t){const r=this.startupQoSMap.get(e);if(r){const e={timestamp:r.start,traceId:r.traceId,spanId:"0.1.1",originIntfName:r.interfaceName,interfaceName:"play",source:"",target:"",resultCode:"",successFlag:"T",duration:t-r.start,async:"N",extendInfo:JSON.stringify({id:r.id,streamIds:r.streamIds})};this.stat.setFirstFrameInfo(e),r.start=t,r.interfaceName="play"}}startupQoSReportCanPlay(e){const t=XR.getCurrentTimestamp(),r=(null==e?void 0:e.id)&&this.startupQoSMap.get(null==e?void 0:e.id);if(r){const e={timestamp:r.start,traceId:r.traceId,spanId:"0.1.1.1",originIntfName:r.interfaceName,interfaceName:"canplay",source:"",target:"",resultCode:"",successFlag:"T",duration:t-r.start,async:"N",extendInfo:JSON.stringify({id:r.id,streamIds:r.streamIds})};this.stat.setFirstFrameInfo(e)}}async subscribe(e,t){return await this.subscribeImpl(e,t)}async subscribeImpl(e,t){if(this.roomStreamStatus.audience===YC.PAUSE&&this.userInfo.role===nM)throw this.logger.error(CN,"subscribeImpl, room stream status is pause"),new qc(Gc.RTC_ERR_CODE_ROOM_STREAM_STATUS_PAUSED,"room stream status is ".concat(this.roomStreamStatus.audience));const r=XR.getCurrentTimestamp(),i={traceId:XR.generateRandomId(32,16),spanId:"0",originIntfName:"",interfaceName:"subscribe",id:e.getUniqueId(),start:r};if(!e)throw this.logger.error(CN,"subscribeImpl, stream is null"),new qc(Gc.RTC_ERR_CODE_INVALID_PARAMETER,"stream is null");if(t||(t={video:!0,audio:!0}),t.audio||t.video){if(t.video&&![DC.ON,DC.OFF,null,void 0].includes(t.autoAdjustResolution))throw this.logger.error(CN,"the autoAdjustResolution value must be 1 or 2 or empty."),new qc(Gc.RTC_ERR_CODE_INVALID_PARAMETER);await this.doSubscribe(e,t,i)}}async doSubscribe(e,t,r){if(this.connectState.curState!==vC[yC.CONNECTED])throw this.logger.error(CN,"cannot do subscribe when network disconnected"),new qc(Gc.RTC_ERR_CODE_WEBSOCKET_NOT_CONNECTED);const i=e.getUserId(),n=e.isAuxiliary()?gO.STREAM_TYPE_AUX:gO.STREAM_TYPE_MAIN;this.logger.info(CN,"start subscribe, ".concat(i,", ").concat(n,", option: ").concat(JSON.stringify(t))),this.audioPolicy!==_O.USER_SUBSCRIBE_AUDIOPOLICY&&t.audio&&this.logger.info(CN,"doSubscribe, ".concat(this.audioPolicy," is not common audio mode, but audio option is true, reserve it"));try{await this.locker.lock("".concat(CN,":doSubscribe"));const e=this.remoteUserManager.subscribeStream(i,this.roomId,n,t,this.audioPolicy,!1,r);return await this.updateSubscribe(e,r)}catch(jN){throw this.logger.error(CN,"subscribe release lock, subscribe userId ".concat(e.getUserId()," occur error ").concat(jN)),jN}finally{this.locker.unlock("".concat(CN,":doSubscribe"))}}async batchSubscribe(e){return await this.doBatchSubscribe(e)}checkSubscribeParams(e){e.forEach((e=>{if(![DC.OFF,DC.ON,null,void 0].includes(e.autoAdjustResolution))throw this.logger.error(CN,"the autoAdjustResolution value must be 1 or 2"),new qc(Gc.RTC_ERR_CODE_INVALID_PARAMETER);if(!["FHD","HD","SD","LD",null,void 0].includes(e.minResolution))throw this.logger.error(CN,"the minResolution value must be 'FHD','HD','SD','LD'"),new qc(Gc.RTC_ERR_CODE_INVALID_PARAMETER)}))}async doBatchSubscribe(e){this.logger.info(CN,"doBatchSubscribe, subscribeInfos: ".concat(JSON.stringify(e)));try{this.checkSubscribeParams(e);const t=e.map((e=>({userId:e.userId,resolutionIds:e.resolutionIds,autoAdjustResolution:e.autoAdjustResolution,minResolution:e.minResolution})));await this.locker.lock("".concat(CN,":doBatchSubscribe"));const r=this.remoteUserManager.batchSubscribeMainStream(this.roomId,t);await this.updateSubscribe(r)}catch(jN){throw this.logger.error(CN,"batchSubscribe failed, ".concat(jN)),jN}finally{this.locker.unlock("".concat(CN,":doBatchSubscribe"))}}async batchDeleteUnusedSsrcInSdp(e,t,r){(t&&0!==t.length||r&&0!==r.length)&&(this.logger.info(CN,"batchDeleteUnusedSsrcInSdp, streamType: ".concat(e,", videoSsrc2Del: ").concat(t,", audioSsrc2Del:").concat(r)),await this.connectionsManager.deleteUser(e,t,r))}async enableStreamStateDetection(e,t){if(this.status!==OC.Joined)throw this.logger.error(CN,"cannot enable stream detection before join room"),new qc(Gc.RTC_ERR_CODE_INVALID_OPERATION,"cannot enable stream detection before join room");if(!e)return clearTimeout(this.streamInterruptedDetectInterval),this.streamInterruptedDetectInterval=null,this.lastCycleFrameDecodedMap.clear(),void this.streamInterruptedUsersMap.clear();if(!Number.isInteger(t)||t<1||t>60)throw this.logger.error(CN,"invalid interval for enable stream detection"),new qc(Gc.RTC_ERR_CODE_INVALID_PARAMETER);if(e&&this.streamInterruptedDetectInterval)throw this.logger.error(CN,"cannot double enable stream detection"),new qc(Gc.RTC_ERR_CODE_INVALID_OPERATION,"cannot double enable stream detection");if(this.streamDetectionCriterion=t,this.lastCycleFrameDecodedMap&&0===this.lastCycleFrameDecodedMap.size){this.remoteUserManager.getAllUserStreamsByType(this.roomId,null,null).forEach((e=>{const t=e.userId;e.mainStream&&this.lastCycleFrameDecodedMap.set(t+",0",{userId:t,decodedFrame:0}),e.auxStream&&this.lastCycleFrameDecodedMap.set(t+",1",{userId:t,decodedFrame:0})}))}await this.startStreamDetection()}async startStreamDetection(){if(!this.streamInterruptedDetectInterval){const e=1e3,t=()=>{this.streamInterruptedDetectInterval=setTimeout((async()=>{const r=await this.stat.collectReceiverDecodedFrameMap(),i=[],n=[],o=Math.round(1e3*this.streamDetectionCriterion/e);this.streamInterruptedUsersMap.forEach(((e,t)=>{r.has(t)||this.streamInterruptedUsersMap.delete(t)})),r.forEach(((e,t)=>{const r=this.lastCycleFrameDecodedMap&&this.lastCycleFrameDecodedMap.get(t);if(r&&r.decodedFrame===e.decodedFrame){const e=this.streamInterruptedUsersMap.get(t);e?this.streamInterruptedUsersMap.set(t,e+1):this.streamInterruptedUsersMap.set(t,1)}if(r&&r.decodedFrame!==e.decodedFrame){if(this.streamInterruptedUsersMap.get(t)>=o){const r=t.split(",");r[0]!==wC&&n.push({userId:r[0],isScreen:e.isAux})}this.streamInterruptedUsersMap.delete(t)}})),this.lastCycleFrameDecodedMap=r,this.streamInterruptedUsersMap&&this.streamInterruptedUsersMap.forEach(((e,t)=>{if(e===o){const e=t.split(",");e[0]!==wC&&(i.push({userId:e[0],isScreen:"1"===e[1]}),this.logger.info(CN,"stream interrupted, userId: ".concat(e[0],", isAux: ").concat(e[1])))}})),i.length>0&&this.connectState.curState===vC[yC.CONNECTED]&&(this.logger.info(CN,"find stream interrupted users, ".concat(JSON.stringify(i))),this.eventEmitter.emit(UC.StreamInterrupted,i)),n.length>0&&this.connectState.curState===vC[yC.CONNECTED]&&(this.logger.info(CN,"find stream recovered users, ".concat(JSON.stringify(n))),this.eventEmitter.emit(UC.StreamRecovered,n)),t()}),e)};t()}}async unsubscribe(e,t){return await this.unsubscribeImpl(e,t)}async unsubscribeImpl(e,t){if(this.logger.info(CN,"start unsubscribe"),this.roomStreamStatus.audience===YC.PAUSE&&this.userInfo.role===nM)throw this.logger.error(CN,"unsubscribeImpl, room stream status is pause"),new qc(Gc.RTC_ERR_CODE_ROOM_STREAM_STATUS_PAUSED,"room stream status is ".concat(this.roomStreamStatus.audience));if(this.connectState.curState!==vC[yC.CONNECTED])throw this.logger.error(CN,"cannot do subscribe when network disconnected"),new qc(Gc.RTC_ERR_CODE_WEBSOCKET_NOT_CONNECTED);if(!e)throw this.logger.error(CN,"stream is null"),new qc(Gc.RTC_ERR_CODE_INVALID_PARAMETER,"stream is null");const r=e.getUserId(),i=e.isAuxiliary()?gO.STREAM_TYPE_AUX:gO.STREAM_TYPE_MAIN;this.logger.info(CN,"start doUnsubscribe, ".concat(r,", ").concat(i,", option: ").concat(JSON.stringify(t)));try{const e=t||{video:!0,audio:!0};await this.locker.lock("".concat(CN,":doUnsubscribe"));const n=this.remoteUserManager.unsubscribeStream(r,this.roomId,i,e);await this.updateSubscribe(n)}catch(jN){throw this.logger.error(CN,"subscribe userId ".concat(e.getUserId()," occur error ").concat(jN)),jN}finally{this.locker.unlock("".concat(CN,":doUnsubscribe"))}}async switchRole(e,t){return await this.switchRoleImpl(e,t)}async switchRoleImpl(e,t){if(this.logger.info(CN,"switchRole from ".concat(this.userInfo.role," to ").concat(e)),this.status!==OC.Joined&&this.status!==OC.Rejoining)throw new qc(Gc.RTC_ERR_CODE_STATUS_ERROR);if(this.userInfo.role===e)throw this.logger.error(CN,"new role same with old role, no need switch."),new qc(Gc.RTC_ERR_CODE_INVALID_OPERATION,"new role same with old role, no need switch.");ED.switchRoleParamsCheck(this,e,t);try{if(await this.locker.lock("".concat(CN,":_switchRoleImpl")),this.userInfo.role===iM&&e===nM&&(this.streamPublishManager.isMainStreamPublished()&&await this.unpublishSteamAndSignalIfNeed(this.streamPublishManager.getLocalStream(gO.STREAM_TYPE_MAIN)),this.streamPublishManager.isAuxVideoTrackPublished()&&await this.unpublishSteamAndSignalIfNeed(this.streamPublishManager.getLocalStream(gO.STREAM_TYPE_AUX))),!(t&&t.ctime&&t.signature))throw this.logger.error(CN,"authorization is incomplete, please have the correct authorization parameter"),new qc(Gc.RTC_ERR_CODE_INVALID_PARAMETER,"switchRole authorization parameter is invalid.");{const e=uM.renewSignature(this.identifiedID_,t.ctime,t.signature);this.signal.refreshUserInfo(e)}const r=await this.signal.switchRole(e,t);this.logger.debug(CN,"swithRole resp: ".concat(JSON.stringify(r))),this.userInfo.role===nM&&e===iM&&(this.stat.getMediaStat().setLocalMainStreamInfo(this.userInfo.userId,this.streamPublishManager.getPublishedMainStreamInfos()),this.stat.getMediaStat().setLocalAuxsStreamInfo(this.userInfo.userId,this.streamPublishManager.getPublishedAuxStreamInfo())),this.userInfo.role=e,e===iM&&this.roomStreamStatus.audience===YC.PAUSE&&await this.handleRoomStreamStatus(YC.NORMAL,_O.TOPN_AUDIOPOLICY===this.audioPolicy,!0),this.stat.reportSwitchRoleInfo(e,JC),this.locker.unlock("".concat(CN,":_switchRoleImpl")),this.logger.info(CN,"switchRole success")}catch(jN){throw this.locker.unlock("".concat(CN,":_switchRoleImpl")),this.logger.error(CN,"switchRole switchRole failed, errMsg = ".concat(jN)),this.stat.reportSwitchRoleInfo(e,qC),jN}}getPublishAudioSender(){var e;return null===(e=this.streamPublishManager.getPublishedMainAudioTrackInfo())||void 0===e?void 0:e.sender}getPublishedMainAudioTrackInfo(){return this.streamPublishManager.getPublishedMainAudioTrackInfo()}getPublishedMainVideoTrackInfos(){return this.streamPublishManager.getPublishedMainVideoTrackInfos()}getPublishVideoSender(e){if(e===gO.STREAM_TYPE_AUX){const e=this.streamPublishManager.getPublishedAuxVideoTrackInfo();if(e)return[e.sender]}const t=[];return this.streamPublishManager.getPublishedMainVideoTrackInfos().forEach((e=>{t.push(e.sender)})),t}getMainStreamSenderByTrack(e){if(!e)return null;const t=this.streamPublishManager.getPublishedMainVideoTrackInfos().find((t=>t.upstream.streamUid.toString()===e));return null==t?void 0:t.sender}async waitForTrackBatch(e){const t=e.map((e=>{var t,r;return(null===(t=e.mainStream)||void 0===t||null===(r=t.tracks)||void 0===r?void 0:r.length)>0?1:0})).reduce(((e,t)=>e+t),0),r=e.map((e=>{var t,r;return(null===(t=e.auxStream)||void 0===t||null===(r=t.tracks)||void 0===r?void 0:r.length)>0?1:0})).reduce(((e,t)=>e+t),0);this.logger.debug(CN,"wait for track batch begin, mainStreamCount:".concat(t,", auxStreamCount:").concat(r," "));for(let i=0;i<100;i++){if(this.computeSucceedStreamCount(gO.STREAM_TYPE_MAIN,t,e)+this.computeSucceedStreamCount(gO.STREAM_TYPE_AUX,r,e)===t+r)break;if(99===i)return void this.logger.error(CN,"waitForTrackBatch subscribe on track timeout");await XR.sleep(50)}}computeSucceedStreamCount(e,t,r){let i=0;return t&&(i=r.map((t=>this.isStreamTrackReady(e,t)?1:0)).reduce(((e,t)=>e+t),0)),i}newSignal(e){this.signal||(this.signal=new PM(this.clientConfig.appId,e,this))}async negTransportChannelHandler(e,t,r,i){if(this.cmdMsgAbility.enable)if(e.sdp.cmd){var n;if(i)return super.off(UC.CmdChannelDisconnect),iE.getLogger().debug(CN,"negTransportChannelHandler init command channel of datachannel."),this.cmdMsgAbility.cmdManager=new BD(this.eventEmitter,this.remoteUserManager),null===(n=this.cmdMsgAbility.cmdManager)||void 0===n||n.setCommandChannelParams(this.roomId,{tranportOptions:{userUid:e.userUid,sendSsrc:e.sdp.cmd.sendSsrc,receiveSsrc:e.sdp.cmd.receiveSsrc,payload:e.sdp.cmd.pt},dataChannelOptions:{connection:this.connectionsManager.getConnection(gO.STREAM_TYPE_MAIN)},msgFormat:this.cmdMsgAbility.msgFormat}),await this.connectionsManager.refreshOffer(gO.STREAM_TYPE_MAIN),void(t&&r&&super.on(UC.CmdChannelDisconnect,(i=>{i===BC.DATA_CHANNEL&&(iE.getLogger().debug(CN,"negTransportChannelHandler downgrade to webocket command channel."),this.websocketChannelInit(e,t,r))}),!1));t&&r&&(iE.getLogger().debug(CN,"negTransportChannelHandler init webocket command channel."),this.websocketChannelInit(e,t,r))}else iE.getLogger().error(CN,"negTransportChannelHandler error, cmd signal info missing.")}websocketChannelInit(e,t,r){var i;null===(i=this.cmdMsgAbility.cmdManager)||void 0===i||i.reset(),this.cmdMsgAbility.cmdManager=new UD(this.eventEmitter,this.remoteUserManager),this.cmdMsgAbility.cmdManager.setCommandChannelParams(this.roomId,{tranportOptions:{userUid:e.userUid,sendSsrc:e.sdp.cmd.sendSsrc,receiveSsrc:e.sdp.cmd.receiveSsrc,payload:e.sdp.cmd.pt},wsOptions:{bindCryptoKey:t,wsUrl:r,wsDomain:e.sdp.domain},msgFormat:this.cmdMsgAbility.msgFormat})}onTrackHandler(e,t){if(this.logger.info(CN,"peerconnection ontrack event: ".concat(e.track.kind)),e.track.kind===mO.TRACK_TYPE_VIDEO||this.audioPolicy===_O.USER_SUBSCRIBE_AUDIOPOLICY&&e.track.kind===mO.TRACK_TYPE_AUDIO){var r,i;const n=e.streams[0].id,o=this.remoteUserManager.getUserInfoByStreamId(this.roomId,n),s=t?null==o||null===(r=o.auxStream)||void 0===r?void 0:r.remoteStream:null==o||null===(i=o.mainStream)||void 0===i?void 0:i.remoteStream;s?(this.logger.info(CN,"connection.ontrack streamId=".concat(n,", hasAudio:").concat(s.hasAudioTrack()," hasVideo:").concat(s.hasVideoTrack())),s.addRemoteTrack(e.track,n)):this.logger.info(CN,"ontrack stream: ".concat(n," is not existed"))}this.logger.info("onConnection","audio policy:".concat(this.audioPolicy,",track kind:").concat(e.track.kind)),this.audioPolicy===_O.TOPN_AUDIOPOLICY&&e.track.kind===mO.TRACK_TYPE_AUDIO&&this.saveAudioStream4TopN(e)}static isStreamAdd(e,t){if(!t)throw new qc(Gc.RTC_ERR_CODE_INVALID_PARAMETER);const r=e===gO.STREAM_TYPE_MAIN?t.mainStream:t.auxStream;return 0===r.preTracks.length&&r.curTracks.length>0}static isStreamRemove(e,t){if(!t)throw new qc(Gc.RTC_ERR_CODE_INVALID_PARAMETER);const r=e===gO.STREAM_TYPE_MAIN?t.mainStream:t.auxStream;return r.preTracks.length>0&&0===r.curTracks.length}static isStreamUpdate(e,t){if(!t)throw new qc(Gc.RTC_ERR_CODE_INVALID_PARAMETER);const r=e===gO.STREAM_TYPE_MAIN?t.mainStream:t.auxStream;return r.addedTracks.length>0||r.updatedTracks.length>0||r.removedTracks.length>0}static getMuteChangeStatus(t,r,i){if(!i)throw new qc(Gc.RTC_ERR_CODE_INVALID_PARAMETER);const n=t===gO.STREAM_TYPE_MAIN?i.mainStream:i.auxStream;return e.getMediaMuteChangeFlag(n,r)}static getMediaMuteChangeFlag(t,r){const i="noTrack",n=t.preTracks.find((e=>e.type===r)),o=t.curTracks.find((e=>e.type===r)),s=n?n.mute:i,a=o?o.mute:i;return e.getMuteChangeFlag(s,a)}static getMuteChangeFlag(e,t){return e!==t?t?EN.mute:EN.unmute:EN.noChange}async updateSubscribe(t,r,i){if(this.connectState.curState!==vC[yC.CONNECTED])throw this.logger.error(CN,"cannot do subscribe or unSubscribe when network disconnected"),new qc(Gc.RTC_ERR_CODE_WEBSOCKET_NOT_CONNECTED);if(!t||0===t.length)return null;if(!e.isSubscriptionChange(t))return this.logger.info(CN,"no need update subscription"),null;try{const e={successSubscribeInfos:[],failSubscribeInfos:[],successUnsubscribeInfos:[],failUnsubscribeInfos:[]};await this.modifyBrowerSdp(t,e);const n={successSubscribeInfos:[],failSubscribeInfos:[],successUnsubscribeInfos:[],failUnsubscribeInfos:[]};!i&&await this.subscribeSignal(t,n,r),this.clearResource(t);const o=await this.handleRemoteStreamsState(n.successSubscribeInfos),s={successSubscribeInfos:[],failSubscribeInfos:[],successUnsubscribeInfos:[],failUnsubscribeInfos:[]};return(null==o?void 0:o.successSubscribeInfos)&&s.successSubscribeInfos.push(...o.successSubscribeInfos),(null==o?void 0:o.failSubscribeInfos)&&s.failSubscribeInfos.push(...o.failSubscribeInfos),(null==n?void 0:n.failSubscribeInfos)&&s.failSubscribeInfos.push(...n.failSubscribeInfos),(null==n?void 0:n.successUnsubscribeInfos)&&s.successUnsubscribeInfos.push(...n.successUnsubscribeInfos),(null==n?void 0:n.failUnsubscribeInfos)&&s.failUnsubscribeInfos.push(...n.failUnsubscribeInfos),await this.rollbackResource(s.failSubscribeInfos),this.remoteUserManager.subscribeResultCallback(s,!1),this.logger.info(CN,"updateSubscribe end. ".concat(this.getSubscribeResultString(s))),s}catch(jN){this.logger.error(CN,"updateSubscribe fail. errMsg:".concat(jN));const r=this.getSubscribeExceptionResult(t);throw await this.rollbackResource(r.failSubscribeInfos),this.remoteUserManager.subscribeResultCallback(r,!0),this.logger.info(CN,"updateSubscribe fail end. ".concat(this.getSubscribeResultString(r))),jN}}modifyBrowerSdp(t,r){const i=this.buildSubsReq(t,r),n=e.getUserUpdateInfos(i.joinUserUpdateInfos),o=this.buildDefaultSubsRep(i);this.getSubscribeResult(n,o.videoUpstreams,o.audioUpstreams,r,!1);const s=[],a=[],c=[],u=[];r.successUnsubscribeInfos.forEach((e=>{var t,r,i,n;null===(t=e.mainStream)||void 0===t||null===(r=t.tracks)||void 0===r||r.forEach((e=>{e.type===mO.TRACK_TYPE_VIDEO?s.push(e.cssrc):c.push(e.cssrc)})),null===(i=e.auxStream)||void 0===i||null===(n=i.tracks)||void 0===n||n.forEach((e=>{e.type===mO.TRACK_TYPE_VIDEO?a.push(e.cssrc):u.push(e.cssrc)}))}));const d=[];return d.push(this.generateReceiveSdp(gO.STREAM_TYPE_MAIN,r.successSubscribeInfos,s,c)),d.push(this.generateReceiveSdp(gO.STREAM_TYPE_AUX,r.successSubscribeInfos,a,u)),Promise.all(d)}getSubscribeExceptionResult(e){const t={successSubscribeInfos:[],failSubscribeInfos:[],successUnsubscribeInfos:[],failUnsubscribeInfos:[]};return e.forEach((e=>{var r,i,n,o,s,a,c,u;const d={userId:e.userInfo.userId,roomId:this.roomId,mainStream:{remoteStream:null===(r=e.mainStream)||void 0===r?void 0:r.remoteStream,tracks:null===(i=e.mainStream)||void 0===i?void 0:i.tracks4Subscribe},auxStream:{remoteStream:null===(n=e.auxStream)||void 0===n?void 0:n.remoteStream,tracks:null===(o=e.auxStream)||void 0===o?void 0:o.tracks4Subscribe}},l={userId:e.userInfo.userId,roomId:this.roomId,mainStream:{remoteStream:null===(s=e.mainStream)||void 0===s?void 0:s.remoteStream,tracks:null===(a=e.mainStream)||void 0===a?void 0:a.tracks4Unsubscribe},auxStream:{remoteStream:null===(c=e.auxStream)||void 0===c?void 0:c.remoteStream,tracks:null===(u=e.auxStream)||void 0===u?void 0:u.tracks4Unsubscribe}};this.appendSubscribeResult(t.failSubscribeInfos,d),this.appendSubscribeResult(t.failUnsubscribeInfos,l)})),this.logger.info(CN,"getSubscribeExceptionResult. ".concat(this.getSubscribeResultString(t))),t}getSubscribeResultString(e){var t,r,i,n;let o;return null==e||null===(t=e.successSubscribeInfos)||void 0===t||t.forEach((e=>{o="".concat(o||""," subscribe success list: ").concat(this.getRemoteUserSubscribeInfoString(e),", ")})),null==e||null===(r=e.failSubscribeInfos)||void 0===r||r.forEach((e=>{o="".concat(o||""," subscribe failed list: ").concat(this.getRemoteUserSubscribeInfoString(e),",")})),null==e||null===(i=e.successUnsubscribeInfos)||void 0===i||i.forEach((e=>{o="".concat(o||""," unsubscribe success list: ").concat(this.getRemoteUserSubscribeInfoString(e),",")})),null==e||null===(n=e.failUnsubscribeInfos)||void 0===n||n.forEach((e=>{o="".concat(o||""," unsubscribe failed list: ").concat(this.getRemoteUserSubscribeInfoString(e))})),o}async rollbackResource(e){if(e&&0!==e.length)try{const t=[],r=[],i=[],n=[];e.forEach((e=>{var o,s,a,c;null===(o=e.mainStream)||void 0===o||null===(s=o.tracks)||void 0===s||s.forEach((e=>{e.type===mO.TRACK_TYPE_VIDEO?t.push(e.cssrc):r.push(e.cssrc)})),null===(a=e.auxStream)||void 0===a||null===(c=a.tracks)||void 0===c||c.forEach((e=>{e.type===mO.TRACK_TYPE_VIDEO?i.push(e.cssrc):n.push(e.cssrc)}))})),await this.batchDeleteUnusedSsrcInSdp(gO.STREAM_TYPE_MAIN,t,r),await this.batchDeleteUnusedSsrcInSdp(gO.STREAM_TYPE_AUX,i,n)}catch(jN){this.logger.error(CN,"rollbackResource fail, errMsg:".concat(jN))}}isNormalStateStream(e){const t=e.tracks.filter((e=>e.isTrackReady)),r=e.tracks.filter((e=>e.isTrackReady&&e.state===TO.normal));return t.length&&t.length===r.length}async handleReadyStream(e,t){var r,i,n,o;e===gO.STREAM_TYPE_MAIN&&(null===(r=t.mainStream)||void 0===r||null===(i=r.tracks)||void 0===i?void 0:i.length)>0?await this.handleReadyStreamByType(t.userId,e,t.mainStream):e===gO.STREAM_TYPE_AUX&&(null===(n=t.auxStream)||void 0===n||null===(o=n.tracks)||void 0===o?void 0:o.length)>0&&await this.handleReadyStreamByType(t.userId,e,t.auxStream)}async handleReadyStreamByType(e,t,r){this.logger.debug(CN,"handleReadyStreamByType, ".concat(t,", ").concat(JSON.stringify(r.tracks)));try{if(this.isNormalStateStream(r)&&(this.logger.info(CN,"emit ".concat(UC.StreamSubscribed,", userId: ").concat(e,", ").concat(t)),this.eventEmitter.emit(UC.StreamSubscribed,{stream:r.remoteStream}),t===gO.STREAM_TYPE_MAIN)){const t=setTimeout((async()=>{clearTimeout(t),this.reportMediaStatus(e,this.roomId)}),0)}const i=r.tracks.some((e=>e.type===mO.TRACK_TYPE_VIDEO&&e.isTrackReady));for(const e of r.tracks)e.isTrackReady&&await this.handleReadyTrack(e,r.remoteStream,i)}catch(jN){this.logger.error(CN,"handleReadyStreamByType fail, errMsg:".concat(jN))}}getMediaNotifyInfo(e,t){const r=[],i=this.remoteUserManager.getAllUserStreamsByType(t,null,null);return null==i||i.forEach((i=>{if(i.userId!==e)return;const n=i.mainStream,o=null==n?void 0:n.tracks.find((e=>e.type===mO.TRACK_TYPE_AUDIO&&e.isTrackReady));if(o){const i={mediaType:mO.TRACK_TYPE_AUDIO,roomId:t,userId:e,status:o.mute?IC.MediaStatusUnavailable:IC.MediaStatusAvailable,reason:o.mute?RC.MediaUnmuted:RC.MediaMuted};r.push(i)}const s=null==n?void 0:n.tracks.find((e=>e.type===mO.TRACK_TYPE_VIDEO&&e.isTrackReady));if(s){const t={mediaType:mO.TRACK_TYPE_VIDEO,roomId:this.roomId,userId:e,status:s.mute?IC.MediaStatusUnavailable:IC.MediaStatusAvailable,reason:s.mute?RC.MediaUnmuted:RC.MediaMuted};r.push(t)}})),r}reportMediaStatus(e,t){this.getMediaNotifyInfo(e,t).forEach((t=>{const r=t.mediaType===mO.TRACK_TYPE_AUDIO?t.status===IC.MediaStatusAvailable?"UnmuteAudio":"MuteAudio":t.status===IC.MediaStatusAvailable?"UnmuteVideo":"MuteVideo";this.logger.info(CN,"emit ".concat(UC[r],", userId: ").concat(e,", type: ").concat(t.mediaType,", status: ").concat(t.status)),this.eventEmitter.emit(UC[r],t)}))}async handleReadyTrack(e,t,r){const i=e.type===mO.TRACK_TYPE_VIDEO||e.type===mO.TRACK_TYPE_AUDIO&&!r,n=[TO.remoteRejoinCache,TO.localRejoin,TO.resolutionChange].includes(e.state);i&&e.playElement&&n&&(this.logger.info(CN,"handleReadyTrack, auto play"),this.logger.info(CN,"video track.muted[".concat(e.muted,"]")),await t.play(e.playElement,{objectFit:e.objectFit,muted:e.muted,resolutionId:e.type===mO.TRACK_TYPE_VIDEO?e.trackId:null}));const o=e.type===mO.TRACK_TYPE_AUDIO,s=[TO.remoteRejoinCache,TO.localRejoin,TO.resolutionChange].includes(e.state);if(o&&e.playElement&&s){this.logger.info(CN,"audio track.muted[".concat(e.muted,"]"));const r=t.getAudioHRTCTrack();e.muted?r.muteTrack():r.unmuteTrack()}}async handleRemoteStreamsState(t){if(!t||0===t.length)return null;await this.waitForTrackBatch(t),this.logger.info(CN,"handleRemoteTracksState, waitForTrackBatch return");const r=[],i=[];for(const c of t){var n,o,s,a;const t=e.newRemoteUserSubscribeInfo(c.userId,this.roomId,null===(n=c.mainStream)||void 0===n?void 0:n.remoteStream,null===(o=c.auxStream)||void 0===o?void 0:o.remoteStream),u=e.newRemoteUserSubscribeInfo(c.userId,this.roomId,null===(s=c.mainStream)||void 0===s?void 0:s.remoteStream,null===(a=c.auxStream)||void 0===a?void 0:a.remoteStream);await this.handleRemoteStreamsStateByType(c,gO.STREAM_TYPE_MAIN,t,u),await this.handleRemoteStreamsStateByType(c,gO.STREAM_TYPE_AUX,t,u),(t.mainStream.tracks.length||t.auxStream.tracks.length)&&r.push(t),(u.mainStream.tracks.length||u.auxStream.tracks.length)&&i.push(u),this.stat.getMediaStat().setSubscribeInfo(c)}return{successSubscribeInfos:r,failSubscribeInfos:i,successUnsubscribeInfos:null,failUnsubscribeInfos:null}}isStreamTrackReady(e,t){const r=e===gO.STREAM_TYPE_MAIN?t.mainStream:t.auxStream,i=null==r?void 0:r.remoteStream,n=null!=r&&r.tracks?Array.from(r.tracks.values()):null,o=null==n?void 0:n.filter((e=>e.type===mO.TRACK_TYPE_VIDEO)).map((e=>e.trackId)),s=null==n?void 0:n.some((e=>e.type===mO.TRACK_TYPE_AUDIO));return null==i?void 0:i.isTracksReady(o,s)}async handleRemoteStreamsStateByType(e,t,r,i){var n;const o=this.isStreamTrackReady(t,e);let s=e.mainStream,a=null===(n=e.mainStream)||void 0===n?void 0:n.tracks,c=r.mainStream,u=i.mainStream;var d;t===gO.STREAM_TYPE_AUX&&(s=e.auxStream,a=null===(d=e.auxStream)||void 0===d?void 0:d.tracks,c=r.auxStream,u=i.auxStream);let l=!1;var h,f;o?(null===(h=a)||void 0===h||h.forEach((e=>{e.isTrackReady=!0,l=!0})),a&&c.tracks.push(...a)):null===(f=a)||void 0===f||f.forEach((e=>{var t;null!==(t=s)&&void 0!==t&&t.remoteStream.isTrackReady(e.type,e.trackId)?(e.isTrackReady=!0,l=!0,c.tracks.push(e)):u.tracks.push(e)}));l&&await this.handleReadyStream(t,e)}getRemoteUserSubscribeInfoString(e){var t,r,i,n;if(!e)return"";let o,s;return null===(t=e.mainStream)||void 0===t||null===(r=t.tracks)||void 0===r||r.forEach((e=>{o="".concat(o||""," ").concat(JSON.stringify(e))})),null===(i=e.auxStream)||void 0===i||null===(n=i.tracks)||void 0===n||n.forEach((e=>{s="".concat(s||""," ").concat(JSON.stringify(e))}))," userId:".concat(e.userId,", mainTracks:").concat(o,", auxTracks:").concat(s," ")}releaseTrack(e,t){t.type===mO.TRACK_TYPE_VIDEO?(e.stop({audio:!1,video:!0,resolutionIds:[t.trackId]}),e.removeRemoteVideoTrack(t.trackId),this.logger.info(CN,"releaseTrack ".concat(t.type))):(e.stop({audio:!0}),e.removeRemoteAudioTrack(),this.logger.info(CN,"releaseTrack ".concat(t.type)))}clearResource(e){try{null==e||e.forEach((e=>{var t,r,i,n;null===(t=e.mainStream)||void 0===t||null===(r=t.tracks4Unsubscribe)||void 0===r||r.forEach((t=>{this.stat.getMediaStat().deleteSubscribeInfo(e.userInfo.userId,gO.STREAM_TYPE_MAIN,t.trackId),this.releaseTrack(e.mainStream.remoteStream,t)})),null===(i=e.auxStream)||void 0===i||null===(n=i.tracks4Unsubscribe)||void 0===n||n.forEach((t=>{this.stat.getMediaStat().deleteSubscribeInfo(e.userInfo.userId,gO.STREAM_TYPE_AUX,t.trackId),this.releaseTrack(e.auxStream.remoteStream,t)}))}))}catch(jN){this.logger.error(CN,"clearResource error: ".concat(jN))}}async generateReceiveSdp(e,t,r,i){this.logger.info(CN,"generateReceiveSdp, stream type: ".concat(e,", removeVideoSsrcs: ").concat(r,", removeAudioSsrcs: ").concat(i));const n=t.some((t=>{var r;const i=e===gO.STREAM_TYPE_MAIN?t.mainStream:t.auxStream;return(null==i||null===(r=i.tracks)||void 0===r?void 0:r.length)>0})),o=!!r.length||!!i.length;if(!n&&!o)return null;o&&await this.connectionsManager.deleteUser(e,r,i);const s=new Map;for(const u of t){var a,c;const t=e===gO.STREAM_TYPE_MAIN?null===(a=u.mainStream)||void 0===a?void 0:a.tracks:null===(c=u.auxStream)||void 0===c?void 0:c.tracks;if(t&&!(t.length<1))for(const r of t){this.logger.info(CN,"generateReceiveSdp, userId : ".concat(u.userId,", stream type: ").concat(e,", track type: ").concat(r.type,", ssrc: ").concat(r.cssrc));const t={streamId:r.trackId};r.type===mO.TRACK_TYPE_VIDEO?t.videoSsrc=r.cssrc:t.audioSsrc=r.cssrc,s.has(u.userId)?s.get(u.userId).push(t):s.set(u.userId,[t])}}await this.connectionsManager.addUserBatch(e,s)}static getWatchType4Ops(e){return 0===e?"cancel_watch":1===e?"watch":"batch_watch"}static isSubscriptionChange(e){return e.some((e=>{var t,r,i,n,o,s,a,c;return(null===(t=e.mainStream)||void 0===t||null===(r=t.tracks4Subscribe)||void 0===r?void 0:r.length)>0||(null===(i=e.mainStream)||void 0===i||null===(n=i.tracks4Unsubscribe)||void 0===n?void 0:n.length)>0||(null===(o=e.auxStream)||void 0===o||null===(s=o.tracks4Subscribe)||void 0===s?void 0:s.length)>0||(null===(a=e.auxStream)||void 0===a||null===(c=a.tracks4Unsubscribe)||void 0===c?void 0:c.length)>0}))}appendSubscribeResult(e,t){var r,i,n,o;if(t&&(null!==(r=t.mainStream)&&void 0!==r&&null!==(i=r.tracks)&&void 0!==i&&i.length||null!==(n=t.auxStream)&&void 0!==n&&null!==(o=n.tracks)&&void 0!==o&&o.length)){const r=e.find((e=>e.userId===t.userId&&e.roomId===t.roomId));var s,a;if(r)null!==(s=r.mainStream)&&void 0!==s&&s.tracks?r.mainStream.tracks.push(...t.mainStream.tracks):r.mainStream=t.mainStream,null!==(a=r.auxStream)&&void 0!==a&&a.tracks?r.auxStream.tracks.push(...t.auxStream.tracks):r.auxStream=t.auxStream;else e.push(t)}}buildSubsReq(t,r){const i=[],n=[],o=[];return t.forEach((t=>{if(t.curUserState===IO.NotJoin){var s,a,c,u,d,l;const i=e.newRemoteUserSubscribeInfo(t.userInfo.userId,this.roomId,null===(s=t.mainStream)||void 0===s?void 0:s.remoteStream,null===(a=t.auxStream)||void 0===a?void 0:a.remoteStream);null===(c=t.mainStream)||void 0===c||null===(u=c.tracks4Unsubscribe)||void 0===u||u.forEach((e=>{i.mainStream.tracks.push(e)})),null===(d=t.auxStream)||void 0===d||null===(l=d.tracks4Unsubscribe)||void 0===l||l.forEach((e=>{i.auxStream.tracks.push(e)})),this.appendSubscribeResult(r.successUnsubscribeInfos,i)}else{var h,f,p,m;o.push(t),null===(h=t.mainStream)||void 0===h||null===(f=h.allSubscribeTracks)||void 0===f||f.forEach((r=>{e.getUserTrackSubscribeInfo(t.userInfo,i,n,r)})),null===(p=t.auxStream)||void 0===p||null===(m=p.allSubscribeTracks)||void 0===m||m.forEach((r=>{e.getUserTrackSubscribeInfo(t.userInfo,i,n,r)}))}})),{videoSubscribeInfos:i,audioSubscribeInfos:n,joinUserUpdateInfos:o}}async subscribeSignal(t,r,i){const n=this.buildSubsReq(t,r);if(!e.isSubscriptionChange(n.joinUserUpdateInfos))return;const o=e.getWatchType4Ops(n.videoSubscribeInfos.length);let s;this.logger.info(CN,"subscribeSignal, fullVideoSubscribeInfos: ".concat(JSON.stringify(n.videoSubscribeInfos)," ,")+"fullAudioSubscribeInfos: ".concat(JSON.stringify(n.audioSubscribeInfos)));let a=null;const c=XR.getCurrentTimestamp();if(i){const e={timestamp:i.start,traceId:i.traceId,spanId:"0",originIntfName:"",interfaceName:"subscribe",source:"",target:"",resultCode:"",successFlag:"T",duration:c-i.start,async:"N",extendInfo:JSON.stringify({id:i.id})};this.stat.setFirstFrameInfo(e)}try{a=this.status!==OC.Leaving?await this.signal.subscribe(n.videoSubscribeInfos,n.audioSubscribeInfos,o):this.buildDefaultSubsRep(n)}catch(Aw){throw s=Aw,Aw}finally{if(i){const e=XR.getCurrentTimestamp(),t={timestamp:c,traceId:i.traceId,spanId:"0.1",originIntfName:i.interfaceName,interfaceName:"subscribeSignal",source:"",target:"",resultCode:"",successFlag:s?"F":"T",duration:e-c,async:"N",extendInfo:JSON.stringify({id:i.id,streamIds:i.streamIds})};this.stat.setFirstFrameInfo(t),i.interfaceName="subscribeSignal",i.start=e,this.startupQoSMap.set(i.id,i)}}a.audioUpstreams||a.videoUpstreams||this.logger.error(CN,"subscribeSignal, subscribe stream subscribed no result record, subsResult:".concat(JSON.stringify(a)));const u=e.getUserUpdateInfos(n.joinUserUpdateInfos);this.getSubscribeResult(u,a.videoUpstreams,a.audioUpstreams,r)}buildDefaultSubsRep(e){const t=[];e.videoSubscribeInfos.forEach((e=>{t.push({cSsrcId:e.cSsrcId,code:0,pSsrcId:e.pSsrcId,pStreamUid:e.pStreamUid,pUserId:e.pUserId,pUserUid:e.pUserUid})}));const r=[];return e.audioSubscribeInfos.forEach((e=>{r.push({cSsrcId:e.cSsrcId,code:0,pSsrcId:e.pSsrcId,pStreamUid:e.pStreamUid,pUserId:e.pUserId,pUserUid:e.pUserUid})})),{audioUpstreams:r,videoUpstreams:t}}static getUserTrackSubscribeInfo(e,t,r,i){const n={pSsrcId:i.pssrc,cSsrcId:i.cssrc,pStreamUid:parseInt(i.trackId),pUserId:e.userId,pUserUid:e.userUid};i.type===mO.TRACK_TYPE_AUDIO?r.push(n):(n.mediaData={width:i.width,height:i.height,maxFps:60},i.autoAdjustResolution===DC.ON&&(n.minReceiveContent=bN[i.minResolution]),t.push(n))}static getUserUpdateInfos(e){return e.filter((e=>{var t,r,i,n,o,s,a,c;return(null===(t=e.mainStream)||void 0===t||null===(r=t.allSubscribeTracks)||void 0===r?void 0:r.length)>0||(null===(i=e.mainStream)||void 0===i||null===(n=i.tracks4Unsubscribe)||void 0===n?void 0:n.length)>0||(null===(o=e.auxStream)||void 0===o||null===(s=o.allSubscribeTracks)||void 0===s?void 0:s.length)>0||(null===(a=e.auxStream)||void 0===a||null===(c=a.tracks4Unsubscribe)||void 0===c?void 0:c.length)>0}))}getSubscribeResult(e,t,r,i,n){const o=new Map;null==t||t.forEach((e=>{const t=e.pUserId+"#"+this.roomId,r=o.get(t);if(r)r.tracks.push(e);else{const r={userId:e.pUserId,userUid:e.pStreamUid,tracks:[e]};o.set(t,r)}})),null==r||r.forEach((e=>{const t=e.pUserId+"#"+this.roomId,r=o.get(t);if(r)r.tracks.push(e);else{const r={userId:e.pUserId,userUid:e.pStreamUid,tracks:[e]};o.set(t,r)}})),e.forEach((e=>{this.getStreamSubscribeResult(e,!0,o,i)})),e.forEach((e=>{this.getStreamSubscribeResult(e,!1,o,i)})),this.logger.info(CN,"isRealSubsAction: ".concat(n,", getSubscribeResult success, ").concat(this.getSubscribeResultString(i)))}getStreamSubscribeResult(t,r,i,n){var o,s,a,c;if(!r)return this.handleUnsubscribeReq(gO.STREAM_TYPE_MAIN,t,n),void this.handleUnsubscribeReq(gO.STREAM_TYPE_AUX,t,n);const u=n.successSubscribeInfos,d=n.failSubscribeInfos,l=e.newRemoteUserSubscribeInfo(t.userInfo.userId,this.roomId,null===(o=t.mainStream)||void 0===o?void 0:o.remoteStream,null===(s=t.auxStream)||void 0===s?void 0:s.remoteStream),h=e.newRemoteUserSubscribeInfo(t.userInfo.userId,this.roomId,null===(a=t.mainStream)||void 0===a?void 0:a.remoteStream,null===(c=t.auxStream)||void 0===c?void 0:c.remoteStream),f=t.userInfo.userId+"#"+this.roomId,p=i.get(f);var m,g,_,S;if(!p&&this.hasTrackSignalReq(t))return d.push({userId:t.userInfo.userId,roomId:this.roomId,mainStream:{remoteStream:null===(m=t.mainStream)||void 0===m?void 0:m.remoteStream,tracks:null===(g=t.mainStream)||void 0===g?void 0:g.tracks4Subscribe},auxStream:{remoteStream:null===(_=t.auxStream)||void 0===_?void 0:_.remoteStream,tracks:null===(S=t.auxStream)||void 0===S?void 0:S.tracks4Subscribe}}),void this.logger.error(CN,"subscribe user ".concat(t.userInfo.userId,", isSubscribe: ").concat(r," subscribed failed,mcs not response"));this.getTracksSubscribeResults(r,t,p,l,h),this.appendToSubscribeResult(l,u,h,d)}appendToSubscribeResult(e,t,r,i){var n,o,s,a,c,u,d,l;((null===(n=e.mainStream)||void 0===n||null===(o=n.tracks)||void 0===o?void 0:o.length)>0||(null===(s=e.auxStream)||void 0===s||null===(a=s.tracks)||void 0===a?void 0:a.length)>0)&&this.appendSubscribeResult(t,e),((null===(c=r.mainStream)||void 0===c||null===(u=c.tracks)||void 0===u?void 0:u.length)>0||(null===(d=r.auxStream)||void 0===d||null===(l=d.tracks)||void 0===l?void 0:l.length)>0)&&this.appendSubscribeResult(i,r)}static newRemoteUserSubscribeInfo(e,t,r,i){return{userId:e,roomId:t,mainStream:{remoteStream:r,tracks:[]},auxStream:{remoteStream:i,tracks:[]}}}handleUnsubscribeReq(e,t,r){const i=e===gO.STREAM_TYPE_MAIN?t.mainStream:t.auxStream,n=null==i?void 0:i.tracks4Unsubscribe;if(null!=n&&n.length){var o,s,a,c,u;const d=null===(o=i.tracks4Subscribe)||void 0===o?void 0:o.some((e=>e.state===TO.remoteRejoinCache)),l=r.successSubscribeInfos.find((e=>e.userId===t.userInfo.userId&&e.roomId===t.userInfo.roomId)),h=e===gO.STREAM_TYPE_MAIN?null==l||null===(s=l.mainStream)||void 0===s?void 0:s.tracks:null==l||null===(a=l.auxStream)||void 0===a?void 0:a.tracks,f=!h||0===(null==h?void 0:h.filter((e=>e.state===TO.remoteRejoinCache)).length),p={userId:t.userInfo.userId,roomId:this.roomId,mainStream:{remoteStream:null===(c=t.mainStream)||void 0===c?void 0:c.remoteStream,tracks:e===gO.STREAM_TYPE_MAIN?n:[]},auxStream:{remoteStream:null===(u=t.auxStream)||void 0===u?void 0:u.remoteStream,tracks:e===gO.STREAM_TYPE_AUX?n:[]}};this.logger.info(CN,"handleUnsubscribeReq, hasSubscribeReq:".concat(d,", allSubscribeReqFailed:").concat(f)),d&&f?this.appendSubscribeResult(r.failUnsubscribeInfos,p):this.appendSubscribeResult(r.successUnsubscribeInfos,p)}}hasTrackSignalReq(e){var t,r,i,n;return(null===(t=e.mainStream)||void 0===t||null===(r=t.allSubscribeTracks)||void 0===r?void 0:r.filter((e=>e.type===mO.TRACK_TYPE_VIDEO)).length)>0||(null===(i=e.auxStream)||void 0===i||null===(n=i.allSubscribeTracks)||void 0===n?void 0:n.filter((e=>e.type===mO.TRACK_TYPE_VIDEO)).length)>0}getTracksSubscribeResults(e,t,r,i,n){var o,s,a,c;const u=e?null===(o=t.mainStream)||void 0===o?void 0:o.tracks4Subscribe:null===(s=t.mainStream)||void 0===s?void 0:s.tracks4Unsubscribe;null==u||u.forEach((o=>{this.getTrackSubscribeResult(e,t.userInfo.userId,o,gO.STREAM_TYPE_MAIN,r,i,n)}));const d=e?null===(a=t.auxStream)||void 0===a?void 0:a.tracks4Subscribe:null===(c=t.auxStream)||void 0===c?void 0:c.tracks4Unsubscribe;null==d||d.forEach((o=>{this.getTrackSubscribeResult(e,t.userInfo.userId,o,gO.STREAM_TYPE_AUX,r,i,n)}))}getTrackSubscribeResult(e,t,r,i,n,o,s){var a;const c=i===gO.STREAM_TYPE_MAIN?s.mainStream:s.auxStream,u=i===gO.STREAM_TYPE_MAIN?o.mainStream:o.auxStream,d=null==n||null===(a=n.tracks)||void 0===a?void 0:a.find((e=>e.cSsrcId===r.cssrc));d?0!==d.code?(c.tracks.push(r),this.logger.error(CN,"isSubscribe:".concat(e,", subscribe user ").concat(t," ").concat(i," streamUid:").concat(d.pStreamUid," subscribed failed,code:").concat(d.code))):u.tracks.push(r):this.logger.error(CN,"isSubscribe:".concat(e,", subscribe user ").concat(t,", ").concat(i,"\n track req id: ").concat(r.trackId,", ssrc ").concat(r.cssrc," subscribed failed,mcs not response"))}async updateUserList(e){this.logger.info(CN,"updateUserList start");try{e.infos.forEach((e=>{this.stat.getMediaStat().setEncryInfo(String(e.userId),String(e.userEid))})),await this.locker.lock("".concat(CN,":updateUserList"));const t=this.remoteUserManager.updateUserListInfo(this.roomId,e.infos);if(this.logger.info(CN,"updateUserList , begin"),!t||0===t.length)return void this.logger.error(CN,"updateUserList , userUpdateInfos is null");t.forEach((e=>{if(e.isUserNameChanged&&(this.logger.info(CN,"emit ".concat(UC.UserNameChanged,", ").concat(e.userInfo.userId,"}")),this.eventEmitter.emit(UC.UserNameChanged,{roomId:this.roomId,userId:e.userInfo.userId,userName:e.userInfo.nickname})),e.preUserState===IO.NotJoin&&e.curUserState===IO.Joined)this.logger.info(CN,"emit ".concat(UC.PeerJoin,", ").concat(e.userInfo.userId,":").concat(e.userInfo.nickname)),this.eventEmitter.emit(UC.PeerJoin,{userId:e.userInfo.userId,userName:e.userInfo.nickname,roomId:e.userInfo.roomId,relayRoomId:e.userInfo.relaySrcRoomId});else if(e.preUserState===IO.Joined&&e.curUserState===IO.NotJoin){var t,r,i,n;(null===(t=e.mainStream)||void 0===t||null===(r=t.removedTracks)||void 0===r?void 0:r.length)>0&&(this.logger.info(CN,"emit ".concat(UC.StreamRemoved,", ").concat(e.userInfo.userId,", ").concat(gO.STREAM_TYPE_MAIN)),this.eventEmitter.emit(UC.StreamRemoved,{stream:e.mainStream.remoteStream})),(null===(i=e.auxStream)||void 0===i||null===(n=i.removedTracks)||void 0===n?void 0:n.length)>0&&(this.logger.info(CN,"emit ".concat(UC.StreamRemoved,", ").concat(e.userInfo.userId,", ").concat(gO.STREAM_TYPE_AUX)),this.eventEmitter.emit(UC.StreamRemoved,{stream:e.auxStream.remoteStream})),this.logger.info(CN,"emit ".concat(UC.PeerLeave,", ").concat(e.userInfo.userId)),this.eventEmitter.emit(UC.PeerLeave,{userId:e.userInfo.userId,userName:e.userInfo.nickname,roomId:e.userInfo.roomId,relayRoomId:e.userInfo.relaySrcRoomId,reason:MC.HRTC_LEAVE_REASON_USER_LEAVE_ROOM}),this.stat.getMediaStat().updateAudioStreamInfos(e.userInfo.userId,"removed")}})),await this.updateSubscribe(t)}catch(jN){this.logger.error(CN,"updateUserList occur exception ".concat(jN))}finally{this.locker.unlock("".concat(CN,":updateUserList"))}}async refreshRemoteStreamList(e){this.logger.info(CN,"refreshRemoteStreamList start");try{const t={userId:e.userId,userUid:e.userUid,roomId:this.roomId,nickname:null};e.allAudioStreams=e.allAudioStreams.filter((e=>"cmd"!==e.content));const r=this.remoteUserManager.refreshRemoteStreamList(t,e.allVideoStreams,e.allAudioStreams);if(this.logger.info(CN,"refreshRemoteStreamList begin"),!r||0===r.length)return void this.logger.error(CN,"refreshRemoteStreamList , userUpdateInfos is null");const i=r.find((t=>t.userInfo.userId===e.userId));this.updateSingleUser(i),await this.updateSubscribe(r)}catch(jN){this.logger.error(CN,"refreshRemoteStreamList occur exception ".concat(jN))}}updateSingleUser(t){var r,i;t.isUserNameChanged&&(this.logger.info(CN,"emit ".concat(UC.UserNameChanged,", ").concat(t.userInfo.userId,"}")),this.eventEmitter.emit(UC.UserNameChanged,{roomId:this.roomId,userId:t.userInfo.userId,userName:t.userInfo.nickname})),t.preUserState===IO.NotJoin&&t.curUserState===IO.Joined&&(this.logger.info(CN,"emit ".concat(UC.PeerJoin,", ").concat(t.userInfo.userId,":").concat(t.userInfo.nickname)),this.eventEmitter.emit(UC.PeerJoin,{userId:t.userInfo.userId,userName:t.userInfo.nickname,roomId:t.userInfo.roomId,relayRoomId:t.userInfo.relaySrcRoomId}));const n=null===(r=t.mainStream)||void 0===r?void 0:r.remoteStream;n&&(e.isStreamAdd(gO.STREAM_TYPE_MAIN,t)?(this.logger.info(CN,"emit ".concat(UC.StreamAdded,", ").concat(t.userInfo.userId,", ").concat(n.getType(),"}")),this.eventEmitter.emit(UC.StreamAdded,{stream:n}),this.updateAudioStreamInfo(t.userInfo.userId,"add",n)):e.isStreamRemove(gO.STREAM_TYPE_MAIN,t)?(this.logger.info(CN,"emit ".concat(UC.StreamRemoved,", ").concat(t.userInfo.userId,", ").concat(n.getType(),"}")),this.eventEmitter.emit(UC.StreamRemoved,{stream:n}),this.updateAudioStreamInfo(t.userInfo.userId,"removed",n)):e.isStreamUpdate(gO.STREAM_TYPE_MAIN,t)&&(this.logger.info(CN,"emit ".concat(UC.StreamUpdated,", ").concat(t.userInfo.userId,", ").concat(n.getType(),"}")),this.eventEmitter.emit(UC.StreamUpdated,{stream:n}),this.updateAudioStreamInfo(t.userInfo.userId,"update",n)));const o=null===(i=t.auxStream)||void 0===i?void 0:i.remoteStream;o&&(e.isStreamAdd(gO.STREAM_TYPE_AUX,t)?(this.logger.info(CN,"emit ".concat(UC.StreamAdded,", ").concat(t.userInfo.userId,", ").concat(o.getType(),"}")),this.eventEmitter.emit(UC.StreamAdded,{stream:o})):e.isStreamRemove(gO.STREAM_TYPE_AUX,t)&&(this.logger.info(CN,"emit ".concat(UC.StreamRemoved,", ").concat(t.userInfo.userId,", ").concat(o.getType(),"}")),this.eventEmitter.emit(UC.StreamRemoved,{stream:o}))),t.preUserState===IO.Joined&&t.curUserState===IO.NotJoin&&(this.logger.info(CN,"emit ".concat(UC.PeerLeave,", ").concat(t.userInfo.userId)),this.eventEmitter.emit(UC.PeerLeave,{userId:t.userInfo.userId,userName:t.userInfo.nickname,roomId:t.userInfo.roomId,relayRoomId:t.userInfo.relaySrcRoomId,reason:MC.HRTC_LEAVE_REASON_USER_LEAVE_ROOM}),this.stat.getMediaStat().updateAudioStreamInfos(t.userInfo.userId,"removed")),this.handleMuteStatus(t)}updateAudioStreamInfo(e,t,r){var i;if("add"===t)null!==(i=r.getStreamInfo())&&void 0!==i&&i.audioProfile&&this.stat.getMediaStat().updateAudioStreamInfos(e,"add");else if("removed"===t)this.stat.getMediaStat().updateAudioStreamInfos(e,"removed");else{var n;null!==(n=r.getStreamInfo())&&void 0!==n&&n.audioProfile?this.stat.getMediaStat().updateAudioStreamInfos(e,"add"):this.stat.getMediaStat().updateAudioStreamInfos(e,"removed")}}remoteUserDisconnectNotify(e){e&&this.logger.info(CN,"remoteDisconnectNotify, userId:".concat(e.userId))}remoteUserReconnectNotify(e){if(!e)return;this.logger.info(CN,"remoteReconnectNotify, userId:".concat(e.userId));const t={userId:e.userId,userUid:e.userUid,roomId:this.roomId,nickname:null};this.remoteUserManager.remoteUserReconnect(t,e.videoStreams,e.audioStreams)}updateAppData(e){const t=e.userId,r=e.appData.nickname;t&&e.userId!==this.userInfo.userId&&(this.remoteUserManager.updateUserName(t,this.roomId,r),this.eventEmitter.emit(UC.UserNameChanged,{roomId:this.roomId,userId:t,userName:r}))}async updateRemoteStream(e){this.logger.info(CN,"updateRemoteStream start");try{const t={userId:e.userId,userUid:e.userUid,roomId:this.roomId,nickname:null},r=this.remoteUserManager.updateRemoteStream(t,e.videoStreams,e.audioStreams);if(this.logger.info(CN,"updateRemoteStream , begin"),!r)return void this.logger.error(CN,"updateRemoteStream , userUpdateInfos is null");this.handleMuteStatus(r)}catch(jN){this.logger.error(CN,"updateRemoteStream occur exception ".concat(jN))}}handleMuteStatus(t){this.logger.info(CN,"handleMuteStatus begin");const r=e.getMuteChangeStatus(gO.STREAM_TYPE_MAIN,mO.TRACK_TYPE_AUDIO,t);r!==EN.noChange&&(this.emitMediaStatusChange(t.userInfo.userId,t.userInfo.roomId,mO.TRACK_TYPE_AUDIO,r),r===EN.unmute?this.stat.getMediaStat().updateAudioStreamInfos(this.userInfo.userId,"add"):this.stat.getMediaStat().updateAudioStreamInfos(this.userInfo.userId,"removed"));const i=e.getMuteChangeStatus(gO.STREAM_TYPE_MAIN,mO.TRACK_TYPE_VIDEO,t);i!==EN.noChange&&this.emitMediaStatusChange(t.userInfo.userId,t.userInfo.roomId,mO.TRACK_TYPE_VIDEO,i)}async removeRemoteStream(e){this.logger.info(CN,"removeRemoteStream start");try{const t={userId:e.userId,userUid:e.userUid,roomId:this.roomId,nickname:null};e.allAudioStreams=e.allAudioStreams.filter((e=>"cmd"!==e.content));const r=this.remoteUserManager.refreshRemoteStreamList(t,e.allVideoStreams,e.allAudioStreams);if(this.logger.info(CN,"removeRemoteStream begin"),!r||0===r.length)return void this.logger.error(CN,"removeRemoteStream , userUpdateInfos is null");const i=r.find((t=>t.userInfo.userId===e.userId));this.updateSingleUser(i),await this.updateSubscribe(r)}catch(jN){this.logger.error(CN,"removeRemoteStream occur exception ".concat(jN))}}emitMediaStatusChange(e,t,r,i){const n={roomId:t,userId:e,status:i===EN.unmute?IC.MediaStatusAvailable:IC.MediaStatusUnavailable,reason:i===EN.unmute?RC.MediaUnmuted:RC.MediaMuted},o=r===mO.TRACK_TYPE_AUDIO?i===EN.unmute?"UnmuteAudio":"MuteAudio":i===EN.unmute?"UnmuteVideo":"MuteVideo";this.logger.info(CN,"emit ".concat(UC[o],", userId: ").concat(e,", type: ").concat(r,", status: ").concat(n.status)),this.eventEmitter.emit(UC[o],n)}waitNotifyConfig(e){return new Promise(((t,r)=>{const i={id:e.length+1,domain:"",start_ms:XR.getCurrentTimestamp(),delay_ms:0,stepName:"configNotify",rspCode:"",errMsg:""};let n=null;this.waitConfigCallbackFunc=()=>{clearTimeout(n),t(),i.delay_ms=XR.getCurrentTimestamp()-i.start_ms,i.rspCode="OK",e.push(i)},this.validSignatureFunc=e=>{clearTimeout(n),r(new qc(e.code,e.message))},n=setTimeout((()=>{this.logger.error(CN,"wait config timeout"),i.rspCode="".concat(Gc.RTC_ERR_CODE_WAIT_CONFIG_FAIL),i.errMsg=Jc[Gc.RTC_ERR_CODE_WAIT_CONFIG_FAIL],i.delay_ms=XR.getCurrentTimestamp()-i.start_ms,e.push(i),t()}),fA)}))}handleConfigNotifyBody(e){const{controlDisconnectTimeout:t="30",controlHoldTimeout:r="120",controlPingPeriod:i="5"}=e.appConfigs||{};this.sfuConfigs={};for(const o of yA)Object.prototype.hasOwnProperty.call(e.appConfigs,o)&&(this.sfuConfigs[o]=e.appConfigs[o]);for(const o of IA)Object.prototype.hasOwnProperty.call(e.appConfigs,o)&&(this.sfuConfigs[o]=e.appConfigs[o]);const n={heartBeatRetryTimes:parseInt(t)/parseInt(i)||mA,connectionTimeout:parseInt(r)||gA,heartBeatPeriod:parseInt(i)||pA};this.waitConfigCallbackFunc&&this.waitConfigCallbackFunc(),this.stat.setTraceInfo(e.traceId),TD.setLogServerConfigs(e.logServerConfigs),this.signal.setConfigParams(n)}async uploadLog(e){await TD.uploadLogFile(this,e)}async handleWatchMsg(e){if(null!=e)try{const t=e,r=t.videoSsrcIds,i=t.audioSsrcIds;if(this.sdpRepInfo.cmd&&(null==i?void 0:i.length)>0&&0===i.filter((e=>this.sdpRepInfo.cmd.sendSsrc!==e)).length)return;const n=r.filter((e=>this.sdpRepInfo.video.sendSsrcRange.find((t=>e===t)))),o=r.filter((e=>this.sdpRepInfo.desktopVideo.sendSsrcRange.find((t=>e===t)))),s=[],a=[],c={mainStreamVideoTracks2Update:{},mainStreamAudioTracks2Update:{},auxStreamTracks2Update:{}},u=this.streamPublishManager.generatePubInfoWhenWatch(gO.STREAM_TYPE_MAIN,n,i||[],mO.TRACK_TYPE_VIDEO);if(await this.publishWhenWatch(gO.STREAM_TYPE_MAIN,u),n&&n.length>0&&(null==u||u.tracks2NewPublish.forEach((e=>{r.find((t=>t===e.ssrc))&&s.push({ssrcId:e.ssrc,status:0})})),null==u||u.tracks2KeepPublish.forEach((e=>{s.push({ssrcId:e.ssrc,status:0})})),c.mainStreamVideoTracks2Update=u),i&&i.length>0){const e=this.streamPublishManager.generatePubInfoWhenWatch(gO.STREAM_TYPE_MAIN,[],i);await this.publishWhenWatch(gO.STREAM_TYPE_MAIN,e),null==e||e.tracks2NewPublish.forEach((e=>{i.find((t=>t===e.ssrc))&&a.push({ssrcId:e.ssrc,status:0})})),null==e||e.tracks2KeepPublish.forEach((e=>{a.push({ssrcId:e.ssrc,status:0})})),c.mainStreamAudioTracks2Update=e}if(o&&o.length>0){const e=this.streamPublishManager.generatePubInfoWhenWatch(gO.STREAM_TYPE_AUX,o,[]);await this.publishWhenWatch(gO.STREAM_TYPE_AUX,e),null==e||e.tracks2NewPublish.forEach((e=>{r.find((t=>t===e.ssrc))&&s.push({ssrcId:e.ssrc,status:0})})),null==e||e.tracks2KeepPublish.forEach((e=>{s.push({ssrcId:e.ssrc,status:0})})),c.auxStreamTracks2Update=e}this.logger.info(CN,"handle watch success, videoSsrcs: ".concat(JSON.stringify(r),", audioSsrcs: ").concat(JSON.stringify(i)));const d=this.stat.getSpanId(t["x-nuwa-span-id"]),l=XR.generateRandomId(16,16);this.stat.setParentSpanId(l,d);const h={type:"WATCH_STREAM_NOTIFY",requestId:t.requestId,traceId:t.traceId,version:t.version,videoSsrcIds:s,audioSsrcIds:a,"x-nuwa-trace-id":t["x-nuwa-trace-id"],"x-nuwa-span-id":l};await this.signal.pushStreamResponse(h),this.reportMediaStreamInfo(c,s),this.logger.info(CN,"handleWatchMsg success")}catch(jN){this.logger.error(CN,"handleWatchMsg occur error ".concat(jN))}else this.logger.error(CN,"message is null")}reportMediaStreamInfo(e,t){var r,i,n,o;if(null!==(r=e.mainStreamVideoTracks2Update)&&void 0!==r&&null!==(i=r.tracks2NewPublish)&&void 0!==i&&i.find((e=>e.type===mO.TRACK_TYPE_VIDEO))){this.stat.getMediaStat().setLocalMainStreamInfo(this.userInfo.userId,this.streamPublishManager.getPublishedMainStreamInfos())&&this.buildSendMediaStreamInfo(TC.Video,t)}if(null!==(n=e.auxStreamTracks2Update)&&void 0!==n&&null!==(o=n.tracks2NewPublish)&&void 0!==o&&o.filter((e=>e.type===mO.TRACK_TYPE_VIDEO))){this.stat.getMediaStat().setLocalAuxsStreamInfo(this.userInfo.userId,this.streamPublishManager.getPublishedAuxStreamInfo())&&this.buildSendMediaStreamInfo(TC.Aux)}}async publishWhenWatch(e,t){if(!t||0===t.tracks2NewPublish.length&&0===t.tracks2KeepPublish.length&&0===t.tracks2UnPublish.length)return void this.logger.info(CN,"handleWatchMsg, watched track no update");const r=this.streamPublishManager.getLocalStream(e);await this.sendPublishRequest(t.allTracks2Publish),await this.startStreamResolutionDetection(r),await this.updateStreamTracks(r,t),this.logger.info(CN,"handleWatchMsg, published stream")}setCameraCaptureReport(e,t){this.stat.setCameraInfo(e,t)}signalEvent(){this.signal.on(bC.watchStreamNotify,(e=>{this.handleWatchMsg(e)})),this.signal.on(bC.pushStreamNotify,(e=>{this.refreshRemoteStreamList(e)})),this.signal.on(bC.stopPushStreamNotify,(e=>{this.removeRemoteStream(e)})),this.signal.on(bC.changeStreamStatusNotify,(e=>{this.updateRemoteStream(e)})),this.signal.on(bC.appDataChangeNotify,(e=>{this.updateAppData(e)})),this.signal.on(bC.disconnectNotify,(e=>{this.remoteUserDisconnectNotify(e)})),this.signal.on(bC.reconnectNotify,(e=>{this.remoteUserReconnectNotify(e)})),this.signal.on(bC.configNotify,(e=>{this.handleConfigNotifyBody(e)})),this.signal.on(bC.top3AudioVolumeNotify,(e=>{this.handleMaxVolumeNotify(e)})),this.signal.on(bC.statusChangeNotify,(async e=>{await this.updateUserList(e)})),this.signal.on(bC.uploadLogNotify,(async e=>{await this.uploadLog(e)})),this.signal.on(bC.publishStatusNotify,(e=>{this.handlePublishStatusNotify(e)})),this.signal.on(dM.Reconnected,(async()=>{await this.refreshRoomUserInfos()})),this.signal.on(dM.SessionUnavailable,(async()=>{this.logger.info(CN,"".concat(dM.SessionUnavailable));await this.rejoinLoop(120)})),this.signal.on(dM.ConnectionUnavailable,(async()=>{this.logger.info(CN,"".concat(dM.ConnectionUnavailable));await this.rejoinLoop(120)})),this.signal.on(dM.AuthenticateFail,(async()=>{this.logger.info(CN,"".concat(dM.AuthenticateFail)),this.doLeaveRoom()})),this.signal.on(dM.SignatureExpired,(e=>{this.handleNotifySignatureExpired(e)})),this.signal.on(UC.ConnectionStateChanged,(e=>{this.handleNotifyConnectStateChange(e)})),this.signal.on(UC.NetworkQuality,(e=>{this.eventEmitter.emit(UC.NetworkQuality,e)})),this.signal.on(dM.ClientBanned,(()=>{this.kickRoom()})),this.signal.on(bC.roomStreamStatusNotify,(e=>{this.handleNotifyRoomStreamStatus(e)}))}kickRoom(){this.eventEmitter.emit(UC.ClientBanned,{userId:this.userInfo.userId}),this.cleanup(),this.cleanTransportStats(),this.stat.leaveRoom(),nO.immediateReportRecords(),this.logger.info(CN,"kick leave success")}async refreshRoomUserInfos(){const e=await this.signal.queryRoomUsers(null);await this.doRefreshRoomUserInfos(this.roomId,e.userInfos,!1)}async doRefreshRoomUserInfos(e,t,r){try{this.logger.debug(CN,"doRefreshRoomUserInfos, begin");const i=this.remoteUserManager.refreshRemoteUserList(e,t,r);if(!i)return null;i.forEach((e=>{this.updateSingleUser(e)})),await this.updateSubscribe(i)}catch(jN){this.logger.error(CN,"doRefreshRoomUserInfos, error:".concat(jN))}}async rejoinLoop(e){if(this.isLoopRejoining)this.logger.info(CN,"rejoinLoop, isLoopRejoining so return");else try{this.isLoopRejoining=!0;const t=async e=>await this.handleRejoin(e),r=e=>"function"==typeof(null==e?void 0:e.getCode)&&e.getCode()===Gc.RTC_ERR_CODE_STATUS_ERROR;return await mP.callWithRetryTimes(t,!1,e,RN,r)}catch(jN){this.logger.error(CN,"rejoinLoop, rejoin room failed, leave room, error:".concat(jN)),this.localRejoinFlag||(this.connectState={prevState:vC[yC.RECONNECTING],curState:vC[yC.DISCONNECTED]},this.eventEmitter.emit(UC.ConnectionStateChanged,this.connectState));try{await this.leaveImpl()}catch(jN){this.logger.error(CN,"rejoinLoop, leave failed, error:".concat(jN))}}finally{this.isLoopRejoining=!1}}async handleRejoin(e){if(this.logger.info(CN,"handleRejoin, client status: ".concat(this.status,", tryNumber:").concat(e)),this.status===OC.Idle)throw this.logger.error(CN,"handleRejoin, status:".concat(OC.Idle)),new qc(Gc.RTC_ERR_CODE_STATUS_ERROR,"handleRejoin but status is Idle");if(this.isSignatureExpired){if(this.signatureExpiredRejoinTimeout)return void this.logger.info(CN,"signature expired, try rejoin, timer already exists");this.signatureExpiredRejoinTimeout=setTimeout((()=>{throw this.logger.error(CN,"handleRejoin, signature expired and retry limit, exit"),this.cleanup(),new qc(Gc.RTC_ERR_CODE_STATUS_ERROR,"handleRejoin but signature expired")}),2e4)}try{await this.locker.lock("".concat(CN,":handleRejoin")),this.status=OC.Rejoining,await this.rejoin(this.roomId,uM.transLocalUserToJoinConfig(this.userInfo)),this.getSessionStatus()===OC.Joined&&(this.logger.info(CN,"handleRejoin, rejoin room success"),this.isSignatureExpired=!1,clearTimeout(this.signatureExpiredRejoinTimeout),this.signatureExpiredRejoinTimeout=void 0,this.connectState={prevState:vC[yC.RECONNECTING],curState:vC[yC.CONNECTED]},this.eventEmitter.emit(UC.ConnectionStateChanged,this.connectState),await this.rejoinPublish(),this.localRejoinFlag=!1)}finally{this.locker.unlock("".concat(CN,":handleRejoin"))}}async rejoinPublish(){this.logger.info(CN,"rejoin publish stream"),this.connectState.prevState=vC[yC.DISCONNECTED];const e=[],t=this.streamPublishManager.getLocalStream(gO.STREAM_TYPE_MAIN),r=this.streamPublishManager.getLocalStream(gO.STREAM_TYPE_AUX);t&&e.push(t),r&&e.push(r),e.length>0&&await this.rejoinPublishStreams(e)}handleNotifySignatureExpired(e){this.logger.warn(CN,"handleNotifySignatureExpired");const t={code:0,reason:""};"reconnect"===e.type?(this.logger.warn(CN,"reconnect but signature expired"),t.code=Gc.RTC_ERR_CODE_SIGNATURE_EXPIRED,t.reason=Jc[Gc.RTC_ERR_CODE_SIGNATURE_EXPIRED]):this.isLoopRejoining?(this.logger.warn(CN,"rejoin but signature expired"),this.isSignatureExpired=!0,t.code=Gc.RTC_ERR_CODE_SIGNATURE_EXPIRED,t.reason=Jc[Gc.RTC_ERR_CODE_SIGNATURE_EXPIRED]):(t.code=Gc.RTC_ERR_CODE_SIGNATURE_INVALID,t.reason=Jc[Gc.RTC_ERR_CODE_SIGNATURE_INVALID]),this.validSignatureFunc&&this.validSignatureFunc(t),this.validSignatureFunc=void 0;const r={errorCode:"".concat(t.code),errorMsg:t.reason};this.eventEmitter.emit(UC.SignatureExpired,r)}handleNotifyConnectStateChange(e){this.logger.info(CN,"ConnectStateChange"),this.eventEmitter.emit(UC.ConnectionStateChanged,e),this.connectState.curState=e.curState}cleanNetworkStatistic(){this.preNetQuality=null,this.downLinkData=null,this.upLinkData=null}cleanup(){var e,t,r;null===(e=this.signal)||void 0===e||e.disconnect(),this.signal=void 0,this.resetConnection(),null===(t=this.remoteUserManager)||void 0===t||t.clear(this.roomId);const i=this.streamPublishManager.getLocalStream(gO.STREAM_TYPE_MAIN);if(i){i.removeClient(this)}this.streamPublishManager.reset(),clearTimeout(this.streamInterruptedDetectInterval),clearTimeout(this.rtcStatsInterval),clearTimeout(this.netQualityTimer),clearTimeout(this.transportStatsTimer),CO.reset(),this.cleanNetworkStatistic(),this.streamInterruptedDetectInterval=null,this.rtcStatsInterval=null,this.lastCycleFrameDecodedMap.clear(),this.streamInterruptedUsersMap.clear(),this.startupQoSMap.clear(),this.status=OC.Idle,this.locker.clear(),clearInterval(this.audioLevelTimer),ED.stopRelayConnection(this,this.roomId),null===(r=this.cmdMsgAbility.cmdManager)||void 0===r||r.reset(),this.isSignatureExpired=!1,clearTimeout(this.signatureExpiredRejoinTimeout),this.signatureExpiredRejoinTimeout=void 0}async addSsrc4Top3(e){var t;return this.audioStreams4TopN.close(),await this.addSsrc2SdpBatch(e,null===(t=this.sdpRepInfo.audio)||void 0===t?void 0:t.topNSsrcBegin)}setAudioLevelStatTimer(){this.audioLevelTimer&&clearInterval(this.audioLevelTimer),this.logger.info(CN,"setAudioLevelStatTimer"),this.audioLevelTimer=setInterval((()=>{try{this.audioStreams4TopN.getAudioLevel().forEach((e=>{const t=Math.round(100*e.level);this.stat.getMediaStat().updateAudioLevel({type:"remotetop3",level:t,ssrc:e.ssrc})}));const e=this.remoteUserManager.getAllUserStreamsByType(this.roomId,gO.STREAM_TYPE_MAIN,mO.TRACK_TYPE_AUDIO),t=[];e.forEach((e=>{const r=e.mainStream.tracks.find((e=>e.isTrackReady&&e.type===mO.TRACK_TYPE_AUDIO&&e.isSubscribed));r&&t.push({userId:e.userId,ssrc:r.cssrc})}));for(const n of t){const e=this.remoteUserManager.getUserInfoById(n.userId,this.roomId),t=Math.round(100*e.mainStream.remoteStream.getAudioLevel());this.stat.getMediaStat().updateAudioLevel({type:"remote",level:t,ssrc:n.ssrc,userId:n.userId})}const r=this.streamPublishManager.getLocalStream(gO.STREAM_TYPE_MAIN),i=Math.round(100*(r?r.getAudioLevel():0));this.stat.getMediaStat().updateAudioLevel({type:"local",level:i})}catch(jN){this.logger.error(CN,"setAudioLevelStatTimer, occur error: ".concat(jN))}}),this.audioLevelInterval)}async addSsrc2SdpBatch(e,t){if(!t)return null;const r={answerSdp:e},i=await this.connectionsManager.addTopAudioUserBatch(r.answerSdp,t,3,((e,t)=>{this.audioStreams4TopN.addAudioStream(e,t)}));return this.stat.getMediaStat().setStartSsrc(t),i}async saveAudioStream4TopN(e){this.logger.info(CN,"AudioPolicy:TOPN_AUDIOPOLICY, save audio stream, streamId: ".concat(e.streams[0].id));if(null!=this.audioStreams4TopN.getAudioStream(e.streams[0].id)){this.audioStreams4TopN.updateAudioStream(e.streams[0].id,e.track),this.logger.info(CN,"AudioPolicy:TOPN_AUDIOPOLICY, save audio stream ok, streamId: ".concat(e.streams[0].id));try{await this.audioStreams4TopN.play(e.streams[0].id),this.audioStreams4TopN.setAudioVolume4Id(e.streams[0].id,this.topNAudioVolume),this.logger.info(CN,"AudioPolicy:TOPN_AUDIOPOLICY, auto play audio success, streamId: ".concat(e.streams[0].id))}catch(e){this.logger.error(CN,"AudioPolicy:TOPN_AUDIOPOLICY, auto play audio fail, ".concat(null==e?void 0:e.message,", streamId: ").concat(e.streams[0].id))}}else this.logger.error(CN,"AudioPolicy:TOPN_AUDIOPOLICY, audio stream of streamId: ".concat(e.streams[0].id," not exist"))}handleMaxVolumeNotify(e){try{e.topUserAudios&&e.topUserAudios.length>0?(this.top3VolumeUserIds.length=0,e.topUserAudios.forEach((e=>{e.volume=100*(60-(e.volume>60?60:e.volume))/60,this.top3VolumeUserIds.push({user_id:e.userId,volume:e.volume})})),this.audioPolicy===_O.TOPN_AUDIOPOLICY&&this.eventEmitter.emit(UC.VolumeIndicator,{userVolumeInfos:this.top3VolumeUserIds})):this.logger.error(CN,"handleMaxVolumeNotify error,topUserAudios is null")}catch(Aw){this.logger.error(CN,"handleMaxVolumeNotify error ".concat(null==Aw?void 0:Aw.message))}}handlePublishStatusNotify(e){try{e.urlStatus&&(this.logger.info(CN,"emit ".concat(UC.LiveStreamingUpdated)),this.eventEmitter.emit(UC.LiveStreamingUpdated,e.urlStatus))}catch(Aw){this.logger.error(CN,"handlePublishStatusNotify error ".concat(Aw))}}setVolume4TopThree(e){this.setVolume4TopThreeImpl(e)}setVolume4TopThreeImpl(e){this.logger.debug(CN,"setVolume4TopThreeImpl volume: "+e),e>100||e<0||this.audioPolicy===_O.TOPN_AUDIOPOLICY&&(this.topNAudioVolume=e,this.audioStreams4TopN.setAudioVolume(e))}muteAudio4TopThree(e){this.muteAudio4TopThreeImpl(e)}muteAudio4TopThreeImpl(e){this.logger.debug(CN,"muteAudio4TopThree enable: "+e),this.audioPolicy===_O.TOPN_AUDIOPOLICY&&this.audioStreams4TopN.muteAudio(e)}async setAudioOutput4TopThree(e){this.audioPolicy===_O.TOPN_AUDIOPOLICY&&await this.audioStreams4TopN.setAudioOutput(e)}isTopNAudioMuted(){return this.isTopNAudioMutedImpl()}isTopNAudioMutedImpl(){let e=!1;return this.audioPolicy===_O.TOPN_AUDIOPOLICY&&(e=this.audioStreams4TopN.isAudioMuted(),this.logger.debug(CN,"isTopNAudioMutedImpl : "+e)),e}async changeUserName(e){return await this.changeUserNameImpl(e)}async changeUserNameImpl(e){try{if(Zk.checkUserName(e),this.userInfo.role===nM)throw new qc(Gc.RTC_ERR_CODE_INVALID_OPERATION,"player can not change user name");return await this.signal.appData(this.userInfo.appData,"nickname",e),this.userInfo.appData.nickname=e,!0}catch(jN){return this.logger.error(CN,"changeUserNameImpl, error:".concat(jN)),!1}}reportAudioMuteInfo(e,t){this.stat.reportAudioMuteInfo(e,t)}reportVideoMuteInfo(e,t){this.stat.reportVideoMuteInfo(e,t)}async startLiveStreaming(e,t,r,i){return await this.startLiveStreamingImpl(e,t,r,i)}async startLiveStreamingImpl(e,t,r,i){if(this.logger.info(CN,"startLiveStreaming: publishConfig: ".concat(JSON.stringify(r),", userConfig: ").concat(JSON.stringify(i))),!(t&&e&&r&&i))throw this.logger.error(CN,"startLiveStreaming failed for parameter error: empty parameter"),new qc(Gc.RTC_ERR_CODE_INVALID_PARAMETER);if(this.status!==OC.Joined||this.userInfo.role!==iM)throw this.logger.error(CN,"startLiveStreaming failed for permission not allowed"),new qc(Gc.RTC_ERR_CODE_ROLE_NO_PERMISSION);const n=this.getLiveStreamingUserInfos(i,99===r.template);if(0===n.length)throw this.logger.error(CN,"startLiveStreaming failed for parameter error:".concat(JSON.stringify(i))),new qc(Gc.RTC_ERR_CODE_INVALID_PARAMETER);try{await this.signal.startLiveStreaming(e,t,r,n),this.logger.info(CN,"startLiveStreaming success, taskId: ".concat(e,", url: ").concat(t))}catch(jN){throw this.logger.error(CN,"startLiveStreaming failed: ".concat(jN)),jN}}getLiveStreamingUserInfos(e,t){if(!e||0===e.length)return null;const r=[],i=this.userInfo.userId;return e.forEach((e=>{const n={userId:e.userId,audioStreams:[],videoStreams:[],layouts:[]};if(t&&!e.layouts)throw this.logger.error(CN,"getLiveStreamingUserInfos, layouts is null when template=99"),new qc(Gc.RTC_ERR_CODE_INVALID_PARAMETER);e.userId===i?this.getLocalLiveStreamingUserInfos(e,n,t):this.getRemoteLiveStreamingUserInfos(e,n,t),(n.audioStreams.length||n.videoStreams.length)&&r.push(n)})),this.logger.info(CN,"getLiveStreamingUserInfos, publishInfos : ".concat(JSON.stringify(r))),r}getLocalLiveStreamingUserInfos(t,r,i){const n=this.streamPublishManager.getPublishedMainStreamInfos();if(t.audio){var o;const e=null==n||null===(o=n.find((e=>e.type===mO.TRACK_TYPE_AUDIO)))||void 0===o?void 0:o.ssrc;e&&r.audioStreams.push(e)}if(!t.resolutionIds||0===t.resolutionIds.length)return;const s=this.streamPublishManager.getPublishedAuxVideoTrackInfo();t.resolutionIds.forEach((o=>{var a;const c=null==n||null===(a=n.find((e=>e.resolutionId===o)))||void 0===a?void 0:a.ssrc;c?e.updateSlidePublishInfo(t,r,c,o,i):(null==s?void 0:s.resolutionId)===o&&e.updateSlidePublishInfo(t,r,s.ssrc,o,i)}))}static getSsrcLayout(e,t){return{alpha:t.alpha,localX:t.localX,localY:t.localY,renderMode:t.renderMode,ssrc:e,subBackGroundColor:t.subBackGroundColor,subHeight:t.subHeight,subWidth:t.subWidth,zorder:t.zorder}}getRemoteLiveStreamingUserInfos(t,r,i){const n=this.remoteUserManager.getAllUserStreamsByType(this.roomId,null,null),o=null==n?void 0:n.find((e=>e.userId===t.userId));if(o){if(t.audio){var s,a,c;const e=null===(s=o.mainStream)||void 0===s||null===(a=s.tracks)||void 0===a||null===(c=a.find((e=>e.type===mO.TRACK_TYPE_AUDIO)))||void 0===c?void 0:c.pssrc;e&&r.audioStreams.push(e)}if(!t.resolutionIds||0===t.resolutionIds.length)return;for(const n of t.resolutionIds){var u,d,l;const s=null===(u=o.mainStream)||void 0===u||null===(d=u.tracks)||void 0===d||null===(l=d.find((e=>e.trackId===n)))||void 0===l?void 0:l.pssrc;if(s)e.updateSlidePublishInfo(t,r,s,n,i);else{var h,f,p;const s=null===(h=o.auxStream)||void 0===h||null===(f=h.tracks)||void 0===f||null===(p=f.find((e=>e.trackId===n)))||void 0===p?void 0:p.pssrc;s&&e.updateSlidePublishInfo(t,r,s,n,i)}}}}static updateSlidePublishInfo(t,r,i,n,o){if(r.videoStreams.push(i),o&&t.layouts){const o=t.layouts.find((e=>e.resolutionId===n));if(o){const t=e.getSsrcLayout(i,o);r.layouts.push(t)}}}async updateLiveStreaming(e,t,r,i){return await this.updateLiveStreamingImpl(e,t,r,i)}async updateLiveStreamingImpl(e,t,r,i){if(this.logger.info(CN,"updateLiveStreaming: publishConfig: ".concat(JSON.stringify(r),", userConfig: ").concat(JSON.stringify(i))),!(t&&e&&r&&i))throw this.logger.error(CN,"updateLiveStreaming failed for parameter error: empty param"),new qc(Gc.RTC_ERR_CODE_INVALID_PARAMETER);if(this.status!==OC.Joined||this.userInfo.role!==iM)throw this.logger.error(CN,"updateLiveStreaming failed for permission not allowed"),new qc(Gc.RTC_ERR_CODE_ROLE_NO_PERMISSION);const n=this.getLiveStreamingUserInfos(i,99===r.template);try{await this.signal.updateLiveStreaming(e,r,n),this.logger.info(CN,"updateLiveStreaming success, taskId: ".concat(e,", url: ").concat(t))}catch(jN){throw this.logger.error(CN,"updateLiveStreaming failed: ".concat(jN)),jN}}async stopLiveStreaming(e){return await this.stopLiveStreamingImpl(e)}async stopLiveStreamingImpl(e){if(this.logger.info(CN,"stopLiveStreaming: taskId: ".concat(e)),!e)throw this.logger.error(CN,"stopLiveStreaming failed for parameter error: taskId is empty"),new qc(Gc.RTC_ERR_CODE_INVALID_PARAMETER);try{await this.signal.stopLiveStreaming(e),this.logger.info(CN,"stopLiveStreaming success, taskId: ".concat(e))}catch(jN){throw this.logger.error(CN,"stopLiveStreaming failed: ".concat(jN)),jN}}setProxyServer(e){eO.setPorxyServer(e)}setTurnServer(e){var t;null===(t=this.connectionsManager)||void 0===t||t.setTurnServer(e)}async addMultiRoomMediaRelay(e){if(this.status!==OC.Joined)throw this.logger.error(CN,"addMultiRoomMediaRelay failed for not joined room."),new qc(Gc.RTC_ERR_CODE_INVALID_OPERATION);Zk.checkSrcMultiRoomInfo(e.srcRoomRelayInfo);for(const n of e.dstRoomRelayInfo)Zk.checkDstMultiRoomInfo(n,this.userInfo.role);const t=new Map;e.dstRoomRelayInfo.forEach((e=>{t.set(e.roomId,e.role)}));const r=await this.signal.mediaRelay(e,!0,this.userInfo),i=[];return r.addResult.forEach((async e=>{i.push({roomId:e.roomId,result:e.resultCode,msg:e.resultMessage}),0===e.resultCode?this.userInfo.addRelayInfo(e.roomId,t.get(e.roomId)):this.logger.error(CN,"addMultiRoomMediaRelay failed, roomId: ".concat(e.roomId,", resultCode: ").concat(e.resultCode,", errMsg: ").concat(e.resultMessage)),this.stat.reportRelayJoinInfo({code:e.resultCode,acsAddr:"",requestId:r.requestId,traceId:r.traceId,roomId:e.roomId,role:t.get(e.roomId),roomUid:e.roomUid,failMessage:e.resultMessage})})),i}async stopMultiRoomMediaRelay(e){if(this.status!==OC.Joined)throw this.logger.error(CN,"stopMultiRoomMediaRelay failed for not joined room."),new qc(Gc.RTC_ERR_CODE_INVALID_OPERATION);let t;if(e&&e.dstRoomRelayInfo&&0!==e.dstRoomRelayInfo.length){Zk.checkSrcMultiRoomInfo(e.srcRoomRelayInfo);for(const t of e.dstRoomRelayInfo)Zk.checkDstMultiRoomInfo(t,this.userInfo.role);t=e}else t={dstRoomRelayInfo:this.userInfo.getRelayInfos()};const r=await this.signal.mediaRelay(t,!1,this.userInfo),i=[];return r.addResult.forEach((async e=>{i.push({roomId:e.roomId,result:e.resultCode,msg:e.resultMessage}),0===e.resultCode?this.userInfo.removeRelayInfo(e.roomId):this.logger.error(CN,"stopMultiRoomMediaRelay failed, roomId: ".concat(e.roomId,", resultCode: ").concat(e.resultCode,", errMsg: ").concat(e.resultMessage)),this.stat.reportRelayLeavInfo({code:e.resultCode,requestId:r.requestId,traceId:r.traceId,roomId:e.roomId,roomUid:e.roomUid})})),i}addRelayClient(e){return ED.addRelayConnection(this,e)}async stopRelayClient(e){const t=ED.getRelayConnection(this,e);t&&await t.leave()}enableCommandMsg(e,t){if(this.status!==OC.Idle&&e)throw new qc(Gc.RTC_ERR_CODE_INVALID_OPERATION,"pls call enableCommandMsg interface before join room first.");var r;e?this.cmdMsgAbility.msgFormat=(null==t?void 0:t.msgFormat)===VC.ARRAY_BUFFER?VC.ARRAY_BUFFER:VC.STRING:(null===(r=this.cmdMsgAbility.cmdManager)||void 0===r||r.reset(),this.cmdMsgAbility.cmdManager=null);return this.cmdMsgAbility.enable=e,!0}sendCommandMsg(e,t){var r;if(!this.cmdMsgAbility.enable)throw new qc(Gc.RTC_ERR_CODE_INVALID_OPERATION,"pls call enableCommandMsg interface before join room first.");if(this.status!==OC.Joined)throw new qc(Gc.RTC_ERR_CODE_INVALID_OPERATION,"pls call this interface after joined room.");if((null===(r=this.userInfo)||void 0===r?void 0:r.roleSignalType)!==oM.JOINER)throw new qc(Gc.RTC_ERR_CODE_INVALID_OPERATION,"only joiner can send comand message.");return Zk.checkCmdMsgValid(e),this.cmdMsgAbility.cmdManager.sendCommandMsg(e,t,this.roomId)}async handleNotifyRoomStreamStatus(e){const{audienceState:t}=e;this.logger.info(CN,"handleNotifyRoomStreamStatus handle room stream status : "+t+" role:"+this.userInfo.role),await this.handleRoomStreamStatus(t,_O.TOPN_AUDIOPOLICY===this.audioPolicy&&this.userInfo.role===nM&&YC.NORMAL===t)}async handleRoomStreamStatus(e,t,r){this.logger.info(CN,"handle room stream status : "+e),this.roomStreamStatus={audience:e};try{if(this.userInfo.role===nM&&e===YC.PAUSE){this.logger.info(CN,"player handle room stream status : "+e);const t=this.remoteUserManager.getAllSubscribedUpdateInfos4Unsubscribe(this.roomId);await this.updateSubscribe(t,null,!0),_O.TOPN_AUDIOPOLICY===this.audioPolicy&&(this.logger.info(CN,"player handle room stream status : "+e+" and topN unsubscribeUsersAudio"),await this.unsubscribeUsersAudio()),this.logger.info(CN,"player handle room stream status : "+e+" and clear intervals"),this.cleanNetworkStatistic(),this.netQualityRegularReport(),this.cleanTransportStats(),this.setAudioLevelStatTimer()}t&&(this.logger.info(CN,"".concat(this.userInfo.role," handle room stream status : ")+e+" and topN addSsrc4Top3"),this.remoteUserManager.enableTopThreeAudioMode(this.roomId),await this.connectionsManager.generateAndSetOfferSdpByHandler(gO.STREAM_TYPE_MAIN),await this.connectionsManager.generateAndSetAnswerSdpByHandler(gO.STREAM_TYPE_MAIN,this.addSsrc4Top3.bind(this))),(r||this.userInfo.role===nM&&[YC.PAUSE,YC.NORMAL].includes(e))&&(this.logger.info(CN,"eventEmitter RoomStreamStatus : "+e),this.eventEmitter.emit(UC.RoomStreamStatus,e))}catch(Aw){this.logger.error(CN,"RoomStreamStatus : "+e+" error:"+Aw)}}renewSignature(e,t){if("string"!=typeof e||"string"!=typeof t)throw new qc(Gc.RTC_ERR_CODE_INVALID_PARAMETER,"ctime or signature must be string");const r=uM.renewSignature(this.identifiedID,e,t);var i;return r?(this.userInfo=r,null===(i=this.signal)||void 0===i||i.refreshUserInfo(r),this.logger.info(CN,"renewSignature success"),!0):(this.logger.info(CN,"renewSignature fail"),!1)}},n(TN.prototype,"enableTopThreeAudioMode",[VD],Object.getOwnPropertyDescriptor(TN.prototype,"enableTopThreeAudioMode"),TN.prototype),n(TN.prototype,"switchAudioMode",[YD],Object.getOwnPropertyDescriptor(TN.prototype,"switchAudioMode"),TN.prototype),n(TN.prototype,"getConnectionState",[jD],Object.getOwnPropertyDescriptor(TN.prototype,"getConnectionState"),TN.prototype),n(TN.prototype,"setNetworkBandwidth",[FD],Object.getOwnPropertyDescriptor(TN.prototype,"setNetworkBandwidth"),TN.prototype),n(TN.prototype,"join",[HD],Object.getOwnPropertyDescriptor(TN.prototype,"join"),TN.prototype),n(TN.prototype,"enableRtcStats",[KD],Object.getOwnPropertyDescriptor(TN.prototype,"enableRtcStats"),TN.prototype),n(TN.prototype,"leave",[zD],Object.getOwnPropertyDescriptor(TN.prototype,"leave"),TN.prototype),n(TN.prototype,"publish",[WD],Object.getOwnPropertyDescriptor(TN.prototype,"publish"),TN.prototype),n(TN.prototype,"publishImpl",[GD],Object.getOwnPropertyDescriptor(TN.prototype,"publishImpl"),TN.prototype),n(TN.prototype,"unpublish",[JD],Object.getOwnPropertyDescriptor(TN.prototype,"unpublish"),TN.prototype),n(TN.prototype,"subscribeAudio",[qD],Object.getOwnPropertyDescriptor(TN.prototype,"subscribeAudio"),TN.prototype),n(TN.prototype,"unSubscribeAudio",[XD],Object.getOwnPropertyDescriptor(TN.prototype,"unSubscribeAudio"),TN.prototype),n(TN.prototype,"subscribe",[QD],Object.getOwnPropertyDescriptor(TN.prototype,"subscribe"),TN.prototype),n(TN.prototype,"batchSubscribe",[$D],Object.getOwnPropertyDescriptor(TN.prototype,"batchSubscribe"),TN.prototype),n(TN.prototype,"unsubscribe",[ZD],Object.getOwnPropertyDescriptor(TN.prototype,"unsubscribe"),TN.prototype),n(TN.prototype,"switchRole",[eN],Object.getOwnPropertyDescriptor(TN.prototype,"switchRole"),TN.prototype),n(TN.prototype,"refreshRemoteStreamList",[tN],Object.getOwnPropertyDescriptor(TN.prototype,"refreshRemoteStreamList"),TN.prototype),n(TN.prototype,"updateRemoteStream",[rN],Object.getOwnPropertyDescriptor(TN.prototype,"updateRemoteStream"),TN.prototype),n(TN.prototype,"removeRemoteStream",[iN],Object.getOwnPropertyDescriptor(TN.prototype,"removeRemoteStream"),TN.prototype),n(TN.prototype,"handleWatchMsg",[nN],Object.getOwnPropertyDescriptor(TN.prototype,"handleWatchMsg"),TN.prototype),n(TN.prototype,"refreshRoomUserInfos",[oN],Object.getOwnPropertyDescriptor(TN.prototype,"refreshRoomUserInfos"),TN.prototype),n(TN.prototype,"setVolume4TopThree",[sN],Object.getOwnPropertyDescriptor(TN.prototype,"setVolume4TopThree"),TN.prototype),n(TN.prototype,"muteAudio4TopThree",[aN],Object.getOwnPropertyDescriptor(TN.prototype,"muteAudio4TopThree"),TN.prototype),n(TN.prototype,"setAudioOutput4TopThree",[cN],Object.getOwnPropertyDescriptor(TN.prototype,"setAudioOutput4TopThree"),TN.prototype),n(TN.prototype,"isTopNAudioMuted",[uN],Object.getOwnPropertyDescriptor(TN.prototype,"isTopNAudioMuted"),TN.prototype),n(TN.prototype,"changeUserName",[dN],Object.getOwnPropertyDescriptor(TN.prototype,"changeUserName"),TN.prototype),n(TN.prototype,"startLiveStreaming",[lN],Object.getOwnPropertyDescriptor(TN.prototype,"startLiveStreaming"),TN.prototype),n(TN.prototype,"updateLiveStreaming",[hN],Object.getOwnPropertyDescriptor(TN.prototype,"updateLiveStreaming"),TN.prototype),n(TN.prototype,"stopLiveStreaming",[fN],Object.getOwnPropertyDescriptor(TN.prototype,"stopLiveStreaming"),TN.prototype),n(TN.prototype,"setProxyServer",[pN],Object.getOwnPropertyDescriptor(TN.prototype,"setProxyServer"),TN.prototype),n(TN.prototype,"setTurnServer",[mN],Object.getOwnPropertyDescriptor(TN.prototype,"setTurnServer"),TN.prototype),n(TN.prototype,"addMultiRoomMediaRelay",[gN],Object.getOwnPropertyDescriptor(TN.prototype,"addMultiRoomMediaRelay"),TN.prototype),n(TN.prototype,"stopMultiRoomMediaRelay",[_N],Object.getOwnPropertyDescriptor(TN.prototype,"stopMultiRoomMediaRelay"),TN.prototype),n(TN.prototype,"addRelayClient",[SN],Object.getOwnPropertyDescriptor(TN.prototype,"addRelayClient"),TN.prototype),n(TN.prototype,"stopRelayClient",[vN],Object.getOwnPropertyDescriptor(TN.prototype,"stopRelayClient"),TN.prototype),n(TN.prototype,"enableCommandMsg",[yN],Object.getOwnPropertyDescriptor(TN.prototype,"enableCommandMsg"),TN.prototype),n(TN.prototype,"renewSignature",[IN],Object.getOwnPropertyDescriptor(TN.prototype,"renewSignature"),TN.prototype),TN);var wN,kN,ON,PN,MN,DN,NN,UN,xN,LN,BN;const VN=new(wN=fP("default$setLogLevel#void#LogLevel"),kN=hP("default$checkSystemRequirements#Promise#boolean"),ON=fP("default$isScreenShareSupported#boolean"),PN=hP("default$getDevices#Promise"),MN=hP("default$getCameras#Promise"),DN=hP("default$getMicrophones#Promise"),NN=hP("default$getSpeakers#Promise"),UN=fP("default$setParameter#boolean#string#string"),xN=fP("default$createClient#Client#ClientConfig"),LN=fP("default$createStream#LocalStream#StreamConfig"),n((BN=class extends $P{constructor(){super({logger:!0,stat:!0}),i(this,"VERSION",uA),this.stat.setDeviceStatusInfo(),this.stat.setDeviceUserAgent()}setLogLevel(e){iE.setAllLogLevel(e)}async checkSystemRequirements(e){return await Cw.checkSystemRequirements(e)}isScreenShareSupported(){return Cw.isRTCScreenShareSupported()}async getDevices(){return await AC()}async getCameras(){return await async function(){return new Promise(((e,t)=>{AC().then((r=>{const i=r.filter((e=>"videoinput"===e.kind));i&&0!==i.length?e(i):t(new qc(Gc.RTC_ERR_CODE_NO_AVAILABLE_VIDEO_INPUT_DEVICES))})).catch((e=>{t(e)}))}))}()}async getMicrophones(){return await async function(){return new Promise(((e,t)=>{AC().then((r=>{const i=r.filter((e=>"audioinput"===e.kind&&"communications"!==e.deviceId&&"default"!==e.deviceId));i&&0!==i.length?e(i):t(new qc(Gc.RTC_ERR_CODE_NO_AVAILABLE_AUDIO_INPUT_DEVICES))})).catch((e=>{t(e)}))}))}()}async getSpeakers(){return await async function(){return new Promise(((e,t)=>{AC().then((r=>{const i=r.filter((e=>"audiooutput"===e.kind));i&&0!==i.length?e(i):t(new qc(Gc.RTC_ERR_CODE_NO_AVAILABLE_AUDIO_OUTPUT_DEVICES))})).catch((e=>{t(e)}))}))}()}setParameter(e,t){return pO.setParameter(e,t)}createClient(e){return Zk.checkAppid(e.appId),Zk.checkCountryCode(e.countryCode),e.domain&&Zk.checkDomain(e.domain),new AN(e)}createStream(e){if(e.screen){if(e.videoSource||e.audioSource){if(!0===e.video||!0===e.audio)throw new qc(Gc.RTC_ERR_CODE_INVALID_OPERATION)}else if(!this.isScreenShareSupported())throw new qc(Gc.RTC_ERR_CODE_INVALID_OPERATION,"screen share is not supported")}else{if(!0!==e.video&&!0!==e.audio&&!e.videoSource&&!e.audioSource)throw new qc(Gc.RTC_ERR_CODE_INVALID_OPERATION);if((!0===e.video||!0===e.audio)&&(e.videoSource||e.audioSource))throw new qc(Gc.RTC_ERR_CODE_INVALID_OPERATION)}return new tM(e)}getInfo(){return{moduleName:"default"}}}).prototype,"setLogLevel",[wN],Object.getOwnPropertyDescriptor(BN.prototype,"setLogLevel"),BN.prototype),n(BN.prototype,"checkSystemRequirements",[kN],Object.getOwnPropertyDescriptor(BN.prototype,"checkSystemRequirements"),BN.prototype),n(BN.prototype,"isScreenShareSupported",[ON],Object.getOwnPropertyDescriptor(BN.prototype,"isScreenShareSupported"),BN.prototype),n(BN.prototype,"getDevices",[PN],Object.getOwnPropertyDescriptor(BN.prototype,"getDevices"),BN.prototype),n(BN.prototype,"getCameras",[MN],Object.getOwnPropertyDescriptor(BN.prototype,"getCameras"),BN.prototype),n(BN.prototype,"getMicrophones",[DN],Object.getOwnPropertyDescriptor(BN.prototype,"getMicrophones"),BN.prototype),n(BN.prototype,"getSpeakers",[NN],Object.getOwnPropertyDescriptor(BN.prototype,"getSpeakers"),BN.prototype),n(BN.prototype,"setParameter",[UN],Object.getOwnPropertyDescriptor(BN.prototype,"setParameter"),BN.prototype),n(BN.prototype,"createClient",[xN],Object.getOwnPropertyDescriptor(BN.prototype,"createClient"),BN.prototype),n(BN.prototype,"createStream",[LN],Object.getOwnPropertyDescriptor(BN.prototype,"createStream"),BN.prototype),BN),YN={};return YN.VERSION=VN.VERSION,YN.setLogLevel=VN.setLogLevel,YN.checkSystemRequirements=VN.checkSystemRequirements,YN.isScreenShareSupported=VN.isScreenShareSupported,YN.getDevices=VN.getDevices,YN.getCameras=VN.getCameras,YN.getMicrophones=VN.getMicrophones,YN.getSpeakers=VN.getSpeakers,YN.setParameter=VN.setParameter,YN.createClient=VN.createClient,YN.createStream=VN.createStream,YN})); diff --git a/sdk/src/worker/H264NALDecoderWorker.js b/sdk/src/worker/H264NALDecoderWorker.js new file mode 100644 index 0000000..b50e950 --- /dev/null +++ b/sdk/src/worker/H264NALDecoderWorker.js @@ -0,0 +1,2 @@ +import { init } from 'tinyh264'; +init(); diff --git a/sdk/src/worker/VideoDecoder.js b/sdk/src/worker/VideoDecoder.js deleted file mode 100644 index 95529e0..0000000 --- a/sdk/src/worker/VideoDecoder.js +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2022 Huawei Cloud Computing Technology Co., Ltd. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -import Decode from '../codec/Decode'; - -self.decode = new Decode(); - -self.addEventListener('message', event => { - let data = event.data; - let type = data.type; - let buffer = data.data; - switch (type) { - case 'startDecode': - self.decode.push(buffer); - break - case 'loadwasm': - self.decode.loadWASM(event); - break - } -}); - -export default function () {} -- Gitee From d652cce7aa9d36771a249c489a80389f1c6319a7 Mon Sep 17 00:00:00 2001 From: Yuan <294065614@qq.com> Date: Thu, 11 Jul 2024 09:42:00 +0800 Subject: [PATCH 04/12] 1 --- sdk/demo/demo.html | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/sdk/demo/demo.html b/sdk/demo/demo.html index 5f5a492..8aaaf45 100644 --- a/sdk/demo/demo.html +++ b/sdk/demo/demo.html @@ -580,8 +580,7 @@ Copyright 2022 Huawei Cloud Computing Technology Co., Ltd. ...cloudPhoneParams, channelType: channelType, ticket: '256random'.padStart(256, '0'), - aes_key: '38cd1479423e42369f099661d3f61ee6', - // aes_key: '18718724bdab49658868d43a9c3b13db', // 10706 + aes_key: '11111111111111111111111111111111', auth_ts: 'test_auth_ts', _debug: true, auto_rotate: true, -- Gitee From 3662fb362daf428ded1d4b9a55a95345b756116e Mon Sep 17 00:00:00 2001 From: Yuan <294065614@qq.com> Date: Thu, 11 Jul 2024 10:00:03 +0800 Subject: [PATCH 05/12] 1 --- sdk/src/KeyboardListener.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/sdk/src/KeyboardListener.js b/sdk/src/KeyboardListener.js index 43792b7..ffe7c5e 100644 --- a/sdk/src/KeyboardListener.js +++ b/sdk/src/KeyboardListener.js @@ -17,14 +17,12 @@ export default class KeyboardListener { } onKeydown(event) { - console.log('down',event.keyCode) if(PROTOCOL_CONFIG.PC_KEY_MAP[event.keyCode]) { this.touchHandler.sendKeyCodeEventMsg(PROTOCOL_CONFIG.KEYEVENT_KEYCODE_TYPE.ACTION_DOWN, PROTOCOL_CONFIG.PC_KEY_MAP[event.keyCode]); this.touchHandler.sendKeyCodeEventMsg(PROTOCOL_CONFIG.KEYEVENT_KEYCODE_TYPE.ACTION_UP, PROTOCOL_CONFIG.PC_KEY_MAP[event.keyCode]); } } onKeypress(event) { - console.log('press',event.keyCode) if(PROTOCOL_CONFIG.PC_KEY_PRESS_MAP[event.keyCode]) { this.touchHandler.sendKeyCodeEventMsg(PROTOCOL_CONFIG.KEYEVENT_KEYCODE_TYPE.ACTION_DOWN, PROTOCOL_CONFIG.PC_KEY_PRESS_MAP[event.keyCode]); this.touchHandler.sendKeyCodeEventMsg(PROTOCOL_CONFIG.KEYEVENT_KEYCODE_TYPE.ACTION_UP, PROTOCOL_CONFIG.PC_KEY_PRESS_MAP[event.keyCode]); -- Gitee From 7b7b79490b6e24da45750fbffeadee879dceeceb Mon Sep 17 00:00:00 2001 From: Yuan <294065614@qq.com> Date: Tue, 16 Jul 2024 16:12:45 +0800 Subject: [PATCH 06/12] 1 --- sdk/src/AppController.js | 2 ++ sdk/src/DeviceHardwareHandler.js | 6 ++++++ sdk/src/Util.js | 5 +++++ 3 files changed, 13 insertions(+) diff --git a/sdk/src/AppController.js b/sdk/src/AppController.js index d0fd1a6..fe3a267 100644 --- a/sdk/src/AppController.js +++ b/sdk/src/AppController.js @@ -1490,6 +1490,8 @@ class AppController { */ destroy(reserveSocketWorker) { this.stopPlay(); + this.util.unbind(window, "devicemotion"); + this.util.unbind(window, "deviceorientation"); this.jmuxer && this.jmuxer.destroy(); this.avc && this.avc.destroy(); this.audioPlayer && this.audioPlayer.destroy(); diff --git a/sdk/src/DeviceHardwareHandler.js b/sdk/src/DeviceHardwareHandler.js index 80b7ae1..4f01fa5 100644 --- a/sdk/src/DeviceHardwareHandler.js +++ b/sdk/src/DeviceHardwareHandler.js @@ -115,6 +115,12 @@ class DeviceHardwareHandler { } handleSensorDisable(devId) { + if (window.DeviceMotionEvent) { + this.util.unbind(window, 'devicemotion'); + } + if (window.DeviceOrientationEvent) { + this.util.unbind(window, 'deviceorientation'); + } this.sendSensorMsgData(this.sensorMsgType.OPT_SENSOR_DISABLE_REQ, devId); } diff --git a/sdk/src/Util.js b/sdk/src/Util.js index ebb65b2..0dba83b 100644 --- a/sdk/src/Util.js +++ b/sdk/src/Util.js @@ -28,6 +28,11 @@ export default class Util { return false; } + const binded = this.bindEvents.find(item => item.name === name); + if (binded) { + return false; + } + this.bindEvents.push({target, name, fn}); target.addEventListener(name, fn, false); return true; -- Gitee From 32b864b59a0d14349f8bd1c7ff3b524e4a0ba3be Mon Sep 17 00:00:00 2001 From: Yuan <294065614@qq.com> Date: Thu, 18 Jul 2024 20:34:55 +0800 Subject: [PATCH 07/12] 1 --- sdk/package.json | 1 + sdk/src/AESGCMCrypto.js | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/sdk/package.json b/sdk/package.json index 56362d7..8fb5c86 100644 --- a/sdk/package.json +++ b/sdk/package.json @@ -15,6 +15,7 @@ "player" ], "dependencies": { + "@peculiar/webcrypto": "^1.5.0", "core-js": "^2.6.11", "crypto-js": "4.1.1", "gl-matrix": "^3.4.3", diff --git a/sdk/src/AESGCMCrypto.js b/sdk/src/AESGCMCrypto.js index 24ccc80..5c072ca 100644 --- a/sdk/src/AESGCMCrypto.js +++ b/sdk/src/AESGCMCrypto.js @@ -11,11 +11,12 @@ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. +const { Crypto } = require("@peculiar/webcrypto"); +const crypto = new Crypto(); class AESGCMCrypto { static _base() { - let crypto = window.crypto || window.msCrypto; - let subtle = crypto && (crypto.subtle || crypto.webkitSubtle || crypto.msSubtle); + let subtle = crypto.subtle; return {crypto, subtle}; } @@ -25,7 +26,6 @@ class AESGCMCrypto { } static getRandomValue() { - let crypto = window.crypto || window.msCrypto; return crypto.getRandomValues(new Uint8Array(1)) * 0.001; } -- Gitee From c6b87133e332d080e26e9454f5d83587334e7a1a Mon Sep 17 00:00:00 2001 From: Yuan <294065614@qq.com> Date: Thu, 18 Jul 2024 20:54:49 +0800 Subject: [PATCH 08/12] 1 --- sdk/src/AESGCMCrypto.js | 5 ----- sdk/src/AppController.js | 2 +- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/sdk/src/AESGCMCrypto.js b/sdk/src/AESGCMCrypto.js index 5c072ca..77f88a5 100644 --- a/sdk/src/AESGCMCrypto.js +++ b/sdk/src/AESGCMCrypto.js @@ -20,11 +20,6 @@ class AESGCMCrypto { return {crypto, subtle}; } - static isSupport() { - let {subtle} = AESGCMCrypto._base(); - return subtle; - } - static getRandomValue() { return crypto.getRandomValues(new Uint8Array(1)) * 0.001; } diff --git a/sdk/src/AppController.js b/sdk/src/AppController.js index fe3a267..1c8dfc0 100644 --- a/sdk/src/AppController.js +++ b/sdk/src/AppController.js @@ -1355,7 +1355,7 @@ class AppController { static isSupport() { let isSptAudioCxt = window.AudioContext || window.webkitAudioContext; let isSptSocket = window.WebSocket; - return Boolean(AESGCMCrypto.isSupport() && isSptAudioCxt && isSptSocket); + return Boolean(isSptAudioCxt && isSptSocket); } static isSupportURL() { -- Gitee From 3c7b0096069b320f06f65b9511e9d99fd310fcc8 Mon Sep 17 00:00:00 2001 From: Yuan <294065614@qq.com> Date: Fri, 19 Jul 2024 14:15:38 +0800 Subject: [PATCH 09/12] Revert "1" This reverts commit c6b87133e332d080e26e9454f5d83587334e7a1a. --- sdk/src/AESGCMCrypto.js | 5 +++++ sdk/src/AppController.js | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/sdk/src/AESGCMCrypto.js b/sdk/src/AESGCMCrypto.js index 77f88a5..5c072ca 100644 --- a/sdk/src/AESGCMCrypto.js +++ b/sdk/src/AESGCMCrypto.js @@ -20,6 +20,11 @@ class AESGCMCrypto { return {crypto, subtle}; } + static isSupport() { + let {subtle} = AESGCMCrypto._base(); + return subtle; + } + static getRandomValue() { return crypto.getRandomValues(new Uint8Array(1)) * 0.001; } diff --git a/sdk/src/AppController.js b/sdk/src/AppController.js index 1c8dfc0..fe3a267 100644 --- a/sdk/src/AppController.js +++ b/sdk/src/AppController.js @@ -1355,7 +1355,7 @@ class AppController { static isSupport() { let isSptAudioCxt = window.AudioContext || window.webkitAudioContext; let isSptSocket = window.WebSocket; - return Boolean(isSptAudioCxt && isSptSocket); + return Boolean(AESGCMCrypto.isSupport() && isSptAudioCxt && isSptSocket); } static isSupportURL() { -- Gitee From 9a71588fb349c8391886538c172e0146245097d5 Mon Sep 17 00:00:00 2001 From: Yuan <294065614@qq.com> Date: Fri, 19 Jul 2024 14:16:33 +0800 Subject: [PATCH 10/12] Revert "1" This reverts commit 32b864b59a0d14349f8bd1c7ff3b524e4a0ba3be. --- sdk/package.json | 1 - sdk/src/AESGCMCrypto.js | 6 +++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/sdk/package.json b/sdk/package.json index 8fb5c86..56362d7 100644 --- a/sdk/package.json +++ b/sdk/package.json @@ -15,7 +15,6 @@ "player" ], "dependencies": { - "@peculiar/webcrypto": "^1.5.0", "core-js": "^2.6.11", "crypto-js": "4.1.1", "gl-matrix": "^3.4.3", diff --git a/sdk/src/AESGCMCrypto.js b/sdk/src/AESGCMCrypto.js index 5c072ca..24ccc80 100644 --- a/sdk/src/AESGCMCrypto.js +++ b/sdk/src/AESGCMCrypto.js @@ -11,12 +11,11 @@ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. -const { Crypto } = require("@peculiar/webcrypto"); -const crypto = new Crypto(); class AESGCMCrypto { static _base() { - let subtle = crypto.subtle; + let crypto = window.crypto || window.msCrypto; + let subtle = crypto && (crypto.subtle || crypto.webkitSubtle || crypto.msSubtle); return {crypto, subtle}; } @@ -26,6 +25,7 @@ class AESGCMCrypto { } static getRandomValue() { + let crypto = window.crypto || window.msCrypto; return crypto.getRandomValues(new Uint8Array(1)) * 0.001; } -- Gitee From dddcd32f6f69a0a94b3d7338e9cdaa5a0db8f699 Mon Sep 17 00:00:00 2001 From: Yuan <294065614@qq.com> Date: Tue, 23 Jul 2024 10:40:15 +0800 Subject: [PATCH 11/12] 1 --- sdk/src/KeyboardListener.js | 10 ++++++---- sdk/src/TouchHandler.js | 5 +++-- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/sdk/src/KeyboardListener.js b/sdk/src/KeyboardListener.js index ffe7c5e..d7375a0 100644 --- a/sdk/src/KeyboardListener.js +++ b/sdk/src/KeyboardListener.js @@ -8,12 +8,14 @@ export default class KeyboardListener { this.keyEventCodeType = PROTOCOL_CONFIG.KEYEVENT_KEYCODE_TYPE; this.util = new Util(); this.touchHandler = null; + this.container = document.getElementById(this.containerId); + this.container.setAttribute('tabindex', '-1') } start(touchHandler) { this.touchHandler = touchHandler; - this.util.bind(this.input, 'keydown', this.onKeydown.bind(this)); - this.util.bind(this.input, 'keypress', this.onKeypress.bind(this)); + this.util.bind(this.container, 'keydown', this.onKeydown.bind(this)); + this.util.bind(this.container, 'keypress', this.onKeypress.bind(this)); } onKeydown(event) { @@ -54,7 +56,7 @@ export default class KeyboardListener { } destroy() { - this.util.unbind(this.input, 'keydown'); - this.util.unbind(this.input, 'keypress'); + this.util.unbind(this.container, 'keydown'); + this.util.unbind(this.container, 'keypress'); } } \ No newline at end of file diff --git a/sdk/src/TouchHandler.js b/sdk/src/TouchHandler.js index c50f885..22859f1 100644 --- a/sdk/src/TouchHandler.js +++ b/sdk/src/TouchHandler.js @@ -50,7 +50,7 @@ export default class TouchHandler { constructor({player, isMobile, sendHandler, isDebug, autoRotate, inputId = '', containerId}) { // 离开画面前最后一次鼠标操作 this.lastMouseAction = ''; - this.containerId = containerId; + this.container = document.getElementById(containerId); // 监听触控鼠键事件的Dom this.displayDom = player; // 事件回调,可通过该函数获取模拟事件 @@ -125,7 +125,7 @@ export default class TouchHandler { this.util.bind(this.displayDom, 'mouseup', this.onMouseUp.bind(this)); this.util.bind(this.displayDom, 'mousemove', this.util.throttle( this.onMouseMove.bind(this), MOVE_THROTTLE_DELAY, this).bind(this)); - this.util.bind(document.getElementById(this.containerId), 'mouseleave', this.onMouseLeave.bind(this)); + this.util.bind(this.container, 'mouseleave', this.onMouseLeave.bind(this)); this.util.bind(this.displayDom, 'contextmenu', () => false); } @@ -272,6 +272,7 @@ export default class TouchHandler { } onMouseDown(event) { + this.container.focus() event = event || window.event; this.preventDefault(event); if (event.button === this.mouseCode.assist) { -- Gitee From 223cd0470d4531dd865b404058089000793fbd4c Mon Sep 17 00:00:00 2001 From: Yuan <294065614@qq.com> Date: Tue, 23 Jul 2024 14:49:37 +0800 Subject: [PATCH 12/12] 1 --- sdk/src/AppController.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/src/AppController.js b/sdk/src/AppController.js index fe3a267..73c2174 100644 --- a/sdk/src/AppController.js +++ b/sdk/src/AppController.js @@ -88,7 +88,7 @@ const APP_STATE_ERROR_CODE_TIP = { 1543: '登录信息失效,请重新登录', 3584: '试玩时间已到', 2560: '与服务器连接出现异常', - 3840: '由于您长时间未操作游戏,服务断开', + 3840: '由于您长时间未操作,服务断开', 4096: '切换后台超时', 8960: '云机在其他设备上被连接,本次连接退出' }; -- Gitee