jason-trace-log 0.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/LICENSE +7 -0
- package/README.md +50 -0
- package/dist/lib/baseTrace.js +405 -0
- package/dist/lib/baseTrace.js.map +1 -0
- package/dist/lib/constants.js +26 -0
- package/dist/lib/constants.js.map +1 -0
- package/dist/lib/core/fetch.js +138 -0
- package/dist/lib/core/fetch.js.map +1 -0
- package/dist/lib/core/fingerprint.js +66 -0
- package/dist/lib/core/fingerprint.js.map +1 -0
- package/dist/lib/core/interface.js +3 -0
- package/dist/lib/core/interface.js.map +1 -0
- package/dist/lib/core/request.js +26 -0
- package/dist/lib/core/request.js.map +1 -0
- package/dist/lib/core/send.js +176 -0
- package/dist/lib/core/send.js.map +1 -0
- package/dist/lib/core/util.js +186 -0
- package/dist/lib/core/util.js.map +1 -0
- package/dist/lib/core/webvitals.js +63 -0
- package/dist/lib/core/webvitals.js.map +1 -0
- package/dist/lib/index.js +19 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/lib/trace.js +27 -0
- package/dist/lib/trace.js.map +1 -0
- package/dist/lib/typings/common.js +131 -0
- package/dist/lib/typings/common.js.map +1 -0
- package/dist/trace-log.esm.js +1391 -0
- package/dist/trace-log.esm.js.map +1 -0
- package/dist/trace-log.umd.js +1400 -0
- package/dist/trace-log.umd.js.map +1 -0
- package/dist/trace-sdk.esm.js +1391 -0
- package/dist/trace-sdk.esm.js.map +1 -0
- package/dist/trace-sdk.umd.js +1401 -0
- package/dist/trace-sdk.umd.js.map +1 -0
- package/dist/types/baseTrace.d.ts +58 -0
- package/dist/types/constants.d.ts +12 -0
- package/dist/types/core/fetch.d.ts +21 -0
- package/dist/types/core/fingerprint.d.ts +14 -0
- package/dist/types/core/interface.d.ts +10 -0
- package/dist/types/core/request.d.ts +3 -0
- package/dist/types/core/send.d.ts +84 -0
- package/dist/types/core/util.d.ts +19 -0
- package/dist/types/core/webvitals.d.ts +8 -0
- package/dist/types/index.d.ts +4 -0
- package/dist/types/trace.d.ts +3 -0
- package/dist/types/typings/common.d.ts +84 -0
- package/package.json +140 -0
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getFingerprintId = void 0;
|
|
4
|
+
// https://www.cnblogs.com/cute/p/13142139.html
|
|
5
|
+
function bin2hex(str) {
|
|
6
|
+
// discuss at: http://phpjs.org/functions/bin2hex/
|
|
7
|
+
// original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
|
|
8
|
+
// bugfixed by: Onno Marsman
|
|
9
|
+
// bugfixed by: Linuxworld
|
|
10
|
+
// improved by: ntoniazzi (http://phpjs.org/functions/bin2hex:361#comment_177616)
|
|
11
|
+
// example 1: bin2hex('Kev');
|
|
12
|
+
// returns 1: '4b6576'
|
|
13
|
+
// example 2: bin2hex(String.fromCharCode(0x00));
|
|
14
|
+
// returns 2: '00'
|
|
15
|
+
// https://gist.github.com/cythrawll/8603752
|
|
16
|
+
// let i = 0
|
|
17
|
+
var o = '';
|
|
18
|
+
// let l: number
|
|
19
|
+
var n = null;
|
|
20
|
+
str += '';
|
|
21
|
+
for (var i = 0, l = str.length; i < l; i++) {
|
|
22
|
+
n = str.charCodeAt(i).toString(16);
|
|
23
|
+
o += n.length < 2 ? '0' + n : n;
|
|
24
|
+
}
|
|
25
|
+
return o;
|
|
26
|
+
}
|
|
27
|
+
var DEFAULT_FINGPRINT_OPTIONS = {
|
|
28
|
+
font: "14px 'Arial'",
|
|
29
|
+
reactStyle: "#f60",
|
|
30
|
+
contentStyle: "#f60",
|
|
31
|
+
textBaseline: "top"
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* 生成唯一ID(非用户ID)
|
|
35
|
+
* 通过HTML5 Canvas API创建一个接近不重复的唯一指纹ID
|
|
36
|
+
* @param content
|
|
37
|
+
* @returns
|
|
38
|
+
*/
|
|
39
|
+
var getFingerprintId = function (content, options) {
|
|
40
|
+
if (!content) {
|
|
41
|
+
console.error("content is empty");
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
var canvas = document.createElement('canvas');
|
|
45
|
+
var ctx = canvas.getContext("2d");
|
|
46
|
+
// 如果不存在,则返回空值,说明不支持Canvas指纹
|
|
47
|
+
if (!ctx)
|
|
48
|
+
return null;
|
|
49
|
+
var txt = content || 'geekbang';
|
|
50
|
+
ctx.textBaseline = options && options.textBaseline ? options.textBaseline : "top";
|
|
51
|
+
ctx.font = options && options.font ? options.font : "14px 'Arial'";
|
|
52
|
+
ctx.fillStyle = options && options.reactStyle ? options.reactStyle : "#f60";
|
|
53
|
+
// 先画一个62x20矩形内容
|
|
54
|
+
ctx.fillRect(125, 1, 62, 20);
|
|
55
|
+
ctx.fillStyle = options && options.contentStyle ? options.contentStyle : "#069";
|
|
56
|
+
// 把字填充到矩形内
|
|
57
|
+
ctx.fillText(txt, 2, 15);
|
|
58
|
+
// ctx.fillStyle = "rgba(102, 204, 0, 0.7)";
|
|
59
|
+
// ctx.fillText(txt, 4, 17);
|
|
60
|
+
var b64 = canvas.toDataURL().replace("data:image/png;base64,", "");
|
|
61
|
+
var bin = atob(b64);
|
|
62
|
+
var crc = bin2hex(bin.slice(-16, -12));
|
|
63
|
+
return crc;
|
|
64
|
+
};
|
|
65
|
+
exports.getFingerprintId = getFingerprintId;
|
|
66
|
+
//# sourceMappingURL=fingerprint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fingerprint.js","sourceRoot":"","sources":["../../../src/core/fingerprint.ts"],"names":[],"mappings":";;;AAAA,+CAA+C;AAC/C,SAAS,OAAO,CAAC,GAAW;IAC1B,kDAAkD;IAClD,mEAAmE;IACnE,4BAA4B;IAC5B,0BAA0B;IAC1B,iFAAiF;IACjF,6BAA6B;IAC7B,sBAAsB;IACtB,iDAAiD;IACjD,kBAAkB;IAElB,4CAA4C;IAE5C,YAAY;IACZ,IAAI,CAAC,GAAG,EAAE,CAAA;IACV,gBAAgB;IAChB,IAAI,CAAC,GAAG,IAAI,CAAA;IACZ,GAAG,IAAI,EAAE,CAAC;IACV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3C,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACnC,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC;IAED,OAAO,CAAC,CAAC;AACX,CAAC;AASD,IAAM,yBAAyB,GAAuB;IACpD,IAAI,EAAE,cAAc;IACpB,UAAU,EAAE,MAAM;IAClB,YAAY,EAAE,MAAM;IACpB,YAAY,EAAE,KAAK;CACpB,CAAA;AAED;;;;;GAKG;AACI,IAAM,gBAAgB,GAAG,UAAC,OAAe,EAAE,OAA4B;IAC5E,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QAClC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAChD,IAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACpC,4BAA4B;IAC5B,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IAEtB,IAAM,GAAG,GAAG,OAAO,IAAI,UAAU,CAAC;IAClC,GAAG,CAAC,YAAY,GAAG,OAAO,IAAI,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC;IAClF,GAAG,CAAC,IAAI,GAAG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC;IAEnE,GAAG,CAAC,SAAS,GAAG,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC;IAC5E,gBAAgB;IAChB,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAE7B,GAAG,CAAC,SAAS,GAAG,OAAO,IAAI,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC;IAChF,WAAW;IACX,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IACzB,4CAA4C;IAC5C,4BAA4B;IAE5B,IAAM,GAAG,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,wBAAwB,EAAC,EAAE,CAAC,CAAC;IACpE,IAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;IACtB,IAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACxC,OAAO,GAAG,CAAC;AACb,CAAC,CAAA;AA5BY,QAAA,gBAAgB,oBA4B5B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interface.js","sourceRoot":"","sources":["../../../src/core/interface.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.xhr = exports.fetch = exports.sendBeacon = void 0;
|
|
4
|
+
var sendBeacon = function (dsn, body) {
|
|
5
|
+
if (typeof navigator === 'undefined')
|
|
6
|
+
return;
|
|
7
|
+
navigator.sendBeacon && navigator.sendBeacon(dsn, body);
|
|
8
|
+
};
|
|
9
|
+
exports.sendBeacon = sendBeacon;
|
|
10
|
+
var fetch = function (dsn, body) {
|
|
11
|
+
// @ts-ignore
|
|
12
|
+
(0, exports.fetch)(dsn, {
|
|
13
|
+
body: body,
|
|
14
|
+
method: 'POST',
|
|
15
|
+
keepalive: true
|
|
16
|
+
});
|
|
17
|
+
};
|
|
18
|
+
exports.fetch = fetch;
|
|
19
|
+
var xhr = function (dsn, body) {
|
|
20
|
+
var client = new XMLHttpRequest();
|
|
21
|
+
client.open('POST', dsn, false); // third parameter indicates sync xhr
|
|
22
|
+
client.setRequestHeader('Content-Type', 'text/plain;charset=UTF-8');
|
|
23
|
+
client.send(body);
|
|
24
|
+
};
|
|
25
|
+
exports.xhr = xhr;
|
|
26
|
+
//# sourceMappingURL=request.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request.js","sourceRoot":"","sources":["../../../src/core/request.ts"],"names":[],"mappings":";;;AACO,IAAM,UAAU,GAAG,UAAC,GAAW,EAAE,IAAY;IAClD,IAAI,OAAO,SAAS,KAAK,WAAW;QAAE,OAAM;IAC5C,SAAS,CAAC,UAAU,IAAI,SAAS,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;AACzD,CAAC,CAAA;AAHY,QAAA,UAAU,cAGtB;AAEM,IAAM,KAAK,GAAG,UAAC,GAAW,EAAE,IAAY;IAC7C,aAAa;IACb,IAAA,aAAK,EAAC,GAAG,EAAE;QACT,IAAI,MAAA;QACJ,MAAM,EAAE,MAAM;QACd,SAAS,EAAE,IAAI;KAChB,CAAC,CAAC;AACL,CAAC,CAAA;AAPY,QAAA,KAAK,SAOjB;AAGM,IAAM,GAAG,GAAG,UAAC,GAAW,EAAE,IAAY;IAC3C,IAAM,MAAM,GAAG,IAAI,cAAc,EAAE,CAAA;IACnC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,CAAC,CAAA,CAAC,qCAAqC;IACrE,MAAM,CAAC,gBAAgB,CAAC,cAAc,EAAE,0BAA0B,CAAC,CAAA;IACnE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACnB,CAAC,CAAA;AALY,QAAA,GAAG,OAKf"}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getDeviceClient = getDeviceClient;
|
|
4
|
+
exports.convertTraceDataToLTS = convertTraceDataToLTS;
|
|
5
|
+
exports.sendByLTS = sendByLTS;
|
|
6
|
+
exports.sendBeacon = sendBeacon;
|
|
7
|
+
exports.sendByImg = sendByImg;
|
|
8
|
+
exports.sendByXHR = sendByXHR;
|
|
9
|
+
exports.send = send;
|
|
10
|
+
var util_1 = require("./util");
|
|
11
|
+
var common_1 = require("../typings/common");
|
|
12
|
+
// @ts-ignore
|
|
13
|
+
var lts_web_sdk_1 = require("lts-web-sdk");
|
|
14
|
+
var ltsInstance = null;
|
|
15
|
+
function getDeviceClient() {
|
|
16
|
+
var _a, _b, _c;
|
|
17
|
+
if (typeof navigator === 'undefined') {
|
|
18
|
+
return {};
|
|
19
|
+
}
|
|
20
|
+
return {
|
|
21
|
+
name: navigator.userAgent,
|
|
22
|
+
version: navigator.appVersion,
|
|
23
|
+
language: navigator.language,
|
|
24
|
+
platform: navigator.platform,
|
|
25
|
+
screen: {
|
|
26
|
+
width: ((_a = window.screen) === null || _a === void 0 ? void 0 : _a.width) || 0,
|
|
27
|
+
height: ((_b = window.screen) === null || _b === void 0 ? void 0 : _b.height) || 0,
|
|
28
|
+
colorDepth: ((_c = window.screen) === null || _c === void 0 ? void 0 : _c.colorDepth) || 0
|
|
29
|
+
},
|
|
30
|
+
viewport: {
|
|
31
|
+
width: window.innerWidth || 0,
|
|
32
|
+
height: window.innerHeight || 0
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
function convertTraceDataToLTS(traceData) {
|
|
37
|
+
var data = traceData.data;
|
|
38
|
+
var hasStack = data && 'stack' in data && data.stack;
|
|
39
|
+
var exception = hasStack
|
|
40
|
+
? {
|
|
41
|
+
values: [
|
|
42
|
+
{
|
|
43
|
+
value: data.message || data.name || 'Unknown error',
|
|
44
|
+
stacktrace: {
|
|
45
|
+
frames: data.stack.split('\n').map(function (line) {
|
|
46
|
+
var _a, _b, _c, _d;
|
|
47
|
+
return ({
|
|
48
|
+
filename: ((_a = line.match(/\((.+):\d+:\d+\)/)) === null || _a === void 0 ? void 0 : _a.pop()) || 'unknown',
|
|
49
|
+
lineno: parseInt(((_b = line.match(/:(\d+):/)) === null || _b === void 0 ? void 0 : _b.pop()) || '0'),
|
|
50
|
+
colno: parseInt(((_c = line.match(/:\d+:(\d+)\)/)) === null || _c === void 0 ? void 0 : _c.pop()) || '0'),
|
|
51
|
+
function: ((_d = line.match(/at\s+(.+)\s+\(/)) === null || _d === void 0 ? void 0 : _d.pop()) || 'unknown'
|
|
52
|
+
});
|
|
53
|
+
})
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
]
|
|
57
|
+
}
|
|
58
|
+
: undefined;
|
|
59
|
+
var tags = {};
|
|
60
|
+
if (traceData.fpId)
|
|
61
|
+
tags.fpId = traceData.fpId;
|
|
62
|
+
if (traceData.pid)
|
|
63
|
+
tags.pid = traceData.pid;
|
|
64
|
+
if (traceData.appId)
|
|
65
|
+
tags.appId = traceData.appId;
|
|
66
|
+
if (traceData.uid)
|
|
67
|
+
tags.uid = String(traceData.uid);
|
|
68
|
+
if (data && 'tag' in data && data.tag) {
|
|
69
|
+
tags.tag = data.tag;
|
|
70
|
+
}
|
|
71
|
+
var hasUrl = data && 'url' in data && data.url;
|
|
72
|
+
var request = hasUrl
|
|
73
|
+
? {
|
|
74
|
+
url: data.url || '',
|
|
75
|
+
method: 'method' in data && data.method ? data.method : 'GET',
|
|
76
|
+
headers: {},
|
|
77
|
+
data: 'body' in data && data.body ? data.body : undefined
|
|
78
|
+
}
|
|
79
|
+
: undefined;
|
|
80
|
+
return {
|
|
81
|
+
client: getDeviceClient(),
|
|
82
|
+
environment: traceData.bt || 'unknown',
|
|
83
|
+
tags: tags,
|
|
84
|
+
level: traceData.level || 'info',
|
|
85
|
+
exception: exception,
|
|
86
|
+
transaction: traceData.traceId,
|
|
87
|
+
extra: {
|
|
88
|
+
type: traceData.type,
|
|
89
|
+
url: traceData.url,
|
|
90
|
+
ua: traceData.ua,
|
|
91
|
+
createdAt: traceData.createdAt,
|
|
92
|
+
updatedAt: traceData.updatedAt,
|
|
93
|
+
breadcrumbs: traceData.breadcrumbs,
|
|
94
|
+
perf: traceData.perf
|
|
95
|
+
},
|
|
96
|
+
request: request
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
function sendByLTS(ltsConfig, data) {
|
|
100
|
+
try {
|
|
101
|
+
if (!ltsInstance) {
|
|
102
|
+
ltsInstance = new lts_web_sdk_1.default({
|
|
103
|
+
region: ltsConfig.region,
|
|
104
|
+
projectId: ltsConfig.projectId,
|
|
105
|
+
groupId: ltsConfig.groupId,
|
|
106
|
+
streamId: ltsConfig.streamId,
|
|
107
|
+
debug: ltsConfig.debug || false
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
var ltsData = convertTraceDataToLTS(data);
|
|
111
|
+
ltsInstance.reportImmediately(ltsData);
|
|
112
|
+
}
|
|
113
|
+
catch (error) {
|
|
114
|
+
console.error('Failed to send data to LTS:', error);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
// 使用sendBeacon发送数据
|
|
118
|
+
function sendBeacon(url, data) {
|
|
119
|
+
if (typeof navigator === 'undefined')
|
|
120
|
+
return;
|
|
121
|
+
navigator.sendBeacon && navigator.sendBeacon(url, JSON.stringify(data));
|
|
122
|
+
}
|
|
123
|
+
// 使用img发送数据
|
|
124
|
+
function sendByImg(url, data) {
|
|
125
|
+
var spliceStr = url.indexOf('?') === -1 ? '?' : '&';
|
|
126
|
+
var imageUrl = "".concat(url).concat(spliceStr, "data=").concat(encodeURIComponent((0, util_1.safeStringify)(data)));
|
|
127
|
+
var img = new Image();
|
|
128
|
+
img.src = imageUrl;
|
|
129
|
+
img.onload = function () {
|
|
130
|
+
console.log('Tracking data sent successfully!');
|
|
131
|
+
img = null;
|
|
132
|
+
};
|
|
133
|
+
img.onerror = function (err) {
|
|
134
|
+
console.error('Failed to send tracking data.', err);
|
|
135
|
+
img = null;
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
// 使用XMLHttpRequest发送数据
|
|
139
|
+
function sendByXHR(url, data) {
|
|
140
|
+
var xhr = new XMLHttpRequest();
|
|
141
|
+
xhr.open('get', url);
|
|
142
|
+
xhr.setRequestHeader('Content-Type', 'application/json;charset=UTF-8');
|
|
143
|
+
xhr.withCredentials = true;
|
|
144
|
+
xhr.send((0, util_1.safeStringify)(data));
|
|
145
|
+
}
|
|
146
|
+
// 统一的发送接口
|
|
147
|
+
function send(method, url, ltsConfig, data) {
|
|
148
|
+
switch (method) {
|
|
149
|
+
case common_1.SendMethod.BEACON:
|
|
150
|
+
if (url) {
|
|
151
|
+
sendBeacon(url, data);
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
console.warn('dsn is required for beacon method');
|
|
155
|
+
}
|
|
156
|
+
break;
|
|
157
|
+
case common_1.SendMethod.LTS:
|
|
158
|
+
if (ltsConfig) {
|
|
159
|
+
sendByLTS(ltsConfig, data);
|
|
160
|
+
}
|
|
161
|
+
else {
|
|
162
|
+
console.warn('ltsConfig is required for lts method');
|
|
163
|
+
}
|
|
164
|
+
break;
|
|
165
|
+
case common_1.SendMethod.IMG:
|
|
166
|
+
default:
|
|
167
|
+
if (url) {
|
|
168
|
+
sendByImg(url, data);
|
|
169
|
+
}
|
|
170
|
+
else {
|
|
171
|
+
console.warn('dsn is required for img method');
|
|
172
|
+
}
|
|
173
|
+
break;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
//# sourceMappingURL=send.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"send.js","sourceRoot":"","sources":["../../../src/core/send.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isResourceTarget = exports.getFetchStatusLevel = exports.getTimestamp = void 0;
|
|
4
|
+
exports.hashCode = hashCode;
|
|
5
|
+
exports.dataTypes2BreadcrumbsType = dataTypes2BreadcrumbsType;
|
|
6
|
+
exports.dataCategory2BreadcrumbsCategory = dataCategory2BreadcrumbsCategory;
|
|
7
|
+
exports.getTraceDataLevel = getTraceDataLevel;
|
|
8
|
+
exports.getTraceDataType = getTraceDataType;
|
|
9
|
+
exports.getPerfLevel = getPerfLevel;
|
|
10
|
+
exports.uuid = uuid;
|
|
11
|
+
exports.safeStringify = safeStringify;
|
|
12
|
+
var common_1 = require("../typings/common");
|
|
13
|
+
// 获取时间
|
|
14
|
+
var getTimestamp = function () { return Date.now(); };
|
|
15
|
+
exports.getTimestamp = getTimestamp;
|
|
16
|
+
var getFetchStatusLevel = function (status) {
|
|
17
|
+
if (status >= 500) {
|
|
18
|
+
return common_1.TraceDataSeverity.Critical;
|
|
19
|
+
}
|
|
20
|
+
else if (status >= 400) {
|
|
21
|
+
return common_1.TraceDataSeverity.Error;
|
|
22
|
+
}
|
|
23
|
+
else if (status >= 300) {
|
|
24
|
+
return common_1.TraceDataSeverity.Warning;
|
|
25
|
+
}
|
|
26
|
+
else if (status >= 200) {
|
|
27
|
+
return common_1.TraceDataSeverity.Info;
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
return common_1.TraceDataSeverity.Else;
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
exports.getFetchStatusLevel = getFetchStatusLevel;
|
|
34
|
+
var isResourceTarget = function (target) {
|
|
35
|
+
return target instanceof HTMLScriptElement ||
|
|
36
|
+
target instanceof HTMLLinkElement ||
|
|
37
|
+
target instanceof HTMLImageElement ||
|
|
38
|
+
target instanceof HTMLVideoElement ||
|
|
39
|
+
target instanceof HTMLAudioElement;
|
|
40
|
+
};
|
|
41
|
+
exports.isResourceTarget = isResourceTarget;
|
|
42
|
+
/**
|
|
43
|
+
* 根据字符串生成hashcode
|
|
44
|
+
*
|
|
45
|
+
* @export
|
|
46
|
+
* @param {string} str
|
|
47
|
+
* @return {*} {number} 可为正数和负数
|
|
48
|
+
*/
|
|
49
|
+
function hashCode(str) {
|
|
50
|
+
var hash = 0;
|
|
51
|
+
if (str.length == 0)
|
|
52
|
+
return hash;
|
|
53
|
+
for (var i = 0; i < str.length; i++) {
|
|
54
|
+
var char = str.charCodeAt(i);
|
|
55
|
+
hash = (hash << 5) - hash + char;
|
|
56
|
+
hash = hash & hash;
|
|
57
|
+
}
|
|
58
|
+
return hash;
|
|
59
|
+
}
|
|
60
|
+
function dataTypes2BreadcrumbsType(data) {
|
|
61
|
+
switch (data) {
|
|
62
|
+
case common_1.TraceDataTypes.JAVASCRIPT:
|
|
63
|
+
case common_1.TraceDataTypes.UNKNOWN:
|
|
64
|
+
case common_1.TraceDataTypes.UNKNOWN_FUNCTION:
|
|
65
|
+
case common_1.TraceDataTypes.REACT:
|
|
66
|
+
case common_1.TraceDataTypes.VUE:
|
|
67
|
+
return common_1.BreadcrumbTypes.CODE_ERROR;
|
|
68
|
+
case common_1.TraceDataTypes.PROMISE:
|
|
69
|
+
return common_1.BreadcrumbTypes.UNHANDLEDREJECTION;
|
|
70
|
+
case common_1.TraceDataTypes.HTTP:
|
|
71
|
+
return common_1.BreadcrumbTypes.FETCH;
|
|
72
|
+
case common_1.TraceDataTypes.PERF:
|
|
73
|
+
case common_1.TraceDataTypes.LOG:
|
|
74
|
+
return common_1.BreadcrumbTypes.CONSOLE;
|
|
75
|
+
case common_1.TraceDataTypes.RESOURCE:
|
|
76
|
+
return common_1.BreadcrumbTypes.RESOURCE;
|
|
77
|
+
case common_1.TraceDataTypes.ROUTE:
|
|
78
|
+
return common_1.BreadcrumbTypes.ROUTE;
|
|
79
|
+
default:
|
|
80
|
+
return common_1.BreadcrumbTypes.CUSTOMER;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
function dataCategory2BreadcrumbsCategory(data) {
|
|
84
|
+
switch (data) {
|
|
85
|
+
case common_1.TraceDataTypes.JAVASCRIPT:
|
|
86
|
+
case common_1.TraceDataTypes.UNKNOWN:
|
|
87
|
+
case common_1.TraceDataTypes.UNKNOWN_FUNCTION:
|
|
88
|
+
return common_1.BreadcrumbsCategorys.Exception;
|
|
89
|
+
case common_1.TraceDataTypes.REACT:
|
|
90
|
+
case common_1.TraceDataTypes.VUE:
|
|
91
|
+
return common_1.BreadcrumbsCategorys.Lifecycle;
|
|
92
|
+
case common_1.TraceDataTypes.PROMISE:
|
|
93
|
+
return common_1.BreadcrumbsCategorys.Exception;
|
|
94
|
+
case common_1.TraceDataTypes.HTTP:
|
|
95
|
+
return common_1.BreadcrumbsCategorys.Http;
|
|
96
|
+
case common_1.TraceDataTypes.PERF:
|
|
97
|
+
case common_1.TraceDataTypes.LOG:
|
|
98
|
+
return common_1.BreadcrumbsCategorys.Debug;
|
|
99
|
+
case common_1.TraceDataTypes.RESOURCE:
|
|
100
|
+
return common_1.BreadcrumbsCategorys.Http;
|
|
101
|
+
case common_1.TraceDataTypes.ROUTE:
|
|
102
|
+
return common_1.BreadcrumbsCategorys.Lifecycle;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
function getTraceDataLevel(level) {
|
|
106
|
+
switch (level) {
|
|
107
|
+
case common_1.TraceDataSeverity.High:
|
|
108
|
+
case common_1.TraceDataSeverity.Critical:
|
|
109
|
+
case common_1.TraceDataSeverity.Error:
|
|
110
|
+
return common_1.TraceLevelType.Error;
|
|
111
|
+
case common_1.TraceDataSeverity.Warning:
|
|
112
|
+
return common_1.TraceLevelType.Warn;
|
|
113
|
+
case common_1.TraceDataSeverity.Debug:
|
|
114
|
+
case common_1.TraceDataSeverity.Low:
|
|
115
|
+
return common_1.TraceLevelType.Debug;
|
|
116
|
+
default:
|
|
117
|
+
return common_1.TraceLevelType.Info;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
function getTraceDataType(type) {
|
|
121
|
+
switch (type) {
|
|
122
|
+
case common_1.TraceDataTypes.PROMISE:
|
|
123
|
+
case common_1.TraceDataTypes.UNKNOWN:
|
|
124
|
+
case common_1.TraceDataTypes.UNKNOWN_FUNCTION:
|
|
125
|
+
case common_1.TraceDataTypes.JAVASCRIPT:
|
|
126
|
+
return common_1.TraceTypes.CODE_ERROR;
|
|
127
|
+
case common_1.TraceDataTypes.REACT:
|
|
128
|
+
case common_1.TraceDataTypes.VUE:
|
|
129
|
+
case common_1.TraceDataTypes.ROUTE:
|
|
130
|
+
return common_1.TraceTypes.EVENT;
|
|
131
|
+
case common_1.TraceDataTypes.PERF:
|
|
132
|
+
return common_1.TraceTypes.PERF;
|
|
133
|
+
case common_1.TraceDataTypes.HTTP:
|
|
134
|
+
return common_1.TraceTypes.FETCH;
|
|
135
|
+
case common_1.TraceDataTypes.RESOURCE:
|
|
136
|
+
return common_1.TraceTypes.RESOURCE;
|
|
137
|
+
default:
|
|
138
|
+
return common_1.TraceTypes.CUSTOMER;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
function getPerfLevel(data) {
|
|
142
|
+
var level = common_1.TraceLevelType.Info;
|
|
143
|
+
if (data.LCPRating === 'poor'
|
|
144
|
+
|| data.FIDRating === 'poor'
|
|
145
|
+
|| data.FCPRating === 'poor'
|
|
146
|
+
|| data.TTFBRating === 'poor'
|
|
147
|
+
|| data.CLSRating === 'poor'
|
|
148
|
+
|| data.INPRating === 'poor') {
|
|
149
|
+
// console.log('[getPerfLevel] error')
|
|
150
|
+
level = common_1.TraceLevelType.Error;
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
if (data.LCPRating === 'needs improvement'
|
|
154
|
+
|| data.CLSRating === 'needs improvement'
|
|
155
|
+
|| data.FCPRating === 'needs improvement'
|
|
156
|
+
|| data.FIDRating === 'needs improvement'
|
|
157
|
+
|| data.INPRating === 'needs improvement'
|
|
158
|
+
|| data.TTFBRating === 'needs improvement') {
|
|
159
|
+
// console.log('[getPerfLevel] warn')
|
|
160
|
+
level = common_1.TraceLevelType.Warn;
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
return level;
|
|
164
|
+
}
|
|
165
|
+
function uuid() {
|
|
166
|
+
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
|
|
167
|
+
/* tslint:disable */
|
|
168
|
+
var r = (Math.random() * 16) | 0;
|
|
169
|
+
/* tslint:disable */
|
|
170
|
+
var v = c === 'x' ? r : (r & 0x3) | 0x8;
|
|
171
|
+
return v.toString(16);
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
function safeStringify(obj) {
|
|
175
|
+
var set = new Set();
|
|
176
|
+
var str = JSON.stringify(obj, function (_key, value) {
|
|
177
|
+
if (set.has(value)) {
|
|
178
|
+
return '';
|
|
179
|
+
}
|
|
180
|
+
typeof value === 'object' && set.add(value);
|
|
181
|
+
return value;
|
|
182
|
+
});
|
|
183
|
+
set.clear();
|
|
184
|
+
return str;
|
|
185
|
+
}
|
|
186
|
+
//# sourceMappingURL=util.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../../src/core/util.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.onVitals = void 0;
|
|
4
|
+
exports.generateUniqueId = generateUniqueId;
|
|
5
|
+
exports.mapMetric = mapMetric;
|
|
6
|
+
var web_vitals_1 = require("web-vitals");
|
|
7
|
+
var web_vitals_reporter_1 = require("web-vitals-reporter");
|
|
8
|
+
var SCORE_RANGE_LCP = [2500, 4500];
|
|
9
|
+
var SCORE_RANGE_FID = [100, 300];
|
|
10
|
+
var SCORE_RANGE_CLS = [0.1, 0.25];
|
|
11
|
+
var SCORE_RANGE_FCP = [1.8, 3];
|
|
12
|
+
var SCORE_RANGE_INP = [200, 500];
|
|
13
|
+
var SCORE_RANGE_TTFB = [800, 1800];
|
|
14
|
+
var score = function (value, range) {
|
|
15
|
+
return value < range[0] ? 'good' : value < range[1] ? 'needs improvement' : 'poor';
|
|
16
|
+
};
|
|
17
|
+
function generateUniqueId() {
|
|
18
|
+
return "v1-".concat(Date.now(), "-").concat(Math.floor(Math.random() * (9e12 - 1)) + 1e12);
|
|
19
|
+
}
|
|
20
|
+
function round(val, precision) {
|
|
21
|
+
if (precision === void 0) { precision = 0; }
|
|
22
|
+
// @ts-ignore
|
|
23
|
+
return +(Math.round("".concat(val, "e+").concat(precision)) + "e-".concat(precision));
|
|
24
|
+
}
|
|
25
|
+
function mapMetric(metric) {
|
|
26
|
+
var _a;
|
|
27
|
+
var isWebVital = ['FCP', 'TTFB', 'LCP', 'CLS', 'FID'].indexOf(metric.name) !== -1;
|
|
28
|
+
return _a = {},
|
|
29
|
+
_a[metric.name] = isWebVital ? round(metric.value, metric.name === 'CLS' ? 4 : 0) : metric.value,
|
|
30
|
+
_a["".concat(metric.name, "Rating")] = metric.rating,
|
|
31
|
+
_a;
|
|
32
|
+
}
|
|
33
|
+
;
|
|
34
|
+
var sendToAnalytics = (0, web_vitals_reporter_1.createApiReporter)('/analytics', {
|
|
35
|
+
initial: (0, web_vitals_reporter_1.getDeviceInfo)(),
|
|
36
|
+
beforeSend: function (result) {
|
|
37
|
+
console.log('beforeSend');
|
|
38
|
+
var LCP = result.LCP, FID = result.FID, CLS = result.CLS;
|
|
39
|
+
console.info('web-vitals: ', result);
|
|
40
|
+
if (!LCP || !FID || !CLS)
|
|
41
|
+
return; // Core Web Vitals are not supported
|
|
42
|
+
// return extra attributes to merge into the final result
|
|
43
|
+
return {
|
|
44
|
+
LCPScore: score(LCP, SCORE_RANGE_LCP),
|
|
45
|
+
// FIDScore: FID < 100 ? 'good' : FID < 300 ? 'needs improvement' : 'poor',
|
|
46
|
+
FIDScore: score(FID, SCORE_RANGE_FID),
|
|
47
|
+
// CLSScore: CLS < 0.1 ? 'good' : CLS < 0.25 ? 'needs improvement' : 'poor'
|
|
48
|
+
CLSScore: score(CLS, SCORE_RANGE_CLS),
|
|
49
|
+
};
|
|
50
|
+
},
|
|
51
|
+
});
|
|
52
|
+
var onVitals = function (saveMetric) {
|
|
53
|
+
console.log('webvitals setup');
|
|
54
|
+
(0, web_vitals_1.onLCP)(saveMetric);
|
|
55
|
+
(0, web_vitals_1.onFID)(saveMetric);
|
|
56
|
+
(0, web_vitals_1.onCLS)(saveMetric);
|
|
57
|
+
// onTTFB(saveMetric)
|
|
58
|
+
// onINP(saveMetric)
|
|
59
|
+
// onFCP(saveMetric)
|
|
60
|
+
};
|
|
61
|
+
exports.onVitals = onVitals;
|
|
62
|
+
exports.default = {};
|
|
63
|
+
//# sourceMappingURL=webvitals.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webvitals.js","sourceRoot":"","sources":["../../../src/core/webvitals.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SendMethod = exports.init = void 0;
|
|
4
|
+
var trace_1 = require("./trace");
|
|
5
|
+
var common_1 = require("./typings/common");
|
|
6
|
+
Object.defineProperty(exports, "SendMethod", { enumerable: true, get: function () { return common_1.SendMethod; } });
|
|
7
|
+
var instance;
|
|
8
|
+
var init = function (options) {
|
|
9
|
+
if (instance) {
|
|
10
|
+
return instance;
|
|
11
|
+
}
|
|
12
|
+
instance = trace_1.default.init(options);
|
|
13
|
+
console.log('instance: ', instance);
|
|
14
|
+
return instance;
|
|
15
|
+
};
|
|
16
|
+
exports.init = init;
|
|
17
|
+
// @ts-ignore
|
|
18
|
+
window.traceSdkInit = exports.init;
|
|
19
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AACA,iCAA+B;AAC/B,2CAA8C;AAcrC,2FAdA,mBAAU,OAcA;AAZnB,IAAI,QAAa,CAAC;AAEX,IAAM,IAAI,GAAG,UAAC,OAAqB;IAExC,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,QAAQ,CAAA;IACjB,CAAC;IACD,QAAQ,GAAG,eAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAClC,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAA;IACnC,OAAO,QAAQ,CAAA;AACjB,CAAC,CAAC;AARW,QAAA,IAAI,QAQf;AAIF,aAAa;AACb,MAAM,CAAC,YAAY,GAAG,YAAI,CAAA"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __extends = (this && this.__extends) || (function () {
|
|
3
|
+
var extendStatics = function (d, b) {
|
|
4
|
+
extendStatics = Object.setPrototypeOf ||
|
|
5
|
+
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
6
|
+
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
7
|
+
return extendStatics(d, b);
|
|
8
|
+
};
|
|
9
|
+
return function (d, b) {
|
|
10
|
+
if (typeof b !== "function" && b !== null)
|
|
11
|
+
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
12
|
+
extendStatics(d, b);
|
|
13
|
+
function __() { this.constructor = d; }
|
|
14
|
+
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
15
|
+
};
|
|
16
|
+
})();
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
var baseTrace_1 = require("./baseTrace");
|
|
19
|
+
var TraceSdk = /** @class */ (function (_super) {
|
|
20
|
+
__extends(TraceSdk, _super);
|
|
21
|
+
function TraceSdk() {
|
|
22
|
+
return _super !== null && _super.apply(this, arguments) || this;
|
|
23
|
+
}
|
|
24
|
+
return TraceSdk;
|
|
25
|
+
}(baseTrace_1.BaseTrace));
|
|
26
|
+
exports.default = TraceSdk;
|
|
27
|
+
//# sourceMappingURL=trace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trace.js","sourceRoot":"","sources":["../../src/trace.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,yCAAwC;AAExC;IAAsC,4BAAS;IAA/C;;IAEA,CAAC;IAAD,eAAC;AAAD,CAAC,AAFD,CAAsC,qBAAS,GAE9C"}
|