@deriv-com/analytics 1.4.10 → 1.4.11

Sign up to get free protection for your applications and to get access to all the features.
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",