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

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 (36) hide show
  1. package/lib/commonjs/common/app-types.js.map +1 -1
  2. package/lib/commonjs/common/device-info-helper.js +43 -27
  3. package/lib/commonjs/common/device-info-helper.js.map +1 -1
  4. package/lib/commonjs/common/reporter.js +48 -5
  5. package/lib/commonjs/common/reporter.js.map +1 -1
  6. package/lib/commonjs/common/storage-helper.js.map +1 -1
  7. package/lib/commonjs/common/utils.js +42 -0
  8. package/lib/commonjs/common/utils.js.map +1 -1
  9. package/lib/commonjs/index.js +12 -7
  10. package/lib/commonjs/index.js.map +1 -1
  11. package/lib/commonjs/types/sdk.d.js +2 -0
  12. package/lib/commonjs/types/sdk.d.js.map +1 -0
  13. package/lib/module/common/app-types.js.map +1 -1
  14. package/lib/module/common/device-info-helper.js +43 -27
  15. package/lib/module/common/device-info-helper.js.map +1 -1
  16. package/lib/module/common/reporter.js +48 -5
  17. package/lib/module/common/reporter.js.map +1 -1
  18. package/lib/module/common/storage-helper.js.map +1 -1
  19. package/lib/module/common/utils.js +43 -0
  20. package/lib/module/common/utils.js.map +1 -1
  21. package/lib/module/index.js +12 -7
  22. package/lib/module/index.js.map +1 -1
  23. package/lib/module/types/sdk.d.js +2 -0
  24. package/lib/module/types/sdk.d.js.map +1 -0
  25. package/lib/typescript/src/common/app-types.d.ts +1 -0
  26. package/lib/typescript/src/common/device-info-helper.d.ts +4 -4
  27. package/lib/typescript/src/common/reporter.d.ts +2 -1
  28. package/lib/typescript/src/common/utils.d.ts +18 -0
  29. package/package.json +2 -2
  30. package/src/common/app-types.ts +1 -0
  31. package/src/common/device-info-helper.ts +56 -31
  32. package/src/common/reporter.ts +68 -8
  33. package/src/common/storage-helper.ts +2 -8
  34. package/src/common/utils.ts +43 -0
  35. package/src/index.tsx +15 -7
  36. package/src/types/sdk.d.ts +54 -0
