@kameleoon/javascript-sdk-core 5.14.4 → 5.15.0

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.
@@ -2267,25 +2267,22 @@ class PageView {
2267
2267
  * CustomData - a class for creating an instance for user's custom data
2268
2268
  * */
2269
2269
  let CustomData$1 = class CustomData {
2270
- /**
2271
- * @param {number} index - an index of custom data to be stored under in a state, an index of custom data can be specified in `Advanced Tools` section of Kameleoon Application
2272
- * @param {string[]} value - custom value to store under the specified id, value can be anything but has to be stringified to match the `string` type. *Note* value is variadic parameter and can be used as follows
2273
- * @example
2274
- * ```ts
2275
- * // - Single value
2276
- * const customData = new CustomData(0, 'value_1');
2277
- * // - Variadic number of values
2278
- * const customData = new CustomData(0, 'value_1', 'value_2', 'value_3');
2279
- * // - Array of values
2280
- * const values = ['value_1', 'value_2', 'value_3'];
2281
- * const customData = new CustomData(0, ...values);
2282
- * ```
2283
- * */
2284
- constructor(index, ...value) {
2285
- this.index = index;
2286
- this.value = value;
2270
+ constructor(first, second, ...rest) {
2287
2271
  this._status = exports.TrackingStatus.Unsent;
2288
2272
  this.isIdentifier = false;
2273
+ const isNumber = typeof first === 'number';
2274
+ const isBoolean = typeof second === 'boolean';
2275
+ if (isNumber) {
2276
+ this.index = first;
2277
+ }
2278
+ else {
2279
+ this.name = first;
2280
+ this.index = -1;
2281
+ }
2282
+ this.overwrite = isBoolean ? second : true;
2283
+ this.value = isBoolean
2284
+ ? rest
2285
+ : [second, ...rest].filter((v) => v != null);
2289
2286
  }
2290
2287
  get url() {
2291
2288
  // --- Note ---
@@ -2312,17 +2309,11 @@ let CustomData$1 = class CustomData {
2312
2309
  UrlParameter.ValuesCountMap +
2313
2310
  encodeURIComponent(JSON.stringify(resultValue)) +
2314
2311
  UrlParameter.Overwrite +
2315
- String(true) +
2312
+ String(this.overwrite) +
2316
2313
  identifierParameter);
2317
2314
  }
2318
2315
  get data() {
2319
- return {
2320
- index: this.index,
2321
- value: this.value,
2322
- type: exports.KameleoonData.CustomData,
2323
- isIdentifier: this.isIdentifier,
2324
- status: this.status,
2325
- };
2316
+ return Object.assign(Object.assign({ index: this.index }, (this.name !== undefined ? { name: this.name } : {})), { value: this.value, type: exports.KameleoonData.CustomData, isIdentifier: this.isIdentifier, status: this.status, overwrite: this.overwrite });
2326
2317
  }
2327
2318
  get status() {
2328
2319
  if (this._isMappingIdentifier) {
@@ -2337,8 +2328,15 @@ let CustomData$1 = class CustomData {
2337
2328
  * @return {CustomData} a CustomData instance
2338
2329
  * */
2339
2330
  static _fromRaw(data) {
2340
- const { index, value, status, isIdentifier } = data;
2341
- const customData = new CustomData(index, ...value);
2331
+ const { index, value, status, isIdentifier, name, overwrite } = data;
2332
+ let customData;
2333
+ if (name) {
2334
+ customData = new CustomData(name, overwrite !== null && overwrite !== void 0 ? overwrite : true, ...value);
2335
+ customData._index = index;
2336
+ }
2337
+ else {
2338
+ customData = new CustomData(index, overwrite !== null && overwrite !== void 0 ? overwrite : true, ...value);
2339
+ }
2342
2340
  customData.status = status;
2343
2341
  customData._isMappingIdentifier = isIdentifier;
2344
2342
  return customData;
@@ -2369,6 +2367,14 @@ let CustomData$1 = class CustomData {
2369
2367
  }
2370
2368
  }
2371
2369
  }
2370
+ /**
2371
+ * @private
2372
+ * @method _index - an internal setter for setting index of custom data
2373
+ * @param {number} value - an index value
2374
+ * */
2375
+ set _index(value) {
2376
+ this.index = value;
2377
+ }
2372
2378
  };
2373
2379
 
2374
2380
  /**
@@ -5503,6 +5509,7 @@ class DataManager {
5503
5509
  this.mappingIdentifierCustomDataIndex = null;
5504
5510
  this.persistentCustomDataIndexes = new Set();
5505
5511
  this.localCustomDataIndexes = new Set();
5512
+ this.customDataIndexByName = new Map();
5506
5513
  this.cleanupIntervalId = null;
5507
5514
  KameleoonLogger.debug `CALL: new DataManager(dataStorage, infoStorage, cleanupInterval: ${cleanupInterval})`;
5508
5515
  this.dataStorage = dataStorage;
@@ -5837,12 +5844,15 @@ class DataManager {
5837
5844
  mutUpdateTargetingData({ infoData, visitorCode, kameleoonData, targetingData, }) {
5838
5845
  for (const dataItem of kameleoonData) {
5839
5846
  if (dataItem.data.type === exports.KameleoonData.CustomData) {
5840
- this.processCustomData({
5847
+ const customDataIsValid = this.processCustomData({
5841
5848
  infoData,
5842
5849
  customData: dataItem,
5843
5850
  mutData: targetingData,
5844
5851
  visitorCode,
5845
5852
  });
5853
+ if (!customDataIsValid) {
5854
+ continue;
5855
+ }
5846
5856
  }
5847
5857
  const expirationTime = this.dataProcessor.mutUpdateData({
5848
5858
  infoData,
@@ -5883,6 +5893,14 @@ class DataManager {
5883
5893
  var _a;
5884
5894
  const { data } = customData;
5885
5895
  const isDataValid = Boolean(data.value.length && data.value[0].length);
5896
+ if (data.name) {
5897
+ const cdIndex = this.customDataIndexByName.get(data.name);
5898
+ if (cdIndex === undefined) {
5899
+ return false;
5900
+ }
5901
+ data.index = cdIndex;
5902
+ customData._index = cdIndex;
5903
+ }
5886
5904
  if (this.mappingIdentifierCustomDataIndex === data.index && isDataValid) {
5887
5905
  customData._isMappingIdentifier = true;
5888
5906
  const userId = data.value[0];
@@ -5906,6 +5924,7 @@ class DataManager {
5906
5924
  if (this.localCustomDataIndexes.has(data.index)) {
5907
5925
  customData.status = exports.TrackingStatus.Sent;
5908
5926
  }
5927
+ return true;
5909
5928
  }
5910
5929
  get unsentDataVisitors() {
5911
5930
  const infoResult = this.infoStorage.read();
@@ -5938,6 +5957,7 @@ class DataManager {
5938
5957
  set customDataIndexes(customData) {
5939
5958
  var _a;
5940
5959
  const [customDataLocalOnlyIndexes, persistentCustomDataIndexes] = [[], []];
5960
+ const customDataIndexByName = new Map();
5941
5961
  customData.forEach((customData) => {
5942
5962
  if (customData.localOnly) {
5943
5963
  customDataLocalOnlyIndexes.push(customData.index);
@@ -5945,12 +5965,19 @@ class DataManager {
5945
5965
  if (customData.scope === exports.CustomDataScope.Visitor) {
5946
5966
  persistentCustomDataIndexes.push(customData.index);
5947
5967
  }
5968
+ if (customData.name) {
5969
+ customDataIndexByName.set(customData.name, customData.index);
5970
+ }
5948
5971
  });
5949
5972
  this.mappingIdentifierCustomDataIndex =
5950
5973
  ((_a = customData.find((customData) => customData.isMappingIdentifier)) === null || _a === void 0 ? void 0 : _a.index) ||
5951
5974
  null;
5952
5975
  this.localCustomDataIndexes = new Set(customDataLocalOnlyIndexes);
5953
5976
  this.persistentCustomDataIndexes = new Set(persistentCustomDataIndexes);
5977
+ this.customDataIndexByName = customDataIndexByName;
5978
+ }
5979
+ getCustomDataIndexByName(name) {
5980
+ return this.customDataIndexByName.get(name);
5954
5981
  }
5955
5982
  }
5956
5983
 
@@ -7747,14 +7774,15 @@ class BodyProvider {
7747
7774
  }
7748
7775
 
7749
7776
  class Tracker {
7750
- constructor({ dataManager, trackingStorage, variationConfiguration, trackingInterval, requester, prng, }) {
7777
+ constructor({ dataManager, trackingStorage, variationConfiguration, trackingInterval, requester, prng, clientConfiguration, }) {
7751
7778
  this.intervalId = null;
7752
- KameleoonLogger.debug `CALL: new Tracker(dataManager, trackingStorage, variationConfiguration, trackingInterval: ${trackingInterval}, requester, prng)`;
7779
+ KameleoonLogger.debug `CALL: new Tracker(dataManager, trackingStorage, variationConfiguration, trackingInterval: ${trackingInterval}, requester, prng, clientConfiguration)`;
7753
7780
  this.dataManager = dataManager;
7754
7781
  this.trackingStorage = trackingStorage;
7755
7782
  this.variationConfiguration = variationConfiguration;
7756
7783
  this.requester = requester;
7757
7784
  this.bodyProvider = new BodyProvider(prng);
7785
+ this.clientConfiguration = clientConfiguration;
7758
7786
  try {
7759
7787
  this.intervalId = setInterval(() => {
7760
7788
  this.sendDataAll();
@@ -7764,7 +7792,7 @@ class Tracker {
7764
7792
  this.intervalId && clearInterval(this.intervalId);
7765
7793
  throw err;
7766
7794
  }
7767
- KameleoonLogger.debug `RETURN: new Tracker(dataManager, trackingStorage, variationConfiguration, trackingInterval: ${trackingInterval}, requester, prng)`;
7795
+ KameleoonLogger.debug `RETURN: new Tracker(dataManager, trackingStorage, variationConfiguration, trackingInterval: ${trackingInterval}, requester, prng, clientConfiguration)`;
7768
7796
  }
7769
7797
  scheduleVisitor(visitorCode, isConsentProvided) {
7770
7798
  KameleoonLogger.debug `CALL: Tracker.scheduleVisitor(visitorCode: ${visitorCode}, isConsentProvided: ${isConsentProvided})`;
@@ -7949,8 +7977,10 @@ class Tracker {
7949
7977
  if (!data.url) {
7950
7978
  continue;
7951
7979
  }
7952
- if (!isConsentProvided && (data instanceof StaticData ||
7953
- data.data.type !== exports.KameleoonData.Conversion)) {
7980
+ if (!isConsentProvided &&
7981
+ (!this.clientConfiguration.hasAnyTargetedDeliveryRule ||
7982
+ data instanceof StaticData ||
7983
+ data.data.type !== exports.KameleoonData.Conversion)) {
7954
7984
  continue;
7955
7985
  }
7956
7986
  resultData.push(data);
@@ -8087,6 +8117,7 @@ class KameleoonClient {
8087
8117
  requester,
8088
8118
  trackingInterval: clientSettings.trackingInterval,
8089
8119
  prng: externalPRNG,
8120
+ clientConfiguration,
8090
8121
  });
8091
8122
  this.tracker = tracker;
8092
8123
  this.variationConfiguration = variationConfiguration;