@kameleoon/javascript-sdk-core 2.10.1 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cacheManager/cacheManager.js +1 -11
- package/dist/cacheManager/cacheManager.js.map +1 -1
- package/dist/clientConfiguration/clientConfiguration.d.ts +55 -0
- package/dist/clientConfiguration/clientConfiguration.js +2 -0
- package/dist/clientConfiguration/clientConfiguration.js.map +1 -0
- package/dist/clientConfiguration/constants.d.ts +2 -0
- package/dist/clientConfiguration/constants.js +2 -0
- package/dist/clientConfiguration/constants.js.map +1 -0
- package/dist/clientConfiguration/index.d.ts +2 -0
- package/dist/clientConfiguration/index.js +2 -0
- package/dist/clientConfiguration/index.js.map +1 -0
- package/dist/{campaignConfiguration → clientConfiguration}/types.d.ts +24 -57
- package/dist/clientConfiguration/types.js +2 -0
- package/dist/clientConfiguration/types.js.map +1 -0
- package/dist/clientSettings/clientSettings.js +1 -1
- package/dist/clientSettings/clientSettings.js.map +1 -1
- package/dist/constants.d.ts +3 -2
- package/dist/constants.js +1 -4
- package/dist/constants.js.map +1 -1
- package/dist/cookieManager/cookieManager.d.ts +16 -0
- package/dist/cookieManager/cookieManager.js +2 -0
- package/dist/cookieManager/cookieManager.js.map +1 -0
- package/dist/cookieManager/index.d.ts +1 -0
- package/dist/cookieManager/index.js +2 -0
- package/dist/cookieManager/index.js.map +1 -0
- package/dist/eventSource/externalEventSource.js +1 -1
- package/dist/eventSource/externalEventSource.js.map +1 -1
- package/dist/hasher/hasher.d.ts +2 -3
- package/dist/hasher/hasher.js +1 -6
- package/dist/hasher/hasher.js.map +1 -1
- package/dist/hasher/types.d.ts +3 -10
- package/dist/hasher/types.js.map +1 -1
- package/dist/index.d.ts +9 -7
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/kameleoonClient.d.ts +75 -80
- package/dist/kameleoonClient.js +1 -18
- package/dist/kameleoonClient.js.map +1 -1
- package/dist/kameleoonData/applicationVersion.d.ts +26 -0
- package/dist/kameleoonData/applicationVersion.js +2 -0
- package/dist/kameleoonData/applicationVersion.js.map +1 -0
- package/dist/kameleoonData/browser.d.ts +16 -1
- package/dist/kameleoonData/browser.js +1 -17
- package/dist/kameleoonData/browser.js.map +1 -1
- package/dist/kameleoonData/constants.d.ts +4 -0
- package/dist/kameleoonData/constants.js +2 -0
- package/dist/kameleoonData/constants.js.map +1 -0
- package/dist/kameleoonData/conversion.d.ts +14 -1
- package/dist/kameleoonData/conversion.js +1 -13
- package/dist/kameleoonData/conversion.js.map +1 -1
- package/dist/kameleoonData/cookie.d.ts +33 -0
- package/dist/kameleoonData/cookie.js +2 -0
- package/dist/kameleoonData/cookie.js.map +1 -0
- package/dist/kameleoonData/customData.d.ts +14 -1
- package/dist/kameleoonData/customData.js +1 -24
- package/dist/kameleoonData/customData.js.map +1 -1
- package/dist/kameleoonData/dataManager.d.ts +39 -0
- package/dist/kameleoonData/dataManager.js +2 -0
- package/dist/kameleoonData/dataManager.js.map +1 -0
- package/dist/kameleoonData/dataProcessor.d.ts +26 -0
- package/dist/kameleoonData/dataProcessor.js +2 -0
- package/dist/kameleoonData/dataProcessor.js.map +1 -0
- package/dist/kameleoonData/device.d.ts +14 -1
- package/dist/kameleoonData/device.js +1 -13
- package/dist/kameleoonData/device.js.map +1 -1
- package/dist/kameleoonData/geolocation.d.ts +52 -0
- package/dist/kameleoonData/geolocation.js +2 -0
- package/dist/kameleoonData/geolocation.js.map +1 -0
- package/dist/kameleoonData/helpers.d.ts +1 -0
- package/dist/kameleoonData/helpers.js +2 -0
- package/dist/kameleoonData/helpers.js.map +1 -0
- package/dist/kameleoonData/index.d.ts +10 -3
- package/dist/kameleoonData/index.js +1 -1
- package/dist/kameleoonData/index.js.map +1 -1
- package/dist/kameleoonData/operatingSystem.d.ts +34 -0
- package/dist/kameleoonData/operatingSystem.js +2 -0
- package/dist/kameleoonData/operatingSystem.js.map +1 -0
- package/dist/kameleoonData/pageView.d.ts +20 -1
- package/dist/kameleoonData/pageView.js +1 -13
- package/dist/kameleoonData/pageView.js.map +1 -1
- package/dist/kameleoonData/types.d.ts +118 -9
- package/dist/kameleoonData/types.js +1 -14
- package/dist/kameleoonData/types.js.map +1 -1
- package/dist/kameleoonData/userAgent.d.ts +6 -1
- package/dist/kameleoonData/userAgent.js +1 -8
- package/dist/kameleoonData/userAgent.js.map +1 -1
- package/dist/kameleoonData/visitsData.d.ts +34 -0
- package/dist/{variationConfiguration/variation.js → kameleoonData/visitsData.js} +2 -7
- package/dist/kameleoonData/visitsData.js.map +1 -0
- package/dist/kameleoonError/constants.d.ts +6 -4
- package/dist/kameleoonError/constants.js +1 -1
- package/dist/kameleoonError/constants.js.map +1 -1
- package/dist/kameleoonError/kameleoonError.d.ts +6 -4
- package/dist/kameleoonError/kameleoonError.js +1 -4
- package/dist/kameleoonError/kameleoonError.js.map +1 -1
- package/dist/kameleoonError/types.d.ts +9 -3
- package/dist/kameleoonError/types.js +1 -1
- package/dist/kameleoonError/types.js.map +1 -1
- package/dist/kameleoonUtils.d.ts +0 -6
- package/dist/kameleoonUtils.js +1 -4
- package/dist/kameleoonUtils.js.map +1 -1
- package/dist/requester/constants.d.ts +5 -3
- package/dist/requester/constants.js +1 -1
- package/dist/requester/constants.js.map +1 -1
- package/dist/requester/index.d.ts +2 -2
- package/dist/requester/index.js +1 -1
- package/dist/requester/index.js.map +1 -1
- package/dist/requester/requester.d.ts +8 -7
- package/dist/requester/requester.js +1 -1
- package/dist/requester/requester.js.map +1 -1
- package/dist/requester/types.d.ts +79 -12
- package/dist/requester/types.js +1 -1
- package/dist/requester/types.js.map +1 -1
- package/dist/storage/constants.d.ts +3 -1
- package/dist/storage/constants.js +1 -4
- package/dist/storage/constants.js.map +1 -1
- package/dist/storage/index.d.ts +1 -1
- package/dist/storage/index.js +1 -1
- package/dist/storage/index.js.map +1 -1
- package/dist/storage/types.d.ts +15 -9
- package/dist/storage/types.js.map +1 -1
- package/dist/targeting/conditions/applicationVersion.d.ts +10 -0
- package/dist/targeting/conditions/applicationVersion.js +2 -0
- package/dist/targeting/conditions/applicationVersion.js.map +1 -0
- package/dist/targeting/conditions/{browserCondition.d.ts → browser.d.ts} +1 -1
- package/dist/targeting/conditions/browser.js +2 -0
- package/dist/targeting/conditions/browser.js.map +1 -0
- package/dist/targeting/conditions/conditionFactory.js +1 -1
- package/dist/targeting/conditions/conditionFactory.js.map +1 -1
- package/dist/targeting/conditions/{conversionCondition.d.ts → conversion.d.ts} +1 -2
- package/dist/targeting/conditions/conversion.js +2 -0
- package/dist/targeting/conditions/conversion.js.map +1 -0
- package/dist/targeting/conditions/cookie.d.ts +15 -0
- package/dist/targeting/conditions/cookie.js +2 -0
- package/dist/targeting/conditions/cookie.js.map +1 -0
- package/dist/targeting/conditions/{customDataCondition.d.ts → customData.d.ts} +1 -1
- package/dist/targeting/conditions/customData.js +2 -0
- package/dist/targeting/conditions/customData.js.map +1 -0
- package/dist/targeting/conditions/{deviceCondition.d.ts → device.d.ts} +1 -1
- package/dist/targeting/conditions/{targetExperimentCondition.js → device.js} +2 -2
- package/dist/targeting/conditions/device.js.map +1 -0
- package/dist/targeting/conditions/{exclusiveExperimentCondition.d.ts → exclusiveCampaign.d.ts} +2 -2
- package/dist/targeting/conditions/exclusiveCampaign.js +2 -0
- package/dist/targeting/conditions/exclusiveCampaign.js.map +1 -0
- package/dist/targeting/conditions/firstVisit.d.ts +12 -0
- package/dist/targeting/conditions/firstVisit.js +2 -0
- package/dist/targeting/conditions/firstVisit.js.map +1 -0
- package/dist/targeting/conditions/geolocation.d.ts +11 -0
- package/dist/targeting/conditions/geolocation.js +2 -0
- package/dist/targeting/conditions/geolocation.js.map +1 -0
- package/dist/targeting/conditions/index.d.ts +22 -10
- package/dist/targeting/conditions/index.js +1 -1
- package/dist/targeting/conditions/index.js.map +1 -1
- package/dist/targeting/conditions/lastVisit.d.ts +12 -0
- package/dist/targeting/conditions/lastVisit.js +2 -0
- package/dist/targeting/conditions/lastVisit.js.map +1 -0
- package/dist/targeting/conditions/newVisitor.d.ts +9 -0
- package/dist/targeting/conditions/newVisitor.js +2 -0
- package/dist/targeting/conditions/newVisitor.js.map +1 -0
- package/dist/targeting/conditions/operatingSystem.d.ts +9 -0
- package/dist/targeting/conditions/{deviceCondition.js → operatingSystem.js} +2 -2
- package/dist/targeting/conditions/operatingSystem.js.map +1 -0
- package/dist/targeting/conditions/{pageTitleCondition.d.ts → pageTitle.d.ts} +1 -1
- package/dist/targeting/conditions/pageTitle.js +2 -0
- package/dist/targeting/conditions/pageTitle.js.map +1 -0
- package/dist/targeting/conditions/{pageUrlCondition.d.ts → pageUrl.d.ts} +1 -1
- package/dist/targeting/conditions/pageUrl.js +2 -0
- package/dist/targeting/conditions/pageUrl.js.map +1 -0
- package/dist/targeting/conditions/previousPage.d.ts +12 -0
- package/dist/targeting/conditions/previousPage.js +2 -0
- package/dist/targeting/conditions/previousPage.js.map +1 -0
- package/dist/targeting/conditions/sameDayVisits.d.ts +11 -0
- package/dist/targeting/conditions/sameDayVisits.js +2 -0
- package/dist/targeting/conditions/sameDayVisits.js.map +1 -0
- package/dist/targeting/conditions/{sdkLanguageCondition.d.ts → sdkLanguage.d.ts} +1 -4
- package/dist/targeting/conditions/sdkLanguage.js +2 -0
- package/dist/targeting/conditions/sdkLanguage.js.map +1 -0
- package/dist/targeting/conditions/segment.d.ts +9 -0
- package/dist/targeting/conditions/segment.js +2 -0
- package/dist/targeting/conditions/segment.js.map +1 -0
- package/dist/targeting/conditions/targetFeatureFlag.d.ts +11 -0
- package/dist/targeting/conditions/targetFeatureFlag.js +2 -0
- package/dist/targeting/conditions/targetFeatureFlag.js.map +1 -0
- package/dist/targeting/conditions/types.d.ts +20 -13
- package/dist/targeting/conditions/types.js.map +1 -1
- package/dist/targeting/conditions/visitedPages.d.ts +11 -0
- package/dist/targeting/conditions/visitedPages.js +2 -0
- package/dist/targeting/conditions/visitedPages.js.map +1 -0
- package/dist/targeting/conditions/{visitorCodeCondition.d.ts → visitorCode.d.ts} +1 -1
- package/dist/targeting/conditions/visitorCode.js +2 -0
- package/dist/targeting/conditions/visitorCode.js.map +1 -0
- package/dist/targeting/conditions/visits.d.ts +11 -0
- package/dist/targeting/conditions/visits.js +2 -0
- package/dist/targeting/conditions/visits.js.map +1 -0
- package/dist/targeting/index.d.ts +3 -3
- package/dist/targeting/index.js +1 -1
- package/dist/targeting/index.js.map +1 -1
- package/dist/targeting/{targetingNode.d.ts → node.d.ts} +7 -7
- package/dist/targeting/node.js +2 -0
- package/dist/targeting/node.js.map +1 -0
- package/dist/targeting/{targetingTree.d.ts → tree.d.ts} +6 -3
- package/dist/targeting/tree.js +2 -0
- package/dist/targeting/tree.js.map +1 -0
- package/dist/targeting/types.d.ts +30 -8
- package/dist/targeting/types.js +1 -1
- package/dist/targeting/types.js.map +1 -1
- package/dist/types.d.ts +61 -18
- package/dist/types.js +1 -41
- package/dist/types.js.map +1 -1
- package/dist/utilities/index.d.ts +1 -0
- package/dist/utilities/index.js +1 -1
- package/dist/utilities/index.js.map +1 -1
- package/dist/utilities/types.d.ts +71 -6
- package/dist/utilities/types.js +1 -1
- package/dist/utilities/types.js.map +1 -1
- package/dist/utilities/utilities.d.ts +30 -11
- package/dist/utilities/utilities.js +1 -1
- package/dist/utilities/utilities.js.map +1 -1
- package/dist/variationConfiguration/index.d.ts +1 -1
- package/dist/variationConfiguration/index.js +1 -1
- package/dist/variationConfiguration/index.js.map +1 -1
- package/dist/variationConfiguration/types.d.ts +6 -12
- package/dist/variationConfiguration/types.js.map +1 -1
- package/dist/variationConfiguration/variationConfiguration.d.ts +13 -21
- package/dist/variationConfiguration/variationConfiguration.js +1 -65
- package/dist/variationConfiguration/variationConfiguration.js.map +1 -1
- package/package.json +1 -1
- package/dist/campaignConfiguration/campaignConfiguration.d.ts +0 -71
- package/dist/campaignConfiguration/campaignConfiguration.js +0 -24
- package/dist/campaignConfiguration/campaignConfiguration.js.map +0 -1
- package/dist/campaignConfiguration/constants.d.ts +0 -6
- package/dist/campaignConfiguration/constants.js +0 -4
- package/dist/campaignConfiguration/constants.js.map +0 -1
- package/dist/campaignConfiguration/index.d.ts +0 -3
- package/dist/campaignConfiguration/index.js +0 -2
- package/dist/campaignConfiguration/index.js.map +0 -1
- package/dist/campaignConfiguration/types.js +0 -2
- package/dist/campaignConfiguration/types.js.map +0 -1
- package/dist/targeting/conditions/browserCondition.js +0 -2
- package/dist/targeting/conditions/browserCondition.js.map +0 -1
- package/dist/targeting/conditions/conversionCondition.js +0 -4
- package/dist/targeting/conditions/conversionCondition.js.map +0 -1
- package/dist/targeting/conditions/customDataCondition.js +0 -8
- package/dist/targeting/conditions/customDataCondition.js.map +0 -1
- package/dist/targeting/conditions/deviceCondition.js.map +0 -1
- package/dist/targeting/conditions/exclusiveExperimentCondition.js +0 -2
- package/dist/targeting/conditions/exclusiveExperimentCondition.js.map +0 -1
- package/dist/targeting/conditions/pageTitleCondition.js +0 -2
- package/dist/targeting/conditions/pageTitleCondition.js.map +0 -1
- package/dist/targeting/conditions/pageUrlCondition.js +0 -2
- package/dist/targeting/conditions/pageUrlCondition.js.map +0 -1
- package/dist/targeting/conditions/sdkLanguageCondition.js +0 -2
- package/dist/targeting/conditions/sdkLanguageCondition.js.map +0 -1
- package/dist/targeting/conditions/targetExperimentCondition.d.ts +0 -12
- package/dist/targeting/conditions/targetExperimentCondition.js.map +0 -1
- package/dist/targeting/conditions/visitorCodeCondition.js +0 -2
- package/dist/targeting/conditions/visitorCodeCondition.js.map +0 -1
- package/dist/targeting/targetingNode.js +0 -2
- package/dist/targeting/targetingNode.js.map +0 -1
- package/dist/targeting/targetingTree.js +0 -35
- package/dist/targeting/targetingTree.js.map +0 -1
- package/dist/variationConfiguration/variation.d.ts +0 -13
- package/dist/variationConfiguration/variation.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utilities.js","names":["a","b","c","Object","defineProperty","value","enumerable","configurable","writable","e","f","prototype","d","g","create","h","m","s","i","type","arg","call","forEach","_invoke","j","k","_typeof","r","resolve","__await","then","Error","o","method","delegate","x","sent","_sent","dispatchException","abrupt","done","iterator","return","TypeError","resultName","next","nextLoc","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","push","l","completion","reset","n","u","isNaN","length","_regeneratorRuntime","p","q","hasOwnProperty","t","Symbol","v","asyncIterator","w","toStringTag","wrap","y","z","getPrototypeOf","A","B","displayName","isGeneratorFunction","constructor","name","mark","setPrototypeOf","__proto__","awrap","AsyncIterator","async","Promise","keys","reverse","pop","values","prev","charAt","slice","stop","rval","complete","finish","catch","_catch","delegateYield","asyncGeneratorStep","_asyncToGenerator","arguments","apply","_createForOfIteratorHelper","Array","isArray","_unsupportedIterableToArray","_arrayLikeToArray","toString","from","test","_classCallCheck","_defineProperties","_toPropertyKey","key","_createClass","_toPrimitive","toPrimitive","String","Number","Utilities","checkTargeting","segment","visitorCode","targetingData","experimentId","variationConfiguration","campaignConfiguration","packageInfo","conditionsData","firstLevel","Ok","Err","KameleoonError","KameleoonException","Initialization","variations","assignedVariationsResult","getAssignedVariations","ok","data","targetingTree","getTargetingTree","result","evaluate","variationData","sdkInfo","validateVisitorCode","VisitorCodeEmpty","VISITOR_CODE_MAX_LENGTH","VisitorCodeMaxLength","getDataUrl","unsentData","getUnsentData","resultUrl","size","item","url","featureFlagVariation","requester","isOfflineModeOn","offlineTrackingStorage","variationId","rule","userAgent","getUserAgent","dataUrl","resultVariationId","isUnallocated","parameters","body","trackExperiment","clearUnsentData","addItemToOfflineTracking","storage","isExperiment","parseFeatureVariable","variable","VariableType","BOOLEAN","STRING","NUMBER","numberValue","NumberParse","JSON","jsonValue","parse","err","JSONParse","exhaustCheck","parseVisitorData","visits","currentVisit","previousVisits","indexMap","Map","resultData","customDataEvents","_toConsumableArray","sort","time","customDataEvent","customDataIndex","index","has","set","valuesCountMap","_construct","CustomData","concat","parseRegExp","split","_slicedToArray","_","expression","flags","RegExp","storedTargetingData","userAgentData","KameleoonData","UserAgent","isCustomData","dataItem","updateCache","cacheManager","cacheData","getAliveItem","newCacheData","_objectSpread","expirationTime","Date","now","CACHE_ITEM_LIFETIME","Milliseconds","Second","add","lifetime","getTrackingCode","trackingCache","resultString","updatedCacheData","entries","sendOfflineTracking","trackData","cleanup","onSuccess","getNonce","randomNumber","hexLength","HEX_CHARACTERS","nonce","Math","floor","random","substring","readResult","read","requestParameters","successfulTimestamps","timestamp","params","_objectWithoutProperties","_excluded","t0","deleteFromOfflineTracking","timestamps","newItem","getTime","newRequestParameters","writeResult","write","newParameters","filter","includes","exports"],"sources":["../../src/utilities/utilities.ts"],"sourcesContent":["import { Err, Ok, Result } from 'ts-res';\nimport {\n KameleoonError,\n KameleoonException,\n exhaustCheck,\n} from 'src/kameleoonError';\nimport { ExperimentVariationsType } from 'src/storage';\nimport {\n FeatureVariableResultType,\n Milliseconds,\n TrackingCacheItemType,\n VariableType,\n} from 'src/types';\nimport {\n CampaignConfiguration,\n FeatureVariableType,\n JSONType,\n} from 'src/campaignConfiguration';\nimport {\n CustomData,\n KameleoonData,\n KameleoonDataType,\n} from 'src/kameleoonData';\nimport { CACHE_ITEM_LIFETIME } from 'src/constants';\nimport { CacheManager } from 'src/cacheManager';\nimport {\n GetVisitorDataResultType,\n TrackExperimentParamsType,\n TrackDataParamsType,\n VisitType,\n} from 'src/requester';\nimport {\n CheckTargetingParametersType,\n ManageCacheParametersType,\n TrackDataParametersType,\n TrackRuleParametersType,\n AddToOfflineTrackingParametersType,\n SendOfflineTrackingParametersType,\n TrackExperimentParametersType,\n DeleteFromOfflineTrackingParametersType,\n} from './types';\nimport { VISITOR_CODE_MAX_LENGTH, HEX_CHARACTERS } from './constants';\nimport { KameleoonVisitorDataType } from 'src/kameleoonData/types';\n\nexport class Utilities {\n static checkTargeting({\n segment,\n visitorCode,\n targetingData,\n experimentId,\n variationConfiguration,\n campaignConfiguration,\n packageInfo,\n }: CheckTargetingParametersType): Result<boolean, KameleoonError> {\n if (!segment || !segment.conditionsData.firstLevel.length) {\n return Ok(true);\n }\n\n if (!variationConfiguration) {\n return Err(new KameleoonError(KameleoonException.Initialization));\n }\n\n let variations: ExperimentVariationsType = {};\n\n const assignedVariationsResult =\n variationConfiguration.getAssignedVariations(visitorCode);\n\n if (assignedVariationsResult.ok) {\n variations = assignedVariationsResult.data;\n }\n\n const targetingTree = campaignConfiguration.getTargetingTree(segment);\n\n const result = targetingTree.evaluate({\n variationData: variations,\n sdkInfo: packageInfo,\n targetingData,\n experimentId,\n visitorCode,\n });\n\n return result;\n }\n\n static validateVisitorCode(\n visitorCode: string,\n ): Result<void, KameleoonError> {\n if (visitorCode.length === 0) {\n return Err(new KameleoonError(KameleoonException.VisitorCodeEmpty));\n }\n\n if (visitorCode.length > VISITOR_CODE_MAX_LENGTH) {\n return Err(new KameleoonError(KameleoonException.VisitorCodeMaxLength));\n }\n\n return Ok();\n }\n\n static getDataUrl(\n visitorCode: string,\n campaignConfiguration: CampaignConfiguration,\n ): string {\n const unsentData = campaignConfiguration.getUnsentData(visitorCode);\n let resultUrl = '';\n\n if (!unsentData || !unsentData.size) {\n return resultUrl;\n }\n\n for (const item of unsentData.values()) {\n if (item.url) {\n resultUrl += item.url + '\\n';\n }\n }\n\n return resultUrl;\n }\n\n static async trackRule({\n featureFlagVariation,\n campaignConfiguration,\n visitorCode,\n requester,\n isOfflineModeOn,\n offlineTrackingStorage,\n }: TrackRuleParametersType): Promise<void> {\n const { variationId, rule } = featureFlagVariation;\n\n const userAgent = this.getUserAgent(visitorCode, campaignConfiguration);\n\n const dataUrl = this.getDataUrl(visitorCode, campaignConfiguration);\n\n const resultVariationId = variationId || 0;\n const isUnallocated = variationId === null;\n // --- Note ---\n // Experiment id is not needed for unallocated visitors\n // So we just use 0 as a fallback\n const experimentId = rule ? rule.experimentId : 0;\n\n const parameters = {\n visitorCode,\n isUnallocated,\n body: dataUrl,\n experimentId,\n variationId: resultVariationId,\n userAgent,\n };\n\n const result = await requester.trackExperiment(parameters);\n\n if (result.ok) {\n campaignConfiguration.clearUnsentData(visitorCode);\n }\n\n if (!result.ok && isOfflineModeOn) {\n this.addItemToOfflineTracking({\n item: parameters,\n storage: offlineTrackingStorage,\n isExperiment: true,\n });\n }\n }\n\n static parseFeatureVariable(\n variable: FeatureVariableType,\n ): Result<FeatureVariableResultType, KameleoonError> {\n const { type, value } = variable;\n\n switch (type) {\n case VariableType.BOOLEAN:\n return Ok({\n type,\n value: Boolean(value),\n });\n case VariableType.STRING:\n return Ok({\n type,\n value: String(value),\n });\n case VariableType.NUMBER:\n const numberValue = Number(value);\n\n if (Number.isNaN(numberValue)) {\n return Err(\n new KameleoonError(KameleoonException.NumberParse, String(value)),\n );\n }\n\n return Ok({\n type,\n value: numberValue,\n });\n case VariableType.JSON:\n try {\n const jsonValue: JSONType = JSON.parse(String(variable.value));\n\n return Ok({\n type,\n value: jsonValue,\n });\n } catch (err) {\n return Err(new KameleoonError(KameleoonException.JSONParse, err));\n }\n default:\n exhaustCheck(type);\n }\n }\n\n static parseVisitorData(data: GetVisitorDataResultType): KameleoonDataType[] {\n const { currentVisit, previousVisits } = data;\n\n let visits: [VisitType] | undefined;\n\n if (currentVisit) {\n visits = [currentVisit];\n } else if (previousVisits) {\n visits = previousVisits;\n }\n\n if (!visits) {\n return [];\n }\n\n const indexMap = new Map();\n const resultData: KameleoonDataType[] = [];\n const customDataEvents = [...visits[0].customDataEvents];\n customDataEvents.sort((a, b) => b.time - a.time);\n\n for (const customDataEvent of customDataEvents) {\n const customDataIndex = customDataEvent.data.index;\n\n if (!indexMap.has(customDataIndex)) {\n indexMap.set(customDataIndex, true);\n\n const values = Object.keys(customDataEvent.data.valuesCountMap);\n resultData.push(new CustomData(customDataIndex, ...values));\n }\n }\n\n return resultData;\n }\n\n static parseRegExp(value: string): RegExp {\n if (value[0] === '/') {\n const [_, expression, flags] = value.split('/');\n\n return new RegExp(expression, flags);\n }\n\n return new RegExp(value);\n }\n\n static getUserAgent(\n visitorCode: string,\n campaignConfiguration: CampaignConfiguration,\n ): string | undefined {\n const targetingData: KameleoonVisitorDataType | undefined =\n campaignConfiguration.storedTargetingData[visitorCode];\n\n if (targetingData) {\n const userAgentData = targetingData[KameleoonData.UserAgent];\n\n if (userAgentData) {\n return userAgentData.value;\n }\n }\n\n return undefined;\n }\n\n static isCustomData(dataItem: KameleoonDataType): dataItem is CustomData {\n return dataItem.data.type === KameleoonData.CustomData;\n }\n\n static updateCache({\n cacheManager,\n visitorCode,\n experimentId,\n variationId,\n }: ManageCacheParametersType): void {\n const cacheData = cacheManager.getAliveItem(visitorCode);\n\n const newCacheData = cacheData ? { ...cacheData } : {};\n\n newCacheData[experimentId] = {\n variationId,\n expirationTime: Date.now() + CACHE_ITEM_LIFETIME * Milliseconds.Second,\n };\n\n cacheManager.add({\n key: visitorCode,\n data: newCacheData,\n lifetime: CACHE_ITEM_LIFETIME,\n });\n }\n\n static getTrackingCode(\n trackingCache: CacheManager<TrackingCacheItemType>,\n visitorCode: string,\n ): string {\n let resultString = 'window.kameleoonQueue=window.kameleoonQueue||[];';\n\n const cacheData = trackingCache.getAliveItem(visitorCode);\n\n if (!cacheData) {\n return resultString;\n }\n\n const updatedCacheData: TrackingCacheItemType = {};\n\n Object.entries(cacheData).forEach(\n ([experimentId, { variationId, expirationTime }]) => {\n if (expirationTime > Date.now()) {\n resultString += `window.kameleoonQueue.push(['Experiments.assignVariation',${experimentId},${variationId}]);`;\n resultString += `window.kameleoonQueue.push(['Experiments.trigger',${experimentId},true]);`;\n\n updatedCacheData[Number(experimentId)] = {\n variationId,\n expirationTime,\n };\n }\n },\n );\n\n // --- Note ---\n // Cache is updated with only alive experiments\n trackingCache.add({\n key: visitorCode,\n data: updatedCacheData,\n lifetime: CACHE_ITEM_LIFETIME,\n });\n\n return resultString;\n }\n\n static async trackData({\n visitorCode,\n campaignConfiguration,\n requester,\n isOfflineModeOn,\n offlineTrackingStorage,\n }: TrackDataParametersType): Promise<void> {\n await this.sendOfflineTracking({\n requester,\n storage: offlineTrackingStorage,\n });\n\n const dataUrl = this.getDataUrl(visitorCode, campaignConfiguration);\n\n const userAgent = this.getUserAgent(visitorCode, campaignConfiguration);\n\n const parameters = {\n visitorCode,\n body: dataUrl,\n userAgent,\n };\n\n const result = await requester.trackData(parameters);\n\n const cleanup = () => campaignConfiguration.clearUnsentData(visitorCode);\n\n if (result.ok) {\n cleanup();\n }\n\n if (!result.ok && isOfflineModeOn) {\n this.addItemToOfflineTracking({\n item: parameters,\n storage: offlineTrackingStorage,\n isExperiment: false,\n onSuccess: cleanup,\n });\n }\n }\n\n static async trackExperiment({\n variationId,\n experimentId,\n isUnallocated,\n visitorCode,\n campaignConfiguration,\n requester,\n isOfflineModeOn,\n offlineTrackingStorage,\n }: TrackExperimentParametersType): Promise<void> {\n const dataUrl = this.getDataUrl(visitorCode, campaignConfiguration);\n\n const userAgent = this.getUserAgent(visitorCode, campaignConfiguration);\n\n const parameters = {\n body: dataUrl,\n visitorCode,\n isUnallocated,\n variationId,\n userAgent,\n experimentId,\n };\n\n const result = await requester.trackExperiment(parameters);\n\n if (!result.ok && isOfflineModeOn) {\n this.addItemToOfflineTracking({\n item: parameters,\n storage: offlineTrackingStorage,\n isExperiment: true,\n });\n }\n }\n\n static getNonce(): string {\n const hexLength = HEX_CHARACTERS.length;\n let nonce: string = '';\n\n for (let i = 0; i < hexLength; i++) {\n const randomNumber = Math.floor(Math.random() * hexLength);\n nonce += HEX_CHARACTERS.substring(randomNumber, randomNumber + 1);\n }\n\n return nonce;\n }\n\n static async sendOfflineTracking({\n requester,\n storage,\n }: SendOfflineTrackingParametersType) {\n const readResult = storage.read();\n\n if (readResult.ok && readResult.data.requestParameters) {\n const { requestParameters } = readResult.data;\n const successfulTimestamps: number[] = [];\n\n // --- Note ---\n // `for..of` + `await` is used to make sure that failed requests are sent one by one\n // without risk of getting the same timestamp at the server, which might happen, for example,\n // with `.forEach` or `.map` starting requests in async callbacks at the same time\n for (const parameters of requestParameters) {\n const { timestamp, isExperiment, ...params } = parameters;\n let result: Result<boolean, KameleoonError>;\n\n if (isExperiment) {\n result = await requester.trackExperiment(\n params as TrackExperimentParamsType,\n );\n } else {\n result = await requester.trackData(params as TrackDataParamsType);\n }\n\n result.ok && result.data && successfulTimestamps.push(timestamp);\n }\n\n this.deleteFromOfflineTracking({\n storage,\n timestamps: successfulTimestamps,\n });\n }\n }\n\n private static addItemToOfflineTracking({\n item,\n isExperiment,\n storage,\n onSuccess,\n }: AddToOfflineTrackingParametersType): void {\n const readResult = storage.read();\n\n const data = readResult.ok ? readResult.data : {};\n\n const { requestParameters } = data;\n\n const newItem = {\n ...item,\n timestamp: new Date().getTime(),\n isExperiment,\n };\n\n const newRequestParameters = requestParameters\n ? [...requestParameters, newItem]\n : [newItem];\n\n const writeResult = storage.write({\n requestParameters: newRequestParameters,\n });\n\n if (writeResult.ok && onSuccess) {\n onSuccess();\n }\n }\n\n private static deleteFromOfflineTracking({\n timestamps,\n storage,\n }: DeleteFromOfflineTrackingParametersType): void {\n const readResult = storage.read();\n\n if (readResult.ok) {\n const { requestParameters } = readResult.data;\n\n const newParameters = requestParameters?.filter(\n (item) => !timestamps.includes(item.timestamp),\n );\n\n storage.write({ requestParameters: newParameters });\n }\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"utilities.js","names":["Utilities","a","_classCallCheck","_createClass","key","value","checkTargeting","segment","visitorCode","targetingData","experimentId","variationConfiguration","clientConfiguration","packageInfo","dataManager","conditionsData","firstLevel","length","Ok","Err","KameleoonError","KameleoonException","Initialization","variations","assignedVariationsResult","getStoredVariations","ok","data","targetingTree","getTree","trees","segments","ruleMap","hasTargetingType","TargetingType","SEGMENT","TARGET_FEATURE_FLAG","result","evaluate","variationData","sdkInfo","validateVisitorCode","VisitorCodeEmpty","VISITOR_CODE_MAX_LENGTH","VisitorCodeMaxLength","getDataUrl","b","updateUrl","url","shouldSendConversionData","type","KameleoonData","Conversion","isConsentProvided","resultUrl","push","UrlParameter","Nonce","getNonce","unsentData","getUnsentData","size","i","j","_createForOfIteratorHelper","values","s","n","done","item","Array","isArray","forEach","arrayItem","e","f","join","apply","arguments","_asyncToGenerator","_regeneratorRuntime","mark","c","d","g","h","k","l","m","o","p","q","r","t","wrap","u","prev","next","featureFlagVariation","requester","isOfflineModeOn","offlineTrackingStorage","variationId","rule","isTargetedRule","userAgent","getUserAgent","dataUrl","hasVariationData","abrupt","resultVariationId","isUnallocated","parameters","body","trackExperiment","sent","clearUnsentData","clearUnsentDataByKey","addItemToOfflineTracking","storage","isExperiment","stop","convertTimeUnit","time","timeUnit","timeMap","_defineProperty","TimeUnit","Minute","Milliseconds","Hour","Day","Week","Month","parseFeatureVariable","variable","VariableType","BOOLEAN","STRING","NUMBER","numberValue","Number","isNaN","NumberParse","JSON","jsonValue","parse","err","JSONParse","exhaustCheck","parseVisitorData","filters","currentVisit","previousVisits","browserFilter","browser","customDataFilter","customData","operatingSystemFilter","operatingSystem","conversionsFilter","conversions","deviceFilter","device","geolocationFilter","geolocation","experimentsFilter","experiments","pageViewFilter","pageViews","visits","_toConsumableArray","resultData","PageView","_listFromVisits","Browser","_fromVisits","visit","experimentData","experimentEvents","x","y","experimentEvent","A","id","updateStoredVariations","Device","GeolocationData","CustomData","OperatingSystem","visitsData","VisitsData","_fromRemoteVisits","parseRegExp","split","_slicedToArray","_","expression","flags","RegExp","storedData","storedTargetingData","userAgentData","UserAgent","isCustomData","dataItem","insertInOrderedListMutably","list","element","order","includes","index","findIndex","Order","Ascending","splice","updateCache","cacheManager","cacheData","getAliveItem","newCacheData","_objectSpread","expirationTime","Date","now","CACHE_ITEM_LIFETIME","Second","add","lifetime","getTrackingCode","trackingCache","resultString","updatedCacheData","Object","entries","concat","sendOfflineTracking","trackData","cleanup","onSuccess","randomNumber","hexLength","HEX_CHARACTERS","nonce","Math","floor","random","substring","readResult","read","requestParameters","successfulTimestamps","timestamp","params","_objectWithoutProperties","_excluded","t0","finish","deleteFromOfflineTracking","timestamps","compareSemVer","version","compareVersion","operator","versionResult","validateVersion","compareVersionResult","error","major","minor","patch","compareMajor","compareMinor","comparePatch","isMajorEqual","isMinorEqual","isPatchEqual","VersionMatchType","EQUAL","GREATER","LOWER","isServerEnvironment","response","generateRandomString","characters","randomCharacterArray","newItem","getTime","newRequestParameters","writeResult","write","newParameters","filter","versionParts","map","parseInt","some","SemanticVersionParse","slice","exports"],"sources":["../../src/utilities/utilities.ts"],"sourcesContent":["import { ServerResponse } from 'http';\nimport { Err, Ok, Result } from 'ts-res';\nimport {\n KameleoonError,\n KameleoonException,\n exhaustCheck,\n} from 'src/kameleoonError';\nimport {\n FeatureVariableResultType,\n Milliseconds,\n TrackingCacheItemType,\n VariableType,\n} from 'src/types';\nimport { FeatureVariableType, JSONType } from 'src/clientConfiguration';\nimport {\n Browser,\n Conversion,\n CustomData,\n DataManager,\n Device,\n GeolocationData,\n KameleoonData,\n KameleoonDataType,\n OperatingSystem,\n PageView,\n VisitsData,\n} from 'src/kameleoonData';\nimport { CACHE_ITEM_LIFETIME } from 'src/constants';\nimport { CacheManager } from 'src/cacheManager';\nimport {\n TrackExperimentParamsType,\n TrackDataParamsType,\n VisitType,\n UrlParameter,\n} from 'src/requester';\nimport { VersionMatchType, TargetingType } from 'src/targeting';\nimport { KameleoonVisitorDataType } from 'src/kameleoonData/types';\nimport { FeatureFlagVariationsType } from 'src/storage/types';\nimport { VISITOR_CODE_MAX_LENGTH, HEX_CHARACTERS } from './constants';\nimport {\n CheckTargetingParametersType,\n ManageCacheParametersType,\n TrackDataParametersType,\n TrackRuleParametersType,\n AddToOfflineTrackingParametersType,\n SendOfflineTrackingParametersType,\n DeleteFromOfflineTrackingParametersType,\n ParseVisitorDataParametersType,\n InsertInOrderedListParametersType,\n Order,\n TimeUnit,\n GetDataUrlParametersType,\n} from './types';\n\nexport class Utilities {\n static checkTargeting({\n segment,\n visitorCode,\n targetingData,\n experimentId,\n variationConfiguration,\n clientConfiguration,\n packageInfo,\n dataManager,\n }: CheckTargetingParametersType): Result<boolean, KameleoonError> {\n if (!segment || !segment.conditionsData.firstLevel.length) {\n return Ok(true);\n }\n\n if (!variationConfiguration) {\n return Err(new KameleoonError(KameleoonException.Initialization));\n }\n\n let variations: FeatureFlagVariationsType = {};\n\n const assignedVariationsResult =\n variationConfiguration.getStoredVariations(visitorCode);\n\n if (assignedVariationsResult.ok) {\n variations = assignedVariationsResult.data;\n }\n\n const targetingTree = dataManager.getTree(segment);\n\n let trees = undefined;\n let segments = undefined;\n let ruleMap = undefined;\n\n // --- Note ---\n // Only getting trees and segments targeting type\n if (targetingTree.hasTargetingType(TargetingType.SEGMENT)) {\n trees = dataManager.trees;\n segments = clientConfiguration.segments;\n }\n\n // --- Note ---\n // Only constructing rule map for targeting type\n if (targetingTree.hasTargetingType(TargetingType.TARGET_FEATURE_FLAG)) {\n ruleMap = clientConfiguration.ruleMap;\n }\n\n const result = targetingTree.evaluate({\n variationData: variations,\n sdkInfo: packageInfo,\n segments,\n ruleMap,\n trees,\n targetingData,\n experimentId,\n visitorCode,\n });\n\n return result;\n }\n\n static validateVisitorCode(\n visitorCode: string,\n ): Result<void, KameleoonError> {\n if (visitorCode.length === 0) {\n return Err(new KameleoonError(KameleoonException.VisitorCodeEmpty));\n }\n\n if (visitorCode.length > VISITOR_CODE_MAX_LENGTH) {\n return Err(new KameleoonError(KameleoonException.VisitorCodeMaxLength));\n }\n\n return Ok();\n }\n\n static getDataUrl({\n visitorCode,\n dataManager,\n isConsentProvided,\n }: GetDataUrlParametersType): string {\n const unsentData = dataManager.getUnsentData(visitorCode);\n const resultUrl: string[] = [];\n\n if (!unsentData || !unsentData.size) {\n return '';\n }\n\n function updateUrl(data: KameleoonDataType): void {\n if (!data.url) {\n return;\n }\n\n const shouldSendAllData = isConsentProvided;\n const shouldSendConversionData =\n data.data.type === KameleoonData.Conversion;\n\n if (shouldSendAllData || shouldSendConversionData) {\n resultUrl.push(\n data.url + UrlParameter.Nonce + Utilities.getNonce() + '\\n',\n );\n }\n }\n\n for (const item of unsentData.values()) {\n if (Array.isArray(item)) {\n item.forEach((arrayItem) => updateUrl(arrayItem));\n } else {\n updateUrl(item);\n }\n }\n\n return resultUrl.join('');\n }\n\n static async trackFeatureExperiment({\n featureFlagVariation,\n dataManager,\n visitorCode,\n requester,\n isOfflineModeOn,\n isConsentProvided,\n offlineTrackingStorage,\n }: TrackRuleParametersType): Promise<void> {\n const { variationId, rule, isTargetedRule } = featureFlagVariation;\n\n const userAgent = this.getUserAgent(visitorCode, dataManager);\n\n const dataUrl = this.getDataUrl({\n visitorCode,\n dataManager,\n isConsentProvided,\n });\n\n if (!isConsentProvided) {\n const hasVariationData = !!variationId || !!rule;\n\n if (!dataUrl && !hasVariationData) {\n return;\n }\n }\n\n const resultVariationId = variationId || 0;\n const isUnallocated = variationId === null;\n\n // --- Note ---\n // Experiment id is not needed for unallocated visitors\n // So we just use 0 as a fallback\n const experimentId = rule ? rule.experimentId : 0;\n\n const parameters = {\n visitorCode,\n isUnallocated,\n body: dataUrl,\n experimentId,\n variationId: resultVariationId,\n userAgent,\n isTargetedRule,\n isConsentProvided,\n };\n\n const result = await requester.trackExperiment(parameters);\n\n if (result.ok) {\n if (!isConsentProvided) {\n dataManager.clearUnsentDataByKey(visitorCode, KameleoonData.Conversion);\n } else {\n dataManager.clearUnsentData(visitorCode);\n }\n }\n\n if (!result.ok && isOfflineModeOn) {\n this.addItemToOfflineTracking({\n item: parameters,\n storage: offlineTrackingStorage,\n isExperiment: true,\n });\n }\n }\n\n static convertTimeUnit(time: number, timeUnit: TimeUnit): number {\n const timeMap = {\n [TimeUnit.Minute]: Milliseconds.Minute,\n [TimeUnit.Hour]: Milliseconds.Hour,\n [TimeUnit.Day]: Milliseconds.Day,\n [TimeUnit.Week]: Milliseconds.Week,\n [TimeUnit.Month]: Milliseconds.Month,\n };\n\n return time / timeMap[timeUnit];\n }\n\n static parseFeatureVariable(\n variable: FeatureVariableType,\n ): Result<FeatureVariableResultType, KameleoonError> {\n const { type, value } = variable;\n\n switch (type) {\n case VariableType.BOOLEAN:\n return Ok({\n type,\n value: Boolean(value),\n });\n case VariableType.STRING:\n return Ok({\n type,\n value: String(value),\n });\n case VariableType.NUMBER:\n const numberValue = Number(value);\n\n if (Number.isNaN(numberValue)) {\n return Err(\n new KameleoonError(KameleoonException.NumberParse, String(value)),\n );\n }\n\n return Ok({\n type,\n value: numberValue,\n });\n case VariableType.JSON:\n try {\n const jsonValue: JSONType = JSON.parse(String(variable.value));\n\n return Ok({\n type,\n value: jsonValue,\n });\n } catch (err) {\n return Err(new KameleoonError(KameleoonException.JSONParse, err));\n }\n default:\n exhaustCheck(type);\n }\n }\n\n static parseVisitorData({\n data,\n filters,\n visitorCode,\n variationConfiguration,\n }: ParseVisitorDataParametersType): KameleoonDataType[] {\n const { currentVisit, previousVisits } = data;\n const {\n browser: browserFilter,\n customData: customDataFilter,\n operatingSystem: operatingSystemFilter,\n conversions: conversionsFilter,\n device: deviceFilter,\n geolocation: geolocationFilter,\n experiments: experimentsFilter,\n pageViews: pageViewFilter,\n } = filters;\n\n let visits: VisitType[] = [];\n\n if (currentVisit) {\n visits.push(currentVisit);\n }\n\n if (previousVisits) {\n visits.push(...previousVisits);\n }\n\n if (!visits) {\n return [];\n }\n\n const resultData: KameleoonDataType[] = [];\n\n if (pageViewFilter) {\n const pageViews = PageView._listFromVisits(visits);\n\n if (pageViews.length) {\n resultData.push(...pageViews);\n }\n }\n\n // --- Browser ---\n if (browserFilter) {\n const browser = Browser._fromVisits(visits);\n\n if (browser) {\n resultData.push(browser);\n }\n }\n\n // --- Experiments ---\n if (experimentsFilter) {\n const experimentData: FeatureFlagVariationsType = {};\n\n // --- Note ---\n // Going backwards to get the latest experiment data\n for (let i = visits.length - 1; i >= 0; i--) {\n const visit = visits[i];\n\n if (!visit.experimentEvents) {\n continue;\n }\n\n for (const experimentEvent of visit.experimentEvents) {\n const { id, variationId } = experimentEvent.data;\n\n experimentData[id] = variationId;\n }\n }\n\n variationConfiguration.updateStoredVariations(\n visitorCode,\n experimentData,\n );\n }\n\n // --- Device ---\n if (deviceFilter) {\n const device = Device._fromVisits(visits);\n\n if (device) {\n resultData.push(device);\n }\n }\n\n // --- Geolocation ---\n if (geolocationFilter) {\n const geolocation = GeolocationData._fromVisits(visits);\n\n if (geolocation) {\n resultData.push(geolocation);\n }\n }\n\n // --- Custom data ---\n if (customDataFilter) {\n resultData.push(...CustomData._listFromVisits(visits));\n }\n\n // --- Operating system ---\n if (operatingSystemFilter) {\n const operatingSystem = OperatingSystem._fromVisits(visits);\n\n if (operatingSystem) {\n resultData.push(operatingSystem);\n }\n }\n\n // --- Conversions ---\n if (conversionsFilter) {\n resultData.push(...Conversion._listFromVisits(visits));\n }\n\n const visitsData = VisitsData._fromRemoteVisits(\n visits,\n Boolean(currentVisit),\n );\n\n if (visitsData) {\n resultData.push(visitsData);\n }\n\n return resultData;\n }\n\n static parseRegExp(value: string): RegExp {\n if (value[0] === '/') {\n const [_, expression, flags] = value.split('/');\n\n return new RegExp(expression, flags);\n }\n\n return new RegExp(value);\n }\n\n static getUserAgent(\n visitorCode: string,\n dataManager: DataManager,\n ): string | undefined {\n const storedData = dataManager.storedTargetingData;\n\n const targetingData: KameleoonVisitorDataType | undefined =\n storedData && storedData[visitorCode];\n\n if (targetingData) {\n const userAgentData = targetingData[KameleoonData.UserAgent];\n\n if (userAgentData) {\n return userAgentData.value;\n }\n }\n\n return undefined;\n }\n\n static isCustomData(dataItem: KameleoonDataType): dataItem is CustomData {\n return dataItem.data.type === KameleoonData.CustomData;\n }\n\n /**\n * Insert element in ordered list, if element already exists in list, does nothing\n * @param list - list to insert element\n * @param element - element to insert\n * @param order - order of list\n */\n static insertInOrderedListMutably({\n list,\n element,\n order,\n }: InsertInOrderedListParametersType): void {\n if (list.includes(element)) {\n return;\n }\n\n const index = list.findIndex((item) =>\n order === Order.Ascending ? item >= element : item <= element,\n );\n\n if (index === -1) {\n list.push(element);\n } else {\n list.splice(index, 0, element);\n }\n }\n\n static updateCache({\n cacheManager,\n visitorCode,\n experimentId,\n variationId,\n }: ManageCacheParametersType): void {\n const cacheData = cacheManager.getAliveItem(visitorCode);\n\n const newCacheData = cacheData ? { ...cacheData } : {};\n\n newCacheData[experimentId] = {\n variationId,\n expirationTime: Date.now() + CACHE_ITEM_LIFETIME * Milliseconds.Second,\n };\n\n cacheManager.add({\n key: visitorCode,\n data: newCacheData,\n lifetime: CACHE_ITEM_LIFETIME,\n });\n }\n\n static getTrackingCode(\n trackingCache: CacheManager<TrackingCacheItemType>,\n visitorCode: string,\n ): string {\n let resultString = 'window.kameleoonQueue=window.kameleoonQueue||[];';\n\n const cacheData = trackingCache.getAliveItem(visitorCode);\n\n if (!cacheData) {\n return resultString;\n }\n\n const updatedCacheData: TrackingCacheItemType = {};\n\n Object.entries(cacheData).forEach(\n ([experimentId, { variationId, expirationTime }]) => {\n if (expirationTime > Date.now()) {\n resultString += `window.kameleoonQueue.push(['Experiments.assignVariation',${experimentId},${variationId}]);`;\n resultString += `window.kameleoonQueue.push(['Experiments.trigger',${experimentId},true]);`;\n\n updatedCacheData[Number(experimentId)] = {\n variationId,\n expirationTime,\n };\n }\n },\n );\n\n // --- Note ---\n // Cache is updated with only alive experiments\n trackingCache.add({\n key: visitorCode,\n data: updatedCacheData,\n lifetime: CACHE_ITEM_LIFETIME,\n });\n\n return resultString;\n }\n\n static async trackData({\n visitorCode,\n dataManager,\n requester,\n isOfflineModeOn,\n offlineTrackingStorage,\n isConsentProvided,\n }: TrackDataParametersType): Promise<void> {\n await this.sendOfflineTracking({\n requester,\n storage: offlineTrackingStorage,\n });\n\n const dataUrl = this.getDataUrl({\n visitorCode,\n dataManager,\n isConsentProvided,\n });\n\n if (!isConsentProvided && !dataUrl) {\n return;\n }\n\n const userAgent = this.getUserAgent(visitorCode, dataManager);\n\n const parameters = {\n visitorCode,\n body: dataUrl,\n userAgent,\n };\n\n const result = await requester.trackData(parameters);\n\n const cleanup = () =>\n isConsentProvided\n ? dataManager.clearUnsentData(visitorCode)\n : dataManager.clearUnsentDataByKey(\n visitorCode,\n KameleoonData.Conversion,\n );\n\n if (result.ok) {\n cleanup();\n }\n\n if (!result.ok && isOfflineModeOn) {\n this.addItemToOfflineTracking({\n item: parameters,\n storage: offlineTrackingStorage,\n isExperiment: false,\n onSuccess: cleanup,\n });\n }\n }\n\n static getNonce(): string {\n const hexLength = HEX_CHARACTERS.length;\n let nonce: string = '';\n\n for (let i = 0; i < hexLength; i++) {\n const randomNumber = Math.floor(Math.random() * hexLength);\n nonce += HEX_CHARACTERS.substring(randomNumber, randomNumber + 1);\n }\n\n return nonce;\n }\n\n static async sendOfflineTracking({\n requester,\n storage,\n }: SendOfflineTrackingParametersType) {\n const readResult = storage.read();\n\n if (readResult.ok && readResult.data.requestParameters) {\n const { requestParameters } = readResult.data;\n const successfulTimestamps: number[] = [];\n\n // --- Note ---\n // `for..of` + `await` is used to make sure that failed requests are sent one by one\n // without risk of getting the same timestamp at the server, which might happen, for example,\n // with `.forEach` or `.map` starting requests in async callbacks at the same time\n for (const parameters of requestParameters) {\n const { timestamp, isExperiment, ...params } = parameters;\n let result: Result<boolean, KameleoonError>;\n\n if (isExperiment) {\n result = await requester.trackExperiment(\n params as TrackExperimentParamsType,\n );\n } else {\n result = await requester.trackData(params as TrackDataParamsType);\n }\n\n result.ok && result.data && successfulTimestamps.push(timestamp);\n }\n\n this.deleteFromOfflineTracking({\n storage,\n timestamps: successfulTimestamps,\n });\n }\n }\n\n static compareSemVer({\n version,\n compareVersion,\n operator,\n }: {\n version: string;\n compareVersion: string;\n operator: VersionMatchType;\n }): Result<boolean, KameleoonError> {\n const versionResult = this.validateVersion(version);\n const compareVersionResult = this.validateVersion(compareVersion);\n\n if (!versionResult.ok) {\n return Err(versionResult.error);\n }\n\n if (!compareVersionResult.ok) {\n return Err(compareVersionResult.error);\n }\n\n const [major, minor, patch] = versionResult.data;\n const [compareMajor, compareMinor, comparePatch] =\n compareVersionResult.data;\n\n const [isMajorEqual, isMinorEqual, isPatchEqual] = [\n major === compareMajor,\n minor === compareMinor,\n patch === comparePatch,\n ];\n\n switch (operator) {\n case VersionMatchType.EQUAL:\n return Ok(isMajorEqual && isMinorEqual && isPatchEqual);\n case VersionMatchType.GREATER:\n return Ok(\n major > compareMajor ||\n (isMajorEqual && minor > compareMinor) ||\n (isMajorEqual && isMinorEqual && patch > comparePatch),\n );\n case VersionMatchType.LOWER:\n return Ok(\n major < compareMajor ||\n (isMajorEqual && minor < compareMinor) ||\n (isMajorEqual && isMinorEqual && patch < comparePatch),\n );\n default:\n exhaustCheck(operator);\n }\n }\n\n static isServerEnvironment<T extends { response: ServerResponse }, U>(\n params: T | U,\n ): params is T {\n return (params as T).response !== undefined;\n }\n\n static generateRandomString(length: number): string {\n const characters = 'abcdefghijklmnopqrstuvwxyz0123456789';\n const randomCharacterArray: string[] = [];\n\n if (length < 0) {\n return '';\n }\n\n for (let i = 0; i < length; i++) {\n randomCharacterArray.push(\n characters[Math.floor(Math.random() * characters.length)],\n );\n }\n\n return randomCharacterArray.join('');\n }\n\n private static addItemToOfflineTracking({\n item,\n isExperiment,\n storage,\n onSuccess,\n }: AddToOfflineTrackingParametersType): void {\n const readResult = storage.read();\n\n const data = readResult.ok ? readResult.data : {};\n\n const { requestParameters } = data;\n\n const newItem = {\n ...item,\n timestamp: new Date().getTime(),\n isExperiment,\n };\n\n const newRequestParameters = requestParameters\n ? [...requestParameters, newItem]\n : [newItem];\n\n const writeResult = storage.write({\n requestParameters: newRequestParameters,\n });\n\n if (writeResult.ok && onSuccess) {\n onSuccess();\n }\n }\n\n private static deleteFromOfflineTracking({\n timestamps,\n storage,\n }: DeleteFromOfflineTrackingParametersType): void {\n const readResult = storage.read();\n\n if (readResult.ok) {\n const { requestParameters } = readResult.data;\n\n const newParameters = requestParameters?.filter(\n (item) => !timestamps.includes(item.timestamp),\n );\n\n storage.write({ requestParameters: newParameters });\n }\n }\n\n private static validateVersion(\n version: string,\n ): Result<[number, number, number], KameleoonError> {\n const versionParts = version.split('.').map((x) => parseInt(x, 10));\n\n while (versionParts.length < 3) {\n versionParts.push(0);\n }\n\n if (versionParts.some((item) => isNaN(item))) {\n return Err(\n new KameleoonError(KameleoonException.SemanticVersionParse, version),\n );\n }\n\n return Ok(versionParts.slice(0, 3) as [number, number, number]);\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export { VariationConfiguration } from './variationConfiguration';
|
|
2
|
-
export {
|
|
2
|
+
export { FeatureFlagVariationType } from './types';
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"FeatureFlagVariationType",{enumerable:!0,get:function get(){return _types.FeatureFlagVariationType}}),Object.defineProperty(exports,"VariationConfiguration",{enumerable:!0,get:function get(){return _variationConfiguration.VariationConfiguration}})
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"FeatureFlagVariationType",{enumerable:!0,get:function get(){return _types.FeatureFlagVariationType}}),Object.defineProperty(exports,"VariationConfiguration",{enumerable:!0,get:function get(){return _variationConfiguration.VariationConfiguration}});var _variationConfiguration=require("./variationConfiguration"),_types=require("./types");
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../src/variationConfiguration/index.ts"],"sourcesContent":["export { VariationConfiguration } from './variationConfiguration';\nexport {
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../src/variationConfiguration/index.ts"],"sourcesContent":["export { VariationConfiguration } from './variationConfiguration';\nexport { FeatureFlagVariationType } from './types';\n"],"mappings":""}
|
|
@@ -1,15 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ClientConfiguration, FeatureFlagType, RuleItemType } from '../clientConfiguration';
|
|
2
|
+
import { DataManager } from '../kameleoonData';
|
|
2
3
|
import { KameleoonVisitorDataType } from '../kameleoonData/types';
|
|
3
4
|
import { ExternalPackageInfoType } from '../types';
|
|
4
|
-
export type VariationType = {
|
|
5
|
-
variationId: number;
|
|
6
|
-
assignmentDate: string;
|
|
7
|
-
};
|
|
8
|
-
export type UpdateStorageParamsType = {
|
|
9
|
-
visitorCode: string;
|
|
10
|
-
experimentId: string;
|
|
11
|
-
variationId: number;
|
|
12
|
-
};
|
|
13
5
|
export type FeatureFlagVariationType = {
|
|
14
6
|
variationKey: string;
|
|
15
7
|
variationId: number | null;
|
|
@@ -17,12 +9,14 @@ export type FeatureFlagVariationType = {
|
|
|
17
9
|
featureFlagId: number;
|
|
18
10
|
featureKey: string;
|
|
19
11
|
rule: RuleItemType | null;
|
|
12
|
+
isTargetedRule?: boolean;
|
|
20
13
|
};
|
|
21
|
-
export type
|
|
14
|
+
export type GetVariationParametersType = {
|
|
22
15
|
visitorCode: string;
|
|
23
16
|
featureFlag: FeatureFlagType;
|
|
24
17
|
targetingData: KameleoonVisitorDataType;
|
|
25
18
|
withAssignment?: boolean;
|
|
26
19
|
packageInfo: ExternalPackageInfoType;
|
|
27
|
-
|
|
20
|
+
clientConfiguration: ClientConfiguration;
|
|
21
|
+
dataManager: DataManager;
|
|
28
22
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","names":[],"sources":["../../src/variationConfiguration/types.ts"],"sourcesContent":["import {\n
|
|
1
|
+
{"version":3,"file":"types.js","names":[],"sources":["../../src/variationConfiguration/types.ts"],"sourcesContent":["import {\n ClientConfiguration,\n FeatureFlagType,\n RuleItemType,\n} from 'src/clientConfiguration';\nimport { DataManager } from 'src/kameleoonData';\nimport { KameleoonVisitorDataType } from 'src/kameleoonData/types';\nimport { ExternalPackageInfoType } from 'src/types';\n\nexport type FeatureFlagVariationType = {\n variationKey: string;\n variationId: number | null;\n experimentId: number | null;\n featureFlagId: number;\n featureKey: string;\n rule: RuleItemType | null;\n isTargetedRule?: boolean;\n};\n\nexport type GetVariationParametersType = {\n visitorCode: string;\n featureFlag: FeatureFlagType;\n targetingData: KameleoonVisitorDataType;\n withAssignment?: boolean;\n packageInfo: ExternalPackageInfoType;\n clientConfiguration: ClientConfiguration;\n dataManager: DataManager;\n};\n"],"mappings":""}
|
|
@@ -1,35 +1,27 @@
|
|
|
1
1
|
import { Result } from 'ts-res';
|
|
2
|
-
import { ExperimentItemType } from '../campaignConfiguration';
|
|
3
2
|
import { KameleoonError } from '../kameleoonError';
|
|
4
|
-
import { IExternalStorage, VariationDataType
|
|
5
|
-
import { FeatureFlagVariationType,
|
|
3
|
+
import { IExternalStorage, VariationDataType } from '../storage';
|
|
4
|
+
import { FeatureFlagVariationType, GetVariationParametersType } from './types';
|
|
5
|
+
import { FeatureFlagVariationsType } from '../storage/types';
|
|
6
6
|
interface IVariationConfiguration {
|
|
7
7
|
/**
|
|
8
|
-
* @method
|
|
8
|
+
* @method getStoredVariations - obtains campaigns with according variations that are *already assigned* and *stored* in the `variationStorage`.
|
|
9
9
|
*/
|
|
10
|
-
|
|
10
|
+
getStoredVariations(visitorCode: string): Result<FeatureFlagVariationsType, KameleoonError>;
|
|
11
11
|
/**
|
|
12
|
-
* @method
|
|
12
|
+
* @method updateStoredVariations - updates stored variations for the visitor
|
|
13
13
|
*/
|
|
14
|
-
|
|
14
|
+
updateStoredVariations: (visitorCode: string, variationData: FeatureFlagVariationsType) => void;
|
|
15
15
|
/**
|
|
16
|
-
* @method
|
|
16
|
+
* @method getVariation - obtains variation for the rule of the feature flag which is both targeted and has a variation, if no such rule was found, returns empty rule with default `variationKey`, given an option `withAssignment` of `true` will also assign a new variation and save it in the storage
|
|
17
17
|
*/
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* @method getExperimentVariation - obtains variation for the experiment by calculating the variation for the visitor *without assigning* it to a visitor
|
|
21
|
-
*/
|
|
22
|
-
getExperimentVariation: (visitorCode: string, experiment: ExperimentItemType) => Result<number, KameleoonError>;
|
|
18
|
+
getVariation: (params: GetVariationParametersType) => Result<FeatureFlagVariationType, KameleoonError>;
|
|
23
19
|
}
|
|
24
20
|
export declare class VariationConfiguration implements IVariationConfiguration {
|
|
25
|
-
private experiments;
|
|
26
21
|
private storage;
|
|
27
|
-
constructor(
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
getExperimentVariation(visitorCode: string, experiment: ExperimentItemType): Result<number, KameleoonError>;
|
|
32
|
-
private assignVariation;
|
|
33
|
-
private updateStorageData;
|
|
22
|
+
constructor(externalStorage: IExternalStorage<VariationDataType>);
|
|
23
|
+
getStoredVariations(visitorCode: string): Result<FeatureFlagVariationsType, KameleoonError>;
|
|
24
|
+
getVariation({ visitorCode, featureFlag, targetingData, packageInfo, clientConfiguration, dataManager, withAssignment, }: GetVariationParametersType): Result<FeatureFlagVariationType, KameleoonError>;
|
|
25
|
+
updateStoredVariations(visitorCode: string, variationData: FeatureFlagVariationsType): Result<void, KameleoonError>;
|
|
34
26
|
}
|
|
35
27
|
export {};
|
|
@@ -1,66 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.VariationConfiguration=void 0;var _tsRes=require("ts-res"),_hasher=require("../hasher"),_kameleoonError=require("../kameleoonError"),_utilities=require("../utilities"),_types=require("../
|
|
2
|
-
// --- Variation from storage is not checked anymore
|
|
3
|
-
// --- If nothing changes the commented code should be deleted
|
|
4
|
-
// along with the `Variation` class and according tests/types
|
|
5
|
-
// --- Mind `todo` in `getAssociatedVariationId.spec.ts`
|
|
6
|
-
//
|
|
7
|
-
// let associatedVariation: VariationType | undefined;
|
|
8
|
-
// this.storage.read().and((data) => {
|
|
9
|
-
// associatedVariation = data?.[visitorCode]?.[experimentId];
|
|
10
|
-
// });
|
|
11
|
-
var c=d.experiments.find(function(a){return a.id===b+""});return c?d.assignVariation(a,c):(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.ExperimentConfigurationNotFound,b,a));// const variation = new Variation(associatedVariation);
|
|
12
|
-
// if (variation.isValid(experiment?.respoolTime)) {
|
|
13
|
-
// return Ok(variation.id);
|
|
14
|
-
// }
|
|
15
|
-
}),this.experiments=b,this.storage=c}return _createClass(a,[{key:"getAssignedVariations",value:function getAssignedVariations(a){var b=this.storage.read();if(!b.ok)return b;var c=b.data[a];return c?(0,_tsRes.Ok)(c):(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.StorageRead,a))}},{key:"getFeatureFlagVariation",value:function getFeatureFlagVariation(a){var b=a.visitorCode,c=a.featureFlag,d=a.targetingData,e=a.packageInfo,f=a.campaignConfiguration,g=a.withAssignment,h=_utilities.Utilities.validateVisitorCode(b);if(!h.ok)return(0,_tsRes.Err)(h.error);var i,j=c.rules,k=c.featureKey,l=c.id,m=c.defaultVariationKey,n=_createForOfIteratorHelper(j);try{for(n.s();!(i=n.n()).done;){var o=i.value,p=o.segment,q=o.experimentId,r=o.id,s=o.exposition,t=o.respoolTime,u=o.variationByExposition,v=_utilities.Utilities.checkTargeting({segment:p,visitorCode:b,experimentId:q,targetingData:d,packageInfo:e,campaignConfiguration:f,variationConfiguration:this});if(!v.ok)return v;if(v.data){// --- Note ---
|
|
16
|
-
// Calculate new variation (and assign it if `withAssignment` is `true`)
|
|
17
|
-
// First the the exposed rule is calculated and then the variation inside of it
|
|
18
|
-
var w=_hasher.Hasher.obtainFeatureFlagHashDouble({visitorCode:b,respoolTime:t,campaignId:r+""});if(w<=s){var x,y=0,z=_hasher.Hasher.obtainFeatureFlagHashDouble({visitorCode:b,respoolTime:t,campaignId:q+""}),A=_createForOfIteratorHelper(u);try{for(A.s();!(x=A.n()).done;){var B=x.value;if(y+=B.exposition,z<=y){o.type===_types.RuleType.EXPERIMENTATION&&void 0!==g&&g&&this.updateStorageData({visitorCode:b,experimentId:q+"",// --- Note ---
|
|
19
|
-
// For `RuleType.EXPERIMENTATION` `variationId` can not be null
|
|
20
|
-
variationId:B.variationId});var C=B.exposition,D=_objectWithoutProperties(B,_excluded);return(0,_tsRes.Ok)(_objectSpread(_objectSpread({},D),{},{rule:o,featureFlagId:l,featureKey:k,experimentId:q}))}}}catch(a){A.e(a)}finally{A.f()}}if(o.type===_types.RuleType.TARGETED_DELIVERY)break}}}catch(a){n.e(a)}finally{n.f()}return(0,_tsRes.Ok)({featureKey:k,featureFlagId:l,experimentId:null,variationKey:m,variationId:null,rule:null})}},{key:"getExperimentVariation",value:function getExperimentVariation(a,b){var c,d=b.id,e=b.respoolTime,f=b.deviations,g=_hasher.Hasher.obtainExperimentHashDouble({visitorCode:a,campaignId:d,respoolTime:e}),h=!0,i=0,j=0,k=_createForOfIteratorHelper(f);try{for(k.s();!(c=k.n()).done;){var l=c.value;if(i+=l.value,i>=g){h=!1,"origin"!==l.variationId&&(j=+l.variationId);break}}}catch(a){k.e(a)}finally{k.f()}return h?(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.NotAllocated,a)):(0,_tsRes.Ok)(j)}},{key:"assignVariation",value:function assignVariation(a,b){var c=this.getExperimentVariation(a,b);if(!c.ok)return c;var d=this.updateStorageData({visitorCode:a,experimentId:b.id,variationId:c.data});return d.ok?(0,_tsRes.Ok)(c.data):d}},{key:"updateStorageData",value:function updateStorageData(a){var b=a.visitorCode,c=a.experimentId,d=a.variationId,e=this.storage.read();if(!e.ok&&e.error.type===_kameleoonError.KameleoonException.StorageParse)// --- Note ---
|
|
21
|
-
// If there is a parsing error we return error
|
|
22
|
-
// But if there is `LocalStorageRead` error it means that
|
|
23
|
-
// data was read successfully and it's empty, which is not problem
|
|
24
|
-
// cause that might be initial `read`
|
|
25
|
-
return e;var f=e.ok?e.data:{},g={variationId:d,assignmentDate:new Date().toString()};return f[b]?f[b][c]=g:f[b]=_defineProperty({},c,g),this.storage.write(f)}// --- TODO: commented out in case of future logic rework ---
|
|
26
|
-
// --- Mind: `variationId` could cause the `undefined` issue ---
|
|
27
|
-
// --- Reference: https://development.kameleoon.net/sdk/javascript-sdk-packages/-/merge_requests/89 ---
|
|
28
|
-
// private getAssignedRuleVariation(
|
|
29
|
-
// visitorCode: string,
|
|
30
|
-
// rule: RuleItemType,
|
|
31
|
-
// ): Result<GetAssignedRuleVariationResultType, KameleoonError> {
|
|
32
|
-
// const emptyVariation: Omit<VariationByExpositionType, 'exposition'> = {
|
|
33
|
-
// variationId: null,
|
|
34
|
-
// variationKey: '',
|
|
35
|
-
// };
|
|
36
|
-
// const { experimentId, variationByExposition } = rule;
|
|
37
|
-
// const variationsResult = this.getAssignedVariations(visitorCode);
|
|
38
|
-
// // --- Note ---
|
|
39
|
-
// // If there is an error, we just want to skip seeking
|
|
40
|
-
// // for variation in the storage, not throw an error
|
|
41
|
-
// if (!variationsResult.ok) {
|
|
42
|
-
// return Ok(emptyVariation);
|
|
43
|
-
// }
|
|
44
|
-
// const variations = variationsResult.data;
|
|
45
|
-
// if (
|
|
46
|
-
// experimentId &&
|
|
47
|
-
// typeof variations[experimentId].variationId !== undefined
|
|
48
|
-
// ) {
|
|
49
|
-
// const id = variations[experimentId].variationId;
|
|
50
|
-
// const featureFlagVariation = variationByExposition.find(
|
|
51
|
-
// (item) => item.variationId == id,
|
|
52
|
-
// );
|
|
53
|
-
// if (!featureFlagVariation) {
|
|
54
|
-
// // --- Note ---
|
|
55
|
-
// // This error is not described for public methods as
|
|
56
|
-
// // it serves internal purpose of checking whether
|
|
57
|
-
// // the persistent variation has been updated and should be re-allocated
|
|
58
|
-
// return Err(new KameleoonError(KameleoonException.DataInconsistency));
|
|
59
|
-
// }
|
|
60
|
-
// const { exposition, ...restParameters } = featureFlagVariation;
|
|
61
|
-
// return Ok({ ...restParameters });
|
|
62
|
-
// }
|
|
63
|
-
// return Ok(emptyVariation);
|
|
64
|
-
// }
|
|
65
|
-
}]),a}();exports.VariationConfiguration=VariationConfiguration;
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.VariationConfiguration=void 0;var _tsRes=require("ts-res"),_hasher=require("../hasher"),_kameleoonError=require("../kameleoonError"),_utilities=require("../utilities"),_types=require("../clientConfiguration/types"),_excluded=["exposition"];function _typeof(a){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a},_typeof(a)}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 _objectWithoutProperties(a,b){if(null==a)return{};var c,d,e=_objectWithoutPropertiesLoose(a,b);if(Object.getOwnPropertySymbols){var f=Object.getOwnPropertySymbols(a);for(d=0;d<f.length;d++)c=f[d],0<=b.indexOf(c)||Object.prototype.propertyIsEnumerable.call(a,c)&&(e[c]=a[c])}return e}function _objectWithoutPropertiesLoose(a,b){if(null==a)return{};var c,d,e={},f=Object.keys(a);for(d=0;d<f.length;d++)c=f[d],0<=b.indexOf(c)||(e[c]=a[c]);return e}function _createForOfIteratorHelper(a,b){var c="undefined"!=typeof Symbol&&a[Symbol.iterator]||a["@@iterator"];if(!c){if(Array.isArray(a)||(c=_unsupportedIterableToArray(a))||b&&a&&"number"==typeof a.length){c&&(a=c);var d=0,e=function(){};return{s:e,n:function n(){return d>=a.length?{done:!0}:{done:!1,value:a[d++]}},e:function e(a){throw a},f:e}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var f,g=!0,h=!1;return{s:function s(){c=c.call(a)},n:function n(){var a=c.next();return g=a.done,a},e:function e(a){h=!0,f=a},f:function f(){try{g||null==c.return||c.return()}finally{if(h)throw f}}}}function _unsupportedIterableToArray(a,b){if(a){if("string"==typeof a)return _arrayLikeToArray(a,b);var c=Object.prototype.toString.call(a).slice(8,-1);return"Object"===c&&a.constructor&&(c=a.constructor.name),"Map"===c||"Set"===c?Array.from(a):"Arguments"===c||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(c)?_arrayLikeToArray(a,b):void 0}}function _arrayLikeToArray(a,b){(null==b||b>a.length)&&(b=a.length);for(var c=0,d=Array(b);c<b;c++)d[c]=a[c];return d}function _classCallCheck(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function _defineProperties(a,b){for(var c,d=0;d<b.length;d++)c=b[d],c.enumerable=c.enumerable||!1,c.configurable=!0,"value"in c&&(c.writable=!0),Object.defineProperty(a,_toPropertyKey(c.key),c)}function _createClass(a,b,c){return b&&_defineProperties(a.prototype,b),c&&_defineProperties(a,c),Object.defineProperty(a,"prototype",{writable:!1}),a}function _defineProperty(a,b,c){return b=_toPropertyKey(b),b in a?Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!0}):a[b]=c,a}function _toPropertyKey(a){var b=_toPrimitive(a,"string");return"symbol"===_typeof(b)?b:b+""}function _toPrimitive(a,b){if("object"!==_typeof(a)||null===a)return a;var c=a[Symbol.toPrimitive];if(c!==void 0){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)}var VariationConfiguration=function(){function a(b){_classCallCheck(this,a),_defineProperty(this,"storage",void 0),this.storage=b}return _createClass(a,[{key:"getStoredVariations",value:function getStoredVariations(a){var b=this.storage.read();if(!b.ok)return b;var c=b.data[a];return c?(0,_tsRes.Ok)(c):(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.StorageRead,a))}},{key:"getVariation",value:function getVariation(a){var b=a.visitorCode,c=a.featureFlag,d=a.targetingData,e=a.packageInfo,f=a.clientConfiguration,g=a.dataManager,h=a.withAssignment,i=_utilities.Utilities.validateVisitorCode(b);if(!i.ok)return(0,_tsRes.Err)(i.error);var j,k=c.rules,l=c.featureKey,m=c.id,n=c.defaultVariationKey,o=_createForOfIteratorHelper(k);try{for(o.s();!(j=o.n()).done;){var p=j.value,q=p.segment,r=p.experimentId,s=p.id,t=p.exposition,u=p.respoolTime,v=p.variationByExposition,w=_utilities.Utilities.checkTargeting({segment:q,visitorCode:b,experimentId:r,targetingData:d,packageInfo:e,clientConfiguration:f,dataManager:g,variationConfiguration:this});if(!w.ok)return w;if(w.data){var x=_hasher.Hasher.getHashDouble({visitorCode:b,respoolTime:u,id:s+""});if(x<=t){var y,z=0,A=_hasher.Hasher.getHashDouble({visitorCode:b,respoolTime:u,id:r+""}),B=_createForOfIteratorHelper(v);try{for(B.s();!(y=B.n()).done;){var C=y.value;if(z+=C.exposition,A<=z){void 0!==h&&h&&this.updateStoredVariations(b,_defineProperty({},r,C.variationId));var D=C.exposition,E=_objectWithoutProperties(C,_excluded);return(0,_tsRes.Ok)(_objectSpread(_objectSpread({},E),{},{rule:p,featureFlagId:m,featureKey:l,experimentId:r,isTargetedRule:p.type===_types.RuleType.TARGETED_DELIVERY}))}}}catch(a){B.e(a)}finally{B.f()}}if(p.type===_types.RuleType.TARGETED_DELIVERY)return(0,_tsRes.Ok)({featureKey:l,featureFlagId:m,experimentId:null,variationKey:n,variationId:null,rule:null,isTargetedRule:!0})}}}catch(a){o.e(a)}finally{o.f()}return(0,_tsRes.Ok)({featureKey:l,featureFlagId:m,experimentId:null,variationKey:n,variationId:null,rule:null})}},{key:"updateStoredVariations",value:function updateStoredVariations(a,b){var c=this.storage.read();if(!c.ok&&c.error.type===_kameleoonError.KameleoonException.StorageParse)return c;var d=c.ok?c.data:{};return d[a]?d[a]=_objectSpread(_objectSpread({},d[a]),b):d=_objectSpread(_objectSpread({},d),{},_defineProperty({},a,_objectSpread({},b))),this.storage.write(d)}}]),a}();exports.VariationConfiguration=VariationConfiguration;
|
|
66
2
|
//# sourceMappingURL=variationConfiguration.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"variationConfiguration.js","names":["VariationConfiguration","a","experiments","externalStorage","d","_classCallCheck","_defineProperty","visitorCode","experimentId","experiment","find","id","assignVariation","Err","KameleoonError","KameleoonException","ExperimentConfigurationNotFound","storage","_createClass","key","value","getAssignedVariations","result","read","ok","data","Ok","StorageRead","getFeatureFlagVariation","featureFlag","targetingData","packageInfo","campaignConfiguration","g","withAssignment","validateResult","Utilities","validateVisitorCode","error","i","rules","featureKey","featureFlagId","defaultVariationKey","n","_createForOfIteratorHelper","s","done","rule","segment","exposition","respoolTime","variationByExposition","targetingResult","checkTargeting","variationConfiguration","ruleHash","Hasher","obtainFeatureFlagHashDouble","campaignId","x","totalDeviation","variationHash","A","variation","type","RuleType","EXPERIMENTATION","updateStorageData","variationId","restParameters","_objectWithoutProperties","_excluded","_objectSpread","e","f","TARGETED_DELIVERY","variationKey","getExperimentVariation","c","deviations","hashDouble","obtainExperimentHashDouble","isUnallocated","resultVariationId","k","deviation","NotAllocated","variationResult","StorageParse","updatedVariationData","updatedVariation","assignmentDate","Date","toString","write","exports"],"sources":["../../src/variationConfiguration/variationConfiguration.ts"],"sourcesContent":["import { Err, Ok, Result } from 'ts-res';\nimport { ExperimentItemType } from 'src/campaignConfiguration';\nimport { Hasher } from 'src/hasher';\nimport { KameleoonError, KameleoonException } from 'src/kameleoonError';\nimport {\n IExternalStorage,\n VariationDataType,\n ExperimentVariationsType,\n} from 'src/storage';\nimport { Utilities } from 'src/utilities';\nimport { RuleType } from 'src/campaignConfiguration/types';\nimport {\n FeatureFlagVariationType,\n GetFeatureFlagVariationParametersType,\n UpdateStorageParamsType,\n} from './types';\n\ninterface IVariationConfiguration {\n /**\n * @method getAssociatedVariationId - gets the id of a variation assigned to a visitor with `visitorCode` from the storage. If the visitor doesn't have associated variation yet, assigns a new one, stores it and returns it's id.\n */\n getAssociatedVariationId: (\n visitorCode: string,\n experimentId: number,\n ) => Result<number, KameleoonError>;\n /**\n * @method getAssignedVariations - obtains experiments with according variations that are *already assigned* and *stored* in the `variationStorage`. If `getAssociatedVariationId` had not been called before, there will be no variations to get.\n */\n getAssignedVariations(\n visitorCode: string,\n ): Result<ExperimentVariationsType, KameleoonError>;\n /**\n * @method getFeatureFlagVariation - obtains variation for the rule of the feature flag which is both targeted and has a variation, if no such rule was found, returns empty rule with default `variationKey`, given an option `withAssignment` of `true` will also assign a new variation and save it in the storage\n */\n getFeatureFlagVariation: (\n params: GetFeatureFlagVariationParametersType,\n ) => Result<FeatureFlagVariationType, KameleoonError>;\n /**\n * @method getExperimentVariation - obtains variation for the experiment by calculating the variation for the visitor *without assigning* it to a visitor\n */\n getExperimentVariation: (\n visitorCode: string,\n experiment: ExperimentItemType,\n ) => Result<number, KameleoonError>;\n}\n\nexport class VariationConfiguration implements IVariationConfiguration {\n private experiments: ExperimentItemType[];\n private storage: IExternalStorage<VariationDataType>;\n\n constructor(\n experiments: ExperimentItemType[],\n externalStorage: IExternalStorage<VariationDataType>,\n ) {\n this.experiments = experiments;\n this.storage = externalStorage;\n }\n\n public getAssociatedVariationId = (\n visitorCode: string,\n experimentId: number,\n ): Result<number, KameleoonError> => {\n // TODO:\n // --- Variation from storage is not checked anymore\n // --- If nothing changes the commented code should be deleted\n // along with the `Variation` class and according tests/types\n // --- Mind `todo` in `getAssociatedVariationId.spec.ts`\n //\n // let associatedVariation: VariationType | undefined;\n\n // this.storage.read().and((data) => {\n // associatedVariation = data?.[visitorCode]?.[experimentId];\n // });\n\n const experiment = this.experiments.find(\n (experiment) => experiment.id === String(experimentId),\n );\n\n if (!experiment) {\n return Err(\n new KameleoonError(\n KameleoonException.ExperimentConfigurationNotFound,\n experimentId,\n visitorCode,\n ),\n );\n }\n\n // const variation = new Variation(associatedVariation);\n\n // if (variation.isValid(experiment?.respoolTime)) {\n // return Ok(variation.id);\n // }\n\n return this.assignVariation(visitorCode, experiment);\n };\n\n public getAssignedVariations(\n visitorCode: string,\n ): Result<ExperimentVariationsType, KameleoonError> {\n const result = this.storage.read();\n\n if (!result.ok) {\n return result;\n }\n\n const experiments = result.data[visitorCode];\n\n if (!experiments) {\n return Err(\n new KameleoonError(KameleoonException.StorageRead, visitorCode),\n );\n }\n\n return Ok(experiments);\n }\n\n public getFeatureFlagVariation({\n visitorCode,\n featureFlag,\n targetingData,\n packageInfo,\n campaignConfiguration,\n withAssignment = false,\n }: GetFeatureFlagVariationParametersType): Result<\n FeatureFlagVariationType,\n KameleoonError\n > {\n const validateResult = Utilities.validateVisitorCode(visitorCode);\n\n if (!validateResult.ok) {\n return Err(validateResult.error);\n }\n\n const {\n rules,\n featureKey,\n id: featureFlagId,\n defaultVariationKey,\n } = featureFlag;\n\n for (const rule of rules) {\n const {\n segment,\n experimentId,\n id,\n exposition,\n respoolTime,\n variationByExposition,\n } = rule;\n\n // --- Check targeting ---\n const targetingResult = Utilities.checkTargeting({\n segment,\n visitorCode,\n experimentId,\n targetingData,\n packageInfo,\n campaignConfiguration,\n variationConfiguration: this,\n });\n\n if (!targetingResult.ok) {\n return targetingResult;\n }\n\n if (!targetingResult.data) {\n continue;\n }\n\n // --- Note ---\n // Calculate new variation (and assign it if `withAssignment` is `true`)\n // First the the exposed rule is calculated and then the variation inside of it\n const ruleHash = Hasher.obtainFeatureFlagHashDouble({\n visitorCode,\n respoolTime,\n campaignId: String(id),\n });\n\n if (ruleHash <= exposition) {\n let totalDeviation = 0;\n\n const variationHash = Hasher.obtainFeatureFlagHashDouble({\n visitorCode,\n respoolTime,\n campaignId: String(experimentId),\n });\n\n for (const variation of variationByExposition) {\n totalDeviation += variation.exposition;\n\n if (variationHash <= totalDeviation) {\n // --- Note ---\n // For the `RuleType.EXPERIMENTATION` variation assignment must happen without\n // calculating experiment deviation\n if (rule.type === RuleType.EXPERIMENTATION && withAssignment) {\n this.updateStorageData({\n visitorCode,\n experimentId: String(experimentId),\n // --- Note ---\n // For `RuleType.EXPERIMENTATION` `variationId` can not be null\n variationId: variation.variationId as number,\n });\n }\n\n const { exposition, ...restParameters } = variation;\n\n return Ok({\n ...restParameters,\n rule,\n featureFlagId,\n featureKey,\n experimentId,\n });\n }\n }\n }\n\n if (rule.type === RuleType.TARGETED_DELIVERY) {\n break;\n }\n }\n\n return Ok({\n featureKey,\n featureFlagId,\n experimentId: null,\n variationKey: defaultVariationKey,\n variationId: null,\n rule: null,\n });\n }\n\n public getExperimentVariation(\n visitorCode: string,\n experiment: ExperimentItemType,\n ): Result<number, KameleoonError> {\n const { id, respoolTime, deviations } = experiment;\n\n const hashDouble = Hasher.obtainExperimentHashDouble({\n visitorCode,\n campaignId: id,\n respoolTime,\n });\n\n let isUnallocated = true;\n let totalDeviation = 0;\n let resultVariationId = 0;\n\n for (const deviation of deviations) {\n totalDeviation += deviation.value;\n\n if (totalDeviation >= hashDouble) {\n // --- Note ---\n // If sum of all variations is less than 1 (100%), then there is a chance\n // user will end up outside of any variation\n isUnallocated = false;\n // --- Note ---\n // 'origin' is the default `variationId`, it must return id of 0\n if (deviation.variationId !== 'origin') {\n resultVariationId = Number(deviation.variationId);\n }\n\n break;\n }\n }\n\n if (isUnallocated) {\n return Err(\n new KameleoonError(KameleoonException.NotAllocated, visitorCode),\n );\n }\n\n return Ok(resultVariationId);\n }\n\n private assignVariation(\n visitorCode: string,\n experiment: ExperimentItemType,\n ): Result<number, KameleoonError> {\n const variationResult = this.getExperimentVariation(\n visitorCode,\n experiment,\n );\n\n if (!variationResult.ok) {\n return variationResult;\n }\n\n const result = this.updateStorageData({\n visitorCode,\n experimentId: experiment.id,\n variationId: variationResult.data,\n });\n\n if (!result.ok) {\n return result;\n }\n\n return Ok(variationResult.data);\n }\n\n private updateStorageData({\n visitorCode,\n experimentId,\n variationId,\n }: UpdateStorageParamsType): Result<void, KameleoonError> {\n const result = this.storage.read();\n\n if (!result.ok) {\n // --- Note ---\n // If there is a parsing error we return error\n // But if there is `LocalStorageRead` error it means that\n // data was read successfully and it's empty, which is not problem\n // cause that might be initial `read`\n if (result.error.type === KameleoonException.StorageParse) {\n return result;\n }\n }\n\n const updatedVariationData: VariationDataType = result.ok\n ? result.data\n : {};\n\n const updatedVariation = {\n variationId,\n assignmentDate: new Date().toString(),\n };\n\n if (updatedVariationData[visitorCode]) {\n updatedVariationData[visitorCode][experimentId] = updatedVariation;\n } else {\n updatedVariationData[visitorCode] = {\n [experimentId]: updatedVariation,\n };\n }\n\n return this.storage.write(updatedVariationData);\n }\n\n // --- TODO: commented out in case of future logic rework ---\n // --- Mind: `variationId` could cause the `undefined` issue ---\n // --- Reference: https://development.kameleoon.net/sdk/javascript-sdk-packages/-/merge_requests/89 ---\n // private getAssignedRuleVariation(\n // visitorCode: string,\n // rule: RuleItemType,\n // ): Result<GetAssignedRuleVariationResultType, KameleoonError> {\n // const emptyVariation: Omit<VariationByExpositionType, 'exposition'> = {\n // variationId: null,\n // variationKey: '',\n // };\n // const { experimentId, variationByExposition } = rule;\n\n // const variationsResult = this.getAssignedVariations(visitorCode);\n\n // // --- Note ---\n // // If there is an error, we just want to skip seeking\n // // for variation in the storage, not throw an error\n // if (!variationsResult.ok) {\n // return Ok(emptyVariation);\n // }\n\n // const variations = variationsResult.data;\n\n // if (\n // experimentId &&\n // typeof variations[experimentId].variationId !== undefined\n // ) {\n // const id = variations[experimentId].variationId;\n // const featureFlagVariation = variationByExposition.find(\n // (item) => item.variationId == id,\n // );\n\n // if (!featureFlagVariation) {\n // // --- Note ---\n // // This error is not described for public methods as\n // // it serves internal purpose of checking whether\n // // the persistent variation has been updated and should be re-allocated\n // return Err(new KameleoonError(KameleoonException.DataInconsistency));\n // }\n\n // const { exposition, ...restParameters } = featureFlagVariation;\n\n // return Ok({ ...restParameters });\n // }\n\n // return Ok(emptyVariation);\n // }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"variationConfiguration.js","names":["VariationConfiguration","a","externalStorage","_classCallCheck","_defineProperty","storage","_createClass","key","value","getStoredVariations","visitorCode","result","read","ok","featureFlagVariations","data","Ok","Err","KameleoonError","KameleoonException","StorageRead","getVariation","featureFlag","targetingData","packageInfo","clientConfiguration","dataManager","h","withAssignment","validateResult","Utilities","validateVisitorCode","error","j","rules","featureKey","featureFlagId","id","defaultVariationKey","o","_createForOfIteratorHelper","s","n","done","rule","segment","experimentId","exposition","respoolTime","variationByExposition","targetingResult","checkTargeting","variationConfiguration","ruleHash","Hasher","getHashDouble","y","totalDeviation","variationHash","B","variation","updateStoredVariations","variationId","restParameters","_objectWithoutProperties","_excluded","_objectSpread","isTargetedRule","type","RuleType","TARGETED_DELIVERY","e","f","variationKey","variationData","StorageParse","updatedVariationData","write","exports"],"sources":["../../src/variationConfiguration/variationConfiguration.ts"],"sourcesContent":["import { Err, Ok, Result } from 'ts-res';\nimport { Hasher } from 'src/hasher';\nimport { KameleoonError, KameleoonException } from 'src/kameleoonError';\nimport { IExternalStorage, VariationDataType } from 'src/storage';\nimport { Utilities } from 'src/utilities';\nimport { RuleType } from 'src/clientConfiguration/types';\nimport { FeatureFlagVariationType, GetVariationParametersType } from './types';\nimport { FeatureFlagVariationsType } from 'src/storage/types';\n\ninterface IVariationConfiguration {\n /**\n * @method getStoredVariations - obtains campaigns with according variations that are *already assigned* and *stored* in the `variationStorage`.\n */\n getStoredVariations(\n visitorCode: string,\n ): Result<FeatureFlagVariationsType, KameleoonError>;\n /**\n * @method updateStoredVariations - updates stored variations for the visitor\n */\n updateStoredVariations: (\n visitorCode: string,\n variationData: FeatureFlagVariationsType,\n ) => void;\n /**\n * @method getVariation - obtains variation for the rule of the feature flag which is both targeted and has a variation, if no such rule was found, returns empty rule with default `variationKey`, given an option `withAssignment` of `true` will also assign a new variation and save it in the storage\n */\n getVariation: (\n params: GetVariationParametersType,\n ) => Result<FeatureFlagVariationType, KameleoonError>;\n}\n\nexport class VariationConfiguration implements IVariationConfiguration {\n private storage: IExternalStorage<VariationDataType>;\n\n constructor(externalStorage: IExternalStorage<VariationDataType>) {\n this.storage = externalStorage;\n }\n\n public getStoredVariations(\n visitorCode: string,\n ): Result<FeatureFlagVariationsType, KameleoonError> {\n const result = this.storage.read();\n\n if (!result.ok) {\n return result;\n }\n\n const featureFlagVariations = result.data[visitorCode];\n\n if (!featureFlagVariations) {\n return Err(\n new KameleoonError(KameleoonException.StorageRead, visitorCode),\n );\n }\n\n return Ok(featureFlagVariations);\n }\n\n public getVariation({\n visitorCode,\n featureFlag,\n targetingData,\n packageInfo,\n clientConfiguration,\n dataManager,\n withAssignment = false,\n }: GetVariationParametersType): Result<\n FeatureFlagVariationType,\n KameleoonError\n > {\n const validateResult = Utilities.validateVisitorCode(visitorCode);\n\n if (!validateResult.ok) {\n return Err(validateResult.error);\n }\n\n const {\n rules,\n featureKey,\n id: featureFlagId,\n defaultVariationKey,\n } = featureFlag;\n\n for (const rule of rules) {\n const {\n segment,\n experimentId,\n id,\n exposition,\n respoolTime,\n variationByExposition,\n } = rule;\n\n // --- Check targeting ---\n const targetingResult = Utilities.checkTargeting({\n segment,\n visitorCode,\n experimentId,\n targetingData,\n packageInfo,\n clientConfiguration,\n dataManager,\n variationConfiguration: this,\n });\n\n if (!targetingResult.ok) {\n return targetingResult;\n }\n\n if (!targetingResult.data) {\n continue;\n }\n\n // --- Note ---\n // Calculate new variation (and assign it if `withAssignment` is `true`)\n // First the the exposed rule is calculated and then the variation inside of it\n const ruleHash = Hasher.getHashDouble({\n visitorCode,\n respoolTime,\n id: String(id),\n });\n\n if (ruleHash <= exposition) {\n let totalDeviation = 0;\n\n const variationHash = Hasher.getHashDouble({\n visitorCode,\n respoolTime,\n id: String(experimentId),\n });\n\n for (const variation of variationByExposition) {\n totalDeviation += variation.exposition;\n\n if (variationHash <= totalDeviation) {\n if (withAssignment) {\n this.updateStoredVariations(visitorCode, {\n [experimentId]: variation.variationId,\n });\n }\n\n const { exposition, ...restParameters } = variation;\n\n return Ok({\n ...restParameters,\n rule,\n featureFlagId,\n featureKey,\n experimentId,\n isTargetedRule: rule.type === RuleType.TARGETED_DELIVERY,\n });\n }\n }\n }\n\n if (rule.type === RuleType.TARGETED_DELIVERY) {\n return Ok({\n featureKey,\n featureFlagId,\n experimentId: null,\n variationKey: defaultVariationKey,\n variationId: null,\n rule: null,\n isTargetedRule: true,\n });\n }\n }\n\n return Ok({\n featureKey,\n featureFlagId,\n experimentId: null,\n variationKey: defaultVariationKey,\n variationId: null,\n rule: null,\n });\n }\n\n public updateStoredVariations(\n visitorCode: string,\n variationData: FeatureFlagVariationsType,\n ): Result<void, KameleoonError> {\n const result = this.storage.read();\n\n if (!result.ok) {\n // --- Note ---\n // If there is a parsing error we return error\n // But if there is `LocalStorageRead` error it means that\n // data was read successfully and it's empty, which is not problem\n // cause that might be initial `read`\n if (result.error.type === KameleoonException.StorageParse) {\n return result;\n }\n }\n\n let updatedVariationData: VariationDataType = result.ok ? result.data : {};\n\n if (updatedVariationData[visitorCode]) {\n updatedVariationData[visitorCode] = {\n ...updatedVariationData[visitorCode],\n ...variationData,\n };\n } else {\n updatedVariationData = {\n ...updatedVariationData,\n [visitorCode]: {\n ...variationData,\n },\n };\n }\n\n return this.storage.write(updatedVariationData);\n }\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
import { Result } from 'ts-res';
|
|
2
|
-
import { KameleoonError } from '../kameleoonError/kameleoonError';
|
|
3
|
-
import { CustomData, KameleoonDataType } from '../kameleoonData';
|
|
4
|
-
import { SegmentType, TargetingDataType, TargetingTree } from '../targeting';
|
|
5
|
-
import { CampaignConfigurationParametersType, ConfigurationType, ExperimentItemType, FeatureFlagType, UnsentTargetingDataType } from './types';
|
|
6
|
-
interface ICampaignConfiguration {
|
|
7
|
-
initialize: (useCache?: boolean) => Promise<Result<void, KameleoonError>>;
|
|
8
|
-
addTargetingData: (visitorCode: string, ...data: KameleoonDataType[]) => Result<void, KameleoonError>;
|
|
9
|
-
getUnsentData: (visitorCode: string) => UnsentTargetingDataType[string] | undefined;
|
|
10
|
-
clearUnsentData: (visitorCode: string) => void;
|
|
11
|
-
isPersistentCustomData: (dataItem: KameleoonDataType) => boolean;
|
|
12
|
-
onConfigurationUpdate: (callback: () => void) => void;
|
|
13
|
-
readonly experiments: ExperimentItemType[];
|
|
14
|
-
readonly storedTargetingData: TargetingDataType;
|
|
15
|
-
readonly featureFlags: FeatureFlagType[];
|
|
16
|
-
readonly configuration: ConfigurationType;
|
|
17
|
-
readonly unsentDataVisitors: string[];
|
|
18
|
-
}
|
|
19
|
-
export declare class CampaignConfiguration implements ICampaignConfiguration {
|
|
20
|
-
private configurationUpdateCallback?;
|
|
21
|
-
private updateConfigurationIntervalId;
|
|
22
|
-
private updateType;
|
|
23
|
-
private targetingDataIntervalId;
|
|
24
|
-
private unsentTargetingData;
|
|
25
|
-
private targetingData;
|
|
26
|
-
private targetingTrees;
|
|
27
|
-
private configurationData;
|
|
28
|
-
private settings;
|
|
29
|
-
private lastUpdate;
|
|
30
|
-
private storage;
|
|
31
|
-
private offlineTrackingStorage;
|
|
32
|
-
private requester;
|
|
33
|
-
private eventSource?;
|
|
34
|
-
private externalEventSource;
|
|
35
|
-
private externalClientConfiguration?;
|
|
36
|
-
private targetingDataLifetime;
|
|
37
|
-
private localCustomDataIndexes;
|
|
38
|
-
private persistentCustomDataIndexes;
|
|
39
|
-
constructor({ settings, storage, requester, externalClientConfiguration, targetingCleanupInterval, offlineTrackingStorage, externalEventSource, }: CampaignConfigurationParametersType);
|
|
40
|
-
initialize(useCache?: boolean): Promise<Result<void, KameleoonError>>;
|
|
41
|
-
private cleanupHandlers;
|
|
42
|
-
private handleExternalUpdates;
|
|
43
|
-
private handleRealTimeUpdates;
|
|
44
|
-
private handlePollingUpdates;
|
|
45
|
-
addTargetingData(visitorCode: string, ...data: KameleoonDataType[]): Result<void, KameleoonError>;
|
|
46
|
-
getUnsentData(visitorCode: string): UnsentTargetingDataType[string] | undefined;
|
|
47
|
-
clearUnsentData(visitorCode: string): void;
|
|
48
|
-
getTargetingTree(segment: SegmentType): TargetingTree;
|
|
49
|
-
onConfigurationUpdate(callback: () => void): void;
|
|
50
|
-
isPersistentCustomData(dataItem: KameleoonDataType): dataItem is CustomData;
|
|
51
|
-
get unsentDataVisitors(): string[];
|
|
52
|
-
get storedTargetingData(): TargetingDataType;
|
|
53
|
-
get experiments(): ExperimentItemType[];
|
|
54
|
-
get featureFlags(): FeatureFlagType[];
|
|
55
|
-
get configuration(): ConfigurationType;
|
|
56
|
-
private checkShouldUpdate;
|
|
57
|
-
private cleanupOutdatedTargetingData;
|
|
58
|
-
private readStorageData;
|
|
59
|
-
private clearTargetingTrees;
|
|
60
|
-
/**
|
|
61
|
-
* Updates client configuration
|
|
62
|
-
*
|
|
63
|
-
* @param useCache - if true, will not update configuration if it is already present (for _offline_ mode)
|
|
64
|
-
* @param timeStamp - timestamp for real-time configuration update
|
|
65
|
-
*
|
|
66
|
-
* @returns `true` if current update type should be toggled (SSE/Polling)
|
|
67
|
-
*/
|
|
68
|
-
private updateClientConfiguration;
|
|
69
|
-
private updateStorageData;
|
|
70
|
-
}
|
|
71
|
-
export {};
|