@pluve/logger-sdk 0.0.7 → 0.0.8

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.
Files changed (103) hide show
  1. package/README.md +60 -20
  2. package/dist/cjs/capture/jsError.js +48 -0
  3. package/dist/cjs/capture/promiseError.js +49 -0
  4. package/dist/cjs/capture/resourceError.js +48 -0
  5. package/dist/cjs/capture/wechatError.js +95 -0
  6. package/dist/cjs/compress/compression.js +84 -0
  7. package/dist/cjs/config/index.js +55 -0
  8. package/dist/cjs/core/fingerprint.js +36 -0
  9. package/dist/cjs/core/httpClient.js +96 -0
  10. package/dist/cjs/core/loggerSDK.js +641 -0
  11. package/dist/cjs/core/queueManager.js +249 -0
  12. package/dist/cjs/core/retryManager.js +127 -0
  13. package/dist/cjs/index.js +29 -0
  14. package/dist/cjs/logger-sdk.mermaid +84 -0
  15. package/dist/cjs/logger-sdk.svg +1 -0
  16. package/dist/cjs/stack/stacktrace.js +48 -0
  17. package/dist/cjs/transport/beaconTransport.js +64 -0
  18. package/dist/cjs/transport/pixelImageTransport.js +100 -0
  19. package/dist/cjs/transport/transport.js +17 -0
  20. package/dist/cjs/transport/transportAdapter.js +56 -0
  21. package/dist/cjs/transport/wechatTransport.js +103 -0
  22. package/dist/cjs/types/api.js +17 -0
  23. package/dist/cjs/types/env.js +17 -0
  24. package/dist/cjs/types/external.d.ts +21 -0
  25. package/dist/cjs/types/logEvent.js +17 -0
  26. package/dist/cjs/types/logEventLevel.js +17 -0
  27. package/dist/cjs/types/sdkOptions.js +17 -0
  28. package/dist/cjs/types/trackOptions.js +17 -0
  29. package/dist/cjs/utils/environment.js +183 -0
  30. package/dist/cjs/utils/session.js +31 -0
  31. package/dist/cjs/utils/tools.js +82 -0
  32. package/dist/cjs/utils/uuid.js +35 -0
  33. package/dist/esm/capture/jsError.js +45 -0
  34. package/dist/esm/capture/promiseError.js +46 -0
  35. package/dist/esm/capture/resourceError.js +24 -0
  36. package/dist/esm/capture/wechatError.js +92 -0
  37. package/dist/esm/compress/compression.js +82 -0
  38. package/dist/esm/config/index.js +28 -0
  39. package/dist/esm/core/fingerprint.js +12 -0
  40. package/dist/esm/core/httpClient.js +95 -0
  41. package/dist/esm/core/loggerSDK.js +650 -0
  42. package/dist/esm/core/queueManager.js +269 -0
  43. package/dist/esm/core/retryManager.js +129 -0
  44. package/dist/esm/index.js +5 -0
  45. package/dist/esm/logger-sdk.mermaid +84 -0
  46. package/dist/esm/logger-sdk.svg +1 -0
  47. package/dist/esm/stack/stacktrace.js +37 -0
  48. package/dist/esm/transport/beaconTransport.js +81 -0
  49. package/dist/esm/transport/pixelImageTransport.js +99 -0
  50. package/dist/esm/transport/transport.js +0 -0
  51. package/dist/esm/transport/transportAdapter.js +32 -0
  52. package/dist/esm/transport/wechatTransport.js +120 -0
  53. package/dist/esm/types/api.js +0 -0
  54. package/dist/esm/types/env.js +0 -0
  55. package/dist/esm/types/external.d.ts +21 -0
  56. package/dist/esm/types/logEvent.js +0 -0
  57. package/dist/esm/types/logEventLevel.js +0 -0
  58. package/dist/esm/types/sdkOptions.js +0 -0
  59. package/dist/esm/types/trackOptions.js +0 -0
  60. package/dist/esm/utils/environment.js +154 -0
  61. package/dist/esm/utils/session.js +7 -0
  62. package/dist/esm/utils/tools.js +76 -0
  63. package/dist/esm/utils/uuid.js +11 -0
  64. package/dist/types/capture/jsError.d.ts +2 -0
  65. package/dist/types/capture/promiseError.d.ts +2 -0
  66. package/dist/types/capture/resourceError.d.ts +2 -0
  67. package/dist/types/capture/wechatError.d.ts +3 -0
  68. package/dist/types/compress/compression.d.ts +10 -0
  69. package/dist/types/config/index.d.ts +9 -0
  70. package/dist/types/core/fingerprint.d.ts +8 -0
  71. package/dist/types/core/httpClient.d.ts +11 -0
  72. package/dist/{loggerSDK.d.ts → types/core/loggerSDK.d.ts} +27 -2
  73. package/dist/{queueManager.d.ts → types/core/queueManager.d.ts} +9 -1
  74. package/dist/{retryManager.d.ts → types/core/retryManager.d.ts} +0 -4
  75. package/dist/types/index.d.ts +1 -0
  76. package/dist/types/stack/stacktrace.d.ts +2 -0
  77. package/dist/types/transport/beaconTransport.d.ts +11 -0
  78. package/dist/types/transport/pixelImageTransport.d.ts +11 -0
  79. package/dist/types/transport/transport.d.ts +14 -0
  80. package/dist/types/transport/transportAdapter.d.ts +10 -0
  81. package/dist/types/transport/wechatTransport.d.ts +11 -0
  82. package/dist/types/types/api.d.ts +12 -0
  83. package/dist/types/types/env.d.ts +14 -0
  84. package/dist/types/types/logEvent.d.ts +57 -0
  85. package/dist/types/types/logEventLevel.d.ts +2 -0
  86. package/dist/{types.d.ts → types/types/sdkOptions.d.ts} +23 -42
  87. package/dist/types/types/trackOptions.d.ts +7 -0
  88. package/dist/types/utils/environment.d.ts +21 -0
  89. package/dist/types/utils/session.d.ts +1 -0
  90. package/dist/types/utils/tools.d.ts +12 -0
  91. package/dist/types/utils/uuid.d.ts +7 -0
  92. package/dist/umd/logger-sdk.min.js +1 -0
  93. package/package.json +29 -5
  94. package/dist/index.d.ts +0 -10
  95. package/dist/index.js +0 -13
  96. package/dist/loggerSDK.js +0 -560
  97. package/dist/queueManager.js +0 -186
  98. package/dist/retryManager.js +0 -224
  99. package/dist/transportAdapter.d.ts +0 -51
  100. package/dist/transportAdapter.js +0 -315
  101. package/dist/types.js +0 -1
  102. package/dist/utils.d.ts +0 -52
  103. package/dist/utils.js +0 -348
