@antglobal/rlog-sdk 0.0.1755855517-dev.12 → 0.0.1755855517-dev.14
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/index.d.ts.map +1 -1
- package/dist/esm/index.js +11 -18
- package/dist/esm/lib/config.d.ts.map +1 -1
- package/dist/esm/lib/config.js +7 -5
- package/dist/esm/lib/init.d.ts.map +1 -1
- package/dist/esm/lib/init.js +4 -5
- package/dist/esm/lib/logger.d.ts +1 -1
- package/dist/esm/lib/logger.d.ts.map +1 -1
- package/dist/esm/lib/logger.js +16 -106
- 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 +2 -2
- package/dist/esm/lib/upload-worker-manager.d.ts +7 -1
- package/dist/esm/lib/upload-worker-manager.d.ts.map +1 -1
- package/dist/esm/lib/upload-worker-manager.js +62 -11
- package/dist/esm/lib/upload-worker.d.ts +0 -1
- package/dist/esm/lib/upload-worker.d.ts.map +1 -1
- package/dist/esm/lib/upload-worker.js +1 -1
- package/dist/esm/lib/uploader.d.ts.map +1 -1
- package/dist/esm/lib/uploader.js +15 -1
- package/dist/lib/index.d.ts.map +1 -1
- package/dist/lib/index.js +11 -18
- package/dist/lib/lib/config.d.ts.map +1 -1
- package/dist/lib/lib/config.js +6 -4
- package/dist/lib/lib/init.d.ts.map +1 -1
- package/dist/lib/lib/init.js +3 -4
- package/dist/lib/lib/logger.d.ts +1 -1
- package/dist/lib/lib/logger.d.ts.map +1 -1
- package/dist/lib/lib/logger.js +16 -106
- 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 +2 -1
- package/dist/lib/lib/upload-worker-manager.d.ts +7 -1
- package/dist/lib/lib/upload-worker-manager.d.ts.map +1 -1
- package/dist/lib/lib/upload-worker-manager.js +63 -11
- package/dist/lib/lib/upload-worker.d.ts +0 -1
- package/dist/lib/lib/upload-worker.d.ts.map +1 -1
- package/dist/lib/lib/upload-worker.js +1 -1
- package/dist/lib/lib/uploader.d.ts.map +1 -1
- package/dist/lib/lib/uploader.js +14 -0
- package/dist/rlog-sdk.min.js +1 -1
- package/package.json +1 -1
package/dist/lib/index.js
CHANGED
|
@@ -130,16 +130,6 @@ function toggleConsumeOnlyMode() {
|
|
|
130
130
|
return newMode;
|
|
131
131
|
}
|
|
132
132
|
function reportError(error) {
|
|
133
|
-
var config = (0, _config.getConfig)();
|
|
134
|
-
if (config.captureMode !== 'error') {
|
|
135
|
-
_logger.default.warn('reportError() is only available in error capture mode (captureMode: "error")');
|
|
136
|
-
return;
|
|
137
|
-
}
|
|
138
|
-
var trigger = (0, _error.getErrorTrigger)();
|
|
139
|
-
if (!trigger) {
|
|
140
|
-
_logger.default.warn('reportError() called but error trigger is not initialized');
|
|
141
|
-
return;
|
|
142
|
-
}
|
|
143
133
|
var message = typeof error === 'string' ? error : error.message;
|
|
144
134
|
var stack = _typeof(error) === 'object' && error.stack ? error.stack : undefined;
|
|
145
135
|
try {
|
|
@@ -153,14 +143,17 @@ function reportError(error) {
|
|
|
153
143
|
} catch (e) {
|
|
154
144
|
_logger.default.warn('Failed to add custom error event:', e);
|
|
155
145
|
}
|
|
156
|
-
trigger.
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
146
|
+
var trigger = (0, _error.getErrorTrigger)();
|
|
147
|
+
if (trigger) {
|
|
148
|
+
trigger.onError({
|
|
149
|
+
type: 'custom',
|
|
150
|
+
message: message,
|
|
151
|
+
timestamp: Date.now(),
|
|
152
|
+
detail: {
|
|
153
|
+
stack: stack
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
}
|
|
164
157
|
}
|
|
165
158
|
var debug = exports.debug = {
|
|
166
159
|
getStorageAdapterType: function getStorageAdapterType() {
|
|
@@ -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,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,
|
|
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,CAuBtE"}
|
package/dist/lib/lib/config.js
CHANGED
|
@@ -179,12 +179,14 @@ function _initConfigManager() {
|
|
|
179
179
|
while (1) switch (_context3.prev = _context3.next) {
|
|
180
180
|
case 0:
|
|
181
181
|
if (!cdnUrl) {
|
|
182
|
-
_context3.next =
|
|
182
|
+
_context3.next = 8;
|
|
183
183
|
break;
|
|
184
184
|
}
|
|
185
|
-
|
|
185
|
+
// 将 CDN 配置 URL 加入黑名单,避免被网络监控 hook 拦截导致请求头重复设置
|
|
186
|
+
(0, _net.setBlackListUrls)([cdnUrl]);
|
|
187
|
+
_context3.next = 4;
|
|
186
188
|
return fetchConfigFromCdn(cdnUrl);
|
|
187
|
-
case
|
|
189
|
+
case 4:
|
|
188
190
|
config = _context3.sent;
|
|
189
191
|
updateConfig(config);
|
|
190
192
|
|
|
@@ -215,7 +217,7 @@ function _initConfigManager() {
|
|
|
215
217
|
}, _callee2, null, [[0, 7]]);
|
|
216
218
|
})), updateInterval);
|
|
217
219
|
}
|
|
218
|
-
case
|
|
220
|
+
case 8:
|
|
219
221
|
case "end":
|
|
220
222
|
return _context3.stop();
|
|
221
223
|
}
|
|
@@ -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/lib/lib/init.js
CHANGED
|
@@ -99,9 +99,8 @@ function initRLog(serv, appId, cdnConfigUrl) {
|
|
|
99
99
|
(0, _uploader.resetUploadLoop)();
|
|
100
100
|
|
|
101
101
|
// 设置SDK日志上报接口地址,并自动加入黑名单避免循环上报
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
}
|
|
102
|
+
var normalizedServUrl = (0, _net.normalizeUrl)(serv);
|
|
103
|
+
(0, _net.setSdkLogEndpoint)(normalizedServUrl);
|
|
105
104
|
|
|
106
105
|
// 初始化配置管理器
|
|
107
106
|
(0, _config.initConfigManager)(cdnConfigUrl).then(function () {
|
|
@@ -137,7 +136,7 @@ function initRLog(serv, appId, cdnConfigUrl) {
|
|
|
137
136
|
// 启动统一上传循环
|
|
138
137
|
// 错误模式下:idle 时跳过上传,uploading 时上传,状态由 ErrorTrigger 控制
|
|
139
138
|
// 全量模式下:持续轮询上传
|
|
140
|
-
(0, _uploader.startUploadLoop)(
|
|
139
|
+
(0, _uploader.startUploadLoop)(normalizedServUrl, appId);
|
|
141
140
|
|
|
142
141
|
// 初始化路由监控
|
|
143
142
|
(0, _routerMonitor.initRouterMonitor)(config.routerMonitor);
|
package/dist/lib/lib/logger.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../src/lib/logger.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../src/lib/logger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA+BH;;GAEG;AACH,QAAA,MAAM,MAAM;IACV;;OAEG;iBACU,GAAG,EAAE,GAAG,IAAI;IAIzB;;OAEG;kBACW,GAAG,EAAE,GAAG,IAAI;IAI1B;;OAEG;kBACW,GAAG,EAAE,GAAG,IAAI;IAI1B;;OAEG;mBACY,GAAG,EAAE,GAAG,IAAI;CAG5B,CAAC;AAEF,eAAe,MAAM,CAAC"}
|
package/dist/lib/lib/logger.js
CHANGED
|
@@ -6,127 +6,37 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.default = void 0;
|
|
7
7
|
/**
|
|
8
8
|
* Rlog SDK 日志工具
|
|
9
|
-
*
|
|
9
|
+
* 统一管理所有日志输出,添加统一前缀 [Rlog]
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
|
-
/**
|
|
13
|
-
* ANSI 颜色代码
|
|
14
|
-
*/
|
|
15
|
-
var Colors = {
|
|
16
|
-
reset: '\x1b[0m',
|
|
17
|
-
bright: '\x1b[1m',
|
|
18
|
-
dim: '\x1b[2m',
|
|
19
|
-
// 前景色
|
|
20
|
-
cyan: '\x1b[36m',
|
|
21
|
-
green: '\x1b[32m',
|
|
22
|
-
yellow: '\x1b[33m',
|
|
23
|
-
red: '\x1b[31m',
|
|
24
|
-
blue: '\x1b[34m',
|
|
25
|
-
magenta: '\x1b[35m',
|
|
26
|
-
// 背景色
|
|
27
|
-
bgCyan: '\x1b[46m',
|
|
28
|
-
bgGreen: '\x1b[42m',
|
|
29
|
-
bgYellow: '\x1b[43m',
|
|
30
|
-
bgRed: '\x1b[41m',
|
|
31
|
-
bgBlue: '\x1b[44m'
|
|
32
|
-
};
|
|
33
|
-
|
|
34
|
-
/**
|
|
35
|
-
* 日志级别配置
|
|
36
|
-
*/
|
|
37
|
-
var LogLevelConfig = {
|
|
38
|
-
log: {
|
|
39
|
-
prefix: '📝 LOG',
|
|
40
|
-
color: Colors.cyan,
|
|
41
|
-
style: 'color: #00bcd4; font-weight: bold;'
|
|
42
|
-
},
|
|
43
|
-
info: {
|
|
44
|
-
prefix: 'ℹ️ INFO',
|
|
45
|
-
color: Colors.blue,
|
|
46
|
-
style: 'color: #2196f3; font-weight: bold;'
|
|
47
|
-
},
|
|
48
|
-
warn: {
|
|
49
|
-
prefix: '⚠️ WARN',
|
|
50
|
-
color: Colors.yellow,
|
|
51
|
-
style: 'color: #ff9800; font-weight: bold;'
|
|
52
|
-
},
|
|
53
|
-
error: {
|
|
54
|
-
prefix: '❌ ERROR',
|
|
55
|
-
color: Colors.red,
|
|
56
|
-
style: 'color: #f44336; font-weight: bold;'
|
|
57
|
-
}
|
|
58
|
-
};
|
|
59
|
-
|
|
60
12
|
/**
|
|
61
13
|
* 日志级别
|
|
62
14
|
*/
|
|
63
15
|
|
|
64
|
-
/**
|
|
65
|
-
* 检测是否支持颜色输出
|
|
66
|
-
*/
|
|
67
|
-
function supportsColor() {
|
|
68
|
-
// 浏览器环境始终支持颜色
|
|
69
|
-
if (typeof window !== 'undefined') {
|
|
70
|
-
return true;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
// Node.js 环境检测
|
|
74
|
-
if (typeof process !== 'undefined' && process.stdout) {
|
|
75
|
-
return process.stdout.isTTY === true;
|
|
76
|
-
}
|
|
77
|
-
return false;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
16
|
/**
|
|
81
17
|
* 统一的日志输出函数
|
|
82
18
|
* @param level 日志级别
|
|
83
19
|
* @param args 日志参数
|
|
84
20
|
*/
|
|
85
21
|
function _log(level) {
|
|
86
|
-
var _console, _console2, _console3, _console4
|
|
87
|
-
var
|
|
88
|
-
var useColor = supportsColor();
|
|
89
|
-
|
|
90
|
-
// 构建前缀
|
|
91
|
-
var prefix = useColor ? "".concat(config.color).concat(Colors.bright, "[Rlog]").concat(Colors.reset, " ").concat(config.prefix).concat(Colors.reset) : "[Rlog] ".concat(config.prefix);
|
|
92
|
-
|
|
93
|
-
// 浏览器环境使用 console 的 %c 格式化
|
|
22
|
+
var _console, _console2, _console3, _console4;
|
|
23
|
+
var prefix = '[Rlog]';
|
|
94
24
|
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
|
|
95
25
|
args[_key - 1] = arguments[_key];
|
|
96
26
|
}
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
case 'error':
|
|
111
|
-
(_console4 = console).error.apply(_console4, [browserPrefix].concat(styles, args));
|
|
112
|
-
break;
|
|
113
|
-
}
|
|
114
|
-
} else {
|
|
115
|
-
// Node.js 环境使用 ANSI 颜色
|
|
116
|
-
switch (level) {
|
|
117
|
-
case 'log':
|
|
118
|
-
(_console5 = console).log.apply(_console5, [prefix].concat(args));
|
|
119
|
-
break;
|
|
120
|
-
case 'info':
|
|
121
|
-
(_console6 = console).info.apply(_console6, [prefix].concat(args));
|
|
122
|
-
break;
|
|
123
|
-
case 'warn':
|
|
124
|
-
(_console7 = console).warn.apply(_console7, [prefix].concat(args));
|
|
125
|
-
break;
|
|
126
|
-
case 'error':
|
|
127
|
-
(_console8 = console).error.apply(_console8, [prefix].concat(args));
|
|
128
|
-
break;
|
|
129
|
-
}
|
|
27
|
+
switch (level) {
|
|
28
|
+
case 'log':
|
|
29
|
+
(_console = console).log.apply(_console, [prefix].concat(args));
|
|
30
|
+
break;
|
|
31
|
+
case 'info':
|
|
32
|
+
(_console2 = console).info.apply(_console2, [prefix].concat(args));
|
|
33
|
+
break;
|
|
34
|
+
case 'warn':
|
|
35
|
+
(_console3 = console).warn.apply(_console3, [prefix].concat(args));
|
|
36
|
+
break;
|
|
37
|
+
case 'error':
|
|
38
|
+
(_console4 = console).error.apply(_console4, [prefix].concat(args));
|
|
39
|
+
break;
|
|
130
40
|
}
|
|
131
41
|
}
|
|
132
42
|
|
package/dist/lib/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/lib/lib/net.js
CHANGED
|
@@ -8,6 +8,7 @@ exports.getBlackListUrls = getBlackListUrls;
|
|
|
8
8
|
exports.getCustomHeaders = getCustomHeaders;
|
|
9
9
|
exports.getSdkLogEndpoint = getSdkLogEndpoint;
|
|
10
10
|
exports.getWhiteListUrls = getWhiteListUrls;
|
|
11
|
+
exports.normalizeUrl = normalizeUrl;
|
|
11
12
|
exports.restoreXhr = restoreXhr;
|
|
12
13
|
exports.setBlackListUrls = setBlackListUrls;
|
|
13
14
|
exports.setCustomHeaders = setCustomHeaders;
|
|
@@ -496,7 +497,7 @@ function setSdkLogEndpoint(endpoint) {
|
|
|
496
497
|
sdkLogEndpoint = endpoint;
|
|
497
498
|
|
|
498
499
|
// 规范化endpoint路径,确保相对路径也能正确匹配
|
|
499
|
-
var normalizedEndpoint = endpoint
|
|
500
|
+
var normalizedEndpoint = normalizeUrl(endpoint);
|
|
500
501
|
|
|
501
502
|
// 自动将SDK日志上报接口加入黑名单,避免循环上报
|
|
502
503
|
// 同时添加原始路径和规范化路径,确保兼容性
|
|
@@ -9,6 +9,11 @@
|
|
|
9
9
|
* - 提供与现有 uploader.ts 相同的对外 API
|
|
10
10
|
*/
|
|
11
11
|
import type { WorkerConfig } from './upload-worker';
|
|
12
|
+
/**
|
|
13
|
+
* 设置 Worker 降级回调
|
|
14
|
+
* @param callback 降级回调函数
|
|
15
|
+
*/
|
|
16
|
+
export declare function setWorkerFallbackCallback(callback: (() => void) | null): void;
|
|
12
17
|
/**
|
|
13
18
|
* 尝试初始化 Worker 模式
|
|
14
19
|
* @returns 是否成功启用 Worker 模式
|
|
@@ -16,8 +21,9 @@ import type { WorkerConfig } from './upload-worker';
|
|
|
16
21
|
export declare function initWorkerUpload(serv: string, appId: string): boolean;
|
|
17
22
|
/**
|
|
18
23
|
* 销毁 Worker
|
|
24
|
+
* @param triggerFallback 是否触发降级回调
|
|
19
25
|
*/
|
|
20
|
-
export declare function destroyWorker(): void;
|
|
26
|
+
export declare function destroyWorker(triggerFallback?: boolean): void;
|
|
21
27
|
/**
|
|
22
28
|
* 是否正在使用 Worker 模式
|
|
23
29
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upload-worker-manager.d.ts","sourceRoot":"","sources":["../../../src/lib/upload-worker-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAgC,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"upload-worker-manager.d.ts","sourceRoot":"","sources":["../../../src/lib/upload-worker-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAgC,MAAM,iBAAiB,CAAC;AAqUlF;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,CAE7E;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CA0CrE;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,eAAe,UAAQ,GAAG,IAAI,CA6B3D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CAQpE;AAED;;GAEG;AACH,wBAAgB,6BAA6B,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAErE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI,CAKtE"}
|
|
@@ -8,6 +8,7 @@ exports.initWorkerUpload = initWorkerUpload;
|
|
|
8
8
|
exports.isUsingWorkerMode = isUsingWorkerMode;
|
|
9
9
|
exports.setWorkerErrorModeUploading = setWorkerErrorModeUploading;
|
|
10
10
|
exports.setWorkerErrorModeWindowStart = setWorkerErrorModeWindowStart;
|
|
11
|
+
exports.setWorkerFallbackCallback = setWorkerFallbackCallback;
|
|
11
12
|
exports.updateWorkerConfig = updateWorkerConfig;
|
|
12
13
|
var _uploadWorker = require("./upload-worker");
|
|
13
14
|
var _storageManager = require("./storage-manager");
|
|
@@ -55,6 +56,12 @@ var isFetchingBatch = false;
|
|
|
55
56
|
// batchId 计数器
|
|
56
57
|
var batchIdCounter = 0;
|
|
57
58
|
|
|
59
|
+
// Worker 就绪超时检测
|
|
60
|
+
var workerReadyTimeout = null;
|
|
61
|
+
|
|
62
|
+
// Worker 降级回调(当 Worker 模式失败时调用)
|
|
63
|
+
var onWorkerFallback = null;
|
|
64
|
+
|
|
58
65
|
/**
|
|
59
66
|
* 生成唯一的 batchId
|
|
60
67
|
*/
|
|
@@ -92,14 +99,23 @@ function createInlineWorker() {
|
|
|
92
99
|
*/
|
|
93
100
|
function handleWorkerMessage(e) {
|
|
94
101
|
var msg = e.data;
|
|
95
|
-
if (!msg || !msg.type)
|
|
102
|
+
if (!msg || !msg.type) {
|
|
103
|
+
_logger.default.warn('Received invalid Worker message:', msg);
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
_logger.default.log('Received Worker message:', msg.type);
|
|
96
107
|
switch (msg.type) {
|
|
97
108
|
case 'READY':
|
|
98
109
|
workerReady = true;
|
|
99
|
-
|
|
110
|
+
// 清除超时检测
|
|
111
|
+
if (workerReadyTimeout) {
|
|
112
|
+
clearTimeout(workerReadyTimeout);
|
|
113
|
+
workerReadyTimeout = null;
|
|
114
|
+
}
|
|
115
|
+
_logger.default.log('Upload Worker is ready, workerReady state:', workerReady, 'isWorkerMode:', isWorkerMode);
|
|
100
116
|
break;
|
|
101
117
|
case 'REQUEST_BATCH':
|
|
102
|
-
handleRequestBatch(
|
|
118
|
+
handleRequestBatch();
|
|
103
119
|
break;
|
|
104
120
|
case 'UPLOAD_SUCCESS':
|
|
105
121
|
handleUploadSuccess(msg.batchId);
|
|
@@ -117,11 +133,11 @@ function handleWorkerMessage(e) {
|
|
|
117
133
|
* 处理 Worker 请求数据批次
|
|
118
134
|
* Worker 内部定时器触发,主线程从 storage 读取数据后发给 Worker
|
|
119
135
|
*/
|
|
120
|
-
function handleRequestBatch(
|
|
136
|
+
function handleRequestBatch() {
|
|
121
137
|
return _handleRequestBatch.apply(this, arguments);
|
|
122
138
|
} // 待处理的批次元数据
|
|
123
139
|
function _handleRequestBatch() {
|
|
124
|
-
_handleRequestBatch = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(
|
|
140
|
+
_handleRequestBatch = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
|
|
125
141
|
var currentConfig, isErrorMode, events, windowStart, config, consumeOnly, queryParams, customHeaders, batchId;
|
|
126
142
|
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
127
143
|
while (1) switch (_context.prev = _context.next) {
|
|
@@ -231,7 +247,7 @@ var pendingBatches = new Map();
|
|
|
231
247
|
/**
|
|
232
248
|
* 处理上传成功
|
|
233
249
|
*/
|
|
234
|
-
function handleUploadSuccess(
|
|
250
|
+
function handleUploadSuccess(_x) {
|
|
235
251
|
return _handleUploadSuccess.apply(this, arguments);
|
|
236
252
|
}
|
|
237
253
|
/**
|
|
@@ -273,7 +289,7 @@ function _handleUploadSuccess() {
|
|
|
273
289
|
}));
|
|
274
290
|
return _handleUploadSuccess.apply(this, arguments);
|
|
275
291
|
}
|
|
276
|
-
function handleUploadFailure(_x3, _x4
|
|
292
|
+
function handleUploadFailure(_x2, _x3, _x4) {
|
|
277
293
|
return _handleUploadFailure.apply(this, arguments);
|
|
278
294
|
}
|
|
279
295
|
/**
|
|
@@ -306,7 +322,7 @@ function _handleUploadFailure() {
|
|
|
306
322
|
}));
|
|
307
323
|
return _handleUploadFailure.apply(this, arguments);
|
|
308
324
|
}
|
|
309
|
-
function handleMaxRetryReached(
|
|
325
|
+
function handleMaxRetryReached(_x5, _x6) {
|
|
310
326
|
return _handleMaxRetryReached.apply(this, arguments);
|
|
311
327
|
}
|
|
312
328
|
/**
|
|
@@ -378,7 +394,10 @@ function _handleMaxRetryReached() {
|
|
|
378
394
|
}
|
|
379
395
|
function sendToWorker(command) {
|
|
380
396
|
if (worker && workerReady) {
|
|
397
|
+
_logger.default.log('Sending command to Worker:', command.type);
|
|
381
398
|
worker.postMessage(command);
|
|
399
|
+
} else {
|
|
400
|
+
_logger.default.warn('Cannot send to Worker - worker:', !!worker, 'workerReady:', workerReady, 'command:', command.type);
|
|
382
401
|
}
|
|
383
402
|
}
|
|
384
403
|
|
|
@@ -387,12 +406,20 @@ function sendToWorker(command) {
|
|
|
387
406
|
*/
|
|
388
407
|
function handleWorkerError(e) {
|
|
389
408
|
_logger.default.error('Upload Worker error:', e.message);
|
|
390
|
-
// Worker
|
|
391
|
-
destroyWorker();
|
|
409
|
+
// Worker 出错时销毁,降级到主线程
|
|
410
|
+
destroyWorker(true);
|
|
392
411
|
}
|
|
393
412
|
|
|
394
413
|
// ==================== 对外 API ====================
|
|
395
414
|
|
|
415
|
+
/**
|
|
416
|
+
* 设置 Worker 降级回调
|
|
417
|
+
* @param callback 降级回调函数
|
|
418
|
+
*/
|
|
419
|
+
function setWorkerFallbackCallback(callback) {
|
|
420
|
+
onWorkerFallback = callback;
|
|
421
|
+
}
|
|
422
|
+
|
|
396
423
|
/**
|
|
397
424
|
* 尝试初始化 Worker 模式
|
|
398
425
|
* @returns 是否成功启用 Worker 模式
|
|
@@ -420,19 +447,39 @@ function initWorkerUpload(serv, appId) {
|
|
|
420
447
|
uploadInterval: config.uploadInterval,
|
|
421
448
|
maxRetryCount: config.maxRetryCount || 3
|
|
422
449
|
};
|
|
450
|
+
|
|
451
|
+
// 注意:这里先将 isWorkerMode 设为 true
|
|
452
|
+
// 但 workerReady 仍为 false,需要等待 Worker 发送 READY 消息
|
|
453
|
+
// sendToWorker 会检查 workerReady 状态
|
|
423
454
|
worker.postMessage({
|
|
424
455
|
type: 'START',
|
|
425
456
|
config: startConfig
|
|
426
457
|
});
|
|
427
458
|
isWorkerMode = true;
|
|
428
|
-
|
|
459
|
+
|
|
460
|
+
// 设置超时检测:如果 5 秒内没有收到 READY 消息,降级到主线程模式
|
|
461
|
+
workerReadyTimeout = setTimeout(function () {
|
|
462
|
+
if (!workerReady) {
|
|
463
|
+
_logger.default.warn('Worker failed to send READY within 5 seconds, falling back to main thread');
|
|
464
|
+
// 销毁并触发降级回调
|
|
465
|
+
destroyWorker(true);
|
|
466
|
+
}
|
|
467
|
+
}, 5000);
|
|
468
|
+
_logger.default.log('Upload Worker mode initialized, waiting for READY...');
|
|
429
469
|
return true;
|
|
430
470
|
}
|
|
431
471
|
|
|
432
472
|
/**
|
|
433
473
|
* 销毁 Worker
|
|
474
|
+
* @param triggerFallback 是否触发降级回调
|
|
434
475
|
*/
|
|
435
476
|
function destroyWorker() {
|
|
477
|
+
var triggerFallback = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
|
478
|
+
// 清理超时检测
|
|
479
|
+
if (workerReadyTimeout) {
|
|
480
|
+
clearTimeout(workerReadyTimeout);
|
|
481
|
+
workerReadyTimeout = null;
|
|
482
|
+
}
|
|
436
483
|
if (worker) {
|
|
437
484
|
try {
|
|
438
485
|
worker.postMessage({
|
|
@@ -451,6 +498,11 @@ function destroyWorker() {
|
|
|
451
498
|
errorModeWindowStart = 0;
|
|
452
499
|
batchIdCounter = 0;
|
|
453
500
|
pendingBatches.clear();
|
|
501
|
+
|
|
502
|
+
// 触发降级回调(仅在需要时)
|
|
503
|
+
if (triggerFallback && onWorkerFallback) {
|
|
504
|
+
onWorkerFallback();
|
|
505
|
+
}
|
|
454
506
|
}
|
|
455
507
|
|
|
456
508
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upload-worker.d.ts","sourceRoot":"","sources":["../../../src/lib/upload-worker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;CACvB;AAGD,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,YAAY,CAAA;CAAE,GACvC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,GAAG,EAAE,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GACpI;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,CAAA;CAAE,GACxD;IAAE,IAAI,EAAE,0BAA0B,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAAC;AAG7D,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GACjB;IAAE,IAAI,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"upload-worker.d.ts","sourceRoot":"","sources":["../../../src/lib/upload-worker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;CACvB;AAGD,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,YAAY,CAAA;CAAE,GACvC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,GAAG,EAAE,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GACpI;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,CAAA;CAAE,GACxD;IAAE,IAAI,EAAE,0BAA0B,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAAC;AAG7D,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GACjB;IAAE,IAAI,EAAE,eAAe,CAAA;CAAE,GACzB;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC3C;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,GAChF;IAAE,IAAI,EAAE,mBAAmB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAIlE;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAqN5C"}
|
|
@@ -28,5 +28,5 @@ exports.getUploadWorkerCode = getUploadWorkerCode;
|
|
|
28
28
|
* 用于通过 Blob URL 内联创建 Worker
|
|
29
29
|
*/
|
|
30
30
|
function getUploadWorkerCode() {
|
|
31
|
-
return "\n'use strict';\n\n// ===== Worker \u5185\u90E8\u72B6\u6001 =====\nvar config = null;\nvar pollTimer = null;\nvar isRunning = false;\nvar errorModeUploading = false;\nvar failureCountMap = {};\n\n// ===== UUID \u751F\u6210 =====\nfunction generateUUID() {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = (Math.random() * 16) | 0;\n var v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n}\n\n// ===== \u6784\u5EFA\u4E0A\u4F20 URL =====\nfunction buildUploadUrl(serv, queryParams) {\n var params = [];\n for (var key in queryParams) {\n if (queryParams.hasOwnProperty(key) && queryParams[key] != null && queryParams[key] !== '') {\n params.push(encodeURIComponent(key) + '=' + encodeURIComponent(queryParams[key]));\n }\n }\n var queryString = params.join('&');\n return serv + (queryString ? '?' + queryString : '');\n}\n\n// ===== \u6267\u884C\u4E0A\u4F20 =====\nfunction performUpload(msg) {\n var batchId = msg.batchId;\n var events = msg.events;\n var queryParams = msg.queryParams;\n var customHeaders = msg.customHeaders;\n\n try {\n // JSON \u5E8F\u5217\u5316\u5728 Worker \u4E2D\u6267\u884C\uFF0C\u4E0D\u963B\u585E\u4E3B\u7EBF\u7A0B\n var jsonStr = JSON.stringify(events);\n var blob = new Blob([jsonStr], { type: 'application/json' });\n var formData = new FormData();\n formData.append('file', blob, generateUUID() + '.json');\n\n var url = buildUploadUrl(config ? config.serv : '', queryParams);\n\n var xhr = new XMLHttpRequest();\n xhr.open('POST', url, true);\n xhr.timeout = 10000;\n\n // \u8BBE\u7F6E\u81EA\u5B9A\u4E49\u8BF7\u6C42\u5934\n if (customHeaders) {\n for (var key in customHeaders) {\n if (customHeaders.hasOwnProperty(key)) {\n xhr.setRequestHeader(key, customHeaders[key]);\n }\n }\n }\n\n xhr.onreadystatechange = function() {\n if (xhr.readyState === 4) {\n if (xhr.status >= 200 && xhr.status < 300) {\n // \u68C0\u67E5\u4E1A\u52A1\u5C42 success \u5B57\u6BB5\n var uploadSuccess = true;\n var errorMessage = '';\n try {\n var responseData = JSON.parse(xhr.responseText);\n if (responseData && typeof responseData === 'object' && responseData.success === false) {\n uploadSuccess = false;\n errorMessage = responseData.errorMessage || 'Upload failed with success=false';\n }\n } catch(e) {\n // \u65E0\u6CD5\u89E3\u6790 JSON\uFF0C\u89C6\u4E3A\u6210\u529F\n }\n\n if (uploadSuccess) {\n // \u4E0A\u4F20\u6210\u529F\uFF0C\u91CD\u7F6E\u5931\u8D25\u8BA1\u6570\n var batchKey = config ? (config.appId + '_' + config.deviceId) : batchId;\n delete failureCountMap[batchKey];\n self.postMessage({ type: 'UPLOAD_SUCCESS', batchId: batchId });\n } else {\n handleFailure(batchId, errorMessage);\n }\n } else {\n handleFailure(batchId, 'HTTP ' + xhr.status + ': ' + xhr.statusText);\n }\n }\n };\n\n xhr.onerror = function() {\n handleFailure(batchId, 'Network error');\n };\n\n xhr.ontimeout = function() {\n handleFailure(batchId, 'Request timeout');\n };\n\n xhr.send(formData);\n } catch (e) {\n handleFailure(batchId, 'Upload exception: ' + (e.message || String(e)));\n }\n}\n\n// ===== \u5904\u7406\u4E0A\u4F20\u5931\u8D25 =====\nfunction handleFailure(batchId, errorMessage) {\n var batchKey = config ? (config.appId + '_' + config.deviceId) : batchId;\n var currentCount = failureCountMap[batchKey] || 0;\n var newCount = currentCount + 1;\n failureCountMap[batchKey] = newCount;\n\n var maxRetry = (config && config.maxRetryCount) ? config.maxRetryCount : 3;\n\n if (newCount >= maxRetry) {\n // \u8FBE\u5230\u6700\u5927\u91CD\u8BD5\u6B21\u6570\n delete failureCountMap[batchKey];\n self.postMessage({\n type: 'MAX_RETRY_REACHED',\n batchId: batchId,\n error: errorMessage\n });\n } else {\n self.postMessage({\n type: 'UPLOAD_FAILURE',\n batchId: batchId,\n error: errorMessage,\n failureCount: newCount\n });\n }\n}\n\n// ===== \u8F6E\u8BE2\u8C03\u5EA6 =====\nfunction startPolling() {\n if (pollTimer) {\n clearInterval(pollTimer);\n }\n\n var interval = (config && config.uploadInterval) ? config.uploadInterval : 2000;\n\n pollTimer = setInterval(function() {\n if (!isRunning) return;\n\n // \u5411\u4E3B\u7EBF\u7A0B\u8BF7\u6C42\u6570\u636E\u6279\u6B21\n // \u4E3B\u7EBF\u7A0B\u4F1A\u6839\u636E\u5F53\u524D\u6A21\u5F0F\uFF08full/error\uFF09\u548C\u72B6\u6001\u51B3\u5B9A\u662F\u5426\u63D0\u4F9B\u6570\u636E\n self.postMessage({\n type: 'REQUEST_BATCH'
|
|
31
|
+
return "\n'use strict';\n\n// ===== Worker \u5185\u90E8\u72B6\u6001 =====\nvar config = null;\nvar pollTimer = null;\nvar isRunning = false;\nvar errorModeUploading = false;\nvar failureCountMap = {};\n\n// ===== UUID \u751F\u6210 =====\nfunction generateUUID() {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = (Math.random() * 16) | 0;\n var v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n}\n\n// ===== \u6784\u5EFA\u4E0A\u4F20 URL =====\nfunction buildUploadUrl(serv, queryParams) {\n var params = [];\n for (var key in queryParams) {\n if (queryParams.hasOwnProperty(key) && queryParams[key] != null && queryParams[key] !== '') {\n params.push(encodeURIComponent(key) + '=' + encodeURIComponent(queryParams[key]));\n }\n }\n var queryString = params.join('&');\n return serv + (queryString ? '?' + queryString : '');\n}\n\n// ===== \u6267\u884C\u4E0A\u4F20 =====\nfunction performUpload(msg) {\n var batchId = msg.batchId;\n var events = msg.events;\n var queryParams = msg.queryParams;\n var customHeaders = msg.customHeaders;\n\n try {\n // JSON \u5E8F\u5217\u5316\u5728 Worker \u4E2D\u6267\u884C\uFF0C\u4E0D\u963B\u585E\u4E3B\u7EBF\u7A0B\n var jsonStr = JSON.stringify(events);\n var blob = new Blob([jsonStr], { type: 'application/json' });\n var formData = new FormData();\n formData.append('file', blob, generateUUID() + '.json');\n\n var url = buildUploadUrl(config ? config.serv : '', queryParams);\n\n var xhr = new XMLHttpRequest();\n xhr.open('POST', url, true);\n xhr.timeout = 10000;\n\n // \u8BBE\u7F6E\u81EA\u5B9A\u4E49\u8BF7\u6C42\u5934\n if (customHeaders) {\n for (var key in customHeaders) {\n if (customHeaders.hasOwnProperty(key)) {\n xhr.setRequestHeader(key, customHeaders[key]);\n }\n }\n }\n\n xhr.onreadystatechange = function() {\n if (xhr.readyState === 4) {\n if (xhr.status >= 200 && xhr.status < 300) {\n // \u68C0\u67E5\u4E1A\u52A1\u5C42 success \u5B57\u6BB5\n var uploadSuccess = true;\n var errorMessage = '';\n try {\n var responseData = JSON.parse(xhr.responseText);\n if (responseData && typeof responseData === 'object' && responseData.success === false) {\n uploadSuccess = false;\n errorMessage = responseData.errorMessage || 'Upload failed with success=false';\n }\n } catch(e) {\n // \u65E0\u6CD5\u89E3\u6790 JSON\uFF0C\u89C6\u4E3A\u6210\u529F\n }\n\n if (uploadSuccess) {\n // \u4E0A\u4F20\u6210\u529F\uFF0C\u91CD\u7F6E\u5931\u8D25\u8BA1\u6570\n var batchKey = config ? (config.appId + '_' + config.deviceId) : batchId;\n delete failureCountMap[batchKey];\n self.postMessage({ type: 'UPLOAD_SUCCESS', batchId: batchId });\n } else {\n handleFailure(batchId, errorMessage);\n }\n } else {\n handleFailure(batchId, 'HTTP ' + xhr.status + ': ' + xhr.statusText);\n }\n }\n };\n\n xhr.onerror = function() {\n handleFailure(batchId, 'Network error');\n };\n\n xhr.ontimeout = function() {\n handleFailure(batchId, 'Request timeout');\n };\n\n xhr.send(formData);\n } catch (e) {\n handleFailure(batchId, 'Upload exception: ' + (e.message || String(e)));\n }\n}\n\n// ===== \u5904\u7406\u4E0A\u4F20\u5931\u8D25 =====\nfunction handleFailure(batchId, errorMessage) {\n var batchKey = config ? (config.appId + '_' + config.deviceId) : batchId;\n var currentCount = failureCountMap[batchKey] || 0;\n var newCount = currentCount + 1;\n failureCountMap[batchKey] = newCount;\n\n var maxRetry = (config && config.maxRetryCount) ? config.maxRetryCount : 3;\n\n if (newCount >= maxRetry) {\n // \u8FBE\u5230\u6700\u5927\u91CD\u8BD5\u6B21\u6570\n delete failureCountMap[batchKey];\n self.postMessage({\n type: 'MAX_RETRY_REACHED',\n batchId: batchId,\n error: errorMessage\n });\n } else {\n self.postMessage({\n type: 'UPLOAD_FAILURE',\n batchId: batchId,\n error: errorMessage,\n failureCount: newCount\n });\n }\n}\n\n// ===== \u8F6E\u8BE2\u8C03\u5EA6 =====\nfunction startPolling() {\n if (pollTimer) {\n clearInterval(pollTimer);\n }\n\n var interval = (config && config.uploadInterval) ? config.uploadInterval : 2000;\n\n pollTimer = setInterval(function() {\n if (!isRunning) return;\n\n // \u5411\u4E3B\u7EBF\u7A0B\u8BF7\u6C42\u6570\u636E\u6279\u6B21\n // \u4E3B\u7EBF\u7A0B\u4F1A\u6839\u636E\u5F53\u524D\u6A21\u5F0F\uFF08full/error\uFF09\u548C\u72B6\u6001\u51B3\u5B9A\u662F\u5426\u63D0\u4F9B\u6570\u636E\n self.postMessage({\n type: 'REQUEST_BATCH'\n });\n }, interval);\n}\n\nfunction stopPolling() {\n if (pollTimer) {\n clearInterval(pollTimer);\n pollTimer = null;\n }\n}\n\n// ===== \u6E05\u7406 =====\nfunction cleanup() {\n isRunning = false;\n stopPolling();\n failureCountMap = {};\n config = null;\n errorModeUploading = false;\n}\n\n// ===== \u6D88\u606F\u5904\u7406 =====\nself.onmessage = function(e) {\n var msg = e.data;\n if (!msg || !msg.type) return;\n\n switch (msg.type) {\n case 'START':\n config = msg.config;\n isRunning = true;\n failureCountMap = {};\n startPolling();\n break;\n\n case 'STOP':\n cleanup();\n break;\n\n case 'UPLOAD_BATCH':\n if (isRunning) {\n performUpload(msg);\n }\n break;\n\n case 'UPDATE_CONFIG':\n if (msg.config) {\n for (var key in msg.config) {\n if (msg.config.hasOwnProperty(key) && config) {\n config[key] = msg.config[key];\n }\n }\n // \u5982\u679C uploadInterval \u53D8\u4E86\uFF0C\u91CD\u542F\u8F6E\u8BE2\n if (msg.config.uploadInterval && isRunning) {\n startPolling();\n }\n }\n break;\n\n case 'SET_ERROR_MODE_UPLOADING':\n errorModeUploading = msg.uploading;\n break;\n }\n};\n\n// Worker \u5C31\u7EEA\u901A\u77E5\nself.postMessage({ type: 'READY' });\n";
|
|
32
32
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uploader.d.ts","sourceRoot":"","sources":["../../../src/lib/uploader.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"uploader.d.ts","sourceRoot":"","sources":["../../../src/lib/uploader.ts"],"names":[],"mappings":"AAiCA;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CAM9D;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAM/D;AAqPD;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAoBjE;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAcvC;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,IAAI,CAetC;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C"}
|
package/dist/lib/lib/uploader.js
CHANGED
|
@@ -380,10 +380,18 @@ function startMainThreadUploadLoop(serv, appId) {
|
|
|
380
380
|
* @param appId 应用ID
|
|
381
381
|
*/
|
|
382
382
|
function startUploadLoop(serv, appId) {
|
|
383
|
+
// 设置 Worker 降级回调
|
|
384
|
+
(0, _uploadWorkerManager.setWorkerFallbackCallback)(function () {
|
|
385
|
+
_logger.default.log('Worker mode was downgraded, starting main thread upload');
|
|
386
|
+
startMainThreadUploadLoop(serv, appId);
|
|
387
|
+
});
|
|
388
|
+
|
|
383
389
|
// 优先尝试 Worker 模式
|
|
384
390
|
var workerInitialized = (0, _uploadWorkerManager.initWorkerUpload)(serv, appId);
|
|
385
391
|
if (workerInitialized) {
|
|
386
392
|
_logger.default.log('Upload loop started in Worker mode');
|
|
393
|
+
// Worker 模式下,超时降级逻辑在 initWorkerUpload 中处理
|
|
394
|
+
// 如果 Worker READY 超时,会自动调用 destroyWorker 并通过回调启动主线程上传
|
|
387
395
|
return;
|
|
388
396
|
}
|
|
389
397
|
|
|
@@ -397,6 +405,9 @@ function startUploadLoop(serv, appId) {
|
|
|
397
405
|
* 同时处理 Worker 模式和主线程模式
|
|
398
406
|
*/
|
|
399
407
|
function cancelUploadLoop() {
|
|
408
|
+
// 清理降级回调
|
|
409
|
+
(0, _uploadWorkerManager.setWorkerFallbackCallback)(null);
|
|
410
|
+
|
|
400
411
|
// 销毁 Worker(如果存在)
|
|
401
412
|
if ((0, _uploadWorkerManager.isUsingWorkerMode)()) {
|
|
402
413
|
(0, _uploadWorkerManager.destroyWorker)();
|
|
@@ -413,6 +424,9 @@ function cancelUploadLoop() {
|
|
|
413
424
|
* 重置上传循环状态(用于重新初始化)
|
|
414
425
|
*/
|
|
415
426
|
function resetUploadLoop() {
|
|
427
|
+
// 清理降级回调
|
|
428
|
+
(0, _uploadWorkerManager.setWorkerFallbackCallback)(null);
|
|
429
|
+
|
|
416
430
|
// 销毁 Worker(如果存在)
|
|
417
431
|
if ((0, _uploadWorkerManager.isUsingWorkerMode)()) {
|
|
418
432
|
(0, _uploadWorkerManager.destroyWorker)();
|