补上真正日常要点的那个动作:切换策略组当前选中谁
之前的面板只做了「这个入站指向哪个出站」,那是改配置文件。但 metacubexd 里点一条线路
改的根本不是入站,是策略组的当前选中——调 PUT /proxies/{组},不写文件、立刻生效。
mixed-port 走规则表,末尾 MATCH,PROXY 把流量交给 PROXY 组,所以换那个组的选中就等于
换了这个端口的出口。这是每天都要点的动作,之前整个漏了。
面板顶部现在显示完整链条(PROXY → AUTO → 某条线路),并让人在最后一个策略组上换选中。
只显示第一层等于没回答「这个端口现在走哪条线」。
透传的白名单里为此开了唯一一个写操作,单独一条路由而不是放开整个转发。
This commit is contained in:
@@ -95,6 +95,30 @@ export async function reloadConfig(env: Env, configPath: string): Promise<Valida
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 切换某个策略组当前选中哪个成员。
|
||||
*
|
||||
* 这是运行时状态,不写配置文件——所以不走 config-store 那条保护链路,也不需要备份和还原。
|
||||
* 内核重启后会不会记住,取决于配置里的 profile.store-selected。
|
||||
*/
|
||||
export async function selectProxy(
|
||||
env: Env,
|
||||
group: string,
|
||||
member: string,
|
||||
): Promise<ValidateResult> {
|
||||
try {
|
||||
const res = await callApi(env, `/proxies/${encodeURIComponent(group)}`, {
|
||||
method: 'PUT',
|
||||
body: JSON.stringify({ name: member }),
|
||||
signal: AbortSignal.timeout(10_000),
|
||||
})
|
||||
if (res.ok) return { ok: true, message: '' }
|
||||
return { ok: false, message: (await res.text()) || `管理接口返回 ${String(res.status)}` }
|
||||
} catch (error) {
|
||||
return { ok: false, message: `连不上管理接口:${String(error)}` }
|
||||
}
|
||||
}
|
||||
|
||||
/** 透传一个管理接口的 GET 请求,用于运行时数据(线路、连接、日志等)。 */
|
||||
export async function proxyGet(env: Env, path: string): Promise<Response> {
|
||||
return callApi(env, path, { signal: AbortSignal.timeout(15_000) })
|
||||
|
||||
Reference in New Issue
Block a user