@kameleoon/javascript-sdk-core 4.4.3 → 4.4.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # Change Log
2
2
 
3
+ ## 4.4.5 (2024-08-08)
4
+
5
+ ### Patch Changes
6
+
7
+ - Fixed an issue that caused duplicate entries in feature flag results for both anonymous and authorized/identified visitors during data reconciliation. This problem occurred when custom data of type mapping ID was not consistently sent for all sessions.
8
+
9
+ ## 4.4.4 (2024-07-19)
10
+
11
+ ### Patch Changes
12
+
13
+ - Fix previous release, which didn't contain all the described changes
14
+
3
15
  ## 4.4.3 (2024-07-19)
4
16
 
5
17
  ### Patch Changes
@@ -1 +1 @@
1
- {"version":3,"file":"clientConfiguration.js","names":["ClientConfiguration","constructor","a","updateInterval","storage","requester","dataManager","externalClientConfiguration","offlineTrackingStorage","eventSource","externalVisitorCodeManager","eventManager","_defineProperty","UpdateType","Idle","DEFAULT_CONFIGURATION_DATA","Map","lastUpdate","Date","visitorCodeManager","initialize","readStorageData","isExternalConfiguration","shouldUpdate","checkShouldUpdate","updateResult","updateClientConfiguration","ok","isUpdateTypeToggled","data","Ok","handleExternalUpdates","updateType","RealTime","isOpen","Polling","handlePollingUpdates","handleRealTimeUpdates","cleanupHandlers","close","updateConfigurationIntervalId","clearInterval","customData","configuration","featureFlags","configurationData","featureFlag","featureFlagsData","set","featureKey","updateEventCallback","timestamp","then","fireEvent","EventType","ConfigurationUpdate","open","setInterval","bind","err","segments","segmentsData","forEach","flag","rules","rule","segment","has","id","ruleMap","mappedRules","values","experimentId","variationByExposition","variationMap","variationKey","variationId","featureId","variations","isConsentRequired","consentType","ConsentType","Required","hasAnyTargetedDeliveryRule","isTargetedDeliveryRule","environmentEnabled","some","type","RuleType","TARGETED_DELIVERY","checkIntegrity","fields","Object","keys","length","requiredFields","DEFAULT_CLIENT_CONFIGURATION","sort","join","skipChecks","arguments","realTimeUpdate","size","lastUpdateTime","getTime","updateWindowEdge","now","result","read","isStorageValid","UrlProvider","setDataApiDomain","dataApiDomain","_objectSpread","write","toString","parse","b","clientConfigurationResult","getClientConfiguration","Utilities","sendOfflineTracking","customDataIndexes","clearTrees","clear","updateStorageData","toggleUpdateType","consentRequired","Array","from","exports"],"sources":["../../src/clientConfiguration/clientConfiguration.ts"],"sourcesContent":["import { Ok, Result } from 'ts-res';\nimport { KameleoonError } from 'src/kameleoonError/kameleoonError';\nimport { DataManager } from 'src/kameleoonData';\nimport { Requester } from 'src/requester';\nimport { SegmentType } from 'src/targeting';\nimport { ClientDataType } from 'src/storage';\nimport { IEventSource } from 'src/eventSource';\nimport {\n DEFAULT_CLIENT_CONFIGURATION,\n DEFAULT_CONFIGURATION_DATA,\n} from './constants';\nimport {\n ClientConfigurationDataType,\n ClientConfigurationParametersType,\n ConfigurationDataType,\n ConfigurationType,\n ConsentType,\n FeatureFlagType,\n MappedRuleType,\n RuleType,\n UpdateType,\n} from './types';\nimport { Utilities } from 'src/utilities';\nimport { IStorage, OfflineTracking } from 'src/storage/types';\nimport { IVisitorCodeManager } from 'src/visitorCodeManager';\nimport { EventManager, EventType } from 'src/eventManager';\nimport { UrlProvider } from 'src/requester/urlProvider';\n\ninterface IClientConfiguration {\n initialize: (useCache?: boolean) => Promise<Result<void, KameleoonError>>;\n readonly featureFlags: Map<string, FeatureFlagType>;\n readonly configuration: ConfigurationType;\n readonly segments: Map<string, SegmentType>;\n readonly ruleMap: Map<number, MappedRuleType>;\n}\n\nexport class ClientConfiguration implements IClientConfiguration {\n private updateConfigurationIntervalId: NodeJS.Timer | null = null;\n private updateType: UpdateType = UpdateType.Idle;\n private configurationData: ClientConfigurationDataType =\n DEFAULT_CONFIGURATION_DATA;\n private featureFlagsData: Map<string, FeatureFlagType> = new Map();\n private isTargetedDeliveryRule: boolean | null = null;\n private segmentsData: Map<string, SegmentType> | null = null;\n private updateInterval: number;\n private lastUpdate: Date;\n private storage: IStorage<ClientDataType>;\n private offlineTrackingStorage: IStorage<OfflineTracking>;\n private requester: Requester;\n private eventSource: IEventSource;\n private externalClientConfiguration?: ConfigurationDataType;\n private mappedRules: Map<number, MappedRuleType> | null = null;\n private dataManager: DataManager;\n private visitorCodeManager: IVisitorCodeManager;\n private eventManager: EventManager;\n\n constructor({\n updateInterval,\n storage,\n requester,\n dataManager,\n externalClientConfiguration,\n offlineTrackingStorage,\n eventSource,\n externalVisitorCodeManager,\n eventManager,\n }: ClientConfigurationParametersType) {\n this.requester = requester;\n this.updateInterval = updateInterval;\n this.lastUpdate = new Date();\n this.storage = storage;\n this.dataManager = dataManager;\n this.eventManager = eventManager;\n this.externalClientConfiguration = externalClientConfiguration;\n this.offlineTrackingStorage = offlineTrackingStorage;\n this.visitorCodeManager = externalVisitorCodeManager;\n this.eventSource = eventSource;\n }\n\n public async initialize(): Promise<Result<void, KameleoonError>> {\n this.readStorageData();\n\n const isExternalConfiguration = Boolean(this.externalClientConfiguration);\n const shouldUpdate = this.checkShouldUpdate(isExternalConfiguration);\n\n if (shouldUpdate) {\n const updateResult = await this.updateClientConfiguration();\n\n if (!updateResult.ok) {\n return updateResult;\n }\n\n // --- Note ---\n // If update type is being toggled `initialize` will be called again\n // so we don't need to continue execution here\n const isUpdateTypeToggled = updateResult.data;\n\n if (isUpdateTypeToggled) {\n return Ok();\n }\n }\n\n if (isExternalConfiguration) {\n this.handleExternalUpdates();\n\n return Ok();\n }\n\n if (this.updateType === UpdateType.RealTime && !this.eventSource.isOpen) {\n this.updateType = UpdateType.Idle;\n this.handleRealTimeUpdates();\n\n return Ok();\n }\n\n if (this.updateType === UpdateType.Polling) {\n this.handlePollingUpdates();\n }\n\n return Ok();\n }\n\n private cleanupHandlers(): void {\n if (this.eventSource.isOpen) {\n this.eventSource.close();\n }\n\n if (this.updateConfigurationIntervalId) {\n clearInterval(this.updateConfigurationIntervalId);\n }\n }\n\n private handleExternalUpdates(): void {\n this.cleanupHandlers();\n\n const { customData, configuration, featureFlags } =\n this.externalClientConfiguration!;\n this.configurationData = { customData, configuration };\n\n for (const featureFlag of featureFlags) {\n this.featureFlagsData.set(featureFlag.featureKey, featureFlag);\n }\n }\n\n private handleRealTimeUpdates(): void {\n this.cleanupHandlers();\n\n const updateEventCallback = (timestamp: number) => {\n this.updateClientConfiguration(timestamp).then((updateResult) => {\n if (updateResult.ok) {\n this.eventManager.fireEvent(EventType.ConfigurationUpdate, {\n timestamp,\n });\n }\n });\n };\n\n this.eventSource.open(updateEventCallback);\n }\n\n private handlePollingUpdates(): void {\n // --- Note ---\n // If `initialize` is called again the interval will be cleared\n // so theoretically we will constantly defer config update\n // but `this.lastUpdate` with `checkShouldUpdate` will prevent that\n this.cleanupHandlers();\n\n // --- Note ---\n // Error Handling is for `setInterval` emergency cleanup\n try {\n this.updateConfigurationIntervalId = setInterval(\n this.updateClientConfiguration.bind(this),\n this.updateInterval,\n );\n } catch (err) {\n if (this.updateConfigurationIntervalId) {\n clearInterval(this.updateConfigurationIntervalId);\n }\n\n throw err;\n }\n }\n\n get featureFlags(): Map<string, FeatureFlagType> {\n return this.featureFlagsData;\n }\n\n get configuration(): ConfigurationType {\n return this.configurationData.configuration;\n }\n\n get segments(): Map<string, SegmentType> {\n if (this.segmentsData) {\n return this.segmentsData;\n }\n\n const segmentsData = new Map<string, SegmentType>();\n\n this.featureFlagsData.forEach((flag) => {\n flag.rules.forEach((rule) => {\n if (rule.segment && !segmentsData.has(rule.segment.id)) {\n segmentsData.set(rule.segment.id, rule.segment);\n }\n });\n });\n\n this.segmentsData = segmentsData;\n\n return segmentsData;\n }\n\n get ruleMap(): Map<number, MappedRuleType> {\n if (this.mappedRules) {\n return this.mappedRules;\n }\n\n const mappedRules = new Map<number, MappedRuleType>();\n\n for (const featureFlag of this.featureFlags.values()) {\n for (const rule of featureFlag.rules) {\n const { id, experimentId, variationByExposition } = rule;\n const variationMap = new Map<string, number>();\n\n variationByExposition.forEach(({ variationKey, variationId }) => {\n if (typeof variationId === 'number') {\n variationMap.set(variationKey, variationId);\n }\n });\n\n mappedRules.set(id, {\n featureId: featureFlag.id,\n experimentId,\n variations: variationMap,\n });\n }\n }\n\n this.mappedRules = mappedRules;\n\n return mappedRules;\n }\n\n get isConsentRequired(): boolean {\n return this.configuration.consentType === ConsentType.Required;\n }\n\n get hasAnyTargetedDeliveryRule(): boolean {\n if (this.isTargetedDeliveryRule !== null) {\n return this.isTargetedDeliveryRule;\n }\n\n for (const featureFlag of this.featureFlags.values()) {\n if (\n featureFlag.environmentEnabled &&\n featureFlag.rules.some(\n (rule) => rule.type === RuleType.TARGETED_DELIVERY,\n )\n ) {\n return true;\n }\n }\n\n return false;\n }\n\n // --- Note ---\n // Integrity check covers most of the migration scenarios\n // however in the future it will be changed to a dedicate migration\n // block that can handle all versions migrations\n private checkIntegrity(data: ConfigurationDataType | undefined): boolean {\n if (!data) {\n return false;\n }\n\n const fields = Object.keys(data);\n\n if (!fields.length) {\n return false;\n }\n\n const requiredFields = Object.keys(DEFAULT_CLIENT_CONFIGURATION);\n\n return fields.sort().join() === requiredFields.sort().join();\n }\n\n private checkShouldUpdate(skipChecks = false): boolean {\n const { configuration } = this.configurationData;\n\n // --- Note ---\n // Following `updateType` logic is done for client side\n // edge cases where we have previous campaigns on storage already, but we still want\n // to initialize SSE/Polling after page reload\n if (skipChecks) {\n this.updateType = UpdateType.Idle;\n\n return false;\n }\n\n this.updateType = configuration.realTimeUpdate\n ? UpdateType.RealTime\n : UpdateType.Polling;\n\n if (!this.featureFlags.size) {\n return true;\n }\n\n const lastUpdateTime = this.lastUpdate.getTime();\n const updateWindowEdge = Date.now() - this.updateInterval;\n\n return lastUpdateTime < updateWindowEdge;\n }\n\n private readStorageData(): void {\n const result = this.storage.read();\n\n if (result.ok) {\n const { data, lastUpdate } = result.data;\n\n const isStorageValid = this.checkIntegrity(data);\n\n // --- Note ---\n // Cleaning up storage if it's not valid for migration purposes\n if (!isStorageValid) {\n UrlProvider.setDataApiDomain(\n DEFAULT_CONFIGURATION_DATA.configuration.dataApiDomain,\n );\n\n const data = {\n ...DEFAULT_CONFIGURATION_DATA,\n featureFlags: [],\n };\n\n this.storage.write({\n data,\n lastUpdate: this.lastUpdate.toString(),\n });\n\n this.configurationData = DEFAULT_CONFIGURATION_DATA;\n } else {\n UrlProvider.setDataApiDomain(data.configuration.dataApiDomain);\n\n const { featureFlags } = data;\n\n for (const featureFlag of featureFlags) {\n this.featureFlagsData.set(featureFlag.featureKey, featureFlag);\n }\n\n this.configurationData = data;\n this.lastUpdate = new Date(Date.parse(lastUpdate));\n }\n }\n }\n\n /**\n * Updates client configuration\n *\n * @param timeStamp - timestamp for real-time configuration update\n *\n * @returns `true` if current update type should be toggled (SSE/Polling)\n */\n private async updateClientConfiguration(\n timestamp?: number,\n ): Promise<Result<boolean, KameleoonError>> {\n const clientConfigurationResult =\n await this.requester.getClientConfiguration(timestamp);\n\n if (!clientConfigurationResult.ok) {\n if (this.featureFlags.size) {\n // TODO: the case of silent fail should be logged when logging is implemented\n return Ok(true);\n }\n\n return clientConfigurationResult;\n }\n\n Utilities.sendOfflineTracking({\n storage: this.offlineTrackingStorage,\n requester: this.requester,\n });\n\n const { configuration, customData, featureFlags } =\n clientConfigurationResult.data;\n\n this.configurationData = { configuration, customData };\n\n for (const featureFlag of featureFlags) {\n this.featureFlagsData.set(featureFlag.featureKey, featureFlag);\n }\n\n if (customData?.length) {\n this.dataManager.customDataIndexes = customData;\n }\n\n this.dataManager.clearTrees();\n this.mappedRules?.clear();\n this.isTargetedDeliveryRule = null;\n this.segmentsData = null;\n\n const result = this.updateStorageData();\n\n if (!result.ok) {\n return result;\n }\n\n const updateType = configuration.realTimeUpdate\n ? UpdateType.RealTime\n : UpdateType.Polling;\n\n const toggleUpdateType = updateType !== this.updateType;\n\n if (toggleUpdateType) {\n this.updateType = updateType;\n await this.initialize();\n }\n\n // --- Note ---\n // Regarding GDPR policy we should set visitorCode if legal consent isn't required\n // or we have at least one Targeted Delivery rule in configuration\n const consentRequired =\n this.isConsentRequired && !this.hasAnyTargetedDeliveryRule;\n this.visitorCodeManager.consentRequired = consentRequired;\n\n return Ok(toggleUpdateType);\n }\n\n private updateStorageData(): Result<void, KameleoonError> {\n this.lastUpdate = new Date();\n\n const configurationData = {\n ...this.configurationData,\n featureFlags: Array.from(this.featureFlags.values()),\n };\n\n const data: ClientDataType = {\n data: configurationData,\n lastUpdate: this.lastUpdate.toString(),\n };\n\n UrlProvider.setDataApiDomain(\n this.configurationData.configuration.dataApiDomain,\n );\n\n return this.storage.write(data);\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"clientConfiguration.js","names":["ClientConfiguration","constructor","a","updateInterval","storage","requester","dataManager","externalClientConfiguration","offlineTrackingStorage","eventSource","externalVisitorCodeManager","eventManager","_defineProperty","UpdateType","Idle","DEFAULT_CONFIGURATION_DATA","Map","lastUpdate","Date","visitorCodeManager","initialize","readStorageData","isExternalConfiguration","shouldUpdate","checkShouldUpdate","updateResult","updateClientConfiguration","ok","isUpdateTypeToggled","data","Ok","handleExternalUpdates","updateType","RealTime","isOpen","Polling","handlePollingUpdates","handleRealTimeUpdates","cleanupHandlers","close","updateConfigurationIntervalId","clearInterval","customData","configuration","featureFlags","configurationData","featureFlag","featureFlagsData","set","featureKey","updateEventCallback","timestamp","then","fireEvent","EventType","ConfigurationUpdate","open","setInterval","bind","err","segments","segmentsData","forEach","flag","rules","rule","segment","has","id","ruleMap","mappedRules","values","experimentId","variationByExposition","variationMap","variationKey","variationId","featureId","variations","isConsentRequired","consentType","ConsentType","Required","hasAnyTargetedDeliveryRule","isTargetedDeliveryRule","environmentEnabled","some","type","RuleType","TARGETED_DELIVERY","checkIntegrity","fields","Object","keys","length","requiredFields","DEFAULT_CLIENT_CONFIGURATION","sort","join","skipChecks","arguments","realTimeUpdate","size","lastUpdateTime","getTime","updateWindowEdge","now","result","read","isStorageValid","UrlProvider","setDataApiDomain","dataApiDomain","_objectSpread","write","toString","parse","b","clientConfigurationResult","getClientConfiguration","Utilities","sendOfflineTracking","customDataIndexes","clearTrees","clear","updateStorageData","toggleUpdateType","consentRequired","Array","from","exports"],"sources":["../../src/clientConfiguration/clientConfiguration.ts"],"sourcesContent":["import { Ok, Result } from 'ts-res';\nimport { KameleoonError } from 'src/kameleoonError/kameleoonError';\nimport { DataManager } from 'src/kameleoonData';\nimport { Requester } from 'src/requester';\nimport { SegmentType } from 'src/targeting';\nimport { ClientDataType } from 'src/storage';\nimport { IEventSource } from 'src/eventSource';\nimport {\n DEFAULT_CLIENT_CONFIGURATION,\n DEFAULT_CONFIGURATION_DATA,\n} from './constants';\nimport {\n ClientConfigurationDataType,\n ClientConfigurationParametersType,\n ConfigurationDataType,\n ConfigurationType,\n ConsentType,\n FeatureFlagType,\n MappedRuleType,\n RuleType,\n UpdateType,\n} from './types';\nimport { Utilities } from 'src/utilities';\nimport { IStorage, OfflineTracking } from 'src/storage/types';\nimport { IVisitorCodeManager } from 'src/visitorCodeManager';\nimport { EventManager, EventType } from 'src/eventManager';\nimport { UrlProvider } from 'src/requester/urlProvider';\n\ninterface IClientConfiguration {\n initialize: (useCache?: boolean) => Promise<Result<void, KameleoonError>>;\n readonly featureFlags: Map<string, FeatureFlagType>;\n readonly configuration: ConfigurationType;\n readonly segments: Map<string, SegmentType>;\n readonly ruleMap: Map<number, MappedRuleType>;\n}\n\nexport class ClientConfiguration implements IClientConfiguration {\n private updateConfigurationIntervalId: NodeJS.Timeout | null = null;\n private updateType: UpdateType = UpdateType.Idle;\n private configurationData: ClientConfigurationDataType =\n DEFAULT_CONFIGURATION_DATA;\n private featureFlagsData: Map<string, FeatureFlagType> = new Map();\n private isTargetedDeliveryRule: boolean | null = null;\n private segmentsData: Map<string, SegmentType> | null = null;\n private updateInterval: number;\n private lastUpdate: Date;\n private storage: IStorage<ClientDataType>;\n private offlineTrackingStorage: IStorage<OfflineTracking>;\n private requester: Requester;\n private eventSource: IEventSource;\n private externalClientConfiguration?: ConfigurationDataType;\n private mappedRules: Map<number, MappedRuleType> | null = null;\n private dataManager: DataManager;\n private visitorCodeManager: IVisitorCodeManager;\n private eventManager: EventManager;\n\n constructor({\n updateInterval,\n storage,\n requester,\n dataManager,\n externalClientConfiguration,\n offlineTrackingStorage,\n eventSource,\n externalVisitorCodeManager,\n eventManager,\n }: ClientConfigurationParametersType) {\n this.requester = requester;\n this.updateInterval = updateInterval;\n this.lastUpdate = new Date();\n this.storage = storage;\n this.dataManager = dataManager;\n this.eventManager = eventManager;\n this.externalClientConfiguration = externalClientConfiguration;\n this.offlineTrackingStorage = offlineTrackingStorage;\n this.visitorCodeManager = externalVisitorCodeManager;\n this.eventSource = eventSource;\n }\n\n public async initialize(): Promise<Result<void, KameleoonError>> {\n this.readStorageData();\n\n const isExternalConfiguration = Boolean(this.externalClientConfiguration);\n const shouldUpdate = this.checkShouldUpdate(isExternalConfiguration);\n\n if (shouldUpdate) {\n const updateResult = await this.updateClientConfiguration();\n\n if (!updateResult.ok) {\n return updateResult;\n }\n\n // --- Note ---\n // If update type is being toggled `initialize` will be called again\n // so we don't need to continue execution here\n const isUpdateTypeToggled = updateResult.data;\n\n if (isUpdateTypeToggled) {\n return Ok();\n }\n }\n\n if (isExternalConfiguration) {\n this.handleExternalUpdates();\n\n return Ok();\n }\n\n if (this.updateType === UpdateType.RealTime && !this.eventSource.isOpen) {\n this.updateType = UpdateType.Idle;\n this.handleRealTimeUpdates();\n\n return Ok();\n }\n\n if (this.updateType === UpdateType.Polling) {\n this.handlePollingUpdates();\n }\n\n return Ok();\n }\n\n private cleanupHandlers(): void {\n if (this.eventSource.isOpen) {\n this.eventSource.close();\n }\n\n if (this.updateConfigurationIntervalId) {\n clearInterval(this.updateConfigurationIntervalId);\n }\n }\n\n private handleExternalUpdates(): void {\n this.cleanupHandlers();\n\n const { customData, configuration, featureFlags } =\n this.externalClientConfiguration!;\n this.configurationData = { customData, configuration };\n\n for (const featureFlag of featureFlags) {\n this.featureFlagsData.set(featureFlag.featureKey, featureFlag);\n }\n }\n\n private handleRealTimeUpdates(): void {\n this.cleanupHandlers();\n\n const updateEventCallback = (timestamp: number) => {\n this.updateClientConfiguration(timestamp).then((updateResult) => {\n if (updateResult.ok) {\n this.eventManager.fireEvent(EventType.ConfigurationUpdate, {\n timestamp,\n });\n }\n });\n };\n\n this.eventSource.open(updateEventCallback);\n }\n\n private handlePollingUpdates(): void {\n // --- Note ---\n // If `initialize` is called again the interval will be cleared\n // so theoretically we will constantly defer config update\n // but `this.lastUpdate` with `checkShouldUpdate` will prevent that\n this.cleanupHandlers();\n\n // --- Note ---\n // Error Handling is for `setInterval` emergency cleanup\n try {\n this.updateConfigurationIntervalId = setInterval(\n this.updateClientConfiguration.bind(this),\n this.updateInterval,\n );\n } catch (err) {\n if (this.updateConfigurationIntervalId) {\n clearInterval(this.updateConfigurationIntervalId);\n }\n\n throw err;\n }\n }\n\n get featureFlags(): Map<string, FeatureFlagType> {\n return this.featureFlagsData;\n }\n\n get configuration(): ConfigurationType {\n return this.configurationData.configuration;\n }\n\n get segments(): Map<string, SegmentType> {\n if (this.segmentsData) {\n return this.segmentsData;\n }\n\n const segmentsData = new Map<string, SegmentType>();\n\n this.featureFlagsData.forEach((flag) => {\n flag.rules.forEach((rule) => {\n if (rule.segment && !segmentsData.has(rule.segment.id)) {\n segmentsData.set(rule.segment.id, rule.segment);\n }\n });\n });\n\n this.segmentsData = segmentsData;\n\n return segmentsData;\n }\n\n get ruleMap(): Map<number, MappedRuleType> {\n if (this.mappedRules) {\n return this.mappedRules;\n }\n\n const mappedRules = new Map<number, MappedRuleType>();\n\n for (const featureFlag of this.featureFlags.values()) {\n for (const rule of featureFlag.rules) {\n const { id, experimentId, variationByExposition } = rule;\n const variationMap = new Map<string, number>();\n\n variationByExposition.forEach(({ variationKey, variationId }) => {\n if (typeof variationId === 'number') {\n variationMap.set(variationKey, variationId);\n }\n });\n\n mappedRules.set(id, {\n featureId: featureFlag.id,\n experimentId,\n variations: variationMap,\n });\n }\n }\n\n this.mappedRules = mappedRules;\n\n return mappedRules;\n }\n\n get isConsentRequired(): boolean {\n return this.configuration.consentType === ConsentType.Required;\n }\n\n get hasAnyTargetedDeliveryRule(): boolean {\n if (this.isTargetedDeliveryRule !== null) {\n return this.isTargetedDeliveryRule;\n }\n\n for (const featureFlag of this.featureFlags.values()) {\n if (\n featureFlag.environmentEnabled &&\n featureFlag.rules.some(\n (rule) => rule.type === RuleType.TARGETED_DELIVERY,\n )\n ) {\n return true;\n }\n }\n\n return false;\n }\n\n // --- Note ---\n // Integrity check covers most of the migration scenarios\n // however in the future it will be changed to a dedicate migration\n // block that can handle all versions migrations\n private checkIntegrity(data: ConfigurationDataType | undefined): boolean {\n if (!data) {\n return false;\n }\n\n const fields = Object.keys(data);\n\n if (!fields.length) {\n return false;\n }\n\n const requiredFields = Object.keys(DEFAULT_CLIENT_CONFIGURATION);\n\n return fields.sort().join() === requiredFields.sort().join();\n }\n\n private checkShouldUpdate(skipChecks = false): boolean {\n const { configuration } = this.configurationData;\n\n // --- Note ---\n // Following `updateType` logic is done for client side\n // edge cases where we have previous campaigns on storage already, but we still want\n // to initialize SSE/Polling after page reload\n if (skipChecks) {\n this.updateType = UpdateType.Idle;\n\n return false;\n }\n\n this.updateType = configuration.realTimeUpdate\n ? UpdateType.RealTime\n : UpdateType.Polling;\n\n if (!this.featureFlags.size) {\n return true;\n }\n\n const lastUpdateTime = this.lastUpdate.getTime();\n const updateWindowEdge = Date.now() - this.updateInterval;\n\n return lastUpdateTime < updateWindowEdge;\n }\n\n private readStorageData(): void {\n const result = this.storage.read();\n\n if (result.ok) {\n const { data, lastUpdate } = result.data;\n\n const isStorageValid = this.checkIntegrity(data);\n\n // --- Note ---\n // Cleaning up storage if it's not valid for migration purposes\n if (!isStorageValid) {\n UrlProvider.setDataApiDomain(\n DEFAULT_CONFIGURATION_DATA.configuration.dataApiDomain,\n );\n\n const data = {\n ...DEFAULT_CONFIGURATION_DATA,\n featureFlags: [],\n };\n\n this.storage.write({\n data,\n lastUpdate: this.lastUpdate.toString(),\n });\n\n this.configurationData = DEFAULT_CONFIGURATION_DATA;\n } else {\n UrlProvider.setDataApiDomain(data.configuration.dataApiDomain);\n\n const { featureFlags } = data;\n\n for (const featureFlag of featureFlags) {\n this.featureFlagsData.set(featureFlag.featureKey, featureFlag);\n }\n\n this.configurationData = data;\n this.lastUpdate = new Date(Date.parse(lastUpdate));\n }\n }\n }\n\n /**\n * Updates client configuration\n *\n * @param timeStamp - timestamp for real-time configuration update\n *\n * @returns `true` if current update type should be toggled (SSE/Polling)\n */\n private async updateClientConfiguration(\n timestamp?: number,\n ): Promise<Result<boolean, KameleoonError>> {\n const clientConfigurationResult =\n await this.requester.getClientConfiguration(timestamp);\n\n if (!clientConfigurationResult.ok) {\n if (this.featureFlags.size) {\n // TODO: the case of silent fail should be logged when logging is implemented\n return Ok(true);\n }\n\n return clientConfigurationResult;\n }\n\n Utilities.sendOfflineTracking({\n storage: this.offlineTrackingStorage,\n requester: this.requester,\n });\n\n const { configuration, customData, featureFlags } =\n clientConfigurationResult.data;\n\n this.configurationData = { configuration, customData };\n\n for (const featureFlag of featureFlags) {\n this.featureFlagsData.set(featureFlag.featureKey, featureFlag);\n }\n\n if (customData?.length) {\n this.dataManager.customDataIndexes = customData;\n }\n\n this.dataManager.clearTrees();\n this.mappedRules?.clear();\n this.isTargetedDeliveryRule = null;\n this.segmentsData = null;\n\n const result = this.updateStorageData();\n\n if (!result.ok) {\n return result;\n }\n\n const updateType = configuration.realTimeUpdate\n ? UpdateType.RealTime\n : UpdateType.Polling;\n\n const toggleUpdateType = updateType !== this.updateType;\n\n if (toggleUpdateType) {\n this.updateType = updateType;\n await this.initialize();\n }\n\n // --- Note ---\n // Regarding GDPR policy we should set visitorCode if legal consent isn't required\n // or we have at least one Targeted Delivery rule in configuration\n const consentRequired =\n this.isConsentRequired && !this.hasAnyTargetedDeliveryRule;\n this.visitorCodeManager.consentRequired = consentRequired;\n\n return Ok(toggleUpdateType);\n }\n\n private updateStorageData(): Result<void, KameleoonError> {\n this.lastUpdate = new Date();\n\n const configurationData = {\n ...this.configurationData,\n featureFlags: Array.from(this.featureFlags.values()),\n };\n\n const data: ClientDataType = {\n data: configurationData,\n lastUpdate: this.lastUpdate.toString(),\n };\n\n UrlProvider.setDataApiDomain(\n this.configurationData.configuration.dataApiDomain,\n );\n\n return this.storage.write(data);\n }\n}\n"],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -3,13 +3,13 @@ export { KameleoonClient as KameleoonCore } from './kameleoonClient';
3
3
  export { IKameleoonClient as IKameleoonCore } from './kameleoonClientInterface';
4
4
  export { KameleoonUtils } from './kameleoonUtils';
5
5
  export { KameleoonException, KameleoonError } from './kameleoonError';
6
- export { VisitorDataFiltersType } from './utilities';
7
- export { FeatureFlagVariationsType, KameleoonStorageKey, StorageDataType, IExternalStorage, } from './storage';
6
+ export { VisitorDataFiltersType, IExternalPRNG } from './utilities';
7
+ export { FeatureFlagVariationsType, KameleoonStorageKey, IExternalStorage, StorageDataType, } from './storage';
8
8
  export { EventCallbackType, EventDataType, EventType, EvaluationEventDataType, ConfigurationUpdateEventDataType, } from './eventManager';
9
9
  export { VisitorCodeManager, IVisitorCodeManager } from './visitorCodeManager';
10
10
  export { VISITOR_CODE_LENGTH, SdkLanguageType } from './constants';
11
11
  export { JSONType, ConfigurationDataType } from './clientConfiguration';
12
- export { Environment, VariableType, FeatureFlagType, SDKCoreParameters, SDKConfigurationType, KameleoonVariationType, ExternalPackageInfoType, FeatureFlagVariableType, TrackConversionParamsType, FeatureVariableResultType, RemoteVisitorDataParamsType, InternalSDKConfigurationType, SetDataCallbackParametersType, GetFeatureFlagVariableParamsType, GetVisitorWarehouseAudienceParamsType, SimulateRequestDataType, Milliseconds, } from './types';
12
+ export { Environment, VariableType, InternalsType, FeatureFlagType, SDKCoreParameters, SDKConfigurationType, KameleoonVariationType, ExternalPackageInfoType, FeatureFlagVariableType, TrackConversionParamsType, FeatureVariableResultType, RemoteVisitorDataParamsType, InternalSDKConfigurationType, SetDataCallbackParametersType, GetFeatureFlagVariableParamsType, GetVisitorWarehouseAudienceParamsType, SimulateRequestDataType, Milliseconds, } from './types';
13
13
  export { ApplicationVersion, CustomData, Conversion, Device, Cookie, Browser, UserAgent, DeviceType, CookieType, GeolocationData, GeolocationInfoType, OperatingSystemType, OperatingSystem, BrowserType, PageView, KameleoonData, KameleoonDataType, PageViewParametersType, ConversionParametersType, ApplicationVersionDataType, } from './kameleoonData';
14
14
  export { IExternalEventSource, EventSourceOpenParametersType, } from './eventSource';
15
15
  export { Header, HeadersType, HttpMethod, TrackParametersType, IExternalRequester, RequestParametersType, RequestType, RetryCountType, KameleoonResponseType, SendRequestParametersType, NUMBER_OF_RETRIES, } from './requester';
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"ApplicationVersion",{enumerable:!0,get:function(){return _kameleoonData.ApplicationVersion}}),Object.defineProperty(exports,"ApplicationVersionDataType",{enumerable:!0,get:function(){return _kameleoonData.ApplicationVersionDataType}}),Object.defineProperty(exports,"Browser",{enumerable:!0,get:function(){return _kameleoonData.Browser}}),Object.defineProperty(exports,"BrowserType",{enumerable:!0,get:function(){return _kameleoonData.BrowserType}}),Object.defineProperty(exports,"ConfigurationDataType",{enumerable:!0,get:function(){return _clientConfiguration.ConfigurationDataType}}),Object.defineProperty(exports,"ConfigurationUpdateEventDataType",{enumerable:!0,get:function(){return _eventManager.ConfigurationUpdateEventDataType}}),Object.defineProperty(exports,"Conversion",{enumerable:!0,get:function(){return _kameleoonData.Conversion}}),Object.defineProperty(exports,"ConversionParametersType",{enumerable:!0,get:function(){return _kameleoonData.ConversionParametersType}}),Object.defineProperty(exports,"Cookie",{enumerable:!0,get:function(){return _kameleoonData.Cookie}}),Object.defineProperty(exports,"CookieType",{enumerable:!0,get:function(){return _kameleoonData.CookieType}}),Object.defineProperty(exports,"CustomData",{enumerable:!0,get:function(){return _kameleoonData.CustomData}}),Object.defineProperty(exports,"Device",{enumerable:!0,get:function(){return _kameleoonData.Device}}),Object.defineProperty(exports,"DeviceType",{enumerable:!0,get:function(){return _kameleoonData.DeviceType}}),Object.defineProperty(exports,"Environment",{enumerable:!0,get:function(){return _types.Environment}}),Object.defineProperty(exports,"Err",{enumerable:!0,get:function(){return _tsRes.Err}}),Object.defineProperty(exports,"EvaluationEventDataType",{enumerable:!0,get:function(){return _eventManager.EvaluationEventDataType}}),Object.defineProperty(exports,"EventCallbackType",{enumerable:!0,get:function(){return _eventManager.EventCallbackType}}),Object.defineProperty(exports,"EventDataType",{enumerable:!0,get:function(){return _eventManager.EventDataType}}),Object.defineProperty(exports,"EventSourceOpenParametersType",{enumerable:!0,get:function(){return _eventSource.EventSourceOpenParametersType}}),Object.defineProperty(exports,"EventType",{enumerable:!0,get:function(){return _eventManager.EventType}}),Object.defineProperty(exports,"ExternalPackageInfoType",{enumerable:!0,get:function(){return _types.ExternalPackageInfoType}}),Object.defineProperty(exports,"FeatureFlagType",{enumerable:!0,get:function(){return _types.FeatureFlagType}}),Object.defineProperty(exports,"FeatureFlagVariableType",{enumerable:!0,get:function(){return _types.FeatureFlagVariableType}}),Object.defineProperty(exports,"FeatureFlagVariationsType",{enumerable:!0,get:function(){return _storage.FeatureFlagVariationsType}}),Object.defineProperty(exports,"FeatureVariableResultType",{enumerable:!0,get:function(){return _types.FeatureVariableResultType}}),Object.defineProperty(exports,"GeolocationData",{enumerable:!0,get:function(){return _kameleoonData.GeolocationData}}),Object.defineProperty(exports,"GeolocationInfoType",{enumerable:!0,get:function(){return _kameleoonData.GeolocationInfoType}}),Object.defineProperty(exports,"GetFeatureFlagVariableParamsType",{enumerable:!0,get:function(){return _types.GetFeatureFlagVariableParamsType}}),Object.defineProperty(exports,"GetVisitorWarehouseAudienceParamsType",{enumerable:!0,get:function(){return _types.GetVisitorWarehouseAudienceParamsType}}),Object.defineProperty(exports,"Header",{enumerable:!0,get:function(){return _requester.Header}}),Object.defineProperty(exports,"HeadersType",{enumerable:!0,get:function(){return _requester.HeadersType}}),Object.defineProperty(exports,"HttpMethod",{enumerable:!0,get:function(){return _requester.HttpMethod}}),Object.defineProperty(exports,"IExternalEventSource",{enumerable:!0,get:function(){return _eventSource.IExternalEventSource}}),Object.defineProperty(exports,"IExternalRequester",{enumerable:!0,get:function(){return _requester.IExternalRequester}}),Object.defineProperty(exports,"IExternalStorage",{enumerable:!0,get:function(){return _storage.IExternalStorage}}),Object.defineProperty(exports,"IKameleoonCore",{enumerable:!0,get:function(){return _kameleoonClientInterface.IKameleoonClient}}),Object.defineProperty(exports,"IVisitorCodeManager",{enumerable:!0,get:function(){return _visitorCodeManager.IVisitorCodeManager}}),Object.defineProperty(exports,"InternalSDKConfigurationType",{enumerable:!0,get:function(){return _types.InternalSDKConfigurationType}}),Object.defineProperty(exports,"JSONType",{enumerable:!0,get:function(){return _clientConfiguration.JSONType}}),Object.defineProperty(exports,"KameleoonCore",{enumerable:!0,get:function(){return _kameleoonClient.KameleoonClient}}),Object.defineProperty(exports,"KameleoonData",{enumerable:!0,get:function(){return _kameleoonData.KameleoonData}}),Object.defineProperty(exports,"KameleoonDataType",{enumerable:!0,get:function(){return _kameleoonData.KameleoonDataType}}),Object.defineProperty(exports,"KameleoonError",{enumerable:!0,get:function(){return _kameleoonError.KameleoonError}}),Object.defineProperty(exports,"KameleoonException",{enumerable:!0,get:function(){return _kameleoonError.KameleoonException}}),Object.defineProperty(exports,"KameleoonResponseType",{enumerable:!0,get:function(){return _requester.KameleoonResponseType}}),Object.defineProperty(exports,"KameleoonStorageKey",{enumerable:!0,get:function(){return _storage.KameleoonStorageKey}}),Object.defineProperty(exports,"KameleoonUtils",{enumerable:!0,get:function(){return _kameleoonUtils.KameleoonUtils}}),Object.defineProperty(exports,"KameleoonVariationType",{enumerable:!0,get:function(){return _types.KameleoonVariationType}}),Object.defineProperty(exports,"Milliseconds",{enumerable:!0,get:function(){return _types.Milliseconds}}),Object.defineProperty(exports,"NUMBER_OF_RETRIES",{enumerable:!0,get:function(){return _requester.NUMBER_OF_RETRIES}}),Object.defineProperty(exports,"Ok",{enumerable:!0,get:function(){return _tsRes.Ok}}),Object.defineProperty(exports,"OperatingSystem",{enumerable:!0,get:function(){return _kameleoonData.OperatingSystem}}),Object.defineProperty(exports,"OperatingSystemType",{enumerable:!0,get:function(){return _kameleoonData.OperatingSystemType}}),Object.defineProperty(exports,"PageView",{enumerable:!0,get:function(){return _kameleoonData.PageView}}),Object.defineProperty(exports,"PageViewParametersType",{enumerable:!0,get:function(){return _kameleoonData.PageViewParametersType}}),Object.defineProperty(exports,"RemoteVisitorDataParamsType",{enumerable:!0,get:function(){return _types.RemoteVisitorDataParamsType}}),Object.defineProperty(exports,"RequestParametersType",{enumerable:!0,get:function(){return _requester.RequestParametersType}}),Object.defineProperty(exports,"RequestType",{enumerable:!0,get:function(){return _requester.RequestType}}),Object.defineProperty(exports,"Result",{enumerable:!0,get:function(){return _tsRes.Result}}),Object.defineProperty(exports,"RetryCountType",{enumerable:!0,get:function(){return _requester.RetryCountType}}),Object.defineProperty(exports,"SDKConfigurationType",{enumerable:!0,get:function(){return _types.SDKConfigurationType}}),Object.defineProperty(exports,"SDKCoreParameters",{enumerable:!0,get:function(){return _types.SDKCoreParameters}}),Object.defineProperty(exports,"SdkLanguageType",{enumerable:!0,get:function(){return _constants.SdkLanguageType}}),Object.defineProperty(exports,"SendRequestParametersType",{enumerable:!0,get:function(){return _requester.SendRequestParametersType}}),Object.defineProperty(exports,"SetDataCallbackParametersType",{enumerable:!0,get:function(){return _types.SetDataCallbackParametersType}}),Object.defineProperty(exports,"SimulateRequestDataType",{enumerable:!0,get:function(){return _types.SimulateRequestDataType}}),Object.defineProperty(exports,"StorageDataType",{enumerable:!0,get:function(){return _storage.StorageDataType}}),Object.defineProperty(exports,"TrackConversionParamsType",{enumerable:!0,get:function(){return _types.TrackConversionParamsType}}),Object.defineProperty(exports,"TrackParametersType",{enumerable:!0,get:function(){return _requester.TrackParametersType}}),Object.defineProperty(exports,"UserAgent",{enumerable:!0,get:function(){return _kameleoonData.UserAgent}}),Object.defineProperty(exports,"VISITOR_CODE_LENGTH",{enumerable:!0,get:function(){return _constants.VISITOR_CODE_LENGTH}}),Object.defineProperty(exports,"VariableType",{enumerable:!0,get:function(){return _types.VariableType}}),Object.defineProperty(exports,"VisitorCodeManager",{enumerable:!0,get:function(){return _visitorCodeManager.VisitorCodeManager}}),Object.defineProperty(exports,"VisitorDataFiltersType",{enumerable:!0,get:function(){return _utilities.VisitorDataFiltersType}});var _tsRes=require("ts-res"),_kameleoonClient=require("./kameleoonClient"),_kameleoonClientInterface=require("./kameleoonClientInterface"),_kameleoonUtils=require("./kameleoonUtils"),_kameleoonError=require("./kameleoonError"),_utilities=require("./utilities"),_storage=require("./storage"),_eventManager=require("./eventManager"),_visitorCodeManager=require("./visitorCodeManager"),_constants=require("./constants"),_clientConfiguration=require("./clientConfiguration"),_types=require("./types"),_kameleoonData=require("./kameleoonData"),_eventSource=require("./eventSource"),_requester=require("./requester");
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"ApplicationVersion",{enumerable:!0,get:function(){return _kameleoonData.ApplicationVersion}}),Object.defineProperty(exports,"ApplicationVersionDataType",{enumerable:!0,get:function(){return _kameleoonData.ApplicationVersionDataType}}),Object.defineProperty(exports,"Browser",{enumerable:!0,get:function(){return _kameleoonData.Browser}}),Object.defineProperty(exports,"BrowserType",{enumerable:!0,get:function(){return _kameleoonData.BrowserType}}),Object.defineProperty(exports,"ConfigurationDataType",{enumerable:!0,get:function(){return _clientConfiguration.ConfigurationDataType}}),Object.defineProperty(exports,"ConfigurationUpdateEventDataType",{enumerable:!0,get:function(){return _eventManager.ConfigurationUpdateEventDataType}}),Object.defineProperty(exports,"Conversion",{enumerable:!0,get:function(){return _kameleoonData.Conversion}}),Object.defineProperty(exports,"ConversionParametersType",{enumerable:!0,get:function(){return _kameleoonData.ConversionParametersType}}),Object.defineProperty(exports,"Cookie",{enumerable:!0,get:function(){return _kameleoonData.Cookie}}),Object.defineProperty(exports,"CookieType",{enumerable:!0,get:function(){return _kameleoonData.CookieType}}),Object.defineProperty(exports,"CustomData",{enumerable:!0,get:function(){return _kameleoonData.CustomData}}),Object.defineProperty(exports,"Device",{enumerable:!0,get:function(){return _kameleoonData.Device}}),Object.defineProperty(exports,"DeviceType",{enumerable:!0,get:function(){return _kameleoonData.DeviceType}}),Object.defineProperty(exports,"Environment",{enumerable:!0,get:function(){return _types.Environment}}),Object.defineProperty(exports,"Err",{enumerable:!0,get:function(){return _tsRes.Err}}),Object.defineProperty(exports,"EvaluationEventDataType",{enumerable:!0,get:function(){return _eventManager.EvaluationEventDataType}}),Object.defineProperty(exports,"EventCallbackType",{enumerable:!0,get:function(){return _eventManager.EventCallbackType}}),Object.defineProperty(exports,"EventDataType",{enumerable:!0,get:function(){return _eventManager.EventDataType}}),Object.defineProperty(exports,"EventSourceOpenParametersType",{enumerable:!0,get:function(){return _eventSource.EventSourceOpenParametersType}}),Object.defineProperty(exports,"EventType",{enumerable:!0,get:function(){return _eventManager.EventType}}),Object.defineProperty(exports,"ExternalPackageInfoType",{enumerable:!0,get:function(){return _types.ExternalPackageInfoType}}),Object.defineProperty(exports,"FeatureFlagType",{enumerable:!0,get:function(){return _types.FeatureFlagType}}),Object.defineProperty(exports,"FeatureFlagVariableType",{enumerable:!0,get:function(){return _types.FeatureFlagVariableType}}),Object.defineProperty(exports,"FeatureFlagVariationsType",{enumerable:!0,get:function(){return _storage.FeatureFlagVariationsType}}),Object.defineProperty(exports,"FeatureVariableResultType",{enumerable:!0,get:function(){return _types.FeatureVariableResultType}}),Object.defineProperty(exports,"GeolocationData",{enumerable:!0,get:function(){return _kameleoonData.GeolocationData}}),Object.defineProperty(exports,"GeolocationInfoType",{enumerable:!0,get:function(){return _kameleoonData.GeolocationInfoType}}),Object.defineProperty(exports,"GetFeatureFlagVariableParamsType",{enumerable:!0,get:function(){return _types.GetFeatureFlagVariableParamsType}}),Object.defineProperty(exports,"GetVisitorWarehouseAudienceParamsType",{enumerable:!0,get:function(){return _types.GetVisitorWarehouseAudienceParamsType}}),Object.defineProperty(exports,"Header",{enumerable:!0,get:function(){return _requester.Header}}),Object.defineProperty(exports,"HeadersType",{enumerable:!0,get:function(){return _requester.HeadersType}}),Object.defineProperty(exports,"HttpMethod",{enumerable:!0,get:function(){return _requester.HttpMethod}}),Object.defineProperty(exports,"IExternalEventSource",{enumerable:!0,get:function(){return _eventSource.IExternalEventSource}}),Object.defineProperty(exports,"IExternalPRNG",{enumerable:!0,get:function(){return _utilities.IExternalPRNG}}),Object.defineProperty(exports,"IExternalRequester",{enumerable:!0,get:function(){return _requester.IExternalRequester}}),Object.defineProperty(exports,"IExternalStorage",{enumerable:!0,get:function(){return _storage.IExternalStorage}}),Object.defineProperty(exports,"IKameleoonCore",{enumerable:!0,get:function(){return _kameleoonClientInterface.IKameleoonClient}}),Object.defineProperty(exports,"IVisitorCodeManager",{enumerable:!0,get:function(){return _visitorCodeManager.IVisitorCodeManager}}),Object.defineProperty(exports,"InternalSDKConfigurationType",{enumerable:!0,get:function(){return _types.InternalSDKConfigurationType}}),Object.defineProperty(exports,"InternalsType",{enumerable:!0,get:function(){return _types.InternalsType}}),Object.defineProperty(exports,"JSONType",{enumerable:!0,get:function(){return _clientConfiguration.JSONType}}),Object.defineProperty(exports,"KameleoonCore",{enumerable:!0,get:function(){return _kameleoonClient.KameleoonClient}}),Object.defineProperty(exports,"KameleoonData",{enumerable:!0,get:function(){return _kameleoonData.KameleoonData}}),Object.defineProperty(exports,"KameleoonDataType",{enumerable:!0,get:function(){return _kameleoonData.KameleoonDataType}}),Object.defineProperty(exports,"KameleoonError",{enumerable:!0,get:function(){return _kameleoonError.KameleoonError}}),Object.defineProperty(exports,"KameleoonException",{enumerable:!0,get:function(){return _kameleoonError.KameleoonException}}),Object.defineProperty(exports,"KameleoonResponseType",{enumerable:!0,get:function(){return _requester.KameleoonResponseType}}),Object.defineProperty(exports,"KameleoonStorageKey",{enumerable:!0,get:function(){return _storage.KameleoonStorageKey}}),Object.defineProperty(exports,"KameleoonUtils",{enumerable:!0,get:function(){return _kameleoonUtils.KameleoonUtils}}),Object.defineProperty(exports,"KameleoonVariationType",{enumerable:!0,get:function(){return _types.KameleoonVariationType}}),Object.defineProperty(exports,"Milliseconds",{enumerable:!0,get:function(){return _types.Milliseconds}}),Object.defineProperty(exports,"NUMBER_OF_RETRIES",{enumerable:!0,get:function(){return _requester.NUMBER_OF_RETRIES}}),Object.defineProperty(exports,"Ok",{enumerable:!0,get:function(){return _tsRes.Ok}}),Object.defineProperty(exports,"OperatingSystem",{enumerable:!0,get:function(){return _kameleoonData.OperatingSystem}}),Object.defineProperty(exports,"OperatingSystemType",{enumerable:!0,get:function(){return _kameleoonData.OperatingSystemType}}),Object.defineProperty(exports,"PageView",{enumerable:!0,get:function(){return _kameleoonData.PageView}}),Object.defineProperty(exports,"PageViewParametersType",{enumerable:!0,get:function(){return _kameleoonData.PageViewParametersType}}),Object.defineProperty(exports,"RemoteVisitorDataParamsType",{enumerable:!0,get:function(){return _types.RemoteVisitorDataParamsType}}),Object.defineProperty(exports,"RequestParametersType",{enumerable:!0,get:function(){return _requester.RequestParametersType}}),Object.defineProperty(exports,"RequestType",{enumerable:!0,get:function(){return _requester.RequestType}}),Object.defineProperty(exports,"Result",{enumerable:!0,get:function(){return _tsRes.Result}}),Object.defineProperty(exports,"RetryCountType",{enumerable:!0,get:function(){return _requester.RetryCountType}}),Object.defineProperty(exports,"SDKConfigurationType",{enumerable:!0,get:function(){return _types.SDKConfigurationType}}),Object.defineProperty(exports,"SDKCoreParameters",{enumerable:!0,get:function(){return _types.SDKCoreParameters}}),Object.defineProperty(exports,"SdkLanguageType",{enumerable:!0,get:function(){return _constants.SdkLanguageType}}),Object.defineProperty(exports,"SendRequestParametersType",{enumerable:!0,get:function(){return _requester.SendRequestParametersType}}),Object.defineProperty(exports,"SetDataCallbackParametersType",{enumerable:!0,get:function(){return _types.SetDataCallbackParametersType}}),Object.defineProperty(exports,"SimulateRequestDataType",{enumerable:!0,get:function(){return _types.SimulateRequestDataType}}),Object.defineProperty(exports,"StorageDataType",{enumerable:!0,get:function(){return _storage.StorageDataType}}),Object.defineProperty(exports,"TrackConversionParamsType",{enumerable:!0,get:function(){return _types.TrackConversionParamsType}}),Object.defineProperty(exports,"TrackParametersType",{enumerable:!0,get:function(){return _requester.TrackParametersType}}),Object.defineProperty(exports,"UserAgent",{enumerable:!0,get:function(){return _kameleoonData.UserAgent}}),Object.defineProperty(exports,"VISITOR_CODE_LENGTH",{enumerable:!0,get:function(){return _constants.VISITOR_CODE_LENGTH}}),Object.defineProperty(exports,"VariableType",{enumerable:!0,get:function(){return _types.VariableType}}),Object.defineProperty(exports,"VisitorCodeManager",{enumerable:!0,get:function(){return _visitorCodeManager.VisitorCodeManager}}),Object.defineProperty(exports,"VisitorDataFiltersType",{enumerable:!0,get:function(){return _utilities.VisitorDataFiltersType}});var _tsRes=require("ts-res"),_kameleoonClient=require("./kameleoonClient"),_kameleoonClientInterface=require("./kameleoonClientInterface"),_kameleoonUtils=require("./kameleoonUtils"),_kameleoonError=require("./kameleoonError"),_utilities=require("./utilities"),_storage=require("./storage"),_eventManager=require("./eventManager"),_visitorCodeManager=require("./visitorCodeManager"),_constants=require("./constants"),_clientConfiguration=require("./clientConfiguration"),_types=require("./types"),_kameleoonData=require("./kameleoonData"),_eventSource=require("./eventSource"),_requester=require("./requester");
2
2
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../src/index.ts"],"sourcesContent":["export { Ok, Result, Err } from 'ts-res';\nexport { KameleoonClient as KameleoonCore } from './kameleoonClient';\nexport { IKameleoonClient as IKameleoonCore } from './kameleoonClientInterface';\nexport { KameleoonUtils } from './kameleoonUtils';\nexport { KameleoonException, KameleoonError } from './kameleoonError';\nexport { VisitorDataFiltersType } from './utilities';\nexport {\n FeatureFlagVariationsType,\n KameleoonStorageKey,\n StorageDataType,\n IExternalStorage,\n} from './storage';\nexport {\n EventCallbackType,\n EventDataType,\n EventType,\n EvaluationEventDataType,\n ConfigurationUpdateEventDataType,\n} from './eventManager';\nexport { VisitorCodeManager, IVisitorCodeManager } from './visitorCodeManager';\nexport { VISITOR_CODE_LENGTH, SdkLanguageType } from './constants';\nexport { JSONType, ConfigurationDataType } from './clientConfiguration';\nexport {\n Environment,\n VariableType,\n FeatureFlagType,\n SDKCoreParameters,\n SDKConfigurationType,\n KameleoonVariationType,\n ExternalPackageInfoType,\n FeatureFlagVariableType,\n TrackConversionParamsType,\n FeatureVariableResultType,\n RemoteVisitorDataParamsType,\n InternalSDKConfigurationType,\n SetDataCallbackParametersType,\n GetFeatureFlagVariableParamsType,\n GetVisitorWarehouseAudienceParamsType,\n SimulateRequestDataType,\n Milliseconds,\n} from './types';\nexport {\n ApplicationVersion,\n CustomData,\n Conversion,\n Device,\n Cookie,\n Browser,\n UserAgent,\n DeviceType,\n CookieType,\n GeolocationData,\n GeolocationInfoType,\n OperatingSystemType,\n OperatingSystem,\n BrowserType,\n PageView,\n KameleoonData,\n KameleoonDataType,\n PageViewParametersType,\n ConversionParametersType,\n ApplicationVersionDataType,\n} from './kameleoonData';\nexport {\n IExternalEventSource,\n EventSourceOpenParametersType,\n} from './eventSource';\nexport {\n Header,\n HeadersType,\n HttpMethod,\n TrackParametersType,\n IExternalRequester,\n RequestParametersType,\n RequestType,\n RetryCountType,\n KameleoonResponseType,\n SendRequestParametersType,\n NUMBER_OF_RETRIES,\n} from './requester';\n"],"mappings":""}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../src/index.ts"],"sourcesContent":["export { Ok, Result, Err } from 'ts-res';\nexport { KameleoonClient as KameleoonCore } from './kameleoonClient';\nexport { IKameleoonClient as IKameleoonCore } from './kameleoonClientInterface';\nexport { KameleoonUtils } from './kameleoonUtils';\nexport { KameleoonException, KameleoonError } from './kameleoonError';\nexport { VisitorDataFiltersType, IExternalPRNG } from './utilities';\nexport {\n FeatureFlagVariationsType,\n KameleoonStorageKey,\n IExternalStorage,\n StorageDataType,\n} from './storage';\nexport {\n EventCallbackType,\n EventDataType,\n EventType,\n EvaluationEventDataType,\n ConfigurationUpdateEventDataType,\n} from './eventManager';\nexport { VisitorCodeManager, IVisitorCodeManager } from './visitorCodeManager';\nexport { VISITOR_CODE_LENGTH, SdkLanguageType } from './constants';\nexport { JSONType, ConfigurationDataType } from './clientConfiguration';\nexport {\n Environment,\n VariableType,\n InternalsType,\n FeatureFlagType,\n SDKCoreParameters,\n SDKConfigurationType,\n KameleoonVariationType,\n ExternalPackageInfoType,\n FeatureFlagVariableType,\n TrackConversionParamsType,\n FeatureVariableResultType,\n RemoteVisitorDataParamsType,\n InternalSDKConfigurationType,\n SetDataCallbackParametersType,\n GetFeatureFlagVariableParamsType,\n GetVisitorWarehouseAudienceParamsType,\n SimulateRequestDataType,\n Milliseconds,\n} from './types';\nexport {\n ApplicationVersion,\n CustomData,\n Conversion,\n Device,\n Cookie,\n Browser,\n UserAgent,\n DeviceType,\n CookieType,\n GeolocationData,\n GeolocationInfoType,\n OperatingSystemType,\n OperatingSystem,\n BrowserType,\n PageView,\n KameleoonData,\n KameleoonDataType,\n PageViewParametersType,\n ConversionParametersType,\n ApplicationVersionDataType,\n} from './kameleoonData';\nexport {\n IExternalEventSource,\n EventSourceOpenParametersType,\n} from './eventSource';\nexport {\n Header,\n HeadersType,\n HttpMethod,\n TrackParametersType,\n IExternalRequester,\n RequestParametersType,\n RequestType,\n RetryCountType,\n KameleoonResponseType,\n SendRequestParametersType,\n NUMBER_OF_RETRIES,\n} from './requester';\n"],"mappings":""}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.KameleoonClient=void 0;var _tsRes=require("ts-res"),_cacheManager=require("./cacheManager"),_clientConfiguration=require("./clientConfiguration"),_clientSettings=require("./clientSettings"),_constants=require("./constants"),_kameleoonData=require("./kameleoonData"),_kameleoonError=require("./kameleoonError"),_requester=require("./requester"),_storage=require("./storage"),_utilities=require("./utilities"),_variationConfiguration=require("./variationConfiguration"),_eventManager=require("./eventManager"),_eventSource=require("./eventSource"),_visitorCodeManager=require("./visitorCodeManager");function _defineProperty(a,b,c){return b=_toPropertyKey(b),b in a?Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!0}):a[b]=c,a}function _toPropertyKey(a){var b=_toPrimitive(a,"string");return"symbol"==typeof b?b:b+""}function _toPrimitive(a,b){if("object"!=typeof a||!a)return a;var c=a[Symbol.toPrimitive];if(void 0!==c){var d=c.call(a,b||"default");if("object"!=typeof d)return d;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===b?String:Number)(a)}class KameleoonClient{constructor(a){let{siteCode:b,configuration:c,internalConfiguration:d}=a;_defineProperty(this,"variationConfiguration",void 0),_defineProperty(this,"clientConfiguration",void 0),_defineProperty(this,"dataManager",void 0),_defineProperty(this,"offlineTrackingStorage",void 0),_defineProperty(this,"consentDataStorage",void 0),_defineProperty(this,"trackingCache",void 0),_defineProperty(this,"requester",void 0),_defineProperty(this,"externalPackageInfo",void 0),_defineProperty(this,"initialized",!1),_defineProperty(this,"visitorCodeManager",void 0),_defineProperty(this,"eventManager",void 0),_defineProperty(this,"environment",void 0),_defineProperty(this,"isOfflineModeOn",void 0);const{settings:e}=new _clientSettings.ClientSettings(b,c);this.environment=e.environment;const{externalStorage:f,externalEventSource:g,externalPackageInfo:h,externalVisitorCodeManager:i,externalRequester:j,externalClientConfiguration:k}=d,l=new _cacheManager.CacheManager(_constants.CACHE_CLEANUP_TIMEOUT),m=new _storage.DataStorage(f,_storage.KameleoonStorageKey.ClientData),n=new _storage.DataStorage(f,_storage.KameleoonStorageKey.TargetingData),o=new _storage.DataStorage(f,_storage.KameleoonStorageKey.VariationData),p=new _storage.DataStorage(f,_storage.KameleoonStorageKey.OfflineTracking),q=new _storage.DataStorage(f,_storage.KameleoonStorageKey.ConsentData),r=new _kameleoonData.DataManager({storage:n,cleanupInterval:e.cleanupInterval}),s=new _requester.Requester({siteCode:b,domain:e.networkDomain,environment:e.environment,packageInfo:h,externalRequester:j,requestTimeout:e.requestTimeout,trackRetryDelay:e.trackRetryDelay}),t=new _eventSource.KameleoonEventSource(e.siteCode,g),u=new _eventManager.EventManager,v=new _clientConfiguration.ClientConfiguration({storage:m,updateInterval:e.updateInterval,dataManager:r,eventManager:u,requester:s,externalClientConfiguration:k,offlineTrackingStorage:p,eventSource:t,externalVisitorCodeManager:i}),w=new _variationConfiguration.VariationConfiguration(o);this.variationConfiguration=w,this.requester=s,this.trackingCache=l,this.dataManager=r,this.clientConfiguration=v,this.externalPackageInfo=h,this.offlineTrackingStorage=p,this.consentDataStorage=q,this.visitorCodeManager=i,this.eventManager=u}async initialize(a){const b=await this.clientConfiguration.initialize();return b.throw(),this.isOfflineModeOn=a,this.initialized=!0,b.ok}addData(a){if(_utilities.Utilities.validateVisitorCode(a).throw(),!this.initialized)throw new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.Initialization);for(var b=arguments.length,c=Array(1<b?b-1:0),d=1;d<b;d++)c[d-1]=arguments[d];this.dataManager.addData(a,...c).throw()}async getRemoteVisitorData(a){let{visitorCode:b,shouldAddData:c=!0,filters:d=_constants.DEFAULT_VISITOR_DATA_FILTERS,isUniqueIdentifier:e=!1}=a;if(!this.initialized)throw new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.Initialization);_utilities.Utilities.validateVisitorCode(b).throw();const{previousVisitAmount:f}=d;if("number"==typeof f&&(1>f||25<f))throw new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.VisitAmount);const g=await this.requester.getVisitorData({visitorCode:b,filters:d,isMappingIdentifier:e}),h=g.throw(),{visitorData:i,storageVisitorData:j,visitsData:k}=_utilities.Utilities.parseVisitorData({data:h,filters:d,visitorCode:b,dataManager:this.dataManager,variationConfiguration:this.variationConfiguration});for(const d of j)(c||this.dataManager.isPersistentCustomData(d))&&this.addData(b,d);return k&&c&&this.addData(b,k),i}trackConversion(a){let{visitorCode:b,goalId:c,revenue:d,isUniqueIdentifier:e}=a;this.addData(b,new _kameleoonData.Conversion({goalId:c,revenue:d})),this.flush(b,e)}flush(a,b){if(!this.initialized)throw new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.Initialization);if("string"==typeof a&&_utilities.Utilities.validateVisitorCode(a).throw(),a){let c=!1;if(b){const b=this.dataManager.getLinkedVisitor(a),d=this.dataManager.identifierCustomDataIndex;b||"number"!=typeof d?c=!0:this.dataManager.addData(a,new _kameleoonData.CustomData(d,a))}return void _utilities.Utilities.trackData({visitorCode:a,isMappingIdentifier:c,dataManager:this.dataManager,requester:this.requester,isOfflineModeOn:this.isOfflineModeOn,isConsentProvided:this._isConsentProvided(a),offlineTrackingStorage:this.offlineTrackingStorage})}if(!this.dataManager.unsentDataVisitors.length)return void _utilities.Utilities.sendOfflineTracking({requester:this.requester,storage:this.offlineTrackingStorage});for(const c of this.dataManager.unsentDataVisitors)_utilities.Utilities.trackData({visitorCode:c,dataManager:this.dataManager,requester:this.requester,isOfflineModeOn:this.isOfflineModeOn,isConsentProvided:this._isConsentProvided(c),offlineTrackingStorage:this.offlineTrackingStorage})}getFeatureFlags(){if(!this.initialized)throw new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.Initialization);const a=this.clientConfiguration.featureFlags,b=[];return a.forEach(a=>{let{id:c,featureKey:d}=a;b.push({id:c,key:d})}),b}getVisitorFeatureFlags(a){if(!this.initialized)throw new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.Initialization);const b=this._getActiveFeatureVariations(a),c=[];return b.forEach(a=>{let{featureFlagId:b,featureKey:d}=a;c.push({id:b,key:d})}),c}getActiveFeatureFlags(a){const b=this._getActiveFeatureVariations(a),c=new Map;return b.forEach(b=>{const{variationKey:d,featureKey:e,variationId:f,experimentId:g}=b;let h=[];null!==f&&null!==g&&(h=this._getFeatureVariables({visitorCode:a,featureKey:e,variationKey:d}));const i=h.map(a=>_utilities.Utilities.parseFeatureVariable(a).throw());c.set(b.featureKey,{key:d,id:f,experimentId:g,variables:i})}),c}getFeatureFlagVariationKey(a,b){_utilities.Utilities.validateVisitorCode(a).throw();const{variationKey:c}=this._getFeatureVariation(a,b).throw();return c}getFeatureFlagVariable(a){let{visitorCode:b,featureKey:c,variableKey:d}=a;_utilities.Utilities.validateVisitorCode(b).throw();const{variationKey:e}=this._getFeatureVariation(b,c).throw(),f=this._getFeatureVariables({visitorCode:b,featureKey:c,variationKey:e}),g=f.find(a=>a.key===d);if(!g)throw new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.FeatureFlagVariableNotFound,d,b);const{type:h,value:i}=_utilities.Utilities.parseFeatureVariable(g).throw();return{type:h,value:i}}getFeatureFlagVariables(a,b){_utilities.Utilities.validateVisitorCode(a).throw();const{variationKey:c}=this._getFeatureVariation(a,b).throw(),d=this._getFeatureVariables({visitorCode:a,featureKey:b,variationKey:c}),e=[];for(const c of d){const a=_utilities.Utilities.parseFeatureVariable(c).throw();e.push(a)}return e}isFeatureFlagActive(a,b){try{const c=this.getFeatureFlagVariationKey(a,b);return c!==_constants.OFF_VARIATION_KEY}catch(a){if(a instanceof _kameleoonError.KameleoonError&&a.type===_kameleoonError.KameleoonException.FeatureFlagEnvironmentDisabled)return!1;throw a}}async getRemoteData(a){const b=await this.requester.getRemoteData(a);return b.throw()}async getVisitorWarehouseAudience(a){let{visitorCode:b,customDataIndex:c,warehouseKey:d}=a;_utilities.Utilities.validateVisitorCode(b).throw();const e=await this.getRemoteData(d||b);if(!e)throw new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.RemoteData,"No data found for ".concat(d||b," key"));if(!e[_constants.WAREHOUSE_AUDIENCE_KEY]||0===Object.keys(e[_constants.WAREHOUSE_AUDIENCE_KEY]).length)return null;const f=new _kameleoonData.CustomData(c,...Object.keys(e[_constants.WAREHOUSE_AUDIENCE_KEY]));return this.dataManager.addData(b,f),f}onConfigurationUpdate(a){if(!this.initialized)throw new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.Initialization);this.eventManager.addEventHandler(_eventManager.EventType.ConfigurationUpdate,a)}onEvent(a,b){if(!this.initialized)throw new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.Initialization);this.eventManager.addEventHandler(a,b)}getEngineTrackingCode(a){return _utilities.Utilities.validateVisitorCode(a).throw(),_utilities.Utilities.getTrackingCode(this.trackingCache,a)}isInitialized(){return this.initialized}setUserConsent(a){let{visitorCode:b,consent:c,setData:d}=a;_utilities.Utilities.validateVisitorCode(b).throw(),this.consentDataStorage.update({[b]:c}),c?d({visitorCode:b,key:_storage.KameleoonStorageKey.VisitorCode,maxAge:_visitorCodeManager.DEFAULT_MAX_AGE,path:_visitorCodeManager.PATH}):this.visitorCodeManager.consentRequired&&d({visitorCode:"",key:_storage.KameleoonStorageKey.VisitorCode,maxAge:_visitorCodeManager.ZERO_MAX_AGE,path:_visitorCodeManager.PATH})}_isConsentProvided(a){const{isConsentRequired:b}=this.clientConfiguration,c=this.consentDataStorage.read();return!b||c.ok&&c.data[a]}_getFeatureVariables(a){let{visitorCode:b,featureKey:c,variationKey:d}=a;const e=this.clientConfiguration.featureFlags,f=e.get(c);if(!f)throw new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.FeatureFlagConfigurationNotFound,c);const g=f.variations.find(a=>a.key===d);if(!g)throw new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.FeatureFlagVariationNotFound,d,b);return g.variables}_getActiveFeatureVariations(a){if(!this.initialized)throw new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.Initialization);const b=this.clientConfiguration.featureFlags,c=[],d=this.dataManager.getTargetingData(a),e=this.dataManager.getVisitorIdentifier(a);for(const f of b.values()){if(!f.environmentEnabled)continue;const b=this.variationConfiguration.getVariation({visitorCode:a,visitorIdentifier:e,targetingData:d,featureFlag:f,clientConfiguration:this.clientConfiguration,dataManager:this.dataManager,packageInfo:this.externalPackageInfo}).throw();this.eventManager.fireEvent(_eventManager.EventType.Evaluation,{featureKey:f.featureKey,variation:{key:b.variationKey,experimentId:b.experimentId,id:b.variationId}}),b.variationKey!==_constants.OFF_VARIATION_KEY&&c.push(b)}return c}_getFeatureVariation(a,b){if(!this.initialized)return(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.Initialization));const c=this.clientConfiguration.featureFlags,d=c.get(b);if(!d)return(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.FeatureFlagConfigurationNotFound,b));if(!d.environmentEnabled)return(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.FeatureFlagEnvironmentDisabled,d.featureKey,this.environment));const e=this.dataManager.getTargetingData(a),f=this.dataManager.getVisitorIdentifier(a),g=this.variationConfiguration.getVariation({visitorCode:a,visitorIdentifier:f,featureFlag:d,targetingData:e,withAssignment:!0,clientConfiguration:this.clientConfiguration,dataManager:this.dataManager,packageInfo:this.externalPackageInfo}).throw();this.eventManager.fireEvent(_eventManager.EventType.Evaluation,{featureKey:b,variation:{key:g.variationKey,experimentId:g.experimentId,id:g.variationId}});const{experimentId:h,variationId:i}=g;return"number"==typeof i&&"number"==typeof h&&_utilities.Utilities.updateCache({cacheManager:this.trackingCache,visitorCode:a,experimentId:h,variationId:i}),_utilities.Utilities.trackFeatureExperiment({visitorCode:a,requester:this.requester,featureFlagVariation:g,dataManager:this.dataManager,isOfflineModeOn:this.isOfflineModeOn,isConsentProvided:this._isConsentProvided(a),offlineTrackingStorage:this.offlineTrackingStorage,variationConfiguration:this.variationConfiguration}),(0,_tsRes.Ok)(g)}}exports.KameleoonClient=KameleoonClient;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.KameleoonClient=void 0;var _tsRes=require("ts-res"),_cacheManager=require("./cacheManager"),_clientConfiguration=require("./clientConfiguration"),_clientSettings=require("./clientSettings"),_constants=require("./constants"),_kameleoonData=require("./kameleoonData"),_kameleoonError=require("./kameleoonError"),_requester=require("./requester"),_storage=require("./storage"),_utilities=require("./utilities"),_variationConfiguration=require("./variationConfiguration"),_eventManager=require("./eventManager"),_eventSource=require("./eventSource"),_visitorCodeManager=require("./visitorCodeManager");function _defineProperty(a,b,c){return b=_toPropertyKey(b),b in a?Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!0}):a[b]=c,a}function _toPropertyKey(a){var b=_toPrimitive(a,"string");return"symbol"==typeof b?b:b+""}function _toPrimitive(a,b){if("object"!=typeof a||!a)return a;var c=a[Symbol.toPrimitive];if(void 0!==c){var d=c.call(a,b||"default");if("object"!=typeof d)return d;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===b?String:Number)(a)}class KameleoonClient{constructor(a){let{siteCode:b,configuration:c,internalConfiguration:d}=a;_defineProperty(this,"variationConfiguration",void 0),_defineProperty(this,"clientConfiguration",void 0),_defineProperty(this,"dataManager",void 0),_defineProperty(this,"offlineTrackingStorage",void 0),_defineProperty(this,"consentDataStorage",void 0),_defineProperty(this,"trackingCache",void 0),_defineProperty(this,"requester",void 0),_defineProperty(this,"externalPackageInfo",void 0),_defineProperty(this,"initialized",!1),_defineProperty(this,"visitorCodeManager",void 0),_defineProperty(this,"eventManager",void 0),_defineProperty(this,"environment",void 0),_defineProperty(this,"isOfflineModeOn",void 0);const{settings:e}=new _clientSettings.ClientSettings(b,c);this.environment=e.environment;const{externalStorage:f,externalEventSource:g,externalPackageInfo:h,externalVisitorCodeManager:i,externalRequester:j,externalClientConfiguration:k,externalPRNG:l}=d,m=new _cacheManager.CacheManager(_constants.CACHE_CLEANUP_TIMEOUT),n=new _storage.DataStorage(f,_storage.KameleoonStorageKey.ClientData),o=new _storage.DataStorage(f,_storage.KameleoonStorageKey.TargetingData),p=new _storage.DataStorage(f,_storage.KameleoonStorageKey.VariationData),q=new _storage.DataStorage(f,_storage.KameleoonStorageKey.OfflineTracking),r=new _storage.DataStorage(f,_storage.KameleoonStorageKey.ConsentData),s=new _kameleoonData.DataManager({storage:o,cleanupInterval:e.cleanupInterval}),t=new _requester.Requester({siteCode:b,domain:e.networkDomain,environment:e.environment,packageInfo:h,externalRequester:j,requestTimeout:e.requestTimeout,trackRetryDelay:e.trackRetryDelay}),u=new _eventSource.KameleoonEventSource(e.siteCode,g),v=new _eventManager.EventManager,w=new _clientConfiguration.ClientConfiguration({storage:n,updateInterval:e.updateInterval,dataManager:s,eventManager:v,requester:t,externalClientConfiguration:k,offlineTrackingStorage:q,eventSource:u,externalVisitorCodeManager:i}),x=new _variationConfiguration.VariationConfiguration(p);_utilities.Utilities.prng=l,this.variationConfiguration=x,this.requester=t,this.trackingCache=m,this.dataManager=s,this.clientConfiguration=w,this.externalPackageInfo=h,this.offlineTrackingStorage=q,this.consentDataStorage=r,this.visitorCodeManager=i,this.eventManager=v}async initialize(a){const b=await this.clientConfiguration.initialize();return b.throw(),this.isOfflineModeOn=a,this.initialized=!0,b.ok}addData(a){if(_utilities.Utilities.validateVisitorCode(a).throw(),!this.initialized)throw new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.Initialization);for(var b=arguments.length,c=Array(1<b?b-1:0),d=1;d<b;d++)c[d-1]=arguments[d];this.dataManager.addData(a,...c).throw()}async getRemoteVisitorData(a){let{visitorCode:b,shouldAddData:c=!0,filters:d=_constants.DEFAULT_VISITOR_DATA_FILTERS,isUniqueIdentifier:e=!1}=a;if(!this.initialized)throw new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.Initialization);_utilities.Utilities.validateVisitorCode(b).throw();const{previousVisitAmount:f}=d;if("number"==typeof f&&(1>f||25<f))throw new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.VisitAmount);const g=await this.requester.getVisitorData({visitorCode:b,filters:d,isMappingIdentifier:e}),h=g.throw(),{visitorData:i,storageVisitorData:j,visitsData:k}=_utilities.Utilities.parseVisitorData({data:h,filters:d,visitorCode:b,dataManager:this.dataManager,variationConfiguration:this.variationConfiguration});for(const d of j)(c||this.dataManager.isPersistentCustomData(d))&&this.addData(b,d);return k&&c&&this.addData(b,k),i}trackConversion(a){let{visitorCode:b,goalId:c,revenue:d,isUniqueIdentifier:e}=a;this.addData(b,new _kameleoonData.Conversion({goalId:c,revenue:d})),this.flush(b,e)}flush(a,b){if(!this.initialized)throw new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.Initialization);if("string"==typeof a&&_utilities.Utilities.validateVisitorCode(a).throw(),a){let c=!1;if(b){const b=this.dataManager.getLinkedVisitor(a),d=this.dataManager.identifierCustomDataIndex;b||"number"!=typeof d?c=!0:this.dataManager.addData(a,new _kameleoonData.CustomData(d,a))}return void _utilities.Utilities.trackData({visitorCode:a,isMappingIdentifier:c,dataManager:this.dataManager,requester:this.requester,isOfflineModeOn:this.isOfflineModeOn,isConsentProvided:this._isConsentProvided(a),offlineTrackingStorage:this.offlineTrackingStorage})}if(!this.dataManager.unsentDataVisitors.length)return void _utilities.Utilities.sendOfflineTracking({requester:this.requester,storage:this.offlineTrackingStorage});for(const c of this.dataManager.unsentDataVisitors)_utilities.Utilities.trackData({visitorCode:c,dataManager:this.dataManager,requester:this.requester,isOfflineModeOn:this.isOfflineModeOn,isConsentProvided:this._isConsentProvided(c),offlineTrackingStorage:this.offlineTrackingStorage})}getFeatureFlags(){if(!this.initialized)throw new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.Initialization);const a=this.clientConfiguration.featureFlags,b=[];return a.forEach(a=>{let{id:c,featureKey:d}=a;b.push({id:c,key:d})}),b}getVisitorFeatureFlags(a){if(!this.initialized)throw new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.Initialization);const b=this._getActiveFeatureVariations(a),c=[];return b.forEach(a=>{let{featureFlagId:b,featureKey:d}=a;c.push({id:b,key:d})}),c}getActiveFeatureFlags(a){const b=this._getActiveFeatureVariations(a),c=new Map;return b.forEach(b=>{const{variationKey:d,featureKey:e,variationId:f,experimentId:g}=b;let h=[];null!==f&&null!==g&&(h=this._getFeatureVariables({visitorCode:a,featureKey:e,variationKey:d}));const i=h.map(a=>_utilities.Utilities.parseFeatureVariable(a).throw());c.set(b.featureKey,{key:d,id:f,experimentId:g,variables:i})}),c}getFeatureFlagVariationKey(a,b){_utilities.Utilities.validateVisitorCode(a).throw();const{variationKey:c}=this._getFeatureVariation(a,b).throw();return c}getFeatureFlagVariable(a){let{visitorCode:b,featureKey:c,variableKey:d}=a;_utilities.Utilities.validateVisitorCode(b).throw();const{variationKey:e}=this._getFeatureVariation(b,c).throw(),f=this._getFeatureVariables({visitorCode:b,featureKey:c,variationKey:e}),g=f.find(a=>a.key===d);if(!g)throw new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.FeatureFlagVariableNotFound,d,b);const{type:h,value:i}=_utilities.Utilities.parseFeatureVariable(g).throw();return{type:h,value:i}}getFeatureFlagVariables(a,b){_utilities.Utilities.validateVisitorCode(a).throw();const{variationKey:c}=this._getFeatureVariation(a,b).throw(),d=this._getFeatureVariables({visitorCode:a,featureKey:b,variationKey:c}),e=[];for(const c of d){const a=_utilities.Utilities.parseFeatureVariable(c).throw();e.push(a)}return e}isFeatureFlagActive(a,b){try{const c=this.getFeatureFlagVariationKey(a,b);return c!==_constants.OFF_VARIATION_KEY}catch(a){if(a instanceof _kameleoonError.KameleoonError&&a.type===_kameleoonError.KameleoonException.FeatureFlagEnvironmentDisabled)return!1;throw a}}async getRemoteData(a){const b=await this.requester.getRemoteData(a);return b.throw()}async getVisitorWarehouseAudience(a){let{visitorCode:b,customDataIndex:c,warehouseKey:d}=a;_utilities.Utilities.validateVisitorCode(b).throw();const e=await this.getRemoteData(d||b);if(!e)throw new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.RemoteData,"No data found for ".concat(d||b," key"));if(!e[_constants.WAREHOUSE_AUDIENCE_KEY]||0===Object.keys(e[_constants.WAREHOUSE_AUDIENCE_KEY]).length)return null;const f=new _kameleoonData.CustomData(c,...Object.keys(e[_constants.WAREHOUSE_AUDIENCE_KEY]));return this.dataManager.addData(b,f),f}onConfigurationUpdate(a){if(!this.initialized)throw new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.Initialization);this.eventManager.addEventHandler(_eventManager.EventType.ConfigurationUpdate,a)}onEvent(a,b){if(!this.initialized)throw new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.Initialization);this.eventManager.addEventHandler(a,b)}getEngineTrackingCode(a){return _utilities.Utilities.validateVisitorCode(a).throw(),_utilities.Utilities.getTrackingCode(this.trackingCache,a)}isInitialized(){return this.initialized}setUserConsent(a){let{visitorCode:b,consent:c,setData:d}=a;_utilities.Utilities.validateVisitorCode(b).throw(),this.consentDataStorage.update({[b]:c}),c?d({visitorCode:b,key:_storage.KameleoonStorageKey.VisitorCode,maxAge:_visitorCodeManager.DEFAULT_MAX_AGE,path:_visitorCodeManager.PATH}):this.visitorCodeManager.consentRequired&&d({visitorCode:"",key:_storage.KameleoonStorageKey.VisitorCode,maxAge:_visitorCodeManager.ZERO_MAX_AGE,path:_visitorCodeManager.PATH})}_isConsentProvided(a){const{isConsentRequired:b}=this.clientConfiguration,c=this.consentDataStorage.read();return!b||c.ok&&c.data[a]}_getFeatureVariables(a){let{visitorCode:b,featureKey:c,variationKey:d}=a;const e=this.clientConfiguration.featureFlags,f=e.get(c);if(!f)throw new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.FeatureFlagConfigurationNotFound,c);const g=f.variations.find(a=>a.key===d);if(!g)throw new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.FeatureFlagVariationNotFound,d,b);return g.variables}_getActiveFeatureVariations(a){if(!this.initialized)throw new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.Initialization);const b=this.clientConfiguration.featureFlags,c=[],d=this.dataManager.getTargetingData(a),e=this.dataManager.getVisitorIdentifier(a);for(const f of b.values()){if(!f.environmentEnabled)continue;const b=this.variationConfiguration.getVariation({visitorCode:a,visitorIdentifier:e,targetingData:d,featureFlag:f,clientConfiguration:this.clientConfiguration,dataManager:this.dataManager,packageInfo:this.externalPackageInfo}).throw();this.eventManager.fireEvent(_eventManager.EventType.Evaluation,{featureKey:f.featureKey,variation:{key:b.variationKey,experimentId:b.experimentId,id:b.variationId}}),b.variationKey!==_constants.OFF_VARIATION_KEY&&c.push(b)}return c}_getFeatureVariation(a,b){if(!this.initialized)return(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.Initialization));const c=this.clientConfiguration.featureFlags,d=c.get(b);if(!d)return(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.FeatureFlagConfigurationNotFound,b));if(!d.environmentEnabled)return(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.FeatureFlagEnvironmentDisabled,d.featureKey,this.environment));const e=this.dataManager.getTargetingData(a),f=this.dataManager.getVisitorIdentifier(a),g=this.variationConfiguration.getVariation({visitorCode:a,visitorIdentifier:f,featureFlag:d,targetingData:e,withAssignment:!0,clientConfiguration:this.clientConfiguration,dataManager:this.dataManager,packageInfo:this.externalPackageInfo}).throw();this.eventManager.fireEvent(_eventManager.EventType.Evaluation,{featureKey:b,variation:{key:g.variationKey,experimentId:g.experimentId,id:g.variationId}});const{experimentId:h,variationId:i}=g;return"number"==typeof i&&"number"==typeof h&&_utilities.Utilities.updateCache({cacheManager:this.trackingCache,visitorCode:a,experimentId:h,variationId:i}),_utilities.Utilities.trackFeatureExperiment({visitorCode:a,featureFlagVariation:g,requester:this.requester,dataManager:this.dataManager,isOfflineModeOn:this.isOfflineModeOn,isConsentProvided:this._isConsentProvided(a),offlineTrackingStorage:this.offlineTrackingStorage,variationConfiguration:this.variationConfiguration}),(0,_tsRes.Ok)(g)}}exports.KameleoonClient=KameleoonClient;
2
2
  //# sourceMappingURL=kameleoonClient.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"kameleoonClient.js","names":["KameleoonClient","constructor","a","siteCode","configuration","internalConfiguration","_defineProperty","settings","clientSettings","ClientSettings","environment","externalStorage","externalEventSource","externalPackageInfo","externalVisitorCodeManager","externalRequester","externalClientConfiguration","trackingCache","CacheManager","CACHE_CLEANUP_TIMEOUT","clientDataStorage","DataStorage","KameleoonStorageKey","ClientData","targetingDataStorage","TargetingData","variationDataStorage","VariationData","offlineTrackingStorage","OfflineTracking","consentDataStorage","ConsentData","dataManager","DataManager","storage","cleanupInterval","requester","Requester","domain","networkDomain","packageInfo","requestTimeout","trackRetryDelay","eventSource","KameleoonEventSource","eventManager","EventManager","clientConfiguration","ClientConfiguration","updateInterval","variationConfiguration","VariationConfiguration","visitorCodeManager","initialize","useCache","result","throw","isOfflineModeOn","initialized","ok","addData","visitorCode","Utilities","validateVisitorCode","KameleoonError","KameleoonException","Initialization","b","arguments","length","data","Array","d","getRemoteVisitorData","shouldAddData","filters","DEFAULT_VISITOR_DATA_FILTERS","isUniqueIdentifier","previousVisitAmount","VisitAmount","getVisitorData","isMappingIdentifier","visitorData","storageVisitorData","visitsData","parseVisitorData","dataItem","isPersistentCustomData","trackConversion","goalId","revenue","Conversion","flush","linkedVisitor","getLinkedVisitor","index","identifierCustomDataIndex","CustomData","trackData","isConsentProvided","_isConsentProvided","unsentDataVisitors","sendOfflineTracking","visitorCodeKey","getFeatureFlags","featureFlags","resultFeatureFlags","forEach","id","featureKey","push","key","getVisitorFeatureFlags","activeVariations","_getActiveFeatureVariations","featureFlagId","getActiveFeatureFlags","resultFeatureList","Map","variation","variationKey","variationId","experimentId","variables","_getFeatureVariables","resultVariables","map","variable","parseFeatureVariable","set","getFeatureFlagVariationKey","_getFeatureVariation","getFeatureFlagVariable","variableKey","find","item","FeatureFlagVariableNotFound","type","value","getFeatureFlagVariables","parsedVariable","isFeatureFlagActive","OFF_VARIATION_KEY","err","FeatureFlagEnvironmentDisabled","getRemoteData","remoteData","getVisitorWarehouseAudience","customDataIndex","warehouseKey","RemoteData","concat","WAREHOUSE_AUDIENCE_KEY","Object","keys","customData","onConfigurationUpdate","callback","addEventHandler","EventType","ConfigurationUpdate","onEvent","event","getEngineTrackingCode","getTrackingCode","isInitialized","setUserConsent","consent","setData","update","VisitorCode","maxAge","DEFAULT_MAX_AGE","path","PATH","consentRequired","ZERO_MAX_AGE","isConsentRequired","consentDataResult","read","featureFlag","get","FeatureFlagConfigurationNotFound","variations","FeatureFlagVariationNotFound","targetingData","getTargetingData","visitorIdentifier","getVisitorIdentifier","values","environmentEnabled","variationData","getVariation","fireEvent","Evaluation","Err","withAssignment","updateCache","cacheManager","trackFeatureExperiment","featureFlagVariation","Ok","exports"],"sources":["../src/kameleoonClient.ts"],"sourcesContent":["import { Err, Ok, Result } from 'ts-res';\nimport { CacheManager } from './cacheManager';\nimport {\n ClientConfiguration,\n FeatureVariableType,\n JSONType,\n} from './clientConfiguration';\nimport { ClientSettings } from './clientSettings';\nimport {\n CACHE_CLEANUP_TIMEOUT,\n DEFAULT_VISITOR_DATA_FILTERS,\n OFF_VARIATION_KEY,\n} from './constants';\nimport {\n Conversion,\n CustomData,\n DataManager,\n KameleoonDataType,\n} from './kameleoonData';\nimport { WAREHOUSE_AUDIENCE_KEY } from './constants';\nimport { KameleoonError, KameleoonException } from './kameleoonError';\nimport { Requester } from './requester';\nimport {\n ClientDataType,\n KameleoonStorageKey,\n VariationDataType,\n DataStorage,\n ConsentDataType,\n IStorage,\n OfflineTracking,\n} from './storage';\nimport {\n TrackConversionParamsType,\n FeatureFlagType,\n GetFeatureFlagVariableParamsType,\n FeatureVariableResultType,\n SDKCoreParameters,\n TrackingCacheItemType,\n ExternalPackageInfoType,\n RemoteVisitorDataParamsType,\n GetVisitorWarehouseAudienceParamsType,\n Environment,\n SetUserConsentParametersType,\n FeatureFlagVariableType,\n KameleoonVariationType,\n GetFeatureVariablesParamsType,\n} from './types';\nimport { IVisitorCodeManager } from './visitorCodeManager';\nimport { Utilities } from './utilities';\nimport {\n FeatureFlagVariationType,\n VariationConfiguration,\n} from './variationConfiguration';\nimport { TargetingDataType } from './targeting';\nimport { EventCallbackType, EventManager, EventType } from './eventManager';\nimport { KameleoonEventSource } from './eventSource';\nimport { IKameleoonClient } from './kameleoonClientInterface';\nimport { DEFAULT_MAX_AGE, PATH, ZERO_MAX_AGE } from './visitorCodeManager';\n\n/**\n * @class\n * KameleoonClient - a class for creating kameleoon client instance\n * for communicating with Kameleoon JavaScript SDK Core, when new instance is created\n */\nexport class KameleoonClient implements IKameleoonClient {\n private variationConfiguration: VariationConfiguration;\n private clientConfiguration: ClientConfiguration;\n private dataManager: DataManager;\n private offlineTrackingStorage: IStorage<OfflineTracking>;\n private consentDataStorage: IStorage<ConsentDataType>;\n private trackingCache: CacheManager<TrackingCacheItemType>;\n private requester: Requester;\n private externalPackageInfo: ExternalPackageInfoType;\n private initialized: boolean = false;\n private visitorCodeManager: IVisitorCodeManager;\n private eventManager: EventManager;\n private environment: Environment;\n private isOfflineModeOn?: boolean;\n\n /**\n * @param {SDKCoreParameters} sdkCoreParameters - parameters for initializing sdk core\n */\n constructor({\n siteCode,\n configuration,\n internalConfiguration,\n }: SDKCoreParameters) {\n const { settings: clientSettings } = new ClientSettings(\n siteCode,\n configuration,\n );\n this.environment = clientSettings.environment;\n const {\n externalStorage,\n externalEventSource,\n externalPackageInfo,\n externalVisitorCodeManager,\n externalRequester,\n externalClientConfiguration,\n } = internalConfiguration;\n const trackingCache = new CacheManager<TrackingCacheItemType>(\n CACHE_CLEANUP_TIMEOUT,\n );\n\n const clientDataStorage = new DataStorage<ClientDataType>(\n externalStorage,\n KameleoonStorageKey.ClientData,\n );\n const targetingDataStorage = new DataStorage<TargetingDataType>(\n externalStorage,\n KameleoonStorageKey.TargetingData,\n );\n const variationDataStorage = new DataStorage<VariationDataType>(\n externalStorage,\n KameleoonStorageKey.VariationData,\n );\n const offlineTrackingStorage = new DataStorage<OfflineTracking>(\n externalStorage,\n KameleoonStorageKey.OfflineTracking,\n );\n const consentDataStorage = new DataStorage<ConsentDataType>(\n externalStorage,\n KameleoonStorageKey.ConsentData,\n );\n\n const dataManager = new DataManager({\n storage: targetingDataStorage,\n cleanupInterval: clientSettings.cleanupInterval,\n });\n\n const requester = new Requester({\n siteCode,\n domain: clientSettings.networkDomain,\n environment: clientSettings.environment,\n packageInfo: externalPackageInfo,\n externalRequester: externalRequester,\n requestTimeout: clientSettings.requestTimeout,\n trackRetryDelay: clientSettings.trackRetryDelay,\n });\n\n const eventSource = new KameleoonEventSource(\n clientSettings.siteCode,\n externalEventSource,\n );\n\n const eventManager = new EventManager();\n\n const clientConfiguration = new ClientConfiguration({\n storage: clientDataStorage,\n updateInterval: clientSettings.updateInterval,\n dataManager,\n eventManager,\n requester,\n externalClientConfiguration,\n offlineTrackingStorage,\n eventSource,\n externalVisitorCodeManager,\n });\n\n const variationConfiguration = new VariationConfiguration(\n variationDataStorage,\n );\n\n this.variationConfiguration = variationConfiguration;\n this.requester = requester;\n this.trackingCache = trackingCache;\n this.dataManager = dataManager;\n this.clientConfiguration = clientConfiguration;\n this.externalPackageInfo = externalPackageInfo;\n this.offlineTrackingStorage = offlineTrackingStorage;\n this.consentDataStorage = consentDataStorage;\n this.visitorCodeManager = externalVisitorCodeManager;\n this.eventManager = eventManager;\n }\n\n public async initialize(useCache?: boolean): Promise<boolean> {\n const result = await this.clientConfiguration.initialize();\n result.throw();\n\n this.isOfflineModeOn = useCache;\n this.initialized = true;\n\n return result.ok;\n }\n\n public addData(visitorCode: string, ...data: KameleoonDataType[]): void {\n Utilities.validateVisitorCode(visitorCode).throw();\n\n if (!this.initialized) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n\n this.dataManager.addData(visitorCode, ...data).throw();\n }\n\n public async getRemoteVisitorData({\n visitorCode,\n shouldAddData = true,\n filters = DEFAULT_VISITOR_DATA_FILTERS,\n isUniqueIdentifier = false,\n }: RemoteVisitorDataParamsType): Promise<KameleoonDataType[]> {\n if (!this.initialized) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n\n Utilities.validateVisitorCode(visitorCode).throw();\n\n const { previousVisitAmount } = filters;\n\n if (\n typeof previousVisitAmount === 'number' &&\n (previousVisitAmount < 1 || previousVisitAmount > 25)\n ) {\n throw new KameleoonError(KameleoonException.VisitAmount);\n }\n\n const result = await this.requester.getVisitorData({\n visitorCode,\n filters,\n isMappingIdentifier: isUniqueIdentifier,\n });\n const data = result.throw();\n\n const { visitorData, storageVisitorData, visitsData } =\n Utilities.parseVisitorData({\n data,\n filters,\n visitorCode,\n dataManager: this.dataManager,\n variationConfiguration: this.variationConfiguration,\n });\n\n for (const dataItem of storageVisitorData) {\n if (shouldAddData || this.dataManager.isPersistentCustomData(dataItem)) {\n this.addData(visitorCode, dataItem);\n }\n }\n\n // --- Note ---\n // Data on visits amount and time stamps is not returned to a user\n if (visitsData && shouldAddData) {\n this.addData(visitorCode, visitsData);\n }\n\n return visitorData;\n }\n\n public trackConversion({\n visitorCode,\n goalId,\n revenue,\n isUniqueIdentifier,\n }: TrackConversionParamsType): void {\n this.addData(visitorCode, new Conversion({ goalId, revenue }));\n this.flush(visitorCode, isUniqueIdentifier);\n }\n\n public flush(visitorCode?: string, isUniqueIdentifier?: boolean): void {\n if (!this.initialized) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n\n if (typeof visitorCode === 'string') {\n Utilities.validateVisitorCode(visitorCode).throw();\n }\n\n if (visitorCode) {\n let isMappingIdentifier = false;\n\n // --- Note ---\n // This part is a workaround for Data API\n // If there's is no unique identifier for the visitor\n // We do reconciliation for visitor with himself\n if (isUniqueIdentifier) {\n const linkedVisitor = this.dataManager.getLinkedVisitor(visitorCode);\n const index = this.dataManager.identifierCustomDataIndex;\n\n if (!linkedVisitor && typeof index === 'number') {\n this.dataManager.addData(\n visitorCode,\n new CustomData(index, visitorCode),\n );\n } else {\n isMappingIdentifier = true;\n }\n }\n\n Utilities.trackData({\n visitorCode,\n isMappingIdentifier,\n dataManager: this.dataManager,\n requester: this.requester,\n isOfflineModeOn: this.isOfflineModeOn,\n isConsentProvided: this._isConsentProvided(visitorCode),\n offlineTrackingStorage: this.offlineTrackingStorage,\n });\n\n return;\n }\n\n // --- Note ---\n // `Utilities.trackData` executes `Utilities.sendOfflineTracking` asynchronously at first, but\n // we need to execute `Utilities.sendOfflineTracking` even if calling `Utilities.trackData` is skipped\n // due to lack of unsent data\n if (!this.dataManager.unsentDataVisitors.length) {\n Utilities.sendOfflineTracking({\n requester: this.requester,\n storage: this.offlineTrackingStorage,\n });\n return;\n }\n\n for (const visitorCodeKey of this.dataManager.unsentDataVisitors) {\n Utilities.trackData({\n visitorCode: visitorCodeKey,\n dataManager: this.dataManager,\n requester: this.requester,\n isOfflineModeOn: this.isOfflineModeOn,\n isConsentProvided: this._isConsentProvided(visitorCodeKey),\n offlineTrackingStorage: this.offlineTrackingStorage,\n });\n }\n }\n\n public getFeatureFlags(): FeatureFlagType[] {\n if (!this.initialized) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n\n const featureFlags = this.clientConfiguration.featureFlags;\n const resultFeatureFlags: FeatureFlagType[] = [];\n\n featureFlags.forEach(({ id, featureKey }) => {\n resultFeatureFlags.push({\n id,\n key: featureKey,\n });\n });\n\n return resultFeatureFlags;\n }\n\n public getVisitorFeatureFlags(visitorCode: string): FeatureFlagType[] {\n if (!this.initialized) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n\n const activeVariations = this._getActiveFeatureVariations(visitorCode);\n const resultFeatureFlags: FeatureFlagType[] = [];\n\n activeVariations.forEach(({ featureFlagId, featureKey }) => {\n resultFeatureFlags.push({\n id: featureFlagId,\n key: featureKey,\n });\n });\n\n return resultFeatureFlags;\n }\n\n public getActiveFeatureFlags(\n visitorCode: string,\n ): Map<string, KameleoonVariationType> {\n const activeVariations = this._getActiveFeatureVariations(visitorCode);\n const resultFeatureList: Map<string, KameleoonVariationType> = new Map();\n\n activeVariations.forEach((variation) => {\n const { variationKey, featureKey, variationId, experimentId } = variation;\n\n let variables: FeatureVariableType[] = [];\n\n if (variationId !== null && experimentId !== null) {\n variables = this._getFeatureVariables({\n visitorCode,\n featureKey,\n variationKey,\n });\n }\n\n const resultVariables = variables.map((variable) =>\n Utilities.parseFeatureVariable(variable).throw(),\n );\n\n resultFeatureList.set(variation.featureKey, {\n key: variationKey,\n id: variationId,\n experimentId,\n variables: resultVariables,\n });\n });\n\n return resultFeatureList;\n }\n\n public getFeatureFlagVariationKey(\n visitorCode: string,\n featureKey: string,\n ): string {\n Utilities.validateVisitorCode(visitorCode).throw();\n\n const { variationKey } = this._getFeatureVariation(\n visitorCode,\n featureKey,\n ).throw();\n\n return variationKey;\n }\n\n public getFeatureFlagVariable({\n visitorCode,\n featureKey,\n variableKey,\n }: GetFeatureFlagVariableParamsType): FeatureFlagVariableType {\n Utilities.validateVisitorCode(visitorCode).throw();\n\n const { variationKey } = this._getFeatureVariation(\n visitorCode,\n featureKey,\n ).throw();\n\n const variables = this._getFeatureVariables({\n visitorCode,\n featureKey,\n variationKey,\n });\n const variable = variables.find((item) => item.key === variableKey);\n\n if (!variable) {\n throw new KameleoonError(\n KameleoonException.FeatureFlagVariableNotFound,\n variableKey,\n visitorCode,\n );\n }\n\n const { type, value } = Utilities.parseFeatureVariable(variable).throw();\n\n return { type, value } as FeatureFlagVariableType;\n }\n\n public getFeatureFlagVariables(\n visitorCode: string,\n featureKey: string,\n ): FeatureVariableResultType[] {\n Utilities.validateVisitorCode(visitorCode).throw();\n\n const { variationKey } = this._getFeatureVariation(\n visitorCode,\n featureKey,\n ).throw();\n\n const variables = this._getFeatureVariables({\n visitorCode,\n featureKey,\n variationKey,\n });\n const resultVariables: FeatureVariableResultType[] = [];\n\n for (const variable of variables) {\n const parsedVariable = Utilities.parseFeatureVariable(variable).throw();\n resultVariables.push(parsedVariable);\n }\n\n return resultVariables;\n }\n\n public isFeatureFlagActive(visitorCode: string, featureKey: string): boolean {\n try {\n const variationKey = this.getFeatureFlagVariationKey(\n visitorCode,\n featureKey,\n );\n\n return variationKey !== OFF_VARIATION_KEY;\n } catch (err) {\n if (\n err instanceof KameleoonError &&\n err.type === KameleoonException.FeatureFlagEnvironmentDisabled\n ) {\n return false;\n }\n\n throw err;\n }\n }\n\n public async getRemoteData(key: string): Promise<JSONType> {\n const remoteData = await this.requester.getRemoteData(key);\n\n return remoteData.throw();\n }\n\n public async getVisitorWarehouseAudience({\n visitorCode,\n customDataIndex,\n warehouseKey,\n }: GetVisitorWarehouseAudienceParamsType): Promise<CustomData | null> {\n Utilities.validateVisitorCode(visitorCode).throw();\n\n const data = await this.getRemoteData(warehouseKey || visitorCode);\n\n if (!data) {\n throw new KameleoonError(\n KameleoonException.RemoteData,\n `No data found for ${warehouseKey || visitorCode} key`,\n );\n }\n\n if (\n !data[WAREHOUSE_AUDIENCE_KEY] ||\n Object.keys(data[WAREHOUSE_AUDIENCE_KEY]).length === 0\n ) {\n return null;\n }\n\n const customData = new CustomData(\n customDataIndex,\n ...Object.keys(data[WAREHOUSE_AUDIENCE_KEY]),\n );\n\n this.dataManager.addData(visitorCode, customData);\n\n return customData;\n }\n\n /**\n * @deprecated\n * use `onEvent(EventType.ConfigurationUpdate, callback)` instead\n * Will be removed in the next major release\n * */\n public onConfigurationUpdate(callback: () => void): void {\n if (!this.initialized) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n\n this.eventManager.addEventHandler(EventType.ConfigurationUpdate, callback);\n }\n\n public onEvent<E extends EventType>(\n event: E,\n callback: EventCallbackType<E>,\n ): void {\n if (!this.initialized) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n\n this.eventManager.addEventHandler(event, callback);\n }\n\n public getEngineTrackingCode(visitorCode: string): string {\n Utilities.validateVisitorCode(visitorCode).throw();\n\n return Utilities.getTrackingCode(this.trackingCache, visitorCode);\n }\n\n public isInitialized(): boolean {\n return this.initialized;\n }\n\n protected setUserConsent({\n visitorCode,\n consent,\n setData,\n }: SetUserConsentParametersType): void {\n Utilities.validateVisitorCode(visitorCode).throw();\n\n this.consentDataStorage.update({ [visitorCode]: consent });\n\n if (consent) {\n setData({\n visitorCode,\n key: KameleoonStorageKey.VisitorCode,\n maxAge: DEFAULT_MAX_AGE,\n path: PATH,\n });\n } else {\n if (this.visitorCodeManager.consentRequired) {\n setData({\n visitorCode: '',\n key: KameleoonStorageKey.VisitorCode,\n maxAge: ZERO_MAX_AGE,\n path: PATH,\n });\n }\n }\n }\n\n private _isConsentProvided(visitorCode: string): boolean {\n const { isConsentRequired } = this.clientConfiguration;\n const consentDataResult = this.consentDataStorage.read();\n\n return (\n !isConsentRequired ||\n (consentDataResult.ok && consentDataResult.data[visitorCode])\n );\n }\n\n private _getFeatureVariables({\n visitorCode,\n featureKey,\n variationKey,\n }: GetFeatureVariablesParamsType): FeatureVariableType[] {\n const featureFlags = this.clientConfiguration.featureFlags;\n const featureFlag = featureFlags.get(featureKey);\n\n if (!featureFlag) {\n throw new KameleoonError(\n KameleoonException.FeatureFlagConfigurationNotFound,\n featureKey,\n );\n }\n const variation = featureFlag.variations.find(\n (item) => item.key === variationKey,\n );\n\n if (!variation) {\n throw new KameleoonError(\n KameleoonException.FeatureFlagVariationNotFound,\n variationKey,\n visitorCode,\n );\n }\n\n return variation.variables;\n }\n\n private _getActiveFeatureVariations(\n visitorCode: string,\n ): FeatureFlagVariationType[] {\n if (!this.initialized) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n\n const featureFlags = this.clientConfiguration.featureFlags;\n const activeVariations: FeatureFlagVariationType[] = [];\n\n const targetingData = this.dataManager.getTargetingData(visitorCode);\n const visitorIdentifier =\n this.dataManager.getVisitorIdentifier(visitorCode);\n\n for (const featureFlag of featureFlags.values()) {\n if (!featureFlag.environmentEnabled) {\n continue;\n }\n\n const variationData = this.variationConfiguration\n .getVariation({\n visitorCode,\n visitorIdentifier,\n targetingData,\n featureFlag,\n clientConfiguration: this.clientConfiguration,\n dataManager: this.dataManager,\n packageInfo: this.externalPackageInfo,\n })\n .throw();\n\n this.eventManager.fireEvent(EventType.Evaluation, {\n featureKey: featureFlag.featureKey,\n variation: {\n key: variationData.variationKey,\n experimentId: variationData.experimentId,\n id: variationData.variationId,\n },\n });\n\n if (variationData.variationKey !== OFF_VARIATION_KEY) {\n activeVariations.push(variationData);\n }\n }\n\n return activeVariations;\n }\n\n private _getFeatureVariation(\n visitorCode: string,\n featureKey: string,\n ): Result<FeatureFlagVariationType, KameleoonError> {\n if (!this.initialized) {\n return Err(new KameleoonError(KameleoonException.Initialization));\n }\n\n const featureFlags = this.clientConfiguration.featureFlags;\n const featureFlag = featureFlags.get(featureKey);\n\n if (!featureFlag) {\n return Err(\n new KameleoonError(\n KameleoonException.FeatureFlagConfigurationNotFound,\n featureKey,\n ),\n );\n }\n\n if (!featureFlag.environmentEnabled) {\n return Err(\n new KameleoonError(\n KameleoonException.FeatureFlagEnvironmentDisabled,\n featureFlag.featureKey,\n this.environment,\n ),\n );\n }\n\n const targetingData = this.dataManager.getTargetingData(visitorCode);\n const visitorIdentifier =\n this.dataManager.getVisitorIdentifier(visitorCode);\n\n const variationData = this.variationConfiguration\n .getVariation({\n visitorCode,\n visitorIdentifier,\n featureFlag,\n targetingData,\n withAssignment: true,\n clientConfiguration: this.clientConfiguration,\n dataManager: this.dataManager,\n packageInfo: this.externalPackageInfo,\n })\n .throw();\n\n this.eventManager.fireEvent(EventType.Evaluation, {\n featureKey,\n variation: {\n key: variationData.variationKey,\n experimentId: variationData.experimentId,\n id: variationData.variationId,\n },\n });\n\n const { experimentId, variationId } = variationData;\n\n if (typeof variationId === 'number' && typeof experimentId === 'number') {\n Utilities.updateCache({\n cacheManager: this.trackingCache,\n visitorCode,\n experimentId,\n variationId,\n });\n }\n\n Utilities.trackFeatureExperiment({\n visitorCode,\n requester: this.requester,\n featureFlagVariation: variationData,\n dataManager: this.dataManager,\n isOfflineModeOn: this.isOfflineModeOn,\n isConsentProvided: this._isConsentProvided(visitorCode),\n offlineTrackingStorage: this.offlineTrackingStorage,\n variationConfiguration: this.variationConfiguration,\n });\n\n return Ok(variationData);\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"kameleoonClient.js","names":["KameleoonClient","constructor","a","siteCode","configuration","internalConfiguration","_defineProperty","settings","clientSettings","ClientSettings","environment","externalStorage","externalEventSource","externalPackageInfo","externalVisitorCodeManager","externalRequester","externalClientConfiguration","externalPRNG","trackingCache","CacheManager","CACHE_CLEANUP_TIMEOUT","clientDataStorage","DataStorage","KameleoonStorageKey","ClientData","targetingDataStorage","TargetingData","variationDataStorage","VariationData","offlineTrackingStorage","OfflineTracking","consentDataStorage","ConsentData","dataManager","DataManager","storage","cleanupInterval","requester","Requester","domain","networkDomain","packageInfo","requestTimeout","trackRetryDelay","eventSource","KameleoonEventSource","eventManager","EventManager","clientConfiguration","ClientConfiguration","updateInterval","variationConfiguration","VariationConfiguration","Utilities","prng","visitorCodeManager","initialize","useCache","result","throw","isOfflineModeOn","initialized","ok","addData","visitorCode","validateVisitorCode","KameleoonError","KameleoonException","Initialization","b","arguments","length","data","Array","d","getRemoteVisitorData","shouldAddData","filters","DEFAULT_VISITOR_DATA_FILTERS","isUniqueIdentifier","previousVisitAmount","VisitAmount","getVisitorData","isMappingIdentifier","visitorData","storageVisitorData","visitsData","parseVisitorData","dataItem","isPersistentCustomData","trackConversion","goalId","revenue","Conversion","flush","linkedVisitor","getLinkedVisitor","index","identifierCustomDataIndex","CustomData","trackData","isConsentProvided","_isConsentProvided","unsentDataVisitors","sendOfflineTracking","visitorCodeKey","getFeatureFlags","featureFlags","resultFeatureFlags","forEach","id","featureKey","push","key","getVisitorFeatureFlags","activeVariations","_getActiveFeatureVariations","featureFlagId","getActiveFeatureFlags","resultFeatureList","Map","variation","variationKey","variationId","experimentId","variables","_getFeatureVariables","resultVariables","map","variable","parseFeatureVariable","set","getFeatureFlagVariationKey","_getFeatureVariation","getFeatureFlagVariable","variableKey","find","item","FeatureFlagVariableNotFound","type","value","getFeatureFlagVariables","parsedVariable","isFeatureFlagActive","OFF_VARIATION_KEY","err","FeatureFlagEnvironmentDisabled","getRemoteData","remoteData","getVisitorWarehouseAudience","customDataIndex","warehouseKey","RemoteData","concat","WAREHOUSE_AUDIENCE_KEY","Object","keys","customData","onConfigurationUpdate","callback","addEventHandler","EventType","ConfigurationUpdate","onEvent","event","getEngineTrackingCode","getTrackingCode","isInitialized","setUserConsent","consent","setData","update","VisitorCode","maxAge","DEFAULT_MAX_AGE","path","PATH","consentRequired","ZERO_MAX_AGE","isConsentRequired","consentDataResult","read","featureFlag","get","FeatureFlagConfigurationNotFound","variations","FeatureFlagVariationNotFound","targetingData","getTargetingData","visitorIdentifier","getVisitorIdentifier","values","environmentEnabled","variationData","getVariation","fireEvent","Evaluation","Err","withAssignment","updateCache","cacheManager","trackFeatureExperiment","featureFlagVariation","Ok","exports"],"sources":["../src/kameleoonClient.ts"],"sourcesContent":["import { Err, Ok, Result } from 'ts-res';\nimport { CacheManager } from './cacheManager';\nimport {\n ClientConfiguration,\n FeatureVariableType,\n JSONType,\n} from './clientConfiguration';\nimport { ClientSettings } from './clientSettings';\nimport {\n CACHE_CLEANUP_TIMEOUT,\n DEFAULT_VISITOR_DATA_FILTERS,\n OFF_VARIATION_KEY,\n} from './constants';\nimport {\n Conversion,\n CustomData,\n DataManager,\n KameleoonDataType,\n} from './kameleoonData';\nimport { WAREHOUSE_AUDIENCE_KEY } from './constants';\nimport { KameleoonError, KameleoonException } from './kameleoonError';\nimport { Requester } from './requester';\nimport {\n ClientDataType,\n KameleoonStorageKey,\n VariationDataType,\n DataStorage,\n ConsentDataType,\n IStorage,\n OfflineTracking,\n} from './storage';\nimport {\n TrackConversionParamsType,\n FeatureFlagType,\n GetFeatureFlagVariableParamsType,\n FeatureVariableResultType,\n SDKCoreParameters,\n TrackingCacheItemType,\n ExternalPackageInfoType,\n RemoteVisitorDataParamsType,\n GetVisitorWarehouseAudienceParamsType,\n Environment,\n SetUserConsentParametersType,\n FeatureFlagVariableType,\n KameleoonVariationType,\n GetFeatureVariablesParamsType,\n} from './types';\nimport { IVisitorCodeManager } from './visitorCodeManager';\nimport { Utilities } from './utilities';\nimport {\n FeatureFlagVariationType,\n VariationConfiguration,\n} from './variationConfiguration';\nimport { TargetingDataType } from './targeting';\nimport { EventCallbackType, EventManager, EventType } from './eventManager';\nimport { KameleoonEventSource } from './eventSource';\nimport { IKameleoonClient } from './kameleoonClientInterface';\nimport { DEFAULT_MAX_AGE, PATH, ZERO_MAX_AGE } from './visitorCodeManager';\n\n/**\n * @class\n * KameleoonClient - a class for creating kameleoon client instance\n * for communicating with Kameleoon JavaScript SDK Core, when new instance is created\n */\nexport class KameleoonClient implements IKameleoonClient {\n private variationConfiguration: VariationConfiguration;\n private clientConfiguration: ClientConfiguration;\n private dataManager: DataManager;\n private offlineTrackingStorage: IStorage<OfflineTracking>;\n private consentDataStorage: IStorage<ConsentDataType>;\n private trackingCache: CacheManager<TrackingCacheItemType>;\n private requester: Requester;\n private externalPackageInfo: ExternalPackageInfoType;\n private initialized: boolean = false;\n private visitorCodeManager: IVisitorCodeManager;\n private eventManager: EventManager;\n private environment: Environment;\n private isOfflineModeOn?: boolean;\n\n /**\n * @param {SDKCoreParameters} sdkCoreParameters - parameters for initializing sdk core\n */\n constructor({\n siteCode,\n configuration,\n internalConfiguration,\n }: SDKCoreParameters) {\n const { settings: clientSettings } = new ClientSettings(\n siteCode,\n configuration,\n );\n this.environment = clientSettings.environment;\n const {\n externalStorage,\n externalEventSource,\n externalPackageInfo,\n externalVisitorCodeManager,\n externalRequester,\n externalClientConfiguration,\n externalPRNG,\n } = internalConfiguration;\n const trackingCache = new CacheManager<TrackingCacheItemType>(\n CACHE_CLEANUP_TIMEOUT,\n );\n\n const clientDataStorage = new DataStorage<ClientDataType>(\n externalStorage,\n KameleoonStorageKey.ClientData,\n );\n const targetingDataStorage = new DataStorage<TargetingDataType>(\n externalStorage,\n KameleoonStorageKey.TargetingData,\n );\n const variationDataStorage = new DataStorage<VariationDataType>(\n externalStorage,\n KameleoonStorageKey.VariationData,\n );\n const offlineTrackingStorage = new DataStorage<OfflineTracking>(\n externalStorage,\n KameleoonStorageKey.OfflineTracking,\n );\n const consentDataStorage = new DataStorage<ConsentDataType>(\n externalStorage,\n KameleoonStorageKey.ConsentData,\n );\n\n const dataManager = new DataManager({\n storage: targetingDataStorage,\n cleanupInterval: clientSettings.cleanupInterval,\n });\n\n const requester = new Requester({\n siteCode,\n domain: clientSettings.networkDomain,\n environment: clientSettings.environment,\n packageInfo: externalPackageInfo,\n externalRequester: externalRequester,\n requestTimeout: clientSettings.requestTimeout,\n trackRetryDelay: clientSettings.trackRetryDelay,\n });\n\n const eventSource = new KameleoonEventSource(\n clientSettings.siteCode,\n externalEventSource,\n );\n\n const eventManager = new EventManager();\n\n const clientConfiguration = new ClientConfiguration({\n storage: clientDataStorage,\n updateInterval: clientSettings.updateInterval,\n dataManager,\n eventManager,\n requester,\n externalClientConfiguration,\n offlineTrackingStorage,\n eventSource,\n externalVisitorCodeManager,\n });\n\n const variationConfiguration = new VariationConfiguration(\n variationDataStorage,\n );\n\n Utilities.prng = externalPRNG;\n\n this.variationConfiguration = variationConfiguration;\n this.requester = requester;\n this.trackingCache = trackingCache;\n this.dataManager = dataManager;\n this.clientConfiguration = clientConfiguration;\n this.externalPackageInfo = externalPackageInfo;\n this.offlineTrackingStorage = offlineTrackingStorage;\n this.consentDataStorage = consentDataStorage;\n this.visitorCodeManager = externalVisitorCodeManager;\n this.eventManager = eventManager;\n }\n\n public async initialize(useCache?: boolean): Promise<boolean> {\n const result = await this.clientConfiguration.initialize();\n result.throw();\n\n this.isOfflineModeOn = useCache;\n this.initialized = true;\n\n return result.ok;\n }\n\n public addData(visitorCode: string, ...data: KameleoonDataType[]): void {\n Utilities.validateVisitorCode(visitorCode).throw();\n\n if (!this.initialized) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n\n this.dataManager.addData(visitorCode, ...data).throw();\n }\n\n public async getRemoteVisitorData({\n visitorCode,\n shouldAddData = true,\n filters = DEFAULT_VISITOR_DATA_FILTERS,\n isUniqueIdentifier = false,\n }: RemoteVisitorDataParamsType): Promise<KameleoonDataType[]> {\n if (!this.initialized) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n\n Utilities.validateVisitorCode(visitorCode).throw();\n\n const { previousVisitAmount } = filters;\n\n if (\n typeof previousVisitAmount === 'number' &&\n (previousVisitAmount < 1 || previousVisitAmount > 25)\n ) {\n throw new KameleoonError(KameleoonException.VisitAmount);\n }\n\n const result = await this.requester.getVisitorData({\n visitorCode,\n filters,\n isMappingIdentifier: isUniqueIdentifier,\n });\n const data = result.throw();\n\n const { visitorData, storageVisitorData, visitsData } =\n Utilities.parseVisitorData({\n data,\n filters,\n visitorCode,\n dataManager: this.dataManager,\n variationConfiguration: this.variationConfiguration,\n });\n\n for (const dataItem of storageVisitorData) {\n if (shouldAddData || this.dataManager.isPersistentCustomData(dataItem)) {\n this.addData(visitorCode, dataItem);\n }\n }\n\n // --- Note ---\n // Data on visits amount and time stamps is not returned to a user\n if (visitsData && shouldAddData) {\n this.addData(visitorCode, visitsData);\n }\n\n return visitorData;\n }\n\n public trackConversion({\n visitorCode,\n goalId,\n revenue,\n isUniqueIdentifier,\n }: TrackConversionParamsType): void {\n this.addData(visitorCode, new Conversion({ goalId, revenue }));\n this.flush(visitorCode, isUniqueIdentifier);\n }\n\n public flush(visitorCode?: string, isUniqueIdentifier?: boolean): void {\n if (!this.initialized) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n\n if (typeof visitorCode === 'string') {\n Utilities.validateVisitorCode(visitorCode).throw();\n }\n\n if (visitorCode) {\n let isMappingIdentifier = false;\n\n // --- Note ---\n // This part is a workaround for Data API\n // If there's is no unique identifier for the visitor\n // We do reconciliation for visitor with himself\n if (isUniqueIdentifier) {\n const linkedVisitor = this.dataManager.getLinkedVisitor(visitorCode);\n const index = this.dataManager.identifierCustomDataIndex;\n\n if (!linkedVisitor && typeof index === 'number') {\n this.dataManager.addData(\n visitorCode,\n new CustomData(index, visitorCode),\n );\n } else {\n isMappingIdentifier = true;\n }\n }\n\n Utilities.trackData({\n visitorCode,\n isMappingIdentifier,\n dataManager: this.dataManager,\n requester: this.requester,\n isOfflineModeOn: this.isOfflineModeOn,\n isConsentProvided: this._isConsentProvided(visitorCode),\n offlineTrackingStorage: this.offlineTrackingStorage,\n });\n\n return;\n }\n\n // --- Note ---\n // `Utilities.trackData` executes `Utilities.sendOfflineTracking` asynchronously at first, but\n // we need to execute `Utilities.sendOfflineTracking` even if calling `Utilities.trackData` is skipped\n // due to lack of unsent data\n if (!this.dataManager.unsentDataVisitors.length) {\n Utilities.sendOfflineTracking({\n requester: this.requester,\n storage: this.offlineTrackingStorage,\n });\n return;\n }\n\n for (const visitorCodeKey of this.dataManager.unsentDataVisitors) {\n Utilities.trackData({\n visitorCode: visitorCodeKey,\n dataManager: this.dataManager,\n requester: this.requester,\n isOfflineModeOn: this.isOfflineModeOn,\n isConsentProvided: this._isConsentProvided(visitorCodeKey),\n offlineTrackingStorage: this.offlineTrackingStorage,\n });\n }\n }\n\n public getFeatureFlags(): FeatureFlagType[] {\n if (!this.initialized) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n\n const featureFlags = this.clientConfiguration.featureFlags;\n const resultFeatureFlags: FeatureFlagType[] = [];\n\n featureFlags.forEach(({ id, featureKey }) => {\n resultFeatureFlags.push({\n id,\n key: featureKey,\n });\n });\n\n return resultFeatureFlags;\n }\n\n public getVisitorFeatureFlags(visitorCode: string): FeatureFlagType[] {\n if (!this.initialized) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n\n const activeVariations = this._getActiveFeatureVariations(visitorCode);\n const resultFeatureFlags: FeatureFlagType[] = [];\n\n activeVariations.forEach(({ featureFlagId, featureKey }) => {\n resultFeatureFlags.push({\n id: featureFlagId,\n key: featureKey,\n });\n });\n\n return resultFeatureFlags;\n }\n\n public getActiveFeatureFlags(\n visitorCode: string,\n ): Map<string, KameleoonVariationType> {\n const activeVariations = this._getActiveFeatureVariations(visitorCode);\n const resultFeatureList: Map<string, KameleoonVariationType> = new Map();\n\n activeVariations.forEach((variation) => {\n const { variationKey, featureKey, variationId, experimentId } = variation;\n\n let variables: FeatureVariableType[] = [];\n\n if (variationId !== null && experimentId !== null) {\n variables = this._getFeatureVariables({\n visitorCode,\n featureKey,\n variationKey,\n });\n }\n\n const resultVariables = variables.map((variable) =>\n Utilities.parseFeatureVariable(variable).throw(),\n );\n\n resultFeatureList.set(variation.featureKey, {\n key: variationKey,\n id: variationId,\n experimentId,\n variables: resultVariables,\n });\n });\n\n return resultFeatureList;\n }\n\n public getFeatureFlagVariationKey(\n visitorCode: string,\n featureKey: string,\n ): string {\n Utilities.validateVisitorCode(visitorCode).throw();\n\n const { variationKey } = this._getFeatureVariation(\n visitorCode,\n featureKey,\n ).throw();\n\n return variationKey;\n }\n\n public getFeatureFlagVariable({\n visitorCode,\n featureKey,\n variableKey,\n }: GetFeatureFlagVariableParamsType): FeatureFlagVariableType {\n Utilities.validateVisitorCode(visitorCode).throw();\n\n const { variationKey } = this._getFeatureVariation(\n visitorCode,\n featureKey,\n ).throw();\n\n const variables = this._getFeatureVariables({\n visitorCode,\n featureKey,\n variationKey,\n });\n const variable = variables.find((item) => item.key === variableKey);\n\n if (!variable) {\n throw new KameleoonError(\n KameleoonException.FeatureFlagVariableNotFound,\n variableKey,\n visitorCode,\n );\n }\n\n const { type, value } = Utilities.parseFeatureVariable(variable).throw();\n\n return { type, value } as FeatureFlagVariableType;\n }\n\n public getFeatureFlagVariables(\n visitorCode: string,\n featureKey: string,\n ): FeatureVariableResultType[] {\n Utilities.validateVisitorCode(visitorCode).throw();\n\n const { variationKey } = this._getFeatureVariation(\n visitorCode,\n featureKey,\n ).throw();\n\n const variables = this._getFeatureVariables({\n visitorCode,\n featureKey,\n variationKey,\n });\n const resultVariables: FeatureVariableResultType[] = [];\n\n for (const variable of variables) {\n const parsedVariable = Utilities.parseFeatureVariable(variable).throw();\n resultVariables.push(parsedVariable);\n }\n\n return resultVariables;\n }\n\n public isFeatureFlagActive(visitorCode: string, featureKey: string): boolean {\n try {\n const variationKey = this.getFeatureFlagVariationKey(\n visitorCode,\n featureKey,\n );\n\n return variationKey !== OFF_VARIATION_KEY;\n } catch (err) {\n if (\n err instanceof KameleoonError &&\n err.type === KameleoonException.FeatureFlagEnvironmentDisabled\n ) {\n return false;\n }\n\n throw err;\n }\n }\n\n public async getRemoteData(key: string): Promise<JSONType> {\n const remoteData = await this.requester.getRemoteData(key);\n\n return remoteData.throw();\n }\n\n public async getVisitorWarehouseAudience({\n visitorCode,\n customDataIndex,\n warehouseKey,\n }: GetVisitorWarehouseAudienceParamsType): Promise<CustomData | null> {\n Utilities.validateVisitorCode(visitorCode).throw();\n\n const data = await this.getRemoteData(warehouseKey || visitorCode);\n\n if (!data) {\n throw new KameleoonError(\n KameleoonException.RemoteData,\n `No data found for ${warehouseKey || visitorCode} key`,\n );\n }\n\n if (\n !data[WAREHOUSE_AUDIENCE_KEY] ||\n Object.keys(data[WAREHOUSE_AUDIENCE_KEY]).length === 0\n ) {\n return null;\n }\n\n const customData = new CustomData(\n customDataIndex,\n ...Object.keys(data[WAREHOUSE_AUDIENCE_KEY]),\n );\n\n this.dataManager.addData(visitorCode, customData);\n\n return customData;\n }\n\n /**\n * @deprecated\n * use `onEvent(EventType.ConfigurationUpdate, callback)` instead\n * Will be removed in the next major release\n * */\n public onConfigurationUpdate(callback: () => void): void {\n if (!this.initialized) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n\n this.eventManager.addEventHandler(EventType.ConfigurationUpdate, callback);\n }\n\n public onEvent<E extends EventType>(\n event: E,\n callback: EventCallbackType<E>,\n ): void {\n if (!this.initialized) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n\n this.eventManager.addEventHandler(event, callback);\n }\n\n public getEngineTrackingCode(visitorCode: string): string {\n Utilities.validateVisitorCode(visitorCode).throw();\n\n return Utilities.getTrackingCode(this.trackingCache, visitorCode);\n }\n\n public isInitialized(): boolean {\n return this.initialized;\n }\n\n protected setUserConsent({\n visitorCode,\n consent,\n setData,\n }: SetUserConsentParametersType): void {\n Utilities.validateVisitorCode(visitorCode).throw();\n\n this.consentDataStorage.update({ [visitorCode]: consent });\n\n if (consent) {\n setData({\n visitorCode,\n key: KameleoonStorageKey.VisitorCode,\n maxAge: DEFAULT_MAX_AGE,\n path: PATH,\n });\n } else {\n if (this.visitorCodeManager.consentRequired) {\n setData({\n visitorCode: '',\n key: KameleoonStorageKey.VisitorCode,\n maxAge: ZERO_MAX_AGE,\n path: PATH,\n });\n }\n }\n }\n\n private _isConsentProvided(visitorCode: string): boolean {\n const { isConsentRequired } = this.clientConfiguration;\n const consentDataResult = this.consentDataStorage.read();\n\n return (\n !isConsentRequired ||\n (consentDataResult.ok && consentDataResult.data[visitorCode])\n );\n }\n\n private _getFeatureVariables({\n visitorCode,\n featureKey,\n variationKey,\n }: GetFeatureVariablesParamsType): FeatureVariableType[] {\n const featureFlags = this.clientConfiguration.featureFlags;\n const featureFlag = featureFlags.get(featureKey);\n\n if (!featureFlag) {\n throw new KameleoonError(\n KameleoonException.FeatureFlagConfigurationNotFound,\n featureKey,\n );\n }\n const variation = featureFlag.variations.find(\n (item) => item.key === variationKey,\n );\n\n if (!variation) {\n throw new KameleoonError(\n KameleoonException.FeatureFlagVariationNotFound,\n variationKey,\n visitorCode,\n );\n }\n\n return variation.variables;\n }\n\n private _getActiveFeatureVariations(\n visitorCode: string,\n ): FeatureFlagVariationType[] {\n if (!this.initialized) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n\n const featureFlags = this.clientConfiguration.featureFlags;\n const activeVariations: FeatureFlagVariationType[] = [];\n\n const targetingData = this.dataManager.getTargetingData(visitorCode);\n const visitorIdentifier =\n this.dataManager.getVisitorIdentifier(visitorCode);\n\n for (const featureFlag of featureFlags.values()) {\n if (!featureFlag.environmentEnabled) {\n continue;\n }\n\n const variationData = this.variationConfiguration\n .getVariation({\n visitorCode,\n visitorIdentifier,\n targetingData,\n featureFlag,\n clientConfiguration: this.clientConfiguration,\n dataManager: this.dataManager,\n packageInfo: this.externalPackageInfo,\n })\n .throw();\n\n this.eventManager.fireEvent(EventType.Evaluation, {\n featureKey: featureFlag.featureKey,\n variation: {\n key: variationData.variationKey,\n experimentId: variationData.experimentId,\n id: variationData.variationId,\n },\n });\n\n if (variationData.variationKey !== OFF_VARIATION_KEY) {\n activeVariations.push(variationData);\n }\n }\n\n return activeVariations;\n }\n\n private _getFeatureVariation(\n visitorCode: string,\n featureKey: string,\n ): Result<FeatureFlagVariationType, KameleoonError> {\n if (!this.initialized) {\n return Err(new KameleoonError(KameleoonException.Initialization));\n }\n\n const featureFlags = this.clientConfiguration.featureFlags;\n const featureFlag = featureFlags.get(featureKey);\n\n if (!featureFlag) {\n return Err(\n new KameleoonError(\n KameleoonException.FeatureFlagConfigurationNotFound,\n featureKey,\n ),\n );\n }\n\n if (!featureFlag.environmentEnabled) {\n return Err(\n new KameleoonError(\n KameleoonException.FeatureFlagEnvironmentDisabled,\n featureFlag.featureKey,\n this.environment,\n ),\n );\n }\n\n const targetingData = this.dataManager.getTargetingData(visitorCode);\n const visitorIdentifier =\n this.dataManager.getVisitorIdentifier(visitorCode);\n\n const variationData = this.variationConfiguration\n .getVariation({\n visitorCode,\n visitorIdentifier,\n featureFlag,\n targetingData,\n withAssignment: true,\n clientConfiguration: this.clientConfiguration,\n dataManager: this.dataManager,\n packageInfo: this.externalPackageInfo,\n })\n .throw();\n\n this.eventManager.fireEvent(EventType.Evaluation, {\n featureKey,\n variation: {\n key: variationData.variationKey,\n experimentId: variationData.experimentId,\n id: variationData.variationId,\n },\n });\n\n const { experimentId, variationId } = variationData;\n\n if (typeof variationId === 'number' && typeof experimentId === 'number') {\n Utilities.updateCache({\n cacheManager: this.trackingCache,\n visitorCode,\n experimentId,\n variationId,\n });\n }\n\n Utilities.trackFeatureExperiment({\n visitorCode,\n featureFlagVariation: variationData,\n requester: this.requester,\n dataManager: this.dataManager,\n isOfflineModeOn: this.isOfflineModeOn,\n isConsentProvided: this._isConsentProvided(visitorCode),\n offlineTrackingStorage: this.offlineTrackingStorage,\n variationConfiguration: this.variationConfiguration,\n });\n\n return Ok(variationData);\n }\n}\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.DataManager=void 0;var _tsRes=require("ts-res"),_targeting=require("../targeting"),_dataProcessor=require("./dataProcessor"),_utilities=require("../utilities"),_clientConfiguration=require("../clientConfiguration"),_types=require("./types");function _defineProperty(a,b,c){return b=_toPropertyKey(b),b in a?Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!0}):a[b]=c,a}function _toPropertyKey(a){var b=_toPrimitive(a,"string");return"symbol"==typeof b?b:b+""}function _toPrimitive(a,b){if("object"!=typeof a||!a)return a;var c=a[Symbol.toPrimitive];if(void 0!==c){var d=c.call(a,b||"default");if("object"!=typeof d)return d;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===b?String:Number)(a)}class DataManager{constructor(a){let{storage:b,cleanupInterval:c}=a;if(_defineProperty(this,"targetingTrees",new Map),_defineProperty(this,"localCustomDataIndexes",new Set),_defineProperty(this,"persistentCustomDataIndexes",new Set),_defineProperty(this,"mappingIdentifierCustomDataIndex",null),_defineProperty(this,"cleanupIntervalId",null),_defineProperty(this,"dataProcessor",void 0),_defineProperty(this,"unsentData",void 0),_defineProperty(this,"sentPageViewTimestamps",new Map),this.dataProcessor=new _dataProcessor.DataProcessor(b),this.unsentData={},c){const a=()=>{this.dataProcessor.cleanupTargetingData(c),this.sentPageViewTimestamps.clear()};try{this.cleanupIntervalId=setInterval(a,c)}catch(a){throw this.cleanupIntervalId&&clearInterval(this.cleanupIntervalId),a}}}addData(a){this.unsentData[a]||(this.unsentData[a]=new Map);for(var b=arguments.length,c=Array(1<b?b-1:0),d=1;d<b;d++)c[d-1]=arguments[d];for(const b of c)switch(this.dataProcessor.updateData(a,b),b.data.type){case _types.KameleoonData.CustomData:{const c=b,d=c.data;this.mappingIdentifierCustomDataIndex===d.index&&(c._isMappingIdentifier=!0,a!==d.value[0]&&this.dataProcessor.createReference(a,d.value[0])),this.localCustomDataIndexes.has(d.index)||b.isSent||this.unsentData[a].set(d.index,c);break}case _types.KameleoonData.PageView:{const c=b.data,d=this.dataProcessor.getTargetingData(a).or({});if(d){const e=d[_types.KameleoonData.PageView],f=e[c.urlAddress];if(!b.isSent)for(const c of f.timestamps)this.sentPageViewTimestamps.has(c)||(this.unsentData[a].set(c,b),this.sentPageViewTimestamps.set(c,!0));else for(const a of f.timestamps)this.sentPageViewTimestamps.has(a)||this.sentPageViewTimestamps.set(a,!0)}break}case _types.KameleoonData.Conversion:{const c=this.unsentData[a];if(!b.isSent)if(c.has(_types.KameleoonData.Conversion)){const a=c.get(_types.KameleoonData.Conversion);a.push(b),c.set(_types.KameleoonData.Conversion,a)}else c.set(_types.KameleoonData.Conversion,[b]);break}default:{const{data:c}=b;b.isSent||this.unsentData[a].set(c.type,b)}}return(0,_tsRes.Ok)()}getTree(a){if(this.targetingTrees.has(a.id))return this.targetingTrees.get(a.id);const b=new _targeting.Tree(a);return this.targetingTrees.set(a.id,b),b}clearTrees(){this.targetingTrees.clear()}getUnsentData(a){return this.unsentData[a]}clearUnsentData(a){var b;const c=null===(b=this.unsentData[a])||void 0===b?void 0:b.values();if(c&&this.persistentCustomDataIndexes.size){const b=new Map;for(const a of c)!Array.isArray(a)&&this.isPersistentCustomData(a)&&b.set(a.data.index,a);if(b.size)return void(this.unsentData[a]=b)}delete this.unsentData[a]}clearUnsentDataByKey(a,b){const c=this.unsentData[a];if(c){if(b===_types.KameleoonData.CustomData&&this.persistentCustomDataIndexes.size)for(const[a,d]of c.entries())this.isPersistentCustomData(d)||a===b&&c.delete(a);else if(b===_types.KameleoonData.PageView)for(const a of c.keys())"number"==typeof a&&c.delete(a);else c.delete(b);c.size||delete this.unsentData[a]}}isPersistentCustomData(a){return!!this.persistentCustomDataIndexes.size&&!!_utilities.Utilities.isCustomData(a)&&this.persistentCustomDataIndexes.has(a.data.index)}getLinkedVisitor(a){return this.dataProcessor.getLinkedVisitor(a,this.mappingIdentifierCustomDataIndex)}getVisitorIdentifier(a){const b=this.getTargetingData(a);if(!b)return a;const c=b[_types.KameleoonData.CustomData];if(!c||null===this.mappingIdentifierCustomDataIndex)return a;const d=c[this.mappingIdentifierCustomDataIndex];return d?d.value[0]:a}getTargetingData(a){const b=this.dataProcessor.getTargetingData(a).or(null);return b?b:void 0}get trees(){return this.targetingTrees}get unsentDataVisitors(){return Object.keys(this.unsentData)}get identifierCustomDataIndex(){return this.mappingIdentifierCustomDataIndex}get storedDataTypes(){return this.dataProcessor.storedDataTypeList}get storedCustomDataIndexes(){return this.dataProcessor.storedCustomDataIndexList}set customDataIndexes(a){const[b,c]=[[],[]];a.forEach(a=>{a.localOnly&&b.push(a.index),a.scope===_clientConfiguration.CustomDataScope.Visitor&&c.push(a.index),a.isMappingIdentifier&&(this.mappingIdentifierCustomDataIndex=a.index)}),b.length&&(this.localCustomDataIndexes=new Set(b)),c.length&&(this.persistentCustomDataIndexes=new Set(c))}}exports.DataManager=DataManager;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.DataManager=void 0;var _tsRes=require("ts-res"),_targeting=require("../targeting"),_dataProcessor=require("./dataProcessor"),_utilities=require("../utilities"),_clientConfiguration=require("../clientConfiguration"),_customData=require("./customData"),_types=require("./types");function _defineProperty(a,b,c){return b=_toPropertyKey(b),b in a?Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!0}):a[b]=c,a}function _toPropertyKey(a){var b=_toPrimitive(a,"string");return"symbol"==typeof b?b:b+""}function _toPrimitive(a,b){if("object"!=typeof a||!a)return a;var c=a[Symbol.toPrimitive];if(void 0!==c){var d=c.call(a,b||"default");if("object"!=typeof d)return d;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===b?String:Number)(a)}class DataManager{constructor(a){let{storage:b,cleanupInterval:c}=a;if(_defineProperty(this,"targetingTrees",new Map),_defineProperty(this,"localCustomDataIndexes",new Set),_defineProperty(this,"persistentCustomDataIndexes",new Set),_defineProperty(this,"mappingIdentifierCustomDataIndex",null),_defineProperty(this,"cleanupIntervalId",null),_defineProperty(this,"dataProcessor",void 0),_defineProperty(this,"unsentData",void 0),_defineProperty(this,"sentPageViewTimestamps",new Map),this.dataProcessor=new _dataProcessor.DataProcessor(b),this.unsentData={},c){const a=()=>{this.dataProcessor.cleanupTargetingData(c),this.sentPageViewTimestamps.clear()};try{this.cleanupIntervalId=setInterval(a,c)}catch(a){throw this.cleanupIntervalId&&clearInterval(this.cleanupIntervalId),a}}}addData(a){this.unsentData[a]||(this.unsentData[a]=new Map);for(var b=arguments.length,c=Array(1<b?b-1:0),d=1;d<b;d++)c[d-1]=arguments[d];for(const b of c)switch(this.dataProcessor.updateData(a,b),b.data.type){case _types.KameleoonData.CustomData:{const c=b,d=c.data;this.mappingIdentifierCustomDataIndex===d.index&&(c._isMappingIdentifier=!0,a!==d.value[0]&&this.dataProcessor.createReference(a,d.value[0])),this.localCustomDataIndexes.has(d.index)||b.isSent||this.unsentData[a].set(d.index,c);break}case _types.KameleoonData.PageView:{const c=b.data,d=this.dataProcessor.getTargetingData(a).or({});if(d){const e=d[_types.KameleoonData.PageView],f=e[c.urlAddress];if(!b.isSent)for(const c of f.timestamps)this.sentPageViewTimestamps.has(c)||(this.unsentData[a].set(c,b),this.sentPageViewTimestamps.set(c,!0));else for(const a of f.timestamps)this.sentPageViewTimestamps.has(a)||this.sentPageViewTimestamps.set(a,!0)}break}case _types.KameleoonData.Conversion:{const c=this.unsentData[a];if(!b.isSent)if(c.has(_types.KameleoonData.Conversion)){const a=c.get(_types.KameleoonData.Conversion);a.push(b),c.set(_types.KameleoonData.Conversion,a)}else c.set(_types.KameleoonData.Conversion,[b]);break}default:{const{data:c}=b;b.isSent||this.unsentData[a].set(c.type,b)}}return(0,_tsRes.Ok)()}getTree(a){if(this.targetingTrees.has(a.id))return this.targetingTrees.get(a.id);const b=new _targeting.Tree(a);return this.targetingTrees.set(a.id,b),b}clearTrees(){this.targetingTrees.clear()}getUnsentData(a){if(null!==this.mappingIdentifierCustomDataIndex){const b=this.getTargetingData(a);if(b){const c=b[_types.KameleoonData.CustomData];if(c){const b=c[this.mappingIdentifierCustomDataIndex];if(b){const{index:c,value:d}=b,e=new _customData.CustomData(c,...d);e._isMappingIdentifier=!0,this.unsentData[a]||(this.unsentData[a]=new Map),this.unsentData[a].set(c,e)}}}}return this.unsentData[a]}clearUnsentData(a){var b;const c=null===(b=this.unsentData[a])||void 0===b?void 0:b.values();if(c&&this.persistentCustomDataIndexes.size){const b=new Map;for(const a of c)!Array.isArray(a)&&this.isPersistentCustomData(a)&&b.set(a.data.index,a);if(b.size)return void(this.unsentData[a]=b)}delete this.unsentData[a]}clearUnsentDataByKey(a,b){const c=this.unsentData[a];if(c){if(b===_types.KameleoonData.CustomData&&this.persistentCustomDataIndexes.size)for(const[a,d]of c.entries())this.isPersistentCustomData(d)||a===b&&c.delete(a);else if(b===_types.KameleoonData.PageView)for(const a of c.keys())"number"==typeof a&&c.delete(a);else c.delete(b);c.size||delete this.unsentData[a]}}isPersistentCustomData(a){return!!this.persistentCustomDataIndexes.size&&!!_utilities.Utilities.isCustomData(a)&&this.persistentCustomDataIndexes.has(a.data.index)}getLinkedVisitor(a){return this.dataProcessor.getLinkedVisitor(a,this.mappingIdentifierCustomDataIndex)}getVisitorIdentifier(a){const b=this.getTargetingData(a);if(!b)return a;const c=b[_types.KameleoonData.CustomData];if(!c||null===this.mappingIdentifierCustomDataIndex)return a;const d=c[this.mappingIdentifierCustomDataIndex];return d?d.value[0]:a}getTargetingData(a){const b=this.dataProcessor.getTargetingData(a).or(null);return b?b:void 0}get trees(){return this.targetingTrees}get unsentDataVisitors(){return Object.keys(this.unsentData)}get identifierCustomDataIndex(){return this.mappingIdentifierCustomDataIndex}get storedDataTypes(){return this.dataProcessor.storedDataTypeList}get storedCustomDataIndexes(){return this.dataProcessor.storedCustomDataIndexList}set customDataIndexes(a){const[b,c]=[[],[]];a.forEach(a=>{a.localOnly&&b.push(a.index),a.scope===_clientConfiguration.CustomDataScope.Visitor&&c.push(a.index),a.isMappingIdentifier&&(this.mappingIdentifierCustomDataIndex=a.index)}),b.length&&(this.localCustomDataIndexes=new Set(b)),c.length&&(this.persistentCustomDataIndexes=new Set(c))}}exports.DataManager=DataManager;
