@kameleoon/javascript-sdk-core 4.4.8 → 5.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +41 -0
- package/dist/cacheManager/cacheManager.js +1 -1
- package/dist/cacheManager/cacheManager.js.map +1 -1
- package/dist/cacheManager/index.js.map +1 -1
- package/dist/cacheManager/types.js.map +1 -1
- package/dist/clientConfiguration/clientConfiguration.d.ts +2 -6
- package/dist/clientConfiguration/clientConfiguration.js +1 -1
- package/dist/clientConfiguration/clientConfiguration.js.map +1 -1
- package/dist/clientConfiguration/constants.js.map +1 -1
- package/dist/clientConfiguration/index.js.map +1 -1
- package/dist/clientConfiguration/types.d.ts +2 -5
- package/dist/clientConfiguration/types.js +1 -1
- package/dist/clientConfiguration/types.js.map +1 -1
- package/dist/clientSettings/clientSettings.d.ts +2 -1
- package/dist/clientSettings/clientSettings.js +1 -1
- package/dist/clientSettings/clientSettings.js.map +1 -1
- package/dist/clientSettings/index.js.map +1 -1
- package/dist/clientSettings/types.d.ts +1 -0
- package/dist/clientSettings/types.js.map +1 -1
- package/dist/constants.d.ts +0 -1
- package/dist/constants.js +1 -1
- package/dist/constants.js.map +1 -1
- package/dist/eventManager/eventManager.js +1 -1
- package/dist/eventManager/eventManager.js.map +1 -1
- package/dist/eventManager/index.js.map +1 -1
- package/dist/eventManager/types.js.map +1 -1
- package/dist/eventSource/constants.js.map +1 -1
- package/dist/eventSource/eventSource.js +1 -1
- package/dist/eventSource/eventSource.js.map +1 -1
- package/dist/eventSource/index.js.map +1 -1
- package/dist/eventSource/types.js.map +1 -1
- package/dist/hasher/hasher.js.map +1 -1
- package/dist/hasher/index.js.map +1 -1
- package/dist/hasher/types.js.map +1 -1
- package/dist/index.d.ts +4 -4
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/kameleoonClient.d.ts +6 -13
- package/dist/kameleoonClient.js +1 -1
- package/dist/kameleoonClient.js.map +1 -1
- package/dist/kameleoonClientInterface.d.ts +18 -16
- package/dist/kameleoonClientInterface.js.map +1 -1
- package/dist/kameleoonData/applicationVersion.d.ts +2 -3
- package/dist/kameleoonData/applicationVersion.js +1 -1
- package/dist/kameleoonData/applicationVersion.js.map +1 -1
- package/dist/kameleoonData/browser.d.ts +9 -3
- package/dist/kameleoonData/browser.js +1 -1
- package/dist/kameleoonData/browser.js.map +1 -1
- package/dist/kameleoonData/conversion.d.ts +12 -3
- package/dist/kameleoonData/conversion.js +1 -1
- package/dist/kameleoonData/conversion.js.map +1 -1
- package/dist/kameleoonData/cookie.d.ts +2 -3
- package/dist/kameleoonData/cookie.js +1 -1
- package/dist/kameleoonData/cookie.js.map +1 -1
- package/dist/kameleoonData/customData.d.ts +11 -3
- package/dist/kameleoonData/customData.js +1 -1
- package/dist/kameleoonData/customData.js.map +1 -1
- package/dist/kameleoonData/dataManager.d.ts +34 -23
- package/dist/kameleoonData/dataManager.js +1 -1
- package/dist/kameleoonData/dataManager.js.map +1 -1
- package/dist/kameleoonData/dataProcessor.d.ts +22 -24
- package/dist/kameleoonData/dataProcessor.js +1 -1
- package/dist/kameleoonData/dataProcessor.js.map +1 -1
- package/dist/kameleoonData/device.d.ts +9 -3
- package/dist/kameleoonData/device.js +1 -1
- package/dist/kameleoonData/device.js.map +1 -1
- package/dist/kameleoonData/geolocation.d.ts +9 -3
- package/dist/kameleoonData/geolocation.js +1 -1
- package/dist/kameleoonData/geolocation.js.map +1 -1
- package/dist/kameleoonData/helpers.js.map +1 -1
- package/dist/kameleoonData/index.d.ts +2 -1
- package/dist/kameleoonData/index.js +1 -1
- package/dist/kameleoonData/index.js.map +1 -1
- package/dist/kameleoonData/kameleoonConversionScore.d.ts +2 -1
- package/dist/kameleoonData/kameleoonConversionScore.js +1 -1
- package/dist/kameleoonData/kameleoonConversionScore.js.map +1 -1
- package/dist/kameleoonData/operatingSystem.d.ts +9 -3
- package/dist/kameleoonData/operatingSystem.js +1 -1
- package/dist/kameleoonData/operatingSystem.js.map +1 -1
- package/dist/kameleoonData/pageView.d.ts +12 -8
- package/dist/kameleoonData/pageView.js +1 -1
- package/dist/kameleoonData/pageView.js.map +1 -1
- package/dist/kameleoonData/types.d.ts +97 -31
- package/dist/kameleoonData/types.js +1 -1
- package/dist/kameleoonData/types.js.map +1 -1
- package/dist/kameleoonData/uniqueIdentifier.d.ts +19 -0
- package/dist/kameleoonData/uniqueIdentifier.js +2 -0
- package/dist/kameleoonData/uniqueIdentifier.js.map +1 -0
- package/dist/kameleoonData/userAgent.d.ts +2 -3
- package/dist/kameleoonData/userAgent.js +1 -1
- package/dist/kameleoonData/userAgent.js.map +1 -1
- package/dist/kameleoonData/visitProcessor.d.ts +3 -4
- package/dist/kameleoonData/visitProcessor.js +1 -1
- package/dist/kameleoonData/visitProcessor.js.map +1 -1
- package/dist/kameleoonData/visitsData.d.ts +2 -0
- package/dist/kameleoonData/visitsData.js +1 -1
- package/dist/kameleoonData/visitsData.js.map +1 -1
- package/dist/kameleoonError/constants.js +1 -1
- package/dist/kameleoonError/constants.js.map +1 -1
- package/dist/kameleoonError/helpers.js +1 -1
- package/dist/kameleoonError/helpers.js.map +1 -1
- package/dist/kameleoonError/index.js.map +1 -1
- package/dist/kameleoonError/kameleoonError.js +1 -1
- package/dist/kameleoonError/kameleoonError.js.map +1 -1
- package/dist/kameleoonError/types.js.map +1 -1
- package/dist/kameleoonUtils.d.ts +1 -11
- package/dist/kameleoonUtils.js +1 -1
- package/dist/kameleoonUtils.js.map +1 -1
- package/dist/requester/constants.js +1 -1
- package/dist/requester/constants.js.map +1 -1
- package/dist/requester/index.d.ts +1 -1
- package/dist/requester/index.js +1 -1
- package/dist/requester/index.js.map +1 -1
- package/dist/requester/requester.d.ts +5 -7
- package/dist/requester/requester.js +1 -1
- package/dist/requester/requester.js.map +1 -1
- package/dist/requester/types.d.ts +7 -26
- package/dist/requester/types.js +1 -1
- package/dist/requester/types.js.map +1 -1
- package/dist/requester/urlProvider.d.ts +2 -2
- package/dist/requester/urlProvider.js +1 -1
- package/dist/requester/urlProvider.js.map +1 -1
- package/dist/storage/constants.d.ts +6 -2
- package/dist/storage/constants.js +1 -1
- package/dist/storage/constants.js.map +1 -1
- package/dist/storage/index.d.ts +3 -2
- package/dist/storage/index.js +1 -1
- package/dist/storage/index.js.map +1 -1
- package/dist/storage/integrityChecker.d.ts +20 -0
- package/dist/storage/integrityChecker.js +2 -0
- package/dist/storage/integrityChecker.js.map +1 -0
- package/dist/storage/storage.d.ts +0 -1
- package/dist/storage/storage.js +1 -1
- package/dist/storage/storage.js.map +1 -1
- package/dist/storage/types.d.ts +25 -17
- package/dist/storage/types.js.map +1 -1
- package/dist/targeting/conditions/applicationVersion.js +1 -1
- package/dist/targeting/conditions/applicationVersion.js.map +1 -1
- package/dist/targeting/conditions/browser.js +1 -1
- package/dist/targeting/conditions/browser.js.map +1 -1
- package/dist/targeting/conditions/conditionFactory.js.map +1 -1
- package/dist/targeting/conditions/conversion.js +1 -1
- package/dist/targeting/conditions/conversion.js.map +1 -1
- package/dist/targeting/conditions/conversionLikelihood.js +1 -1
- package/dist/targeting/conditions/conversionLikelihood.js.map +1 -1
- package/dist/targeting/conditions/cookie.js +1 -1
- package/dist/targeting/conditions/cookie.js.map +1 -1
- package/dist/targeting/conditions/customData.js +1 -1
- package/dist/targeting/conditions/customData.js.map +1 -1
- package/dist/targeting/conditions/device.js +1 -1
- package/dist/targeting/conditions/device.js.map +1 -1
- package/dist/targeting/conditions/exclusiveCampaign.js.map +1 -1
- package/dist/targeting/conditions/firstVisit.js +1 -1
- package/dist/targeting/conditions/firstVisit.js.map +1 -1
- package/dist/targeting/conditions/geolocation.js +1 -1
- package/dist/targeting/conditions/geolocation.js.map +1 -1
- package/dist/targeting/conditions/index.js.map +1 -1
- package/dist/targeting/conditions/lastVisit.js +1 -1
- package/dist/targeting/conditions/lastVisit.js.map +1 -1
- package/dist/targeting/conditions/newVisitor.js +1 -1
- package/dist/targeting/conditions/newVisitor.js.map +1 -1
- package/dist/targeting/conditions/operatingSystem.js +1 -1
- package/dist/targeting/conditions/operatingSystem.js.map +1 -1
- package/dist/targeting/conditions/pageTitle.js +1 -1
- package/dist/targeting/conditions/pageTitle.js.map +1 -1
- package/dist/targeting/conditions/pageUrl.js +1 -1
- package/dist/targeting/conditions/pageUrl.js.map +1 -1
- package/dist/targeting/conditions/previousPage.js +1 -1
- package/dist/targeting/conditions/previousPage.js.map +1 -1
- package/dist/targeting/conditions/sameDayVisits.js +1 -1
- package/dist/targeting/conditions/sameDayVisits.js.map +1 -1
- package/dist/targeting/conditions/sdkLanguage.js +1 -1
- package/dist/targeting/conditions/sdkLanguage.js.map +1 -1
- package/dist/targeting/conditions/segment.js +1 -1
- package/dist/targeting/conditions/segment.js.map +1 -1
- package/dist/targeting/conditions/targetFeatureFlag.js +1 -1
- package/dist/targeting/conditions/targetFeatureFlag.js.map +1 -1
- package/dist/targeting/conditions/types.js.map +1 -1
- package/dist/targeting/conditions/utilities.d.ts +5 -0
- package/dist/targeting/conditions/utilities.js +2 -0
- package/dist/targeting/conditions/utilities.js.map +1 -0
- package/dist/targeting/conditions/visitedPages.js +1 -1
- package/dist/targeting/conditions/visitedPages.js.map +1 -1
- package/dist/targeting/conditions/visitorCode.js +1 -1
- package/dist/targeting/conditions/visitorCode.js.map +1 -1
- package/dist/targeting/conditions/visits.js +1 -1
- package/dist/targeting/conditions/visits.js.map +1 -1
- package/dist/targeting/index.d.ts +1 -1
- package/dist/targeting/index.js.map +1 -1
- package/dist/targeting/node.js +1 -1
- package/dist/targeting/node.js.map +1 -1
- package/dist/targeting/tree.js +1 -1
- package/dist/targeting/tree.js.map +1 -1
- package/dist/targeting/types.js.map +1 -1
- package/dist/tracking/bodyProvider.d.ts +26 -0
- package/dist/tracking/bodyProvider.js +2 -0
- package/dist/tracking/bodyProvider.js.map +1 -0
- package/dist/tracking/constants.d.ts +2 -0
- package/dist/tracking/constants.js +2 -0
- package/dist/tracking/constants.js.map +1 -0
- package/dist/tracking/index.d.ts +1 -0
- package/dist/tracking/index.js +2 -0
- package/dist/tracking/index.js.map +1 -0
- package/dist/tracking/tracker.d.ts +21 -0
- package/dist/tracking/tracker.js +2 -0
- package/dist/tracking/tracker.js.map +1 -0
- package/dist/tracking/types.d.ts +45 -0
- package/dist/tracking/types.js +2 -0
- package/dist/tracking/types.js.map +1 -0
- package/dist/types.d.ts +44 -15
- package/dist/types.js +1 -1
- package/dist/types.js.map +1 -1
- package/dist/utilities/constants.d.ts +0 -1
- package/dist/utilities/constants.js +1 -1
- package/dist/utilities/constants.js.map +1 -1
- package/dist/utilities/index.d.ts +3 -2
- package/dist/utilities/index.js +1 -1
- package/dist/utilities/index.js.map +1 -1
- package/dist/utilities/parser.d.ts +10 -0
- package/dist/utilities/parser.js +2 -0
- package/dist/utilities/parser.js.map +1 -0
- package/dist/utilities/types.d.ts +3 -40
- package/dist/utilities/types.js.map +1 -1
- package/dist/utilities/utilities.d.ts +5 -21
- package/dist/utilities/utilities.js +1 -1
- package/dist/utilities/utilities.js.map +1 -1
- package/dist/utilities/validator.d.ts +5 -0
- package/dist/utilities/validator.js +2 -0
- package/dist/utilities/validator.js.map +1 -0
- package/dist/variationConfiguration/index.js.map +1 -1
- package/dist/variationConfiguration/types.d.ts +7 -2
- package/dist/variationConfiguration/types.js.map +1 -1
- package/dist/variationConfiguration/variationConfiguration.d.ts +15 -7
- package/dist/variationConfiguration/variationConfiguration.js +1 -1
- package/dist/variationConfiguration/variationConfiguration.js.map +1 -1
- package/dist/visitorCodeManager/constants.d.ts +2 -0
- package/dist/visitorCodeManager/constants.js +1 -1
- package/dist/visitorCodeManager/constants.js.map +1 -1
- package/dist/visitorCodeManager/index.js.map +1 -1
- package/dist/visitorCodeManager/types.d.ts +3 -0
- package/dist/visitorCodeManager/types.js.map +1 -1
- package/dist/visitorCodeManager/visitorCodeManager.d.ts +4 -0
- package/dist/visitorCodeManager/visitorCodeManager.js +1 -1
- package/dist/visitorCodeManager/visitorCodeManager.js.map +1 -1
- package/package.json +2 -2
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.DataManager=void 0;var
|
|
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");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),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),a}}}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){const b=this.dataStorage.read(),c=this.infoStorage.read();if(!b.ok)return b;if(!c.ok)return c;const d=b.data,e=c.data;if("string"==typeof a){for(var f=arguments.length,g=Array(1<f?f-1:0),h=1;h<f;h++)g[h-1]=arguments[h];this.mutUpdateTargetingData({infoData:e,targetingData:d,visitorCode:a,kameleoonData:g})}else for(const[b,c]of Object.entries(a))this.mutUpdateTargetingData({infoData:e,targetingData:d,visitorCode:b,kameleoonData:c});return this.cleanupData(),this.infoStorage.write(c.data),this.dataStorage.write(d)}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){const b=this.getVisitorData(a),c=null===b||void 0===b?void 0:b[_types.KameleoonData.UniqueIdentifier];return(null===c||void 0===c?void 0:c.value)??!1}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);this.mappingIdentifierCustomDataIndex===e.index&&f&&(c._isMappingIdentifier=!0,d!==e.value[0]&&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;
|
|
2
2
|
//# sourceMappingURL=dataManager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataManager.js","names":["DataManager","constructor","a","storage","cleanupInterval","_defineProperty","Map","Set","dataProcessor","DataProcessor","unsentData","cleanupCallback","cleanupTargetingData","sentPageViewTimestamps","clear","cleanupIntervalId","setInterval","err","clearInterval","addData","visitorCode","b","arguments","length","kameleoonData","Array","d","dataItem","updateData","data","type","KameleoonData","CustomData","customData","mappingIdentifierCustomDataIndex","index","_isMappingIdentifier","value","createReference","localCustomDataIndexes","has","isSent","set","PageView","storedData","getTargetingData","or","storedVisitorData","pageView","urlAddress","timestamp","timestamps","Conversion","existingConversions","get","push","Ok","getTree","segment","targetingTrees","id","targetingTree","Tree","clearTrees","getUnsentData","targetingData","customDataValue","mappingCD","clearUnsentData","dataItems","values","persistentCustomDataIndexes","size","persistentCustomData","isArray","isPersistentCustomData","clearUnsentDataByKey","key","visitorData","dataKey","entries","delete","keys","Utilities","isCustomData","getLinkedVisitor","getVisitorIdentifier","trees","unsentDataVisitors","Object","identifierCustomDataIndex","storedDataTypes","storedDataTypeList","storedCustomDataIndexes","storedCustomDataIndexList","customDataIndexes","customDataLocalOnlyIndexes","forEach","localOnly","scope","CustomDataScope","Visitor","isMappingIdentifier","exports"],"sources":["../../src/kameleoonData/dataManager.ts"],"sourcesContent":["import { Ok, Result } from 'ts-res';\nimport { KameleoonError } from 'src/kameleoonError';\nimport { SegmentType, Tree } from 'src/targeting';\nimport { DataProcessor } from './dataProcessor';\nimport { Utilities } from 'src/utilities';\nimport {\n CustomDataConfigurationType,\n CustomDataScope,\n} from 'src/clientConfiguration';\nimport { CustomData } from './customData';\nimport {\n DataManagerParametersType,\n ExistingPageViewDataType,\n KameleoonData,\n KameleoonDataType,\n KameleoonVisitorDataType,\n PageViewDataType,\n UnsentTargetingDataType,\n UnsentVisitorTargetingDataType,\n} from './types';\n\ninterface IDataManager {\n addData(visitorCode: string, ...kameleoonData: KameleoonDataType[]): void;\n getUnsentData: (\n visitorCode: string,\n ) => UnsentTargetingDataType[string] | undefined;\n getTree(segment: SegmentType): Tree;\n clearTrees(): void;\n clearUnsentData: (visitorCode: string) => void;\n isPersistentCustomData: (dataItem: KameleoonDataType) => boolean;\n getLinkedVisitor: (visitorCode: string) => string | null;\n getTargetingData: (\n visitorCode: string,\n ) => KameleoonVisitorDataType | undefined;\n readonly trees: Map<string, Tree>;\n readonly unsentDataVisitors: string[];\n readonly identifierCustomDataIndex: number | null;\n}\n\nexport class DataManager implements IDataManager {\n private targetingTrees: Map<string, Tree> = new Map();\n private localCustomDataIndexes: Set<number> = new Set();\n private persistentCustomDataIndexes: Set<number> = new Set();\n private mappingIdentifierCustomDataIndex: number | null = null;\n private cleanupIntervalId: NodeJS.Timeout | null = null;\n private dataProcessor: DataProcessor;\n private unsentData: UnsentTargetingDataType;\n private sentPageViewTimestamps: Map<number, boolean> = new Map();\n\n constructor({ storage, cleanupInterval }: DataManagerParametersType) {\n this.dataProcessor = new DataProcessor(storage);\n this.unsentData = {};\n\n if (cleanupInterval) {\n const cleanupCallback = () => {\n this.dataProcessor.cleanupTargetingData(cleanupInterval);\n this.sentPageViewTimestamps.clear();\n };\n\n // --- Note ---\n // We can not make delayed code execution recoverable, as it might lead\n // to targeting data storage size overflow\n try {\n this.cleanupIntervalId = setInterval(cleanupCallback, cleanupInterval);\n } catch (err) {\n if (this.cleanupIntervalId) {\n clearInterval(this.cleanupIntervalId);\n }\n\n throw err;\n }\n }\n }\n\n public addData(\n visitorCode: string,\n ...kameleoonData: KameleoonDataType[]\n ): Result<void, KameleoonError> {\n // --- Note ---\n // We assume `this.unsentTargetingData[visitorCode]` is always presents further\n if (!this.unsentData[visitorCode]) {\n this.unsentData[visitorCode] = new Map();\n }\n\n for (const dataItem of kameleoonData) {\n // TODO: this can be optimized to be updated altogether\n // instead of updating each data item separately\n this.dataProcessor.updateData(visitorCode, dataItem);\n\n switch (dataItem.data.type) {\n case KameleoonData.CustomData: {\n const customData = dataItem as CustomData;\n const data = customData.data;\n\n // --- Bug ---\n // - There's a known issue here: `mappingIdentifier` won't be updated\n // in the storage because the data is written before `unsentData` update\n // and we get `mappingIdentifier` only by checking CC here\n // - It doesn't affect the functionality, as stored data is\n // only used for condition evaluation and `Visitor` scoped CD is never removed from `unsentData`\n // still it should be fixed with some `.updateData` refactor\n if (this.mappingIdentifierCustomDataIndex === data.index) {\n customData._isMappingIdentifier = true;\n\n if (visitorCode !== data.value[0]) {\n // --- Note ---\n // Associate linked visitor codes\n this.dataProcessor.createReference(visitorCode, data.value[0]);\n }\n }\n\n if (\n !this.localCustomDataIndexes.has(data.index) &&\n !dataItem.isSent\n ) {\n this.unsentData[visitorCode]!.set(data.index, customData);\n }\n\n break;\n }\n case KameleoonData.PageView: {\n const data = dataItem.data as PageViewDataType;\n\n // --- Note ---\n // `PageViews` can only be processed during storage update as they\n // can't create and merge referrers/titles/timestamps on their own\n // So we have to extract them from storage to update `unsentData` correctly\n const storedData = this.dataProcessor\n .getTargetingData(visitorCode)\n .or({});\n\n if (storedData) {\n const storedVisitorData = storedData[KameleoonData.PageView];\n const pageView = (storedVisitorData as ExistingPageViewDataType)[\n data.urlAddress\n ];\n\n // --- Note ---\n // A case for newly created page view\n if (!dataItem.isSent) {\n for (const timestamp of pageView.timestamps) {\n // --- Note ---\n // As we don't keep `sent` status for each timestamp, we have to\n // check if it was already sent to avoid duplicates\n if (!this.sentPageViewTimestamps.has(timestamp)) {\n this.unsentData[visitorCode]!.set(timestamp, dataItem);\n this.sentPageViewTimestamps.set(timestamp, true);\n }\n }\n // --- Note ---\n // A case for `getRemoteVisitorData` pre-loaded pages that shouldn't be sent again\n } else {\n for (const timestamp of pageView.timestamps) {\n if (!this.sentPageViewTimestamps.has(timestamp)) {\n this.sentPageViewTimestamps.set(timestamp, true);\n }\n }\n }\n }\n\n break;\n }\n case KameleoonData.Conversion: {\n const unsentData = this.unsentData[visitorCode]!;\n\n if (!dataItem.isSent) {\n if (unsentData.has(KameleoonData.Conversion)) {\n const existingConversions = unsentData.get(\n KameleoonData.Conversion,\n ) as KameleoonDataType[];\n\n existingConversions.push(dataItem);\n\n unsentData.set(KameleoonData.Conversion, existingConversions);\n } else {\n unsentData.set(KameleoonData.Conversion, [dataItem]);\n }\n }\n\n break;\n }\n default: {\n const { data } = dataItem;\n\n if (!dataItem.isSent) {\n this.unsentData[visitorCode]!.set(data.type, dataItem);\n }\n }\n }\n }\n\n return Ok();\n }\n\n public getTree(segment: SegmentType): Tree {\n if (this.targetingTrees.has(segment.id)) {\n return this.targetingTrees.get(segment.id)!;\n }\n\n const targetingTree = new Tree(segment);\n this.targetingTrees.set(segment.id, targetingTree);\n\n return targetingTree;\n }\n\n public clearTrees(): void {\n this.targetingTrees.clear();\n }\n\n public getUnsentData(\n visitorCode: string,\n ): UnsentTargetingDataType[string] | undefined {\n if (this.mappingIdentifierCustomDataIndex !== null) {\n const targetingData = this.getTargetingData(visitorCode);\n\n if (targetingData) {\n const customData = targetingData[KameleoonData.CustomData];\n\n if (customData) {\n const customDataValue =\n customData[this.mappingIdentifierCustomDataIndex];\n\n if (customDataValue) {\n const { index, value } = customDataValue;\n const mappingCD = new CustomData(index, ...value);\n mappingCD._isMappingIdentifier = true;\n\n if (!this.unsentData[visitorCode]) {\n this.unsentData[visitorCode] = new Map();\n }\n\n this.unsentData[visitorCode]!.set(index, mappingCD);\n }\n }\n }\n }\n\n return this.unsentData[visitorCode];\n }\n\n public clearUnsentData(visitorCode: string): void {\n const dataItems = this.unsentData[visitorCode]?.values();\n\n if (dataItems && this.persistentCustomDataIndexes.size) {\n const persistentCustomData: UnsentVisitorTargetingDataType = new Map();\n\n for (const dataItem of dataItems) {\n if (!Array.isArray(dataItem) && this.isPersistentCustomData(dataItem)) {\n persistentCustomData.set(dataItem.data.index, dataItem);\n }\n }\n\n if (persistentCustomData.size) {\n this.unsentData[visitorCode] = persistentCustomData;\n return;\n }\n }\n\n delete this.unsentData[visitorCode];\n }\n\n public clearUnsentDataByKey(visitorCode: string, key: KameleoonData): void {\n const visitorData = this.unsentData[visitorCode];\n\n if (!visitorData) {\n return;\n }\n\n if (\n key === KameleoonData.CustomData &&\n this.persistentCustomDataIndexes.size\n ) {\n for (const [dataKey, dataItem] of visitorData.entries()) {\n if (this.isPersistentCustomData(dataItem as KameleoonDataType)) {\n continue;\n }\n\n if (dataKey === key) {\n visitorData.delete(dataKey);\n }\n }\n } else if (key === KameleoonData.PageView) {\n for (const dataKey of visitorData.keys()) {\n if (typeof dataKey === 'number') {\n visitorData.delete(dataKey);\n }\n }\n } else {\n visitorData.delete(key);\n }\n\n if (!visitorData.size) {\n delete this.unsentData[visitorCode];\n }\n }\n\n public isPersistentCustomData(\n dataItem: KameleoonDataType,\n ): dataItem is CustomData {\n if (!this.persistentCustomDataIndexes.size) {\n return false;\n }\n\n if (Utilities.isCustomData(dataItem)) {\n return this.persistentCustomDataIndexes.has(dataItem.data.index);\n }\n\n return false;\n }\n\n public getLinkedVisitor(visitorCode: string): string | null {\n return this.dataProcessor.getLinkedVisitor(\n visitorCode,\n this.mappingIdentifierCustomDataIndex,\n );\n }\n\n public getVisitorIdentifier(visitorCode: string): string {\n const targetingData = this.getTargetingData(visitorCode);\n\n if (!targetingData) {\n return visitorCode;\n }\n\n const customData = targetingData[KameleoonData.CustomData];\n\n if (!customData || this.mappingIdentifierCustomDataIndex === null) {\n return visitorCode;\n }\n\n const customDataValue = customData[this.mappingIdentifierCustomDataIndex];\n\n if (customDataValue) {\n return customDataValue.value[0];\n }\n\n return visitorCode;\n }\n\n public getTargetingData(\n visitorCode: string,\n ): KameleoonVisitorDataType | undefined {\n const targetingData = this.dataProcessor\n .getTargetingData(visitorCode)\n .or(null);\n\n if (!targetingData) {\n return undefined;\n }\n\n return targetingData;\n }\n\n get trees(): Map<string, Tree> {\n return this.targetingTrees;\n }\n\n get unsentDataVisitors(): string[] {\n return Object.keys(this.unsentData);\n }\n\n get identifierCustomDataIndex(): number | null {\n return this.mappingIdentifierCustomDataIndex;\n }\n\n get storedDataTypes(): Set<KameleoonData> {\n return this.dataProcessor.storedDataTypeList;\n }\n\n get storedCustomDataIndexes(): Set<number> {\n return this.dataProcessor.storedCustomDataIndexList;\n }\n\n set customDataIndexes(customData: CustomDataConfigurationType[]) {\n const [customDataLocalOnlyIndexes, persistentCustomDataIndexes]: Array<\n number[]\n > = [[], []];\n\n customData.forEach((customData) => {\n if (customData.localOnly) {\n customDataLocalOnlyIndexes.push(customData.index);\n }\n\n if (customData.scope === CustomDataScope.Visitor) {\n persistentCustomDataIndexes.push(customData.index);\n }\n\n if (customData.isMappingIdentifier) {\n this.mappingIdentifierCustomDataIndex = customData.index;\n }\n });\n\n if (customDataLocalOnlyIndexes.length) {\n this.localCustomDataIndexes = new Set(customDataLocalOnlyIndexes);\n }\n\n if (persistentCustomDataIndexes.length) {\n this.persistentCustomDataIndexes = new Set(persistentCustomDataIndexes);\n }\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dataManager.js","names":["DataManager","constructor","a","dataStorage","infoStorage","cleanupInterval","_defineProperty","Map","Set","dataProcessor","DataProcessor","cleanupCallback","cleanupData","cleanupIntervalId","setInterval","err","clearInterval","getUnsentData","visitorCode","infoResult","read","ok","infoData","data","targetingData","getVisitorData","unsentData","unsentDataKeys","isNextVisit","nextVisitTime","Date","now","filter","status","key","cdIndex","persistentCustomDataIndexes","has","includes","TrackingStatus","Unsent","VISIT_DURATION","write","getDataFromRaw","getPendingData","Pending","resultData","Object","entries","KameleoonData","CustomData","customData","values","index","customDataItem","_fromRaw","push","Conversion","conversion","PageView","pageView","pageViewItem","GeolocationData","geolocationData","geolocationItem","Browser","browserData","browserItem","Device","deviceData","deviceItem","OperatingSystem","osData","osItem","storeTrackedData","storeData","kameleoonData","forEach","b","type","delete","hasPersistentCustomData","some","mappingIdentifierCustomDataIndex","add","Array","from","length","firstParameter","result","f","arguments","secondParameter","h","mutUpdateTargetingData","getTree","segment","targetingTrees","id","get","targetingTree","Tree","set","clearTrees","clear","isPersistentCustomData","dataItem","size","Utilities","isCustomData","isUniqueIdentifier","uniqueIdentifier","UniqueIdentifier","value","getVisitorIdentifier","customDataValue","isIdentifier","storageData","visitorReference","dereferenceData","getVisitorStoredDataTypes","keys","getLinkedVisitor","visitorData","processCustomData","mutData","expirationTime","mutUpdateData","nextCleanup","nextDataCleanup","mutAddUnsentData","dataType","nextCleanupTime","mutCleanupData","isDataValid","_isMappingIdentifier","createReference","linkedVisitor","localCustomDataIndexes","Sent","unsentDataVisitors","identifierCustomDataIndex","trees","storedCustomDataIndexes","indexes","customDataIndexes","customDataLocalOnlyIndexes","localOnly","scope","CustomDataScope","Visitor","find","isMappingIdentifier","exports"],"sources":["../../src/kameleoonData/dataManager.ts"],"sourcesContent":["import { Result } from 'ts-res';\nimport { KameleoonError } from 'src/kameleoonError';\nimport { SegmentType, TargetingDataType, Tree } from 'src/targeting';\nimport { DataProcessor } from './dataProcessor';\nimport { CustomData } from './customData';\nimport {\n BrowserDataType,\n CustomDataType,\n DataFilterType,\n DataManagerParametersType,\n DeviceDataType,\n GeolocationDataType,\n KameleoonData,\n KameleoonDataType,\n KameleoonVisitorDataType,\n MutUpdateTargetingDataParametersType,\n OperatingSystemDataType,\n PageViewDataType,\n ProcessCustomDataManagerParametersType,\n VisitorsDataType,\n} from './types';\nimport { IStorage, VISIT_DURATION } from 'src/storage';\nimport {\n CustomDataConfigurationType,\n CustomDataScope,\n} from 'src/clientConfiguration';\nimport { Utilities } from 'src/utilities';\nimport { DataInfoType } from 'src/storage/types';\nimport { Conversion } from './conversion';\nimport { PageView } from './pageView';\nimport { Browser } from './browser';\nimport { Device } from './device';\nimport { GeolocationData } from './geolocation';\nimport { TrackingStatus } from 'src/types';\nimport { OperatingSystem } from './operatingSystem';\n\ninterface IDataManager {\n storeData(data: VisitorsDataType): Result<void, KameleoonError>;\n storeTrackedData(data: VisitorsDataType): void;\n getTree(segment: SegmentType): Tree;\n clearTrees(): void;\n isPersistentCustomData(dataItem: KameleoonDataType): dataItem is CustomData;\n isUniqueIdentifier(visitorCode: string): boolean;\n getLinkedVisitor(visitorCode: string, index: number | null): string | null;\n getVisitorData(visitorCode: string): KameleoonVisitorDataType | undefined;\n getVisitorIdentifier(visitorCode: string): string;\n getPendingData(visitorCode: string): KameleoonDataType[];\n getUnsentData(visitorCode: string): KameleoonDataType[];\n getVisitorStoredDataTypes(visitorCode: string): Set<KameleoonData>;\n readonly identifierCustomDataIndex: number | null;\n readonly storedCustomDataIndexes: Set<number>;\n readonly trees: Map<string, Tree>;\n readonly unsentDataVisitors: string[];\n}\n\nexport class DataManager implements IDataManager {\n private dataStorage: IStorage<TargetingDataType>;\n private infoStorage: IStorage<DataInfoType>;\n private dataProcessor: DataProcessor;\n private targetingTrees: Map<string, Tree> = new Map();\n private mappingIdentifierCustomDataIndex: number | null = null;\n private persistentCustomDataIndexes: Set<number> = new Set();\n private localCustomDataIndexes: Set<number> = new Set();\n private cleanupIntervalId: NodeJS.Timeout | null = null;\n\n constructor({\n dataStorage,\n infoStorage,\n cleanupInterval,\n }: DataManagerParametersType) {\n this.dataStorage = dataStorage;\n this.infoStorage = infoStorage;\n this.dataProcessor = new DataProcessor(cleanupInterval);\n\n if (cleanupInterval) {\n const cleanupCallback = () => {\n this.cleanupData();\n };\n\n // --- Note ---\n // We can not make delayed code execution recoverable, as it might lead\n // to targeting data storage size overflow\n try {\n this.cleanupIntervalId = setInterval(cleanupCallback, cleanupInterval);\n } catch (err) {\n if (this.cleanupIntervalId) {\n clearInterval(this.cleanupIntervalId);\n }\n\n throw err;\n }\n }\n }\n\n public getUnsentData(visitorCode: string): KameleoonDataType[] {\n const infoResult = this.infoStorage.read();\n\n if (!infoResult.ok) {\n return [];\n }\n\n const infoData = infoResult.data;\n const targetingData = this.getVisitorData(visitorCode);\n\n if (!infoData.unsentData[visitorCode] || !targetingData) {\n return [];\n }\n\n const unsentDataKeys = infoData.unsentData[visitorCode];\n const isNextVisit = infoData.nextVisitTime <= Date.now();\n\n const filter: DataFilterType = ({ status, key, cdIndex }) => {\n if (typeof cdIndex === 'number') {\n // --- Note ---\n // Persistent CustomData is mandatory for sending each time\n // but only once per visit\n if (this.persistentCustomDataIndexes.has(cdIndex) && isNextVisit) {\n return true;\n }\n }\n\n return unsentDataKeys.includes(key) && status === TrackingStatus.Unsent;\n };\n\n if (isNextVisit) {\n infoData.nextVisitTime = Date.now() + VISIT_DURATION;\n this.infoStorage.write(infoData);\n }\n\n return this.getDataFromRaw(targetingData, filter);\n }\n\n public getPendingData(visitorCode: string): KameleoonDataType[] {\n const targetingData = this.getVisitorData(visitorCode);\n\n if (!targetingData) {\n return [];\n }\n\n const filter: DataFilterType = ({ status }) =>\n status === TrackingStatus.Pending;\n\n return this.getDataFromRaw(targetingData, filter);\n }\n\n private getDataFromRaw(\n targetingData: KameleoonVisitorDataType,\n filter: DataFilterType,\n ): KameleoonDataType[] {\n const resultData: KameleoonDataType[] = [];\n\n for (const [key, data] of Object.entries(targetingData)) {\n if (!data) {\n continue;\n }\n\n switch (key) {\n case KameleoonData.CustomData: {\n for (const customData of Object.values(data)) {\n if (!customData) {\n continue;\n }\n\n const { status, index } = customData;\n\n if (filter({ status, key, cdIndex: index })) {\n const customDataItem = CustomData._fromRaw(customData);\n resultData.push(customDataItem);\n }\n }\n\n break;\n }\n case KameleoonData.Conversion: {\n for (const conversion of Object.values(data)) {\n if (!conversion) {\n continue;\n }\n\n if (filter({ status: conversion.status, key })) {\n const customDataItem = Conversion._fromRaw(conversion);\n resultData.push(customDataItem);\n }\n }\n\n break;\n }\n case KameleoonData.PageView: {\n const pageViewData = data as { [key: string]: PageViewDataType };\n\n for (const pageView of Object.values(pageViewData)) {\n if (filter({ status: pageView.status, key })) {\n const pageViewItem = PageView._fromRaw(pageView);\n resultData.push(pageViewItem);\n }\n }\n\n break;\n }\n case KameleoonData.GeolocationData: {\n const geolocationData = data as GeolocationDataType;\n\n if (!data) {\n continue;\n }\n\n if (filter({ status: geolocationData.status, key })) {\n const geolocationItem = GeolocationData._fromRaw(geolocationData);\n resultData.push(geolocationItem);\n }\n\n break;\n }\n case KameleoonData.Browser: {\n const browserData = data as BrowserDataType;\n\n if (filter({ status: browserData.status, key })) {\n const browserItem = Browser._fromRaw(browserData);\n resultData.push(browserItem);\n }\n\n break;\n }\n case KameleoonData.Device: {\n const deviceData = data as DeviceDataType;\n\n if (filter({ status: deviceData.status, key })) {\n const deviceItem = Device._fromRaw(deviceData);\n resultData.push(deviceItem);\n }\n\n break;\n }\n case KameleoonData.OperatingSystem: {\n const osData = data as OperatingSystemDataType;\n\n if (filter({ status: osData.status, key })) {\n const osItem = OperatingSystem._fromRaw(osData);\n resultData.push(osItem);\n }\n }\n }\n }\n\n return resultData;\n }\n\n public storeTrackedData(data: VisitorsDataType): void {\n this.storeData(data);\n\n const infoResult = this.infoStorage.read();\n\n if (!infoResult.ok) {\n return;\n }\n\n const unsentData = infoResult.data.unsentData;\n\n for (const [visitorCode, kameleoonData] of Object.entries(data)) {\n if (!unsentData[visitorCode]) {\n return;\n }\n\n const unsentDataKeys = new Set(unsentData[visitorCode]);\n\n kameleoonData.forEach(({ data }) => {\n if (unsentDataKeys.has(data.type)) {\n unsentDataKeys.delete(data.type);\n }\n });\n\n const hasPersistentCustomData = kameleoonData.some(({ data }) => {\n if (data.type !== KameleoonData.CustomData) {\n return false;\n }\n\n const { index } = data as CustomDataType;\n\n return (\n this.persistentCustomDataIndexes.has(index) ||\n this.mappingIdentifierCustomDataIndex === index\n );\n });\n\n if (hasPersistentCustomData) {\n unsentDataKeys.add(KameleoonData.CustomData);\n }\n\n unsentData[visitorCode] = Array.from(unsentDataKeys);\n\n if (!unsentData[visitorCode].length) {\n delete unsentData[visitorCode];\n }\n }\n\n this.infoStorage.write(infoResult.data);\n }\n\n public storeData(data: VisitorsDataType): Result<void, KameleoonError>;\n public storeData(\n visitorCode: string,\n ...data: KameleoonDataType[]\n ): Result<void, KameleoonError>;\n public storeData(\n firstParameter: VisitorsDataType | string,\n ...secondParameter: KameleoonDataType[]\n ): Result<void, KameleoonError> {\n const result = this.dataStorage.read();\n const infoResult = this.infoStorage.read();\n\n if (!result.ok) {\n return result;\n }\n\n if (!infoResult.ok) {\n return infoResult;\n }\n\n const targetingData = result.data;\n const infoData = infoResult.data;\n\n if (typeof firstParameter === 'string') {\n this.mutUpdateTargetingData({\n infoData,\n targetingData,\n visitorCode: firstParameter,\n kameleoonData: secondParameter!,\n });\n } else {\n for (const [visitorCode, kameleoonData] of Object.entries(\n firstParameter,\n )) {\n this.mutUpdateTargetingData({\n infoData,\n targetingData,\n visitorCode,\n kameleoonData,\n });\n }\n }\n\n this.cleanupData();\n this.infoStorage.write(infoResult.data);\n\n return this.dataStorage.write(targetingData);\n }\n\n public getTree(segment: SegmentType): Tree {\n if (this.targetingTrees.has(segment.id)) {\n return this.targetingTrees.get(segment.id)!;\n }\n\n const targetingTree = new Tree(segment);\n this.targetingTrees.set(segment.id, targetingTree);\n\n return targetingTree;\n }\n\n public clearTrees(): void {\n this.targetingTrees.clear();\n }\n\n public isPersistentCustomData(\n dataItem: KameleoonDataType,\n ): dataItem is CustomData {\n if (!this.persistentCustomDataIndexes.size) {\n return false;\n }\n\n if (Utilities.isCustomData(dataItem)) {\n return this.persistentCustomDataIndexes.has(dataItem.data.index);\n }\n\n return false;\n }\n\n public isUniqueIdentifier(visitorCode: string): boolean {\n const targetingData = this.getVisitorData(visitorCode);\n const uniqueIdentifier = targetingData?.[KameleoonData.UniqueIdentifier];\n\n return uniqueIdentifier?.value ?? false;\n }\n\n public getVisitorIdentifier(visitorCode: string): string {\n const targetingData = this.getVisitorData(visitorCode);\n\n if (!targetingData) {\n return visitorCode;\n }\n\n const customData = targetingData[KameleoonData.CustomData];\n\n if (!customData || this.mappingIdentifierCustomDataIndex === null) {\n return visitorCode;\n }\n\n const customDataValue = customData[this.mappingIdentifierCustomDataIndex];\n\n if (customDataValue && customDataValue.isIdentifier) {\n return customDataValue.value[0];\n }\n\n return visitorCode;\n }\n\n public getVisitorData(\n visitorCode: string,\n ): KameleoonVisitorDataType | undefined {\n this.cleanupData();\n\n const storageData = this.dataStorage.read();\n\n if (!storageData.ok) {\n return undefined;\n }\n\n const { visitorReference, data } = this.dataProcessor.dereferenceData(\n storageData.data,\n visitorCode,\n );\n\n return data[visitorReference];\n }\n\n public getVisitorStoredDataTypes(visitorCode: string): Set<KameleoonData> {\n const targetingData = this.getVisitorData(visitorCode);\n\n if (!targetingData) {\n return new Set();\n }\n\n return new Set(Object.keys(targetingData) as KameleoonData[]);\n }\n\n public getLinkedVisitor(visitorCode: string): string | null {\n const storageData = this.dataStorage.read();\n\n if (!storageData.ok) {\n return null;\n }\n\n if (typeof storageData.data[visitorCode] === 'string') {\n return storageData.data[visitorCode] as string;\n }\n\n if (this.mappingIdentifierCustomDataIndex === null) {\n return null;\n }\n\n const visitorData = storageData.data[\n visitorCode\n ] as KameleoonVisitorDataType;\n\n if (!visitorData) {\n return null;\n }\n\n const customData = visitorData[KameleoonData.CustomData];\n\n if (customData && customData[this.mappingIdentifierCustomDataIndex]) {\n return (\n customData[this.mappingIdentifierCustomDataIndex] as CustomDataType\n ).value[0];\n }\n\n return null;\n }\n\n private mutUpdateTargetingData({\n infoData,\n visitorCode,\n kameleoonData,\n targetingData,\n }: MutUpdateTargetingDataParametersType) {\n for (const dataItem of kameleoonData) {\n if (dataItem.data.type === KameleoonData.CustomData) {\n this.processCustomData({\n customData: dataItem as CustomData,\n mutData: targetingData,\n visitorCode,\n });\n }\n\n const expirationTime = this.dataProcessor.mutUpdateData({\n visitorCode,\n mutData: targetingData,\n dataItem,\n });\n\n const nextCleanup = infoData.nextDataCleanup;\n\n if (!nextCleanup || (nextCleanup && expirationTime < nextCleanup)) {\n infoData.nextDataCleanup = expirationTime;\n }\n\n if (dataItem.data.status === TrackingStatus.Unsent) {\n this.dataProcessor.mutAddUnsentData({\n mutData: infoData,\n visitorCode,\n dataType: dataItem.data.type,\n });\n }\n }\n }\n\n private cleanupData(): void {\n const result = this.dataStorage.read();\n const infoResult = this.infoStorage.read();\n\n if (!result.ok || !infoResult.ok) {\n return;\n }\n\n const data = result.data;\n const infoData = infoResult.data;\n\n const nextCleanup = infoData.nextDataCleanup;\n\n if (nextCleanup && nextCleanup < Date.now()) {\n const nextCleanupTime = this.dataProcessor.mutCleanupData(data);\n\n infoData.nextDataCleanup = nextCleanupTime || undefined;\n\n this.infoStorage.write(infoData);\n this.dataStorage.write(data);\n }\n }\n\n private processCustomData({\n mutData,\n customData,\n visitorCode,\n }: ProcessCustomDataManagerParametersType): void {\n const { data } = customData;\n\n const isDataValid = Boolean(data.value.length && data.value[0].length);\n\n if (this.mappingIdentifierCustomDataIndex === data.index && isDataValid) {\n customData._isMappingIdentifier = true;\n\n if (visitorCode !== data.value[0]) {\n // --- Note ---\n // Associate linked visitor codes\n this.dataProcessor.createReference({\n mutData,\n visitorCode,\n linkedVisitor: data.value[0],\n });\n }\n }\n\n if (this.localCustomDataIndexes.has(data.index)) {\n customData.status = TrackingStatus.Sent;\n }\n }\n\n get unsentDataVisitors(): string[] {\n const infoResult = this.infoStorage.read();\n\n if (!infoResult.ok) {\n return [];\n }\n\n return Object.keys(infoResult.data.unsentData);\n }\n\n get identifierCustomDataIndex(): number | null {\n return this.mappingIdentifierCustomDataIndex;\n }\n\n get trees(): Map<string, Tree> {\n return this.targetingTrees;\n }\n\n get storedCustomDataIndexes(): Set<number> {\n const result = this.dataStorage.read();\n\n if (!result.ok) {\n return new Set();\n }\n\n const targetingData = result.data;\n\n if (!(KameleoonData.CustomData in targetingData)) {\n return new Set();\n }\n\n const indexes = new Set<number>();\n\n for (const index in Object.keys(targetingData[KameleoonData.CustomData])) {\n indexes.add(Number(index));\n }\n\n return indexes;\n }\n\n set customDataIndexes(customData: CustomDataConfigurationType[]) {\n const [customDataLocalOnlyIndexes, persistentCustomDataIndexes]: Array<\n number[]\n > = [[], []];\n\n customData.forEach((customData) => {\n if (customData.localOnly) {\n customDataLocalOnlyIndexes.push(customData.index);\n }\n\n if (customData.scope === CustomDataScope.Visitor) {\n persistentCustomDataIndexes.push(customData.index);\n }\n });\n\n this.mappingIdentifierCustomDataIndex =\n customData.find((customData) => customData.isMappingIdentifier)?.index ||\n null;\n\n this.localCustomDataIndexes = new Set(customDataLocalOnlyIndexes);\n this.persistentCustomDataIndexes = new Set(persistentCustomDataIndexes);\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,32 +1,30 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { TargetingDataType, VisitorReference } from '../targeting';
|
|
4
|
-
import { KameleoonError } from '../kameleoonError';
|
|
5
|
-
import { KameleoonData, KameleoonDataType, KameleoonVisitorDataType } from './types';
|
|
1
|
+
import { TargetingDataType } from '../targeting';
|
|
2
|
+
import { DereferenceTargetingDataResultType, MutAddUnsentDataType, MutUpdateDataParametersType, ReferenceParametersType } from './types';
|
|
6
3
|
interface IDataProcessor {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
4
|
+
mutUpdateData({ visitorCode, mutData, dataItem, }: MutUpdateDataParametersType): number;
|
|
5
|
+
mutCleanupData(mutData: TargetingDataType): number | null;
|
|
6
|
+
createReference({ mutData, visitorCode, linkedVisitor, }: ReferenceParametersType): void;
|
|
7
|
+
dereferenceData(data: TargetingDataType, visitorCode: string): DereferenceTargetingDataResultType;
|
|
8
|
+
mutAddUnsentData({ mutData, visitorCode, dataType, }: MutAddUnsentDataType): void;
|
|
12
9
|
}
|
|
13
10
|
export declare class DataProcessor implements IDataProcessor {
|
|
14
|
-
private
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
createReference(visitorCode
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
private
|
|
24
|
-
|
|
25
|
-
|
|
11
|
+
private cleanupInterval;
|
|
12
|
+
constructor(cleanupInterval?: number | null);
|
|
13
|
+
mutUpdateData({ visitorCode, mutData, dataItem, }: MutUpdateDataParametersType): number;
|
|
14
|
+
mutCleanupData(mutData: TargetingDataType): number | null;
|
|
15
|
+
mutAddUnsentData({ mutData, visitorCode, dataType, }: MutAddUnsentDataType): void;
|
|
16
|
+
createReference({ mutData, visitorCode, linkedVisitor, }: ReferenceParametersType): void;
|
|
17
|
+
removeReference({ mutData, visitorCode, linkedVisitor, }: ReferenceParametersType): void;
|
|
18
|
+
private updatePageView;
|
|
19
|
+
private updateCustomData;
|
|
20
|
+
private updateConversion;
|
|
21
|
+
private updateVisitsData;
|
|
22
|
+
private updateCommonData;
|
|
23
|
+
dereferenceData(data: TargetingDataType, visitorCode: string): DereferenceTargetingDataResultType;
|
|
24
|
+
private deleteExpiredField;
|
|
25
|
+
private deleteNestedExpiredField;
|
|
26
26
|
private updateField;
|
|
27
27
|
private createField;
|
|
28
|
-
private updateArrayField;
|
|
29
|
-
private createArrayField;
|
|
30
28
|
private updateNestedField;
|
|
31
29
|
private createNestedField;
|
|
32
30
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";
|
|
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;
|
|
2
2
|
//# sourceMappingURL=dataProcessor.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataProcessor.js","names":["DataProcessor","constructor","storage","_defineProperty","Set","updateData","visitorCode","dataItem","storageData","read","or","dereferencedData","dereferenceTargetingData","visitorReference","data","type","KameleoonData","CustomData","hasCustomDataKey","parameters","key","nestedKey","index","toString","value","updateNestedField","createNestedField","storedCustomDataIndexes","add","PageView","f","timestamps","length","Date","now","existingData","urlAddress","forEach","timestamp","Utilities","insertInOrderedListMutably","list","element","order","Order","Ascending","referrers","title","_objectSpread","Conversion","hasConversionDataKey","updateArrayField","createArrayField","VisitsData","hasVisitsKey","existingVisits","visits","visit","updateField","createField","hasDataKey","storedDataTypes","write","createReference","linkedVisitor","ok","getLinkedVisitor","visitorData","customData","cleanupTargetingData","cleanupInterval","targetingData","currentTime","Object","keys","kameleoonVisitorData","entries","pageView","conversion","rest","_objectWithoutProperties","_excluded","isDataExpired","lastActivityTime","delete","clear","url","splice","indexOf","getTargetingData","Err","error","Ok","referredVisitorCode","storedDataTypeList","storedCustomDataIndexList","a","push","b","exports"],"sources":["../../src/kameleoonData/dataProcessor.ts"],"sourcesContent":["import { Err, Ok, Result } from 'ts-res';\nimport { IStorage } from 'src/storage';\nimport {\n DereferencedTargetingDataType,\n TargetingDataType,\n VisitorReference,\n} from 'src/targeting';\nimport { KameleoonError } from 'src/kameleoonError';\nimport { Utilities } from 'src/utilities';\nimport { Order } from 'src/utilities/types';\nimport {\n ArrayFieldParametersType,\n ConversionDataType,\n CustomDataType,\n DereferenceTargetingDataResultType,\n ExistingArrayDataType,\n ExistingDataType,\n ExistingNestedDataType,\n ExistingPageViewDataType,\n ExistingVisitsDataType,\n FieldParametersType,\n KameleoonData,\n KameleoonDataType,\n KameleoonVisitorDataType,\n NestedFieldParametersType,\n PageViewDataType,\n VisitsDataType,\n} from './types';\n\ninterface IDataProcessor {\n updateData(\n visitorCode: string,\n dataItem: KameleoonDataType,\n ): Result<void, KameleoonError>;\n createReference(visitorCode: string, linkedVisitor: VisitorReference): void;\n cleanupTargetingData(targetingCleanupInterval?: number): void;\n getTargetingData(\n visitorCode: string,\n ): Result<KameleoonVisitorDataType | null, KameleoonError>;\n getLinkedVisitor(visitorCode: string, index: number): string | null;\n}\n\nexport class DataProcessor implements IDataProcessor {\n private storage: IStorage<TargetingDataType>;\n private storedDataTypes: Set<KameleoonData> = new Set([]);\n private storedCustomDataIndexes: Set<number> = new Set([]);\n\n constructor(storage: IStorage<TargetingDataType>) {\n this.storage = storage;\n }\n\n // --- Note ---\n // Following code is optimized for performance:\n // - We don't want to copy the whole object every time we add new data\n // - So we are manually checking the keys existence and mutating targeting data directly\n // - Numerous type casts are required because we can't narrow down nested `targetingData` types by using assertion functions\n public updateData(\n visitorCode: string,\n dataItem: KameleoonDataType,\n ): Result<void, KameleoonError> {\n const storageData = this.storage.read().or({});\n const dereferencedData = this.dereferenceTargetingData(\n storageData,\n visitorCode,\n );\n const visitorReference = dereferencedData?.visitorReference || visitorCode;\n\n switch (dataItem.data.type) {\n case KameleoonData.CustomData: {\n const data = dataItem.data as CustomDataType;\n const hasCustomDataKey =\n dereferencedData && KameleoonData.CustomData in dereferencedData.data;\n const parameters: NestedFieldParametersType = {\n visitorCode: visitorReference,\n data: storageData as DereferencedTargetingDataType,\n key: KameleoonData.CustomData,\n nestedKey: data.index.toString(),\n value: data,\n };\n\n if (hasCustomDataKey) {\n this.updateNestedField(parameters);\n } else {\n this.createNestedField(parameters);\n }\n\n // --- Note ---\n // Here we add CustomData index to storedCustomDataIndexes to later track if it is added to storage\n this.storedCustomDataIndexes.add(data.index);\n\n break;\n }\n case KameleoonData.PageView: {\n const data = dataItem.data as PageViewDataType;\n\n // --- Note ---\n // We assign `timestamps` to `Date.now()` if it's empty\n // Not upon data item creation because it makes no sense in terms\n // of data flow to have some indication of data activity before it was added\n if (!data.timestamps.length) {\n data.timestamps = [Date.now()];\n }\n\n const existingData =\n dereferencedData &&\n KameleoonData.PageView in dereferencedData.data &&\n (dereferencedData.data[data.type] as ExistingPageViewDataType)?.[\n data.urlAddress\n ];\n\n const parameters: NestedFieldParametersType = {\n visitorCode: visitorReference,\n data: storageData as DereferencedTargetingDataType,\n key: KameleoonData.PageView,\n nestedKey: data.urlAddress,\n value: data,\n };\n\n if (existingData) {\n // --- Note ---\n // Updating existing `PageView` properties by pushing new timestamps\n // and potentially changing referrers and title\n data.timestamps.forEach((timestamp) => {\n Utilities.insertInOrderedListMutably({\n list: existingData.timestamps,\n element: timestamp,\n order: Order.Ascending,\n });\n });\n\n [existingData.referrers, existingData.title] = [\n data.referrers,\n data.title,\n ];\n\n this.updateNestedField({ ...parameters, value: existingData });\n } else {\n this.createNestedField(parameters);\n }\n\n break;\n }\n case KameleoonData.Conversion: {\n const data = dataItem.data as ConversionDataType;\n const hasConversionDataKey =\n dereferencedData && KameleoonData.Conversion in dereferencedData.data;\n const parameters: ArrayFieldParametersType = {\n visitorCode: visitorReference,\n data: storageData as DereferencedTargetingDataType,\n key: KameleoonData.Conversion,\n value: data,\n };\n\n if (hasConversionDataKey) {\n this.updateArrayField(parameters);\n } else {\n this.createArrayField(parameters);\n }\n\n break;\n }\n case KameleoonData.VisitsData: {\n const data = dataItem.data as VisitsDataType;\n const hasVisitsKey =\n dereferencedData && KameleoonData.VisitsData in dereferencedData.data;\n const parameters: FieldParametersType = {\n visitorCode: visitorReference,\n data: storageData as DereferencedTargetingDataType,\n key: KameleoonData.VisitsData,\n value: data,\n };\n\n // -- Change directly if `[key]` exists\n if (hasVisitsKey) {\n const existingVisits = dereferencedData.data[\n data.type\n ] as ExistingVisitsDataType;\n\n // --- Note ---\n // We are preserving the order of visits\n existingVisits.visits.forEach((visit) => {\n Utilities.insertInOrderedListMutably({\n list: data.visits,\n element: visit,\n order: Order.Ascending,\n });\n });\n\n this.updateField({\n ...parameters,\n value: {\n ...data,\n visits: data.visits,\n },\n });\n } else {\n this.createField(parameters);\n }\n\n break;\n }\n default: {\n const { data } = dataItem;\n const hasDataKey =\n dereferencedData && data.type in dereferencedData.data;\n const parameters: FieldParametersType = {\n visitorCode: visitorReference,\n data: storageData as DereferencedTargetingDataType,\n key: data.type,\n // --- Note ---\n // At this point TypeScript can not infer that value is subset of only\n // what is left for `default` case\n value: data as FieldParametersType['value'],\n };\n\n if (hasDataKey) {\n this.updateField(parameters);\n } else {\n this.createField(parameters);\n }\n\n // --- Note ---\n // Here we add Browser, Device, Geolocation, OperatingSystem, KameleoonConversionScore to storedDataTypes\n // Later track if it is added to storage\n this.storedDataTypes.add(data.type);\n }\n }\n\n return this.storage.write(storageData);\n }\n\n public createReference(\n visitorCode: string,\n linkedVisitor: VisitorReference,\n ): void {\n const storageData = this.storage.read();\n\n if (!storageData.ok) {\n return;\n }\n\n // --- Note ---\n // Provided(linked) visitor is now pointing to the visitor code\n storageData.data[linkedVisitor] = visitorCode;\n\n this.storage.write(storageData.data);\n }\n\n public getLinkedVisitor(\n visitorCode: string,\n index: number | null,\n ): string | null {\n const storageData = this.storage.read();\n\n if (!storageData.ok) {\n return null;\n }\n\n if (typeof storageData.data[visitorCode] === 'string') {\n return storageData.data[visitorCode] as string;\n }\n\n if (index === null) {\n return null;\n }\n\n const visitorData = storageData.data[\n visitorCode\n ] as KameleoonVisitorDataType;\n\n if (!visitorData) {\n return null;\n }\n\n const customData = visitorData[KameleoonData.CustomData];\n\n if (customData && customData[index]) {\n return (customData[index] as CustomDataType).value[0];\n }\n\n return null;\n }\n\n public cleanupTargetingData(cleanupInterval: number): void {\n const storageData = this.storage.read();\n\n if (!storageData.ok) {\n return;\n }\n\n const targetingData = storageData.data;\n const currentTime = Date.now();\n\n // --- Note (Weird Thing) ---\n // Generally the check is not needed\n // If the `targetingData` is empty the loop will not be executed\n // But here something weird happens and we'are getting `TypeError` here\n // Even logging `Object.keys().length` or `Object.entries().length` solves the issue somehow\n // You can see the issue by commenting the following `if` statement and waiting for a data cleanup\n // TODO: investigate it later (probably related to object copying?)\n if (!Object.keys(targetingData).length) {\n return;\n }\n\n for (const [visitorCode, kameleoonVisitorData] of Object.entries(\n targetingData,\n )) {\n if (typeof kameleoonVisitorData === 'string') {\n delete targetingData[visitorCode];\n continue;\n }\n\n const visitorData = kameleoonVisitorData;\n\n const { customData, pageView, conversion, ...rest } = visitorData;\n\n // TODO: This way of cleaning up data is not optimal\n // And will be changed when sessions are introduced\n if (customData) {\n for (const [index, dataItem] of Object.entries(customData)) {\n if (dataItem) {\n const isDataExpired =\n dataItem.lastActivityTime + cleanupInterval < currentTime;\n const existingData = visitorData[KameleoonData.CustomData];\n\n if (isDataExpired && existingData) {\n this.storedCustomDataIndexes.delete(Number(index));\n delete existingData[Number(index)];\n }\n\n if (existingData && !Object.keys(existingData).length) {\n this.storedCustomDataIndexes.clear();\n delete targetingData[KameleoonData.CustomData];\n }\n }\n }\n }\n\n if (pageView) {\n for (const [url, dataItem] of Object.entries(pageView)) {\n const isDataExpired =\n dataItem.lastActivityTime + cleanupInterval < currentTime;\n const existingData = visitorData[KameleoonData.PageView];\n\n if (isDataExpired && existingData) {\n delete existingData[url];\n }\n\n if (existingData && !Object.keys(existingData).length) {\n delete visitorData[KameleoonData.PageView];\n }\n }\n }\n\n if (conversion) {\n for (const dataItem of conversion) {\n const isDataExpired =\n dataItem.lastActivityTime + cleanupInterval < currentTime;\n const existingData = visitorData[KameleoonData.Conversion];\n\n if (isDataExpired && existingData) {\n existingData.splice(existingData.indexOf(dataItem), 1);\n }\n\n if (existingData && !existingData.length) {\n delete visitorData[KameleoonData.Conversion];\n }\n }\n }\n\n for (const [key, dataItem] of Object.entries(rest)) {\n const isDataExpired =\n dataItem.lastActivityTime + cleanupInterval < currentTime;\n\n if (isDataExpired) {\n delete visitorData[key as KameleoonData];\n this.storedDataTypes.delete(key as KameleoonData);\n }\n }\n\n if (!Object.keys(targetingData[visitorCode]).length) {\n this.storedDataTypes.clear();\n this.storedCustomDataIndexes.clear();\n delete targetingData[visitorCode];\n }\n }\n\n this.storage.write(targetingData);\n }\n\n public getTargetingData(\n visitorCode: string,\n ): Result<KameleoonVisitorDataType | null, KameleoonError> {\n const storageData = this.storage.read();\n\n if (!storageData.ok) {\n return Err(storageData.error);\n }\n\n // TODO: when visitor session is introduced:\n // We can do extra cleanup here to avoid too long data lifetime\n // For now it's too expensive to check each data item on\n // ech data read\n\n const dereferencedData = this.dereferenceTargetingData(\n storageData.data,\n visitorCode,\n );\n\n if (!dereferencedData) {\n return Ok(null);\n }\n\n return Ok(dereferencedData.data);\n }\n\n private dereferenceTargetingData(\n data: TargetingDataType,\n visitorCode: string,\n ): DereferenceTargetingDataResultType | null {\n if (!data[visitorCode]) {\n return null;\n }\n\n // --- Note ---\n // Visitor reference can not refer to another visitor reference\n if (typeof data[visitorCode] === 'string') {\n const referredVisitorCode = data[visitorCode] as VisitorReference;\n\n return {\n data: data[referredVisitorCode] as KameleoonVisitorDataType,\n visitorReference: referredVisitorCode,\n };\n }\n\n return {\n data: data[visitorCode] as KameleoonVisitorDataType,\n visitorReference: visitorCode,\n };\n }\n\n get storedDataTypeList(): Set<KameleoonData> {\n return this.storedDataTypes;\n }\n\n get storedCustomDataIndexList(): Set<number> {\n return this.storedCustomDataIndexes;\n }\n\n private updateField({\n visitorCode,\n key,\n value,\n data,\n }: FieldParametersType): void {\n (data[visitorCode][key] as ExistingDataType<typeof key>) = {\n ...value,\n lastActivityTime: Date.now(),\n };\n }\n\n private createField({\n visitorCode,\n key,\n value,\n data,\n }: FieldParametersType): void {\n data[visitorCode] = {\n ...data[visitorCode],\n [key]: { ...value, lastActivityTime: Date.now() },\n };\n }\n\n private updateArrayField({\n visitorCode,\n key,\n value,\n data,\n }: ArrayFieldParametersType): void {\n (data[visitorCode][key] as ExistingArrayDataType).push({\n ...value,\n lastActivityTime: Date.now(),\n });\n }\n\n private createArrayField({\n visitorCode,\n key,\n value,\n data,\n }: ArrayFieldParametersType): void {\n data[visitorCode] = {\n ...data[visitorCode],\n [key]: [{ ...value, lastActivityTime: Date.now() }],\n };\n }\n\n private updateNestedField({\n visitorCode,\n key,\n nestedKey,\n value,\n data,\n }: NestedFieldParametersType): void {\n (data[visitorCode][key] as ExistingNestedDataType)[nestedKey] = {\n ...value,\n lastActivityTime: Date.now(),\n };\n }\n\n private createNestedField({\n visitorCode,\n key,\n nestedKey,\n value,\n data,\n }: NestedFieldParametersType): void {\n if (!data[visitorCode]?.[key]) {\n data[visitorCode] = {\n ...data[visitorCode],\n [key]: {\n [nestedKey]: { ...value, lastActivityTime: Date.now() },\n },\n };\n } else {\n data[visitorCode] = {\n ...data[visitorCode],\n [key]: {\n ...data[visitorCode][key],\n [nestedKey]: { ...value, lastActivityTime: Date.now() },\n },\n };\n }\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dataProcessor.js","names":["DataProcessor","constructor","cleanupInterval","arguments","length","_defineProperty","mutUpdateData","a","visitorCode","mutData","dataItem","visitorReference","data","dereferenceData","expirationTime","Date","now","type","KameleoonData","CustomData","updateCustomData","customData","PageView","updatePageView","pageView","Conversion","updateConversion","conversion","VisitsData","updateVisitsData","visitsData","updateCommonData","commonData","mutCleanupData","nextCleanupTime","Object","entries","removeReference","linkedVisitor","closestCleanupTime","key","keys","dataKey","time","deleteNestedExpiredField","deleteExpiredField","mutAddUnsentData","dataType","unsentData","set","Set","add","Array","from","createReference","isExist","urlAddress","parameters","nestedKey","value","existingData","existingTimestamps","timestamps","existingTimestamp","existingTime","some","index","findIndex","push","splice","updateNestedField","createNestedField","toString","id","existingVisits","visits","forEach","visit","Utilities","insertInOrderedListMutably","list","element","order","Order","Ascending","updateField","_objectSpread","createField","isExpired","b","exports"],"sources":["../../src/kameleoonData/dataProcessor.ts"],"sourcesContent":["import {\n DereferencedTargetingDataType,\n TargetingDataType,\n VisitorReference,\n} from 'src/targeting';\nimport { Utilities, Order } from 'src/utilities';\nimport {\n DereferenceTargetingDataResultType,\n ExistingDataType,\n ExistingNestedDataType,\n FieldParametersType,\n KameleoonData,\n KameleoonVisitorDataType,\n MutAddUnsentDataType,\n MutUpdateDataParametersType,\n NestedFieldParametersType,\n ReferenceParametersType,\n UpdateCommonDataParametersType,\n UpdateConversionParametersType,\n UpdateCustomDataParametersType,\n UpdatePageViewParametersType,\n UpdateVisitsDataParametersType,\n} from './types';\nimport { CustomData } from './customData';\nimport { VisitsData } from './visitsData';\nimport { Conversion } from './conversion';\nimport { PageView } from './pageView';\n\ninterface IDataProcessor {\n mutUpdateData({\n visitorCode,\n mutData,\n dataItem,\n }: MutUpdateDataParametersType): number;\n mutCleanupData(mutData: TargetingDataType): number | null;\n createReference({\n mutData,\n visitorCode,\n linkedVisitor,\n }: ReferenceParametersType): void;\n dereferenceData(\n data: TargetingDataType,\n visitorCode: string,\n ): DereferenceTargetingDataResultType;\n mutAddUnsentData({\n mutData,\n visitorCode,\n dataType,\n }: MutAddUnsentDataType): void;\n}\n\nexport class DataProcessor implements IDataProcessor {\n private cleanupInterval: number | null;\n\n constructor(cleanupInterval: number | null = null) {\n this.cleanupInterval = cleanupInterval;\n }\n\n public mutUpdateData({\n visitorCode,\n mutData,\n dataItem,\n }: MutUpdateDataParametersType): number {\n const { visitorReference, data } = this.dereferenceData(\n mutData,\n visitorCode,\n );\n\n const expirationTime = this.cleanupInterval\n ? Date.now() + this.cleanupInterval\n : 0;\n\n switch (dataItem.data.type) {\n case KameleoonData.CustomData: {\n this.updateCustomData({\n expirationTime,\n customData: dataItem as CustomData,\n visitorCode: visitorReference,\n mutData: data,\n });\n\n break;\n }\n case KameleoonData.PageView: {\n this.updatePageView({\n expirationTime,\n pageView: dataItem as PageView,\n visitorCode: visitorReference,\n mutData: data,\n });\n\n break;\n }\n case KameleoonData.Conversion: {\n this.updateConversion({\n expirationTime,\n conversion: dataItem as Conversion,\n visitorCode: visitorReference,\n mutData: data,\n });\n\n break;\n }\n case KameleoonData.VisitsData: {\n this.updateVisitsData({\n expirationTime,\n visitsData: dataItem as VisitsData,\n visitorCode: visitorReference,\n mutData: data,\n });\n break;\n }\n default: {\n this.updateCommonData({\n expirationTime,\n commonData: dataItem,\n visitorCode: visitorReference,\n mutData: data,\n });\n }\n }\n\n return expirationTime;\n }\n\n public mutCleanupData(mutData: TargetingDataType): number | null {\n if (!this.cleanupInterval) {\n return null;\n }\n\n let nextCleanupTime = 0;\n\n for (const [visitorCode, data] of Object.entries(mutData)) {\n if (typeof data === 'string') {\n this.removeReference({\n mutData,\n visitorCode,\n linkedVisitor: data,\n });\n\n continue;\n }\n\n let closestCleanupTime = 0;\n\n for (const key of Object.keys(data)) {\n const dataKey = key as KameleoonData;\n\n let time;\n\n switch (dataKey) {\n case KameleoonData.CustomData:\n case KameleoonData.PageView:\n case KameleoonData.Conversion: {\n time = this.deleteNestedExpiredField(data, dataKey);\n break;\n }\n default: {\n time = this.deleteExpiredField(data, dataKey);\n }\n }\n\n if (!closestCleanupTime || (time && time < closestCleanupTime)) {\n closestCleanupTime = time;\n }\n }\n\n if (!Object.keys(mutData[visitorCode]).length) {\n delete mutData[visitorCode];\n } else {\n if (\n !nextCleanupTime ||\n (closestCleanupTime && closestCleanupTime < nextCleanupTime)\n ) {\n nextCleanupTime = closestCleanupTime;\n }\n }\n }\n\n return nextCleanupTime;\n }\n\n public mutAddUnsentData({\n mutData,\n visitorCode,\n dataType,\n }: MutAddUnsentDataType): void {\n const unsentData = mutData.unsentData[visitorCode];\n\n if (!unsentData || !unsentData.length) {\n mutData.unsentData[visitorCode] = [dataType];\n } else {\n const set = new Set([...unsentData]);\n set.add(dataType);\n\n mutData.unsentData[visitorCode] = Array.from(set);\n }\n }\n\n public createReference({\n mutData,\n visitorCode,\n linkedVisitor,\n }: ReferenceParametersType): void {\n // --- Note ---\n // Provided(linked) visitor is now pointing to the visitor code\n mutData[linkedVisitor] = visitorCode;\n }\n\n public removeReference({\n mutData,\n visitorCode,\n linkedVisitor,\n }: ReferenceParametersType): void {\n if (!mutData[linkedVisitor]) {\n delete mutData[visitorCode];\n }\n }\n\n private updatePageView({\n visitorCode,\n mutData,\n pageView,\n expirationTime,\n }: UpdatePageViewParametersType): void {\n const { data } = pageView;\n\n const isExist =\n mutData[visitorCode] &&\n KameleoonData.PageView in mutData[visitorCode] &&\n data.urlAddress in mutData[visitorCode][KameleoonData.PageView]!;\n\n const parameters: NestedFieldParametersType = {\n expirationTime,\n visitorCode,\n data: mutData,\n key: KameleoonData.PageView,\n nestedKey: data.urlAddress,\n value: data,\n };\n\n if (isExist) {\n const existingData =\n mutData[visitorCode][KameleoonData.PageView]![data.urlAddress];\n const existingTimestamps = existingData.timestamps;\n\n // --- Note ---\n // Merging existing timestamps with added\n for (const existingTimestamp of existingTimestamps) {\n const { time: existingTime } = existingTimestamp;\n\n if (data.timestamps.some(({ time }) => time === existingTime)) {\n continue;\n }\n\n const index = data.timestamps.findIndex(\n ({ time }) => time >= existingTime,\n );\n\n if (index === -1) {\n data.timestamps.push(existingTimestamp);\n } else {\n data.timestamps.splice(index, 0, existingTimestamp);\n }\n }\n\n this.updateNestedField(parameters);\n } else {\n this.createNestedField(parameters);\n }\n }\n\n private updateCustomData({\n visitorCode,\n customData,\n mutData,\n expirationTime,\n }: UpdateCustomDataParametersType): void {\n const { data } = customData;\n const isExist =\n mutData[visitorCode] && KameleoonData.CustomData in mutData[visitorCode];\n\n const parameters: NestedFieldParametersType = {\n expirationTime,\n visitorCode,\n data: mutData,\n key: KameleoonData.CustomData,\n nestedKey: data.index.toString(),\n value: data,\n };\n\n if (isExist) {\n this.updateNestedField(parameters);\n } else {\n this.createNestedField(parameters);\n }\n }\n\n private updateConversion({\n conversion,\n mutData,\n visitorCode,\n expirationTime,\n }: UpdateConversionParametersType): void {\n const { data } = conversion;\n const isExist =\n mutData[visitorCode] && KameleoonData.Conversion in mutData[visitorCode];\n\n const parameters: NestedFieldParametersType = {\n expirationTime,\n visitorCode,\n data: mutData,\n key: KameleoonData.Conversion,\n nestedKey: data.id.toString(),\n value: data,\n };\n\n if (isExist) {\n this.updateNestedField(parameters);\n } else {\n this.createNestedField(parameters);\n }\n }\n\n private updateVisitsData({\n visitorCode,\n mutData,\n visitsData,\n expirationTime,\n }: UpdateVisitsDataParametersType): void {\n const { data } = visitsData;\n const isExist =\n mutData[visitorCode] && KameleoonData.VisitsData in mutData[visitorCode];\n\n const parameters: FieldParametersType = {\n expirationTime,\n data: mutData,\n key: KameleoonData.VisitsData,\n value: data,\n visitorCode,\n };\n\n if (isExist) {\n const existingVisits = mutData[visitorCode][KameleoonData.VisitsData]!;\n\n // --- Note ---\n // We are preserving the order of visits\n existingVisits.visits.forEach((visit) => {\n Utilities.insertInOrderedListMutably({\n list: data.visits,\n element: visit,\n order: Order.Ascending,\n });\n });\n\n this.updateField({\n ...parameters,\n value: {\n ...data,\n visits: data.visits,\n },\n });\n } else {\n this.createField(parameters);\n }\n }\n\n private updateCommonData({\n visitorCode,\n mutData,\n commonData,\n expirationTime,\n }: UpdateCommonDataParametersType): void {\n const { data } = commonData;\n const isExist = mutData[visitorCode] && data.type in mutData[visitorCode];\n\n const parameters: FieldParametersType = {\n expirationTime,\n data: mutData,\n key: data.type,\n visitorCode,\n value: data as FieldParametersType['value'],\n };\n\n if (isExist) {\n this.updateField(parameters);\n } else {\n this.createField(parameters);\n }\n }\n\n public dereferenceData(\n data: TargetingDataType,\n visitorCode: string,\n ): DereferenceTargetingDataResultType {\n // --- Note ---\n // Visitor reference can not point to another visitor reference\n if (typeof data[visitorCode] === 'string') {\n return {\n visitorReference: data[visitorCode] as VisitorReference,\n data: data as DereferencedTargetingDataType,\n };\n }\n\n return {\n visitorReference: visitorCode,\n data: data as DereferencedTargetingDataType,\n };\n }\n\n private deleteExpiredField(\n data: Omit<\n KameleoonVisitorDataType,\n | KameleoonData.Conversion\n | KameleoonData.CustomData\n | KameleoonData.PageView\n >,\n key: KameleoonData,\n ): number {\n if (!data) {\n return 0;\n }\n\n const dataKey = key as keyof typeof data;\n const isExpired = data[dataKey]!.expirationTime < Date.now();\n\n if (!isExpired) {\n return data[dataKey]!.expirationTime;\n }\n\n delete data[dataKey];\n\n return 0;\n }\n\n private deleteNestedExpiredField(\n data: KameleoonVisitorDataType,\n key: KameleoonData,\n ): number {\n if (!data[key]) {\n return 0;\n }\n\n const existingData = data[key] as ExistingNestedDataType;\n\n let closestCleanupTime;\n\n for (const [nestedKey, value] of Object.entries(existingData)) {\n if (!value) {\n continue;\n }\n\n const isExpired = value.expirationTime < Date.now();\n\n if (isExpired) {\n delete existingData[nestedKey];\n } else {\n if (!closestCleanupTime || value.expirationTime < closestCleanupTime) {\n closestCleanupTime = value.expirationTime;\n }\n }\n }\n\n if (!Object.keys(existingData).length) {\n delete data[key];\n }\n\n return closestCleanupTime;\n }\n\n private updateField({\n key,\n value,\n data,\n visitorCode,\n expirationTime,\n }: FieldParametersType): void {\n (data[visitorCode][key] as ExistingDataType<typeof key>) = {\n ...value,\n expirationTime,\n };\n }\n\n private createField({\n key,\n value,\n data,\n visitorCode,\n expirationTime,\n }: FieldParametersType): void {\n data[visitorCode] = {\n ...data[visitorCode],\n [key]: { ...value, expirationTime },\n };\n }\n\n private updateNestedField({\n key,\n nestedKey,\n value,\n data,\n visitorCode,\n expirationTime,\n }: NestedFieldParametersType): void {\n (data[visitorCode][key] as ExistingNestedDataType)[nestedKey] = {\n ...value,\n expirationTime,\n };\n }\n\n private createNestedField({\n key,\n nestedKey,\n value,\n data,\n visitorCode,\n expirationTime,\n }: NestedFieldParametersType): void {\n if (!data[visitorCode]?.[key]) {\n data[visitorCode] = {\n ...data[visitorCode],\n [key]: {\n [nestedKey]: { ...value, expirationTime },\n },\n };\n } else {\n data[visitorCode] = {\n ...data[visitorCode],\n [key]: {\n ...data[visitorCode][key],\n [nestedKey]: { ...value, expirationTime },\n },\n };\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,20 +1,26 @@
|
|
|
1
1
|
import { VisitType } from '../requester';
|
|
2
2
|
import { DeviceDataType, DeviceType, IKameleoonData } from './types';
|
|
3
|
+
import { TrackingStatus } from '../types';
|
|
3
4
|
/**
|
|
4
5
|
* @class
|
|
5
6
|
* Device - a class for creating an instance for device of a certain type
|
|
6
7
|
* */
|
|
7
8
|
export declare class Device implements IKameleoonData {
|
|
9
|
+
status: TrackingStatus;
|
|
8
10
|
private device;
|
|
9
|
-
private sent;
|
|
10
11
|
/**
|
|
11
12
|
* @param {DeviceType} device - one of the available device types from `DeviceType` enum
|
|
12
13
|
* */
|
|
13
14
|
constructor(device: DeviceType);
|
|
14
15
|
get url(): string;
|
|
15
16
|
get data(): DeviceDataType;
|
|
16
|
-
|
|
17
|
-
|
|
17
|
+
/**
|
|
18
|
+
* @private
|
|
19
|
+
* @method _fromRaw - an internal method for creating a Device instance from raw data
|
|
20
|
+
* @param {DeviceDataType} data - a raw data
|
|
21
|
+
* @return {Device} a Device instance
|
|
22
|
+
* */
|
|
23
|
+
static _fromRaw(data: DeviceDataType): Device;
|
|
18
24
|
/**
|
|
19
25
|
* @private
|
|
20
26
|
* @method _fromVisit - an internal method for creating an instance of Device class from a visit
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.Device=void 0;var _requester=require("../requester"),_types=require("./types");function _defineProperty(a,b,c){return
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.Device=void 0;var _requester=require("../requester"),_types=require("./types"),_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 Device{constructor(a){_defineProperty(this,"status",void 0),_defineProperty(this,"device",void 0),this.device=a,this.status=_types2.TrackingStatus.Unsent}get url(){return this.device?_requester.UrlEventType.StaticData+_requester.UrlParameter.DeviceType+this.device:""}get data(){return{device:this.device,type:_types.KameleoonData.Device,status:this.status}}static _fromRaw(a){const{device:b,status:c}=a,d=new Device(b);return d.status=c,d}static _fromVisit(a){var b;return null!==(b=a.staticDataEvent)&&void 0!==b&&b.data.deviceType?new Device(a.staticDataEvent.data.deviceType):void 0}}exports.Device=Device;
|
|
2
2
|
//# sourceMappingURL=device.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"device.js","names":["Device","constructor","device","_defineProperty","
|
|
1
|
+
{"version":3,"file":"device.js","names":["Device","constructor","device","_defineProperty","status","TrackingStatus","Unsent","url","UrlEventType","StaticData","UrlParameter","DeviceType","data","type","KameleoonData","_fromRaw","deviceType","_fromVisit","visit","b","staticDataEvent","exports"],"sources":["../../src/kameleoonData/device.ts"],"sourcesContent":["import { UrlEventType, UrlParameter, VisitType } from 'src/requester';\nimport {\n DeviceDataType,\n DeviceType,\n IKameleoonData,\n KameleoonData,\n} from './types';\nimport { TrackingStatus } from 'src/types';\n\n/**\n * @class\n * Device - a class for creating an instance for device of a certain type\n * */\nexport class Device implements IKameleoonData {\n public status: TrackingStatus;\n\n private device: DeviceType;\n\n /**\n * @param {DeviceType} device - one of the available device types from `DeviceType` enum\n * */\n constructor(device: DeviceType) {\n this.device = device;\n this.status = TrackingStatus.Unsent;\n }\n\n get url(): string {\n // --- Note ---\n // If SDK is used in vanilla JS codebase, then you're also able to create an instance\n // with no required data, we don't want send anything to tracking in that case\n if (!this.device) {\n return '';\n }\n\n return UrlEventType.StaticData + UrlParameter.DeviceType + this.device;\n }\n\n get data(): DeviceDataType {\n return {\n device: this.device,\n type: KameleoonData.Device,\n status: this.status,\n };\n }\n\n /**\n * @private\n * @method _fromRaw - an internal method for creating a Device instance from raw data\n * @param {DeviceDataType} data - a raw data\n * @return {Device} a Device instance\n * */\n public static _fromRaw(data: DeviceDataType): Device {\n const { device: deviceType, status } = data;\n const device = new Device(deviceType);\n\n device.status = status;\n\n return device;\n }\n\n /**\n * @private\n * @method _fromVisit - an internal method for creating an instance of Device class from a visit\n * @param {VisitType} visit - a visit\n * @returns {Device | undefined} an instance of Device class or undefined if browser can not be found among visits\n * */\n public static _fromVisit(visit: VisitType): Device | undefined {\n if (visit.staticDataEvent?.data.deviceType) {\n return new Device(visit.staticDataEvent.data.deviceType);\n }\n\n return undefined;\n }\n}\n"],"mappings":"wrBAaO,KAAM,CAAAA,MAAiC,CAQ5CC,WAAWA,CAACC,CAAkB,CAAE,CAAAC,eAAA,uBAAAA,eAAA,uBAC9B,IAAI,CAACD,MAAM,CAAGA,CAAM,CACpB,IAAI,CAACE,MAAM,CAAGC,sBAAc,CAACC,MAC/B,CAEA,GAAI,CAAAC,GAAGA,CAAA,CAAW,OAIX,KAAI,CAACL,MAAM,CAITM,uBAAY,CAACC,UAAU,CAAGC,uBAAY,CAACC,UAAU,CAAG,IAAI,CAACT,MAAM,CAH7D,EAIX,CAEA,GAAI,CAAAU,IAAIA,CAAA,CAAmB,CACzB,MAAO,CACLV,MAAM,CAAE,IAAI,CAACA,MAAM,CACnBW,IAAI,CAAEC,oBAAa,CAACd,MAAM,CAC1BI,MAAM,CAAE,IAAI,CAACA,MACf,CACF,CAQA,MAAc,CAAAW,QAAQA,CAACH,CAAoB,CAAU,MAC7C,CAAEV,MAAM,CAAEc,CAAU,CAAEZ,MAAM,CAANA,CAAO,CAAC,CAAGQ,CAAI,CACrCV,CAAM,CAAG,GAAI,CAAAF,MAAM,CAACgB,CAAU,CAAC,CAIrC,MAFA,CAAAd,CAAM,CAACE,MAAM,CAAGA,CAAM,CAEfF,CACT,CAQA,MAAc,CAAAe,UAAUA,CAACC,CAAgB,CAAsB,KAAAC,CAAA,gBAAAA,CAAA,CACzDD,CAAK,CAACE,eAAe,YAAAD,CAAA,EAArBA,CAAA,CAAuBP,IAAI,CAACI,UAAU,CACjC,GAAI,CAAAhB,MAAM,CAACkB,CAAK,CAACE,eAAe,CAACR,IAAI,CAACI,UAAU,CAAC,OAI5D,CACF,CAACK,OAAA,CAAArB,MAAA,CAAAA,MAAA","ignoreList":[]}
|
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
import { VisitType } from '../requester';
|
|
2
2
|
import { IKameleoonData, GeolocationInfoType, GeolocationDataType } from './types';
|
|
3
|
+
import { TrackingStatus } from '../types';
|
|
3
4
|
/**
|
|
4
5
|
* @class
|
|
5
6
|
* Geolocation - a class for creating an instance for geolocation data
|
|
6
7
|
* */
|
|
7
8
|
export declare class GeolocationData implements IKameleoonData {
|
|
9
|
+
status: TrackingStatus;
|
|
8
10
|
private country;
|
|
9
11
|
private region?;
|
|
10
12
|
private city?;
|
|
11
13
|
private postalCode?;
|
|
12
14
|
private coordinates?;
|
|
13
|
-
private sent;
|
|
14
15
|
/**
|
|
15
16
|
* @param {GeolocationInfoType} geolocationInfo - an object containing information about geolocation of a visitor
|
|
16
17
|
* @example
|
|
@@ -31,8 +32,13 @@ export declare class GeolocationData implements IKameleoonData {
|
|
|
31
32
|
constructor({ country, region, city, postalCode, coordinates, }: GeolocationInfoType);
|
|
32
33
|
get url(): string;
|
|
33
34
|
get data(): GeolocationDataType;
|
|
34
|
-
|
|
35
|
-
|
|
35
|
+
/**
|
|
36
|
+
* @private
|
|
37
|
+
* @method _fromRaw - an internal method for creating a GeolocationData instance from raw data
|
|
38
|
+
* @param {GeolocationDataType} data - a raw data
|
|
39
|
+
* @return {GeolocationData} a GeolocationData instance
|
|
40
|
+
* */
|
|
41
|
+
static _fromRaw(data: GeolocationDataType): GeolocationData;
|
|
36
42
|
/**
|
|
37
43
|
* @private
|
|
38
44
|
* @method _fromVisit - an internal method for creating an instance of GeolocationData class from a visit
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.GeolocationData=void 0;var _requester=require("../requester"),_types=require("./types");function _defineProperty(a,b,c){return
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.GeolocationData=void 0;var _requester=require("../requester"),_types=require("./types"),_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 GeolocationData{constructor(a){let{country:b,region:c,city:d,postalCode:e,coordinates:f}=a;_defineProperty(this,"status",void 0),_defineProperty(this,"country",void 0),_defineProperty(this,"region",void 0),_defineProperty(this,"city",void 0),_defineProperty(this,"postalCode",void 0),_defineProperty(this,"coordinates",void 0),this.country=b,this.region=c,this.city=d,this.postalCode=e,this.coordinates=f,this.status=_types2.TrackingStatus.Unsent}get url(){const a=this.region?_requester.UrlParameter.Region+encodeURIComponent(this.region):"",b=this.city?_requester.UrlParameter.City+encodeURIComponent(this.city):"",c=this.postalCode?_requester.UrlParameter.PostalCode+encodeURIComponent(this.postalCode):"",d=this.coordinates?_requester.UrlParameter.Latitude+this.coordinates[0]+_requester.UrlParameter.Longitude+this.coordinates[1]:"";return _requester.UrlEventType.Geolocation+_requester.UrlParameter.Country+encodeURIComponent(this.country)+a+b+c+d}get data(){return{type:_types.KameleoonData.GeolocationData,country:this.country,region:this.region,city:this.city,postalCode:this.postalCode,coordinates:this.coordinates,status:this.status}}static _fromRaw(a){const{country:b,region:c,city:d,postalCode:e,coordinates:f,status:g}=a,h=new GeolocationData({country:b,region:c,city:d,postalCode:e,coordinates:f});return h.status=g,h}static _fromVisit(a){var b;if(!(null!==(b=a.geolocationEvents)&&void 0!==b&&b.length))return;let c;for(const b of a.geolocationEvents){const{data:a}=b;a.country&&(c=a)}const{country:d,region:e,city:f}=c||{};if(d)return e&&f?new GeolocationData({country:d,region:e,city:f}):e?new GeolocationData({country:d,region:e}):new GeolocationData({country:d})}}exports.GeolocationData=GeolocationData;
|
|
2
2
|
//# sourceMappingURL=geolocation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"geolocation.js","names":["GeolocationData","constructor","a","country","region","city","postalCode","coordinates","_defineProperty","
|
|
1
|
+
{"version":3,"file":"geolocation.js","names":["GeolocationData","constructor","a","country","region","city","postalCode","coordinates","_defineProperty","status","TrackingStatus","Unsent","url","UrlParameter","Region","encodeURIComponent","City","PostalCode","Latitude","Longitude","UrlEventType","Geolocation","Country","data","type","KameleoonData","_fromRaw","geolocation","_fromVisit","visit","b","geolocationEvents","length","geolocationData","geolocationEvent","exports"],"sources":["../../src/kameleoonData/geolocation.ts"],"sourcesContent":["import { UrlEventType, UrlParameter, VisitType } from 'src/requester';\nimport { GeolocationEventType } from 'src/requester/types';\nimport {\n IKameleoonData,\n KameleoonData,\n GeolocationInfoType,\n GeolocationDataType,\n} from './types';\nimport { TrackingStatus } from 'src/types';\n\n/**\n * @class\n * Geolocation - a class for creating an instance for geolocation data\n * */\nexport class GeolocationData implements IKameleoonData {\n public status: TrackingStatus;\n\n private country: string;\n private region?: string;\n private city?: string;\n private postalCode?: string;\n private coordinates?: [number, number];\n\n /**\n * @param {GeolocationInfoType} geolocationInfo - an object containing information about geolocation of a visitor\n * @example\n * ```ts\n * // Visitor is located at Triumph Arch in Paris, France\n * const location: GeolocationDataType = {\n * country: 'France',\n * region: 'Île-de-France',\n * city: 'Paris',\n * postalCode: '75008',\n * coordinates: [48.8738, 2.295]\n * };\n *\n * const geolocation = new GeolocationData(location);\n * ```\n *\n * */\n constructor({\n country,\n region,\n city,\n postalCode,\n coordinates,\n }: GeolocationInfoType) {\n this.country = country;\n this.region = region;\n this.city = city;\n this.postalCode = postalCode;\n this.coordinates = coordinates;\n this.status = TrackingStatus.Unsent;\n }\n\n get url(): string {\n const region = this.region\n ? UrlParameter.Region + encodeURIComponent(this.region)\n : '';\n const city = this.city\n ? UrlParameter.City + encodeURIComponent(this.city)\n : '';\n const postalCode = this.postalCode\n ? UrlParameter.PostalCode + encodeURIComponent(this.postalCode)\n : '';\n const coordinates = this.coordinates\n ? UrlParameter.Latitude +\n this.coordinates[0] +\n UrlParameter.Longitude +\n this.coordinates[1]\n : '';\n\n return (\n UrlEventType.Geolocation +\n UrlParameter.Country +\n encodeURIComponent(this.country) +\n region +\n city +\n postalCode +\n coordinates\n );\n }\n\n get data(): GeolocationDataType {\n return {\n type: KameleoonData.GeolocationData,\n country: this.country,\n region: this.region,\n city: this.city,\n postalCode: this.postalCode,\n coordinates: this.coordinates,\n status: this.status,\n };\n }\n\n /**\n * @private\n * @method _fromRaw - an internal method for creating a GeolocationData instance from raw data\n * @param {GeolocationDataType} data - a raw data\n * @return {GeolocationData} a GeolocationData instance\n * */\n public static _fromRaw(data: GeolocationDataType): GeolocationData {\n const { country, region, city, postalCode, coordinates, status } = data;\n const geolocation = new GeolocationData({\n country,\n region,\n city,\n postalCode,\n coordinates,\n });\n\n geolocation.status = status;\n\n return geolocation;\n }\n\n /**\n * @private\n * @method _fromVisit - an internal method for creating an instance of GeolocationData class from a visit\n * @param {VisitType} visit - a visit\n * @returns {GeolocationData | undefined} an instance of GeolocationData class or undefined if geolocation can not be found among visits\n * */\n public static _fromVisit(visit: VisitType): GeolocationData | undefined {\n if (!visit.geolocationEvents?.length) {\n return undefined;\n }\n\n let geolocationData: GeolocationEventType['data'] | undefined = undefined;\n\n for (const geolocationEvent of visit.geolocationEvents) {\n const { data } = geolocationEvent;\n\n if (data.country) {\n geolocationData = data;\n }\n }\n\n // --- Note ---\n // We only take `country`, `region`, and `city` from geolocation event ignoring other fields\n // as they are not participating in targeting, and visits data won't be tracked again\n const { country, region, city } = geolocationData || {};\n\n if (country) {\n if (region && city) {\n return new GeolocationData({ country, region, city });\n } else if (region) {\n return new GeolocationData({ country, region });\n } else {\n return new GeolocationData({ country });\n }\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|