@kameleoon/javascript-sdk-core 4.4.0 → 4.4.1

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,12 @@
1
1
  # Change Log
2
2
 
3
+ ## 4.4.1 (2024-07-12)
4
+
5
+ ### Patch Changes
6
+
7
+ - `ClientConfiguration` and `RemoteData` Kameleoon Exceptions are now more informative
8
+ - [`getEngineTrackingCode`](https://developers.kameleoon.com/feature-management-and-experimentation/web-sdks/js-sdk/#getenginetrackingcode) output code is now correctly overrides experiment variation assigned by JS Script
9
+
3
10
  ## 4.4.0 (2024-06-21)
4
11
 
5
12
  ### Features
@@ -1,3 +1,10 @@
1
1
  # Internal Change Log
2
2
 
3
3
  All significant internal changes to this project will be documented in this file.
4
+
5
+
6
+ ## 4.4.1 (2024-07-12)
7
+
8
+ ### Patch Changes
9
+
10
+ - `deploy_bundle` CI/CD step now re-builds SDK before running script to make sure it's still cached when deploying separately from the main pipeline.
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.KameleoonClient=void 0;var _tsRes=require("ts-res"),_cacheManager=require("./cacheManager"),_clientConfiguration=require("./clientConfiguration"),_clientSettings=require("./clientSettings"),_constants=require("./constants"),_kameleoonData=require("./kameleoonData"),_kameleoonError=require("./kameleoonError"),_requester=require("./requester"),_storage=require("./storage"),_utilities=require("./utilities"),_variationConfiguration=require("./variationConfiguration"),_eventManager=require("./eventManager"),_eventSource=require("./eventSource"),_visitorCodeManager=require("./visitorCodeManager");function _defineProperty(a,b,c){return b=_toPropertyKey(b),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 KameleoonClient{constructor(a){let{siteCode:b,configuration:c,internalConfiguration:d}=a;_defineProperty(this,"variationConfiguration",void 0),_defineProperty(this,"clientConfiguration",void 0),_defineProperty(this,"dataManager",void 0),_defineProperty(this,"offlineTrackingStorage",void 0),_defineProperty(this,"consentDataStorage",void 0),_defineProperty(this,"trackingCache",void 0),_defineProperty(this,"requester",void 0),_defineProperty(this,"externalPackageInfo",void 0),_defineProperty(this,"initialized",!1),_defineProperty(this,"visitorCodeManager",void 0),_defineProperty(this,"eventManager",void 0),_defineProperty(this,"environment",void 0),_defineProperty(this,"isOfflineModeOn",void 0);const{settings:e}=new _clientSettings.ClientSettings(b,c);this.environment=e.environment;const{externalStorage:f,externalEventSource:g,externalPackageInfo:h,externalVisitorCodeManager:i,externalRequester:j,externalClientConfiguration:k}=d,l=new _cacheManager.CacheManager(_constants.CACHE_CLEANUP_TIMEOUT),m=new _storage.DataStorage(f,_storage.KameleoonStorageKey.ClientData),n=new _storage.DataStorage(f,_storage.KameleoonStorageKey.TargetingData),o=new _storage.DataStorage(f,_storage.KameleoonStorageKey.VariationData),p=new _storage.DataStorage(f,_storage.KameleoonStorageKey.OfflineTracking),q=new _storage.DataStorage(f,_storage.KameleoonStorageKey.ConsentData),r=new _kameleoonData.DataManager({storage:n,cleanupInterval:e.cleanupInterval}),s=new _requester.Requester({siteCode:b,domain:e.networkDomain,environment:e.environment,packageInfo:h,externalRequester:j,requestTimeout:e.requestTimeout,trackRetryDelay:e.trackRetryDelay}),t=new _eventSource.KameleoonEventSource(e.siteCode,g),u=new _eventManager.EventManager,v=new _clientConfiguration.ClientConfiguration({storage:m,updateInterval:e.updateInterval,dataManager:r,eventManager:u,requester:s,externalClientConfiguration:k,offlineTrackingStorage:p,eventSource:t,externalVisitorCodeManager:i}),w=new _variationConfiguration.VariationConfiguration(o);this.variationConfiguration=w,this.requester=s,this.trackingCache=l,this.dataManager=r,this.clientConfiguration=v,this.externalPackageInfo=h,this.offlineTrackingStorage=p,this.consentDataStorage=q,this.visitorCodeManager=i,this.eventManager=u}async initialize(a){const b=await this.clientConfiguration.initialize();return b.throw(),this.isOfflineModeOn=a,this.initialized=!0,b.ok}addData(a){if(_utilities.Utilities.validateVisitorCode(a).throw(),!this.initialized)throw new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.Initialization);for(var b=arguments.length,c=Array(1<b?b-1:0),d=1;d<b;d++)c[d-1]=arguments[d];this.dataManager.addData(a,...c).throw()}async getRemoteVisitorData(a){let{visitorCode:b,shouldAddData:c=!0,filters:d=_constants.DEFAULT_VISITOR_DATA_FILTERS,isUniqueIdentifier:e=!1}=a;if(!this.initialized)throw new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.Initialization);_utilities.Utilities.validateVisitorCode(b).throw();const{previousVisitAmount:f}=d;if("number"==typeof f&&(1>f||25<f))throw new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.VisitAmount);const g=await this.requester.getVisitorData({visitorCode:b,filters:d,isMappingIdentifier:e}),h=g.throw(),{visitorData:i,storageVisitorData:j,visitsData:k}=_utilities.Utilities.parseVisitorData({data:h,filters:d,visitorCode:b,dataManager:this.dataManager,variationConfiguration:this.variationConfiguration});for(const d of j)(c||this.dataManager.isPersistentCustomData(d))&&this.addData(b,d);return k&&c&&this.addData(b,k),i}trackConversion(a){let{visitorCode:b,goalId:c,revenue:d,isUniqueIdentifier:e}=a;this.addData(b,new _kameleoonData.Conversion({goalId:c,revenue:d})),this.flush(b,e)}flush(a,b){if(!this.initialized)throw new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.Initialization);if("string"==typeof a&&_utilities.Utilities.validateVisitorCode(a).throw(),a){let c=!1;if(b){const b=this.dataManager.getLinkedVisitor(a),d=this.dataManager.identifierCustomDataIndex;b||"number"!=typeof d?c=!0:this.dataManager.addData(a,new _kameleoonData.CustomData(d,a))}return void _utilities.Utilities.trackData({visitorCode:a,isMappingIdentifier:c,dataManager:this.dataManager,requester:this.requester,isOfflineModeOn:this.isOfflineModeOn,isConsentProvided:this._isConsentProvided(a),offlineTrackingStorage:this.offlineTrackingStorage})}if(!this.dataManager.unsentDataVisitors.length)return void _utilities.Utilities.sendOfflineTracking({requester:this.requester,storage:this.offlineTrackingStorage});for(const c of this.dataManager.unsentDataVisitors)_utilities.Utilities.trackData({visitorCode:c,dataManager:this.dataManager,requester:this.requester,isOfflineModeOn:this.isOfflineModeOn,isConsentProvided:this._isConsentProvided(c),offlineTrackingStorage:this.offlineTrackingStorage})}getFeatureFlags(){if(!this.initialized)throw new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.Initialization);const a=this.clientConfiguration.featureFlags,b=[];return a.forEach(a=>{let{id:c,featureKey:d}=a;b.push({id:c,key:d})}),b}getVisitorFeatureFlags(a){if(!this.initialized)throw new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.Initialization);const b=this._getActiveFeatureVariations(a),c=[];return b.forEach(a=>{let{featureFlagId:b,featureKey:d}=a;c.push({id:b,key:d})}),c}getActiveFeatureFlags(a){const b=this._getActiveFeatureVariations(a),c=new Map;return b.forEach(b=>{const{variationKey:d,featureKey:e,variationId:f,experimentId:g}=b;let h=[];null!==f&&null!==g&&(h=this._getFeatureVariables({visitorCode:a,featureKey:e,variationKey:d}));const i=h.map(a=>_utilities.Utilities.parseFeatureVariable(a).throw());c.set(b.featureKey,{key:d,id:f,experimentId:g,variables:i})}),c}getFeatureFlagVariationKey(a,b){_utilities.Utilities.validateVisitorCode(a).throw();const{variationKey:c}=this._getFeatureVariation(a,b).throw();return c}getFeatureFlagVariable(a){let{visitorCode:b,featureKey:c,variableKey:d}=a;_utilities.Utilities.validateVisitorCode(b).throw();const{variationKey:e}=this._getFeatureVariation(b,c).throw(),f=this._getFeatureVariables({visitorCode:b,featureKey:c,variationKey:e}),g=f.find(a=>a.key===d);if(!g)throw new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.FeatureFlagVariableNotFound,d,b);const{type:h,value:i}=_utilities.Utilities.parseFeatureVariable(g).throw();return{type:h,value:i}}getFeatureFlagVariables(a,b){_utilities.Utilities.validateVisitorCode(a).throw();const{variationKey:c}=this._getFeatureVariation(a,b).throw(),d=this._getFeatureVariables({visitorCode:a,featureKey:b,variationKey:c}),e=[];for(const c of d){const a=_utilities.Utilities.parseFeatureVariable(c).throw();e.push(a)}return e}isFeatureFlagActive(a,b){try{const c=this.getFeatureFlagVariationKey(a,b);return c!==_constants.OFF_VARIATION_KEY}catch(a){if(a instanceof _kameleoonError.KameleoonError&&a.type===_kameleoonError.KameleoonException.FeatureFlagEnvironmentDisabled)return!1;throw a}}async getRemoteData(a){const b=await this.requester.getRemoteData(a);return b.throw()}async getVisitorWarehouseAudience(a){let{visitorCode:b,customDataIndex:c,warehouseKey:d}=a;_utilities.Utilities.validateVisitorCode(b).throw();const e=await this.getRemoteData(d||b);if(!e)throw new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.RemoteData);if(!e[_constants.WAREHOUSE_AUDIENCE_KEY]||0===Object.keys(e[_constants.WAREHOUSE_AUDIENCE_KEY]).length)return null;const f=new _kameleoonData.CustomData(c,...Object.keys(e[_constants.WAREHOUSE_AUDIENCE_KEY]));return this.dataManager.addData(b,f),f}onConfigurationUpdate(a){if(!this.initialized)throw new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.Initialization);this.eventManager.addEventHandler(_eventManager.EventType.ConfigurationUpdate,a)}onEvent(a,b){if(!this.initialized)throw new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.Initialization);this.eventManager.addEventHandler(a,b)}getEngineTrackingCode(a){return _utilities.Utilities.validateVisitorCode(a).throw(),_utilities.Utilities.getTrackingCode(this.trackingCache,a)}isInitialized(){return this.initialized}setUserConsent(a){let{visitorCode:b,consent:c,setData:d}=a;_utilities.Utilities.validateVisitorCode(b).throw(),this.consentDataStorage.update({[b]:c}),c?d({visitorCode:b,key:_storage.KameleoonStorageKey.VisitorCode,maxAge:_visitorCodeManager.DEFAULT_MAX_AGE,path:_visitorCodeManager.PATH}):this.visitorCodeManager.consentRequired&&d({visitorCode:"",key:_storage.KameleoonStorageKey.VisitorCode,maxAge:_visitorCodeManager.ZERO_MAX_AGE,path:_visitorCodeManager.PATH})}_isConsentProvided(a){const{isConsentRequired:b}=this.clientConfiguration,c=this.consentDataStorage.read();return!b||c.ok&&c.data[a]}_getFeatureVariables(a){let{visitorCode:b,featureKey:c,variationKey:d}=a;const e=this.clientConfiguration.featureFlags,f=e.get(c);if(!f)throw new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.FeatureFlagConfigurationNotFound,c);const g=f.variations.find(a=>a.key===d);if(!g)throw new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.FeatureFlagVariationNotFound,d,b);return g.variables}_getActiveFeatureVariations(a){if(!this.initialized)throw new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.Initialization);const b=this.clientConfiguration.featureFlags,c=[],d=this.dataManager.getTargetingData(a),e=this.dataManager.getVisitorIdentifier(a);for(const f of b.values()){if(!f.environmentEnabled)continue;const b=this.variationConfiguration.getVariation({visitorCode:a,visitorIdentifier:e,targetingData:d,featureFlag:f,clientConfiguration:this.clientConfiguration,dataManager:this.dataManager,packageInfo:this.externalPackageInfo}).throw();this.eventManager.fireEvent(_eventManager.EventType.Evaluation,{featureKey:f.featureKey,variation:{key:b.variationKey,experimentId:b.experimentId,id:b.variationId}}),b.variationKey!==_constants.OFF_VARIATION_KEY&&c.push(b)}return c}_getFeatureVariation(a,b){if(!this.initialized)return(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.Initialization));const c=this.clientConfiguration.featureFlags,d=c.get(b);if(!d)return(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.FeatureFlagConfigurationNotFound,b));if(!d.environmentEnabled)return(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.FeatureFlagEnvironmentDisabled,d.featureKey,this.environment));const e=this.dataManager.getTargetingData(a),f=this.dataManager.getVisitorIdentifier(a),g=this.variationConfiguration.getVariation({visitorCode:a,visitorIdentifier:f,featureFlag:d,targetingData:e,withAssignment:!0,clientConfiguration:this.clientConfiguration,dataManager:this.dataManager,packageInfo:this.externalPackageInfo}).throw();this.eventManager.fireEvent(_eventManager.EventType.Evaluation,{featureKey:b,variation:{key:g.variationKey,experimentId:g.experimentId,id:g.variationId}});const{experimentId:h,variationId:i}=g;return"number"==typeof i&&"number"==typeof h&&_utilities.Utilities.updateCache({cacheManager:this.trackingCache,visitorCode:a,experimentId:h,variationId:i}),_utilities.Utilities.trackFeatureExperiment({visitorCode:a,requester:this.requester,featureFlagVariation:g,dataManager:this.dataManager,isOfflineModeOn:this.isOfflineModeOn,isConsentProvided:this._isConsentProvided(a),offlineTrackingStorage:this.offlineTrackingStorage,variationConfiguration:this.variationConfiguration}),(0,_tsRes.Ok)(g)}}exports.KameleoonClient=KameleoonClient;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.KameleoonClient=void 0;var _tsRes=require("ts-res"),_cacheManager=require("./cacheManager"),_clientConfiguration=require("./clientConfiguration"),_clientSettings=require("./clientSettings"),_constants=require("./constants"),_kameleoonData=require("./kameleoonData"),_kameleoonError=require("./kameleoonError"),_requester=require("./requester"),_storage=require("./storage"),_utilities=require("./utilities"),_variationConfiguration=require("./variationConfiguration"),_eventManager=require("./eventManager"),_eventSource=require("./eventSource"),_visitorCodeManager=require("./visitorCodeManager");function _defineProperty(a,b,c){return b=_toPropertyKey(b),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 KameleoonClient{constructor(a){let{siteCode:b,configuration:c,internalConfiguration:d}=a;_defineProperty(this,"variationConfiguration",void 0),_defineProperty(this,"clientConfiguration",void 0),_defineProperty(this,"dataManager",void 0),_defineProperty(this,"offlineTrackingStorage",void 0),_defineProperty(this,"consentDataStorage",void 0),_defineProperty(this,"trackingCache",void 0),_defineProperty(this,"requester",void 0),_defineProperty(this,"externalPackageInfo",void 0),_defineProperty(this,"initialized",!1),_defineProperty(this,"visitorCodeManager",void 0),_defineProperty(this,"eventManager",void 0),_defineProperty(this,"environment",void 0),_defineProperty(this,"isOfflineModeOn",void 0);const{settings:e}=new _clientSettings.ClientSettings(b,c);this.environment=e.environment;const{externalStorage:f,externalEventSource:g,externalPackageInfo:h,externalVisitorCodeManager:i,externalRequester:j,externalClientConfiguration:k}=d,l=new _cacheManager.CacheManager(_constants.CACHE_CLEANUP_TIMEOUT),m=new _storage.DataStorage(f,_storage.KameleoonStorageKey.ClientData),n=new _storage.DataStorage(f,_storage.KameleoonStorageKey.TargetingData),o=new _storage.DataStorage(f,_storage.KameleoonStorageKey.VariationData),p=new _storage.DataStorage(f,_storage.KameleoonStorageKey.OfflineTracking),q=new _storage.DataStorage(f,_storage.KameleoonStorageKey.ConsentData),r=new _kameleoonData.DataManager({storage:n,cleanupInterval:e.cleanupInterval}),s=new _requester.Requester({siteCode:b,domain:e.networkDomain,environment:e.environment,packageInfo:h,externalRequester:j,requestTimeout:e.requestTimeout,trackRetryDelay:e.trackRetryDelay}),t=new _eventSource.KameleoonEventSource(e.siteCode,g),u=new _eventManager.EventManager,v=new _clientConfiguration.ClientConfiguration({storage:m,updateInterval:e.updateInterval,dataManager:r,eventManager:u,requester:s,externalClientConfiguration:k,offlineTrackingStorage:p,eventSource:t,externalVisitorCodeManager:i}),w=new _variationConfiguration.VariationConfiguration(o);this.variationConfiguration=w,this.requester=s,this.trackingCache=l,this.dataManager=r,this.clientConfiguration=v,this.externalPackageInfo=h,this.offlineTrackingStorage=p,this.consentDataStorage=q,this.visitorCodeManager=i,this.eventManager=u}async initialize(a){const b=await this.clientConfiguration.initialize();return b.throw(),this.isOfflineModeOn=a,this.initialized=!0,b.ok}addData(a){if(_utilities.Utilities.validateVisitorCode(a).throw(),!this.initialized)throw new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.Initialization);for(var b=arguments.length,c=Array(1<b?b-1:0),d=1;d<b;d++)c[d-1]=arguments[d];this.dataManager.addData(a,...c).throw()}async getRemoteVisitorData(a){let{visitorCode:b,shouldAddData:c=!0,filters:d=_constants.DEFAULT_VISITOR_DATA_FILTERS,isUniqueIdentifier:e=!1}=a;if(!this.initialized)throw new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.Initialization);_utilities.Utilities.validateVisitorCode(b).throw();const{previousVisitAmount:f}=d;if("number"==typeof f&&(1>f||25<f))throw new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.VisitAmount);const g=await this.requester.getVisitorData({visitorCode:b,filters:d,isMappingIdentifier:e}),h=g.throw(),{visitorData:i,storageVisitorData:j,visitsData:k}=_utilities.Utilities.parseVisitorData({data:h,filters:d,visitorCode:b,dataManager:this.dataManager,variationConfiguration:this.variationConfiguration});for(const d of j)(c||this.dataManager.isPersistentCustomData(d))&&this.addData(b,d);return k&&c&&this.addData(b,k),i}trackConversion(a){let{visitorCode:b,goalId:c,revenue:d,isUniqueIdentifier:e}=a;this.addData(b,new _kameleoonData.Conversion({goalId:c,revenue:d})),this.flush(b,e)}flush(a,b){if(!this.initialized)throw new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.Initialization);if("string"==typeof a&&_utilities.Utilities.validateVisitorCode(a).throw(),a){let c=!1;if(b){const b=this.dataManager.getLinkedVisitor(a),d=this.dataManager.identifierCustomDataIndex;b||"number"!=typeof d?c=!0:this.dataManager.addData(a,new _kameleoonData.CustomData(d,a))}return void _utilities.Utilities.trackData({visitorCode:a,isMappingIdentifier:c,dataManager:this.dataManager,requester:this.requester,isOfflineModeOn:this.isOfflineModeOn,isConsentProvided:this._isConsentProvided(a),offlineTrackingStorage:this.offlineTrackingStorage})}if(!this.dataManager.unsentDataVisitors.length)return void _utilities.Utilities.sendOfflineTracking({requester:this.requester,storage:this.offlineTrackingStorage});for(const c of this.dataManager.unsentDataVisitors)_utilities.Utilities.trackData({visitorCode:c,dataManager:this.dataManager,requester:this.requester,isOfflineModeOn:this.isOfflineModeOn,isConsentProvided:this._isConsentProvided(c),offlineTrackingStorage:this.offlineTrackingStorage})}getFeatureFlags(){if(!this.initialized)throw new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.Initialization);const a=this.clientConfiguration.featureFlags,b=[];return a.forEach(a=>{let{id:c,featureKey:d}=a;b.push({id:c,key:d})}),b}getVisitorFeatureFlags(a){if(!this.initialized)throw new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.Initialization);const b=this._getActiveFeatureVariations(a),c=[];return b.forEach(a=>{let{featureFlagId:b,featureKey:d}=a;c.push({id:b,key:d})}),c}getActiveFeatureFlags(a){const b=this._getActiveFeatureVariations(a),c=new Map;return b.forEach(b=>{const{variationKey:d,featureKey:e,variationId:f,experimentId:g}=b;let h=[];null!==f&&null!==g&&(h=this._getFeatureVariables({visitorCode:a,featureKey:e,variationKey:d}));const i=h.map(a=>_utilities.Utilities.parseFeatureVariable(a).throw());c.set(b.featureKey,{key:d,id:f,experimentId:g,variables:i})}),c}getFeatureFlagVariationKey(a,b){_utilities.Utilities.validateVisitorCode(a).throw();const{variationKey:c}=this._getFeatureVariation(a,b).throw();return c}getFeatureFlagVariable(a){let{visitorCode:b,featureKey:c,variableKey:d}=a;_utilities.Utilities.validateVisitorCode(b).throw();const{variationKey:e}=this._getFeatureVariation(b,c).throw(),f=this._getFeatureVariables({visitorCode:b,featureKey:c,variationKey:e}),g=f.find(a=>a.key===d);if(!g)throw new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.FeatureFlagVariableNotFound,d,b);const{type:h,value:i}=_utilities.Utilities.parseFeatureVariable(g).throw();return{type:h,value:i}}getFeatureFlagVariables(a,b){_utilities.Utilities.validateVisitorCode(a).throw();const{variationKey:c}=this._getFeatureVariation(a,b).throw(),d=this._getFeatureVariables({visitorCode:a,featureKey:b,variationKey:c}),e=[];for(const c of d){const a=_utilities.Utilities.parseFeatureVariable(c).throw();e.push(a)}return e}isFeatureFlagActive(a,b){try{const c=this.getFeatureFlagVariationKey(a,b);return c!==_constants.OFF_VARIATION_KEY}catch(a){if(a instanceof _kameleoonError.KameleoonError&&a.type===_kameleoonError.KameleoonException.FeatureFlagEnvironmentDisabled)return!1;throw a}}async getRemoteData(a){const b=await this.requester.getRemoteData(a);return b.throw()}async getVisitorWarehouseAudience(a){let{visitorCode:b,customDataIndex:c,warehouseKey:d}=a;_utilities.Utilities.validateVisitorCode(b).throw();const e=await this.getRemoteData(d||b);if(!e)throw new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.RemoteData,"No data found for ".concat(d||b," key"));if(!e[_constants.WAREHOUSE_AUDIENCE_KEY]||0===Object.keys(e[_constants.WAREHOUSE_AUDIENCE_KEY]).length)return null;const f=new _kameleoonData.CustomData(c,...Object.keys(e[_constants.WAREHOUSE_AUDIENCE_KEY]));return this.dataManager.addData(b,f),f}onConfigurationUpdate(a){if(!this.initialized)throw new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.Initialization);this.eventManager.addEventHandler(_eventManager.EventType.ConfigurationUpdate,a)}onEvent(a,b){if(!this.initialized)throw new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.Initialization);this.eventManager.addEventHandler(a,b)}getEngineTrackingCode(a){return _utilities.Utilities.validateVisitorCode(a).throw(),_utilities.Utilities.getTrackingCode(this.trackingCache,a)}isInitialized(){return this.initialized}setUserConsent(a){let{visitorCode:b,consent:c,setData:d}=a;_utilities.Utilities.validateVisitorCode(b).throw(),this.consentDataStorage.update({[b]:c}),c?d({visitorCode:b,key:_storage.KameleoonStorageKey.VisitorCode,maxAge:_visitorCodeManager.DEFAULT_MAX_AGE,path:_visitorCodeManager.PATH}):this.visitorCodeManager.consentRequired&&d({visitorCode:"",key:_storage.KameleoonStorageKey.VisitorCode,maxAge:_visitorCodeManager.ZERO_MAX_AGE,path:_visitorCodeManager.PATH})}_isConsentProvided(a){const{isConsentRequired:b}=this.clientConfiguration,c=this.consentDataStorage.read();return!b||c.ok&&c.data[a]}_getFeatureVariables(a){let{visitorCode:b,featureKey:c,variationKey:d}=a;const e=this.clientConfiguration.featureFlags,f=e.get(c);if(!f)throw new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.FeatureFlagConfigurationNotFound,c);const g=f.variations.find(a=>a.key===d);if(!g)throw new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.FeatureFlagVariationNotFound,d,b);return g.variables}_getActiveFeatureVariations(a){if(!this.initialized)throw new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.Initialization);const b=this.clientConfiguration.featureFlags,c=[],d=this.dataManager.getTargetingData(a),e=this.dataManager.getVisitorIdentifier(a);for(const f of b.values()){if(!f.environmentEnabled)continue;const b=this.variationConfiguration.getVariation({visitorCode:a,visitorIdentifier:e,targetingData:d,featureFlag:f,clientConfiguration:this.clientConfiguration,dataManager:this.dataManager,packageInfo:this.externalPackageInfo}).throw();this.eventManager.fireEvent(_eventManager.EventType.Evaluation,{featureKey:f.featureKey,variation:{key:b.variationKey,experimentId:b.experimentId,id:b.variationId}}),b.variationKey!==_constants.OFF_VARIATION_KEY&&c.push(b)}return c}_getFeatureVariation(a,b){if(!this.initialized)return(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.Initialization));const c=this.clientConfiguration.featureFlags,d=c.get(b);if(!d)return(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.FeatureFlagConfigurationNotFound,b));if(!d.environmentEnabled)return(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.FeatureFlagEnvironmentDisabled,d.featureKey,this.environment));const e=this.dataManager.getTargetingData(a),f=this.dataManager.getVisitorIdentifier(a),g=this.variationConfiguration.getVariation({visitorCode:a,visitorIdentifier:f,featureFlag:d,targetingData:e,withAssignment:!0,clientConfiguration:this.clientConfiguration,dataManager:this.dataManager,packageInfo:this.externalPackageInfo}).throw();this.eventManager.fireEvent(_eventManager.EventType.Evaluation,{featureKey:b,variation:{key:g.variationKey,experimentId:g.experimentId,id:g.variationId}});const{experimentId:h,variationId:i}=g;return"number"==typeof i&&"number"==typeof h&&_utilities.Utilities.updateCache({cacheManager:this.trackingCache,visitorCode:a,experimentId:h,variationId:i}),_utilities.Utilities.trackFeatureExperiment({visitorCode:a,requester:this.requester,featureFlagVariation:g,dataManager:this.dataManager,isOfflineModeOn:this.isOfflineModeOn,isConsentProvided:this._isConsentProvided(a),offlineTrackingStorage:this.offlineTrackingStorage,variationConfiguration:this.variationConfiguration}),(0,_tsRes.Ok)(g)}}exports.KameleoonClient=KameleoonClient;
2
2
  //# sourceMappingURL=kameleoonClient.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"kameleoonClient.js","names":["KameleoonClient","constructor","a","siteCode","configuration","internalConfiguration","_defineProperty","settings","clientSettings","ClientSettings","environment","externalStorage","externalEventSource","externalPackageInfo","externalVisitorCodeManager","externalRequester","externalClientConfiguration","trackingCache","CacheManager","CACHE_CLEANUP_TIMEOUT","clientDataStorage","DataStorage","KameleoonStorageKey","ClientData","targetingDataStorage","TargetingData","variationDataStorage","VariationData","offlineTrackingStorage","OfflineTracking","consentDataStorage","ConsentData","dataManager","DataManager","storage","cleanupInterval","requester","Requester","domain","networkDomain","packageInfo","requestTimeout","trackRetryDelay","eventSource","KameleoonEventSource","eventManager","EventManager","clientConfiguration","ClientConfiguration","updateInterval","variationConfiguration","VariationConfiguration","visitorCodeManager","initialize","useCache","result","throw","isOfflineModeOn","initialized","ok","addData","visitorCode","Utilities","validateVisitorCode","KameleoonError","KameleoonException","Initialization","b","arguments","length","data","Array","d","getRemoteVisitorData","shouldAddData","filters","DEFAULT_VISITOR_DATA_FILTERS","isUniqueIdentifier","previousVisitAmount","VisitAmount","getVisitorData","isMappingIdentifier","visitorData","storageVisitorData","visitsData","parseVisitorData","dataItem","isPersistentCustomData","trackConversion","goalId","revenue","Conversion","flush","linkedVisitor","getLinkedVisitor","index","identifierCustomDataIndex","CustomData","trackData","isConsentProvided","_isConsentProvided","unsentDataVisitors","sendOfflineTracking","visitorCodeKey","getFeatureFlags","featureFlags","resultFeatureFlags","forEach","id","featureKey","push","key","getVisitorFeatureFlags","activeVariations","_getActiveFeatureVariations","featureFlagId","getActiveFeatureFlags","resultFeatureList","Map","variation","variationKey","variationId","experimentId","variables","_getFeatureVariables","resultVariables","map","variable","parseFeatureVariable","set","getFeatureFlagVariationKey","_getFeatureVariation","getFeatureFlagVariable","variableKey","find","item","FeatureFlagVariableNotFound","type","value","getFeatureFlagVariables","parsedVariable","isFeatureFlagActive","OFF_VARIATION_KEY","err","FeatureFlagEnvironmentDisabled","getRemoteData","remoteData","getVisitorWarehouseAudience","customDataIndex","warehouseKey","RemoteData","WAREHOUSE_AUDIENCE_KEY","Object","keys","customData","onConfigurationUpdate","callback","addEventHandler","EventType","ConfigurationUpdate","onEvent","event","getEngineTrackingCode","getTrackingCode","isInitialized","setUserConsent","consent","setData","update","VisitorCode","maxAge","DEFAULT_MAX_AGE","path","PATH","consentRequired","ZERO_MAX_AGE","isConsentRequired","consentDataResult","read","featureFlag","get","FeatureFlagConfigurationNotFound","variations","FeatureFlagVariationNotFound","targetingData","getTargetingData","visitorIdentifier","getVisitorIdentifier","values","environmentEnabled","variationData","getVariation","fireEvent","Evaluation","Err","withAssignment","updateCache","cacheManager","trackFeatureExperiment","featureFlagVariation","Ok","exports"],"sources":["../src/kameleoonClient.ts"],"sourcesContent":["import { Err, Ok, Result } from 'ts-res';\nimport { CacheManager } from './cacheManager';\nimport {\n ClientConfiguration,\n FeatureVariableType,\n JSONType,\n} from './clientConfiguration';\nimport { ClientSettings } from './clientSettings';\nimport {\n CACHE_CLEANUP_TIMEOUT,\n DEFAULT_VISITOR_DATA_FILTERS,\n OFF_VARIATION_KEY,\n} from './constants';\nimport {\n Conversion,\n CustomData,\n DataManager,\n KameleoonDataType,\n} from './kameleoonData';\nimport { WAREHOUSE_AUDIENCE_KEY } from './constants';\nimport { KameleoonError, KameleoonException } from './kameleoonError';\nimport { Requester } from './requester';\nimport {\n ClientDataType,\n KameleoonStorageKey,\n VariationDataType,\n DataStorage,\n ConsentDataType,\n IStorage,\n OfflineTracking,\n} from './storage';\nimport {\n TrackConversionParamsType,\n FeatureFlagType,\n GetFeatureFlagVariableParamsType,\n FeatureVariableResultType,\n SDKCoreParameters,\n TrackingCacheItemType,\n ExternalPackageInfoType,\n RemoteVisitorDataParamsType,\n GetVisitorWarehouseAudienceParamsType,\n Environment,\n SetUserConsentParametersType,\n FeatureFlagVariableType,\n KameleoonVariationType,\n GetFeatureVariablesParamsType,\n} from './types';\nimport { IVisitorCodeManager } from './visitorCodeManager';\nimport { Utilities } from './utilities';\nimport {\n FeatureFlagVariationType,\n VariationConfiguration,\n} from './variationConfiguration';\nimport { TargetingDataType } from './targeting';\nimport { EventCallbackType, EventManager, EventType } from './eventManager';\nimport { KameleoonEventSource } from './eventSource';\nimport { IKameleoonClient } from './kameleoonClientInterface';\nimport { DEFAULT_MAX_AGE, PATH, ZERO_MAX_AGE } from './visitorCodeManager';\n\n/**\n * @class\n * KameleoonClient - a class for creating kameleoon client instance\n * for communicating with Kameleoon JavaScript SDK Core, when new instance is created\n */\nexport class KameleoonClient implements IKameleoonClient {\n private variationConfiguration: VariationConfiguration;\n private clientConfiguration: ClientConfiguration;\n private dataManager: DataManager;\n private offlineTrackingStorage: IStorage<OfflineTracking>;\n private consentDataStorage: IStorage<ConsentDataType>;\n private trackingCache: CacheManager<TrackingCacheItemType>;\n private requester: Requester;\n private externalPackageInfo: ExternalPackageInfoType;\n private initialized: boolean = false;\n private visitorCodeManager: IVisitorCodeManager;\n private eventManager: EventManager;\n private environment: Environment;\n private isOfflineModeOn?: boolean;\n\n /**\n * @param {SDKCoreParameters} sdkCoreParameters - parameters for initializing sdk core\n */\n constructor({\n siteCode,\n configuration,\n internalConfiguration,\n }: SDKCoreParameters) {\n const { settings: clientSettings } = new ClientSettings(\n siteCode,\n configuration,\n );\n this.environment = clientSettings.environment;\n const {\n externalStorage,\n externalEventSource,\n externalPackageInfo,\n externalVisitorCodeManager,\n externalRequester,\n externalClientConfiguration,\n } = internalConfiguration;\n const trackingCache = new CacheManager<TrackingCacheItemType>(\n CACHE_CLEANUP_TIMEOUT,\n );\n\n const clientDataStorage = new DataStorage<ClientDataType>(\n externalStorage,\n KameleoonStorageKey.ClientData,\n );\n const targetingDataStorage = new DataStorage<TargetingDataType>(\n externalStorage,\n KameleoonStorageKey.TargetingData,\n );\n const variationDataStorage = new DataStorage<VariationDataType>(\n externalStorage,\n KameleoonStorageKey.VariationData,\n );\n const offlineTrackingStorage = new DataStorage<OfflineTracking>(\n externalStorage,\n KameleoonStorageKey.OfflineTracking,\n );\n const consentDataStorage = new DataStorage<ConsentDataType>(\n externalStorage,\n KameleoonStorageKey.ConsentData,\n );\n\n const dataManager = new DataManager({\n storage: targetingDataStorage,\n cleanupInterval: clientSettings.cleanupInterval,\n });\n\n const requester = new Requester({\n siteCode,\n domain: clientSettings.networkDomain,\n environment: clientSettings.environment,\n packageInfo: externalPackageInfo,\n externalRequester: externalRequester,\n requestTimeout: clientSettings.requestTimeout,\n trackRetryDelay: clientSettings.trackRetryDelay,\n });\n\n const eventSource = new KameleoonEventSource(\n clientSettings.siteCode,\n externalEventSource,\n );\n\n const eventManager = new EventManager();\n\n const clientConfiguration = new ClientConfiguration({\n storage: clientDataStorage,\n updateInterval: clientSettings.updateInterval,\n dataManager,\n eventManager,\n requester,\n externalClientConfiguration,\n offlineTrackingStorage,\n eventSource,\n externalVisitorCodeManager,\n });\n\n const variationConfiguration = new VariationConfiguration(\n variationDataStorage,\n );\n\n this.variationConfiguration = variationConfiguration;\n this.requester = requester;\n this.trackingCache = trackingCache;\n this.dataManager = dataManager;\n this.clientConfiguration = clientConfiguration;\n this.externalPackageInfo = externalPackageInfo;\n this.offlineTrackingStorage = offlineTrackingStorage;\n this.consentDataStorage = consentDataStorage;\n this.visitorCodeManager = externalVisitorCodeManager;\n this.eventManager = eventManager;\n }\n\n public async initialize(useCache?: boolean): Promise<boolean> {\n const result = await this.clientConfiguration.initialize();\n result.throw();\n\n this.isOfflineModeOn = useCache;\n this.initialized = true;\n\n return result.ok;\n }\n\n public addData(visitorCode: string, ...data: KameleoonDataType[]): void {\n Utilities.validateVisitorCode(visitorCode).throw();\n\n if (!this.initialized) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n\n this.dataManager.addData(visitorCode, ...data).throw();\n }\n\n public async getRemoteVisitorData({\n visitorCode,\n shouldAddData = true,\n filters = DEFAULT_VISITOR_DATA_FILTERS,\n isUniqueIdentifier = false,\n }: RemoteVisitorDataParamsType): Promise<KameleoonDataType[]> {\n if (!this.initialized) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n\n Utilities.validateVisitorCode(visitorCode).throw();\n\n const { previousVisitAmount } = filters;\n\n if (\n typeof previousVisitAmount === 'number' &&\n (previousVisitAmount < 1 || previousVisitAmount > 25)\n ) {\n throw new KameleoonError(KameleoonException.VisitAmount);\n }\n\n const result = await this.requester.getVisitorData({\n visitorCode,\n filters,\n isMappingIdentifier: isUniqueIdentifier,\n });\n const data = result.throw();\n\n const { visitorData, storageVisitorData, visitsData } =\n Utilities.parseVisitorData({\n data,\n filters,\n visitorCode,\n dataManager: this.dataManager,\n variationConfiguration: this.variationConfiguration,\n });\n\n for (const dataItem of storageVisitorData) {\n if (shouldAddData || this.dataManager.isPersistentCustomData(dataItem)) {\n this.addData(visitorCode, dataItem);\n }\n }\n\n // --- Note ---\n // Data on visits amount and time stamps is not returned to a user\n if (visitsData && shouldAddData) {\n this.addData(visitorCode, visitsData);\n }\n\n return visitorData;\n }\n\n public trackConversion({\n visitorCode,\n goalId,\n revenue,\n isUniqueIdentifier,\n }: TrackConversionParamsType): void {\n this.addData(visitorCode, new Conversion({ goalId, revenue }));\n this.flush(visitorCode, isUniqueIdentifier);\n }\n\n public flush(visitorCode?: string, isUniqueIdentifier?: boolean): void {\n if (!this.initialized) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n\n if (typeof visitorCode === 'string') {\n Utilities.validateVisitorCode(visitorCode).throw();\n }\n\n if (visitorCode) {\n let isMappingIdentifier = false;\n\n // --- Note ---\n // This part is a workaround for Data API\n // If there's is no unique identifier for the visitor\n // We do reconciliation for visitor with himself\n if (isUniqueIdentifier) {\n const linkedVisitor = this.dataManager.getLinkedVisitor(visitorCode);\n const index = this.dataManager.identifierCustomDataIndex;\n\n if (!linkedVisitor && typeof index === 'number') {\n this.dataManager.addData(\n visitorCode,\n new CustomData(index, visitorCode),\n );\n } else {\n isMappingIdentifier = true;\n }\n }\n\n Utilities.trackData({\n visitorCode,\n isMappingIdentifier,\n dataManager: this.dataManager,\n requester: this.requester,\n isOfflineModeOn: this.isOfflineModeOn,\n isConsentProvided: this._isConsentProvided(visitorCode),\n offlineTrackingStorage: this.offlineTrackingStorage,\n });\n\n return;\n }\n\n // --- Note ---\n // `Utilities.trackData` executes `Utilities.sendOfflineTracking` asynchronously at first, but\n // we need to execute `Utilities.sendOfflineTracking` even if calling `Utilities.trackData` is skipped\n // due to lack of unsent data\n if (!this.dataManager.unsentDataVisitors.length) {\n Utilities.sendOfflineTracking({\n requester: this.requester,\n storage: this.offlineTrackingStorage,\n });\n return;\n }\n\n for (const visitorCodeKey of this.dataManager.unsentDataVisitors) {\n Utilities.trackData({\n visitorCode: visitorCodeKey,\n dataManager: this.dataManager,\n requester: this.requester,\n isOfflineModeOn: this.isOfflineModeOn,\n isConsentProvided: this._isConsentProvided(visitorCodeKey),\n offlineTrackingStorage: this.offlineTrackingStorage,\n });\n }\n }\n\n public getFeatureFlags(): FeatureFlagType[] {\n if (!this.initialized) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n\n const featureFlags = this.clientConfiguration.featureFlags;\n const resultFeatureFlags: FeatureFlagType[] = [];\n\n featureFlags.forEach(({ id, featureKey }) => {\n resultFeatureFlags.push({\n id,\n key: featureKey,\n });\n });\n\n return resultFeatureFlags;\n }\n\n public getVisitorFeatureFlags(visitorCode: string): FeatureFlagType[] {\n if (!this.initialized) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n\n const activeVariations = this._getActiveFeatureVariations(visitorCode);\n const resultFeatureFlags: FeatureFlagType[] = [];\n\n activeVariations.forEach(({ featureFlagId, featureKey }) => {\n resultFeatureFlags.push({\n id: featureFlagId,\n key: featureKey,\n });\n });\n\n return resultFeatureFlags;\n }\n\n public getActiveFeatureFlags(\n visitorCode: string,\n ): Map<string, KameleoonVariationType> {\n const activeVariations = this._getActiveFeatureVariations(visitorCode);\n const resultFeatureList: Map<string, KameleoonVariationType> = new Map();\n\n activeVariations.forEach((variation) => {\n const { variationKey, featureKey, variationId, experimentId } = variation;\n\n let variables: FeatureVariableType[] = [];\n\n if (variationId !== null && experimentId !== null) {\n variables = this._getFeatureVariables({\n visitorCode,\n featureKey,\n variationKey,\n });\n }\n\n const resultVariables = variables.map((variable) =>\n Utilities.parseFeatureVariable(variable).throw(),\n );\n\n resultFeatureList.set(variation.featureKey, {\n key: variationKey,\n id: variationId,\n experimentId,\n variables: resultVariables,\n });\n });\n\n return resultFeatureList;\n }\n\n public getFeatureFlagVariationKey(\n visitorCode: string,\n featureKey: string,\n ): string {\n Utilities.validateVisitorCode(visitorCode).throw();\n\n const { variationKey } = this._getFeatureVariation(\n visitorCode,\n featureKey,\n ).throw();\n\n return variationKey;\n }\n\n public getFeatureFlagVariable({\n visitorCode,\n featureKey,\n variableKey,\n }: GetFeatureFlagVariableParamsType): FeatureFlagVariableType {\n Utilities.validateVisitorCode(visitorCode).throw();\n\n const { variationKey } = this._getFeatureVariation(\n visitorCode,\n featureKey,\n ).throw();\n\n const variables = this._getFeatureVariables({\n visitorCode,\n featureKey,\n variationKey,\n });\n const variable = variables.find((item) => item.key === variableKey);\n\n if (!variable) {\n throw new KameleoonError(\n KameleoonException.FeatureFlagVariableNotFound,\n variableKey,\n visitorCode,\n );\n }\n\n const { type, value } = Utilities.parseFeatureVariable(variable).throw();\n\n return { type, value } as FeatureFlagVariableType;\n }\n\n public getFeatureFlagVariables(\n visitorCode: string,\n featureKey: string,\n ): FeatureVariableResultType[] {\n Utilities.validateVisitorCode(visitorCode).throw();\n\n const { variationKey } = this._getFeatureVariation(\n visitorCode,\n featureKey,\n ).throw();\n\n const variables = this._getFeatureVariables({\n visitorCode,\n featureKey,\n variationKey,\n });\n const resultVariables: FeatureVariableResultType[] = [];\n\n for (const variable of variables) {\n const parsedVariable = Utilities.parseFeatureVariable(variable).throw();\n resultVariables.push(parsedVariable);\n }\n\n return resultVariables;\n }\n\n public isFeatureFlagActive(visitorCode: string, featureKey: string): boolean {\n try {\n const variationKey = this.getFeatureFlagVariationKey(\n visitorCode,\n featureKey,\n );\n\n return variationKey !== OFF_VARIATION_KEY;\n } catch (err) {\n if (\n err instanceof KameleoonError &&\n err.type === KameleoonException.FeatureFlagEnvironmentDisabled\n ) {\n return false;\n }\n\n throw err;\n }\n }\n\n public async getRemoteData(key: string): Promise<JSONType> {\n const remoteData = await this.requester.getRemoteData(key);\n\n return remoteData.throw();\n }\n\n public async getVisitorWarehouseAudience({\n visitorCode,\n customDataIndex,\n warehouseKey,\n }: GetVisitorWarehouseAudienceParamsType): Promise<CustomData | null> {\n Utilities.validateVisitorCode(visitorCode).throw();\n\n const data = await this.getRemoteData(warehouseKey || visitorCode);\n\n if (!data) {\n throw new KameleoonError(KameleoonException.RemoteData);\n }\n\n if (\n !data[WAREHOUSE_AUDIENCE_KEY] ||\n Object.keys(data[WAREHOUSE_AUDIENCE_KEY]).length === 0\n ) {\n return null;\n }\n\n const customData = new CustomData(\n customDataIndex,\n ...Object.keys(data[WAREHOUSE_AUDIENCE_KEY]),\n );\n\n this.dataManager.addData(visitorCode, customData);\n\n return customData;\n }\n\n /**\n * @deprecated\n * use `onEvent(EventType.ConfigurationUpdate, callback)` instead\n * Will be removed in the next major release\n * */\n public onConfigurationUpdate(callback: () => void): void {\n if (!this.initialized) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n\n this.eventManager.addEventHandler(EventType.ConfigurationUpdate, callback);\n }\n\n public onEvent<E extends EventType>(\n event: E,\n callback: EventCallbackType<E>,\n ): void {\n if (!this.initialized) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n\n this.eventManager.addEventHandler(event, callback);\n }\n\n public getEngineTrackingCode(visitorCode: string): string {\n Utilities.validateVisitorCode(visitorCode).throw();\n\n return Utilities.getTrackingCode(this.trackingCache, visitorCode);\n }\n\n public isInitialized(): boolean {\n return this.initialized;\n }\n\n protected setUserConsent({\n visitorCode,\n consent,\n setData,\n }: SetUserConsentParametersType): void {\n Utilities.validateVisitorCode(visitorCode).throw();\n\n this.consentDataStorage.update({ [visitorCode]: consent });\n\n if (consent) {\n setData({\n visitorCode,\n key: KameleoonStorageKey.VisitorCode,\n maxAge: DEFAULT_MAX_AGE,\n path: PATH,\n });\n } else {\n if (this.visitorCodeManager.consentRequired) {\n setData({\n visitorCode: '',\n key: KameleoonStorageKey.VisitorCode,\n maxAge: ZERO_MAX_AGE,\n path: PATH,\n });\n }\n }\n }\n\n private _isConsentProvided(visitorCode: string): boolean {\n const { isConsentRequired } = this.clientConfiguration;\n const consentDataResult = this.consentDataStorage.read();\n\n return (\n !isConsentRequired ||\n (consentDataResult.ok && consentDataResult.data[visitorCode])\n );\n }\n\n private _getFeatureVariables({\n visitorCode,\n featureKey,\n variationKey,\n }: GetFeatureVariablesParamsType): FeatureVariableType[] {\n const featureFlags = this.clientConfiguration.featureFlags;\n const featureFlag = featureFlags.get(featureKey);\n\n if (!featureFlag) {\n throw new KameleoonError(\n KameleoonException.FeatureFlagConfigurationNotFound,\n featureKey,\n );\n }\n const variation = featureFlag.variations.find(\n (item) => item.key === variationKey,\n );\n\n if (!variation) {\n throw new KameleoonError(\n KameleoonException.FeatureFlagVariationNotFound,\n variationKey,\n visitorCode,\n );\n }\n\n return variation.variables;\n }\n\n private _getActiveFeatureVariations(\n visitorCode: string,\n ): FeatureFlagVariationType[] {\n if (!this.initialized) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n\n const featureFlags = this.clientConfiguration.featureFlags;\n const activeVariations: FeatureFlagVariationType[] = [];\n\n const targetingData = this.dataManager.getTargetingData(visitorCode);\n const visitorIdentifier =\n this.dataManager.getVisitorIdentifier(visitorCode);\n\n for (const featureFlag of featureFlags.values()) {\n if (!featureFlag.environmentEnabled) {\n continue;\n }\n\n const variationData = this.variationConfiguration\n .getVariation({\n visitorCode,\n visitorIdentifier,\n targetingData,\n featureFlag,\n clientConfiguration: this.clientConfiguration,\n dataManager: this.dataManager,\n packageInfo: this.externalPackageInfo,\n })\n .throw();\n\n this.eventManager.fireEvent(EventType.Evaluation, {\n featureKey: featureFlag.featureKey,\n variation: {\n key: variationData.variationKey,\n experimentId: variationData.experimentId,\n id: variationData.variationId,\n },\n });\n\n if (variationData.variationKey !== OFF_VARIATION_KEY) {\n activeVariations.push(variationData);\n }\n }\n\n return activeVariations;\n }\n\n private _getFeatureVariation(\n visitorCode: string,\n featureKey: string,\n ): Result<FeatureFlagVariationType, KameleoonError> {\n if (!this.initialized) {\n return Err(new KameleoonError(KameleoonException.Initialization));\n }\n\n const featureFlags = this.clientConfiguration.featureFlags;\n const featureFlag = featureFlags.get(featureKey);\n\n if (!featureFlag) {\n return Err(\n new KameleoonError(\n KameleoonException.FeatureFlagConfigurationNotFound,\n featureKey,\n ),\n );\n }\n\n if (!featureFlag.environmentEnabled) {\n return Err(\n new KameleoonError(\n KameleoonException.FeatureFlagEnvironmentDisabled,\n featureFlag.featureKey,\n this.environment,\n ),\n );\n }\n\n const targetingData = this.dataManager.getTargetingData(visitorCode);\n const visitorIdentifier =\n this.dataManager.getVisitorIdentifier(visitorCode);\n\n const variationData = this.variationConfiguration\n .getVariation({\n visitorCode,\n visitorIdentifier,\n featureFlag,\n targetingData,\n withAssignment: true,\n clientConfiguration: this.clientConfiguration,\n dataManager: this.dataManager,\n packageInfo: this.externalPackageInfo,\n })\n .throw();\n\n this.eventManager.fireEvent(EventType.Evaluation, {\n featureKey,\n variation: {\n key: variationData.variationKey,\n experimentId: variationData.experimentId,\n id: variationData.variationId,\n },\n });\n\n const { experimentId, variationId } = variationData;\n\n if (typeof variationId === 'number' && typeof experimentId === 'number') {\n Utilities.updateCache({\n cacheManager: this.trackingCache,\n visitorCode,\n experimentId,\n variationId,\n });\n }\n\n Utilities.trackFeatureExperiment({\n visitorCode,\n requester: this.requester,\n featureFlagVariation: variationData,\n dataManager: this.dataManager,\n isOfflineModeOn: this.isOfflineModeOn,\n isConsentProvided: this._isConsentProvided(visitorCode),\n offlineTrackingStorage: this.offlineTrackingStorage,\n variationConfiguration: this.variationConfiguration,\n });\n\n return Ok(variationData);\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"kameleoonClient.js","names":["KameleoonClient","constructor","a","siteCode","configuration","internalConfiguration","_defineProperty","settings","clientSettings","ClientSettings","environment","externalStorage","externalEventSource","externalPackageInfo","externalVisitorCodeManager","externalRequester","externalClientConfiguration","trackingCache","CacheManager","CACHE_CLEANUP_TIMEOUT","clientDataStorage","DataStorage","KameleoonStorageKey","ClientData","targetingDataStorage","TargetingData","variationDataStorage","VariationData","offlineTrackingStorage","OfflineTracking","consentDataStorage","ConsentData","dataManager","DataManager","storage","cleanupInterval","requester","Requester","domain","networkDomain","packageInfo","requestTimeout","trackRetryDelay","eventSource","KameleoonEventSource","eventManager","EventManager","clientConfiguration","ClientConfiguration","updateInterval","variationConfiguration","VariationConfiguration","visitorCodeManager","initialize","useCache","result","throw","isOfflineModeOn","initialized","ok","addData","visitorCode","Utilities","validateVisitorCode","KameleoonError","KameleoonException","Initialization","b","arguments","length","data","Array","d","getRemoteVisitorData","shouldAddData","filters","DEFAULT_VISITOR_DATA_FILTERS","isUniqueIdentifier","previousVisitAmount","VisitAmount","getVisitorData","isMappingIdentifier","visitorData","storageVisitorData","visitsData","parseVisitorData","dataItem","isPersistentCustomData","trackConversion","goalId","revenue","Conversion","flush","linkedVisitor","getLinkedVisitor","index","identifierCustomDataIndex","CustomData","trackData","isConsentProvided","_isConsentProvided","unsentDataVisitors","sendOfflineTracking","visitorCodeKey","getFeatureFlags","featureFlags","resultFeatureFlags","forEach","id","featureKey","push","key","getVisitorFeatureFlags","activeVariations","_getActiveFeatureVariations","featureFlagId","getActiveFeatureFlags","resultFeatureList","Map","variation","variationKey","variationId","experimentId","variables","_getFeatureVariables","resultVariables","map","variable","parseFeatureVariable","set","getFeatureFlagVariationKey","_getFeatureVariation","getFeatureFlagVariable","variableKey","find","item","FeatureFlagVariableNotFound","type","value","getFeatureFlagVariables","parsedVariable","isFeatureFlagActive","OFF_VARIATION_KEY","err","FeatureFlagEnvironmentDisabled","getRemoteData","remoteData","getVisitorWarehouseAudience","customDataIndex","warehouseKey","RemoteData","concat","WAREHOUSE_AUDIENCE_KEY","Object","keys","customData","onConfigurationUpdate","callback","addEventHandler","EventType","ConfigurationUpdate","onEvent","event","getEngineTrackingCode","getTrackingCode","isInitialized","setUserConsent","consent","setData","update","VisitorCode","maxAge","DEFAULT_MAX_AGE","path","PATH","consentRequired","ZERO_MAX_AGE","isConsentRequired","consentDataResult","read","featureFlag","get","FeatureFlagConfigurationNotFound","variations","FeatureFlagVariationNotFound","targetingData","getTargetingData","visitorIdentifier","getVisitorIdentifier","values","environmentEnabled","variationData","getVariation","fireEvent","Evaluation","Err","withAssignment","updateCache","cacheManager","trackFeatureExperiment","featureFlagVariation","Ok","exports"],"sources":["../src/kameleoonClient.ts"],"sourcesContent":["import { Err, Ok, Result } from 'ts-res';\nimport { CacheManager } from './cacheManager';\nimport {\n ClientConfiguration,\n FeatureVariableType,\n JSONType,\n} from './clientConfiguration';\nimport { ClientSettings } from './clientSettings';\nimport {\n CACHE_CLEANUP_TIMEOUT,\n DEFAULT_VISITOR_DATA_FILTERS,\n OFF_VARIATION_KEY,\n} from './constants';\nimport {\n Conversion,\n CustomData,\n DataManager,\n KameleoonDataType,\n} from './kameleoonData';\nimport { WAREHOUSE_AUDIENCE_KEY } from './constants';\nimport { KameleoonError, KameleoonException } from './kameleoonError';\nimport { Requester } from './requester';\nimport {\n ClientDataType,\n KameleoonStorageKey,\n VariationDataType,\n DataStorage,\n ConsentDataType,\n IStorage,\n OfflineTracking,\n} from './storage';\nimport {\n TrackConversionParamsType,\n FeatureFlagType,\n GetFeatureFlagVariableParamsType,\n FeatureVariableResultType,\n SDKCoreParameters,\n TrackingCacheItemType,\n ExternalPackageInfoType,\n RemoteVisitorDataParamsType,\n GetVisitorWarehouseAudienceParamsType,\n Environment,\n SetUserConsentParametersType,\n FeatureFlagVariableType,\n KameleoonVariationType,\n GetFeatureVariablesParamsType,\n} from './types';\nimport { IVisitorCodeManager } from './visitorCodeManager';\nimport { Utilities } from './utilities';\nimport {\n FeatureFlagVariationType,\n VariationConfiguration,\n} from './variationConfiguration';\nimport { TargetingDataType } from './targeting';\nimport { EventCallbackType, EventManager, EventType } from './eventManager';\nimport { KameleoonEventSource } from './eventSource';\nimport { IKameleoonClient } from './kameleoonClientInterface';\nimport { DEFAULT_MAX_AGE, PATH, ZERO_MAX_AGE } from './visitorCodeManager';\n\n/**\n * @class\n * KameleoonClient - a class for creating kameleoon client instance\n * for communicating with Kameleoon JavaScript SDK Core, when new instance is created\n */\nexport class KameleoonClient implements IKameleoonClient {\n private variationConfiguration: VariationConfiguration;\n private clientConfiguration: ClientConfiguration;\n private dataManager: DataManager;\n private offlineTrackingStorage: IStorage<OfflineTracking>;\n private consentDataStorage: IStorage<ConsentDataType>;\n private trackingCache: CacheManager<TrackingCacheItemType>;\n private requester: Requester;\n private externalPackageInfo: ExternalPackageInfoType;\n private initialized: boolean = false;\n private visitorCodeManager: IVisitorCodeManager;\n private eventManager: EventManager;\n private environment: Environment;\n private isOfflineModeOn?: boolean;\n\n /**\n * @param {SDKCoreParameters} sdkCoreParameters - parameters for initializing sdk core\n */\n constructor({\n siteCode,\n configuration,\n internalConfiguration,\n }: SDKCoreParameters) {\n const { settings: clientSettings } = new ClientSettings(\n siteCode,\n configuration,\n );\n this.environment = clientSettings.environment;\n const {\n externalStorage,\n externalEventSource,\n externalPackageInfo,\n externalVisitorCodeManager,\n externalRequester,\n externalClientConfiguration,\n } = internalConfiguration;\n const trackingCache = new CacheManager<TrackingCacheItemType>(\n CACHE_CLEANUP_TIMEOUT,\n );\n\n const clientDataStorage = new DataStorage<ClientDataType>(\n externalStorage,\n KameleoonStorageKey.ClientData,\n );\n const targetingDataStorage = new DataStorage<TargetingDataType>(\n externalStorage,\n KameleoonStorageKey.TargetingData,\n );\n const variationDataStorage = new DataStorage<VariationDataType>(\n externalStorage,\n KameleoonStorageKey.VariationData,\n );\n const offlineTrackingStorage = new DataStorage<OfflineTracking>(\n externalStorage,\n KameleoonStorageKey.OfflineTracking,\n );\n const consentDataStorage = new DataStorage<ConsentDataType>(\n externalStorage,\n KameleoonStorageKey.ConsentData,\n );\n\n const dataManager = new DataManager({\n storage: targetingDataStorage,\n cleanupInterval: clientSettings.cleanupInterval,\n });\n\n const requester = new Requester({\n siteCode,\n domain: clientSettings.networkDomain,\n environment: clientSettings.environment,\n packageInfo: externalPackageInfo,\n externalRequester: externalRequester,\n requestTimeout: clientSettings.requestTimeout,\n trackRetryDelay: clientSettings.trackRetryDelay,\n });\n\n const eventSource = new KameleoonEventSource(\n clientSettings.siteCode,\n externalEventSource,\n );\n\n const eventManager = new EventManager();\n\n const clientConfiguration = new ClientConfiguration({\n storage: clientDataStorage,\n updateInterval: clientSettings.updateInterval,\n dataManager,\n eventManager,\n requester,\n externalClientConfiguration,\n offlineTrackingStorage,\n eventSource,\n externalVisitorCodeManager,\n });\n\n const variationConfiguration = new VariationConfiguration(\n variationDataStorage,\n );\n\n this.variationConfiguration = variationConfiguration;\n this.requester = requester;\n this.trackingCache = trackingCache;\n this.dataManager = dataManager;\n this.clientConfiguration = clientConfiguration;\n this.externalPackageInfo = externalPackageInfo;\n this.offlineTrackingStorage = offlineTrackingStorage;\n this.consentDataStorage = consentDataStorage;\n this.visitorCodeManager = externalVisitorCodeManager;\n this.eventManager = eventManager;\n }\n\n public async initialize(useCache?: boolean): Promise<boolean> {\n const result = await this.clientConfiguration.initialize();\n result.throw();\n\n this.isOfflineModeOn = useCache;\n this.initialized = true;\n\n return result.ok;\n }\n\n public addData(visitorCode: string, ...data: KameleoonDataType[]): void {\n Utilities.validateVisitorCode(visitorCode).throw();\n\n if (!this.initialized) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n\n this.dataManager.addData(visitorCode, ...data).throw();\n }\n\n public async getRemoteVisitorData({\n visitorCode,\n shouldAddData = true,\n filters = DEFAULT_VISITOR_DATA_FILTERS,\n isUniqueIdentifier = false,\n }: RemoteVisitorDataParamsType): Promise<KameleoonDataType[]> {\n if (!this.initialized) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n\n Utilities.validateVisitorCode(visitorCode).throw();\n\n const { previousVisitAmount } = filters;\n\n if (\n typeof previousVisitAmount === 'number' &&\n (previousVisitAmount < 1 || previousVisitAmount > 25)\n ) {\n throw new KameleoonError(KameleoonException.VisitAmount);\n }\n\n const result = await this.requester.getVisitorData({\n visitorCode,\n filters,\n isMappingIdentifier: isUniqueIdentifier,\n });\n const data = result.throw();\n\n const { visitorData, storageVisitorData, visitsData } =\n Utilities.parseVisitorData({\n data,\n filters,\n visitorCode,\n dataManager: this.dataManager,\n variationConfiguration: this.variationConfiguration,\n });\n\n for (const dataItem of storageVisitorData) {\n if (shouldAddData || this.dataManager.isPersistentCustomData(dataItem)) {\n this.addData(visitorCode, dataItem);\n }\n }\n\n // --- Note ---\n // Data on visits amount and time stamps is not returned to a user\n if (visitsData && shouldAddData) {\n this.addData(visitorCode, visitsData);\n }\n\n return visitorData;\n }\n\n public trackConversion({\n visitorCode,\n goalId,\n revenue,\n isUniqueIdentifier,\n }: TrackConversionParamsType): void {\n this.addData(visitorCode, new Conversion({ goalId, revenue }));\n this.flush(visitorCode, isUniqueIdentifier);\n }\n\n public flush(visitorCode?: string, isUniqueIdentifier?: boolean): void {\n if (!this.initialized) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n\n if (typeof visitorCode === 'string') {\n Utilities.validateVisitorCode(visitorCode).throw();\n }\n\n if (visitorCode) {\n let isMappingIdentifier = false;\n\n // --- Note ---\n // This part is a workaround for Data API\n // If there's is no unique identifier for the visitor\n // We do reconciliation for visitor with himself\n if (isUniqueIdentifier) {\n const linkedVisitor = this.dataManager.getLinkedVisitor(visitorCode);\n const index = this.dataManager.identifierCustomDataIndex;\n\n if (!linkedVisitor && typeof index === 'number') {\n this.dataManager.addData(\n visitorCode,\n new CustomData(index, visitorCode),\n );\n } else {\n isMappingIdentifier = true;\n }\n }\n\n Utilities.trackData({\n visitorCode,\n isMappingIdentifier,\n dataManager: this.dataManager,\n requester: this.requester,\n isOfflineModeOn: this.isOfflineModeOn,\n isConsentProvided: this._isConsentProvided(visitorCode),\n offlineTrackingStorage: this.offlineTrackingStorage,\n });\n\n return;\n }\n\n // --- Note ---\n // `Utilities.trackData` executes `Utilities.sendOfflineTracking` asynchronously at first, but\n // we need to execute `Utilities.sendOfflineTracking` even if calling `Utilities.trackData` is skipped\n // due to lack of unsent data\n if (!this.dataManager.unsentDataVisitors.length) {\n Utilities.sendOfflineTracking({\n requester: this.requester,\n storage: this.offlineTrackingStorage,\n });\n return;\n }\n\n for (const visitorCodeKey of this.dataManager.unsentDataVisitors) {\n Utilities.trackData({\n visitorCode: visitorCodeKey,\n dataManager: this.dataManager,\n requester: this.requester,\n isOfflineModeOn: this.isOfflineModeOn,\n isConsentProvided: this._isConsentProvided(visitorCodeKey),\n offlineTrackingStorage: this.offlineTrackingStorage,\n });\n }\n }\n\n public getFeatureFlags(): FeatureFlagType[] {\n if (!this.initialized) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n\n const featureFlags = this.clientConfiguration.featureFlags;\n const resultFeatureFlags: FeatureFlagType[] = [];\n\n featureFlags.forEach(({ id, featureKey }) => {\n resultFeatureFlags.push({\n id,\n key: featureKey,\n });\n });\n\n return resultFeatureFlags;\n }\n\n public getVisitorFeatureFlags(visitorCode: string): FeatureFlagType[] {\n if (!this.initialized) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n\n const activeVariations = this._getActiveFeatureVariations(visitorCode);\n const resultFeatureFlags: FeatureFlagType[] = [];\n\n activeVariations.forEach(({ featureFlagId, featureKey }) => {\n resultFeatureFlags.push({\n id: featureFlagId,\n key: featureKey,\n });\n });\n\n return resultFeatureFlags;\n }\n\n public getActiveFeatureFlags(\n visitorCode: string,\n ): Map<string, KameleoonVariationType> {\n const activeVariations = this._getActiveFeatureVariations(visitorCode);\n const resultFeatureList: Map<string, KameleoonVariationType> = new Map();\n\n activeVariations.forEach((variation) => {\n const { variationKey, featureKey, variationId, experimentId } = variation;\n\n let variables: FeatureVariableType[] = [];\n\n if (variationId !== null && experimentId !== null) {\n variables = this._getFeatureVariables({\n visitorCode,\n featureKey,\n variationKey,\n });\n }\n\n const resultVariables = variables.map((variable) =>\n Utilities.parseFeatureVariable(variable).throw(),\n );\n\n resultFeatureList.set(variation.featureKey, {\n key: variationKey,\n id: variationId,\n experimentId,\n variables: resultVariables,\n });\n });\n\n return resultFeatureList;\n }\n\n public getFeatureFlagVariationKey(\n visitorCode: string,\n featureKey: string,\n ): string {\n Utilities.validateVisitorCode(visitorCode).throw();\n\n const { variationKey } = this._getFeatureVariation(\n visitorCode,\n featureKey,\n ).throw();\n\n return variationKey;\n }\n\n public getFeatureFlagVariable({\n visitorCode,\n featureKey,\n variableKey,\n }: GetFeatureFlagVariableParamsType): FeatureFlagVariableType {\n Utilities.validateVisitorCode(visitorCode).throw();\n\n const { variationKey } = this._getFeatureVariation(\n visitorCode,\n featureKey,\n ).throw();\n\n const variables = this._getFeatureVariables({\n visitorCode,\n featureKey,\n variationKey,\n });\n const variable = variables.find((item) => item.key === variableKey);\n\n if (!variable) {\n throw new KameleoonError(\n KameleoonException.FeatureFlagVariableNotFound,\n variableKey,\n visitorCode,\n );\n }\n\n const { type, value } = Utilities.parseFeatureVariable(variable).throw();\n\n return { type, value } as FeatureFlagVariableType;\n }\n\n public getFeatureFlagVariables(\n visitorCode: string,\n featureKey: string,\n ): FeatureVariableResultType[] {\n Utilities.validateVisitorCode(visitorCode).throw();\n\n const { variationKey } = this._getFeatureVariation(\n visitorCode,\n featureKey,\n ).throw();\n\n const variables = this._getFeatureVariables({\n visitorCode,\n featureKey,\n variationKey,\n });\n const resultVariables: FeatureVariableResultType[] = [];\n\n for (const variable of variables) {\n const parsedVariable = Utilities.parseFeatureVariable(variable).throw();\n resultVariables.push(parsedVariable);\n }\n\n return resultVariables;\n }\n\n public isFeatureFlagActive(visitorCode: string, featureKey: string): boolean {\n try {\n const variationKey = this.getFeatureFlagVariationKey(\n visitorCode,\n featureKey,\n );\n\n return variationKey !== OFF_VARIATION_KEY;\n } catch (err) {\n if (\n err instanceof KameleoonError &&\n err.type === KameleoonException.FeatureFlagEnvironmentDisabled\n ) {\n return false;\n }\n\n throw err;\n }\n }\n\n public async getRemoteData(key: string): Promise<JSONType> {\n const remoteData = await this.requester.getRemoteData(key);\n\n return remoteData.throw();\n }\n\n public async getVisitorWarehouseAudience({\n visitorCode,\n customDataIndex,\n warehouseKey,\n }: GetVisitorWarehouseAudienceParamsType): Promise<CustomData | null> {\n Utilities.validateVisitorCode(visitorCode).throw();\n\n const data = await this.getRemoteData(warehouseKey || visitorCode);\n\n if (!data) {\n throw new KameleoonError(\n KameleoonException.RemoteData,\n `No data found for ${warehouseKey || visitorCode} key`,\n );\n }\n\n if (\n !data[WAREHOUSE_AUDIENCE_KEY] ||\n Object.keys(data[WAREHOUSE_AUDIENCE_KEY]).length === 0\n ) {\n return null;\n }\n\n const customData = new CustomData(\n customDataIndex,\n ...Object.keys(data[WAREHOUSE_AUDIENCE_KEY]),\n );\n\n this.dataManager.addData(visitorCode, customData);\n\n return customData;\n }\n\n /**\n * @deprecated\n * use `onEvent(EventType.ConfigurationUpdate, callback)` instead\n * Will be removed in the next major release\n * */\n public onConfigurationUpdate(callback: () => void): void {\n if (!this.initialized) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n\n this.eventManager.addEventHandler(EventType.ConfigurationUpdate, callback);\n }\n\n public onEvent<E extends EventType>(\n event: E,\n callback: EventCallbackType<E>,\n ): void {\n if (!this.initialized) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n\n this.eventManager.addEventHandler(event, callback);\n }\n\n public getEngineTrackingCode(visitorCode: string): string {\n Utilities.validateVisitorCode(visitorCode).throw();\n\n return Utilities.getTrackingCode(this.trackingCache, visitorCode);\n }\n\n public isInitialized(): boolean {\n return this.initialized;\n }\n\n protected setUserConsent({\n visitorCode,\n consent,\n setData,\n }: SetUserConsentParametersType): void {\n Utilities.validateVisitorCode(visitorCode).throw();\n\n this.consentDataStorage.update({ [visitorCode]: consent });\n\n if (consent) {\n setData({\n visitorCode,\n key: KameleoonStorageKey.VisitorCode,\n maxAge: DEFAULT_MAX_AGE,\n path: PATH,\n });\n } else {\n if (this.visitorCodeManager.consentRequired) {\n setData({\n visitorCode: '',\n key: KameleoonStorageKey.VisitorCode,\n maxAge: ZERO_MAX_AGE,\n path: PATH,\n });\n }\n }\n }\n\n private _isConsentProvided(visitorCode: string): boolean {\n const { isConsentRequired } = this.clientConfiguration;\n const consentDataResult = this.consentDataStorage.read();\n\n return (\n !isConsentRequired ||\n (consentDataResult.ok && consentDataResult.data[visitorCode])\n );\n }\n\n private _getFeatureVariables({\n visitorCode,\n featureKey,\n variationKey,\n }: GetFeatureVariablesParamsType): FeatureVariableType[] {\n const featureFlags = this.clientConfiguration.featureFlags;\n const featureFlag = featureFlags.get(featureKey);\n\n if (!featureFlag) {\n throw new KameleoonError(\n KameleoonException.FeatureFlagConfigurationNotFound,\n featureKey,\n );\n }\n const variation = featureFlag.variations.find(\n (item) => item.key === variationKey,\n );\n\n if (!variation) {\n throw new KameleoonError(\n KameleoonException.FeatureFlagVariationNotFound,\n variationKey,\n visitorCode,\n );\n }\n\n return variation.variables;\n }\n\n private _getActiveFeatureVariations(\n visitorCode: string,\n ): FeatureFlagVariationType[] {\n if (!this.initialized) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n\n const featureFlags = this.clientConfiguration.featureFlags;\n const activeVariations: FeatureFlagVariationType[] = [];\n\n const targetingData = this.dataManager.getTargetingData(visitorCode);\n const visitorIdentifier =\n this.dataManager.getVisitorIdentifier(visitorCode);\n\n for (const featureFlag of featureFlags.values()) {\n if (!featureFlag.environmentEnabled) {\n continue;\n }\n\n const variationData = this.variationConfiguration\n .getVariation({\n visitorCode,\n visitorIdentifier,\n targetingData,\n featureFlag,\n clientConfiguration: this.clientConfiguration,\n dataManager: this.dataManager,\n packageInfo: this.externalPackageInfo,\n })\n .throw();\n\n this.eventManager.fireEvent(EventType.Evaluation, {\n featureKey: featureFlag.featureKey,\n variation: {\n key: variationData.variationKey,\n experimentId: variationData.experimentId,\n id: variationData.variationId,\n },\n });\n\n if (variationData.variationKey !== OFF_VARIATION_KEY) {\n activeVariations.push(variationData);\n }\n }\n\n return activeVariations;\n }\n\n private _getFeatureVariation(\n visitorCode: string,\n featureKey: string,\n ): Result<FeatureFlagVariationType, KameleoonError> {\n if (!this.initialized) {\n return Err(new KameleoonError(KameleoonException.Initialization));\n }\n\n const featureFlags = this.clientConfiguration.featureFlags;\n const featureFlag = featureFlags.get(featureKey);\n\n if (!featureFlag) {\n return Err(\n new KameleoonError(\n KameleoonException.FeatureFlagConfigurationNotFound,\n featureKey,\n ),\n );\n }\n\n if (!featureFlag.environmentEnabled) {\n return Err(\n new KameleoonError(\n KameleoonException.FeatureFlagEnvironmentDisabled,\n featureFlag.featureKey,\n this.environment,\n ),\n );\n }\n\n const targetingData = this.dataManager.getTargetingData(visitorCode);\n const visitorIdentifier =\n this.dataManager.getVisitorIdentifier(visitorCode);\n\n const variationData = this.variationConfiguration\n .getVariation({\n visitorCode,\n visitorIdentifier,\n featureFlag,\n targetingData,\n withAssignment: true,\n clientConfiguration: this.clientConfiguration,\n dataManager: this.dataManager,\n packageInfo: this.externalPackageInfo,\n })\n .throw();\n\n this.eventManager.fireEvent(EventType.Evaluation, {\n featureKey,\n variation: {\n key: variationData.variationKey,\n experimentId: variationData.experimentId,\n id: variationData.variationId,\n },\n });\n\n const { experimentId, variationId } = variationData;\n\n if (typeof variationId === 'number' && typeof experimentId === 'number') {\n Utilities.updateCache({\n cacheManager: this.trackingCache,\n visitorCode,\n experimentId,\n variationId,\n });\n }\n\n Utilities.trackFeatureExperiment({\n visitorCode,\n requester: this.requester,\n featureFlagVariation: variationData,\n dataManager: this.dataManager,\n isOfflineModeOn: this.isOfflineModeOn,\n isConsentProvided: this._isConsentProvided(visitorCode),\n offlineTrackingStorage: this.offlineTrackingStorage,\n variationConfiguration: this.variationConfiguration,\n });\n\n return Ok(variationData);\n }\n}\n"],"mappings":"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"}
