@cloudcare/browser-core 3.0.23 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (275) hide show
  1. package/cjs/browser/addEventListener.js +11 -14
  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 +8 -23
  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 +7 -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 +38 -40
  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 +11 -21
  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 +50 -0
  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 +8 -16
  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 +5 -9
  74. package/cjs/helper/timer.js.map +1 -0
  75. package/cjs/helper/tools.js +58 -463
  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 +35 -93
  80. package/cjs/index.js.map +1 -0
  81. package/cjs/init.js +24 -36
  82. package/cjs/init.js.map +1 -0
  83. package/cjs/report/reportObservable.js +8 -26
  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 +7 -56
  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 +8 -20
  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 +11 -10
  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 +8 -17
  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 +7 -12
  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 +36 -28
  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 +11 -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 +39 -0
  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 +8 -15
  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 +5 -3
  200. package/esm/helper/timer.js.map +1 -0
  201. package/esm/helper/tools.js +58 -273
  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 +5 -1
  206. package/esm/index.js.map +1 -0
  207. package/esm/init.js +25 -31
  208. package/esm/init.js.map +1 -0
  209. package/esm/report/reportObservable.js +8 -19
  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 +9 -47
  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 +8 -18
  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/addEventListener.js +8 -7
  253. package/src/browser/fetchObservable.js +12 -3
  254. package/src/browser/scroll.js +25 -0
  255. package/src/configuration/configuration.js +16 -0
  256. package/src/configuration/transportConfiguration.js +2 -2
  257. package/src/console/consoleObservable.js +4 -2
  258. package/src/dataMap.js +17 -3
  259. package/src/error/trackRuntimeError.js +2 -2
  260. package/src/helper/contextHistory.js +3 -3
  261. package/src/helper/enums.js +4 -0
  262. package/src/helper/errorTools.js +55 -24
  263. package/src/helper/instrumentMethod.js +5 -2
  264. package/src/helper/monitor.js +44 -0
  265. package/src/helper/observable.js +10 -8
  266. package/src/helper/readBytesFromStream.js +5 -5
  267. package/src/helper/timer.js +3 -3
  268. package/src/helper/tools.js +2 -17
  269. package/src/index.js +4 -0
  270. package/src/init.js +19 -21
  271. package/src/report/reportObservable.js +6 -5
  272. package/src/telemetry/telemetry.js +164 -0
  273. package/src/telemetry/types.js +9 -0
  274. package/src/transport/batch.js +4 -4
  275. package/src/transport/httpRequest.js +5 -4
@@ -1,5 +1,6 @@
1
1
  import { newRetryState, sendWithRetryStrategy } from './sendWithRetryStrategy';
2
2
  import { addEventListener } from '../browser/addEventListener';
3
+ import { monitor } from '../helper/monitor';
3
4
  /**
4
5
  * Use POST request without content type to:
5
6
  * - avoid CORS preflight requests
@@ -8,24 +9,19 @@ import { addEventListener } from '../browser/addEventListener';
8
9
  * multiple elements are sent separated by \n in order
9
10
  * to be parsed correctly without content type header
10
11
  */
11
-
12
12
  function addBatchPrecision(url) {
13
13
  if (!url) return url;
14
14
  return url + (url.indexOf('?') === -1 ? '?' : '&') + 'precision=ms';
15
15
  }
