@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,19 +1,26 @@
1
- export let ParamResourceEncodingType;
2
- (function (ParamResourceEncodingType) {
1
+ export let DeStorageDuration = /*#__PURE__*/function (DeStorageDuration) {
2
+ DeStorageDuration["NONE"] = "NONE";
3
+ DeStorageDuration["EVENT"] = "EVENT";
4
+ DeStorageDuration["SESSION"] = "SESSION";
5
+ DeStorageDuration["VISITOR"] = "VISITOR";
6
+ return DeStorageDuration;
7
+ }({});
8
+ export let ParamResourceEncodingType = /*#__PURE__*/function (ParamResourceEncodingType) {
3
9
  ParamResourceEncodingType["URL_ENC"] = "URL_ENC";
4
10
  ParamResourceEncodingType["BASE64"] = "BASE64";
5
- })(ParamResourceEncodingType || (ParamResourceEncodingType = {}));
6
- export let ParamResourceHashType;
7
- (function (ParamResourceHashType) {
11
+ return ParamResourceEncodingType;
12
+ }({});
13
+ export let ParamResourceHashType = /*#__PURE__*/function (ParamResourceHashType) {
8
14
  ParamResourceHashType["SHA256"] = "SHA256";
9
15
  ParamResourceHashType["SHA512"] = "SHA512";
10
- })(ParamResourceHashType || (ParamResourceHashType = {}));
11
- export let ParamResourceValSrc;
12
- (function (ParamResourceValSrc) {
16
+ return ParamResourceHashType;
17
+ }({});
18
+ export let ParamResourceValSrc = /*#__PURE__*/function (ParamResourceValSrc) {
13
19
  ParamResourceValSrc["STATIC"] = "STATIC";
14
20
  ParamResourceValSrc["DE"] = "DE";
15
21
  ParamResourceValSrc["TRANS_FUNC"] = "TRANS_FUNC";
16
22
  ParamResourceValSrc["CHILDREN"] = "CHILDREN";
17
23
  ParamResourceValSrc["TG_JSON_PATH"] = "TG_JSON_PATH";
18
- })(ParamResourceValSrc || (ParamResourceValSrc = {}));
24
+ return ParamResourceValSrc;
25
+ }({});
19
26
  //# sourceMappingURL=mp-client-sdk.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["ParamResourceEncodingType","ParamResourceHashType","ParamResourceValSrc"],"sources":["mp-client-sdk.ts"],"sourcesContent":["import type { MapLike } from '../common/app-types';\n\nexport interface ClientSdkDeItem {\n nm: string;\n typ: string;\n key?: string;\n def?: any;\n cl?: boolean;\n lwcase?: boolean;\n fn?: (deHelper: any, input: any) => any;\n isAsync?: boolean;\n fnTOut?: number;\n}\n\nexport enum ParamResourceEncodingType {\n URL_ENC = 'URL_ENC',\n BASE64 = 'BASE64',\n}\n\nexport enum ParamResourceHashType {\n SHA256 = 'SHA256',\n SHA512 = 'SHA512',\n}\n\nexport enum ParamResourceValSrc {\n STATIC = 'STATIC',\n DE = 'DE',\n TRANS_FUNC = 'TRANS_FUNC',\n CHILDREN = 'CHILDREN',\n TG_JSON_PATH = 'TG_JSON_PATH',\n}\n\nexport interface SdkParamEncodingTransformer {\n nm: string;\n eTyp: 'URL_ENC' | 'BASE64';\n o?: number;\n}\n\nexport interface SdkParamHashingTransformer {\n nm: string;\n hTyp: ParamResourceHashType;\n o?: number;\n}\n\nexport interface SdkParamIgnoreEmptyTransformer {\n nm: string;\n igEmpty: boolean;\n o?: number; // order\n}\n\nexport type TFType = (\n | SdkParamHashingTransformer\n | SdkParamEncodingTransformer\n | SdkParamIgnoreEmptyTransformer\n)[];\n\nexport interface ClientSdkParamItem {\n id: string; // id\n nm: string; // name\n rqd?: boolean; // is mandatory\n tf?: TFType; // transformation array\n prLvl?: boolean; // is provider level attribute\n pId?: string; // parent id\n sv?: string; // static value\n de?: string; // data element id\n tfId?: string; // transformation function id\n children?: ClientSdkParamItem[];\n exclude_from_req_body?: boolean;\n fKey: string; // flat key\n val_src: string;\n}\n\nexport interface ClientSdkQcCondition {\n param: string; // param name\n i?: string[]; // include conditions\n e?: string[]; // exclude conditions\n i_ect: boolean; // is exact match for include\n i_cs?: boolean; // is case-sensitive for include\n e_ect?: boolean; // is exact match for exclude\n e_cs?: boolean; // is case-sensitive for exclude\n}\n\nexport interface ClientSdkPrItem {\n nm: string;\n url?: string; // base url\n typ: string; // js or img provider\n sTyp: string; // r or i sub type\n rParams?: MapLike<ClientSdkParamItem>; // parameters\n hrs?: MapLike<string>; // headers\n ext?: string; // sdk extras joined into a string\n src?: string; // src of the sdk\n sync?: boolean; // should be loaded sync or async\n pr: string; // whitelisted or black listed\n chld?: boolean; // has at least one parameter whose val_src is CHILDREN\n}\n\nexport interface ClientSdkTfnItem {\n nm: string; // name\n fn: (input: any) => any; // js function in case this is a jsv data element\n rParams: MapLike<ClientSdkParamItem>; // parameters\n}\n\nexport interface ClientSdkQcItem {\n nm: string;\n id: string;\n c: ClientSdkQcCondition[];\n}\n\nexport interface ClientSdkTagItem {\n nm: string; // name\n p: string; // provider id\n url: string; // tag url\n rParams?: MapLike<ClientSdkParamItem>;\n st: number; // start time - in epoch seconds\n ex: number; // expiry time - in epoch seconds\n qc: string[];\n img?: boolean; // is image tag\n wrk?: boolean; // is web worker compatible\n chld?: boolean; // has at least one parameter whose val_src is CHILDREN\n}\n\nexport interface ClientSdkSettingsItem {\n dbg: boolean; // debug_enabled\n err: boolean; // error_enabled\n c_dom: string; // default cookie domain\n v_dur: number; // visit duration\n c_url: string; // collector_url\n bare_c_url?: string; // bare collector url - transient variable\n wh_idl?: string[]; // list of whitelisted idl events\n wh_domains?: string[]; // list of white listed domains\n c_url_lkp?: MapLike<{ v: string; ig: boolean; ect: boolean }>; // collector url look up\n v_id: string; // vendor_id\n p_id: string; // project_id\n ev: string; // environment\n ev_id: string; // environment id\n dly: number; // trigger_delay\n sst: boolean; // should enable server side. this will be set to true if there is atleast one sever side tag defined\n idl: boolean; // should enable ID Link service. this will be set to true if the vendor has ID Link enabled\n c_typ?: string; // the type of CSP, example nonce.\n c_src?: string; // the source of CSP, example meta_tag for nonce type.\n c_key?: string; // the data for CSP.\n v: string; // core sdk version\n bld_dt: string; // sdk build date and time from MP - this is not for the core sdk\n p_view?: boolean; // should fire page info call or not to metrics\n dws_c_t: 'j' | 'n'; // client side down stream (j = java, n = node)\n dws_s_t: 'j' | 'n'; // server side down stream (j = java, n = node)\n}\n\nexport interface BaseResourceParamType {\n id: string; // id of param\n nm: string; // name\n o?: number; // order\n pId?: string; // parent id\n children?: BaseResourceParamType[];\n}\n\nexport interface MpClientSdk {\n langKey: string; // language data element id\n pcKey: string; // privacy compliance key\n cDomKey?: string; // collector domain tfn key\n domWListKey?: string; // domain white list tfn function\n d: MapLike<ClientSdkDeItem>; // data element map\n qc?: ClientSdkQcItem[]; // qualification criteria\n t?: MapLike<ClientSdkTagItem>; // tag map\n p?: MapLike<ClientSdkPrItem>; // provider map\n tfn?: MapLike<ClientSdkTfnItem>; // list of transformation functions\n s: ClientSdkSettingsItem; // settings data item\n dtmE: string[]; // list of dtm direct call events magic pixel should be interested in\n ctmE: string[]; // list of custom javascript event magic pixel should be interested in\n mpDlE: string[]; // list of MagicPixel data layer event magic pixel should be interested in\n sseDtmE: string[]; // list of server side dtm events that we should trigger sst tag\n sseCtmE: string[]; // list of custom window events that we should trigger sst tag\n sseMpDlE: string[]; // list of mp dl events that should trigger the sst tag\n}\n"],"mappings":"AAcA,WAAYA,yBAAyB;AAGpC,WAHWA,yBAAyB;EAAzBA,yBAAyB;EAAzBA,yBAAyB;AAAA,GAAzBA,yBAAyB,KAAzBA,yBAAyB;AAKrC,WAAYC,qBAAqB;AAGhC,WAHWA,qBAAqB;EAArBA,qBAAqB;EAArBA,qBAAqB;AAAA,GAArBA,qBAAqB,KAArBA,qBAAqB;AAKjC,WAAYC,mBAAmB;AAM9B,WANWA,mBAAmB;EAAnBA,mBAAmB;EAAnBA,mBAAmB;EAAnBA,mBAAmB;EAAnBA,mBAAmB;EAAnBA,mBAAmB;AAAA,GAAnBA,mBAAmB,KAAnBA,mBAAmB","ignoreList":[]}
