@deriv-com/analytics 1.4.10 → 1.4.11

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 CHANGED
@@ -1,4 +1,4 @@
1
- # `@deriv/analytics`
1
+ # `@deriv-com/analytics`
2
2
 
3
3
  The analytics package contains all the utility functions used for tracking user events and sending them to the respective platform such as Rudderstack and GrowthBook.
4
4
 
@@ -18,7 +18,7 @@ Cross-project, connected user tracking events with A/B testing features
18
18
  To install the package, run the following command:
19
19
 
20
20
  ```
21
- $ npm i @deriv/analytics
21
+ $ npm i @deriv-com/analytics
22
22
  ```
23
23
 
24
24
  To proper initialisation of the package, pass proper keys in special function in special for init functions place:
@@ -49,7 +49,7 @@ And you finally can use the tracking events and A/B testing features
49
49
  To start using it, let's observe on SDK usage examples:
50
50
 
51
51
  ```js
52
- import { Analytics } from '@deriv/analytics';
52
+ import { Analytics } from '@deriv-com/analytics';
53
53
 
54
54
  // Tracking features:
55
55
  Analytics?.identifyEvent() // inentify the user
@@ -66,18 +66,18 @@ Analytics?.trackEvent('ce_virtual_signup_form', {
66
66
  })
67
67
 
68
68
  // the same as example below, to not to add repetable properties again and again
69
- const analyticsData: Parameters<typeof Analytics.trackEvent>[1] = {
69
+ const analytics_data: Parameters<typeof Analytics.trackEvent>[1] = {
70
70
  form_name: 'default_diel_deriv',
71
71
  }
72
72
  Analytics?.trackEvent('ce_virtual_signup_form', {
73
73
  action: 'open',
74
74
  signup_provider: 'email',
75
- ...analyticsData
75
+ ...analytics_data
76
76
  })
77
77
  Analytics?.trackEvent('ce_virtual_signup_form', {
78
78
  action: 'close',
79
79
  signup_provider: 'google',
80
- ...analyticsData
80
+ ...analytics_data
81
81
  })
82
82
 
83
83
  // A/B testing features
@@ -8,7 +8,7 @@ type Options = {
8
8
  };
9
9
  export declare function createAnalyticsInstance(options?: Options): {
10
10
  initialise: ({ growthbookKey, growthbookDecryptionKey, rudderstackKey }: Options) => void;
11
- setAttributes: ({ country, user_language, device_language, device_type, account_type, user_id, app_id, }: TCoreAttributes) => void;
11
+ setAttributes: ({ country, user_language, device_language, device_type, account_type, user_id, app_id, utm_source, utm_medium, utm_campaign, is_authorised, }: TCoreAttributes) => void;
12
12
  identifyEvent: () => void;
13
13
  getFeatureState: (id: string) => string | undefined;
14
14
  getFeatureValue: <T>(id: string, defaultValue?: T | undefined) => boolean | ((attributes: import("@growthbook/growthbook").Attributes) => void) | ((options?: import("@growthbook/growthbook").LoadFeaturesOptions | undefined) => Promise<void>) | ((options?: import("@growthbook/growthbook").RefreshFeaturesOptions | undefined) => Promise<void>) | (() => [string, string]) | (() => {
@@ -25,7 +25,7 @@ export declare function createAnalyticsInstance(options?: Options): {
25
25
  isFeatureOn: (key: string) => boolean;
26
26
  setUrl: (href: string) => void;
27
27
  getId: () => string;
28
- trackEvent: <T_2 extends keyof TEvents>(event: T_2, analyticsData: TEvents[T_2]) => void;
28
+ trackEvent: <T_2 extends keyof TEvents>(event: T_2, analytics_data: TEvents[T_2]) => void;
29
29
  getInstances: () => {
30
30
  ab: Growthbook;
31
31
  tracking: RudderStack;
@@ -35,7 +35,7 @@ export declare function createAnalyticsInstance(options?: Options): {
35
35
  };
36
36
  export declare const Analytics: {
37
37
  initialise: ({ growthbookKey, growthbookDecryptionKey, rudderstackKey }: Options) => void;
38
- setAttributes: ({ country, user_language, device_language, device_type, account_type, user_id, app_id, }: TCoreAttributes) => void;
38
+ setAttributes: ({ country, user_language, device_language, device_type, account_type, user_id, app_id, utm_source, utm_medium, utm_campaign, is_authorised, }: TCoreAttributes) => void;
39
39
  identifyEvent: () => void;
40
40
  getFeatureState: (id: string) => string | undefined;
41
41
  getFeatureValue: <T>(id: string, defaultValue?: T | undefined) => boolean | ((attributes: import("@growthbook/growthbook").Attributes) => void) | ((options?: import("@growthbook/growthbook").LoadFeaturesOptions | undefined) => Promise<void>) | ((options?: import("@growthbook/growthbook").RefreshFeaturesOptions | undefined) => Promise<void>) | (() => [string, string]) | (() => {
@@ -52,7 +52,7 @@ export declare const Analytics: {
52
52
  isFeatureOn: (key: string) => boolean;
53
53
  setUrl: (href: string) => void;
54
54
  getId: () => string;
55
- trackEvent: <T_2 extends keyof TEvents>(event: T_2, analyticsData: TEvents[T_2]) => void;
55
+ trackEvent: <T_2 extends keyof TEvents>(event: T_2, analytics_data: TEvents[T_2]) => void;
56
56
  getInstances: () => {
57
57
  ab: Growthbook;
58
58
  tracking: RudderStack;
package/lib/analytics.js CHANGED
@@ -15,7 +15,13 @@ exports.Analytics = exports.createAnalyticsInstance = void 0;
15
15
  var growthbook_1 = require("./growthbook");
16
16
  var rudderstack_1 = require("./rudderstack");
17
17
  function createAnalyticsInstance(options) {
18
- var _growthbook, _rudderstack;
18
+ var _growthbook, _rudderstack, core_data = {}, cta_buttons = {}, offline_cache = {};
19
+ var interval = setInterval(function () {
20
+ if (Object.keys(cta_buttons).length > 0)
21
+ clearInterval(interval);
22
+ else
23
+ cta_buttons = getFeatureValue('tracking-buttons-config', {});
24
+ }, 1000);
19
25
  var initialise = function (_a) {
20
26
  var growthbookKey = _a.growthbookKey, growthbookDecryptionKey = _a.growthbookDecryptionKey, rudderstackKey = _a.rudderstackKey;
21
27
  _rudderstack = rudderstack_1.RudderStack.getRudderStackInstance(rudderstackKey);
@@ -23,12 +29,8 @@ function createAnalyticsInstance(options) {
23
29
  _growthbook = growthbook_1.Growthbook.getGrowthBookInstance(growthbookKey, growthbookDecryptionKey);
24
30
  }
25
31
  };
26
- if (options) {
27
- initialise(options);
28
- }
29
- var coreData = {};
30
32
  var setAttributes = function (_a) {
31
- var country = _a.country, user_language = _a.user_language, device_language = _a.device_language, device_type = _a.device_type, account_type = _a.account_type, user_id = _a.user_id, app_id = _a.app_id;
33
+ var country = _a.country, user_language = _a.user_language, device_language = _a.device_language, device_type = _a.device_type, account_type = _a.account_type, user_id = _a.user_id, app_id = _a.app_id, utm_source = _a.utm_source, utm_medium = _a.utm_medium, utm_campaign = _a.utm_campaign, is_authorised = _a.is_authorised;
32
34
  if (!_growthbook && !_rudderstack)
33
35
  return;
34
36
  var user_identity = user_id ? user_id : getId();
@@ -40,17 +42,19 @@ function createAnalyticsInstance(options) {
40
42
  user_language: user_language,
41
43
  device_language: device_language,
42
44
  device_type: device_type,
45
+ utm_source: utm_source,
46
+ utm_medium: utm_medium,
47
+ utm_campaign: utm_campaign,
48
+ is_authorised: is_authorised,
43
49
  });
44
50
  }
45
- coreData = __assign(__assign(__assign(__assign(__assign({}, (user_language !== undefined && { user_language: user_language })), (account_type !== undefined && { account_type: account_type })), (app_id !== undefined && { app_id: app_id })), (device_type !== undefined && { device_type: device_type })), (user_identity !== undefined && { user_identity: user_identity }));
51
+ core_data = __assign(__assign(__assign(__assign(__assign({}, (user_language !== undefined && { user_language: user_language })), (account_type !== undefined && { account_type: account_type })), (app_id !== undefined && { app_id: app_id })), (device_type !== undefined && { device_type: device_type })), (user_identity !== undefined && { user_identity: user_identity }));
46
52
  };
47
53
  var getFeatureState = function (id) { var _a, _b; return (_b = (_a = _growthbook === null || _growthbook === void 0 ? void 0 : _growthbook.getFeatureState(id)) === null || _a === void 0 ? void 0 : _a.experimentResult) === null || _b === void 0 ? void 0 : _b.name; };
48
54
  var getFeatureValue = function (id, defaultValue) { return _growthbook === null || _growthbook === void 0 ? void 0 : _growthbook.getFeatureValue(id, defaultValue); };
49
55
  var isFeatureOn = function (key) { return _growthbook === null || _growthbook === void 0 ? void 0 : _growthbook.isOn(key); };
50
56
  var setUrl = function (href) { return _growthbook === null || _growthbook === void 0 ? void 0 : _growthbook.setUrl(href); };
51
57
  var getId = function () { return (_rudderstack === null || _rudderstack === void 0 ? void 0 : _rudderstack.getUserId()) || (_rudderstack === null || _rudderstack === void 0 ? void 0 : _rudderstack.getAnonymousId()); };
52
- // for QA testing purposes
53
- window.getMyId = getId;
54
58
  /**
55
59
  * Pushes page view event to Rudderstack
56
60
  *
@@ -63,8 +67,8 @@ function createAnalyticsInstance(options) {
63
67
  _rudderstack === null || _rudderstack === void 0 ? void 0 : _rudderstack.pageView(current_page, platform, getId());
64
68
  };
65
69
  var identifyEvent = function () {
66
- if ((coreData === null || coreData === void 0 ? void 0 : coreData.user_identity) && _rudderstack) {
67
- _rudderstack === null || _rudderstack === void 0 ? void 0 : _rudderstack.identifyEvent(coreData === null || coreData === void 0 ? void 0 : coreData.user_identity, { language: (coreData === null || coreData === void 0 ? void 0 : coreData.user_language) || 'en' });
70
+ if ((core_data === null || core_data === void 0 ? void 0 : core_data.user_identity) && _rudderstack) {
71
+ _rudderstack === null || _rudderstack === void 0 ? void 0 : _rudderstack.identifyEvent(core_data === null || core_data === void 0 ? void 0 : core_data.user_identity, { language: (core_data === null || core_data === void 0 ? void 0 : core_data.user_language) || 'en' });
68
72
  }
69
73
  };
70
74
  var reset = function () {
@@ -72,10 +76,26 @@ function createAnalyticsInstance(options) {
72
76
  return;
73
77
  _rudderstack === null || _rudderstack === void 0 ? void 0 : _rudderstack.reset();
74
78
  };
75
- var trackEvent = function (event, analyticsData) {
79
+ var trackEvent = function (event, analytics_data) {
76
80
  if (!_rudderstack)
77
81
  return;
78
- _rudderstack === null || _rudderstack === void 0 ? void 0 : _rudderstack.track(event, __assign(__assign({}, coreData), analyticsData));
82
+ if (navigator.onLine) {
83
+ if (Object.keys(offline_cache).length > 0) {
84
+ Object.keys(offline_cache).map(function (cache) {
85
+ _rudderstack.track(offline_cache[cache].event, offline_cache[cache].payload);
86
+ delete offline_cache[cache];
87
+ });
88
+ }
89
+ if (event in cta_buttons) {
90
+ // @ts-ignore
91
+ cta_buttons[event] && (_rudderstack === null || _rudderstack === void 0 ? void 0 : _rudderstack.track(event, __assign(__assign({}, core_data), analytics_data)));
92
+ }
93
+ else
94
+ _rudderstack === null || _rudderstack === void 0 ? void 0 : _rudderstack.track(event, __assign(__assign({}, core_data), analytics_data));
95
+ }
96
+ else {
97
+ offline_cache[event + analytics_data.action] = { event: event, payload: __assign(__assign({}, core_data), analytics_data) };
98
+ }
79
99
  };
80
100
  var getInstances = function () { return ({ ab: _growthbook, tracking: _rudderstack }); };
81
101
  return {
@@ -5,7 +5,7 @@ export declare class Growthbook {
5
5
  private static _instance;
6
6
  constructor(clientKey: string, decryptionKey: string);
7
7
  static getGrowthBookInstance(clientKey: string, decryptionKey: string): Growthbook;
8
- setAttributes({ id, country, user_language, device_language, device_type }: TGrowthbookAttributes): void;
8
+ setAttributes({ id, country, user_language, device_language, device_type, utm_source, utm_medium, utm_campaign, is_authorised, }: TGrowthbookAttributes): void;
9
9
  getFeatureState<K, V>(id: K): import("@growthbook/growthbook").FeatureResult<boolean | ((attributes: import("@growthbook/growthbook").Attributes) => void) | ((options?: import("@growthbook/growthbook").LoadFeaturesOptions | undefined) => Promise<void>) | ((options?: import("@growthbook/growthbook").RefreshFeaturesOptions | undefined) => Promise<void>) | (() => [string, string]) | (() => {
10
10
  apiHost: string;
11
11
  streamingHost: string;
package/lib/growthbook.js CHANGED
@@ -73,8 +73,8 @@ var Growthbook = /** @class */ (function () {
73
73
  return Growthbook._instance;
74
74
  };
75
75
  Growthbook.prototype.setAttributes = function (_a) {
76
- var id = _a.id, country = _a.country, user_language = _a.user_language, device_language = _a.device_language, device_type = _a.device_type;
77
- return this.GrowthBook.setAttributes(__assign(__assign(__assign(__assign({ id: id }, (country !== undefined && { country: country })), (user_language !== undefined && { user_language: user_language })), (device_language !== undefined && { device_language: device_language })), (device_type !== undefined && { device_type: device_type })));
76
+ var id = _a.id, country = _a.country, user_language = _a.user_language, device_language = _a.device_language, device_type = _a.device_type, utm_source = _a.utm_source, utm_medium = _a.utm_medium, utm_campaign = _a.utm_campaign, is_authorised = _a.is_authorised;
77
+ return this.GrowthBook.setAttributes(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign({ id: id }, (country !== undefined && { country: country })), (user_language !== undefined && { user_language: user_language })), (device_language !== undefined && { device_language: device_language })), (device_type !== undefined && { device_type: device_type })), (utm_source !== undefined && { utm_source: utm_source })), (utm_medium !== undefined && { utm_medium: utm_medium })), (utm_campaign !== undefined && { utm_campaign: utm_campaign })), (is_authorised !== undefined && { is_authorised: is_authorised })));
78
78
  };
79
79
  Growthbook.prototype.getFeatureState = function (id) {
80
80
  // @ts-ignore
package/lib/types.d.ts CHANGED
@@ -4,6 +4,10 @@ export type TGrowthbookAttributes = {
4
4
  user_language?: string;
5
5
  device_language?: string;
6
6
  device_type?: string;
7
+ utm_source?: string;
8
+ utm_medium?: 'ppc-native' | 'affiliate' | 'common' | string;
9
+ utm_campaign?: string;
10
+ is_authorised?: boolean;
7
11
  };
8
12
  export type TCoreAttributes = {
9
13
  account_type?: string;
@@ -87,28 +91,35 @@ type TradeTypesForm = {
87
91
  subform_name?: string;
88
92
  };
89
93
  type BotDashboardForm = {
90
- action?: 'open' | 'close' | 'search' | 'delete' | 'yes' | 'no' | 'search_string' | 'choose_shortcut' | 'bot_last_modified_time' | 'delete_popup_respond' | 'push_open_button' | 'push_user_guide' | 'save_your_bot' | 'choose_your_bot' | 'delete_your_bot';
94
+ action?: 'open' | 'close' | 'search' | 'delete' | 'yes' | 'no' | 'search_string' | 'choose_shortcut' | 'bot_last_modified_time' | 'delete_popup_respond' | 'push_open_button' | 'push_user_guide' | 'save_your_bot' | 'edit_your_bot' | 'choose_your_bot' | 'delete_your_bot';
91
95
  shortcut_name?: string;
92
96
  form_source?: string;
97
+ form_name?: string;
93
98
  search_string?: string;
94
99
  delete_popup_respond?: string;
95
100
  bot_last_modified_time?: number;
96
101
  bot_name?: string;
102
+ bot_status?: string;
103
+ preview_mode?: string;
97
104
  };
98
105
  type BotQuickStrategyForm = {
99
- action?: 'open' | 'close' | 'choose_strategy' | 'switch_strategy_mode' | 'choose_asset' | 'choose_trade_type' | 'choose_trade_type_mode' | 'choose_duration' | 'change_parameter_value' | 'info_popup_open' | 'run_strategy';
100
- form_source?: 'bot_dashboard' | 'bot_builder_form';
101
- strategy_type?: "d'alembert" | 'martingale' | "oscar's-grind";
102
- strategy_switcher_mode?: 'trade-parameters' | 'description';
103
- asset_type?: 'gbp-basket' | 'eur-basket' | 'etc';
104
- trade_type?: 'rise/fall' | 'rise-equals/fall-equals' | 'etc';
105
- trade_type_mode?: 'rise' | 'fall' | 'rise-equals' | 'fall-equals' | 'etc';
106
+ action?: 'open' | 'close' | 'choose_strategy_type' | 'switch_strategy_mode' | 'choose_asset' | 'choose_trade_type' | 'choose_trade_type_mode' | 'choose_duration' | 'change_parameter_value' | 'info_popup_open' | 'run_strategy' | 'loss_threshold_warning_popup' | 'learn_more_expansion' | 'learn_more_collapse' | 'edit_strategy';
107
+ form_source?: 'ce_bot_dashboard_form' | 'ce_bot_builder_form';
108
+ form_name?: 'ce_bot_quick_strategy_form';
109
+ strategy_type?: `d'alembert` | `martingale` | `oscar's-grind` | `reverse martingale` | `reverse d'alembert` | `1-3-2-6`;
110
+ strategy_switcher_mode?: 'learn more' | 'trade parameters';
111
+ asset_type?: string;
112
+ trade_type?: string;
113
+ trade_type_mode?: string;
106
114
  duration_type?: 'ticks' | 'seconds' | 'minutes' | 'hours' | 'days';
