@deriv-com/analytics 1.39.3 → 1.39.4

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.
Files changed (45) hide show
  1. package/dist/browser/analytics.bundle.global.js +12 -12
  2. package/dist/browser/analytics.bundle.global.js.map +1 -1
  3. package/dist/browser/analytics.esm.mjs +1 -1
  4. package/dist/chunk-35PJECDZ.mjs +9 -0
  5. package/dist/chunk-35PJECDZ.mjs.map +1 -0
  6. package/dist/{chunk-44P2MMGV.mjs → chunk-AGTZ7DYP.mjs} +3 -3
  7. package/dist/{chunk-44P2MMGV.mjs.map → chunk-AGTZ7DYP.mjs.map} +1 -1
  8. package/dist/chunk-AKXW5KX7.js +4 -0
  9. package/dist/chunk-AKXW5KX7.js.map +1 -0
  10. package/dist/{chunk-DWOZQCV4.mjs → chunk-ASVWETRZ.mjs} +3 -3
  11. package/dist/{chunk-DWOZQCV4.mjs.map → chunk-ASVWETRZ.mjs.map} +1 -1
  12. package/dist/{chunk-GZBZB5MW.js → chunk-EZWNCHVR.js} +3 -3
  13. package/dist/{chunk-GZBZB5MW.js.map → chunk-EZWNCHVR.js.map} +1 -1
  14. package/dist/{chunk-Y3QT7NAG.js → chunk-LFQLME3L.js} +3 -3
  15. package/dist/{chunk-Y3QT7NAG.js.map → chunk-LFQLME3L.js.map} +1 -1
  16. package/dist/{chunk-FY3NPDUL.mjs → chunk-T37YZXV4.mjs} +2 -2
  17. package/dist/chunk-XC5XM6FP.mjs +4 -0
  18. package/dist/chunk-XC5XM6FP.mjs.map +1 -0
  19. package/dist/{growthbook-IRLKT4KH.mjs → growthbook-TE4SOUS2.mjs} +2 -2
  20. package/dist/index.js +2 -2
  21. package/dist/index.mjs +1 -1
  22. package/dist/metafile-cjs.json +1 -1
  23. package/dist/metafile-esm.json +1 -1
  24. package/dist/metafile-iife.json +1 -1
  25. package/dist/posthog-66UECPCZ.mjs +6 -0
  26. package/dist/posthog-66UECPCZ.mjs.map +1 -0
  27. package/dist/providers/growthbook/index.js +2 -2
  28. package/dist/providers/growthbook/index.mjs +1 -1
  29. package/dist/providers/posthog/index.js +2 -2
  30. package/dist/providers/posthog/index.mjs +1 -1
  31. package/dist/providers/rudderstack/index.js +1 -1
  32. package/dist/providers/rudderstack/index.mjs +1 -1
  33. package/dist/utils/analytics-cache/index.js +1 -1
  34. package/dist/utils/analytics-cache/index.mjs +1 -1
  35. package/package.json +2 -2
  36. package/dist/chunk-GGU2UVKH.mjs +0 -4
  37. package/dist/chunk-GGU2UVKH.mjs.map +0 -1
  38. package/dist/chunk-J3V5QNIH.js +0 -4
  39. package/dist/chunk-J3V5QNIH.js.map +0 -1
  40. package/dist/chunk-UG2YL4OB.mjs +0 -9
  41. package/dist/chunk-UG2YL4OB.mjs.map +0 -1
  42. package/dist/posthog-PBG3EMGB.mjs +0 -6
  43. package/dist/posthog-PBG3EMGB.mjs.map +0 -1
  44. /package/dist/{chunk-FY3NPDUL.mjs.map → chunk-T37YZXV4.mjs.map} +0 -0
  45. /package/dist/{growthbook-IRLKT4KH.mjs.map → growthbook-TE4SOUS2.mjs.map} +0 -0
