@kameleoon/javascript-sdk-core 4.4.8 → 5.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +41 -0
- package/dist/cacheManager/cacheManager.js +1 -1
- package/dist/cacheManager/cacheManager.js.map +1 -1
- package/dist/cacheManager/index.js.map +1 -1
- package/dist/cacheManager/types.js.map +1 -1
- package/dist/clientConfiguration/clientConfiguration.d.ts +2 -6
- package/dist/clientConfiguration/clientConfiguration.js +1 -1
- package/dist/clientConfiguration/clientConfiguration.js.map +1 -1
- package/dist/clientConfiguration/constants.js.map +1 -1
- package/dist/clientConfiguration/index.js.map +1 -1
- package/dist/clientConfiguration/types.d.ts +2 -5
- package/dist/clientConfiguration/types.js +1 -1
- package/dist/clientConfiguration/types.js.map +1 -1
- package/dist/clientSettings/clientSettings.d.ts +2 -1
- package/dist/clientSettings/clientSettings.js +1 -1
- package/dist/clientSettings/clientSettings.js.map +1 -1
- package/dist/clientSettings/index.js.map +1 -1
- package/dist/clientSettings/types.d.ts +1 -0
- package/dist/clientSettings/types.js.map +1 -1
- package/dist/constants.d.ts +0 -1
- package/dist/constants.js +1 -1
- package/dist/constants.js.map +1 -1
- package/dist/eventManager/eventManager.js +1 -1
- package/dist/eventManager/eventManager.js.map +1 -1
- package/dist/eventManager/index.js.map +1 -1
- package/dist/eventManager/types.js.map +1 -1
- package/dist/eventSource/constants.js.map +1 -1
- package/dist/eventSource/eventSource.js +1 -1
- package/dist/eventSource/eventSource.js.map +1 -1
- package/dist/eventSource/index.js.map +1 -1
- package/dist/eventSource/types.js.map +1 -1
- package/dist/hasher/hasher.js.map +1 -1
- package/dist/hasher/index.js.map +1 -1
- package/dist/hasher/types.js.map +1 -1
- package/dist/index.d.ts +4 -4
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/kameleoonClient.d.ts +6 -13
- package/dist/kameleoonClient.js +1 -1
- package/dist/kameleoonClient.js.map +1 -1
- package/dist/kameleoonClientInterface.d.ts +18 -16
- package/dist/kameleoonClientInterface.js.map +1 -1
- package/dist/kameleoonData/applicationVersion.d.ts +2 -3
- package/dist/kameleoonData/applicationVersion.js +1 -1
- package/dist/kameleoonData/applicationVersion.js.map +1 -1
- package/dist/kameleoonData/browser.d.ts +9 -3
- package/dist/kameleoonData/browser.js +1 -1
- package/dist/kameleoonData/browser.js.map +1 -1
- package/dist/kameleoonData/conversion.d.ts +12 -3
- package/dist/kameleoonData/conversion.js +1 -1
- package/dist/kameleoonData/conversion.js.map +1 -1
- package/dist/kameleoonData/cookie.d.ts +2 -3
- package/dist/kameleoonData/cookie.js +1 -1
- package/dist/kameleoonData/cookie.js.map +1 -1
- package/dist/kameleoonData/customData.d.ts +11 -3
- package/dist/kameleoonData/customData.js +1 -1
- package/dist/kameleoonData/customData.js.map +1 -1
- package/dist/kameleoonData/dataManager.d.ts +34 -23
- package/dist/kameleoonData/dataManager.js +1 -1
- package/dist/kameleoonData/dataManager.js.map +1 -1
- package/dist/kameleoonData/dataProcessor.d.ts +22 -24
- package/dist/kameleoonData/dataProcessor.js +1 -1
- package/dist/kameleoonData/dataProcessor.js.map +1 -1
- package/dist/kameleoonData/device.d.ts +9 -3
- package/dist/kameleoonData/device.js +1 -1
- package/dist/kameleoonData/device.js.map +1 -1
- package/dist/kameleoonData/geolocation.d.ts +9 -3
- package/dist/kameleoonData/geolocation.js +1 -1
- package/dist/kameleoonData/geolocation.js.map +1 -1
- package/dist/kameleoonData/helpers.js.map +1 -1
- package/dist/kameleoonData/index.d.ts +2 -1
- package/dist/kameleoonData/index.js +1 -1
- package/dist/kameleoonData/index.js.map +1 -1
- package/dist/kameleoonData/kameleoonConversionScore.d.ts +2 -1
- package/dist/kameleoonData/kameleoonConversionScore.js +1 -1
- package/dist/kameleoonData/kameleoonConversionScore.js.map +1 -1
- package/dist/kameleoonData/operatingSystem.d.ts +9 -3
- package/dist/kameleoonData/operatingSystem.js +1 -1
- package/dist/kameleoonData/operatingSystem.js.map +1 -1
- package/dist/kameleoonData/pageView.d.ts +12 -8
- package/dist/kameleoonData/pageView.js +1 -1
- package/dist/kameleoonData/pageView.js.map +1 -1
- package/dist/kameleoonData/types.d.ts +97 -31
- package/dist/kameleoonData/types.js +1 -1
- package/dist/kameleoonData/types.js.map +1 -1
- package/dist/kameleoonData/uniqueIdentifier.d.ts +19 -0
- package/dist/kameleoonData/uniqueIdentifier.js +2 -0
- package/dist/kameleoonData/uniqueIdentifier.js.map +1 -0
- package/dist/kameleoonData/userAgent.d.ts +2 -3
- package/dist/kameleoonData/userAgent.js +1 -1
- package/dist/kameleoonData/userAgent.js.map +1 -1
- package/dist/kameleoonData/visitProcessor.d.ts +3 -4
- package/dist/kameleoonData/visitProcessor.js +1 -1
- package/dist/kameleoonData/visitProcessor.js.map +1 -1
- package/dist/kameleoonData/visitsData.d.ts +2 -0
- package/dist/kameleoonData/visitsData.js +1 -1
- package/dist/kameleoonData/visitsData.js.map +1 -1
- package/dist/kameleoonError/constants.js +1 -1
- package/dist/kameleoonError/constants.js.map +1 -1
- package/dist/kameleoonError/helpers.js +1 -1
- package/dist/kameleoonError/helpers.js.map +1 -1
- package/dist/kameleoonError/index.js.map +1 -1
- package/dist/kameleoonError/kameleoonError.js +1 -1
- package/dist/kameleoonError/kameleoonError.js.map +1 -1
- package/dist/kameleoonError/types.js.map +1 -1
- package/dist/kameleoonUtils.d.ts +1 -11
- package/dist/kameleoonUtils.js +1 -1
- package/dist/kameleoonUtils.js.map +1 -1
- package/dist/requester/constants.js +1 -1
- package/dist/requester/constants.js.map +1 -1
- package/dist/requester/index.d.ts +1 -1
- package/dist/requester/index.js +1 -1
- package/dist/requester/index.js.map +1 -1
- package/dist/requester/requester.d.ts +5 -7
- package/dist/requester/requester.js +1 -1
- package/dist/requester/requester.js.map +1 -1
- package/dist/requester/types.d.ts +7 -26
- package/dist/requester/types.js +1 -1
- package/dist/requester/types.js.map +1 -1
- package/dist/requester/urlProvider.d.ts +2 -2
- package/dist/requester/urlProvider.js +1 -1
- package/dist/requester/urlProvider.js.map +1 -1
- package/dist/storage/constants.d.ts +6 -2
- package/dist/storage/constants.js +1 -1
- package/dist/storage/constants.js.map +1 -1
- package/dist/storage/index.d.ts +3 -2
- package/dist/storage/index.js +1 -1
- package/dist/storage/index.js.map +1 -1
- package/dist/storage/integrityChecker.d.ts +20 -0
- package/dist/storage/integrityChecker.js +2 -0
- package/dist/storage/integrityChecker.js.map +1 -0
- package/dist/storage/storage.d.ts +0 -1
- package/dist/storage/storage.js +1 -1
- package/dist/storage/storage.js.map +1 -1
- package/dist/storage/types.d.ts +25 -17
- package/dist/storage/types.js.map +1 -1
- package/dist/targeting/conditions/applicationVersion.js +1 -1
- package/dist/targeting/conditions/applicationVersion.js.map +1 -1
- package/dist/targeting/conditions/browser.js +1 -1
- package/dist/targeting/conditions/browser.js.map +1 -1
- package/dist/targeting/conditions/conditionFactory.js.map +1 -1
- package/dist/targeting/conditions/conversion.js +1 -1
- package/dist/targeting/conditions/conversion.js.map +1 -1
- package/dist/targeting/conditions/conversionLikelihood.js +1 -1
- package/dist/targeting/conditions/conversionLikelihood.js.map +1 -1
- package/dist/targeting/conditions/cookie.js +1 -1
- package/dist/targeting/conditions/cookie.js.map +1 -1
- package/dist/targeting/conditions/customData.js +1 -1
- package/dist/targeting/conditions/customData.js.map +1 -1
- package/dist/targeting/conditions/device.js +1 -1
- package/dist/targeting/conditions/device.js.map +1 -1
- package/dist/targeting/conditions/exclusiveCampaign.js.map +1 -1
- package/dist/targeting/conditions/firstVisit.js +1 -1
- package/dist/targeting/conditions/firstVisit.js.map +1 -1
- package/dist/targeting/conditions/geolocation.js +1 -1
- package/dist/targeting/conditions/geolocation.js.map +1 -1
- package/dist/targeting/conditions/index.js.map +1 -1
- package/dist/targeting/conditions/lastVisit.js +1 -1
- package/dist/targeting/conditions/lastVisit.js.map +1 -1
- package/dist/targeting/conditions/newVisitor.js +1 -1
- package/dist/targeting/conditions/newVisitor.js.map +1 -1
- package/dist/targeting/conditions/operatingSystem.js +1 -1
- package/dist/targeting/conditions/operatingSystem.js.map +1 -1
- package/dist/targeting/conditions/pageTitle.js +1 -1
- package/dist/targeting/conditions/pageTitle.js.map +1 -1
- package/dist/targeting/conditions/pageUrl.js +1 -1
- package/dist/targeting/conditions/pageUrl.js.map +1 -1
- package/dist/targeting/conditions/previousPage.js +1 -1
- package/dist/targeting/conditions/previousPage.js.map +1 -1
- package/dist/targeting/conditions/sameDayVisits.js +1 -1
- package/dist/targeting/conditions/sameDayVisits.js.map +1 -1
- package/dist/targeting/conditions/sdkLanguage.js +1 -1
- package/dist/targeting/conditions/sdkLanguage.js.map +1 -1
- package/dist/targeting/conditions/segment.js +1 -1
- package/dist/targeting/conditions/segment.js.map +1 -1
- package/dist/targeting/conditions/targetFeatureFlag.js +1 -1
- package/dist/targeting/conditions/targetFeatureFlag.js.map +1 -1
- package/dist/targeting/conditions/types.js.map +1 -1
- package/dist/targeting/conditions/utilities.d.ts +5 -0
- package/dist/targeting/conditions/utilities.js +2 -0
- package/dist/targeting/conditions/utilities.js.map +1 -0
- package/dist/targeting/conditions/visitedPages.js +1 -1
- package/dist/targeting/conditions/visitedPages.js.map +1 -1
- package/dist/targeting/conditions/visitorCode.js +1 -1
- package/dist/targeting/conditions/visitorCode.js.map +1 -1
- package/dist/targeting/conditions/visits.js +1 -1
- package/dist/targeting/conditions/visits.js.map +1 -1
- package/dist/targeting/index.d.ts +1 -1
- package/dist/targeting/index.js.map +1 -1
- package/dist/targeting/node.js +1 -1
- package/dist/targeting/node.js.map +1 -1
- package/dist/targeting/tree.js +1 -1
- package/dist/targeting/tree.js.map +1 -1
- package/dist/targeting/types.js.map +1 -1
- package/dist/tracking/bodyProvider.d.ts +26 -0
- package/dist/tracking/bodyProvider.js +2 -0
- package/dist/tracking/bodyProvider.js.map +1 -0
- package/dist/tracking/constants.d.ts +2 -0
- package/dist/tracking/constants.js +2 -0
- package/dist/tracking/constants.js.map +1 -0
- package/dist/tracking/index.d.ts +1 -0
- package/dist/tracking/index.js +2 -0
- package/dist/tracking/index.js.map +1 -0
- package/dist/tracking/tracker.d.ts +21 -0
- package/dist/tracking/tracker.js +2 -0
- package/dist/tracking/tracker.js.map +1 -0
- package/dist/tracking/types.d.ts +45 -0
- package/dist/tracking/types.js +2 -0
- package/dist/tracking/types.js.map +1 -0
- package/dist/types.d.ts +44 -15
- package/dist/types.js +1 -1
- package/dist/types.js.map +1 -1
- package/dist/utilities/constants.d.ts +0 -1
- package/dist/utilities/constants.js +1 -1
- package/dist/utilities/constants.js.map +1 -1
- package/dist/utilities/index.d.ts +3 -2
- package/dist/utilities/index.js +1 -1
- package/dist/utilities/index.js.map +1 -1
- package/dist/utilities/parser.d.ts +10 -0
- package/dist/utilities/parser.js +2 -0
- package/dist/utilities/parser.js.map +1 -0
- package/dist/utilities/types.d.ts +3 -40
- package/dist/utilities/types.js.map +1 -1
- package/dist/utilities/utilities.d.ts +5 -21
- package/dist/utilities/utilities.js +1 -1
- package/dist/utilities/utilities.js.map +1 -1
- package/dist/utilities/validator.d.ts +5 -0
- package/dist/utilities/validator.js +2 -0
- package/dist/utilities/validator.js.map +1 -0
- package/dist/variationConfiguration/index.js.map +1 -1
- package/dist/variationConfiguration/types.d.ts +7 -2
- package/dist/variationConfiguration/types.js.map +1 -1
- package/dist/variationConfiguration/variationConfiguration.d.ts +15 -7
- package/dist/variationConfiguration/variationConfiguration.js +1 -1
- package/dist/variationConfiguration/variationConfiguration.js.map +1 -1
- package/dist/visitorCodeManager/constants.d.ts +2 -0
- package/dist/visitorCodeManager/constants.js +1 -1
- package/dist/visitorCodeManager/constants.js.map +1 -1
- package/dist/visitorCodeManager/index.js.map +1 -1
- package/dist/visitorCodeManager/types.d.ts +3 -0
- package/dist/visitorCodeManager/types.js.map +1 -1
- package/dist/visitorCodeManager/visitorCodeManager.d.ts +4 -0
- package/dist/visitorCodeManager/visitorCodeManager.js +1 -1
- package/dist/visitorCodeManager/visitorCodeManager.js.map +1 -1
- package/package.json +2 -2
|
@@ -1,25 +1,23 @@
|
|
|
1
1
|
import { Result } from 'ts-res';
|
|
2
2
|
import { KameleoonError } from '../kameleoonError';
|
|
3
3
|
import { ConfigurationDataType, JSONType } from '../clientConfiguration';
|
|
4
|
-
import { RequesterParamsType,
|
|
4
|
+
import { RequesterParamsType, GetVisitorDataResultType, GetVisitorDataParamsType } from './types';
|
|
5
5
|
export interface IRequester {
|
|
6
6
|
getClientConfiguration: () => Promise<Result<ConfigurationDataType, KameleoonError>>;
|
|
7
7
|
getRemoteData: (key: string) => Promise<Result<JSONType, KameleoonError>>;
|
|
8
|
-
|
|
9
|
-
trackExperiment: ({ visitorCode, dataUrl, variationDataUrl, isUnallocated, isTargetedRule, userAgent, }: TrackExperimentParamsType) => Promise<Result<boolean, void>>;
|
|
8
|
+
track: (body: string, isBodyUserAgent: boolean) => Promise<Result<void, void>>;
|
|
10
9
|
}
|
|
11
10
|
export declare class Requester implements IRequester {
|
|
12
11
|
private externalRequester;
|
|
13
12
|
private urlProvider;
|
|
14
13
|
private packageInfo;
|
|
15
14
|
private trackRetryDelay;
|
|
15
|
+
private useAbortController;
|
|
16
16
|
private timeout;
|
|
17
|
-
constructor({ urlProvider, packageInfo, externalRequester, requestTimeout, trackRetryDelay, }: RequesterParamsType);
|
|
17
|
+
constructor({ urlProvider, packageInfo, externalRequester, requestTimeout, trackRetryDelay, useAbortController, }: RequesterParamsType);
|
|
18
18
|
getClientConfiguration(timeStamp?: number): Promise<Result<ConfigurationDataType, KameleoonError>>;
|
|
19
19
|
getRemoteData(key: string): Promise<Result<JSONType, KameleoonError>>;
|
|
20
20
|
getVisitorData({ visitorCode, filters, isMappingIdentifier, }: GetVisitorDataParamsType): Promise<Result<GetVisitorDataResultType, KameleoonError>>;
|
|
21
|
-
|
|
22
|
-
trackData({ visitorCode, body, userAgent, isMappingIdentifier, }: TrackDataParamsType): Promise<Result<boolean, void>>;
|
|
23
|
-
private track;
|
|
21
|
+
track(body: string, isBodyUserAgent: boolean): Promise<Result<void, void>>;
|
|
24
22
|
private sendRequest;
|
|
25
23
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.Requester=void 0;var _tsRes=require("ts-res"),_kameleoonError=require("../kameleoonError"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.Requester=void 0;var _tsRes=require("ts-res"),_kameleoonError=require("../kameleoonError"),_constants=require("./constants"),_types=require("./types");function ownKeys(a,b){var c=Object.keys(a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(a);b&&(d=d.filter(function(b){return Object.getOwnPropertyDescriptor(a,b).enumerable})),c.push.apply(c,d)}return c}function _objectSpread(a){for(var b,c=1;c<arguments.length;c++)b=null==arguments[c]?{}:arguments[c],c%2?ownKeys(Object(b),!0).forEach(function(c){_defineProperty(a,c,b[c])}):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(b)):ownKeys(Object(b)).forEach(function(c){Object.defineProperty(a,c,Object.getOwnPropertyDescriptor(b,c))});return a}function _defineProperty(a,b,c){return(b=_toPropertyKey(b))in a?Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!0}):a[b]=c,a}function _toPropertyKey(a){var b=_toPrimitive(a,"string");return"symbol"==typeof b?b:b+""}function _toPrimitive(a,b){if("object"!=typeof a||!a)return a;var c=a[Symbol.toPrimitive];if(void 0!==c){var d=c.call(a,b||"default");if("object"!=typeof d)return d;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===b?String:Number)(a)}class Requester{constructor(a){let{urlProvider:b,packageInfo:c,externalRequester:d,requestTimeout:e,trackRetryDelay:f,useAbortController:g}=a;_defineProperty(this,"externalRequester",void 0),_defineProperty(this,"urlProvider",void 0),_defineProperty(this,"packageInfo",void 0),_defineProperty(this,"trackRetryDelay",void 0),_defineProperty(this,"useAbortController",void 0),_defineProperty(this,"timeout",void 0),this.urlProvider=b,this.useAbortController=g,this.externalRequester=d,this.trackRetryDelay=f,this.packageInfo=c,this.timeout=e}async getClientConfiguration(a){const b=this.urlProvider.getClientConfigurationUrl(a),c={[_constants.Header.SdkType]:this.packageInfo.type.toLowerCase(),[_constants.Header.SdkVersion]:this.packageInfo.version},d=_constants.NUMBER_OF_RETRIES+1;try{let a={message:""};for(let e=0;e<d;e++){const d=await this.sendRequest({url:b,requestType:_types.RequestType.Configuration,retryCount:e,parameters:{method:_types.HttpMethod.Get,headers:c}});if(d.ok){const a=await d.json();return(0,_tsRes.Ok)(a)}if(e===_constants.NUMBER_OF_RETRIES&&d.text){const b=await d.text();a=JSON.parse(b)}}return(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.MaximumRetriesReached,a.message))}catch(a){return(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.ClientConfiguration,a))}}async getRemoteData(a){const b=this.urlProvider.getRemoteDataUrl(a);try{const a=await this.sendRequest({url:b,requestType:_types.RequestType.RemoteData,retryCount:0,parameters:{method:_types.HttpMethod.Get}});if(!a.ok){if(a.text){var c;const b=await a.text(),d=null===(c=JSON.parse(b))||void 0===c?void 0:c.message;return(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.RemoteData,d))}return(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.RemoteData,"Unknown Reason - no `text()` was found for a response"))}const d=await a.json();return(0,_tsRes.Ok)(d)}catch(a){return(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.RemoteData,a))}}async getVisitorData(a){let{visitorCode:b,filters:c,isMappingIdentifier:d}=a;const e=this.urlProvider.getVisitorDataUrl({visitorCode:b,filters:c,isMappingIdentifier:d});try{const a=await this.sendRequest({url:e,requestType:_types.RequestType.RemoteData,retryCount:0,parameters:{method:_types.HttpMethod.Get}});if(!a.ok){if("function"==typeof a.text){const b=await a.text();if(b){var f;const a=null===(f=JSON.parse(b))||void 0===f?void 0:f.message;return(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.RemoteData,a))}}return a.status?(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.RemoteData,`No error message. Error status: ${a.status}`)):(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.RemoteData,"Unknown Reason - no text message or error status was found for a response"))}const b=await a.json();return(0,_tsRes.Ok)(b)}catch(a){return(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.RemoteData,a))}}async track(a,b){const c=_constants.NUMBER_OF_RETRIES+1,d=this.urlProvider.getTrackingUrl(b);for(let e=0;e<c;e++){const b=await this.sendRequest({url:d,retryCount:e,requestType:_types.RequestType.Tracking,parameters:{body:a,method:_types.HttpMethod.Post}});if(b.ok)return(0,_tsRes.Ok)();await new Promise(a=>setTimeout(a,this.trackRetryDelay))}return(0,_tsRes.Err)()}async sendRequest(a){let b,{url:c,requestType:d,retryCount:e,parameters:f}=a;if(this.useAbortController){const a=new AbortController,g=setTimeout(()=>a.abort(),this.timeout);b=await this.externalRequester.sendRequest({url:c,retryCount:e,requestType:d,parameters:_objectSpread(_objectSpread({},f),{},{signal:a.signal})}),clearTimeout(g)}else b=await this.externalRequester.sendRequest({url:c,retryCount:e,requestType:d,parameters:f});return b}}exports.Requester=Requester;
|
|
2
2
|
//# sourceMappingURL=requester.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"requester.js","names":["Requester","constructor","a","urlProvider","packageInfo","externalRequester","requestTimeout","trackRetryDelay","_defineProperty","timeout","getClientConfiguration","timeStamp","requestUrl","getClientConfigurationUrl","headers","Header","SdkType","type","toLowerCase","SdkVersion","version","requests","NUMBER_OF_RETRIES","responseInfo","message","i","response","sendRequest","url","requestType","RequestType","Configuration","retryCount","ok","data","json","Ok","text","JSON","parse","Err","KameleoonError","KameleoonException","MaximumRetriesReached","err","ClientConfiguration","getRemoteData","key","getRemoteDataUrl","RemoteData","c","getVisitorData","visitorCode","filters","isMappingIdentifier","getVisitorDataUrl","f","trackExperiment","dataUrl","variationDataUrl","userAgent","isUnallocated","getTrackingUrl","unallocatedAddition","UrlEventType","Activity","UrlParameter","Nonce","Utilities","getNonce","bodyAddition","extendedBody","UserAgent","track","Tracking","body","_","trackData","requestBody","parameters","_objectSpread","Promise","resolve","setTimeout","controller","AbortController","timeoutId","abort","variableParameters","signal","method","HttpMethod","Get","Error","Post","clearTimeout","exports"],"sources":["../../src/requester/requester.ts"],"sourcesContent":["import { Err, Ok, Result } from 'ts-res';\nimport { ExternalPackageInfoType } from 'src/types';\nimport { KameleoonError, KameleoonException } from 'src/kameleoonError';\nimport { ConfigurationDataType, JSONType } from 'src/clientConfiguration';\nimport { Utilities } from 'src/utilities';\nimport {\n UrlParameter,\n Header,\n UrlEventType,\n NUMBER_OF_RETRIES,\n} from './constants';\nimport {\n RequesterParamsType,\n TrackDataParamsType,\n GetVisitorDataResultType,\n TrackExperimentParamsType,\n HeadersType,\n GetVisitorDataParamsType,\n IExternalRequester,\n RequestType,\n HttpMethod,\n InternalSendRequestParametersType,\n KameleoonResponseType,\n RequestParametersType,\n} from './types';\nimport { IUrlProvider } from './urlProvider';\n\nexport interface IRequester {\n getClientConfiguration: () => Promise<\n Result<ConfigurationDataType, KameleoonError>\n >;\n getRemoteData: (key: string) => Promise<Result<JSONType, KameleoonError>>;\n trackData: ({\n visitorCode,\n body,\n userAgent,\n }: TrackDataParamsType) => Promise<Result<boolean, void>>;\n trackExperiment: ({\n visitorCode,\n dataUrl,\n variationDataUrl,\n isUnallocated,\n isTargetedRule,\n userAgent,\n }: TrackExperimentParamsType) => Promise<Result<boolean, void>>;\n}\n\nexport class Requester implements IRequester {\n private externalRequester: IExternalRequester;\n private urlProvider: IUrlProvider;\n private packageInfo: ExternalPackageInfoType;\n private trackRetryDelay: number;\n private timeout: number;\n\n constructor({\n urlProvider,\n packageInfo,\n externalRequester,\n requestTimeout,\n trackRetryDelay,\n }: RequesterParamsType) {\n this.urlProvider = urlProvider;\n this.externalRequester = externalRequester;\n this.trackRetryDelay = trackRetryDelay;\n this.packageInfo = packageInfo;\n this.timeout = requestTimeout;\n }\n\n public async getClientConfiguration(\n timeStamp?: number,\n ): Promise<Result<ConfigurationDataType, KameleoonError>> {\n const requestUrl = this.urlProvider.getClientConfigurationUrl(timeStamp);\n\n const headers: HeadersType = {\n [Header.SdkType]: this.packageInfo.type.toLowerCase(),\n [Header.SdkVersion]: this.packageInfo.version,\n };\n\n // --- Note ---\n // Initial request + NUMBER_OF_RETRIES\n const requests = NUMBER_OF_RETRIES + 1;\n\n try {\n let responseInfo = { message: '' };\n\n for (let i = 0; i < requests; i++) {\n const response = await this.sendRequest({\n url: requestUrl,\n requestType: RequestType.Configuration,\n retryCount: i,\n headers,\n });\n\n if (response.ok) {\n const data = await response.json();\n\n return Ok(data as ConfigurationDataType);\n }\n\n // --- Note ---\n // Last retry\n if (i === NUMBER_OF_RETRIES) {\n if (response.text) {\n const text = await response.text();\n responseInfo = JSON.parse(text);\n }\n }\n }\n\n return Err(\n new KameleoonError(\n KameleoonException.MaximumRetriesReached,\n responseInfo.message,\n ),\n );\n } catch (err) {\n return Err(\n new KameleoonError(KameleoonException.ClientConfiguration, err),\n );\n }\n }\n\n public async getRemoteData(\n key: string,\n ): Promise<Result<JSONType, KameleoonError>> {\n const requestUrl = this.urlProvider.getRemoteDataUrl(key);\n\n try {\n const response = await this.sendRequest({\n url: requestUrl,\n requestType: RequestType.RemoteData,\n retryCount: 0,\n });\n\n if (!response.ok) {\n if (response.text) {\n const text = await response.text();\n const message = JSON.parse(text)?.message;\n\n return Err(\n new KameleoonError(KameleoonException.RemoteData, message),\n );\n }\n\n return Err(\n new KameleoonError(\n KameleoonException.RemoteData,\n 'Unknown Reason - no `text()` was found for a response',\n ),\n );\n }\n\n const data = await response.json();\n\n return Ok(data);\n } catch (err) {\n return Err(new KameleoonError(KameleoonException.RemoteData, err));\n }\n }\n\n public async getVisitorData({\n visitorCode,\n filters,\n isMappingIdentifier,\n }: GetVisitorDataParamsType): Promise<\n Result<GetVisitorDataResultType, KameleoonError>\n > {\n const requestUrl = this.urlProvider.getVisitorDataUrl({\n visitorCode,\n filters,\n isMappingIdentifier,\n });\n\n try {\n const response = await this.sendRequest({\n url: requestUrl,\n requestType: RequestType.RemoteData,\n retryCount: 0,\n });\n\n if (!response.ok) {\n if (response.text) {\n const text = await response.text();\n const message = JSON.parse(text)?.message;\n\n return Err(\n new KameleoonError(KameleoonException.RemoteData, message),\n );\n }\n\n return Err(\n new KameleoonError(\n KameleoonException.RemoteData,\n \"Unknown Reason - no 'text()' was found for a response\",\n ),\n );\n }\n\n const data = await response.json();\n\n return Ok(data as GetVisitorDataResultType);\n } catch (err) {\n return Err(new KameleoonError(KameleoonException.RemoteData, err));\n }\n }\n\n public async trackExperiment({\n visitorCode,\n dataUrl,\n variationDataUrl,\n userAgent,\n isUnallocated,\n }: TrackExperimentParamsType): Promise<Result<boolean, void>> {\n const url = this.urlProvider.getTrackingUrl(visitorCode);\n\n const unallocatedAddition = !dataUrl\n ? UrlEventType.Activity + UrlParameter.Nonce + Utilities.getNonce()\n : '';\n\n const bodyAddition = isUnallocated ? unallocatedAddition : variationDataUrl;\n\n const extendedBody = bodyAddition ? dataUrl + '\\n' + bodyAddition : dataUrl;\n\n const headers: HeadersType | undefined = userAgent\n ? {\n [Header.UserAgent]: userAgent,\n }\n : undefined;\n\n try {\n const response = await this.track({\n url,\n headers,\n requestType: RequestType.Tracking,\n body: extendedBody,\n });\n\n return Ok(response);\n } catch (_) {\n return Err();\n }\n }\n\n public async trackData({\n visitorCode,\n body,\n userAgent,\n isMappingIdentifier,\n }: TrackDataParamsType): Promise<Result<boolean, void>> {\n const url = this.urlProvider.getTrackingUrl(\n visitorCode,\n isMappingIdentifier,\n );\n\n const requestBody =\n body || UrlEventType.Activity + UrlParameter.Nonce + Utilities.getNonce();\n\n const headers = userAgent\n ? {\n [Header.UserAgent]: userAgent,\n }\n : undefined;\n\n try {\n const response = await this.track({\n url,\n requestType: RequestType.Tracking,\n headers,\n body: requestBody,\n });\n\n return Ok(response);\n } catch (_) {\n return Err();\n }\n }\n\n private async track(\n parameters: Omit<InternalSendRequestParametersType, 'retryCount'>,\n ): Promise<boolean> {\n // --- Note ---\n // Initial request + NUMBER_OF_RETRIES\n const requests = NUMBER_OF_RETRIES + 1;\n\n for (let i = 0; i < requests; i++) {\n const response = await this.sendRequest({\n ...parameters,\n retryCount: i,\n });\n\n if (response.ok) {\n return true;\n }\n\n await new Promise((resolve) => setTimeout(resolve, this.trackRetryDelay));\n }\n\n return false;\n }\n\n private async sendRequest({\n requestType,\n url,\n retryCount,\n headers,\n body,\n }: InternalSendRequestParametersType): Promise<KameleoonResponseType> {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.timeout);\n\n let variableParameters: RequestParametersType[RequestType];\n\n switch (requestType) {\n case RequestType.RemoteData:\n case RequestType.Configuration:\n variableParameters = {\n headers,\n signal: controller.signal,\n method: HttpMethod.Get,\n };\n break;\n case RequestType.Tracking:\n if (!body) {\n throw new Error(\n 'Internal Error: Tracking request should always contain body',\n );\n }\n\n variableParameters = {\n method: HttpMethod.Post,\n headers,\n signal: controller.signal,\n body,\n };\n break;\n }\n\n const parameters = {\n ...variableParameters,\n headers,\n signal: controller.signal,\n };\n\n const response = await this.externalRequester.sendRequest({\n url,\n retryCount: retryCount as 0 | 1 | 2,\n requestType,\n parameters,\n });\n\n clearTimeout(timeoutId);\n\n return response;\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"requester.js","names":["Requester","constructor","a","urlProvider","packageInfo","externalRequester","requestTimeout","trackRetryDelay","useAbortController","_defineProperty","timeout","getClientConfiguration","timeStamp","requestUrl","getClientConfigurationUrl","headers","Header","SdkType","type","toLowerCase","SdkVersion","version","requests","NUMBER_OF_RETRIES","responseInfo","message","i","response","sendRequest","url","requestType","RequestType","Configuration","retryCount","parameters","method","HttpMethod","Get","ok","data","json","Ok","text","JSON","parse","Err","KameleoonError","KameleoonException","MaximumRetriesReached","err","ClientConfiguration","getRemoteData","key","getRemoteDataUrl","RemoteData","c","getVisitorData","visitorCode","filters","isMappingIdentifier","getVisitorDataUrl","f","status","track","body","isBodyUserAgent","getTrackingUrl","Tracking","Post","Promise","resolve","setTimeout","controller","AbortController","timeoutId","abort","_objectSpread","signal","clearTimeout","exports"],"sources":["../../src/requester/requester.ts"],"sourcesContent":["import { Err, Ok, Result } from 'ts-res';\nimport { ExternalPackageInfoType } from 'src/types';\nimport { KameleoonError, KameleoonException } from 'src/kameleoonError';\nimport { ConfigurationDataType, JSONType } from 'src/clientConfiguration';\nimport { Header, NUMBER_OF_RETRIES } from './constants';\nimport {\n RequesterParamsType,\n GetVisitorDataResultType,\n HeadersType,\n GetVisitorDataParamsType,\n IExternalRequester,\n RequestType,\n HttpMethod,\n InternalSendRequestParametersType,\n KameleoonResponseType,\n RequestParametersType,\n} from './types';\nimport { IUrlProvider } from './urlProvider';\n\nexport interface IRequester {\n getClientConfiguration: () => Promise<\n Result<ConfigurationDataType, KameleoonError>\n >;\n getRemoteData: (key: string) => Promise<Result<JSONType, KameleoonError>>;\n track: (\n body: string,\n isBodyUserAgent: boolean,\n ) => Promise<Result<void, void>>;\n}\n\nexport class Requester implements IRequester {\n private externalRequester: IExternalRequester;\n private urlProvider: IUrlProvider;\n private packageInfo: ExternalPackageInfoType;\n private trackRetryDelay: number;\n private useAbortController: boolean;\n private timeout: number;\n\n constructor({\n urlProvider,\n packageInfo,\n externalRequester,\n requestTimeout,\n trackRetryDelay,\n useAbortController,\n }: RequesterParamsType) {\n this.urlProvider = urlProvider;\n this.useAbortController = useAbortController;\n this.externalRequester = externalRequester;\n this.trackRetryDelay = trackRetryDelay;\n this.packageInfo = packageInfo;\n this.timeout = requestTimeout;\n }\n\n public async getClientConfiguration(\n timeStamp?: number,\n ): Promise<Result<ConfigurationDataType, KameleoonError>> {\n const requestUrl = this.urlProvider.getClientConfigurationUrl(timeStamp);\n\n const headers: HeadersType = {\n [Header.SdkType]: this.packageInfo.type.toLowerCase(),\n [Header.SdkVersion]: this.packageInfo.version,\n };\n\n // --- Note ---\n // Initial request + NUMBER_OF_RETRIES\n const requests = NUMBER_OF_RETRIES + 1;\n\n try {\n let responseInfo = { message: '' };\n\n for (let i = 0; i < requests; i++) {\n const response = await this.sendRequest<RequestType.Configuration>({\n url: requestUrl,\n requestType: RequestType.Configuration,\n retryCount: i,\n parameters: {\n method: HttpMethod.Get,\n headers,\n },\n });\n\n if (response.ok) {\n const data = await response.json();\n\n return Ok(data as ConfigurationDataType);\n }\n\n if (i === NUMBER_OF_RETRIES) {\n if (response.text) {\n const text = await response.text();\n responseInfo = JSON.parse(text);\n }\n }\n }\n\n return Err(\n new KameleoonError(\n KameleoonException.MaximumRetriesReached,\n responseInfo.message,\n ),\n );\n } catch (err) {\n return Err(\n new KameleoonError(KameleoonException.ClientConfiguration, err),\n );\n }\n }\n\n public async getRemoteData(\n key: string,\n ): Promise<Result<JSONType, KameleoonError>> {\n const requestUrl = this.urlProvider.getRemoteDataUrl(key);\n\n try {\n const response = await this.sendRequest<RequestType.RemoteData>({\n url: requestUrl,\n requestType: RequestType.RemoteData,\n retryCount: 0,\n parameters: {\n method: HttpMethod.Get,\n },\n });\n\n if (!response.ok) {\n if (response.text) {\n const text = await response.text();\n const message = JSON.parse(text)?.message;\n\n return Err(\n new KameleoonError(KameleoonException.RemoteData, message),\n );\n }\n\n return Err(\n new KameleoonError(\n KameleoonException.RemoteData,\n 'Unknown Reason - no `text()` was found for a response',\n ),\n );\n }\n\n const data = await response.json();\n\n return Ok(data);\n } catch (err) {\n return Err(new KameleoonError(KameleoonException.RemoteData, err));\n }\n }\n\n public async getVisitorData({\n visitorCode,\n filters,\n isMappingIdentifier,\n }: GetVisitorDataParamsType): Promise<\n Result<GetVisitorDataResultType, KameleoonError>\n > {\n const requestUrl = this.urlProvider.getVisitorDataUrl({\n visitorCode,\n filters,\n isMappingIdentifier,\n });\n\n try {\n const response = await this.sendRequest<RequestType.RemoteData>({\n url: requestUrl,\n requestType: RequestType.RemoteData,\n retryCount: 0,\n parameters: {\n method: HttpMethod.Get,\n },\n });\n\n if (!response.ok) {\n if (typeof response.text === 'function') {\n const text = await response.text();\n\n if (text) {\n const message = JSON.parse(text)?.message;\n\n return Err(\n new KameleoonError(KameleoonException.RemoteData, message),\n );\n }\n }\n\n if (response.status) {\n return Err(\n new KameleoonError(\n KameleoonException.RemoteData,\n `No error message. Error status: ${response.status}`,\n ),\n );\n }\n\n return Err(\n new KameleoonError(\n KameleoonException.RemoteData,\n 'Unknown Reason - no text message or error status was found for a response',\n ),\n );\n }\n\n const data = await response.json();\n\n return Ok(data as GetVisitorDataResultType);\n } catch (err) {\n return Err(new KameleoonError(KameleoonException.RemoteData, err));\n }\n }\n\n public async track(\n body: string,\n isBodyUserAgent: boolean,\n ): Promise<Result<void, void>> {\n // --- Note ---\n // Initial request + NUMBER_OF_RETRIES\n const requests = NUMBER_OF_RETRIES + 1;\n const url = this.urlProvider.getTrackingUrl(isBodyUserAgent);\n\n for (let i = 0; i < requests; i++) {\n const response = await this.sendRequest<RequestType.Tracking>({\n url,\n retryCount: i,\n requestType: RequestType.Tracking,\n parameters: {\n body,\n method: HttpMethod.Post,\n },\n });\n\n if (response.ok) {\n return Ok();\n }\n\n await new Promise((resolve) => setTimeout(resolve, this.trackRetryDelay));\n }\n\n return Err();\n }\n\n private async sendRequest<T extends RequestType>({\n url,\n requestType,\n retryCount,\n parameters,\n }: InternalSendRequestParametersType<T>): Promise<KameleoonResponseType> {\n let response;\n\n if (this.useAbortController) {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.timeout);\n\n response = await this.externalRequester.sendRequest({\n url,\n retryCount: retryCount as 0 | 1 | 2,\n requestType,\n parameters: {\n ...parameters,\n signal: controller.signal,\n } as RequestParametersType[T],\n });\n\n clearTimeout(timeoutId);\n } else {\n response = await this.externalRequester.sendRequest({\n url,\n retryCount: retryCount as 0 | 1 | 2,\n requestType,\n parameters: parameters as RequestParametersType[T],\n });\n }\n\n return response;\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -25,26 +25,13 @@ export type UrlProviderInitializeParamsType = {
|
|
|
25
25
|
environment: Environment;
|
|
26
26
|
};
|
|
27
27
|
export type RequesterParamsType = {
|
|
28
|
+
useAbortController: boolean;
|
|
28
29
|
urlProvider: IUrlProvider;
|
|
29
30
|
packageInfo: ExternalPackageInfoType;
|
|
30
31
|
externalRequester: IExternalRequester;
|
|
31
32
|
trackRetryDelay: number;
|
|
32
33
|
requestTimeout: number;
|
|
33
34
|
};
|
|
34
|
-
export type TrackExperimentParamsType = {
|
|
35
|
-
dataUrl: string;
|
|
36
|
-
variationDataUrl: string;
|
|
37
|
-
visitorCode: string;
|
|
38
|
-
isUnallocated: boolean;
|
|
39
|
-
userAgent?: string;
|
|
40
|
-
isTargetedRule?: boolean;
|
|
41
|
-
};
|
|
42
|
-
export type TrackDataParamsType = {
|
|
43
|
-
visitorCode: string;
|
|
44
|
-
body: string;
|
|
45
|
-
userAgent?: string;
|
|
46
|
-
isMappingIdentifier?: boolean;
|
|
47
|
-
};
|
|
48
35
|
export type GetVisitorDataParamsType = {
|
|
49
36
|
visitorCode: string;
|
|
50
37
|
filters: VisitorDataFiltersType;
|
|
@@ -154,7 +141,7 @@ export declare enum DataApiQuery {
|
|
|
154
141
|
DataMap = 2
|
|
155
142
|
}
|
|
156
143
|
declare const EVENT_TYPE_KEYS: readonly ["customData", "staticData", "page", "conversion", "geolocation", "activity", "experiment"];
|
|
157
|
-
declare const PARAMETER_KEYS: readonly ["valuesCountMap", "mappingValue", "id", "nonce", "country", "environment", "city", "region", "latitude", "geolocation", "longitude", "mappingIdentifier", "postalCode", "sdkName", "sdkVersion", "kcs", "browserIndex", "browserVersion", "siteCode", "visitorCode", "currentVisit", "maxNumberPreviousVisits", "customData", "negative", "revenue", "title", "os", "conversion", "staticData", "osIndex", "browser", "referrersIndices", "overwrite", "index", "href", "experiment", "page", "variationId", "deviceType", "goalId", "ts", "key"];
|
|
144
|
+
declare const PARAMETER_KEYS: readonly ["valuesCountMap", "mappingValue", "id", "nonce", "country", "environment", "city", "region", "latitude", "geolocation", "longitude", "mappingIdentifier", "postalCode", "sdkName", "sdkVersion", "kcs", "browserIndex", "browserVersion", "siteCode", "visitorCode", "currentVisit", "maxNumberPreviousVisits", "customData", "negative", "revenue", "title", "os", "conversion", "staticData", "osIndex", "browser", "referrersIndices", "overwrite", "index", "href", "experiment", "page", "variationId", "deviceType", "goalId", "ts", "key", "userAgent", "bodyUa"];
|
|
158
145
|
declare const TRACKING_KEYS: readonly ["visit", "map"];
|
|
159
146
|
declare const QUERY_KEYS: readonly ["sse", "visitor", "map", "events"];
|
|
160
147
|
export type TrackingType = Record<Capitalize<(typeof TRACKING_KEYS)[number]>, string>;
|
|
@@ -180,11 +167,6 @@ export type StrictFirstParameterRecord<T> = {
|
|
|
180
167
|
* @type `HeadersType` - a type of headers available in the request
|
|
181
168
|
* */
|
|
182
169
|
export type HeadersType = Partial<Record<Header, string>>;
|
|
183
|
-
export type TrackParametersType = {
|
|
184
|
-
url: string;
|
|
185
|
-
headers?: HeadersType;
|
|
186
|
-
body: string;
|
|
187
|
-
};
|
|
188
170
|
/**
|
|
189
171
|
* @type `RequestParametersType` - a type of parameters available in the request for each request type
|
|
190
172
|
* */
|
|
@@ -241,21 +223,20 @@ export type SendRequestParametersType<T extends RequestType> = {
|
|
|
241
223
|
* @type `KameleoonResponse` - a type of response that is assignable to most libraries `Response` objects
|
|
242
224
|
* @property {number} status - a status of the response
|
|
243
225
|
* @property {() => Promise<JSONType>} json - a method to parse the response to JSON
|
|
244
|
-
* @property {() => Promise<string
|
|
226
|
+
* @property {() => Promise<string>} text - a method to parse the response to text
|
|
245
227
|
* @property {boolean} ok - a boolean value that indicates if the response is ok
|
|
246
228
|
* */
|
|
247
229
|
export type KameleoonResponseType = {
|
|
248
230
|
status: number;
|
|
249
231
|
json: () => Promise<JSONType>;
|
|
250
|
-
text
|
|
232
|
+
text: () => Promise<string>;
|
|
251
233
|
ok: boolean;
|
|
252
234
|
};
|
|
253
|
-
export type InternalSendRequestParametersType = {
|
|
254
|
-
requestType: RequestType;
|
|
235
|
+
export type InternalSendRequestParametersType<T extends RequestType> = {
|
|
255
236
|
url: string;
|
|
237
|
+
requestType: RequestType;
|
|
256
238
|
retryCount: number;
|
|
257
|
-
|
|
258
|
-
body?: string;
|
|
239
|
+
parameters: Omit<RequestParametersType[T], 'signal'>;
|
|
259
240
|
};
|
|
260
241
|
/**
|
|
261
242
|
* @interface `IExternalRequester` - an interface of External Requester which will be used to perform requests.
|
package/dist/requester/types.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.UrlType=exports.RequestType=exports.HttpMethod=exports.DataApiQuery=void 0;let UrlType=exports.UrlType=function(a){return a.DataApi="dataApi",a.Events="events",a.ClientConfiguration="clientConfiguration",a}({}),HttpMethod=exports.HttpMethod=function(a){return a.Get="GET",a.Post="POST",a}({}),DataApiQuery=exports.DataApiQuery=function(a){return a[a.VisitEvent=0]="VisitEvent",a[a.VisitData=1]="VisitData",a[a.DataMap=2]="DataMap",a}({});const EVENT_TYPE_KEYS=["customData","staticData","page","conversion","geolocation","activity","experiment"],PARAMETER_KEYS=["valuesCountMap","mappingValue","id","nonce","country","environment","city","region","latitude","geolocation","longitude","mappingIdentifier","postalCode","sdkName","sdkVersion","kcs","browserIndex","browserVersion","siteCode","visitorCode","currentVisit","maxNumberPreviousVisits","customData","negative","revenue","title","os","conversion","staticData","osIndex","browser","referrersIndices","overwrite","index","href","experiment","page","variationId","deviceType","goalId","ts","key"],TRACKING_KEYS=["visit","map"],QUERY_KEYS=["sse","visitor","map","events"];let RequestType=exports.RequestType=function(a){return a.Configuration="configuration",a.Tracking="tracking",a.RemoteData="remoteData",a}({});
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.UrlType=exports.RequestType=exports.HttpMethod=exports.DataApiQuery=void 0;let UrlType=exports.UrlType=function(a){return a.DataApi="dataApi",a.Events="events",a.ClientConfiguration="clientConfiguration",a}({}),HttpMethod=exports.HttpMethod=function(a){return a.Get="GET",a.Post="POST",a}({}),DataApiQuery=exports.DataApiQuery=function(a){return a[a.VisitEvent=0]="VisitEvent",a[a.VisitData=1]="VisitData",a[a.DataMap=2]="DataMap",a}({});const EVENT_TYPE_KEYS=["customData","staticData","page","conversion","geolocation","activity","experiment"],PARAMETER_KEYS=["valuesCountMap","mappingValue","id","nonce","country","environment","city","region","latitude","geolocation","longitude","mappingIdentifier","postalCode","sdkName","sdkVersion","kcs","browserIndex","browserVersion","siteCode","visitorCode","currentVisit","maxNumberPreviousVisits","customData","negative","revenue","title","os","conversion","staticData","osIndex","browser","referrersIndices","overwrite","index","href","experiment","page","variationId","deviceType","goalId","ts","key","userAgent","bodyUa"],TRACKING_KEYS=["visit","map"],QUERY_KEYS=["sse","visitor","map","events"];let RequestType=exports.RequestType=function(a){return a.Configuration="configuration",a.Tracking="tracking",a.RemoteData="remoteData",a}({});
|
|
2
2
|
//# sourceMappingURL=types.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","names":["UrlType","exports","DataApi","Events","ClientConfiguration","HttpMethod","Get","Post","DataApiQuery","VisitEvent","VisitData","DataMap","EVENT_TYPE_KEYS","PARAMETER_KEYS","TRACKING_KEYS","QUERY_KEYS","RequestType","Configuration","Tracking","RemoteData"],"sources":["../../src/requester/types.ts"],"sourcesContent":["import { JSONType } from 'src/clientConfiguration';\nimport { Environment, ExternalPackageInfoType } from 'src/types';\nimport {\n BrowserIndexMap,\n BrowserType,\n OperatingSystemType,\n} from 'src/kameleoonData';\nimport {\n DeviceType,\n KCSType,\n OperatingSystemIndexMap,\n} from 'src/kameleoonData/types';\nimport { Header } from './constants';\nimport { VisitorDataFiltersType } from 'src/utilities';\nimport { IUrlProvider } from './urlProvider';\n\nexport enum UrlType {\n DataApi = 'dataApi',\n Events = 'events',\n ClientConfiguration = 'clientConfiguration',\n}\n\nexport type DomainsType = {\n [key in UrlType]: DomainType;\n};\n\nexport type DomainType = {\n subdomain: string;\n topLevelDomain: string;\n secondLevelDomain: string;\n};\n\nexport type UrlProviderInitializeParamsType = {\n domain: string | null;\n siteCode: string;\n packageInfo: ExternalPackageInfoType;\n environment: Environment;\n};\n\nexport type RequesterParamsType = {\n urlProvider: IUrlProvider;\n packageInfo: ExternalPackageInfoType;\n externalRequester: IExternalRequester;\n trackRetryDelay: number;\n requestTimeout: number;\n};\n\nexport type TrackExperimentParamsType = {\n dataUrl: string;\n variationDataUrl: string;\n visitorCode: string;\n isUnallocated: boolean;\n userAgent?: string;\n isTargetedRule?: boolean;\n};\n\nexport type TrackDataParamsType = {\n visitorCode: string;\n body: string;\n userAgent?: string;\n isMappingIdentifier?: boolean;\n};\n\nexport type GetVisitorDataParamsType = {\n visitorCode: string;\n filters: VisitorDataFiltersType;\n isMappingIdentifier?: boolean;\n};\n\nexport type GetVisitorDataUrlParamsType = {\n visitorCode: string;\n filters: VisitorDataFiltersType;\n isMappingIdentifier?: boolean;\n};\n\ntype EventDataType = {\n sdk?: {\n name: string;\n version: string;\n };\n itp: boolean;\n time: number;\n};\n\ntype CustomDataEventType = {\n data: {\n index: number;\n valuesCountMap: {\n [value: string]: number;\n };\n overwrite: boolean;\n mappingIdentifier: boolean;\n };\n} & EventDataType;\n\ntype ExperimentEventType = {\n data: {\n id: number;\n variationId: number;\n };\n} & EventDataType;\n\ntype ConversionEventType = {\n data: {\n goalId: number;\n revenue: number;\n negative: boolean;\n };\n} & EventDataType;\n\ntype BrowserIndexType = (typeof BrowserIndexMap)[BrowserType];\ntype OperatingSystemIndexType =\n (typeof OperatingSystemIndexMap)[OperatingSystemType];\n\nexport type PageEventType = {\n data: {\n href: string;\n canonicalHref: string | null;\n title: string;\n keyPagesIndices: number[] | [null];\n referrerHref: string | null;\n referrersIndices: number[] | [null];\n };\n} & EventDataType;\n\nexport type GeolocationEventType = {\n data: {\n country: string;\n region: string | null;\n city: string | null;\n postalCode: string | null;\n latitude: number | null;\n longitude: number | null;\n };\n} & EventDataType;\n\nexport type StaticDataEventType = {\n data: {\n visitNumber: number;\n timeSincePreviousVisit: number;\n firstReferrerHref: string | null;\n browser: BrowserType | null;\n browserIndex: BrowserIndexType | null;\n browserVersion: number | null;\n os: OperatingSystemType | null;\n osIndex: OperatingSystemIndexType | null;\n windowWidth: number | null;\n windowHeight: number | null;\n screenWidth: number | null;\n screenHeight: number | null;\n timeZoneId: string | null;\n localeLanguageTag: string | null;\n deviceType: DeviceType | null;\n mappingIdentifier: string | null;\n };\n} & EventDataType;\n\nexport type VisitType = {\n siteCode: string;\n visitorCode: string;\n timeStarted: number;\n customDataEvents?: CustomDataEventType[];\n experimentEvents?: ExperimentEventType[];\n conversionEvents?: ConversionEventType[];\n geolocationEvents?: GeolocationEventType[];\n staticDataEvent?: StaticDataEventType;\n pageEvents?: PageEventType[];\n};\n\nexport type GetVisitorDataResultType = {\n previousVisits?: VisitType[];\n currentVisit?: VisitType;\n kcs?: KCSType;\n};\n\nexport enum HttpMethod {\n Get = 'GET',\n Post = 'POST',\n}\n\nexport enum DataApiQuery {\n VisitEvent,\n VisitData,\n DataMap,\n}\n\nconst EVENT_TYPE_KEYS = [\n 'customData',\n 'staticData',\n 'page',\n 'conversion',\n 'geolocation',\n 'activity',\n 'experiment',\n] as const;\nconst PARAMETER_KEYS = [\n 'valuesCountMap',\n 'mappingValue',\n 'id',\n 'nonce',\n 'country',\n 'environment',\n 'city',\n 'region',\n 'latitude',\n 'geolocation',\n 'longitude',\n 'mappingIdentifier',\n 'postalCode',\n 'sdkName',\n 'sdkVersion',\n 'kcs',\n 'browserIndex',\n 'browserVersion',\n 'siteCode',\n 'visitorCode',\n 'currentVisit',\n 'maxNumberPreviousVisits',\n 'customData',\n 'negative',\n 'revenue',\n 'title',\n 'os',\n 'conversion',\n 'staticData',\n 'osIndex',\n 'browser',\n 'referrersIndices',\n 'overwrite',\n 'index',\n 'href',\n 'experiment',\n 'page',\n 'variationId',\n 'deviceType',\n 'goalId',\n 'ts',\n 'key',\n] as const;\nconst TRACKING_KEYS = ['visit', 'map'] as const;\nconst QUERY_KEYS = ['sse', 'visitor', 'map', 'events'] as const;\n\nexport type TrackingType = Record<\n Capitalize<(typeof TRACKING_KEYS)[number]>,\n string\n>;\nexport type QueryType = Record<Capitalize<(typeof QUERY_KEYS)[number]>, string>;\nexport type ParameterType = Record<\n Capitalize<(typeof PARAMETER_KEYS)[number]>,\n string\n>;\nexport type EventType = Record<\n Capitalize<(typeof EVENT_TYPE_KEYS)[number]>,\n string\n>;\n\nexport type StrictTrackingRecord<T> = {\n [K in keyof T]: `${Uncapitalize<K & string>}/`;\n};\nexport type StrictQueryRecord<T> = {\n [K in keyof T]: `${Uncapitalize<K & string>}?siteCode=`;\n};\nexport type StrictEventTypeRecord<T> = {\n [K in keyof T]: `eventType=${Uncapitalize<K & string>}`;\n};\nexport type StrictParameterRecord<T> = {\n [K in keyof T]: `&${Uncapitalize<K & string>}=`;\n};\nexport type StrictFirstParameterRecord<T> = {\n [K in keyof T]: `?${Uncapitalize<K & string>}=`;\n};\n\n/**\n * @type `HeadersType` - a type of headers available in the request\n * */\nexport type HeadersType = Partial<Record<Header, string>>;\n\nexport type TrackParametersType = {\n url: string;\n headers?: HeadersType;\n body: string;\n};\n\n/**\n * @type `RequestParametersType` - a type of parameters available in the request for each request type\n * */\nexport type RequestParametersType = {\n [RequestType.Configuration]: {\n headers?: HeadersType;\n signal: AbortSignal | null;\n method: HttpMethod.Get;\n };\n [RequestType.Tracking]: {\n headers?: HeadersType;\n body: string;\n signal: AbortSignal | null;\n method: HttpMethod.Post;\n };\n [RequestType.RemoteData]: {\n signal: AbortSignal | null;\n method: HttpMethod.Get;\n };\n};\n\n/**\n * @enum `RequestType` - an enum of available request types\n * */\nexport enum RequestType {\n Configuration = 'configuration',\n Tracking = 'tracking',\n RemoteData = 'remoteData',\n}\n\n/**\n * @type `RetryCountType` - a type of retry count available for each request type\n * @param {0 | 1 | 2} `RequestType.Configuration` - a count of retries for configuration request (`0` is the initial request)\n * @param {0 | 1 | 2} `RequestType.Tracking` - a count of retries for tracking request (`0` is the initial request)\n * @param {0} `RequestType.RemoteData` - a count of retries for remote data request (`0` is the initial request)\n * */\nexport type RetryCountType = {\n [RequestType.Configuration]: 0 | 1 | 2;\n [RequestType.Tracking]: 0 | 1 | 2;\n [RequestType.RemoteData]: 0;\n};\n\n/**\n * @type `SendRequestParametersType` - a type of parameters available to send a request\n * @param {T extends RequestType} T - a type of request constrained by `RequestType`\n * @param {string} url - url address\n * @param {RequestParametersType[T]} parameters - parameters of the request depending on the request type\n * @param {RetryCountType | undefined} retryCount - a count of retries, the possible count of retries depends on `RequestType`\n * */\nexport type SendRequestParametersType<T extends RequestType> = {\n requestType: T;\n url: string;\n retryCount?: RetryCountType[T];\n parameters: RequestParametersType[T];\n};\n\n// TODO:\n// - `text` parameter should become non-optional in core v5\n// - All according `if` checks should be removed from `./requester.ts`\n/**\n * @type `KameleoonResponse` - a type of response that is assignable to most libraries `Response` objects\n * @property {number} status - a status of the response\n * @property {() => Promise<JSONType>} json - a method to parse the response to JSON\n * @property {() => Promise<string>| undefined} text - a method to parse the response to text\n * @property {boolean} ok - a boolean value that indicates if the response is ok\n * */\nexport type KameleoonResponseType = {\n status: number;\n json: () => Promise<JSONType>;\n text?: () => Promise<string>;\n ok: boolean;\n};\n\nexport type InternalSendRequestParametersType = {\n requestType: RequestType;\n url: string;\n retryCount: number;\n headers?: HeadersType;\n body?: string;\n};\n\n/**\n * @interface `IExternalRequester` - an interface of External Requester which will be used to perform requests.\n * */\nexport interface IExternalRequester {\n /**\n * @method sendRequest - send a request\n * @param {SendRequestParametersType<T>} parameters - parameters of the request depending on the request type\n * @returns {Promise<KameleoonResponseType>} - a promise that resolves to the response\n * */\n sendRequest: <T extends RequestType>({\n requestType,\n url,\n parameters,\n }: SendRequestParametersType<T>) => Promise<KameleoonResponseType>;\n}\n"],"mappings":"0JAgBY,CAAAA,OAAO,CAAAC,OAAA,CAAAD,OAAA,UAAPA,CAAO,QAAP,CAAAA,CAAO,CAAAE,OAAA,WAAPF,CAAO,CAAAG,MAAA,UAAPH,CAAO,CAAAI,mBAAA,uBAAPJ,CAAO,MA+JPK,UAAU,CAAAJ,OAAA,CAAAI,UAAA,UAAVA,CAAU,QAAV,CAAAA,CAAU,CAAAC,GAAA,OAAVD,CAAU,CAAAE,IAAA,QAAVF,CAAU,MAKVG,YAAY,CAAAP,OAAA,CAAAO,YAAA,UAAZA,CAAY,QAAZ,CAAAA,CAAY,CAAZA,CAAY,CAAAC,UAAA,iBAAZD,CAAY,CAAZA,CAAY,CAAAE,SAAA,gBAAZF,CAAY,CAAZA,CAAY,CAAAG,OAAA,cAAZH,CAAY,WAMlB,CAAAI,eAAe,CAAG,CACtB,YAAY,CACZ,YAAY,CACZ,MAAM,CACN,YAAY,CACZ,aAAa,CACb,UAAU,CACV,YAAY,CACJ,CACJC,cAAc,CAAG,CACrB,gBAAgB,CAChB,cAAc,CACd,IAAI,CACJ,OAAO,CACP,SAAS,CACT,aAAa,CACb,MAAM,CACN,QAAQ,CACR,UAAU,CACV,aAAa,CACb,WAAW,CACX,mBAAmB,CACnB,YAAY,CACZ,SAAS,CACT,YAAY,CACZ,KAAK,CACL,cAAc,CACd,gBAAgB,CAChB,UAAU,CACV,aAAa,CACb,cAAc,CACd,yBAAyB,CACzB,YAAY,CACZ,UAAU,CACV,SAAS,CACT,OAAO,CACP,IAAI,CACJ,YAAY,CACZ,YAAY,CACZ,SAAS,CACT,SAAS,CACT,kBAAkB,CAClB,WAAW,CACX,OAAO,CACP,MAAM,CACN,YAAY,CACZ,MAAM,CACN,aAAa,CACb,YAAY,CACZ,QAAQ,CACR,IAAI,CACJ,KAAK,CACG,CACJC,aAAa,CAAG,CAAC,OAAO,CAAE,KAAK,CAAU,CACzCC,UAAU,CAAG,CAAC,KAAK,CAAE,SAAS,CAAE,KAAK,CAAE,QAAQ,CAAU,IAmEnD,CAAAC,WAAW,CAAAf,OAAA,CAAAe,WAAA,UAAXA,CAAW,QAAX,CAAAA,CAAW,CAAAC,aAAA,iBAAXD,CAAW,CAAAE,QAAA,YAAXF,CAAW,CAAAG,UAAA,cAAXH,CAAW"}
|
|
1
|
+
{"version":3,"file":"types.js","names":["UrlType","exports","DataApi","Events","ClientConfiguration","HttpMethod","Get","Post","DataApiQuery","VisitEvent","VisitData","DataMap","EVENT_TYPE_KEYS","PARAMETER_KEYS","TRACKING_KEYS","QUERY_KEYS","RequestType","Configuration","Tracking","RemoteData"],"sources":["../../src/requester/types.ts"],"sourcesContent":["import { JSONType } from 'src/clientConfiguration';\nimport { Environment, ExternalPackageInfoType } from 'src/types';\nimport {\n BrowserIndexMap,\n BrowserType,\n OperatingSystemType,\n} from 'src/kameleoonData';\nimport {\n DeviceType,\n KCSType,\n OperatingSystemIndexMap,\n} from 'src/kameleoonData/types';\nimport { Header } from './constants';\nimport { VisitorDataFiltersType } from 'src/utilities';\nimport { IUrlProvider } from './urlProvider';\n\nexport enum UrlType {\n DataApi = 'dataApi',\n Events = 'events',\n ClientConfiguration = 'clientConfiguration',\n}\n\nexport type DomainsType = {\n [key in UrlType]: DomainType;\n};\n\nexport type DomainType = {\n subdomain: string;\n topLevelDomain: string;\n secondLevelDomain: string;\n};\n\nexport type UrlProviderInitializeParamsType = {\n domain: string | null;\n siteCode: string;\n packageInfo: ExternalPackageInfoType;\n environment: Environment;\n};\n\nexport type RequesterParamsType = {\n useAbortController: boolean;\n urlProvider: IUrlProvider;\n packageInfo: ExternalPackageInfoType;\n externalRequester: IExternalRequester;\n trackRetryDelay: number;\n requestTimeout: number;\n};\n\nexport type GetVisitorDataParamsType = {\n visitorCode: string;\n filters: VisitorDataFiltersType;\n isMappingIdentifier?: boolean;\n};\n\nexport type GetVisitorDataUrlParamsType = {\n visitorCode: string;\n filters: VisitorDataFiltersType;\n isMappingIdentifier?: boolean;\n};\n\ntype EventDataType = {\n sdk?: {\n name: string;\n version: string;\n };\n itp: boolean;\n time: number;\n};\n\ntype CustomDataEventType = {\n data: {\n index: number;\n valuesCountMap: {\n [value: string]: number;\n };\n overwrite: boolean;\n mappingIdentifier: boolean;\n };\n} & EventDataType;\n\ntype ExperimentEventType = {\n data: {\n id: number;\n variationId: number;\n };\n} & EventDataType;\n\ntype ConversionEventType = {\n data: {\n goalId: number;\n revenue: number;\n negative: boolean;\n };\n} & EventDataType;\n\ntype BrowserIndexType = (typeof BrowserIndexMap)[BrowserType];\ntype OperatingSystemIndexType =\n (typeof OperatingSystemIndexMap)[OperatingSystemType];\n\nexport type PageEventType = {\n data: {\n href: string;\n canonicalHref: string | null;\n title: string;\n keyPagesIndices: number[] | [null];\n referrerHref: string | null;\n referrersIndices: number[] | [null];\n };\n} & EventDataType;\n\nexport type GeolocationEventType = {\n data: {\n country: string;\n region: string | null;\n city: string | null;\n postalCode: string | null;\n latitude: number | null;\n longitude: number | null;\n };\n} & EventDataType;\n\nexport type StaticDataEventType = {\n data: {\n visitNumber: number;\n timeSincePreviousVisit: number;\n firstReferrerHref: string | null;\n browser: BrowserType | null;\n browserIndex: BrowserIndexType | null;\n browserVersion: number | null;\n os: OperatingSystemType | null;\n osIndex: OperatingSystemIndexType | null;\n windowWidth: number | null;\n windowHeight: number | null;\n screenWidth: number | null;\n screenHeight: number | null;\n timeZoneId: string | null;\n localeLanguageTag: string | null;\n deviceType: DeviceType | null;\n mappingIdentifier: string | null;\n };\n} & EventDataType;\n\nexport type VisitType = {\n siteCode: string;\n visitorCode: string;\n timeStarted: number;\n customDataEvents?: CustomDataEventType[];\n experimentEvents?: ExperimentEventType[];\n conversionEvents?: ConversionEventType[];\n geolocationEvents?: GeolocationEventType[];\n staticDataEvent?: StaticDataEventType;\n pageEvents?: PageEventType[];\n};\n\nexport type GetVisitorDataResultType = {\n previousVisits?: VisitType[];\n currentVisit?: VisitType;\n kcs?: KCSType;\n};\n\nexport enum HttpMethod {\n Get = 'GET',\n Post = 'POST',\n}\n\nexport enum DataApiQuery {\n VisitEvent,\n VisitData,\n DataMap,\n}\n\nconst EVENT_TYPE_KEYS = [\n 'customData',\n 'staticData',\n 'page',\n 'conversion',\n 'geolocation',\n 'activity',\n 'experiment',\n] as const;\nconst PARAMETER_KEYS = [\n 'valuesCountMap',\n 'mappingValue',\n 'id',\n 'nonce',\n 'country',\n 'environment',\n 'city',\n 'region',\n 'latitude',\n 'geolocation',\n 'longitude',\n 'mappingIdentifier',\n 'postalCode',\n 'sdkName',\n 'sdkVersion',\n 'kcs',\n 'browserIndex',\n 'browserVersion',\n 'siteCode',\n 'visitorCode',\n 'currentVisit',\n 'maxNumberPreviousVisits',\n 'customData',\n 'negative',\n 'revenue',\n 'title',\n 'os',\n 'conversion',\n 'staticData',\n 'osIndex',\n 'browser',\n 'referrersIndices',\n 'overwrite',\n 'index',\n 'href',\n 'experiment',\n 'page',\n 'variationId',\n 'deviceType',\n 'goalId',\n 'ts',\n 'key',\n 'userAgent',\n 'bodyUa',\n] as const;\nconst TRACKING_KEYS = ['visit', 'map'] as const;\nconst QUERY_KEYS = ['sse', 'visitor', 'map', 'events'] as const;\n\nexport type TrackingType = Record<\n Capitalize<(typeof TRACKING_KEYS)[number]>,\n string\n>;\nexport type QueryType = Record<Capitalize<(typeof QUERY_KEYS)[number]>, string>;\nexport type ParameterType = Record<\n Capitalize<(typeof PARAMETER_KEYS)[number]>,\n string\n>;\nexport type EventType = Record<\n Capitalize<(typeof EVENT_TYPE_KEYS)[number]>,\n string\n>;\n\nexport type StrictTrackingRecord<T> = {\n [K in keyof T]: `${Uncapitalize<K & string>}/`;\n};\nexport type StrictQueryRecord<T> = {\n [K in keyof T]: `${Uncapitalize<K & string>}?siteCode=`;\n};\nexport type StrictEventTypeRecord<T> = {\n [K in keyof T]: `eventType=${Uncapitalize<K & string>}`;\n};\nexport type StrictParameterRecord<T> = {\n [K in keyof T]: `&${Uncapitalize<K & string>}=`;\n};\nexport type StrictFirstParameterRecord<T> = {\n [K in keyof T]: `?${Uncapitalize<K & string>}=`;\n};\n\n/**\n * @type `HeadersType` - a type of headers available in the request\n * */\nexport type HeadersType = Partial<Record<Header, string>>;\n\n/**\n * @type `RequestParametersType` - a type of parameters available in the request for each request type\n * */\nexport type RequestParametersType = {\n [RequestType.Configuration]: {\n headers?: HeadersType;\n signal: AbortSignal | null;\n method: HttpMethod.Get;\n };\n [RequestType.Tracking]: {\n headers?: HeadersType;\n body: string;\n signal: AbortSignal | null;\n method: HttpMethod.Post;\n };\n [RequestType.RemoteData]: {\n signal: AbortSignal | null;\n method: HttpMethod.Get;\n };\n};\n\n/**\n * @enum `RequestType` - an enum of available request types\n * */\nexport enum RequestType {\n Configuration = 'configuration',\n Tracking = 'tracking',\n RemoteData = 'remoteData',\n}\n\n/**\n * @type `RetryCountType` - a type of retry count available for each request type\n * @param {0 | 1 | 2} `RequestType.Configuration` - a count of retries for configuration request (`0` is the initial request)\n * @param {0 | 1 | 2} `RequestType.Tracking` - a count of retries for tracking request (`0` is the initial request)\n * @param {0} `RequestType.RemoteData` - a count of retries for remote data request (`0` is the initial request)\n * */\nexport type RetryCountType = {\n [RequestType.Configuration]: 0 | 1 | 2;\n [RequestType.Tracking]: 0 | 1 | 2;\n [RequestType.RemoteData]: 0;\n};\n\n/**\n * @type `SendRequestParametersType` - a type of parameters available to send a request\n * @param {T extends RequestType} T - a type of request constrained by `RequestType`\n * @param {string} url - url address\n * @param {RequestParametersType[T]} parameters - parameters of the request depending on the request type\n * @param {RetryCountType | undefined} retryCount - a count of retries, the possible count of retries depends on `RequestType`\n * */\nexport type SendRequestParametersType<T extends RequestType> = {\n requestType: T;\n url: string;\n retryCount?: RetryCountType[T];\n parameters: RequestParametersType[T];\n};\n\n/**\n * @type `KameleoonResponse` - a type of response that is assignable to most libraries `Response` objects\n * @property {number} status - a status of the response\n * @property {() => Promise<JSONType>} json - a method to parse the response to JSON\n * @property {() => Promise<string>} text - a method to parse the response to text\n * @property {boolean} ok - a boolean value that indicates if the response is ok\n * */\nexport type KameleoonResponseType = {\n status: number;\n json: () => Promise<JSONType>;\n text: () => Promise<string>;\n ok: boolean;\n};\n\nexport type InternalSendRequestParametersType<T extends RequestType> = {\n url: string;\n requestType: RequestType;\n retryCount: number;\n parameters: Omit<RequestParametersType[T], 'signal'>;\n};\n\n/**\n * @interface `IExternalRequester` - an interface of External Requester which will be used to perform requests.\n * */\nexport interface IExternalRequester {\n /**\n * @method sendRequest - send a request\n * @param {SendRequestParametersType<T>} parameters - parameters of the request depending on the request type\n * @returns {Promise<KameleoonResponseType>} - a promise that resolves to the response\n * */\n sendRequest: <T extends RequestType>({\n requestType,\n url,\n parameters,\n }: SendRequestParametersType<T>) => Promise<KameleoonResponseType>;\n}\n"],"mappings":"0JAgBY,CAAAA,OAAO,CAAAC,OAAA,CAAAD,OAAA,UAAPA,CAAO,QAAP,CAAAA,CAAO,CAAAE,OAAA,WAAPF,CAAO,CAAAG,MAAA,UAAPH,CAAO,CAAAI,mBAAA,uBAAPJ,CAAO,MAgJPK,UAAU,CAAAJ,OAAA,CAAAI,UAAA,UAAVA,CAAU,QAAV,CAAAA,CAAU,CAAAC,GAAA,OAAVD,CAAU,CAAAE,IAAA,QAAVF,CAAU,MAKVG,YAAY,CAAAP,OAAA,CAAAO,YAAA,UAAZA,CAAY,QAAZ,CAAAA,CAAY,CAAZA,CAAY,CAAAC,UAAA,iBAAZD,CAAY,CAAZA,CAAY,CAAAE,SAAA,gBAAZF,CAAY,CAAZA,CAAY,CAAAG,OAAA,cAAZH,CAAY,WAMlB,CAAAI,eAAe,CAAG,CACtB,YAAY,CACZ,YAAY,CACZ,MAAM,CACN,YAAY,CACZ,aAAa,CACb,UAAU,CACV,YAAY,CACJ,CACJC,cAAc,CAAG,CACrB,gBAAgB,CAChB,cAAc,CACd,IAAI,CACJ,OAAO,CACP,SAAS,CACT,aAAa,CACb,MAAM,CACN,QAAQ,CACR,UAAU,CACV,aAAa,CACb,WAAW,CACX,mBAAmB,CACnB,YAAY,CACZ,SAAS,CACT,YAAY,CACZ,KAAK,CACL,cAAc,CACd,gBAAgB,CAChB,UAAU,CACV,aAAa,CACb,cAAc,CACd,yBAAyB,CACzB,YAAY,CACZ,UAAU,CACV,SAAS,CACT,OAAO,CACP,IAAI,CACJ,YAAY,CACZ,YAAY,CACZ,SAAS,CACT,SAAS,CACT,kBAAkB,CAClB,WAAW,CACX,OAAO,CACP,MAAM,CACN,YAAY,CACZ,MAAM,CACN,aAAa,CACb,YAAY,CACZ,QAAQ,CACR,IAAI,CACJ,KAAK,CACL,WAAW,CACX,QAAQ,CACA,CACJC,aAAa,CAAG,CAAC,OAAO,CAAE,KAAK,CAAU,CACzCC,UAAU,CAAG,CAAC,KAAK,CAAE,SAAS,CAAE,KAAK,CAAE,QAAQ,CAAU,IA6DnD,CAAAC,WAAW,CAAAf,OAAA,CAAAe,WAAA,UAAXA,CAAW,QAAX,CAAAA,CAAW,CAAAC,aAAA,iBAAXD,CAAW,CAAAE,QAAA,YAAXF,CAAW,CAAAG,UAAA,cAAXH,CAAW","ignoreList":[]}
|
|
@@ -5,7 +5,7 @@ export interface IUrlProvider {
|
|
|
5
5
|
getEventSourceUrl(): string;
|
|
6
6
|
getRemoteDataUrl(key: string): string;
|
|
7
7
|
getVisitorDataUrl(params: GetVisitorDataUrlParamsType): string;
|
|
8
|
-
getTrackingUrl(
|
|
8
|
+
getTrackingUrl(isBodyUserAgent: boolean): string;
|
|
9
9
|
dataApiDomain: string;
|
|
10
10
|
}
|
|
11
11
|
export declare class UrlProvider implements IUrlProvider {
|
|
@@ -21,7 +21,7 @@ export declare class UrlProvider implements IUrlProvider {
|
|
|
21
21
|
getEventSourceUrl(): string;
|
|
22
22
|
getRemoteDataUrl(key: string): string;
|
|
23
23
|
getVisitorDataUrl({ visitorCode, filters, isMappingIdentifier, }: GetVisitorDataUrlParamsType): string;
|
|
24
|
-
getTrackingUrl(
|
|
24
|
+
getTrackingUrl(isBodyUserAgent: boolean): string;
|
|
25
25
|
private isInitialized;
|
|
26
26
|
private getDataApiUrl;
|
|
27
27
|
private setDomains;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.UrlProvider=void 0;var _types=require("../types"),_constants=require("./constants"),_types2=require("./types");function ownKeys(a,b){var c=Object.keys(a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(a);b&&(d=d.filter(function(b){return Object.getOwnPropertyDescriptor(a,b).enumerable})),c.push.apply(c,d)}return c}function _objectSpread(a){for(var b,c=1;c<arguments.length;c++)b=null==arguments[c]?{}:arguments[c],c%2?ownKeys(Object(b),!0).forEach(function(c){_defineProperty(a,c,b[c])}):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(b)):ownKeys(Object(b)).forEach(function(c){Object.defineProperty(a,c,Object.getOwnPropertyDescriptor(b,c))});return a}function _defineProperty(a,b,c){return
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.UrlProvider=void 0;var _types=require("../types"),_constants=require("./constants"),_types2=require("./types");function ownKeys(a,b){var c=Object.keys(a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(a);b&&(d=d.filter(function(b){return Object.getOwnPropertyDescriptor(a,b).enumerable})),c.push.apply(c,d)}return c}function _objectSpread(a){for(var b,c=1;c<arguments.length;c++)b=null==arguments[c]?{}:arguments[c],c%2?ownKeys(Object(b),!0).forEach(function(c){_defineProperty(a,c,b[c])}):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(b)):ownKeys(Object(b)).forEach(function(c){Object.defineProperty(a,c,Object.getOwnPropertyDescriptor(b,c))});return a}function _defineProperty(a,b,c){return(b=_toPropertyKey(b))in a?Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!0}):a[b]=c,a}function _toPropertyKey(a){var b=_toPrimitive(a,"string");return"symbol"==typeof b?b:b+""}function _toPrimitive(a,b){if("object"!=typeof a||!a)return a;var c=a[Symbol.toPrimitive];if(void 0!==c){var d=c.call(a,b||"default");if("object"!=typeof d)return d;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===b?String:Number)(a)}class UrlProvider{constructor(){_defineProperty(this,"ready",!1),_defineProperty(this,"isCustomDomain",!1),_defineProperty(this,"domains",_constants.DEFAULT_DOMAINS),_defineProperty(this,"siteCode",void 0),_defineProperty(this,"environment",void 0),_defineProperty(this,"packageInfo",void 0)}initialize(a){let{domain:b,siteCode:c,packageInfo:d,environment:e}=a;this.siteCode=c,this.environment=e,this.packageInfo=d,this.ready=!0,this.setDomains(b)}set dataApiDomain(a){if(!this.isCustomDomain){const b=a.split(".");if(3===b.length){const[a,c,d]=b;this.domains[_types2.UrlType.DataApi]={subdomain:a,secondLevelDomain:c,topLevelDomain:d}}}}getClientConfigurationUrl(a){this.isInitialized();const{subdomain:b,topLevelDomain:c,secondLevelDomain:d}=this.domains[_types2.UrlType.ClientConfiguration],e=this.environment===_types.Environment.Production?"":_constants.UrlFirstParameter.Environment+this.environment;let f="";return a&&(e?f=_constants.UrlParameter.Ts+a:f=_constants.UrlFirstParameter.Ts+a),`https://${b}.${d}.${c}/`+this.siteCode+e+f}getEventSourceUrl(){this.isInitialized();const{subdomain:a,topLevelDomain:b,secondLevelDomain:c}=this.domains[_types2.UrlType.Events];return`https://${a}.${c}.${b}:8110/${_constants.UrlQuery.Sse}${this.siteCode}`}getRemoteDataUrl(a){return this.isInitialized(),this.getDataApiUrl(_types2.DataApiQuery.DataMap)+this.siteCode+_constants.UrlParameter.Key+encodeURI(a)}getVisitorDataUrl(a){let{visitorCode:b,filters:c,isMappingIdentifier:d}=a;this.isInitialized();const{customData:e,previousVisitAmount:f,currentVisit:g,conversions:h,geolocation:i,experiments:j,pageViews:k,device:l,browser:m,operatingSystem:n,kcs:o}=c,p=d?_constants.UrlParameter.MappingValue:_constants.UrlParameter.VisitorCode,q=e?_constants.UrlParameter.CustomData+!0:"",r=h?_constants.UrlParameter.Conversion+!0:"",s=i?_constants.UrlParameter.Geolocation+!0:"",t=j?_constants.UrlParameter.Experiment+!0:"",u=k?_constants.UrlParameter.Page+!0:"",v=!!(l||m||n)?_constants.UrlParameter.StaticData+!0:"",w=g?_constants.UrlParameter.CurrentVisit+!0:"",x=o?_constants.UrlParameter.Kcs+!0:"",y="number"==typeof f?_constants.UrlParameter.MaxNumberPreviousVisits+f:_constants.UrlParameter.MaxNumberPreviousVisits+1;return this.getDataApiUrl(_types2.DataApiQuery.VisitData)+this.siteCode+p+b+y+q+r+s+t+u+v+w+x}getTrackingUrl(a){this.isInitialized();const{type:b,version:c}=this.packageInfo;let d=this.getDataApiUrl(_types2.DataApiQuery.VisitEvent)+this.siteCode+_constants.UrlParameter.SdkName+b.toLowerCase()+_constants.UrlParameter.SdkVersion+c;return a&&(d+=_constants.UrlParameter.BodyUa+!0),d}isInitialized(){if(!this.ready)throw new Error("UrlProvider is not initialized")}getDataApiUrl(a){const{subdomain:b,topLevelDomain:c,secondLevelDomain:d}=this.domains[_types2.UrlType.DataApi];if(!b||!c||!d)throw new Error("Data API domain is not set");const e=`https://${b}.${d}.${c}`;return a===_types2.DataApiQuery.VisitEvent?`${e}/${_constants.UrlTracking.Visit+_constants.UrlQuery.Events}`:a===_types2.DataApiQuery.VisitData?`${e}/${_constants.UrlTracking.Visit+_constants.UrlQuery.Visitor}`:a===_types2.DataApiQuery.DataMap?`${e}/${_constants.UrlTracking.Map+_constants.UrlQuery.Map}`:void 0}setDomains(a){if(!a)return;this.isCustomDomain=!0;const b=a.split("."),[c,d]=b,e={secondLevelDomain:c,topLevelDomain:d};this.domains={[_types2.UrlType.DataApi]:_objectSpread(_objectSpread({},this.domains[_types2.UrlType.DataApi]),e),[_types2.UrlType.Events]:_objectSpread(_objectSpread({},this.domains[_types2.UrlType.Events]),e),[_types2.UrlType.ClientConfiguration]:_objectSpread(_objectSpread({},this.domains[_types2.UrlType.ClientConfiguration]),e)}}}exports.UrlProvider=UrlProvider;
|
|
2
2
|
//# sourceMappingURL=urlProvider.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"urlProvider.js","names":["UrlProvider","constructor","_defineProperty","DEFAULT_DOMAINS","initialize","a","domain","siteCode","packageInfo","environment","ready","setDomains","dataApiDomain","isCustomDomain","parts","split","length","subdomain","secondLevelDomain","topLevelDomain","domains","UrlType","DataApi","getClientConfigurationUrl","timeStamp","isInitialized","ClientConfiguration","baseUrl","concat","environmentParam","Environment","Production","UrlFirstParameter","timeStampParam","UrlParameter","Ts","getEventSourceUrl","Events","UrlQuery","Sse","getRemoteDataUrl","key","getDataApiUrl","DataApiQuery","DataMap","Key","encodeURI","getVisitorDataUrl","visitorCode","filters","isMappingIdentifier","customData","previousVisitAmount","currentVisit","conversions","geolocation","experiments","pageViews","device","browser","operatingSystem","kcs","identifierParameter","MappingValue","VisitorCode","customDataParameter","CustomData","conversionsParameter","Conversion","geolocationParameter","Geolocation","experimentsParameter","Experiment","pageViewsParameter","Page","staticDataParameter","StaticData","currentVisitParameter","CurrentVisit","kcsParameter","Kcs","previousVisitAmountParam","MaxNumberPreviousVisits","VisitData","getTrackingUrl","type","version","VisitEvent","SdkName","toLowerCase","SdkVersion","Error","query","UrlTracking","Visit","Visitor","Map","domainData","_objectSpread","exports"],"sources":["../../src/requester/urlProvider.ts"],"sourcesContent":["import { Environment, ExternalPackageInfoType } from 'src/types';\nimport {\n UrlFirstParameter,\n UrlParameter,\n UrlTracking,\n UrlQuery,\n DEFAULT_DOMAINS,\n} from './constants';\nimport {\n DataApiQuery,\n DomainsType,\n GetVisitorDataUrlParamsType,\n UrlProviderInitializeParamsType,\n UrlType,\n} from './types';\n\nexport interface IUrlProvider {\n initialize(params: UrlProviderInitializeParamsType): void;\n getClientConfigurationUrl(timeStamp?: number): string;\n getEventSourceUrl(): string;\n getRemoteDataUrl(key: string): string;\n getVisitorDataUrl(params: GetVisitorDataUrlParamsType): string;\n getTrackingUrl(visitorCode: string, isMappingIdentifier?: boolean): string;\n dataApiDomain: string;\n}\n\nexport class UrlProvider implements IUrlProvider {\n private ready = false;\n private isCustomDomain = false;\n private domains: DomainsType = DEFAULT_DOMAINS;\n private siteCode?: string;\n private environment?: Environment;\n private packageInfo?: ExternalPackageInfoType;\n\n public initialize({\n domain,\n siteCode,\n packageInfo,\n environment,\n }: UrlProviderInitializeParamsType) {\n this.siteCode = siteCode;\n this.environment = environment;\n this.packageInfo = packageInfo;\n this.ready = true;\n\n this.setDomains(domain);\n }\n\n set dataApiDomain(domain: string) {\n if (this.isCustomDomain) {\n return;\n }\n\n const parts = domain.split('.');\n\n if (parts.length !== 3) {\n return;\n }\n\n const [subdomain, secondLevelDomain, topLevelDomain] = parts;\n\n this.domains[UrlType.DataApi] = {\n subdomain,\n secondLevelDomain,\n topLevelDomain,\n };\n }\n\n public getClientConfigurationUrl(timeStamp?: number): string {\n this.isInitialized();\n\n const { subdomain, topLevelDomain, secondLevelDomain } =\n this.domains[UrlType.ClientConfiguration];\n\n const baseUrl = `https://${subdomain}.${secondLevelDomain}.${topLevelDomain}/`;\n const environmentParam =\n this.environment === Environment.Production\n ? ''\n : UrlFirstParameter.Environment + this.environment;\n let timeStampParam = '';\n\n if (timeStamp) {\n if (environmentParam) {\n timeStampParam = UrlParameter.Ts + timeStamp;\n } else {\n timeStampParam = UrlFirstParameter.Ts + timeStamp;\n }\n }\n\n return baseUrl + this.siteCode + environmentParam + timeStampParam;\n }\n\n public getEventSourceUrl(): string {\n this.isInitialized();\n\n const { subdomain, topLevelDomain, secondLevelDomain } =\n this.domains[UrlType.Events];\n\n return `https://${subdomain}.${secondLevelDomain}.${topLevelDomain}:8110/${UrlQuery.Sse}${this.siteCode}`;\n }\n\n public getRemoteDataUrl(key: string): string {\n this.isInitialized();\n\n return (\n this.getDataApiUrl(DataApiQuery.DataMap) +\n this.siteCode +\n UrlParameter.Key +\n encodeURI(key)\n );\n }\n\n public getVisitorDataUrl({\n visitorCode,\n filters,\n isMappingIdentifier,\n }: GetVisitorDataUrlParamsType): string {\n this.isInitialized();\n\n const {\n customData,\n previousVisitAmount,\n currentVisit,\n conversions,\n geolocation,\n experiments,\n pageViews,\n device,\n browser,\n operatingSystem,\n kcs,\n } = filters;\n\n const identifierParameter = isMappingIdentifier\n ? UrlParameter.MappingValue\n : UrlParameter.VisitorCode;\n const customDataParameter = customData\n ? UrlParameter.CustomData + true\n : '';\n const conversionsParameter = conversions\n ? UrlParameter.Conversion + true\n : '';\n const geolocationParameter = geolocation\n ? UrlParameter.Geolocation + true\n : '';\n const experimentsParameter = experiments\n ? UrlParameter.Experiment + true\n : '';\n const pageViewsParameter = pageViews ? UrlParameter.Page + true : '';\n const staticDataParameter = Boolean(device || browser || operatingSystem)\n ? UrlParameter.StaticData + true\n : '';\n const currentVisitParameter = currentVisit\n ? UrlParameter.CurrentVisit + true\n : '';\n const kcsParameter = kcs ? UrlParameter.Kcs + true : '';\n const previousVisitAmountParam =\n typeof previousVisitAmount !== 'number'\n ? UrlParameter.MaxNumberPreviousVisits + 1\n : UrlParameter.MaxNumberPreviousVisits + previousVisitAmount;\n\n return (\n this.getDataApiUrl(DataApiQuery.VisitData) +\n this.siteCode +\n identifierParameter +\n visitorCode +\n previousVisitAmountParam +\n customDataParameter +\n conversionsParameter +\n geolocationParameter +\n experimentsParameter +\n pageViewsParameter +\n staticDataParameter +\n currentVisitParameter +\n kcsParameter\n );\n }\n\n public getTrackingUrl(\n visitorCode: string,\n isMappingIdentifier?: boolean,\n ): string {\n this.isInitialized();\n\n const { type, version } = this.packageInfo!;\n\n const identifierParameter = isMappingIdentifier\n ? UrlParameter.MappingValue\n : UrlParameter.VisitorCode;\n\n return (\n this.getDataApiUrl(DataApiQuery.VisitEvent) +\n this.siteCode +\n identifierParameter +\n visitorCode +\n UrlParameter.SdkName +\n type.toLowerCase() +\n UrlParameter.SdkVersion +\n version\n );\n }\n\n private isInitialized(): void {\n if (!this.ready) {\n throw new Error('UrlProvider is not initialized');\n }\n }\n\n private getDataApiUrl(query: DataApiQuery): string {\n const { subdomain, topLevelDomain, secondLevelDomain } =\n this.domains[UrlType.DataApi];\n\n if (!subdomain || !topLevelDomain || !secondLevelDomain) {\n throw new Error('Data API domain is not set');\n }\n\n const domain = `https://${subdomain}.${secondLevelDomain}.${topLevelDomain}`;\n\n switch (query) {\n case DataApiQuery.VisitEvent:\n return `${domain}/${UrlTracking.Visit + UrlQuery.Events}`;\n case DataApiQuery.VisitData:\n return `${domain}/${UrlTracking.Visit + UrlQuery.Visitor}`;\n case DataApiQuery.DataMap:\n return `${domain}/${UrlTracking.Map + UrlQuery.Map}`;\n }\n }\n\n private setDomains(domain: string | null): void {\n if (!domain) {\n return;\n }\n\n this.isCustomDomain = true;\n\n const parts = domain.split('.');\n\n const [secondLevelDomain, topLevelDomain] = parts;\n\n const domainData = {\n secondLevelDomain,\n topLevelDomain,\n };\n\n this.domains = {\n [UrlType.DataApi]: {\n ...this.domains[UrlType.DataApi],\n ...domainData,\n },\n [UrlType.Events]: {\n ...this.domains[UrlType.Events],\n ...domainData,\n },\n [UrlType.ClientConfiguration]: {\n ...this.domains[UrlType.ClientConfiguration],\n ...domainData,\n },\n };\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"urlProvider.js","names":["UrlProvider","constructor","_defineProperty","DEFAULT_DOMAINS","initialize","a","domain","siteCode","packageInfo","environment","ready","setDomains","dataApiDomain","isCustomDomain","parts","split","length","subdomain","secondLevelDomain","topLevelDomain","domains","UrlType","DataApi","getClientConfigurationUrl","timeStamp","isInitialized","ClientConfiguration","environmentParam","Environment","Production","UrlFirstParameter","timeStampParam","UrlParameter","Ts","getEventSourceUrl","Events","UrlQuery","Sse","getRemoteDataUrl","key","getDataApiUrl","DataApiQuery","DataMap","Key","encodeURI","getVisitorDataUrl","visitorCode","filters","isMappingIdentifier","customData","previousVisitAmount","currentVisit","conversions","geolocation","experiments","pageViews","device","browser","operatingSystem","kcs","identifierParameter","MappingValue","VisitorCode","customDataParameter","CustomData","conversionsParameter","Conversion","geolocationParameter","Geolocation","experimentsParameter","Experiment","pageViewsParameter","Page","staticDataParameter","StaticData","currentVisitParameter","CurrentVisit","kcsParameter","Kcs","previousVisitAmountParam","MaxNumberPreviousVisits","VisitData","getTrackingUrl","isBodyUserAgent","type","version","url","VisitEvent","SdkName","toLowerCase","SdkVersion","BodyUa","Error","query","UrlTracking","Visit","Visitor","Map","domainData","_objectSpread","exports"],"sources":["../../src/requester/urlProvider.ts"],"sourcesContent":["import { Environment, ExternalPackageInfoType } from 'src/types';\nimport {\n UrlFirstParameter,\n UrlParameter,\n UrlTracking,\n UrlQuery,\n DEFAULT_DOMAINS,\n} from './constants';\nimport {\n DataApiQuery,\n DomainsType,\n GetVisitorDataUrlParamsType,\n UrlProviderInitializeParamsType,\n UrlType,\n} from './types';\n\nexport interface IUrlProvider {\n initialize(params: UrlProviderInitializeParamsType): void;\n getClientConfigurationUrl(timeStamp?: number): string;\n getEventSourceUrl(): string;\n getRemoteDataUrl(key: string): string;\n getVisitorDataUrl(params: GetVisitorDataUrlParamsType): string;\n getTrackingUrl(isBodyUserAgent: boolean): string;\n dataApiDomain: string;\n}\n\nexport class UrlProvider implements IUrlProvider {\n private ready = false;\n private isCustomDomain = false;\n private domains: DomainsType = DEFAULT_DOMAINS;\n private siteCode?: string;\n private environment?: Environment;\n private packageInfo?: ExternalPackageInfoType;\n\n public initialize({\n domain,\n siteCode,\n packageInfo,\n environment,\n }: UrlProviderInitializeParamsType) {\n this.siteCode = siteCode;\n this.environment = environment;\n this.packageInfo = packageInfo;\n this.ready = true;\n\n this.setDomains(domain);\n }\n\n set dataApiDomain(domain: string) {\n if (this.isCustomDomain) {\n return;\n }\n\n const parts = domain.split('.');\n\n if (parts.length !== 3) {\n return;\n }\n\n const [subdomain, secondLevelDomain, topLevelDomain] = parts;\n\n this.domains[UrlType.DataApi] = {\n subdomain,\n secondLevelDomain,\n topLevelDomain,\n };\n }\n\n public getClientConfigurationUrl(timeStamp?: number): string {\n this.isInitialized();\n\n const { subdomain, topLevelDomain, secondLevelDomain } =\n this.domains[UrlType.ClientConfiguration];\n\n const baseUrl = `https://${subdomain}.${secondLevelDomain}.${topLevelDomain}/`;\n const environmentParam =\n this.environment === Environment.Production\n ? ''\n : UrlFirstParameter.Environment + this.environment;\n let timeStampParam = '';\n\n if (timeStamp) {\n if (environmentParam) {\n timeStampParam = UrlParameter.Ts + timeStamp;\n } else {\n timeStampParam = UrlFirstParameter.Ts + timeStamp;\n }\n }\n\n return baseUrl + this.siteCode + environmentParam + timeStampParam;\n }\n\n public getEventSourceUrl(): string {\n this.isInitialized();\n\n const { subdomain, topLevelDomain, secondLevelDomain } =\n this.domains[UrlType.Events];\n\n return `https://${subdomain}.${secondLevelDomain}.${topLevelDomain}:8110/${UrlQuery.Sse}${this.siteCode}`;\n }\n\n public getRemoteDataUrl(key: string): string {\n this.isInitialized();\n\n return (\n this.getDataApiUrl(DataApiQuery.DataMap) +\n this.siteCode +\n UrlParameter.Key +\n encodeURI(key)\n );\n }\n\n public getVisitorDataUrl({\n visitorCode,\n filters,\n isMappingIdentifier,\n }: GetVisitorDataUrlParamsType): string {\n this.isInitialized();\n\n const {\n customData,\n previousVisitAmount,\n currentVisit,\n conversions,\n geolocation,\n experiments,\n pageViews,\n device,\n browser,\n operatingSystem,\n kcs,\n } = filters;\n\n const identifierParameter = isMappingIdentifier\n ? UrlParameter.MappingValue\n : UrlParameter.VisitorCode;\n const customDataParameter = customData\n ? UrlParameter.CustomData + true\n : '';\n const conversionsParameter = conversions\n ? UrlParameter.Conversion + true\n : '';\n const geolocationParameter = geolocation\n ? UrlParameter.Geolocation + true\n : '';\n const experimentsParameter = experiments\n ? UrlParameter.Experiment + true\n : '';\n const pageViewsParameter = pageViews ? UrlParameter.Page + true : '';\n const staticDataParameter = Boolean(device || browser || operatingSystem)\n ? UrlParameter.StaticData + true\n : '';\n const currentVisitParameter = currentVisit\n ? UrlParameter.CurrentVisit + true\n : '';\n const kcsParameter = kcs ? UrlParameter.Kcs + true : '';\n const previousVisitAmountParam =\n typeof previousVisitAmount !== 'number'\n ? UrlParameter.MaxNumberPreviousVisits + 1\n : UrlParameter.MaxNumberPreviousVisits + previousVisitAmount;\n\n return (\n this.getDataApiUrl(DataApiQuery.VisitData) +\n this.siteCode +\n identifierParameter +\n visitorCode +\n previousVisitAmountParam +\n customDataParameter +\n conversionsParameter +\n geolocationParameter +\n experimentsParameter +\n pageViewsParameter +\n staticDataParameter +\n currentVisitParameter +\n kcsParameter\n );\n }\n\n public getTrackingUrl(isBodyUserAgent: boolean): string {\n this.isInitialized();\n\n const { type, version } = this.packageInfo!;\n\n let url =\n this.getDataApiUrl(DataApiQuery.VisitEvent) +\n this.siteCode +\n UrlParameter.SdkName +\n type.toLowerCase() +\n UrlParameter.SdkVersion +\n version;\n\n if (isBodyUserAgent) {\n url += UrlParameter.BodyUa + true;\n }\n\n return url;\n }\n\n private isInitialized(): void {\n if (!this.ready) {\n throw new Error('UrlProvider is not initialized');\n }\n }\n\n private getDataApiUrl(query: DataApiQuery): string {\n const { subdomain, topLevelDomain, secondLevelDomain } =\n this.domains[UrlType.DataApi];\n\n if (!subdomain || !topLevelDomain || !secondLevelDomain) {\n throw new Error('Data API domain is not set');\n }\n\n const domain = `https://${subdomain}.${secondLevelDomain}.${topLevelDomain}`;\n\n switch (query) {\n case DataApiQuery.VisitEvent:\n return `${domain}/${UrlTracking.Visit + UrlQuery.Events}`;\n case DataApiQuery.VisitData:\n return `${domain}/${UrlTracking.Visit + UrlQuery.Visitor}`;\n case DataApiQuery.DataMap:\n return `${domain}/${UrlTracking.Map + UrlQuery.Map}`;\n }\n }\n\n private setDomains(domain: string | null): void {\n if (!domain) {\n return;\n }\n\n this.isCustomDomain = true;\n\n const parts = domain.split('.');\n\n const [secondLevelDomain, topLevelDomain] = parts;\n\n const domainData = {\n secondLevelDomain,\n topLevelDomain,\n };\n\n this.domains = {\n [UrlType.DataApi]: {\n ...this.domains[UrlType.DataApi],\n ...domainData,\n },\n [UrlType.Events]: {\n ...this.domains[UrlType.Events],\n ...domainData,\n },\n [UrlType.ClientConfiguration]: {\n ...this.domains[UrlType.ClientConfiguration],\n ...domainData,\n },\n };\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ClientDataType } from './types';
|
|
1
2
|
/**
|
|
2
3
|
* @readonly
|
|
3
4
|
* @enum {string} an Enum containing keys for Kameleoon SDK related data stored on storage
|
|
@@ -5,8 +6,11 @@
|
|
|
5
6
|
export declare enum KameleoonStorageKey {
|
|
6
7
|
ClientData = "kameleoonClientData",
|
|
7
8
|
TargetingData = "kameleoonTargetingData",
|
|
9
|
+
TrackingData = "kameleoonTrackingData",
|
|
8
10
|
VariationData = "kameleoonVariationData",
|
|
9
11
|
VisitorCode = "kameleoonVisitorCode",
|
|
10
|
-
|
|
11
|
-
|
|
12
|
+
ConsentData = "kameleoonConsentData",
|
|
13
|
+
DataInfo = "kameleoonDataInfo"
|
|
12
14
|
}
|
|
15
|
+
export declare const DEFAULT_CLIENT_CONFIGURATION: ClientDataType;
|
|
16
|
+
export declare const VISIT_DURATION: number;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.KameleoonStorageKey=void 0;let KameleoonStorageKey=exports.KameleoonStorageKey=function(a){return a.ClientData="kameleoonClientData",a.TargetingData="kameleoonTargetingData",a.VariationData="kameleoonVariationData",a.VisitorCode="kameleoonVisitorCode",a.
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.VISIT_DURATION=exports.KameleoonStorageKey=exports.DEFAULT_CLIENT_CONFIGURATION=void 0;var _clientConfiguration=require("../clientConfiguration"),_types=require("../types");let KameleoonStorageKey=exports.KameleoonStorageKey=function(a){return a.ClientData="kameleoonClientData",a.TargetingData="kameleoonTargetingData",a.TrackingData="kameleoonTrackingData",a.VariationData="kameleoonVariationData",a.VisitorCode="kameleoonVisitorCode",a.ConsentData="kameleoonConsentData",a.DataInfo="kameleoonDataInfo",a}({});const DEFAULT_CLIENT_CONFIGURATION=exports.DEFAULT_CLIENT_CONFIGURATION={data:{customData:[],featureFlags:[],configuration:{realTimeUpdate:!1,consentType:_clientConfiguration.ConsentType.NotRequired,dataApiDomain:"data.kameleoon.io"}},lastUpdate:""},VISIT_DURATION=exports.VISIT_DURATION=29*_types.Milliseconds.Minute;
|
|
2
2
|
//# sourceMappingURL=constants.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","names":["KameleoonStorageKey","exports","ClientData","TargetingData","VariationData","VisitorCode","
|
|
1
|
+
{"version":3,"file":"constants.js","names":["KameleoonStorageKey","exports","ClientData","TargetingData","TrackingData","VariationData","VisitorCode","ConsentData","DataInfo","DEFAULT_CLIENT_CONFIGURATION","data","customData","featureFlags","configuration","realTimeUpdate","consentType","ConsentType","NotRequired","dataApiDomain","lastUpdate","VISIT_DURATION","Milliseconds","Minute"],"sources":["../../src/storage/constants.ts"],"sourcesContent":["import { ConsentType } from 'src/clientConfiguration';\nimport { Milliseconds } from 'src/types';\nimport { ClientDataType } from './types';\n\n/**\n * @readonly\n * @enum {string} an Enum containing keys for Kameleoon SDK related data stored on storage\n * */\nexport enum KameleoonStorageKey {\n ClientData = 'kameleoonClientData',\n TargetingData = 'kameleoonTargetingData',\n TrackingData = 'kameleoonTrackingData',\n VariationData = 'kameleoonVariationData',\n VisitorCode = 'kameleoonVisitorCode',\n ConsentData = 'kameleoonConsentData',\n DataInfo = 'kameleoonDataInfo',\n}\n\nexport const DEFAULT_CLIENT_CONFIGURATION: ClientDataType = {\n data: {\n customData: [],\n featureFlags: [],\n configuration: {\n realTimeUpdate: false,\n consentType: ConsentType.NotRequired,\n dataApiDomain: 'data.kameleoon.io',\n },\n },\n lastUpdate: '',\n};\n\n// --- Note ---\n// Not a real visit duration, rather a guaranteed minimum time\nexport const VISIT_DURATION = 29 * Milliseconds.Minute;\n"],"mappings":"4PAQY,CAAAA,mBAAmB,CAAAC,OAAA,CAAAD,mBAAA,UAAnBA,CAAmB,QAAnB,CAAAA,CAAmB,CAAAE,UAAA,uBAAnBF,CAAmB,CAAAG,aAAA,0BAAnBH,CAAmB,CAAAI,YAAA,yBAAnBJ,CAAmB,CAAAK,aAAA,0BAAnBL,CAAmB,CAAAM,WAAA,wBAAnBN,CAAmB,CAAAO,WAAA,wBAAnBP,CAAmB,CAAAQ,QAAA,qBAAnBR,CAAmB,WAUlB,CAAAS,4BAA4C,CAAAR,OAAA,CAAAQ,4BAAA,CAAG,CAC1DC,IAAI,CAAE,CACJC,UAAU,CAAE,EAAE,CACdC,YAAY,CAAE,EAAE,CAChBC,aAAa,CAAE,CACbC,cAAc,GAAO,CACrBC,WAAW,CAAEC,gCAAW,CAACC,WAAW,CACpCC,aAAa,CAAE,mBACjB,CACF,CAAC,CACDC,UAAU,CAAE,EACd,CAAC,CAIYC,cAAc,CAAAnB,OAAA,CAAAmB,cAAA,CAAG,EAAE,CAAGC,mBAAY,CAACC,MAAM","ignoreList":[]}
|
package/dist/storage/index.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
-
export { KameleoonStorageKey } from './constants';
|
|
1
|
+
export { KameleoonStorageKey, VISIT_DURATION } from './constants';
|
|
2
2
|
export { DataStorage } from './storage';
|
|
3
|
-
export {
|
|
3
|
+
export { IntegrityChecker } from './integrityChecker';
|
|
4
|
+
export { ClientDataType, TrackingDataType, VariationDataType, ConsentDataType, DataInfoType, StorageDataType, FeatureFlagVariationsType, IStorage, IExternalStorage, } from './types';
|
package/dist/storage/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"ClientDataType",{enumerable:!0,get:function(){return _types.ClientDataType}}),Object.defineProperty(exports,"ConsentDataType",{enumerable:!0,get:function(){return _types.ConsentDataType}}),Object.defineProperty(exports,"DataStorage",{enumerable:!0,get:function(){return _storage.DataStorage}}),Object.defineProperty(exports,"FeatureFlagVariationsType",{enumerable:!0,get:function(){return _types.FeatureFlagVariationsType}}),Object.defineProperty(exports,"IExternalStorage",{enumerable:!0,get:function(){return _types.IExternalStorage}}),Object.defineProperty(exports,"IStorage",{enumerable:!0,get:function(){return _types.IStorage}}),Object.defineProperty(exports,"KameleoonStorageKey",{enumerable:!0,get:function(){return _constants.KameleoonStorageKey}}),Object.defineProperty(exports,"
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"ClientDataType",{enumerable:!0,get:function(){return _types.ClientDataType}}),Object.defineProperty(exports,"ConsentDataType",{enumerable:!0,get:function(){return _types.ConsentDataType}}),Object.defineProperty(exports,"DataInfoType",{enumerable:!0,get:function(){return _types.DataInfoType}}),Object.defineProperty(exports,"DataStorage",{enumerable:!0,get:function(){return _storage.DataStorage}}),Object.defineProperty(exports,"FeatureFlagVariationsType",{enumerable:!0,get:function(){return _types.FeatureFlagVariationsType}}),Object.defineProperty(exports,"IExternalStorage",{enumerable:!0,get:function(){return _types.IExternalStorage}}),Object.defineProperty(exports,"IStorage",{enumerable:!0,get:function(){return _types.IStorage}}),Object.defineProperty(exports,"IntegrityChecker",{enumerable:!0,get:function(){return _integrityChecker.IntegrityChecker}}),Object.defineProperty(exports,"KameleoonStorageKey",{enumerable:!0,get:function(){return _constants.KameleoonStorageKey}}),Object.defineProperty(exports,"StorageDataType",{enumerable:!0,get:function(){return _types.StorageDataType}}),Object.defineProperty(exports,"TrackingDataType",{enumerable:!0,get:function(){return _types.TrackingDataType}}),Object.defineProperty(exports,"VISIT_DURATION",{enumerable:!0,get:function(){return _constants.VISIT_DURATION}}),Object.defineProperty(exports,"VariationDataType",{enumerable:!0,get:function(){return _types.VariationDataType}});var _constants=require("./constants"),_storage=require("./storage"),_integrityChecker=require("./integrityChecker"),_types=require("./types");
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../src/storage/index.ts"],"sourcesContent":["export { KameleoonStorageKey } from './constants';\nexport { DataStorage } from './storage';\nexport {\n ClientDataType,\n VariationDataType,\n ConsentDataType,\n StorageDataType,\n FeatureFlagVariationsType,\n IStorage,\n IExternalStorage,\n
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../src/storage/index.ts"],"sourcesContent":["export { KameleoonStorageKey, VISIT_DURATION } from './constants';\nexport { DataStorage } from './storage';\nexport { IntegrityChecker } from './integrityChecker';\nexport {\n ClientDataType,\n TrackingDataType,\n VariationDataType,\n ConsentDataType,\n DataInfoType,\n StorageDataType,\n FeatureFlagVariationsType,\n IStorage,\n IExternalStorage,\n} from './types';\n"],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { StorageDataType } from './types';
|
|
2
|
+
import { KameleoonStorageKey } from './constants';
|
|
3
|
+
interface IIntegrityChecker {
|
|
4
|
+
isDataValid(data: StorageDataType): boolean;
|
|
5
|
+
getDefaultData(data: StorageDataType): StorageDataType;
|
|
6
|
+
}
|
|
7
|
+
export declare class IntegrityChecker implements IIntegrityChecker {
|
|
8
|
+
private key;
|
|
9
|
+
constructor(key: KameleoonStorageKey);
|
|
10
|
+
isDataValid(data: StorageDataType): boolean;
|
|
11
|
+
getDefaultData(): StorageDataType;
|
|
12
|
+
private checkTrackingDataIntegrity;
|
|
13
|
+
private checkDataInfoIntegrity;
|
|
14
|
+
private checkVariationDataIntegrity;
|
|
15
|
+
private checkClientDataIntegrity;
|
|
16
|
+
private checkTargetingDataIntegrity;
|
|
17
|
+
private getDefaultClientData;
|
|
18
|
+
private hasFields;
|
|
19
|
+
}
|
|
20
|
+
export {};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.IntegrityChecker=void 0;var _constants=require("./constants"),_kameleoonData=require("../kameleoonData"),_kameleoonError=require("../kameleoonError");function ownKeys(a,b){var c=Object.keys(a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(a);b&&(d=d.filter(function(b){return Object.getOwnPropertyDescriptor(a,b).enumerable})),c.push.apply(c,d)}return c}function _objectSpread(a){for(var b,c=1;c<arguments.length;c++)b=null==arguments[c]?{}:arguments[c],c%2?ownKeys(Object(b),!0).forEach(function(c){_defineProperty(a,c,b[c])}):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(b)):ownKeys(Object(b)).forEach(function(c){Object.defineProperty(a,c,Object.getOwnPropertyDescriptor(b,c))});return a}function _defineProperty(a,b,c){return(b=_toPropertyKey(b))in a?Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!0}):a[b]=c,a}function _toPropertyKey(a){var b=_toPrimitive(a,"string");return"symbol"==typeof b?b:b+""}function _toPrimitive(a,b){if("object"!=typeof a||!a)return a;var c=a[Symbol.toPrimitive];if(void 0!==c){var d=c.call(a,b||"default");if("object"!=typeof d)return d;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===b?String:Number)(a)}class IntegrityChecker{constructor(a){_defineProperty(this,"key",void 0),this.key=a}isDataValid(a){switch(this.key){case _constants.KameleoonStorageKey.ClientData:return this.checkClientDataIntegrity(a);case _constants.KameleoonStorageKey.TargetingData:return this.checkTargetingDataIntegrity(a);case _constants.KameleoonStorageKey.DataInfo:return this.checkDataInfoIntegrity(a);case _constants.KameleoonStorageKey.VariationData:return this.checkVariationDataIntegrity(a);case _constants.KameleoonStorageKey.TrackingData:return this.checkTrackingDataIntegrity(a);default:return!0}}getDefaultData(){switch(this.key){case _constants.KameleoonStorageKey.ClientData:return this.getDefaultClientData();case _constants.KameleoonStorageKey.DataInfo:return{unsentData:{},nextVisitTime:0};case _constants.KameleoonStorageKey.TrackingData:return{scheduledVisitors:{}};case _constants.KameleoonStorageKey.TargetingData:case _constants.KameleoonStorageKey.VariationData:case _constants.KameleoonStorageKey.ConsentData:return{};case _constants.KameleoonStorageKey.VisitorCode:return"";default:(0,_kameleoonError.exhaustCheck)(this.key)}}checkTrackingDataIntegrity(a){return this.hasFields(a,["scheduledVisitors"])}checkDataInfoIntegrity(a){return this.hasFields(a,["unsentData","nextVisitTime"])}checkVariationDataIntegrity(a){const b=Object.values(a);if(!b.length)return!0;const c=a=>!this.hasFields(a,["status"])||this.hasFields(a,["isSent"]);for(const d of b)for(const a of Object.values(d))if(c(a))return!1;return!0}checkClientDataIntegrity(a){return this.hasFields(a,Object.keys(_constants.DEFAULT_CLIENT_CONFIGURATION))}checkTargetingDataIntegrity(a){const b=Object.values(a);if(!b.length)return!0;for(const c of b){if("string"==typeof c)continue;const a=a=>!this.hasFields(a,["status"])||this.hasFields(a,["sent"])||this.hasFields(a,["timestampList"]);for(const[b,d]of Object.entries(c)){if(Array.isArray(d))return!1;switch(b){case _kameleoonData.KameleoonData.PageView:case _kameleoonData.KameleoonData.Conversion:case _kameleoonData.KameleoonData.CustomData:{const b=Object.values(d).some(b=>a(b));if(b)return!1;continue}default:if(a(d))return!1}}}return!0}getDefaultClientData(){return _objectSpread(_objectSpread({},_constants.DEFAULT_CLIENT_CONFIGURATION),{},{lastUpdate:new Date().toString()})}hasFields(a,b){const c=Object.keys(a);return!!(c.length&&b.length)&&b.every(a=>c.includes(a))}}exports.IntegrityChecker=IntegrityChecker;
|
|
2
|
+
//# sourceMappingURL=integrityChecker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"integrityChecker.js","names":["IntegrityChecker","constructor","key","_defineProperty","isDataValid","data","KameleoonStorageKey","ClientData","checkClientDataIntegrity","TargetingData","checkTargetingDataIntegrity","DataInfo","checkDataInfoIntegrity","VariationData","checkVariationDataIntegrity","TrackingData","checkTrackingDataIntegrity","getDefaultData","getDefaultClientData","unsentData","nextVisitTime","scheduledVisitors","ConsentData","VisitorCode","exhaustCheck","hasFields","variations","Object","values","length","hasInvalidFields","obj","variation","value","keys","DEFAULT_CLIENT_CONFIGURATION","visitorValues","visitorData","entries","Array","isArray","KameleoonData","PageView","Conversion","CustomData","hasBadFields","some","_objectSpread","lastUpdate","Date","toString","fields","every","field","includes","exports"],"sources":["../../src/storage/integrityChecker.ts"],"sourcesContent":["import {\n ClientDataType,\n DataInfoType,\n StorageDataType,\n TrackingDataType,\n VariationDataType,\n} from './types';\nimport { DEFAULT_CLIENT_CONFIGURATION, KameleoonStorageKey } from './constants';\nimport { TargetingDataType } from 'src/targeting';\nimport { KameleoonData } from 'src/kameleoonData';\nimport { exhaustCheck } from 'src/kameleoonError';\n\ninterface IIntegrityChecker {\n isDataValid(data: StorageDataType): boolean;\n getDefaultData(data: StorageDataType): StorageDataType;\n}\n\nexport class IntegrityChecker implements IIntegrityChecker {\n private key: KameleoonStorageKey;\n\n constructor(key: KameleoonStorageKey) {\n this.key = key;\n }\n\n public isDataValid(data: StorageDataType): boolean {\n switch (this.key) {\n case KameleoonStorageKey.ClientData:\n return this.checkClientDataIntegrity(data as ClientDataType);\n case KameleoonStorageKey.TargetingData:\n return this.checkTargetingDataIntegrity(data as TargetingDataType);\n case KameleoonStorageKey.DataInfo:\n return this.checkDataInfoIntegrity(data as DataInfoType);\n case KameleoonStorageKey.VariationData:\n return this.checkVariationDataIntegrity(data as VariationDataType);\n case KameleoonStorageKey.TrackingData:\n return this.checkTrackingDataIntegrity(data as TrackingDataType);\n default:\n return true;\n }\n }\n\n public getDefaultData(): StorageDataType {\n switch (this.key) {\n case KameleoonStorageKey.ClientData:\n return this.getDefaultClientData();\n case KameleoonStorageKey.DataInfo:\n return { unsentData: {}, nextVisitTime: 0 };\n case KameleoonStorageKey.TrackingData:\n return { scheduledVisitors: {} };\n case KameleoonStorageKey.TargetingData:\n case KameleoonStorageKey.VariationData:\n case KameleoonStorageKey.ConsentData:\n return {};\n case KameleoonStorageKey.VisitorCode:\n return '';\n default:\n exhaustCheck(this.key);\n }\n }\n\n private checkTrackingDataIntegrity(data: TrackingDataType): boolean {\n return this.hasFields(data, ['scheduledVisitors']);\n }\n\n private checkDataInfoIntegrity(data: DataInfoType): boolean {\n return this.hasFields(data, ['unsentData', 'nextVisitTime']);\n }\n\n private checkVariationDataIntegrity(data: VariationDataType): boolean {\n const variations = Object.values(data);\n\n if (!variations.length) {\n return true;\n }\n\n const hasInvalidFields = (obj: Record<string, unknown>) =>\n !this.hasFields(obj, ['status']) || this.hasFields(obj, ['isSent']);\n\n for (const variation of variations) {\n for (const value of Object.values(variation)) {\n if (hasInvalidFields(value)) {\n return false;\n }\n }\n }\n\n return true;\n }\n\n private checkClientDataIntegrity(data: ClientDataType): boolean {\n return this.hasFields(data, Object.keys(DEFAULT_CLIENT_CONFIGURATION));\n }\n\n private checkTargetingDataIntegrity(data: TargetingDataType): boolean {\n const visitorValues = Object.values(data);\n\n if (!visitorValues.length) {\n return true;\n }\n\n for (const visitorData of visitorValues) {\n // --- Note ---\n // If `visitorData` is a string, it means that it's a visitor reference\n if (typeof visitorData === 'string') {\n continue;\n }\n\n const hasInvalidFields = (obj: Record<string, unknown>) =>\n !this.hasFields(obj, ['status']) ||\n this.hasFields(obj, ['sent']) ||\n this.hasFields(obj, ['timestampList']);\n\n for (const [key, data] of Object.entries(visitorData)) {\n if (Array.isArray(data)) {\n return false;\n }\n\n switch (key) {\n case KameleoonData.PageView:\n case KameleoonData.Conversion:\n case KameleoonData.CustomData: {\n const hasBadFields = Object.values(data).some((obj) =>\n hasInvalidFields(obj as Record<string, unknown>),\n );\n\n if (hasBadFields) {\n return false;\n }\n\n continue;\n }\n default: {\n if (hasInvalidFields(data as Record<string, unknown>)) {\n return false;\n }\n }\n }\n }\n }\n\n return true;\n }\n\n private getDefaultClientData(): ClientDataType {\n return {\n ...DEFAULT_CLIENT_CONFIGURATION,\n lastUpdate: new Date().toString(),\n };\n }\n\n private hasFields(obj: Record<string, unknown>, fields: string[]): boolean {\n const keys = Object.keys(obj);\n\n if (!keys.length || !fields.length) {\n return false;\n }\n\n return fields.every((field) => keys.includes(field));\n }\n}\n"],"mappings":"q0CAiBO,KAAM,CAAAA,gBAA8C,CAGzDC,WAAWA,CAACC,CAAwB,CAAE,CAAAC,eAAA,oBACpC,IAAI,CAACD,GAAG,CAAGA,CACb,CAEOE,WAAWA,CAACC,CAAqB,CAAW,CACjD,OAAQ,IAAI,CAACH,GAAG,EACd,IAAK,CAAAI,8BAAmB,CAACC,UAAU,CACjC,MAAO,KAAI,CAACC,wBAAwB,CAACH,CAAsB,CAAC,CAC9D,IAAK,CAAAC,8BAAmB,CAACG,aAAa,CACpC,MAAO,KAAI,CAACC,2BAA2B,CAACL,CAAyB,CAAC,CACpE,IAAK,CAAAC,8BAAmB,CAACK,QAAQ,CAC/B,MAAO,KAAI,CAACC,sBAAsB,CAACP,CAAoB,CAAC,CAC1D,IAAK,CAAAC,8BAAmB,CAACO,aAAa,CACpC,MAAO,KAAI,CAACC,2BAA2B,CAACT,CAAyB,CAAC,CACpE,IAAK,CAAAC,8BAAmB,CAACS,YAAY,CACnC,MAAO,KAAI,CAACC,0BAA0B,CAACX,CAAwB,CAAC,CAClE,QACE,QACJ,CACF,CAEOY,cAAcA,CAAA,CAAoB,CACvC,OAAQ,IAAI,CAACf,GAAG,EACd,IAAK,CAAAI,8BAAmB,CAACC,UAAU,CACjC,MAAO,KAAI,CAACW,oBAAoB,CAAC,CAAC,CACpC,IAAK,CAAAZ,8BAAmB,CAACK,QAAQ,CAC/B,MAAO,CAAEQ,UAAU,CAAE,CAAC,CAAC,CAAEC,aAAa,CAAE,CAAE,CAAC,CAC7C,IAAK,CAAAd,8BAAmB,CAACS,YAAY,CACnC,MAAO,CAAEM,iBAAiB,CAAE,CAAC,CAAE,CAAC,CAClC,IAAK,CAAAf,8BAAmB,CAACG,aAAa,CACtC,IAAK,CAAAH,8BAAmB,CAACO,aAAa,CACtC,IAAK,CAAAP,8BAAmB,CAACgB,WAAW,CAClC,MAAO,CAAC,CAAC,CACX,IAAK,CAAAhB,8BAAmB,CAACiB,WAAW,CAClC,MAAO,EAAE,CACX,QACE,GAAAC,4BAAY,EAAC,IAAI,CAACtB,GAAG,CACzB,CACF,CAEQc,0BAA0BA,CAACX,CAAsB,CAAW,CAClE,MAAO,KAAI,CAACoB,SAAS,CAACpB,CAAI,CAAE,CAAC,mBAAmB,CAAC,CACnD,CAEQO,sBAAsBA,CAACP,CAAkB,CAAW,CAC1D,MAAO,KAAI,CAACoB,SAAS,CAACpB,CAAI,CAAE,CAAC,YAAY,CAAE,eAAe,CAAC,CAC7D,CAEQS,2BAA2BA,CAACT,CAAuB,CAAW,CACpE,KAAM,CAAAqB,CAAU,CAAGC,MAAM,CAACC,MAAM,CAACvB,CAAI,CAAC,CAEtC,GAAI,CAACqB,CAAU,CAACG,MAAM,CACpB,SAGF,KAAM,CAAAC,CAAgB,CAAIC,CAA4B,EACpD,CAAC,IAAI,CAACN,SAAS,CAACM,CAAG,CAAE,CAAC,QAAQ,CAAC,CAAC,EAAI,IAAI,CAACN,SAAS,CAACM,CAAG,CAAE,CAAC,QAAQ,CAAC,CAAC,CAErE,IAAK,KAAM,CAAAC,CAAS,GAAI,CAAAN,CAAU,CAChC,IAAK,KAAM,CAAAO,CAAK,GAAI,CAAAN,MAAM,CAACC,MAAM,CAACI,CAAS,CAAC,CAC1C,GAAIF,CAAgB,CAACG,CAAK,CAAC,CACzB,SAKN,QACF,CAEQzB,wBAAwBA,CAACH,CAAoB,CAAW,CAC9D,MAAO,KAAI,CAACoB,SAAS,CAACpB,CAAI,CAAEsB,MAAM,CAACO,IAAI,CAACC,uCAA4B,CAAC,CACvE,CAEQzB,2BAA2BA,CAACL,CAAuB,CAAW,CACpE,KAAM,CAAA+B,CAAa,CAAGT,MAAM,CAACC,MAAM,CAACvB,CAAI,CAAC,CAEzC,GAAI,CAAC+B,CAAa,CAACP,MAAM,CACvB,SAGF,IAAK,KAAM,CAAAQ,CAAW,GAAI,CAAAD,CAAa,CAAE,CAGvC,GAA2B,QAAQ,EAA/B,MAAO,CAAAC,CAAwB,CACjC,SAGF,KAAM,CAAAP,CAAgB,CAAIC,CAA4B,EACpD,CAAC,IAAI,CAACN,SAAS,CAACM,CAAG,CAAE,CAAC,QAAQ,CAAC,CAAC,EAChC,IAAI,CAACN,SAAS,CAACM,CAAG,CAAE,CAAC,MAAM,CAAC,CAAC,EAC7B,IAAI,CAACN,SAAS,CAACM,CAAG,CAAE,CAAC,eAAe,CAAC,CAAC,CAExC,IAAK,KAAM,CAAC7B,CAAG,CAAEG,CAAI,CAAC,EAAI,CAAAsB,MAAM,CAACW,OAAO,CAACD,CAAW,CAAC,CAAE,CACrD,GAAIE,KAAK,CAACC,OAAO,CAACnC,CAAI,CAAC,CACrB,SAGF,OAAQH,CAAG,EACT,IAAK,CAAAuC,4BAAa,CAACC,QAAQ,CAC3B,IAAK,CAAAD,4BAAa,CAACE,UAAU,CAC7B,IAAK,CAAAF,4BAAa,CAACG,UAAU,CAAE,CAC7B,KAAM,CAAAC,CAAY,CAAGlB,MAAM,CAACC,MAAM,CAACvB,CAAI,CAAC,CAACyC,IAAI,CAAEf,CAAG,EAChDD,CAAgB,CAACC,CAA8B,CACjD,CAAC,CAED,GAAIc,CAAY,CACd,SAGF,QACF,CACA,QACE,GAAIf,CAAgB,CAACzB,CAA+B,CAAC,CACnD,QAGN,CACF,CACF,CAEA,QACF,CAEQa,oBAAoBA,CAAA,CAAmB,CAC7C,OAAA6B,aAAA,CAAAA,aAAA,IACKZ,uCAA4B,MAC/Ba,UAAU,CAAE,GAAI,CAAAC,IAAI,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC,EAErC,CAEQzB,SAASA,CAACM,CAA4B,CAAEoB,CAAgB,CAAW,CACzE,KAAM,CAAAjB,CAAI,CAAGP,MAAM,CAACO,IAAI,CAACH,CAAG,CAAC,CAAC,SAEzBG,CAAI,CAACL,MAAM,EAAKsB,CAAM,CAACtB,MAAM,GAI3BsB,CAAM,CAACC,KAAK,CAAEC,CAAK,EAAKnB,CAAI,CAACoB,QAAQ,CAACD,CAAK,CAAC,CACrD,CACF,CAACE,OAAA,CAAAvD,gBAAA,CAAAA,gBAAA","ignoreList":[]}
|
|
@@ -6,7 +6,6 @@ export declare class DataStorage<T extends StorageDataType> implements IStorage<
|
|
|
6
6
|
private externalStorage;
|
|
7
7
|
private storageKey;
|
|
8
8
|
constructor(externalStorage: IExternalStorage, storageKey: KameleoonStorageKey);
|
|
9
|
-
get key(): KameleoonStorageKey;
|
|
10
9
|
read(): Result<T, KameleoonError>;
|
|
11
10
|
write(data: T): Result<void, KameleoonError>;
|
|
12
11
|
update(data: Partial<T>): Result<void, KameleoonError>;
|
package/dist/storage/storage.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.DataStorage=void 0;var _tsRes=require("ts-res"),_kameleoonError=require("../kameleoonError");function ownKeys(a,b){var c=Object.keys(a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(a);b&&(d=d.filter(function(b){return Object.getOwnPropertyDescriptor(a,b).enumerable})),c.push.apply(c,d)}return c}function _objectSpread(a){for(var b,c=1;c<arguments.length;c++)b=null==arguments[c]?{}:arguments[c],c%2?ownKeys(Object(b),!0).forEach(function(c){_defineProperty(a,c,b[c])}):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(b)):ownKeys(Object(b)).forEach(function(c){Object.defineProperty(a,c,Object.getOwnPropertyDescriptor(b,c))});return a}function _defineProperty(a,b,c){return
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.DataStorage=void 0;var _tsRes=require("ts-res"),_kameleoonError=require("../kameleoonError"),_integrityChecker=require("./integrityChecker");function ownKeys(a,b){var c=Object.keys(a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(a);b&&(d=d.filter(function(b){return Object.getOwnPropertyDescriptor(a,b).enumerable})),c.push.apply(c,d)}return c}function _objectSpread(a){for(var b,c=1;c<arguments.length;c++)b=null==arguments[c]?{}:arguments[c],c%2?ownKeys(Object(b),!0).forEach(function(c){_defineProperty(a,c,b[c])}):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(b)):ownKeys(Object(b)).forEach(function(c){Object.defineProperty(a,c,Object.getOwnPropertyDescriptor(b,c))});return a}function _defineProperty(a,b,c){return(b=_toPropertyKey(b))in a?Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!0}):a[b]=c,a}function _toPropertyKey(a){var b=_toPrimitive(a,"string");return"symbol"==typeof b?b:b+""}function _toPrimitive(a,b){if("object"!=typeof a||!a)return a;var c=a[Symbol.toPrimitive];if(void 0!==c){var d=c.call(a,b||"default");if("object"!=typeof d)return d;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===b?String:Number)(a)}class DataStorage{constructor(a,b){_defineProperty(this,"externalStorage",void 0),_defineProperty(this,"storageKey",void 0),this.externalStorage=a,this.storageKey=b;const c=new _integrityChecker.IntegrityChecker(b),d=this.read();if(!d.ok){if(d.error.type===_kameleoonError.KameleoonException.StorageEmpty){const a=c.getDefaultData();this.write(a)}return}const e=d.data;if(!c.isDataValid(e)){const a=c.getDefaultData();this.write(a)}}read(){try{const a=this.externalStorage.read(this.storageKey);return null===a?(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.StorageEmpty)):(0,_tsRes.Ok)(a)}catch(_){return(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.StorageRead,this.storageKey))}}write(a){try{return this.externalStorage.write(this.storageKey,a),(0,_tsRes.Ok)()}catch(_){return(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.StorageWrite,this.storageKey))}}update(a){const b=this.read();if(!b.ok)return b.error.type===_kameleoonError.KameleoonException.StorageEmpty?this.write(a):b;const c=b.data;let d;return d="string"==typeof c?a:_objectSpread(_objectSpread({},c),a),this.write(d)}}exports.DataStorage=DataStorage;
|
|
2
2
|
//# sourceMappingURL=storage.js.map
|