@cloudcare/browser-core 3.0.29 → 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.
Files changed (264) hide show
  1. package/cjs/browser/addEventListener.js +3 -8
  2. package/cjs/browser/addEventListener.js.map +1 -0
  3. package/cjs/browser/cookie.js +3 -14
  4. package/cjs/browser/cookie.js.map +1 -0
  5. package/cjs/browser/fetchObservable.js +4 -21
  6. package/cjs/browser/fetchObservable.js.map +1 -0
  7. package/cjs/browser/htmlDomUtils.js +3 -9
  8. package/cjs/browser/htmlDomUtils.js.map +1 -0
  9. package/cjs/browser/pageExitObservable.js +3 -9
  10. package/cjs/browser/pageExitObservable.js.map +1 -0
  11. package/cjs/browser/runOnReadyState.js +2 -4
  12. package/cjs/browser/runOnReadyState.js.map +1 -0
  13. package/cjs/browser/scroll.js +32 -0
  14. package/cjs/browser/scroll.js.map +1 -0
  15. package/cjs/browser/xhrObservable.js +2 -21
  16. package/cjs/browser/xhrObservable.js.map +1 -0
  17. package/cjs/configuration/configuration.js +9 -20
  18. package/cjs/configuration/configuration.js.map +1 -0
  19. package/cjs/configuration/transportConfiguration.js +6 -20
  20. package/cjs/configuration/transportConfiguration.js.map +1 -0
  21. package/cjs/console/consoleObservable.js +3 -21
  22. package/cjs/console/consoleObservable.js.map +1 -0
  23. package/cjs/dataMap.js +24 -10
  24. package/cjs/dataMap.js.map +1 -0
  25. package/cjs/error/trackRuntimeError.js +3 -7
  26. package/cjs/error/trackRuntimeError.js.map +1 -0
  27. package/cjs/helper/boundedBuffer.js +2 -6
  28. package/cjs/helper/boundedBuffer.js.map +1 -0
  29. package/cjs/helper/byteUtils.js +6 -16
  30. package/cjs/helper/byteUtils.js.map +1 -0
  31. package/cjs/helper/catchUserErrors.js +2 -4
  32. package/cjs/helper/catchUserErrors.js.map +1 -0
  33. package/cjs/helper/contextHistory.js +21 -37
  34. package/cjs/helper/contextHistory.js.map +1 -0
  35. package/cjs/helper/createEventRateLimiter.js +2 -10
  36. package/cjs/helper/createEventRateLimiter.js.map +1 -0
  37. package/cjs/helper/deviceInfo.js +10 -64
  38. package/cjs/helper/deviceInfo.js.map +1 -0
  39. package/cjs/helper/display.js +2 -5
  40. package/cjs/helper/display.js.map +1 -0
  41. package/cjs/helper/enums.js +8 -2
  42. package/cjs/helper/enums.js.map +1 -0
  43. package/cjs/helper/errorTools.js +32 -38
  44. package/cjs/helper/errorTools.js.map +1 -0
  45. package/cjs/helper/eventEmitter.js +2 -6
  46. package/cjs/helper/eventEmitter.js.map +1 -0
  47. package/cjs/helper/getZoneJsOriginalValue.js +2 -5
  48. package/cjs/helper/getZoneJsOriginalValue.js.map +1 -0
  49. package/cjs/helper/instrumentMethod.js +10 -22
  50. package/cjs/helper/instrumentMethod.js.map +1 -0
  51. package/cjs/helper/lifeCycle.js +2 -9
  52. package/cjs/helper/lifeCycle.js.map +1 -0
  53. package/cjs/helper/limitModification.js +4 -22
  54. package/cjs/helper/limitModification.js.map +1 -0
  55. package/cjs/helper/mobileUtil.js +2 -20
  56. package/cjs/helper/mobileUtil.js.map +1 -0
  57. package/cjs/helper/monitor.js +2 -11
  58. package/cjs/helper/monitor.js.map +1 -0
  59. package/cjs/helper/observable.js +2 -9
  60. package/cjs/helper/observable.js.map +1 -0
  61. package/cjs/helper/readBytesFromStream.js +4 -14
  62. package/cjs/helper/readBytesFromStream.js.map +1 -0
  63. package/cjs/helper/sanitize.js +38 -61
  64. package/cjs/helper/sanitize.js.map +1 -0
  65. package/cjs/helper/serialisation/contextManager.js +5 -15
  66. package/cjs/helper/serialisation/contextManager.js.map +1 -0
  67. package/cjs/helper/serialisation/heavyCustomerDataWarning.js +2 -7
  68. package/cjs/helper/serialisation/heavyCustomerDataWarning.js.map +1 -0
  69. package/cjs/helper/serialisation/jsonStringify.js +6 -12
  70. package/cjs/helper/serialisation/jsonStringify.js.map +1 -0
  71. package/cjs/helper/serialisation/rowData.js +3 -10
  72. package/cjs/helper/serialisation/rowData.js.map +1 -0
  73. package/cjs/helper/timer.js +2 -8
  74. package/cjs/helper/timer.js.map +1 -0
  75. package/cjs/helper/tools.js +57 -444
  76. package/cjs/helper/tools.js.map +1 -0
  77. package/cjs/helper/urlPolyfill.js +5 -18
  78. package/cjs/helper/urlPolyfill.js.map +1 -0
  79. package/cjs/index.js +24 -95
  80. package/cjs/index.js.map +1 -0
  81. package/cjs/init.js +14 -20
  82. package/cjs/init.js.map +1 -0
  83. package/cjs/report/reportObservable.js +5 -24
  84. package/cjs/report/reportObservable.js.map +1 -0
  85. package/cjs/session/sessionConstants.js +2 -3
  86. package/cjs/session/sessionConstants.js.map +1 -0
  87. package/cjs/session/sessionCookieStore.js +11 -46
  88. package/cjs/session/sessionCookieStore.js.map +1 -0
  89. package/cjs/session/sessionManagement.js +2 -19
  90. package/cjs/session/sessionManagement.js.map +1 -0
  91. package/cjs/session/sessionStore.js +3 -28
  92. package/cjs/session/sessionStore.js.map +1 -0
  93. package/cjs/synthetics/syntheticsWorkerValues.js +2 -6
  94. package/cjs/synthetics/syntheticsWorkerValues.js.map +1 -0
  95. package/cjs/synthetics/usr.js +2 -8
  96. package/cjs/synthetics/usr.js.map +1 -0
  97. package/cjs/telemetry/telemetry.js +125 -0
  98. package/cjs/telemetry/telemetry.js.map +1 -0
  99. package/cjs/telemetry/types.js +17 -0
  100. package/cjs/telemetry/types.js.map +1 -0
  101. package/cjs/tracekit/computeStackTrace.js +4 -34
  102. package/cjs/tracekit/computeStackTrace.js.map +1 -0
  103. package/cjs/tracekit/index.js +2 -3
  104. package/cjs/tracekit/index.js.map +1 -0
  105. package/cjs/tracekit/tracekit.js +3 -18
  106. package/cjs/tracekit/tracekit.js.map +1 -0
  107. package/cjs/transport/batch.js +5 -54
  108. package/cjs/transport/batch.js.map +1 -0
  109. package/cjs/transport/eventBridge.js +2 -7
  110. package/cjs/transport/eventBridge.js.map +1 -0
  111. package/cjs/transport/flushController.js +8 -21
  112. package/cjs/transport/flushController.js.map +1 -0
  113. package/cjs/transport/httpRequest.js +4 -18
  114. package/cjs/transport/httpRequest.js.map +1 -0
  115. package/cjs/transport/index.js +2 -6
  116. package/cjs/transport/index.js.map +1 -0
  117. package/cjs/transport/sendWithRetryStrategy.js +4 -23
  118. package/cjs/transport/sendWithRetryStrategy.js.map +1 -0
  119. package/cjs/transport/startBatchWithReplica.js +2 -7
  120. package/cjs/transport/startBatchWithReplica.js.map +1 -0
  121. package/cjs/user/index.js +2 -3
  122. package/cjs/user/index.js.map +1 -0
  123. package/cjs/user/user.js +3 -8
  124. package/cjs/user/user.js.map +1 -0
  125. package/cjs/worker.js +2 -2
  126. package/cjs/worker.js.map +1 -0
  127. package/esm/browser/addEventListener.js +3 -3
  128. package/esm/browser/addEventListener.js.map +1 -0
  129. package/esm/browser/cookie.js +3 -6
  130. package/esm/browser/cookie.js.map +1 -0
  131. package/esm/browser/fetchObservable.js +4 -14
  132. package/esm/browser/fetchObservable.js.map +1 -0
  133. package/esm/browser/htmlDomUtils.js +3 -2
  134. package/esm/browser/htmlDomUtils.js.map +1 -0
  135. package/esm/browser/pageExitObservable.js +3 -2
  136. package/esm/browser/pageExitObservable.js.map +1 -0
  137. package/esm/browser/runOnReadyState.js +2 -1
  138. package/esm/browser/runOnReadyState.js.map +1 -0
  139. package/esm/browser/scroll.js +25 -0
  140. package/esm/browser/scroll.js.map +1 -0
  141. package/esm/browser/xhrObservable.js +2 -14
  142. package/esm/browser/xhrObservable.js.map +1 -0
  143. package/esm/configuration/configuration.js +9 -9
  144. package/esm/configuration/configuration.js.map +1 -0
  145. package/esm/configuration/transportConfiguration.js +6 -17
  146. package/esm/configuration/transportConfiguration.js.map +1 -0
  147. package/esm/console/consoleObservable.js +3 -11
  148. package/esm/console/consoleObservable.js.map +1 -0
  149. package/esm/dataMap.js +24 -8
  150. package/esm/dataMap.js.map +1 -0
  151. package/esm/error/trackRuntimeError.js +4 -3
  152. package/esm/error/trackRuntimeError.js.map +1 -0
  153. package/esm/helper/boundedBuffer.js +2 -4
  154. package/esm/helper/boundedBuffer.js.map +1 -0
  155. package/esm/helper/byteUtils.js +6 -13
  156. package/esm/helper/byteUtils.js.map +1 -0
  157. package/esm/helper/catchUserErrors.js +2 -2
  158. package/esm/helper/catchUserErrors.js.map +1 -0
  159. package/esm/helper/contextHistory.js +21 -33
  160. package/esm/helper/contextHistory.js.map +1 -0
  161. package/esm/helper/createEventRateLimiter.js +2 -6
  162. package/esm/helper/createEventRateLimiter.js.map +1 -0
  163. package/esm/helper/deviceInfo.js +10 -62
  164. package/esm/helper/deviceInfo.js.map +1 -0
  165. package/esm/helper/display.js +2 -3
  166. package/esm/helper/display.js.map +1 -0
  167. package/esm/helper/enums.js +6 -1
  168. package/esm/helper/enums.js.map +1 -0
  169. package/esm/helper/errorTools.js +30 -25
  170. package/esm/helper/errorTools.js.map +1 -0
  171. package/esm/helper/eventEmitter.js +2 -5
  172. package/esm/helper/eventEmitter.js.map +1 -0
  173. package/esm/helper/getZoneJsOriginalValue.js +2 -4
  174. package/esm/helper/getZoneJsOriginalValue.js.map +1 -0
  175. package/esm/helper/instrumentMethod.js +10 -16
  176. package/esm/helper/instrumentMethod.js.map +1 -0
  177. package/esm/helper/lifeCycle.js +2 -5
  178. package/esm/helper/lifeCycle.js.map +1 -0
  179. package/esm/helper/limitModification.js +5 -20
  180. package/esm/helper/limitModification.js.map +1 -0
  181. package/esm/helper/mobileUtil.js +2 -16
  182. package/esm/helper/mobileUtil.js.map +1 -0
  183. package/esm/helper/monitor.js +2 -3
  184. package/esm/helper/monitor.js.map +1 -0
  185. package/esm/helper/observable.js +2 -7
  186. package/esm/helper/observable.js.map +1 -0
  187. package/esm/helper/readBytesFromStream.js +4 -12
  188. package/esm/helper/readBytesFromStream.js.map +1 -0
  189. package/esm/helper/sanitize.js +40 -57
  190. package/esm/helper/sanitize.js.map +1 -0
  191. package/esm/helper/serialisation/contextManager.js +5 -9
  192. package/esm/helper/serialisation/contextManager.js.map +1 -0
  193. package/esm/helper/serialisation/heavyCustomerDataWarning.js +5 -4
  194. package/esm/helper/serialisation/heavyCustomerDataWarning.js.map +1 -0
  195. package/esm/helper/serialisation/jsonStringify.js +7 -10
  196. package/esm/helper/serialisation/jsonStringify.js.map +1 -0
  197. package/esm/helper/serialisation/rowData.js +3 -4
  198. package/esm/helper/serialisation/rowData.js.map +1 -0
  199. package/esm/helper/timer.js +2 -1
  200. package/esm/helper/timer.js.map +1 -0
  201. package/esm/helper/tools.js +57 -256
  202. package/esm/helper/tools.js.map +1 -0
  203. package/esm/helper/urlPolyfill.js +5 -9
  204. package/esm/helper/urlPolyfill.js.map +1 -0
  205. package/esm/index.js +4 -1
  206. package/esm/index.js.map +1 -0
  207. package/esm/init.js +14 -14
  208. package/esm/init.js.map +1 -0
  209. package/esm/report/reportObservable.js +5 -16
  210. package/esm/report/reportObservable.js.map +1 -0
  211. package/esm/session/sessionConstants.js +2 -1
  212. package/esm/session/sessionConstants.js.map +1 -0
  213. package/esm/session/sessionCookieStore.js +11 -38
  214. package/esm/session/sessionCookieStore.js.map +1 -0
  215. package/esm/session/sessionManagement.js +2 -8
  216. package/esm/session/sessionManagement.js.map +1 -0
  217. package/esm/session/sessionStore.js +4 -22
  218. package/esm/session/sessionStore.js.map +1 -0
  219. package/esm/synthetics/syntheticsWorkerValues.js +2 -1
  220. package/esm/synthetics/syntheticsWorkerValues.js.map +1 -0
  221. package/esm/synthetics/usr.js +2 -3
  222. package/esm/synthetics/usr.js.map +1 -0
  223. package/esm/telemetry/telemetry.js +111 -0
  224. package/esm/telemetry/telemetry.js.map +1 -0
  225. package/esm/telemetry/types.js +9 -0
  226. package/esm/telemetry/types.js.map +1 -0
  227. package/esm/tracekit/computeStackTrace.js +4 -31
  228. package/esm/tracekit/computeStackTrace.js.map +1 -0
  229. package/esm/tracekit/index.js +2 -1
  230. package/esm/tracekit/index.js.map +1 -0
  231. package/esm/tracekit/tracekit.js +5 -14
  232. package/esm/tracekit/tracekit.js.map +1 -0
  233. package/esm/transport/batch.js +7 -45
  234. package/esm/transport/batch.js.map +1 -0
  235. package/esm/transport/eventBridge.js +2 -5
  236. package/esm/transport/eventBridge.js.map +1 -0
  237. package/esm/transport/flushController.js +11 -20
  238. package/esm/transport/flushController.js.map +1 -0
  239. package/esm/transport/httpRequest.js +4 -15
  240. package/esm/transport/httpRequest.js.map +1 -0
  241. package/esm/transport/index.js +2 -1
  242. package/esm/transport/index.js.map +1 -0
  243. package/esm/transport/sendWithRetryStrategy.js +4 -17
  244. package/esm/transport/sendWithRetryStrategy.js.map +1 -0
  245. package/esm/transport/startBatchWithReplica.js +2 -3
  246. package/esm/transport/startBatchWithReplica.js.map +1 -0
  247. package/esm/user/index.js.map +1 -0
  248. package/esm/user/user.js +4 -5
  249. package/esm/user/user.js.map +1 -0
  250. package/esm/worker.js.map +1 -0
  251. package/package.json +2 -2
  252. package/src/browser/scroll.js +25 -0
  253. package/src/configuration/configuration.js +16 -0
  254. package/src/configuration/transportConfiguration.js +2 -2
  255. package/src/dataMap.js +17 -3
  256. package/src/error/trackRuntimeError.js +2 -2
  257. package/src/helper/contextHistory.js +3 -3
  258. package/src/helper/enums.js +4 -0
  259. package/src/helper/errorTools.js +49 -19
  260. package/src/helper/tools.js +1 -0
  261. package/src/index.js +3 -0
  262. package/src/report/reportObservable.js +3 -3
  263. package/src/telemetry/telemetry.js +164 -0
  264. package/src/telemetry/types.js +9 -0