@@ -1,3 +1,3 @@
1
- 'use strict';var chunkJ3V5QNIH_js=require('../../chunk-J3V5QNIH.js'),growthbook=require('@growthbook/growthbook'),analyticsJs=require('@rudderstack/analytics-js');/* @deriv-com/analytics - NPM Package - Built with tsup */
2
- var i=class i{constructor(t,e,o={},n=false){this.analytics=new analyticsJs.RudderAnalytics;this.isLoaded=false;this.status=void 0;this.debug=false;this.log=chunkJ3V5QNIH_js.g("[GrowthBook]",()=>this.debug);this.setAttributes=({id:t,country:e,user_language:o,device_language:n,device_type:s,utm_source:r,utm_medium:a,utm_campaign:d,is_authorised:h,url:u,domain:w,utm_content:l,residence_country:f,loggedIn:c,network_type:g,network_downlink:k,user_id:b,anonymous_id:p,account_mode:G})=>{let v={...this.GrowthBook.getAttributes(),id:t,...b!==void 0&&{user_id:b},...p!==void 0&&{anonymous_id:p},...e!==void 0&&{country:e},...f!==void 0&&{residence_country:f},...o!==void 0&&{user_language:o},...n!==void 0&&{device_language:n},...s!==void 0&&{device_type:s},...r!==void 0&&{utm_source:r},...a!==void 0&&{utm_medium:a},...d!==void 0&&{utm_campaign:d},...h!==void 0&&{is_authorised:h},...u!==void 0&&{url:u},...w!==void 0&&{domain:w},...l!==void 0&&{utm_content:l},...c!==void 0&&{loggedIn:c},...g!==void 0&&{network_type:g},...k!==void 0&&{network_downlink:k},...G!==void 0&&{account_mode:G}};this.log("setAttributes | updating GrowthBook attributes",v),this.GrowthBook.setAttributes(v);};this.getFeatureValue=(t,e)=>{let o=this.GrowthBook.getFeatureValue(t,e);return this.log("getFeatureValue",{key:t,value:o,defaultValue:e}),o};this.getStatus=async()=>(await this.waitForIsLoaded(),{isLoaded:this.isLoaded,status:this.status});this.getFeatureState=t=>{let e=this.GrowthBook.evalFeature(t);return this.log("getFeatureState",{id:t,result:e}),e};this.setUrl=t=>{this.log("setUrl",{href:t}),this.GrowthBook.setURL(t);};this.isOn=t=>{let e=this.GrowthBook.isOn(t);return this.log("isOn",{key:t,result:e}),e};this.init=async()=>{this.log("init | initializing GrowthBook SDK");let t=await this.GrowthBook.init({timeout:2e3,streaming:true}).catch(()=>{});this.status=t,this.isLoaded=true,this.log("init | GrowthBook SDK loaded",{status:t});};this.destroy=()=>{this.GrowthBook.destroy(),this.isLoaded=false,this.status=void 0;};this.debug=n;let s=typeof window<"u"?window.location.hostname.includes("localhost"):false;this.GrowthBook=new growthbook.GrowthBook({apiHost:chunkJ3V5QNIH_js.a,clientKey:t,decryptionKey:e,antiFlicker:false,navigateDelay:0,antiFlickerTimeout:3500,subscribeToChanges:true,enableDevMode:s,trackingCallback:(r,a)=>{this.log("trackingCallback | experiment viewed",{experiment_id:r.key,variation_id:a.variationId}),typeof window<"u"&&window.dataLayer&&window.dataLayer.push({event:"experiment_viewed",event_category:"experiment",rudder_anonymous_id:this.analytics.getAnonymousId(),experiment_id:r.key,variation_id:a.variationId}),this.analytics.track("experiment_viewed",{experimentId:r.key,variationId:a.variationId});},...o}),this.init();}reapplyExperiment(t){let e=t??(typeof window<"u"?window.location.href:"");this.GrowthBook.setURL(e);}waitForIsLoaded(t=1e4){return new Promise((e,o)=>{let n=Date.now(),s=setInterval(()=>{this.isLoaded?(clearInterval(s),e()):Date.now()-n>=t&&(clearInterval(s),o(new Error("GrowthBook initialization timeout")));},100);})}};i.getGrowthBookInstance=(t,e,o,n=false)=>i._instance?(typeof window<"u"&&console.warn&&console.warn("GrowthBook instance already exists. Ignoring new initialization parameters."),i._instance):(i._instance=new i(t,e??"",o,n),i._instance),i.resetInstance=()=>{i._instance&&(i._instance.destroy(),i._instance=void 0);};var m=i;exports.Growthbook=m;//# sourceMappingURL=index.js.map
1
+ 'use strict';var chunkAKXW5KX7_js=require('../../chunk-AKXW5KX7.js'),growthbook=require('@growthbook/growthbook'),analyticsJs=require('@rudderstack/analytics-js');/* @deriv-com/analytics - NPM Package - Built with tsup */
2
+ var i=class i{constructor(t,e,o={},n=false){this.analytics=new analyticsJs.RudderAnalytics;this.isLoaded=false;this.status=void 0;this.debug=false;this.log=chunkAKXW5KX7_js.g("[GrowthBook]",()=>this.debug);this.setAttributes=({id:t,country:e,user_language:o,device_language:n,device_type:s,utm_source:r,utm_medium:a,utm_campaign:d,is_authorised:h,url:u,domain:w,utm_content:l,residence_country:f,loggedIn:c,network_type:g,network_downlink:k,user_id:b,anonymous_id:p,account_mode:G})=>{let v={...this.GrowthBook.getAttributes(),id:t,...b!==void 0&&{user_id:b},...p!==void 0&&{anonymous_id:p},...e!==void 0&&{country:e},...f!==void 0&&{residence_country:f},...o!==void 0&&{user_language:o},...n!==void 0&&{device_language:n},...s!==void 0&&{device_type:s},...r!==void 0&&{utm_source:r},...a!==void 0&&{utm_medium:a},...d!==void 0&&{utm_campaign:d},...h!==void 0&&{is_authorised:h},...u!==void 0&&{url:u},...w!==void 0&&{domain:w},...l!==void 0&&{utm_content:l},...c!==void 0&&{loggedIn:c},...g!==void 0&&{network_type:g},...k!==void 0&&{network_downlink:k},...G!==void 0&&{account_mode:G}};this.log("setAttributes | updating GrowthBook attributes",v),this.GrowthBook.setAttributes(v);};this.getFeatureValue=(t,e)=>{let o=this.GrowthBook.getFeatureValue(t,e);return this.log("getFeatureValue",{key:t,value:o,defaultValue:e}),o};this.getStatus=async()=>(await this.waitForIsLoaded(),{isLoaded:this.isLoaded,status:this.status});this.getFeatureState=t=>{let e=this.GrowthBook.evalFeature(t);return this.log("getFeatureState",{id:t,result:e}),e};this.setUrl=t=>{this.log("setUrl",{href:t}),this.GrowthBook.setURL(t);};this.isOn=t=>{let e=this.GrowthBook.isOn(t);return this.log("isOn",{key:t,result:e}),e};this.init=async()=>{this.log("init | initializing GrowthBook SDK");let t=await this.GrowthBook.init({timeout:2e3,streaming:true}).catch(()=>{});this.status=t,this.isLoaded=true,this.log("init | GrowthBook SDK loaded",{status:t});};this.destroy=()=>{this.GrowthBook.destroy(),this.isLoaded=false,this.status=void 0;};this.debug=n;let s=typeof window<"u"?window.location.hostname.includes("localhost"):false;this.GrowthBook=new growthbook.GrowthBook({apiHost:chunkAKXW5KX7_js.a,clientKey:t,decryptionKey:e,antiFlicker:false,navigateDelay:0,antiFlickerTimeout:3500,subscribeToChanges:true,enableDevMode:s,trackingCallback:(r,a)=>{this.log("trackingCallback | experiment viewed",{experiment_id:r.key,variation_id:a.variationId}),typeof window<"u"&&window.dataLayer&&window.dataLayer.push({event:"experiment_viewed",event_category:"experiment",rudder_anonymous_id:this.analytics.getAnonymousId(),experiment_id:r.key,variation_id:a.variationId}),this.analytics.track("experiment_viewed",{experimentId:r.key,variationId:a.variationId});},...o}),this.init();}reapplyExperiment(t){let e=t??(typeof window<"u"?window.location.href:"");this.GrowthBook.setURL(e);}waitForIsLoaded(t=1e4){return new Promise((e,o)=>{let n=Date.now(),s=setInterval(()=>{this.isLoaded?(clearInterval(s),e()):Date.now()-n>=t&&(clearInterval(s),o(new Error("GrowthBook initialization timeout")));},100);})}};i.getGrowthBookInstance=(t,e,o,n=false)=>i._instance?(typeof window<"u"&&console.warn&&console.warn("GrowthBook instance already exists. Ignoring new initialization parameters."),i._instance):(i._instance=new i(t,e??"",o,n),i._instance),i.resetInstance=()=>{i._instance&&(i._instance.destroy(),i._instance=void 0);};var m=i;exports.Growthbook=m;//# sourceMappingURL=index.js.map
3
3
  //# sourceMappingURL=index.js.map
@@ -1,3 +1,3 @@
1
- import {g,a}from'../../chunk-GGU2UVKH.mjs';import {GrowthBook}from'@growthbook/growthbook';import {RudderAnalytics}from'@rudderstack/analytics-js';/* @deriv-com/analytics - NPM Package - Built with tsup */
1
+ import {g,a}from'../../chunk-XC5XM6FP.mjs';import {GrowthBook}from'@growthbook/growthbook';import {RudderAnalytics}from'@rudderstack/analytics-js';/* @deriv-com/analytics - NPM Package - Built with tsup */
2
2
  var i=class i{constructor(t,e,o={},n=false){this.analytics=new RudderAnalytics;this.isLoaded=false;this.status=void 0;this.debug=false;this.log=g("[GrowthBook]",()=>this.debug);this.setAttributes=({id:t,country:e,user_language:o,device_language:n,device_type:s,utm_source:r,utm_medium:a,utm_campaign:d,is_authorised:h,url:u,domain:w,utm_content:l,residence_country:f,loggedIn:c,network_type:g,network_downlink:k,user_id:b,anonymous_id:p,account_mode:G})=>{let v={...this.GrowthBook.getAttributes(),id:t,...b!==void 0&&{user_id:b},...p!==void 0&&{anonymous_id:p},...e!==void 0&&{country:e},...f!==void 0&&{residence_country:f},...o!==void 0&&{user_language:o},...n!==void 0&&{device_language:n},...s!==void 0&&{device_type:s},...r!==void 0&&{utm_source:r},...a!==void 0&&{utm_medium:a},...d!==void 0&&{utm_campaign:d},...h!==void 0&&{is_authorised:h},...u!==void 0&&{url:u},...w!==void 0&&{domain:w},...l!==void 0&&{utm_content:l},...c!==void 0&&{loggedIn:c},...g!==void 0&&{network_type:g},...k!==void 0&&{network_downlink:k},...G!==void 0&&{account_mode:G}};this.log("setAttributes | updating GrowthBook attributes",v),this.GrowthBook.setAttributes(v);};this.getFeatureValue=(t,e)=>{let o=this.GrowthBook.getFeatureValue(t,e);return this.log("getFeatureValue",{key:t,value:o,defaultValue:e}),o};this.getStatus=async()=>(await this.waitForIsLoaded(),{isLoaded:this.isLoaded,status:this.status});this.getFeatureState=t=>{let e=this.GrowthBook.evalFeature(t);return this.log("getFeatureState",{id:t,result:e}),e};this.setUrl=t=>{this.log("setUrl",{href:t}),this.GrowthBook.setURL(t);};this.isOn=t=>{let e=this.GrowthBook.isOn(t);return this.log("isOn",{key:t,result:e}),e};this.init=async()=>{this.log("init | initializing GrowthBook SDK");let t=await this.GrowthBook.init({timeout:2e3,streaming:true}).catch(()=>{});this.status=t,this.isLoaded=true,this.log("init | GrowthBook SDK loaded",{status:t});};this.destroy=()=>{this.GrowthBook.destroy(),this.isLoaded=false,this.status=void 0;};this.debug=n;let s=typeof window<"u"?window.location.hostname.includes("localhost"):false;this.GrowthBook=new GrowthBook({apiHost:a,clientKey:t,decryptionKey:e,antiFlicker:false,navigateDelay:0,antiFlickerTimeout:3500,subscribeToChanges:true,enableDevMode:s,trackingCallback:(r,a)=>{this.log("trackingCallback | experiment viewed",{experiment_id:r.key,variation_id:a.variationId}),typeof window<"u"&&window.dataLayer&&window.dataLayer.push({event:"experiment_viewed",event_category:"experiment",rudder_anonymous_id:this.analytics.getAnonymousId(),experiment_id:r.key,variation_id:a.variationId}),this.analytics.track("experiment_viewed",{experimentId:r.key,variationId:a.variationId});},...o}),this.init();}reapplyExperiment(t){let e=t??(typeof window<"u"?window.location.href:"");this.GrowthBook.setURL(e);}waitForIsLoaded(t=1e4){return new Promise((e,o)=>{let n=Date.now(),s=setInterval(()=>{this.isLoaded?(clearInterval(s),e()):Date.now()-n>=t&&(clearInterval(s),o(new Error("GrowthBook initialization timeout")));},100);})}};i.getGrowthBookInstance=(t,e,o,n=false)=>i._instance?(typeof window<"u"&&console.warn&&console.warn("GrowthBook instance already exists. Ignoring new initialization parameters."),i._instance):(i._instance=new i(t,e??"",o,n),i._instance),i.resetInstance=()=>{i._instance&&(i._instance.destroy(),i._instance=void 0);};var m=i;export{m as Growthbook};//# sourceMappingURL=index.mjs.map
