@kameleoon/javascript-sdk-core 4.0.0 → 4.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/CHANGELOG.md +22 -0
- package/dist/clientConfiguration/clientConfiguration.js +1 -1
- package/dist/clientConfiguration/clientConfiguration.js.map +1 -1
- package/dist/clientConfiguration/constants.js +1 -1
- package/dist/clientConfiguration/constants.js.map +1 -1
- package/dist/clientConfiguration/types.d.ts +1 -1
- package/dist/clientConfiguration/types.js.map +1 -1
- package/dist/constants.js +1 -1
- package/dist/constants.js.map +1 -1
- package/dist/kameleoonClient.d.ts +2 -1
- package/dist/kameleoonClient.js +1 -1
- package/dist/kameleoonClient.js.map +1 -1
- package/dist/kameleoonClientInterface.d.ts +2 -2
- package/dist/kameleoonClientInterface.js.map +1 -1
- package/dist/kameleoonData/applicationVersion.d.ts +0 -9
- package/dist/kameleoonData/applicationVersion.js.map +1 -1
- package/dist/kameleoonData/browser.d.ts +3 -12
- package/dist/kameleoonData/browser.js +1 -1
- package/dist/kameleoonData/browser.js.map +1 -1
- package/dist/kameleoonData/conversion.d.ts +11 -13
- package/dist/kameleoonData/conversion.js +1 -1
- package/dist/kameleoonData/conversion.js.map +1 -1
- package/dist/kameleoonData/cookie.d.ts +0 -9
- package/dist/kameleoonData/cookie.js.map +1 -1
- package/dist/kameleoonData/customData.d.ts +3 -13
- package/dist/kameleoonData/customData.js +1 -1
- package/dist/kameleoonData/customData.js.map +1 -1
- package/dist/kameleoonData/dataManager.d.ts +11 -5
- package/dist/kameleoonData/dataManager.js +1 -1
- package/dist/kameleoonData/dataManager.js.map +1 -1
- package/dist/kameleoonData/dataProcessor.d.ts +13 -6
- package/dist/kameleoonData/dataProcessor.js +1 -1
- package/dist/kameleoonData/dataProcessor.js.map +1 -1
- package/dist/kameleoonData/device.d.ts +3 -12
- package/dist/kameleoonData/device.js +1 -1
- package/dist/kameleoonData/device.js.map +1 -1
- package/dist/kameleoonData/geolocation.d.ts +3 -12
- package/dist/kameleoonData/geolocation.js +1 -1
- package/dist/kameleoonData/geolocation.js.map +1 -1
- package/dist/kameleoonData/index.d.ts +1 -0
- package/dist/kameleoonData/index.js +1 -1
- package/dist/kameleoonData/index.js.map +1 -1
- package/dist/kameleoonData/kameleoonConversionScore.d.ts +15 -0
- package/dist/kameleoonData/kameleoonConversionScore.js +2 -0
- package/dist/kameleoonData/kameleoonConversionScore.js.map +1 -0
- package/dist/kameleoonData/operatingSystem.d.ts +3 -12
- package/dist/kameleoonData/operatingSystem.js +1 -1
- package/dist/kameleoonData/operatingSystem.js.map +1 -1
- package/dist/kameleoonData/pageView.d.ts +4 -13
- package/dist/kameleoonData/pageView.js +1 -1
- package/dist/kameleoonData/pageView.js.map +1 -1
- package/dist/kameleoonData/types.d.ts +54 -11
- package/dist/kameleoonData/types.js +1 -1
- package/dist/kameleoonData/types.js.map +1 -1
- package/dist/kameleoonData/userAgent.d.ts +0 -9
- package/dist/kameleoonData/userAgent.js.map +1 -1
- package/dist/kameleoonData/visitProcessor.d.ts +34 -0
- package/dist/kameleoonData/visitProcessor.js +2 -0
- package/dist/kameleoonData/visitProcessor.js.map +1 -0
- package/dist/kameleoonData/visitsData.d.ts +7 -21
- package/dist/kameleoonData/visitsData.js +1 -1
- package/dist/kameleoonData/visitsData.js.map +1 -1
- package/dist/requester/constants.d.ts +1 -3
- package/dist/requester/constants.js +1 -1
- package/dist/requester/constants.js.map +1 -1
- package/dist/requester/index.d.ts +1 -1
- package/dist/requester/index.js +1 -1
- package/dist/requester/index.js.map +1 -1
- package/dist/requester/requester.d.ts +2 -6
- package/dist/requester/requester.js +1 -1
- package/dist/requester/requester.js.map +1 -1
- package/dist/requester/types.d.ts +24 -2
- package/dist/requester/types.js +1 -1
- package/dist/requester/types.js.map +1 -1
- package/dist/requester/urlProvider.d.ts +17 -0
- package/dist/requester/urlProvider.js +2 -0
- package/dist/requester/urlProvider.js.map +1 -0
- package/dist/storage/storage.js +1 -1
- package/dist/targeting/conditions/browser.js +1 -1
- package/dist/targeting/conditions/browser.js.map +1 -1
- package/dist/targeting/conditions/conditionFactory.js +1 -1
- package/dist/targeting/conditions/conditionFactory.js.map +1 -1
- package/dist/targeting/conditions/conversionLikelihood.d.ts +12 -0
- package/dist/targeting/conditions/conversionLikelihood.js +2 -0
- package/dist/targeting/conditions/conversionLikelihood.js.map +1 -0
- package/dist/targeting/conditions/firstVisit.js +1 -1
- package/dist/targeting/conditions/firstVisit.js.map +1 -1
- package/dist/targeting/conditions/geolocation.js +1 -1
- package/dist/targeting/conditions/geolocation.js.map +1 -1
- package/dist/targeting/conditions/index.d.ts +1 -0
- package/dist/targeting/conditions/index.js +1 -1
- package/dist/targeting/conditions/index.js.map +1 -1
- package/dist/targeting/conditions/lastVisit.js +1 -1
- package/dist/targeting/conditions/lastVisit.js.map +1 -1
- package/dist/targeting/conditions/newVisitor.js +1 -1
- package/dist/targeting/conditions/newVisitor.js.map +1 -1
- package/dist/targeting/conditions/sameDayVisits.js +1 -1
- package/dist/targeting/conditions/sameDayVisits.js.map +1 -1
- package/dist/targeting/conditions/targetFeatureFlag.js +1 -1
- package/dist/targeting/conditions/types.d.ts +3 -0
- package/dist/targeting/conditions/types.js.map +1 -1
- package/dist/targeting/conditions/visits.js +1 -1
- package/dist/targeting/conditions/visits.js.map +1 -1
- package/dist/targeting/index.d.ts +2 -2
- package/dist/targeting/index.js +1 -1
- package/dist/targeting/index.js.map +1 -1
- package/dist/targeting/types.d.ts +4 -0
- package/dist/targeting/types.js.map +1 -1
- package/dist/types.d.ts +2 -0
- package/dist/types.js.map +1 -1
- package/dist/utilities/types.d.ts +6 -1
- package/dist/utilities/types.js.map +1 -1
- package/dist/utilities/utilities.d.ts +1 -1
- package/dist/utilities/utilities.js +1 -1
- package/dist/utilities/utilities.js.map +1 -1
- package/dist/variationConfiguration/types.d.ts +1 -1
- package/dist/variationConfiguration/types.js.map +1 -1
- package/package.json +6 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utilities.js","names":["Utilities","checkTargeting","a","segment","visitorCode","targetingData","experimentId","variationConfiguration","clientConfiguration","packageInfo","dataManager","conditionsData","firstLevel","length","Ok","Err","KameleoonError","KameleoonException","Initialization","variations","assignedVariationsResult","getStoredVariations","ok","data","targetingTree","getTree","trees","segments","ruleMap","hasTargetingType","TargetingType","SEGMENT","TARGET_FEATURE_FLAG","result","evaluate","variationData","sdkInfo","validateVisitorCode","VisitorCodeEmpty","VISITOR_CODE_MAX_LENGTH","VisitorCodeMaxLength","getDataUrl","updateUrl","url","shouldSendConversionData","type","KameleoonData","Conversion","isConsentProvided","nonce","UrlParameter","Nonce","getNonce","resultUrl","push","unsentData","getUnsentData","size","item","values","Array","isArray","forEach","arrayItem","join","getVariationDataUrlAndSentExperimentIds","variationDataUrlList","sentExperimentIds","Set","isTargetedRule","UrlEventType","Experiment","Id","VariationId","variationId","add","variationDataUrl","experimentIds","from","trackFeatureExperiment","featureFlagVariation","requester","isOfflineModeOn","offlineTrackingStorage","rule","userAgent","getUserAgent","dataUrl","parameters","isUnallocated","trackExperiment","clearUnsentData","clearUnsentDataByKey","markUnsentDataAsSent","addItemToOfflineTracking","storage","isExperiment","convertTimeUnit","time","timeUnit","timeMap","TimeUnit","Minute","Milliseconds","Hour","Day","Week","Month","parseFeatureVariable","variable","key","value","VariableType","BOOLEAN","STRING","NUMBER","numberValue","Number","isNaN","NumberParse","JSON","jsonValue","parse","err","JSONParse","exhaustCheck","parseVisitorData","filters","currentVisit","previousVisits","browser","browserFilter","customData","customDataFilter","operatingSystem","operatingSystemFilter","conversions","conversionsFilter","device","deviceFilter","geolocation","geolocationFilter","experiments","experimentsFilter","pageViews","pageViewFilter","visits","resultData","PageView","_listFromVisits","Browser","_fromVisits","experimentData","i","visit","experimentEvents","experimentEvent","id","isSent","updateStoredVariations","Device","GeolocationData","CustomData","OperatingSystem","visitsData","collectedVisitsData","VisitsData","_fromRemoteVisits","visitorData","parseRegExp","_","expression","flags","split","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","lifetime","getTrackingCode","trackingCache","resultString","updatedCacheData","Object","entries","concat","trackData","isMappingIdentifier","sendOfflineTracking","body","cleanup","onSuccess","hexLength","HEX_CHARACTERS","randomNumber","Math","floor","random","substring","compareSemVer","version","compareVersion","operator","versionResult","validateVersion","compareVersionResult","error","major","minor","patch","compareMajor","compareMinor","comparePatch","isMajorEqual","isMinorEqual","isPatchEqual","VersionMatchType","EQUAL","GREATER","LOWER","generateRandomString","characters","randomCharacterArray","readResult","read","requestParameters","successfulTimestamps","timestamp","params","_objectWithoutProperties","_excluded","deleteFromOfflineTracking","timestamps","newItem","getTime","newRequestParameters","writeResult","write","newParameters","filter","versionParts","map","x","parseInt","some","SemanticVersionParse","slice","exports"],"sources":["../../src/utilities/utilities.ts"],"sourcesContent":["import { Err, Ok, Result } from 'ts-res';\nimport {\n KameleoonError,\n KameleoonException,\n exhaustCheck,\n} from 'src/kameleoonError';\nimport {\n FeatureVariableResultType,\n Milliseconds,\n TrackingCacheItemType,\n VariableType,\n} from 'src/types';\nimport { FeatureVariableType, JSONType } from 'src/clientConfiguration';\nimport {\n 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 UrlEventType,\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 GetVariationDataUrlParametersType,\n ParseVisitorDataResultType,\n} from './types';\n\nexport class Utilities {\n static checkTargeting({\n segment,\n visitorCode,\n targetingData,\n experimentId,\n variationConfiguration,\n clientConfiguration,\n packageInfo,\n dataManager,\n }: CheckTargetingParametersType): Result<boolean, KameleoonError> {\n if (!segment || !segment.conditionsData.firstLevel.length) {\n return Ok(true);\n }\n\n if (!variationConfiguration) {\n return Err(new KameleoonError(KameleoonException.Initialization));\n }\n\n let variations: FeatureFlagVariationsType = {};\n\n const assignedVariationsResult =\n variationConfiguration.getStoredVariations(visitorCode);\n\n if (assignedVariationsResult.ok) {\n variations = assignedVariationsResult.data;\n }\n\n const targetingTree = dataManager.getTree(segment);\n\n let trees = undefined;\n let segments = undefined;\n let ruleMap = undefined;\n\n // --- Note ---\n // Only getting trees and segments targeting type\n if (targetingTree.hasTargetingType(TargetingType.SEGMENT)) {\n trees = dataManager.trees;\n segments = clientConfiguration.segments;\n }\n\n // --- Note ---\n // Only constructing rule map for targeting type\n if (targetingTree.hasTargetingType(TargetingType.TARGET_FEATURE_FLAG)) {\n ruleMap = clientConfiguration.ruleMap;\n }\n\n const result = targetingTree.evaluate({\n variationData: variations,\n sdkInfo: packageInfo,\n segments,\n ruleMap,\n trees,\n targetingData,\n experimentId,\n visitorCode,\n });\n\n return result;\n }\n\n static validateVisitorCode(\n visitorCode: string,\n ): Result<void, KameleoonError> {\n if (visitorCode.length === 0) {\n return Err(new KameleoonError(KameleoonException.VisitorCodeEmpty));\n }\n\n if (visitorCode.length > VISITOR_CODE_MAX_LENGTH) {\n return Err(new KameleoonError(KameleoonException.VisitorCodeMaxLength));\n }\n\n return Ok();\n }\n\n static getDataUrl({\n visitorCode,\n dataManager,\n isConsentProvided,\n }: GetDataUrlParametersType): string {\n const unsentData = dataManager.getUnsentData(visitorCode);\n const resultUrl: string[] = [];\n\n if (!unsentData || !unsentData.size) {\n return '';\n }\n\n function updateUrl(data: KameleoonDataType): void {\n if (!data.url) {\n return;\n }\n\n const shouldSendAllData = isConsentProvided;\n const shouldSendConversionData =\n data.data.type === KameleoonData.Conversion;\n\n if (shouldSendAllData || shouldSendConversionData) {\n const nonce = !shouldSendConversionData\n ? UrlParameter.Nonce + Utilities.getNonce()\n : '';\n resultUrl.push(data.url + nonce + '\\n');\n }\n }\n\n for (const item of unsentData.values()) {\n if (Array.isArray(item)) {\n item.forEach((arrayItem) => updateUrl(arrayItem));\n } else {\n updateUrl(item);\n }\n }\n\n return resultUrl.join('');\n }\n\n static getVariationDataUrlAndSentExperimentIds({\n visitorCode,\n isConsentProvided,\n variationConfiguration,\n }: GetVariationDataUrlParametersType): [string, string[]] {\n const variationDataUrlList: string[] = [];\n const sentExperimentIds = new Set<string>();\n const unsentData = variationConfiguration.getUnsentData(visitorCode);\n\n if (unsentData.ok && unsentData.data.length) {\n unsentData.data.forEach((item) => {\n if (item.isTargetedRule || isConsentProvided) {\n variationDataUrlList.push(\n UrlEventType.Experiment +\n UrlParameter.Id +\n item.experimentId +\n UrlParameter.VariationId +\n item.variationId +\n UrlParameter.Nonce +\n Utilities.getNonce() +\n '\\n',\n );\n\n sentExperimentIds.add(String(item.experimentId));\n }\n });\n }\n\n const variationDataUrl = variationDataUrlList.join('');\n const experimentIds = Array.from(sentExperimentIds);\n\n return [variationDataUrl, experimentIds];\n }\n\n static async trackFeatureExperiment({\n featureFlagVariation,\n dataManager,\n visitorCode,\n requester,\n isOfflineModeOn,\n isConsentProvided,\n offlineTrackingStorage,\n variationConfiguration,\n }: TrackRuleParametersType): Promise<void> {\n const { variationId, rule } = featureFlagVariation;\n\n const userAgent = this.getUserAgent(visitorCode, dataManager);\n\n const dataUrl = this.getDataUrl({\n visitorCode,\n dataManager,\n isConsentProvided,\n });\n\n const resultVariationId = variationId || 0;\n\n // --- Note ---\n // Experiment id is not needed for unallocated visitors\n // So we just use 0 as a fallback\n const experimentId = rule ? rule.experimentId : 0;\n\n const [variationDataUrl, sentExperimentIds] =\n this.getVariationDataUrlAndSentExperimentIds({\n visitorCode,\n isConsentProvided,\n variationConfiguration,\n });\n\n if (!isConsentProvided && !dataUrl && !rule) {\n return;\n }\n\n const isUnallocated = variationId === null;\n\n const parameters = {\n visitorCode,\n dataUrl,\n variationDataUrl,\n experimentId,\n variationId: resultVariationId,\n userAgent,\n isUnallocated,\n };\n\n const result = await requester.trackExperiment(parameters);\n\n if (result.ok) {\n if (!isConsentProvided) {\n dataManager.clearUnsentDataByKey(visitorCode, KameleoonData.Conversion);\n } else {\n dataManager.clearUnsentData(visitorCode);\n }\n\n sentExperimentIds.forEach((experimentId) => {\n variationConfiguration.markUnsentDataAsSent(visitorCode, experimentId);\n });\n }\n\n if (!result.ok && isOfflineModeOn) {\n this.addItemToOfflineTracking({\n item: parameters,\n storage: offlineTrackingStorage,\n isExperiment: true,\n });\n }\n }\n\n static convertTimeUnit(time: number, timeUnit: TimeUnit): number {\n const timeMap = {\n [TimeUnit.Minute]: Milliseconds.Minute,\n [TimeUnit.Hour]: Milliseconds.Hour,\n [TimeUnit.Day]: Milliseconds.Day,\n [TimeUnit.Week]: Milliseconds.Week,\n [TimeUnit.Month]: Milliseconds.Month,\n };\n\n return time / timeMap[timeUnit];\n }\n\n static parseFeatureVariable(\n variable: FeatureVariableType,\n ): Result<FeatureVariableResultType, KameleoonError> {\n const { key, type, value } = variable;\n\n switch (type) {\n case VariableType.BOOLEAN:\n return Ok({\n key,\n type,\n value: Boolean(value),\n });\n case VariableType.STRING:\n return Ok({\n key,\n type,\n value: String(value),\n });\n case VariableType.NUMBER:\n const numberValue = Number(value);\n\n if (Number.isNaN(numberValue)) {\n return Err(\n new KameleoonError(KameleoonException.NumberParse, String(value)),\n );\n }\n\n return Ok({\n key,\n type,\n value: numberValue,\n });\n case VariableType.JSON:\n try {\n const jsonValue: JSONType = JSON.parse(String(variable.value));\n\n return Ok({\n key,\n type,\n value: jsonValue,\n });\n } catch (err) {\n return Err(new KameleoonError(KameleoonException.JSONParse, err));\n }\n default:\n exhaustCheck(type);\n }\n }\n\n static parseVisitorData({\n data,\n filters,\n visitorCode,\n variationConfiguration,\n }: ParseVisitorDataParametersType): ParseVisitorDataResultType {\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 { visitorData: [] };\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] = {\n variationId,\n isTargetedRule: false,\n isSent: false,\n };\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 // --- Visits ---\n let visitsData: VisitsData | undefined;\n\n const collectedVisitsData = VisitsData._fromRemoteVisits(\n visits,\n Boolean(currentVisit),\n );\n\n if (collectedVisitsData) {\n visitsData = collectedVisitsData;\n }\n\n return { visitorData: resultData, visitsData };\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 isMappingIdentifier,\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: TrackDataParamsType = {\n visitorCode,\n body: dataUrl,\n userAgent,\n isMappingIdentifier,\n };\n\n const result = await requester.trackData(parameters);\n\n const cleanup = () =>\n isConsentProvided\n ? dataManager.clearUnsentData(visitorCode)\n : dataManager.clearUnsentDataByKey(\n visitorCode,\n KameleoonData.Conversion,\n );\n\n if (result.ok) {\n cleanup();\n }\n\n if (!result.ok && isOfflineModeOn) {\n this.addItemToOfflineTracking({\n item: parameters,\n storage: offlineTrackingStorage,\n isExperiment: false,\n onSuccess: cleanup,\n });\n }\n }\n\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 compareSemVer({\n version,\n compareVersion,\n operator,\n }: {\n version: string;\n compareVersion: string;\n operator: VersionMatchType;\n }): Result<boolean, KameleoonError> {\n const versionResult = this.validateVersion(version);\n const compareVersionResult = this.validateVersion(compareVersion);\n\n if (!versionResult.ok) {\n return Err(versionResult.error);\n }\n\n if (!compareVersionResult.ok) {\n return Err(compareVersionResult.error);\n }\n\n const [major, minor, patch] = versionResult.data;\n const [compareMajor, compareMinor, comparePatch] =\n compareVersionResult.data;\n\n const [isMajorEqual, isMinorEqual, isPatchEqual] = [\n major === compareMajor,\n minor === compareMinor,\n patch === comparePatch,\n ];\n\n switch (operator) {\n case VersionMatchType.EQUAL:\n return Ok(isMajorEqual && isMinorEqual && isPatchEqual);\n case VersionMatchType.GREATER:\n return Ok(\n major > compareMajor ||\n (isMajorEqual && minor > compareMinor) ||\n (isMajorEqual && isMinorEqual && patch > comparePatch),\n );\n case VersionMatchType.LOWER:\n return Ok(\n major < compareMajor ||\n (isMajorEqual && minor < compareMinor) ||\n (isMajorEqual && isMinorEqual && patch < comparePatch),\n );\n default:\n exhaustCheck(operator);\n }\n }\n\n static generateRandomString(length: number): string {\n const characters = 'abcdefghijklmnopqrstuvwxyz0123456789';\n const randomCharacterArray: string[] = [];\n\n if (length < 0) {\n return '';\n }\n\n for (let i = 0; i < length; i++) {\n randomCharacterArray.push(\n characters[Math.floor(Math.random() * characters.length)],\n );\n }\n\n return randomCharacterArray.join('');\n }\n\n static async sendOfflineTracking({\n requester,\n storage,\n }: SendOfflineTrackingParametersType) {\n const readResult = storage.read();\n\n if (readResult.ok && readResult.data.requestParameters) {\n const { requestParameters } = readResult.data;\n const successfulTimestamps: number[] = [];\n\n // --- Note ---\n // `for..of` + `await` is used to make sure that failed requests are sent one by one\n // without risk of getting the same timestamp at the server, which might happen, for example,\n // with `.forEach` or `.map` starting requests in async callbacks at the same time\n for (const parameters of requestParameters) {\n const { timestamp, isExperiment, ...params } = parameters;\n let result: Result<boolean, void>;\n\n if (isExperiment) {\n result = await requester.trackExperiment(\n params as TrackExperimentParamsType,\n );\n } else {\n result = await requester.trackData(params as TrackDataParamsType);\n }\n\n result.ok && result.data && successfulTimestamps.push(timestamp);\n }\n\n this.deleteFromOfflineTracking({\n storage,\n timestamps: successfulTimestamps,\n });\n }\n }\n\n private static addItemToOfflineTracking({\n item,\n isExperiment,\n storage,\n onSuccess,\n }: AddToOfflineTrackingParametersType): void {\n const readResult = storage.read();\n\n const data = readResult.ok ? readResult.data : {};\n\n const { requestParameters } = data;\n\n const newItem = {\n ...item,\n timestamp: new Date().getTime(),\n isExperiment,\n };\n\n const newRequestParameters = requestParameters\n ? [...requestParameters, newItem]\n : [newItem];\n\n const writeResult = storage.write({\n requestParameters: newRequestParameters,\n });\n\n if (writeResult.ok && onSuccess) {\n onSuccess();\n }\n }\n\n private static deleteFromOfflineTracking({\n timestamps,\n storage,\n }: DeleteFromOfflineTrackingParametersType): void {\n const readResult = storage.read();\n\n if (readResult.ok) {\n const { requestParameters } = readResult.data;\n\n const newParameters = requestParameters?.filter(\n (item) => !timestamps.includes(item.timestamp),\n );\n\n storage.write({ requestParameters: newParameters });\n }\n }\n\n private static validateVersion(\n version: string,\n ): Result<[number, number, number], KameleoonError> {\n const versionParts = version.split('.').map((x) => parseInt(x, 10));\n\n while (versionParts.length < 3) {\n versionParts.push(0);\n }\n\n if (versionParts.some((item) => isNaN(item))) {\n return Err(\n new KameleoonError(KameleoonException.SemanticVersionParse, version),\n );\n }\n\n return Ok(versionParts.slice(0, 3) as [number, number, number]);\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"utilities.js","names":["Utilities","checkTargeting","a","segment","visitorCode","targetingData","experimentId","variationConfiguration","clientConfiguration","packageInfo","dataManager","conditionsData","firstLevel","length","Ok","Err","KameleoonError","KameleoonException","Initialization","variations","assignedVariationsResult","getStoredVariations","ok","data","targetingTree","getTree","trees","segments","ruleMap","hasTargetingType","TargetingType","SEGMENT","TARGET_FEATURE_FLAG","result","evaluate","variationData","sdkInfo","validateVisitorCode","VisitorCodeEmpty","VISITOR_CODE_MAX_LENGTH","VisitorCodeMaxLength","getDataUrl","updateUrl","url","shouldSendConversionData","type","KameleoonData","Conversion","isConsentProvided","nonce","UrlParameter","Nonce","getNonce","resultUrl","push","unsentData","getUnsentData","size","item","values","Array","isArray","forEach","arrayItem","join","getVariationDataUrlAndSentExperimentIds","variationDataUrlList","sentExperimentIds","Set","isTargetedRule","UrlEventType","Experiment","Id","VariationId","variationId","add","variationDataUrl","experimentIds","from","trackFeatureExperiment","featureFlagVariation","requester","isOfflineModeOn","offlineTrackingStorage","rule","userAgent","getUserAgent","dataUrl","parameters","isUnallocated","trackExperiment","clearUnsentData","clearUnsentDataByKey","markUnsentDataAsSent","addItemToOfflineTracking","storage","isExperiment","convertTimeUnit","time","timeUnit","timeMap","TimeUnit","Minute","Milliseconds","Hour","Day","Week","Month","parseFeatureVariable","variable","key","value","VariableType","BOOLEAN","STRING","NUMBER","numberValue","Number","isNaN","NumberParse","JSON","jsonValue","parse","err","JSONParse","exhaustCheck","parseVisitorData","filters","visitProcessor","VisitProcessor","currentVisit","previousVisits","kcs","visits","isCurrentForced","visitorData","storageVisitorData","visit","processVisit","processKcs","processMultipleDataTypes","visitsData","experimentData","updateStoredVariations","parseRegExp","_","expression","flags","split","RegExp","getTargetingData","userAgentData","UserAgent","isCustomData","dataItem","CustomData","insertInOrderedListMutably","list","element","order","includes","index","findIndex","Order","Ascending","splice","updateCache","cacheManager","cacheData","getAliveItem","newCacheData","_objectSpread","expirationTime","Date","now","CACHE_ITEM_LIFETIME","Second","lifetime","getTrackingCode","trackingCache","resultString","updatedCacheData","Object","entries","concat","trackData","isMappingIdentifier","sendOfflineTracking","body","cleanup","onSuccess","hexLength","HEX_CHARACTERS","i","randomNumber","Math","floor","random","substring","compareSemVer","version","compareVersion","operator","versionResult","validateVersion","compareVersionResult","error","major","minor","patch","compareMajor","compareMinor","comparePatch","isMajorEqual","isMinorEqual","isPatchEqual","VersionMatchType","EQUAL","GREATER","LOWER","generateRandomString","characters","randomCharacterArray","readResult","read","requestParameters","successfulTimestamps","timestamp","params","_objectWithoutProperties","_excluded","deleteFromOfflineTracking","timestamps","newItem","getTime","newRequestParameters","writeResult","write","newParameters","filter","versionParts","map","x","parseInt","some","SemanticVersionParse","slice","exports"],"sources":["../../src/utilities/utilities.ts"],"sourcesContent":["import { Err, Ok, Result } from 'ts-res';\nimport {\n KameleoonError,\n KameleoonException,\n exhaustCheck,\n} from 'src/kameleoonError';\nimport {\n FeatureVariableResultType,\n Milliseconds,\n TrackingCacheItemType,\n VariableType,\n} from 'src/types';\nimport { FeatureVariableType, JSONType } from 'src/clientConfiguration';\nimport {\n CustomData,\n DataManager,\n KameleoonData,\n KameleoonDataType,\n} from 'src/kameleoonData';\nimport { CACHE_ITEM_LIFETIME } from 'src/constants';\nimport { CacheManager } from 'src/cacheManager';\nimport {\n TrackExperimentParamsType,\n TrackDataParamsType,\n VisitType,\n UrlParameter,\n UrlEventType,\n} from 'src/requester';\nimport { VersionMatchType, TargetingType } from 'src/targeting';\nimport { FeatureFlagVariationsType } from 'src/storage/types';\nimport { VisitProcessor } from 'src/kameleoonData/visitProcessor';\nimport { 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 GetVariationDataUrlParametersType,\n ParseVisitorDataResultType,\n} from './types';\n\nexport class Utilities {\n static checkTargeting({\n segment,\n visitorCode,\n targetingData,\n experimentId,\n variationConfiguration,\n clientConfiguration,\n packageInfo,\n dataManager,\n }: CheckTargetingParametersType): Result<boolean, KameleoonError> {\n if (!segment || !segment.conditionsData.firstLevel.length) {\n return Ok(true);\n }\n\n if (!variationConfiguration) {\n return Err(new KameleoonError(KameleoonException.Initialization));\n }\n\n let variations: FeatureFlagVariationsType = {};\n\n const assignedVariationsResult =\n variationConfiguration.getStoredVariations(visitorCode);\n\n if (assignedVariationsResult.ok) {\n variations = assignedVariationsResult.data;\n }\n\n const targetingTree = dataManager.getTree(segment);\n\n let trees = undefined;\n let segments = undefined;\n let ruleMap = undefined;\n\n // --- Note ---\n // Only getting trees and segments targeting type\n if (targetingTree.hasTargetingType(TargetingType.SEGMENT)) {\n trees = dataManager.trees;\n segments = clientConfiguration.segments;\n }\n\n // --- Note ---\n // Only constructing rule map for targeting type\n if (targetingTree.hasTargetingType(TargetingType.TARGET_FEATURE_FLAG)) {\n ruleMap = clientConfiguration.ruleMap;\n }\n\n const result = targetingTree.evaluate({\n variationData: variations,\n sdkInfo: packageInfo,\n segments,\n ruleMap,\n trees,\n targetingData,\n experimentId,\n visitorCode,\n });\n\n return result;\n }\n\n static validateVisitorCode(\n visitorCode: string,\n ): Result<void, KameleoonError> {\n if (visitorCode.length === 0) {\n return Err(new KameleoonError(KameleoonException.VisitorCodeEmpty));\n }\n\n if (visitorCode.length > VISITOR_CODE_MAX_LENGTH) {\n return Err(new KameleoonError(KameleoonException.VisitorCodeMaxLength));\n }\n\n return Ok();\n }\n\n static getDataUrl({\n visitorCode,\n dataManager,\n isConsentProvided,\n }: GetDataUrlParametersType): string {\n const unsentData = dataManager.getUnsentData(visitorCode);\n const resultUrl: string[] = [];\n\n if (!unsentData || !unsentData.size) {\n return '';\n }\n\n function updateUrl(data: KameleoonDataType): void {\n if (!data.url) {\n return;\n }\n\n const shouldSendAllData = isConsentProvided;\n const shouldSendConversionData =\n data.data.type === KameleoonData.Conversion;\n\n if (shouldSendAllData || shouldSendConversionData) {\n const nonce = !shouldSendConversionData\n ? UrlParameter.Nonce + Utilities.getNonce()\n : '';\n resultUrl.push(data.url + nonce + '\\n');\n }\n }\n\n for (const item of unsentData.values()) {\n if (Array.isArray(item)) {\n item.forEach((arrayItem) => updateUrl(arrayItem));\n } else {\n updateUrl(item);\n }\n }\n\n return resultUrl.join('');\n }\n\n static getVariationDataUrlAndSentExperimentIds({\n visitorCode,\n isConsentProvided,\n variationConfiguration,\n }: GetVariationDataUrlParametersType): [string, string[]] {\n const variationDataUrlList: string[] = [];\n const sentExperimentIds = new Set<string>();\n const unsentData = variationConfiguration.getUnsentData(visitorCode);\n\n if (unsentData.ok && unsentData.data.length) {\n unsentData.data.forEach((item) => {\n if (item.isTargetedRule || isConsentProvided) {\n variationDataUrlList.push(\n UrlEventType.Experiment +\n UrlParameter.Id +\n item.experimentId +\n UrlParameter.VariationId +\n item.variationId +\n UrlParameter.Nonce +\n Utilities.getNonce() +\n '\\n',\n );\n\n sentExperimentIds.add(String(item.experimentId));\n }\n });\n }\n\n const variationDataUrl = variationDataUrlList.join('');\n const experimentIds = Array.from(sentExperimentIds);\n\n return [variationDataUrl, experimentIds];\n }\n\n static async trackFeatureExperiment({\n featureFlagVariation,\n dataManager,\n visitorCode,\n requester,\n isOfflineModeOn,\n isConsentProvided,\n offlineTrackingStorage,\n variationConfiguration,\n }: TrackRuleParametersType): Promise<void> {\n const { variationId, rule } = featureFlagVariation;\n\n const userAgent = this.getUserAgent(visitorCode, dataManager);\n\n const dataUrl = this.getDataUrl({\n visitorCode,\n dataManager,\n isConsentProvided,\n });\n\n const resultVariationId = variationId || 0;\n\n // --- Note ---\n // Experiment id is not needed for unallocated visitors\n // So we just use 0 as a fallback\n const experimentId = rule ? rule.experimentId : 0;\n\n const [variationDataUrl, sentExperimentIds] =\n this.getVariationDataUrlAndSentExperimentIds({\n visitorCode,\n isConsentProvided,\n variationConfiguration,\n });\n\n if (!isConsentProvided && !dataUrl && !rule) {\n return;\n }\n\n const isUnallocated = variationId === null;\n\n const parameters = {\n visitorCode,\n dataUrl,\n variationDataUrl,\n experimentId,\n variationId: resultVariationId,\n userAgent,\n isUnallocated,\n };\n\n const result = await requester.trackExperiment(parameters);\n\n if (result.ok) {\n if (!isConsentProvided) {\n dataManager.clearUnsentDataByKey(visitorCode, KameleoonData.Conversion);\n } else {\n dataManager.clearUnsentData(visitorCode);\n }\n\n sentExperimentIds.forEach((experimentId) => {\n variationConfiguration.markUnsentDataAsSent(visitorCode, experimentId);\n });\n }\n\n if (!result.ok && isOfflineModeOn) {\n this.addItemToOfflineTracking({\n item: parameters,\n storage: offlineTrackingStorage,\n isExperiment: true,\n });\n }\n }\n\n static convertTimeUnit(time: number, timeUnit: TimeUnit): number {\n const timeMap = {\n [TimeUnit.Minute]: Milliseconds.Minute,\n [TimeUnit.Hour]: Milliseconds.Hour,\n [TimeUnit.Day]: Milliseconds.Day,\n [TimeUnit.Week]: Milliseconds.Week,\n [TimeUnit.Month]: Milliseconds.Month,\n };\n\n return time / timeMap[timeUnit];\n }\n\n static parseFeatureVariable(\n variable: FeatureVariableType,\n ): Result<FeatureVariableResultType, KameleoonError> {\n const { key, type, value } = variable;\n\n switch (type) {\n case VariableType.BOOLEAN:\n return Ok({\n key,\n type,\n value: Boolean(value),\n });\n case VariableType.STRING:\n return Ok({\n key,\n type,\n value: String(value),\n });\n case VariableType.NUMBER:\n const numberValue = Number(value);\n\n if (Number.isNaN(numberValue)) {\n return Err(\n new KameleoonError(KameleoonException.NumberParse, String(value)),\n );\n }\n\n return Ok({\n key,\n type,\n value: numberValue,\n });\n case VariableType.JSON:\n try {\n const jsonValue: JSONType = JSON.parse(String(variable.value));\n\n return Ok({\n key,\n type,\n value: jsonValue,\n });\n } catch (err) {\n return Err(new KameleoonError(KameleoonException.JSONParse, err));\n }\n default:\n exhaustCheck(type);\n }\n }\n\n static parseVisitorData({\n data,\n filters,\n visitorCode,\n dataManager,\n variationConfiguration,\n }: ParseVisitorDataParametersType): ParseVisitorDataResultType {\n const visitProcessor = new VisitProcessor(filters, dataManager);\n const { currentVisit, previousVisits, kcs } = data;\n\n let visits: VisitType[] = [];\n\n // --- Note ---\n // Loading `kcs` requires loading `currentVisit`\n // So in cases when `currentVisit` is forced by `kcs`\n // we don't want to use `currentVisit` data as the user didn't request it\n const isCurrentForced = filters.kcs && !filters.currentVisit;\n\n if (currentVisit && !isCurrentForced) {\n visits.push(currentVisit);\n }\n\n if (previousVisits) {\n visits.push(...previousVisits);\n }\n\n if (!visits.length && !isCurrentForced) {\n return { visitorData: [], storageVisitorData: [] };\n }\n\n visits.forEach((visit) => {\n visitProcessor.processVisit(visit);\n });\n\n visitProcessor.processKcs(kcs);\n visitProcessor.processMultipleDataTypes();\n\n const { visitorData, storageVisitorData, visitsData, experimentData } =\n visitProcessor.data;\n\n variationConfiguration.updateStoredVariations(visitorCode, experimentData);\n\n return {\n visitorData,\n storageVisitorData,\n visitsData,\n };\n }\n\n static parseRegExp(value: string): RegExp {\n if (value[0] === '/') {\n const [_, expression, flags] = value.split('/');\n\n return new RegExp(expression, flags);\n }\n\n return new RegExp(value);\n }\n\n static getUserAgent(\n visitorCode: string,\n dataManager: DataManager,\n ): string | undefined {\n const targetingData = dataManager.getTargetingData(visitorCode);\n\n if (targetingData) {\n const userAgentData = targetingData[KameleoonData.UserAgent];\n\n if (userAgentData) {\n return userAgentData.value;\n }\n }\n\n return undefined;\n }\n\n static isCustomData(dataItem: KameleoonDataType): dataItem is CustomData {\n return dataItem.data.type === KameleoonData.CustomData;\n }\n\n /**\n * Insert element in ordered list, if element already exists in list, does nothing\n * @param list - list to insert element\n * @param element - element to insert\n * @param order - order of list\n */\n static insertInOrderedListMutably({\n list,\n element,\n order,\n }: InsertInOrderedListParametersType): void {\n if (list.includes(element)) {\n return;\n }\n\n const index = list.findIndex((item) =>\n order === Order.Ascending ? item >= element : item <= element,\n );\n\n if (index === -1) {\n list.push(element);\n } else {\n list.splice(index, 0, element);\n }\n }\n\n static updateCache({\n cacheManager,\n visitorCode,\n experimentId,\n variationId,\n }: ManageCacheParametersType): void {\n const cacheData = cacheManager.getAliveItem(visitorCode);\n\n const newCacheData = cacheData ? { ...cacheData } : {};\n\n newCacheData[experimentId] = {\n variationId,\n expirationTime: Date.now() + CACHE_ITEM_LIFETIME * Milliseconds.Second,\n };\n\n cacheManager.add({\n key: visitorCode,\n data: newCacheData,\n lifetime: CACHE_ITEM_LIFETIME,\n });\n }\n\n static getTrackingCode(\n trackingCache: CacheManager<TrackingCacheItemType>,\n visitorCode: string,\n ): string {\n let resultString = 'window.kameleoonQueue=window.kameleoonQueue||[];';\n\n const cacheData = trackingCache.getAliveItem(visitorCode);\n\n if (!cacheData) {\n return resultString;\n }\n\n const updatedCacheData: TrackingCacheItemType = {};\n\n Object.entries(cacheData).forEach(\n ([experimentId, { variationId, expirationTime }]) => {\n if (expirationTime > Date.now()) {\n resultString += `window.kameleoonQueue.push(['Experiments.assignVariation',${experimentId},${variationId}]);`;\n resultString += `window.kameleoonQueue.push(['Experiments.trigger',${experimentId},true]);`;\n\n updatedCacheData[Number(experimentId)] = {\n variationId,\n expirationTime,\n };\n }\n },\n );\n\n // --- Note ---\n // Cache is updated with only alive experiments\n trackingCache.add({\n key: visitorCode,\n data: updatedCacheData,\n lifetime: CACHE_ITEM_LIFETIME,\n });\n\n return resultString;\n }\n\n static async trackData({\n visitorCode,\n dataManager,\n requester,\n isOfflineModeOn,\n offlineTrackingStorage,\n isConsentProvided,\n isMappingIdentifier,\n }: TrackDataParametersType): Promise<void> {\n 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: TrackDataParamsType = {\n visitorCode,\n body: dataUrl,\n userAgent,\n isMappingIdentifier,\n };\n\n const result = await requester.trackData(parameters);\n\n const cleanup = () =>\n isConsentProvided\n ? dataManager.clearUnsentData(visitorCode)\n : dataManager.clearUnsentDataByKey(\n visitorCode,\n KameleoonData.Conversion,\n );\n\n if (result.ok) {\n cleanup();\n }\n\n if (!result.ok && isOfflineModeOn) {\n this.addItemToOfflineTracking({\n item: parameters,\n storage: offlineTrackingStorage,\n isExperiment: false,\n onSuccess: cleanup,\n });\n }\n }\n\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 compareSemVer({\n version,\n compareVersion,\n operator,\n }: {\n version: string;\n compareVersion: string;\n operator: VersionMatchType;\n }): Result<boolean, KameleoonError> {\n const versionResult = this.validateVersion(version);\n const compareVersionResult = this.validateVersion(compareVersion);\n\n if (!versionResult.ok) {\n return Err(versionResult.error);\n }\n\n if (!compareVersionResult.ok) {\n return Err(compareVersionResult.error);\n }\n\n const [major, minor, patch] = versionResult.data;\n const [compareMajor, compareMinor, comparePatch] =\n compareVersionResult.data;\n\n const [isMajorEqual, isMinorEqual, isPatchEqual] = [\n major === compareMajor,\n minor === compareMinor,\n patch === comparePatch,\n ];\n\n switch (operator) {\n case VersionMatchType.EQUAL:\n return Ok(isMajorEqual && isMinorEqual && isPatchEqual);\n case VersionMatchType.GREATER:\n return Ok(\n major > compareMajor ||\n (isMajorEqual && minor > compareMinor) ||\n (isMajorEqual && isMinorEqual && patch > comparePatch),\n );\n case VersionMatchType.LOWER:\n return Ok(\n major < compareMajor ||\n (isMajorEqual && minor < compareMinor) ||\n (isMajorEqual && isMinorEqual && patch < comparePatch),\n );\n default:\n exhaustCheck(operator);\n }\n }\n\n static generateRandomString(length: number): string {\n const characters = 'abcdefghijklmnopqrstuvwxyz0123456789';\n const randomCharacterArray: string[] = [];\n\n if (length < 0) {\n return '';\n }\n\n for (let i = 0; i < length; i++) {\n randomCharacterArray.push(\n characters[Math.floor(Math.random() * characters.length)],\n );\n }\n\n return randomCharacterArray.join('');\n }\n\n static async sendOfflineTracking({\n requester,\n storage,\n }: SendOfflineTrackingParametersType) {\n const readResult = storage.read();\n\n if (readResult.ok && readResult.data.requestParameters) {\n const { requestParameters } = readResult.data;\n const successfulTimestamps: number[] = [];\n\n // --- Note ---\n // `for..of` + `await` is used to make sure that failed requests are sent one by one\n // without risk of getting the same timestamp at the server, which might happen, for example,\n // with `.forEach` or `.map` starting requests in async callbacks at the same time\n for (const parameters of requestParameters) {\n const { timestamp, isExperiment, ...params } = parameters;\n let result: Result<boolean, void>;\n\n if (isExperiment) {\n result = await requester.trackExperiment(\n params as TrackExperimentParamsType,\n );\n } else {\n result = await requester.trackData(params as TrackDataParamsType);\n }\n\n result.ok && result.data && successfulTimestamps.push(timestamp);\n }\n\n this.deleteFromOfflineTracking({\n storage,\n timestamps: successfulTimestamps,\n });\n }\n }\n\n private static addItemToOfflineTracking({\n item,\n isExperiment,\n storage,\n onSuccess,\n }: AddToOfflineTrackingParametersType): void {\n const readResult = storage.read();\n\n const data = readResult.ok ? readResult.data : {};\n\n const { requestParameters } = data;\n\n const newItem = {\n ...item,\n timestamp: new Date().getTime(),\n isExperiment,\n };\n\n const newRequestParameters = requestParameters\n ? [...requestParameters, newItem]\n : [newItem];\n\n const writeResult = storage.write({\n requestParameters: newRequestParameters,\n });\n\n if (writeResult.ok && onSuccess) {\n onSuccess();\n }\n }\n\n private static deleteFromOfflineTracking({\n timestamps,\n storage,\n }: DeleteFromOfflineTrackingParametersType): void {\n const readResult = storage.read();\n\n if (readResult.ok) {\n const { requestParameters } = readResult.data;\n\n const newParameters = requestParameters?.filter(\n (item) => !timestamps.includes(item.timestamp),\n );\n\n storage.write({ requestParameters: newParameters });\n }\n }\n\n private static validateVersion(\n version: string,\n ): Result<[number, number, number], KameleoonError> {\n const versionParts = version.split('.').map((x) => parseInt(x, 10));\n\n while (versionParts.length < 3) {\n versionParts.push(0);\n }\n\n if (versionParts.some((item) => isNaN(item))) {\n return Err(\n new KameleoonError(KameleoonException.SemanticVersionParse, version),\n );\n }\n\n return Ok(versionParts.slice(0, 3) as [number, number, number]);\n }\n}\n"],"mappings":"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"}
|
|
@@ -15,7 +15,7 @@ export type GetVariationParametersType = {
|
|
|
15
15
|
visitorCode: string;
|
|
16
16
|
visitorIdentifier: string;
|
|
17
17
|
featureFlag: FeatureFlagType;
|
|
18
|
-
targetingData
|
|
18
|
+
targetingData?: KameleoonVisitorDataType;
|
|
19
19
|
withAssignment?: boolean;
|
|
20
20
|
packageInfo: ExternalPackageInfoType;
|
|
21
21
|
clientConfiguration: ClientConfiguration;
|
|
@@ -1 +1 @@
|
|
|
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 visitorIdentifier: string;\n featureFlag: FeatureFlagType;\n targetingData
|
|
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 visitorIdentifier: string;\n featureFlag: FeatureFlagType;\n targetingData?: KameleoonVisitorDataType;\n withAssignment?: boolean;\n packageInfo: ExternalPackageInfoType;\n clientConfiguration: ClientConfiguration;\n dataManager: DataManager;\n};\n\nexport type UnsentVariationDataType = {\n experimentId: number;\n variationId: number;\n isTargetedRule: boolean;\n};\n"],"mappings":""}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kameleoon/javascript-sdk-core",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.1.0",
|
|
4
4
|
"description": "Kameleoon JS SDK Core",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -17,11 +17,15 @@
|
|
|
17
17
|
"deploy-nexus": "/bin/bash ../../scripts/deploy_nexus.sh javascript-sdk-core",
|
|
18
18
|
"update-changelog": "/bin/bash ../../scripts/update_changelog.sh javascript-sdk-core",
|
|
19
19
|
"symlink": "yarn link",
|
|
20
|
-
"test": "
|
|
20
|
+
"test": "jest",
|
|
21
21
|
"test:watch": "jest --watch",
|
|
22
22
|
"test:coverage": "jest --coverage"
|
|
23
23
|
},
|
|
24
24
|
"homepage": "https://developers.kameleoon.com/react-js-sdk.html",
|
|
25
|
+
"publishConfig": {
|
|
26
|
+
"access": "public",
|
|
27
|
+
"cache": "cache/.npm"
|
|
28
|
+
},
|
|
25
29
|
"keywords": [
|
|
26
30
|
"kameleoon",
|
|
27
31
|
"core",
|