@kameleoon/javascript-sdk-core 4.2.0 → 4.4.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.
Files changed (93) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/README.md +0 -2
  3. package/dist/clientConfiguration/clientConfiguration.d.ts +3 -5
  4. package/dist/clientConfiguration/clientConfiguration.js +1 -1
  5. package/dist/clientConfiguration/clientConfiguration.js.map +1 -1
  6. package/dist/clientConfiguration/constants.js +1 -1
  7. package/dist/clientConfiguration/constants.js.map +1 -1
  8. package/dist/clientConfiguration/types.d.ts +3 -2
  9. package/dist/clientConfiguration/types.js.map +1 -1
  10. package/dist/clientSettings/clientSettings.d.ts +11 -1
  11. package/dist/clientSettings/clientSettings.js +1 -1
  12. package/dist/clientSettings/clientSettings.js.map +1 -1
  13. package/dist/clientSettings/types.d.ts +5 -1
  14. package/dist/clientSettings/types.js.map +1 -1
  15. package/dist/eventManager/eventManager.d.ts +11 -0
  16. package/dist/eventManager/eventManager.js +2 -0
  17. package/dist/eventManager/eventManager.js.map +1 -0
  18. package/dist/eventManager/index.d.ts +2 -0
  19. package/dist/eventManager/index.js +2 -0
  20. package/dist/eventManager/index.js.map +1 -0
  21. package/dist/eventManager/types.d.ts +36 -0
  22. package/dist/eventManager/types.js +2 -0
  23. package/dist/eventManager/types.js.map +1 -0
  24. package/dist/eventSource/eventSource.js +1 -1
  25. package/dist/eventSource/eventSource.js.map +1 -1
  26. package/dist/index.d.ts +4 -4
  27. package/dist/index.js +1 -1
  28. package/dist/index.js.map +1 -1
  29. package/dist/kameleoonClient.d.ts +10 -2
  30. package/dist/kameleoonClient.js +1 -1
  31. package/dist/kameleoonClient.js.map +1 -1
  32. package/dist/kameleoonClientInterface.d.ts +26 -0
  33. package/dist/kameleoonClientInterface.js.map +1 -1
  34. package/dist/kameleoonData/dataManager.d.ts +2 -2
  35. package/dist/kameleoonData/dataManager.js +1 -1
  36. package/dist/kameleoonData/dataManager.js.map +1 -1
  37. package/dist/kameleoonData/dataProcessor.d.ts +2 -2
  38. package/dist/kameleoonData/dataProcessor.js +1 -1
  39. package/dist/kameleoonData/dataProcessor.js.map +1 -1
  40. package/dist/kameleoonData/index.d.ts +0 -1
  41. package/dist/kameleoonData/index.js +1 -1
  42. package/dist/kameleoonData/index.js.map +1 -1
  43. package/dist/kameleoonData/types.d.ts +1 -1
  44. package/dist/kameleoonData/types.js.map +1 -1
  45. package/dist/kameleoonError/constants.d.ts +1 -0
  46. package/dist/kameleoonError/constants.js +1 -1
  47. package/dist/kameleoonError/constants.js.map +1 -1
  48. package/dist/kameleoonError/kameleoonError.d.ts +1 -0
  49. package/dist/kameleoonError/kameleoonError.js +1 -1
  50. package/dist/kameleoonError/kameleoonError.js.map +1 -1
  51. package/dist/kameleoonError/types.d.ts +1 -0
  52. package/dist/kameleoonError/types.js +1 -1
  53. package/dist/kameleoonError/types.js.map +1 -1
  54. package/dist/kameleoonUtils.d.ts +29 -5
  55. package/dist/kameleoonUtils.js +1 -1
  56. package/dist/kameleoonUtils.js.map +1 -1
  57. package/dist/requester/constants.d.ts +1 -8
  58. package/dist/requester/constants.js +1 -1
  59. package/dist/requester/constants.js.map +1 -1
  60. package/dist/requester/index.d.ts +2 -2
  61. package/dist/requester/index.js +1 -1
  62. package/dist/requester/index.js.map +1 -1
  63. package/dist/requester/requester.d.ts +6 -2
  64. package/dist/requester/requester.js +1 -1
  65. package/dist/requester/requester.js.map +1 -1
  66. package/dist/requester/types.d.ts +96 -19
  67. package/dist/requester/types.js +1 -1
  68. package/dist/requester/types.js.map +1 -1
  69. package/dist/requester/urlProvider.d.ts +8 -5
  70. package/dist/requester/urlProvider.js +1 -1
  71. package/dist/requester/urlProvider.js.map +1 -1
  72. package/dist/targeting/conditions/customData.d.ts +4 -2
  73. package/dist/targeting/conditions/customData.js +1 -1
  74. package/dist/targeting/conditions/customData.js.map +1 -1
  75. package/dist/targeting/conditions/types.d.ts +1 -0
  76. package/dist/targeting/conditions/types.js.map +1 -1
  77. package/dist/targeting/types.d.ts +2 -1
  78. package/dist/targeting/types.js +1 -1
  79. package/dist/targeting/types.js.map +1 -1
  80. package/dist/types.d.ts +17 -5
  81. package/dist/types.js +1 -1
  82. package/dist/types.js.map +1 -1
  83. package/dist/utilities/constants.d.ts +1 -0
  84. package/dist/utilities/constants.js +1 -1
  85. package/dist/utilities/constants.js.map +1 -1
  86. package/dist/utilities/utilities.js +1 -1
  87. package/dist/utilities/utilities.js.map +1 -1
  88. package/dist/visitorCodeManager/visitorCodeManager.js +1 -1
  89. package/dist/visitorCodeManager/visitorCodeManager.js.map +1 -1
  90. package/package.json +2 -2
  91. package/dist/kameleoonData/constants.d.ts +0 -4
  92. package/dist/kameleoonData/constants.js +0 -2
  93. package/dist/kameleoonData/constants.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"utilities.js","names":["Utilities","checkTargeting","a","segment","visitorCode","targetingData","experimentId","variationConfiguration","clientConfiguration","packageInfo","dataManager","conditionsData","firstLevel","length","Ok","Err","KameleoonError","KameleoonException","Initialization","variations","assignedVariationsResult","getStoredVariations","ok","data","targetingTree","getTree","trees","segments","ruleMap","hasTargetingType","TargetingType","SEGMENT","TARGET_FEATURE_FLAG","result","evaluate","variationData","sdkInfo","validateVisitorCode","VisitorCodeEmpty","VISITOR_CODE_MAX_LENGTH","VisitorCodeMaxLength","getDataUrl","updateUrl","url","shouldSendConversionData","type","KameleoonData","Conversion","isConsentProvided","nonce","UrlParameter","Nonce","getNonce","resultUrl","push","unsentData","getUnsentData","size","item","values","Array","isArray","forEach","arrayItem","join","getVariationDataUrlAndSentExperimentIds","variationDataUrlList","sentExperimentIds","Set","isTargetedRule","UrlEventType","Experiment","Id","VariationId","variationId","add","variationDataUrl","experimentIds","from","trackFeatureExperiment","featureFlagVariation","requester","isOfflineModeOn","offlineTrackingStorage","rule","userAgent","getUserAgent","dataUrl","parameters","isUnallocated","trackExperiment","clearUnsentData","clearUnsentDataByKey","markUnsentDataAsSent","addItemToOfflineTracking","storage","isExperiment","convertTimeUnit","time","timeUnit","timeMap","TimeUnit","Minute","Milliseconds","Hour","Day","Week","Month","parseFeatureVariable","variable","key","value","VariableType","BOOLEAN","STRING","NUMBER","numberValue","Number","isNaN","NumberParse","JSON","jsonValue","parse","err","JSONParse","exhaustCheck","parseVisitorData","filters","visitProcessor","VisitProcessor","currentVisit","previousVisits","kcs","visits","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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"}
