@kameleoon/javascript-sdk-core 4.4.7 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (245) hide show
  1. package/CHANGELOG.md +38 -0
  2. package/dist/cacheManager/cacheManager.js +1 -1
  3. package/dist/cacheManager/cacheManager.js.map +1 -1
  4. package/dist/cacheManager/index.js.map +1 -1
  5. package/dist/cacheManager/types.js.map +1 -1
  6. package/dist/clientConfiguration/clientConfiguration.d.ts +3 -6
  7. package/dist/clientConfiguration/clientConfiguration.js +1 -1
  8. package/dist/clientConfiguration/clientConfiguration.js.map +1 -1
  9. package/dist/clientConfiguration/constants.js.map +1 -1
  10. package/dist/clientConfiguration/index.js.map +1 -1
  11. package/dist/clientConfiguration/types.d.ts +4 -5
  12. package/dist/clientConfiguration/types.js +1 -1
  13. package/dist/clientConfiguration/types.js.map +1 -1
  14. package/dist/clientSettings/clientSettings.d.ts +2 -1
  15. package/dist/clientSettings/clientSettings.js +1 -1
  16. package/dist/clientSettings/clientSettings.js.map +1 -1
  17. package/dist/clientSettings/index.js.map +1 -1
  18. package/dist/clientSettings/types.d.ts +1 -0
  19. package/dist/clientSettings/types.js.map +1 -1
  20. package/dist/constants.d.ts +0 -1
  21. package/dist/constants.js +1 -1
  22. package/dist/constants.js.map +1 -1
  23. package/dist/eventManager/eventManager.js +1 -1
  24. package/dist/eventManager/eventManager.js.map +1 -1
  25. package/dist/eventManager/index.js.map +1 -1
  26. package/dist/eventManager/types.js.map +1 -1
  27. package/dist/eventSource/constants.js.map +1 -1
  28. package/dist/eventSource/eventSource.d.ts +2 -2
  29. package/dist/eventSource/eventSource.js +1 -1
  30. package/dist/eventSource/eventSource.js.map +1 -1
  31. package/dist/eventSource/index.js.map +1 -1
  32. package/dist/eventSource/types.d.ts +6 -0
  33. package/dist/eventSource/types.js.map +1 -1
  34. package/dist/hasher/hasher.js.map +1 -1
  35. package/dist/hasher/index.js.map +1 -1
  36. package/dist/hasher/types.js.map +1 -1
  37. package/dist/index.d.ts +4 -4
  38. package/dist/index.js +1 -1
  39. package/dist/index.js.map +1 -1
  40. package/dist/kameleoonClient.d.ts +7 -14
  41. package/dist/kameleoonClient.js +1 -1
  42. package/dist/kameleoonClient.js.map +1 -1
  43. package/dist/kameleoonClientInterface.d.ts +18 -16
  44. package/dist/kameleoonClientInterface.js.map +1 -1
  45. package/dist/kameleoonData/applicationVersion.d.ts +2 -3
  46. package/dist/kameleoonData/applicationVersion.js +1 -1
  47. package/dist/kameleoonData/applicationVersion.js.map +1 -1
  48. package/dist/kameleoonData/browser.d.ts +9 -3
  49. package/dist/kameleoonData/browser.js +1 -1
  50. package/dist/kameleoonData/browser.js.map +1 -1
  51. package/dist/kameleoonData/conversion.d.ts +12 -3
  52. package/dist/kameleoonData/conversion.js +1 -1
  53. package/dist/kameleoonData/conversion.js.map +1 -1
  54. package/dist/kameleoonData/cookie.d.ts +2 -3
  55. package/dist/kameleoonData/cookie.js +1 -1
  56. package/dist/kameleoonData/cookie.js.map +1 -1
  57. package/dist/kameleoonData/customData.d.ts +11 -3
  58. package/dist/kameleoonData/customData.js +1 -1
  59. package/dist/kameleoonData/customData.js.map +1 -1
  60. package/dist/kameleoonData/dataManager.d.ts +34 -23
  61. package/dist/kameleoonData/dataManager.js +1 -1
  62. package/dist/kameleoonData/dataManager.js.map +1 -1
  63. package/dist/kameleoonData/dataProcessor.d.ts +22 -24
  64. package/dist/kameleoonData/dataProcessor.js +1 -1
  65. package/dist/kameleoonData/dataProcessor.js.map +1 -1
  66. package/dist/kameleoonData/device.d.ts +9 -3
  67. package/dist/kameleoonData/device.js +1 -1
  68. package/dist/kameleoonData/device.js.map +1 -1
  69. package/dist/kameleoonData/geolocation.d.ts +9 -3
  70. package/dist/kameleoonData/geolocation.js +1 -1
  71. package/dist/kameleoonData/geolocation.js.map +1 -1
  72. package/dist/kameleoonData/helpers.js.map +1 -1
  73. package/dist/kameleoonData/index.d.ts +2 -1
  74. package/dist/kameleoonData/index.js +1 -1
  75. package/dist/kameleoonData/index.js.map +1 -1
  76. package/dist/kameleoonData/kameleoonConversionScore.d.ts +2 -1
  77. package/dist/kameleoonData/kameleoonConversionScore.js +1 -1
  78. package/dist/kameleoonData/kameleoonConversionScore.js.map +1 -1
  79. package/dist/kameleoonData/operatingSystem.d.ts +9 -3
  80. package/dist/kameleoonData/operatingSystem.js +1 -1
  81. package/dist/kameleoonData/operatingSystem.js.map +1 -1
  82. package/dist/kameleoonData/pageView.d.ts +12 -8
  83. package/dist/kameleoonData/pageView.js +1 -1
  84. package/dist/kameleoonData/pageView.js.map +1 -1
  85. package/dist/kameleoonData/types.d.ts +97 -31
  86. package/dist/kameleoonData/types.js +1 -1
  87. package/dist/kameleoonData/types.js.map +1 -1
  88. package/dist/kameleoonData/uniqueIdentifier.d.ts +19 -0
  89. package/dist/kameleoonData/uniqueIdentifier.js +2 -0
  90. package/dist/kameleoonData/uniqueIdentifier.js.map +1 -0
  91. package/dist/kameleoonData/userAgent.d.ts +2 -3
  92. package/dist/kameleoonData/userAgent.js +1 -1
  93. package/dist/kameleoonData/userAgent.js.map +1 -1
  94. package/dist/kameleoonData/visitProcessor.d.ts +3 -4
  95. package/dist/kameleoonData/visitProcessor.js +1 -1
  96. package/dist/kameleoonData/visitProcessor.js.map +1 -1
  97. package/dist/kameleoonData/visitsData.d.ts +2 -0
  98. package/dist/kameleoonData/visitsData.js +1 -1
  99. package/dist/kameleoonData/visitsData.js.map +1 -1
  100. package/dist/kameleoonError/constants.js +1 -1
  101. package/dist/kameleoonError/constants.js.map +1 -1
  102. package/dist/kameleoonError/helpers.js +1 -1
  103. package/dist/kameleoonError/helpers.js.map +1 -1
  104. package/dist/kameleoonError/index.js.map +1 -1
  105. package/dist/kameleoonError/kameleoonError.js +1 -1
  106. package/dist/kameleoonError/kameleoonError.js.map +1 -1
  107. package/dist/kameleoonError/types.js.map +1 -1
  108. package/dist/kameleoonUtils.d.ts +1 -11
  109. package/dist/kameleoonUtils.js +1 -1
  110. package/dist/kameleoonUtils.js.map +1 -1
  111. package/dist/requester/constants.d.ts +2 -1
  112. package/dist/requester/constants.js +1 -1
  113. package/dist/requester/constants.js.map +1 -1
  114. package/dist/requester/index.d.ts +3 -2
  115. package/dist/requester/index.js +1 -1
  116. package/dist/requester/index.js.map +1 -1
  117. package/dist/requester/requester.d.ts +6 -7
  118. package/dist/requester/requester.js +1 -1
  119. package/dist/requester/requester.js.map +1 -1
  120. package/dist/requester/types.d.ts +10 -30
  121. package/dist/requester/types.js +1 -1
  122. package/dist/requester/types.js.map +1 -1
  123. package/dist/requester/urlProvider.d.ts +26 -18
  124. package/dist/requester/urlProvider.js +1 -1
  125. package/dist/requester/urlProvider.js.map +1 -1
  126. package/dist/storage/constants.d.ts +6 -2
  127. package/dist/storage/constants.js +1 -1
  128. package/dist/storage/constants.js.map +1 -1
  129. package/dist/storage/index.d.ts +3 -2
  130. package/dist/storage/index.js +1 -1
  131. package/dist/storage/index.js.map +1 -1
  132. package/dist/storage/integrityChecker.d.ts +20 -0
  133. package/dist/storage/integrityChecker.js +2 -0
  134. package/dist/storage/integrityChecker.js.map +1 -0
  135. package/dist/storage/storage.d.ts +0 -1
  136. package/dist/storage/storage.js +1 -1
  137. package/dist/storage/storage.js.map +1 -1
  138. package/dist/storage/types.d.ts +25 -17
  139. package/dist/storage/types.js.map +1 -1
  140. package/dist/targeting/conditions/applicationVersion.js +1 -1
  141. package/dist/targeting/conditions/applicationVersion.js.map +1 -1
  142. package/dist/targeting/conditions/browser.js +1 -1
  143. package/dist/targeting/conditions/browser.js.map +1 -1
  144. package/dist/targeting/conditions/conditionFactory.js.map +1 -1
  145. package/dist/targeting/conditions/conversion.js +1 -1
  146. package/dist/targeting/conditions/conversion.js.map +1 -1
  147. package/dist/targeting/conditions/conversionLikelihood.js +1 -1
  148. package/dist/targeting/conditions/conversionLikelihood.js.map +1 -1
  149. package/dist/targeting/conditions/cookie.js +1 -1
  150. package/dist/targeting/conditions/cookie.js.map +1 -1
  151. package/dist/targeting/conditions/customData.js +1 -1
  152. package/dist/targeting/conditions/customData.js.map +1 -1
  153. package/dist/targeting/conditions/device.js +1 -1
  154. package/dist/targeting/conditions/device.js.map +1 -1
  155. package/dist/targeting/conditions/exclusiveCampaign.js.map +1 -1
  156. package/dist/targeting/conditions/firstVisit.js +1 -1
  157. package/dist/targeting/conditions/firstVisit.js.map +1 -1
  158. package/dist/targeting/conditions/geolocation.js +1 -1
  159. package/dist/targeting/conditions/geolocation.js.map +1 -1
  160. package/dist/targeting/conditions/index.js.map +1 -1
  161. package/dist/targeting/conditions/lastVisit.js +1 -1
  162. package/dist/targeting/conditions/lastVisit.js.map +1 -1
  163. package/dist/targeting/conditions/newVisitor.js +1 -1
  164. package/dist/targeting/conditions/newVisitor.js.map +1 -1
  165. package/dist/targeting/conditions/operatingSystem.js +1 -1
  166. package/dist/targeting/conditions/operatingSystem.js.map +1 -1
  167. package/dist/targeting/conditions/pageTitle.js +1 -1
  168. package/dist/targeting/conditions/pageTitle.js.map +1 -1
  169. package/dist/targeting/conditions/pageUrl.js +1 -1
  170. package/dist/targeting/conditions/pageUrl.js.map +1 -1
  171. package/dist/targeting/conditions/previousPage.js +1 -1
  172. package/dist/targeting/conditions/previousPage.js.map +1 -1
  173. package/dist/targeting/conditions/sameDayVisits.js +1 -1
  174. package/dist/targeting/conditions/sameDayVisits.js.map +1 -1
  175. package/dist/targeting/conditions/sdkLanguage.js +1 -1
  176. package/dist/targeting/conditions/sdkLanguage.js.map +1 -1
  177. package/dist/targeting/conditions/segment.js +1 -1
  178. package/dist/targeting/conditions/segment.js.map +1 -1
  179. package/dist/targeting/conditions/targetFeatureFlag.js +1 -1
  180. package/dist/targeting/conditions/targetFeatureFlag.js.map +1 -1
  181. package/dist/targeting/conditions/types.js.map +1 -1
  182. package/dist/targeting/conditions/visitedPages.js +1 -1
  183. package/dist/targeting/conditions/visitedPages.js.map +1 -1
  184. package/dist/targeting/conditions/visitorCode.js +1 -1
  185. package/dist/targeting/conditions/visitorCode.js.map +1 -1
  186. package/dist/targeting/conditions/visits.js +1 -1
  187. package/dist/targeting/conditions/visits.js.map +1 -1
  188. package/dist/targeting/index.d.ts +1 -1
  189. package/dist/targeting/index.js.map +1 -1
  190. package/dist/targeting/node.js +1 -1
  191. package/dist/targeting/node.js.map +1 -1
  192. package/dist/targeting/tree.js +1 -1
  193. package/dist/targeting/tree.js.map +1 -1
  194. package/dist/targeting/types.js.map +1 -1
  195. package/dist/tracking/bodyProvider.d.ts +26 -0
  196. package/dist/tracking/bodyProvider.js +2 -0
  197. package/dist/tracking/bodyProvider.js.map +1 -0
  198. package/dist/tracking/constants.d.ts +2 -0
  199. package/dist/tracking/constants.js +2 -0
  200. package/dist/tracking/constants.js.map +1 -0
  201. package/dist/tracking/index.d.ts +1 -0
  202. package/dist/tracking/index.js +2 -0
  203. package/dist/tracking/index.js.map +1 -0
  204. package/dist/tracking/tracker.d.ts +21 -0
  205. package/dist/tracking/tracker.js +2 -0
  206. package/dist/tracking/tracker.js.map +1 -0
  207. package/dist/tracking/types.d.ts +45 -0
  208. package/dist/tracking/types.js +2 -0
  209. package/dist/tracking/types.js.map +1 -0
  210. package/dist/types.d.ts +54 -17
  211. package/dist/types.js +1 -1
  212. package/dist/types.js.map +1 -1
  213. package/dist/utilities/constants.d.ts +0 -1
  214. package/dist/utilities/constants.js +1 -1
  215. package/dist/utilities/constants.js.map +1 -1
  216. package/dist/utilities/index.d.ts +3 -2
  217. package/dist/utilities/index.js +1 -1
  218. package/dist/utilities/index.js.map +1 -1
  219. package/dist/utilities/parser.d.ts +10 -0
  220. package/dist/utilities/parser.js +2 -0
  221. package/dist/utilities/parser.js.map +1 -0
  222. package/dist/utilities/types.d.ts +3 -40
  223. package/dist/utilities/types.js.map +1 -1
  224. package/dist/utilities/utilities.d.ts +5 -21
  225. package/dist/utilities/utilities.js +1 -1
  226. package/dist/utilities/utilities.js.map +1 -1
  227. package/dist/utilities/validator.d.ts +5 -0
  228. package/dist/utilities/validator.js +2 -0
  229. package/dist/utilities/validator.js.map +1 -0
  230. package/dist/variationConfiguration/index.js.map +1 -1
  231. package/dist/variationConfiguration/types.d.ts +7 -2
  232. package/dist/variationConfiguration/types.js.map +1 -1
  233. package/dist/variationConfiguration/variationConfiguration.d.ts +15 -7
  234. package/dist/variationConfiguration/variationConfiguration.js +1 -1
  235. package/dist/variationConfiguration/variationConfiguration.js.map +1 -1
  236. package/dist/visitorCodeManager/constants.d.ts +2 -0
  237. package/dist/visitorCodeManager/constants.js +1 -1
  238. package/dist/visitorCodeManager/constants.js.map +1 -1
  239. package/dist/visitorCodeManager/index.js.map +1 -1
  240. package/dist/visitorCodeManager/types.d.ts +3 -0
  241. package/dist/visitorCodeManager/types.js.map +1 -1
  242. package/dist/visitorCodeManager/visitorCodeManager.d.ts +4 -0
  243. package/dist/visitorCodeManager/visitorCodeManager.js +1 -1
  244. package/dist/visitorCodeManager/visitorCodeManager.js.map +1 -1
  245. package/package.json +2 -2
