@antglobal/rlog-sdk 0.0.1755855517-dev.9 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +192 -432
- package/dist/esm/index.d.ts +14 -41
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +92 -76
- 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 +58 -35
- package/dist/esm/lib/config.d.ts +13 -6
- package/dist/esm/lib/config.d.ts.map +1 -1
- package/dist/esm/lib/config.js +61 -33
- package/dist/esm/lib/constants.d.ts +89 -0
- package/dist/esm/lib/constants.d.ts.map +1 -0
- package/dist/esm/lib/constants.js +145 -0
- package/dist/esm/lib/drive/indexeddb-adapt.d.ts +12 -0
- package/dist/esm/lib/drive/indexeddb-adapt.d.ts.map +1 -1
- package/dist/esm/lib/drive/indexeddb-adapt.js +190 -20
- package/dist/esm/lib/drive/localstorage-adapt.d.ts +12 -0
- package/dist/esm/lib/drive/localstorage-adapt.d.ts.map +1 -1
- package/dist/esm/lib/drive/localstorage-adapt.js +179 -36
- package/dist/esm/lib/drive/memory-adapt.d.ts +10 -2
- package/dist/esm/lib/drive/memory-adapt.d.ts.map +1 -1
- package/dist/esm/lib/drive/memory-adapt.js +118 -26
- package/dist/esm/lib/drive/safe-storage.d.ts +24 -0
- package/dist/esm/lib/drive/safe-storage.d.ts.map +1 -0
- package/dist/esm/lib/drive/safe-storage.js +96 -0
- package/dist/esm/lib/drive/storage-interface.d.ts +20 -0
- package/dist/esm/lib/drive/storage-interface.d.ts.map +1 -1
- package/dist/esm/lib/error-trigger.d.ts +73 -0
- package/dist/esm/lib/error-trigger.d.ts.map +1 -0
- package/dist/esm/lib/error-trigger.js +162 -0
- package/dist/esm/lib/error.d.ts +9 -0
- package/dist/esm/lib/error.d.ts.map +1 -1
- package/dist/esm/lib/error.js +70 -118
- package/dist/esm/lib/init.d.ts +0 -4
- package/dist/esm/lib/init.d.ts.map +1 -1
- package/dist/esm/lib/init.js +148 -47
- package/dist/esm/lib/logger.d.ts +27 -0
- package/dist/esm/lib/logger.d.ts.map +1 -0
- package/dist/esm/lib/logger.js +79 -0
- package/dist/esm/lib/net.d.ts +11 -0
- package/dist/esm/lib/net.d.ts.map +1 -1
- package/dist/esm/lib/net.js +264 -119
- package/dist/esm/lib/request.d.ts.map +1 -1
- package/dist/esm/lib/request.js +2 -2
- package/dist/esm/lib/router-monitor.d.ts.map +1 -1
- package/dist/esm/lib/router-monitor.js +135 -49
- package/dist/esm/lib/rrweb.d.ts.map +1 -1
- package/dist/esm/lib/rrweb.js +31 -24
- package/dist/esm/lib/storage-manager.d.ts +12 -0
- package/dist/esm/lib/storage-manager.d.ts.map +1 -1
- package/dist/esm/lib/storage-manager.js +129 -46
- package/dist/esm/lib/upload-worker-manager.d.ts +47 -0
- package/dist/esm/lib/upload-worker-manager.d.ts.map +1 -0
- package/dist/esm/lib/upload-worker-manager.js +559 -0
- package/dist/esm/lib/upload-worker.d.ts +58 -0
- package/dist/esm/lib/upload-worker.d.ts.map +1 -0
- package/dist/esm/lib/upload-worker.js +28 -0
- package/dist/esm/lib/uploader.d.ts +43 -0
- package/dist/esm/lib/uploader.d.ts.map +1 -1
- package/dist/esm/lib/uploader.js +464 -102
- package/dist/esm/lib/utils.d.ts +75 -0
- package/dist/esm/lib/utils.d.ts.map +1 -1
- package/dist/esm/lib/utils.js +268 -5
- package/dist/lib/index.d.ts +14 -41
- package/dist/lib/index.d.ts.map +1 -1
- package/dist/lib/index.js +81 -63
- 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 +59 -35
- package/dist/lib/lib/config.d.ts +13 -6
- package/dist/lib/lib/config.d.ts.map +1 -1
- package/dist/lib/lib/config.js +63 -33
- package/dist/lib/lib/constants.d.ts +89 -0
- package/dist/lib/lib/constants.d.ts.map +1 -0
- package/dist/lib/lib/constants.js +151 -0
- package/dist/lib/lib/drive/indexeddb-adapt.d.ts +12 -0
- package/dist/lib/lib/drive/indexeddb-adapt.d.ts.map +1 -1
- package/dist/lib/lib/drive/indexeddb-adapt.js +191 -19
- package/dist/lib/lib/drive/localstorage-adapt.d.ts +12 -0
- package/dist/lib/lib/drive/localstorage-adapt.d.ts.map +1 -1
- package/dist/lib/lib/drive/localstorage-adapt.js +179 -36
- package/dist/lib/lib/drive/memory-adapt.d.ts +10 -2
- package/dist/lib/lib/drive/memory-adapt.d.ts.map +1 -1
- package/dist/lib/lib/drive/memory-adapt.js +117 -26
- package/dist/lib/lib/drive/safe-storage.d.ts +24 -0
- package/dist/lib/lib/drive/safe-storage.d.ts.map +1 -0
- package/dist/lib/lib/drive/safe-storage.js +102 -0
- package/dist/lib/lib/drive/storage-interface.d.ts +20 -0
- package/dist/lib/lib/drive/storage-interface.d.ts.map +1 -1
- package/dist/lib/lib/error-trigger.d.ts +73 -0
- package/dist/lib/lib/error-trigger.d.ts.map +1 -0
- package/dist/lib/lib/error-trigger.js +167 -0
- package/dist/lib/lib/error.d.ts +9 -0
- package/dist/lib/lib/error.d.ts.map +1 -1
- package/dist/lib/lib/error.js +73 -118
- package/dist/lib/lib/init.d.ts +0 -4
- package/dist/lib/lib/init.d.ts.map +1 -1
- package/dist/lib/lib/init.js +144 -43
- package/dist/lib/lib/logger.d.ts +27 -0
- package/dist/lib/lib/logger.d.ts.map +1 -0
- package/dist/lib/lib/logger.js +84 -0
- package/dist/lib/lib/net.d.ts +11 -0
- package/dist/lib/lib/net.d.ts.map +1 -1
- package/dist/lib/lib/net.js +268 -120
- package/dist/lib/lib/request.d.ts.map +1 -1
- package/dist/lib/lib/request.js +3 -3
- package/dist/lib/lib/router-monitor.d.ts.map +1 -1
- package/dist/lib/lib/router-monitor.js +136 -49
- package/dist/lib/lib/rrweb.d.ts.map +1 -1
- package/dist/lib/lib/rrweb.js +31 -23
- package/dist/lib/lib/storage-manager.d.ts +12 -0
- package/dist/lib/lib/storage-manager.d.ts.map +1 -1
- package/dist/lib/lib/storage-manager.js +130 -46
- package/dist/lib/lib/upload-worker-manager.d.ts +47 -0
- package/dist/lib/lib/upload-worker-manager.d.ts.map +1 -0
- package/dist/lib/lib/upload-worker-manager.js +570 -0
- package/dist/lib/lib/upload-worker.d.ts +58 -0
- package/dist/lib/lib/upload-worker.d.ts.map +1 -0
- package/dist/lib/lib/upload-worker.js +33 -0
- package/dist/lib/lib/uploader.d.ts +43 -0
- package/dist/lib/lib/uploader.d.ts.map +1 -1
- package/dist/lib/lib/uploader.js +468 -101
- package/dist/lib/lib/utils.d.ts +75 -0
- package/dist/lib/lib/utils.d.ts.map +1 -1
- package/dist/lib/lib/utils.js +276 -6
- package/dist/rlog-sdk.min.js +1 -1
- package/package.json +3 -2
package/dist/esm/lib/config.js
CHANGED
|
@@ -8,15 +8,19 @@ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key i
|
|
|
8
8
|
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
|
|
9
9
|
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
10
10
|
import { get } from "./request";
|
|
11
|
+
import { deepMergeConfig } from "./utils";
|
|
12
|
+
import logger from "./logger";
|
|
13
|
+
import { getCustomHeaders, setBlackListUrls } from "./net";
|
|
11
14
|
|
|
12
15
|
// Console录制插件配置类型定义
|
|
13
16
|
|
|
17
|
+
// 错误采集模式配置
|
|
18
|
+
|
|
14
19
|
// CDN 配置类型定义
|
|
15
20
|
|
|
16
21
|
// 默认配置
|
|
17
22
|
var DEFAULT_CONFIG = {
|
|
18
|
-
enable:
|
|
19
|
-
samplingRate: 15,
|
|
23
|
+
enable: false,
|
|
20
24
|
uploadInterval: 2000,
|
|
21
25
|
configUpdateInterval: 300000,
|
|
22
26
|
// 5分钟
|
|
@@ -31,24 +35,33 @@ var DEFAULT_CONFIG = {
|
|
|
31
35
|
// 默认关闭只采集不上报模式
|
|
32
36
|
maxRetryCount: 3,
|
|
33
37
|
// 默认最大重试次数3次
|
|
34
|
-
checkoutEveryNms:
|
|
35
|
-
// 每
|
|
38
|
+
checkoutEveryNms: 5 * 1000,
|
|
39
|
+
// 每5秒做一次全量快照
|
|
36
40
|
ignoreClass: 'rr-ignore',
|
|
37
41
|
blockClass: 'rr-block',
|
|
38
42
|
maskTextClass: 'rr-mask',
|
|
39
43
|
sampling: {
|
|
44
|
+
canvas: 15,
|
|
45
|
+
// Canvas 采样率 (帧/秒)
|
|
40
46
|
mousemove: 50,
|
|
41
47
|
// 每50ms最多采集一次mousemove事件
|
|
42
48
|
scroll: 100,
|
|
43
49
|
// 滚动事件防抖,每100ms采集一次,
|
|
44
50
|
input: 'last' // 输入只记录最后一次,
|
|
45
51
|
},
|
|
46
|
-
error: false,
|
|
47
|
-
// 默认不启用错误处理
|
|
48
52
|
packEvents: false,
|
|
49
53
|
// 默认不使用rrweb的packFn压缩事件数据
|
|
50
54
|
clearStorageBeforeRecord: true,
|
|
51
55
|
// 默认在开始录制前清空存储数据
|
|
56
|
+
error: false,
|
|
57
|
+
// 默认不启用错误监听上报,错误采集模式下默认true
|
|
58
|
+
captureMode: 'full',
|
|
59
|
+
// 默认全量采集模式
|
|
60
|
+
errorCapture: {
|
|
61
|
+
beforeDuration: 30000,
|
|
62
|
+
afterDuration: 30000,
|
|
63
|
+
httpErrorThreshold: 400
|
|
64
|
+
},
|
|
52
65
|
// 路由监控配置
|
|
53
66
|
routerMonitor: {
|
|
54
67
|
enable: false,
|
|
@@ -58,15 +71,16 @@ var DEFAULT_CONFIG = {
|
|
|
58
71
|
trackHistoryChange: true,
|
|
59
72
|
trackPageStayTime: true,
|
|
60
73
|
// 是否计算页面停留时间
|
|
61
|
-
ignoreRoutes: []
|
|
62
|
-
// 路由是否应该被忽略
|
|
63
|
-
customMatchers: [] // 自定义匹配规则
|
|
74
|
+
ignoreRoutes: [] // 路由是否应该被忽略
|
|
64
75
|
}
|
|
65
76
|
};
|
|
66
77
|
|
|
67
78
|
// 全局配置变量
|
|
68
79
|
var globalConfig = _objectSpread({}, DEFAULT_CONFIG);
|
|
69
80
|
|
|
81
|
+
// CDN 配置定时更新的 interval ID
|
|
82
|
+
var configUpdateTimer = null;
|
|
83
|
+
|
|
70
84
|
/**
|
|
71
85
|
* 从 CDN 获取配置
|
|
72
86
|
* @param cdnUrl CDN 配置文件地址
|
|
@@ -82,21 +96,19 @@ export function fetchConfigFromCdn(_x) {
|
|
|
82
96
|
*/
|
|
83
97
|
function _fetchConfigFromCdn() {
|
|
84
98
|
_fetchConfigFromCdn = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(cdnUrl) {
|
|
85
|
-
var response, config;
|
|
99
|
+
var customHeaders, response, config;
|
|
86
100
|
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
87
101
|
while (1) switch (_context.prev = _context.next) {
|
|
88
102
|
case 0:
|
|
89
103
|
_context.prev = 0;
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
104
|
+
// 从 net.ts 中获取自定义请求头
|
|
105
|
+
customHeaders = getCustomHeaders();
|
|
106
|
+
_context.next = 4;
|
|
107
|
+
return get(cdnUrl, {
|
|
108
|
+
headers: customHeaders
|
|
109
|
+
});
|
|
110
|
+
case 4:
|
|
93
111
|
response = _context.sent;
|
|
94
|
-
if (response.ok) {
|
|
95
|
-
_context.next = 6;
|
|
96
|
-
break;
|
|
97
|
-
}
|
|
98
|
-
throw new Error("Failed to fetch config: ".concat(response.status));
|
|
99
|
-
case 6:
|
|
100
112
|
config = {}; // 处理三种不同的响应格式
|
|
101
113
|
if (response.data) {
|
|
102
114
|
// 情况1: response.data 直接就是配置对象
|
|
@@ -112,26 +124,26 @@ function _fetchConfigFromCdn() {
|
|
|
112
124
|
try {
|
|
113
125
|
config = JSON.parse(response.data.data);
|
|
114
126
|
} catch (parseError) {
|
|
115
|
-
|
|
127
|
+
logger.warn('Failed to parse config JSON string', parseError);
|
|
116
128
|
}
|
|
117
129
|
}
|
|
118
130
|
}
|
|
119
|
-
return _context.abrupt("return",
|
|
120
|
-
case
|
|
121
|
-
_context.prev =
|
|
131
|
+
return _context.abrupt("return", deepMergeConfig(DEFAULT_CONFIG, config));
|
|
132
|
+
case 10:
|
|
133
|
+
_context.prev = 10;
|
|
122
134
|
_context.t0 = _context["catch"](0);
|
|
123
|
-
|
|
135
|
+
logger.warn('Failed to fetch config from CDN, using default config', _context.t0);
|
|
124
136
|
return _context.abrupt("return", _objectSpread({}, DEFAULT_CONFIG));
|
|
125
|
-
case
|
|
137
|
+
case 14:
|
|
126
138
|
case "end":
|
|
127
139
|
return _context.stop();
|
|
128
140
|
}
|
|
129
|
-
}, _callee, null, [[0,
|
|
141
|
+
}, _callee, null, [[0, 10]]);
|
|
130
142
|
}));
|
|
131
143
|
return _fetchConfigFromCdn.apply(this, arguments);
|
|
132
144
|
}
|
|
133
145
|
export function updateConfig(newConfig) {
|
|
134
|
-
globalConfig =
|
|
146
|
+
globalConfig = deepMergeConfig(globalConfig, newConfig);
|
|
135
147
|
}
|
|
136
148
|
|
|
137
149
|
/**
|
|
@@ -142,6 +154,16 @@ export function getConfig() {
|
|
|
142
154
|
return _objectSpread({}, globalConfig);
|
|
143
155
|
}
|
|
144
156
|
|
|
157
|
+
/**
|
|
158
|
+
* 停止配置定时更新
|
|
159
|
+
*/
|
|
160
|
+
export function stopConfigUpdate() {
|
|
161
|
+
if (configUpdateTimer) {
|
|
162
|
+
clearInterval(configUpdateTimer);
|
|
163
|
+
configUpdateTimer = null;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
|
|
145
167
|
/**
|
|
146
168
|
* 初始化配置管理器
|
|
147
169
|
* @param cdnUrl CDN 配置文件地址
|
|
@@ -156,19 +178,25 @@ function _initConfigManager() {
|
|
|
156
178
|
while (1) switch (_context3.prev = _context3.next) {
|
|
157
179
|
case 0:
|
|
158
180
|
if (!cdnUrl) {
|
|
159
|
-
_context3.next =
|
|
181
|
+
_context3.next = 8;
|
|
160
182
|
break;
|
|
161
183
|
}
|
|
162
|
-
|
|
184
|
+
// 将 CDN 配置 URL 加入黑名单,避免被网络监控 hook 拦截导致请求头重复设置
|
|
185
|
+
setBlackListUrls([cdnUrl]);
|
|
186
|
+
_context3.next = 4;
|
|
163
187
|
return fetchConfigFromCdn(cdnUrl);
|
|
164
|
-
case
|
|
188
|
+
case 4:
|
|
165
189
|
config = _context3.sent;
|
|
166
190
|
updateConfig(config);
|
|
167
191
|
|
|
168
192
|
// 定时更新配置
|
|
169
193
|
updateInterval = config.configUpdateInterval || DEFAULT_CONFIG.configUpdateInterval;
|
|
170
194
|
if (updateInterval) {
|
|
171
|
-
|
|
195
|
+
// 清理之前的定时器(重新初始化场景)
|
|
196
|
+
if (configUpdateTimer) {
|
|
197
|
+
clearInterval(configUpdateTimer);
|
|
198
|
+
}
|
|
199
|
+
configUpdateTimer = setInterval( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {
|
|
172
200
|
var newConfig;
|
|
173
201
|
return _regeneratorRuntime().wrap(function _callee2$(_context2) {
|
|
174
202
|
while (1) switch (_context2.prev = _context2.next) {
|
|
@@ -184,7 +212,7 @@ function _initConfigManager() {
|
|
|
184
212
|
case 7:
|
|
185
213
|
_context2.prev = 7;
|
|
186
214
|
_context2.t0 = _context2["catch"](0);
|
|
187
|
-
|
|
215
|
+
logger.warn('Failed to update config from CDN', _context2.t0);
|
|
188
216
|
case 10:
|
|
189
217
|
case "end":
|
|
190
218
|
return _context2.stop();
|
|
@@ -192,7 +220,7 @@ function _initConfigManager() {
|
|
|
192
220
|
}, _callee2, null, [[0, 7]]);
|
|
193
221
|
})), updateInterval);
|
|
194
222
|
}
|
|
195
|
-
case
|
|
223
|
+
case 8:
|
|
196
224
|
case "end":
|
|
197
225
|
return _context3.stop();
|
|
198
226
|
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rlog SDK 全局常量定义
|
|
3
|
+
*
|
|
4
|
+
* 集中管理项目中所有硬编码的常量值,便于统一维护和修改。
|
|
5
|
+
* 按功能领域分组,每个常量都附带用途说明。
|
|
6
|
+
*/
|
|
7
|
+
/** 设备 ID 的 localStorage 存储键 */
|
|
8
|
+
export declare const STORAGE_KEY_DEVICE_ID = "rlog-deviceId";
|
|
9
|
+
/** 旧版设备标识 key(兼容迁移) */
|
|
10
|
+
export declare const STORAGE_KEY_UTOKEN = "utoken";
|
|
11
|
+
/** IWP 设备标识 key(兼容迁移) */
|
|
12
|
+
export declare const STORAGE_KEY_IWP_DEVICE_TAG = "IWP-iwp-deivceTag";
|
|
13
|
+
/** URL 参数缓存到 sessionStorage 的前缀 */
|
|
14
|
+
export declare const STORAGE_KEY_URL_PARAM_PREFIX = "rlog-";
|
|
15
|
+
/** Session 注册表的 localStorage 存储键 */
|
|
16
|
+
export declare const STORAGE_KEY_SESSION_REGISTRY = "rlog_sessions";
|
|
17
|
+
/** 录制数据存储键前缀 */
|
|
18
|
+
export declare const STORAGE_KEY_DATA_PREFIX = "rlog_data_";
|
|
19
|
+
/** 分布式锁存储键前缀 */
|
|
20
|
+
export declare const STORAGE_KEY_LOCK_PREFIX = "rlog_lock_";
|
|
21
|
+
/** 只采集不上报模式的 sessionStorage 标识键 */
|
|
22
|
+
export declare const STORAGE_KEY_CONSUME_ONLY = "RLOG_CONSUME_ONLY";
|
|
23
|
+
/** 只采集不上报模式的 sessionStorage 标识值 */
|
|
24
|
+
export declare const STORAGE_VALUE_CONSUME_ONLY = "YES";
|
|
25
|
+
/** localStorage 可用性测试键(StorageManager) */
|
|
26
|
+
export declare const STORAGE_TEST_KEY = "__rlog_storage_test__";
|
|
27
|
+
/** localStorage 可用性测试键(SafeStorage) */
|
|
28
|
+
export declare const SAFE_STORAGE_TEST_KEY = "__rlog_safe_storage_test__";
|
|
29
|
+
/** Session 过期时间:1 小时。超过此时间的 session 数据将在下次 SDK 初始化时被清理 */
|
|
30
|
+
export declare const SESSION_MAX_AGE: number;
|
|
31
|
+
/** 孤儿 session 数据的最大有效时间跨度:2 分钟。只有数据时间跨度在此范围内的才被视为"上传周期内的残留数据" */
|
|
32
|
+
export declare const ORPHAN_DATA_MAX_SPAN: number;
|
|
33
|
+
/** 孤儿 session 数据的最大年龄:5 分钟。只有 session 注册时间在此范围内的才被视为"近期的残留数据" */
|
|
34
|
+
export declare const ORPHAN_SESSION_MAX_AGE: number;
|
|
35
|
+
/** 分布式锁超时时间:5 秒 */
|
|
36
|
+
export declare const LOCK_TIMEOUT = 5000;
|
|
37
|
+
/** 分布式锁重试间隔:10 毫秒 */
|
|
38
|
+
export declare const LOCK_RETRY_DELAY = 10;
|
|
39
|
+
/** Worker 就绪超时时间:5 秒。超时后降级到主线程模式 */
|
|
40
|
+
export declare const WORKER_READY_TIMEOUT = 5000;
|
|
41
|
+
/** HTTP 请求默认超时时间:10 秒 */
|
|
42
|
+
export declare const REQUEST_TIMEOUT = 10000;
|
|
43
|
+
/** 上传锁冲突时的延迟重试间隔:100 毫秒 */
|
|
44
|
+
export declare const UPLOAD_RETRY_DELAY = 100;
|
|
45
|
+
/** 存储适配器最大事件存储量 */
|
|
46
|
+
export declare const MAX_STORAGE_EVENTS = 10000;
|
|
47
|
+
/** 分布式锁最大重试次数 */
|
|
48
|
+
export declare const LOCK_MAX_RETRIES = 50;
|
|
49
|
+
/** 全量模式每次拉取事件数量 */
|
|
50
|
+
export declare const PULL_BATCH_SIZE = 100;
|
|
51
|
+
/** 孤儿 session 数据拉取上限 */
|
|
52
|
+
export declare const ORPHAN_PULL_LIMIT = 10000;
|
|
53
|
+
/** 默认缓存的 URL 参数名称列表 */
|
|
54
|
+
export declare const DEFAULT_URL_PARAMS_TO_CACHE: string[];
|
|
55
|
+
/** 上传失败事件名称(CustomEvent + rrweb addCustomEvent) */
|
|
56
|
+
export declare const EVENT_UPLOAD_FAILURE = "rlog-upload-failure";
|
|
57
|
+
/** 自定义错误事件名称 */
|
|
58
|
+
export declare const EVENT_CUSTOM_ERROR = "custom-error-event";
|
|
59
|
+
/** HTTP 请求成功事件名称 */
|
|
60
|
+
export declare const EVENT_HTTP_SUCCESS = "http-success";
|
|
61
|
+
/** HTTP 请求失败事件名称 */
|
|
62
|
+
export declare const EVENT_HTTP_ERROR = "http-error";
|
|
63
|
+
/** 网络状态变化事件名称 */
|
|
64
|
+
export declare const EVENT_NETWORK_STATUS = "network-status";
|
|
65
|
+
/** 路由变化事件名称 */
|
|
66
|
+
export declare const EVENT_ROUTE_CHANGE = "route-change";
|
|
67
|
+
/** 页面生命周期事件名称 */
|
|
68
|
+
export declare const EVENT_PAGE_LIFECYCLE = "page-lifecycle";
|
|
69
|
+
/** 网络监控黑名单域名列表 */
|
|
70
|
+
export declare const BLACK_HOST_NAME: string[];
|
|
71
|
+
/** 网络监控黑名单路径列表 */
|
|
72
|
+
export declare const BLACK_PATH_NAME: string[];
|
|
73
|
+
/** 需要从响应中提取的 HTTP 头字段 */
|
|
74
|
+
export declare const HEADERS_TO_EXTRACT: string[];
|
|
75
|
+
/** 默认白名单 URL 列表(rrweb 录制时设置) */
|
|
76
|
+
export declare const DEFAULT_WHITE_LIST_URLS: string[];
|
|
77
|
+
/** 日志输出统一前缀 */
|
|
78
|
+
export declare const LOG_PREFIX = "[Rlog]";
|
|
79
|
+
/** IndexedDB 数据库名称 */
|
|
80
|
+
export declare const IDB_DB_NAME = "LogStorageDB";
|
|
81
|
+
/** IndexedDB 对象存储名称 */
|
|
82
|
+
export declare const IDB_STORE_NAME = "logs";
|
|
83
|
+
/** IndexedDB 数据库版本号 */
|
|
84
|
+
export declare const IDB_VERSION = 2;
|
|
85
|
+
/** 图片导出格式 */
|
|
86
|
+
export declare const CANVAS_EXPORT_TYPE = "image/webp";
|
|
87
|
+
/** 图片导出质量 */
|
|
88
|
+
export declare const CANVAS_EXPORT_QUALITY = 0.6;
|
|
89
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/lib/constants.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,+BAA+B;AAC/B,eAAO,MAAM,qBAAqB,kBAAkB,CAAC;AAErD,uBAAuB;AACvB,eAAO,MAAM,kBAAkB,WAAW,CAAC;AAE3C,yBAAyB;AACzB,eAAO,MAAM,0BAA0B,sBAAsB,CAAC;AAE9D,mCAAmC;AACnC,eAAO,MAAM,4BAA4B,UAAU,CAAC;AAEpD,oCAAoC;AACpC,eAAO,MAAM,4BAA4B,kBAAkB,CAAC;AAE5D,gBAAgB;AAChB,eAAO,MAAM,uBAAuB,eAAe,CAAC;AAEpD,gBAAgB;AAChB,eAAO,MAAM,uBAAuB,eAAe,CAAC;AAEpD,mCAAmC;AACnC,eAAO,MAAM,wBAAwB,sBAAsB,CAAC;AAE5D,mCAAmC;AACnC,eAAO,MAAM,0BAA0B,QAAQ,CAAC;AAEhD,0CAA0C;AAC1C,eAAO,MAAM,gBAAgB,0BAA0B,CAAC;AAExD,uCAAuC;AACvC,eAAO,MAAM,qBAAqB,+BAA+B,CAAC;AAIlE,0DAA0D;AAC1D,eAAO,MAAM,eAAe,QAAqB,CAAC;AAElD,iEAAiE;AACjE,eAAO,MAAM,oBAAoB,QAAgB,CAAC;AAElD,iEAAiE;AACjE,eAAO,MAAM,sBAAsB,QAAgB,CAAC;AAEpD,mBAAmB;AACnB,eAAO,MAAM,YAAY,OAAO,CAAC;AAEjC,qBAAqB;AACrB,eAAO,MAAM,gBAAgB,KAAK,CAAC;AAEnC,oCAAoC;AACpC,eAAO,MAAM,oBAAoB,OAAO,CAAC;AAEzC,yBAAyB;AACzB,eAAO,MAAM,eAAe,QAAQ,CAAC;AAErC,2BAA2B;AAC3B,eAAO,MAAM,kBAAkB,MAAM,CAAC;AAItC,mBAAmB;AACnB,eAAO,MAAM,kBAAkB,QAAQ,CAAC;AAExC,iBAAiB;AACjB,eAAO,MAAM,gBAAgB,KAAK,CAAC;AAEnC,mBAAmB;AACnB,eAAO,MAAM,eAAe,MAAM,CAAC;AAEnC,wBAAwB;AACxB,eAAO,MAAM,iBAAiB,QAAQ,CAAC;AAEvC,uBAAuB;AACvB,eAAO,MAAM,2BAA2B,UAAa,CAAC;AAItD,mDAAmD;AACnD,eAAO,MAAM,oBAAoB,wBAAwB,CAAC;AAE1D,gBAAgB;AAChB,eAAO,MAAM,kBAAkB,uBAAuB,CAAC;AAEvD,oBAAoB;AACpB,eAAO,MAAM,kBAAkB,iBAAiB,CAAC;AAEjD,oBAAoB;AACpB,eAAO,MAAM,gBAAgB,eAAe,CAAC;AAE7C,iBAAiB;AACjB,eAAO,MAAM,oBAAoB,mBAAmB,CAAC;AAErD,eAAe;AACf,eAAO,MAAM,kBAAkB,iBAAiB,CAAC;AAEjD,iBAAiB;AACjB,eAAO,MAAM,oBAAoB,mBAAmB,CAAC;AAIrD,kBAAkB;AAClB,eAAO,MAAM,eAAe,UAQ3B,CAAC;AAEF,kBAAkB;AAClB,eAAO,MAAM,eAAe,UAgB3B,CAAC;AAEF,yBAAyB;AACzB,eAAO,MAAM,kBAAkB,UAAsC,CAAC;AAEtE,gCAAgC;AAChC,eAAO,MAAM,uBAAuB,UAEnC,CAAC;AAIF,eAAe;AACf,eAAO,MAAM,UAAU,WAAW,CAAC;AAInC,sBAAsB;AACtB,eAAO,MAAM,WAAW,iBAAiB,CAAC;AAE1C,uBAAuB;AACvB,eAAO,MAAM,cAAc,SAAS,CAAC;AAErC,uBAAuB;AACvB,eAAO,MAAM,WAAW,IAAI,CAAC;AAI7B,aAAa;AACb,eAAO,MAAM,kBAAkB,eAAe,CAAC;AAE/C,aAAa;AACb,eAAO,MAAM,qBAAqB,MAAM,CAAC"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rlog SDK 全局常量定义
|
|
3
|
+
*
|
|
4
|
+
* 集中管理项目中所有硬编码的常量值,便于统一维护和修改。
|
|
5
|
+
* 按功能领域分组,每个常量都附带用途说明。
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
// ==================== Storage Key 前缀与标识 ====================
|
|
9
|
+
|
|
10
|
+
/** 设备 ID 的 localStorage 存储键 */
|
|
11
|
+
export var STORAGE_KEY_DEVICE_ID = 'rlog-deviceId';
|
|
12
|
+
|
|
13
|
+
/** 旧版设备标识 key(兼容迁移) */
|
|
14
|
+
export var STORAGE_KEY_UTOKEN = 'utoken';
|
|
15
|
+
|
|
16
|
+
/** IWP 设备标识 key(兼容迁移) */
|
|
17
|
+
export var STORAGE_KEY_IWP_DEVICE_TAG = 'IWP-iwp-deivceTag';
|
|
18
|
+
|
|
19
|
+
/** URL 参数缓存到 sessionStorage 的前缀 */
|
|
20
|
+
export var STORAGE_KEY_URL_PARAM_PREFIX = 'rlog-';
|
|
21
|
+
|
|
22
|
+
/** Session 注册表的 localStorage 存储键 */
|
|
23
|
+
export var STORAGE_KEY_SESSION_REGISTRY = 'rlog_sessions';
|
|
24
|
+
|
|
25
|
+
/** 录制数据存储键前缀 */
|
|
26
|
+
export var STORAGE_KEY_DATA_PREFIX = 'rlog_data_';
|
|
27
|
+
|
|
28
|
+
/** 分布式锁存储键前缀 */
|
|
29
|
+
export var STORAGE_KEY_LOCK_PREFIX = 'rlog_lock_';
|
|
30
|
+
|
|
31
|
+
/** 只采集不上报模式的 sessionStorage 标识键 */
|
|
32
|
+
export var STORAGE_KEY_CONSUME_ONLY = 'RLOG_CONSUME_ONLY';
|
|
33
|
+
|
|
34
|
+
/** 只采集不上报模式的 sessionStorage 标识值 */
|
|
35
|
+
export var STORAGE_VALUE_CONSUME_ONLY = 'YES';
|
|
36
|
+
|
|
37
|
+
/** localStorage 可用性测试键(StorageManager) */
|
|
38
|
+
export var STORAGE_TEST_KEY = '__rlog_storage_test__';
|
|
39
|
+
|
|
40
|
+
/** localStorage 可用性测试键(SafeStorage) */
|
|
41
|
+
export var SAFE_STORAGE_TEST_KEY = '__rlog_safe_storage_test__';
|
|
42
|
+
|
|
43
|
+
// ==================== 时间相关常量(毫秒) ====================
|
|
44
|
+
|
|
45
|
+
/** Session 过期时间:1 小时。超过此时间的 session 数据将在下次 SDK 初始化时被清理 */
|
|
46
|
+
export var SESSION_MAX_AGE = 1 * 60 * 60 * 1000;
|
|
47
|
+
|
|
48
|
+
/** 孤儿 session 数据的最大有效时间跨度:2 分钟。只有数据时间跨度在此范围内的才被视为"上传周期内的残留数据" */
|
|
49
|
+
export var ORPHAN_DATA_MAX_SPAN = 2 * 60 * 1000;
|
|
50
|
+
|
|
51
|
+
/** 孤儿 session 数据的最大年龄:5 分钟。只有 session 注册时间在此范围内的才被视为"近期的残留数据" */
|
|
52
|
+
export var ORPHAN_SESSION_MAX_AGE = 5 * 60 * 1000;
|
|
53
|
+
|
|
54
|
+
/** 分布式锁超时时间:5 秒 */
|
|
55
|
+
export var LOCK_TIMEOUT = 5000;
|
|
56
|
+
|
|
57
|
+
/** 分布式锁重试间隔:10 毫秒 */
|
|
58
|
+
export var LOCK_RETRY_DELAY = 10;
|
|
59
|
+
|
|
60
|
+
/** Worker 就绪超时时间:5 秒。超时后降级到主线程模式 */
|
|
61
|
+
export var WORKER_READY_TIMEOUT = 5000;
|
|
62
|
+
|
|
63
|
+
/** HTTP 请求默认超时时间:10 秒 */
|
|
64
|
+
export var REQUEST_TIMEOUT = 10000;
|
|
65
|
+
|
|
66
|
+
/** 上传锁冲突时的延迟重试间隔:100 毫秒 */
|
|
67
|
+
export var UPLOAD_RETRY_DELAY = 100;
|
|
68
|
+
|
|
69
|
+
// ==================== 容量与限制 ====================
|
|
70
|
+
|
|
71
|
+
/** 存储适配器最大事件存储量 */
|
|
72
|
+
export var MAX_STORAGE_EVENTS = 10000;
|
|
73
|
+
|
|
74
|
+
/** 分布式锁最大重试次数 */
|
|
75
|
+
export var LOCK_MAX_RETRIES = 50;
|
|
76
|
+
|
|
77
|
+
/** 全量模式每次拉取事件数量 */
|
|
78
|
+
export var PULL_BATCH_SIZE = 100;
|
|
79
|
+
|
|
80
|
+
/** 孤儿 session 数据拉取上限 */
|
|
81
|
+
export var ORPHAN_PULL_LIMIT = 10000;
|
|
82
|
+
|
|
83
|
+
/** 默认缓存的 URL 参数名称列表 */
|
|
84
|
+
export var DEFAULT_URL_PARAMS_TO_CACHE = ['taskId'];
|
|
85
|
+
|
|
86
|
+
// ==================== 自定义事件名称 ====================
|
|
87
|
+
|
|
88
|
+
/** 上传失败事件名称(CustomEvent + rrweb addCustomEvent) */
|
|
89
|
+
export var EVENT_UPLOAD_FAILURE = 'rlog-upload-failure';
|
|
90
|
+
|
|
91
|
+
/** 自定义错误事件名称 */
|
|
92
|
+
export var EVENT_CUSTOM_ERROR = 'custom-error-event';
|
|
93
|
+
|
|
94
|
+
/** HTTP 请求成功事件名称 */
|
|
95
|
+
export var EVENT_HTTP_SUCCESS = 'http-success';
|
|
96
|
+
|
|
97
|
+
/** HTTP 请求失败事件名称 */
|
|
98
|
+
export var EVENT_HTTP_ERROR = 'http-error';
|
|
99
|
+
|
|
100
|
+
/** 网络状态变化事件名称 */
|
|
101
|
+
export var EVENT_NETWORK_STATUS = 'network-status';
|
|
102
|
+
|
|
103
|
+
/** 路由变化事件名称 */
|
|
104
|
+
export var EVENT_ROUTE_CHANGE = 'route-change';
|
|
105
|
+
|
|
106
|
+
/** 页面生命周期事件名称 */
|
|
107
|
+
export var EVENT_PAGE_LIFECYCLE = 'page-lifecycle';
|
|
108
|
+
|
|
109
|
+
// ==================== 网络监控常量 ====================
|
|
110
|
+
|
|
111
|
+
/** 网络监控黑名单域名列表 */
|
|
112
|
+
export var BLACK_HOST_NAME = ['arms', 'log', 'marmot-cloud.com', 'alipayobjects.com', 'renderpre.alipay.com', 'nemo-office.alipay.com', 'render.alipay.com'];
|
|
113
|
+
|
|
114
|
+
/** 网络监控黑名单路径列表 */
|
|
115
|
+
export var BLACK_PATH_NAME = ['r.png', 'dwcookieLogGet.do', 'track', 'spm', 'logstores', 'render', '.json', '.js', '.css', '.wasm', '.png', '.jpg', '.jpeg', '.weapp', '.data'];
|
|
116
|
+
|
|
117
|
+
/** 需要从响应中提取的 HTTP 头字段 */
|
|
118
|
+
export var HEADERS_TO_EXTRACT = ['sky_trace_id', 'antbank-traceid'];
|
|
119
|
+
|
|
120
|
+
/** 默认白名单 URL 列表(rrweb 录制时设置) */
|
|
121
|
+
export var DEFAULT_WHITE_LIST_URLS = ['http://alipay-rmsdeploy-image.cn-hangzhou.alipay.aliyun-inc.com'];
|
|
122
|
+
|
|
123
|
+
// ==================== 日志常量 ====================
|
|
124
|
+
|
|
125
|
+
/** 日志输出统一前缀 */
|
|
126
|
+
export var LOG_PREFIX = '[Rlog]';
|
|
127
|
+
|
|
128
|
+
// ==================== IndexedDB 常量 ====================
|
|
129
|
+
|
|
130
|
+
/** IndexedDB 数据库名称 */
|
|
131
|
+
export var IDB_DB_NAME = 'LogStorageDB';
|
|
132
|
+
|
|
133
|
+
/** IndexedDB 对象存储名称 */
|
|
134
|
+
export var IDB_STORE_NAME = 'logs';
|
|
135
|
+
|
|
136
|
+
/** IndexedDB 数据库版本号 */
|
|
137
|
+
export var IDB_VERSION = 2;
|
|
138
|
+
|
|
139
|
+
// ==================== rrweb 录制默认配置 ====================
|
|
140
|
+
|
|
141
|
+
/** 图片导出格式 */
|
|
142
|
+
export var CANVAS_EXPORT_TYPE = 'image/webp';
|
|
143
|
+
|
|
144
|
+
/** 图片导出质量 */
|
|
145
|
+
export var CANVAS_EXPORT_QUALITY = 0.6;
|
|
@@ -12,5 +12,17 @@ export declare class IndexedDBAdapter implements StorageAdapter {
|
|
|
12
12
|
unshiftBatch(deviceId: string, data: any[]): Promise<void>;
|
|
13
13
|
pull(deviceId: string, length: number): Promise<any[]>;
|
|
14
14
|
clear(deviceId: string): Promise<void>;
|
|
15
|
+
/**
|
|
16
|
+
* 按时间范围提取事件(不移除)
|
|
17
|
+
*/
|
|
18
|
+
pullByTimeRange(deviceId: string, startTime: number, endTime: number): Promise<any[]>;
|
|
19
|
+
/**
|
|
20
|
+
* 按时间范围移除事件(移除 sinceTime 及之后的所有事件)
|
|
21
|
+
*/
|
|
22
|
+
removeByTimeRange(deviceId: string, sinceTime: number): Promise<void>;
|
|
23
|
+
/**
|
|
24
|
+
* 获取存储的事件数量(非破坏性只读操作)
|
|
25
|
+
*/
|
|
26
|
+
count(deviceId: string): Promise<number>;
|
|
15
27
|
}
|
|
16
28
|
//# sourceMappingURL=indexeddb-adapt.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"indexeddb-adapt.d.ts","sourceRoot":"","sources":["../../../../src/lib/drive/indexeddb-adapt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"indexeddb-adapt.d.ts","sourceRoot":"","sources":["../../../../src/lib/drive/indexeddb-adapt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAoBrD,qBAAa,gBAAiB,YAAW,cAAc;IACrD,OAAO,CAAC,EAAE,CAA4B;IACtC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,WAAW,CAA8B;;YAMnC,MAAM;YAqDN,QAAQ;YAUR,eAAe;IAwBvB,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAgChD,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAgCnD,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAgC1D,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAsCtD,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAU5C;;OAEG;IACG,eAAe,CACnB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,GAAG,EAAE,CAAC;IAwBjB;;OAEG;IACG,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkC3E;;OAEG;IACG,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAc/C"}
|