@deriv-com/analytics 1.39.2 → 1.39.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,3 @@
1
+ 'use strict';var chunkJ3V5QNIH_js=require('./chunk-J3V5QNIH.js');/* @deriv-com/analytics - NPM Package - Built with tsup */
2
+ var p=class{constructor(){this.interval=null;this.responses=[];this.isTrackingResponses=false;this.delegatedSelectors=new Set;this.debug=false;this.log=chunkJ3V5QNIH_js.g("[CacheManager]",()=>this.debug);this.addEventhandler=this.addEventHandler.bind(this);}setDebug(e){this.debug=e;}hash(e,n=32){let t=a=>{let r=2166136261;for(let c=0;c<a.length;c++)r^=a.charCodeAt(c),r=r*16777619>>>0;return r.toString(16)},i=a=>btoa(a),s=t(e),o=i(s);for(;o.length<n;)o+=i(t(o));return o.substring(0,n)}getCookies(e){let t=`; ${document.cookie}`.split(`; ${e}=`);if(t.length===2){let i=decodeURIComponent(t.pop().split(";").shift());try{return JSON.parse(i)}catch{return i}}return null}trackPageUnload(){typeof window>"u"||window.addEventListener("beforeunload",()=>{this.isPageViewSent()||this.push("cached_analytics_page_views",{name:window.location.origin+window.location.pathname});});}trackResponses(){if(typeof window>"u"||typeof XMLHttpRequest>"u")return;let e=XMLHttpRequest.prototype.open,n=XMLHttpRequest.prototype.send;XMLHttpRequest.prototype.open=function(t,i){return this._url=i,this._method=t,e.apply(this,arguments)},XMLHttpRequest.prototype.send=function(t){return this.addEventListener("load",function(){let i=null;if(typeof t=="string")try{i=JSON.parse(t);}catch{i=t;}let s={url:this._url,method:this._method,status:this.status,headers:this.getAllResponseHeaders(),data:this.responseText,payload:i};f.responses.push(s);}),n.apply(this,arguments)},this.isTrackingResponses=true;}getAnalyticsInstance(){return typeof window>"u"?null:window.AnalyticsInstance??window.DerivAnalytics?.Analytics??window.Analytics?.Analytics}isReady(){if(typeof window>"u")return false;let e=this.getAnalyticsInstance();return e?!!e.getInstances?.()?.tracking:false}parseCookies(e){if(typeof document>"u")return null;let n=document.cookie.split("; ");for(let t of n){let i=t.indexOf("=");if(i!==-1&&decodeURIComponent(t.slice(0,i))===e){let s=t.slice(i+1);try{return JSON.parse(decodeURIComponent(s))}catch{return decodeURIComponent(s)}}}return null}isPageViewSent(){return !!this.responses.find(e=>e.payload?.type==="page"&&e.payload?.anonymousId)}set(e){this.log("set | caching event to cookie",e),this.push("cached_analytics_events",e);}push(e,n){if(typeof document>"u")return;let t=[],i=this.parseCookies(e);i&&Array.isArray(i)&&(t=i),t.push(n);let s=this.getAllowedDomain(),o=365*24*60*60,a=`${e}=${encodeURIComponent(JSON.stringify(t))}; path=/; Domain=${s}; max-age=${o}; SameSite=Lax`;document.cookie=a;}getAllowedDomain(){if(typeof window>"u")return "";let e=window.location.hostname;if(e==="localhost"||/^\d+\.\d+\.\d+\.\d+$/.test(e))return e;let n=e.split(".");return n.length===1?e:`.${n.slice(-2).join(".")}`}processEvent(e){let n=this.getCookies("client_information");if(n){let{email:t=null}=n;t&&(e.properties.email_hash=this.hash(t));}if(e?.properties?.email){let t=e.properties.email;delete e.properties.email,e.properties.email_hash=this.hash(t);}return e}track(e,n=false){if(typeof window>"u")return;let t=this.processEvent(e),i=this.getAnalyticsInstance();this.isReady()&&!n?(this.log("track | analytics ready \u2014 calling trackEvent",{event:t.name,properties:t.properties}),i.trackEvent(t.name,t.properties)):(this.log("track | analytics not ready or cache=true \u2014 storing event",{event:t.name,cache:n}),this.set(t));}pageView(){typeof window>"u"||(this.log("pageView | starting page view polling"),this.isTrackingResponses||(this.trackResponses(),this.trackPageUnload()),this.interval=setInterval(()=>{let e=window.Analytics;typeof e<"u"&&typeof e.Analytics?.pageView=="function"&&this.isReady()&&(this.log("pageView | analytics ready \u2014 sending page view",{href:window.location.href}),e.Analytics.pageView(window.location.href,"Trader's hub")),this.isPageViewSent()&&(this.log("pageView | page view confirmed sent \u2014 clearing interval"),this.interval&&clearInterval(this.interval));},1e3));}listen(e,{name:n="",properties:t={}},i=false,s=null){let o=r=>{r.dataset?.clickEventTracking||(r.addEventListener("click",c=>{let l={name:n,properties:t,cache:i};if(typeof s=="function"){let d=s(c);l={...d,cache:d.cache??i};}this.track(l,l.cache??false);}),r.dataset.clickEventTracking="true");};(e instanceof NodeList?Array.from(e):[e]).forEach(o);}addEventHandler(e){return typeof window>"u"?this:(e.forEach(({element:n,event:t={name:"",properties:{}},cache:i=false,callback:s=null})=>{if(typeof n=="string"){let o=n;if(!this.delegatedSelectors.has(o)){let a=r=>{let c=r.target;if(!c)return;let l=c.closest(o);if(l&&!l.dataset?.clickEventTracking){let d={name:t.name,properties:t.properties,cache:i};if(typeof s=="function"){let h=s(r);d={...h,cache:h.cache??i};}l.dataset.clickEventTracking="true",this.track(d,d.cache??false);}};document.addEventListener("click",a),this.delegatedSelectors.add(o);}}else (n instanceof NodeList?Array.from(n):[n]).forEach(a=>{a&&!a.dataset?.clickEventTracking&&this.listen(a,t,i,s);});}),this)}loadEvent(e){return this.log("loadEvent | firing load events",e.map(n=>n.event.name)),e.forEach(({event:n})=>{let{name:t,properties:i}=n;this.track({name:t,properties:i});}),this}pageLoadEvent(e){if(typeof window>"u")return this;let n=window.location.pathname.slice(1);return this.log("pageLoadEvent | checking page load events",{pathname:n}),e.forEach(({pages:t=[],excludedPages:i=[],event:s,callback:o=null})=>{let a=false;if(t.length?t.includes(n)&&(a=true):i.length&&i.includes(n)||(a=true),a){let r=o?o():s;this.log("pageLoadEvent | dispatching event for page",{pathname:n,event:r.name}),this.loadEvent([{event:r}]);}else this.log("pageLoadEvent | skipped event for page",{pathname:n,event:s.name,pages:t,excludedPages:i});}),this}clearInterval(){this.interval&&(clearInterval(this.interval),this.interval=null);}cleanup(){this.clearInterval(),this.responses=[],this.isTrackingResponses=false;}},f=new p;typeof window<"u"&&(window.cacheTrackEvents=f);exports.a=f;//# sourceMappingURL=chunk-GZBZB5MW.js.map
3
+ //# sourceMappingURL=chunk-GZBZB5MW.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils/analytics-cache.ts"],"names":["AnalyticsCacheManager","createLogger","debug","inputString","desiredLength","fnv1aHash","string","hash","i","base64Encode","combined","name","parts","cookieValue","originalXhrOpen","originalXhrSend","method","url","body","parsedPayload","responseData","cacheTrackEvents","instance","cookieName","cookies","cookie","eqIdx","raw","event","data","storedCookies","cacheCookie","domain","maxAge","cookieString","hostname","clientInfo","email","originalEvent","cache","Analytics","element","properties","callback","addClickListener","el","e","callbackResult","items","selector","delegatedHandler","target","matched","evt","pathname","pages","excludedPages","dispatch","eventData"],"mappings":"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","file":"chunk-GZBZB5MW.js","sourcesContent":["/**\n * Analytics Cache Manager - Version 1.1.0\n * Enhanced TypeScript implementation with better type safety and SSR support\n */\nimport { createLogger } from './helpers'\n\ntype CachedEvent = {\n name: string\n properties: Record<string, any>\n}\n\ntype ResponseData = {\n url: string\n method: string\n status: number\n headers: string\n data: string\n payload: any\n}\n\ntype EventListenerConfig = {\n element: Element | NodeList | string\n event: {\n name: string\n properties: Record<string, any>\n }\n cache?: boolean\n callback?: (e: Event) => { name: string; properties: Record<string, any>; cache?: boolean }\n}\n\ntype LoadEventConfig = {\n event: {\n name: string\n properties: Record<string, any>\n }\n}\n\ntype PageLoadEventConfig = {\n pages?: string[]\n excludedPages?: string[]\n event: {\n name: string\n properties: Record<string, any>\n }\n callback?: () => { name: string; properties: Record<string, any> }\n}\n\nclass AnalyticsCacheManager {\n private interval: NodeJS.Timeout | null = null\n private responses: ResponseData[] = []\n private isTrackingResponses = false\n private delegatedSelectors: Set<string> = new Set()\n private debug = false\n private log = createLogger('[CacheManager]', () => this.debug)\n\n setDebug(debug: boolean): void {\n this.debug = debug\n }\n\n /**\n * FNV-1a hash algorithm for creating consistent hashes\n */\n private hash(inputString: string, desiredLength = 32): string {\n const fnv1aHash = (string: string): string => {\n let hash = 0x811c9dc5\n for (let i = 0; i < string.length; i++) {\n hash ^= string.charCodeAt(i)\n hash = (hash * 0x01000193) >>> 0\n }\n return hash.toString(16)\n }\n\n const base64Encode = (string: string): string => btoa(string)\n\n let hash = fnv1aHash(inputString)\n let combined = base64Encode(hash)\n\n while (combined.length < desiredLength) {\n combined += base64Encode(fnv1aHash(combined))\n }\n\n return combined.substring(0, desiredLength)\n }\n\n /**\n * Get cookie value by name\n */\n getCookies(name: string): any {\n const value = `; ${document.cookie}`\n const parts = value.split(`; ${name}=`)\n if (parts.length === 2) {\n const cookieValue = decodeURIComponent(parts.pop()!.split(';').shift()!)\n\n try {\n return JSON.parse(cookieValue)\n } catch (e) {\n return cookieValue\n }\n }\n return null\n }\n\n /**\n * Track page unload events to cache pageviews before leaving\n */\n trackPageUnload(): void {\n if (typeof window === 'undefined') return\n\n window.addEventListener('beforeunload', () => {\n if (!this.isPageViewSent()) {\n this.push('cached_analytics_page_views', {\n name: window.location.origin + window.location.pathname,\n })\n }\n })\n }\n\n /**\n * Track XMLHttpRequest responses to monitor analytics calls\n */\n trackResponses(): void {\n if (typeof window === 'undefined' || typeof XMLHttpRequest === 'undefined') return\n\n const originalXhrOpen = XMLHttpRequest.prototype.open\n const originalXhrSend = XMLHttpRequest.prototype.send\n\n XMLHttpRequest.prototype.open = function (method: string, url: string | URL) {\n ;(this as any)._url = url\n ;(this as any)._method = method\n return originalXhrOpen.apply(this, arguments as any)\n }\n\n XMLHttpRequest.prototype.send = function (body?: Document | XMLHttpRequestBodyInit | null) {\n this.addEventListener('load', function () {\n let parsedPayload = null\n\n if (typeof body === 'string') {\n try {\n parsedPayload = JSON.parse(body)\n } catch (e) {\n parsedPayload = body\n }\n }\n\n const responseData: ResponseData = {\n url: (this as any)._url,\n method: (this as any)._method,\n status: this.status,\n headers: this.getAllResponseHeaders(),\n data: this.responseText,\n payload: parsedPayload,\n }\n cacheTrackEvents.responses.push(responseData)\n })\n\n return originalXhrSend.apply(this, arguments as any)\n }\n\n this.isTrackingResponses = true\n }\n\n /**\n * Resolve the analytics instance from the window object.\n * Supports three usage patterns:\n * - NPM import: analytics.ts sets window.AnalyticsInstance directly\n * - IIFE bundle: tsup sets window.DerivAnalytics = { Analytics, cacheTrackEvents }\n * - Legacy: consumers that explicitly set window.Analytics = window.DerivAnalytics\n */\n private getAnalyticsInstance(): any {\n if (typeof window === 'undefined') return null\n return (\n (window as any).AnalyticsInstance ??\n (window as any).DerivAnalytics?.Analytics ??\n (window as any).Analytics?.Analytics\n )\n }\n\n /**\n * Check if Analytics instance is ready\n */\n isReady(): boolean {\n if (typeof window === 'undefined') return false\n const instance = this.getAnalyticsInstance()\n if (!instance) return false\n return !!instance.getInstances?.()?.tracking\n }\n\n /**\n * Parse cookies to find a specific cookie by name.\n * Uses an early-exit linear scan instead of building a full map,\n * which is significantly faster when there are many cookies.\n */\n private parseCookies(cookieName: string): any {\n if (typeof document === 'undefined') return null\n\n const cookies = document.cookie.split('; ')\n for (const cookie of cookies) {\n const eqIdx = cookie.indexOf('=')\n if (eqIdx === -1) continue\n if (decodeURIComponent(cookie.slice(0, eqIdx)) === cookieName) {\n const raw = cookie.slice(eqIdx + 1)\n try {\n return JSON.parse(decodeURIComponent(raw))\n } catch {\n return decodeURIComponent(raw)\n }\n }\n }\n return null\n }\n\n /**\n * Check if pageview has been sent\n */\n isPageViewSent(): boolean {\n return !!this.responses.find(e => e.payload?.type === 'page' && e.payload?.anonymousId)\n }\n\n /**\n * Set a cached event\n */\n set(event: CachedEvent): void {\n this.log('set | caching event to cookie', event)\n this.push('cached_analytics_events', event)\n }\n\n /**\n * Push data to cookie cache\n */\n push(cookieName: string, data: any): void {\n if (typeof document === 'undefined') return\n\n let storedCookies: any[] = []\n const cacheCookie = this.parseCookies(cookieName)\n if (cacheCookie && Array.isArray(cacheCookie)) {\n storedCookies = cacheCookie\n }\n\n storedCookies.push(data)\n\n const domain = this.getAllowedDomain()\n const maxAge = 365 * 24 * 60 * 60 // 1 year\n const cookieString = `${cookieName}=${encodeURIComponent(JSON.stringify(storedCookies))}; path=/; Domain=${domain}; max-age=${maxAge}; SameSite=Lax`\n\n document.cookie = cookieString\n }\n\n /**\n * Get the allowed domain for cookies\n * For localhost/single-part domains: use as-is\n * For multi-part domains: use top-level domain (e.g., .deriv.com)\n */\n private getAllowedDomain(): string {\n if (typeof window === 'undefined') return ''\n\n const hostname = window.location.hostname\n\n // Handle IP addresses and localhost\n if (hostname === 'localhost' || /^\\d+\\.\\d+\\.\\d+\\.\\d+$/.test(hostname)) {\n return hostname\n }\n\n const parts = hostname.split('.')\n\n // Single part domain (e.g., \"localhost\")\n if (parts.length === 1) {\n return hostname\n }\n\n // Use top-level domain for proper subdomain sharing\n return `.${parts.slice(-2).join('.')}`\n }\n\n /**\n * Process event to hash email and add client info\n */\n processEvent(event: CachedEvent): CachedEvent {\n const clientInfo = this.getCookies('client_information')\n\n if (clientInfo) {\n const { email = null } = clientInfo\n\n if (email) {\n event.properties.email_hash = this.hash(email)\n }\n }\n\n if (event?.properties?.email) {\n const email = event.properties.email\n delete event.properties.email\n event.properties.email_hash = this.hash(email)\n }\n\n return event\n }\n\n /**\n * Track an event (either immediately or cache it)\n */\n track(originalEvent: CachedEvent, cache = false): void {\n if (typeof window === 'undefined') return\n\n const event = this.processEvent(originalEvent)\n const instance = this.getAnalyticsInstance()\n\n if (this.isReady() && !cache) {\n this.log('track | analytics ready — calling trackEvent', {\n event: event.name,\n properties: event.properties,\n })\n instance.trackEvent(event.name, event.properties)\n } else {\n this.log('track | analytics not ready or cache=true — storing event', { event: event.name, cache })\n this.set(event)\n }\n }\n\n /**\n * Track pageview with auto-retry until sent\n */\n pageView(): void {\n if (typeof window === 'undefined') return\n\n this.log('pageView | starting page view polling')\n\n if (!this.isTrackingResponses) {\n this.trackResponses()\n this.trackPageUnload()\n }\n\n this.interval = setInterval(() => {\n const Analytics = (window as any).Analytics\n\n if (\n typeof Analytics !== 'undefined' &&\n typeof Analytics.Analytics?.pageView === 'function' &&\n this.isReady()\n ) {\n this.log('pageView | analytics ready — sending page view', { href: window.location.href })\n Analytics.Analytics.pageView(window.location.href, \"Trader's hub\")\n }\n\n if (this.isPageViewSent()) {\n this.log('pageView | page view confirmed sent — clearing interval')\n if (this.interval) clearInterval(this.interval)\n }\n }, 1000)\n }\n\n /**\n * Add click event listener to element(s)\n */\n listen(\n element: Element | NodeList,\n { name = '', properties = {} }: { name: string; properties: Record<string, any> },\n cache = false,\n callback: ((e: Event) => { name: string; properties: Record<string, any>; cache?: boolean }) | null = null\n ): void {\n const addClickListener = (el: Element) => {\n if (!(el as any).dataset?.clickEventTracking) {\n el.addEventListener('click', (e: Event) => {\n let event = {\n name,\n properties,\n cache,\n }\n\n if (typeof callback === 'function') {\n const callbackResult = callback(e)\n event = {\n ...callbackResult,\n cache: callbackResult.cache ?? cache,\n }\n }\n\n this.track(event, event.cache ?? false)\n })\n ;(el as any).dataset.clickEventTracking = 'true'\n }\n }\n\n const elements = element instanceof NodeList ? Array.from(element as NodeListOf<Element>) : [element]\n elements.forEach(addClickListener)\n }\n\n /**\n * Add event handlers to multiple elements with auto-retry\n * Alias for backward compatibility with typo\n */\n addEventHandler(items: EventListenerConfig[]): this {\n if (typeof window === 'undefined') return this\n\n items.forEach(({ element, event = { name: '', properties: {} }, cache = false, callback = null }) => {\n // If a selector string is provided, use event delegation on document\n if (typeof element === 'string') {\n const selector = element\n\n if (!this.delegatedSelectors.has(selector)) {\n const delegatedHandler = (e: Event) => {\n const target = e.target as Element | null\n if (!target) return\n\n const matched = target.closest(selector)\n if (matched && !(matched as any).dataset?.clickEventTracking) {\n let evt: any = {\n name: event.name,\n properties: event.properties,\n cache,\n }\n\n if (typeof callback === 'function') {\n const callbackResult = callback(e)\n evt = {\n ...callbackResult,\n cache: callbackResult.cache ?? cache,\n }\n }\n\n ;(matched as any).dataset.clickEventTracking = 'true'\n this.track(evt, evt.cache ?? false)\n }\n }\n\n document.addEventListener('click', delegatedHandler)\n this.delegatedSelectors.add(selector)\n }\n } else {\n // Element or NodeList: attach directly to existing elements\n const elements = element instanceof NodeList ? Array.from(element) : [element]\n\n elements.forEach(el => {\n if (el && !(el as any).dataset?.clickEventTracking) {\n this.listen(el as Element, event, cache, callback)\n }\n })\n }\n })\n\n return this\n }\n\n /**\n * Backward compatibility alias (with typo from original)\n */\n addEventhandler = this.addEventHandler.bind(this)\n\n /**\n * Load events immediately\n */\n loadEvent(items: LoadEventConfig[]): this {\n this.log(\n 'loadEvent | firing load events',\n items.map(i => i.event.name)\n )\n items.forEach(({ event }) => {\n const { name, properties } = event\n this.track({\n name,\n properties,\n })\n })\n\n return this\n }\n\n /**\n * Load events on specific pages\n */\n pageLoadEvent(items: PageLoadEventConfig[]): this {\n if (typeof window === 'undefined') return this\n\n const pathname = window.location.pathname.slice(1)\n this.log('pageLoadEvent | checking page load events', { pathname })\n\n items.forEach(({ pages = [], excludedPages = [], event, callback = null }) => {\n let dispatch = false\n if (pages.length) {\n if (pages.includes(pathname)) {\n dispatch = true\n }\n } else if (excludedPages.length) {\n if (!excludedPages.includes(pathname)) {\n dispatch = true\n }\n } else {\n dispatch = true\n }\n\n if (dispatch) {\n const eventData = callback ? callback() : event\n this.log('pageLoadEvent | dispatching event for page', { pathname, event: eventData.name })\n this.loadEvent([{ event: eventData }])\n } else {\n this.log('pageLoadEvent | skipped event for page', {\n pathname,\n event: event.name,\n pages,\n excludedPages,\n })\n }\n })\n\n return this\n }\n\n /**\n * Clear the interval and cleanup\n */\n clearInterval(): void {\n if (this.interval) {\n clearInterval(this.interval)\n this.interval = null\n }\n }\n\n /**\n * Cleanup method for removing event listeners and intervals\n */\n cleanup(): void {\n this.clearInterval()\n this.responses = []\n this.isTrackingResponses = false\n }\n}\n\n// Create singleton instance\nexport const cacheTrackEvents = new AnalyticsCacheManager()\n\n// Export to global scope for backward compatibility\nif (typeof window !== 'undefined') {\n ;(window as any).cacheTrackEvents = cacheTrackEvents\n}\n"]}
package/dist/index.js CHANGED
@@ -1,3 +1,3 @@
1
- 'use strict';var chunkY3QT7NAG_js=require('./chunk-Y3QT7NAG.js'),chunkSQ6Q4Z5S_js=require('./chunk-SQ6Q4Z5S.js'),chunkJ3V5QNIH_js=require('./chunk-J3V5QNIH.js'),v=require('js-cookie');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var v__default=/*#__PURE__*/_interopDefault(v);/* @deriv-com/analytics - NPM Package - Built with tsup */
2
- var x="cached_analytics_events",R="cached_analytics_page_views",X=(r,d)=>{try{let t=chunkJ3V5QNIH_js.f(),u=v__default.default.get(x),a=u?JSON.parse(u):[];a.push({name:r,properties:d,timestamp:Date.now()});let p={expires:1};t&&(p.domain=t),v__default.default.set(x,JSON.stringify(a),p);}catch(t){console.warn("Analytics: Failed to cache event",t);}},Y=(r,d)=>{try{let t=chunkJ3V5QNIH_js.f(),u=v__default.default.get(R),a=u?JSON.parse(u):[];a.push({name:r,properties:d,timestamp:Date.now()});let p={expires:1};t&&(p.domain=t),v__default.default.set(R,JSON.stringify(a),p);}catch(t){console.warn("Analytics: Failed to cache page view",t);}},Z=()=>{try{let r=v__default.default.get(x);if(r){let d=JSON.parse(r);return Array.isArray(d)?d:[]}}catch(r){console.warn("Analytics: Failed to get cached events",r);}return []},ee=()=>{try{let r=v__default.default.get(R);if(r){let d=JSON.parse(r);return Array.isArray(d)?d:[]}}catch(r){console.warn("Analytics: Failed to get cached pages",r);}return []},te=()=>{let r=chunkJ3V5QNIH_js.f(),d=r?{domain:r}:{};v__default.default.remove(x,d);},ie=()=>{let r=chunkJ3V5QNIH_js.f(),d=r?{domain:r}:{};v__default.default.remove(R,d);};function ye(r){let d=false,t=chunkJ3V5QNIH_js.g("",()=>d),u,a,p,y={},C={},w=[],_=[],J=false,ne=()=>{if(!J&&a?.has_initialized){J=true;try{let e=Z();e.length>0&&(t(`processCookieCache | replaying ${e.length} cached event(s)`,e),e.forEach(o=>{let i=chunkJ3V5QNIH_js.k(o.properties);a?.track(o.name,i);}),te());let s=ee();s.length>0&&(t(`processCookieCache | replaying ${s.length} cached page view(s)`,s),s.forEach(o=>{a?.pageView(o.name,"Deriv App",E(),o.properties);}),ie());}catch(e){console.warn("Analytics: Failed to process cookie cache",e);}}},se=()=>{t("onSdkLoaded | RudderStack SDK loaded"),ne(),_.length>0&&t(`onSdkLoaded | flushing ${_.length} pending identify call(s)`),_.forEach(({userId:e,traits:s})=>{e&&a?.identifyEvent(e,s);}),_=[];},oe=async({growthbookKey:e,growthbookDecryptionKey:s,rudderstackKey:o,growthbookOptions:i,posthogOptions:k,debug:l})=>{var c,g;l!==void 0&&(d=l),chunkSQ6Q4Z5S_js.a.setDebug(d),t("initialise | starting analytics initialization",{rudderstack:!!o,growthbook:!!e,posthog:!!k});try{let f=i?.attributes?.country||(e?await chunkJ3V5QNIH_js.j():void 0);if(o&&(t("initialise | initializing RudderStack"),a=chunkY3QT7NAG_js.a.getRudderStackInstance(o,se,d)),i?.attributes&&Object.keys(i.attributes).length>0){let n=i.attributes,m=a?.getAnonymousId();y={...y,country:f,...n.user_language&&{user_language:n.user_language},...n.account_type&&{account_type:n.account_type},...n.app_id&&{app_id:n.app_id},...n.residence_country&&{residence_country:n.residence_country},...n.device_type&&{device_type:n.device_type},...n.url&&{url:n.url},...n.email_hash&&{email_hash:n.email_hash},...n.network_type&&{network_type:n.network_type},...n.network_rtt&&{network_rtt:n.network_rtt},...n.network_downlink&&{network_downlink:n.network_downlink},...n.account_currency&&{account_currency:n.account_currency},...n.account_mode&&{account_mode:n.account_mode},loggedIn:!!n.loggedIn,...n.user_id&&!chunkJ3V5QNIH_js.i(n.user_id)&&{user_id:n.user_id},...m&&{anonymous_id:m}};}i??(i={}),i.attributes??(i.attributes={});let h=a?.getAnonymousId();if((c=i.attributes).id??(c.id=h),(g=i.attributes).country??(g.country=f),e){t("initialise | initializing GrowthBook");let{Growthbook:n}=await import('./providers/growthbook/index.js');u=n.getGrowthBookInstance(e,s,i,d),t("initialise | GrowthBook initialized");let m=setInterval(()=>{Object.keys(C).length>0?clearInterval(m):C=L("tracking-buttons-config",{});},1e3);}if(k){t("initialise | initializing PostHog");let{Posthog:n}=await import('./providers/posthog/index.js');p=n.getPosthogInstance(k,d),t("initialise | PostHog initialized");}t("initialise | analytics initialization complete");}catch(f){console.warn("Analytics: Failed to initialize",f);}},ae=({country:e,user_language:s,device_language:o,device_type:i,account_type:k,user_id:l,anonymous_id:c,app_id:g,utm_source:f,utm_medium:h,utm_campaign:n,is_authorised:m,residence_country:T,url:I,domain:B,geo_location:z,loggedIn:S,network_downlink:O,network_rtt:G,network_type:F,account_currency:D,account_mode:H})=>{let N=l??E();if(t("setAttributes | received attributes",{country:e,user_language:s,device_language:o,device_type:i,account_type:k,user_id:l,anonymous_id:c,app_id:g,utm_source:f,utm_medium:h,utm_campaign:n,is_authorised:m,residence_country:T,url:I,domain:B,geo_location:z,loggedIn:S,network_downlink:O,network_rtt:G,network_type:F,account_currency:D,account_mode:H}),u){let V={country:e,residence_country:T,user_language:s,device_language:o,device_type:i,utm_source:f,utm_medium:h,utm_campaign:n,is_authorised:m,url:I,domain:B,loggedIn:S,...l&&!chunkJ3V5QNIH_js.i(l)&&{user_id:l},anonymous_id:c};N&&(V.id=N,V.user_id=N),t("setAttributes | called GrowthBook setAttributes",V),u.setAttributes(V);}y={...y,...e!==void 0&&{country:e},...z!==void 0&&{geo_location:z},...s!==void 0&&{user_language:s},...k!==void 0&&{account_type:k},...g!==void 0&&{app_id:g},...T!==void 0&&{residence_country:T},...i!==void 0&&{device_type:i},...I!==void 0&&{url:I},...S!==void 0&&{loggedIn:S},...O!==void 0&&{network_downlink:O},...G!==void 0&&{network_rtt:G},...F!==void 0&&{network_type:F},...l!==void 0&&!chunkJ3V5QNIH_js.i(l)&&{user_id:l},...c!==void 0&&{anonymous_id:c},...D!==void 0&&{account_currency:D},...H!==void 0&&{account_mode:H}},t("setAttributes | updated core_data",y);},re=e=>u?.getFeatureState(e)?.experimentResult?.name,L=(e,s)=>u?.getFeatureValue(e,s),ce=async()=>await u?.getStatus(),de=e=>u?.isOn(e),le=e=>u?.setUrl(e),E=()=>{let e=a?.getUserId()||"";return e&&!chunkJ3V5QNIH_js.i(e)?e:""},ge=()=>a?.getAnonymousId()||"",fe=(e,s="Deriv App",o)=>{let i=E();t("pageView | called",{current_page:e,platform:s,properties:o,userId:i}),a&&(a.has_initialized?(t("pageView | sending page view to RudderStack",{current_page:e,platform:s}),a.pageView(e,s,i,o)):(t("pageView | RudderStack not initialized \u2014 caching page view to cookie",{current_page:e}),Y(e,{platform:s,...o})));},pe=(e,s)=>{let o=e||E();if(!o){t("identifyEvent | skipped \u2014 no user_id available");return}t("identifyEvent | called",{user_id:o,traits:s});let i=g=>{if(!g)return g;let{email:f,...h}=g;return {...h,...f&&{is_internal:chunkJ3V5QNIH_js.h(f)}}},k=s?.rudderstack!==void 0||s?.posthog!==void 0,l,c;if(k){let{rudderstack:g,posthog:f,...h}=s;l=i({...h,...g}),c=i({...h,...f});}else l=i(s),c=i(s);a&&(a.has_initialized?(t("identifyEvent | calling RudderStack identify",{user_id:o,traits:l}),a.identifyEvent(o,l)):_.some(g=>g.userId===o)||(t("identifyEvent | RudderStack not initialized \u2014 queuing identify call",{user_id:o}),_.push({userId:o,traits:l}))),p?.has_initialized&&c&&(t("identifyEvent | calling PostHog identify",{user_id:o,traits:c}),p.identifyEvent(o,c));},ue=()=>{t("reset | resetting all providers"),a?.has_initialized&&(t("reset | resetting RudderStack"),a.reset()),p?.has_initialized&&(t("reset | resetting PostHog"),p.reset());},he=e=>"event_metadata"in e||"cta_information"in e||"error"in e,U={initialise:oe,setAttributes:ae,identifyEvent:pe,backfillPersonProperties:({user_id:e,email:s,country_of_residence:o})=>{t("backfillPersonProperties | called",{user_id:e}),p?.has_initialized?(t("backfillPersonProperties | backfilling person properties in PostHog",{user_id:e}),p.backfillPersonProperties({user_id:e,email:s,country_of_residence:o})):t("backfillPersonProperties | skipped \u2014 PostHog not initialized");},getFeatureState:re,getFeatureValue:L,getGrowthbookStatus:ce,isFeatureOn:de,setUrl:le,getId:E,getAnonymousId:ge,trackEvent:(e,s)=>{let o=E(),i={};if(t("trackEvent | called",{event:e,analytics_data:s,userId:o,core_data:y}),he(s)){let c=s;i={...c,event_metadata:{...y,...o&&!y.user_id&&{user_id:o},...c.event_metadata}},t("trackEvent | built V2 payload",{event:e,final_payload:i});}else i={...y,...s,...o&&!y.user_id&&{user_id:o}},t("trackEvent | built V1 payload",{event:e,final_payload:i});if(!(!(e in C)||C[e])){t("trackEvent | skipped \u2014 event disabled by tracking_config",{event:e});return}let l=a?.has_initialized;if(!navigator.onLine||!l)l?(t("trackEvent | offline \u2014 caching event to memory",{event:e}),w.push({event:e,payload:i})):(t("trackEvent | RudderStack not initialized \u2014 caching event to cookie",{event:e}),X(e,i));else {w.length>0&&(t(`trackEvent | flushing ${w.length} offline cached event(s) to RudderStack`),w.forEach(g=>{let f=chunkJ3V5QNIH_js.k(g.payload);a?.track(g.event,f);}),w=[]);let c=chunkJ3V5QNIH_js.k(i);t("trackEvent | sending event to RudderStack",{event:e,payload:c}),a?.track(e,c);}if(p?.has_initialized){let c=["page_name","user_language","form_name","version","email_hash"],g=chunkJ3V5QNIH_js.l(i),f=chunkJ3V5QNIH_js.k(Object.fromEntries(Object.entries(g).filter(([h])=>!c.includes(h))));t("trackEvent | sending event to PostHog",{event:e,payload:f}),p.capture(e,f);}},getInstances:()=>({ab:u,tracking:a,posthog:p}),pageView:fe,reset:ue};return typeof window<"u"&&(window.AnalyticsInstance=U),U}var ke=ye();Object.defineProperty(exports,"cacheTrackEvents",{enumerable:true,get:function(){return chunkSQ6Q4Z5S_js.a}});exports.Analytics=ke;//# sourceMappingURL=index.js.map
1
+ 'use strict';var chunkY3QT7NAG_js=require('./chunk-Y3QT7NAG.js'),chunkGZBZB5MW_js=require('./chunk-GZBZB5MW.js'),chunkJ3V5QNIH_js=require('./chunk-J3V5QNIH.js'),v=require('js-cookie');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var v__default=/*#__PURE__*/_interopDefault(v);/* @deriv-com/analytics - NPM Package - Built with tsup */
2
+ var x="cached_analytics_events",R="cached_analytics_page_views",X=(r,d)=>{try{let t=chunkJ3V5QNIH_js.f(),u=v__default.default.get(x),a=u?JSON.parse(u):[];a.push({name:r,properties:d,timestamp:Date.now()});let p={expires:1};t&&(p.domain=t),v__default.default.set(x,JSON.stringify(a),p);}catch(t){console.warn("Analytics: Failed to cache event",t);}},Y=(r,d)=>{try{let t=chunkJ3V5QNIH_js.f(),u=v__default.default.get(R),a=u?JSON.parse(u):[];a.push({name:r,properties:d,timestamp:Date.now()});let p={expires:1};t&&(p.domain=t),v__default.default.set(R,JSON.stringify(a),p);}catch(t){console.warn("Analytics: Failed to cache page view",t);}},Z=()=>{try{let r=v__default.default.get(x);if(r){let d=JSON.parse(r);return Array.isArray(d)?d:[]}}catch(r){console.warn("Analytics: Failed to get cached events",r);}return []},ee=()=>{try{let r=v__default.default.get(R);if(r){let d=JSON.parse(r);return Array.isArray(d)?d:[]}}catch(r){console.warn("Analytics: Failed to get cached pages",r);}return []},te=()=>{let r=chunkJ3V5QNIH_js.f(),d=r?{domain:r}:{};v__default.default.remove(x,d);},ie=()=>{let r=chunkJ3V5QNIH_js.f(),d=r?{domain:r}:{};v__default.default.remove(R,d);};function ye(r){let d=false,t=chunkJ3V5QNIH_js.g("",()=>d),u,a,p,y={},C={},w=[],_=[],J=false,ne=()=>{if(!J&&a?.has_initialized){J=true;try{let e=Z();e.length>0&&(t(`processCookieCache | replaying ${e.length} cached event(s)`,e),e.forEach(o=>{let i=chunkJ3V5QNIH_js.k(o.properties);a?.track(o.name,i);}),te());let s=ee();s.length>0&&(t(`processCookieCache | replaying ${s.length} cached page view(s)`,s),s.forEach(o=>{a?.pageView(o.name,"Deriv App",E(),o.properties);}),ie());}catch(e){console.warn("Analytics: Failed to process cookie cache",e);}}},se=()=>{t("onSdkLoaded | RudderStack SDK loaded"),ne(),_.length>0&&t(`onSdkLoaded | flushing ${_.length} pending identify call(s)`),_.forEach(({userId:e,traits:s})=>{e&&a?.identifyEvent(e,s);}),_=[];},oe=async({growthbookKey:e,growthbookDecryptionKey:s,rudderstackKey:o,growthbookOptions:i,posthogOptions:k,debug:l})=>{var c,g;l!==void 0&&(d=l),chunkGZBZB5MW_js.a.setDebug(d),t("initialise | starting analytics initialization",{rudderstack:!!o,growthbook:!!e,posthog:!!k});try{let f=i?.attributes?.country||(e?await chunkJ3V5QNIH_js.j():void 0);if(o&&(t("initialise | initializing RudderStack"),a=chunkY3QT7NAG_js.a.getRudderStackInstance(o,se,d)),i?.attributes&&Object.keys(i.attributes).length>0){let n=i.attributes,m=a?.getAnonymousId();y={...y,country:f,...n.user_language&&{user_language:n.user_language},...n.account_type&&{account_type:n.account_type},...n.app_id&&{app_id:n.app_id},...n.residence_country&&{residence_country:n.residence_country},...n.device_type&&{device_type:n.device_type},...n.url&&{url:n.url},...n.email_hash&&{email_hash:n.email_hash},...n.network_type&&{network_type:n.network_type},...n.network_rtt&&{network_rtt:n.network_rtt},...n.network_downlink&&{network_downlink:n.network_downlink},...n.account_currency&&{account_currency:n.account_currency},...n.account_mode&&{account_mode:n.account_mode},loggedIn:!!n.loggedIn,...n.user_id&&!chunkJ3V5QNIH_js.i(n.user_id)&&{user_id:n.user_id},...m&&{anonymous_id:m}};}i??(i={}),i.attributes??(i.attributes={});let h=a?.getAnonymousId();if((c=i.attributes).id??(c.id=h),(g=i.attributes).country??(g.country=f),e){t("initialise | initializing GrowthBook");let{Growthbook:n}=await import('./providers/growthbook/index.js');u=n.getGrowthBookInstance(e,s,i,d),t("initialise | GrowthBook initialized");let m=setInterval(()=>{Object.keys(C).length>0?clearInterval(m):C=L("tracking-buttons-config",{});},1e3);}if(k){t("initialise | initializing PostHog");let{Posthog:n}=await import('./providers/posthog/index.js');p=n.getPosthogInstance(k,d),t("initialise | PostHog initialized");}t("initialise | analytics initialization complete");}catch(f){console.warn("Analytics: Failed to initialize",f);}},ae=({country:e,user_language:s,device_language:o,device_type:i,account_type:k,user_id:l,anonymous_id:c,app_id:g,utm_source:f,utm_medium:h,utm_campaign:n,is_authorised:m,residence_country:T,url:I,domain:B,geo_location:z,loggedIn:S,network_downlink:O,network_rtt:G,network_type:F,account_currency:D,account_mode:H})=>{let N=l??E();if(t("setAttributes | received attributes",{country:e,user_language:s,device_language:o,device_type:i,account_type:k,user_id:l,anonymous_id:c,app_id:g,utm_source:f,utm_medium:h,utm_campaign:n,is_authorised:m,residence_country:T,url:I,domain:B,geo_location:z,loggedIn:S,network_downlink:O,network_rtt:G,network_type:F,account_currency:D,account_mode:H}),u){let V={country:e,residence_country:T,user_language:s,device_language:o,device_type:i,utm_source:f,utm_medium:h,utm_campaign:n,is_authorised:m,url:I,domain:B,loggedIn:S,...l&&!chunkJ3V5QNIH_js.i(l)&&{user_id:l},anonymous_id:c};N&&(V.id=N,V.user_id=N),t("setAttributes | called GrowthBook setAttributes",V),u.setAttributes(V);}y={...y,...e!==void 0&&{country:e},...z!==void 0&&{geo_location:z},...s!==void 0&&{user_language:s},...k!==void 0&&{account_type:k},...g!==void 0&&{app_id:g},...T!==void 0&&{residence_country:T},...i!==void 0&&{device_type:i},...I!==void 0&&{url:I},...S!==void 0&&{loggedIn:S},...O!==void 0&&{network_downlink:O},...G!==void 0&&{network_rtt:G},...F!==void 0&&{network_type:F},...l!==void 0&&!chunkJ3V5QNIH_js.i(l)&&{user_id:l},...c!==void 0&&{anonymous_id:c},...D!==void 0&&{account_currency:D},...H!==void 0&&{account_mode:H}},t("setAttributes | updated core_data",y);},re=e=>u?.getFeatureState(e)?.experimentResult?.name,L=(e,s)=>u?.getFeatureValue(e,s),ce=async()=>await u?.getStatus(),de=e=>u?.isOn(e),le=e=>u?.setUrl(e),E=()=>{let e=a?.getUserId()||"";return e&&!chunkJ3V5QNIH_js.i(e)?e:""},ge=()=>a?.getAnonymousId()||"",fe=(e,s="Deriv App",o)=>{let i=E();t("pageView | called",{current_page:e,platform:s,properties:o,userId:i}),a&&(a.has_initialized?(t("pageView | sending page view to RudderStack",{current_page:e,platform:s}),a.pageView(e,s,i,o)):(t("pageView | RudderStack not initialized \u2014 caching page view to cookie",{current_page:e}),Y(e,{platform:s,...o})));},pe=(e,s)=>{let o=e||E();if(!o){t("identifyEvent | skipped \u2014 no user_id available");return}t("identifyEvent | called",{user_id:o,traits:s});let i=g=>{if(!g)return g;let{email:f,...h}=g;return {...h,...f&&{is_internal:chunkJ3V5QNIH_js.h(f)}}},k=s?.rudderstack!==void 0||s?.posthog!==void 0,l,c;if(k){let{rudderstack:g,posthog:f,...h}=s;l=i({...h,...g}),c=i({...h,...f});}else l=i(s),c=i(s);a&&(a.has_initialized?(t("identifyEvent | calling RudderStack identify",{user_id:o,traits:l}),a.identifyEvent(o,l)):_.some(g=>g.userId===o)||(t("identifyEvent | RudderStack not initialized \u2014 queuing identify call",{user_id:o}),_.push({userId:o,traits:l}))),p?.has_initialized&&c&&(t("identifyEvent | calling PostHog identify",{user_id:o,traits:c}),p.identifyEvent(o,c));},ue=()=>{t("reset | resetting all providers"),a?.has_initialized&&(t("reset | resetting RudderStack"),a.reset()),p?.has_initialized&&(t("reset | resetting PostHog"),p.reset());},he=e=>"event_metadata"in e||"cta_information"in e||"error"in e,U={initialise:oe,setAttributes:ae,identifyEvent:pe,backfillPersonProperties:({user_id:e,email:s,country_of_residence:o})=>{t("backfillPersonProperties | called",{user_id:e}),p?.has_initialized?(t("backfillPersonProperties | backfilling person properties in PostHog",{user_id:e}),p.backfillPersonProperties({user_id:e,email:s,country_of_residence:o})):t("backfillPersonProperties | skipped \u2014 PostHog not initialized");},getFeatureState:re,getFeatureValue:L,getGrowthbookStatus:ce,isFeatureOn:de,setUrl:le,getId:E,getAnonymousId:ge,trackEvent:(e,s)=>{let o=E(),i={};if(t("trackEvent | called",{event:e,analytics_data:s,userId:o,core_data:y}),he(s)){let c=s;i={...c,event_metadata:{...y,...o&&!y.user_id&&{user_id:o},...c.event_metadata}},t("trackEvent | built V2 payload",{event:e,final_payload:i});}else i={...y,...s,...o&&!y.user_id&&{user_id:o}},t("trackEvent | built V1 payload",{event:e,final_payload:i});if(!(!(e in C)||C[e])){t("trackEvent | skipped \u2014 event disabled by tracking_config",{event:e});return}let l=a?.has_initialized;if(!navigator.onLine||!l)l?(t("trackEvent | offline \u2014 caching event to memory",{event:e}),w.push({event:e,payload:i})):(t("trackEvent | RudderStack not initialized \u2014 caching event to cookie",{event:e}),X(e,i));else {w.length>0&&(t(`trackEvent | flushing ${w.length} offline cached event(s) to RudderStack`),w.forEach(g=>{let f=chunkJ3V5QNIH_js.k(g.payload);a?.track(g.event,f);}),w=[]);let c=chunkJ3V5QNIH_js.k(i);t("trackEvent | sending event to RudderStack",{event:e,payload:c}),a?.track(e,c);}if(p?.has_initialized){let c=["page_name","user_language","form_name","version","email_hash"],g=chunkJ3V5QNIH_js.l(i),f=chunkJ3V5QNIH_js.k(Object.fromEntries(Object.entries(g).filter(([h])=>!c.includes(h))));t("trackEvent | sending event to PostHog",{event:e,payload:f}),p.capture(e,f);}},getInstances:()=>({ab:u,tracking:a,posthog:p}),pageView:fe,reset:ue};return typeof window<"u"&&(window.AnalyticsInstance=U),U}var ke=ye();Object.defineProperty(exports,"cacheTrackEvents",{enumerable:true,get:function(){return chunkGZBZB5MW_js.a}});exports.Analytics=ke;//# sourceMappingURL=index.js.map
3
3
  //# sourceMappingURL=index.js.map