@@ -22,10 +22,10 @@ export declare const ERROR_MESSAGES: {
22
22
  StorageRead: (key: KameleoonStorageKey) => string;
23
23
  StorageEmpty: () => string;
24
24
  StorageParse: (err: unknown, key: KameleoonStorageKey) => string;
25
- ClientConfiguration: () => string;
25
+ ClientConfiguration: (err: unknown) => string;
26
26
  TargetingCondition: (targetingType: TargetingType) => string;
27
27
  AmongValuesCheck: (err: unknown, value: string) => string;
28
28
  RangeCheck: (value?: number[] | null) => string;
29
- RemoteData: () => string;
30
- MaximumRetriesReached: () => string;
29
+ RemoteData: (err: unknown) => string;
30
+ MaximumRetriesReached: (err: unknown) => string;
31
31
  };
@@ -1,2 +1,2 @@
1
- "use strict";var _types=require("./types");Object.defineProperty(exports,"__esModule",{value:!0}),exports.ERROR_MESSAGES=void 0;const ERROR_MESSAGES=exports.ERROR_MESSAGES={[_types.KameleoonException.CookieParse]:a=>"Couldn't parse cookie string: ".concat(a),[_types.KameleoonException.JSONParse]:a=>"Couldn't parse JSON variable: ".concat(a),[_types.KameleoonException.NumberParse]:a=>"It's not possible to parse value ".concat(a," to Number"),[_types.KameleoonException.VersionParse]:a=>"It's not possible to parse a version value ".concat(a," to Number, version should be in format x.x"),[_types.KameleoonException.SemanticVersionParse]:a=>"It's not possible to parse a version value ".concat(a," to Number, version should be in format x.x.x"),[_types.KameleoonException.Initialization]:()=>"It seems that the client wasn't properly initialized, make sure to run `initialize` method before invoking other methods",[_types.KameleoonException.Credentials]:()=>"KameleoonClient can not be created without credentials",[_types.KameleoonException.StorageInitialization]:()=>"There was an error while initializing React Native SDK storage, it seems that the storage library dependency wasn't installed",[_types.KameleoonException.EventSourceInitialization]:()=>"There was an error while initializing Real Time Update service, it seems that the event source library dependency wasn't installed",[_types.KameleoonException.FeatureFlagConfigurationNotFound]:a=>"No feature flag with key ".concat(a," was found."),[_types.KameleoonException.FeatureFlagEnvironmentDisabled]:(a,b)=>"Feature flag with key ".concat(a," is disabled in ").concat(b," environment."),[_types.KameleoonException.FeatureFlagVariableNotFound]:(a,b)=>"No feature flag variable with key ".concat(a," was found for ").concat(b," visitorCode."),[_types.KameleoonException.FeatureFlagVariationNotFound]:(a,b)=>"No feature flag variation with key ".concat(a," was found for ").concat(b," visitorCode."),[_types.KameleoonException.NotTargeted]:a=>"Visitor code ".concat(a," is not targeted"),[_types.KameleoonException.VisitAmount]:()=>"Visit amount must be a number between 1 and 25",[_types.KameleoonException.VisitorCodeMaxLength]:()=>"Visitor code can not be more than 255 characters long",[_types.KameleoonException.VisitorCodeEmpty]:()=>"Visitor code can not be empty",[_types.KameleoonException.StorageWrite]:a=>"Couldn't update storage for kameleoonClient: ".concat(a),[_types.KameleoonException.StorageRead]:a=>"No data found in storage under ".concat(a," key"),[_types.KameleoonException.StorageEmpty]:()=>"No data found in storage",[_types.KameleoonException.StorageParse]:(a,b)=>"Couldn't parse ".concat(b," storage data, the data may be corrupted. Error: ").concat(a),[_types.KameleoonException.ClientConfiguration]:()=>"Couldn't retrieve client configuration from Kameleoon Api",[_types.KameleoonException.TargetingCondition]:a=>"".concat(a," targeting condition is not yet supported."),[_types.KameleoonException.AmongValuesCheck]:(a,b)=>"Couldn't parse value \"".concat(b,"\": ").concat(a),[_types.KameleoonException.RangeCheck]:a=>"Couldn't parse value \"".concat(a,"\" as a range, value should be in format [x: number, y: number]"),[_types.KameleoonException.RemoteData]:()=>"Couldn't retrieve data from Kameleoon server",[_types.KameleoonException.MaximumRetriesReached]:()=>"Maximum retries reached, request failed"};
1
+ "use strict";var _types=require("./types");Object.defineProperty(exports,"__esModule",{value:!0}),exports.ERROR_MESSAGES=void 0;const ERROR_MESSAGES=exports.ERROR_MESSAGES={[_types.KameleoonException.CookieParse]:a=>"Couldn't parse cookie string: ".concat(a),[_types.KameleoonException.JSONParse]:a=>"Couldn't parse JSON variable: ".concat(a),[_types.KameleoonException.NumberParse]:a=>"It's not possible to parse value ".concat(a," to Number"),[_types.KameleoonException.VersionParse]:a=>"It's not possible to parse a version value ".concat(a," to Number, version should be in format x.x"),[_types.KameleoonException.SemanticVersionParse]:a=>"It's not possible to parse a version value ".concat(a," to Number, version should be in format x.x.x"),[_types.KameleoonException.Initialization]:()=>"It seems that the client wasn't properly initialized, make sure to run `initialize` method before invoking other methods",[_types.KameleoonException.Credentials]:()=>"KameleoonClient can not be created without credentials",[_types.KameleoonException.StorageInitialization]:()=>"There was an error while initializing React Native SDK storage, it seems that the storage library dependency wasn't installed",[_types.KameleoonException.EventSourceInitialization]:()=>"There was an error while initializing Real Time Update service, it seems that the event source library dependency wasn't installed",[_types.KameleoonException.FeatureFlagConfigurationNotFound]:a=>"No feature flag with key ".concat(a," was found."),[_types.KameleoonException.FeatureFlagEnvironmentDisabled]:(a,b)=>"Feature flag with key ".concat(a," is disabled in ").concat(b," environment."),[_types.KameleoonException.FeatureFlagVariableNotFound]:(a,b)=>"No feature flag variable with key ".concat(a," was found for ").concat(b," visitorCode."),[_types.KameleoonException.FeatureFlagVariationNotFound]:(a,b)=>"No feature flag variation with key ".concat(a," was found for ").concat(b," visitorCode."),[_types.KameleoonException.NotTargeted]:a=>"Visitor code ".concat(a," is not targeted"),[_types.KameleoonException.VisitAmount]:()=>"Visit amount must be a number between 1 and 25",[_types.KameleoonException.VisitorCodeMaxLength]:()=>"Visitor code can not be more than 255 characters long",[_types.KameleoonException.VisitorCodeEmpty]:()=>"Visitor code can not be empty",[_types.KameleoonException.StorageWrite]:a=>"Couldn't update storage for kameleoonClient: ".concat(a),[_types.KameleoonException.StorageRead]:a=>"No data found in storage under ".concat(a," key"),[_types.KameleoonException.StorageEmpty]:()=>"No data found in storage",[_types.KameleoonException.StorageParse]:(a,b)=>"Couldn't parse ".concat(b," storage data, the data may be corrupted. Error: ").concat(a),[_types.KameleoonException.ClientConfiguration]:a=>"Couldn't retrieve client configuration from Kameleoon Api. Error: ".concat(a),[_types.KameleoonException.TargetingCondition]:a=>"".concat(a," targeting condition is not yet supported."),[_types.KameleoonException.AmongValuesCheck]:(a,b)=>"Couldn't parse value \"".concat(b,"\": ").concat(a),[_types.KameleoonException.RangeCheck]:a=>"Couldn't parse value \"".concat(a,"\" as a range, value should be in format [x: number, y: number]"),[_types.KameleoonException.RemoteData]:a=>"Couldn't retrieve data from Kameleoon server. Error: ".concat(a),[_types.KameleoonException.MaximumRetriesReached]:a=>"Maximum retries reached, request failed. Reason: ".concat(a)};
2
2
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","names":["_types","require","Object","defineProperty","exports","value","ERROR_MESSAGES","KameleoonException","CookieParse","reason","concat","JSONParse","err","NumberParse","VersionParse","SemanticVersionParse","Initialization","Credentials","StorageInitialization","EventSourceInitialization","FeatureFlagConfigurationNotFound","featureKey","FeatureFlagEnvironmentDisabled","environment","FeatureFlagVariableNotFound","variableKey","visitorCode","FeatureFlagVariationNotFound","variationKey","NotTargeted","VisitAmount","VisitorCodeMaxLength","VisitorCodeEmpty","StorageWrite","StorageRead","key","StorageEmpty","StorageParse","ClientConfiguration","TargetingCondition","targetingType","AmongValuesCheck","RangeCheck","RemoteData","MaximumRetriesReached"],"sources":["../../src/kameleoonError/constants.ts"],"sourcesContent":["import { KameleoonStorageKey } from 'src/storage';\nimport { TargetingType } from 'src/targeting';\nimport { KameleoonException } from './types';\n\nexport const ERROR_MESSAGES = {\n [KameleoonException.CookieParse]: (reason: string) =>\n `Couldn't parse cookie string: ${reason}`,\n [KameleoonException.JSONParse]: (err: unknown) =>\n `Couldn't parse JSON variable: ${err}`,\n [KameleoonException.NumberParse]: (value: string) =>\n `It's not possible to parse value ${value} to Number`,\n [KameleoonException.VersionParse]: (value: string) =>\n `It's not possible to parse a version value ${value} to Number, version should be in format x.x`,\n [KameleoonException.SemanticVersionParse]: (value: string) =>\n `It's not possible to parse a version value ${value} to Number, version should be in format x.x.x`,\n [KameleoonException.Initialization]: () =>\n \"It seems that the client wasn't properly initialized, make sure to run `initialize` method before invoking other methods\",\n [KameleoonException.Credentials]: () =>\n 'KameleoonClient can not be created without credentials',\n [KameleoonException.StorageInitialization]: () =>\n \"There was an error while initializing React Native SDK storage, it seems that the storage library dependency wasn't installed\",\n [KameleoonException.EventSourceInitialization]: () =>\n \"There was an error while initializing Real Time Update service, it seems that the event source library dependency wasn't installed\",\n [KameleoonException.FeatureFlagConfigurationNotFound]: (featureKey: string) =>\n `No feature flag with key ${featureKey} was found.`,\n [KameleoonException.FeatureFlagEnvironmentDisabled]: (\n featureKey: string,\n environment: string,\n ) =>\n `Feature flag with key ${featureKey} is disabled in ${environment} environment.`,\n [KameleoonException.FeatureFlagVariableNotFound]: (\n variableKey: string,\n visitorCode: string,\n ) =>\n `No feature flag variable with key ${variableKey} was found for ${visitorCode} visitorCode.`,\n [KameleoonException.FeatureFlagVariationNotFound]: (\n variationKey: string,\n visitorCode: string,\n ) =>\n `No feature flag variation with key ${variationKey} was found for ${visitorCode} visitorCode.`,\n [KameleoonException.NotTargeted]: (visitorCode: string) =>\n `Visitor code ${visitorCode} is not targeted`,\n [KameleoonException.VisitAmount]: () =>\n 'Visit amount must be a number between 1 and 25',\n [KameleoonException.VisitorCodeMaxLength]: () =>\n 'Visitor code can not be more than 255 characters long',\n [KameleoonException.VisitorCodeEmpty]: () => 'Visitor code can not be empty',\n [KameleoonException.StorageWrite]: (err: unknown) =>\n `Couldn't update storage for kameleoonClient: ${err}`,\n [KameleoonException.StorageRead]: (key: KameleoonStorageKey) =>\n `No data found in storage under ${key} key`,\n [KameleoonException.StorageEmpty]: () => 'No data found in storage',\n [KameleoonException.StorageParse]: (err: unknown, key: KameleoonStorageKey) =>\n `Couldn't parse ${key} storage data, the data may be corrupted. Error: ${err}`,\n [KameleoonException.ClientConfiguration]: () =>\n \"Couldn't retrieve client configuration from Kameleoon Api\",\n [KameleoonException.TargetingCondition]: (targetingType: TargetingType) =>\n `${targetingType} targeting condition is not yet supported.`,\n [KameleoonException.AmongValuesCheck]: (err: unknown, value: string) =>\n `Couldn't parse value \"${value}\": ${err}`,\n [KameleoonException.RangeCheck]: (value?: number[] | null) =>\n `Couldn't parse value \"${value}\" as a range, value should be in format [x: number, y: number]`,\n [KameleoonException.RemoteData]: () =>\n `Couldn't retrieve data from Kameleoon server`,\n [KameleoonException.MaximumRetriesReached]: () =>\n `Maximum retries reached, request failed`,\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"constants.js","names":["_types","require","Object","defineProperty","exports","value","ERROR_MESSAGES","KameleoonException","CookieParse","reason","concat","JSONParse","err","NumberParse","VersionParse","SemanticVersionParse","Initialization","Credentials","StorageInitialization","EventSourceInitialization","FeatureFlagConfigurationNotFound","featureKey","FeatureFlagEnvironmentDisabled","environment","FeatureFlagVariableNotFound","variableKey","visitorCode","FeatureFlagVariationNotFound","variationKey","NotTargeted","VisitAmount","VisitorCodeMaxLength","VisitorCodeEmpty","StorageWrite","StorageRead","key","StorageEmpty","StorageParse","ClientConfiguration","TargetingCondition","targetingType","AmongValuesCheck","RangeCheck","RemoteData","MaximumRetriesReached"],"sources":["../../src/kameleoonError/constants.ts"],"sourcesContent":["import { KameleoonStorageKey } from 'src/storage';\nimport { TargetingType } from 'src/targeting';\nimport { KameleoonException } from './types';\n\nexport const ERROR_MESSAGES = {\n [KameleoonException.CookieParse]: (reason: string) =>\n `Couldn't parse cookie string: ${reason}`,\n [KameleoonException.JSONParse]: (err: unknown) =>\n `Couldn't parse JSON variable: ${err}`,\n [KameleoonException.NumberParse]: (value: string) =>\n `It's not possible to parse value ${value} to Number`,\n [KameleoonException.VersionParse]: (value: string) =>\n `It's not possible to parse a version value ${value} to Number, version should be in format x.x`,\n [KameleoonException.SemanticVersionParse]: (value: string) =>\n `It's not possible to parse a version value ${value} to Number, version should be in format x.x.x`,\n [KameleoonException.Initialization]: () =>\n \"It seems that the client wasn't properly initialized, make sure to run `initialize` method before invoking other methods\",\n [KameleoonException.Credentials]: () =>\n 'KameleoonClient can not be created without credentials',\n [KameleoonException.StorageInitialization]: () =>\n \"There was an error while initializing React Native SDK storage, it seems that the storage library dependency wasn't installed\",\n [KameleoonException.EventSourceInitialization]: () =>\n \"There was an error while initializing Real Time Update service, it seems that the event source library dependency wasn't installed\",\n [KameleoonException.FeatureFlagConfigurationNotFound]: (featureKey: string) =>\n `No feature flag with key ${featureKey} was found.`,\n [KameleoonException.FeatureFlagEnvironmentDisabled]: (\n featureKey: string,\n environment: string,\n ) =>\n `Feature flag with key ${featureKey} is disabled in ${environment} environment.`,\n [KameleoonException.FeatureFlagVariableNotFound]: (\n variableKey: string,\n visitorCode: string,\n ) =>\n `No feature flag variable with key ${variableKey} was found for ${visitorCode} visitorCode.`,\n [KameleoonException.FeatureFlagVariationNotFound]: (\n variationKey: string,\n visitorCode: string,\n ) =>\n `No feature flag variation with key ${variationKey} was found for ${visitorCode} visitorCode.`,\n [KameleoonException.NotTargeted]: (visitorCode: string) =>\n `Visitor code ${visitorCode} is not targeted`,\n [KameleoonException.VisitAmount]: () =>\n 'Visit amount must be a number between 1 and 25',\n [KameleoonException.VisitorCodeMaxLength]: () =>\n 'Visitor code can not be more than 255 characters long',\n [KameleoonException.VisitorCodeEmpty]: () => 'Visitor code can not be empty',\n [KameleoonException.StorageWrite]: (err: unknown) =>\n `Couldn't update storage for kameleoonClient: ${err}`,\n [KameleoonException.StorageRead]: (key: KameleoonStorageKey) =>\n `No data found in storage under ${key} key`,\n [KameleoonException.StorageEmpty]: () => 'No data found in storage',\n [KameleoonException.StorageParse]: (err: unknown, key: KameleoonStorageKey) =>\n `Couldn't parse ${key} storage data, the data may be corrupted. Error: ${err}`,\n [KameleoonException.ClientConfiguration]: (err: unknown) =>\n `Couldn't retrieve client configuration from Kameleoon Api. Error: ${err}`,\n [KameleoonException.TargetingCondition]: (targetingType: TargetingType) =>\n `${targetingType} targeting condition is not yet supported.`,\n [KameleoonException.AmongValuesCheck]: (err: unknown, value: string) =>\n `Couldn't parse value \"${value}\": ${err}`,\n [KameleoonException.RangeCheck]: (value?: number[] | null) =>\n `Couldn't parse value \"${value}\" as a range, value should be in format [x: number, y: number]`,\n [KameleoonException.RemoteData]: (err: unknown) =>\n `Couldn't retrieve data from Kameleoon server. Error: ${err}`,\n [KameleoonException.MaximumRetriesReached]: (err: unknown) =>\n `Maximum retries reached, request failed. Reason: ${err}`,\n};\n"],"mappings":"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"}
@@ -10,14 +10,14 @@ export declare class KameleoonError extends Error {
10
10
  /**
11
11
  * @param {KameleoonException} type - type of KameleoonError represented by `KameleoonException` enum
12
12
  * */
13
- constructor(type: KameleoonException.Initialization | KameleoonException.Credentials | KameleoonException.ClientConfiguration | KameleoonException.VisitorCodeMaxLength | KameleoonException.VisitorCodeEmpty | KameleoonException.VisitAmount | KameleoonException.StorageInitialization | KameleoonException.EventSourceInitialization | KameleoonException.RemoteData | KameleoonException.MaximumRetriesReached | KameleoonException.StorageEmpty);
13
+ constructor(type: KameleoonException.Initialization | KameleoonException.Credentials | KameleoonException.VisitorCodeMaxLength | KameleoonException.VisitorCodeEmpty | KameleoonException.VisitAmount | KameleoonException.StorageInitialization | KameleoonException.EventSourceInitialization | KameleoonException.StorageEmpty);
14
14
  constructor(type: KameleoonException.FeatureFlagConfigurationNotFound | KameleoonException.FeatureFlagEnvironmentDisabled, featureKey: string);
15
15
  constructor(type: KameleoonException.FeatureFlagConfigurationNotFound | KameleoonException.FeatureFlagEnvironmentDisabled, featureKey: string, environment: string);
16
16
  constructor(type: KameleoonException.FeatureFlagVariableNotFound, variableKey: string, visitorCode: string);
17
17
  constructor(type: KameleoonException.FeatureFlagVariationNotFound, variationKey: string, visitorCode: string);
18
18
  constructor(type: KameleoonException.NotTargeted, visitorCode: string);
19
19
  constructor(type: KameleoonException.CookieParse, message: string);
20
- constructor(type: KameleoonException.StorageWrite | KameleoonException.JSONParse, err: unknown);
20
+ constructor(type: KameleoonException.StorageWrite | KameleoonException.JSONParse | KameleoonException.RemoteData | KameleoonException.MaximumRetriesReached | KameleoonException.ClientConfiguration, err: unknown);
21
21
  constructor(type: KameleoonException.StorageRead, storageKey: string);
22
22
  constructor(type: KameleoonException.StorageParse, err: unknown, key: KameleoonStorageKey);
23
23
  constructor(type: KameleoonException.TargetingCondition, targetingType: TargetingType);
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.KameleoonError=void 0;var _constants=require("./constants"),_helpers=require("./helpers"),_types=require("./types");function _defineProperty(a,b,c){return b=_toPropertyKey(b),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 KameleoonError extends Error{constructor(a,b,c){super("Error: ".concat(a)),_defineProperty(this,"errorType",void 0),this.name="KameleoonError",this.errorType=a;a===_types.KameleoonException.Initialization||a===_types.KameleoonException.Credentials||a===_types.KameleoonException.ClientConfiguration||a===_types.KameleoonException.VisitorCodeMaxLength||a===_types.KameleoonException.VisitorCodeEmpty||a===_types.KameleoonException.StorageInitialization||a===_types.KameleoonException.VisitAmount||a===_types.KameleoonException.EventSourceInitialization||a===_types.KameleoonException.RemoteData||a===_types.KameleoonException.MaximumRetriesReached||a===_types.KameleoonException.StorageEmpty?this.message=_constants.ERROR_MESSAGES[a]():a===_types.KameleoonException.CookieParse||a===_types.KameleoonException.NotTargeted||a===_types.KameleoonException.FeatureFlagConfigurationNotFound||a===_types.KameleoonException.NumberParse||a===_types.KameleoonException.VersionParse||a===_types.KameleoonException.SemanticVersionParse?this.message=_constants.ERROR_MESSAGES[a](b):a===_types.KameleoonException.FeatureFlagVariationNotFound||a===_types.KameleoonException.FeatureFlagEnvironmentDisabled||a===_types.KameleoonException.FeatureFlagVariableNotFound?this.message=_constants.ERROR_MESSAGES[a](b,c):a===_types.KameleoonException.StorageWrite||a===_types.KameleoonException.JSONParse?this.message=_constants.ERROR_MESSAGES[a](b):a===_types.KameleoonException.StorageRead?this.message=_constants.ERROR_MESSAGES[a](b):a===_types.KameleoonException.StorageParse?this.message=_constants.ERROR_MESSAGES[a](b,c):a===_types.KameleoonException.TargetingCondition?this.message=_constants.ERROR_MESSAGES[a](b):a===_types.KameleoonException.AmongValuesCheck?this.message=_constants.ERROR_MESSAGES[a](b,c):a===_types.KameleoonException.RangeCheck?this.message=_constants.ERROR_MESSAGES[a](b):(0,_helpers.exhaustCheck)(a)}get type(){return this.errorType}}exports.KameleoonError=KameleoonError;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.KameleoonError=void 0;var _constants=require("./constants"),_helpers=require("./helpers"),_types=require("./types");function _defineProperty(a,b,c){return b=_toPropertyKey(b),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 KameleoonError extends Error{constructor(a,b,c){super("Error: ".concat(a)),_defineProperty(this,"errorType",void 0),this.name="KameleoonError",this.errorType=a;a===_types.KameleoonException.Initialization||a===_types.KameleoonException.Credentials||a===_types.KameleoonException.VisitorCodeMaxLength||a===_types.KameleoonException.VisitorCodeEmpty||a===_types.KameleoonException.StorageInitialization||a===_types.KameleoonException.VisitAmount||a===_types.KameleoonException.EventSourceInitialization||a===_types.KameleoonException.StorageEmpty?this.message=_constants.ERROR_MESSAGES[a]():a===_types.KameleoonException.CookieParse||a===_types.KameleoonException.NotTargeted||a===_types.KameleoonException.FeatureFlagConfigurationNotFound||a===_types.KameleoonException.NumberParse||a===_types.KameleoonException.ClientConfiguration||a===_types.KameleoonException.MaximumRetriesReached||a===_types.KameleoonException.RemoteData||a===_types.KameleoonException.VersionParse||a===_types.KameleoonException.SemanticVersionParse?this.message=_constants.ERROR_MESSAGES[a](b):a===_types.KameleoonException.FeatureFlagVariationNotFound||a===_types.KameleoonException.FeatureFlagEnvironmentDisabled||a===_types.KameleoonException.FeatureFlagVariableNotFound?this.message=_constants.ERROR_MESSAGES[a](b,c):a===_types.KameleoonException.StorageWrite||a===_types.KameleoonException.JSONParse?this.message=_constants.ERROR_MESSAGES[a](b):a===_types.KameleoonException.StorageRead?this.message=_constants.ERROR_MESSAGES[a](b):a===_types.KameleoonException.StorageParse?this.message=_constants.ERROR_MESSAGES[a](b,c):a===_types.KameleoonException.TargetingCondition?this.message=_constants.ERROR_MESSAGES[a](b):a===_types.KameleoonException.AmongValuesCheck?this.message=_constants.ERROR_MESSAGES[a](b,c):a===_types.KameleoonException.RangeCheck?this.message=_constants.ERROR_MESSAGES[a](b):(0,_helpers.exhaustCheck)(a)}get type(){return this.errorType}}exports.KameleoonError=KameleoonError;
2
2
  //# sourceMappingURL=kameleoonError.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"kameleoonError.js","names":["KameleoonError","Error","constructor","type","secondParam","thirdParam","concat","_defineProperty","name","errorType","KameleoonException","Initialization","Credentials","ClientConfiguration","VisitorCodeMaxLength","VisitorCodeEmpty","StorageInitialization","VisitAmount","EventSourceInitialization","RemoteData","MaximumRetriesReached","StorageEmpty","message","ERROR_MESSAGES","CookieParse","NotTargeted","FeatureFlagConfigurationNotFound","NumberParse","VersionParse","SemanticVersionParse","FeatureFlagVariationNotFound","FeatureFlagEnvironmentDisabled","FeatureFlagVariableNotFound","StorageWrite","JSONParse","StorageRead","StorageParse","TargetingCondition","AmongValuesCheck","RangeCheck","exhaustCheck","exports"],"sources":["../../src/kameleoonError/kameleoonError.ts"],"sourcesContent":["import { KameleoonStorageKey } from 'src/storage';\nimport { TargetingType } from 'src/targeting';\nimport { ERROR_MESSAGES } from './constants';\nimport { exhaustCheck } from './helpers';\nimport { KameleoonException } from './types';\n\n/**\n * @class\n * KameleoonError - extends standard `Error` by adding custom `type` property with the type of `KameleoonException`\n * */\nexport class KameleoonError extends Error {\n private errorType: KameleoonException;\n\n /**\n * @param {KameleoonException} type - type of KameleoonError represented by `KameleoonException` enum\n * */\n constructor(\n type:\n | KameleoonException.Initialization\n | KameleoonException.Credentials\n | KameleoonException.ClientConfiguration\n | KameleoonException.VisitorCodeMaxLength\n | KameleoonException.VisitorCodeEmpty\n | KameleoonException.VisitAmount\n | KameleoonException.StorageInitialization\n | KameleoonException.EventSourceInitialization\n | KameleoonException.RemoteData\n | KameleoonException.MaximumRetriesReached\n | KameleoonException.StorageEmpty,\n );\n constructor(\n type:\n | KameleoonException.FeatureFlagConfigurationNotFound\n | KameleoonException.FeatureFlagEnvironmentDisabled,\n featureKey: string,\n );\n constructor(\n type:\n | KameleoonException.FeatureFlagConfigurationNotFound\n | KameleoonException.FeatureFlagEnvironmentDisabled,\n featureKey: string,\n environment: string,\n );\n constructor(\n type: KameleoonException.FeatureFlagVariableNotFound,\n variableKey: string,\n visitorCode: string,\n );\n constructor(\n type: KameleoonException.FeatureFlagVariationNotFound,\n variationKey: string,\n visitorCode: string,\n );\n constructor(type: KameleoonException.NotTargeted, visitorCode: string);\n constructor(type: KameleoonException.CookieParse, message: string);\n constructor(\n type: KameleoonException.StorageWrite | KameleoonException.JSONParse,\n err: unknown,\n );\n constructor(type: KameleoonException.StorageRead, storageKey: string);\n constructor(\n type: KameleoonException.StorageParse,\n err: unknown,\n key: KameleoonStorageKey,\n );\n constructor(\n type: KameleoonException.TargetingCondition,\n targetingType: TargetingType,\n );\n constructor(\n type: KameleoonException.AmongValuesCheck,\n err: unknown,\n value: string,\n );\n constructor(type: KameleoonException.RangeCheck, value?: number[] | null);\n constructor(\n type:\n | KameleoonException.NumberParse\n | KameleoonException.VersionParse\n | KameleoonException.SemanticVersionParse,\n value: string,\n );\n constructor(\n type: KameleoonException,\n secondParam?:\n | number\n | string\n | unknown\n | KameleoonStorageKey\n | TargetingType,\n thirdParam?: string | KameleoonStorageKey,\n ) {\n super(`Error: ${type}`);\n\n this.name = 'KameleoonError';\n this.errorType = type;\n\n switch (type) {\n case KameleoonException.Initialization:\n case KameleoonException.Credentials:\n case KameleoonException.ClientConfiguration:\n case KameleoonException.VisitorCodeMaxLength:\n case KameleoonException.VisitorCodeEmpty:\n case KameleoonException.StorageInitialization:\n case KameleoonException.VisitAmount:\n case KameleoonException.EventSourceInitialization:\n case KameleoonException.RemoteData:\n case KameleoonException.MaximumRetriesReached:\n case KameleoonException.StorageEmpty:\n this.message = ERROR_MESSAGES[type]();\n break;\n case KameleoonException.CookieParse:\n case KameleoonException.NotTargeted:\n case KameleoonException.FeatureFlagConfigurationNotFound:\n case KameleoonException.NumberParse:\n case KameleoonException.VersionParse:\n case KameleoonException.SemanticVersionParse:\n this.message = ERROR_MESSAGES[type](secondParam as string);\n break;\n case KameleoonException.FeatureFlagVariationNotFound:\n case KameleoonException.FeatureFlagEnvironmentDisabled:\n case KameleoonException.FeatureFlagVariableNotFound:\n this.message = ERROR_MESSAGES[type](\n secondParam as string,\n thirdParam as string,\n );\n break;\n case KameleoonException.StorageWrite:\n case KameleoonException.JSONParse:\n this.message = ERROR_MESSAGES[type](secondParam);\n break;\n case KameleoonException.StorageRead:\n this.message = ERROR_MESSAGES[type](secondParam as KameleoonStorageKey);\n break;\n case KameleoonException.StorageParse:\n this.message = ERROR_MESSAGES[type](\n secondParam,\n thirdParam as KameleoonStorageKey,\n );\n break;\n case KameleoonException.TargetingCondition:\n this.message = ERROR_MESSAGES[type](secondParam as TargetingType);\n break;\n case KameleoonException.AmongValuesCheck:\n this.message = ERROR_MESSAGES[type](secondParam, thirdParam as string);\n break;\n case KameleoonException.RangeCheck:\n this.message = ERROR_MESSAGES[type](\n secondParam as number[] | null | undefined,\n );\n break;\n default:\n exhaustCheck(type);\n }\n }\n\n get type(): KameleoonException {\n return this.errorType;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"kameleoonError.js","names":["KameleoonError","Error","constructor","type","secondParam","thirdParam","concat","_defineProperty","name","errorType","KameleoonException","Initialization","Credentials","VisitorCodeMaxLength","VisitorCodeEmpty","StorageInitialization","VisitAmount","EventSourceInitialization","StorageEmpty","message","ERROR_MESSAGES","CookieParse","NotTargeted","FeatureFlagConfigurationNotFound","NumberParse","ClientConfiguration","MaximumRetriesReached","RemoteData","VersionParse","SemanticVersionParse","FeatureFlagVariationNotFound","FeatureFlagEnvironmentDisabled","FeatureFlagVariableNotFound","StorageWrite","JSONParse","StorageRead","StorageParse","TargetingCondition","AmongValuesCheck","RangeCheck","exhaustCheck","exports"],"sources":["../../src/kameleoonError/kameleoonError.ts"],"sourcesContent":["import { KameleoonStorageKey } from 'src/storage';\nimport { TargetingType } from 'src/targeting';\nimport { ERROR_MESSAGES } from './constants';\nimport { exhaustCheck } from './helpers';\nimport { KameleoonException } from './types';\n\n/**\n * @class\n * KameleoonError - extends standard `Error` by adding custom `type` property with the type of `KameleoonException`\n * */\nexport class KameleoonError extends Error {\n private errorType: KameleoonException;\n\n /**\n * @param {KameleoonException} type - type of KameleoonError represented by `KameleoonException` enum\n * */\n constructor(\n type:\n | KameleoonException.Initialization\n | KameleoonException.Credentials\n | KameleoonException.VisitorCodeMaxLength\n | KameleoonException.VisitorCodeEmpty\n | KameleoonException.VisitAmount\n | KameleoonException.StorageInitialization\n | KameleoonException.EventSourceInitialization\n | KameleoonException.StorageEmpty,\n );\n constructor(\n type:\n | KameleoonException.FeatureFlagConfigurationNotFound\n | KameleoonException.FeatureFlagEnvironmentDisabled,\n featureKey: string,\n );\n constructor(\n type:\n | KameleoonException.FeatureFlagConfigurationNotFound\n | KameleoonException.FeatureFlagEnvironmentDisabled,\n featureKey: string,\n environment: string,\n );\n constructor(\n type: KameleoonException.FeatureFlagVariableNotFound,\n variableKey: string,\n visitorCode: string,\n );\n constructor(\n type: KameleoonException.FeatureFlagVariationNotFound,\n variationKey: string,\n visitorCode: string,\n );\n constructor(type: KameleoonException.NotTargeted, visitorCode: string);\n constructor(type: KameleoonException.CookieParse, message: string);\n constructor(\n type:\n | KameleoonException.StorageWrite\n | KameleoonException.JSONParse\n | KameleoonException.RemoteData\n | KameleoonException.MaximumRetriesReached\n | KameleoonException.ClientConfiguration,\n err: unknown,\n );\n constructor(type: KameleoonException.StorageRead, storageKey: string);\n constructor(\n type: KameleoonException.StorageParse,\n err: unknown,\n key: KameleoonStorageKey,\n );\n constructor(\n type: KameleoonException.TargetingCondition,\n targetingType: TargetingType,\n );\n constructor(\n type: KameleoonException.AmongValuesCheck,\n err: unknown,\n value: string,\n );\n constructor(type: KameleoonException.RangeCheck, value?: number[] | null);\n constructor(\n type:\n | KameleoonException.NumberParse\n | KameleoonException.VersionParse\n | KameleoonException.SemanticVersionParse,\n value: string,\n );\n constructor(\n type: KameleoonException,\n secondParam?:\n | number\n | string\n | unknown\n | KameleoonStorageKey\n | TargetingType,\n thirdParam?: string | KameleoonStorageKey,\n ) {\n super(`Error: ${type}`);\n\n this.name = 'KameleoonError';\n this.errorType = type;\n\n switch (type) {\n case KameleoonException.Initialization:\n case KameleoonException.Credentials:\n case KameleoonException.VisitorCodeMaxLength:\n case KameleoonException.VisitorCodeEmpty:\n case KameleoonException.StorageInitialization:\n case KameleoonException.VisitAmount:\n case KameleoonException.EventSourceInitialization:\n case KameleoonException.StorageEmpty:\n this.message = ERROR_MESSAGES[type]();\n break;\n case KameleoonException.CookieParse:\n case KameleoonException.NotTargeted:\n case KameleoonException.FeatureFlagConfigurationNotFound:\n case KameleoonException.NumberParse:\n case KameleoonException.ClientConfiguration:\n case KameleoonException.MaximumRetriesReached:\n case KameleoonException.RemoteData:\n case KameleoonException.VersionParse:\n case KameleoonException.SemanticVersionParse:\n this.message = ERROR_MESSAGES[type](secondParam as string);\n break;\n case KameleoonException.FeatureFlagVariationNotFound:\n case KameleoonException.FeatureFlagEnvironmentDisabled:\n case KameleoonException.FeatureFlagVariableNotFound:\n this.message = ERROR_MESSAGES[type](\n secondParam as string,\n thirdParam as string,\n );\n break;\n case KameleoonException.StorageWrite:\n case KameleoonException.JSONParse:\n this.message = ERROR_MESSAGES[type](secondParam);\n break;\n case KameleoonException.StorageRead:\n this.message = ERROR_MESSAGES[type](secondParam as KameleoonStorageKey);\n break;\n case KameleoonException.StorageParse:\n this.message = ERROR_MESSAGES[type](\n secondParam,\n thirdParam as KameleoonStorageKey,\n );\n break;\n case KameleoonException.TargetingCondition:\n this.message = ERROR_MESSAGES[type](secondParam as TargetingType);\n break;\n case KameleoonException.AmongValuesCheck:\n this.message = ERROR_MESSAGES[type](secondParam, thirdParam as string);\n break;\n case KameleoonException.RangeCheck:\n this.message = ERROR_MESSAGES[type](\n secondParam as number[] | null | undefined,\n );\n break;\n default:\n exhaustCheck(type);\n }\n }\n\n get type(): KameleoonException {\n return this.errorType;\n }\n}\n"],"mappings":"msBAUO,KAAM,CAAAA,cAAc,QAAS,CAAAC,KAAM,CA0ExCC,WAAWA,CACTC,CAAwB,CACxBC,CAKiB,CACjBC,CAAyC,CACzC,CACA,KAAK,WAAAC,MAAA,CAAWH,CAAI,CAAE,CAAC,CAAAI,eAAA,0BAEvB,IAAI,CAACC,IAAI,CAAG,gBAAgB,CAC5B,IAAI,CAACC,SAAS,CAAGN,CAAI,CAEbA,CAAI,GACLO,yBAAkB,CAACC,cAAc,EADhCR,CAAI,GAELO,yBAAkB,CAACE,WAAW,EAF7BT,CAAI,GAGLO,yBAAkB,CAACG,oBAAoB,EAHtCV,CAAI,GAILO,yBAAkB,CAACI,gBAAgB,EAJlCX,CAAI,GAKLO,yBAAkB,CAACK,qBAAqB,EALvCZ,CAAI,GAMLO,yBAAkB,CAACM,WAAW,EAN7Bb,CAAI,GAOLO,yBAAkB,CAACO,yBAAyB,EAP3Cd,CAAI,GAQLO,yBAAkB,CAACQ,YAAY,CAClC,IAAI,CAACC,OAAO,CAAGC,yBAAc,CAACjB,CAAI,CAAC,CAAC,CAAC,CATjCA,CAAI,GAWLO,yBAAkB,CAACW,WAAW,EAX7BlB,CAAI,GAYLO,yBAAkB,CAACY,WAAW,EAZ7BnB,CAAI,GAaLO,yBAAkB,CAACa,gCAAgC,EAblDpB,CAAI,GAcLO,yBAAkB,CAACc,WAAW,EAd7BrB,CAAI,GAeLO,yBAAkB,CAACe,mBAAmB,EAfrCtB,CAAI,GAgBLO,yBAAkB,CAACgB,qBAAqB,EAhBvCvB,CAAI,GAiBLO,yBAAkB,CAACiB,UAAU,EAjB5BxB,CAAI,GAkBLO,yBAAkB,CAACkB,YAAY,EAlB9BzB,CAAI,GAmBLO,yBAAkB,CAACmB,oBAAoB,CAC1C,IAAI,CAACV,OAAO,CAAGC,yBAAc,CAACjB,CAAI,CAAC,CAACC,CAAqB,CAAC,CApBtDD,CAAI,GAsBLO,yBAAkB,CAACoB,4BAA4B,EAtB9C3B,CAAI,GAuBLO,yBAAkB,CAACqB,8BAA8B,EAvBhD5B,CAAI,GAwBLO,yBAAkB,CAACsB,2BAA2B,CACjD,IAAI,CAACb,OAAO,CAAGC,yBAAc,CAACjB,CAAI,CAAC,CACjCC,CAAW,CACXC,CACF,CAAC,CA5BGF,CAAI,GA8BLO,yBAAkB,CAACuB,YAAY,EA9B9B9B,CAAI,GA+BLO,yBAAkB,CAACwB,SAAS,CAC/B,IAAI,CAACf,OAAO,CAAGC,yBAAc,CAACjB,CAAI,CAAC,CAACC,CAAW,CAAC,CAhC5CD,CAAI,GAkCLO,yBAAkB,CAACyB,WAAW,CACjC,IAAI,CAAChB,OAAO,CAAGC,yBAAc,CAACjB,CAAI,CAAC,CAACC,CAAkC,CAAC,CAnCnED,CAAI,GAqCLO,yBAAkB,CAAC0B,YAAY,CAClC,IAAI,CAACjB,OAAO,CAAGC,yBAAc,CAACjB,CAAI,CAAC,CACjCC,CAAW,CACXC,CACF,CAAC,CAzCGF,CAAI,GA2CLO,yBAAkB,CAAC2B,kBAAkB,CACxC,IAAI,CAAClB,OAAO,CAAGC,yBAAc,CAACjB,CAAI,CAAC,CAACC,CAA4B,CAAC,CA5C7DD,CAAI,GA8CLO,yBAAkB,CAAC4B,gBAAgB,CACtC,IAAI,CAACnB,OAAO,CAAGC,yBAAc,CAACjB,CAAI,CAAC,CAACC,CAAW,CAAEC,CAAoB,CAAC,CA/ClEF,CAAI,GAiDLO,yBAAkB,CAAC6B,UAAU,CAChC,IAAI,CAACpB,OAAO,CAAGC,yBAAc,CAACjB,CAAI,CAAC,CACjCC,CACF,CAAC,CAGD,GAAAoC,qBAAY,EAACrC,CAAI,CAEvB,CAEA,GAAI,CAAAA,IAAIA,CAAA,CAAuB,CAC7B,MAAO,KAAI,CAACM,SACd,CACF,CAACgC,OAAA,CAAAzC,cAAA,CAAAA,cAAA"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.KameleoonUtils=void 0;var _kameleoonError=require("./kameleoonError"),_requester=require("./requester");class KameleoonUtils{static getClientConfigurationUrl(a,b,c){let d="https://sdk-config.".concat(c||"kameleoon.eu","/");return b?d+a+_requester.UrlFirstParameter.Environment+b:d+a}static simulateSuccessRequest(a,b){switch(a){case _requester.RequestType.Tracking:return new Promise(a=>{a({status:204,json:()=>new Promise(a=>a(null)),ok:!0})});case _requester.RequestType.Configuration:case _requester.RequestType.RemoteData:return new Promise(a=>{a({status:200,json:()=>new Promise(a=>a(b)),ok:!0})});default:(0,_kameleoonError.exhaustCheck)(a)}}static getCookieValue(a,b){const c=a.split("; "),d=c.find(a=>{const[c,d]=a.split("=");return c===b&&""!==d});return d?d.split("=")[1]:null}}exports.KameleoonUtils=KameleoonUtils;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.KameleoonUtils=void 0;var _kameleoonError=require("./kameleoonError"),_requester=require("./requester");class KameleoonUtils{static getClientConfigurationUrl(a,b,c){let d="https://sdk-config.".concat(c||"kameleoon.eu","/");return b?d+a+_requester.UrlFirstParameter.Environment+b:d+a}static simulateSuccessRequest(a,b){switch(a){case _requester.RequestType.Tracking:return new Promise(a=>{a({status:204,json:()=>new Promise(a=>a(null)),text:()=>new Promise(a=>a("")),ok:!0})});case _requester.RequestType.Configuration:case _requester.RequestType.RemoteData:return new Promise(a=>{a({status:200,json:()=>new Promise(a=>a(b)),text:()=>new Promise(a=>a("")),ok:!0})});default:(0,_kameleoonError.exhaustCheck)(a)}}static getCookieValue(a,b){const c=a.split("; "),d=c.find(a=>{const[c,d]=a.split("=");return c===b&&""!==d});return d?d.split("=")[1]:null}}exports.KameleoonUtils=KameleoonUtils;
2
2
  //# sourceMappingURL=kameleoonUtils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"kameleoonUtils.js","names":["KameleoonUtils","getClientConfigurationUrl","siteCode","environment","networkDomain","url","concat","UrlFirstParameter","Environment","simulateSuccessRequest","requestType","data","RequestType","Tracking","Promise","resolve","status","json","r","ok","Configuration","RemoteData","exhaustCheck","getCookieValue","cookie","key","pairs","split","pair","find","pairKey","pairValue","exports"],"sources":["../src/kameleoonUtils.ts"],"sourcesContent":["import { exhaustCheck } from './kameleoonError';\nimport {\n KameleoonResponseType,\n RequestType,\n UrlFirstParameter,\n} from './requester';\nimport { Environment, SimulateRequestDataType } from './types';\n\n/**\n * KameleoonUtils - a class containing static Kameleoon helper methods\n * */\nexport class KameleoonUtils {\n /**\n * @method getClientConfigurationUrl - a method to get client configuration url\n * @deprecated this method will soon be removed in favor of custom `IExternalRequester` implementation\n *\n * @param {string} siteCode - site code\n * @param {Environment} environment - environment, default is `production`\n * @param {string} networkDomain - network domain to be used instead of default `kameleoon.com`, useful for proxying, must be in format `example.com`\n * @returns {string} client configuration url\n * */\n public static getClientConfigurationUrl(\n siteCode: string,\n environment?: Environment,\n networkDomain?: string,\n ): string {\n let domain = networkDomain || 'kameleoon.eu';\n let url = `https://sdk-config.${domain}/`;\n\n if (!environment) {\n return url + siteCode;\n }\n\n return url + siteCode + UrlFirstParameter.Environment + environment;\n }\n\n /**\n * @method simulateSuccessRequest - a method to simulate a successful request based on request type, primarily used for `IExternalRequester` implementations\n *\n * @param {RequestType} requestType - request type\n * @param {SimulateRequestDataType[RequestType]} data - simulate data type for request\n * */\n public static simulateSuccessRequest<T extends RequestType>(\n requestType: T,\n data: SimulateRequestDataType[T],\n ): Promise<KameleoonResponseType> {\n switch (requestType) {\n case RequestType.Tracking:\n return new Promise((resolve) => {\n const response: KameleoonResponseType = {\n status: 204,\n json: () => new Promise((r) => r(null)),\n ok: true,\n };\n\n resolve(response);\n });\n case RequestType.Configuration:\n case RequestType.RemoteData:\n return new Promise((resolve) => {\n const response: KameleoonResponseType = {\n status: 200,\n json: () => new Promise((r) => r(data)),\n ok: true,\n };\n\n resolve(response);\n });\n default:\n exhaustCheck(requestType);\n }\n }\n\n /**\n * @method getCookieValue - a method to get a cookie value by key from a cookie string, primarily used for `IExternalVisitorCodeManager` implementations\n *\n * @param {string} cookie - cookie string\n * @param {string} key - cookie key\n * @returns {string | null} cookie value or null if not found\n * */\n public static getCookieValue(cookie: string, key: string): string | null {\n const pairs = cookie.split('; ');\n const pair = pairs.find((pair) => {\n const [pairKey, pairValue] = pair.split('=');\n\n return pairKey === key && pairValue !== '';\n });\n\n if (pair) {\n return pair.split('=')[1];\n }\n\n return null;\n }\n}\n"],"mappings":"oLAWO,KAAM,CAAAA,cAAe,CAU1B,MAAc,CAAAC,yBAAyBA,CACrCC,CAAgB,CAChBC,CAAyB,CACzBC,CAAsB,CACd,IAEJ,CAAAC,CAAG,uBAAAC,MAAA,CADMF,CAAa,EAAI,cAAc,KACH,OAEpC,CAAAD,CAAW,CAITE,CAAG,CAAGH,CAAQ,CAAGK,4BAAiB,CAACC,WAAW,CAAGL,CAAW,CAH1DE,CAAG,CAAGH,CAIjB,CAQA,MAAc,CAAAO,sBAAsBA,CAClCC,CAAc,CACdC,CAAgC,CACA,CAChC,OAAQD,CAAW,EACjB,IAAK,CAAAE,sBAAW,CAACC,QAAQ,CACvB,MAAO,IAAI,CAAAC,OAAO,CAAEC,CAAO,EAAK,CAO9BA,CAAO,CANiC,CACtCC,MAAM,CAAE,GAAG,CACXC,IAAI,CAAEA,CAAA,GAAM,GAAI,CAAAH,OAAO,CAAEI,CAAC,EAAKA,CAAC,CAAC,IAAI,CAAC,CAAC,CACvCC,EAAE,GACJ,CAEgB,CAClB,CAAC,CAAC,CACJ,IAAK,CAAAP,sBAAW,CAACQ,aAAa,CAC9B,IAAK,CAAAR,sBAAW,CAACS,UAAU,CACzB,MAAO,IAAI,CAAAP,OAAO,CAAEC,CAAO,EAAK,CAO9BA,CAAO,CANiC,CACtCC,MAAM,CAAE,GAAG,CACXC,IAAI,CAAEA,CAAA,GAAM,GAAI,CAAAH,OAAO,CAAEI,CAAC,EAAKA,CAAC,CAACP,CAAI,CAAC,CAAC,CACvCQ,EAAE,GACJ,CAEgB,CAClB,CAAC,CAAC,CACJ,QACE,GAAAG,4BAAY,EAACZ,CAAW,CAC5B,CACF,CASA,MAAc,CAAAa,cAAcA,CAACC,CAAc,CAAEC,CAAW,CAAiB,MACjE,CAAAC,CAAK,CAAGF,CAAM,CAACG,KAAK,CAAC,IAAI,CAAC,CAC1BC,CAAI,CAAGF,CAAK,CAACG,IAAI,CAAED,CAAI,EAAK,CAChC,KAAM,CAACE,CAAO,CAAEC,CAAS,CAAC,CAAGH,CAAI,CAACD,KAAK,CAAC,GAAG,CAAC,CAE5C,MAAO,CAAAG,CAAO,GAAKL,CAAG,EAAkB,EAAE,GAAhBM,CAC5B,CAAC,CAAC,OAEE,CAAAH,CAAI,CACCA,CAAI,CAACD,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAGpB,IACT,CACF,CAACK,OAAA,CAAAhC,cAAA,CAAAA,cAAA"}
1
+ {"version":3,"file":"kameleoonUtils.js","names":["KameleoonUtils","getClientConfigurationUrl","siteCode","environment","networkDomain","url","concat","UrlFirstParameter","Environment","simulateSuccessRequest","requestType","data","RequestType","Tracking","Promise","resolve","status","json","r","text","ok","Configuration","RemoteData","exhaustCheck","getCookieValue","cookie","key","pairs","split","pair","find","pairKey","pairValue","exports"],"sources":["../src/kameleoonUtils.ts"],"sourcesContent":["import { exhaustCheck } from './kameleoonError';\nimport {\n KameleoonResponseType,\n RequestType,\n UrlFirstParameter,\n} from './requester';\nimport { Environment, SimulateRequestDataType } from './types';\n\n/**\n * KameleoonUtils - a class containing static Kameleoon helper methods\n * */\nexport class KameleoonUtils {\n /**\n * @method getClientConfigurationUrl - a method to get client configuration url\n * @deprecated this method will soon be removed in favor of custom `IExternalRequester` implementation\n *\n * @param {string} siteCode - site code\n * @param {Environment} environment - environment, default is `production`\n * @param {string} networkDomain - network domain to be used instead of default `kameleoon.com`, useful for proxying, must be in format `example.com`\n * @returns {string} client configuration url\n * */\n public static getClientConfigurationUrl(\n siteCode: string,\n environment?: Environment,\n networkDomain?: string,\n ): string {\n let domain = networkDomain || 'kameleoon.eu';\n let url = `https://sdk-config.${domain}/`;\n\n if (!environment) {\n return url + siteCode;\n }\n\n return url + siteCode + UrlFirstParameter.Environment + environment;\n }\n\n /**\n * @method simulateSuccessRequest - a method to simulate a successful request based on request type, primarily used for `IExternalRequester` implementations\n *\n * @param {RequestType} requestType - request type\n * @param {SimulateRequestDataType[RequestType]} data - simulate data type for request\n * */\n public static simulateSuccessRequest<T extends RequestType>(\n requestType: T,\n data: SimulateRequestDataType[T],\n ): Promise<KameleoonResponseType> {\n switch (requestType) {\n case RequestType.Tracking:\n return new Promise((resolve) => {\n const response: KameleoonResponseType = {\n status: 204,\n json: () => new Promise((r) => r(null)),\n text: () => new Promise((r) => r('')),\n ok: true,\n };\n\n resolve(response);\n });\n case RequestType.Configuration:\n case RequestType.RemoteData:\n return new Promise((resolve) => {\n const response: KameleoonResponseType = {\n status: 200,\n json: () => new Promise((r) => r(data)),\n text: () => new Promise((r) => r('')),\n ok: true,\n };\n\n resolve(response);\n });\n default:\n exhaustCheck(requestType);\n }\n }\n\n /**\n * @method getCookieValue - a method to get a cookie value by key from a cookie string, primarily used for `IExternalVisitorCodeManager` implementations\n *\n * @param {string} cookie - cookie string\n * @param {string} key - cookie key\n * @returns {string | null} cookie value or null if not found\n * */\n public static getCookieValue(cookie: string, key: string): string | null {\n const pairs = cookie.split('; ');\n const pair = pairs.find((pair) => {\n const [pairKey, pairValue] = pair.split('=');\n\n return pairKey === key && pairValue !== '';\n });\n\n if (pair) {\n return pair.split('=')[1];\n }\n\n return null;\n }\n}\n"],"mappings":"oLAWO,KAAM,CAAAA,cAAe,CAU1B,MAAc,CAAAC,yBAAyBA,CACrCC,CAAgB,CAChBC,CAAyB,CACzBC,CAAsB,CACd,IAEJ,CAAAC,CAAG,uBAAAC,MAAA,CADMF,CAAa,EAAI,cAAc,KACH,OAEpC,CAAAD,CAAW,CAITE,CAAG,CAAGH,CAAQ,CAAGK,4BAAiB,CAACC,WAAW,CAAGL,CAAW,CAH1DE,CAAG,CAAGH,CAIjB,CAQA,MAAc,CAAAO,sBAAsBA,CAClCC,CAAc,CACdC,CAAgC,CACA,CAChC,OAAQD,CAAW,EACjB,IAAK,CAAAE,sBAAW,CAACC,QAAQ,CACvB,MAAO,IAAI,CAAAC,OAAO,CAAEC,CAAO,EAAK,CAQ9BA,CAAO,CAPiC,CACtCC,MAAM,CAAE,GAAG,CACXC,IAAI,CAAEA,CAAA,GAAM,GAAI,CAAAH,OAAO,CAAEI,CAAC,EAAKA,CAAC,CAAC,IAAI,CAAC,CAAC,CACvCC,IAAI,CAAEA,CAAA,GAAM,GAAI,CAAAL,OAAO,CAAEI,CAAC,EAAKA,CAAC,CAAC,EAAE,CAAC,CAAC,CACrCE,EAAE,GACJ,CAEgB,CAClB,CAAC,CAAC,CACJ,IAAK,CAAAR,sBAAW,CAACS,aAAa,CAC9B,IAAK,CAAAT,sBAAW,CAACU,UAAU,CACzB,MAAO,IAAI,CAAAR,OAAO,CAAEC,CAAO,EAAK,CAQ9BA,CAAO,CAPiC,CACtCC,MAAM,CAAE,GAAG,CACXC,IAAI,CAAEA,CAAA,GAAM,GAAI,CAAAH,OAAO,CAAEI,CAAC,EAAKA,CAAC,CAACP,CAAI,CAAC,CAAC,CACvCQ,IAAI,CAAEA,CAAA,GAAM,GAAI,CAAAL,OAAO,CAAEI,CAAC,EAAKA,CAAC,CAAC,EAAE,CAAC,CAAC,CACrCE,EAAE,GACJ,CAEgB,CAClB,CAAC,CAAC,CACJ,QACE,GAAAG,4BAAY,EAACb,CAAW,CAC5B,CACF,CASA,MAAc,CAAAc,cAAcA,CAACC,CAAc,CAAEC,CAAW,CAAiB,MACjE,CAAAC,CAAK,CAAGF,CAAM,CAACG,KAAK,CAAC,IAAI,CAAC,CAC1BC,CAAI,CAAGF,CAAK,CAACG,IAAI,CAAED,CAAI,EAAK,CAChC,KAAM,CAACE,CAAO,CAAEC,CAAS,CAAC,CAAGH,CAAI,CAACD,KAAK,CAAC,GAAG,CAAC,CAE5C,MAAO,CAAAG,CAAO,GAAKL,CAAG,EAAkB,EAAE,GAAhBM,CAC5B,CAAC,CAAC,OAEE,CAAAH,CAAI,CACCA,CAAI,CAACD,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAGpB,IACT,CACF,CAACK,OAAA,CAAAjC,cAAA,CAAAA,cAAA"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.Requester=void 0;var _tsRes=require("ts-res"),_kameleoonError=require("../kameleoonError"),_utilities=require("../utilities"),_constants=require("./constants"),_types=require("./types"),_urlProvider=require("./urlProvider");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),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 Requester{constructor(a){let{siteCode:b,environment:c,packageInfo:d,domain:e,externalRequester:f,requestTimeout:g,trackRetryDelay:h}=a;_defineProperty(this,"externalRequester",void 0),_defineProperty(this,"packageInfo",void 0),_defineProperty(this,"trackRetryDelay",void 0),_defineProperty(this,"timeout",void 0),this.externalRequester=f,this.trackRetryDelay=h,this.packageInfo=d,this.timeout=g,_urlProvider.UrlProvider.initialize({siteCode:b,domain:e,packageInfo:d,environment:c})}async getClientConfiguration(a){const b=_urlProvider.UrlProvider.getClientConfigurationUrl(a),c={[_constants.Header.SdkType]:this.packageInfo.type.toLowerCase(),[_constants.Header.SdkVersion]:this.packageInfo.version},d=_constants.NUMBER_OF_RETRIES+1;try{for(let a=0;a<d;a++){const d=await this.sendRequest({url:b,requestType:_types.RequestType.Configuration,retryCount:a,headers:c});if(d.ok){const a=await d.json();return(0,_tsRes.Ok)(a)}}return(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.MaximumRetriesReached))}catch(_){return(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.ClientConfiguration))}}async getRemoteData(a){const b=_urlProvider.UrlProvider.getRemoteDataUrl(a),c=new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.RemoteData);try{const a=await this.sendRequest({url:b,requestType:_types.RequestType.RemoteData,retryCount:0});if(!a.ok)return(0,_tsRes.Err)(c);const d=await a.json();return(0,_tsRes.Ok)(d)}catch(_){return(0,_tsRes.Err)(c)}}async getVisitorData(a){let{visitorCode:b,filters:c,isMappingIdentifier:d}=a;const e=_urlProvider.UrlProvider.getVisitorDataUrl({visitorCode:b,filters:c,isMappingIdentifier:d}),f=new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.RemoteData);try{const a=await this.sendRequest({url:e,requestType:_types.RequestType.RemoteData,retryCount:0});if(!a.ok)return(0,_tsRes.Err)(f);const b=await a.json();return(0,_tsRes.Ok)(b)}catch(_){return(0,_tsRes.Err)(f)}}async trackExperiment(a){let{visitorCode:b,dataUrl:c,variationDataUrl:d,userAgent:e,isUnallocated:f}=a;const g=_urlProvider.UrlProvider.getTrackingUrl(b),h=c?"":_constants.UrlEventType.Activity+_constants.UrlParameter.Nonce+_utilities.Utilities.getNonce(),i=f?h:d,j=i?c+"\n"+i:c,k=e?{[_constants.Header.UserAgent]:e}:void 0;try{const a=await this.track({url:g,headers:k,requestType:_types.RequestType.Tracking,body:j});return(0,_tsRes.Ok)(a)}catch(_){return(0,_tsRes.Err)()}}async trackData(a){let{visitorCode:b,body:c,userAgent:d,isMappingIdentifier:e}=a;const f=_urlProvider.UrlProvider.getTrackingUrl(b,e),g=c||_constants.UrlEventType.Activity+_constants.UrlParameter.Nonce+_utilities.Utilities.getNonce(),h=d?{[_constants.Header.UserAgent]:d}:void 0;try{const a=await this.track({url:f,requestType:_types.RequestType.Tracking,headers:h,body:g});return(0,_tsRes.Ok)(a)}catch(_){return(0,_tsRes.Err)()}}async track(a){const b=_constants.NUMBER_OF_RETRIES+1;for(let c=0;c<b;c++){const b=await this.sendRequest(_objectSpread(_objectSpread({},a),{},{retryCount:c}));if(b.ok)return!0;await new Promise(a=>setTimeout(a,this.trackRetryDelay))}return!1}async sendRequest(a){let{requestType:b,url:c,retryCount:d,headers:e,body:f}=a;const g=new AbortController,h=setTimeout(()=>g.abort(),this.timeout);let i;switch(b){case _types.RequestType.RemoteData:case _types.RequestType.Configuration:i={headers:e,signal:g.signal,method:_types.HttpMethod.Get};break;case _types.RequestType.Tracking:if(!f)throw new Error("Internal Error: Tracking request should always contain body");i={method:_types.HttpMethod.Post,headers:e,signal:g.signal,body:f}}const j=_objectSpread(_objectSpread({},i),{},{headers:e,signal:g.signal}),k=await this.externalRequester.sendRequest({url:c,retryCount:d,requestType:b,parameters:j});return clearTimeout(h),k}}exports.Requester=Requester;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.Requester=void 0;var _tsRes=require("ts-res"),_kameleoonError=require("../kameleoonError"),_utilities=require("../utilities"),_constants=require("./constants"),_types=require("./types"),_urlProvider=require("./urlProvider");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),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 Requester{constructor(a){let{siteCode:b,environment:c,packageInfo:d,domain:e,externalRequester:f,requestTimeout:g,trackRetryDelay:h}=a;_defineProperty(this,"externalRequester",void 0),_defineProperty(this,"packageInfo",void 0),_defineProperty(this,"trackRetryDelay",void 0),_defineProperty(this,"timeout",void 0),this.externalRequester=f,this.trackRetryDelay=h,this.packageInfo=d,this.timeout=g,_urlProvider.UrlProvider.initialize({siteCode:b,domain:e,packageInfo:d,environment:c})}async getClientConfiguration(a){const b=_urlProvider.UrlProvider.getClientConfigurationUrl(a),c={[_constants.Header.SdkType]:this.packageInfo.type.toLowerCase(),[_constants.Header.SdkVersion]:this.packageInfo.version},d=_constants.NUMBER_OF_RETRIES+1;try{let a={message:""};for(let e=0;e<d;e++){const d=await this.sendRequest({url:b,requestType:_types.RequestType.Configuration,retryCount:e,headers:c});if(d.ok){const a=await d.json();return(0,_tsRes.Ok)(a)}if(e===_constants.NUMBER_OF_RETRIES&&d.text){const b=await d.text();a=JSON.parse(b)}}return(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.MaximumRetriesReached,a.message))}catch(a){return(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.ClientConfiguration,a))}}async getRemoteData(a){const b=_urlProvider.UrlProvider.getRemoteDataUrl(a);try{const a=await this.sendRequest({url:b,requestType:_types.RequestType.RemoteData,retryCount:0});if(!a.ok){if(a.text){var c;const b=await a.text(),d=null===(c=JSON.parse(b))||void 0===c?void 0:c.message;return(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.RemoteData,d))}return(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.RemoteData,"Unknown Reason - no `text()` was found for a response"))}const d=await a.json();return(0,_tsRes.Ok)(d)}catch(a){return(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.RemoteData,a))}}async getVisitorData(a){let{visitorCode:b,filters:c,isMappingIdentifier:d}=a;const e=_urlProvider.UrlProvider.getVisitorDataUrl({visitorCode:b,filters:c,isMappingIdentifier:d});try{const a=await this.sendRequest({url:e,requestType:_types.RequestType.RemoteData,retryCount:0});if(!a.ok){if(a.text){var f;const b=await a.text(),c=null===(f=JSON.parse(b))||void 0===f?void 0:f.message;return(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.RemoteData,c))}return(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.RemoteData,"Unknown Reason - no 'text()' was found for a response"))}const b=await a.json();return(0,_tsRes.Ok)(b)}catch(a){return(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.RemoteData,a))}}async trackExperiment(a){let{visitorCode:b,dataUrl:c,variationDataUrl:d,userAgent:e,isUnallocated:f}=a;const g=_urlProvider.UrlProvider.getTrackingUrl(b),h=c?"":_constants.UrlEventType.Activity+_constants.UrlParameter.Nonce+_utilities.Utilities.getNonce(),i=f?h:d,j=i?c+"\n"+i:c,k=e?{[_constants.Header.UserAgent]:e}:void 0;try{const a=await this.track({url:g,headers:k,requestType:_types.RequestType.Tracking,body:j});return(0,_tsRes.Ok)(a)}catch(_){return(0,_tsRes.Err)()}}async trackData(a){let{visitorCode:b,body:c,userAgent:d,isMappingIdentifier:e}=a;const f=_urlProvider.UrlProvider.getTrackingUrl(b,e),g=c||_constants.UrlEventType.Activity+_constants.UrlParameter.Nonce+_utilities.Utilities.getNonce(),h=d?{[_constants.Header.UserAgent]:d}:void 0;try{const a=await this.track({url:f,requestType:_types.RequestType.Tracking,headers:h,body:g});return(0,_tsRes.Ok)(a)}catch(_){return(0,_tsRes.Err)()}}async track(a){const b=_constants.NUMBER_OF_RETRIES+1;for(let c=0;c<b;c++){const b=await this.sendRequest(_objectSpread(_objectSpread({},a),{},{retryCount:c}));if(b.ok)return!0;await new Promise(a=>setTimeout(a,this.trackRetryDelay))}return!1}async sendRequest(a){let{requestType:b,url:c,retryCount:d,headers:e,body:f}=a;const g=new AbortController,h=setTimeout(()=>g.abort(),this.timeout);let i;switch(b){case _types.RequestType.RemoteData:case _types.RequestType.Configuration:i={headers:e,signal:g.signal,method:_types.HttpMethod.Get};break;case _types.RequestType.Tracking:if(!f)throw new Error("Internal Error: Tracking request should always contain body");i={method:_types.HttpMethod.Post,headers:e,signal:g.signal,body:f}}const j=_objectSpread(_objectSpread({},i),{},{headers:e,signal:g.signal}),k=await this.externalRequester.sendRequest({url:c,retryCount:d,requestType:b,parameters:j});return clearTimeout(h),k}}exports.Requester=Requester;
2
2
  //# sourceMappingURL=requester.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"requester.js","names":["Requester","constructor","a","siteCode","environment","packageInfo","domain","externalRequester","requestTimeout","trackRetryDelay","_defineProperty","timeout","UrlProvider","initialize","getClientConfiguration","timeStamp","requestUrl","getClientConfigurationUrl","headers","Header","SdkType","type","toLowerCase","SdkVersion","version","requests","NUMBER_OF_RETRIES","i","response","sendRequest","url","requestType","RequestType","Configuration","retryCount","ok","data","json","Ok","Err","KameleoonError","KameleoonException","MaximumRetriesReached","_","ClientConfiguration","getRemoteData","key","getRemoteDataUrl","remoteDataError","RemoteData","getVisitorData","visitorCode","filters","isMappingIdentifier","getVisitorDataUrl","trackExperiment","dataUrl","variationDataUrl","userAgent","isUnallocated","getTrackingUrl","unallocatedAddition","UrlEventType","Activity","UrlParameter","Nonce","Utilities","getNonce","bodyAddition","extendedBody","UserAgent","track","Tracking","body","trackData","requestBody","parameters","_objectSpread","Promise","resolve","setTimeout","controller","AbortController","timeoutId","abort","variableParameters","signal","method","HttpMethod","Get","Error","Post","clearTimeout","exports"],"sources":["../../src/requester/requester.ts"],"sourcesContent":["import { Err, Ok, Result } from 'ts-res';\nimport { ExternalPackageInfoType } from 'src/types';\nimport { KameleoonError, KameleoonException } from 'src/kameleoonError';\nimport { ConfigurationDataType, JSONType } from 'src/clientConfiguration';\nimport { Utilities } from 'src/utilities';\nimport {\n UrlParameter,\n Header,\n UrlEventType,\n NUMBER_OF_RETRIES,\n} from './constants';\nimport {\n RequesterParamsType,\n TrackDataParamsType,\n GetVisitorDataResultType,\n TrackExperimentParamsType,\n HeadersType,\n GetVisitorDataParamsType,\n IExternalRequester,\n RequestType,\n HttpMethod,\n InternalSendRequestParametersType,\n KameleoonResponseType,\n RequestParametersType,\n} from './types';\nimport { UrlProvider } from './urlProvider';\n\nexport interface IRequester {\n getClientConfiguration: () => Promise<\n Result<ConfigurationDataType, KameleoonError>\n >;\n getRemoteData: (key: string) => Promise<Result<JSONType, KameleoonError>>;\n trackData: ({\n visitorCode,\n body,\n userAgent,\n }: TrackDataParamsType) => Promise<Result<boolean, void>>;\n trackExperiment: ({\n visitorCode,\n dataUrl,\n variationDataUrl,\n isUnallocated,\n isTargetedRule,\n userAgent,\n }: TrackExperimentParamsType) => Promise<Result<boolean, void>>;\n}\n\nexport class Requester implements IRequester {\n private externalRequester: IExternalRequester;\n private packageInfo: ExternalPackageInfoType;\n private trackRetryDelay: number;\n private timeout: number;\n\n constructor({\n siteCode,\n environment,\n packageInfo,\n domain,\n externalRequester,\n requestTimeout,\n trackRetryDelay,\n }: RequesterParamsType) {\n this.externalRequester = externalRequester;\n this.trackRetryDelay = trackRetryDelay;\n this.packageInfo = packageInfo;\n this.timeout = requestTimeout;\n\n UrlProvider.initialize({ siteCode, domain, packageInfo, environment });\n }\n\n public async getClientConfiguration(\n timeStamp?: number,\n ): Promise<Result<ConfigurationDataType, KameleoonError>> {\n const requestUrl = UrlProvider.getClientConfigurationUrl(timeStamp);\n\n const headers: HeadersType = {\n [Header.SdkType]: this.packageInfo.type.toLowerCase(),\n [Header.SdkVersion]: this.packageInfo.version,\n };\n\n // --- Note ---\n // Initial request + NUMBER_OF_RETRIES\n const requests = NUMBER_OF_RETRIES + 1;\n\n try {\n for (let i = 0; i < requests; i++) {\n const response = await this.sendRequest({\n url: requestUrl,\n requestType: RequestType.Configuration,\n retryCount: i,\n headers,\n });\n\n if (response.ok) {\n const data = await response.json();\n\n return Ok(data as ConfigurationDataType);\n }\n }\n\n return Err(new KameleoonError(KameleoonException.MaximumRetriesReached));\n } catch (_) {\n return Err(new KameleoonError(KameleoonException.ClientConfiguration));\n }\n }\n\n public async getRemoteData(\n key: string,\n ): Promise<Result<JSONType, KameleoonError>> {\n const requestUrl = UrlProvider.getRemoteDataUrl(key);\n const remoteDataError = new KameleoonError(KameleoonException.RemoteData);\n\n try {\n const response = await this.sendRequest({\n url: requestUrl,\n requestType: RequestType.RemoteData,\n retryCount: 0,\n });\n\n if (!response.ok) {\n return Err(remoteDataError);\n }\n\n const data = await response.json();\n\n return Ok(data);\n } catch (_) {\n return Err(remoteDataError);\n }\n }\n\n public async getVisitorData({\n visitorCode,\n filters,\n isMappingIdentifier,\n }: GetVisitorDataParamsType): Promise<\n Result<GetVisitorDataResultType, KameleoonError>\n > {\n const requestUrl = UrlProvider.getVisitorDataUrl({\n visitorCode,\n filters,\n isMappingIdentifier,\n });\n const remoteDataError = new KameleoonError(KameleoonException.RemoteData);\n\n try {\n const response = await this.sendRequest({\n url: requestUrl,\n requestType: RequestType.RemoteData,\n retryCount: 0,\n });\n\n if (!response.ok) {\n return Err(remoteDataError);\n }\n\n const data = await response.json();\n\n return Ok(data as GetVisitorDataResultType);\n } catch (_) {\n return Err(remoteDataError);\n }\n }\n\n public async trackExperiment({\n visitorCode,\n dataUrl,\n variationDataUrl,\n userAgent,\n isUnallocated,\n }: TrackExperimentParamsType): Promise<Result<boolean, void>> {\n const url = UrlProvider.getTrackingUrl(visitorCode);\n\n const unallocatedAddition = !dataUrl\n ? UrlEventType.Activity + UrlParameter.Nonce + Utilities.getNonce()\n : '';\n\n const bodyAddition = isUnallocated ? unallocatedAddition : variationDataUrl;\n\n const extendedBody = bodyAddition ? dataUrl + '\\n' + bodyAddition : dataUrl;\n\n const headers: HeadersType | undefined = userAgent\n ? {\n [Header.UserAgent]: userAgent,\n }\n : undefined;\n\n try {\n const response = await this.track({\n url,\n headers,\n requestType: RequestType.Tracking,\n body: extendedBody,\n });\n\n return Ok(response);\n } catch (_) {\n return Err();\n }\n }\n\n public async trackData({\n visitorCode,\n body,\n userAgent,\n isMappingIdentifier,\n }: TrackDataParamsType): Promise<Result<boolean, void>> {\n const url = UrlProvider.getTrackingUrl(visitorCode, isMappingIdentifier);\n\n const requestBody =\n body || UrlEventType.Activity + UrlParameter.Nonce + Utilities.getNonce();\n\n const headers = userAgent\n ? {\n [Header.UserAgent]: userAgent,\n }\n : undefined;\n\n try {\n const response = await this.track({\n url,\n requestType: RequestType.Tracking,\n headers,\n body: requestBody,\n });\n\n return Ok(response);\n } catch (_) {\n return Err();\n }\n }\n\n private async track(\n parameters: Omit<InternalSendRequestParametersType, 'retryCount'>,\n ): Promise<boolean> {\n // --- Note ---\n // Initial request + NUMBER_OF_RETRIES\n const requests = NUMBER_OF_RETRIES + 1;\n\n for (let i = 0; i < requests; i++) {\n const response = await this.sendRequest({\n ...parameters,\n retryCount: i,\n });\n\n if (response.ok) {\n return true;\n }\n\n await new Promise((resolve) => setTimeout(resolve, this.trackRetryDelay));\n }\n\n return false;\n }\n\n private async sendRequest({\n requestType,\n url,\n retryCount,\n headers,\n body,\n }: InternalSendRequestParametersType): Promise<KameleoonResponseType> {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.timeout);\n\n let variableParameters: RequestParametersType[RequestType];\n\n switch (requestType) {\n case RequestType.RemoteData:\n case RequestType.Configuration:\n variableParameters = {\n headers,\n signal: controller.signal,\n method: HttpMethod.Get,\n };\n break;\n case RequestType.Tracking:\n if (!body) {\n throw new Error(\n 'Internal Error: Tracking request should always contain body',\n );\n }\n\n variableParameters = {\n method: HttpMethod.Post,\n headers,\n signal: controller.signal,\n body,\n };\n break;\n }\n\n const parameters = {\n ...variableParameters,\n headers,\n signal: controller.signal,\n };\n\n const response = await this.externalRequester.sendRequest({\n url,\n retryCount: retryCount as 0 | 1 | 2,\n requestType,\n parameters,\n });\n\n clearTimeout(timeoutId);\n\n return response;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"requester.js","names":["Requester","constructor","a","siteCode","environment","packageInfo","domain","externalRequester","requestTimeout","trackRetryDelay","_defineProperty","timeout","UrlProvider","initialize","getClientConfiguration","timeStamp","requestUrl","getClientConfigurationUrl","headers","Header","SdkType","type","toLowerCase","SdkVersion","version","requests","NUMBER_OF_RETRIES","responseInfo","message","i","response","sendRequest","url","requestType","RequestType","Configuration","retryCount","ok","data","json","Ok","text","JSON","parse","Err","KameleoonError","KameleoonException","MaximumRetriesReached","err","ClientConfiguration","getRemoteData","key","getRemoteDataUrl","RemoteData","c","getVisitorData","visitorCode","filters","isMappingIdentifier","getVisitorDataUrl","f","trackExperiment","dataUrl","variationDataUrl","userAgent","isUnallocated","getTrackingUrl","unallocatedAddition","UrlEventType","Activity","UrlParameter","Nonce","Utilities","getNonce","bodyAddition","extendedBody","UserAgent","track","Tracking","body","_","trackData","requestBody","parameters","_objectSpread","Promise","resolve","setTimeout","controller","AbortController","timeoutId","abort","variableParameters","signal","method","HttpMethod","Get","Error","Post","clearTimeout","exports"],"sources":["../../src/requester/requester.ts"],"sourcesContent":["import { Err, Ok, Result } from 'ts-res';\nimport { ExternalPackageInfoType } from 'src/types';\nimport { KameleoonError, KameleoonException } from 'src/kameleoonError';\nimport { ConfigurationDataType, JSONType } from 'src/clientConfiguration';\nimport { Utilities } from 'src/utilities';\nimport {\n UrlParameter,\n Header,\n UrlEventType,\n NUMBER_OF_RETRIES,\n} from './constants';\nimport {\n RequesterParamsType,\n TrackDataParamsType,\n GetVisitorDataResultType,\n TrackExperimentParamsType,\n HeadersType,\n GetVisitorDataParamsType,\n IExternalRequester,\n RequestType,\n HttpMethod,\n InternalSendRequestParametersType,\n KameleoonResponseType,\n RequestParametersType,\n} from './types';\nimport { UrlProvider } from './urlProvider';\n\nexport interface IRequester {\n getClientConfiguration: () => Promise<\n Result<ConfigurationDataType, KameleoonError>\n >;\n getRemoteData: (key: string) => Promise<Result<JSONType, KameleoonError>>;\n trackData: ({\n visitorCode,\n body,\n userAgent,\n }: TrackDataParamsType) => Promise<Result<boolean, void>>;\n trackExperiment: ({\n visitorCode,\n dataUrl,\n variationDataUrl,\n isUnallocated,\n isTargetedRule,\n userAgent,\n }: TrackExperimentParamsType) => Promise<Result<boolean, void>>;\n}\n\nexport class Requester implements IRequester {\n private externalRequester: IExternalRequester;\n private packageInfo: ExternalPackageInfoType;\n private trackRetryDelay: number;\n private timeout: number;\n\n constructor({\n siteCode,\n environment,\n packageInfo,\n domain,\n externalRequester,\n requestTimeout,\n trackRetryDelay,\n }: RequesterParamsType) {\n this.externalRequester = externalRequester;\n this.trackRetryDelay = trackRetryDelay;\n this.packageInfo = packageInfo;\n this.timeout = requestTimeout;\n\n UrlProvider.initialize({ siteCode, domain, packageInfo, environment });\n }\n\n public async getClientConfiguration(\n timeStamp?: number,\n ): Promise<Result<ConfigurationDataType, KameleoonError>> {\n const requestUrl = UrlProvider.getClientConfigurationUrl(timeStamp);\n\n const headers: HeadersType = {\n [Header.SdkType]: this.packageInfo.type.toLowerCase(),\n [Header.SdkVersion]: this.packageInfo.version,\n };\n\n // --- Note ---\n // Initial request + NUMBER_OF_RETRIES\n const requests = NUMBER_OF_RETRIES + 1;\n\n try {\n let responseInfo = { message: '' };\n\n for (let i = 0; i < requests; i++) {\n const response = await this.sendRequest({\n url: requestUrl,\n requestType: RequestType.Configuration,\n retryCount: i,\n headers,\n });\n\n if (response.ok) {\n const data = await response.json();\n\n return Ok(data as ConfigurationDataType);\n }\n\n // --- Note ---\n // Last retry\n if (i === NUMBER_OF_RETRIES) {\n if (response.text) {\n const text = await response.text();\n responseInfo = JSON.parse(text);\n }\n }\n }\n\n return Err(\n new KameleoonError(\n KameleoonException.MaximumRetriesReached,\n responseInfo.message,\n ),\n );\n } catch (err) {\n return Err(\n new KameleoonError(KameleoonException.ClientConfiguration, err),\n );\n }\n }\n\n public async getRemoteData(\n key: string,\n ): Promise<Result<JSONType, KameleoonError>> {\n const requestUrl = UrlProvider.getRemoteDataUrl(key);\n\n try {\n const response = await this.sendRequest({\n url: requestUrl,\n requestType: RequestType.RemoteData,\n retryCount: 0,\n });\n\n if (!response.ok) {\n if (response.text) {\n const text = await response.text();\n const message = JSON.parse(text)?.message;\n\n return Err(\n new KameleoonError(KameleoonException.RemoteData, message),\n );\n }\n\n return Err(\n new KameleoonError(\n KameleoonException.RemoteData,\n 'Unknown Reason - no `text()` was found for a response',\n ),\n );\n }\n\n const data = await response.json();\n\n return Ok(data);\n } catch (err) {\n return Err(new KameleoonError(KameleoonException.RemoteData, err));\n }\n }\n\n public async getVisitorData({\n visitorCode,\n filters,\n isMappingIdentifier,\n }: GetVisitorDataParamsType): Promise<\n Result<GetVisitorDataResultType, KameleoonError>\n > {\n const requestUrl = UrlProvider.getVisitorDataUrl({\n visitorCode,\n filters,\n isMappingIdentifier,\n });\n\n try {\n const response = await this.sendRequest({\n url: requestUrl,\n requestType: RequestType.RemoteData,\n retryCount: 0,\n });\n\n if (!response.ok) {\n if (response.text) {\n const text = await response.text();\n const message = JSON.parse(text)?.message;\n\n return Err(\n new KameleoonError(KameleoonException.RemoteData, message),\n );\n }\n\n return Err(\n new KameleoonError(\n KameleoonException.RemoteData,\n \"Unknown Reason - no 'text()' was found for a response\",\n ),\n );\n }\n\n const data = await response.json();\n\n return Ok(data as GetVisitorDataResultType);\n } catch (err) {\n return Err(new KameleoonError(KameleoonException.RemoteData, err));\n }\n }\n\n public async trackExperiment({\n visitorCode,\n dataUrl,\n variationDataUrl,\n userAgent,\n isUnallocated,\n }: TrackExperimentParamsType): Promise<Result<boolean, void>> {\n const url = UrlProvider.getTrackingUrl(visitorCode);\n\n const unallocatedAddition = !dataUrl\n ? UrlEventType.Activity + UrlParameter.Nonce + Utilities.getNonce()\n : '';\n\n const bodyAddition = isUnallocated ? unallocatedAddition : variationDataUrl;\n\n const extendedBody = bodyAddition ? dataUrl + '\\n' + bodyAddition : dataUrl;\n\n const headers: HeadersType | undefined = userAgent\n ? {\n [Header.UserAgent]: userAgent,\n }\n : undefined;\n\n try {\n const response = await this.track({\n url,\n headers,\n requestType: RequestType.Tracking,\n body: extendedBody,\n });\n\n return Ok(response);\n } catch (_) {\n return Err();\n }\n }\n\n public async trackData({\n visitorCode,\n body,\n userAgent,\n isMappingIdentifier,\n }: TrackDataParamsType): Promise<Result<boolean, void>> {\n const url = UrlProvider.getTrackingUrl(visitorCode, isMappingIdentifier);\n\n const requestBody =\n body || UrlEventType.Activity + UrlParameter.Nonce + Utilities.getNonce();\n\n const headers = userAgent\n ? {\n [Header.UserAgent]: userAgent,\n }\n : undefined;\n\n try {\n const response = await this.track({\n url,\n requestType: RequestType.Tracking,\n headers,\n body: requestBody,\n });\n\n return Ok(response);\n } catch (_) {\n return Err();\n }\n }\n\n private async track(\n parameters: Omit<InternalSendRequestParametersType, 'retryCount'>,\n ): Promise<boolean> {\n // --- Note ---\n // Initial request + NUMBER_OF_RETRIES\n const requests = NUMBER_OF_RETRIES + 1;\n\n for (let i = 0; i < requests; i++) {\n const response = await this.sendRequest({\n ...parameters,\n retryCount: i,\n });\n\n if (response.ok) {\n return true;\n }\n\n await new Promise((resolve) => setTimeout(resolve, this.trackRetryDelay));\n }\n\n return false;\n }\n\n private async sendRequest({\n requestType,\n url,\n retryCount,\n headers,\n body,\n }: InternalSendRequestParametersType): Promise<KameleoonResponseType> {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.timeout);\n\n let variableParameters: RequestParametersType[RequestType];\n\n switch (requestType) {\n case RequestType.RemoteData:\n case RequestType.Configuration:\n variableParameters = {\n headers,\n signal: controller.signal,\n method: HttpMethod.Get,\n };\n break;\n case RequestType.Tracking:\n if (!body) {\n throw new Error(\n 'Internal Error: Tracking request should always contain body',\n );\n }\n\n variableParameters = {\n method: HttpMethod.Post,\n headers,\n signal: controller.signal,\n body,\n };\n break;\n }\n\n const parameters = {\n ...variableParameters,\n headers,\n signal: controller.signal,\n };\n\n const response = await this.externalRequester.sendRequest({\n url,\n retryCount: retryCount as 0 | 1 | 2,\n requestType,\n parameters,\n });\n\n clearTimeout(timeoutId);\n\n return response;\n }\n}\n"],"mappings":"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"}
