@magicpixel/rn-mp-client-sdk 1.13.0 → 1.13.20

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 (104) hide show
  1. package/README.md +163 -14
  2. package/lib/commonjs/common/app-types.js.map +1 -1
  3. package/lib/commonjs/common/constants.js +11 -2
  4. package/lib/commonjs/common/constants.js.map +1 -1
  5. package/lib/commonjs/common/data-store.js +13 -30
  6. package/lib/commonjs/common/data-store.js.map +1 -1
  7. package/lib/commonjs/common/deeplink-helper.js +174 -0
  8. package/lib/commonjs/common/deeplink-helper.js.map +1 -0
  9. package/lib/commonjs/common/device-info-helper.js +168 -0
  10. package/lib/commonjs/common/device-info-helper.js.map +1 -0
  11. package/lib/commonjs/common/event-bus.js +39 -0
  12. package/lib/commonjs/common/event-bus.js.map +1 -1
  13. package/lib/commonjs/common/network-service.js +119 -15
  14. package/lib/commonjs/common/network-service.js.map +1 -1
  15. package/lib/commonjs/common/reporter.js +28 -10
  16. package/lib/commonjs/common/reporter.js.map +1 -1
  17. package/lib/commonjs/common/storage-helper.js +227 -0
  18. package/lib/commonjs/common/storage-helper.js.map +1 -0
  19. package/lib/commonjs/common/utils.js +20 -2
  20. package/lib/commonjs/common/utils.js.map +1 -1
  21. package/lib/commonjs/eedl/eedl.js +198 -44
  22. package/lib/commonjs/eedl/eedl.js.map +1 -1
  23. package/lib/commonjs/index.js +290 -48
  24. package/lib/commonjs/index.js.map +1 -1
  25. package/lib/commonjs/models/mp-client-sdk.js +17 -10
  26. package/lib/commonjs/models/mp-client-sdk.js.map +1 -1
  27. package/lib/commonjs/processors/data-element.processor.js +51 -7
  28. package/lib/commonjs/processors/data-element.processor.js.map +1 -1
  29. package/lib/commonjs/processors/visit-id.processor.js +78 -15
  30. package/lib/commonjs/processors/visit-id.processor.js.map +1 -1
  31. package/lib/module/common/app-types.js.map +1 -1
  32. package/lib/module/common/constants.js +11 -2
  33. package/lib/module/common/constants.js.map +1 -1
  34. package/lib/module/common/data-store.js +13 -30
  35. package/lib/module/common/data-store.js.map +1 -1
  36. package/lib/module/common/deeplink-helper.js +168 -0
  37. package/lib/module/common/deeplink-helper.js.map +1 -0
  38. package/lib/module/common/device-info-helper.js +161 -0
  39. package/lib/module/common/device-info-helper.js.map +1 -0
  40. package/lib/module/common/event-bus.js +39 -0
  41. package/lib/module/common/event-bus.js.map +1 -1
  42. package/lib/module/common/network-service.js +119 -15
  43. package/lib/module/common/network-service.js.map +1 -1
  44. package/lib/module/common/reporter.js +29 -10
  45. package/lib/module/common/reporter.js.map +1 -1
  46. package/lib/module/common/storage-helper.js +221 -0
  47. package/lib/module/common/storage-helper.js.map +1 -0
  48. package/lib/module/common/utils.js +20 -2
  49. package/lib/module/common/utils.js.map +1 -1
  50. package/lib/module/eedl/eedl.js +198 -44
  51. package/lib/module/eedl/eedl.js.map +1 -1
  52. package/lib/module/index.js +279 -47
  53. package/lib/module/index.js.map +1 -1
  54. package/lib/module/models/mp-client-sdk.js +16 -9
  55. package/lib/module/models/mp-client-sdk.js.map +1 -1
  56. package/lib/module/processors/data-element.processor.js +51 -7
  57. package/lib/module/processors/data-element.processor.js.map +1 -1
  58. package/lib/module/processors/visit-id.processor.js +78 -15
  59. package/lib/module/processors/visit-id.processor.js.map +1 -1
  60. package/lib/typescript/{common → src/common}/app-types.d.ts +29 -9
  61. package/lib/typescript/{common → src/common}/constants.d.ts +0 -1
  62. package/lib/typescript/{common → src/common}/data-store.d.ts +3 -8
  63. package/lib/typescript/src/common/deeplink-helper.d.ts +60 -0
  64. package/lib/typescript/src/common/device-info-helper.d.ts +54 -0
  65. package/lib/typescript/src/common/event-bus.d.ts +21 -0
  66. package/lib/typescript/src/common/network-service.d.ts +32 -0
  67. package/lib/typescript/src/common/storage-helper.d.ts +47 -0
  68. package/lib/typescript/{common → src/common}/utils.d.ts +7 -0
  69. package/lib/typescript/{eedl → src/eedl}/eedl.d.ts +43 -1
  70. package/lib/typescript/{index.d.ts → src/index.d.ts} +39 -5
  71. package/lib/typescript/{models → src/models}/mp-client-sdk.d.ts +7 -0
  72. package/lib/typescript/src/processors/visit-id.processor.d.ts +23 -0
  73. package/package.json +26 -37
  74. package/src/common/app-types.ts +32 -10
  75. package/src/common/constants.ts +0 -6
  76. package/src/common/data-store.ts +8 -30
  77. package/src/common/deeplink-helper.ts +181 -0
  78. package/src/common/device-info-helper.ts +190 -0
  79. package/src/common/event-bus.ts +39 -0
  80. package/src/common/network-service.ts +154 -21
  81. package/src/common/reporter.ts +31 -10
  82. package/src/common/storage-helper.ts +266 -0
  83. package/src/common/utils.ts +20 -2
  84. package/src/eedl/eedl.ts +225 -51
  85. package/src/index.tsx +332 -67
  86. package/src/models/mp-client-sdk.ts +8 -0
  87. package/src/processors/data-element.processor.ts +85 -7
  88. package/src/processors/visit-id.processor.ts +92 -22
  89. package/lib/commonjs/processors/trans-function.processor.js +0 -73
  90. package/lib/commonjs/processors/trans-function.processor.js.map +0 -1
  91. package/lib/module/processors/trans-function.processor.js +0 -66
  92. package/lib/module/processors/trans-function.processor.js.map +0 -1
  93. package/lib/typescript/common/event-bus.d.ts +0 -6
  94. package/lib/typescript/common/network-service.d.ts +0 -8
  95. package/lib/typescript/processors/trans-function.processor.d.ts +0 -12
  96. package/lib/typescript/processors/visit-id.processor.d.ts +0 -9
  97. package/src/processors/trans-function.processor.ts +0 -85
  98. /package/lib/typescript/{common → src/common}/logger.d.ts +0 -0
  99. /package/lib/typescript/{common → src/common}/reporter.d.ts +0 -0
  100. /package/lib/typescript/{models → src/models}/geo-api-response.d.ts +0 -0
  101. /package/lib/typescript/{processors → src/processors}/data-element.processor.d.ts +0 -0
  102. /package/lib/typescript/{processors → src/processors}/geo-location.processor.d.ts +0 -0
  103. /package/lib/typescript/{processors → src/processors}/qc.processor.d.ts +0 -0
  104. /package/lib/typescript/{processors → src/processors}/tag.processor.d.ts +0 -0
@@ -1,6 +1,8 @@
1
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
2
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
3
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); }
4
+ // Polyfill for crypto.getRandomValues() required by ULID
5
+ import 'react-native-get-random-values';
4
6
  import { MpDataLayerHelper } from './eedl/eedl';
5
7
  import { DataStore } from './common/data-store';
6
8
  import { Logger } from './common/logger';
@@ -13,19 +15,121 @@ import { NetworkService } from './common/network-service';
13
15
  import { EventBus } from './common/event-bus';
14
16
  import { VisitIdProcessor } from './processors/visit-id.processor';
15
17
  import { GeoLocationProcessor } from './processors/geo-location.processor';
18
+ import { DeviceInfoHelper } from './common/device-info-helper';
19
+ import { DeepLinkHelper } from './common/deeplink-helper';
20
+ import { StorageHelper } from './common/storage-helper';
16
21
  const DL_INIT_EVENT = 'page_load';
