@pluve/logger-sdk 0.0.7 → 0.0.9
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.html +681 -0
- package/README.md +131 -153
- package/dist/cjs/capture/jsError.js +48 -0
- package/dist/cjs/capture/promiseError.js +49 -0
- package/dist/cjs/capture/resourceError.js +48 -0
- package/dist/cjs/capture/wechatError.js +95 -0
- package/dist/cjs/compress/compression.js +84 -0
- package/dist/cjs/config/index.js +55 -0
- package/dist/cjs/core/fingerprint.js +36 -0
- package/dist/cjs/core/httpClient.js +96 -0
- package/dist/cjs/core/loggerSDK.js +641 -0
- package/dist/cjs/core/queueManager.js +249 -0
- package/dist/cjs/core/retryManager.js +127 -0
- package/dist/cjs/index.js +29 -0
- package/dist/cjs/stack/stacktrace.js +48 -0
- package/dist/cjs/transport/beaconTransport.js +64 -0
- package/dist/cjs/transport/pixelImageTransport.js +100 -0
- package/dist/cjs/transport/transport.js +17 -0
- package/dist/cjs/transport/transportAdapter.js +56 -0
- package/dist/cjs/transport/wechatTransport.js +103 -0
- package/dist/cjs/types/api.js +17 -0
- package/dist/cjs/types/env.js +17 -0
- package/dist/cjs/types/external.d.ts +21 -0
- package/dist/cjs/types/logEvent.js +17 -0
- package/dist/cjs/types/logEventLevel.js +17 -0
- package/dist/cjs/types/sdkOptions.js +17 -0
- package/dist/cjs/types/trackOptions.js +17 -0
- package/dist/cjs/utils/environment.js +183 -0
- package/dist/cjs/utils/session.js +31 -0
- package/dist/cjs/utils/tools.js +82 -0
- package/dist/cjs/utils/uuid.js +35 -0
- package/dist/esm/capture/jsError.js +45 -0
- package/dist/esm/capture/promiseError.js +46 -0
- package/dist/esm/capture/resourceError.js +24 -0
- package/dist/esm/capture/wechatError.js +92 -0
- package/dist/esm/compress/compression.js +82 -0
- package/dist/esm/config/index.js +28 -0
- package/dist/esm/core/fingerprint.js +12 -0
- package/dist/esm/core/httpClient.js +95 -0
- package/dist/esm/core/loggerSDK.js +650 -0
- package/dist/esm/core/queueManager.js +269 -0
- package/dist/esm/core/retryManager.js +129 -0
- package/dist/esm/index.js +5 -0
- package/dist/esm/stack/stacktrace.js +37 -0
- package/dist/esm/transport/beaconTransport.js +81 -0
- package/dist/esm/transport/pixelImageTransport.js +99 -0
- package/dist/esm/transport/transport.js +0 -0
- package/dist/esm/transport/transportAdapter.js +32 -0
- package/dist/esm/transport/wechatTransport.js +120 -0
- package/dist/esm/types/api.js +0 -0
- package/dist/esm/types/env.js +0 -0
- package/dist/esm/types/external.d.ts +21 -0
- package/dist/esm/types/logEvent.js +0 -0
- package/dist/esm/types/logEventLevel.js +0 -0
- package/dist/esm/types/sdkOptions.js +0 -0
- package/dist/esm/types/trackOptions.js +0 -0
- package/dist/esm/utils/environment.js +154 -0
- package/dist/esm/utils/session.js +7 -0
- package/dist/esm/utils/tools.js +76 -0
- package/dist/esm/utils/uuid.js +11 -0
- package/dist/types/capture/jsError.d.ts +2 -0
- package/dist/types/capture/promiseError.d.ts +2 -0
- package/dist/types/capture/resourceError.d.ts +2 -0
- package/dist/types/capture/wechatError.d.ts +3 -0
- package/dist/types/compress/compression.d.ts +10 -0
- package/dist/types/config/index.d.ts +9 -0
- package/dist/types/core/fingerprint.d.ts +8 -0
- package/dist/types/core/httpClient.d.ts +11 -0
- package/dist/{loggerSDK.d.ts → types/core/loggerSDK.d.ts} +27 -2
- package/dist/{queueManager.d.ts → types/core/queueManager.d.ts} +9 -1
- package/dist/{retryManager.d.ts → types/core/retryManager.d.ts} +0 -4
- package/dist/types/index.d.ts +1 -0
- package/dist/types/stack/stacktrace.d.ts +2 -0
- package/dist/types/transport/beaconTransport.d.ts +11 -0
- package/dist/types/transport/pixelImageTransport.d.ts +11 -0
- package/dist/types/transport/transport.d.ts +14 -0
- package/dist/types/transport/transportAdapter.d.ts +10 -0
- package/dist/types/transport/wechatTransport.d.ts +11 -0
- package/dist/types/types/api.d.ts +12 -0
- package/dist/types/types/env.d.ts +14 -0
- package/dist/types/types/logEvent.d.ts +57 -0
- package/dist/types/types/logEventLevel.d.ts +2 -0
- package/dist/{types.d.ts → types/types/sdkOptions.d.ts} +23 -42
- package/dist/types/types/trackOptions.d.ts +7 -0
- package/dist/types/utils/environment.d.ts +21 -0
- package/dist/types/utils/session.d.ts +1 -0
- package/dist/types/utils/tools.d.ts +12 -0
- package/dist/types/utils/uuid.d.ts +7 -0
- package/dist/umd/logger-sdk.min.js +1 -0
- package/package.json +29 -5
- package/dist/index.d.ts +0 -10
- package/dist/index.js +0 -13
- package/dist/loggerSDK.js +0 -560
- package/dist/queueManager.js +0 -186
- package/dist/retryManager.js +0 -224
- package/dist/transportAdapter.d.ts +0 -51
- package/dist/transportAdapter.js +0 -315
- package/dist/types.js +0 -1
- package/dist/utils.d.ts +0 -52
- package/dist/utils.js +0 -348
|
@@ -0,0 +1,46 @@
|
|
|
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/promiseError.ts
|
|
23
|
+
import { parseStack } from "../stack/stacktrace";
|
|
24
|
+
import { logDebug } from "../utils/tools";
|
|
25
|
+
function registerPromiseErrorCapture(debug, callback) {
|
|
26
|
+
if (typeof window === "undefined")
|
|
27
|
+
return void 0;
|
|
28
|
+
const handler = (e) => __async(this, null, function* () {
|
|
29
|
+
logDebug(debug, "registerPromiseErrorCapture unhandledrejection", e);
|
|
30
|
+
const { reason } = e;
|
|
31
|
+
if (reason instanceof Error) {
|
|
32
|
+
const stack = yield parseStack(reason);
|
|
33
|
+
callback({
|
|
34
|
+
type: "promise",
|
|
35
|
+
message: reason.message,
|
|
36
|
+
stack,
|
|
37
|
+
throwable: reason.stack || ""
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
window.addEventListener("unhandledrejection", handler);
|
|
42
|
+
return () => window.removeEventListener("unhandledrejection", handler);
|
|
43
|
+
}
|
|
44
|
+
export {
|
|
45
|
+
registerPromiseErrorCapture
|
|
46
|
+
};
|
|
@@ -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
|
+
};
|