1
+ {"version":3,"names":["DeStorageDuration","ParamResourceEncodingType","ParamResourceHashType","ParamResourceValSrc"],"sources":["mp-client-sdk.ts"],"sourcesContent":["import type { MapLike } from '../common/app-types';\n\nexport interface ClientSdkDeItem {\n nm: string;\n typ: string;\n key?: string;\n def?: any;\n cl?: boolean;\n lwcase?: boolean;\n fn?: (deHelper: any, input: any) => any;\n isAsync?: boolean;\n fnTOut?: number;\n stDur?: DeStorageDuration; // storage duration\n}\n\nexport enum DeStorageDuration {\n NONE = 'NONE',\n EVENT = 'EVENT',\n SESSION = 'SESSION',\n VISITOR = 'VISITOR',\n}\n\nexport enum ParamResourceEncodingType {\n URL_ENC = 'URL_ENC',\n BASE64 = 'BASE64',\n}\n\nexport enum ParamResourceHashType {\n SHA256 = 'SHA256',\n SHA512 = 'SHA512',\n}\n\nexport enum ParamResourceValSrc {\n STATIC = 'STATIC',\n DE = 'DE',\n TRANS_FUNC = 'TRANS_FUNC',\n CHILDREN = 'CHILDREN',\n TG_JSON_PATH = 'TG_JSON_PATH',\n}\n\nexport interface SdkParamEncodingTransformer {\n nm: string;\n eTyp: 'URL_ENC' | 'BASE64';\n o?: number;\n}\n\nexport interface SdkParamHashingTransformer {\n nm: string;\n hTyp: ParamResourceHashType;\n o?: number;\n}\n\nexport interface SdkParamIgnoreEmptyTransformer {\n nm: string;\n igEmpty: boolean;\n o?: number; // order\n}\n\nexport type TFType = (\n | SdkParamHashingTransformer\n | SdkParamEncodingTransformer\n | SdkParamIgnoreEmptyTransformer\n)[];\n\nexport interface ClientSdkParamItem {\n id: string; // id\n nm: string; // name\n rqd?: boolean; // is mandatory\n tf?: TFType; // transformation array\n prLvl?: boolean; // is provider level attribute\n pId?: string; // parent id\n sv?: string; // static value\n de?: string; // data element id\n tfId?: string; // transformation function id\n children?: ClientSdkParamItem[];\n exclude_from_req_body?: boolean;\n fKey: string; // flat key\n val_src: string;\n}\n\nexport interface ClientSdkQcCondition {\n param: string; // param name\n i?: string[]; // include conditions\n e?: string[]; // exclude conditions\n i_ect: boolean; // is exact match for include\n i_cs?: boolean; // is case-sensitive for include\n e_ect?: boolean; // is exact match for exclude\n e_cs?: boolean; // is case-sensitive for exclude\n}\n\nexport interface ClientSdkPrItem {\n nm: string;\n url?: string; // base url\n typ: string; // js or img provider\n sTyp: string; // r or i sub type\n rParams?: MapLike<ClientSdkParamItem>; // parameters\n hrs?: MapLike<string>; // headers\n ext?: string; // sdk extras joined into a string\n src?: string; // src of the sdk\n sync?: boolean; // should be loaded sync or async\n pr: string; // whitelisted or black listed\n chld?: boolean; // has at least one parameter whose val_src is CHILDREN\n}\n\nexport interface ClientSdkTfnItem {\n nm: string; // name\n fn: (input: any) => any; // js function in case this is a jsv data element\n rParams: MapLike<ClientSdkParamItem>; // parameters\n}\n\nexport interface ClientSdkQcItem {\n nm: string;\n id: string;\n c: ClientSdkQcCondition[];\n}\n\nexport interface ClientSdkTagItem {\n nm: string; // name\n p: string; // provider id\n url: string; // tag url\n rParams?: MapLike<ClientSdkParamItem>;\n st: number; // start time - in epoch seconds\n ex: number; // expiry time - in epoch seconds\n qc: string[];\n img?: boolean; // is image tag\n wrk?: boolean; // is web worker compatible\n chld?: boolean; // has at least one parameter whose val_src is CHILDREN\n}\n\nexport interface ClientSdkSettingsItem {\n dbg: boolean; // debug_enabled\n err: boolean; // error_enabled\n c_dom: string; // default cookie domain\n v_dur: number; // visit duration\n c_url: string; // collector_url\n bare_c_url?: string; // bare collector url - transient variable\n wh_idl?: string[]; // list of whitelisted idl events\n wh_domains?: string[]; // list of white listed domains\n c_url_lkp?: MapLike<{ v: string; ig: boolean; ect: boolean }>; // collector url look up\n v_id: string; // vendor_id\n p_id: string; // project_id\n ev: string; // environment\n ev_id: string; // environment id\n dly: number; // trigger_delay\n sst: boolean; // should enable server side. this will be set to true if there is atleast one sever side tag defined\n idl: boolean; // should enable ID Link service. this will be set to true if the vendor has ID Link enabled\n c_typ?: string; // the type of CSP, example nonce.\n c_src?: string; // the source of CSP, example meta_tag for nonce type.\n c_key?: string; // the data for CSP.\n v: string; // core sdk version\n bld_dt: string; // sdk build date and time from MP - this is not for the core sdk\n p_view?: boolean; // should fire page info call or not to metrics\n dws_c_t: 'j' | 'n'; // client side down stream (j = java, n = node)\n dws_s_t: 'j' | 'n'; // server side down stream (j = java, n = node)\n}\n\nexport interface BaseResourceParamType {\n id: string; // id of param\n nm: string; // name\n o?: number; // order\n pId?: string; // parent id\n children?: BaseResourceParamType[];\n}\n\nexport interface MpClientSdk {\n langKey: string; // language data element id\n pcKey: string; // privacy compliance key\n cDomKey?: string; // collector domain tfn key\n domWListKey?: string; // domain white list tfn function\n d: MapLike<ClientSdkDeItem>; // data element map\n qc?: ClientSdkQcItem[]; // qualification criteria\n t?: MapLike<ClientSdkTagItem>; // tag map\n p?: MapLike<ClientSdkPrItem>; // provider map\n tfn?: MapLike<ClientSdkTfnItem>; // list of transformation functions\n s: ClientSdkSettingsItem; // settings data item\n dtmE: string[]; // list of dtm direct call events magic pixel should be interested in\n ctmE: string[]; // list of custom javascript event magic pixel should be interested in\n mpDlE: string[]; // list of MagicPixel data layer event magic pixel should be interested in\n sseDtmE: string[]; // list of server side dtm events that we should trigger sst tag\n sseCtmE: string[]; // list of custom window events that we should trigger sst tag\n sseMpDlE: string[]; // list of mp dl events that should trigger the sst tag\n}\n"],"mappings":"AAeA,WAAYA,iBAAiB,0BAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAA,OAAjBA,iBAAiB;AAAA;AAO7B,WAAYC,yBAAyB,0BAAzBA,yBAAyB;EAAzBA,yBAAyB;EAAzBA,yBAAyB;EAAA,OAAzBA,yBAAyB;AAAA;AAKrC,WAAYC,qBAAqB,0BAArBA,qBAAqB;EAArBA,qBAAqB;EAArBA,qBAAqB;EAAA,OAArBA,qBAAqB;AAAA;AAKjC,WAAYC,mBAAmB,0BAAnBA,mBAAmB;EAAnBA,mBAAmB;EAAnBA,mBAAmB;EAAnBA,mBAAmB;EAAnBA,mBAAmB;EAAnBA,mBAAmB;EAAA,OAAnBA,mBAAmB;AAAA","ignoreList":[]}
@@ -3,12 +3,20 @@
3
3
  * @param de
4
4
  */
5
5
  import { Utils } from '../common/utils';
6
+ import { DeStorageDuration } from '../models/mp-client-sdk';
6
7
  import { DataStore } from '../common/data-store';
7
8
  import { Logger } from '../common/logger';
9
+ import { StorageHelper } from '../common/storage-helper';
8
10
 
9
11
  // Note: JSV (JavaScript functions) are not supported in React Native
10
12
  // This timeout function is kept for potential future use
11
13
 
