@kameleoon/javascript-sdk 4.9.2 → 4.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,28 @@
1
1
  # Change Log
2
2
 
3
+ ## 4.10.0 (2025-05-26)
4
+
5
+ ### Features
6
+
7
+ - Added automatic detection of the [`PageView`](pageView), [`Browser`](browser), [`Device`](device) and [`OperatingSystem`](operatingSystem) types for targeting and reporting purposes. However, it can still be manually overridden using the [`addData`](addData) method.
8
+ - Added support for a **New**/**Returning** visitor breakdown filter in reports.
9
+ - Refactored targeting condition logic (remote data requests are now optional) for:
10
+ - Time elapsed since first/last visit
11
+ - New or returning visitors
12
+ - Total number of visits
13
+ - Number of visits today
14
+
15
+ ### Patch Changes
16
+
17
+ - Updated dependencies
18
+ - @kameleoon/javascript-sdk-core@5.10.0
19
+
20
+ [device]: https://developers.kameleoon.com/feature-management-and-experimentation/web-sdks/js-sdk#device
21
+ [pageView]: https://developers.kameleoon.com/feature-management-and-experimentation/web-sdks/js-sdk#pageview
22
+ [browser]: https://developers.kameleoon.com/feature-management-and-experimentation/web-sdks/js-sdk#browser
23
+ [operatingSystem]: https://developers.kameleoon.com/feature-management-and-experimentation/web-sdks/js-sdk#operatingsystem
24
+ [addData]: https://developers.kameleoon.com/feature-management-and-experimentation/web-sdks/js-sdk#adddata
25
+
3
26
  ## 4.9.2 (2025-05-15)
4
27
 
5
28
  ### Patch Changes
@@ -5,3 +5,5 @@ export declare enum CookieParameter {
5
5
  Path = "Path",
6
6
  Domain = "Domain"
7
7
  }
8
+ export declare const ACTIVITY_INTERVAL: number;
9
+ export declare const VISIT_DURATION: number;
package/dist/constants.js CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.CookieParameter=void 0;let CookieParameter=exports.CookieParameter=function(a){return a.PairsDelimiter="; ",a.KeyValueDelimiter="=",a.MaxAge="Max-Age",a.Path="Path",a.Domain="Domain",a}({});
1
+ "use strict";var _javascriptSdkCore=require("@kameleoon/javascript-sdk-core");Object.defineProperty(exports,"__esModule",{value:!0}),exports.VISIT_DURATION=exports.CookieParameter=exports.ACTIVITY_INTERVAL=void 0;let CookieParameter=exports.CookieParameter=function(a){return a.PairsDelimiter="; ",a.KeyValueDelimiter="=",a.MaxAge="Max-Age",a.Path="Path",a.Domain="Domain",a}({});const ACTIVITY_INTERVAL=exports.ACTIVITY_INTERVAL=15*_javascriptSdkCore.Milliseconds.Second,VISIT_DURATION=exports.VISIT_DURATION=30*_javascriptSdkCore.Milliseconds.Minute;
@@ -0,0 +1,14 @@
1
+ import { DataManager, DataManagerParametersType, KameleoonDataType, KameleoonError, KameleoonVisitorDataType, Result, StaticData, VisitorsDataType } from '@kameleoon/javascript-sdk-core';
2
+ export declare class ClientDataManager extends DataManager {
3
+ private visitor;
4
+ constructor({ dataStorage, infoStorage, cleanupInterval, packageInfo, }: DataManagerParametersType);
5
+ getUnsentData(visitorCode: string): (KameleoonDataType | StaticData)[];
6
+ storeData(data: VisitorsDataType): Result<void, KameleoonError>;
7
+ storeData(visitorCode: string, ...data: KameleoonDataType[]): Result<void, KameleoonError>;
8
+ getVisitorData(visitorCode: string): KameleoonVisitorDataType | undefined;
9
+ updateLastActivity(): string | null;
10
+ checkVisitor(visitorCode: string): void;
11
+ private createVisitor;
12
+ private updateVisitor;
13
+ private fetchVisit;
14
+ }
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.ClientDataManager=void 0;var _javascriptSdkCore=require("@kameleoon/javascript-sdk-core"),_constants=require("./constants"),_browserAnalyse=_interopRequireDefault(require("./utils/browserAnalyse"));function _interopRequireDefault(a){return a&&a.__esModule?a:{default: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 ClientDataManager extends _javascriptSdkCore.DataManager{constructor(a){let{dataStorage:b,infoStorage:c,cleanupInterval:d,packageInfo:e}=a;_javascriptSdkCore.KameleoonLogger.debug`CALL: new ClientDataManager(dataStorage, infoStorage, cleanupInterval: ${d}, packageInfo: ${e})`,super({dataStorage:b,infoStorage:c,cleanupInterval:d,packageInfo:e}),_defineProperty(this,"visitor",null),this.updateVisitor(),_javascriptSdkCore.KameleoonLogger.debug`RETURN: new ClientDataManager(dataStorage, infoStorage, cleanupInterval: ${d} packageInfo: ${e})`}getUnsentData(a){var b,c;const d=super.getUnsentData(a),e=super.getVisitorData(a);if(!e)return d;const f=e[_javascriptSdkCore.KameleoonData.Browser],g=e[_javascriptSdkCore.KameleoonData.Device],h=e[_javascriptSdkCore.KameleoonData.OperatingSystem],i=new _javascriptSdkCore.StaticData({browserType:null===f||void 0===f?void 0:f.browser,browserVersion:null===f||void 0===f?void 0:f.version,visitNumber:null===(b=this.visitor)||void 0===b?void 0:b.visitNumber,timeSincePreviousVisit:null===(c=this.visitor)||void 0===c?void 0:c.timeSincePreviousVisit,os:null===h||void 0===h?void 0:h.operatingSystem,deviceType:null===g||void 0===g?void 0:g.device});return d.push(i),d}storeData(a){if("string"==typeof a){for(var b=arguments.length,c=Array(1<b?b-1:0),d=1;d<b;d++)c[d-1]=arguments[d];return c.length&&this.checkVisitor(a),super.storeData(a,...c)}return super.storeData(a)}getVisitorData(a){return this.checkVisitor(a),super.getVisitorData(a)}updateLastActivity(){var a,b;if(!this.visitor)return null;const c=this.dataStorage.read();if(!c.ok)return null;const d=c.data;let e=d[this.visitor.visitorCode];"string"==typeof e&&(e=d[e]);let f=e[_javascriptSdkCore.KameleoonData.VisitsData];f||(f={visits:[],visitNumber:0,type:_javascriptSdkCore.KameleoonData.VisitsData,status:_javascriptSdkCore.TrackingStatus.Sent,expirationTime:0},e[_javascriptSdkCore.KameleoonData.VisitsData]=f);const g=this.fetchVisit(f.visits,f.visits.length-1),h=null!==(a=null===g||void 0===g?void 0:g.timeLastActivity)&&void 0!==a?a:0,i=Date.now();let j=null!==(b=f.visitNumber)&&void 0!==b?b:f.visits.length?f.visits.length-1:0;if(i-h>_constants.VISIT_DURATION)j+=0<h?1:0,_javascriptSdkCore.ListUtilities.insertVisitInOrderedListMutably({list:f.visits,visit:{timeStarted:i,timeLastActivity:i}}),this.visitor.timeSincePreviousVisit=g?i-h:0;else if(f.visits.length){var k;if(f.visits[f.visits.length-1]={timeStarted:null!==(k=null===g||void 0===g?void 0:g.timeStarted)&&void 0!==k?k:i,timeLastActivity:i},-1===this.visitor.timeSincePreviousVisit){const a=this.fetchVisit(f.visits,f.visits.length-2);this.visitor.timeSincePreviousVisit=a?i-a.timeLastActivity:0}}return f.visitNumber=j,this.visitor.visitNumber=j,this.dataStorage.write(d),this.visitor.visitorCode}checkVisitor(a){this.visitor&&this.visitor.visitorCode===a||this.createVisitor(a)}createVisitor(a){_javascriptSdkCore.KameleoonLogger.debug`CALL: ClientDataManager.createVisitor(visitorCode: ${a})`,this.visitor=new Visitor(a);try{var b,c,d;const e=_browserAnalyse.default.parse(),f=[];if(null!==(b=e.os)&&void 0!==b&&b.name&&f.push(new _javascriptSdkCore.OperatingSystem(e.os.name)),null!==(c=e.platform)&&void 0!==c&&c.type&&f.push(new _javascriptSdkCore.Device(e.platform.type)),null!==(d=e.browser)&&void 0!==d&&d.name){const a=_browserAnalyse.default.getBrowserVersion(e.browser.version);f.push(new _javascriptSdkCore.Browser(e.browser.name,a))}e.pageView&&f.push(e.pageView),f.length&&this.storeData(a,...f)}finally{this.updateLastActivity()}_javascriptSdkCore.KameleoonLogger.debug`RETURN: ClientDataManager.createVisitor(visitorCode: ${a})`}updateVisitor(){_javascriptSdkCore.KameleoonLogger.debug`CALL: ClientDataManager.updateVisitor()`;const a=this.dataStorage.read();if(!a.ok)return;const b=a.data;let c,d=-1;for(const[a,f]of Object.entries(b)){if("string"==typeof f)continue;const b=f[_javascriptSdkCore.KameleoonData.VisitsData];if(!b){c||(c=a);continue}const g=b.visits.length?b.visits[b.visits.length-1]:null;if(g){var e;const b=null!==(e="number"==typeof g?g:null===g||void 0===g?void 0:g.timeLastActivity)&&void 0!==e?e:0;b>d&&(d=b,c=a)}else c||(c=a)}c?this.createVisitor(c):(this.visitor=null,_javascriptSdkCore.KameleoonLogger.debug`ClientDataManager no visitor found`),_javascriptSdkCore.KameleoonLogger.debug`RETURN: ClientDataManager.updateVisitor()`}fetchVisit(a,b){if(0>b||b>=a.length)return null;const c=a[b];return"number"==typeof c?{timeStarted:c,timeLastActivity:c}:c}}exports.ClientDataManager=ClientDataManager;class Visitor{constructor(a){_defineProperty(this,"visitorCode",void 0),_defineProperty(this,"visitNumber",0),_defineProperty(this,"timeSincePreviousVisit",-1),this.visitorCode=a}}
@@ -8,6 +8,7 @@ export declare class KameleoonClient extends KameleoonCore {
8
8
  private domain?;
9
9
  private internalVisitorCodeManager;
10
10
  private externalVisitorCodeManager;
11
+ private customDataManager?;
11
12
  constructor({ siteCode, configuration, externals, _internals, stubMode, }: SDKParameters);
12
13
  /**
13
14
  * @method getVisitorCode - obtains visitor code from the browser cookie, if the visitor code doesn't yet exist generates a random visitor code (or uses a provided default) and sets a new visitor code to cookie
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.KameleoonClient=void 0;var _javascriptSdkCore=require("@kameleoon/javascript-sdk-core"),_requester=require("./requester"),_storage=require("./storage"),_eventSource=require("./eventSource"),_visitorCodeManager=require("./visitorCodeManager"),_prng=require("./prng"),_defaultLogger=require("./defaultLogger");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 KameleoonClient extends _javascriptSdkCore.KameleoonCore{constructor(a){let{siteCode:b,configuration:c,externals:d,_internals:e,stubMode:f}=a;if(f)return super({siteCode:b,internalConfiguration:{},stubMode:f}),_defineProperty(this,"domain",void 0),_defineProperty(this,"internalVisitorCodeManager",void 0),_defineProperty(this,"externalVisitorCodeManager",void 0),this.internalVisitorCodeManager={},void(this.externalVisitorCodeManager={});const g=(null===e||void 0===e?void 0:e.prng)||new _prng.KameleoonPRNG,h=(null===d||void 0===d?void 0:d.storage)||new _storage.DataStorage,i=(null===d||void 0===d?void 0:d.requester)||new _requester.Requester,j=(null===d||void 0===d?void 0:d.eventSource)||new _eventSource.KameleoonEventSource,k=new _javascriptSdkCore.VisitorCodeManager,l=(null===d||void 0===d?void 0:d.visitorCodeManager)||new _visitorCodeManager.KameleoonVisitorCodeManager,m=(null===e||void 0===e?void 0:e.packageInfo)||{type:_javascriptSdkCore.SdkLanguageType.JAVASCRIPT,version:"4.9.2",isServer:!1},n={externalPRNG:g,externalStorage:h,externalRequester:i,externalEventSource:j,externalVisitorCodeManager:k,externalPackageInfo:m,externalLogger:(null===d||void 0===d?void 0:d.logger)||new _defaultLogger.DefaultLogger};super({siteCode:b,configuration:c,internalConfiguration:{externals:n,settings:{useAbortController:!0}}}),_defineProperty(this,"domain",void 0),_defineProperty(this,"internalVisitorCodeManager",void 0),_defineProperty(this,"externalVisitorCodeManager",void 0);const o=_javascriptSdkCore.Validator.validateDomain(null===c||void 0===c?void 0:c.cookieDomain);this.domain=o.ok?o.data:void 0,this.internalVisitorCodeManager=k,this.externalVisitorCodeManager=l}getVisitorCode(a){if(this.stubMode)return"";_javascriptSdkCore.KameleoonLogger.info`CALL KamaleoonClient.getVisitorCode(defaultVisitorCode: ${a})`,this.internalVisitorCodeManager.getData=a=>this.externalVisitorCodeManager.getData(a),this.internalVisitorCodeManager.setData=a=>{this.externalVisitorCodeManager.setData(_objectSpread(_objectSpread({},a),{},{domain:this.domain}))};const b=this.internalVisitorCodeManager.getVisitorCode(a);return _javascriptSdkCore.KameleoonLogger.info`RETURN KamaleoonClient.getVisitorCode(defaultVisitorCode: ${a}) -> (visitorCode: ${b})`,b}setLegalConsent(a,b){this.stubMode||super.setUserConsent({visitorCode:a,consent:b,setData:a=>{this.externalVisitorCodeManager.setData(_objectSpread(_objectSpread({},a),{},{domain:this.domain}))}})}}exports.KameleoonClient=KameleoonClient;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.KameleoonClient=void 0;var _javascriptSdkCore=require("@kameleoon/javascript-sdk-core"),_requester=require("./requester"),_storage=require("./storage"),_eventSource=require("./eventSource"),_visitorCodeManager=require("./visitorCodeManager"),_prng=require("./prng"),_defaultLogger=require("./defaultLogger"),_visitorActivity=require("./visitorActivity"),_constants=require("./constants"),_dataManager=require("./dataManager");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 KameleoonClient extends _javascriptSdkCore.KameleoonCore{constructor(a){let{siteCode:b,configuration:c,externals:d,_internals:e,stubMode:f}=a;if(f)return super({siteCode:b,internalConfiguration:{},stubMode:f}),_defineProperty(this,"domain",void 0),_defineProperty(this,"internalVisitorCodeManager",void 0),_defineProperty(this,"externalVisitorCodeManager",void 0),_defineProperty(this,"customDataManager",void 0),this.internalVisitorCodeManager={},void(this.externalVisitorCodeManager={});const g=(null===e||void 0===e?void 0:e.prng)||new _prng.KameleoonPRNG,h=(null===d||void 0===d?void 0:d.storage)||new _storage.DataStorage,i=(null===d||void 0===d?void 0:d.requester)||new _requester.Requester,j=(null===d||void 0===d?void 0:d.eventSource)||new _eventSource.KameleoonEventSource,k=new _javascriptSdkCore.VisitorCodeManager,l=(null===d||void 0===d?void 0:d.visitorCodeManager)||new _visitorCodeManager.KameleoonVisitorCodeManager,m=(null===e||void 0===e?void 0:e.packageInfo)||{type:_javascriptSdkCore.SdkLanguageType.JAVASCRIPT,version:"4.10.0",isServer:!1},n=new _javascriptSdkCore.DataStorage(h,_javascriptSdkCore.KameleoonStorageKey.TargetingData),o=new _javascriptSdkCore.DataStorage(h,_javascriptSdkCore.KameleoonStorageKey.DataInfo),p=new _dataManager.ClientDataManager({dataStorage:n,infoStorage:o,cleanupInterval:0,packageInfo:m}),q={externalPRNG:g,externalStorage:h,externalRequester:i,externalEventSource:j,externalVisitorCodeManager:k,externalPackageInfo:m,externalLogger:(null===d||void 0===d?void 0:d.logger)||new _defaultLogger.DefaultLogger,customDataManager:p};super({siteCode:b,configuration:c,internalConfiguration:{externals:q,settings:{useAbortController:!0}}}),_defineProperty(this,"domain",void 0),_defineProperty(this,"internalVisitorCodeManager",void 0),_defineProperty(this,"externalVisitorCodeManager",void 0),_defineProperty(this,"customDataManager",void 0);const r=_javascriptSdkCore.Validator.validateDomain(null===c||void 0===c?void 0:c.cookieDomain);this.domain=r.ok?r.data:void 0,this.internalVisitorCodeManager=k,this.externalVisitorCodeManager=l;new _visitorActivity.VisitorActivityManager(p,this.tracker,a=>this._isConsentProvided(a),_constants.ACTIVITY_INTERVAL);this.customDataManager=p}getVisitorCode(a){if(this.stubMode)return"";_javascriptSdkCore.KameleoonLogger.info`CALL KamaleoonClient.getVisitorCode(defaultVisitorCode: ${a})`,this.internalVisitorCodeManager.getData=a=>this.externalVisitorCodeManager.getData(a),this.internalVisitorCodeManager.setData=a=>{this.externalVisitorCodeManager.setData(_objectSpread(_objectSpread({},a),{},{domain:this.domain}))};const b=this.internalVisitorCodeManager.getVisitorCode(a);if(this.initialized){var c;null===(c=this.customDataManager)||void 0===c?void 0:c.checkVisitor(b)}return _javascriptSdkCore.KameleoonLogger.info`RETURN KamaleoonClient.getVisitorCode(defaultVisitorCode: ${a}) -> (visitorCode: ${b})`,b}setLegalConsent(a,b){this.stubMode||super.setUserConsent({visitorCode:a,consent:b,setData:a=>{this.externalVisitorCodeManager.setData(_objectSpread(_objectSpread({},a),{},{domain:this.domain}))}})}}exports.KameleoonClient=KameleoonClient;
@@ -0,0 +1,42 @@
1
+ import { BrowserType, DeviceType, OperatingSystemType, PageView } from '@kameleoon/javascript-sdk-core';
2
+ export type BrowserResult = {
3
+ name?: BrowserType;
4
+ version?: string;
5
+ };
6
+ export type OSResult = {
7
+ name?: OperatingSystemType;
8
+ version?: string;
9
+ };
10
+ export type PlatformResult = {
11
+ type?: DeviceType;
12
+ };
13
+ export type ParsedResult = {
14
+ browser?: BrowserResult;
15
+ os?: OSResult;
16
+ platform?: PlatformResult;
17
+ pageView?: PageView;
18
+ };
19
+ export declare class Utils {
20
+ static getFirstMatch(regex: RegExp, userAgent: string): string;
21
+ static getSecondMatch(regex: RegExp, userAgent: string): string;
22
+ static assign<T extends object>(target: T, ...sources: Partial<T>[]): T;
23
+ }
24
+ export declare class BrowserParser {
25
+ private userAgent;
26
+ private parsedResult;
27
+ constructor(userAgent: string);
28
+ private parseBrowser;
29
+ private parseOS;
30
+ private parsePlatform;
31
+ private parseOsName;
32
+ private parseOsVersion;
33
+ private parse;
34
+ parseWebView(): void;
35
+ private parseReactNative;
36
+ getResult(): ParsedResult;
37
+ }
38
+ export default class BrowserAnalyse {
39
+ static browserParser: BrowserParser | null;
40
+ static parse(): ParsedResult;
41
+ static getBrowserVersion(version: string | undefined): number | undefined;
42
+ }
@@ -0,0 +1 @@
1
+ "use strict";var _javascriptSdkCore=require("@kameleoon/javascript-sdk-core");Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=exports.Utils=exports.BrowserParser=void 0;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 Utils{static getFirstMatch(a,b){const c=b.match(a);return c&&0<c.length&&c[1]||""}static getSecondMatch(a,b){const c=b.match(a);return c&&1<c.length&&c[2]||""}static assign(a){for(var b=arguments.length,c=Array(1<b?b-1:0),d=1;d<b;d++)c[d-1]=arguments[d];return Object.assign(a,...c)}}exports.Utils=Utils;class BrowserParser{constructor(a){_defineProperty(this,"userAgent",void 0),_defineProperty(this,"parsedResult",void 0),this.userAgent=a,this.parsedResult={};const b=""===this.userAgent&&this.parseReactNative();b||this.parse()}parseBrowser(){const a=[{test:[/chrome|crios|crmo/i],describe:a=>({name:_javascriptSdkCore.BrowserType.Chrome,version:Utils.getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.?_?\d+)+)/i,a)})},{test:[/firefox|iceweasel|fxios/i],describe:a=>({name:_javascriptSdkCore.BrowserType.Firefox,version:Utils.getFirstMatch(/(?:firefox|iceweasel|fxios)[\s/](\d+(\.?_?\d+)+)/i,a)})},{test:[/safari|applewebkit/i],describe:a=>({name:_javascriptSdkCore.BrowserType.Safari,version:Utils.getFirstMatch(/version\/(\d+(\.?_?\d+)+)/i,a)})},{test:[/opr\/|opios/i],describe:a=>({name:_javascriptSdkCore.BrowserType.Opera,version:Utils.getFirstMatch(/(?:opr|opios)[\s/](\S+)/i,a)})},{test:[/edg([ea]|ios)/i],describe:a=>({name:_javascriptSdkCore.BrowserType.InternetExplorer,version:Utils.getSecondMatch(/edg([ea]|ios)\/(\d+(\.?_?\d+)+)/i,a)})},{test:[/googlebot/i],describe:a=>({name:_javascriptSdkCore.BrowserType.Other,version:Utils.getFirstMatch(/googlebot\/(\d+(\.\d+))/i,a)||Utils.getFirstMatch(/version\/(\d+(\.?_?\d+)+)/i,a)})},{test:[/SamsungBrowser/i],describe:a=>({name:_javascriptSdkCore.BrowserType.Other,version:Utils.getFirstMatch(/(?:SamsungBrowser)[\s/](\d+(\.?_?\d+)+)/i,a)})},{test:[/yabrowser/i],describe:a=>({name:_javascriptSdkCore.BrowserType.Other,version:Utils.getFirstMatch(/(?:yabrowser)[\s/](\d+(\.?_?\d+)+)/i,a)})},{test:[/ucbrowser/i],describe:a=>({name:_javascriptSdkCore.BrowserType.Other,version:Utils.getFirstMatch(/(?:ucbrowser)[\s/](\d+(\.?_?\d+)+)/i,a)})},{test:[/vivaldi/i],describe:a=>({name:_javascriptSdkCore.BrowserType.Other,version:Utils.getFirstMatch(/vivaldi\/(\d+(\.?_?\d+)+)/i,a)})},{test:[/phantom/i],describe:a=>({name:_javascriptSdkCore.BrowserType.Other,version:Utils.getFirstMatch(/phantomjs\/(\d+(\.?_?\d+)+)/i,a)})},{test:[/electron/i],describe:a=>({name:_javascriptSdkCore.BrowserType.Other,version:Utils.getFirstMatch(/(?:electron)\/(\d+(\.?_?\d+)+)/i,a)})},{test:[/chromium/i],describe:a=>({name:_javascriptSdkCore.BrowserType.Other,version:Utils.getFirstMatch(/(?:chromium)[\s/](\d+(\.?_?\d+)+)/i,a)})},{test:[/opera/i],describe:a=>({name:_javascriptSdkCore.BrowserType.Opera,version:Utils.getFirstMatch(/(?:opera)[\s/](\d+(\.?_?\d+)+)/i,a)})},{test:[/msie|trident/i],describe:a=>({name:_javascriptSdkCore.BrowserType.InternetExplorer,version:Utils.getFirstMatch(/(?:msie |rv:)(\d+(\.?_?\d+)+)/i,a)})},{test:[/.*/i],describe:a=>{const b=a.includes("(")?/^(.*)\/(.*)[ \t]\((.*)/:/^(.*)\/(.*) /;return{name:_javascriptSdkCore.BrowserType.Other,version:Utils.getSecondMatch(b,a)}}}].find(a=>a.test.some(a=>a.test(this.userAgent)));return a&&(this.parsedResult.browser=a.describe(this.userAgent)),this.parsedResult.browser||{}}parseOS(){const a=[{test:[/windows phone/i],describe:()=>({name:_javascriptSdkCore.OperatingSystemType.WindowsPhone})},{test:[/windows /i],describe:()=>({name:_javascriptSdkCore.OperatingSystemType.Windows})},{test:[/Macintosh(.*?) FxiOS(.*?) Version\//],describe:a=>({name:_javascriptSdkCore.OperatingSystemType.IOS,version:Utils.getSecondMatch(/(Version\/)(\d[\d.]+)/,a)})},{test:[/macintosh/i],describe:a=>({name:_javascriptSdkCore.OperatingSystemType.Mac,version:Utils.getFirstMatch(/mac os x (\d+(\.?_?\d+)+)/i,a).replace(/[_\s]/g,".")})},{test:[/(ipod|iphone|ipad)/i],describe:a=>({name:_javascriptSdkCore.OperatingSystemType.IOS,version:Utils.getFirstMatch(/os (\d+([_\s]\d+)*) like mac os x/i,a).replace(/[_\s]/g,".")})},{test:[/android/i],describe:()=>({name:_javascriptSdkCore.OperatingSystemType.Android})},{test:[/linux/i],describe:()=>({name:_javascriptSdkCore.OperatingSystemType.Linux})}].find(a=>a.test.some(a=>a.test(this.userAgent)));return a&&(this.parsedResult.os=a.describe(this.userAgent)),this.parsedResult.os||{}}parsePlatform(){const a=[{test:[/huserAgentwei/i],describe:()=>({type:_javascriptSdkCore.DeviceType.Phone})},{test:[/nexus\s*(?:7|8|9|10).*/i],describe:()=>({type:_javascriptSdkCore.DeviceType.Tablet})},{test:[/ipad/i],describe:()=>({type:_javascriptSdkCore.DeviceType.Tablet})},{test:[/Macintosh(.*?) FxiOS(.*?) Version\//],describe:()=>({type:_javascriptSdkCore.DeviceType.Tablet})},{test:[/kftt build/i],describe:()=>({type:_javascriptSdkCore.DeviceType.Tablet})},{test:[/silk/i],describe:()=>({type:_javascriptSdkCore.DeviceType.Tablet})},{test:[/tablet(?! pc)/i],describe:()=>({type:_javascriptSdkCore.DeviceType.Tablet})},{test:[/ipod|iphone/i],describe:()=>({type:_javascriptSdkCore.DeviceType.Phone})},{test:[/nexus\s*[0-6].*/i,/galaxy nexus/i],describe:()=>({type:_javascriptSdkCore.DeviceType.Phone})},{test:[/[^-]mobi/i],describe:()=>({type:_javascriptSdkCore.DeviceType.Phone})},{test:[/blackberry/i],describe:()=>({type:_javascriptSdkCore.DeviceType.Phone})},{test:[/bada/i],describe:()=>({type:_javascriptSdkCore.DeviceType.Phone})},{test:[/windows phone/i],describe:()=>({type:_javascriptSdkCore.DeviceType.Phone})},{test:[/android/i],describe:()=>({type:_javascriptSdkCore.DeviceType.Phone})},{test:[/ios/i],describe:()=>({type:_javascriptSdkCore.DeviceType.Desktop})},{test:[/windows/i],describe:()=>({type:_javascriptSdkCore.DeviceType.Desktop})},{test:[/linux/i],describe:()=>({type:_javascriptSdkCore.DeviceType.Desktop})}].find(a=>a.test.some(a=>a.test(this.userAgent)))||[{test:()=>{var a,b;return(null===(a=this.parsedResult.os)||void 0===a?void 0:a.name)===_javascriptSdkCore.OperatingSystemType.Android&&3<=+((null===(b=this.parsedResult.os)||void 0===b?void 0:b.version)+"").split(".")[0]},describe:()=>({type:_javascriptSdkCore.DeviceType.Tablet})},{test:()=>{var a;return(null===(a=this.parsedResult.os)||void 0===a?void 0:a.name)===_javascriptSdkCore.OperatingSystemType.Android},describe:()=>({type:_javascriptSdkCore.DeviceType.Phone})},{test:()=>{var a;return(null===(a=this.parsedResult.os)||void 0===a?void 0:a.name)===_javascriptSdkCore.OperatingSystemType.Mac},describe:()=>({type:_javascriptSdkCore.DeviceType.Desktop})},{test:()=>{var a;return(null===(a=this.parsedResult.os)||void 0===a?void 0:a.name)===_javascriptSdkCore.OperatingSystemType.Windows},describe:()=>({type:_javascriptSdkCore.DeviceType.Desktop})},{test:()=>{var a;return(null===(a=this.parsedResult.os)||void 0===a?void 0:a.name)===_javascriptSdkCore.OperatingSystemType.Linux},describe:()=>({type:_javascriptSdkCore.DeviceType.Desktop})}].find(a=>a.test());return a&&(this.parsedResult.platform=a.describe(this.userAgent)),this.parsedResult.platform||{}}parseOsName(a){return"ios"===a?_javascriptSdkCore.OperatingSystemType.IOS:"android"===a?_javascriptSdkCore.OperatingSystemType.Android:"windows"===a?_javascriptSdkCore.OperatingSystemType.Windows:"macos"===a?_javascriptSdkCore.OperatingSystemType.Mac:void 0}parseOsVersion(a){return null==a?void 0:"number"==typeof a?a.toString():a}parse(){this.userAgent&&(this.parseBrowser(),this.parseOS(),this.parsePlatform())}parseWebView(){var a;let b=null===(a=window.location)||void 0===a?void 0:a.href;if(b){const a=document?document.title:"";this.parsedResult.pageView=new _javascriptSdkCore.PageView({urlAddress:b,title:a})}}parseReactNative(){try{if("undefined"==typeof require)return!1;const a=require("react-native");if(!a)return!1;const b=a.Platform,c=a.Dimensions,d=this.parseOsName(b.OS),e=this.parseOsVersion(b.Version);let f;if(d)if(d===_javascriptSdkCore.OperatingSystemType.Windows||d===_javascriptSdkCore.OperatingSystemType.Mac)f=_javascriptSdkCore.DeviceType.Desktop;else if(d===_javascriptSdkCore.OperatingSystemType.Android||d===_javascriptSdkCore.OperatingSystemType.IOS){const{width:a,height:b}=c.get("window");f=600<=Math.min(a,b)?_javascriptSdkCore.DeviceType.Tablet:_javascriptSdkCore.DeviceType.Phone}this.parsedResult={os:d?{name:d,version:e}:void 0,platform:{type:f}}}catch(a){return!1}return!0}getResult(){return Utils.assign({},this.parsedResult)}}exports.BrowserParser=BrowserParser;class BrowserAnalyse{static parse(){if(_javascriptSdkCore.KameleoonLogger.debug`CALL: BrowserAnalyse.parse()`,!BrowserAnalyse.browserParser){const a=navigator.userAgent||"";_javascriptSdkCore.KameleoonLogger.debug`BrowserAnalyse userAgent: ${a}`,BrowserAnalyse.browserParser=new BrowserParser(a)}BrowserAnalyse.browserParser.parseWebView();const a=BrowserAnalyse.browserParser.getResult();return _javascriptSdkCore.KameleoonLogger.debug`RETURN: BrowserAnalyse.parse() -> (result: ${a})`,a}static getBrowserVersion(a){if(a){const b=a.split(".");if(0<b.length){const a=parseInt(b[0]);return isNaN(a)?void 0:a}}}}exports.default=BrowserAnalyse,_defineProperty(BrowserAnalyse,"browserParser",null);
@@ -0,0 +1 @@
1
+ export { VisitorActivityManager } from './visitorActivityManager';
@@ -0,0 +1 @@
1
+ "use strict";var _visitorActivityManager=require("./visitorActivityManager");Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"VisitorActivityManager",{enumerable:!0,get:function(){return _visitorActivityManager.VisitorActivityManager}});
@@ -0,0 +1,18 @@
1
+ import { ITracker } from '@kameleoon/javascript-sdk-core';
2
+ import { ClientDataManager } from 'src/dataManager';
3
+ export interface VisitorActivityManagerType {
4
+ }
5
+ export declare class VisitorActivityManager implements VisitorActivityManagerType {
6
+ private dataManager;
7
+ private tracker;
8
+ private isConsentProvided;
9
+ /**
10
+ * @param dataManager - Instance of ClientDataManager
11
+ * @param tracker - Instance of ITracker
12
+ * @param isConsentProvided - Function to check if consent is provided for a visitor
13
+ * @param interval - Interval in milliseconds
14
+ */
15
+ constructor(dataManager: ClientDataManager, tracker: ITracker, isConsentProvided: (visitorCode: string) => boolean, interval: number);
16
+ private setup;
17
+ private updateLastActivity;
18
+ }
@@ -0,0 +1 @@
1
+ "use strict";var _javascriptSdkCore=require("@kameleoon/javascript-sdk-core");Object.defineProperty(exports,"__esModule",{value:!0}),exports.VisitorActivityManager=void 0;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 VisitorActivityManager{constructor(a,b,c,d){_defineProperty(this,"dataManager",void 0),_defineProperty(this,"tracker",void 0),_defineProperty(this,"isConsentProvided",void 0),_javascriptSdkCore.KameleoonLogger.debug`CALL: new VisitorActivityManager(dataManager, tracker, isConsentProvided, interval: ${d})`,this.dataManager=a,this.tracker=b,this.isConsentProvided=c,this.setup(d),_javascriptSdkCore.KameleoonLogger.debug`RETURN: new VisitorActivityManager(dataManager, tracker, isConsentProvided, interval: ${d})`}setup(a){setInterval(()=>{this.updateLastActivity()},a),this.updateLastActivity()}updateLastActivity(){const a=this.dataManager.updateLastActivity();a&&this.tracker.scheduleVisitor(a,this.isConsentProvided(a))}}exports.VisitorActivityManager=VisitorActivityManager;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kameleoon/javascript-sdk",
3
- "version": "4.9.2",
3
+ "version": "4.10.0",
4
4
  "description": "Kameleoon JavaScript SDK",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -39,7 +39,7 @@
39
39
  ],
40
40
  "license": "ISC",
41
41
  "dependencies": {
42
- "@kameleoon/javascript-sdk-core": "5.9.2"
42
+ "@kameleoon/javascript-sdk-core": "5.10.0"
43
43
  },
44
44
  "devDependencies": {
45
45
  "@types/crypto-js": "^4.1.1",