@cloudcare/browser-core 1.1.2 → 1.2.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/cjs/{cookie.js → browser/cookie.js} +6 -37
- package/cjs/browser/fetchObservable.js +91 -0
- package/cjs/browser/xhrObservable.js +118 -0
- package/cjs/configuration/configuration.js +70 -0
- package/cjs/configuration/transportConfiguration.js +64 -0
- package/cjs/console/consoleObservable.js +84 -0
- package/cjs/dataMap.js +26 -21
- package/cjs/error/trackRuntimeError.js +27 -0
- package/cjs/helper/catchUserErrors.js +20 -0
- package/cjs/helper/contextHistory.js +134 -0
- package/cjs/helper/createEventRateLimiter.js +47 -0
- package/cjs/helper/deviceInfo.js +8 -25
- package/cjs/helper/display.js +31 -0
- package/cjs/helper/enums.js +28 -2
- package/cjs/helper/errorTools.js +63 -2
- package/cjs/helper/instrumentMethod.js +93 -0
- package/cjs/helper/lifeCycle.js +5 -3
- package/cjs/helper/observable.js +40 -2
- package/cjs/helper/tools.js +217 -11
- package/cjs/index.js +153 -23
- package/cjs/init.js +17 -27
- package/cjs/report/reportObservable.js +112 -0
- package/cjs/session/sessionConstants.js +13 -0
- package/cjs/session/sessionCookieStore.js +188 -0
- package/cjs/session/sessionManagement.js +96 -0
- package/cjs/session/sessionStore.js +150 -0
- package/cjs/synthetics/syntheticsWorkerValues.js +32 -0
- package/cjs/synthetics/usr.js +32 -0
- package/cjs/tracekit/computeStackTrace.js +73 -563
- package/cjs/tracekit/index.js +3 -15
- package/cjs/tracekit/tracekit.js +113 -0
- package/cjs/transport/batch.js +332 -0
- package/cjs/transport/httpRequest.js +112 -0
- package/cjs/transport/index.js +29 -0
- package/cjs/transport/sendWithRetryStrategy.js +177 -0
- package/cjs/transport/startBatchWithReplica.js +24 -0
- package/esm/{cookie.js → browser/cookie.js} +4 -35
- package/esm/browser/fetchObservable.js +77 -0
- package/esm/browser/xhrObservable.js +106 -0
- package/esm/configuration/configuration.js +55 -0
- package/esm/configuration/transportConfiguration.js +54 -0
- package/esm/console/consoleObservable.js +70 -0
- package/esm/dataMap.js +26 -21
- package/esm/error/trackRuntimeError.js +16 -0
- package/esm/helper/catchUserErrors.js +12 -0
- package/esm/helper/contextHistory.js +106 -0
- package/esm/helper/createEventRateLimiter.js +38 -0
- package/esm/helper/deviceInfo.js +6 -25
- package/esm/helper/display.js +21 -0
- package/esm/helper/enums.js +25 -1
- package/esm/helper/errorTools.js +58 -3
- package/esm/helper/instrumentMethod.js +81 -0
- package/esm/helper/lifeCycle.js +5 -3
- package/esm/helper/observable.js +39 -3
- package/esm/helper/tools.js +173 -3
- package/esm/index.js +17 -7
- package/esm/init.js +17 -22
- package/esm/report/reportObservable.js +98 -0
- package/esm/session/sessionConstants.js +3 -0
- package/esm/session/sessionCookieStore.js +168 -0
- package/esm/session/sessionManagement.js +78 -0
- package/esm/session/sessionStore.js +139 -0
- package/esm/synthetics/syntheticsWorkerValues.js +15 -0
- package/esm/synthetics/usr.js +18 -0
- package/esm/tracekit/computeStackTrace.js +73 -557
- package/esm/tracekit/index.js +1 -1
- package/esm/tracekit/tracekit.js +103 -0
- package/esm/transport/batch.js +316 -0
- package/esm/transport/httpRequest.js +104 -0
- package/esm/transport/index.js +3 -0
- package/esm/transport/sendWithRetryStrategy.js +165 -0
- package/esm/transport/startBatchWithReplica.js +15 -0
- package/package.json +2 -2
- package/src/.DS_Store +0 -0
- package/src/{cookie.js → browser/cookie.js} +6 -34
- package/src/browser/fetchObservable.js +86 -0
- package/src/browser/xhrObservable.js +102 -0
- package/src/configuration/configuration.js +61 -0
- package/src/configuration/transportConfiguration.js +42 -0
- package/src/console/consoleObservable.js +65 -0
- package/src/dataMap.js +26 -21
- package/src/error/trackRuntimeError.js +19 -0
- package/src/helper/catchUserErrors.js +12 -0
- package/src/helper/contextHistory.js +85 -0
- package/src/helper/createEventRateLimiter.js +37 -0
- package/src/helper/deviceInfo.js +5 -51
- package/src/helper/display.js +21 -0
- package/src/helper/enums.js +38 -14
- package/src/helper/errorTools.js +76 -12
- package/src/helper/instrumentMethod.js +97 -0
- package/src/helper/lifeCycle.js +5 -3
- package/src/helper/observable.js +33 -2
- package/src/helper/tools.js +159 -5
- package/src/index.js +18 -7
- package/src/init.js +17 -18
- package/src/report/reportObservable.js +113 -0
- package/src/session/sessionConstants.js +3 -0
- package/src/session/sessionCookieStore.js +159 -0
- package/src/session/sessionManagement.js +89 -0
- package/src/session/sessionStore.js +139 -0
- package/src/synthetics/syntheticsWorkerValues.js +22 -0
- package/src/synthetics/usr.js +18 -0
- package/src/tracekit/computeStackTrace.js +75 -551
- package/src/tracekit/index.js +1 -1
- package/src/tracekit/tracekit.js +100 -0
- package/src/transport/batch.js +289 -0
- package/src/transport/httpRequest.js +109 -0
- package/src/transport/index.js +3 -0
- package/src/transport/sendWithRetryStrategy.js +186 -0
- package/src/transport/startBatchWithReplica.js +26 -0
- package/cjs/configuration.js +0 -184
- package/cjs/errorCollection.js +0 -167
- package/cjs/fetchProxy.js +0 -162
- package/cjs/helper/errorFilter.js +0 -47
- package/cjs/sessionManagement.js +0 -221
- package/cjs/tracekit/report.js +0 -289
- package/cjs/transport.js +0 -373
- package/cjs/xhrProxy.js +0 -122
- package/esm/configuration.js +0 -167
- package/esm/errorCollection.js +0 -141
- package/esm/fetchProxy.js +0 -116
- package/esm/helper/errorFilter.js +0 -38
- package/esm/sessionManagement.js +0 -195
- package/esm/tracekit/report.js +0 -273
- package/esm/transport.js +0 -357
- package/esm/xhrProxy.js +0 -110
- package/src/configuration.js +0 -156
- package/src/errorCollection.js +0 -170
- package/src/fetchProxy.js +0 -109
- package/src/helper/errorFilter.js +0 -38
- package/src/sessionManagement.js +0 -224
- package/src/tracekit/report.js +0 -284
- package/src/transport.js +0 -380
- package/src/xhrProxy.js +0 -106
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.RawReportType = void 0;
|
|
7
|
+
exports.initReportObservable = initReportObservable;
|
|
8
|
+
|
|
9
|
+
var _errorTools = require("../helper/errorTools");
|
|
10
|
+
|
|
11
|
+
var _observable = require("../helper/observable");
|
|
12
|
+
|
|
13
|
+
var _tools = require("../helper/tools");
|
|
14
|
+
|
|
15
|
+
var _enums = require("../helper/enums");
|
|
16
|
+
|
|
17
|
+
var RawReportType = {
|
|
18
|
+
intervention: 'intervention',
|
|
19
|
+
deprecation: 'deprecation',
|
|
20
|
+
cspViolation: 'csp_violation'
|
|
21
|
+
};
|
|
22
|
+
exports.RawReportType = RawReportType;
|
|
23
|
+
|
|
24
|
+
function initReportObservable(apis) {
|
|
25
|
+
var observables = [];
|
|
26
|
+
|
|
27
|
+
if ((0, _tools.includes)(apis, RawReportType.cspViolation)) {
|
|
28
|
+
observables.push(createCspViolationReportObservable());
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
var reportTypes = (0, _tools.filter)(apis, function (api) {
|
|
32
|
+
return api !== RawReportType.cspViolation;
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
if (reportTypes.length) {
|
|
36
|
+
observables.push(createReportObservable(reportTypes));
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
return _observable.mergeObservables.apply(this, observables);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
function createReportObservable(reportTypes) {
|
|
43
|
+
var observable = new _observable.Observable(function () {
|
|
44
|
+
if (!window.ReportingObserver) {
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
var handleReports = function handleReports(reports) {
|
|
49
|
+
(0, _tools.each)(reports, function (report) {
|
|
50
|
+
observable.notify(buildRawReportFromReport(report));
|
|
51
|
+
});
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
var observer = new window.ReportingObserver(handleReports, {
|
|
55
|
+
types: reportTypes,
|
|
56
|
+
buffered: true
|
|
57
|
+
});
|
|
58
|
+
observer.observe();
|
|
59
|
+
return function () {
|
|
60
|
+
observer.disconnect();
|
|
61
|
+
};
|
|
62
|
+
});
|
|
63
|
+
return observable;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
function createCspViolationReportObservable() {
|
|
67
|
+
var observable = new _observable.Observable(function () {
|
|
68
|
+
var handleCspViolation = function handleCspViolation(event) {
|
|
69
|
+
observable.notify(buildRawReportFromCspViolation(event));
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
var _addEventListener = (0, _tools.addEventListener)(document, _enums.DOM_EVENT.SECURITY_POLICY_VIOLATION, handleCspViolation);
|
|
73
|
+
|
|
74
|
+
return _addEventListener.stop;
|
|
75
|
+
});
|
|
76
|
+
return observable;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
function buildRawReportFromReport(report) {
|
|
80
|
+
var body = report.body;
|
|
81
|
+
var type = report.type;
|
|
82
|
+
return {
|
|
83
|
+
type: type,
|
|
84
|
+
subtype: body.id,
|
|
85
|
+
message: type + ': ' + body.message,
|
|
86
|
+
stack: buildStack(body.id, body.message, body.sourceFile, body.lineNumber, body.columnNumber)
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
function buildRawReportFromCspViolation(event) {
|
|
91
|
+
var type = RawReportType.cspViolation;
|
|
92
|
+
var message = '\'' + event.blockedURI + '\' blocked by \'' + event.effectiveDirective + '\' directive';
|
|
93
|
+
return {
|
|
94
|
+
type: RawReportType.cspViolation,
|
|
95
|
+
subtype: event.effectiveDirective,
|
|
96
|
+
message: type + ': ' + message,
|
|
97
|
+
stack: buildStack(event.effectiveDirective, message + ' of the policy "' + (0, _tools.safeTruncate)(event.originalPolicy, 100, '...') + '"', event.sourceFile, event.lineNumber, event.columnNumber)
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
function buildStack(name, message, sourceFile, lineNumber, columnNumber) {
|
|
102
|
+
return sourceFile && (0, _errorTools.toStackTraceString)({
|
|
103
|
+
name: name,
|
|
104
|
+
message: message,
|
|
105
|
+
stack: [{
|
|
106
|
+
func: '?',
|
|
107
|
+
url: sourceFile,
|
|
108
|
+
line: lineNumber,
|
|
109
|
+
column: columnNumber
|
|
110
|
+
}]
|
|
111
|
+
});
|
|
112
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.SESSION_TIME_OUT_DELAY = exports.SESSION_EXPIRATION_DELAY = void 0;
|
|
7
|
+
|
|
8
|
+
var _tools = require("../helper/tools");
|
|
9
|
+
|
|
10
|
+
var SESSION_TIME_OUT_DELAY = 4 * _tools.ONE_HOUR;
|
|
11
|
+
exports.SESSION_TIME_OUT_DELAY = SESSION_TIME_OUT_DELAY;
|
|
12
|
+
var SESSION_EXPIRATION_DELAY = 15 * _tools.ONE_MINUTE;
|
|
13
|
+
exports.SESSION_EXPIRATION_DELAY = SESSION_EXPIRATION_DELAY;
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.SESSION_COOKIE_NAME = exports.MAX_NUMBER_OF_LOCK_RETRIES = exports.LOCK_RETRY_DELAY = void 0;
|
|
7
|
+
exports.persistSession = persistSession;
|
|
8
|
+
exports.retrieveSession = retrieveSession;
|
|
9
|
+
exports.toSessionString = toSessionString;
|
|
10
|
+
exports.withCookieLockAccess = withCookieLockAccess;
|
|
11
|
+
|
|
12
|
+
var _cookie = require("../browser/cookie");
|
|
13
|
+
|
|
14
|
+
var _tools = require("../helper/tools");
|
|
15
|
+
|
|
16
|
+
var _sessionConstants = require("./sessionConstants");
|
|
17
|
+
|
|
18
|
+
var SESSION_ENTRY_REGEXP = /^([a-z]+)=([a-z0-9-]+)$/;
|
|
19
|
+
var SESSION_ENTRY_SEPARATOR = '&';
|
|
20
|
+
var SESSION_COOKIE_NAME = '_dataflux_s'; // arbitrary values
|
|
21
|
+
|
|
22
|
+
exports.SESSION_COOKIE_NAME = SESSION_COOKIE_NAME;
|
|
23
|
+
var LOCK_RETRY_DELAY = 10;
|
|
24
|
+
exports.LOCK_RETRY_DELAY = LOCK_RETRY_DELAY;
|
|
25
|
+
var MAX_NUMBER_OF_LOCK_RETRIES = 100;
|
|
26
|
+
exports.MAX_NUMBER_OF_LOCK_RETRIES = MAX_NUMBER_OF_LOCK_RETRIES;
|
|
27
|
+
var bufferedOperations = [];
|
|
28
|
+
var ongoingOperations;
|
|
29
|
+
|
|
30
|
+
function withCookieLockAccess(operations, numberOfRetries) {
|
|
31
|
+
if (typeof numberOfRetries === 'undefined') {
|
|
32
|
+
numberOfRetries = 0;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
if (!ongoingOperations) {
|
|
36
|
+
ongoingOperations = operations;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
if (operations !== ongoingOperations) {
|
|
40
|
+
bufferedOperations.push(operations);
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
if (numberOfRetries >= MAX_NUMBER_OF_LOCK_RETRIES) {
|
|
45
|
+
next();
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
var currentLock;
|
|
50
|
+
var currentSession = retrieveSession();
|
|
51
|
+
|
|
52
|
+
if (isCookieLockEnabled()) {
|
|
53
|
+
// if someone has lock, retry later
|
|
54
|
+
if (currentSession.lock) {
|
|
55
|
+
retryLater(operations, numberOfRetries);
|
|
56
|
+
return;
|
|
57
|
+
} // acquire lock
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
currentLock = (0, _tools.UUID)();
|
|
61
|
+
currentSession.lock = currentLock;
|
|
62
|
+
setSession(currentSession, operations.options); // if lock is not acquired, retry later
|
|
63
|
+
|
|
64
|
+
currentSession = retrieveSession();
|
|
65
|
+
|
|
66
|
+
if (currentSession.lock !== currentLock) {
|
|
67
|
+
retryLater(operations, numberOfRetries);
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
var processedSession = operations.process(currentSession);
|
|
73
|
+
|
|
74
|
+
if (isCookieLockEnabled()) {
|
|
75
|
+
// if lock corrupted after process, retry later
|
|
76
|
+
currentSession = retrieveSession();
|
|
77
|
+
|
|
78
|
+
if (currentSession.lock !== currentLock) {
|
|
79
|
+
retryLater(operations, numberOfRetries);
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
if (processedSession) {
|
|
85
|
+
persistSession(processedSession, operations.options);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
if (isCookieLockEnabled()) {
|
|
89
|
+
// correctly handle lock around expiration would require to handle this case properly at several levels
|
|
90
|
+
// since we don't have evidence of lock issues around expiration, let's just not do the corruption check for it
|
|
91
|
+
if (!(processedSession && isExpiredState(processedSession))) {
|
|
92
|
+
// if lock corrupted after persist, retry later
|
|
93
|
+
currentSession = retrieveSession();
|
|
94
|
+
|
|
95
|
+
if (currentSession.lock !== currentLock) {
|
|
96
|
+
retryLater(operations, numberOfRetries);
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
delete currentSession.lock;
|
|
101
|
+
setSession(currentSession, operations.options);
|
|
102
|
+
processedSession = currentSession;
|
|
103
|
+
}
|
|
104
|
+
} // call after even if session is not persisted in order to perform operations on
|
|
105
|
+
// up-to-date cookie value, the value could have been modified by another tab
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
if (operations.after) {
|
|
109
|
+
operations.after(processedSession || currentSession);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
next();
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Cookie lock strategy allows mitigating issues due to concurrent access to cookie.
|
|
116
|
+
* This issue concerns only chromium browsers and enabling this on firefox increase cookie write failures.
|
|
117
|
+
*/
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
function isCookieLockEnabled() {
|
|
121
|
+
return (0, _tools.isChromium)();
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
function retryLater(operations, currentNumberOfRetries) {
|
|
125
|
+
setTimeout(function () {
|
|
126
|
+
withCookieLockAccess(operations, currentNumberOfRetries + 1);
|
|
127
|
+
}, LOCK_RETRY_DELAY);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
function next() {
|
|
131
|
+
ongoingOperations = undefined;
|
|
132
|
+
var nextOperations = bufferedOperations.shift();
|
|
133
|
+
|
|
134
|
+
if (nextOperations) {
|
|
135
|
+
withCookieLockAccess(nextOperations);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
function persistSession(session, options) {
|
|
140
|
+
if (isExpiredState(session)) {
|
|
141
|
+
clearSession(options);
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
session.expire = String((0, _tools.dateNow)() + _sessionConstants.SESSION_EXPIRATION_DELAY);
|
|
146
|
+
setSession(session, options);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
function setSession(session, options) {
|
|
150
|
+
(0, _cookie.setCookie)(SESSION_COOKIE_NAME, toSessionString(session), _sessionConstants.SESSION_EXPIRATION_DELAY, options);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
function toSessionString(session) {
|
|
154
|
+
return (0, _tools.map)((0, _tools.objectEntries)(session), function (item) {
|
|
155
|
+
return item[0] + '=' + item[1];
|
|
156
|
+
}).join(SESSION_ENTRY_SEPARATOR);
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
function retrieveSession() {
|
|
160
|
+
var sessionString = (0, _cookie.getCookie)(SESSION_COOKIE_NAME);
|
|
161
|
+
var session = {};
|
|
162
|
+
|
|
163
|
+
if (isValidSessionString(sessionString)) {
|
|
164
|
+
(0, _tools.each)(sessionString.split(SESSION_ENTRY_SEPARATOR), function (entry) {
|
|
165
|
+
var matches = SESSION_ENTRY_REGEXP.exec(entry);
|
|
166
|
+
|
|
167
|
+
if (matches !== null) {
|
|
168
|
+
var key = matches[1];
|
|
169
|
+
var value = matches[2];
|
|
170
|
+
session[key] = value;
|
|
171
|
+
}
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
return session;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
function isValidSessionString(sessionString) {
|
|
179
|
+
return sessionString !== undefined && (sessionString.indexOf(SESSION_ENTRY_SEPARATOR) !== -1 || SESSION_ENTRY_REGEXP.test(sessionString));
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
function isExpiredState(session) {
|
|
183
|
+
return (0, _tools.isEmptyObject)(session);
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
function clearSession(options) {
|
|
187
|
+
(0, _cookie.setCookie)(SESSION_COOKIE_NAME, '', 0, options);
|
|
188
|
+
}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.startSessionManager = exports.VISIBILITY_CHECK_DELAY = void 0;
|
|
7
|
+
exports.stopSessionManager = stopSessionManager;
|
|
8
|
+
|
|
9
|
+
var _tools = require("../helper/tools");
|
|
10
|
+
|
|
11
|
+
var _contextHistory = require("../helper/contextHistory");
|
|
12
|
+
|
|
13
|
+
var _sessionStore = require("./sessionStore");
|
|
14
|
+
|
|
15
|
+
var _sessionConstants = require("./sessionConstants");
|
|
16
|
+
|
|
17
|
+
var _enums = require("../helper/enums");
|
|
18
|
+
|
|
19
|
+
var VISIBILITY_CHECK_DELAY = _tools.ONE_MINUTE;
|
|
20
|
+
exports.VISIBILITY_CHECK_DELAY = VISIBILITY_CHECK_DELAY;
|
|
21
|
+
var SESSION_CONTEXT_TIMEOUT_DELAY = _sessionConstants.SESSION_TIME_OUT_DELAY;
|
|
22
|
+
var stopCallbacks = [];
|
|
23
|
+
|
|
24
|
+
var startSessionManager = function startSessionManager(options, productKey, computeSessionState) {
|
|
25
|
+
var sessionStore = (0, _sessionStore.startSessionStore)(options, productKey, computeSessionState);
|
|
26
|
+
stopCallbacks.push(function () {
|
|
27
|
+
return sessionStore.stop();
|
|
28
|
+
});
|
|
29
|
+
var sessionContextHistory = new _contextHistory.ContextHistory(SESSION_CONTEXT_TIMEOUT_DELAY);
|
|
30
|
+
stopCallbacks.push(function () {
|
|
31
|
+
return sessionContextHistory.stop();
|
|
32
|
+
});
|
|
33
|
+
sessionStore.renewObservable.subscribe(function () {
|
|
34
|
+
sessionContextHistory.add(buildSessionContext(), (0, _tools.relativeNow)());
|
|
35
|
+
});
|
|
36
|
+
sessionStore.expireObservable.subscribe(function () {
|
|
37
|
+
sessionContextHistory.closeActive((0, _tools.relativeNow)());
|
|
38
|
+
});
|
|
39
|
+
sessionStore.expandOrRenewSession();
|
|
40
|
+
sessionContextHistory.add(buildSessionContext(), (0, _tools.clocksOrigin)().relative);
|
|
41
|
+
trackActivity(function () {
|
|
42
|
+
return sessionStore.expandOrRenewSession();
|
|
43
|
+
});
|
|
44
|
+
trackVisibility(function () {
|
|
45
|
+
return sessionStore.expandSession();
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
function buildSessionContext() {
|
|
49
|
+
return {
|
|
50
|
+
id: sessionStore.getSession().id,
|
|
51
|
+
trackingType: sessionStore.getSession()[productKey]
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
return {
|
|
56
|
+
findActiveSession: function findActiveSession(startTime) {
|
|
57
|
+
return sessionContextHistory.find(startTime);
|
|
58
|
+
},
|
|
59
|
+
renewObservable: sessionStore.renewObservable,
|
|
60
|
+
expireObservable: sessionStore.expireObservable
|
|
61
|
+
};
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
exports.startSessionManager = startSessionManager;
|
|
65
|
+
|
|
66
|
+
function stopSessionManager() {
|
|
67
|
+
(0, _tools.each)(stopCallbacks, function (e) {
|
|
68
|
+
return e();
|
|
69
|
+
});
|
|
70
|
+
stopCallbacks = [];
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
function trackActivity(expandOrRenewSession) {
|
|
74
|
+
var _addEventListeners = (0, _tools.addEventListeners)(window, [_enums.DOM_EVENT.CLICK, _enums.DOM_EVENT.TOUCH_START, _enums.DOM_EVENT.KEY_DOWN, _enums.DOM_EVENT.SCROLL], expandOrRenewSession, {
|
|
75
|
+
capture: true,
|
|
76
|
+
passive: true
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
stopCallbacks.push(_addEventListeners.stop);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
function trackVisibility(expandSession) {
|
|
83
|
+
var expandSessionWhenVisible = function expandSessionWhenVisible() {
|
|
84
|
+
if (document.visibilityState === 'visible') {
|
|
85
|
+
expandSession();
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
var _addEventListener = (0, _tools.addEventListener)(document, _enums.DOM_EVENT.VISIBILITY_CHANGE, expandSessionWhenVisible);
|
|
90
|
+
|
|
91
|
+
stopCallbacks.push(_addEventListener.stop);
|
|
92
|
+
var visibilityCheckInterval = setInterval(expandSessionWhenVisible, VISIBILITY_CHECK_DELAY);
|
|
93
|
+
stopCallbacks.push(function () {
|
|
94
|
+
clearInterval(visibilityCheckInterval);
|
|
95
|
+
});
|
|
96
|
+
}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.startSessionStore = startSessionStore;
|
|
7
|
+
|
|
8
|
+
var _cookie = require("../browser/cookie");
|
|
9
|
+
|
|
10
|
+
var _observable = require("../helper/observable");
|
|
11
|
+
|
|
12
|
+
var _tools = require("../helper/tools");
|
|
13
|
+
|
|
14
|
+
var _sessionConstants = require("./sessionConstants");
|
|
15
|
+
|
|
16
|
+
var _sessionCookieStore = require("./sessionCookieStore");
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Different session concepts:
|
|
20
|
+
* - tracked, the session has an id and is updated along the user navigation
|
|
21
|
+
* - not tracked, the session does not have an id but it is updated along the user navigation
|
|
22
|
+
* - inactive, no session in store or session expired, waiting for a renew session
|
|
23
|
+
*/
|
|
24
|
+
function startSessionStore(options, productKey, computeSessionState) {
|
|
25
|
+
var renewObservable = new _observable.Observable();
|
|
26
|
+
var expireObservable = new _observable.Observable();
|
|
27
|
+
var watchSessionTimeoutId = setInterval(watchSession, _cookie.COOKIE_ACCESS_DELAY);
|
|
28
|
+
var sessionCache = retrieveActiveSession();
|
|
29
|
+
|
|
30
|
+
function expandOrRenewSession() {
|
|
31
|
+
var isTracked;
|
|
32
|
+
(0, _sessionCookieStore.withCookieLockAccess)({
|
|
33
|
+
options: options,
|
|
34
|
+
process: function process(cookieSession) {
|
|
35
|
+
var synchronizedSession = synchronizeSession(cookieSession);
|
|
36
|
+
isTracked = expandOrRenewCookie(synchronizedSession);
|
|
37
|
+
return synchronizedSession;
|
|
38
|
+
},
|
|
39
|
+
after: function after(cookieSession) {
|
|
40
|
+
if (isTracked && !hasSessionInCache()) {
|
|
41
|
+
renewSession(cookieSession);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
sessionCache = cookieSession;
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
function expandSession() {
|
|
50
|
+
(0, _sessionCookieStore.withCookieLockAccess)({
|
|
51
|
+
options: options,
|
|
52
|
+
process: function process(cookieSession) {
|
|
53
|
+
return hasSessionInCache() ? synchronizeSession(cookieSession) : undefined;
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* allows two behaviors:
|
|
59
|
+
* - if the session is active, synchronize the session cache without updating the session cookie
|
|
60
|
+
* - if the session is not active, clear the session cookie and expire the session cache
|
|
61
|
+
*/
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
function watchSession() {
|
|
65
|
+
(0, _sessionCookieStore.withCookieLockAccess)({
|
|
66
|
+
options: options,
|
|
67
|
+
process: function process(cookieSession) {
|
|
68
|
+
return !isActiveSession(cookieSession) ? {} : undefined;
|
|
69
|
+
},
|
|
70
|
+
after: synchronizeSession
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
function synchronizeSession(cookieSession) {
|
|
75
|
+
if (!isActiveSession(cookieSession)) {
|
|
76
|
+
cookieSession = {};
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
if (hasSessionInCache()) {
|
|
80
|
+
if (isSessionInCacheOutdated(cookieSession)) {
|
|
81
|
+
expireSession();
|
|
82
|
+
} else {
|
|
83
|
+
sessionCache = cookieSession;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
return cookieSession;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
function expandOrRenewCookie(cookieSession) {
|
|
91
|
+
var sessionState = computeSessionState(cookieSession[productKey]);
|
|
92
|
+
var trackingType = sessionState.trackingType;
|
|
93
|
+
var isTracked = sessionState.isTracked;
|
|
94
|
+
cookieSession[productKey] = trackingType;
|
|
95
|
+
|
|
96
|
+
if (isTracked && !cookieSession.id) {
|
|
97
|
+
cookieSession.id = (0, _tools.UUID)();
|
|
98
|
+
cookieSession.created = String((0, _tools.dateNow)());
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
return isTracked;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
function hasSessionInCache() {
|
|
105
|
+
return sessionCache[productKey] !== undefined;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
function isSessionInCacheOutdated(cookieSession) {
|
|
109
|
+
return sessionCache.id !== cookieSession.id || sessionCache[productKey] !== cookieSession[productKey];
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
function expireSession() {
|
|
113
|
+
sessionCache = {};
|
|
114
|
+
expireObservable.notify();
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
function renewSession(cookieSession) {
|
|
118
|
+
sessionCache = cookieSession;
|
|
119
|
+
renewObservable.notify();
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
function retrieveActiveSession() {
|
|
123
|
+
var session = (0, _sessionCookieStore.retrieveSession)();
|
|
124
|
+
|
|
125
|
+
if (isActiveSession(session)) {
|
|
126
|
+
return session;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
return {};
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
function isActiveSession(session) {
|
|
133
|
+
// created and expire can be undefined for versions which was not storing them
|
|
134
|
+
// these checks could be removed when older versions will not be available/live anymore
|
|
135
|
+
return (session.created === undefined || (0, _tools.dateNow)() - Number(session.created) < _sessionConstants.SESSION_TIME_OUT_DELAY) && (session.expire === undefined || (0, _tools.dateNow)() < Number(session.expire));
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
return {
|
|
139
|
+
expandOrRenewSession: (0, _tools.throttle)(expandOrRenewSession, _cookie.COOKIE_ACCESS_DELAY),
|
|
140
|
+
expandSession: expandSession,
|
|
141
|
+
getSession: function getSession() {
|
|
142
|
+
return sessionCache;
|
|
143
|
+
},
|
|
144
|
+
renewObservable: renewObservable,
|
|
145
|
+
expireObservable: expireObservable,
|
|
146
|
+
stop: function stop() {
|
|
147
|
+
clearInterval(watchSessionTimeoutId);
|
|
148
|
+
}
|
|
149
|
+
};
|
|
150
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.SYNTHETICS_TEST_ID_COOKIE_NAME = exports.SYNTHETICS_RESULT_ID_COOKIE_NAME = exports.SYNTHETICS_INJECTS_RUM_COOKIE_NAME = void 0;
|
|
7
|
+
exports.getSyntheticsResultId = getSyntheticsResultId;
|
|
8
|
+
exports.getSyntheticsTestId = getSyntheticsTestId;
|
|
9
|
+
exports.willSyntheticsInjectRum = willSyntheticsInjectRum;
|
|
10
|
+
|
|
11
|
+
var _cookie = require("../browser/cookie");
|
|
12
|
+
|
|
13
|
+
var SYNTHETICS_TEST_ID_COOKIE_NAME = 'guance-synthetics-public-id';
|
|
14
|
+
exports.SYNTHETICS_TEST_ID_COOKIE_NAME = SYNTHETICS_TEST_ID_COOKIE_NAME;
|
|
15
|
+
var SYNTHETICS_RESULT_ID_COOKIE_NAME = 'guance-synthetics-result-id';
|
|
16
|
+
exports.SYNTHETICS_RESULT_ID_COOKIE_NAME = SYNTHETICS_RESULT_ID_COOKIE_NAME;
|
|
17
|
+
var SYNTHETICS_INJECTS_RUM_COOKIE_NAME = 'guance-synthetics-injects-rum';
|
|
18
|
+
exports.SYNTHETICS_INJECTS_RUM_COOKIE_NAME = SYNTHETICS_INJECTS_RUM_COOKIE_NAME;
|
|
19
|
+
|
|
20
|
+
function willSyntheticsInjectRum() {
|
|
21
|
+
return Boolean(window._GUANCE_SYNTHETICS_INJECTS_RUM || (0, _cookie.getCookie)(SYNTHETICS_INJECTS_RUM_COOKIE_NAME));
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
function getSyntheticsTestId() {
|
|
25
|
+
var value = window._GUANCE_SYNTHETICS_PUBLIC_ID || (0, _cookie.getCookie)(SYNTHETICS_TEST_ID_COOKIE_NAME);
|
|
26
|
+
return typeof value === 'string' ? value : undefined;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function getSyntheticsResultId() {
|
|
30
|
+
var value = window._GUANCE_SYNTHETICS_RESULT_ID || (0, _cookie.getCookie)(SYNTHETICS_RESULT_ID_COOKIE_NAME);
|
|
31
|
+
return typeof value === 'string' ? value : undefined;
|
|
32
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.startCacheUsrCache = exports.ANONYMOUS_ID_EXPIRATION = exports.ANONYMOUS_ID_COOKIE_NAME = void 0;
|
|
7
|
+
|
|
8
|
+
var _cookie = require("../browser/cookie");
|
|
9
|
+
|
|
10
|
+
var _tools = require("../helper/tools");
|
|
11
|
+
|
|
12
|
+
var ANONYMOUS_ID_COOKIE_NAME = '_dataflulx_usr_id';
|
|
13
|
+
exports.ANONYMOUS_ID_COOKIE_NAME = ANONYMOUS_ID_COOKIE_NAME;
|
|
14
|
+
var ANONYMOUS_ID_EXPIRATION = 60 * 24 * _tools.ONE_HOUR;
|
|
15
|
+
exports.ANONYMOUS_ID_EXPIRATION = ANONYMOUS_ID_EXPIRATION;
|
|
16
|
+
|
|
17
|
+
var startCacheUsrCache = function startCacheUsrCache(configuration) {
|
|
18
|
+
var usrCacheId = (0, _cookie.getCookie)(ANONYMOUS_ID_COOKIE_NAME);
|
|
19
|
+
|
|
20
|
+
if (!usrCacheId) {
|
|
21
|
+
usrCacheId = (0, _tools.UUID)();
|
|
22
|
+
(0, _cookie.setCookie)(ANONYMOUS_ID_COOKIE_NAME, usrCacheId, ANONYMOUS_ID_EXPIRATION, configuration.cookieOptions);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
return {
|
|
26
|
+
getUsrId: function getUsrId() {
|
|
27
|
+
return usrCacheId;
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
exports.startCacheUsrCache = startCacheUsrCache;
|