package/dist/index.mjs CHANGED
@@ -1,3 +1,3 @@
1
- import {a as a$1}from'./chunk-44P2MMGV.mjs';import {a}from'./chunk-LIPHY7JK.mjs';export{a as cacheTrackEvents}from'./chunk-LIPHY7JK.mjs';import {g,i,j,f,h,k,l}from'./chunk-GGU2UVKH.mjs';import v from'js-cookie';/* @deriv-com/analytics - NPM Package - Built with tsup */
1
+ import {a as a$1}from'./chunk-44P2MMGV.mjs';import {a}from'./chunk-DWOZQCV4.mjs';export{a as cacheTrackEvents}from'./chunk-DWOZQCV4.mjs';import {g,i,j,f,h,k,l}from'./chunk-GGU2UVKH.mjs';import v from'js-cookie';/* @deriv-com/analytics - NPM Package - Built with tsup */
2
2
  var x="cached_analytics_events",R="cached_analytics_page_views",Q=(r,d)=>{try{let t=f(),u=v.get(x),a=u?JSON.parse(u):[];a.push({name:r,properties:d,timestamp:Date.now()});let p={expires:1};t&&(p.domain=t),v.set(x,JSON.stringify(a),p);}catch(t){console.warn("Analytics: Failed to cache event",t);}},X=(r,d)=>{try{let t=f(),u=v.get(R),a=u?JSON.parse(u):[];a.push({name:r,properties:d,timestamp:Date.now()});let p={expires:1};t&&(p.domain=t),v.set(R,JSON.stringify(a),p);}catch(t){console.warn("Analytics: Failed to cache page view",t);}},Y=()=>{try{let r=v.get(x);if(r){let d=JSON.parse(r);return Array.isArray(d)?d:[]}}catch(r){console.warn("Analytics: Failed to get cached events",r);}return []},Z=()=>{try{let r=v.get(R);if(r){let d=JSON.parse(r);return Array.isArray(d)?d:[]}}catch(r){console.warn("Analytics: Failed to get cached pages",r);}return []},ee=()=>{let r=f(),d=r?{domain:r}:{};v.remove(x,d);},te=()=>{let r=f(),d=r?{domain:r}:{};v.remove(R,d);};function he(r){let d=false,t=g("",()=>d),u,a$2,p,y={},C={},w=[],_=[],J=false,ie=()=>{if(!J&&a$2?.has_initialized){J=true;try{let e=Y();e.length>0&&(t(`processCookieCache | replaying ${e.length} cached event(s)`,e),e.forEach(o=>{let i=k(o.properties);a$2?.track(o.name,i);}),ee());let s=Z();s.length>0&&(t(`processCookieCache | replaying ${s.length} cached page view(s)`,s),s.forEach(o=>{a$2?.pageView(o.name,"Deriv App",E(),o.properties);}),te());}catch(e){console.warn("Analytics: Failed to process cookie cache",e);}}},ne=()=>{t("onSdkLoaded | RudderStack SDK loaded"),ie(),_.length>0&&t(`onSdkLoaded | flushing ${_.length} pending identify call(s)`),_.forEach(({userId:e,traits:s})=>{e&&a$2?.identifyEvent(e,s);}),_=[];},se=async({growthbookKey:e,growthbookDecryptionKey:s,rudderstackKey:o,growthbookOptions:i$1,posthogOptions:k,debug:l})=>{var c,g;l!==void 0&&(d=l),a.setDebug(d),t("initialise | starting analytics initialization",{rudderstack:!!o,growthbook:!!e,posthog:!!k});try{let f=i$1?.attributes?.country||(e?await j():void 0);if(o&&(t("initialise | initializing RudderStack"),a$2=a$1.getRudderStackInstance(o,ne,d)),i$1?.attributes&&Object.keys(i$1.attributes).length>0){let n=i$1.attributes,m=a$2?.getAnonymousId();y={...y,country:f,...n.user_language&&{user_language:n.user_language},...n.account_type&&{account_type:n.account_type},...n.app_id&&{app_id:n.app_id},...n.residence_country&&{residence_country:n.residence_country},...n.device_type&&{device_type:n.device_type},...n.url&&{url:n.url},...n.email_hash&&{email_hash:n.email_hash},...n.network_type&&{network_type:n.network_type},...n.network_rtt&&{network_rtt:n.network_rtt},...n.network_downlink&&{network_downlink:n.network_downlink},...n.account_currency&&{account_currency:n.account_currency},...n.account_mode&&{account_mode:n.account_mode},loggedIn:!!n.loggedIn,...n.user_id&&!i(n.user_id)&&{user_id:n.user_id},...m&&{anonymous_id:m}};}i$1??(i$1={}),i$1.attributes??(i$1.attributes={});let h=a$2?.getAnonymousId();if((c=i$1.attributes).id??(c.id=h),(g=i$1.attributes).country??(g.country=f),e){t("initialise | initializing GrowthBook");let{Growthbook:n}=await import('./providers/growthbook/index.mjs');u=n.getGrowthBookInstance(e,s,i$1,d),t("initialise | GrowthBook initialized");let m=setInterval(()=>{Object.keys(C).length>0?clearInterval(m):C=L("tracking-buttons-config",{});},1e3);}if(k){t("initialise | initializing PostHog");let{Posthog:n}=await import('./providers/posthog/index.mjs');p=n.getPosthogInstance(k,d),t("initialise | PostHog initialized");}t("initialise | analytics initialization complete");}catch(f){console.warn("Analytics: Failed to initialize",f);}},oe=({country:e,user_language:s,device_language:o,device_type:i$1,account_type:k,user_id:l,anonymous_id:c,app_id:g,utm_source:f,utm_medium:h,utm_campaign:n,is_authorised:m,residence_country:T,url:I,domain:B,geo_location:z,loggedIn:S,network_downlink:O,network_rtt:G,network_type:F,account_currency:D,account_mode:H})=>{let N=l??E();if(t("setAttributes | received attributes",{country:e,user_language:s,device_language:o,device_type:i$1,account_type:k,user_id:l,anonymous_id:c,app_id:g,utm_source:f,utm_medium:h,utm_campaign:n,is_authorised:m,residence_country:T,url:I,domain:B,geo_location:z,loggedIn:S,network_downlink:O,network_rtt:G,network_type:F,account_currency:D,account_mode:H}),u){let V={country:e,residence_country:T,user_language:s,device_language:o,device_type:i$1,utm_source:f,utm_medium:h,utm_campaign:n,is_authorised:m,url:I,domain:B,loggedIn:S,...l&&!i(l)&&{user_id:l},anonymous_id:c};N&&(V.id=N,V.user_id=N),t("setAttributes | called GrowthBook setAttributes",V),u.setAttributes(V);}y={...y,...e!==void 0&&{country:e},...z!==void 0&&{geo_location:z},...s!==void 0&&{user_language:s},...k!==void 0&&{account_type:k},...g!==void 0&&{app_id:g},...T!==void 0&&{residence_country:T},...i$1!==void 0&&{device_type:i$1},...I!==void 0&&{url:I},...S!==void 0&&{loggedIn:S},...O!==void 0&&{network_downlink:O},...G!==void 0&&{network_rtt:G},...F!==void 0&&{network_type:F},...l!==void 0&&!i(l)&&{user_id:l},...c!==void 0&&{anonymous_id:c},...D!==void 0&&{account_currency:D},...H!==void 0&&{account_mode:H}},t("setAttributes | updated core_data",y);},ae=e=>u?.getFeatureState(e)?.experimentResult?.name,L=(e,s)=>u?.getFeatureValue(e,s),re=async()=>await u?.getStatus(),ce=e=>u?.isOn(e),de=e=>u?.setUrl(e),E=()=>{let e=a$2?.getUserId()||"";return e&&!i(e)?e:""},le=()=>a$2?.getAnonymousId()||"",ge=(e,s="Deriv App",o)=>{let i=E();t("pageView | called",{current_page:e,platform:s,properties:o,userId:i}),a$2&&(a$2.has_initialized?(t("pageView | sending page view to RudderStack",{current_page:e,platform:s}),a$2.pageView(e,s,i,o)):(t("pageView | RudderStack not initialized \u2014 caching page view to cookie",{current_page:e}),X(e,{platform:s,...o})));},fe=(e,s)=>{let o=e||E();if(!o){t("identifyEvent | skipped \u2014 no user_id available");return}t("identifyEvent | called",{user_id:o,traits:s});let i=g=>{if(!g)return g;let{email:f,...h$1}=g;return {...h$1,...f&&{is_internal:h(f)}}},k=s?.rudderstack!==void 0||s?.posthog!==void 0,l,c;if(k){let{rudderstack:g,posthog:f,...h}=s;l=i({...h,...g}),c=i({...h,...f});}else l=i(s),c=i(s);a$2&&(a$2.has_initialized?(t("identifyEvent | calling RudderStack identify",{user_id:o,traits:l}),a$2.identifyEvent(o,l)):_.some(g=>g.userId===o)||(t("identifyEvent | RudderStack not initialized \u2014 queuing identify call",{user_id:o}),_.push({userId:o,traits:l}))),p?.has_initialized&&c&&(t("identifyEvent | calling PostHog identify",{user_id:o,traits:c}),p.identifyEvent(o,c));},pe=()=>{t("reset | resetting all providers"),a$2?.has_initialized&&(t("reset | resetting RudderStack"),a$2.reset()),p?.has_initialized&&(t("reset | resetting PostHog"),p.reset());},ue=e=>"event_metadata"in e||"cta_information"in e||"error"in e,U={initialise:se,setAttributes:oe,identifyEvent:fe,backfillPersonProperties:({user_id:e,email:s,country_of_residence:o})=>{t("backfillPersonProperties | called",{user_id:e}),p?.has_initialized?(t("backfillPersonProperties | backfilling person properties in PostHog",{user_id:e}),p.backfillPersonProperties({user_id:e,email:s,country_of_residence:o})):t("backfillPersonProperties | skipped \u2014 PostHog not initialized");},getFeatureState:ae,getFeatureValue:L,getGrowthbookStatus:re,isFeatureOn:ce,setUrl:de,getId:E,getAnonymousId:le,trackEvent:(e,s)=>{let o=E(),i={};if(t("trackEvent | called",{event:e,analytics_data:s,userId:o,core_data:y}),ue(s)){let c=s;i={...c,event_metadata:{...y,...o&&!y.user_id&&{user_id:o},...c.event_metadata}},t("trackEvent | built V2 payload",{event:e,final_payload:i});}else i={...y,...s,...o&&!y.user_id&&{user_id:o}},t("trackEvent | built V1 payload",{event:e,final_payload:i});if(!(!(e in C)||C[e])){t("trackEvent | skipped \u2014 event disabled by tracking_config",{event:e});return}let l$1=a$2?.has_initialized;if(!navigator.onLine||!l$1)l$1?(t("trackEvent | offline \u2014 caching event to memory",{event:e}),w.push({event:e,payload:i})):(t("trackEvent | RudderStack not initialized \u2014 caching event to cookie",{event:e}),Q(e,i));else {w.length>0&&(t(`trackEvent | flushing ${w.length} offline cached event(s) to RudderStack`),w.forEach(g=>{let f=k(g.payload);a$2?.track(g.event,f);}),w=[]);let c=k(i);t("trackEvent | sending event to RudderStack",{event:e,payload:c}),a$2?.track(e,c);}if(p?.has_initialized){let c=["page_name","user_language","form_name","version","email_hash"],g=l(i),f=k(Object.fromEntries(Object.entries(g).filter(([h])=>!c.includes(h))));t("trackEvent | sending event to PostHog",{event:e,payload:f}),p.capture(e,f);}},getInstances:()=>({ab:u,tracking:a$2,posthog:p}),pageView:ge,reset:pe};return typeof window<"u"&&(window.AnalyticsInstance=U),U}var ye=he();export{ye as Analytics};//# sourceMappingURL=index.mjs.map