@@ -242,11 +242,13 @@ export type SendRequestParametersType<T extends RequestType> = {
242
242
  * @type `KameleoonResponse` - a type of response that is assignable to most libraries `Response` objects
243
243
  * @property {number} status - a status of the response
244
244
  * @property {() => Promise<JSONType>} json - a method to parse the response to JSON
245
+ * @property {() => Promise<string>| undefined} text - a method to parse the response to text
245
246
  * @property {boolean} ok - a boolean value that indicates if the response is ok
246
247
  * */
247
248
  export type KameleoonResponseType = {
248
249
  status: number;
249
250
  json: () => Promise<JSONType>;
251
+ text?: () => Promise<string>;
250
252
  ok: boolean;
251
253
  };
252
254
  export type InternalSendRequestParametersType = {
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","names":["UrlType","exports","DataApi","Events","ClientConfiguration","HttpMethod","Get","Post","DataApiQuery","VisitEvent","VisitData","DataMap","EVENT_TYPE_KEYS","PARAMETER_KEYS","TRACKING_KEYS","QUERY_KEYS","RequestType","Configuration","Tracking","RemoteData"],"sources":["../../src/requester/types.ts"],"sourcesContent":["import { JSONType } from 'src/clientConfiguration';\nimport { Environment, ExternalPackageInfoType } from 'src/types';\nimport {\n BrowserIndexMap,\n BrowserType,\n OperatingSystemType,\n} from 'src/kameleoonData';\nimport {\n DeviceType,\n KCSType,\n OperatingSystemIndexMap,\n} from 'src/kameleoonData/types';\nimport { Header } from './constants';\nimport { VisitorDataFiltersType } from 'src/utilities';\n\nexport enum UrlType {\n DataApi = 'dataApi',\n Events = 'events',\n ClientConfiguration = 'clientConfiguration',\n}\n\nexport type DomainsType = {\n [key in UrlType]: DomainType;\n};\n\nexport type DomainType = {\n subdomain: string;\n topLevelDomain: string;\n secondLevelDomain: string;\n};\n\nexport type UrlProviderInitializeParamsType = {\n siteCode: string;\n domain: string | null;\n packageInfo: ExternalPackageInfoType;\n environment: Environment;\n};\n\nexport type RequesterParamsType = {\n siteCode: string;\n domain: string | null;\n environment: Environment;\n packageInfo: ExternalPackageInfoType;\n externalRequester: IExternalRequester;\n trackRetryDelay: number;\n requestTimeout: number;\n};\n\nexport type TrackExperimentParamsType = {\n dataUrl: string;\n variationDataUrl: string;\n visitorCode: string;\n isUnallocated: boolean;\n userAgent?: string;\n isTargetedRule?: boolean;\n};\n\nexport type TrackDataParamsType = {\n visitorCode: string;\n body: string;\n userAgent?: string;\n isMappingIdentifier?: boolean;\n};\n\nexport type GetVisitorDataParamsType = {\n visitorCode: string;\n filters: VisitorDataFiltersType;\n isMappingIdentifier?: boolean;\n};\n\nexport type GetVisitorDataUrlParamsType = {\n visitorCode: string;\n filters: VisitorDataFiltersType;\n isMappingIdentifier?: boolean;\n};\n\ntype EventDataType = {\n sdk?: {\n name: string;\n version: string;\n };\n itp: boolean;\n time: number;\n};\n\ntype CustomDataEventType = {\n data: {\n index: number;\n valuesCountMap: {\n [value: string]: number;\n };\n overwrite: boolean;\n mappingIdentifier: boolean;\n };\n} & EventDataType;\n\ntype ExperimentEventType = {\n data: {\n id: number;\n variationId: number;\n };\n} & EventDataType;\n\ntype ConversionEventType = {\n data: {\n goalId: number;\n revenue: number;\n negative: boolean;\n };\n} & EventDataType;\n\ntype BrowserIndexType = (typeof BrowserIndexMap)[BrowserType];\ntype OperatingSystemIndexType =\n (typeof OperatingSystemIndexMap)[OperatingSystemType];\n\nexport type PageEventType = {\n data: {\n href: string;\n canonicalHref: string | null;\n title: string;\n keyPagesIndices: number[] | [null];\n referrerHref: string | null;\n referrersIndices: number[] | [null];\n };\n} & EventDataType;\n\nexport type GeolocationEventType = {\n data: {\n country: string;\n region: string | null;\n city: string | null;\n postalCode: string | null;\n latitude: number | null;\n longitude: number | null;\n };\n} & EventDataType;\n\nexport type StaticDataEventType = {\n data: {\n visitNumber: number;\n timeSincePreviousVisit: number;\n firstReferrerHref: string | null;\n browser: BrowserType | null;\n browserIndex: BrowserIndexType | null;\n browserVersion: number | null;\n os: OperatingSystemType | null;\n osIndex: OperatingSystemIndexType | null;\n windowWidth: number | null;\n windowHeight: number | null;\n screenWidth: number | null;\n screenHeight: number | null;\n timeZoneId: string | null;\n localeLanguageTag: string | null;\n deviceType: DeviceType | null;\n mappingIdentifier: string | null;\n };\n} & EventDataType;\n\nexport type VisitType = {\n siteCode: string;\n visitorCode: string;\n timeStarted: number;\n customDataEvents?: CustomDataEventType[];\n experimentEvents?: ExperimentEventType[];\n conversionEvents?: ConversionEventType[];\n geolocationEvents?: GeolocationEventType[];\n staticDataEvent?: StaticDataEventType;\n pageEvents?: PageEventType[];\n};\n\nexport type GetVisitorDataResultType = {\n previousVisits?: VisitType[];\n currentVisit?: VisitType;\n kcs?: KCSType;\n};\n\nexport enum HttpMethod {\n Get = 'GET',\n Post = 'POST',\n}\n\nexport enum DataApiQuery {\n VisitEvent,\n VisitData,\n DataMap,\n}\n\nconst EVENT_TYPE_KEYS = [\n 'customData',\n 'staticData',\n 'page',\n 'conversion',\n 'geolocation',\n 'activity',\n 'experiment',\n] as const;\nconst PARAMETER_KEYS = [\n 'valuesCountMap',\n 'mappingValue',\n 'id',\n 'nonce',\n 'country',\n 'environment',\n 'city',\n 'region',\n 'latitude',\n 'geolocation',\n 'longitude',\n 'mappingIdentifier',\n 'postalCode',\n 'sdkName',\n 'sdkVersion',\n 'kcs',\n 'browserIndex',\n 'browserVersion',\n 'siteCode',\n 'visitorCode',\n 'currentVisit',\n 'maxNumberPreviousVisits',\n 'customData',\n 'negative',\n 'revenue',\n 'title',\n 'os',\n 'conversion',\n 'staticData',\n 'osIndex',\n 'browser',\n 'referrersIndices',\n 'overwrite',\n 'index',\n 'href',\n 'experiment',\n 'page',\n 'variationId',\n 'deviceType',\n 'goalId',\n 'ts',\n 'key',\n] as const;\nconst TRACKING_KEYS = ['visit', 'map'] as const;\nconst QUERY_KEYS = ['sse', 'visitor', 'map', 'events'] as const;\n\nexport type TrackingType = Record<\n Capitalize<(typeof TRACKING_KEYS)[number]>,\n string\n>;\nexport type QueryType = Record<Capitalize<(typeof QUERY_KEYS)[number]>, string>;\nexport type ParameterType = Record<\n Capitalize<(typeof PARAMETER_KEYS)[number]>,\n string\n>;\nexport type EventType = Record<\n Capitalize<(typeof EVENT_TYPE_KEYS)[number]>,\n string\n>;\n\nexport type StrictTrackingRecord<T> = {\n [K in keyof T]: `${Uncapitalize<K & string>}/`;\n};\nexport type StrictQueryRecord<T> = {\n [K in keyof T]: `${Uncapitalize<K & string>}?siteCode=`;\n};\nexport type StrictEventTypeRecord<T> = {\n [K in keyof T]: `eventType=${Uncapitalize<K & string>}`;\n};\nexport type StrictParameterRecord<T> = {\n [K in keyof T]: `&${Uncapitalize<K & string>}=`;\n};\nexport type StrictFirstParameterRecord<T> = {\n [K in keyof T]: `?${Uncapitalize<K & string>}=`;\n};\n\n/**\n * @type `HeadersType` - a type of headers available in the request\n * */\nexport type HeadersType = Partial<Record<Header, string>>;\n\nexport type TrackParametersType = {\n url: string;\n headers?: HeadersType;\n body: string;\n};\n\n/**\n * @type `RequestParametersType` - a type of parameters available in the request for each request type\n * */\nexport type RequestParametersType = {\n [RequestType.Configuration]: {\n headers?: HeadersType;\n signal: AbortSignal | null;\n method: HttpMethod.Get;\n };\n [RequestType.Tracking]: {\n headers?: HeadersType;\n body: string;\n signal: AbortSignal | null;\n method: HttpMethod.Post;\n };\n [RequestType.RemoteData]: {\n signal: AbortSignal | null;\n method: HttpMethod.Get;\n };\n};\n\n/**\n * @enum `RequestType` - an enum of available request types\n * */\nexport enum RequestType {\n Configuration = 'configuration',\n Tracking = 'tracking',\n RemoteData = 'remoteData',\n}\n\n/**\n * @type `RetryCountType` - a type of retry count available for each request type\n * @param {0 | 1 | 2} `RequestType.Configuration` - a count of retries for configuration request (`0` is the initial request)\n * @param {0 | 1 | 2} `RequestType.Tracking` - a count of retries for tracking request (`0` is the initial request)\n * @param {0} `RequestType.RemoteData` - a count of retries for remote data request (`0` is the initial request)\n * */\nexport type RetryCountType = {\n [RequestType.Configuration]: 0 | 1 | 2;\n [RequestType.Tracking]: 0 | 1 | 2;\n [RequestType.RemoteData]: 0;\n};\n\n/**\n * @type `SendRequestParametersType` - a type of parameters available to send a request\n * @param {T extends RequestType} T - a type of request constrained by `RequestType`\n * @param {string} url - url address\n * @param {RequestParametersType[T]} parameters - parameters of the request depending on the request type\n * @param {RetryCountType | undefined} retryCount - a count of retries, the possible count of retries depends on `RequestType`\n * */\nexport type SendRequestParametersType<T extends RequestType> = {\n requestType: T;\n url: string;\n retryCount?: RetryCountType[T];\n parameters: RequestParametersType[T];\n};\n\n/**\n * @type `KameleoonResponse` - a type of response that is assignable to most libraries `Response` objects\n * @property {number} status - a status of the response\n * @property {() => Promise<JSONType>} json - a method to parse the response to JSON\n * @property {boolean} ok - a boolean value that indicates if the response is ok\n * */\nexport type KameleoonResponseType = {\n status: number;\n json: () => Promise<JSONType>;\n ok: boolean;\n};\n\nexport type InternalSendRequestParametersType = {\n requestType: RequestType;\n url: string;\n retryCount: number;\n headers?: HeadersType;\n body?: string;\n};\n\n/**\n * @interface `IExternalRequester` - an interface of External Requester which will be used to perform requests.\n * */\nexport interface IExternalRequester {\n /**\n * @method sendRequest - send a request\n * @param {SendRequestParametersType<T>} parameters - parameters of the request depending on the request type\n * @returns {Promise<KameleoonResponseType>} - a promise that resolves to the response\n * */\n sendRequest: <T extends RequestType>({\n requestType,\n url,\n parameters,\n }: SendRequestParametersType<T>) => Promise<KameleoonResponseType>;\n}\n"],"mappings":"0JAeY,CAAAA,OAAO,CAAAC,OAAA,CAAAD,OAAA,UAAPA,CAAO,QAAP,CAAAA,CAAO,CAAAE,OAAA,WAAPF,CAAO,CAAAG,MAAA,UAAPH,CAAO,CAAAI,mBAAA,uBAAPJ,CAAO,MAiKPK,UAAU,CAAAJ,OAAA,CAAAI,UAAA,UAAVA,CAAU,QAAV,CAAAA,CAAU,CAAAC,GAAA,OAAVD,CAAU,CAAAE,IAAA,QAAVF,CAAU,MAKVG,YAAY,CAAAP,OAAA,CAAAO,YAAA,UAAZA,CAAY,QAAZ,CAAAA,CAAY,CAAZA,CAAY,CAAAC,UAAA,iBAAZD,CAAY,CAAZA,CAAY,CAAAE,SAAA,gBAAZF,CAAY,CAAZA,CAAY,CAAAG,OAAA,cAAZH,CAAY,WAMlB,CAAAI,eAAe,CAAG,CACtB,YAAY,CACZ,YAAY,CACZ,MAAM,CACN,YAAY,CACZ,aAAa,CACb,UAAU,CACV,YAAY,CACJ,CACJC,cAAc,CAAG,CACrB,gBAAgB,CAChB,cAAc,CACd,IAAI,CACJ,OAAO,CACP,SAAS,CACT,aAAa,CACb,MAAM,CACN,QAAQ,CACR,UAAU,CACV,aAAa,CACb,WAAW,CACX,mBAAmB,CACnB,YAAY,CACZ,SAAS,CACT,YAAY,CACZ,KAAK,CACL,cAAc,CACd,gBAAgB,CAChB,UAAU,CACV,aAAa,CACb,cAAc,CACd,yBAAyB,CACzB,YAAY,CACZ,UAAU,CACV,SAAS,CACT,OAAO,CACP,IAAI,CACJ,YAAY,CACZ,YAAY,CACZ,SAAS,CACT,SAAS,CACT,kBAAkB,CAClB,WAAW,CACX,OAAO,CACP,MAAM,CACN,YAAY,CACZ,MAAM,CACN,aAAa,CACb,YAAY,CACZ,QAAQ,CACR,IAAI,CACJ,KAAK,CACG,CACJC,aAAa,CAAG,CAAC,OAAO,CAAE,KAAK,CAAU,CACzCC,UAAU,CAAG,CAAC,KAAK,CAAE,SAAS,CAAE,KAAK,CAAE,QAAQ,CAAU,IAmEnD,CAAAC,WAAW,CAAAf,OAAA,CAAAe,WAAA,UAAXA,CAAW,QAAX,CAAAA,CAAW,CAAAC,aAAA,iBAAXD,CAAW,CAAAE,QAAA,YAAXF,CAAW,CAAAG,UAAA,cAAXH,CAAW"}
1
+ {"version":3,"file":"types.js","names":["UrlType","exports","DataApi","Events","ClientConfiguration","HttpMethod","Get","Post","DataApiQuery","VisitEvent","VisitData","DataMap","EVENT_TYPE_KEYS","PARAMETER_KEYS","TRACKING_KEYS","QUERY_KEYS","RequestType","Configuration","Tracking","RemoteData"],"sources":["../../src/requester/types.ts"],"sourcesContent":["import { JSONType } from 'src/clientConfiguration';\nimport { Environment, ExternalPackageInfoType } from 'src/types';\nimport {\n BrowserIndexMap,\n BrowserType,\n OperatingSystemType,\n} from 'src/kameleoonData';\nimport {\n DeviceType,\n KCSType,\n OperatingSystemIndexMap,\n} from 'src/kameleoonData/types';\nimport { Header } from './constants';\nimport { VisitorDataFiltersType } from 'src/utilities';\n\nexport enum UrlType {\n DataApi = 'dataApi',\n Events = 'events',\n ClientConfiguration = 'clientConfiguration',\n}\n\nexport type DomainsType = {\n [key in UrlType]: DomainType;\n};\n\nexport type DomainType = {\n subdomain: string;\n topLevelDomain: string;\n secondLevelDomain: string;\n};\n\nexport type UrlProviderInitializeParamsType = {\n siteCode: string;\n domain: string | null;\n packageInfo: ExternalPackageInfoType;\n environment: Environment;\n};\n\nexport type RequesterParamsType = {\n siteCode: string;\n domain: string | null;\n environment: Environment;\n packageInfo: ExternalPackageInfoType;\n externalRequester: IExternalRequester;\n trackRetryDelay: number;\n requestTimeout: number;\n};\n\nexport type TrackExperimentParamsType = {\n dataUrl: string;\n variationDataUrl: string;\n visitorCode: string;\n isUnallocated: boolean;\n userAgent?: string;\n isTargetedRule?: boolean;\n};\n\nexport type TrackDataParamsType = {\n visitorCode: string;\n body: string;\n userAgent?: string;\n isMappingIdentifier?: boolean;\n};\n\nexport type GetVisitorDataParamsType = {\n visitorCode: string;\n filters: VisitorDataFiltersType;\n isMappingIdentifier?: boolean;\n};\n\nexport type GetVisitorDataUrlParamsType = {\n visitorCode: string;\n filters: VisitorDataFiltersType;\n isMappingIdentifier?: boolean;\n};\n\ntype EventDataType = {\n sdk?: {\n name: string;\n version: string;\n };\n itp: boolean;\n time: number;\n};\n\ntype CustomDataEventType = {\n data: {\n index: number;\n valuesCountMap: {\n [value: string]: number;\n };\n overwrite: boolean;\n mappingIdentifier: boolean;\n };\n} & EventDataType;\n\ntype ExperimentEventType = {\n data: {\n id: number;\n variationId: number;\n };\n} & EventDataType;\n\ntype ConversionEventType = {\n data: {\n goalId: number;\n revenue: number;\n negative: boolean;\n };\n} & EventDataType;\n\ntype BrowserIndexType = (typeof BrowserIndexMap)[BrowserType];\ntype OperatingSystemIndexType =\n (typeof OperatingSystemIndexMap)[OperatingSystemType];\n\nexport type PageEventType = {\n data: {\n href: string;\n canonicalHref: string | null;\n title: string;\n keyPagesIndices: number[] | [null];\n referrerHref: string | null;\n referrersIndices: number[] | [null];\n };\n} & EventDataType;\n\nexport type GeolocationEventType = {\n data: {\n country: string;\n region: string | null;\n city: string | null;\n postalCode: string | null;\n latitude: number | null;\n longitude: number | null;\n };\n} & EventDataType;\n\nexport type StaticDataEventType = {\n data: {\n visitNumber: number;\n timeSincePreviousVisit: number;\n firstReferrerHref: string | null;\n browser: BrowserType | null;\n browserIndex: BrowserIndexType | null;\n browserVersion: number | null;\n os: OperatingSystemType | null;\n osIndex: OperatingSystemIndexType | null;\n windowWidth: number | null;\n windowHeight: number | null;\n screenWidth: number | null;\n screenHeight: number | null;\n timeZoneId: string | null;\n localeLanguageTag: string | null;\n deviceType: DeviceType | null;\n mappingIdentifier: string | null;\n };\n} & EventDataType;\n\nexport type VisitType = {\n siteCode: string;\n visitorCode: string;\n timeStarted: number;\n customDataEvents?: CustomDataEventType[];\n experimentEvents?: ExperimentEventType[];\n conversionEvents?: ConversionEventType[];\n geolocationEvents?: GeolocationEventType[];\n staticDataEvent?: StaticDataEventType;\n pageEvents?: PageEventType[];\n};\n\nexport type GetVisitorDataResultType = {\n previousVisits?: VisitType[];\n currentVisit?: VisitType;\n kcs?: KCSType;\n};\n\nexport enum HttpMethod {\n Get = 'GET',\n Post = 'POST',\n}\n\nexport enum DataApiQuery {\n VisitEvent,\n VisitData,\n DataMap,\n}\n\nconst EVENT_TYPE_KEYS = [\n 'customData',\n 'staticData',\n 'page',\n 'conversion',\n 'geolocation',\n 'activity',\n 'experiment',\n] as const;\nconst PARAMETER_KEYS = [\n 'valuesCountMap',\n 'mappingValue',\n 'id',\n 'nonce',\n 'country',\n 'environment',\n 'city',\n 'region',\n 'latitude',\n 'geolocation',\n 'longitude',\n 'mappingIdentifier',\n 'postalCode',\n 'sdkName',\n 'sdkVersion',\n 'kcs',\n 'browserIndex',\n 'browserVersion',\n 'siteCode',\n 'visitorCode',\n 'currentVisit',\n 'maxNumberPreviousVisits',\n 'customData',\n 'negative',\n 'revenue',\n 'title',\n 'os',\n 'conversion',\n 'staticData',\n 'osIndex',\n 'browser',\n 'referrersIndices',\n 'overwrite',\n 'index',\n 'href',\n 'experiment',\n 'page',\n 'variationId',\n 'deviceType',\n 'goalId',\n 'ts',\n 'key',\n] as const;\nconst TRACKING_KEYS = ['visit', 'map'] as const;\nconst QUERY_KEYS = ['sse', 'visitor', 'map', 'events'] as const;\n\nexport type TrackingType = Record<\n Capitalize<(typeof TRACKING_KEYS)[number]>,\n string\n>;\nexport type QueryType = Record<Capitalize<(typeof QUERY_KEYS)[number]>, string>;\nexport type ParameterType = Record<\n Capitalize<(typeof PARAMETER_KEYS)[number]>,\n string\n>;\nexport type EventType = Record<\n Capitalize<(typeof EVENT_TYPE_KEYS)[number]>,\n string\n>;\n\nexport type StrictTrackingRecord<T> = {\n [K in keyof T]: `${Uncapitalize<K & string>}/`;\n};\nexport type StrictQueryRecord<T> = {\n [K in keyof T]: `${Uncapitalize<K & string>}?siteCode=`;\n};\nexport type StrictEventTypeRecord<T> = {\n [K in keyof T]: `eventType=${Uncapitalize<K & string>}`;\n};\nexport type StrictParameterRecord<T> = {\n [K in keyof T]: `&${Uncapitalize<K & string>}=`;\n};\nexport type StrictFirstParameterRecord<T> = {\n [K in keyof T]: `?${Uncapitalize<K & string>}=`;\n};\n\n/**\n * @type `HeadersType` - a type of headers available in the request\n * */\nexport type HeadersType = Partial<Record<Header, string>>;\n\nexport type TrackParametersType = {\n url: string;\n headers?: HeadersType;\n body: string;\n};\n\n/**\n * @type `RequestParametersType` - a type of parameters available in the request for each request type\n * */\nexport type RequestParametersType = {\n [RequestType.Configuration]: {\n headers?: HeadersType;\n signal: AbortSignal | null;\n method: HttpMethod.Get;\n };\n [RequestType.Tracking]: {\n headers?: HeadersType;\n body: string;\n signal: AbortSignal | null;\n method: HttpMethod.Post;\n };\n [RequestType.RemoteData]: {\n signal: AbortSignal | null;\n method: HttpMethod.Get;\n };\n};\n\n/**\n * @enum `RequestType` - an enum of available request types\n * */\nexport enum RequestType {\n Configuration = 'configuration',\n Tracking = 'tracking',\n RemoteData = 'remoteData',\n}\n\n/**\n * @type `RetryCountType` - a type of retry count available for each request type\n * @param {0 | 1 | 2} `RequestType.Configuration` - a count of retries for configuration request (`0` is the initial request)\n * @param {0 | 1 | 2} `RequestType.Tracking` - a count of retries for tracking request (`0` is the initial request)\n * @param {0} `RequestType.RemoteData` - a count of retries for remote data request (`0` is the initial request)\n * */\nexport type RetryCountType = {\n [RequestType.Configuration]: 0 | 1 | 2;\n [RequestType.Tracking]: 0 | 1 | 2;\n [RequestType.RemoteData]: 0;\n};\n\n/**\n * @type `SendRequestParametersType` - a type of parameters available to send a request\n * @param {T extends RequestType} T - a type of request constrained by `RequestType`\n * @param {string} url - url address\n * @param {RequestParametersType[T]} parameters - parameters of the request depending on the request type\n * @param {RetryCountType | undefined} retryCount - a count of retries, the possible count of retries depends on `RequestType`\n * */\nexport type SendRequestParametersType<T extends RequestType> = {\n requestType: T;\n url: string;\n retryCount?: RetryCountType[T];\n parameters: RequestParametersType[T];\n};\n\n// TODO:\n// - `text` parameter should become non-optional in core v5\n// - All according `if` checks should be removed from `./requester.ts`\n/**\n * @type `KameleoonResponse` - a type of response that is assignable to most libraries `Response` objects\n * @property {number} status - a status of the response\n * @property {() => Promise<JSONType>} json - a method to parse the response to JSON\n * @property {() => Promise<string>| undefined} text - a method to parse the response to text\n * @property {boolean} ok - a boolean value that indicates if the response is ok\n * */\nexport type KameleoonResponseType = {\n status: number;\n json: () => Promise<JSONType>;\n text?: () => Promise<string>;\n ok: boolean;\n};\n\nexport type InternalSendRequestParametersType = {\n requestType: RequestType;\n url: string;\n retryCount: number;\n headers?: HeadersType;\n body?: string;\n};\n\n/**\n * @interface `IExternalRequester` - an interface of External Requester which will be used to perform requests.\n * */\nexport interface IExternalRequester {\n /**\n * @method sendRequest - send a request\n * @param {SendRequestParametersType<T>} parameters - parameters of the request depending on the request type\n * @returns {Promise<KameleoonResponseType>} - a promise that resolves to the response\n * */\n sendRequest: <T extends RequestType>({\n requestType,\n url,\n parameters,\n }: SendRequestParametersType<T>) => Promise<KameleoonResponseType>;\n}\n"],"mappings":"0JAeY,CAAAA,OAAO,CAAAC,OAAA,CAAAD,OAAA,UAAPA,CAAO,QAAP,CAAAA,CAAO,CAAAE,OAAA,WAAPF,CAAO,CAAAG,MAAA,UAAPH,CAAO,CAAAI,mBAAA,uBAAPJ,CAAO,MAiKPK,UAAU,CAAAJ,OAAA,CAAAI,UAAA,UAAVA,CAAU,QAAV,CAAAA,CAAU,CAAAC,GAAA,OAAVD,CAAU,CAAAE,IAAA,QAAVF,CAAU,MAKVG,YAAY,CAAAP,OAAA,CAAAO,YAAA,UAAZA,CAAY,QAAZ,CAAAA,CAAY,CAAZA,CAAY,CAAAC,UAAA,iBAAZD,CAAY,CAAZA,CAAY,CAAAE,SAAA,gBAAZF,CAAY,CAAZA,CAAY,CAAAG,OAAA,cAAZH,CAAY,WAMlB,CAAAI,eAAe,CAAG,CACtB,YAAY,CACZ,YAAY,CACZ,MAAM,CACN,YAAY,CACZ,aAAa,CACb,UAAU,CACV,YAAY,CACJ,CACJC,cAAc,CAAG,CACrB,gBAAgB,CAChB,cAAc,CACd,IAAI,CACJ,OAAO,CACP,SAAS,CACT,aAAa,CACb,MAAM,CACN,QAAQ,CACR,UAAU,CACV,aAAa,CACb,WAAW,CACX,mBAAmB,CACnB,YAAY,CACZ,SAAS,CACT,YAAY,CACZ,KAAK,CACL,cAAc,CACd,gBAAgB,CAChB,UAAU,CACV,aAAa,CACb,cAAc,CACd,yBAAyB,CACzB,YAAY,CACZ,UAAU,CACV,SAAS,CACT,OAAO,CACP,IAAI,CACJ,YAAY,CACZ,YAAY,CACZ,SAAS,CACT,SAAS,CACT,kBAAkB,CAClB,WAAW,CACX,OAAO,CACP,MAAM,CACN,YAAY,CACZ,MAAM,CACN,aAAa,CACb,YAAY,CACZ,QAAQ,CACR,IAAI,CACJ,KAAK,CACG,CACJC,aAAa,CAAG,CAAC,OAAO,CAAE,KAAK,CAAU,CACzCC,UAAU,CAAG,CAAC,KAAK,CAAE,SAAS,CAAE,KAAK,CAAE,QAAQ,CAAU,IAmEnD,CAAAC,WAAW,CAAAf,OAAA,CAAAe,WAAA,UAAXA,CAAW,QAAX,CAAAA,CAAW,CAAAC,aAAA,iBAAXD,CAAW,CAAAE,QAAA,YAAXF,CAAW,CAAAG,UAAA,cAAXH,CAAW"}
@@ -1,2 +1,2 @@
1
- "use strict";const _excluded=["timestamp","isExperiment"];Object.defineProperty(exports,"__esModule",{value:!0}),exports.Utilities=void 0;var _tsRes=require("ts-res"),_kameleoonError=require("../kameleoonError"),_types=require("../types"),_kameleoonData=require("../kameleoonData"),_constants=require("../constants"),_requester=require("../requester"),_targeting=require("../targeting"),_visitProcessor=require("../kameleoonData/visitProcessor"),_constants2=require("./constants"),_types2=require("./types");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],0<=b.indexOf(c)||Object.prototype.propertyIsEnumerable.call(a,c)&&(e[c]=a[c])}return e}function _objectWithoutPropertiesLoose(a,b){if(null==a)return{};var c,d,e={},f=Object.keys(a);for(d=0;d<f.length;d++)c=f[d],0<=b.indexOf(c)||(e[c]=a[c]);return e}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),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 Utilities{static checkTargeting(a){let{segment:b,visitorCode:c,targetingData:d,experimentId:e,variationConfiguration:f,clientConfiguration:g,packageInfo:h,dataManager:i}=a;if(!b||!b.conditionsData.firstLevel.length)return(0,_tsRes.Ok)(!0);if(!f)return(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.Initialization));let j={};const k=f.getStoredVariations(c);k.ok&&(j=k.data);const l=i.getTree(b);let m,n,o;l.hasTargetingType(_targeting.TargetingType.SEGMENT)&&(m=i.trees,n=g.segments),l.hasTargetingType(_targeting.TargetingType.TARGET_FEATURE_FLAG)&&(o=g.ruleMap);const p=l.evaluate({variationData:j,sdkInfo:h,segments:n,ruleMap:o,trees:m,targetingData:d,experimentId:e,visitorCode:c});return p}static validateVisitorCode(a){return 0===a.length?(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.VisitorCodeEmpty)):a.length>_constants2.VISITOR_CODE_MAX_LENGTH?(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.VisitorCodeMaxLength)):(0,_tsRes.Ok)()}static getDataUrl(a){function b(a){if(!a.url)return;const b=a.data.type===_kameleoonData.KameleoonData.Conversion;if(e||b){const c=b?"":_requester.UrlParameter.Nonce+Utilities.getNonce();g.push(a.url+c+"\n")}}let{visitorCode:c,dataManager:d,isConsentProvided:e}=a;const f=d.getUnsentData(c),g=[];if(!f||!f.size)return"";for(const c of f.values())Array.isArray(c)?c.forEach(a=>b(a)):b(c);return g.join("")}static getVariationDataUrlAndSentExperimentIds(a){let{visitorCode:b,isConsentProvided:c,variationConfiguration:d}=a;const e=[],f=new Set,g=d.getUnsentData(b);g.ok&&g.data.length&&g.data.forEach(a=>{(a.isTargetedRule||c)&&(e.push(_requester.UrlEventType.Experiment+_requester.UrlParameter.Id+a.experimentId+_requester.UrlParameter.VariationId+a.variationId+_requester.UrlParameter.Nonce+Utilities.getNonce()+"\n"),f.add(a.experimentId+""))});const h=e.join(""),i=Array.from(f);return[h,i]}static async trackFeatureExperiment(a){let{featureFlagVariation:b,dataManager:c,visitorCode:d,requester:e,isOfflineModeOn:f,isConsentProvided:g,offlineTrackingStorage:h,variationConfiguration:i}=a;const{variationId:j,rule:k}=b,l=this.getUserAgent(d,c),m=this.getDataUrl({visitorCode:d,dataManager:c,isConsentProvided:g}),n=k?k.experimentId:0,[o,p]=this.getVariationDataUrlAndSentExperimentIds({visitorCode:d,isConsentProvided:g,variationConfiguration:i});if(!g&&!m&&!k)return;const q={visitorCode:d,dataUrl:m,variationDataUrl:o,experimentId:n,variationId:j||0,userAgent:l,isUnallocated:null===j},r=await e.trackExperiment(q);r.ok&&(g?c.clearUnsentData(d):c.clearUnsentDataByKey(d,_kameleoonData.KameleoonData.Conversion),p.forEach(a=>{i.markUnsentDataAsSent(d,a)})),!r.ok&&f&&this.addItemToOfflineTracking({item:q,storage:h,isExperiment:!0})}static convertTimeUnit(a,b){const c={[_types2.TimeUnit.Minute]:_types.Milliseconds.Minute,[_types2.TimeUnit.Hour]:_types.Milliseconds.Hour,[_types2.TimeUnit.Day]:_types.Milliseconds.Day,[_types2.TimeUnit.Week]:_types.Milliseconds.Week,[_types2.TimeUnit.Month]:_types.Milliseconds.Month};return a/c[b]}static parseFeatureVariable(a){const{key:b,type:c,value:d}=a;switch(c){case _types.VariableType.BOOLEAN:return(0,_tsRes.Ok)({key:b,type:c,value:!!d});case _types.VariableType.STRING:return(0,_tsRes.Ok)({key:b,type:c,value:d+""});case _types.VariableType.NUMBER:const e=+d;return Number.isNaN(e)?(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.NumberParse,d+"")):(0,_tsRes.Ok)({key:b,type:c,value:e});case _types.VariableType.JSON:try{const d=JSON.parse(a.value+"");return(0,_tsRes.Ok)({key:b,type:c,value:d})}catch(a){return(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.JSONParse,a))}default:(0,_kameleoonError.exhaustCheck)(c)}}static parseVisitorData(a){let{data:b,filters:c,visitorCode:d,dataManager:e,variationConfiguration:f}=a;const g=new _visitProcessor.VisitProcessor(c,e),{currentVisit:h,previousVisits:i,kcs:j}=b;let k=[];if(h&&k.push(h),i&&k.push(...i),!k.length)return{visitorData:[],storageVisitorData:[]};k.forEach(a=>{g.processVisit(a)}),g.processKcs(j),g.processMultipleDataTypes();const{visitorData:l,storageVisitorData:m,visitsData:n,experimentData:o}=g.data;return f.updateStoredVariations(d,o),{visitorData:l,storageVisitorData:m,visitsData:n}}static parseRegExp(a){if("/"===a[0]){const[_,b,c]=a.split("/");return new RegExp(b,c)}return new RegExp(a)}static getUserAgent(a,b){const c=b.getTargetingData(a);if(c){const a=c[_kameleoonData.KameleoonData.UserAgent];if(a)return a.value}}static isCustomData(a){return a.data.type===_kameleoonData.KameleoonData.CustomData}static insertInOrderedListMutably(a){let{list:b,element:c,order:d}=a;if(!b.includes(c)){const a=b.findIndex(a=>d===_types2.Order.Ascending?a>=c:a<=c);-1===a?b.push(c):b.splice(a,0,c)}}static updateCache(a){let{cacheManager:b,visitorCode:c,experimentId:d,variationId:e}=a;const f=b.getAliveItem(c),g=f?_objectSpread({},f):{};g[d]={variationId:e,expirationTime:Date.now()+_constants.CACHE_ITEM_LIFETIME*_types.Milliseconds.Second},b.add({key:c,data:g,lifetime:_constants.CACHE_ITEM_LIFETIME})}static getTrackingCode(a,b){let c="window.kameleoonQueue=window.kameleoonQueue||[];";const d=a.getAliveItem(b);if(!d)return c;const e={};return Object.entries(d).forEach(a=>{let[b,{variationId:d,expirationTime:f}]=a;f>Date.now()&&(c+="window.kameleoonQueue.push(['Experiments.assignVariation',".concat(b,",").concat(d,"]);"),c+="window.kameleoonQueue.push(['Experiments.trigger',".concat(b,",true]);"),e[+b]={variationId:d,expirationTime:f})}),a.add({key:b,data:e,lifetime:_constants.CACHE_ITEM_LIFETIME}),c}static async trackData(a){let{visitorCode:b,dataManager:c,requester:d,isOfflineModeOn:e,offlineTrackingStorage:f,isConsentProvided:g,isMappingIdentifier:h}=a;const i=this.getDataUrl({visitorCode:b,dataManager:c,isConsentProvided:g});if(!g&&!i)return;const j=this.getUserAgent(b,c),k={visitorCode:b,body:i,userAgent:j,isMappingIdentifier:h},l=await d.trackData(k),m=()=>g?c.clearUnsentData(b):c.clearUnsentDataByKey(b,_kameleoonData.KameleoonData.Conversion);l.ok&&m(),!l.ok&&e&&this.addItemToOfflineTracking({item:k,storage:f,isExperiment:!1,onSuccess:m}),await this.sendOfflineTracking({requester:d,storage:f})}static getNonce(){let a="";for(let b=0;b<_constants2.NONCE_LENGTH;b++){const b=Math.floor(Math.random()*_constants2.NONCE_LENGTH);a+=_constants2.HEX_CHARACTERS.charAt(b)}return a}static compareSemVer(a){let{version:b,compareVersion:c,operator:d}=a;const e=this.validateVersion(b),f=this.validateVersion(c);if(!e.ok)return(0,_tsRes.Err)(e.error);if(!f.ok)return(0,_tsRes.Err)(f.error);const[g,h,i]=e.data,[j,k,l]=f.data,[m,n,o]=[g===j,h===k,i===l];switch(d){case _targeting.VersionMatchType.EQUAL:return(0,_tsRes.Ok)(m&&n&&o);case _targeting.VersionMatchType.GREATER:return(0,_tsRes.Ok)(g>j||m&&h>k||m&&n&&i>l);case _targeting.VersionMatchType.LOWER:return(0,_tsRes.Ok)(g<j||m&&h<k||m&&n&&i<l);default:(0,_kameleoonError.exhaustCheck)(d)}}static generateRandomString(a){const b="abcdefghijklmnopqrstuvwxyz0123456789",c=[];if(0>a)return"";for(let d=0;d<a;d++)c.push(b[Math.floor(Math.random()*b.length)]);return c.join("")}static async sendOfflineTracking(a){let{requester:b,storage:c}=a;const d=c.read();if(d.ok&&d.data.requestParameters){const{requestParameters:a}=d.data,e=[];for(const c of a){const{timestamp:a,isExperiment:d}=c,f=_objectWithoutProperties(c,_excluded);let g;g=d?await b.trackExperiment(f):await b.trackData(f),g.ok&&g.data&&e.push(a)}this.deleteFromOfflineTracking({storage:c,timestamps:e})}}static addItemToOfflineTracking(a){let{item:b,isExperiment:c,storage:d,onSuccess:e}=a;const f=d.read(),g=f.ok?f.data:{},{requestParameters:h}=g,i=_objectSpread(_objectSpread({},b),{},{timestamp:new Date().getTime(),isExperiment:c}),j=h?[...h,i]:[i],k=d.write({requestParameters:j});k.ok&&e&&e()}static deleteFromOfflineTracking(a){let{timestamps:b,storage:c}=a;const d=c.read();if(d.ok){const{requestParameters:a}=d.data,e=null===a||void 0===a?void 0:a.filter(a=>!b.includes(a.timestamp));c.write({requestParameters:e})}}static validateVersion(a){const b=a.split(".").map(a=>parseInt(a,10));for(;3>b.length;)b.push(0);return b.some(a=>isNaN(a))?(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.SemanticVersionParse,a)):(0,_tsRes.Ok)(b.slice(0,3))}}exports.Utilities=Utilities;
1
+ "use strict";const _excluded=["timestamp","isExperiment"];Object.defineProperty(exports,"__esModule",{value:!0}),exports.Utilities=void 0;var _tsRes=require("ts-res"),_kameleoonError=require("../kameleoonError"),_types=require("../types"),_kameleoonData=require("../kameleoonData"),_constants=require("../constants"),_requester=require("../requester"),_targeting=require("../targeting"),_visitProcessor=require("../kameleoonData/visitProcessor"),_constants2=require("./constants"),_types2=require("./types");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],0<=b.indexOf(c)||Object.prototype.propertyIsEnumerable.call(a,c)&&(e[c]=a[c])}return e}function _objectWithoutPropertiesLoose(a,b){if(null==a)return{};var c,d,e={},f=Object.keys(a);for(d=0;d<f.length;d++)c=f[d],0<=b.indexOf(c)||(e[c]=a[c]);return e}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),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 Utilities{static checkTargeting(a){let{segment:b,visitorCode:c,targetingData:d,experimentId:e,variationConfiguration:f,clientConfiguration:g,packageInfo:h,dataManager:i}=a;if(!b||!b.conditionsData.firstLevel.length)return(0,_tsRes.Ok)(!0);if(!f)return(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.Initialization));let j={};const k=f.getStoredVariations(c);k.ok&&(j=k.data);const l=i.getTree(b);let m,n,o;l.hasTargetingType(_targeting.TargetingType.SEGMENT)&&(m=i.trees,n=g.segments),l.hasTargetingType(_targeting.TargetingType.TARGET_FEATURE_FLAG)&&(o=g.ruleMap);const p=l.evaluate({variationData:j,sdkInfo:h,segments:n,ruleMap:o,trees:m,targetingData:d,experimentId:e,visitorCode:c});return p}static validateVisitorCode(a){return 0===a.length?(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.VisitorCodeEmpty)):a.length>_constants2.VISITOR_CODE_MAX_LENGTH?(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.VisitorCodeMaxLength)):(0,_tsRes.Ok)()}static getDataUrl(a){function b(a){if(!a.url)return;const b=a.data.type===_kameleoonData.KameleoonData.Conversion;if(e||b){const c=b?"":_requester.UrlParameter.Nonce+Utilities.getNonce();g.push(a.url+c+"\n")}}let{visitorCode:c,dataManager:d,isConsentProvided:e}=a;const f=d.getUnsentData(c),g=[];if(!f||!f.size)return"";for(const c of f.values())Array.isArray(c)?c.forEach(a=>b(a)):b(c);return g.join("")}static getVariationDataUrlAndSentExperimentIds(a){let{visitorCode:b,isConsentProvided:c,variationConfiguration:d}=a;const e=[],f=new Set,g=d.getUnsentData(b);g.ok&&g.data.length&&g.data.forEach(a=>{(a.isTargetedRule||c)&&(e.push(_requester.UrlEventType.Experiment+_requester.UrlParameter.Id+a.experimentId+_requester.UrlParameter.VariationId+a.variationId+_requester.UrlParameter.Nonce+Utilities.getNonce()+"\n"),f.add(a.experimentId+""))});const h=e.join(""),i=Array.from(f);return[h,i]}static async trackFeatureExperiment(a){let{featureFlagVariation:b,dataManager:c,visitorCode:d,requester:e,isOfflineModeOn:f,isConsentProvided:g,offlineTrackingStorage:h,variationConfiguration:i}=a;const{variationId:j,rule:k}=b,l=this.getUserAgent(d,c),m=this.getDataUrl({visitorCode:d,dataManager:c,isConsentProvided:g}),n=k?k.experimentId:0,[o,p]=this.getVariationDataUrlAndSentExperimentIds({visitorCode:d,isConsentProvided:g,variationConfiguration:i});if(!g&&!m&&!k)return;const q={visitorCode:d,dataUrl:m,variationDataUrl:o,experimentId:n,variationId:j||0,userAgent:l,isUnallocated:null===j},r=await e.trackExperiment(q);r.ok&&(g?c.clearUnsentData(d):c.clearUnsentDataByKey(d,_kameleoonData.KameleoonData.Conversion),p.forEach(a=>{i.markUnsentDataAsSent(d,a)})),!r.ok&&f&&this.addItemToOfflineTracking({item:q,storage:h,isExperiment:!0})}static convertTimeUnit(a,b){const c={[_types2.TimeUnit.Minute]:_types.Milliseconds.Minute,[_types2.TimeUnit.Hour]:_types.Milliseconds.Hour,[_types2.TimeUnit.Day]:_types.Milliseconds.Day,[_types2.TimeUnit.Week]:_types.Milliseconds.Week,[_types2.TimeUnit.Month]:_types.Milliseconds.Month};return a/c[b]}static parseFeatureVariable(a){const{key:b,type:c,value:d}=a;switch(c){case _types.VariableType.BOOLEAN:return(0,_tsRes.Ok)({key:b,type:c,value:!!d});case _types.VariableType.STRING:return(0,_tsRes.Ok)({key:b,type:c,value:d+""});case _types.VariableType.NUMBER:const e=+d;return Number.isNaN(e)?(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.NumberParse,d+"")):(0,_tsRes.Ok)({key:b,type:c,value:e});case _types.VariableType.JSON:try{const d=JSON.parse(a.value+"");return(0,_tsRes.Ok)({key:b,type:c,value:d})}catch(a){return(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.JSONParse,a))}default:(0,_kameleoonError.exhaustCheck)(c)}}static parseVisitorData(a){let{data:b,filters:c,visitorCode:d,dataManager:e,variationConfiguration:f}=a;const g=new _visitProcessor.VisitProcessor(c,e),{currentVisit:h,previousVisits:i,kcs:j}=b;let k=[];if(h&&k.push(h),i&&k.push(...i),!k.length)return{visitorData:[],storageVisitorData:[]};k.forEach(a=>{g.processVisit(a)}),g.processKcs(j),g.processMultipleDataTypes();const{visitorData:l,storageVisitorData:m,visitsData:n,experimentData:o}=g.data;return f.updateStoredVariations(d,o),{visitorData:l,storageVisitorData:m,visitsData:n}}static parseRegExp(a){if("/"===a[0]){const[_,b,c]=a.split("/");return new RegExp(b,c)}return new RegExp(a)}static getUserAgent(a,b){const c=b.getTargetingData(a);if(c){const a=c[_kameleoonData.KameleoonData.UserAgent];if(a)return a.value}}static isCustomData(a){return a.data.type===_kameleoonData.KameleoonData.CustomData}static insertInOrderedListMutably(a){let{list:b,element:c,order:d}=a;if(!b.includes(c)){const a=b.findIndex(a=>d===_types2.Order.Ascending?a>=c:a<=c);-1===a?b.push(c):b.splice(a,0,c)}}static updateCache(a){let{cacheManager:b,visitorCode:c,experimentId:d,variationId:e}=a;const f=b.getAliveItem(c),g=f?_objectSpread({},f):{};g[d]={variationId:e,expirationTime:Date.now()+_constants.CACHE_ITEM_LIFETIME*_types.Milliseconds.Second},b.add({key:c,data:g,lifetime:_constants.CACHE_ITEM_LIFETIME})}static getTrackingCode(a,b){let c="window.kameleoonQueue=window.kameleoonQueue||[];";const d=a.getAliveItem(b);if(!d)return c;const e={};return Object.entries(d).forEach(a=>{let[b,{variationId:d,expirationTime:f}]=a;f>Date.now()&&(c+="window.kameleoonQueue.push(['Experiments.assignVariation',".concat(b,",").concat(d,",true]);"),c+="window.kameleoonQueue.push(['Experiments.trigger',".concat(b,",true]);"),e[+b]={variationId:d,expirationTime:f})}),a.add({key:b,data:e,lifetime:_constants.CACHE_ITEM_LIFETIME}),c}static async trackData(a){let{visitorCode:b,dataManager:c,requester:d,isOfflineModeOn:e,offlineTrackingStorage:f,isConsentProvided:g,isMappingIdentifier:h}=a;const i=this.getDataUrl({visitorCode:b,dataManager:c,isConsentProvided:g});if(!g&&!i)return;const j=this.getUserAgent(b,c),k={visitorCode:b,body:i,userAgent:j,isMappingIdentifier:h},l=await d.trackData(k),m=()=>g?c.clearUnsentData(b):c.clearUnsentDataByKey(b,_kameleoonData.KameleoonData.Conversion);l.ok&&m(),!l.ok&&e&&this.addItemToOfflineTracking({item:k,storage:f,isExperiment:!1,onSuccess:m}),await this.sendOfflineTracking({requester:d,storage:f})}static getNonce(){let a="";for(let b=0;b<_constants2.NONCE_LENGTH;b++){const b=Math.floor(Math.random()*_constants2.NONCE_LENGTH);a+=_constants2.HEX_CHARACTERS.charAt(b)}return a}static compareSemVer(a){let{version:b,compareVersion:c,operator:d}=a;const e=this.validateVersion(b),f=this.validateVersion(c);if(!e.ok)return(0,_tsRes.Err)(e.error);if(!f.ok)return(0,_tsRes.Err)(f.error);const[g,h,i]=e.data,[j,k,l]=f.data,[m,n,o]=[g===j,h===k,i===l];switch(d){case _targeting.VersionMatchType.EQUAL:return(0,_tsRes.Ok)(m&&n&&o);case _targeting.VersionMatchType.GREATER:return(0,_tsRes.Ok)(g>j||m&&h>k||m&&n&&i>l);case _targeting.VersionMatchType.LOWER:return(0,_tsRes.Ok)(g<j||m&&h<k||m&&n&&i<l);default:(0,_kameleoonError.exhaustCheck)(d)}}static generateRandomString(a){const b="abcdefghijklmnopqrstuvwxyz0123456789",c=[];if(0>a)return"";for(let d=0;d<a;d++)c.push(b[Math.floor(Math.random()*b.length)]);return c.join("")}static async sendOfflineTracking(a){let{requester:b,storage:c}=a;const d=c.read();if(d.ok&&d.data.requestParameters){const{requestParameters:a}=d.data,e=[];for(const c of a){const{timestamp:a,isExperiment:d}=c,f=_objectWithoutProperties(c,_excluded);let g;g=d?await b.trackExperiment(f):await b.trackData(f),g.ok&&g.data&&e.push(a)}this.deleteFromOfflineTracking({storage:c,timestamps:e})}}static addItemToOfflineTracking(a){let{item:b,isExperiment:c,storage:d,onSuccess:e}=a;const f=d.read(),g=f.ok?f.data:{},{requestParameters:h}=g,i=_objectSpread(_objectSpread({},b),{},{timestamp:new Date().getTime(),isExperiment:c}),j=h?[...h,i]:[i],k=d.write({requestParameters:j});k.ok&&e&&e()}static deleteFromOfflineTracking(a){let{timestamps:b,storage:c}=a;const d=c.read();if(d.ok){const{requestParameters:a}=d.data,e=null===a||void 0===a?void 0:a.filter(a=>!b.includes(a.timestamp));c.write({requestParameters:e})}}static validateVersion(a){const b=a.split(".").map(a=>parseInt(a,10));for(;3>b.length;)b.push(0);return b.some(a=>isNaN(a))?(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.SemanticVersionParse,a)):(0,_tsRes.Ok)(b.slice(0,3))}}exports.Utilities=Utilities;
2
2
  //# sourceMappingURL=utilities.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utilities.js","names":["Utilities","checkTargeting","a","segment","visitorCode","targetingData","experimentId","variationConfiguration","clientConfiguration","packageInfo","dataManager","conditionsData","firstLevel","length","Ok","Err","KameleoonError","KameleoonException","Initialization","variations","assignedVariationsResult","getStoredVariations","ok","data","targetingTree","getTree","trees","segments","ruleMap","hasTargetingType","TargetingType","SEGMENT","TARGET_FEATURE_FLAG","result","evaluate","variationData","sdkInfo","validateVisitorCode","VisitorCodeEmpty","VISITOR_CODE_MAX_LENGTH","VisitorCodeMaxLength","getDataUrl","updateUrl","url","shouldSendConversionData","type","KameleoonData","Conversion","isConsentProvided","nonce","UrlParameter","Nonce","getNonce","resultUrl","push","unsentData","getUnsentData","size","item","values","Array","isArray","forEach","arrayItem","join","getVariationDataUrlAndSentExperimentIds","variationDataUrlList","sentExperimentIds","Set","isTargetedRule","UrlEventType","Experiment","Id","VariationId","variationId","add","variationDataUrl","experimentIds","from","trackFeatureExperiment","featureFlagVariation","requester","isOfflineModeOn","offlineTrackingStorage","rule","userAgent","getUserAgent","dataUrl","parameters","isUnallocated","trackExperiment","clearUnsentData","clearUnsentDataByKey","markUnsentDataAsSent","addItemToOfflineTracking","storage","isExperiment","convertTimeUnit","time","timeUnit","timeMap","TimeUnit","Minute","Milliseconds","Hour","Day","Week","Month","parseFeatureVariable","variable","key","value","VariableType","BOOLEAN","STRING","NUMBER","numberValue","Number","isNaN","NumberParse","JSON","jsonValue","parse","err","JSONParse","exhaustCheck","parseVisitorData","filters","visitProcessor","VisitProcessor","currentVisit","previousVisits","kcs","visits","visitorData","storageVisitorData","visit","processVisit","processKcs","processMultipleDataTypes","visitsData","experimentData","updateStoredVariations","parseRegExp","_","expression","flags","split","RegExp","getTargetingData","userAgentData","UserAgent","isCustomData","dataItem","CustomData","insertInOrderedListMutably","list","element","order","includes","index","findIndex","Order","Ascending","splice","updateCache","cacheManager","cacheData","getAliveItem","newCacheData","_objectSpread","expirationTime","Date","now","CACHE_ITEM_LIFETIME","Second","lifetime","getTrackingCode","trackingCache","resultString","updatedCacheData","Object","entries","concat","trackData","isMappingIdentifier","body","cleanup","onSuccess","sendOfflineTracking","i","NONCE_LENGTH","randomIndex","Math","floor","random","HEX_CHARACTERS","charAt","compareSemVer","version","compareVersion","operator","versionResult","validateVersion","compareVersionResult","error","major","minor","patch","compareMajor","compareMinor","comparePatch","isMajorEqual","isMinorEqual","isPatchEqual","VersionMatchType","EQUAL","GREATER","LOWER","generateRandomString","characters","randomCharacterArray","readResult","read","requestParameters","successfulTimestamps","timestamp","params","_objectWithoutProperties","_excluded","deleteFromOfflineTracking","timestamps","newItem","getTime","newRequestParameters","writeResult","write","newParameters","filter","versionParts","map","x","parseInt","some","SemanticVersionParse","slice","exports"],"sources":["../../src/utilities/utilities.ts"],"sourcesContent":["import { Err, Ok, Result } from 'ts-res';\nimport {\n KameleoonError,\n KameleoonException,\n exhaustCheck,\n} from 'src/kameleoonError';\nimport {\n FeatureVariableResultType,\n Milliseconds,\n TrackingCacheItemType,\n VariableType,\n} from 'src/types';\nimport { FeatureVariableType, JSONType } from 'src/clientConfiguration';\nimport {\n CustomData,\n DataManager,\n KameleoonData,\n KameleoonDataType,\n} from 'src/kameleoonData';\nimport { CACHE_ITEM_LIFETIME } from 'src/constants';\nimport { CacheManager } from 'src/cacheManager';\nimport {\n TrackExperimentParamsType,\n TrackDataParamsType,\n VisitType,\n UrlParameter,\n UrlEventType,\n} from 'src/requester';\nimport { VersionMatchType, TargetingType } from 'src/targeting';\nimport { FeatureFlagVariationsType } from 'src/storage/types';\nimport { VisitProcessor } from 'src/kameleoonData/visitProcessor';\nimport {\n VISITOR_CODE_MAX_LENGTH,\n HEX_CHARACTERS,\n NONCE_LENGTH,\n} from './constants';\nimport {\n CheckTargetingParametersType,\n ManageCacheParametersType,\n TrackDataParametersType,\n TrackRuleParametersType,\n AddToOfflineTrackingParametersType,\n SendOfflineTrackingParametersType,\n DeleteFromOfflineTrackingParametersType,\n ParseVisitorDataParametersType,\n InsertInOrderedListParametersType,\n Order,\n TimeUnit,\n GetDataUrlParametersType,\n GetVariationDataUrlParametersType,\n ParseVisitorDataResultType,\n} from './types';\n\nexport class Utilities {\n static checkTargeting({\n segment,\n visitorCode,\n targetingData,\n experimentId,\n variationConfiguration,\n clientConfiguration,\n packageInfo,\n dataManager,\n }: CheckTargetingParametersType): Result<boolean, KameleoonError> {\n if (!segment || !segment.conditionsData.firstLevel.length) {\n return Ok(true);\n }\n\n if (!variationConfiguration) {\n return Err(new KameleoonError(KameleoonException.Initialization));\n }\n\n let variations: FeatureFlagVariationsType = {};\n\n const assignedVariationsResult =\n variationConfiguration.getStoredVariations(visitorCode);\n\n if (assignedVariationsResult.ok) {\n variations = assignedVariationsResult.data;\n }\n\n const targetingTree = dataManager.getTree(segment);\n\n let trees = undefined;\n let segments = undefined;\n let ruleMap = undefined;\n\n // --- Note ---\n // Only getting trees and segments targeting type\n if (targetingTree.hasTargetingType(TargetingType.SEGMENT)) {\n trees = dataManager.trees;\n segments = clientConfiguration.segments;\n }\n\n // --- Note ---\n // Only constructing rule map for targeting type\n if (targetingTree.hasTargetingType(TargetingType.TARGET_FEATURE_FLAG)) {\n ruleMap = clientConfiguration.ruleMap;\n }\n\n const result = targetingTree.evaluate({\n variationData: variations,\n sdkInfo: packageInfo,\n segments,\n ruleMap,\n trees,\n targetingData,\n experimentId,\n visitorCode,\n });\n\n return result;\n }\n\n static validateVisitorCode(\n visitorCode: string,\n ): Result<void, KameleoonError> {\n if (visitorCode.length === 0) {\n return Err(new KameleoonError(KameleoonException.VisitorCodeEmpty));\n }\n\n if (visitorCode.length > VISITOR_CODE_MAX_LENGTH) {\n return Err(new KameleoonError(KameleoonException.VisitorCodeMaxLength));\n }\n\n return Ok();\n }\n\n static getDataUrl({\n visitorCode,\n dataManager,\n isConsentProvided,\n }: GetDataUrlParametersType): string {\n const unsentData = dataManager.getUnsentData(visitorCode);\n const resultUrl: string[] = [];\n\n if (!unsentData || !unsentData.size) {\n return '';\n }\n\n function updateUrl(data: KameleoonDataType): void {\n if (!data.url) {\n return;\n }\n\n const shouldSendAllData = isConsentProvided;\n const shouldSendConversionData =\n data.data.type === KameleoonData.Conversion;\n\n if (shouldSendAllData || shouldSendConversionData) {\n const nonce = !shouldSendConversionData\n ? UrlParameter.Nonce + Utilities.getNonce()\n : '';\n resultUrl.push(data.url + nonce + '\\n');\n }\n }\n\n for (const item of unsentData.values()) {\n if (Array.isArray(item)) {\n item.forEach((arrayItem) => updateUrl(arrayItem));\n } else {\n updateUrl(item);\n }\n }\n\n return resultUrl.join('');\n }\n\n static getVariationDataUrlAndSentExperimentIds({\n visitorCode,\n isConsentProvided,\n variationConfiguration,\n }: GetVariationDataUrlParametersType): [string, string[]] {\n const variationDataUrlList: string[] = [];\n const sentExperimentIds = new Set<string>();\n const unsentData = variationConfiguration.getUnsentData(visitorCode);\n\n if (unsentData.ok && unsentData.data.length) {\n unsentData.data.forEach((item) => {\n if (item.isTargetedRule || isConsentProvided) {\n variationDataUrlList.push(\n UrlEventType.Experiment +\n UrlParameter.Id +\n item.experimentId +\n UrlParameter.VariationId +\n item.variationId +\n UrlParameter.Nonce +\n Utilities.getNonce() +\n '\\n',\n );\n\n sentExperimentIds.add(String(item.experimentId));\n }\n });\n }\n\n const variationDataUrl = variationDataUrlList.join('');\n const experimentIds = Array.from(sentExperimentIds);\n\n return [variationDataUrl, experimentIds];\n }\n\n static async trackFeatureExperiment({\n featureFlagVariation,\n dataManager,\n visitorCode,\n requester,\n isOfflineModeOn,\n isConsentProvided,\n offlineTrackingStorage,\n variationConfiguration,\n }: TrackRuleParametersType): Promise<void> {\n const { variationId, rule } = featureFlagVariation;\n\n const userAgent = this.getUserAgent(visitorCode, dataManager);\n\n const dataUrl = this.getDataUrl({\n visitorCode,\n dataManager,\n isConsentProvided,\n });\n\n const resultVariationId = variationId || 0;\n\n // --- Note ---\n // Experiment id is not needed for unallocated visitors\n // So we just use 0 as a fallback\n const experimentId = rule ? rule.experimentId : 0;\n\n const [variationDataUrl, sentExperimentIds] =\n this.getVariationDataUrlAndSentExperimentIds({\n visitorCode,\n isConsentProvided,\n variationConfiguration,\n });\n\n if (!isConsentProvided && !dataUrl && !rule) {\n return;\n }\n\n const isUnallocated = variationId === null;\n\n const parameters = {\n visitorCode,\n dataUrl,\n variationDataUrl,\n experimentId,\n variationId: resultVariationId,\n userAgent,\n isUnallocated,\n };\n\n const result = await requester.trackExperiment(parameters);\n\n if (result.ok) {\n if (!isConsentProvided) {\n dataManager.clearUnsentDataByKey(visitorCode, KameleoonData.Conversion);\n } else {\n dataManager.clearUnsentData(visitorCode);\n }\n\n sentExperimentIds.forEach((experimentId) => {\n variationConfiguration.markUnsentDataAsSent(visitorCode, experimentId);\n });\n }\n\n if (!result.ok && isOfflineModeOn) {\n this.addItemToOfflineTracking({\n item: parameters,\n storage: offlineTrackingStorage,\n isExperiment: true,\n });\n }\n }\n\n static convertTimeUnit(time: number, timeUnit: TimeUnit): number {\n const timeMap = {\n [TimeUnit.Minute]: Milliseconds.Minute,\n [TimeUnit.Hour]: Milliseconds.Hour,\n [TimeUnit.Day]: Milliseconds.Day,\n [TimeUnit.Week]: Milliseconds.Week,\n [TimeUnit.Month]: Milliseconds.Month,\n };\n\n return time / timeMap[timeUnit];\n }\n\n static parseFeatureVariable(\n variable: FeatureVariableType,\n ): Result<FeatureVariableResultType, KameleoonError> {\n const { key, type, value } = variable;\n\n switch (type) {\n case VariableType.BOOLEAN:\n return Ok({\n key,\n type,\n value: Boolean(value),\n });\n case VariableType.STRING:\n return Ok({\n key,\n type,\n value: String(value),\n });\n case VariableType.NUMBER:\n const numberValue = Number(value);\n\n if (Number.isNaN(numberValue)) {\n return Err(\n new KameleoonError(KameleoonException.NumberParse, String(value)),\n );\n }\n\n return Ok({\n key,\n type,\n value: numberValue,\n });\n case VariableType.JSON:\n try {\n const jsonValue: JSONType = JSON.parse(String(variable.value));\n\n return Ok({\n key,\n type,\n value: jsonValue,\n });\n } catch (err) {\n return Err(new KameleoonError(KameleoonException.JSONParse, err));\n }\n default:\n exhaustCheck(type);\n }\n }\n\n static parseVisitorData({\n data,\n filters,\n visitorCode,\n dataManager,\n variationConfiguration,\n }: ParseVisitorDataParametersType): ParseVisitorDataResultType {\n const visitProcessor = new VisitProcessor(filters, dataManager);\n const { currentVisit, previousVisits, kcs } = data;\n\n let visits: VisitType[] = [];\n\n if (currentVisit) {\n visits.push(currentVisit);\n }\n\n if (previousVisits) {\n visits.push(...previousVisits);\n }\n\n if (!visits.length) {\n return { visitorData: [], storageVisitorData: [] };\n }\n\n visits.forEach((visit) => {\n visitProcessor.processVisit(visit);\n });\n\n visitProcessor.processKcs(kcs);\n visitProcessor.processMultipleDataTypes();\n\n const { visitorData, storageVisitorData, visitsData, experimentData } =\n visitProcessor.data;\n\n variationConfiguration.updateStoredVariations(visitorCode, experimentData);\n\n return {\n visitorData,\n storageVisitorData,\n visitsData,\n };\n }\n\n static parseRegExp(value: string): RegExp {\n if (value[0] === '/') {\n const [_, expression, flags] = value.split('/');\n\n return new RegExp(expression, flags);\n }\n\n return new RegExp(value);\n }\n\n static getUserAgent(\n visitorCode: string,\n dataManager: DataManager,\n ): string | undefined {\n const targetingData = dataManager.getTargetingData(visitorCode);\n\n if (targetingData) {\n const userAgentData = targetingData[KameleoonData.UserAgent];\n\n if (userAgentData) {\n return userAgentData.value;\n }\n }\n\n return undefined;\n }\n\n static isCustomData(dataItem: KameleoonDataType): dataItem is CustomData {\n return dataItem.data.type === KameleoonData.CustomData;\n }\n\n /**\n * Insert element in ordered list, if element already exists in list, does nothing\n * @param list - list to insert element\n * @param element - element to insert\n * @param order - order of list\n */\n static insertInOrderedListMutably({\n list,\n element,\n order,\n }: InsertInOrderedListParametersType): void {\n if (list.includes(element)) {\n return;\n }\n\n const index = list.findIndex((item) =>\n order === Order.Ascending ? item >= element : item <= element,\n );\n\n if (index === -1) {\n list.push(element);\n } else {\n list.splice(index, 0, element);\n }\n }\n\n static updateCache({\n cacheManager,\n visitorCode,\n experimentId,\n variationId,\n }: ManageCacheParametersType): void {\n const cacheData = cacheManager.getAliveItem(visitorCode);\n\n const newCacheData = cacheData ? { ...cacheData } : {};\n\n newCacheData[experimentId] = {\n variationId,\n expirationTime: Date.now() + CACHE_ITEM_LIFETIME * Milliseconds.Second,\n };\n\n cacheManager.add({\n key: visitorCode,\n data: newCacheData,\n lifetime: CACHE_ITEM_LIFETIME,\n });\n }\n\n static getTrackingCode(\n trackingCache: CacheManager<TrackingCacheItemType>,\n visitorCode: string,\n ): string {\n let resultString = 'window.kameleoonQueue=window.kameleoonQueue||[];';\n\n const cacheData = trackingCache.getAliveItem(visitorCode);\n\n if (!cacheData) {\n return resultString;\n }\n\n const updatedCacheData: TrackingCacheItemType = {};\n\n Object.entries(cacheData).forEach(\n ([experimentId, { variationId, expirationTime }]) => {\n if (expirationTime > Date.now()) {\n resultString += `window.kameleoonQueue.push(['Experiments.assignVariation',${experimentId},${variationId}]);`;\n resultString += `window.kameleoonQueue.push(['Experiments.trigger',${experimentId},true]);`;\n\n updatedCacheData[Number(experimentId)] = {\n variationId,\n expirationTime,\n };\n }\n },\n );\n\n // --- Note ---\n // Cache is updated with only alive experiments\n trackingCache.add({\n key: visitorCode,\n data: updatedCacheData,\n lifetime: CACHE_ITEM_LIFETIME,\n });\n\n return resultString;\n }\n\n static async trackData({\n visitorCode,\n dataManager,\n requester,\n isOfflineModeOn,\n offlineTrackingStorage,\n isConsentProvided,\n isMappingIdentifier,\n }: TrackDataParametersType): Promise<void> {\n const dataUrl = this.getDataUrl({\n visitorCode,\n dataManager,\n isConsentProvided,\n });\n\n if (!isConsentProvided && !dataUrl) {\n return;\n }\n\n const userAgent = this.getUserAgent(visitorCode, dataManager);\n\n const parameters: TrackDataParamsType = {\n visitorCode,\n body: dataUrl,\n userAgent,\n isMappingIdentifier,\n };\n\n const result = await requester.trackData(parameters);\n\n const cleanup = () =>\n isConsentProvided\n ? dataManager.clearUnsentData(visitorCode)\n : dataManager.clearUnsentDataByKey(\n visitorCode,\n KameleoonData.Conversion,\n );\n\n if (result.ok) {\n cleanup();\n }\n\n if (!result.ok && isOfflineModeOn) {\n this.addItemToOfflineTracking({\n item: parameters,\n storage: offlineTrackingStorage,\n isExperiment: false,\n onSuccess: cleanup,\n });\n }\n\n await this.sendOfflineTracking({\n requester,\n storage: offlineTrackingStorage,\n });\n }\n\n static getNonce(): string {\n let nonce: string = '';\n\n for (let i = 0; i < NONCE_LENGTH; i++) {\n const randomIndex = Math.floor(Math.random() * NONCE_LENGTH);\n nonce += HEX_CHARACTERS.charAt(randomIndex);\n }\n\n return nonce;\n }\n\n static compareSemVer({\n version,\n compareVersion,\n operator,\n }: {\n version: string;\n compareVersion: string;\n operator: VersionMatchType;\n }): Result<boolean, KameleoonError> {\n const versionResult = this.validateVersion(version);\n const compareVersionResult = this.validateVersion(compareVersion);\n\n if (!versionResult.ok) {\n return Err(versionResult.error);\n }\n\n if (!compareVersionResult.ok) {\n return Err(compareVersionResult.error);\n }\n\n const [major, minor, patch] = versionResult.data;\n const [compareMajor, compareMinor, comparePatch] =\n compareVersionResult.data;\n\n const [isMajorEqual, isMinorEqual, isPatchEqual] = [\n major === compareMajor,\n minor === compareMinor,\n patch === comparePatch,\n ];\n\n switch (operator) {\n case VersionMatchType.EQUAL:\n return Ok(isMajorEqual && isMinorEqual && isPatchEqual);\n case VersionMatchType.GREATER:\n return Ok(\n major > compareMajor ||\n (isMajorEqual && minor > compareMinor) ||\n (isMajorEqual && isMinorEqual && patch > comparePatch),\n );\n case VersionMatchType.LOWER:\n return Ok(\n major < compareMajor ||\n (isMajorEqual && minor < compareMinor) ||\n (isMajorEqual && isMinorEqual && patch < comparePatch),\n );\n default:\n exhaustCheck(operator);\n }\n }\n\n static generateRandomString(length: number): string {\n const characters = 'abcdefghijklmnopqrstuvwxyz0123456789';\n const randomCharacterArray: string[] = [];\n\n if (length < 0) {\n return '';\n }\n\n for (let i = 0; i < length; i++) {\n randomCharacterArray.push(\n characters[Math.floor(Math.random() * characters.length)],\n );\n }\n\n return randomCharacterArray.join('');\n }\n\n static async sendOfflineTracking({\n requester,\n storage,\n }: SendOfflineTrackingParametersType) {\n const readResult = storage.read();\n\n if (readResult.ok && readResult.data.requestParameters) {\n const { requestParameters } = readResult.data;\n const successfulTimestamps: number[] = [];\n\n // --- Note ---\n // `for..of` + `await` is used to make sure that failed requests are sent one by one\n // without risk of getting the same timestamp at the server, which might happen, for example,\n // with `.forEach` or `.map` starting requests in async callbacks at the same time\n for (const parameters of requestParameters) {\n const { timestamp, isExperiment, ...params } = parameters;\n let result: Result<boolean, void>;\n\n if (isExperiment) {\n result = await requester.trackExperiment(\n params as TrackExperimentParamsType,\n );\n } else {\n result = await requester.trackData(params as TrackDataParamsType);\n }\n\n result.ok && result.data && successfulTimestamps.push(timestamp);\n }\n\n this.deleteFromOfflineTracking({\n storage,\n timestamps: successfulTimestamps,\n });\n }\n }\n\n private static addItemToOfflineTracking({\n item,\n isExperiment,\n storage,\n onSuccess,\n }: AddToOfflineTrackingParametersType): void {\n const readResult = storage.read();\n\n const data = readResult.ok ? readResult.data : {};\n\n const { requestParameters } = data;\n\n const newItem = {\n ...item,\n timestamp: new Date().getTime(),\n isExperiment,\n };\n\n const newRequestParameters = requestParameters\n ? [...requestParameters, newItem]\n : [newItem];\n\n const writeResult = storage.write({\n requestParameters: newRequestParameters,\n });\n\n if (writeResult.ok && onSuccess) {\n onSuccess();\n }\n }\n\n private static deleteFromOfflineTracking({\n timestamps,\n storage,\n }: DeleteFromOfflineTrackingParametersType): void {\n const readResult = storage.read();\n\n if (readResult.ok) {\n const { requestParameters } = readResult.data;\n\n const newParameters = requestParameters?.filter(\n (item) => !timestamps.includes(item.timestamp),\n );\n\n storage.write({ requestParameters: newParameters });\n }\n }\n\n private static validateVersion(\n version: string,\n ): Result<[number, number, number], KameleoonError> {\n const versionParts = version.split('.').map((x) => parseInt(x, 10));\n\n while (versionParts.length < 3) {\n versionParts.push(0);\n }\n\n if (versionParts.some((item) => isNaN(item))) {\n return Err(\n new KameleoonError(KameleoonException.SemanticVersionParse, version),\n );\n }\n\n return Ok(versionParts.slice(0, 3) as [number, number, number]);\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"utilities.js","names":["Utilities","checkTargeting","a","segment","visitorCode","targetingData","experimentId","variationConfiguration","clientConfiguration","packageInfo","dataManager","conditionsData","firstLevel","length","Ok","Err","KameleoonError","KameleoonException","Initialization","variations","assignedVariationsResult","getStoredVariations","ok","data","targetingTree","getTree","trees","segments","ruleMap","hasTargetingType","TargetingType","SEGMENT","TARGET_FEATURE_FLAG","result","evaluate","variationData","sdkInfo","validateVisitorCode","VisitorCodeEmpty","VISITOR_CODE_MAX_LENGTH","VisitorCodeMaxLength","getDataUrl","updateUrl","url","shouldSendConversionData","type","KameleoonData","Conversion","isConsentProvided","nonce","UrlParameter","Nonce","getNonce","resultUrl","push","unsentData","getUnsentData","size","item","values","Array","isArray","forEach","arrayItem","join","getVariationDataUrlAndSentExperimentIds","variationDataUrlList","sentExperimentIds","Set","isTargetedRule","UrlEventType","Experiment","Id","VariationId","variationId","add","variationDataUrl","experimentIds","from","trackFeatureExperiment","featureFlagVariation","requester","isOfflineModeOn","offlineTrackingStorage","rule","userAgent","getUserAgent","dataUrl","parameters","isUnallocated","trackExperiment","clearUnsentData","clearUnsentDataByKey","markUnsentDataAsSent","addItemToOfflineTracking","storage","isExperiment","convertTimeUnit","time","timeUnit","timeMap","TimeUnit","Minute","Milliseconds","Hour","Day","Week","Month","parseFeatureVariable","variable","key","value","VariableType","BOOLEAN","STRING","NUMBER","numberValue","Number","isNaN","NumberParse","JSON","jsonValue","parse","err","JSONParse","exhaustCheck","parseVisitorData","filters","visitProcessor","VisitProcessor","currentVisit","previousVisits","kcs","visits","visitorData","storageVisitorData","visit","processVisit","processKcs","processMultipleDataTypes","visitsData","experimentData","updateStoredVariations","parseRegExp","_","expression","flags","split","RegExp","getTargetingData","userAgentData","UserAgent","isCustomData","dataItem","CustomData","insertInOrderedListMutably","list","element","order","includes","index","findIndex","Order","Ascending","splice","updateCache","cacheManager","cacheData","getAliveItem","newCacheData","_objectSpread","expirationTime","Date","now","CACHE_ITEM_LIFETIME","Second","lifetime","getTrackingCode","trackingCache","resultString","updatedCacheData","Object","entries","concat","trackData","isMappingIdentifier","body","cleanup","onSuccess","sendOfflineTracking","i","NONCE_LENGTH","randomIndex","Math","floor","random","HEX_CHARACTERS","charAt","compareSemVer","version","compareVersion","operator","versionResult","validateVersion","compareVersionResult","error","major","minor","patch","compareMajor","compareMinor","comparePatch","isMajorEqual","isMinorEqual","isPatchEqual","VersionMatchType","EQUAL","GREATER","LOWER","generateRandomString","characters","randomCharacterArray","readResult","read","requestParameters","successfulTimestamps","timestamp","params","_objectWithoutProperties","_excluded","deleteFromOfflineTracking","timestamps","newItem","getTime","newRequestParameters","writeResult","write","newParameters","filter","versionParts","map","x","parseInt","some","SemanticVersionParse","slice","exports"],"sources":["../../src/utilities/utilities.ts"],"sourcesContent":["import { Err, Ok, Result } from 'ts-res';\nimport {\n KameleoonError,\n KameleoonException,\n exhaustCheck,\n} from 'src/kameleoonError';\nimport {\n FeatureVariableResultType,\n Milliseconds,\n TrackingCacheItemType,\n VariableType,\n} from 'src/types';\nimport { FeatureVariableType, JSONType } from 'src/clientConfiguration';\nimport {\n CustomData,\n DataManager,\n KameleoonData,\n KameleoonDataType,\n} from 'src/kameleoonData';\nimport { CACHE_ITEM_LIFETIME } from 'src/constants';\nimport { CacheManager } from 'src/cacheManager';\nimport {\n TrackExperimentParamsType,\n TrackDataParamsType,\n VisitType,\n UrlParameter,\n UrlEventType,\n} from 'src/requester';\nimport { VersionMatchType, TargetingType } from 'src/targeting';\nimport { FeatureFlagVariationsType } from 'src/storage/types';\nimport { VisitProcessor } from 'src/kameleoonData/visitProcessor';\nimport {\n VISITOR_CODE_MAX_LENGTH,\n HEX_CHARACTERS,\n NONCE_LENGTH,\n} from './constants';\nimport {\n CheckTargetingParametersType,\n ManageCacheParametersType,\n TrackDataParametersType,\n TrackRuleParametersType,\n AddToOfflineTrackingParametersType,\n SendOfflineTrackingParametersType,\n DeleteFromOfflineTrackingParametersType,\n ParseVisitorDataParametersType,\n InsertInOrderedListParametersType,\n Order,\n TimeUnit,\n GetDataUrlParametersType,\n GetVariationDataUrlParametersType,\n ParseVisitorDataResultType,\n} from './types';\n\nexport class Utilities {\n static checkTargeting({\n segment,\n visitorCode,\n targetingData,\n experimentId,\n variationConfiguration,\n clientConfiguration,\n packageInfo,\n dataManager,\n }: CheckTargetingParametersType): Result<boolean, KameleoonError> {\n if (!segment || !segment.conditionsData.firstLevel.length) {\n return Ok(true);\n }\n\n if (!variationConfiguration) {\n return Err(new KameleoonError(KameleoonException.Initialization));\n }\n\n let variations: FeatureFlagVariationsType = {};\n\n const assignedVariationsResult =\n variationConfiguration.getStoredVariations(visitorCode);\n\n if (assignedVariationsResult.ok) {\n variations = assignedVariationsResult.data;\n }\n\n const targetingTree = dataManager.getTree(segment);\n\n let trees = undefined;\n let segments = undefined;\n let ruleMap = undefined;\n\n // --- Note ---\n // Only getting trees and segments targeting type\n if (targetingTree.hasTargetingType(TargetingType.SEGMENT)) {\n trees = dataManager.trees;\n segments = clientConfiguration.segments;\n }\n\n // --- Note ---\n // Only constructing rule map for targeting type\n if (targetingTree.hasTargetingType(TargetingType.TARGET_FEATURE_FLAG)) {\n ruleMap = clientConfiguration.ruleMap;\n }\n\n const result = targetingTree.evaluate({\n variationData: variations,\n sdkInfo: packageInfo,\n segments,\n ruleMap,\n trees,\n targetingData,\n experimentId,\n visitorCode,\n });\n\n return result;\n }\n\n static validateVisitorCode(\n visitorCode: string,\n ): Result<void, KameleoonError> {\n if (visitorCode.length === 0) {\n return Err(new KameleoonError(KameleoonException.VisitorCodeEmpty));\n }\n\n if (visitorCode.length > VISITOR_CODE_MAX_LENGTH) {\n return Err(new KameleoonError(KameleoonException.VisitorCodeMaxLength));\n }\n\n return Ok();\n }\n\n static getDataUrl({\n visitorCode,\n dataManager,\n isConsentProvided,\n }: GetDataUrlParametersType): string {\n const unsentData = dataManager.getUnsentData(visitorCode);\n const resultUrl: string[] = [];\n\n if (!unsentData || !unsentData.size) {\n return '';\n }\n\n function updateUrl(data: KameleoonDataType): void {\n if (!data.url) {\n return;\n }\n\n const shouldSendAllData = isConsentProvided;\n const shouldSendConversionData =\n data.data.type === KameleoonData.Conversion;\n\n if (shouldSendAllData || shouldSendConversionData) {\n const nonce = !shouldSendConversionData\n ? UrlParameter.Nonce + Utilities.getNonce()\n : '';\n resultUrl.push(data.url + nonce + '\\n');\n }\n }\n\n for (const item of unsentData.values()) {\n if (Array.isArray(item)) {\n item.forEach((arrayItem) => updateUrl(arrayItem));\n } else {\n updateUrl(item);\n }\n }\n\n return resultUrl.join('');\n }\n\n static getVariationDataUrlAndSentExperimentIds({\n visitorCode,\n isConsentProvided,\n variationConfiguration,\n }: GetVariationDataUrlParametersType): [string, string[]] {\n const variationDataUrlList: string[] = [];\n const sentExperimentIds = new Set<string>();\n const unsentData = variationConfiguration.getUnsentData(visitorCode);\n\n if (unsentData.ok && unsentData.data.length) {\n unsentData.data.forEach((item) => {\n if (item.isTargetedRule || isConsentProvided) {\n variationDataUrlList.push(\n UrlEventType.Experiment +\n UrlParameter.Id +\n item.experimentId +\n UrlParameter.VariationId +\n item.variationId +\n UrlParameter.Nonce +\n Utilities.getNonce() +\n '\\n',\n );\n\n sentExperimentIds.add(String(item.experimentId));\n }\n });\n }\n\n const variationDataUrl = variationDataUrlList.join('');\n const experimentIds = Array.from(sentExperimentIds);\n\n return [variationDataUrl, experimentIds];\n }\n\n static async trackFeatureExperiment({\n featureFlagVariation,\n dataManager,\n visitorCode,\n requester,\n isOfflineModeOn,\n isConsentProvided,\n offlineTrackingStorage,\n variationConfiguration,\n }: TrackRuleParametersType): Promise<void> {\n const { variationId, rule } = featureFlagVariation;\n\n const userAgent = this.getUserAgent(visitorCode, dataManager);\n\n const dataUrl = this.getDataUrl({\n visitorCode,\n dataManager,\n isConsentProvided,\n });\n\n const resultVariationId = variationId || 0;\n\n // --- Note ---\n // Experiment id is not needed for unallocated visitors\n // So we just use 0 as a fallback\n const experimentId = rule ? rule.experimentId : 0;\n\n const [variationDataUrl, sentExperimentIds] =\n this.getVariationDataUrlAndSentExperimentIds({\n visitorCode,\n isConsentProvided,\n variationConfiguration,\n });\n\n if (!isConsentProvided && !dataUrl && !rule) {\n return;\n }\n\n const isUnallocated = variationId === null;\n\n const parameters = {\n visitorCode,\n dataUrl,\n variationDataUrl,\n experimentId,\n variationId: resultVariationId,\n userAgent,\n isUnallocated,\n };\n\n const result = await requester.trackExperiment(parameters);\n\n if (result.ok) {\n if (!isConsentProvided) {\n dataManager.clearUnsentDataByKey(visitorCode, KameleoonData.Conversion);\n } else {\n dataManager.clearUnsentData(visitorCode);\n }\n\n sentExperimentIds.forEach((experimentId) => {\n variationConfiguration.markUnsentDataAsSent(visitorCode, experimentId);\n });\n }\n\n if (!result.ok && isOfflineModeOn) {\n this.addItemToOfflineTracking({\n item: parameters,\n storage: offlineTrackingStorage,\n isExperiment: true,\n });\n }\n }\n\n static convertTimeUnit(time: number, timeUnit: TimeUnit): number {\n const timeMap = {\n [TimeUnit.Minute]: Milliseconds.Minute,\n [TimeUnit.Hour]: Milliseconds.Hour,\n [TimeUnit.Day]: Milliseconds.Day,\n [TimeUnit.Week]: Milliseconds.Week,\n [TimeUnit.Month]: Milliseconds.Month,\n };\n\n return time / timeMap[timeUnit];\n }\n\n static parseFeatureVariable(\n variable: FeatureVariableType,\n ): Result<FeatureVariableResultType, KameleoonError> {\n const { key, type, value } = variable;\n\n switch (type) {\n case VariableType.BOOLEAN:\n return Ok({\n key,\n type,\n value: Boolean(value),\n });\n case VariableType.STRING:\n return Ok({\n key,\n type,\n value: String(value),\n });\n case VariableType.NUMBER:\n const numberValue = Number(value);\n\n if (Number.isNaN(numberValue)) {\n return Err(\n new KameleoonError(KameleoonException.NumberParse, String(value)),\n );\n }\n\n return Ok({\n key,\n type,\n value: numberValue,\n });\n case VariableType.JSON:\n try {\n const jsonValue: JSONType = JSON.parse(String(variable.value));\n\n return Ok({\n key,\n type,\n value: jsonValue,\n });\n } catch (err) {\n return Err(new KameleoonError(KameleoonException.JSONParse, err));\n }\n default:\n exhaustCheck(type);\n }\n }\n\n static parseVisitorData({\n data,\n filters,\n visitorCode,\n dataManager,\n variationConfiguration,\n }: ParseVisitorDataParametersType): ParseVisitorDataResultType {\n const visitProcessor = new VisitProcessor(filters, dataManager);\n const { currentVisit, previousVisits, kcs } = data;\n\n let visits: VisitType[] = [];\n\n if (currentVisit) {\n visits.push(currentVisit);\n }\n\n if (previousVisits) {\n visits.push(...previousVisits);\n }\n\n if (!visits.length) {\n return { visitorData: [], storageVisitorData: [] };\n }\n\n visits.forEach((visit) => {\n visitProcessor.processVisit(visit);\n });\n\n visitProcessor.processKcs(kcs);\n visitProcessor.processMultipleDataTypes();\n\n const { visitorData, storageVisitorData, visitsData, experimentData } =\n visitProcessor.data;\n\n variationConfiguration.updateStoredVariations(visitorCode, experimentData);\n\n return {\n visitorData,\n storageVisitorData,\n visitsData,\n };\n }\n\n static parseRegExp(value: string): RegExp {\n if (value[0] === '/') {\n const [_, expression, flags] = value.split('/');\n\n return new RegExp(expression, flags);\n }\n\n return new RegExp(value);\n }\n\n static getUserAgent(\n visitorCode: string,\n dataManager: DataManager,\n ): string | undefined {\n const targetingData = dataManager.getTargetingData(visitorCode);\n\n if (targetingData) {\n const userAgentData = targetingData[KameleoonData.UserAgent];\n\n if (userAgentData) {\n return userAgentData.value;\n }\n }\n\n return undefined;\n }\n\n static isCustomData(dataItem: KameleoonDataType): dataItem is CustomData {\n return dataItem.data.type === KameleoonData.CustomData;\n }\n\n /**\n * Insert element in ordered list, if element already exists in list, does nothing\n * @param list - list to insert element\n * @param element - element to insert\n * @param order - order of list\n */\n static insertInOrderedListMutably({\n list,\n element,\n order,\n }: InsertInOrderedListParametersType): void {\n if (list.includes(element)) {\n return;\n }\n\n const index = list.findIndex((item) =>\n order === Order.Ascending ? item >= element : item <= element,\n );\n\n if (index === -1) {\n list.push(element);\n } else {\n list.splice(index, 0, element);\n }\n }\n\n static updateCache({\n cacheManager,\n visitorCode,\n experimentId,\n variationId,\n }: ManageCacheParametersType): void {\n const cacheData = cacheManager.getAliveItem(visitorCode);\n\n const newCacheData = cacheData ? { ...cacheData } : {};\n\n newCacheData[experimentId] = {\n variationId,\n expirationTime: Date.now() + CACHE_ITEM_LIFETIME * Milliseconds.Second,\n };\n\n cacheManager.add({\n key: visitorCode,\n data: newCacheData,\n lifetime: CACHE_ITEM_LIFETIME,\n });\n }\n\n static getTrackingCode(\n trackingCache: CacheManager<TrackingCacheItemType>,\n visitorCode: string,\n ): string {\n let resultString = 'window.kameleoonQueue=window.kameleoonQueue||[];';\n\n const cacheData = trackingCache.getAliveItem(visitorCode);\n\n if (!cacheData) {\n return resultString;\n }\n\n const updatedCacheData: TrackingCacheItemType = {};\n\n Object.entries(cacheData).forEach(\n ([experimentId, { variationId, expirationTime }]) => {\n if (expirationTime > Date.now()) {\n resultString += `window.kameleoonQueue.push(['Experiments.assignVariation',${experimentId},${variationId},true]);`;\n resultString += `window.kameleoonQueue.push(['Experiments.trigger',${experimentId},true]);`;\n\n updatedCacheData[Number(experimentId)] = {\n variationId,\n expirationTime,\n };\n }\n },\n );\n\n // --- Note ---\n // Cache is updated with only alive experiments\n trackingCache.add({\n key: visitorCode,\n data: updatedCacheData,\n lifetime: CACHE_ITEM_LIFETIME,\n });\n\n return resultString;\n }\n\n static async trackData({\n visitorCode,\n dataManager,\n requester,\n isOfflineModeOn,\n offlineTrackingStorage,\n isConsentProvided,\n isMappingIdentifier,\n }: TrackDataParametersType): Promise<void> {\n const dataUrl = this.getDataUrl({\n visitorCode,\n dataManager,\n isConsentProvided,\n });\n\n if (!isConsentProvided && !dataUrl) {\n return;\n }\n\n const userAgent = this.getUserAgent(visitorCode, dataManager);\n\n const parameters: TrackDataParamsType = {\n visitorCode,\n body: dataUrl,\n userAgent,\n isMappingIdentifier,\n };\n\n const result = await requester.trackData(parameters);\n\n const cleanup = () =>\n isConsentProvided\n ? dataManager.clearUnsentData(visitorCode)\n : dataManager.clearUnsentDataByKey(\n visitorCode,\n KameleoonData.Conversion,\n );\n\n if (result.ok) {\n cleanup();\n }\n\n if (!result.ok && isOfflineModeOn) {\n this.addItemToOfflineTracking({\n item: parameters,\n storage: offlineTrackingStorage,\n isExperiment: false,\n onSuccess: cleanup,\n });\n }\n\n await this.sendOfflineTracking({\n requester,\n storage: offlineTrackingStorage,\n });\n }\n\n static getNonce(): string {\n let nonce: string = '';\n\n for (let i = 0; i < NONCE_LENGTH; i++) {\n const randomIndex = Math.floor(Math.random() * NONCE_LENGTH);\n nonce += HEX_CHARACTERS.charAt(randomIndex);\n }\n\n return nonce;\n }\n\n static compareSemVer({\n version,\n compareVersion,\n operator,\n }: {\n version: string;\n compareVersion: string;\n operator: VersionMatchType;\n }): Result<boolean, KameleoonError> {\n const versionResult = this.validateVersion(version);\n const compareVersionResult = this.validateVersion(compareVersion);\n\n if (!versionResult.ok) {\n return Err(versionResult.error);\n }\n\n if (!compareVersionResult.ok) {\n return Err(compareVersionResult.error);\n }\n\n const [major, minor, patch] = versionResult.data;\n const [compareMajor, compareMinor, comparePatch] =\n compareVersionResult.data;\n\n const [isMajorEqual, isMinorEqual, isPatchEqual] = [\n major === compareMajor,\n minor === compareMinor,\n patch === comparePatch,\n ];\n\n switch (operator) {\n case VersionMatchType.EQUAL:\n return Ok(isMajorEqual && isMinorEqual && isPatchEqual);\n case VersionMatchType.GREATER:\n return Ok(\n major > compareMajor ||\n (isMajorEqual && minor > compareMinor) ||\n (isMajorEqual && isMinorEqual && patch > comparePatch),\n );\n case VersionMatchType.LOWER:\n return Ok(\n major < compareMajor ||\n (isMajorEqual && minor < compareMinor) ||\n (isMajorEqual && isMinorEqual && patch < comparePatch),\n );\n default:\n exhaustCheck(operator);\n }\n }\n\n static generateRandomString(length: number): string {\n const characters = 'abcdefghijklmnopqrstuvwxyz0123456789';\n const randomCharacterArray: string[] = [];\n\n if (length < 0) {\n return '';\n }\n\n for (let i = 0; i < length; i++) {\n randomCharacterArray.push(\n characters[Math.floor(Math.random() * characters.length)],\n );\n }\n\n return randomCharacterArray.join('');\n }\n\n static async sendOfflineTracking({\n requester,\n storage,\n }: SendOfflineTrackingParametersType) {\n const readResult = storage.read();\n\n if (readResult.ok && readResult.data.requestParameters) {\n const { requestParameters } = readResult.data;\n const successfulTimestamps: number[] = [];\n\n // --- Note ---\n // `for..of` + `await` is used to make sure that failed requests are sent one by one\n // without risk of getting the same timestamp at the server, which might happen, for example,\n // with `.forEach` or `.map` starting requests in async callbacks at the same time\n for (const parameters of requestParameters) {\n const { timestamp, isExperiment, ...params } = parameters;\n let result: Result<boolean, void>;\n\n if (isExperiment) {\n result = await requester.trackExperiment(\n params as TrackExperimentParamsType,\n );\n } else {\n result = await requester.trackData(params as TrackDataParamsType);\n }\n\n result.ok && result.data && successfulTimestamps.push(timestamp);\n }\n\n this.deleteFromOfflineTracking({\n storage,\n timestamps: successfulTimestamps,\n });\n }\n }\n\n private static addItemToOfflineTracking({\n item,\n isExperiment,\n storage,\n onSuccess,\n }: AddToOfflineTrackingParametersType): void {\n const readResult = storage.read();\n\n const data = readResult.ok ? readResult.data : {};\n\n const { requestParameters } = data;\n\n const newItem = {\n ...item,\n timestamp: new Date().getTime(),\n isExperiment,\n };\n\n const newRequestParameters = requestParameters\n ? [...requestParameters, newItem]\n : [newItem];\n\n const writeResult = storage.write({\n requestParameters: newRequestParameters,\n });\n\n if (writeResult.ok && onSuccess) {\n onSuccess();\n }\n }\n\n private static deleteFromOfflineTracking({\n timestamps,\n storage,\n }: DeleteFromOfflineTrackingParametersType): void {\n const readResult = storage.read();\n\n if (readResult.ok) {\n const { requestParameters } = readResult.data;\n\n const newParameters = requestParameters?.filter(\n (item) => !timestamps.includes(item.timestamp),\n );\n\n storage.write({ requestParameters: newParameters });\n }\n }\n\n private static validateVersion(\n version: string,\n ): Result<[number, number, number], KameleoonError> {\n const versionParts = version.split('.').map((x) => parseInt(x, 10));\n\n while (versionParts.length < 3) {\n versionParts.push(0);\n }\n\n if (versionParts.some((item) => isNaN(item))) {\n return Err(\n new KameleoonError(KameleoonException.SemanticVersionParse, version),\n );\n }\n\n return Ok(versionParts.slice(0, 3) as [number, number, number]);\n }\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kameleoon/javascript-sdk-core",
3
- "version": "4.4.0",
3
+ "version": "4.4.1",
4
4
  "description": "Kameleoon JS SDK Core",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",