@deriv-com/analytics 1.38.8 → 1.38.10
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.
- package/README.md +38 -8
- package/dist/browser/analytics.bundle.global.js +12 -12
- package/dist/browser/analytics.bundle.global.js.map +1 -1
- package/dist/browser/analytics.esm.mjs +1 -7
- package/dist/browser/analytics.esm.mjs.map +1 -1
- package/dist/chunk-7CT4XR74.mjs +3 -0
- package/dist/chunk-7CT4XR74.mjs.map +1 -0
- package/dist/chunk-BVGYK54Z.js +4 -0
- package/dist/chunk-BVGYK54Z.js.map +1 -0
- package/dist/chunk-D2MKQCJB.mjs +3 -0
- package/dist/chunk-D2MKQCJB.mjs.map +1 -0
- package/dist/chunk-FE5YWK6A.js +3 -0
- package/dist/chunk-FE5YWK6A.js.map +1 -0
- package/dist/chunk-ID2GN2PS.mjs +4 -0
- package/dist/chunk-ID2GN2PS.mjs.map +1 -0
- package/dist/chunk-ILN7DKKL.js +3 -0
- package/dist/chunk-ILN7DKKL.js.map +1 -0
- package/dist/chunk-OB6HH25Z.mjs +9 -0
- package/dist/chunk-OB6HH25Z.mjs.map +1 -0
- package/dist/chunk-YGU4ZMIH.mjs +14 -0
- package/dist/chunk-YGU4ZMIH.mjs.map +1 -0
- package/dist/growthbook-3K6VUME4.mjs +3 -0
- package/dist/growthbook-3K6VUME4.mjs.map +1 -0
- package/dist/index.d.mts +9 -5
- package/dist/index.d.ts +9 -5
- package/dist/index.js +2 -3
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +2 -3
- package/dist/index.mjs.map +1 -1
- package/dist/metafile-cjs.json +1 -1
- package/dist/metafile-esm.json +1 -1
- package/dist/metafile-iife.json +1 -1
- package/dist/posthog-ANAV4RFJ.mjs +6 -0
- package/dist/posthog-ANAV4RFJ.mjs.map +1 -0
- package/dist/{posthog-Df2P2mKj.d.mts → posthog-Ds4g1sJf.d.mts} +21 -7
- package/dist/{posthog-BXTVRi7y.d.ts → posthog-DvDj4azD.d.ts} +21 -7
- package/dist/providers/growthbook/index.d.mts +5 -3
- package/dist/providers/growthbook/index.d.ts +5 -3
- package/dist/providers/growthbook/index.js +2 -2
- package/dist/providers/growthbook/index.js.map +1 -1
- package/dist/providers/growthbook/index.mjs +2 -2
- package/dist/providers/growthbook/index.mjs.map +1 -1
- package/dist/providers/posthog/index.d.mts +1 -1
- package/dist/providers/posthog/index.d.ts +1 -1
- package/dist/providers/posthog/index.js +2 -2
- package/dist/providers/posthog/index.js.map +1 -1
- package/dist/providers/posthog/index.mjs +2 -2
- package/dist/providers/posthog/index.mjs.map +1 -1
- package/dist/providers/rudderstack/index.d.mts +5 -2
- package/dist/providers/rudderstack/index.d.ts +5 -2
- package/dist/providers/rudderstack/index.js +1 -1
- package/dist/providers/rudderstack/index.mjs +1 -1
- package/dist/utils/analytics-cache/index.d.mts +14 -5
- package/dist/utils/analytics-cache/index.d.ts +14 -5
- package/dist/utils/analytics-cache/index.js +1 -1
- package/dist/utils/analytics-cache/index.mjs +1 -1
- package/package.json +1 -1
- package/dist/chunk-3LFZFQL4.mjs +0 -3
- package/dist/chunk-3LFZFQL4.mjs.map +0 -1
- package/dist/chunk-CAKVOFLO.js +0 -3
- package/dist/chunk-CAKVOFLO.js.map +0 -1
- package/dist/chunk-DNCZM4KN.mjs +0 -4
- package/dist/chunk-DNCZM4KN.mjs.map +0 -1
- package/dist/chunk-EMF3RT6E.mjs +0 -14
- package/dist/chunk-EMF3RT6E.mjs.map +0 -1
- package/dist/chunk-HQX3Z7PF.mjs +0 -3
- package/dist/chunk-HQX3Z7PF.mjs.map +0 -1
- package/dist/chunk-LKLVBL24.js +0 -3
- package/dist/chunk-LKLVBL24.js.map +0 -1
- package/dist/chunk-NOEKD4DT.js +0 -4
- package/dist/chunk-NOEKD4DT.js.map +0 -1
- package/dist/chunk-UDVSKE3Y.mjs +0 -3
- package/dist/chunk-UDVSKE3Y.mjs.map +0 -1
- package/dist/growthbook-NJGOOJH4.mjs +0 -3
- package/dist/growthbook-NJGOOJH4.mjs.map +0 -1
- package/dist/posthog-72HGN74H.mjs +0 -6
- package/dist/posthog-72HGN74H.mjs.map +0 -1
package/dist/chunk-HQX3Z7PF.mjs
DELETED
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
/* @deriv-com/analytics - Browser ESM Bundle (RudderStack + PostHog) - Built with tsup */
|
|
2
|
-
var r=Object.defineProperty;var s=(t,o,e)=>o in t?r(t,o,{enumerable:!0,configurable:!0,writable:!0,value:e}):t[o]=e;var n=(t,o,e)=>s(t,typeof o!="symbol"?o+"":o,e);var i="https://deriv.com/cdn-cgi/trace",a="https://cdn.growthbook.io",p="https://deriv-dataplane.rudderstack.com",h="https://ph.deriv.com",m="https://us.posthog.com",c=["deriv.com","deriv.be","deriv.me","deriv.team","deriv.ae"],l=()=>{if(typeof window>"u")return".deriv.com";let t=window.location.hostname;if(t==="localhost")return"";let o=c.find(e=>t.includes(e));return o?`.${o}`:".deriv.com"};export{n as a,i as b,a as c,p as d,h as e,m as f,c as g,l as h};
|
|
3
|
-
//# sourceMappingURL=chunk-HQX3Z7PF.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/urls.ts"],"sourcesContent":["export const cloudflareTrace = 'https://deriv.com/cdn-cgi/trace'\nexport const growthbookApi = 'https://cdn.growthbook.io'\nexport const rudderstackDataplane = 'https://deriv-dataplane.rudderstack.com'\nexport const posthogApiHost = 'https://ph.deriv.com'\nexport const posthogUiHost = 'https://us.posthog.com'\n\nexport const allowedDomains = ['deriv.com', 'deriv.be', 'deriv.me', 'deriv.team', 'deriv.ae'] as const\n\nexport const getAllowedDomain = (): string => {\n if (typeof window === 'undefined') return '.deriv.com'\n const hostname = window.location.hostname\n\n if (hostname === 'localhost') return ''\n\n const matched = allowedDomains.find(d => hostname.includes(d))\n return matched ? `.${matched}` : '.deriv.com'\n}\n"],"mappings":";oKAAO,IAAMA,EAAkB,kCAClBC,EAAgB,4BAChBC,EAAuB,0CACvBC,EAAiB,uBACjBC,EAAgB,yBAEhBC,EAAiB,CAAC,YAAa,WAAY,WAAY,aAAc,UAAU,EAE/EC,EAAmB,IAAc,CAC1C,GAAI,OAAO,OAAW,IAAa,MAAO,aAC1C,IAAMC,EAAW,OAAO,SAAS,SAEjC,GAAIA,IAAa,YAAa,MAAO,GAErC,IAAMC,EAAUH,EAAe,KAAKI,GAAKF,EAAS,SAASE,CAAC,CAAC,EAC7D,OAAOD,EAAU,IAAIA,CAAO,GAAK,YACrC","names":["cloudflareTrace","growthbookApi","rudderstackDataplane","posthogApiHost","posthogUiHost","allowedDomains","getAllowedDomain","hostname","matched","d"]}
|
package/dist/chunk-LKLVBL24.js
DELETED
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
'use strict';/* @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.addEventhandler=this.addEventHandler.bind(this);}hash(e,n=32){let t=r=>{let o=2166136261;for(let c=0;c<r.length;c++)o^=r.charCodeAt(c),o=o*16777619>>>0;return o.toString(16)},s=r=>btoa(r),a=t(e),i=s(a);for(;i.length<n;)i+=s(t(i));return i.substring(0,n)}getCookies(e){let t=`; ${document.cookie}`.split(`; ${e}=`);if(t.length===2){let s=decodeURIComponent(t.pop().split(";").shift());try{return JSON.parse(s)}catch{return s}}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,s){return this._url=s,this._method=t,e.apply(this,arguments)},XMLHttpRequest.prototype.send=function(t){return this.addEventListener("load",function(){let s=null;if(typeof t=="string")try{s=JSON.parse(t);}catch{s=t;}let a={url:this._url,method:this._method,status:this.status,headers:this.getAllResponseHeaders(),data:this.responseText,payload:s};f.responses.push(a);}),n.apply(this,arguments)},this.isTrackingResponses=true;}isReady(){if(typeof window>"u")return false;let e=window.Analytics;return typeof e>"u"||e===null?false:!!e.Analytics?.getInstances?.()?.tracking}parseCookies(e){if(typeof document>"u")return null;let n=document.cookie.split("; ").reduce((t,s)=>{let[a,i]=s.split("=");return a&&i&&(t[decodeURIComponent(a)]=decodeURIComponent(i)),t},{});try{return n[e]?JSON.parse(n[e]):null}catch{return null}}isPageViewSent(){return !!this.responses.find(e=>e.payload?.type==="page"&&e.payload?.anonymousId)}set(e){this.push("cached_analytics_events",e);}push(e,n){if(typeof document>"u")return;let t=[],s=this.parseCookies(e);s&&Array.isArray(s)&&(t=s),t.push(n);let a=this.getAllowedDomain(),i=365*24*60*60,r=`${e}=${encodeURIComponent(JSON.stringify(t))}; path=/; Domain=${a}; max-age=${i}; SameSite=Lax`;document.cookie=r;}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),s=window.Analytics;this.isReady()&&!n?s.Analytics.trackEvent(t.name,t.properties):this.set(t);}pageView(){typeof window>"u"||(this.isTrackingResponses||(this.trackResponses(),this.trackPageUnload()),this.interval=setInterval(()=>{let e=window.Analytics;typeof e<"u"&&typeof e.Analytics?.pageView=="function"&&this.isReady()&&e.Analytics.pageView(window.location.href,"Trader's hub"),this.isPageViewSent()&&this.interval&&clearInterval(this.interval);},1e3));}listen(e,{name:n="",properties:t={}},s=false,a=null){let i=o=>{o.dataset?.clickEventTracking||(o.addEventListener("click",c=>{let l={name:n,properties:t,cache:s};if(typeof a=="function"){let d=a(c);l={...d,cache:d.cache??s};}this.track(l,l.cache??false);}),o.dataset.clickEventTracking="true");};(e instanceof NodeList?Array.from(e):[e]).forEach(i);}addEventHandler(e){return typeof window>"u"?this:(e.forEach(({element:n,event:t={name:"",properties:{}},cache:s=false,callback:a=null})=>{if(typeof n=="string"){let i=n;if(!this.delegatedSelectors.has(i)){let r=o=>{let c=o.target;if(!c)return;let l=c.closest(i);if(l&&!l.dataset?.clickEventTracking){let d={name:t.name,properties:t.properties,cache:s};if(typeof a=="function"){let h=a(o);d={...h,cache:h.cache??s};}l.dataset.clickEventTracking="true",this.track(d,d.cache??false);}};document.addEventListener("click",r),this.delegatedSelectors.add(i);}}else (n instanceof NodeList?Array.from(n):[n]).forEach(r=>{r&&!r.dataset?.clickEventTracking&&this.listen(r,t,s,a);});}),this)}loadEvent(e){return e.forEach(({event:n})=>{let{name:t,properties:s}=n;this.track({name:t,properties:s});}),this}pageLoadEvent(e){if(typeof window>"u")return this;let n=window.location.pathname.slice(1);return e.forEach(({pages:t=[],excludedPages:s=[],event:a,callback:i=null})=>{let r=false;if(t.length?t.includes(n)&&(r=true):s.length&&s.includes(n)||(r=true),r){let o=i?i():a;this.loadEvent([{event:o}]);}}),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-LKLVBL24.js.map
|
|
3
|
-
//# sourceMappingURL=chunk-LKLVBL24.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/analytics-cache.ts"],"names":["AnalyticsCacheManager","inputString","desiredLength","fnv1aHash","string","hash","i","base64Encode","combined","name","parts","cookieValue","originalXhrOpen","originalXhrSend","method","url","body","parsedPayload","responseData","cacheTrackEvents","Analytics","cookieName","cookies","acc","cookie","key","value","event","data","storedCookies","cacheCookie","domain","maxAge","cookieString","hostname","clientInfo","email","originalEvent","cache","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-LKLVBL24.js","sourcesContent":["/**\n * Analytics Cache Manager - Version 1.1.0\n * Enhanced TypeScript implementation with better type safety and SSR support\n */\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\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 * Check if Analytics instance is ready\n */\n isReady(): boolean {\n if (typeof window === 'undefined') return false\n\n const Analytics = (window as any).Analytics\n if (typeof Analytics === 'undefined' || Analytics === null) {\n return false\n }\n\n const instances = Analytics.Analytics?.getInstances?.()\n return !!instances?.tracking\n }\n\n /**\n * Parse cookies into an object\n */\n private parseCookies(cookieName: string): any {\n if (typeof document === 'undefined') return null\n\n const cookies = document.cookie.split('; ').reduce((acc: Record<string, string>, cookie) => {\n const [key, value] = cookie.split('=')\n if (key && value) {\n acc[decodeURIComponent(key)] = decodeURIComponent(value)\n }\n return acc\n }, {})\n\n try {\n return cookies[cookieName] ? JSON.parse(cookies[cookieName]) : null\n } catch (error) {\n return null\n }\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.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 Analytics = (window as any).Analytics\n\n if (this.isReady() && !cache) {\n Analytics.Analytics.trackEvent(event.name, event.properties)\n } else {\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 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 Analytics.Analytics.pageView(window.location.href, \"Trader's hub\")\n }\n\n if (this.isPageViewSent()) {\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 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 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.loadEvent([{ event: eventData }])\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/chunk-NOEKD4DT.js
DELETED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
'use strict';/* @deriv-com/analytics - NPM Package - Built with tsup */
|
|
2
|
-
var c="https://deriv.com/cdn-cgi/trace",n="https://cdn.growthbook.io",d="https://deriv-dataplane.rudderstack.com",i="https://ph.deriv.com",a="https://us.posthog.com",r=["deriv.com","deriv.be","deriv.me","deriv.team","deriv.ae"],p=()=>{if(typeof window>"u")return ".deriv.com";let o=window.location.hostname;if(o==="localhost")return "";let t=r.find(e=>o.includes(e));return t?`.${t}`:".deriv.com"};
|
|
3
|
-
exports.a=c;exports.b=n;exports.c=d;exports.d=i;exports.e=a;exports.f=r;exports.g=p;//# sourceMappingURL=chunk-NOEKD4DT.js.map
|
|
4
|
-
//# sourceMappingURL=chunk-NOEKD4DT.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/urls.ts"],"names":["cloudflareTrace","growthbookApi","rudderstackDataplane","posthogApiHost","posthogUiHost","allowedDomains","getAllowedDomain","hostname","matched","d"],"mappings":";AAAO,IAAMA,CAAAA,CAAkB,iCAAA,CAClBC,CAAAA,CAAgB,2BAAA,CAChBC,CAAAA,CAAuB,0CACvBC,CAAAA,CAAiB,sBAAA,CACjBC,CAAAA,CAAgB,wBAAA,CAEhBC,CAAAA,CAAiB,CAAC,YAAa,UAAA,CAAY,UAAA,CAAY,YAAA,CAAc,UAAU,CAAA,CAE/EC,CAAAA,CAAmB,IAAc,CAC1C,GAAI,OAAO,MAAA,CAAW,GAAA,CAAa,OAAO,aAC1C,IAAMC,CAAAA,CAAW,MAAA,CAAO,QAAA,CAAS,QAAA,CAEjC,GAAIA,IAAa,WAAA,CAAa,OAAO,EAAA,CAErC,IAAMC,CAAAA,CAAUH,CAAAA,CAAe,KAAKI,CAAAA,EAAKF,CAAAA,CAAS,QAAA,CAASE,CAAC,CAAC,CAAA,CAC7D,OAAOD,CAAAA,CAAU,CAAA,CAAA,EAAIA,CAAO,CAAA,CAAA,CAAK,YACrC","file":"chunk-NOEKD4DT.js","sourcesContent":["export const cloudflareTrace = 'https://deriv.com/cdn-cgi/trace'\nexport const growthbookApi = 'https://cdn.growthbook.io'\nexport const rudderstackDataplane = 'https://deriv-dataplane.rudderstack.com'\nexport const posthogApiHost = 'https://ph.deriv.com'\nexport const posthogUiHost = 'https://us.posthog.com'\n\nexport const allowedDomains = ['deriv.com', 'deriv.be', 'deriv.me', 'deriv.team', 'deriv.ae'] as const\n\nexport const getAllowedDomain = (): string => {\n if (typeof window === 'undefined') return '.deriv.com'\n const hostname = window.location.hostname\n\n if (hostname === 'localhost') return ''\n\n const matched = allowedDomains.find(d => hostname.includes(d))\n return matched ? `.${matched}` : '.deriv.com'\n}\n"]}
|
package/dist/chunk-UDVSKE3Y.mjs
DELETED
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import {c}from'./chunk-DNCZM4KN.mjs';import {RudderAnalytics}from'@rudderstack/analytics-js';/* @deriv-com/analytics - NPM Package - Built with tsup */
|
|
2
|
-
var k=2*365*24*60*60,n=class n{constructor(t,e){this.analytics=new RudderAnalytics;this.has_identified=false;this.has_initialized=false;this.current_page="";this.rudderstack_anonymous_cookie_key="rudder_anonymous_id";this.getAnonymousId=()=>document.cookie.match("(^|;)\\s*"+this.rudderstack_anonymous_cookie_key+"\\s*=\\s*([^;]+)")?.pop();this.setCookieIfNotExists=()=>{if(!this.getAnonymousId())try{let e=window.location.hostname,s=["webflow.io"].some(o=>e.endsWith(o))?e:e.split(".").slice(-2).join("."),d;if(crypto?.randomUUID)d=crypto.randomUUID();else if(crypto?.getRandomValues){let o=new Uint8Array(16);crypto.getRandomValues(o),o[6]=o[6]&15|64,o[8]=o[8]&63|128;let r=Array.from(o,h=>h.toString(16).padStart(2,"0")).join("");d=`${r.slice(0,8)}-${r.slice(8,12)}-${r.slice(12,16)}-${r.slice(16,20)}-${r.slice(20)}`;}else throw new Error("Crypto API not available for secure random UUID generation");let u=window.location.protocol==="https:"?"; Secure":"";document.cookie=`${this.rudderstack_anonymous_cookie_key}=${d}; path=/; Domain=${s}; max-age=${k}; SameSite=Lax${u}`;}catch(e){console.warn("RudderStack: Failed to set anonymous ID cookie",e);}};this.getUserId=()=>this.analytics.getUserId();this.init=t=>{if(!t){console.warn("RudderStack: Initialization skipped - no key provided");return}try{this.setCookieIfNotExists(),this.analytics.load(t,c,{externalAnonymousIdCookieName:this.rudderstack_anonymous_cookie_key,lockIntegrationsVersion:!0,onLoaded:()=>{this.has_initialized=!0,this.has_identified=!!this.getUserId(),this.onLoadedCallback?.();}});}catch(e){console.error("RudderStack: Failed to initialize",e);}};this.identifyEvent=(t,e)=>{if(!this.has_initialized){console.warn("RudderStack: Cannot identify - not initialized");return}let i=this.getUserId();if(!i||i!==t)try{this.analytics.identify(t,e||{}),this.has_identified=!0;}catch(a){console.error("RudderStack: Failed to identify user",a);}else this.has_identified=true;};this.pageView=(t,e="Deriv App",i,a)=>{if(!(!this.has_initialized||t===this.current_page))try{let s={...i&&{user_id:i},...a};this.analytics.page(e,t,s),this.current_page=t;}catch(s){console.error("RudderStack: Failed to track page view",s);}};this.reset=()=>{if(this.has_initialized)try{this.analytics.reset(),this.has_identified=!1;}catch(t){console.error("RudderStack: Failed to reset",t);}};this.track=(t,e)=>{if(this.has_initialized)try{this.analytics.track(t,e);}catch(i){console.warn("RudderStack: Failed to track event",i);}};this.onLoadedCallback=e,this.init(t);}};n.getRudderStackInstance=(t,e)=>(n._instance||(n._instance=new n(t,e)),n._instance);var l=n;export{l as a};//# sourceMappingURL=chunk-UDVSKE3Y.mjs.map
|
|
3
|
-
//# sourceMappingURL=chunk-UDVSKE3Y.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/providers/rudderstack.ts"],"names":["COOKIE_MAX_AGE_SECONDS","_RudderStack","RUDDERSTACK_KEY","onLoaded","RudderAnalytics","hostname","domain_name","domain","uuid","bytes","hex","byte","secureFlag","error","rudderstackDataplane","user_id","payload","currentUserId","current_page","platform","properties","pageProperties","event","err","RudderStack"],"mappings":"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","file":"chunk-UDVSKE3Y.mjs","sourcesContent":["import { RudderAnalytics } from '@rudderstack/analytics-js'\nimport type { TCoreAttributes, TAllEvents } from '../types'\nimport { rudderstackDataplane } from '../utils/urls'\n\n// Constants\nconst COOKIE_MAX_AGE_SECONDS = 2 * 365 * 24 * 60 * 60 // 2 years\n\n/**\n * RudderStack analytics wrapper with singleton pattern.\n * Handles user tracking, page views, and event analytics.\n */\nexport class RudderStack {\n analytics = new RudderAnalytics()\n has_identified = false\n has_initialized = false\n current_page = ''\n rudderstack_anonymous_cookie_key = 'rudder_anonymous_id'\n private static _instance: RudderStack\n private onLoadedCallback?: () => void\n\n constructor(RUDDERSTACK_KEY: string, onLoaded?: () => void) {\n this.onLoadedCallback = onLoaded\n this.init(RUDDERSTACK_KEY)\n }\n\n /**\n * Get or create the singleton instance of RudderStack\n * @param RUDDERSTACK_KEY - RudderStack write key\n * @param onLoaded - Optional callback when RudderStack is loaded\n * @returns The RudderStack singleton instance\n */\n public static getRudderStackInstance = (RUDDERSTACK_KEY: string, onLoaded?: () => void): RudderStack => {\n if (!RudderStack._instance) {\n RudderStack._instance = new RudderStack(RUDDERSTACK_KEY, onLoaded)\n }\n return RudderStack._instance\n }\n\n /**\n * Get the anonymous ID from cookies\n * @returns The anonymous ID or undefined if not found\n */\n getAnonymousId = (): string | undefined => {\n return document.cookie.match('(^|;)\\\\s*' + this.rudderstack_anonymous_cookie_key + '\\\\s*=\\\\s*([^;]+)')?.pop()\n }\n\n /**\n * Set anonymous ID cookie if it doesn't exist\n * Creates a secure cookie with proper domain and security attributes\n */\n setCookieIfNotExists = (): void => {\n const anonymous_id = this.getAnonymousId()\n\n if (!anonymous_id) {\n try {\n const hostname = window.location.hostname\n const external_domains = ['webflow.io']\n const is_external_domain = external_domains.some(domain => hostname.endsWith(domain))\n const domain_name = is_external_domain ? hostname : hostname.split('.').slice(-2).join('.')\n\n // Generate cryptographically secure UUID\n let uuid: string\n if (crypto?.randomUUID) {\n uuid = crypto.randomUUID()\n } else if (crypto?.getRandomValues) {\n // Fallback: Generate UUID v4 using crypto.getRandomValues\n const bytes = new Uint8Array(16)\n crypto.getRandomValues(bytes)\n // Set version (4) and variant bits\n bytes[6] = (bytes[6]! & 0x0f) | 0x40\n bytes[8] = (bytes[8]! & 0x3f) | 0x80\n // Convert to UUID string format\n const hex = Array.from(bytes, byte => byte.toString(16).padStart(2, '0')).join('')\n uuid = `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`\n } else {\n // Crypto API not available - this should not happen in modern browsers\n throw new Error('Crypto API not available for secure random UUID generation')\n }\n\n const isSecure = window.location.protocol === 'https:'\n const secureFlag = isSecure ? '; Secure' : ''\n\n document.cookie = `${this.rudderstack_anonymous_cookie_key}=${uuid}; path=/; Domain=${domain_name}; max-age=${COOKIE_MAX_AGE_SECONDS}; SameSite=Lax${secureFlag}`\n } catch (error) {\n console.warn('RudderStack: Failed to set anonymous ID cookie', error)\n }\n }\n }\n\n /**\n * Get the current user ID\n * @returns The user ID, null, or undefined if not identified\n */\n getUserId = () => this.analytics.getUserId()\n\n /**\n * Initialize RudderStack with the provided key\n * @param RUDDERSTACK_KEY - RudderStack write key\n */\n init = (RUDDERSTACK_KEY: string): void => {\n if (!RUDDERSTACK_KEY) {\n console.warn('RudderStack: Initialization skipped - no key provided')\n return\n }\n\n try {\n this.setCookieIfNotExists()\n\n this.analytics.load(RUDDERSTACK_KEY, rudderstackDataplane, {\n externalAnonymousIdCookieName: this.rudderstack_anonymous_cookie_key,\n // Performance optimizations\n lockIntegrationsVersion: true,\n onLoaded: () => {\n this.has_initialized = true\n this.has_identified = !!this.getUserId()\n this.onLoadedCallback?.()\n },\n })\n } catch (error) {\n console.error('RudderStack: Failed to initialize', error)\n }\n }\n\n /**\n * Identify a user with RudderStack\n * Only identifies if user hasn't been identified yet\n * @param user_id - The user ID to identify\n * @param payload - Optional user traits (e.g., language, custom properties)\n */\n identifyEvent = (user_id: string, payload?: Record<string, any>): void => {\n if (!this.has_initialized) {\n console.warn('RudderStack: Cannot identify - not initialized')\n return\n }\n\n const currentUserId = this.getUserId()\n if (!currentUserId || currentUserId !== user_id) {\n try {\n this.analytics.identify(user_id, payload || {})\n this.has_identified = true\n } catch (error) {\n console.error('RudderStack: Failed to identify user', error)\n }\n } else {\n this.has_identified = true\n }\n }\n\n /**\n * Track a page view event\n * @param current_page - The page name/path\n * @param platform - The platform name (default: 'Deriv App')\n * @param user_id - The user ID\n * @param properties - Additional page properties\n */\n pageView = (\n current_page: string,\n platform = 'Deriv App',\n user_id: string,\n properties?: Record<string, unknown>\n ): void => {\n if (!this.has_initialized || current_page === this.current_page) return\n\n try {\n const pageProperties = {\n ...(user_id && { user_id }),\n ...properties,\n }\n\n // Type assertion needed due to RudderStack's type definitions\n this.analytics.page(platform, current_page, pageProperties as any)\n this.current_page = current_page\n } catch (error) {\n console.error('RudderStack: Failed to track page view', error)\n }\n }\n\n /**\n * Reset the RudderStack instance\n * Clears user identification and resets tracking state\n */\n reset = (): void => {\n if (!this.has_initialized) return\n\n try {\n this.analytics.reset()\n this.has_identified = false\n } catch (error) {\n console.error('RudderStack: Failed to reset', error)\n }\n }\n\n /**\n * Track a custom event with payload\n * Payload is pre-cleaned by analytics.ts using cleanObject before being passed here\n * @param event - The event name\n * @param payload - The event payload with core attributes\n */\n track = <T extends keyof TAllEvents>(event: T, payload: TAllEvents[T] & Partial<TCoreAttributes>): void => {\n if (!this.has_initialized) return\n\n try {\n // Type assertion needed to match RudderStack's ApiObject type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.analytics.track(event as string, payload as any)\n } catch (err) {\n console.warn('RudderStack: Failed to track event', err)\n }\n }\n}\n"]}
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
/* @deriv-com/analytics - Browser ESM Bundle (RudderStack + PostHog) - Built with tsup */
|
|
2
|
-
import{a as y}from"./chunk-EMF3RT6E.mjs";import{c as v}from"./chunk-HQX3Z7PF.mjs";import{GrowthBook as m}from"@growthbook/growthbook";var o=class o{constructor(t,e,i={}){this.analytics=new y;this.isLoaded=!1;this.status=void 0;this.setAttributes=({id:t,country:e,user_language:i,device_language:s,device_type:n,utm_source:r,utm_medium:a,utm_campaign:d,is_authorised:w,url:h,domain:u,utm_content:f,residence_country:c,loggedIn:k,network_type:l,network_downlink:b,user_id:p,anonymous_id:G,account_mode:g})=>{let I=this.GrowthBook.getAttributes();this.GrowthBook.setAttributes({...I,id:t,...p!==void 0&&{user_id:p},...G!==void 0&&{anonymous_id:G},...e!==void 0&&{country:e},...c!==void 0&&{residence_country:c},...i!==void 0&&{user_language:i},...s!==void 0&&{device_language:s},...n!==void 0&&{device_type:n},...r!==void 0&&{utm_source:r},...a!==void 0&&{utm_medium:a},...d!==void 0&&{utm_campaign:d},...w!==void 0&&{is_authorised:w},...h!==void 0&&{url:h},...u!==void 0&&{domain:u},...f!==void 0&&{utm_content:f},...k!==void 0&&{loggedIn:k},...l!==void 0&&{network_type:l},...b!==void 0&&{network_downlink:b},...g!==void 0&&{account_mode:g}})};this.getFeatureValue=(t,e)=>this.GrowthBook.getFeatureValue(t,e);this.getStatus=async()=>(await this.waitForIsLoaded(),{isLoaded:this.isLoaded,status:this.status});this.getFeatureState=t=>this.GrowthBook.evalFeature(t);this.setUrl=t=>this.GrowthBook.setURL(t);this.isOn=t=>this.GrowthBook.isOn(t);this.init=async()=>{let t=await this.GrowthBook.init({timeout:2e3,streaming:!0}).catch(()=>{});this.status=t,this.isLoaded=!0};this.destroy=()=>{this.GrowthBook.destroy(),this.isLoaded=!1,this.status=void 0};let s=typeof window<"u"?window.location.hostname.includes("localhost"):!1;this.GrowthBook=new m({apiHost:v,clientKey:t,decryptionKey:e,antiFlicker:!1,navigateDelay:0,antiFlickerTimeout:3500,subscribeToChanges:!0,enableDevMode:s,trackingCallback:(n,r)=>{typeof window<"u"&&window.dataLayer&&window.dataLayer.push({event:"experiment_viewed",event_category:"experiment",rudder_anonymous_id:this.analytics.getAnonymousId(),experiment_id:n.key,variation_id:r.variationId}),this.analytics.track("experiment_viewed",{experimentId:n.key,variationId:r.variationId})},...i}),this.init()}reapplyExperiment(t){let e=t??(typeof window<"u"?window.location.href:"");this.GrowthBook.setURL(e)}waitForIsLoaded(t=1e4){return new Promise((e,i)=>{let s=Date.now(),n=setInterval(()=>{this.isLoaded?(clearInterval(n),e()):Date.now()-s>=t&&(clearInterval(n),i(new Error("GrowthBook initialization timeout")))},100)})}};o.getGrowthBookInstance=(t,e,i)=>o._instance?(typeof window<"u"&&console.warn&&console.warn("GrowthBook instance already exists. Ignoring new initialization parameters."),o._instance):(o._instance=new o(t,e??"",i),o._instance),o.resetInstance=()=>{o._instance&&(o._instance.destroy(),o._instance=void 0)};var B=o;export{B as Growthbook};
|
|
3
|
-
//# sourceMappingURL=growthbook-NJGOOJH4.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/providers/growthbook.ts"],"sourcesContent":["import { GrowthBook, InitResponse } from '@growthbook/growthbook'\nimport { RudderAnalytics } from '@rudderstack/analytics-js'\nimport {\n TGrowthbookAttributes,\n TGrowthbookOptions,\n GrowthbookConfigs,\n TGrowthbookCoreAttributes,\n} from './growthbookTypes'\nimport { growthbookApi } from '../utils/urls'\n\nexport class Growthbook {\n analytics = new RudderAnalytics()\n GrowthBook: GrowthBook<GrowthbookConfigs>\n private static _instance: Growthbook\n isLoaded = false\n status: void | InitResponse = undefined\n\n // we have to pass settings due the specific framework implementation\n constructor(clientKey: string, decryptionKey: string, growthbookOptions: TGrowthbookOptions = {}) {\n const isLocalhost = typeof window !== 'undefined' ? window.location.hostname.includes('localhost') : false\n\n this.GrowthBook = new GrowthBook<GrowthbookConfigs>({\n apiHost: growthbookApi,\n clientKey,\n decryptionKey,\n antiFlicker: false,\n navigateDelay: 0,\n antiFlickerTimeout: 3500,\n subscribeToChanges: true,\n enableDevMode: isLocalhost,\n trackingCallback: (experiment, result) => {\n if (typeof window !== 'undefined' && window.dataLayer) {\n window.dataLayer.push({\n event: 'experiment_viewed',\n event_category: 'experiment',\n rudder_anonymous_id: this.analytics.getAnonymousId(),\n experiment_id: experiment.key,\n variation_id: result.variationId,\n })\n }\n this.analytics.track('experiment_viewed', {\n experimentId: experiment.key,\n variationId: result.variationId,\n })\n },\n ...growthbookOptions,\n })\n this.init()\n }\n\n // for make instance by singleton\n public static getGrowthBookInstance = (\n clientKey: string,\n decryptionKey?: string,\n growthbookOptions?: TGrowthbookOptions\n ) => {\n if (!Growthbook._instance) {\n Growthbook._instance = new Growthbook(clientKey, decryptionKey ?? '', growthbookOptions)\n return Growthbook._instance\n }\n\n // Warn if trying to reinitialize with different parameters\n if (typeof window !== 'undefined' && console.warn) {\n console.warn('GrowthBook instance already exists. Ignoring new initialization parameters.')\n }\n\n return Growthbook._instance\n }\n\n reapplyExperiment(url?: string) {\n const currentUrl = url ?? (typeof window !== 'undefined' ? window.location.href : '')\n this.GrowthBook.setURL(currentUrl)\n }\n\n // Utility function to wait for isLoaded to become true\n private waitForIsLoaded(timeout = 10000): Promise<void> {\n return new Promise((resolve, reject) => {\n const startTime = Date.now()\n const checkInterval = setInterval(() => {\n if (this.isLoaded) {\n clearInterval(checkInterval)\n resolve()\n } else if (Date.now() - startTime >= timeout) {\n clearInterval(checkInterval)\n reject(new Error('GrowthBook initialization timeout'))\n }\n }, 100)\n })\n }\n\n setAttributes = ({\n id,\n country,\n user_language,\n device_language,\n device_type,\n utm_source,\n utm_medium,\n utm_campaign,\n is_authorised,\n url,\n domain,\n utm_content,\n residence_country,\n loggedIn,\n network_type,\n network_downlink,\n user_id,\n anonymous_id,\n account_mode,\n }: TGrowthbookAttributes) => {\n const currentAttributes = this.GrowthBook.getAttributes()\n this.GrowthBook.setAttributes({\n ...currentAttributes,\n id,\n ...(user_id !== undefined && { user_id }),\n ...(anonymous_id !== undefined && { anonymous_id }),\n ...(country !== undefined && { country }),\n ...(residence_country !== undefined && { residence_country }),\n ...(user_language !== undefined && { user_language }),\n ...(device_language !== undefined && { device_language }),\n ...(device_type !== undefined && { device_type }),\n ...(utm_source !== undefined && { utm_source }),\n ...(utm_medium !== undefined && { utm_medium }),\n ...(utm_campaign !== undefined && { utm_campaign }),\n ...(is_authorised !== undefined && { is_authorised }),\n ...(url !== undefined && { url }),\n ...(domain !== undefined && { domain }),\n ...(utm_content !== undefined && { utm_content }),\n ...(loggedIn !== undefined && { loggedIn }),\n ...(network_type !== undefined && { network_type }),\n ...(network_downlink !== undefined && { network_downlink }),\n ...(account_mode !== undefined && { account_mode }),\n })\n }\n getFeatureValue = <K extends keyof GrowthbookConfigs, V extends GrowthbookConfigs[K]>(key: K, defaultValue: V) => {\n return this.GrowthBook.getFeatureValue(key as string, defaultValue)\n }\n getStatus = async (): Promise<{ isLoaded: boolean; status: void | InitResponse }> => {\n await this.waitForIsLoaded()\n\n return {\n isLoaded: this.isLoaded,\n status: this.status,\n }\n }\n getFeatureState = (id: string) => this.GrowthBook.evalFeature(id)\n setUrl = (href: string) => this.GrowthBook.setURL(href)\n isOn = (key: string) => this.GrowthBook.isOn(key)\n\n init = async () => {\n const status = await this.GrowthBook.init({ timeout: 2000, streaming: true }).catch(() => {\n // Silently handle initialization errors\n })\n\n this.status = status\n this.isLoaded = true\n }\n\n // Destroy the GrowthBook instance and reset singleton\n destroy = () => {\n this.GrowthBook.destroy()\n this.isLoaded = false\n this.status = undefined\n }\n\n // Reset the singleton instance (useful for testing)\n public static resetInstance = () => {\n if (Growthbook._instance) {\n Growthbook._instance.destroy()\n Growthbook._instance = undefined as any\n }\n }\n}\n\nexport type { GrowthbookConfigs, TGrowthbookAttributes, TGrowthbookOptions, TGrowthbookCoreAttributes }\n"],"mappings":"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","names":["GrowthBook","_Growthbook","clientKey","decryptionKey","growthbookOptions","RudderAnalytics","id","country","user_language","device_language","device_type","utm_source","utm_medium","utm_campaign","is_authorised","url","domain","utm_content","residence_country","loggedIn","network_type","network_downlink","user_id","anonymous_id","account_mode","currentAttributes","key","defaultValue","href","status","isLocalhost","GrowthBook","growthbookApi","experiment","result","currentUrl","timeout","resolve","reject","startTime","checkInterval","Growthbook"]}
|