@@ -1 +1 @@
1
- {"version":3,"names":["AsyncStorage","DeStorageDuration","Logger","VISITOR_STORE_KEY","VISITOR_EXPIRY_MS","StorageHelper","initialize","isInitialized","storedData","getItem","visitorStoreCache","JSON","parse","logDbg","Object","keys","length","clearExpiredVisitorData","err","logError","now","Date","keysToRemove","key","entry","timestamp","push","persistVisitorStore","setItem","stringify","isDefined","value","undefined","deStorageDurationSet","deKey","storageDuration","EVENT","SESSION","sessionStore","VISITOR","catch","NONE","deStorageDurationGet","defaultValue","sessionValue","visitorEntry","clearSessionStore","clearVisitorStore","removeItem","_defineProperty"],"sources":["storage-helper.ts"],"sourcesContent":["/**\n * Storage helper for data element storage duration\n * Handles SESSION (in-memory) and VISITOR (AsyncStorage with 30-day expiry) storage\n */\nimport AsyncStorage from '@react-native-async-storage/async-storage';\nimport { DeStorageDuration } from '../models/mp-client-sdk';\nimport { Logger } from './logger';\n\n// AsyncStorage key for visitor-scoped data elements\nconst VISITOR_STORE_KEY = '_mp_de_visitor_store';\n\n// 30 days in milliseconds\nconst VISITOR_EXPIRY_MS = 30 * 24 * 60 * 60 * 1000;\n\n// Interface for stored visitor values (includes timestamp for expiry check)\ninterface StoredVisitorValue {\n value: any;\n timestamp: number;\n}\n\nexport class StorageHelper {\n // In-memory store for SESSION-scoped values (cleared on app restart)\n private static sessionStore: Record<string, any> = {};\n\n // In-memory cache of visitor store (loaded from AsyncStorage on init)\n private static visitorStoreCache: Record<string, StoredVisitorValue> = {};\n\n // Flag to track if initialized\n private static isInitialized = false;\n\n /**\n * Initialize the storage helper\n * Loads visitor store from AsyncStorage and cleans expired values\n * Should be called once during SDK initialization\n */\n static async initialize(): Promise<void> {\n if (this.isInitialized) {\n return;\n }\n\n try {\n // Load visitor store from AsyncStorage\n const storedData = await AsyncStorage.getItem(VISITOR_STORE_KEY);\n if (storedData) {\n this.visitorStoreCache = JSON.parse(storedData);\n Logger.logDbg(\n 'StorageHelper: Loaded visitor store with',\n Object.keys(this.visitorStoreCache).length,\n 'items'\n );\n }\n\n // Clean expired visitor data\n await this.clearExpiredVisitorData();\n\n this.isInitialized = true;\n Logger.logDbg('StorageHelper: Initialized successfully');\n } catch (err) {\n Logger.logError('StorageHelper: Error initializing', err);\n // Reset to empty state on error\n this.visitorStoreCache = {};\n this.isInitialized = true;\n }\n }\n\n /**\n * Clear visitor-scoped values older than 30 days\n */\n static async clearExpiredVisitorData(): Promise<void> {\n try {\n const now = Date.now();\n const keysToRemove: string[] = [];\n\n for (const key of Object.keys(this.visitorStoreCache)) {\n const entry = this.visitorStoreCache[key];\n if (entry && now - entry.timestamp > VISITOR_EXPIRY_MS) {\n keysToRemove.push(key);\n }\n }\n\n if (keysToRemove.length > 0) {\n for (const key of keysToRemove) {\n delete this.visitorStoreCache[key];\n }\n\n // Persist the cleaned store\n await this.persistVisitorStore();\n\n Logger.logDbg(\n 'StorageHelper: Cleared',\n keysToRemove.length,\n 'expired visitor values'\n );\n }\n } catch (err) {\n Logger.logError('StorageHelper: Error clearing expired data', err);\n }\n }\n\n /**\n * Persist the visitor store cache to AsyncStorage\n */\n private static async persistVisitorStore(): Promise<void> {\n try {\n await AsyncStorage.setItem(\n VISITOR_STORE_KEY,\n JSON.stringify(this.visitorStoreCache)\n );\n } catch (err) {\n Logger.logError('StorageHelper: Error persisting visitor store', err);\n }\n }\n\n /**\n * Check if a value is defined (not null, undefined, or empty string)\n */\n private static isDefined(value: any): boolean {\n return value !== null && value !== undefined && value !== '';\n }\n\n /**\n * Store a data element value based on storage duration\n * @param deKey - The data element key\n * @param value - The value to store\n * @param storageDuration - The storage duration type\n */\n static deStorageDurationSet(\n deKey: string,\n value: any,\n storageDuration: DeStorageDuration\n ): void {\n try {\n if (!this.isDefined(deKey) || !this.isDefined(value)) {\n // Key and value are required\n return;\n }\n\n if (!storageDuration) {\n storageDuration = DeStorageDuration.EVENT;\n }\n\n switch (storageDuration) {\n case DeStorageDuration.SESSION:\n // Store in memory (cleared on app restart)\n this.sessionStore[deKey] = value;\n Logger.logDbg(\n 'StorageHelper: Stored SESSION value for',\n deKey\n );\n break;\n\n case DeStorageDuration.VISITOR:\n // Store in AsyncStorage cache with timestamp\n this.visitorStoreCache[deKey] = {\n value: value,\n timestamp: Date.now(),\n };\n // Persist to AsyncStorage in background\n this.persistVisitorStore().catch((err) => {\n Logger.logError(\n 'StorageHelper: Error persisting visitor value',\n err\n );\n });\n Logger.logDbg(\n 'StorageHelper: Stored VISITOR value for',\n deKey\n );\n break;\n\n case DeStorageDuration.EVENT:\n case DeStorageDuration.NONE:\n default:\n // No persistence needed for EVENT or NONE\n break;\n }\n } catch (err) {\n Logger.logError('StorageHelper: Error in deStorageDurationSet', err);\n }\n }\n\n /**\n * Retrieve a data element value based on storage duration\n * @param deKey - The data element key\n * @param defaultValue - Default value if not found\n * @param storageDuration - The storage duration type\n * @returns The stored value or default value\n */\n static deStorageDurationGet(\n deKey: string,\n defaultValue: any,\n storageDuration: DeStorageDuration\n ): any {\n try {\n if (!this.isDefined(deKey)) {\n return defaultValue;\n }\n\n if (!storageDuration) {\n storageDuration = DeStorageDuration.EVENT;\n }\n\n switch (storageDuration) {\n case DeStorageDuration.SESSION: {\n // Get from in-memory session store\n const sessionValue = this.sessionStore[deKey];\n if (this.isDefined(sessionValue)) {\n return sessionValue;\n }\n return defaultValue;\n }\n\n case DeStorageDuration.VISITOR: {\n // Get from visitor store cache\n const visitorEntry = this.visitorStoreCache[deKey];\n if (visitorEntry && this.isDefined(visitorEntry.value)) {\n // Check if not expired\n if (Date.now() - visitorEntry.timestamp <= VISITOR_EXPIRY_MS) {\n return visitorEntry.value;\n } else {\n // Value is expired, remove it\n delete this.visitorStoreCache[deKey];\n this.persistVisitorStore().catch((err) => {\n Logger.logError(\n 'StorageHelper: Error removing expired value',\n err\n );\n });\n }\n }\n return defaultValue;\n }\n\n case DeStorageDuration.EVENT:\n case DeStorageDuration.NONE:\n default:\n // No retrieval for EVENT or NONE\n return defaultValue;\n }\n } catch (err) {\n Logger.logError('StorageHelper: Error in deStorageDurationGet', err);\n return defaultValue;\n }\n }\n\n /**\n * Clear all session-scoped values (called on new session if needed)\n */\n static clearSessionStore(): void {\n this.sessionStore = {};\n Logger.logDbg('StorageHelper: Cleared session store');\n }\n\n /**\n * Clear all visitor-scoped values\n */\n static async clearVisitorStore(): Promise<void> {\n try {\n this.visitorStoreCache = {};\n await AsyncStorage.removeItem(VISITOR_STORE_KEY);\n Logger.logDbg('StorageHelper: Cleared visitor store');\n } catch (err) {\n Logger.logError('StorageHelper: Error clearing visitor store', err);\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["AsyncStorage","DeStorageDuration","Logger","VISITOR_STORE_KEY","VISITOR_EXPIRY_MS","StorageHelper","initialize","isInitialized","storedData","getItem","visitorStoreCache","JSON","parse","logDbg","Object","keys","length","clearExpiredVisitorData","err","logError","now","Date","keysToRemove","key","entry","timestamp","push","persistVisitorStore","setItem","stringify","isDefined","value","undefined","deStorageDurationSet","deKey","storageDuration","EVENT","SESSION","sessionStore","VISITOR","catch","NONE","deStorageDurationGet","defaultValue","sessionValue","visitorEntry","clearSessionStore","clearVisitorStore","removeItem","_defineProperty"],"sources":["storage-helper.ts"],"sourcesContent":["/**\n * Storage helper for data element storage duration\n * Handles SESSION (in-memory) and VISITOR (AsyncStorage with 30-day expiry) storage\n */\nimport AsyncStorage from '@react-native-async-storage/async-storage';\nimport { DeStorageDuration } from '../models/mp-client-sdk';\nimport { Logger } from './logger';\n\n// AsyncStorage key for visitor-scoped data elements\nconst VISITOR_STORE_KEY = '_mp_de_visitor_store';\n\n// 30 days in milliseconds\nconst VISITOR_EXPIRY_MS = 30 * 24 * 60 * 60 * 1000;\n\n// Interface for stored visitor values (includes timestamp for expiry check)\ninterface StoredVisitorValue {\n value: any;\n timestamp: number;\n}\n\nexport class StorageHelper {\n // In-memory store for SESSION-scoped values (cleared on app restart)\n private static sessionStore: Record<string, any> = {};\n\n // In-memory cache of visitor store (loaded from AsyncStorage on init)\n private static visitorStoreCache: Record<string, StoredVisitorValue> = {};\n\n // Flag to track if initialized\n private static isInitialized = false;\n\n /**\n * Initialize the storage helper\n * Loads visitor store from AsyncStorage and cleans expired values\n * Should be called once during SDK initialization\n */\n static async initialize(): Promise<void> {\n if (this.isInitialized) {\n return;\n }\n\n try {\n // Load visitor store from AsyncStorage\n const storedData = await AsyncStorage.getItem(VISITOR_STORE_KEY);\n if (storedData) {\n this.visitorStoreCache = JSON.parse(storedData);\n Logger.logDbg(\n 'StorageHelper: Loaded visitor store with',\n Object.keys(this.visitorStoreCache).length,\n 'items'\n );\n }\n\n // Clean expired visitor data\n await this.clearExpiredVisitorData();\n\n this.isInitialized = true;\n Logger.logDbg('StorageHelper: Initialized successfully');\n } catch (err) {\n Logger.logError('StorageHelper: Error initializing', err);\n // Reset to empty state on error\n this.visitorStoreCache = {};\n this.isInitialized = true;\n }\n }\n\n /**\n * Clear visitor-scoped values older than 30 days\n */\n static async clearExpiredVisitorData(): Promise<void> {\n try {\n const now = Date.now();\n const keysToRemove: string[] = [];\n\n for (const key of Object.keys(this.visitorStoreCache)) {\n const entry = this.visitorStoreCache[key];\n if (entry && now - entry.timestamp > VISITOR_EXPIRY_MS) {\n keysToRemove.push(key);\n }\n }\n\n if (keysToRemove.length > 0) {\n for (const key of keysToRemove) {\n delete this.visitorStoreCache[key];\n }\n\n // Persist the cleaned store\n await this.persistVisitorStore();\n\n Logger.logDbg(\n 'StorageHelper: Cleared',\n keysToRemove.length,\n 'expired visitor values'\n );\n }\n } catch (err) {\n Logger.logError('StorageHelper: Error clearing expired data', err);\n }\n }\n\n /**\n * Persist the visitor store cache to AsyncStorage\n */\n private static async persistVisitorStore(): Promise<void> {\n try {\n await AsyncStorage.setItem(\n VISITOR_STORE_KEY,\n JSON.stringify(this.visitorStoreCache)\n );\n } catch (err) {\n Logger.logError('StorageHelper: Error persisting visitor store', err);\n }\n }\n\n /**\n * Check if a value is defined (not null, undefined, or empty string)\n */\n private static isDefined(value: any): boolean {\n return value !== null && value !== undefined && value !== '';\n }\n\n /**\n * Store a data element value based on storage duration\n * @param deKey - The data element key\n * @param value - The value to store\n * @param storageDuration - The storage duration type\n */\n static deStorageDurationSet(\n deKey: string,\n value: any,\n storageDuration: DeStorageDuration\n ): void {\n try {\n if (!this.isDefined(deKey) || !this.isDefined(value)) {\n // Key and value are required\n return;\n }\n\n if (!storageDuration) {\n storageDuration = DeStorageDuration.EVENT;\n }\n\n switch (storageDuration) {\n case DeStorageDuration.SESSION:\n // Store in memory (cleared on app restart)\n this.sessionStore[deKey] = value;\n Logger.logDbg('StorageHelper: Stored SESSION value for', deKey);\n break;\n\n case DeStorageDuration.VISITOR:\n // Store in AsyncStorage cache with timestamp\n this.visitorStoreCache[deKey] = {\n value: value,\n timestamp: Date.now(),\n };\n // Persist to AsyncStorage in background\n this.persistVisitorStore().catch((err) => {\n Logger.logError(\n 'StorageHelper: Error persisting visitor value',\n err\n );\n });\n Logger.logDbg('StorageHelper: Stored VISITOR value for', deKey);\n break;\n\n case DeStorageDuration.EVENT:\n case DeStorageDuration.NONE:\n default:\n // No persistence needed for EVENT or NONE\n break;\n }\n } catch (err) {\n Logger.logError('StorageHelper: Error in deStorageDurationSet', err);\n }\n }\n\n /**\n * Retrieve a data element value based on storage duration\n * @param deKey - The data element key\n * @param defaultValue - Default value if not found\n * @param storageDuration - The storage duration type\n * @returns The stored value or default value\n */\n static deStorageDurationGet(\n deKey: string,\n defaultValue: any,\n storageDuration: DeStorageDuration\n ): any {\n try {\n if (!this.isDefined(deKey)) {\n return defaultValue;\n }\n\n if (!storageDuration) {\n storageDuration = DeStorageDuration.EVENT;\n }\n\n switch (storageDuration) {\n case DeStorageDuration.SESSION: {\n // Get from in-memory session store\n const sessionValue = this.sessionStore[deKey];\n if (this.isDefined(sessionValue)) {\n return sessionValue;\n }\n return defaultValue;\n }\n\n case DeStorageDuration.VISITOR: {\n // Get from visitor store cache\n const visitorEntry = this.visitorStoreCache[deKey];\n if (visitorEntry && this.isDefined(visitorEntry.value)) {\n // Check if not expired\n if (Date.now() - visitorEntry.timestamp <= VISITOR_EXPIRY_MS) {\n return visitorEntry.value;\n } else {\n // Value is expired, remove it\n delete this.visitorStoreCache[deKey];\n this.persistVisitorStore().catch((err) => {\n Logger.logError(\n 'StorageHelper: Error removing expired value',\n err\n );\n });\n }\n }\n return defaultValue;\n }\n\n case DeStorageDuration.EVENT:\n case DeStorageDuration.NONE:\n default:\n // No retrieval for EVENT or NONE\n return defaultValue;\n }\n } catch (err) {\n Logger.logError('StorageHelper: Error in deStorageDurationGet', err);\n return defaultValue;\n }\n }\n\n /**\n * Clear all session-scoped values (called on new session if needed)\n */\n static clearSessionStore(): void {\n this.sessionStore = {};\n Logger.logDbg('StorageHelper: Cleared session store');\n }\n\n /**\n * Clear all visitor-scoped values\n */\n static async clearVisitorStore(): Promise<void> {\n try {\n this.visitorStoreCache = {};\n await AsyncStorage.removeItem(VISITOR_STORE_KEY);\n Logger.logDbg('StorageHelper: Cleared visitor store');\n } catch (err) {\n Logger.logError('StorageHelper: Error clearing visitor store', err);\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -6,6 +6,9 @@ import { Dimensions } from 'react-native';
6
6
  import { URL } from 'react-native-url-polyfill';
7
7
  import AsyncStorage from '@react-native-async-storage/async-storage';
8
8
  import { ulid } from 'ulid';
9
+
10
+ /** Maximum payload size in bytes (250KB) to prevent DoS attacks */
11
+ const MAX_PAYLOAD_SIZE_BYTES = 250 * 1024;
9
12
  export class Utils {
10
13
  static triggerEvent(eventName, payload) {
11
14
  EventBus.triggerEvent(eventName, payload);
@@ -177,6 +180,46 @@ export class Utils {
177
180
  return str; // Return original value if encoding fails
178
181
  }
179
182
  }
183
+
184
+ /**
185
+ * Encode an object payload to Base64 string
186
+ * @param payload Object to encode
187
+ * @returns Base64 encoded string, or empty string on error
188
+ */
189
+ static encodeToBase64(payload) {
190
+ try {
191
+ const jsonStr = JSON.stringify(payload);
192
+ return this.toBase64(jsonStr);
193
+ } catch (err) {
194
+ Logger.logError('Error encoding payload to Base64:', err);
195
+ return '';
196
+ }
197
+ }
198
+
199
+ /**
200
+ * Get the size of a payload in bytes
201
+ * @param payload Object to measure
202
+ * @returns Size in bytes
203
+ */
204
+ static getPayloadSizeBytes(payload) {
205
+ try {
206
+ const jsonStr = JSON.stringify(payload);
207
+ // Use TextEncoder for accurate byte count (handles UTF-8)
208
+ return new TextEncoder().encode(jsonStr).length;
209
+ } catch (err) {
210
+ Logger.logError('Error calculating payload size:', err);
211
+ return 0;
212
+ }
213
+ }
214
+
215
+ /**
216
+ * Check if payload exceeds the maximum allowed size (250KB)
217
+ * @param payload Object to check
218
+ * @returns True if payload is oversized
219
+ */
220
+ static isPayloadOversized(payload) {
221
+ return this.getPayloadSizeBytes(payload) > MAX_PAYLOAD_SIZE_BYTES;
222
+ }
180
223
  static getUniqueID() {
181
224
  return ulid();
182
225
  }
@@ -1 +1 @@
1
- {"version":3,"names":["Constants","Logger","flatten","unflatten","EventBus","Dimensions","URL","AsyncStorage","ulid","Utils","triggerEvent","eventName","payload","calculateMsp","dim","limit","scale","width","height","_makeUniqueStringArray","input","Set","parseQueryParamsToObject","url","op","trim","length","urlObject","searchParams","forEach","value","name","err","logError","isTablet","get","sleep","delay","Promise","resolve","setTimeout","dtToNum","deviceType","bwToNum","browser","langToNum","language","mergeMaps","toMerge","mapObject","Object","keys","key","applyTransformationResourceParam","paramValue","tf","tfItem","nm","eTyp","encodeURIComponent","toBase64","isMatch","toTest","inputs","ignoreCase","fullMatch","isMatched","i","_val","convertToRegex","test","regExpEscape","replace","RegExp","split","map","join","safeExecute","fn","str","btoa","unescape","getUniqueID","getHttp","response","fetch","method","headers","ok","Error","status","json","error","getValueFromAsyncStorage","defaultValue","getItem","JSON","parse","setValueToAsyncStorage","setItem","stringify","getSimpleDebugId","prefix","randomNumber","min","max","Math","ceil","random","unFlattenResourceParams","transformMap","item","pId","children","id","push","values","sort","sortAscending","unFlattenObject","obj","object","delimiter","flattenObject","maxDepth","safe"],"sources":["utils.ts"],"sourcesContent":["import { Constants } from './constants';\nimport { Logger } from './logger';\nimport type {\n BaseResourceParamType,\n SdkParamEncodingTransformer,\n TFType,\n} from '../models/mp-client-sdk';\nimport type { MapLike } from './app-types';\nimport { flatten, unflatten } from 'flat';\nimport { EventBus } from './event-bus';\nimport { Dimensions, ScaledSize } from 'react-native';\nimport { URL } from 'react-native-url-polyfill';\nimport AsyncStorage from '@react-native-async-storage/async-storage';\nimport { ulid } from 'ulid';\n\nexport class Utils {\n static triggerEvent(eventName: string, payload: any): void {\n EventBus.triggerEvent(eventName, payload);\n }\n\n static calculateMsp(dim: ScaledSize, limit: number): boolean {\n return dim.scale * dim.width >= limit || dim.scale * dim.height >= limit;\n }\n\n static _makeUniqueStringArray(input: string[]): string[] {\n return [...new Set(input)];\n }\n\n static parseQueryParamsToObject(url?: string): Record<string, any> {\n const op: Record<string, any> = {};\n try {\n if (url && url?.trim().length > 0) {\n const urlObject = new URL(url);\n urlObject.searchParams.forEach((value, name) => {\n op[name] = value;\n });\n }\n } catch (err) {\n // TODO: Report error\n Logger.logError('Unable to parse query params', err);\n }\n return op;\n }\n\n static isTablet(): boolean {\n const dim = Dimensions.get('screen');\n return (\n (dim.scale < 2 && this.calculateMsp(dim, 1000)) ||\n (dim.scale >= 2 && this.calculateMsp(dim, 1900))\n );\n }\n\n static sleep(delay = 1000): Promise<void> {\n return new Promise((resolve: (val?: any) => void) => {\n setTimeout(() => {\n return resolve();\n }, delay);\n });\n }\n\n /**\n * deviceTypesMappings = {'1':'Desktop Web','2':'Mobile Web','3':'Tablet','4':'Other'};\n * @param deviceType\n */\n static dtToNum(deviceType: string): number {\n switch (deviceType) {\n case 'desktop':\n return 1;\n case 'mobile':\n return 2;\n case 'tablet':\n return 3;\n default:\n return 4;\n }\n }\n\n /**\n * static browserToOsMappings = {'101': 'ios','102': 'android', '7': 'Other'};\n * @param browser\n */\n static bwToNum(browser: string): number {\n switch (browser) {\n case 'ios':\n return 101;\n case 'android':\n return 102;\n default:\n return 7;\n }\n }\n\n static langToNum(language: string): number {\n if (language === 'en') {\n return 1;\n } else if (language === 'es') {\n return 2;\n } else {\n return 3;\n }\n }\n\n static mergeMaps<T>(\n input: MapLike<T>,\n ...toMerge: Array<MapLike<T>>\n ): MapLike<T> {\n if (!input) {\n input = {} as MapLike<T>;\n }\n for (const mapObject of toMerge) {\n if (mapObject) {\n Object.keys(mapObject).forEach((key: string) => {\n input[key] = mapObject[key];\n });\n }\n }\n return input;\n }\n\n static applyTransformationResourceParam(\n paramValue: string,\n tf: TFType | undefined\n ): any {\n if (!tf || tf.length === 0) {\n return paramValue;\n }\n\n if (typeof paramValue === 'undefined') {\n return paramValue;\n }\n\n // transformers here are expected to be ordered when we get it from the server after build\n for (let tfItem of tf) {\n if (tfItem.nm === 'enc') {\n // only url encode is implemented now\n tfItem = tfItem as SdkParamEncodingTransformer;\n if (tfItem.eTyp === 'URL_ENC') {\n paramValue = encodeURIComponent(paramValue);\n } else if (tfItem.eTyp === 'BASE64') {\n paramValue = this.toBase64(paramValue);\n }\n }\n }\n\n return paramValue;\n }\n\n /**\n * Verifies if the given 'toTest' string exists in any of the input array of strings.\n * By default, this method does a case sensitive match unless specified by the ignoreCase param.\n * @param toTest\n * @param inputs\n * @param ignoreCase - pass a value of 'true' to perform case-insensitive matching.\n * @param fullMatch\n */\n static isMatch(\n toTest: string,\n inputs: string[],\n ignoreCase: boolean,\n fullMatch: boolean\n ): boolean {\n if (!toTest) {\n return false;\n }\n let isMatched = false;\n for (let i = 0; i < inputs.length; i += 1) {\n const _val = inputs[i];\n if (_val) {\n if (this.convertToRegex(_val, ignoreCase, fullMatch).test(toTest)) {\n isMatched = true;\n break;\n }\n }\n }\n return isMatched;\n }\n\n static regExpEscape(input: string): string {\n return input.replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&');\n }\n\n static convertToRegex(\n input: string,\n ignoreCase: boolean,\n fullMatch: boolean\n ): RegExp {\n if (fullMatch) {\n return new RegExp(\n '^' + input.split(/\\*+/).map(this.regExpEscape).join('.*') + '$',\n ignoreCase ? 'i' : ''\n );\n } else {\n return new RegExp(\n input.split(/\\*+/).map(this.regExpEscape).join('.*'),\n ignoreCase ? 'i' : ''\n );\n }\n }\n\n static safeExecute(fn: (payload: any) => any, payload: any): any {\n try {\n return fn(payload);\n } catch (err) {\n Logger.logError('Error executing function: ', err);\n }\n }\n\n /**\n * Encode string to Base64 - React Native compatible\n * Works with both ASCII and UTF-8 strings\n * @param str String to encode\n * @returns Base64 encoded string\n */\n static toBase64(str: string): string {\n try {\n // Handle UTF-8 strings properly using encodeURIComponent + unescape trick\n // This works in all JavaScript engines including React Native's Hermes/JSC\n return btoa(unescape(encodeURIComponent(str)));\n } catch (err) {\n Logger.logError('Error encoding to Base64:', err);\n return str; // Return original value if encoding fails\n }\n }\n\n static getUniqueID(): string {\n return ulid();\n }\n\n /**\n * Make HTTP GET request - React Native implementation\n * @param url URL to fetch\n * @returns Promise with response data\n */\n static async getHttp<T>(url: string): Promise<T> {\n try {\n const response = await fetch(url, {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n\n return await response.json();\n } catch (error) {\n Logger.logError('HTTP GET request failed:', error);\n throw error;\n }\n }\n\n /**\n * Get value from AsyncStorage (React Native equivalent of sessionStorage)\n * @param key Storage key\n * @param defaultValue Default value if key not found\n * @returns Promise with stored value or default\n */\n static async getValueFromAsyncStorage<T>(\n key: string,\n defaultValue: T\n ): Promise<T> {\n try {\n const value = await AsyncStorage.getItem(key);\n return value ? JSON.parse(value) : defaultValue;\n } catch (error) {\n Logger.logError('Error getting value from AsyncStorage:', error);\n return defaultValue;\n }\n }\n\n /**\n * Set value to AsyncStorage (React Native equivalent of sessionStorage)\n * @param key Storage key\n * @param value Value to store\n */\n static async setValueToAsyncStorage(key: string, value: any): Promise<void> {\n try {\n await AsyncStorage.setItem(key, JSON.stringify(value));\n } catch (error) {\n Logger.logError('Error setting value to AsyncStorage:', error);\n }\n }\n\n static getSimpleDebugId(prefix?: string): string {\n return `${prefix ?? ''}${this.randomNumber(100000000, 99999999999)}`;\n }\n\n static randomNumber(min: number, max: number): number {\n return Math.ceil(Math.random() * (max - min) + min);\n }\n\n static unFlattenResourceParams<T extends BaseResourceParamType>(\n input: T[]\n ): MapLike<T> {\n if (!input || input.length === 0) {\n return {};\n }\n\n const transformMap: MapLike<T> = {};\n const op: MapLike<T> = {};\n // convert input into a map for quick search O(1)\n for (const item of input) {\n if (item.pId) {\n if (!transformMap[item.pId]) {\n item.children = [];\n transformMap[item.id] = item;\n } else {\n transformMap[item.pId].children.push(item);\n }\n } else {\n item.children = [];\n transformMap[item.id] = item;\n }\n }\n\n // sort children according to child_order inside children if they have any children\n for (const item of Object.values(transformMap)) {\n if (item.children && item.children.length > 0) {\n item.children = item.children.sort(Constants.sortAscending);\n op[item.nm] = item;\n } else {\n op[item.nm] = item;\n }\n }\n\n return op;\n }\n\n static unFlattenObject(obj: any): Record<string, any> {\n if (!obj) {\n return {};\n }\n return unflatten(obj, { object: false, delimiter: '.' });\n }\n\n static flattenObject(obj: any): Record<string, any> {\n if (!obj) {\n return {};\n }\n return flatten(obj, { maxDepth: 5, safe: true });\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["Constants","Logger","flatten","unflatten","EventBus","Dimensions","URL","AsyncStorage","ulid","MAX_PAYLOAD_SIZE_BYTES","Utils","triggerEvent","eventName","payload","calculateMsp","dim","limit","scale","width","height","_makeUniqueStringArray","input","Set","parseQueryParamsToObject","url","op","trim","length","urlObject","searchParams","forEach","value","name","err","logError","isTablet","get","sleep","delay","Promise","resolve","setTimeout","dtToNum","deviceType","bwToNum","browser","langToNum","language","mergeMaps","toMerge","mapObject","Object","keys","key","applyTransformationResourceParam","paramValue","tf","tfItem","nm","eTyp","encodeURIComponent","toBase64","isMatch","toTest","inputs","ignoreCase","fullMatch","isMatched","i","_val","convertToRegex","test","regExpEscape","replace","RegExp","split","map","join","safeExecute","fn","str","btoa","unescape","encodeToBase64","jsonStr","JSON","stringify","getPayloadSizeBytes","TextEncoder","encode","isPayloadOversized","getUniqueID","getHttp","response","fetch","method","headers","ok","Error","status","json","error","getValueFromAsyncStorage","defaultValue","getItem","parse","setValueToAsyncStorage","setItem","getSimpleDebugId","prefix","randomNumber","min","max","Math","ceil","random","unFlattenResourceParams","transformMap","item","pId","children","id","push","values","sort","sortAscending","unFlattenObject","obj","object","delimiter","flattenObject","maxDepth","safe"],"sources":["utils.ts"],"sourcesContent":["import { Constants } from './constants';\nimport { Logger } from './logger';\nimport type {\n BaseResourceParamType,\n SdkParamEncodingTransformer,\n TFType,\n} from '../models/mp-client-sdk';\nimport type { MapLike } from './app-types';\nimport { flatten, unflatten } from 'flat';\nimport { EventBus } from './event-bus';\nimport { Dimensions, ScaledSize } from 'react-native';\nimport { URL } from 'react-native-url-polyfill';\nimport AsyncStorage from '@react-native-async-storage/async-storage';\nimport { ulid } from 'ulid';\n\n/** Maximum payload size in bytes (250KB) to prevent DoS attacks */\nconst MAX_PAYLOAD_SIZE_BYTES = 250 * 1024;\n\nexport class Utils {\n static triggerEvent(eventName: string, payload: any): void {\n EventBus.triggerEvent(eventName, payload);\n }\n\n static calculateMsp(dim: ScaledSize, limit: number): boolean {\n return dim.scale * dim.width >= limit || dim.scale * dim.height >= limit;\n }\n\n static _makeUniqueStringArray(input: string[]): string[] {\n return [...new Set(input)];\n }\n\n static parseQueryParamsToObject(url?: string): Record<string, any> {\n const op: Record<string, any> = {};\n try {\n if (url && url?.trim().length > 0) {\n const urlObject = new URL(url);\n urlObject.searchParams.forEach((value, name) => {\n op[name] = value;\n });\n }\n } catch (err) {\n // TODO: Report error\n Logger.logError('Unable to parse query params', err);\n }\n return op;\n }\n\n static isTablet(): boolean {\n const dim = Dimensions.get('screen');\n return (\n (dim.scale < 2 && this.calculateMsp(dim, 1000)) ||\n (dim.scale >= 2 && this.calculateMsp(dim, 1900))\n );\n }\n\n static sleep(delay = 1000): Promise<void> {\n return new Promise((resolve: (val?: any) => void) => {\n setTimeout(() => {\n return resolve();\n }, delay);\n });\n }\n\n /**\n * deviceTypesMappings = {'1':'Desktop Web','2':'Mobile Web','3':'Tablet','4':'Other'};\n * @param deviceType\n */\n static dtToNum(deviceType: string): number {\n switch (deviceType) {\n case 'desktop':\n return 1;\n case 'mobile':\n return 2;\n case 'tablet':\n return 3;\n default:\n return 4;\n }\n }\n\n /**\n * static browserToOsMappings = {'101': 'ios','102': 'android', '7': 'Other'};\n * @param browser\n */\n static bwToNum(browser: string): number {\n switch (browser) {\n case 'ios':\n return 101;\n case 'android':\n return 102;\n default:\n return 7;\n }\n }\n\n static langToNum(language: string): number {\n if (language === 'en') {\n return 1;\n } else if (language === 'es') {\n return 2;\n } else {\n return 3;\n }\n }\n\n static mergeMaps<T>(\n input: MapLike<T>,\n ...toMerge: Array<MapLike<T>>\n ): MapLike<T> {\n if (!input) {\n input = {} as MapLike<T>;\n }\n for (const mapObject of toMerge) {\n if (mapObject) {\n Object.keys(mapObject).forEach((key: string) => {\n input[key] = mapObject[key];\n });\n }\n }\n return input;\n }\n\n static applyTransformationResourceParam(\n paramValue: string,\n tf: TFType | undefined\n ): any {\n if (!tf || tf.length === 0) {\n return paramValue;\n }\n\n if (typeof paramValue === 'undefined') {\n return paramValue;\n }\n\n // transformers here are expected to be ordered when we get it from the server after build\n for (let tfItem of tf) {\n if (tfItem.nm === 'enc') {\n // only url encode is implemented now\n tfItem = tfItem as SdkParamEncodingTransformer;\n if (tfItem.eTyp === 'URL_ENC') {\n paramValue = encodeURIComponent(paramValue);\n } else if (tfItem.eTyp === 'BASE64') {\n paramValue = this.toBase64(paramValue);\n }\n }\n }\n\n return paramValue;\n }\n\n /**\n * Verifies if the given 'toTest' string exists in any of the input array of strings.\n * By default, this method does a case sensitive match unless specified by the ignoreCase param.\n * @param toTest\n * @param inputs\n * @param ignoreCase - pass a value of 'true' to perform case-insensitive matching.\n * @param fullMatch\n */\n static isMatch(\n toTest: string,\n inputs: string[],\n ignoreCase: boolean,\n fullMatch: boolean\n ): boolean {\n if (!toTest) {\n return false;\n }\n let isMatched = false;\n for (let i = 0; i < inputs.length; i += 1) {\n const _val = inputs[i];\n if (_val) {\n if (this.convertToRegex(_val, ignoreCase, fullMatch).test(toTest)) {\n isMatched = true;\n break;\n }\n }\n }\n return isMatched;\n }\n\n static regExpEscape(input: string): string {\n return input.replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&');\n }\n\n static convertToRegex(\n input: string,\n ignoreCase: boolean,\n fullMatch: boolean\n ): RegExp {\n if (fullMatch) {\n return new RegExp(\n '^' + input.split(/\\*+/).map(this.regExpEscape).join('.*') + '$',\n ignoreCase ? 'i' : ''\n );\n } else {\n return new RegExp(\n input.split(/\\*+/).map(this.regExpEscape).join('.*'),\n ignoreCase ? 'i' : ''\n );\n }\n }\n\n static safeExecute(fn: (payload: any) => any, payload: any): any {\n try {\n return fn(payload);\n } catch (err) {\n Logger.logError('Error executing function: ', err);\n }\n }\n\n /**\n * Encode string to Base64 - React Native compatible\n * Works with both ASCII and UTF-8 strings\n * @param str String to encode\n * @returns Base64 encoded string\n */\n static toBase64(str: string): string {\n try {\n // Handle UTF-8 strings properly using encodeURIComponent + unescape trick\n // This works in all JavaScript engines including React Native's Hermes/JSC\n return btoa(unescape(encodeURIComponent(str)));\n } catch (err) {\n Logger.logError('Error encoding to Base64:', err);\n return str; // Return original value if encoding fails\n }\n }\n\n /**\n * Encode an object payload to Base64 string\n * @param payload Object to encode\n * @returns Base64 encoded string, or empty string on error\n */\n static encodeToBase64(payload: Record<string, any>): string {\n try {\n const jsonStr = JSON.stringify(payload);\n return this.toBase64(jsonStr);\n } catch (err) {\n Logger.logError('Error encoding payload to Base64:', err);\n return '';\n }\n }\n\n /**\n * Get the size of a payload in bytes\n * @param payload Object to measure\n * @returns Size in bytes\n */\n static getPayloadSizeBytes(payload: Record<string, any>): number {\n try {\n const jsonStr = JSON.stringify(payload);\n // Use TextEncoder for accurate byte count (handles UTF-8)\n return new TextEncoder().encode(jsonStr).length;\n } catch (err) {\n Logger.logError('Error calculating payload size:', err);\n return 0;\n }\n }\n\n /**\n * Check if payload exceeds the maximum allowed size (250KB)\n * @param payload Object to check\n * @returns True if payload is oversized\n */\n static isPayloadOversized(payload: Record<string, any>): boolean {\n return this.getPayloadSizeBytes(payload) > MAX_PAYLOAD_SIZE_BYTES;\n }\n\n static getUniqueID(): string {\n return ulid();\n }\n\n /**\n * Make HTTP GET request - React Native implementation\n * @param url URL to fetch\n * @returns Promise with response data\n */\n static async getHttp<T>(url: string): Promise<T> {\n try {\n const response = await fetch(url, {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n\n return await response.json();\n } catch (error) {\n Logger.logError('HTTP GET request failed:', error);\n throw error;\n }\n }\n\n /**\n * Get value from AsyncStorage (React Native equivalent of sessionStorage)\n * @param key Storage key\n * @param defaultValue Default value if key not found\n * @returns Promise with stored value or default\n */\n static async getValueFromAsyncStorage<T>(\n key: string,\n defaultValue: T\n ): Promise<T> {\n try {\n const value = await AsyncStorage.getItem(key);\n return value ? JSON.parse(value) : defaultValue;\n } catch (error) {\n Logger.logError('Error getting value from AsyncStorage:', error);\n return defaultValue;\n }\n }\n\n /**\n * Set value to AsyncStorage (React Native equivalent of sessionStorage)\n * @param key Storage key\n * @param value Value to store\n */\n static async setValueToAsyncStorage(key: string, value: any): Promise<void> {\n try {\n await AsyncStorage.setItem(key, JSON.stringify(value));\n } catch (error) {\n Logger.logError('Error setting value to AsyncStorage:', error);\n }\n }\n\n static getSimpleDebugId(prefix?: string): string {\n return `${prefix ?? ''}${this.randomNumber(100000000, 99999999999)}`;\n }\n\n static randomNumber(min: number, max: number): number {\n return Math.ceil(Math.random() * (max - min) + min);\n }\n\n static unFlattenResourceParams<T extends BaseResourceParamType>(\n input: T[]\n ): MapLike<T> {\n if (!input || input.length === 0) {\n return {};\n }\n\n const transformMap: MapLike<T> = {};\n const op: MapLike<T> = {};\n // convert input into a map for quick search O(1)\n for (const item of input) {\n if (item.pId) {\n if (!transformMap[item.pId]) {\n item.children = [];\n transformMap[item.id] = item;\n } else {\n transformMap[item.pId].children.push(item);\n }\n } else {\n item.children = [];\n transformMap[item.id] = item;\n }\n }\n\n // sort children according to child_order inside children if they have any children\n for (const item of Object.values(transformMap)) {\n if (item.children && item.children.length > 0) {\n item.children = item.children.sort(Constants.sortAscending);\n op[item.nm] = item;\n } else {\n op[item.nm] = item;\n }\n }\n\n return op;\n }\n\n static unFlattenObject(obj: any): Record<string, any> {\n if (!obj) {\n return {};\n }\n return unflatten(obj, { object: false, delimiter: '.' });\n }\n\n static flattenObject(obj: any): Record<string, any> {\n if (!obj) {\n return {};\n }\n return flatten(obj, { maxDepth: 5, safe: true });\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -298,25 +298,30 @@ class MagicPixelImpl {
298
298
  //set page_browser default data element with page_os because backend expects this
299
299
  DataStore.setDataElement('page_browser', DataStore.getOperatingSystem().toLowerCase());
300
300
  Reporter.initReporter(sdk.s.ev, sdk.s.ev_id, DataStore.getDeviceType(), DataStore.getPageLang(), DataStore.getDeviceOs(), DataStore.getPageName(), evtName, evtId, DataStore.getClientDownStream(), DataStore.getCoreVersion(), []);
301
+
302
+ // Store developer payload (base64 encoded) for report
303
+ if (eventData) {
304
+ Reporter.reportDevPayload(eventData, evtId);
305
+ }
301
306
  const validQCList = QcProcessor.processQc(DataStore.getSdkQC(), evtName, evtId);
302
307
  if ((validQCList === null || validQCList === void 0 ? void 0 : validQCList.length) > 0) {
303
308
  Logger.logDbg('Found Valid QCs to process', DataStore.getValidQcInfo());
304
309
  TagProcessor.processTags(evtName, evtId).then(() => {
305
- this._fireTM(sdk.s.ev, sdk.s.ev_id, evtName, evtId);
310
+ this._fireTM(sdk.s.ev, sdk.s.ev_id, evtName, evtId, eventData);
306
311
  }).catch(err => {
307
312
  Logger.logError('Error processing tag lists.', err);
308
313
  Reporter.reportError('i::processTags', err);
309
- this._fireTM(sdk.s.ev, sdk.s.ev_id, evtName, evtId);
314
+ this._fireTM(sdk.s.ev, sdk.s.ev_id, evtName, evtId, eventData);
310
315
  });
311
316
  } else {
312
- this._fireTM(sdk.s.ev, sdk.s.ev_id, evtName, evtId);
317
+ this._fireTM(sdk.s.ev, sdk.s.ev_id, evtName, evtId, eventData);
313
318
  }
314
319
  } catch (runTMErr) {
315
320
  Logger.logError('Error in runTM', runTMErr);
316
321
  Reporter.reportError('m::runTM', runTMErr);
317
322
  }
318
323
  }
319
- static _fireTM(envName, envId, evtName, evtId) {
324
+ static _fireTM(envName, envId, evtName, evtId, eventData) {
320
325
  // 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
321
326
  if (evtName === DL_INIT_EVENT) {
322
327
  // Synchronous increment - no race condition possible
@@ -324,11 +329,11 @@ class MagicPixelImpl {
324
329
  }
325
330
 
326
331
  // Continue immediately after sync increment
327
- this._fireTMPrivate(envName, envId, evtName, evtId);
332
+ this._fireTMPrivate(envName, envId, evtName, evtId, eventData);
328
333
  }
329
- static _fireTMPrivate(envName, envId, evtName, evtId) {
334
+ static _fireTMPrivate(envName, envId, evtName, evtId, eventData) {
330
335
  if (DataStore.hasOneSSTTag() && DataStore.shouldFireSstForEvent(evtName)) {
331
- Reporter.postSST(DataStore.getDataElements(), envName, envId, DataStore.getSSTDownStream(), evtName, evtId).catch(err => {
336
+ Reporter.postSST(DataStore.getDataElements(), envName, envId, DataStore.getSSTDownStream(), evtName, evtId, eventData).catch(err => {
332
337
  Reporter.reportError('l::postSST', err);
333
338
  });
334
339
  }
@@ -1 +1 @@
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":[]}
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","reportDevPayload","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 // Store developer payload (base64 encoded) for report\n if (eventData) {\n Reporter.reportDevPayload(eventData, evtId);\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, eventData);\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, eventData);\n });\n } else {\n this._fireTM(sdk.s.ev, sdk.s.ev_id, evtName, evtId, eventData);\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 eventData?: Record<string, any>\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, eventData);\n }\n\n private static _fireTMPrivate(\n envName: string,\n envId: string,\n evtName: string,\n evtId: string,\n eventData?: Record<string, any>\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 eventData\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":[]}
@@ -0,0 +1,2 @@
1
+
2
+ //# sourceMappingURL=sdk.d.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["sdk.d.ts"],"sourcesContent":["declare module '@magicpixel/rn-mp-client-sdk' {\n interface InitConfig {\n orgId: string;\n env: 'staging' | 'production';\n projectId: string;\n baseUrl: string;\n logLevel?: 'debug' | 'info' | 'warn' | 'error' | 'none';\n eventDeduplicationWindowMs?: number;\n onInitFailure?: (error: Error) => void;\n }\n\n interface 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 }\n\n interface PageLoadData {\n page_name: string;\n [key: string]: any;\n }\n\n class MagicPixelImpl {\n init(config: InitConfig): void;\n shutdown(): void;\n recordEvent(eventName: string, payload?: Record<string, any>): void;\n recordPageLoad(data: PageLoadData): void;\n setUserInfo(userInfo: UserInfo): void;\n setCustomerInfo(customerInfo: Record<string, any>): void;\n setDeviceInfo(customFields?: Record<string, any>): void;\n setDeepLinkUrl(url: string): void;\n setFirebaseAppInstanceId(id: string): void;\n getDebugId(): Promise<string | null>;\n setDataLayer(data: Record<string, any>): void;\n persistData(key: string, value: any): void;\n clearPersistedData(keys: string[]): void;\n getDataLayer(): Record<string, any>;\n getEventState(): Record<string, any>;\n hasEventHappened(eventName: string): boolean;\n registerEventProcessor(\n eventType: string,\n callback: (event: any) => void\n ): void;\n }\n\n export const MagicPixel: MagicPixelImpl;\n export const MagicPixelEventBus: any;\n}\n"],"mappings":"","ignoreList":[]}
@@ -66,6 +66,7 @@ export interface Report {
66
66
  tagCt: number;
67
67
  dws: 'j' | 'n';
68
68
  v: string;
69
+ devPayload?: string;
69
70
  }
70
71
  export interface UrlInfo {
71
72
  tfUrl: string;
@@ -13,8 +13,8 @@ interface DeviceAppInfo {
13
13
  /**
14
14
  * Helper class to automatically detect device and app information
15
15
  * Supports both Expo and bare React Native:
16
- * 1. Tries Expo modules first (works in Expo Go)
17
- * 2. Falls back to react-native-device-info (for bare RN)
16
+ * 1. Tries react-native-device-info first (works in bare RN and Expo custom builds)
17
+ * 2. Falls back to Expo modules (for Expo Go where native modules don't work)
18
18
  * 3. Returns safe defaults if neither is available
19
19
  */
20
20
  export declare class DeviceInfoHelper {
@@ -24,8 +24,8 @@ export declare class DeviceInfoHelper {
24
24
  private static deviceInfo;
25
25
  private static initialized;
26
26
  /**
27
- * Try to load Expo modules and react-native-device-info
28
- * This uses dynamic imports to avoid errors when modules aren't available
27
+ * Try to load react-native-device-info first, then Expo modules
28
+ * Uses console.log during init to avoid Logger dependency issues if module loading fails
29
29
  */
30
30
  private static initialize;
31
31
  /**
@@ -4,9 +4,10 @@ export declare class Reporter {
4
4
  static initReporter(envName: string, envId: string, deviceType: string, language: string, deviceOs: string, // device os is being used as a browser proxy
5
5
  pageName: string, evtName: string, evtId: string, clientTagsDownStream: 'j' | 'n', clientSdkVersion: string, initialItems?: ReportTagItem[]): void;
6
6
  static setExpectedTagCount(ct: number, evtId: string): void;
7
+ static reportDevPayload(devPayload: Record<string, any>, evtId: string): void;
7
8
  static reportItem(item: ReportTagItem, evtId: string): void;
8
9
  static publishReport(evtId: string): void;
9
10
  static reportError(methodMetaData: string, err: any): void;
10
- static postSST(data: MapLike, envName: string, envId: string, serverTagDownStream: 'j' | 'n', eventName: string, evtId: string): Promise<void>;
11
+ static postSST(data: MapLike, envName: string, envId: string, serverTagDownStream: 'j' | 'n', eventName: string, evtId: string, eventData?: Record<string, any>): Promise<void>;
11
12
  static postAttrInfo(payload: MapLike): void;
12
13
  }
@@ -40,6 +40,24 @@ export declare class Utils {
40
40
  * @returns Base64 encoded string
41
41
  */
42
42
  static toBase64(str: string): string;
43
+ /**
44
+ * Encode an object payload to Base64 string
45
+ * @param payload Object to encode
46
+ * @returns Base64 encoded string, or empty string on error
47
+ */
48
+ static encodeToBase64(payload: Record<string, any>): string;
49
+ /**
50
+ * Get the size of a payload in bytes
51
+ * @param payload Object to measure
52
+ * @returns Size in bytes
53
+ */
54
+ static getPayloadSizeBytes(payload: Record<string, any>): number;
55
+ /**
56
+ * Check if payload exceeds the maximum allowed size (250KB)
57
+ * @param payload Object to check
58
+ * @returns True if payload is oversized
59
+ */
60
+ static isPayloadOversized(payload: Record<string, any>): boolean;
43
61
  static getUniqueID(): string;
44
62
  /**
45
63
  * Make HTTP GET request - React Native implementation
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@magicpixel/rn-mp-client-sdk",
3
- "version": "1.13.20",
3
+ "version": "1.13.22",
4
4
  "description": "React Native SDK for MagicPixel analytics and tag management",
5
5
  "main": "lib/commonjs/index",
6
6
  "module": "lib/module/index",
@@ -166,4 +166,4 @@
166
166
  "ulid": "3.0.1",
167
167
  "uuid": "9.0.0"
168
168
  }
169
- }
169
+ }
@@ -87,6 +87,7 @@ export interface Report {
87
87
  tagCt: number; // expected tag count on this page
88
88
  dws: 'j' | 'n'; // down stream configuration. java or node
89
89
  v: string; // client sdk version for this call
90
+ devPayload?: string; // base64 encoded developer payload
90
91
  }
91
92
 
92
93
  export interface UrlInfo {