@cloudcare/browser-core 1.1.2 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (134) hide show
  1. package/cjs/{cookie.js → browser/cookie.js} +6 -37
  2. package/cjs/browser/fetchObservable.js +91 -0
  3. package/cjs/browser/xhrObservable.js +118 -0
  4. package/cjs/configuration/configuration.js +70 -0
  5. package/cjs/configuration/transportConfiguration.js +64 -0
  6. package/cjs/console/consoleObservable.js +84 -0
  7. package/cjs/dataMap.js +26 -21
  8. package/cjs/error/trackRuntimeError.js +27 -0
  9. package/cjs/helper/catchUserErrors.js +20 -0
  10. package/cjs/helper/contextHistory.js +134 -0
  11. package/cjs/helper/createEventRateLimiter.js +47 -0
  12. package/cjs/helper/deviceInfo.js +8 -25
  13. package/cjs/helper/display.js +31 -0
  14. package/cjs/helper/enums.js +28 -2
  15. package/cjs/helper/errorTools.js +63 -2
  16. package/cjs/helper/instrumentMethod.js +93 -0
  17. package/cjs/helper/lifeCycle.js +5 -3
  18. package/cjs/helper/observable.js +40 -2
  19. package/cjs/helper/tools.js +217 -11
  20. package/cjs/index.js +153 -23
  21. package/cjs/init.js +17 -27
  22. package/cjs/report/reportObservable.js +112 -0
  23. package/cjs/session/sessionConstants.js +13 -0
  24. package/cjs/session/sessionCookieStore.js +188 -0
  25. package/cjs/session/sessionManagement.js +96 -0
  26. package/cjs/session/sessionStore.js +150 -0
  27. package/cjs/synthetics/syntheticsWorkerValues.js +32 -0
  28. package/cjs/synthetics/usr.js +32 -0
  29. package/cjs/tracekit/computeStackTrace.js +73 -563
  30. package/cjs/tracekit/index.js +3 -15
  31. package/cjs/tracekit/tracekit.js +113 -0
  32. package/cjs/transport/batch.js +332 -0
  33. package/cjs/transport/httpRequest.js +112 -0
  34. package/cjs/transport/index.js +29 -0
  35. package/cjs/transport/sendWithRetryStrategy.js +177 -0
  36. package/cjs/transport/startBatchWithReplica.js +24 -0
  37. package/esm/{cookie.js → browser/cookie.js} +4 -35
  38. package/esm/browser/fetchObservable.js +77 -0
  39. package/esm/browser/xhrObservable.js +106 -0
  40. package/esm/configuration/configuration.js +55 -0
  41. package/esm/configuration/transportConfiguration.js +54 -0
  42. package/esm/console/consoleObservable.js +70 -0
  43. package/esm/dataMap.js +26 -21
  44. package/esm/error/trackRuntimeError.js +16 -0
  45. package/esm/helper/catchUserErrors.js +12 -0
  46. package/esm/helper/contextHistory.js +106 -0
  47. package/esm/helper/createEventRateLimiter.js +38 -0
  48. package/esm/helper/deviceInfo.js +6 -25
  49. package/esm/helper/display.js +21 -0
  50. package/esm/helper/enums.js +25 -1
  51. package/esm/helper/errorTools.js +58 -3
  52. package/esm/helper/instrumentMethod.js +81 -0
  53. package/esm/helper/lifeCycle.js +5 -3
  54. package/esm/helper/observable.js +39 -3
  55. package/esm/helper/tools.js +173 -3
  56. package/esm/index.js +17 -7
  57. package/esm/init.js +17 -22
  58. package/esm/report/reportObservable.js +98 -0
  59. package/esm/session/sessionConstants.js +3 -0
  60. package/esm/session/sessionCookieStore.js +168 -0
  61. package/esm/session/sessionManagement.js +78 -0
  62. package/esm/session/sessionStore.js +139 -0
  63. package/esm/synthetics/syntheticsWorkerValues.js +15 -0
  64. package/esm/synthetics/usr.js +18 -0
  65. package/esm/tracekit/computeStackTrace.js +73 -557
  66. package/esm/tracekit/index.js +1 -1
  67. package/esm/tracekit/tracekit.js +103 -0
  68. package/esm/transport/batch.js +316 -0
  69. package/esm/transport/httpRequest.js +104 -0
  70. package/esm/transport/index.js +3 -0
  71. package/esm/transport/sendWithRetryStrategy.js +165 -0
  72. package/esm/transport/startBatchWithReplica.js +15 -0
  73. package/package.json +2 -2
  74. package/src/.DS_Store +0 -0
  75. package/src/{cookie.js → browser/cookie.js} +6 -34
  76. package/src/browser/fetchObservable.js +86 -0
  77. package/src/browser/xhrObservable.js +102 -0
  78. package/src/configuration/configuration.js +61 -0
  79. package/src/configuration/transportConfiguration.js +42 -0
  80. package/src/console/consoleObservable.js +65 -0
  81. package/src/dataMap.js +26 -21
  82. package/src/error/trackRuntimeError.js +19 -0
  83. package/src/helper/catchUserErrors.js +12 -0
  84. package/src/helper/contextHistory.js +85 -0
  85. package/src/helper/createEventRateLimiter.js +37 -0
  86. package/src/helper/deviceInfo.js +5 -51
  87. package/src/helper/display.js +21 -0
  88. package/src/helper/enums.js +38 -14
  89. package/src/helper/errorTools.js +76 -12
  90. package/src/helper/instrumentMethod.js +97 -0
  91. package/src/helper/lifeCycle.js +5 -3
  92. package/src/helper/observable.js +33 -2
  93. package/src/helper/tools.js +159 -5
  94. package/src/index.js +18 -7
  95. package/src/init.js +17 -18
  96. package/src/report/reportObservable.js +113 -0
  97. package/src/session/sessionConstants.js +3 -0
  98. package/src/session/sessionCookieStore.js +159 -0
  99. package/src/session/sessionManagement.js +89 -0
  100. package/src/session/sessionStore.js +139 -0
  101. package/src/synthetics/syntheticsWorkerValues.js +22 -0
  102. package/src/synthetics/usr.js +18 -0
  103. package/src/tracekit/computeStackTrace.js +75 -551
  104. package/src/tracekit/index.js +1 -1
  105. package/src/tracekit/tracekit.js +100 -0
  106. package/src/transport/batch.js +289 -0
  107. package/src/transport/httpRequest.js +109 -0
  108. package/src/transport/index.js +3 -0
  109. package/src/transport/sendWithRetryStrategy.js +186 -0
  110. package/src/transport/startBatchWithReplica.js +26 -0
  111. package/cjs/configuration.js +0 -184
  112. package/cjs/errorCollection.js +0 -167
  113. package/cjs/fetchProxy.js +0 -162
  114. package/cjs/helper/errorFilter.js +0 -47
  115. package/cjs/sessionManagement.js +0 -221
  116. package/cjs/tracekit/report.js +0 -289
  117. package/cjs/transport.js +0 -373
  118. package/cjs/xhrProxy.js +0 -122
  119. package/esm/configuration.js +0 -167
  120. package/esm/errorCollection.js +0 -141
  121. package/esm/fetchProxy.js +0 -116
  122. package/esm/helper/errorFilter.js +0 -38
  123. package/esm/sessionManagement.js +0 -195
  124. package/esm/tracekit/report.js +0 -273
  125. package/esm/transport.js +0 -357
  126. package/esm/xhrProxy.js +0 -110
  127. package/src/configuration.js +0 -156
  128. package/src/errorCollection.js +0 -170
  129. package/src/fetchProxy.js +0 -109
  130. package/src/helper/errorFilter.js +0 -38
  131. package/src/sessionManagement.js +0 -224
  132. package/src/tracekit/report.js +0 -284
  133. package/src/transport.js +0 -380
  134. package/src/xhrProxy.js +0 -106