@@ -1,24 +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, TrackDataParamsType, GetVisitorDataResultType, TrackExperimentParamsType, GetVisitorDataParamsType } from './types';
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
- trackData: ({ visitorCode, body, userAgent, }: TrackDataParamsType) => Promise<Result<boolean, void>>;
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;
12
+ private urlProvider;
13
13
  private packageInfo;
14
14
  private trackRetryDelay;
15
+ private useAbortController;
15
16
  private timeout;
16
- constructor({ siteCode, environment, packageInfo, domain, externalRequester, requestTimeout, trackRetryDelay, }: RequesterParamsType);
17
+ constructor({ urlProvider, packageInfo, externalRequester, requestTimeout, trackRetryDelay, useAbortController, }: RequesterParamsType);
17
18
  getClientConfiguration(timeStamp?: number): Promise<Result<ConfigurationDataType, KameleoonError>>;
18
19
  getRemoteData(key: string): Promise<Result<JSONType, KameleoonError>>;
19
20
  getVisitorData({ visitorCode, filters, isMappingIdentifier, }: GetVisitorDataParamsType): Promise<Result<GetVisitorDataResultType, KameleoonError>>;
20
- trackExperiment({ visitorCode, dataUrl, variationDataUrl, userAgent, isUnallocated, }: TrackExperimentParamsType): Promise<Result<boolean, void>>;
21
- trackData({ visitorCode, body, userAgent, isMappingIdentifier, }: TrackDataParamsType): Promise<Result<boolean, void>>;
22
- private track;
21
+ track(body: string, isBodyUserAgent: boolean): Promise<Result<void, void>>;
23
22
  private sendRequest;
