@kameleoon/javascript-sdk-core 5.2.3 → 5.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,18 @@
1
1
  # Change Log
2
2
 
3
+ ## 5.3.0 (2025-01-17)
4
+
5
+ ### Features
6
+
7
+ - Introduced a new `visitorCode` parameter to [`RemoteVisitorDataFilter`][getRemoteVisitorData]. This parameter determines whether to use the `visitorCode` from the most recent previous visit instead of the current `visitorCode`. When enabled, this feature allows visitor exposure to be based on the retrieved `visitorCode`, facilitating [cross-device reconciliation][CrossDevice]. Default value of the parameter is `true`.
8
+ - The mapping identifier is now persistent within a visitor session, ensuring that the assigned variation for a visitor remains unchanged when [merging sessions][mergingSessions] between anonymous and registered users.
9
+ - Added support for additional Data API servers worldwide, enabling faster network requests when the [`networkDomain`][configurationParameters] is manually configured.
10
+
11
+ [CrossDevice]: https://developers.kameleoon.com/feature-management-and-experimentation/web-sdks/js-sdk#cross-device-experimentation
12
+ [getRemoteVisitorData]: https://developers.kameleoon.com/feature-management-and-experimentation/web-sdks/js-sdk#getremotevisitordata
13
+ [mergingSessions]: https://developers.kameleoon.com/feature-management-and-experimentation/web-sdks/js-sdk#synchronizing-custom-data-across-devices
14
+ [configurationParameters]: https://developers.kameleoon.com/feature-management-and-experimentation/web-sdks/js-sdk/#configuration-parameters
15
+
3
16
  ## 5.2.3 (2024-12-25)
4
17
 
5
18
  ### Patch Changes