3
3
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"inputs":{"node_modules/tsup/assets/cjs_shims.js":{"bytes":569,"imports":[],"format":"esm"},"src/utils/urls.ts":{"bytes":1606,"imports":[{"path":"/home/runner/work/deriv-analytics/deriv-analytics/node_modules/tsup/assets/cjs_shims.js","kind":"import-statement","external":true}],"format":"esm"},"src/utils/helpers.ts":{"bytes":5304,"imports":[{"path":"js-cookie","kind":"import-statement","external":true},{"path":"src/utils/urls.ts","kind":"import-statement","original":"./urls"},{"path":"/home/runner/work/deriv-analytics/deriv-analytics/node_modules/tsup/assets/cjs_shims.js","kind":"import-statement","external":true}],"format":"esm"},"src/providers/rudderstack.ts":{"bytes":8864,"imports":[{"path":"@rudderstack/analytics-js","kind":"import-statement","external":true},{"path":"src/utils/urls.ts","kind":"import-statement","original":"../utils/urls"},{"path":"src/utils/helpers.ts","kind":"import-statement","original":"../utils/helpers"},{"path":"/home/runner/work/deriv-analytics/deriv-analytics/node_modules/tsup/assets/cjs_shims.js","kind":"import-statement","external":true}],"format":"esm"},"src/utils/cookie.ts":{"bytes":2956,"imports":[{"path":"js-cookie","kind":"import-statement","external":true},{"path":"src/utils/urls.ts","kind":"import-statement","original":"./urls"},{"path":"/home/runner/work/deriv-analytics/deriv-analytics/node_modules/tsup/assets/cjs_shims.js","kind":"import-statement","external":true}],"format":"esm"},"src/utils/analytics-cache.ts":{"bytes":16956,"imports":[{"path":"src/utils/helpers.ts","kind":"import-statement","original":"./helpers"},{"path":"/home/runner/work/deriv-analytics/deriv-analytics/node_modules/tsup/assets/cjs_shims.js","kind":"import-statement","external":true}],"format":"esm"},"src/providers/growthbook.ts":{"bytes":7568,"imports":[{"path":"@growthbook/growthbook","kind":"import-statement","external":true},{"path":"@rudderstack/analytics-js","kind":"import-statement","external":true},{"path":"./growthbookTypes","kind":"import-statement","external":true},{"path":"src/utils/urls.ts","kind":"import-statement","original":"../utils/urls"},{"path":"src/utils/helpers.ts","kind":"import-statement","original":"../utils/helpers"},{"path":"/home/runner/work/deriv-analytics/deriv-analytics/node_modules/tsup/assets/cjs_shims.js","kind":"import-statement","external":true}],"format":"esm"},"src/providers/posthog.ts":{"bytes":8004,"imports":[{"path":"posthog-js","kind":"import-statement","external":true},{"path":"src/utils/urls.ts","kind":"import-statement","original":"../utils/urls"},{"path":"src/utils/helpers.ts","kind":"import-statement","original":"../utils/helpers"},{"path":"/home/runner/work/deriv-analytics/deriv-analytics/node_modules/tsup/assets/cjs_shims.js","kind":"import-statement","external":true}],"format":"esm"},"src/analytics.ts":{"bytes":27027,"imports":[{"path":"src/providers/rudderstack.ts","kind":"import-statement","original":"./providers/rudderstack"},{"path":"src/utils/cookie.ts","kind":"import-statement","original":"./utils/cookie"},{"path":"src/utils/helpers.ts","kind":"import-statement","original":"./utils/helpers"},{"path":"src/utils/analytics-cache.ts","kind":"import-statement","original":"./utils/analytics-cache"},{"path":"/home/runner/work/deriv-analytics/deriv-analytics/node_modules/tsup/assets/cjs_shims.js","kind":"import-statement","external":true},{"path":"src/providers/growthbook.ts","kind":"dynamic-import","original":"./providers/growthbook"},{"path":"src/providers/posthog.ts","kind":"dynamic-import","original":"./providers/posthog"}],"format":"esm"},"src/index.ts":{"bytes":138,"imports":[{"path":"src/analytics.ts","kind":"import-statement","original":"./analytics"},{"path":"src/utils/analytics-cache.ts","kind":"import-statement","original":"./utils/analytics-cache"},{"path":"/home/runner/work/deriv-analytics/deriv-analytics/node_modules/tsup/assets/cjs_shims.js","kind":"import-statement","external":true}],"format":"esm"}},"outputs":{"dist/index.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":43125},"dist/index.js":{"imports":[{"path":"dist/chunk-Y3QT7NAG.js","kind":"import-statement"},{"path":"dist/chunk-SQ6Q4Z5S.js","kind":"import-statement"},{"path":"dist/chunk-J3V5QNIH.js","kind":"import-statement"},{"path":"js-cookie","kind":"import-statement","external":true},{"path":"dist/providers/growthbook/index.js","kind":"dynamic-import"},{"path":"dist/providers/posthog/index.js","kind":"dynamic-import"}],"exports":["Analytics","cacheTrackEvents"],"entryPoint":"src/index.ts","inputs":{"src/utils/cookie.ts":{"bytesInOutput":975},"src/analytics.ts":{"bytesInOutput":7630},"src/index.ts":{"bytesInOutput":0}},"bytes":8873},"dist/providers/growthbook/index.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":11928},"dist/providers/growthbook/index.js":{"imports":[{"path":"dist/chunk-J3V5QNIH.js","kind":"import-statement"},{"path":"@growthbook/growthbook","kind":"import-statement","external":true},{"path":"@rudderstack/analytics-js","kind":"import-statement","external":true}],"exports":["Growthbook"],"entryPoint":"src/providers/growthbook.ts","inputs":{"src/providers/growthbook.ts":{"bytesInOutput":3392}},"bytes":3527},"dist/providers/rudderstack/index.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":93},"dist/providers/rudderstack/index.js":{"imports":[{"path":"dist/chunk-Y3QT7NAG.js","kind":"import-statement"},{"path":"dist/chunk-J3V5QNIH.js","kind":"import-statement"}],"exports":["RudderStack"],"entryPoint":"src/providers/rudderstack.ts","inputs":{},"bytes":156},"dist/chunk-Y3QT7NAG.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":12573},"dist/chunk-Y3QT7NAG.js":{"imports":[{"path":"dist/chunk-J3V5QNIH.js","kind":"import-statement"},{"path":"@rudderstack/analytics-js","kind":"import-statement","external":true}],"exports":["a"],"inputs":{"src/providers/rudderstack.ts":{"bytesInOutput":3191}},"bytes":3313},"dist/providers/posthog/index.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":11147},"dist/providers/posthog/index.js":{"imports":[{"path":"dist/chunk-J3V5QNIH.js","kind":"import-statement"},{"path":"posthog-js","kind":"import-statement","external":true}],"exports":["Posthog"],"entryPoint":"src/providers/posthog.ts","inputs":{"src/providers/posthog.ts":{"bytesInOutput":2586}},"bytes":2739},"dist/utils/analytics-cache/index.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":93},"dist/utils/analytics-cache/index.js":{"imports":[{"path":"dist/chunk-SQ6Q4Z5S.js","kind":"import-statement"},{"path":"dist/chunk-J3V5QNIH.js","kind":"import-statement"}],"exports":["cacheTrackEvents"],"entryPoint":"src/utils/analytics-cache.ts","inputs":{},"bytes":161},"dist/chunk-SQ6Q4Z5S.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":24777},"dist/chunk-SQ6Q4Z5S.js":{"imports":[{"path":"dist/chunk-J3V5QNIH.js","kind":"import-statement"}],"exports":["a"],"inputs":{"src/utils/analytics-cache.ts":{"bytesInOutput":5818}},"bytes":5928},"dist/chunk-J3V5QNIH.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":10215},"dist/chunk-J3V5QNIH.js":{"imports":[{"path":"js-cookie","kind":"import-statement","external":true}],"exports":["a","b","c","d","e","f","g","h","i","j","k","l"],"inputs":{"src/utils/urls.ts":{"bytesInOutput":953},"src/utils/helpers.ts":{"bytesInOutput":1222}},"bytes":2327}}}
1
+ {"inputs":{"node_modules/tsup/assets/cjs_shims.js":{"bytes":569,"imports":[],"format":"esm"},"src/utils/urls.ts":{"bytes":1606,"imports":[{"path":"/home/runner/work/deriv-analytics/deriv-analytics/node_modules/tsup/assets/cjs_shims.js","kind":"import-statement","external":true}],"format":"esm"},"src/utils/helpers.ts":{"bytes":5304,"imports":[{"path":"js-cookie","kind":"import-statement","external":true},{"path":"src/utils/urls.ts","kind":"import-statement","original":"./urls"},{"path":"/home/runner/work/deriv-analytics/deriv-analytics/node_modules/tsup/assets/cjs_shims.js","kind":"import-statement","external":true}],"format":"esm"},"src/providers/rudderstack.ts":{"bytes":8864,"imports":[{"path":"@rudderstack/analytics-js","kind":"import-statement","external":true},{"path":"src/utils/urls.ts","kind":"import-statement","original":"../utils/urls"},{"path":"src/utils/helpers.ts","kind":"import-statement","original":"../utils/helpers"},{"path":"/home/runner/work/deriv-analytics/deriv-analytics/node_modules/tsup/assets/cjs_shims.js","kind":"import-statement","external":true}],"format":"esm"},"src/utils/cookie.ts":{"bytes":2956,"imports":[{"path":"js-cookie","kind":"import-statement","external":true},{"path":"src/utils/urls.ts","kind":"import-statement","original":"./urls"},{"path":"/home/runner/work/deriv-analytics/deriv-analytics/node_modules/tsup/assets/cjs_shims.js","kind":"import-statement","external":true}],"format":"esm"},"src/utils/analytics-cache.ts":{"bytes":16877,"imports":[{"path":"src/utils/helpers.ts","kind":"import-statement","original":"./helpers"},{"path":"/home/runner/work/deriv-analytics/deriv-analytics/node_modules/tsup/assets/cjs_shims.js","kind":"import-statement","external":true}],"format":"esm"},"src/providers/growthbook.ts":{"bytes":7568,"imports":[{"path":"@growthbook/growthbook","kind":"import-statement","external":true},{"path":"@rudderstack/analytics-js","kind":"import-statement","external":true},{"path":"./growthbookTypes","kind":"import-statement","external":true},{"path":"src/utils/urls.ts","kind":"import-statement","original":"../utils/urls"},{"path":"src/utils/helpers.ts","kind":"import-statement","original":"../utils/helpers"},{"path":"/home/runner/work/deriv-analytics/deriv-analytics/node_modules/tsup/assets/cjs_shims.js","kind":"import-statement","external":true}],"format":"esm"},"src/providers/posthog.ts":{"bytes":8004,"imports":[{"path":"posthog-js","kind":"import-statement","external":true},{"path":"src/utils/urls.ts","kind":"import-statement","original":"../utils/urls"},{"path":"src/utils/helpers.ts","kind":"import-statement","original":"../utils/helpers"},{"path":"/home/runner/work/deriv-analytics/deriv-analytics/node_modules/tsup/assets/cjs_shims.js","kind":"import-statement","external":true}],"format":"esm"},"src/analytics.ts":{"bytes":27027,"imports":[{"path":"src/providers/rudderstack.ts","kind":"import-statement","original":"./providers/rudderstack"},{"path":"src/utils/cookie.ts","kind":"import-statement","original":"./utils/cookie"},{"path":"src/utils/helpers.ts","kind":"import-statement","original":"./utils/helpers"},{"path":"src/utils/analytics-cache.ts","kind":"import-statement","original":"./utils/analytics-cache"},{"path":"/home/runner/work/deriv-analytics/deriv-analytics/node_modules/tsup/assets/cjs_shims.js","kind":"import-statement","external":true},{"path":"src/providers/growthbook.ts","kind":"dynamic-import","original":"./providers/growthbook"},{"path":"src/providers/posthog.ts","kind":"dynamic-import","original":"./providers/posthog"}],"format":"esm"},"src/index.ts":{"bytes":138,"imports":[{"path":"src/analytics.ts","kind":"import-statement","original":"./analytics"},{"path":"src/utils/analytics-cache.ts","kind":"import-statement","original":"./utils/analytics-cache"},{"path":"/home/runner/work/deriv-analytics/deriv-analytics/node_modules/tsup/assets/cjs_shims.js","kind":"import-statement","external":true}],"format":"esm"}},"outputs":{"dist/index.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":43125},"dist/index.js":{"imports":[{"path":"dist/chunk-Y3QT7NAG.js","kind":"import-statement"},{"path":"dist/chunk-GZBZB5MW.js","kind":"import-statement"},{"path":"dist/chunk-J3V5QNIH.js","kind":"import-statement"},{"path":"js-cookie","kind":"import-statement","external":true},{"path":"dist/providers/growthbook/index.js","kind":"dynamic-import"},{"path":"dist/providers/posthog/index.js","kind":"dynamic-import"}],"exports":["Analytics","cacheTrackEvents"],"entryPoint":"src/index.ts","inputs":{"src/utils/cookie.ts":{"bytesInOutput":975},"src/analytics.ts":{"bytesInOutput":7630},"src/index.ts":{"bytesInOutput":0}},"bytes":8873},"dist/providers/growthbook/index.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":11928},"dist/providers/growthbook/index.js":{"imports":[{"path":"dist/chunk-J3V5QNIH.js","kind":"import-statement"},{"path":"@growthbook/growthbook","kind":"import-statement","external":true},{"path":"@rudderstack/analytics-js","kind":"import-statement","external":true}],"exports":["Growthbook"],"entryPoint":"src/providers/growthbook.ts","inputs":{"src/providers/growthbook.ts":{"bytesInOutput":3392}},"bytes":3527},"dist/providers/rudderstack/index.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":93},"dist/providers/rudderstack/index.js":{"imports":[{"path":"dist/chunk-Y3QT7NAG.js","kind":"import-statement"},{"path":"dist/chunk-J3V5QNIH.js","kind":"import-statement"}],"exports":["RudderStack"],"entryPoint":"src/providers/rudderstack.ts","inputs":{},"bytes":156},"dist/chunk-Y3QT7NAG.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":12573},"dist/chunk-Y3QT7NAG.js":{"imports":[{"path":"dist/chunk-J3V5QNIH.js","kind":"import-statement"},{"path":"@rudderstack/analytics-js","kind":"import-statement","external":true}],"exports":["a"],"inputs":{"src/providers/rudderstack.ts":{"bytesInOutput":3191}},"bytes":3313},"dist/providers/posthog/index.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":11147},"dist/providers/posthog/index.js":{"imports":[{"path":"dist/chunk-J3V5QNIH.js","kind":"import-statement"},{"path":"posthog-js","kind":"import-statement","external":true}],"exports":["Posthog"],"entryPoint":"src/providers/posthog.ts","inputs":{"src/providers/posthog.ts":{"bytesInOutput":2586}},"bytes":2739},"dist/utils/analytics-cache/index.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":93},"dist/utils/analytics-cache/index.js":{"imports":[{"path":"dist/chunk-GZBZB5MW.js","kind":"import-statement"},{"path":"dist/chunk-J3V5QNIH.js","kind":"import-statement"}],"exports":["cacheTrackEvents"],"entryPoint":"src/utils/analytics-cache.ts","inputs":{},"bytes":161},"dist/chunk-GZBZB5MW.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":24674},"dist/chunk-GZBZB5MW.js":{"imports":[{"path":"dist/chunk-J3V5QNIH.js","kind":"import-statement"}],"exports":["a"],"inputs":{"src/utils/analytics-cache.ts":{"bytesInOutput":5807}},"bytes":5917},"dist/chunk-J3V5QNIH.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":10215},"dist/chunk-J3V5QNIH.js":{"imports":[{"path":"js-cookie","kind":"import-statement","external":true}],"exports":["a","b","c","d","e","f","g","h","i","j","k","l"],"inputs":{"src/utils/urls.ts":{"bytesInOutput":953},"src/utils/helpers.ts":{"bytesInOutput":1222}},"bytes":2327}}}
@@ -1 +1 @@
1
- {"inputs":{"node_modules/@rudderstack/analytics-js/dist/npm/modern/esm/index.mjs":{"bytes":264180,"imports":[{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/utils/urls.ts":{"bytes":1606,"imports":[],"format":"esm"},"node_modules/js-cookie/dist/js.cookie.mjs":{"bytes":3475,"imports":[],"format":"esm"},"src/utils/helpers.ts":{"bytes":5304,"imports":[{"path":"node_modules/js-cookie/dist/js.cookie.mjs","kind":"import-statement","original":"js-cookie"},{"path":"src/utils/urls.ts","kind":"import-statement","original":"./urls"}],"format":"esm"},"src/providers/rudderstack.ts":{"bytes":8864,"imports":[{"path":"node_modules/@rudderstack/analytics-js/dist/npm/modern/esm/index.mjs","kind":"import-statement","original":"@rudderstack/analytics-js"},{"path":"src/utils/urls.ts","kind":"import-statement","original":"../utils/urls"},{"path":"src/utils/helpers.ts","kind":"import-statement","original":"../utils/helpers"}],"format":"esm"},"src/utils/cookie.ts":{"bytes":2956,"imports":[{"path":"node_modules/js-cookie/dist/js.cookie.mjs","kind":"import-statement","original":"js-cookie"},{"path":"src/utils/urls.ts","kind":"import-statement","original":"./urls"}],"format":"esm"},"src/utils/analytics-cache.ts":{"bytes":16956,"imports":[{"path":"src/utils/helpers.ts","kind":"import-statement","original":"./helpers"}],"format":"esm"},"src/providers/growthbook.ts":{"bytes":7568,"imports":[{"path":"@growthbook/growthbook","kind":"import-statement","external":true},{"path":"node_modules/@rudderstack/analytics-js/dist/npm/modern/esm/index.mjs","kind":"import-statement","original":"@rudderstack/analytics-js"},{"path":"./growthbookTypes","kind":"import-statement","external":true},{"path":"src/utils/urls.ts","kind":"import-statement","original":"../utils/urls"},{"path":"src/utils/helpers.ts","kind":"import-statement","original":"../utils/helpers"}],"format":"esm"},"node_modules/posthog-js/dist/module.js":{"bytes":182422,"imports":[],"format":"esm"},"src/providers/posthog.ts":{"bytes":8004,"imports":[{"path":"node_modules/posthog-js/dist/module.js","kind":"import-statement","original":"posthog-js"},{"path":"src/utils/urls.ts","kind":"import-statement","original":"../utils/urls"},{"path":"src/utils/helpers.ts","kind":"import-statement","original":"../utils/helpers"}],"format":"esm"},"src/analytics.ts":{"bytes":27027,"imports":[{"path":"src/providers/rudderstack.ts","kind":"import-statement","original":"./providers/rudderstack"},{"path":"src/utils/cookie.ts","kind":"import-statement","original":"./utils/cookie"},{"path":"src/utils/helpers.ts","kind":"import-statement","original":"./utils/helpers"},{"path":"src/utils/analytics-cache.ts","kind":"import-statement","original":"./utils/analytics-cache"},{"path":"src/providers/growthbook.ts","kind":"dynamic-import","original":"./providers/growthbook"},{"path":"src/providers/posthog.ts","kind":"dynamic-import","original":"./providers/posthog"}],"format":"esm"},"src/index.ts":{"bytes":138,"imports":[{"path":"src/analytics.ts","kind":"import-statement","original":"./analytics"},{"path":"src/utils/analytics-cache.ts","kind":"import-statement","original":"./utils/analytics-cache"}],"format":"esm"}},"outputs":{"dist/browser/analytics.esm.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":80249},"dist/browser/analytics.esm.mjs":{"imports":[{"path":"dist/chunk-FY3NPDUL.mjs","kind":"import-statement"},{"path":"dist/chunk-UG2YL4OB.mjs","kind":"import-statement"},{"path":"dist/growthbook-IRLKT4KH.mjs","kind":"dynamic-import"},{"path":"dist/posthog-PBG3EMGB.mjs","kind":"dynamic-import"}],"exports":["Analytics","cacheTrackEvents"],"entryPoint":"src/index.ts","inputs":{"src/providers/rudderstack.ts":{"bytesInOutput":3133},"src/utils/cookie.ts":{"bytesInOutput":953},"src/utils/analytics-cache.ts":{"bytesInOutput":5818},"src/analytics.ts":{"bytesInOutput":7621},"src/index.ts":{"bytesInOutput":0}},"bytes":17804},"dist/growthbook-IRLKT4KH.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":11878},"dist/growthbook-IRLKT4KH.mjs":{"imports":[{"path":"dist/chunk-FY3NPDUL.mjs","kind":"import-statement"},{"path":"dist/chunk-UG2YL4OB.mjs","kind":"import-statement"},{"path":"@growthbook/growthbook","kind":"import-statement","external":true}],"exports":["Growthbook"],"entryPoint":"src/providers/growthbook.ts","inputs":{"src/providers/growthbook.ts":{"bytesInOutput":3332}},"bytes":3536},"dist/chunk-FY3NPDUL.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":424488},"dist/chunk-FY3NPDUL.mjs":{"imports":[{"path":"dist/chunk-UG2YL4OB.mjs","kind":"import-statement"}],"exports":["a"],"inputs":{"node_modules/@rudderstack/analytics-js/dist/npm/modern/esm/index.mjs":{"bytesInOutput":112791}},"bytes":112939},"dist/posthog-PBG3EMGB.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":1130433},"dist/posthog-PBG3EMGB.mjs":{"imports":[{"path":"dist/chunk-UG2YL4OB.mjs","kind":"import-statement"}],"exports":["Posthog"],"entryPoint":"src/providers/posthog.ts","inputs":{"node_modules/posthog-js/dist/module.js":{"bytesInOutput":179398},"src/providers/posthog.ts":{"bytesInOutput":2582}},"bytes":182167},"dist/chunk-UG2YL4OB.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":15946},"dist/chunk-UG2YL4OB.mjs":{"imports":[],"exports":["a","b","c","d","e","f","g","h","i","j","k","l","m","n"],"inputs":{"src/utils/urls.ts":{"bytesInOutput":953},"node_modules/js-cookie/dist/js.cookie.mjs":{"bytesInOutput":1373},"src/utils/helpers.ts":{"bytesInOutput":1197}},"bytes":3983}}}
1
+ {"inputs":{"node_modules/@rudderstack/analytics-js/dist/npm/modern/esm/index.mjs":{"bytes":264180,"imports":[{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/utils/urls.ts":{"bytes":1606,"imports":[],"format":"esm"},"node_modules/js-cookie/dist/js.cookie.mjs":{"bytes":3475,"imports":[],"format":"esm"},"src/utils/helpers.ts":{"bytes":5304,"imports":[{"path":"node_modules/js-cookie/dist/js.cookie.mjs","kind":"import-statement","original":"js-cookie"},{"path":"src/utils/urls.ts","kind":"import-statement","original":"./urls"}],"format":"esm"},"src/providers/rudderstack.ts":{"bytes":8864,"imports":[{"path":"node_modules/@rudderstack/analytics-js/dist/npm/modern/esm/index.mjs","kind":"import-statement","original":"@rudderstack/analytics-js"},{"path":"src/utils/urls.ts","kind":"import-statement","original":"../utils/urls"},{"path":"src/utils/helpers.ts","kind":"import-statement","original":"../utils/helpers"}],"format":"esm"},"src/utils/cookie.ts":{"bytes":2956,"imports":[{"path":"node_modules/js-cookie/dist/js.cookie.mjs","kind":"import-statement","original":"js-cookie"},{"path":"src/utils/urls.ts","kind":"import-statement","original":"./urls"}],"format":"esm"},"src/utils/analytics-cache.ts":{"bytes":16877,"imports":[{"path":"src/utils/helpers.ts","kind":"import-statement","original":"./helpers"}],"format":"esm"},"src/providers/growthbook.ts":{"bytes":7568,"imports":[{"path":"@growthbook/growthbook","kind":"import-statement","external":true},{"path":"node_modules/@rudderstack/analytics-js/dist/npm/modern/esm/index.mjs","kind":"import-statement","original":"@rudderstack/analytics-js"},{"path":"./growthbookTypes","kind":"import-statement","external":true},{"path":"src/utils/urls.ts","kind":"import-statement","original":"../utils/urls"},{"path":"src/utils/helpers.ts","kind":"import-statement","original":"../utils/helpers"}],"format":"esm"},"node_modules/posthog-js/dist/module.js":{"bytes":182422,"imports":[],"format":"esm"},"src/providers/posthog.ts":{"bytes":8004,"imports":[{"path":"node_modules/posthog-js/dist/module.js","kind":"import-statement","original":"posthog-js"},{"path":"src/utils/urls.ts","kind":"import-statement","original":"../utils/urls"},{"path":"src/utils/helpers.ts","kind":"import-statement","original":"../utils/helpers"}],"format":"esm"},"src/analytics.ts":{"bytes":27027,"imports":[{"path":"src/providers/rudderstack.ts","kind":"import-statement","original":"./providers/rudderstack"},{"path":"src/utils/cookie.ts","kind":"import-statement","original":"./utils/cookie"},{"path":"src/utils/helpers.ts","kind":"import-statement","original":"./utils/helpers"},{"path":"src/utils/analytics-cache.ts","kind":"import-statement","original":"./utils/analytics-cache"},{"path":"src/providers/growthbook.ts","kind":"dynamic-import","original":"./providers/growthbook"},{"path":"src/providers/posthog.ts","kind":"dynamic-import","original":"./providers/posthog"}],"format":"esm"},"src/index.ts":{"bytes":138,"imports":[{"path":"src/analytics.ts","kind":"import-statement","original":"./analytics"},{"path":"src/utils/analytics-cache.ts","kind":"import-statement","original":"./utils/analytics-cache"}],"format":"esm"}},"outputs":{"dist/browser/analytics.esm.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":80146},"dist/browser/analytics.esm.mjs":{"imports":[{"path":"dist/chunk-FY3NPDUL.mjs","kind":"import-statement"},{"path":"dist/chunk-UG2YL4OB.mjs","kind":"import-statement"},{"path":"dist/growthbook-IRLKT4KH.mjs","kind":"dynamic-import"},{"path":"dist/posthog-PBG3EMGB.mjs","kind":"dynamic-import"}],"exports":["Analytics","cacheTrackEvents"],"entryPoint":"src/index.ts","inputs":{"src/providers/rudderstack.ts":{"bytesInOutput":3133},"src/utils/cookie.ts":{"bytesInOutput":953},"src/utils/analytics-cache.ts":{"bytesInOutput":5807},"src/analytics.ts":{"bytesInOutput":7621},"src/index.ts":{"bytesInOutput":0}},"bytes":17793},"dist/growthbook-IRLKT4KH.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":11878},"dist/growthbook-IRLKT4KH.mjs":{"imports":[{"path":"dist/chunk-FY3NPDUL.mjs","kind":"import-statement"},{"path":"dist/chunk-UG2YL4OB.mjs","kind":"import-statement"},{"path":"@growthbook/growthbook","kind":"import-statement","external":true}],"exports":["Growthbook"],"entryPoint":"src/providers/growthbook.ts","inputs":{"src/providers/growthbook.ts":{"bytesInOutput":3332}},"bytes":3536},"dist/chunk-FY3NPDUL.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":424488},"dist/chunk-FY3NPDUL.mjs":{"imports":[{"path":"dist/chunk-UG2YL4OB.mjs","kind":"import-statement"}],"exports":["a"],"inputs":{"node_modules/@rudderstack/analytics-js/dist/npm/modern/esm/index.mjs":{"bytesInOutput":112791}},"bytes":112939},"dist/posthog-PBG3EMGB.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":1130433},"dist/posthog-PBG3EMGB.mjs":{"imports":[{"path":"dist/chunk-UG2YL4OB.mjs","kind":"import-statement"}],"exports":["Posthog"],"entryPoint":"src/providers/posthog.ts","inputs":{"node_modules/posthog-js/dist/module.js":{"bytesInOutput":179398},"src/providers/posthog.ts":{"bytesInOutput":2582}},"bytes":182167},"dist/chunk-UG2YL4OB.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":15946},"dist/chunk-UG2YL4OB.mjs":{"imports":[],"exports":["a","b","c","d","e","f","g","h","i","j","k","l","m","n"],"inputs":{"src/utils/urls.ts":{"bytesInOutput":953},"node_modules/js-cookie/dist/js.cookie.mjs":{"bytesInOutput":1373},"src/utils/helpers.ts":{"bytesInOutput":1197}},"bytes":3983}}}
@@ -1 +1 @@
1
- {"inputs":{"node_modules/@rudderstack/analytics-js/dist/npm/modern/esm/index.mjs":{"bytes":264180,"imports":[{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/utils/urls.ts":{"bytes":1606,"imports":[],"format":"esm"},"node_modules/js-cookie/dist/js.cookie.mjs":{"bytes":3475,"imports":[],"format":"esm"},"src/utils/helpers.ts":{"bytes":5304,"imports":[{"path":"node_modules/js-cookie/dist/js.cookie.mjs","kind":"import-statement","original":"js-cookie"},{"path":"src/utils/urls.ts","kind":"import-statement","original":"./urls"}],"format":"esm"},"src/providers/rudderstack.ts":{"bytes":8864,"imports":[{"path":"node_modules/@rudderstack/analytics-js/dist/npm/modern/esm/index.mjs","kind":"import-statement","original":"@rudderstack/analytics-js"},{"path":"src/utils/urls.ts","kind":"import-statement","original":"../utils/urls"},{"path":"src/utils/helpers.ts","kind":"import-statement","original":"../utils/helpers"}],"format":"esm"},"src/utils/cookie.ts":{"bytes":2956,"imports":[{"path":"node_modules/js-cookie/dist/js.cookie.mjs","kind":"import-statement","original":"js-cookie"},{"path":"src/utils/urls.ts","kind":"import-statement","original":"./urls"}],"format":"esm"},"src/utils/analytics-cache.ts":{"bytes":16956,"imports":[{"path":"src/utils/helpers.ts","kind":"import-statement","original":"./helpers"}],"format":"esm"},"node_modules/@growthbook/growthbook/dist/esm/util.mjs":{"bytes":9941,"imports":[],"format":"esm"},"node_modules/@growthbook/growthbook/dist/esm/feature-repository.mjs":{"bytes":13664,"imports":[{"path":"node_modules/@growthbook/growthbook/dist/esm/util.mjs","kind":"import-statement","original":"./util.mjs"}],"format":"esm"},"node_modules/dom-mutator/dist/dom-mutator.esm.js":{"bytes":14835,"imports":[],"format":"esm"},"node_modules/@growthbook/growthbook/dist/esm/mongrule.mjs":{"bytes":7849,"imports":[{"path":"node_modules/@growthbook/growthbook/dist/esm/util.mjs","kind":"import-statement","original":"./util.mjs"}],"format":"esm"},"node_modules/@growthbook/growthbook/dist/esm/core.mjs":{"bytes":30540,"imports":[{"path":"node_modules/@growthbook/growthbook/dist/esm/mongrule.mjs","kind":"import-statement","original":"./mongrule.mjs"},{"path":"node_modules/@growthbook/growthbook/dist/esm/util.mjs","kind":"import-statement","original":"./util.mjs"}],"format":"esm"},"node_modules/@growthbook/growthbook/dist/esm/GrowthBook.mjs":{"bytes":26161,"imports":[{"path":"node_modules/dom-mutator/dist/dom-mutator.esm.js","kind":"import-statement","original":"dom-mutator"},{"path":"node_modules/@growthbook/growthbook/dist/esm/util.mjs","kind":"import-statement","original":"./util.mjs"},{"path":"node_modules/@growthbook/growthbook/dist/esm/feature-repository.mjs","kind":"import-statement","original":"./feature-repository.mjs"},{"path":"node_modules/@growthbook/growthbook/dist/esm/core.mjs","kind":"import-statement","original":"./core.mjs"}],"format":"esm"},"node_modules/@growthbook/growthbook/dist/esm/GrowthBookClient.mjs":{"bytes":8990,"imports":[{"path":"node_modules/@growthbook/growthbook/dist/esm/util.mjs","kind":"import-statement","original":"./util.mjs"},{"path":"node_modules/@growthbook/growthbook/dist/esm/feature-repository.mjs","kind":"import-statement","original":"./feature-repository.mjs"},{"path":"node_modules/@growthbook/growthbook/dist/esm/core.mjs","kind":"import-statement","original":"./core.mjs"}],"format":"esm"},"node_modules/@growthbook/growthbook/dist/esm/sticky-bucket-service.mjs":{"bytes":6878,"imports":[{"path":"node_modules/@growthbook/growthbook/dist/esm/util.mjs","kind":"import-statement","original":"./util.mjs"},{"path":"node_modules/@growthbook/growthbook/dist/esm/core.mjs","kind":"import-statement","original":"./core.mjs"}],"format":"esm"},"node_modules/@growthbook/growthbook/dist/esm/index.mjs":{"bytes":789,"imports":[{"path":"node_modules/@growthbook/growthbook/dist/esm/feature-repository.mjs","kind":"import-statement","original":"./feature-repository.mjs"},{"path":"node_modules/@growthbook/growthbook/dist/esm/GrowthBook.mjs","kind":"import-statement","original":"./GrowthBook.mjs"},{"path":"node_modules/@growthbook/growthbook/dist/esm/GrowthBookClient.mjs","kind":"import-statement","original":"./GrowthBookClient.mjs"},{"path":"node_modules/@growthbook/growthbook/dist/esm/sticky-bucket-service.mjs","kind":"import-statement","original":"./sticky-bucket-service.mjs"},{"path":"node_modules/@growthbook/growthbook/dist/esm/mongrule.mjs","kind":"import-statement","original":"./mongrule.mjs"},{"path":"node_modules/@growthbook/growthbook/dist/esm/util.mjs","kind":"import-statement","original":"./util.mjs"},{"path":"node_modules/@growthbook/growthbook/dist/esm/core.mjs","kind":"import-statement","original":"./core.mjs"}],"format":"esm"},"src/providers/growthbook.ts":{"bytes":7568,"imports":[{"path":"node_modules/@growthbook/growthbook/dist/esm/index.mjs","kind":"import-statement","original":"@growthbook/growthbook"},{"path":"node_modules/@rudderstack/analytics-js/dist/npm/modern/esm/index.mjs","kind":"import-statement","original":"@rudderstack/analytics-js"},{"path":"./growthbookTypes","kind":"import-statement","external":true},{"path":"src/utils/urls.ts","kind":"import-statement","original":"../utils/urls"},{"path":"src/utils/helpers.ts","kind":"import-statement","original":"../utils/helpers"}],"format":"esm"},"node_modules/posthog-js/dist/module.js":{"bytes":182422,"imports":[],"format":"esm"},"src/providers/posthog.ts":{"bytes":8004,"imports":[{"path":"node_modules/posthog-js/dist/module.js","kind":"import-statement","original":"posthog-js"},{"path":"src/utils/urls.ts","kind":"import-statement","original":"../utils/urls"},{"path":"src/utils/helpers.ts","kind":"import-statement","original":"../utils/helpers"}],"format":"esm"},"src/analytics.ts":{"bytes":27027,"imports":[{"path":"src/providers/rudderstack.ts","kind":"import-statement","original":"./providers/rudderstack"},{"path":"src/utils/cookie.ts","kind":"import-statement","original":"./utils/cookie"},{"path":"src/utils/helpers.ts","kind":"import-statement","original":"./utils/helpers"},{"path":"src/utils/analytics-cache.ts","kind":"import-statement","original":"./utils/analytics-cache"},{"path":"src/providers/growthbook.ts","kind":"dynamic-import","original":"./providers/growthbook"},{"path":"src/providers/posthog.ts","kind":"dynamic-import","original":"./providers/posthog"}],"format":"esm"},"src/index.ts":{"bytes":138,"imports":[{"path":"src/analytics.ts","kind":"import-statement","original":"./analytics"},{"path":"src/utils/analytics-cache.ts","kind":"import-statement","original":"./utils/analytics-cache"}],"format":"esm"}},"outputs":{"dist/browser/analytics.bundle.global.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":1865171},"dist/browser/analytics.bundle.global.js":{"imports":[],"exports":[],"entryPoint":"src/index.ts","inputs":{"node_modules/@rudderstack/analytics-js/dist/npm/modern/esm/index.mjs":{"bytesInOutput":114533},"src/utils/urls.ts":{"bytesInOutput":1018},"node_modules/js-cookie/dist/js.cookie.mjs":{"bytesInOutput":1413},"src/utils/helpers.ts":{"bytesInOutput":1276},"node_modules/@growthbook/growthbook/dist/esm/util.mjs":{"bytesInOutput":3635},"node_modules/@growthbook/growthbook/dist/esm/feature-repository.mjs":{"bytesInOutput":5508},"node_modules/dom-mutator/dist/dom-mutator.esm.js":{"bytesInOutput":6145},"node_modules/@growthbook/growthbook/dist/esm/mongrule.mjs":{"bytesInOutput":2996},"node_modules/@growthbook/growthbook/dist/esm/core.mjs":{"bytesInOutput":10937},"node_modules/@growthbook/growthbook/dist/esm/GrowthBook.mjs":{"bytesInOutput":14735},"node_modules/@growthbook/growthbook/dist/esm/index.mjs":{"bytesInOutput":35},"src/providers/growthbook.ts":{"bytesInOutput":3383},"node_modules/posthog-js/dist/module.js":{"bytesInOutput":180549},"src/providers/posthog.ts":{"bytesInOutput":2659},"src/index.ts":{"bytesInOutput":60},"src/providers/rudderstack.ts":{"bytesInOutput":3161},"src/utils/cookie.ts":{"bytesInOutput":985},"src/analytics.ts":{"bytesInOutput":7707},"src/utils/analytics-cache.ts":{"bytesInOutput":5829}},"bytes":367414}}}
1
+ {"inputs":{"node_modules/@rudderstack/analytics-js/dist/npm/modern/esm/index.mjs":{"bytes":264180,"imports":[{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/utils/urls.ts":{"bytes":1606,"imports":[],"format":"esm"},"node_modules/js-cookie/dist/js.cookie.mjs":{"bytes":3475,"imports":[],"format":"esm"},"src/utils/helpers.ts":{"bytes":5304,"imports":[{"path":"node_modules/js-cookie/dist/js.cookie.mjs","kind":"import-statement","original":"js-cookie"},{"path":"src/utils/urls.ts","kind":"import-statement","original":"./urls"}],"format":"esm"},"src/providers/rudderstack.ts":{"bytes":8864,"imports":[{"path":"node_modules/@rudderstack/analytics-js/dist/npm/modern/esm/index.mjs","kind":"import-statement","original":"@rudderstack/analytics-js"},{"path":"src/utils/urls.ts","kind":"import-statement","original":"../utils/urls"},{"path":"src/utils/helpers.ts","kind":"import-statement","original":"../utils/helpers"}],"format":"esm"},"src/utils/cookie.ts":{"bytes":2956,"imports":[{"path":"node_modules/js-cookie/dist/js.cookie.mjs","kind":"import-statement","original":"js-cookie"},{"path":"src/utils/urls.ts","kind":"import-statement","original":"./urls"}],"format":"esm"},"src/utils/analytics-cache.ts":{"bytes":16877,"imports":[{"path":"src/utils/helpers.ts","kind":"import-statement","original":"./helpers"}],"format":"esm"},"node_modules/@growthbook/growthbook/dist/esm/util.mjs":{"bytes":9941,"imports":[],"format":"esm"},"node_modules/@growthbook/growthbook/dist/esm/feature-repository.mjs":{"bytes":13664,"imports":[{"path":"node_modules/@growthbook/growthbook/dist/esm/util.mjs","kind":"import-statement","original":"./util.mjs"}],"format":"esm"},"node_modules/dom-mutator/dist/dom-mutator.esm.js":{"bytes":14835,"imports":[],"format":"esm"},"node_modules/@growthbook/growthbook/dist/esm/mongrule.mjs":{"bytes":7849,"imports":[{"path":"node_modules/@growthbook/growthbook/dist/esm/util.mjs","kind":"import-statement","original":"./util.mjs"}],"format":"esm"},"node_modules/@growthbook/growthbook/dist/esm/core.mjs":{"bytes":30540,"imports":[{"path":"node_modules/@growthbook/growthbook/dist/esm/mongrule.mjs","kind":"import-statement","original":"./mongrule.mjs"},{"path":"node_modules/@growthbook/growthbook/dist/esm/util.mjs","kind":"import-statement","original":"./util.mjs"}],"format":"esm"},"node_modules/@growthbook/growthbook/dist/esm/GrowthBook.mjs":{"bytes":26161,"imports":[{"path":"node_modules/dom-mutator/dist/dom-mutator.esm.js","kind":"import-statement","original":"dom-mutator"},{"path":"node_modules/@growthbook/growthbook/dist/esm/util.mjs","kind":"import-statement","original":"./util.mjs"},{"path":"node_modules/@growthbook/growthbook/dist/esm/feature-repository.mjs","kind":"import-statement","original":"./feature-repository.mjs"},{"path":"node_modules/@growthbook/growthbook/dist/esm/core.mjs","kind":"import-statement","original":"./core.mjs"}],"format":"esm"},"node_modules/@growthbook/growthbook/dist/esm/GrowthBookClient.mjs":{"bytes":8990,"imports":[{"path":"node_modules/@growthbook/growthbook/dist/esm/util.mjs","kind":"import-statement","original":"./util.mjs"},{"path":"node_modules/@growthbook/growthbook/dist/esm/feature-repository.mjs","kind":"import-statement","original":"./feature-repository.mjs"},{"path":"node_modules/@growthbook/growthbook/dist/esm/core.mjs","kind":"import-statement","original":"./core.mjs"}],"format":"esm"},"node_modules/@growthbook/growthbook/dist/esm/sticky-bucket-service.mjs":{"bytes":6878,"imports":[{"path":"node_modules/@growthbook/growthbook/dist/esm/util.mjs","kind":"import-statement","original":"./util.mjs"},{"path":"node_modules/@growthbook/growthbook/dist/esm/core.mjs","kind":"import-statement","original":"./core.mjs"}],"format":"esm"},"node_modules/@growthbook/growthbook/dist/esm/index.mjs":{"bytes":789,"imports":[{"path":"node_modules/@growthbook/growthbook/dist/esm/feature-repository.mjs","kind":"import-statement","original":"./feature-repository.mjs"},{"path":"node_modules/@growthbook/growthbook/dist/esm/GrowthBook.mjs","kind":"import-statement","original":"./GrowthBook.mjs"},{"path":"node_modules/@growthbook/growthbook/dist/esm/GrowthBookClient.mjs","kind":"import-statement","original":"./GrowthBookClient.mjs"},{"path":"node_modules/@growthbook/growthbook/dist/esm/sticky-bucket-service.mjs","kind":"import-statement","original":"./sticky-bucket-service.mjs"},{"path":"node_modules/@growthbook/growthbook/dist/esm/mongrule.mjs","kind":"import-statement","original":"./mongrule.mjs"},{"path":"node_modules/@growthbook/growthbook/dist/esm/util.mjs","kind":"import-statement","original":"./util.mjs"},{"path":"node_modules/@growthbook/growthbook/dist/esm/core.mjs","kind":"import-statement","original":"./core.mjs"}],"format":"esm"},"src/providers/growthbook.ts":{"bytes":7568,"imports":[{"path":"node_modules/@growthbook/growthbook/dist/esm/index.mjs","kind":"import-statement","original":"@growthbook/growthbook"},{"path":"node_modules/@rudderstack/analytics-js/dist/npm/modern/esm/index.mjs","kind":"import-statement","original":"@rudderstack/analytics-js"},{"path":"./growthbookTypes","kind":"import-statement","external":true},{"path":"src/utils/urls.ts","kind":"import-statement","original":"../utils/urls"},{"path":"src/utils/helpers.ts","kind":"import-statement","original":"../utils/helpers"}],"format":"esm"},"node_modules/posthog-js/dist/module.js":{"bytes":182422,"imports":[],"format":"esm"},"src/providers/posthog.ts":{"bytes":8004,"imports":[{"path":"node_modules/posthog-js/dist/module.js","kind":"import-statement","original":"posthog-js"},{"path":"src/utils/urls.ts","kind":"import-statement","original":"../utils/urls"},{"path":"src/utils/helpers.ts","kind":"import-statement","original":"../utils/helpers"}],"format":"esm"},"src/analytics.ts":{"bytes":27027,"imports":[{"path":"src/providers/rudderstack.ts","kind":"import-statement","original":"./providers/rudderstack"},{"path":"src/utils/cookie.ts","kind":"import-statement","original":"./utils/cookie"},{"path":"src/utils/helpers.ts","kind":"import-statement","original":"./utils/helpers"},{"path":"src/utils/analytics-cache.ts","kind":"import-statement","original":"./utils/analytics-cache"},{"path":"src/providers/growthbook.ts","kind":"dynamic-import","original":"./providers/growthbook"},{"path":"src/providers/posthog.ts","kind":"dynamic-import","original":"./providers/posthog"}],"format":"esm"},"src/index.ts":{"bytes":138,"imports":[{"path":"src/analytics.ts","kind":"import-statement","original":"./analytics"},{"path":"src/utils/analytics-cache.ts","kind":"import-statement","original":"./utils/analytics-cache"}],"format":"esm"}},"outputs":{"dist/browser/analytics.bundle.global.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":1865068},"dist/browser/analytics.bundle.global.js":{"imports":[],"exports":[],"entryPoint":"src/index.ts","inputs":{"node_modules/@rudderstack/analytics-js/dist/npm/modern/esm/index.mjs":{"bytesInOutput":114533},"src/utils/urls.ts":{"bytesInOutput":1018},"node_modules/js-cookie/dist/js.cookie.mjs":{"bytesInOutput":1413},"src/utils/helpers.ts":{"bytesInOutput":1276},"node_modules/@growthbook/growthbook/dist/esm/util.mjs":{"bytesInOutput":3635},"node_modules/@growthbook/growthbook/dist/esm/feature-repository.mjs":{"bytesInOutput":5508},"node_modules/dom-mutator/dist/dom-mutator.esm.js":{"bytesInOutput":6145},"node_modules/@growthbook/growthbook/dist/esm/mongrule.mjs":{"bytesInOutput":2996},"node_modules/@growthbook/growthbook/dist/esm/core.mjs":{"bytesInOutput":10937},"node_modules/@growthbook/growthbook/dist/esm/GrowthBook.mjs":{"bytesInOutput":14735},"node_modules/@growthbook/growthbook/dist/esm/index.mjs":{"bytesInOutput":35},"src/providers/growthbook.ts":{"bytesInOutput":3383},"node_modules/posthog-js/dist/module.js":{"bytesInOutput":180549},"src/providers/posthog.ts":{"bytesInOutput":2659},"src/index.ts":{"bytesInOutput":60},"src/providers/rudderstack.ts":{"bytesInOutput":3161},"src/utils/cookie.ts":{"bytesInOutput":985},"src/analytics.ts":{"bytesInOutput":7707},"src/utils/analytics-cache.ts":{"bytesInOutput":5818}},"bytes":367403}}}
@@ -1,2 +1,2 @@
1
- 'use strict';var chunkSQ6Q4Z5S_js=require('../../chunk-SQ6Q4Z5S.js');require('../../chunk-J3V5QNIH.js');Object.defineProperty(exports,"cacheTrackEvents",{enumerable:true,get:function(){return chunkSQ6Q4Z5S_js.a}});//# sourceMappingURL=index.js.map
1
+ 'use strict';var chunkGZBZB5MW_js=require('../../chunk-GZBZB5MW.js');require('../../chunk-J3V5QNIH.js');Object.defineProperty(exports,"cacheTrackEvents",{enumerable:true,get:function(){return chunkGZBZB5MW_js.a}});//# sourceMappingURL=index.js.map
2
2
  //# sourceMappingURL=index.js.map
@@ -1,2 +1,2 @@
1
- export{a as cacheTrackEvents}from'../../chunk-LIPHY7JK.mjs';import'../../chunk-GGU2UVKH.mjs';//# sourceMappingURL=index.mjs.map
1
+ export{a as cacheTrackEvents}from'../../chunk-DWOZQCV4.mjs';import'../../chunk-GGU2UVKH.mjs';//# sourceMappingURL=index.mjs.map
2
2
  //# sourceMappingURL=index.mjs.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deriv-com/analytics",
3
- "version": "1.39.2",
3
+ "version": "1.39.3",
4
4
  "description": "Comprehensive analytics package for Deriv applications. Provides unified event tracking, A/B testing, and user analytics through RudderStack, PostHog and GrowthBook integrations with built-in caching and offline support.",
5
5
  "keywords": [
6
6
  "rudderstack",
@@ -1,3 +0,0 @@
1
- import {g}from'./chunk-GGU2UVKH.mjs';/* @deriv-com/analytics - NPM Package - Built with tsup */
2
- var p=class{constructor(){this.interval=null;this.responses=[];this.isTrackingResponses=false;this.delegatedSelectors=new Set;this.debug=false;this.log=g("[CacheManager]",()=>this.debug);this.addEventhandler=this.addEventHandler.bind(this);}setDebug(e){this.debug=e;}hash(e,n=32){let t=a=>{let r=2166136261;for(let c=0;c<a.length;c++)r^=a.charCodeAt(c),r=r*16777619>>>0;return r.toString(16)},i=a=>btoa(a),s=t(e),o=i(s);for(;o.length<n;)o+=i(t(o));return o.substring(0,n)}getCookies(e){let t=`; ${document.cookie}`.split(`; ${e}=`);if(t.length===2){let i=decodeURIComponent(t.pop().split(";").shift());try{return JSON.parse(i)}catch{return i}}return null}trackPageUnload(){typeof window>"u"||window.addEventListener("beforeunload",()=>{this.isPageViewSent()||this.push("cached_analytics_page_views",{name:window.location.href,properties:{url:window.location.href}});});}trackResponses(){if(typeof window>"u"||typeof XMLHttpRequest>"u")return;let e=XMLHttpRequest.prototype.open,n=XMLHttpRequest.prototype.send;XMLHttpRequest.prototype.open=function(t,i){return this._url=i,this._method=t,e.apply(this,arguments)},XMLHttpRequest.prototype.send=function(t){return this.addEventListener("load",function(){let i=null;if(typeof t=="string")try{i=JSON.parse(t);}catch{i=t;}let s={url:this._url,method:this._method,status:this.status,headers:this.getAllResponseHeaders(),data:this.responseText,payload:i};f.responses.push(s);}),n.apply(this,arguments)},this.isTrackingResponses=true;}getAnalyticsInstance(){return typeof window>"u"?null:window.AnalyticsInstance??window.DerivAnalytics?.Analytics??window.Analytics?.Analytics}isReady(){if(typeof window>"u")return false;let e=this.getAnalyticsInstance();return e?!!e.getInstances?.()?.tracking:false}parseCookies(e){if(typeof document>"u")return null;let n=document.cookie.split("; ");for(let t of n){let i=t.indexOf("=");if(i!==-1&&decodeURIComponent(t.slice(0,i))===e){let s=t.slice(i+1);try{return JSON.parse(decodeURIComponent(s))}catch{return decodeURIComponent(s)}}}return null}isPageViewSent(){return !!this.responses.find(e=>e.payload?.type==="page"&&e.payload?.anonymousId)}set(e){this.log("set | caching event to cookie",e),this.push("cached_analytics_events",e);}push(e,n){if(typeof document>"u")return;let t=[],i=this.parseCookies(e);i&&Array.isArray(i)&&(t=i),t.push(n);let s=this.getAllowedDomain(),o=365*24*60*60,a=`${e}=${encodeURIComponent(JSON.stringify(t))}; path=/; Domain=${s}; max-age=${o}; SameSite=Lax`;document.cookie=a;}getAllowedDomain(){if(typeof window>"u")return "";let e=window.location.hostname;if(e==="localhost"||/^\d+\.\d+\.\d+\.\d+$/.test(e))return e;let n=e.split(".");return n.length===1?e:`.${n.slice(-2).join(".")}`}processEvent(e){let n=this.getCookies("client_information");if(n){let{email:t=null}=n;t&&(e.properties.email_hash=this.hash(t));}if(e?.properties?.email){let t=e.properties.email;delete e.properties.email,e.properties.email_hash=this.hash(t);}return e}track(e,n=false){if(typeof window>"u")return;let t=this.processEvent(e),i=this.getAnalyticsInstance();this.isReady()&&!n?(this.log("track | analytics ready \u2014 calling trackEvent",{event:t.name,properties:t.properties}),i.trackEvent(t.name,t.properties)):(this.log("track | analytics not ready or cache=true \u2014 storing event",{event:t.name,cache:n}),this.set(t));}pageView(){typeof window>"u"||(this.log("pageView | starting page view polling"),this.isTrackingResponses||(this.trackResponses(),this.trackPageUnload()),this.interval=setInterval(()=>{let e=window.Analytics;typeof e<"u"&&typeof e.Analytics?.pageView=="function"&&this.isReady()&&(this.log("pageView | analytics ready \u2014 sending page view",{href:window.location.href}),e.Analytics.pageView(window.location.href,"Trader's hub")),this.isPageViewSent()&&(this.log("pageView | page view confirmed sent \u2014 clearing interval"),this.interval&&clearInterval(this.interval));},1e3));}listen(e,{name:n="",properties:t={}},i=false,s=null){let o=r=>{r.dataset?.clickEventTracking||(r.addEventListener("click",c=>{let l={name:n,properties:t,cache:i};if(typeof s=="function"){let d=s(c);l={...d,cache:d.cache??i};}this.track(l,l.cache??false);}),r.dataset.clickEventTracking="true");};(e instanceof NodeList?Array.from(e):[e]).forEach(o);}addEventHandler(e){return typeof window>"u"?this:(e.forEach(({element:n,event:t={name:"",properties:{}},cache:i=false,callback:s=null})=>{if(typeof n=="string"){let o=n;if(!this.delegatedSelectors.has(o)){let a=r=>{let c=r.target;if(!c)return;let l=c.closest(o);if(l&&!l.dataset?.clickEventTracking){let d={name:t.name,properties:t.properties,cache:i};if(typeof s=="function"){let h=s(r);d={...h,cache:h.cache??i};}l.dataset.clickEventTracking="true",this.track(d,d.cache??false);}};document.addEventListener("click",a),this.delegatedSelectors.add(o);}}else (n instanceof NodeList?Array.from(n):[n]).forEach(a=>{a&&!a.dataset?.clickEventTracking&&this.listen(a,t,i,s);});}),this)}loadEvent(e){return this.log("loadEvent | firing load events",e.map(n=>n.event.name)),e.forEach(({event:n})=>{let{name:t,properties:i}=n;this.track({name:t,properties:i});}),this}pageLoadEvent(e){if(typeof window>"u")return this;let n=window.location.pathname.slice(1);return this.log("pageLoadEvent | checking page load events",{pathname:n}),e.forEach(({pages:t=[],excludedPages:i=[],event:s,callback:o=null})=>{let a=false;if(t.length?t.includes(n)&&(a=true):i.length&&i.includes(n)||(a=true),a){let r=o?o():s;this.log("pageLoadEvent | dispatching event for page",{pathname:n,event:r.name}),this.loadEvent([{event:r}]);}else this.log("pageLoadEvent | skipped event for page",{pathname:n,event:s.name,pages:t,excludedPages:i});}),this}clearInterval(){this.interval&&(clearInterval(this.interval),this.interval=null);}cleanup(){this.clearInterval(),this.responses=[],this.isTrackingResponses=false;}},f=new p;typeof window<"u"&&(window.cacheTrackEvents=f);export{f as a};//# sourceMappingURL=chunk-LIPHY7JK.mjs.map
3
- //# sourceMappingURL=chunk-LIPHY7JK.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/utils/analytics-cache.ts"],"names":["AnalyticsCacheManager","createLogger","debug","inputString","desiredLength","fnv1aHash","string","hash","i","base64Encode","combined","name","parts","cookieValue","originalXhrOpen","originalXhrSend","method","url","body","parsedPayload","responseData","cacheTrackEvents","instance","cookieName","cookies","cookie","eqIdx","raw","event","data","storedCookies","cacheCookie","domain","maxAge","cookieString","hostname","clientInfo","email","originalEvent","cache","Analytics","element","properties","callback","addClickListener","el","e","callbackResult","items","selector","delegatedHandler","target","matched","evt","pathname","pages","excludedPages","dispatch","eventData"],"mappings":";AA+CA,IAAMA,CAAAA,CAAN,KAA4B,CAA5B,WAAA,EAAA,CACI,KAAQ,QAAA,CAAkC,IAAA,CAC1C,IAAA,CAAQ,SAAA,CAA4B,EAAC,CACrC,IAAA,CAAQ,mBAAA,CAAsB,MAC9B,IAAA,CAAQ,kBAAA,CAAkC,IAAI,GAAA,CAC9C,IAAA,CAAQ,KAAA,CAAQ,KAAA,CAChB,IAAA,CAAQ,IAAMC,CAAAA,CAAa,gBAAA,CAAkB,IAAM,IAAA,CAAK,KAAK,CAAA,CA0Y7D,IAAA,CAAA,eAAA,CAAkB,IAAA,CAAK,gBAAgB,IAAA,CAAK,IAAI,EAAA,CAxYhD,QAAA,CAASC,CAAAA,CAAsB,CAC3B,IAAA,CAAK,KAAA,CAAQA,EACjB,CAKQ,IAAA,CAAKC,CAAAA,CAAqBC,CAAAA,CAAgB,EAAA,CAAY,CAC1D,IAAMC,CAAAA,CAAaC,GAA2B,CAC1C,IAAIC,CAAAA,CAAO,UAAA,CACX,IAAA,IAASC,CAAAA,CAAI,CAAA,CAAGA,CAAAA,CAAIF,EAAO,MAAA,CAAQE,CAAAA,EAAAA,CAC/BD,CAAAA,EAAQD,CAAAA,CAAO,UAAA,CAAWE,CAAC,CAAA,CAC3BD,CAAAA,CAAQA,EAAO,QAAA,GAAgB,CAAA,CAEnC,OAAOA,CAAAA,CAAK,QAAA,CAAS,EAAE,CAC3B,CAAA,CAEME,EAAgBH,CAAAA,EAA2B,IAAA,CAAKA,CAAM,CAAA,CAExDC,CAAAA,CAAOF,CAAAA,CAAUF,CAAW,CAAA,CAC5BO,EAAWD,CAAAA,CAAaF,CAAI,CAAA,CAEhC,KAAOG,CAAAA,CAAS,MAAA,CAASN,CAAAA,EACrBM,CAAAA,EAAYD,EAAaJ,CAAAA,CAAUK,CAAQ,CAAC,CAAA,CAGhD,OAAOA,CAAAA,CAAS,SAAA,CAAU,CAAA,CAAGN,CAAa,CAC9C,CAKA,UAAA,CAAWO,CAAAA,CAAmB,CAE1B,IAAMC,CAAAA,CADQ,CAAA,EAAA,EAAK,SAAS,MAAM,CAAA,CAAA,CACd,KAAA,CAAM,CAAA,EAAA,EAAKD,CAAI,CAAA,CAAA,CAAG,CAAA,CACtC,GAAIC,EAAM,MAAA,GAAW,CAAA,CAAG,CACpB,IAAMC,CAAAA,CAAc,kBAAA,CAAmBD,CAAAA,CAAM,GAAA,GAAO,KAAA,CAAM,GAAG,CAAA,CAAE,KAAA,EAAQ,CAAA,CAEvE,GAAI,CACA,OAAO,IAAA,CAAK,KAAA,CAAMC,CAAW,CACjC,CAAA,KAAY,CACR,OAAOA,CACX,CACJ,CACA,OAAO,IACX,CAKA,eAAA,EAAwB,CAChB,OAAO,MAAA,CAAW,KAEtB,MAAA,CAAO,gBAAA,CAAiB,cAAA,CAAgB,IAAM,CACrC,IAAA,CAAK,cAAA,EAAe,EACrB,KAAK,IAAA,CAAK,6BAAA,CAA+B,CACrC,IAAA,CAAM,MAAA,CAAO,QAAA,CAAS,IAAA,CACtB,UAAA,CAAY,CACR,GAAA,CAAK,MAAA,CAAO,QAAA,CAAS,IACzB,CACJ,CAAC,EAET,CAAC,EACL,CAKA,cAAA,EAAuB,CACnB,GAAI,OAAO,MAAA,CAAW,GAAA,EAAe,OAAO,eAAmB,GAAA,CAAa,OAE5E,IAAMC,CAAAA,CAAkB,cAAA,CAAe,SAAA,CAAU,IAAA,CAC3CC,CAAAA,CAAkB,eAAe,SAAA,CAAU,IAAA,CAEjD,cAAA,CAAe,SAAA,CAAU,IAAA,CAAO,SAAUC,CAAAA,CAAgBC,CAAAA,CAAmB,CACxE,OAAC,IAAA,CAAa,IAAA,CAAOA,CAAAA,CACpB,IAAA,CAAa,OAAA,CAAUD,CAAAA,CAClBF,CAAAA,CAAgB,MAAM,IAAA,CAAM,SAAgB,CACvD,CAAA,CAEA,cAAA,CAAe,SAAA,CAAU,IAAA,CAAO,SAAUI,EAAiD,CACvF,OAAA,IAAA,CAAK,gBAAA,CAAiB,MAAA,CAAQ,UAAY,CACtC,IAAIC,CAAAA,CAAgB,KAEpB,GAAI,OAAOD,CAAAA,EAAS,QAAA,CAChB,GAAI,CACAC,CAAAA,CAAgB,IAAA,CAAK,MAAMD,CAAI,EACnC,CAAA,KAAY,CACRC,CAAAA,CAAgBD,EACpB,CAGJ,IAAME,EAA6B,CAC/B,GAAA,CAAM,IAAA,CAAa,IAAA,CACnB,MAAA,CAAS,IAAA,CAAa,OAAA,CACtB,MAAA,CAAQ,KAAK,MAAA,CACb,OAAA,CAAS,IAAA,CAAK,qBAAA,EAAsB,CACpC,IAAA,CAAM,IAAA,CAAK,YAAA,CACX,QAASD,CACb,CAAA,CACAE,CAAAA,CAAiB,SAAA,CAAU,IAAA,CAAKD,CAAY,EAChD,CAAC,EAEML,CAAAA,CAAgB,KAAA,CAAM,IAAA,CAAM,SAAgB,CACvD,CAAA,CAEA,IAAA,CAAK,mBAAA,CAAsB,KAC/B,CASQ,oBAAA,EAA4B,CAChC,OAAI,OAAO,MAAA,CAAW,GAAA,CAAoB,IAAA,CAErC,OAAe,iBAAA,EACf,MAAA,CAAe,cAAA,EAAgB,SAAA,EAC/B,MAAA,CAAe,SAAA,EAAW,SAEnC,CAKA,SAAmB,CACf,GAAI,OAAO,MAAA,CAAW,GAAA,CAAa,OAAO,MAAA,CAC1C,IAAMO,EAAW,IAAA,CAAK,oBAAA,EAAqB,CAC3C,OAAKA,CAAAA,CACE,CAAC,CAACA,CAAAA,CAAS,gBAAe,EAAG,QAAA,CADd,KAE1B,CAOQ,YAAA,CAAaC,CAAAA,CAAyB,CAC1C,GAAI,OAAO,QAAA,CAAa,GAAA,CAAa,OAAO,IAAA,CAE5C,IAAMC,CAAAA,CAAU,QAAA,CAAS,MAAA,CAAO,MAAM,IAAI,CAAA,CAC1C,IAAA,IAAWC,CAAAA,IAAUD,CAAAA,CAAS,CAC1B,IAAME,CAAAA,CAAQD,EAAO,OAAA,CAAQ,GAAG,CAAA,CAChC,GAAIC,CAAAA,GAAU,EAAA,EACV,kBAAA,CAAmBD,CAAAA,CAAO,MAAM,CAAA,CAAGC,CAAK,CAAC,CAAA,GAAMH,CAAAA,CAAY,CAC3D,IAAMI,CAAAA,CAAMF,EAAO,KAAA,CAAMC,CAAAA,CAAQ,CAAC,CAAA,CAClC,GAAI,CACA,OAAO,IAAA,CAAK,MAAM,kBAAA,CAAmBC,CAAG,CAAC,CAC7C,CAAA,KAAQ,CACJ,OAAO,kBAAA,CAAmBA,CAAG,CACjC,CACJ,CACJ,CACA,OAAO,IACX,CAKA,cAAA,EAA0B,CACtB,OAAO,CAAC,CAAC,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,CAAA,EAAK,CAAA,CAAE,SAAS,IAAA,GAAS,MAAA,EAAU,CAAA,CAAE,OAAA,EAAS,WAAW,CAC1F,CAKA,GAAA,CAAIC,EAA0B,CAC1B,IAAA,CAAK,GAAA,CAAI,+BAAA,CAAiCA,CAAK,CAAA,CAC/C,IAAA,CAAK,IAAA,CAAK,0BAA2BA,CAAK,EAC9C,CAKA,IAAA,CAAKL,CAAAA,CAAoBM,CAAAA,CAAiB,CACtC,GAAI,OAAO,QAAA,CAAa,GAAA,CAAa,OAErC,IAAIC,CAAAA,CAAuB,EAAC,CACtBC,CAAAA,CAAc,KAAK,YAAA,CAAaR,CAAU,CAAA,CAC5CQ,CAAAA,EAAe,KAAA,CAAM,OAAA,CAAQA,CAAW,CAAA,GACxCD,EAAgBC,CAAAA,CAAAA,CAGpBD,CAAAA,CAAc,IAAA,CAAKD,CAAI,CAAA,CAEvB,IAAMG,CAAAA,CAAS,IAAA,CAAK,kBAAiB,CAC/BC,CAAAA,CAAS,GAAA,CAAM,EAAA,CAAK,EAAA,CAAK,EAAA,CACzBC,CAAAA,CAAe,CAAA,EAAGX,CAAU,CAAA,CAAA,EAAI,kBAAA,CAAmB,IAAA,CAAK,SAAA,CAAUO,CAAa,CAAC,CAAC,CAAA,iBAAA,EAAoBE,CAAM,CAAA,UAAA,EAAaC,CAAM,CAAA,cAAA,CAAA,CAEpI,QAAA,CAAS,MAAA,CAASC,EACtB,CAOQ,gBAAA,EAA2B,CAC/B,GAAI,OAAO,MAAA,CAAW,GAAA,CAAa,OAAO,EAAA,CAE1C,IAAMC,CAAAA,CAAW,OAAO,QAAA,CAAS,QAAA,CAGjC,GAAIA,CAAAA,GAAa,WAAA,EAAe,sBAAA,CAAuB,IAAA,CAAKA,CAAQ,EAChE,OAAOA,CAAAA,CAGX,IAAMvB,CAAAA,CAAQuB,CAAAA,CAAS,KAAA,CAAM,GAAG,CAAA,CAGhC,OAAIvB,CAAAA,CAAM,MAAA,GAAW,CAAA,CACVuB,CAAAA,CAIJ,CAAA,CAAA,EAAIvB,CAAAA,CAAM,KAAA,CAAM,EAAE,EAAE,IAAA,CAAK,GAAG,CAAC,CAAA,CACxC,CAKA,YAAA,CAAagB,CAAAA,CAAiC,CAC1C,IAAMQ,CAAAA,CAAa,IAAA,CAAK,UAAA,CAAW,oBAAoB,CAAA,CAEvD,GAAIA,CAAAA,CAAY,CACZ,GAAM,CAAE,KAAA,CAAAC,CAAAA,CAAQ,IAAK,CAAA,CAAID,CAAAA,CAErBC,CAAAA,GACAT,CAAAA,CAAM,WAAW,UAAA,CAAa,IAAA,CAAK,IAAA,CAAKS,CAAK,CAAA,EAErD,CAEA,GAAIT,CAAAA,EAAO,YAAY,KAAA,CAAO,CAC1B,IAAMS,CAAAA,CAAQT,CAAAA,CAAM,UAAA,CAAW,KAAA,CAC/B,OAAOA,EAAM,UAAA,CAAW,KAAA,CACxBA,CAAAA,CAAM,UAAA,CAAW,UAAA,CAAa,IAAA,CAAK,IAAA,CAAKS,CAAK,EACjD,CAEA,OAAOT,CACX,CAKA,KAAA,CAAMU,CAAAA,CAA4BC,CAAAA,CAAQ,KAAA,CAAa,CACnD,GAAI,OAAO,MAAA,CAAW,GAAA,CAAa,OAEnC,IAAMX,CAAAA,CAAQ,IAAA,CAAK,aAAaU,CAAa,CAAA,CACvChB,CAAAA,CAAW,IAAA,CAAK,oBAAA,EAAqB,CAEvC,IAAA,CAAK,OAAA,IAAa,CAACiB,CAAAA,EACnB,IAAA,CAAK,GAAA,CAAI,mDAAA,CAAgD,CACrD,KAAA,CAAOX,CAAAA,CAAM,KACb,UAAA,CAAYA,CAAAA,CAAM,UACtB,CAAC,CAAA,CACDN,CAAAA,CAAS,UAAA,CAAWM,CAAAA,CAAM,KAAMA,CAAAA,CAAM,UAAU,CAAA,GAEhD,IAAA,CAAK,GAAA,CAAI,gEAAA,CAA6D,CAAE,KAAA,CAAOA,EAAM,IAAA,CAAM,KAAA,CAAAW,CAAM,CAAC,CAAA,CAClG,IAAA,CAAK,GAAA,CAAIX,CAAK,GAEtB,CAKA,QAAA,EAAiB,CACT,OAAO,MAAA,CAAW,GAAA,GAEtB,IAAA,CAAK,GAAA,CAAI,uCAAuC,CAAA,CAE3C,IAAA,CAAK,mBAAA,GACN,IAAA,CAAK,cAAA,EAAe,CACpB,IAAA,CAAK,eAAA,IAGT,IAAA,CAAK,QAAA,CAAW,WAAA,CAAY,IAAM,CAC9B,IAAMY,CAAAA,CAAa,MAAA,CAAe,UAG9B,OAAOA,CAAAA,CAAc,GAAA,EACrB,OAAOA,CAAAA,CAAU,SAAA,EAAW,QAAA,EAAa,UAAA,EACzC,KAAK,OAAA,EAAQ,GAEb,IAAA,CAAK,GAAA,CAAI,qDAAA,CAAkD,CAAE,IAAA,CAAM,MAAA,CAAO,SAAS,IAAK,CAAC,CAAA,CACzFA,CAAAA,CAAU,SAAA,CAAU,QAAA,CAAS,MAAA,CAAO,QAAA,CAAS,KAAM,cAAc,CAAA,CAAA,CAGjE,IAAA,CAAK,cAAA,EAAe,GACpB,IAAA,CAAK,GAAA,CAAI,8DAAyD,EAC9D,IAAA,CAAK,QAAA,EAAU,aAAA,CAAc,IAAA,CAAK,QAAQ,CAAA,EAEtD,CAAA,CAAG,GAAI,GACX,CAKA,MAAA,CACIC,CAAAA,CACA,CAAE,IAAA,CAAA9B,CAAAA,CAAO,EAAA,CAAI,UAAA,CAAA+B,EAAa,EAAG,CAAA,CAC7BH,CAAAA,CAAQ,KAAA,CACRI,CAAAA,CAAsG,IAAA,CAClG,CACJ,IAAMC,CAAAA,CAAoBC,CAAAA,EAAgB,CAChCA,CAAAA,CAAW,OAAA,EAAS,kBAAA,GACtBA,CAAAA,CAAG,gBAAA,CAAiB,QAAUC,CAAAA,EAAa,CACvC,IAAIlB,CAAAA,CAAQ,CACR,IAAA,CAAAjB,CAAAA,CACA,UAAA,CAAA+B,EACA,KAAA,CAAAH,CACJ,CAAA,CAEA,GAAI,OAAOI,CAAAA,EAAa,UAAA,CAAY,CAChC,IAAMI,CAAAA,CAAiBJ,CAAAA,CAASG,CAAC,CAAA,CACjClB,CAAAA,CAAQ,CACJ,GAAGmB,CAAAA,CACH,MAAOA,CAAAA,CAAe,KAAA,EAASR,CACnC,EACJ,CAEA,IAAA,CAAK,KAAA,CAAMX,CAAAA,CAAOA,EAAM,KAAA,EAAS,KAAK,EAC1C,CAAC,CAAA,CACCiB,CAAAA,CAAW,OAAA,CAAQ,kBAAA,CAAqB,QAElD,CAAA,CAAA,CAEiBJ,CAAAA,YAAmB,QAAA,CAAW,KAAA,CAAM,IAAA,CAAKA,CAA8B,CAAA,CAAI,CAACA,CAAO,CAAA,EAC3F,OAAA,CAAQG,CAAgB,EACrC,CAMA,eAAA,CAAgBI,CAAAA,CAAoC,CAChD,OAAI,OAAO,MAAA,CAAW,GAAA,CAAoB,IAAA,EAE1CA,CAAAA,CAAM,OAAA,CAAQ,CAAC,CAAE,QAAAP,CAAAA,CAAS,KAAA,CAAAb,CAAAA,CAAQ,CAAE,IAAA,CAAM,EAAA,CAAI,UAAA,CAAY,EAAG,CAAA,CAAG,KAAA,CAAAW,CAAAA,CAAQ,KAAA,CAAO,QAAA,CAAAI,CAAAA,CAAW,IAAK,CAAA,GAAM,CAEjG,GAAI,OAAOF,CAAAA,EAAY,QAAA,CAAU,CAC7B,IAAMQ,CAAAA,CAAWR,CAAAA,CAEjB,GAAI,CAAC,IAAA,CAAK,kBAAA,CAAmB,GAAA,CAAIQ,CAAQ,CAAA,CAAG,CACxC,IAAMC,EAAoBJ,CAAAA,EAAa,CACnC,IAAMK,CAAAA,CAASL,CAAAA,CAAE,MAAA,CACjB,GAAI,CAACK,EAAQ,OAEb,IAAMC,CAAAA,CAAUD,CAAAA,CAAO,OAAA,CAAQF,CAAQ,CAAA,CACvC,GAAIG,GAAW,CAAEA,CAAAA,CAAgB,OAAA,EAAS,kBAAA,CAAoB,CAC1D,IAAIC,CAAAA,CAAW,CACX,KAAMzB,CAAAA,CAAM,IAAA,CACZ,UAAA,CAAYA,CAAAA,CAAM,UAAA,CAClB,KAAA,CAAAW,CACJ,CAAA,CAEA,GAAI,OAAOI,CAAAA,EAAa,UAAA,CAAY,CAChC,IAAMI,CAAAA,CAAiBJ,CAAAA,CAASG,CAAC,EACjCO,CAAAA,CAAM,CACF,GAAGN,CAAAA,CACH,KAAA,CAAOA,CAAAA,CAAe,KAAA,EAASR,CACnC,EACJ,CAEEa,CAAAA,CAAgB,OAAA,CAAQ,kBAAA,CAAqB,MAAA,CAC/C,IAAA,CAAK,KAAA,CAAMC,CAAAA,CAAKA,EAAI,KAAA,EAAS,KAAK,EACtC,CACJ,CAAA,CAEA,QAAA,CAAS,gBAAA,CAAiB,OAAA,CAASH,CAAgB,CAAA,CACnD,IAAA,CAAK,kBAAA,CAAmB,GAAA,CAAID,CAAQ,EACxC,CACJ,CAAA,KAAA,CAEqBR,aAAmB,QAAA,CAAW,KAAA,CAAM,IAAA,CAAKA,CAAO,CAAA,CAAI,CAACA,CAAO,CAAA,EAEpE,QAAQI,CAAAA,EAAM,CACfA,CAAAA,EAAM,CAAEA,CAAAA,CAAW,OAAA,EAAS,kBAAA,EAC5B,IAAA,CAAK,OAAOA,CAAAA,CAAejB,CAAAA,CAAOW,CAAAA,CAAOI,CAAQ,EAEzD,CAAC,EAET,CAAC,EAEM,IAAA,CACX,CAUA,SAAA,CAAUK,CAAAA,CAAgC,CACtC,OAAA,IAAA,CAAK,GAAA,CACD,gCAAA,CACAA,EAAM,GAAA,CAAIxC,CAAAA,EAAKA,CAAAA,CAAE,KAAA,CAAM,IAAI,CAC/B,CAAA,CACAwC,CAAAA,CAAM,QAAQ,CAAC,CAAE,KAAA,CAAApB,CAAM,CAAA,GAAM,CACzB,GAAM,CAAE,KAAAjB,CAAAA,CAAM,UAAA,CAAA+B,CAAW,CAAA,CAAId,CAAAA,CAC7B,IAAA,CAAK,KAAA,CAAM,CACP,KAAAjB,CAAAA,CACA,UAAA,CAAA+B,CACJ,CAAC,EACL,CAAC,CAAA,CAEM,IACX,CAKA,aAAA,CAAcM,CAAAA,CAAoC,CAC9C,GAAI,OAAO,MAAA,CAAW,GAAA,CAAa,OAAO,KAE1C,IAAMM,CAAAA,CAAW,MAAA,CAAO,QAAA,CAAS,QAAA,CAAS,KAAA,CAAM,CAAC,CAAA,CACjD,YAAK,GAAA,CAAI,2CAAA,CAA6C,CAAE,QAAA,CAAAA,CAAS,CAAC,CAAA,CAElEN,CAAAA,CAAM,QAAQ,CAAC,CAAE,KAAA,CAAAO,CAAAA,CAAQ,EAAC,CAAG,aAAA,CAAAC,CAAAA,CAAgB,EAAC,CAAG,KAAA,CAAA5B,CAAAA,CAAO,QAAA,CAAAe,CAAAA,CAAW,IAAK,CAAA,GAAM,CAC1E,IAAIc,CAAAA,CAAW,KAAA,CAaf,GAZIF,CAAAA,CAAM,MAAA,CACFA,CAAAA,CAAM,QAAA,CAASD,CAAQ,IACvBG,CAAAA,CAAW,IAAA,CAAA,CAERD,CAAAA,CAAc,MAAA,EAChBA,CAAAA,CAAc,QAAA,CAASF,CAAQ,CAAA,GAChCG,EAAW,IAAA,CAAA,CAMfA,CAAAA,CAAU,CACV,IAAMC,CAAAA,CAAYf,CAAAA,CAAWA,CAAAA,EAAS,CAAIf,EAC1C,IAAA,CAAK,GAAA,CAAI,4CAAA,CAA8C,CAAE,QAAA,CAAA0B,CAAAA,CAAU,KAAA,CAAOI,CAAAA,CAAU,IAAK,CAAC,CAAA,CAC1F,IAAA,CAAK,SAAA,CAAU,CAAC,CAAE,KAAA,CAAOA,CAAU,CAAC,CAAC,EACzC,CAAA,KACI,IAAA,CAAK,GAAA,CAAI,wCAAA,CAA0C,CAC/C,QAAA,CAAAJ,EACA,KAAA,CAAO1B,CAAAA,CAAM,IAAA,CACb,KAAA,CAAA2B,CAAAA,CACA,aAAA,CAAAC,CACJ,CAAC,EAET,CAAC,CAAA,CAEM,IACX,CAKA,aAAA,EAAsB,CACd,IAAA,CAAK,QAAA,GACL,cAAc,IAAA,CAAK,QAAQ,CAAA,CAC3B,IAAA,CAAK,QAAA,CAAW,IAAA,EAExB,CAKA,OAAA,EAAgB,CACZ,IAAA,CAAK,aAAA,EAAc,CACnB,IAAA,CAAK,SAAA,CAAY,EAAC,CAClB,IAAA,CAAK,oBAAsB,MAC/B,CACJ,CAAA,CAGanC,CAAAA,CAAmB,IAAIrB,EAGhC,OAAO,MAAA,CAAW,GAAA,GAChB,OAAe,gBAAA,CAAmBqB,CAAAA,CAAAA","file":"chunk-LIPHY7JK.mjs","sourcesContent":["/**\n * Analytics Cache Manager - Version 1.1.0\n * Enhanced TypeScript implementation with better type safety and SSR support\n */\nimport { createLogger } from './helpers'\n\ntype CachedEvent = {\n name: string\n properties: Record<string, any>\n}\n\ntype ResponseData = {\n url: string\n method: string\n status: number\n headers: string\n data: string\n payload: any\n}\n\ntype EventListenerConfig = {\n element: Element | NodeList | string\n event: {\n name: string\n properties: Record<string, any>\n }\n cache?: boolean\n callback?: (e: Event) => { name: string; properties: Record<string, any>; cache?: boolean }\n}\n\ntype LoadEventConfig = {\n event: {\n name: string\n properties: Record<string, any>\n }\n}\n\ntype PageLoadEventConfig = {\n pages?: string[]\n excludedPages?: string[]\n event: {\n name: string\n properties: Record<string, any>\n }\n callback?: () => { name: string; properties: Record<string, any> }\n}\n\nclass AnalyticsCacheManager {\n private interval: NodeJS.Timeout | null = null\n private responses: ResponseData[] = []\n private isTrackingResponses = false\n private delegatedSelectors: Set<string> = new Set()\n private debug = false\n private log = createLogger('[CacheManager]', () => this.debug)\n\n setDebug(debug: boolean): void {\n this.debug = debug\n }\n\n /**\n * FNV-1a hash algorithm for creating consistent hashes\n */\n private hash(inputString: string, desiredLength = 32): string {\n const fnv1aHash = (string: string): string => {\n let hash = 0x811c9dc5\n for (let i = 0; i < string.length; i++) {\n hash ^= string.charCodeAt(i)\n hash = (hash * 0x01000193) >>> 0\n }\n return hash.toString(16)\n }\n\n const base64Encode = (string: string): string => btoa(string)\n\n let hash = fnv1aHash(inputString)\n let combined = base64Encode(hash)\n\n while (combined.length < desiredLength) {\n combined += base64Encode(fnv1aHash(combined))\n }\n\n return combined.substring(0, desiredLength)\n }\n\n /**\n * Get cookie value by name\n */\n getCookies(name: string): any {\n const value = `; ${document.cookie}`\n const parts = value.split(`; ${name}=`)\n if (parts.length === 2) {\n const cookieValue = decodeURIComponent(parts.pop()!.split(';').shift()!)\n\n try {\n return JSON.parse(cookieValue)\n } catch (e) {\n return cookieValue\n }\n }\n return null\n }\n\n /**\n * Track page unload events to cache pageviews before leaving\n */\n trackPageUnload(): void {\n if (typeof window === 'undefined') return\n\n window.addEventListener('beforeunload', () => {\n if (!this.isPageViewSent()) {\n this.push('cached_analytics_page_views', {\n name: window.location.href,\n properties: {\n url: window.location.href,\n },\n })\n }\n })\n }\n\n /**\n * Track XMLHttpRequest responses to monitor analytics calls\n */\n trackResponses(): void {\n if (typeof window === 'undefined' || typeof XMLHttpRequest === 'undefined') return\n\n const originalXhrOpen = XMLHttpRequest.prototype.open\n const originalXhrSend = XMLHttpRequest.prototype.send\n\n XMLHttpRequest.prototype.open = function (method: string, url: string | URL) {\n ;(this as any)._url = url\n ;(this as any)._method = method\n return originalXhrOpen.apply(this, arguments as any)\n }\n\n XMLHttpRequest.prototype.send = function (body?: Document | XMLHttpRequestBodyInit | null) {\n this.addEventListener('load', function () {\n let parsedPayload = null\n\n if (typeof body === 'string') {\n try {\n parsedPayload = JSON.parse(body)\n } catch (e) {\n parsedPayload = body\n }\n }\n\n const responseData: ResponseData = {\n url: (this as any)._url,\n method: (this as any)._method,\n status: this.status,\n headers: this.getAllResponseHeaders(),\n data: this.responseText,\n payload: parsedPayload,\n }\n cacheTrackEvents.responses.push(responseData)\n })\n\n return originalXhrSend.apply(this, arguments as any)\n }\n\n this.isTrackingResponses = true\n }\n\n /**\n * Resolve the analytics instance from the window object.\n * Supports three usage patterns:\n * - NPM import: analytics.ts sets window.AnalyticsInstance directly\n * - IIFE bundle: tsup sets window.DerivAnalytics = { Analytics, cacheTrackEvents }\n * - Legacy: consumers that explicitly set window.Analytics = window.DerivAnalytics\n */\n private getAnalyticsInstance(): any {\n if (typeof window === 'undefined') return null\n return (\n (window as any).AnalyticsInstance ??\n (window as any).DerivAnalytics?.Analytics ??\n (window as any).Analytics?.Analytics\n )\n }\n\n /**\n * Check if Analytics instance is ready\n */\n isReady(): boolean {\n if (typeof window === 'undefined') return false\n const instance = this.getAnalyticsInstance()\n if (!instance) return false\n return !!instance.getInstances?.()?.tracking\n }\n\n /**\n * Parse cookies to find a specific cookie by name.\n * Uses an early-exit linear scan instead of building a full map,\n * which is significantly faster when there are many cookies.\n */\n private parseCookies(cookieName: string): any {\n if (typeof document === 'undefined') return null\n\n const cookies = document.cookie.split('; ')\n for (const cookie of cookies) {\n const eqIdx = cookie.indexOf('=')\n if (eqIdx === -1) continue\n if (decodeURIComponent(cookie.slice(0, eqIdx)) === cookieName) {\n const raw = cookie.slice(eqIdx + 1)\n try {\n return JSON.parse(decodeURIComponent(raw))\n } catch {\n return decodeURIComponent(raw)\n }\n }\n }\n return null\n }\n\n /**\n * Check if pageview has been sent\n */\n isPageViewSent(): boolean {\n return !!this.responses.find(e => e.payload?.type === 'page' && e.payload?.anonymousId)\n }\n\n /**\n * Set a cached event\n */\n set(event: CachedEvent): void {\n this.log('set | caching event to cookie', event)\n this.push('cached_analytics_events', event)\n }\n\n /**\n * Push data to cookie cache\n */\n push(cookieName: string, data: any): void {\n if (typeof document === 'undefined') return\n\n let storedCookies: any[] = []\n const cacheCookie = this.parseCookies(cookieName)\n if (cacheCookie && Array.isArray(cacheCookie)) {\n storedCookies = cacheCookie\n }\n\n storedCookies.push(data)\n\n const domain = this.getAllowedDomain()\n const maxAge = 365 * 24 * 60 * 60 // 1 year\n const cookieString = `${cookieName}=${encodeURIComponent(JSON.stringify(storedCookies))}; path=/; Domain=${domain}; max-age=${maxAge}; SameSite=Lax`\n\n document.cookie = cookieString\n }\n\n /**\n * Get the allowed domain for cookies\n * For localhost/single-part domains: use as-is\n * For multi-part domains: use top-level domain (e.g., .deriv.com)\n */\n private getAllowedDomain(): string {\n if (typeof window === 'undefined') return ''\n\n const hostname = window.location.hostname\n\n // Handle IP addresses and localhost\n if (hostname === 'localhost' || /^\\d+\\.\\d+\\.\\d+\\.\\d+$/.test(hostname)) {\n return hostname\n }\n\n const parts = hostname.split('.')\n\n // Single part domain (e.g., \"localhost\")\n if (parts.length === 1) {\n return hostname\n }\n\n // Use top-level domain for proper subdomain sharing\n return `.${parts.slice(-2).join('.')}`\n }\n\n /**\n * Process event to hash email and add client info\n */\n processEvent(event: CachedEvent): CachedEvent {\n const clientInfo = this.getCookies('client_information')\n\n if (clientInfo) {\n const { email = null } = clientInfo\n\n if (email) {\n event.properties.email_hash = this.hash(email)\n }\n }\n\n if (event?.properties?.email) {\n const email = event.properties.email\n delete event.properties.email\n event.properties.email_hash = this.hash(email)\n }\n\n return event\n }\n\n /**\n * Track an event (either immediately or cache it)\n */\n track(originalEvent: CachedEvent, cache = false): void {\n if (typeof window === 'undefined') return\n\n const event = this.processEvent(originalEvent)\n const instance = this.getAnalyticsInstance()\n\n if (this.isReady() && !cache) {\n this.log('track | analytics ready — calling trackEvent', {\n event: event.name,\n properties: event.properties,\n })\n instance.trackEvent(event.name, event.properties)\n } else {\n this.log('track | analytics not ready or cache=true — storing event', { event: event.name, cache })\n this.set(event)\n }\n }\n\n /**\n * Track pageview with auto-retry until sent\n */\n pageView(): void {\n if (typeof window === 'undefined') return\n\n this.log('pageView | starting page view polling')\n\n if (!this.isTrackingResponses) {\n this.trackResponses()\n this.trackPageUnload()\n }\n\n this.interval = setInterval(() => {\n const Analytics = (window as any).Analytics\n\n if (\n typeof Analytics !== 'undefined' &&\n typeof Analytics.Analytics?.pageView === 'function' &&\n this.isReady()\n ) {\n this.log('pageView | analytics ready — sending page view', { href: window.location.href })\n Analytics.Analytics.pageView(window.location.href, \"Trader's hub\")\n }\n\n if (this.isPageViewSent()) {\n this.log('pageView | page view confirmed sent — clearing interval')\n if (this.interval) clearInterval(this.interval)\n }\n }, 1000)\n }\n\n /**\n * Add click event listener to element(s)\n */\n listen(\n element: Element | NodeList,\n { name = '', properties = {} }: { name: string; properties: Record<string, any> },\n cache = false,\n callback: ((e: Event) => { name: string; properties: Record<string, any>; cache?: boolean }) | null = null\n ): void {\n const addClickListener = (el: Element) => {\n if (!(el as any).dataset?.clickEventTracking) {\n el.addEventListener('click', (e: Event) => {\n let event = {\n name,\n properties,\n cache,\n }\n\n if (typeof callback === 'function') {\n const callbackResult = callback(e)\n event = {\n ...callbackResult,\n cache: callbackResult.cache ?? cache,\n }\n }\n\n this.track(event, event.cache ?? false)\n })\n ;(el as any).dataset.clickEventTracking = 'true'\n }\n }\n\n const elements = element instanceof NodeList ? Array.from(element as NodeListOf<Element>) : [element]\n elements.forEach(addClickListener)\n }\n\n /**\n * Add event handlers to multiple elements with auto-retry\n * Alias for backward compatibility with typo\n */\n addEventHandler(items: EventListenerConfig[]): this {\n if (typeof window === 'undefined') return this\n\n items.forEach(({ element, event = { name: '', properties: {} }, cache = false, callback = null }) => {\n // If a selector string is provided, use event delegation on document\n if (typeof element === 'string') {\n const selector = element\n\n if (!this.delegatedSelectors.has(selector)) {\n const delegatedHandler = (e: Event) => {\n const target = e.target as Element | null\n if (!target) return\n\n const matched = target.closest(selector)\n if (matched && !(matched as any).dataset?.clickEventTracking) {\n let evt: any = {\n name: event.name,\n properties: event.properties,\n cache,\n }\n\n if (typeof callback === 'function') {\n const callbackResult = callback(e)\n evt = {\n ...callbackResult,\n cache: callbackResult.cache ?? cache,\n }\n }\n\n ;(matched as any).dataset.clickEventTracking = 'true'\n this.track(evt, evt.cache ?? false)\n }\n }\n\n document.addEventListener('click', delegatedHandler)\n this.delegatedSelectors.add(selector)\n }\n } else {\n // Element or NodeList: attach directly to existing elements\n const elements = element instanceof NodeList ? Array.from(element) : [element]\n\n elements.forEach(el => {\n if (el && !(el as any).dataset?.clickEventTracking) {\n this.listen(el as Element, event, cache, callback)\n }\n })\n }\n })\n\n return this\n }\n\n /**\n * Backward compatibility alias (with typo from original)\n */\n addEventhandler = this.addEventHandler.bind(this)\n\n /**\n * Load events immediately\n */\n loadEvent(items: LoadEventConfig[]): this {\n this.log(\n 'loadEvent | firing load events',\n items.map(i => i.event.name)\n )\n items.forEach(({ event }) => {\n const { name, properties } = event\n this.track({\n name,\n properties,\n })\n })\n\n return this\n }\n\n /**\n * Load events on specific pages\n */\n pageLoadEvent(items: PageLoadEventConfig[]): this {\n if (typeof window === 'undefined') return this\n\n const pathname = window.location.pathname.slice(1)\n this.log('pageLoadEvent | checking page load events', { pathname })\n\n items.forEach(({ pages = [], excludedPages = [], event, callback = null }) => {\n let dispatch = false\n if (pages.length) {\n if (pages.includes(pathname)) {\n dispatch = true\n }\n } else if (excludedPages.length) {\n if (!excludedPages.includes(pathname)) {\n dispatch = true\n }\n } else {\n dispatch = true\n }\n\n if (dispatch) {\n const eventData = callback ? callback() : event\n this.log('pageLoadEvent | dispatching event for page', { pathname, event: eventData.name })\n this.loadEvent([{ event: eventData }])\n } else {\n this.log('pageLoadEvent | skipped event for page', {\n pathname,\n event: event.name,\n pages,\n excludedPages,\n })\n }\n })\n\n return this\n }\n\n /**\n * Clear the interval and cleanup\n */\n clearInterval(): void {\n if (this.interval) {\n clearInterval(this.interval)\n this.interval = null\n }\n }\n\n /**\n * Cleanup method for removing event listeners and intervals\n */\n cleanup(): void {\n this.clearInterval()\n this.responses = []\n this.isTrackingResponses = false\n }\n}\n\n// Create singleton instance\nexport const cacheTrackEvents = new AnalyticsCacheManager()\n\n// Export to global scope for backward compatibility\nif (typeof window !== 'undefined') {\n ;(window as any).cacheTrackEvents = cacheTrackEvents\n}\n"]}
@@ -1,3 +0,0 @@
1
- 'use strict';var chunkJ3V5QNIH_js=require('./chunk-J3V5QNIH.js');/* @deriv-com/analytics - NPM Package - Built with tsup */
2
- var p=class{constructor(){this.interval=null;this.responses=[];this.isTrackingResponses=false;this.delegatedSelectors=new Set;this.debug=false;this.log=chunkJ3V5QNIH_js.g("[CacheManager]",()=>this.debug);this.addEventhandler=this.addEventHandler.bind(this);}setDebug(e){this.debug=e;}hash(e,n=32){let t=a=>{let r=2166136261;for(let c=0;c<a.length;c++)r^=a.charCodeAt(c),r=r*16777619>>>0;return r.toString(16)},i=a=>btoa(a),s=t(e),o=i(s);for(;o.length<n;)o+=i(t(o));return o.substring(0,n)}getCookies(e){let t=`; ${document.cookie}`.split(`; ${e}=`);if(t.length===2){let i=decodeURIComponent(t.pop().split(";").shift());try{return JSON.parse(i)}catch{return i}}return null}trackPageUnload(){typeof window>"u"||window.addEventListener("beforeunload",()=>{this.isPageViewSent()||this.push("cached_analytics_page_views",{name:window.location.href,properties:{url:window.location.href}});});}trackResponses(){if(typeof window>"u"||typeof XMLHttpRequest>"u")return;let e=XMLHttpRequest.prototype.open,n=XMLHttpRequest.prototype.send;XMLHttpRequest.prototype.open=function(t,i){return this._url=i,this._method=t,e.apply(this,arguments)},XMLHttpRequest.prototype.send=function(t){return this.addEventListener("load",function(){let i=null;if(typeof t=="string")try{i=JSON.parse(t);}catch{i=t;}let s={url:this._url,method:this._method,status:this.status,headers:this.getAllResponseHeaders(),data:this.responseText,payload:i};f.responses.push(s);}),n.apply(this,arguments)},this.isTrackingResponses=true;}getAnalyticsInstance(){return typeof window>"u"?null:window.AnalyticsInstance??window.DerivAnalytics?.Analytics??window.Analytics?.Analytics}isReady(){if(typeof window>"u")return false;let e=this.getAnalyticsInstance();return e?!!e.getInstances?.()?.tracking:false}parseCookies(e){if(typeof document>"u")return null;let n=document.cookie.split("; ");for(let t of n){let i=t.indexOf("=");if(i!==-1&&decodeURIComponent(t.slice(0,i))===e){let s=t.slice(i+1);try{return JSON.parse(decodeURIComponent(s))}catch{return decodeURIComponent(s)}}}return null}isPageViewSent(){return !!this.responses.find(e=>e.payload?.type==="page"&&e.payload?.anonymousId)}set(e){this.log("set | caching event to cookie",e),this.push("cached_analytics_events",e);}push(e,n){if(typeof document>"u")return;let t=[],i=this.parseCookies(e);i&&Array.isArray(i)&&(t=i),t.push(n);let s=this.getAllowedDomain(),o=365*24*60*60,a=`${e}=${encodeURIComponent(JSON.stringify(t))}; path=/; Domain=${s}; max-age=${o}; SameSite=Lax`;document.cookie=a;}getAllowedDomain(){if(typeof window>"u")return "";let e=window.location.hostname;if(e==="localhost"||/^\d+\.\d+\.\d+\.\d+$/.test(e))return e;let n=e.split(".");return n.length===1?e:`.${n.slice(-2).join(".")}`}processEvent(e){let n=this.getCookies("client_information");if(n){let{email:t=null}=n;t&&(e.properties.email_hash=this.hash(t));}if(e?.properties?.email){let t=e.properties.email;delete e.properties.email,e.properties.email_hash=this.hash(t);}return e}track(e,n=false){if(typeof window>"u")return;let t=this.processEvent(e),i=this.getAnalyticsInstance();this.isReady()&&!n?(this.log("track | analytics ready \u2014 calling trackEvent",{event:t.name,properties:t.properties}),i.trackEvent(t.name,t.properties)):(this.log("track | analytics not ready or cache=true \u2014 storing event",{event:t.name,cache:n}),this.set(t));}pageView(){typeof window>"u"||(this.log("pageView | starting page view polling"),this.isTrackingResponses||(this.trackResponses(),this.trackPageUnload()),this.interval=setInterval(()=>{let e=window.Analytics;typeof e<"u"&&typeof e.Analytics?.pageView=="function"&&this.isReady()&&(this.log("pageView | analytics ready \u2014 sending page view",{href:window.location.href}),e.Analytics.pageView(window.location.href,"Trader's hub")),this.isPageViewSent()&&(this.log("pageView | page view confirmed sent \u2014 clearing interval"),this.interval&&clearInterval(this.interval));},1e3));}listen(e,{name:n="",properties:t={}},i=false,s=null){let o=r=>{r.dataset?.clickEventTracking||(r.addEventListener("click",c=>{let l={name:n,properties:t,cache:i};if(typeof s=="function"){let d=s(c);l={...d,cache:d.cache??i};}this.track(l,l.cache??false);}),r.dataset.clickEventTracking="true");};(e instanceof NodeList?Array.from(e):[e]).forEach(o);}addEventHandler(e){return typeof window>"u"?this:(e.forEach(({element:n,event:t={name:"",properties:{}},cache:i=false,callback:s=null})=>{if(typeof n=="string"){let o=n;if(!this.delegatedSelectors.has(o)){let a=r=>{let c=r.target;if(!c)return;let l=c.closest(o);if(l&&!l.dataset?.clickEventTracking){let d={name:t.name,properties:t.properties,cache:i};if(typeof s=="function"){let h=s(r);d={...h,cache:h.cache??i};}l.dataset.clickEventTracking="true",this.track(d,d.cache??false);}};document.addEventListener("click",a),this.delegatedSelectors.add(o);}}else (n instanceof NodeList?Array.from(n):[n]).forEach(a=>{a&&!a.dataset?.clickEventTracking&&this.listen(a,t,i,s);});}),this)}loadEvent(e){return this.log("loadEvent | firing load events",e.map(n=>n.event.name)),e.forEach(({event:n})=>{let{name:t,properties:i}=n;this.track({name:t,properties:i});}),this}pageLoadEvent(e){if(typeof window>"u")return this;let n=window.location.pathname.slice(1);return this.log("pageLoadEvent | checking page load events",{pathname:n}),e.forEach(({pages:t=[],excludedPages:i=[],event:s,callback:o=null})=>{let a=false;if(t.length?t.includes(n)&&(a=true):i.length&&i.includes(n)||(a=true),a){let r=o?o():s;this.log("pageLoadEvent | dispatching event for page",{pathname:n,event:r.name}),this.loadEvent([{event:r}]);}else this.log("pageLoadEvent | skipped event for page",{pathname:n,event:s.name,pages:t,excludedPages:i});}),this}clearInterval(){this.interval&&(clearInterval(this.interval),this.interval=null);}cleanup(){this.clearInterval(),this.responses=[],this.isTrackingResponses=false;}},f=new p;typeof window<"u"&&(window.cacheTrackEvents=f);exports.a=f;//# sourceMappingURL=chunk-SQ6Q4Z5S.js.map
3
- //# sourceMappingURL=chunk-SQ6Q4Z5S.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/utils/analytics-cache.ts"],"names":["AnalyticsCacheManager","createLogger","debug","inputString","desiredLength","fnv1aHash","string","hash","i","base64Encode","combined","name","parts","cookieValue","originalXhrOpen","originalXhrSend","method","url","body","parsedPayload","responseData","cacheTrackEvents","instance","cookieName","cookies","cookie","eqIdx","raw","event","data","storedCookies","cacheCookie","domain","maxAge","cookieString","hostname","clientInfo","email","originalEvent","cache","Analytics","element","properties","callback","addClickListener","el","e","callbackResult","items","selector","delegatedHandler","target","matched","evt","pathname","pages","excludedPages","dispatch","eventData"],"mappings":"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","file":"chunk-SQ6Q4Z5S.js","sourcesContent":["/**\n * Analytics Cache Manager - Version 1.1.0\n * Enhanced TypeScript implementation with better type safety and SSR support\n */\nimport { createLogger } from './helpers'\n\ntype CachedEvent = {\n name: string\n properties: Record<string, any>\n}\n\ntype ResponseData = {\n url: string\n method: string\n status: number\n headers: string\n data: string\n payload: any\n}\n\ntype EventListenerConfig = {\n element: Element | NodeList | string\n event: {\n name: string\n properties: Record<string, any>\n }\n cache?: boolean\n callback?: (e: Event) => { name: string; properties: Record<string, any>; cache?: boolean }\n}\n\ntype LoadEventConfig = {\n event: {\n name: string\n properties: Record<string, any>\n }\n}\n\ntype PageLoadEventConfig = {\n pages?: string[]\n excludedPages?: string[]\n event: {\n name: string\n properties: Record<string, any>\n }\n callback?: () => { name: string; properties: Record<string, any> }\n}\n\nclass AnalyticsCacheManager {\n private interval: NodeJS.Timeout | null = null\n private responses: ResponseData[] = []\n private isTrackingResponses = false\n private delegatedSelectors: Set<string> = new Set()\n private debug = false\n private log = createLogger('[CacheManager]', () => this.debug)\n\n setDebug(debug: boolean): void {\n this.debug = debug\n }\n\n /**\n * FNV-1a hash algorithm for creating consistent hashes\n */\n private hash(inputString: string, desiredLength = 32): string {\n const fnv1aHash = (string: string): string => {\n let hash = 0x811c9dc5\n for (let i = 0; i < string.length; i++) {\n hash ^= string.charCodeAt(i)\n hash = (hash * 0x01000193) >>> 0\n }\n return hash.toString(16)\n }\n\n const base64Encode = (string: string): string => btoa(string)\n\n let hash = fnv1aHash(inputString)\n let combined = base64Encode(hash)\n\n while (combined.length < desiredLength) {\n combined += base64Encode(fnv1aHash(combined))\n }\n\n return combined.substring(0, desiredLength)\n }\n\n /**\n * Get cookie value by name\n */\n getCookies(name: string): any {\n const value = `; ${document.cookie}`\n const parts = value.split(`; ${name}=`)\n if (parts.length === 2) {\n const cookieValue = decodeURIComponent(parts.pop()!.split(';').shift()!)\n\n try {\n return JSON.parse(cookieValue)\n } catch (e) {\n return cookieValue\n }\n }\n return null\n }\n\n /**\n * Track page unload events to cache pageviews before leaving\n */\n trackPageUnload(): void {\n if (typeof window === 'undefined') return\n\n window.addEventListener('beforeunload', () => {\n if (!this.isPageViewSent()) {\n this.push('cached_analytics_page_views', {\n name: window.location.href,\n properties: {\n url: window.location.href,\n },\n })\n }\n })\n }\n\n /**\n * Track XMLHttpRequest responses to monitor analytics calls\n */\n trackResponses(): void {\n if (typeof window === 'undefined' || typeof XMLHttpRequest === 'undefined') return\n\n const originalXhrOpen = XMLHttpRequest.prototype.open\n const originalXhrSend = XMLHttpRequest.prototype.send\n\n XMLHttpRequest.prototype.open = function (method: string, url: string | URL) {\n ;(this as any)._url = url\n ;(this as any)._method = method\n return originalXhrOpen.apply(this, arguments as any)\n }\n\n XMLHttpRequest.prototype.send = function (body?: Document | XMLHttpRequestBodyInit | null) {\n this.addEventListener('load', function () {\n let parsedPayload = null\n\n if (typeof body === 'string') {\n try {\n parsedPayload = JSON.parse(body)\n } catch (e) {\n parsedPayload = body\n }\n }\n\n const responseData: ResponseData = {\n url: (this as any)._url,\n method: (this as any)._method,\n status: this.status,\n headers: this.getAllResponseHeaders(),\n data: this.responseText,\n payload: parsedPayload,\n }\n cacheTrackEvents.responses.push(responseData)\n })\n\n return originalXhrSend.apply(this, arguments as any)\n }\n\n this.isTrackingResponses = true\n }\n\n /**\n * Resolve the analytics instance from the window object.\n * Supports three usage patterns:\n * - NPM import: analytics.ts sets window.AnalyticsInstance directly\n * - IIFE bundle: tsup sets window.DerivAnalytics = { Analytics, cacheTrackEvents }\n * - Legacy: consumers that explicitly set window.Analytics = window.DerivAnalytics\n */\n private getAnalyticsInstance(): any {\n if (typeof window === 'undefined') return null\n return (\n (window as any).AnalyticsInstance ??\n (window as any).DerivAnalytics?.Analytics ??\n (window as any).Analytics?.Analytics\n )\n }\n\n /**\n * Check if Analytics instance is ready\n */\n isReady(): boolean {\n if (typeof window === 'undefined') return false\n const instance = this.getAnalyticsInstance()\n if (!instance) return false\n return !!instance.getInstances?.()?.tracking\n }\n\n /**\n * Parse cookies to find a specific cookie by name.\n * Uses an early-exit linear scan instead of building a full map,\n * which is significantly faster when there are many cookies.\n */\n private parseCookies(cookieName: string): any {\n if (typeof document === 'undefined') return null\n\n const cookies = document.cookie.split('; ')\n for (const cookie of cookies) {\n const eqIdx = cookie.indexOf('=')\n if (eqIdx === -1) continue\n if (decodeURIComponent(cookie.slice(0, eqIdx)) === cookieName) {\n const raw = cookie.slice(eqIdx + 1)\n try {\n return JSON.parse(decodeURIComponent(raw))\n } catch {\n return decodeURIComponent(raw)\n }\n }\n }\n return null\n }\n\n /**\n * Check if pageview has been sent\n */\n isPageViewSent(): boolean {\n return !!this.responses.find(e => e.payload?.type === 'page' && e.payload?.anonymousId)\n }\n\n /**\n * Set a cached event\n */\n set(event: CachedEvent): void {\n this.log('set | caching event to cookie', event)\n this.push('cached_analytics_events', event)\n }\n\n /**\n * Push data to cookie cache\n */\n push(cookieName: string, data: any): void {\n if (typeof document === 'undefined') return\n\n let storedCookies: any[] = []\n const cacheCookie = this.parseCookies(cookieName)\n if (cacheCookie && Array.isArray(cacheCookie)) {\n storedCookies = cacheCookie\n }\n\n storedCookies.push(data)\n\n const domain = this.getAllowedDomain()\n const maxAge = 365 * 24 * 60 * 60 // 1 year\n const cookieString = `${cookieName}=${encodeURIComponent(JSON.stringify(storedCookies))}; path=/; Domain=${domain}; max-age=${maxAge}; SameSite=Lax`\n\n document.cookie = cookieString\n }\n\n /**\n * Get the allowed domain for cookies\n * For localhost/single-part domains: use as-is\n * For multi-part domains: use top-level domain (e.g., .deriv.com)\n */\n private getAllowedDomain(): string {\n if (typeof window === 'undefined') return ''\n\n const hostname = window.location.hostname\n\n // Handle IP addresses and localhost\n if (hostname === 'localhost' || /^\\d+\\.\\d+\\.\\d+\\.\\d+$/.test(hostname)) {\n return hostname\n }\n\n const parts = hostname.split('.')\n\n // Single part domain (e.g., \"localhost\")\n if (parts.length === 1) {\n return hostname\n }\n\n // Use top-level domain for proper subdomain sharing\n return `.${parts.slice(-2).join('.')}`\n }\n\n /**\n * Process event to hash email and add client info\n */\n processEvent(event: CachedEvent): CachedEvent {\n const clientInfo = this.getCookies('client_information')\n\n if (clientInfo) {\n const { email = null } = clientInfo\n\n if (email) {\n event.properties.email_hash = this.hash(email)\n }\n }\n\n if (event?.properties?.email) {\n const email = event.properties.email\n delete event.properties.email\n event.properties.email_hash = this.hash(email)\n }\n\n return event\n }\n\n /**\n * Track an event (either immediately or cache it)\n */\n track(originalEvent: CachedEvent, cache = false): void {\n if (typeof window === 'undefined') return\n\n const event = this.processEvent(originalEvent)\n const instance = this.getAnalyticsInstance()\n\n if (this.isReady() && !cache) {\n this.log('track | analytics ready — calling trackEvent', {\n event: event.name,\n properties: event.properties,\n })\n instance.trackEvent(event.name, event.properties)\n } else {\n this.log('track | analytics not ready or cache=true — storing event', { event: event.name, cache })\n this.set(event)\n }\n }\n\n /**\n * Track pageview with auto-retry until sent\n */\n pageView(): void {\n if (typeof window === 'undefined') return\n\n this.log('pageView | starting page view polling')\n\n if (!this.isTrackingResponses) {\n this.trackResponses()\n this.trackPageUnload()\n }\n\n this.interval = setInterval(() => {\n const Analytics = (window as any).Analytics\n\n if (\n typeof Analytics !== 'undefined' &&\n typeof Analytics.Analytics?.pageView === 'function' &&\n this.isReady()\n ) {\n this.log('pageView | analytics ready — sending page view', { href: window.location.href })\n Analytics.Analytics.pageView(window.location.href, \"Trader's hub\")\n }\n\n if (this.isPageViewSent()) {\n this.log('pageView | page view confirmed sent — clearing interval')\n if (this.interval) clearInterval(this.interval)\n }\n }, 1000)\n }\n\n /**\n * Add click event listener to element(s)\n */\n listen(\n element: Element | NodeList,\n { name = '', properties = {} }: { name: string; properties: Record<string, any> },\n cache = false,\n callback: ((e: Event) => { name: string; properties: Record<string, any>; cache?: boolean }) | null = null\n ): void {\n const addClickListener = (el: Element) => {\n if (!(el as any).dataset?.clickEventTracking) {\n el.addEventListener('click', (e: Event) => {\n let event = {\n name,\n properties,\n cache,\n }\n\n if (typeof callback === 'function') {\n const callbackResult = callback(e)\n event = {\n ...callbackResult,\n cache: callbackResult.cache ?? cache,\n }\n }\n\n this.track(event, event.cache ?? false)\n })\n ;(el as any).dataset.clickEventTracking = 'true'\n }\n }\n\n const elements = element instanceof NodeList ? Array.from(element as NodeListOf<Element>) : [element]\n elements.forEach(addClickListener)\n }\n\n /**\n * Add event handlers to multiple elements with auto-retry\n * Alias for backward compatibility with typo\n */\n addEventHandler(items: EventListenerConfig[]): this {\n if (typeof window === 'undefined') return this\n\n items.forEach(({ element, event = { name: '', properties: {} }, cache = false, callback = null }) => {\n // If a selector string is provided, use event delegation on document\n if (typeof element === 'string') {\n const selector = element\n\n if (!this.delegatedSelectors.has(selector)) {\n const delegatedHandler = (e: Event) => {\n const target = e.target as Element | null\n if (!target) return\n\n const matched = target.closest(selector)\n if (matched && !(matched as any).dataset?.clickEventTracking) {\n let evt: any = {\n name: event.name,\n properties: event.properties,\n cache,\n }\n\n if (typeof callback === 'function') {\n const callbackResult = callback(e)\n evt = {\n ...callbackResult,\n cache: callbackResult.cache ?? cache,\n }\n }\n\n ;(matched as any).dataset.clickEventTracking = 'true'\n this.track(evt, evt.cache ?? false)\n }\n }\n\n document.addEventListener('click', delegatedHandler)\n this.delegatedSelectors.add(selector)\n }\n } else {\n // Element or NodeList: attach directly to existing elements\n const elements = element instanceof NodeList ? Array.from(element) : [element]\n\n elements.forEach(el => {\n if (el && !(el as any).dataset?.clickEventTracking) {\n this.listen(el as Element, event, cache, callback)\n }\n })\n }\n })\n\n return this\n }\n\n /**\n * Backward compatibility alias (with typo from original)\n */\n addEventhandler = this.addEventHandler.bind(this)\n\n /**\n * Load events immediately\n */\n loadEvent(items: LoadEventConfig[]): this {\n this.log(\n 'loadEvent | firing load events',\n items.map(i => i.event.name)\n )\n items.forEach(({ event }) => {\n const { name, properties } = event\n this.track({\n name,\n properties,\n })\n })\n\n return this\n }\n\n /**\n * Load events on specific pages\n */\n pageLoadEvent(items: PageLoadEventConfig[]): this {\n if (typeof window === 'undefined') return this\n\n const pathname = window.location.pathname.slice(1)\n this.log('pageLoadEvent | checking page load events', { pathname })\n\n items.forEach(({ pages = [], excludedPages = [], event, callback = null }) => {\n let dispatch = false\n if (pages.length) {\n if (pages.includes(pathname)) {\n dispatch = true\n }\n } else if (excludedPages.length) {\n if (!excludedPages.includes(pathname)) {\n dispatch = true\n }\n } else {\n dispatch = true\n }\n\n if (dispatch) {\n const eventData = callback ? callback() : event\n this.log('pageLoadEvent | dispatching event for page', { pathname, event: eventData.name })\n this.loadEvent([{ event: eventData }])\n } else {\n this.log('pageLoadEvent | skipped event for page', {\n pathname,\n event: event.name,\n pages,\n excludedPages,\n })\n }\n })\n\n return this\n }\n\n /**\n * Clear the interval and cleanup\n */\n clearInterval(): void {\n if (this.interval) {\n clearInterval(this.interval)\n this.interval = null\n }\n }\n\n /**\n * Cleanup method for removing event listeners and intervals\n */\n cleanup(): void {\n this.clearInterval()\n this.responses = []\n this.isTrackingResponses = false\n }\n}\n\n// Create singleton instance\nexport const cacheTrackEvents = new AnalyticsCacheManager()\n\n// Export to global scope for backward compatibility\nif (typeof window !== 'undefined') {\n ;(window as any).cacheTrackEvents = cacheTrackEvents\n}\n"]}