UNPKG

reporting-lib

Version:

A comprehensive monitoring and reporting library for web applications

4 lines 11.9 kB
var ReportingLib=(function(){'use strict';var O={source:"mbp",userId:"",reportUrl:"http://localhost:3001/report/actions",trackerAll:false},w="",p=O;function ne(e){for(let t in O)e[t]&&(O[t]=e[t]);e.version&&(w=e.version);}var y=new Map;function re(){return y}function oe(e,t){y.get(e)?y.get(e).push(t):y.set(e,[t]);}function ie(){y.clear();}function Me(e,t,r=false){if(p.reportUrl===null){console.error("\u8BF7\u5148\u914D\u7F6E\u4E0A\u62A5\u5730\u5740");return}let n=JSON.stringify({user_id:Number(p.userId)||0,source:p.source,type:e,url:window.location.href,data:t});if(r){k(p.reportUrl,n);return}window.requestIdleCallback?window.requestIdleCallback(()=>{k(p.reportUrl,n);},{timeout:3e3}):setTimeout(()=>{k(p.reportUrl,n);});}var se=null;function d(e,t,r=3e3){oe(e,t),clearTimeout(se),se=setTimeout(()=>{let n=re();if(n.size){for(let[o,i]of n)Me(o,i);ie();}},r);}function k(e,t){navigator.sendBeacon?navigator.sendBeacon(e,t):be(e,t);}function be(e,t){let r=new XMLHttpRequest;r.open("POST",e,true),r.setRequestHeader("Content-Type","application/json"),r.send(t);}var Fe=({samplePoints:e=6,whiteTags:t=["HTML","BODY","IFRAME"],onDetected:r=(o,i)=>{},threshold:n=.9}={})=>{let o=window.innerWidth,i=window.innerHeight,a=[];for(let u=1;u<=e;u++)a.push([o/2,i/(e+1)*u]);let s=0,c=[];a.forEach(([u,L])=>{let T=document.elementFromPoint(u,L),m=T?.tagName||"NULL";c.push({x:u,y:L,tag:m}),(!T||t.includes(m))&&s++;});let l=s/e>=n;r(l,c);},Be=(e,t=300,r=false)=>{let n=null;return function(...o){let i=this;n&&clearTimeout(n),r&&!n&&e.apply(i,o),n=setTimeout(()=>{r||e.apply(i,o),n=null;},t);}},Oe=Be(e=>{Fe({onDetected:(t,r)=>{e(t),P=null;}});},1e3),P=null,ae=()=>(P||(P=new Promise(e=>{setTimeout(()=>{Oe(e);},3e3);})),P),ce=()=>{let e=navigator.userAgent,t="Unknown",r="Unknown";return /edg/i.test(e)?(t="Edge",r=e.match(/edg\/([\d\.]+)/i)?.[1]):/opr/i.test(e)?(t="Opera",r=e.match(/opr\/([\d\.]+)/i)?.[1]):/chrome/i.test(e)?(t="Chrome",r=e.match(/chrome\/([\d\.]+)/i)?.[1]):/firefox/i.test(e)?(t="Firefox",r=e.match(/firefox\/([\d\.]+)/i)?.[1]):/safari/i.test(e)&&!/chrome/i.test(e)?(t="Safari",r=e.match(/version\/([\d\.]+)/i)?.[1]):(/msie/i.test(e)||/trident/i.test(e))&&(t="Internet Explorer",r=e.match(/(msie\s|rv:)([\d\.]+)/i)?.[2]),{name:t,version:r}},le=()=>{let e=navigator.userAgent||navigator.vendor||window.opera;return /windows phone/i.test(e)?"Windows Phone":/win/i.test(e)?"Windows":/android/i.test(e)?"Android":/iPad|iPhone|iPod/.test(e)&&!window.MSStream?"iOS":/Macintosh|MacIntel|MacPPC|Mac68K/.test(e)?"macOS":/Linux/.test(e)?"Linux":"Unknown OS"},E=e=>{try{let t=new URL(e.indexOf("http")===-1?`https:${e}`:e);return /^\/mbp\/\d+\/video\/[^/?#]+\.[^/?#]+$/i.test(t.pathname)}catch{return false}},I=e=>{try{return JSON.stringify(e,null,2)}catch{return String(e)}},A=e=>{if(!e)return 0;try{if(typeof e=="string")return new TextEncoder().encode(e).length;if(e instanceof Blob)return e.size;if(e instanceof ArrayBuffer||ArrayBuffer.isView(e))return e.byteLength;if(e instanceof URLSearchParams)return new TextEncoder().encode(e.toString()).length;if(e instanceof FormData){let t=0;for(let[r,n]of e.entries())t+=new TextEncoder().encode(r).length,typeof n=="string"?t+=new TextEncoder().encode(n).length:n instanceof Blob&&(t+=n.size);return t}}catch{return 0}return 0};var ue=ce(),q={user_agent:ue.name+ue.version,platform:le()},Re=/^\s*at (?:(.*?) ?\()?((?:file|https?|blob|chrome-extension|address|native|eval|webpack|<anonymous>|[-a-z]+:|.*bundle|\/).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,ke=10;function qe(e){let t=e.match(Re);if(!t)return {};let r=t[2]||"<anonymous>",n=t[1]||"",o=parseInt(t[3],10)||void 0,i=parseInt(t[4],10)||void 0;return {filename:r,functionName:n,lineno:o,colno:i}}function de(e){let{stack:t}=e;if(!t)return [];let r=[];for(let n of t.split(` `).slice(1)){let o=qe(n);o.filename&&r.push(o);}return r.slice(0,ke)}function z(){window.addEventListener("error",async function(e){let t=e.target;if(t&&(t.src||t.href)){let r={error_type:"resource",...q,msg:I(`\u52A0\u8F7D${t.tagName}\u5931\u8D25\uFF1A${t.src||t.href}`),version:w};d("error",r);}else {let r=de(e.error),n=e.message;if(r?.[0]){let{filename:a,functionName:s,lineno:c,colno:l}=r[0];n=`${e.message},${a},line:${c}:${l}`;}let o={error_type:"js",msg:I(n),...q,version:w};d("error",o),await ae()&&d("error",{...o,error_type:"whiteScreen"});}},true),window.addEventListener("unhandledrejection",function(e){let t=e.reason,r=de(t),n=t;if(r?.[0]){let{filename:i,functionName:a,lineno:s,colno:c}=r[0];n=`${e?.reason?.message||e?.reason},${i},line:${s}:${c}`;}let o={error_type:"js",msg:I(n),...q,version:w};d("error",o);});}var ye=-1,v=e=>{addEventListener("pageshow",t=>{t.persisted&&(ye=t.timeStamp,e(t));},true);},f=(e,t,r,n)=>{let o,i;return a=>{t.value>=0&&(a||n)&&(i=t.value-(o??0),(i||o===void 0)&&(o=t.value,t.delta=i,t.rating=((s,c)=>s>c[1]?"poor":s>c[0]?"needs-improvement":"good")(t.value,r),e(t)));}},j=e=>{requestAnimationFrame(()=>requestAnimationFrame(()=>e()));},J=()=>{let e=performance.getEntriesByType("navigation")[0];if(e&&e.responseStart>0&&e.responseStart<performance.now())return e},S=()=>J()?.activationStart??0,h=(e,t=-1)=>{let r=J(),n="navigate";return ye>=0?n="back-forward-cache":r&&(document.prerendering||S()>0?n="prerender":document.wasDiscarded?n="restore":r.type&&(n=r.type.replace(/_/g,"-"))),{name:e,value:t,rating:"good",delta:0,entries:[],id:`v5-${Date.now()}-${Math.floor(8999999999999*Math.random())+1e12}`,navigationType:n}},D=new WeakMap;function X(e,t){return D.get(e)||D.set(e,new t),D.get(e)}var U=class{t;i=0;o=[];h(t){if(t.hadRecentInput)return;let r=this.o[0],n=this.o.at(-1);this.i&&r&&n&&t.startTime-n.startTime<1e3&&t.startTime-r.startTime<5e3?(this.i+=t.value,this.o.push(t)):(this.i=t.value,this.o=[t]),this.t?.(t);}},C=(e,t,r={})=>{try{if(PerformanceObserver.supportedEntryTypes.includes(e)){let n=new PerformanceObserver(o=>{Promise.resolve().then(()=>{t(o.getEntries());});});return n.observe({type:e,buffered:!0,...r}),n}}catch{}},G=e=>{let t=false;return ()=>{t||(e(),t=true);}},g=-1,Se=new Set,fe=()=>document.visibilityState!=="hidden"||document.prerendering?1/0:0,W=e=>{if(document.visibilityState==="hidden"){if(e.type==="visibilitychange")for(let t of Se)t();isFinite(g)||(g=e.type==="visibilitychange"?e.timeStamp:0,removeEventListener("prerenderingchange",W,true));}},b=()=>{if(g<0){let e=S();g=(document.prerendering?void 0:globalThis.performance.getEntriesByType("visibility-state").filter(r=>r.name==="hidden"&&r.startTime>e)[0]?.startTime)??fe(),addEventListener("visibilitychange",W,true),addEventListener("prerenderingchange",W,true),v(()=>{setTimeout(()=>{g=fe();});});}return {get firstHiddenTime(){return g},onHidden(e){Se.add(e);}}},F=e=>{document.prerendering?addEventListener("prerenderingchange",()=>e(),true):e();},he=[1800,3e3],K=(e,t={})=>{F(()=>{let r=b(),n,o=h("FCP"),i=C("paint",a=>{for(let s of a)s.name==="first-contentful-paint"&&(i.disconnect(),s.startTime<r.firstHiddenTime&&(o.value=Math.max(s.startTime-S(),0),o.entries.push(s),n(true)));});i&&(n=f(e,o,he,t.reportAllChanges),v(a=>{o=h("FCP"),n=f(e,o,he,t.reportAllChanges),j(()=>{o.value=performance.now()-a.timeStamp,n(true);});}));});},pe=[.1,.25],Ce=(e,t={})=>{let r=b();K(G(()=>{let n,o=h("CLS",0),i=X(t,U),a=c=>{for(let l of c)i.h(l);i.i>o.value&&(o.value=i.i,o.entries=i.o,n());},s=C("layout-shift",a);s&&(n=f(e,o,pe,t.reportAllChanges),r.onHidden(()=>{a(s.takeRecords()),n(true);}),v(()=>{i.i=0,o=h("CLS",0),n=f(e,o,pe,t.reportAllChanges),j(()=>n());}),setTimeout(n));}));},xe=0,$=1/0,M=0,ze=e=>{for(let t of e)t.interactionId&&($=Math.min($,t.interactionId),M=Math.max(M,t.interactionId),xe=M?(M-$)/7+1:0);},H,me=()=>H?xe:performance.interactionCount??0,De=()=>{"interactionCount"in performance||H||(H=C("event",ze,{type:"event",buffered:true,durationThreshold:0}));},ge=0,_=class{u=[];l=new Map;m;p;v(){ge=me(),this.u.length=0,this.l.clear();}L(){let t=Math.min(this.u.length-1,Math.floor((me()-ge)/50));return this.u[t]}h(t){if(this.m?.(t),!t.interactionId&&t.entryType!=="first-input")return;let r=this.u.at(-1),n=this.l.get(t.interactionId);if(n||this.u.length<10||t.duration>r.P){if(n?t.duration>n.P?(n.entries=[t],n.P=t.duration):t.duration===n.P&&t.startTime===n.entries[0].startTime&&n.entries.push(t):(n={id:t.interactionId,entries:[t],P:t.duration},this.l.set(n.id,n),this.u.push(n)),this.u.sort((o,i)=>i.P-o.P),this.u.length>10){let o=this.u.splice(10);for(let i of o)this.l.delete(i.id);}this.p?.(n);}}},Le=e=>{let t=globalThis.requestIdleCallback||setTimeout;document.visibilityState==="hidden"?e():(e=G(e),addEventListener("visibilitychange",e,{once:true,capture:true}),t(()=>{e(),removeEventListener("visibilitychange",e,{capture:true});}));},ve=[200,500],Pe=(e,t={})=>{if(!globalThis.PerformanceEventTiming||!("interactionId"in PerformanceEventTiming.prototype))return;let r=b();F(()=>{De();let n,o=h("INP"),i=X(t,_),a=c=>{Le(()=>{for(let u of c)i.h(u);let l=i.L();l&&l.P!==o.value&&(o.value=l.P,o.entries=l.entries,n());});},s=C("event",a,{durationThreshold:t.durationThreshold??40});n=f(e,o,ve,t.reportAllChanges),s&&(s.observe({type:"first-input",buffered:true}),r.onHidden(()=>{a(s.takeRecords()),n(true);}),v(()=>{i.v(),o=h("INP"),n=f(e,o,ve,t.reportAllChanges);}));});},N=class{m;h(t){this.m?.(t);}},Te=[2500,4e3],Ee=(e,t={})=>{F(()=>{let r=b(),n,o=h("LCP"),i=X(t,N),a=c=>{t.reportAllChanges||(c=c.slice(-1));for(let l of c)i.h(l),l.startTime<r.firstHiddenTime&&(o.value=Math.max(l.startTime-S(),0),o.entries=[l],n());},s=C("largest-contentful-paint",a);if(s){n=f(e,o,Te,t.reportAllChanges);let c=G(()=>{a(s.takeRecords()),s.disconnect(),n(true);}),l=u=>{u.isTrusted&&(Le(c),removeEventListener(u.type,l,{capture:true}));};for(let u of ["keydown","click","visibilitychange"])addEventListener(u,l,{capture:true});v(u=>{o=h("LCP"),n=f(e,o,Te,t.reportAllChanges),j(()=>{o.value=performance.now()-u.timeStamp,n(true);});});}});},we=[800,1800],V=e=>{document.prerendering?F(()=>V(e)):document.readyState!=="complete"?addEventListener("load",()=>V(e),true):setTimeout(e);},Ie=(e,t={})=>{let r=h("TTFB"),n=f(e,r,we,t.reportAllChanges);V(()=>{let o=J();o&&(r.value=Math.max(o.responseStart-S(),0),r.entries=[o],n(true),v(()=>{r=h("TTFB",0),n=f(e,r,we,t.reportAllChanges),n(true);}));});};function Y(){Ce(x),Pe(x),Ee(x),K(x),Ie(x);}function x(e){let t={name:e.name,value:e.value};d("performance",t);}var B=XMLHttpRequest.prototype,$e=B.open,Ue=B.send;function We(){B.open=function(...t){this.url=t[1],this.method=t[0],$e.apply(this,t);},B.send=function(...t){this.startTime=Date.now();let r=t[0];this.requestSize=A(r);let n=()=>{this.endTime=Date.now(),this.duration=this.endTime-this.startTime;let{status:o,duration:i,startTime:a,endTime:s,method:c,response:l,requestSize:u}=this,{url:L}=this,T=o,m=L;try{T=JSON.parse(l).code;}catch{}E(m)&&(m="https://sd-cms-bmp.oss-accelerate.aliyuncs.com:443/mbp/video");let te={status:o,duration:i,request_url:m,method:c||"GET",code:T};try{te.request_size=parseInt(u/1e3);}catch{}d("api",te),this.removeEventListener("loadend",n,true);};this.addEventListener("loadend",n,true),Ue.apply(this,t);};}function Q(){We();}var He=window.fetch;function _e(){window.fetch=function(t,r){let n=Date.now(),o=t;E(o)&&(o="https://sd-cms-bmp.oss-accelerate.aliyuncs.com:443/mbp/video");let i={request_url:o,method:r?.method||"GET"};try{i.request_size=parseInt(A(r?.body)/1e3);}catch{}return He(t,r).then(a=>{let s=Date.now();i.duration=s-n,i.status=a.status;let c=a.clone();return c.ok?t.indexOf(".js.map")===-1&&c.json().then(l=>{i.code=l.code,d("api",i);}):(i.code=i.status,t.indexOf(".js.map")===-1&&d("api",i)),a}).catch(a=>{let s=Date.now();return i.duration=s-n,i.status=0,i.code=i.status,d("api",i),a})};}function Z(){_e();}function ee(){Q(),Z();}var Ae=false,Ne={init(e={}){ne(e),Ae||(z(),Y(),ee(),Ae=true);}},xt=Ne; return xt;})();//# sourceMappingURL=index.global.js.map //# sourceMappingURL=index.global.js.map