@@ -0,0 +1,134 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.CLEAR_OLD_CONTEXTS_INTERVAL = void 0;
7
+ exports.ContextHistory = ContextHistory;
8
+
9
+ var _tools = require("./tools");
10
+
11
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
12
+
13
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
14
+
15
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
16
+
17
+ var END_OF_TIMES = Infinity;
18
+ var CLEAR_OLD_CONTEXTS_INTERVAL = _tools.ONE_MINUTE;
19
+ exports.CLEAR_OLD_CONTEXTS_INTERVAL = CLEAR_OLD_CONTEXTS_INTERVAL;
20
+
21
+ function ContextHistory(expireDelay) {
22
+ this.expireDelay = expireDelay;
23
+ this.entries = [];
24
+
25
+ var _this = this;
26
+
27
+ this.clearOldContextsInterval = setInterval(function () {
28
+ _this.clearOldContexts();
29
+ }, CLEAR_OLD_CONTEXTS_INTERVAL);
30
+ }
31
+
32
+ ContextHistory.prototype.add = function (context, startTime) {
33
+ var _this = this;
34
+
35
+ var entry = {
36
+ context: context,
37
+ startTime: startTime,
38
+ endTime: END_OF_TIMES,
39
+ remove: function remove() {
40
+ var index = _this.entries.indexOf(entry);
41
+
42
+ if (index >= 0) {
43
+ _this.entries.splice(index, 1);
44
+ }
45
+ },
46
+ close: function close(endTime) {
47
+ entry.endTime = endTime;
48
+ }
49
+ };
50
+ this.entries.unshift(entry);
51
+ return entry;
52
+ };
53
+
54
+ ContextHistory.prototype.find = function (startTime) {
55
+ if (typeof startTime === 'undefined') {
56
+ startTime = END_OF_TIMES;
57
+ }
58
+
59
+ var _iterator = _createForOfIteratorHelper(this.entries),
60
+ _step;
61
+
62
+ try {
63
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
64
+ var entry = _step.value;
65
+
66
+ if (entry.startTime <= startTime) {
67
+ if (startTime <= entry.endTime) {
68
+ return entry.context;
69
+ }
70
+
71
+ break;
72
+ }
73
+ }
74
+ } catch (err) {
75
+ _iterator.e(err);
76
+ } finally {
77
+ _iterator.f();
78
+ }
79
+ };
80
+ /**
81
+ * Helper function to close the currently active context, if any. This method assumes that entries
82
+ * are not overlapping.
83
+ */
84
+
85
+
86
+ ContextHistory.prototype.closeActive = function (endTime) {
87
+ var latestEntry = this.entries[0];
88
+
89
+ if (latestEntry && latestEntry.endTime === END_OF_TIMES) {
90
+ latestEntry.close(endTime);
91
+ }
92
+ };
93
+ /**
94
+ * Return all contexts that were active during `startTime`, or all currently active contexts if no
95
+ * `startTime` is provided.
96
+ */
97
+
98
+
99
+ ContextHistory.prototype.findAll = function (startTime) {
100
+ if (typeof startTime === 'undefined') {
101
+ startTime = END_OF_TIMES;
102
+ }
103
+
104
+ var result = (0, _tools.filter)(this.entries, function (entry) {
105
+ return entry.startTime <= startTime && startTime <= entry.endTime;
106
+ });
107
+ return (0, _tools.map)(result, function (entry) {
108
+ return entry.context;
109
+ });
110
+ };
111
+ /**
112
+ * Remove all entries from this collection.
113
+ */
114
+
115
+
116
+ ContextHistory.prototype.reset = function () {
117
+ this.entries = [];
118
+ };
119
+ /**
120
+ * Stop internal garbage collection of past entries.
121
+ */
122
+
123
+
124
+ ContextHistory.prototype.stop = function () {
125
+ clearInterval(this.clearOldContextsInterval);
126
+ };
127
+
128
+ ContextHistory.prototype.clearOldContexts = function () {
129
+ var oldTimeThreshold = (0, _tools.relativeNow)() - this.expireDelay;
130
+
131
+ while (this.entries.length > 0 && this.entries[this.entries.length - 1].endTime < oldTimeThreshold) {
132
+ this.entries.pop();
133
+ }
134
+ };
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.createEventRateLimiter = createEventRateLimiter;
7
+
8
+ var _errorTools = require("./errorTools");
9
+
10
+ var _tools = require("./tools");
11
+
12
+ function createEventRateLimiter(eventType, limit, onLimitReached) {
13
+ var eventCount = 0;
14
+ var allowNextEvent = false;
15
+ return {
16
+ isLimitReached: function isLimitReached() {
17
+ if (eventCount === 0) {
18
+ setTimeout(function () {
19
+ eventCount = 0;
20
+ }, _tools.ONE_MINUTE);
21
+ }
22
+
23
+ eventCount += 1;
24
+
25
+ if (eventCount <= limit || allowNextEvent) {
26
+ allowNextEvent = false;
27
+ return false;
28
+ }
29
+
30
+ if (eventCount === limit + 1) {
31
+ allowNextEvent = true;
32
+
33
+ try {
34
+ onLimitReached({
35
+ message: 'Reached max number of ' + eventType + 's by minute: ' + limit,
36
+ source: _errorTools.ErrorSource.AGENT,
37
+ startClocks: (0, _tools.clocksNow)()
38
+ });
39
+ } finally {
40
+ allowNextEvent = false;
41
+ }
42
+ }
43
+
44
+ return true;
45
+ }
46
+ };
47
+ }
@@ -4,13 +4,16 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.deviceInfo = void 0;
7
+
8
+ var _display = require("../helper/display");
9
+
7
10
  var VariableLibrary = {
8
11
  navigator: typeof window.navigator != 'undefined' ? window.navigator : {},
9
12
  // 信息map
10
13
  infoMap: {
11
14
  engine: ['WebKit', 'Trident', 'Gecko', 'Presto'],
12
15
  browser: ['Safari', 'Chrome', 'Edge', 'IE', 'IE 11', 'IE 10', 'IE 9', 'IE 8', 'IE 7', 'Firefox', 'Firefox Focus', 'Chromium', 'Opera', 'Vivaldi', 'Yandex', 'Arora', 'Lunascape', 'QupZilla', 'Coc Coc', 'Kindle', 'Iceweasel', 'Konqueror', 'Iceape', 'SeaMonkey', 'Epiphany', '360', '360SE', '360EE', 'UC', 'QQBrowser', 'QQ', 'Baidu', 'Maxthon', 'Sogou', 'LBBROWSER', '2345Explorer', 'TheWorld', 'XiaoMi', 'Quark', 'Qiyu', 'Wechat',, 'WechatWork', 'Taobao', 'Alipay', 'Weibo', 'Douban', 'Suning', 'iQiYi'],
13
- os: ['Windows', 'Windows 2000', 'Windows XP', 'Windows Vista', 'Windows 7', 'Windows 8', 'Windows 8.1', 'Windows Server 2003', 'Windows ME', 'Windows 10', 'Windows 98', 'Windows 95', 'Windows NT 4.0', 'Windows CE', 'Windows 3.11', 'Linux', 'Mac OS', 'Android', 'Ubuntu', 'FreeBSD', 'Debian', 'iOS', 'Windows Phone', 'BlackBerry', 'MeeGo', 'Symbian', 'Chrome OS', 'WebOS'],
16
+ os: ['Windows', 'Linux', 'Mac OS', 'Android', 'Ubuntu', 'FreeBSD', 'Debian', 'iOS', 'Windows Phone', 'BlackBerry', 'MeeGo', 'Symbian', 'Chrome OS', 'WebOS'],
14
17
  device: ['Mobile', 'Tablet', 'iPad']
15
18
  }
16
19
  }; // 方法库