3
3
  //# sourceMappingURL=index.mjs.map
@@ -1,3 +1,3 @@
1
- 'use strict';var chunkJ3V5QNIH_js=require('../../chunk-J3V5QNIH.js'),r=require('posthog-js');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var r__default=/*#__PURE__*/_interopDefault(r);/* @deriv-com/analytics - NPM Package - Built with tsup */
2
- var n=class n{constructor(i,t=false){this.has_initialized=false;this.has_identified=false;this.debug=false;this.log=chunkJ3V5QNIH_js.g("[PostHog]",()=>this.debug);this.init=()=>{try{let{apiKey:i,api_host:t,config:e={}}=this.options;if(!i){console.warn("Posthog: No API key provided");return}let o=t||chunkJ3V5QNIH_js.d();this.log("init | loading PostHog SDK",{api_host:o});let s={api_host:o,ui_host:chunkJ3V5QNIH_js.c,autocapture:!0,capture_pageview:"history_change",session_recording:{recordCrossOriginIframes:!0,minimumDurationMilliseconds:3e4,...e.session_recording},before_send:l=>{if(typeof window>"u")return null;let a=window.location.hostname;if(a==="localhost"||a==="127.0.0.1")return l;let d=chunkJ3V5QNIH_js.e.some(c=>a.endsWith(`.${c}`)||a===c);return d||this.log("init | before_send blocked event from disallowed host",{currentHost:a}),d?l:null},...e};r__default.default.init(i,s),this.has_initialized=!0,this.log("init | PostHog SDK loaded successfully");}catch(i){console.error("Posthog: Failed to initialize",i);}};this.identifyEvent=(i,t)=>{if(!this.has_initialized){console.warn("Posthog: Cannot identify - not initialized");return}try{let e=typeof r__default.default._isIdentified=="function"?r__default.default._isIdentified():this.has_identified;i&&!e?(this.log("identifyEvent | identifying user",{user_id:i,traits:t}),r__default.default.identify(i,{...t,client_id:i}),this.has_identified=!0):this.log("identifyEvent | skipped \u2014 user already identified",{user_id:i});}catch(e){console.error("Posthog: Failed to identify user",e);}};this.reset=()=>{if(this.has_initialized)try{this.log("reset | resetting PostHog session"),r__default.default.reset(),this.has_identified=!1;}catch(i){console.error("Posthog: Failed to reset",i);}};this.backfillPersonProperties=({user_id:i,email:t,country_of_residence:e})=>{if(!(!this.has_initialized||!i))try{let o=r__default.default.get_property("$stored_person_properties")??{},s={};o.client_id||(s.client_id=i),t&&o.is_internal===void 0&&(s.is_internal=chunkJ3V5QNIH_js.h(t)),e&&!o.country_of_residence&&(s.country_of_residence=e),Object.keys(s).length>0?(this.log("backfillPersonProperties | backfilling person properties",{user_id:i,updates:s}),r__default.default.setPersonProperties(s)):this.log("backfillPersonProperties | skipped \u2014 all properties already present",{user_id:i,country_of_residence:e});}catch(o){console.error("Posthog: Failed to backfill person properties",o);}};this.capture=(i,t)=>{if(this.has_initialized)try{this.log("capture | sending event to PostHog",{event_name:i,properties:t}),r__default.default.capture(i,t);}catch(e){console.error("Posthog: Failed to capture event",e);}};this.options=i,this.debug=t,this.init();}};n.getPosthogInstance=(i,t=false)=>(n._instance||(n._instance=new n(i,t)),n._instance);var P=n;exports.Posthog=P;//# sourceMappingURL=index.js.map
1
+ 'use strict';var chunkAKXW5KX7_js=require('../../chunk-AKXW5KX7.js'),r=require('posthog-js');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var r__default=/*#__PURE__*/_interopDefault(r);/* @deriv-com/analytics - NPM Package - Built with tsup */
2
+ var n=class n{constructor(i,t=false){this.has_initialized=false;this.has_identified=false;this.debug=false;this.log=chunkAKXW5KX7_js.g("[PostHog]",()=>this.debug);this.init=()=>{try{let{apiKey:i,api_host:t,config:e={}}=this.options;if(!i){console.warn("Posthog: No API key provided");return}let o=t||chunkAKXW5KX7_js.d();this.log("init | loading PostHog SDK",{api_host:o});let s={api_host:o,ui_host:chunkAKXW5KX7_js.c,autocapture:!0,capture_pageview:"history_change",session_recording:{recordCrossOriginIframes:!0,minimumDurationMilliseconds:3e4,...e.session_recording},before_send:l=>{if(typeof window>"u")return null;let a=window.location.hostname;if(a==="localhost"||a==="127.0.0.1")return l;let d=chunkAKXW5KX7_js.e.some(c=>a.endsWith(`.${c}`)||a===c);return d||this.log("init | before_send blocked event from disallowed host",{currentHost:a}),d?l:null},...e};r__default.default.init(i,s),this.has_initialized=!0,this.log("init | PostHog SDK loaded successfully");}catch(i){console.error("Posthog: Failed to initialize",i);}};this.identifyEvent=(i,t)=>{if(!this.has_initialized){console.warn("Posthog: Cannot identify - not initialized");return}try{let e=typeof r__default.default._isIdentified=="function"?r__default.default._isIdentified():this.has_identified;i&&!e?(this.log("identifyEvent | identifying user",{user_id:i,traits:t}),r__default.default.identify(i,{...t,client_id:i}),this.has_identified=!0):this.log("identifyEvent | skipped \u2014 user already identified",{user_id:i});}catch(e){console.error("Posthog: Failed to identify user",e);}};this.reset=()=>{if(this.has_initialized)try{this.log("reset | resetting PostHog session"),r__default.default.reset(),this.has_identified=!1;}catch(i){console.error("Posthog: Failed to reset",i);}};this.backfillPersonProperties=({user_id:i,email:t,country_of_residence:e})=>{if(!(!this.has_initialized||!i))try{let o=r__default.default.get_property("$stored_person_properties")??{},s={};o.client_id||(s.client_id=i),t&&o.is_internal===void 0&&(s.is_internal=chunkAKXW5KX7_js.h(t)),e&&!o.country_of_residence&&(s.country_of_residence=e),Object.keys(s).length>0?(this.log("backfillPersonProperties | backfilling person properties",{user_id:i,updates:s}),r__default.default.setPersonProperties(s)):this.log("backfillPersonProperties | skipped \u2014 all properties already present",{user_id:i,country_of_residence:e});}catch(o){console.error("Posthog: Failed to backfill person properties",o);}};this.capture=(i,t)=>{if(this.has_initialized)try{this.log("capture | sending event to PostHog",{event_name:i,properties:t}),r__default.default.capture(i,t);}catch(e){console.error("Posthog: Failed to capture event",e);}};this.options=i,this.debug=t,this.init();}};n.getPosthogInstance=(i,t=false)=>(n._instance||(n._instance=new n(i,t)),n._instance);var P=n;exports.Posthog=P;//# sourceMappingURL=index.js.map
3
3
  //# sourceMappingURL=index.js.map
