// Version: 20250401 (function(d,M){typeof exports=="object"&&typeof module<"u"?M(exports):typeof define=="function"&&define.amd?define(["exports"],M):(d=typeof globalThis<"u"?globalThis:d||self,M(d.JBLWebSocket={}))})(this,function(d){"use strict";var M=null;const O={sendHealthStream:()=>{let t={};t.router="getHealthStream";let e=l.getWebSocket();e.readyState===WebSocket.OPEN?l.sendMsg(JSON.stringify(t)):e.addEventListener("open",function(n){l.sendMsg(JSON.stringify(t))})},setHealthFun:t=>{M=t},getHealthFun:t=>{M(t)},getHealthCallbakfun:t=>M},h=t=>t!==null&&typeof t<"u",w=t=>{let e="";return t.indexOf("//")>-1?t.indexOf(".ourdvsss.com")>-1?e=t.split("/")[0]+"//"+t.split("/")[3]:e=t.split("/")[0]+"//"+t.split("/")[2]:e=t.split("/")[0],e=e.split("?")[0],e},_t=t=>{var e;return e=t.split(".m3u8")[0],e},Fe=(t,e)=>{e.time=new Date().getTime();let n=JSON.stringify(e);localStorage.setItem(t,n)},Lt=t=>t.replace("https://","").replace("http://",""),y=()=>{const t=navigator.userAgent,e=[[/android/i,"Android Device"],[/(iPad|iPhone|iPod)/,"iOS Device"],[/Win/,"Windows Device"],[/Mac/,"MacOS Device"]];for(let[n,s]of e)if(n.test(t)&&!(s==="iOS Device"&&window.MSStream))return s;return"Unknown Device"},I=()=>{const t=navigator.userAgent,e=[[/Edg/i,"Edge"],[/Chrome/i,"Chrome"],[/Firefox/i,"Firefox"],[/Safari/i,"Safari"],[/MSIE/i,"IE"],[/FBAN/i,"Facebook"],[/instagram/i,"Instagram"],[/Zalo/i,"Zalo"],[/MicroMessenger/i,"WeChat"],[/WeChat/i,"WeChat"],[/StApp/i,"StApp"],[/KUAPP/i,"KUAPP"]];for(let[n,s]of e)if(n.test(t))return s;return t},Nt="wss://web.analysiscloud.info/m1uudG5uIU/?project=",xt="https://web.analysiscloud.info/ccu/m1uudG5uIU/config",Et="https://web.analysiscloud.info/ccu/m1uudG5uIU/upsert",Dt="https://web.analysiscloud.info/ccu/m1uudG5uIU/get";var ae=null,le={},ie=null;const Je=t=>{ae=t,ze(window.location.hostname,"x",navigator.appVersion,"",""),je()},$t=()=>fetch(xt).then(t=>t.json()).then(t=>{Je(t)}).catch(t=>console.error(t)),je=()=>{if(We(),ae.streamTest_enable!=1){console.log("streamTest is disabled");return}ie=setInterval(()=>{try{let t=le;if(t.uid)fetch(Et,{method:"POST",body:JSON.stringify(t)}).catch(e=>console.error(e));else return}catch{}},ae.streamTest_interval*6e4)},We=()=>{h(ie)&&(clearInterval(ie),ie=null)},ze=(t,e,n,s,o)=>{let r={};r={},r.projectName=l.getProject(),r.serverId=t,r.uid=e,r.device=n,r.streamName=s,r.cdnName=o,r.updateTime=new Date().getTime(),le=r},L={ccu_config:ae,getInfo:()=>le,setConfig:Je,restart:$t,start:je,stop:We,upsert:ze,remove:()=>{let t={};t.updateTime=new Date().getTime(),le=t}};var p={},g={},X=null;const Ht=t=>(Ue(),g.enable=t.apiTest_enable,g.timeout=t.apiTest_timeout,!g.enable||g.enable!=1||!g.timeout?(console.log("apiTest is disabled"),console.log(g.enable),console.log(g.timeout),!1):(X=setInterval(()=>{Re()},g.timeout),!0)),Mt=()=>{g.enable=0,p={},Ue()},Ue=()=>{h(X)&&(clearInterval(X),X=null)},Ot=(t,e,n,s)=>{if(g.enable&&g.enable!=1||O.getHealthCallbakfun()!=null)return;let o=t==null?void 0:t.split("?")[0];p[o]||(p[o]=Pe(o));let r=p[o];e=Number(e),r.server=s,r.maxSpeed=r.maxSpeed>e?r.maxSpeed:e,r.minSpeed=r.minSpeed{if(g.enable&&g.enable!=1||O.getHealthCallbakfun()!=null)return;let n=t.split("?")[0];p[n]||(p[n]=Pe(n));let s=p[n];s.server="cache",s.cacheCount++},Ft=(t,e,n)=>{if(g.enable&&g.enable!=1||O.getHealthCallbakfun()!=null)return;let s=t.split("?")[0];p[s]||(p[s]=Jt(s));let o=p[s];if(o.server=n,e!=null){let r=(e==null?void 0:e.status)+"@@@"+((e==null?void 0:e.name)==null?"":e.name)+"@@@"+e.statusText;o.failMessage.add(r)}o.failCount++},Re=()=>{let t=p;if(p={},O.getHealthCallbakfun()!=null)return;let e={},n=Object.keys(t).map(o=>t[o]);n.forEach(o=>{o.failMessage!=null&&(o.failMessage=Array.from(o.failMessage))}),e.router="apiTestInfo",e.data={};for(var s=0;s{let e={},n=L.getInfo();return e.server=n.serverId?n.serverId:"",e.domain=window.location.hostname,e.apiUrl=t,e.xfIp="",e.urlCount=0,e.cacheCount=0,e.failCount=0,e.maxSpeed=0,e.minSpeed=1/0,e.avgSpeed=0,e.totalSize=0,e.failMessage=new Set,e.device=y(),e.browser=I(),e},Jt=t=>{let e={},n=L.getInfo();return e.server=n.serverId?n.serverId:"",e.domain=window.location.hostname,e.apiUrl=t,e.xfIp="",e.urlCount=0,e.cacheCount=0,e.failCount=0,e.maxSpeed=0,e.minSpeed=1/0,e.avgSpeed=0,e.totalSize=0,e.failMessage=new Set,e.device=y(),e.browser=I(),e},jt=(t,e,n)=>{let s={};s.router="apiTestInfo",s.data={};let o={},r=L.getInfo();o.server=r.serverId?r.serverId:"",o.domain=window.location.hostname,o.apiUrl=window.location.hostname+"/"+t,o.xfIp=t,o.urlCount=1,o.cacheCount=0,o.failCount=0,o.maxSpeed=e,o.minSpeed=e,o.avgSpeed=e,o.totalSize=n||0,o.device=y(),o.browser=I(),s.data.info=[o],l.sendMsg(JSON.stringify(s))};function Wt(){return p}const i={api_map:p,api_config:g,api_taskId:X,getApiTestInfo:Wt,setJBLConfig:Ht,stop:Mt,record:Ot,recordCache:Bt,recordfail:Ft,sendData:Re,sendWebSiteLog:jt};var C={},K={},B=!0,V=!0,b={},k=null,R=0,Z="",F="";const ue=()=>{C.router="hlsTestInfo",C.data={},C.data.info=[]},Ae=()=>{K.router="hlsTsInfo",K.data={},K.data.info=[]},zt=t=>{let e=document.createElement("video");if(e.muted=!0,!Hls.isSupported())return console.log("Your Browser does not support MediaSourceExtension / MP4 mediasource"),!1;let n=0,s=0,o=!1,r=new Hls;return r.loadSource(t),r.autoLevelCapping=0,r.attachMedia(e),r.on(Hls.Events.MEDIA_ATTACHED,(a,u)=>{e.play()}),r.on(Hls.Events.FRAG_BUFFERED,function(a,u){try{n+=u.stats.loading.end-u.stats.loading.start,s++}catch(S){console.error(S)}}),r.on(Hls.Events.ERROR,(a,u)=>{o=!0}),new Promise(a=>{setTimeout(()=>{let u=Number(n/s).toFixed(2),S={url:t,error_status:o,ms:u};r.destroy(),a(S)},6e3)})},Ut=(t,e)=>{t==null||t==null||(k!=null&&clearInterval(k),b.timeout!=null&&(k=setInterval(()=>{B=!0,V=!0},b.timeout)),Z!=e&&(Z=e,F=""),B=!0,V=!0,t.on("hlsFragLoading",qe),t.on("hlsLevelUpdated",Xe),t.on("hlsError",Ge),t.on("hlsFragBuffered",Ke))},Ge=(t,e)=>{if(!B)return;B=!1;let n={};n.domain=F==""?w(e.context.url):F,n.channelName=Z,n.msTime=.1,n.speed=0,n.size=0,n.urlCount=1,n.totalSize=R.toFixed(3),n.device=y(),n.browser=I(),ue(),C.data.info.push(n),de(JSON.stringify(C))},qe=(t,e)=>{let n=w(e.frag.url);n!=F&&F!=""&&Ve(F),F=n},Xe=(t,e)=>{let n=e.details.fragments[e.details.fragments.length-1],s=n.baseurl,o=_t(s),r=n.relurl.split("?")[0],a={m3u8url:o,relurl:r};V&&(V=!1,Ae(),K.data.info.push(a),Ze(JSON.stringify(K)))},Ke=(t,e)=>{R+=e.stats.total/1024;try{let n;e.stats.tbuffered?n=e.stats.tbuffered-e.stats.trequest:n=e.stats.loading.end-e.stats.loading.start;let s=Math.round(8*e.stats.total/n),o=e.frag.duration*1e3/n,r=(s/1e3).toFixed(2),a={};if(a.domain=w(e.frag.url),a.channelName=Z,a.speed=r,a.size=(e.stats.total/1024).toFixed(3),a.totalSize=R.toFixed(3),a.msTime=o.toFixed(3),a.urlCount=0,a.device=y(),a.browser=I(),!B)return;B=!1,ue(),C.data.info.push(a),de(JSON.stringify(C))}catch(n){console.log(n)}},Ve=t=>{let e={};e.domain=t,e.channelName=Z,e.msTime=.1,e.speed=0,e.size=0,e.urlCount=1,e.totalSize=R.toFixed(3),ue(),C.data.info.push(e),de(JSON.stringify(C))},de=t=>{if(!b.enable||b.enable!=1){console.log("hlsTest is disabled"),R=0;return}l.sendMsg(t)&&(R=0)},Ze=t=>{if(!b.enable||b.enable!=1){console.log("hlsTs is disabled");return}l.sendMsg(t)},ce={init:ue,ts_init:Ae,createHls:zt,testSpeedToHlsjs:Ut,listenError:Ge,listenUrl:qe,listenM3U8:Xe,speedTest:Ke,sendPunishment:Ve,sendData:de,sendTsData:Ze,setJBLConfig:t=>{b.enable=t.hlsTest_enable,b.timeout=t.hlsTest_timeout,k!=null&&clearInterval(k),b.timeout!=null&&(k=setInterval(()=>{B=!0,V=!0},b.timeout))},stop:()=>{b.enable=0,h(k)&&(clearInterval(k),k=null)}};var N={},x={},Y="",E={},fe=!1,J=null,ge=0,Rt=0,Q=0,ee=0,j=0,Ce=0,P="";const ke=()=>{N.router="flvTestInfo",N.data={},N.data.info=[],Q=0,ee=0},Pt=(t,e)=>{t==null||t==null||(J!=null&&clearInterval(J),E.timeout!=null&&(J=setInterval(()=>{fe=!0},E.timeout)),Y!=e&&(Y=e,P=""),ke(),j=0,x=t,x.on("statistics_info",Qe))},Ye=t=>{let e=w(t.url);e!=P&&P!=""&&et(P),P=e},Qe=t=>{Ye(t);let e=0;if(x.buffered.length>0){let s=0;x.buffered.end(0)>=ge&&(s=x.buffered.end(0)-ge),s!=0&&(Q+=s,ee++),ge=x.buffered.end(0)}let n=x._transmuxer._controller._ioctl._currentRange.to/1024;if(Ce=n-j,Q!=0&&ee!=0&&(e=Q/ee),!E.enable||E.enable!=1){console.log("flvTest is disabled");return}if(fe&&!(t.speed==null||t.speed==0))try{let s=(t.speed/1024*8).toFixed(1),o={};o.domain=w(t.url),o.speed=s,j==0?o.totalSize=n:o.totalSize=n-j,j=n,o.msTime=e.toFixed(3),o.channelName=Y,o.device=y(),o.browser=I(),fe=!1,ke(),N.data.info.push(o),_e(JSON.stringify(N))}catch(s){console.log(s)}},et=t=>{let e={};e.domain=t,e.channelName=Y,e.msTime=.1,e.speed=0,e.size=0,e.urlCount=1,e.totalSize=Ce.toFixed(3),e.device=y(),e.browser=I(),ke(),j=0,N.data.info.push(e),_e(JSON.stringify(N))},_e=t=>{l.sendMsg(t)},Le={flvSpeedInfo:N,flvPlayer:x,channelName:Y,config:E,flag:fe,taskId:J,oldBuffer:ge,oldDroppedFrames:Rt,totalDuration:Q,count:ee,totalSize:j,change_size:Ce,uUrl:P,testSpeedToFlvjs:Pt,listenUrl:Ye,speedTest:Qe,sendPunishment:et,sendData:_e,setJBLConfig:t=>{E.enable=t.hlsTest_enable,E.timeout=t.hlsTest_timeout},stop:()=>{E.enable=0,h(J)&&(clearInterval(J),J=null)}};var D={},c={},te="",T={},me=!1,W=null,pe=0,_={url:"",channelName:"",buffered:0,oldBuffer:0,newBuffer:0},tt=0,At=0,he=0,Ne=0,$=0,ve=0,z="";const be=()=>{D.router="flvTestInfo",D.data={},D.data.info=[],he=0,Ne=0},Gt=(t,e)=>{t==null||t==null||(W!=null&&clearInterval(W),T.timeout!=null&&(W=setInterval(()=>{me=!0},T.timeout)),te!=e&&(te=e,z=""),be(),_={url:"",channelName:e,buffered:0,oldBuffer:0,newBuffer:0},ve=$,$=0,tt=performance.now(),c=t,c.on("Exception",n=>{_.buffered=-1,Se(z)}),c.on("error",n=>{_.buffered=-1,Se(z)}),c.on("loading_complete",()=>{const s=performance.now()-tt;let o=w(c._mediaDataSource.url);o=Lt(o),i.sendWebSiteLog("s_"+o,s,0)}),c.on("metadata_arrived",n=>{performance.now()}),c.on("media_info",n=>{c._transmuxer!=null&&c._transmuxer.on("media_segment",(s,o)=>{let r=o.data.byteLength;$+=r}),c._decompressor!=null&&c._decompressor.on("media_segment",(s,o)=>{let r=o.transfer.reduce((a,u)=>a+u.byteLength,0);$+=r})}),c.on("statistics_info",Xt))},qt=t=>{let e=w(t.url);_.url=e,e!=z&&z!=""&&Se(z),z=e},Xt=t=>{if(qt(t),c.buffered.length>0){let e=0;c.buffered.end(0)>=pe&&(e=c.buffered.end(0)-pe),he+=e,Ne++,_.buffered=c.buffered.end(0)-c.currentTime,_.newBuffer=e,_.oldBuffer=c.buffered.end(0),pe=c.buffered.end(0)}if(!T.enable||T.enable!=1){be(),$=0,ve=0,console.log("mpegTest is disabled");return}if(me&&!(t.speed==null||t.speed==0))try{let e=$/(T.timeout/1e3),n=he/(T.timeout/1e3),s={};s.domain=w(t.url),s.speed=e,s.totalSize=($/1024).toFixed(3),$=0,s.msTime=n.toFixed(3),s.channelName=te,s.device=y(),s.browser=I(),me=!1,be(),D.data.info.push(s),xe(JSON.stringify(D))}catch(e){console.log(e)}},Kt=()=>_,Se=(t,e)=>{let n={};n.domain=w(t),n.channelName=te,n.msTime=.1,n.speed=0,n.size=0,n.urlCount=1,n.errCode=e||0,n.device=y(),n.browser=I(),n.totalSize=(ve/1024).toFixed(3),n.loaderTime=0,be(),ve=0,D.data.info.push(n),xe(JSON.stringify(D))},xe=t=>{l.sendMsg(t)},ne={mpegSpeedInfo:D,mpegPlayer:c,channelName:te,config:T,flag:me,taskId:W,oldBuffer:pe,bufferInfo:_,oldDroppedFrames:At,totalDuration:he,count:Ne,testSpeedTompegjs:Gt,getBuffer:Kt,sendPunishment:Se,sendData:xe,showLog:(t,e,n)=>{console.info("flag: ",n),console.info("Url: ",t.url),console.info("SeepData: ",e)},setJBLConfig:t=>{T.enable=t.hlsTest_enable,T.timeout=t.hlsTest_timeout},stop:()=>{T.enable=0,h(W)&&(clearInterval(W),W=null)}};var U=null,A=0,Ee={};const Vt=t=>{Ee=t,A=0};function Zt(){h(U)&&(clearInterval(U),U=null);let t={};t.router="heartbeat",t.data={key:l.getJblClientId().key};let e=JSON.stringify(t);l.getWebSocket().send(e),U=setInterval(()=>{try{if(A+=1,l.getWebSocket()===null){A=0,l.createWebSocket(l.getProject(),l.getChannel());return}if(A>=3){A=0,h(l.getWebSocket())&&l.getWebSocket().close(),l.setWebSocket(null);return}h(l.getWebSocket())&&l.getWebSocket().readyState===WebSocket.OPEN&&(t.router="heartbeat",t.data={key:l.getJblClientId().key},e=JSON.stringify(t),l.getWebSocket().send(e))}catch{}},Ee.heartbeat_timeout)}function Yt(){h(U)&&(clearInterval(U),U=null)}function Qt(t){A=t}const we={config:Ee,setCount:Qt,setConfig:Vt,start:Zt,close:Yt};var nt="";const en=t=>{nt=t,ot()},ot=()=>{const t=new XMLHttpRequest;t.open("GET",nt,!0),t.timeout=3e3,t.jbl_base_test=!1;const e={timeout:5e3,headers:{"Cache-Control":"no-cache"}};for(const n in e.headers)e.headers.hasOwnProperty(n)&&t.setRequestHeader(n,e.headers[n]);t.send()},tn={receive:en,run:ot};var G={result:{}},oe=[];const st=(t,e,n)=>{let s={};s.type=t,s.group=e,s.lines=n;let o={};o.router="getGroupResult",o.data=s;let r=l.getWebSocket();r!=null&&(r.readyState===WebSocket.OPEN?(l.sendMsg(JSON.stringify(o)),oe.filter(u=>u.type==t&&u.group==e).length==0&&oe.push(s)):r.addEventListener("open",function(a){l.sendMsg(JSON.stringify(o)),oe.filter(S=>S.type==t&&S.group==e).length==0&&oe.push(s)}))},q={groupResultObj:G,setGroupInfo:st,resetGroupDataLine:async()=>{oe.forEach(async t=>{st(t.type,t.group,t.lines)})},getGroupData:async(t,e,n)=>{let s=l.getProject(),o={};o.project=s,o.type=e,o.group=n;let r=localStorage.getItem("group_best_line"),a=JSON.parse(r);if(a!=null&&new Date().getTime()-a.time<6e4)return G.result=a.result,G;let u=new URL(Dt),S={};try{let ye=800,Ie=new AbortController,m=Ie.signal;const v=setTimeout(()=>Ie.abort(),ye);Object.keys(o).forEach(kt=>u.searchParams.append(kt,o[kt]));let se=u.href,re=await fetch(se,{signal:m});clearTimeout(v);let H=await re.json();S[H.name]=H.value,Fe("group_best_line",G),G.result[e+"_"+n]=H.value==null?"":H.value}catch{G.result[e+"_"+n]=""}}};var f=null,De="",$e="",rt="",at=!1,He={},Me={key:""};const nn=t=>{rt=t.socketUrl,t.webSocket},on=()=>Me,sn=()=>f,rn=t=>{f=t},an=()=>De,ln=()=>$e,un=()=>He,lt=()=>{let t={};t.router="getHlsConfigSetting",t.data={domain:window.location.hostname},Oe(JSON.stringify(t));let e={};e.router="getResourceUrl",e.data={},e.data.chname=$e,Oe(JSON.stringify(e))},dn=async(t,e)=>{De=t,$e=e;let n=rt+De;if(console.log("JBL Version:v20250401-1 "+n),h(f))return console.log("jbl connection exists, do nothing"),null;if("WebSocket"in window)f=new WebSocket(n);else return console.log("jbl webSocket is not supported"),null;return f.onerror=()=>(console.warn("jbl webSocket error"),h(f)&&f.close(),null),f.onopen=()=>(console.log("jbl webSocket connected"),lt(),q.resetGroupDataLine(),null),f.onmessage=s=>{we.setCount(0);var o=JSON.parse(s.data);switch(o.router){case"heartbeat":Me={time:new Date().getTime(),key:o.data};break;case"getResourceUrl":He.result=o.data;break;case"getDomainSetting":tn.receive(o.data);break;case"getHealthStream":O.getHealthFun(o.data),i.stop();break;case"getGroupResult":q.groupResultObj.result[o.data.name]=o.data.value,Fe("group_best_line",q.groupResultObj);break;case"getHlsConfigSetting":let r=o.data;i.setJBLConfig(r),L.setConfig(r),we.setConfig(r),we.start(),ce.setJBLConfig(r),Le.setJBLConfig(r),ne.setJBLConfig(r);break}},f.onclose=()=>(i.stop(),ce.stop(),Le.stop(),ne.stop(),console.log("jbl webSocket closed"),h(f)&&f.close(),Me=null,f=null,at||L.restart(),null),window.onbeforeunload=()=>{try{at=!0,L.stop(),we.close(),f.close()}catch{}},f},Oe=t=>h(f)?(f.send(t),!0):(console.log("webSocket doesn't exist, do nothing"),!1),l={resourceUrlObj:He,getJblClientId:on,getResourceUrlObj:un,getWebSocket:sn,setWebSocket:rn,getProject:an,getChannel:ln,getConfigData:lt,sendMsg:Oe,createWebSocket:dn,setSocketConfig:nn};function cn(){var t=XMLHttpRequest.prototype.open;XMLHttpRequest.prototype.open=function(){t.apply(this,arguments);let e=new Date().getTime(),n=arguments[1];this.addEventListener("progress",function(o){this.prvdownloaded=o.loaded}),this.addEventListener("load",function(){let o="";if(this.jbl_base_test&&(o=this.getResponseHeader("Server")),this.status>=200&&this.status<300){let r=new Date().getTime()-e;this.prvdownloaded==null?this.prvdownloaded=0:this.prvdownloaded,i.record(n,r,this.prvdownloaded,o)}else if(this.status>=400&&this.status<500){let r={status:this.status,statusText:this.statusText};i.recordfail(n,r,"")}else if(this.status>=500){let r={status:this.status,statusText:this.statusText};i.recordfail(n,r,"")}});const s=function(){let o={name:"Network Error",status:"5xx",statusText:"Network Error"};i.recordfail(n,o,"")};this.addEventListener("error",s),this.addEventListener("timeout",s)}}function fn(t,e){t.fetch=function(){let n=new Date().getTime(),s=arguments[0].url==null?arguments[0]:arguments[0].url,o=arguments[1]==null?{}:arguments[1],r=e.apply(this,arguments),a=s==null?void 0:s.split("?")[0],u=a==null?void 0:a.split("/"),S=u==null?void 0:u.pop();return(o.signal!=null||o.signal!=null)&&S!=null&&S.indexOf(".flv")!=-1?r:new Promise((ye,Ie)=>{r.then(m=>{if(m.ok){let v=m.clone(),se=v.headers.get("Server")==null?"":v.headers.get("Server");v.arrayBuffer().then(re=>{let H=new Date().getTime()-n;m.status==200&&i.record(s,H,re.byteLength,se)})}else{let v=m.headers.get("Server");i.recordfail(s,m,v)}return ye(m)}).catch(m=>{if(m.response){let v={};m.response.headers.forEach((re,H)=>{v[H]=re});let se={name:m.name,status:m.response.status,statusText:m.response.statusText};i.recordfail(s,se,v.Server)}else{let v={name:m.name,status:"5xx",statusText:"Network Error"};i.recordfail(s,v,"")}return Ie(m)})})}}function gn(t,e,n){t.contentWindow.fetch=e,t.contentWindow.XMLHttpRequest.prototype.open=n}function mn(){window.addEventListener("load",()=>{var t=performance.getEntriesByType("resource");t.forEach(function(e){let n=e.responseStatus;if(n>=200&&n<=299)e.transferSize===0&&e.encodedBodySize===0&&e.decodedBodySize===0?i.recordCache(e.name,""):i.record(e.name,e.duration.toFixed(4),e.transferSize,"");else if(n>=400&&n<=599){let s={name:"window load Error",status:n,statusText:"window load Error"};i.recordfail(e.name,s)}else e.transferSize===0&&e.encodedBodySize===0&&e.decodedBodySize===0?i.recordCache(e.name,""):i.record(e.name,e.duration.toFixed(4),e.transferSize,"")})})}function pn(){const t=window.open;window.open=function(e,n,s){console.log("window.open called with URL:",e);const o=t.apply(this,arguments);let r=new Date().getTime();if(o)o.onload=function(){var u=new Date().getTime()-r;i.record(e,u.toFixed(4),0)},o.onerror=function(){console.error("Error loading new window:",e);let a={name:"New window Error",status:"5xx",statusText:"New window Error"};i.recordfail(e,a,"")};else{console.error("Failed to open new window:",e);let a={name:"New window Error",status:"5xx",statusText:"Failed to open new window"};i.recordfail(e,a,"")}return o}}function hn(){window.addEventListener("beforeunload",()=>{i.sendData()})}function vn(t){gn(t,fetch,XMLHttpRequest.prototype.open)}function it(t){t.startTime=new Date().getTime(),t.count=0,t.onload=function(){var e=new Date().getTime(),n=e-t.startTime;t.count==0&&i.record(t.src,n,0,""),vn(t),t.count++},t.onerror=function(){let e={name:"iframe Error",status:"5xx",statusText:"iframe Error"};i.recordfail(t.src,e,"")}}function ut(t){t.addEventListener("click",e=>{e.target.href!=null?i.record(e.target.href,0,0,""):i.record(e.currentTarget.href,0,0,"")})}function bn(){document.addEventListener("DOMContentLoaded",function(){var t=document.getElementsByTagName("iframe");document.querySelectorAll("a").forEach(o=>{ut(o)});for(var n=0;n{Be=t,l.createWebSocket(Be,e)},ct=async(t,e)=>{O.setHealthFun(e),await l.createWebSocket(t,""),O.sendHealthStream()},ft=(t,e,n,s,o)=>{L.upsert(t,e,n,s,o)},gt=()=>{L.remove()},mt=(t,e,n)=>{i.sendWebSiteLog(t,e,n)},pt=(t,e,n)=>{q.setGroupInfo(t,e,n)},ht=async(t,e)=>(await q.getGroupData(Be,t,e),q.groupResultObj),vt=(t,e)=>{ce.testSpeedToHlsjs(t,e)},bt=t=>ce.createHls(t),St=(t,e)=>{Le.testSpeedToFlvjs(t,e)},wt=(t,e)=>{ne.testSpeedTompegjs(t,e)},Tt=(t,e)=>{ne.sendPunishment(t,e)},yt=()=>ne.getBuffer(),It=()=>l.resourceUrlObj,Ct=t=>w(t),Sn={connect:dt,getHealthStream:ct,upsert:ft,remove:gt,sendWebLog:mt,testLine:pt,getGroupResult:ht,testHls:vt,testSpeedHls:bt,testFlv:St,testMpeg:wt,sendMpegErrCode:Tt,getMpegBuffer:yt,getResourceUrl:It,extractHostname:Ct};d.connect=dt,d.default=Sn,d.extractHostname=Ct,d.getGroupResult=ht,d.getHealthStream=ct,d.getMpegBuffer=yt,d.getResourceUrl=It,d.remove=gt,d.sendMpegErrCode=Tt,d.sendWebLog=mt,d.testFlv=St,d.testHls=vt,d.testLine=pt,d.testMpeg=wt,d.testSpeedHls=bt,d.upsert=ft,Object.defineProperties(d,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});