14
+ /**
15
+ * Check if a value is defined (not null, undefined, or empty string)
16
+ */
17
+ function isDefined(value) {
18
+ return value !== null && value !== undefined && value !== '';
19
+ }
12
20
  const dElemProcessors = {
13
21
  mpdl: (helper, elem, eventData) => {
14
22
  return processMpDl(helper, elem, eventData);
@@ -47,16 +55,18 @@ const dElemProcessors = {
47
55
  },
48
56
  mp_visit_depth: (_helper, _elem, _eventData) => {
49
57
  var _DataStore$getVisitIn2;
50
- return ((_DataStore$getVisitIn2 = DataStore.getVisitInfo()) === null || _DataStore$getVisitIn2 === void 0 ? void 0 : _DataStore$getVisitIn2.visitDepth) ?? 0;
58
+ // Visit depth should start at 1 (first page), not 0
59
+ // Return at least 1 to ensure first page view shows depth = 1
60
+ const depth = ((_DataStore$getVisitIn2 = DataStore.getVisitInfo()) === null || _DataStore$getVisitIn2 === void 0 ? void 0 : _DataStore$getVisitIn2.visitDepth) ?? 0;
61
+ return Math.max(1, depth);
51
62
  },
52
63
  /* Browser/Platform data elements */
53
64
  pg_browser: (_helper, _elem, _eventData) => {
54
65
  return DataStore.getDeviceOs(); // Using device OS as browser equivalent
55
66
  },
56
- /* User status data element - TODO: Implement getMpUserStatus in DataStore */
67
+ /* User status data element - 1 = new visitor (first visit), 0 = returning visitor */
57
68
  mp_new_vis: (_helper, _elem, _eventData) => {
58
- // TODO: Implement user status functionality
59
- return '1'; // Default to new visitor
69
+ return DataStore.getMpUserStatus();
60
70
  },
61
71
  pg_random: (_helper, _elem, _eventData) => {
62
72
  return Utils.getUniqueID();
@@ -90,6 +100,27 @@ const dElemProcessors = {
90
100
  pg_mp_dl_evt_name: (_helper, _elem, _eventData) => {
91
101
  _elem.key = 'ev._eventName';
92
102
  return processMpDl(_helper, _elem, _eventData);
103
+ },
104
+ pg_hash: (_helper, _elem, _eventData) => {
105
+ return '';
106
+ },
107
+ pg_title: (_helper, _elem, _eventData) => {
108
+ return '';
109
+ },
110
+ pg_params: (_helper, _elem, _eventData) => {
111
+ return '';
112
+ },
113
+ pg_domain: (_helper, _elem, _eventData) => {
114
+ return '';
115
+ },
116
+ pg_srch: (_helper, _elem, _eventData) => {
117
+ return '';
118
+ },
119
+ pg_referrer: (_helper, _elem, _eventData) => {
120
+ return '';
121
+ },
122
+ pg_url: (_helper, _elem, _eventData) => {
123
+ return '';
93
124
  }
94
125
  // Note: JSV (JavaScript functions) processor removed - not supported in React Native
95
126
  };
@@ -135,11 +166,24 @@ export async function processOneDataElement(_sdkDataElements, deItem, deHelper,
135
166
  try {
136
167
  if (dElemProcessors[deItem.typ]) {
137
168
  Logger.logDbg('Processing data element: ', deItem.nm);
138
- const deValue = await dElemProcessors[deItem.typ](deHelper, deItem, eventData);
169
+ let deValue = await dElemProcessors[deItem.typ](deHelper, deItem, eventData);
170
+
171
+ // Default storage duration to EVENT if not defined
172
+ if (!deItem.stDur) {
173
+ deItem.stDur = DeStorageDuration.EVENT;
174
+ }
139
175
 
140
- // TODO: Implement storage duration functionality for React Native
141
- // For now, we'll just return the value without persistence
176
+ // If data element has persistence enabled, store the value
177
+ StorageHelper.deStorageDurationSet(deItem.key, deValue, deItem.stDur);
142
178
 
179
+ // If value is not defined, try to retrieve from storage
180
+ // This allows values like gclid to persist across page loads
181
+ if (!isDefined(deValue)) {
182
+ const storedValue = StorageHelper.deStorageDurationGet(deItem.key, deItem.def, deItem.stDur);
183
+ if (isDefined(storedValue)) {
184
+ deValue = storedValue;
185
+ }
186
+ }
143
187
  return deValue;
144
188
  } else {
145
189
  Logger.logError('No processor found for de typ: ', deItem.typ);
@@ -1 +1 @@
1
- {"version":3,"names":["Utils","DataStore","Logger","dElemProcessors","mpdl","helper","elem","eventData","processMpDl","pg_os","_helper","_elem","_eventData","getOperatingSystem","visit_id","getVisitId","pg_dtype","getDeviceType","mp_geo_pcode","_DataStore$getGeoInfo","getGeoInfo","postal","undefined","mp_geo_country","_DataStore$getGeoInfo2","country","mp_geo_region","_DataStore$getGeoInfo3","region","mp_geo_city","_DataStore$getGeoInfo4","city","mp_visit_count","_DataStore$getVisitIn","getVisitInfo","visitCt","mp_visit_depth","_DataStore$getVisitIn2","visitDepth","pg_browser","getDeviceOs","mp_new_vis","pg_random","getUniqueID","pg_empty_val","mp_dvc_id","getDeviceId","mp_vis_id","getMpId","mp_org_id","getOrgId","mp_c_sdk_v","getCoreVersion","mp_c_sdk_env","getMpEnv","pg_mp_dl_evt_id","key","pg_mp_dl_evt_ts","pg_mp_dl_evt_name","generalCleanAndEscape","de","val","fn","cl","_val","trim","indexOf","replace","lwcase","_val2","toLowerCase","err","logError","def","processOneDataElement","_sdkDataElements","deItem","deHelper","_optDeKeys","typ","logDbg","nm","deValue","processDataElements","sdkDataElements","optDeKeys","getDataElements","deKeys","length","Object","keys","getDataElementHelpers","setDataElements","DataElementProcessor"],"sources":["data-element.processor.ts"],"sourcesContent":["/**\n * Process data element of type url parameter\n * @param de\n */\nimport { Utils } from '../common/utils';\nimport type { DeJsvHelper, MapLike } from '../common/app-types';\nimport type { ClientSdkDeItem } from '../models/mp-client-sdk';\nimport { DataStore } from '../common/data-store';\nimport { Logger } from '../common/logger';\n\n// Note: JSV (JavaScript functions) are not supported in React Native\n// This timeout function is kept for potential future use\n\nconst dElemProcessors: MapLike<\n (\n helper: DeJsvHelper,\n elem: ClientSdkDeItem,\n eventData?: Record<string, any>\n ) => any\n> = {\n mpdl: (\n helper: DeJsvHelper,\n elem: ClientSdkDeItem,\n eventData?: Record<string, any>\n ): any => {\n return processMpDl(helper, elem, eventData);\n },\n pg_os: (\n _helper: DeJsvHelper,\n _elem: ClientSdkDeItem,\n _eventData?: Record<string, any>\n ): any => {\n // already browser is in lower case, so no need to do it again\n return DataStore.getOperatingSystem();\n },\n visit_id: (\n _helper: DeJsvHelper,\n _elem: ClientSdkDeItem,\n _eventData?: Record<string, any>\n ): any => {\n return DataStore.getVisitId();\n },\n pg_dtype: (_helper: DeJsvHelper, _elem: ClientSdkDeItem): any => {\n return DataStore.getDeviceType();\n },\n /* Geo location data elements */\n mp_geo_pcode: (\n _helper: DeJsvHelper,\n _elem: ClientSdkDeItem,\n _eventData?: Record<string, any>\n ): any => {\n return DataStore.getGeoInfo()?.postal ?? undefined;\n },\n mp_geo_country: (\n _helper: DeJsvHelper,\n _elem: ClientSdkDeItem,\n _eventData?: Record<string, any>\n ): any => {\n return DataStore.getGeoInfo()?.country ?? undefined;\n },\n\n mp_geo_region: (\n _helper: DeJsvHelper,\n _elem: ClientSdkDeItem,\n _eventData?: Record<string, any>\n ): any => {\n return DataStore.getGeoInfo()?.region ?? undefined;\n },\n mp_geo_city: (\n _helper: DeJsvHelper,\n _elem: ClientSdkDeItem,\n _eventData?: Record<string, any>\n ): any => {\n return DataStore.getGeoInfo()?.city ?? undefined;\n },\n /* Visit info data elements */\n mp_visit_count: (\n _helper: DeJsvHelper,\n _elem: ClientSdkDeItem,\n _eventData?: Record<string, any>\n ): any => {\n return DataStore.getVisitInfo()?.visitCt ?? 0;\n },\n mp_visit_depth: (\n _helper: DeJsvHelper,\n _elem: ClientSdkDeItem,\n _eventData?: Record<string, any>\n ): any => {\n return DataStore.getVisitInfo()?.visitDepth ?? 0;\n },\n /* Browser/Platform data elements */\n pg_browser: (\n _helper: DeJsvHelper,\n _elem: ClientSdkDeItem,\n _eventData?: Record<string, any>\n ): any => {\n return DataStore.getDeviceOs(); // Using device OS as browser equivalent\n },\n /* User status data element - TODO: Implement getMpUserStatus in DataStore */\n mp_new_vis: (\n _helper: DeJsvHelper,\n _elem: ClientSdkDeItem,\n _eventData?: Record<string, any>\n ): any => {\n // TODO: Implement user status functionality\n return '1'; // Default to new visitor\n },\n pg_random: (\n _helper: DeJsvHelper,\n _elem: ClientSdkDeItem,\n _eventData?: Record<string, any>\n ): any => {\n return Utils.getUniqueID();\n },\n pg_empty_val: (\n _helper: DeJsvHelper,\n _elem: ClientSdkDeItem,\n _eventData?: Record<string, any>\n ): any => {\n return '';\n },\n mp_dvc_id: (\n _helper: DeJsvHelper,\n _elem: ClientSdkDeItem,\n _eventData?: Record<string, any>\n ): any => {\n return DataStore.getDeviceId();\n },\n mp_vis_id: (\n _helper: DeJsvHelper,\n _elem: ClientSdkDeItem,\n _eventData?: Record<string, any>\n ): any => {\n return DataStore.getMpId();\n },\n mp_org_id: (\n _helper: DeJsvHelper,\n _elem: ClientSdkDeItem,\n _eventData?: Record<string, any>\n ): any => {\n return DataStore.getOrgId();\n },\n mp_c_sdk_v: (\n _helper: DeJsvHelper,\n _elem: ClientSdkDeItem,\n _eventData?: Record<string, any>\n ): any => {\n return DataStore.getCoreVersion();\n },\n mp_c_sdk_env: (\n _helper: DeJsvHelper,\n _elem: ClientSdkDeItem,\n _eventData?: Record<string, any>\n ): any => {\n return DataStore.getMpEnv();\n },\n pg_mp_dl_evt_id: (\n _helper: DeJsvHelper,\n _elem: ClientSdkDeItem,\n _eventData?: Record<string, any>\n ): any => {\n _elem.key = 'ev._id';\n return processMpDl(_helper, _elem, _eventData);\n },\n pg_mp_dl_evt_ts: (\n _helper: DeJsvHelper,\n _elem: ClientSdkDeItem,\n _eventData?: Record<string, any>\n ): any => {\n _elem.key = 'ev._tsMs';\n return processMpDl(_helper, _elem, _eventData);\n },\n pg_mp_dl_evt_name: (\n _helper: DeJsvHelper,\n _elem: ClientSdkDeItem,\n _eventData?: Record<string, any>\n ): any => {\n _elem.key = 'ev._eventName';\n return processMpDl(_helper, _elem, _eventData);\n },\n // Note: JSV (JavaScript functions) processor removed - not supported in React Native\n};\n\nfunction generalCleanAndEscape(\n helper: DeJsvHelper,\n de: ClientSdkDeItem,\n val: any\n): string {\n if (typeof de.fn === 'function') {\n val = de.fn(helper, val);\n return val;\n } else {\n if (typeof val === 'string') {\n // clean\n if (de.cl) {\n val = val?.trim();\n // see if it has a single quote or double quote, if so, escape it\n if (val.indexOf(`'`) > -1) {\n val = val.replace(/'/g, '');\n }\n\n if (val.indexOf(`\"`) > -1) {\n val = val.replace(/\"/g, '');\n }\n }\n if (de.lwcase) {\n val = val?.toLowerCase();\n }\n }\n return val;\n }\n}\n\nfunction processMpDl(\n helper: DeJsvHelper,\n de: ClientSdkDeItem,\n eventData?: Record<string, any>\n): any {\n try {\n if (de.key) {\n if (eventData && typeof eventData[de.key] !== 'undefined') {\n return generalCleanAndEscape(helper, de, eventData[de.key]);\n }\n }\n } catch (err) {\n Logger.logError('Error processing mp dl variable: ', err);\n }\n return generalCleanAndEscape(helper, de, de.def);\n}\n\nexport async function processOneDataElement(\n _sdkDataElements: MapLike<ClientSdkDeItem>,\n deItem: ClientSdkDeItem,\n deHelper: any,\n eventData?: Record<string, any>,\n _optDeKeys?: string[]\n): Promise<any> {\n try {\n if (dElemProcessors[deItem.typ]) {\n Logger.logDbg('Processing data element: ', deItem.nm);\n const deValue = await dElemProcessors[deItem.typ](\n deHelper,\n deItem,\n eventData\n );\n\n // TODO: Implement storage duration functionality for React Native\n // For now, we'll just return the value without persistence\n\n return deValue;\n } else {\n Logger.logError('No processor found for de typ: ', deItem.typ);\n }\n } catch (err) {\n Logger.logError(\n 'Error processing data element: ',\n deItem.key,\n ' with error: ',\n err\n );\n }\n\n return deItem.def;\n}\n\n/**\n * Process all the data elements at once, or if a set of keys are specified, processes only\n * those keys and updates the dataElements object in DataStore\n * @param sdkDataElements\n * @param eventData\n * @param optDeKeys\n */\nexport async function processDataElements(\n sdkDataElements: MapLike<ClientSdkDeItem>,\n eventData?: Record<string, any>,\n optDeKeys?: string[]\n): Promise<MapLike<any>> {\n const de = DataStore.getDataElements();\n const deKeys =\n optDeKeys && optDeKeys.length > 0\n ? optDeKeys\n : Object.keys(sdkDataElements);\n\n try {\n const deHelper = DataStore.getDataElementHelpers();\n for (const key of deKeys) {\n de[key] = await processOneDataElement(\n sdkDataElements,\n sdkDataElements[key],\n deHelper,\n eventData,\n optDeKeys\n );\n }\n } catch (err) {\n Logger.logError('Error processing data elements: ', err);\n }\n\n DataStore.setDataElements(de);\n Logger.logDbg('Data Elements: ', de);\n return de;\n}\n\nexport class DataElementProcessor {\n /**\n * Process all the data elements at once, or if a set of keys are specified, processes only\n * those keys and updates the dataElements object in DataStore\n * @param sdkDataElements\n * @param eventData\n * @param optDeKeys\n */\n static async processDataElements(\n sdkDataElements: MapLike<ClientSdkDeItem>,\n eventData?: Record<string, any>,\n optDeKeys?: string[]\n ): Promise<MapLike<any>> {\n return processDataElements(sdkDataElements, eventData, optDeKeys);\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["Utils","DeStorageDuration","DataStore","Logger","StorageHelper","isDefined","value","undefined","dElemProcessors","mpdl","helper","elem","eventData","processMpDl","pg_os","_helper","_elem","_eventData","getOperatingSystem","visit_id","getVisitId","pg_dtype","getDeviceType","mp_geo_pcode","_DataStore$getGeoInfo","getGeoInfo","postal","mp_geo_country","_DataStore$getGeoInfo2","country","mp_geo_region","_DataStore$getGeoInfo3","region","mp_geo_city","_DataStore$getGeoInfo4","city","mp_visit_count","_DataStore$getVisitIn","getVisitInfo","visitCt","mp_visit_depth","_DataStore$getVisitIn2","depth","visitDepth","Math","max","pg_browser","getDeviceOs","mp_new_vis","getMpUserStatus","pg_random","getUniqueID","pg_empty_val","mp_dvc_id","getDeviceId","mp_vis_id","getMpId","mp_org_id","getOrgId","mp_c_sdk_v","getCoreVersion","mp_c_sdk_env","getMpEnv","pg_mp_dl_evt_id","key","pg_mp_dl_evt_ts","pg_mp_dl_evt_name","pg_hash","pg_title","pg_params","pg_domain","pg_srch","pg_referrer","pg_url","generalCleanAndEscape","de","val","fn","cl","_val","trim","indexOf","replace","lwcase","_val2","toLowerCase","err","logError","def","processOneDataElement","_sdkDataElements","deItem","deHelper","_optDeKeys","typ","logDbg","nm","deValue","stDur","EVENT","deStorageDurationSet","storedValue","deStorageDurationGet","processDataElements","sdkDataElements","optDeKeys","getDataElements","deKeys","length","Object","keys","getDataElementHelpers","setDataElements","DataElementProcessor"],"sources":["data-element.processor.ts"],"sourcesContent":["/**\n * Process data element of type url parameter\n * @param de\n */\nimport { Utils } from '../common/utils';\nimport type { DeJsvHelper, MapLike } from '../common/app-types';\nimport { DeStorageDuration } from '../models/mp-client-sdk';\nimport type { ClientSdkDeItem } from '../models/mp-client-sdk';\nimport { DataStore } from '../common/data-store';\nimport { Logger } from '../common/logger';\nimport { StorageHelper } from '../common/storage-helper';\n\n// Note: JSV (JavaScript functions) are not supported in React Native\n// This timeout function is kept for potential future use\n\n/**\n * Check if a value is defined (not null, undefined, or empty string)\n */\nfunction isDefined(value: any): boolean {\n return value !== null && value !== undefined && value !== '';\n}\n\nconst dElemProcessors: MapLike<\n (\n helper: DeJsvHelper,\n elem: ClientSdkDeItem,\n eventData?: Record<string, any>\n ) => any\n> = {\n mpdl: (\n helper: DeJsvHelper,\n elem: ClientSdkDeItem,\n eventData?: Record<string, any>\n ): any => {\n return processMpDl(helper, elem, eventData);\n },\n pg_os: (\n _helper: DeJsvHelper,\n _elem: ClientSdkDeItem,\n _eventData?: Record<string, any>\n ): any => {\n // already browser is in lower case, so no need to do it again\n return DataStore.getOperatingSystem();\n },\n visit_id: (\n _helper: DeJsvHelper,\n _elem: ClientSdkDeItem,\n _eventData?: Record<string, any>\n ): any => {\n return DataStore.getVisitId();\n },\n pg_dtype: (_helper: DeJsvHelper, _elem: ClientSdkDeItem): any => {\n return DataStore.getDeviceType();\n },\n /* Geo location data elements */\n mp_geo_pcode: (\n _helper: DeJsvHelper,\n _elem: ClientSdkDeItem,\n _eventData?: Record<string, any>\n ): any => {\n return DataStore.getGeoInfo()?.postal ?? undefined;\n },\n mp_geo_country: (\n _helper: DeJsvHelper,\n _elem: ClientSdkDeItem,\n _eventData?: Record<string, any>\n ): any => {\n return DataStore.getGeoInfo()?.country ?? undefined;\n },\n\n mp_geo_region: (\n _helper: DeJsvHelper,\n _elem: ClientSdkDeItem,\n _eventData?: Record<string, any>\n ): any => {\n return DataStore.getGeoInfo()?.region ?? undefined;\n },\n mp_geo_city: (\n _helper: DeJsvHelper,\n _elem: ClientSdkDeItem,\n _eventData?: Record<string, any>\n ): any => {\n return DataStore.getGeoInfo()?.city ?? undefined;\n },\n /* Visit info data elements */\n mp_visit_count: (\n _helper: DeJsvHelper,\n _elem: ClientSdkDeItem,\n _eventData?: Record<string, any>\n ): any => {\n return DataStore.getVisitInfo()?.visitCt ?? 0;\n },\n mp_visit_depth: (\n _helper: DeJsvHelper,\n _elem: ClientSdkDeItem,\n _eventData?: Record<string, any>\n ): any => {\n // Visit depth should start at 1 (first page), not 0\n // Return at least 1 to ensure first page view shows depth = 1\n const depth = DataStore.getVisitInfo()?.visitDepth ?? 0;\n return Math.max(1, depth);\n },\n /* Browser/Platform data elements */\n pg_browser: (\n _helper: DeJsvHelper,\n _elem: ClientSdkDeItem,\n _eventData?: Record<string, any>\n ): any => {\n return DataStore.getDeviceOs(); // Using device OS as browser equivalent\n },\n /* User status data element - 1 = new visitor (first visit), 0 = returning visitor */\n mp_new_vis: (\n _helper: DeJsvHelper,\n _elem: ClientSdkDeItem,\n _eventData?: Record<string, any>\n ): any => {\n return DataStore.getMpUserStatus();\n },\n pg_random: (\n _helper: DeJsvHelper,\n _elem: ClientSdkDeItem,\n _eventData?: Record<string, any>\n ): any => {\n return Utils.getUniqueID();\n },\n pg_empty_val: (\n _helper: DeJsvHelper,\n _elem: ClientSdkDeItem,\n _eventData?: Record<string, any>\n ): any => {\n return '';\n },\n mp_dvc_id: (\n _helper: DeJsvHelper,\n _elem: ClientSdkDeItem,\n _eventData?: Record<string, any>\n ): any => {\n return DataStore.getDeviceId();\n },\n mp_vis_id: (\n _helper: DeJsvHelper,\n _elem: ClientSdkDeItem,\n _eventData?: Record<string, any>\n ): any => {\n return DataStore.getMpId();\n },\n mp_org_id: (\n _helper: DeJsvHelper,\n _elem: ClientSdkDeItem,\n _eventData?: Record<string, any>\n ): any => {\n return DataStore.getOrgId();\n },\n mp_c_sdk_v: (\n _helper: DeJsvHelper,\n _elem: ClientSdkDeItem,\n _eventData?: Record<string, any>\n ): any => {\n return DataStore.getCoreVersion();\n },\n mp_c_sdk_env: (\n _helper: DeJsvHelper,\n _elem: ClientSdkDeItem,\n _eventData?: Record<string, any>\n ): any => {\n return DataStore.getMpEnv();\n },\n pg_mp_dl_evt_id: (\n _helper: DeJsvHelper,\n _elem: ClientSdkDeItem,\n _eventData?: Record<string, any>\n ): any => {\n _elem.key = 'ev._id';\n return processMpDl(_helper, _elem, _eventData);\n },\n pg_mp_dl_evt_ts: (\n _helper: DeJsvHelper,\n _elem: ClientSdkDeItem,\n _eventData?: Record<string, any>\n ): any => {\n _elem.key = 'ev._tsMs';\n return processMpDl(_helper, _elem, _eventData);\n },\n pg_mp_dl_evt_name: (\n _helper: DeJsvHelper,\n _elem: ClientSdkDeItem,\n _eventData?: Record<string, any>\n ): any => {\n _elem.key = 'ev._eventName';\n return processMpDl(_helper, _elem, _eventData);\n },\n pg_hash: (\n _helper: DeJsvHelper,\n _elem: ClientSdkDeItem,\n _eventData?: Record<string, any>\n ): any => {\n return '';\n },\n pg_title: (\n _helper: DeJsvHelper,\n _elem: ClientSdkDeItem,\n _eventData?: Record<string, any>\n ): any => {\n return '';\n },\n pg_params: (\n _helper: DeJsvHelper,\n _elem: ClientSdkDeItem,\n _eventData?: Record<string, any>\n ): any => {\n return '';\n },\n pg_domain: (\n _helper: DeJsvHelper,\n _elem: ClientSdkDeItem,\n _eventData?: Record<string, any>\n ): any => {\n return '';\n },\n pg_srch: (\n _helper: DeJsvHelper,\n _elem: ClientSdkDeItem,\n _eventData?: Record<string, any>\n ): any => {\n return '';\n },\n pg_referrer: (\n _helper: DeJsvHelper,\n _elem: ClientSdkDeItem,\n _eventData?: Record<string, any>\n ): any => {\n return '';\n },\n pg_url: (\n _helper: DeJsvHelper,\n _elem: ClientSdkDeItem,\n _eventData?: Record<string, any>\n ): any => {\n return '';\n },\n // Note: JSV (JavaScript functions) processor removed - not supported in React Native\n};\n\nfunction generalCleanAndEscape(\n helper: DeJsvHelper,\n de: ClientSdkDeItem,\n val: any\n): string {\n if (typeof de.fn === 'function') {\n val = de.fn(helper, val);\n return val;\n } else {\n if (typeof val === 'string') {\n // clean\n if (de.cl) {\n val = val?.trim();\n // see if it has a single quote or double quote, if so, escape it\n if (val.indexOf(`'`) > -1) {\n val = val.replace(/'/g, '');\n }\n\n if (val.indexOf(`\"`) > -1) {\n val = val.replace(/\"/g, '');\n }\n }\n if (de.lwcase) {\n val = val?.toLowerCase();\n }\n }\n return val;\n }\n}\n\nfunction processMpDl(\n helper: DeJsvHelper,\n de: ClientSdkDeItem,\n eventData?: Record<string, any>\n): any {\n try {\n if (de.key) {\n if (eventData && typeof eventData[de.key] !== 'undefined') {\n return generalCleanAndEscape(helper, de, eventData[de.key]);\n }\n }\n } catch (err) {\n Logger.logError('Error processing mp dl variable: ', err);\n }\n return generalCleanAndEscape(helper, de, de.def);\n}\n\nexport async function processOneDataElement(\n _sdkDataElements: MapLike<ClientSdkDeItem>,\n deItem: ClientSdkDeItem,\n deHelper: any,\n eventData?: Record<string, any>,\n _optDeKeys?: string[]\n): Promise<any> {\n try {\n if (dElemProcessors[deItem.typ]) {\n Logger.logDbg('Processing data element: ', deItem.nm);\n let deValue = await dElemProcessors[deItem.typ](\n deHelper,\n deItem,\n eventData\n );\n\n // Default storage duration to EVENT if not defined\n if (!deItem.stDur) {\n deItem.stDur = DeStorageDuration.EVENT;\n }\n\n // If data element has persistence enabled, store the value\n StorageHelper.deStorageDurationSet(deItem.key, deValue, deItem.stDur);\n\n // If value is not defined, try to retrieve from storage\n // This allows values like gclid to persist across page loads\n if (!isDefined(deValue)) {\n const storedValue = StorageHelper.deStorageDurationGet(\n deItem.key,\n deItem.def,\n deItem.stDur\n );\n if (isDefined(storedValue)) {\n deValue = storedValue;\n }\n }\n\n return deValue;\n } else {\n Logger.logError('No processor found for de typ: ', deItem.typ);\n }\n } catch (err) {\n Logger.logError(\n 'Error processing data element: ',\n deItem.key,\n ' with error: ',\n err\n );\n }\n\n return deItem.def;\n}\n\n/**\n * Process all the data elements at once, or if a set of keys are specified, processes only\n * those keys and updates the dataElements object in DataStore\n * @param sdkDataElements\n * @param eventData\n * @param optDeKeys\n */\nexport async function processDataElements(\n sdkDataElements: MapLike<ClientSdkDeItem>,\n eventData?: Record<string, any>,\n optDeKeys?: string[]\n): Promise<MapLike<any>> {\n const de = DataStore.getDataElements();\n const deKeys =\n optDeKeys && optDeKeys.length > 0\n ? optDeKeys\n : Object.keys(sdkDataElements);\n\n try {\n const deHelper = DataStore.getDataElementHelpers();\n for (const key of deKeys) {\n de[key] = await processOneDataElement(\n sdkDataElements,\n sdkDataElements[key],\n deHelper,\n eventData,\n optDeKeys\n );\n }\n } catch (err) {\n Logger.logError('Error processing data elements: ', err);\n }\n\n DataStore.setDataElements(de);\n Logger.logDbg('Data Elements: ', de);\n return de;\n}\n\nexport class DataElementProcessor {\n /**\n * Process all the data elements at once, or if a set of keys are specified, processes only\n * those keys and updates the dataElements object in DataStore\n * @param sdkDataElements\n * @param eventData\n * @param optDeKeys\n */\n static async processDataElements(\n sdkDataElements: MapLike<ClientSdkDeItem>,\n eventData?: Record<string, any>,\n optDeKeys?: string[]\n ): Promise<MapLike<any>> {\n return processDataElements(sdkDataElements, eventData, optDeKeys);\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,3 +1,6 @@
1
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
2
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
3
+ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
1
4
  import { Logger } from '../common/logger';
2
5
  import { DataStore } from '../common/data-store';
3
6
  import { Constants } from '../common/constants';
@@ -10,6 +13,25 @@ export class VisitIdProcessor {
10
13
  await this.setOrResetVisitorId();
11
14
  await this.setOrResetVisitInfo(false);
12
15
  }
16
+
17
+ /**
18
+ * Check if visitor ID needs to be retried
19
+ * Called on each page_load to retry if initial fetch failed
20
+ */
21
+ static async retryVisitorIdIfNeeded() {
22
+ if (!this.visitorIdFetchFailed) {
23
+ return; // No retry needed
24
+ }
25
+ Logger.logDbg('Retrying visitor ID fetch on page_load...');
26
+ await this.setOrResetVisitorId();
27
+ }
28
+
29
+ /**
30
+ * Check if visitor ID is available
31
+ */
32
+ static hasVisitorId() {
33
+ return !this.visitorIdFetchFailed && DataStore.getVisitorInfo() !== null;
34
+ }
13
35
  static async isFirstOpenAfterInstall() {
14
36
  try {
15
37
  const firstOpenFlag = await DataStore.getDataFromStorage(Constants.KEY_FIRST_OPEN);
@@ -57,6 +79,7 @@ export class VisitIdProcessor {
57
79
  let visitInfo = await DataStore.getDataFromStorage(Constants.KEY_MP_IDL_VISIT_ID_INFO);
58
80
  if (!visitInfo) {
59
81
  // may be first time visit, set up a new visit info object and return
82
+ // Initialize visitDepth to 0, will be incremented to 1 on first page_load
60
83
  visitInfo = {
61
84
  visitId: Utils.getUniqueID(),
62
85
  visitCt: 1,
@@ -72,7 +95,7 @@ export class VisitIdProcessor {
72
95
  visitInfo.visitDepth = (((_visitInfo = visitInfo) === null || _visitInfo === void 0 ? void 0 : _visitInfo.visitDepth) ?? 0) + 1;
73
96
  } else {
74
97
  visitInfo.visitCt = visitInfo.visitCt + 1;
75
- visitInfo.visitDepth = 0;
98
+ visitInfo.visitDepth = 0; // Reset to 0, will be incremented to 1 on first page_load of new session
76
99
  }
77
100
  visitInfo.visitTs = Date.now();
78
101
  visitInfo.visitVer = 1;
@@ -86,35 +109,75 @@ export class VisitIdProcessor {
86
109
  Reporter.reportError('setOrResetVisitInfo', err);
87
110
  }
88
111
  }
89
- static async incrementVisitDepth() {
90
- return this.setOrResetVisitInfo(true);
112
+
113
+ /**
114
+ * Synchronously increment visit depth in memory, persist to storage in background
115
+ * This prevents race conditions when multiple page_load events fire quickly
116
+ */
117
+ static incrementVisitDepth() {
118
+ try {
119
+ // Read from in-memory cache (synchronous)
120
+ const visitInfo = DataStore.getVisitInfo();
121
+ if (!visitInfo) {
122
+ Logger.logError('Visit info not initialized. Cannot increment depth.');
123
+ return;
124
+ }
125
+
126
+ // Increment depth synchronously in memory
127
+ visitInfo.visitDepth = (visitInfo.visitDepth ?? 0) + 1;
128
+ visitInfo.visitTs = Date.now();
129
+
130
+ // Update in-memory cache immediately (synchronous)
131
+ DataStore.setVisitInfo(visitInfo);
132
+ DataStore.addCommonCookie('x-mp-vid', DataStore.visitInfoToString());
133
+ Logger.logDbg('Visit depth incremented to:', visitInfo.visitDepth);
134
+
135
+ // Persist to AsyncStorage in background (fire and forget)
136
+ DataStore.storeData(Constants.KEY_MP_IDL_VISIT_ID_INFO, visitInfo).catch(err => {
137
+ Logger.logError('Error persisting visit depth to storage:', err);
138
+ Reporter.reportError('incrementVisitDepth::persist', err);
139
+ });
140
+ } catch (err) {
141
+ Logger.logError('Error incrementing visit depth:', err);
142
+ Reporter.reportError('incrementVisitDepth', err);
143
+ }
91
144
  }
92
145
  static async setOrResetVisitorId() {
93
146
  try {
94
147
  var _visitorInfoData;
95
148
  let visitorInfoData = await DataStore.getDataFromStorage(Constants.KEY_MP_IDL_VISITOR_ID_INFO);
96
149
  if (!visitorInfoData || visitorInfoData && ((_visitorInfoData = visitorInfoData) === null || _visitorInfoData === void 0 ? void 0 : _visitorInfoData.mId.indexOf('-')) === -1) {
97
- Logger.logDbg('VisitorInfo not found. Refreshing from server');
150
+ Logger.logDbg('VisitorInfo not found. Fetching from server with retry');
98
151
  // get a new visit id and device id from server and store it in storage
99
- visitorInfoData = await NetworkService.fetchIdlInfo(DataStore.getIdlUrl());
152
+ // Use retry method for better reliability
153
+ visitorInfoData = await NetworkService.fetchIdlInfoWithRetry(DataStore.getIdlUrl());
100
154
  }
101
155
  if (!visitorInfoData) {
156
+ // Mark as failed so we can retry on page_load
157
+ this.visitorIdFetchFailed = true;
158
+ Logger.logError('Failed to fetch visitor ID after retries. Will retry on next page_load.');
102
159
  return;
103
- } else {
104
- DataStore.setVisitorInfo(visitorInfoData);
105
- // store to db as well
106
- await DataStore.storeData(Constants.KEY_MP_IDL_VISITOR_ID_INFO, visitorInfoData);
107
- const cookieValue = encodeURIComponent(JSON.stringify(visitorInfoData));
108
- DataStore.addCommonCookie('x-mplidl', cookieValue);
109
- DataStore.addCommonCookie('x-mpidl', cookieValue);
110
- DataStore.addCommonCookie('x-lmid', visitorInfoData.mId);
111
- DataStore.addCommonCookie('x-ldid', visitorInfoData.dId);
112
160
  }
161
+
162
+ // Success - clear the failure flag
163
+ this.visitorIdFetchFailed = false;
164
+ DataStore.setVisitorInfo(visitorInfoData);
165
+ // store to db as well
166
+ await DataStore.storeData(Constants.KEY_MP_IDL_VISITOR_ID_INFO, visitorInfoData);
167
+ const cookieValue = encodeURIComponent(JSON.stringify(visitorInfoData));
168
+ DataStore.addCommonCookie('x-mplidl', cookieValue);
169
+ DataStore.addCommonCookie('x-mpidl', cookieValue);
170
+ DataStore.addCommonCookie('x-lmid', visitorInfoData.mId);
171
+ DataStore.addCommonCookie('x-ldid', visitorInfoData.dId);
172
+ Logger.logDbg('Visitor ID set successfully:', visitorInfoData.mId);
113
173
  } catch (err) {
114
- Logger.logError(err);
174
+ Logger.logError('Error in setOrResetVisitorId:', err);
175
+ this.visitorIdFetchFailed = true;
115
176
  DataStore.setVisitorInfo(null);
116
177
  Reporter.reportError('setOrResetVisitorId', err);
117
178
  }
118
179
  }
119
180
  }
181
+ // Track if visitor ID fetch failed so we can retry on page_load
182
+ _defineProperty(VisitIdProcessor, "visitorIdFetchFailed", false);
120
183
  //# sourceMappingURL=visit-id.processor.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["Logger","DataStore","Constants","Reporter","NetworkService","Utils","VisitIdProcessor","init","orgId","initDebugId","setOrResetVisitorId","setOrResetVisitInfo","isFirstOpenAfterInstall","firstOpenFlag","getDataFromStorage","KEY_FIRST_OPEN","storeData","err","logError","getFacebookFBP","fbp","KEY_FBP","Date","now","addCommonCookie","debugId","KEY_MP_DEBUG_ID","indexOf","undefined","getSimpleDebugId","setDebugId","incrementDepth","visitInfo","KEY_MP_IDL_VISIT_ID_INFO","visitId","getUniqueID","visitCt","visitDepth","visitTs","visitVer","_visitInfo","setVisitInfo","visitInfoToString","reportError","incrementVisitDepth","_visitorInfoData","visitorInfoData","KEY_MP_IDL_VISITOR_ID_INFO","mId","logDbg","fetchIdlInfo","getIdlUrl","setVisitorInfo","cookieValue","encodeURIComponent","JSON","stringify","dId"],"sources":["visit-id.processor.ts"],"sourcesContent":["import { Logger } from '../common/logger';\nimport { DataStore } from '../common/data-store';\nimport { Constants } from '../common/constants';\nimport { Reporter } from '../common/reporter';\nimport { NetworkService } from '../common/network-service';\nimport type { VisitInfo, VisitorInfo } from '../common/app-types';\nimport { Utils } from '../common/utils';\n\nexport class VisitIdProcessor {\n static async init(orgId: string): Promise<void> {\n await this.initDebugId(orgId);\n await this.setOrResetVisitorId();\n await this.setOrResetVisitInfo(false);\n }\n\n static async isFirstOpenAfterInstall(): Promise<boolean> {\n try {\n const firstOpenFlag = await DataStore.getDataFromStorage<string>(\n Constants.KEY_FIRST_OPEN\n );\n\n if (!firstOpenFlag) {\n await DataStore.storeData(Constants.KEY_FIRST_OPEN, 'No');\n return true;\n }\n } catch (err) {\n Logger.logError('Unable to determine first open after install flag', err);\n }\n return false;\n }\n\n static async getFacebookFBP(): Promise<string> {\n try {\n let fbp = await DataStore.getDataFromStorage<string>(Constants.KEY_FBP);\n\n if (!fbp) {\n fbp = `fb.1.${Date.now()}.${Date.now()}`;\n }\n\n await DataStore.storeData(Constants.KEY_FBP, fbp);\n\n DataStore.addCommonCookie('x-fbp', fbp);\n\n return fbp;\n } catch (err) {\n Logger.logError('Error initializing debug id.', err);\n }\n return '';\n }\n\n static async initDebugId(orgId: string): Promise<void> {\n try {\n let debugId = await DataStore.getDataFromStorage<string>(\n Constants.KEY_MP_DEBUG_ID\n );\n\n if (debugId && debugId.indexOf(orgId) !== 0) {\n // re-generate debug id if it is not of the simple variety\n debugId = undefined;\n }\n\n if (!debugId) {\n debugId = Utils.getSimpleDebugId(orgId);\n }\n\n await DataStore.storeData(Constants.KEY_MP_DEBUG_ID, debugId);\n DataStore.setDebugId(debugId);\n } catch (err) {\n Logger.logError('Error initializing debug id.', err);\n }\n }\n\n static async setOrResetVisitInfo(incrementDepth: boolean): Promise<void> {\n try {\n let visitInfo: VisitInfo = await DataStore.getDataFromStorage(\n Constants.KEY_MP_IDL_VISIT_ID_INFO\n );\n\n if (!visitInfo) {\n // may be first time visit, set up a new visit info object and return\n visitInfo = {\n visitId: Utils.getUniqueID(),\n visitCt: 1,\n visitDepth: 0,\n visitTs: Date.now(),\n visitVer: 1,\n };\n } else {\n // reset visit id anyway, but retain the visitCt and depth setting\n visitInfo.visitId = Utils.getUniqueID();\n if (incrementDepth) {\n visitInfo.visitDepth = (visitInfo?.visitDepth ?? 0) + 1;\n } else {\n visitInfo.visitCt = visitInfo.visitCt + 1;\n visitInfo.visitDepth = 0;\n }\n visitInfo.visitTs = Date.now();\n visitInfo.visitVer = 1;\n }\n\n DataStore.setVisitInfo(visitInfo);\n await DataStore.storeData(Constants.KEY_MP_IDL_VISIT_ID_INFO, visitInfo);\n DataStore.addCommonCookie('x-mp-vid', DataStore.visitInfoToString());\n } catch (err) {\n Logger.logError(err);\n DataStore.setVisitInfo(null);\n Reporter.reportError('setOrResetVisitInfo', err);\n }\n }\n\n static async incrementVisitDepth(): Promise<void> {\n return this.setOrResetVisitInfo(true);\n }\n\n static async setOrResetVisitorId(): Promise<void> {\n try {\n let visitorInfoData: VisitorInfo = await DataStore.getDataFromStorage(\n Constants.KEY_MP_IDL_VISITOR_ID_INFO\n );\n\n if (\n !visitorInfoData ||\n (visitorInfoData && visitorInfoData?.mId.indexOf('-') === -1)\n ) {\n Logger.logDbg('VisitorInfo not found. Refreshing from server');\n // get a new visit id and device id from server and store it in storage\n visitorInfoData = await NetworkService.fetchIdlInfo(\n DataStore.getIdlUrl()\n );\n }\n\n if (!visitorInfoData) {\n return;\n } else {\n DataStore.setVisitorInfo(visitorInfoData);\n // store to db as well\n await DataStore.storeData(\n Constants.KEY_MP_IDL_VISITOR_ID_INFO,\n visitorInfoData\n );\n\n const cookieValue = encodeURIComponent(JSON.stringify(visitorInfoData));\n DataStore.addCommonCookie('x-mplidl', cookieValue);\n DataStore.addCommonCookie('x-mpidl', cookieValue);\n DataStore.addCommonCookie('x-lmid', visitorInfoData.mId);\n DataStore.addCommonCookie('x-ldid', visitorInfoData.dId);\n }\n } catch (err) {\n Logger.logError(err);\n DataStore.setVisitorInfo(null);\n Reporter.reportError('setOrResetVisitorId', err);\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["Logger","DataStore","Constants","Reporter","NetworkService","Utils","VisitIdProcessor","init","orgId","initDebugId","setOrResetVisitorId","setOrResetVisitInfo","retryVisitorIdIfNeeded","visitorIdFetchFailed","logDbg","hasVisitorId","getVisitorInfo","isFirstOpenAfterInstall","firstOpenFlag","getDataFromStorage","KEY_FIRST_OPEN","storeData","err","logError","getFacebookFBP","fbp","KEY_FBP","Date","now","addCommonCookie","debugId","KEY_MP_DEBUG_ID","indexOf","undefined","getSimpleDebugId","setDebugId","incrementDepth","visitInfo","KEY_MP_IDL_VISIT_ID_INFO","visitId","getUniqueID","visitCt","visitDepth","visitTs","visitVer","_visitInfo","setVisitInfo","visitInfoToString","reportError","incrementVisitDepth","getVisitInfo","catch","_visitorInfoData","visitorInfoData","KEY_MP_IDL_VISITOR_ID_INFO","mId","fetchIdlInfoWithRetry","getIdlUrl","setVisitorInfo","cookieValue","encodeURIComponent","JSON","stringify","dId","_defineProperty"],"sources":["visit-id.processor.ts"],"sourcesContent":["import { Logger } from '../common/logger';\nimport { DataStore } from '../common/data-store';\nimport { Constants } from '../common/constants';\nimport { Reporter } from '../common/reporter';\nimport { NetworkService } from '../common/network-service';\nimport type { VisitInfo, VisitorInfo } from '../common/app-types';\nimport { Utils } from '../common/utils';\n\nexport class VisitIdProcessor {\n // Track if visitor ID fetch failed so we can retry on page_load\n private static visitorIdFetchFailed = false;\n\n static async init(orgId: string): Promise<void> {\n await this.initDebugId(orgId);\n await this.setOrResetVisitorId();\n await this.setOrResetVisitInfo(false);\n }\n\n /**\n * Check if visitor ID needs to be retried\n * Called on each page_load to retry if initial fetch failed\n */\n static async retryVisitorIdIfNeeded(): Promise<void> {\n if (!this.visitorIdFetchFailed) {\n return; // No retry needed\n }\n\n Logger.logDbg('Retrying visitor ID fetch on page_load...');\n await this.setOrResetVisitorId();\n }\n\n /**\n * Check if visitor ID is available\n */\n static hasVisitorId(): boolean {\n return !this.visitorIdFetchFailed && DataStore.getVisitorInfo() !== null;\n }\n\n static async isFirstOpenAfterInstall(): Promise<boolean> {\n try {\n const firstOpenFlag = await DataStore.getDataFromStorage<string>(\n Constants.KEY_FIRST_OPEN\n );\n\n if (!firstOpenFlag) {\n await DataStore.storeData(Constants.KEY_FIRST_OPEN, 'No');\n return true;\n }\n } catch (err) {\n Logger.logError('Unable to determine first open after install flag', err);\n }\n return false;\n }\n\n static async getFacebookFBP(): Promise<string> {\n try {\n let fbp = await DataStore.getDataFromStorage<string>(Constants.KEY_FBP);\n\n if (!fbp) {\n fbp = `fb.1.${Date.now()}.${Date.now()}`;\n }\n\n await DataStore.storeData(Constants.KEY_FBP, fbp);\n\n DataStore.addCommonCookie('x-fbp', fbp);\n\n return fbp;\n } catch (err) {\n Logger.logError('Error initializing debug id.', err);\n }\n return '';\n }\n\n static async initDebugId(orgId: string): Promise<void> {\n try {\n let debugId = await DataStore.getDataFromStorage<string>(\n Constants.KEY_MP_DEBUG_ID\n );\n\n if (debugId && debugId.indexOf(orgId) !== 0) {\n // re-generate debug id if it is not of the simple variety\n debugId = undefined;\n }\n\n if (!debugId) {\n debugId = Utils.getSimpleDebugId(orgId);\n }\n\n await DataStore.storeData(Constants.KEY_MP_DEBUG_ID, debugId);\n DataStore.setDebugId(debugId);\n } catch (err) {\n Logger.logError('Error initializing debug id.', err);\n }\n }\n\n static async setOrResetVisitInfo(incrementDepth: boolean): Promise<void> {\n try {\n let visitInfo: VisitInfo = await DataStore.getDataFromStorage(\n Constants.KEY_MP_IDL_VISIT_ID_INFO\n );\n\n if (!visitInfo) {\n // may be first time visit, set up a new visit info object and return\n // Initialize visitDepth to 0, will be incremented to 1 on first page_load\n visitInfo = {\n visitId: Utils.getUniqueID(),\n visitCt: 1,\n visitDepth: 0,\n visitTs: Date.now(),\n visitVer: 1,\n };\n } else {\n // reset visit id anyway, but retain the visitCt and depth setting\n visitInfo.visitId = Utils.getUniqueID();\n if (incrementDepth) {\n visitInfo.visitDepth = (visitInfo?.visitDepth ?? 0) + 1;\n } else {\n visitInfo.visitCt = visitInfo.visitCt + 1;\n visitInfo.visitDepth = 0; // Reset to 0, will be incremented to 1 on first page_load of new session\n }\n visitInfo.visitTs = Date.now();\n visitInfo.visitVer = 1;\n }\n\n DataStore.setVisitInfo(visitInfo);\n await DataStore.storeData(Constants.KEY_MP_IDL_VISIT_ID_INFO, visitInfo);\n DataStore.addCommonCookie('x-mp-vid', DataStore.visitInfoToString());\n } catch (err) {\n Logger.logError(err);\n DataStore.setVisitInfo(null);\n Reporter.reportError('setOrResetVisitInfo', err);\n }\n }\n\n /**\n * Synchronously increment visit depth in memory, persist to storage in background\n * This prevents race conditions when multiple page_load events fire quickly\n */\n static incrementVisitDepth(): void {\n try {\n // Read from in-memory cache (synchronous)\n const visitInfo: VisitInfo = DataStore.getVisitInfo();\n\n if (!visitInfo) {\n Logger.logError('Visit info not initialized. Cannot increment depth.');\n return;\n }\n\n // Increment depth synchronously in memory\n visitInfo.visitDepth = (visitInfo.visitDepth ?? 0) + 1;\n visitInfo.visitTs = Date.now();\n\n // Update in-memory cache immediately (synchronous)\n DataStore.setVisitInfo(visitInfo);\n DataStore.addCommonCookie('x-mp-vid', DataStore.visitInfoToString());\n\n Logger.logDbg('Visit depth incremented to:', visitInfo.visitDepth);\n\n // Persist to AsyncStorage in background (fire and forget)\n DataStore.storeData(Constants.KEY_MP_IDL_VISIT_ID_INFO, visitInfo).catch(\n (err) => {\n Logger.logError('Error persisting visit depth to storage:', err);\n Reporter.reportError('incrementVisitDepth::persist', err);\n }\n );\n } catch (err) {\n Logger.logError('Error incrementing visit depth:', err);\n Reporter.reportError('incrementVisitDepth', err);\n }\n }\n\n static async setOrResetVisitorId(): Promise<void> {\n try {\n let visitorInfoData: VisitorInfo | null =\n await DataStore.getDataFromStorage(\n Constants.KEY_MP_IDL_VISITOR_ID_INFO\n );\n\n if (\n !visitorInfoData ||\n (visitorInfoData && visitorInfoData?.mId.indexOf('-') === -1)\n ) {\n Logger.logDbg('VisitorInfo not found. Fetching from server with retry');\n // get a new visit id and device id from server and store it in storage\n // Use retry method for better reliability\n visitorInfoData = await NetworkService.fetchIdlInfoWithRetry(\n DataStore.getIdlUrl()\n );\n }\n\n if (!visitorInfoData) {\n // Mark as failed so we can retry on page_load\n this.visitorIdFetchFailed = true;\n Logger.logError(\n 'Failed to fetch visitor ID after retries. Will retry on next page_load.'\n );\n return;\n }\n\n // Success - clear the failure flag\n this.visitorIdFetchFailed = false;\n\n DataStore.setVisitorInfo(visitorInfoData);\n // store to db as well\n await DataStore.storeData(\n Constants.KEY_MP_IDL_VISITOR_ID_INFO,\n visitorInfoData\n );\n\n const cookieValue = encodeURIComponent(JSON.stringify(visitorInfoData));\n DataStore.addCommonCookie('x-mplidl', cookieValue);\n DataStore.addCommonCookie('x-mpidl', cookieValue);\n DataStore.addCommonCookie('x-lmid', visitorInfoData.mId);\n DataStore.addCommonCookie('x-ldid', visitorInfoData.dId);\n\n Logger.logDbg('Visitor ID set successfully:', visitorInfoData.mId);\n } catch (err) {\n Logger.logError('Error in setOrResetVisitorId:', err);\n this.visitorIdFetchFailed = true;\n DataStore.setVisitorInfo(null);\n Reporter.reportError('setOrResetVisitorId', err);\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -2,13 +2,6 @@ import type { Logger } from './logger';
2
2
  export interface MapLike<T = any> {
3
3
  [key: string]: T;
4
4
  }
5
- export interface RunQueueModel {
6
- sseOnly: boolean;
7
- name: string;
8
- dcrName: string;
9
- eventId: string;
10
- dcrPayload?: Record<string, any>;
11
- }
12
5
  export declare type TypedAny = Record<string, string | number | boolean | string[] | boolean[] | number[] | Record<string, string | number | boolean | string[] | boolean[] | number[]>>;
13
6
  export declare type EventProcessorFn = (payload: TypedAny) => void;
14
7
  export interface AppCustomerInfo {
@@ -23,6 +16,7 @@ export interface AppCustomerInfo {
23
16
  }
24
17
  export interface AppPageLoad {
25
18
  page_name: string;
19
+ page_url?: string;
26
20
  is_entry?: number;
27
21
  deep_link_url?: string;
28
22
  app_version?: string;
@@ -103,16 +97,42 @@ export interface SdkInitOptions {
103
97
  projectId: string;
104
98
  baseUrl: string;
105
99
  logLevel: string;
100
+ /**
101
+ * @deprecated device_type is now auto-detected and cannot be overridden
102
+ * This field is ignored. The SDK uses Expo/react-native-device-info for reliable detection.
103
+ */
106
104
  device_type?: string;
105
+ /**
106
+ * @deprecated app_version is now auto-detected and cannot be overridden
107
+ * This field is ignored. The SDK will always use the actual app version from the device.
108
+ */
107
109
  app_version?: string;
110
+ /**
111
+ * @deprecated os_version is now auto-detected and cannot be overridden
112
+ * This field is ignored. The SDK will always use the actual OS version from the device.
113
+ */
108
114
  os_version?: string;
115
+ /**
116
+ * Event deduplication window in milliseconds
117
+ * If the same event (name + payload) fires within this window, it will be skipped
118
+ * Purchase events are deduplicated by transaction_id regardless of other fields
119
+ * Default: 5000ms (5 seconds)
120
+ * Set to 0 to disable deduplication
121
+ */
122
+ eventDeduplicationWindowMs?: number;
123
+ /**
124
+ * Callback invoked when SDK initialization fails after all retries
125
+ * Use this to handle initialization failures gracefully in your app
126
+ * @param error The error that caused the failure
127
+ */
128
+ onInitFailure?: (error: Error) => void;
109
129
  }
110
130
  export interface MpDeviceInfo {
111
131
  package_name?: string;
112
132
  short_version?: string;
113
133
  long_version?: string;
114
- os_version: string;
115
- device_model_name: string;
134
+ os_version?: string;
135
+ device_model_name?: string;
116
136
  locale?: string;
117
137
  timezone_abbreviation?: string;
118
138
  carrier?: string;
@@ -1,7 +1,6 @@
1
1
  import type { BaseResourceParamType } from '../models/mp-client-sdk';
2
2
  export declare class Constants {
3
3
  static PLACEHOLDER_REGEX: RegExp;
4
- static LARGE_RANDOM_POOL: (size?: number) => string;
5
4
  static MP_DL_EVT: string;
6
5
  static CUST_EVT: string;
7
6
  static ST_OK: number;
@@ -1,4 +1,4 @@
1
- import type { DeJsvHelper, MapLike, MpDeviceInfo, QcInfoItem, RunQueueModel, SdkInitOptions, UrlInfo, VisitInfo, VisitorInfo } from './app-types';
1
+ import type { DeJsvHelper, MapLike, MpDeviceInfo, QcInfoItem, SdkInitOptions, UrlInfo, VisitInfo, VisitorInfo } from './app-types';
2
2
  import type { GeoResponse } from '../models/geo-api-response';
3
3
  import type { ClientSdkDeItem, ClientSdkPrItem, ClientSdkQcItem, ClientSdkTagItem, MpClientSdk } from '../models/mp-client-sdk';
4
4
  export declare class DataStore {
@@ -17,8 +17,6 @@ export declare class DataStore {
17
17
  private static mpEnvShort;
18
18
  private static devicePlatform;
19
19
  private static deviceType;
20
- private static runQueue;
21
- private static isProcessing;
22
20
  private static sdkInitOptions;
23
21
  private static deviceInfo;
24
22
  private static geoInfo;
@@ -28,7 +26,6 @@ export declare class DataStore {
28
26
  private static commonCookies;
29
27
  static init(clientSdk: MpClientSdk): Promise<void>;
30
28
  static resetCollectorUrl(baseCollectorUrl: string, sdkEnv: string, vendorId: string, projectId: string): boolean;
31
- static enQueueTMFire(sseOnly: boolean, name: string, dcrName: string, eventId: string, dcrPayload?: Record<string, any>): void;
32
29
  static isDataStoreReady(): boolean;
33
30
  static shouldExecuteTMForEvent(eventName: string): boolean;
34
31
  static shouldExecuteSST(eventName: string): boolean;
@@ -38,9 +35,6 @@ export declare class DataStore {
38
35
  static setDeviceInfo(info: MpDeviceInfo): void;
39
36
  static getDeviceInfo(): MpDeviceInfo;
40
37
  static setSdkInitOptions(options: SdkInitOptions): void;
41
- static deQueueTMFire(): RunQueueModel;
42
- static isTagManagerProcessing(): boolean;
43
- static setTagManagerProcessing(status: boolean): void;
44
38
  static getSdkDataElements(): MapLike<ClientSdkDeItem>;
45
39
  static getSdkQC(): ClientSdkQcItem[];
46
40
  static hasOneSSTTag(): boolean;
@@ -51,7 +45,8 @@ export declare class DataStore {
51
45
  static getAttrInfoUrl(): string;
52
46
  static setVisitInfo(visitInfo: VisitInfo): void;
53
47
  static visitInfoToString(): string;
54
- static setVisitorInfo(visitorInfo: VisitorInfo): void;
48
+ static setVisitorInfo(visitorInfo: VisitorInfo | null): void;
49
+ static getVisitorInfo(): VisitorInfo | null;
55
50
  static getDebugId(): string;
56
51
  static getErrorReportUrl(): string;
57
52
  static getIdlUrl(): string;