package/dist/constants.js CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.WAREHOUSE_AUDIENCE_KEY=exports.SdkLanguageType=exports.OFF_VARIATION_KEY=exports.DEFAULT_VISITOR_DATA_FILTERS=exports.CACHE_ITEM_LIFETIME=exports.CACHE_CLEANUP_TIMEOUT=void 0;const OFF_VARIATION_KEY=exports.OFF_VARIATION_KEY="off",WAREHOUSE_AUDIENCE_KEY=exports.WAREHOUSE_AUDIENCE_KEY="warehouseAudiences",CACHE_CLEANUP_TIMEOUT=exports.CACHE_CLEANUP_TIMEOUT=10,CACHE_ITEM_LIFETIME=exports.CACHE_ITEM_LIFETIME=5;let SdkLanguageType=exports.SdkLanguageType=function(a){return a.ANDROID="ANDROID",a.IOS="IOS",a.JAVA="JAVA",a.CSHARP="CSHARP",a.NODEJS="NODEJS",a.PHP="PHP",a.RUBY="RUBY",a.GO="GO",a.FLUTTER="FLUTTER",a.REACT="REACT",a.PYTHON="PYTHON",a.JAVASCRIPT="JAVASCRIPT",a.RUST="RUST",a}({});const DEFAULT_VISITOR_DATA_FILTERS=exports.DEFAULT_VISITOR_DATA_FILTERS={previousVisitAmount:1,currentVisit:!0,customData:!0,pageViews:!1,geolocation:!1,device:!1,browser:!1,operatingSystem:!1,conversions:!1,experiments:!1,kcs:!1};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.WAREHOUSE_AUDIENCE_KEY=exports.SdkLanguageType=exports.OFF_VARIATION_KEY=exports.DEFAULT_VISITOR_DATA_FILTERS=exports.CACHE_ITEM_LIFETIME=exports.CACHE_CLEANUP_TIMEOUT=void 0;const OFF_VARIATION_KEY=exports.OFF_VARIATION_KEY="off",WAREHOUSE_AUDIENCE_KEY=exports.WAREHOUSE_AUDIENCE_KEY="warehouseAudiences",CACHE_CLEANUP_TIMEOUT=exports.CACHE_CLEANUP_TIMEOUT=10,CACHE_ITEM_LIFETIME=exports.CACHE_ITEM_LIFETIME=5;let SdkLanguageType=exports.SdkLanguageType=function(a){return a.ANDROID="ANDROID",a.IOS="IOS",a.JAVA="JAVA",a.CSHARP="CSHARP",a.NODEJS="NODEJS",a.PHP="PHP",a.RUBY="RUBY",a.GO="GO",a.FLUTTER="FLUTTER",a.REACT="REACT",a.PYTHON="PYTHON",a.JAVASCRIPT="JAVASCRIPT",a.RUST="RUST",a}({});const DEFAULT_VISITOR_DATA_FILTERS=exports.DEFAULT_VISITOR_DATA_FILTERS={previousVisitAmount:1,currentVisit:!0,customData:!0,pageViews:!1,geolocation:!1,device:!1,browser:!1,operatingSystem:!1,conversions:!1,experiments:!1,kcs:!1,visitorCode:!0};
@@ -1 +1 @@
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"),_types=require("./types"),_utilities=require("./utilities"),_variationConfiguration=require("./variationConfiguration"),_eventSource=require("./eventSource"),_visitorCodeManager=require("./visitorCodeManager"),_eventManager=require("./eventManager"),_tracking=require("./tracking"),_logging=require("./logging");function _defineProperty(a,b,c){return(b=_toPropertyKey(b))in a?Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!0}):a[b]=c,a}function _toPropertyKey(a){var b=_toPrimitive(a,"string");return"symbol"==typeof b?b:b+""}function _toPrimitive(a,b){if("object"!=typeof a||!a)return a;var c=a[Symbol.toPrimitive];if(void 0!==c){var d=c.call(a,b||"default");if("object"!=typeof d)return d;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===b?String:Number)(a)}class KameleoonClient{constructor(a){var b;let{siteCode:c,dependencies:d,configuration:e,internalConfiguration:f}=a;_defineProperty(this,"variationConfiguration",void 0),_defineProperty(this,"clientConfiguration",void 0),_defineProperty(this,"dataManager",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,"tracker",void 0),_defineProperty(this,"environment",void 0);const g=null===f||void 0===f?void 0:f.externals.externalLogger;g&&_logging.KameleoonLogger.setLogger(g),_logging.KameleoonLogger.debug`CALL: new KameleoonClient(siteCode: ${c}, dependencies: ${d}, configuration: ${e})`;const{settings:h}=new _clientSettings.ClientSettings(c,e);this.environment=h.environment;const{externalStorage:i,externalEventSource:j,externalPackageInfo:k,externalVisitorCodeManager:l,externalRequester:m,externalPRNG:n}=f.externals,{useAbortController:o}=f.settings,p=new _cacheManager.CacheManager(_constants.CACHE_CLEANUP_TIMEOUT),q=new _storage.DataStorage(i,_storage.KameleoonStorageKey.ClientData),r=new _storage.DataStorage(i,_storage.KameleoonStorageKey.TargetingData),s=new _storage.DataStorage(i,_storage.KameleoonStorageKey.DataInfo),t=new _storage.DataStorage(i,_storage.KameleoonStorageKey.VariationData),u=new _storage.DataStorage(i,_storage.KameleoonStorageKey.ForcedExperimentVariation),v=new _storage.DataStorage(i,_storage.KameleoonStorageKey.ForcedFeatureVariation),w=new _storage.DataStorage(i,_storage.KameleoonStorageKey.ConsentData),x=new _storage.DataStorage(i,_storage.KameleoonStorageKey.TrackingData),y=new _kameleoonData.DataManager({dataStorage:r,infoStorage:s,cleanupInterval:h.cleanupInterval}),z=null!==(b=null===d||void 0===d?void 0:d.urlProvider)&&void 0!==b?b:new _requester.UrlProvider;z.initialize({domain:h.networkDomain,siteCode:h.siteCode,packageInfo:k,environment:h.environment});const A=new _requester.Requester({urlProvider:z,useAbortController:o,packageInfo:k,externalRequester:m,requestTimeout:h.requestTimeout,trackRetryDelay:h.trackRetryDelay}),B=new _eventSource.KameleoonEventSource({siteCode:h.siteCode,externalEventSource:j,urlProvider:z}),C=new _eventManager.EventManager,D=new _clientConfiguration.ClientConfiguration({urlProvider:z,storage:q,updateInterval:h.updateInterval,dataManager:y,eventManager:C,requester:A,eventSource:B,externalVisitorCodeManager:l}),E=new _variationConfiguration.VariationConfiguration(t,u,v,l,D),F=new _tracking.Tracker({dataManager:y,trackingStorage:x,variationConfiguration:E,requester:A,trackingInterval:h.trackingInterval,prng:n});this.tracker=F,this.variationConfiguration=E,this.requester=A,this.trackingCache=p,this.dataManager=y,this.clientConfiguration=D,this.externalPackageInfo=k,this.consentDataStorage=w,this.visitorCodeManager=l,this.eventManager=C,null!==h.cleanupInterval&&new _storage.StorageCleanupManager(i,h.cleanupInterval),_logging.KameleoonLogger.debug`RETURN: new KameleoonClient(siteCode: ${c}, dependencies: ${d}, configuration: ${e})`}async initialize(){_logging.KameleoonLogger.info("CALL: KameleoonClient.initialize()");const a=await this.clientConfiguration.initialize();return a.throw(),this.initialized=!0,_logging.KameleoonLogger.info`RETURN: KameleoonClient.initialize() -> (result: ${a.ok})`,a.ok}addData(a){for(var b=arguments.length,c=Array(1<b?b-1:0),d=1;d<b;d++)c[d-1]=arguments[d];if(_logging.KameleoonLogger.info`CALL: KameleoonClient.addData(visitorCode: ${a}, data: ${c})`,this.visitorCodeManager.validateVisitorCode(a).throw(),!this.initialized)throw new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.Initialization);this.dataManager.storeData(a,...c).throw(),_logging.KameleoonLogger.info`RETURN: KameleoonClient.addData(visitorCode: ${a}, data: ${c})`}async getRemoteVisitorData(a){let{visitorCode:b,shouldAddData:c=!0,filters:d=_constants.DEFAULT_VISITOR_DATA_FILTERS}=a;if(_logging.KameleoonLogger.info`CALL: KameleoonClient.getRemoteVisitorData(visitorCode: ${b}, shouldAddData: ${c}, filters: ${d})`,!this.initialized)throw new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.Initialization);this.visitorCodeManager.validateVisitorCode(b).throw();const{previousVisitAmount:e}=d;if("number"==typeof e&&(1>e||25<e))throw new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.VisitAmount);const f=this.dataManager.isUniqueIdentifier(b),g=await this.requester.getVisitorData({visitorCode:b,filters:d,isMappingIdentifier:f}),h=g.throw(),{visitorData:i,storageVisitorData:j,visitsData:k}=_utilities.Parser.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),_logging.KameleoonLogger.info`RETURN: KameleoonClient.getRemoteVisitorData(visitorCode: ${b}, shouldAddData: ${c}, filters: ${d}) -> (visitorData: ${i})`,i}trackConversion(a){let{visitorCode:b,goalId:c,revenue:d}=a;_logging.KameleoonLogger.info`CALL: KameleoonClient.trackConversion(visitorCode: ${b}, goalId: ${c}, revenue: ${d})`,this.addData(b,new _kameleoonData.Conversion({goalId:c,revenue:d})),this.flush(b),_logging.KameleoonLogger.info`RETURN: KameleoonClient.trackConversion(visitorCode: ${b}, goalId: ${c}, revenue: ${d})`}flush(a){if(_logging.KameleoonLogger.info`CALL: KameleoonClient.flush(visitorCode: ${a})`,!this.initialized)throw new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.Initialization);if("string"==typeof a)return this.visitorCodeManager.validateVisitorCode(a).throw(),this.tracker.scheduleVisitor(a,this._isConsentProvided(a)),void _logging.KameleoonLogger.info`RETURN: KameleoonClient.flush(visitorCode: ${a})`;for(const b of this.dataManager.unsentDataVisitors)this.tracker.scheduleVisitor(b,this._isConsentProvided(b));_logging.KameleoonLogger.info`RETURN: KameleoonClient.flush(visitorCode: ${a})`}getFeatureFlags(){if(_logging.KameleoonLogger.info("CALL: KameleoonClient.getFeatureFlags()"),!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})}),_logging.KameleoonLogger.info`RETURN: KameleoonClient.getFeatureFlags() -> (FeatureFlags: ${b})`,b}getVisitorFeatureFlags(a){if(_logging.KameleoonLogger.info`CALL: KameleoonClient.getVisitorFeatureFlags(visitorCode: ${a})`,!this.initialized)throw new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.Initialization);this.visitorCodeManager.validateVisitorCode(a).throw();const b=this._getActiveFeatureVariations(a),c=[];return b.forEach(a=>{let{featureFlagId:b,featureKey:d}=a;c.push({id:b,key:d})}),_logging.KameleoonLogger.info`RETURN: KameleoonClient.getVisitorFeatureFlags(visitorCode: ${a}) -> (FeatureFlags: ${c})`,c}getVariation(a){let{visitorCode:b,featureKey:c,track:d=!0}=a;_logging.KameleoonLogger.info`CALL: KameleoonClient.getVariation(visitorCode: ${b}, featureKey: ${c}, track: ${d})`,this.visitorCodeManager.validateVisitorCode(b).throw();const e=this._getFeatureVariation({visitorCode:b,featureKey:c,track:d}).throw();return _logging.KameleoonLogger.info`RETURN: KameleoonClient.getVariation(visitorCode: ${b}, featureKey: ${c}, track: ${d}) -> (variation: ${e})`,e}getVariations(a){let{visitorCode:b,onlyActive:c=!1,track:d=!0}=a;_logging.KameleoonLogger.info`CALL: KameleoonClient.getVariations(visitorCode: ${b}, onlyActive: ${c}, track: ${d})`,this.visitorCodeManager.validateVisitorCode(b).throw();const e=new Map,f=this.clientConfiguration.featureFlags;for(const g of f.values()){const a=this._getFeatureVariation({visitorCode:b,featureKey:g.featureKey,track:d});a.ok&&(!c||a.data.key!==_constants.OFF_VARIATION_KEY)&&e.set(g.featureKey,a.data)}return _logging.KameleoonLogger.info`RETURN: KameleoonClient.getVariations(visitorCode: ${b}, onlyActive: ${c}, track: ${d}) -> (variations: ${e})`,e}getActiveFeatureFlags(a){if(_logging.KameleoonLogger.info`CALL: KameleoonClient.getActiveFeatureFlags(visitorCode: ${a})`,!this.initialized)throw new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.Initialization);this.visitorCodeManager.validateVisitorCode(a).throw();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.Parser.parseFeatureVariable(a).throw());c.set(b.featureKey,{key:d,id:f,experimentId:g,variables:i})}),_logging.KameleoonLogger.info`RETURN: KameleoonClient.getActiveFeatureFlags(visitorCode: ${a}) -> (FeatureFlags: ${c})`,c}getFeatureFlagVariationKey(a,b){_logging.KameleoonLogger.info`CALL: KameleoonClient.getFeatureFlagVariationKey(visitorCode: ${a}, featureKey: ${b})`,this.visitorCodeManager.validateVisitorCode(a).throw();const{key:c}=this._getFeatureVariation({visitorCode:a,featureKey:b,track:!0}).throw();return _logging.KameleoonLogger.info`RETURN: KameleoonClient.getFeatureFlagVariationKey(visitorCode: ${a}, featureKey: ${b}) -> (variationKey: ${c})`,c}getFeatureFlagVariable(a){let{visitorCode:b,featureKey:c,variableKey:d}=a;_logging.KameleoonLogger.info`CALL: KameleoonClient.getFeatureFlagVariable(visitorCode: ${b}, featureKey: ${c}, variableKey: ${d})`,this.visitorCodeManager.validateVisitorCode(b).throw();const{key:e}=this._getFeatureVariation({visitorCode:b,featureKey:c,track:!0}).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.Parser.parseFeatureVariable(g).throw(),j={type:h,value:i};return _logging.KameleoonLogger.info`RETURN: KameleoonClient.getFeatureFlagVariable(visitorCode: ${b}, featureKey: ${c}, variableKey: ${d}) -> (FeatureFlagVariable: ${j})`,j}getFeatureFlagVariables(a,b){_logging.KameleoonLogger.info`CALL: KameleoonClient.getFeatureFlagVariables(visitorCode: ${a}, featureKey: ${b})`,this.visitorCodeManager.validateVisitorCode(a).throw();const{key:c}=this._getFeatureVariation({visitorCode:a,featureKey:b,track:!0}).throw(),d=this._getFeatureVariables({visitorCode:a,featureKey:b,variationKey:c}),e=[];for(const c of d){const a=_utilities.Parser.parseFeatureVariable(c).throw();e.push(a)}return _logging.KameleoonLogger.info`RETURN: KameleoonClient.getFeatureFlagVariables(visitorCode: ${a}, featureKey: ${b}) -> (FeatureFlagVariables: ${e})`,e}isFeatureFlagActive(a,b){let[c,d,e]=["","",!0];"string"==typeof a?(_logging.KameleoonLogger.info`CALL: KameleoonClient.isFeatureFlagActive(visitorCode: ${c}, featureKey: ${d})`,c=a,d=b):(_logging.KameleoonLogger.info`CALL: KameleoonClient.isFeatureFlagActive(visitorCode: ${c}, featureKey: ${d}, track ${e})`,[c,d]=[a.visitorCode,a.featureKey],a.track!==void 0&&(e=a.track)),this.visitorCodeManager.validateVisitorCode(c).throw();try{const{key:a}=this._getFeatureVariation({visitorCode:c,featureKey:d,track:e}).throw(),b=a!==_constants.OFF_VARIATION_KEY;return _logging.KameleoonLogger.info`RETURN: KameleoonClient.isFeatureFlagActive(visitorCode: ${c}, featureKey: ${d}, track: ${e}) -> (isActive: ${b})`,b}catch(a){if(a instanceof _kameleoonError.KameleoonError&&a.type===_kameleoonError.KameleoonException.FeatureFlagEnvironmentDisabled)return _logging.KameleoonLogger.info`RETURN: KameleoonClient.isFeatureFlagActive(visitorCode: ${c}, featureKey: ${d}, track: ${e}) -> (isActive: false)`,!1;throw a}}async getRemoteData(a){_logging.KameleoonLogger.info`CALL: KameleoonClient.getRemoteData(key: ${a})`;const b=await this.requester.getRemoteData(a);return _logging.KameleoonLogger.info`RETURN: KameleoonClient.getRemoteData(key: ${a}) -> (remoteData: ${b})`,b.throw()}async getVisitorWarehouseAudience(a){let{visitorCode:b,customDataIndex:c,warehouseKey:d}=a;_logging.KameleoonLogger.info`CALL: KameleoonClient.getVisitorWarehouseAudience(visitorCode: ${b}, customDataIndex: ${c}, warehouseKey: ${d})`,this.visitorCodeManager.validateVisitorCode(b).throw();const e=await this.getRemoteData(d||b);if(!e)throw new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.RemoteData,`No data found for ${d||b} key`);if(!e[_constants.WAREHOUSE_AUDIENCE_KEY]||0===Object.keys(e[_constants.WAREHOUSE_AUDIENCE_KEY]).length)return _logging.KameleoonLogger.info`RETURN: KameleoonClient.getVisitorWarehouseAudience(visitorCode: ${b}, customDataIndex: ${c}, warehouseKey: ${d}) -> (customData: null)`,null;const f=new _kameleoonData.CustomData(c,...Object.keys(e[_constants.WAREHOUSE_AUDIENCE_KEY]));return this.dataManager.storeData(b,f),_logging.KameleoonLogger.info`RETURN: KameleoonClient.getVisitorWarehouseAudience(visitorCode: ${b}, customDataIndex: ${c}, warehouseKey: ${d}) -> (customData: ${f})`,f}onEvent(a,b){if(_logging.KameleoonLogger.info`CALL: KameleoonClient.onEvent(event: ${a}, callback)`,!this.initialized)throw new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.Initialization);this.eventManager.addEventHandler(a,b),_logging.KameleoonLogger.info`RETURN: KameleoonClient.onEvent(event: ${a}, callback)`}getEngineTrackingCode(a){_logging.KameleoonLogger.info`CALL: KameleoonClient.getEngineTrackingCode(visitorCode: ${a})`,this.visitorCodeManager.validateVisitorCode(a).throw();const b=_utilities.Utilities.getTrackingCode(this.trackingCache,a);return _logging.KameleoonLogger.info`RETURN: KameleoonClient.getEngineTrackingCode(visitorCode: ${a}) -> (trackingCode: ${b})`,b}isInitialized(){return _logging.KameleoonLogger.debug`CALL/RETURN: KameleoonClient.isInitialized() -> (initialized: ${this.initialized})`,this.initialized}setLogLevel(a){_logging.KameleoonLogger.setLogLevel(a)}setForcedVariation(a){let{visitorCode:b,experimentId:c,variationKey:d,forceTargeting:e=!0}=a;_logging.KameleoonLogger.info`CALL: KameleoonClient.setForcedVariation(visitorCode: '${b}', experimentId: ${c}, variationKey: '${d}', forceTargeting: ${e})`,this.visitorCodeManager.validateVisitorCode(b).throw(),this._setForcedVariation({visitorCode:b,experimentId:c,variationKey:d,forceTargeting:e}).throw(),_logging.KameleoonLogger.info`RETURN: KameleoonClient.setForcedVariation(visitorCode: '${b}', experimentId: ${c}, variationKey: '${d}', forceTargeting: ${e})`}setUserConsent(a){let{visitorCode:b,consent:c,setData:d}=a;_logging.KameleoonLogger.info`CALL: KameleoonClient.setUserConsent(visitorCode: ${b}, consent: ${c}, setData: ${d})`,this.visitorCodeManager.validateVisitorCode(b).throw(),this.updateConsentData(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}),_logging.KameleoonLogger.info`RETURN: KameleoonClient.setUserConsent(visitorCode: ${b}, consent: ${c}, setData: ${d})`}updateConsentData(a,b){const c=this.consentDataStorage.read();if(!c.ok)return void(c.error.type===_kameleoonError.KameleoonException.StorageEmpty&&this.consentDataStorage.write({[a]:{consent:b}}));const d=c.data;d[a]={consent:b},this.consentDataStorage.write(d)}_isConsentProvided(a){_logging.KameleoonLogger.debug`CALL: KameleoonClient._isConsentProvided(visitorCode: ${a})`;const{isConsentRequired:b}=this.clientConfiguration,c=this.consentDataStorage.read();let d=!1;if(!b)d=!0;else if(c.ok){const b=c.data[a];d="boolean"==typeof b?b:b&&b.consent}return _logging.KameleoonLogger.debug`RETURN: KameleoonClient._isConsentProvided(visitorCode: ${a}) -> (isConsentProvided: ${d})`,d}_getFeatureVariables(a){let{visitorCode:b,featureKey:c,variationKey:d}=a;_logging.KameleoonLogger.debug`CALL: KameleoonClient._getFeatureVariables(visitorCode: ${b}, featureKey: ${c}, variationKey: ${d})`;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 _logging.KameleoonLogger.debug`RETURN: KameleoonClient._getFeatureVariables(visitorCode: ${b}, featureKey: ${c}, variationKey: ${d}) -> (variables: ${g.variables})`,g.variables}_getActiveFeatureVariations(a){_logging.KameleoonLogger.debug`CALL: KameleoonClient._getActiveFeatureVariations(visitorCode: ${a})`;const b=this.clientConfiguration.featureFlags,c=[],d=this.dataManager.getVisitorData(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 _logging.KameleoonLogger.debug`RETURN: KameleoonClient._getActiveFeatureVariations(visitorCode: ${a}) -> (activeVariations: ${c})`,c}_getFeatureVariation(a){let{visitorCode:b,featureKey:c,track:d}=a;if(_logging.KameleoonLogger.debug`CALL: KameleoonClient._getFeatureVariation(visitorCode: ${b}, featureKey: ${c}, track: ${d})`,!this.initialized)return(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.Initialization));const e=this.clientConfiguration.featureFlags,f=e.get(c);if(!f)return(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.FeatureFlagConfigurationNotFound,c));if(!f.environmentEnabled)return(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.FeatureFlagEnvironmentDisabled,f.featureKey,this.environment));let g,h=!1,i=!1;const j=this.variationConfiguration.getForcedFeatureVariation(b,c);if(j.ok){const a=j.data;if(a){var k,l;_logging.KameleoonLogger.debug`Forced variation for visitor ${b} and feature ${c} is found: ${a}`,h=!0,i=!0;let d=f.defaultVariationKey;a.varByExp?d=a.varByExp.variationKey:a.rule&&a.rule.type===_clientConfiguration.RuleType.EXPERIMENTATION&&(d=_constants.OFF_VARIATION_KEY),g={variationKey:d,variationId:(null===(k=a.varByExp)||void 0===k?void 0:k.variationId)||null,experimentId:(null===(l=a.rule)||void 0===l?void 0:l.experimentId)||null,rule:a.rule||null}}}if(!g){const a=this.dataManager.getVisitorData(b),c=this.dataManager.getVisitorIdentifier(b);g=this.variationConfiguration.getVariation({visitorCode:b,visitorIdentifier:c,featureFlag:f,track:d,withAssignment:!0,targetingData:a,clientConfiguration:this.clientConfiguration,dataManager:this.dataManager,packageInfo:this.externalPackageInfo}).throw()}h||(i&&null!==g.experimentId&&null!==g.variationId&&this.variationConfiguration.updateStoredVariations(b,{[g.experimentId]:{variationId:g.variationId,isTargetedRule:g.rule.type===_clientConfiguration.RuleType.TARGETED_DELIVERY,status:d?_types.TrackingStatus.Unsent:_types.TrackingStatus.Sent}}),this.eventManager.fireEvent(_eventManager.EventType.Evaluation,{featureKey:c,variation:{key:g.variationKey,experimentId:g.experimentId,id:g.variationId}}));const{experimentId:m,variationId:n,variationKey:o}=g;let p=new Map,q=!1;try{const a=this._getFeatureVariables({visitorCode:b,featureKey:c,variationKey:o});a.forEach(a=>{q||a.type!==_types.VariableType.JS&&a.type!==_types.VariableType.CSS||(q=!0);const b=_utilities.Parser.parseFeatureVariable(a).throw();p.set(a.key,b)})}catch(_){}m&&"number"==typeof n&&!h&&_utilities.Utilities.updateCache({cacheManager:this.trackingCache,hasJsCssVariables:q,visitorCode:b,experimentId:m,variationId:n}),d&&!h&&this.tracker.scheduleVisitor(b,this._isConsentProvided(b));return _logging.KameleoonLogger.debug`RETURN: KameleoonClient._getFeatureVariation(visitorCode: ${b}, featureKey: ${c}, track: ${d}) -> (variation: ${g})`,(0,_tsRes.Ok)({key:o,id:n,experimentId:m,variables:p})}_setForcedVariation(a){let{visitorCode:b,experimentId:c,variationKey:d,forceTargeting:e=!0}=a;if(_logging.KameleoonLogger.debug`CALL: KameleoonClient._setForcedVariation(visitorCode: '${b}', experimentId: ${c}, variationKey: '${d}', forceTargeting: ${e})`,null===d){const a=this.variationConfiguration.updateForcedExperimentVariation(b,c,null);return _logging.KameleoonLogger.debug`RETURN: KameleoonClient._setForcedVariation(visitorCode: '${b}', experimentId: ${c}, variationKey: '${d}', forceTargeting: ${e}) -> (writeResult: ${a})`,a}let f=null,g=null;if(f=this.clientConfiguration.experimentMap.get(c),!f)return _logging.KameleoonLogger.error`Experiment with id ${c} not found for visitor ${b}`,(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.FeatureFlagExperimentNotFound,c,b));if(g=f.variations.get(d),void 0===g)return _logging.KameleoonLogger.error`Variation with key ${d} not found in experiment ${f} for visitor ${b}`,(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.FeatureFlagVariationNotFound,d,b));f={type:f.type,experimentId:c},g={variationKey:d,variationId:g};const h=this.variationConfiguration.updateForcedExperimentVariation(b,c,{rule:f,varByExp:g,forceTargeting:e});return _logging.KameleoonLogger.debug`RETURN: KameleoonClient._setForcedVariation(visitorCode: '${b}', experimentId: ${c}, variationKey: '${d}', forceTargeting: ${e}) -> (writeResult: ${h})`,h}}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"),_types=require("./types"),_utilities=require("./utilities"),_variationConfiguration=require("./variationConfiguration"),_eventSource=require("./eventSource"),_visitorCodeManager=require("./visitorCodeManager"),_eventManager=require("./eventManager"),_tracking=require("./tracking"),_logging=require("./logging");function _defineProperty(a,b,c){return(b=_toPropertyKey(b))in a?Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!0}):a[b]=c,a}function _toPropertyKey(a){var b=_toPrimitive(a,"string");return"symbol"==typeof b?b:b+""}function _toPrimitive(a,b){if("object"!=typeof a||!a)return a;var c=a[Symbol.toPrimitive];if(void 0!==c){var d=c.call(a,b||"default");if("object"!=typeof d)return d;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===b?String:Number)(a)}class KameleoonClient{constructor(a){var b;let{siteCode:c,dependencies:d,configuration:e,internalConfiguration:f}=a;_defineProperty(this,"variationConfiguration",void 0),_defineProperty(this,"clientConfiguration",void 0),_defineProperty(this,"dataManager",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,"tracker",void 0),_defineProperty(this,"environment",void 0);const g=null===f||void 0===f?void 0:f.externals.externalLogger;g&&_logging.KameleoonLogger.setLogger(g),_logging.KameleoonLogger.debug`CALL: new KameleoonClient(siteCode: ${c}, dependencies: ${d}, configuration: ${e})`;const{settings:h}=new _clientSettings.ClientSettings(c,e);this.environment=h.environment;const{externalStorage:i,externalEventSource:j,externalPackageInfo:k,externalVisitorCodeManager:l,externalRequester:m,externalPRNG:n}=f.externals,{useAbortController:o}=f.settings,p=new _cacheManager.CacheManager(_constants.CACHE_CLEANUP_TIMEOUT),q=new _storage.DataStorage(i,_storage.KameleoonStorageKey.ClientData),r=new _storage.DataStorage(i,_storage.KameleoonStorageKey.TargetingData),s=new _storage.DataStorage(i,_storage.KameleoonStorageKey.DataInfo),t=new _storage.DataStorage(i,_storage.KameleoonStorageKey.VariationData),u=new _storage.DataStorage(i,_storage.KameleoonStorageKey.ForcedExperimentVariation),v=new _storage.DataStorage(i,_storage.KameleoonStorageKey.ForcedFeatureVariation),w=new _storage.DataStorage(i,_storage.KameleoonStorageKey.ConsentData),x=new _storage.DataStorage(i,_storage.KameleoonStorageKey.TrackingData),y=new _kameleoonData.DataManager({dataStorage:r,infoStorage:s,cleanupInterval:h.cleanupInterval,packageInfo:k}),z=null!==(b=null===d||void 0===d?void 0:d.urlProvider)&&void 0!==b?b:new _requester.UrlProvider;z.initialize({domain:h.networkDomain,siteCode:h.siteCode,packageInfo:k,environment:h.environment});const A=new _requester.Requester({urlProvider:z,useAbortController:o,packageInfo:k,externalRequester:m,requestTimeout:h.requestTimeout,trackRetryDelay:h.trackRetryDelay}),B=new _eventSource.KameleoonEventSource({siteCode:h.siteCode,externalEventSource:j,urlProvider:z}),C=new _eventManager.EventManager,D=new _clientConfiguration.ClientConfiguration({urlProvider:z,storage:q,updateInterval:h.updateInterval,dataManager:y,eventManager:C,requester:A,eventSource:B,externalVisitorCodeManager:l}),E=new _variationConfiguration.VariationConfiguration(t,u,v,l,D),F=new _tracking.Tracker({dataManager:y,trackingStorage:x,variationConfiguration:E,requester:A,trackingInterval:h.trackingInterval,prng:n});this.tracker=F,this.variationConfiguration=E,this.requester=A,this.trackingCache=p,this.dataManager=y,this.clientConfiguration=D,this.externalPackageInfo=k,this.consentDataStorage=w,this.visitorCodeManager=l,this.eventManager=C,null!==h.cleanupInterval&&new _storage.StorageCleanupManager(i,h.cleanupInterval),_logging.KameleoonLogger.debug`RETURN: new KameleoonClient(siteCode: ${c}, dependencies: ${d}, configuration: ${e})`}async initialize(){_logging.KameleoonLogger.info("CALL: KameleoonClient.initialize()");const a=await this.clientConfiguration.initialize();return a.throw(),this.initialized=!0,_logging.KameleoonLogger.info`RETURN: KameleoonClient.initialize() -> (result: ${a.ok})`,a.ok}addData(a){for(var b=arguments.length,c=Array(1<b?b-1:0),d=1;d<b;d++)c[d-1]=arguments[d];if(_logging.KameleoonLogger.info`CALL: KameleoonClient.addData(visitorCode: ${a}, data: ${c})`,this.visitorCodeManager.validateVisitorCode(a).throw(),!this.initialized)throw new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.Initialization);this.dataManager.storeData(a,...c).throw(),_logging.KameleoonLogger.info`RETURN: KameleoonClient.addData(visitorCode: ${a}, data: ${c})`}async getRemoteVisitorData(a){let{visitorCode:b,shouldAddData:c=!0,filters:d=_constants.DEFAULT_VISITOR_DATA_FILTERS}=a;if(_logging.KameleoonLogger.info`CALL: KameleoonClient.getRemoteVisitorData(visitorCode: ${b}, shouldAddData: ${c}, filters: ${d})`,!this.initialized)throw new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.Initialization);this.visitorCodeManager.validateVisitorCode(b).throw();const{previousVisitAmount:e}=d;if("number"==typeof e&&(1>e||25<e))throw new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.VisitAmount);const f=this.dataManager.isUniqueIdentifier(b),g=await this.requester.getVisitorData({visitorCode:b,filters:d,isMappingIdentifier:f}),h=g.throw(),{visitorData:i,storageVisitorData:j,visitsData:k,mappingIdentifier:l}=_utilities.Parser.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),null!==d&&void 0!==d&&d.visitorCode&&l&&this.dataManager.setMappingIdentifier(b,l),_logging.KameleoonLogger.info`RETURN: KameleoonClient.getRemoteVisitorData(visitorCode: ${b}, shouldAddData: ${c}, filters: ${d}) -> (visitorData: ${i})`,i}trackConversion(a){let{visitorCode:b,goalId:c,revenue:d}=a;_logging.KameleoonLogger.info`CALL: KameleoonClient.trackConversion(visitorCode: ${b}, goalId: ${c}, revenue: ${d})`,this.addData(b,new _kameleoonData.Conversion({goalId:c,revenue:d})),this.flush(b),_logging.KameleoonLogger.info`RETURN: KameleoonClient.trackConversion(visitorCode: ${b}, goalId: ${c}, revenue: ${d})`}flush(a){if(_logging.KameleoonLogger.info`CALL: KameleoonClient.flush(visitorCode: ${a})`,!this.initialized)throw new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.Initialization);if("string"==typeof a)return this.visitorCodeManager.validateVisitorCode(a).throw(),this.tracker.scheduleVisitor(a,this._isConsentProvided(a)),void _logging.KameleoonLogger.info`RETURN: KameleoonClient.flush(visitorCode: ${a})`;for(const b of this.dataManager.unsentDataVisitors)this.tracker.scheduleVisitor(b,this._isConsentProvided(b));_logging.KameleoonLogger.info`RETURN: KameleoonClient.flush(visitorCode: ${a})`}getFeatureFlags(){if(_logging.KameleoonLogger.info("CALL: KameleoonClient.getFeatureFlags()"),!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})}),_logging.KameleoonLogger.info`RETURN: KameleoonClient.getFeatureFlags() -> (FeatureFlags: ${b})`,b}getVisitorFeatureFlags(a){if(_logging.KameleoonLogger.info`CALL: KameleoonClient.getVisitorFeatureFlags(visitorCode: ${a})`,!this.initialized)throw new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.Initialization);this.visitorCodeManager.validateVisitorCode(a).throw();const b=this._getActiveFeatureVariations(a),c=[];return b.forEach(a=>{let{featureFlagId:b,featureKey:d}=a;c.push({id:b,key:d})}),_logging.KameleoonLogger.info`RETURN: KameleoonClient.getVisitorFeatureFlags(visitorCode: ${a}) -> (FeatureFlags: ${c})`,c}getVariation(a){let{visitorCode:b,featureKey:c,track:d=!0}=a;_logging.KameleoonLogger.info`CALL: KameleoonClient.getVariation(visitorCode: ${b}, featureKey: ${c}, track: ${d})`,this.visitorCodeManager.validateVisitorCode(b).throw();const e=this._getFeatureVariation({visitorCode:b,featureKey:c,track:d}).throw();return _logging.KameleoonLogger.info`RETURN: KameleoonClient.getVariation(visitorCode: ${b}, featureKey: ${c}, track: ${d}) -> (variation: ${e})`,e}getVariations(a){let{visitorCode:b,onlyActive:c=!1,track:d=!0}=a;_logging.KameleoonLogger.info`CALL: KameleoonClient.getVariations(visitorCode: ${b}, onlyActive: ${c}, track: ${d})`,this.visitorCodeManager.validateVisitorCode(b).throw();const e=new Map,f=this.clientConfiguration.featureFlags;for(const g of f.values()){const a=this._getFeatureVariation({visitorCode:b,featureKey:g.featureKey,track:d});a.ok&&(!c||a.data.key!==_constants.OFF_VARIATION_KEY)&&e.set(g.featureKey,a.data)}return _logging.KameleoonLogger.info`RETURN: KameleoonClient.getVariations(visitorCode: ${b}, onlyActive: ${c}, track: ${d}) -> (variations: ${e})`,e}getActiveFeatureFlags(a){if(_logging.KameleoonLogger.info`CALL: KameleoonClient.getActiveFeatureFlags(visitorCode: ${a})`,!this.initialized)throw new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.Initialization);this.visitorCodeManager.validateVisitorCode(a).throw();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.Parser.parseFeatureVariable(a).throw());c.set(b.featureKey,{key:d,id:f,experimentId:g,variables:i})}),_logging.KameleoonLogger.info`RETURN: KameleoonClient.getActiveFeatureFlags(visitorCode: ${a}) -> (FeatureFlags: ${c})`,c}getFeatureFlagVariationKey(a,b){_logging.KameleoonLogger.info`CALL: KameleoonClient.getFeatureFlagVariationKey(visitorCode: ${a}, featureKey: ${b})`,this.visitorCodeManager.validateVisitorCode(a).throw();const{key:c}=this._getFeatureVariation({visitorCode:a,featureKey:b,track:!0}).throw();return _logging.KameleoonLogger.info`RETURN: KameleoonClient.getFeatureFlagVariationKey(visitorCode: ${a}, featureKey: ${b}) -> (variationKey: ${c})`,c}getFeatureFlagVariable(a){let{visitorCode:b,featureKey:c,variableKey:d}=a;_logging.KameleoonLogger.info`CALL: KameleoonClient.getFeatureFlagVariable(visitorCode: ${b}, featureKey: ${c}, variableKey: ${d})`,this.visitorCodeManager.validateVisitorCode(b).throw();const{key:e}=this._getFeatureVariation({visitorCode:b,featureKey:c,track:!0}).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.Parser.parseFeatureVariable(g).throw(),j={type:h,value:i};return _logging.KameleoonLogger.info`RETURN: KameleoonClient.getFeatureFlagVariable(visitorCode: ${b}, featureKey: ${c}, variableKey: ${d}) -> (FeatureFlagVariable: ${j})`,j}getFeatureFlagVariables(a,b){_logging.KameleoonLogger.info`CALL: KameleoonClient.getFeatureFlagVariables(visitorCode: ${a}, featureKey: ${b})`,this.visitorCodeManager.validateVisitorCode(a).throw();const{key:c}=this._getFeatureVariation({visitorCode:a,featureKey:b,track:!0}).throw(),d=this._getFeatureVariables({visitorCode:a,featureKey:b,variationKey:c}),e=[];for(const c of d){const a=_utilities.Parser.parseFeatureVariable(c).throw();e.push(a)}return _logging.KameleoonLogger.info`RETURN: KameleoonClient.getFeatureFlagVariables(visitorCode: ${a}, featureKey: ${b}) -> (FeatureFlagVariables: ${e})`,e}isFeatureFlagActive(a,b){let[c,d,e]=["","",!0];"string"==typeof a?(_logging.KameleoonLogger.info`CALL: KameleoonClient.isFeatureFlagActive(visitorCode: ${c}, featureKey: ${d})`,c=a,d=b):(_logging.KameleoonLogger.info`CALL: KameleoonClient.isFeatureFlagActive(visitorCode: ${c}, featureKey: ${d}, track ${e})`,[c,d]=[a.visitorCode,a.featureKey],a.track!==void 0&&(e=a.track)),this.visitorCodeManager.validateVisitorCode(c).throw();try{const{key:a}=this._getFeatureVariation({visitorCode:c,featureKey:d,track:e}).throw(),b=a!==_constants.OFF_VARIATION_KEY;return _logging.KameleoonLogger.info`RETURN: KameleoonClient.isFeatureFlagActive(visitorCode: ${c}, featureKey: ${d}, track: ${e}) -> (isActive: ${b})`,b}catch(a){if(a instanceof _kameleoonError.KameleoonError&&a.type===_kameleoonError.KameleoonException.FeatureFlagEnvironmentDisabled)return _logging.KameleoonLogger.info`RETURN: KameleoonClient.isFeatureFlagActive(visitorCode: ${c}, featureKey: ${d}, track: ${e}) -> (isActive: false)`,!1;throw a}}async getRemoteData(a){_logging.KameleoonLogger.info`CALL: KameleoonClient.getRemoteData(key: ${a})`;const b=await this.requester.getRemoteData(a);return _logging.KameleoonLogger.info`RETURN: KameleoonClient.getRemoteData(key: ${a}) -> (remoteData: ${b})`,b.throw()}async getVisitorWarehouseAudience(a){let{visitorCode:b,customDataIndex:c,warehouseKey:d}=a;_logging.KameleoonLogger.info`CALL: KameleoonClient.getVisitorWarehouseAudience(visitorCode: ${b}, customDataIndex: ${c}, warehouseKey: ${d})`,this.visitorCodeManager.validateVisitorCode(b).throw();const e=await this.getRemoteData(d||b);if(!e)throw new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.RemoteData,`No data found for ${d||b} key`);if(!e[_constants.WAREHOUSE_AUDIENCE_KEY]||0===Object.keys(e[_constants.WAREHOUSE_AUDIENCE_KEY]).length)return _logging.KameleoonLogger.info`RETURN: KameleoonClient.getVisitorWarehouseAudience(visitorCode: ${b}, customDataIndex: ${c}, warehouseKey: ${d}) -> (customData: null)`,null;const f=new _kameleoonData.CustomData(c,...Object.keys(e[_constants.WAREHOUSE_AUDIENCE_KEY]));return this.dataManager.storeData(b,f),_logging.KameleoonLogger.info`RETURN: KameleoonClient.getVisitorWarehouseAudience(visitorCode: ${b}, customDataIndex: ${c}, warehouseKey: ${d}) -> (customData: ${f})`,f}onEvent(a,b){if(_logging.KameleoonLogger.info`CALL: KameleoonClient.onEvent(event: ${a}, callback)`,!this.initialized)throw new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.Initialization);this.eventManager.addEventHandler(a,b),_logging.KameleoonLogger.info`RETURN: KameleoonClient.onEvent(event: ${a}, callback)`}getEngineTrackingCode(a){_logging.KameleoonLogger.info`CALL: KameleoonClient.getEngineTrackingCode(visitorCode: ${a})`,this.visitorCodeManager.validateVisitorCode(a).throw();const b=_utilities.Utilities.getTrackingCode(this.trackingCache,a);return _logging.KameleoonLogger.info`RETURN: KameleoonClient.getEngineTrackingCode(visitorCode: ${a}) -> (trackingCode: ${b})`,b}isInitialized(){return _logging.KameleoonLogger.debug`CALL/RETURN: KameleoonClient.isInitialized() -> (initialized: ${this.initialized})`,this.initialized}setLogLevel(a){_logging.KameleoonLogger.setLogLevel(a)}setForcedVariation(a){let{visitorCode:b,experimentId:c,variationKey:d,forceTargeting:e=!0}=a;_logging.KameleoonLogger.info`CALL: KameleoonClient.setForcedVariation(visitorCode: '${b}', experimentId: ${c}, variationKey: '${d}', forceTargeting: ${e})`,this.visitorCodeManager.validateVisitorCode(b).throw(),this._setForcedVariation({visitorCode:b,experimentId:c,variationKey:d,forceTargeting:e}).throw(),_logging.KameleoonLogger.info`RETURN: KameleoonClient.setForcedVariation(visitorCode: '${b}', experimentId: ${c}, variationKey: '${d}', forceTargeting: ${e})`}setUserConsent(a){let{visitorCode:b,consent:c,setData:d}=a;_logging.KameleoonLogger.info`CALL: KameleoonClient.setUserConsent(visitorCode: ${b}, consent: ${c}, setData: ${d})`,this.visitorCodeManager.validateVisitorCode(b).throw(),this.updateConsentData(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}),_logging.KameleoonLogger.info`RETURN: KameleoonClient.setUserConsent(visitorCode: ${b}, consent: ${c}, setData: ${d})`}updateConsentData(a,b){const c=this.consentDataStorage.read();if(!c.ok)return void(c.error.type===_kameleoonError.KameleoonException.StorageEmpty&&this.consentDataStorage.write({[a]:{consent:b}}));const d=c.data;d[a]={consent:b},this.consentDataStorage.write(d)}_isConsentProvided(a){_logging.KameleoonLogger.debug`CALL: KameleoonClient._isConsentProvided(visitorCode: ${a})`;const{isConsentRequired:b}=this.clientConfiguration,c=this.consentDataStorage.read();let d=!1;if(!b)d=!0;else if(c.ok){const b=c.data[a];d="boolean"==typeof b?b:b&&b.consent}return _logging.KameleoonLogger.debug`RETURN: KameleoonClient._isConsentProvided(visitorCode: ${a}) -> (isConsentProvided: ${d})`,d}_getFeatureVariables(a){let{visitorCode:b,featureKey:c,variationKey:d}=a;_logging.KameleoonLogger.debug`CALL: KameleoonClient._getFeatureVariables(visitorCode: ${b}, featureKey: ${c}, variationKey: ${d})`;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 _logging.KameleoonLogger.debug`RETURN: KameleoonClient._getFeatureVariables(visitorCode: ${b}, featureKey: ${c}, variationKey: ${d}) -> (variables: ${g.variables})`,g.variables}_getActiveFeatureVariations(a){_logging.KameleoonLogger.debug`CALL: KameleoonClient._getActiveFeatureVariations(visitorCode: ${a})`;const b=this.clientConfiguration.featureFlags,c=[],d=this.dataManager.getVisitorData(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 _logging.KameleoonLogger.debug`RETURN: KameleoonClient._getActiveFeatureVariations(visitorCode: ${a}) -> (activeVariations: ${c})`,c}_getFeatureVariation(a){let{visitorCode:b,featureKey:c,track:d}=a;if(_logging.KameleoonLogger.debug`CALL: KameleoonClient._getFeatureVariation(visitorCode: ${b}, featureKey: ${c}, track: ${d})`,!this.initialized)return(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.Initialization));const e=this.clientConfiguration.featureFlags,f=e.get(c);if(!f)return(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.FeatureFlagConfigurationNotFound,c));if(!f.environmentEnabled)return(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.FeatureFlagEnvironmentDisabled,f.featureKey,this.environment));let g,h=!1,i=!1;const j=this.variationConfiguration.getForcedFeatureVariation(b,c);if(j.ok){const a=j.data;if(a){var k,l;_logging.KameleoonLogger.debug`Forced variation for visitor ${b} and feature ${c} is found: ${a}`,h=!0,i=!0;let d=f.defaultVariationKey;a.varByExp?d=a.varByExp.variationKey:a.rule&&a.rule.type===_clientConfiguration.RuleType.EXPERIMENTATION&&(d=_constants.OFF_VARIATION_KEY),g={variationKey:d,variationId:(null===(k=a.varByExp)||void 0===k?void 0:k.variationId)||null,experimentId:(null===(l=a.rule)||void 0===l?void 0:l.experimentId)||null,rule:a.rule||null}}}if(!g){const a=this.dataManager.getVisitorData(b),c=this.dataManager.getVisitorIdentifier(b);g=this.variationConfiguration.getVariation({visitorCode:b,visitorIdentifier:c,featureFlag:f,track:d,withAssignment:!0,targetingData:a,clientConfiguration:this.clientConfiguration,dataManager:this.dataManager,packageInfo:this.externalPackageInfo}).throw()}h||(i&&null!==g.experimentId&&null!==g.variationId&&this.variationConfiguration.updateStoredVariations(b,{[g.experimentId]:{variationId:g.variationId,isTargetedRule:g.rule.type===_clientConfiguration.RuleType.TARGETED_DELIVERY,status:d?_types.TrackingStatus.Unsent:_types.TrackingStatus.Sent}}),this.eventManager.fireEvent(_eventManager.EventType.Evaluation,{featureKey:c,variation:{key:g.variationKey,experimentId:g.experimentId,id:g.variationId}}));const{experimentId:m,variationId:n,variationKey:o}=g;let p=new Map,q=!1;try{const a=this._getFeatureVariables({visitorCode:b,featureKey:c,variationKey:o});a.forEach(a=>{q||a.type!==_types.VariableType.JS&&a.type!==_types.VariableType.CSS||(q=!0);const b=_utilities.Parser.parseFeatureVariable(a).throw();p.set(a.key,b)})}catch(_){}m&&"number"==typeof n&&!h&&_utilities.Utilities.updateCache({cacheManager:this.trackingCache,hasJsCssVariables:q,visitorCode:b,experimentId:m,variationId:n}),d&&!h&&this.tracker.scheduleVisitor(b,this._isConsentProvided(b));return _logging.KameleoonLogger.debug`RETURN: KameleoonClient._getFeatureVariation(visitorCode: ${b}, featureKey: ${c}, track: ${d}) -> (variation: ${g})`,(0,_tsRes.Ok)({key:o,id:n,experimentId:m,variables:p})}_setForcedVariation(a){let{visitorCode:b,experimentId:c,variationKey:d,forceTargeting:e=!0}=a;if(_logging.KameleoonLogger.debug`CALL: KameleoonClient._setForcedVariation(visitorCode: '${b}', experimentId: ${c}, variationKey: '${d}', forceTargeting: ${e})`,null===d){const a=this.variationConfiguration.updateForcedExperimentVariation(b,c,null);return _logging.KameleoonLogger.debug`RETURN: KameleoonClient._setForcedVariation(visitorCode: '${b}', experimentId: ${c}, variationKey: '${d}', forceTargeting: ${e}) -> (writeResult: ${a})`,a}let f=null,g=null;if(f=this.clientConfiguration.experimentMap.get(c),!f)return _logging.KameleoonLogger.error`Experiment with id ${c} not found for visitor ${b}`,(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.FeatureFlagExperimentNotFound,c,b));if(g=f.variations.get(d),void 0===g)return _logging.KameleoonLogger.error`Variation with key ${d} not found in experiment ${f} for visitor ${b}`,(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.FeatureFlagVariationNotFound,d,b));f={type:f.type,experimentId:c},g={variationKey:d,variationId:g};const h=this.variationConfiguration.updateForcedExperimentVariation(b,c,{rule:f,varByExp:g,forceTargeting:e});return _logging.KameleoonLogger.debug`RETURN: KameleoonClient._setForcedVariation(visitorCode: '${b}', experimentId: ${c}, variationKey: '${d}', forceTargeting: ${e}) -> (writeResult: ${h})`,h}}exports.KameleoonClient=KameleoonClient;
@@ -4,6 +4,7 @@ import { SegmentType, Tree } from '../targeting';
4
4
  import { CustomData } from './customData';
