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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (104) hide show
  1. package/README.md +163 -14
  2. package/lib/commonjs/common/app-types.js.map +1 -1
  3. package/lib/commonjs/common/constants.js +11 -2
  4. package/lib/commonjs/common/constants.js.map +1 -1
  5. package/lib/commonjs/common/data-store.js +13 -30
  6. package/lib/commonjs/common/data-store.js.map +1 -1
  7. package/lib/commonjs/common/deeplink-helper.js +174 -0
  8. package/lib/commonjs/common/deeplink-helper.js.map +1 -0
  9. package/lib/commonjs/common/device-info-helper.js +168 -0
  10. package/lib/commonjs/common/device-info-helper.js.map +1 -0
  11. package/lib/commonjs/common/event-bus.js +39 -0
  12. package/lib/commonjs/common/event-bus.js.map +1 -1
  13. package/lib/commonjs/common/network-service.js +119 -17
  14. package/lib/commonjs/common/network-service.js.map +1 -1
  15. package/lib/commonjs/common/reporter.js +28 -10
  16. package/lib/commonjs/common/reporter.js.map +1 -1
  17. package/lib/commonjs/common/storage-helper.js +227 -0
  18. package/lib/commonjs/common/storage-helper.js.map +1 -0
  19. package/lib/commonjs/common/utils.js +20 -2
  20. package/lib/commonjs/common/utils.js.map +1 -1
  21. package/lib/commonjs/eedl/eedl.js +198 -44
  22. package/lib/commonjs/eedl/eedl.js.map +1 -1
  23. package/lib/commonjs/index.js +290 -48
  24. package/lib/commonjs/index.js.map +1 -1
  25. package/lib/commonjs/models/mp-client-sdk.js +17 -10
  26. package/lib/commonjs/models/mp-client-sdk.js.map +1 -1
  27. package/lib/commonjs/processors/data-element.processor.js +51 -7
  28. package/lib/commonjs/processors/data-element.processor.js.map +1 -1
  29. package/lib/commonjs/processors/visit-id.processor.js +78 -15
  30. package/lib/commonjs/processors/visit-id.processor.js.map +1 -1
  31. package/lib/module/common/app-types.js.map +1 -1
  32. package/lib/module/common/constants.js +11 -2
  33. package/lib/module/common/constants.js.map +1 -1
  34. package/lib/module/common/data-store.js +13 -30
  35. package/lib/module/common/data-store.js.map +1 -1
  36. package/lib/module/common/deeplink-helper.js +168 -0
  37. package/lib/module/common/deeplink-helper.js.map +1 -0
  38. package/lib/module/common/device-info-helper.js +161 -0
  39. package/lib/module/common/device-info-helper.js.map +1 -0
  40. package/lib/module/common/event-bus.js +39 -0
  41. package/lib/module/common/event-bus.js.map +1 -1
  42. package/lib/module/common/network-service.js +119 -17
  43. package/lib/module/common/network-service.js.map +1 -1
  44. package/lib/module/common/reporter.js +29 -10
  45. package/lib/module/common/reporter.js.map +1 -1
  46. package/lib/module/common/storage-helper.js +221 -0
  47. package/lib/module/common/storage-helper.js.map +1 -0
  48. package/lib/module/common/utils.js +20 -2
  49. package/lib/module/common/utils.js.map +1 -1
  50. package/lib/module/eedl/eedl.js +198 -44
  51. package/lib/module/eedl/eedl.js.map +1 -1
  52. package/lib/module/index.js +279 -47
  53. package/lib/module/index.js.map +1 -1
  54. package/lib/module/models/mp-client-sdk.js +16 -9
  55. package/lib/module/models/mp-client-sdk.js.map +1 -1
  56. package/lib/module/processors/data-element.processor.js +51 -7
  57. package/lib/module/processors/data-element.processor.js.map +1 -1
  58. package/lib/module/processors/visit-id.processor.js +78 -15
  59. package/lib/module/processors/visit-id.processor.js.map +1 -1
  60. package/lib/typescript/{common → src/common}/app-types.d.ts +29 -9
  61. package/lib/typescript/{common → src/common}/constants.d.ts +0 -1
  62. package/lib/typescript/{common → src/common}/data-store.d.ts +3 -8
  63. package/lib/typescript/src/common/deeplink-helper.d.ts +60 -0
  64. package/lib/typescript/src/common/device-info-helper.d.ts +54 -0
  65. package/lib/typescript/src/common/event-bus.d.ts +21 -0
  66. package/lib/typescript/src/common/network-service.d.ts +32 -0
  67. package/lib/typescript/src/common/storage-helper.d.ts +47 -0
  68. package/lib/typescript/{common → src/common}/utils.d.ts +7 -0
  69. package/lib/typescript/{eedl → src/eedl}/eedl.d.ts +43 -1
  70. package/lib/typescript/{index.d.ts → src/index.d.ts} +39 -5
  71. package/lib/typescript/{models → src/models}/mp-client-sdk.d.ts +7 -0
  72. package/lib/typescript/src/processors/visit-id.processor.d.ts +23 -0
  73. package/package.json +26 -42
  74. package/src/common/app-types.ts +32 -10
  75. package/src/common/constants.ts +0 -6
  76. package/src/common/data-store.ts +8 -30
  77. package/src/common/deeplink-helper.ts +181 -0
  78. package/src/common/device-info-helper.ts +190 -0
  79. package/src/common/event-bus.ts +39 -0
  80. package/src/common/network-service.ts +154 -23
  81. package/src/common/reporter.ts +31 -10
  82. package/src/common/storage-helper.ts +266 -0
  83. package/src/common/utils.ts +20 -2
  84. package/src/eedl/eedl.ts +225 -51
  85. package/src/index.tsx +332 -67
  86. package/src/models/mp-client-sdk.ts +8 -0
  87. package/src/processors/data-element.processor.ts +85 -7
  88. package/src/processors/visit-id.processor.ts +92 -22
  89. package/lib/commonjs/processors/trans-function.processor.js +0 -73
  90. package/lib/commonjs/processors/trans-function.processor.js.map +0 -1
  91. package/lib/module/processors/trans-function.processor.js +0 -66
  92. package/lib/module/processors/trans-function.processor.js.map +0 -1
  93. package/lib/typescript/common/event-bus.d.ts +0 -6
  94. package/lib/typescript/common/network-service.d.ts +0 -8
  95. package/lib/typescript/processors/trans-function.processor.d.ts +0 -12
  96. package/lib/typescript/processors/visit-id.processor.d.ts +0 -9
  97. package/src/processors/trans-function.processor.ts +0 -85
  98. /package/lib/typescript/{common → src/common}/logger.d.ts +0 -0
  99. /package/lib/typescript/{common → src/common}/reporter.d.ts +0 -0
  100. /package/lib/typescript/{models → src/models}/geo-api-response.d.ts +0 -0
  101. /package/lib/typescript/{processors → src/processors}/data-element.processor.d.ts +0 -0
  102. /package/lib/typescript/{processors → src/processors}/geo-location.processor.d.ts +0 -0
  103. /package/lib/typescript/{processors → src/processors}/qc.processor.d.ts +0 -0
  104. /package/lib/typescript/{processors → src/processors}/tag.processor.d.ts +0 -0