@@ -1,3 +1,3 @@
1
- import {g,d,e,c,h}from'../../chunk-GGU2UVKH.mjs';import r from'posthog-js';/* @deriv-com/analytics - NPM Package - Built with tsup */
1
+ import {g,d,e,c,h}from'../../chunk-XC5XM6FP.mjs';import r from'posthog-js';/* @deriv-com/analytics - NPM Package - Built with tsup */
2
2
  var n=class n{constructor(i,t=false){this.has_initialized=false;this.has_identified=false;this.debug=false;this.log=g("[PostHog]",()=>this.debug);this.init=()=>{try{let{apiKey:i,api_host:t,config:e$1={}}=this.options;if(!i){console.warn("Posthog: No API key provided");return}let o=t||d();this.log("init | loading PostHog SDK",{api_host:o});let s={api_host:o,ui_host:c,autocapture:!0,capture_pageview:"history_change",session_recording:{recordCrossOriginIframes:!0,minimumDurationMilliseconds:3e4,...e$1.session_recording},before_send:l=>{if(typeof window>"u")return null;let a=window.location.hostname;if(a==="localhost"||a==="127.0.0.1")return l;let d=e.some(c=>a.endsWith(`.${c}`)||a===c);return d||this.log("init | before_send blocked event from disallowed host",{currentHost:a}),d?l:null},...e$1};r.init(i,s),this.has_initialized=!0,this.log("init | PostHog SDK loaded successfully");}catch(i){console.error("Posthog: Failed to initialize",i);}};this.identifyEvent=(i,t)=>{if(!this.has_initialized){console.warn("Posthog: Cannot identify - not initialized");return}try{let e=typeof r._isIdentified=="function"?r._isIdentified():this.has_identified;i&&!e?(this.log("identifyEvent | identifying user",{user_id:i,traits:t}),r.identify(i,{...t,client_id:i}),this.has_identified=!0):this.log("identifyEvent | skipped \u2014 user already identified",{user_id:i});}catch(e){console.error("Posthog: Failed to identify user",e);}};this.reset=()=>{if(this.has_initialized)try{this.log("reset | resetting PostHog session"),r.reset(),this.has_identified=!1;}catch(i){console.error("Posthog: Failed to reset",i);}};this.backfillPersonProperties=({user_id:i,email:t,country_of_residence:e})=>{if(!(!this.has_initialized||!i))try{let o=r.get_property("$stored_person_properties")??{},s={};o.client_id||(s.client_id=i),t&&o.is_internal===void 0&&(s.is_internal=h(t)),e&&!o.country_of_residence&&(s.country_of_residence=e),Object.keys(s).length>0?(this.log("backfillPersonProperties | backfilling person properties",{user_id:i,updates:s}),r.setPersonProperties(s)):this.log("backfillPersonProperties | skipped \u2014 all properties already present",{user_id:i,country_of_residence:e});}catch(o){console.error("Posthog: Failed to backfill person properties",o);}};this.capture=(i,t)=>{if(this.has_initialized)try{this.log("capture | sending event to PostHog",{event_name:i,properties:t}),r.capture(i,t);}catch(e){console.error("Posthog: Failed to capture event",e);}};this.options=i,this.debug=t,this.init();}};n.getPosthogInstance=(i,t=false)=>(n._instance||(n._instance=new n(i,t)),n._instance);var P=n;export{P as Posthog};//# sourceMappingURL=index.mjs.map
3
3
  //# sourceMappingURL=index.mjs.map
@@ -1,2 +1,2 @@
1
- 'use strict';var chunkY3QT7NAG_js=require('../../chunk-Y3QT7NAG.js');require('../../chunk-J3V5QNIH.js');Object.defineProperty(exports,"RudderStack",{enumerable:true,get:function(){return chunkY3QT7NAG_js.a}});//# sourceMappingURL=index.js.map
1
+ 'use strict';var chunkLFQLME3L_js=require('../../chunk-LFQLME3L.js');require('../../chunk-AKXW5KX7.js');Object.defineProperty(exports,"RudderStack",{enumerable:true,get:function(){return chunkLFQLME3L_js.a}});//# sourceMappingURL=index.js.map
2
2
  //# sourceMappingURL=index.js.map
@@ -1,2 +1,2 @@
1
- export{a as RudderStack}from'../../chunk-44P2MMGV.mjs';import'../../chunk-GGU2UVKH.mjs';//# sourceMappingURL=index.mjs.map
1
+ export{a as RudderStack}from'../../chunk-AGTZ7DYP.mjs';import'../../chunk-XC5XM6FP.mjs';//# sourceMappingURL=index.mjs.map
2
2
  //# sourceMappingURL=index.mjs.map
@@ -1,2 +1,2 @@
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
1
+ 'use strict';var chunkEZWNCHVR_js=require('../../chunk-EZWNCHVR.js');require('../../chunk-AKXW5KX7.js');Object.defineProperty(exports,"cacheTrackEvents",{enumerable:true,get:function(){return chunkEZWNCHVR_js.a}});//# sourceMappingURL=index.js.map
2
2
  //# sourceMappingURL=index.js.map
@@ -1,2 +1,2 @@
1
- export{a as cacheTrackEvents}from'../../chunk-DWOZQCV4.mjs';import'../../chunk-GGU2UVKH.mjs';//# sourceMappingURL=index.mjs.map
1
+ export{a as cacheTrackEvents}from'../../chunk-ASVWETRZ.mjs';import'../../chunk-XC5XM6FP.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.3",
3
+ "version": "1.39.4",
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",
@@ -83,7 +83,7 @@
83
83
  "dependencies": {
84
84
  "@rudderstack/analytics-js": "^3.14.0",
85
85
  "js-cookie": "^3.0.5",
86
- "posthog-js": "^1.356.1"
86
+ "posthog-js": "1.358.0"
87
87
  },