5
5
  import { DataManagerParametersType, KameleoonData, KameleoonDataType, KameleoonVisitorDataType, VisitorsDataType } from './types';
6
6
  import { CustomDataConfigurationType } from '../clientConfiguration';
7
+ import { MappingIdentifierType } from '../storage/types';
7
8
  interface IDataManager {
8
9
  storeData(data: VisitorsDataType): Result<void, KameleoonError>;
9
10
  storeTrackedData(data: VisitorsDataType): void;
@@ -31,7 +32,8 @@ export declare class DataManager implements IDataManager {
31
32
  private persistentCustomDataIndexes;
32
33
  private localCustomDataIndexes;
33
34
  private cleanupIntervalId;
34
- constructor({ dataStorage, infoStorage, cleanupInterval, }: DataManagerParametersType);
35
+ private packageInfo;
36
+ constructor({ dataStorage, infoStorage, cleanupInterval, packageInfo, }: DataManagerParametersType);
35
37
  getUnsentData(visitorCode: string): KameleoonDataType[];
36
38
  getPendingData(visitorCode: string): KameleoonDataType[];
37
39
  private getDataFromRaw;
@@ -43,6 +45,7 @@ export declare class DataManager implements IDataManager {
43
45
  isPersistentCustomData(dataItem: KameleoonDataType): dataItem is CustomData;
44
46
  isUniqueIdentifier(visitorCode: string): boolean;
45
47
  getVisitorIdentifier(visitorCode: string): string;
48
+ setMappingIdentifier(visitorCode: string, mappingIdentifier: MappingIdentifierType): void;
46
49
  getVisitorData(visitorCode: string): KameleoonVisitorDataType | undefined;
47
50
  getVisitorStoredDataTypes(visitorCode: string): Set<KameleoonData>;
48
51
  getLinkedVisitor(visitorCode: string): string | null;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.DataManager=void 0;var _targeting=require("../targeting"),_dataProcessor=require("./dataProcessor"),_customData=require("./customData"),_types=require("./types"),_storage=require("../storage"),_clientConfiguration=require("../clientConfiguration"),_utilities=require("../utilities"),_conversion=require("./conversion"),_pageView=require("./pageView"),_browser=require("./browser"),_device=require("./device"),_geolocation=require("./geolocation"),_types2=require("../types"),_operatingSystem=require("./operatingSystem"),_logging=require("../logging");function _defineProperty(a,b,c){return(b=_toPropertyKey(b))in a?Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!0}):a[b]=c,a}function _toPropertyKey(a){var b=_toPrimitive(a,"string");return"symbol"==typeof b?b:b+""}function _toPrimitive(a,b){if("object"!=typeof a||!a)return a;var c=a[Symbol.toPrimitive];if(void 0!==c){var d=c.call(a,b||"default");if("object"!=typeof d)return d;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===b?String:Number)(a)}class DataManager{constructor(a){let{dataStorage:b,infoStorage:c,cleanupInterval:d}=a;if(_defineProperty(this,"dataStorage",void 0),_defineProperty(this,"infoStorage",void 0),_defineProperty(this,"dataProcessor",void 0),_defineProperty(this,"targetingTrees",new Map),_defineProperty(this,"mappingIdentifierCustomDataIndex",null),_defineProperty(this,"persistentCustomDataIndexes",new Set),_defineProperty(this,"localCustomDataIndexes",new Set),_defineProperty(this,"cleanupIntervalId",null),_logging.KameleoonLogger.debug`CALL: new DataManager(dataStorage, infoStorage, cleanupInterval: ${d})`,this.dataStorage=b,this.infoStorage=c,this.dataProcessor=new _dataProcessor.DataProcessor(d),d){const a=()=>{this.cleanupData()};try{this.cleanupIntervalId=setInterval(a,d)}catch(a){throw this.cleanupIntervalId&&clearInterval(this.cleanupIntervalId),_logging.KameleoonLogger.error`Failed to set cleanup interval: ${d}`,a}}_logging.KameleoonLogger.debug`RETURN: new DataManager(dataStorage, infoStorage, cleanupInterval: ${d})`}getUnsentData(a){const b=this.infoStorage.read();if(!b.ok)return[];const c=b.data,d=this.getVisitorData(a);if(!c.unsentData[a]||!d)return[];const e=c.unsentData[a],f=c.nextVisitTime<=Date.now(),g=a=>{let{status:b,key:c,cdIndex:d}=a;return!!("number"==typeof d&&this.persistentCustomDataIndexes.has(d)&&f)||e.includes(c)&&b===_types2.TrackingStatus.Unsent};return f&&(c.nextVisitTime=Date.now()+_storage.VISIT_DURATION,this.infoStorage.write(c)),this.getDataFromRaw(d,g)}getPendingData(a){const b=this.getVisitorData(a);if(!b)return[];return this.getDataFromRaw(b,a=>{let{status:b}=a;return b===_types2.TrackingStatus.Pending})}getDataFromRaw(a,b){const c=[];for(const[d,e]of Object.entries(a))if(e)switch(d){case _types.KameleoonData.CustomData:{for(const a of Object.values(e)){if(!a)continue;const{status:e,index:f}=a;if(b({status:e,key:d,cdIndex:f})){const b=_customData.CustomData._fromRaw(a);c.push(b)}}break}case _types.KameleoonData.Conversion:{for(const a of Object.values(e))if(a&&b({status:a.status,key:d})){const b=_conversion.Conversion._fromRaw(a);c.push(b)}break}case _types.KameleoonData.PageView:{for(const a of Object.values(e))if(b({status:a.status,key:d})){const b=_pageView.PageView._fromRaw(a);c.push(b)}break}case _types.KameleoonData.GeolocationData:{const a=e;if(!e)continue;if(b({status:a.status,key:d})){const b=_geolocation.GeolocationData._fromRaw(a);c.push(b)}break}case _types.KameleoonData.Browser:{const a=e;if(b({status:a.status,key:d})){const b=_browser.Browser._fromRaw(a);c.push(b)}break}case _types.KameleoonData.Device:{const a=e;if(b({status:a.status,key:d})){const b=_device.Device._fromRaw(a);c.push(b)}break}case _types.KameleoonData.OperatingSystem:{const a=e;if(b({status:a.status,key:d})){const b=_operatingSystem.OperatingSystem._fromRaw(a);c.push(b)}}}return c}storeTrackedData(a){this.storeData(a);const b=this.infoStorage.read();if(b.ok){const c=b.data.unsentData;for(const[b,d]of Object.entries(a)){if(!c[b])return;const a=new Set(c[b]);d.forEach(b=>{let{data:c}=b;a.has(c.type)&&a.delete(c.type)});const e=d.some(a=>{let{data:b}=a;if(b.type!==_types.KameleoonData.CustomData)return!1;const{index:c}=b;return this.persistentCustomDataIndexes.has(c)||this.mappingIdentifierCustomDataIndex===c});e&&a.add(_types.KameleoonData.CustomData),c[b]=Array.from(a),c[b].length||delete c[b]}this.infoStorage.write(b.data)}}storeData(a){for(var b=arguments.length,c=Array(1<b?b-1:0),d=1;d<b;d++)c[d-1]=arguments[d];_logging.KameleoonLogger.debug`CALL: DataManager.storeData(visitorCode: ${a}, data: ${c})`;const e=this.dataStorage.read(),f=this.infoStorage.read();if(!e.ok)return e;if(!f.ok)return f;const g=e.data,h=f.data;if("string"==typeof a)this.mutUpdateTargetingData({infoData:h,targetingData:g,visitorCode:a,kameleoonData:c});else for(const[b,c]of Object.entries(a))this.mutUpdateTargetingData({infoData:h,targetingData:g,visitorCode:b,kameleoonData:c});this.cleanupData(),this.infoStorage.write(f.data);const i=this.dataStorage.write(g);return _logging.KameleoonLogger.debug`RETURN: DataManager.storeData(visitorCode: ${a}, data: ${c}) -> (writeResult: ${i})`,i}getTree(a){if(this.targetingTrees.has(a.id))return this.targetingTrees.get(a.id);const b=new _targeting.Tree(a);return this.targetingTrees.set(a.id,b),b}clearTrees(){this.targetingTrees.clear()}isPersistentCustomData(a){return!!this.persistentCustomDataIndexes.size&&!!_utilities.Utilities.isCustomData(a)&&this.persistentCustomDataIndexes.has(a.data.index)}isUniqueIdentifier(a){var b;const c=this.getVisitorData(a),d=null===c||void 0===c?void 0:c[_types.KameleoonData.UniqueIdentifier];return!(null===(b=null===d||void 0===d?void 0:d.value)||void 0===b)&&b}getVisitorIdentifier(a){const b=this.getVisitorData(a);if(!b)return a;const c=b[_types.KameleoonData.CustomData];if(!c||null===this.mappingIdentifierCustomDataIndex)return a;const d=c[this.mappingIdentifierCustomDataIndex];return d&&d.isIdentifier?d.value[0]:a}getVisitorData(a){this.cleanupData();const b=this.dataStorage.read();if(b.ok){const{visitorReference:c,data:d}=this.dataProcessor.dereferenceData(b.data,a);return d[c]}}getVisitorStoredDataTypes(a){const b=this.getVisitorData(a);return b?new Set(Object.keys(b)):new Set}getLinkedVisitor(a){const b=this.dataStorage.read();if(!b.ok)return null;if("string"==typeof b.data[a])return b.data[a];if(null===this.mappingIdentifierCustomDataIndex)return null;const c=b.data[a];if(!c)return null;const d=c[_types.KameleoonData.CustomData];return d&&d[this.mappingIdentifierCustomDataIndex]?d[this.mappingIdentifierCustomDataIndex].value[0]:null}mutUpdateTargetingData(a){let{infoData:b,visitorCode:c,kameleoonData:d,targetingData:e}=a;for(const f of d){f.data.type===_types.KameleoonData.CustomData&&this.processCustomData({customData:f,mutData:e,visitorCode:c});const a=this.dataProcessor.mutUpdateData({visitorCode:c,mutData:e,dataItem:f}),d=b.nextDataCleanup;(!d||d&&a<d)&&(b.nextDataCleanup=a),f.data.status===_types2.TrackingStatus.Unsent&&this.dataProcessor.mutAddUnsentData({mutData:b,visitorCode:c,dataType:f.data.type})}}cleanupData(){const a=this.dataStorage.read(),b=this.infoStorage.read();if(!a.ok||!b.ok)return;const c=a.data,d=b.data,e=d.nextDataCleanup;if(e&&e<Date.now()){const a=this.dataProcessor.mutCleanupData(c);d.nextDataCleanup=a||void 0,this.infoStorage.write(d),this.dataStorage.write(c)}}processCustomData(a){let{mutData:b,customData:c,visitorCode:d}=a;const{data:e}=c,f=!!(e.value.length&&e.value[0].length);if(this.mappingIdentifierCustomDataIndex===e.index&&f){c._isMappingIdentifier=!0;const a=e.value[0];d!==a&&(_logging.KameleoonLogger.info`Linked anonymous visitor ${d} with user ${a}`,this.dataProcessor.createReference({mutData:b,visitorCode:d,linkedVisitor:e.value[0]}))}this.localCustomDataIndexes.has(e.index)&&(c.status=_types2.TrackingStatus.Sent)}get unsentDataVisitors(){const a=this.infoStorage.read();return a.ok?Object.keys(a.data.unsentData):[]}get identifierCustomDataIndex(){return this.mappingIdentifierCustomDataIndex}get trees(){return this.targetingTrees}get storedCustomDataIndexes(){const a=this.dataStorage.read();if(!a.ok)return new Set;const b=a.data;if(!(_types.KameleoonData.CustomData in b))return new Set;const c=new Set;for(const a in Object.keys(b[_types.KameleoonData.CustomData]))c.add(+a);return c}set customDataIndexes(a){var b;const[c,d]=[[],[]];a.forEach(a=>{a.localOnly&&c.push(a.index),a.scope===_clientConfiguration.CustomDataScope.Visitor&&d.push(a.index)}),this.mappingIdentifierCustomDataIndex=(null===(b=a.find(a=>a.isMappingIdentifier))||void 0===b?void 0:b.index)||null,this.localCustomDataIndexes=new Set(c),this.persistentCustomDataIndexes=new Set(d)}}exports.DataManager=DataManager;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.DataManager=void 0;var _targeting=require("../targeting"),_dataProcessor=require("./dataProcessor"),_customData=require("./customData"),_types=require("./types"),_storage=require("../storage"),_clientConfiguration=require("../clientConfiguration"),_utilities=require("../utilities"),_conversion=require("./conversion"),_pageView=require("./pageView"),_browser=require("./browser"),_device=require("./device"),_geolocation=require("./geolocation"),_types2=require("../types"),_operatingSystem=require("./operatingSystem"),_logging=require("../logging");function _defineProperty(a,b,c){return(b=_toPropertyKey(b))in a?Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!0}):a[b]=c,a}function _toPropertyKey(a){var b=_toPrimitive(a,"string");return"symbol"==typeof b?b:b+""}function _toPrimitive(a,b){if("object"!=typeof a||!a)return a;var c=a[Symbol.toPrimitive];if(void 0!==c){var d=c.call(a,b||"default");if("object"!=typeof d)return d;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===b?String:Number)(a)}class DataManager{constructor(a){let{dataStorage:b,infoStorage:c,cleanupInterval:d,packageInfo:e}=a;if(_defineProperty(this,"dataStorage",void 0),_defineProperty(this,"infoStorage",void 0),_defineProperty(this,"dataProcessor",void 0),_defineProperty(this,"targetingTrees",new Map),_defineProperty(this,"mappingIdentifierCustomDataIndex",null),_defineProperty(this,"persistentCustomDataIndexes",new Set),_defineProperty(this,"localCustomDataIndexes",new Set),_defineProperty(this,"cleanupIntervalId",null),_defineProperty(this,"packageInfo",void 0),_logging.KameleoonLogger.debug`CALL: new DataManager(dataStorage, infoStorage, cleanupInterval: ${d})`,this.dataStorage=b,this.infoStorage=c,this.dataProcessor=new _dataProcessor.DataProcessor(d,e),this.packageInfo=e,d){const a=()=>{this.cleanupData()};try{this.cleanupIntervalId=setInterval(a,d)}catch(a){throw this.cleanupIntervalId&&clearInterval(this.cleanupIntervalId),_logging.KameleoonLogger.error`Failed to set cleanup interval: ${d}`,a}}_logging.KameleoonLogger.debug`RETURN: new DataManager(dataStorage, infoStorage, cleanupInterval: ${d})`}getUnsentData(a){const b=this.infoStorage.read();if(!b.ok)return[];const c=b.data,d=this.getVisitorData(a);if(!c.unsentData[a]||!d)return[];const e=c.unsentData[a],f=c.nextVisitTime<=Date.now(),g=a=>{let{status:b,key:c,cdIndex:d}=a;return!!("number"==typeof d&&this.persistentCustomDataIndexes.has(d)&&f)||e.includes(c)&&b===_types2.TrackingStatus.Unsent};return f&&(c.nextVisitTime=Date.now()+_storage.VISIT_DURATION,this.infoStorage.write(c)),this.getDataFromRaw(d,g)}getPendingData(a){const b=this.getVisitorData(a);if(!b)return[];return this.getDataFromRaw(b,a=>{let{status:b}=a;return b===_types2.TrackingStatus.Pending})}getDataFromRaw(a,b){const c=[];for(const[d,e]of Object.entries(a))if(e)switch(d){case _types.KameleoonData.CustomData:{for(const a of Object.values(e)){if(!a)continue;const{status:e,index:f}=a;if(b({status:e,key:d,cdIndex:f})){const b=_customData.CustomData._fromRaw(a);c.push(b)}}break}case _types.KameleoonData.Conversion:{for(const a of Object.values(e))if(a&&b({status:a.status,key:d})){const b=_conversion.Conversion._fromRaw(a);c.push(b)}break}case _types.KameleoonData.PageView:{for(const a of Object.values(e))if(b({status:a.status,key:d})){const b=_pageView.PageView._fromRaw(a);c.push(b)}break}case _types.KameleoonData.GeolocationData:{const a=e;if(!e)continue;if(b({status:a.status,key:d})){const b=_geolocation.GeolocationData._fromRaw(a);c.push(b)}break}case _types.KameleoonData.Browser:{const a=e;if(b({status:a.status,key:d})){const b=_browser.Browser._fromRaw(a);c.push(b)}break}case _types.KameleoonData.Device:{const a=e;if(b({status:a.status,key:d})){const b=_device.Device._fromRaw(a);c.push(b)}break}case _types.KameleoonData.OperatingSystem:{const a=e;if(b({status:a.status,key:d})){const b=_operatingSystem.OperatingSystem._fromRaw(a);c.push(b)}}}return c}storeTrackedData(a){this.storeData(a);const b=this.infoStorage.read();if(b.ok){const c=b.data.unsentData;for(const[b,d]of Object.entries(a)){if(!c[b])return;const a=new Set(c[b]);d.forEach(b=>{let{data:c}=b;a.has(c.type)&&a.delete(c.type)});const e=d.some(a=>{let{data:b}=a;if(b.type!==_types.KameleoonData.CustomData)return!1;const{index:c}=b;return this.persistentCustomDataIndexes.has(c)||this.mappingIdentifierCustomDataIndex===c});e&&a.add(_types.KameleoonData.CustomData),c[b]=Array.from(a),c[b].length||delete c[b]}this.infoStorage.write(b.data)}}storeData(a){for(var b=arguments.length,c=Array(1<b?b-1:0),d=1;d<b;d++)c[d-1]=arguments[d];_logging.KameleoonLogger.debug`CALL: DataManager.storeData(visitorCode: ${a}, data: ${c})`;const e=this.dataStorage.read(),f=this.infoStorage.read();if(!e.ok)return e;if(!f.ok)return f;const g=e.data,h=f.data;if("string"==typeof a)this.mutUpdateTargetingData({infoData:h,targetingData:g,visitorCode:a,kameleoonData:c});else for(const[b,c]of Object.entries(a))this.mutUpdateTargetingData({infoData:h,targetingData:g,visitorCode:b,kameleoonData:c});this.cleanupData(),this.infoStorage.write(f.data);const i=this.dataStorage.write(g);return _logging.KameleoonLogger.debug`RETURN: DataManager.storeData(visitorCode: ${a}, data: ${c}) -> (writeResult: ${i})`,i}getTree(a){if(this.targetingTrees.has(a.id))return this.targetingTrees.get(a.id);const b=new _targeting.Tree(a);return this.targetingTrees.set(a.id,b),b}clearTrees(){this.targetingTrees.clear()}isPersistentCustomData(a){return!!this.persistentCustomDataIndexes.size&&!!_utilities.Utilities.isCustomData(a)&&this.persistentCustomDataIndexes.has(a.data.index)}isUniqueIdentifier(a){var b;const c=this.getVisitorData(a),d=null===c||void 0===c?void 0:c[_types.KameleoonData.UniqueIdentifier];return!(null===(b=null===d||void 0===d?void 0:d.value)||void 0===b)&&b}getVisitorIdentifier(a){var b,c,d;const e=this.infoStorage.read();if(!e.ok)return a;const f=e.data;return null!==(b=f.mappingIdentifiers)&&void 0!==b?b:f.mappingIdentifiers={},null!==(c=null===(d=f.mappingIdentifiers[a])||void 0===d?void 0:d.mappingIdentifier)&&void 0!==c?c:a}setMappingIdentifier(a,b){var c;const d=this.infoStorage.read();if(d.ok){const e=d.data;null!==(c=e.mappingIdentifiers)&&void 0!==c?c:e.mappingIdentifiers={};const f=e.mappingIdentifiers[a];(!f||f.timestamp<b.timestamp)&&(e.mappingIdentifiers[a]=b,this.infoStorage.write(e))}}getVisitorData(a){this.cleanupData();const b=this.dataStorage.read();if(!b.ok)return;let{visitorReference:c,data:d,isReference:e}=this.dataProcessor.dereferenceData(b.data,a);if(this.packageInfo.isServer&&e&&!d[c]){const b=this.infoStorage.read();b.ok&&b.data.mappingIdentifiers&&delete b.data.mappingIdentifiers[a],delete d[a],c=a}return d[c]}getVisitorStoredDataTypes(a){const b=this.getVisitorData(a);return b?new Set(Object.keys(b)):new Set}getLinkedVisitor(a){const b=this.dataStorage.read();if(!b.ok)return null;if("string"==typeof b.data[a])return b.data[a];if(null===this.mappingIdentifierCustomDataIndex)return null;const c=b.data[a];if(!c)return null;const d=c[_types.KameleoonData.CustomData];return d&&d[this.mappingIdentifierCustomDataIndex]?d[this.mappingIdentifierCustomDataIndex].value[0]:null}mutUpdateTargetingData(a){let{infoData:b,visitorCode:c,kameleoonData:d,targetingData:e}=a;for(const f of d){f.data.type===_types.KameleoonData.CustomData&&this.processCustomData({infoData:b,customData:f,mutData:e,visitorCode:c});const a=this.dataProcessor.mutUpdateData({infoData:b,visitorCode:c,mutData:e,dataItem:f}),d=b.nextDataCleanup;(!d||d&&a<d)&&(b.nextDataCleanup=a),f.data.status===_types2.TrackingStatus.Unsent&&this.dataProcessor.mutAddUnsentData({mutData:b,visitorCode:c,dataType:f.data.type})}}cleanupData(){const a=this.dataStorage.read(),b=this.infoStorage.read();if(!a.ok||!b.ok)return;const c=a.data,d=b.data,e=d.nextDataCleanup;if(e&&e<Date.now()){const a=this.dataProcessor.mutCleanupData(c,d);d.nextDataCleanup=a||void 0,this.infoStorage.write(d),this.dataStorage.write(c)}}processCustomData(a){let{infoData:b,mutData:c,customData:d,visitorCode:e}=a;const{data:f}=d,g=!!(f.value.length&&f.value[0].length);if(this.mappingIdentifierCustomDataIndex===f.index&&g){d._isMappingIdentifier=!0;const a=f.value[0];if(e!==a){var h;_logging.KameleoonLogger.info`Linked anonymous visitor ${e} with user ${a}`,this.dataProcessor.createReference({infoData:b,mutData:c,visitorCode:e,linkedVisitor:f.value[0]}),null!==(h=b.mappingIdentifiers)&&void 0!==h?h:b.mappingIdentifiers={},b.mappingIdentifiers[a]={mappingIdentifier:e,timestamp:Date.now()}}}this.localCustomDataIndexes.has(f.index)&&(d.status=_types2.TrackingStatus.Sent)}get unsentDataVisitors(){const a=this.infoStorage.read();return a.ok?Object.keys(a.data.unsentData):[]}get identifierCustomDataIndex(){return this.mappingIdentifierCustomDataIndex}get trees(){return this.targetingTrees}get storedCustomDataIndexes(){const a=this.dataStorage.read();if(!a.ok)return new Set;const b=a.data;if(!(_types.KameleoonData.CustomData in b))return new Set;const c=new Set;for(const a in Object.keys(b[_types.KameleoonData.CustomData]))c.add(+a);return c}set customDataIndexes(a){var b;const[c,d]=[[],[]];a.forEach(a=>{a.localOnly&&c.push(a.index),a.scope===_clientConfiguration.CustomDataScope.Visitor&&d.push(a.index)}),this.mappingIdentifierCustomDataIndex=(null===(b=a.find(a=>a.isMappingIdentifier))||void 0===b?void 0:b.index)||null,this.localCustomDataIndexes=new Set(c),this.persistentCustomDataIndexes=new Set(d)}}exports.DataManager=DataManager;