2
2
  //# sourceMappingURL=dataManager.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dataManager.js","names":["DataManager","constructor","a","storage","cleanupInterval","_defineProperty","Map","Set","dataProcessor","DataProcessor","unsentData","cleanupCallback","cleanupTargetingData","sentPageViewTimestamps","clear","cleanupIntervalId","setInterval","err","clearInterval","addData","visitorCode","b","arguments","length","kameleoonData","Array","d","dataItem","updateData","data","type","KameleoonData","CustomData","customData","mappingIdentifierCustomDataIndex","index","_isMappingIdentifier","value","createReference","localCustomDataIndexes","has","isSent","set","PageView","storedData","getTargetingData","or","storedVisitorData","pageView","urlAddress","timestamp","timestamps","Conversion","existingConversions","get","push","Ok","getTree","segment","targetingTrees","id","targetingTree","Tree","clearTrees","getUnsentData","clearUnsentData","dataItems","values","persistentCustomDataIndexes","size","persistentCustomData","isArray","isPersistentCustomData","clearUnsentDataByKey","key","visitorData","dataKey","entries","delete","keys","Utilities","isCustomData","getLinkedVisitor","getVisitorIdentifier","targetingData","customDataValue","trees","unsentDataVisitors","Object","identifierCustomDataIndex","storedDataTypes","storedDataTypeList","storedCustomDataIndexes","storedCustomDataIndexList","customDataIndexes","customDataLocalOnlyIndexes","forEach","localOnly","scope","CustomDataScope","Visitor","isMappingIdentifier","exports"],"sources":["../../src/kameleoonData/dataManager.ts"],"sourcesContent":["import { Ok, Result } from 'ts-res';\nimport { KameleoonError } from 'src/kameleoonError';\nimport { SegmentType, Tree } from 'src/targeting';\nimport { DataProcessor } from './dataProcessor';\nimport { Utilities } from 'src/utilities';\nimport {\n CustomDataConfigurationType,\n CustomDataScope,\n} from 'src/clientConfiguration';\nimport { CustomData } from './customData';\nimport {\n DataManagerParametersType,\n ExistingPageViewDataType,\n KameleoonData,\n KameleoonDataType,\n KameleoonVisitorDataType,\n PageViewDataType,\n UnsentTargetingDataType,\n UnsentVisitorTargetingDataType,\n} from './types';\n\ninterface IDataManager {\n addData(visitorCode: string, ...kameleoonData: KameleoonDataType[]): void;\n getUnsentData: (\n visitorCode: string,\n ) => UnsentTargetingDataType[string] | undefined;\n getTree(segment: SegmentType): Tree;\n clearTrees(): void;\n clearUnsentData: (visitorCode: string) => void;\n isPersistentCustomData: (dataItem: KameleoonDataType) => boolean;\n getLinkedVisitor: (visitorCode: string) => string | null;\n getTargetingData: (\n visitorCode: string,\n ) => KameleoonVisitorDataType | undefined;\n readonly trees: Map<string, Tree>;\n readonly unsentDataVisitors: string[];\n readonly identifierCustomDataIndex: number | null;\n}\n\nexport class DataManager implements IDataManager {\n private targetingTrees: Map<string, Tree> = new Map();\n private localCustomDataIndexes: Set<number> = new Set();\n private persistentCustomDataIndexes: Set<number> = new Set();\n private mappingIdentifierCustomDataIndex: number | null = null;\n private cleanupIntervalId: NodeJS.Timer | null = null;\n private dataProcessor: DataProcessor;\n private unsentData: UnsentTargetingDataType;\n private sentPageViewTimestamps: Map<number, boolean> = new Map();\n\n constructor({ storage, cleanupInterval }: DataManagerParametersType) {\n this.dataProcessor = new DataProcessor(storage);\n this.unsentData = {};\n\n if (cleanupInterval) {\n const cleanupCallback = () => {\n this.dataProcessor.cleanupTargetingData(cleanupInterval);\n this.sentPageViewTimestamps.clear();\n };\n\n // --- Note ---\n // We can not make delayed code execution recoverable, as it might lead\n // to targeting data storage size overflow\n try {\n this.cleanupIntervalId = setInterval(cleanupCallback, cleanupInterval);\n } catch (err) {\n if (this.cleanupIntervalId) {\n clearInterval(this.cleanupIntervalId);\n }\n\n throw err;\n }\n }\n }\n\n public addData(\n visitorCode: string,\n ...kameleoonData: KameleoonDataType[]\n ): Result<void, KameleoonError> {\n // --- Note ---\n // We assume `this.unsentTargetingData[visitorCode]` is always presents further\n if (!this.unsentData[visitorCode]) {\n this.unsentData[visitorCode] = new Map();\n }\n\n for (const dataItem of kameleoonData) {\n // TODO: this can be optimized to be updated altogether\n // instead of updating each data item separately\n this.dataProcessor.updateData(visitorCode, dataItem);\n\n switch (dataItem.data.type) {\n case KameleoonData.CustomData: {\n const customData = dataItem as CustomData;\n const data = customData.data;\n\n // --- Bug ---\n // - There's a known issue here: `mappingIdentifier` won't be updated\n // in the storage because the data is written before `unsentData` update\n // and we get `mappingIdentifier` only by checking CC here\n // - It doesn't affect the functionality, as stored data is\n // only used for condition evaluation and `Visitor` scoped CD is never removed from `unsentData`\n // still it should be fixed with some `.updateData` refactor\n if (this.mappingIdentifierCustomDataIndex === data.index) {\n customData._isMappingIdentifier = true;\n\n if (visitorCode !== data.value[0]) {\n // --- Note ---\n // Associate linked visitor codes\n this.dataProcessor.createReference(visitorCode, data.value[0]);\n }\n }\n\n if (\n !this.localCustomDataIndexes.has(data.index) &&\n !dataItem.isSent\n ) {\n this.unsentData[visitorCode]!.set(data.index, customData);\n }\n\n break;\n }\n case KameleoonData.PageView: {\n const data = dataItem.data as PageViewDataType;\n\n // --- Note ---\n // `PageViews` can only be processed during storage update as they\n // can't create and merge referrers/titles/timestamps on their own\n // So we have to extract them from storage to update `unsentData` correctly\n const storedData = this.dataProcessor\n .getTargetingData(visitorCode)\n .or({});\n\n if (storedData) {\n const storedVisitorData = storedData[KameleoonData.PageView];\n const pageView = (storedVisitorData as ExistingPageViewDataType)[\n data.urlAddress\n ];\n\n // --- Note ---\n // A case for newly created page view\n if (!dataItem.isSent) {\n for (const timestamp of pageView.timestamps) {\n // --- Note ---\n // As we don't keep `sent` status for each timestamp, we have to\n // check if it was already sent to avoid duplicates\n if (!this.sentPageViewTimestamps.has(timestamp)) {\n this.unsentData[visitorCode]!.set(timestamp, dataItem);\n this.sentPageViewTimestamps.set(timestamp, true);\n }\n }\n // --- Note ---\n // A case for `getRemoteVisitorData` pre-loaded pages that shouldn't be sent again\n } else {\n for (const timestamp of pageView.timestamps) {\n if (!this.sentPageViewTimestamps.has(timestamp)) {\n this.sentPageViewTimestamps.set(timestamp, true);\n }\n }\n }\n }\n\n break;\n }\n case KameleoonData.Conversion: {\n const unsentData = this.unsentData[visitorCode]!;\n\n if (!dataItem.isSent) {\n if (unsentData.has(KameleoonData.Conversion)) {\n const existingConversions = unsentData.get(\n KameleoonData.Conversion,\n ) as KameleoonDataType[];\n\n existingConversions.push(dataItem);\n\n unsentData.set(KameleoonData.Conversion, existingConversions);\n } else {\n unsentData.set(KameleoonData.Conversion, [dataItem]);\n }\n }\n\n break;\n }\n default: {\n const { data } = dataItem;\n\n if (!dataItem.isSent) {\n this.unsentData[visitorCode]!.set(data.type, dataItem);\n }\n }\n }\n }\n\n return Ok();\n }\n\n public getTree(segment: SegmentType): Tree {\n if (this.targetingTrees.has(segment.id)) {\n return this.targetingTrees.get(segment.id)!;\n }\n\n const targetingTree = new Tree(segment);\n this.targetingTrees.set(segment.id, targetingTree);\n\n return targetingTree;\n }\n\n public clearTrees(): void {\n this.targetingTrees.clear();\n }\n\n public getUnsentData(\n visitorCode: string,\n ): UnsentTargetingDataType[string] | undefined {\n return this.unsentData[visitorCode];\n }\n\n public clearUnsentData(visitorCode: string): void {\n const dataItems = this.unsentData[visitorCode]?.values();\n\n if (dataItems && this.persistentCustomDataIndexes.size) {\n const persistentCustomData: UnsentVisitorTargetingDataType = new Map();\n\n for (const dataItem of dataItems) {\n if (!Array.isArray(dataItem) && this.isPersistentCustomData(dataItem)) {\n persistentCustomData.set(dataItem.data.index, dataItem);\n }\n }\n\n if (persistentCustomData.size) {\n this.unsentData[visitorCode] = persistentCustomData;\n return;\n }\n }\n\n delete this.unsentData[visitorCode];\n }\n\n public clearUnsentDataByKey(visitorCode: string, key: KameleoonData): void {\n const visitorData = this.unsentData[visitorCode];\n\n if (!visitorData) {\n return;\n }\n\n if (\n key === KameleoonData.CustomData &&\n this.persistentCustomDataIndexes.size\n ) {\n for (const [dataKey, dataItem] of visitorData.entries()) {\n if (this.isPersistentCustomData(dataItem as KameleoonDataType)) {\n continue;\n }\n\n if (dataKey === key) {\n visitorData.delete(dataKey);\n }\n }\n } else if (key === KameleoonData.PageView) {\n for (const dataKey of visitorData.keys()) {\n if (typeof dataKey === 'number') {\n visitorData.delete(dataKey);\n }\n }\n } else {\n visitorData.delete(key);\n }\n\n if (!visitorData.size) {\n delete this.unsentData[visitorCode];\n }\n }\n\n public isPersistentCustomData(\n dataItem: KameleoonDataType,\n ): dataItem is CustomData {\n if (!this.persistentCustomDataIndexes.size) {\n return false;\n }\n\n if (Utilities.isCustomData(dataItem)) {\n return this.persistentCustomDataIndexes.has(dataItem.data.index);\n }\n\n return false;\n }\n\n public getLinkedVisitor(visitorCode: string): string | null {\n return this.dataProcessor.getLinkedVisitor(\n visitorCode,\n this.mappingIdentifierCustomDataIndex,\n );\n }\n\n public getVisitorIdentifier(visitorCode: string): string {\n const targetingData = this.getTargetingData(visitorCode);\n\n if (!targetingData) {\n return visitorCode;\n }\n\n const customData = targetingData[KameleoonData.CustomData];\n\n if (!customData || this.mappingIdentifierCustomDataIndex === null) {\n return visitorCode;\n }\n\n const customDataValue = customData[this.mappingIdentifierCustomDataIndex];\n\n if (customDataValue) {\n return customDataValue.value[0];\n }\n\n return visitorCode;\n }\n\n public getTargetingData(\n visitorCode: string,\n ): KameleoonVisitorDataType | undefined {\n const targetingData = this.dataProcessor\n .getTargetingData(visitorCode)\n .or(null);\n\n if (!targetingData) {\n return undefined;\n }\n\n return targetingData;\n }\n\n get trees(): Map<string, Tree> {\n return this.targetingTrees;\n }\n\n get unsentDataVisitors(): string[] {\n return Object.keys(this.unsentData);\n }\n\n get identifierCustomDataIndex(): number | null {\n return this.mappingIdentifierCustomDataIndex;\n }\n\n get storedDataTypes(): Set<KameleoonData> {\n return this.dataProcessor.storedDataTypeList;\n }\n\n get storedCustomDataIndexes(): Set<number> {\n return this.dataProcessor.storedCustomDataIndexList;\n }\n\n set customDataIndexes(customData: CustomDataConfigurationType[]) {\n const [customDataLocalOnlyIndexes, persistentCustomDataIndexes]: Array<\n number[]\n > = [[], []];\n\n customData.forEach((customData) => {\n if (customData.localOnly) {\n customDataLocalOnlyIndexes.push(customData.index);\n }\n\n if (customData.scope === CustomDataScope.Visitor) {\n persistentCustomDataIndexes.push(customData.index);\n }\n\n if (customData.isMappingIdentifier) {\n this.mappingIdentifierCustomDataIndex = customData.index;\n }\n });\n\n if (customDataLocalOnlyIndexes.length) {\n this.localCustomDataIndexes = new Set(customDataLocalOnlyIndexes);\n }\n\n if (persistentCustomDataIndexes.length) {\n this.persistentCustomDataIndexes = new Set(persistentCustomDataIndexes);\n }\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"dataManager.js","names":["DataManager","constructor","a","storage","cleanupInterval","_defineProperty","Map","Set","dataProcessor","DataProcessor","unsentData","cleanupCallback","cleanupTargetingData","sentPageViewTimestamps","clear","cleanupIntervalId","setInterval","err","clearInterval","addData","visitorCode","b","arguments","length","kameleoonData","Array","d","dataItem","updateData","data","type","KameleoonData","CustomData","customData","mappingIdentifierCustomDataIndex","index","_isMappingIdentifier","value","createReference","localCustomDataIndexes","has","isSent","set","PageView","storedData","getTargetingData","or","storedVisitorData","pageView","urlAddress","timestamp","timestamps","Conversion","existingConversions","get","push","Ok","getTree","segment","targetingTrees","id","targetingTree","Tree","clearTrees","getUnsentData","targetingData","customDataValue","mappingCD","clearUnsentData","dataItems","values","persistentCustomDataIndexes","size","persistentCustomData","isArray","isPersistentCustomData","clearUnsentDataByKey","key","visitorData","dataKey","entries","delete","keys","Utilities","isCustomData","getLinkedVisitor","getVisitorIdentifier","trees","unsentDataVisitors","Object","identifierCustomDataIndex","storedDataTypes","storedDataTypeList","storedCustomDataIndexes","storedCustomDataIndexList","customDataIndexes","customDataLocalOnlyIndexes","forEach","localOnly","scope","CustomDataScope","Visitor","isMappingIdentifier","exports"],"sources":["../../src/kameleoonData/dataManager.ts"],"sourcesContent":["import { Ok, Result } from 'ts-res';\nimport { KameleoonError } from 'src/kameleoonError';\nimport { SegmentType, Tree } from 'src/targeting';\nimport { DataProcessor } from './dataProcessor';\nimport { Utilities } from 'src/utilities';\nimport {\n CustomDataConfigurationType,\n CustomDataScope,\n} from 'src/clientConfiguration';\nimport { CustomData } from './customData';\nimport {\n DataManagerParametersType,\n ExistingPageViewDataType,\n KameleoonData,\n KameleoonDataType,\n KameleoonVisitorDataType,\n PageViewDataType,\n UnsentTargetingDataType,\n UnsentVisitorTargetingDataType,\n} from './types';\n\ninterface IDataManager {\n addData(visitorCode: string, ...kameleoonData: KameleoonDataType[]): void;\n getUnsentData: (\n visitorCode: string,\n ) => UnsentTargetingDataType[string] | undefined;\n getTree(segment: SegmentType): Tree;\n clearTrees(): void;\n clearUnsentData: (visitorCode: string) => void;\n isPersistentCustomData: (dataItem: KameleoonDataType) => boolean;\n getLinkedVisitor: (visitorCode: string) => string | null;\n getTargetingData: (\n visitorCode: string,\n ) => KameleoonVisitorDataType | undefined;\n readonly trees: Map<string, Tree>;\n readonly unsentDataVisitors: string[];\n readonly identifierCustomDataIndex: number | null;\n}\n\nexport class DataManager implements IDataManager {\n private targetingTrees: Map<string, Tree> = new Map();\n private localCustomDataIndexes: Set<number> = new Set();\n private persistentCustomDataIndexes: Set<number> = new Set();\n private mappingIdentifierCustomDataIndex: number | null = null;\n private cleanupIntervalId: NodeJS.Timeout | null = null;\n private dataProcessor: DataProcessor;\n private unsentData: UnsentTargetingDataType;\n private sentPageViewTimestamps: Map<number, boolean> = new Map();\n\n constructor({ storage, cleanupInterval }: DataManagerParametersType) {\n this.dataProcessor = new DataProcessor(storage);\n this.unsentData = {};\n\n if (cleanupInterval) {\n const cleanupCallback = () => {\n this.dataProcessor.cleanupTargetingData(cleanupInterval);\n this.sentPageViewTimestamps.clear();\n };\n\n // --- Note ---\n // We can not make delayed code execution recoverable, as it might lead\n // to targeting data storage size overflow\n try {\n this.cleanupIntervalId = setInterval(cleanupCallback, cleanupInterval);\n } catch (err) {\n if (this.cleanupIntervalId) {\n clearInterval(this.cleanupIntervalId);\n }\n\n throw err;\n }\n }\n }\n\n public addData(\n visitorCode: string,\n ...kameleoonData: KameleoonDataType[]\n ): Result<void, KameleoonError> {\n // --- Note ---\n // We assume `this.unsentTargetingData[visitorCode]` is always presents further\n if (!this.unsentData[visitorCode]) {\n this.unsentData[visitorCode] = new Map();\n }\n\n for (const dataItem of kameleoonData) {\n // TODO: this can be optimized to be updated altogether\n // instead of updating each data item separately\n this.dataProcessor.updateData(visitorCode, dataItem);\n\n switch (dataItem.data.type) {\n case KameleoonData.CustomData: {\n const customData = dataItem as CustomData;\n const data = customData.data;\n\n // --- Bug ---\n // - There's a known issue here: `mappingIdentifier` won't be updated\n // in the storage because the data is written before `unsentData` update\n // and we get `mappingIdentifier` only by checking CC here\n // - It doesn't affect the functionality, as stored data is\n // only used for condition evaluation and `Visitor` scoped CD is never removed from `unsentData`\n // still it should be fixed with some `.updateData` refactor\n if (this.mappingIdentifierCustomDataIndex === data.index) {\n customData._isMappingIdentifier = true;\n\n if (visitorCode !== data.value[0]) {\n // --- Note ---\n // Associate linked visitor codes\n this.dataProcessor.createReference(visitorCode, data.value[0]);\n }\n }\n\n if (\n !this.localCustomDataIndexes.has(data.index) &&\n !dataItem.isSent\n ) {\n this.unsentData[visitorCode]!.set(data.index, customData);\n }\n\n break;\n }\n case KameleoonData.PageView: {\n const data = dataItem.data as PageViewDataType;\n\n // --- Note ---\n // `PageViews` can only be processed during storage update as they\n // can't create and merge referrers/titles/timestamps on their own\n // So we have to extract them from storage to update `unsentData` correctly\n const storedData = this.dataProcessor\n .getTargetingData(visitorCode)\n .or({});\n\n if (storedData) {\n const storedVisitorData = storedData[KameleoonData.PageView];\n const pageView = (storedVisitorData as ExistingPageViewDataType)[\n data.urlAddress\n ];\n\n // --- Note ---\n // A case for newly created page view\n if (!dataItem.isSent) {\n for (const timestamp of pageView.timestamps) {\n // --- Note ---\n // As we don't keep `sent` status for each timestamp, we have to\n // check if it was already sent to avoid duplicates\n if (!this.sentPageViewTimestamps.has(timestamp)) {\n this.unsentData[visitorCode]!.set(timestamp, dataItem);\n this.sentPageViewTimestamps.set(timestamp, true);\n }\n }\n // --- Note ---\n // A case for `getRemoteVisitorData` pre-loaded pages that shouldn't be sent again\n } else {\n for (const timestamp of pageView.timestamps) {\n if (!this.sentPageViewTimestamps.has(timestamp)) {\n this.sentPageViewTimestamps.set(timestamp, true);\n }\n }\n }\n }\n\n break;\n }\n case KameleoonData.Conversion: {\n const unsentData = this.unsentData[visitorCode]!;\n\n if (!dataItem.isSent) {\n if (unsentData.has(KameleoonData.Conversion)) {\n const existingConversions = unsentData.get(\n KameleoonData.Conversion,\n ) as KameleoonDataType[];\n\n existingConversions.push(dataItem);\n\n unsentData.set(KameleoonData.Conversion, existingConversions);\n } else {\n unsentData.set(KameleoonData.Conversion, [dataItem]);\n }\n }\n\n break;\n }\n default: {\n const { data } = dataItem;\n\n if (!dataItem.isSent) {\n this.unsentData[visitorCode]!.set(data.type, dataItem);\n }\n }\n }\n }\n\n return Ok();\n }\n\n public getTree(segment: SegmentType): Tree {\n if (this.targetingTrees.has(segment.id)) {\n return this.targetingTrees.get(segment.id)!;\n }\n\n const targetingTree = new Tree(segment);\n this.targetingTrees.set(segment.id, targetingTree);\n\n return targetingTree;\n }\n\n public clearTrees(): void {\n this.targetingTrees.clear();\n }\n\n public getUnsentData(\n visitorCode: string,\n ): UnsentTargetingDataType[string] | undefined {\n if (this.mappingIdentifierCustomDataIndex !== null) {\n const targetingData = this.getTargetingData(visitorCode);\n\n if (targetingData) {\n const customData = targetingData[KameleoonData.CustomData];\n\n if (customData) {\n const customDataValue =\n customData[this.mappingIdentifierCustomDataIndex];\n\n if (customDataValue) {\n const { index, value } = customDataValue;\n const mappingCD = new CustomData(index, ...value);\n mappingCD._isMappingIdentifier = true;\n\n if (!this.unsentData[visitorCode]) {\n this.unsentData[visitorCode] = new Map();\n }\n\n this.unsentData[visitorCode]!.set(index, mappingCD);\n }\n }\n }\n }\n\n return this.unsentData[visitorCode];\n }\n\n public clearUnsentData(visitorCode: string): void {\n const dataItems = this.unsentData[visitorCode]?.values();\n\n if (dataItems && this.persistentCustomDataIndexes.size) {\n const persistentCustomData: UnsentVisitorTargetingDataType = new Map();\n\n for (const dataItem of dataItems) {\n if (!Array.isArray(dataItem) && this.isPersistentCustomData(dataItem)) {\n persistentCustomData.set(dataItem.data.index, dataItem);\n }\n }\n\n if (persistentCustomData.size) {\n this.unsentData[visitorCode] = persistentCustomData;\n return;\n }\n }\n\n delete this.unsentData[visitorCode];\n }\n\n public clearUnsentDataByKey(visitorCode: string, key: KameleoonData): void {\n const visitorData = this.unsentData[visitorCode];\n\n if (!visitorData) {\n return;\n }\n\n if (\n key === KameleoonData.CustomData &&\n this.persistentCustomDataIndexes.size\n ) {\n for (const [dataKey, dataItem] of visitorData.entries()) {\n if (this.isPersistentCustomData(dataItem as KameleoonDataType)) {\n continue;\n }\n\n if (dataKey === key) {\n visitorData.delete(dataKey);\n }\n }\n } else if (key === KameleoonData.PageView) {\n for (const dataKey of visitorData.keys()) {\n if (typeof dataKey === 'number') {\n visitorData.delete(dataKey);\n }\n }\n } else {\n visitorData.delete(key);\n }\n\n if (!visitorData.size) {\n delete this.unsentData[visitorCode];\n }\n }\n\n public isPersistentCustomData(\n dataItem: KameleoonDataType,\n ): dataItem is CustomData {\n if (!this.persistentCustomDataIndexes.size) {\n return false;\n }\n\n if (Utilities.isCustomData(dataItem)) {\n return this.persistentCustomDataIndexes.has(dataItem.data.index);\n }\n\n return false;\n }\n\n public getLinkedVisitor(visitorCode: string): string | null {\n return this.dataProcessor.getLinkedVisitor(\n visitorCode,\n this.mappingIdentifierCustomDataIndex,\n );\n }\n\n public getVisitorIdentifier(visitorCode: string): string {\n const targetingData = this.getTargetingData(visitorCode);\n\n if (!targetingData) {\n return visitorCode;\n }\n\n const customData = targetingData[KameleoonData.CustomData];\n\n if (!customData || this.mappingIdentifierCustomDataIndex === null) {\n return visitorCode;\n }\n\n const customDataValue = customData[this.mappingIdentifierCustomDataIndex];\n\n if (customDataValue) {\n return customDataValue.value[0];\n }\n\n return visitorCode;\n }\n\n public getTargetingData(\n visitorCode: string,\n ): KameleoonVisitorDataType | undefined {\n const targetingData = this.dataProcessor\n .getTargetingData(visitorCode)\n .or(null);\n\n if (!targetingData) {\n return undefined;\n }\n\n return targetingData;\n }\n\n get trees(): Map<string, Tree> {\n return this.targetingTrees;\n }\n\n get unsentDataVisitors(): string[] {\n return Object.keys(this.unsentData);\n }\n\n get identifierCustomDataIndex(): number | null {\n return this.mappingIdentifierCustomDataIndex;\n }\n\n get storedDataTypes(): Set<KameleoonData> {\n return this.dataProcessor.storedDataTypeList;\n }\n\n get storedCustomDataIndexes(): Set<number> {\n return this.dataProcessor.storedCustomDataIndexList;\n }\n\n set customDataIndexes(customData: CustomDataConfigurationType[]) {\n const [customDataLocalOnlyIndexes, persistentCustomDataIndexes]: Array<\n number[]\n > = [[], []];\n\n customData.forEach((customData) => {\n if (customData.localOnly) {\n customDataLocalOnlyIndexes.push(customData.index);\n }\n\n if (customData.scope === CustomDataScope.Visitor) {\n persistentCustomDataIndexes.push(customData.index);\n }\n\n if (customData.isMappingIdentifier) {\n this.mappingIdentifierCustomDataIndex = customData.index;\n }\n });\n\n if (customDataLocalOnlyIndexes.length) {\n this.localCustomDataIndexes = new Set(customDataLocalOnlyIndexes);\n }\n\n if (persistentCustomDataIndexes.length) {\n this.persistentCustomDataIndexes = new Set(persistentCustomDataIndexes);\n }\n }\n}\n"],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -3,7 +3,7 @@ import { SdkLanguageType } from './constants';
