@kameleoon/javascript-sdk-core 3.0.0 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/clientConfiguration/clientConfiguration.d.ts +4 -1
- package/dist/clientConfiguration/clientConfiguration.js +1 -1
- package/dist/clientConfiguration/clientConfiguration.js.map +1 -1
- package/dist/clientConfiguration/constants.js +1 -1
- package/dist/clientConfiguration/constants.js.map +1 -1
- package/dist/clientConfiguration/index.d.ts +1 -1
- package/dist/clientConfiguration/index.js +1 -1
- package/dist/clientConfiguration/index.js.map +1 -1
- package/dist/clientConfiguration/types.d.ts +12 -4
- package/dist/clientConfiguration/types.js +1 -1
- package/dist/clientConfiguration/types.js.map +1 -1
- package/dist/constants.js +1 -1
- package/dist/constants.js.map +1 -1
- package/dist/cookieManager/cookieManager.d.ts +16 -0
- package/dist/cookieManager/cookieManager.js +2 -0
- package/dist/cookieManager/cookieManager.js.map +1 -0
- package/dist/cookieManager/index.d.ts +1 -0
- package/dist/cookieManager/index.js +2 -0
- package/dist/cookieManager/index.js.map +1 -0
- package/dist/index.d.ts +4 -3
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/kameleoonClient.d.ts +32 -1
- package/dist/kameleoonClient.js +1 -1
- package/dist/kameleoonClient.js.map +1 -1
- package/dist/kameleoonData/dataManager.d.ts +2 -1
- package/dist/kameleoonData/dataManager.js +1 -1
- package/dist/kameleoonData/dataManager.js.map +1 -1
- package/dist/kameleoonData/pageView.js +1 -1
- package/dist/kameleoonData/pageView.js.map +1 -1
- package/dist/kameleoonError/constants.d.ts +1 -0
- package/dist/kameleoonError/constants.js +1 -1
- package/dist/kameleoonError/constants.js.map +1 -1
- package/dist/kameleoonError/kameleoonError.d.ts +2 -1
- package/dist/kameleoonError/kameleoonError.js +1 -1
- package/dist/kameleoonError/kameleoonError.js.map +1 -1
- package/dist/kameleoonError/types.d.ts +1 -0
- package/dist/kameleoonError/types.js +1 -1
- package/dist/kameleoonError/types.js.map +1 -1
- package/dist/kameleoonUtils.d.ts +0 -6
- package/dist/kameleoonUtils.js +1 -1
- package/dist/kameleoonUtils.js.map +1 -1
- package/dist/requester/constants.d.ts +3 -2
- package/dist/requester/constants.js +1 -1
- package/dist/requester/constants.js.map +1 -1
- package/dist/requester/index.d.ts +2 -2
- package/dist/requester/index.js +1 -1
- package/dist/requester/index.js.map +1 -1
- package/dist/requester/requester.d.ts +5 -5
- package/dist/requester/requester.js +1 -1
- package/dist/requester/requester.js.map +1 -1
- package/dist/requester/types.d.ts +8 -6
- package/dist/requester/types.js +1 -1
- package/dist/requester/types.js.map +1 -1
- package/dist/storage/constants.d.ts +2 -1
- package/dist/storage/constants.js +1 -1
- package/dist/storage/constants.js.map +1 -1
- package/dist/storage/types.d.ts +10 -1
- package/dist/storage/types.js.map +1 -1
- package/dist/types.d.ts +46 -14
- package/dist/types.js.map +1 -1
- package/dist/utilities/types.d.ts +12 -2
- package/dist/utilities/types.js.map +1 -1
- package/dist/utilities/utilities.d.ts +10 -4
- package/dist/utilities/utilities.js +1 -1
- package/dist/utilities/utilities.js.map +1 -1
- package/dist/variationConfiguration/types.d.ts +1 -0
- package/dist/variationConfiguration/types.js.map +1 -1
- package/dist/variationConfiguration/variationConfiguration.js +1 -1
- package/dist/variationConfiguration/variationConfiguration.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { ServerResponse } from 'http';
|
|
1
3
|
import { Result } from 'ts-res';
|
|
2
4
|
import { KameleoonError } from '../kameleoonError';
|
|
3
5
|
import { FeatureVariableResultType, TrackingCacheItemType } from '../types';
|
|
@@ -5,12 +7,12 @@ import { FeatureVariableType } from '../clientConfiguration';
|
|
|
5
7
|
import { CustomData, DataManager, KameleoonDataType } from '../kameleoonData';
|
|
6
8
|
import { CacheManager } from '../cacheManager';
|
|
7
9
|
import { VersionMatchType } from '../targeting';
|
|
8
|
-
import { CheckTargetingParametersType, ManageCacheParametersType, TrackDataParametersType, TrackRuleParametersType, SendOfflineTrackingParametersType, ParseVisitorDataParametersType, InsertInOrderedListParametersType, TimeUnit } from './types';
|
|
10
|
+
import { CheckTargetingParametersType, ManageCacheParametersType, TrackDataParametersType, TrackRuleParametersType, SendOfflineTrackingParametersType, ParseVisitorDataParametersType, InsertInOrderedListParametersType, TimeUnit, GetDataUrlParametersType } from './types';
|
|
9
11
|
export declare class Utilities {
|
|
10
12
|
static checkTargeting({ segment, visitorCode, targetingData, experimentId, variationConfiguration, clientConfiguration, packageInfo, dataManager, }: CheckTargetingParametersType): Result<boolean, KameleoonError>;
|
|
11
13
|
static validateVisitorCode(visitorCode: string): Result<void, KameleoonError>;
|
|
12
|
-
static getDataUrl(visitorCode
|
|
13
|
-
static trackFeatureExperiment({ featureFlagVariation, dataManager, visitorCode, requester, isOfflineModeOn, offlineTrackingStorage, }: TrackRuleParametersType): Promise<void>;
|
|
14
|
+
static getDataUrl({ visitorCode, dataManager, isConsentProvided, }: GetDataUrlParametersType): string;
|
|
15
|
+
static trackFeatureExperiment({ featureFlagVariation, dataManager, visitorCode, requester, isOfflineModeOn, isConsentProvided, offlineTrackingStorage, }: TrackRuleParametersType): Promise<void>;
|
|
14
16
|
static convertTimeUnit(time: number, timeUnit: TimeUnit): number;
|
|
15
17
|
static parseFeatureVariable(variable: FeatureVariableType): Result<FeatureVariableResultType, KameleoonError>;
|
|
16
18
|
static parseVisitorData({ data, filters, visitorCode, variationConfiguration, }: ParseVisitorDataParametersType): KameleoonDataType[];
|
|
@@ -26,7 +28,7 @@ export declare class Utilities {
|
|
|
26
28
|
static insertInOrderedListMutably({ list, element, order, }: InsertInOrderedListParametersType): void;
|
|
27
29
|
static updateCache({ cacheManager, visitorCode, experimentId, variationId, }: ManageCacheParametersType): void;
|
|
28
30
|
static getTrackingCode(trackingCache: CacheManager<TrackingCacheItemType>, visitorCode: string): string;
|
|
29
|
-
static trackData({ visitorCode, dataManager, requester, isOfflineModeOn, offlineTrackingStorage, }: TrackDataParametersType): Promise<void>;
|
|
31
|
+
static trackData({ visitorCode, dataManager, requester, isOfflineModeOn, offlineTrackingStorage, isConsentProvided, }: TrackDataParametersType): Promise<void>;
|
|
30
32
|
static getNonce(): string;
|
|
31
33
|
static sendOfflineTracking({ requester, storage, }: SendOfflineTrackingParametersType): Promise<void>;
|
|
32
34
|
static compareSemVer({ version, compareVersion, operator, }: {
|
|
@@ -34,6 +36,10 @@ export declare class Utilities {
|
|
|
34
36
|
compareVersion: string;
|
|
35
37
|
operator: VersionMatchType;
|
|
36
38
|
}): Result<boolean, KameleoonError>;
|
|
39
|
+
static isServerEnvironment<T extends {
|
|
40
|
+
response: ServerResponse;
|
|
41
|
+
}, U>(params: T | U): params is T;
|
|
42
|
+
static generateRandomString(length: number): string;
|
|
37
43
|
private static addItemToOfflineTracking;
|
|
38
44
|
private static deleteFromOfflineTracking;
|
|
39
45
|
private static validateVersion;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";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"),_constants2=require("./constants"),_types2=require("./types"),_excluded=["timestamp","isExperiment"];function _typeof(a){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a},_typeof(a)}function _objectWithoutProperties(a,b){if(null==a)return{};var c,d,e=_objectWithoutPropertiesLoose(a,b);if(Object.getOwnPropertySymbols){var f=Object.getOwnPropertySymbols(a);for(d=0;d<f.length;d++)c=f[d],0<=b.indexOf(c)||Object.prototype.propertyIsEnumerable.call(a,c)&&(e[c]=a[c])}return e}function _objectWithoutPropertiesLoose(a,b){if(null==a)return{};var c,d,e={},f=Object.keys(a);for(d=0;d<f.length;d++)c=f[d],0<=b.indexOf(c)||(e[c]=a[c]);return e}function 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 _slicedToArray(a,b){return _arrayWithHoles(a)||_iterableToArrayLimit(a,b)||_unsupportedIterableToArray(a,b)||_nonIterableRest()}function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _iterableToArrayLimit(a,b){var c=null==a?null:"undefined"!=typeof Symbol&&a[Symbol.iterator]||a["@@iterator"];if(null!=c){var d,e,f,g,h=[],i=!0,j=!1;try{if(f=(c=c.call(a)).next,0===b){if(Object(c)!==c)return;i=!1}else for(;!(i=(d=f.call(c)).done)&&(h.push(d.value),h.length!==b);i=!0);}catch(a){j=!0,e=a}finally{try{if(!i&&null!=c.return&&(g=c.return(),Object(g)!==g))return}finally{if(j)throw e}}return h}}function _arrayWithHoles(a){if(Array.isArray(a))return a}function _toConsumableArray(a){return _arrayWithoutHoles(a)||_iterableToArray(a)||_unsupportedIterableToArray(a)||_nonIterableSpread()}function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _iterableToArray(a){if("undefined"!=typeof Symbol&&null!=a[Symbol.iterator]||null!=a["@@iterator"])return Array.from(a)}function _arrayWithoutHoles(a){if(Array.isArray(a))return _arrayLikeToArray(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 _regeneratorRuntime(){"use strict";function a(a,b,c){return Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!0}),a[b]}function b(a,b,c,e){var f=b&&b.prototype instanceof d?b:d,g=Object.create(f.prototype),h=new m(e||[]);return s(g,"_invoke",{value:i(a,c,h)}),g}function c(a,b,c){try{return{type:"normal",arg:a.call(b,c)}}catch(a){return{type:"throw",arg:a}}}function d(){}function e(){}function f(){}function g(b){["next","throw","return"].forEach(function(c){a(b,c,function(a){return this._invoke(c,a)})})}function h(a,b){function d(e,f,g,h){var i=c(a[e],a,f);if("throw"!==i.type){var j=i.arg,k=j.value;return k&&"object"==_typeof(k)&&r.call(k,"__await")?b.resolve(k.__await).then(function(a){d("next",a,g,h)},function(a){d("throw",a,g,h)}):b.resolve(k).then(function(a){j.value=a,g(j)},function(a){return d("throw",a,g,h)})}h(i.arg)}var e;s(this,"_invoke",{value:function value(a,c){function f(){return new b(function(b,e){d(a,c,b,e)})}return e=e?e.then(f,f):f()}})}function i(a,b,d){var e="suspendedStart";return function(f,g){if("executing"==e)throw new Error("Generator is already running");if("completed"==e){if("throw"===f)throw g;return o()}for(d.method=f,d.arg=g;;){var h=d.delegate;if(h){var i=j(h,d);if(i){if(i===x)continue;return i}}if("next"===d.method)d.sent=d._sent=d.arg;else if("throw"===d.method){if("suspendedStart"==e)throw e="completed",d.arg;d.dispatchException(d.arg)}else"return"===d.method&&d.abrupt("return",d.arg);e="executing";var k=c(a,b,d);if("normal"===k.type){if(e=d.done?"completed":"suspendedYield",k.arg===x)continue;return{value:k.arg,done:d.done}}"throw"===k.type&&(e="completed",d.method="throw",d.arg=k.arg)}}}function j(a,b){var d=b.method,e=a.iterator[d];if(void 0===e)return b.delegate=null,"throw"===d&&a.iterator.return&&(b.method="return",b.arg=void 0,j(a,b),"throw"===b.method)||"return"!==d&&(b.method="throw",b.arg=new TypeError("The iterator does not provide a '"+d+"' method")),x;var f=c(e,a.iterator,b.arg);if("throw"===f.type)return b.method="throw",b.arg=f.arg,b.delegate=null,x;var g=f.arg;return g?g.done?(b[a.resultName]=g.value,b.next=a.nextLoc,"return"!==b.method&&(b.method="next",b.arg=void 0),b.delegate=null,x):g:(b.method="throw",b.arg=new TypeError("iterator result is not an object"),b.delegate=null,x)}function k(a){var b={tryLoc:a[0]};1 in a&&(b.catchLoc=a[1]),2 in a&&(b.finallyLoc=a[2],b.afterLoc=a[3]),this.tryEntries.push(b)}function l(a){var b=a.completion||{};b.type="normal",delete b.arg,a.completion=b}function m(a){this.tryEntries=[{tryLoc:"root"}],a.forEach(k,this),this.reset(!0)}function n(a){if(a){var b=a[u];if(b)return b.call(a);if("function"==typeof a.next)return a;if(!isNaN(a.length)){var c=-1,d=function b(){for(;++c<a.length;)if(r.call(a,c))return b.value=a[c],b.done=!1,b;return b.value=void 0,b.done=!0,b};return d.next=d}}return{next:o}}function o(){return{value:void 0,done:!0}}_regeneratorRuntime=function(){return p};var p={},q=Object.prototype,r=q.hasOwnProperty,s=Object.defineProperty||function(a,b,c){a[b]=c.value},t="function"==typeof Symbol?Symbol:{},u=t.iterator||"@@iterator",v=t.asyncIterator||"@@asyncIterator",w=t.toStringTag||"@@toStringTag";try{a({},"")}catch(b){a=function(a,b,c){return a[b]=c}}p.wrap=b;var x={},y={};a(y,u,function(){return this});var z=Object.getPrototypeOf,A=z&&z(z(n([])));A&&A!==q&&r.call(A,u)&&(y=A);var B=f.prototype=d.prototype=Object.create(y);return e.prototype=f,s(B,"constructor",{value:f,configurable:!0}),s(f,"constructor",{value:e,configurable:!0}),e.displayName=a(f,w,"GeneratorFunction"),p.isGeneratorFunction=function(a){var b="function"==typeof a&&a.constructor;return!!b&&(b===e||"GeneratorFunction"===(b.displayName||b.name))},p.mark=function(b){return Object.setPrototypeOf?Object.setPrototypeOf(b,f):(b.__proto__=f,a(b,w,"GeneratorFunction")),b.prototype=Object.create(B),b},p.awrap=function(a){return{__await:a}},g(h.prototype),a(h.prototype,v,function(){return this}),p.AsyncIterator=h,p.async=function(a,c,d,e,f){void 0===f&&(f=Promise);var g=new h(b(a,c,d,e),f);return p.isGeneratorFunction(c)?g:g.next().then(function(a){return a.done?a.value:g.next()})},g(B),a(B,w,"Generator"),a(B,u,function(){return this}),a(B,"toString",function(){return"[object Generator]"}),p.keys=function(a){var b=Object(a),c=[];for(var d in b)c.push(d);return c.reverse(),function a(){for(;c.length;){var d=c.pop();if(d in b)return a.value=d,a.done=!1,a}return a.done=!0,a}},p.values=n,m.prototype={constructor:m,reset:function reset(a){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(l),!a)for(var b in this)"t"===b.charAt(0)&&r.call(this,b)&&!isNaN(+b.slice(1))&&(this[b]=void 0)},stop:function stop(){this.done=!0;var a=this.tryEntries[0].completion;if("throw"===a.type)throw a.arg;return this.rval},dispatchException:function dispatchException(a){function b(b,d){return f.type="throw",f.arg=a,c.next=b,d&&(c.method="next",c.arg=void 0),!!d}if(this.done)throw a;for(var c=this,d=this.tryEntries.length-1;0<=d;--d){var e=this.tryEntries[d],f=e.completion;if("root"===e.tryLoc)return b("end");if(e.tryLoc<=this.prev){var g=r.call(e,"catchLoc"),h=r.call(e,"finallyLoc");if(g&&h){if(this.prev<e.catchLoc)return b(e.catchLoc,!0);if(this.prev<e.finallyLoc)return b(e.finallyLoc)}else if(!g){if(!h)throw new Error("try statement without catch or finally");if(this.prev<e.finallyLoc)return b(e.finallyLoc)}else if(this.prev<e.catchLoc)return b(e.catchLoc,!0)}}},abrupt:function abrupt(a,b){for(var c,d=this.tryEntries.length-1;0<=d;--d)if(c=this.tryEntries[d],c.tryLoc<=this.prev&&r.call(c,"finallyLoc")&&this.prev<c.finallyLoc){var e=c;break}e&&("break"===a||"continue"===a)&&e.tryLoc<=b&&b<=e.finallyLoc&&(e=null);var f=e?e.completion:{};return f.type=a,f.arg=b,e?(this.method="next",this.next=e.finallyLoc,x):this.complete(f)},complete:function complete(a,b){if("throw"===a.type)throw a.arg;return"break"===a.type||"continue"===a.type?this.next=a.arg:"return"===a.type?(this.rval=this.arg=a.arg,this.method="return",this.next="end"):"normal"===a.type&&b&&(this.next=b),x},finish:function finish(a){for(var b,c=this.tryEntries.length-1;0<=c;--c)if(b=this.tryEntries[c],b.finallyLoc===a)return this.complete(b.completion,b.afterLoc),l(b),x},catch:function _catch(a){for(var b,c=this.tryEntries.length-1;0<=c;--c)if(b=this.tryEntries[c],b.tryLoc===a){var d=b.completion;if("throw"===d.type){var e=d.arg;l(b)}return e}throw new Error("illegal catch attempt")},delegateYield:function delegateYield(a,b,c){return this.delegate={iterator:n(a),resultName:b,nextLoc:c},"next"===this.method&&(this.arg=void 0),x}},p}function asyncGeneratorStep(a,b,c,d,e,f,g){try{var h=a[f](g),i=h.value}catch(a){return void c(a)}h.done?b(i):Promise.resolve(i).then(d,e)}function _asyncToGenerator(a){return function(){var b=this,c=arguments;return new Promise(function(d,e){function f(a){asyncGeneratorStep(h,d,e,f,g,"next",a)}function g(a){asyncGeneratorStep(h,d,e,f,g,"throw",a)}var h=a.apply(b,c);f(void 0)})}}function _createForOfIteratorHelper(a,b){var c="undefined"!=typeof Symbol&&a[Symbol.iterator]||a["@@iterator"];if(!c){if(Array.isArray(a)||(c=_unsupportedIterableToArray(a))||b&&a&&"number"==typeof a.length){c&&(a=c);var d=0,e=function(){};return{s:e,n:function n(){return d>=a.length?{done:!0}:{done:!1,value:a[d++]}},e:function e(a){throw a},f:e}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var f,g=!0,h=!1;return{s:function s(){c=c.call(a)},n:function n(){var a=c.next();return g=a.done,a},e:function e(a){h=!0,f=a},f:function f(){try{g||null==c.return||c.return()}finally{if(h)throw f}}}}function _unsupportedIterableToArray(a,b){if(a){if("string"==typeof a)return _arrayLikeToArray(a,b);var c=Object.prototype.toString.call(a).slice(8,-1);return"Object"===c&&a.constructor&&(c=a.constructor.name),"Map"===c||"Set"===c?Array.from(a):"Arguments"===c||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(c)?_arrayLikeToArray(a,b):void 0}}function _arrayLikeToArray(a,b){(null==b||b>a.length)&&(b=a.length);for(var c=0,d=Array(b);c<b;c++)d[c]=a[c];return d}function _classCallCheck(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function _defineProperties(a,b){for(var c,d=0;d<b.length;d++)c=b[d],c.enumerable=c.enumerable||!1,c.configurable=!0,"value"in c&&(c.writable=!0),Object.defineProperty(a,_toPropertyKey(c.key),c)}function _createClass(a,b,c){return b&&_defineProperties(a.prototype,b),c&&_defineProperties(a,c),Object.defineProperty(a,"prototype",{writable:!1}),a}function _toPropertyKey(a){var b=_toPrimitive(a,"string");return"symbol"===_typeof(b)?b:b+""}function _toPrimitive(a,b){if("object"!==_typeof(a)||null===a)return a;var c=a[Symbol.toPrimitive];if(c!==void 0){var d=c.call(a,b||"default");if("object"!==_typeof(d))return d;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===b?String:Number)(a)}var Utilities=function(){function a(){_classCallCheck(this,a)}return _createClass(a,null,[{key:"checkTargeting",value:function checkTargeting(a){var b=a.segment,c=a.visitorCode,d=a.targetingData,e=a.experimentId,f=a.variationConfiguration,g=a.clientConfiguration,h=a.packageInfo,i=a.dataManager;if(!b||!b.conditionsData.firstLevel.length)return(0,_tsRes.Ok)(!0);if(!f)return(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.Initialization));var j={},k=f.getStoredVariations(c);k.ok&&(j=k.data);var l=i.getTree(b),m=void 0,n=void 0,o=void 0;l.hasTargetingType(_targeting.TargetingType.SEGMENT)&&(m=i.trees,n=g.segments),l.hasTargetingType(_targeting.TargetingType.TARGET_FEATURE_FLAG)&&(o=g.ruleMap);var p=l.evaluate({variationData:j,sdkInfo:h,segments:n,ruleMap:o,trees:m,targetingData:d,experimentId:e,visitorCode:c});return p}},{key:"validateVisitorCode",value:function 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)()}},{key:"getDataUrl",value:function getDataUrl(b,c){function d(b){b.url&&(f+=b.url+_requester.UrlParameter.Nonce+a.getNonce()+"\n")}var e=c.getUnsentData(b),f="";if(!e||!e.size)return f;var g,h=_createForOfIteratorHelper(e.values());try{for(h.s();!(g=h.n()).done;){var i=g.value;Array.isArray(i)?i.forEach(function(a){return d(a)}):d(i)}}catch(a){h.e(a)}finally{h.f()}return f}},{key:"trackFeatureExperiment",value:function(){function a(){return b.apply(this,arguments)}var b=_asyncToGenerator(_regeneratorRuntime().mark(function b(a){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q;return _regeneratorRuntime().wrap(function r(b){for(;1;)switch(b.prev=b.next){case 0:return c=a.featureFlagVariation,d=a.dataManager,e=a.visitorCode,f=a.requester,g=a.isOfflineModeOn,h=a.offlineTrackingStorage,i=c.variationId,j=c.rule,k=this.getUserAgent(e,d),l=this.getDataUrl(e,d),m=i||0,n=null===i,o=j?j.experimentId:0,p={visitorCode:e,isUnallocated:n,body:l,experimentId:o,variationId:m,userAgent:k},b.next=10,f.trackExperiment(p);case 10:q=b.sent,q.ok&&d.clearUnsentData(e),!q.ok&&g&&this.addItemToOfflineTracking({item:p,storage:h,isExperiment:!0});case 13:case"end":return b.stop();}},b,this)}));return a}()},{key:"convertTimeUnit",value:function convertTimeUnit(a,b){var c,d=(c={},_defineProperty(c,_types2.TimeUnit.Minute,_types.Milliseconds.Minute),_defineProperty(c,_types2.TimeUnit.Hour,_types.Milliseconds.Hour),_defineProperty(c,_types2.TimeUnit.Day,_types.Milliseconds.Day),_defineProperty(c,_types2.TimeUnit.Week,_types.Milliseconds.Week),_defineProperty(c,_types2.TimeUnit.Month,_types.Milliseconds.Month),c);return a/d[b]}},{key:"parseFeatureVariable",value:function parseFeatureVariable(a){var b=a.type,c=a.value;switch(b){case _types.VariableType.BOOLEAN:return(0,_tsRes.Ok)({type:b,value:!!c});case _types.VariableType.STRING:return(0,_tsRes.Ok)({type:b,value:c+""});case _types.VariableType.NUMBER:var d=+c;return Number.isNaN(d)?(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.NumberParse,c+"")):(0,_tsRes.Ok)({type:b,value:d});case _types.VariableType.JSON:try{var e=JSON.parse(a.value+"");return(0,_tsRes.Ok)({type:b,value:e})}catch(a){return(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.JSONParse,a))}default:(0,_kameleoonError.exhaustCheck)(b);}}},{key:"parseVisitorData",value:function parseVisitorData(a){var b=a.data,c=a.filters,d=a.visitorCode,e=a.variationConfiguration,f=b.currentVisit,g=b.previousVisits,h=c.browser,j=c.customData,k=c.operatingSystem,l=c.conversions,m=c.device,n=c.geolocation,o=c.experiments,p=c.pageViews,q=c.visitAmount,r=[];if(f&&r.push(f),g&&(r.length&&q&&1<q&&r.push.apply(r,_toConsumableArray(g)),!r.length&&r.push.apply(r,_toConsumableArray(g))),!r)return[];var s=[];if(p){var t=_kameleoonData.PageView._listFromVisits(r);t.length&&s.push.apply(s,_toConsumableArray(t))}if(h){var u=_kameleoonData.Browser._fromVisits(r);u&&s.push(u)}if(o){for(var v,w={},x=r.length-1;0<=x;x--)if(v=r[x],!!v.experimentEvents){var y,z=_createForOfIteratorHelper(v.experimentEvents);try{for(z.s();!(y=z.n()).done;){var A=y.value,B=A.data,C=B.id,D=B.variationId;w[C]=D}}catch(a){z.e(a)}finally{z.f()}}e.updateStoredVariations(d,w)}if(m){var E=_kameleoonData.Device._fromVisits(r);E&&s.push(E)}if(n){var F=_kameleoonData.GeolocationData._fromVisits(r);F&&s.push(F)}if(j&&s.push.apply(s,_toConsumableArray(_kameleoonData.CustomData._listFromVisits(r))),k){var G=_kameleoonData.OperatingSystem._fromVisits(r);G&&s.push(G)}l&&s.push.apply(s,_toConsumableArray(_kameleoonData.Conversion._listFromVisits(r)));var H=_kameleoonData.VisitsData._fromRemoteVisits(r,!!f);return H&&s.push(H),s}},{key:"parseRegExp",value:function parseRegExp(a){if("/"===a[0]){var b=a.split("/"),c=_slicedToArray(b,3),d=c[0],e=c[1],f=c[2];return new RegExp(e,f)}return new RegExp(a)}},{key:"getUserAgent",value:function getUserAgent(a,b){var c=b.storedTargetingData,d=c&&c[a];if(d){var e=d[_kameleoonData.KameleoonData.UserAgent];if(e)return e.value}}},{key:"isCustomData",value:function isCustomData(a){return a.data.type===_kameleoonData.KameleoonData.CustomData}},{key:"insertInOrderedListMutably",value:function insertInOrderedListMutably(a){var b=a.list,c=a.element,d=a.order;if(!b.includes(c)){var e=b.findIndex(function(a){return d===_types2.Order.Ascending?a>=c:a<=c});-1===e?b.push(c):b.splice(e,0,c)}}},{key:"updateCache",value:function updateCache(a){var b=a.cacheManager,c=a.visitorCode,d=a.experimentId,e=a.variationId,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})}},{key:"getTrackingCode",value:function getTrackingCode(a,b){var c="window.kameleoonQueue=window.kameleoonQueue||[];",d=a.getAliveItem(b);if(!d)return c;var e={};return Object.entries(d).forEach(function(a){var b=_slicedToArray(a,2),d=b[0],f=b[1],g=f.variationId,h=f.expirationTime;h>Date.now()&&(c+="window.kameleoonQueue.push(['Experiments.assignVariation',".concat(d,",").concat(g,"]);"),c+="window.kameleoonQueue.push(['Experiments.trigger',".concat(d,",true]);"),e[+d]={variationId:g,expirationTime:h})}),a.add({key:b,data:e,lifetime:_constants.CACHE_ITEM_LIFETIME}),c}},{key:"trackData",value:function(){function a(a){return b.apply(this,arguments)}var b=_asyncToGenerator(_regeneratorRuntime().mark(function b(a){var c,d,e,f,g,h,i,j,k,l;return _regeneratorRuntime().wrap(function m(b){for(;1;)switch(b.prev=b.next){case 0:return c=a.visitorCode,d=a.dataManager,e=a.requester,f=a.isOfflineModeOn,g=a.offlineTrackingStorage,b.next=3,this.sendOfflineTracking({requester:e,storage:g});case 3:return h=this.getDataUrl(c,d),i=this.getUserAgent(c,d),j={visitorCode:c,body:h,userAgent:i},b.next=8,e.trackData(j);case 8:k=b.sent,l=function cleanup(){return d.clearUnsentData(c)},k.ok&&l(),!k.ok&&f&&this.addItemToOfflineTracking({item:j,storage:g,isExperiment:!1,onSuccess:l});case 12:case"end":return b.stop();}},b,this)}));return a}()},{key:"getNonce",value:function getNonce(){for(var a,b=_constants2.HEX_CHARACTERS.length,c="",d=0;d<b;d++)a=Math.floor(Math.random()*b),c+=_constants2.HEX_CHARACTERS.substring(a,a+1);return c}},{key:"sendOfflineTracking",value:function(){function a(a){return b.apply(this,arguments)}var b=_asyncToGenerator(_regeneratorRuntime().mark(function b(a){var c,d,e,f,g,h,i,j,k,l,m,n;return _regeneratorRuntime().wrap(function o(b){for(;1;)switch(b.prev=b.next){case 0:if(c=a.requester,d=a.storage,e=d.read(),!(e.ok&&e.data.requestParameters)){b.next=33;break}f=e.data.requestParameters,g=[],h=_createForOfIteratorHelper(f),b.prev=6,h.s();case 8:if((i=h.n()).done){b.next=24;break}if(j=i.value,k=j.timestamp,l=j.isExperiment,m=_objectWithoutProperties(j,_excluded),n=void 0,!l){b.next=18;break}return b.next=15,c.trackExperiment(m);case 15:n=b.sent,b.next=21;break;case 18:return b.next=20,c.trackData(m);case 20:n=b.sent;case 21:n.ok&&n.data&&g.push(k);case 22:b.next=8;break;case 24:b.next=29;break;case 26:b.prev=26,b.t0=b["catch"](6),h.e(b.t0);case 29:return b.prev=29,h.f(),b.finish(29);case 32:this.deleteFromOfflineTracking({storage:d,timestamps:g});case 33:case"end":return b.stop();}},b,this,[[6,26,29,32]])}));return a}()},{key:"compareSemVer",value:function compareSemVer(a){var b=a.version,c=a.compareVersion,d=a.operator,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);var g=_slicedToArray(e.data,3),h=g[0],i=g[1],j=g[2],k=_slicedToArray(f.data,3),l=k[0],m=k[1],n=k[2],o=h===l,p=i===m,q=j===n;switch(d){case _targeting.VersionMatchType.EQUAL:return(0,_tsRes.Ok)(o&&p&&q);case _targeting.VersionMatchType.GREATER:return(0,_tsRes.Ok)(h>l||o&&i>m||o&&p&&j>n);case _targeting.VersionMatchType.LOWER:return(0,_tsRes.Ok)(h<l||o&&i<m||o&&p&&j<n);default:(0,_kameleoonError.exhaustCheck)(d);}}},{key:"addItemToOfflineTracking",value:function addItemToOfflineTracking(a){var b=a.item,c=a.isExperiment,d=a.storage,e=a.onSuccess,f=d.read(),g=f.ok?f.data:{},h=g.requestParameters,i=_objectSpread(_objectSpread({},b),{},{timestamp:new Date().getTime(),isExperiment:c}),j=h?[].concat(_toConsumableArray(h),[i]):[i],k=d.write({requestParameters:j});k.ok&&e&&e()}},{key:"deleteFromOfflineTracking",value:function deleteFromOfflineTracking(a){var b=a.timestamps,c=a.storage,d=c.read();if(d.ok){var e=d.data.requestParameters,f=null===e||void 0===e?void 0:e.filter(function(a){return!b.includes(a.timestamp)});c.write({requestParameters:f})}}},{key:"validateVersion",value:function validateVersion(a){for(var b=a.split(".").map(function(a){return parseInt(a,10)});3>b.length;)b.push(0);return b.some(function(a){return isNaN(a)})?(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.SemanticVersionParse,a)):(0,_tsRes.Ok)(b.slice(0,3))}}]),a}();exports.Utilities=Utilities;
|
|
1
|
+
"use strict";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"),_constants2=require("./constants"),_types2=require("./types"),_excluded=["timestamp","isExperiment"];function _typeof(a){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a},_typeof(a)}function _objectWithoutProperties(a,b){if(null==a)return{};var c,d,e=_objectWithoutPropertiesLoose(a,b);if(Object.getOwnPropertySymbols){var f=Object.getOwnPropertySymbols(a);for(d=0;d<f.length;d++)c=f[d],0<=b.indexOf(c)||Object.prototype.propertyIsEnumerable.call(a,c)&&(e[c]=a[c])}return e}function _objectWithoutPropertiesLoose(a,b){if(null==a)return{};var c,d,e={},f=Object.keys(a);for(d=0;d<f.length;d++)c=f[d],0<=b.indexOf(c)||(e[c]=a[c]);return e}function 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 _slicedToArray(a,b){return _arrayWithHoles(a)||_iterableToArrayLimit(a,b)||_unsupportedIterableToArray(a,b)||_nonIterableRest()}function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _iterableToArrayLimit(a,b){var c=null==a?null:"undefined"!=typeof Symbol&&a[Symbol.iterator]||a["@@iterator"];if(null!=c){var d,e,f,g,h=[],i=!0,j=!1;try{if(f=(c=c.call(a)).next,0===b){if(Object(c)!==c)return;i=!1}else for(;!(i=(d=f.call(c)).done)&&(h.push(d.value),h.length!==b);i=!0);}catch(a){j=!0,e=a}finally{try{if(!i&&null!=c.return&&(g=c.return(),Object(g)!==g))return}finally{if(j)throw e}}return h}}function _arrayWithHoles(a){if(Array.isArray(a))return a}function _toConsumableArray(a){return _arrayWithoutHoles(a)||_iterableToArray(a)||_unsupportedIterableToArray(a)||_nonIterableSpread()}function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _iterableToArray(a){if("undefined"!=typeof Symbol&&null!=a[Symbol.iterator]||null!=a["@@iterator"])return Array.from(a)}function _arrayWithoutHoles(a){if(Array.isArray(a))return _arrayLikeToArray(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 _regeneratorRuntime(){"use strict";function a(a,b,c){return Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!0}),a[b]}function b(a,b,c,e){var f=b&&b.prototype instanceof d?b:d,g=Object.create(f.prototype),h=new m(e||[]);return s(g,"_invoke",{value:i(a,c,h)}),g}function c(a,b,c){try{return{type:"normal",arg:a.call(b,c)}}catch(a){return{type:"throw",arg:a}}}function d(){}function e(){}function f(){}function g(b){["next","throw","return"].forEach(function(c){a(b,c,function(a){return this._invoke(c,a)})})}function h(a,b){function d(e,f,g,h){var i=c(a[e],a,f);if("throw"!==i.type){var j=i.arg,k=j.value;return k&&"object"==_typeof(k)&&r.call(k,"__await")?b.resolve(k.__await).then(function(a){d("next",a,g,h)},function(a){d("throw",a,g,h)}):b.resolve(k).then(function(a){j.value=a,g(j)},function(a){return d("throw",a,g,h)})}h(i.arg)}var e;s(this,"_invoke",{value:function value(a,c){function f(){return new b(function(b,e){d(a,c,b,e)})}return e=e?e.then(f,f):f()}})}function i(a,b,d){var e="suspendedStart";return function(f,g){if("executing"==e)throw new Error("Generator is already running");if("completed"==e){if("throw"===f)throw g;return o()}for(d.method=f,d.arg=g;;){var h=d.delegate;if(h){var i=j(h,d);if(i){if(i===x)continue;return i}}if("next"===d.method)d.sent=d._sent=d.arg;else if("throw"===d.method){if("suspendedStart"==e)throw e="completed",d.arg;d.dispatchException(d.arg)}else"return"===d.method&&d.abrupt("return",d.arg);e="executing";var k=c(a,b,d);if("normal"===k.type){if(e=d.done?"completed":"suspendedYield",k.arg===x)continue;return{value:k.arg,done:d.done}}"throw"===k.type&&(e="completed",d.method="throw",d.arg=k.arg)}}}function j(a,b){var d=b.method,e=a.iterator[d];if(void 0===e)return b.delegate=null,"throw"===d&&a.iterator.return&&(b.method="return",b.arg=void 0,j(a,b),"throw"===b.method)||"return"!==d&&(b.method="throw",b.arg=new TypeError("The iterator does not provide a '"+d+"' method")),x;var f=c(e,a.iterator,b.arg);if("throw"===f.type)return b.method="throw",b.arg=f.arg,b.delegate=null,x;var g=f.arg;return g?g.done?(b[a.resultName]=g.value,b.next=a.nextLoc,"return"!==b.method&&(b.method="next",b.arg=void 0),b.delegate=null,x):g:(b.method="throw",b.arg=new TypeError("iterator result is not an object"),b.delegate=null,x)}function k(a){var b={tryLoc:a[0]};1 in a&&(b.catchLoc=a[1]),2 in a&&(b.finallyLoc=a[2],b.afterLoc=a[3]),this.tryEntries.push(b)}function l(a){var b=a.completion||{};b.type="normal",delete b.arg,a.completion=b}function m(a){this.tryEntries=[{tryLoc:"root"}],a.forEach(k,this),this.reset(!0)}function n(a){if(a){var b=a[u];if(b)return b.call(a);if("function"==typeof a.next)return a;if(!isNaN(a.length)){var c=-1,d=function b(){for(;++c<a.length;)if(r.call(a,c))return b.value=a[c],b.done=!1,b;return b.value=void 0,b.done=!0,b};return d.next=d}}return{next:o}}function o(){return{value:void 0,done:!0}}_regeneratorRuntime=function(){return p};var p={},q=Object.prototype,r=q.hasOwnProperty,s=Object.defineProperty||function(a,b,c){a[b]=c.value},t="function"==typeof Symbol?Symbol:{},u=t.iterator||"@@iterator",v=t.asyncIterator||"@@asyncIterator",w=t.toStringTag||"@@toStringTag";try{a({},"")}catch(b){a=function(a,b,c){return a[b]=c}}p.wrap=b;var x={},y={};a(y,u,function(){return this});var z=Object.getPrototypeOf,A=z&&z(z(n([])));A&&A!==q&&r.call(A,u)&&(y=A);var B=f.prototype=d.prototype=Object.create(y);return e.prototype=f,s(B,"constructor",{value:f,configurable:!0}),s(f,"constructor",{value:e,configurable:!0}),e.displayName=a(f,w,"GeneratorFunction"),p.isGeneratorFunction=function(a){var b="function"==typeof a&&a.constructor;return!!b&&(b===e||"GeneratorFunction"===(b.displayName||b.name))},p.mark=function(b){return Object.setPrototypeOf?Object.setPrototypeOf(b,f):(b.__proto__=f,a(b,w,"GeneratorFunction")),b.prototype=Object.create(B),b},p.awrap=function(a){return{__await:a}},g(h.prototype),a(h.prototype,v,function(){return this}),p.AsyncIterator=h,p.async=function(a,c,d,e,f){void 0===f&&(f=Promise);var g=new h(b(a,c,d,e),f);return p.isGeneratorFunction(c)?g:g.next().then(function(a){return a.done?a.value:g.next()})},g(B),a(B,w,"Generator"),a(B,u,function(){return this}),a(B,"toString",function(){return"[object Generator]"}),p.keys=function(a){var b=Object(a),c=[];for(var d in b)c.push(d);return c.reverse(),function a(){for(;c.length;){var d=c.pop();if(d in b)return a.value=d,a.done=!1,a}return a.done=!0,a}},p.values=n,m.prototype={constructor:m,reset:function reset(a){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(l),!a)for(var b in this)"t"===b.charAt(0)&&r.call(this,b)&&!isNaN(+b.slice(1))&&(this[b]=void 0)},stop:function stop(){this.done=!0;var a=this.tryEntries[0].completion;if("throw"===a.type)throw a.arg;return this.rval},dispatchException:function dispatchException(a){function b(b,d){return f.type="throw",f.arg=a,c.next=b,d&&(c.method="next",c.arg=void 0),!!d}if(this.done)throw a;for(var c=this,d=this.tryEntries.length-1;0<=d;--d){var e=this.tryEntries[d],f=e.completion;if("root"===e.tryLoc)return b("end");if(e.tryLoc<=this.prev){var g=r.call(e,"catchLoc"),h=r.call(e,"finallyLoc");if(g&&h){if(this.prev<e.catchLoc)return b(e.catchLoc,!0);if(this.prev<e.finallyLoc)return b(e.finallyLoc)}else if(!g){if(!h)throw new Error("try statement without catch or finally");if(this.prev<e.finallyLoc)return b(e.finallyLoc)}else if(this.prev<e.catchLoc)return b(e.catchLoc,!0)}}},abrupt:function abrupt(a,b){for(var c,d=this.tryEntries.length-1;0<=d;--d)if(c=this.tryEntries[d],c.tryLoc<=this.prev&&r.call(c,"finallyLoc")&&this.prev<c.finallyLoc){var e=c;break}e&&("break"===a||"continue"===a)&&e.tryLoc<=b&&b<=e.finallyLoc&&(e=null);var f=e?e.completion:{};return f.type=a,f.arg=b,e?(this.method="next",this.next=e.finallyLoc,x):this.complete(f)},complete:function complete(a,b){if("throw"===a.type)throw a.arg;return"break"===a.type||"continue"===a.type?this.next=a.arg:"return"===a.type?(this.rval=this.arg=a.arg,this.method="return",this.next="end"):"normal"===a.type&&b&&(this.next=b),x},finish:function finish(a){for(var b,c=this.tryEntries.length-1;0<=c;--c)if(b=this.tryEntries[c],b.finallyLoc===a)return this.complete(b.completion,b.afterLoc),l(b),x},catch:function _catch(a){for(var b,c=this.tryEntries.length-1;0<=c;--c)if(b=this.tryEntries[c],b.tryLoc===a){var d=b.completion;if("throw"===d.type){var e=d.arg;l(b)}return e}throw new Error("illegal catch attempt")},delegateYield:function delegateYield(a,b,c){return this.delegate={iterator:n(a),resultName:b,nextLoc:c},"next"===this.method&&(this.arg=void 0),x}},p}function asyncGeneratorStep(a,b,c,d,e,f,g){try{var h=a[f](g),i=h.value}catch(a){return void c(a)}h.done?b(i):Promise.resolve(i).then(d,e)}function _asyncToGenerator(a){return function(){var b=this,c=arguments;return new Promise(function(d,e){function f(a){asyncGeneratorStep(h,d,e,f,g,"next",a)}function g(a){asyncGeneratorStep(h,d,e,f,g,"throw",a)}var h=a.apply(b,c);f(void 0)})}}function _createForOfIteratorHelper(a,b){var c="undefined"!=typeof Symbol&&a[Symbol.iterator]||a["@@iterator"];if(!c){if(Array.isArray(a)||(c=_unsupportedIterableToArray(a))||b&&a&&"number"==typeof a.length){c&&(a=c);var d=0,e=function(){};return{s:e,n:function n(){return d>=a.length?{done:!0}:{done:!1,value:a[d++]}},e:function e(a){throw a},f:e}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var f,g=!0,h=!1;return{s:function s(){c=c.call(a)},n:function n(){var a=c.next();return g=a.done,a},e:function e(a){h=!0,f=a},f:function f(){try{g||null==c.return||c.return()}finally{if(h)throw f}}}}function _unsupportedIterableToArray(a,b){if(a){if("string"==typeof a)return _arrayLikeToArray(a,b);var c=Object.prototype.toString.call(a).slice(8,-1);return"Object"===c&&a.constructor&&(c=a.constructor.name),"Map"===c||"Set"===c?Array.from(a):"Arguments"===c||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(c)?_arrayLikeToArray(a,b):void 0}}function _arrayLikeToArray(a,b){(null==b||b>a.length)&&(b=a.length);for(var c=0,d=Array(b);c<b;c++)d[c]=a[c];return d}function _classCallCheck(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function _defineProperties(a,b){for(var c,d=0;d<b.length;d++)c=b[d],c.enumerable=c.enumerable||!1,c.configurable=!0,"value"in c&&(c.writable=!0),Object.defineProperty(a,_toPropertyKey(c.key),c)}function _createClass(a,b,c){return b&&_defineProperties(a.prototype,b),c&&_defineProperties(a,c),Object.defineProperty(a,"prototype",{writable:!1}),a}function _toPropertyKey(a){var b=_toPrimitive(a,"string");return"symbol"===_typeof(b)?b:b+""}function _toPrimitive(a,b){if("object"!==_typeof(a)||null===a)return a;var c=a[Symbol.toPrimitive];if(c!==void 0){var d=c.call(a,b||"default");if("object"!==_typeof(d))return d;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===b?String:Number)(a)}var Utilities=function(){function a(){_classCallCheck(this,a)}return _createClass(a,null,[{key:"checkTargeting",value:function checkTargeting(a){var b=a.segment,c=a.visitorCode,d=a.targetingData,e=a.experimentId,f=a.variationConfiguration,g=a.clientConfiguration,h=a.packageInfo,i=a.dataManager;if(!b||!b.conditionsData.firstLevel.length)return(0,_tsRes.Ok)(!0);if(!f)return(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.Initialization));var j={},k=f.getStoredVariations(c);k.ok&&(j=k.data);var l=i.getTree(b),m=void 0,n=void 0,o=void 0;l.hasTargetingType(_targeting.TargetingType.SEGMENT)&&(m=i.trees,n=g.segments),l.hasTargetingType(_targeting.TargetingType.TARGET_FEATURE_FLAG)&&(o=g.ruleMap);var p=l.evaluate({variationData:j,sdkInfo:h,segments:n,ruleMap:o,trees:m,targetingData:d,experimentId:e,visitorCode:c});return p}},{key:"validateVisitorCode",value:function 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)()}},{key:"getDataUrl",value:function getDataUrl(b){function c(b){if(b.url){var c=b.data.type===_kameleoonData.KameleoonData.Conversion;(f||c)&&h.push(b.url+_requester.UrlParameter.Nonce+a.getNonce()+"\n")}}var d=b.visitorCode,e=b.dataManager,f=b.isConsentProvided,g=e.getUnsentData(d),h=[];if(!g||!g.size)return"";var i,j=_createForOfIteratorHelper(g.values());try{for(j.s();!(i=j.n()).done;){var k=i.value;Array.isArray(k)?k.forEach(function(a){return c(a)}):c(k)}}catch(a){j.e(a)}finally{j.f()}return h.join("")}},{key:"trackFeatureExperiment",value:function(){function a(){return b.apply(this,arguments)}var b=_asyncToGenerator(_regeneratorRuntime().mark(function b(a){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;return _regeneratorRuntime().wrap(function u(b){for(;1;)switch(b.prev=b.next){case 0:if(c=a.featureFlagVariation,d=a.dataManager,e=a.visitorCode,f=a.requester,g=a.isOfflineModeOn,h=a.isConsentProvided,i=a.offlineTrackingStorage,j=c.variationId,k=c.rule,l=c.isTargetedRule,m=this.getUserAgent(e,d),n=this.getDataUrl({visitorCode:e,dataManager:d,isConsentProvided:h}),h){b.next=8;break}if(o=!!j||!!k,n||o){b.next=8;break}return b.abrupt("return");case 8:return p=j||0,q=null===j,r=k?k.experimentId:0,s={visitorCode:e,isUnallocated:q,body:n,experimentId:r,variationId:p,userAgent:m,isTargetedRule:l,isConsentProvided:h},b.next=14,f.trackExperiment(s);case 14:t=b.sent,t.ok&&(h?d.clearUnsentData(e):d.clearUnsentDataByKey(e,_kameleoonData.KameleoonData.Conversion)),!t.ok&&g&&this.addItemToOfflineTracking({item:s,storage:i,isExperiment:!0});case 17:case"end":return b.stop();}},b,this)}));return a}()},{key:"convertTimeUnit",value:function convertTimeUnit(a,b){var c,d=(c={},_defineProperty(c,_types2.TimeUnit.Minute,_types.Milliseconds.Minute),_defineProperty(c,_types2.TimeUnit.Hour,_types.Milliseconds.Hour),_defineProperty(c,_types2.TimeUnit.Day,_types.Milliseconds.Day),_defineProperty(c,_types2.TimeUnit.Week,_types.Milliseconds.Week),_defineProperty(c,_types2.TimeUnit.Month,_types.Milliseconds.Month),c);return a/d[b]}},{key:"parseFeatureVariable",value:function parseFeatureVariable(a){var b=a.type,c=a.value;switch(b){case _types.VariableType.BOOLEAN:return(0,_tsRes.Ok)({type:b,value:!!c});case _types.VariableType.STRING:return(0,_tsRes.Ok)({type:b,value:c+""});case _types.VariableType.NUMBER:var d=+c;return Number.isNaN(d)?(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.NumberParse,c+"")):(0,_tsRes.Ok)({type:b,value:d});case _types.VariableType.JSON:try{var e=JSON.parse(a.value+"");return(0,_tsRes.Ok)({type:b,value:e})}catch(a){return(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.JSONParse,a))}default:(0,_kameleoonError.exhaustCheck)(b);}}},{key:"parseVisitorData",value:function parseVisitorData(a){var b=a.data,c=a.filters,d=a.visitorCode,e=a.variationConfiguration,f=b.currentVisit,g=b.previousVisits,h=c.browser,j=c.customData,k=c.operatingSystem,l=c.conversions,m=c.device,n=c.geolocation,o=c.experiments,p=c.pageViews,q=[];if(f&&q.push(f),g&&q.push.apply(q,_toConsumableArray(g)),!q)return[];var r=[];if(p){var s=_kameleoonData.PageView._listFromVisits(q);s.length&&r.push.apply(r,_toConsumableArray(s))}if(h){var t=_kameleoonData.Browser._fromVisits(q);t&&r.push(t)}if(o){for(var u,v={},w=q.length-1;0<=w;w--)if(u=q[w],!!u.experimentEvents){var x,y=_createForOfIteratorHelper(u.experimentEvents);try{for(y.s();!(x=y.n()).done;){var z=x.value,A=z.data,B=A.id,C=A.variationId;v[B]=C}}catch(a){y.e(a)}finally{y.f()}}e.updateStoredVariations(d,v)}if(m){var D=_kameleoonData.Device._fromVisits(q);D&&r.push(D)}if(n){var E=_kameleoonData.GeolocationData._fromVisits(q);E&&r.push(E)}if(j&&r.push.apply(r,_toConsumableArray(_kameleoonData.CustomData._listFromVisits(q))),k){var F=_kameleoonData.OperatingSystem._fromVisits(q);F&&r.push(F)}l&&r.push.apply(r,_toConsumableArray(_kameleoonData.Conversion._listFromVisits(q)));var G=_kameleoonData.VisitsData._fromRemoteVisits(q,!!f);return G&&r.push(G),r}},{key:"parseRegExp",value:function parseRegExp(a){if("/"===a[0]){var b=a.split("/"),c=_slicedToArray(b,3),d=c[0],e=c[1],f=c[2];return new RegExp(e,f)}return new RegExp(a)}},{key:"getUserAgent",value:function getUserAgent(a,b){var c=b.storedTargetingData,d=c&&c[a];if(d){var e=d[_kameleoonData.KameleoonData.UserAgent];if(e)return e.value}}},{key:"isCustomData",value:function isCustomData(a){return a.data.type===_kameleoonData.KameleoonData.CustomData}},{key:"insertInOrderedListMutably",value:function insertInOrderedListMutably(a){var b=a.list,c=a.element,d=a.order;if(!b.includes(c)){var e=b.findIndex(function(a){return d===_types2.Order.Ascending?a>=c:a<=c});-1===e?b.push(c):b.splice(e,0,c)}}},{key:"updateCache",value:function updateCache(a){var b=a.cacheManager,c=a.visitorCode,d=a.experimentId,e=a.variationId,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})}},{key:"getTrackingCode",value:function getTrackingCode(a,b){var c="window.kameleoonQueue=window.kameleoonQueue||[];",d=a.getAliveItem(b);if(!d)return c;var e={};return Object.entries(d).forEach(function(a){var b=_slicedToArray(a,2),d=b[0],f=b[1],g=f.variationId,h=f.expirationTime;h>Date.now()&&(c+="window.kameleoonQueue.push(['Experiments.assignVariation',".concat(d,",").concat(g,"]);"),c+="window.kameleoonQueue.push(['Experiments.trigger',".concat(d,",true]);"),e[+d]={variationId:g,expirationTime:h})}),a.add({key:b,data:e,lifetime:_constants.CACHE_ITEM_LIFETIME}),c}},{key:"trackData",value:function(){function a(a){return b.apply(this,arguments)}var b=_asyncToGenerator(_regeneratorRuntime().mark(function b(a){var c,d,e,f,g,h,i,j,k,l,m;return _regeneratorRuntime().wrap(function n(b){for(;1;)switch(b.prev=b.next){case 0:return c=a.visitorCode,d=a.dataManager,e=a.requester,f=a.isOfflineModeOn,g=a.offlineTrackingStorage,h=a.isConsentProvided,b.next=3,this.sendOfflineTracking({requester:e,storage:g});case 3:if(i=this.getDataUrl({visitorCode:c,dataManager:d,isConsentProvided:h}),h||i){b.next=6;break}return b.abrupt("return");case 6:return j=this.getUserAgent(c,d),k={visitorCode:c,body:i,userAgent:j},b.next=10,e.trackData(k);case 10:l=b.sent,m=function cleanup(){return h?d.clearUnsentData(c):d.clearUnsentDataByKey(c,_kameleoonData.KameleoonData.Conversion)},l.ok&&m(),!l.ok&&f&&this.addItemToOfflineTracking({item:k,storage:g,isExperiment:!1,onSuccess:m});case 14:case"end":return b.stop();}},b,this)}));return a}()},{key:"getNonce",value:function getNonce(){for(var a,b=_constants2.HEX_CHARACTERS.length,c="",d=0;d<b;d++)a=Math.floor(Math.random()*b),c+=_constants2.HEX_CHARACTERS.substring(a,a+1);return c}},{key:"sendOfflineTracking",value:function(){function a(a){return b.apply(this,arguments)}var b=_asyncToGenerator(_regeneratorRuntime().mark(function b(a){var c,d,e,f,g,h,i,j,k,l,m,n;return _regeneratorRuntime().wrap(function o(b){for(;1;)switch(b.prev=b.next){case 0:if(c=a.requester,d=a.storage,e=d.read(),!(e.ok&&e.data.requestParameters)){b.next=33;break}f=e.data.requestParameters,g=[],h=_createForOfIteratorHelper(f),b.prev=6,h.s();case 8:if((i=h.n()).done){b.next=24;break}if(j=i.value,k=j.timestamp,l=j.isExperiment,m=_objectWithoutProperties(j,_excluded),n=void 0,!l){b.next=18;break}return b.next=15,c.trackExperiment(m);case 15:n=b.sent,b.next=21;break;case 18:return b.next=20,c.trackData(m);case 20:n=b.sent;case 21:n.ok&&n.data&&g.push(k);case 22:b.next=8;break;case 24:b.next=29;break;case 26:b.prev=26,b.t0=b["catch"](6),h.e(b.t0);case 29:return b.prev=29,h.f(),b.finish(29);case 32:this.deleteFromOfflineTracking({storage:d,timestamps:g});case 33:case"end":return b.stop();}},b,this,[[6,26,29,32]])}));return a}()},{key:"compareSemVer",value:function compareSemVer(a){var b=a.version,c=a.compareVersion,d=a.operator,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);var g=_slicedToArray(e.data,3),h=g[0],i=g[1],j=g[2],k=_slicedToArray(f.data,3),l=k[0],m=k[1],n=k[2],o=h===l,p=i===m,q=j===n;switch(d){case _targeting.VersionMatchType.EQUAL:return(0,_tsRes.Ok)(o&&p&&q);case _targeting.VersionMatchType.GREATER:return(0,_tsRes.Ok)(h>l||o&&i>m||o&&p&&j>n);case _targeting.VersionMatchType.LOWER:return(0,_tsRes.Ok)(h<l||o&&i<m||o&&p&&j<n);default:(0,_kameleoonError.exhaustCheck)(d);}}},{key:"isServerEnvironment",value:function isServerEnvironment(a){return void 0!==a.response}},{key:"generateRandomString",value:function generateRandomString(a){var b="abcdefghijklmnopqrstuvwxyz0123456789",c=[];if(0>a)return"";for(var d=0;d<a;d++)c.push("abcdefghijklmnopqrstuvwxyz0123456789"[Math.floor(36*Math.random())]);return c.join("")}},{key:"addItemToOfflineTracking",value:function addItemToOfflineTracking(a){var b=a.item,c=a.isExperiment,d=a.storage,e=a.onSuccess,f=d.read(),g=f.ok?f.data:{},h=g.requestParameters,i=_objectSpread(_objectSpread({},b),{},{timestamp:new Date().getTime(),isExperiment:c}),j=h?[].concat(_toConsumableArray(h),[i]):[i],k=d.write({requestParameters:j});k.ok&&e&&e()}},{key:"deleteFromOfflineTracking",value:function deleteFromOfflineTracking(a){var b=a.timestamps,c=a.storage,d=c.read();if(d.ok){var e=d.data.requestParameters,f=null===e||void 0===e?void 0:e.filter(function(a){return!b.includes(a.timestamp)});c.write({requestParameters:f})}}},{key:"validateVersion",value:function validateVersion(a){for(var b=a.split(".").map(function(a){return parseInt(a,10)});3>b.length;)b.push(0);return b.some(function(a){return isNaN(a)})?(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.SemanticVersionParse,a)):(0,_tsRes.Ok)(b.slice(0,3))}}]),a}();exports.Utilities=Utilities;
|
|
2
2
|
//# sourceMappingURL=utilities.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utilities.js","names":["Utilities","a","_classCallCheck","_createClass","key","value","checkTargeting","segment","visitorCode","targetingData","experimentId","variationConfiguration","clientConfiguration","packageInfo","dataManager","conditionsData","firstLevel","length","Ok","Err","KameleoonError","KameleoonException","Initialization","variations","assignedVariationsResult","getStoredVariations","ok","data","targetingTree","getTree","trees","segments","ruleMap","hasTargetingType","TargetingType","SEGMENT","TARGET_FEATURE_FLAG","result","evaluate","variationData","sdkInfo","validateVisitorCode","VisitorCodeEmpty","VISITOR_CODE_MAX_LENGTH","VisitorCodeMaxLength","getDataUrl","updateUrl","url","resultUrl","UrlParameter","Nonce","getNonce","unsentData","getUnsentData","size","g","h","_createForOfIteratorHelper","values","s","n","done","item","Array","isArray","forEach","arrayItem","e","f","b","apply","arguments","_asyncToGenerator","_regeneratorRuntime","mark","c","d","i","j","k","l","m","o","p","q","wrap","r","prev","next","featureFlagVariation","requester","isOfflineModeOn","offlineTrackingStorage","variationId","rule","userAgent","getUserAgent","dataUrl","resultVariationId","isUnallocated","parameters","body","trackExperiment","sent","clearUnsentData","addItemToOfflineTracking","storage","isExperiment","stop","convertTimeUnit","time","timeUnit","timeMap","_defineProperty","TimeUnit","Minute","Milliseconds","Hour","Day","Week","Month","parseFeatureVariable","variable","type","VariableType","BOOLEAN","STRING","NUMBER","numberValue","Number","isNaN","NumberParse","JSON","jsonValue","parse","err","JSONParse","exhaustCheck","parseVisitorData","filters","currentVisit","previousVisits","browserFilter","browser","customDataFilter","customData","operatingSystemFilter","operatingSystem","conversionsFilter","conversions","deviceFilter","device","geolocationFilter","geolocation","experimentsFilter","experiments","pageViewFilter","pageViews","visitAmount","visits","push","_toConsumableArray","resultData","PageView","_listFromVisits","Browser","_fromVisits","visit","experimentData","experimentEvents","y","z","experimentEvent","B","id","updateStoredVariations","Device","GeolocationData","CustomData","OperatingSystem","Conversion","visitsData","VisitsData","_fromRemoteVisits","parseRegExp","split","_slicedToArray","_","expression","flags","RegExp","storedData","storedTargetingData","userAgentData","KameleoonData","UserAgent","isCustomData","dataItem","insertInOrderedListMutably","list","element","order","includes","index","findIndex","Order","Ascending","splice","updateCache","cacheManager","cacheData","getAliveItem","newCacheData","_objectSpread","expirationTime","Date","now","CACHE_ITEM_LIFETIME","Second","add","lifetime","getTrackingCode","trackingCache","resultString","updatedCacheData","Object","entries","concat","sendOfflineTracking","trackData","cleanup","onSuccess","randomNumber","hexLength","HEX_CHARACTERS","nonce","Math","floor","random","substring","readResult","read","requestParameters","successfulTimestamps","timestamp","params","_objectWithoutProperties","_excluded","t0","finish","deleteFromOfflineTracking","timestamps","compareSemVer","version","compareVersion","operator","versionResult","validateVersion","compareVersionResult","error","major","minor","patch","compareMajor","compareMinor","comparePatch","isMajorEqual","isMinorEqual","isPatchEqual","VersionMatchType","EQUAL","GREATER","LOWER","newItem","getTime","newRequestParameters","writeResult","write","newParameters","filter","versionParts","map","x","parseInt","some","SemanticVersionParse","slice","exports"],"sources":["../../src/utilities/utilities.ts"],"sourcesContent":["import { Err, Ok, Result } from 'ts-res';\nimport {\n KameleoonError,\n KameleoonException,\n exhaustCheck,\n} from 'src/kameleoonError';\nimport {\n FeatureVariableResultType,\n Milliseconds,\n TrackingCacheItemType,\n VariableType,\n} from 'src/types';\nimport { FeatureVariableType, JSONType } from 'src/clientConfiguration';\nimport {\n Browser,\n Conversion,\n CustomData,\n DataManager,\n Device,\n GeolocationData,\n KameleoonData,\n KameleoonDataType,\n OperatingSystem,\n PageView,\n VisitsData,\n} from 'src/kameleoonData';\nimport { CACHE_ITEM_LIFETIME } from 'src/constants';\nimport { CacheManager } from 'src/cacheManager';\nimport {\n TrackExperimentParamsType,\n TrackDataParamsType,\n VisitType,\n UrlParameter,\n} from 'src/requester';\nimport { VersionMatchType, TargetingType } from 'src/targeting';\nimport { KameleoonVisitorDataType } from 'src/kameleoonData/types';\nimport { FeatureFlagVariationsType } from 'src/storage/types';\nimport { VISITOR_CODE_MAX_LENGTH, HEX_CHARACTERS } from './constants';\nimport {\n CheckTargetingParametersType,\n ManageCacheParametersType,\n TrackDataParametersType,\n TrackRuleParametersType,\n AddToOfflineTrackingParametersType,\n SendOfflineTrackingParametersType,\n DeleteFromOfflineTrackingParametersType,\n ParseVisitorDataParametersType,\n InsertInOrderedListParametersType,\n Order,\n TimeUnit,\n} 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(visitorCode: string, dataManager: DataManager): string {\n const unsentData = dataManager.getUnsentData(visitorCode);\n let resultUrl = '';\n\n if (!unsentData || !unsentData.size) {\n return resultUrl;\n }\n\n function updateUrl(data: KameleoonDataType): void {\n if (data.url) {\n resultUrl +=\n data.url + UrlParameter.Nonce + Utilities.getNonce() + '\\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;\n }\n\n static async trackFeatureExperiment({\n featureFlagVariation,\n dataManager,\n visitorCode,\n requester,\n isOfflineModeOn,\n offlineTrackingStorage,\n }: TrackRuleParametersType): Promise<void> {\n const { variationId, rule } = featureFlagVariation;\n\n const userAgent = this.getUserAgent(visitorCode, dataManager);\n\n const dataUrl = this.getDataUrl(visitorCode, dataManager);\n\n const resultVariationId = variationId || 0;\n const isUnallocated = variationId === null;\n // --- Note ---\n // Experiment id is not needed for unallocated visitors\n // So we just use 0 as a fallback\n const experimentId = rule ? rule.experimentId : 0;\n\n const parameters = {\n visitorCode,\n isUnallocated,\n body: dataUrl,\n experimentId,\n variationId: resultVariationId,\n userAgent,\n };\n\n const result = await requester.trackExperiment(parameters);\n\n if (result.ok) {\n dataManager.clearUnsentData(visitorCode);\n }\n\n if (!result.ok && isOfflineModeOn) {\n this.addItemToOfflineTracking({\n item: parameters,\n storage: offlineTrackingStorage,\n isExperiment: true,\n });\n }\n }\n\n static convertTimeUnit(time: number, timeUnit: TimeUnit): number {\n const timeMap = {\n [TimeUnit.Minute]: Milliseconds.Minute,\n [TimeUnit.Hour]: Milliseconds.Hour,\n [TimeUnit.Day]: Milliseconds.Day,\n [TimeUnit.Week]: Milliseconds.Week,\n [TimeUnit.Month]: Milliseconds.Month,\n };\n\n return time / timeMap[timeUnit];\n }\n\n static parseFeatureVariable(\n variable: FeatureVariableType,\n ): Result<FeatureVariableResultType, KameleoonError> {\n const { type, value } = variable;\n\n switch (type) {\n case VariableType.BOOLEAN:\n return Ok({\n type,\n value: Boolean(value),\n });\n case VariableType.STRING:\n return Ok({\n type,\n value: String(value),\n });\n case VariableType.NUMBER:\n const numberValue = Number(value);\n\n if (Number.isNaN(numberValue)) {\n return Err(\n new KameleoonError(KameleoonException.NumberParse, String(value)),\n );\n }\n\n return Ok({\n type,\n value: numberValue,\n });\n case VariableType.JSON:\n try {\n const jsonValue: JSONType = JSON.parse(String(variable.value));\n\n return Ok({\n type,\n value: jsonValue,\n });\n } catch (err) {\n return Err(new KameleoonError(KameleoonException.JSONParse, err));\n }\n default:\n exhaustCheck(type);\n }\n }\n\n static parseVisitorData({\n data,\n filters,\n visitorCode,\n variationConfiguration,\n }: ParseVisitorDataParametersType): KameleoonDataType[] {\n const { currentVisit, previousVisits } = data;\n const {\n browser: browserFilter,\n customData: customDataFilter,\n operatingSystem: operatingSystemFilter,\n conversions: conversionsFilter,\n device: deviceFilter,\n geolocation: geolocationFilter,\n experiments: experimentsFilter,\n pageViews: pageViewFilter,\n visitAmount,\n } = filters;\n\n let visits: VisitType[] = [];\n\n if (currentVisit) {\n visits.push(currentVisit);\n }\n\n if (previousVisits) {\n // --- Note ---\n // We can't know if we have `currentVisit` visit in advance via API (only amount of `previousVisits`)\n // But the current visit is also counted in `visitAmount` so we need to check it here\n if (visits.length && visitAmount && visitAmount > 1) {\n visits.push(...previousVisits);\n }\n\n if (!visits.length) {\n visits.push(...previousVisits);\n }\n }\n\n if (!visits) {\n return [];\n }\n\n const resultData: KameleoonDataType[] = [];\n\n if (pageViewFilter) {\n const pageViews = PageView._listFromVisits(visits);\n\n if (pageViews.length) {\n resultData.push(...pageViews);\n }\n }\n\n // --- Browser ---\n if (browserFilter) {\n const browser = Browser._fromVisits(visits);\n\n if (browser) {\n resultData.push(browser);\n }\n }\n\n // --- Experiments ---\n if (experimentsFilter) {\n const experimentData: FeatureFlagVariationsType = {};\n\n // --- Note ---\n // Going backwards to get the latest experiment data\n for (let i = visits.length - 1; i >= 0; i--) {\n const visit = visits[i];\n\n if (!visit.experimentEvents) {\n continue;\n }\n\n for (const experimentEvent of visit.experimentEvents) {\n const { id, variationId } = experimentEvent.data;\n\n experimentData[id] = variationId;\n }\n }\n\n variationConfiguration.updateStoredVariations(\n visitorCode,\n experimentData,\n );\n }\n\n // --- Device ---\n if (deviceFilter) {\n const device = Device._fromVisits(visits);\n\n if (device) {\n resultData.push(device);\n }\n }\n\n // --- Geolocation ---\n if (geolocationFilter) {\n const geolocation = GeolocationData._fromVisits(visits);\n\n if (geolocation) {\n resultData.push(geolocation);\n }\n }\n\n // --- Custom data ---\n if (customDataFilter) {\n resultData.push(...CustomData._listFromVisits(visits));\n }\n\n // --- Operating system ---\n if (operatingSystemFilter) {\n const operatingSystem = OperatingSystem._fromVisits(visits);\n\n if (operatingSystem) {\n resultData.push(operatingSystem);\n }\n }\n\n // --- Conversions ---\n if (conversionsFilter) {\n resultData.push(...Conversion._listFromVisits(visits));\n }\n\n const visitsData = VisitsData._fromRemoteVisits(\n visits,\n Boolean(currentVisit),\n );\n\n if (visitsData) {\n resultData.push(visitsData);\n }\n\n return resultData;\n }\n\n static parseRegExp(value: string): RegExp {\n if (value[0] === '/') {\n const [_, expression, flags] = value.split('/');\n\n return new RegExp(expression, flags);\n }\n\n return new RegExp(value);\n }\n\n static getUserAgent(\n visitorCode: string,\n dataManager: DataManager,\n ): string | undefined {\n const storedData = dataManager.storedTargetingData;\n\n const targetingData: KameleoonVisitorDataType | undefined =\n storedData && storedData[visitorCode];\n\n if (targetingData) {\n const userAgentData = targetingData[KameleoonData.UserAgent];\n\n if (userAgentData) {\n return userAgentData.value;\n }\n }\n\n return undefined;\n }\n\n static isCustomData(dataItem: KameleoonDataType): dataItem is CustomData {\n return dataItem.data.type === KameleoonData.CustomData;\n }\n\n /**\n * Insert element in ordered list, if element already exists in list, does nothing\n * @param list - list to insert element\n * @param element - element to insert\n * @param order - order of list\n */\n static insertInOrderedListMutably({\n list,\n element,\n order,\n }: InsertInOrderedListParametersType): void {\n if (list.includes(element)) {\n return;\n }\n\n const index = list.findIndex((item) =>\n order === Order.Ascending ? item >= element : item <= element,\n );\n\n if (index === -1) {\n list.push(element);\n } else {\n list.splice(index, 0, element);\n }\n }\n\n static updateCache({\n cacheManager,\n visitorCode,\n experimentId,\n variationId,\n }: ManageCacheParametersType): void {\n const cacheData = cacheManager.getAliveItem(visitorCode);\n\n const newCacheData = cacheData ? { ...cacheData } : {};\n\n newCacheData[experimentId] = {\n variationId,\n expirationTime: Date.now() + CACHE_ITEM_LIFETIME * Milliseconds.Second,\n };\n\n cacheManager.add({\n key: visitorCode,\n data: newCacheData,\n lifetime: CACHE_ITEM_LIFETIME,\n });\n }\n\n static getTrackingCode(\n trackingCache: CacheManager<TrackingCacheItemType>,\n visitorCode: string,\n ): string {\n let resultString = 'window.kameleoonQueue=window.kameleoonQueue||[];';\n\n const cacheData = trackingCache.getAliveItem(visitorCode);\n\n if (!cacheData) {\n return resultString;\n }\n\n const updatedCacheData: TrackingCacheItemType = {};\n\n Object.entries(cacheData).forEach(\n ([experimentId, { variationId, expirationTime }]) => {\n if (expirationTime > Date.now()) {\n resultString += `window.kameleoonQueue.push(['Experiments.assignVariation',${experimentId},${variationId}]);`;\n resultString += `window.kameleoonQueue.push(['Experiments.trigger',${experimentId},true]);`;\n\n updatedCacheData[Number(experimentId)] = {\n variationId,\n expirationTime,\n };\n }\n },\n );\n\n // --- Note ---\n // Cache is updated with only alive experiments\n trackingCache.add({\n key: visitorCode,\n data: updatedCacheData,\n lifetime: CACHE_ITEM_LIFETIME,\n });\n\n return resultString;\n }\n\n static async trackData({\n visitorCode,\n dataManager,\n requester,\n isOfflineModeOn,\n offlineTrackingStorage,\n }: TrackDataParametersType): Promise<void> {\n await this.sendOfflineTracking({\n requester,\n storage: offlineTrackingStorage,\n });\n\n const dataUrl = this.getDataUrl(visitorCode, dataManager);\n\n const userAgent = this.getUserAgent(visitorCode, dataManager);\n\n const parameters = {\n visitorCode,\n body: dataUrl,\n userAgent,\n };\n\n const result = await requester.trackData(parameters);\n\n const cleanup = () => dataManager.clearUnsentData(visitorCode);\n\n if (result.ok) {\n cleanup();\n }\n\n if (!result.ok && isOfflineModeOn) {\n this.addItemToOfflineTracking({\n item: parameters,\n storage: offlineTrackingStorage,\n isExperiment: false,\n onSuccess: cleanup,\n });\n }\n }\n\n static getNonce(): string {\n const hexLength = HEX_CHARACTERS.length;\n let nonce: string = '';\n\n for (let i = 0; i < hexLength; i++) {\n const randomNumber = Math.floor(Math.random() * hexLength);\n nonce += HEX_CHARACTERS.substring(randomNumber, randomNumber + 1);\n }\n\n return nonce;\n }\n\n static async sendOfflineTracking({\n requester,\n storage,\n }: SendOfflineTrackingParametersType) {\n const readResult = storage.read();\n\n if (readResult.ok && readResult.data.requestParameters) {\n const { requestParameters } = readResult.data;\n const successfulTimestamps: number[] = [];\n\n // --- Note ---\n // `for..of` + `await` is used to make sure that failed requests are sent one by one\n // without risk of getting the same timestamp at the server, which might happen, for example,\n // with `.forEach` or `.map` starting requests in async callbacks at the same time\n for (const parameters of requestParameters) {\n const { timestamp, isExperiment, ...params } = parameters;\n let result: Result<boolean, KameleoonError>;\n\n if (isExperiment) {\n result = await requester.trackExperiment(\n params as TrackExperimentParamsType,\n );\n } else {\n result = await requester.trackData(params as TrackDataParamsType);\n }\n\n result.ok && result.data && successfulTimestamps.push(timestamp);\n }\n\n this.deleteFromOfflineTracking({\n storage,\n timestamps: successfulTimestamps,\n });\n }\n }\n\n static compareSemVer({\n version,\n compareVersion,\n operator,\n }: {\n version: string;\n compareVersion: string;\n operator: VersionMatchType;\n }): Result<boolean, KameleoonError> {\n const versionResult = this.validateVersion(version);\n const compareVersionResult = this.validateVersion(compareVersion);\n\n if (!versionResult.ok) {\n return Err(versionResult.error);\n }\n\n if (!compareVersionResult.ok) {\n return Err(compareVersionResult.error);\n }\n\n const [major, minor, patch] = versionResult.data;\n const [compareMajor, compareMinor, comparePatch] =\n compareVersionResult.data;\n\n const [isMajorEqual, isMinorEqual, isPatchEqual] = [\n major === compareMajor,\n minor === compareMinor,\n patch === comparePatch,\n ];\n\n switch (operator) {\n case VersionMatchType.EQUAL:\n return Ok(isMajorEqual && isMinorEqual && isPatchEqual);\n case VersionMatchType.GREATER:\n return Ok(\n major > compareMajor ||\n (isMajorEqual && minor > compareMinor) ||\n (isMajorEqual && isMinorEqual && patch > comparePatch),\n );\n case VersionMatchType.LOWER:\n return Ok(\n major < compareMajor ||\n (isMajorEqual && minor < compareMinor) ||\n (isMajorEqual && isMinorEqual && patch < comparePatch),\n );\n default:\n exhaustCheck(operator);\n }\n }\n\n private static addItemToOfflineTracking({\n item,\n isExperiment,\n storage,\n onSuccess,\n }: AddToOfflineTrackingParametersType): void {\n const readResult = storage.read();\n\n const data = readResult.ok ? readResult.data : {};\n\n const { requestParameters } = data;\n\n const newItem = {\n ...item,\n timestamp: new Date().getTime(),\n isExperiment,\n };\n\n const newRequestParameters = requestParameters\n ? [...requestParameters, newItem]\n : [newItem];\n\n const writeResult = storage.write({\n requestParameters: newRequestParameters,\n });\n\n if (writeResult.ok && onSuccess) {\n onSuccess();\n }\n }\n\n private static deleteFromOfflineTracking({\n timestamps,\n storage,\n }: DeleteFromOfflineTrackingParametersType): void {\n const readResult = storage.read();\n\n if (readResult.ok) {\n const { requestParameters } = readResult.data;\n\n const newParameters = requestParameters?.filter(\n (item) => !timestamps.includes(item.timestamp),\n );\n\n storage.write({ requestParameters: newParameters });\n }\n }\n\n private static validateVersion(\n version: string,\n ): Result<[number, number, number], KameleoonError> {\n const versionParts = version.split('.').map((x) => parseInt(x, 10));\n\n while (versionParts.length < 3) {\n versionParts.push(0);\n }\n\n if (versionParts.some((item) => isNaN(item))) {\n return Err(\n new KameleoonError(KameleoonException.SemanticVersionParse, version),\n );\n }\n\n return Ok(versionParts.slice(0, 3) as [number, number, number]);\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"utilities.js","names":["Utilities","a","_classCallCheck","_createClass","key","value","checkTargeting","segment","visitorCode","targetingData","experimentId","variationConfiguration","clientConfiguration","packageInfo","dataManager","conditionsData","firstLevel","length","Ok","Err","KameleoonError","KameleoonException","Initialization","variations","assignedVariationsResult","getStoredVariations","ok","data","targetingTree","getTree","trees","segments","ruleMap","hasTargetingType","TargetingType","SEGMENT","TARGET_FEATURE_FLAG","result","evaluate","variationData","sdkInfo","validateVisitorCode","VisitorCodeEmpty","VISITOR_CODE_MAX_LENGTH","VisitorCodeMaxLength","getDataUrl","b","updateUrl","url","shouldSendConversionData","type","KameleoonData","Conversion","isConsentProvided","resultUrl","push","UrlParameter","Nonce","getNonce","unsentData","getUnsentData","size","i","j","_createForOfIteratorHelper","values","s","n","done","item","Array","isArray","forEach","arrayItem","e","f","join","apply","arguments","_asyncToGenerator","_regeneratorRuntime","mark","c","d","g","h","k","l","m","o","p","q","r","t","wrap","u","prev","next","featureFlagVariation","requester","isOfflineModeOn","offlineTrackingStorage","variationId","rule","isTargetedRule","userAgent","getUserAgent","dataUrl","hasVariationData","abrupt","resultVariationId","isUnallocated","parameters","body","trackExperiment","sent","clearUnsentData","clearUnsentDataByKey","addItemToOfflineTracking","storage","isExperiment","stop","convertTimeUnit","time","timeUnit","timeMap","_defineProperty","TimeUnit","Minute","Milliseconds","Hour","Day","Week","Month","parseFeatureVariable","variable","VariableType","BOOLEAN","STRING","NUMBER","numberValue","Number","isNaN","NumberParse","JSON","jsonValue","parse","err","JSONParse","exhaustCheck","parseVisitorData","filters","currentVisit","previousVisits","browserFilter","browser","customDataFilter","customData","operatingSystemFilter","operatingSystem","conversionsFilter","conversions","deviceFilter","device","geolocationFilter","geolocation","experimentsFilter","experiments","pageViewFilter","pageViews","visits","_toConsumableArray","resultData","PageView","_listFromVisits","Browser","_fromVisits","visit","experimentData","experimentEvents","x","y","experimentEvent","A","id","updateStoredVariations","Device","GeolocationData","CustomData","OperatingSystem","visitsData","VisitsData","_fromRemoteVisits","parseRegExp","split","_slicedToArray","_","expression","flags","RegExp","storedData","storedTargetingData","userAgentData","UserAgent","isCustomData","dataItem","insertInOrderedListMutably","list","element","order","includes","index","findIndex","Order","Ascending","splice","updateCache","cacheManager","cacheData","getAliveItem","newCacheData","_objectSpread","expirationTime","Date","now","CACHE_ITEM_LIFETIME","Second","add","lifetime","getTrackingCode","trackingCache","resultString","updatedCacheData","Object","entries","concat","sendOfflineTracking","trackData","cleanup","onSuccess","randomNumber","hexLength","HEX_CHARACTERS","nonce","Math","floor","random","substring","readResult","read","requestParameters","successfulTimestamps","timestamp","params","_objectWithoutProperties","_excluded","t0","finish","deleteFromOfflineTracking","timestamps","compareSemVer","version","compareVersion","operator","versionResult","validateVersion","compareVersionResult","error","major","minor","patch","compareMajor","compareMinor","comparePatch","isMajorEqual","isMinorEqual","isPatchEqual","VersionMatchType","EQUAL","GREATER","LOWER","isServerEnvironment","response","generateRandomString","characters","randomCharacterArray","newItem","getTime","newRequestParameters","writeResult","write","newParameters","filter","versionParts","map","parseInt","some","SemanticVersionParse","slice","exports"],"sources":["../../src/utilities/utilities.ts"],"sourcesContent":["import { ServerResponse } from 'http';\nimport { Err, Ok, Result } from 'ts-res';\nimport {\n KameleoonError,\n KameleoonException,\n exhaustCheck,\n} from 'src/kameleoonError';\nimport {\n FeatureVariableResultType,\n Milliseconds,\n TrackingCacheItemType,\n VariableType,\n} from 'src/types';\nimport { FeatureVariableType, JSONType } from 'src/clientConfiguration';\nimport {\n Browser,\n Conversion,\n CustomData,\n DataManager,\n Device,\n GeolocationData,\n KameleoonData,\n KameleoonDataType,\n OperatingSystem,\n PageView,\n VisitsData,\n} from 'src/kameleoonData';\nimport { CACHE_ITEM_LIFETIME } from 'src/constants';\nimport { CacheManager } from 'src/cacheManager';\nimport {\n TrackExperimentParamsType,\n TrackDataParamsType,\n VisitType,\n UrlParameter,\n} from 'src/requester';\nimport { VersionMatchType, TargetingType } from 'src/targeting';\nimport { KameleoonVisitorDataType } from 'src/kameleoonData/types';\nimport { FeatureFlagVariationsType } from 'src/storage/types';\nimport { VISITOR_CODE_MAX_LENGTH, HEX_CHARACTERS } from './constants';\nimport {\n CheckTargetingParametersType,\n ManageCacheParametersType,\n TrackDataParametersType,\n TrackRuleParametersType,\n AddToOfflineTrackingParametersType,\n SendOfflineTrackingParametersType,\n DeleteFromOfflineTrackingParametersType,\n ParseVisitorDataParametersType,\n InsertInOrderedListParametersType,\n Order,\n TimeUnit,\n GetDataUrlParametersType,\n} from './types';\n\nexport class Utilities {\n static checkTargeting({\n segment,\n visitorCode,\n targetingData,\n experimentId,\n variationConfiguration,\n clientConfiguration,\n packageInfo,\n dataManager,\n }: CheckTargetingParametersType): Result<boolean, KameleoonError> {\n if (!segment || !segment.conditionsData.firstLevel.length) {\n return Ok(true);\n }\n\n if (!variationConfiguration) {\n return Err(new KameleoonError(KameleoonException.Initialization));\n }\n\n let variations: FeatureFlagVariationsType = {};\n\n const assignedVariationsResult =\n variationConfiguration.getStoredVariations(visitorCode);\n\n if (assignedVariationsResult.ok) {\n variations = assignedVariationsResult.data;\n }\n\n const targetingTree = dataManager.getTree(segment);\n\n let trees = undefined;\n let segments = undefined;\n let ruleMap = undefined;\n\n // --- Note ---\n // Only getting trees and segments targeting type\n if (targetingTree.hasTargetingType(TargetingType.SEGMENT)) {\n trees = dataManager.trees;\n segments = clientConfiguration.segments;\n }\n\n // --- Note ---\n // Only constructing rule map for targeting type\n if (targetingTree.hasTargetingType(TargetingType.TARGET_FEATURE_FLAG)) {\n ruleMap = clientConfiguration.ruleMap;\n }\n\n const result = targetingTree.evaluate({\n variationData: variations,\n sdkInfo: packageInfo,\n segments,\n ruleMap,\n trees,\n targetingData,\n experimentId,\n visitorCode,\n });\n\n return result;\n }\n\n static validateVisitorCode(\n visitorCode: string,\n ): Result<void, KameleoonError> {\n if (visitorCode.length === 0) {\n return Err(new KameleoonError(KameleoonException.VisitorCodeEmpty));\n }\n\n if (visitorCode.length > VISITOR_CODE_MAX_LENGTH) {\n return Err(new KameleoonError(KameleoonException.VisitorCodeMaxLength));\n }\n\n return Ok();\n }\n\n static getDataUrl({\n visitorCode,\n dataManager,\n isConsentProvided,\n }: GetDataUrlParametersType): string {\n const unsentData = dataManager.getUnsentData(visitorCode);\n const resultUrl: string[] = [];\n\n if (!unsentData || !unsentData.size) {\n return '';\n }\n\n function updateUrl(data: KameleoonDataType): void {\n if (!data.url) {\n return;\n }\n\n const shouldSendAllData = isConsentProvided;\n const shouldSendConversionData =\n data.data.type === KameleoonData.Conversion;\n\n if (shouldSendAllData || shouldSendConversionData) {\n resultUrl.push(\n data.url + UrlParameter.Nonce + Utilities.getNonce() + '\\n',\n );\n }\n }\n\n for (const item of unsentData.values()) {\n if (Array.isArray(item)) {\n item.forEach((arrayItem) => updateUrl(arrayItem));\n } else {\n updateUrl(item);\n }\n }\n\n return resultUrl.join('');\n }\n\n static async trackFeatureExperiment({\n featureFlagVariation,\n dataManager,\n visitorCode,\n requester,\n isOfflineModeOn,\n isConsentProvided,\n offlineTrackingStorage,\n }: TrackRuleParametersType): Promise<void> {\n const { variationId, rule, isTargetedRule } = featureFlagVariation;\n\n const userAgent = this.getUserAgent(visitorCode, dataManager);\n\n const dataUrl = this.getDataUrl({\n visitorCode,\n dataManager,\n isConsentProvided,\n });\n\n if (!isConsentProvided) {\n const hasVariationData = !!variationId || !!rule;\n\n if (!dataUrl && !hasVariationData) {\n return;\n }\n }\n\n const resultVariationId = variationId || 0;\n const isUnallocated = variationId === null;\n\n // --- Note ---\n // Experiment id is not needed for unallocated visitors\n // So we just use 0 as a fallback\n const experimentId = rule ? rule.experimentId : 0;\n\n const parameters = {\n visitorCode,\n isUnallocated,\n body: dataUrl,\n experimentId,\n variationId: resultVariationId,\n userAgent,\n isTargetedRule,\n isConsentProvided,\n };\n\n const result = await requester.trackExperiment(parameters);\n\n if (result.ok) {\n if (!isConsentProvided) {\n dataManager.clearUnsentDataByKey(visitorCode, KameleoonData.Conversion);\n } else {\n dataManager.clearUnsentData(visitorCode);\n }\n }\n\n if (!result.ok && isOfflineModeOn) {\n this.addItemToOfflineTracking({\n item: parameters,\n storage: offlineTrackingStorage,\n isExperiment: true,\n });\n }\n }\n\n static convertTimeUnit(time: number, timeUnit: TimeUnit): number {\n const timeMap = {\n [TimeUnit.Minute]: Milliseconds.Minute,\n [TimeUnit.Hour]: Milliseconds.Hour,\n [TimeUnit.Day]: Milliseconds.Day,\n [TimeUnit.Week]: Milliseconds.Week,\n [TimeUnit.Month]: Milliseconds.Month,\n };\n\n return time / timeMap[timeUnit];\n }\n\n static parseFeatureVariable(\n variable: FeatureVariableType,\n ): Result<FeatureVariableResultType, KameleoonError> {\n const { type, value } = variable;\n\n switch (type) {\n case VariableType.BOOLEAN:\n return Ok({\n type,\n value: Boolean(value),\n });\n case VariableType.STRING:\n return Ok({\n type,\n value: String(value),\n });\n case VariableType.NUMBER:\n const numberValue = Number(value);\n\n if (Number.isNaN(numberValue)) {\n return Err(\n new KameleoonError(KameleoonException.NumberParse, String(value)),\n );\n }\n\n return Ok({\n type,\n value: numberValue,\n });\n case VariableType.JSON:\n try {\n const jsonValue: JSONType = JSON.parse(String(variable.value));\n\n return Ok({\n type,\n value: jsonValue,\n });\n } catch (err) {\n return Err(new KameleoonError(KameleoonException.JSONParse, err));\n }\n default:\n exhaustCheck(type);\n }\n }\n\n static parseVisitorData({\n data,\n filters,\n visitorCode,\n variationConfiguration,\n }: ParseVisitorDataParametersType): KameleoonDataType[] {\n const { currentVisit, previousVisits } = data;\n const {\n browser: browserFilter,\n customData: customDataFilter,\n operatingSystem: operatingSystemFilter,\n conversions: conversionsFilter,\n device: deviceFilter,\n geolocation: geolocationFilter,\n experiments: experimentsFilter,\n pageViews: pageViewFilter,\n } = filters;\n\n let visits: VisitType[] = [];\n\n if (currentVisit) {\n visits.push(currentVisit);\n }\n\n if (previousVisits) {\n visits.push(...previousVisits);\n }\n\n if (!visits) {\n return [];\n }\n\n const resultData: KameleoonDataType[] = [];\n\n if (pageViewFilter) {\n const pageViews = PageView._listFromVisits(visits);\n\n if (pageViews.length) {\n resultData.push(...pageViews);\n }\n }\n\n // --- Browser ---\n if (browserFilter) {\n const browser = Browser._fromVisits(visits);\n\n if (browser) {\n resultData.push(browser);\n }\n }\n\n // --- Experiments ---\n if (experimentsFilter) {\n const experimentData: FeatureFlagVariationsType = {};\n\n // --- Note ---\n // Going backwards to get the latest experiment data\n for (let i = visits.length - 1; i >= 0; i--) {\n const visit = visits[i];\n\n if (!visit.experimentEvents) {\n continue;\n }\n\n for (const experimentEvent of visit.experimentEvents) {\n const { id, variationId } = experimentEvent.data;\n\n experimentData[id] = variationId;\n }\n }\n\n variationConfiguration.updateStoredVariations(\n visitorCode,\n experimentData,\n );\n }\n\n // --- Device ---\n if (deviceFilter) {\n const device = Device._fromVisits(visits);\n\n if (device) {\n resultData.push(device);\n }\n }\n\n // --- Geolocation ---\n if (geolocationFilter) {\n const geolocation = GeolocationData._fromVisits(visits);\n\n if (geolocation) {\n resultData.push(geolocation);\n }\n }\n\n // --- Custom data ---\n if (customDataFilter) {\n resultData.push(...CustomData._listFromVisits(visits));\n }\n\n // --- Operating system ---\n if (operatingSystemFilter) {\n const operatingSystem = OperatingSystem._fromVisits(visits);\n\n if (operatingSystem) {\n resultData.push(operatingSystem);\n }\n }\n\n // --- Conversions ---\n if (conversionsFilter) {\n resultData.push(...Conversion._listFromVisits(visits));\n }\n\n const visitsData = VisitsData._fromRemoteVisits(\n visits,\n Boolean(currentVisit),\n );\n\n if (visitsData) {\n resultData.push(visitsData);\n }\n\n return resultData;\n }\n\n static parseRegExp(value: string): RegExp {\n if (value[0] === '/') {\n const [_, expression, flags] = value.split('/');\n\n return new RegExp(expression, flags);\n }\n\n return new RegExp(value);\n }\n\n static getUserAgent(\n visitorCode: string,\n dataManager: DataManager,\n ): string | undefined {\n const storedData = dataManager.storedTargetingData;\n\n const targetingData: KameleoonVisitorDataType | undefined =\n storedData && storedData[visitorCode];\n\n if (targetingData) {\n const userAgentData = targetingData[KameleoonData.UserAgent];\n\n if (userAgentData) {\n return userAgentData.value;\n }\n }\n\n return undefined;\n }\n\n static isCustomData(dataItem: KameleoonDataType): dataItem is CustomData {\n return dataItem.data.type === KameleoonData.CustomData;\n }\n\n /**\n * Insert element in ordered list, if element already exists in list, does nothing\n * @param list - list to insert element\n * @param element - element to insert\n * @param order - order of list\n */\n static insertInOrderedListMutably({\n list,\n element,\n order,\n }: InsertInOrderedListParametersType): void {\n if (list.includes(element)) {\n return;\n }\n\n const index = list.findIndex((item) =>\n order === Order.Ascending ? item >= element : item <= element,\n );\n\n if (index === -1) {\n list.push(element);\n } else {\n list.splice(index, 0, element);\n }\n }\n\n static updateCache({\n cacheManager,\n visitorCode,\n experimentId,\n variationId,\n }: ManageCacheParametersType): void {\n const cacheData = cacheManager.getAliveItem(visitorCode);\n\n const newCacheData = cacheData ? { ...cacheData } : {};\n\n newCacheData[experimentId] = {\n variationId,\n expirationTime: Date.now() + CACHE_ITEM_LIFETIME * Milliseconds.Second,\n };\n\n cacheManager.add({\n key: visitorCode,\n data: newCacheData,\n lifetime: CACHE_ITEM_LIFETIME,\n });\n }\n\n static getTrackingCode(\n trackingCache: CacheManager<TrackingCacheItemType>,\n visitorCode: string,\n ): string {\n let resultString = 'window.kameleoonQueue=window.kameleoonQueue||[];';\n\n const cacheData = trackingCache.getAliveItem(visitorCode);\n\n if (!cacheData) {\n return resultString;\n }\n\n const updatedCacheData: TrackingCacheItemType = {};\n\n Object.entries(cacheData).forEach(\n ([experimentId, { variationId, expirationTime }]) => {\n if (expirationTime > Date.now()) {\n resultString += `window.kameleoonQueue.push(['Experiments.assignVariation',${experimentId},${variationId}]);`;\n resultString += `window.kameleoonQueue.push(['Experiments.trigger',${experimentId},true]);`;\n\n updatedCacheData[Number(experimentId)] = {\n variationId,\n expirationTime,\n };\n }\n },\n );\n\n // --- Note ---\n // Cache is updated with only alive experiments\n trackingCache.add({\n key: visitorCode,\n data: updatedCacheData,\n lifetime: CACHE_ITEM_LIFETIME,\n });\n\n return resultString;\n }\n\n static async trackData({\n visitorCode,\n dataManager,\n requester,\n isOfflineModeOn,\n offlineTrackingStorage,\n isConsentProvided,\n }: TrackDataParametersType): Promise<void> {\n await this.sendOfflineTracking({\n requester,\n storage: offlineTrackingStorage,\n });\n\n const dataUrl = this.getDataUrl({\n visitorCode,\n dataManager,\n isConsentProvided,\n });\n\n if (!isConsentProvided && !dataUrl) {\n return;\n }\n\n const userAgent = this.getUserAgent(visitorCode, dataManager);\n\n const parameters = {\n visitorCode,\n body: dataUrl,\n userAgent,\n };\n\n const result = await requester.trackData(parameters);\n\n const cleanup = () =>\n isConsentProvided\n ? dataManager.clearUnsentData(visitorCode)\n : dataManager.clearUnsentDataByKey(\n visitorCode,\n KameleoonData.Conversion,\n );\n\n if (result.ok) {\n cleanup();\n }\n\n if (!result.ok && isOfflineModeOn) {\n this.addItemToOfflineTracking({\n item: parameters,\n storage: offlineTrackingStorage,\n isExperiment: false,\n onSuccess: cleanup,\n });\n }\n }\n\n static getNonce(): string {\n const hexLength = HEX_CHARACTERS.length;\n let nonce: string = '';\n\n for (let i = 0; i < hexLength; i++) {\n const randomNumber = Math.floor(Math.random() * hexLength);\n nonce += HEX_CHARACTERS.substring(randomNumber, randomNumber + 1);\n }\n\n return nonce;\n }\n\n static async sendOfflineTracking({\n requester,\n storage,\n }: SendOfflineTrackingParametersType) {\n const readResult = storage.read();\n\n if (readResult.ok && readResult.data.requestParameters) {\n const { requestParameters } = readResult.data;\n const successfulTimestamps: number[] = [];\n\n // --- Note ---\n // `for..of` + `await` is used to make sure that failed requests are sent one by one\n // without risk of getting the same timestamp at the server, which might happen, for example,\n // with `.forEach` or `.map` starting requests in async callbacks at the same time\n for (const parameters of requestParameters) {\n const { timestamp, isExperiment, ...params } = parameters;\n let result: Result<boolean, KameleoonError>;\n\n if (isExperiment) {\n result = await requester.trackExperiment(\n params as TrackExperimentParamsType,\n );\n } else {\n result = await requester.trackData(params as TrackDataParamsType);\n }\n\n result.ok && result.data && successfulTimestamps.push(timestamp);\n }\n\n this.deleteFromOfflineTracking({\n storage,\n timestamps: successfulTimestamps,\n });\n }\n }\n\n static compareSemVer({\n version,\n compareVersion,\n operator,\n }: {\n version: string;\n compareVersion: string;\n operator: VersionMatchType;\n }): Result<boolean, KameleoonError> {\n const versionResult = this.validateVersion(version);\n const compareVersionResult = this.validateVersion(compareVersion);\n\n if (!versionResult.ok) {\n return Err(versionResult.error);\n }\n\n if (!compareVersionResult.ok) {\n return Err(compareVersionResult.error);\n }\n\n const [major, minor, patch] = versionResult.data;\n const [compareMajor, compareMinor, comparePatch] =\n compareVersionResult.data;\n\n const [isMajorEqual, isMinorEqual, isPatchEqual] = [\n major === compareMajor,\n minor === compareMinor,\n patch === comparePatch,\n ];\n\n switch (operator) {\n case VersionMatchType.EQUAL:\n return Ok(isMajorEqual && isMinorEqual && isPatchEqual);\n case VersionMatchType.GREATER:\n return Ok(\n major > compareMajor ||\n (isMajorEqual && minor > compareMinor) ||\n (isMajorEqual && isMinorEqual && patch > comparePatch),\n );\n case VersionMatchType.LOWER:\n return Ok(\n major < compareMajor ||\n (isMajorEqual && minor < compareMinor) ||\n (isMajorEqual && isMinorEqual && patch < comparePatch),\n );\n default:\n exhaustCheck(operator);\n }\n }\n\n static isServerEnvironment<T extends { response: ServerResponse }, U>(\n params: T | U,\n ): params is T {\n return (params as T).response !== undefined;\n }\n\n static generateRandomString(length: number): string {\n const characters = 'abcdefghijklmnopqrstuvwxyz0123456789';\n const randomCharacterArray: string[] = [];\n\n if (length < 0) {\n return '';\n }\n\n for (let i = 0; i < length; i++) {\n randomCharacterArray.push(\n characters[Math.floor(Math.random() * characters.length)],\n );\n }\n\n return randomCharacterArray.join('');\n }\n\n private static addItemToOfflineTracking({\n item,\n isExperiment,\n storage,\n onSuccess,\n }: AddToOfflineTrackingParametersType): void {\n const readResult = storage.read();\n\n const data = readResult.ok ? readResult.data : {};\n\n const { requestParameters } = data;\n\n const newItem = {\n ...item,\n timestamp: new Date().getTime(),\n isExperiment,\n };\n\n const newRequestParameters = requestParameters\n ? [...requestParameters, newItem]\n : [newItem];\n\n const writeResult = storage.write({\n requestParameters: newRequestParameters,\n });\n\n if (writeResult.ok && onSuccess) {\n onSuccess();\n }\n }\n\n private static deleteFromOfflineTracking({\n timestamps,\n storage,\n }: DeleteFromOfflineTrackingParametersType): void {\n const readResult = storage.read();\n\n if (readResult.ok) {\n const { requestParameters } = readResult.data;\n\n const newParameters = requestParameters?.filter(\n (item) => !timestamps.includes(item.timestamp),\n );\n\n storage.write({ requestParameters: newParameters });\n }\n }\n\n private static validateVersion(\n version: string,\n ): Result<[number, number, number], KameleoonError> {\n const versionParts = version.split('.').map((x) => parseInt(x, 10));\n\n while (versionParts.length < 3) {\n versionParts.push(0);\n }\n\n if (versionParts.some((item) => isNaN(item))) {\n return Err(\n new KameleoonError(KameleoonException.SemanticVersionParse, version),\n );\n }\n\n return Ok(versionParts.slice(0, 3) as [number, number, number]);\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","names":[],"sources":["../../src/variationConfiguration/types.ts"],"sourcesContent":["import {\n ClientConfiguration,\n FeatureFlagType,\n RuleItemType,\n} from 'src/clientConfiguration';\nimport { DataManager } from 'src/kameleoonData';\nimport { KameleoonVisitorDataType } from 'src/kameleoonData/types';\nimport { ExternalPackageInfoType } from 'src/types';\n\nexport type FeatureFlagVariationType = {\n variationKey: string;\n variationId: number | null;\n experimentId: number | null;\n featureFlagId: number;\n featureKey: string;\n rule: RuleItemType | null;\n};\n\nexport type GetVariationParametersType = {\n visitorCode: string;\n featureFlag: FeatureFlagType;\n targetingData: KameleoonVisitorDataType;\n withAssignment?: boolean;\n packageInfo: ExternalPackageInfoType;\n clientConfiguration: ClientConfiguration;\n dataManager: DataManager;\n};\n"],"mappings":""}
|
|
1
|
+
{"version":3,"file":"types.js","names":[],"sources":["../../src/variationConfiguration/types.ts"],"sourcesContent":["import {\n ClientConfiguration,\n FeatureFlagType,\n RuleItemType,\n} from 'src/clientConfiguration';\nimport { DataManager } from 'src/kameleoonData';\nimport { KameleoonVisitorDataType } from 'src/kameleoonData/types';\nimport { ExternalPackageInfoType } from 'src/types';\n\nexport type FeatureFlagVariationType = {\n variationKey: string;\n variationId: number | null;\n experimentId: number | null;\n featureFlagId: number;\n featureKey: string;\n rule: RuleItemType | null;\n isTargetedRule?: boolean;\n};\n\nexport type GetVariationParametersType = {\n visitorCode: string;\n featureFlag: FeatureFlagType;\n targetingData: KameleoonVisitorDataType;\n withAssignment?: boolean;\n packageInfo: ExternalPackageInfoType;\n clientConfiguration: ClientConfiguration;\n dataManager: DataManager;\n};\n"],"mappings":""}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.VariationConfiguration=void 0;var _tsRes=require("ts-res"),_hasher=require("../hasher"),_kameleoonError=require("../kameleoonError"),_utilities=require("../utilities"),_types=require("../clientConfiguration/types"),_excluded=["exposition"];function _typeof(a){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a},_typeof(a)}function ownKeys(a,b){var c=Object.keys(a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(a);b&&(d=d.filter(function(b){return Object.getOwnPropertyDescriptor(a,b).enumerable})),c.push.apply(c,d)}return c}function _objectSpread(a){for(var b,c=1;c<arguments.length;c++)b=null==arguments[c]?{}:arguments[c],c%2?ownKeys(Object(b),!0).forEach(function(c){_defineProperty(a,c,b[c])}):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(b)):ownKeys(Object(b)).forEach(function(c){Object.defineProperty(a,c,Object.getOwnPropertyDescriptor(b,c))});return a}function _objectWithoutProperties(a,b){if(null==a)return{};var c,d,e=_objectWithoutPropertiesLoose(a,b);if(Object.getOwnPropertySymbols){var f=Object.getOwnPropertySymbols(a);for(d=0;d<f.length;d++)c=f[d],0<=b.indexOf(c)||Object.prototype.propertyIsEnumerable.call(a,c)&&(e[c]=a[c])}return e}function _objectWithoutPropertiesLoose(a,b){if(null==a)return{};var c,d,e={},f=Object.keys(a);for(d=0;d<f.length;d++)c=f[d],0<=b.indexOf(c)||(e[c]=a[c]);return e}function _createForOfIteratorHelper(a,b){var c="undefined"!=typeof Symbol&&a[Symbol.iterator]||a["@@iterator"];if(!c){if(Array.isArray(a)||(c=_unsupportedIterableToArray(a))||b&&a&&"number"==typeof a.length){c&&(a=c);var d=0,e=function(){};return{s:e,n:function n(){return d>=a.length?{done:!0}:{done:!1,value:a[d++]}},e:function e(a){throw a},f:e}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var f,g=!0,h=!1;return{s:function s(){c=c.call(a)},n:function n(){var a=c.next();return g=a.done,a},e:function e(a){h=!0,f=a},f:function f(){try{g||null==c.return||c.return()}finally{if(h)throw f}}}}function _unsupportedIterableToArray(a,b){if(a){if("string"==typeof a)return _arrayLikeToArray(a,b);var c=Object.prototype.toString.call(a).slice(8,-1);return"Object"===c&&a.constructor&&(c=a.constructor.name),"Map"===c||"Set"===c?Array.from(a):"Arguments"===c||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(c)?_arrayLikeToArray(a,b):void 0}}function _arrayLikeToArray(a,b){(null==b||b>a.length)&&(b=a.length);for(var c=0,d=Array(b);c<b;c++)d[c]=a[c];return d}function _classCallCheck(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function _defineProperties(a,b){for(var c,d=0;d<b.length;d++)c=b[d],c.enumerable=c.enumerable||!1,c.configurable=!0,"value"in c&&(c.writable=!0),Object.defineProperty(a,_toPropertyKey(c.key),c)}function _createClass(a,b,c){return b&&_defineProperties(a.prototype,b),c&&_defineProperties(a,c),Object.defineProperty(a,"prototype",{writable:!1}),a}function _defineProperty(a,b,c){return b=_toPropertyKey(b),b in a?Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!0}):a[b]=c,a}function _toPropertyKey(a){var b=_toPrimitive(a,"string");return"symbol"===_typeof(b)?b:b+""}function _toPrimitive(a,b){if("object"!==_typeof(a)||null===a)return a;var c=a[Symbol.toPrimitive];if(c!==void 0){var d=c.call(a,b||"default");if("object"!==_typeof(d))return d;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===b?String:Number)(a)}var VariationConfiguration=function(){function a(b){_classCallCheck(this,a),_defineProperty(this,"storage",void 0),this.storage=b}return _createClass(a,[{key:"getStoredVariations",value:function getStoredVariations(a){var b=this.storage.read();if(!b.ok)return b;var c=b.data[a];return c?(0,_tsRes.Ok)(c):(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.StorageRead,a))}},{key:"getVariation",value:function getVariation(a){var b=a.visitorCode,c=a.featureFlag,d=a.targetingData,e=a.packageInfo,f=a.clientConfiguration,g=a.dataManager,h=a.withAssignment,i=_utilities.Utilities.validateVisitorCode(b);if(!i.ok)return(0,_tsRes.Err)(i.error);var j,k=c.rules,l=c.featureKey,m=c.id,n=c.defaultVariationKey,o=_createForOfIteratorHelper(k);try{for(o.s();!(j=o.n()).done;){var p=j.value,q=p.segment,r=p.experimentId,s=p.id,t=p.exposition,u=p.respoolTime,v=p.variationByExposition,w=_utilities.Utilities.checkTargeting({segment:q,visitorCode:b,experimentId:r,targetingData:d,packageInfo:e,clientConfiguration:f,dataManager:g,variationConfiguration:this});if(!w.ok)return w;if(w.data){var x=_hasher.Hasher.getHashDouble({visitorCode:b,respoolTime:u,id:s+""});if(x<=t){var y,z=0,A=_hasher.Hasher.getHashDouble({visitorCode:b,respoolTime:u,id:r+""}),B=_createForOfIteratorHelper(v);try{for(B.s();!(y=B.n()).done;){var C=y.value;if(z+=C.exposition,A<=z){void 0!==h&&h&&this.updateStoredVariations(b,_defineProperty({},r,C.variationId));var D=C.exposition,E=_objectWithoutProperties(C,_excluded);return(0,_tsRes.Ok)(_objectSpread(_objectSpread({},E),{},{rule:p,featureFlagId:m,featureKey:l,experimentId:r}))}}}catch(a){B.e(a)}finally{B.f()}}if(p.type===_types.RuleType.TARGETED_DELIVERY)
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.VariationConfiguration=void 0;var _tsRes=require("ts-res"),_hasher=require("../hasher"),_kameleoonError=require("../kameleoonError"),_utilities=require("../utilities"),_types=require("../clientConfiguration/types"),_excluded=["exposition"];function _typeof(a){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a},_typeof(a)}function ownKeys(a,b){var c=Object.keys(a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(a);b&&(d=d.filter(function(b){return Object.getOwnPropertyDescriptor(a,b).enumerable})),c.push.apply(c,d)}return c}function _objectSpread(a){for(var b,c=1;c<arguments.length;c++)b=null==arguments[c]?{}:arguments[c],c%2?ownKeys(Object(b),!0).forEach(function(c){_defineProperty(a,c,b[c])}):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(b)):ownKeys(Object(b)).forEach(function(c){Object.defineProperty(a,c,Object.getOwnPropertyDescriptor(b,c))});return a}function _objectWithoutProperties(a,b){if(null==a)return{};var c,d,e=_objectWithoutPropertiesLoose(a,b);if(Object.getOwnPropertySymbols){var f=Object.getOwnPropertySymbols(a);for(d=0;d<f.length;d++)c=f[d],0<=b.indexOf(c)||Object.prototype.propertyIsEnumerable.call(a,c)&&(e[c]=a[c])}return e}function _objectWithoutPropertiesLoose(a,b){if(null==a)return{};var c,d,e={},f=Object.keys(a);for(d=0;d<f.length;d++)c=f[d],0<=b.indexOf(c)||(e[c]=a[c]);return e}function _createForOfIteratorHelper(a,b){var c="undefined"!=typeof Symbol&&a[Symbol.iterator]||a["@@iterator"];if(!c){if(Array.isArray(a)||(c=_unsupportedIterableToArray(a))||b&&a&&"number"==typeof a.length){c&&(a=c);var d=0,e=function(){};return{s:e,n:function n(){return d>=a.length?{done:!0}:{done:!1,value:a[d++]}},e:function e(a){throw a},f:e}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var f,g=!0,h=!1;return{s:function s(){c=c.call(a)},n:function n(){var a=c.next();return g=a.done,a},e:function e(a){h=!0,f=a},f:function f(){try{g||null==c.return||c.return()}finally{if(h)throw f}}}}function _unsupportedIterableToArray(a,b){if(a){if("string"==typeof a)return _arrayLikeToArray(a,b);var c=Object.prototype.toString.call(a).slice(8,-1);return"Object"===c&&a.constructor&&(c=a.constructor.name),"Map"===c||"Set"===c?Array.from(a):"Arguments"===c||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(c)?_arrayLikeToArray(a,b):void 0}}function _arrayLikeToArray(a,b){(null==b||b>a.length)&&(b=a.length);for(var c=0,d=Array(b);c<b;c++)d[c]=a[c];return d}function _classCallCheck(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function _defineProperties(a,b){for(var c,d=0;d<b.length;d++)c=b[d],c.enumerable=c.enumerable||!1,c.configurable=!0,"value"in c&&(c.writable=!0),Object.defineProperty(a,_toPropertyKey(c.key),c)}function _createClass(a,b,c){return b&&_defineProperties(a.prototype,b),c&&_defineProperties(a,c),Object.defineProperty(a,"prototype",{writable:!1}),a}function _defineProperty(a,b,c){return b=_toPropertyKey(b),b in a?Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!0}):a[b]=c,a}function _toPropertyKey(a){var b=_toPrimitive(a,"string");return"symbol"===_typeof(b)?b:b+""}function _toPrimitive(a,b){if("object"!==_typeof(a)||null===a)return a;var c=a[Symbol.toPrimitive];if(c!==void 0){var d=c.call(a,b||"default");if("object"!==_typeof(d))return d;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===b?String:Number)(a)}var VariationConfiguration=function(){function a(b){_classCallCheck(this,a),_defineProperty(this,"storage",void 0),this.storage=b}return _createClass(a,[{key:"getStoredVariations",value:function getStoredVariations(a){var b=this.storage.read();if(!b.ok)return b;var c=b.data[a];return c?(0,_tsRes.Ok)(c):(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.StorageRead,a))}},{key:"getVariation",value:function getVariation(a){var b=a.visitorCode,c=a.featureFlag,d=a.targetingData,e=a.packageInfo,f=a.clientConfiguration,g=a.dataManager,h=a.withAssignment,i=_utilities.Utilities.validateVisitorCode(b);if(!i.ok)return(0,_tsRes.Err)(i.error);var j,k=c.rules,l=c.featureKey,m=c.id,n=c.defaultVariationKey,o=_createForOfIteratorHelper(k);try{for(o.s();!(j=o.n()).done;){var p=j.value,q=p.segment,r=p.experimentId,s=p.id,t=p.exposition,u=p.respoolTime,v=p.variationByExposition,w=_utilities.Utilities.checkTargeting({segment:q,visitorCode:b,experimentId:r,targetingData:d,packageInfo:e,clientConfiguration:f,dataManager:g,variationConfiguration:this});if(!w.ok)return w;if(w.data){var x=_hasher.Hasher.getHashDouble({visitorCode:b,respoolTime:u,id:s+""});if(x<=t){var y,z=0,A=_hasher.Hasher.getHashDouble({visitorCode:b,respoolTime:u,id:r+""}),B=_createForOfIteratorHelper(v);try{for(B.s();!(y=B.n()).done;){var C=y.value;if(z+=C.exposition,A<=z){void 0!==h&&h&&this.updateStoredVariations(b,_defineProperty({},r,C.variationId));var D=C.exposition,E=_objectWithoutProperties(C,_excluded);return(0,_tsRes.Ok)(_objectSpread(_objectSpread({},E),{},{rule:p,featureFlagId:m,featureKey:l,experimentId:r,isTargetedRule:p.type===_types.RuleType.TARGETED_DELIVERY}))}}}catch(a){B.e(a)}finally{B.f()}}if(p.type===_types.RuleType.TARGETED_DELIVERY)return(0,_tsRes.Ok)({featureKey:l,featureFlagId:m,experimentId:null,variationKey:n,variationId:null,rule:null,isTargetedRule:!0})}}}catch(a){o.e(a)}finally{o.f()}return(0,_tsRes.Ok)({featureKey:l,featureFlagId:m,experimentId:null,variationKey:n,variationId:null,rule:null})}},{key:"updateStoredVariations",value:function updateStoredVariations(a,b){var c=this.storage.read();if(!c.ok&&c.error.type===_kameleoonError.KameleoonException.StorageParse)return c;var d=c.ok?c.data:{};return d[a]?d[a]=_objectSpread(_objectSpread({},d[a]),b):d=_objectSpread(_objectSpread({},d),{},_defineProperty({},a,_objectSpread({},b))),this.storage.write(d)}}]),a}();exports.VariationConfiguration=VariationConfiguration;
|
|
2
2
|
//# sourceMappingURL=variationConfiguration.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"variationConfiguration.js","names":["VariationConfiguration","a","externalStorage","_classCallCheck","_defineProperty","storage","_createClass","key","value","getStoredVariations","visitorCode","result","read","ok","featureFlagVariations","data","Ok","Err","KameleoonError","KameleoonException","StorageRead","getVariation","featureFlag","targetingData","packageInfo","clientConfiguration","dataManager","h","withAssignment","validateResult","Utilities","validateVisitorCode","error","j","rules","featureKey","featureFlagId","id","defaultVariationKey","o","_createForOfIteratorHelper","s","n","done","rule","segment","experimentId","exposition","respoolTime","variationByExposition","targetingResult","checkTargeting","variationConfiguration","ruleHash","Hasher","getHashDouble","y","totalDeviation","variationHash","B","variation","updateStoredVariations","variationId","restParameters","_objectWithoutProperties","_excluded","_objectSpread","e","f","type","RuleType","TARGETED_DELIVERY","variationKey","variationData","StorageParse","updatedVariationData","write","exports"],"sources":["../../src/variationConfiguration/variationConfiguration.ts"],"sourcesContent":["import { Err, Ok, Result } from 'ts-res';\nimport { Hasher } from 'src/hasher';\nimport { KameleoonError, KameleoonException } from 'src/kameleoonError';\nimport { IExternalStorage, VariationDataType } from 'src/storage';\nimport { Utilities } from 'src/utilities';\nimport { RuleType } from 'src/clientConfiguration/types';\nimport { FeatureFlagVariationType, GetVariationParametersType } from './types';\nimport { FeatureFlagVariationsType } from 'src/storage/types';\n\ninterface IVariationConfiguration {\n /**\n * @method getStoredVariations - obtains campaigns with according variations that are *already assigned* and *stored* in the `variationStorage`.\n */\n getStoredVariations(\n visitorCode: string,\n ): Result<FeatureFlagVariationsType, KameleoonError>;\n /**\n * @method updateStoredVariations - updates stored variations for the visitor\n */\n updateStoredVariations: (\n visitorCode: string,\n variationData: FeatureFlagVariationsType,\n ) => void;\n /**\n * @method getVariation - obtains variation for the rule of the feature flag which is both targeted and has a variation, if no such rule was found, returns empty rule with default `variationKey`, given an option `withAssignment` of `true` will also assign a new variation and save it in the storage\n */\n getVariation: (\n params: GetVariationParametersType,\n ) => Result<FeatureFlagVariationType, KameleoonError>;\n}\n\nexport class VariationConfiguration implements IVariationConfiguration {\n private storage: IExternalStorage<VariationDataType>;\n\n constructor(externalStorage: IExternalStorage<VariationDataType>) {\n this.storage = externalStorage;\n }\n\n public getStoredVariations(\n visitorCode: string,\n ): Result<FeatureFlagVariationsType, KameleoonError> {\n const result = this.storage.read();\n\n if (!result.ok) {\n return result;\n }\n\n const featureFlagVariations = result.data[visitorCode];\n\n if (!featureFlagVariations) {\n return Err(\n new KameleoonError(KameleoonException.StorageRead, visitorCode),\n );\n }\n\n return Ok(featureFlagVariations);\n }\n\n public getVariation({\n visitorCode,\n featureFlag,\n targetingData,\n packageInfo,\n clientConfiguration,\n dataManager,\n withAssignment = false,\n }: GetVariationParametersType): Result<\n FeatureFlagVariationType,\n KameleoonError\n > {\n const validateResult = Utilities.validateVisitorCode(visitorCode);\n\n if (!validateResult.ok) {\n return Err(validateResult.error);\n }\n\n const {\n rules,\n featureKey,\n id: featureFlagId,\n defaultVariationKey,\n } = featureFlag;\n\n for (const rule of rules) {\n const {\n segment,\n experimentId,\n id,\n exposition,\n respoolTime,\n variationByExposition,\n } = rule;\n\n // --- Check targeting ---\n const targetingResult = Utilities.checkTargeting({\n segment,\n visitorCode,\n experimentId,\n targetingData,\n packageInfo,\n clientConfiguration,\n dataManager,\n variationConfiguration: this,\n });\n\n if (!targetingResult.ok) {\n return targetingResult;\n }\n\n if (!targetingResult.data) {\n continue;\n }\n\n // --- Note ---\n // Calculate new variation (and assign it if `withAssignment` is `true`)\n // First the the exposed rule is calculated and then the variation inside of it\n const ruleHash = Hasher.getHashDouble({\n visitorCode,\n respoolTime,\n id: String(id),\n });\n\n if (ruleHash <= exposition) {\n let totalDeviation = 0;\n\n const variationHash = Hasher.getHashDouble({\n visitorCode,\n respoolTime,\n id: String(experimentId),\n });\n\n for (const variation of variationByExposition) {\n totalDeviation += variation.exposition;\n\n if (variationHash <= totalDeviation) {\n if (withAssignment) {\n this.updateStoredVariations(visitorCode, {\n [experimentId]: variation.variationId,\n });\n }\n\n const { exposition, ...restParameters } = variation;\n\n return Ok({\n ...restParameters,\n rule,\n featureFlagId,\n featureKey,\n experimentId,\n });\n }\n }\n }\n\n if (rule.type === RuleType.TARGETED_DELIVERY) {\n break;\n }\n }\n\n return Ok({\n featureKey,\n featureFlagId,\n experimentId: null,\n variationKey: defaultVariationKey,\n variationId: null,\n rule: null,\n });\n }\n\n public updateStoredVariations(\n visitorCode: string,\n variationData: FeatureFlagVariationsType,\n ): Result<void, KameleoonError> {\n const result = this.storage.read();\n\n if (!result.ok) {\n // --- Note ---\n // If there is a parsing error we return error\n // But if there is `LocalStorageRead` error it means that\n // data was read successfully and it's empty, which is not problem\n // cause that might be initial `read`\n if (result.error.type === KameleoonException.StorageParse) {\n return result;\n }\n }\n\n let updatedVariationData: VariationDataType = result.ok ? result.data : {};\n\n if (updatedVariationData[visitorCode]) {\n updatedVariationData[visitorCode] = {\n ...updatedVariationData[visitorCode],\n ...variationData,\n };\n } else {\n updatedVariationData = {\n ...updatedVariationData,\n [visitorCode]: {\n ...variationData,\n },\n };\n }\n\n return this.storage.write(updatedVariationData);\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"variationConfiguration.js","names":["VariationConfiguration","a","externalStorage","_classCallCheck","_defineProperty","storage","_createClass","key","value","getStoredVariations","visitorCode","result","read","ok","featureFlagVariations","data","Ok","Err","KameleoonError","KameleoonException","StorageRead","getVariation","featureFlag","targetingData","packageInfo","clientConfiguration","dataManager","h","withAssignment","validateResult","Utilities","validateVisitorCode","error","j","rules","featureKey","featureFlagId","id","defaultVariationKey","o","_createForOfIteratorHelper","s","n","done","rule","segment","experimentId","exposition","respoolTime","variationByExposition","targetingResult","checkTargeting","variationConfiguration","ruleHash","Hasher","getHashDouble","y","totalDeviation","variationHash","B","variation","updateStoredVariations","variationId","restParameters","_objectWithoutProperties","_excluded","_objectSpread","isTargetedRule","type","RuleType","TARGETED_DELIVERY","e","f","variationKey","variationData","StorageParse","updatedVariationData","write","exports"],"sources":["../../src/variationConfiguration/variationConfiguration.ts"],"sourcesContent":["import { Err, Ok, Result } from 'ts-res';\nimport { Hasher } from 'src/hasher';\nimport { KameleoonError, KameleoonException } from 'src/kameleoonError';\nimport { IExternalStorage, VariationDataType } from 'src/storage';\nimport { Utilities } from 'src/utilities';\nimport { RuleType } from 'src/clientConfiguration/types';\nimport { FeatureFlagVariationType, GetVariationParametersType } from './types';\nimport { FeatureFlagVariationsType } from 'src/storage/types';\n\ninterface IVariationConfiguration {\n /**\n * @method getStoredVariations - obtains campaigns with according variations that are *already assigned* and *stored* in the `variationStorage`.\n */\n getStoredVariations(\n visitorCode: string,\n ): Result<FeatureFlagVariationsType, KameleoonError>;\n /**\n * @method updateStoredVariations - updates stored variations for the visitor\n */\n updateStoredVariations: (\n visitorCode: string,\n variationData: FeatureFlagVariationsType,\n ) => void;\n /**\n * @method getVariation - obtains variation for the rule of the feature flag which is both targeted and has a variation, if no such rule was found, returns empty rule with default `variationKey`, given an option `withAssignment` of `true` will also assign a new variation and save it in the storage\n */\n getVariation: (\n params: GetVariationParametersType,\n ) => Result<FeatureFlagVariationType, KameleoonError>;\n}\n\nexport class VariationConfiguration implements IVariationConfiguration {\n private storage: IExternalStorage<VariationDataType>;\n\n constructor(externalStorage: IExternalStorage<VariationDataType>) {\n this.storage = externalStorage;\n }\n\n public getStoredVariations(\n visitorCode: string,\n ): Result<FeatureFlagVariationsType, KameleoonError> {\n const result = this.storage.read();\n\n if (!result.ok) {\n return result;\n }\n\n const featureFlagVariations = result.data[visitorCode];\n\n if (!featureFlagVariations) {\n return Err(\n new KameleoonError(KameleoonException.StorageRead, visitorCode),\n );\n }\n\n return Ok(featureFlagVariations);\n }\n\n public getVariation({\n visitorCode,\n featureFlag,\n targetingData,\n packageInfo,\n clientConfiguration,\n dataManager,\n withAssignment = false,\n }: GetVariationParametersType): Result<\n FeatureFlagVariationType,\n KameleoonError\n > {\n const validateResult = Utilities.validateVisitorCode(visitorCode);\n\n if (!validateResult.ok) {\n return Err(validateResult.error);\n }\n\n const {\n rules,\n featureKey,\n id: featureFlagId,\n defaultVariationKey,\n } = featureFlag;\n\n for (const rule of rules) {\n const {\n segment,\n experimentId,\n id,\n exposition,\n respoolTime,\n variationByExposition,\n } = rule;\n\n // --- Check targeting ---\n const targetingResult = Utilities.checkTargeting({\n segment,\n visitorCode,\n experimentId,\n targetingData,\n packageInfo,\n clientConfiguration,\n dataManager,\n variationConfiguration: this,\n });\n\n if (!targetingResult.ok) {\n return targetingResult;\n }\n\n if (!targetingResult.data) {\n continue;\n }\n\n // --- Note ---\n // Calculate new variation (and assign it if `withAssignment` is `true`)\n // First the the exposed rule is calculated and then the variation inside of it\n const ruleHash = Hasher.getHashDouble({\n visitorCode,\n respoolTime,\n id: String(id),\n });\n\n if (ruleHash <= exposition) {\n let totalDeviation = 0;\n\n const variationHash = Hasher.getHashDouble({\n visitorCode,\n respoolTime,\n id: String(experimentId),\n });\n\n for (const variation of variationByExposition) {\n totalDeviation += variation.exposition;\n\n if (variationHash <= totalDeviation) {\n if (withAssignment) {\n this.updateStoredVariations(visitorCode, {\n [experimentId]: variation.variationId,\n });\n }\n\n const { exposition, ...restParameters } = variation;\n\n return Ok({\n ...restParameters,\n rule,\n featureFlagId,\n featureKey,\n experimentId,\n isTargetedRule: rule.type === RuleType.TARGETED_DELIVERY,\n });\n }\n }\n }\n\n if (rule.type === RuleType.TARGETED_DELIVERY) {\n return Ok({\n featureKey,\n featureFlagId,\n experimentId: null,\n variationKey: defaultVariationKey,\n variationId: null,\n rule: null,\n isTargetedRule: true,\n });\n }\n }\n\n return Ok({\n featureKey,\n featureFlagId,\n experimentId: null,\n variationKey: defaultVariationKey,\n variationId: null,\n rule: null,\n });\n }\n\n public updateStoredVariations(\n visitorCode: string,\n variationData: FeatureFlagVariationsType,\n ): Result<void, KameleoonError> {\n const result = this.storage.read();\n\n if (!result.ok) {\n // --- Note ---\n // If there is a parsing error we return error\n // But if there is `LocalStorageRead` error it means that\n // data was read successfully and it's empty, which is not problem\n // cause that might be initial `read`\n if (result.error.type === KameleoonException.StorageParse) {\n return result;\n }\n }\n\n let updatedVariationData: VariationDataType = result.ok ? result.data : {};\n\n if (updatedVariationData[visitorCode]) {\n updatedVariationData[visitorCode] = {\n ...updatedVariationData[visitorCode],\n ...variationData,\n };\n } else {\n updatedVariationData = {\n ...updatedVariationData,\n [visitorCode]: {\n ...variationData,\n },\n };\n }\n\n return this.storage.write(updatedVariationData);\n }\n}\n"],"mappings":"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"}
|