@cloudcare/browser-core 3.0.23 → 3.1.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/browser/addEventListener.js +11 -14
- package/cjs/browser/addEventListener.js.map +1 -0
- package/cjs/browser/cookie.js +3 -14
- package/cjs/browser/cookie.js.map +1 -0
- package/cjs/browser/fetchObservable.js +8 -23
- package/cjs/browser/fetchObservable.js.map +1 -0
- package/cjs/browser/htmlDomUtils.js +3 -9
- package/cjs/browser/htmlDomUtils.js.map +1 -0
- package/cjs/browser/pageExitObservable.js +3 -9
- package/cjs/browser/pageExitObservable.js.map +1 -0
- package/cjs/browser/runOnReadyState.js +2 -4
- package/cjs/browser/runOnReadyState.js.map +1 -0
- package/cjs/browser/scroll.js +32 -0
- package/cjs/browser/scroll.js.map +1 -0
- package/cjs/browser/xhrObservable.js +2 -21
- package/cjs/browser/xhrObservable.js.map +1 -0
- package/cjs/configuration/configuration.js +9 -20
- package/cjs/configuration/configuration.js.map +1 -0
- package/cjs/configuration/transportConfiguration.js +6 -20
- package/cjs/configuration/transportConfiguration.js.map +1 -0
- package/cjs/console/consoleObservable.js +7 -21
- package/cjs/console/consoleObservable.js.map +1 -0
- package/cjs/dataMap.js +24 -10
- package/cjs/dataMap.js.map +1 -0
- package/cjs/error/trackRuntimeError.js +3 -7
- package/cjs/error/trackRuntimeError.js.map +1 -0
- package/cjs/helper/boundedBuffer.js +2 -6
- package/cjs/helper/boundedBuffer.js.map +1 -0
- package/cjs/helper/byteUtils.js +6 -16
- package/cjs/helper/byteUtils.js.map +1 -0
- package/cjs/helper/catchUserErrors.js +2 -4
- package/cjs/helper/catchUserErrors.js.map +1 -0
- package/cjs/helper/contextHistory.js +21 -37
- package/cjs/helper/contextHistory.js.map +1 -0
- package/cjs/helper/createEventRateLimiter.js +2 -10
- package/cjs/helper/createEventRateLimiter.js.map +1 -0
- package/cjs/helper/deviceInfo.js +10 -64
- package/cjs/helper/deviceInfo.js.map +1 -0
- package/cjs/helper/display.js +2 -5
- package/cjs/helper/display.js.map +1 -0
- package/cjs/helper/enums.js +8 -2
- package/cjs/helper/enums.js.map +1 -0
- package/cjs/helper/errorTools.js +38 -40
- package/cjs/helper/errorTools.js.map +1 -0
- package/cjs/helper/eventEmitter.js +2 -6
- package/cjs/helper/eventEmitter.js.map +1 -0
- package/cjs/helper/getZoneJsOriginalValue.js +2 -5
- package/cjs/helper/getZoneJsOriginalValue.js.map +1 -0
- package/cjs/helper/instrumentMethod.js +11 -21
- package/cjs/helper/instrumentMethod.js.map +1 -0
- package/cjs/helper/lifeCycle.js +2 -9
- package/cjs/helper/lifeCycle.js.map +1 -0
- package/cjs/helper/limitModification.js +4 -22
- package/cjs/helper/limitModification.js.map +1 -0
- package/cjs/helper/mobileUtil.js +2 -20
- package/cjs/helper/mobileUtil.js.map +1 -0
- package/cjs/helper/monitor.js +50 -0
- package/cjs/helper/monitor.js.map +1 -0
- package/cjs/helper/observable.js +2 -9
- package/cjs/helper/observable.js.map +1 -0
- package/cjs/helper/readBytesFromStream.js +8 -16
- package/cjs/helper/readBytesFromStream.js.map +1 -0
- package/cjs/helper/sanitize.js +38 -61
- package/cjs/helper/sanitize.js.map +1 -0
- package/cjs/helper/serialisation/contextManager.js +5 -15
- package/cjs/helper/serialisation/contextManager.js.map +1 -0
- package/cjs/helper/serialisation/heavyCustomerDataWarning.js +2 -7
- package/cjs/helper/serialisation/heavyCustomerDataWarning.js.map +1 -0
- package/cjs/helper/serialisation/jsonStringify.js +6 -12
- package/cjs/helper/serialisation/jsonStringify.js.map +1 -0
- package/cjs/helper/serialisation/rowData.js +3 -10
- package/cjs/helper/serialisation/rowData.js.map +1 -0
- package/cjs/helper/timer.js +5 -9
- package/cjs/helper/timer.js.map +1 -0
- package/cjs/helper/tools.js +58 -463
- package/cjs/helper/tools.js.map +1 -0
- package/cjs/helper/urlPolyfill.js +5 -18
- package/cjs/helper/urlPolyfill.js.map +1 -0
- package/cjs/index.js +35 -93
- package/cjs/index.js.map +1 -0
- package/cjs/init.js +24 -36
- package/cjs/init.js.map +1 -0
- package/cjs/report/reportObservable.js +8 -26
- package/cjs/report/reportObservable.js.map +1 -0
- package/cjs/session/sessionConstants.js +2 -3
- package/cjs/session/sessionConstants.js.map +1 -0
- package/cjs/session/sessionCookieStore.js +11 -46
- package/cjs/session/sessionCookieStore.js.map +1 -0
- package/cjs/session/sessionManagement.js +2 -19
- package/cjs/session/sessionManagement.js.map +1 -0
- package/cjs/session/sessionStore.js +3 -28
- package/cjs/session/sessionStore.js.map +1 -0
- package/cjs/synthetics/syntheticsWorkerValues.js +2 -6
- package/cjs/synthetics/syntheticsWorkerValues.js.map +1 -0
- package/cjs/synthetics/usr.js +2 -8
- package/cjs/synthetics/usr.js.map +1 -0
- package/cjs/telemetry/telemetry.js +125 -0
- package/cjs/telemetry/telemetry.js.map +1 -0
- package/cjs/telemetry/types.js +17 -0
- package/cjs/telemetry/types.js.map +1 -0
- package/cjs/tracekit/computeStackTrace.js +4 -34
- package/cjs/tracekit/computeStackTrace.js.map +1 -0
- package/cjs/tracekit/index.js +2 -3
- package/cjs/tracekit/index.js.map +1 -0
- package/cjs/tracekit/tracekit.js +3 -18
- package/cjs/tracekit/tracekit.js.map +1 -0
- package/cjs/transport/batch.js +7 -56
- package/cjs/transport/batch.js.map +1 -0
- package/cjs/transport/eventBridge.js +2 -7
- package/cjs/transport/eventBridge.js.map +1 -0
- package/cjs/transport/flushController.js +8 -21
- package/cjs/transport/flushController.js.map +1 -0
- package/cjs/transport/httpRequest.js +8 -20
- package/cjs/transport/httpRequest.js.map +1 -0
- package/cjs/transport/index.js +2 -6
- package/cjs/transport/index.js.map +1 -0
- package/cjs/transport/sendWithRetryStrategy.js +4 -23
- package/cjs/transport/sendWithRetryStrategy.js.map +1 -0
- package/cjs/transport/startBatchWithReplica.js +2 -7
- package/cjs/transport/startBatchWithReplica.js.map +1 -0
- package/cjs/user/index.js +2 -3
- package/cjs/user/index.js.map +1 -0
- package/cjs/user/user.js +3 -8
- package/cjs/user/user.js.map +1 -0
- package/cjs/worker.js +2 -2
- package/cjs/worker.js.map +1 -0
- package/esm/browser/addEventListener.js +11 -10
- package/esm/browser/addEventListener.js.map +1 -0
- package/esm/browser/cookie.js +3 -6
- package/esm/browser/cookie.js.map +1 -0
- package/esm/browser/fetchObservable.js +8 -17
- package/esm/browser/fetchObservable.js.map +1 -0
- package/esm/browser/htmlDomUtils.js +3 -2
- package/esm/browser/htmlDomUtils.js.map +1 -0
- package/esm/browser/pageExitObservable.js +3 -2
- package/esm/browser/pageExitObservable.js.map +1 -0
- package/esm/browser/runOnReadyState.js +2 -1
- package/esm/browser/runOnReadyState.js.map +1 -0
- package/esm/browser/scroll.js +25 -0
- package/esm/browser/scroll.js.map +1 -0
- package/esm/browser/xhrObservable.js +2 -14
- package/esm/browser/xhrObservable.js.map +1 -0
- package/esm/configuration/configuration.js +9 -9
- package/esm/configuration/configuration.js.map +1 -0
- package/esm/configuration/transportConfiguration.js +6 -17
- package/esm/configuration/transportConfiguration.js.map +1 -0
- package/esm/console/consoleObservable.js +7 -12
- package/esm/console/consoleObservable.js.map +1 -0
- package/esm/dataMap.js +24 -8
- package/esm/dataMap.js.map +1 -0
- package/esm/error/trackRuntimeError.js +4 -3
- package/esm/error/trackRuntimeError.js.map +1 -0
- package/esm/helper/boundedBuffer.js +2 -4
- package/esm/helper/boundedBuffer.js.map +1 -0
- package/esm/helper/byteUtils.js +6 -13
- package/esm/helper/byteUtils.js.map +1 -0
- package/esm/helper/catchUserErrors.js +2 -2
- package/esm/helper/catchUserErrors.js.map +1 -0
- package/esm/helper/contextHistory.js +21 -33
- package/esm/helper/contextHistory.js.map +1 -0
- package/esm/helper/createEventRateLimiter.js +2 -6
- package/esm/helper/createEventRateLimiter.js.map +1 -0
- package/esm/helper/deviceInfo.js +10 -62
- package/esm/helper/deviceInfo.js.map +1 -0
- package/esm/helper/display.js +2 -3
- package/esm/helper/display.js.map +1 -0
- package/esm/helper/enums.js +6 -1
- package/esm/helper/enums.js.map +1 -0
- package/esm/helper/errorTools.js +36 -28
- package/esm/helper/errorTools.js.map +1 -0
- package/esm/helper/eventEmitter.js +2 -5
- package/esm/helper/eventEmitter.js.map +1 -0
- package/esm/helper/getZoneJsOriginalValue.js +2 -4
- package/esm/helper/getZoneJsOriginalValue.js.map +1 -0
- package/esm/helper/instrumentMethod.js +11 -16
- package/esm/helper/instrumentMethod.js.map +1 -0
- package/esm/helper/lifeCycle.js +2 -5
- package/esm/helper/lifeCycle.js.map +1 -0
- package/esm/helper/limitModification.js +5 -20
- package/esm/helper/limitModification.js.map +1 -0
- package/esm/helper/mobileUtil.js +2 -16
- package/esm/helper/mobileUtil.js.map +1 -0
- package/esm/helper/monitor.js +39 -0
- package/esm/helper/monitor.js.map +1 -0
- package/esm/helper/observable.js +2 -7
- package/esm/helper/observable.js.map +1 -0
- package/esm/helper/readBytesFromStream.js +8 -15
- package/esm/helper/readBytesFromStream.js.map +1 -0
- package/esm/helper/sanitize.js +40 -57
- package/esm/helper/sanitize.js.map +1 -0
- package/esm/helper/serialisation/contextManager.js +5 -9
- package/esm/helper/serialisation/contextManager.js.map +1 -0
- package/esm/helper/serialisation/heavyCustomerDataWarning.js +5 -4
- package/esm/helper/serialisation/heavyCustomerDataWarning.js.map +1 -0
- package/esm/helper/serialisation/jsonStringify.js +7 -10
- package/esm/helper/serialisation/jsonStringify.js.map +1 -0
- package/esm/helper/serialisation/rowData.js +3 -4
- package/esm/helper/serialisation/rowData.js.map +1 -0
- package/esm/helper/timer.js +5 -3
- package/esm/helper/timer.js.map +1 -0
- package/esm/helper/tools.js +58 -273
- package/esm/helper/tools.js.map +1 -0
- package/esm/helper/urlPolyfill.js +5 -9
- package/esm/helper/urlPolyfill.js.map +1 -0
- package/esm/index.js +5 -1
- package/esm/index.js.map +1 -0
- package/esm/init.js +25 -31
- package/esm/init.js.map +1 -0
- package/esm/report/reportObservable.js +8 -19
- package/esm/report/reportObservable.js.map +1 -0
- package/esm/session/sessionConstants.js +2 -1
- package/esm/session/sessionConstants.js.map +1 -0
- package/esm/session/sessionCookieStore.js +11 -38
- package/esm/session/sessionCookieStore.js.map +1 -0
- package/esm/session/sessionManagement.js +2 -8
- package/esm/session/sessionManagement.js.map +1 -0
- package/esm/session/sessionStore.js +4 -22
- package/esm/session/sessionStore.js.map +1 -0
- package/esm/synthetics/syntheticsWorkerValues.js +2 -1
- package/esm/synthetics/syntheticsWorkerValues.js.map +1 -0
- package/esm/synthetics/usr.js +2 -3
- package/esm/synthetics/usr.js.map +1 -0
- package/esm/telemetry/telemetry.js +111 -0
- package/esm/telemetry/telemetry.js.map +1 -0
- package/esm/telemetry/types.js +9 -0
- package/esm/telemetry/types.js.map +1 -0
- package/esm/tracekit/computeStackTrace.js +4 -31
- package/esm/tracekit/computeStackTrace.js.map +1 -0
- package/esm/tracekit/index.js +2 -1
- package/esm/tracekit/index.js.map +1 -0
- package/esm/tracekit/tracekit.js +5 -14
- package/esm/tracekit/tracekit.js.map +1 -0
- package/esm/transport/batch.js +9 -47
- package/esm/transport/batch.js.map +1 -0
- package/esm/transport/eventBridge.js +2 -5
- package/esm/transport/eventBridge.js.map +1 -0
- package/esm/transport/flushController.js +11 -20
- package/esm/transport/flushController.js.map +1 -0
- package/esm/transport/httpRequest.js +8 -18
- package/esm/transport/httpRequest.js.map +1 -0
- package/esm/transport/index.js +2 -1
- package/esm/transport/index.js.map +1 -0
- package/esm/transport/sendWithRetryStrategy.js +4 -17
- package/esm/transport/sendWithRetryStrategy.js.map +1 -0
- package/esm/transport/startBatchWithReplica.js +2 -3
- package/esm/transport/startBatchWithReplica.js.map +1 -0
- package/esm/user/index.js.map +1 -0
- package/esm/user/user.js +4 -5
- package/esm/user/user.js.map +1 -0
- package/esm/worker.js.map +1 -0
- package/package.json +2 -2
- package/src/browser/addEventListener.js +8 -7
- package/src/browser/fetchObservable.js +12 -3
- package/src/browser/scroll.js +25 -0
- package/src/configuration/configuration.js +16 -0
- package/src/configuration/transportConfiguration.js +2 -2
- package/src/console/consoleObservable.js +4 -2
- package/src/dataMap.js +17 -3
- package/src/error/trackRuntimeError.js +2 -2
- package/src/helper/contextHistory.js +3 -3
- package/src/helper/enums.js +4 -0
- package/src/helper/errorTools.js +55 -24
- package/src/helper/instrumentMethod.js +5 -2
- package/src/helper/monitor.js +44 -0
- package/src/helper/observable.js +10 -8
- package/src/helper/readBytesFromStream.js +5 -5
- package/src/helper/timer.js +3 -3
- package/src/helper/tools.js +2 -17
- package/src/index.js +4 -0
- package/src/init.js +19 -21
- package/src/report/reportObservable.js +6 -5
- package/src/telemetry/telemetry.js +164 -0
- package/src/telemetry/types.js +9 -0
- package/src/transport/batch.js +4 -4
- package/src/transport/httpRequest.js +5 -4
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { newRetryState, sendWithRetryStrategy } from './sendWithRetryStrategy';
|
|
2
2
|
import { addEventListener } from '../browser/addEventListener';
|
|
3
|
+
import { monitor } from '../helper/monitor';
|
|
3
4
|
/**
|
|
4
5
|
* Use POST request without content type to:
|
|
5
6
|
* - avoid CORS preflight requests
|
|
@@ -8,24 +9,19 @@ import { addEventListener } from '../browser/addEventListener';
|
|
|
8
9
|
* multiple elements are sent separated by \n in order
|
|
9
10
|
* to be parsed correctly without content type header
|
|
10
11
|
*/
|
|
11
|
-
|
|
12
12
|
function addBatchPrecision(url) {
|
|
13
13
|
if (!url) return url;
|
|
14
14
|
return url + (url.indexOf('?') === -1 ? '?' : '&') + 'precision=ms';
|
|
15
15
|
}
|
|
16
|
-
|
|
17
16
|
export function createHttpRequest(endpointUrl, bytesLimit, reportError) {
|
|
18
17
|
var retryState = newRetryState();
|
|
19
|
-
|
|
20
18
|
var sendStrategyForRetry = function sendStrategyForRetry(payload, onResponse) {
|
|
21
19
|
return fetchKeepAliveStrategy(endpointUrl, bytesLimit, payload, onResponse);
|
|
22
20
|
};
|
|
23
|
-
|
|
24
21
|
return {
|
|
25
22
|
send: function send(payload) {
|
|
26
23
|
sendWithRetryStrategy(payload, retryState, sendStrategyForRetry, endpointUrl, reportError);
|
|
27
24
|
},
|
|
28
|
-
|
|
29
25
|
/**
|
|
30
26
|
* Since fetch keepalive behaves like regular fetch on Firefox,
|
|
31
27
|
* keep using sendBeaconStrategy on exit
|
|
@@ -35,55 +31,49 @@ export function createHttpRequest(endpointUrl, bytesLimit, reportError) {
|
|
|
35
31
|
}
|
|
36
32
|
};
|
|
37
33
|
}
|
|
38
|
-
|
|
39
34
|
function sendBeaconStrategy(endpointUrl, bytesLimit, payload) {
|
|
40
35
|
var data = payload.data;
|
|
41
36
|
var bytesCount = payload.bytesCount;
|
|
42
37
|
var url = addBatchPrecision(endpointUrl);
|
|
43
38
|
var canUseBeacon = !!navigator.sendBeacon && bytesCount < bytesLimit;
|
|
44
|
-
|
|
45
39
|
if (canUseBeacon) {
|
|
46
40
|
try {
|
|
47
41
|
var isQueued = navigator.sendBeacon(url, data);
|
|
48
|
-
|
|
49
42
|
if (isQueued) {
|
|
50
43
|
return;
|
|
51
44
|
}
|
|
52
|
-
} catch (e) {
|
|
45
|
+
} catch (e) {
|
|
46
|
+
// reportBeaconError(e)
|
|
53
47
|
}
|
|
54
48
|
}
|
|
55
|
-
|
|
56
49
|
sendXHR(url, data);
|
|
57
50
|
}
|
|
58
|
-
|
|
59
51
|
export function fetchKeepAliveStrategy(endpointUrl, bytesLimit, payload, onResponse) {
|
|
60
52
|
var data = payload.data;
|
|
61
53
|
var bytesCount = payload.bytesCount;
|
|
62
54
|
var url = addBatchPrecision(endpointUrl);
|
|
63
55
|
var canUseKeepAlive = isKeepAliveSupported() && bytesCount < bytesLimit;
|
|
64
|
-
|
|
65
56
|
if (canUseKeepAlive) {
|
|
66
57
|
fetch(url, {
|
|
67
58
|
method: 'POST',
|
|
68
59
|
body: data,
|
|
69
60
|
keepalive: true,
|
|
70
61
|
mode: 'cors'
|
|
71
|
-
}).then(function (response) {
|
|
62
|
+
}).then(monitor(function (response) {
|
|
72
63
|
if (typeof onResponse === 'function') {
|
|
73
64
|
onResponse({
|
|
74
65
|
status: response.status,
|
|
75
66
|
type: response.type
|
|
76
67
|
});
|
|
77
68
|
}
|
|
78
|
-
}, function () {
|
|
69
|
+
}), monitor(function () {
|
|
79
70
|
// failed to queue the request
|
|
80
71
|
sendXHR(url, data, onResponse);
|
|
81
|
-
});
|
|
72
|
+
}));
|
|
82
73
|
} else {
|
|
83
74
|
sendXHR(url, data, onResponse);
|
|
84
75
|
}
|
|
85
76
|
}
|
|
86
|
-
|
|
87
77
|
function isKeepAliveSupported() {
|
|
88
78
|
// Request can throw, cf https://developer.mozilla.org/en-US/docs/Web/API/Request/Request#errors
|
|
89
79
|
try {
|
|
@@ -92,7 +82,6 @@ function isKeepAliveSupported() {
|
|
|
92
82
|
return false;
|
|
93
83
|
}
|
|
94
84
|
}
|
|
95
|
-
|
|
96
85
|
function sendXHR(url, data, onResponse) {
|
|
97
86
|
var request = new XMLHttpRequest();
|
|
98
87
|
request.open('POST', url, true);
|
|
@@ -106,4 +95,5 @@ function sendXHR(url, data, onResponse) {
|
|
|
106
95
|
once: true
|
|
107
96
|
});
|
|
108
97
|
request.send(data);
|
|
109
|
-
}
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=httpRequest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"httpRequest.js","names":["newRetryState","sendWithRetryStrategy","addEventListener","monitor","addBatchPrecision","url","indexOf","createHttpRequest","endpointUrl","bytesLimit","reportError","retryState","sendStrategyForRetry","payload","onResponse","fetchKeepAliveStrategy","send","sendOnExit","sendBeaconStrategy","data","bytesCount","canUseBeacon","navigator","sendBeacon","isQueued","e","sendXHR","canUseKeepAlive","isKeepAliveSupported","fetch","method","body","keepalive","mode","then","response","status","type","window","Request","_unused","request","XMLHttpRequest","open","once"],"sources":["../../src/transport/httpRequest.js"],"sourcesContent":["import { newRetryState, sendWithRetryStrategy } from './sendWithRetryStrategy'\nimport { addEventListener } from '../browser/addEventListener'\nimport { monitor } from '../helper/monitor'\n/**\n * Use POST request without content type to:\n * - avoid CORS preflight requests\n * - allow usage of sendBeacon\n *\n * multiple elements are sent separated by \\n in order\n * to be parsed correctly without content type header\n */\nfunction addBatchPrecision(url) {\n if (!url) return url\n return url + (url.indexOf('?') === -1 ? '?' : '&') + 'precision=ms'\n}\nexport function createHttpRequest(endpointUrl, bytesLimit, reportError) {\n var retryState = newRetryState()\n var sendStrategyForRetry = function (payload, onResponse) {\n return fetchKeepAliveStrategy(endpointUrl, bytesLimit, payload, onResponse)\n }\n\n return {\n send: function (payload) {\n sendWithRetryStrategy(\n payload,\n retryState,\n sendStrategyForRetry,\n endpointUrl,\n reportError\n )\n },\n /**\n * Since fetch keepalive behaves like regular fetch on Firefox,\n * keep using sendBeaconStrategy on exit\n */\n sendOnExit: function (payload) {\n sendBeaconStrategy(endpointUrl, bytesLimit, payload)\n }\n }\n}\n\nfunction sendBeaconStrategy(endpointUrl, bytesLimit, payload) {\n var data = payload.data\n var bytesCount = payload.bytesCount\n var url = addBatchPrecision(endpointUrl)\n var canUseBeacon = !!navigator.sendBeacon && bytesCount < bytesLimit\n if (canUseBeacon) {\n try {\n var isQueued = navigator.sendBeacon(url, data)\n\n if (isQueued) {\n return\n }\n } catch (e) {\n // reportBeaconError(e)\n }\n }\n sendXHR(url, data)\n}\n\nexport function fetchKeepAliveStrategy(\n endpointUrl,\n bytesLimit,\n payload,\n onResponse\n) {\n var data = payload.data\n var bytesCount = payload.bytesCount\n var url = addBatchPrecision(endpointUrl)\n var canUseKeepAlive = isKeepAliveSupported() && bytesCount < bytesLimit\n if (canUseKeepAlive) {\n fetch(url, {\n method: 'POST',\n body: data,\n keepalive: true,\n mode: 'cors'\n }).then(\n monitor(function (response) {\n if (typeof onResponse === 'function') {\n onResponse({ status: response.status, type: response.type })\n }\n }),\n monitor(function () {\n // failed to queue the request\n sendXHR(url, data, onResponse)\n })\n )\n } else {\n sendXHR(url, data, onResponse)\n }\n}\n\nfunction isKeepAliveSupported() {\n // Request can throw, cf https://developer.mozilla.org/en-US/docs/Web/API/Request/Request#errors\n try {\n return window.Request && 'keepalive' in new Request('http://a')\n } catch {\n return false\n }\n}\n\nfunction sendXHR(url, data, onResponse) {\n const request = new XMLHttpRequest()\n request.open('POST', url, true)\n addEventListener(\n request,\n 'loadend',\n function () {\n if (typeof onResponse === 'function') {\n onResponse({ status: request.status })\n }\n },\n {\n once: true\n }\n )\n request.send(data)\n}\n"],"mappings":"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"}
|
package/esm/transport/index.js
CHANGED
|
@@ -2,4 +2,5 @@ export { createHttpRequest } from './httpRequest';
|
|
|
2
2
|
export { Batch, processedMessageByDataMap } from './batch';
|
|
3
3
|
export { startBatchWithReplica } from './startBatchWithReplica';
|
|
4
4
|
export { createFlushController } from './flushController';
|
|
5
|
-
export { getEventBridge, canUseEventBridge } from './eventBridge';
|
|
5
|
+
export { getEventBridge, canUseEventBridge } from './eventBridge';
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["createHttpRequest","Batch","processedMessageByDataMap","startBatchWithReplica","createFlushController","getEventBridge","canUseEventBridge"],"sources":["../../src/transport/index.js"],"sourcesContent":["export { createHttpRequest } from './httpRequest'\nexport { Batch, processedMessageByDataMap } from './batch'\nexport { startBatchWithReplica } from './startBatchWithReplica'\nexport { createFlushController } from './flushController'\nexport { getEventBridge, canUseEventBridge } from './eventBridge'\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,eAAe;AACjD,SAASC,KAAK,EAAEC,yBAAyB,QAAQ,SAAS;AAC1D,SAASC,qBAAqB,QAAQ,yBAAyB;AAC/D,SAASC,qBAAqB,QAAQ,mBAAmB;AACzD,SAASC,cAAc,EAAEC,iBAAiB,QAAQ,eAAe"}
|
|
@@ -31,22 +31,20 @@ export function sendWithRetryStrategy(payload, state, sendStrategy, endpointUrl,
|
|
|
31
31
|
state.queuedPayloads.enqueue(payload);
|
|
32
32
|
}
|
|
33
33
|
}
|
|
34
|
-
|
|
35
34
|
function scheduleRetry(state, sendStrategy, endpointUrl, reportError) {
|
|
36
35
|
if (state.transportStatus !== TransportStatus.DOWN) {
|
|
37
36
|
return;
|
|
38
37
|
}
|
|
39
|
-
|
|
40
38
|
setTimeout(function () {
|
|
41
39
|
var payload = state.queuedPayloads.first();
|
|
42
40
|
send(payload, state, sendStrategy, {
|
|
43
41
|
onSuccess: function onSuccess() {
|
|
44
|
-
state.queuedPayloads.dequeue();
|
|
42
|
+
state.queuedPayloads.dequeue();
|
|
43
|
+
// if (state.lastFailureStatus !== 0) {
|
|
45
44
|
// addTelemetryDebug('resuming after transport down', {
|
|
46
45
|
// failureStatus: state.lastFailureStatus,
|
|
47
46
|
// })
|
|
48
47
|
// }
|
|
49
|
-
|
|
50
48
|
state.currentBackoffTime = INITIAL_BACKOFF_TIME;
|
|
51
49
|
retryQueuedPayloads(RetryReason.AFTER_RESUME, state, sendStrategy, endpointUrl, reportError);
|
|
52
50
|
},
|
|
@@ -57,14 +55,12 @@ function scheduleRetry(state, sendStrategy, endpointUrl, reportError) {
|
|
|
57
55
|
});
|
|
58
56
|
}, state.currentBackoffTime);
|
|
59
57
|
}
|
|
60
|
-
|
|
61
58
|
function send(payload, state, sendStrategy, responseData) {
|
|
62
59
|
var onSuccess = responseData.onSuccess;
|
|
63
60
|
var onFailure = responseData.onFailure;
|
|
64
61
|
state.bandwidthMonitor.add(payload);
|
|
65
62
|
sendStrategy(payload, function (response) {
|
|
66
63
|
state.bandwidthMonitor.remove(payload);
|
|
67
|
-
|
|
68
64
|
if (!shouldRetryRequest(response)) {
|
|
69
65
|
state.transportStatus = TransportStatus.UP;
|
|
70
66
|
onSuccess();
|
|
@@ -76,7 +72,6 @@ function send(payload, state, sendStrategy, responseData) {
|
|
|
76
72
|
}
|
|
77
73
|
});
|
|
78
74
|
}
|
|
79
|
-
|
|
80
75
|
function retryQueuedPayloads(reason, state, sendStrategy, endpointUrl, reportError) {
|
|
81
76
|
if (reason === RetryReason.AFTER_SUCCESS && state.queuedPayloads.isFull() && !state.queueFullReported) {
|
|
82
77
|
reportError({
|
|
@@ -86,19 +81,15 @@ function retryQueuedPayloads(reason, state, sendStrategy, endpointUrl, reportErr
|
|
|
86
81
|
});
|
|
87
82
|
state.queueFullReported = true;
|
|
88
83
|
}
|
|
89
|
-
|
|
90
84
|
var previousQueue = state.queuedPayloads;
|
|
91
85
|
state.queuedPayloads = newPayloadQueue();
|
|
92
|
-
|
|
93
86
|
while (previousQueue.size() > 0) {
|
|
94
87
|
sendWithRetryStrategy(previousQueue.dequeue(), state, sendStrategy, endpointUrl, reportError);
|
|
95
88
|
}
|
|
96
89
|
}
|
|
97
|
-
|
|
98
90
|
function shouldRetryRequest(response) {
|
|
99
91
|
return response.type !== 'opaque' && (response.status === 0 && !navigator.onLine || response.status === 408 || response.status === 429 || response.status >= 500);
|
|
100
92
|
}
|
|
101
|
-
|
|
102
93
|
export function newRetryState() {
|
|
103
94
|
return {
|
|
104
95
|
transportStatus: TransportStatus.UP,
|
|
@@ -109,7 +100,6 @@ export function newRetryState() {
|
|
|
109
100
|
queueFullReported: false
|
|
110
101
|
};
|
|
111
102
|
}
|
|
112
|
-
|
|
113
103
|
function newPayloadQueue() {
|
|
114
104
|
var queue = [];
|
|
115
105
|
return {
|
|
@@ -118,7 +108,6 @@ function newPayloadQueue() {
|
|
|
118
108
|
if (this.isFull()) {
|
|
119
109
|
return;
|
|
120
110
|
}
|
|
121
|
-
|
|
122
111
|
queue.push(payload);
|
|
123
112
|
this.bytesCount += payload.bytesCount;
|
|
124
113
|
},
|
|
@@ -127,11 +116,9 @@ function newPayloadQueue() {
|
|
|
127
116
|
},
|
|
128
117
|
dequeue: function dequeue() {
|
|
129
118
|
var payload = queue.shift();
|
|
130
|
-
|
|
131
119
|
if (payload) {
|
|
132
120
|
this.bytesCount -= payload.bytesCount;
|
|
133
121
|
}
|
|
134
|
-
|
|
135
122
|
return payload;
|
|
136
123
|
},
|
|
137
124
|
size: function size() {
|
|
@@ -142,7 +129,6 @@ function newPayloadQueue() {
|
|
|
142
129
|
}
|
|
143
130
|
};
|
|
144
131
|
}
|
|
145
|
-
|
|
146
132
|
function newBandwidthMonitor() {
|
|
147
133
|
return {
|
|
148
134
|
ongoingRequestCount: 0,
|
|
@@ -159,4 +145,5 @@ function newBandwidthMonitor() {
|
|
|
159
145
|
this.ongoingByteCount -= payload.bytesCount;
|
|
160
146
|
}
|
|
161
147
|
};
|
|
162
|
-
}
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=sendWithRetryStrategy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sendWithRetryStrategy.js","names":["clocksNow","ONE_SECOND","ONE_MEBI_BYTE","ONE_KIBI_BYTE","ErrorSource","setTimeout","MAX_ONGOING_BYTES_COUNT","MAX_ONGOING_REQUESTS","MAX_QUEUE_BYTES_COUNT","MAX_BACKOFF_TIME","INITIAL_BACKOFF_TIME","TransportStatus","UP","FAILURE_DETECTED","DOWN","RetryReason","AFTER_SUCCESS","AFTER_RESUME","sendWithRetryStrategy","payload","state","sendStrategy","endpointUrl","reportError","transportStatus","queuedPayloads","size","bandwidthMonitor","canHandle","send","onSuccess","retryQueuedPayloads","onFailure","enqueue","scheduleRetry","first","dequeue","currentBackoffTime","Math","min","responseData","add","response","remove","shouldRetryRequest","ongoingRequestCount","lastFailureStatus","status","reason","isFull","queueFullReported","message","source","AGENT","startClocks","previousQueue","newPayloadQueue","type","navigator","onLine","newRetryState","newBandwidthMonitor","queue","bytesCount","push","shift","length","ongoingByteCount"],"sources":["../../src/transport/sendWithRetryStrategy.js"],"sourcesContent":["import { clocksNow, ONE_SECOND } from '../helper/tools'\nimport { ONE_MEBI_BYTE, ONE_KIBI_BYTE } from '../helper/byteUtils'\nimport { ErrorSource } from '../helper/errorTools'\nimport { setTimeout } from '../helper/timer'\nexport var MAX_ONGOING_BYTES_COUNT = 80 * ONE_KIBI_BYTE\nexport var MAX_ONGOING_REQUESTS = 32\nexport var MAX_QUEUE_BYTES_COUNT = 3 * ONE_MEBI_BYTE\nexport var MAX_BACKOFF_TIME = 256 * ONE_SECOND\nexport var INITIAL_BACKOFF_TIME = ONE_SECOND\n\nvar TransportStatus = {\n UP: 0,\n FAILURE_DETECTED: 1,\n DOWN: 2\n}\n\nvar RetryReason = {\n AFTER_SUCCESS: 0,\n AFTER_RESUME: 1\n}\n\nexport function sendWithRetryStrategy(\n payload,\n state,\n sendStrategy,\n endpointUrl,\n reportError\n) {\n if (\n state.transportStatus === TransportStatus.UP &&\n state.queuedPayloads.size() === 0 &&\n state.bandwidthMonitor.canHandle(payload)\n ) {\n send(payload, state, sendStrategy, {\n onSuccess: function () {\n return retryQueuedPayloads(\n RetryReason.AFTER_SUCCESS,\n state,\n sendStrategy,\n endpointUrl,\n reportError\n )\n },\n onFailure: function () {\n state.queuedPayloads.enqueue(payload)\n scheduleRetry(state, sendStrategy, endpointUrl, reportError)\n }\n })\n } else {\n state.queuedPayloads.enqueue(payload)\n }\n}\n\nfunction scheduleRetry(state, sendStrategy, endpointUrl, reportError) {\n if (state.transportStatus !== TransportStatus.DOWN) {\n return\n }\n setTimeout(function () {\n var payload = state.queuedPayloads.first()\n send(payload, state, sendStrategy, {\n onSuccess: function () {\n state.queuedPayloads.dequeue()\n // if (state.lastFailureStatus !== 0) {\n // addTelemetryDebug('resuming after transport down', {\n // failureStatus: state.lastFailureStatus,\n // })\n // }\n state.currentBackoffTime = INITIAL_BACKOFF_TIME\n retryQueuedPayloads(\n RetryReason.AFTER_RESUME,\n state,\n sendStrategy,\n endpointUrl,\n reportError\n )\n },\n onFailure: function () {\n state.currentBackoffTime = Math.min(\n MAX_BACKOFF_TIME,\n state.currentBackoffTime * 2\n )\n scheduleRetry(state, sendStrategy, endpointUrl, reportError)\n }\n })\n }, state.currentBackoffTime)\n}\n\nfunction send(payload, state, sendStrategy, responseData) {\n var onSuccess = responseData.onSuccess\n var onFailure = responseData.onFailure\n state.bandwidthMonitor.add(payload)\n sendStrategy(payload, function (response) {\n state.bandwidthMonitor.remove(payload)\n if (!shouldRetryRequest(response)) {\n state.transportStatus = TransportStatus.UP\n onSuccess()\n } else {\n // do not consider transport down if another ongoing request could succeed\n state.transportStatus =\n state.bandwidthMonitor.ongoingRequestCount > 0\n ? TransportStatus.FAILURE_DETECTED\n : TransportStatus.DOWN\n state.lastFailureStatus = response.status\n onFailure()\n }\n })\n}\n\nfunction retryQueuedPayloads(\n reason,\n state,\n sendStrategy,\n endpointUrl,\n reportError\n) {\n if (\n reason === RetryReason.AFTER_SUCCESS &&\n state.queuedPayloads.isFull() &&\n !state.queueFullReported\n ) {\n reportError({\n message:\n 'Reached max ' +\n endpointUrl +\n ' events size queued for upload: ' +\n MAX_QUEUE_BYTES_COUNT / ONE_MEBI_BYTE +\n 'MiB',\n source: ErrorSource.AGENT,\n startClocks: clocksNow()\n })\n state.queueFullReported = true\n }\n var previousQueue = state.queuedPayloads\n state.queuedPayloads = newPayloadQueue()\n while (previousQueue.size() > 0) {\n sendWithRetryStrategy(\n previousQueue.dequeue(),\n state,\n sendStrategy,\n endpointUrl,\n reportError\n )\n }\n}\n\nfunction shouldRetryRequest(response) {\n return (\n response.type !== 'opaque' &&\n ((response.status === 0 && !navigator.onLine) ||\n response.status === 408 ||\n response.status === 429 ||\n response.status >= 500)\n )\n}\nexport function newRetryState() {\n return {\n transportStatus: TransportStatus.UP,\n lastFailureStatus: 0,\n currentBackoffTime: INITIAL_BACKOFF_TIME,\n bandwidthMonitor: newBandwidthMonitor(),\n queuedPayloads: newPayloadQueue(),\n queueFullReported: false\n }\n}\n\nfunction newPayloadQueue() {\n var queue = []\n return {\n bytesCount: 0,\n enqueue: function (payload) {\n if (this.isFull()) {\n return\n }\n queue.push(payload)\n this.bytesCount += payload.bytesCount\n },\n first: function () {\n return queue[0]\n },\n dequeue: function () {\n var payload = queue.shift()\n if (payload) {\n this.bytesCount -= payload.bytesCount\n }\n return payload\n },\n size: function () {\n return queue.length\n },\n isFull: function () {\n return this.bytesCount >= MAX_QUEUE_BYTES_COUNT\n }\n }\n}\n\nfunction newBandwidthMonitor() {\n return {\n ongoingRequestCount: 0,\n ongoingByteCount: 0,\n canHandle: function (payload) {\n return (\n this.ongoingRequestCount === 0 ||\n (this.ongoingByteCount + payload.bytesCount <=\n MAX_ONGOING_BYTES_COUNT &&\n this.ongoingRequestCount < MAX_ONGOING_REQUESTS)\n )\n },\n add: function (payload) {\n this.ongoingRequestCount += 1\n this.ongoingByteCount += payload.bytesCount\n },\n remove: function (payload) {\n this.ongoingRequestCount -= 1\n this.ongoingByteCount -= payload.bytesCount\n }\n }\n}\n"],"mappings":"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"}
|
|
@@ -3,7 +3,6 @@ import { createHttpRequest } from './httpRequest';
|
|
|
3
3
|
import { createFlushController } from './flushController';
|
|
4
4
|
export function startBatchWithReplica(configuration, endpointUrl, reportError, pageExitObservable, sessionExpireObservable) {
|
|
5
5
|
var primaryBatch = createBatch(endpointUrl);
|
|
6
|
-
|
|
7
6
|
function createBatch(endpointUrl) {
|
|
8
7
|
return new Batch(createHttpRequest(endpointUrl, configuration.batchBytesLimit, reportError), createFlushController({
|
|
9
8
|
messagesLimit: configuration.batchMessagesLimit,
|
|
@@ -13,10 +12,10 @@ export function startBatchWithReplica(configuration, endpointUrl, reportError, p
|
|
|
13
12
|
sessionExpireObservable: sessionExpireObservable
|
|
14
13
|
}), configuration.messageBytesLimit);
|
|
15
14
|
}
|
|
16
|
-
|
|
17
15
|
return {
|
|
18
16
|
add: function add(message) {
|
|
19
17
|
primaryBatch.add(message);
|
|
20
18
|
}
|
|
21
19
|
};
|
|
22
|
-
}
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=startBatchWithReplica.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"startBatchWithReplica.js","names":["Batch","createHttpRequest","createFlushController","startBatchWithReplica","configuration","endpointUrl","reportError","pageExitObservable","sessionExpireObservable","primaryBatch","createBatch","batchBytesLimit","messagesLimit","batchMessagesLimit","bytesLimit","durationLimit","flushTimeout","messageBytesLimit","add","message"],"sources":["../../src/transport/startBatchWithReplica.js"],"sourcesContent":["import { Batch } from './batch'\nimport { createHttpRequest } from './httpRequest'\nimport { createFlushController } from './flushController'\nexport function startBatchWithReplica(\n configuration,\n endpointUrl,\n reportError,\n pageExitObservable,\n sessionExpireObservable\n) {\n var primaryBatch = createBatch(endpointUrl)\n\n function createBatch(endpointUrl) {\n return new Batch(\n createHttpRequest(\n endpointUrl,\n configuration.batchBytesLimit,\n reportError\n ),\n createFlushController({\n messagesLimit: configuration.batchMessagesLimit,\n bytesLimit: configuration.batchBytesLimit,\n durationLimit: configuration.flushTimeout,\n pageExitObservable: pageExitObservable,\n sessionExpireObservable: sessionExpireObservable\n }),\n configuration.messageBytesLimit\n )\n }\n\n return {\n add: function (message) {\n primaryBatch.add(message)\n }\n }\n}\n"],"mappings":"AAAA,SAASA,KAAK,QAAQ,SAAS;AAC/B,SAASC,iBAAiB,QAAQ,eAAe;AACjD,SAASC,qBAAqB,QAAQ,mBAAmB;AACzD,OAAO,SAASC,qBAAqBA,CACnCC,aAAa,EACbC,WAAW,EACXC,WAAW,EACXC,kBAAkB,EAClBC,uBAAuB,EACvB;EACA,IAAIC,YAAY,GAAGC,WAAW,CAACL,WAAW,CAAC;EAE3C,SAASK,WAAWA,CAACL,WAAW,EAAE;IAChC,OAAO,IAAIL,KAAK,CACdC,iBAAiB,CACfI,WAAW,EACXD,aAAa,CAACO,eAAe,EAC7BL,WACF,CAAC,EACDJ,qBAAqB,CAAC;MACpBU,aAAa,EAAER,aAAa,CAACS,kBAAkB;MAC/CC,UAAU,EAAEV,aAAa,CAACO,eAAe;MACzCI,aAAa,EAAEX,aAAa,CAACY,YAAY;MACzCT,kBAAkB,EAAEA,kBAAkB;MACtCC,uBAAuB,EAAEA;IAC3B,CAAC,CAAC,EACFJ,aAAa,CAACa,iBAChB,CAAC;EACH;EAEA,OAAO;IACLC,GAAG,EAAE,SAAAA,IAAUC,OAAO,EAAE;MACtBV,YAAY,CAACS,GAAG,CAACC,OAAO,CAAC;IAC3B;EACF,CAAC;AACH"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../src/user/index.js"],"sourcesContent":["export * from './user'\n"],"mappings":"AAAA,cAAc,QAAQ"}
|
package/esm/user/user.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { display } from '../helper/display';
|
|
2
2
|
import { assign, getType, each } from '../helper/tools';
|
|
3
|
+
|
|
3
4
|
/**
|
|
4
5
|
* Clone input data and ensure known user properties (id, name, email)
|
|
5
6
|
* are strings, as defined here:
|
|
6
7
|
*/
|
|
7
|
-
|
|
8
8
|
export function sanitizeUser(newUser) {
|
|
9
9
|
// We shallow clone only to prevent mutation of user data.
|
|
10
10
|
var user = assign({}, newUser);
|
|
@@ -16,16 +16,15 @@ export function sanitizeUser(newUser) {
|
|
|
16
16
|
});
|
|
17
17
|
return user;
|
|
18
18
|
}
|
|
19
|
+
|
|
19
20
|
/**
|
|
20
21
|
* Simple check to ensure user is valid
|
|
21
22
|
*/
|
|
22
|
-
|
|
23
23
|
export function checkUser(newUser) {
|
|
24
24
|
var isValid = getType(newUser) === 'object';
|
|
25
|
-
|
|
26
25
|
if (!isValid) {
|
|
27
26
|
display.error('Unsupported user:', newUser);
|
|
28
27
|
}
|
|
29
|
-
|
|
30
28
|
return isValid;
|
|
31
|
-
}
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=user.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user.js","names":["display","assign","getType","each","sanitizeUser","newUser","user","keys","key","String","checkUser","isValid","error"],"sources":["../../src/user/user.js"],"sourcesContent":["import { display } from '../helper/display'\nimport { assign, getType, each } from '../helper/tools'\n\n/**\n * Clone input data and ensure known user properties (id, name, email)\n * are strings, as defined here:\n */\nexport function sanitizeUser(newUser) {\n // We shallow clone only to prevent mutation of user data.\n var user = assign({}, newUser)\n var keys = ['id', 'name', 'email']\n each(keys, function (key) {\n if (key in user) {\n user[key] = String(user[key])\n }\n })\n\n return user\n}\n\n/**\n * Simple check to ensure user is valid\n */\nexport function checkUser(newUser) {\n var isValid = getType(newUser) === 'object'\n if (!isValid) {\n display.error('Unsupported user:', newUser)\n }\n return isValid\n}\n"],"mappings":"AAAA,SAASA,OAAO,QAAQ,mBAAmB;AAC3C,SAASC,MAAM,EAAEC,OAAO,EAAEC,IAAI,QAAQ,iBAAiB;;AAEvD;AACA;AACA;AACA;AACA,OAAO,SAASC,YAAYA,CAACC,OAAO,EAAE;EACpC;EACA,IAAIC,IAAI,GAAGL,MAAM,CAAC,CAAC,CAAC,EAAEI,OAAO,CAAC;EAC9B,IAAIE,IAAI,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC;EAClCJ,IAAI,CAACI,IAAI,EAAE,UAAUC,GAAG,EAAE;IACxB,IAAIA,GAAG,IAAIF,IAAI,EAAE;MACfA,IAAI,CAACE,GAAG,CAAC,GAAGC,MAAM,CAACH,IAAI,CAACE,GAAG,CAAC,CAAC;IAC/B;EACF,CAAC,CAAC;EAEF,OAAOF,IAAI;AACb;;AAEA;AACA;AACA;AACA,OAAO,SAASI,SAASA,CAACL,OAAO,EAAE;EACjC,IAAIM,OAAO,GAAGT,OAAO,CAACG,OAAO,CAAC,KAAK,QAAQ;EAC3C,IAAI,CAACM,OAAO,EAAE;IACZX,OAAO,CAACY,KAAK,CAAC,mBAAmB,EAAEP,OAAO,CAAC;EAC7C;EACA,OAAOM,OAAO;AAChB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker.js","names":["concatBuffers"],"sources":["../src/worker.js"],"sourcesContent":["export { concatBuffers } from './helper/byteUtils'\n"],"mappings":"AAAA,SAASA,aAAa,QAAQ,oBAAoB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cloudcare/browser-core",
|
|
3
|
-
"version": "3.0
|
|
3
|
+
"version": "3.1.0",
|
|
4
4
|
"main": "cjs/index.js",
|
|
5
5
|
"module": "esm/index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -20,5 +20,5 @@
|
|
|
20
20
|
"author": "dataflux",
|
|
21
21
|
"license": "MIT",
|
|
22
22
|
"description": "DataFlux RUM Web 端数据指标监控",
|
|
23
|
-
"gitHead": "
|
|
23
|
+
"gitHead": "6863a7abc368adb01df9a2de5efbed111db1e286"
|
|
24
24
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { each } from '../helper/tools'
|
|
2
2
|
import { getZoneJsOriginalValue } from '../helper/getZoneJsOriginalValue'
|
|
3
|
+
import { monitor } from '../helper/monitor'
|
|
3
4
|
export function addEventListener(eventTarget, event, listener, options) {
|
|
4
5
|
return addEventListeners(eventTarget, [event], listener, options)
|
|
5
6
|
}
|
|
@@ -20,28 +21,28 @@ export function addEventListener(eventTarget, event, listener, options) {
|
|
|
20
21
|
* listened
|
|
21
22
|
*/
|
|
22
23
|
|
|
23
|
-
export function addEventListeners(eventTarget,
|
|
24
|
-
var wrappedListener =
|
|
24
|
+
export function addEventListeners(eventTarget, eventNames, listener, options) {
|
|
25
|
+
var wrappedListener = monitor(
|
|
25
26
|
options && options.once
|
|
26
27
|
? function (event) {
|
|
27
28
|
stop()
|
|
28
29
|
listener(event)
|
|
29
30
|
}
|
|
30
31
|
: listener
|
|
31
|
-
|
|
32
|
+
)
|
|
32
33
|
options =
|
|
33
34
|
options && options.passive
|
|
34
35
|
? { capture: options.capture, passive: options.passive }
|
|
35
36
|
: options && options.capture
|
|
36
37
|
var add = getZoneJsOriginalValue(eventTarget, 'addEventListener')
|
|
37
38
|
|
|
38
|
-
each(
|
|
39
|
-
add.call(eventTarget,
|
|
39
|
+
each(eventNames, function (eventName) {
|
|
40
|
+
add.call(eventTarget, eventName, wrappedListener, options)
|
|
40
41
|
})
|
|
41
42
|
var stop = function () {
|
|
42
43
|
var remove = getZoneJsOriginalValue(eventTarget, 'removeEventListener')
|
|
43
|
-
each(
|
|
44
|
-
remove.call(eventTarget,
|
|
44
|
+
each(eventNames, function (eventName) {
|
|
45
|
+
remove.call(eventTarget, eventName, wrappedListener, options)
|
|
45
46
|
})
|
|
46
47
|
}
|
|
47
48
|
return {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { instrumentMethod } from '../helper/instrumentMethod'
|
|
2
2
|
import { Observable } from '../helper/observable'
|
|
3
3
|
import { clocksNow } from '../helper/tools'
|
|
4
|
+
import { monitor, callMonitored } from '../helper/monitor'
|
|
4
5
|
import { normalizeUrl } from '../helper/urlPolyfill'
|
|
5
6
|
|
|
6
7
|
var fetchObservable
|
|
@@ -24,14 +25,22 @@ function createFetchObservable() {
|
|
|
24
25
|
function (originalFetch) {
|
|
25
26
|
return function (input, init) {
|
|
26
27
|
var responsePromise
|
|
27
|
-
var context = beforeSend
|
|
28
|
+
var context = callMonitored(beforeSend, null, [
|
|
29
|
+
observable,
|
|
30
|
+
input,
|
|
31
|
+
init
|
|
32
|
+
])
|
|
28
33
|
if (context) {
|
|
29
34
|
responsePromise = originalFetch.call(
|
|
30
35
|
this,
|
|
31
36
|
context.input,
|
|
32
37
|
context.init
|
|
33
38
|
)
|
|
34
|
-
afterSend
|
|
39
|
+
callMonitored(afterSend, null, [
|
|
40
|
+
observable,
|
|
41
|
+
responsePromise,
|
|
42
|
+
context
|
|
43
|
+
])
|
|
35
44
|
} else {
|
|
36
45
|
responsePromise = originalFetch.call(this, input, init)
|
|
37
46
|
}
|
|
@@ -91,5 +100,5 @@ function afterSend(observable, responsePromise, startContext) {
|
|
|
91
100
|
}
|
|
92
101
|
observable.notify(context)
|
|
93
102
|
}
|
|
94
|
-
responsePromise.then(reportFetch, reportFetch)
|
|
103
|
+
responsePromise.then(monitor(reportFetch), monitor(reportFetch))
|
|
95
104
|
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export function getScrollX() {
|
|
2
|
+
var scrollX
|
|
3
|
+
var visual = window.visualViewport
|
|
4
|
+
if (visual) {
|
|
5
|
+
scrollX = visual.pageLeft - visual.offsetLeft
|
|
6
|
+
} else if (window.scrollX !== undefined) {
|
|
7
|
+
scrollX = window.scrollX
|
|
8
|
+
} else {
|
|
9
|
+
scrollX = window.pageXOffset || 0
|
|
10
|
+
}
|
|
11
|
+
return Math.round(scrollX)
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export function getScrollY() {
|
|
15
|
+
var scrollY
|
|
16
|
+
var visual = window.visualViewport
|
|
17
|
+
if (visual) {
|
|
18
|
+
scrollY = visual.pageTop - visual.offsetTop
|
|
19
|
+
} else if (window.scrollY !== undefined) {
|
|
20
|
+
scrollY = window.scrollY
|
|
21
|
+
} else {
|
|
22
|
+
scrollY = window.pageYOffset || 0
|
|
23
|
+
}
|
|
24
|
+
return Math.round(scrollY)
|
|
25
|
+
}
|
|
@@ -30,6 +30,13 @@ export function validateAndBuildConfiguration(initConfiguration) {
|
|
|
30
30
|
display.error('Sample Rate should be a number between 0 and 100')
|
|
31
31
|
return
|
|
32
32
|
}
|
|
33
|
+
if (
|
|
34
|
+
initConfiguration.telemetrySampleRate !== undefined &&
|
|
35
|
+
!isPercentage(initConfiguration.telemetrySampleRate)
|
|
36
|
+
) {
|
|
37
|
+
display.error('Telemetry Sample Rate should be a number between 0 and 100')
|
|
38
|
+
return
|
|
39
|
+
}
|
|
33
40
|
var sessionSampleRate =
|
|
34
41
|
initConfiguration.sessionSampleRate || initConfiguration.sampleRate
|
|
35
42
|
return assign(
|
|
@@ -45,6 +52,14 @@ export function validateAndBuildConfiguration(initConfiguration) {
|
|
|
45
52
|
service: initConfiguration.service,
|
|
46
53
|
version: initConfiguration.version,
|
|
47
54
|
env: initConfiguration.env,
|
|
55
|
+
telemetrySampleRate: isNullUndefinedDefaultValue(
|
|
56
|
+
initConfiguration.telemetrySampleRate,
|
|
57
|
+
100
|
|
58
|
+
),
|
|
59
|
+
telemetryEnabled: isNullUndefinedDefaultValue(
|
|
60
|
+
initConfiguration.telemetryEnabled,
|
|
61
|
+
false
|
|
62
|
+
),
|
|
48
63
|
silentMultipleInit: !!initConfiguration.silentMultipleInit,
|
|
49
64
|
|
|
50
65
|
/**
|
|
@@ -54,6 +69,7 @@ export function validateAndBuildConfiguration(initConfiguration) {
|
|
|
54
69
|
batchBytesLimit: 16 * ONE_KIBI_BYTE,
|
|
55
70
|
|
|
56
71
|
eventRateLimiterThreshold: 3000,
|
|
72
|
+
maxTelemetryEventsPerPage: 15,
|
|
57
73
|
|
|
58
74
|
/**
|
|
59
75
|
* flush automatically, aim to be lower than ALB connection timeout
|
|
@@ -44,7 +44,7 @@ export function computeTransportConfiguration(initConfiguration) {
|
|
|
44
44
|
isServerError = initConfiguration.isServerError
|
|
45
45
|
}
|
|
46
46
|
return {
|
|
47
|
-
|
|
47
|
+
rumEndpoint: getEndPointUrl(
|
|
48
48
|
initConfiguration.datakitUrl || initConfiguration.datakitOrigin,
|
|
49
49
|
'rum'
|
|
50
50
|
),
|
|
@@ -58,7 +58,7 @@ export function computeTransportConfiguration(initConfiguration) {
|
|
|
58
58
|
}
|
|
59
59
|
}
|
|
60
60
|
export function isIntakeRequest(url, configuration) {
|
|
61
|
-
var notTakeRequest = [configuration.
|
|
61
|
+
var notTakeRequest = [configuration.rumEndpoint]
|
|
62
62
|
if (configuration.logsEndpoint) {
|
|
63
63
|
notTakeRequest.push(configuration.logsEndpoint)
|
|
64
64
|
}
|
|
@@ -8,7 +8,7 @@ import { mergeObservables, Observable } from '../helper/observable'
|
|
|
8
8
|
import { find, map } from '../helper/tools'
|
|
9
9
|
import { jsonStringify } from '../helper/serialisation/jsonStringify'
|
|
10
10
|
import { ConsoleApiName } from '../helper/display'
|
|
11
|
-
|
|
11
|
+
import { callMonitored } from '../helper/monitor'
|
|
12
12
|
var consoleObservablesByApi = {}
|
|
13
13
|
|
|
14
14
|
export function initConsoleObservable(apis) {
|
|
@@ -30,7 +30,9 @@ function createConsoleObservable(api) {
|
|
|
30
30
|
var params = [].slice.call(arguments)
|
|
31
31
|
originalConsoleApi.apply(console, arguments)
|
|
32
32
|
var handlingStack = createHandlingStack()
|
|
33
|
-
|
|
33
|
+
callMonitored(function () {
|
|
34
|
+
observable.notify(buildConsoleLog(params, api, handlingStack))
|
|
35
|
+
})
|
|
34
36
|
}
|
|
35
37
|
return function () {
|
|
36
38
|
console[api] = originalConsoleApi
|
package/src/dataMap.js
CHANGED
|
@@ -34,7 +34,9 @@ export var commonTags = {
|
|
|
34
34
|
}
|
|
35
35
|
export var commonFields = {
|
|
36
36
|
action_id: 'action.id',
|
|
37
|
-
|
|
37
|
+
action_ids: 'action.ids',
|
|
38
|
+
view_in_foreground: 'view.in_foreground',
|
|
39
|
+
display: 'display'
|
|
38
40
|
}
|
|
39
41
|
// 需要用双引号将字符串类型的field value括起来, 这里有数组标示[string, path]
|
|
40
42
|
export var dataMap = {
|
|
@@ -42,7 +44,8 @@ export var dataMap = {
|
|
|
42
44
|
type: RumEventType.VIEW,
|
|
43
45
|
tags: {
|
|
44
46
|
view_loading_type: 'view.loading_type',
|
|
45
|
-
view_apdex_level: 'view.apdex_level'
|
|
47
|
+
view_apdex_level: 'view.apdex_level',
|
|
48
|
+
view_privacy_replay_level: 'privacy.replay_level'
|
|
46
49
|
},
|
|
47
50
|
fields: {
|
|
48
51
|
is_active: 'view.is_active',
|
|
@@ -65,13 +68,14 @@ export var dataMap = {
|
|
|
65
68
|
load_event: 'view.load_event',
|
|
66
69
|
first_input_time: 'view.first_input_time',
|
|
67
70
|
first_paint_time: 'view.fpt',
|
|
71
|
+
interaction_to_next_paint: 'view.interaction_to_next_paint',
|
|
68
72
|
resource_load_time: 'view.resource_load_time',
|
|
69
73
|
time_to_interactive: 'view.tti',
|
|
70
74
|
dom: 'view.dom',
|
|
71
75
|
dom_ready: 'view.dom_ready',
|
|
72
76
|
time_spent: 'view.time_spent',
|
|
73
77
|
first_byte: 'view.first_byte',
|
|
74
|
-
|
|
78
|
+
page_states: '_gc.page_states',
|
|
75
79
|
frustration_count: 'view.frustration.count',
|
|
76
80
|
custom_timings: 'view.custom_timings'
|
|
77
81
|
}
|
|
@@ -159,6 +163,16 @@ export var dataMap = {
|
|
|
159
163
|
action_position: '_gc.action.position'
|
|
160
164
|
}
|
|
161
165
|
},
|
|
166
|
+
telemetry: {
|
|
167
|
+
type: 'telemetry',
|
|
168
|
+
fields: {
|
|
169
|
+
status: 'telemetry.status',
|
|
170
|
+
message: ['string', 'telemetry.message'],
|
|
171
|
+
type: 'telemetry.type',
|
|
172
|
+
error_stack: ['string', 'telemetry.error.stack'],
|
|
173
|
+
error_kind: ['string', 'telemetry.error.kind']
|
|
174
|
+
}
|
|
175
|
+
},
|
|
162
176
|
browser_log: {
|
|
163
177
|
type: RumEventType.LOGGER,
|
|
164
178
|
tags: {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ErrorSource, computeRawError } from '../helper/errorTools'
|
|
2
2
|
import { clocksNow } from '../helper/tools'
|
|
3
|
-
import { ErrorHandling } from '../helper/enums'
|
|
3
|
+
import { ErrorHandling, NonErrorPrefix } from '../helper/enums'
|
|
4
4
|
import { startUnhandledErrorCollection } from '../tracekit'
|
|
5
5
|
|
|
6
6
|
export function trackRuntimeError(errorObservable) {
|
|
@@ -10,7 +10,7 @@ export function trackRuntimeError(errorObservable) {
|
|
|
10
10
|
stackTrace: stackTrace,
|
|
11
11
|
originalError: originalError,
|
|
12
12
|
startClocks: clocksNow(),
|
|
13
|
-
nonErrorPrefix:
|
|
13
|
+
nonErrorPrefix: NonErrorPrefix.UNCAUGHT,
|
|
14
14
|
source: ErrorSource.SOURCE,
|
|
15
15
|
handling: ErrorHandling.UNHANDLED
|
|
16
16
|
})
|
|
@@ -39,8 +39,7 @@ ContextHistory.prototype.find = function (startTime) {
|
|
|
39
39
|
if (typeof startTime === 'undefined') {
|
|
40
40
|
startTime = END_OF_TIMES
|
|
41
41
|
}
|
|
42
|
-
for (var
|
|
43
|
-
var entry = this.entries[i]
|
|
42
|
+
for (var entry of this.entries) {
|
|
44
43
|
if (entry.startTime <= startTime) {
|
|
45
44
|
if (startTime <= entry.endTime) {
|
|
46
45
|
return entry.context
|
|
@@ -48,6 +47,7 @@ ContextHistory.prototype.find = function (startTime) {
|
|
|
48
47
|
break
|
|
49
48
|
}
|
|
50
49
|
}
|
|
50
|
+
//
|
|
51
51
|
}
|
|
52
52
|
/**
|
|
53
53
|
* Helper function to close the currently active context, if any. This method assumes that entries
|
|
@@ -67,10 +67,10 @@ ContextHistory.prototype.findAll = function (startTime, duration) {
|
|
|
67
67
|
if (typeof duration === 'undefined') {
|
|
68
68
|
duration = 0
|
|
69
69
|
}
|
|
70
|
-
var endTime = addDuration(startTime, duration)
|
|
71
70
|
if (typeof startTime === 'undefined') {
|
|
72
71
|
startTime = END_OF_TIMES
|
|
73
72
|
}
|
|
73
|
+
var endTime = addDuration(startTime, duration)
|
|
74
74
|
var result = filter(this.entries, function (entry) {
|
|
75
75
|
return entry.startTime <= endTime && startTime <= entry.endTime
|
|
76
76
|
})
|