22
+
23
+ // Maximum number of events to buffer before SDK is ready
24
+ const MAX_BUFFERED_EVENTS = 500;
25
+
26
+ // Type for buffered events
27
+
17
28
  class MagicPixelImpl {
18
- static async init(options) {
19
- var _options$device_type;
29
+ /**
30
+ * Initialize the MagicPixel SDK
31
+ * This method is synchronous - it stores config immediately and runs async setup in background
32
+ * Events called before async setup completes are buffered and processed once ready
33
+ * @param options SDK initialization options
34
+ */
35
+ static init(options) {
36
+ // Guard against multiple init() calls
37
+ if (this.isReady) {
38
+ Logger.logDbg('MagicPixel SDK already initialized. Ignoring duplicate init() call.');
39
+ return;
40
+ }
41
+ if (this.isInitializing) {
42
+ Logger.logDbg('MagicPixel SDK initialization in progress. Ignoring duplicate init() call.');
43
+ return;
44
+ }
45
+ this.isInitializing = true;
46
+
47
+ // Sync setup - happens immediately
20
48
  Logger.setLogLevel(options.logLevel ?? 'none');
49
+ this.orgId = options.orgId;
50
+ this.onInitFailureCallback = options.onInitFailure;
51
+ Logger.logDbg('MagicPixel SDK init started');
52
+
53
+ // Async setup - runs in background, events are buffered until complete
54
+ this.initAsync(options).catch(err => {
55
+ Logger.logError('MagicPixel SDK initialization failed:', err);
56
+ Reporter.reportError('sdk_init', err);
57
+
58
+ // Reset initializing flag so developer can retry if needed
59
+ this.isInitializing = false;
60
+
61
+ // Call failure callback if provided
62
+ if (this.onInitFailureCallback) {
63
+ const error = err instanceof Error ? err : new Error(String(err));
64
+ this.onInitFailureCallback(error);
65
+ }
66
+ });
67
+ }
68
+
69
+ /**
70
+ * Shutdown the SDK and release all resources
71
+ * Call this when the app is closing or when you need to reinitialize the SDK
72
+ * After shutdown, you must call init() again to use the SDK
73
+ */
74
+ static shutdown() {
75
+ Logger.logDbg('MagicPixel SDK shutting down...');
76
+
77
+ // Clean up deeplink listener and callback
78
+ DeepLinkHelper.cleanup();
79
+
80
+ // Clear all EventBus listeners to prevent duplicates on reinit
81
+ EventBus.clearAll();
82
+
83
+ // Clear session-scoped data element values (in-memory store)
84
+ StorageHelper.clearSessionStore();
85
+
86
+ // Clear event buffer
87
+ this.eventBuffer = [];
88
+
89
+ // Reset state flags
90
+ this.isReady = false;
91
+ this.isInitializing = false;
92
+ this.onInitFailureCallback = undefined;
93
+
94
+ // Reset customer data
95
+ this.customerInfo = undefined;
96
+ this.customerIdentifiers = {};
97
+ this.deepLinkUrl = undefined;
98
+ this.firstAppLaunch = true;
99
+
100
+ // Shutdown EEDL
101
+ this.dl.shutdown();
102
+ Logger.logDbg('MagicPixel SDK shutdown complete');
103
+ }
104
+
105
+ /**
106
+ * Async initialization - runs in background
107
+ */
108
+ static async initAsync(options) {
21
109
  await NetworkService.refreshClientSdkJson(options);
22
110
  if (!DataStore.isDataStoreReady()) {
23
- throw new Error('MagicPixel SDK is not ready. No tags will be processed');
111
+ throw new Error('MagicPixel SDK: DataStore not ready after config fetch. Initialization failed.');
24
112
  }
25
- if (options && options.device_type && ((_options$device_type = options.device_type) === null || _options$device_type === void 0 ? void 0 : _options$device_type.trim().length) > 0) {
26
- DataStore.overrideDeviceType(options.device_type);
27
- }
28
- this.setAppVersion(options.app_version);
113
+
114
+ // Initialize StorageHelper for data element storage duration
115
+ // This loads visitor-scoped values from AsyncStorage and clears expired ones (>30 days)
116
+ await StorageHelper.initialize();
117
+
118
+ // Auto-detect device info - always use detected values to prevent hardcoded values
119
+ const autoDetectedInfo = await DeviceInfoHelper.getAppInfo();
120
+ Logger.logDbg('Auto-detected device info:', autoDetectedInfo);
121
+
122
+ // Set device type from auto-detection (Expo/react-native-device-info)
123
+ // This is more reliable than dimension-based detection which fails on high-res phones
124
+ const detectedDeviceType = autoDetectedInfo.is_tablet ? 'tablet' : 'mobile';
125
+ DataStore.overrideDeviceType(detectedDeviceType);
126
+ Logger.logDbg('Device type set from auto-detection:', detectedDeviceType);
127
+
128
+ // Always use auto-detected app_version (ignore options.app_version)
129
+ this.setAppVersion(autoDetectedInfo.app_version);
130
+
131
+ // Set device info with auto-detected values (cannot be overridden)
132
+ await this.setDeviceInfo();
29
133
  await VisitIdProcessor.init(options === null || options === void 0 ? void 0 : options.orgId);
30
134
  const fbp = await VisitIdProcessor.getFacebookFBP();
31
135
  if (fbp) {
@@ -35,9 +139,38 @@ class MagicPixelImpl {
35
139
  Logger.logDbg('No facebook client id found. not setting');
36
140
  }
37
141
 
142
+ // Auto-detect deeplink if app was opened via deeplink (e.g., ad click)
143
+ // Supports: custom schemes (myapp://), universal links (https://), app links, HTTP links
144
+ const initialDeepLink = await DeepLinkHelper.initialize((url, linkType) => {
145
+ try {
146
+ Logger.logDbg(`Deeplink detected (${linkType}):`, url);
147
+
148
+ // Store deeplink URL - will be attached to next page_load event
149
+ this.setDeepLinkUrl(url);
150
+
151
+ // Fire deeplink opened event
152
+ // URL params will be parsed and attached to page_load event automatically
153
+ this.recordEvent('deeplink_opened', {
154
+ deep_link_url: url,
155
+ link_type: linkType
156
+ });
157
+ } catch (err) {
158
+ Logger.logError('Error processing deeplink:', err);
159
+ Reporter.reportError('deeplink_callback', err);
160
+ }
161
+ });
162
+ if (initialDeepLink) {
163
+ Logger.logDbg('App opened with initial deeplink:', initialDeepLink);
164
+ }
165
+
38
166
  // Initialize EEDL with any global event listeners
39
167
  await this.dl.init({});
40
168
 
169
+ // Set event deduplication window if specified (default is 5000ms)
170
+ if (typeof options.eventDeduplicationWindowMs !== 'undefined') {
171
+ this.dl.setDeduplicationWindow(options.eventDeduplicationWindowMs);
172
+ }
173
+
41
174
  // Make geo location API call after initialization
42
175
  try {
43
176
  await GeoLocationProcessor.makeGeoLocationApiCall();
@@ -51,9 +184,8 @@ class MagicPixelImpl {
51
184
  const eventId = eventDataModel['ev._id'];
52
185
  Logger.logDbg('Tracking Event:: ', eventName, 'with id:: ', eventId);
53
186
  if (DataStore.shouldExecuteTMForEvent(eventName)) {
54
- // if this is something the tag manager is interested in - fire tag manager
55
- DataStore.enQueueTMFire(false, `custom_event_${eventName}`, eventName, eventId, eventDataModel);
56
- await this.checkAndFireTM();
187
+ // Call runTM directly - no queuing, EEDL manages sequential processing
188
+ await this.runTM(false, `custom_event_${eventName}`, eventName, eventId, eventDataModel);
57
189
  }
58
190
  });
59
191
  const isFirstOpen = await VisitIdProcessor.isFirstOpenAfterInstall();
@@ -62,8 +194,32 @@ class MagicPixelImpl {
62
194
  this.recordEvent('app_first_open', {});
63
195
  }
64
196
  this.ready();
197
+
198
+ // Mark SDK as ready and flush any buffered events
199
+ this.isReady = true;
200
+ this.isInitializing = false;
201
+ Logger.logDbg('SDK is ready, flushing event buffer');
202
+ this.flushEventBuffer();
65
203
  }
66
204
  static recordEvent(eventName, payload) {
205
+ // Buffer event if SDK is not ready yet
206
+ if (!this.isReady) {
207
+ Logger.logDbg(`SDK not ready, buffering event: ${eventName}`);
208
+ // Evict oldest event if buffer at capacity
209
+ if (this.eventBuffer.length >= MAX_BUFFERED_EVENTS) {
210
+ const evicted = this.eventBuffer.shift();
211
+ Logger.logDbg(`Event buffer at capacity (${MAX_BUFFERED_EVENTS}), evicted oldest:`, (evicted === null || evicted === void 0 ? void 0 : evicted.type) === 'event' ? evicted.name : 'pageLoad');
212
+ }
213
+ this.eventBuffer.push({
214
+ type: 'event',
215
+ name: eventName,
216
+ data: payload
217
+ });
218
+ return;
219
+ }
220
+ this.processRecordEvent(eventName, payload);
221
+ }
222
+ static processRecordEvent(eventName, payload) {
67
223
  if (this.customerInfo) {
68
224
  const newPayload = {
69
225
  ...payload,
@@ -82,32 +238,38 @@ class MagicPixelImpl {
82
238
  static ready() {
83
239
  this.dl.ready();
84
240
  }
85
- static getDebugId() {
86
- return DataStore.getDebugId();
87
- }
88
- static async checkAndFireTM() {
89
- try {
90
- if (!DataStore.isTagManagerProcessing()) {
91
- const item = DataStore.deQueueTMFire();
92
- if (item) {
93
- Logger.logDbg('Executing TM For: ', item.name, ', Event:: ', item.dcrName, ', Event id:: ', item.eventId, 'Payload:: ', item.dcrPayload);
94
- await this.runTM(item.sseOnly, item.name, item.dcrName, item.eventId, item.dcrPayload);
95
- }
96
- } else {
97
- Logger.logDbg('Tag Manager is processing or is not ready. This event will start after that');
241
+
242
+ /**
243
+ * Flush buffered events after SDK is ready
244
+ * Events are processed in the order they were received
245
+ */
246
+ static flushEventBuffer() {
247
+ if (this.eventBuffer.length === 0) {
248
+ Logger.logDbg('No buffered events to flush');
249
+ return;
250
+ }
251
+ Logger.logDbg(`Flushing ${this.eventBuffer.length} buffered event(s)`);
252
+
253
+ // Process all buffered events in order
254
+ while (this.eventBuffer.length > 0) {
255
+ const event = this.eventBuffer.shift();
256
+ if (event.type === 'pageLoad') {
257
+ Logger.logDbg(`Processing buffered page load: ${event.data.page_name}`);
258
+ this.processRecordPageLoad(event.data);
259
+ } else if (event.type === 'event') {
260
+ Logger.logDbg(`Processing buffered event: ${event.name}`);
261
+ this.processRecordEvent(event.name, event.data);
98
262
  }
99
- } catch (err) {
100
- Logger.logError('Error check and process tm', err);
101
- Reporter.reportError('m:checkAndFireTM', err);
102
263
  }
264
+ Logger.logDbg('Event buffer flushed');
265
+ }
266
+ static getDebugId() {
267
+ return DataStore.getDebugId();
103
268
  }
104
269
  static async runTM(sseOnly, triggerName, evtName, evtId, eventData) {
105
270
  try {
106
271
  Logger.logDbg('Running:: ', sseOnly, triggerName, evtName, evtId, eventData);
107
272
 
108
- // set tag manager in process status
109
- DataStore.setTagManagerProcessing(true);
110
-
111
273
  // process all the data elements and cache them for this run
112
274
  await DataElementProcessor.processDataElements(DataStore.getSdkDataElements(), eventData);
113
275
  const sdk = DataStore.getClientSdk();
@@ -122,7 +284,8 @@ class MagicPixelImpl {
122
284
  DataStore.setPrivacyCompliance(false);
123
285
  }
124
286
  } else {
125
- Logger.logDbg('Set: PR Comp: ', false);
287
+ // No privacy manager configured - default to true (tracking allowed)
288
+ Logger.logDbg('Set: PR Comp: ', true, '(no privacy manager configured)');
126
289
  DataStore.setPrivacyCompliance(true);
127
290
  }
128
291
  if (DataStore.getSdkPageLangKey()) {
@@ -156,12 +319,12 @@ class MagicPixelImpl {
156
319
  static _fireTM(envName, envId, evtName, evtId) {
157
320
  // increment visit_depth if event name is page_load because that's the only way we can track page views in an app for now
158
321
  if (evtName === DL_INIT_EVENT) {
159
- VisitIdProcessor.incrementVisitDepth().finally(() => {
160
- this._fireTMPrivate(envName, envId, evtName, evtId);
161
- });
162
- } else {
163
- this._fireTMPrivate(envName, envId, evtName, evtId);
322
+ // Synchronous increment - no race condition possible
323
+ VisitIdProcessor.incrementVisitDepth();
164
324
  }
325
+
326
+ // Continue immediately after sync increment
327
+ this._fireTMPrivate(envName, envId, evtName, evtId);
165
328
  }
166
329
  static _fireTMPrivate(envName, envId, evtName, evtId) {
167
330
  if (DataStore.hasOneSSTTag() && DataStore.shouldFireSstForEvent(evtName)) {
@@ -169,14 +332,8 @@ class MagicPixelImpl {
169
332
  Reporter.reportError('l::postSST', err);
170
333
  });
171
334
  }
172
- DataStore.setTagManagerProcessing(false);
173
- Utils.sleep(250).then(async () => {
174
- try {
175
- await this.checkAndFireTM();
176
- } catch (err) {
177
- Reporter.reportError('i::runTM', err);
178
- }
179
- });
335
+ // Note: EEDL handles queue progression via its own .finally() block
336
+ // No need to call processNext() here - it would be redundant
180
337
  }
181
338
  static setCustomerInfo(customerInfo) {
182
339
  this.customerInfo = customerInfo;
@@ -188,7 +345,39 @@ class MagicPixelImpl {
188
345
  static setDeepLinkUrl(deepLinkUrl) {
189
346
  this.deepLinkUrl = deepLinkUrl;
190
347
  }
191
- static setDeviceInfo(deviceInfo) {
348
+
349
+ /**
350
+ * Set device info with auto-detected values
351
+ * Standard fields (os_version, device_model_name, package_name) are always auto-detected
352
+ * Optional customFields parameter allows adding custom tracking fields only
353
+ * @param customFields Optional custom fields to add (cannot override standard fields)
354
+ */
355
+ static async setDeviceInfo(customFields) {
356
+ // Always auto-detect standard device info (cannot be overridden)
357
+ const autoDetectedInfo = await DeviceInfoHelper.getAppInfo();
358
+
359
+ // Standard fields are always auto-detected to prevent hardcoded values
360
+ const deviceInfo = {
361
+ os_version: autoDetectedInfo.os_version,
362
+ device_model_name: autoDetectedInfo.device_model_name,
363
+ package_name: autoDetectedInfo.package_name
364
+ };
365
+
366
+ // Add any custom fields (if provided)
367
+ if (customFields) {
368
+ // Filter out attempts to override standard fields
369
+ const allowedCustomFields = {
370
+ ...customFields
371
+ };
372
+ delete allowedCustomFields.os_version;
373
+ delete allowedCustomFields.device_model_name;
374
+ delete allowedCustomFields.package_name;
375
+ Object.assign(deviceInfo, allowedCustomFields);
376
+ if (Object.keys(allowedCustomFields).length !== Object.keys(customFields).length) {
377
+ Logger.logDbg('Warning: Attempted to override standard device fields. Using auto-detected values instead.');
378
+ }
379
+ }
380
+ Logger.logDbg('Setting device info:', deviceInfo);
192
381
  DataStore.setDeviceInfo(deviceInfo);
193
382
  }
194
383
  static setFacebookClientId(fbp) {
@@ -196,11 +385,34 @@ class MagicPixelImpl {
196
385
  }
197
386
  static setAppVersion(appVersion) {
198
387
  var _appVersion$trim;
199
- if (appVersion && (appVersion === null || appVersion === void 0 ? void 0 : (_appVersion$trim = appVersion.trim()) === null || _appVersion$trim === void 0 ? void 0 : _appVersion$trim.length) > 0) {
388
+ if (appVersion && (appVersion === null || appVersion === void 0 || (_appVersion$trim = appVersion.trim()) === null || _appVersion$trim === void 0 ? void 0 : _appVersion$trim.length) > 0) {
200
389
  this.customerIdentifiers.app_version = appVersion;
201
390
  }
202
391
  }
203
392
  static recordPageLoad(pageLoadInfo) {
393
+ // Buffer page load if SDK is not ready yet
394
+ if (!this.isReady) {
395
+ Logger.logDbg(`SDK not ready, buffering page load: ${pageLoadInfo.page_name}`);
396
+ // Evict oldest event if buffer at capacity
397
+ if (this.eventBuffer.length >= MAX_BUFFERED_EVENTS) {
398
+ const evicted = this.eventBuffer.shift();
399
+ Logger.logDbg(`Event buffer at capacity (${MAX_BUFFERED_EVENTS}), evicted oldest:`, (evicted === null || evicted === void 0 ? void 0 : evicted.type) === 'event' ? evicted.name : 'pageLoad');
400
+ }
401
+ this.eventBuffer.push({
402
+ type: 'pageLoad',
403
+ data: {
404
+ ...pageLoadInfo
405
+ } // Clone to preserve original data
406
+ });
407
+ return;
408
+ }
409
+ this.processRecordPageLoad(pageLoadInfo);
410
+ }
411
+ static processRecordPageLoad(pageLoadInfo) {
412
+ // Retry visitor ID fetch if it failed during init (fire and forget)
413
+ VisitIdProcessor.retryVisitorIdIfNeeded().catch(err => {
414
+ Logger.logError('Error retrying visitor ID fetch:', err);
415
+ });
204
416
  pageLoadInfo.is_entry = this.firstAppLaunch ? 1 : 0;
205
417
 
206
418
  // Use stored deepLinkUrl if it exists AND either:
@@ -209,13 +421,26 @@ class MagicPixelImpl {
209
421
  if (this.deepLinkUrl && !pageLoadInfo.deep_link_url) {
210
422
  pageLoadInfo.deep_link_url = this.deepLinkUrl;
211
423
  }
424
+
425
+ // Set page_url for attribution framework
426
+ // Priority: deep_link_url (if present) > constructed URL (v_<orgId>://<screen_name>)
427
+ // Using deep_link_url allows urlp data elements to extract attribution params (gclid, fbclid, etc.)
428
+ if (pageLoadInfo.deep_link_url) {
429
+ pageLoadInfo.page_url = pageLoadInfo.deep_link_url;
430
+ Logger.logDbg('Setting page_url from deep_link_url:', pageLoadInfo.page_url);
431
+ } else if (this.orgId && pageLoadInfo.page_name) {
432
+ pageLoadInfo.page_url = `v_${this.orgId}://${pageLoadInfo.page_name}`;
433
+ Logger.logDbg('Setting page_url from orgId/page_name:', pageLoadInfo.page_url);
434
+ } else {
435
+ Logger.logDbg('Not setting page_url. No deep_link_url and orgId or page_name is missing. Org Id is: ', this.orgId, 'page_name is: ', pageLoadInfo.page_name);
436
+ }
212
437
  const deviceInfo = DataStore.getDeviceInfo();
213
438
  if (this.customerInfo) {
214
439
  const newPayload = {
215
440
  ...pageLoadInfo,
216
441
  ...this.customerInfo,
217
442
  ...(this.customerIdentifiers ?? {}),
218
- ...Utils.parseQueryParamsToObject(pageLoadInfo === null || pageLoadInfo === void 0 ? void 0 : pageLoadInfo.deep_link_url)
443
+ page_params: Utils.parseQueryParamsToObject(pageLoadInfo === null || pageLoadInfo === void 0 ? void 0 : pageLoadInfo.deep_link_url)
219
444
  };
220
445
  if (deviceInfo) {
221
446
  newPayload.device_info = deviceInfo;
@@ -225,7 +450,7 @@ class MagicPixelImpl {
225
450
  const newPayload = {
226
451
  ...pageLoadInfo,
227
452
  ...(this.customerIdentifiers ?? {}),
228
- ...Utils.parseQueryParamsToObject(pageLoadInfo === null || pageLoadInfo === void 0 ? void 0 : pageLoadInfo.deep_link_url)
453
+ page_params: Utils.parseQueryParamsToObject(pageLoadInfo === null || pageLoadInfo === void 0 ? void 0 : pageLoadInfo.deep_link_url)
229
454
  };
230
455
  if (deviceInfo) {
231
456
  newPayload.device_info = deviceInfo;
@@ -311,7 +536,14 @@ _defineProperty(MagicPixelImpl, "dl", new MpDataLayerHelper('mpDlEvent', 'manual
311
536
  _defineProperty(MagicPixelImpl, "customerInfo", void 0);
312
537
  _defineProperty(MagicPixelImpl, "customerIdentifiers", {});
313
538
  _defineProperty(MagicPixelImpl, "deepLinkUrl", undefined);
539
+ _defineProperty(MagicPixelImpl, "orgId", undefined);
314
540
  _defineProperty(MagicPixelImpl, "firstAppLaunch", true);
541
+ // SDK readiness state and event buffer
542
+ _defineProperty(MagicPixelImpl, "isReady", false);
543
+ _defineProperty(MagicPixelImpl, "isInitializing", false);
544
+ _defineProperty(MagicPixelImpl, "eventBuffer", []);
545
+ _defineProperty(MagicPixelImpl, "onInitFailureCallback", void 0);
315
546
  export const MagicPixelEventBus = EventBus;
316
547
  export const MagicPixel = MagicPixelImpl;
548
+ export { DeepLinkHelper, DeepLinkType } from './common/deeplink-helper';
317
549
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["MpDataLayerHelper","DataStore","Logger","Reporter","DataElementProcessor","TagProcessor","Utils","QcProcessor","NetworkService","EventBus","VisitIdProcessor","GeoLocationProcessor","DL_INIT_EVENT","MagicPixelImpl","init","options","_options$device_type","setLogLevel","logLevel","refreshClientSdkJson","isDataStoreReady","Error","device_type","trim","length","overrideDeviceType","setAppVersion","app_version","orgId","fbp","getFacebookFBP","logDbg","setFacebookClientId","dl","makeGeoLocationApiCall","err","logError","MagicPixelEventBus","on","evtName","payload","JSON","stringify","eventName","eventDataModel","model","eventId","shouldExecuteTMForEvent","enQueueTMFire","checkAndFireTM","isFirstOpen","isFirstOpenAfterInstall","recordEvent","ready","customerInfo","newPayload","customerIdentifiers","pushEvent","getDebugId","isTagManagerProcessing","item","deQueueTMFire","name","dcrName","dcrPayload","runTM","sseOnly","reportError","triggerName","evtId","eventData","setTagManagerProcessing","processDataElements","getSdkDataElements","sdk","getClientSdk","pcKey","getSdkPcKey","pcVal","getDataElementValue","setPrivacyCompliance","getSdkPageLangKey","setDataElement","setPageLang","getOperatingSystem","toLowerCase","initReporter","s","ev","ev_id","getDeviceType","getPageLang","getDeviceOs","getPageName","getClientDownStream","getCoreVersion","validQCList","processQc","getSdkQC","getValidQcInfo","processTags","then","_fireTM","catch","runTMErr","envName","envId","incrementVisitDepth","finally","_fireTMPrivate","hasOneSSTTag","shouldFireSstForEvent","postSST","getDataElements","getSSTDownStream","sleep","setCustomerInfo","setFirebaseAppInstanceId","instanceId","firebase_instance_id","setDeepLinkUrl","deepLinkUrl","setDeviceInfo","deviceInfo","appVersion","_appVersion$trim","recordPageLoad","pageLoadInfo","is_entry","firstAppLaunch","deep_link_url","getDeviceInfo","parseQueryParamsToObject","device_info","undefined","setUserInfo","userInfo","persistData","key","value","clearPersistedData","keys","setDataLayer","data","registerEventProcessor","eventType","processor","registerProcessor","getDataLayer","getDl","getEventState","getState","hasEventHappened","_defineProperty","MagicPixel"],"sources":["index.tsx"],"sourcesContent":["import { MpDataLayerHelper } from './eedl/eedl';\nimport type {\n AppCustomerInfo,\n AppPageLoad,\n MapLike,\n MpDeviceInfo,\n SdkInitOptions,\n} from './common/app-types';\nimport { DataStore } from './common/data-store';\nimport { Logger } from './common/logger';\nimport { Reporter } from './common/reporter';\nimport { DataElementProcessor } from './processors/data-element.processor';\nimport { TagProcessor } from './processors/tag.processor';\nimport { Utils } from './common/utils';\nimport { QcProcessor } from './processors/qc.processor';\nimport { NetworkService } from './common/network-service';\nimport { EventBus } from './common/event-bus';\nimport { VisitIdProcessor } from './processors/visit-id.processor';\nimport { GeoLocationProcessor } from './processors/geo-location.processor';\n\nconst DL_INIT_EVENT = 'page_load';\n\nclass MagicPixelImpl {\n private static dl: MpDataLayerHelper = new MpDataLayerHelper(\n 'mpDlEvent',\n 'manual',\n DL_INIT_EVENT,\n '_mpRnDataLayer'\n );\n private static customerInfo: AppCustomerInfo;\n private static customerIdentifiers: MapLike = {};\n\n private static deepLinkUrl: string | undefined = undefined;\n\n private static firstAppLaunch = true;\n\n static async init(options: SdkInitOptions): Promise<void> {\n Logger.setLogLevel(options.logLevel ?? 'none');\n await NetworkService.refreshClientSdkJson(options);\n\n if (!DataStore.isDataStoreReady()) {\n throw new Error('MagicPixel SDK is not ready. No tags will be processed');\n }\n\n if (\n options &&\n options.device_type &&\n options.device_type?.trim().length > 0\n ) {\n DataStore.overrideDeviceType(options.device_type);\n }\n\n this.setAppVersion(options.app_version);\n\n await VisitIdProcessor.init(options?.orgId);\n\n const fbp = await VisitIdProcessor.getFacebookFBP();\n if (fbp) {\n Logger.logDbg('Setting facebook client id', fbp);\n this.setFacebookClientId(fbp);\n } else {\n Logger.logDbg('No facebook client id found. not setting');\n }\n\n // Initialize EEDL with any global event listeners\n await this.dl.init({});\n\n // Make geo location API call after initialization\n try {\n await GeoLocationProcessor.makeGeoLocationApiCall();\n } catch (err) {\n Logger.logError('Error making geo location API call:', err);\n }\n\n MagicPixelEventBus.on('mpDlEvent', async (evtName, payload) => {\n Logger.logDbg('mpDlEvent:: ', evtName, JSON.stringify(payload));\n const eventName: string = payload.eventName;\n const eventDataModel: MapLike = payload.model ?? {};\n const eventId = eventDataModel['ev._id'];\n\n Logger.logDbg('Tracking Event:: ', eventName, 'with id:: ', eventId);\n\n if (DataStore.shouldExecuteTMForEvent(eventName)) {\n // if this is something the tag manager is interested in - fire tag manager\n DataStore.enQueueTMFire(\n false,\n `custom_event_${eventName}`,\n eventName,\n eventId,\n eventDataModel\n );\n await this.checkAndFireTM();\n }\n });\n\n const isFirstOpen = await VisitIdProcessor.isFirstOpenAfterInstall();\n if (isFirstOpen) {\n Logger.logDbg('First open event fired');\n this.recordEvent('app_first_open', {});\n }\n\n this.ready();\n }\n\n static recordEvent(eventName: string, payload: MapLike): void {\n if (this.customerInfo) {\n const newPayload: MapLike = {\n ...payload,\n ...this.customerInfo,\n ...(this.customerIdentifiers ?? {}),\n };\n this.dl.pushEvent(eventName, newPayload);\n } else {\n const newPayload: MapLike = {\n ...payload,\n ...(this.customerIdentifiers ?? {}),\n };\n this.dl.pushEvent(eventName, newPayload);\n }\n }\n\n static ready(): void {\n this.dl.ready();\n }\n\n static getDebugId(): string {\n return DataStore.getDebugId();\n }\n\n private static async checkAndFireTM(): Promise<void> {\n try {\n if (!DataStore.isTagManagerProcessing()) {\n const item = DataStore.deQueueTMFire();\n if (item) {\n Logger.logDbg(\n 'Executing TM For: ',\n item.name,\n ', Event:: ',\n item.dcrName,\n ', Event id:: ',\n item.eventId,\n 'Payload:: ',\n item.dcrPayload\n );\n await this.runTM(\n item.sseOnly,\n item.name,\n item.dcrName,\n item.eventId,\n item.dcrPayload\n );\n }\n } else {\n Logger.logDbg(\n 'Tag Manager is processing or is not ready. This event will start after that'\n );\n }\n } catch (err) {\n Logger.logError('Error check and process tm', err);\n Reporter.reportError('m:checkAndFireTM', err);\n }\n }\n\n private static async runTM(\n sseOnly: boolean,\n triggerName: string,\n evtName: string,\n evtId: string,\n eventData?: Record<string, any>\n ): Promise<void> {\n try {\n Logger.logDbg(\n 'Running:: ',\n sseOnly,\n triggerName,\n evtName,\n evtId,\n eventData\n );\n\n // set tag manager in process status\n DataStore.setTagManagerProcessing(true);\n\n // process all the data elements and cache them for this run\n await DataElementProcessor.processDataElements(\n DataStore.getSdkDataElements(),\n eventData\n );\n\n const sdk = DataStore.getClientSdk();\n\n const pcKey = DataStore.getSdkPcKey();\n if (pcKey) {\n const pcVal = DataStore.getDataElementValue(pcKey);\n if (typeof pcVal !== 'undefined' && pcVal === true) {\n Logger.logDbg('Set: PR Comp: ', true);\n DataStore.setPrivacyCompliance(true);\n } else {\n Logger.logDbg('Set: PR Comp: ', false);\n DataStore.setPrivacyCompliance(false);\n }\n } else {\n Logger.logDbg('Set: PR Comp: ', false);\n DataStore.setPrivacyCompliance(true);\n }\n\n if (DataStore.getSdkPageLangKey()) {\n DataStore.setDataElement(\n 'page_lang_key',\n DataStore.getSdkPageLangKey()\n );\n DataStore.setPageLang(\n DataStore.getDataElementValue('page_lang_key') as string\n );\n } else {\n DataStore.setDataElement('page_lang_key', null);\n }\n\n //set page_browser default data element with page_os because backend expects this\n DataStore.setDataElement(\n 'page_browser',\n DataStore.getOperatingSystem().toLowerCase()\n );\n\n Reporter.initReporter(\n sdk.s.ev,\n sdk.s.ev_id,\n DataStore.getDeviceType(),\n DataStore.getPageLang(),\n DataStore.getDeviceOs(),\n DataStore.getPageName(),\n evtName,\n evtId,\n DataStore.getClientDownStream(),\n DataStore.getCoreVersion(),\n []\n );\n\n const validQCList = QcProcessor.processQc(\n DataStore.getSdkQC(),\n evtName,\n evtId\n );\n\n if (validQCList?.length > 0) {\n Logger.logDbg('Found Valid QCs to process', DataStore.getValidQcInfo());\n\n TagProcessor.processTags(evtName, evtId)\n .then(() => {\n this._fireTM(sdk.s.ev, sdk.s.ev_id, evtName, evtId);\n })\n .catch((err) => {\n Logger.logError('Error processing tag lists.', err);\n Reporter.reportError('i::processTags', err);\n this._fireTM(sdk.s.ev, sdk.s.ev_id, evtName, evtId);\n });\n } else {\n this._fireTM(sdk.s.ev, sdk.s.ev_id, evtName, evtId);\n }\n } catch (runTMErr) {\n Logger.logError('Error in runTM', runTMErr);\n Reporter.reportError('m::runTM', runTMErr);\n }\n }\n\n private static _fireTM(\n envName: string,\n envId: string,\n evtName: string,\n evtId: string\n ): void {\n // increment visit_depth if event name is page_load because that's the only way we can track page views in an app for now\n if (evtName === DL_INIT_EVENT) {\n VisitIdProcessor.incrementVisitDepth().finally(() => {\n this._fireTMPrivate(envName, envId, evtName, evtId);\n });\n } else {\n this._fireTMPrivate(envName, envId, evtName, evtId);\n }\n }\n\n private static _fireTMPrivate(\n envName: string,\n envId: string,\n evtName: string,\n evtId: string\n ): void {\n if (DataStore.hasOneSSTTag() && DataStore.shouldFireSstForEvent(evtName)) {\n Reporter.postSST(\n DataStore.getDataElements(),\n envName,\n envId,\n DataStore.getSSTDownStream(),\n evtName,\n evtId\n ).catch((err) => {\n Reporter.reportError('l::postSST', err);\n });\n }\n\n DataStore.setTagManagerProcessing(false);\n Utils.sleep(250).then(async () => {\n try {\n await this.checkAndFireTM();\n } catch (err) {\n Reporter.reportError('i::runTM', err);\n }\n });\n }\n\n static setCustomerInfo(customerInfo: AppCustomerInfo): void {\n this.customerInfo = customerInfo;\n this.recordEvent('idl_attribution_link', customerInfo);\n }\n\n static setFirebaseAppInstanceId(instanceId: string): void {\n this.customerIdentifiers.firebase_instance_id = instanceId;\n }\n\n static setDeepLinkUrl(deepLinkUrl: string): void {\n this.deepLinkUrl = deepLinkUrl;\n }\n\n static setDeviceInfo(deviceInfo: MpDeviceInfo): void {\n DataStore.setDeviceInfo(deviceInfo);\n }\n\n static setFacebookClientId(fbp: string): void {\n this.customerIdentifiers.fbp = fbp;\n }\n\n private static setAppVersion(appVersion?: string): void {\n if (appVersion && appVersion?.trim()?.length > 0) {\n this.customerIdentifiers.app_version = appVersion;\n }\n }\n\n static recordPageLoad(pageLoadInfo: AppPageLoad): void {\n pageLoadInfo.is_entry = this.firstAppLaunch ? 1 : 0;\n\n // Use stored deepLinkUrl if it exists AND either:\n // - deep_link_url wasn't provided in pageLoadInfo, OR\n // - deep_link_url is empty/falsy (defensive programming for developer mistakes)\n if (this.deepLinkUrl && !pageLoadInfo.deep_link_url) {\n pageLoadInfo.deep_link_url = this.deepLinkUrl;\n }\n\n const deviceInfo = DataStore.getDeviceInfo();\n\n if (this.customerInfo) {\n const newPayload: MapLike = {\n ...pageLoadInfo,\n ...this.customerInfo,\n ...(this.customerIdentifiers ?? {}),\n ...Utils.parseQueryParamsToObject(pageLoadInfo?.deep_link_url),\n };\n\n if (deviceInfo) {\n newPayload.device_info = deviceInfo;\n }\n\n this.dl.pushEvent('page_load', newPayload);\n } else {\n const newPayload: MapLike = {\n ...pageLoadInfo,\n ...(this.customerIdentifiers ?? {}),\n ...Utils.parseQueryParamsToObject(pageLoadInfo?.deep_link_url),\n };\n\n if (deviceInfo) {\n newPayload.device_info = deviceInfo;\n }\n\n this.dl.pushEvent('page_load', newPayload);\n }\n // only set for first page load event and remove after that\n this.deepLinkUrl = undefined;\n this.firstAppLaunch = false;\n }\n\n /**\n * Set user information for tracking\n * @param userInfo User information object\n */\n static setUserInfo(userInfo: {\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 this.dl.pushEvent('user_info', userInfo);\n }\n\n /**\n * Persist custom data to storage\n * @param key Storage key\n * @param value Value to store\n */\n static persistData(key: string, value: any): void {\n this.dl.pushEvent('persist', { key, value });\n }\n\n /**\n * Clear specific persisted data\n * @param keys Array of keys to clear\n */\n static clearPersistedData(keys: string[]): void {\n this.dl.pushEvent('clear', keys);\n }\n\n /**\n * Set data layer variables\n * @param data Data to set in the data layer\n */\n static setDataLayer(data: MapLike): void {\n this.dl.pushEvent('set', data);\n }\n\n /**\n * Register a custom event processor\n * @param eventType Event type to listen for\n * @param processor Function to process the event\n */\n static registerEventProcessor(\n eventType: string,\n processor: (payload: any) => void\n ): void {\n this.dl.registerProcessor(eventType, processor);\n }\n\n /**\n * Get current data layer state\n * @returns Current data layer object\n */\n static getDataLayer(): MapLike {\n return this.dl.getDl();\n }\n\n /**\n * Get event state tracker\n * @returns Array of all tracked events\n */\n static getEventState(): any[] {\n return this.dl.getState();\n }\n\n /**\n * Check if a specific event has happened\n * @param eventName Event name to check\n * @returns True if event has occurred\n */\n static hasEventHappened(eventName: string): boolean {\n return this.dl.hasEventHappened(eventName);\n }\n}\n\nexport const MagicPixelEventBus = EventBus;\nexport const MagicPixel = MagicPixelImpl;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["MpDataLayerHelper","DataStore","Logger","Reporter","DataElementProcessor","TagProcessor","Utils","QcProcessor","NetworkService","EventBus","VisitIdProcessor","GeoLocationProcessor","DeviceInfoHelper","DeepLinkHelper","StorageHelper","DL_INIT_EVENT","MAX_BUFFERED_EVENTS","MagicPixelImpl","init","options","isReady","logDbg","isInitializing","setLogLevel","logLevel","orgId","onInitFailureCallback","onInitFailure","initAsync","catch","err","logError","reportError","error","Error","String","shutdown","cleanup","clearAll","clearSessionStore","eventBuffer","undefined","customerInfo","customerIdentifiers","deepLinkUrl","firstAppLaunch","dl","refreshClientSdkJson","isDataStoreReady","initialize","autoDetectedInfo","getAppInfo","detectedDeviceType","is_tablet","overrideDeviceType","setAppVersion","app_version","setDeviceInfo","fbp","getFacebookFBP","setFacebookClientId","initialDeepLink","url","linkType","setDeepLinkUrl","recordEvent","deep_link_url","link_type","eventDeduplicationWindowMs","setDeduplicationWindow","makeGeoLocationApiCall","MagicPixelEventBus","on","evtName","payload","JSON","stringify","eventName","eventDataModel","model","eventId","shouldExecuteTMForEvent","runTM","isFirstOpen","isFirstOpenAfterInstall","ready","flushEventBuffer","length","evicted","shift","type","name","push","data","processRecordEvent","newPayload","pushEvent","event","page_name","processRecordPageLoad","getDebugId","sseOnly","triggerName","evtId","eventData","processDataElements","getSdkDataElements","sdk","getClientSdk","pcKey","getSdkPcKey","pcVal","getDataElementValue","setPrivacyCompliance","getSdkPageLangKey","setDataElement","setPageLang","getOperatingSystem","toLowerCase","initReporter","s","ev","ev_id","getDeviceType","getPageLang","getDeviceOs","getPageName","getClientDownStream","getCoreVersion","validQCList","processQc","getSdkQC","getValidQcInfo","processTags","then","_fireTM","runTMErr","envName","envId","incrementVisitDepth","_fireTMPrivate","hasOneSSTTag","shouldFireSstForEvent","postSST","getDataElements","getSSTDownStream","setCustomerInfo","setFirebaseAppInstanceId","instanceId","firebase_instance_id","customFields","deviceInfo","os_version","device_model_name","package_name","allowedCustomFields","Object","assign","keys","appVersion","_appVersion$trim","trim","recordPageLoad","pageLoadInfo","retryVisitorIdIfNeeded","is_entry","page_url","getDeviceInfo","page_params","parseQueryParamsToObject","device_info","setUserInfo","userInfo","persistData","key","value","clearPersistedData","setDataLayer","registerEventProcessor","eventType","processor","registerProcessor","getDataLayer","getDl","getEventState","getState","hasEventHappened","_defineProperty","MagicPixel","DeepLinkType"],"sources":["index.tsx"],"sourcesContent":["// Polyfill for crypto.getRandomValues() required by ULID\nimport 'react-native-get-random-values';\n\nimport { MpDataLayerHelper } from './eedl/eedl';\nimport type {\n AppCustomerInfo,\n AppPageLoad,\n MapLike,\n MpDeviceInfo,\n SdkInitOptions,\n} from './common/app-types';\nimport { DataStore } from './common/data-store';\nimport { Logger } from './common/logger';\nimport { Reporter } from './common/reporter';\nimport { DataElementProcessor } from './processors/data-element.processor';\nimport { TagProcessor } from './processors/tag.processor';\nimport { Utils } from './common/utils';\nimport { QcProcessor } from './processors/qc.processor';\nimport { NetworkService } from './common/network-service';\nimport { EventBus } from './common/event-bus';\nimport { VisitIdProcessor } from './processors/visit-id.processor';\nimport { GeoLocationProcessor } from './processors/geo-location.processor';\nimport { DeviceInfoHelper } from './common/device-info-helper';\nimport { DeepLinkHelper } from './common/deeplink-helper';\nimport { StorageHelper } from './common/storage-helper';\n\nconst DL_INIT_EVENT = 'page_load';\n\n// Maximum number of events to buffer before SDK is ready\nconst MAX_BUFFERED_EVENTS = 500;\n\n// Type for buffered events\ninterface BufferedEvent {\n type: 'pageLoad' | 'event';\n name?: string; // event name for recordEvent\n data: any;\n}\n\nclass MagicPixelImpl {\n private static dl: MpDataLayerHelper = new MpDataLayerHelper(\n 'mpDlEvent',\n 'manual',\n DL_INIT_EVENT,\n '_mpRnDataLayer'\n );\n private static customerInfo: AppCustomerInfo;\n private static customerIdentifiers: MapLike = {};\n\n private static deepLinkUrl: string | undefined = undefined;\n private static orgId: string | undefined = undefined;\n\n private static firstAppLaunch = true;\n\n // SDK readiness state and event buffer\n private static isReady = false;\n private static isInitializing = false;\n private static eventBuffer: BufferedEvent[] = [];\n private static onInitFailureCallback: ((error: Error) => void) | undefined;\n\n /**\n * Initialize the MagicPixel SDK\n * This method is synchronous - it stores config immediately and runs async setup in background\n * Events called before async setup completes are buffered and processed once ready\n * @param options SDK initialization options\n */\n static init(options: SdkInitOptions): void {\n // Guard against multiple init() calls\n if (this.isReady) {\n Logger.logDbg(\n 'MagicPixel SDK already initialized. Ignoring duplicate init() call.'\n );\n return;\n }\n\n if (this.isInitializing) {\n Logger.logDbg(\n 'MagicPixel SDK initialization in progress. Ignoring duplicate init() call.'\n );\n return;\n }\n\n this.isInitializing = true;\n\n // Sync setup - happens immediately\n Logger.setLogLevel(options.logLevel ?? 'none');\n this.orgId = options.orgId;\n this.onInitFailureCallback = options.onInitFailure;\n\n Logger.logDbg('MagicPixel SDK init started');\n\n // Async setup - runs in background, events are buffered until complete\n this.initAsync(options).catch((err) => {\n Logger.logError('MagicPixel SDK initialization failed:', err);\n Reporter.reportError('sdk_init', err);\n\n // Reset initializing flag so developer can retry if needed\n this.isInitializing = false;\n\n // Call failure callback if provided\n if (this.onInitFailureCallback) {\n const error = err instanceof Error ? err : new Error(String(err));\n this.onInitFailureCallback(error);\n }\n });\n }\n\n /**\n * Shutdown the SDK and release all resources\n * Call this when the app is closing or when you need to reinitialize the SDK\n * After shutdown, you must call init() again to use the SDK\n */\n static shutdown(): void {\n Logger.logDbg('MagicPixel SDK shutting down...');\n\n // Clean up deeplink listener and callback\n DeepLinkHelper.cleanup();\n\n // Clear all EventBus listeners to prevent duplicates on reinit\n EventBus.clearAll();\n\n // Clear session-scoped data element values (in-memory store)\n StorageHelper.clearSessionStore();\n\n // Clear event buffer\n this.eventBuffer = [];\n\n // Reset state flags\n this.isReady = false;\n this.isInitializing = false;\n this.onInitFailureCallback = undefined;\n\n // Reset customer data\n this.customerInfo = undefined as any;\n this.customerIdentifiers = {};\n this.deepLinkUrl = undefined;\n this.firstAppLaunch = true;\n\n // Shutdown EEDL\n this.dl.shutdown();\n\n Logger.logDbg('MagicPixel SDK shutdown complete');\n }\n\n /**\n * Async initialization - runs in background\n */\n private static async initAsync(options: SdkInitOptions): Promise<void> {\n await NetworkService.refreshClientSdkJson(options);\n\n if (!DataStore.isDataStoreReady()) {\n throw new Error(\n 'MagicPixel SDK: DataStore not ready after config fetch. Initialization failed.'\n );\n }\n\n // Initialize StorageHelper for data element storage duration\n // This loads visitor-scoped values from AsyncStorage and clears expired ones (>30 days)\n await StorageHelper.initialize();\n\n // Auto-detect device info - always use detected values to prevent hardcoded values\n const autoDetectedInfo = await DeviceInfoHelper.getAppInfo();\n Logger.logDbg('Auto-detected device info:', autoDetectedInfo);\n\n // Set device type from auto-detection (Expo/react-native-device-info)\n // This is more reliable than dimension-based detection which fails on high-res phones\n const detectedDeviceType = autoDetectedInfo.is_tablet ? 'tablet' : 'mobile';\n DataStore.overrideDeviceType(detectedDeviceType);\n Logger.logDbg('Device type set from auto-detection:', detectedDeviceType);\n\n // Always use auto-detected app_version (ignore options.app_version)\n this.setAppVersion(autoDetectedInfo.app_version);\n\n // Set device info with auto-detected values (cannot be overridden)\n await this.setDeviceInfo();\n\n await VisitIdProcessor.init(options?.orgId);\n\n const fbp = await VisitIdProcessor.getFacebookFBP();\n if (fbp) {\n Logger.logDbg('Setting facebook client id', fbp);\n this.setFacebookClientId(fbp);\n } else {\n Logger.logDbg('No facebook client id found. not setting');\n }\n\n // Auto-detect deeplink if app was opened via deeplink (e.g., ad click)\n // Supports: custom schemes (myapp://), universal links (https://), app links, HTTP links\n const initialDeepLink = await DeepLinkHelper.initialize((url, linkType) => {\n try {\n Logger.logDbg(`Deeplink detected (${linkType}):`, url);\n\n // Store deeplink URL - will be attached to next page_load event\n this.setDeepLinkUrl(url);\n\n // Fire deeplink opened event\n // URL params will be parsed and attached to page_load event automatically\n this.recordEvent('deeplink_opened', {\n deep_link_url: url,\n link_type: linkType,\n });\n } catch (err) {\n Logger.logError('Error processing deeplink:', err);\n Reporter.reportError('deeplink_callback', err);\n }\n });\n\n if (initialDeepLink) {\n Logger.logDbg('App opened with initial deeplink:', initialDeepLink);\n }\n\n // Initialize EEDL with any global event listeners\n await this.dl.init({});\n\n // Set event deduplication window if specified (default is 5000ms)\n if (typeof options.eventDeduplicationWindowMs !== 'undefined') {\n this.dl.setDeduplicationWindow(options.eventDeduplicationWindowMs);\n }\n\n // Make geo location API call after initialization\n try {\n await GeoLocationProcessor.makeGeoLocationApiCall();\n } catch (err) {\n Logger.logError('Error making geo location API call:', err);\n }\n\n MagicPixelEventBus.on('mpDlEvent', async (evtName, payload) => {\n Logger.logDbg('mpDlEvent:: ', evtName, JSON.stringify(payload));\n const eventName: string = payload.eventName;\n const eventDataModel: MapLike = payload.model ?? {};\n const eventId = eventDataModel['ev._id'];\n\n Logger.logDbg('Tracking Event:: ', eventName, 'with id:: ', eventId);\n\n if (DataStore.shouldExecuteTMForEvent(eventName)) {\n // Call runTM directly - no queuing, EEDL manages sequential processing\n await this.runTM(\n false,\n `custom_event_${eventName}`,\n eventName,\n eventId,\n eventDataModel\n );\n }\n });\n\n const isFirstOpen = await VisitIdProcessor.isFirstOpenAfterInstall();\n if (isFirstOpen) {\n Logger.logDbg('First open event fired');\n this.recordEvent('app_first_open', {});\n }\n\n this.ready();\n\n // Mark SDK as ready and flush any buffered events\n this.isReady = true;\n this.isInitializing = false;\n Logger.logDbg('SDK is ready, flushing event buffer');\n this.flushEventBuffer();\n }\n\n static recordEvent(eventName: string, payload: MapLike): void {\n // Buffer event if SDK is not ready yet\n if (!this.isReady) {\n Logger.logDbg(`SDK not ready, buffering event: ${eventName}`);\n // Evict oldest event if buffer at capacity\n if (this.eventBuffer.length >= MAX_BUFFERED_EVENTS) {\n const evicted = this.eventBuffer.shift();\n Logger.logDbg(\n `Event buffer at capacity (${MAX_BUFFERED_EVENTS}), evicted oldest:`,\n evicted?.type === 'event' ? evicted.name : 'pageLoad'\n );\n }\n this.eventBuffer.push({\n type: 'event',\n name: eventName,\n data: payload,\n });\n return;\n }\n\n this.processRecordEvent(eventName, payload);\n }\n\n private static processRecordEvent(eventName: string, payload: MapLike): void {\n if (this.customerInfo) {\n const newPayload: MapLike = {\n ...payload,\n ...this.customerInfo,\n ...(this.customerIdentifiers ?? {}),\n };\n this.dl.pushEvent(eventName, newPayload);\n } else {\n const newPayload: MapLike = {\n ...payload,\n ...(this.customerIdentifiers ?? {}),\n };\n this.dl.pushEvent(eventName, newPayload);\n }\n }\n\n static ready(): void {\n this.dl.ready();\n }\n\n /**\n * Flush buffered events after SDK is ready\n * Events are processed in the order they were received\n */\n private static flushEventBuffer(): void {\n if (this.eventBuffer.length === 0) {\n Logger.logDbg('No buffered events to flush');\n return;\n }\n\n Logger.logDbg(`Flushing ${this.eventBuffer.length} buffered event(s)`);\n\n // Process all buffered events in order\n while (this.eventBuffer.length > 0) {\n const event = this.eventBuffer.shift()!;\n\n if (event.type === 'pageLoad') {\n Logger.logDbg(`Processing buffered page load: ${event.data.page_name}`);\n this.processRecordPageLoad(event.data);\n } else if (event.type === 'event') {\n Logger.logDbg(`Processing buffered event: ${event.name}`);\n this.processRecordEvent(event.name!, event.data);\n }\n }\n\n Logger.logDbg('Event buffer flushed');\n }\n\n static getDebugId(): string {\n return DataStore.getDebugId();\n }\n\n private static async runTM(\n sseOnly: boolean,\n triggerName: string,\n evtName: string,\n evtId: string,\n eventData?: Record<string, any>\n ): Promise<void> {\n try {\n Logger.logDbg(\n 'Running:: ',\n sseOnly,\n triggerName,\n evtName,\n evtId,\n eventData\n );\n\n // process all the data elements and cache them for this run\n await DataElementProcessor.processDataElements(\n DataStore.getSdkDataElements(),\n eventData\n );\n\n const sdk = DataStore.getClientSdk();\n\n const pcKey = DataStore.getSdkPcKey();\n if (pcKey) {\n const pcVal = DataStore.getDataElementValue(pcKey);\n if (typeof pcVal !== 'undefined' && pcVal === true) {\n Logger.logDbg('Set: PR Comp: ', true);\n DataStore.setPrivacyCompliance(true);\n } else {\n Logger.logDbg('Set: PR Comp: ', false);\n DataStore.setPrivacyCompliance(false);\n }\n } else {\n // No privacy manager configured - default to true (tracking allowed)\n Logger.logDbg(\n 'Set: PR Comp: ',\n true,\n '(no privacy manager configured)'\n );\n DataStore.setPrivacyCompliance(true);\n }\n\n if (DataStore.getSdkPageLangKey()) {\n DataStore.setDataElement(\n 'page_lang_key',\n DataStore.getSdkPageLangKey()\n );\n DataStore.setPageLang(\n DataStore.getDataElementValue('page_lang_key') as string\n );\n } else {\n DataStore.setDataElement('page_lang_key', null);\n }\n\n //set page_browser default data element with page_os because backend expects this\n DataStore.setDataElement(\n 'page_browser',\n DataStore.getOperatingSystem().toLowerCase()\n );\n\n Reporter.initReporter(\n sdk.s.ev,\n sdk.s.ev_id,\n DataStore.getDeviceType(),\n DataStore.getPageLang(),\n DataStore.getDeviceOs(),\n DataStore.getPageName(),\n evtName,\n evtId,\n DataStore.getClientDownStream(),\n DataStore.getCoreVersion(),\n []\n );\n\n const validQCList = QcProcessor.processQc(\n DataStore.getSdkQC(),\n evtName,\n evtId\n );\n\n if (validQCList?.length > 0) {\n Logger.logDbg('Found Valid QCs to process', DataStore.getValidQcInfo());\n\n TagProcessor.processTags(evtName, evtId)\n .then(() => {\n this._fireTM(sdk.s.ev, sdk.s.ev_id, evtName, evtId);\n })\n .catch((err) => {\n Logger.logError('Error processing tag lists.', err);\n Reporter.reportError('i::processTags', err);\n this._fireTM(sdk.s.ev, sdk.s.ev_id, evtName, evtId);\n });\n } else {\n this._fireTM(sdk.s.ev, sdk.s.ev_id, evtName, evtId);\n }\n } catch (runTMErr) {\n Logger.logError('Error in runTM', runTMErr);\n Reporter.reportError('m::runTM', runTMErr);\n }\n }\n\n private static _fireTM(\n envName: string,\n envId: string,\n evtName: string,\n evtId: string\n ): void {\n // increment visit_depth if event name is page_load because that's the only way we can track page views in an app for now\n if (evtName === DL_INIT_EVENT) {\n // Synchronous increment - no race condition possible\n VisitIdProcessor.incrementVisitDepth();\n }\n\n // Continue immediately after sync increment\n this._fireTMPrivate(envName, envId, evtName, evtId);\n }\n\n private static _fireTMPrivate(\n envName: string,\n envId: string,\n evtName: string,\n evtId: string\n ): void {\n if (DataStore.hasOneSSTTag() && DataStore.shouldFireSstForEvent(evtName)) {\n Reporter.postSST(\n DataStore.getDataElements(),\n envName,\n envId,\n DataStore.getSSTDownStream(),\n evtName,\n evtId\n ).catch((err) => {\n Reporter.reportError('l::postSST', err);\n });\n }\n // Note: EEDL handles queue progression via its own .finally() block\n // No need to call processNext() here - it would be redundant\n }\n\n static setCustomerInfo(customerInfo: AppCustomerInfo): void {\n this.customerInfo = customerInfo;\n this.recordEvent('idl_attribution_link', customerInfo);\n }\n\n static setFirebaseAppInstanceId(instanceId: string): void {\n this.customerIdentifiers.firebase_instance_id = instanceId;\n }\n\n static setDeepLinkUrl(deepLinkUrl: string): void {\n this.deepLinkUrl = deepLinkUrl;\n }\n\n /**\n * Set device info with auto-detected values\n * Standard fields (os_version, device_model_name, package_name) are always auto-detected\n * Optional customFields parameter allows adding custom tracking fields only\n * @param customFields Optional custom fields to add (cannot override standard fields)\n */\n static async setDeviceInfo(\n customFields?: Record<string, any>\n ): Promise<void> {\n // Always auto-detect standard device info (cannot be overridden)\n const autoDetectedInfo = await DeviceInfoHelper.getAppInfo();\n\n // Standard fields are always auto-detected to prevent hardcoded values\n const deviceInfo: MpDeviceInfo = {\n os_version: autoDetectedInfo.os_version,\n device_model_name: autoDetectedInfo.device_model_name,\n package_name: autoDetectedInfo.package_name,\n };\n\n // Add any custom fields (if provided)\n if (customFields) {\n // Filter out attempts to override standard fields\n const allowedCustomFields = { ...customFields };\n delete allowedCustomFields.os_version;\n delete allowedCustomFields.device_model_name;\n delete allowedCustomFields.package_name;\n\n Object.assign(deviceInfo, allowedCustomFields);\n\n if (\n Object.keys(allowedCustomFields).length !==\n Object.keys(customFields).length\n ) {\n Logger.logDbg(\n 'Warning: Attempted to override standard device fields. Using auto-detected values instead.'\n );\n }\n }\n\n Logger.logDbg('Setting device info:', deviceInfo);\n DataStore.setDeviceInfo(deviceInfo);\n }\n\n static setFacebookClientId(fbp: string): void {\n this.customerIdentifiers.fbp = fbp;\n }\n\n private static setAppVersion(appVersion?: string): void {\n if (appVersion && appVersion?.trim()?.length > 0) {\n this.customerIdentifiers.app_version = appVersion;\n }\n }\n\n static recordPageLoad(pageLoadInfo: AppPageLoad): void {\n // Buffer page load if SDK is not ready yet\n if (!this.isReady) {\n Logger.logDbg(\n `SDK not ready, buffering page load: ${pageLoadInfo.page_name}`\n );\n // Evict oldest event if buffer at capacity\n if (this.eventBuffer.length >= MAX_BUFFERED_EVENTS) {\n const evicted = this.eventBuffer.shift();\n Logger.logDbg(\n `Event buffer at capacity (${MAX_BUFFERED_EVENTS}), evicted oldest:`,\n evicted?.type === 'event' ? evicted.name : 'pageLoad'\n );\n }\n this.eventBuffer.push({\n type: 'pageLoad',\n data: { ...pageLoadInfo }, // Clone to preserve original data\n });\n return;\n }\n\n this.processRecordPageLoad(pageLoadInfo);\n }\n\n private static processRecordPageLoad(pageLoadInfo: AppPageLoad): void {\n // Retry visitor ID fetch if it failed during init (fire and forget)\n VisitIdProcessor.retryVisitorIdIfNeeded().catch((err) => {\n Logger.logError('Error retrying visitor ID fetch:', err);\n });\n\n pageLoadInfo.is_entry = this.firstAppLaunch ? 1 : 0;\n\n // Use stored deepLinkUrl if it exists AND either:\n // - deep_link_url wasn't provided in pageLoadInfo, OR\n // - deep_link_url is empty/falsy (defensive programming for developer mistakes)\n if (this.deepLinkUrl && !pageLoadInfo.deep_link_url) {\n pageLoadInfo.deep_link_url = this.deepLinkUrl;\n }\n\n // Set page_url for attribution framework\n // Priority: deep_link_url (if present) > constructed URL (v_<orgId>://<screen_name>)\n // Using deep_link_url allows urlp data elements to extract attribution params (gclid, fbclid, etc.)\n if (pageLoadInfo.deep_link_url) {\n pageLoadInfo.page_url = pageLoadInfo.deep_link_url;\n Logger.logDbg(\n 'Setting page_url from deep_link_url:',\n pageLoadInfo.page_url\n );\n } else if (this.orgId && pageLoadInfo.page_name) {\n pageLoadInfo.page_url = `v_${this.orgId}://${pageLoadInfo.page_name}`;\n Logger.logDbg(\n 'Setting page_url from orgId/page_name:',\n pageLoadInfo.page_url\n );\n } else {\n Logger.logDbg(\n 'Not setting page_url. No deep_link_url and orgId or page_name is missing. Org Id is: ',\n this.orgId,\n 'page_name is: ',\n pageLoadInfo.page_name\n );\n }\n\n const deviceInfo = DataStore.getDeviceInfo();\n\n if (this.customerInfo) {\n const newPayload: MapLike = {\n ...pageLoadInfo,\n ...this.customerInfo,\n ...(this.customerIdentifiers ?? {}),\n page_params: Utils.parseQueryParamsToObject(\n pageLoadInfo?.deep_link_url\n ),\n };\n\n if (deviceInfo) {\n newPayload.device_info = deviceInfo;\n }\n\n this.dl.pushEvent('page_load', newPayload);\n } else {\n const newPayload: MapLike = {\n ...pageLoadInfo,\n ...(this.customerIdentifiers ?? {}),\n page_params: Utils.parseQueryParamsToObject(\n pageLoadInfo?.deep_link_url\n ),\n };\n\n if (deviceInfo) {\n newPayload.device_info = deviceInfo;\n }\n\n this.dl.pushEvent('page_load', newPayload);\n }\n // only set for first page load event and remove after that\n this.deepLinkUrl = undefined;\n this.firstAppLaunch = false;\n }\n\n /**\n * Set user information for tracking\n * @param userInfo User information object\n */\n static setUserInfo(userInfo: {\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 this.dl.pushEvent('user_info', userInfo);\n }\n\n /**\n * Persist custom data to storage\n * @param key Storage key\n * @param value Value to store\n */\n static persistData(key: string, value: any): void {\n this.dl.pushEvent('persist', { key, value });\n }\n\n /**\n * Clear specific persisted data\n * @param keys Array of keys to clear\n */\n static clearPersistedData(keys: string[]): void {\n this.dl.pushEvent('clear', keys);\n }\n\n /**\n * Set data layer variables\n * @param data Data to set in the data layer\n */\n static setDataLayer(data: MapLike): void {\n this.dl.pushEvent('set', data);\n }\n\n /**\n * Register a custom event processor\n * @param eventType Event type to listen for\n * @param processor Function to process the event\n */\n static registerEventProcessor(\n eventType: string,\n processor: (payload: any) => void\n ): void {\n this.dl.registerProcessor(eventType, processor);\n }\n\n /**\n * Get current data layer state\n * @returns Current data layer object\n */\n static getDataLayer(): MapLike {\n return this.dl.getDl();\n }\n\n /**\n * Get event state tracker\n * @returns Array of all tracked events\n */\n static getEventState(): any[] {\n return this.dl.getState();\n }\n\n /**\n * Check if a specific event has happened\n * @param eventName Event name to check\n * @returns True if event has occurred\n */\n static hasEventHappened(eventName: string): boolean {\n return this.dl.hasEventHappened(eventName);\n }\n}\n\nexport const MagicPixelEventBus = EventBus;\nexport const MagicPixel = MagicPixelImpl;\nexport { DeepLinkHelper, DeepLinkType } from './common/deeplink-helper';\n"],"mappings":"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","ignoreList":[]}