@@ -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) {// reportBeaconError(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":"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"}
@@ -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(); // if (state.lastFailureStatus !== 0) {
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.29",
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": "104fa066dfa70d87d54c3002bc6651c64d168478"
23
+ "gitHead": "6863a7abc368adb01df9a2de5efbed111db1e286"
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
- datakitUrl: getEndPointUrl(
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.datakitUrl]
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
- view_in_foreground: 'view.in_foreground'
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
- in_foreground_periods: 'view.in_foreground_periods',
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: 'Uncaught',
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 i = 0; i < this.entries.length; i++) {
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
  })
@@ -86,3 +86,7 @@ export var ErrorHandling = {
86
86
  HANDLED: 'handled',
87
87
  UNHANDLED: 'unhandled'
88
88
  }
89
+ export var NonErrorPrefix = {
90
+ UNCAUGHT: 'Uncaught',
91
+ PROVIDED: 'Provided'
92
+ }
@@ -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
- if (
23
- !stackTrace ||
24
- (stackTrace.message === undefined && !(originalError instanceof Error))
25
- ) {
26
- return {
27
- startClocks: startClocks,
28
- source: source,
29
- handling: handling,
30
- originalError: originalError,
31
- message: nonErrorPrefix + ' ' + jsonStringify(originalError),
32
- stack: 'No stack, consider using an instance of Error',
33
- handlingStack: handlingStack,
34
- type: stackTrace && stackTrace.name
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: stackTrace.message || 'Empty message',
44
- stack: toStackTraceString(stackTrace),
44
+ message: message,
45
+ stack: stack,
45
46
  handlingStack: handlingStack,
46
- type: stackTrace.name,
47
- causes: flattenErrorCauses(originalError, source)
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,
@@ -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'