@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 +8 -0
- package/dist/core/body-utils.d.ts +2 -0
- package/dist/core/body-utils.d.ts.map +1 -1
- package/dist/core/body-utils.js +136 -0
- package/dist/core/body-utils.js.map +1 -1
- package/index.js +5 -5
- package/package.json +1 -1
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":"
|
|
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"}
|
package/dist/core/body-utils.js
CHANGED
|
@@ -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":"
|
|
1
|
+
{"version":3,"file":"body-utils.js","sourceRoot":"","sources":["../../core/body-utils.ts"],"names":[],"mappings":"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"}
|
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 {
|
|
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 =
|
|
437
|
-
const _resBodyDetail =
|
|
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 =
|
|
690
|
-
const _resBodyDetail =
|
|
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