88
88
  "optionalDependencies": {
89
89
  "@growthbook/growthbook": "^1.4.1"
@@ -1,4 +0,0 @@
1
- import m from'js-cookie';/* @deriv-com/analytics - NPM Package - Built with tsup */
2
- var c="https://deriv.com/cdn-cgi/trace",f="https://cdn.growthbook.io",y="https://deriv-dataplane.rudderstack.com",a="https://ph.deriv.com",g="https://us.posthog.com",h=()=>{if(typeof window>"u")return a;let t=window.location.hostname;return t.includes(".deriv.me")?"https://ph.deriv.me":t.includes(".deriv.be")?"https://ph.deriv.be":a},p=["deriv.com","deriv.be","deriv.me","deriv.team","deriv.ae"],l=["deriv.com","derivcrypto.com","besquare.my","besquare.com.my","ewallet.exchange","champion-fx.com","opalstraits.com","binary.com","binary.marketing","championgbs.com","4x.my","re-work.dev","regentmarkets.com","4x.com","binary.me","deriv.team","firstsource.io","firstsource.tech","deriv.hr","vmgbpo.net","mailisk.net","mailosaur.net","mobileapps.mailisk.net","w3e180zd.mailosaur.net"],v=()=>{if(typeof window>"u")return ".deriv.com";let t=window.location.hostname;if(t==="localhost")return "";let e=p.find(o=>t.includes(o));return e?`.${e}`:".deriv.com"};var k=(t,e)=>(...o)=>{e()&&console.log(`[ANALYTIC]${t}`,...o);},b=t=>{let e=t.split("@")[1]?.toLowerCase();return e?l.includes(e):false},O=t=>/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(t),i=null,D=async()=>{if(i)return i;let t=JSON.parse(m.get("website_status")||"{}")?.clients_country;return i=(async()=>{try{let e=await fetch(c).catch(()=>null);if(!e)return t||"";let o=await e.text().catch(()=>"");return o?Object.fromEntries(o.split(`
3
- `).map(r=>r.split("=",2))).loc?.toLowerCase()||t||"":t||""}catch{return t||""}})(),i},d=t=>{if(t==null||typeof t!="object")return t;if(Array.isArray(t)){let n=[];for(let r=0;r<t.length;r++){let s=d(t[r]);s!=null&&n.push(s);}return n.length?n:void 0}let e={},o=false;for(let n in t){if(!Object.prototype.hasOwnProperty.call(t,n))continue;let r=d(t[n]);r==null||r===""||typeof r=="object"&&!Array.isArray(r)&&Object.keys(r).length===0||Array.isArray(r)&&r.length===0||(e[n]=r,o=true);}return o?e:void 0},u=(t,e)=>{for(let o in t){if(!Object.prototype.hasOwnProperty.call(t,o))continue;let n=t[o];n&&typeof n=="object"&&!Array.isArray(n)?u(n,e):e[o]=n;}},R=t=>{if(t==null||typeof t!="object"||Array.isArray(t))return t;let e={};return u(t,e),e};export{f as a,y as b,g as c,h as d,p as e,v as f,k as g,b as h,O as i,D as j,d as k,R as l};//# sourceMappingURL=chunk-GGU2UVKH.mjs.map
4
- //# sourceMappingURL=chunk-GGU2UVKH.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/utils/urls.ts","../src/utils/helpers.ts"],"names":["cloudflareTrace","growthbookApi","rudderstackDataplane","posthogApiHost","posthogUiHost","getPosthogApiHost","hostname","allowedDomains","internalEmailDomains","getAllowedDomain","matched","d","createLogger","prefix","isDebugEnabled","args","isInternalEmail","email","domain","isUUID","str","countryPromise","getCountry","cookieCountry","Cookies","response","text","v","cleanObject","obj","out","i","cleaned","hasKeys","key","_flattenInto","target","value","flattenObject"],"mappings":"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","file":"chunk-GGU2UVKH.mjs","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 getPosthogApiHost = (): string => {\n if (typeof window === 'undefined') return posthogApiHost\n const hostname = window.location.hostname\n if (hostname.includes('.deriv.me')) return 'https://ph.deriv.me'\n if (hostname.includes('.deriv.be')) return 'https://ph.deriv.be'\n return posthogApiHost\n}\n\nexport const allowedDomains = ['deriv.com', 'deriv.be', 'deriv.me', 'deriv.team', 'deriv.ae'] as const\n\nexport const internalEmailDomains = [\n 'deriv.com',\n 'derivcrypto.com',\n 'besquare.my',\n 'besquare.com.my',\n 'ewallet.exchange',\n 'champion-fx.com',\n 'opalstraits.com',\n 'binary.com',\n 'binary.marketing',\n 'championgbs.com',\n '4x.my',\n 're-work.dev',\n 'regentmarkets.com',\n '4x.com',\n 'binary.me',\n 'deriv.team',\n 'firstsource.io',\n 'firstsource.tech',\n 'deriv.hr',\n 'vmgbpo.net',\n 'mailisk.net',\n 'mailosaur.net',\n 'mobileapps.mailisk.net',\n 'w3e180zd.mailosaur.net',\n] 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","import Cookies from 'js-cookie'\nimport { cloudflareTrace, internalEmailDomains } from './urls'\n\n/**\n * Creates a prefixed logger that only outputs when debug mode is enabled.\n * Pass a getter function so the logger always reads the latest debug state.\n *\n * @param prefix - Optional provider name appended after [ANALYTIC], e.g. '[RudderStack]'\n * @param isDebugEnabled - A function that returns the current debug flag value\n * @returns A log function with the same signature as console.log\n *\n * @example\n * // In a class\n * private log = createLogger('[RudderStack]', () => this.debug)\n *\n * // In a closure\n * const log = createLogger('', () => _debug)\n */\nexport const createLogger =\n (prefix: string, isDebugEnabled: () => boolean) =>\n (...args: any[]): void => {\n if (isDebugEnabled()) console.log(`[ANALYTIC]${prefix}`, ...args)\n }\n\nexport const isInternalEmail = (email: string): boolean => {\n const domain = email.split('@')[1]?.toLowerCase()\n if (!domain) return false\n return (internalEmailDomains as readonly string[]).includes(domain)\n}\n\nexport const isUUID = (str: string): boolean => {\n const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i\n return uuidRegex.test(str)\n}\n\ntype TraceData = {\n loc?: string\n}\n\nlet countryPromise: Promise<string> | null = null\n\n/**\n * Fetches the country information based on Cloudflare's trace data or a fallback from cookies.\n * This function attempts to retrieve the country location by first fetching trace data from Cloudflare\n * and then falling back to the location stored in the cookies if the fetch fails.\n *\n * @returns {Promise<string>} A Promise that resolves to a string representing the country code in lowercase.\n * Returns an empty string if no country data is available or if an error occurs.\n *\n * @example\n * // Returns the country code in lowercase based on Cloudflare's trace data or cookies.\n * getCountry().then(country => console.log(country));\n */\nexport const getCountry = async (): Promise<string> => {\n if (countryPromise) return countryPromise\n\n const cookieCountry = JSON.parse(Cookies.get('website_status') || '{}')?.clients_country\n\n countryPromise = (async () => {\n try {\n const response = await fetch(cloudflareTrace).catch(() => null)\n if (!response) return cookieCountry || ''\n\n const text = await response.text().catch(() => '')\n if (!text) return cookieCountry || ''\n\n const data: TraceData = Object.fromEntries(text.split('\\n').map(v => v.split('=', 2)))\n return data.loc?.toLowerCase() || cookieCountry || ''\n } catch {\n return cookieCountry || ''\n }\n })()\n\n return countryPromise\n}\n\n/**\n * Recursively cleans an object by removing undefined, null, empty strings, empty objects, and empty arrays\n * Used to sanitize event properties before sending to analytics providers\n *\n * @param obj - The object to clean\n * @returns The cleaned object, or undefined if the result would be empty\n */\nexport const cleanObject = (obj: any): any => {\n if (obj == null || typeof obj !== 'object') return obj\n\n if (Array.isArray(obj)) {\n const out: any[] = []\n for (let i = 0; i < obj.length; i++) {\n const v = cleanObject(obj[i])\n if (v !== undefined && v !== null) out.push(v)\n }\n return out.length ? out : undefined\n }\n\n const cleaned: Record<string, any> = {}\n let hasKeys = false\n for (const key in obj) {\n if (!Object.prototype.hasOwnProperty.call(obj, key)) continue\n const v = cleanObject(obj[key])\n if (\n v === undefined ||\n v === null ||\n v === '' ||\n (typeof v === 'object' && !Array.isArray(v) && Object.keys(v).length === 0) ||\n (Array.isArray(v) && v.length === 0)\n )\n continue\n cleaned[key] = v\n hasKeys = true\n }\n return hasKeys ? cleaned : undefined\n}\n\n/**\n * Flattens a nested object structure into a single-level object\n * Lifts all nested properties to the top level without prefixing\n *\n * @param obj - The object to flatten\n * @returns A flattened object with all nested properties at the top level\n *\n * @example\n * flattenObject({ action: 'click', event_metadata: { version: 2, user_language: 'en' } })\n * // Returns: { action: 'click', version: 2, user_language: 'en' }\n *\n * flattenObject({ form_name: 'signup', cta_information: { cta_name: 'signup', section_name: 'header' } })\n * // Returns: { form_name: 'signup', cta_name: 'signup', section_name: 'header' }\n */\nconst _flattenInto = (obj: Record<string, any>, target: Record<string, any>): void => {\n for (const key in obj) {\n if (!Object.prototype.hasOwnProperty.call(obj, key)) continue\n const value = obj[key]\n if (value && typeof value === 'object' && !Array.isArray(value)) {\n _flattenInto(value, target)\n } else {\n target[key] = value\n }\n }\n}\n\nexport const flattenObject = (obj: any): Record<string, any> => {\n if (obj == null || typeof obj !== 'object' || Array.isArray(obj)) {\n return obj\n }\n const target: Record<string, any> = {}\n _flattenInto(obj, target)\n return target\n}\n"]}
@@ -1,4 +0,0 @@
1
- 'use strict';var f=require('js-cookie');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var f__default=/*#__PURE__*/_interopDefault(f);/* @deriv-com/analytics - NPM Package - Built with tsup */
2
- var c="https://deriv.com/cdn-cgi/trace",y="https://cdn.growthbook.io",g="https://deriv-dataplane.rudderstack.com",a="https://ph.deriv.com",h="https://us.posthog.com",v=()=>{if(typeof window>"u")return a;let t=window.location.hostname;return t.includes(".deriv.me")?"https://ph.deriv.me":t.includes(".deriv.be")?"https://ph.deriv.be":a},m=["deriv.com","deriv.be","deriv.me","deriv.team","deriv.ae"],l=["deriv.com","derivcrypto.com","besquare.my","besquare.com.my","ewallet.exchange","champion-fx.com","opalstraits.com","binary.com","binary.marketing","championgbs.com","4x.my","re-work.dev","regentmarkets.com","4x.com","binary.me","deriv.team","firstsource.io","firstsource.tech","deriv.hr","vmgbpo.net","mailisk.net","mailosaur.net","mobileapps.mailisk.net","w3e180zd.mailosaur.net"],x=()=>{if(typeof window>"u")return ".deriv.com";let t=window.location.hostname;if(t==="localhost")return "";let e=m.find(o=>t.includes(o));return e?`.${e}`:".deriv.com"};var O=(t,e)=>(...o)=>{e()&&console.log(`[ANALYTIC]${t}`,...o);},D=t=>{let e=t.split("@")[1]?.toLowerCase();return e?l.includes(e):false},R=t=>/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(t),i=null,C=async()=>{if(i)return i;let t=JSON.parse(f__default.default.get("website_status")||"{}")?.clients_country;return i=(async()=>{try{let e=await fetch(c).catch(()=>null);if(!e)return t||"";let o=await e.text().catch(()=>"");return o?Object.fromEntries(o.split(`
3
- `).map(r=>r.split("=",2))).loc?.toLowerCase()||t||"":t||""}catch{return t||""}})(),i},d=t=>{if(t==null||typeof t!="object")return t;if(Array.isArray(t)){let n=[];for(let r=0;r<t.length;r++){let s=d(t[r]);s!=null&&n.push(s);}return n.length?n:void 0}let e={},o=false;for(let n in t){if(!Object.prototype.hasOwnProperty.call(t,n))continue;let r=d(t[n]);r==null||r===""||typeof r=="object"&&!Array.isArray(r)&&Object.keys(r).length===0||Array.isArray(r)&&r.length===0||(e[n]=r,o=true);}return o?e:void 0},u=(t,e)=>{for(let o in t){if(!Object.prototype.hasOwnProperty.call(t,o))continue;let n=t[o];n&&typeof n=="object"&&!Array.isArray(n)?u(n,e):e[o]=n;}},P=t=>{if(t==null||typeof t!="object"||Array.isArray(t))return t;let e={};return u(t,e),e};exports.a=y;exports.b=g;exports.c=h;exports.d=v;exports.e=m;exports.f=x;exports.g=O;exports.h=D;exports.i=R;exports.j=C;exports.k=d;exports.l=P;//# sourceMappingURL=chunk-J3V5QNIH.js.map
4
- //# sourceMappingURL=chunk-J3V5QNIH.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/utils/urls.ts","../src/utils/helpers.ts"],"names":["cloudflareTrace","growthbookApi","rudderstackDataplane","posthogApiHost","posthogUiHost","getPosthogApiHost","hostname","allowedDomains","internalEmailDomains","getAllowedDomain","matched","d","createLogger","prefix","isDebugEnabled","args","isInternalEmail","email","domain","isUUID","str","countryPromise","getCountry","cookieCountry","Cookies","response","text","v","cleanObject","obj","out","i","cleaned","hasKeys","key","_flattenInto","target","value","flattenObject"],"mappings":"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","file":"chunk-J3V5QNIH.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 getPosthogApiHost = (): string => {\n if (typeof window === 'undefined') return posthogApiHost\n const hostname = window.location.hostname\n if (hostname.includes('.deriv.me')) return 'https://ph.deriv.me'\n if (hostname.includes('.deriv.be')) return 'https://ph.deriv.be'\n return posthogApiHost\n}\n\nexport const allowedDomains = ['deriv.com', 'deriv.be', 'deriv.me', 'deriv.team', 'deriv.ae'] as const\n\nexport const internalEmailDomains = [\n 'deriv.com',\n 'derivcrypto.com',\n 'besquare.my',\n 'besquare.com.my',\n 'ewallet.exchange',\n 'champion-fx.com',\n 'opalstraits.com',\n 'binary.com',\n 'binary.marketing',\n 'championgbs.com',\n '4x.my',\n 're-work.dev',\n 'regentmarkets.com',\n '4x.com',\n 'binary.me',\n 'deriv.team',\n 'firstsource.io',\n 'firstsource.tech',\n 'deriv.hr',\n 'vmgbpo.net',\n 'mailisk.net',\n 'mailosaur.net',\n 'mobileapps.mailisk.net',\n 'w3e180zd.mailosaur.net',\n] 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","import Cookies from 'js-cookie'\nimport { cloudflareTrace, internalEmailDomains } from './urls'\n\n/**\n * Creates a prefixed logger that only outputs when debug mode is enabled.\n * Pass a getter function so the logger always reads the latest debug state.\n *\n * @param prefix - Optional provider name appended after [ANALYTIC], e.g. '[RudderStack]'\n * @param isDebugEnabled - A function that returns the current debug flag value\n * @returns A log function with the same signature as console.log\n *\n * @example\n * // In a class\n * private log = createLogger('[RudderStack]', () => this.debug)\n *\n * // In a closure\n * const log = createLogger('', () => _debug)\n */\nexport const createLogger =\n (prefix: string, isDebugEnabled: () => boolean) =>\n (...args: any[]): void => {\n if (isDebugEnabled()) console.log(`[ANALYTIC]${prefix}`, ...args)\n }\n\nexport const isInternalEmail = (email: string): boolean => {\n const domain = email.split('@')[1]?.toLowerCase()\n if (!domain) return false\n return (internalEmailDomains as readonly string[]).includes(domain)\n}\n\nexport const isUUID = (str: string): boolean => {\n const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i\n return uuidRegex.test(str)\n}\n\ntype TraceData = {\n loc?: string\n}\n\nlet countryPromise: Promise<string> | null = null\n\n/**\n * Fetches the country information based on Cloudflare's trace data or a fallback from cookies.\n * This function attempts to retrieve the country location by first fetching trace data from Cloudflare\n * and then falling back to the location stored in the cookies if the fetch fails.\n *\n * @returns {Promise<string>} A Promise that resolves to a string representing the country code in lowercase.\n * Returns an empty string if no country data is available or if an error occurs.\n *\n * @example\n * // Returns the country code in lowercase based on Cloudflare's trace data or cookies.\n * getCountry().then(country => console.log(country));\n */\nexport const getCountry = async (): Promise<string> => {\n if (countryPromise) return countryPromise\n\n const cookieCountry = JSON.parse(Cookies.get('website_status') || '{}')?.clients_country\n\n countryPromise = (async () => {\n try {\n const response = await fetch(cloudflareTrace).catch(() => null)\n if (!response) return cookieCountry || ''\n\n const text = await response.text().catch(() => '')\n if (!text) return cookieCountry || ''\n\n const data: TraceData = Object.fromEntries(text.split('\\n').map(v => v.split('=', 2)))\n return data.loc?.toLowerCase() || cookieCountry || ''\n } catch {\n return cookieCountry || ''\n }\n })()\n\n return countryPromise\n}\n\n/**\n * Recursively cleans an object by removing undefined, null, empty strings, empty objects, and empty arrays\n * Used to sanitize event properties before sending to analytics providers\n *\n * @param obj - The object to clean\n * @returns The cleaned object, or undefined if the result would be empty\n */\nexport const cleanObject = (obj: any): any => {\n if (obj == null || typeof obj !== 'object') return obj\n\n if (Array.isArray(obj)) {\n const out: any[] = []\n for (let i = 0; i < obj.length; i++) {\n const v = cleanObject(obj[i])\n if (v !== undefined && v !== null) out.push(v)\n }\n return out.length ? out : undefined\n }\n\n const cleaned: Record<string, any> = {}\n let hasKeys = false\n for (const key in obj) {\n if (!Object.prototype.hasOwnProperty.call(obj, key)) continue\n const v = cleanObject(obj[key])\n if (\n v === undefined ||\n v === null ||\n v === '' ||\n (typeof v === 'object' && !Array.isArray(v) && Object.keys(v).length === 0) ||\n (Array.isArray(v) && v.length === 0)\n )\n continue\n cleaned[key] = v\n hasKeys = true\n }\n return hasKeys ? cleaned : undefined\n}\n\n/**\n * Flattens a nested object structure into a single-level object\n * Lifts all nested properties to the top level without prefixing\n *\n * @param obj - The object to flatten\n * @returns A flattened object with all nested properties at the top level\n *\n * @example\n * flattenObject({ action: 'click', event_metadata: { version: 2, user_language: 'en' } })\n * // Returns: { action: 'click', version: 2, user_language: 'en' }\n *\n * flattenObject({ form_name: 'signup', cta_information: { cta_name: 'signup', section_name: 'header' } })\n * // Returns: { form_name: 'signup', cta_name: 'signup', section_name: 'header' }\n */\nconst _flattenInto = (obj: Record<string, any>, target: Record<string, any>): void => {\n for (const key in obj) {\n if (!Object.prototype.hasOwnProperty.call(obj, key)) continue\n const value = obj[key]\n if (value && typeof value === 'object' && !Array.isArray(value)) {\n _flattenInto(value, target)\n } else {\n target[key] = value\n }\n }\n}\n\nexport const flattenObject = (obj: any): Record<string, any> => {\n if (obj == null || typeof obj !== 'object' || Array.isArray(obj)) {\n return obj\n }\n const target: Record<string, any> = {}\n _flattenInto(obj, target)\n return target\n}\n"]}
@@ -1,9 +0,0 @@
1
- /* @deriv-com/analytics - Browser ESM Bundle (RudderStack + PostHog) - Built with tsup */
2
- var w=Object.defineProperty;var A=(e,t,r)=>t in e?w(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r;var D=(e,t,r)=>A(e,typeof t!="symbol"?t+"":t,r);var m="https://deriv.com/cdn-cgi/trace",I="https://cdn.growthbook.io",U="https://deriv-dataplane.rudderstack.com",f="https://ph.deriv.com",b="https://us.posthog.com",E=()=>{if(typeof window>"u")return f;let e=window.location.hostname;return e.includes(".deriv.me")?"https://ph.deriv.me":e.includes(".deriv.be")?"https://ph.deriv.be":f},k=["deriv.com","deriv.be","deriv.me","deriv.team","deriv.ae"],y=["deriv.com","derivcrypto.com","besquare.my","besquare.com.my","ewallet.exchange","champion-fx.com","opalstraits.com","binary.com","binary.marketing","championgbs.com","4x.my","re-work.dev","regentmarkets.com","4x.com","binary.me","deriv.team","firstsource.io","firstsource.tech","deriv.hr","vmgbpo.net","mailisk.net","mailosaur.net","mobileapps.mailisk.net","w3e180zd.mailosaur.net"],P=()=>{if(typeof window>"u")return".deriv.com";let e=window.location.hostname;if(e==="localhost")return"";let t=k.find(r=>e.includes(r));return t?`.${t}`:".deriv.com"};function d(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var o in r)e[o]=r[o]}return e}var C={read:function(e){return e[0]==='"'&&(e=e.slice(1,-1)),e.replace(/(%[\dA-F]{2})+/gi,decodeURIComponent)},write:function(e){return encodeURIComponent(e).replace(/%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g,decodeURIComponent)}};function u(e,t){function r(n,c,i){if(!(typeof document>"u")){i=d({},t,i),typeof i.expires=="number"&&(i.expires=new Date(Date.now()+i.expires*864e5)),i.expires&&(i.expires=i.expires.toUTCString()),n=encodeURIComponent(n).replace(/%(2[346B]|5E|60|7C)/g,decodeURIComponent).replace(/[()]/g,escape);var s="";for(var a in i)i[a]&&(s+="; "+a,i[a]!==!0&&(s+="="+i[a].split(";")[0]));return document.cookie=n+"="+e.write(c,n)+s}}function o(n){if(!(typeof document>"u"||arguments.length&&!n)){for(var c=document.cookie?document.cookie.split("; "):[],i={},s=0;s<c.length;s++){var a=c[s].split("="),x=a.slice(1).join("=");try{var p=decodeURIComponent(a[0]);if(i[p]=e.read(x,p),n===p)break}catch{}}return n?i[n]:i}}return Object.create({set:r,get:o,remove:function(n,c){r(n,"",d({},c,{expires:-1}))},withAttributes:function(n){return u(this.converter,d({},this.attributes,n))},withConverter:function(n){return u(d({},this.converter,n),this.attributes)}},{attributes:{value:Object.freeze(t)},converter:{value:Object.freeze(e)}})}var g=u(C,{path:"/"});var F=(e,t)=>(...r)=>{t()&&console.log(`[ANALYTIC]${e}`,...r)},H=e=>{let t=e.split("@")[1]?.toLowerCase();return t?y.includes(t):!1},_=e=>/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(e),l=null,$=async()=>{if(l)return l;let e=JSON.parse(g.get("website_status")||"{}")?.clients_country;return l=(async()=>{try{let t=await fetch(m).catch(()=>null);if(!t)return e||"";let r=await t.text().catch(()=>"");return r?Object.fromEntries(r.split(`
3
- `).map(n=>n.split("=",2))).loc?.toLowerCase()||e||"":e||""}catch{return e||""}})(),l},h=e=>{if(e==null||typeof e!="object")return e;if(Array.isArray(e)){let o=[];for(let n=0;n<e.length;n++){let c=h(e[n]);c!=null&&o.push(c)}return o.length?o:void 0}let t={},r=!1;for(let o in e){if(!Object.prototype.hasOwnProperty.call(e,o))continue;let n=h(e[o]);n==null||n===""||typeof n=="object"&&!Array.isArray(n)&&Object.keys(n).length===0||Array.isArray(n)&&n.length===0||(t[o]=n,r=!0)}return r?t:void 0},v=(e,t)=>{for(let r in e){if(!Object.prototype.hasOwnProperty.call(e,r))continue;let o=e[r];o&&typeof o=="object"&&!Array.isArray(o)?v(o,t):t[r]=o}},q=e=>{if(e==null||typeof e!="object"||Array.isArray(e))return e;let t={};return v(e,t),t};export{D as a,I as b,U as c,b as d,E as e,k as f,P as g,g as h,F as i,H as j,_ as k,$ as l,h as m,q as n};
4
- /*! Bundled license information:
5
-
6
- js-cookie/dist/js.cookie.mjs:
7
- (*! js-cookie v3.0.5 | MIT *)
8
- */
9
- //# sourceMappingURL=chunk-UG2YL4OB.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/utils/urls.ts","../node_modules/js-cookie/dist/js.cookie.mjs","../src/utils/helpers.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 getPosthogApiHost = (): string => {\n if (typeof window === 'undefined') return posthogApiHost\n const hostname = window.location.hostname\n if (hostname.includes('.deriv.me')) return 'https://ph.deriv.me'\n if (hostname.includes('.deriv.be')) return 'https://ph.deriv.be'\n return posthogApiHost\n}\n\nexport const allowedDomains = ['deriv.com', 'deriv.be', 'deriv.me', 'deriv.team', 'deriv.ae'] as const\n\nexport const internalEmailDomains = [\n 'deriv.com',\n 'derivcrypto.com',\n 'besquare.my',\n 'besquare.com.my',\n 'ewallet.exchange',\n 'champion-fx.com',\n 'opalstraits.com',\n 'binary.com',\n 'binary.marketing',\n 'championgbs.com',\n '4x.my',\n 're-work.dev',\n 'regentmarkets.com',\n '4x.com',\n 'binary.me',\n 'deriv.team',\n 'firstsource.io',\n 'firstsource.tech',\n 'deriv.hr',\n 'vmgbpo.net',\n 'mailisk.net',\n 'mailosaur.net',\n 'mobileapps.mailisk.net',\n 'w3e180zd.mailosaur.net',\n] 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","/*! js-cookie v3.0.5 | MIT */\n/* eslint-disable no-var */\nfunction assign (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n target[key] = source[key];\n }\n }\n return target\n}\n/* eslint-enable no-var */\n\n/* eslint-disable no-var */\nvar defaultConverter = {\n read: function (value) {\n if (value[0] === '\"') {\n value = value.slice(1, -1);\n }\n return value.replace(/(%[\\dA-F]{2})+/gi, decodeURIComponent)\n },\n write: function (value) {\n return encodeURIComponent(value).replace(\n /%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g,\n decodeURIComponent\n )\n }\n};\n/* eslint-enable no-var */\n\n/* eslint-disable no-var */\n\nfunction init (converter, defaultAttributes) {\n function set (name, value, attributes) {\n if (typeof document === 'undefined') {\n return\n }\n\n attributes = assign({}, defaultAttributes, attributes);\n\n if (typeof attributes.expires === 'number') {\n attributes.expires = new Date(Date.now() + attributes.expires * 864e5);\n }\n if (attributes.expires) {\n attributes.expires = attributes.expires.toUTCString();\n }\n\n name = encodeURIComponent(name)\n .replace(/%(2[346B]|5E|60|7C)/g, decodeURIComponent)\n .replace(/[()]/g, escape);\n\n var stringifiedAttributes = '';\n for (var attributeName in attributes) {\n if (!attributes[attributeName]) {\n continue\n }\n\n stringifiedAttributes += '; ' + attributeName;\n\n if (attributes[attributeName] === true) {\n continue\n }\n\n // Considers RFC 6265 section 5.2:\n // ...\n // 3. If the remaining unparsed-attributes contains a %x3B (\";\")\n // character:\n // Consume the characters of the unparsed-attributes up to,\n // not including, the first %x3B (\";\") character.\n // ...\n stringifiedAttributes += '=' + attributes[attributeName].split(';')[0];\n }\n\n return (document.cookie =\n name + '=' + converter.write(value, name) + stringifiedAttributes)\n }\n\n function get (name) {\n if (typeof document === 'undefined' || (arguments.length && !name)) {\n return\n }\n\n // To prevent the for loop in the first place assign an empty array\n // in case there are no cookies at all.\n var cookies = document.cookie ? document.cookie.split('; ') : [];\n var jar = {};\n for (var i = 0; i < cookies.length; i++) {\n var parts = cookies[i].split('=');\n var value = parts.slice(1).join('=');\n\n try {\n var found = decodeURIComponent(parts[0]);\n jar[found] = converter.read(value, found);\n\n if (name === found) {\n break\n }\n } catch (e) {}\n }\n\n return name ? jar[name] : jar\n }\n\n return Object.create(\n {\n set,\n get,\n remove: function (name, attributes) {\n set(\n name,\n '',\n assign({}, attributes, {\n expires: -1\n })\n );\n },\n withAttributes: function (attributes) {\n return init(this.converter, assign({}, this.attributes, attributes))\n },\n withConverter: function (converter) {\n return init(assign({}, this.converter, converter), this.attributes)\n }\n },\n {\n attributes: { value: Object.freeze(defaultAttributes) },\n converter: { value: Object.freeze(converter) }\n }\n )\n}\n\nvar api = init(defaultConverter, { path: '/' });\n/* eslint-enable no-var */\n\nexport { api as default };\n","import Cookies from 'js-cookie'\nimport { cloudflareTrace, internalEmailDomains } from './urls'\n\n/**\n * Creates a prefixed logger that only outputs when debug mode is enabled.\n * Pass a getter function so the logger always reads the latest debug state.\n *\n * @param prefix - Optional provider name appended after [ANALYTIC], e.g. '[RudderStack]'\n * @param isDebugEnabled - A function that returns the current debug flag value\n * @returns A log function with the same signature as console.log\n *\n * @example\n * // In a class\n * private log = createLogger('[RudderStack]', () => this.debug)\n *\n * // In a closure\n * const log = createLogger('', () => _debug)\n */\nexport const createLogger =\n (prefix: string, isDebugEnabled: () => boolean) =>\n (...args: any[]): void => {\n if (isDebugEnabled()) console.log(`[ANALYTIC]${prefix}`, ...args)\n }\n\nexport const isInternalEmail = (email: string): boolean => {\n const domain = email.split('@')[1]?.toLowerCase()\n if (!domain) return false\n return (internalEmailDomains as readonly string[]).includes(domain)\n}\n\nexport const isUUID = (str: string): boolean => {\n const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i\n return uuidRegex.test(str)\n}\n\ntype TraceData = {\n loc?: string\n}\n\nlet countryPromise: Promise<string> | null = null\n\n/**\n * Fetches the country information based on Cloudflare's trace data or a fallback from cookies.\n * This function attempts to retrieve the country location by first fetching trace data from Cloudflare\n * and then falling back to the location stored in the cookies if the fetch fails.\n *\n * @returns {Promise<string>} A Promise that resolves to a string representing the country code in lowercase.\n * Returns an empty string if no country data is available or if an error occurs.\n *\n * @example\n * // Returns the country code in lowercase based on Cloudflare's trace data or cookies.\n * getCountry().then(country => console.log(country));\n */\nexport const getCountry = async (): Promise<string> => {\n if (countryPromise) return countryPromise\n\n const cookieCountry = JSON.parse(Cookies.get('website_status') || '{}')?.clients_country\n\n countryPromise = (async () => {\n try {\n const response = await fetch(cloudflareTrace).catch(() => null)\n if (!response) return cookieCountry || ''\n\n const text = await response.text().catch(() => '')\n if (!text) return cookieCountry || ''\n\n const data: TraceData = Object.fromEntries(text.split('\\n').map(v => v.split('=', 2)))\n return data.loc?.toLowerCase() || cookieCountry || ''\n } catch {\n return cookieCountry || ''\n }\n })()\n\n return countryPromise\n}\n\n/**\n * Recursively cleans an object by removing undefined, null, empty strings, empty objects, and empty arrays\n * Used to sanitize event properties before sending to analytics providers\n *\n * @param obj - The object to clean\n * @returns The cleaned object, or undefined if the result would be empty\n */\nexport const cleanObject = (obj: any): any => {\n if (obj == null || typeof obj !== 'object') return obj\n\n if (Array.isArray(obj)) {\n const out: any[] = []\n for (let i = 0; i < obj.length; i++) {\n const v = cleanObject(obj[i])\n if (v !== undefined && v !== null) out.push(v)\n }\n return out.length ? out : undefined\n }\n\n const cleaned: Record<string, any> = {}\n let hasKeys = false\n for (const key in obj) {\n if (!Object.prototype.hasOwnProperty.call(obj, key)) continue\n const v = cleanObject(obj[key])\n if (\n v === undefined ||\n v === null ||\n v === '' ||\n (typeof v === 'object' && !Array.isArray(v) && Object.keys(v).length === 0) ||\n (Array.isArray(v) && v.length === 0)\n )\n continue\n cleaned[key] = v\n hasKeys = true\n }\n return hasKeys ? cleaned : undefined\n}\n\n/**\n * Flattens a nested object structure into a single-level object\n * Lifts all nested properties to the top level without prefixing\n *\n * @param obj - The object to flatten\n * @returns A flattened object with all nested properties at the top level\n *\n * @example\n * flattenObject({ action: 'click', event_metadata: { version: 2, user_language: 'en' } })\n * // Returns: { action: 'click', version: 2, user_language: 'en' }\n *\n * flattenObject({ form_name: 'signup', cta_information: { cta_name: 'signup', section_name: 'header' } })\n * // Returns: { form_name: 'signup', cta_name: 'signup', section_name: 'header' }\n */\nconst _flattenInto = (obj: Record<string, any>, target: Record<string, any>): void => {\n for (const key in obj) {\n if (!Object.prototype.hasOwnProperty.call(obj, key)) continue\n const value = obj[key]\n if (value && typeof value === 'object' && !Array.isArray(value)) {\n _flattenInto(value, target)\n } else {\n target[key] = value\n }\n }\n}\n\nexport const flattenObject = (obj: any): Record<string, any> => {\n if (obj == null || typeof obj !== 'object' || Array.isArray(obj)) {\n return obj\n }\n const target: Record<string, any> = {}\n _flattenInto(obj, target)\n return target\n}\n"],"mappings":"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","names":["cloudflareTrace","growthbookApi","rudderstackDataplane","posthogApiHost","posthogUiHost","getPosthogApiHost","hostname","allowedDomains","internalEmailDomains","getAllowedDomain","matched","d","assign","target","i","source","key","defaultConverter","value","init","converter","defaultAttributes","set","name","attributes","stringifiedAttributes","attributeName","get","cookies","jar","parts","found","api","createLogger","prefix","isDebugEnabled","args","isInternalEmail","email","domain","internalEmailDomains","isUUID","str","countryPromise","getCountry","cookieCountry","api","response","cloudflareTrace","text","v","cleanObject","obj","out","i","cleaned","hasKeys","key","_flattenInto","target","value","flattenObject"]}