@@ -1,20 +1,23 @@
1
1
  import { TargetingDataType } from '../targeting';
2
2
  import { DereferenceTargetingDataResultType, MutAddUnsentDataType, MutUpdateDataParametersType, ReferenceParametersType } from './types';
3
+ import { DataInfoType } from '../storage';
4
+ import { ExternalPackageInfoType } from '../types';
3
5
  interface IDataProcessor {
4
6
  mutUpdateData({ visitorCode, mutData, dataItem, }: MutUpdateDataParametersType): number;
5
- mutCleanupData(mutData: TargetingDataType): number | null;
6
- createReference({ mutData, visitorCode, linkedVisitor, }: ReferenceParametersType): void;
7
+ mutCleanupData(mutData: TargetingDataType, infoData: DataInfoType): number | null;
8
+ createReference({ mutData, visitorCode, linkedVisitor, infoData, }: ReferenceParametersType): void;
7
9
  dereferenceData(data: TargetingDataType, visitorCode: string): DereferenceTargetingDataResultType;
8
10
  mutAddUnsentData({ mutData, visitorCode, dataType, }: MutAddUnsentDataType): void;
9
11
  }
10
12
  export declare class DataProcessor implements IDataProcessor {
11
13
  private cleanupInterval;
12
- constructor(cleanupInterval?: number | null);
13
- mutUpdateData({ visitorCode, mutData, dataItem, }: MutUpdateDataParametersType): number;
14
- mutCleanupData(mutData: TargetingDataType): number | null;
14
+ private packageInfo;
15
+ constructor(cleanupInterval: number | null | undefined, packageInfo: ExternalPackageInfoType);
16
+ mutUpdateData({ infoData, visitorCode, mutData, dataItem, }: MutUpdateDataParametersType): number;
17
+ mutCleanupData(mutData: TargetingDataType, infoData: DataInfoType): number | null;
15
18
  mutAddUnsentData({ mutData, visitorCode, dataType, }: MutAddUnsentDataType): void;
16
19
  createReference({ mutData, visitorCode, linkedVisitor, }: ReferenceParametersType): void;
17
- removeReference({ mutData, visitorCode, linkedVisitor, }: ReferenceParametersType): void;
20
+ removeReference({ mutData, visitorCode, linkedVisitor, infoData, }: ReferenceParametersType): void;
18
21
  private updatePageView;
19
22
  private updateCustomData;
20
23
  private updateConversion;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.DataProcessor=void 0;var _utilities=require("../utilities"),_types=require("./types");function ownKeys(a,b){var c=Object.keys(a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(a);b&&(d=d.filter(function(b){return Object.getOwnPropertyDescriptor(a,b).enumerable})),c.push.apply(c,d)}return c}function _objectSpread(a){for(var b,c=1;c<arguments.length;c++)b=null==arguments[c]?{}:arguments[c],c%2?ownKeys(Object(b),!0).forEach(function(c){_defineProperty(a,c,b[c])}):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(b)):ownKeys(Object(b)).forEach(function(c){Object.defineProperty(a,c,Object.getOwnPropertyDescriptor(b,c))});return a}function _defineProperty(a,b,c){return(b=_toPropertyKey(b))in a?Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!0}):a[b]=c,a}function _toPropertyKey(a){var b=_toPrimitive(a,"string");return"symbol"==typeof b?b:b+""}function _toPrimitive(a,b){if("object"!=typeof a||!a)return a;var c=a[Symbol.toPrimitive];if(void 0!==c){var d=c.call(a,b||"default");if("object"!=typeof d)return d;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===b?String:Number)(a)}class DataProcessor{constructor(){let a=0<arguments.length&&arguments[0]!==void 0?arguments[0]:null;_defineProperty(this,"cleanupInterval",void 0),this.cleanupInterval=a}mutUpdateData(a){let{visitorCode:b,mutData:c,dataItem:d}=a;const{visitorReference:e,data:f}=this.dereferenceData(c,b),g=this.cleanupInterval?Date.now()+this.cleanupInterval:0;switch(d.data.type){case _types.KameleoonData.CustomData:{this.updateCustomData({expirationTime:g,customData:d,visitorCode:e,mutData:f});break}case _types.KameleoonData.PageView:{this.updatePageView({expirationTime:g,pageView:d,visitorCode:e,mutData:f});break}case _types.KameleoonData.Conversion:{this.updateConversion({expirationTime:g,conversion:d,visitorCode:e,mutData:f});break}case _types.KameleoonData.VisitsData:{this.updateVisitsData({expirationTime:g,visitsData:d,visitorCode:e,mutData:f});break}default:this.updateCommonData({expirationTime:g,commonData:d,visitorCode:e,mutData:f})}return g}mutCleanupData(a){if(!this.cleanupInterval)return null;let b=0;for(const[c,d]of Object.entries(a)){if("string"==typeof d){this.removeReference({mutData:a,visitorCode:c,linkedVisitor:d});continue}let e=0;for(const a of Object.keys(d)){const b=a;let c;switch(b){case _types.KameleoonData.CustomData:case _types.KameleoonData.PageView:case _types.KameleoonData.Conversion:{c=this.deleteNestedExpiredField(d,b);break}default:c=this.deleteExpiredField(d,b)}(!e||c&&c<e)&&(e=c)}Object.keys(a[c]).length?(!b||e&&e<b)&&(b=e):delete a[c]}return b}mutAddUnsentData(a){let{mutData:b,visitorCode:c,dataType:d}=a;const e=b.unsentData[c];if(!e||!e.length)b.unsentData[c]=[d];else{const a=new Set([...e]);a.add(d),b.unsentData[c]=Array.from(a)}}createReference(a){let{mutData:b,visitorCode:c,linkedVisitor:d}=a;b[d]=c}removeReference(a){let{mutData:b,visitorCode:c,linkedVisitor:d}=a;b[d]||delete b[c]}updatePageView(a){let{visitorCode:b,mutData:c,pageView:d,expirationTime:e}=a;const{data:f}=d,g=c[b]&&_types.KameleoonData.PageView in c[b]&&f.urlAddress in c[b][_types.KameleoonData.PageView],h={expirationTime:e,visitorCode:b,data:c,key:_types.KameleoonData.PageView,nestedKey:f.urlAddress,value:f};if(g){const a=c[b][_types.KameleoonData.PageView][f.urlAddress],d=a.timestamps;for(const a of d){const{time:b}=a;if(f.timestamps.some(a=>{let{time:c}=a;return c===b}))continue;const c=f.timestamps.findIndex(a=>{let{time:c}=a;return c>=b});-1===c?f.timestamps.push(a):f.timestamps.splice(c,0,a)}this.updateNestedField(h)}else this.createNestedField(h)}updateCustomData(a){let{visitorCode:b,customData:c,mutData:d,expirationTime:e}=a;const{data:f}=c,g=d[b]&&_types.KameleoonData.CustomData in d[b],h={expirationTime:e,visitorCode:b,data:d,key:_types.KameleoonData.CustomData,nestedKey:f.index.toString(),value:f};g?this.updateNestedField(h):this.createNestedField(h)}updateConversion(a){let{conversion:b,mutData:c,visitorCode:d,expirationTime:e}=a;const{data:f}=b,g=c[d]&&_types.KameleoonData.Conversion in c[d],h={expirationTime:e,visitorCode:d,data:c,key:_types.KameleoonData.Conversion,nestedKey:f.id.toString(),value:f};g?this.updateNestedField(h):this.createNestedField(h)}updateVisitsData(a){let{visitorCode:b,mutData:c,visitsData:d,expirationTime:e}=a;const{data:f}=d,g=c[b]&&_types.KameleoonData.VisitsData in c[b],h={expirationTime:e,data:c,key:_types.KameleoonData.VisitsData,value:f,visitorCode:b};if(g){const a=c[b][_types.KameleoonData.VisitsData];a.visits.forEach(a=>{_utilities.Utilities.insertInOrderedListMutably({list:f.visits,element:a,order:_utilities.Order.Ascending})}),this.updateField(_objectSpread(_objectSpread({},h),{},{value:_objectSpread(_objectSpread({},f),{},{visits:f.visits})}))}else this.createField(h)}updateCommonData(a){let{visitorCode:b,mutData:c,commonData:d,expirationTime:e}=a;const{data:f}=d,g=c[b]&&f.type in c[b],h={expirationTime:e,data:c,key:f.type,visitorCode:b,value:f};g?this.updateField(h):this.createField(h)}dereferenceData(a,b){return"string"==typeof a[b]?{visitorReference:a[b],data:a}:{visitorReference:b,data:a}}deleteExpiredField(a,b){if(!a)return 0;const c=b,d=a[c].expirationTime<Date.now();return d?(delete a[c],0):a[c].expirationTime}deleteNestedExpiredField(a,b){if(!a[b])return 0;const c=a[b];let d;for(const[e,f]of Object.entries(c)){if(!f)continue;const a=f.expirationTime<Date.now();a?delete c[e]:(!d||f.expirationTime<d)&&(d=f.expirationTime)}return Object.keys(c).length||delete a[b],d}updateField(a){let{key:b,value:c,data:d,visitorCode:e,expirationTime:f}=a;d[e][b]=_objectSpread(_objectSpread({},c),{},{expirationTime:f})}createField(a){let{key:b,value:c,data:d,visitorCode:e,expirationTime:f}=a;d[e]=_objectSpread(_objectSpread({},d[e]),{},{[b]:_objectSpread(_objectSpread({},c),{},{expirationTime:f})})}updateNestedField(a){let{key:b,nestedKey:c,value:d,data:e,visitorCode:f,expirationTime:g}=a;e[f][b][c]=_objectSpread(_objectSpread({},d),{},{expirationTime:g})}createNestedField(a){var b;let{key:c,nestedKey:d,value:e,data:f,visitorCode:g,expirationTime:h}=a;f[g]=null!==(b=f[g])&&void 0!==b&&b[c]?_objectSpread(_objectSpread({},f[g]),{},{[c]:_objectSpread(_objectSpread({},f[g][c]),{},{[d]:_objectSpread(_objectSpread({},e),{},{expirationTime:h})})}):_objectSpread(_objectSpread({},f[g]),{},{[c]:{[d]:_objectSpread(_objectSpread({},e),{},{expirationTime:h})}})}}exports.DataProcessor=DataProcessor;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.DataProcessor=void 0;var _utilities=require("../utilities"),_types=require("./types");function ownKeys(a,b){var c=Object.keys(a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(a);b&&(d=d.filter(function(b){return Object.getOwnPropertyDescriptor(a,b).enumerable})),c.push.apply(c,d)}return c}function _objectSpread(a){for(var b,c=1;c<arguments.length;c++)b=null==arguments[c]?{}:arguments[c],c%2?ownKeys(Object(b),!0).forEach(function(c){_defineProperty(a,c,b[c])}):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(b)):ownKeys(Object(b)).forEach(function(c){Object.defineProperty(a,c,Object.getOwnPropertyDescriptor(b,c))});return a}function _defineProperty(a,b,c){return(b=_toPropertyKey(b))in a?Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!0}):a[b]=c,a}function _toPropertyKey(a){var b=_toPrimitive(a,"string");return"symbol"==typeof b?b:b+""}function _toPrimitive(a,b){if("object"!=typeof a||!a)return a;var c=a[Symbol.toPrimitive];if(void 0!==c){var d=c.call(a,b||"default");if("object"!=typeof d)return d;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===b?String:Number)(a)}class DataProcessor{constructor(){let a=0<arguments.length&&arguments[0]!==void 0?arguments[0]:null,b=1<arguments.length?arguments[1]:void 0;_defineProperty(this,"cleanupInterval",void 0),_defineProperty(this,"packageInfo",void 0),this.cleanupInterval=a,this.packageInfo=b}mutUpdateData(a){let{infoData:b,visitorCode:c,mutData:d,dataItem:e}=a,{visitorReference:f,data:g,isReference:h}=this.dereferenceData(d,c);this.packageInfo.isServer&&h&&!d[f]&&(b.mappingIdentifiers&&delete b.mappingIdentifiers[c],delete d[c],f=c);const i=this.cleanupInterval?Date.now()+this.cleanupInterval:0;switch(e.data.type){case _types.KameleoonData.CustomData:{this.updateCustomData({expirationTime:i,customData:e,visitorCode:f,mutData:g});break}case _types.KameleoonData.PageView:{this.updatePageView({expirationTime:i,pageView:e,visitorCode:f,mutData:g});break}case _types.KameleoonData.Conversion:{this.updateConversion({expirationTime:i,conversion:e,visitorCode:f,mutData:g});break}case _types.KameleoonData.VisitsData:{this.updateVisitsData({expirationTime:i,visitsData:e,visitorCode:f,mutData:g});break}default:this.updateCommonData({expirationTime:i,commonData:e,visitorCode:f,mutData:g})}return i}mutCleanupData(a,b){if(!this.cleanupInterval)return null;let c=0;for(const[e,f]of Object.entries(a)){if("string"==typeof f){this.removeReference({mutData:a,visitorCode:e,linkedVisitor:f,infoData:b});continue}let g=0;for(const a of Object.keys(f)){const b=a;let c;switch(b){case _types.KameleoonData.CustomData:case _types.KameleoonData.PageView:case _types.KameleoonData.Conversion:{c=this.deleteNestedExpiredField(f,b);break}default:c=this.deleteExpiredField(f,b)}(!g||c&&c<g)&&(g=c)}if(!!Object.keys(a[e]).length)(!c||g&&g<c)&&(c=g);else if(delete a[e],this.packageInfo.isServer){var d;null!==(d=b.mappingIdentifiers)&&void 0!==d?d:b.mappingIdentifiers={},delete b.mappingIdentifiers[e]}}return c}mutAddUnsentData(a){let{mutData:b,visitorCode:c,dataType:d}=a;const e=b.unsentData[c];if(!e||!e.length)b.unsentData[c]=[d];else{const a=new Set([...e]);a.add(d),b.unsentData[c]=Array.from(a)}}createReference(a){let{mutData:b,visitorCode:c,linkedVisitor:d}=a;b[d]=c}removeReference(a){let{mutData:b,visitorCode:c,linkedVisitor:d,infoData:e}=a;this.packageInfo.isServer&&!b[d]&&(delete b[c],e.mappingIdentifiers&&delete e.mappingIdentifiers[c])}updatePageView(a){let{visitorCode:b,mutData:c,pageView:d,expirationTime:e}=a;const{data:f}=d,g=c[b]&&_types.KameleoonData.PageView in c[b]&&f.urlAddress in c[b][_types.KameleoonData.PageView],h={expirationTime:e,visitorCode:b,data:c,key:_types.KameleoonData.PageView,nestedKey:f.urlAddress,value:f};if(g){const a=c[b][_types.KameleoonData.PageView][f.urlAddress],d=a.timestamps;for(const a of d){const{time:b}=a;if(f.timestamps.some(a=>{let{time:c}=a;return c===b}))continue;const c=f.timestamps.findIndex(a=>{let{time:c}=a;return c>=b});-1===c?f.timestamps.push(a):f.timestamps.splice(c,0,a)}this.updateNestedField(h)}else this.createNestedField(h)}updateCustomData(a){let{visitorCode:b,customData:c,mutData:d,expirationTime:e}=a;const{data:f}=c,g=d[b]&&_types.KameleoonData.CustomData in d[b],h={expirationTime:e,visitorCode:b,data:d,key:_types.KameleoonData.CustomData,nestedKey:f.index.toString(),value:f};g?this.updateNestedField(h):this.createNestedField(h)}updateConversion(a){let{conversion:b,mutData:c,visitorCode:d,expirationTime:e}=a;const{data:f}=b,g=c[d]&&_types.KameleoonData.Conversion in c[d],h={expirationTime:e,visitorCode:d,data:c,key:_types.KameleoonData.Conversion,nestedKey:f.id.toString(),value:f};g?this.updateNestedField(h):this.createNestedField(h)}updateVisitsData(a){let{visitorCode:b,mutData:c,visitsData:d,expirationTime:e}=a;const{data:f}=d,g=c[b]&&_types.KameleoonData.VisitsData in c[b],h={expirationTime:e,data:c,key:_types.KameleoonData.VisitsData,value:f,visitorCode:b};if(g){const a=c[b][_types.KameleoonData.VisitsData];a.visits.forEach(a=>{_utilities.Utilities.insertInOrderedListMutably({list:f.visits,element:a,order:_utilities.Order.Ascending})}),this.updateField(_objectSpread(_objectSpread({},h),{},{value:_objectSpread(_objectSpread({},f),{},{visits:f.visits})}))}else this.createField(h)}updateCommonData(a){let{visitorCode:b,mutData:c,commonData:d,expirationTime:e}=a;const{data:f}=d,g=c[b]&&f.type in c[b],h={expirationTime:e,data:c,key:f.type,visitorCode:b,value:f};g?this.updateField(h):this.createField(h)}dereferenceData(a,b){return"string"==typeof a[b]?{visitorReference:a[b],data:a,isReference:!0}:{visitorReference:b,data:a,isReference:!1}}deleteExpiredField(a,b){if(!a)return 0;const c=b,d=a[c].expirationTime<Date.now();return d?(delete a[c],0):a[c].expirationTime}deleteNestedExpiredField(a,b){if(!a[b])return 0;const c=a[b];let d;for(const[e,f]of Object.entries(c)){if(!f)continue;const a=f.expirationTime<Date.now();a?delete c[e]:(!d||f.expirationTime<d)&&(d=f.expirationTime)}return Object.keys(c).length||delete a[b],d}updateField(a){let{key:b,value:c,data:d,visitorCode:e,expirationTime:f}=a;d[e][b]=_objectSpread(_objectSpread({},c),{},{expirationTime:f})}createField(a){let{key:b,value:c,data:d,visitorCode:e,expirationTime:f}=a;d[e]=_objectSpread(_objectSpread({},d[e]),{},{[b]:_objectSpread(_objectSpread({},c),{},{expirationTime:f})})}updateNestedField(a){let{key:b,nestedKey:c,value:d,data:e,visitorCode:f,expirationTime:g}=a;e[f][b][c]=_objectSpread(_objectSpread({},d),{},{expirationTime:g})}createNestedField(a){var b;let{key:c,nestedKey:d,value:e,data:f,visitorCode:g,expirationTime:h}=a;f[g]=null!==(b=f[g])&&void 0!==b&&b[c]?_objectSpread(_objectSpread({},f[g]),{},{[c]:_objectSpread(_objectSpread({},f[g][c]),{},{[d]:_objectSpread(_objectSpread({},e),{},{expirationTime:h})})}):_objectSpread(_objectSpread({},f[g]),{},{[c]:{[d]:_objectSpread(_objectSpread({},e),{},{expirationTime:h})}})}}exports.DataProcessor=DataProcessor;
