@antglobal/rlog-sdk 0.0.1755855517-dev.10 → 0.0.1755855517-dev.12

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 (67) hide show
  1. package/README.md +48 -8
  2. package/dist/esm/index.d.ts +10 -46
  3. package/dist/esm/index.d.ts.map +1 -1
  4. package/dist/esm/index.js +27 -70
  5. package/dist/esm/lib/api.d.ts +10 -0
  6. package/dist/esm/lib/api.d.ts.map +1 -1
  7. package/dist/esm/lib/api.js +54 -32
  8. package/dist/esm/lib/config.d.ts +2 -8
  9. package/dist/esm/lib/config.d.ts.map +1 -1
  10. package/dist/esm/lib/config.js +20 -18
  11. package/dist/esm/lib/error-trigger.d.ts +1 -3
  12. package/dist/esm/lib/error-trigger.d.ts.map +1 -1
  13. package/dist/esm/lib/error-trigger.js +1 -8
  14. package/dist/esm/lib/error.d.ts.map +1 -1
  15. package/dist/esm/lib/error.js +73 -178
  16. package/dist/esm/lib/init.d.ts.map +1 -1
  17. package/dist/esm/lib/init.js +13 -13
  18. package/dist/esm/lib/net.d.ts +5 -0
  19. package/dist/esm/lib/net.d.ts.map +1 -1
  20. package/dist/esm/lib/net.js +39 -0
  21. package/dist/esm/lib/router-monitor.d.ts.map +1 -1
  22. package/dist/esm/lib/router-monitor.js +110 -36
  23. package/dist/esm/lib/rrweb.d.ts.map +1 -1
  24. package/dist/esm/lib/rrweb.js +8 -8
  25. package/dist/esm/lib/upload-worker-manager.d.ts +37 -0
  26. package/dist/esm/lib/upload-worker-manager.d.ts.map +1 -0
  27. package/dist/esm/lib/upload-worker-manager.js +482 -0
  28. package/dist/esm/lib/upload-worker.d.ts +59 -0
  29. package/dist/esm/lib/upload-worker.d.ts.map +1 -0
  30. package/dist/esm/lib/upload-worker.js +26 -0
  31. package/dist/esm/lib/uploader.d.ts +5 -0
  32. package/dist/esm/lib/uploader.d.ts.map +1 -1
  33. package/dist/esm/lib/uploader.js +85 -29
  34. package/dist/lib/index.d.ts +10 -46
  35. package/dist/lib/index.d.ts.map +1 -1
  36. package/dist/lib/index.js +9 -58
  37. package/dist/lib/lib/api.d.ts +10 -0
  38. package/dist/lib/lib/api.d.ts.map +1 -1
  39. package/dist/lib/lib/api.js +55 -32
  40. package/dist/lib/lib/config.d.ts +2 -8
  41. package/dist/lib/lib/config.d.ts.map +1 -1
  42. package/dist/lib/lib/config.js +20 -18
  43. package/dist/lib/lib/error-trigger.d.ts +1 -3
  44. package/dist/lib/lib/error-trigger.d.ts.map +1 -1
  45. package/dist/lib/lib/error-trigger.js +1 -8
  46. package/dist/lib/lib/error.d.ts.map +1 -1
  47. package/dist/lib/lib/error.js +73 -178
  48. package/dist/lib/lib/init.d.ts.map +1 -1
  49. package/dist/lib/lib/init.js +12 -12
  50. package/dist/lib/lib/net.d.ts +5 -0
  51. package/dist/lib/lib/net.d.ts.map +1 -1
  52. package/dist/lib/lib/net.js +40 -0
  53. package/dist/lib/lib/router-monitor.d.ts.map +1 -1
  54. package/dist/lib/lib/router-monitor.js +110 -36
  55. package/dist/lib/lib/rrweb.d.ts.map +1 -1
  56. package/dist/lib/lib/rrweb.js +8 -8
  57. package/dist/lib/lib/upload-worker-manager.d.ts +37 -0
  58. package/dist/lib/lib/upload-worker-manager.d.ts.map +1 -0
  59. package/dist/lib/lib/upload-worker-manager.js +491 -0
  60. package/dist/lib/lib/upload-worker.d.ts +59 -0
  61. package/dist/lib/lib/upload-worker.d.ts.map +1 -0
  62. package/dist/lib/lib/upload-worker.js +32 -0
  63. package/dist/lib/lib/uploader.d.ts +5 -0
  64. package/dist/lib/lib/uploader.d.ts.map +1 -1
  65. package/dist/lib/lib/uploader.js +85 -29
  66. package/dist/rlog-sdk.min.js +1 -1
  67. package/package.json +3 -2
