@objectiv/tracker-core
Version:
Core functionality for Objectiv JavaScript trackers
2 lines • 28.7 kB
JavaScript
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 j(t){return t.length>0}var s=()=>m(),I=async({predicate:t,intervalMs:e,timeoutMs:o})=>{if(t())return!0;let r,n,i=T=>{t()?T(!0):(clearTimeout(n),n=setTimeout(()=>i(T),e))},l=new Promise(i),u=new Promise(T=>r=setTimeout(()=>T(!1),o));return Promise.race([u,l]).finally(()=>{clearTimeout(n),clearTimeout(r)})},B=(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},w=()=>{var t;return((t=process.env.NODE_ENV)==null?void 0:t.startsWith("test"))??!1},H=()=>{var t;return(((t=process.env.NODE_ENV)==null?void 0:t.startsWith("dev"))??!1)||w()},W=()=>typeof window<"u";var k={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 C=(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))(C||{}),y=(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))(y||{}),A=new Set([...Object.keys(y),...Object.keys(C)]);var tt=t=>({__instance_id:s(),__global_context:!0,_type:"ApplicationContext",id:t.id}),et=t=>({__instance_id:s(),__location_context:!0,_type:"ContentContext",id:t.id}),ot=t=>({__instance_id:s(),__global_context:!0,_type:"CookieIdContext",id:t.id,cookie_id:t.cookie_id}),rt=t=>({__instance_id:s(),__location_context:!0,_type:"ExpandableContext",id:t.id}),nt=t=>({__instance_id:s(),__global_context:!0,_type:"HttpContext",id:t.id,referrer:t.referrer,user_agent:t.user_agent,remote_address:t.remote_address??null}),at=t=>({__instance_id:s(),__global_context:!0,_type:"IdentityContext",id:t.id,value:t.value}),it=t=>({__instance_id:s(),__location_context:!0,_type:"InputContext",id:t.id}),st=t=>({__instance_id:s(),__global_context:!0,_type:"InputValueContext",id:t.id,value:t.value}),lt=t=>({__instance_id:s(),__location_context:!0,__pressable_context:!0,_type:"LinkContext",id:t.id,href:t.href}),ct=t=>({__instance_id:s(),__global_context:!0,_type:"LocaleContext",id:t.id,language_code:t.language_code??null,country_code:t.country_code??null}),ut=t=>({__instance_id:s(),__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}),Tt=t=>({__instance_id:s(),__location_context:!0,_type:"MediaPlayerContext",id:t.id}),mt=t=>({__instance_id:s(),__location_context:!0,_type:"NavigationContext",id:t.id}),bt=t=>({__instance_id:s(),__location_context:!0,_type:"OverlayContext",id:t.id}),dt=t=>({__instance_id:s(),__global_context:!0,_type:"PathContext",id:t.id}),vt=t=>({__instance_id:s(),__location_context:!0,__pressable_context:!0,_type:"PressableContext",id:t.id}),ht=t=>({__instance_id:s(),__location_context:!0,_type:"RootLocationContext",id:t.id}),gt=t=>({__instance_id:s(),__global_context:!0,_type:"SessionContext",id:t.id,hit_number:t.hit_number});var xt=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)??[]}),_t=t=>({__non_interactive_event:!0,_type:"FailureEvent",location_stack:t.location_stack??[],global_contexts:t.global_contexts??[],message:t.message}),kt=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)??[]}),Ct=t=>({__interactive_event:!0,_type:"InputChangeEvent",location_stack:(t==null?void 0:t.location_stack)??[],global_contexts:(t==null?void 0:t.global_contexts)??[]}),yt=t=>({__interactive_event:!0,_type:"InteractiveEvent",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:"MediaEvent",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:"MediaLoadEvent",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:"MediaPauseEvent",location_stack:(t==null?void 0:t.location_stack)??[],global_contexts:(t==null?void 0:t.global_contexts)??[]}),It=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)??[]}),At=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)??[]}),Mt=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)??[]}),Pt=t=>({__interactive_event:!0,_type:"PressEvent",location_stack:(t==null?void 0:t.location_stack)??[],global_contexts:(t==null?void 0:t.global_contexts)??[]}),Nt=t=>({__non_interactive_event:!0,_type:"SuccessEvent",location_stack:t.location_stack??[],global_contexts:t.global_contexts??[],message:t.message}),Rt=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 D=(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))(D||{});var U="__",h=t=>{let e=Object.assign({},t);return b(e).forEach(o=>{o.toString().startsWith(U)&&delete e[o]}),e};var G=(o=>(o.GLOBAL_CONTEXT_MISSING="GLOBAL_CONTEXT_MISSING",o.GLOBAL_CONTEXT_DUPLICATED="GLOBAL_CONTEXT_DUPLICATED",o))(G||{}),z=(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))(z||{});var f=t=>typeof t!="object"||t===null||t===void 0||!t._type||!t.id?!1:A.has(t._type);var zt=(t,e)=>{if(!f(t)||!f(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 i=o[n];if(t[i]!==e[i])return!1}return!0};var g=class{constructor({_type:e,id:o,time:r,...n},...i){this._type=e,this.id=o,this.time=r,Object.assign(this,n);let l=[],u=[];i.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{...h(this),location_stack:this.location_stack.map(h),global_contexts:this.global_contexts.map(h)}}};var M=(i=>(i.ANGULAR="ANGULAR",i.CORE="CORE",i.BROWSER="BROWSER",i.REACT="REACT",i.REACT_NATIVE="REACT_NATIVE",i))(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 p=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 Q=()=>{let t=[];return globalThis.objectiv.devTools&&t.push(globalThis.objectiv.devTools.OpenTaxonomyValidationPlugin),t},P=class{constructor(e,...o){this.anonymous=!1;var i,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=Q(),this.generateGUID=e.generateGUID??s,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:v})=>{r=[...r,...a??[]],n=[...n,...v??[]]}),this.location_stack=r,this.global_contexts=n,(i=e.plugins)==null||i.forEach(a=>{var E;let v=this.plugins.findIndex($=>$.pluginName===a.pluginName);v>=0&&(this.plugins.splice(v,1),(E=globalThis.objectiv.devTools)==null||E.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 p({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 I({predicate:n,intervalMs:o,timeoutMs:r})}return!0}async trackEvent(e,o){let r=new g({...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:i,flushQueue:l}=o,u=!0;i&&(u=await this.waitForQueue(i===!0?{}:i)),(l===!0||l==="onTimeout"&&!u)&&this.flushQueue()}return r}};var x=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 x,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(!j(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 i=n.map(l=>l.id);o.push(this.processFunction(...n).then(()=>{this.store.delete(i),this.firstBatchSuccessfullySent=!0}).finally(()=>{this.processingEventIds=this.processingEventIds.filter(l=>!i.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 R="TransportSendError",le=()=>{let t=new Error;return t.name=R,t},L=t=>t.name===R;var _=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()),L(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 S=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 _(this,e),r=this.attempts.push(o);return o.run().finally(()=>{this.attempts.splice(r-1,1)})}isUsable(){return this.transport.isUsable()}};var O=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(k.name,k.version);globalThis.objectiv.clientSessionId=s();export{A as ContextNames,D as EventName,G as GlobalContextErrorType,C as GlobalContextName,z as LocationContextErrorType,y as LocationContextName,P as Tracker,g as TrackerEvent,M as TrackerPlatform,d as TrackerPlugins,N as TrackerQueue,x as TrackerQueueMemoryStore,p as TrackerTransportGroup,S as TrackerTransportRetry,_ as TrackerTransportRetryAttempt,O as TrackerTransportSwitch,h as cleanObjectFromInternalProperties,s as generateGUID,b as getObjectKeys,f as isAbstractContext,W as isBrowser,zt as isContextEqual,H as isDevMode,j as isNonEmptyArray,w as isTestMode,L as isTransportSendError,tt as makeApplicationContext,xt as makeApplicationLoadedEvent,et as makeContentContext,ot as makeCookieIdContext,Q as makeCoreTrackerDefaultPluginsList,rt as makeExpandableContext,_t as makeFailureEvent,kt as makeHiddenEvent,nt as makeHttpContext,B as makeId,at as makeIdentityContext,Ct as makeInputChangeEvent,it as makeInputContext,st as makeInputValueContext,yt as makeInteractiveEvent,lt as makeLinkContext,ct as makeLocaleContext,ut as makeMarketingContext,ft as makeMediaEvent,Et as makeMediaLoadEvent,jt as makeMediaPauseEvent,Tt as makeMediaPlayerContext,It as makeMediaStartEvent,At as makeMediaStopEvent,mt as makeNavigationContext,Mt as makeNonInteractiveEvent,bt as makeOverlayContext,dt as makePathContext,Pt as makePressEvent,vt as makePressableContext,ht as makeRootLocationContext,gt as makeSessionContext,Nt as makeSuccessEvent,le as makeTransportSendError,Rt as makeVisibleEvent,m as uuidv4,I as waitForPromise};
//# sourceMappingURL=index.js.map