@antglobal/rlog-sdk 0.0.1755855517-dev.14 → 0.0.1755855517-dev.16
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 +2 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +12 -9
- package/dist/esm/lib/api.d.ts.map +1 -1
- package/dist/esm/lib/api.js +5 -4
- 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.map +1 -1
- package/dist/esm/lib/drive/indexeddb-adapt.js +10 -10
- package/dist/esm/lib/drive/localstorage-adapt.d.ts.map +1 -1
- package/dist/esm/lib/drive/localstorage-adapt.js +14 -14
- package/dist/esm/lib/drive/memory-adapt.d.ts.map +1 -1
- package/dist/esm/lib/drive/memory-adapt.js +8 -6
- 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/error.d.ts.map +1 -1
- package/dist/esm/lib/error.js +2 -1
- package/dist/esm/lib/init.d.ts.map +1 -1
- package/dist/esm/lib/init.js +78 -52
- package/dist/esm/lib/logger.js +6 -5
- package/dist/esm/lib/net.d.ts.map +1 -1
- package/dist/esm/lib/net.js +8 -14
- 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 +7 -6
- package/dist/esm/lib/rrweb.d.ts.map +1 -1
- package/dist/esm/lib/rrweb.js +9 -9
- package/dist/esm/lib/storage-manager.d.ts.map +1 -1
- package/dist/esm/lib/storage-manager.js +18 -19
- package/dist/esm/lib/upload-worker-manager.d.ts.map +1 -1
- package/dist/esm/lib/upload-worker-manager.js +14 -17
- package/dist/esm/lib/upload-worker.d.ts +1 -1
- package/dist/esm/lib/upload-worker.d.ts.map +1 -1
- package/dist/esm/lib/upload-worker.js +3 -1
- package/dist/esm/lib/uploader.d.ts +22 -0
- package/dist/esm/lib/uploader.d.ts.map +1 -1
- package/dist/esm/lib/uploader.js +132 -13
- package/dist/esm/lib/utils.d.ts +64 -0
- package/dist/esm/lib/utils.d.ts.map +1 -1
- package/dist/esm/lib/utils.js +230 -5
- package/dist/lib/index.d.ts +2 -0
- package/dist/lib/index.d.ts.map +1 -1
- package/dist/lib/index.js +11 -8
- package/dist/lib/lib/api.d.ts.map +1 -1
- package/dist/lib/lib/api.js +5 -4
- 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.map +1 -1
- package/dist/lib/lib/drive/indexeddb-adapt.js +10 -9
- package/dist/lib/lib/drive/localstorage-adapt.d.ts.map +1 -1
- package/dist/lib/lib/drive/localstorage-adapt.js +14 -14
- package/dist/lib/lib/drive/memory-adapt.d.ts.map +1 -1
- package/dist/lib/lib/drive/memory-adapt.js +7 -6
- 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/error.d.ts.map +1 -1
- package/dist/lib/lib/error.js +2 -1
- package/dist/lib/lib/init.d.ts.map +1 -1
- package/dist/lib/lib/init.js +76 -50
- package/dist/lib/lib/logger.js +5 -5
- package/dist/lib/lib/net.d.ts.map +1 -1
- package/dist/lib/lib/net.js +12 -18
- 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 +7 -6
- package/dist/lib/lib/rrweb.d.ts.map +1 -1
- package/dist/lib/lib/rrweb.js +8 -8
- package/dist/lib/lib/storage-manager.d.ts.map +1 -1
- package/dist/lib/lib/storage-manager.js +18 -19
- package/dist/lib/lib/upload-worker-manager.d.ts.map +1 -1
- package/dist/lib/lib/upload-worker-manager.js +13 -16
- package/dist/lib/lib/upload-worker.d.ts +1 -1
- package/dist/lib/lib/upload-worker.d.ts.map +1 -1
- package/dist/lib/lib/upload-worker.js +2 -1
- package/dist/lib/lib/uploader.d.ts +22 -0
- package/dist/lib/lib/uploader.d.ts.map +1 -1
- package/dist/lib/lib/uploader.js +132 -12
- package/dist/lib/lib/utils.d.ts +64 -0
- package/dist/lib/lib/utils.d.ts.map +1 -1
- package/dist/lib/lib/utils.js +238 -6
- package/dist/rlog-sdk.min.js +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
2
|
+
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
3
|
+
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
|
|
4
|
+
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
|
|
5
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
6
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
|
|
7
|
+
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); }
|
|
8
|
+
import logger from "../logger";
|
|
9
|
+
import { SAFE_STORAGE_TEST_KEY } from "../constants";
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* 安全的 KV 存储工具
|
|
13
|
+
* 提供与 localStorage 相同的 getItem/setItem/removeItem 接口,
|
|
14
|
+
* 当 localStorage 不可用时自动降级到内存 Map 存储。
|
|
15
|
+
*
|
|
16
|
+
* 用途:给 utils.ts 中 deviceId、session 注册表等轻量 KV 场景使用,
|
|
17
|
+
* 避免直接裸调 localStorage 导致在隐私模式、iframe sandbox 等环境下抛异常。
|
|
18
|
+
*/
|
|
19
|
+
var SafeStorage = /*#__PURE__*/function () {
|
|
20
|
+
function SafeStorage() {
|
|
21
|
+
_classCallCheck(this, SafeStorage);
|
|
22
|
+
_defineProperty(this, "memoryFallback", new Map());
|
|
23
|
+
_defineProperty(this, "useMemory", false);
|
|
24
|
+
this.useMemory = !this.isLocalStorageAvailable();
|
|
25
|
+
if (this.useMemory) {
|
|
26
|
+
logger.warn('localStorage 不可用,SafeStorage 已降级为内存存储');
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* 检测 localStorage 是否可用
|
|
32
|
+
*/
|
|
33
|
+
_createClass(SafeStorage, [{
|
|
34
|
+
key: "isLocalStorageAvailable",
|
|
35
|
+
value: function isLocalStorageAvailable() {
|
|
36
|
+
try {
|
|
37
|
+
if (typeof window === 'undefined' || !window.localStorage) {
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
var testKey = SAFE_STORAGE_TEST_KEY;
|
|
41
|
+
window.localStorage.setItem(testKey, '1');
|
|
42
|
+
window.localStorage.removeItem(testKey);
|
|
43
|
+
return true;
|
|
44
|
+
} catch (_unused) {
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}, {
|
|
49
|
+
key: "getItem",
|
|
50
|
+
value: function getItem(key) {
|
|
51
|
+
if (this.useMemory) {
|
|
52
|
+
var _this$memoryFallback$;
|
|
53
|
+
return (_this$memoryFallback$ = this.memoryFallback.get(key)) !== null && _this$memoryFallback$ !== void 0 ? _this$memoryFallback$ : null;
|
|
54
|
+
}
|
|
55
|
+
try {
|
|
56
|
+
return localStorage.getItem(key);
|
|
57
|
+
} catch (_unused2) {
|
|
58
|
+
var _this$memoryFallback$2;
|
|
59
|
+
// 运行时突然不可用(如存储配额超限),降级到内存
|
|
60
|
+
this.useMemory = true;
|
|
61
|
+
return (_this$memoryFallback$2 = this.memoryFallback.get(key)) !== null && _this$memoryFallback$2 !== void 0 ? _this$memoryFallback$2 : null;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}, {
|
|
65
|
+
key: "setItem",
|
|
66
|
+
value: function setItem(key, value) {
|
|
67
|
+
if (this.useMemory) {
|
|
68
|
+
this.memoryFallback.set(key, value);
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
try {
|
|
72
|
+
localStorage.setItem(key, value);
|
|
73
|
+
} catch (_unused3) {
|
|
74
|
+
this.useMemory = true;
|
|
75
|
+
this.memoryFallback.set(key, value);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}, {
|
|
79
|
+
key: "removeItem",
|
|
80
|
+
value: function removeItem(key) {
|
|
81
|
+
if (this.useMemory) {
|
|
82
|
+
this.memoryFallback.delete(key);
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
try {
|
|
86
|
+
localStorage.removeItem(key);
|
|
87
|
+
} catch (_unused4) {
|
|
88
|
+
this.useMemory = true;
|
|
89
|
+
this.memoryFallback.delete(key);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}]);
|
|
93
|
+
return SafeStorage;
|
|
94
|
+
}();
|
|
95
|
+
/** 单例导出 */
|
|
96
|
+
export var safeStorage = new SafeStorage();
|
|
@@ -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;AAU/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
|
@@ -2,6 +2,7 @@ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" ==
|
|
|
2
2
|
import { getConfig } from "./config";
|
|
3
3
|
import { record } from 'rrweb';
|
|
4
4
|
import logger from "./logger";
|
|
5
|
+
import { EVENT_CUSTOM_ERROR } from "./constants";
|
|
5
6
|
|
|
6
7
|
// 错误触发器引用(错误采集模式下由 init.ts 注入)
|
|
7
8
|
var errorTriggerInstance = null;
|
|
@@ -27,7 +28,7 @@ export function getErrorTrigger() {
|
|
|
27
28
|
export var sendErrorToAnalytics = function sendErrorToAnalytics(data) {
|
|
28
29
|
// 使用 rrweb 的自定义事件功能上报错误
|
|
29
30
|
try {
|
|
30
|
-
record.addCustomEvent(
|
|
31
|
+
record.addCustomEvent(EVENT_CUSTOM_ERROR, data);
|
|
31
32
|
} catch (error) {
|
|
32
33
|
// 降级方案:直接控制台输出
|
|
33
34
|
logger.error('Error captured', data);
|
|
@@ -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,
|
|
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,CAoDN;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,CAuEN"}
|
package/dist/esm/lib/init.js
CHANGED
|
@@ -1,11 +1,15 @@
|
|
|
1
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
2
|
+
function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw new Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator.return && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw new Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, catch: function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; }
|
|
3
|
+
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
|
|
4
|
+
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
|
|
1
5
|
import { startRecord, stopRecord } from "./rrweb";
|
|
2
6
|
import { initConfigManager, getConfig } from "./config";
|
|
3
|
-
import { startUploadLoop, resetUploadLoop, cancelUploadLoop } from "./uploader";
|
|
7
|
+
import { startUploadLoop, resetUploadLoop, cancelUploadLoop, flushOrphanSessions } from "./uploader";
|
|
4
8
|
import { initRouterMonitor, stopRouterMonitor } from "./router-monitor";
|
|
5
9
|
import { initErrorHandler, cleanupErrorHandler, setErrorTrigger } from "./error";
|
|
6
10
|
import { setSdkLogEndpoint, restoreXhr, setNetErrorTrigger, normalizeUrl } from "./net";
|
|
7
11
|
import { storage } from "./storage-manager";
|
|
8
|
-
import {
|
|
12
|
+
import { getStorageKey, getSessionId, unregisterSession, cleanupStaleSessions } from "./utils";
|
|
9
13
|
import { ErrorTrigger } from "./error-trigger";
|
|
10
14
|
import logger from "./logger";
|
|
11
15
|
|
|
@@ -57,13 +61,16 @@ export function cancelRlog() {
|
|
|
57
61
|
|
|
58
62
|
// 7. 可选:清除已存储的数据
|
|
59
63
|
if (options.clearData) {
|
|
60
|
-
var
|
|
61
|
-
if (
|
|
62
|
-
storage.clear(
|
|
64
|
+
var storageKey = getStorageKey();
|
|
65
|
+
if (storageKey) {
|
|
66
|
+
storage.clear(storageKey).catch(function (error) {
|
|
63
67
|
logger.error('Error clearing storage', error);
|
|
64
68
|
});
|
|
65
69
|
}
|
|
66
70
|
}
|
|
71
|
+
|
|
72
|
+
// 8. 从 session 注册表中移除当前 session
|
|
73
|
+
unregisterSession(getSessionId());
|
|
67
74
|
logger.log("SDK cancelled successfully via ".concat(context));
|
|
68
75
|
} catch (error) {
|
|
69
76
|
logger.error("Error cancelling SDK via ".concat(context), error);
|
|
@@ -90,59 +97,78 @@ export function initRLog(serv, appId, cdnConfigUrl) {
|
|
|
90
97
|
// 重置上传循环状态
|
|
91
98
|
resetUploadLoop();
|
|
92
99
|
|
|
100
|
+
// 清理过期的 session 数据(异步,不阻塞初始化)
|
|
101
|
+
setTimeout(function () {
|
|
102
|
+
return cleanupStaleSessions();
|
|
103
|
+
}, 0);
|
|
104
|
+
|
|
93
105
|
// 设置SDK日志上报接口地址,并自动加入黑名单避免循环上报
|
|
94
106
|
var normalizedServUrl = normalizeUrl(serv);
|
|
95
107
|
setSdkLogEndpoint(normalizedServUrl);
|
|
96
108
|
|
|
97
109
|
// 初始化配置管理器
|
|
98
|
-
initConfigManager(cdnConfigUrl).then(function () {
|
|
110
|
+
initConfigManager(cdnConfigUrl).then( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
|
|
99
111
|
var _config$error;
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
112
|
+
var config, isErrorMode, _config$errorCapture, _config$errorCapture2, enableError;
|
|
113
|
+
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
114
|
+
while (1) switch (_context.prev = _context.next) {
|
|
115
|
+
case 0:
|
|
116
|
+
// 获取配置
|
|
117
|
+
config = getConfig(); // 检查采集总开关
|
|
118
|
+
if (config.enable) {
|
|
119
|
+
_context.next = 4;
|
|
120
|
+
break;
|
|
121
|
+
}
|
|
122
|
+
logger.log('SDK is disabled by config');
|
|
123
|
+
return _context.abrupt("return");
|
|
124
|
+
case 4:
|
|
125
|
+
isErrorMode = config.captureMode === 'error';
|
|
126
|
+
if (isErrorMode) {
|
|
127
|
+
// ===== 错误采集模式初始化 =====
|
|
128
|
+
logger.log('Initializing in error capture mode');
|
|
129
|
+
|
|
130
|
+
// 创建 ErrorTrigger 实例(只负责状态切换)
|
|
131
|
+
errorTriggerInstance = new ErrorTrigger({
|
|
132
|
+
beforeDuration: (_config$errorCapture = config.errorCapture) === null || _config$errorCapture === void 0 ? void 0 : _config$errorCapture.beforeDuration,
|
|
133
|
+
afterDuration: (_config$errorCapture2 = config.errorCapture) === null || _config$errorCapture2 === void 0 ? void 0 : _config$errorCapture2.afterDuration
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
// 将 errorTrigger 注入到 error 和 net 模块
|
|
137
|
+
setErrorTrigger(errorTriggerInstance);
|
|
138
|
+
setNetErrorTrigger(errorTriggerInstance);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
// 启动录制(事件将写入 Storage)
|
|
142
|
+
startRecord();
|
|
143
|
+
|
|
144
|
+
// 在启动上传循环前,先将孤儿 session 的残留数据塞入当前 storage 队列头部
|
|
145
|
+
// 确保上传循环启动时这些数据已经就位,会被优先消费上传
|
|
146
|
+
_context.next = 9;
|
|
147
|
+
return flushOrphanSessions();
|
|
148
|
+
case 9:
|
|
149
|
+
// 启动统一上传循环
|
|
150
|
+
// 错误模式下:idle 时跳过上传,uploading 时上传,状态由 ErrorTrigger 控制
|
|
151
|
+
// 全量模式下:持续轮询上传
|
|
152
|
+
startUploadLoop(normalizedServUrl, appId);
|
|
153
|
+
|
|
154
|
+
// 初始化路由监控
|
|
155
|
+
initRouterMonitor(config.routerMonitor);
|
|
156
|
+
|
|
157
|
+
// 判断是否启用错误监听上报:
|
|
158
|
+
// 1. 错误采集模式下强制启用(错误捕获模式必须依赖错误监听初始化)
|
|
159
|
+
// 2. 非错误模式下,根据用户 error 配置决定,默认不启用
|
|
160
|
+
enableError = isErrorMode || ((_config$error = config.error) !== null && _config$error !== void 0 ? _config$error : false);
|
|
161
|
+
if (enableError) {
|
|
162
|
+
initErrorHandler();
|
|
163
|
+
} else {
|
|
164
|
+
logger.log('Error handling is disabled by config');
|
|
165
|
+
}
|
|
166
|
+
case 13:
|
|
167
|
+
case "end":
|
|
168
|
+
return _context.stop();
|
|
169
|
+
}
|
|
170
|
+
}, _callee);
|
|
171
|
+
}))).catch(function (error) {
|
|
146
172
|
logger.error('Failed to initialize SDK', error);
|
|
147
173
|
});
|
|
148
174
|
}
|
package/dist/esm/lib/logger.js
CHANGED
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
* 统一管理所有日志输出,添加统一前缀 [Rlog]
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
+
import { LOG_PREFIX } from "./constants";
|
|
7
|
+
|
|
6
8
|
/**
|
|
7
9
|
* 日志级别
|
|
8
10
|
*/
|
|
@@ -14,22 +16,21 @@
|
|
|
14
16
|
*/
|
|
15
17
|
function _log(level) {
|
|
16
18
|
var _console, _console2, _console3, _console4;
|
|
17
|
-
var prefix = '[Rlog]';
|
|
18
19
|
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
|
|
19
20
|
args[_key - 1] = arguments[_key];
|
|
20
21
|
}
|
|
21
22
|
switch (level) {
|
|
22
23
|
case 'log':
|
|
23
|
-
(_console = console).log.apply(_console, [
|
|
24
|
+
(_console = console).log.apply(_console, [LOG_PREFIX].concat(args));
|
|
24
25
|
break;
|
|
25
26
|
case 'info':
|
|
26
|
-
(_console2 = console).info.apply(_console2, [
|
|
27
|
+
(_console2 = console).info.apply(_console2, [LOG_PREFIX].concat(args));
|
|
27
28
|
break;
|
|
28
29
|
case 'warn':
|
|
29
|
-
(_console3 = console).warn.apply(_console3, [
|
|
30
|
+
(_console3 = console).warn.apply(_console3, [LOG_PREFIX].concat(args));
|
|
30
31
|
break;
|
|
31
32
|
case 'error':
|
|
32
|
-
(_console4 = console).error.apply(_console4, [
|
|
33
|
+
(_console4 = console).error.apply(_console4, [LOG_PREFIX].concat(args));
|
|
33
34
|
break;
|
|
34
35
|
}
|
|
35
36
|
}
|
|
@@ -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;
|
|
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;AAc/C;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,GAAG,IAAI,CAErE;AAmBD,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,QAoPxC;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
|
@@ -16,6 +16,7 @@ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
|
16
16
|
import { record } from 'rrweb';
|
|
17
17
|
import { getConfig } from "./config";
|
|
18
18
|
import logger from "./logger";
|
|
19
|
+
import { BLACK_HOST_NAME, BLACK_PATH_NAME, HEADERS_TO_EXTRACT, EVENT_NETWORK_STATUS, EVENT_HTTP_SUCCESS, EVENT_HTTP_ERROR } from "./constants";
|
|
19
20
|
|
|
20
21
|
// 错误触发器引用(错误采集模式下由 init.ts 注入)
|
|
21
22
|
var errorTriggerInstance = null;
|
|
@@ -27,9 +28,7 @@ export function setNetErrorTrigger(trigger) {
|
|
|
27
28
|
errorTriggerInstance = trigger;
|
|
28
29
|
}
|
|
29
30
|
|
|
30
|
-
//
|
|
31
|
-
var BLACK_HOST_NAME = ['arms', 'log', 'marmot-cloud.com', 'alipayobjects.com', 'renderpre.alipay.com', 'nemo-office.alipay.com', 'render.alipay.com'];
|
|
32
|
-
var BLACK_PATH_NAME = ['r.png', 'dwcookieLogGet.do', 'track', 'spm', 'logstores', 'render', '.json', '.js', '.css', '.wasm', '.png', '.jpg', '.jpeg', '.weapp', '.data'];
|
|
31
|
+
// 根据业务需求配置的黑名单和需要提取的响应头字段,已从 constants.ts 导入
|
|
33
32
|
|
|
34
33
|
// 定义白名单URL列表和自定义请求头
|
|
35
34
|
// 默认白名单为空,不抓取任何请求,需要用户手动配置
|
|
@@ -44,9 +43,6 @@ var blackListUrls = [
|
|
|
44
43
|
// SDK日志上报接口地址
|
|
45
44
|
var sdkLogEndpoint = null;
|
|
46
45
|
|
|
47
|
-
// 需要提取的响应头字段
|
|
48
|
-
var HEADERS_TO_EXTRACT = ['sky_trace_id', 'antbank-traceid'];
|
|
49
|
-
|
|
50
46
|
// 辅助函数:规范化URL路径
|
|
51
47
|
export function normalizeUrl(url) {
|
|
52
48
|
try {
|
|
@@ -157,7 +153,7 @@ export function shouldRecordUrl(url) {
|
|
|
157
153
|
// 网络状态变化事件处理
|
|
158
154
|
function handleOnline() {
|
|
159
155
|
try {
|
|
160
|
-
record.addCustomEvent(
|
|
156
|
+
record.addCustomEvent(EVENT_NETWORK_STATUS, {
|
|
161
157
|
type: 'NETWORK_ONLINE',
|
|
162
158
|
timestamp: Date.now()
|
|
163
159
|
});
|
|
@@ -167,7 +163,7 @@ function handleOnline() {
|
|
|
167
163
|
}
|
|
168
164
|
function handleOffline() {
|
|
169
165
|
try {
|
|
170
|
-
record.addCustomEvent(
|
|
166
|
+
record.addCustomEvent(EVENT_NETWORK_STATUS, {
|
|
171
167
|
type: 'NETWORK_OFFLINE',
|
|
172
168
|
timestamp: Date.now()
|
|
173
169
|
});
|
|
@@ -242,7 +238,7 @@ export function watchXhr(r) {
|
|
|
242
238
|
}
|
|
243
239
|
});
|
|
244
240
|
try {
|
|
245
|
-
r.addCustomEvent(
|
|
241
|
+
r.addCustomEvent(EVENT_HTTP_SUCCESS, _objectSpread(_objectSpread({}, requestInfo), {}, {
|
|
246
242
|
dur: requestInfo.endTime - requestInfo.startTime,
|
|
247
243
|
responseHeaders: responseHeaders,
|
|
248
244
|
pagePath: window.location.href
|
|
@@ -276,7 +272,7 @@ export function watchXhr(r) {
|
|
|
276
272
|
// 监听请求错误
|
|
277
273
|
this.addEventListener('error', function () {
|
|
278
274
|
try {
|
|
279
|
-
r.addCustomEvent(
|
|
275
|
+
r.addCustomEvent(EVENT_HTTP_ERROR, _objectSpread(_objectSpread({}, requestInfo), {}, {
|
|
280
276
|
dur: requestInfo.endTime - requestInfo.startTime,
|
|
281
277
|
pagePath: window.location.href
|
|
282
278
|
}));
|
|
@@ -324,8 +320,6 @@ export function watchXhr(r) {
|
|
|
324
320
|
response = _context.sent;
|
|
325
321
|
endTime = Date.now(); // 检查是否应该记录该URL
|
|
326
322
|
if (shouldRecordUrl(url)) {
|
|
327
|
-
logger.log("[Fetch] ".concat(method, " ").concat(url, " - ").concat(endTime - startTime, "ms"));
|
|
328
|
-
|
|
329
323
|
// 提取指定响应头字段
|
|
330
324
|
responseHeaders = {};
|
|
331
325
|
HEADERS_TO_EXTRACT.forEach(function (headerName) {
|
|
@@ -340,7 +334,7 @@ export function watchXhr(r) {
|
|
|
340
334
|
}
|
|
341
335
|
});
|
|
342
336
|
try {
|
|
343
|
-
r.addCustomEvent(
|
|
337
|
+
r.addCustomEvent(EVENT_HTTP_SUCCESS, {
|
|
344
338
|
url: url,
|
|
345
339
|
method: method,
|
|
346
340
|
dur: endTime - startTime,
|
|
@@ -376,7 +370,7 @@ export function watchXhr(r) {
|
|
|
376
370
|
_context.t0 = _context["catch"](3);
|
|
377
371
|
logger.error("[Fetch Error] ".concat(method, " ").concat(url), _context.t0);
|
|
378
372
|
try {
|
|
379
|
-
r.addCustomEvent(
|
|
373
|
+
r.addCustomEvent(EVENT_HTTP_ERROR, {
|
|
380
374
|
url: url,
|
|
381
375
|
method: method,
|
|
382
376
|
pagePath: window.location.href
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../../src/lib/request.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../../src/lib/request.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,GAAG,CAAC;IACV,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC;IACrB,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;CACzB;AAED;;;;;GAKG;AACH,wBAAsB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,QAAQ,CAAC,CAwE1F;AAED;;;;;GAKG;AACH,wBAAsB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,IAAI,CAAC,cAAc,EAAE,QAAQ,GAAG,MAAM,CAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAE/G;AAED;;;;;;GAMG;AACH,wBAAsB,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,OAAO,GAAE,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAEnH"}
|
package/dist/esm/lib/request.js
CHANGED
|
@@ -8,7 +8,7 @@ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" ==
|
|
|
8
8
|
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
|
|
9
9
|
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
|
|
10
10
|
// 简单的 XMLHttpRequest 封装,提供更好的兼容性
|
|
11
|
-
|
|
11
|
+
import { REQUEST_TIMEOUT } from "./constants";
|
|
12
12
|
/**
|
|
13
13
|
* 发送 HTTP 请求
|
|
14
14
|
* @param url 请求地址
|
|
@@ -40,7 +40,7 @@ function _request() {
|
|
|
40
40
|
headers = _options$headers === void 0 ? {} : _options$headers,
|
|
41
41
|
body = options.body,
|
|
42
42
|
_options$timeout = options.timeout,
|
|
43
|
-
timeout = _options$timeout === void 0 ?
|
|
43
|
+
timeout = _options$timeout === void 0 ? REQUEST_TIMEOUT : _options$timeout;
|
|
44
44
|
var xhr = new XMLHttpRequest();
|
|
45
45
|
|
|
46
46
|
// 设置超时
|
|
@@ -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;
|
|
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;AAKrD,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"}
|
|
@@ -12,6 +12,7 @@ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e
|
|
|
12
12
|
import { record } from 'rrweb';
|
|
13
13
|
import { getConfig } from "./config";
|
|
14
14
|
import logger from "./logger";
|
|
15
|
+
import { EVENT_ROUTE_CHANGE, EVENT_PAGE_LIFECYCLE } from "./constants";
|
|
15
16
|
|
|
16
17
|
// 路由变化事件类型
|
|
17
18
|
|
|
@@ -72,7 +73,7 @@ function reportRouteChange(from, to, method) {
|
|
|
72
73
|
}
|
|
73
74
|
try {
|
|
74
75
|
// 使用 rrweb 的自定义事件功能上报
|
|
75
|
-
record.addCustomEvent(
|
|
76
|
+
record.addCustomEvent(EVENT_ROUTE_CHANGE, event);
|
|
76
77
|
} catch (error) {
|
|
77
78
|
// 忽略录制已停止时的异常
|
|
78
79
|
logger.warn('Failed to add custom event (recording may have stopped)', error);
|
|
@@ -175,7 +176,7 @@ export function updateRouterConfig(config) {
|
|
|
175
176
|
*/
|
|
176
177
|
function handlePageLoad() {
|
|
177
178
|
try {
|
|
178
|
-
record.addCustomEvent(
|
|
179
|
+
record.addCustomEvent(EVENT_PAGE_LIFECYCLE, {
|
|
179
180
|
type: 'PAGE_LOAD',
|
|
180
181
|
url: window.location.href,
|
|
181
182
|
timestamp: Date.now()
|
|
@@ -190,7 +191,7 @@ function handlePageLoad() {
|
|
|
190
191
|
*/
|
|
191
192
|
function handlePageUnload() {
|
|
192
193
|
try {
|
|
193
|
-
record.addCustomEvent(
|
|
194
|
+
record.addCustomEvent(EVENT_PAGE_LIFECYCLE, {
|
|
194
195
|
type: 'PAGE_UNLOAD',
|
|
195
196
|
url: window.location.href,
|
|
196
197
|
timestamp: Date.now()
|
|
@@ -206,7 +207,7 @@ function handlePageUnload() {
|
|
|
206
207
|
*/
|
|
207
208
|
function handlePageHide(event) {
|
|
208
209
|
try {
|
|
209
|
-
record.addCustomEvent(
|
|
210
|
+
record.addCustomEvent(EVENT_PAGE_LIFECYCLE, {
|
|
210
211
|
type: 'PAGE_HIDE',
|
|
211
212
|
url: window.location.href,
|
|
212
213
|
timestamp: Date.now(),
|
|
@@ -223,7 +224,7 @@ function handlePageHide(event) {
|
|
|
223
224
|
*/
|
|
224
225
|
function handlePageShow(event) {
|
|
225
226
|
try {
|
|
226
|
-
record.addCustomEvent(
|
|
227
|
+
record.addCustomEvent(EVENT_PAGE_LIFECYCLE, {
|
|
227
228
|
type: 'PAGE_SHOW',
|
|
228
229
|
url: window.location.href,
|
|
229
230
|
timestamp: Date.now(),
|
|
@@ -245,7 +246,7 @@ function handlePageShow(event) {
|
|
|
245
246
|
function handleVisibilityChange() {
|
|
246
247
|
try {
|
|
247
248
|
var isHidden = document.visibilityState === 'hidden';
|
|
248
|
-
record.addCustomEvent(
|
|
249
|
+
record.addCustomEvent(EVENT_PAGE_LIFECYCLE, {
|
|
249
250
|
type: isHidden ? 'PAGE_VISIBILITY_HIDDEN' : 'PAGE_VISIBILITY_VISIBLE',
|
|
250
251
|
url: window.location.href,
|
|
251
252
|
timestamp: Date.now()
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rrweb.d.ts","sourceRoot":"","sources":["../../../src/lib/rrweb.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"rrweb.d.ts","sourceRoot":"","sources":["../../../src/lib/rrweb.ts"],"names":[],"mappings":"AAgBA,eAAO,MAAM,UAAU,YAKtB,CAAC;AAEF,eAAO,MAAM,WAAW,YAsFvB,CAAC"}
|
package/dist/esm/lib/rrweb.js
CHANGED
|
@@ -6,11 +6,12 @@ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol"
|
|
|
6
6
|
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); }
|
|
7
7
|
import * as rrweb from 'rrweb';
|
|
8
8
|
import { getRecordConsolePlugin } from '@rrweb/rrweb-plugin-console-record';
|
|
9
|
-
import { getDeviceId } from "./utils";
|
|
9
|
+
import { getDeviceId, getStorageKey } from "./utils";
|
|
10
10
|
import { storage } from "./storage-manager";
|
|
11
11
|
import { setCustomHeaders, setWhiteListUrls, watchXhr } from "./net";
|
|
12
12
|
import { getConfig } from "./config";
|
|
13
13
|
import logger from "./logger";
|
|
14
|
+
import { STORAGE_KEY_DEVICE_ID, DEFAULT_WHITE_LIST_URLS, CANVAS_EXPORT_TYPE, CANVAS_EXPORT_QUALITY } from "./constants";
|
|
14
15
|
var stopRecordFn = null;
|
|
15
16
|
export var stopRecord = function stopRecord() {
|
|
16
17
|
if (stopRecordFn) {
|
|
@@ -26,10 +27,11 @@ export var startRecord = function startRecord() {
|
|
|
26
27
|
return;
|
|
27
28
|
}
|
|
28
29
|
var deviceId = getDeviceId();
|
|
30
|
+
var storageKey = getStorageKey();
|
|
29
31
|
|
|
30
32
|
// 根据配置决定是否清空存储数据
|
|
31
33
|
if (config.clearStorageBeforeRecord) {
|
|
32
|
-
storage.clear(
|
|
34
|
+
storage.clear(storageKey).then(function () {
|
|
33
35
|
logger.log('Storage cleared before recording');
|
|
34
36
|
}).catch(function (error) {
|
|
35
37
|
logger.warn('Failed to clear storage before recording', error);
|
|
@@ -67,7 +69,7 @@ export var startRecord = function startRecord() {
|
|
|
67
69
|
// }
|
|
68
70
|
|
|
69
71
|
// 统一写入 Storage(full 和 error 模式共用)
|
|
70
|
-
storage.push(
|
|
72
|
+
storage.push(storageKey, event);
|
|
71
73
|
},
|
|
72
74
|
recordCanvas: true,
|
|
73
75
|
sampling: config.sampling,
|
|
@@ -77,8 +79,8 @@ export var startRecord = function startRecord() {
|
|
|
77
79
|
maskTextClass: config.maskTextClass,
|
|
78
80
|
// 图像的格式
|
|
79
81
|
dataURLOptions: {
|
|
80
|
-
type:
|
|
81
|
-
quality:
|
|
82
|
+
type: CANVAS_EXPORT_TYPE,
|
|
83
|
+
quality: CANVAS_EXPORT_QUALITY
|
|
82
84
|
},
|
|
83
85
|
collectFonts: true,
|
|
84
86
|
recordCrossOriginIframes: true,
|
|
@@ -88,10 +90,8 @@ export var startRecord = function startRecord() {
|
|
|
88
90
|
});
|
|
89
91
|
|
|
90
92
|
// 设置网络监控
|
|
91
|
-
setCustomHeaders({
|
|
92
|
-
|
|
93
|
-
});
|
|
94
|
-
setWhiteListUrls(['http://alipay-rmsdeploy-image.cn-hangzhou.alipay.aliyun-inc.com']);
|
|
93
|
+
setCustomHeaders(_defineProperty({}, STORAGE_KEY_DEVICE_ID, deviceId));
|
|
94
|
+
setWhiteListUrls(DEFAULT_WHITE_LIST_URLS);
|
|
95
95
|
|
|
96
96
|
// 根据配置决定是否开启接口请求抓取
|
|
97
97
|
if (config.http) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage-manager.d.ts","sourceRoot":"","sources":["../../../src/lib/storage-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"storage-manager.d.ts","sourceRoot":"","sources":["../../../src/lib/storage-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAO3D;;GAEG;AACH,cAAM,cAAe,YAAW,cAAc;IAC5C,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,cAAc,CAAwC;;IAM9D,OAAO,CAAC,aAAa;IAkCrB;;OAEG;YACW,SAAS;IA6BjB,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAIhD,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAInD,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAI1D,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAItD,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;IAUjB;;OAEG;IACG,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAU3E;;OAEG;IACH,cAAc,IAAI,MAAM;IAWxB;;OAEG;IACG,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;QAC/C,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;CAqBH;AAGD,eAAO,MAAM,OAAO,gBAAuB,CAAC"}
|