@@ -2,7 +2,7 @@ import { DereferencedTargetingDataType, TargetingDataType, VisitorReference } fr
2
2
  import { DataInfoType, FeatureFlagVariationsType, IStorage } from '../storage';
3
3
  import { Browser, Conversion, Cookie, CustomData, Device, GeolocationData, OperatingSystem, PageView, UserAgent, ApplicationVersion, VisitsData, KameleoonConversionScore, DataManager, UniqueIdentifier } from '../kameleoonData';
4
4
  import { VisitorDataFiltersType } from '../utilities';
5
- import { TrackingStatus } from '../types';
5
+ import { ExternalPackageInfoType, TrackingStatus } from '../types';
6
6
  export type FieldParametersType = {
7
7
  expirationTime: number;
8
8
  key: KameleoonData;
@@ -36,11 +36,13 @@ export type MutAddUnsentDataType = {
36
36
  export type DereferenceTargetingDataResultType = {
37
37
  data: DereferencedTargetingDataType;
38
38
  visitorReference: string;
39
+ isReference: boolean;
39
40
  };
40
41
  export type DataManagerParametersType = {
41
42
  cleanupInterval: number | null;
42
43
  dataStorage: IStorage<TargetingDataType>;
43
44
  infoStorage: IStorage<DataInfoType>;
45
+ packageInfo: ExternalPackageInfoType;
44
46
  };
45
47
  export type KameleoonDataItemType = IdentifierDataType | BrowserDataType | ConversionDataType | CustomDataType | DeviceDataType | PageViewDataType | UserAgentDataType | CookieDataType | GeolocationDataType | OperatingSystemDataType | ApplicationVersionDataType | KCSDataType | VisitsDataType;
46
48
  /**
@@ -123,6 +125,7 @@ export type UpdateCustomDataParametersType = {
123
125
  customData: CustomData;
124
126
  } & CommonUpdateParametersType;
125
127
  export type ProcessCustomDataManagerParametersType = {
128
+ infoData: DataInfoType;
126
129
  mutData: TargetingDataType;
127
130
  customData: CustomData;
128
131
  visitorCode: string;
@@ -140,6 +143,7 @@ export type UpdatePageViewParametersType = {
140
143
  pageView: PageView;
141
144
  } & CommonUpdateParametersType;
142
145
  export type MutUpdateDataParametersType = {
146
+ infoData: DataInfoType;
143
147
  mutData: TargetingDataType;
144
148
  dataItem: KameleoonDataType;
145
149
  visitorCode: string;
@@ -154,6 +158,7 @@ export type ReferenceParametersType = {
154
158
  mutData: TargetingDataType;
155
159
  visitorCode: string;
156
160
  linkedVisitor: VisitorReference;
161
+ infoData: DataInfoType;
157
162
  };
158
163
  type SharedDataPropertiesType = {
159
164
  type: KameleoonData;
@@ -1,9 +1,11 @@
1
1
  import { VisitType } from '../requester';
2
2
  import { VisitProcessorDataType, KCSType, VisitorProcessorParametersType } from './types';
3
+ import { MappingIdentifierType } from "../storage/types";
3
4
  interface IVisitProcessor {
4
5
  processVisit(visit: VisitType): void;
5
6
  processKcs(kcsData?: KCSType): void;
6
7
  processMultipleDataTypes(): void;
8
+ processMappingIdentifier(visit?: VisitType): MappingIdentifierType | undefined;
7
9
  }
8
10
  export declare class VisitProcessor implements IVisitProcessor {
9
11
  private visitsData;
@@ -29,5 +31,6 @@ export declare class VisitProcessor implements IVisitProcessor {
29
31
  private processPageView;
30
32
  private processExperiments;
31
33
  private processVisitsData;
34
+ processMappingIdentifier(visit?: VisitType): MappingIdentifierType | undefined;
32
35
  }
33
36
  export {};
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.VisitProcessor=void 0;var _pageView=require("./pageView"),_types=require("./types"),_customData=require("./customData"),_conversion=require("./conversion"),_browser=require("./browser"),_device=require("./device"),_operatingSystem=require("./operatingSystem"),_geolocation=require("./geolocation"),_visitsData=require("./visitsData"),_kameleoonConversionScore=require("./kameleoonConversionScore"),_types2=require("../types");function _defineProperty(a,b,c){return(b=_toPropertyKey(b))in a?Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!0}):a[b]=c,a}function _toPropertyKey(a){var b=_toPrimitive(a,"string");return"symbol"==typeof b?b:b+""}function _toPrimitive(a,b){if("object"!=typeof a||!a)return a;var c=a[Symbol.toPrimitive];if(void 0!==c){var d=c.call(a,b||"default");if("object"!=typeof d)return d;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===b?String:Number)(a)}class VisitProcessor{constructor(a){let{filters:b,dataManager:c,visitorCode:d}=a;_defineProperty(this,"visitsData",new _visitsData.VisitsData([])),_defineProperty(this,"visitorData",[]),_defineProperty(this,"storageVisitorData",[]),_defineProperty(this,"experimentData",{}),_defineProperty(this,"filters",void 0),_defineProperty(this,"visitorDataTypes",void 0),_defineProperty(this,"dataManager",void 0),_defineProperty(this,"singleDataTypes",{[_types.KameleoonData.Device]:null,[_types.KameleoonData.Browser]:null,[_types.KameleoonData.GeolocationData]:null,[_types.KameleoonData.OperatingSystem]:null,[_types.KameleoonData.KameleoonConversionScore]:null}),_defineProperty(this,"multipleDataTypes",{[_types.KameleoonData.CustomData]:new Map,[_types.KameleoonData.PageView]:new Map,[_types.KameleoonData.Conversion]:new Map}),this.filters=b,this.dataManager=c,this.visitorDataTypes=c.getVisitorStoredDataTypes(d)}get data(){return{visitorData:this.visitorData,storageVisitorData:this.storageVisitorData,visitsData:this.visitsData,experimentData:this.experimentData}}processVisit(a){this.processBrowser(a),this.processDevice(a),this.processOperatingSystem(a),this.processGeolocationData(a),this.processCustomData(a),this.processConversion(a),this.processPageView(a),this.processExperiments(a),this.processVisitsData(a)}processMultipleDataTypes(){for(const[a,b]of Object.entries(this.multipleDataTypes))if(b.size)switch(a){case _types.KameleoonData.PageView:{this.visitorData.push(...b.values()),this.storageVisitorData.push(...b.values());break}case _types.KameleoonData.Conversion:{this.storageVisitorData.push(...b.values());break}case _types.KameleoonData.CustomData:{b.forEach(a=>{this.visitorData.push(a),this.dataManager.storedCustomDataIndexes.has(a.data.index)||this.storageVisitorData.push(a)});break}}}processKcs(a){if(this.filters.kcs&&a){const b=new _kameleoonConversionScore.KameleoonConversionScore(a);this.storageVisitorData.push(b)}}processBrowser(a){if(this.filters.browser&&!this.singleDataTypes[_types.KameleoonData.Browser]){const b=_browser.Browser._fromVisit(a);b&&(!this.visitorDataTypes.has(_types.KameleoonData.Browser)&&this.storageVisitorData.push(b),this.visitorData.push(b),this.singleDataTypes[_types.KameleoonData.Browser]=b)}}processDevice(a){if(this.filters.device&&!this.singleDataTypes[_types.KameleoonData.Device]){const b=_device.Device._fromVisit(a);b&&(!this.visitorDataTypes.has(_types.KameleoonData.Device)&&this.storageVisitorData.push(b),this.visitorData.push(b),this.singleDataTypes[_types.KameleoonData.Device]=b)}}processOperatingSystem(a){if(this.filters.operatingSystem&&!this.singleDataTypes[_types.KameleoonData.OperatingSystem]){const b=_operatingSystem.OperatingSystem._fromVisit(a);b&&(!this.visitorDataTypes.has(_types.KameleoonData.OperatingSystem)&&this.storageVisitorData.push(b),this.visitorData.push(b),this.singleDataTypes[_types.KameleoonData.OperatingSystem]=b)}}processGeolocationData(a){if(this.filters.geolocation&&!this.singleDataTypes[_types.KameleoonData.GeolocationData]){const b=_geolocation.GeolocationData._fromVisit(a);b&&(!this.visitorDataTypes.has(_types.KameleoonData.GeolocationData)&&this.storageVisitorData.push(b),this.visitorData.push(b),this.singleDataTypes[_types.KameleoonData.GeolocationData]=b)}}processCustomData(a){this.filters.customData&&_customData.CustomData._updateFromVisit(a,this.multipleDataTypes[_types.KameleoonData.CustomData])}processConversion(a){if(this.filters.conversions){_conversion.Conversion._updateFromVisit(a,this.multipleDataTypes[_types.KameleoonData.Conversion]);const b=_conversion.Conversion._listFromVisit(a);b.length&&this.visitorData.push(...b)}}processPageView(a){this.filters.pageViews&&_pageView.PageView._updateFromVisit(a,this.multipleDataTypes[_types.KameleoonData.PageView])}processExperiments(a){if(this.filters.experiments&&a.experimentEvents)for(const b of a.experimentEvents){const{id:a,variationId:c}=b.data;this.experimentData[a]={variationId:c,isTargetedRule:!1,status:_types2.TrackingStatus.Unsent}}}processVisitsData(a){this.visitsData.timestamp=a.timeStarted}}exports.VisitProcessor=VisitProcessor;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.VisitProcessor=void 0;var _pageView=require("./pageView"),_types=require("./types"),_customData=require("./customData"),_conversion=require("./conversion"),_browser=require("./browser"),_device=require("./device"),_operatingSystem=require("./operatingSystem"),_geolocation=require("./geolocation"),_visitsData=require("./visitsData"),_kameleoonConversionScore=require("./kameleoonConversionScore"),_types2=require("../types");function _defineProperty(a,b,c){return(b=_toPropertyKey(b))in a?Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!0}):a[b]=c,a}function _toPropertyKey(a){var b=_toPrimitive(a,"string");return"symbol"==typeof b?b:b+""}function _toPrimitive(a,b){if("object"!=typeof a||!a)return a;var c=a[Symbol.toPrimitive];if(void 0!==c){var d=c.call(a,b||"default");if("object"!=typeof d)return d;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===b?String:Number)(a)}class VisitProcessor{constructor(a){let{filters:b,dataManager:c,visitorCode:d}=a;_defineProperty(this,"visitsData",new _visitsData.VisitsData([])),_defineProperty(this,"visitorData",[]),_defineProperty(this,"storageVisitorData",[]),_defineProperty(this,"experimentData",{}),_defineProperty(this,"filters",void 0),_defineProperty(this,"visitorDataTypes",void 0),_defineProperty(this,"dataManager",void 0),_defineProperty(this,"singleDataTypes",{[_types.KameleoonData.Device]:null,[_types.KameleoonData.Browser]:null,[_types.KameleoonData.GeolocationData]:null,[_types.KameleoonData.OperatingSystem]:null,[_types.KameleoonData.KameleoonConversionScore]:null}),_defineProperty(this,"multipleDataTypes",{[_types.KameleoonData.CustomData]:new Map,[_types.KameleoonData.PageView]:new Map,[_types.KameleoonData.Conversion]:new Map}),this.filters=b,this.dataManager=c,this.visitorDataTypes=c.getVisitorStoredDataTypes(d)}get data(){return{visitorData:this.visitorData,storageVisitorData:this.storageVisitorData,visitsData:this.visitsData,experimentData:this.experimentData}}processVisit(a){this.processBrowser(a),this.processDevice(a),this.processOperatingSystem(a),this.processGeolocationData(a),this.processCustomData(a),this.processConversion(a),this.processPageView(a),this.processExperiments(a),this.processVisitsData(a)}processMultipleDataTypes(){for(const[a,b]of Object.entries(this.multipleDataTypes))if(b.size)switch(a){case _types.KameleoonData.PageView:{this.visitorData.push(...b.values()),this.storageVisitorData.push(...b.values());break}case _types.KameleoonData.Conversion:{this.storageVisitorData.push(...b.values());break}case _types.KameleoonData.CustomData:{b.forEach(a=>{this.visitorData.push(a),this.dataManager.storedCustomDataIndexes.has(a.data.index)||this.storageVisitorData.push(a)});break}}}processKcs(a){if(this.filters.kcs&&a){const b=new _kameleoonConversionScore.KameleoonConversionScore(a);this.storageVisitorData.push(b)}}processBrowser(a){if(this.filters.browser&&!this.singleDataTypes[_types.KameleoonData.Browser]){const b=_browser.Browser._fromVisit(a);b&&(!this.visitorDataTypes.has(_types.KameleoonData.Browser)&&this.storageVisitorData.push(b),this.visitorData.push(b),this.singleDataTypes[_types.KameleoonData.Browser]=b)}}processDevice(a){if(this.filters.device&&!this.singleDataTypes[_types.KameleoonData.Device]){const b=_device.Device._fromVisit(a);b&&(!this.visitorDataTypes.has(_types.KameleoonData.Device)&&this.storageVisitorData.push(b),this.visitorData.push(b),this.singleDataTypes[_types.KameleoonData.Device]=b)}}processOperatingSystem(a){if(this.filters.operatingSystem&&!this.singleDataTypes[_types.KameleoonData.OperatingSystem]){const b=_operatingSystem.OperatingSystem._fromVisit(a);b&&(!this.visitorDataTypes.has(_types.KameleoonData.OperatingSystem)&&this.storageVisitorData.push(b),this.visitorData.push(b),this.singleDataTypes[_types.KameleoonData.OperatingSystem]=b)}}processGeolocationData(a){if(this.filters.geolocation&&!this.singleDataTypes[_types.KameleoonData.GeolocationData]){const b=_geolocation.GeolocationData._fromVisit(a);b&&(!this.visitorDataTypes.has(_types.KameleoonData.GeolocationData)&&this.storageVisitorData.push(b),this.visitorData.push(b),this.singleDataTypes[_types.KameleoonData.GeolocationData]=b)}}processCustomData(a){this.filters.customData&&_customData.CustomData._updateFromVisit(a,this.multipleDataTypes[_types.KameleoonData.CustomData])}processConversion(a){if(this.filters.conversions){_conversion.Conversion._updateFromVisit(a,this.multipleDataTypes[_types.KameleoonData.Conversion]);const b=_conversion.Conversion._listFromVisit(a);b.length&&this.visitorData.push(...b)}}processPageView(a){this.filters.pageViews&&_pageView.PageView._updateFromVisit(a,this.multipleDataTypes[_types.KameleoonData.PageView])}processExperiments(a){if(this.filters.experiments&&a.experimentEvents)for(const b of a.experimentEvents){const{id:a,variationId:c}=b.data;this.experimentData[a]={variationId:c,isTargetedRule:!1,status:_types2.TrackingStatus.Unsent}}}processVisitsData(a){this.visitsData.timestamp=a.timeStarted}processMappingIdentifier(a){var b,c;if(a){const d=null===(b=a.customDataEvents)||void 0===b||null===(c=b.find(a=>a.data.mappingIdentifier))||void 0===c?void 0:c.time;if(d&&a.visitorCode)return{mappingIdentifier:a.visitorCode,timestamp:d}}}}exports.VisitProcessor=VisitProcessor;
@@ -1 +1 @@
1
- "use strict";var _types=require("./types");Object.defineProperty(exports,"__esModule",{value:!0}),exports.UrlTracking=exports.UrlQuery=exports.UrlParameter=exports.UrlFirstParameter=exports.UrlEventType=exports.NUMBER_OF_RETRIES=exports.Header=exports.DEFAULT_DOMAINS=void 0;const NUMBER_OF_RETRIES=exports.NUMBER_OF_RETRIES=2;let Header=exports.Header=function(a){return a.UserAgent="User-Agent",a.ContentType="Content-Type",a.SdkVersion="X-Kameleoon-SDK-Version",a.SdkType="X-Kameleoon-SDK-Type",a.Authorization="Authorization",a.AcceptEncoding="Accept-Encoding",a}({});const UrlEventType=exports.UrlEventType={CustomData:"eventType=customData",StaticData:"eventType=staticData",Page:"eventType=page",Conversion:"eventType=conversion",Activity:"eventType=activity",Experiment:"eventType=experiment",Geolocation:"eventType=geolocation"},UrlParameter=exports.UrlParameter={Title:"&title=",ReferrersIndices:"&referrersIndices=",Negative:"&negative=",Revenue:"&revenue=",Overwrite:"&overwrite=",Index:"&index=",BrowserIndex:"&browserIndex=",BrowserVersion:"&browserVersion=",Href:"&href=",DeviceType:"&deviceType=",SiteCode:"&siteCode=",GoalId:"&goalId=",VisitorCode:"&visitorCode=",VariationId:"&variationId=",Ts:"&ts=",Key:"&key=",SdkName:"&sdkName=",SdkVersion:"&sdkVersion=",ValuesCountMap:"&valuesCountMap=",Nonce:"&nonce=",Id:"&id=",CustomData:"&customData=",CurrentVisit:"&currentVisit=",MaxNumberPreviousVisits:"&maxNumberPreviousVisits=",Os:"&os=",OsIndex:"&osIndex=",Country:"&country=",City:"&city=",Region:"&region=",Latitude:"&latitude=",Longitude:"&longitude=",PostalCode:"&postalCode=",Conversion:"&conversion=",StaticData:"&staticData=",Geolocation:"&geolocation=",Page:"&page=",Experiment:"&experiment=",Browser:"&browser=",Environment:"&environment=",MappingIdentifier:"&mappingIdentifier=",MappingValue:"&mappingValue=",Kcs:"&kcs=",UserAgent:"&userAgent=",BodyUa:"&bodyUa="},UrlFirstParameter=exports.UrlFirstParameter={CustomData:"?customData=",StaticData:"?staticData=",Page:"?page=",Conversion:"?conversion=",Geolocation:"?geolocation=",Experiment:"?experiment=",ValuesCountMap:"?valuesCountMap=",Id:"?id=",Nonce:"?nonce=",Country:"?country=",Environment:"?environment=",City:"?city=",Region:"?region=",Latitude:"?latitude=",Longitude:"?longitude=",PostalCode:"?postalCode=",SdkName:"?sdkName=",SdkVersion:"?sdkVersion=",BrowserIndex:"?browserIndex=",BrowserVersion:"?browserVersion=",SiteCode:"?siteCode=",VisitorCode:"?visitorCode=",CurrentVisit:"?currentVisit=",MaxNumberPreviousVisits:"?maxNumberPreviousVisits=",Negative:"?negative=",Revenue:"?revenue=",Title:"?title=",Os:"?os=",OsIndex:"?osIndex=",Browser:"?browser=",ReferrersIndices:"?referrersIndices=",Overwrite:"?overwrite=",Index:"?index=",Href:"?href=",VariationId:"?variationId=",DeviceType:"?deviceType=",GoalId:"?goalId=",Ts:"?ts=",Key:"?key=",MappingIdentifier:"?mappingIdentifier=",MappingValue:"?mappingValue=",Kcs:"?kcs=",UserAgent:"?userAgent=",BodyUa:"?bodyUa="},UrlQuery=exports.UrlQuery={Sse:"sse?siteCode=",Map:"map?siteCode=",Events:"events?siteCode=",Visitor:"visitor?siteCode="},UrlTracking=exports.UrlTracking={Visit:"visit/",Map:"map/"},DEFAULT_DOMAINS=exports.DEFAULT_DOMAINS={[_types.UrlType.DataApi]:{subdomain:"data",topLevelDomain:"io",secondLevelDomain:"kameleoon"},[_types.UrlType.Events]:{subdomain:"events",topLevelDomain:"com",secondLevelDomain:"kameleoon"},[_types.UrlType.ClientConfiguration]:{subdomain:"sdk-config",topLevelDomain:"eu",secondLevelDomain:"kameleoon"}};
1
+ "use strict";var _types=require("./types");Object.defineProperty(exports,"__esModule",{value:!0}),exports.UrlTracking=exports.UrlQuery=exports.UrlParameter=exports.UrlFirstParameter=exports.UrlEventType=exports.NUMBER_OF_RETRIES=exports.Header=exports.DEFAULT_DOMAINS=void 0;const NUMBER_OF_RETRIES=exports.NUMBER_OF_RETRIES=2;let Header=exports.Header=function(a){return a.UserAgent="User-Agent",a.ContentType="Content-Type",a.SdkVersion="X-Kameleoon-SDK-Version",a.SdkType="X-Kameleoon-SDK-Type",a.Authorization="Authorization",a.AcceptEncoding="Accept-Encoding",a}({});const UrlEventType=exports.UrlEventType={CustomData:"eventType=customData",StaticData:"eventType=staticData",Page:"eventType=page",Conversion:"eventType=conversion",Activity:"eventType=activity",Experiment:"eventType=experiment",Geolocation:"eventType=geolocation"},UrlParameter=exports.UrlParameter={Title:"&title=",ReferrersIndices:"&referrersIndices=",Negative:"&negative=",Revenue:"&revenue=",Overwrite:"&overwrite=",Index:"&index=",BrowserIndex:"&browserIndex=",BrowserVersion:"&browserVersion=",Href:"&href=",DeviceType:"&deviceType=",SiteCode:"&siteCode=",GoalId:"&goalId=",VisitorCode:"&visitorCode=",VariationId:"&variationId=",Ts:"&ts=",Key:"&key=",SdkName:"&sdkName=",SdkVersion:"&sdkVersion=",ValuesCountMap:"&valuesCountMap=",Nonce:"&nonce=",Id:"&id=",CustomData:"&customData=",CurrentVisit:"&currentVisit=",MaxNumberPreviousVisits:"&maxNumberPreviousVisits=",Os:"&os=",OsIndex:"&osIndex=",Country:"&country=",City:"&city=",Region:"&region=",Latitude:"&latitude=",Longitude:"&longitude=",PostalCode:"&postalCode=",Conversion:"&conversion=",StaticData:"&staticData=",Geolocation:"&geolocation=",Page:"&page=",Experiment:"&experiment=",Browser:"&browser=",Environment:"&environment=",MappingIdentifier:"&mappingIdentifier=",MappingValue:"&mappingValue=",Kcs:"&kcs=",UserAgent:"&userAgent=",BodyUa:"&bodyUa="},UrlFirstParameter=exports.UrlFirstParameter={CustomData:"?customData=",StaticData:"?staticData=",Page:"?page=",Conversion:"?conversion=",Geolocation:"?geolocation=",Experiment:"?experiment=",ValuesCountMap:"?valuesCountMap=",Id:"?id=",Nonce:"?nonce=",Country:"?country=",Environment:"?environment=",City:"?city=",Region:"?region=",Latitude:"?latitude=",Longitude:"?longitude=",PostalCode:"?postalCode=",SdkName:"?sdkName=",SdkVersion:"?sdkVersion=",BrowserIndex:"?browserIndex=",BrowserVersion:"?browserVersion=",SiteCode:"?siteCode=",VisitorCode:"?visitorCode=",CurrentVisit:"?currentVisit=",MaxNumberPreviousVisits:"?maxNumberPreviousVisits=",Negative:"?negative=",Revenue:"?revenue=",Title:"?title=",Os:"?os=",OsIndex:"?osIndex=",Browser:"?browser=",ReferrersIndices:"?referrersIndices=",Overwrite:"?overwrite=",Index:"?index=",Href:"?href=",VariationId:"?variationId=",DeviceType:"?deviceType=",GoalId:"?goalId=",Ts:"?ts=",Key:"?key=",MappingIdentifier:"?mappingIdentifier=",MappingValue:"?mappingValue=",Kcs:"?kcs=",UserAgent:"?userAgent=",BodyUa:"?bodyUa="},UrlQuery=exports.UrlQuery={Sse:"sse?siteCode=",Map:"map?siteCode=",Events:"events?siteCode=",Visitor:"visitor?siteCode="},UrlTracking=exports.UrlTracking={Visit:"visit/",Map:"map/"},DEFAULT_DOMAINS=exports.DEFAULT_DOMAINS={[_types.UrlType.DataApi]:"data.kameleoon.io",[_types.UrlType.Events]:"events.kameleoon.eu",[_types.UrlType.ClientConfiguration]:"sdk-config.kameleoon.eu"};
@@ -12,7 +12,7 @@ export declare enum UrlType {
12
12
  ClientConfiguration = "clientConfiguration"
13
13
  }
14
14
  export type DomainsType = {
15
- [key in UrlType]: DomainType;
15
+ [key in UrlType]: string;
16
16
  };
17
17
  export type DomainType = {
18
18
  subdomain: string;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.UrlProvider=void 0;var _types=require("../types"),_constants=require("./constants"),_types2=require("./types");function ownKeys(a,b){var c=Object.keys(a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(a);b&&(d=d.filter(function(b){return Object.getOwnPropertyDescriptor(a,b).enumerable})),c.push.apply(c,d)}return c}function _objectSpread(a){for(var b,c=1;c<arguments.length;c++)b=null==arguments[c]?{}:arguments[c],c%2?ownKeys(Object(b),!0).forEach(function(c){_defineProperty(a,c,b[c])}):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(b)):ownKeys(Object(b)).forEach(function(c){Object.defineProperty(a,c,Object.getOwnPropertyDescriptor(b,c))});return a}function _defineProperty(a,b,c){return(b=_toPropertyKey(b))in a?Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!0}):a[b]=c,a}function _toPropertyKey(a){var b=_toPrimitive(a,"string");return"symbol"==typeof b?b:b+""}function _toPrimitive(a,b){if("object"!=typeof a||!a)return a;var c=a[Symbol.toPrimitive];if(void 0!==c){var d=c.call(a,b||"default");if("object"!=typeof d)return d;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===b?String:Number)(a)}class UrlProvider{constructor(){_defineProperty(this,"ready",!1),_defineProperty(this,"isCustomDomain",!1),_defineProperty(this,"domains",_constants.DEFAULT_DOMAINS),_defineProperty(this,"siteCode",void 0),_defineProperty(this,"environment",void 0),_defineProperty(this,"packageInfo",void 0)}initialize(a){let{domain:b,siteCode:c,packageInfo:d,environment:e}=a;this.siteCode=c,this.environment=e,this.packageInfo=d,this.ready=!0,this.setDomains(b)}set dataApiDomain(a){if(!this.isCustomDomain){const b=a.split(".");if(3===b.length){const[a,c,d]=b;this.domains[_types2.UrlType.DataApi]={subdomain:a,secondLevelDomain:c,topLevelDomain:d}}}}getClientConfigurationUrl(a){this.isInitialized();const{subdomain:b,topLevelDomain:c,secondLevelDomain:d}=this.domains[_types2.UrlType.ClientConfiguration],e=this.environment===_types.Environment.Production?"":_constants.UrlFirstParameter.Environment+this.environment;let f="";return a&&(e?f=_constants.UrlParameter.Ts+a:f=_constants.UrlFirstParameter.Ts+a),`https://${b}.${d}.${c}/`+this.siteCode+e+f}getEventSourceUrl(){this.isInitialized();const{subdomain:a,topLevelDomain:b,secondLevelDomain:c}=this.domains[_types2.UrlType.Events];return`https://${a}.${c}.${b}:8110/${_constants.UrlQuery.Sse}${this.siteCode}`}getRemoteDataUrl(a){return this.isInitialized(),this.getDataApiUrl(_types2.DataApiQuery.DataMap)+this.siteCode+_constants.UrlParameter.Key+encodeURI(a)}getVisitorDataUrl(a){let{visitorCode:b,filters:c,isMappingIdentifier:d}=a;this.isInitialized();const{customData:e,previousVisitAmount:f,currentVisit:g,conversions:h,geolocation:i,experiments:j,pageViews:k,device:l,browser:m,operatingSystem:n,kcs:o}=c,p=d?_constants.UrlParameter.MappingValue:_constants.UrlParameter.VisitorCode,q=e?_constants.UrlParameter.CustomData+!0:"",r=h?_constants.UrlParameter.Conversion+!0:"",s=i?_constants.UrlParameter.Geolocation+!0:"",t=j?_constants.UrlParameter.Experiment+!0:"",u=k?_constants.UrlParameter.Page+!0:"",v=!!(l||m||n)?_constants.UrlParameter.StaticData+!0:"",w=g?_constants.UrlParameter.CurrentVisit+!0:"",x=o?_constants.UrlParameter.Kcs+!0:"",y="number"==typeof f?_constants.UrlParameter.MaxNumberPreviousVisits+f:_constants.UrlParameter.MaxNumberPreviousVisits+1;return this.getDataApiUrl(_types2.DataApiQuery.VisitData)+this.siteCode+p+b+y+q+r+s+t+u+v+w+x}getTrackingUrl(a){this.isInitialized();const{type:b,version:c}=this.packageInfo;let d=this.getDataApiUrl(_types2.DataApiQuery.VisitEvent)+this.siteCode+_constants.UrlParameter.SdkName+b.toLowerCase()+_constants.UrlParameter.SdkVersion+c;return a&&(d+=_constants.UrlParameter.BodyUa+!0),d}isInitialized(){if(!this.ready)throw new Error("UrlProvider is not initialized")}getDataApiUrl(a){const{subdomain:b,topLevelDomain:c,secondLevelDomain:d}=this.domains[_types2.UrlType.DataApi];if(!b||!c||!d)throw new Error("Data API domain is not set");const e=`https://${b}.${d}.${c}`;return a===_types2.DataApiQuery.VisitEvent?`${e}/${_constants.UrlTracking.Visit+_constants.UrlQuery.Events}`:a===_types2.DataApiQuery.VisitData?`${e}/${_constants.UrlTracking.Visit+_constants.UrlQuery.Visitor}`:a===_types2.DataApiQuery.DataMap?`${e}/${_constants.UrlTracking.Map+_constants.UrlQuery.Map}`:void 0}setDomains(a){if(!a)return;this.isCustomDomain=!0;const b=a.split("."),[c,d]=b,e={secondLevelDomain:c,topLevelDomain:d};this.domains={[_types2.UrlType.DataApi]:_objectSpread(_objectSpread({},this.domains[_types2.UrlType.DataApi]),e),[_types2.UrlType.Events]:_objectSpread(_objectSpread({},this.domains[_types2.UrlType.Events]),e),[_types2.UrlType.ClientConfiguration]:_objectSpread(_objectSpread({},this.domains[_types2.UrlType.ClientConfiguration]),e)}}}exports.UrlProvider=UrlProvider;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.UrlProvider=void 0;var _types=require("../types"),_constants=require("./constants"),_types2=require("./types"),_validator=require("../utilities/validator");function _defineProperty(a,b,c){return(b=_toPropertyKey(b))in a?Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!0}):a[b]=c,a}function _toPropertyKey(a){var b=_toPrimitive(a,"string");return"symbol"==typeof b?b:b+""}function _toPrimitive(a,b){if("object"!=typeof a||!a)return a;var c=a[Symbol.toPrimitive];if(void 0!==c){var d=c.call(a,b||"default");if("object"!=typeof d)return d;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===b?String:Number)(a)}class UrlProvider{constructor(){_defineProperty(this,"ready",!1),_defineProperty(this,"isCustomDomain",!1),_defineProperty(this,"domains",_constants.DEFAULT_DOMAINS),_defineProperty(this,"siteCode",void 0),_defineProperty(this,"environment",void 0),_defineProperty(this,"packageInfo",void 0)}initialize(a){let{domain:b,siteCode:c,packageInfo:d,environment:e}=a;this.siteCode=c,this.environment=e,this.packageInfo=d,this.ready=!0,this.setDomains(b)}set dataApiDomain(a){if(!this.isCustomDomain)return void(this.domains[_types2.UrlType.DataApi]=a);const b=a.split(".")[0],c=this.domains[_types2.UrlType.DataApi];this.domains[_types2.UrlType.DataApi]=c.replace(/^[^.]+/,b)}getClientConfigurationUrl(a){this.isInitialized();const b=`https://${this.domains[_types2.UrlType.ClientConfiguration]}/`,c=this.environment===_types.Environment.Production?"":_constants.UrlFirstParameter.Environment+this.environment;let d="";return a&&(c?d=_constants.UrlParameter.Ts+a:d=_constants.UrlFirstParameter.Ts+a),b+this.siteCode+c+d}getEventSourceUrl(){return this.isInitialized(),`https://${this.domains[_types2.UrlType.Events]}:8110/${_constants.UrlQuery.Sse}${this.siteCode}`}getRemoteDataUrl(a){return this.isInitialized(),this.getDataApiUrl(_types2.DataApiQuery.DataMap)+this.siteCode+_constants.UrlParameter.Key+encodeURI(a)}getVisitorDataUrl(a){let{visitorCode:b,filters:c,isMappingIdentifier:d}=a;this.isInitialized();const{customData:e,previousVisitAmount:f,currentVisit:g,conversions:h,geolocation:i,experiments:j,pageViews:k,device:l,browser:m,operatingSystem:n,kcs:o,visitorCode:p}=c,q=d?_constants.UrlParameter.MappingValue:_constants.UrlParameter.VisitorCode,r=e||p?_constants.UrlParameter.CustomData+!0:"",s=h?_constants.UrlParameter.Conversion+!0:"",t=i?_constants.UrlParameter.Geolocation+!0:"",u=j?_constants.UrlParameter.Experiment+!0:"",v=k?_constants.UrlParameter.Page+!0:"",w=!!(l||m||n)?_constants.UrlParameter.StaticData+!0:"",x=g?_constants.UrlParameter.CurrentVisit+!0:"",y=o?_constants.UrlParameter.Kcs+!0:"",z="number"==typeof f?_constants.UrlParameter.MaxNumberPreviousVisits+f:_constants.UrlParameter.MaxNumberPreviousVisits+1;return this.getDataApiUrl(_types2.DataApiQuery.VisitData)+this.siteCode+q+b+z+r+s+t+u+v+w+x+y}getTrackingUrl(a){this.isInitialized();const{type:b,version:c}=this.packageInfo;let d=this.getDataApiUrl(_types2.DataApiQuery.VisitEvent)+this.siteCode+_constants.UrlParameter.SdkName+b.toLowerCase()+_constants.UrlParameter.SdkVersion+c;return a&&(d+=_constants.UrlParameter.BodyUa+!0),d}isInitialized(){if(!this.ready)throw new Error("UrlProvider is not initialized")}getDataApiUrl(a){if(!this.domains[_types2.UrlType.DataApi])throw new Error("Data API domain is not set");const b=`https://${this.domains[_types2.UrlType.DataApi]}`;return a===_types2.DataApiQuery.VisitEvent?`${b}/${_constants.UrlTracking.Visit+_constants.UrlQuery.Events}`:a===_types2.DataApiQuery.VisitData?`${b}/${_constants.UrlTracking.Visit+_constants.UrlQuery.Visitor}`:a===_types2.DataApiQuery.DataMap?`${b}/${_constants.UrlTracking.Map+_constants.UrlQuery.Map}`:void 0}setDomains(a){if(a){const b=_validator.Validator.validateDomain(a);b.ok&&(a=b.data,a=a.replace(/^\.+|\.+$/g,""),this.isCustomDomain=!0,this.domains[_types2.UrlType.DataApi]="data."+a,this.domains[_types2.UrlType.Events]="events."+a,this.domains[_types2.UrlType.ClientConfiguration]="sdk-config."+a)}}}exports.UrlProvider=UrlProvider;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.IntegrityChecker=void 0;var _constants=require("./constants"),_kameleoonData=require("../kameleoonData"),_kameleoonError=require("../kameleoonError");function ownKeys(a,b){var c=Object.keys(a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(a);b&&(d=d.filter(function(b){return Object.getOwnPropertyDescriptor(a,b).enumerable})),c.push.apply(c,d)}return c}function _objectSpread(a){for(var b,c=1;c<arguments.length;c++)b=null==arguments[c]?{}:arguments[c],c%2?ownKeys(Object(b),!0).forEach(function(c){_defineProperty(a,c,b[c])}):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(b)):ownKeys(Object(b)).forEach(function(c){Object.defineProperty(a,c,Object.getOwnPropertyDescriptor(b,c))});return a}function _defineProperty(a,b,c){return(b=_toPropertyKey(b))in a?Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!0}):a[b]=c,a}function _toPropertyKey(a){var b=_toPrimitive(a,"string");return"symbol"==typeof b?b:b+""}function _toPrimitive(a,b){if("object"!=typeof a||!a)return a;var c=a[Symbol.toPrimitive];if(void 0!==c){var d=c.call(a,b||"default");if("object"!=typeof d)return d;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===b?String:Number)(a)}class IntegrityChecker{constructor(a){_defineProperty(this,"key",void 0),this.key=a}isDataValid(a){switch(this.key){case _constants.KameleoonStorageKey.ClientData:return this.checkClientDataIntegrity(a);case _constants.KameleoonStorageKey.TargetingData:return this.checkTargetingDataIntegrity(a);case _constants.KameleoonStorageKey.DataInfo:return this.checkDataInfoIntegrity(a);case _constants.KameleoonStorageKey.VariationData:return this.checkVariationDataIntegrity(a);case _constants.KameleoonStorageKey.TrackingData:return this.checkTrackingDataIntegrity(a);default:return!0}}getDefaultData(){switch(this.key){case _constants.KameleoonStorageKey.ClientData:return this.getDefaultClientData();case _constants.KameleoonStorageKey.DataInfo:return{unsentData:{},nextVisitTime:0};case _constants.KameleoonStorageKey.TrackingData:return{scheduledVisitors:{}};case _constants.KameleoonStorageKey.TargetingData:case _constants.KameleoonStorageKey.VariationData:case _constants.KameleoonStorageKey.ConsentData:return{};case _constants.KameleoonStorageKey.VisitorCode:return"";case _constants.KameleoonStorageKey.KameleoonSimulationFFData:return"";case _constants.KameleoonStorageKey.ForcedExperimentVariation:return{};case _constants.KameleoonStorageKey.ForcedFeatureVariation:return{};default:(0,_kameleoonError.exhaustCheck)(this.key)}}checkTrackingDataIntegrity(a){return this.hasFields(a,["scheduledVisitors"])}checkDataInfoIntegrity(a){return this.hasFields(a,["unsentData","nextVisitTime"])}checkVariationDataIntegrity(a){const b=Object.values(a);if(!b.length)return!0;const c=a=>!this.hasFields(a,["status"])||this.hasFields(a,["isSent"]);for(const d of b)for(const a of Object.values(d))if(c(a))return!1;return!0}checkClientDataIntegrity(a){return this.hasFields(a,Object.keys(_constants.DEFAULT_CLIENT_CONFIGURATION))}checkTargetingDataIntegrity(a){const b=Object.values(a);if(!b.length)return!0;for(const c of b){if("string"==typeof c)continue;const a=a=>!this.hasFields(a,["status"])||this.hasFields(a,["sent"])||this.hasFields(a,["timestampList"]);for(const[b,d]of Object.entries(c)){if(Array.isArray(d))return!1;switch(b){case _kameleoonData.KameleoonData.PageView:case _kameleoonData.KameleoonData.Conversion:case _kameleoonData.KameleoonData.CustomData:{const b=Object.values(d).some(b=>a(b));if(b)return!1;continue}default:if(a(d))return!1}}}return!0}getDefaultClientData(){return _objectSpread(_objectSpread({},_constants.DEFAULT_CLIENT_CONFIGURATION),{},{lastUpdate:new Date().toString()})}hasFields(a,b){const c=Object.keys(a);return!!(c.length&&b.length)&&b.every(a=>c.includes(a))}}exports.IntegrityChecker=IntegrityChecker;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.IntegrityChecker=void 0;var _constants=require("./constants"),_kameleoonData=require("../kameleoonData"),_kameleoonError=require("../kameleoonError");function ownKeys(a,b){var c=Object.keys(a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(a);b&&(d=d.filter(function(b){return Object.getOwnPropertyDescriptor(a,b).enumerable})),c.push.apply(c,d)}return c}function _objectSpread(a){for(var b,c=1;c<arguments.length;c++)b=null==arguments[c]?{}:arguments[c],c%2?ownKeys(Object(b),!0).forEach(function(c){_defineProperty(a,c,b[c])}):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(b)):ownKeys(Object(b)).forEach(function(c){Object.defineProperty(a,c,Object.getOwnPropertyDescriptor(b,c))});return a}function _defineProperty(a,b,c){return(b=_toPropertyKey(b))in a?Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!0}):a[b]=c,a}function _toPropertyKey(a){var b=_toPrimitive(a,"string");return"symbol"==typeof b?b:b+""}function _toPrimitive(a,b){if("object"!=typeof a||!a)return a;var c=a[Symbol.toPrimitive];if(void 0!==c){var d=c.call(a,b||"default");if("object"!=typeof d)return d;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===b?String:Number)(a)}class IntegrityChecker{constructor(a){_defineProperty(this,"key",void 0),this.key=a}isDataValid(a){switch(this.key){case _constants.KameleoonStorageKey.ClientData:return this.checkClientDataIntegrity(a);case _constants.KameleoonStorageKey.TargetingData:return this.checkTargetingDataIntegrity(a);case _constants.KameleoonStorageKey.DataInfo:return this.checkDataInfoIntegrity(a);case _constants.KameleoonStorageKey.VariationData:return this.checkVariationDataIntegrity(a);case _constants.KameleoonStorageKey.TrackingData:return this.checkTrackingDataIntegrity(a);default:return!0}}getDefaultData(){switch(this.key){case _constants.KameleoonStorageKey.ClientData:return this.getDefaultClientData();case _constants.KameleoonStorageKey.DataInfo:return{unsentData:{},nextVisitTime:0,mappingIdentifiers:{}};case _constants.KameleoonStorageKey.TrackingData:return{scheduledVisitors:{}};case _constants.KameleoonStorageKey.TargetingData:case _constants.KameleoonStorageKey.VariationData:case _constants.KameleoonStorageKey.ConsentData:return{};case _constants.KameleoonStorageKey.VisitorCode:return"";case _constants.KameleoonStorageKey.KameleoonSimulationFFData:return"";case _constants.KameleoonStorageKey.ForcedExperimentVariation:return{};case _constants.KameleoonStorageKey.ForcedFeatureVariation:return{};default:(0,_kameleoonError.exhaustCheck)(this.key)}}checkTrackingDataIntegrity(a){return this.hasFields(a,["scheduledVisitors"])}checkDataInfoIntegrity(a){return this.hasFields(a,["unsentData","nextVisitTime"])}checkVariationDataIntegrity(a){const b=Object.values(a);if(!b.length)return!0;const c=a=>!this.hasFields(a,["status"])||this.hasFields(a,["isSent"]);for(const d of b)for(const a of Object.values(d))if(c(a))return!1;return!0}checkClientDataIntegrity(a){return this.hasFields(a,Object.keys(_constants.DEFAULT_CLIENT_CONFIGURATION))}checkTargetingDataIntegrity(a){const b=Object.values(a);if(!b.length)return!0;for(const c of b){if("string"==typeof c)continue;const a=a=>!this.hasFields(a,["status"])||this.hasFields(a,["sent"])||this.hasFields(a,["timestampList"]);for(const[b,d]of Object.entries(c)){if(Array.isArray(d))return!1;switch(b){case _kameleoonData.KameleoonData.PageView:case _kameleoonData.KameleoonData.Conversion:case _kameleoonData.KameleoonData.CustomData:{const b=Object.values(d).some(b=>a(b));if(b)return!1;continue}default:if(a(d))return!1}}}return!0}getDefaultClientData(){return _objectSpread(_objectSpread({},_constants.DEFAULT_CLIENT_CONFIGURATION),{},{lastUpdate:new Date().toString()})}hasFields(a,b){const c=Object.keys(a);return!!(c.length&&b.length)&&b.every(a=>c.includes(a))}}exports.IntegrityChecker=IntegrityChecker;
@@ -14,6 +14,13 @@ export type DataInfoType = {
14
14
  unsentData: {
15
15
  [visitorCode: string]: KameleoonData[];
16
16
  };
17
+ mappingIdentifiers?: {
18
+ [visitorCode: string]: MappingIdentifierType;
19
+ };
20
+ };
21
+ export type MappingIdentifierType = {
22
+ mappingIdentifier: string;
23
+ timestamp: number;
17
24
  };
18
25
  export type FeatureFlagVariationType = {
19
26
  variationId: number;
package/dist/types.d.ts CHANGED
@@ -57,10 +57,12 @@ export type SDKCoreParameters = {
57
57
  /**
58
58
  * @param {SdkLanguageType} type - type of the SDK
59
59
  * @param {string} version - version of the package
60
+ * @param {boolean} isServer - flag to indicate if the SDK is running on the server
60
61
  * */
61
62
  export type ExternalPackageInfoType = {
62
63
  type: SdkLanguageType;
63
64
  version: string;
65
+ isServer: boolean;
64
66
  };
65
67
  /**
66
68
  * @param {ExternalPackageInfoType} packageInfo - external package info, used to get package version and name
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.Parser=void 0;var _tsRes=require("ts-res"),_kameleoonError=require("../kameleoonError"),_types=require("../types"),_visitProcessor=require("../kameleoonData/visitProcessor"),_constants=require("./constants");class Parser{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.JS:case _types.VariableType.CSS: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({filters:c,dataManager:e,visitorCode:d}),{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 parseSecret(a){if(null===a)return"null";const b=a.length;if(b<=_constants.SECRET_VISIBLE_LENGTH)return _constants.HIDDEN_SECRET_CHAR.repeat(b);const c=Math.max(b-_constants.SECRET_VISIBLE_LENGTH,_constants.SECRET_VISIBLE_LENGTH);return a.substring(0,b-c)+_constants.HIDDEN_SECRET_CHAR.repeat(c)}}exports.Parser=Parser;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.Parser=void 0;var _tsRes=require("ts-res"),_kameleoonError=require("../kameleoonError"),_types=require("../types"),_visitProcessor=require("../kameleoonData/visitProcessor"),_constants=require("./constants");class Parser{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.JS:case _types.VariableType.CSS: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({filters:c,dataManager:e,visitorCode:d}),{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 l=g.processMappingIdentifier(null!==h&&void 0!==h?h:null===i||void 0===i?void 0:i[0]),{visitorData:m,storageVisitorData:n,visitsData:o,experimentData:p}=g.data;return f.updateStoredVariations(d,p),{visitorData:m,storageVisitorData:n,visitsData:o,mappingIdentifier:l}}static parseRegExp(a){if("/"===a[0]){const[_,b,c]=a.split("/");return new RegExp(b,c)}return new RegExp(a)}static parseSecret(a){if(null===a)return"null";const b=a.length;if(b<=_constants.SECRET_VISIBLE_LENGTH)return _constants.HIDDEN_SECRET_CHAR.repeat(b);const c=Math.max(b-_constants.SECRET_VISIBLE_LENGTH,_constants.SECRET_VISIBLE_LENGTH);return a.substring(0,b-c)+_constants.HIDDEN_SECRET_CHAR.repeat(c)}}exports.Parser=Parser;
@@ -7,6 +7,7 @@ import { GetVisitorDataResultType } from '../requester/types';
7
7
  import { SegmentType } from '../targeting';
8
8
  import { ExternalPackageInfoType, TrackingCacheItemType } from '../types';
9
9
  import { VariationConfiguration } from '../variationConfiguration';
10
+ import { MappingIdentifierType } from "../storage/types";
10
11
  export type CheckTargetingParametersType = {
11
12
  segment: SegmentType | null;
12
13
  experimentId: number | null;
@@ -44,6 +45,7 @@ export type ParseVisitorDataResultType = {
44
45
  storageVisitorData: KameleoonDataType[];
45
46
  visitorData: KameleoonDataType[];
46
47
  visitsData?: KameleoonDataType;
48
+ mappingIdentifier?: MappingIdentifierType;
47
49
  };
48
50
  export type ManageCacheParametersType = {
49
51
  hasJsCssVariables: boolean;
@@ -92,6 +94,8 @@ export type TrackExperimentParametersType = {
92
94
  * *Default*: `false`.
93
95
  * @param {boolean} kcs - If true, Kameleoon Conversion Score data will be retrieved.
94
96
  * *Default*: `false`.
97
+ * @param {boolean} visitorCode - If true, visitor code will be retrieved.
98
+ * *Default*: `true`.
95
99
  * */
96
100
  export type VisitorDataFiltersType = {
97
101
  previousVisitAmount?: number;
@@ -105,6 +109,7 @@ export type VisitorDataFiltersType = {
105
109
  conversions?: boolean;
106
110
  experiments?: boolean;
107
111
  kcs?: boolean;
112
+ visitorCode?: boolean;
108
113
  };
109
114
  /**
110
115
  * @interface `IExternalPRNG` - an interface for external PRNG (Pseudo-Random Number Generator) used to generate secure random numbers depending on the environment and platform
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kameleoon/javascript-sdk-core",
3
- "version": "5.2.3",
3
+ "version": "5.3.0",
4
4
  "description": "Kameleoon JS SDK Core",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",