@@ -28,12 +31,7 @@ var MethodLibrary = {
28
31
  Safari: u.indexOf('Safari') > -1,
29
32
  Chrome: u.indexOf('Chrome') > -1 || u.indexOf('CriOS') > -1,
30
33
  IE: u.indexOf('MSIE') > -1 || u.indexOf('Trident') > -1,
31
- 'IE 11': u.indexOf('Trident') > -1 && u.indexOf('rv:11.0') > -1,
32
- 'IE 10': u.indexOf('MSIE 10.0') > -1 && u.indexOf('Trident') > -1,
33
- 'IE 9': u.indexOf('MSIE 9.0') > -1 && u.indexOf('Trident') > -1,
34
- 'IE 8': u.indexOf('MSIE 9.0') > -1 && u.indexOf('Trident') > -1,
35
- 'IE 7': u.indexOf('MSIE 7.0') > -1 && u.indexOf('Trident') > -1,
36
- Edge: u.indexOf('Edg') > -1 || u.indexOf('Edge') > -1,
34
+ Edge: u.indexOf('Edge') > -1,
37
35
  Firefox: u.indexOf('Firefox') > -1 || u.indexOf('FxiOS') > -1,
38
36
  'Firefox Focus': u.indexOf('Focus') > -1,
39
37
  Chromium: u.indexOf('Chromium') > -1,
@@ -59,14 +57,13 @@ var MethodLibrary = {
59
57
  Baidu: u.indexOf('Baidu') > -1 || u.indexOf('BIDUBrowser') > -1,
60
58
  Maxthon: u.indexOf('Maxthon') > -1,
61
59
  Sogou: u.indexOf('MetaSr') > -1 || u.indexOf('Sogou') > -1,
62
- LBBROWSER: u.indexOf('LBBROWSER') > -1 || u.indexOf('LieBaoFast') > -1,
60
+ LBBROWSER: u.indexOf('LBBROWSER') > -1,
63
61
  '2345Explorer': u.indexOf('2345Explorer') > -1,
64
62
  TheWorld: u.indexOf('TheWorld') > -1,
65
63
  XiaoMi: u.indexOf('MiuiBrowser') > -1,
66
64
  Quark: u.indexOf('Quark') > -1,
67
65
  Qiyu: u.indexOf('Qiyu') > -1,
68
66
  Wechat: u.indexOf('MicroMessenger') > -1,
69
- WechatWork: u.indexOf('wxwork/') > -1,
70
67
  Taobao: u.indexOf('AliApp(TB') > -1,
71
68
  Alipay: u.indexOf('AliApp(AP') > -1,
72
69
  Weibo: u.indexOf('Weibo') > -1,
@@ -75,20 +72,6 @@ var MethodLibrary = {
75
72
  iQiYi: u.indexOf('IqiyiApp') > -1,
76
73
  // 系统或平台
77
74
  Windows: u.indexOf('Windows') > -1,
78
- 'Windows 2000': u.indexOf('Windows NT 5.0') > -1 || u.indexOf('Windows 2000') > -1,
79
- 'Windows XP': u.indexOf('Windows NT 5.1') > -1 || u.indexOf('Windows XP') > -1,
80
- 'Windows Server 2003': u.indexOf('Windows NT 5.2') > -1,
81
- 'Windows Vista': u.indexOf('Windows NT 6.0') > -1,
82
- 'Windows 7': u.indexOf('Windows 7') > -1 || u.indexOf('Windows NT 6.1') > -1,
83
- 'Windows 8': u.indexOf('Windows 8') > -1 || u.indexOf('Windows NT 6.2') > -1,
84
- 'Windows 8.1': u.indexOf('Windows 8.1') > -1 || u.indexOf('Windows NT 6.3') > -1,
85
- 'Windows ME': u.indexOf('Win 9x 4.90') > -1 || u.indexOf('Windows ME') > -1,
86
- 'Windows 10': u.indexOf('Windows 10.0') > -1 || u.indexOf('Windows NT 10.0') > -1,
87
- 'Windows 98': u.indexOf('Windows 98') > -1 || u.indexOf('Win98') > -1,
88
- 'Windows 95': u.indexOf('Windows 95') > -1 || u.indexOf('Win95') > -1 || u.indexOf('Windows_95') > -1,
89
- 'Windows NT 4.0': u.indexOf('Windows NT 4.0') > -1 || u.indexOf('WinNT4.0') > -1 || u.indexOf('WinNT') > -1,
90
- 'Windows CE': u.indexOf('Windows CE') > -1,
91
- 'Windows 3.11': u.indexOf('Win16') > -1,
92
75
  Linux: u.indexOf('Linux') > -1 || u.indexOf('X11') > -1,
93
76
  'Mac OS': u.indexOf('Macintosh') > -1,
94
77
  Android: u.indexOf('Android') > -1 || u.indexOf('Adr') > -1,
@@ -176,7 +159,7 @@ var MethodLibrary = {
176
159
  if (osVersion[_this.os]) {
177
160
  _this.osVersion = osVersion[_this.os]();
178
161
 
179
- if (_this.osVersion == u) {
162
+ if (_this.osVersion === u) {
180
163
  _this.osVersion = '';
181
164
  }
182
165
  }
@@ -543,7 +526,7 @@ var MethodLibrary = {
543
526
  callback(position);
544
527
  }, // 位置获取失败
545
528
  function (error) {
546
- console.log(error);
529
+ _display.display.warn(error);
547
530
  });
548
531
  }
549
532
  };
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.display = exports.ConsoleApiName = void 0;
7
+ var ConsoleApiName = {
8
+ log: 'log',
9
+ debug: 'debug',
10
+ info: 'info',
11
+ warn: 'warn',
12
+ error: 'error'
13
+ };
14
+ exports.ConsoleApiName = ConsoleApiName;
15
+
16
+ var display = function display(api) {
17
+ var args = [].slice.call(arguments, 1);
18
+
19
+ if (!Object.prototype.hasOwnProperty.call(ConsoleApiName, api)) {
20
+ api = ConsoleApiName.log;
21
+ }
22
+
23
+ display[api].apply(display, args);
24
+ };
25
+
26
+ exports.display = display;
27
+ display.debug = console.debug.bind(console);
28
+ display.log = console.log.bind(console);
29
+ display.info = console.info.bind(console);
30
+ display.warn = console.warn.bind(console);
31
+ display.error = console.error.bind(console);
@@ -3,15 +3,18 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.TraceType = exports.RumEventType = exports.ResourceType = exports.RequestType = exports.ErrorHandling = exports.DOM_EVENT = exports.ActionType = void 0;
6
+ exports.ViewLoadingType = exports.TraceType = exports.RumEventType = exports.ResourceType = exports.RequestType = exports.FrustrationType = exports.ErrorHandling = exports.DOM_EVENT = exports.ActionType = void 0;
7
7
  var DOM_EVENT = {
8
8
  BEFORE_UNLOAD: 'beforeunload',
9
9
  CLICK: 'click',
10
+ DBL_CLICK: 'dblclick',
10
11
  KEY_DOWN: 'keydown',
11
12
  LOAD: 'load',
12
13
  POP_STATE: 'popstate',
13
14
  SCROLL: 'scroll',
14
15
  TOUCH_START: 'touchstart',
16
+ TOUCH_END: 'touchend',
17
+ TOUCH_MOVE: 'touchmove',
15
18
  VISIBILITY_CHANGE: 'visibilitychange',
16
19
  DOM_CONTENT_LOADED: 'DOMContentLoaded',
17
20
  POINTER_DOWN: 'pointerdown',
@@ -19,7 +22,19 @@ var DOM_EVENT = {
19
22
  POINTER_CANCEL: 'pointercancel',
20
23
  HASH_CHANGE: 'hashchange',
21
24
  PAGE_HIDE: 'pagehide',
22
- MOUSE_DOWN: 'mousedown'
25
+ MOUSE_DOWN: 'mousedown',
26
+ MOUSE_UP: 'mouseup',
27
+ MOUSE_MOVE: 'mousemove',
28
+ FOCUS: 'focus',
29
+ BLUR: 'blur',
30
+ CONTEXT_MENU: 'contextmenu',
31
+ RESIZE: 'resize',
32
+ CHANGE: 'change',
33
+ INPUT: 'input',
34
+ PLAY: 'play',
35
+ PAUSE: 'pause',
36
+ SECURITY_POLICY_VIOLATION: 'securitypolicyviolation',
37
+ SELECTION_CHANGE: 'selectionchange'
23
38
  };
24
39
  exports.DOM_EVENT = DOM_EVENT;
25
40
  var ResourceType = {
@@ -40,6 +55,12 @@ var ActionType = {
40
55
  CUSTOM: 'custom'
41
56
  };
42
57
  exports.ActionType = ActionType;
58
+ var FrustrationType = {
59
+ RAGE_CLICK: 'rage_click',
60
+ ERROR_CLICK: 'error_click',
61
+ DEAD_CLICK: 'dead_click'
62
+ };
63
+ exports.FrustrationType = FrustrationType;
43
64
  var RumEventType = {
44
65
  ACTION: 'action',
45
66
  ERROR: 'error',
@@ -49,6 +70,11 @@ var RumEventType = {
49
70
  LOGGER: 'logger'
50
71
  };
51
72
  exports.RumEventType = RumEventType;
73
+ var ViewLoadingType = {
74
+ INITIAL_LOAD: 'initial_load',
75
+ ROUTE_CHANGE: 'route_change'
76
+ };
77
+ exports.ViewLoadingType = ViewLoadingType;
52
78
  var RequestType = {
53
79
  FETCH: ResourceType.FETCH,
54
80
  XHR: ResourceType.XHR
@@ -4,9 +4,12 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.ErrorSource = void 0;
7
+ exports.computeRawError = computeRawError;
7
8
  exports.createHandlingStack = createHandlingStack;
9
+ exports.flattenErrorCauses = flattenErrorCauses;
8
10
  exports.formatErrorMessage = formatErrorMessage;
9
11
  exports.formatUnknownError = formatUnknownError;
12
+ exports.getFileFromStackTraceString = getFileFromStackTraceString;
10
13
  exports.toStackTraceString = toStackTraceString;
11
14
 
12
15
  var _tools = require("./tools");
@@ -23,10 +26,45 @@ var ErrorSource = {
23
26
  };
24
27
  exports.ErrorSource = ErrorSource;
25
28
 
29
+ function computeRawError(data) {
30
+ var stackTrace = data.stackTrace;
31
+ var originalError = data.originalError;
32
+ var handlingStack = data.handlingStack;
33
+ var startClocks = data.startClocks;
34
+ var nonErrorPrefix = data.nonErrorPrefix;
35
+ var source = data.source;
36
+ var handling = data.handling;
37
+
38
+ if (!stackTrace || stackTrace.message === undefined && !(originalError instanceof Error)) {
39
+ return {
40
+ startClocks: startClocks,
41
+ source: source,
42
+ handling: handling,
43
+ originalError: originalError,
44
+ message: nonErrorPrefix + ' ' + (0, _tools.jsonStringify)(originalError),
45
+ stack: 'No stack, consider using an instance of Error',
46
+ handlingStack: handlingStack,
47
+ type: stackTrace && stackTrace.name
48
+ };
49
+ }
50
+
51
+ return {
52
+ startClocks: startClocks,
53
+ source: source,
54
+ handling: handling,
55
+ originalError: originalError,
56
+ message: stackTrace.message || 'Empty message',
57
+ stack: toStackTraceString(stackTrace),
58
+ handlingStack: handlingStack,
59
+ type: stackTrace.name,
60
+ causes: flattenErrorCauses(originalError, source)
61
+ };
62
+ }
63
+
26
64
  function formatUnknownError(stackTrace, errorObject, nonErrorPrefix, handlingStack) {
27
65
  if (!stackTrace || stackTrace.message === undefined && !(errorObject instanceof Error)) {
28
66
  return {
29
- message: nonErrorPrefix + '' + JSON.stringify(errorObject),
67
+ message: nonErrorPrefix + '' + (0, _tools.jsonStringify)(errorObject),
30
68
  stack: 'No stack, consider using an instance of Error',
31
69
  handlingStack: handlingStack,
32
70
  type: stackTrace && stackTrace.name
@@ -75,7 +113,7 @@ function createHandlingStack() {
75
113
  }
76
114
 
77
115
  function toStackTraceString(stack) {
78
- var result = stack.name || 'Error' + ': ' + stack.message;
116
+ var result = formatErrorMessage(stack);
79
117
  (0, _tools.each)(stack.stack, function (frame) {
80
118
  var func = frame.func === '?' ? '<anonymous>' : frame.func;
81
119
  var args = frame.args && frame.args.length > 0 ? '(' + frame.args.join(', ') + ')' : '';
@@ -88,4 +126,27 @@ function toStackTraceString(stack) {
88
126
 
89
127
  function formatErrorMessage(stack) {
90
128
  return (stack.name || 'Error') + ': ' + stack.message;
129
+ }
130
+
131
+ function getFileFromStackTraceString(stack) {
132
+ var execResult = /@ (.+)/.exec(stack);
133
+ return execResult && execResult[1];
134
+ }
135
+
136
+ function flattenErrorCauses(error, parentSource) {
137
+ var currentError = error;
138
+ var causes = [];
139
+
140
+ while (currentError && currentError.cause instanceof Error && causes.length < 10) {
141
+ var stackTrace = (0, _tracekit.computeStackTrace)(currentError.cause);
142
+ causes.push({
143
+ message: currentError.cause.message,
144
+ source: parentSource,
145
+ type: stackTrace && stackTrace.name,
146
+ stack: stackTrace && toStackTraceString(stackTrace)
147
+ });
148
+ currentError = currentError.cause;
149
+ }
150
+
151
+ return causes.length ? causes : undefined;
91
152
  }
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.instrumentMethod = instrumentMethod;
7
+ exports.instrumentMethodAndCallOriginal = instrumentMethodAndCallOriginal;
8
+ exports.instrumentSetter = instrumentSetter;
9
+
10
+ var _tools = require("./tools");
11
+
12
+ function instrumentMethod(object, method, instrumentationFactory) {
13
+ var original = object[method];
14
+ var instrumentation = instrumentationFactory(original);
15
+
16
+ var instrumentationWrapper = function instrumentationWrapper() {
17
+ if (typeof instrumentation !== 'function') {
18
+ return undefined;
19
+ } // eslint-disable-next-line @typescript-eslint/no-unsafe-return
20
+
21
+
22
+ return instrumentation.apply(this, arguments);
23
+ };
24
+
25
+ object[method] = instrumentationWrapper;
26
+ return {
27
+ stop: function stop() {
28
+ if (object[method] === instrumentationWrapper) {
29
+ object[method] = original;
30
+ } else {
31
+ instrumentation = original;
32
+ }
33
+ }
34
+ };
35
+ }
36
+
37
+ function instrumentMethodAndCallOriginal(object, method, aliasOption) {
38
+ return instrumentMethod(object, method, function (original) {
39
+ return function () {
40
+ var result;
41
+
42
+ if (aliasOption && aliasOption.before) {
43
+ aliasOption.before.apply(this, arguments);
44
+ }
45
+
46
+ if (typeof original === 'function') {
47
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-call
48
+ result = original.apply(this, arguments);
49
+ }
50
+
51
+ if (aliasOption && aliasOption.after) {
52
+ aliasOption.after.apply(this, arguments);
53
+ }
54
+
55
+ return result;
56
+ };
57
+ });
58
+ }
59
+
60
+ function instrumentSetter(object, property, after) {
61
+ var originalDescriptor = Object.getOwnPropertyDescriptor(object, property);
62
+
63
+ if (!originalDescriptor || !originalDescriptor.set || !originalDescriptor.configurable) {
64
+ return {
65
+ stop: _tools.noop
66
+ };
67
+ }
68
+
69
+ var instrumentation = function instrumentation(thisObject, value) {
70
+ // put hooked setter into event loop to avoid of set latency
71
+ setTimeout(function () {
72
+ after(thisObject, value);
73
+ }, 0);
74
+ };
75
+
76
+ var instrumentationWrapper = function instrumentationWrapper(value) {
77
+ originalDescriptor.set.call(this, value);
78
+ instrumentation(this, value);
79
+ };
80
+
81
+ Object.defineProperty(object, property, {
82
+ set: instrumentationWrapper
83
+ });
84
+ return {
85
+ stop: function stop() {
86
+ if (Object.getOwnPropertyDescriptor(object, property) && Object.getOwnPropertyDescriptor(object, property).set === instrumentationWrapper) {
87
+ Object.defineProperty(object, property, originalDescriptor);
88
+ } else {
89
+ instrumentation = _tools.noop;
90
+ }
91
+ }
92
+ };
93
+ }
@@ -9,14 +9,14 @@ exports.LifeCycleEventType = void 0;
9
9
  var _tools = require("./tools");
10
10
 
11
11
  var LifeCycleEventType = {
12
- PERFORMANCE_ENTRY_COLLECTED: 'PERFORMANCE_ENTRY_COLLECTED',
12
+ PERFORMANCE_ENTRIES_COLLECTED: 'PERFORMANCE_ENTRIES_COLLECTED',
13
13
  AUTO_ACTION_CREATED: 'AUTO_ACTION_CREATED',
14
14
  AUTO_ACTION_COMPLETED: 'AUTO_ACTION_COMPLETED',
15
- AUTO_ACTION_DISCARDED: 'AUTO_ACTION_DISCARDED',
16
15
  VIEW_CREATED: 'VIEW_CREATED',
17
16
  VIEW_UPDATED: 'VIEW_UPDATED',
18
17
  VIEW_ENDED: 'VIEW_ENDED',
19
18
  SESSION_RENEWED: 'SESSION_RENEWED',
19
+ SESSION_EXPIRED: 'SESSION_EXPIRED',
20
20
  DOM_MUTATED: 'DOM_MUTATED',
21
21
  BEFORE_UNLOAD: 'BEFORE_UNLOAD',
22
22
  REQUEST_STARTED: 'REQUEST_STARTED',
@@ -25,7 +25,9 @@ var LifeCycleEventType = {
25
25
  RUM_EVENT_COLLECTED: 'RUM_EVENT_COLLECTED',
26
26
  RAW_ERROR_COLLECTED: 'RAW_ERROR_COLLECTED',
27
27
  RECORD_STARTED: 'RECORD_STARTED',
28
- RECORD_STOPPED: 'RECORD_STOPPED'
28
+ RECORD_STOPPED: 'RECORD_STOPPED',
29
+ RAW_LOG_COLLECTED: 'RAW_LOG_COLLECTED',
30
+ LOG_COLLECTED: 'LOG_COLLECTED'
29
31
  };
30
32
  exports.LifeCycleEventType = LifeCycleEventType;
31
33
 
@@ -4,16 +4,37 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.Observable = void 0;
7
+ exports.mergeObservables = mergeObservables;
7
8
 
8
9
  var _tools = require("./tools");
9
10
 
10
- var _Observable = function _Observable() {
11
+ var _Observable = function _Observable(onFirstSubscribe) {
11
12
  this.observers = [];
13
+ this.onLastUnsubscribe = undefined;
14
+ this.onFirstSubscribe = onFirstSubscribe;
12
15
  };
13
16
 
14
17
  _Observable.prototype = {
15
18
  subscribe: function subscribe(f) {
19
+ if (!this.observers.length && this.onFirstSubscribe) {
20
+ this.onLastUnsubscribe = this.onFirstSubscribe() || undefined;
21
+ }
22
+
16
23
  this.observers.push(f);
24
+
25
+ var _this = this;
26
+
27
+ return {
28
+ unsubscribe: function unsubscribe() {
29
+ _this.observers = (0, _tools.filter)(_this.observers, function (other) {
30
+ return f !== other;
31
+ });
32
+
33
+ if (!_this.observers.length && _this.onLastUnsubscribe) {
34
+ _this.onLastUnsubscribe();
35
+ }
36
+ }
37
+ };
17
38
  },
18
39
  notify: function notify(data) {
19
40
  (0, _tools.each)(this.observers, function (observer) {
@@ -22,4 +43,21 @@ _Observable.prototype = {
22
43
  }
23
44
  };
24
45
  var Observable = _Observable;
25
- exports.Observable = Observable;
46
+ exports.Observable = Observable;
47
+
48
+ function mergeObservables() {
49
+ var observables = [].slice.call(arguments);
50
+ var globalObservable = new Observable(function () {
51
+ var subscriptions = (0, _tools.map)(observables, function (observable) {
52
+ return observable.subscribe(function (data) {
53
+ return globalObservable.notify(data);
54
+ });
55
+ });
56
+ return function () {
57
+ return (0, _tools.each)(subscriptions, function (subscription) {
58
+ return subscription.unsubscribe();
59
+ });
60
+ };
61
+ });
62
+ return globalObservable;
63
+ }