@cloudcare/browser-core 3.0.29 → 3.1.1
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 +3 -8
- 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 +4 -21
- 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 +3 -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 +32 -38
- 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 +10 -22
- 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 +2 -11
- 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 +4 -14
- 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 +2 -8
- package/cjs/helper/timer.js.map +1 -0
- package/cjs/helper/tools.js +57 -444
- 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 +24 -95
- package/cjs/index.js.map +1 -0
- package/cjs/init.js +14 -20
- package/cjs/init.js.map +1 -0
- package/cjs/report/reportObservable.js +5 -24
- 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 +5 -54
- 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 +4 -18
- 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 +3 -27
- 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 +3 -3
- 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 +4 -14
- 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 +3 -11
- 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 +30 -25
- 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 +10 -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 +2 -3
- 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 +4 -12
- 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 +2 -1
- package/esm/helper/timer.js.map +1 -0
- package/esm/helper/tools.js +57 -256
- 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 +4 -1
- package/esm/index.js.map +1 -0
- package/esm/init.js +14 -14
- package/esm/init.js.map +1 -0
- package/esm/report/reportObservable.js +5 -16
- 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 +7 -45
- 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 +4 -15
- 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 +3 -21
- 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/scroll.js +25 -0
- package/src/configuration/configuration.js +16 -0
- package/src/configuration/transportConfiguration.js +2 -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 +49 -19
- package/src/helper/tools.js +1 -0
- package/src/index.js +3 -0
- package/src/report/reportObservable.js +3 -3
- package/src/telemetry/telemetry.js +165 -0
- package/src/telemetry/types.js +9 -0
- package/src/transport/sendWithRetryStrategy.js +1 -5
|
@@ -9,24 +9,19 @@ import { monitor } from '../helper/monitor';
|
|
|
9
9
|
* multiple elements are sent separated by \n in order
|
|
10
10
|
* to be parsed correctly without content type header
|
|
11
11
|
*/
|
|
12
|
-
|
|
13
12
|
function addBatchPrecision(url) {
|
|
14
13
|
if (!url) return url;
|
|
15
14
|
return url + (url.indexOf('?') === -1 ? '?' : '&') + 'precision=ms';
|
|
16
15
|
}
|
|
17
|
-
|
|
18
16
|
export function createHttpRequest(endpointUrl, bytesLimit, reportError) {
|
|
19
17
|
var retryState = newRetryState();
|
|
20
|
-
|
|
21
18
|
var sendStrategyForRetry = function sendStrategyForRetry(payload, onResponse) {
|
|
22
19
|
return fetchKeepAliveStrategy(endpointUrl, bytesLimit, payload, onResponse);
|
|
23
20
|
};
|
|
24
|
-
|
|
25
21
|
return {
|
|
26
22
|
send: function send(payload) {
|
|
27
23
|
sendWithRetryStrategy(payload, retryState, sendStrategyForRetry, endpointUrl, reportError);
|
|
28
24
|
},
|
|
29
|
-
|
|
30
25
|
/**
|
|
31
26
|
* Since fetch keepalive behaves like regular fetch on Firefox,
|
|
32
27
|
* keep using sendBeaconStrategy on exit
|
|
@@ -36,33 +31,28 @@ export function createHttpRequest(endpointUrl, bytesLimit, reportError) {
|
|
|
36
31
|
}
|
|
37
32
|
};
|
|
38
33
|
}
|
|
39
|
-
|
|
40
34
|
function sendBeaconStrategy(endpointUrl, bytesLimit, payload) {
|
|
41
35
|
var data = payload.data;
|
|
42
36
|
var bytesCount = payload.bytesCount;
|
|
43
37
|
var url = addBatchPrecision(endpointUrl);
|
|
44
38
|
var canUseBeacon = !!navigator.sendBeacon && bytesCount < bytesLimit;
|
|
45
|
-
|
|
46
39
|
if (canUseBeacon) {
|
|
47
40
|
try {
|
|
48
41
|
var isQueued = navigator.sendBeacon(url, data);
|
|
49
|
-
|
|
50
42
|
if (isQueued) {
|
|
51
43
|
return;
|
|
52
44
|
}
|
|
53
|
-
} catch (e) {
|
|
45
|
+
} catch (e) {
|
|
46
|
+
// reportBeaconError(e)
|
|
54
47
|
}
|
|
55
48
|
}
|
|
56
|
-
|
|
57
49
|
sendXHR(url, data);
|
|
58
50
|
}
|
|
59
|
-
|
|
60
51
|
export function fetchKeepAliveStrategy(endpointUrl, bytesLimit, payload, onResponse) {
|
|
61
52
|
var data = payload.data;
|
|
62
53
|
var bytesCount = payload.bytesCount;
|
|
63
54
|
var url = addBatchPrecision(endpointUrl);
|
|
64
55
|
var canUseKeepAlive = isKeepAliveSupported() && bytesCount < bytesLimit;
|
|
65
|
-
|
|
66
56
|
if (canUseKeepAlive) {
|
|
67
57
|
fetch(url, {
|
|
68
58
|
method: 'POST',
|
|
@@ -84,7 +74,6 @@ export function fetchKeepAliveStrategy(endpointUrl, bytesLimit, payload, onRespo
|
|
|
84
74
|
sendXHR(url, data, onResponse);
|
|
85
75
|
}
|
|
86
76
|
}
|
|
87
|
-
|
|
88
77
|
function isKeepAliveSupported() {
|
|
89
78
|
// Request can throw, cf https://developer.mozilla.org/en-US/docs/Web/API/Request/Request#errors
|
|
90
79
|
try {
|
|
@@ -93,7 +82,6 @@ function isKeepAliveSupported() {
|
|
|
93
82
|
return false;
|
|
94
83
|
}
|
|
95
84
|
}
|
|
96
|
-
|
|
97
85
|
function sendXHR(url, data, onResponse) {
|
|
98
86
|
var request = new XMLHttpRequest();
|
|
99
87
|
request.open('POST', url, true);
|
|
@@ -107,4 +95,5 @@ function sendXHR(url, data, onResponse) {
|
|
|
107
95
|
once: true
|
|
108
96
|
});
|
|
109
97
|
request.send(data);
|
|
110
|
-
}
|
|
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":"AAAA,SAASA,aAAa,EAAEC,qBAAqB,QAAQ,yBAAyB;AAC9E,SAASC,gBAAgB,QAAQ,6BAA6B;AAC9D,SAASC,OAAO,QAAQ,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASC,iBAAiBA,CAACC,GAAG,EAAE;EAC9B,IAAI,CAACA,GAAG,EAAE,OAAOA,GAAG;EACpB,OAAOA,GAAG,IAAIA,GAAG,CAACC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,cAAc;AACrE;AACA,OAAO,SAASC,iBAAiBA,CAACC,WAAW,EAAEC,UAAU,EAAEC,WAAW,EAAE;EACtE,IAAIC,UAAU,GAAGX,aAAa,CAAC,CAAC;EAChC,IAAIY,oBAAoB,GAAG,SAAvBA,oBAAoBA,CAAaC,OAAO,EAAEC,UAAU,EAAE;IACxD,OAAOC,sBAAsB,CAACP,WAAW,EAAEC,UAAU,EAAEI,OAAO,EAAEC,UAAU,CAAC;EAC7E,CAAC;EAED,OAAO;IACLE,IAAI,EAAE,SAAAA,KAAUH,OAAO,EAAE;MACvBZ,qBAAqB,CACnBY,OAAO,EACPF,UAAU,EACVC,oBAAoB,EACpBJ,WAAW,EACXE,WACF,CAAC;IACH,CAAC;IACD;AACJ;AACA;AACA;IACIO,UAAU,EAAE,SAAAA,WAAUJ,OAAO,EAAE;MAC7BK,kBAAkB,CAACV,WAAW,EAAEC,UAAU,EAAEI,OAAO,CAAC;IACtD;EACF,CAAC;AACH;AAEA,SAASK,kBAAkBA,CAACV,WAAW,EAAEC,UAAU,EAAEI,OAAO,EAAE;EAC5D,IAAIM,IAAI,GAAGN,OAAO,CAACM,IAAI;EACvB,IAAIC,UAAU,GAAGP,OAAO,CAACO,UAAU;EACnC,IAAIf,GAAG,GAAGD,iBAAiB,CAACI,WAAW,CAAC;EACxC,IAAIa,YAAY,GAAG,CAAC,CAACC,SAAS,CAACC,UAAU,IAAIH,UAAU,GAAGX,UAAU;EACpE,IAAIY,YAAY,EAAE;IAChB,IAAI;MACF,IAAIG,QAAQ,GAAGF,SAAS,CAACC,UAAU,CAAClB,GAAG,EAAEc,IAAI,CAAC;MAE9C,IAAIK,QAAQ,EAAE;QACZ;MACF;IACF,CAAC,CAAC,OAAOC,CAAC,EAAE;MACV;IAAA;EAEJ;EACAC,OAAO,CAACrB,GAAG,EAAEc,IAAI,CAAC;AACpB;AAEA,OAAO,SAASJ,sBAAsBA,CACpCP,WAAW,EACXC,UAAU,EACVI,OAAO,EACPC,UAAU,EACV;EACA,IAAIK,IAAI,GAAGN,OAAO,CAACM,IAAI;EACvB,IAAIC,UAAU,GAAGP,OAAO,CAACO,UAAU;EACnC,IAAIf,GAAG,GAAGD,iBAAiB,CAACI,WAAW,CAAC;EACxC,IAAImB,eAAe,GAAGC,oBAAoB,CAAC,CAAC,IAAIR,UAAU,GAAGX,UAAU;EACvE,IAAIkB,eAAe,EAAE;IACnBE,KAAK,CAACxB,GAAG,EAAE;MACTyB,MAAM,EAAE,MAAM;MACdC,IAAI,EAAEZ,IAAI;MACVa,SAAS,EAAE,IAAI;MACfC,IAAI,EAAE;IACR,CAAC,CAAC,CAACC,IAAI,CACL/B,OAAO,CAAC,UAAUgC,QAAQ,EAAE;MAC1B,IAAI,OAAOrB,UAAU,KAAK,UAAU,EAAE;QACpCA,UAAU,CAAC;UAAEsB,MAAM,EAAED,QAAQ,CAACC,MAAM;UAAEC,IAAI,EAAEF,QAAQ,CAACE;QAAK,CAAC,CAAC;MAC9D;IACF,CAAC,CAAC,EACFlC,OAAO,CAAC,YAAY;MAClB;MACAuB,OAAO,CAACrB,GAAG,EAAEc,IAAI,EAAEL,UAAU,CAAC;IAChC,CAAC,CACH,CAAC;EACH,CAAC,MAAM;IACLY,OAAO,CAACrB,GAAG,EAAEc,IAAI,EAAEL,UAAU,CAAC;EAChC;AACF;AAEA,SAASc,oBAAoBA,CAAA,EAAG;EAC9B;EACA,IAAI;IACF,OAAOU,MAAM,CAACC,OAAO,IAAI,WAAW,IAAI,IAAIA,OAAO,CAAC,UAAU,CAAC;EACjE,CAAC,CAAC,OAAAC,OAAA,EAAM;IACN,OAAO,KAAK;EACd;AACF;AAEA,SAASd,OAAOA,CAACrB,GAAG,EAAEc,IAAI,EAAEL,UAAU,EAAE;EACtC,IAAM2B,OAAO,GAAG,IAAIC,cAAc,CAAC,CAAC;EACpCD,OAAO,CAACE,IAAI,CAAC,MAAM,EAAEtC,GAAG,EAAE,IAAI,CAAC;EAC/BH,gBAAgB,CACduC,OAAO,EACP,SAAS,EACT,YAAY;IACV,IAAI,OAAO3B,UAAU,KAAK,UAAU,EAAE;MACpCA,UAAU,CAAC;QAAEsB,MAAM,EAAEK,OAAO,CAACL;MAAO,CAAC,CAAC;IACxC;EACF,CAAC,EACD;IACEQ,IAAI,EAAE;EACR,CACF,CAAC;EACDH,OAAO,CAACzB,IAAI,CAACG,IAAI,CAAC;AACpB"}
|
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,15 @@ 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();
|
|
45
|
-
// addTelemetryDebug('resuming after transport down', {
|
|
46
|
-
// failureStatus: state.lastFailureStatus,
|
|
47
|
-
// })
|
|
48
|
-
// }
|
|
49
|
-
|
|
42
|
+
state.queuedPayloads.dequeue();
|
|
50
43
|
state.currentBackoffTime = INITIAL_BACKOFF_TIME;
|
|
51
44
|
retryQueuedPayloads(RetryReason.AFTER_RESUME, state, sendStrategy, endpointUrl, reportError);
|
|
52
45
|
},
|
|
@@ -57,14 +50,12 @@ function scheduleRetry(state, sendStrategy, endpointUrl, reportError) {
|
|
|
57
50
|
});
|
|
58
51
|
}, state.currentBackoffTime);
|
|
59
52
|
}
|
|
60
|
-
|
|
61
53
|
function send(payload, state, sendStrategy, responseData) {
|
|
62
54
|
var onSuccess = responseData.onSuccess;
|
|
63
55
|
var onFailure = responseData.onFailure;
|
|
64
56
|
state.bandwidthMonitor.add(payload);
|
|
65
57
|
sendStrategy(payload, function (response) {
|
|
66
58
|
state.bandwidthMonitor.remove(payload);
|
|
67
|
-
|
|
68
59
|
if (!shouldRetryRequest(response)) {
|
|
69
60
|
state.transportStatus = TransportStatus.UP;
|
|
70
61
|
onSuccess();
|
|
@@ -76,7 +67,6 @@ function send(payload, state, sendStrategy, responseData) {
|
|
|
76
67
|
}
|
|
77
68
|
});
|
|
78
69
|
}
|
|
79
|
-
|
|
80
70
|
function retryQueuedPayloads(reason, state, sendStrategy, endpointUrl, reportError) {
|
|
81
71
|
if (reason === RetryReason.AFTER_SUCCESS && state.queuedPayloads.isFull() && !state.queueFullReported) {
|
|
82
72
|
reportError({
|
|
@@ -86,19 +76,15 @@ function retryQueuedPayloads(reason, state, sendStrategy, endpointUrl, reportErr
|
|
|
86
76
|
});
|
|
87
77
|
state.queueFullReported = true;
|
|
88
78
|
}
|
|
89
|
-
|
|
90
79
|
var previousQueue = state.queuedPayloads;
|
|
91
80
|
state.queuedPayloads = newPayloadQueue();
|
|
92
|
-
|
|
93
81
|
while (previousQueue.size() > 0) {
|
|
94
82
|
sendWithRetryStrategy(previousQueue.dequeue(), state, sendStrategy, endpointUrl, reportError);
|
|
95
83
|
}
|
|
96
84
|
}
|
|
97
|
-
|
|
98
85
|
function shouldRetryRequest(response) {
|
|
99
86
|
return response.type !== 'opaque' && (response.status === 0 && !navigator.onLine || response.status === 408 || response.status === 429 || response.status >= 500);
|
|
100
87
|
}
|
|
101
|
-
|
|
102
88
|
export function newRetryState() {
|
|
103
89
|
return {
|
|
104
90
|
transportStatus: TransportStatus.UP,
|
|
@@ -109,7 +95,6 @@ export function newRetryState() {
|
|
|
109
95
|
queueFullReported: false
|
|
110
96
|
};
|
|
111
97
|
}
|
|
112
|
-
|
|
113
98
|
function newPayloadQueue() {
|
|
114
99
|
var queue = [];
|
|
115
100
|
return {
|
|
@@ -118,7 +103,6 @@ function newPayloadQueue() {
|
|
|
118
103
|
if (this.isFull()) {
|
|
119
104
|
return;
|
|
120
105
|
}
|
|
121
|
-
|
|
122
106
|
queue.push(payload);
|
|
123
107
|
this.bytesCount += payload.bytesCount;
|
|
124
108
|
},
|
|
@@ -127,11 +111,9 @@ function newPayloadQueue() {
|
|
|
127
111
|
},
|
|
128
112
|
dequeue: function dequeue() {
|
|
129
113
|
var payload = queue.shift();
|
|
130
|
-
|
|
131
114
|
if (payload) {
|
|
132
115
|
this.bytesCount -= payload.bytesCount;
|
|
133
116
|
}
|
|
134
|
-
|
|
135
117
|
return payload;
|
|
136
118
|
},
|
|
137
119
|
size: function size() {
|
|
@@ -142,7 +124,6 @@ function newPayloadQueue() {
|
|
|
142
124
|
}
|
|
143
125
|
};
|
|
144
126
|
}
|
|
145
|
-
|
|
146
127
|
function newBandwidthMonitor() {
|
|
147
128
|
return {
|
|
148
129
|
ongoingRequestCount: 0,
|
|
@@ -159,4 +140,5 @@ function newBandwidthMonitor() {
|
|
|
159
140
|
this.ongoingByteCount -= payload.bytesCount;
|
|
160
141
|
}
|
|
161
142
|
};
|
|
162
|
-
}
|
|
143
|
+
}
|
|
144
|
+
//# 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\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.
|
|
3
|
+
"version": "3.1.1",
|
|
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": "7216e7579806f7c9992938c41c7e383aebc9e045"
|
|
24
24
|
}
|
|
@@ -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
|
}
|
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
|
})
|
package/src/helper/enums.js
CHANGED
package/src/helper/errorTools.js
CHANGED
|
@@ -2,6 +2,8 @@ import { each, noop } from './tools'
|
|
|
2
2
|
import { jsonStringify } from '../helper/serialisation/jsonStringify'
|
|
3
3
|
import { computeStackTrace } from '../tracekit'
|
|
4
4
|
import { callMonitored } from '../helper/monitor'
|
|
5
|
+
export var NO_ERROR_STACK_PRESENT_MESSAGE =
|
|
6
|
+
'No stack, consider using an instance of Error'
|
|
5
7
|
export var ErrorSource = {
|
|
6
8
|
AGENT: 'agent',
|
|
7
9
|
CONSOLE: 'console',
|
|
@@ -19,34 +21,62 @@ export function computeRawError(data) {
|
|
|
19
21
|
var nonErrorPrefix = data.nonErrorPrefix
|
|
20
22
|
var source = data.source
|
|
21
23
|
var handling = data.handling
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
}
|
|
24
|
+
var isErrorInstance = originalError instanceof Error
|
|
25
|
+
var message = computeMessage(
|
|
26
|
+
stackTrace,
|
|
27
|
+
isErrorInstance,
|
|
28
|
+
nonErrorPrefix,
|
|
29
|
+
originalError
|
|
30
|
+
)
|
|
31
|
+
var stack = hasUsableStack(isErrorInstance, stackTrace)
|
|
32
|
+
? toStackTraceString(stackTrace)
|
|
33
|
+
: NO_ERROR_STACK_PRESENT_MESSAGE
|
|
34
|
+
var causes = isErrorInstance
|
|
35
|
+
? flattenErrorCauses(originalError, source)
|
|
36
|
+
: undefined
|
|
37
|
+
var type = stackTrace && stackTrace.name
|
|
37
38
|
|
|
38
39
|
return {
|
|
39
40
|
startClocks: startClocks,
|
|
40
41
|
source: source,
|
|
41
42
|
handling: handling,
|
|
42
43
|
originalError: originalError,
|
|
43
|
-
message:
|
|
44
|
-
stack:
|
|
44
|
+
message: message,
|
|
45
|
+
stack: stack,
|
|
45
46
|
handlingStack: handlingStack,
|
|
46
|
-
type:
|
|
47
|
-
causes:
|
|
47
|
+
type: type,
|
|
48
|
+
causes: causes
|
|
48
49
|
}
|
|
49
50
|
}
|
|
51
|
+
function computeMessage(
|
|
52
|
+
stackTrace,
|
|
53
|
+
isErrorInstance,
|
|
54
|
+
nonErrorPrefix,
|
|
55
|
+
originalError
|
|
56
|
+
) {
|
|
57
|
+
// Favor stackTrace message only if tracekit has really been able to extract something meaningful (message + name)
|
|
58
|
+
// TODO rework tracekit integration to avoid scattering error building logic
|
|
59
|
+
return stackTrace && stackTrace.message && stackTrace && stackTrace.name
|
|
60
|
+
? stackTrace.message
|
|
61
|
+
: !isErrorInstance
|
|
62
|
+
? nonErrorPrefix + ' ' + jsonStringify(sanitize(originalError))
|
|
63
|
+
: 'Empty message'
|
|
64
|
+
}
|
|
65
|
+
function hasUsableStack(isErrorInstance, stackTrace) {
|
|
66
|
+
if (stackTrace === undefined) {
|
|
67
|
+
return false
|
|
68
|
+
}
|
|
69
|
+
if (isErrorInstance) {
|
|
70
|
+
return true
|
|
71
|
+
}
|
|
72
|
+
// handle cases where tracekit return stack = [] or stack = [{url: undefined, line: undefined, column: undefined}]
|
|
73
|
+
// TODO rework tracekit integration to avoid generating those unusable stack
|
|
74
|
+
return (
|
|
75
|
+
stackTrace.stack.length > 0 &&
|
|
76
|
+
(stackTrace.stack.length > 1 || stackTrace.stack[0].url !== undefined)
|
|
77
|
+
)
|
|
78
|
+
}
|
|
79
|
+
|
|
50
80
|
export function formatUnknownError(
|
|
51
81
|
stackTrace,
|
|
52
82
|
errorObject,
|
package/src/helper/tools.js
CHANGED
|
@@ -1673,6 +1673,7 @@ export function tryToClone(response) {
|
|
|
1673
1673
|
}
|
|
1674
1674
|
export function isHashAnAnchor(hash) {
|
|
1675
1675
|
var correspondingId = hash.substr(1)
|
|
1676
|
+
if (!correspondingId) return false
|
|
1676
1677
|
return !!document.getElementById(correspondingId)
|
|
1677
1678
|
}
|
|
1678
1679
|
export function getPathFromHash(hash) {
|
package/src/index.js
CHANGED
|
@@ -32,6 +32,7 @@ export * from './browser/pageExitObservable'
|
|
|
32
32
|
export * from './browser/htmlDomUtils'
|
|
33
33
|
export * from './browser/addEventListener'
|
|
34
34
|
export * from './browser/runOnReadyState'
|
|
35
|
+
export * from './browser/scroll'
|
|
35
36
|
|
|
36
37
|
export * from './dataMap'
|
|
37
38
|
export * from './init'
|
|
@@ -47,3 +48,5 @@ export * from './helper/serialisation/heavyCustomerDataWarning'
|
|
|
47
48
|
export * from './helper/serialisation/jsonStringify'
|
|
48
49
|
export * from './helper/serialisation/rowData'
|
|
49
50
|
export * from './user'
|
|
51
|
+
|
|
52
|
+
export * from './telemetry/telemetry'
|