1
+ {"version":3,"file":"utilities.js","names":["Utilities","checkTargeting","a","segment","visitorCode","targetingData","experimentId","variationConfiguration","clientConfiguration","packageInfo","dataManager","conditionsData","firstLevel","length","Ok","Err","KameleoonError","KameleoonException","Initialization","variations","assignedVariationsResult","getStoredVariations","ok","data","targetingTree","getTree","trees","segments","ruleMap","hasTargetingType","TargetingType","SEGMENT","TARGET_FEATURE_FLAG","result","evaluate","variationData","sdkInfo","validateVisitorCode","VisitorCodeEmpty","VISITOR_CODE_MAX_LENGTH","VisitorCodeMaxLength","getDataUrl","updateUrl","url","shouldSendConversionData","type","KameleoonData","Conversion","isConsentProvided","nonce","UrlParameter","Nonce","getNonce","resultUrl","push","unsentData","getUnsentData","size","item","values","Array","isArray","forEach","arrayItem","join","getVariationDataUrlAndSentExperimentIds","variationDataUrlList","sentExperimentIds","Set","isTargetedRule","UrlEventType","Experiment","Id","VariationId","variationId","add","variationDataUrl","experimentIds","from","trackFeatureExperiment","featureFlagVariation","requester","isOfflineModeOn","offlineTrackingStorage","rule","userAgent","getUserAgent","dataUrl","parameters","isUnallocated","trackExperiment","clearUnsentData","clearUnsentDataByKey","markUnsentDataAsSent","addItemToOfflineTracking","storage","isExperiment","convertTimeUnit","time","timeUnit","timeMap","TimeUnit","Minute","Milliseconds","Hour","Day","Week","Month","parseFeatureVariable","variable","key","value","VariableType","BOOLEAN","STRING","NUMBER","numberValue","Number","isNaN","NumberParse","JSON","jsonValue","parse","err","JSONParse","exhaustCheck","parseVisitorData","filters","visitProcessor","VisitProcessor","currentVisit","previousVisits","kcs","visits","visitorData","storageVisitorData","visit","processVisit","processKcs","processMultipleDataTypes","visitsData","experimentData","updateStoredVariations","parseRegExp","_","expression","flags","split","RegExp","getTargetingData","userAgentData","UserAgent","isCustomData","dataItem","CustomData","insertInOrderedListMutably","list","element","order","includes","index","findIndex","Order","Ascending","splice","updateCache","cacheManager","cacheData","getAliveItem","newCacheData","_objectSpread","expirationTime","Date","now","CACHE_ITEM_LIFETIME","Second","lifetime","getTrackingCode","trackingCache","resultString","updatedCacheData","Object","entries","concat","trackData","isMappingIdentifier","body","cleanup","onSuccess","sendOfflineTracking","i","NONCE_LENGTH","randomIndex","Math","floor","random","HEX_CHARACTERS","charAt","compareSemVer","version","compareVersion","operator","versionResult","validateVersion","compareVersionResult","error","major","minor","patch","compareMajor","compareMinor","comparePatch","isMajorEqual","isMinorEqual","isPatchEqual","VersionMatchType","EQUAL","GREATER","LOWER","generateRandomString","characters","randomCharacterArray","readResult","read","requestParameters","successfulTimestamps","timestamp","params","_objectWithoutProperties","_excluded","deleteFromOfflineTracking","timestamps","newItem","getTime","newRequestParameters","writeResult","write","newParameters","filter","versionParts","map","x","parseInt","some","SemanticVersionParse","slice","exports"],"sources":["../../src/utilities/utilities.ts"],"sourcesContent":["import { Err, Ok, Result } from 'ts-res';\nimport {\n KameleoonError,\n KameleoonException,\n exhaustCheck,\n} from 'src/kameleoonError';\nimport {\n FeatureVariableResultType,\n Milliseconds,\n TrackingCacheItemType,\n VariableType,\n} from 'src/types';\nimport { FeatureVariableType, JSONType } from 'src/clientConfiguration';\nimport {\n CustomData,\n DataManager,\n KameleoonData,\n KameleoonDataType,\n} from 'src/kameleoonData';\nimport { CACHE_ITEM_LIFETIME } from 'src/constants';\nimport { CacheManager } from 'src/cacheManager';\nimport {\n TrackExperimentParamsType,\n TrackDataParamsType,\n VisitType,\n UrlParameter,\n UrlEventType,\n} from 'src/requester';\nimport { VersionMatchType, TargetingType } from 'src/targeting';\nimport { FeatureFlagVariationsType } from 'src/storage/types';\nimport { VisitProcessor } from 'src/kameleoonData/visitProcessor';\nimport {\n VISITOR_CODE_MAX_LENGTH,\n HEX_CHARACTERS,\n NONCE_LENGTH,\n} from './constants';\nimport {\n CheckTargetingParametersType,\n ManageCacheParametersType,\n TrackDataParametersType,\n TrackRuleParametersType,\n AddToOfflineTrackingParametersType,\n SendOfflineTrackingParametersType,\n DeleteFromOfflineTrackingParametersType,\n ParseVisitorDataParametersType,\n InsertInOrderedListParametersType,\n Order,\n TimeUnit,\n GetDataUrlParametersType,\n GetVariationDataUrlParametersType,\n ParseVisitorDataResultType,\n} from './types';\n\nexport class Utilities {\n static checkTargeting({\n segment,\n visitorCode,\n targetingData,\n experimentId,\n variationConfiguration,\n clientConfiguration,\n packageInfo,\n dataManager,\n }: CheckTargetingParametersType): Result<boolean, KameleoonError> {\n if (!segment || !segment.conditionsData.firstLevel.length) {\n return Ok(true);\n }\n\n if (!variationConfiguration) {\n return Err(new KameleoonError(KameleoonException.Initialization));\n }\n\n let variations: FeatureFlagVariationsType = {};\n\n const assignedVariationsResult =\n variationConfiguration.getStoredVariations(visitorCode);\n\n if (assignedVariationsResult.ok) {\n variations = assignedVariationsResult.data;\n }\n\n const targetingTree = dataManager.getTree(segment);\n\n let trees = undefined;\n let segments = undefined;\n let ruleMap = undefined;\n\n // --- Note ---\n // Only getting trees and segments targeting type\n if (targetingTree.hasTargetingType(TargetingType.SEGMENT)) {\n trees = dataManager.trees;\n segments = clientConfiguration.segments;\n }\n\n // --- Note ---\n // Only constructing rule map for targeting type\n if (targetingTree.hasTargetingType(TargetingType.TARGET_FEATURE_FLAG)) {\n ruleMap = clientConfiguration.ruleMap;\n }\n\n const result = targetingTree.evaluate({\n variationData: variations,\n sdkInfo: packageInfo,\n segments,\n ruleMap,\n trees,\n targetingData,\n experimentId,\n visitorCode,\n });\n\n return result;\n }\n\n static validateVisitorCode(\n visitorCode: string,\n ): Result<void, KameleoonError> {\n if (visitorCode.length === 0) {\n return Err(new KameleoonError(KameleoonException.VisitorCodeEmpty));\n }\n\n if (visitorCode.length > VISITOR_CODE_MAX_LENGTH) {\n return Err(new KameleoonError(KameleoonException.VisitorCodeMaxLength));\n }\n\n return Ok();\n }\n\n static getDataUrl({\n visitorCode,\n dataManager,\n isConsentProvided,\n }: GetDataUrlParametersType): string {\n const unsentData = dataManager.getUnsentData(visitorCode);\n const resultUrl: string[] = [];\n\n if (!unsentData || !unsentData.size) {\n return '';\n }\n\n function updateUrl(data: KameleoonDataType): void {\n if (!data.url) {\n return;\n }\n\n const shouldSendAllData = isConsentProvided;\n const shouldSendConversionData =\n data.data.type === KameleoonData.Conversion;\n\n if (shouldSendAllData || shouldSendConversionData) {\n const nonce = !shouldSendConversionData\n ? UrlParameter.Nonce + Utilities.getNonce()\n : '';\n resultUrl.push(data.url + nonce + '\\n');\n }\n }\n\n for (const item of unsentData.values()) {\n if (Array.isArray(item)) {\n item.forEach((arrayItem) => updateUrl(arrayItem));\n } else {\n updateUrl(item);\n }\n }\n\n return resultUrl.join('');\n }\n\n static getVariationDataUrlAndSentExperimentIds({\n visitorCode,\n isConsentProvided,\n variationConfiguration,\n }: GetVariationDataUrlParametersType): [string, string[]] {\n const variationDataUrlList: string[] = [];\n const sentExperimentIds = new Set<string>();\n const unsentData = variationConfiguration.getUnsentData(visitorCode);\n\n if (unsentData.ok && unsentData.data.length) {\n unsentData.data.forEach((item) => {\n if (item.isTargetedRule || isConsentProvided) {\n variationDataUrlList.push(\n UrlEventType.Experiment +\n UrlParameter.Id +\n item.experimentId +\n UrlParameter.VariationId +\n item.variationId +\n UrlParameter.Nonce +\n Utilities.getNonce() +\n '\\n',\n );\n\n sentExperimentIds.add(String(item.experimentId));\n }\n });\n }\n\n const variationDataUrl = variationDataUrlList.join('');\n const experimentIds = Array.from(sentExperimentIds);\n\n return [variationDataUrl, experimentIds];\n }\n\n static async trackFeatureExperiment({\n featureFlagVariation,\n dataManager,\n visitorCode,\n requester,\n isOfflineModeOn,\n isConsentProvided,\n offlineTrackingStorage,\n variationConfiguration,\n }: TrackRuleParametersType): Promise<void> {\n const { variationId, rule } = featureFlagVariation;\n\n const userAgent = this.getUserAgent(visitorCode, dataManager);\n\n const dataUrl = this.getDataUrl({\n visitorCode,\n dataManager,\n isConsentProvided,\n });\n\n const resultVariationId = variationId || 0;\n\n // --- Note ---\n // Experiment id is not needed for unallocated visitors\n // So we just use 0 as a fallback\n const experimentId = rule ? rule.experimentId : 0;\n\n const [variationDataUrl, sentExperimentIds] =\n this.getVariationDataUrlAndSentExperimentIds({\n visitorCode,\n isConsentProvided,\n variationConfiguration,\n });\n\n if (!isConsentProvided && !dataUrl && !rule) {\n return;\n }\n\n const isUnallocated = variationId === null;\n\n const parameters = {\n visitorCode,\n dataUrl,\n variationDataUrl,\n experimentId,\n variationId: resultVariationId,\n userAgent,\n isUnallocated,\n };\n\n const result = await requester.trackExperiment(parameters);\n\n if (result.ok) {\n if (!isConsentProvided) {\n dataManager.clearUnsentDataByKey(visitorCode, KameleoonData.Conversion);\n } else {\n dataManager.clearUnsentData(visitorCode);\n }\n\n sentExperimentIds.forEach((experimentId) => {\n variationConfiguration.markUnsentDataAsSent(visitorCode, experimentId);\n });\n }\n\n if (!result.ok && isOfflineModeOn) {\n this.addItemToOfflineTracking({\n item: parameters,\n storage: offlineTrackingStorage,\n isExperiment: true,\n });\n }\n }\n\n static convertTimeUnit(time: number, timeUnit: TimeUnit): number {\n const timeMap = {\n [TimeUnit.Minute]: Milliseconds.Minute,\n [TimeUnit.Hour]: Milliseconds.Hour,\n [TimeUnit.Day]: Milliseconds.Day,\n [TimeUnit.Week]: Milliseconds.Week,\n [TimeUnit.Month]: Milliseconds.Month,\n };\n\n return time / timeMap[timeUnit];\n }\n\n static parseFeatureVariable(\n variable: FeatureVariableType,\n ): Result<FeatureVariableResultType, KameleoonError> {\n const { key, type, value } = variable;\n\n switch (type) {\n case VariableType.BOOLEAN:\n return Ok({\n key,\n type,\n value: Boolean(value),\n });\n case VariableType.STRING:\n return Ok({\n key,\n type,\n value: String(value),\n });\n case VariableType.NUMBER:\n const numberValue = Number(value);\n\n if (Number.isNaN(numberValue)) {\n return Err(\n new KameleoonError(KameleoonException.NumberParse, String(value)),\n );\n }\n\n return Ok({\n key,\n type,\n value: numberValue,\n });\n case VariableType.JSON:\n try {\n const jsonValue: JSONType = JSON.parse(String(variable.value));\n\n return Ok({\n key,\n type,\n value: jsonValue,\n });\n } catch (err) {\n return Err(new KameleoonError(KameleoonException.JSONParse, err));\n }\n default:\n exhaustCheck(type);\n }\n }\n\n static parseVisitorData({\n data,\n filters,\n visitorCode,\n dataManager,\n variationConfiguration,\n }: ParseVisitorDataParametersType): ParseVisitorDataResultType {\n const visitProcessor = new VisitProcessor(filters, dataManager);\n const { currentVisit, previousVisits, kcs } = data;\n\n let visits: VisitType[] = [];\n\n if (currentVisit) {\n visits.push(currentVisit);\n }\n\n if (previousVisits) {\n visits.push(...previousVisits);\n }\n\n if (!visits.length) {\n return { visitorData: [], storageVisitorData: [] };\n }\n\n visits.forEach((visit) => {\n visitProcessor.processVisit(visit);\n });\n\n visitProcessor.processKcs(kcs);\n visitProcessor.processMultipleDataTypes();\n\n const { visitorData, storageVisitorData, visitsData, experimentData } =\n visitProcessor.data;\n\n variationConfiguration.updateStoredVariations(visitorCode, experimentData);\n\n return {\n visitorData,\n storageVisitorData,\n visitsData,\n };\n }\n\n static parseRegExp(value: string): RegExp {\n if (value[0] === '/') {\n const [_, expression, flags] = value.split('/');\n\n return new RegExp(expression, flags);\n }\n\n return new RegExp(value);\n }\n\n static getUserAgent(\n visitorCode: string,\n dataManager: DataManager,\n ): string | undefined {\n const targetingData = dataManager.getTargetingData(visitorCode);\n\n if (targetingData) {\n const userAgentData = targetingData[KameleoonData.UserAgent];\n\n if (userAgentData) {\n return userAgentData.value;\n }\n }\n\n return undefined;\n }\n\n static isCustomData(dataItem: KameleoonDataType): dataItem is CustomData {\n return dataItem.data.type === KameleoonData.CustomData;\n }\n\n /**\n * Insert element in ordered list, if element already exists in list, does nothing\n * @param list - list to insert element\n * @param element - element to insert\n * @param order - order of list\n */\n static insertInOrderedListMutably({\n list,\n element,\n order,\n }: InsertInOrderedListParametersType): void {\n if (list.includes(element)) {\n return;\n }\n\n const index = list.findIndex((item) =>\n order === Order.Ascending ? item >= element : item <= element,\n );\n\n if (index === -1) {\n list.push(element);\n } else {\n list.splice(index, 0, element);\n }\n }\n\n static updateCache({\n cacheManager,\n visitorCode,\n experimentId,\n variationId,\n }: ManageCacheParametersType): void {\n const cacheData = cacheManager.getAliveItem(visitorCode);\n\n const newCacheData = cacheData ? { ...cacheData } : {};\n\n newCacheData[experimentId] = {\n variationId,\n expirationTime: Date.now() + CACHE_ITEM_LIFETIME * Milliseconds.Second,\n };\n\n cacheManager.add({\n key: visitorCode,\n data: newCacheData,\n lifetime: CACHE_ITEM_LIFETIME,\n });\n }\n\n static getTrackingCode(\n trackingCache: CacheManager<TrackingCacheItemType>,\n visitorCode: string,\n ): string {\n let resultString = 'window.kameleoonQueue=window.kameleoonQueue||[];';\n\n const cacheData = trackingCache.getAliveItem(visitorCode);\n\n if (!cacheData) {\n return resultString;\n }\n\n const updatedCacheData: TrackingCacheItemType = {};\n\n Object.entries(cacheData).forEach(\n ([experimentId, { variationId, expirationTime }]) => {\n if (expirationTime > Date.now()) {\n resultString += `window.kameleoonQueue.push(['Experiments.assignVariation',${experimentId},${variationId}]);`;\n resultString += `window.kameleoonQueue.push(['Experiments.trigger',${experimentId},true]);`;\n\n updatedCacheData[Number(experimentId)] = {\n variationId,\n expirationTime,\n };\n }\n },\n );\n\n // --- Note ---\n // Cache is updated with only alive experiments\n trackingCache.add({\n key: visitorCode,\n data: updatedCacheData,\n lifetime: CACHE_ITEM_LIFETIME,\n });\n\n return resultString;\n }\n\n static async trackData({\n visitorCode,\n dataManager,\n requester,\n isOfflineModeOn,\n offlineTrackingStorage,\n isConsentProvided,\n isMappingIdentifier,\n }: TrackDataParametersType): Promise<void> {\n const dataUrl = this.getDataUrl({\n visitorCode,\n dataManager,\n isConsentProvided,\n });\n\n if (!isConsentProvided && !dataUrl) {\n return;\n }\n\n const userAgent = this.getUserAgent(visitorCode, dataManager);\n\n const parameters: TrackDataParamsType = {\n visitorCode,\n body: dataUrl,\n userAgent,\n isMappingIdentifier,\n };\n\n const result = await requester.trackData(parameters);\n\n const cleanup = () =>\n isConsentProvided\n ? dataManager.clearUnsentData(visitorCode)\n : dataManager.clearUnsentDataByKey(\n visitorCode,\n KameleoonData.Conversion,\n );\n\n if (result.ok) {\n cleanup();\n }\n\n if (!result.ok && isOfflineModeOn) {\n this.addItemToOfflineTracking({\n item: parameters,\n storage: offlineTrackingStorage,\n isExperiment: false,\n onSuccess: cleanup,\n });\n }\n\n await this.sendOfflineTracking({\n requester,\n storage: offlineTrackingStorage,\n });\n }\n\n static getNonce(): string {\n let nonce: string = '';\n\n for (let i = 0; i < NONCE_LENGTH; i++) {\n const randomIndex = Math.floor(Math.random() * NONCE_LENGTH);\n nonce += HEX_CHARACTERS.charAt(randomIndex);\n }\n\n return nonce;\n }\n\n static compareSemVer({\n version,\n compareVersion,\n operator,\n }: {\n version: string;\n compareVersion: string;\n operator: VersionMatchType;\n }): Result<boolean, KameleoonError> {\n const versionResult = this.validateVersion(version);\n const compareVersionResult = this.validateVersion(compareVersion);\n\n if (!versionResult.ok) {\n return Err(versionResult.error);\n }\n\n if (!compareVersionResult.ok) {\n return Err(compareVersionResult.error);\n }\n\n const [major, minor, patch] = versionResult.data;\n const [compareMajor, compareMinor, comparePatch] =\n compareVersionResult.data;\n\n const [isMajorEqual, isMinorEqual, isPatchEqual] = [\n major === compareMajor,\n minor === compareMinor,\n patch === comparePatch,\n ];\n\n switch (operator) {\n case VersionMatchType.EQUAL:\n return Ok(isMajorEqual && isMinorEqual && isPatchEqual);\n case VersionMatchType.GREATER:\n return Ok(\n major > compareMajor ||\n (isMajorEqual && minor > compareMinor) ||\n (isMajorEqual && isMinorEqual && patch > comparePatch),\n );\n case VersionMatchType.LOWER:\n return Ok(\n major < compareMajor ||\n (isMajorEqual && minor < compareMinor) ||\n (isMajorEqual && isMinorEqual && patch < comparePatch),\n );\n default:\n exhaustCheck(operator);\n }\n }\n\n static generateRandomString(length: number): string {\n const characters = 'abcdefghijklmnopqrstuvwxyz0123456789';\n const randomCharacterArray: string[] = [];\n\n if (length < 0) {\n return '';\n }\n\n for (let i = 0; i < length; i++) {\n randomCharacterArray.push(\n characters[Math.floor(Math.random() * characters.length)],\n );\n }\n\n return randomCharacterArray.join('');\n }\n\n static async sendOfflineTracking({\n requester,\n storage,\n }: SendOfflineTrackingParametersType) {\n const readResult = storage.read();\n\n if (readResult.ok && readResult.data.requestParameters) {\n const { requestParameters } = readResult.data;\n const successfulTimestamps: number[] = [];\n\n // --- Note ---\n // `for..of` + `await` is used to make sure that failed requests are sent one by one\n // without risk of getting the same timestamp at the server, which might happen, for example,\n // with `.forEach` or `.map` starting requests in async callbacks at the same time\n for (const parameters of requestParameters) {\n const { timestamp, isExperiment, ...params } = parameters;\n let result: Result<boolean, void>;\n\n if (isExperiment) {\n result = await requester.trackExperiment(\n params as TrackExperimentParamsType,\n );\n } else {\n result = await requester.trackData(params as TrackDataParamsType);\n }\n\n result.ok && result.data && successfulTimestamps.push(timestamp);\n }\n\n this.deleteFromOfflineTracking({\n storage,\n timestamps: successfulTimestamps,\n });\n }\n }\n\n private static addItemToOfflineTracking({\n item,\n isExperiment,\n storage,\n onSuccess,\n }: AddToOfflineTrackingParametersType): void {\n const readResult = storage.read();\n\n const data = readResult.ok ? readResult.data : {};\n\n const { requestParameters } = data;\n\n const newItem = {\n ...item,\n timestamp: new Date().getTime(),\n isExperiment,\n };\n\n const newRequestParameters = requestParameters\n ? [...requestParameters, newItem]\n : [newItem];\n\n const writeResult = storage.write({\n requestParameters: newRequestParameters,\n });\n\n if (writeResult.ok && onSuccess) {\n onSuccess();\n }\n }\n\n private static deleteFromOfflineTracking({\n timestamps,\n storage,\n }: DeleteFromOfflineTrackingParametersType): void {\n const readResult = storage.read();\n\n if (readResult.ok) {\n const { requestParameters } = readResult.data;\n\n const newParameters = requestParameters?.filter(\n (item) => !timestamps.includes(item.timestamp),\n );\n\n storage.write({ requestParameters: newParameters });\n }\n }\n\n private static validateVersion(\n version: string,\n ): Result<[number, number, number], KameleoonError> {\n const versionParts = version.split('.').map((x) => parseInt(x, 10));\n\n while (versionParts.length < 3) {\n versionParts.push(0);\n }\n\n if (versionParts.some((item) => isNaN(item))) {\n return Err(\n new KameleoonError(KameleoonException.SemanticVersionParse, version),\n );\n }\n\n return Ok(versionParts.slice(0, 3) as [number, number, number]);\n }\n}\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.VisitorCodeManager=void 0;var _constants=require("../constants"),_storage=require("../storage"),_utilities=require("../utilities"),_constants2=require("./constants");function _defineProperty(a,b,c){return b=_toPropertyKey(b),b in a?Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!0}):a[b]=c,a}function _toPropertyKey(a){var b=_toPrimitive(a,"string");return"symbol"==typeof b?b:b+""}function _toPrimitive(a,b){if("object"!=typeof a||!a)return a;var c=a[Symbol.toPrimitive];if(void 0!==c){var d=c.call(a,b||"default");if("object"!=typeof d)return d;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===b?String:Number)(a)}class VisitorCodeManager{constructor(){_defineProperty(this,"isConsentRequired",!1),_defineProperty(this,"setDataCallback",void 0),_defineProperty(this,"getDataCallback",void 0)}set consentRequired(a){this.isConsentRequired=a}get consentRequired(){return this.isConsentRequired}set getData(a){this.getDataCallback=a}set setData(a){this.setDataCallback=a}get setData(){if(this.setDataCallback)return this.setDataCallback;throw new Error("Missing setDataCallback!")}getVisitorCode(a){if(this.getDataCallback&&this.setDataCallback){const b=this.getDataCallback(_storage.KameleoonStorageKey.VisitorCode);if(b)return b;let c=a;return c?_utilities.Utilities.validateVisitorCode(c).throw():c=_utilities.Utilities.generateRandomString(_constants.VISITOR_CODE_LENGTH),this.isConsentRequired||this.setDataCallback({visitorCode:c,key:_storage.KameleoonStorageKey.VisitorCode,maxAge:_constants2.DEFAULT_MAX_AGE,path:_constants2.PATH}),c}throw new Error("Missing getDataCallback && setDataCallback callbacks in getVisitorCode!")}}exports.VisitorCodeManager=VisitorCodeManager;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.VisitorCodeManager=void 0;var _constants=require("../constants"),_storage=require("../storage"),_utilities=require("../utilities"),_constants2=require("./constants");function _defineProperty(a,b,c){return b=_toPropertyKey(b),b in a?Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!0}):a[b]=c,a}function _toPropertyKey(a){var b=_toPrimitive(a,"string");return"symbol"==typeof b?b:b+""}function _toPrimitive(a,b){if("object"!=typeof a||!a)return a;var c=a[Symbol.toPrimitive];if(void 0!==c){var d=c.call(a,b||"default");if("object"!=typeof d)return d;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===b?String:Number)(a)}class VisitorCodeManager{constructor(){_defineProperty(this,"isConsentRequired",!1),_defineProperty(this,"setDataCallback",void 0),_defineProperty(this,"getDataCallback",void 0)}set consentRequired(a){this.isConsentRequired=a}get consentRequired(){return this.isConsentRequired}set getData(a){this.getDataCallback=a}set setData(a){this.setDataCallback=a}get setData(){if(this.setDataCallback)return this.setDataCallback;throw new Error("Missing setDataCallback!")}getVisitorCode(a){if(!this.getDataCallback||!this.setDataCallback)throw new Error("Missing getDataCallback or setDataCallback methods in getVisitorCode!");const b=this.getDataCallback(_storage.KameleoonStorageKey.VisitorCode);if(b)return b;let c=a;return c?_utilities.Utilities.validateVisitorCode(c).throw():c=_utilities.Utilities.generateRandomString(_constants.VISITOR_CODE_LENGTH),this.isConsentRequired||this.setDataCallback({visitorCode:c,key:_storage.KameleoonStorageKey.VisitorCode,maxAge:_constants2.DEFAULT_MAX_AGE,path:_constants2.PATH}),c}}exports.VisitorCodeManager=VisitorCodeManager;
2
2
  //# sourceMappingURL=visitorCodeManager.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"visitorCodeManager.js","names":["VisitorCodeManager","constructor","_defineProperty","consentRequired","isRequired","isConsentRequired","getData","callback","getDataCallback","setData","setDataCallback","Error","getVisitorCode","defaultVisitorCode","existingVisitorCode","KameleoonStorageKey","VisitorCode","visitorCode","Utilities","validateVisitorCode","throw","generateRandomString","VISITOR_CODE_LENGTH","key","maxAge","DEFAULT_MAX_AGE","path","PATH","exports"],"sources":["../../src/visitorCodeManager/visitorCodeManager.ts"],"sourcesContent":["import { VISITOR_CODE_LENGTH } from 'src/constants';\nimport { KameleoonStorageKey } from 'src/storage';\nimport { Utilities } from 'src/utilities';\nimport { SetDataCallbackParametersType } from 'src/types';\nimport { IVisitorCodeManager } from './types';\nimport { DEFAULT_MAX_AGE, PATH } from './constants';\n\n/**\n * VisitorCodeManager - a class which manages visitor codes using cookies, offering functions to generate, retrieve,\n * and handle these codes while considering user consent.\n **/\nexport class VisitorCodeManager implements IVisitorCodeManager {\n private isConsentRequired: boolean = false;\n private setDataCallback?: (params: SetDataCallbackParametersType) => void;\n private getDataCallback?: (key: string) => string | null;\n\n set consentRequired(isRequired: boolean) {\n this.isConsentRequired = isRequired;\n }\n\n get consentRequired(): boolean {\n return this.isConsentRequired;\n }\n\n set getData(callback: () => string) {\n this.getDataCallback = callback;\n }\n\n set setData(callback: (params: SetDataCallbackParametersType) => void) {\n this.setDataCallback = callback;\n }\n\n get setData(): (params: SetDataCallbackParametersType) => void {\n if (this.setDataCallback) {\n return this.setDataCallback;\n }\n\n throw new Error('Missing setDataCallback!');\n }\n\n public getVisitorCode(defaultVisitorCode?: string): string {\n if (this.getDataCallback && this.setDataCallback) {\n const existingVisitorCode = this.getDataCallback(\n KameleoonStorageKey.VisitorCode,\n );\n\n if (existingVisitorCode) {\n return existingVisitorCode;\n }\n\n let visitorCode = defaultVisitorCode;\n\n if (visitorCode) {\n Utilities.validateVisitorCode(visitorCode).throw();\n } else {\n visitorCode = Utilities.generateRandomString(VISITOR_CODE_LENGTH);\n }\n\n if (!this.isConsentRequired) {\n this.setDataCallback({\n visitorCode,\n key: KameleoonStorageKey.VisitorCode,\n maxAge: DEFAULT_MAX_AGE,\n path: PATH,\n });\n }\n\n return visitorCode;\n }\n\n throw new Error(\n 'Missing getDataCallback && setDataCallback callbacks in getVisitorCode!',\n );\n }\n}\n"],"mappings":"qvBAWO,KAAM,CAAAA,kBAAkD,CAAAC,YAAA,EAAAC,eAAA,8BAAAA,eAAA,gCAAAA,eAAA,gCAK7D,GAAI,CAAAC,eAAeA,CAACC,CAAmB,CAAE,CACvC,IAAI,CAACC,iBAAiB,CAAGD,CAC3B,CAEA,GAAI,CAAAD,eAAeA,CAAA,CAAY,CAC7B,MAAO,KAAI,CAACE,iBACd,CAEA,GAAI,CAAAC,OAAOA,CAACC,CAAsB,CAAE,CAClC,IAAI,CAACC,eAAe,CAAGD,CACzB,CAEA,GAAI,CAAAE,OAAOA,CAACF,CAAyD,CAAE,CACrE,IAAI,CAACG,eAAe,CAAGH,CACzB,CAEA,GAAI,CAAAE,OAAOA,CAAA,CAAoD,CAC7D,GAAI,IAAI,CAACC,eAAe,CACtB,MAAO,KAAI,CAACA,eAAe,CAG7B,KAAM,IAAI,CAAAC,KAAK,CAAC,0BAA0B,CAC5C,CAEOC,cAAcA,CAACC,CAA2B,CAAU,CACzD,GAAI,IAAI,CAACL,eAAe,EAAI,IAAI,CAACE,eAAe,CAAE,CAChD,KAAM,CAAAI,CAAmB,CAAG,IAAI,CAACN,eAAe,CAC9CO,4BAAmB,CAACC,WACtB,CAAC,CAED,GAAIF,CAAmB,CACrB,MAAO,CAAAA,CAAmB,CAG5B,GAAI,CAAAG,CAAW,CAAGJ,CAAkB,CAiBpC,MAfI,CAAAI,CAAW,CACbC,oBAAS,CAACC,mBAAmB,CAACF,CAAW,CAAC,CAACG,KAAK,CAAC,CAAC,CAElDH,CAAW,CAAGC,oBAAS,CAACG,oBAAoB,CAACC,8BAAmB,CAAC,CAG9D,IAAI,CAACjB,iBAAiB,EACzB,IAAI,CAACK,eAAe,CAAC,CACnBO,WAAW,CAAXA,CAAW,CACXM,GAAG,CAAER,4BAAmB,CAACC,WAAW,CACpCQ,MAAM,CAAEC,2BAAe,CACvBC,IAAI,CAAEC,gBACR,CAAC,CAAC,CAGGV,CACT,CAEA,KAAM,IAAI,CAAAN,KAAK,CACb,yEACF,CACF,CACF,CAACiB,OAAA,CAAA5B,kBAAA,CAAAA,kBAAA"}
1
+ {"version":3,"file":"visitorCodeManager.js","names":["VisitorCodeManager","constructor","_defineProperty","consentRequired","isRequired","isConsentRequired","getData","callback","getDataCallback","setData","setDataCallback","Error","getVisitorCode","defaultVisitorCode","existingVisitorCode","KameleoonStorageKey","VisitorCode","visitorCode","Utilities","validateVisitorCode","throw","generateRandomString","VISITOR_CODE_LENGTH","key","maxAge","DEFAULT_MAX_AGE","path","PATH","exports"],"sources":["../../src/visitorCodeManager/visitorCodeManager.ts"],"sourcesContent":["import { VISITOR_CODE_LENGTH } from 'src/constants';\nimport { KameleoonStorageKey } from 'src/storage';\nimport { Utilities } from 'src/utilities';\nimport { SetDataCallbackParametersType } from 'src/types';\nimport { IVisitorCodeManager } from './types';\nimport { DEFAULT_MAX_AGE, PATH } from './constants';\n\n/**\n * VisitorCodeManager - a class which manages visitor codes using cookies, offering functions to generate, retrieve,\n * and handle these codes while considering user consent.\n **/\nexport class VisitorCodeManager implements IVisitorCodeManager {\n private isConsentRequired: boolean = false;\n private setDataCallback?: (params: SetDataCallbackParametersType) => void;\n private getDataCallback?: (key: string) => string | null;\n\n set consentRequired(isRequired: boolean) {\n this.isConsentRequired = isRequired;\n }\n\n get consentRequired(): boolean {\n return this.isConsentRequired;\n }\n\n set getData(callback: () => string) {\n this.getDataCallback = callback;\n }\n\n set setData(callback: (params: SetDataCallbackParametersType) => void) {\n this.setDataCallback = callback;\n }\n\n get setData(): (params: SetDataCallbackParametersType) => void {\n if (this.setDataCallback) {\n return this.setDataCallback;\n }\n\n throw new Error('Missing setDataCallback!');\n }\n\n public getVisitorCode(defaultVisitorCode?: string): string {\n if (!this.getDataCallback || !this.setDataCallback) {\n throw new Error(\n 'Missing getDataCallback or setDataCallback methods in getVisitorCode!',\n );\n }\n\n const existingVisitorCode = this.getDataCallback(\n KameleoonStorageKey.VisitorCode,\n );\n\n if (existingVisitorCode) {\n return existingVisitorCode;\n }\n\n let visitorCode = defaultVisitorCode;\n\n if (visitorCode) {\n Utilities.validateVisitorCode(visitorCode).throw();\n } else {\n visitorCode = Utilities.generateRandomString(VISITOR_CODE_LENGTH);\n }\n\n if (!this.isConsentRequired) {\n this.setDataCallback({\n visitorCode,\n key: KameleoonStorageKey.VisitorCode,\n maxAge: DEFAULT_MAX_AGE,\n path: PATH,\n });\n }\n\n return visitorCode;\n }\n}\n"],"mappings":"qvBAWO,KAAM,CAAAA,kBAAkD,CAAAC,YAAA,EAAAC,eAAA,8BAAAA,eAAA,gCAAAA,eAAA,gCAK7D,GAAI,CAAAC,eAAeA,CAACC,CAAmB,CAAE,CACvC,IAAI,CAACC,iBAAiB,CAAGD,CAC3B,CAEA,GAAI,CAAAD,eAAeA,CAAA,CAAY,CAC7B,MAAO,KAAI,CAACE,iBACd,CAEA,GAAI,CAAAC,OAAOA,CAACC,CAAsB,CAAE,CAClC,IAAI,CAACC,eAAe,CAAGD,CACzB,CAEA,GAAI,CAAAE,OAAOA,CAACF,CAAyD,CAAE,CACrE,IAAI,CAACG,eAAe,CAAGH,CACzB,CAEA,GAAI,CAAAE,OAAOA,CAAA,CAAoD,CAC7D,GAAI,IAAI,CAACC,eAAe,CACtB,MAAO,KAAI,CAACA,eAAe,CAG7B,KAAM,IAAI,CAAAC,KAAK,CAAC,0BAA0B,CAC5C,CAEOC,cAAcA,CAACC,CAA2B,CAAU,CACzD,GAAI,CAAC,IAAI,CAACL,eAAe,EAAI,CAAC,IAAI,CAACE,eAAe,CAChD,KAAM,IAAI,CAAAC,KAAK,CACb,uEACF,CAAC,CAGH,KAAM,CAAAG,CAAmB,CAAG,IAAI,CAACN,eAAe,CAC9CO,4BAAmB,CAACC,WACtB,CAAC,CAED,GAAIF,CAAmB,CACrB,MAAO,CAAAA,CAAmB,CAG5B,GAAI,CAAAG,CAAW,CAAGJ,CAAkB,CAiBpC,MAfI,CAAAI,CAAW,CACbC,oBAAS,CAACC,mBAAmB,CAACF,CAAW,CAAC,CAACG,KAAK,CAAC,CAAC,CAElDH,CAAW,CAAGC,oBAAS,CAACG,oBAAoB,CAACC,8BAAmB,CAAC,CAG9D,IAAI,CAACjB,iBAAiB,EACzB,IAAI,CAACK,eAAe,CAAC,CACnBO,WAAW,CAAXA,CAAW,CACXM,GAAG,CAAER,4BAAmB,CAACC,WAAW,CACpCQ,MAAM,CAAEC,2BAAe,CACvBC,IAAI,CAAEC,gBACR,CAAC,CAAC,CAGGV,CACT,CACF,CAACW,OAAA,CAAA5B,kBAAA,CAAAA,kBAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kameleoon/javascript-sdk-core",
3
- "version": "4.2.0",
3
+ "version": "4.4.0",
4
4
  "description": "Kameleoon JS SDK Core",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -9,7 +9,7 @@
9
9
  ],
10
10
  "scripts": {
11
11
  "clean": "rimraf dist && rimraf tsconfig.tsbuildinfo",
12
- "start": "npm run clean && tsc -w",
12
+ "dev": "npm run clean && tsc -w -p tsconfig.watch.json",
13
13
  "build": "npm run clean && npm run build:types && npm run build:js",
14
14
  "build:types": "tsc --emitDeclarationOnly && tsc-alias",
15
15
  "build:js": "babel src --out-dir dist --extensions \".ts,.tsx\" --source-maps true",
@@ -1,4 +0,0 @@
1
- /**
2
- * @constant default cleanup interval in minutes
3
- * */
4
- export declare const DEFAULT_CLEANUP_INTERVAL = 30;
@@ -1,2 +0,0 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.DEFAULT_CLEANUP_INTERVAL=void 0;const DEFAULT_CLEANUP_INTERVAL=exports.DEFAULT_CLEANUP_INTERVAL=30;
2
- //# sourceMappingURL=constants.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"constants.js","names":["DEFAULT_CLEANUP_INTERVAL","exports"],"sources":["../../src/kameleoonData/constants.ts"],"sourcesContent":["/**\n * @constant default cleanup interval in minutes\n * */\nexport const DEFAULT_CLEANUP_INTERVAL = 30;\n"],"mappings":"4GAGO,KAAM,CAAAA,wBAAwB,CAAAC,OAAA,CAAAD,wBAAA,CAAG,EAAE"}