@kameleoon/javascript-sdk 4.9.1 → 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 +33 -0
- package/dist/constants.d.ts +2 -0
- package/dist/constants.js +1 -1
- package/dist/dataManager.d.ts +14 -0
- package/dist/dataManager.js +1 -0
- package/dist/kameleoonClient.d.ts +1 -0
- package/dist/kameleoonClient.js +1 -1
- package/dist/utils/browserAnalyse.d.ts +42 -0
- package/dist/utils/browserAnalyse.js +1 -0
- package/dist/visitorActivity/index.d.ts +1 -0
- package/dist/visitorActivity/index.js +1 -0
- package/dist/visitorActivity/visitorActivityManager.d.ts +18 -0
- package/dist/visitorActivity/visitorActivityManager.js +1 -0
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,38 @@
|
|
|
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
|
+
|
|
26
|
+
## 4.9.2 (2025-05-15)
|
|
27
|
+
|
|
28
|
+
### Patch Changes
|
|
29
|
+
|
|
30
|
+
- Fixed an issue with the [session merging][SessionMerging] feature that could prevent registered users from being correctly included in experiment results when they were linked to an anonymous user during the same visitor session.
|
|
31
|
+
- Updated dependencies
|
|
32
|
+
- @kameleoon/javascript-sdk-core@5.9.2
|
|
33
|
+
|
|
34
|
+
[SessionMerging]: https://developers.kameleoon.com/feature-management-and-experimentation/web-sdks/js-sdk/#using-custom-data-for-session-merging
|
|
35
|
+
|
|
3
36
|
## 4.9.1 (2025-04-08)
|
|
4
37
|
|
|
5
38
|
### Patch Changes
|
package/dist/constants.d.ts
CHANGED
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
|
package/dist/kameleoonClient.js
CHANGED
|
@@ -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.
|
|
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.
|
|
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.
|
|
42
|
+
"@kameleoon/javascript-sdk-core": "5.10.0"
|
|
43
43
|
},
|
|
44
44
|
"devDependencies": {
|
|
45
45
|
"@types/crypto-js": "^4.1.1",
|