@@ -21,7 +21,7 @@
21
21
  * 统一的上传逻辑由 uploader.ts 中的 startUploadLoop 处理。
22
22
  */
23
23
  export interface ErrorInfo {
24
- type: 'js' | 'promise' | 'resource' | 'http' | 'custom';
24
+ type: string;
25
25
  message?: string;
26
26
  timestamp: number;
27
27
  [key: string]: any;
@@ -29,14 +29,12 @@ export interface ErrorInfo {
29
29
  export declare class ErrorTrigger {
30
30
  private beforeDuration;
31
31
  private afterDuration;
32
- private triggerErrors;
33
32
  private state;
34
33
  private cooldownTimer;
35
34
  private destroyed;
36
35
  constructor(options?: {
37
36
  beforeDuration?: number;
38
37
  afterDuration?: number;
39
- triggerErrors?: string[];
40
38
  });
41
39
  /**
42
40
  * 当前是否处于持续上传状态
@@ -1 +1 @@
1
- {"version":3,"file":"error-trigger.d.ts","sourceRoot":"","sources":["../../../src/lib/error-trigger.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAQH,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,IAAI,GAAG,SAAS,GAAG,UAAU,GAAG,MAAM,GAAG,QAAQ,CAAC;IACxD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAID,qBAAa,YAAY;IACvB,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,aAAa,CAAc;IAGnC,OAAO,CAAC,KAAK,CAAwB;IAGrC,OAAO,CAAC,aAAa,CAA8C;IAGnE,OAAO,CAAC,SAAS,CAAS;gBAEd,OAAO,GAAE;QACnB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;KACrB;IAQN;;OAEG;IACH,WAAW,IAAI,OAAO;IAItB;;;;;;;;;;OAUG;IACH,OAAO,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;IAmBnC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAe3B;;;OAGG;IACH,OAAO,CAAC,aAAa;IAWrB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAgB1B;;OAEG;IACH,OAAO,IAAI,IAAI;CAahB"}
1
+ {"version":3,"file":"error-trigger.d.ts","sourceRoot":"","sources":["../../../src/lib/error-trigger.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAQH,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAID,qBAAa,YAAY;IACvB,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,aAAa,CAAS;IAG9B,OAAO,CAAC,KAAK,CAAwB;IAGrC,OAAO,CAAC,aAAa,CAA8C;IAGnE,OAAO,CAAC,SAAS,CAAS;gBAEd,OAAO,GAAE;QACnB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,aAAa,CAAC,EAAE,MAAM,CAAC;KACnB;IAKN;;OAEG;IACH,WAAW,IAAI,OAAO;IAItB;;;;;;;;;;OAUG;IACH,OAAO,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;IAcnC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAe3B;;;OAGG;IACH,OAAO,CAAC,aAAa;IAWrB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAgB1B;;OAEG;IACH,OAAO,IAAI,IAAI;CAahB"}
@@ -32,12 +32,11 @@ import { setErrorModeUploading, setErrorModeWindowStart } from "./uploader";
32
32
  import logger from "./logger";
33
33
  export var ErrorTrigger = /*#__PURE__*/function () {
34
34
  function ErrorTrigger() {
35
- var _options$beforeDurati, _options$afterDuratio, _options$triggerError;
35
+ var _options$beforeDurati, _options$afterDuratio;
36
36
  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
37
37
  _classCallCheck(this, ErrorTrigger);
38
38
  _defineProperty(this, "beforeDuration", void 0);
39
39
  _defineProperty(this, "afterDuration", void 0);
40
- _defineProperty(this, "triggerErrors", void 0);
41
40
  // 状态机
42
41
  _defineProperty(this, "state", 'idle');
43
42
  // afterDuration 倒计时定时器
@@ -46,7 +45,6 @@ export var ErrorTrigger = /*#__PURE__*/function () {
46
45
  _defineProperty(this, "destroyed", false);
47
46
  this.beforeDuration = (_options$beforeDurati = options.beforeDuration) !== null && _options$beforeDurati !== void 0 ? _options$beforeDurati : 30000;
48
47
  this.afterDuration = (_options$afterDuratio = options.afterDuration) !== null && _options$afterDuratio !== void 0 ? _options$afterDuratio : 30000;
49
- this.triggerErrors = new Set((_options$triggerError = options.triggerErrors) !== null && _options$triggerError !== void 0 ? _options$triggerError : ['js', 'promise', 'resource', 'http', 'custom']);
50
48
  }
51
49
 
52
50
  /**
@@ -73,11 +71,6 @@ export var ErrorTrigger = /*#__PURE__*/function () {
73
71
  key: "onError",
74
72
  value: function onError(errorInfo) {
75
73
  if (this.destroyed) return;
76
-
77
- // 检查错误类型是否在触发列表中
78
- if (!this.triggerErrors.has(errorInfo.type)) {
79
- return;
80
- }
81
74
  if (this.state === 'idle') {
82
75
  // ===== 首次错误触发 =====
83
76
  this.enterUploadingState(errorInfo.timestamp);
@@ -1 +1 @@
1
- {"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../../../src/lib/error.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAc/C;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,GAAG,IAAI,CAElE;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,YAAY,GAAG,IAAI,CAErD;AAGD,eAAO,MAAM,oBAAoB,SAAU,GAAG,SA4B7C,CAAC;AAGF,wBAAgB,gBAAgB,SAoJ/B;AAGD,wBAAgB,mBAAmB,SAgBlC"}
1
+ {"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../../../src/lib/error.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAS/C;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,GAAG,IAAI,CAElE;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,YAAY,GAAG,IAAI,CAErD;AAGD,eAAO,MAAM,oBAAoB,SAAU,GAAG,SAmB7C,CAAC;AAqEF,wBAAgB,gBAAgB,SAS/B;AAGD,wBAAgB,mBAAmB,SAWlC"}
@@ -3,12 +3,12 @@ import { getConfig } from "./config";
3
3
  import { record } from 'rrweb';
4
4
  import logger from "./logger";
5
5
 
6
- // 存储事件监听器的引用,用于清理
7
- var eventListeners = [];
8
-
9
6
  // 错误触发器引用(错误采集模式下由 init.ts 注入)
10
7
  var errorTriggerInstance = null;
11
8
 
9
+ // 标记是否已初始化
10
+ var isInitialized = false;
11
+
12
12
  /**
13
13
  * 设置错误触发器实例(错误采集模式下由 init.ts 调用)
14
14
  */
@@ -25,208 +25,103 @@ export function getErrorTrigger() {
25
25
 
26
26
  // 错误数据发送函数 - 使用 rrweb 的自定义事件功能
27
27
  export var sendErrorToAnalytics = function sendErrorToAnalytics(data) {
28
- var config = getConfig();
29
-
30
- // 如果错误处理未启用,直接返回
31
- if (!config.error) {
32
- return;
33
- }
34
-
35
28
  // 使用 rrweb 的自定义事件功能上报错误
36
29
  try {
37
30
  record.addCustomEvent('custom-error-event', data);
38
31
  } catch (error) {
39
32
  // 降级方案:直接控制台输出
40
- logger.log('Error captured', data);
33
+ logger.error('Error captured', data);
41
34
  }
42
35
 
43
36
  // 错误采集模式下,通知错误触发器
37
+ var config = getConfig();
44
38
  if (config.captureMode === 'error' && errorTriggerInstance) {
45
- var errorType = mapErrorType(data.type);
46
- if (errorType) {
47
- errorTriggerInstance.onError({
48
- type: errorType,
49
- message: data.message || data.type,
50
- timestamp: data.timestamp || Date.now(),
51
- detail: data
52
- });
53
- }
39
+ errorTriggerInstance.onError({
40
+ type: data.type,
41
+ message: data.message || data.type,
42
+ timestamp: data.timestamp || Date.now(),
43
+ detail: data
44
+ });
54
45
  }
55
46
  };
56
47
 
57
- // 初始化错误处理
58
- export function initErrorHandler() {
59
- var config = getConfig();
60
-
61
- // 如果错误处理未启用,不注册任何事件监听器
62
- if (!config.error) {
63
- logger.log('Error handling is disabled by config');
64
- return;
65
- }
66
- logger.log('Error handling is enabled');
67
-
68
- // JavaScript 运行时错误处理
69
- var errorHandler = function errorHandler(event) {
70
- var errorEvent = event;
71
- // 检查是否是资源加载错误
72
- if (event.target !== window) {
73
- // 资源加载错误
74
- var _errorData = {
75
- type: 'RESOURCE_ERROR',
76
- resourceType: event.target.tagName,
77
- url: event.target.src || event.target.href || event.target.src,
78
- message: errorEvent.message,
79
- userAgent: navigator.userAgent,
80
- timestamp: Date.now(),
81
- location: window.location.href
82
- };
83
- sendErrorToAnalytics(_errorData);
84
- return false;
85
- }
86
-
87
- // JavaScript 运行时错误
88
- var message = errorEvent.message,
89
- filename = errorEvent.filename,
90
- lineno = errorEvent.lineno,
91
- colno = errorEvent.colno,
92
- error = errorEvent.error;
93
- var errorData = {
94
- type: 'JS_ERROR',
95
- message: message,
96
- file: filename,
97
- line: lineno,
98
- column: colno,
99
- stack: error === null || error === void 0 ? void 0 : error.stack,
48
+ /**
49
+ * JavaScript 运行时错误 & 资源加载错误处理
50
+ */
51
+ function handleError(event) {
52
+ var errorEvent = event;
53
+
54
+ // 检查是否是资源加载错误
55
+ if (event.target !== window) {
56
+ var _errorData = {
57
+ type: 'RESOURCE_ERROR',
58
+ resourceType: event.target.tagName,
59
+ url: event.target.src || event.target.href || event.target.src,
60
+ message: errorEvent.message,
100
61
  userAgent: navigator.userAgent,
101
62
  timestamp: Date.now(),
102
63
  location: window.location.href
103
64
  };
104
- sendErrorToAnalytics(errorData);
105
-
106
- // 控制台保留原始错误显示
65
+ sendErrorToAnalytics(_errorData);
107
66
  return false;
108
- };
109
- window.addEventListener('error', errorHandler, true);
110
- eventListeners.push({
111
- target: window,
112
- type: 'error',
113
- listener: errorHandler,
114
- options: true
115
- });
67
+ }
116
68
 
117
- // 拦截未处理的 Promise 错误
118
- var unhandledRejectionHandler = function unhandledRejectionHandler(event) {
119
- var rejectionEvent = event;
120
- var reason = rejectionEvent.reason || 'Unknown rejection';
121
- var errorData = {
122
- type: 'PROMISE_REJECTION',
123
- message: typeof reason === 'string' ? reason : reason.message,
124
- stack: _typeof(reason) === 'object' ? reason.stack : null,
125
- timestamp: Date.now(),
126
- location: window.location.href
127
- };
128
- sendErrorToAnalytics(errorData);
129
- // 阻止默认控制台报错
130
- event.preventDefault();
69
+ // JavaScript 运行时错误
70
+ var message = errorEvent.message,
71
+ filename = errorEvent.filename,
72
+ lineno = errorEvent.lineno,
73
+ colno = errorEvent.colno,
74
+ error = errorEvent.error;
75
+ var errorData = {
76
+ type: 'JS_ERROR',
77
+ message: message,
78
+ file: filename,
79
+ line: lineno,
80
+ column: colno,
81
+ stack: error === null || error === void 0 ? void 0 : error.stack,
82
+ userAgent: navigator.userAgent,
83
+ timestamp: Date.now(),
84
+ location: window.location.href
131
85
  };
132
- window.addEventListener('unhandledrejection', unhandledRejectionHandler);
133
- eventListeners.push({
134
- target: window,
135
- type: 'unhandledrejection',
136
- listener: unhandledRejectionHandler
137
- });
86
+ sendErrorToAnalytics(errorData);
138
87
 
139
- // 监控页面性能相关事件
140
- var loadHandler = function loadHandler() {
141
- sendErrorToAnalytics({
142
- type: 'PAGE_LOAD',
143
- url: window.location.href,
144
- timestamp: Date.now()
145
- });
146
- };
147
- window.addEventListener('load', loadHandler);
148
- eventListeners.push({
149
- target: window,
150
- type: 'load',
151
- listener: loadHandler
152
- });
88
+ // 控制台保留原始错误显示
89
+ return false;
90
+ }
153
91
 
154
- // 监控页面卸载事件
155
- var beforeUnloadHandler = function beforeUnloadHandler() {
156
- sendErrorToAnalytics({
157
- type: 'PAGE_UNLOAD',
158
- url: window.location.href,
159
- timestamp: Date.now()
160
- });
92
+ /**
93
+ * 未处理的 Promise 错误处理
94
+ */
95
+ function handleUnhandledRejection(event) {
96
+ var rejectionEvent = event;
97
+ var reason = rejectionEvent.reason || 'Unknown rejection';
98
+ var errorData = {
99
+ type: 'PROMISE_REJECTION',
100
+ message: typeof reason === 'string' ? reason : reason.message,
101
+ stack: _typeof(reason) === 'object' ? reason.stack : null,
102
+ timestamp: Date.now(),
103
+ location: window.location.href
161
104
  };
162
- window.addEventListener('beforeunload', beforeUnloadHandler);
163
- eventListeners.push({
164
- target: window,
165
- type: 'beforeunload',
166
- listener: beforeUnloadHandler
167
- });
105
+ sendErrorToAnalytics(errorData);
106
+ // 阻止默认控制台报错
107
+ event.preventDefault();
108
+ }
168
109
 
169
- // 监控网络连接状态变化
170
- var onlineHandler = function onlineHandler() {
171
- sendErrorToAnalytics({
172
- type: 'NETWORK_ONLINE',
173
- timestamp: Date.now()
174
- });
175
- };
176
- window.addEventListener('online', onlineHandler);
177
- eventListeners.push({
178
- target: window,
179
- type: 'online',
180
- listener: onlineHandler
181
- });
182
- var offlineHandler = function offlineHandler() {
183
- sendErrorToAnalytics({
184
- type: 'NETWORK_OFFLINE',
185
- timestamp: Date.now()
186
- });
187
- };
188
- window.addEventListener('offline', offlineHandler);
189
- eventListeners.push({
190
- target: window,
191
- type: 'offline',
192
- listener: offlineHandler
193
- });
110
+ // 初始化错误处理
111
+ export function initErrorHandler() {
112
+ if (isInitialized) return;
113
+ logger.log('Error handling is enabled');
114
+ window.addEventListener('error', handleError, true);
115
+ window.addEventListener('unhandledrejection', handleUnhandledRejection);
116
+ isInitialized = true;
194
117
  }
195
118
 
196
119
  // 清理错误监听器
197
120
  export function cleanupErrorHandler() {
121
+ if (!isInitialized) return;
198
122
  logger.log('Cleaning up error handlers');
199
-
200
- // 移除所有注册的事件监听器
201
- eventListeners.forEach(function (_ref) {
202
- var target = _ref.target,
203
- type = _ref.type,
204
- listener = _ref.listener,
205
- options = _ref.options;
206
- try {
207
- target.removeEventListener(type, listener, options);
208
- } catch (error) {
209
- logger.warn("Failed to remove event listener for ".concat(type), error);
210
- }
211
- });
212
-
213
- // 清空监听器数组
214
- eventListeners.length = 0;
123
+ window.removeEventListener('error', handleError, true);
124
+ window.removeEventListener('unhandledrejection', handleUnhandledRejection);
125
+ isInitialized = false;
215
126
  logger.log('Error handlers cleaned up successfully');
216
- }
217
-
218
- /**
219
- * 将内部错误类型映射到 ErrorTrigger 的错误类型
220
- */
221
- function mapErrorType(internalType) {
222
- switch (internalType) {
223
- case 'JS_ERROR':
224
- return 'js';
225
- case 'PROMISE_REJECTION':
226
- return 'promise';
227
- case 'RESOURCE_ERROR':
228
- return 'resource';
229
- default:
230
- return null;
231
- }
232
127
  }
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/lib/init.ts"],"names":[],"mappings":"AAqBA;;;;GAIG;AACH,wBAAgB,UAAU,CACxB,OAAO,GAAE;IAAE,SAAS,CAAC,EAAE,OAAO,CAAA;CAAO,EACrC,OAAO,GAAE,MAAuB,GAC/B,IAAI,CAiDN;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CACtB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,YAAY,CAAC,EAAE,MAAM,GACpB,IAAI,CAgEN"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/lib/init.ts"],"names":[],"mappings":"AAqBA;;;;GAIG;AACH,wBAAgB,UAAU,CACxB,OAAO,GAAE;IAAE,SAAS,CAAC,EAAE,OAAO,CAAA;CAAO,EACrC,OAAO,GAAE,MAAuB,GAC/B,IAAI,CAiDN;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CACtB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,YAAY,CAAC,EAAE,MAAM,GACpB,IAAI,CAiEN"}
@@ -1,5 +1,5 @@
1
1
  import { startRecord, stopRecord } from "./rrweb";
2
- import { initConfigManager, getConfig, updateConfig } from "./config";
2
+ import { initConfigManager, getConfig } from "./config";
3
3
  import { startUploadLoop, resetUploadLoop, cancelUploadLoop } from "./uploader";
4
4
  import { initRouterMonitor, stopRouterMonitor } from "./router-monitor";
5
5
  import { initErrorHandler, cleanupErrorHandler, setErrorTrigger } from "./error";
@@ -97,6 +97,7 @@ export function initRLog(serv, appId, cdnConfigUrl) {
97
97
 
98
98
  // 初始化配置管理器
99
99
  initConfigManager(cdnConfigUrl).then(function () {
100
+ var _config$error;
100
101
  // 获取配置
101
102
  var config = getConfig();
102
103
 
@@ -107,22 +108,14 @@ export function initRLog(serv, appId, cdnConfigUrl) {
107
108
  }
108
109
  var isErrorMode = config.captureMode === 'error';
109
110
  if (isErrorMode) {
110
- var _config$errorCapture, _config$errorCapture2, _config$errorCapture3;
111
+ var _config$errorCapture, _config$errorCapture2;
111
112
  // ===== 错误采集模式初始化 =====
112
113
  logger.log('Initializing in error capture mode');
113
114
 
114
- // 强制启用错误监听
115
- if (!config.error) {
116
- updateConfig({
117
- error: true
118
- });
119
- }
120
-
121
115
  // 创建 ErrorTrigger 实例(只负责状态切换)
122
116
  errorTriggerInstance = new ErrorTrigger({
123
117
  beforeDuration: (_config$errorCapture = config.errorCapture) === null || _config$errorCapture === void 0 ? void 0 : _config$errorCapture.beforeDuration,
124
- afterDuration: (_config$errorCapture2 = config.errorCapture) === null || _config$errorCapture2 === void 0 ? void 0 : _config$errorCapture2.afterDuration,
125
- triggerErrors: (_config$errorCapture3 = config.errorCapture) === null || _config$errorCapture3 === void 0 ? void 0 : _config$errorCapture3.triggerErrors
118
+ afterDuration: (_config$errorCapture2 = config.errorCapture) === null || _config$errorCapture2 === void 0 ? void 0 : _config$errorCapture2.afterDuration
126
119
  });
127
120
 
128
121
  // 将 errorTrigger 注入到 error 和 net 模块
@@ -141,8 +134,15 @@ export function initRLog(serv, appId, cdnConfigUrl) {
141
134
  // 初始化路由监控
142
135
  initRouterMonitor(config.routerMonitor);
143
136
 
144
- // 初始化错误处理(错误模式下 config.error 已强制为 true)
145
- initErrorHandler();
137
+ // 判断是否启用错误监听上报:
138
+ // 1. 错误采集模式下强制启用(错误捕获模式必须依赖错误监听初始化)
139
+ // 2. 非错误模式下,根据用户 error 配置决定,默认不启用
140
+ var enableError = isErrorMode || ((_config$error = config.error) !== null && _config$error !== void 0 ? _config$error : false);
141
+ if (enableError) {
142
+ initErrorHandler();
143
+ } else {
144
+ logger.log('Error handling is disabled by config');
145
+ }
146
146
  }).catch(function (error) {
147
147
  logger.error('Failed to initialize SDK', error);
148
148
  });
@@ -34,4 +34,9 @@ export declare function getSdkLogEndpoint(): string | null;
34
34
  * @param headers 需要添加的自定义请求头对象
35
35
  */
36
36
  export declare function setCustomHeaders(headers: Record<string, string>): void;
37
+ /**
38
+ * 获取当前设置的自定义请求头
39
+ * @returns 当前自定义请求头的副本
40
+ */
41
+ export declare function getCustomHeaders(): Record<string, string>;
37
42
  //# sourceMappingURL=net.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"net.d.ts","sourceRoot":"","sources":["../../../src/lib/net.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAM/C;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,GAAG,IAAI,CAErE;AA2ID,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAgBpD;AAUD,wBAAgB,QAAQ,CAAC,CAAC,EAAE,OAAO,MAAM,QAkPxC;AAGD,wBAAgB,UAAU,IAAI,IAAI,CAYjC;AAGD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAQrD;AAED,wBAAgB,gBAAgB,IAAI,MAAM,EAAE,CAE3C;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAOrD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,EAAE,CAE3C;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAsBxD;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,GAAG,IAAI,CAEjD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAEtE"}
1
+ {"version":3,"file":"net.d.ts","sourceRoot":"","sources":["../../../src/lib/net.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAM/C;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,GAAG,IAAI,CAErE;AA2ID,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAgBpD;AAiCD,wBAAgB,QAAQ,CAAC,CAAC,EAAE,OAAO,MAAM,QAsPxC;AAGD,wBAAgB,UAAU,IAAI,IAAI,CAiBjC;AAGD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAQrD;AAED,wBAAgB,gBAAgB,IAAI,MAAM,EAAE,CAE3C;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAOrD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,EAAE,CAE3C;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAsBxD;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,GAAG,IAAI,CAEjD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAEtE;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAEzD"}
@@ -13,6 +13,7 @@ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o =
13
13
  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; }
14
14
  function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
15
15
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
16
+ import { record } from 'rrweb';
16
17
  import { getConfig } from "./config";
17
18
  import logger from "./logger";
18
19
 
@@ -153,6 +154,28 @@ export function shouldRecordUrl(url) {
153
154
  return isUrlInWhitelist(url, whiteListUrls);
154
155
  }
155
156
 
157
+ // 网络状态变化事件处理
158
+ function handleOnline() {
159
+ try {
160
+ record.addCustomEvent('network-status', {
161
+ type: 'NETWORK_ONLINE',
162
+ timestamp: Date.now()
163
+ });
164
+ } catch (error) {
165
+ logger.warn('Failed to add NETWORK_ONLINE event (recording may have stopped)', error);
166
+ }
167
+ }
168
+ function handleOffline() {
169
+ try {
170
+ record.addCustomEvent('network-status', {
171
+ type: 'NETWORK_OFFLINE',
172
+ timestamp: Date.now()
173
+ });
174
+ } catch (error) {
175
+ logger.warn('Failed to add NETWORK_OFFLINE event (recording may have stopped)', error);
176
+ }
177
+ }
178
+
156
179
  // 存储原始方法
157
180
  var origOpen = XMLHttpRequest.prototype.open;
158
181
  var origSend = XMLHttpRequest.prototype.send;
@@ -387,6 +410,10 @@ export function watchXhr(r) {
387
410
  return _ref3.apply(this, arguments);
388
411
  };
389
412
  }();
413
+
414
+ // 监听网络连接状态变化
415
+ window.addEventListener('online', handleOnline);
416
+ window.addEventListener('offline', handleOffline);
390
417
  }
391
418
 
392
419
  // 恢复原始方法
@@ -400,6 +427,10 @@ export function restoreXhr() {
400
427
  if (origFetch) {
401
428
  window.fetch = origFetch;
402
429
  }
430
+
431
+ // 移除网络状态监听器
432
+ window.removeEventListener('online', handleOnline);
433
+ window.removeEventListener('offline', handleOffline);
403
434
  isHooked = false;
404
435
  logger.log('Network monitoring restored');
405
436
  }
@@ -478,4 +509,12 @@ export function getSdkLogEndpoint() {
478
509
  */
479
510
  export function setCustomHeaders(headers) {
480
511
  Object.assign(customHeaders, headers);
512
+ }
513
+
514
+ /**
515
+ * 获取当前设置的自定义请求头
516
+ * @returns 当前自定义请求头的副本
517
+ */
518
+ export function getCustomHeaders() {
519
+ return _objectSpread({}, customHeaders);
481
520
  }
@@ -1 +1 @@
1
- {"version":3,"file":"router-monitor.d.ts","sourceRoot":"","sources":["../../../src/lib/router-monitor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,KAAK,SAAS,EAAa,MAAM,UAAU,CAAC;AAIrD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,cAAc,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,WAAW,GAAG,cAAc,GAAG,UAAU,GAAG,YAAY,CAAC;IACjE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AA2JD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,CAAC,eAAe,CAAC,GAAG,IAAI,CAwB3E;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC,eAAe,CAAC,QAmCpE;AAED;;GAEG;AACH,wBAAgB,mBAAmB;;;;EAMlC;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,QAG1D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,SAyBhC"}
1
+ {"version":3,"file":"router-monitor.d.ts","sourceRoot":"","sources":["../../../src/lib/router-monitor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,KAAK,SAAS,EAAa,MAAM,UAAU,CAAC;AAIrD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,cAAc,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,WAAW,GAAG,cAAc,GAAG,UAAU,GAAG,YAAY,CAAC;IACjE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AA2ID;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,CAAC,eAAe,CAAC,GAAG,IAAI,CAuB3E;AAuFD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC,eAAe,CAAC,QA4CpE;AAED;;GAEG;AACH,wBAAgB,mBAAmB;;;;EAMlC;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,QAG1D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,SA8BhC"}