UNPKG

@junobuild/analytics

Version:

Tracker for Juno analytics

5 lines (4 loc) 14 kB
import { createRequire as topLevelCreateRequire } from 'module'; const require = topLevelCreateRequire(import.meta.url); var je=Object.defineProperty;var j=(e,t)=>()=>(e&&(t=e(e=0)),t);var pe=(e,t)=>{for(var n in t)je(e,n,{get:t[n],enumerable:!0})};var Ce={};pe(Ce,{CLSThresholds:()=>Z,FCPThresholds:()=>X,FIDThresholds:()=>Y,INPThresholds:()=>q,LCPThresholds:()=>J,TTFBThresholds:()=>Q,onCLS:()=>Je,onFCP:()=>Te,onFID:()=>ct,onINP:()=>nt,onLCP:()=>rt,onTTFB:()=>ot});var G,m,S,we,A,Ie,g,$,B,l,T,p,ee,C,V,I,ge,D,ye,qe,te,L,X,Te,Z,Je,Pe,H,N,Qe,Ee,Ye,f,_,ke,$e,et,tt,be,q,nt,J,z,rt,Q,it,ot,M,at,he,Me,st,Se,Y,ct,Le=j(()=>{Ie=-1,g=function(e){addEventListener("pageshow",function(t){t.persisted&&(Ie=t.timeStamp,e(t))},!0)},$=function(){var e=self.performance&&performance.getEntriesByType&&performance.getEntriesByType("navigation")[0];if(e&&e.responseStart>0&&e.responseStart<performance.now())return e},B=function(){var e=$();return e&&e.activationStart||0},l=function(e,t){var n=$(),i="navigate";return Ie>=0?i="back-forward-cache":n&&(document.prerendering||B()>0?i="prerender":document.wasDiscarded?i="restore":n.type&&(i=n.type.replace(/_/g,"-"))),{name:e,value:t===void 0?-1:t,rating:"good",delta:0,entries:[],id:"v4-".concat(Date.now(),"-").concat(Math.floor(8999999999999*Math.random())+1e12),navigationType:i}},T=function(e,t,n){try{if(PerformanceObserver.supportedEntryTypes.includes(e)){var i=new PerformanceObserver(function(r){Promise.resolve().then(function(){t(r.getEntries())})});return i.observe(Object.assign({type:e,buffered:!0},n||{})),i}}catch{}},p=function(e,t,n,i){var r,o;return function(a){t.value>=0&&(a||i)&&((o=t.value-(r||0))||r===void 0)&&(r=t.value,t.delta=o,t.rating=function(c,s){return c>s[1]?"poor":c>s[0]?"needs-improvement":"good"}(t.value,n),e(t))}},ee=function(e){requestAnimationFrame(function(){return requestAnimationFrame(function(){return e()})})},C=function(e){document.addEventListener("visibilitychange",function(){document.visibilityState==="hidden"&&e()})},V=function(e){var t=!1;return function(){t||(e(),t=!0)}},I=-1,ge=function(){return document.visibilityState!=="hidden"||document.prerendering?1/0:0},D=function(e){document.visibilityState==="hidden"&&I>-1&&(I=e.type==="visibilitychange"?e.timeStamp:0,qe())},ye=function(){addEventListener("visibilitychange",D,!0),addEventListener("prerenderingchange",D,!0)},qe=function(){removeEventListener("visibilitychange",D,!0),removeEventListener("prerenderingchange",D,!0)},te=function(){return I<0&&(I=ge(),ye(),g(function(){setTimeout(function(){I=ge(),ye()},0)})),{get firstHiddenTime(){return I}}},L=function(e){document.prerendering?addEventListener("prerenderingchange",function(){return e()},!0):e()},X=[1800,3e3],Te=function(e,t){t=t||{},L(function(){var n,i=te(),r=l("FCP"),o=T("paint",function(a){a.forEach(function(c){c.name==="first-contentful-paint"&&(o.disconnect(),c.startTime<i.firstHiddenTime&&(r.value=Math.max(c.startTime-B(),0),r.entries.push(c),n(!0)))})});o&&(n=p(e,r,X,t.reportAllChanges),g(function(a){r=l("FCP"),n=p(e,r,X,t.reportAllChanges),ee(function(){r.value=performance.now()-a.timeStamp,n(!0)})}))})},Z=[.1,.25],Je=function(e,t){t=t||{},Te(V(function(){var n,i=l("CLS",0),r=0,o=[],a=function(s){s.forEach(function(u){if(!u.hadRecentInput){var W=o[0],le=o[o.length-1];r&&u.startTime-le.startTime<1e3&&u.startTime-W.startTime<5e3?(r+=u.value,o.push(u)):(r=u.value,o=[u])}}),r>i.value&&(i.value=r,i.entries=o,n())},c=T("layout-shift",a);c&&(n=p(e,i,Z,t.reportAllChanges),C(function(){a(c.takeRecords()),n(!0)}),g(function(){r=0,i=l("CLS",0),n=p(e,i,Z,t.reportAllChanges),ee(function(){return n()})}),setTimeout(n,0))}))},Pe=0,H=1/0,N=0,Qe=function(e){e.forEach(function(t){t.interactionId&&(H=Math.min(H,t.interactionId),N=Math.max(N,t.interactionId),Pe=N?(N-H)/7+1:0)})},Ee=function(){return G?Pe:performance.interactionCount||0},Ye=function(){"interactionCount"in performance||G||(G=T("event",Qe,{type:"event",buffered:!0,durationThreshold:0}))},f=[],_=new Map,ke=0,$e=function(){var e=Math.min(f.length-1,Math.floor((Ee()-ke)/50));return f[e]},et=[],tt=function(e){if(et.forEach(function(r){return r(e)}),e.interactionId||e.entryType==="first-input"){var t=f[f.length-1],n=_.get(e.interactionId);if(n||f.length<10||e.duration>t.latency){if(n)e.duration>n.latency?(n.entries=[e],n.latency=e.duration):e.duration===n.latency&&e.startTime===n.entries[0].startTime&&n.entries.push(e);else{var i={id:e.interactionId,latency:e.duration,entries:[e]};_.set(i.id,i),f.push(i)}f.sort(function(r,o){return o.latency-r.latency}),f.length>10&&f.splice(10).forEach(function(r){return _.delete(r.id)})}}},be=function(e){var t=self.requestIdleCallback||self.setTimeout,n=-1;return e=V(e),document.visibilityState==="hidden"?e():(n=t(e),C(e)),n},q=[200,500],nt=function(e,t){"PerformanceEventTiming"in self&&"interactionId"in PerformanceEventTiming.prototype&&(t=t||{},L(function(){var n;Ye();var i,r=l("INP"),o=function(c){be(function(){c.forEach(tt);var s=$e();s&&s.latency!==r.value&&(r.value=s.latency,r.entries=s.entries,i())})},a=T("event",o,{durationThreshold:(n=t.durationThreshold)!==null&&n!==void 0?n:40});i=p(e,r,q,t.reportAllChanges),a&&(a.observe({type:"first-input",buffered:!0}),C(function(){o(a.takeRecords()),i(!0)}),g(function(){ke=Ee(),f.length=0,_.clear(),r=l("INP"),i=p(e,r,q,t.reportAllChanges)}))}))},J=[2500,4e3],z={},rt=function(e,t){t=t||{},L(function(){var n,i=te(),r=l("LCP"),o=function(s){t.reportAllChanges||(s=s.slice(-1)),s.forEach(function(u){u.startTime<i.firstHiddenTime&&(r.value=Math.max(u.startTime-B(),0),r.entries=[u],n())})},a=T("largest-contentful-paint",o);if(a){n=p(e,r,J,t.reportAllChanges);var c=V(function(){z[r.id]||(o(a.takeRecords()),a.disconnect(),z[r.id]=!0,n(!0))});["keydown","click"].forEach(function(s){addEventListener(s,function(){return be(c)},{once:!0,capture:!0})}),C(c),g(function(s){r=l("LCP"),n=p(e,r,J,t.reportAllChanges),ee(function(){r.value=performance.now()-s.timeStamp,z[r.id]=!0,n(!0)})})}})},Q=[800,1800],it=function e(t){document.prerendering?L(function(){return e(t)}):document.readyState!=="complete"?addEventListener("load",function(){return e(t)},!0):setTimeout(t,0)},ot=function(e,t){t=t||{};var n=l("TTFB"),i=p(e,n,Q,t.reportAllChanges);it(function(){var r=$();r&&(n.value=Math.max(r.responseStart-B(),0),n.entries=[r],i(!0),g(function(){n=l("TTFB",0),(i=p(e,n,Q,t.reportAllChanges))(!0)}))})},M={passive:!0,capture:!0},at=new Date,he=function(e,t){m||(m=t,S=e,we=new Date,Se(removeEventListener),Me())},Me=function(){if(S>=0&&S<we-at){var e={entryType:"first-input",name:m.type,target:m.target,cancelable:m.cancelable,startTime:m.timeStamp,processingStart:m.timeStamp+S};A.forEach(function(t){t(e)}),A=[]}},st=function(e){if(e.cancelable){var t=(e.timeStamp>1e12?new Date:performance.now())-e.timeStamp;e.type=="pointerdown"?function(n,i){var r=function(){he(n,i),a()},o=function(){a()},a=function(){removeEventListener("pointerup",r,M),removeEventListener("pointercancel",o,M)};addEventListener("pointerup",r,M),addEventListener("pointercancel",o,M)}(t,e):he(t,e)}},Se=function(e){["mousedown","keydown","touchstart","pointerdown"].forEach(function(t){return e(t,st,M)})},Y=[100,300],ct=function(e,t){t=t||{},L(function(){var n,i=te(),r=l("FID"),o=function(s){s.startTime<i.firstHiddenTime&&(r.value=s.processingStart-s.startTime,r.entries.push(s),n(!0))},a=function(s){s.forEach(o)},c=T("first-input",a);n=p(e,r,Y,t.reportAllChanges),c&&(C(V(function(){a(c.takeRecords()),c.disconnect()})),g(function(){var s;r=l("FID"),n=p(e,r,Y,t.reportAllChanges),A=[],S=-1,m=null,Se(addEventListener),s=o,A.push(s),Me()}))})}});function P(e){return new Promise((t,n)=>{e.oncomplete=e.onsuccess=()=>t(e.result),e.onabort=e.onerror=()=>n(e.error)})}function x(e,t){let n=indexedDB.open(e);n.onupgradeneeded=()=>n.result.createObjectStore(t);let i=P(n);return(r,o)=>i.then(a=>o(a.transaction(t,r).objectStore(t)))}function re(){return ne||(ne=x("keyval-store","keyval")),ne}function F(e,t,n=re()){return n("readwrite",i=>(i.put(t,e),P(i.transaction)))}function R(e,t=re()){return t("readwrite",n=>(e.forEach(i=>n.delete(i)),P(n.transaction)))}function ut(e,t){return e.openCursor().onsuccess=function(){this.result&&(t(this.result),this.result.continue())},P(e.transaction)}function O(e=re()){return e("readonly",t=>{if(t.getAll&&t.getAllKeys)return Promise.all([P(t.getAllKeys()),P(t.getAll())]).then(([i,r])=>i.map((o,a)=>[o,r[a]]));let n=[];return e("readonly",i=>ut(i,r=>n.push([r.key,r.value])).then(()=>n))})}var ne,xe=j(()=>{});var U={};pe(U,{delPageViews:()=>pt,delPerformanceMetrics:()=>ht,delTrackEvents:()=>vt,getPageViews:()=>lt,getPerformanceMetrics:()=>yt,getTrackEvents:()=>mt,setPageView:()=>dt,setPerformanceMetric:()=>gt,setTrackEvent:()=>ft});var ie,oe,ae,dt,lt,pt,ft,mt,vt,gt,yt,ht,K=j(()=>{"use strict";xe();ie=x("juno-views","views"),oe=x("juno-events","events"),ae=x("juno-metrics","metrics"),dt=({key:e,view:t})=>F(e,t,ie),lt=()=>O(ie),pt=e=>R(e,ie),ft=({key:e,track:t})=>F(e,t,oe),mt=()=>O(oe),vt=e=>R(e,oe),gt=({key:e,view:t})=>F(e,t,ae),yt=()=>O(ae),ht=e=>R(e,ae)});import{assertNonNullish as Ke}from"@dfinity/utils";import{assertNonNullish as se,nonNullish as Pt,toNullable as Et}from"@dfinity/utils";import{isBrowser as ce}from"@junobuild/utils";import{webcrypto as me}from"node:crypto";var fe="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";var He=128,v,y;function ze(e){!v||v.length<e?(v=Buffer.allocUnsafe(e*He),me.getRandomValues(v),y=0):y+e>v.length&&(me.getRandomValues(v),y=0),y+=e}function h(e=21){ze(e|=0);let t="";for(let n=y-e;n<y;n++)t+=fe[v[n]&63];return t}import{toNullable as Ge}from"@dfinity/utils";var ve=()=>BigInt(Date.now())*BigInt(1e6);var k=()=>({collected_at:ve(),updated_at:[],version:[]}),b=()=>{let{userAgent:e}=navigator;return{user_agent:Ge(e)}};import{isNullish as Xe}from"@dfinity/utils";var Ze="Analytics worker not initialized. Did you call `initOrbiter`?",w=e=>{Xe(e)&&console.warn(Ze)};import{toNullable as wt}from"@dfinity/utils";var Ne=async e=>{let{onCLS:t,onFCP:n,onINP:i,onLCP:r,onTTFB:o}=await Promise.resolve().then(()=>(Le(),Ce)),a=c=>{(async()=>await It({...c,sessionId:e}))()};t(a),n(a),i(a),r(a),o(a)},It=async e=>{let t=Tt(e);if(t==="unknown"){console.warn("Performance metric ignored. Unknown metric name.",e);return}if(t==="deprecated")return;await(await Promise.resolve().then(()=>(K(),U))).setPerformanceMetric({key:h(),view:t})},Tt=({sessionId:e,name:t,value:n,delta:i,id:r,navigationType:o})=>{let c=(()=>{switch(t){case"CLS":return{CLS:null};case"FCP":return{FCP:null};case"INP":return{INP:null};case"LCP":return{LCP:null};case"TTFB":return{TTFB:null};case"FID":return"deprecated";default:return"unknown"}})();if(c==="unknown"||c==="deprecated")return c;let u={value:n,delta:i,id:r,navigation_type:wt((()=>{switch(o){case"navigate":return{Navigate:null};case"restore":return{Restore:null};case"reload":return{Reload:null};case"back-forward":return{BackForward:null};case"back-forward-cache":return{BackForwardCache:null};case"prerender":return{Prerender:null};default:return}})())},{location:{href:W}}=document,{updated_at:le,...We}=k();return{href:W,metric_name:c,session_id:e,data:{WebVitalsMetric:u},...b(),...We}};var kt=()=>{if(!(typeof crypto>"u"))return h()},E=kt(),d,_e=e=>{let{path:t}=e.worker??{},n=t??"./workers/analytics.worker.js";d=new Worker(n);let i=()=>console.warn("Unable to connect to the analytics web worker. Have you deployed it?");return d?.addEventListener("error",i,!1),Mt(e),{cleanup(){d?.removeEventListener("error",i,!1)}}},Ae=()=>{let e=async()=>await Be(),t=new Proxy(history.pushState,{apply:async(n,i,r)=>{n.apply(i,r),await e()}});return history.pushState=t,addEventListener("popstate",e,{passive:!0}),{cleanup(){t=null,removeEventListener("popstate",e,!1)}}},ue="No session ID initialized.",de=async()=>{if(!ce())return;se(E,ue);let{title:e,location:{href:t},referrer:n}=document,{innerWidth:i,innerHeight:r}=window,{timeZone:o}=Intl.DateTimeFormat().resolvedOptions(),a={title:e,href:t,referrer:Et(Pt(n)&&n!==""?n:void 0),device:{inner_width:i,inner_height:r},time_zone:o,session_id:E,...b(),...k()};await(await Promise.resolve().then(()=>(K(),U))).setPageView({key:h(),view:a})},De=async({options:e})=>{ce()&&e?.performance!==!1&&(se(E,ue),await Ne(E))},Be=async()=>{w(d),await de(),d?.postMessage({msg:"junoTrackPageView"})},bt=async e=>{if(!ce())return;se(E,ue),w(d),await(await Promise.resolve().then(()=>(K(),U))).setTrackEvent({key:h(),track:{...e,session_id:E,...b(),...k()}}),d?.postMessage({msg:"junoTrackEvent"})},Mt=e=>{w(d),d?.postMessage({msg:"junoInitEnvironment",data:e})},Ve=()=>{w(d),d?.postMessage({msg:"junoStartTrackTimer"})},Fe=()=>{w(d),d?.postMessage({msg:"junoStopTracker"})};var Re=()=>{let e=()=>typeof import.meta<"u"&&typeof import.meta.env<"u"?import.meta.env?.VITE_SATELLITE_ID??import.meta.env?.PUBLIC_SATELLITE_ID:void 0;return typeof process<"u"?process.env?.NEXT_PUBLIC_SATELLITE_ID??e():e()},Oe=()=>{let e=()=>typeof import.meta<"u"&&typeof import.meta.env<"u"?import.meta.env?.VITE_ORBITER_ID??import.meta.env?.PUBLIC_ORBITER_ID:void 0;return typeof process<"u"?process.env?.NEXT_PUBLIC_ORBITER_ID??e():e()},Ue=()=>{let e=()=>typeof import.meta<"u"&&typeof import.meta.env<"u"?import.meta.env?.VITE_CONTAINER??import.meta.env?.PUBLIC_CONTAINER:void 0;return typeof process<"u"?process.env?.NEXT_PUBLIC_CONTAINER??e():e()};var St=e=>{let t=e?.satelliteId??Re();Ke(t,"Satellite ID is not configured. Orbiter cannot be initialized without a target Satellite.");let n=e?.orbiterId??Oe();Ke(n,"Orbiter ID is not configured. The analytics cannot be initialized without an Orbiter.");let i=e?.container??Ue();return{orbiterId:n,satelliteId:t,container:i,worker:e?.worker,options:e?.options}},rn=async e=>{await de();let t=St(e),{cleanup:n}=_e(t),{cleanup:i}=Ae();return await De(t),Ve(),()=>{Fe(),n(),i()}};export{rn as initOrbiter,bt as trackEvent,Be as trackPageView}; //# sourceMappingURL=index.mjs.map