24
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"),_utilities=require("../utilities"),_constants=require("./constants"),_types=require("./types"),_urlProvider=require("./urlProvider");function ownKeys(a,b){var c=Object.keys(a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(a);b&&(d=d.filter(function(b){return Object.getOwnPropertyDescriptor(a,b).enumerable})),c.push.apply(c,d)}return c}function _objectSpread(a){for(var b,c=1;c<arguments.length;c++)b=null==arguments[c]?{}:arguments[c],c%2?ownKeys(Object(b),!0).forEach(function(c){_defineProperty(a,c,b[c])}):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(b)):ownKeys(Object(b)).forEach(function(c){Object.defineProperty(a,c,Object.getOwnPropertyDescriptor(b,c))});return a}function _defineProperty(a,b,c){return b=_toPropertyKey(b),b in a?Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!0}):a[b]=c,a}function _toPropertyKey(a){var b=_toPrimitive(a,"string");return"symbol"==typeof b?b:b+""}function _toPrimitive(a,b){if("object"!=typeof a||!a)return a;var c=a[Symbol.toPrimitive];if(void 0!==c){var d=c.call(a,b||"default");if("object"!=typeof d)return d;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===b?String:Number)(a)}class Requester{constructor(a){let{siteCode:b,environment:c,packageInfo:d,domain:e,externalRequester:f,requestTimeout:g,trackRetryDelay:h}=a;_defineProperty(this,"externalRequester",void 0),_defineProperty(this,"packageInfo",void 0),_defineProperty(this,"trackRetryDelay",void 0),_defineProperty(this,"timeout",void 0),this.externalRequester=f,this.trackRetryDelay=h,this.packageInfo=d,this.timeout=g,_urlProvider.UrlProvider.initialize({siteCode:b,domain:e,packageInfo:d,environment:c})}async getClientConfiguration(a){const b=_urlProvider.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,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=_urlProvider.UrlProvider.getRemoteDataUrl(a);try{const a=await this.sendRequest({url:b,requestType:_types.RequestType.RemoteData,retryCount:0});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=_urlProvider.UrlProvider.getVisitorDataUrl({visitorCode:b,filters:c,isMappingIdentifier:d});try{const a=await this.sendRequest({url:e,requestType:_types.RequestType.RemoteData,retryCount:0});if(!a.ok){if(a.text){var f;const b=await a.text(),c=null===(f=JSON.parse(b))||void 0===f?void 0:f.message;return(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.RemoteData,c))}return(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.RemoteData,"Unknown Reason - no 'text()' 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 trackExperiment(a){let{visitorCode:b,dataUrl:c,variationDataUrl:d,userAgent:e,isUnallocated:f}=a;const g=_urlProvider.UrlProvider.getTrackingUrl(b),h=c?"":_constants.UrlEventType.Activity+_constants.UrlParameter.Nonce+_utilities.Utilities.getNonce(),i=f?h:d,j=i?c+"\n"+i:c,k=e?{[_constants.Header.UserAgent]:e}:void 0;try{const a=await this.track({url:g,headers:k,requestType:_types.RequestType.Tracking,body:j});return(0,_tsRes.Ok)(a)}catch(_){return(0,_tsRes.Err)()}}async trackData(a){let{visitorCode:b,body:c,userAgent:d,isMappingIdentifier:e}=a;const f=_urlProvider.UrlProvider.getTrackingUrl(b,e),g=c||_constants.UrlEventType.Activity+_constants.UrlParameter.Nonce+_utilities.Utilities.getNonce(),h=d?{[_constants.Header.UserAgent]:d}:void 0;try{const a=await this.track({url:f,requestType:_types.RequestType.Tracking,headers:h,body:g});return(0,_tsRes.Ok)(a)}catch(_){return(0,_tsRes.Err)()}}async track(a){const b=_constants.NUMBER_OF_RETRIES+1;for(let c=0;c<b;c++){const b=await this.sendRequest(_objectSpread(_objectSpread({},a),{},{retryCount:c}));if(b.ok)return!0;await new Promise(a=>setTimeout(a,this.trackRetryDelay))}return!1}async sendRequest(a){let{requestType:b,url:c,retryCount:d,headers:e,body:f}=a;const g=new AbortController,h=setTimeout(()=>g.abort(),this.timeout);let i;switch(b){case _types.RequestType.RemoteData:case _types.RequestType.Configuration:i={headers:e,signal:g.signal,method:_types.HttpMethod.Get};break;case _types.RequestType.Tracking:if(!f)throw new Error("Internal Error: Tracking request should always contain body");i={method:_types.HttpMethod.Post,headers:e,signal:g.signal,body:f}}const j=_objectSpread(_objectSpread({},i),{},{headers:e,signal:g.signal}),k=await this.externalRequester.sendRequest({url:c,retryCount:d,requestType:b,parameters:j});return clearTimeout(h),k}}exports.Requester=Requester;
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","siteCode","environment","packageInfo","domain","externalRequester","requestTimeout","trackRetryDelay","_defineProperty","timeout","UrlProvider","initialize","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 { UrlProvider } 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 packageInfo: ExternalPackageInfoType;\n private trackRetryDelay: number;\n private timeout: number;\n\n constructor({\n siteCode,\n environment,\n packageInfo,\n domain,\n externalRequester,\n requestTimeout,\n trackRetryDelay,\n }: RequesterParamsType) {\n this.externalRequester = externalRequester;\n this.trackRetryDelay = trackRetryDelay;\n this.packageInfo = packageInfo;\n this.timeout = requestTimeout;\n\n UrlProvider.initialize({ siteCode, domain, packageInfo, environment });\n }\n\n public async getClientConfiguration(\n timeStamp?: number,\n ): Promise<Result<ConfigurationDataType, KameleoonError>> {\n const requestUrl = 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 = 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 = 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 = 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 = UrlProvider.getTrackingUrl(visitorCode, isMappingIdentifier);\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":[]}
@@ -4,6 +4,7 @@ import { BrowserIndexMap, BrowserType, OperatingSystemType } from '../kameleoonD
4
4
  import { DeviceType, KCSType, OperatingSystemIndexMap } from '../kameleoonData/types';
5
5
  import { Header } from './constants';
6
6
  import { VisitorDataFiltersType } from '../utilities';
7
+ import { IUrlProvider } from './urlProvider';
7
8
  export declare enum UrlType {
8
9
  DataApi = "dataApi",
9
10
  Events = "events",
@@ -18,34 +19,19 @@ export type DomainType = {
18
19
  secondLevelDomain: string;
19
20
  };
20
21
  export type UrlProviderInitializeParamsType = {
21
- siteCode: string;
22
22
  domain: string | null;
23
+ siteCode: string;
23
24
  packageInfo: ExternalPackageInfoType;
24
25
  environment: Environment;
25
26
  };
26
27
  export type RequesterParamsType = {
27
- siteCode: string;
28
- domain: string | null;
29
- environment: Environment;
28
+ useAbortController: boolean;
29
+ urlProvider: IUrlProvider;
30
30
  packageInfo: ExternalPackageInfoType;
31
31
  externalRequester: IExternalRequester;
32
32
  trackRetryDelay: number;
33
33
  requestTimeout: number;
34
34
  };
35
- export type TrackExperimentParamsType = {
36
- dataUrl: string;
37
- variationDataUrl: string;
38
- visitorCode: string;
39
- isUnallocated: boolean;
40
- userAgent?: string;
41
- isTargetedRule?: boolean;
42
- };
43
- export type TrackDataParamsType = {
44
- visitorCode: string;
45
- body: string;
46
- userAgent?: string;
47
- isMappingIdentifier?: boolean;
48
- };
49
35
  export type GetVisitorDataParamsType = {
50
36
  visitorCode: string;
51
37
  filters: VisitorDataFiltersType;
@@ -155,7 +141,7 @@ export declare enum DataApiQuery {
155
141
  DataMap = 2
156
142
  }
157
143
  declare const EVENT_TYPE_KEYS: readonly ["customData", "staticData", "page", "conversion", "geolocation", "activity", "experiment"];
158
- 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"];
159
145
  declare const TRACKING_KEYS: readonly ["visit", "map"];
160
146
  declare const QUERY_KEYS: readonly ["sse", "visitor", "map", "events"];
161
147
  export type TrackingType = Record<Capitalize<(typeof TRACKING_KEYS)[number]>, string>;
@@ -181,11 +167,6 @@ export type StrictFirstParameterRecord<T> = {
181
167
  * @type `HeadersType` - a type of headers available in the request
182
168
  * */
183
169
  export type HeadersType = Partial<Record<Header, string>>;
184
- export type TrackParametersType = {
185
- url: string;
186
- headers?: HeadersType;
187
- body: string;
188
- };
189
170
  /**
190
171
  * @type `RequestParametersType` - a type of parameters available in the request for each request type
191
172
  * */
@@ -242,21 +223,20 @@ export type SendRequestParametersType<T extends RequestType> = {
242
223
  * @type `KameleoonResponse` - a type of response that is assignable to most libraries `Response` objects
243
224
  * @property {number} status - a status of the response
244
225
  * @property {() => Promise<JSONType>} json - a method to parse the response to JSON
245
- * @property {() => Promise<string>| undefined} text - a method to parse the response to text
226
+ * @property {() => Promise<string>} text - a method to parse the response to text
246
227
  * @property {boolean} ok - a boolean value that indicates if the response is ok
247
228
  * */
248
229
  export type KameleoonResponseType = {
249
230
  status: number;
250
231
  json: () => Promise<JSONType>;
251
- text?: () => Promise<string>;
232
+ text: () => Promise<string>;
252
233
  ok: boolean;
253
234
  };
254
- export type InternalSendRequestParametersType = {
255
- requestType: RequestType;
235
+ export type InternalSendRequestParametersType<T extends RequestType> = {
256
236
  url: string;
237
+ requestType: RequestType;
257
238
  retryCount: number;
258
- headers?: HeadersType;
259
- body?: string;
239
+ parameters: Omit<RequestParametersType[T], 'signal'>;
260
240
  };
261
241
  /**
262
242
  * @interface `IExternalRequester` - an interface of External Requester which will be used to perform requests.
@@ -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';\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 siteCode: string;\n domain: string | null;\n packageInfo: ExternalPackageInfoType;\n environment: Environment;\n};\n\nexport type RequesterParamsType = {\n siteCode: string;\n domain: string | null;\n environment: Environment;\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":"0JAeY,CAAAA,OAAO,CAAAC,OAAA,CAAAD,OAAA,UAAPA,CAAO,QAAP,CAAAA,CAAO,CAAAE,OAAA,WAAPF,CAAO,CAAAG,MAAA,UAAPH,CAAO,CAAAI,mBAAA,uBAAPJ,CAAO,MAiKPK,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":[]}
@@ -1,20 +1,28 @@
1
1
  import { GetVisitorDataUrlParamsType, UrlProviderInitializeParamsType } from './types';
2
- export declare class UrlProvider {
3
- private static ready;
4
- private static siteCode;
5
- private static isCustomDomain;
6
- private static environment;
7
- private static packageInfo;
8
- private static domains;
9
- static dataApiTopLevelDomain?: string;
10
- static initialize({ siteCode, domain, packageInfo, environment, }: UrlProviderInitializeParamsType): void;
11
- static setDataApiDomain(domain: string): void;
12
- static getClientConfigurationUrl(timeStamp?: number): string;
13
- static getEventSourceUrl(): string;
14
- static getRemoteDataUrl(key: string): string;
15
- static getVisitorDataUrl({ visitorCode, filters, isMappingIdentifier, }: GetVisitorDataUrlParamsType): string;
16
- static getTrackingUrl(visitorCode: string, isMappingIdentifier?: boolean): string;
17
- private static isInitialized;
18
- private static getDataApiUrl;
19
- private static setDomains;
2
+ export interface IUrlProvider {
3
+ initialize(params: UrlProviderInitializeParamsType): void;
4
+ getClientConfigurationUrl(timeStamp?: number): string;
5
+ getEventSourceUrl(): string;
6
+ getRemoteDataUrl(key: string): string;
7
+ getVisitorDataUrl(params: GetVisitorDataUrlParamsType): string;
8
+ getTrackingUrl(isBodyUserAgent: boolean): string;
9
+ dataApiDomain: string;
10
+ }
11
+ export declare class UrlProvider implements IUrlProvider {
12
+ private ready;
13
+ private isCustomDomain;
14
+ private domains;
15
+ private siteCode?;
16
+ private environment?;
17
+ private packageInfo?;
18
+ initialize({ domain, siteCode, packageInfo, environment, }: UrlProviderInitializeParamsType): void;
19
+ set dataApiDomain(domain: string);
20
+ getClientConfigurationUrl(timeStamp?: number): string;
21
+ getEventSourceUrl(): string;
22
+ getRemoteDataUrl(key: string): string;
23
+ getVisitorDataUrl({ visitorCode, filters, isMappingIdentifier, }: GetVisitorDataUrlParamsType): string;
24
+ getTrackingUrl(isBodyUserAgent: boolean): string;
25
+ private isInitialized;
26
+ private getDataApiUrl;
27
+ private setDomains;
20
28
  }
@@ -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 b=_toPropertyKey(b),b in a?Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!0}):a[b]=c,a}function _toPropertyKey(a){var b=_toPrimitive(a,"string");return"symbol"==typeof b?b:b+""}function _toPrimitive(a,b){if("object"!=typeof a||!a)return a;var c=a[Symbol.toPrimitive];if(void 0!==c){var d=c.call(a,b||"default");if("object"!=typeof d)return d;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===b?String:Number)(a)}class UrlProvider{static initialize(a){let{siteCode:b,domain:c,packageInfo:d,environment:e}=a;this.siteCode=b,this.environment=e,this.packageInfo=d,this.ready=!0,this.setDomains(c)}static setDataApiDomain(a){var b;if(!this.isCustomDomain){const c=a.split(".");if(3===c.length){const[a,d,e]=c;this.domains[_types2.UrlType.DataApi]={subdomain:a,secondLevelDomain:d,topLevelDomain:null!==(b=this.dataApiTopLevelDomain)&&void 0!==b?b:e}}}}static getClientConfigurationUrl(a){this.isInitialized();const{subdomain:b,topLevelDomain:c,secondLevelDomain:d}=this.domains[_types2.UrlType.ClientConfiguration],e="https://".concat(b,".").concat(d,".").concat(c,"/"),f=this.environment===_types.Environment.Production?"":_constants.UrlFirstParameter.Environment+this.environment;let g="";return a&&(f?g=_constants.UrlParameter.Ts+a:g=_constants.UrlFirstParameter.Ts+a),e+this.siteCode+f+g}static getEventSourceUrl(){this.isInitialized();const{subdomain:a,topLevelDomain:b,secondLevelDomain:c}=this.domains[_types2.UrlType.Events];return"https://".concat(a,".").concat(c,".").concat(b,":8110/").concat(_constants.UrlQuery.Sse).concat(this.siteCode)}static getRemoteDataUrl(a){return this.isInitialized(),this.getDataApiUrl(_types2.DataApiQuery.DataMap)+this.siteCode+_constants.UrlParameter.Key+encodeURI(a)}static 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}static getTrackingUrl(a,b){this.isInitialized();const{type:c,version:d}=this.packageInfo,e=b?_constants.UrlParameter.MappingValue:_constants.UrlParameter.VisitorCode;return this.getDataApiUrl(_types2.DataApiQuery.VisitEvent)+this.siteCode+e+a+_constants.UrlParameter.SdkName+c.toLowerCase()+_constants.UrlParameter.SdkVersion+d}static isInitialized(){if(!this.ready)throw new Error("UrlProvider is not initialized")}static 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://".concat(b,".").concat(d,".").concat(c);return a===_types2.DataApiQuery.VisitEvent?"".concat(e,"/").concat(_constants.UrlTracking.Visit+_constants.UrlQuery.Events):a===_types2.DataApiQuery.VisitData?"".concat(e,"/").concat(_constants.UrlTracking.Visit+_constants.UrlQuery.Visitor):a===_types2.DataApiQuery.DataMap?"".concat(e,"/").concat(_constants.UrlTracking.Map+_constants.UrlQuery.Map):void 0}static 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,_defineProperty(UrlProvider,"ready",!1),_defineProperty(UrlProvider,"siteCode",void 0),_defineProperty(UrlProvider,"isCustomDomain",!1),_defineProperty(UrlProvider,"environment",void 0),_defineProperty(UrlProvider,"packageInfo",void 0),_defineProperty(UrlProvider,"domains",{[_types2.UrlType.DataApi]:{subdomain:"data",topLevelDomain:"io",secondLevelDomain:"kameleoon"},[_types2.UrlType.Events]:{subdomain:"events",topLevelDomain:"com",secondLevelDomain:"kameleoon"},[_types2.UrlType.ClientConfiguration]:{subdomain:"sdk-config",topLevelDomain:"eu",secondLevelDomain:"kameleoon"}}),_defineProperty(UrlProvider,"dataApiTopLevelDomain",void 0);
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","initialize","a","siteCode","domain","packageInfo","environment","ready","setDomains","setDataApiDomain","b","isCustomDomain","parts","split","length","subdomain","secondLevelDomain","topLevelDomain","domains","UrlType","DataApi","dataApiTopLevelDomain","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","_defineProperty"],"sources":["../../src/requester/urlProvider.ts"],"sourcesContent":["import { Environment, ExternalPackageInfoType } from 'src/types';\nimport {\n UrlFirstParameter,\n UrlParameter,\n UrlTracking,\n UrlQuery,\n} from './constants';\nimport {\n DataApiQuery,\n DomainsType,\n GetVisitorDataUrlParamsType,\n UrlProviderInitializeParamsType,\n UrlType,\n} from './types';\n\n// TODO: To be removed in favour of `DependencyManager`\n// which will use protected `KameleoonClient` method to be able to mock every dependency\n// for tests\nexport class UrlProvider {\n private static ready = false;\n private static siteCode: string;\n private static isCustomDomain = false;\n private static environment: Environment;\n private static packageInfo: ExternalPackageInfoType;\n private static domains: DomainsType = {\n [UrlType.DataApi]: {\n subdomain: 'data',\n topLevelDomain: 'io',\n secondLevelDomain: 'kameleoon',\n },\n [UrlType.Events]: {\n subdomain: 'events',\n topLevelDomain: 'com',\n secondLevelDomain: 'kameleoon',\n },\n [UrlType.ClientConfiguration]: {\n subdomain: 'sdk-config',\n topLevelDomain: 'eu',\n secondLevelDomain: 'kameleoon',\n },\n };\n\n // --- Note ---\n // Dirty workaround before the `DependencyManager` implementation\n // see a note above\n public static dataApiTopLevelDomain?: string;\n\n public static initialize({\n siteCode,\n domain,\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 public static setDataApiDomain(domain: string): void {\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: this.dataApiTopLevelDomain ?? topLevelDomain,\n };\n }\n\n public static 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 static 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 static 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 static 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 static 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 static isInitialized(): void {\n if (!this.ready) {\n throw new Error('UrlProvider is not initialized');\n }\n }\n\n private static 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 static 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
- OfflineTracking = "kameleoonOfflineTracking",
11
- ConsentData = "kameleoonConsentData"
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.OfflineTracking="kameleoonOfflineTracking",a.ConsentData="kameleoonConsentData",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","OfflineTracking","ConsentData"],"sources":["../../src/storage/constants.ts"],"sourcesContent":["/**\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 VariationData = 'kameleoonVariationData',\n VisitorCode = 'kameleoonVisitorCode',\n OfflineTracking = 'kameleoonOfflineTracking',\n ConsentData = 'kameleoonConsentData',\n}\n"],"mappings":"0GAIY,CAAAA,mBAAmB,CAAAC,OAAA,CAAAD,mBAAA,UAAnBA,CAAmB,QAAnB,CAAAA,CAAmB,CAAAE,UAAA,uBAAnBF,CAAmB,CAAAG,aAAA,0BAAnBH,CAAmB,CAAAI,aAAA,0BAAnBJ,CAAmB,CAAAK,WAAA,wBAAnBL,CAAmB,CAAAM,eAAA,4BAAnBN,CAAmB,CAAAO,WAAA,wBAAnBP,CAAmB"}
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":[]}
@@ -1,3 +1,4 @@
1
- export { KameleoonStorageKey } from './constants';
1
+ export { KameleoonStorageKey, VISIT_DURATION } from './constants';
2
2
  export { DataStorage } from './storage';
3
- export { ClientDataType, VariationDataType, ConsentDataType, StorageDataType, FeatureFlagVariationsType, IStorage, IExternalStorage, OfflineTracking, } from './types';
3
+ export { IntegrityChecker } from './integrityChecker';
4
+ export { ClientDataType, TrackingDataType, VariationDataType, ConsentDataType, DataInfoType, StorageDataType, FeatureFlagVariationsType, IStorage, IExternalStorage, } from './types';
@@ -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,"OfflineTracking",{enumerable:!0,get:function(){return _types.OfflineTracking}}),Object.defineProperty(exports,"StorageDataType",{enumerable:!0,get:function(){return _types.StorageDataType}}),Object.defineProperty(exports,"VariationDataType",{enumerable:!0,get:function(){return _types.VariationDataType}});var _constants=require("./constants"),_storage=require("./storage"),_types=require("./types");
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 OfflineTracking,\n} from './types';\n"],"mappings":""}
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