3
3
  import { IExternalEventSource } from './eventSource';
4
4
  import { IExternalRequester, RequestType } from './requester';
5
5
  import { IExternalStorage } from './storage';
6
- import { VisitorDataFiltersType } from './utilities';
6
+ import { IExternalPRNG, VisitorDataFiltersType } from './utilities';
7
7
  import { IVisitorCodeManager } from './visitorCodeManager';
8
8
  /**
9
9
  * @param {number} updateInterval - update interval in _minutes_ for sdk configuration, minimum value is 1 minute
@@ -52,11 +52,20 @@ export type ExternalPackageInfoType = {
52
52
  type: SdkLanguageType;
53
53
  version: string;
54
54
  };
55
+ /**
56
+ * @param {ExternalPackageInfoType} packageInfo - external package info, used to get package version and name
57
+ * @param {IExternalPRNG | undefined} prng - external PRNG implementation
58
+ * */
59
+ export type InternalsType = {
60
+ packageInfo: ExternalPackageInfoType;
61
+ prng?: IExternalPRNG;
62
+ };
55
63
  /**
56
64
  * @param {IExternalStorage | undefined} externalStorage - external file system storage implemented outside client initialization
57
65
  * @param {IExternalEventSourceConstructor | undefined} externalEventSource - constructor for building external event source implementation
58
66
  * @param {ExternalPackageInfoType} externalPackageInfo - external package info, used to get package version and name
59
67
  * @param {ConfigurationDataType} externalClientConfiguration - external fetched client configuration
68
+ * Note: _Deprecated_ - to be removed in the next major update
60
69
  * @param {IExternalRequester} externalRequester - external requester , used to track or get data
61
70
  * @param {IVisitorCodeManager} externalVisitorCodeManager - external visitor code manager, used to get or generate visitor code
62
71
  * @param {number} targetingDataCleanupInterval - interval in *minutes* for cleaning up targeting data, minimum value is 1 minute
@@ -67,6 +76,7 @@ export type InternalSDKConfigurationType = {
67
76
  externalVisitorCodeManager: IVisitorCodeManager;
68
77
  externalPackageInfo: ExternalPackageInfoType;
69
78
  externalRequester: IExternalRequester;
79
+ externalPRNG: IExternalPRNG;
70
80
  externalClientConfiguration?: ConfigurationDataType;
71
81
  };
72
82
  /**
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","names":["_requester","require","Object","defineProperty","exports","value","VariableType","Milliseconds","Environment","Production","Staging","Development","BOOLEAN","NUMBER","STRING","JSON","Second","Minute","Hour","Day","Week","Month"],"sources":["../src/types.ts"],"sourcesContent":["import {\n ClientConfigurationDataType,\n ConfigurationDataType,\n JSONType,\n} from './clientConfiguration/types';\nimport { SdkLanguageType } from './constants';\nimport { IExternalEventSource } from './eventSource';\nimport { IExternalRequester, RequestType } from './requester';\nimport { IExternalStorage } from './storage';\nimport { VisitorDataFiltersType } from './utilities';\nimport { IVisitorCodeManager } from './visitorCodeManager';\n\n/**\n * @param {number} updateInterval - update interval in _minutes_ for sdk configuration, minimum value is 1 minute\n * @defaultvalue 60\n *\n * @param {Environment} environment - feature flag environment\n * @defaultvalue Environment.Production\n *\n * @param {number | undefined} targetingDataCleanupInterval - interval in _minutes_ for cleaning up targeting data, minimum value is 1 minute\n * Note: if not specified, default value will be used\n * @defaultvalue\n * - JavaScript SDK: `undefined` (no cleanup)\n * - React/React Native SDK: `undefined` (no cleanup)\n * - NodeJS SDK: `30`\n *\n * @param {string | undefined} domain - domain which cookie which Kameleoon visitor code belongs to. Note: parameter `domain` is deprecated and will be removed in the next major update, use `cookieDomain` instead\n * @param {string | undefined} cookieDomain - domain which cookie which Kameleoon visitor code belongs to\n * @param {string | undefined} networkDomain - custom domain to be used in place of all requests URL, domain format is `example.com`, if the format is incorrect, default Kameleoon domain will be used\n * @param {number | undefined} requestTimeout - timeout in _milliseconds_ for requests\n * @defaultvalue `10_000` (10 seconds)\n * */\nexport type SDKConfigurationType = {\n updateInterval?: number;\n environment?: Environment;\n targetingDataCleanupInterval?: number;\n requestTimeout?: number;\n domain?: string;\n networkDomain?: string;\n cookieDomain?: string;\n};\n\n/**\n * @param {string} siteCode - client's siteCode defined on Kameleoon platform\n * @param {Partial<SDKConfigurationType>} configuration - client's configuration\n * @param {InternalSDKConfigurationType} internalConfiguration - internal configuration for sdk core to be initialized with certain parameters to certain type of JavaScript SDK\n * */\nexport type SDKCoreParameters = {\n siteCode: string;\n configuration?: Partial<SDKConfigurationType>;\n internalConfiguration: InternalSDKConfigurationType;\n};\n\n/**\n * @param {SdkLanguageType} type - type of the SDK\n * @param {string} version - version of the package\n * */\nexport type ExternalPackageInfoType = {\n type: SdkLanguageType;\n version: string;\n};\n\n/**\n * @param {IExternalStorage | undefined} externalStorage - external file system storage implemented outside client initialization\n * @param {IExternalEventSourceConstructor | undefined} externalEventSource - constructor for building external event source implementation\n * @param {ExternalPackageInfoType} externalPackageInfo - external package info, used to get package version and name\n * @param {ConfigurationDataType} externalClientConfiguration - external fetched client configuration\n * @param {IExternalRequester} externalRequester - external requester , used to track or get data\n * @param {IVisitorCodeManager} externalVisitorCodeManager - external visitor code manager, used to get or generate visitor code\n * @param {number} targetingDataCleanupInterval - interval in *minutes* for cleaning up targeting data, minimum value is 1 minute\n * */\nexport type InternalSDKConfigurationType = {\n externalStorage: IExternalStorage;\n externalEventSource: IExternalEventSource;\n externalVisitorCodeManager: IVisitorCodeManager;\n externalPackageInfo: ExternalPackageInfoType;\n externalRequester: IExternalRequester;\n externalClientConfiguration?: ConfigurationDataType;\n};\n\n/**\n * @readonly\n * @enum {string} an Enum containing all possible variants of environment, passed as an argument to KameleoonClient `configuration`s `environment` field\n * */\nexport enum Environment {\n Production = 'production',\n Staging = 'staging',\n Development = 'development',\n}\n\n/**\n * @readonly\n * @enum {string} an Enum containing all possible variants of feature variable types\n * */\nexport enum VariableType {\n BOOLEAN = 'BOOLEAN',\n NUMBER = 'NUMBER',\n STRING = 'STRING',\n JSON = 'JSON',\n}\n\nexport type BooleanVariableType = {\n key: string;\n type: VariableType.BOOLEAN;\n value: boolean;\n};\n\nexport type NumberVariableType = {\n key: string;\n type: VariableType.NUMBER;\n value: number;\n};\n\nexport type StringVariableType = {\n key: string;\n type: VariableType.STRING;\n value: string;\n};\n\nexport type JSONVariableType = {\n key: string;\n type: VariableType.JSON;\n value: JSONType;\n};\n\n/**\n * @type `FeatureVariableResultType` - tuple of possible feature variable result types, each possible variation is an object containing `key`, `type` and `value` fields, `type` can be checked against `VariableType` enum, if the `type` is `VariableType.BOOLEAN` then the `value` type will be `boolean` and so on.\n * */\nexport type FeatureVariableResultType =\n | BooleanVariableType\n | NumberVariableType\n | StringVariableType\n | JSONVariableType;\n\n/**\n * @type `FeatureFlagVariableType` - tuple of possible feature variable result types, each possible variation is an object containing `type` and `value` fields, `type` can be checked against `VariableType` enum, if the `type` is `VariableType.BOOLEAN` then the `value` type will be `boolean` and so on.\n * */\nexport type FeatureFlagVariableType = Omit<FeatureVariableResultType, 'key'>;\n\n/**\n * @readonly\n * @enum {number} a helper Enum for getting milliseconds for a second/minute/hour/day/week/month.\n * Month is considered in average of 30 days\n * */\nexport enum Milliseconds {\n Second = 1000,\n Minute = 60 * Milliseconds.Second,\n Hour = 60 * Milliseconds.Minute,\n Day = 24 * Milliseconds.Hour,\n Week = 7 * Milliseconds.Day,\n Month = 30 * Milliseconds.Day,\n}\n\n/**\n * @param {string} visitorCode - unique visitor identifier, shouldn't exceed 255 characters\n * @param {number} goalId - an id of a goal to track\n * @param {number | undefined} revenue - an optional parameter for revenue, default value is `0`\n * @param {boolean | undefined} isUniqueIdentifier - an optional parameter for specifying if the visitorCode is a unique identifier, default value is `false`\n * */\nexport type TrackConversionParamsType = {\n visitorCode: string;\n goalId: number;\n revenue?: number;\n isUniqueIdentifier?: boolean;\n};\n\n/**\n * @param {string} visitorCode - unique visitor identifier, shouldn't exceed 255 characters\n * @param {boolean | undefined} shouldAddData - optional parameter for adding retrieved data to the storage like `addData` method does, default value is `true`\n * @param {VisitorDataFiltersType | undefined} filters - optional parameter for specifying the filters for which data should be retrieved from what visit, by default only current and latest previous visits' `customData` is retrieved\n * @param {boolean | undefined} isUniqueIdentifier - an optional parameter for specifying if the visitorCode is a unique identifier, default value is `false`\n * */\nexport type RemoteVisitorDataParamsType = {\n visitorCode: string;\n shouldAddData?: boolean;\n filters?: VisitorDataFiltersType;\n isUniqueIdentifier?: boolean;\n};\n\nexport type GetFeatureVariablesParamsType = {\n visitorCode: string;\n featureKey: string;\n variationKey: string;\n};\n\nexport type FeatureFlagType = {\n id: number;\n key: string;\n};\n\n/**\n * @type `KameleoonVariableType` - tuple of possible feature variable result types, each possible variation is an object containing `key`, `type` and `value` fields, `type` can be checked against `VariableType` enum, if the `type` is `VariableType.BOOLEAN` then the `value` type will be `boolean` and so on.\n * */\nexport type KameleoonVariableType = FeatureVariableResultType;\n\n/**\n * @type `KameleoonVariationType` - object containing information about the variation and its variables\n * @param {string} key - key of the variation\n * @param {number | null} id - id of the variation or `null` if the visitor hit default variation\n * @param {number | null} experimentId - id of the experiment or `null` if the visitor hit default variation\n * @param {KameleoonVariableType[]} variables - array of variables for the variation\n * */\nexport type KameleoonVariationType = {\n key: string;\n id: number | null;\n experimentId: number | null;\n variables: KameleoonVariableType[];\n};\n\n/**\n * @param {string} visitorCode - unique visitor identifier, shouldn't exceed 255 characters\n * @param {string} featureKey - key of the feature flag to look for, can be found on Kameleoon Platform\n * @param {string} variableKey - key of the variable to be found for a feature flag with provided `featureKey`, can be found on Kameleoon Platform\n * */\nexport type GetFeatureFlagVariableParamsType = {\n visitorCode: string;\n featureKey: string;\n variableKey: string;\n};\n\n/**\n * @param {string} visitorCode - unique visitor identification string, can't exceed 255 characters length\n * @param {number} customDataIndex - index of the custom data in the warehouse audience\n * @param {string | undefined} warehouseKey - unique key to identify the warehouse data (usually internal user ID)\n * If not specified, the `visitorCode` will be used as a `warehouseKey`\n * */\nexport type GetVisitorWarehouseAudienceParamsType = {\n visitorCode: string;\n customDataIndex: number;\n warehouseKey?: string;\n};\n\nexport type WarehouseAudienceType = {\n // --- Note ---\n // Using `unknown` type here because we don't care about the type of the value\n warehouseAudiences: Record<string, unknown>;\n};\n\nexport type TrackingCacheItemType = {\n [experimentId: number]: { variationId: number; expirationTime: number };\n};\n\nexport type SetDataCallbackParametersType = {\n visitorCode: string;\n maxAge: number;\n path: string;\n key: string;\n};\n\n/**\n * @param {string} visitorCode - unique visitor identifier, shouldn't exceed 255 characters\n * @param {boolean} consent - a value representing the legal consent status. - 'true' indicates the\n * visitor has given legal consent. - 'false' indicates the visitor has withdrawn or not\n * provided legal consent.\n * @param {(visitorCode: string) => void} setData - a callback to set a visitor code in cookie\n * */\nexport type SetUserConsentParametersType = {\n visitorCode: string;\n consent: boolean;\n setData: ({\n visitorCode,\n maxAge,\n path,\n }: SetDataCallbackParametersType) => void;\n};\n\n/**\n * @type `SimulateRequestDataType` a type of data provided to `simulateSuccessRequest` method depending on `RequestType`\n * */\nexport type SimulateRequestDataType = {\n [RequestType.Configuration]: ClientConfigurationDataType;\n [RequestType.RemoteData]: JSONType;\n [RequestType.Tracking]: null;\n};\n"],"mappings":"aAOA,IAAAA,UAAA,CAAAC,OAAA,gBAA8DC,MAAA,CAAAC,cAAA,CAAAC,OAAA,eAAAC,KAAA,MAAAD,OAAA,CAAAE,YAAA,CAAAF,OAAA,CAAAG,YAAA,CAAAH,OAAA,CAAAI,WAAA,WA6ElD,CAAAA,WAAW,CAAAJ,OAAA,CAAAI,WAAA,UAAXA,CAAW,QAAX,CAAAA,CAAW,CAAAC,UAAA,cAAXD,CAAW,CAAAE,OAAA,WAAXF,CAAW,CAAAG,WAAA,eAAXH,CAAW,MAUXF,YAAY,CAAAF,OAAA,CAAAE,YAAA,UAAZA,CAAY,QAAZ,CAAAA,CAAY,CAAAM,OAAA,WAAZN,CAAY,CAAAO,MAAA,UAAZP,CAAY,CAAAQ,MAAA,UAAZR,CAAY,CAAAS,IAAA,QAAZT,CAAY,MAkDZC,YAAY,CAAAH,OAAA,CAAAG,YAAA,UAAZA,CAAY,QAAZ,CAAAA,CAAY,CAAZA,CAAY,CAAAS,MAAA,gBAAZT,CAAY,CAAZA,CAAY,CAAAU,MAAA,CAEb,EAAE,CAAGV,CAAY,CAACS,MAAM,WAFvBT,CAAY,CAAZA,CAAY,CAAAW,IAAA,CAGf,EAAE,CAAGX,CAAY,CAACU,MAAM,SAHrBV,CAAY,CAAZA,CAAY,CAAAY,GAAA,CAIhB,EAAE,CAAGZ,CAAY,CAACW,IAAI,QAJlBX,CAAY,CAAZA,CAAY,CAAAa,IAAA,CAKf,CAAC,CAAGb,CAAY,CAACY,GAAG,SALjBZ,CAAY,CAAZA,CAAY,CAAAc,KAAA,CAMd,EAAE,CAAGd,CAAY,CAACY,GAAG,UANnBZ,CAAY"}
1
+ {"version":3,"file":"types.js","names":["_requester","require","Object","defineProperty","exports","value","VariableType","Milliseconds","Environment","Production","Staging","Development","BOOLEAN","NUMBER","STRING","JSON","Second","Minute","Hour","Day","Week","Month"],"sources":["../src/types.ts"],"sourcesContent":["import {\n ClientConfigurationDataType,\n ConfigurationDataType,\n JSONType,\n} from './clientConfiguration/types';\nimport { SdkLanguageType } from './constants';\nimport { IExternalEventSource } from './eventSource';\nimport { IExternalRequester, RequestType } from './requester';\nimport { IExternalStorage } from './storage';\nimport { IExternalPRNG, VisitorDataFiltersType } from './utilities';\nimport { IVisitorCodeManager } from './visitorCodeManager';\n\n/**\n * @param {number} updateInterval - update interval in _minutes_ for sdk configuration, minimum value is 1 minute\n * @defaultvalue 60\n *\n * @param {Environment} environment - feature flag environment\n * @defaultvalue Environment.Production\n *\n * @param {number | undefined} targetingDataCleanupInterval - interval in _minutes_ for cleaning up targeting data, minimum value is 1 minute\n * Note: if not specified, default value will be used\n * @defaultvalue\n * - JavaScript SDK: `undefined` (no cleanup)\n * - React/React Native SDK: `undefined` (no cleanup)\n * - NodeJS SDK: `30`\n *\n * @param {string | undefined} domain - domain which cookie which Kameleoon visitor code belongs to. Note: parameter `domain` is deprecated and will be removed in the next major update, use `cookieDomain` instead\n * @param {string | undefined} cookieDomain - domain which cookie which Kameleoon visitor code belongs to\n * @param {string | undefined} networkDomain - custom domain to be used in place of all requests URL, domain format is `example.com`, if the format is incorrect, default Kameleoon domain will be used\n * @param {number | undefined} requestTimeout - timeout in _milliseconds_ for requests\n * @defaultvalue `10_000` (10 seconds)\n * */\nexport type SDKConfigurationType = {\n updateInterval?: number;\n environment?: Environment;\n targetingDataCleanupInterval?: number;\n requestTimeout?: number;\n domain?: string;\n networkDomain?: string;\n cookieDomain?: string;\n};\n\n/**\n * @param {string} siteCode - client's siteCode defined on Kameleoon platform\n * @param {Partial<SDKConfigurationType>} configuration - client's configuration\n * @param {InternalSDKConfigurationType} internalConfiguration - internal configuration for sdk core to be initialized with certain parameters to certain type of JavaScript SDK\n * */\nexport type SDKCoreParameters = {\n siteCode: string;\n configuration?: Partial<SDKConfigurationType>;\n internalConfiguration: InternalSDKConfigurationType;\n};\n\n/**\n * @param {SdkLanguageType} type - type of the SDK\n * @param {string} version - version of the package\n * */\nexport type ExternalPackageInfoType = {\n type: SdkLanguageType;\n version: string;\n};\n\n/**\n * @param {ExternalPackageInfoType} packageInfo - external package info, used to get package version and name\n * @param {IExternalPRNG | undefined} prng - external PRNG implementation\n * */\nexport type InternalsType = {\n packageInfo: ExternalPackageInfoType;\n prng?: IExternalPRNG;\n};\n\n/**\n * @param {IExternalStorage | undefined} externalStorage - external file system storage implemented outside client initialization\n * @param {IExternalEventSourceConstructor | undefined} externalEventSource - constructor for building external event source implementation\n * @param {ExternalPackageInfoType} externalPackageInfo - external package info, used to get package version and name\n * @param {ConfigurationDataType} externalClientConfiguration - external fetched client configuration\n * Note: _Deprecated_ - to be removed in the next major update\n * @param {IExternalRequester} externalRequester - external requester , used to track or get data\n * @param {IVisitorCodeManager} externalVisitorCodeManager - external visitor code manager, used to get or generate visitor code\n * @param {number} targetingDataCleanupInterval - interval in *minutes* for cleaning up targeting data, minimum value is 1 minute\n * */\nexport type InternalSDKConfigurationType = {\n externalStorage: IExternalStorage;\n externalEventSource: IExternalEventSource;\n externalVisitorCodeManager: IVisitorCodeManager;\n externalPackageInfo: ExternalPackageInfoType;\n externalRequester: IExternalRequester;\n externalPRNG: IExternalPRNG;\n externalClientConfiguration?: ConfigurationDataType;\n};\n\n/**\n * @readonly\n * @enum {string} an Enum containing all possible variants of environment, passed as an argument to KameleoonClient `configuration`s `environment` field\n * */\nexport enum Environment {\n Production = 'production',\n Staging = 'staging',\n Development = 'development',\n}\n\n/**\n * @readonly\n * @enum {string} an Enum containing all possible variants of feature variable types\n * */\nexport enum VariableType {\n BOOLEAN = 'BOOLEAN',\n NUMBER = 'NUMBER',\n STRING = 'STRING',\n JSON = 'JSON',\n}\n\nexport type BooleanVariableType = {\n key: string;\n type: VariableType.BOOLEAN;\n value: boolean;\n};\n\nexport type NumberVariableType = {\n key: string;\n type: VariableType.NUMBER;\n value: number;\n};\n\nexport type StringVariableType = {\n key: string;\n type: VariableType.STRING;\n value: string;\n};\n\nexport type JSONVariableType = {\n key: string;\n type: VariableType.JSON;\n value: JSONType;\n};\n\n/**\n * @type `FeatureVariableResultType` - tuple of possible feature variable result types, each possible variation is an object containing `key`, `type` and `value` fields, `type` can be checked against `VariableType` enum, if the `type` is `VariableType.BOOLEAN` then the `value` type will be `boolean` and so on.\n * */\nexport type FeatureVariableResultType =\n | BooleanVariableType\n | NumberVariableType\n | StringVariableType\n | JSONVariableType;\n\n/**\n * @type `FeatureFlagVariableType` - tuple of possible feature variable result types, each possible variation is an object containing `type` and `value` fields, `type` can be checked against `VariableType` enum, if the `type` is `VariableType.BOOLEAN` then the `value` type will be `boolean` and so on.\n * */\nexport type FeatureFlagVariableType = Omit<FeatureVariableResultType, 'key'>;\n\n/**\n * @readonly\n * @enum {number} a helper Enum for getting milliseconds for a second/minute/hour/day/week/month.\n * Month is considered in average of 30 days\n * */\nexport enum Milliseconds {\n Second = 1000,\n Minute = 60 * Milliseconds.Second,\n Hour = 60 * Milliseconds.Minute,\n Day = 24 * Milliseconds.Hour,\n Week = 7 * Milliseconds.Day,\n Month = 30 * Milliseconds.Day,\n}\n\n/**\n * @param {string} visitorCode - unique visitor identifier, shouldn't exceed 255 characters\n * @param {number} goalId - an id of a goal to track\n * @param {number | undefined} revenue - an optional parameter for revenue, default value is `0`\n * @param {boolean | undefined} isUniqueIdentifier - an optional parameter for specifying if the visitorCode is a unique identifier, default value is `false`\n * */\nexport type TrackConversionParamsType = {\n visitorCode: string;\n goalId: number;\n revenue?: number;\n isUniqueIdentifier?: boolean;\n};\n\n/**\n * @param {string} visitorCode - unique visitor identifier, shouldn't exceed 255 characters\n * @param {boolean | undefined} shouldAddData - optional parameter for adding retrieved data to the storage like `addData` method does, default value is `true`\n * @param {VisitorDataFiltersType | undefined} filters - optional parameter for specifying the filters for which data should be retrieved from what visit, by default only current and latest previous visits' `customData` is retrieved\n * @param {boolean | undefined} isUniqueIdentifier - an optional parameter for specifying if the visitorCode is a unique identifier, default value is `false`\n * */\nexport type RemoteVisitorDataParamsType = {\n visitorCode: string;\n shouldAddData?: boolean;\n filters?: VisitorDataFiltersType;\n isUniqueIdentifier?: boolean;\n};\n\nexport type GetFeatureVariablesParamsType = {\n visitorCode: string;\n featureKey: string;\n variationKey: string;\n};\n\nexport type FeatureFlagType = {\n id: number;\n key: string;\n};\n\n/**\n * @type `KameleoonVariableType` - tuple of possible feature variable result types, each possible variation is an object containing `key`, `type` and `value` fields, `type` can be checked against `VariableType` enum, if the `type` is `VariableType.BOOLEAN` then the `value` type will be `boolean` and so on.\n * */\nexport type KameleoonVariableType = FeatureVariableResultType;\n\n/**\n * @type `KameleoonVariationType` - object containing information about the variation and its variables\n * @param {string} key - key of the variation\n * @param {number | null} id - id of the variation or `null` if the visitor hit default variation\n * @param {number | null} experimentId - id of the experiment or `null` if the visitor hit default variation\n * @param {KameleoonVariableType[]} variables - array of variables for the variation\n * */\nexport type KameleoonVariationType = {\n key: string;\n id: number | null;\n experimentId: number | null;\n variables: KameleoonVariableType[];\n};\n\n/**\n * @param {string} visitorCode - unique visitor identifier, shouldn't exceed 255 characters\n * @param {string} featureKey - key of the feature flag to look for, can be found on Kameleoon Platform\n * @param {string} variableKey - key of the variable to be found for a feature flag with provided `featureKey`, can be found on Kameleoon Platform\n * */\nexport type GetFeatureFlagVariableParamsType = {\n visitorCode: string;\n featureKey: string;\n variableKey: string;\n};\n\n/**\n * @param {string} visitorCode - unique visitor identification string, can't exceed 255 characters length\n * @param {number} customDataIndex - index of the custom data in the warehouse audience\n * @param {string | undefined} warehouseKey - unique key to identify the warehouse data (usually internal user ID)\n * If not specified, the `visitorCode` will be used as a `warehouseKey`\n * */\nexport type GetVisitorWarehouseAudienceParamsType = {\n visitorCode: string;\n customDataIndex: number;\n warehouseKey?: string;\n};\n\nexport type WarehouseAudienceType = {\n // --- Note ---\n // Using `unknown` type here because we don't care about the type of the value\n warehouseAudiences: Record<string, unknown>;\n};\n\nexport type TrackingCacheItemType = {\n [experimentId: number]: { variationId: number; expirationTime: number };\n};\n\nexport type SetDataCallbackParametersType = {\n visitorCode: string;\n maxAge: number;\n path: string;\n key: string;\n};\n\n/**\n * @param {string} visitorCode - unique visitor identifier, shouldn't exceed 255 characters\n * @param {boolean} consent - a value representing the legal consent status. - 'true' indicates the\n * visitor has given legal consent. - 'false' indicates the visitor has withdrawn or not\n * provided legal consent.\n * @param {(visitorCode: string) => void} setData - a callback to set a visitor code in cookie\n * */\nexport type SetUserConsentParametersType = {\n visitorCode: string;\n consent: boolean;\n setData: ({\n visitorCode,\n maxAge,\n path,\n }: SetDataCallbackParametersType) => void;\n};\n\n/**\n * @type `SimulateRequestDataType` a type of data provided to `simulateSuccessRequest` method depending on `RequestType`\n * */\nexport type SimulateRequestDataType = {\n [RequestType.Configuration]: ClientConfigurationDataType;\n [RequestType.RemoteData]: JSONType;\n [RequestType.Tracking]: null;\n};\n"],"mappings":"aAOA,IAAAA,UAAA,CAAAC,OAAA,gBAA8DC,MAAA,CAAAC,cAAA,CAAAC,OAAA,eAAAC,KAAA,MAAAD,OAAA,CAAAE,YAAA,CAAAF,OAAA,CAAAG,YAAA,CAAAH,OAAA,CAAAI,WAAA,WAwFlD,CAAAA,WAAW,CAAAJ,OAAA,CAAAI,WAAA,UAAXA,CAAW,QAAX,CAAAA,CAAW,CAAAC,UAAA,cAAXD,CAAW,CAAAE,OAAA,WAAXF,CAAW,CAAAG,WAAA,eAAXH,CAAW,MAUXF,YAAY,CAAAF,OAAA,CAAAE,YAAA,UAAZA,CAAY,QAAZ,CAAAA,CAAY,CAAAM,OAAA,WAAZN,CAAY,CAAAO,MAAA,UAAZP,CAAY,CAAAQ,MAAA,UAAZR,CAAY,CAAAS,IAAA,QAAZT,CAAY,MAkDZC,YAAY,CAAAH,OAAA,CAAAG,YAAA,UAAZA,CAAY,QAAZ,CAAAA,CAAY,CAAZA,CAAY,CAAAS,MAAA,gBAAZT,CAAY,CAAZA,CAAY,CAAAU,MAAA,CAEb,EAAE,CAAGV,CAAY,CAACS,MAAM,WAFvBT,CAAY,CAAZA,CAAY,CAAAW,IAAA,CAGf,EAAE,CAAGX,CAAY,CAACU,MAAM,SAHrBV,CAAY,CAAZA,CAAY,CAAAY,GAAA,CAIhB,EAAE,CAAGZ,CAAY,CAACW,IAAI,QAJlBX,CAAY,CAAZA,CAAY,CAAAa,IAAA,CAKf,CAAC,CAAGb,CAAY,CAACY,GAAG,SALjBZ,CAAY,CAAZA,CAAY,CAAAc,KAAA,CAMd,EAAE,CAAGd,CAAY,CAACY,GAAG,UANnBZ,CAAY"}
@@ -1,3 +1,3 @@
1
1
  export { Utilities } from './utilities';
2
2
  export { HEX_CHARACTERS } from './constants';
3
- export { VisitorDataFiltersType, TimeUnit } from './types';
3
+ export { VisitorDataFiltersType, TimeUnit, IExternalPRNG } from './types';
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"HEX_CHARACTERS",{enumerable:!0,get:function(){return _constants.HEX_CHARACTERS}}),Object.defineProperty(exports,"TimeUnit",{enumerable:!0,get:function(){return _types.TimeUnit}}),Object.defineProperty(exports,"Utilities",{enumerable:!0,get:function(){return _utilities.Utilities}}),Object.defineProperty(exports,"VisitorDataFiltersType",{enumerable:!0,get:function(){return _types.VisitorDataFiltersType}});var _utilities=require("./utilities"),_constants=require("./constants"),_types=require("./types");
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"HEX_CHARACTERS",{enumerable:!0,get:function(){return _constants.HEX_CHARACTERS}}),Object.defineProperty(exports,"IExternalPRNG",{enumerable:!0,get:function(){return _types.IExternalPRNG}}),Object.defineProperty(exports,"TimeUnit",{enumerable:!0,get:function(){return _types.TimeUnit}}),Object.defineProperty(exports,"Utilities",{enumerable:!0,get:function(){return _utilities.Utilities}}),Object.defineProperty(exports,"VisitorDataFiltersType",{enumerable:!0,get:function(){return _types.VisitorDataFiltersType}});var _utilities=require("./utilities"),_constants=require("./constants"),_types=require("./types");
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../src/utilities/index.ts"],"sourcesContent":["export { Utilities } from './utilities';\nexport { HEX_CHARACTERS } from './constants';\nexport { VisitorDataFiltersType, TimeUnit } from './types';\n"],"mappings":""}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/utilities/index.ts"],"sourcesContent":["export { Utilities } from './utilities';\nexport { HEX_CHARACTERS } from './constants';\nexport { VisitorDataFiltersType, TimeUnit, IExternalPRNG } from './types';\n"],"mappings":""}
@@ -143,3 +143,13 @@ export type VisitorDataFiltersType = {
143
143
  experiments?: boolean;
144
144
  kcs?: boolean;
145
145
  };
