@pluve/mp-logger-sdk 0.0.1

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 (84) hide show
  1. package/README.md +133 -0
  2. package/dist/cjs/capture/wechatError.js +85 -0
  3. package/dist/cjs/compress/compression.js +94 -0
  4. package/dist/cjs/config/index.js +48 -0
  5. package/dist/cjs/core/fingerprint.js +32 -0
  6. package/dist/cjs/core/httpClient.js +55 -0
  7. package/dist/cjs/core/loggerSDK.js +580 -0
  8. package/dist/cjs/core/queueManager.js +121 -0
  9. package/dist/cjs/core/retryManager.js +123 -0
  10. package/dist/cjs/index.js +25 -0
  11. package/dist/cjs/stack/stacktrace.js +69 -0
  12. package/dist/cjs/transport/transport.js +17 -0
  13. package/dist/cjs/transport/transportAdapter.js +39 -0
  14. package/dist/cjs/transport/wechatTransport.js +98 -0
  15. package/dist/cjs/types/api.js +17 -0
  16. package/dist/cjs/types/env.js +17 -0
  17. package/dist/cjs/types/external.d.ts +15 -0
  18. package/dist/cjs/types/logEvent.js +17 -0
  19. package/dist/cjs/types/logEventLevel.js +17 -0
  20. package/dist/cjs/types/sdkOptions.js +17 -0
  21. package/dist/cjs/types/securityType.js +34 -0
  22. package/dist/cjs/types/trackOptions.js +17 -0
  23. package/dist/cjs/utils/environment.js +85 -0
  24. package/dist/cjs/utils/innerMD5.js +143 -0
  25. package/dist/cjs/utils/session.js +27 -0
  26. package/dist/cjs/utils/tools.js +73 -0
  27. package/dist/cjs/utils/uuid.js +31 -0
  28. package/dist/esm/capture/wechatError.js +65 -0
  29. package/dist/esm/compress/compression.js +74 -0
  30. package/dist/esm/config/index.js +28 -0
  31. package/dist/esm/core/fingerprint.js +12 -0
  32. package/dist/esm/core/httpClient.js +35 -0
  33. package/dist/esm/core/loggerSDK.js +560 -0
  34. package/dist/esm/core/queueManager.js +101 -0
  35. package/dist/esm/core/retryManager.js +103 -0
  36. package/dist/esm/index.js +5 -0
  37. package/dist/esm/stack/stacktrace.js +49 -0
  38. package/dist/esm/transport/transport.js +0 -0
  39. package/dist/esm/transport/transportAdapter.js +19 -0
  40. package/dist/esm/transport/wechatTransport.js +78 -0
  41. package/dist/esm/types/api.js +0 -0
  42. package/dist/esm/types/env.js +0 -0
  43. package/dist/esm/types/external.d.ts +15 -0
  44. package/dist/esm/types/logEvent.js +0 -0
  45. package/dist/esm/types/logEventLevel.js +0 -0
  46. package/dist/esm/types/sdkOptions.js +0 -0
  47. package/dist/esm/types/securityType.js +14 -0
  48. package/dist/esm/types/trackOptions.js +0 -0
  49. package/dist/esm/utils/environment.js +65 -0
  50. package/dist/esm/utils/innerMD5.js +123 -0
  51. package/dist/esm/utils/session.js +7 -0
  52. package/dist/esm/utils/tools.js +53 -0
  53. package/dist/esm/utils/uuid.js +11 -0
  54. package/dist/types/capture/jsError.d.ts +2 -0
  55. package/dist/types/capture/promiseError.d.ts +2 -0
  56. package/dist/types/capture/resourceError.d.ts +2 -0
  57. package/dist/types/capture/wechatError.d.ts +3 -0
  58. package/dist/types/compress/compression.d.ts +9 -0
  59. package/dist/types/config/index.d.ts +9 -0
  60. package/dist/types/core/fingerprint.d.ts +8 -0
  61. package/dist/types/core/httpClient.d.ts +11 -0
  62. package/dist/types/core/loggerSDK.d.ts +87 -0
  63. package/dist/types/core/queueManager.d.ts +55 -0
  64. package/dist/types/core/retryManager.d.ts +53 -0
  65. package/dist/types/index.d.ts +2 -0
  66. package/dist/types/stack/stacktrace.d.ts +2 -0
  67. package/dist/types/transport/beaconTransport.d.ts +11 -0
  68. package/dist/types/transport/pixelImageTransport.d.ts +11 -0
  69. package/dist/types/transport/transport.d.ts +14 -0
  70. package/dist/types/transport/transportAdapter.d.ts +8 -0
  71. package/dist/types/transport/wechatTransport.d.ts +11 -0
  72. package/dist/types/types/api.d.ts +12 -0
  73. package/dist/types/types/env.d.ts +14 -0
  74. package/dist/types/types/logEvent.d.ts +57 -0
  75. package/dist/types/types/logEventLevel.d.ts +2 -0
  76. package/dist/types/types/sdkOptions.d.ts +61 -0
  77. package/dist/types/types/securityType.d.ts +6 -0
  78. package/dist/types/types/trackOptions.d.ts +7 -0
  79. package/dist/types/utils/environment.d.ts +10 -0
  80. package/dist/types/utils/innerMD5.d.ts +6 -0
  81. package/dist/types/utils/session.d.ts +1 -0
  82. package/dist/types/utils/tools.d.ts +12 -0
  83. package/dist/types/utils/uuid.d.ts +7 -0
  84. package/package.json +65 -0
