@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.
- package/README.md +48 -8
- package/dist/esm/index.d.ts +10 -46
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +27 -70
- package/dist/esm/lib/api.d.ts +10 -0
- package/dist/esm/lib/api.d.ts.map +1 -1
- package/dist/esm/lib/api.js +54 -32
- package/dist/esm/lib/config.d.ts +2 -8
- package/dist/esm/lib/config.d.ts.map +1 -1
- package/dist/esm/lib/config.js +20 -18
- package/dist/esm/lib/error-trigger.d.ts +1 -3
- package/dist/esm/lib/error-trigger.d.ts.map +1 -1
- package/dist/esm/lib/error-trigger.js +1 -8
- package/dist/esm/lib/error.d.ts.map +1 -1
- package/dist/esm/lib/error.js +73 -178
- package/dist/esm/lib/init.d.ts.map +1 -1
- package/dist/esm/lib/init.js +13 -13
- package/dist/esm/lib/net.d.ts +5 -0
- package/dist/esm/lib/net.d.ts.map +1 -1
- package/dist/esm/lib/net.js +39 -0
- package/dist/esm/lib/router-monitor.d.ts.map +1 -1
- package/dist/esm/lib/router-monitor.js +110 -36
- package/dist/esm/lib/rrweb.d.ts.map +1 -1
- package/dist/esm/lib/rrweb.js +8 -8
- package/dist/esm/lib/upload-worker-manager.d.ts +37 -0
- package/dist/esm/lib/upload-worker-manager.d.ts.map +1 -0
- package/dist/esm/lib/upload-worker-manager.js +482 -0
- package/dist/esm/lib/upload-worker.d.ts +59 -0
- package/dist/esm/lib/upload-worker.d.ts.map +1 -0
- package/dist/esm/lib/upload-worker.js +26 -0
- package/dist/esm/lib/uploader.d.ts +5 -0
- package/dist/esm/lib/uploader.d.ts.map +1 -1
- package/dist/esm/lib/uploader.js +85 -29
- package/dist/lib/index.d.ts +10 -46
- package/dist/lib/index.d.ts.map +1 -1
- package/dist/lib/index.js +9 -58
- package/dist/lib/lib/api.d.ts +10 -0
- package/dist/lib/lib/api.d.ts.map +1 -1
- package/dist/lib/lib/api.js +55 -32
- package/dist/lib/lib/config.d.ts +2 -8
- package/dist/lib/lib/config.d.ts.map +1 -1
- package/dist/lib/lib/config.js +20 -18
- package/dist/lib/lib/error-trigger.d.ts +1 -3
- package/dist/lib/lib/error-trigger.d.ts.map +1 -1
- package/dist/lib/lib/error-trigger.js +1 -8
- package/dist/lib/lib/error.d.ts.map +1 -1
- package/dist/lib/lib/error.js +73 -178
- package/dist/lib/lib/init.d.ts.map +1 -1
- package/dist/lib/lib/init.js +12 -12
- package/dist/lib/lib/net.d.ts +5 -0
- package/dist/lib/lib/net.d.ts.map +1 -1
- package/dist/lib/lib/net.js +40 -0
- package/dist/lib/lib/router-monitor.d.ts.map +1 -1
- package/dist/lib/lib/router-monitor.js +110 -36
- package/dist/lib/lib/rrweb.d.ts.map +1 -1
- package/dist/lib/lib/rrweb.js +8 -8
- package/dist/lib/lib/upload-worker-manager.d.ts +37 -0
- package/dist/lib/lib/upload-worker-manager.d.ts.map +1 -0
- package/dist/lib/lib/upload-worker-manager.js +491 -0
- package/dist/lib/lib/upload-worker.d.ts +59 -0
- package/dist/lib/lib/upload-worker.d.ts.map +1 -0
- package/dist/lib/lib/upload-worker.js +32 -0
- package/dist/lib/lib/uploader.d.ts +5 -0
- package/dist/lib/lib/uploader.d.ts.map +1 -1
- package/dist/lib/lib/uploader.js +85 -29
- package/dist/rlog-sdk.min.js +1 -1
- package/package.json +3 -2
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
* 统一的上传逻辑由 uploader.ts 中的 startUploadLoop 处理。
|
|
22
22
|
*/
|
|
23
23
|
export interface ErrorInfo {
|
|
24
|
-
type:
|
|
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,
|
|
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
|
|
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;
|
|
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"}
|
package/dist/esm/lib/error.js
CHANGED
|
@@ -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.
|
|
33
|
+
logger.error('Error captured', data);
|
|
41
34
|
}
|
|
42
35
|
|
|
43
36
|
// 错误采集模式下,通知错误触发器
|
|
37
|
+
var config = getConfig();
|
|
44
38
|
if (config.captureMode === 'error' && errorTriggerInstance) {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
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
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
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(
|
|
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
|
-
//
|
|
118
|
-
var
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
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
|
-
|
|
133
|
-
eventListeners.push({
|
|
134
|
-
target: window,
|
|
135
|
-
type: 'unhandledrejection',
|
|
136
|
-
listener: unhandledRejectionHandler
|
|
137
|
-
});
|
|
86
|
+
sendErrorToAnalytics(errorData);
|
|
138
87
|
|
|
139
|
-
//
|
|
140
|
-
|
|
141
|
-
|
|
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
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
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
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
listener: beforeUnloadHandler
|
|
167
|
-
});
|
|
105
|
+
sendErrorToAnalytics(errorData);
|
|
106
|
+
// 阻止默认控制台报错
|
|
107
|
+
event.preventDefault();
|
|
108
|
+
}
|
|
168
109
|
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
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
|
-
|
|
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,
|
|
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"}
|
package/dist/esm/lib/init.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { startRecord, stopRecord } from "./rrweb";
|
|
2
|
-
import { initConfigManager, getConfig
|
|
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
|
|
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
|
-
//
|
|
145
|
-
|
|
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
|
});
|
package/dist/esm/lib/net.d.ts
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/esm/lib/net.js
CHANGED
|
@@ -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;
|
|
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"}
|