146
+ /**
147
+ * @interface `IExternalPRNG` - an interface for external PRNG (Pseudo-Random Number Generator) used to generate secure random numbers depending on the environment and platform
148
+ * */
149
+ export interface IExternalPRNG {
150
+ /**
151
+ * @method getRandomNumber - a method to generate a secure random number
152
+ * @returns {number} a secure random `number`, which must be a floating-point number between 0 and 1, similarly to `Math.random()`
153
+ * */
154
+ getRandomNumber(): number;
155
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","names":["TimeUnit","exports","Minute","Hour","Day","Week","Month","Order","Ascending","Descending"],"sources":["../../src/utilities/types.ts"],"sourcesContent":["import { CacheManager } from 'src/cacheManager';\nimport { ClientConfiguration } from 'src/clientConfiguration';\nimport { DataManager } from 'src/kameleoonData';\nimport {\n KameleoonDataType,\n KameleoonVisitorDataType,\n} from 'src/kameleoonData/types';\nimport { Requester } from 'src/requester';\nimport {\n GetVisitorDataResultType,\n TrackDataParamsType,\n TrackExperimentParamsType,\n} from 'src/requester/types';\nimport { IStorage, OfflineTracking } from 'src/storage/types';\nimport { SegmentType } from 'src/targeting';\nimport { ExternalPackageInfoType, TrackingCacheItemType } from 'src/types';\nimport {\n VariationConfiguration,\n FeatureFlagVariationType,\n} from 'src/variationConfiguration';\n\nexport type CheckTargetingParametersType = {\n segment: SegmentType | null;\n experimentId: number | null;\n visitorCode: string;\n packageInfo: ExternalPackageInfoType;\n targetingData?: KameleoonVisitorDataType;\n clientConfiguration: ClientConfiguration;\n variationConfiguration?: VariationConfiguration;\n dataManager: DataManager;\n};\n\nexport enum TimeUnit {\n Minute = 'MINUTE',\n Hour = 'HOUR',\n Day = 'DAY',\n Week = 'WEEK',\n Month = 'MONTH',\n}\n\nexport enum Order {\n Ascending = 'asc',\n Descending = 'desc',\n}\n\nexport type InsertInOrderedListParametersType = {\n list: number[];\n element: number;\n order: Order;\n};\n\nexport type ParseVisitorDataParametersType = {\n data: GetVisitorDataResultType;\n filters: VisitorDataFiltersType;\n visitorCode: string;\n dataManager: DataManager;\n variationConfiguration: VariationConfiguration;\n};\n\nexport type ParseVisitorDataResultType = {\n storageVisitorData: KameleoonDataType[];\n visitorData: KameleoonDataType[];\n visitsData?: KameleoonDataType;\n};\n\nexport type TrackRuleParametersType = {\n featureFlagVariation: FeatureFlagVariationType;\n dataManager: DataManager;\n visitorCode: string;\n requester: Requester;\n isConsentProvided: boolean;\n userAgent?: string;\n isOfflineModeOn?: boolean;\n offlineTrackingStorage: IStorage<OfflineTracking>;\n variationConfiguration: VariationConfiguration;\n};\n\nexport type ManageCacheParametersType = {\n cacheManager: CacheManager<TrackingCacheItemType>;\n visitorCode: string;\n experimentId: number;\n variationId: number;\n};\n\nexport type TrackDataParametersType = {\n visitorCode: string;\n dataManager: DataManager;\n requester: Requester;\n isConsentProvided: boolean;\n isOfflineModeOn?: boolean;\n offlineTrackingStorage: IStorage<OfflineTracking>;\n isMappingIdentifier?: boolean;\n};\n\nexport type TrackExperimentParametersType = {\n clientConfiguration: ClientConfiguration;\n visitorCode: string;\n requester: Requester;\n variationId: number;\n experimentId: number;\n isUnallocated: boolean;\n isOfflineModeOn?: boolean;\n offlineTrackingStorage: IStorage<OfflineTracking>;\n};\n\nexport type AddToOfflineTrackingParametersType = {\n item: TrackExperimentParamsType | TrackDataParamsType;\n isExperiment: boolean;\n storage: IStorage<OfflineTracking>;\n onSuccess?: () => void;\n};\n\nexport type SendOfflineTrackingParametersType = {\n storage: IStorage<OfflineTracking>;\n requester: Requester;\n};\n\nexport type DeleteFromOfflineTrackingParametersType = {\n timestamps: number[];\n storage: IStorage<OfflineTracking>;\n};\n\nexport type GetDataUrlParametersType = {\n visitorCode: string;\n dataManager: DataManager;\n isConsentProvided: boolean;\n};\n\nexport type GetVariationDataUrlParametersType = {\n visitorCode: string;\n isConsentProvided: boolean;\n variationConfiguration: VariationConfiguration;\n};\n\n/**\n * @param {number} previousVisitAmount - Number of previous visits to retrieve data from. Number between `1` and `25`\n * *Default*: `1`.\n * @param {number} currentVisit - If true, current visit data will be retrieved.\n * *Default*: `true`.\n * @param {boolean} customData - If true, custom data will be retrieved.\n * *Default*: `true`.\n * @param {boolean} pageViews - If true, page data will be retrieved.\n * *Default*: `false`.\n * @param {boolean} geolocation - If true, geolocation data will be retrieved.\n * *Default*: `false`.\n * @param {boolean} device - If true, device data will be retrieved.\n * *Default*: `false`.\n * @param {boolean} browser - If true, browser data will be retrieved.\n * *Default*: `false`.\n * @param {boolean} operatingSystem - If true, operating system data will be retrieved.\n * *Default*: `false`.\n * @param {boolean} conversions - If true, conversion data will be retrieved.\n * *Default*: `false`.\n * @param {boolean} experiments - If true, experiment data will be retrieved.\n * *Default*: `false`.\n * @param {boolean} kcs - If true, Kameleoon Conversion Score data will be retrieved.\n * *Default*: `false`.\n * */\nexport type VisitorDataFiltersType = {\n previousVisitAmount?: number;\n currentVisit?: boolean;\n pageViews?: boolean;\n geolocation?: boolean;\n device?: boolean;\n browser?: boolean;\n operatingSystem?: boolean;\n customData?: boolean;\n conversions?: boolean;\n experiments?: boolean;\n kcs?: boolean;\n};\n"],"mappings":"6GAgCY,CAAAA,QAAQ,CAAAC,OAAA,CAAAD,QAAA,UAARA,CAAQ,QAAR,CAAAA,CAAQ,CAAAE,MAAA,UAARF,CAAQ,CAAAG,IAAA,QAARH,CAAQ,CAAAI,GAAA,OAARJ,CAAQ,CAAAK,IAAA,QAARL,CAAQ,CAAAM,KAAA,SAARN,CAAQ,MAQRO,KAAK,CAAAN,OAAA,CAAAM,KAAA,UAALA,CAAK,QAAL,CAAAA,CAAK,CAAAC,SAAA,OAALD,CAAK,CAAAE,UAAA,QAALF,CAAK"}
1
+ {"version":3,"file":"types.js","names":["TimeUnit","exports","Minute","Hour","Day","Week","Month","Order","Ascending","Descending"],"sources":["../../src/utilities/types.ts"],"sourcesContent":["import { CacheManager } from 'src/cacheManager';\nimport { ClientConfiguration } from 'src/clientConfiguration';\nimport { DataManager } from 'src/kameleoonData';\nimport {\n KameleoonDataType,\n KameleoonVisitorDataType,\n} from 'src/kameleoonData/types';\nimport { Requester } from 'src/requester';\nimport {\n GetVisitorDataResultType,\n TrackDataParamsType,\n TrackExperimentParamsType,\n} from 'src/requester/types';\nimport { IStorage, OfflineTracking } from 'src/storage/types';\nimport { SegmentType } from 'src/targeting';\nimport { ExternalPackageInfoType, TrackingCacheItemType } from 'src/types';\nimport {\n VariationConfiguration,\n FeatureFlagVariationType,\n} from 'src/variationConfiguration';\n\nexport type CheckTargetingParametersType = {\n segment: SegmentType | null;\n experimentId: number | null;\n visitorCode: string;\n packageInfo: ExternalPackageInfoType;\n targetingData?: KameleoonVisitorDataType;\n clientConfiguration: ClientConfiguration;\n variationConfiguration?: VariationConfiguration;\n dataManager: DataManager;\n};\n\nexport enum TimeUnit {\n Minute = 'MINUTE',\n Hour = 'HOUR',\n Day = 'DAY',\n Week = 'WEEK',\n Month = 'MONTH',\n}\n\nexport enum Order {\n Ascending = 'asc',\n Descending = 'desc',\n}\n\nexport type InsertInOrderedListParametersType = {\n list: number[];\n element: number;\n order: Order;\n};\n\nexport type ParseVisitorDataParametersType = {\n data: GetVisitorDataResultType;\n filters: VisitorDataFiltersType;\n visitorCode: string;\n dataManager: DataManager;\n variationConfiguration: VariationConfiguration;\n};\n\nexport type ParseVisitorDataResultType = {\n storageVisitorData: KameleoonDataType[];\n visitorData: KameleoonDataType[];\n visitsData?: KameleoonDataType;\n};\n\nexport type TrackRuleParametersType = {\n featureFlagVariation: FeatureFlagVariationType;\n dataManager: DataManager;\n visitorCode: string;\n requester: Requester;\n isConsentProvided: boolean;\n userAgent?: string;\n isOfflineModeOn?: boolean;\n offlineTrackingStorage: IStorage<OfflineTracking>;\n variationConfiguration: VariationConfiguration;\n};\n\nexport type ManageCacheParametersType = {\n cacheManager: CacheManager<TrackingCacheItemType>;\n visitorCode: string;\n experimentId: number;\n variationId: number;\n};\n\nexport type TrackDataParametersType = {\n visitorCode: string;\n dataManager: DataManager;\n requester: Requester;\n isConsentProvided: boolean;\n isOfflineModeOn?: boolean;\n offlineTrackingStorage: IStorage<OfflineTracking>;\n isMappingIdentifier?: boolean;\n};\n\nexport type TrackExperimentParametersType = {\n clientConfiguration: ClientConfiguration;\n visitorCode: string;\n requester: Requester;\n variationId: number;\n experimentId: number;\n isUnallocated: boolean;\n isOfflineModeOn?: boolean;\n offlineTrackingStorage: IStorage<OfflineTracking>;\n};\n\nexport type AddToOfflineTrackingParametersType = {\n item: TrackExperimentParamsType | TrackDataParamsType;\n isExperiment: boolean;\n storage: IStorage<OfflineTracking>;\n onSuccess?: () => void;\n};\n\nexport type SendOfflineTrackingParametersType = {\n storage: IStorage<OfflineTracking>;\n requester: Requester;\n};\n\nexport type DeleteFromOfflineTrackingParametersType = {\n timestamps: number[];\n storage: IStorage<OfflineTracking>;\n};\n\nexport type GetDataUrlParametersType = {\n visitorCode: string;\n dataManager: DataManager;\n isConsentProvided: boolean;\n};\n\nexport type GetVariationDataUrlParametersType = {\n visitorCode: string;\n isConsentProvided: boolean;\n variationConfiguration: VariationConfiguration;\n};\n\n/**\n * @param {number} previousVisitAmount - Number of previous visits to retrieve data from. Number between `1` and `25`\n * *Default*: `1`.\n * @param {number} currentVisit - If true, current visit data will be retrieved.\n * *Default*: `true`.\n * @param {boolean} customData - If true, custom data will be retrieved.\n * *Default*: `true`.\n * @param {boolean} pageViews - If true, page data will be retrieved.\n * *Default*: `false`.\n * @param {boolean} geolocation - If true, geolocation data will be retrieved.\n * *Default*: `false`.\n * @param {boolean} device - If true, device data will be retrieved.\n * *Default*: `false`.\n * @param {boolean} browser - If true, browser data will be retrieved.\n * *Default*: `false`.\n * @param {boolean} operatingSystem - If true, operating system data will be retrieved.\n * *Default*: `false`.\n * @param {boolean} conversions - If true, conversion data will be retrieved.\n * *Default*: `false`.\n * @param {boolean} experiments - If true, experiment data will be retrieved.\n * *Default*: `false`.\n * @param {boolean} kcs - If true, Kameleoon Conversion Score data will be retrieved.\n * *Default*: `false`.\n * */\nexport type VisitorDataFiltersType = {\n previousVisitAmount?: number;\n currentVisit?: boolean;\n pageViews?: boolean;\n geolocation?: boolean;\n device?: boolean;\n browser?: boolean;\n operatingSystem?: boolean;\n customData?: boolean;\n conversions?: boolean;\n experiments?: boolean;\n kcs?: boolean;\n};\n\n/**\n * @interface `IExternalPRNG` - an interface for external PRNG (Pseudo-Random Number Generator) used to generate secure random numbers depending on the environment and platform\n * */\nexport interface IExternalPRNG {\n /**\n * @method getRandomNumber - a method to generate a secure random number\n * @returns {number} a secure random `number`, which must be a floating-point number between 0 and 1, similarly to `Math.random()`\n * */\n getRandomNumber(): number;\n}\n"],"mappings":"6GAgCY,CAAAA,QAAQ,CAAAC,OAAA,CAAAD,QAAA,UAARA,CAAQ,QAAR,CAAAA,CAAQ,CAAAE,MAAA,UAARF,CAAQ,CAAAG,IAAA,QAARH,CAAQ,CAAAI,GAAA,OAARJ,CAAQ,CAAAK,IAAA,QAARL,CAAQ,CAAAM,KAAA,SAARN,CAAQ,MAQRO,KAAK,CAAAN,OAAA,CAAAM,KAAA,UAALA,CAAK,QAAL,CAAAA,CAAK,CAAAC,SAAA,OAALD,CAAK,CAAAE,UAAA,QAALF,CAAK"}
@@ -5,8 +5,9 @@ import { FeatureVariableType } from '../clientConfiguration';
5
5
  import { CustomData, DataManager, KameleoonDataType } from '../kameleoonData';
6
6
  import { CacheManager } from '../cacheManager';
7
7
  import { VersionMatchType } from '../targeting';
8
- import { CheckTargetingParametersType, ManageCacheParametersType, TrackDataParametersType, TrackRuleParametersType, SendOfflineTrackingParametersType, ParseVisitorDataParametersType, InsertInOrderedListParametersType, TimeUnit, GetDataUrlParametersType, GetVariationDataUrlParametersType, ParseVisitorDataResultType } from './types';
8
+ import { CheckTargetingParametersType, ManageCacheParametersType, TrackDataParametersType, TrackRuleParametersType, SendOfflineTrackingParametersType, ParseVisitorDataParametersType, InsertInOrderedListParametersType, TimeUnit, GetDataUrlParametersType, GetVariationDataUrlParametersType, ParseVisitorDataResultType, IExternalPRNG } from './types';
9
9
  export declare class Utilities {
10
+ static prng: IExternalPRNG | undefined;
10
11
  static checkTargeting({ segment, visitorCode, targetingData, experimentId, variationConfiguration, clientConfiguration, packageInfo, dataManager, }: CheckTargetingParametersType): Result<boolean, KameleoonError>;
11
12
  static validateVisitorCode(visitorCode: string): Result<void, KameleoonError>;
12
13
  static getDataUrl({ visitorCode, dataManager, isConsentProvided, }: GetDataUrlParametersType): string;
@@ -1,2 +1,2 @@
1
- "use strict";const _excluded=["timestamp","isExperiment"];Object.defineProperty(exports,"__esModule",{value:!0}),exports.Utilities=void 0;var _tsRes=require("ts-res"),_kameleoonError=require("../kameleoonError"),_types=require("../types"),_kameleoonData=require("../kameleoonData"),_constants=require("../constants"),_requester=require("../requester"),_targeting=require("../targeting"),_visitProcessor=require("../kameleoonData/visitProcessor"),_constants2=require("./constants"),_types2=require("./types");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 ownKeys(a,b){var c=Object.keys(a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(a);b&&(d=d.filter(function(b){return Object.getOwnPropertyDescriptor(a,b).enumerable})),c.push.apply(c,d)}return c}function _objectSpread(a){for(var b,c=1;c<arguments.length;c++)b=null==arguments[c]?{}:arguments[c],c%2?ownKeys(Object(b),!0).forEach(function(c){_defineProperty(a,c,b[c])}):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(b)):ownKeys(Object(b)).forEach(function(c){Object.defineProperty(a,c,Object.getOwnPropertyDescriptor(b,c))});return a}function _defineProperty(a,b,c){return b=_toPropertyKey(b),b in a?Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!0}):a[b]=c,a}function _toPropertyKey(a){var b=_toPrimitive(a,"string");return"symbol"==typeof b?b:b+""}function _toPrimitive(a,b){if("object"!=typeof a||!a)return a;var c=a[Symbol.toPrimitive];if(void 0!==c){var d=c.call(a,b||"default");if("object"!=typeof d)return d;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===b?String:Number)(a)}class Utilities{static checkTargeting(a){let{segment:b,visitorCode:c,targetingData:d,experimentId:e,variationConfiguration:f,clientConfiguration:g,packageInfo:h,dataManager:i}=a;if(!b||!b.conditionsData.firstLevel.length)return(0,_tsRes.Ok)(!0);if(!f)return(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.Initialization));let j={};const k=f.getStoredVariations(c);k.ok&&(j=k.data);const l=i.getTree(b);let m,n,o;l.hasTargetingType(_targeting.TargetingType.SEGMENT)&&(m=i.trees,n=g.segments),l.hasTargetingType(_targeting.TargetingType.TARGET_FEATURE_FLAG)&&(o=g.ruleMap);const p=l.evaluate({variationData:j,sdkInfo:h,segments:n,ruleMap:o,trees:m,targetingData:d,experimentId:e,visitorCode:c});return p}static validateVisitorCode(a){return 0===a.length?(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.VisitorCodeEmpty)):a.length>_constants2.VISITOR_CODE_MAX_LENGTH?(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.VisitorCodeMaxLength)):(0,_tsRes.Ok)()}static getDataUrl(a){function b(a){if(!a.url)return;const b=a.data.type===_kameleoonData.KameleoonData.Conversion;if(e||b){const c=b?"":_requester.UrlParameter.Nonce+Utilities.getNonce();g.push(a.url+c+"\n")}}let{visitorCode:c,dataManager:d,isConsentProvided:e}=a;const f=d.getUnsentData(c),g=[];if(!f||!f.size)return"";for(const c of f.values())Array.isArray(c)?c.forEach(a=>b(a)):b(c);return g.join("")}static getVariationDataUrlAndSentExperimentIds(a){let{visitorCode:b,isConsentProvided:c,variationConfiguration:d}=a;const e=[],f=new Set,g=d.getUnsentData(b);g.ok&&g.data.length&&g.data.forEach(a=>{(a.isTargetedRule||c)&&(e.push(_requester.UrlEventType.Experiment+_requester.UrlParameter.Id+a.experimentId+_requester.UrlParameter.VariationId+a.variationId+_requester.UrlParameter.Nonce+Utilities.getNonce()+"\n"),f.add(a.experimentId+""))});const h=e.join(""),i=Array.from(f);return[h,i]}static async trackFeatureExperiment(a){let{featureFlagVariation:b,dataManager:c,visitorCode:d,requester:e,isOfflineModeOn:f,isConsentProvided:g,offlineTrackingStorage:h,variationConfiguration:i}=a;const{variationId:j,rule:k}=b,l=this.getUserAgent(d,c),m=this.getDataUrl({visitorCode:d,dataManager:c,isConsentProvided:g}),n=k?k.experimentId:0,[o,p]=this.getVariationDataUrlAndSentExperimentIds({visitorCode:d,isConsentProvided:g,variationConfiguration:i});if(!g&&!m&&!k)return;const q={visitorCode:d,dataUrl:m,variationDataUrl:o,experimentId:n,variationId:j||0,userAgent:l,isUnallocated:null===j},r=await e.trackExperiment(q);r.ok&&(g?c.clearUnsentData(d):c.clearUnsentDataByKey(d,_kameleoonData.KameleoonData.Conversion),p.forEach(a=>{i.markUnsentDataAsSent(d,a)})),!r.ok&&f&&this.addItemToOfflineTracking({item:q,storage:h,isExperiment:!0})}static convertTimeUnit(a,b){const c={[_types2.TimeUnit.Minute]:_types.Milliseconds.Minute,[_types2.TimeUnit.Hour]:_types.Milliseconds.Hour,[_types2.TimeUnit.Day]:_types.Milliseconds.Day,[_types2.TimeUnit.Week]:_types.Milliseconds.Week,[_types2.TimeUnit.Month]:_types.Milliseconds.Month};return a/c[b]}static parseFeatureVariable(a){const{key:b,type:c,value:d}=a;switch(c){case _types.VariableType.BOOLEAN:return(0,_tsRes.Ok)({key:b,type:c,value:!!d});case _types.VariableType.STRING:return(0,_tsRes.Ok)({key:b,type:c,value:d+""});case _types.VariableType.NUMBER:const e=+d;return Number.isNaN(e)?(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.NumberParse,d+"")):(0,_tsRes.Ok)({key:b,type:c,value:e});case _types.VariableType.JSON:try{const d=JSON.parse(a.value+"");return(0,_tsRes.Ok)({key:b,type:c,value:d})}catch(a){return(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.JSONParse,a))}default:(0,_kameleoonError.exhaustCheck)(c)}}static parseVisitorData(a){let{data:b,filters:c,visitorCode:d,dataManager:e,variationConfiguration:f}=a;const g=new _visitProcessor.VisitProcessor(c,e),{currentVisit:h,previousVisits:i,kcs:j}=b;let k=[];if(h&&k.push(h),i&&k.push(...i),!k.length)return{visitorData:[],storageVisitorData:[]};k.forEach(a=>{g.processVisit(a)}),g.processKcs(j),g.processMultipleDataTypes();const{visitorData:l,storageVisitorData:m,visitsData:n,experimentData:o}=g.data;return f.updateStoredVariations(d,o),{visitorData:l,storageVisitorData:m,visitsData:n}}static parseRegExp(a){if("/"===a[0]){const[_,b,c]=a.split("/");return new RegExp(b,c)}return new RegExp(a)}static getUserAgent(a,b){const c=b.getTargetingData(a);if(c){const a=c[_kameleoonData.KameleoonData.UserAgent];if(a)return a.value}}static isCustomData(a){return a.data.type===_kameleoonData.KameleoonData.CustomData}static insertInOrderedListMutably(a){let{list:b,element:c,order:d}=a;if(!b.includes(c)){const a=b.findIndex(a=>d===_types2.Order.Ascending?a>=c:a<=c);-1===a?b.push(c):b.splice(a,0,c)}}static updateCache(a){let{cacheManager:b,visitorCode:c,experimentId:d,variationId:e}=a;const f=b.getAliveItem(c),g=f?_objectSpread({},f):{};g[d]={variationId:e,expirationTime:Date.now()+_constants.CACHE_ITEM_LIFETIME*_types.Milliseconds.Second},b.add({key:c,data:g,lifetime:_constants.CACHE_ITEM_LIFETIME})}static getTrackingCode(a,b){let c="window.kameleoonQueue=window.kameleoonQueue||[];";const d=a.getAliveItem(b);if(!d)return c;const e={};return Object.entries(d).forEach(a=>{let[b,{variationId:d,expirationTime:f}]=a;f>Date.now()&&(c+="window.kameleoonQueue.push(['Experiments.assignVariation',".concat(b,",").concat(d,",true]);"),c+="window.kameleoonQueue.push(['Experiments.trigger',".concat(b,",true]);"),e[+b]={variationId:d,expirationTime:f})}),a.add({key:b,data:e,lifetime:_constants.CACHE_ITEM_LIFETIME}),c}static async trackData(a){let{visitorCode:b,dataManager:c,requester:d,isOfflineModeOn:e,offlineTrackingStorage:f,isConsentProvided:g,isMappingIdentifier:h}=a;const i=this.getDataUrl({visitorCode:b,dataManager:c,isConsentProvided:g});if(!g&&!i)return;const j=this.getUserAgent(b,c),k={visitorCode:b,body:i,userAgent:j,isMappingIdentifier:h},l=await d.trackData(k),m=()=>g?c.clearUnsentData(b):c.clearUnsentDataByKey(b,_kameleoonData.KameleoonData.Conversion);l.ok&&m(),!l.ok&&e&&this.addItemToOfflineTracking({item:k,storage:f,isExperiment:!1,onSuccess:m}),await this.sendOfflineTracking({requester:d,storage:f})}static getNonce(){let a="";for(let b=0;b<_constants2.NONCE_LENGTH;b++){const b=Math.floor(Math.random()*_constants2.NONCE_LENGTH);a+=_constants2.HEX_CHARACTERS.charAt(b)}return a}static compareSemVer(a){let{version:b,compareVersion:c,operator:d}=a;const e=this.validateVersion(b),f=this.validateVersion(c);if(!e.ok)return(0,_tsRes.Err)(e.error);if(!f.ok)return(0,_tsRes.Err)(f.error);const[g,h,i]=e.data,[j,k,l]=f.data,[m,n,o]=[g===j,h===k,i===l];switch(d){case _targeting.VersionMatchType.EQUAL:return(0,_tsRes.Ok)(m&&n&&o);case _targeting.VersionMatchType.GREATER:return(0,_tsRes.Ok)(g>j||m&&h>k||m&&n&&i>l);case _targeting.VersionMatchType.LOWER:return(0,_tsRes.Ok)(g<j||m&&h<k||m&&n&&i<l);default:(0,_kameleoonError.exhaustCheck)(d)}}static generateRandomString(a){const b="abcdefghijklmnopqrstuvwxyz0123456789",c=[];if(0>a)return"";for(let d=0;d<a;d++)c.push(b[Math.floor(Math.random()*b.length)]);return c.join("")}static async sendOfflineTracking(a){let{requester:b,storage:c}=a;const d=c.read();if(d.ok&&d.data.requestParameters){const{requestParameters:a}=d.data,e=[];for(const c of a){const{timestamp:a,isExperiment:d}=c,f=_objectWithoutProperties(c,_excluded);let g;g=d?await b.trackExperiment(f):await b.trackData(f),g.ok&&g.data&&e.push(a)}this.deleteFromOfflineTracking({storage:c,timestamps:e})}}static addItemToOfflineTracking(a){let{item:b,isExperiment:c,storage:d,onSuccess:e}=a;const f=d.read(),g=f.ok?f.data:{},{requestParameters:h}=g,i=_objectSpread(_objectSpread({},b),{},{timestamp:new Date().getTime(),isExperiment:c}),j=h?[...h,i]:[i],k=d.write({requestParameters:j});k.ok&&e&&e()}static deleteFromOfflineTracking(a){let{timestamps:b,storage:c}=a;const d=c.read();if(d.ok){const{requestParameters:a}=d.data,e=null===a||void 0===a?void 0:a.filter(a=>!b.includes(a.timestamp));c.write({requestParameters:e})}}static validateVersion(a){const b=a.split(".").map(a=>parseInt(a,10));for(;3>b.length;)b.push(0);return b.some(a=>isNaN(a))?(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.SemanticVersionParse,a)):(0,_tsRes.Ok)(b.slice(0,3))}}exports.Utilities=Utilities;
1
+ "use strict";const _excluded=["timestamp","isExperiment"];Object.defineProperty(exports,"__esModule",{value:!0}),exports.Utilities=void 0;var _tsRes=require("ts-res"),_kameleoonError=require("../kameleoonError"),_types=require("../types"),_kameleoonData=require("../kameleoonData"),_constants=require("../constants"),_requester=require("../requester"),_targeting=require("../targeting"),_visitProcessor=require("../kameleoonData/visitProcessor"),_constants2=require("./constants"),_types2=require("./types");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 ownKeys(a,b){var c=Object.keys(a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(a);b&&(d=d.filter(function(b){return Object.getOwnPropertyDescriptor(a,b).enumerable})),c.push.apply(c,d)}return c}function _objectSpread(a){for(var b,c=1;c<arguments.length;c++)b=null==arguments[c]?{}:arguments[c],c%2?ownKeys(Object(b),!0).forEach(function(c){_defineProperty(a,c,b[c])}):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(b)):ownKeys(Object(b)).forEach(function(c){Object.defineProperty(a,c,Object.getOwnPropertyDescriptor(b,c))});return a}function _defineProperty(a,b,c){return b=_toPropertyKey(b),b in a?Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!0}):a[b]=c,a}function _toPropertyKey(a){var b=_toPrimitive(a,"string");return"symbol"==typeof b?b:b+""}function _toPrimitive(a,b){if("object"!=typeof a||!a)return a;var c=a[Symbol.toPrimitive];if(void 0!==c){var d=c.call(a,b||"default");if("object"!=typeof d)return d;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===b?String:Number)(a)}class Utilities{static checkTargeting(a){let{segment:b,visitorCode:c,targetingData:d,experimentId:e,variationConfiguration:f,clientConfiguration:g,packageInfo:h,dataManager:i}=a;if(!b||!b.conditionsData.firstLevel.length)return(0,_tsRes.Ok)(!0);if(!f)return(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.Initialization));let j={};const k=f.getStoredVariations(c);k.ok&&(j=k.data);const l=i.getTree(b);let m,n,o;l.hasTargetingType(_targeting.TargetingType.SEGMENT)&&(m=i.trees,n=g.segments),l.hasTargetingType(_targeting.TargetingType.TARGET_FEATURE_FLAG)&&(o=g.ruleMap);const p=l.evaluate({variationData:j,sdkInfo:h,segments:n,ruleMap:o,trees:m,targetingData:d,experimentId:e,visitorCode:c});return p}static validateVisitorCode(a){return 0===a.length?(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.VisitorCodeEmpty)):a.length>_constants2.VISITOR_CODE_MAX_LENGTH?(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.VisitorCodeMaxLength)):(0,_tsRes.Ok)()}static getDataUrl(a){function b(a){if(!a.url)return;const b=a.data.type===_kameleoonData.KameleoonData.Conversion;if(e||b){const c=b?"":_requester.UrlParameter.Nonce+Utilities.getNonce();g.push(a.url+c+"\n")}}let{visitorCode:c,dataManager:d,isConsentProvided:e}=a;const f=d.getUnsentData(c),g=[];if(!f||!f.size)return"";for(const c of f.values())Array.isArray(c)?c.forEach(a=>b(a)):b(c);return g.join("")}static getVariationDataUrlAndSentExperimentIds(a){let{visitorCode:b,isConsentProvided:c,variationConfiguration:d}=a;const e=[],f=new Set,g=d.getUnsentData(b);g.ok&&g.data.length&&g.data.forEach(a=>{(a.isTargetedRule||c)&&(e.push(_requester.UrlEventType.Experiment+_requester.UrlParameter.Id+a.experimentId+_requester.UrlParameter.VariationId+a.variationId+_requester.UrlParameter.Nonce+Utilities.getNonce()+"\n"),f.add(a.experimentId+""))});const h=e.join(""),i=Array.from(f);return[h,i]}static async trackFeatureExperiment(a){let{featureFlagVariation:b,dataManager:c,visitorCode:d,requester:e,isOfflineModeOn:f,isConsentProvided:g,offlineTrackingStorage:h,variationConfiguration:i}=a;const{variationId:j,rule:k}=b,l=this.getUserAgent(d,c),m=this.getDataUrl({visitorCode:d,dataManager:c,isConsentProvided:g}),n=k?k.experimentId:0,[o,p]=this.getVariationDataUrlAndSentExperimentIds({visitorCode:d,isConsentProvided:g,variationConfiguration:i});if(!g&&!m&&!k)return;const q={visitorCode:d,dataUrl:m,variationDataUrl:o,experimentId:n,variationId:j||0,userAgent:l,isUnallocated:null===j},r=await e.trackExperiment(q);r.ok&&(g?c.clearUnsentData(d):c.clearUnsentDataByKey(d,_kameleoonData.KameleoonData.Conversion),p.forEach(a=>{i.markUnsentDataAsSent(d,a)})),!r.ok&&f&&this.addItemToOfflineTracking({item:q,storage:h,isExperiment:!0})}static convertTimeUnit(a,b){const c={[_types2.TimeUnit.Minute]:_types.Milliseconds.Minute,[_types2.TimeUnit.Hour]:_types.Milliseconds.Hour,[_types2.TimeUnit.Day]:_types.Milliseconds.Day,[_types2.TimeUnit.Week]:_types.Milliseconds.Week,[_types2.TimeUnit.Month]:_types.Milliseconds.Month};return a/c[b]}static parseFeatureVariable(a){const{key:b,type:c,value:d}=a;switch(c){case _types.VariableType.BOOLEAN:return(0,_tsRes.Ok)({key:b,type:c,value:!!d});case _types.VariableType.STRING:return(0,_tsRes.Ok)({key:b,type:c,value:d+""});case _types.VariableType.NUMBER:const e=+d;return Number.isNaN(e)?(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.NumberParse,d+"")):(0,_tsRes.Ok)({key:b,type:c,value:e});case _types.VariableType.JSON:try{const d=JSON.parse(a.value+"");return(0,_tsRes.Ok)({key:b,type:c,value:d})}catch(a){return(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.JSONParse,a))}default:(0,_kameleoonError.exhaustCheck)(c)}}static parseVisitorData(a){let{data:b,filters:c,visitorCode:d,dataManager:e,variationConfiguration:f}=a;const g=new _visitProcessor.VisitProcessor(c,e),{currentVisit:h,previousVisits:i,kcs:j}=b;let k=[];if(h&&k.push(h),i&&k.push(...i),!k.length)return{visitorData:[],storageVisitorData:[]};k.forEach(a=>{g.processVisit(a)}),g.processKcs(j),g.processMultipleDataTypes();const{visitorData:l,storageVisitorData:m,visitsData:n,experimentData:o}=g.data;return f.updateStoredVariations(d,o),{visitorData:l,storageVisitorData:m,visitsData:n}}static parseRegExp(a){if("/"===a[0]){const[_,b,c]=a.split("/");return new RegExp(b,c)}return new RegExp(a)}static getUserAgent(a,b){const c=b.getTargetingData(a);if(c){const a=c[_kameleoonData.KameleoonData.UserAgent];if(a)return a.value}}static isCustomData(a){return a.data.type===_kameleoonData.KameleoonData.CustomData}static insertInOrderedListMutably(a){let{list:b,element:c,order:d}=a;if(!b.includes(c)){const a=b.findIndex(a=>d===_types2.Order.Ascending?a>=c:a<=c);-1===a?b.push(c):b.splice(a,0,c)}}static updateCache(a){let{cacheManager:b,visitorCode:c,experimentId:d,variationId:e}=a;const f=b.getAliveItem(c),g=f?_objectSpread({},f):{};g[d]={variationId:e,expirationTime:Date.now()+_constants.CACHE_ITEM_LIFETIME*_types.Milliseconds.Second},b.add({key:c,data:g,lifetime:_constants.CACHE_ITEM_LIFETIME})}static getTrackingCode(a,b){let c="window.kameleoonQueue=window.kameleoonQueue||[];";const d=a.getAliveItem(b);if(!d)return c;const e={};return Object.entries(d).forEach(a=>{let[b,{variationId:d,expirationTime:f}]=a;f>Date.now()&&(c+="window.kameleoonQueue.push(['Experiments.assignVariation',".concat(b,",").concat(d,",true]);"),c+="window.kameleoonQueue.push(['Experiments.trigger',".concat(b,",true]);"),e[+b]={variationId:d,expirationTime:f})}),a.add({key:b,data:e,lifetime:_constants.CACHE_ITEM_LIFETIME}),c}static async trackData(a){let{visitorCode:b,dataManager:c,requester:d,isOfflineModeOn:e,offlineTrackingStorage:f,isConsentProvided:g,isMappingIdentifier:h}=a;const i=this.getDataUrl({visitorCode:b,dataManager:c,isConsentProvided:g});if(!g&&!i)return;const j=this.getUserAgent(b,c),k={visitorCode:b,body:i,userAgent:j,isMappingIdentifier:h},l=await d.trackData(k),m=()=>g?c.clearUnsentData(b):c.clearUnsentDataByKey(b,_kameleoonData.KameleoonData.Conversion);l.ok&&m(),!l.ok&&e&&this.addItemToOfflineTracking({item:k,storage:f,isExperiment:!1,onSuccess:m}),await this.sendOfflineTracking({requester:d,storage:f})}static getNonce(){let a="";for(let d=0;d<_constants2.NONCE_LENGTH;d++){var b,c;const d=null!==(b=null===(c=this.prng)||void 0===c?void 0:c.getRandomNumber())&&void 0!==b?b:Math.random(),e=Math.floor(d*_constants2.NONCE_LENGTH);a+=_constants2.HEX_CHARACTERS.charAt(e)}return a}static compareSemVer(a){let{version:b,compareVersion:c,operator:d}=a;const e=this.validateVersion(b),f=this.validateVersion(c);if(!e.ok)return(0,_tsRes.Err)(e.error);if(!f.ok)return(0,_tsRes.Err)(f.error);const[g,h,i]=e.data,[j,k,l]=f.data,[m,n,o]=[g===j,h===k,i===l];switch(d){case _targeting.VersionMatchType.EQUAL:return(0,_tsRes.Ok)(m&&n&&o);case _targeting.VersionMatchType.GREATER:return(0,_tsRes.Ok)(g>j||m&&h>k||m&&n&&i>l);case _targeting.VersionMatchType.LOWER:return(0,_tsRes.Ok)(g<j||m&&h<k||m&&n&&i<l);default:(0,_kameleoonError.exhaustCheck)(d)}}static generateRandomString(a){const b="abcdefghijklmnopqrstuvwxyz0123456789",c=[];if(0>a)return"";for(let d=0;d<a;d++)c.push(b[Math.floor(Math.random()*b.length)]);return c.join("")}static async sendOfflineTracking(a){let{requester:b,storage:c}=a;const d=c.read();if(d.ok&&d.data.requestParameters){const{requestParameters:a}=d.data,e=[];for(const c of a){const{timestamp:a,isExperiment:d}=c,f=_objectWithoutProperties(c,_excluded);let g;g=d?await b.trackExperiment(f):await b.trackData(f),g.ok&&g.data&&e.push(a)}this.deleteFromOfflineTracking({storage:c,timestamps:e})}}static addItemToOfflineTracking(a){let{item:b,isExperiment:c,storage:d,onSuccess:e}=a;const f=d.read(),g=f.ok?f.data:{},{requestParameters:h}=g,i=_objectSpread(_objectSpread({},b),{},{timestamp:new Date().getTime(),isExperiment:c}),j=h?[...h,i]:[i],k=d.write({requestParameters:j});k.ok&&e&&e()}static deleteFromOfflineTracking(a){let{timestamps:b,storage:c}=a;const d=c.read();if(d.ok){const{requestParameters:a}=d.data,e=null===a||void 0===a?void 0:a.filter(a=>!b.includes(a.timestamp));c.write({requestParameters:e})}}static validateVersion(a){const b=a.split(".").map(a=>parseInt(a,10));for(;3>b.length;)b.push(0);return b.some(a=>isNaN(a))?(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.SemanticVersionParse,a)):(0,_tsRes.Ok)(b.slice(0,3))}}exports.Utilities=Utilities,_defineProperty(Utilities,"prng",void 0);
2
2
  //# sourceMappingURL=utilities.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utilities.js","names":["Utilities","checkTargeting","a","segment","visitorCode","targetingData","experimentId","variationConfiguration","clientConfiguration","packageInfo","dataManager","conditionsData","firstLevel","length","Ok","Err","KameleoonError","KameleoonException","Initialization","variations","assignedVariationsResult","getStoredVariations","ok","data","targetingTree","getTree","trees","segments","ruleMap","hasTargetingType","TargetingType","SEGMENT","TARGET_FEATURE_FLAG","result","evaluate","variationData","sdkInfo","validateVisitorCode","VisitorCodeEmpty","VISITOR_CODE_MAX_LENGTH","VisitorCodeMaxLength","getDataUrl","updateUrl","url","shouldSendConversionData","type","KameleoonData","Conversion","isConsentProvided","nonce","UrlParameter","Nonce","getNonce","resultUrl","push","unsentData","getUnsentData","size","item","values","Array","isArray","forEach","arrayItem","join","getVariationDataUrlAndSentExperimentIds","variationDataUrlList","sentExperimentIds","Set","isTargetedRule","UrlEventType","Experiment","Id","VariationId","variationId","add","variationDataUrl","experimentIds","from","trackFeatureExperiment","featureFlagVariation","requester","isOfflineModeOn","offlineTrackingStorage","rule","userAgent","getUserAgent","dataUrl","parameters","isUnallocated","trackExperiment","clearUnsentData","clearUnsentDataByKey","markUnsentDataAsSent","addItemToOfflineTracking","storage","isExperiment","convertTimeUnit","time","timeUnit","timeMap","TimeUnit","Minute","Milliseconds","Hour","Day","Week","Month","parseFeatureVariable","variable","key","value","VariableType","BOOLEAN","STRING","NUMBER","numberValue","Number","isNaN","NumberParse","JSON","jsonValue","parse","err","JSONParse","exhaustCheck","parseVisitorData","filters","visitProcessor","VisitProcessor","currentVisit","previousVisits","kcs","visits","visitorData","storageVisitorData","visit","processVisit","processKcs","processMultipleDataTypes","visitsData","experimentData","updateStoredVariations","parseRegExp","_","expression","flags","split","RegExp","getTargetingData","userAgentData","UserAgent","isCustomData","dataItem","CustomData","insertInOrderedListMutably","list","element","order","includes","index","findIndex","Order","Ascending","splice","updateCache","cacheManager","cacheData","getAliveItem","newCacheData","_objectSpread","expirationTime","Date","now","CACHE_ITEM_LIFETIME","Second","lifetime","getTrackingCode","trackingCache","resultString","updatedCacheData","Object","entries","concat","trackData","isMappingIdentifier","body","cleanup","onSuccess","sendOfflineTracking","i","NONCE_LENGTH","randomIndex","Math","floor","random","HEX_CHARACTERS","charAt","compareSemVer","version","compareVersion","operator","versionResult","validateVersion","compareVersionResult","error","major","minor","patch","compareMajor","compareMinor","comparePatch","isMajorEqual","isMinorEqual","isPatchEqual","VersionMatchType","EQUAL","GREATER","LOWER","generateRandomString","characters","randomCharacterArray","readResult","read","requestParameters","successfulTimestamps","timestamp","params","_objectWithoutProperties","_excluded","deleteFromOfflineTracking","timestamps","newItem","getTime","newRequestParameters","writeResult","write","newParameters","filter","versionParts","map","x","parseInt","some","SemanticVersionParse","slice","exports"],"sources":["../../src/utilities/utilities.ts"],"sourcesContent":["import { Err, Ok, Result } from 'ts-res';\nimport {\n KameleoonError,\n KameleoonException,\n exhaustCheck,\n} from 'src/kameleoonError';\nimport {\n FeatureVariableResultType,\n Milliseconds,\n TrackingCacheItemType,\n VariableType,\n} from 'src/types';\nimport { FeatureVariableType, JSONType } from 'src/clientConfiguration';\nimport {\n CustomData,\n DataManager,\n KameleoonData,\n KameleoonDataType,\n} from 'src/kameleoonData';\nimport { CACHE_ITEM_LIFETIME } from 'src/constants';\nimport { CacheManager } from 'src/cacheManager';\nimport {\n TrackExperimentParamsType,\n TrackDataParamsType,\n VisitType,\n UrlParameter,\n UrlEventType,\n} from 'src/requester';\nimport { VersionMatchType, TargetingType } from 'src/targeting';\nimport { FeatureFlagVariationsType } from 'src/storage/types';\nimport { VisitProcessor } from 'src/kameleoonData/visitProcessor';\nimport {\n VISITOR_CODE_MAX_LENGTH,\n HEX_CHARACTERS,\n NONCE_LENGTH,\n} from './constants';\nimport {\n CheckTargetingParametersType,\n ManageCacheParametersType,\n TrackDataParametersType,\n TrackRuleParametersType,\n AddToOfflineTrackingParametersType,\n SendOfflineTrackingParametersType,\n DeleteFromOfflineTrackingParametersType,\n ParseVisitorDataParametersType,\n InsertInOrderedListParametersType,\n Order,\n TimeUnit,\n GetDataUrlParametersType,\n GetVariationDataUrlParametersType,\n ParseVisitorDataResultType,\n} from './types';\n\nexport class Utilities {\n static checkTargeting({\n segment,\n visitorCode,\n targetingData,\n experimentId,\n variationConfiguration,\n clientConfiguration,\n packageInfo,\n dataManager,\n }: CheckTargetingParametersType): Result<boolean, KameleoonError> {\n if (!segment || !segment.conditionsData.firstLevel.length) {\n return Ok(true);\n }\n\n if (!variationConfiguration) {\n return Err(new KameleoonError(KameleoonException.Initialization));\n }\n\n let variations: FeatureFlagVariationsType = {};\n\n const assignedVariationsResult =\n variationConfiguration.getStoredVariations(visitorCode);\n\n if (assignedVariationsResult.ok) {\n variations = assignedVariationsResult.data;\n }\n\n const targetingTree = dataManager.getTree(segment);\n\n let trees = undefined;\n let segments = undefined;\n let ruleMap = undefined;\n\n // --- Note ---\n // Only getting trees and segments targeting type\n if (targetingTree.hasTargetingType(TargetingType.SEGMENT)) {\n trees = dataManager.trees;\n segments = clientConfiguration.segments;\n }\n\n // --- Note ---\n // Only constructing rule map for targeting type\n if (targetingTree.hasTargetingType(TargetingType.TARGET_FEATURE_FLAG)) {\n ruleMap = clientConfiguration.ruleMap;\n }\n\n const result = targetingTree.evaluate({\n variationData: variations,\n sdkInfo: packageInfo,\n segments,\n ruleMap,\n trees,\n targetingData,\n experimentId,\n visitorCode,\n });\n\n return result;\n }\n\n static validateVisitorCode(\n visitorCode: string,\n ): Result<void, KameleoonError> {\n if (visitorCode.length === 0) {\n return Err(new KameleoonError(KameleoonException.VisitorCodeEmpty));\n }\n\n if (visitorCode.length > VISITOR_CODE_MAX_LENGTH) {\n return Err(new KameleoonError(KameleoonException.VisitorCodeMaxLength));\n }\n\n return Ok();\n }\n\n static getDataUrl({\n visitorCode,\n dataManager,\n isConsentProvided,\n }: GetDataUrlParametersType): string {\n const unsentData = dataManager.getUnsentData(visitorCode);\n const resultUrl: string[] = [];\n\n if (!unsentData || !unsentData.size) {\n return '';\n }\n\n function updateUrl(data: KameleoonDataType): void {\n if (!data.url) {\n return;\n }\n\n const shouldSendAllData = isConsentProvided;\n const shouldSendConversionData =\n data.data.type === KameleoonData.Conversion;\n\n if (shouldSendAllData || shouldSendConversionData) {\n const nonce = !shouldSendConversionData\n ? UrlParameter.Nonce + Utilities.getNonce()\n : '';\n resultUrl.push(data.url + nonce + '\\n');\n }\n }\n\n for (const item of unsentData.values()) {\n if (Array.isArray(item)) {\n item.forEach((arrayItem) => updateUrl(arrayItem));\n } else {\n updateUrl(item);\n }\n }\n\n return resultUrl.join('');\n }\n\n static getVariationDataUrlAndSentExperimentIds({\n visitorCode,\n isConsentProvided,\n variationConfiguration,\n }: GetVariationDataUrlParametersType): [string, string[]] {\n const variationDataUrlList: string[] = [];\n const sentExperimentIds = new Set<string>();\n const unsentData = variationConfiguration.getUnsentData(visitorCode);\n\n if (unsentData.ok && unsentData.data.length) {\n unsentData.data.forEach((item) => {\n if (item.isTargetedRule || isConsentProvided) {\n variationDataUrlList.push(\n UrlEventType.Experiment +\n UrlParameter.Id +\n item.experimentId +\n UrlParameter.VariationId +\n item.variationId +\n UrlParameter.Nonce +\n Utilities.getNonce() +\n '\\n',\n );\n\n sentExperimentIds.add(String(item.experimentId));\n }\n });\n }\n\n const variationDataUrl = variationDataUrlList.join('');\n const experimentIds = Array.from(sentExperimentIds);\n\n return [variationDataUrl, experimentIds];\n }\n\n static async trackFeatureExperiment({\n featureFlagVariation,\n dataManager,\n visitorCode,\n requester,\n isOfflineModeOn,\n isConsentProvided,\n offlineTrackingStorage,\n variationConfiguration,\n }: TrackRuleParametersType): Promise<void> {\n const { variationId, rule } = featureFlagVariation;\n\n const userAgent = this.getUserAgent(visitorCode, dataManager);\n\n const dataUrl = this.getDataUrl({\n visitorCode,\n dataManager,\n isConsentProvided,\n });\n\n const resultVariationId = variationId || 0;\n\n // --- Note ---\n // Experiment id is not needed for unallocated visitors\n // So we just use 0 as a fallback\n const experimentId = rule ? rule.experimentId : 0;\n\n const [variationDataUrl, sentExperimentIds] =\n this.getVariationDataUrlAndSentExperimentIds({\n visitorCode,\n isConsentProvided,\n variationConfiguration,\n });\n\n if (!isConsentProvided && !dataUrl && !rule) {\n return;\n }\n\n const isUnallocated = variationId === null;\n\n const parameters = {\n visitorCode,\n dataUrl,\n variationDataUrl,\n experimentId,\n variationId: resultVariationId,\n userAgent,\n isUnallocated,\n };\n\n const result = await requester.trackExperiment(parameters);\n\n if (result.ok) {\n if (!isConsentProvided) {\n dataManager.clearUnsentDataByKey(visitorCode, KameleoonData.Conversion);\n } else {\n dataManager.clearUnsentData(visitorCode);\n }\n\n sentExperimentIds.forEach((experimentId) => {\n variationConfiguration.markUnsentDataAsSent(visitorCode, experimentId);\n });\n }\n\n if (!result.ok && isOfflineModeOn) {\n this.addItemToOfflineTracking({\n item: parameters,\n storage: offlineTrackingStorage,\n isExperiment: true,\n });\n }\n }\n\n static convertTimeUnit(time: number, timeUnit: TimeUnit): number {\n const timeMap = {\n [TimeUnit.Minute]: Milliseconds.Minute,\n [TimeUnit.Hour]: Milliseconds.Hour,\n [TimeUnit.Day]: Milliseconds.Day,\n [TimeUnit.Week]: Milliseconds.Week,\n [TimeUnit.Month]: Milliseconds.Month,\n };\n\n return time / timeMap[timeUnit];\n }\n\n static parseFeatureVariable(\n variable: FeatureVariableType,\n ): Result<FeatureVariableResultType, KameleoonError> {\n const { key, type, value } = variable;\n\n switch (type) {\n case VariableType.BOOLEAN:\n return Ok({\n key,\n type,\n value: Boolean(value),\n });\n case VariableType.STRING:\n return Ok({\n key,\n type,\n value: String(value),\n });\n case VariableType.NUMBER:\n const numberValue = Number(value);\n\n if (Number.isNaN(numberValue)) {\n return Err(\n new KameleoonError(KameleoonException.NumberParse, String(value)),\n );\n }\n\n return Ok({\n key,\n type,\n value: numberValue,\n });\n case VariableType.JSON:\n try {\n const jsonValue: JSONType = JSON.parse(String(variable.value));\n\n return Ok({\n key,\n type,\n value: jsonValue,\n });\n } catch (err) {\n return Err(new KameleoonError(KameleoonException.JSONParse, err));\n }\n default:\n exhaustCheck(type);\n }\n }\n\n static parseVisitorData({\n data,\n filters,\n visitorCode,\n dataManager,\n variationConfiguration,\n }: ParseVisitorDataParametersType): ParseVisitorDataResultType {\n const visitProcessor = new VisitProcessor(filters, dataManager);\n const { currentVisit, previousVisits, kcs } = data;\n\n let visits: VisitType[] = [];\n\n if (currentVisit) {\n visits.push(currentVisit);\n }\n\n if (previousVisits) {\n visits.push(...previousVisits);\n }\n\n if (!visits.length) {\n return { visitorData: [], storageVisitorData: [] };\n }\n\n visits.forEach((visit) => {\n visitProcessor.processVisit(visit);\n });\n\n visitProcessor.processKcs(kcs);\n visitProcessor.processMultipleDataTypes();\n\n const { visitorData, storageVisitorData, visitsData, experimentData } =\n visitProcessor.data;\n\n variationConfiguration.updateStoredVariations(visitorCode, experimentData);\n\n return {\n visitorData,\n storageVisitorData,\n visitsData,\n };\n }\n\n static parseRegExp(value: string): RegExp {\n if (value[0] === '/') {\n const [_, expression, flags] = value.split('/');\n\n return new RegExp(expression, flags);\n }\n\n return new RegExp(value);\n }\n\n static getUserAgent(\n visitorCode: string,\n dataManager: DataManager,\n ): string | undefined {\n const targetingData = dataManager.getTargetingData(visitorCode);\n\n if (targetingData) {\n const userAgentData = targetingData[KameleoonData.UserAgent];\n\n if (userAgentData) {\n return userAgentData.value;\n }\n }\n\n return undefined;\n }\n\n static isCustomData(dataItem: KameleoonDataType): dataItem is CustomData {\n return dataItem.data.type === KameleoonData.CustomData;\n }\n\n /**\n * Insert element in ordered list, if element already exists in list, does nothing\n * @param list - list to insert element\n * @param element - element to insert\n * @param order - order of list\n */\n static insertInOrderedListMutably({\n list,\n element,\n order,\n }: InsertInOrderedListParametersType): void {\n if (list.includes(element)) {\n return;\n }\n\n const index = list.findIndex((item) =>\n order === Order.Ascending ? item >= element : item <= element,\n );\n\n if (index === -1) {\n list.push(element);\n } else {\n list.splice(index, 0, element);\n }\n }\n\n static updateCache({\n cacheManager,\n visitorCode,\n experimentId,\n variationId,\n }: ManageCacheParametersType): void {\n const cacheData = cacheManager.getAliveItem(visitorCode);\n\n const newCacheData = cacheData ? { ...cacheData } : {};\n\n newCacheData[experimentId] = {\n variationId,\n expirationTime: Date.now() + CACHE_ITEM_LIFETIME * Milliseconds.Second,\n };\n\n cacheManager.add({\n key: visitorCode,\n data: newCacheData,\n lifetime: CACHE_ITEM_LIFETIME,\n });\n }\n\n static getTrackingCode(\n trackingCache: CacheManager<TrackingCacheItemType>,\n visitorCode: string,\n ): string {\n let resultString = 'window.kameleoonQueue=window.kameleoonQueue||[];';\n\n const cacheData = trackingCache.getAliveItem(visitorCode);\n\n if (!cacheData) {\n return resultString;\n }\n\n const updatedCacheData: TrackingCacheItemType = {};\n\n Object.entries(cacheData).forEach(\n ([experimentId, { variationId, expirationTime }]) => {\n if (expirationTime > Date.now()) {\n resultString += `window.kameleoonQueue.push(['Experiments.assignVariation',${experimentId},${variationId},true]);`;\n resultString += `window.kameleoonQueue.push(['Experiments.trigger',${experimentId},true]);`;\n\n updatedCacheData[Number(experimentId)] = {\n variationId,\n expirationTime,\n };\n }\n },\n );\n\n // --- Note ---\n // Cache is updated with only alive experiments\n trackingCache.add({\n key: visitorCode,\n data: updatedCacheData,\n lifetime: CACHE_ITEM_LIFETIME,\n });\n\n return resultString;\n }\n\n static async trackData({\n visitorCode,\n dataManager,\n requester,\n isOfflineModeOn,\n offlineTrackingStorage,\n isConsentProvided,\n isMappingIdentifier,\n }: TrackDataParametersType): Promise<void> {\n const dataUrl = this.getDataUrl({\n visitorCode,\n dataManager,\n isConsentProvided,\n });\n\n if (!isConsentProvided && !dataUrl) {\n return;\n }\n\n const userAgent = this.getUserAgent(visitorCode, dataManager);\n\n const parameters: TrackDataParamsType = {\n visitorCode,\n body: dataUrl,\n userAgent,\n isMappingIdentifier,\n };\n\n const result = await requester.trackData(parameters);\n\n const cleanup = () =>\n isConsentProvided\n ? dataManager.clearUnsentData(visitorCode)\n : dataManager.clearUnsentDataByKey(\n visitorCode,\n KameleoonData.Conversion,\n );\n\n if (result.ok) {\n cleanup();\n }\n\n if (!result.ok && isOfflineModeOn) {\n this.addItemToOfflineTracking({\n item: parameters,\n storage: offlineTrackingStorage,\n isExperiment: false,\n onSuccess: cleanup,\n });\n }\n\n await this.sendOfflineTracking({\n requester,\n storage: offlineTrackingStorage,\n });\n }\n\n static getNonce(): string {\n let nonce: string = '';\n\n for (let i = 0; i < NONCE_LENGTH; i++) {\n const randomIndex = Math.floor(Math.random() * NONCE_LENGTH);\n nonce += HEX_CHARACTERS.charAt(randomIndex);\n }\n\n return nonce;\n }\n\n static compareSemVer({\n version,\n compareVersion,\n operator,\n }: {\n version: string;\n compareVersion: string;\n operator: VersionMatchType;\n }): Result<boolean, KameleoonError> {\n const versionResult = this.validateVersion(version);\n const compareVersionResult = this.validateVersion(compareVersion);\n\n if (!versionResult.ok) {\n return Err(versionResult.error);\n }\n\n if (!compareVersionResult.ok) {\n return Err(compareVersionResult.error);\n }\n\n const [major, minor, patch] = versionResult.data;\n const [compareMajor, compareMinor, comparePatch] =\n compareVersionResult.data;\n\n const [isMajorEqual, isMinorEqual, isPatchEqual] = [\n major === compareMajor,\n minor === compareMinor,\n patch === comparePatch,\n ];\n\n switch (operator) {\n case VersionMatchType.EQUAL:\n return Ok(isMajorEqual && isMinorEqual && isPatchEqual);\n case VersionMatchType.GREATER:\n return Ok(\n major > compareMajor ||\n (isMajorEqual && minor > compareMinor) ||\n (isMajorEqual && isMinorEqual && patch > comparePatch),\n );\n case VersionMatchType.LOWER:\n return Ok(\n major < compareMajor ||\n (isMajorEqual && minor < compareMinor) ||\n (isMajorEqual && isMinorEqual && patch < comparePatch),\n );\n default:\n exhaustCheck(operator);\n }\n }\n\n static generateRandomString(length: number): string {\n const characters = 'abcdefghijklmnopqrstuvwxyz0123456789';\n const randomCharacterArray: string[] = [];\n\n if (length < 0) {\n return '';\n }\n\n for (let i = 0; i < length; i++) {\n randomCharacterArray.push(\n characters[Math.floor(Math.random() * characters.length)],\n );\n }\n\n return randomCharacterArray.join('');\n }\n\n static async sendOfflineTracking({\n requester,\n storage,\n }: SendOfflineTrackingParametersType) {\n const readResult = storage.read();\n\n if (readResult.ok && readResult.data.requestParameters) {\n const { requestParameters } = readResult.data;\n const successfulTimestamps: number[] = [];\n\n // --- Note ---\n // `for..of` + `await` is used to make sure that failed requests are sent one by one\n // without risk of getting the same timestamp at the server, which might happen, for example,\n // with `.forEach` or `.map` starting requests in async callbacks at the same time\n for (const parameters of requestParameters) {\n const { timestamp, isExperiment, ...params } = parameters;\n let result: Result<boolean, void>;\n\n if (isExperiment) {\n result = await requester.trackExperiment(\n params as TrackExperimentParamsType,\n );\n } else {\n result = await requester.trackData(params as TrackDataParamsType);\n }\n\n result.ok && result.data && successfulTimestamps.push(timestamp);\n }\n\n this.deleteFromOfflineTracking({\n storage,\n timestamps: successfulTimestamps,\n });\n }\n }\n\n private static addItemToOfflineTracking({\n item,\n isExperiment,\n storage,\n onSuccess,\n }: AddToOfflineTrackingParametersType): void {\n const readResult = storage.read();\n\n const data = readResult.ok ? readResult.data : {};\n\n const { requestParameters } = data;\n\n const newItem = {\n ...item,\n timestamp: new Date().getTime(),\n isExperiment,\n };\n\n const newRequestParameters = requestParameters\n ? [...requestParameters, newItem]\n : [newItem];\n\n const writeResult = storage.write({\n requestParameters: newRequestParameters,\n });\n\n if (writeResult.ok && onSuccess) {\n onSuccess();\n }\n }\n\n private static deleteFromOfflineTracking({\n timestamps,\n storage,\n }: DeleteFromOfflineTrackingParametersType): void {\n const readResult = storage.read();\n\n if (readResult.ok) {\n const { requestParameters } = readResult.data;\n\n const newParameters = requestParameters?.filter(\n (item) => !timestamps.includes(item.timestamp),\n );\n\n storage.write({ requestParameters: newParameters });\n }\n }\n\n private static validateVersion(\n version: string,\n ): Result<[number, number, number], KameleoonError> {\n const versionParts = version.split('.').map((x) => parseInt(x, 10));\n\n while (versionParts.length < 3) {\n versionParts.push(0);\n }\n\n if (versionParts.some((item) => isNaN(item))) {\n return Err(\n new KameleoonError(KameleoonException.SemanticVersionParse, version),\n );\n }\n\n return Ok(versionParts.slice(0, 3) as [number, number, number]);\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"utilities.js","names":["Utilities","checkTargeting","a","segment","visitorCode","targetingData","experimentId","variationConfiguration","clientConfiguration","packageInfo","dataManager","conditionsData","firstLevel","length","Ok","Err","KameleoonError","KameleoonException","Initialization","variations","assignedVariationsResult","getStoredVariations","ok","data","targetingTree","getTree","trees","segments","ruleMap","hasTargetingType","TargetingType","SEGMENT","TARGET_FEATURE_FLAG","result","evaluate","variationData","sdkInfo","validateVisitorCode","VisitorCodeEmpty","VISITOR_CODE_MAX_LENGTH","VisitorCodeMaxLength","getDataUrl","updateUrl","url","shouldSendConversionData","type","KameleoonData","Conversion","isConsentProvided","nonce","UrlParameter","Nonce","getNonce","resultUrl","push","unsentData","getUnsentData","size","item","values","Array","isArray","forEach","arrayItem","join","getVariationDataUrlAndSentExperimentIds","variationDataUrlList","sentExperimentIds","Set","isTargetedRule","UrlEventType","Experiment","Id","VariationId","variationId","add","variationDataUrl","experimentIds","from","trackFeatureExperiment","featureFlagVariation","requester","isOfflineModeOn","offlineTrackingStorage","rule","userAgent","getUserAgent","dataUrl","parameters","isUnallocated","trackExperiment","clearUnsentData","clearUnsentDataByKey","markUnsentDataAsSent","addItemToOfflineTracking","storage","isExperiment","convertTimeUnit","time","timeUnit","timeMap","TimeUnit","Minute","Milliseconds","Hour","Day","Week","Month","parseFeatureVariable","variable","key","value","VariableType","BOOLEAN","STRING","NUMBER","numberValue","Number","isNaN","NumberParse","JSON","jsonValue","parse","err","JSONParse","exhaustCheck","parseVisitorData","filters","visitProcessor","VisitProcessor","currentVisit","previousVisits","kcs","visits","visitorData","storageVisitorData","visit","processVisit","processKcs","processMultipleDataTypes","visitsData","experimentData","updateStoredVariations","parseRegExp","_","expression","flags","split","RegExp","getTargetingData","userAgentData","UserAgent","isCustomData","dataItem","CustomData","insertInOrderedListMutably","list","element","order","includes","index","findIndex","Order","Ascending","splice","updateCache","cacheManager","cacheData","getAliveItem","newCacheData","_objectSpread","expirationTime","Date","now","CACHE_ITEM_LIFETIME","Second","lifetime","getTrackingCode","trackingCache","resultString","updatedCacheData","Object","entries","concat","trackData","isMappingIdentifier","body","cleanup","onSuccess","sendOfflineTracking","i","NONCE_LENGTH","b","c","randomNumber","prng","getRandomNumber","Math","random","randomIndex","floor","HEX_CHARACTERS","charAt","compareSemVer","version","compareVersion","operator","versionResult","validateVersion","compareVersionResult","error","major","minor","patch","compareMajor","compareMinor","comparePatch","isMajorEqual","isMinorEqual","isPatchEqual","VersionMatchType","EQUAL","GREATER","LOWER","generateRandomString","characters","randomCharacterArray","readResult","read","requestParameters","successfulTimestamps","timestamp","params","_objectWithoutProperties","_excluded","deleteFromOfflineTracking","timestamps","newItem","getTime","newRequestParameters","writeResult","write","newParameters","filter","versionParts","map","x","parseInt","some","SemanticVersionParse","slice","exports","_defineProperty"],"sources":["../../src/utilities/utilities.ts"],"sourcesContent":["import { Err, Ok, Result } from 'ts-res';\nimport {\n KameleoonError,\n KameleoonException,\n exhaustCheck,\n} from 'src/kameleoonError';\nimport {\n FeatureVariableResultType,\n Milliseconds,\n TrackingCacheItemType,\n VariableType,\n} from 'src/types';\nimport { FeatureVariableType, JSONType } from 'src/clientConfiguration';\nimport {\n CustomData,\n DataManager,\n KameleoonData,\n KameleoonDataType,\n} from 'src/kameleoonData';\nimport { CACHE_ITEM_LIFETIME } from 'src/constants';\nimport { CacheManager } from 'src/cacheManager';\nimport {\n TrackExperimentParamsType,\n TrackDataParamsType,\n VisitType,\n UrlParameter,\n UrlEventType,\n} from 'src/requester';\nimport { VersionMatchType, TargetingType } from 'src/targeting';\nimport { FeatureFlagVariationsType } from 'src/storage/types';\nimport { VisitProcessor } from 'src/kameleoonData/visitProcessor';\nimport {\n VISITOR_CODE_MAX_LENGTH,\n HEX_CHARACTERS,\n NONCE_LENGTH,\n} from './constants';\nimport {\n CheckTargetingParametersType,\n ManageCacheParametersType,\n TrackDataParametersType,\n TrackRuleParametersType,\n AddToOfflineTrackingParametersType,\n SendOfflineTrackingParametersType,\n DeleteFromOfflineTrackingParametersType,\n ParseVisitorDataParametersType,\n InsertInOrderedListParametersType,\n Order,\n TimeUnit,\n GetDataUrlParametersType,\n GetVariationDataUrlParametersType,\n ParseVisitorDataResultType,\n IExternalPRNG,\n} from './types';\n\nexport class Utilities {\n static prng: IExternalPRNG | undefined;\n\n static checkTargeting({\n segment,\n visitorCode,\n targetingData,\n experimentId,\n variationConfiguration,\n clientConfiguration,\n packageInfo,\n dataManager,\n }: CheckTargetingParametersType): Result<boolean, KameleoonError> {\n if (!segment || !segment.conditionsData.firstLevel.length) {\n return Ok(true);\n }\n\n if (!variationConfiguration) {\n return Err(new KameleoonError(KameleoonException.Initialization));\n }\n\n let variations: FeatureFlagVariationsType = {};\n\n const assignedVariationsResult =\n variationConfiguration.getStoredVariations(visitorCode);\n\n if (assignedVariationsResult.ok) {\n variations = assignedVariationsResult.data;\n }\n\n const targetingTree = dataManager.getTree(segment);\n\n let trees = undefined;\n let segments = undefined;\n let ruleMap = undefined;\n\n // --- Note ---\n // Only getting trees and segments targeting type\n if (targetingTree.hasTargetingType(TargetingType.SEGMENT)) {\n trees = dataManager.trees;\n segments = clientConfiguration.segments;\n }\n\n // --- Note ---\n // Only constructing rule map for targeting type\n if (targetingTree.hasTargetingType(TargetingType.TARGET_FEATURE_FLAG)) {\n ruleMap = clientConfiguration.ruleMap;\n }\n\n const result = targetingTree.evaluate({\n variationData: variations,\n sdkInfo: packageInfo,\n segments,\n ruleMap,\n trees,\n targetingData,\n experimentId,\n visitorCode,\n });\n\n return result;\n }\n\n static validateVisitorCode(\n visitorCode: string,\n ): Result<void, KameleoonError> {\n if (visitorCode.length === 0) {\n return Err(new KameleoonError(KameleoonException.VisitorCodeEmpty));\n }\n\n if (visitorCode.length > VISITOR_CODE_MAX_LENGTH) {\n return Err(new KameleoonError(KameleoonException.VisitorCodeMaxLength));\n }\n\n return Ok();\n }\n\n static getDataUrl({\n visitorCode,\n dataManager,\n isConsentProvided,\n }: GetDataUrlParametersType): string {\n const unsentData = dataManager.getUnsentData(visitorCode);\n const resultUrl: string[] = [];\n\n if (!unsentData || !unsentData.size) {\n return '';\n }\n\n function updateUrl(data: KameleoonDataType): void {\n if (!data.url) {\n return;\n }\n\n const shouldSendAllData = isConsentProvided;\n const shouldSendConversionData =\n data.data.type === KameleoonData.Conversion;\n\n if (shouldSendAllData || shouldSendConversionData) {\n const nonce = !shouldSendConversionData\n ? UrlParameter.Nonce + Utilities.getNonce()\n : '';\n resultUrl.push(data.url + nonce + '\\n');\n }\n }\n\n for (const item of unsentData.values()) {\n if (Array.isArray(item)) {\n item.forEach((arrayItem) => updateUrl(arrayItem));\n } else {\n updateUrl(item);\n }\n }\n\n return resultUrl.join('');\n }\n\n static getVariationDataUrlAndSentExperimentIds({\n visitorCode,\n isConsentProvided,\n variationConfiguration,\n }: GetVariationDataUrlParametersType): [string, string[]] {\n const variationDataUrlList: string[] = [];\n const sentExperimentIds = new Set<string>();\n const unsentData = variationConfiguration.getUnsentData(visitorCode);\n\n if (unsentData.ok && unsentData.data.length) {\n unsentData.data.forEach((item) => {\n if (item.isTargetedRule || isConsentProvided) {\n variationDataUrlList.push(\n UrlEventType.Experiment +\n UrlParameter.Id +\n item.experimentId +\n UrlParameter.VariationId +\n item.variationId +\n UrlParameter.Nonce +\n Utilities.getNonce() +\n '\\n',\n );\n\n sentExperimentIds.add(String(item.experimentId));\n }\n });\n }\n\n const variationDataUrl = variationDataUrlList.join('');\n const experimentIds = Array.from(sentExperimentIds);\n\n return [variationDataUrl, experimentIds];\n }\n\n static async trackFeatureExperiment({\n featureFlagVariation,\n dataManager,\n visitorCode,\n requester,\n isOfflineModeOn,\n isConsentProvided,\n offlineTrackingStorage,\n variationConfiguration,\n }: TrackRuleParametersType): Promise<void> {\n const { variationId, rule } = featureFlagVariation;\n\n const userAgent = this.getUserAgent(visitorCode, dataManager);\n\n const dataUrl = this.getDataUrl({\n visitorCode,\n dataManager,\n isConsentProvided,\n });\n\n const resultVariationId = variationId || 0;\n\n // --- Note ---\n // Experiment id is not needed for unallocated visitors\n // So we just use 0 as a fallback\n const experimentId = rule ? rule.experimentId : 0;\n\n const [variationDataUrl, sentExperimentIds] =\n this.getVariationDataUrlAndSentExperimentIds({\n visitorCode,\n isConsentProvided,\n variationConfiguration,\n });\n\n if (!isConsentProvided && !dataUrl && !rule) {\n return;\n }\n\n const isUnallocated = variationId === null;\n\n const parameters = {\n visitorCode,\n dataUrl,\n variationDataUrl,\n experimentId,\n variationId: resultVariationId,\n userAgent,\n isUnallocated,\n };\n\n const result = await requester.trackExperiment(parameters);\n\n if (result.ok) {\n if (!isConsentProvided) {\n dataManager.clearUnsentDataByKey(visitorCode, KameleoonData.Conversion);\n } else {\n dataManager.clearUnsentData(visitorCode);\n }\n\n sentExperimentIds.forEach((experimentId) => {\n variationConfiguration.markUnsentDataAsSent(visitorCode, experimentId);\n });\n }\n\n if (!result.ok && isOfflineModeOn) {\n this.addItemToOfflineTracking({\n item: parameters,\n storage: offlineTrackingStorage,\n isExperiment: true,\n });\n }\n }\n\n static convertTimeUnit(time: number, timeUnit: TimeUnit): number {\n const timeMap = {\n [TimeUnit.Minute]: Milliseconds.Minute,\n [TimeUnit.Hour]: Milliseconds.Hour,\n [TimeUnit.Day]: Milliseconds.Day,\n [TimeUnit.Week]: Milliseconds.Week,\n [TimeUnit.Month]: Milliseconds.Month,\n };\n\n return time / timeMap[timeUnit];\n }\n\n static parseFeatureVariable(\n variable: FeatureVariableType,\n ): Result<FeatureVariableResultType, KameleoonError> {\n const { key, type, value } = variable;\n\n switch (type) {\n case VariableType.BOOLEAN:\n return Ok({\n key,\n type,\n value: Boolean(value),\n });\n case VariableType.STRING:\n return Ok({\n key,\n type,\n value: String(value),\n });\n case VariableType.NUMBER:\n const numberValue = Number(value);\n\n if (Number.isNaN(numberValue)) {\n return Err(\n new KameleoonError(KameleoonException.NumberParse, String(value)),\n );\n }\n\n return Ok({\n key,\n type,\n value: numberValue,\n });\n case VariableType.JSON:\n try {\n const jsonValue: JSONType = JSON.parse(String(variable.value));\n\n return Ok({\n key,\n type,\n value: jsonValue,\n });\n } catch (err) {\n return Err(new KameleoonError(KameleoonException.JSONParse, err));\n }\n default:\n exhaustCheck(type);\n }\n }\n\n static parseVisitorData({\n data,\n filters,\n visitorCode,\n dataManager,\n variationConfiguration,\n }: ParseVisitorDataParametersType): ParseVisitorDataResultType {\n const visitProcessor = new VisitProcessor(filters, dataManager);\n const { currentVisit, previousVisits, kcs } = data;\n\n let visits: VisitType[] = [];\n\n if (currentVisit) {\n visits.push(currentVisit);\n }\n\n if (previousVisits) {\n visits.push(...previousVisits);\n }\n\n if (!visits.length) {\n return { visitorData: [], storageVisitorData: [] };\n }\n\n visits.forEach((visit) => {\n visitProcessor.processVisit(visit);\n });\n\n visitProcessor.processKcs(kcs);\n visitProcessor.processMultipleDataTypes();\n\n const { visitorData, storageVisitorData, visitsData, experimentData } =\n visitProcessor.data;\n\n variationConfiguration.updateStoredVariations(visitorCode, experimentData);\n\n return {\n visitorData,\n storageVisitorData,\n visitsData,\n };\n }\n\n static parseRegExp(value: string): RegExp {\n if (value[0] === '/') {\n const [_, expression, flags] = value.split('/');\n\n return new RegExp(expression, flags);\n }\n\n return new RegExp(value);\n }\n\n static getUserAgent(\n visitorCode: string,\n dataManager: DataManager,\n ): string | undefined {\n const targetingData = dataManager.getTargetingData(visitorCode);\n\n if (targetingData) {\n const userAgentData = targetingData[KameleoonData.UserAgent];\n\n if (userAgentData) {\n return userAgentData.value;\n }\n }\n\n return undefined;\n }\n\n static isCustomData(dataItem: KameleoonDataType): dataItem is CustomData {\n return dataItem.data.type === KameleoonData.CustomData;\n }\n\n /**\n * Insert element in ordered list, if element already exists in list, does nothing\n * @param list - list to insert element\n * @param element - element to insert\n * @param order - order of list\n */\n static insertInOrderedListMutably({\n list,\n element,\n order,\n }: InsertInOrderedListParametersType): void {\n if (list.includes(element)) {\n return;\n }\n\n const index = list.findIndex((item) =>\n order === Order.Ascending ? item >= element : item <= element,\n );\n\n if (index === -1) {\n list.push(element);\n } else {\n list.splice(index, 0, element);\n }\n }\n\n static updateCache({\n cacheManager,\n visitorCode,\n experimentId,\n variationId,\n }: ManageCacheParametersType): void {\n const cacheData = cacheManager.getAliveItem(visitorCode);\n\n const newCacheData = cacheData ? { ...cacheData } : {};\n\n newCacheData[experimentId] = {\n variationId,\n expirationTime: Date.now() + CACHE_ITEM_LIFETIME * Milliseconds.Second,\n };\n\n cacheManager.add({\n key: visitorCode,\n data: newCacheData,\n lifetime: CACHE_ITEM_LIFETIME,\n });\n }\n\n static getTrackingCode(\n trackingCache: CacheManager<TrackingCacheItemType>,\n visitorCode: string,\n ): string {\n let resultString = 'window.kameleoonQueue=window.kameleoonQueue||[];';\n\n const cacheData = trackingCache.getAliveItem(visitorCode);\n\n if (!cacheData) {\n return resultString;\n }\n\n const updatedCacheData: TrackingCacheItemType = {};\n\n Object.entries(cacheData).forEach(\n ([experimentId, { variationId, expirationTime }]) => {\n if (expirationTime > Date.now()) {\n resultString += `window.kameleoonQueue.push(['Experiments.assignVariation',${experimentId},${variationId},true]);`;\n resultString += `window.kameleoonQueue.push(['Experiments.trigger',${experimentId},true]);`;\n\n updatedCacheData[Number(experimentId)] = {\n variationId,\n expirationTime,\n };\n }\n },\n );\n\n // --- Note ---\n // Cache is updated with only alive experiments\n trackingCache.add({\n key: visitorCode,\n data: updatedCacheData,\n lifetime: CACHE_ITEM_LIFETIME,\n });\n\n return resultString;\n }\n\n static async trackData({\n visitorCode,\n dataManager,\n requester,\n isOfflineModeOn,\n offlineTrackingStorage,\n isConsentProvided,\n isMappingIdentifier,\n }: TrackDataParametersType): Promise<void> {\n const dataUrl = this.getDataUrl({\n visitorCode,\n dataManager,\n isConsentProvided,\n });\n\n if (!isConsentProvided && !dataUrl) {\n return;\n }\n\n const userAgent = this.getUserAgent(visitorCode, dataManager);\n\n const parameters: TrackDataParamsType = {\n visitorCode,\n body: dataUrl,\n userAgent,\n isMappingIdentifier,\n };\n\n const result = await requester.trackData(parameters);\n\n const cleanup = () =>\n isConsentProvided\n ? dataManager.clearUnsentData(visitorCode)\n : dataManager.clearUnsentDataByKey(\n visitorCode,\n KameleoonData.Conversion,\n );\n\n if (result.ok) {\n cleanup();\n }\n\n if (!result.ok && isOfflineModeOn) {\n this.addItemToOfflineTracking({\n item: parameters,\n storage: offlineTrackingStorage,\n isExperiment: false,\n onSuccess: cleanup,\n });\n }\n\n await this.sendOfflineTracking({\n requester,\n storage: offlineTrackingStorage,\n });\n }\n\n static getNonce(): string {\n let nonce: string = '';\n\n for (let i = 0; i < NONCE_LENGTH; i++) {\n const randomNumber = this.prng?.getRandomNumber() ?? Math.random();\n const randomIndex = Math.floor(randomNumber * NONCE_LENGTH);\n nonce += HEX_CHARACTERS.charAt(randomIndex);\n }\n\n return nonce;\n }\n\n static compareSemVer({\n version,\n compareVersion,\n operator,\n }: {\n version: string;\n compareVersion: string;\n operator: VersionMatchType;\n }): Result<boolean, KameleoonError> {\n const versionResult = this.validateVersion(version);\n const compareVersionResult = this.validateVersion(compareVersion);\n\n if (!versionResult.ok) {\n return Err(versionResult.error);\n }\n\n if (!compareVersionResult.ok) {\n return Err(compareVersionResult.error);\n }\n\n const [major, minor, patch] = versionResult.data;\n const [compareMajor, compareMinor, comparePatch] =\n compareVersionResult.data;\n\n const [isMajorEqual, isMinorEqual, isPatchEqual] = [\n major === compareMajor,\n minor === compareMinor,\n patch === comparePatch,\n ];\n\n switch (operator) {\n case VersionMatchType.EQUAL:\n return Ok(isMajorEqual && isMinorEqual && isPatchEqual);\n case VersionMatchType.GREATER:\n return Ok(\n major > compareMajor ||\n (isMajorEqual && minor > compareMinor) ||\n (isMajorEqual && isMinorEqual && patch > comparePatch),\n );\n case VersionMatchType.LOWER:\n return Ok(\n major < compareMajor ||\n (isMajorEqual && minor < compareMinor) ||\n (isMajorEqual && isMinorEqual && patch < comparePatch),\n );\n default:\n exhaustCheck(operator);\n }\n }\n\n static generateRandomString(length: number): string {\n const characters = 'abcdefghijklmnopqrstuvwxyz0123456789';\n const randomCharacterArray: string[] = [];\n\n if (length < 0) {\n return '';\n }\n\n for (let i = 0; i < length; i++) {\n randomCharacterArray.push(\n characters[Math.floor(Math.random() * characters.length)],\n );\n }\n\n return randomCharacterArray.join('');\n }\n\n static async sendOfflineTracking({\n requester,\n storage,\n }: SendOfflineTrackingParametersType) {\n const readResult = storage.read();\n\n if (readResult.ok && readResult.data.requestParameters) {\n const { requestParameters } = readResult.data;\n const successfulTimestamps: number[] = [];\n\n // --- Note ---\n // `for..of` + `await` is used to make sure that failed requests are sent one by one\n // without risk of getting the same timestamp at the server, which might happen, for example,\n // with `.forEach` or `.map` starting requests in async callbacks at the same time\n for (const parameters of requestParameters) {\n const { timestamp, isExperiment, ...params } = parameters;\n let result: Result<boolean, void>;\n\n if (isExperiment) {\n result = await requester.trackExperiment(\n params as TrackExperimentParamsType,\n );\n } else {\n result = await requester.trackData(params as TrackDataParamsType);\n }\n\n result.ok && result.data && successfulTimestamps.push(timestamp);\n }\n\n this.deleteFromOfflineTracking({\n storage,\n timestamps: successfulTimestamps,\n });\n }\n }\n\n private static addItemToOfflineTracking({\n item,\n isExperiment,\n storage,\n onSuccess,\n }: AddToOfflineTrackingParametersType): void {\n const readResult = storage.read();\n\n const data = readResult.ok ? readResult.data : {};\n\n const { requestParameters } = data;\n\n const newItem = {\n ...item,\n timestamp: new Date().getTime(),\n isExperiment,\n };\n\n const newRequestParameters = requestParameters\n ? [...requestParameters, newItem]\n : [newItem];\n\n const writeResult = storage.write({\n requestParameters: newRequestParameters,\n });\n\n if (writeResult.ok && onSuccess) {\n onSuccess();\n }\n }\n\n private static deleteFromOfflineTracking({\n timestamps,\n storage,\n }: DeleteFromOfflineTrackingParametersType): void {\n const readResult = storage.read();\n\n if (readResult.ok) {\n const { requestParameters } = readResult.data;\n\n const newParameters = requestParameters?.filter(\n (item) => !timestamps.includes(item.timestamp),\n );\n\n storage.write({ requestParameters: newParameters });\n }\n }\n\n private static validateVersion(\n version: string,\n ): Result<[number, number, number], KameleoonError> {\n const versionParts = version.split('.').map((x) => parseInt(x, 10));\n\n while (versionParts.length < 3) {\n versionParts.push(0);\n }\n\n if (versionParts.some((item) => isNaN(item))) {\n return Err(\n new KameleoonError(KameleoonException.SemanticVersionParse, version),\n );\n }\n\n return Ok(versionParts.slice(0, 3) as [number, number, number]);\n }\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kameleoon/javascript-sdk-core",
3
- "version": "4.4.3",
3
+ "version": "4.4.5",
4
4
  "description": "Kameleoon JS SDK Core",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",