@kameleoon/javascript-sdk-core 5.1.1 → 5.1.2
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.
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
# Change Log
|
|
2
2
|
|
|
3
|
+
## 5.1.2 (2024-12-05)
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Resolved an issue that caused server slowdowns when handling large numbers of unique visitors.
|
|
8
|
+
- Resolved an issue where setting the [`DEBUG`][loglevels] log level could cause unexpected crashes.
|
|
9
|
+
|
|
10
|
+
[loglevels]: https://developers.kameleoon.com/feature-management-and-experimentation/web-sdks/js-sdk#log-levels
|
|
11
|
+
|
|
3
12
|
## 5.1.1
|
|
4
13
|
|
|
5
14
|
### Patch Changes
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.KameleoonLogger=void 0;var _types=require("./types"),_defaultLogger=require("./defaultLogger");function _defineProperty(a,b,c){return(b=_toPropertyKey(b))in a?Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!0}):a[b]=c,a}function _toPropertyKey(a){var b=_toPrimitive(a,"string");return"symbol"==typeof b?b:b+""}function _toPrimitive(a,b){if("object"!=typeof a||!a)return a;var c=a[Symbol.toPrimitive];if(void 0!==c){var d=c.call(a,b||"default");if("object"!=typeof d)return d;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===b?String:Number)(a)}const replacer=(a,b)=>"credentials"===a?{clientId:`****`,clientSecret:`****`}:b instanceof Map?Array.from(b.entries()):b;function template(a,b){let c="";if(b)for(let d,e=0;e<b.length;e++)d=b[e],
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.KameleoonLogger=void 0;var _types=require("./types"),_defaultLogger=require("./defaultLogger");function _defineProperty(a,b,c){return(b=_toPropertyKey(b))in a?Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!0}):a[b]=c,a}function _toPropertyKey(a){var b=_toPrimitive(a,"string");return"symbol"==typeof b?b:b+""}function _toPrimitive(a,b){if("object"!=typeof a||!a)return a;var c=a[Symbol.toPrimitive];if(void 0!==c){var d=c.call(a,b||"default");if("object"!=typeof d)return d;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===b?String:Number)(a)}const replacer=(a,b)=>"credentials"===a?{clientId:`****`,clientSecret:`****`}:b instanceof Map?Array.from(b.entries()):b;function template(a,b){let c="";if(b)for(let d,e=0;e<b.length;e++)if(d=b[e],"object"==typeof d)try{c+=a[e]+JSON.stringify(d,replacer)}catch(b){c+=a[e]+"{object}"}else c+="string"==typeof d?a[e]+"'"+d+"'":a[e]+d;return c+=a[a.length-1],c}class KameleoonLogger{static setLogger(a){KameleoonLogger.logger=a}static setLogLevel(a){KameleoonLogger.logLevel=a}static log(a){let{level:b,strings:c,keys:d}=a;if(!KameleoonLogger.checkLevel(b))return;let e;e="string"==typeof c?c:"function"==typeof c?c():template(c,d),KameleoonLogger.writeMessage(b,e)}static info(a){for(var b=arguments.length,c=Array(1<b?b-1:0),d=1;d<b;d++)c[d-1]=arguments[d];KameleoonLogger.log({level:_types.LogLevel.INFO,strings:a,keys:c})}static error(a){for(var b=arguments.length,c=Array(1<b?b-1:0),d=1;d<b;d++)c[d-1]=arguments[d];KameleoonLogger.log({level:_types.LogLevel.ERROR,strings:a,keys:c})}static warning(a){for(var b=arguments.length,c=Array(1<b?b-1:0),d=1;d<b;d++)c[d-1]=arguments[d];KameleoonLogger.log({level:_types.LogLevel.WARNING,strings:a,keys:c})}static debug(a){for(var b=arguments.length,c=Array(1<b?b-1:0),d=1;d<b;d++)c[d-1]=arguments[d];KameleoonLogger.log({level:_types.LogLevel.DEBUG,strings:a,keys:c})}static checkLevel(a){return a<=KameleoonLogger.logLevel&&a!==_types.LogLevel.NONE}static writeMessage(a,b){KameleoonLogger.logger.log(a,`Kameleoon [${_types.LOG_LEVEL_NAMES[a]}]: ${b}`)}}exports.KameleoonLogger=KameleoonLogger,_defineProperty(KameleoonLogger,"logger",new _defaultLogger.DefaultLogger),_defineProperty(KameleoonLogger,"logLevel",_types.LogLevel.WARNING);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";const _excluded=["exposition"];Object.defineProperty(exports,"__esModule",{value:!0}),exports.VariationConfiguration=void 0;var _tsRes=require("ts-res"),_hasher=require("../hasher"),_kameleoonError=require("../kameleoonError"),_utilities=require("../utilities"),_types=require("../clientConfiguration/types"),_types2=require("../types"),_logging=require("../logging");function _objectWithoutProperties(a,b){if(null==a)return{};var c,d,e=_objectWithoutPropertiesLoose(a,b);if(Object.getOwnPropertySymbols){var f=Object.getOwnPropertySymbols(a);for(d=0;d<f.length;d++)c=f[d],b.includes(c)||{}.propertyIsEnumerable.call(a,c)&&(e[c]=a[c])}return e}function _objectWithoutPropertiesLoose(a,b){if(null==a)return{};var c={};for(var d in a)if({}.hasOwnProperty.call(a,d)){if(b.includes(d))continue;c[d]=a[d]}return c}function ownKeys(a,b){var c=Object.keys(a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(a);b&&(d=d.filter(function(b){return Object.getOwnPropertyDescriptor(a,b).enumerable})),c.push.apply(c,d)}return c}function _objectSpread(a){for(var b,c=1;c<arguments.length;c++)b=null==arguments[c]?{}:arguments[c],c%2?ownKeys(Object(b),!0).forEach(function(c){_defineProperty(a,c,b[c])}):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(b)):ownKeys(Object(b)).forEach(function(c){Object.defineProperty(a,c,Object.getOwnPropertyDescriptor(b,c))});return a}function _defineProperty(a,b,c){return(b=_toPropertyKey(b))in a?Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!0}):a[b]=c,a}function _toPropertyKey(a){var b=_toPrimitive(a,"string");return"symbol"==typeof b?b:b+""}function _toPrimitive(a,b){if("object"!=typeof a||!a)return a;var c=a[Symbol.toPrimitive];if(void 0!==c){var d=c.call(a,b||"default");if("object"!=typeof d)return d;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===b?String:Number)(a)}class VariationConfiguration{constructor(a,b){_defineProperty(this,"storage",void 0),_defineProperty(this,"visitorCodeManager",void 0),this.storage=a,this.visitorCodeManager=b}updateDataStatus(a){let{visitorCode:b,experimentIdList:c,status:d}=a;const e=this.storage.read();if(!e.ok)return e;let f=e.data;f[b]||(f[b]={});for(const e of c)f[b][e]=_objectSpread(_objectSpread({},f[b][e]),{},{status:d});return this.storage.write(f)}getUnsentData(a){return this.getVariationData(a,a=>a===_types2.TrackingStatus.Unsent)}getPendingData(a){return this.getVariationData(a,a=>a===_types2.TrackingStatus.Pending)}getStoredVariations(a){const b=this.storage.read();if(!b.ok)return b;const c=b.data[a];return c?(0,_tsRes.Ok)(c):(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.StorageRead,a))}getVariation(a){let{visitorCode:b,visitorIdentifier:c,featureFlag:d,targetingData:e,packageInfo:f,clientConfiguration:g,dataManager:h,track:i=!0,withAssignment:j=!1}=a;_logging.KameleoonLogger.debug`CALL: VariationConfiguration.getVariation(visitorCode: ${b}, visitorIdentifier: ${c}, featureFlag: ${d}, targetingData: ${e}, packageInfo: ${f}, clientConfiguration, dataManager, withAssignment: ${j})`;const k=this.visitorCodeManager.validateVisitorCode(b);if(!k.ok)return(0,_tsRes.Err)(k.error);const{rules:l,featureKey:m,id:n,defaultVariationKey:o}=d;for(const k of l){const{segment:a,experimentId:l,id:p,exposition:q,respoolTime:r,variationByExposition:s}=k,t=_utilities.Utilities.checkTargeting({segment:a,visitorCode:b,experimentId:l,targetingData:e,packageInfo:f,clientConfiguration:g,dataManager:h,variationConfiguration:this});if(!t.ok)return _logging.KameleoonLogger.debug`RETURN: VariationConfiguration.getVariation(visitorCode: ${b}, visitorIdentifier: ${c}, featureFlag: ${d}, targetingData: ${e}, packageInfo: ${f}, clientConfiguration, dataManager, withAssignment: ${j}) -> (targetedVariation: ${t})`,t;if(!t.data)continue;_logging.KameleoonLogger.info`Visitor ${b} has been targeted for ${k}`;const u=_hasher.Hasher.getHashDouble({visitorIdentifier:c,respoolTime:r,id:p+""});if(_logging.KameleoonLogger.debug`Calculated ruleHash: ${u} for visitorCode: ${b}`,u<=q){let a=0;const g=_hasher.Hasher.getHashDouble({visitorIdentifier:c,respoolTime:r,id:l+""});_logging.KameleoonLogger.debug`Calculated variationHash: ${g} for visitorCode: ${b}`;for(const h of s)if(a+=h.exposition,g<=a){j&&this.updateStoredVariations(b,{[l]:{variationId:h.variationId,isTargetedRule:k.type===_types.RuleType.TARGETED_DELIVERY,status:i?_types2.TrackingStatus.Unsent:_types2.TrackingStatus.Sent}});const{exposition:a}=h,g=_objectWithoutProperties(h,_excluded),o=_objectSpread(_objectSpread({},g),{},{rule:k,featureFlagId:n,featureKey:m,experimentId:l,isTargetedRule:k.type===_types.RuleType.TARGETED_DELIVERY});return _logging.KameleoonLogger.debug`RETURN: VariationConfiguration.getVariation(visitorCode: ${b}, visitorIdentifier: ${c}, featureFlag: ${d}, targetingData: ${e}, packageInfo: ${f}, clientConfiguration, dataManager, withAssignment: ${j}) -> (targetedVariation: ${o})`,(0,_tsRes.Ok)(o)}}if(k.type===_types.RuleType.TARGETED_DELIVERY){const a={featureKey:m,featureFlagId:n,experimentId:null,variationKey:o,variationId:null,rule:null,isTargetedRule:!0};return _logging.KameleoonLogger.debug`RETURN: VariationConfiguration.getVariation(visitorCode: ${b}, visitorIdentifier: ${c}, featureFlag: ${d}, targetingData: ${e}, packageInfo: ${f}, clientConfiguration, dataManager, withAssignment: ${j}) -> (targetedVariation: ${a})`,(0,_tsRes.Ok)(a)}}const p={featureKey:m,featureFlagId:n,experimentId:null,variationKey:o,variationId:null,rule:null,isTargetedRule:!1};return _logging.KameleoonLogger.debug`RETURN: VariationConfiguration.getVariation(visitorCode: ${b}, visitorIdentifier: ${c}, featureFlag: ${d}, targetingData: ${e}, packageInfo: ${f}, clientConfiguration, dataManager, withAssignment: ${j}) -> (targetedVariation: ${p})`,(0,_tsRes.Ok)(p)}updateStoredVariations(a,b){const c=this.storage.read();if(!c.ok)return c;let d=c.data;
|
|
1
|
+
"use strict";const _excluded=["exposition"];Object.defineProperty(exports,"__esModule",{value:!0}),exports.VariationConfiguration=void 0;var _tsRes=require("ts-res"),_hasher=require("../hasher"),_kameleoonError=require("../kameleoonError"),_utilities=require("../utilities"),_types=require("../clientConfiguration/types"),_types2=require("../types"),_logging=require("../logging");function _objectWithoutProperties(a,b){if(null==a)return{};var c,d,e=_objectWithoutPropertiesLoose(a,b);if(Object.getOwnPropertySymbols){var f=Object.getOwnPropertySymbols(a);for(d=0;d<f.length;d++)c=f[d],b.includes(c)||{}.propertyIsEnumerable.call(a,c)&&(e[c]=a[c])}return e}function _objectWithoutPropertiesLoose(a,b){if(null==a)return{};var c={};for(var d in a)if({}.hasOwnProperty.call(a,d)){if(b.includes(d))continue;c[d]=a[d]}return c}function ownKeys(a,b){var c=Object.keys(a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(a);b&&(d=d.filter(function(b){return Object.getOwnPropertyDescriptor(a,b).enumerable})),c.push.apply(c,d)}return c}function _objectSpread(a){for(var b,c=1;c<arguments.length;c++)b=null==arguments[c]?{}:arguments[c],c%2?ownKeys(Object(b),!0).forEach(function(c){_defineProperty(a,c,b[c])}):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(b)):ownKeys(Object(b)).forEach(function(c){Object.defineProperty(a,c,Object.getOwnPropertyDescriptor(b,c))});return a}function _defineProperty(a,b,c){return(b=_toPropertyKey(b))in a?Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!0}):a[b]=c,a}function _toPropertyKey(a){var b=_toPrimitive(a,"string");return"symbol"==typeof b?b:b+""}function _toPrimitive(a,b){if("object"!=typeof a||!a)return a;var c=a[Symbol.toPrimitive];if(void 0!==c){var d=c.call(a,b||"default");if("object"!=typeof d)return d;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===b?String:Number)(a)}class VariationConfiguration{constructor(a,b){_defineProperty(this,"storage",void 0),_defineProperty(this,"visitorCodeManager",void 0),this.storage=a,this.visitorCodeManager=b}updateDataStatus(a){let{visitorCode:b,experimentIdList:c,status:d}=a;const e=this.storage.read();if(!e.ok)return e;let f=e.data;f[b]||(f[b]={});for(const e of c)f[b][e]=_objectSpread(_objectSpread({},f[b][e]),{},{status:d});return this.storage.write(f)}getUnsentData(a){return this.getVariationData(a,a=>a===_types2.TrackingStatus.Unsent)}getPendingData(a){return this.getVariationData(a,a=>a===_types2.TrackingStatus.Pending)}getStoredVariations(a){const b=this.storage.read();if(!b.ok)return b;const c=b.data[a];return c?(0,_tsRes.Ok)(c):(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.StorageRead,a))}getVariation(a){let{visitorCode:b,visitorIdentifier:c,featureFlag:d,targetingData:e,packageInfo:f,clientConfiguration:g,dataManager:h,track:i=!0,withAssignment:j=!1}=a;_logging.KameleoonLogger.debug`CALL: VariationConfiguration.getVariation(visitorCode: ${b}, visitorIdentifier: ${c}, featureFlag: ${d}, targetingData: ${e}, packageInfo: ${f}, clientConfiguration, dataManager, withAssignment: ${j})`;const k=this.visitorCodeManager.validateVisitorCode(b);if(!k.ok)return(0,_tsRes.Err)(k.error);const{rules:l,featureKey:m,id:n,defaultVariationKey:o}=d;for(const k of l){const{segment:a,experimentId:l,id:p,exposition:q,respoolTime:r,variationByExposition:s}=k,t=_utilities.Utilities.checkTargeting({segment:a,visitorCode:b,experimentId:l,targetingData:e,packageInfo:f,clientConfiguration:g,dataManager:h,variationConfiguration:this});if(!t.ok)return _logging.KameleoonLogger.debug`RETURN: VariationConfiguration.getVariation(visitorCode: ${b}, visitorIdentifier: ${c}, featureFlag: ${d}, targetingData: ${e}, packageInfo: ${f}, clientConfiguration, dataManager, withAssignment: ${j}) -> (targetedVariation: ${t})`,t;if(!t.data)continue;_logging.KameleoonLogger.info`Visitor ${b} has been targeted for ${k}`;const u=_hasher.Hasher.getHashDouble({visitorIdentifier:c,respoolTime:r,id:p+""});if(_logging.KameleoonLogger.debug`Calculated ruleHash: ${u} for visitorCode: ${b}`,u<=q){let a=0;const g=_hasher.Hasher.getHashDouble({visitorIdentifier:c,respoolTime:r,id:l+""});_logging.KameleoonLogger.debug`Calculated variationHash: ${g} for visitorCode: ${b}`;for(const h of s)if(a+=h.exposition,g<=a){j&&this.updateStoredVariations(b,{[l]:{variationId:h.variationId,isTargetedRule:k.type===_types.RuleType.TARGETED_DELIVERY,status:i?_types2.TrackingStatus.Unsent:_types2.TrackingStatus.Sent}});const{exposition:a}=h,g=_objectWithoutProperties(h,_excluded),o=_objectSpread(_objectSpread({},g),{},{rule:k,featureFlagId:n,featureKey:m,experimentId:l,isTargetedRule:k.type===_types.RuleType.TARGETED_DELIVERY});return _logging.KameleoonLogger.debug`RETURN: VariationConfiguration.getVariation(visitorCode: ${b}, visitorIdentifier: ${c}, featureFlag: ${d}, targetingData: ${e}, packageInfo: ${f}, clientConfiguration, dataManager, withAssignment: ${j}) -> (targetedVariation: ${o})`,(0,_tsRes.Ok)(o)}}if(k.type===_types.RuleType.TARGETED_DELIVERY){const a={featureKey:m,featureFlagId:n,experimentId:null,variationKey:o,variationId:null,rule:null,isTargetedRule:!0};return _logging.KameleoonLogger.debug`RETURN: VariationConfiguration.getVariation(visitorCode: ${b}, visitorIdentifier: ${c}, featureFlag: ${d}, targetingData: ${e}, packageInfo: ${f}, clientConfiguration, dataManager, withAssignment: ${j}) -> (targetedVariation: ${a})`,(0,_tsRes.Ok)(a)}}const p={featureKey:m,featureFlagId:n,experimentId:null,variationKey:o,variationId:null,rule:null,isTargetedRule:!1};return _logging.KameleoonLogger.debug`RETURN: VariationConfiguration.getVariation(visitorCode: ${b}, visitorIdentifier: ${c}, featureFlag: ${d}, targetingData: ${e}, packageInfo: ${f}, clientConfiguration, dataManager, withAssignment: ${j}) -> (targetedVariation: ${p})`,(0,_tsRes.Ok)(p)}updateStoredVariations(a,b){const c=this.storage.read();if(!c.ok)return c;let d=c.data;for(const c in d[a]||(d[a]={}),b)d[a][c]=b[c];return this.storage.write(d)}getVariationData(a,b){const c=this.getStoredVariations(a);if(!c.ok)return[];const d=[];for(const[e,f]of Object.entries(c.data))b(f.status)&&d.push({experimentId:+e,variationId:f.variationId,isTargetedRule:f.isTargetedRule});return d}}exports.VariationConfiguration=VariationConfiguration;
|