@@ -1 +1 @@
1
- {"version":3,"names":["_logger","require","_dataStore","_reporter","NetworkService","fetchIdlInfo","url","response","sendNetworkRequest","json","refreshClientSdkJson","sdkInitOptions","baseUrl","projectId","env","sdkJson","Logger","logDbg","DataStore","init","err","Reporter","reportError","sendPostRequest","body","catch","logError","sendGetRequest","method","JSON","stringify","getCommonCookies","fetch","headers","Error","exports"],"sources":["network-service.ts"],"sourcesContent":["import { Logger } from './logger';\nimport type { MapLike, SdkInitOptions, VisitorInfo } from './app-types';\nimport { DataStore } from './data-store';\nimport { Reporter } from './reporter';\nimport type { MpClientSdk } from '../models/mp-client-sdk';\n\nexport class NetworkService {\n public static async fetchIdlInfo(url: string): Promise<VisitorInfo> {\n const response = await NetworkService.sendNetworkRequest('get', url);\n if (response) {\n return response.json();\n } else {\n return null;\n }\n }\n\n public static async refreshClientSdkJson(\n sdkInitOptions: SdkInitOptions\n ): Promise<void> {\n try {\n const response = await this.sendNetworkRequest(\n 'get',\n `${sdkInitOptions.baseUrl}/${sdkInitOptions.projectId}${\n sdkInitOptions.env === 'staging' ? '-staging' : ''\n }.json`\n );\n\n if (response) {\n const sdkJson: MpClientSdk = await response.json();\n Logger.logDbg('Client Sdk:: ', sdkJson);\n // sdkJson.s.c_url = 'http://localhost:3003';\n await DataStore.init(sdkJson);\n }\n } catch (err) {\n Reporter.reportError('refreshClientSdk', err);\n // throw new Error('Unable to fetch MagicPixel SDK at this time.');\n }\n }\n\n public static sendPostRequest(url: string, body: MapLike): void {\n this.sendNetworkRequest('post', url, body).catch((err) => {\n Logger.logError(err);\n });\n }\n\n public static sendGetRequest(url: string): void {\n this.sendNetworkRequest('get', url).catch((err) => {\n Logger.logError(err);\n });\n }\n\n private static async sendNetworkRequest(\n method: 'get' | 'post',\n url: string,\n body?: MapLike\n ): Promise<any> {\n try {\n Logger.logDbg(\n `Sending ${method} request to ${url} with body ${JSON.stringify(body)}`\n );\n Logger.logDbg(\n `Common Cookies: ${JSON.stringify(DataStore.getCommonCookies() ?? {})}`\n );\n if (method === 'get') {\n return await fetch(url, {\n method: 'GET',\n headers: {\n 'Content-Type': 'text/plain',\n 'cache-control': 'no-store',\n 'user-agent': 'sajith/123',\n // 'x-dbg': 'trace',\n ...DataStore.getCommonCookies(),\n },\n });\n } else if (method === 'post') {\n return await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'text/plain',\n 'cache-control': 'no-store',\n 'user-agent': 'sajith/123',\n // 'x-dbg': 'trace',\n ...DataStore.getCommonCookies(),\n },\n body: JSON.stringify(body ?? '{}'),\n });\n } else {\n throw new Error('Unsupported method: ' + method);\n }\n } catch (err) {\n Logger.logError(err);\n return null;\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_logger","require","_dataStore","DEFAULT_RETRY_COUNT","DEFAULT_RETRY_DELAY_MS","DEFAULT_TIMEOUT_MS","NetworkService","sleep","ms","Promise","resolve","setTimeout","fetchWithTimeout","url","options","timeoutMs","controller","AbortController","timeoutId","abort","response","fetch","signal","clearTimeout","fetchIdlInfo","method","headers","DataStore","getCommonCookies","ok","json","Logger","logError","status","statusText","err","fetchIdlInfoWithRetry","retries","lastError","attempt","logDbg","result","Error","String","delay","Math","pow","refreshClientSdkJson","sdkInitOptions","_lastError","baseUrl","projectId","env","sdkJson","init","message","sendPostRequest","body","sendNetworkRequest","catch","sendGetRequest","JSON","stringify","exports"],"sources":["network-service.ts"],"sourcesContent":["import { Logger } from './logger';\nimport type { MapLike, SdkInitOptions, VisitorInfo } from './app-types';\nimport { DataStore } from './data-store';\nimport type { MpClientSdk } from '../models/mp-client-sdk';\n\nconst DEFAULT_RETRY_COUNT = 3;\nconst DEFAULT_RETRY_DELAY_MS = 1000;\nconst DEFAULT_TIMEOUT_MS = 10000;\n\nexport class NetworkService {\n /**\n * Sleep for a specified duration\n */\n private static sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n\n /**\n * Fetch with timeout wrapper\n */\n private static async fetchWithTimeout(\n url: string,\n options: RequestInit,\n timeoutMs: number = DEFAULT_TIMEOUT_MS\n ): Promise<Response> {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), timeoutMs);\n\n try {\n const response = await fetch(url, {\n ...options,\n signal: controller.signal,\n });\n return response;\n } finally {\n clearTimeout(timeoutId);\n }\n }\n /**\n * Fetch visitor/identity info from server\n * Returns null if fetch fails (caller should handle retry logic)\n */\n public static async fetchIdlInfo(url: string): Promise<VisitorInfo | null> {\n try {\n const response = await this.fetchWithTimeout(\n url,\n {\n method: 'GET',\n headers: {\n 'Content-Type': 'text/plain',\n 'cache-control': 'no-store',\n ...DataStore.getCommonCookies(),\n },\n },\n DEFAULT_TIMEOUT_MS\n );\n\n if (response && response.ok) {\n return response.json();\n } else {\n Logger.logError(\n `Failed to fetch IDL info: ${response?.status} ${response?.statusText}`\n );\n return null;\n }\n } catch (err) {\n Logger.logError('Error fetching IDL info:', err);\n return null;\n }\n }\n\n /**\n * Fetch visitor/identity info with retry logic\n * @param url The IDL URL\n * @param retries Number of retries (default: 3)\n * @returns VisitorInfo or null if all retries fail\n */\n public static async fetchIdlInfoWithRetry(\n url: string,\n retries: number = DEFAULT_RETRY_COUNT\n ): Promise<VisitorInfo | null> {\n let lastError: Error | null = null;\n\n for (let attempt = 1; attempt <= retries; attempt++) {\n try {\n Logger.logDbg(`Fetching IDL info (attempt ${attempt}/${retries})`);\n const result = await this.fetchIdlInfo(url);\n\n if (result) {\n Logger.logDbg('IDL info fetched successfully');\n return result;\n }\n } catch (err) {\n lastError = err instanceof Error ? err : new Error(String(err));\n Logger.logError(`IDL fetch attempt ${attempt} failed:`, err);\n }\n\n // Wait before retry (exponential backoff)\n if (attempt < retries) {\n const delay = DEFAULT_RETRY_DELAY_MS * Math.pow(2, attempt - 1);\n Logger.logDbg(`Retrying IDL fetch in ${delay}ms...`);\n await this.sleep(delay);\n }\n }\n\n Logger.logError(`All ${retries} IDL fetch attempts failed`, lastError);\n return null;\n }\n\n /**\n * Refresh client SDK JSON configuration with retry logic\n * @param sdkInitOptions SDK initialization options\n * @returns true if successful, throws Error if all retries fail\n */\n public static async refreshClientSdkJson(\n sdkInitOptions: SdkInitOptions\n ): Promise<void> {\n const url = `${sdkInitOptions.baseUrl}/${sdkInitOptions.projectId}${\n sdkInitOptions.env === 'staging' ? '-staging' : ''\n }.json`;\n\n let lastError: Error | null = null;\n\n for (let attempt = 1; attempt <= DEFAULT_RETRY_COUNT; attempt++) {\n try {\n Logger.logDbg(\n `Fetching SDK config (attempt ${attempt}/${DEFAULT_RETRY_COUNT}): ${url}`\n );\n\n const response = await this.fetchWithTimeout(\n url,\n {\n method: 'GET',\n headers: {\n 'Content-Type': 'text/plain',\n 'cache-control': 'no-store',\n },\n },\n DEFAULT_TIMEOUT_MS\n );\n\n if (response && response.ok) {\n const sdkJson: MpClientSdk = await response.json();\n Logger.logDbg('Client SDK config fetched successfully');\n await DataStore.init(sdkJson);\n return; // Success - exit the retry loop\n } else {\n throw new Error(\n `HTTP ${response?.status}: ${\n response?.statusText || 'Unknown error'\n }`\n );\n }\n } catch (err) {\n lastError = err instanceof Error ? err : new Error(String(err));\n Logger.logError(`SDK config fetch attempt ${attempt} failed:`, err);\n\n // Wait before retry (exponential backoff)\n if (attempt < DEFAULT_RETRY_COUNT) {\n const delay = DEFAULT_RETRY_DELAY_MS * Math.pow(2, attempt - 1);\n Logger.logDbg(`Retrying SDK config fetch in ${delay}ms...`);\n await this.sleep(delay);\n }\n }\n }\n\n // All retries failed - throw error so caller can handle it\n throw new Error(\n `Failed to fetch SDK configuration after ${DEFAULT_RETRY_COUNT} attempts: ${lastError?.message}`\n );\n }\n\n public static sendPostRequest(url: string, body: MapLike): void {\n this.sendNetworkRequest('post', url, body).catch((err) => {\n Logger.logError(err);\n });\n }\n\n public static sendGetRequest(url: string): void {\n this.sendNetworkRequest('get', url).catch((err) => {\n Logger.logError(err);\n });\n }\n\n private static async sendNetworkRequest(\n method: 'get' | 'post',\n url: string,\n body?: MapLike\n ): Promise<any> {\n try {\n Logger.logDbg(\n `Sending ${method} request to ${url} with body ${JSON.stringify(body)}`\n );\n Logger.logDbg(\n `Common Cookies: ${JSON.stringify(DataStore.getCommonCookies() ?? {})}`\n );\n if (method === 'get') {\n return await fetch(url, {\n method: 'GET',\n headers: {\n 'Content-Type': 'text/plain',\n 'cache-control': 'no-store',\n // 'x-dbg': 'trace',\n ...DataStore.getCommonCookies(),\n },\n });\n } else if (method === 'post') {\n return await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'text/plain',\n 'cache-control': 'no-store',\n // 'x-dbg': 'trace',\n ...DataStore.getCommonCookies(),\n },\n body: JSON.stringify(body ?? '{}'),\n });\n } else {\n throw new Error('Unsupported method: ' + method);\n }\n } catch (err) {\n Logger.logError(err);\n return null;\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -11,10 +11,22 @@ var _networkService = require("./network-service");
11
11
  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
12
12
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
13
13
  function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
14
+ // Maximum number of reports to keep in memory
15
+ const MAX_REPORTS = 500;
14
16
  class Reporter {
15
17
  static initReporter(envName, envId, deviceType, language, deviceOs,
16
18
  // device os is being used as a browser proxy
17
19
  pageName, evtName, evtId, clientTagsDownStream, clientSdkVersion, initialItems = []) {
20
+ // Evict oldest reports if at capacity
21
+ const reportKeys = Object.keys(this.reportMap);
22
+ if (reportKeys.length >= MAX_REPORTS) {
23
+ // Remove oldest report (first key in object)
24
+ const oldestKey = reportKeys[0];
25
+ if (oldestKey) {
26
+ delete this.reportMap[oldestKey];
27
+ _logger.Logger.logDbg(`Report map at capacity (${MAX_REPORTS}), evicted oldest report:`, oldestKey);
28
+ }
29
+ }
18
30
  this.reportMap[evtId] = {
19
31
  envName,
20
32
  envId,
@@ -42,7 +54,7 @@ class Reporter {
42
54
  if (reportParent) {
43
55
  var _reportParent$items, _reportParent$items2;
44
56
  reportParent.items.push(item);
45
- if ((reportParent === null || reportParent === void 0 ? void 0 : (_reportParent$items = reportParent.items) === null || _reportParent$items === void 0 ? void 0 : _reportParent$items.length) === (reportParent === null || reportParent === void 0 ? void 0 : reportParent.tagCt) && (reportParent === null || reportParent === void 0 ? void 0 : (_reportParent$items2 = reportParent.items) === null || _reportParent$items2 === void 0 ? void 0 : _reportParent$items2.length) > 0) {
57
+ if ((reportParent === null || reportParent === void 0 || (_reportParent$items = reportParent.items) === null || _reportParent$items === void 0 ? void 0 : _reportParent$items.length) === (reportParent === null || reportParent === void 0 ? void 0 : reportParent.tagCt) && (reportParent === null || reportParent === void 0 || (_reportParent$items2 = reportParent.items) === null || _reportParent$items2 === void 0 ? void 0 : _reportParent$items2.length) > 0) {
46
58
  _logger.Logger.logDbg('Hit expected tag count. Reporting');
47
59
  this.publishReport(evtId);
48
60
  }
@@ -54,6 +66,9 @@ class Reporter {
54
66
  _logger.Logger.logDbg('Posting Info: ', postUrl);
55
67
  data.debugId = _dataStore.DataStore.getDebugId();
56
68
  _networkService.NetworkService.sendPostRequest(postUrl, data);
69
+
70
+ // Clean up report from memory after publishing
71
+ delete this.reportMap[evtId];
57
72
  }
58
73
  static reportError(methodMetaData, err) {
59
74
  _logger.Logger.logDbg('Reporting...', methodMetaData, err);
@@ -65,15 +80,18 @@ class Reporter {
65
80
  _networkService.NetworkService.sendPostRequest(`${_dataStore.DataStore.getErrorReportUrl()}/${_utils.Utils.getUniqueID()}`, data);
66
81
  }
67
82
  static async postSST(data, envName, envId, serverTagDownStream, eventName, evtId) {
68
- data.env = envName;
69
- data.envId = envId;
70
- data.evtName = eventName;
71
- data.dws = serverTagDownStream;
72
- data.debugId = _dataStore.DataStore.getDebugId();
73
- data.dm = 'n/a';
74
- data.v = _dataStore.DataStore.getCoreVersion();
75
- // return postHttp(`${getUrlInfo().tfUrl}/${getUniqueID()}`, 'POST', data);
76
- _networkService.NetworkService.sendPostRequest(`${_dataStore.DataStore.getSSTUrl()}/${data.dws ?? 'n'}/${evtId}`, data);
83
+ // Clone data to avoid mutating the shared dataElements object
84
+ const payload = {
85
+ ...data
86
+ };
87
+ payload.env = envName;
88
+ payload.envId = envId;
89
+ payload.evtName = eventName;
90
+ payload.dws = serverTagDownStream;
91
+ payload.debugId = _dataStore.DataStore.getDebugId();
92
+ payload.dm = 'n/a';
93
+ payload.v = _dataStore.DataStore.getCoreVersion();
94
+ _networkService.NetworkService.sendPostRequest(`${_dataStore.DataStore.getSSTUrl()}/${payload.dws ?? 'n'}/${evtId}`, payload);
77
95
  }
78
96
  static postAttrInfo(payload) {
79
97
  return _networkService.NetworkService.sendPostRequest(_dataStore.DataStore.getAttrInfoUrl(), payload);
@@ -1 +1 @@
1
- {"version":3,"names":["_logger","require","_dataStore","_utils","_networkService","_defineProperty","e","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","Reporter","initReporter","envName","envId","deviceType","language","deviceOs","pageName","evtName","evtId","clientTagsDownStream","clientSdkVersion","initialItems","reportMap","pname","evt","bw","Utils","bwToNum","dt","dtToNum","ln","langToNum","dm","items","dws","v","tagCt","setExpectedTagCount","ct","reportParent","reportItem","item","_reportParent$items","_reportParent$items2","push","length","Logger","logDbg","publishReport","data","postUrl","DataStore","getUrlInfo","rptUrl","getUniqueID","debugId","getDebugId","NetworkService","sendPostRequest","reportError","methodMetaData","err","message","stack","undefined","version","getSdkVersion","getErrorReportUrl","postSST","serverTagDownStream","eventName","env","getCoreVersion","getSSTUrl","postAttrInfo","payload","getAttrInfoUrl","exports"],"sources":["reporter.ts"],"sourcesContent":["import type { MapLike, Report, ReportTagItem } from './app-types';\nimport { Logger } from './logger';\nimport { DataStore } from './data-store';\nimport { Utils } from './utils';\nimport { NetworkService } from './network-service';\n\nexport class Reporter {\n static reportMap: MapLike<Report> = {};\n\n static initReporter(\n envName: string,\n envId: string,\n deviceType: string,\n language: string,\n deviceOs: string, // device os is being used as a browser proxy\n pageName: string,\n evtName: string,\n evtId: string,\n clientTagsDownStream: 'j' | 'n',\n clientSdkVersion: string,\n initialItems: ReportTagItem[] = []\n ): void {\n this.reportMap[evtId] = {\n envName,\n envId,\n pname: pageName || 'none',\n evt: evtName,\n evtId: evtId,\n bw: Utils.bwToNum(deviceOs),\n dt: Utils.dtToNum(deviceType),\n ln: Utils.langToNum(language),\n dm: 'na',\n items: initialItems || [],\n dws: clientTagsDownStream,\n v: clientSdkVersion,\n tagCt: 0,\n };\n }\n\n static setExpectedTagCount(ct: number, evtId: string): void {\n const reportParent = this.reportMap[evtId];\n if (reportParent) {\n reportParent.tagCt = ct;\n }\n }\n\n static reportItem(item: ReportTagItem, evtId: string): void {\n const reportParent = this.reportMap[evtId];\n if (reportParent) {\n reportParent.items.push(item);\n if (\n reportParent?.items?.length === reportParent?.tagCt &&\n reportParent?.items?.length > 0\n ) {\n Logger.logDbg('Hit expected tag count. Reporting');\n this.publishReport(evtId);\n }\n }\n }\n\n static publishReport(evtId: string): void {\n const data = (this.reportMap[evtId] || {}) as MapLike;\n const postUrl = `${DataStore.getUrlInfo().rptUrl}/${\n data.dws ?? 'n'\n }/${Utils.getUniqueID()}`;\n Logger.logDbg('Posting Info: ', postUrl);\n data.debugId = DataStore.getDebugId();\n NetworkService.sendPostRequest(postUrl, data);\n }\n\n static reportError(methodMetaData: string, err: any): void {\n Logger.logDbg('Reporting...', methodMetaData, err);\n const data = {\n message: err?.message,\n stack: err?.stack || undefined,\n version: DataStore.getSdkVersion(),\n };\n\n NetworkService.sendPostRequest(\n `${DataStore.getErrorReportUrl()}/${Utils.getUniqueID()}`,\n data\n );\n }\n\n static async postSST(\n data: MapLike,\n envName: string,\n envId: string,\n serverTagDownStream: 'j' | 'n',\n eventName: string,\n evtId: string\n ): Promise<void> {\n data.env = envName;\n data.envId = envId;\n data.evtName = eventName;\n data.dws = serverTagDownStream;\n data.debugId = DataStore.getDebugId();\n data.dm = 'n/a';\n data.v = DataStore.getCoreVersion();\n // return postHttp(`${getUrlInfo().tfUrl}/${getUniqueID()}`, 'POST', data);\n NetworkService.sendPostRequest(\n `${DataStore.getSSTUrl()}/${data.dws ?? 'n'}/${evtId}`,\n data\n );\n }\n\n static postAttrInfo(payload: MapLike): void {\n return NetworkService.sendPostRequest(DataStore.getAttrInfoUrl(), payload);\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_logger","require","_dataStore","_utils","_networkService","_defineProperty","e","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","MAX_REPORTS","Reporter","initReporter","envName","envId","deviceType","language","deviceOs","pageName","evtName","evtId","clientTagsDownStream","clientSdkVersion","initialItems","reportKeys","keys","reportMap","length","oldestKey","Logger","logDbg","pname","evt","bw","Utils","bwToNum","dt","dtToNum","ln","langToNum","dm","items","dws","v","tagCt","setExpectedTagCount","ct","reportParent","reportItem","item","_reportParent$items","_reportParent$items2","push","publishReport","data","postUrl","DataStore","getUrlInfo","rptUrl","getUniqueID","debugId","getDebugId","NetworkService","sendPostRequest","reportError","methodMetaData","err","message","stack","undefined","version","getSdkVersion","getErrorReportUrl","postSST","serverTagDownStream","eventName","payload","env","getCoreVersion","getSSTUrl","postAttrInfo","getAttrInfoUrl","exports"],"sources":["reporter.ts"],"sourcesContent":["import type { MapLike, Report, ReportTagItem } from './app-types';\nimport { Logger } from './logger';\nimport { DataStore } from './data-store';\nimport { Utils } from './utils';\nimport { NetworkService } from './network-service';\n\n// Maximum number of reports to keep in memory\nconst MAX_REPORTS = 500;\n\nexport class Reporter {\n static reportMap: MapLike<Report> = {};\n\n static initReporter(\n envName: string,\n envId: string,\n deviceType: string,\n language: string,\n deviceOs: string, // device os is being used as a browser proxy\n pageName: string,\n evtName: string,\n evtId: string,\n clientTagsDownStream: 'j' | 'n',\n clientSdkVersion: string,\n initialItems: ReportTagItem[] = []\n ): void {\n // Evict oldest reports if at capacity\n const reportKeys = Object.keys(this.reportMap);\n if (reportKeys.length >= MAX_REPORTS) {\n // Remove oldest report (first key in object)\n const oldestKey = reportKeys[0];\n if (oldestKey) {\n delete this.reportMap[oldestKey];\n Logger.logDbg(\n `Report map at capacity (${MAX_REPORTS}), evicted oldest report:`,\n oldestKey\n );\n }\n }\n\n this.reportMap[evtId] = {\n envName,\n envId,\n pname: pageName || 'none',\n evt: evtName,\n evtId: evtId,\n bw: Utils.bwToNum(deviceOs),\n dt: Utils.dtToNum(deviceType),\n ln: Utils.langToNum(language),\n dm: 'na',\n items: initialItems || [],\n dws: clientTagsDownStream,\n v: clientSdkVersion,\n tagCt: 0,\n };\n }\n\n static setExpectedTagCount(ct: number, evtId: string): void {\n const reportParent = this.reportMap[evtId];\n if (reportParent) {\n reportParent.tagCt = ct;\n }\n }\n\n static reportItem(item: ReportTagItem, evtId: string): void {\n const reportParent = this.reportMap[evtId];\n if (reportParent) {\n reportParent.items.push(item);\n if (\n reportParent?.items?.length === reportParent?.tagCt &&\n reportParent?.items?.length > 0\n ) {\n Logger.logDbg('Hit expected tag count. Reporting');\n this.publishReport(evtId);\n }\n }\n }\n\n static publishReport(evtId: string): void {\n const data = (this.reportMap[evtId] || {}) as MapLike;\n const postUrl = `${DataStore.getUrlInfo().rptUrl}/${\n data.dws ?? 'n'\n }/${Utils.getUniqueID()}`;\n Logger.logDbg('Posting Info: ', postUrl);\n data.debugId = DataStore.getDebugId();\n NetworkService.sendPostRequest(postUrl, data);\n\n // Clean up report from memory after publishing\n delete this.reportMap[evtId];\n }\n\n static reportError(methodMetaData: string, err: any): void {\n Logger.logDbg('Reporting...', methodMetaData, err);\n const data = {\n message: err?.message,\n stack: err?.stack || undefined,\n version: DataStore.getSdkVersion(),\n };\n\n NetworkService.sendPostRequest(\n `${DataStore.getErrorReportUrl()}/${Utils.getUniqueID()}`,\n data\n );\n }\n\n static async postSST(\n data: MapLike,\n envName: string,\n envId: string,\n serverTagDownStream: 'j' | 'n',\n eventName: string,\n evtId: string\n ): Promise<void> {\n // Clone data to avoid mutating the shared dataElements object\n const payload: MapLike = { ...data };\n payload.env = envName;\n payload.envId = envId;\n payload.evtName = eventName;\n payload.dws = serverTagDownStream;\n payload.debugId = DataStore.getDebugId();\n payload.dm = 'n/a';\n payload.v = DataStore.getCoreVersion();\n NetworkService.sendPostRequest(\n `${DataStore.getSSTUrl()}/${payload.dws ?? 'n'}/${evtId}`,\n payload\n );\n }\n\n static postAttrInfo(payload: MapLike): void {\n return NetworkService.sendPostRequest(DataStore.getAttrInfoUrl(), payload);\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,227 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.StorageHelper = void 0;
7
+ var _asyncStorage = _interopRequireDefault(require("@react-native-async-storage/async-storage"));
8
+ var _mpClientSdk = require("../models/mp-client-sdk");
9
+ var _logger = require("./logger");
10
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
11
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
12
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
13
+ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } /**
14
+ * Storage helper for data element storage duration
15
+ * Handles SESSION (in-memory) and VISITOR (AsyncStorage with 30-day expiry) storage
16
+ */
17
+ // AsyncStorage key for visitor-scoped data elements
18
+ const VISITOR_STORE_KEY = '_mp_de_visitor_store';
19
+
20
+ // 30 days in milliseconds
21
+ const VISITOR_EXPIRY_MS = 30 * 24 * 60 * 60 * 1000;
22
+
23
+ // Interface for stored visitor values (includes timestamp for expiry check)
24
+
25
+ class StorageHelper {
26
+ /**
27
+ * Initialize the storage helper
28
+ * Loads visitor store from AsyncStorage and cleans expired values
29
+ * Should be called once during SDK initialization
30
+ */
31
+ static async initialize() {
32
+ if (this.isInitialized) {
33
+ return;
34
+ }
35
+ try {
36
+ // Load visitor store from AsyncStorage
37
+ const storedData = await _asyncStorage.default.getItem(VISITOR_STORE_KEY);
38
+ if (storedData) {
39
+ this.visitorStoreCache = JSON.parse(storedData);
40
+ _logger.Logger.logDbg('StorageHelper: Loaded visitor store with', Object.keys(this.visitorStoreCache).length, 'items');
41
+ }
42
+
43
+ // Clean expired visitor data
44
+ await this.clearExpiredVisitorData();
45
+ this.isInitialized = true;
46
+ _logger.Logger.logDbg('StorageHelper: Initialized successfully');
47
+ } catch (err) {
48
+ _logger.Logger.logError('StorageHelper: Error initializing', err);
49
+ // Reset to empty state on error
50
+ this.visitorStoreCache = {};
51
+ this.isInitialized = true;
52
+ }
53
+ }
54
+
55
+ /**
56
+ * Clear visitor-scoped values older than 30 days
57
+ */
58
+ static async clearExpiredVisitorData() {
59
+ try {
60
+ const now = Date.now();
61
+ const keysToRemove = [];
62
+ for (const key of Object.keys(this.visitorStoreCache)) {
63
+ const entry = this.visitorStoreCache[key];
64
+ if (entry && now - entry.timestamp > VISITOR_EXPIRY_MS) {
65
+ keysToRemove.push(key);
66
+ }
67
+ }
68
+ if (keysToRemove.length > 0) {
69
+ for (const key of keysToRemove) {
70
+ delete this.visitorStoreCache[key];
71
+ }
72
+
73
+ // Persist the cleaned store
74
+ await this.persistVisitorStore();
75
+ _logger.Logger.logDbg('StorageHelper: Cleared', keysToRemove.length, 'expired visitor values');
76
+ }
77
+ } catch (err) {
78
+ _logger.Logger.logError('StorageHelper: Error clearing expired data', err);
79
+ }
80
+ }
81
+
82
+ /**
83
+ * Persist the visitor store cache to AsyncStorage
84
+ */
85
+ static async persistVisitorStore() {
86
+ try {
87
+ await _asyncStorage.default.setItem(VISITOR_STORE_KEY, JSON.stringify(this.visitorStoreCache));
88
+ } catch (err) {
89
+ _logger.Logger.logError('StorageHelper: Error persisting visitor store', err);
90
+ }
91
+ }
92
+
93
+ /**
94
+ * Check if a value is defined (not null, undefined, or empty string)
95
+ */
96
+ static isDefined(value) {
97
+ return value !== null && value !== undefined && value !== '';
98
+ }
99
+
100
+ /**
101
+ * Store a data element value based on storage duration
102
+ * @param deKey - The data element key
103
+ * @param value - The value to store
104
+ * @param storageDuration - The storage duration type
105
+ */
106
+ static deStorageDurationSet(deKey, value, storageDuration) {
107
+ try {
108
+ if (!this.isDefined(deKey) || !this.isDefined(value)) {
109
+ // Key and value are required
110
+ return;
111
+ }
112
+ if (!storageDuration) {
113
+ storageDuration = _mpClientSdk.DeStorageDuration.EVENT;
114
+ }
115
+ switch (storageDuration) {
116
+ case _mpClientSdk.DeStorageDuration.SESSION:
117
+ // Store in memory (cleared on app restart)
118
+ this.sessionStore[deKey] = value;
119
+ _logger.Logger.logDbg('StorageHelper: Stored SESSION value for', deKey);
120
+ break;
121
+ case _mpClientSdk.DeStorageDuration.VISITOR:
122
+ // Store in AsyncStorage cache with timestamp
123
+ this.visitorStoreCache[deKey] = {
124
+ value: value,
125
+ timestamp: Date.now()
126
+ };
127
+ // Persist to AsyncStorage in background
128
+ this.persistVisitorStore().catch(err => {
129
+ _logger.Logger.logError('StorageHelper: Error persisting visitor value', err);
130
+ });
131
+ _logger.Logger.logDbg('StorageHelper: Stored VISITOR value for', deKey);
132
+ break;
133
+ case _mpClientSdk.DeStorageDuration.EVENT:
134
+ case _mpClientSdk.DeStorageDuration.NONE:
135
+ default:
136
+ // No persistence needed for EVENT or NONE
137
+ break;
138
+ }
139
+ } catch (err) {
140
+ _logger.Logger.logError('StorageHelper: Error in deStorageDurationSet', err);
141
+ }
142
+ }
143
+
144
+ /**
145
+ * Retrieve a data element value based on storage duration
146
+ * @param deKey - The data element key
147
+ * @param defaultValue - Default value if not found
148
+ * @param storageDuration - The storage duration type
149
+ * @returns The stored value or default value
150
+ */
151
+ static deStorageDurationGet(deKey, defaultValue, storageDuration) {
152
+ try {
153
+ if (!this.isDefined(deKey)) {
154
+ return defaultValue;
155
+ }
156
+ if (!storageDuration) {
157
+ storageDuration = _mpClientSdk.DeStorageDuration.EVENT;
158
+ }
159
+ switch (storageDuration) {
160
+ case _mpClientSdk.DeStorageDuration.SESSION:
161
+ {
162
+ // Get from in-memory session store
163
+ const sessionValue = this.sessionStore[deKey];
164
+ if (this.isDefined(sessionValue)) {
165
+ return sessionValue;
166
+ }
167
+ return defaultValue;
168
+ }
169
+ case _mpClientSdk.DeStorageDuration.VISITOR:
170
+ {
171
+ // Get from visitor store cache
172
+ const visitorEntry = this.visitorStoreCache[deKey];
173
+ if (visitorEntry && this.isDefined(visitorEntry.value)) {
174
+ // Check if not expired
175
+ if (Date.now() - visitorEntry.timestamp <= VISITOR_EXPIRY_MS) {
176
+ return visitorEntry.value;
177
+ } else {
178
+ // Value is expired, remove it
179
+ delete this.visitorStoreCache[deKey];
180
+ this.persistVisitorStore().catch(err => {
181
+ _logger.Logger.logError('StorageHelper: Error removing expired value', err);
182
+ });
183
+ }
184
+ }
185
+ return defaultValue;
186
+ }
187
+ case _mpClientSdk.DeStorageDuration.EVENT:
188
+ case _mpClientSdk.DeStorageDuration.NONE:
189
+ default:
190
+ // No retrieval for EVENT or NONE
191
+ return defaultValue;
192
+ }
193
+ } catch (err) {
194
+ _logger.Logger.logError('StorageHelper: Error in deStorageDurationGet', err);
195
+ return defaultValue;
196
+ }
197
+ }
198
+
199
+ /**
200
+ * Clear all session-scoped values (called on new session if needed)
201
+ */
202
+ static clearSessionStore() {
203
+ this.sessionStore = {};
204
+ _logger.Logger.logDbg('StorageHelper: Cleared session store');
205
+ }
206
+
207
+ /**
208
+ * Clear all visitor-scoped values
209
+ */
210
+ static async clearVisitorStore() {
211
+ try {
212
+ this.visitorStoreCache = {};
213
+ await _asyncStorage.default.removeItem(VISITOR_STORE_KEY);
214
+ _logger.Logger.logDbg('StorageHelper: Cleared visitor store');
215
+ } catch (err) {
216
+ _logger.Logger.logError('StorageHelper: Error clearing visitor store', err);
217
+ }
218
+ }
219
+ }
220
+ exports.StorageHelper = StorageHelper;
221
+ // In-memory store for SESSION-scoped values (cleared on app restart)
222
+ _defineProperty(StorageHelper, "sessionStore", {});
223
+ // In-memory cache of visitor store (loaded from AsyncStorage on init)
224
+ _defineProperty(StorageHelper, "visitorStoreCache", {});
225
+ // Flag to track if initialized
226
+ _defineProperty(StorageHelper, "isInitialized", false);
227
+ //# sourceMappingURL=storage-helper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_asyncStorage","_interopRequireDefault","require","_mpClientSdk","_logger","e","__esModule","default","_defineProperty","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","VISITOR_STORE_KEY","VISITOR_EXPIRY_MS","StorageHelper","initialize","isInitialized","storedData","AsyncStorage","getItem","visitorStoreCache","JSON","parse","Logger","logDbg","keys","length","clearExpiredVisitorData","err","logError","now","Date","keysToRemove","key","entry","timestamp","push","persistVisitorStore","setItem","stringify","isDefined","undefined","deStorageDurationSet","deKey","storageDuration","DeStorageDuration","EVENT","SESSION","sessionStore","VISITOR","catch","NONE","deStorageDurationGet","defaultValue","sessionValue","visitorEntry","clearSessionStore","clearVisitorStore","removeItem","exports"],"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":[]}
@@ -11,6 +11,7 @@ var _eventBus = require("./event-bus");
11
11
  var _reactNative = require("react-native");
12
12
  var _reactNativeUrlPolyfill = require("react-native-url-polyfill");
13
13
  var _asyncStorage = _interopRequireDefault(require("@react-native-async-storage/async-storage"));
14
+ var _ulid = require("ulid");
14
15
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
15
16
  class Utils {
16
17
  static triggerEvent(eventName, payload) {
@@ -118,7 +119,7 @@ class Utils {
118
119
  if (tfItem.eTyp === 'URL_ENC') {
119
120
  paramValue = encodeURIComponent(paramValue);
120
121
  } else if (tfItem.eTyp === 'BASE64') {
121
- paramValue = Buffer.from(paramValue).toString('base64');
122
+ paramValue = this.toBase64(paramValue);
122
123
  }
123
124
  }
124
125
  }
@@ -166,8 +167,25 @@ class Utils {
166
167
  _logger.Logger.logError('Error executing function: ', err);
167
168
  }
168
169
  }
170
+
171
+ /**
172
+ * Encode string to Base64 - React Native compatible
173
+ * Works with both ASCII and UTF-8 strings
174
+ * @param str String to encode
175
+ * @returns Base64 encoded string
176
+ */
177
+ static toBase64(str) {
178
+ try {
179
+ // Handle UTF-8 strings properly using encodeURIComponent + unescape trick
180
+ // This works in all JavaScript engines including React Native's Hermes/JSC
181
+ return btoa(unescape(encodeURIComponent(str)));
182
+ } catch (err) {
183
+ _logger.Logger.logError('Error encoding to Base64:', err);
184
+ return str; // Return original value if encoding fails
185
+ }
186
+ }
169
187
  static getUniqueID() {
170
- return _constants.Constants.LARGE_RANDOM_POOL();
188
+ return (0, _ulid.ulid)();
171
189
  }
172
190
 
173
191
  /**
@@ -1 +1 @@
1
- {"version":3,"names":["_constants","require","_logger","_flat","_eventBus","_reactNative","_reactNativeUrlPolyfill","_asyncStorage","_interopRequireDefault","e","__esModule","default","Utils","triggerEvent","eventName","payload","EventBus","calculateMsp","dim","limit","scale","width","height","_makeUniqueStringArray","input","Set","parseQueryParamsToObject","url","op","trim","length","urlObject","URL","searchParams","forEach","value","name","err","Logger","logError","isTablet","Dimensions","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","Buffer","from","toString","isMatch","toTest","inputs","ignoreCase","fullMatch","isMatched","i","_val","convertToRegex","test","regExpEscape","replace","RegExp","split","map","join","safeExecute","fn","getUniqueID","Constants","LARGE_RANDOM_POOL","getHttp","response","fetch","method","headers","ok","Error","status","json","error","getValueFromAsyncStorage","defaultValue","AsyncStorage","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","unflatten","object","delimiter","flattenObject","flatten","maxDepth","safe","exports"],"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';\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 = Buffer.from(paramValue).toString('base64');\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 static getUniqueID(): string {\n return Constants.LARGE_RANDOM_POOL();\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","require","_logger","_flat","_eventBus","_reactNative","_reactNativeUrlPolyfill","_asyncStorage","_interopRequireDefault","_ulid","e","__esModule","default","Utils","triggerEvent","eventName","payload","EventBus","calculateMsp","dim","limit","scale","width","height","_makeUniqueStringArray","input","Set","parseQueryParamsToObject","url","op","trim","length","urlObject","URL","searchParams","forEach","value","name","err","Logger","logError","isTablet","Dimensions","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","ulid","getHttp","response","fetch","method","headers","ok","Error","status","json","error","getValueFromAsyncStorage","defaultValue","AsyncStorage","getItem","JSON","parse","setValueToAsyncStorage","setItem","stringify","getSimpleDebugId","prefix","randomNumber","min","max","Math","ceil","random","unFlattenResourceParams","transformMap","item","pId","children","id","push","values","sort","Constants","sortAscending","unFlattenObject","obj","unflatten","object","delimiter","flattenObject","flatten","maxDepth","safe","exports"],"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":[]}