16
-
17
16
  export function createHttpRequest(endpointUrl, bytesLimit, reportError) {
18
17
  var retryState = newRetryState();
19
-
20
18
  var sendStrategyForRetry = function sendStrategyForRetry(payload, onResponse) {
21
19
  return fetchKeepAliveStrategy(endpointUrl, bytesLimit, payload, onResponse);
22
20
  };
23
-
24
21
  return {
25
22
  send: function send(payload) {
26
23
  sendWithRetryStrategy(payload, retryState, sendStrategyForRetry, endpointUrl, reportError);
27
24
  },
28
-
29
25
  /**
30
26
  * Since fetch keepalive behaves like regular fetch on Firefox,
31
27
  * keep using sendBeaconStrategy on exit
@@ -35,55 +31,49 @@ export function createHttpRequest(endpointUrl, bytesLimit, reportError) {
35
31
  }
36
32
  };
37
33
  }
38
-
39
34
  function sendBeaconStrategy(endpointUrl, bytesLimit, payload) {
40
35
  var data = payload.data;
41
36
  var bytesCount = payload.bytesCount;
42
37
  var url = addBatchPrecision(endpointUrl);
43
38
  var canUseBeacon = !!navigator.sendBeacon && bytesCount < bytesLimit;
44
-
45
39
  if (canUseBeacon) {
46
40
  try {
47
41
  var isQueued = navigator.sendBeacon(url, data);
48
-
49
42
  if (isQueued) {
50
43
  return;
51
44
  }
52
- } catch (e) {// reportBeaconError(e)
45
+ } catch (e) {
46
+ // reportBeaconError(e)
53
47
  }
54
48
  }
55
-
56
49
  sendXHR(url, data);
57
50
  }
58
-
59
51
  export function fetchKeepAliveStrategy(endpointUrl, bytesLimit, payload, onResponse) {
60
52
  var data = payload.data;
61
53
  var bytesCount = payload.bytesCount;
62
54
  var url = addBatchPrecision(endpointUrl);
63
55
  var canUseKeepAlive = isKeepAliveSupported() && bytesCount < bytesLimit;
64
-
65
56
  if (canUseKeepAlive) {
66
57
  fetch(url, {
67
58
  method: 'POST',
68
59
  body: data,
69
60
  keepalive: true,
70
61
  mode: 'cors'
71
- }).then(function (response) {
62
+ }).then(monitor(function (response) {
72
63
  if (typeof onResponse === 'function') {
73
64
  onResponse({
74
65
  status: response.status,
75
66
  type: response.type
76
67
  });
77
68
  }
78
- }, function () {
69
+ }), monitor(function () {
79
70
  // failed to queue the request
80
71
  sendXHR(url, data, onResponse);
81
- });
72
+ }));
82
73
  } else {
83
74
  sendXHR(url, data, onResponse);
84
75
  }
85
76
  }
86
-
87
77
  function isKeepAliveSupported() {
88
78
  // Request can throw, cf https://developer.mozilla.org/en-US/docs/Web/API/Request/Request#errors
89
79
  try {
@@ -92,7 +82,6 @@ function isKeepAliveSupported() {
92
82
  return false;
93
83
  }
94
84
  }
95
-
96
85
  function sendXHR(url, data, onResponse) {
97
86
  var request = new XMLHttpRequest();
98
87
  request.open('POST', url, true);
@@ -106,4 +95,5 @@ function sendXHR(url, data, onResponse) {
106
95
  once: true
107
96
  });
108
97
  request.send(data);
109
- }
98
+ }
99
+ //# sourceMappingURL=httpRequest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"httpRequest.js","names":["newRetryState","sendWithRetryStrategy","addEventListener","monitor","addBatchPrecision","url","indexOf","createHttpRequest","endpointUrl","bytesLimit","reportError","retryState","sendStrategyForRetry","payload","onResponse","fetchKeepAliveStrategy","send","sendOnExit","sendBeaconStrategy","data","bytesCount","canUseBeacon","navigator","sendBeacon","isQueued","e","sendXHR","canUseKeepAlive","isKeepAliveSupported","fetch","method","body","keepalive","mode","then","response","status","type","window","Request","_unused","request","XMLHttpRequest","open","once"],"sources":["../../src/transport/httpRequest.js"],"sourcesContent":["import { newRetryState, sendWithRetryStrategy } from './sendWithRetryStrategy'\nimport { addEventListener } from '../browser/addEventListener'\nimport { monitor } from '../helper/monitor'\n/**\n * Use POST request without content type to:\n * - avoid CORS preflight requests\n * - allow usage of sendBeacon\n *\n * multiple elements are sent separated by \\n in order\n * to be parsed correctly without content type header\n */\nfunction addBatchPrecision(url) {\n if (!url) return url\n return url + (url.indexOf('?') === -1 ? '?' : '&') + 'precision=ms'\n}\nexport function createHttpRequest(endpointUrl, bytesLimit, reportError) {\n var retryState = newRetryState()\n var sendStrategyForRetry = function (payload, onResponse) {\n return fetchKeepAliveStrategy(endpointUrl, bytesLimit, payload, onResponse)\n }\n\n return {\n send: function (payload) {\n sendWithRetryStrategy(\n payload,\n retryState,\n sendStrategyForRetry,\n endpointUrl,\n reportError\n )\n },\n /**\n * Since fetch keepalive behaves like regular fetch on Firefox,\n * keep using sendBeaconStrategy on exit\n */\n sendOnExit: function (payload) {\n sendBeaconStrategy(endpointUrl, bytesLimit, payload)\n }\n }\n}\n\nfunction sendBeaconStrategy(endpointUrl, bytesLimit, payload) {\n var data = payload.data\n var bytesCount = payload.bytesCount\n var url = addBatchPrecision(endpointUrl)\n var canUseBeacon = !!navigator.sendBeacon && bytesCount < bytesLimit\n if (canUseBeacon) {\n try {\n var isQueued = navigator.sendBeacon(url, data)\n\n if (isQueued) {\n return\n }\n } catch (e) {\n // reportBeaconError(e)\n }\n }\n sendXHR(url, data)\n}\n\nexport function fetchKeepAliveStrategy(\n endpointUrl,\n bytesLimit,\n payload,\n onResponse\n) {\n var data = payload.data\n var bytesCount = payload.bytesCount\n var url = addBatchPrecision(endpointUrl)\n var canUseKeepAlive = isKeepAliveSupported() && bytesCount < bytesLimit\n if (canUseKeepAlive) {\n fetch(url, {\n method: 'POST',\n body: data,\n keepalive: true,\n mode: 'cors'\n }).then(\n monitor(function (response) {\n if (typeof onResponse === 'function') {\n onResponse({ status: response.status, type: response.type })\n }\n }),\n monitor(function () {\n // failed to queue the request\n sendXHR(url, data, onResponse)\n })\n )\n } else {\n sendXHR(url, data, onResponse)\n }\n}\n\nfunction isKeepAliveSupported() {\n // Request can throw, cf https://developer.mozilla.org/en-US/docs/Web/API/Request/Request#errors\n try {\n return window.Request && 'keepalive' in new Request('http://a')\n } catch {\n return false\n }\n}\n\nfunction sendXHR(url, data, onResponse) {\n const request = new XMLHttpRequest()\n request.open('POST', url, true)\n addEventListener(\n request,\n 'loadend',\n function () {\n if (typeof onResponse === 'function') {\n onResponse({ status: request.status })\n }\n },\n {\n once: true\n }\n )\n request.send(data)\n}\n"],"mappings":"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"}
@@ -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.23",
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": "0c8164fe62fcb3dfeee505c9ca27da49cac54dc5"
23
+ "gitHead": "6863a7abc368adb01df9a2de5efbed111db1e286"
24
24
  }
@@ -1,5 +1,6 @@
1
1
  import { each } from '../helper/tools'
2
2
  import { getZoneJsOriginalValue } from '../helper/getZoneJsOriginalValue'
3
+ import { monitor } from '../helper/monitor'
3
4
  export function addEventListener(eventTarget, event, listener, options) {
4
5
  return addEventListeners(eventTarget, [event], listener, options)
5
6
  }
@@ -20,28 +21,28 @@ export function addEventListener(eventTarget, event, listener, options) {
20
21
  * listened
21
22
  */
22
23
 
23
- export function addEventListeners(eventTarget, events, listener, options) {
24
- var wrappedListener =
24
+ export function addEventListeners(eventTarget, eventNames, listener, options) {
25
+ var wrappedListener = monitor(
25
26
  options && options.once
26
27
  ? function (event) {
27
28
  stop()
28
29
  listener(event)
29
30
  }
30
31
  : listener
31
-
32
+ )
32
33
  options =
33
34
  options && options.passive
34
35
  ? { capture: options.capture, passive: options.passive }
35
36
  : options && options.capture
36
37
  var add = getZoneJsOriginalValue(eventTarget, 'addEventListener')
37
38
 
38
- each(events, function (event) {
39
- add.call(eventTarget, event, wrappedListener, options)
39
+ each(eventNames, function (eventName) {
40
+ add.call(eventTarget, eventName, wrappedListener, options)
40
41
  })
41
42
  var stop = function () {
42
43
  var remove = getZoneJsOriginalValue(eventTarget, 'removeEventListener')
43
- each(events, function (event) {
44
- remove.call(eventTarget, event, wrappedListener, options)
44
+ each(eventNames, function (eventName) {
45
+ remove.call(eventTarget, eventName, wrappedListener, options)
45
46
  })
46
47
  }
47
48
  return {
@@ -1,6 +1,7 @@
1
1
  import { instrumentMethod } from '../helper/instrumentMethod'
2
2
  import { Observable } from '../helper/observable'
3
3
  import { clocksNow } from '../helper/tools'
4
+ import { monitor, callMonitored } from '../helper/monitor'
4
5
  import { normalizeUrl } from '../helper/urlPolyfill'
5
6
 
6
7
  var fetchObservable
@@ -24,14 +25,22 @@ function createFetchObservable() {
24
25
  function (originalFetch) {
25
26
  return function (input, init) {
26
27
  var responsePromise
27
- var context = beforeSend(observable, input, init)
28
+ var context = callMonitored(beforeSend, null, [
29
+ observable,
30
+ input,
31
+ init
32
+ ])
28
33
  if (context) {
29
34
  responsePromise = originalFetch.call(
30
35
  this,
31
36
  context.input,
32
37
  context.init
33
38
  )
34
- afterSend(observable, responsePromise, context)
39
+ callMonitored(afterSend, null, [
40
+ observable,
41
+ responsePromise,
42
+ context
43
+ ])
35
44
  } else {
36
45
  responsePromise = originalFetch.call(this, input, init)
37
46
  }
@@ -91,5 +100,5 @@ function afterSend(observable, responsePromise, startContext) {
91
100
  }
92
101
  observable.notify(context)
93
102
  }
94
- responsePromise.then(reportFetch, reportFetch)
103
+ responsePromise.then(monitor(reportFetch), monitor(reportFetch))
95
104
  }
@@ -0,0 +1,25 @@
1
+ export function getScrollX() {
2
+ var scrollX
3
+ var visual = window.visualViewport
4
+ if (visual) {
5
+ scrollX = visual.pageLeft - visual.offsetLeft
6
+ } else if (window.scrollX !== undefined) {
7
+ scrollX = window.scrollX
8
+ } else {
9
+ scrollX = window.pageXOffset || 0
10
+ }
11
+ return Math.round(scrollX)
12
+ }
13
+
14
+ export function getScrollY() {
15
+ var scrollY
16
+ var visual = window.visualViewport
17
+ if (visual) {
18
+ scrollY = visual.pageTop - visual.offsetTop
19
+ } else if (window.scrollY !== undefined) {
20
+ scrollY = window.scrollY
21
+ } else {
22
+ scrollY = window.pageYOffset || 0
23
+ }
24
+ return Math.round(scrollY)
25
+ }
@@ -30,6 +30,13 @@ export function validateAndBuildConfiguration(initConfiguration) {
30
30
  display.error('Sample Rate should be a number between 0 and 100')
31
31
  return
32
32
  }
33
+ if (
34
+ initConfiguration.telemetrySampleRate !== undefined &&
35
+ !isPercentage(initConfiguration.telemetrySampleRate)
36
+ ) {
37
+ display.error('Telemetry Sample Rate should be a number between 0 and 100')
38
+ return
39
+ }
33
40
  var sessionSampleRate =
34
41
  initConfiguration.sessionSampleRate || initConfiguration.sampleRate
35
42
  return assign(
@@ -45,6 +52,14 @@ export function validateAndBuildConfiguration(initConfiguration) {
45
52
  service: initConfiguration.service,
46
53
  version: initConfiguration.version,
47
54
  env: initConfiguration.env,
55
+ telemetrySampleRate: isNullUndefinedDefaultValue(
56
+ initConfiguration.telemetrySampleRate,
57
+ 100
58
+ ),
59
+ telemetryEnabled: isNullUndefinedDefaultValue(
60
+ initConfiguration.telemetryEnabled,
61
+ false
62
+ ),
48
63
  silentMultipleInit: !!initConfiguration.silentMultipleInit,
49
64
 
50
65
  /**
@@ -54,6 +69,7 @@ export function validateAndBuildConfiguration(initConfiguration) {
54
69
  batchBytesLimit: 16 * ONE_KIBI_BYTE,
55
70
 
56
71
  eventRateLimiterThreshold: 3000,
72
+ maxTelemetryEventsPerPage: 15,
57
73
 
58
74
  /**
59
75
  * flush automatically, aim to be lower than ALB connection timeout
@@ -44,7 +44,7 @@ export function computeTransportConfiguration(initConfiguration) {
44
44
  isServerError = initConfiguration.isServerError
45
45
  }
46
46
  return {
47
- 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
  }
@@ -8,7 +8,7 @@ import { mergeObservables, Observable } from '../helper/observable'
8
8
  import { find, map } from '../helper/tools'
9
9
  import { jsonStringify } from '../helper/serialisation/jsonStringify'
10
10
  import { ConsoleApiName } from '../helper/display'
11
-
11
+ import { callMonitored } from '../helper/monitor'
12
12
  var consoleObservablesByApi = {}
13
13
 
14
14
  export function initConsoleObservable(apis) {
@@ -30,7 +30,9 @@ function createConsoleObservable(api) {
30
30
  var params = [].slice.call(arguments)
31
31
  originalConsoleApi.apply(console, arguments)
32
32
  var handlingStack = createHandlingStack()
33
- observable.notify(buildConsoleLog(params, api, handlingStack))
33
+ callMonitored(function () {
34
+ observable.notify(buildConsoleLog(params, api, handlingStack))
35
+ })
34
36
  }
35
37
  return function () {
36
38
  console[api] = originalConsoleApi
package/src/dataMap.js CHANGED
@@ -34,7 +34,9 @@ export var commonTags = {
34
34
  }
35
35
  export var commonFields = {
36
36
  action_id: 'action.id',
37
- 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
  })