@magicpixel/rn-mp-client-sdk 0.12.0 → 1.12.1

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 (102) hide show
  1. package/lib/commonjs/common/app-types.js.map +1 -1
  2. package/lib/commonjs/common/constants.js +5 -26
  3. package/lib/commonjs/common/constants.js.map +1 -1
  4. package/lib/commonjs/common/data-store.js +36 -117
  5. package/lib/commonjs/common/data-store.js.map +1 -1
  6. package/lib/commonjs/common/event-bus.js +3 -10
  7. package/lib/commonjs/common/event-bus.js.map +1 -1
  8. package/lib/commonjs/common/logger.js +9 -18
  9. package/lib/commonjs/common/logger.js.map +1 -1
  10. package/lib/commonjs/common/network-service.js +6 -21
  11. package/lib/commonjs/common/network-service.js.map +1 -1
  12. package/lib/commonjs/common/reporter.js +8 -31
  13. package/lib/commonjs/common/reporter.js.map +1 -1
  14. package/lib/commonjs/common/utils.js +64 -65
  15. package/lib/commonjs/common/utils.js.map +1 -1
  16. package/lib/commonjs/coverage/lcov-report/block-navigation.js +6 -19
  17. package/lib/commonjs/coverage/lcov-report/block-navigation.js.map +1 -1
  18. package/lib/commonjs/coverage/lcov-report/prettify.js +2 -182
  19. package/lib/commonjs/coverage/lcov-report/prettify.js.map +1 -1
  20. package/lib/commonjs/coverage/lcov-report/sorter.js +64 -94
  21. package/lib/commonjs/coverage/lcov-report/sorter.js.map +1 -1
  22. package/lib/commonjs/eedl/eedl.js +207 -84
  23. package/lib/commonjs/eedl/eedl.js.map +1 -1
  24. package/lib/commonjs/index.js +104 -95
  25. package/lib/commonjs/index.js.map +1 -1
  26. package/lib/commonjs/models/geo-api-response.js +2 -0
  27. package/lib/commonjs/models/geo-api-response.js.map +1 -0
  28. package/lib/commonjs/models/mp-client-sdk.js +3 -11
  29. package/lib/commonjs/models/mp-client-sdk.js.map +1 -1
  30. package/lib/commonjs/processors/data-element.processor.js +85 -80
  31. package/lib/commonjs/processors/data-element.processor.js.map +1 -1
  32. package/lib/commonjs/processors/geo-location.processor.js +70 -0
  33. package/lib/commonjs/processors/geo-location.processor.js.map +1 -0
  34. package/lib/commonjs/processors/qc.processor.js +2 -25
  35. package/lib/commonjs/processors/qc.processor.js.map +1 -1
  36. package/lib/commonjs/processors/tag.processor.js +17 -86
  37. package/lib/commonjs/processors/tag.processor.js.map +1 -1
  38. package/lib/commonjs/processors/trans-function.processor.js +5 -23
  39. package/lib/commonjs/processors/trans-function.processor.js.map +1 -1
  40. package/lib/commonjs/processors/visit-id.processor.js +4 -50
  41. package/lib/commonjs/processors/visit-id.processor.js.map +1 -1
  42. package/lib/module/common/app-types.js.map +1 -1
  43. package/lib/module/common/constants.js +4 -22
  44. package/lib/module/common/constants.js.map +1 -1
  45. package/lib/module/common/data-store.js +35 -108
  46. package/lib/module/common/data-store.js.map +1 -1
  47. package/lib/module/common/event-bus.js +3 -6
  48. package/lib/module/common/event-bus.js.map +1 -1
  49. package/lib/module/common/logger.js +9 -16
  50. package/lib/module/common/logger.js.map +1 -1
  51. package/lib/module/common/network-service.js +6 -11
  52. package/lib/module/common/network-service.js.map +1 -1
  53. package/lib/module/common/reporter.js +8 -19
  54. package/lib/module/common/reporter.js.map +1 -1
  55. package/lib/module/common/utils.js +63 -56
  56. package/lib/module/common/utils.js.map +1 -1
  57. package/lib/module/coverage/lcov-report/block-navigation.js +6 -19
  58. package/lib/module/coverage/lcov-report/block-navigation.js.map +1 -1
  59. package/lib/module/coverage/lcov-report/prettify.js +2 -182
  60. package/lib/module/coverage/lcov-report/prettify.js.map +1 -1
  61. package/lib/module/coverage/lcov-report/sorter.js +64 -94
  62. package/lib/module/coverage/lcov-report/sorter.js.map +1 -1
  63. package/lib/module/eedl/eedl.js +206 -76
  64. package/lib/module/eedl/eedl.js.map +1 -1
  65. package/lib/module/index.js +102 -57
  66. package/lib/module/index.js.map +1 -1
  67. package/lib/module/models/geo-api-response.js +2 -0
  68. package/lib/module/models/geo-api-response.js.map +1 -0
  69. package/lib/module/models/mp-client-sdk.js +0 -5
  70. package/lib/module/models/mp-client-sdk.js.map +1 -1
  71. package/lib/module/processors/data-element.processor.js +82 -71
  72. package/lib/module/processors/data-element.processor.js.map +1 -1
  73. package/lib/module/processors/geo-location.processor.js +63 -0
  74. package/lib/module/processors/geo-location.processor.js.map +1 -0
  75. package/lib/module/processors/qc.processor.js +2 -11
  76. package/lib/module/processors/qc.processor.js.map +1 -1
  77. package/lib/module/processors/tag.processor.js +17 -57
  78. package/lib/module/processors/tag.processor.js.map +1 -1
  79. package/lib/module/processors/trans-function.processor.js +5 -12
  80. package/lib/module/processors/trans-function.processor.js.map +1 -1
  81. package/lib/module/processors/visit-id.processor.js +4 -27
  82. package/lib/module/processors/visit-id.processor.js.map +1 -1
  83. package/lib/typescript/common/app-types.d.ts +3 -0
  84. package/lib/typescript/common/constants.d.ts +1 -0
  85. package/lib/typescript/common/data-store.d.ts +8 -0
  86. package/lib/typescript/common/utils.d.ts +19 -0
  87. package/lib/typescript/eedl/eedl.d.ts +16 -5
  88. package/lib/typescript/index.d.ts +53 -0
  89. package/lib/typescript/models/geo-api-response.d.ts +12 -0
  90. package/lib/typescript/processors/data-element.processor.d.ts +10 -1
  91. package/lib/typescript/processors/geo-location.processor.d.ts +10 -0
  92. package/package.json +25 -10
  93. package/src/common/app-types.ts +3 -0
  94. package/src/common/constants.ts +2 -0
  95. package/src/common/data-store.ts +38 -0
  96. package/src/common/network-service.ts +2 -0
  97. package/src/common/utils.ts +58 -0
  98. package/src/eedl/eedl.ts +241 -18
  99. package/src/index.tsx +98 -3
  100. package/src/models/geo-api-response.ts +13 -0
  101. package/src/processors/data-element.processor.ts +140 -70
  102. package/src/processors/geo-location.processor.ts +91 -0
