@objectiv/tracker-core
Version:
Core functionality for Objectiv JavaScript trackers
2 lines • 30.4 kB
JavaScript
"use strict";var f=Object.defineProperty;var Q=Object.getOwnPropertyDescriptor;var q=Object.getOwnPropertyNames;var V=Object.prototype.hasOwnProperty;var B=(t,e)=>{for(var o in e)f(t,o,{get:e[o],enumerable:!0})},H=(t,e,o,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of q(e))!V.call(t,n)&&n!==o&&f(t,n,{get:()=>e[n],enumerable:!(r=Q(e,n))||r.enumerable});return t};var W=t=>H(f({},"__esModule",{value:!0}),t);var St={};B(St,{ContextNames:()=>A,EventName:()=>w,GlobalContextErrorType:()=>F,GlobalContextName:()=>k,LocationContextErrorType:()=>D,LocationContextName:()=>C,Tracker:()=>P,TrackerEvent:()=>h,TrackerPlatform:()=>M,TrackerPlugins:()=>d,TrackerQueue:()=>N,TrackerQueueMemoryStore:()=>p,TrackerTransportGroup:()=>g,TrackerTransportRetry:()=>L,TrackerTransportRetryAttempt:()=>x,TrackerTransportSwitch:()=>S,cleanObjectFromInternalProperties:()=>v,generateGUID:()=>i,getObjectKeys:()=>b,isAbstractContext:()=>y,isBrowser:()=>J,isContextEqual:()=>Rt,isDevMode:()=>K,isNonEmptyArray:()=>E,isTestMode:()=>$,isTransportSendError:()=>R,makeApplicationContext:()=>Z,makeApplicationLoadedEvent:()=>gt,makeContentContext:()=>tt,makeCookieIdContext:()=>et,makeCoreTrackerDefaultPluginsList:()=>U,makeExpandableContext:()=>ot,makeFailureEvent:()=>pt,makeHiddenEvent:()=>xt,makeHttpContext:()=>rt,makeId:()=>X,makeIdentityContext:()=>nt,makeInputChangeEvent:()=>_t,makeInputContext:()=>at,makeInputValueContext:()=>it,makeInteractiveEvent:()=>kt,makeLinkContext:()=>st,makeLocaleContext:()=>lt,makeMarketingContext:()=>ct,makeMediaEvent:()=>Ct,makeMediaLoadEvent:()=>yt,makeMediaPauseEvent:()=>ft,makeMediaPlayerContext:()=>ut,makeMediaStartEvent:()=>Et,makeMediaStopEvent:()=>jt,makeNavigationContext:()=>Tt,makeNonInteractiveEvent:()=>It,makeOverlayContext:()=>mt,makePathContext:()=>bt,makePressEvent:()=>At,makePressableContext:()=>dt,makeRootLocationContext:()=>vt,makeSessionContext:()=>ht,makeSuccessEvent:()=>Mt,makeTransportSendError:()=>Lt,makeVisibleEvent:()=>Pt,uuidv4:()=>m,waitForPromise:()=>j});module.exports=W(St);function m(){let t=globalThis.crypto;if(t){if(typeof t.randomUUID=="function")return m.crypto_RandomUUID();if(typeof t.getRandomValues=="function")return m.crypto_GetRandomValues()}return m.dateNow_MathRandom()}m.crypto_RandomUUID=()=>globalThis.crypto.randomUUID();m.crypto_GetRandomValues=()=>`${1e7}-${1e3}-${4e3}-${8e3}-${1e11}`.replace(/[018]/g,t=>{let e=parseInt(t);return(e^globalThis.crypto.getRandomValues(new Uint8Array(1))[0]&15>>e/4).toString(16)});m.dateNow_MathRandom=()=>{let t=Date.now().toString(16)+Math.random().toString(16)+"0".repeat(16);return[t.substring(0,8),t.substring(8,12),"4000-8"+t.substring(13,16),t.substring(16,28)].join("-")};var b=Object.keys;function E(t){return t.length>0}var i=()=>m(),j=async({predicate:t,intervalMs:e,timeoutMs:o})=>{if(t())return!0;let r,n,s=T=>{t()?T(!0):(clearTimeout(n),n=setTimeout(()=>s(T),e))},l=new Promise(s),u=new Promise(T=>r=setTimeout(()=>T(!1),o));return Promise.race([u,l]).finally(()=>{clearTimeout(n),clearTimeout(r)})},X=(t,e=!0)=>{let o=typeof t=="number"?t.toString():t;if(typeof o!="string")return null;if(!e)return o;let r=o.toLowerCase().trim().replace(/[\s]+/g,"-").replace(/[^a-zA-Z0-9_-]+/g,"").replace(/-+/g,"-").replace(/_+/g,"_").replace(/^([-_])*|([-_])*$/g,"").slice(0,64);return!r||!r.length?null:r},$=()=>{var t;return((t=process.env.NODE_ENV)==null?void 0:t.startsWith("test"))??!1},K=()=>{var t;return(((t=process.env.NODE_ENV)==null?void 0:t.startsWith("dev"))??!1)||$()},J=()=>typeof window<"u";var I={name:"@objectiv/tracker-core",version:"0.0.26",description:"Core functionality for Objectiv JavaScript trackers",license:"Apache-2.0",homepage:"https://objectiv.io",keywords:["objectiv","tracking","analytics","events","taxonomy"],repository:{type:"git",url:"https://github.com/objectiv/objectiv-analytics.git",directory:"tracker/core/tracker"},bugs:"https://github.com/objectiv/objectiv-analytics/issues",contributors:[{name:"Surai Di Rosa",email:"surai.dirosa@gmail.com",url:"https://github.com/sdirosa"}],main:"./dist/index.js",module:"./dist/esm/index.js",types:"./dist/index.d.ts",files:["dist"],exports:{".":{require:"./dist/index.js",import:"./dist/esm/index.js",types:"./dist/index.d.ts"}},scripts:{build:"tsup src/index.ts --format cjs,esm --legacy-output --minify --dts --sourcemap --clean","deploy:verdaccio":"npm publish",prettify:"prettier --write .",tsc:"tsc --noEmit",test:"jest --silent","test:ci":"jest --silent --ci","test:coverage":"jest --silent --coverage",depcheck:"npx depcheck"},devDependencies:{"@objectiv/testing-tools":"^0.0.26",jest:"^28.1.3",mockdate:"^3.0.5",prettier:"^2.7.1","ts-jest":"^28.0.7",tsup:"^6.2.1",typescript:"^4.7.4"},dependencies:{"@objectiv/developer-tools":"^0.0.26","@objectiv/schema":"^0.0.26"}};var k=(a=>(a.ApplicationContext="ApplicationContext",a.CookieIdContext="CookieIdContext",a.HttpContext="HttpContext",a.IdentityContext="IdentityContext",a.InputValueContext="InputValueContext",a.LocaleContext="LocaleContext",a.MarketingContext="MarketingContext",a.PathContext="PathContext",a.SessionContext="SessionContext",a))(k||{}),C=(a=>(a.ContentContext="ContentContext",a.ExpandableContext="ExpandableContext",a.InputContext="InputContext",a.LinkContext="LinkContext",a.MediaPlayerContext="MediaPlayerContext",a.NavigationContext="NavigationContext",a.OverlayContext="OverlayContext",a.PressableContext="PressableContext",a.RootLocationContext="RootLocationContext",a))(C||{}),A=new Set([...Object.keys(C),...Object.keys(k)]);var Z=t=>({__instance_id:i(),__global_context:!0,_type:"ApplicationContext",id:t.id}),tt=t=>({__instance_id:i(),__location_context:!0,_type:"ContentContext",id:t.id}),et=t=>({__instance_id:i(),__global_context:!0,_type:"CookieIdContext",id:t.id,cookie_id:t.cookie_id}),ot=t=>({__instance_id:i(),__location_context:!0,_type:"ExpandableContext",id:t.id}),rt=t=>({__instance_id:i(),__global_context:!0,_type:"HttpContext",id:t.id,referrer:t.referrer,user_agent:t.user_agent,remote_address:t.remote_address??null}),nt=t=>({__instance_id:i(),__global_context:!0,_type:"IdentityContext",id:t.id,value:t.value}),at=t=>({__instance_id:i(),__location_context:!0,_type:"InputContext",id:t.id}),it=t=>({__instance_id:i(),__global_context:!0,_type:"InputValueContext",id:t.id,value:t.value}),st=t=>({__instance_id:i(),__location_context:!0,__pressable_context:!0,_type:"LinkContext",id:t.id,href:t.href}),lt=t=>({__instance_id:i(),__global_context:!0,_type:"LocaleContext",id:t.id,language_code:t.language_code??null,country_code:t.country_code??null}),ct=t=>({__instance_id:i(),__global_context:!0,_type:"MarketingContext",id:t.id,source:t.source,medium:t.medium,campaign:t.campaign,term:t.term??null,content:t.content??null,source_platform:t.source_platform??null,creative_format:t.creative_format??null,marketing_tactic:t.marketing_tactic??null}),ut=t=>({__instance_id:i(),__location_context:!0,_type:"MediaPlayerContext",id:t.id}),Tt=t=>({__instance_id:i(),__location_context:!0,_type:"NavigationContext",id:t.id}),mt=t=>({__instance_id:i(),__location_context:!0,_type:"OverlayContext",id:t.id}),bt=t=>({__instance_id:i(),__global_context:!0,_type:"PathContext",id:t.id}),dt=t=>({__instance_id:i(),__location_context:!0,__pressable_context:!0,_type:"PressableContext",id:t.id}),vt=t=>({__instance_id:i(),__location_context:!0,_type:"RootLocationContext",id:t.id}),ht=t=>({__instance_id:i(),__global_context:!0,_type:"SessionContext",id:t.id,hit_number:t.hit_number});var gt=t=>({__non_interactive_event:!0,_type:"ApplicationLoadedEvent",location_stack:(t==null?void 0:t.location_stack)??[],global_contexts:(t==null?void 0:t.global_contexts)??[]}),pt=t=>({__non_interactive_event:!0,_type:"FailureEvent",location_stack:t.location_stack??[],global_contexts:t.global_contexts??[],message:t.message}),xt=t=>({__non_interactive_event:!0,_type:"HiddenEvent",location_stack:(t==null?void 0:t.location_stack)??[],global_contexts:(t==null?void 0:t.global_contexts)??[]}),_t=t=>({__interactive_event:!0,_type:"InputChangeEvent",location_stack:(t==null?void 0:t.location_stack)??[],global_contexts:(t==null?void 0:t.global_contexts)??[]}),kt=t=>({__interactive_event:!0,_type:"InteractiveEvent",location_stack:(t==null?void 0:t.location_stack)??[],global_contexts:(t==null?void 0:t.global_contexts)??[]}),Ct=t=>({__non_interactive_event:!0,__media_event:!0,_type:"MediaEvent",location_stack:(t==null?void 0:t.location_stack)??[],global_contexts:(t==null?void 0:t.global_contexts)??[]}),yt=t=>({__non_interactive_event:!0,__media_event:!0,_type:"MediaLoadEvent",location_stack:(t==null?void 0:t.location_stack)??[],global_contexts:(t==null?void 0:t.global_contexts)??[]}),ft=t=>({__non_interactive_event:!0,__media_event:!0,_type:"MediaPauseEvent",location_stack:(t==null?void 0:t.location_stack)??[],global_contexts:(t==null?void 0:t.global_contexts)??[]}),Et=t=>({__non_interactive_event:!0,__media_event:!0,_type:"MediaStartEvent",location_stack:(t==null?void 0:t.location_stack)??[],global_contexts:(t==null?void 0:t.global_contexts)??[]}),jt=t=>({__non_interactive_event:!0,__media_event:!0,_type:"MediaStopEvent",location_stack:(t==null?void 0:t.location_stack)??[],global_contexts:(t==null?void 0:t.global_contexts)??[]}),It=t=>({__non_interactive_event:!0,_type:"NonInteractiveEvent",location_stack:(t==null?void 0:t.location_stack)??[],global_contexts:(t==null?void 0:t.global_contexts)??[]}),At=t=>({__interactive_event:!0,_type:"PressEvent",location_stack:(t==null?void 0:t.location_stack)??[],global_contexts:(t==null?void 0:t.global_contexts)??[]}),Mt=t=>({__non_interactive_event:!0,_type:"SuccessEvent",location_stack:t.location_stack??[],global_contexts:t.global_contexts??[],message:t.message}),Pt=t=>({__non_interactive_event:!0,_type:"VisibleEvent",location_stack:(t==null?void 0:t.location_stack)??[],global_contexts:(t==null?void 0:t.global_contexts)??[]});var w=(c=>(c.ApplicationLoadedEvent="ApplicationLoadedEvent",c.FailureEvent="FailureEvent",c.HiddenEvent="HiddenEvent",c.InputChangeEvent="InputChangeEvent",c.InteractiveEvent="InteractiveEvent",c.MediaEvent="MediaEvent",c.MediaLoadEvent="MediaLoadEvent",c.MediaPauseEvent="MediaPauseEvent",c.MediaStartEvent="MediaStartEvent",c.MediaStopEvent="MediaStopEvent",c.NonInteractiveEvent="NonInteractiveEvent",c.PressEvent="PressEvent",c.SuccessEvent="SuccessEvent",c.VisibleEvent="VisibleEvent",c))(w||{});var Nt="__",v=t=>{let e=Object.assign({},t);return b(e).forEach(o=>{o.toString().startsWith(Nt)&&delete e[o]}),e};var F=(o=>(o.GLOBAL_CONTEXT_MISSING="GLOBAL_CONTEXT_MISSING",o.GLOBAL_CONTEXT_DUPLICATED="GLOBAL_CONTEXT_DUPLICATED",o))(F||{}),D=(r=>(r.LOCATION_CONTEXT_MISSING="LOCATION_CONTEXT_MISSING",r.LOCATION_CONTEXT_DUPLICATED="LOCATION_CONTEXT_DUPLICATED",r.LOCATION_CONTEXT_WRONG_POSITION="LOCATION_CONTEXT_WRONG_POSITION",r))(D||{});var y=t=>typeof t!="object"||t===null||t===void 0||!t._type||!t.id?!1:A.has(t._type);var Rt=(t,e)=>{if(!y(t)||!y(e))return!1;let o=b(t),r=o.length;if(r!==b(e).length)return!1;for(let n=0;n<r;n++)if(!e.hasOwnProperty(o[n]))return!1;for(let n=0;n<r;n++){let s=o[n];if(t[s]!==e[s])return!1}return!0};var h=class{constructor({_type:e,id:o,time:r,...n},...s){this._type=e,this.id=o,this.time=r,Object.assign(this,n);let l=[],u=[];s.forEach(({location_stack:T,global_contexts:a})=>{l=[...l,...T??[]],u=[...u,...a??[]]}),this.location_stack=[...l,...n.location_stack??[]],this.global_contexts=[...n.global_contexts??[],...u]}toJSON(){return{...v(this),location_stack:this.location_stack.map(v),global_contexts:this.global_contexts.map(v)}}};var M=(s=>(s.ANGULAR="ANGULAR",s.CORE="CORE",s.BROWSER="BROWSER",s.REACT="REACT",s.REACT_NATIVE="REACT_NATIVE",s))(M||{});var d=class{constructor(e){this.plugins=[];this.plugins=e}initialize(e){this.plugins.forEach(o=>o.isUsable()&&o.initialize&&o.initialize(e))}enrich(e){this.plugins.forEach(o=>o.isUsable()&&o.enrich&&o.enrich(e))}validate(e){this.plugins.forEach(o=>o.isUsable()&&o.validate&&o.validate(e))}};var g=class{constructor(e){this.transportName="TrackerTransportGroup";this.usableTransports=e.transports.filter(o=>o.isUsable()),globalThis.objectiv.devTools&&(globalThis.objectiv.devTools.TrackerConsole.groupCollapsed(`\uFF62objectiv:${this.transportName}\uFF63 Initialized`),globalThis.objectiv.devTools.TrackerConsole.log(`Transports: ${e.transports.map(o=>o.transportName).join(", ")}`),globalThis.objectiv.devTools.TrackerConsole.log(`Usable Transports: ${this.usableTransports.map(o=>o.transportName).join(", ")}`),globalThis.objectiv.devTools.TrackerConsole.groupEnd())}async handle(...e){return this.usableTransports.length?this.usableTransports.map(o=>o.handle(...e)):Promise.reject(`${this.transportName}: no usable Transports found; make sure to verify usability first.`)}initialize(e){this.usableTransports.map(o=>o.initialize&&o.initialize(e))}isUsable(){return Boolean(this.usableTransports.length)}};var U=()=>{let t=[];return globalThis.objectiv.devTools&&t.push(globalThis.objectiv.devTools.OpenTaxonomyValidationPlugin),t},P=class{constructor(e,...o){this.anonymous=!1;var s,l,u,T;this.platform=e.platform??"CORE",this.applicationId=e.applicationId,this.trackerId=e.trackerId??e.applicationId,this.queue=e.queue,this.transport=e.transport,this._endpoint=e.endpoint,this.plugins=U(),this.generateGUID=e.generateGUID??i,this.active=e.active??!0,this.anonymous=e.anonymous??!1;let r=e.location_stack??[],n=e.global_contexts??[];o.forEach(({location_stack:a,global_contexts:_})=>{r=[...r,...a??[]],n=[...n,..._??[]]}),this.location_stack=r,this.global_contexts=n,(s=e.plugins)==null||s.forEach(a=>{var O;let _=this.plugins.findIndex(z=>z.pluginName===a.pluginName);_>=0&&(this.plugins.splice(_,1),(O=globalThis.objectiv.devTools)==null||O.TrackerConsole.log(`%c\uFF62objectiv:Tracker:${this.trackerId}\uFF63 Plugin ${a.pluginName} replaced by a new instance.`,"font-weight:bold;color:orange;")),this.plugins.push(a)}),(l=globalThis.objectiv.devTools)!=null&&l.EventRecorder.enabled&&(this.transport=this.transport?new g({transports:[globalThis.objectiv.devTools.EventRecorder,this.transport]}):globalThis.objectiv.devTools.EventRecorder),this.initialize(),globalThis.objectiv.TrackerRepository.add(this),globalThis.objectiv.devTools&&(globalThis.objectiv.devTools.TrackerConsole.groupCollapsed(`\uFF62objectiv:Tracker:${this.trackerId}\uFF63 Initialized (${globalThis.objectiv.devTools.getLocationPath(this.location_stack)})`),globalThis.objectiv.devTools.TrackerConsole.log(`Application ID: ${this.applicationId}`),globalThis.objectiv.devTools.TrackerConsole.log(`Active: ${this.active?"true":"false"}`),globalThis.objectiv.devTools.TrackerConsole.log(`Anonymous: ${this.anonymous?"true":"false"}`),globalThis.objectiv.devTools.TrackerConsole.log(`Queue: ${((u=this.queue)==null?void 0:u.queueName)??"none"}`),globalThis.objectiv.devTools.TrackerConsole.log(`Transport: ${((T=this.transport)==null?void 0:T.transportName)??"none"}`),globalThis.objectiv.devTools.TrackerConsole.log(`Endpoint: ${this.endpoint??"none"}`),globalThis.objectiv.devTools.TrackerConsole.group("Plugins:"),globalThis.objectiv.devTools.TrackerConsole.log(this.plugins.map(a=>a.pluginName).join(", ")),globalThis.objectiv.devTools.TrackerConsole.groupEnd(),globalThis.objectiv.devTools.TrackerConsole.group("Location Stack:"),globalThis.objectiv.devTools.TrackerConsole.log(this.location_stack),globalThis.objectiv.devTools.TrackerConsole.groupEnd(),globalThis.objectiv.devTools.TrackerConsole.group("Global Contexts:"),globalThis.objectiv.devTools.TrackerConsole.log(this.global_contexts),globalThis.objectiv.devTools.TrackerConsole.groupEnd(),globalThis.objectiv.devTools.TrackerConsole.groupEnd())}get endpoint(){return!this._endpoint||!this.anonymous?this._endpoint:`${this._endpoint.replace(/\/+$/,"")}/anonymous`}initialize(){var e;if(!!this.active&&(new d(this.plugins).initialize(this),this.transport&&this.transport.initialize&&this.transport.initialize(this),this.queue&&this.transport&&this.transport.isUsable())){let o=this.transport.handle.bind(this.transport);this.queue.setProcessFunction(o),(e=globalThis.objectiv.devTools)==null||e.TrackerConsole.log(`%c\uFF62objectiv:Tracker:${this.trackerId}\uFF63 ${this.queue.queueName} is ready to run ${this.transport.transportName}`,"font-weight:bold")}}setActive(e){var o;e!==this.active&&(this.active=e,this.initialize(),(o=globalThis.objectiv.devTools)==null||o.TrackerConsole.log(`%c\uFF62objectiv:Tracker:${this.trackerId}\uFF63 Active: ${this.active?"true":"false"}`,"font-weight: bold"))}setAnonymous(e){var o;e!==this.anonymous&&(this.anonymous=e,this.initialize(),(o=globalThis.objectiv.devTools)==null||o.TrackerConsole.log(`%c\uFF62objectiv:Tracker:${this.trackerId}\uFF63 Anonymous: ${this.anonymous?"true":"false"}`,"font-weight: bold"))}flushQueue(){this.queue&&this.queue.flush()}async waitForQueue(e){if(this.queue){let o=(e==null?void 0:e.intervalMs)??100,r=(e==null?void 0:e.timeoutMs)??this.queue.batchDelayMs*2,n=this.queue.isIdle.bind(this.queue);return j({predicate:n,intervalMs:o,timeoutMs:r})}return!0}async trackEvent(e,o){let r=new h({...e,id:this.generateGUID(),time:Date.now()},this);if(!this.active)return r;let n=new d(this.plugins);if(n.enrich(r),n.validate(r),this.transport&&this.transport.isUsable()&&(globalThis.objectiv.devTools&&(globalThis.objectiv.devTools.TrackerConsole.groupCollapsed(`\uFF62objectiv:Tracker:${this.trackerId}\uFF63 ${this.queue?"Queuing":"Tracking"} ${r._type} (${globalThis.objectiv.devTools.getLocationPath(r.location_stack)})`),globalThis.objectiv.devTools.TrackerConsole.log(`Event ID: ${r.id}`),globalThis.objectiv.devTools.TrackerConsole.log(`Time: ${r.time}`),globalThis.objectiv.devTools.TrackerConsole.group("Location Stack:"),globalThis.objectiv.devTools.TrackerConsole.log(r.location_stack),globalThis.objectiv.devTools.TrackerConsole.groupEnd(),globalThis.objectiv.devTools.TrackerConsole.group("Global Contexts:"),globalThis.objectiv.devTools.TrackerConsole.log(r.global_contexts),globalThis.objectiv.devTools.TrackerConsole.groupEnd(),globalThis.objectiv.devTools.TrackerConsole.groupEnd()),this.queue?await this.queue.push(r):await this.transport.handle(r)),o){let{waitForQueue:s,flushQueue:l}=o,u=!0;s&&(u=await this.waitForQueue(s===!0?{}:s)),(l===!0||l==="onTimeout"&&!u)&&this.flushQueue()}return r}};var p=class{constructor(){this.queueStoreName="TrackerQueueMemoryStore";this.events=[];var e;(e=globalThis.objectiv.devTools)==null||e.TrackerConsole.log(`%c\uFF62objectiv:${this.queueStoreName}\uFF63 Initialized`,"font-weight: bold")}async read(e,o){let r=this.events;return o&&(r=r.filter(o)),r.slice(0,e)}async write(...e){this.events.push(...e)}async delete(e){this.events=this.events.filter(o=>!e.includes(o.id))}async clear(){this.events=[]}get length(){return this.events.length}};var N=class{constructor(e){this.queueName="TrackerQueue";this.processingEventIds=[];this.lastRunTimestamp=0;this.running=!1;this.firstBatchSuccessfullySent=!1;this.store=(e==null?void 0:e.store)??new p,this.batchSize=(e==null?void 0:e.batchSize)??10,this.batchDelayMs=(e==null?void 0:e.batchDelayMs)??1e3,this.concurrency=(e==null?void 0:e.concurrency)??4,globalThis.objectiv.devTools&&(globalThis.objectiv.devTools.TrackerConsole.groupCollapsed(`\uFF62objectiv:${this.queueName}\uFF63 Initialized`),globalThis.objectiv.devTools.TrackerConsole.log(`Store: ${this.store.queueStoreName}`),globalThis.objectiv.devTools.TrackerConsole.log(`Batch Size: ${this.batchSize}`),globalThis.objectiv.devTools.TrackerConsole.log(`Batch Delay (ms): ${this.batchDelayMs}`),globalThis.objectiv.devTools.TrackerConsole.log(`Concurrency: ${this.concurrency}`),globalThis.objectiv.devTools.TrackerConsole.groupEnd())}setProcessFunction(e){this.processFunction=e}async push(...e){return await this.store.write(...e),this.run()}async readBatch(){let e=await this.store.read(this.batchSize,o=>!this.processingEventIds.includes(o.id));return this.processingEventIds.push(...e.map(o=>o.id)),e}async run(){if(!this.processFunction)return Promise.reject("TrackerQueue `processFunction` has not been set.");if(this.running||this.isIdle())return!1;this.running=!0;let e=Date.now()-this.lastRunTimestamp;e<this.batchDelayMs&&await new Promise(r=>setTimeout(r,this.batchDelayMs-e));let o=[];for(let r=0;r<this.getConcurrency();r++){let n=await this.readBatch();if(!E(n))break;globalThis.objectiv.devTools&&(globalThis.objectiv.devTools.TrackerConsole.groupCollapsed(`\uFF62objectiv:${this.queueName}\uFF63 Batch read`),globalThis.objectiv.devTools.TrackerConsole.log("Events:"),globalThis.objectiv.devTools.TrackerConsole.log(n),globalThis.objectiv.devTools.TrackerConsole.groupEnd());let s=n.map(l=>l.id);o.push(this.processFunction(...n).then(()=>{this.store.delete(s),this.firstBatchSuccessfullySent=!0}).finally(()=>{this.processingEventIds=this.processingEventIds.filter(l=>!s.includes(l))}))}return await Promise.all(o),this.running=!1,this.lastRunTimestamp=Date.now(),this.run()}async flush(){return this.store.clear()}isIdle(){return this.store.length===0&&this.processingEventIds.length===0}getConcurrency(){return this.firstBatchSuccessfullySent?this.concurrency:1}};globalThis.objectiv={...globalThis.objectiv,TrackerRepository:new class{constructor(){this.trackersMap=new Map}add(t){var e;this.trackersMap.has(t.trackerId)?(e=globalThis.objectiv.devTools)==null||e.TrackerConsole.log(`\uFF62objectiv:TrackerRepository\uFF63 Tracker \`${t.trackerId}\` already exists. Reusing existing instance.`):this.trackersMap.set(t.trackerId,t),this.defaultTracker||(this.defaultTracker=t)}delete(t){var e;if(this.defaultTracker&&this.defaultTracker.trackerId===t){if(this.trackersMap.size>1){(e=globalThis.objectiv.devTools)==null||e.TrackerConsole.error(`\uFF62objectiv:TrackerRepository\uFF63 \`${t}\` is the default Tracker. Please set another as default before deleting it.`);return}this.defaultTracker=void 0}this.trackersMap.delete(t)}get(t){var e,o;if(this.trackersMap.size===0){(e=globalThis.objectiv.devTools)==null||e.TrackerConsole.error("\uFF62objectiv:TrackerRepository\uFF63 There are no Trackers.");return}if(t){if(!this.trackersMap.get(t)){(o=globalThis.objectiv.devTools)==null||o.TrackerConsole.error(`\uFF62objectiv:TrackerRepository\uFF63 Tracker \`${t}\` not found.`);return}return this.trackersMap.get(t)}return this.defaultTracker}setDefault(t){var e;if(!this.trackersMap.has(t)){(e=globalThis.objectiv.devTools)==null||e.TrackerConsole.error(`\uFF62objectiv:TrackerRepository\uFF63 Tracker \`${t}\` not found.`);return}this.defaultTracker=this.trackersMap.get(t)}activateAll(){this.trackersMap.forEach(t=>t.setActive(!0))}deactivateAll(){this.trackersMap.forEach(t=>t.setActive(!1))}flushAllQueues(){this.trackersMap.forEach(t=>t.flushQueue())}async waitForAllQueues(t){return await Promise.all(Array.from(this.trackersMap.values()).map(e=>e.waitForQueue(t))),!0}}};var G="TransportSendError",Lt=()=>{let t=new Error;return t.name=G,t},R=t=>t.name===G;var x=class{constructor(e,o){this.transport=e.transport,this.maxAttempts=e.maxAttempts,this.maxRetryMs=e.maxRetryMs,this.minTimeoutMs=e.minTimeoutMs,this.maxTimeoutMs=e.maxTimeoutMs,this.retryFactor=e.retryFactor,this.events=o,this.errors=[],this.attemptCount=1,this.startTime=Date.now(),globalThis.objectiv.devTools&&(globalThis.objectiv.devTools.TrackerConsole.groupCollapsed("\uFF62objectiv:TrackerTransportRetryAttempt\uFF63 Created"),globalThis.objectiv.devTools.TrackerConsole.log(`Transport: ${this.transport.transportName}`),globalThis.objectiv.devTools.TrackerConsole.log(`Max Attempts: ${this.maxAttempts}`),globalThis.objectiv.devTools.TrackerConsole.log(`Max Retry (ms): ${this.maxRetryMs}`),globalThis.objectiv.devTools.TrackerConsole.log(`Min Timeout (ms): ${this.minTimeoutMs}`),globalThis.objectiv.devTools.TrackerConsole.log(`Max Timeout (ms): ${this.maxTimeoutMs}`),globalThis.objectiv.devTools.TrackerConsole.log(`Retry Factor: ${this.retryFactor}`),globalThis.objectiv.devTools.TrackerConsole.group("Events:"),globalThis.objectiv.devTools.TrackerConsole.log(this.events),globalThis.objectiv.devTools.TrackerConsole.groupEnd(),globalThis.objectiv.devTools.TrackerConsole.groupEnd())}calculateNextTimeoutMs(e){return Math.min(Math.round(this.minTimeoutMs*Math.pow(this.retryFactor,e)),this.maxTimeoutMs)}async run(){return this.attemptCount>this.maxAttempts?(this.errors.unshift(new Error("maxAttempts reached")),Promise.reject(this.errors)):Date.now()-this.startTime>=this.maxRetryMs?(this.errors.unshift(new Error("maxRetryMs reached")),Promise.reject(this.errors)):(globalThis.objectiv.devTools&&(globalThis.objectiv.devTools.TrackerConsole.groupCollapsed("\uFF62objectiv:TrackerTransportRetryAttempt\uFF63 Running"),globalThis.objectiv.devTools.TrackerConsole.log(`Attempt Count: ${this.attemptCount}`),globalThis.objectiv.devTools.TrackerConsole.log("Events:"),globalThis.objectiv.devTools.TrackerConsole.log(this.events),globalThis.objectiv.devTools.TrackerConsole.groupEnd()),this.transport.handle(...this.events).then(e=>(globalThis.objectiv.devTools&&(globalThis.objectiv.devTools.TrackerConsole.groupCollapsed("\uFF62objectiv:TrackerTransportRetryAttempt\uFF63 Succeeded"),globalThis.objectiv.devTools.TrackerConsole.log("Response:"),globalThis.objectiv.devTools.TrackerConsole.log(e),globalThis.objectiv.devTools.TrackerConsole.groupEnd()),e)).catch(e=>(globalThis.objectiv.devTools&&(globalThis.objectiv.devTools.TrackerConsole.groupCollapsed("%c\uFF62objectiv:TrackerTransportRetryAttempt\uFF63 Failed","color:red"),globalThis.objectiv.devTools.TrackerConsole.log("Error:"),globalThis.objectiv.devTools.TrackerConsole.log(e),globalThis.objectiv.devTools.TrackerConsole.log("Events:"),globalThis.objectiv.devTools.TrackerConsole.log(this.events),globalThis.objectiv.devTools.TrackerConsole.groupEnd()),R(e)?this.retry(e):Promise.reject(e))))}async retry(e){this.errors.unshift(e);let o=this.calculateNextTimeoutMs(this.attemptCount);return await new Promise(r=>setTimeout(r,o)),this.attemptCount++,globalThis.objectiv.devTools&&(globalThis.objectiv.devTools.TrackerConsole.groupCollapsed("%c\uFF62objectiv:TrackerTransportRetryAttempt\uFF63 Retrying","color:orange"),globalThis.objectiv.devTools.TrackerConsole.log(`Attempt Count: ${this.attemptCount}`),globalThis.objectiv.devTools.TrackerConsole.log(`Waited: ${o}`),globalThis.objectiv.devTools.TrackerConsole.log("Error:"),globalThis.objectiv.devTools.TrackerConsole.log(e),globalThis.objectiv.devTools.TrackerConsole.log("Events:"),globalThis.objectiv.devTools.TrackerConsole.log(this.events),globalThis.objectiv.devTools.TrackerConsole.groupEnd()),this.run()}};var L=class{constructor(e){this.transportName="TrackerTransportRetry";this.attempts=[];if(this.transport=e.transport,this.maxAttempts=e.maxAttempts??10,this.maxRetryMs=e.maxRetryMs??1/0,this.minTimeoutMs=e.minTimeoutMs??1e3,this.maxTimeoutMs=e.maxTimeoutMs??1/0,this.retryFactor=e.retryFactor??2,this.minTimeoutMs<=0)throw new Error("minTimeoutMs must be at least 1");if(this.minTimeoutMs>this.maxTimeoutMs)throw new Error("minTimeoutMs cannot be bigger than maxTimeoutMs");globalThis.objectiv.devTools&&(globalThis.objectiv.devTools.TrackerConsole.groupCollapsed(`\uFF62objectiv:${this.transportName}\uFF63 Initialized`),globalThis.objectiv.devTools.TrackerConsole.log(`Transport: ${this.transport.transportName}`),globalThis.objectiv.devTools.TrackerConsole.log(`Max Attempts: ${this.maxAttempts}`),globalThis.objectiv.devTools.TrackerConsole.log(`Max Retry (ms): ${this.maxRetryMs}`),globalThis.objectiv.devTools.TrackerConsole.log(`Min Timeout (ms): ${this.minTimeoutMs}`),globalThis.objectiv.devTools.TrackerConsole.log(`Max Timeout (ms): ${this.maxTimeoutMs}`),globalThis.objectiv.devTools.TrackerConsole.log(`Retry Factor: ${this.retryFactor}`),globalThis.objectiv.devTools.TrackerConsole.groupEnd())}initialize(e){this.transport.initialize&&this.transport.initialize(e)}async handle(...e){let o=new x(this,e),r=this.attempts.push(o);return o.run().finally(()=>{this.attempts.splice(r-1,1)})}isUsable(){return this.transport.isUsable()}};var S=class{constructor(e){this.transportName="TrackerTransportSwitch";var o;this.firstUsableTransport=e.transports.find(r=>r.isUsable()),globalThis.objectiv.devTools&&(globalThis.objectiv.devTools.TrackerConsole.groupCollapsed(`\uFF62objectiv:${this.transportName}\uFF63 Initialized`),globalThis.objectiv.devTools.TrackerConsole.log(`Transports: ${e.transports.map(r=>r.transportName).join(", ")}`),globalThis.objectiv.devTools.TrackerConsole.log(`First usable Transport: ${((o=this.firstUsableTransport)==null?void 0:o.transportName)??"none"}`),globalThis.objectiv.devTools.TrackerConsole.groupEnd())}async handle(...e){return this.firstUsableTransport?this.firstUsableTransport.handle(...e):Promise.reject(`${this.transportName}: no usable Transport found; make sure to verify usability first.`)}initialize(e){this.firstUsableTransport&&this.firstUsableTransport.initialize&&this.firstUsableTransport.initialize(e)}isUsable(){return Boolean(this.firstUsableTransport)}};globalThis.objectiv=globalThis.objectiv??{};globalThis.objectiv.versions=globalThis.objectiv.versions??new Map;globalThis.objectiv.versions.set(I.name,I.version);globalThis.objectiv.clientSessionId=i();0&&(module.exports={ContextNames,EventName,GlobalContextErrorType,GlobalContextName,LocationContextErrorType,LocationContextName,Tracker,TrackerEvent,TrackerPlatform,TrackerPlugins,TrackerQueue,TrackerQueueMemoryStore,TrackerTransportGroup,TrackerTransportRetry,TrackerTransportRetryAttempt,TrackerTransportSwitch,cleanObjectFromInternalProperties,generateGUID,getObjectKeys,isAbstractContext,isBrowser,isContextEqual,isDevMode,isNonEmptyArray,isTestMode,isTransportSendError,makeApplicationContext,makeApplicationLoadedEvent,makeContentContext,makeCookieIdContext,makeCoreTrackerDefaultPluginsList,makeExpandableContext,makeFailureEvent,makeHiddenEvent,makeHttpContext,makeId,makeIdentityContext,makeInputChangeEvent,makeInputContext,makeInputValueContext,makeInteractiveEvent,makeLinkContext,makeLocaleContext,makeMarketingContext,makeMediaEvent,makeMediaLoadEvent,makeMediaPauseEvent,makeMediaPlayerContext,makeMediaStartEvent,makeMediaStopEvent,makeNavigationContext,makeNonInteractiveEvent,makeOverlayContext,makePathContext,makePressEvent,makePressableContext,makeRootLocationContext,makeSessionContext,makeSuccessEvent,makeTransportSendError,makeVisibleEvent,uuidv4,waitForPromise});
//# sourceMappingURL=index.js.map