rudder-sdk-js 2.14.0 → 2.15.0
Sign up to get free protection for your applications and to get access to all the features.
- package/index.d.ts +16 -0
- package/index.js +300 -5
- package/package.json +1 -1
package/index.d.ts
CHANGED
@@ -89,6 +89,10 @@ declare module "rudder-sdk-js" {
|
|
89
89
|
anonymousIdOptions?: anonymousIdOptions;
|
90
90
|
// defaults to https://cdn.rudderlabs.com/v1.1/js-integrations
|
91
91
|
destSDKBaseURL?: string;
|
92
|
+
sessions?: {
|
93
|
+
autoTrack?: boolean; // Defaults to true
|
94
|
+
timeout?: number; // Defaults to 30 mins
|
95
|
+
}
|
92
96
|
}
|
93
97
|
|
94
98
|
/**
|
@@ -452,6 +456,16 @@ declare module "rudder-sdk-js" {
|
|
452
456
|
*/
|
453
457
|
function getGroupTraits(): apiObject;
|
454
458
|
|
459
|
+
/**
|
460
|
+
* To manually start user session in the SDK
|
461
|
+
*/
|
462
|
+
function startSession(sessionId?: number): void;
|
463
|
+
|
464
|
+
/**
|
465
|
+
* To manually end user session in the SDK
|
466
|
+
*/
|
467
|
+
function endSession(): void;
|
468
|
+
|
455
469
|
export {
|
456
470
|
integrationOptions,
|
457
471
|
loadOptions,
|
@@ -474,5 +488,7 @@ declare module "rudder-sdk-js" {
|
|
474
488
|
getUserTraits,
|
475
489
|
getGroupId,
|
476
490
|
getGroupTraits,
|
491
|
+
startSession,
|
492
|
+
endSession,
|
477
493
|
};
|
478
494
|
}
|
package/index.js
CHANGED
@@ -5016,7 +5016,7 @@
|
|
5016
5016
|
|
5017
5017
|
// Reserved Keywords for properties/traits
|
5018
5018
|
var RESERVED_KEYS = ['anonymous_id', 'id', 'sent_at', 'received_at', 'timestamp', 'original_timestamp', 'event_text', 'event'];
|
5019
|
-
var CONFIG_URL = 'https://api.rudderlabs.com/sourceConfig/?p=npm&v=2.
|
5019
|
+
var CONFIG_URL = 'https://api.rudderlabs.com/sourceConfig/?p=npm&v=2.15.0';
|
5020
5020
|
var CDN_INT_DIR = 'js-integrations';
|
5021
5021
|
var DEST_SDK_BASE_URL = "https://cdn.rudderlabs.com/v1.1/".concat(CDN_INT_DIR);
|
5022
5022
|
var MAX_WAIT_FOR_INTEGRATION_LOAD = 10000;
|
@@ -5026,6 +5026,11 @@
|
|
5026
5026
|
var DEFAULT_ERROR_REPORT_PROVIDER = 'bugsnag';
|
5027
5027
|
var ERROR_REPORT_PROVIDERS = [DEFAULT_ERROR_REPORT_PROVIDER];
|
5028
5028
|
var SAMESITE_COOKIE_OPTS = ['Lax', 'None', 'Strict'];
|
5029
|
+
var DEFAULT_SESSION_TIMEOUT = 30 * 60 * 1000; // 30 min in milliseconds
|
5030
|
+
|
5031
|
+
var MIN_SESSION_TIMEOUT = 10 * 1000; // 10 sec in milliseconds
|
5032
|
+
|
5033
|
+
var MIN_SESSION_ID_LENGTH = 10;
|
5029
5034
|
|
5030
5035
|
var aes = {exports: {}};
|
5031
5036
|
|
@@ -9892,6 +9897,7 @@
|
|
9892
9897
|
group_storage_trait: 'rl_group_trait',
|
9893
9898
|
page_storage_init_referrer: 'rl_page_init_referrer',
|
9894
9899
|
page_storage_init_referring_domain: 'rl_page_init_referring_domain',
|
9900
|
+
session_info: 'rl_session',
|
9895
9901
|
prefix: 'RudderEncrypt:',
|
9896
9902
|
key: 'Rudder'
|
9897
9903
|
};
|
@@ -10088,6 +10094,16 @@
|
|
10088
10094
|
value: function setInitialReferringDomain(value) {
|
10089
10095
|
this.setItem(defaults$1.page_storage_init_referring_domain, value);
|
10090
10096
|
}
|
10097
|
+
/**
|
10098
|
+
* Set session information
|
10099
|
+
* @param {*} value
|
10100
|
+
*/
|
10101
|
+
|
10102
|
+
}, {
|
10103
|
+
key: "setSessionInfo",
|
10104
|
+
value: function setSessionInfo(value) {
|
10105
|
+
this.setItem(defaults$1.session_info, value);
|
10106
|
+
}
|
10091
10107
|
/**
|
10092
10108
|
*
|
10093
10109
|
* @param {*} key
|
@@ -10250,6 +10266,15 @@
|
|
10250
10266
|
value: function getInitialReferringDomain() {
|
10251
10267
|
return this.getItem(defaults$1.page_storage_init_referring_domain);
|
10252
10268
|
}
|
10269
|
+
/**
|
10270
|
+
* get the stored session info
|
10271
|
+
*/
|
10272
|
+
|
10273
|
+
}, {
|
10274
|
+
key: "getSessionInfo",
|
10275
|
+
value: function getSessionInfo() {
|
10276
|
+
return this.getItem(defaults$1.session_info);
|
10277
|
+
}
|
10253
10278
|
/**
|
10254
10279
|
*
|
10255
10280
|
* @param {*} key
|
@@ -10260,6 +10285,11 @@
|
|
10260
10285
|
value: function removeItem(key) {
|
10261
10286
|
return this.storage.remove(key);
|
10262
10287
|
}
|
10288
|
+
}, {
|
10289
|
+
key: "removeSessionInfo",
|
10290
|
+
value: function removeSessionInfo() {
|
10291
|
+
this.removeItem(defaults$1.session_info);
|
10292
|
+
}
|
10263
10293
|
/**
|
10264
10294
|
* remove stored keys
|
10265
10295
|
*/
|
@@ -10661,6 +10691,10 @@
|
|
10661
10691
|
};
|
10662
10692
|
};
|
10663
10693
|
|
10694
|
+
var countDigits = function countDigits(number) {
|
10695
|
+
return number ? number.toString().length : 0;
|
10696
|
+
};
|
10697
|
+
|
10664
10698
|
// Application class
|
10665
10699
|
var RudderApp = /*#__PURE__*/_createClass(function RudderApp() {
|
10666
10700
|
_classCallCheck(this, RudderApp);
|
@@ -10668,7 +10702,7 @@
|
|
10668
10702
|
this.build = '1.0.0';
|
10669
10703
|
this.name = 'RudderLabs JavaScript SDK';
|
10670
10704
|
this.namespace = 'com.rudderlabs.javascript';
|
10671
|
-
this.version = '2.
|
10705
|
+
this.version = '2.15.0';
|
10672
10706
|
});
|
10673
10707
|
|
10674
10708
|
/* eslint-disable max-classes-per-file */
|
@@ -10677,7 +10711,7 @@
|
|
10677
10711
|
_classCallCheck(this, RudderLibraryInfo);
|
10678
10712
|
|
10679
10713
|
this.name = 'RudderLabs JavaScript SDK';
|
10680
|
-
this.version = '2.
|
10714
|
+
this.version = '2.15.0';
|
10681
10715
|
}); // Operating System information class
|
10682
10716
|
|
10683
10717
|
|
@@ -13352,7 +13386,7 @@
|
|
13352
13386
|
var devHosts = ['localhost', '127.0.0.1', '[::1]'];
|
13353
13387
|
window.rsBugsnagClient = window.Bugsnag.start({
|
13354
13388
|
apiKey: API_KEY,
|
13355
|
-
appVersion: '2.
|
13389
|
+
appVersion: '2.15.0',
|
13356
13390
|
// Set SDK version as the app version
|
13357
13391
|
metadata: META_DATA,
|
13358
13392
|
onError: function onError(event) {
|
@@ -13416,6 +13450,226 @@
|
|
13416
13450
|
}
|
13417
13451
|
};
|
13418
13452
|
|
13453
|
+
var UserSession = /*#__PURE__*/function () {
|
13454
|
+
function UserSession() {
|
13455
|
+
_classCallCheck(this, UserSession);
|
13456
|
+
|
13457
|
+
this.storage = Storage;
|
13458
|
+
this.timeout = DEFAULT_SESSION_TIMEOUT;
|
13459
|
+
this.sessionInfo = {
|
13460
|
+
autoTrack: true
|
13461
|
+
};
|
13462
|
+
}
|
13463
|
+
/**
|
13464
|
+
* A function to initialize session information
|
13465
|
+
* @param {object} options load call options
|
13466
|
+
*/
|
13467
|
+
|
13468
|
+
|
13469
|
+
_createClass(UserSession, [{
|
13470
|
+
key: "initialize",
|
13471
|
+
value: function initialize(options) {
|
13472
|
+
try {
|
13473
|
+
var _options$sessions;
|
13474
|
+
|
13475
|
+
// Fetch session information from storage if any or initialize with an empty object
|
13476
|
+
this.sessionInfo = this.storage.getSessionInfo() || this.sessionInfo;
|
13477
|
+
/**
|
13478
|
+
* By default this.autoTrack will be true
|
13479
|
+
* Cases where this.autoTrack will be false:
|
13480
|
+
* 1. User explicitly set autoTrack load option to false
|
13481
|
+
* 2. When user is manually tracking the session
|
13482
|
+
*
|
13483
|
+
* Depending on the use case, this.autoTrack is set to true/false.
|
13484
|
+
*/
|
13485
|
+
|
13486
|
+
this.sessionInfo.autoTrack = !((options === null || options === void 0 ? void 0 : (_options$sessions = options.sessions) === null || _options$sessions === void 0 ? void 0 : _options$sessions.autoTrack) === false || this.sessionInfo.manualTrack);
|
13487
|
+
/**
|
13488
|
+
* Validate "timeout" input. Should be provided in milliseconds.
|
13489
|
+
* Session timeout: By default, a session lasts until there's 30 minutes of inactivity,
|
13490
|
+
* but you can configure this limit using "timeout" load option
|
13491
|
+
*/
|
13492
|
+
|
13493
|
+
if (options !== null && options !== void 0 && options.sessions && !isNaN(options.sessions.timeout)) {
|
13494
|
+
var timeout = options.sessions.timeout; // In case user provides 0 as the timeout, auto session tracking will be disabled
|
13495
|
+
|
13496
|
+
if (timeout === 0) {
|
13497
|
+
logger.warn('[Session]:: Provided timeout value 0 will disable the auto session tracking feature.');
|
13498
|
+
this.sessionInfo.autoTrack = false;
|
13499
|
+
} // In case user provides a setTimeout value greater than 0 but less than 10 seconds SDK will show a warning
|
13500
|
+
// and will proceed with it
|
13501
|
+
|
13502
|
+
|
13503
|
+
if (timeout > 0 && timeout < MIN_SESSION_TIMEOUT) {
|
13504
|
+
logger.warn('[Session]:: It is not advised to set "timeout" less than 10 seconds');
|
13505
|
+
}
|
13506
|
+
|
13507
|
+
this.timeout = timeout;
|
13508
|
+
} // If auto session tracking is enabled start the session tracking
|
13509
|
+
|
13510
|
+
|
13511
|
+
if (this.sessionInfo.autoTrack) {
|
13512
|
+
this.startAutoTracking();
|
13513
|
+
} else if (this.sessionInfo.autoTrack === false && !this.sessionInfo.manualTrack) {
|
13514
|
+
/**
|
13515
|
+
* Use case:
|
13516
|
+
* By default user session is enabled which means storage will have session data.
|
13517
|
+
* In case user wanted to opt out and set auto track to false through load option,
|
13518
|
+
* clear stored session info.
|
13519
|
+
*/
|
13520
|
+
this.end();
|
13521
|
+
}
|
13522
|
+
} catch (e) {
|
13523
|
+
handleError(e);
|
13524
|
+
}
|
13525
|
+
}
|
13526
|
+
/**
|
13527
|
+
* A function to validate current session and return true/false depending on that
|
13528
|
+
* @param {number} timestamp
|
13529
|
+
* @returns boolean
|
13530
|
+
*/
|
13531
|
+
|
13532
|
+
}, {
|
13533
|
+
key: "isValidSession",
|
13534
|
+
value: function isValidSession(timestamp) {
|
13535
|
+
return timestamp <= this.sessionInfo.expiresAt;
|
13536
|
+
}
|
13537
|
+
/**
|
13538
|
+
* A function to generate session id
|
13539
|
+
* @returns number
|
13540
|
+
*/
|
13541
|
+
|
13542
|
+
}, {
|
13543
|
+
key: "generateSessionId",
|
13544
|
+
value: function generateSessionId() {
|
13545
|
+
return Date.now();
|
13546
|
+
}
|
13547
|
+
/**
|
13548
|
+
* A function to check for existing session details and depending on that create a new session.
|
13549
|
+
*/
|
13550
|
+
|
13551
|
+
}, {
|
13552
|
+
key: "startAutoTracking",
|
13553
|
+
value: function startAutoTracking() {
|
13554
|
+
var timestamp = Date.now();
|
13555
|
+
|
13556
|
+
if (!this.isValidSession(timestamp)) {
|
13557
|
+
this.sessionInfo = {};
|
13558
|
+
this.sessionInfo.id = timestamp; // set the current timestamp
|
13559
|
+
|
13560
|
+
this.sessionInfo.expiresAt = timestamp + this.timeout; // set the expiry time of the session
|
13561
|
+
|
13562
|
+
this.sessionInfo.sessionStart = true;
|
13563
|
+
this.sessionInfo.autoTrack = true;
|
13564
|
+
}
|
13565
|
+
|
13566
|
+
this.storage.setSessionInfo(this.sessionInfo);
|
13567
|
+
}
|
13568
|
+
/**
|
13569
|
+
* Function to validate user provided sessionId
|
13570
|
+
* @param {number} sessionId
|
13571
|
+
* @returns
|
13572
|
+
*/
|
13573
|
+
|
13574
|
+
}, {
|
13575
|
+
key: "validateSessionId",
|
13576
|
+
value: function validateSessionId(sessionId) {
|
13577
|
+
if (typeof sessionId !== 'number' || sessionId % 1 !== 0) {
|
13578
|
+
logger.error("[Session]:: \"sessionId\" should only be a positive integer");
|
13579
|
+
return;
|
13580
|
+
}
|
13581
|
+
|
13582
|
+
if (countDigits(sessionId) < MIN_SESSION_ID_LENGTH) {
|
13583
|
+
logger.error("[Session]:: \"sessionId\" should at least be \"".concat(MIN_SESSION_ID_LENGTH, "\" digits long"));
|
13584
|
+
return;
|
13585
|
+
}
|
13586
|
+
|
13587
|
+
return sessionId;
|
13588
|
+
}
|
13589
|
+
/**
|
13590
|
+
* A public method to start a session
|
13591
|
+
* @param {number} sessionId session identifier
|
13592
|
+
* @returns
|
13593
|
+
*/
|
13594
|
+
|
13595
|
+
}, {
|
13596
|
+
key: "start",
|
13597
|
+
value: function start(id) {
|
13598
|
+
var sessionId = id ? this.validateSessionId(id) : this.generateSessionId();
|
13599
|
+
this.sessionInfo = {
|
13600
|
+
id: sessionId || this.generateSessionId(),
|
13601
|
+
sessionStart: true,
|
13602
|
+
manualTrack: true
|
13603
|
+
};
|
13604
|
+
this.storage.setSessionInfo(this.sessionInfo);
|
13605
|
+
}
|
13606
|
+
/**
|
13607
|
+
* A public method to end an ongoing session.
|
13608
|
+
*/
|
13609
|
+
|
13610
|
+
}, {
|
13611
|
+
key: "end",
|
13612
|
+
value: function end() {
|
13613
|
+
this.sessionInfo = {};
|
13614
|
+
this.storage.removeSessionInfo();
|
13615
|
+
}
|
13616
|
+
/**
|
13617
|
+
* A function get ongoing sessionId.
|
13618
|
+
*/
|
13619
|
+
|
13620
|
+
}, {
|
13621
|
+
key: "getSessionInfo",
|
13622
|
+
value: function getSessionInfo() {
|
13623
|
+
var session = {};
|
13624
|
+
|
13625
|
+
if (this.sessionInfo.autoTrack || this.sessionInfo.manualTrack) {
|
13626
|
+
// renew or create a new auto-tracking session
|
13627
|
+
if (this.sessionInfo.autoTrack) {
|
13628
|
+
var timestamp = Date.now();
|
13629
|
+
|
13630
|
+
if (!this.isValidSession(timestamp)) {
|
13631
|
+
this.startAutoTracking();
|
13632
|
+
} else {
|
13633
|
+
this.sessionInfo.expiresAt = timestamp + this.timeout; // set the expiry time of the session
|
13634
|
+
}
|
13635
|
+
}
|
13636
|
+
|
13637
|
+
if (this.sessionInfo.sessionStart) {
|
13638
|
+
session.sessionStart = true;
|
13639
|
+
this.sessionInfo.sessionStart = false;
|
13640
|
+
}
|
13641
|
+
|
13642
|
+
session.sessionId = this.sessionInfo.id;
|
13643
|
+
this.storage.setSessionInfo(this.sessionInfo);
|
13644
|
+
}
|
13645
|
+
|
13646
|
+
return session;
|
13647
|
+
}
|
13648
|
+
/**
|
13649
|
+
* Refresh session info on reset API call
|
13650
|
+
*/
|
13651
|
+
|
13652
|
+
}, {
|
13653
|
+
key: "reset",
|
13654
|
+
value: function reset() {
|
13655
|
+
var _this$sessionInfo = this.sessionInfo,
|
13656
|
+
manualTrack = _this$sessionInfo.manualTrack,
|
13657
|
+
autoTrack = _this$sessionInfo.autoTrack;
|
13658
|
+
|
13659
|
+
if (autoTrack) {
|
13660
|
+
this.sessionInfo = {};
|
13661
|
+
this.startAutoTracking();
|
13662
|
+
} else if (manualTrack) {
|
13663
|
+
this.start();
|
13664
|
+
}
|
13665
|
+
}
|
13666
|
+
}]);
|
13667
|
+
|
13668
|
+
return UserSession;
|
13669
|
+
}();
|
13670
|
+
|
13671
|
+
var userSession = new UserSession();
|
13672
|
+
|
13419
13673
|
/**
|
13420
13674
|
* class responsible for handling core
|
13421
13675
|
* event tracking functionalities
|
@@ -13455,6 +13709,7 @@
|
|
13455
13709
|
this.logLevel = undefined; // flag to indicate client integrations` ready status
|
13456
13710
|
|
13457
13711
|
this.clientIntegrationsReady = false;
|
13712
|
+
this.uSession = userSession;
|
13458
13713
|
}
|
13459
13714
|
/**
|
13460
13715
|
* initialize the user after load config
|
@@ -14042,6 +14297,18 @@
|
|
14042
14297
|
if (this.groupTraits) {
|
14043
14298
|
rudderElement.message.traits = _objectSpread2({}, this.groupTraits);
|
14044
14299
|
}
|
14300
|
+
} // If auto/manual session tracking is enabled sessionId will be sent in the context
|
14301
|
+
|
14302
|
+
|
14303
|
+
try {
|
14304
|
+
var _this$uSession$getSes = this.uSession.getSessionInfo(),
|
14305
|
+
sessionId = _this$uSession$getSes.sessionId,
|
14306
|
+
sessionStart = _this$uSession$getSes.sessionStart;
|
14307
|
+
|
14308
|
+
rudderElement.message.context.sessionId = sessionId;
|
14309
|
+
if (sessionStart) rudderElement.message.context.sessionStart = true;
|
14310
|
+
} catch (e) {
|
14311
|
+
handleError(e);
|
14045
14312
|
}
|
14046
14313
|
|
14047
14314
|
this.processOptionsParam(rudderElement, options); // logger.debug(JSON.stringify(rudderElement))
|
@@ -14220,6 +14487,7 @@
|
|
14220
14487
|
this.userTraits = {};
|
14221
14488
|
this.groupId = '';
|
14222
14489
|
this.groupTraits = {};
|
14490
|
+
this.uSession.reset();
|
14223
14491
|
this.storage.clear(flag);
|
14224
14492
|
}
|
14225
14493
|
}, {
|
@@ -14360,7 +14628,10 @@
|
|
14360
14628
|
|
14361
14629
|
if (options && options.sendAdblockPageOptions && _typeof(options.sendAdblockPageOptions) === 'object') {
|
14362
14630
|
this.sendAdblockPageOptions = options.sendAdblockPageOptions;
|
14363
|
-
}
|
14631
|
+
} // Session initialization
|
14632
|
+
|
14633
|
+
|
14634
|
+
this.uSession.initialize(options);
|
14364
14635
|
|
14365
14636
|
if (options && options.clientSuppliedCallbacks) {
|
14366
14637
|
// convert to rudder recognized method names
|
@@ -14548,6 +14819,26 @@
|
|
14548
14819
|
value: function sendSampleRequest() {
|
14549
14820
|
ScriptLoader('ad-block', '//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js');
|
14550
14821
|
}
|
14822
|
+
/**
|
14823
|
+
* A public method to start a session
|
14824
|
+
* @param {string} sessionId session identifier
|
14825
|
+
* @returns
|
14826
|
+
*/
|
14827
|
+
|
14828
|
+
}, {
|
14829
|
+
key: "startSession",
|
14830
|
+
value: function startSession(sessionId) {
|
14831
|
+
this.uSession.start(sessionId);
|
14832
|
+
}
|
14833
|
+
/**
|
14834
|
+
* A public method to end an ongoing session.
|
14835
|
+
*/
|
14836
|
+
|
14837
|
+
}, {
|
14838
|
+
key: "endSession",
|
14839
|
+
value: function endSession() {
|
14840
|
+
this.uSession.end();
|
14841
|
+
}
|
14551
14842
|
}]);
|
14552
14843
|
|
14553
14844
|
return Analytics;
|
@@ -14654,8 +14945,11 @@
|
|
14654
14945
|
var setAnonymousId = instance.setAnonymousId.bind(instance);
|
14655
14946
|
var getGroupId = instance.getGroupId.bind(instance);
|
14656
14947
|
var getGroupTraits = instance.getGroupTraits.bind(instance);
|
14948
|
+
var startSession = instance.startSession.bind(instance);
|
14949
|
+
var endSession = instance.endSession.bind(instance);
|
14657
14950
|
|
14658
14951
|
exports.alias = alias;
|
14952
|
+
exports.endSession = endSession;
|
14659
14953
|
exports.getAnonymousId = getAnonymousId;
|
14660
14954
|
exports.getGroupId = getGroupId;
|
14661
14955
|
exports.getGroupTraits = getGroupTraits;
|
@@ -14669,6 +14963,7 @@
|
|
14669
14963
|
exports.ready = ready;
|
14670
14964
|
exports.reset = reset;
|
14671
14965
|
exports.setAnonymousId = setAnonymousId;
|
14966
|
+
exports.startSession = startSession;
|
14672
14967
|
exports.track = track;
|
14673
14968
|
|
14674
14969
|
Object.defineProperty(exports, '__esModule', { value: true });
|