@@ -1,41 +1,43 @@
1
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2
-
1
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
2
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
3
+ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
3
4
  import { Utils } from '../common/utils';
4
5
  import { Logger } from '../common/logger';
6
+ import AsyncStorage from '@react-native-async-storage/async-storage';
7
+ import { customAlphabet } from 'nanoid/non-secure';
8
+ const eventsToPersist = {
9
+ user_info: '_mpPendingUserInfo',
10
+ mp_purchase: '_mpPendingPurchase'
11
+ };
12
+
13
+ // UUID v4 generator for React Native
14
+ const getUUIDV4 = customAlphabet('1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', 36);
5
15
  export class MpDataLayerHelper {
6
- constructor(dlEventName, dlInitMode, dlInitEvent) {
16
+ constructor(dlEventName, dlInitMode, dlInitEvent, storageKeyName = '_mpdls') {
7
17
  this.dlEventName = dlEventName;
8
18
  this.dlInitMode = dlInitMode;
9
-
19
+ this.storageKeyName = storageKeyName;
10
20
  _defineProperty(this, "isReady", false);
11
-
12
21
  _defineProperty(this, "_masterDataLayer", {});
13
-
22
+ _defineProperty(this, "_persistedVars", {});
14
23
  _defineProperty(this, "eventProcessors", {});
15
-
16
24
  _defineProperty(this, "stateTracker", []);
17
-
18
25
  _defineProperty(this, "dlInitEvent", void 0);
19
-
20
26
  _defineProperty(this, "receivedInitialEvent", false);
21
-
22
27
  _defineProperty(this, "eventQueue", []);
23
-
28
+ _defineProperty(this, "isEntryPoint", 0);
24
29
  this.dlInitEvent = dlInitEvent;
25
-
30
+ this.resetEntryPointInfo();
26
31
  if (this.dlInitMode !== 'manual') {
27
32
  this.isReady = true;
28
33
  }
29
-
30
34
  if (this.isReady) {
31
35
  this.ready();
32
36
  }
33
37
  }
34
-
35
- init(globalEventListeners) {
38
+ async init(globalEventListeners) {
36
39
  // register any global event listeners passed through to the init command
37
40
  const globalEventListenerKeys = Object.keys(globalEventListeners || {});
38
-
39
41
  if ((globalEventListenerKeys === null || globalEventListenerKeys === void 0 ? void 0 : globalEventListenerKeys.length) > 0) {
40
42
  for (const key of globalEventListenerKeys) {
41
43
  if (typeof globalEventListeners[key] !== 'undefined') {
@@ -43,207 +45,335 @@ export class MpDataLayerHelper {
43
45
  }
44
46
  }
45
47
  }
46
- }
47
48
 
49
+ // Load persisted events from AsyncStorage
50
+ for (const key of Object.keys(eventsToPersist)) {
51
+ try {
52
+ const persistedEvent = await AsyncStorage.getItem(eventsToPersist[key]);
53
+ if (persistedEvent) {
54
+ const event = JSON.parse(persistedEvent);
55
+ this.pushEvent(event.eventName, event.eventPayload);
56
+ }
57
+ } catch (err) {
58
+ Logger.logError('Error parsing persisted event', err);
59
+ }
60
+ }
61
+ }
48
62
  pushEvent(eventName, payload) {
49
63
  Logger.logDbg('EV Push Event:: ', JSON.stringify(payload));
50
-
51
- if (eventName === 'set') {
52
- // process regardless
53
- this.processQItems(eventName, payload);
64
+ if (eventName === 'set' || eventName === 'persist' || eventName === 'clear' || eventName === 'user_info') {
65
+ // process regardless - fire and forget for async operations
66
+ this.processQItems(eventName, payload).catch(err => Logger.logError('Error processing event', err));
54
67
  } else {
55
68
  if (!this.receivedInitialEvent) {
56
69
  // set only if this is not true already
57
70
  this.receivedInitialEvent = eventName === this.dlInitEvent;
58
71
  this.eventQueue.push([eventName, payload]);
59
-
60
72
  if (this.isReady && this.receivedInitialEvent) {
61
73
  this.ready();
62
74
  }
63
75
  } else if (!this.isReady) {
64
76
  this.eventQueue.push([eventName, payload]);
65
77
  } else {
66
- this.processQItems(eventName, payload);
78
+ // fire and forget for async operations
79
+ this.processQItems(eventName, payload).catch(err => Logger.logError('Error processing event', err));
67
80
  }
68
81
  }
69
82
  }
70
-
71
- processQItems(eventName, payload) {
83
+ async processQItems(eventName, payload) {
72
84
  try {
73
85
  if (eventName === 'set') {
74
86
  this.setDl(payload);
87
+ } else if (eventName === 'persist') {
88
+ await this.storeData(payload === null || payload === void 0 ? void 0 : payload.key, payload === null || payload === void 0 ? void 0 : payload.value);
89
+ } else if (eventName === 'clear') {
90
+ if (Array.isArray(payload) && payload.length > 0) {
91
+ await this.deleteData(payload);
92
+ }
93
+ } else if (eventName === 'user_info') {
94
+ this.setUserData(payload);
75
95
  } else {
76
- this.eventProcessor(eventName, payload);
96
+ await this.eventProcessor(eventName, payload);
77
97
  }
78
98
  /* Make sure nothing is written below this line. If you do so, remember to return on error conditions above */
79
-
80
99
  } catch (err) {
81
100
  Logger.logError('Error performing init setup on dl', err);
82
101
  }
83
102
  }
103
+
84
104
  /**
85
105
  * Private Processor for 'set' command object
86
106
  */
87
-
88
-
89
107
  setDl(obj) {
90
108
  if (!obj) {
91
109
  return false;
92
110
  }
93
-
94
111
  const _tmp = Utils.flattenObject(obj);
95
-
96
112
  this._masterDataLayer = Object.assign({}, this._masterDataLayer, _tmp);
97
113
  return true;
98
114
  }
99
-
100
115
  getDl() {
101
116
  return this._masterDataLayer;
102
117
  }
118
+ setUserData(payload) {
119
+ var _payload$zip, _payload$zip2;
120
+ if (payload !== null && payload !== void 0 && payload.zip && (payload === null || payload === void 0 ? void 0 : (_payload$zip = payload.zip) === null || _payload$zip === void 0 ? void 0 : _payload$zip.length) > 0 && (payload === null || payload === void 0 ? void 0 : (_payload$zip2 = payload.zip) === null || _payload$zip2 === void 0 ? void 0 : _payload$zip2.indexOf('-')) > -1) {
121
+ payload.zip = payload.zip.split('-')[0].trim();
122
+ }
123
+ const uif = {};
124
+ this._persistedVars = this._persistedVars || {};
125
+ this._persistedVars.uif = this._persistedVars.uif || {};
126
+ if (payload.pid) {
127
+ this._persistedVars.uif.user_pid = payload.pid;
128
+ uif.pid = payload.pid;
129
+ }
130
+ if (payload.email) {
131
+ this._persistedVars.uif.user_email = payload.email;
132
+ uif.e = payload.email;
133
+ }
134
+ if (payload.phone) {
135
+ this._persistedVars.uif.user_phone = payload.phone;
136
+ uif.p = payload.phone;
137
+ }
138
+ if (payload.country) {
139
+ this._persistedVars.uif.user_country = payload.country;
140
+ uif.cy = payload.country;
141
+ }
142
+ if (payload.city) {
143
+ this._persistedVars.uif.user_city = payload.city;
144
+ uif.ct = payload.city;
145
+ }
146
+ if (payload.state) {
147
+ this._persistedVars.uif.user_state = payload.state;
148
+ uif.st = payload.state;
149
+ }
150
+ if (payload.fName) {
151
+ this._persistedVars.uif.fn = payload.fName;
152
+ uif.fn = payload.fName;
153
+ }
154
+ if (payload.lName) {
155
+ this._persistedVars.uif.ln = payload.lName;
156
+ uif.ln = payload.lName;
157
+ }
158
+ if (payload.zip) {
159
+ this._persistedVars.uif.zip_code = payload.zip;
160
+ uif.z = payload.zip;
161
+ }
162
+ if (Object.keys(uif).length > 0) {
163
+ this.storeData('uif', uif);
164
+ }
165
+ }
166
+ async deleteData(chips) {
167
+ const fullData = await this.getFullData();
168
+ for (const chip of chips) {
169
+ if (typeof chip === 'string') {
170
+ delete fullData[chip];
171
+ }
172
+ }
173
+ await this.storeFullData(fullData);
174
+ }
175
+ async storeData(chip, value) {
176
+ if (typeof chip !== 'undefined' && typeof value !== 'undefined') {
177
+ const fullData = await this.getFullData();
178
+ fullData[chip] = value;
179
+ await this.storeFullData(fullData);
180
+ this._persistedVars[chip] = value;
181
+ } else {
182
+ Logger.logError('Both key and value are required for persisting data');
183
+ }
184
+ }
185
+ async reloadPersistedVars() {
186
+ this._persistedVars = await this.getFullData();
187
+ }
188
+ async getFullData() {
189
+ try {
190
+ const storedData = await AsyncStorage.getItem(this.storageKeyName);
191
+ if (storedData) {
192
+ return JSON.parse(storedData);
193
+ }
194
+ } catch (err) {
195
+ Logger.logError('Error reloading persisted variables', err);
196
+ }
197
+ return {};
198
+ }
199
+ async storeFullData(fullData) {
200
+ this._persistedVars = fullData;
201
+ try {
202
+ await AsyncStorage.setItem(this.storageKeyName, JSON.stringify(fullData));
203
+ } catch (err) {
204
+ Logger.logError('Error storing data', err);
205
+ }
206
+ }
207
+
208
+ // private async getStoredData<T = any>(chip: string, defValue: T): Promise<T> {
209
+ // let value: T;
210
+ // try {
211
+ // const storedData = await AsyncStorage.getItem(this.storageKeyName);
212
+ // if (storedData) {
213
+ // const parsedData = JSON.parse(storedData);
214
+ // value = parsedData[chip];
215
+ // }
216
+ // } catch (err) {
217
+ // Logger.logError('Error parsing stored data', err);
218
+ // }
219
+ // return value ?? defValue;
220
+ // }
221
+
103
222
  /**
104
223
  * Private event processor. Idea is that whenever an event is detected, we create a copy of the master data layer,
105
224
  * add the event variables, and trigger the event requested when initializing the data layer helper
106
225
  * @param eventName
107
226
  * @param model
108
227
  */
228
+ async eventProcessor(eventName, model) {
229
+ model = model ?? {};
109
230
 
110
-
111
- eventProcessor(eventName, model) {
112
231
  /**
113
232
  * The following If block clears the data layer when the initial event is received.
114
233
  * This is done to prevent value carry overs from one page to another in single page apps
115
234
  */
116
235
  if (eventName === 'reset' || eventName === this.dlInitEvent) {
117
236
  this.reset();
237
+
238
+ // add an init event based uuid to the core data model
239
+ model['page_load_uid'] = getUUIDV4();
240
+ model['is_entry_point'] = this.getIsEntryPointValue();
241
+ if (model['is_entry_point'] === 1) {
242
+ // Note: In React Native, we don't have document.referrer, so we'll use a placeholder
243
+ model['entry_point_referrer'] = '';
244
+ }
118
245
  this.setDl(model);
119
246
  model = undefined;
120
247
  }
121
-
122
248
  if (model) {
123
249
  model = {
124
250
  ev: model || {}
125
251
  };
126
252
  } else {
127
253
  model = {};
128
- } // generate a unique id for each event automatically
254
+ }
255
+ await this.reloadPersistedVars();
129
256
 
257
+ // get persisted values and add them into the event model
258
+ model['p'] = this._persistedVars ?? {};
130
259
 
131
- model['ev._id'] = Utils.getUniqueID(); // add the event ts also for every event
260
+ // generate a unique id for each event automatically
261
+ model['ev._id'] = Utils.getUniqueID();
132
262
 
263
+ // add the event ts also for every event
133
264
  model['ev._tsMs'] = Date.now();
134
265
  model['ev._eventName'] = eventName;
135
- model = Utils.flattenObject(model); // create a clone of master data layer and merge event model to it
266
+ model['ev._persistKey'] = eventsToPersist[eventName] || null;
267
+ model = Utils.flattenObject(model);
136
268
 
269
+ // create a clone of master data layer and merge event model to it
137
270
  const _clone = Object.assign({}, this._masterDataLayer, model);
138
-
139
271
  const eventTs = Date.now();
140
- const eventPayload = {
272
+ const eventPayload = JSON.parse(JSON.stringify({
141
273
  eventName: eventName,
142
274
  eventTs: eventTs,
143
275
  model: _clone
144
- }; // add to state tracker
276
+ }));
145
277
 
146
- this.stateTracker.push(eventPayload); // trigger an event that can be listened to by other listeners
278
+ // add to state tracker
279
+ this.stateTracker.push(eventPayload);
147
280
 
148
- Utils.triggerEvent(this.dlEventName, eventPayload); // see if there are any other registered processors and invoke them
281
+ // trigger an event that can be listened to by other listeners
282
+ Utils.triggerEvent(this.dlEventName, eventPayload);
149
283
 
284
+ // see if there are any other registered processors and invoke them
150
285
  if (this.eventProcessors[eventName]) {
151
286
  for (const processor of this.eventProcessors[eventName]) {
152
287
  Utils.safeExecute(processor, eventPayload);
153
288
  }
154
289
  }
155
290
  }
156
-
157
291
  overrideDlInitEvent(eventName) {
158
292
  if (eventName && eventName.length > 0) {
159
293
  this.dlInitEvent = eventName;
160
294
  return 'Dl Init Event Override Successful';
161
295
  }
162
-
163
296
  return 'Dl Init Event Override Failed';
164
297
  }
298
+
165
299
  /**
166
300
  * Exposed method for registering custom processors for events
167
301
  * @param eventType
168
302
  * @param fn
169
303
  */
170
-
171
-
172
304
  registerProcessor(eventType, fn) {
173
305
  if (!eventType || !fn || typeof fn !== 'function') {
174
306
  Logger.logError('EventType and Fn are mandatory');
175
307
  return;
176
308
  }
177
-
178
309
  if (!this.eventProcessors[eventType]) {
179
310
  this.eventProcessors[eventType] = [];
180
311
  }
181
-
182
312
  this.eventProcessors[eventType].push(fn);
183
313
  }
314
+
184
315
  /**
185
316
  * Exposed getter for getting values from data layer
186
317
  * @param key
187
318
  * @returns {*|undefined}
188
319
  */
189
-
190
-
191
320
  get(key) {
192
321
  return this._masterDataLayer[key] || undefined;
193
322
  }
194
-
195
323
  getState() {
196
324
  return this.stateTracker;
197
325
  }
198
-
199
326
  hasEventHappened(key) {
200
327
  return !!this.stateTracker.find(i => i.eventName === key);
201
328
  }
202
-
203
329
  reset() {
204
330
  this._masterDataLayer = {};
205
331
  return true;
206
332
  }
207
-
208
333
  ready() {
209
334
  this.isReady = true;
210
-
211
335
  if (this.receivedInitialEvent) {
212
- Logger.logDbg('Initial event received: ', this.dlInitEvent); // drain queue only if the initial configured event has been received,
336
+ Logger.logDbg('Initial event received: ', this.dlInitEvent);
337
+ // drain queue only if the initial configured event has been received,
213
338
  // otherwise mark isReady but dont drain the queue. queue will be drained first when the init
214
339
  // event is received
215
-
216
- this.drainQueue();
340
+ this.drainQueue().catch(err => Logger.logError('Error draining queue', err));
217
341
  } else {
218
342
  Logger.logDbg(`Initial event (${this.dlInitEvent}) NOT received. Events will be queued`);
219
343
  }
220
344
  }
221
-
222
- drainQueue() {
223
- Logger.logDbg('drainQueue...'); // create a copy of the array
224
-
225
- const _temp = [...this.eventQueue]; // clean the array
226
-
227
- this.eventQueue.splice(0, this.eventQueue.length); // find the event with dlInit event and execute it first, rest continues
228
-
345
+ async drainQueue() {
346
+ Logger.logDbg('drainQueue...');
347
+ // create a copy of the array
348
+ const _temp = [...this.eventQueue];
349
+ // clean the array
350
+ this.eventQueue.splice(0, this.eventQueue.length);
351
+ // find the event with dlInit event and execute it first, rest continues
229
352
  const initialEventObjectIndex = _temp.findIndex(e => {
230
353
  var _;
231
-
232
354
  return ((_ = [e][0]) === null || _ === void 0 ? void 0 : _[0]) === this.dlInitEvent;
233
355
  });
234
-
235
356
  if (initialEventObjectIndex > -1) {
236
357
  // splice and execute it
237
- this.processQItems(_temp[initialEventObjectIndex][0], _temp[initialEventObjectIndex][1]);
238
-
358
+ await this.processQItems(_temp[initialEventObjectIndex][0], _temp[initialEventObjectIndex][1]);
239
359
  _temp.splice(initialEventObjectIndex, 1);
240
- } // continue with other items
241
-
242
-
360
+ }
361
+ // continue with other items
243
362
  for (const item of _temp) {
244
- this.processQItems(item[0], item[1]);
363
+ await this.processQItems(item[0], item[1]);
245
364
  }
246
365
  }
247
-
366
+ getIsEntryPointValue() {
367
+ // In React Native, we'll use a simple approach for entry point tracking
368
+ // This could be enhanced with proper session storage implementation
369
+ const currentValue = this.isEntryPoint;
370
+ this.isEntryPoint = 0; // Reset after first use
371
+ return currentValue;
372
+ }
373
+ resetEntryPointInfo() {
374
+ // In React Native, we'll default to entry point = 1 for the first session
375
+ // This could be enhanced with proper referrer tracking if needed
376
+ this.isEntryPoint = 1;
377
+ }
248
378
  }
249
379
  //# sourceMappingURL=eedl.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["Utils","Logger","MpDataLayerHelper","constructor","dlEventName","dlInitMode","dlInitEvent","isReady","ready","init","globalEventListeners","globalEventListenerKeys","Object","keys","length","key","registerProcessor","pushEvent","eventName","payload","logDbg","JSON","stringify","processQItems","receivedInitialEvent","eventQueue","push","setDl","eventProcessor","err","logError","obj","_tmp","flattenObject","_masterDataLayer","assign","getDl","model","reset","undefined","ev","getUniqueID","Date","now","_clone","eventTs","eventPayload","stateTracker","triggerEvent","eventProcessors","processor","safeExecute","overrideDlInitEvent","eventType","fn","get","getState","hasEventHappened","find","i","drainQueue","_temp","splice","initialEventObjectIndex","findIndex","e","item"],"sources":["eedl.ts"],"sourcesContent":["import { Utils } from '../common/utils';\nimport type { EventProcessorFn, MapLike, TypedAny } from '../common/app-types';\nimport { Logger } from '../common/logger';\n\nexport class MpDataLayerHelper {\n isReady = false;\n _masterDataLayer: MapLike = {};\n eventProcessors: Record<string, any> = {};\n stateTracker: Array<any> = [];\n dlInitEvent: string;\n receivedInitialEvent = false;\n eventQueue: Array<any> = [];\n\n constructor(\n private readonly dlEventName: string,\n private readonly dlInitMode: string,\n dlInitEvent: string\n ) {\n this.dlInitEvent = dlInitEvent;\n\n if (this.dlInitMode !== 'manual') {\n this.isReady = true;\n }\n\n if (this.isReady) {\n this.ready();\n }\n }\n\n init(globalEventListeners: Record<string, EventProcessorFn>): void {\n // register any global event listeners passed through to the init command\n const globalEventListenerKeys = Object.keys(globalEventListeners || {});\n if (globalEventListenerKeys?.length > 0) {\n for (const key of globalEventListenerKeys) {\n if (typeof globalEventListeners[key] !== 'undefined') {\n this.registerProcessor(key, globalEventListeners[key] as any);\n }\n }\n }\n }\n\n pushEvent(eventName: string, payload: MapLike): void {\n Logger.logDbg('EV Push Event:: ', JSON.stringify(payload));\n if (eventName === 'set') {\n // process regardless\n this.processQItems(eventName, payload);\n } else {\n if (!this.receivedInitialEvent) {\n // set only if this is not true already\n this.receivedInitialEvent = eventName === this.dlInitEvent;\n this.eventQueue.push([eventName, payload]);\n if (this.isReady && this.receivedInitialEvent) {\n this.ready();\n }\n } else if (!this.isReady) {\n this.eventQueue.push([eventName, payload]);\n } else {\n this.processQItems(eventName, payload);\n }\n }\n }\n\n processQItems(eventName: string, payload: MapLike): void {\n try {\n if (eventName === 'set') {\n this.setDl(payload);\n } else {\n this.eventProcessor(eventName, payload);\n }\n /* Make sure nothing is written below this line. If you do so, remember to return on error conditions above */\n } catch (err) {\n Logger.logError('Error performing init setup on dl', err);\n }\n }\n\n /**\n * Private Processor for 'set' command object\n */\n setDl(obj: TypedAny | undefined): boolean {\n if (!obj) {\n return false;\n }\n const _tmp = Utils.flattenObject(obj);\n this._masterDataLayer = Object.assign({}, this._masterDataLayer, _tmp);\n return true;\n }\n\n getDl(): TypedAny {\n return this._masterDataLayer;\n }\n\n /**\n * Private event processor. Idea is that whenever an event is detected, we create a copy of the master data layer,\n * add the event variables, and trigger the event requested when initializing the data layer helper\n * @param eventName\n * @param model\n */\n eventProcessor(eventName: string, model: TypedAny | undefined): void {\n /**\n * The following If block clears the data layer when the initial event is received.\n * This is done to prevent value carry overs from one page to another in single page apps\n */\n if (eventName === 'reset' || eventName === this.dlInitEvent) {\n this.reset();\n this.setDl(model);\n model = undefined;\n }\n\n if (model) {\n model = {\n ev: (model || {}) as any,\n };\n } else {\n model = {};\n }\n\n // generate a unique id for each event automatically\n model['ev._id'] = Utils.getUniqueID();\n\n // add the event ts also for every event\n model['ev._tsMs'] = Date.now();\n\n model['ev._eventName'] = eventName;\n\n model = Utils.flattenObject(model);\n\n // create a clone of master data layer and merge event model to it\n const _clone = Object.assign({}, this._masterDataLayer, model);\n const eventTs = Date.now();\n\n const eventPayload = {\n eventName: eventName,\n eventTs: eventTs,\n model: _clone,\n };\n\n // add to state tracker\n this.stateTracker.push(eventPayload);\n\n // trigger an event that can be listened to by other listeners\n Utils.triggerEvent(this.dlEventName, eventPayload);\n\n // see if there are any other registered processors and invoke them\n if (this.eventProcessors[eventName]) {\n for (const processor of this.eventProcessors[eventName]) {\n Utils.safeExecute(processor, eventPayload);\n }\n }\n }\n\n overrideDlInitEvent(eventName: string): string {\n if (eventName && eventName.length > 0) {\n this.dlInitEvent = eventName;\n return 'Dl Init Event Override Successful';\n }\n return 'Dl Init Event Override Failed';\n }\n\n /**\n * Exposed method for registering custom processors for events\n * @param eventType\n * @param fn\n */\n registerProcessor(eventType: string, fn: EventProcessorFn): void {\n if (!eventType || !fn || typeof fn !== 'function') {\n Logger.logError('EventType and Fn are mandatory');\n return;\n }\n if (!this.eventProcessors[eventType]) {\n this.eventProcessors[eventType] = [];\n }\n\n this.eventProcessors[eventType].push(fn);\n }\n\n /**\n * Exposed getter for getting values from data layer\n * @param key\n * @returns {*|undefined}\n */\n get(key: string): MapLike | undefined {\n return this._masterDataLayer[key] || undefined;\n }\n\n getState(): TypedAny[] {\n return this.stateTracker;\n }\n\n hasEventHappened(key: string): boolean {\n return !!this.stateTracker.find((i) => i.eventName === key);\n }\n\n reset(): boolean {\n this._masterDataLayer = {};\n return true;\n }\n\n ready(): void {\n this.isReady = true;\n if (this.receivedInitialEvent) {\n Logger.logDbg('Initial event received: ', this.dlInitEvent);\n // drain queue only if the initial configured event has been received,\n // otherwise mark isReady but dont drain the queue. queue will be drained first when the init\n // event is received\n this.drainQueue();\n } else {\n Logger.logDbg(\n `Initial event (${this.dlInitEvent}) NOT received. Events will be queued`\n );\n }\n }\n\n drainQueue(): void {\n Logger.logDbg('drainQueue...');\n // create a copy of the array\n const _temp = [...this.eventQueue];\n // clean the array\n this.eventQueue.splice(0, this.eventQueue.length);\n // find the event with dlInit event and execute it first, rest continues\n const initialEventObjectIndex = _temp.findIndex(\n (e) => [e][0]?.[0] === this.dlInitEvent\n );\n if (initialEventObjectIndex > -1) {\n // splice and execute it\n this.processQItems(\n _temp[initialEventObjectIndex][0],\n _temp[initialEventObjectIndex][1]\n );\n _temp.splice(initialEventObjectIndex, 1);\n }\n // continue with other items\n for (const item of _temp) {\n this.processQItems(item[0], item[1]);\n }\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["Utils","Logger","AsyncStorage","customAlphabet","eventsToPersist","user_info","mp_purchase","getUUIDV4","MpDataLayerHelper","constructor","dlEventName","dlInitMode","dlInitEvent","storageKeyName","_defineProperty","resetEntryPointInfo","isReady","ready","init","globalEventListeners","globalEventListenerKeys","Object","keys","length","key","registerProcessor","persistedEvent","getItem","event","JSON","parse","pushEvent","eventName","eventPayload","err","logError","payload","logDbg","stringify","processQItems","catch","receivedInitialEvent","eventQueue","push","setDl","storeData","value","Array","isArray","deleteData","setUserData","eventProcessor","obj","_tmp","flattenObject","_masterDataLayer","assign","getDl","_payload$zip","_payload$zip2","zip","indexOf","split","trim","uif","_persistedVars","pid","user_pid","email","user_email","e","phone","user_phone","p","country","user_country","cy","city","user_city","ct","state","user_state","st","fName","fn","lName","ln","zip_code","z","chips","fullData","getFullData","chip","storeFullData","reloadPersistedVars","storedData","setItem","model","reset","getIsEntryPointValue","undefined","ev","getUniqueID","Date","now","_clone","eventTs","stateTracker","triggerEvent","eventProcessors","processor","safeExecute","overrideDlInitEvent","eventType","get","getState","hasEventHappened","find","i","drainQueue","_temp","splice","initialEventObjectIndex","findIndex","_","item","currentValue","isEntryPoint"],"sources":["eedl.ts"],"sourcesContent":["import { Utils } from '../common/utils';\nimport type { EventProcessorFn, MapLike, TypedAny } from '../common/app-types';\nimport { Logger } from '../common/logger';\nimport AsyncStorage from '@react-native-async-storage/async-storage';\nimport { customAlphabet } from 'nanoid/non-secure';\n\nconst eventsToPersist: Record<string, string> = {\n user_info: '_mpPendingUserInfo',\n mp_purchase: '_mpPendingPurchase',\n};\n\n// UUID v4 generator for React Native\nconst getUUIDV4 = customAlphabet(\n '1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',\n 36\n);\n\nexport class MpDataLayerHelper {\n isReady = false;\n _masterDataLayer: MapLike = {};\n _persistedVars: MapLike = {};\n eventProcessors: Record<string, any> = {};\n stateTracker: Array<any> = [];\n dlInitEvent: string;\n receivedInitialEvent = false;\n eventQueue: Array<any> = [];\n private isEntryPoint = 0;\n\n constructor(\n private readonly dlEventName: string,\n private readonly dlInitMode: string,\n dlInitEvent: string,\n private readonly storageKeyName: string = '_mpdls'\n ) {\n this.dlInitEvent = dlInitEvent;\n this.resetEntryPointInfo();\n\n if (this.dlInitMode !== 'manual') {\n this.isReady = true;\n }\n\n if (this.isReady) {\n this.ready();\n }\n }\n\n async init(\n globalEventListeners: Record<string, EventProcessorFn>\n ): Promise<void> {\n // register any global event listeners passed through to the init command\n const globalEventListenerKeys = Object.keys(globalEventListeners || {});\n if (globalEventListenerKeys?.length > 0) {\n for (const key of globalEventListenerKeys) {\n if (typeof globalEventListeners[key] !== 'undefined') {\n this.registerProcessor(key, globalEventListeners[key] as any);\n }\n }\n }\n\n // Load persisted events from AsyncStorage\n for (const key of Object.keys(eventsToPersist)) {\n try {\n const persistedEvent = await AsyncStorage.getItem(eventsToPersist[key]);\n if (persistedEvent) {\n const event: { eventName: string; eventPayload: any } =\n JSON.parse(persistedEvent);\n this.pushEvent(event.eventName, event.eventPayload);\n }\n } catch (err) {\n Logger.logError('Error parsing persisted event', err);\n }\n }\n }\n\n pushEvent(eventName: string, payload: MapLike): void {\n Logger.logDbg('EV Push Event:: ', JSON.stringify(payload));\n if (\n eventName === 'set' ||\n eventName === 'persist' ||\n eventName === 'clear' ||\n eventName === 'user_info'\n ) {\n // process regardless - fire and forget for async operations\n this.processQItems(eventName, payload).catch((err) =>\n Logger.logError('Error processing event', err)\n );\n } else {\n if (!this.receivedInitialEvent) {\n // set only if this is not true already\n this.receivedInitialEvent = eventName === this.dlInitEvent;\n this.eventQueue.push([eventName, payload]);\n if (this.isReady && this.receivedInitialEvent) {\n this.ready();\n }\n } else if (!this.isReady) {\n this.eventQueue.push([eventName, payload]);\n } else {\n // fire and forget for async operations\n this.processQItems(eventName, payload).catch((err) =>\n Logger.logError('Error processing event', err)\n );\n }\n }\n }\n\n async processQItems(eventName: string, payload: MapLike): Promise<void> {\n try {\n if (eventName === 'set') {\n this.setDl(payload);\n } else if (eventName === 'persist') {\n await this.storeData(payload?.key, payload?.value);\n } else if (eventName === 'clear') {\n if (Array.isArray(payload) && payload.length > 0) {\n await this.deleteData(payload as string[]);\n }\n } else if (eventName === 'user_info') {\n this.setUserData(payload);\n } else {\n await this.eventProcessor(eventName, payload);\n }\n /* Make sure nothing is written below this line. If you do so, remember to return on error conditions above */\n } catch (err) {\n Logger.logError('Error performing init setup on dl', err);\n }\n }\n\n /**\n * Private Processor for 'set' command object\n */\n setDl(obj: TypedAny | undefined): boolean {\n if (!obj) {\n return false;\n }\n const _tmp = Utils.flattenObject(obj);\n this._masterDataLayer = Object.assign({}, this._masterDataLayer, _tmp);\n return true;\n }\n\n getDl(): TypedAny {\n return this._masterDataLayer;\n }\n\n private setUserData(payload: {\n pid?: string;\n email?: string;\n phone?: string;\n country?: string;\n city?: string;\n state?: string;\n fName?: string;\n lName?: string;\n zip?: string;\n }): void {\n if (\n payload?.zip &&\n payload?.zip?.length > 0 &&\n payload?.zip?.indexOf('-') > -1\n ) {\n payload.zip = payload.zip.split('-')[0].trim();\n }\n\n const uif: any = {};\n this._persistedVars = this._persistedVars || {};\n this._persistedVars.uif = this._persistedVars.uif || {};\n\n if (payload.pid) {\n this._persistedVars.uif.user_pid = payload.pid;\n uif.pid = payload.pid;\n }\n\n if (payload.email) {\n this._persistedVars.uif.user_email = payload.email;\n uif.e = payload.email;\n }\n\n if (payload.phone) {\n this._persistedVars.uif.user_phone = payload.phone;\n uif.p = payload.phone;\n }\n\n if (payload.country) {\n this._persistedVars.uif.user_country = payload.country;\n uif.cy = payload.country;\n }\n\n if (payload.city) {\n this._persistedVars.uif.user_city = payload.city;\n uif.ct = payload.city;\n }\n\n if (payload.state) {\n this._persistedVars.uif.user_state = payload.state;\n uif.st = payload.state;\n }\n\n if (payload.fName) {\n this._persistedVars.uif.fn = payload.fName;\n uif.fn = payload.fName;\n }\n\n if (payload.lName) {\n this._persistedVars.uif.ln = payload.lName;\n uif.ln = payload.lName;\n }\n\n if (payload.zip) {\n this._persistedVars.uif.zip_code = payload.zip;\n uif.z = payload.zip;\n }\n\n if (Object.keys(uif).length > 0) {\n this.storeData('uif', uif);\n }\n }\n\n private async deleteData(chips: string[]): Promise<void> {\n const fullData = await this.getFullData();\n for (const chip of chips) {\n if (typeof chip === 'string') {\n delete fullData[chip];\n }\n }\n await this.storeFullData(fullData);\n }\n\n private async storeData(chip: string, value: any): Promise<void> {\n if (typeof chip !== 'undefined' && typeof value !== 'undefined') {\n const fullData = await this.getFullData();\n fullData[chip] = value;\n await this.storeFullData(fullData);\n this._persistedVars[chip] = value;\n } else {\n Logger.logError('Both key and value are required for persisting data');\n }\n }\n\n private async reloadPersistedVars(): Promise<void> {\n this._persistedVars = await this.getFullData();\n }\n\n private async getFullData(): Promise<MapLike> {\n try {\n const storedData = await AsyncStorage.getItem(this.storageKeyName);\n if (storedData) {\n return JSON.parse(storedData);\n }\n } catch (err) {\n Logger.logError('Error reloading persisted variables', err);\n }\n return {};\n }\n\n private async storeFullData(fullData: MapLike): Promise<void> {\n this._persistedVars = fullData;\n try {\n await AsyncStorage.setItem(this.storageKeyName, JSON.stringify(fullData));\n } catch (err) {\n Logger.logError('Error storing data', err);\n }\n }\n\n // private async getStoredData<T = any>(chip: string, defValue: T): Promise<T> {\n // let value: T;\n // try {\n // const storedData = await AsyncStorage.getItem(this.storageKeyName);\n // if (storedData) {\n // const parsedData = JSON.parse(storedData);\n // value = parsedData[chip];\n // }\n // } catch (err) {\n // Logger.logError('Error parsing stored data', err);\n // }\n // return value ?? defValue;\n // }\n\n /**\n * Private event processor. Idea is that whenever an event is detected, we create a copy of the master data layer,\n * add the event variables, and trigger the event requested when initializing the data layer helper\n * @param eventName\n * @param model\n */\n async eventProcessor(\n eventName: string,\n model: TypedAny | undefined\n ): Promise<void> {\n model = model ?? {};\n\n /**\n * The following If block clears the data layer when the initial event is received.\n * This is done to prevent value carry overs from one page to another in single page apps\n */\n if (eventName === 'reset' || eventName === this.dlInitEvent) {\n this.reset();\n\n // add an init event based uuid to the core data model\n model['page_load_uid'] = getUUIDV4();\n model['is_entry_point'] = this.getIsEntryPointValue();\n if (model['is_entry_point'] === 1) {\n // Note: In React Native, we don't have document.referrer, so we'll use a placeholder\n model['entry_point_referrer'] = '';\n }\n\n this.setDl(model);\n model = undefined;\n }\n\n if (model) {\n model = {\n ev: (model || {}) as any,\n };\n } else {\n model = {};\n }\n\n await this.reloadPersistedVars();\n\n // get persisted values and add them into the event model\n model['p'] = this._persistedVars ?? {};\n\n // generate a unique id for each event automatically\n model['ev._id'] = Utils.getUniqueID();\n\n // add the event ts also for every event\n model['ev._tsMs'] = Date.now();\n\n model['ev._eventName'] = eventName;\n\n model['ev._persistKey'] = eventsToPersist[eventName] || null;\n\n model = Utils.flattenObject(model);\n\n // create a clone of master data layer and merge event model to it\n const _clone = Object.assign({}, this._masterDataLayer, model);\n const eventTs = Date.now();\n\n const eventPayload = JSON.parse(\n JSON.stringify({\n eventName: eventName,\n eventTs: eventTs,\n model: _clone,\n })\n );\n\n // add to state tracker\n this.stateTracker.push(eventPayload);\n\n // trigger an event that can be listened to by other listeners\n Utils.triggerEvent(this.dlEventName, eventPayload);\n\n // see if there are any other registered processors and invoke them\n if (this.eventProcessors[eventName]) {\n for (const processor of this.eventProcessors[eventName]) {\n Utils.safeExecute(processor, eventPayload);\n }\n }\n }\n\n overrideDlInitEvent(eventName: string): string {\n if (eventName && eventName.length > 0) {\n this.dlInitEvent = eventName;\n return 'Dl Init Event Override Successful';\n }\n return 'Dl Init Event Override Failed';\n }\n\n /**\n * Exposed method for registering custom processors for events\n * @param eventType\n * @param fn\n */\n registerProcessor(eventType: string, fn: EventProcessorFn): void {\n if (!eventType || !fn || typeof fn !== 'function') {\n Logger.logError('EventType and Fn are mandatory');\n return;\n }\n if (!this.eventProcessors[eventType]) {\n this.eventProcessors[eventType] = [];\n }\n\n this.eventProcessors[eventType].push(fn);\n }\n\n /**\n * Exposed getter for getting values from data layer\n * @param key\n * @returns {*|undefined}\n */\n get(key: string): MapLike | undefined {\n return this._masterDataLayer[key] || undefined;\n }\n\n getState(): TypedAny[] {\n return this.stateTracker;\n }\n\n hasEventHappened(key: string): boolean {\n return !!this.stateTracker.find((i) => i.eventName === key);\n }\n\n reset(): boolean {\n this._masterDataLayer = {};\n return true;\n }\n\n ready(): void {\n this.isReady = true;\n if (this.receivedInitialEvent) {\n Logger.logDbg('Initial event received: ', this.dlInitEvent);\n // drain queue only if the initial configured event has been received,\n // otherwise mark isReady but dont drain the queue. queue will be drained first when the init\n // event is received\n this.drainQueue().catch((err) =>\n Logger.logError('Error draining queue', err)\n );\n } else {\n Logger.logDbg(\n `Initial event (${this.dlInitEvent}) NOT received. Events will be queued`\n );\n }\n }\n\n async drainQueue(): Promise<void> {\n Logger.logDbg('drainQueue...');\n // create a copy of the array\n const _temp = [...this.eventQueue];\n // clean the array\n this.eventQueue.splice(0, this.eventQueue.length);\n // find the event with dlInit event and execute it first, rest continues\n const initialEventObjectIndex = _temp.findIndex(\n (e) => [e][0]?.[0] === this.dlInitEvent\n );\n if (initialEventObjectIndex > -1) {\n // splice and execute it\n await this.processQItems(\n _temp[initialEventObjectIndex][0],\n _temp[initialEventObjectIndex][1]\n );\n _temp.splice(initialEventObjectIndex, 1);\n }\n // continue with other items\n for (const item of _temp) {\n await this.processQItems(item[0], item[1]);\n }\n }\n\n getIsEntryPointValue(): number {\n // In React Native, we'll use a simple approach for entry point tracking\n // This could be enhanced with proper session storage implementation\n const currentValue = this.isEntryPoint;\n this.isEntryPoint = 0; // Reset after first use\n return currentValue;\n }\n\n resetEntryPointInfo(): void {\n // In React Native, we'll default to entry point = 1 for the first session\n // This could be enhanced with proper referrer tracking if needed\n this.isEntryPoint = 1;\n }\n}\n"],"mappings":"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","ignoreList":[]}