@antglobal/rlog-sdk 0.0.1755855517-dev.11 → 0.0.1755855517-dev.13
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/dist/esm/lib/api.d.ts +10 -0
- package/dist/esm/lib/api.d.ts.map +1 -1
- package/dist/esm/lib/api.js +47 -31
- package/dist/esm/lib/config.d.ts +1 -0
- package/dist/esm/lib/config.d.ts.map +1 -1
- package/dist/esm/lib/config.js +2 -0
- package/dist/esm/lib/error.d.ts.map +1 -1
- package/dist/esm/lib/error.js +65 -138
- package/dist/esm/lib/init.d.ts.map +1 -1
- package/dist/esm/lib/init.js +14 -7
- package/dist/esm/lib/net.d.ts +1 -0
- package/dist/esm/lib/net.d.ts.map +1 -1
- package/dist/esm/lib/net.js +33 -2
- package/dist/esm/lib/router-monitor.d.ts.map +1 -1
- package/dist/esm/lib/router-monitor.js +100 -0
- 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 +58 -10
- 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 +48 -31
- package/dist/lib/lib/config.d.ts +1 -0
- package/dist/lib/lib/config.d.ts.map +1 -1
- package/dist/lib/lib/config.js +2 -0
- package/dist/lib/lib/error.d.ts.map +1 -1
- package/dist/lib/lib/error.js +65 -138
- package/dist/lib/lib/init.d.ts.map +1 -1
- package/dist/lib/lib/init.js +13 -6
- package/dist/lib/lib/net.d.ts +1 -0
- package/dist/lib/lib/net.d.ts.map +1 -1
- package/dist/lib/lib/net.js +33 -1
- package/dist/lib/lib/router-monitor.d.ts.map +1 -1
- package/dist/lib/lib/router-monitor.js +100 -0
- 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 +58 -10
- package/dist/rlog-sdk.min.js +1 -1
- package/package.json +3 -2
package/dist/esm/lib/api.d.ts
CHANGED
|
@@ -4,6 +4,16 @@ type UploadOptions = {
|
|
|
4
4
|
deviceId: string;
|
|
5
5
|
appId: string;
|
|
6
6
|
};
|
|
7
|
+
/**
|
|
8
|
+
* 构建上传查询参数(纯函数,供 Worker 管理器复用)
|
|
9
|
+
* @param opts 包含 appId、deviceId、data 的选项
|
|
10
|
+
* @returns 查询参数键值对
|
|
11
|
+
*/
|
|
12
|
+
export declare function buildQueryParams(opts: {
|
|
13
|
+
appId: string;
|
|
14
|
+
deviceId: string;
|
|
15
|
+
data: any[];
|
|
16
|
+
}): Record<string, string>;
|
|
7
17
|
export declare const upload: (opt: UploadOptions) => Promise<void>;
|
|
8
18
|
export {};
|
|
9
19
|
//# sourceMappingURL=api.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../src/lib/api.ts"],"names":[],"mappings":"AAKA,KAAK,aAAa,GAAG;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAqBF,eAAO,MAAM,MAAM,QAAe,aAAa,
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../src/lib/api.ts"],"names":[],"mappings":"AAKA,KAAK,aAAa,GAAG;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAqBF;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,GAAG,EAAE,CAAC;CACb,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAyBzB;AAED,eAAO,MAAM,MAAM,QAAe,aAAa,kBAsC9C,CAAC"}
|
package/dist/esm/lib/api.js
CHANGED
|
@@ -23,32 +23,48 @@ var cacheUrlParams = function cacheUrlParams() {
|
|
|
23
23
|
var getCachedParam = function getCachedParam(paramName) {
|
|
24
24
|
return sessionStorage.getItem("rlog-".concat(paramName));
|
|
25
25
|
};
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* 构建上传查询参数(纯函数,供 Worker 管理器复用)
|
|
29
|
+
* @param opts 包含 appId、deviceId、data 的选项
|
|
30
|
+
* @returns 查询参数键值对
|
|
31
|
+
*/
|
|
32
|
+
export function buildQueryParams(opts) {
|
|
33
|
+
var _opts$data, _opts$data2;
|
|
34
|
+
// 缓存URL中的参数
|
|
35
|
+
cacheUrlParams();
|
|
36
|
+
var lastIndex = opts.data && opts.data.length > 0 ? opts.data.length - 1 : -1;
|
|
37
|
+
var queryParams = {
|
|
38
|
+
deviceId: opts.deviceId,
|
|
39
|
+
appId: opts.appId,
|
|
40
|
+
startTime: (_opts$data = opts.data) === null || _opts$data === void 0 || (_opts$data = _opts$data[0]) === null || _opts$data === void 0 ? void 0 : _opts$data.timestamp,
|
|
41
|
+
endTime: (_opts$data2 = opts.data) === null || _opts$data2 === void 0 || (_opts$data2 = _opts$data2[lastIndex]) === null || _opts$data2 === void 0 ? void 0 : _opts$data2.timestamp
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
// 从配置中获取需要上报的参数名称列表
|
|
45
|
+
var config = getConfig();
|
|
46
|
+
var paramsToReport = config.urlParamsToCache || ['taskId']; // 默认上报taskId
|
|
47
|
+
|
|
48
|
+
// 添加缓存的参数到查询字符串中
|
|
49
|
+
paramsToReport.forEach(function (paramName) {
|
|
50
|
+
var paramValue = getCachedParam(paramName);
|
|
51
|
+
if (paramValue) {
|
|
52
|
+
queryParams[paramName] = paramValue;
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
return queryParams;
|
|
56
|
+
}
|
|
26
57
|
export var upload = /*#__PURE__*/function () {
|
|
27
58
|
var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(opt) {
|
|
28
|
-
var
|
|
29
|
-
var lastIndex, queryParams, config, paramsToReport, queryString, api, formData, customHeaders, response, responseData, error;
|
|
59
|
+
var queryParams, queryString, api, formData, customHeaders, response, responseData, error;
|
|
30
60
|
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
31
61
|
while (1) switch (_context.prev = _context.next) {
|
|
32
62
|
case 0:
|
|
33
|
-
//
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
// 构建查询字符串
|
|
37
|
-
lastIndex = opt.data && opt.data.length > 0 ? opt.data.length - 1 : -1;
|
|
38
|
-
queryParams = {
|
|
39
|
-
deviceId: opt.deviceId,
|
|
63
|
+
// 构建查询参数
|
|
64
|
+
queryParams = buildQueryParams({
|
|
40
65
|
appId: opt.appId,
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
}; // 从配置中获取需要上报的参数名称列表
|
|
44
|
-
config = getConfig();
|
|
45
|
-
paramsToReport = config.urlParamsToCache || ['taskId']; // 默认上报taskId
|
|
46
|
-
// 添加缓存的参数到查询字符串中
|
|
47
|
-
paramsToReport.forEach(function (paramName) {
|
|
48
|
-
var paramValue = getCachedParam(paramName);
|
|
49
|
-
if (paramValue) {
|
|
50
|
-
queryParams[paramName] = paramValue;
|
|
51
|
-
}
|
|
66
|
+
deviceId: opt.deviceId,
|
|
67
|
+
data: opt.data
|
|
52
68
|
});
|
|
53
69
|
queryString = new URLSearchParams(queryParams);
|
|
54
70
|
api = "".concat(opt.url).concat(queryString ? "?".concat(queryString) : '');
|
|
@@ -57,33 +73,33 @@ export var upload = /*#__PURE__*/function () {
|
|
|
57
73
|
|
|
58
74
|
// 获取自定义请求头
|
|
59
75
|
customHeaders = getCustomHeaders();
|
|
60
|
-
_context.next =
|
|
76
|
+
_context.next = 8;
|
|
61
77
|
return post(api, formData, {
|
|
62
78
|
headers: customHeaders
|
|
63
79
|
});
|
|
64
|
-
case
|
|
80
|
+
case 8:
|
|
65
81
|
response = _context.sent;
|
|
66
|
-
_context.prev =
|
|
82
|
+
_context.prev = 9;
|
|
67
83
|
responseData = typeof response.data === 'string' ? JSON.parse(response.data) : response.data;
|
|
68
|
-
_context.next =
|
|
84
|
+
_context.next = 16;
|
|
69
85
|
break;
|
|
70
|
-
case
|
|
71
|
-
_context.prev =
|
|
72
|
-
_context.t0 = _context["catch"](
|
|
86
|
+
case 13:
|
|
87
|
+
_context.prev = 13;
|
|
88
|
+
_context.t0 = _context["catch"](9);
|
|
73
89
|
return _context.abrupt("return");
|
|
74
|
-
case
|
|
90
|
+
case 16:
|
|
75
91
|
if (!(responseData && _typeof(responseData) === 'object' && responseData.success === false)) {
|
|
76
|
-
_context.next =
|
|
92
|
+
_context.next = 20;
|
|
77
93
|
break;
|
|
78
94
|
}
|
|
79
95
|
error = new Error(responseData.errorMessage || 'Upload failed with success=false'); // 将完整的响应数据附加到错误对象上
|
|
80
96
|
error.responseData = responseData;
|
|
81
97
|
throw error;
|
|
82
|
-
case
|
|
98
|
+
case 20:
|
|
83
99
|
case "end":
|
|
84
100
|
return _context.stop();
|
|
85
101
|
}
|
|
86
|
-
}, _callee, null, [[
|
|
102
|
+
}, _callee, null, [[9, 13]]);
|
|
87
103
|
}));
|
|
88
104
|
return function upload(_x) {
|
|
89
105
|
return _ref.apply(this, arguments);
|
package/dist/esm/lib/config.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/lib/config.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,mBAAmB;IAElC,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB,KAAK,CAAC,EAAE,CACJ,QAAQ,GACR,OAAO,GACP,OAAO,GACP,YAAY,GACZ,OAAO,GACP,KAAK,GACL,QAAQ,GACR,OAAO,GACP,OAAO,GACP,gBAAgB,GAChB,UAAU,GACV,MAAM,GACN,KAAK,GACL,OAAO,GACP,MAAM,GACN,SAAS,GACT,SAAS,GACT,OAAO,GACP,MAAM,CACT,EAAE,CAAC;IAEJ,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB,gBAAgB,CAAC,EAAE;QAEjB,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAE3B,cAAc,CAAC,EAAE,MAAM,CAAC;QAExB,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;CACH;AAGD,MAAM,WAAW,kBAAkB;IAEjC,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAGD,MAAM,WAAW,SAAS;IAExB,MAAM,EAAE,OAAO,CAAC;IAEhB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,QAAQ,CAAC,EAAE;QAET,MAAM,CAAC,EAAE,MAAM,CAAC;QAEhB,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QAE7B,MAAM,CAAC,EAAE,MAAM,CAAC;QAEhB,KAAK,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;KACxB,CAAC;IAGF,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAE9B,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB,cAAc,EAAE,MAAM,CAAC;IAEvB,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAG5B,wBAAwB,CAAC,EAAE,OAAO,CAAC;IAGnC,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAG9B,IAAI,CAAC,EAAE,OAAO,CAAC;IAGf,aAAa,CAAC,EAAE;QACd,MAAM,CAAC,EAAE,OAAO,CAAC;QAEjB,eAAe,CAAC,EAAE,OAAO,CAAC;QAC1B,kBAAkB,CAAC,EAAE,OAAO,CAAC;QAC7B,iBAAiB,CAAC,EAAE,OAAO,CAAC;QAC5B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;KACzB,CAAC;IAGF,UAAU,CAAC,EAAE,OAAO,CAAC;IAGrB,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAG/B,YAAY,CAAC,EAAE,kBAAkB,CAAC;CACnC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/lib/config.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,mBAAmB;IAElC,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB,KAAK,CAAC,EAAE,CACJ,QAAQ,GACR,OAAO,GACP,OAAO,GACP,YAAY,GACZ,OAAO,GACP,KAAK,GACL,QAAQ,GACR,OAAO,GACP,OAAO,GACP,gBAAgB,GAChB,UAAU,GACV,MAAM,GACN,KAAK,GACL,OAAO,GACP,MAAM,GACN,SAAS,GACT,SAAS,GACT,OAAO,GACP,MAAM,CACT,EAAE,CAAC;IAEJ,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB,gBAAgB,CAAC,EAAE;QAEjB,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAE3B,cAAc,CAAC,EAAE,MAAM,CAAC;QAExB,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;CACH;AAGD,MAAM,WAAW,kBAAkB;IAEjC,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAGD,MAAM,WAAW,SAAS;IAExB,MAAM,EAAE,OAAO,CAAC;IAEhB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,QAAQ,CAAC,EAAE;QAET,MAAM,CAAC,EAAE,MAAM,CAAC;QAEhB,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QAE7B,MAAM,CAAC,EAAE,MAAM,CAAC;QAEhB,KAAK,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;KACxB,CAAC;IAGF,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAE9B,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB,cAAc,EAAE,MAAM,CAAC;IAEvB,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAG5B,wBAAwB,CAAC,EAAE,OAAO,CAAC;IAGnC,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAG9B,IAAI,CAAC,EAAE,OAAO,CAAC;IAGf,aAAa,CAAC,EAAE;QACd,MAAM,CAAC,EAAE,OAAO,CAAC;QAEjB,eAAe,CAAC,EAAE,OAAO,CAAC;QAC1B,kBAAkB,CAAC,EAAE,OAAO,CAAC;QAC7B,iBAAiB,CAAC,EAAE,OAAO,CAAC;QAC5B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;KACzB,CAAC;IAGF,UAAU,CAAC,EAAE,OAAO,CAAC;IAGrB,KAAK,CAAC,EAAE,OAAO,CAAC;IAGhB,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAG/B,YAAY,CAAC,EAAE,kBAAkB,CAAC;CACnC;AA+CD;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAuC3E;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,IAAI,CAEhE;AAED;;;GAGG;AACH,wBAAgB,SAAS,IAAI,SAAS,CAErC;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAoBtE"}
|
package/dist/esm/lib/config.js
CHANGED
|
@@ -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
|
*/
|
|
@@ -45,156 +45,83 @@ export var sendErrorToAnalytics = function sendErrorToAnalytics(data) {
|
|
|
45
45
|
}
|
|
46
46
|
};
|
|
47
47
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
url: event.target.src || event.target.href || event.target.src,
|
|
62
|
-
message: errorEvent.message,
|
|
63
|
-
userAgent: navigator.userAgent,
|
|
64
|
-
timestamp: Date.now(),
|
|
65
|
-
location: window.location.href
|
|
66
|
-
};
|
|
67
|
-
sendErrorToAnalytics(_errorData);
|
|
68
|
-
return false;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
// JavaScript 运行时错误
|
|
72
|
-
var message = errorEvent.message,
|
|
73
|
-
filename = errorEvent.filename,
|
|
74
|
-
lineno = errorEvent.lineno,
|
|
75
|
-
colno = errorEvent.colno,
|
|
76
|
-
error = errorEvent.error;
|
|
77
|
-
var errorData = {
|
|
78
|
-
type: 'JS_ERROR',
|
|
79
|
-
message: message,
|
|
80
|
-
file: filename,
|
|
81
|
-
line: lineno,
|
|
82
|
-
column: colno,
|
|
83
|
-
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,
|
|
84
61
|
userAgent: navigator.userAgent,
|
|
85
62
|
timestamp: Date.now(),
|
|
86
63
|
location: window.location.href
|
|
87
64
|
};
|
|
88
|
-
sendErrorToAnalytics(
|
|
89
|
-
|
|
90
|
-
// 控制台保留原始错误显示
|
|
65
|
+
sendErrorToAnalytics(_errorData);
|
|
91
66
|
return false;
|
|
92
|
-
}
|
|
93
|
-
window.addEventListener('error', errorHandler, true);
|
|
94
|
-
eventListeners.push({
|
|
95
|
-
target: window,
|
|
96
|
-
type: 'error',
|
|
97
|
-
listener: errorHandler,
|
|
98
|
-
options: true
|
|
99
|
-
});
|
|
67
|
+
}
|
|
100
68
|
|
|
101
|
-
//
|
|
102
|
-
var
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
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
|
|
115
85
|
};
|
|
116
|
-
|
|
117
|
-
eventListeners.push({
|
|
118
|
-
target: window,
|
|
119
|
-
type: 'unhandledrejection',
|
|
120
|
-
listener: unhandledRejectionHandler
|
|
121
|
-
});
|
|
86
|
+
sendErrorToAnalytics(errorData);
|
|
122
87
|
|
|
123
|
-
//
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
type: 'PAGE_LOAD',
|
|
127
|
-
url: window.location.href,
|
|
128
|
-
timestamp: Date.now()
|
|
129
|
-
});
|
|
130
|
-
};
|
|
131
|
-
window.addEventListener('load', loadHandler);
|
|
132
|
-
eventListeners.push({
|
|
133
|
-
target: window,
|
|
134
|
-
type: 'load',
|
|
135
|
-
listener: loadHandler
|
|
136
|
-
});
|
|
88
|
+
// 控制台保留原始错误显示
|
|
89
|
+
return false;
|
|
90
|
+
}
|
|
137
91
|
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
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
|
|
145
104
|
};
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
listener: beforeUnloadHandler
|
|
151
|
-
});
|
|
105
|
+
sendErrorToAnalytics(errorData);
|
|
106
|
+
// 阻止默认控制台报错
|
|
107
|
+
event.preventDefault();
|
|
108
|
+
}
|
|
152
109
|
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
window.addEventListener('online', onlineHandler);
|
|
161
|
-
eventListeners.push({
|
|
162
|
-
target: window,
|
|
163
|
-
type: 'online',
|
|
164
|
-
listener: onlineHandler
|
|
165
|
-
});
|
|
166
|
-
var offlineHandler = function offlineHandler() {
|
|
167
|
-
sendErrorToAnalytics({
|
|
168
|
-
type: 'NETWORK_OFFLINE',
|
|
169
|
-
timestamp: Date.now()
|
|
170
|
-
});
|
|
171
|
-
};
|
|
172
|
-
window.addEventListener('offline', offlineHandler);
|
|
173
|
-
eventListeners.push({
|
|
174
|
-
target: window,
|
|
175
|
-
type: 'offline',
|
|
176
|
-
listener: offlineHandler
|
|
177
|
-
});
|
|
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;
|
|
178
117
|
}
|
|
179
118
|
|
|
180
119
|
// 清理错误监听器
|
|
181
120
|
export function cleanupErrorHandler() {
|
|
121
|
+
if (!isInitialized) return;
|
|
182
122
|
logger.log('Cleaning up error handlers');
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
var target = _ref.target,
|
|
187
|
-
type = _ref.type,
|
|
188
|
-
listener = _ref.listener,
|
|
189
|
-
options = _ref.options;
|
|
190
|
-
try {
|
|
191
|
-
target.removeEventListener(type, listener, options);
|
|
192
|
-
} catch (error) {
|
|
193
|
-
logger.warn("Failed to remove event listener for ".concat(type), error);
|
|
194
|
-
}
|
|
195
|
-
});
|
|
196
|
-
|
|
197
|
-
// 清空监听器数组
|
|
198
|
-
eventListeners.length = 0;
|
|
123
|
+
window.removeEventListener('error', handleError, true);
|
|
124
|
+
window.removeEventListener('unhandledrejection', handleUnhandledRejection);
|
|
125
|
+
isInitialized = false;
|
|
199
126
|
logger.log('Error handlers cleaned up successfully');
|
|
200
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,CAgEN"}
|
package/dist/esm/lib/init.js
CHANGED
|
@@ -3,7 +3,7 @@ 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";
|
|
6
|
-
import { setSdkLogEndpoint, restoreXhr, setNetErrorTrigger } from "./net";
|
|
6
|
+
import { setSdkLogEndpoint, restoreXhr, setNetErrorTrigger, normalizeUrl } from "./net";
|
|
7
7
|
import { storage } from "./storage-manager";
|
|
8
8
|
import { getDeviceId } from "./utils";
|
|
9
9
|
import { ErrorTrigger } from "./error-trigger";
|
|
@@ -91,12 +91,12 @@ export function initRLog(serv, appId, cdnConfigUrl) {
|
|
|
91
91
|
resetUploadLoop();
|
|
92
92
|
|
|
93
93
|
// 设置SDK日志上报接口地址,并自动加入黑名单避免循环上报
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
}
|
|
94
|
+
var normalizedServUrl = normalizeUrl(serv);
|
|
95
|
+
setSdkLogEndpoint(normalizedServUrl);
|
|
97
96
|
|
|
98
97
|
// 初始化配置管理器
|
|
99
98
|
initConfigManager(cdnConfigUrl).then(function () {
|
|
99
|
+
var _config$error;
|
|
100
100
|
// 获取配置
|
|
101
101
|
var config = getConfig();
|
|
102
102
|
|
|
@@ -128,13 +128,20 @@ export function initRLog(serv, appId, cdnConfigUrl) {
|
|
|
128
128
|
// 启动统一上传循环
|
|
129
129
|
// 错误模式下:idle 时跳过上传,uploading 时上传,状态由 ErrorTrigger 控制
|
|
130
130
|
// 全量模式下:持续轮询上传
|
|
131
|
-
startUploadLoop(
|
|
131
|
+
startUploadLoop(normalizedServUrl, appId);
|
|
132
132
|
|
|
133
133
|
// 初始化路由监控
|
|
134
134
|
initRouterMonitor(config.routerMonitor);
|
|
135
135
|
|
|
136
|
-
//
|
|
137
|
-
|
|
136
|
+
// 判断是否启用错误监听上报:
|
|
137
|
+
// 1. 错误采集模式下强制启用(错误捕获模式必须依赖错误监听初始化)
|
|
138
|
+
// 2. 非错误模式下,根据用户 error 配置决定,默认不启用
|
|
139
|
+
var enableError = isErrorMode || ((_config$error = config.error) !== null && _config$error !== void 0 ? _config$error : false);
|
|
140
|
+
if (enableError) {
|
|
141
|
+
initErrorHandler();
|
|
142
|
+
} else {
|
|
143
|
+
logger.log('Error handling is disabled by config');
|
|
144
|
+
}
|
|
138
145
|
}).catch(function (error) {
|
|
139
146
|
logger.error('Failed to initialize SDK', error);
|
|
140
147
|
});
|
package/dist/esm/lib/net.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ import { ErrorTrigger } from './error-trigger';
|
|
|
4
4
|
* 设置网络模块的错误触发器实例
|
|
5
5
|
*/
|
|
6
6
|
export declare function setNetErrorTrigger(trigger: ErrorTrigger | null): void;
|
|
7
|
+
export declare function normalizeUrl(url: string): string;
|
|
7
8
|
export declare function shouldRecordUrl(url: string): boolean;
|
|
8
9
|
export declare function watchXhr(r: typeof record): void;
|
|
9
10
|
export declare function restoreXhr(): void;
|
|
@@ -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;
|
|
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;AAgDD,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAmBhD;AAwED,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,CAoBxD;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
|
|
|
@@ -47,7 +48,7 @@ var sdkLogEndpoint = null;
|
|
|
47
48
|
var HEADERS_TO_EXTRACT = ['sky_trace_id', 'antbank-traceid'];
|
|
48
49
|
|
|
49
50
|
// 辅助函数:规范化URL路径
|
|
50
|
-
function normalizeUrl(url) {
|
|
51
|
+
export function normalizeUrl(url) {
|
|
51
52
|
try {
|
|
52
53
|
// 如果是完整URL,直接返回
|
|
53
54
|
if (url.startsWith('http://') || url.startsWith('https://')) {
|
|
@@ -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
|
}
|
|
@@ -448,7 +479,7 @@ export function setSdkLogEndpoint(endpoint) {
|
|
|
448
479
|
sdkLogEndpoint = endpoint;
|
|
449
480
|
|
|
450
481
|
// 规范化endpoint路径,确保相对路径也能正确匹配
|
|
451
|
-
var normalizedEndpoint = endpoint
|
|
482
|
+
var normalizedEndpoint = normalizeUrl(endpoint);
|
|
452
483
|
|
|
453
484
|
// 自动将SDK日志上报接口加入黑名单,避免循环上报
|
|
454
485
|
// 同时添加原始路径和规范化路径,确保兼容性
|
|
@@ -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;AA2ID;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,CAAC,eAAe,CAAC,GAAG,IAAI,CAuB3E;
|
|
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"}
|