UNPKG

@agora-js/report

Version:

logger and report module across @agora-js packages

6 lines (4 loc) 31.4 kB
/** * AgoraWebSDK_N-v4.23.4-0-g17410532-dirty Copyright AgoraInc. */ import{EventEmitter as t,setParameter as e,getParameter as s,VERSION as o,retryable as r,checkValidString as n,checkValidNumber as i,wait as a,AgoraRTCErrorCode as c,AgoraRTCError as p,throttleByKey as d,IS_GLOBAL_VERSION as E,BUILD as l,isPageRecording as _,loadInstallId as u,dividePackage as h,networkIndicator as T,NETWORK_STATE as R,DEFAULT_RETRY_CONFIG as g,post as I,postProtobuf as S,AgoraAPITag as O,AgoraAPIName as A,getMessageEncoding as m,appendBuffer as v}from"@agora-js/shared";export{AgoraRTCErrorCode}from"@agora-js/shared";import P from"axios";function f(t,e,s){return(e=function(t){var e=function(t,e){if("object"!=typeof t||!t)return t;var s=t[Symbol.toPrimitive];if(void 0!==s){var o=s.call(t,e||"default");if("object"!=typeof o)return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==typeof e?e:e+""}(e))in t?Object.defineProperty(t,e,{value:s,enumerable:!0,configurable:!0,writable:!0}):t[e]=s,t}function N(t,e){var s=Object.keys(t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);e&&(o=o.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),s.push.apply(s,o)}return s}function D(t){for(var e=1;e<arguments.length;e++){var s=null!=arguments[e]?arguments[e]:{};e%2?N(Object(s),!0).forEach((function(e){f(t,e,s[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(s)):N(Object(s)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(s,e))}))}return t}const U=new class extends t{constructor(){super(...arguments),f(this,"currentUploadLogID",0)}reportLogUploadError(t){const{errorRange:e}=t;e[e.length-1]&&e[e.length-1]>this.currentUploadLogID&&(this.currentUploadLogID=e[e.length-1],this.emit("REPORT_LOG_UPLOAD",t))}};class y{constructor(t){f(this,"logger",void 0),f(this,"prefixLists",[]),this.logger=t}debug(){for(var t=arguments.length,e=new Array(t),s=0;s<t;s++)e[s]=arguments[s];this.logger.debug(...this.prefixLists,...e)}info(){for(var t=arguments.length,e=new Array(t),s=0;s<t;s++)e[s]=arguments[s];this.logger.info(...this.prefixLists,...e)}warning(){for(var t=arguments.length,e=new Array(t),s=0;s<t;s++)e[s]=arguments[s];this.logger.warning(...this.prefixLists,...e)}error(){for(var t=arguments.length,e=new Array(t),s=0;s<t;s++)e[s]=arguments[s];this.logger.error(...this.prefixLists,...e)}prefix(t){return this.prefixLists.push(t),this}popPrefix(){return this.prefixLists.pop(),this}}function L(){const t=new Date;return t.toTimeString().split(" ")[0]+":"+t.getMilliseconds()}function b(){const t=new Date,e=/((\d+:){2}\d+)/.exec((new Date).toUTCString());return e?(null==e?void 0:e[0])+":"+t.getUTCMilliseconds():t.toTimeString().split(" ")[0]+":"+t.getMilliseconds()}const C={DEBUG:0,INFO:1,WARNING:2,ERROR:3,NONE:4},w=Date.now(),M=t=>{for(const e in C)if(Object.prototype.hasOwnProperty.call(C,e)&&C[e]===t)return e;return"DEFAULT"};class W{constructor(){f(this,"proxyServerURL",void 0),f(this,"logLevel",C.DEBUG),f(this,"uploadState","collecting"),f(this,"uploadLogWaitingList",[]),f(this,"uploadLogUploadingList",[]),f(this,"uploadErrorCount",0),f(this,"currentLogID",0),f(this,"url",void 0),f(this,"extLog",((t,e)=>{this.appendLogToWaitingList(t,...e)}))}debug(){for(var t=arguments.length,e=new Array(t),s=0;s<t;s++)e[s]=arguments[s];const o=[C.DEBUG].concat(e);this.log.apply(this,o)}info(){for(var t=arguments.length,e=new Array(t),s=0;s<t;s++)e[s]=arguments[s];const o=[C.INFO].concat(e);this.log.apply(this,o)}warning(){for(var t=arguments.length,e=new Array(t),s=0;s<t;s++)e[s]=arguments[s];const o=[C.WARNING].concat(e);this.log.apply(this,o)}warn(){this.warning(...arguments)}error(){for(var t=arguments.length,e=new Array(t),s=0;s<t;s++)e[s]=arguments[s];const o=[C.ERROR].concat(e);this.log.apply(this,o)}upload(){for(var t=arguments.length,e=new Array(t),s=0;s<t;s++)e[s]=arguments[s];const o=[C.DEBUG].concat(e);this.uploadLog.apply(this,o)}setLogLevel(t){t=Math.min(Math.max(0,t),4),this.logLevel=t}enableLogUpload(){e("UPLOAD_LOG",!0)}disableLogUpload(){e("UPLOAD_LOG",!1),this.uploadLogUploadingList=[],this.uploadLogWaitingList=[]}setProxyServer(t){this.proxyServerURL=t}prefix(t){return new y(this).prefix(t)}log(){for(var t=arguments.length,e=new Array(t),o=0;o<t;o++)e[o]=arguments[o];if(Date.now()-w<100)return void setTimeout((()=>{this.log(...e)}),Date.now()-w);const r=Math.max(0,Math.min(4,e[0]));if(e[0]=L()+" Agora-SDK [".concat(M(r),"]:"),this.appendLogToWaitingList(r,...e),r<this.logLevel)return;const n=L()+" %cAgora-SDK [".concat(M(r),"]:");let i=[];if(!s("USE_NEW_LOG"))switch(r){case C.DEBUG:i=[n,"color: #64B5F6;"].concat(e.slice(1)),console.log.apply(console,i);break;case C.INFO:i=[n,"color: #1E88E5; font-weight: bold;"].concat(e.slice(1)),console.log.apply(console,i);break;case C.WARNING:i=[n,"color: #FB8C00; font-weight: bold;"].concat(e.slice(1)),console.warn.apply(console,i);break;case C.ERROR:i=[n,"color: #B00020; font-weight: bold;"].concat(e.slice(1)),console.error.apply(console,i)}}uploadLog(){for(var t=arguments.length,e=new Array(t),s=0;s<t;s++)e[s]=arguments[s];if(Date.now()-w<100)return void setTimeout((()=>{this.uploadLog(...e)}),Date.now()-w);const o=Math.max(0,Math.min(4,e[0]));e[0]=L()+" Agora-SDK [".concat(M(o),"]:"),this.appendLogToWaitingList(o,...e)}appendLogToWaitingList(t){if(!s("UPLOAD_LOG"))return;for(var e=arguments.length,o=new Array(e>1?e-1:0),r=1;r<e;r++)o[r-1]=arguments[r];Array.isArray(o[0])?o[0][0]=b()+" Agora-SDK [".concat(M(t),"]:"):o[0]=b()+" Agora-SDK [".concat(M(t),"]:");let n="";o.forEach((t=>{"object"==typeof t&&(t=JSON.stringify(t)),n+="".concat(t," ")})),this.uploadLogWaitingList.push({payload_str:n,log_level:t,log_item_id:this.currentLogID++}),"uploading"===this.uploadState&&0===this.uploadLogUploadingList.length&&this.uploadLogInterval()}startUpload(){this.uploadState="uploading",0===this.uploadLogUploadingList.length&&this.uploadLogInterval()}async uploadLogs(){const t=this.uploadLogUploadingList,e={sdk_version:o,process_id:s("PROCESS_ID"),payload:JSON.stringify(t)};return r((async()=>{const t=await P.post(this.url||(this.proxyServerURL?"https://".concat(this.proxyServerURL,"/ls/?h=").concat(s("LOG_UPLOAD_SERVER"),"&p=443&d=upload/v1"):"https://".concat(s("LOG_UPLOAD_SERVER"),"/upload/v1")),e,{responseType:"text"});if("OK"!==t.data){const e=new Error("unexpected upload log response");throw e.response=t,e}}),(()=>(this.uploadLogUploadingList=[],!1)),(e=>{const s={status:-1,message:e.message,errorRange:t.map((t=>t.log_item_id))};return e.response?(s.status=e.response.status,s.data=e.response.data,s.headers=e.response.headers):e.request&&(s.status=e.request.status),U.reportLogUploadError(s),!0}),{timeout:s("UPLOAD_LOG_REQUEST_RETRY_INTERVAL"),maxRetryTimeout:s("UPLOAD_LOG_REQUEST_MAX_RETRY_INTERVAL")})}uploadLogInterval(){0===this.uploadLogUploadingList.length&&0===this.uploadLogWaitingList.length||(0===this.uploadLogUploadingList.length&&(this.uploadLogUploadingList=this.uploadLogWaitingList.splice(0,s("UPLOAD_LOG_LENGTH_EACH_TIME"))),this.uploadLogs().then((()=>{this.uploadErrorCount=0,this.uploadLogWaitingList.length>0&&window.setTimeout((()=>this.uploadLogInterval()),s("UPLOAD_LOG_INTERVAL"))})).catch((t=>{this.uploadErrorCount+=1,this.uploadErrorCount<2?window.setTimeout((()=>this.uploadLogInterval()),s("UPLOAD_LOG_TWICE_RETRY_INTERVAL_V1")):window.setTimeout((()=>this.uploadLogInterval()),s("UPLOAD_LOG_RETRY_INTERVAL_V1"))})))}}const V=new W;let x=function(t){return t.FREE="free",t.UPLOADING="uploading",t}({}),B=function(t){return t[t.MISC=0]="MISC",t[t.INTERNAL_EVENT=1]="INTERNAL_EVENT",t[t.PUBLIC_EVENT=2]="PUBLIC_EVENT",t[t.WEB_EVENT=3]="WEB_EVENT",t[t.INTERNAL_API=4]="INTERNAL_API",t[t.WEB_API=5]="WEB_API",t[t.PUBLIC_API=6]="PUBLIC_API",t}({});function k(t){return n(t.reportId,"params.reportId",0,100,!1),n(t.category,"params.category",0,100,!1),n(t.event,"params.event",0,100,!1),n(t.label,"params.label",0,100,!1),i(t.value,"params.value",Number.MIN_SAFE_INTEGER,Number.MAX_SAFE_INTEGER,!1),!0}const G={sid:"",lts:0,success:null,cname:null,uid:null,peer:null,cid:null,elapse:null,extend:null,vid:0};let F=function(t){return t.PUBLISH="publish",t.SUBSCRIBE="subscribe",t.WS_COMPRESSOR_INIT="ws_compressor_init",t.SESSION_INIT="session_init",t.JOIN_CHOOSE_SERVER="join_choose_server",t.REQ_USER_ACCOUNT="req_user_account",t.JOIN_GATEWAY="join_gateway",t.REJOIN_GATEWAY="rejoin_gateway",t.STREAM_SWITCH="stream_switch",t.REQUEST_PROXY_WORKER_MANAGER="request_proxy_worker_manager",t.REQUEST_PROXY_APPCENTER="request_proxy_appcenter",t.FIRST_VIDEO_RECEIVED="first_video_received",t.FIRST_AUDIO_RECEIVED="first_audio_received",t.FIRST_VIDEO_DECODE="first_video_decode",t.FIRST_AUDIO_DECODE="first_audio_decode",t.ON_ADD_AUDIO_STREAM="on_add_audio_stream",t.ON_ADD_VIDEO_STREAM="on_add_video_stream",t.ON_UPDATE_STREAM="on_update_stream",t.ON_REMOVE_STREAM="on_remove_stream",t.USER_ANALYTICS="req_user_analytics",t.PC_STATS="pc_stats",t.UPDATE_REMOTE_RTPCAPABILITIES="update_remote_rtpCapabilities",t.AB_TEST="ab_test",t}({}),J=function(t){return t.SESSION="io.agora.pb.Wrtc.Session",t.JOIN_CHOOSE_SERVER="io.agora.pb.Wrtc.JoinChooseServer",t.REQ_USER_ACCOUNT="io.agora.pb.Wrtc.ReqUserAccount",t.JOIN_GATEWAY="io.agora.pb.Wrtc.JoinGateway",t.RE_JOIN_GATEWAY="io.agora.pb.Wrtc.ReJoinGateway",t.PUBLISH="io.agora.pb.Wrtc.Publish",t.SUBSCRIBE="io.agora.pb.Wrtc.Subscribe",t.WS_COMPRESSOR_INIT="io.agora.pb.Wrtc.WsCompressorInit",t.STREAM_SWITCH="io.agora.pb.Wrtc.StreamSwitch",t.AUDIO_SENDING_STOPPED="io.agora.pb.Wrtc.AudioSendingStopped",t.VIDEO_SENDING_STOPPED="io.agora.pb.Wrtc.VideoSendingStopped",t.REQUEST_PROXY_APPCENTER="io.agora.pb.Wrtc.RequestProxyAppCenter",t.REQUEST_PROXY_WORKER_MANAGER="io.agora.pb.Wrtc.RequestProxyWorkerManager",t.API_INVOKE="io.agora.pb.Wrtc.ApiInvoke",t.FIRST_VIDEO_RECEIVED="io.agora.pb.Wrtc.FirstVideoReceived",t.FIRST_AUDIO_RECEIVED="io.agora.pb.Wrtc.FirstAudioReceived",t.FIRST_VIDEO_DECODE="io.agora.pb.Wrtc.FirstVideoDecode",t.FIRST_AUDIO_DECODE="io.agora.pb.Wrtc.FirstAudioDecode",t.ON_ADD_AUDIO_STREAM="io.agora.pb.Wrtc.OnAddAudioStream",t.ON_ADD_VIDEO_STREAM="io.agora.pb.Wrtc.OnAddVideoStream",t.ON_UPDATE_STREAM="io.agora.pb.Wrtc.OnUpdateStream",t.ON_REMOVE_STREAM="io.agora.pb.Wrtc.OnRemoveStream",t.JOIN_CHANNEL_TIMEOUT="io.agora.pb.Wrtc.JoinChannelTimeout",t.PEER_PUBLISH_STATUS="io.agora.pb.Wrtc.PeerPublishStatus",t.WORKER_EVENT="io.agora.pb.Wrtc.WorkerEvent",t.AP_WORKER_EVENT="io.agora.pb.Wrtc.APWorkerEvent",t.JOIN_WEB_PROXY_AP="io.agora.pb.Wrtc.JoinWebProxyAP",t.WEBSOCKET_QUIT="io.agora.pb.Wrtc.WebSocketQuit",t.USER_ANALYTICS="io.agora.pb.Wrtc.UserAnalytics",t.AUTOPLAY_FAILED="io.agora.pb.Wrtc.AutoplayFailed",t.PC_STATS="io.agora.pb.Wrtc.PCStats",t.UPDATE_REMOTE_RTPCAPABILITIES="io.agora.pb.Wrtc.UpdateRemoteRTPCapabilities",t.AB_TEST="io.agora.pb.Wrtc.ABTest",t}({}),Y=function(t){return t[t.WORKER_EVENT=156]="WORKER_EVENT",t[t.AP_WORKER_EVENT=160]="AP_WORKER_EVENT",t}({}),j=function(t){return t[t.SESSION=26]="SESSION",t[t.JOIN_CHOOSE_SERVER=27]="JOIN_CHOOSE_SERVER",t[t.REQ_USER_ACCOUNT=196]="REQ_USER_ACCOUNT",t[t.JOIN_GATEWAY=28]="JOIN_GATEWAY",t[t.PUBLISH=30]="PUBLISH",t[t.SUBSCRIBE=29]="SUBSCRIBE",t[t.WS_COMPRESSOR_INIT=9430]="WS_COMPRESSOR_INIT",t[t.STREAM_SWITCH=32]="STREAM_SWITCH",t[t.AUDIO_SENDING_STOPPED=33]="AUDIO_SENDING_STOPPED",t[t.VIDEO_SENDING_STOPPED=34]="VIDEO_SENDING_STOPPED",t[t.REQUEST_PROXY_APPCENTER=35]="REQUEST_PROXY_APPCENTER",t[t.REQUEST_PROXY_WORKER_MANAGER=36]="REQUEST_PROXY_WORKER_MANAGER",t[t.API_INVOKE=41]="API_INVOKE",t[t.FIRST_VIDEO_RECEIVED=348]="FIRST_VIDEO_RECEIVED",t[t.FIRST_AUDIO_RECEIVED=349]="FIRST_AUDIO_RECEIVED",t[t.FIRST_VIDEO_DECODE=350]="FIRST_VIDEO_DECODE",t[t.FIRST_AUDIO_DECODE=351]="FIRST_AUDIO_DECODE",t[t.ON_ADD_AUDIO_STREAM=352]="ON_ADD_AUDIO_STREAM",t[t.ON_ADD_VIDEO_STREAM=353]="ON_ADD_VIDEO_STREAM",t[t.ON_UPDATE_STREAM=356]="ON_UPDATE_STREAM",t[t.ON_REMOVE_STREAM=355]="ON_REMOVE_STREAM",t[t.JOIN_CHANNEL_TIMEOUT=407]="JOIN_CHANNEL_TIMEOUT",t[t.PEER_PUBLISH_STATUS=408]="PEER_PUBLISH_STATUS",t[t.WORKER_EVENT=156]="WORKER_EVENT",t[t.AP_WORKER_EVENT=160]="AP_WORKER_EVENT",t[t.JOIN_WEB_PROXY_AP=700]="JOIN_WEB_PROXY_AP",t[t.WEBSOCKET_QUIT=671]="WEBSOCKET_QUIT",t[t.USER_ANALYTICS=1e4]="USER_ANALYTICS",t[t.AUTOPLAY_FAILED=9178]="AUTOPLAY_FAILED",t}({});class K{constructor(){f(this,"baseInfoMap",new Map),f(this,"proxyServer",void 0),f(this,"eventUploadTimer",void 0),f(this,"setSessionIdTimer",void 0),f(this,"url",void 0),f(this,"sids",new Set),f(this,"backupUrl",void 0),f(this,"_appId",void 0),f(this,"_aid",0),f(this,"keyEventUploadPendingItems",[]),f(this,"normalEventUploadPendingItems",[]),f(this,"apiInvokeUploadPendingItems",[]),f(this,"apiInvokeCount",0),f(this,"apiInvokeLoggedCount",0),f(this,"ltsList",[]),f(this,"lastSendNormalEventTime",Date.now()),f(this,"customReportCounterTimer",void 0),f(this,"customReportCount",0),f(this,"extApiInvoke",(async t=>{for(const e of t){const t=D(D({},e),{},{sid:null,invokeId:++this.apiInvokeCount,tag:O.TRACER});this.sendApiInvoke(t)}})),this.eventUploadTimer=window.setInterval(this.doSend.bind(this),s("EVENT_REPORT_SEND_INTERVAL")),this.setSessionIdTimer=window.setInterval(this.appendSessionId.bind(this),s("EVENT_REPORT_SEND_INTERVAL"))}getBaseInfoBySessionId(t){return this.baseInfoMap.get(t)}setAppId(t){this._appId=t,this._aid=parseInt(t.replace(/[a-fA-F0-9]{8}/g,(t=>{let[e,s]=t;return e+s})),16)||0}reportApiInvoke(t,e,o){e.timeout=e.timeout||6e4,e.reportResult=void 0===e.reportResult||e.reportResult;const r=Date.now();this.apiInvokeCount+=1;const n=this.apiInvokeCount,i=!!s("SHOW_REPORT_INVOKER_LOG"),E=!!s("SHOW_REPORT_USER_INVOKER_LOG"),l=i||E&&e.id;l&&(this.apiInvokeLoggedCount+=1);const _=this.apiInvokeLoggedCount;function u(t,s){if(l){let o="[apiInvoke-".concat(_,"]");if(e.id&&(o+="[".concat(e.id,"]")),e.name&&(o+="[".concat(e.name,"]"),e.name===A.JOIN))return V.info("".concat(o," ").concat(t));V.info("".concat(o," ").concat(t),"start"===t?e.options:s||"")}}const h=()=>({tag:e.tag,invokeId:n,sid:t,name:e.name,apiInvokeTime:r,options:e.options,states:e.states||null});u("start");let T=!1;a(e.timeout).then((()=>{T||(this.sendApiInvoke(D(D({},h()),{},{error:c.API_INVOKE_TIMEOUT,success:!1})),u("timeout"))}));const R=new p(c.UNEXPECTED_ERROR,"".concat(e.name,": this api invoke is end"));return{onSuccess:t=>{const s=()=>{if(T)throw R;return T=!0,this.sendApiInvoke(D(D({},h()),{},{success:!0},e.reportResult&&{result:t})),u("onSuccess"),t};return o?d(s,e.name+"Success",o,(()=>T=!0)):s()},onError:t=>{const s=()=>{if(T)throw t;T=!0,this.sendApiInvoke(D(D({},h()),{},{success:!1,error:t})),u("onFailure",t.toString())};return o?d(s,e.name+"Error",o,(()=>T=!0)):s()}}}sessionInit(t,e){if(this.baseInfoMap.has(t))return;const r=Date.now(),n=this.createBaseInfo(t,r);n.cname=e.cname;const i=Object.assign({},{willUploadConsoleLog:s("UPLOAD_LOG"),maxTouchPoints:navigator.maxTouchPoints,areaVersion:E?"global":"oversea",areas:s("AREAS")&&s("AREAS").join(",")},e.extend),{stringUid:a,channelProfile:c,channelMode:p,isABTestSuccess:d,lsid:u,clientRole:h}=e,T=Date.now(),R=D(D({},n),{},{eventType:F.SESSION_INIT,appid:e.appid,browser:navigator.userAgent,buildFormat:e.buildFormat,build:l,lts:T,elapse:T-r,extend:JSON.stringify(i),mode:e.mode,process:s("PROCESS_ID"),appType:s("APP_TYPE"),success:!0,version:o,stringUid:a,channelProfile:c,channelMode:p,isABTestSuccess:d,lsid:u,clientType:_()?42:20,clientRole:h,serviceId:s("PROCESS_ID"),extensionID:s("PLUGIN_INFO").join(",")||""});this.send({type:J.SESSION,data:R},!0)}joinChooseServer(t,e){const s=this.baseInfoMap.get(t);if(!s)return;const o=s.info,r=Date.now(),n=D(D({},o),{},{role:e.role,eventType:F.JOIN_CHOOSE_SERVER,lts:r,eventElapse:e.elapse||r-e.lts,chooseServerAddr:e.csAddr,errorCode:e.ec,elapse:r-s.startTime,success:e.succ,chooseServerAddrList:JSON.stringify(e.serverList),uid:e.uid?parseInt(e.uid):null,cid:e.cid?parseInt(e.cid):null,chooseServerIp:e.csIp||"",opid:e.opid,unilbsServerIds:e.unilbsServerIds,extend:e.extend||void 0,isHttp3:e.isHttp3,corssRegionTagReq:e.corssRegionTagReq||void 0,corssRegionTagRes:e.corssRegionTagRes||void 0});this.send({type:J.JOIN_CHOOSE_SERVER,data:n},!0)}reqUserAccount(t,e){const s=this.baseInfoMap.get(t);if(!s)return;const o=s.info,r=Date.now(),n=D(D({},o),{},{eventType:F.REQ_USER_ACCOUNT,lts:r,success:e.success,serverAddress:e.serverAddr,stringUid:e.stringUid,uid:e.uid,errorCode:e.errorCode,elapse:e.elapse||r-s.startTime,eventElapse:r-e.lts,extend:JSON.stringify(e.extend)});this.send({type:J.REQ_USER_ACCOUNT,data:n},!0)}joinGateway(t,e){const s=this.baseInfoMap.get(t);if(!s)return;const o=s.info;e.vid&&(o.vid=e.vid),o.uid=e.uid,o.cid=e.cid;const r=Date.now(),{firstSuccess:n,addr:i,isProxy:a}=e,c=r-s.startTime,p=D(D({},o),{},{eventType:F.JOIN_GATEWAY,lts:r,gatewayAddr:e.addr,success:e.succ,errorCode:e.ec,errorMsg:e.errorMsg||"",elapse:c,eventElapse:r-e.lts,firstSuccess:n,signalChannel:e.signalChannel,preload:e.preload?1:0,installId:u(),isABTestSuccess:e.isABTestSuccess?1:0}),d=p.success?1:0;if(e.succ&&(s.lastJoinSuccessTime=r),n)this.send({type:J.JOIN_GATEWAY,data:p},!0);else{let t;if(i)if(a){const e=i.match(/h=(\d{1,3}-){3}\d{1,3}/g),s=i.match(/p=[0-9]{1,6}/g);t={isSuccess:d,gatewayIp:e&&e.length?e[0].split("=")[1].replace(/-/g,"."):"",port:s&&s.length?s[0].split("=")[1]:"",isProxy:a?1:0}}else{const e=i.match(/wss:\/\/(\d{1,3}-){3}\d{1,3}/g),s=i.match(/(:|p=)[0-9]{1,6}/g);t={isSuccess:d,gatewayIp:e&&e.length?e[0].split("//")[1].replace(/-/g,"."):"",port:s&&s.length?s[0].split(/:|p=/g)[1]:"",isProxy:a?1:0}}else t={isSuccess:d,gatewayIp:"",port:"",isProxy:a?1:0};delete p.success,delete p.eventType,delete p.firstSuccess,p.vid=Number(p.vid);const e=Object.assign({},p,t,{eventType:F.REJOIN_GATEWAY});this.send({type:J.RE_JOIN_GATEWAY,data:e},!0)}}joinChannelTimeout(t,e){const s=this.baseInfoMap.get(t);if(!s)return;const o=Date.now(),r=D(D({},s.info),{},{lts:o,timeout:e,elapse:o-s.startTime});this.send({type:J.JOIN_CHANNEL_TIMEOUT,data:r},!0)}publish(t,e){const s=this.baseInfoMap.get(t);if(!s)return;const o=s.info,r=Date.now(),n=D(D({},o),{},{eventType:F.PUBLISH,lts:r,eventElapse:e.eventElapse,elapse:r-s.startTime,success:e.succ,errorCode:e.ec,videoName:e.videoName,audioName:e.audioName,screenName:e.screenName,screenshare:e.screenshare,audio:e.audio,video:e.video,p2pid:e.p2pid,publishRequestid:e.publishRequestid});this.send({type:J.PUBLISH,data:n},!0)}subscribe(t,e,s){const o=this.baseInfoMap.get(t);if(!o)return;const r=o.info,n=Date.now(),i=D(D({},r),{},{eventType:F.SUBSCRIBE,lts:n,eventElapse:e.eventElapse,elapse:n-o.startTime,success:e.succ,errorCode:e.ec,video:e.video,audio:e.audio,subscribeRequestid:e.subscribeRequestid,p2pid:e.p2pid,preSsrc:e.preSsrc?1:0},s&&{extend:JSON.stringify({isMassSubscribe:!0})});"string"==typeof e.peerid?i.peerSuid=e.peerid:i.peer=e.peerid,this.send({type:J.SUBSCRIBE,data:i},!0)}wsCompressorInit(t){const e=[...this.baseInfoMap.keys()],s=e.length?e[0]:"UnableToGetSid",o=this.baseInfoMap.get(s);if(!o)return;const r=o.info,n=Date.now(),i=D(D({},r),{},{eventType:F.WS_COMPRESSOR_INIT,lts:n,eventElapse:t.eventElapse,elapse:n-o.startTime,status:t.status?1:2});this.send({type:J.WS_COMPRESSOR_INIT,data:i},!0)}firstRemoteVideoDecode(t,e,s,o){const r=this.baseInfoMap.get(t);if(!r)return;const n=r.info,i=Date.now(),a=D(D(D({},n),o),{},{elapse:i-r.startTime,eventType:e,lts:i,firstDecodeFrame:Math.max((o.firstFrame||i)-r.startTime,0),apEnd:Math.max(o.apEnd-r.startTime,0),apStart:Math.max(o.apStart-r.startTime,0),joinGwEnd:Math.max(o.joinGwEnd-r.startTime,0),joinGwStart:Math.max(o.joinGwStart-r.startTime,0),pcEnd:Math.max(o.pcEnd-r.startTime,0),pcStart:Math.max(o.pcStart-r.startTime,0),subscriberEnd:Math.max(o.subscriberEnd-r.startTime,0),subscriberStart:Math.max(o.subscriberStart-r.startTime,0),videoAddNotify:Math.max(o.videoAddNotify-r.startTime,0)});this.send({type:s,data:a},!0)}firstRemoteFrame(t,e,s,o){const r=this.baseInfoMap.get(t);if(!r)return;const n=r.info,i=Date.now(),a=D(D(D({},n),o),{},{elapse:i-r.startTime,eventType:e,lts:i});this.send({type:s,data:a},!0)}abTest(t,e){const s=this.baseInfoMap.get(t);if(!s)return;const o=s.info,r=Date.now(),n=D(D(D({},o),e),{},{vid:void 0===o.vid?0:Number(o.vid),elapse:r-s.startTime,eventType:F.AB_TEST,lts:r});this.send({type:J.AB_TEST,data:n},!0)}pcStats(t,e){const s=this.baseInfoMap.get(t);if(!s)return;const o=s.info,r=Date.now(),n=D(D(D({},o),e),{},{vid:void 0===o.vid?0:Number(o.vid),elapse:r-s.startTime,eventType:F.PC_STATS,lts:r,preallocation:e.preallocation?1:0});this.send({type:J.PC_STATS,data:n},!0)}updateRemoteRTPCapabilities(t,e){if(t){const s=this.baseInfoMap.get(t);if(!s)return;const o=s.info,r=Date.now(),n=D(D(D({},o),e),{},{vid:void 0===o.vid?0:Number(o.vid),eventType:F.UPDATE_REMOTE_RTPCAPABILITIES,lts:r});this.send({type:J.UPDATE_REMOTE_RTPCAPABILITIES,data:n},!0)}}onGatewayStream(t,e,s,o){const r=this.baseInfoMap.get(t);if(!r)return;const n=r.info,i=Date.now(),a=D(D(D({},n),o),{},{eventType:e,lts:i});this.send({type:s,data:a},!0)}streamSwitch(t,e){const s=this.baseInfoMap.get(t);if(!s)return;const o=s.info,r=Date.now(),n=D(D({},o),{},{eventType:F.STREAM_SWITCH,lts:r,isDual:e.isdual,elapse:r-s.startTime,success:e.succ});this.send({type:J.STREAM_SWITCH,data:n},!0)}requestProxyAppCenter(t,e){const s=this.baseInfoMap.get(t);if(!s)return;const o=s.info,r=Date.now(),n=D(D({},o),{},{eventType:F.REQUEST_PROXY_APPCENTER,lts:r,eventElapse:r-e.lts,elapse:r-s.startTime,APAddr:e.APAddr,workerManagerList:e.workerManagerList,response:e.response,errorCode:e.ec,success:e.succ});this.send({type:J.REQUEST_PROXY_APPCENTER,data:n},!0)}requestProxyWorkerManager(t,e){const s=this.baseInfoMap.get(t);if(!s)return;const o=s.info,r=Date.now(),n=D(D({},o),{},{eventType:F.REQUEST_PROXY_WORKER_MANAGER,lts:r,eventElapse:r-e.lts,elapse:r-s.startTime,workerManagerAddr:e.workerManagerAddr,response:e.response,errorCode:e.ec,success:e.succ});this.send({type:J.REQUEST_PROXY_WORKER_MANAGER,data:n},!0)}setProxyServer(t){this.proxyServer=t,t?V.debug("reportProxyServerurl: ".concat(t)):V.debug("disable reportProxyServerurl: ".concat(t))}peerPublishStatus(t,e){const s=this.baseInfoMap.get(t);if(!s)return;const o=s.info,r=Date.now(),n=D(D({},o),{},{subscribeElapse:e.subscribeElapse,peer:e.peer,peerPublishDuration:Math.max(e.audioPublishDuration,e.videoPublishDuration),audiotag:e.audioPublishDuration>0?1:-1,videotag:e.videoPublishDuration>0?1:-1,lts:r,elapse:r-s.startTime,joinChannelSuccessElapse:r-(s.lastJoinSuccessTime||r),peerPublishDurationVideo:e.videoPublishDuration,peerPublishDurationAudio:e.audioPublishDuration});this.send({type:J.PEER_PUBLISH_STATUS,data:n},!0)}workerEvent(t,e){const s=this.baseInfoMap.get(t);if(!s)return;const o=s.info,r=Date.now(),n=D(D(D({},o),e),{},{elapse:r-s.startTime,lts:r,productType:"WebRTC"});h(n,"payload",1300).forEach((t=>this.send({type:J.WORKER_EVENT,data:t},!0)))}apworkerEvent(t,e){const s=this.baseInfoMap.get(t);if(!s)return;const o=s.info,r=Date.now(),n=D(D(D({},o),e),{},{elapse:r-s.startTime,lts:r});this.send({type:J.AP_WORKER_EVENT,data:n},!0)}joinWebProxyAP(t,e){const s=this.baseInfoMap.get(t);if(!s)return;const o=s.info,r=Date.now(),n=D(D(D({},o),e),{},{elapse:r-s.startTime,lts:r,extend:e.extend||void 0});this.send({type:J.JOIN_WEB_PROXY_AP,data:n},!0)}WebSocketQuit(t,e){const s=this.baseInfoMap.get(t);if(!s)return;const o=s.info,r=Date.now(),n=D(D(D({},o),e),{},{elapse:r-s.startTime,lts:r});this.send({type:J.WEBSOCKET_QUIT,data:n},!0)}async sendCustomReportMessage(t,e){if(this.customReportCount+=e.length,this.customReportCount>s("CUSTOM_REPORT_LIMIT"))throw new p(c.CUSTOM_REPORT_FREQUENCY_TOO_HIGH);this.customReportCounterTimer||(this.customReportCounterTimer=window.setInterval((()=>{this.customReportCount=0}),5e3));const o=Date.now(),r=e.map((e=>({type:J.USER_ANALYTICS,data:D(D({sid:t},e),{},{lts:o})})));try{s("NEW_REPORT_SERVER")?await this.postDataToStatsCollector2(r):await this.postDataToStatsCollector(r)}catch(t){throw V.error("send custom report message failed",t.toString()),new p(c.CUSTOM_REPORT_SEND_FAILED,t.message)}}sendApiInvoke(t){const e=s("NOT_REPORT_EVENT");if(t.tag&&e.includes&&e.includes(t.tag))return!1;if(null===t.sid)return this.apiInvokeUploadPendingItems.push(t),!1;const o=this.baseInfoMap.get(t.sid);if(!o)return this.apiInvokeUploadPendingItems.push(t),!1;const{cname:r,uid:n,cid:i}=o.info;let a;if(t.lts=t.lts||Date.now(),t.error)if(t.error instanceof p){const{code:e,message:s}=t.error;a=e||(s||t.error.toString())}else a=t.error.toString();const c={invokeId:t.invokeId,sid:t.sid,cname:r,cid:i,uid:n,lts:t.lts,success:t.success,elapse:t.lts-o.startTime,execElapse:t.lts-t.apiInvokeTime,apiName:t.name,options:t.options?JSON.stringify(t.options):void 0,execStates:t.states?JSON.stringify(t.states):void 0,execResult:t.result?JSON.stringify(t.result):void 0,errorCode:t.error?a:void 0,errorMsg:t.error?JSON.stringify(t.error):void 0};return this.send({type:J.API_INVOKE,data:c},!1),!0}addSid(t){this.sids.add(t)}removeSid(t){this.sids.delete(t)}appendSessionId(){const t=this.apiInvokeUploadPendingItems;if(0===t.length)return;const e=Array.from(this.sids).find((t=>null!==t));e&&t.forEach((t=>{t&&(t.sid=e,this.sendApiInvoke(Object.assign({},t)))})),t.length=0}send(t,e){if(e)return this.keyEventUploadPendingItems.push(t),void this.sendItems(this.keyEventUploadPendingItems,!0);this.normalEventUploadPendingItems.push(t),this.normalEventUploadPendingItems.length>s("NORMAL_EVENT_QUEUE_CAPACITY")&&this.normalEventUploadPendingItems.splice(0,1),this.normalEventUploadPendingItems.length>=10&&this.sendItems(this.normalEventUploadPendingItems,!1)}doSend(){this.keyEventUploadPendingItems.length>0&&this.sendItems(this.keyEventUploadPendingItems,!0),this.normalEventUploadPendingItems.length>0&&Date.now()-this.lastSendNormalEventTime>=5e3&&this.sendItems(this.normalEventUploadPendingItems,!1)}sendItems(t,e){const o=[],r=[];for(;t.length;){const e=t.shift();o.length<20?o.push(e):r.push(e)}t.push(...r);for(const t of[...o])-1!==this.ltsList.indexOf(t.data.lts)?(t.data.lts=this.ltsList[this.ltsList.length-1]+1,this.ltsList.push(t.data.lts)):(this.ltsList.push(t.data.lts),this.ltsList.sort(((t,e)=>t-e)));e||(this.lastSendNormalEventTime=Date.now());return s("ENABLE_EVENT_REPORT")?(o.length&&(s("NEW_REPORT_SERVER")?this.postDataToStatsCollector2(o):this.postDataToStatsCollector(o)).catch((t=>o=>{s("EVENT_REPORT_RETRY")&&(e?this.keyEventUploadPendingItems=this.keyEventUploadPendingItems.concat(t):(this.normalEventUploadPendingItems=this.normalEventUploadPendingItems.concat(t),this.normalEventUploadPendingItems.length>s("NORMAL_EVENT_QUEUE_CAPACITY")&&(this.normalEventUploadPendingItems.splice(0,this.normalEventUploadPendingItems.length-s("NORMAL_EVENT_QUEUE_CAPACITY")),V.warning("report: drop normal events"))))})(o)),t):t}async postDataToStatsCollector2(t){T.networkState===R.OFFLINE&&await Promise.race([T.onlineWaiter,a(2*g.maxRetryTimeout)]);const e=t=>{let e=new Uint8Array;return t.forEach((t=>{const s=m(JSON.stringify(t.data)),o=new ArrayBuffer(5),r=(t=>{let e=0;return Object.entries(J).forEach((s=>{let[o,r]=s;r===t.type&&(e=j[o])})),e})(t),n=new DataView(o);n.setUint16(0,s.byteLength,!0),n.setUint8(2,255&r),n.setUint8(3,r>>>8&255),n.setUint8(4,r>>>16&255),e=v(e,new Uint8Array(o)),e=v(e,s)})),e},o="event";let r=this.proxyServer?"https://".concat(this.proxyServer,"/rs/?h=").concat(s("NEW_REPORT_SERVER_DOMAINS")[0],"&p=443&d=").concat(o):"https://".concat(s("NEW_REPORT_SERVER_DOMAINS")[0],"/").concat(o);for(let n=0;n<2;n+=1){1===n&&(r=this.proxyServer?"https://".concat(this.proxyServer,"/rs/?h=").concat(s("NEW_REPORT_SERVER_DOMAINS")[1],"&p=443&d=").concat(o):"https://".concat(s("NEW_REPORT_SERVER_DOMAINS")[1],"/").concat(o));try{await I(r,{timeout:1e4,data:e(t),headers:D(D({biz:"webrtc",sendts:Math.round(Date.now()/1e3),debug:"false"},this._appId&&{appid:this._appId}),{},{"Content-Type":"application/octet-stream"})},!0)}catch(t){if(1===n)throw t;continue}return}}async postDataToStatsCollector(t){let e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const o=(t=>{const e=t&&t.data.sid&&this.baseInfoMap.get(t.data.sid);return e&&e.info.vid&&+e.info.vid||0})(t[0]),r=o?void 0:this._aid,n={msgType:"EventMessages",sentTs:Math.round(Date.now()/1e3),payloads:t.map((t=>JSON.stringify(t))),vid:o,aid:r};T.networkState===R.OFFLINE&&await Promise.race([T.onlineWaiter,a(2*g.maxRetryTimeout)]);const i=e?"/events/proto-raws":"/events/messages";let c=this.url||(this.proxyServer?"https://".concat(this.proxyServer,"/rs/?h=").concat(s("EVENT_REPORT_DOMAIN"),"&p=").concat(s("STATS_COLLECTOR_PORT"),"&d=").concat(i):"https://".concat(s("EVENT_REPORT_DOMAIN"),":").concat(s("STATS_COLLECTOR_PORT")).concat(i));for(let t=0;t<2;t+=1){1===t&&(c=this.backupUrl||(this.proxyServer?"https://".concat(this.proxyServer,"/rs/?h=").concat(s("EVENT_REPORT_BACKUP_DOMAIN"),"&p=").concat(s("STATS_COLLECTOR_PORT"),"&d=").concat(i):"https://".concat(s("EVENT_REPORT_BACKUP_DOMAIN"),":").concat(s("STATS_COLLECTOR_PORT")).concat(i)));try{e?await S(c,{timeout:1e4,data:n}):await I(c,{timeout:1e4,data:n})}catch(e){if(1===t)throw e;continue}return}}createBaseInfo(t,e){const s=Object.assign({},G);return s.sid=t,this.baseInfoMap.set(t,{info:s,startTime:e}),s}reportResourceTiming(t,e){const s=performance.getEntriesByName(t),o=s[s.length-1];o&&this.reportApiInvoke(e,{name:"Client.resourceTiming",options:o,tag:O.TRACER}).onSuccess()}}function H(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return function(e,s,o){const r=o.value;if("function"==typeof r){const n=t.className||e.__className__||("AgoraRTCClient"===e.constructor.name?"Client":e.constructor.name);o.value=function(){for(var e,o=arguments.length,i=new Array(o),a=0;a<o;a++)i[a]=arguments[a];let c=i;if(t.argsMap)try{c=t.argsMap(this,...i)}catch(t){V.warning(t),c=[]}try{JSON.stringify(c)}catch(t){V.warning("arguments for method ".concat(n,".").concat(String(s)," not serializable for apiInvoke.")),c=[]}const p=(t.report||Q).reportApiInvoke(this._sessionId||null,{id:this._clientId||(null===(e=this.store)||void 0===e?void 0:e.clientId)||this._ID,name:"".concat(n,".").concat(String(s)),options:c,tag:O.TRACER,reportResult:t.reportResult},t.throttleTime);try{const e=r.apply(this,i);return e instanceof Promise?e.then((e=>(p.onSuccess(t.reportResult&&e),e))).catch((t=>{throw p.onError(t),t})):(p.onSuccess(t.reportResult&&e),e)}catch(t){throw p.onError(t),t}}}return o}}const Q=new K;U.on("REPORT_LOG_UPLOAD",(t=>{t.networkState=T.networkState,Q.reportApiInvoke(null,{name:"logUploadError",options:t,tag:O.TRACER}).onSuccess("logUploadError")}));class X extends p{constructor(t){super(t,arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",arguments.length>2?arguments[2]:void 0),f(this,"name","AgoraRTCException")}print(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"error";return super.print(t,V)}throw(){super.throw(V)}}export{Y as AgoraEventUploadId,W as AgoraLogger,X as AgoraRTCError,F as AgoraRTCEvent,K as AgoraRTCEventReport,J as AgoraRTCEventUploadType,G as EVENT_BASE_TEMPLATE,j as EventNameToID,B as LOG_TYPE,x as LOG_UPLOAD_STATE,H as apiInvoke,k as isEventCustomReportParams,U as logReportBus,V as logger,Q as report};