@expofp/floorplan
Version:
Interactive floor plan library for expos and events
2 lines (1 loc) • 2.19 kB
JavaScript
import{peekConfig as p}from"@expofp/config";import{createKiosk as g}from"../components/Kiosk/kioskApi";import{getSavedKiosk as v}from"../components/Kiosk/SetKiosk";import{KIOSK_STATS_ID_STORAGE_KEY as f}from"../components/Kiosk/SetKiosk/constants";import{registerPlanDisposer as S}from"../plan-lifecycle.js";import{getLocationHistory as E}from"../services/url-sync";import{uiState as h}from"../store";import l from"./logger";import{createTelemetry as w}from"./telemetry";let i,m;function I(){const n=window.__efpEvent;if(i&&m===n)return i;i?.flush();let e;try{const t=new URL(p()?.trackerUrl??"").searchParams.get("expoId");e=t?Number(t):void 0}catch(t){l.error(t)}return i=w({url:"https://app.expofp.com/api/telemetry",expo:n,expoId:e}),m=n,S(resetTelemetry),i}function k(n,e,t){const o=E(),r=o[o.length-2];return{type:n,subtype:t,value:e==null?"":String(e),timestamp:new Date().toISOString(),url:window.location.href,referrer:r?window.location.origin+r:""}}function d(){return!!window.__efpEvent&&!!p()?.trackerUrl&&process.env.NODE_ENV==="production"&&!h.heatmap}export default async function y(n,e,t){if(l.log("trackEvent",n,e,t),!!d())try{const o=k(n,e,t),r=v();let c=null;if(r?c=await _(r):localStorage.removeItem(f),!d())return;const a=I();if(r&&!c){a.enqueue(o);return}a.setKioskId(c??""),T(a),await a.send(o)}catch(o){l.error("trackEvent",String(o))}}let s;async function _(n){if(!n)return null;const e=localStorage.getItem(f);if(e)return e;if(!s){const t=window.__efpEvent;s=g(n,"https://app.expofp.com/").then(o=>!o||window.__efpEvent!==t?null:(localStorage.setItem(f,o),o)).finally(()=>{s=void 0})}return s}let u=!1;export function resetTelemetry(){i?.flush(),i=void 0,m=void 0,u=!1}function T(n){if(u)return;u=!0;const e="efp-track-events";try{const t=localStorage.getItem(e);if(!t)return;const o=JSON.parse(t);if(!Array.isArray(o)){localStorage.removeItem(e);return}for(const r of o)!r||typeof r!="object"||!r.headers||n.enqueue({type:r.type,value:r.value==null?"":String(r.value),timestamp:r.timeStamp,url:r.headers["X-href"],referrer:r.headers["X-ref"]??""});localStorage.removeItem(e)}catch(t){localStorage.removeItem(e),l.error("Failed to migrate old events.",String(t))}}