package/README.md ADDED
@@ -0,0 +1,133 @@
1
+ # @pluve/mp-logger-sdk
2
+
3
+ 微信小程序日志上报 SDK,专为小程序环境优化,剔除了浏览器相关逻辑与冗余依赖。
4
+
5
+ ## 概览
6
+
7
+ - **环境支持**:仅支持微信小程序(WeChat Mini Program)
8
+ - **采集与采样**:支持开关控制、日志等级白名单、分级/来源/路径采样率
9
+ - **传输适配**:使用微信原生 `wx.request` 进行上报
10
+ - **批量与队列**:支持批量上报(阈值与定时器双重触发)、队列持久化(使用 `wx.setStorageSync`)
11
+ - **重试策略**:可配置最大重试次数与指数退避策略
12
+ - **压缩能力**:支持 Gzip 压缩(使用 `fflate` + `wx.arrayBufferToBase64`),显著减少上报流量
13
+
14
+ ## 快速开始
15
+
16
+ ### 安装
17
+
18
+ ```bash
19
+ pnpm add @pluve/mp-logger-sdk
20
+ # 或
21
+ npm install @pluve/mp-logger-sdk
22
+ ```
23
+
24
+ ### 使用示例
25
+
26
+ ```ts
27
+ import { LoggerSDK } from '@pluve/mp-logger-sdk';
28
+
29
+ const sdk = LoggerSDK.getInstance();
30
+
31
+ // 1. 初始化 SDK
32
+ sdk.init({
33
+ appId: 'your-app-id',
34
+ logStage: 'product', // 环境:develop/trial/release
35
+ token: 'your-access-token',
36
+
37
+ // 可选配置
38
+ debug: false,
39
+ userId: 'u-001',
40
+ storeCode: 's-001',
41
+
42
+ // 批量上报配置
43
+ enableBatch: true,
44
+ batchSize: 20,
45
+ batchInterval: 15000,
46
+
47
+ // 压缩配置
48
+ enableGzip: true,
49
+ gzipBatchMinSize: 2,
50
+
51
+ // 自动采集配置
52
+ enableAutoCapture: true,
53
+ autoCapture: {
54
+ wechat: true // 开启小程序异常自动捕获(JS Error & Promise Rejection)
55
+ },
56
+
57
+ // 采样率(0.0 - 1.0)
58
+ sampleRate: 1,
59
+ });
60
+
61
+ // 2. 业务日志上报
62
+ sdk.track({
63
+ message: '用户点击了购买按钮',
64
+ traceId: 'trace-xyz', // 可选:链路追踪 ID
65
+ logLevel: 'INFO', // INFO | WARN | ERROR | FATAL
66
+ });
67
+
68
+ // 3. 动态设置用户信息
69
+ sdk.identify('u-002');
70
+ sdk.setStoreCode('s-002');
71
+ ```
72
+
73
+ ## 配置项说明
74
+
75
+ 详细类型定义请参考 [SDKOptions](./src/types/sdkOptions.ts)。
76
+
77
+ | 配置项 | 类型 | 默认值 | 说明 |
78
+ | :--- | :--- | :--- | :--- |
79
+ | `appId` | `string` | (必填) | 应用标识 |
80
+ | `token` | `string` | (必填) | 上报鉴权 Token |
81
+ | `logStage` | `string` | (必填) | 日志环境(develop/trial/release) |
82
+ | `enableBatch` | `boolean` | `false` | 是否启用批量上报 |
83
+ | `batchSize` | `number` | `20` | 批量上报阈值(条数) |
84
+ | `batchInterval` | `number` | `15000` | 批量上报时间间隔(ms) |
85
+ | `enableGzip` | `boolean` | `true` | 是否启用 Gzip 压缩(仅批量模式生效) |
86
+ | `enableStorage` | `boolean` | `true` | 是否启用队列持久化(使用 wx.storage) |
87
+ | `enableRetry` | `boolean` | `true` | 是否启用失败重试 |
88
+ | `enableAutoCapture` | `boolean` | `true` | 自动采集总开关 |
89
+ | `sampleRate` | `number` | `1.0` | 全局采样率 (0.0-1.0) |
90
+
91
+ ## 核心特性实现原理
92
+
93
+ ### 1. 压缩实现
94
+ - 使用轻量级 `fflate` 库进行 Gzip 压缩。
95
+ - 压缩后使用小程序原生 API `wx.arrayBufferToBase64` 转换为 Base64 字符串。
96
+ - 相比通用 Base64 库,利用原生能力大幅提升性能并减少包体积。
97
+ - 代码参考:[compression.ts](./src/compress/compression.ts)
98
+
99
+ ### 2. 传输机制
100
+ - **WechatTransport**:封装 `wx.request` 发送 POST 请求。
101
+ - **编码方式**:
102
+ - 未压缩:Body 为 JSON 字符串。
103
+ - 启用压缩:将日志条目数组序列化并 Gzip 压缩为 Base64 字符串,作为字段 `items` 上报。
104
+ - 代码参考:[wechatTransport.ts](./src/transport/wechatTransport.ts)
105
+
106
+ ### 3. 持久化队列
107
+ - 使用 `wx.getStorageSync` / `wx.setStorageSync` 实现队列持久化。
108
+ - 当发生异常或小程序退出时,未上报的日志会保存在本地,下次启动时自动恢复并尝试上报,防止数据丢失。
109
+ - 代码参考:[queueManager.ts](./src/core/queueManager.ts)
110
+
111
+ ### 4. 堆栈解析
112
+ - 内置轻量级堆栈解析器,替代庞大的 `stacktrace-js` 库。
113
+ - 支持 V8 格式(开发者工具/Android)和 JSC 格式(iOS)的 Error Stack 解析。
114
+ - 代码参考:[stacktrace.ts](./src/stack/stacktrace.ts)
115
+
116
+ ## 依赖说明
117
+
118
+ - **fflate**: 用于 Gzip 压缩(已作为 `dependencies` 包含)。
119
+ - **无其他运行时依赖**:移除了 `js-base64`、`localforage` 等浏览器端依赖。
120
+
121
+ ## 流程图
122
+
123
+ ![流程图](./src/logger-sdk.svg)
124
+
125
+ ## 构建
126
+
127
+ ```bash
128
+ # 安装依赖
129
+ pnpm install
130
+
131
+ # 构建产物 (ESM + CJS)
132
+ pnpm run build
133
+ ```
@@ -0,0 +1,85 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+
19
+ // src/capture/wechatError.ts
20
+ var wechatError_exports = {};
21
+ __export(wechatError_exports, {
22
+ registerWechatErrorCapture: () => registerWechatErrorCapture,
23
+ registerWechatUnhandledCapture: () => registerWechatUnhandledCapture
24
+ });
25
+ module.exports = __toCommonJS(wechatError_exports);
26
+ var import_stacktrace = require("../stack/stacktrace");
27
+ var import_tools = require("../utils/tools");
28
+ function registerWechatErrorCapture(debug, callback) {
29
+ try {
30
+ const wxAny = globalThis.wx;
31
+ if (wxAny && typeof wxAny.onError === "function") {
32
+ const handler = async (error) => {
33
+ (0, import_tools.logDebug)(debug, "registerWechatErrorCapture onError", error);
34
+ const msg = String((error == null ? void 0 : error.message) ?? error);
35
+ const err = error instanceof Error ? error : new Error(msg);
36
+ const stack = await (0, import_stacktrace.parseStack)(err);
37
+ callback({
38
+ type: "js",
39
+ message: err.message,
40
+ stack,
41
+ throwable: err.stack || ""
42
+ });
43
+ };
44
+ wxAny.onError(handler);
45
+ return () => {
46
+ try {
47
+ wxAny.offError && wxAny.offError(handler);
48
+ } catch {
49
+ }
50
+ };
51
+ }
52
+ } catch (e) {
53
+ (0, import_tools.logDebug)(debug, "registerWechatErrorCapture attach failed", e);
54
+ }
55
+ return void 0;
56
+ }
57
+ function registerWechatUnhandledCapture(debug, callback) {
58
+ try {
59
+ const wxAny = globalThis.wx;
60
+ if (wxAny && typeof wxAny.onUnhandledRejection === "function") {
61
+ const handler = async (res) => {
62
+ const reason = res == null ? void 0 : res.reason;
63
+ (0, import_tools.logDebug)(debug, "registerWechatUnhandledCapture onUnhandledRejection", reason);
64
+ const err = reason instanceof Error ? reason : new Error(String(reason));
65
+ const stack = await (0, import_stacktrace.parseStack)(err);
66
+ callback({
67
+ type: "promise",
68
+ message: err.message,
69
+ stack,
70
+ throwable: err.stack || ""
71
+ });
72
+ };
73
+ wxAny.onUnhandledRejection(handler);
74
+ return () => {
75
+ try {
76
+ wxAny.offUnhandledRejection && wxAny.offUnhandledRejection(handler);
77
+ } catch {
78
+ }
79
+ };
80
+ }
81
+ } catch (e) {
82
+ (0, import_tools.logDebug)(debug, "registerWechatUnhandledCapture attach failed", e);
83
+ }
84
+ return void 0;
85
+ }
@@ -0,0 +1,94 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+
19
+ // src/compress/compression.ts
20
+ var compression_exports = {};
21
+ __export(compression_exports, {
22
+ convert2Base64: () => convert2Base64,
23
+ convert2Base64FromArray: () => convert2Base64FromArray,
24
+ gzipCompress: () => gzipCompress,
25
+ isGzipSupported: () => isGzipSupported
26
+ });
27
+ module.exports = __toCommonJS(compression_exports);
28
+ var import_fflate = require("fflate");
29
+ function toUtf8Bytes(s) {
30
+ if (typeof TextEncoder !== "undefined") {
31
+ return new TextEncoder().encode(s);
32
+ }
33
+ const enc = encodeURIComponent(s);
34
+ const out = [];
35
+ for (let i = 0; i < enc.length; i += 1) {
36
+ const c = enc[i];
37
+ if (c === "%") {
38
+ out.push(parseInt(enc.slice(i + 1, i + 3), 16));
39
+ i += 2;
40
+ } else {
41
+ out.push(c.charCodeAt(0));
42
+ }
43
+ }
44
+ return new Uint8Array(out);
45
+ }
46
+ async function gzipCompress(data) {
47
+ try {
48
+ const input = toUtf8Bytes(data);
49
+ const compressed = (0, import_fflate.gzipSync)(input);
50
+ return convert2Base64FromArray(compressed);
51
+ } catch (e) {
52
+ console.log("gzipCompress 压缩失败", e);
53
+ }
54
+ throw new Error("gzipCompress 不支持压缩");
55
+ }
56
+ function isGzipSupported() {
57
+ return true;
58
+ }
59
+ function convert2Base64FromArray(data) {
60
+ try {
61
+ if (typeof wx !== "undefined" && wx.arrayBufferToBase64) {
62
+ if (data.byteLength !== data.buffer.byteLength) {
63
+ const copy = new Uint8Array(data);
64
+ return wx.arrayBufferToBase64(copy.buffer);
65
+ }
66
+ return wx.arrayBufferToBase64(data.buffer);
67
+ }
68
+ } catch (e) {
69
+ }
70
+ let binary = "";
71
+ for (let i = 0; i < data.length; i += 1) {
72
+ binary += String.fromCharCode(data[i]);
73
+ }
74
+ if (typeof btoa !== "undefined") {
75
+ return btoa(binary);
76
+ }
77
+ throw new Error("convert2Base64FromArray 不支持转换");
78
+ }
79
+ async function convert2Base64(data) {
80
+ if (typeof btoa !== "undefined") {
81
+ try {
82
+ return btoa(data);
83
+ } catch {
84
+ }
85
+ }
86
+ try {
87
+ const bytes = toUtf8Bytes(data);
88
+ if (typeof wx !== "undefined" && wx.arrayBufferToBase64) {
89
+ return wx.arrayBufferToBase64(bytes.buffer);
90
+ }
91
+ } catch (e) {
92
+ }
93
+ return data;
94
+ }
@@ -0,0 +1,48 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+
19
+ // src/config/index.ts
20
+ var config_exports = {};
21
+ __export(config_exports, {
22
+ getPixelBatchApi: () => getPixelBatchApi,
23
+ getRegisterApi: () => getRegisterApi,
24
+ getReportApi: () => getReportApi,
25
+ getSDKBaseApi: () => getSDKBaseApi
26
+ });
27
+ module.exports = __toCommonJS(config_exports);
28
+ var getSDKBaseApi = (env) => {
29
+ switch (env) {
30
+ case "product":
31
+ return "https://apm.pharmacyyf.com";
32
+ case "testing":
33
+ return "https://apm-te.pharmacyyf.com";
34
+ case "develop":
35
+ return "https://chief-dev.yifengx.com";
36
+ default:
37
+ return "https://apm.pharmacyyf.com";
38
+ }
39
+ };
40
+ var getRegisterApi = (env) => {
41
+ return `${getSDKBaseApi(env)}/yfcloud-apm/log/front/init`;
42
+ };
43
+ var getReportApi = (env) => {
44
+ return `${getSDKBaseApi(env)}/yfcloud-apm/log/front/batchSave`;
45
+ };
46
+ var getPixelBatchApi = (env) => {
47
+ return `${getSDKBaseApi(env)}/yfcloud-apm/log/front/pixelBatchSave`;
48
+ };
@@ -0,0 +1,32 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+
19
+ // src/core/fingerprint.ts
20
+ var fingerprint_exports = {};
21
+ __export(fingerprint_exports, {
22
+ generateFingerprint: () => generateFingerprint
23
+ });
24
+ module.exports = __toCommonJS(fingerprint_exports);
25
+ var import_tools = require("../utils/tools");
26
+ function generateFingerprint(error) {
27
+ var _a;
28
+ const msg = (0, import_tools.normalizeMessage)(error.message);
29
+ const frame = (_a = error.stack) == null ? void 0 : _a[0];
30
+ const frameKey = frame ? `${frame.file}:${frame.line}` : "no_frame";
31
+ return `${error.type}|${msg}|${frameKey}`;
32
+ }
@@ -0,0 +1,55 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+
19
+ // src/core/httpClient.ts
20
+ var httpClient_exports = {};
21
+ __export(httpClient_exports, {
22
+ HttpClient: () => HttpClient
23
+ });
24
+ module.exports = __toCommonJS(httpClient_exports);
25
+ var import_tools = require("../utils/tools");
26
+ var HttpClient = class {
27
+ /**
28
+ * 发送 POST 请求,需要兼容浏览器和微信小程序
29
+ */
30
+ static async post(url, data, token) {
31
+ (0, import_tools.logDebug)(true, "post", url, data, token);
32
+ return new Promise((resolve, reject) => {
33
+ wx.request({
34
+ url,
35
+ method: "POST",
36
+ data,
37
+ header: {
38
+ "Content-Type": "application/json",
39
+ token
40
+ },
41
+ success: (res) => resolve({
42
+ type: "wechat",
43
+ response: res
44
+ }),
45
+ fail: (err) => (
46
+ // eslint-disable-next-line prefer-promise-reject-errors
47
+ reject({
48
+ type: "wechat",
49
+ error: err
50
+ })
51
+ )
52
+ });
53
+ });
54
+ }
55
+ };