UNPKG

@junobuild/analytics

Version:

Tracker for Juno analytics

3 lines (2 loc) 4.64 kB
import{assertNonNullish as S}from"@dfinity/utils";import{assertNonNullish as f,nonNullish as W,toNullable as F}from"@dfinity/utils";import{isBrowser as w}from"@junobuild/utils";var I="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";var c=(e=21)=>{let t="",n=crypto.getRandomValues(new Uint8Array(e|=0));for(;e--;)t+=I[n[e]&63];return t};import{toNullable as B}from"@dfinity/utils";var y=()=>BigInt(Date.now())*BigInt(1e6);var u=()=>({collected_at:y(),updated_at:[],version:[]}),l=()=>{let{userAgent:e}=navigator;return{user_agent:B(e)}};import{isNullish as R}from"@dfinity/utils";var A="Analytics worker not initialized. Did you call `initOrbiter`?",p=e=>{R(e)&&console.warn(A)};import{toNullable as O}from"@dfinity/utils";var k=async e=>{let{onCLS:t,onFCP:n,onINP:r,onLCP:a,onTTFB:d}=await import("./web-vitals-JGDN2KW5.js"),i=s=>{(async()=>await U({...s,sessionId:e}))()};t(i),n(i),r(i),a(i),d(i)},U=async e=>{let t=V(e);if(t==="unknown"){console.warn("Performance metric ignored. Unknown metric name.",e);return}if(t==="deprecated")return;await(await import("./idb.services-CVJFLYYN.js")).setPerformanceMetric({key:c(),view:t})},V=({sessionId:e,name:t,value:n,delta:r,id:a,navigationType:d})=>{let s=(()=>{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(s==="unknown"||s==="deprecated")return s;let C={value:n,delta:r,id:a,navigation_type:O((()=>{switch(d){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:L}}=document,{updated_at:K,...D}=u();return{href:L,metric_name:s,session_id:e,data:{WebVitalsMetric:C},...l(),...D}};var j=()=>{if(!(typeof crypto>"u"))return c()},m=j(),o,T=e=>{let{path:t}=e.worker??{},n=t??"./workers/analytics.worker.js";o=new Worker(n);let r=()=>console.warn("Unable to connect to the analytics web worker. Have you deployed it?");return o?.addEventListener("error",r,!1),H(e),{cleanup(){o?.removeEventListener("error",r,!1)}}},P=()=>{let e=async()=>await b(),t=new Proxy(history.pushState,{apply:async(n,r,a)=>{n.apply(r,a),await e()}});return history.pushState=t,addEventListener("popstate",e,{passive:!0}),{cleanup(){t=null,removeEventListener("popstate",e,!1)}}},g="No session ID initialized.",v=async()=>{if(!w())return;f(m,g);let{title:e,location:{href:t},referrer:n}=document,{innerWidth:r,innerHeight:a}=window,{timeZone:d}=Intl.DateTimeFormat().resolvedOptions(),i={title:e,href:t,referrer:F(W(n)&&n!==""?n:void 0),device:{inner_width:r,inner_height:a},time_zone:d,session_id:m,...l(),...u()};await(await import("./idb.services-CVJFLYYN.js")).setPageView({key:c(),view:i})},E=async({options:e})=>{w()&&e?.performance!==!1&&(f(m,g),await k(m))},b=async()=>{p(o),await v(),o?.postMessage({msg:"junoTrackPageView"})},z=async e=>{if(!w())return;f(m,g),p(o),await(await import("./idb.services-CVJFLYYN.js")).setTrackEvent({key:c(),track:{...e,session_id:m,...l(),...u()}}),o?.postMessage({msg:"junoTrackEvent"})},H=e=>{p(o),o?.postMessage({msg:"junoInitEnvironment",data:e})},M=()=>{p(o),o?.postMessage({msg:"junoStartTrackTimer"})},N=()=>{p(o),o?.postMessage({msg:"junoStopTracker"})};var _=()=>{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()},h=()=>{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()},x=()=>{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 X=e=>{let t=e?.satelliteId??_();S(t,"Satellite ID is not configured. Orbiter cannot be initialized without a target Satellite.");let n=e?.orbiterId??h();S(n,"Orbiter ID is not configured. The analytics cannot be initialized without an Orbiter.");let r=e?.container??x();return{orbiterId:n,satelliteId:t,container:r,worker:e?.worker,options:e?.options}},ye=async e=>{await v();let t=X(e),{cleanup:n}=T(t),{cleanup:r}=P();return await E(t),M(),()=>{N(),n(),r()}};export{ye as initOrbiter,z as trackEvent,b as trackPageView}; //# sourceMappingURL=index.js.map