107
- parameter_type?: 'initial-stake' | 'duration' | 'profit-threshold' | 'loss-threshold' | 'size-unit' | 'max-stake';
108
- parameter_value?: string;
109
- plus_push_amount?: string;
110
- minus_push_amount?: string;
115
+ parameter_type?: 'initial-stake' | 'duration' | 'profit-threshold' | 'loss-threshold' | 'size-unit' | 'max-stake' | string;
116
+ parameter_field_type?: 'input' | 'dropdown' | 'slider' | 'checkbox' | 'number';
117
+ parameter_value?: string | number | boolean;
118
+ plus_minus_push?: 'yes' | 'no';
111
119
  manual_parameter_input?: 'yes' | 'no';
120
+ dont_show_checkbox?: 'yes' | 'no';
121
+ cta_name?: 'edit_the_amount' | 'yes_continue';
122
+ learn_more_title?: string;
112
123
  };
113
124
  type BotBuilderForm = {
114
125
  action?: 'open' | 'close' | 'search';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deriv-com/analytics",
3
- "version": "1.4.10",
3
+ "version": "1.4.11",
4
4
  "description": "The analytics package contains all the utility functions used for tracking user events and sending them to the respective platform such as Rudderstack.",
5
5
  "keywords": [
6
6
  "rudderstack",