@jonathanleelx/meddle 0.5.0-beta.2 → 0.5.0-beta.21
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/CONFIG_STRUCTURE.md +8 -2
- package/README.md +2 -0
- package/bin/commands/mock/add.js +33 -4
- package/bin/commands/mock/delete.js +8 -1
- package/bin/commands/mock/index.js +8 -4
- package/bin/commands/mock/list.js +1 -0
- package/bin/commands/mock/toggle.js +8 -1
- package/bin/commands/mock/update.js +31 -5
- package/bin/commands/route/active.js +6 -2
- package/bin/commands/route/add.js +12 -2
- package/bin/commands/route/create.js +8 -1
- package/bin/commands/route/delete.js +12 -2
- package/bin/commands/route/update.js +12 -2
- package/bin/commands/update.js +4 -0
- package/bin/lib/file-access.js +68 -25
- package/bin/lib/output.js +20 -1
- package/bin/lib/proxy-detect.js +99 -20
- package/bin/lib/update-check.js +67 -6
- package/dist/core/config-diagnostics.d.ts.map +1 -1
- package/dist/core/config-diagnostics.js +6 -1
- package/dist/core/config-diagnostics.js.map +1 -1
- package/dist/core/custom-plugin-loader.d.ts.map +1 -1
- package/dist/core/custom-plugin-loader.js +2 -0
- package/dist/core/custom-plugin-loader.js.map +1 -1
- package/dist/core/h2-pool.d.ts +1 -0
- package/dist/core/h2-pool.d.ts.map +1 -1
- package/dist/core/h2-pool.js +79 -23
- package/dist/core/h2-pool.js.map +1 -1
- package/dist/core/mock-handler.d.ts +65 -0
- package/dist/core/mock-handler.d.ts.map +1 -1
- package/dist/core/mock-handler.js +525 -29
- package/dist/core/mock-handler.js.map +1 -1
- package/dist/core/mock-utils.d.ts +58 -0
- package/dist/core/mock-utils.d.ts.map +1 -0
- package/dist/core/mock-utils.js +167 -0
- package/dist/core/mock-utils.js.map +1 -0
- package/dist/core/plugin-bootstrap-runner.d.ts +1 -0
- package/dist/core/plugin-bootstrap-runner.d.ts.map +1 -1
- package/dist/core/plugin-bootstrap-runner.js +37 -1
- package/dist/core/plugin-bootstrap-runner.js.map +1 -1
- package/dist/core/plugin-intercept.d.ts.map +1 -1
- package/dist/core/plugin-intercept.js +1 -0
- package/dist/core/plugin-intercept.js.map +1 -1
- package/dist/core/plugin-source.d.ts +24 -0
- package/dist/core/plugin-source.d.ts.map +1 -0
- package/dist/core/plugin-source.js +47 -0
- package/dist/core/plugin-source.js.map +1 -0
- package/dist/core/types.d.ts +13 -1
- package/dist/core/types.d.ts.map +1 -1
- package/dist/helpers.d.ts +8 -1
- package/dist/helpers.d.ts.map +1 -1
- package/dist/helpers.js +22 -5
- package/dist/helpers.js.map +1 -1
- package/dist/plugins/builtin/mock-plugin.d.ts.map +1 -1
- package/dist/plugins/builtin/mock-plugin.js +6 -5
- package/dist/plugins/builtin/mock-plugin.js.map +1 -1
- package/dist/server/agent/tools.d.ts.map +1 -1
- package/dist/server/agent/tools.js +4 -0
- package/dist/server/agent/tools.js.map +1 -1
- package/dist/server/app-info.d.ts +19 -0
- package/dist/server/app-info.d.ts.map +1 -0
- package/dist/server/app-info.js +84 -0
- package/dist/server/app-info.js.map +1 -0
- package/dist/server/config.d.ts +1 -0
- package/dist/server/config.d.ts.map +1 -1
- package/dist/server/config.js +57 -7
- package/dist/server/config.js.map +1 -1
- package/dist/server/health.d.ts.map +1 -1
- package/dist/server/health.js +8 -0
- package/dist/server/health.js.map +1 -1
- package/dist/server/index.d.ts +15 -0
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +2 -0
- package/dist/server/index.js.map +1 -1
- package/dist/server/mocks.d.ts +26 -0
- package/dist/server/mocks.d.ts.map +1 -1
- package/dist/server/mocks.js +110 -13
- package/dist/server/mocks.js.map +1 -1
- package/dist/server/plugins.d.ts.map +1 -1
- package/dist/server/plugins.js +56 -11
- package/dist/server/plugins.js.map +1 -1
- package/dist/server/rule-files.d.ts +53 -0
- package/dist/server/rule-files.d.ts.map +1 -1
- package/dist/server/rule-files.js +281 -30
- package/dist/server/rule-files.js.map +1 -1
- package/index.js +33 -5
- package/mcp-server.js +3 -0
- package/package.json +3 -2
- package/plugins/builtin/mock-plugin.ts +9 -5
- package/web/dist/assets/alert-BmsRCcSL.js +1 -0
- package/web/dist/assets/arrow-right-BNum_060.js +1 -0
- package/web/dist/assets/{body-diff-view-D7dCWajG.js → body-diff-view-ByCHr9bv.js} +2 -2
- package/web/dist/assets/button-BFNlGZ5p.js +1 -0
- package/web/dist/assets/check-BkfHQ6re.js +1 -0
- package/web/dist/assets/checkbox-v2kzp7K8.js +1 -0
- package/web/dist/assets/chevron-down-DHwUtL4O.js +1 -0
- package/web/dist/assets/{circle-alert-Q8cZk9Rv.js → circle-alert-zMagrFuI.js} +1 -1
- package/web/dist/assets/{circle-x-C9USji_R.js → circle-x-BEkinhez.js} +1 -1
- package/web/dist/assets/code-DD-AYxxu.js +1 -0
- package/web/dist/assets/{copy-BYjq1hdN.js → copy-BRnscYy1.js} +1 -1
- package/web/dist/assets/detail-panel-DK7pM43g.js +4 -0
- package/web/dist/assets/{dist-D5Dj17P8.js → dist-BCvvYbmI.js} +1 -1
- package/web/dist/assets/dist-BNcjMpca.js +1 -0
- package/web/dist/assets/{dist-Bb9TeEub.js → dist-C-E2R2jk.js} +1 -1
- package/web/dist/assets/{dist-C6eaYCUo.js → dist-CFZ4xMSF.js} +1 -1
- package/web/dist/assets/{dist-C5nMErq8.js → dist-CRmX_NvH.js} +1 -1
- package/web/dist/assets/dist-DD7AvbXP.js +1 -0
- package/web/dist/assets/{dist-Cn0y0IRn.js → dist-LiAcI8CK.js} +1 -1
- package/web/dist/assets/dist-UcOFuoN0.js +5 -0
- package/web/dist/assets/{dist-B8XUKgXe.js → dist-YM3jbhT-.js} +1 -1
- package/web/dist/assets/editor-pane-actions-DN-pxFsl.js +1 -0
- package/web/dist/assets/es2015-CRmLuA2o.js +41 -0
- package/web/dist/assets/{global-panel-shell-R-EZQRhs.js → global-panel-shell-D32I98dR.js} +4 -4
- package/web/dist/assets/health-panel-Dw7qdFVS.js +1 -0
- package/web/dist/assets/index-CYUNdxqh.css +2 -0
- package/web/dist/assets/index-CkoYwomI.js +18 -0
- package/web/dist/assets/mobile-proxy-panel-DtiDkpAa.js +8 -0
- package/web/dist/assets/mock-config-C3jSpNNu.js +1 -0
- package/web/dist/assets/mock-editor-panel-ByCYWJjO.js +20 -0
- package/web/dist/assets/mocks-file-missing-note-DmrrCBYY.js +1 -0
- package/web/dist/assets/monaco-editor-6oLiu4W6.js +11 -0
- package/web/dist/assets/pane-split-DYB05onX.js +1 -0
- package/web/dist/assets/panel-heading-BS8loc49.js +1 -0
- package/web/dist/assets/{pencil-line-Cqe41E4h.js → pencil-line-CEZ7D-de.js} +1 -1
- package/web/dist/assets/plugin-code-editor-DGzCBEpg.js +2 -0
- package/web/dist/assets/plugin-config-NVw234EF.js +2 -0
- package/web/dist/assets/plugin-generator-Ba4hP5rg.js +2 -0
- package/web/dist/assets/plugin-test-dialog-B4ojc2_9.js +7 -0
- package/web/dist/assets/plus-ixZQRprm.js +1 -0
- package/web/dist/assets/{refresh-cw-CG3HaiQT.js → refresh-cw-BfLoHqg5.js} +1 -1
- package/web/dist/assets/rotate-ccw-CRguJya4.js +1 -0
- package/web/dist/assets/route-preview-BspvfNdW.js +1 -0
- package/web/dist/assets/{rule-ai-assistant-panel-CNL1O0GY.js → rule-ai-assistant-panel-CQTsZMJu.js} +2 -2
- package/web/dist/assets/rule-config-DDOeMRXa.js +15 -0
- package/web/dist/assets/rule-overview-panel-CmWdMs4I.js +1 -0
- package/web/dist/assets/{server-Cpj4KNwN.js → server-eYXq3PbE.js} +1 -1
- package/web/dist/assets/settings-panel-aB0ojA9D.js +1 -0
- package/web/dist/assets/{shield-check-OqUmVLQt.js → shield-check-hQXjdfZ7.js} +1 -1
- package/web/dist/assets/smartphone-D4Q7cQfm.js +1 -0
- package/web/dist/assets/switch-DpLnRvOJ.js +1 -0
- package/web/dist/assets/{syntax-highlight-BHsSDUha.js → syntax-highlight-EJCxGikd.js} +1 -1
- package/web/dist/assets/table-2-DvGHhMm4.js +1 -0
- package/web/dist/assets/table-C3mgEjkP.js +1 -0
- package/web/dist/assets/textarea-BjWF0pk4.js +1 -0
- package/web/dist/assets/{wand-sparkles-wkul5vje.js → wand-sparkles-DDGjzjnX.js} +1 -1
- package/web/dist/assets/{wifi-D9M35Ajj.js → wifi-QkTcTrED.js} +1 -1
- package/web/dist/assets/{zap-Djo4cgux.js → zap-CEVoVkAg.js} +1 -1
- package/web/dist/index.html +17 -12
- package/web/dist/assets/alert-Bve02Ufr.js +0 -1
- package/web/dist/assets/arrow-right-B4Mrlj2-.js +0 -1
- package/web/dist/assets/button-BTToMaBW.js +0 -1
- package/web/dist/assets/checkbox-DK9f9Mxu.js +0 -1
- package/web/dist/assets/chevron-down-CPngAx4M.js +0 -1
- package/web/dist/assets/chevron-right-V1DGIDbL.js +0 -1
- package/web/dist/assets/code-5_eJ_XpJ.js +0 -1
- package/web/dist/assets/code-fixer-IRTVs-a6.js +0 -20
- package/web/dist/assets/detail-panel--2r_Fgpi.js +0 -4
- package/web/dist/assets/dist-CxdY_A67.js +0 -5
- package/web/dist/assets/es2015-CfXu88Y7.js +0 -41
- package/web/dist/assets/file-system-access-DK7FI6pN.js +0 -1
- package/web/dist/assets/health-panel-CKt2-Gkj.js +0 -1
- package/web/dist/assets/index-DhzkcDnh.js +0 -18
- package/web/dist/assets/index-PcoCj3ST.css +0 -2
- package/web/dist/assets/mobile-proxy-panel-Dxz-7iYx.js +0 -8
- package/web/dist/assets/mock-config-84LSNP6M.js +0 -1
- package/web/dist/assets/mock-editor-panel-RJ1abekr.js +0 -1
- package/web/dist/assets/monaco-editor-CbL970eS.js +0 -11
- package/web/dist/assets/plugin-code-editor-DfLc4JdP.js +0 -2
- package/web/dist/assets/plugin-config-CT-u4XYw.js +0 -1
- package/web/dist/assets/plugin-generator-CyBK9FuM.js +0 -2
- package/web/dist/assets/plugin-test-dialog-B-NF0sGH.js +0 -7
- package/web/dist/assets/plus-tVxSydJ8.js +0 -1
- package/web/dist/assets/rotate-ccw-CAYM6Vv0.js +0 -1
- package/web/dist/assets/route-preview-C8nW9w7i.js +0 -1
- package/web/dist/assets/rule-config-DXfovZnm.js +0 -15
- package/web/dist/assets/select-DQ6s7CL8.js +0 -1
- package/web/dist/assets/settings-panel-BhXgMr_a.js +0 -1
- package/web/dist/assets/smartphone-DKeDuJTU.js +0 -1
- package/web/dist/assets/switch-C-Xk56TK.js +0 -1
- package/web/dist/assets/table-DymgLlcc.js +0 -1
- package/web/dist/assets/textarea-vuxJwU0x.js +0 -1
- /package/web/dist/assets/{ai-config-store-DQXVJVn_.js → ai-config-store-B_VpGvwx.js} +0 -0
- /package/web/dist/assets/{babel-DsprIpXZ.js → babel-D1quDdNt.js} +0 -0
- /package/web/dist/assets/{clipboard-Dz6MgwV-.js → clipboard-DUgC_tNv.js} +0 -0
- /package/web/dist/assets/{dist-DZJ9SMlJ.js → dist-Bq2klZ3g.js} +0 -0
- /package/web/dist/assets/{estree-BP7k0NIt.js → estree--Vq99DGn.js} +0 -0
- /package/web/dist/assets/{html-6FIWbqxX.js → html-D2PZBPnP.js} +0 -0
- /package/web/dist/assets/{postcss-Dnf30fQU.js → postcss-DfIslWug.js} +0 -0
- /package/web/dist/assets/{standalone-CjxtLKw-.js → standalone-D-fjaAIs.js} +0 -0
package/bin/lib/output.js
CHANGED
|
@@ -128,6 +128,23 @@ function tableRow(columns, widths) {
|
|
|
128
128
|
console.log(' ' + row)
|
|
129
129
|
}
|
|
130
130
|
|
|
131
|
+
/**
|
|
132
|
+
* Shared downgrade warning when CLI mutates config but cannot reach a live proxy
|
|
133
|
+
* (issue #85). Same wording for mock + route families.
|
|
134
|
+
*/
|
|
135
|
+
const FILE_ONLY_WARNING =
|
|
136
|
+
'Config written to file, but could not connect to a running proxy — restart required for changes to take effect.'
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* Emit the file-only downgrade warning. Always prints to stderr (including
|
|
140
|
+
* --json mode) so the failure mode is never silent.
|
|
141
|
+
* @returns {string} the warning message
|
|
142
|
+
*/
|
|
143
|
+
function warnFileOnlyMode() {
|
|
144
|
+
console.error(chalk.yellow(' ⚠'), FILE_ONLY_WARNING)
|
|
145
|
+
return FILE_ONLY_WARNING
|
|
146
|
+
}
|
|
147
|
+
|
|
131
148
|
module.exports = {
|
|
132
149
|
setJsonMode,
|
|
133
150
|
isJsonMode,
|
|
@@ -142,5 +159,7 @@ module.exports = {
|
|
|
142
159
|
plain,
|
|
143
160
|
kv,
|
|
144
161
|
bullet,
|
|
145
|
-
tableRow
|
|
162
|
+
tableRow,
|
|
163
|
+
FILE_ONLY_WARNING,
|
|
164
|
+
warnFileOnlyMode,
|
|
146
165
|
}
|
package/bin/lib/proxy-detect.js
CHANGED
|
@@ -6,6 +6,15 @@
|
|
|
6
6
|
* every CLI command session-aware without individual changes: when
|
|
7
7
|
* --session <id> is set, MEDDLE_HOME is pinned to the session's data dir
|
|
8
8
|
* and getProxyUrl() returns that session's port.
|
|
9
|
+
*
|
|
10
|
+
* Probe priority (issue #85):
|
|
11
|
+
* 1. MEDDLE_SESSION_PORT (pinned session)
|
|
12
|
+
* 2. mcp-proxy-url.json (written by proxy on every start)
|
|
13
|
+
* 3. DEFAULT_PROXY_BASE (http://127.0.0.1:8989)
|
|
14
|
+
*
|
|
15
|
+
* Stale ports in mcp-proxy-url.json must not stick forever: isProxyRunning /
|
|
16
|
+
* resolveLiveProxyUrl fall through to later candidates when a probe fails,
|
|
17
|
+
* and cache the first live URL for subsequent getProxyUrl() / API calls.
|
|
9
18
|
*/
|
|
10
19
|
|
|
11
20
|
const fs = require('fs')
|
|
@@ -16,39 +25,61 @@ const { applySessionContext, GLOBAL_DEFAULT_PORT } = require('./session-args')
|
|
|
16
25
|
// Apply --session / MEDDLE_HOME precedence before computing paths.
|
|
17
26
|
applySessionContext()
|
|
18
27
|
|
|
28
|
+
// Resolved once for CLI (MEDDLE_HOME is set before this module loads).
|
|
19
29
|
const meddleDir = resolveMeddleHome()
|
|
20
30
|
const mcpFile = path.join(meddleDir, 'mcp-proxy-url.json')
|
|
21
31
|
const DEFAULT_PROXY_BASE = `http://127.0.0.1:${GLOBAL_DEFAULT_PORT}`
|
|
22
32
|
|
|
33
|
+
/** @type {string | null} */
|
|
34
|
+
let resolvedProxyUrl = null
|
|
35
|
+
|
|
36
|
+
function getMcpFilePath() {
|
|
37
|
+
// Prefer live MEDDLE_HOME so tests can point at a temp home after require.
|
|
38
|
+
const home = (process.env.MEDDLE_HOME || '').trim() || meddleDir
|
|
39
|
+
return path.join(home, 'mcp-proxy-url.json')
|
|
40
|
+
}
|
|
41
|
+
|
|
23
42
|
/**
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
* Priority:
|
|
27
|
-
* 1. MEDDLE_SESSION_PORT env (set by --session resolution)
|
|
28
|
-
* 2. mcp-proxy-url.json (written by proxy on startup)
|
|
29
|
-
* 3. DEFAULT_PROXY_BASE (http://127.0.0.1:8989)
|
|
43
|
+
* Sync best-effort URL (no liveness check). Prefer a previously resolved live
|
|
44
|
+
* URL so API calls after isProxyRunning() hit the working port.
|
|
30
45
|
*/
|
|
31
46
|
function getProxyUrl() {
|
|
47
|
+
if (resolvedProxyUrl) return resolvedProxyUrl
|
|
48
|
+
const candidates = getCandidateProxyUrls()
|
|
49
|
+
return candidates[0] || DEFAULT_PROXY_BASE
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Ordered candidate URLs to probe (deduped).
|
|
54
|
+
* Session pin is exclusive — do not fall back to global file/default.
|
|
55
|
+
*/
|
|
56
|
+
function getCandidateProxyUrls() {
|
|
32
57
|
if (process.env.MEDDLE_SESSION_PORT) {
|
|
33
|
-
return `http://127.0.0.1:${process.env.MEDDLE_SESSION_PORT}`
|
|
58
|
+
return [`http://127.0.0.1:${process.env.MEDDLE_SESSION_PORT}`]
|
|
34
59
|
}
|
|
60
|
+
const urls = []
|
|
35
61
|
try {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
62
|
+
const file = getMcpFilePath()
|
|
63
|
+
if (fs.existsSync(file)) {
|
|
64
|
+
const data = JSON.parse(fs.readFileSync(file, 'utf8'))
|
|
65
|
+
if (data.proxyUrl && typeof data.proxyUrl === 'string') {
|
|
66
|
+
urls.push(data.proxyUrl.replace(/\/$/, ''))
|
|
67
|
+
}
|
|
39
68
|
}
|
|
40
69
|
} catch (_) {}
|
|
41
|
-
|
|
70
|
+
if (!urls.includes(DEFAULT_PROXY_BASE)) {
|
|
71
|
+
urls.push(DEFAULT_PROXY_BASE)
|
|
72
|
+
}
|
|
73
|
+
return urls
|
|
42
74
|
}
|
|
43
75
|
|
|
44
76
|
/**
|
|
45
|
-
*
|
|
46
|
-
* @param {number} timeoutMs
|
|
77
|
+
* @param {string} url
|
|
78
|
+
* @param {number} timeoutMs
|
|
47
79
|
*/
|
|
48
|
-
async function
|
|
49
|
-
const url = getProxyUrl()
|
|
80
|
+
async function probeUrl(url, timeoutMs = 2000) {
|
|
50
81
|
try {
|
|
51
|
-
const response = await fetch(url + '/api/mocks', {
|
|
82
|
+
const response = await fetch(url.replace(/\/$/, '') + '/api/mocks', {
|
|
52
83
|
method: 'GET',
|
|
53
84
|
signal: AbortSignal.timeout(timeoutMs)
|
|
54
85
|
})
|
|
@@ -58,6 +89,38 @@ async function isProxyRunning(timeoutMs = 2000) {
|
|
|
58
89
|
}
|
|
59
90
|
}
|
|
60
91
|
|
|
92
|
+
/**
|
|
93
|
+
* Probe candidates in order; cache and return the first live URL, or null.
|
|
94
|
+
* @param {number} timeoutMs
|
|
95
|
+
* @param {(url: string, timeoutMs: number) => Promise<boolean>} [probe]
|
|
96
|
+
*/
|
|
97
|
+
async function resolveLiveProxyUrl(timeoutMs = 2000, probe = probeUrl) {
|
|
98
|
+
if (resolvedProxyUrl) {
|
|
99
|
+
const perTry = Math.min(timeoutMs, 800)
|
|
100
|
+
if (await probe(resolvedProxyUrl, perTry)) return resolvedProxyUrl
|
|
101
|
+
resolvedProxyUrl = null
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
const candidates = getCandidateProxyUrls()
|
|
105
|
+
const perTry = Math.max(200, Math.floor(timeoutMs / Math.max(1, candidates.length)))
|
|
106
|
+
for (const url of candidates) {
|
|
107
|
+
if (await probe(url, perTry)) {
|
|
108
|
+
resolvedProxyUrl = url
|
|
109
|
+
return url
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
return null
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* Check if proxy is running by probing candidates (file → default fallback).
|
|
117
|
+
* @param {number} timeoutMs - Timeout in milliseconds (default 2000)
|
|
118
|
+
*/
|
|
119
|
+
async function isProxyRunning(timeoutMs = 2000) {
|
|
120
|
+
const url = await resolveLiveProxyUrl(timeoutMs)
|
|
121
|
+
return !!url
|
|
122
|
+
}
|
|
123
|
+
|
|
61
124
|
/**
|
|
62
125
|
* Wait for proxy to start
|
|
63
126
|
* @param {number} timeoutMs - Timeout in milliseconds (default 5000)
|
|
@@ -69,15 +132,15 @@ function waitForProxyUrl(timeoutMs = 5000) {
|
|
|
69
132
|
const check = () => {
|
|
70
133
|
try {
|
|
71
134
|
if (process.env.MEDDLE_SESSION_PORT) {
|
|
72
|
-
// For --session mode, poll the HTTP endpoint directly.
|
|
73
135
|
const port = process.env.MEDDLE_SESSION_PORT
|
|
74
136
|
fetch(`http://127.0.0.1:${port}/api/mocks`, { method: 'GET', signal: AbortSignal.timeout(500) })
|
|
75
137
|
.then((r) => { if (r.ok) resolve(`http://127.0.0.1:${port}`); else retry() })
|
|
76
138
|
.catch(() => retry())
|
|
77
139
|
return
|
|
78
140
|
}
|
|
79
|
-
|
|
80
|
-
|
|
141
|
+
const file = getMcpFilePath()
|
|
142
|
+
if (fs.existsSync(file)) {
|
|
143
|
+
const data = JSON.parse(fs.readFileSync(file, 'utf8'))
|
|
81
144
|
if (data.proxyUrl) {
|
|
82
145
|
return resolve(data.proxyUrl)
|
|
83
146
|
}
|
|
@@ -95,11 +158,27 @@ function waitForProxyUrl(timeoutMs = 5000) {
|
|
|
95
158
|
})
|
|
96
159
|
}
|
|
97
160
|
|
|
161
|
+
/** Test-only: clear cached live URL so the next probe re-reads candidates. */
|
|
162
|
+
function __resetResolvedProxyUrlForTest() {
|
|
163
|
+
resolvedProxyUrl = null
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
/** Test-only: seed the cached live URL. */
|
|
167
|
+
function __setResolvedProxyUrlForTest(url) {
|
|
168
|
+
resolvedProxyUrl = url || null
|
|
169
|
+
}
|
|
170
|
+
|
|
98
171
|
module.exports = {
|
|
99
172
|
meddleDir,
|
|
100
173
|
mcpFile,
|
|
101
174
|
DEFAULT_PROXY_BASE,
|
|
102
175
|
getProxyUrl,
|
|
176
|
+
getCandidateProxyUrls,
|
|
177
|
+
getMcpFilePath,
|
|
178
|
+
resolveLiveProxyUrl,
|
|
179
|
+
probeUrl,
|
|
103
180
|
isProxyRunning,
|
|
104
|
-
waitForProxyUrl
|
|
181
|
+
waitForProxyUrl,
|
|
182
|
+
__resetResolvedProxyUrlForTest,
|
|
183
|
+
__setResolvedProxyUrlForTest,
|
|
105
184
|
}
|
package/bin/lib/update-check.js
CHANGED
|
@@ -27,6 +27,58 @@ const DEFAULT_CACHE_TTL_MS = 24 * 60 * 60 * 1000
|
|
|
27
27
|
const DEFAULT_TIMEOUT_MS = 5000
|
|
28
28
|
const DEFAULT_DOWNLOAD_TIMEOUT_MS = 120 * 1000
|
|
29
29
|
|
|
30
|
+
/**
|
|
31
|
+
* Resolve a GitHub token for private release downloads / latest redirects.
|
|
32
|
+
* Precedence: explicit argument → GH_TOKEN → GITHUB_TOKEN.
|
|
33
|
+
* @param {string} [explicit]
|
|
34
|
+
* @returns {string}
|
|
35
|
+
*/
|
|
36
|
+
function resolveGithubToken(explicit) {
|
|
37
|
+
if (typeof explicit === 'string' && explicit.trim()) return explicit.trim()
|
|
38
|
+
const gh = process.env.GH_TOKEN
|
|
39
|
+
if (typeof gh === 'string' && gh.trim()) return gh.trim()
|
|
40
|
+
const github = process.env.GITHUB_TOKEN
|
|
41
|
+
if (typeof github === 'string' && github.trim()) return github.trim()
|
|
42
|
+
return ''
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* @param {string} token
|
|
47
|
+
* @returns {Record<string, string>}
|
|
48
|
+
*/
|
|
49
|
+
function githubAuthHeaders(token) {
|
|
50
|
+
if (!token) return {}
|
|
51
|
+
// GitHub accepts Bearer for PATs / fine-grained tokens on release asset URLs.
|
|
52
|
+
return { Authorization: `Bearer ${token}` }
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
function privateReleaseAuthHint() {
|
|
56
|
+
return (
|
|
57
|
+
'Private GitHub releases require GH_TOKEN or GITHUB_TOKEN '
|
|
58
|
+
+ '(scope: repo, or fine-grained contents:read). '
|
|
59
|
+
+ `Or: gh release download -R ${REPO} -p 'meddle-*'`
|
|
60
|
+
)
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* @param {'checksum' | 'download'} kind
|
|
65
|
+
* @param {number} status
|
|
66
|
+
* @param {boolean} hadToken
|
|
67
|
+
* @returns {string}
|
|
68
|
+
*/
|
|
69
|
+
function formatDownloadStatusError(kind, status, hadToken) {
|
|
70
|
+
const base = kind === 'checksum'
|
|
71
|
+
? `checksum sidecar missing (${status})`
|
|
72
|
+
: `download failed (${status})`
|
|
73
|
+
if ((status === 404 || status === 401 || status === 403) && !hadToken) {
|
|
74
|
+
return `${base}. ${privateReleaseAuthHint()}`
|
|
75
|
+
}
|
|
76
|
+
if ((status === 401 || status === 403) && hadToken) {
|
|
77
|
+
return `${base}. Token may lack repo/contents:read access to ${REPO}`
|
|
78
|
+
}
|
|
79
|
+
return base
|
|
80
|
+
}
|
|
81
|
+
|
|
30
82
|
const VERSION_RE = /^v?(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?$/
|
|
31
83
|
|
|
32
84
|
/**
|
|
@@ -120,12 +172,14 @@ async function getLatestVersionNpm({ fetchImpl, registryUrl, timeoutMs, distTag
|
|
|
120
172
|
* @param {{ fetchImpl?: Function, latestUrl?: string, timeoutMs?: number }} opts
|
|
121
173
|
* @returns {Promise<string>}
|
|
122
174
|
*/
|
|
123
|
-
async function getLatestVersionGithub({ fetchImpl, latestUrl, timeoutMs } = {}) {
|
|
175
|
+
async function getLatestVersionGithub({ fetchImpl, latestUrl, timeoutMs, githubToken } = {}) {
|
|
124
176
|
const doFetch = fetchImpl || fetch
|
|
125
177
|
const url = latestUrl || process.env.MEDDLE_GITHUB_LATEST_URL || DEFAULT_GITHUB_LATEST_URL
|
|
178
|
+
const token = resolveGithubToken(githubToken)
|
|
126
179
|
const response = await doFetch(url, {
|
|
127
180
|
redirect: 'manual',
|
|
128
181
|
signal: AbortSignal.timeout(timeoutMs || DEFAULT_TIMEOUT_MS),
|
|
182
|
+
headers: githubAuthHeaders(token),
|
|
129
183
|
})
|
|
130
184
|
if (response.status < 300 || response.status >= 400) {
|
|
131
185
|
throw new Error(`GitHub latest release did not redirect (${response.status})`)
|
|
@@ -287,7 +341,7 @@ function sha256Hex(buffer) {
|
|
|
287
341
|
* baseUrl?: string, fetchImpl?: Function, timeoutMs?: number,
|
|
288
342
|
* retries?: number, retryDelayMs?: number,
|
|
289
343
|
* onProgress?: Function, onAttempt?: Function,
|
|
290
|
-
* fsImpl?: object }} opts
|
|
344
|
+
* githubToken?: string, fsImpl?: object }} opts
|
|
291
345
|
* @returns {Promise<{ installed: string, backup: string, version: string }>}
|
|
292
346
|
*/
|
|
293
347
|
async function downloadBinaryAsset(opts) {
|
|
@@ -300,6 +354,8 @@ async function downloadBinaryAsset(opts) {
|
|
|
300
354
|
const retryDelayMs = opts.retryDelayMs === undefined ? 1000 : opts.retryDelayMs
|
|
301
355
|
const onProgress = typeof opts.onProgress === 'function' ? opts.onProgress : () => {}
|
|
302
356
|
const onAttempt = typeof opts.onAttempt === 'function' ? opts.onAttempt : () => {}
|
|
357
|
+
const token = resolveGithubToken(opts.githubToken)
|
|
358
|
+
const authHeaders = githubAuthHeaders(token)
|
|
303
359
|
|
|
304
360
|
const asset = getAssetName({ platform, arch })
|
|
305
361
|
const assetUrl = `${baseUrl}/v${version}/${asset}`
|
|
@@ -327,8 +383,8 @@ async function downloadBinaryAsset(opts) {
|
|
|
327
383
|
}
|
|
328
384
|
resetIdle()
|
|
329
385
|
try {
|
|
330
|
-
const response = await doFetch(assetUrl, { signal: controller.signal })
|
|
331
|
-
if (!response.ok) throw new Error(
|
|
386
|
+
const response = await doFetch(assetUrl, { signal: controller.signal, headers: authHeaders })
|
|
387
|
+
if (!response.ok) throw new Error(formatDownloadStatusError('download', response.status, Boolean(token)))
|
|
332
388
|
const total = Number(response.headers.get('content-length')) || 0
|
|
333
389
|
const chunks = []
|
|
334
390
|
let received = 0
|
|
@@ -365,8 +421,11 @@ async function downloadBinaryAsset(opts) {
|
|
|
365
421
|
// download — otherwise the sidecar body stream aborts before it is read
|
|
366
422
|
// and the whole install fails with "operation aborted" right after the
|
|
367
423
|
// payload reached 100%.
|
|
368
|
-
const shaResponse = await doFetch(shaUrl, {
|
|
369
|
-
|
|
424
|
+
const shaResponse = await doFetch(shaUrl, {
|
|
425
|
+
signal: AbortSignal.timeout(DEFAULT_TIMEOUT_MS),
|
|
426
|
+
headers: authHeaders,
|
|
427
|
+
})
|
|
428
|
+
if (!shaResponse.ok) throw new Error(formatDownloadStatusError('checksum', shaResponse.status, Boolean(token)))
|
|
370
429
|
const shaText = await shaResponse.text()
|
|
371
430
|
|
|
372
431
|
const payload = await fetchPayload()
|
|
@@ -559,5 +618,7 @@ module.exports = {
|
|
|
559
618
|
setAutoUpdate,
|
|
560
619
|
resolveUpdateBinDir,
|
|
561
620
|
runAsyncUpdateCheck,
|
|
621
|
+
resolveGithubToken,
|
|
622
|
+
githubAuthHeaders,
|
|
562
623
|
DEFAULT_DOWNLOAD_TIMEOUT_MS,
|
|
563
624
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-diagnostics.d.ts","sourceRoot":"","sources":["../../core/config-diagnostics.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config-diagnostics.d.ts","sourceRoot":"","sources":["../../core/config-diagnostics.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAG3E,UAAU,iBAAiB;IACvB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACtB;AAED,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,YAAY,EAAE,aAAa,EAAE,iBAAiB,EAAE,WAAW,EAAE,WAAW;4BACpF,GAAG;oCASK,iBAAiB;EAkFzD"}
|
|
@@ -34,6 +34,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
36
|
exports.createConfigDiagnostics = createConfigDiagnostics;
|
|
37
|
+
const mock_handler_1 = require("./mock-handler");
|
|
37
38
|
const fs = __importStar(require("fs"));
|
|
38
39
|
const path = __importStar(require("path"));
|
|
39
40
|
const rule_files_1 = require("../server/rule-files");
|
|
@@ -66,7 +67,8 @@ function createConfigDiagnostics(ctx, serverContext, mockHandler) {
|
|
|
66
67
|
details: {
|
|
67
68
|
theme: settings.theme, fontSize: settings.fontSize,
|
|
68
69
|
aiEnabled: settings.aiConfig?.enabled || false,
|
|
69
|
-
customMocksPath: settings.mocksFilePath || null
|
|
70
|
+
customMocksPath: settings.mocksFilePath || null,
|
|
71
|
+
resolvedMocksPath: mockHandler.getMockFilePath()
|
|
70
72
|
}
|
|
71
73
|
});
|
|
72
74
|
}
|
|
@@ -93,6 +95,9 @@ function createConfigDiagnostics(ctx, serverContext, mockHandler) {
|
|
|
93
95
|
else {
|
|
94
96
|
diagnostics.warnings.push('路由规则目录不存在: ' + rulesDir);
|
|
95
97
|
}
|
|
98
|
+
const legacyMocks = (0, mock_handler_1.detectLegacyMocksPath)((0, mock_handler_1.readConfiguredMocksPath)(ctx.settingsPath), ctx.meddleDir);
|
|
99
|
+
if (legacyMocks)
|
|
100
|
+
diagnostics.warnings.push((0, mock_handler_1.formatLegacyMocksNotice)(legacyMocks));
|
|
96
101
|
const customPaths = mockHandler.loadCustomPathsFromSettings();
|
|
97
102
|
const mocksPath = customPaths.mocksFilePath || mockHandler.getMockFilePath();
|
|
98
103
|
if (fs.existsSync(mocksPath)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-diagnostics.js","sourceRoot":"","sources":["../../core/config-diagnostics.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"config-diagnostics.js","sourceRoot":"","sources":["../../core/config-diagnostics.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAcA,0DA4FC;AA1GD,iDAAwG;AACxG,uCAAwB;AACxB,2CAA4B;AAE5B,qDAAoD;AAUpD,SAAgB,uBAAuB,CAAC,GAAiB,EAAE,aAAgC,EAAE,WAAwB;IACjH,SAAS,gBAAgB;QACrB,IAAI,CAAC;YACD,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;gBAClC,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAA;YAChE,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAAC,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;QAAC,CAAC;QACnD,OAAO,IAAI,CAAA;IACf,CAAC;IAED,SAAS,wBAAwB;QAC7B,MAAM,WAAW,GAAsB,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAA;QAE7F,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YAC/B,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,SAAS,EAAE,CAAC,CAAA;QAChF,CAAC;aAAM,CAAC;YACJ,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC,SAAS,CAAC,CAAA;YACpD,WAAW,CAAC,MAAM,GAAG,OAAO,CAAA;QAChC,CAAC;QAED,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;YAClC,IAAI,CAAC;gBACD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAA;gBACtE,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC;oBACpB,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,YAAY;oBAClD,OAAO,EAAE;wBACL,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ;wBAClD,SAAS,EAAE,QAAQ,CAAC,QAAQ,EAAE,OAAO,IAAI,KAAK;wBAC9C,eAAe,EAAE,QAAQ,CAAC,aAAa,IAAI,IAAI;wBAC/C,iBAAiB,EAAE,WAAW,CAAC,eAAe,EAAE;qBACnD;iBACJ,CAAC,CAAA;YACN,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBAClB,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,CAAA;gBACvD,WAAW,CAAC,MAAM,GAAG,OAAO,CAAA;YAChC,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAA;QAClD,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,aAAa,CAAC,CAAA;QACxD,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1B,MAAM,KAAK,GAAG,IAAA,0BAAa,EAAC,aAAoB,CAAC,CAAA;YACjD,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC;gBACpB,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ;gBAC5C,OAAO,EAAE;oBACL,UAAU,EAAE,KAAK,CAAC,MAAM;oBACxB,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM;oBACxD,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,MAAM;iBAC9C;aACJ,CAAC,CAAA;QACN,CAAC;aAAM,CAAC;YACJ,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC,CAAA;QACvD,CAAC;QAED,MAAM,WAAW,GAAG,IAAA,oCAAqB,EAAC,IAAA,sCAAuB,EAAC,GAAG,CAAC,YAAY,CAAC,EAAE,GAAG,CAAC,SAAS,CAAC,CAAA;QACnG,IAAI,WAAW;YAAE,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAA,sCAAuB,EAAC,WAAW,CAAC,CAAC,CAAA;QAChF,MAAM,WAAW,GAAG,WAAW,CAAC,2BAA2B,EAAE,CAAA;QAC7D,MAAM,SAAS,GAAG,WAAW,CAAC,aAAa,IAAI,WAAW,CAAC,eAAe,EAAE,CAAA;QAC5E,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC3B,IAAI,CAAC;gBACD,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;gBAClD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;gBAChC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC;oBACpB,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS;oBAChD,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE;iBACxI,CAAC,CAAA;YACN,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBAClB,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC,OAAO,CAAC,CAAA;gBAC1D,WAAW,CAAC,MAAM,GAAG,OAAO,CAAA;YAChC,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAAA;QAC3D,CAAC;QAED,MAAM,UAAU,GAAa,EAAE,CAAA;QAC/B,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7B,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YACzB,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;gBAAE,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;;gBAC5E,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAA;YACvD,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;gBAAE,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YACnF,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,CAAC,CAAA;QACtJ,CAAC;aAAM,CAAC;YACJ,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QACxC,CAAC;QAED,IAAI,WAAW,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;YAAE,WAAW,CAAC,MAAM,GAAG,OAAO,CAAA;aAC1D,IAAI,WAAW,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;YAAE,WAAW,CAAC,MAAM,GAAG,SAAS,CAAA;QACxE,OAAO,WAAW,CAAA;IACtB,CAAC;IAED,OAAO,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,CAAA;AACzD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"custom-plugin-loader.d.ts","sourceRoot":"","sources":["../../core/custom-plugin-loader.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"custom-plugin-loader.d.ts","sourceRoot":"","sources":["../../core/custom-plugin-loader.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAGzC,MAAM,WAAW,yBAAyB;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AA4CD;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,yBAAyB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CA+C7F;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACjC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,IAAI,EACrC,MAAM,CAAC,EAAE,MAAM,GAChB,MAAM,IAAI,CAwDZ"}
|
|
@@ -41,6 +41,7 @@ exports.loadCustomPlugins = loadCustomPlugins;
|
|
|
41
41
|
exports.watchPluginsDirectory = watchPluginsDirectory;
|
|
42
42
|
const fs = __importStar(require("fs"));
|
|
43
43
|
const path = __importStar(require("path"));
|
|
44
|
+
const plugin_source_1 = require("./plugin-source");
|
|
44
45
|
/**
|
|
45
46
|
* 加载单个插件文件
|
|
46
47
|
*/
|
|
@@ -102,6 +103,7 @@ async function loadCustomPlugins(options) {
|
|
|
102
103
|
const filePath = path.join(pluginsDir, file);
|
|
103
104
|
const plugin = await loadPluginFile(filePath, logger);
|
|
104
105
|
if (plugin) {
|
|
106
|
+
(0, plugin_source_1.markPluginSource)(plugin, { kind: 'custom', filename: file });
|
|
105
107
|
plugins.push(plugin);
|
|
106
108
|
if (logger) {
|
|
107
109
|
logger.info(`已加载插件: ${plugin.manifest.id} (${file})`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"custom-plugin-loader.js","sourceRoot":"","sources":["../../core/custom-plugin-loader.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"custom-plugin-loader.js","sourceRoot":"","sources":["../../core/custom-plugin-loader.ts"],"names":[],"mappings":"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"}
|
package/dist/core/h2-pool.d.ts
CHANGED
|
@@ -3,5 +3,6 @@ import type { ProxyResponse } from './types';
|
|
|
3
3
|
export declare const UPSTREAM_TIMEOUT_CODE = "UPSTREAM_TIMEOUT";
|
|
4
4
|
export declare function cleanHeadersForH2(headers: Record<string, any>): Record<string, any>;
|
|
5
5
|
export declare function __setH2SessionFactoryForTest(factory: ((origin: string, opts: http2.SecureClientSessionOptions) => http2.ClientHttp2Session) | null): void;
|
|
6
|
+
export declare function __setForceHttp1ForTest(value: boolean | null): void;
|
|
6
7
|
export declare function makeProxyRequest(target: string, method: string, headers: Record<string, any>, reqBody: Buffer): Promise<ProxyResponse>;
|
|
7
8
|
//# sourceMappingURL=h2-pool.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"h2-pool.d.ts","sourceRoot":"","sources":["../../core/h2-pool.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"h2-pool.d.ts","sourceRoot":"","sources":["../../core/h2-pool.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAyB5C,eAAO,MAAM,qBAAqB,qBAAqB,CAAA;AA2BvD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CASnF;AAKD,wBAAgB,4BAA4B,CACxC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,0BAA0B,KAAK,KAAK,CAAC,kBAAkB,CAAC,GAAG,IAAI,GACvG,IAAI,CAEN;AAKD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,GAAG,IAAI,CAElE;AAkKD,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAU5I"}
|
package/dist/core/h2-pool.js
CHANGED
|
@@ -39,6 +39,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
39
39
|
exports.UPSTREAM_TIMEOUT_CODE = void 0;
|
|
40
40
|
exports.cleanHeadersForH2 = cleanHeadersForH2;
|
|
41
41
|
exports.__setH2SessionFactoryForTest = __setH2SessionFactoryForTest;
|
|
42
|
+
exports.__setForceHttp1ForTest = __setForceHttp1ForTest;
|
|
42
43
|
exports.makeProxyRequest = makeProxyRequest;
|
|
43
44
|
const http = __importStar(require("http"));
|
|
44
45
|
const https = __importStar(require("https"));
|
|
@@ -48,10 +49,19 @@ const proxyDebug = (0, debug_1.default)('proxy');
|
|
|
48
49
|
const h2SessionPool = new Map();
|
|
49
50
|
const MAX_H2_SESSIONS = process.env.MEDDLE_MAX_H2_SESSIONS ? parseInt(process.env.MEDDLE_MAX_H2_SESSIONS) : 32;
|
|
50
51
|
const DEFAULT_UPSTREAM_REQUEST_TIMEOUT_MS = 60000;
|
|
52
|
+
// Shorter than H1: deno's http2 client can hang on empty-body responses; fallback
|
|
53
|
+
// to H1 should happen before a CORS / browser request looks "stuck" (#72).
|
|
54
|
+
const DEFAULT_H2_REQUEST_TIMEOUT_MS = 8000;
|
|
55
|
+
function parsePositiveMs(raw, fallback) {
|
|
56
|
+
const parsed = raw ? parseInt(raw, 10) : NaN;
|
|
57
|
+
return Number.isFinite(parsed) && parsed > 0 ? parsed : fallback;
|
|
58
|
+
}
|
|
51
59
|
function upstreamTimeoutMs() {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
60
|
+
return parsePositiveMs(process.env.MEDDLE_UPSTREAM_TIMEOUT_MS, DEFAULT_UPSTREAM_REQUEST_TIMEOUT_MS);
|
|
61
|
+
}
|
|
62
|
+
function h2RequestTimeoutMs() {
|
|
63
|
+
const h2 = parsePositiveMs(process.env.MEDDLE_H2_REQUEST_TIMEOUT_MS, DEFAULT_H2_REQUEST_TIMEOUT_MS);
|
|
64
|
+
return Math.min(h2, upstreamTimeoutMs());
|
|
55
65
|
}
|
|
56
66
|
exports.UPSTREAM_TIMEOUT_CODE = 'UPSTREAM_TIMEOUT';
|
|
57
67
|
function upstreamTimeoutError(target, timeoutMs) {
|
|
@@ -99,6 +109,21 @@ let sessionFactoryOverride = null;
|
|
|
99
109
|
function __setH2SessionFactoryForTest(factory) {
|
|
100
110
|
sessionFactoryOverride = factory;
|
|
101
111
|
}
|
|
112
|
+
// Deno's node:http2 client hangs on empty-body responses (204/HEAD/OPTIONS)
|
|
113
|
+
// regardless of method (#72, #74 follow-up). Binary builds must not use it.
|
|
114
|
+
let forceHttp1Override = null;
|
|
115
|
+
function __setForceHttp1ForTest(value) {
|
|
116
|
+
forceHttp1Override = value;
|
|
117
|
+
}
|
|
118
|
+
function isDenoRuntime() {
|
|
119
|
+
return typeof globalThis.Deno !== 'undefined'
|
|
120
|
+
|| typeof process.versions.deno === 'string';
|
|
121
|
+
}
|
|
122
|
+
function shouldForceHttp1() {
|
|
123
|
+
if (forceHttp1Override !== null)
|
|
124
|
+
return forceHttp1Override;
|
|
125
|
+
return isDenoRuntime();
|
|
126
|
+
}
|
|
102
127
|
function createH2Session(origin, opts) {
|
|
103
128
|
return sessionFactoryOverride ? sessionFactoryOverride(origin, opts) : http2.connect(origin, opts);
|
|
104
129
|
}
|
|
@@ -151,6 +176,13 @@ function getOrCreateH2Session(origin, servername) {
|
|
|
151
176
|
});
|
|
152
177
|
});
|
|
153
178
|
}
|
|
179
|
+
/** CORS preflight (OPTIONS) and HEAD typically have empty bodies. Deno's
|
|
180
|
+
* node:http2 client never emits `response`/`end` for those, so they must
|
|
181
|
+
* not go through proxyViaH2 (#72). */
|
|
182
|
+
function shouldSkipHttp2(method) {
|
|
183
|
+
const m = String(method || '').toUpperCase();
|
|
184
|
+
return m === 'OPTIONS' || m === 'HEAD';
|
|
185
|
+
}
|
|
154
186
|
function proxyViaH2(target, method, headers, reqBody) {
|
|
155
187
|
const url = new URL(target);
|
|
156
188
|
const origin = url.origin;
|
|
@@ -159,30 +191,54 @@ function proxyViaH2(target, method, headers, reqBody) {
|
|
|
159
191
|
const servername = (url.hostname !== originalHostname) ? originalHostname : undefined;
|
|
160
192
|
return getOrCreateH2Session(origin, servername).then(session => {
|
|
161
193
|
return new Promise((resolve, reject) => {
|
|
194
|
+
const h2Headers = cleanHeadersForH2(headers);
|
|
195
|
+
h2Headers[':method'] = method;
|
|
196
|
+
h2Headers[':path'] = url.pathname + url.search;
|
|
197
|
+
h2Headers[':authority'] = originalHost;
|
|
198
|
+
h2Headers[':scheme'] = url.protocol.replace(':', '');
|
|
199
|
+
let h2Stream;
|
|
162
200
|
try {
|
|
163
|
-
|
|
164
|
-
h2Headers[':method'] = method;
|
|
165
|
-
h2Headers[':path'] = url.pathname + url.search;
|
|
166
|
-
h2Headers[':authority'] = originalHost;
|
|
167
|
-
h2Headers[':scheme'] = url.protocol.replace(':', '');
|
|
168
|
-
const h2Stream = session.request(h2Headers);
|
|
169
|
-
h2Stream.on('response', (resHeaders) => {
|
|
170
|
-
const statusCode = Number(resHeaders[':status']);
|
|
171
|
-
const clean = {};
|
|
172
|
-
for (const [k, v] of Object.entries(resHeaders)) {
|
|
173
|
-
if (!k.startsWith(':'))
|
|
174
|
-
clean[k] = v;
|
|
175
|
-
}
|
|
176
|
-
resolve({ statusCode, statusMessage: '', headers: clean, stream: h2Stream, protocol: 'h2' });
|
|
177
|
-
});
|
|
178
|
-
h2Stream.on('error', reject);
|
|
179
|
-
if (reqBody && reqBody.length > 0)
|
|
180
|
-
h2Stream.write(reqBody);
|
|
181
|
-
h2Stream.end();
|
|
201
|
+
h2Stream = session.request(h2Headers);
|
|
182
202
|
}
|
|
183
203
|
catch (err) {
|
|
184
204
|
reject(err);
|
|
205
|
+
return;
|
|
185
206
|
}
|
|
207
|
+
const timeoutMs = h2RequestTimeoutMs();
|
|
208
|
+
let settled = false;
|
|
209
|
+
const settle = (fn) => {
|
|
210
|
+
if (settled)
|
|
211
|
+
return;
|
|
212
|
+
settled = true;
|
|
213
|
+
clearTimeout(timer);
|
|
214
|
+
fn();
|
|
215
|
+
};
|
|
216
|
+
const timer = setTimeout(() => {
|
|
217
|
+
settle(() => {
|
|
218
|
+
try {
|
|
219
|
+
h2Stream.close();
|
|
220
|
+
}
|
|
221
|
+
catch (_) { /* ignore */ }
|
|
222
|
+
try {
|
|
223
|
+
h2Stream.destroy();
|
|
224
|
+
}
|
|
225
|
+
catch (_) { /* ignore */ }
|
|
226
|
+
reject(upstreamTimeoutError(target, timeoutMs));
|
|
227
|
+
});
|
|
228
|
+
}, timeoutMs);
|
|
229
|
+
h2Stream.on('response', (resHeaders) => {
|
|
230
|
+
const statusCode = Number(resHeaders[':status']);
|
|
231
|
+
const clean = {};
|
|
232
|
+
for (const [k, v] of Object.entries(resHeaders)) {
|
|
233
|
+
if (!k.startsWith(':'))
|
|
234
|
+
clean[k] = v;
|
|
235
|
+
}
|
|
236
|
+
settle(() => resolve({ statusCode, statusMessage: '', headers: clean, stream: h2Stream, protocol: 'h2' }));
|
|
237
|
+
});
|
|
238
|
+
h2Stream.on('error', (err) => settle(() => reject(err)));
|
|
239
|
+
if (reqBody && reqBody.length > 0)
|
|
240
|
+
h2Stream.write(reqBody);
|
|
241
|
+
h2Stream.end();
|
|
186
242
|
});
|
|
187
243
|
});
|
|
188
244
|
}
|
|
@@ -219,7 +275,7 @@ function proxyViaH1(target, method, headers, reqBody) {
|
|
|
219
275
|
});
|
|
220
276
|
}
|
|
221
277
|
async function makeProxyRequest(target, method, headers, reqBody) {
|
|
222
|
-
if (target.startsWith('https')) {
|
|
278
|
+
if (target.startsWith('https') && !shouldSkipHttp2(method) && !shouldForceHttp1()) {
|
|
223
279
|
try {
|
|
224
280
|
return await proxyViaH2(target, method, headers, reqBody);
|
|
225
281
|
}
|
package/dist/core/h2-pool.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"h2-pool.js","sourceRoot":"","sources":["../../core/h2-pool.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"h2-pool.js","sourceRoot":"","sources":["../../core/h2-pool.ts"],"names":[],"mappings":"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"}
|