@jonathanleelx/meddle 0.2.0 → 0.2.2

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/bin/index.js CHANGED
@@ -43,6 +43,12 @@ if (command === '--help' || command === '-h' || command === 'help') {
43
43
  process.exit(0)
44
44
  }
45
45
 
46
+ // Check for --version / -v flag
47
+ if (command === '--version' || command === '-v') {
48
+ require('./commands/version.js')
49
+ process.exit(0)
50
+ }
51
+
46
52
  // Handle nested commands (mock/route/session)
47
53
  if (command === 'mock' || command === 'route' || command === 'session') {
48
54
  require(commands[command])
@@ -70,6 +76,7 @@ Meddle - 开发代理工具
70
76
  meddle url 获取代理 URL
71
77
  meddle status 查看代理状态
72
78
  meddle version 查看版本信息
79
+ meddle --version, -v 查看版本信息 (快捷别名)
73
80
 
74
81
  Session 命令 (多实例隔离,预览功能):
75
82
  meddle session create [--name <label>] [--port <port>]
@@ -101,6 +108,7 @@ Route 命令:
101
108
 
102
109
  全局选项:
103
110
  --help, -h 显示帮助信息
111
+ --version, -v 显示版本信息
104
112
  --session <id> 指定目标 session(与 MEDDLE_HOME 互斥)
105
113
  --json JSON 格式输出 (用于 list/show/preview 命令)
106
114
  --open 启动后自动打开浏览器
@@ -1,8 +1,10 @@
1
+ export declare function detailDecompressInputCap(max: number): number;
1
2
  export interface BodyDetail {
2
3
  text: string;
3
4
  truncated: boolean;
4
5
  originalBytes: number;
5
6
  }
6
7
  export declare function safeBodyToDetail(buf: Buffer | any, max: number, encoding?: string): BodyDetail;
8
+ export declare function safeBodyToDetailAsync(buf: Buffer | any, max: number, encoding?: string): Promise<BodyDetail>;
7
9
  export declare function safeBodyToString(buf: Buffer | any, max: number, encoding?: string): string;
8
10
  //# sourceMappingURL=body-utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"body-utils.d.ts","sourceRoot":"","sources":["../../core/body-utils.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,UAAU;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;CACzB;AAED,wBAAgB,gBAAgB,CAC5B,GAAG,EAAE,MAAM,GAAG,GAAG,EACjB,GAAG,EAAE,MAAM,EACX,QAAQ,CAAC,EAAE,MAAM,GAClB,UAAU,CA2BZ;AAED,wBAAgB,gBAAgB,CAC5B,GAAG,EAAE,MAAM,GAAG,GAAG,EACjB,GAAG,EAAE,MAAM,EACX,QAAQ,CAAC,EAAE,MAAM,GAClB,MAAM,CAER"}
1
+ {"version":3,"file":"body-utils.d.ts","sourceRoot":"","sources":["../../core/body-utils.ts"],"names":[],"mappings":"AAiBA,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE5D;AA2CD,MAAM,WAAW,UAAU;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;CACzB;AAMD,wBAAgB,gBAAgB,CAC5B,GAAG,EAAE,MAAM,GAAG,GAAG,EACjB,GAAG,EAAE,MAAM,EACX,QAAQ,CAAC,EAAE,MAAM,GAClB,UAAU,CA2BZ;AAMD,wBAAsB,qBAAqB,CACvC,GAAG,EAAE,MAAM,GAAG,GAAG,EACjB,GAAG,EAAE,MAAM,EACX,QAAQ,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,UAAU,CAAC,CAqCrB;AAED,wBAAgB,gBAAgB,CAC5B,GAAG,EAAE,MAAM,GAAG,GAAG,EACjB,GAAG,EAAE,MAAM,EACX,QAAQ,CAAC,EAAE,MAAM,GAClB,MAAM,CAER"}
@@ -1,8 +1,104 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
2
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.detailDecompressInputCap = detailDecompressInputCap;
3
37
  exports.safeBodyToDetail = safeBodyToDetail;
38
+ exports.safeBodyToDetailAsync = safeBodyToDetailAsync;
4
39
  exports.safeBodyToString = safeBodyToString;
40
+ const util_1 = require("util");
41
+ const zlib = __importStar(require("zlib"));
5
42
  const content_encoding_1 = require("./content-encoding");
43
+ const gunzipAsync = (0, util_1.promisify)(zlib.gunzip);
44
+ const inflateAsync = (0, util_1.promisify)(zlib.inflate);
45
+ const brotliDecompressAsync = (0, util_1.promisify)(zlib.brotliDecompress);
46
+ const zstdDecompressAsync = zlib.zstdDecompress;
47
+ const zstdAsync = zstdDecompressAsync ? (0, util_1.promisify)(zstdDecompressAsync) : null;
48
+ // Upper bound on compressed input we are willing to decompress for a detail.
49
+ // Since we only keep `max` bytes of the decompressed body, decompressing vastly
50
+ // larger inputs is pure waste (CPU + memory) and, when done synchronously, can
51
+ // block the event loop for minutes on huge payloads. Bodies larger than this
52
+ // are reported as a placeholder instead of being decompressed.
53
+ function detailDecompressInputCap(max) {
54
+ return Math.max(max * 8, 2 * 1024 * 1024);
55
+ }
56
+ async function decompressContentEncodingAsync(buffer, contentEncoding, maxInputBytes) {
57
+ const encodings = (contentEncoding || '')
58
+ .split(',')
59
+ .map(e => e.trim().toLowerCase())
60
+ .filter(Boolean);
61
+ if (encodings.length === 0)
62
+ return buffer;
63
+ // Refuse to decompress oversized inputs: we'd only keep `max` bytes anyway.
64
+ if (buffer.length > maxInputBytes)
65
+ return null;
66
+ let content = buffer;
67
+ for (const encoding of encodings.reverse()) {
68
+ try {
69
+ switch (encoding) {
70
+ case 'identity':
71
+ case '':
72
+ break;
73
+ case 'gzip':
74
+ case 'x-gzip':
75
+ content = await gunzipAsync(content);
76
+ break;
77
+ case 'deflate':
78
+ content = await inflateAsync(content);
79
+ break;
80
+ case 'br':
81
+ content = await brotliDecompressAsync(content);
82
+ break;
83
+ case 'zstd':
84
+ if (!zstdAsync)
85
+ return null;
86
+ content = await zstdAsync(content);
87
+ break;
88
+ default:
89
+ return null;
90
+ }
91
+ }
92
+ catch (_) {
93
+ return null;
94
+ }
95
+ }
96
+ return content;
97
+ }
98
+ // Sync variant for paths that never receive compressed upstream bodies (mock
99
+ // responses, map-local file serving). When an encoding is present it falls back
100
+ // to the (bounded) sync decompressor; callers without encoding pass nothing and
101
+ // this is effectively a no-op.
6
102
  function safeBodyToDetail(buf, max, encoding) {
7
103
  if (!Buffer.isBuffer(buf) || buf.length === 0) {
8
104
  return { text: '', truncated: false, originalBytes: 0 };
@@ -29,6 +125,46 @@ function safeBodyToDetail(buf, max, encoding) {
29
125
  return { text: '(binary)', truncated: false, originalBytes: content.length };
30
126
  }
31
127
  }
128
+ // Async variant for the proxy hot path: decompresses off the event loop
129
+ // (libuv thread pool) and refuses oversized inputs. This prevents large
130
+ // compressed upstream responses from starving the event loop (watchdog
131
+ // eventLoopDelay critical).
132
+ async function safeBodyToDetailAsync(buf, max, encoding) {
133
+ if (!Buffer.isBuffer(buf) || buf.length === 0) {
134
+ return { text: '', truncated: false, originalBytes: 0 };
135
+ }
136
+ const cap = detailDecompressInputCap(max);
137
+ const content = await decompressContentEncodingAsync(buf, encoding, cap);
138
+ if (!content) {
139
+ // Either a genuinely unsupported encoding or an oversized input we
140
+ // refused to decompress. Distinguish so the detail is informative.
141
+ if (encoding && buf.length > cap) {
142
+ return {
143
+ text: `(compressed body too large to decompress: ${encoding}, ${buf.length} bytes)`,
144
+ truncated: false,
145
+ originalBytes: buf.length,
146
+ };
147
+ }
148
+ return {
149
+ text: `(compressed body: ${encoding || 'unknown'}, ${buf.length} bytes)`,
150
+ truncated: false,
151
+ originalBytes: buf.length,
152
+ };
153
+ }
154
+ if (content.length > max) {
155
+ return {
156
+ text: `(truncated, ${content.length} bytes)\n` + content.slice(0, max).toString('utf8'),
157
+ truncated: true,
158
+ originalBytes: content.length,
159
+ };
160
+ }
161
+ try {
162
+ return { text: content.toString('utf8'), truncated: false, originalBytes: content.length };
163
+ }
164
+ catch (_) {
165
+ return { text: '(binary)', truncated: false, originalBytes: content.length };
166
+ }
167
+ }
32
168
  function safeBodyToString(buf, max, encoding) {
33
169
  return safeBodyToDetail(buf, max, encoding).text;
34
170
  }
@@ -1 +1 @@
1
- {"version":3,"file":"body-utils.js","sourceRoot":"","sources":["../../core/body-utils.ts"],"names":[],"mappings":";;AAQA,4CA+BC;AAED,4CAMC;AA/CD,yDAA+D;AAQ/D,SAAgB,gBAAgB,CAC5B,GAAiB,EACjB,GAAW,EACX,QAAiB;IAEjB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5C,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,EAAE,CAAC;IAC5D,CAAC;IAED,MAAM,OAAO,GAAG,IAAA,4CAAyB,EAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACzD,IAAI,CAAC,OAAO,EAAE,CAAC;QACX,OAAO;YACH,IAAI,EAAE,qBAAqB,QAAQ,IAAI,SAAS,KAAK,GAAG,CAAC,MAAM,SAAS;YACxE,SAAS,EAAE,KAAK;YAChB,aAAa,EAAE,GAAG,CAAC,MAAM;SAC5B,CAAC;IACN,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;QACvB,OAAO;YACH,IAAI,EAAE,eAAe,OAAO,CAAC,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;YACvF,SAAS,EAAE,IAAI;YACf,aAAa,EAAE,OAAO,CAAC,MAAM;SAChC,CAAC;IACN,CAAC;IAED,IAAI,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;IAC/F,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACT,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;IACjF,CAAC;AACL,CAAC;AAED,SAAgB,gBAAgB,CAC5B,GAAiB,EACjB,GAAW,EACX,QAAiB;IAEjB,OAAO,gBAAgB,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC;AACrD,CAAC"}
1
+ {"version":3,"file":"body-utils.js","sourceRoot":"","sources":["../../core/body-utils.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiBA,4DAEC;AAqDD,4CA+BC;AAMD,sDAyCC;AAED,4CAMC;AA9JD,+BAAgC;AAChC,2CAA4B;AAC5B,yDAA+D;AAE/D,MAAM,WAAW,GAAG,IAAA,gBAAS,EAAC,IAAI,CAAC,MAAM,CAAC,CAAA;AAC1C,MAAM,YAAY,GAAG,IAAA,gBAAS,EAAC,IAAI,CAAC,OAAO,CAAC,CAAA;AAC5C,MAAM,qBAAqB,GAAG,IAAA,gBAAS,EAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;AAC9D,MAAM,mBAAmB,GAAI,IAE3B,CAAC,cAAc,CAAA;AACjB,MAAM,SAAS,GAAG,mBAAmB,CAAC,CAAC,CAAC,IAAA,gBAAS,EAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;AAE7E,6EAA6E;AAC7E,gFAAgF;AAChF,+EAA+E;AAC/E,6EAA6E;AAC7E,+DAA+D;AAC/D,SAAgB,wBAAwB,CAAC,GAAW;IAChD,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,CAAA;AAC7C,CAAC;AAED,KAAK,UAAU,8BAA8B,CACzC,MAAc,EACd,eAAmC,EACnC,aAAqB;IAErB,MAAM,SAAS,GAAG,CAAC,eAAe,IAAI,EAAE,CAAC;SACpC,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;SAChC,MAAM,CAAC,OAAO,CAAC,CAAA;IAEpB,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,MAAM,CAAA;IACzC,4EAA4E;IAC5E,IAAI,MAAM,CAAC,MAAM,GAAG,aAAa;QAAE,OAAO,IAAI,CAAA;IAE9C,IAAI,OAAO,GAAG,MAAM,CAAA;IACpB,KAAK,MAAM,QAAQ,IAAI,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC;QACzC,IAAI,CAAC;YACD,QAAQ,QAAQ,EAAE,CAAC;gBACf,KAAK,UAAU,CAAC;gBAChB,KAAK,EAAE;oBACH,MAAK;gBACT,KAAK,MAAM,CAAC;gBACZ,KAAK,QAAQ;oBACT,OAAO,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,CAAC;oBAAC,MAAK;gBAC/C,KAAK,SAAS;oBACV,OAAO,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC;oBAAC,MAAK;gBAChD,KAAK,IAAI;oBACL,OAAO,GAAG,MAAM,qBAAqB,CAAC,OAAO,CAAC,CAAC;oBAAC,MAAK;gBACzD,KAAK,MAAM;oBACP,IAAI,CAAC,SAAS;wBAAE,OAAO,IAAI,CAAA;oBAC3B,OAAO,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,CAAC;oBAAC,MAAK;gBAC7C;oBACI,OAAO,IAAI,CAAA;YACnB,CAAC;QACL,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,OAAO,IAAI,CAAA;QACf,CAAC;IACL,CAAC;IACD,OAAO,OAAO,CAAA;AAClB,CAAC;AAQD,6EAA6E;AAC7E,gFAAgF;AAChF,gFAAgF;AAChF,+BAA+B;AAC/B,SAAgB,gBAAgB,CAC5B,GAAiB,EACjB,GAAW,EACX,QAAiB;IAEjB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5C,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,EAAE,CAAC;IAC5D,CAAC;IAED,MAAM,OAAO,GAAG,IAAA,4CAAyB,EAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACzD,IAAI,CAAC,OAAO,EAAE,CAAC;QACX,OAAO;YACH,IAAI,EAAE,qBAAqB,QAAQ,IAAI,SAAS,KAAK,GAAG,CAAC,MAAM,SAAS;YACxE,SAAS,EAAE,KAAK;YAChB,aAAa,EAAE,GAAG,CAAC,MAAM;SAC5B,CAAC;IACN,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;QACvB,OAAO;YACH,IAAI,EAAE,eAAe,OAAO,CAAC,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;YACvF,SAAS,EAAE,IAAI;YACf,aAAa,EAAE,OAAO,CAAC,MAAM;SAChC,CAAC;IACN,CAAC;IAED,IAAI,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;IAC/F,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACT,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;IACjF,CAAC;AACL,CAAC;AAED,wEAAwE;AACxE,wEAAwE;AACxE,uEAAuE;AACvE,4BAA4B;AACrB,KAAK,UAAU,qBAAqB,CACvC,GAAiB,EACjB,GAAW,EACX,QAAiB;IAEjB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5C,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,EAAE,CAAC;IAC5D,CAAC;IAED,MAAM,GAAG,GAAG,wBAAwB,CAAC,GAAG,CAAC,CAAA;IACzC,MAAM,OAAO,GAAG,MAAM,8BAA8B,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;IACzE,IAAI,CAAC,OAAO,EAAE,CAAC;QACX,mEAAmE;QACnE,mEAAmE;QACnE,IAAI,QAAQ,IAAI,GAAG,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;YAC/B,OAAO;gBACH,IAAI,EAAE,6CAA6C,QAAQ,KAAK,GAAG,CAAC,MAAM,SAAS;gBACnF,SAAS,EAAE,KAAK;gBAChB,aAAa,EAAE,GAAG,CAAC,MAAM;aAC5B,CAAA;QACL,CAAC;QACD,OAAO;YACH,IAAI,EAAE,qBAAqB,QAAQ,IAAI,SAAS,KAAK,GAAG,CAAC,MAAM,SAAS;YACxE,SAAS,EAAE,KAAK;YAChB,aAAa,EAAE,GAAG,CAAC,MAAM;SAC5B,CAAC;IACN,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;QACvB,OAAO;YACH,IAAI,EAAE,eAAe,OAAO,CAAC,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;YACvF,SAAS,EAAE,IAAI;YACf,aAAa,EAAE,OAAO,CAAC,MAAM;SAChC,CAAC;IACN,CAAC;IAED,IAAI,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;IAC/F,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACT,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;IACjF,CAAC;AACL,CAAC;AAED,SAAgB,gBAAgB,CAC5B,GAAiB,EACjB,GAAW,EACX,QAAiB;IAEjB,OAAO,gBAAgB,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC;AACrD,CAAC"}
package/index.js CHANGED
@@ -8,7 +8,7 @@ const { resolveTargetUrl, getFreePort } = require('./dist/helpers')
8
8
  const { crtMgr, ensureRootCA, getRootCAPath } = require('./dist/cert')
9
9
  const { decideRoute } = require('./dist/core/route-decision')
10
10
  const { sendShortResponse } = require('./dist/core/short-response')
11
- const { safeBodyToDetail } = require('./dist/core/body-utils')
11
+ const { safeBodyToDetailAsync } = require('./dist/core/body-utils')
12
12
  const {
13
13
  establishConnectTunnel,
14
14
  isExpectedSocketError,
@@ -433,8 +433,8 @@ const proxyServer = http.createServer(async (req, res) => {
433
433
  // 获取 inspection 信息
434
434
  const inspectionStages = routeDecision.meta?._inspectionStages || []
435
435
  const _detailBodyLimit = ctx.resolveDetailBodySizeBytes()
436
- const _reqBodyDetail = safeBodyToDetail(reqBody, _detailBodyLimit)
437
- const _resBodyDetail = safeBodyToDetail(resBody, _detailBodyLimit, responseEncoding)
436
+ const _reqBodyDetail = await safeBodyToDetailAsync(reqBody, _detailBodyLimit)
437
+ const _resBodyDetail = await safeBodyToDetailAsync(resBody, _detailBodyLimit, responseEncoding)
438
438
  const detail = {
439
439
  requestHeaders: req.headers,
440
440
  requestBody: _reqBodyDetail.text,
@@ -686,8 +686,8 @@ proxyServer.on('connect', async (req, socket, head) => {
686
686
  // 获取 inspection 信息
687
687
  const inspectionStages = routeDecision.meta?._inspectionStages || []
688
688
  const _detailBodyLimit = ctx.resolveDetailBodySizeBytes()
689
- const _reqBodyDetail = safeBodyToDetail(reqBody, _detailBodyLimit)
690
- const _resBodyDetail = safeBodyToDetail(resBody, _detailBodyLimit, responseEncoding)
689
+ const _reqBodyDetail = await safeBodyToDetailAsync(reqBody, _detailBodyLimit)
690
+ const _resBodyDetail = await safeBodyToDetailAsync(resBody, _detailBodyLimit, responseEncoding)
691
691
  const detail = {
692
692
  requestHeaders: req.headers,
693
693
  requestBody: _reqBodyDetail.text,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jonathanleelx/meddle",
3
- "version": "0.2.0",
3
+ "version": "0.2.2",
4
4
  "description": "A simple development proxy server with custom routing rules, mock responses, HTTPS interception, and a plugin system",
5
5
  "main": "index.js",
6
6
  "scripts": {