@kameleoon/javascript-sdk-core 3.2.1 → 3.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/clientConfiguration/clientConfiguration.d.ts +2 -2
- package/dist/clientConfiguration/clientConfiguration.js +1 -1
- package/dist/clientConfiguration/clientConfiguration.js.map +1 -1
- package/dist/clientConfiguration/types.d.ts +2 -2
- package/dist/clientConfiguration/types.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/kameleoonClient.d.ts +11 -23
- package/dist/kameleoonClient.js +1 -1
- package/dist/kameleoonClient.js.map +1 -1
- package/dist/kameleoonData/dataProcessor.js +1 -1
- package/dist/kameleoonData/dataProcessor.js.map +1 -1
- package/dist/kameleoonError/constants.js +1 -1
- package/dist/kameleoonError/constants.js.map +1 -1
- package/dist/kameleoonUtils.js +1 -1
- package/dist/kameleoonUtils.js.map +1 -1
- package/dist/requester/constants.d.ts +3 -1
- package/dist/requester/constants.js +1 -1
- package/dist/requester/constants.js.map +1 -1
- package/dist/requester/index.d.ts +2 -2
- package/dist/requester/index.js +1 -1
- package/dist/requester/index.js.map +1 -1
- package/dist/requester/requester.d.ts +4 -4
- package/dist/requester/requester.js +1 -1
- package/dist/requester/requester.js.map +1 -1
- package/dist/requester/types.d.ts +11 -7
- package/dist/requester/types.js +1 -1
- package/dist/requester/types.js.map +1 -1
- package/dist/storage/types.d.ts +5 -1
- package/dist/storage/types.js.map +1 -1
- package/dist/targeting/conditions/targetFeatureFlag.js +1 -1
- package/dist/targeting/conditions/targetFeatureFlag.js.map +1 -1
- package/dist/types.d.ts +17 -47
- package/dist/types.js.map +1 -1
- package/dist/utilities/types.d.ts +7 -0
- package/dist/utilities/types.js.map +1 -1
- package/dist/utilities/utilities.d.ts +5 -9
- package/dist/utilities/utilities.js +1 -1
- package/dist/utilities/utilities.js.map +1 -1
- package/dist/variationConfiguration/types.d.ts +6 -1
- package/dist/variationConfiguration/types.js.map +1 -1
- package/dist/variationConfiguration/variationConfiguration.d.ts +11 -1
- package/dist/variationConfiguration/variationConfiguration.js +1 -1
- package/dist/variationConfiguration/variationConfiguration.js.map +1 -1
- package/dist/visitorCodeManager/index.d.ts +1 -0
- package/dist/visitorCodeManager/index.js +2 -0
- package/dist/visitorCodeManager/index.js.map +1 -0
- package/dist/visitorCodeManager/visitorCodeManager.d.ts +14 -0
- package/dist/visitorCodeManager/visitorCodeManager.js +2 -0
- package/dist/visitorCodeManager/visitorCodeManager.js.map +1 -0
- package/package.json +1 -1
- package/dist/cookieManager/cookieManager.d.ts +0 -16
- package/dist/cookieManager/cookieManager.js +0 -2
- package/dist/cookieManager/cookieManager.js.map +0 -1
- package/dist/cookieManager/index.d.ts +0 -1
- package/dist/cookieManager/index.js +0 -2
- package/dist/cookieManager/index.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utilities.js","names":["Utilities","a","_classCallCheck","_createClass","key","value","checkTargeting","segment","visitorCode","targetingData","experimentId","variationConfiguration","clientConfiguration","packageInfo","dataManager","conditionsData","firstLevel","length","Ok","Err","KameleoonError","KameleoonException","Initialization","variations","assignedVariationsResult","getStoredVariations","ok","data","targetingTree","getTree","trees","segments","ruleMap","hasTargetingType","TargetingType","SEGMENT","TARGET_FEATURE_FLAG","result","evaluate","variationData","sdkInfo","validateVisitorCode","VisitorCodeEmpty","VISITOR_CODE_MAX_LENGTH","VisitorCodeMaxLength","getDataUrl","b","updateUrl","url","shouldSendConversionData","type","KameleoonData","Conversion","isConsentProvided","resultUrl","push","UrlParameter","Nonce","getNonce","unsentData","getUnsentData","size","i","j","_createForOfIteratorHelper","values","s","n","done","item","Array","isArray","forEach","arrayItem","e","f","join","apply","arguments","_asyncToGenerator","_regeneratorRuntime","mark","c","d","g","h","k","l","m","o","p","q","r","t","wrap","u","prev","next","featureFlagVariation","requester","isOfflineModeOn","offlineTrackingStorage","variationId","rule","isTargetedRule","userAgent","getUserAgent","dataUrl","hasVariationData","abrupt","resultVariationId","isUnallocated","parameters","body","trackExperiment","sent","clearUnsentData","clearUnsentDataByKey","addItemToOfflineTracking","storage","isExperiment","stop","convertTimeUnit","time","timeUnit","timeMap","_defineProperty","TimeUnit","Minute","Milliseconds","Hour","Day","Week","Month","parseFeatureVariable","variable","VariableType","BOOLEAN","STRING","NUMBER","numberValue","Number","isNaN","NumberParse","JSON","jsonValue","parse","err","JSONParse","exhaustCheck","parseVisitorData","filters","currentVisit","previousVisits","browserFilter","browser","customDataFilter","customData","operatingSystemFilter","operatingSystem","conversionsFilter","conversions","deviceFilter","device","geolocationFilter","geolocation","experimentsFilter","experiments","pageViewFilter","pageViews","visits","_toConsumableArray","visitorData","resultData","PageView","_listFromVisits","Browser","_fromVisits","visit","experimentData","experimentEvents","x","y","experimentEvent","A","id","updateStoredVariations","Device","GeolocationData","CustomData","OperatingSystem","visitsData","collectedVisitsData","VisitsData","_fromRemoteVisits","parseRegExp","split","_slicedToArray","_","expression","flags","RegExp","storedData","storedTargetingData","userAgentData","UserAgent","isCustomData","dataItem","insertInOrderedListMutably","list","element","order","includes","index","findIndex","Order","Ascending","splice","updateCache","cacheManager","cacheData","getAliveItem","newCacheData","_objectSpread","expirationTime","Date","now","CACHE_ITEM_LIFETIME","Second","add","lifetime","getTrackingCode","trackingCache","resultString","updatedCacheData","Object","entries","concat","sendOfflineTracking","trackData","cleanup","onSuccess","randomNumber","hexLength","HEX_CHARACTERS","nonce","Math","floor","random","substring","readResult","read","requestParameters","successfulTimestamps","timestamp","params","_objectWithoutProperties","_excluded","t0","finish","deleteFromOfflineTracking","timestamps","compareSemVer","version","compareVersion","operator","versionResult","validateVersion","compareVersionResult","error","major","minor","patch","compareMajor","compareMinor","comparePatch","isMajorEqual","isMinorEqual","isPatchEqual","VersionMatchType","EQUAL","GREATER","LOWER","isServerEnvironment","response","generateRandomString","characters","randomCharacterArray","newItem","getTime","newRequestParameters","writeResult","write","newParameters","filter","versionParts","map","parseInt","some","SemanticVersionParse","slice","exports"],"sources":["../../src/utilities/utilities.ts"],"sourcesContent":["import { ServerResponse } from 'http';\nimport { Err, Ok, Result } from 'ts-res';\nimport {\n KameleoonError,\n KameleoonException,\n exhaustCheck,\n} from 'src/kameleoonError';\nimport {\n FeatureVariableResultType,\n Milliseconds,\n TrackingCacheItemType,\n VariableType,\n} from 'src/types';\nimport { FeatureVariableType, JSONType } from 'src/clientConfiguration';\nimport {\n Browser,\n Conversion,\n CustomData,\n DataManager,\n Device,\n GeolocationData,\n KameleoonData,\n KameleoonDataType,\n OperatingSystem,\n PageView,\n VisitsData,\n} from 'src/kameleoonData';\nimport { CACHE_ITEM_LIFETIME } from 'src/constants';\nimport { CacheManager } from 'src/cacheManager';\nimport {\n TrackExperimentParamsType,\n TrackDataParamsType,\n VisitType,\n UrlParameter,\n} from 'src/requester';\nimport { VersionMatchType, TargetingType } from 'src/targeting';\nimport { KameleoonVisitorDataType } from 'src/kameleoonData/types';\nimport { FeatureFlagVariationsType } from 'src/storage/types';\nimport { VISITOR_CODE_MAX_LENGTH, HEX_CHARACTERS } from './constants';\nimport {\n CheckTargetingParametersType,\n ManageCacheParametersType,\n TrackDataParametersType,\n TrackRuleParametersType,\n AddToOfflineTrackingParametersType,\n SendOfflineTrackingParametersType,\n DeleteFromOfflineTrackingParametersType,\n ParseVisitorDataParametersType,\n InsertInOrderedListParametersType,\n Order,\n TimeUnit,\n GetDataUrlParametersType,\n 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 resultUrl.push(\n data.url + UrlParameter.Nonce + Utilities.getNonce() + '\\n',\n );\n }\n }\n\n for (const item of unsentData.values()) {\n if (Array.isArray(item)) {\n item.forEach((arrayItem) => updateUrl(arrayItem));\n } else {\n updateUrl(item);\n }\n }\n\n return resultUrl.join('');\n }\n\n static async trackFeatureExperiment({\n featureFlagVariation,\n dataManager,\n visitorCode,\n requester,\n isOfflineModeOn,\n isConsentProvided,\n offlineTrackingStorage,\n }: TrackRuleParametersType): Promise<void> {\n const { variationId, rule, isTargetedRule } = featureFlagVariation;\n\n const userAgent = this.getUserAgent(visitorCode, dataManager);\n\n const dataUrl = this.getDataUrl({\n visitorCode,\n dataManager,\n isConsentProvided,\n });\n\n if (!isConsentProvided) {\n const hasVariationData = !!variationId || !!rule;\n\n if (!dataUrl && !hasVariationData) {\n return;\n }\n }\n\n const resultVariationId = variationId || 0;\n const isUnallocated = variationId === null;\n\n // --- Note ---\n // Experiment id is not needed for unallocated visitors\n // So we just use 0 as a fallback\n const experimentId = rule ? rule.experimentId : 0;\n\n const parameters = {\n visitorCode,\n isUnallocated,\n body: dataUrl,\n experimentId,\n variationId: resultVariationId,\n userAgent,\n isTargetedRule,\n isConsentProvided,\n };\n\n const result = await requester.trackExperiment(parameters);\n\n if (result.ok) {\n if (!isConsentProvided) {\n dataManager.clearUnsentDataByKey(visitorCode, KameleoonData.Conversion);\n } else {\n dataManager.clearUnsentData(visitorCode);\n }\n }\n\n if (!result.ok && isOfflineModeOn) {\n this.addItemToOfflineTracking({\n item: parameters,\n storage: offlineTrackingStorage,\n isExperiment: true,\n });\n }\n }\n\n static convertTimeUnit(time: number, timeUnit: TimeUnit): number {\n const timeMap = {\n [TimeUnit.Minute]: Milliseconds.Minute,\n [TimeUnit.Hour]: Milliseconds.Hour,\n [TimeUnit.Day]: Milliseconds.Day,\n [TimeUnit.Week]: Milliseconds.Week,\n [TimeUnit.Month]: Milliseconds.Month,\n };\n\n return time / timeMap[timeUnit];\n }\n\n static parseFeatureVariable(\n variable: FeatureVariableType,\n ): Result<FeatureVariableResultType, KameleoonError> {\n const { type, value } = variable;\n\n switch (type) {\n case VariableType.BOOLEAN:\n return Ok({\n type,\n value: Boolean(value),\n });\n case VariableType.STRING:\n return Ok({\n type,\n value: String(value),\n });\n case VariableType.NUMBER:\n const numberValue = Number(value);\n\n if (Number.isNaN(numberValue)) {\n return Err(\n new KameleoonError(KameleoonException.NumberParse, String(value)),\n );\n }\n\n return Ok({\n type,\n value: numberValue,\n });\n case VariableType.JSON:\n try {\n const jsonValue: JSONType = JSON.parse(String(variable.value));\n\n return Ok({\n type,\n value: jsonValue,\n });\n } catch (err) {\n return Err(new KameleoonError(KameleoonException.JSONParse, err));\n }\n default:\n exhaustCheck(type);\n }\n }\n\n static parseVisitorData({\n data,\n filters,\n visitorCode,\n variationConfiguration,\n }: ParseVisitorDataParametersType): 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] = variationId;\n }\n }\n\n variationConfiguration.updateStoredVariations(\n visitorCode,\n experimentData,\n );\n }\n\n // --- Device ---\n if (deviceFilter) {\n const device = Device._fromVisits(visits);\n\n if (device) {\n resultData.push(device);\n }\n }\n\n // --- Geolocation ---\n if (geolocationFilter) {\n const geolocation = GeolocationData._fromVisits(visits);\n\n if (geolocation) {\n resultData.push(geolocation);\n }\n }\n\n // --- Custom data ---\n if (customDataFilter) {\n resultData.push(...CustomData._listFromVisits(visits));\n }\n\n // --- Operating system ---\n if (operatingSystemFilter) {\n const operatingSystem = OperatingSystem._fromVisits(visits);\n\n if (operatingSystem) {\n resultData.push(operatingSystem);\n }\n }\n\n // --- Conversions ---\n if (conversionsFilter) {\n resultData.push(...Conversion._listFromVisits(visits));\n }\n\n // --- 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 }: TrackDataParametersType): Promise<void> {\n await this.sendOfflineTracking({\n requester,\n storage: offlineTrackingStorage,\n });\n\n const dataUrl = this.getDataUrl({\n visitorCode,\n dataManager,\n isConsentProvided,\n });\n\n if (!isConsentProvided && !dataUrl) {\n return;\n }\n\n const userAgent = this.getUserAgent(visitorCode, dataManager);\n\n const parameters = {\n visitorCode,\n body: dataUrl,\n userAgent,\n };\n\n const result = await requester.trackData(parameters);\n\n const cleanup = () =>\n isConsentProvided\n ? dataManager.clearUnsentData(visitorCode)\n : dataManager.clearUnsentDataByKey(\n visitorCode,\n KameleoonData.Conversion,\n );\n\n if (result.ok) {\n cleanup();\n }\n\n if (!result.ok && isOfflineModeOn) {\n this.addItemToOfflineTracking({\n item: parameters,\n storage: offlineTrackingStorage,\n isExperiment: false,\n onSuccess: cleanup,\n });\n }\n }\n\n static getNonce(): string {\n const hexLength = HEX_CHARACTERS.length;\n let nonce: string = '';\n\n for (let i = 0; i < hexLength; i++) {\n const randomNumber = Math.floor(Math.random() * hexLength);\n nonce += HEX_CHARACTERS.substring(randomNumber, randomNumber + 1);\n }\n\n return nonce;\n }\n\n static async sendOfflineTracking({\n requester,\n storage,\n }: SendOfflineTrackingParametersType) {\n const readResult = storage.read();\n\n if (readResult.ok && readResult.data.requestParameters) {\n const { requestParameters } = readResult.data;\n const successfulTimestamps: number[] = [];\n\n // --- Note ---\n // `for..of` + `await` is used to make sure that failed requests are sent one by one\n // without risk of getting the same timestamp at the server, which might happen, for example,\n // with `.forEach` or `.map` starting requests in async callbacks at the same time\n for (const parameters of requestParameters) {\n const { timestamp, isExperiment, ...params } = parameters;\n let result: Result<boolean, KameleoonError>;\n\n if (isExperiment) {\n result = await requester.trackExperiment(\n params as TrackExperimentParamsType,\n );\n } else {\n result = await requester.trackData(params as TrackDataParamsType);\n }\n\n result.ok && result.data && successfulTimestamps.push(timestamp);\n }\n\n this.deleteFromOfflineTracking({\n storage,\n timestamps: successfulTimestamps,\n });\n }\n }\n\n static compareSemVer({\n version,\n compareVersion,\n operator,\n }: {\n version: string;\n compareVersion: string;\n operator: VersionMatchType;\n }): Result<boolean, KameleoonError> {\n const versionResult = this.validateVersion(version);\n const compareVersionResult = this.validateVersion(compareVersion);\n\n if (!versionResult.ok) {\n return Err(versionResult.error);\n }\n\n if (!compareVersionResult.ok) {\n return Err(compareVersionResult.error);\n }\n\n const [major, minor, patch] = versionResult.data;\n const [compareMajor, compareMinor, comparePatch] =\n compareVersionResult.data;\n\n const [isMajorEqual, isMinorEqual, isPatchEqual] = [\n major === compareMajor,\n minor === compareMinor,\n patch === comparePatch,\n ];\n\n switch (operator) {\n case VersionMatchType.EQUAL:\n return Ok(isMajorEqual && isMinorEqual && isPatchEqual);\n case VersionMatchType.GREATER:\n return Ok(\n major > compareMajor ||\n (isMajorEqual && minor > compareMinor) ||\n (isMajorEqual && isMinorEqual && patch > comparePatch),\n );\n case VersionMatchType.LOWER:\n return Ok(\n major < compareMajor ||\n (isMajorEqual && minor < compareMinor) ||\n (isMajorEqual && isMinorEqual && patch < comparePatch),\n );\n default:\n exhaustCheck(operator);\n }\n }\n\n static isServerEnvironment<T extends { response: ServerResponse }, U>(\n params: T | U,\n ): params is T {\n return (params as T).response !== undefined;\n }\n\n static generateRandomString(length: number): string {\n const characters = 'abcdefghijklmnopqrstuvwxyz0123456789';\n const randomCharacterArray: string[] = [];\n\n if (length < 0) {\n return '';\n }\n\n for (let i = 0; i < length; i++) {\n randomCharacterArray.push(\n characters[Math.floor(Math.random() * characters.length)],\n );\n }\n\n return randomCharacterArray.join('');\n }\n\n private static addItemToOfflineTracking({\n item,\n isExperiment,\n storage,\n onSuccess,\n }: AddToOfflineTrackingParametersType): void {\n const readResult = storage.read();\n\n const data = readResult.ok ? readResult.data : {};\n\n const { requestParameters } = data;\n\n const newItem = {\n ...item,\n timestamp: new Date().getTime(),\n isExperiment,\n };\n\n const newRequestParameters = requestParameters\n ? [...requestParameters, newItem]\n : [newItem];\n\n const writeResult = storage.write({\n requestParameters: newRequestParameters,\n });\n\n if (writeResult.ok && onSuccess) {\n onSuccess();\n }\n }\n\n private static deleteFromOfflineTracking({\n timestamps,\n storage,\n }: DeleteFromOfflineTrackingParametersType): void {\n const readResult = storage.read();\n\n if (readResult.ok) {\n const { requestParameters } = readResult.data;\n\n const newParameters = requestParameters?.filter(\n (item) => !timestamps.includes(item.timestamp),\n );\n\n storage.write({ requestParameters: newParameters });\n }\n }\n\n private static validateVersion(\n version: string,\n ): Result<[number, number, number], KameleoonError> {\n const versionParts = version.split('.').map((x) => parseInt(x, 10));\n\n while (versionParts.length < 3) {\n versionParts.push(0);\n }\n\n if (versionParts.some((item) => isNaN(item))) {\n return Err(\n new KameleoonError(KameleoonException.SemanticVersionParse, version),\n );\n }\n\n return Ok(versionParts.slice(0, 3) as [number, number, number]);\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"utilities.js","names":["Utilities","a","_classCallCheck","_createClass","key","value","checkTargeting","segment","visitorCode","targetingData","experimentId","variationConfiguration","clientConfiguration","packageInfo","dataManager","conditionsData","firstLevel","length","Ok","Err","KameleoonError","KameleoonException","Initialization","variations","assignedVariationsResult","getStoredVariations","ok","data","targetingTree","getTree","trees","segments","ruleMap","hasTargetingType","TargetingType","SEGMENT","TARGET_FEATURE_FLAG","result","evaluate","variationData","sdkInfo","validateVisitorCode","VisitorCodeEmpty","VISITOR_CODE_MAX_LENGTH","VisitorCodeMaxLength","getDataUrl","b","updateUrl","url","shouldSendConversionData","type","KameleoonData","Conversion","isConsentProvided","resultUrl","push","UrlParameter","Nonce","getNonce","unsentData","getUnsentData","size","i","j","_createForOfIteratorHelper","values","s","n","done","item","Array","isArray","forEach","arrayItem","e","f","join","getVariationDataUrlAndSentExperimentIds","variationDataUrlList","sentExperimentIds","Set","isTargetedRule","UrlEventType","Experiment","Id","VariationId","variationId","add","variationDataUrl","experimentIds","from","apply","arguments","_asyncToGenerator","_regeneratorRuntime","mark","c","d","g","h","k","l","m","o","p","q","r","t","u","v","w","x","wrap","y","prev","next","featureFlagVariation","requester","isOfflineModeOn","offlineTrackingStorage","rule","userAgent","getUserAgent","dataUrl","resultVariationId","_slicedToArray","abrupt","isUnallocated","parameters","trackExperiment","sent","clearUnsentData","clearUnsentDataByKey","markUnsentDataAsSent","addItemToOfflineTracking","storage","isExperiment","stop","convertTimeUnit","time","timeUnit","timeMap","_defineProperty","TimeUnit","Minute","Milliseconds","Hour","Day","Week","Month","parseFeatureVariable","variable","VariableType","BOOLEAN","STRING","NUMBER","numberValue","Number","isNaN","NumberParse","JSON","jsonValue","parse","err","JSONParse","exhaustCheck","parseVisitorData","filters","currentVisit","previousVisits","browserFilter","browser","customDataFilter","customData","operatingSystemFilter","operatingSystem","conversionsFilter","conversions","deviceFilter","device","geolocationFilter","geolocation","experimentsFilter","experiments","pageViewFilter","pageViews","visits","_toConsumableArray","visitorData","resultData","PageView","_listFromVisits","Browser","_fromVisits","visit","experimentData","experimentEvents","experimentEvent","A","id","isSent","updateStoredVariations","Device","GeolocationData","CustomData","OperatingSystem","visitsData","collectedVisitsData","VisitsData","_fromRemoteVisits","parseRegExp","split","_","expression","flags","RegExp","storedData","storedTargetingData","userAgentData","UserAgent","isCustomData","dataItem","insertInOrderedListMutably","list","element","order","includes","index","findIndex","Order","Ascending","splice","updateCache","cacheManager","cacheData","getAliveItem","newCacheData","_objectSpread","expirationTime","Date","now","CACHE_ITEM_LIFETIME","Second","lifetime","getTrackingCode","trackingCache","resultString","updatedCacheData","Object","entries","concat","isMappingIdentifier","sendOfflineTracking","body","trackData","cleanup","onSuccess","randomNumber","hexLength","HEX_CHARACTERS","nonce","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","t0","finish","deleteFromOfflineTracking","timestamps","newItem","getTime","newRequestParameters","writeResult","write","newParameters","filter","versionParts","map","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 resultUrl.push(\n data.url + UrlParameter.Nonce + Utilities.getNonce() + '\\n',\n );\n }\n }\n\n for (const item of unsentData.values()) {\n if (Array.isArray(item)) {\n item.forEach((arrayItem) => updateUrl(arrayItem));\n } else {\n updateUrl(item);\n }\n }\n\n return resultUrl.join('');\n }\n\n static 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, isTargetedRule } = featureFlagVariation;\n\n const userAgent = this.getUserAgent(visitorCode, dataManager);\n\n const dataUrl = this.getDataUrl({\n visitorCode,\n dataManager,\n isConsentProvided,\n });\n\n 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 { type, value } = variable;\n\n switch (type) {\n case VariableType.BOOLEAN:\n return Ok({\n type,\n value: Boolean(value),\n });\n case VariableType.STRING:\n return Ok({\n type,\n value: String(value),\n });\n case VariableType.NUMBER:\n const numberValue = Number(value);\n\n if (Number.isNaN(numberValue)) {\n return Err(\n new KameleoonError(KameleoonException.NumberParse, String(value)),\n );\n }\n\n return Ok({\n type,\n value: numberValue,\n });\n case VariableType.JSON:\n try {\n const jsonValue: JSONType = JSON.parse(String(variable.value));\n\n return Ok({\n type,\n value: jsonValue,\n });\n } catch (err) {\n return Err(new KameleoonError(KameleoonException.JSONParse, err));\n }\n default:\n exhaustCheck(type);\n }\n }\n\n static parseVisitorData({\n data,\n filters,\n visitorCode,\n variationConfiguration,\n }: ParseVisitorDataParametersType): 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, KameleoonError>;\n\n if (isExperiment) {\n result = await requester.trackExperiment(\n params as TrackExperimentParamsType,\n );\n } else {\n result = await requester.trackData(params as TrackDataParamsType);\n }\n\n result.ok && result.data && successfulTimestamps.push(timestamp);\n }\n\n this.deleteFromOfflineTracking({\n storage,\n timestamps: successfulTimestamps,\n });\n }\n }\n\n private static addItemToOfflineTracking({\n item,\n isExperiment,\n storage,\n onSuccess,\n }: AddToOfflineTrackingParametersType): void {\n const readResult = storage.read();\n\n const data = readResult.ok ? readResult.data : {};\n\n const { requestParameters } = data;\n\n const newItem = {\n ...item,\n timestamp: new Date().getTime(),\n isExperiment,\n };\n\n const newRequestParameters = requestParameters\n ? [...requestParameters, newItem]\n : [newItem];\n\n const writeResult = storage.write({\n requestParameters: newRequestParameters,\n });\n\n if (writeResult.ok && onSuccess) {\n onSuccess();\n }\n }\n\n private static deleteFromOfflineTracking({\n timestamps,\n storage,\n }: DeleteFromOfflineTrackingParametersType): void {\n const readResult = storage.read();\n\n if (readResult.ok) {\n const { requestParameters } = readResult.data;\n\n const newParameters = requestParameters?.filter(\n (item) => !timestamps.includes(item.timestamp),\n );\n\n storage.write({ requestParameters: newParameters });\n }\n }\n\n 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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"}
|
|
@@ -9,7 +9,7 @@ export type FeatureFlagVariationType = {
|
|
|
9
9
|
featureFlagId: number;
|
|
10
10
|
featureKey: string;
|
|
11
11
|
rule: RuleItemType | null;
|
|
12
|
-
isTargetedRule
|
|
12
|
+
isTargetedRule: boolean;
|
|
13
13
|
};
|
|
14
14
|
export type GetVariationParametersType = {
|
|
15
15
|
visitorCode: string;
|
|
@@ -21,3 +21,8 @@ export type GetVariationParametersType = {
|
|
|
21
21
|
clientConfiguration: ClientConfiguration;
|
|
22
22
|
dataManager: DataManager;
|
|
23
23
|
};
|
|
24
|
+
export type UnsentVariationDataType = {
|
|
25
|
+
experimentId: number;
|
|
26
|
+
variationId: number;
|
|
27
|
+
isTargetedRule: boolean;
|
|
28
|
+
};
|
|
@@ -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
|
|
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":""}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Result } from 'ts-res';
|
|
2
2
|
import { KameleoonError } from '../kameleoonError';
|
|
3
3
|
import { IExternalStorage, VariationDataType } from '../storage';
|
|
4
|
-
import { FeatureFlagVariationType, GetVariationParametersType } from './types';
|
|
4
|
+
import { FeatureFlagVariationType, GetVariationParametersType, UnsentVariationDataType } from './types';
|
|
5
5
|
import { FeatureFlagVariationsType } from '../storage/types';
|
|
6
6
|
interface IVariationConfiguration {
|
|
7
7
|
/**
|
|
@@ -16,10 +16,20 @@ interface IVariationConfiguration {
|
|
|
16
16
|
* @method getVariation - obtains variation for the rule of the feature flag which is both targeted and has a variation, if no such rule was found, returns empty rule with default `variationKey`, given an option `withAssignment` of `true` will also assign a new variation and save it in the storage
|
|
17
17
|
*/
|
|
18
18
|
getVariation: (params: GetVariationParametersType) => Result<FeatureFlagVariationType, KameleoonError>;
|
|
19
|
+
/**
|
|
20
|
+
* @method getUnsentData - obtains the list of unsent variations
|
|
21
|
+
*/
|
|
22
|
+
getUnsentData: (visitorCode: string) => Result<UnsentVariationDataType[], KameleoonError>;
|
|
23
|
+
/**
|
|
24
|
+
* @method markUnsentDataAsSent - marks the passed expriment variation as sent
|
|
25
|
+
*/
|
|
26
|
+
markUnsentDataAsSent: (visitorCode: string, experimentId: string) => Result<void, KameleoonError>;
|
|
19
27
|
}
|
|
20
28
|
export declare class VariationConfiguration implements IVariationConfiguration {
|
|
21
29
|
private storage;
|
|
22
30
|
constructor(externalStorage: IExternalStorage<VariationDataType>);
|
|
31
|
+
markUnsentDataAsSent(visitorCode: string, experimentId: string): Result<void, KameleoonError>;
|
|
32
|
+
getUnsentData(visitorCode: string): Result<UnsentVariationDataType[], KameleoonError>;
|
|
23
33
|
getStoredVariations(visitorCode: string): Result<FeatureFlagVariationsType, KameleoonError>;
|
|
24
34
|
getVariation({ visitorCode, visitorIdentifier, featureFlag, targetingData, packageInfo, clientConfiguration, dataManager, withAssignment, }: GetVariationParametersType): Result<FeatureFlagVariationType, KameleoonError>;
|
|
25
35
|
updateStoredVariations(visitorCode: string, variationData: FeatureFlagVariationsType): Result<void, KameleoonError>;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.VariationConfiguration=void 0;var _tsRes=require("ts-res"),_hasher=require("../hasher"),_kameleoonError=require("../kameleoonError"),_utilities=require("../utilities"),_types=require("../clientConfiguration/types"),_excluded=["exposition"];function _typeof(a){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a},_typeof(a)}function
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.VariationConfiguration=void 0;var _tsRes=require("ts-res"),_hasher=require("../hasher"),_kameleoonError=require("../kameleoonError"),_utilities=require("../utilities"),_types=require("../clientConfiguration/types"),_excluded=["exposition"];function _typeof(a){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a},_typeof(a)}function _objectWithoutProperties(a,b){if(null==a)return{};var c,d,e=_objectWithoutPropertiesLoose(a,b);if(Object.getOwnPropertySymbols){var f=Object.getOwnPropertySymbols(a);for(d=0;d<f.length;d++)c=f[d],0<=b.indexOf(c)||Object.prototype.propertyIsEnumerable.call(a,c)&&(e[c]=a[c])}return e}function _objectWithoutPropertiesLoose(a,b){if(null==a)return{};var c,d,e={},f=Object.keys(a);for(d=0;d<f.length;d++)c=f[d],0<=b.indexOf(c)||(e[c]=a[c]);return e}function _createForOfIteratorHelper(a,b){var c="undefined"!=typeof Symbol&&a[Symbol.iterator]||a["@@iterator"];if(!c){if(Array.isArray(a)||(c=_unsupportedIterableToArray(a))||b&&a&&"number"==typeof a.length){c&&(a=c);var d=0,e=function(){};return{s:e,n:function n(){return d>=a.length?{done:!0}:{done:!1,value:a[d++]}},e:function e(a){throw a},f:e}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var f,g=!0,h=!1;return{s:function s(){c=c.call(a)},n:function n(){var a=c.next();return g=a.done,a},e:function e(a){h=!0,f=a},f:function f(){try{g||null==c.return||c.return()}finally{if(h)throw f}}}}function _slicedToArray(a,b){return _arrayWithHoles(a)||_iterableToArrayLimit(a,b)||_unsupportedIterableToArray(a,b)||_nonIterableRest()}function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _unsupportedIterableToArray(a,b){if(a){if("string"==typeof a)return _arrayLikeToArray(a,b);var c=Object.prototype.toString.call(a).slice(8,-1);return"Object"===c&&a.constructor&&(c=a.constructor.name),"Map"===c||"Set"===c?Array.from(a):"Arguments"===c||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(c)?_arrayLikeToArray(a,b):void 0}}function _arrayLikeToArray(a,b){(null==b||b>a.length)&&(b=a.length);for(var c=0,d=Array(b);c<b;c++)d[c]=a[c];return d}function _iterableToArrayLimit(a,b){var c=null==a?null:"undefined"!=typeof Symbol&&a[Symbol.iterator]||a["@@iterator"];if(null!=c){var d,e,f,g,h=[],i=!0,j=!1;try{if(f=(c=c.call(a)).next,0===b){if(Object(c)!==c)return;i=!1}else for(;!(i=(d=f.call(c)).done)&&(h.push(d.value),h.length!==b);i=!0);}catch(a){j=!0,e=a}finally{try{if(!i&&null!=c.return&&(g=c.return(),Object(g)!==g))return}finally{if(j)throw e}}return h}}function _arrayWithHoles(a){if(Array.isArray(a))return a}function ownKeys(a,b){var c=Object.keys(a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(a);b&&(d=d.filter(function(b){return Object.getOwnPropertyDescriptor(a,b).enumerable})),c.push.apply(c,d)}return c}function _objectSpread(a){for(var b,c=1;c<arguments.length;c++)b=null==arguments[c]?{}:arguments[c],c%2?ownKeys(Object(b),!0).forEach(function(c){_defineProperty(a,c,b[c])}):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(b)):ownKeys(Object(b)).forEach(function(c){Object.defineProperty(a,c,Object.getOwnPropertyDescriptor(b,c))});return a}function _classCallCheck(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function _defineProperties(a,b){for(var c,d=0;d<b.length;d++)c=b[d],c.enumerable=c.enumerable||!1,c.configurable=!0,"value"in c&&(c.writable=!0),Object.defineProperty(a,_toPropertyKey(c.key),c)}function _createClass(a,b,c){return b&&_defineProperties(a.prototype,b),c&&_defineProperties(a,c),Object.defineProperty(a,"prototype",{writable:!1}),a}function _defineProperty(a,b,c){return b=_toPropertyKey(b),b in a?Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!0}):a[b]=c,a}function _toPropertyKey(a){var b=_toPrimitive(a,"string");return"symbol"===_typeof(b)?b:b+""}function _toPrimitive(a,b){if("object"!==_typeof(a)||null===a)return a;var c=a[Symbol.toPrimitive];if(c!==void 0){var d=c.call(a,b||"default");if("object"!==_typeof(d))return d;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===b?String:Number)(a)}var VariationConfiguration=function(){function a(b){_classCallCheck(this,a),_defineProperty(this,"storage",void 0),this.storage=b}return _createClass(a,[{key:"markUnsentDataAsSent",value:function markUnsentDataAsSent(a,b){var c=this.storage.read();if(!c.ok&&c.error.type===_kameleoonError.KameleoonException.StorageParse)return c;var d=c.ok?c.data:{};return d[a]||(d[a]={}),d[a][b]=_objectSpread(_objectSpread({},d[a][b]),{},{isSent:!0}),this.storage.write(d)}},{key:"getUnsentData",value:function getUnsentData(a){var b=this.storage.read();if(!b.ok&&b.error.type===_kameleoonError.KameleoonException.StorageParse)return b;var c=b.ok?b.data:{},d=c[a],e=[];if(d)for(var f=0,g=Object.entries(d);f<g.length;f++){var h=_slicedToArray(g[f],2),i=h[0],j=h[1];j.isSent||e.push({experimentId:+i,variationId:j.variationId,isTargetedRule:j.isTargetedRule})}return(0,_tsRes.Ok)(e)}},{key:"getStoredVariations",value:function getStoredVariations(a){var b=this.storage.read();if(!b.ok)return b;var c=b.data[a];return c?(0,_tsRes.Ok)(c):(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.StorageRead,a))}},{key:"getVariation",value:function getVariation(a){var b=a.visitorCode,c=a.visitorIdentifier,d=a.featureFlag,e=a.targetingData,f=a.packageInfo,g=a.clientConfiguration,h=a.dataManager,i=a.withAssignment,j=_utilities.Utilities.validateVisitorCode(b);if(!j.ok)return(0,_tsRes.Err)(j.error);var k,l=d.rules,m=d.featureKey,n=d.id,o=d.defaultVariationKey,p=_createForOfIteratorHelper(l);try{for(p.s();!(k=p.n()).done;){var q=k.value,r=q.segment,s=q.experimentId,t=q.id,u=q.exposition,v=q.respoolTime,w=q.variationByExposition,x=_utilities.Utilities.checkTargeting({segment:r,visitorCode:b,experimentId:s,targetingData:e,packageInfo:f,clientConfiguration:g,dataManager:h,variationConfiguration:this});if(!x.ok)return x;if(x.data){var y=_hasher.Hasher.getHashDouble({visitorIdentifier:c,respoolTime:v,id:t+""});if(y<=u){var z,A=0,B=_hasher.Hasher.getHashDouble({visitorIdentifier:c,respoolTime:v,id:s+""}),C=_createForOfIteratorHelper(w);try{for(C.s();!(z=C.n()).done;){var D=z.value;if(A+=D.exposition,B<=A){void 0!==i&&i&&this.updateStoredVariations(b,_defineProperty({},s,{variationId:D.variationId,isTargetedRule:q.type===_types.RuleType.TARGETED_DELIVERY,isSent:!1}));var E=D.exposition,F=_objectWithoutProperties(D,_excluded);return(0,_tsRes.Ok)(_objectSpread(_objectSpread({},F),{},{rule:q,featureFlagId:n,featureKey:m,experimentId:s,isTargetedRule:q.type===_types.RuleType.TARGETED_DELIVERY}))}}}catch(a){C.e(a)}finally{C.f()}}if(q.type===_types.RuleType.TARGETED_DELIVERY)return(0,_tsRes.Ok)({featureKey:m,featureFlagId:n,experimentId:null,variationKey:o,variationId:null,rule:null,isTargetedRule:!0})}}}catch(a){p.e(a)}finally{p.f()}return(0,_tsRes.Ok)({featureKey:m,featureFlagId:n,experimentId:null,variationKey:o,variationId:null,rule:null,isTargetedRule:!1})}},{key:"updateStoredVariations",value:function updateStoredVariations(a,b){var c=this.storage.read();if(!c.ok&&c.error.type===_kameleoonError.KameleoonException.StorageParse)return c;var d=c.ok?c.data:{};return d[a]?d[a]=_objectSpread(_objectSpread({},d[a]),b):d=_objectSpread(_objectSpread({},d),{},_defineProperty({},a,_objectSpread({},b))),this.storage.write(d)}}]),a}();exports.VariationConfiguration=VariationConfiguration;
|
|
2
2
|
//# sourceMappingURL=variationConfiguration.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"variationConfiguration.js","names":["VariationConfiguration","a","externalStorage","_classCallCheck","_defineProperty","storage","_createClass","key","value","getStoredVariations","visitorCode","result","read","ok","featureFlagVariations","data","Ok","Err","KameleoonError","KameleoonException","StorageRead","getVariation","visitorIdentifier","featureFlag","targetingData","packageInfo","clientConfiguration","dataManager","i","withAssignment","validateResult","Utilities","validateVisitorCode","error","k","rules","featureKey","featureFlagId","id","defaultVariationKey","p","_createForOfIteratorHelper","s","n","done","rule","segment","experimentId","exposition","respoolTime","variationByExposition","targetingResult","checkTargeting","variationConfiguration","ruleHash","Hasher","getHashDouble","z","totalDeviation","variationHash","C","variation","updateStoredVariations","variationId","restParameters","_objectWithoutProperties","_excluded","_objectSpread","isTargetedRule","type","RuleType","TARGETED_DELIVERY","e","f","variationKey","variationData","StorageParse","updatedVariationData","write","exports"],"sources":["../../src/variationConfiguration/variationConfiguration.ts"],"sourcesContent":["import { Err, Ok, Result } from 'ts-res';\nimport { Hasher } from 'src/hasher';\nimport { KameleoonError, KameleoonException } from 'src/kameleoonError';\nimport { IExternalStorage, VariationDataType } from 'src/storage';\nimport { Utilities } from 'src/utilities';\nimport { RuleType } from 'src/clientConfiguration/types';\nimport { FeatureFlagVariationType, GetVariationParametersType } from './types';\nimport { FeatureFlagVariationsType } from 'src/storage/types';\n\ninterface IVariationConfiguration {\n /**\n * @method getStoredVariations - obtains campaigns with according variations that are *already assigned* and *stored* in the `variationStorage`.\n */\n getStoredVariations(\n visitorCode: string,\n ): Result<FeatureFlagVariationsType, KameleoonError>;\n /**\n * @method updateStoredVariations - updates stored variations for the visitor\n */\n updateStoredVariations: (\n visitorCode: string,\n variationData: FeatureFlagVariationsType,\n ) => void;\n /**\n * @method getVariation - obtains variation for the rule of the feature flag which is both targeted and has a variation, if no such rule was found, returns empty rule with default `variationKey`, given an option `withAssignment` of `true` will also assign a new variation and save it in the storage\n */\n getVariation: (\n params: GetVariationParametersType,\n ) => Result<FeatureFlagVariationType, KameleoonError>;\n}\n\nexport class VariationConfiguration implements IVariationConfiguration {\n private storage: IExternalStorage<VariationDataType>;\n\n constructor(externalStorage: IExternalStorage<VariationDataType>) {\n this.storage = externalStorage;\n }\n\n public getStoredVariations(\n visitorCode: string,\n ): Result<FeatureFlagVariationsType, KameleoonError> {\n const result = this.storage.read();\n\n if (!result.ok) {\n return result;\n }\n\n const featureFlagVariations = result.data[visitorCode];\n\n if (!featureFlagVariations) {\n return Err(\n new KameleoonError(KameleoonException.StorageRead, visitorCode),\n );\n }\n\n return Ok(featureFlagVariations);\n }\n\n public getVariation({\n visitorCode,\n visitorIdentifier,\n featureFlag,\n targetingData,\n packageInfo,\n clientConfiguration,\n dataManager,\n withAssignment = false,\n }: GetVariationParametersType): Result<\n FeatureFlagVariationType,\n KameleoonError\n > {\n const validateResult = Utilities.validateVisitorCode(visitorCode);\n\n if (!validateResult.ok) {\n return Err(validateResult.error);\n }\n\n const {\n rules,\n featureKey,\n id: featureFlagId,\n defaultVariationKey,\n } = featureFlag;\n\n for (const rule of rules) {\n const {\n segment,\n experimentId,\n id,\n exposition,\n respoolTime,\n variationByExposition,\n } = rule;\n\n // --- Check targeting ---\n const targetingResult = Utilities.checkTargeting({\n segment,\n visitorCode,\n experimentId,\n targetingData,\n packageInfo,\n clientConfiguration,\n dataManager,\n variationConfiguration: this,\n });\n\n if (!targetingResult.ok) {\n return targetingResult;\n }\n\n if (!targetingResult.data) {\n continue;\n }\n\n // --- Note ---\n // Calculate new variation (and assign it if `withAssignment` is `true`)\n // First the the exposed rule is calculated and then the variation inside of it\n const ruleHash = Hasher.getHashDouble({\n visitorIdentifier,\n respoolTime,\n id: String(id),\n });\n\n if (ruleHash <= exposition) {\n let totalDeviation = 0;\n\n const variationHash = Hasher.getHashDouble({\n visitorIdentifier,\n respoolTime,\n id: String(experimentId),\n });\n\n for (const variation of variationByExposition) {\n totalDeviation += variation.exposition;\n\n if (variationHash <= totalDeviation) {\n if (withAssignment) {\n this.updateStoredVariations(visitorCode, {\n [experimentId]: variation.variationId,\n });\n }\n\n const { exposition, ...restParameters } = variation;\n\n return Ok({\n ...restParameters,\n rule,\n featureFlagId,\n featureKey,\n experimentId,\n isTargetedRule: rule.type === RuleType.TARGETED_DELIVERY,\n });\n }\n }\n }\n\n if (rule.type === RuleType.TARGETED_DELIVERY) {\n return Ok({\n featureKey,\n featureFlagId,\n experimentId: null,\n variationKey: defaultVariationKey,\n variationId: null,\n rule: null,\n isTargetedRule: true,\n });\n }\n }\n\n return Ok({\n featureKey,\n featureFlagId,\n experimentId: null,\n variationKey: defaultVariationKey,\n variationId: null,\n rule: null,\n });\n }\n\n public updateStoredVariations(\n visitorCode: string,\n variationData: FeatureFlagVariationsType,\n ): Result<void, KameleoonError> {\n const result = this.storage.read();\n\n if (!result.ok) {\n // --- Note ---\n // If there is a parsing error we return error\n // But if there is `LocalStorageRead` error it means that\n // data was read successfully and it's empty, which is not problem\n // cause that might be initial `read`\n if (result.error.type === KameleoonException.StorageParse) {\n return result;\n }\n }\n\n let updatedVariationData: VariationDataType = result.ok ? result.data : {};\n\n if (updatedVariationData[visitorCode]) {\n updatedVariationData[visitorCode] = {\n ...updatedVariationData[visitorCode],\n ...variationData,\n };\n } else {\n updatedVariationData = {\n ...updatedVariationData,\n [visitorCode]: {\n ...variationData,\n },\n };\n }\n\n return this.storage.write(updatedVariationData);\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"variationConfiguration.js","names":["VariationConfiguration","a","externalStorage","_classCallCheck","_defineProperty","storage","_createClass","key","value","markUnsentDataAsSent","visitorCode","experimentId","result","read","ok","error","type","KameleoonException","StorageParse","updatedVariationData","data","_objectSpread","isSent","write","getUnsentData","featureExperiment","unsentData","f","g","Object","entries","length","h","_slicedToArray","variationData","push","variationId","isTargetedRule","Ok","getStoredVariations","featureFlagVariations","Err","KameleoonError","StorageRead","getVariation","visitorIdentifier","featureFlag","targetingData","packageInfo","clientConfiguration","dataManager","i","withAssignment","validateResult","Utilities","validateVisitorCode","k","rules","featureKey","featureFlagId","id","defaultVariationKey","p","_createForOfIteratorHelper","s","n","done","rule","segment","exposition","respoolTime","variationByExposition","targetingResult","checkTargeting","variationConfiguration","ruleHash","Hasher","getHashDouble","z","totalDeviation","variationHash","C","variation","updateStoredVariations","RuleType","TARGETED_DELIVERY","restParameters","_objectWithoutProperties","_excluded","e","variationKey","exports"],"sources":["../../src/variationConfiguration/variationConfiguration.ts"],"sourcesContent":["import { Err, Ok, Result } from 'ts-res';\nimport { Hasher } from 'src/hasher';\nimport { KameleoonError, KameleoonException } from 'src/kameleoonError';\nimport { IExternalStorage, VariationDataType } from 'src/storage';\nimport { Utilities } from 'src/utilities';\nimport { RuleType } from 'src/clientConfiguration/types';\nimport {\n FeatureFlagVariationType,\n GetVariationParametersType,\n UnsentVariationDataType,\n} from './types';\nimport { FeatureFlagVariationsType } from 'src/storage/types';\n\ninterface IVariationConfiguration {\n /**\n * @method getStoredVariations - obtains campaigns with according variations that are *already assigned* and *stored* in the `variationStorage`.\n */\n getStoredVariations(\n visitorCode: string,\n ): Result<FeatureFlagVariationsType, KameleoonError>;\n /**\n * @method updateStoredVariations - updates stored variations for the visitor\n */\n updateStoredVariations: (\n visitorCode: string,\n variationData: FeatureFlagVariationsType,\n ) => void;\n /**\n * @method getVariation - obtains variation for the rule of the feature flag which is both targeted and has a variation, if no such rule was found, returns empty rule with default `variationKey`, given an option `withAssignment` of `true` will also assign a new variation and save it in the storage\n */\n getVariation: (\n params: GetVariationParametersType,\n ) => Result<FeatureFlagVariationType, KameleoonError>;\n /**\n * @method getUnsentData - obtains the list of unsent variations\n */\n getUnsentData: (\n visitorCode: string,\n ) => Result<UnsentVariationDataType[], KameleoonError>;\n /**\n * @method markUnsentDataAsSent - marks the passed expriment variation as sent\n */\n markUnsentDataAsSent: (\n visitorCode: string,\n experimentId: string,\n ) => Result<void, KameleoonError>;\n}\n\nexport class VariationConfiguration implements IVariationConfiguration {\n private storage: IExternalStorage<VariationDataType>;\n\n constructor(externalStorage: IExternalStorage<VariationDataType>) {\n this.storage = externalStorage;\n }\n\n public markUnsentDataAsSent(\n visitorCode: string,\n experimentId: string,\n ): Result<void, KameleoonError> {\n const result = this.storage.read();\n\n if (!result.ok) {\n // --- Note ---\n // If there is a parsing error we return error\n // But if there is `LocalStorageRead` error it means that\n // data was read successfully and it's empty, which is not problem\n // cause that might be initial `read`\n if (result.error.type === KameleoonException.StorageParse) {\n return result;\n }\n }\n\n let updatedVariationData: VariationDataType = result.ok ? result.data : {};\n\n if (!updatedVariationData[visitorCode]) {\n updatedVariationData[visitorCode] = {};\n }\n\n updatedVariationData[visitorCode][experimentId] = {\n ...updatedVariationData[visitorCode][experimentId],\n isSent: true,\n };\n\n return this.storage.write(updatedVariationData);\n }\n\n public getUnsentData(\n visitorCode: string,\n ): Result<UnsentVariationDataType[], KameleoonError> {\n const result = this.storage.read();\n\n if (!result.ok) {\n // --- Note ---\n // If there is a parsing error we return error\n // But if there is `LocalStorageRead` error it means that\n // data was read successfully and it's empty, which is not problem\n // cause that might be initial `read`\n if (result.error.type === KameleoonException.StorageParse) {\n return result;\n }\n }\n\n const updatedVariationData: VariationDataType = result.ok\n ? result.data\n : {};\n\n const featureExperiment = updatedVariationData[visitorCode];\n\n const unsentData: UnsentVariationDataType[] = [];\n\n if (featureExperiment) {\n for (const [experimentId, variationData] of Object.entries(\n featureExperiment,\n )) {\n if (!variationData.isSent) {\n unsentData.push({\n experimentId: Number(experimentId),\n variationId: variationData.variationId,\n isTargetedRule: variationData.isTargetedRule,\n });\n }\n }\n }\n\n return Ok(unsentData);\n }\n\n public getStoredVariations(\n visitorCode: string,\n ): Result<FeatureFlagVariationsType, KameleoonError> {\n const result = this.storage.read();\n\n if (!result.ok) {\n return result;\n }\n\n const featureFlagVariations = result.data[visitorCode];\n\n if (!featureFlagVariations) {\n return Err(\n new KameleoonError(KameleoonException.StorageRead, visitorCode),\n );\n }\n\n return Ok(featureFlagVariations);\n }\n\n public getVariation({\n visitorCode,\n visitorIdentifier,\n featureFlag,\n targetingData,\n packageInfo,\n clientConfiguration,\n dataManager,\n withAssignment = false,\n }: GetVariationParametersType): Result<\n FeatureFlagVariationType,\n KameleoonError\n > {\n const validateResult = Utilities.validateVisitorCode(visitorCode);\n\n if (!validateResult.ok) {\n return Err(validateResult.error);\n }\n\n const {\n rules,\n featureKey,\n id: featureFlagId,\n defaultVariationKey,\n } = featureFlag;\n\n for (const rule of rules) {\n const {\n segment,\n experimentId,\n id,\n exposition,\n respoolTime,\n variationByExposition,\n } = rule;\n\n // --- Check targeting ---\n const targetingResult = Utilities.checkTargeting({\n segment,\n visitorCode,\n experimentId,\n targetingData,\n packageInfo,\n clientConfiguration,\n dataManager,\n variationConfiguration: this,\n });\n\n if (!targetingResult.ok) {\n return targetingResult;\n }\n\n if (!targetingResult.data) {\n continue;\n }\n\n // --- Note ---\n // Calculate new variation (and assign it if `withAssignment` is `true`)\n // First the the exposed rule is calculated and then the variation inside of it\n const ruleHash = Hasher.getHashDouble({\n visitorIdentifier,\n respoolTime,\n id: String(id),\n });\n\n if (ruleHash <= exposition) {\n let totalDeviation = 0;\n\n const variationHash = Hasher.getHashDouble({\n visitorIdentifier,\n respoolTime,\n id: String(experimentId),\n });\n\n for (const variation of variationByExposition) {\n totalDeviation += variation.exposition;\n\n if (variationHash <= totalDeviation) {\n if (withAssignment) {\n this.updateStoredVariations(visitorCode, {\n [experimentId]: {\n variationId: variation.variationId,\n isTargetedRule: rule.type === RuleType.TARGETED_DELIVERY,\n isSent: false,\n },\n });\n }\n\n const { exposition, ...restParameters } = variation;\n\n return Ok({\n ...restParameters,\n rule,\n featureFlagId,\n featureKey,\n experimentId,\n isTargetedRule: rule.type === RuleType.TARGETED_DELIVERY,\n });\n }\n }\n }\n\n if (rule.type === RuleType.TARGETED_DELIVERY) {\n return Ok({\n featureKey,\n featureFlagId,\n experimentId: null,\n variationKey: defaultVariationKey,\n variationId: null,\n rule: null,\n isTargetedRule: true,\n });\n }\n }\n\n return Ok({\n featureKey,\n featureFlagId,\n experimentId: null,\n variationKey: defaultVariationKey,\n variationId: null,\n rule: null,\n isTargetedRule: false,\n });\n }\n\n public updateStoredVariations(\n visitorCode: string,\n variationData: FeatureFlagVariationsType,\n ): Result<void, KameleoonError> {\n const result = this.storage.read();\n\n if (!result.ok) {\n // --- Note ---\n // If there is a parsing error we return error\n // But if there is `LocalStorageRead` error it means that\n // data was read successfully and it's empty, which is not problem\n // cause that might be initial `read`\n if (result.error.type === KameleoonException.StorageParse) {\n return result;\n }\n }\n\n let updatedVariationData: VariationDataType = result.ok ? result.data : {};\n\n if (updatedVariationData[visitorCode]) {\n updatedVariationData[visitorCode] = {\n ...updatedVariationData[visitorCode],\n ...variationData,\n };\n } else {\n updatedVariationData = {\n ...updatedVariationData,\n [visitorCode]: {\n ...variationData,\n },\n };\n }\n\n return this.storage.write(updatedVariationData);\n }\n}\n"],"mappings":"8/IAgDa,CAAAA,sBAAsB,YAGjC,SAAAC,EAAYC,CAAoD,CAAE,CAAAC,eAAA,MAAAF,CAAA,EAAAG,eAAA,wBAChE,IAAI,CAACC,OAAO,CAAGH,CACjB,CAAC,OAAAI,YAAA,CAAAL,CAAA,GAAAM,GAAA,wBAAAC,KAAA,CAED,SAAAC,qBACEC,CAAmB,CACnBC,CAAoB,CACU,CAC9B,GAAM,CAAAC,CAAM,CAAG,IAAI,CAACP,OAAO,CAACQ,IAAI,EAAE,CAElC,GAAI,CAACD,CAAM,CAACE,EAAE,EAMRF,CAAM,CAACG,KAAK,CAACC,IAAI,GAAKC,kCAAkB,CAACC,YAAY,CACvD,MAAO,CAAAN,CAAM,CAIjB,GAAI,CAAAO,CAAuC,CAAGP,CAAM,CAACE,EAAE,CAAGF,CAAM,CAACQ,IAAI,CAAG,CAAC,CAAC,CAW1E,MATK,CAAAD,CAAoB,CAACT,CAAW,CAAC,GACpCS,CAAoB,CAACT,CAAW,CAAC,CAAG,CAAC,CAAC,EAGxCS,CAAoB,CAACT,CAAW,CAAC,CAACC,CAAY,CAAC,CAAAU,aAAA,CAAAA,aAAA,IAC1CF,CAAoB,CAACT,CAAW,CAAC,CAACC,CAAY,CAAC,MAClDW,MAAM,GAAM,EACb,CAEM,IAAI,CAACjB,OAAO,CAACkB,KAAK,CAACJ,CAAoB,CAChD,CAAC,GAAAZ,GAAA,iBAAAC,KAAA,CAED,SAAAgB,cACEd,CAAmB,CACgC,CACnD,GAAM,CAAAE,CAAM,CAAG,IAAI,CAACP,OAAO,CAACQ,IAAI,EAAE,CAElC,GAAI,CAACD,CAAM,CAACE,EAAE,EAMRF,CAAM,CAACG,KAAK,CAACC,IAAI,GAAKC,kCAAkB,CAACC,YAAY,CACvD,MAAO,CAAAN,CAAM,CAEhB,GAEK,CAAAO,CAAuC,CAAGP,CAAM,CAACE,EAAE,CACrDF,CAAM,CAACQ,IAAI,CACX,CAAC,CAAC,CAEAK,CAAiB,CAAGN,CAAoB,CAACT,CAAW,CAAC,CAErDgB,CAAqC,CAAG,EAAE,CAEhD,GAAID,CAAiB,CACnB,QAAAE,CAAA,GAAAC,CAAA,CAA4CC,MAAM,CAACC,OAAO,CACxDL,CAAiB,CAClB,CAAAE,CAAA,CAAAC,CAAA,CAAAG,MAAA,CAAAJ,CAAA,GAAE,CAFE,IAAAK,CAAA,CAAAC,cAAA,CAAAL,CAAA,CAAAD,CAAA,KAAOhB,CAAY,CAAAqB,CAAA,IAAEE,CAAa,CAAAF,CAAA,IAGhCE,CAAa,CAACZ,MAAM,EACvBI,CAAU,CAACS,IAAI,CAAC,CACdxB,YAAY,EAASA,CAAa,CAClCyB,WAAW,CAAEF,CAAa,CAACE,WAAW,CACtCC,cAAc,CAAEH,CAAa,CAACG,cAChC,CAAC,CAEL,CAGF,MAAO,GAAAC,SAAE,EAACZ,CAAU,CACtB,CAAC,GAAAnB,GAAA,uBAAAC,KAAA,CAED,SAAA+B,oBACE7B,CAAmB,CACgC,CACnD,GAAM,CAAAE,CAAM,CAAG,IAAI,CAACP,OAAO,CAACQ,IAAI,EAAE,CAElC,GAAI,CAACD,CAAM,CAACE,EAAE,CACZ,MAAO,CAAAF,CAAM,CAGf,GAAM,CAAA4B,CAAqB,CAAG5B,CAAM,CAACQ,IAAI,CAACV,CAAW,CAAC,CAAC,MAElD,CAAA8B,CAAqB,CAMnB,GAAAF,SAAE,EAACE,CAAqB,CAAC,CALvB,GAAAC,UAAG,EACR,GAAI,CAAAC,8BAAc,CAACzB,kCAAkB,CAAC0B,WAAW,CAAEjC,CAAW,CAAC,CAKrE,CAAC,GAAAH,GAAA,gBAAAC,KAAA,CAED,SAAAoC,aAAA3C,CAAA,CAYE,IAXA,CAAAS,CAAW,CAAAT,CAAA,CAAXS,WAAW,CACXmC,CAAiB,CAAA5C,CAAA,CAAjB4C,iBAAiB,CACjBC,CAAW,CAAA7C,CAAA,CAAX6C,WAAW,CACXC,CAAa,CAAA9C,CAAA,CAAb8C,aAAa,CACbC,CAAW,CAAA/C,CAAA,CAAX+C,WAAW,CACXC,CAAmB,CAAAhD,CAAA,CAAnBgD,mBAAmB,CACnBC,CAAW,CAAAjD,CAAA,CAAXiD,WAAW,CAAAC,CAAA,CAAAlD,CAAA,CACXmD,cAAc,CAKRC,CAAc,CAAGC,oBAAS,CAACC,mBAAmB,CAAC7C,CAAW,CAAC,CAEjE,GAAI,CAAC2C,CAAc,CAACvC,EAAE,CACpB,MAAO,GAAA2B,UAAG,EAACY,CAAc,CAACtC,KAAK,CAAC,CACjC,IAAAyC,CAAA,CAGCC,CAAK,CAIHX,CAAW,CAJbW,KAAK,CACLC,CAAU,CAGRZ,CAAW,CAHbY,UAAU,CACNC,CAAa,CAEfb,CAAW,CAFbc,EAAE,CACFC,CAAmB,CACjBf,CAAW,CADbe,mBAAmB,CAAAC,CAAA,CAAAC,0BAAA,CAGFN,CAAK,MAAxB,IAAAK,CAAA,CAAAE,CAAA,KAAAR,CAAA,CAAAM,CAAA,CAAAG,CAAA,IAAAC,IAAA,EAA0B,IAAf,CAAAC,CAAI,CAAAX,CAAA,CAAAhD,KAAA,CAEX4D,CAAO,CAMLD,CAAI,CANNC,OAAO,CACPzD,CAAY,CAKVwD,CAAI,CALNxD,YAAY,CACZiD,CAAE,CAIAO,CAAI,CAJNP,EAAE,CACFS,CAAU,CAGRF,CAAI,CAHNE,UAAU,CACVC,CAAW,CAETH,CAAI,CAFNG,WAAW,CACXC,CAAqB,CACnBJ,CAAI,CADNI,qBAAqB,CAIjBC,CAAe,CAAGlB,oBAAS,CAACmB,cAAc,CAAC,CAC/CL,OAAO,CAAPA,CAAO,CACP1D,WAAW,CAAXA,CAAW,CACXC,YAAY,CAAZA,CAAY,CACZoC,aAAa,CAAbA,CAAa,CACbC,WAAW,CAAXA,CAAW,CACXC,mBAAmB,CAAnBA,CAAmB,CACnBC,WAAW,CAAXA,CAAW,CACXwB,sBAAsB,CAAE,IAC1B,CAAC,CAAC,CAEF,GAAI,CAACF,CAAe,CAAC1D,EAAE,CACrB,MAAO,CAAA0D,CAAe,CAGxB,GAAKA,CAAe,CAACpD,IAAI,EAOzB,GAAM,CAAAuD,CAAQ,CAAGC,cAAM,CAACC,aAAa,CAAC,CACpChC,iBAAiB,CAAjBA,CAAiB,CACjByB,WAAW,CAAXA,CAAW,CACXV,EAAE,CAASA,CAAE,GACf,CAAC,CAAC,CAEF,GAAIe,CAAQ,EAAIN,CAAU,CAAE,KAAAS,CAAA,CACtBC,CAAc,CAAG,CAAC,CAEhBC,CAAa,CAAGJ,cAAM,CAACC,aAAa,CAAC,CACzChC,iBAAiB,CAAjBA,CAAiB,CACjByB,WAAW,CAAXA,CAAW,CACXV,EAAE,CAASjD,CAAY,GACzB,CAAC,CAAC,CAAAsE,CAAA,CAAAlB,0BAAA,CAEsBQ,CAAqB,MAA7C,IAAAU,CAAA,CAAAjB,CAAA,KAAAc,CAAA,CAAAG,CAAA,CAAAhB,CAAA,IAAAC,IAAA,EAA+C,IAApC,CAAAgB,CAAS,CAAAJ,CAAA,CAAAtE,KAAA,CAGlB,GAFAuE,CAAc,EAAIG,CAAS,CAACb,UAAU,CAElCW,CAAa,EAAID,CAAc,CAAE,UAAA5B,CAAA,EAAAA,CAAA,EAEjC,IAAI,CAACgC,sBAAsB,CAACzE,CAAW,CAAAN,eAAA,IACpCO,CAAY,CAAG,CACdyB,WAAW,CAAE8C,CAAS,CAAC9C,WAAW,CAClCC,cAAc,CAAE8B,CAAI,CAACnD,IAAI,GAAKoE,eAAQ,CAACC,iBAAiB,CACxD/D,MAAM,GACR,CAAC,EACD,CAGJ,GAAQ,CAAA+C,CAAU,CAAwBa,CAAS,CAA3Cb,UAAU,CAAKiB,CAAc,CAAAC,wBAAA,CAAKL,CAAS,CAAAM,SAAA,EAEnD,MAAO,GAAAlD,SAAE,EAAAjB,aAAA,CAAAA,aAAA,IACJiE,CAAc,MACjBnB,IAAI,CAAJA,CAAI,CACJR,aAAa,CAAbA,CAAa,CACbD,UAAU,CAAVA,CAAU,CACV/C,YAAY,CAAZA,CAAY,CACZ0B,cAAc,CAAE8B,CAAI,CAACnD,IAAI,GAAKoE,eAAQ,CAACC,iBAAiB,GAE5D,CACF,CAAC,OAAApF,CAAA,EAAAgF,CAAA,CAAAQ,CAAA,CAAAxF,CAAA,UAAAgF,CAAA,CAAAtD,CAAA,GACH,CAEA,GAAIwC,CAAI,CAACnD,IAAI,GAAKoE,eAAQ,CAACC,iBAAiB,CAC1C,MAAO,GAAA/C,SAAE,EAAC,CACRoB,UAAU,CAAVA,CAAU,CACVC,aAAa,CAAbA,CAAa,CACbhD,YAAY,CAAE,IAAI,CAClB+E,YAAY,CAAE7B,CAAmB,CACjCzB,WAAW,CAAE,IAAI,CACjB+B,IAAI,CAAE,IAAI,CACV9B,cAAc,GAChB,CAAC,CACF,CACH,CAAC,OAAApC,CAAA,EAAA6D,CAAA,CAAA2B,CAAA,CAAAxF,CAAA,UAAA6D,CAAA,CAAAnC,CAAA,GAED,MAAO,GAAAW,SAAE,EAAC,CACRoB,UAAU,CAAVA,CAAU,CACVC,aAAa,CAAbA,CAAa,CACbhD,YAAY,CAAE,IAAI,CAClB+E,YAAY,CAAE7B,CAAmB,CACjCzB,WAAW,CAAE,IAAI,CACjB+B,IAAI,CAAE,IAAI,CACV9B,cAAc,GAChB,CAAC,CACH,CAAC,GAAA9B,GAAA,0BAAAC,KAAA,CAED,SAAA2E,uBACEzE,CAAmB,CACnBwB,CAAwC,CACV,CAC9B,GAAM,CAAAtB,CAAM,CAAG,IAAI,CAACP,OAAO,CAACQ,IAAI,EAAE,CAElC,GAAI,CAACD,CAAM,CAACE,EAAE,EAMRF,CAAM,CAACG,KAAK,CAACC,IAAI,GAAKC,kCAAkB,CAACC,YAAY,CACvD,MAAO,CAAAN,CAAM,CAIjB,GAAI,CAAAO,CAAuC,CAAGP,CAAM,CAACE,EAAE,CAAGF,CAAM,CAACQ,IAAI,CAAG,CAAC,CAAC,CAgB1E,MAdI,CAAAD,CAAoB,CAACT,CAAW,CAAC,CACnCS,CAAoB,CAACT,CAAW,CAAC,CAAAW,aAAA,CAAAA,aAAA,IAC5BF,CAAoB,CAACT,CAAW,CAAC,EACjCwB,CAAa,CACjB,CAEDf,CAAoB,CAAAE,aAAA,CAAAA,aAAA,IACfF,CAAoB,KAAAf,eAAA,IACtBM,CAAW,CAAAW,aAAA,IACPa,CAAa,GAEnB,CAGI,IAAI,CAAC7B,OAAO,CAACkB,KAAK,CAACJ,CAAoB,CAChD,CAAC,IAAAlB,CAAA,IAAA0F,OAAA,CAAA3F,sBAAA,CAAAA,sBAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { VisitorCodeManager } from './visitorCodeManager';
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var _visitorCodeManager=require("./visitorCodeManager");Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"VisitorCodeManager",{enumerable:!0,get:function get(){return _visitorCodeManager.VisitorCodeManager}});
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["_visitorCodeManager","require","Object","defineProperty","exports","value","enumerable","get","VisitorCodeManager"],"sources":["../../src/visitorCodeManager/index.ts"],"sourcesContent":["export { VisitorCodeManager } from './visitorCodeManager';\n"],"mappings":"aAAA,IAAAA,mBAAA,CAAAC,OAAA,yBAA0DC,MAAA,CAAAC,cAAA,CAAAC,OAAA,eAAAC,KAAA,MAAAH,MAAA,CAAAC,cAAA,CAAAC,OAAA,uBAAAE,UAAA,IAAAC,GAAA,UAAAA,IAAA,SAAAP,mBAAA,CAAAQ,kBAAA"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Result } from 'ts-res';
|
|
2
|
+
import { GetResultCookieParametersType, GetVisitorCodeParamtersType } from '../types';
|
|
3
|
+
/**
|
|
4
|
+
* VisitorCodeManager - a class which manages visitor codes using cookies, offering functions to generate, retrieve,
|
|
5
|
+
* and handle these codes while considering user consent.
|
|
6
|
+
**/
|
|
7
|
+
export declare class VisitorCodeManager {
|
|
8
|
+
private isConsentRequired;
|
|
9
|
+
setConsentRequired(consentRequired: boolean): void;
|
|
10
|
+
getConsentRequired(): boolean;
|
|
11
|
+
protected getVisitorCode({ defaultVisitorCode, setData, getData, }: GetVisitorCodeParamtersType): string;
|
|
12
|
+
protected getCookieVisitorCode(cookie: string): Result<string, void>;
|
|
13
|
+
protected getResultCookie({ domain, visitorCode, }: GetResultCookieParametersType): string;
|
|
14
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.VisitorCodeManager=void 0;var _tsRes=require("ts-res"),_constants=require("../constants"),_utilities=require("../utilities");function _typeof(a){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a},_typeof(a)}function _slicedToArray(a,b){return _arrayWithHoles(a)||_iterableToArrayLimit(a,b)||_unsupportedIterableToArray(a,b)||_nonIterableRest()}function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _unsupportedIterableToArray(a,b){if(a){if("string"==typeof a)return _arrayLikeToArray(a,b);var c=Object.prototype.toString.call(a).slice(8,-1);return"Object"===c&&a.constructor&&(c=a.constructor.name),"Map"===c||"Set"===c?Array.from(a):"Arguments"===c||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(c)?_arrayLikeToArray(a,b):void 0}}function _arrayLikeToArray(a,b){(null==b||b>a.length)&&(b=a.length);for(var c=0,d=Array(b);c<b;c++)d[c]=a[c];return d}function _iterableToArrayLimit(a,b){var c=null==a?null:"undefined"!=typeof Symbol&&a[Symbol.iterator]||a["@@iterator"];if(null!=c){var d,e,f,g,h=[],i=!0,j=!1;try{if(f=(c=c.call(a)).next,0===b){if(Object(c)!==c)return;i=!1}else for(;!(i=(d=f.call(c)).done)&&(h.push(d.value),h.length!==b);i=!0);}catch(a){j=!0,e=a}finally{try{if(!i&&null!=c.return&&(g=c.return(),Object(g)!==g))return}finally{if(j)throw e}}return h}}function _arrayWithHoles(a){if(Array.isArray(a))return a}function _classCallCheck(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function _defineProperties(a,b){for(var c,d=0;d<b.length;d++)c=b[d],c.enumerable=c.enumerable||!1,c.configurable=!0,"value"in c&&(c.writable=!0),Object.defineProperty(a,_toPropertyKey(c.key),c)}function _createClass(a,b,c){return b&&_defineProperties(a.prototype,b),c&&_defineProperties(a,c),Object.defineProperty(a,"prototype",{writable:!1}),a}function _defineProperty(a,b,c){return b=_toPropertyKey(b),b in a?Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!0}):a[b]=c,a}function _toPropertyKey(a){var b=_toPrimitive(a,"string");return"symbol"===_typeof(b)?b:b+""}function _toPrimitive(a,b){if("object"!==_typeof(a)||null===a)return a;var c=a[Symbol.toPrimitive];if(c!==void 0){var d=c.call(a,b||"default");if("object"!==_typeof(d))return d;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===b?String:Number)(a)}var VisitorCodeManager=function(){function a(){_classCallCheck(this,a),_defineProperty(this,"isConsentRequired",!1)}return _createClass(a,[{key:"setConsentRequired",value:function setConsentRequired(a){this.isConsentRequired=a}},{key:"getConsentRequired",value:function getConsentRequired(){return this.isConsentRequired}},{key:"getVisitorCode",value:function getVisitorCode(a){var b=a.defaultVisitorCode,c=a.setData,d=a.getData,e=d();if(e)return e;var f=b;return f?_utilities.Utilities.validateVisitorCode(f).throw():f=_utilities.Utilities.generateRandomString(_constants.VISITOR_CODE_LENGTH),this.isConsentRequired||c(f),f}},{key:"getCookieVisitorCode",value:function getCookieVisitorCode(a){var b=a.split(_constants.CookieParameter.PairsDelimiter).find(function findCookieValue(a){var b=a.split(_constants.CookieParameter.KeyValueDelimiter),c=_slicedToArray(b,2),d=c[0],e=c[1];return d===_constants.KAMELEOON_COOKIE_KEY&&""!==e});if(b){var c=b.split(_constants.CookieParameter.KeyValueDelimiter),d=_slicedToArray(c,2),e=d[0],f=d[1];return(0,_tsRes.Ok)(f)}return(0,_tsRes.Err)()}},{key:"getResultCookie",value:function getResultCookie(a){var b=a.domain,c=a.visitorCode,d=c?31536000:0,e=[_constants.KAMELEOON_COOKIE_KEY+_constants.CookieParameter.KeyValueDelimiter+c,_constants.CookieParameter.MaxAge+_constants.CookieParameter.KeyValueDelimiter+d,_constants.CookieParameter.Path+_constants.CookieParameter.KeyValueDelimiter+"/"];return b&&e.push(_constants.CookieParameter.Domain+_constants.CookieParameter.KeyValueDelimiter+b),e.join(_constants.CookieParameter.PairsDelimiter)}}]),a}();exports.VisitorCodeManager=VisitorCodeManager;
|
|
2
|
+
//# sourceMappingURL=visitorCodeManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"visitorCodeManager.js","names":["VisitorCodeManager","a","_classCallCheck","_defineProperty","_createClass","key","value","setConsentRequired","consentRequired","isConsentRequired","getConsentRequired","getVisitorCode","defaultVisitorCode","setData","getData","existingVisitorCode","visitorCode","Utilities","validateVisitorCode","throw","generateRandomString","VISITOR_CODE_LENGTH","getCookieVisitorCode","cookie","cookiePair","split","Cookie","PairsDelimiter","find","findCookieValue","pair","b","KeyValueDelimiter","c","_slicedToArray","KAMELEOON_COOKIE_KEY","d","_","Ok","Err","getResultCookie","domain","maxAge","cookieArray","MaxAge","Path","push","Domain","join","exports"],"sources":["../../src/visitorCodeManager/visitorCodeManager.ts"],"sourcesContent":["import { Err, Ok, Result } from 'ts-res';\nimport {\n CookieParameter as Cookie,\n KAMELEOON_COOKIE_KEY,\n VISITOR_CODE_LENGTH,\n} from 'src/constants';\nimport { Utilities } from 'src/utilities';\nimport {\n GetResultCookieParametersType,\n GetVisitorCodeParamtersType,\n} from 'src/types';\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 {\n private isConsentRequired: boolean = false;\n\n public setConsentRequired(consentRequired: boolean): void {\n this.isConsentRequired = consentRequired;\n }\n\n public getConsentRequired(): boolean {\n return this.isConsentRequired;\n }\n\n protected getVisitorCode({\n defaultVisitorCode,\n setData,\n getData,\n }: GetVisitorCodeParamtersType): string {\n const existingVisitorCode = getData();\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 setData(visitorCode);\n }\n\n return visitorCode;\n }\n\n protected getCookieVisitorCode(cookie: string): Result<string, void> {\n const findCookieValue = (pair: string): boolean => {\n const [key, value] = pair.split(Cookie.KeyValueDelimiter);\n\n return key === KAMELEOON_COOKIE_KEY && value !== '';\n };\n\n const cookiePair = cookie\n .split(Cookie.PairsDelimiter)\n .find(findCookieValue);\n\n if (cookiePair) {\n const [_, value] = cookiePair.split(Cookie.KeyValueDelimiter);\n\n return Ok(value);\n }\n\n return Err();\n }\n\n protected getResultCookie({\n domain,\n visitorCode,\n }: GetResultCookieParametersType): string {\n const yearSeconds = 60 * 60 * 24 * 365;\n const maxAge = visitorCode ? yearSeconds : 0;\n\n const cookieArray = [\n KAMELEOON_COOKIE_KEY + Cookie.KeyValueDelimiter + visitorCode,\n Cookie.MaxAge + Cookie.KeyValueDelimiter + maxAge,\n Cookie.Path + Cookie.KeyValueDelimiter + '/',\n ];\n\n if (domain) {\n cookieArray.push(Cookie.Domain + Cookie.KeyValueDelimiter + domain);\n }\n\n return cookieArray.join(Cookie.PairsDelimiter);\n }\n}\n"],"mappings":"kqFAgBa,CAAAA,kBAAkB,qBAAAC,EAAA,EAAAC,eAAA,MAAAD,CAAA,EAAAE,eAAA,qCAAAC,YAAA,CAAAH,CAAA,GAAAI,GAAA,sBAAAC,KAAA,CAG7B,SAAAC,mBAA0BC,CAAwB,CAAQ,CACxD,IAAI,CAACC,iBAAiB,CAAGD,CAC3B,CAAC,GAAAH,GAAA,sBAAAC,KAAA,CAED,SAAAI,mBAAA,CAAqC,CACnC,MAAO,KAAI,CAACD,iBACd,CAAC,GAAAJ,GAAA,kBAAAC,KAAA,CAED,SAAAK,eAAAV,CAAA,CAIwC,IAHtC,CAAAW,CAAkB,CAAAX,CAAA,CAAlBW,kBAAkB,CAClBC,CAAO,CAAAZ,CAAA,CAAPY,OAAO,CACPC,CAAO,CAAAb,CAAA,CAAPa,OAAO,CAEDC,CAAmB,CAAGD,CAAO,EAAE,CAErC,GAAIC,CAAmB,CACrB,MAAO,CAAAA,CAAmB,CAG5B,GAAI,CAAAC,CAAW,CAAGJ,CAAkB,CAYpC,MAVI,CAAAI,CAAW,CACbC,oBAAS,CAACC,mBAAmB,CAACF,CAAW,CAAC,CAACG,KAAK,EAAE,CAElDH,CAAW,CAAGC,oBAAS,CAACG,oBAAoB,CAACC,8BAAmB,CAAC,CAG9D,IAAI,CAACZ,iBAAiB,EACzBI,CAAO,CAACG,CAAW,CAAC,CAGfA,CACT,CAAC,GAAAX,GAAA,wBAAAC,KAAA,CAED,SAAAgB,qBAA+BC,CAAc,CAAwB,IAO7D,CAAAC,CAAU,CAAGD,CAAM,CACtBE,KAAK,CAACC,0BAAM,CAACC,cAAc,CAAC,CAC5BC,IAAI,CARiB,QAAlB,CAAAC,eAAeA,CAAIC,CAAY,CAAc,CACjD,IAAAC,CAAA,CAAqBD,CAAI,CAACL,KAAK,CAACC,0BAAM,CAACM,iBAAiB,CAAC,CAAAC,CAAA,CAAAC,cAAA,CAAAH,CAAA,IAAlD1B,CAAG,CAAA4B,CAAA,IAAE3B,CAAK,CAAA2B,CAAA,IAEjB,MAAO,CAAA5B,CAAG,GAAK8B,+BAAoB,EAAc,EAAE,GAAZ7B,CACzC,CAAC,CAIuB,CAExB,GAAIkB,CAAU,CAAE,CACd,IAAAS,CAAA,CAAmBT,CAAU,CAACC,KAAK,CAACC,0BAAM,CAACM,iBAAiB,CAAC,CAAAI,CAAA,CAAAF,cAAA,CAAAD,CAAA,IAAtDI,CAAC,CAAAD,CAAA,IAAE9B,CAAK,CAAA8B,CAAA,IAEf,MAAO,GAAAE,SAAE,EAAChC,CAAK,CACjB,CAEA,MAAO,GAAAiC,UAAG,GACZ,CAAC,GAAAlC,GAAA,mBAAAC,KAAA,CAED,SAAAkC,gBAAAvC,CAAA,CAG0C,IAFxC,CAAAwC,CAAM,CAAAxC,CAAA,CAANwC,MAAM,CACNzB,CAAW,CAAAf,CAAA,CAAXe,WAAW,CAGL0B,CAAM,CAAG1B,CAAW,UAAiB,CAAC,CAEtC2B,CAAW,CAAG,CAClBR,+BAAoB,CAAGT,0BAAM,CAACM,iBAAiB,CAAGhB,CAAW,CAC7DU,0BAAM,CAACkB,MAAM,CAAGlB,0BAAM,CAACM,iBAAiB,CAAGU,CAAM,CACjDhB,0BAAM,CAACmB,IAAI,CAAGnB,0BAAM,CAACM,iBAAiB,CAAG,GAAG,CAC7C,CAMD,MAJI,CAAAS,CAAM,EACRE,CAAW,CAACG,IAAI,CAACpB,0BAAM,CAACqB,MAAM,CAAGrB,0BAAM,CAACM,iBAAiB,CAAGS,CAAM,CAAC,CAG9DE,CAAW,CAACK,IAAI,CAACtB,0BAAM,CAACC,cAAc,CAC/C,CAAC,IAAA1B,CAAA,IAAAgD,OAAA,CAAAjD,kBAAA,CAAAA,kBAAA"}
|
package/package.json
CHANGED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { Result } from 'ts-res';
|
|
2
|
-
import { GetResultCookieParametersType, ClientGetVisitorCodeParametersType, ServerGetVisitorCodeParametersType, ServerSetCookieParametersType, ClientSetCookieParametersType } from '../types';
|
|
3
|
-
/**
|
|
4
|
-
* @abstract
|
|
5
|
-
* CookieManager - an abstract class for extending cookie manager with pre-defined method signatures
|
|
6
|
-
* */
|
|
7
|
-
export declare abstract class CookieManager {
|
|
8
|
-
private isConsentRequired;
|
|
9
|
-
abstract getCookie(params: ServerGetVisitorCodeParametersType | ClientGetVisitorCodeParametersType): string;
|
|
10
|
-
abstract setCookie(params: ServerSetCookieParametersType | ClientSetCookieParametersType): void;
|
|
11
|
-
getVisitorCode(params: ServerGetVisitorCodeParametersType | ClientGetVisitorCodeParametersType): string;
|
|
12
|
-
setConsentRequired(consentRequired: boolean): void;
|
|
13
|
-
getConsentRequired(): boolean;
|
|
14
|
-
protected getCookieVisitorCode(cookie: string): Result<string, void>;
|
|
15
|
-
protected getResultCookie({ domain, visitorCode, }: GetResultCookieParametersType): string;
|
|
16
|
-
}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.CookieManager=void 0;var _tsRes=require("ts-res"),_constants=require("../constants"),_utilities=require("../utilities");function _typeof(a){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a},_typeof(a)}function _slicedToArray(a,b){return _arrayWithHoles(a)||_iterableToArrayLimit(a,b)||_unsupportedIterableToArray(a,b)||_nonIterableRest()}function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _unsupportedIterableToArray(a,b){if(a){if("string"==typeof a)return _arrayLikeToArray(a,b);var c=Object.prototype.toString.call(a).slice(8,-1);return"Object"===c&&a.constructor&&(c=a.constructor.name),"Map"===c||"Set"===c?Array.from(a):"Arguments"===c||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(c)?_arrayLikeToArray(a,b):void 0}}function _arrayLikeToArray(a,b){(null==b||b>a.length)&&(b=a.length);for(var c=0,d=Array(b);c<b;c++)d[c]=a[c];return d}function _iterableToArrayLimit(a,b){var c=null==a?null:"undefined"!=typeof Symbol&&a[Symbol.iterator]||a["@@iterator"];if(null!=c){var d,e,f,g,h=[],i=!0,j=!1;try{if(f=(c=c.call(a)).next,0===b){if(Object(c)!==c)return;i=!1}else for(;!(i=(d=f.call(c)).done)&&(h.push(d.value),h.length!==b);i=!0);}catch(a){j=!0,e=a}finally{try{if(!i&&null!=c.return&&(g=c.return(),Object(g)!==g))return}finally{if(j)throw e}}return h}}function _arrayWithHoles(a){if(Array.isArray(a))return a}function _classCallCheck(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function _defineProperties(a,b){for(var c,d=0;d<b.length;d++)c=b[d],c.enumerable=c.enumerable||!1,c.configurable=!0,"value"in c&&(c.writable=!0),Object.defineProperty(a,_toPropertyKey(c.key),c)}function _createClass(a,b,c){return b&&_defineProperties(a.prototype,b),c&&_defineProperties(a,c),Object.defineProperty(a,"prototype",{writable:!1}),a}function _defineProperty(a,b,c){return b=_toPropertyKey(b),b in a?Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!0}):a[b]=c,a}function _toPropertyKey(a){var b=_toPrimitive(a,"string");return"symbol"===_typeof(b)?b:b+""}function _toPrimitive(a,b){if("object"!==_typeof(a)||null===a)return a;var c=a[Symbol.toPrimitive];if(c!==void 0){var d=c.call(a,b||"default");if("object"!==_typeof(d))return d;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===b?String:Number)(a)}var CookieManager=function(){function a(){_classCallCheck(this,a),_defineProperty(this,"isConsentRequired",!1)}return _createClass(a,[{key:"getVisitorCode",value:function getVisitorCode(a){var b=this.getCookie(a);if(b)return b;var c=a.defaultVisitorCode,d=c;return d?_utilities.Utilities.validateVisitorCode(d).throw():d=_utilities.Utilities.generateRandomString(_constants.VISITOR_CODE_LENGTH),this.isConsentRequired||(_utilities.Utilities.isServerEnvironment(a)?this.setCookie({visitorCode:d,response:a.response}):this.setCookie({visitorCode:d})),d}},{key:"setConsentRequired",value:function setConsentRequired(a){this.isConsentRequired=a}},{key:"getConsentRequired",value:function getConsentRequired(){return this.isConsentRequired}},{key:"getCookieVisitorCode",value:function getCookieVisitorCode(a){var b=a.split(_constants.CookieParameter.PairsDelimiter).find(function findCookieValue(a){var b=a.split(_constants.CookieParameter.KeyValueDelimiter),c=_slicedToArray(b,2),d=c[0],e=c[1];return d===_constants.KAMELEOON_COOKIE_KEY&&""!==e});if(b){var c=b.split(_constants.CookieParameter.KeyValueDelimiter),d=_slicedToArray(c,2),e=d[0],f=d[1];return(0,_tsRes.Ok)(f)}return(0,_tsRes.Err)()}},{key:"getResultCookie",value:function getResultCookie(a){var b=a.domain,c=a.visitorCode,d=c?31536000:0,e=[_constants.KAMELEOON_COOKIE_KEY+_constants.CookieParameter.KeyValueDelimiter+c,_constants.CookieParameter.MaxAge+_constants.CookieParameter.KeyValueDelimiter+d,_constants.CookieParameter.Path+_constants.CookieParameter.KeyValueDelimiter+"/"];return b&&e.push(_constants.CookieParameter.Domain+_constants.CookieParameter.KeyValueDelimiter+b),e.join(_constants.CookieParameter.PairsDelimiter)}}]),a}();exports.CookieManager=CookieManager;
|
|
2
|
-
//# sourceMappingURL=cookieManager.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cookieManager.js","names":["CookieManager","a","_classCallCheck","_defineProperty","_createClass","key","value","getVisitorCode","params","visitorCodeCookie","getCookie","defaultVisitorCode","visitorCode","Utilities","validateVisitorCode","throw","generateRandomString","VISITOR_CODE_LENGTH","isConsentRequired","isServerEnvironment","setCookie","response","setConsentRequired","consentRequired","getConsentRequired","getCookieVisitorCode","cookie","cookiePair","split","Cookie","PairsDelimiter","find","findCookieValue","pair","b","KeyValueDelimiter","c","_slicedToArray","KAMELEOON_COOKIE_KEY","d","_","Ok","Err","getResultCookie","domain","maxAge","cookieArray","MaxAge","Path","push","Domain","join","exports"],"sources":["../../src/cookieManager/cookieManager.ts"],"sourcesContent":["import { Err, Ok, Result } from 'ts-res';\nimport {\n CookieParameter as Cookie,\n KAMELEOON_COOKIE_KEY,\n VISITOR_CODE_LENGTH,\n} from 'src/constants';\nimport { Utilities } from 'src/utilities';\nimport {\n GetResultCookieParametersType,\n ClientGetVisitorCodeParametersType,\n ServerGetVisitorCodeParametersType,\n ServerSetCookieParametersType,\n ClientSetCookieParametersType,\n} from 'src/types';\n\n/**\n * @abstract\n * CookieManager - an abstract class for extending cookie manager with pre-defined method signatures\n * */\nexport abstract class CookieManager {\n private isConsentRequired: boolean = false;\n\n abstract getCookie(\n params:\n | ServerGetVisitorCodeParametersType\n | ClientGetVisitorCodeParametersType,\n ): string;\n\n abstract setCookie(\n params: ServerSetCookieParametersType | ClientSetCookieParametersType,\n ): void;\n\n public getVisitorCode(\n params:\n | ServerGetVisitorCodeParametersType\n | ClientGetVisitorCodeParametersType,\n ): string {\n const visitorCodeCookie = this.getCookie(params);\n\n if (visitorCodeCookie) {\n return visitorCodeCookie;\n }\n\n const { defaultVisitorCode } = params;\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 if (Utilities.isServerEnvironment(params)) {\n this.setCookie({\n visitorCode,\n response: params.response,\n });\n } else {\n this.setCookie({ visitorCode });\n }\n }\n\n return visitorCode;\n }\n\n public setConsentRequired(consentRequired: boolean): void {\n this.isConsentRequired = consentRequired;\n }\n\n public getConsentRequired(): boolean {\n return this.isConsentRequired;\n }\n\n protected getCookieVisitorCode(cookie: string): Result<string, void> {\n const findCookieValue = (pair: string): boolean => {\n const [key, value] = pair.split(Cookie.KeyValueDelimiter);\n\n return key === KAMELEOON_COOKIE_KEY && value !== '';\n };\n\n const cookiePair = cookie\n .split(Cookie.PairsDelimiter)\n .find(findCookieValue);\n\n if (cookiePair) {\n const [_, value] = cookiePair.split(Cookie.KeyValueDelimiter);\n\n return Ok(value);\n }\n\n return Err();\n }\n\n protected getResultCookie({\n domain,\n visitorCode,\n }: GetResultCookieParametersType): string {\n const yearSeconds = 60 * 60 * 24 * 365;\n const maxAge = visitorCode ? yearSeconds : 0;\n\n const cookieArray = [\n KAMELEOON_COOKIE_KEY + Cookie.KeyValueDelimiter + visitorCode,\n Cookie.MaxAge + Cookie.KeyValueDelimiter + maxAge,\n Cookie.Path + Cookie.KeyValueDelimiter + '/',\n ];\n\n if (domain) {\n cookieArray.push(Cookie.Domain + Cookie.KeyValueDelimiter + domain);\n }\n\n return cookieArray.join(Cookie.PairsDelimiter);\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { CookieManager } from './cookieManager';
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["_cookieManager","require","Object","defineProperty","exports","value","enumerable","get","CookieManager"],"sources":["../../src/cookieManager/index.ts"],"sourcesContent":["export { CookieManager } from './cookieManager';\n"],"mappings":"aAAA,IAAAA,cAAA,CAAAC,OAAA,oBAAgDC,MAAA,CAAAC,cAAA,CAAAC,OAAA,eAAAC,KAAA,MAAAH,MAAA,CAAAC,cAAA,CAAAC,OAAA,kBAAAE,UAAA,IAAAC,GAAA,UAAAA,IAAA,SAAAP,cAAA,CAAAQ,aAAA"}
|