@@ -0,0 +1,24 @@
1
+ // src/capture/resourceError.ts
2
+ import { logDebug } from "../utils/tools";
3
+ function registerResourceErrorCapture(debug, callback) {
4
+ if (typeof window === "undefined")
5
+ return void 0;
6
+ const handler = (e) => {
7
+ var _a;
8
+ logDebug(debug, "registerResourceErrorCapture error", e);
9
+ const target = e.target;
10
+ if ((target == null ? void 0 : target.src) || (target == null ? void 0 : target.href)) {
11
+ callback({
12
+ type: "resource",
13
+ message: `Resource load failed: ${(target == null ? void 0 : target.src) || (target == null ? void 0 : target.href)}`,
14
+ stack: [],
15
+ throwable: ((_a = e == null ? void 0 : e.error) == null ? void 0 : _a.stack) || ""
16
+ });
17
+ }
18
+ };
19
+ window.addEventListener("error", handler, true);
20
+ return () => window.removeEventListener("error", handler, true);
21
+ }
22
+ export {
23
+ registerResourceErrorCapture
24
+ };
@@ -0,0 +1,92 @@
1
+ var __async = (__this, __arguments, generator) => {
2
+ return new Promise((resolve, reject) => {
3
+ var fulfilled = (value) => {
4
+ try {
5
+ step(generator.next(value));
6
+ } catch (e) {
7
+ reject(e);
8
+ }
9
+ };
10
+ var rejected = (value) => {
11
+ try {
12
+ step(generator.throw(value));
13
+ } catch (e) {
14
+ reject(e);
15
+ }
16
+ };
17
+ var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
18
+ step((generator = generator.apply(__this, __arguments)).next());
19
+ });
20
+ };
21
+
22
+ // src/capture/wechatError.ts
23
+ import { parseStack } from "../stack/stacktrace";
24
+ import { isWeChatMiniProgram } from "../utils/environment";
25
+ import { logDebug } from "../utils/tools";
26
+ function registerWechatErrorCapture(debug, callback) {
27
+ if (!isWeChatMiniProgram())
28
+ return void 0;
29
+ try {
30
+ const wxAny = globalThis.wx;
31
+ if (wxAny && typeof wxAny.onError === "function") {
32
+ const handler = (error) => __async(this, null, function* () {
33
+ var _a;
34
+ logDebug(debug, "registerWechatErrorCapture onError", error);
35
+ const msg = String((_a = error == null ? void 0 : error.message) != null ? _a : error);
36
+ const err = error instanceof Error ? error : new Error(msg);
37
+ const stack = yield parseStack(err);
38
+ callback({
39
+ type: "js",
40
+ message: err.message,
41
+ stack,
42
+ throwable: err.stack || ""
43
+ });
44
+ });
45
+ wxAny.onError(handler);
46
+ return () => {
47
+ try {
48
+ wxAny.offError && wxAny.offError(handler);
49
+ } catch (e) {
50
+ }
51
+ };
52
+ }
53
+ } catch (e) {
54
+ logDebug(debug, "registerWechatErrorCapture attach failed", e);
55
+ }
56
+ return void 0;
57
+ }
58
+ function registerWechatUnhandledCapture(debug, callback) {
59
+ if (!isWeChatMiniProgram())
60
+ return void 0;
61
+ try {
62
+ const wxAny = globalThis.wx;
63
+ if (wxAny && typeof wxAny.onUnhandledRejection === "function") {
64
+ const handler = (res) => __async(this, null, function* () {
65
+ const reason = res == null ? void 0 : res.reason;
66
+ logDebug(debug, "registerWechatUnhandledCapture onUnhandledRejection", reason);
67
+ const err = reason instanceof Error ? reason : new Error(String(reason));
68
+ const stack = yield parseStack(err);
69
+ callback({
70
+ type: "promise",
71
+ message: err.message,
72
+ stack,
73
+ throwable: err.stack || ""
74
+ });
75
+ });
76
+ wxAny.onUnhandledRejection(handler);
77
+ return () => {
78
+ try {
79
+ wxAny.offUnhandledRejection && wxAny.offUnhandledRejection(handler);
80
+ } catch (e) {
81
+ }
82
+ };
83
+ }
84
+ } catch (e) {
85
+ logDebug(debug, "registerWechatUnhandledCapture attach failed", e);
86
+ }
87
+ return void 0;
88
+ }
89
+ export {
90
+ registerWechatErrorCapture,
91
+ registerWechatUnhandledCapture
92
+ };
@@ -0,0 +1,82 @@
1
+ var __async = (__this, __arguments, generator) => {
2
+ return new Promise((resolve, reject) => {
3
+ var fulfilled = (value) => {
4
+ try {
5
+ step(generator.next(value));
6
+ } catch (e) {
7
+ reject(e);
8
+ }
9
+ };
10
+ var rejected = (value) => {
11
+ try {
12
+ step(generator.throw(value));
13
+ } catch (e) {
14
+ reject(e);
15
+ }
16
+ };
17
+ var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
18
+ step((generator = generator.apply(__this, __arguments)).next());
19
+ });
20
+ };
21
+
22
+ // src/compress/compression.ts
23
+ import { gzipSync } from "fflate";
24
+ import { Base64 } from "js-base64";
25
+ import { isBrowser } from "../utils/environment";
26
+ function toUtf8Bytes(s) {
27
+ if (typeof TextEncoder !== "undefined") {
28
+ return new TextEncoder().encode(s);
29
+ }
30
+ const enc = encodeURIComponent(s);
31
+ const out = [];
32
+ for (let i = 0; i < enc.length; i += 1) {
33
+ const c = enc[i];
34
+ if (c === "%") {
35
+ out.push(parseInt(enc.slice(i + 1, i + 3), 16));
36
+ i += 2;
37
+ } else {
38
+ out.push(c.charCodeAt(0));
39
+ }
40
+ }
41
+ return new Uint8Array(out);
42
+ }
43
+ function gzipCompress(data) {
44
+ return __async(this, null, function* () {
45
+ if (isBrowser() && typeof CompressionStream !== "undefined") {
46
+ try {
47
+ const encoder = new TextEncoder();
48
+ const input = encoder.encode(data);
49
+ const gzip = new CompressionStream("gzip");
50
+ const readable = new Blob([input]).stream();
51
+ const compressedStream = readable.pipeThrough(gzip);
52
+ const compressedBuffer = yield new Response(compressedStream).arrayBuffer();
53
+ const bytes = new Uint8Array(compressedBuffer);
54
+ let binary = "";
55
+ for (let i = 0; i < bytes.byteLength; i += 1) {
56
+ binary += String.fromCharCode(bytes[i]);
57
+ }
58
+ if (typeof btoa !== "undefined") {
59
+ return btoa(binary);
60
+ }
61
+ return Buffer.from(binary, "base64").toString("base64");
62
+ } catch (e) {
63
+ console.log("gzipCompress 压缩失败,尝试使用 fflate 库", e);
64
+ }
65
+ }
66
+ try {
67
+ const input = toUtf8Bytes(data);
68
+ const compressed = gzipSync(input);
69
+ return Base64.fromUint8Array(compressed, false);
70
+ } catch (e) {
71
+ console.log("gzipCompress 压缩失败", e);
72
+ }
73
+ return Base64.encode(data, false);
74
+ });
75
+ }
76
+ function isGzipSupported() {
77
+ return isBrowser() && typeof CompressionStream !== "undefined";
78
+ }
79
+ export {
80
+ gzipCompress,
81
+ isGzipSupported
82
+ };
@@ -0,0 +1,28 @@
1
+ // src/config/index.ts
2
+ var getSDKBaseApi = (env) => {
3
+ switch (env) {
4
+ case "product":
5
+ return "https://apm.pharmacyyf.com";
6
+ case "testing":
7
+ return "https://apm-te.pharmacyyf.com";
8
+ case "develop":
9
+ return "https://chief-dev.yifengx.com";
10
+ default:
11
+ return "https://apm.pharmacyyf.com";
12
+ }
13
+ };
14
+ var getRegisterApi = (env) => {
15
+ return `${getSDKBaseApi(env)}/yfcloud-apm/log/front/init`;
16
+ };
17
+ var getReportApi = (env) => {
18
+ return `${getSDKBaseApi(env)}/yfcloud-apm/log/front/batchSave`;
19
+ };
20
+ var getPixelBatchApi = (env) => {
21
+ return `${getSDKBaseApi(env)}/yfcloud-apm/log/front/pixelBatchSave`;
22
+ };
23
+ export {
24
+ getPixelBatchApi,
25
+ getRegisterApi,
26
+ getReportApi,
27
+ getSDKBaseApi
28
+ };
@@ -0,0 +1,12 @@
1
+ // src/core/fingerprint.ts
2
+ import { normalizeMessage } from "../utils/tools";
3
+ function generateFingerprint(error) {
4
+ var _a;
5
+ const msg = normalizeMessage(error.message);
6
+ const frame = (_a = error.stack) == null ? void 0 : _a[0];
7
+ const frameKey = frame ? `${frame.file}:${frame.line}` : "no_frame";
8
+ return `${error.type}|${msg}|${frameKey}`;
9
+ }
10
+ export {
11
+ generateFingerprint
12
+ };
@@ -0,0 +1,95 @@
1
+ var __async = (__this, __arguments, generator) => {
2
+ return new Promise((resolve, reject) => {
3
+ var fulfilled = (value) => {
4
+ try {
5
+ step(generator.next(value));
6
+ } catch (e) {
7
+ reject(e);
8
+ }
9
+ };
10
+ var rejected = (value) => {
11
+ try {
12
+ step(generator.throw(value));
13
+ } catch (e) {
14
+ reject(e);
15
+ }
16
+ };
17
+ var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
18
+ step((generator = generator.apply(__this, __arguments)).next());
19
+ });
20
+ };
21
+
22
+ // src/core/httpClient.ts
23
+ import { isWeChatMiniProgram } from "../utils/environment";
24
+ import { logDebug } from "../utils/tools";
25
+ var HttpClient = class {
26
+ /**
27
+ * 发送 POST 请求,需要兼容浏览器和微信小程序
28
+ */
29
+ static post(url, data, token) {
30
+ return __async(this, null, function* () {
31
+ logDebug(true, "post", url, data, token);
32
+ if (isWeChatMiniProgram()) {
33
+ return new Promise((resolve, reject) => {
34
+ wx.request({
35
+ url,
36
+ method: "POST",
37
+ data: JSON.stringify(data),
38
+ header: {
39
+ "Content-Type": "application/json",
40
+ Authorization: `Bearer ${token}`
41
+ },
42
+ success: (res) => resolve({
43
+ type: "wechat",
44
+ response: res
45
+ }),
46
+ fail: (err) => (
47
+ // eslint-disable-next-line prefer-promise-reject-errors
48
+ reject({
49
+ type: "wechat",
50
+ error: err
51
+ })
52
+ )
53
+ });
54
+ });
55
+ }
56
+ if (typeof fetch === "undefined") {
57
+ return new Promise((resolve, reject) => {
58
+ const xhr = new XMLHttpRequest();
59
+ xhr.open("POST", url, true);
60
+ xhr.setRequestHeader("Content-Type", "application/json");
61
+ xhr.setRequestHeader("Authorization", `Bearer ${token}`);
62
+ xhr.onreadystatechange = () => {
63
+ if (xhr.readyState === 4) {
64
+ if (xhr.status === 200) {
65
+ resolve({
66
+ type: "xhr",
67
+ response: xhr.responseText
68
+ });
69
+ } else {
70
+ reject({
71
+ type: "xhr",
72
+ error: new Error(xhr.statusText)
73
+ });
74
+ }
75
+ }
76
+ };
77
+ xhr.send(JSON.stringify(data));
78
+ });
79
+ }
80
+ return new Promise((resolve, reject) => {
81
+ fetch(url, {
82
+ method: "POST",
83
+ body: JSON.stringify(data),
84
+ headers: {
85
+ "Content-Type": "application/json",
86
+ Authorization: `Bearer ${token}`
87
+ }
88
+ }).then((res) => resolve({ type: "fetch", response: res })).catch((err) => reject({ type: "fetch", error: err }));
89
+ });
90
+ });
91
+ }
92
+ };
93
+ export {
94
+ HttpClient
95
+ };