去掉转换入口,加测延迟,改掉刷新时丢状态的毛病

最要紧的是第三条:之前每次改完都会先切到「读取中」,页面被拆掉重建,
选中的那一路入站随之丢失,改个设置还得重新找回原来的位置。现在只有首次加载显示占位,
之后都是原地更新。切换策略组还做成了乐观更新——那一步不写配置文件,
没必要让点击等一个往返,真失败了随后的刷新会纠正回来。

测延迟按钮让内核并发测整个策略组。测不通是关于线路的结论而不是 Patchbay 出了问题,
所以全部超时用中性提示,不弹红框。
This commit is contained in:
im0o
2026-08-10 12:53:56 +08:00
parent 0062a261f7
commit 5cdc183190
5 changed files with 114 additions and 77 deletions
+7 -1
View File
@@ -16,6 +16,12 @@ import { tokenFromRequest, tokenMatches } from './auth.ts'
import type { ConfigObject } from '../vendor/config-editor/index.ts'
import type { Env } from './env.ts'
/**
* 延迟测试。名字里可能有斜杠和中文,所以按前缀匹配而不是列进上面那个精确白名单。
* 它是 GET 但会真的发起网络连接,属于「读」里比较重的一类,单独列出来提醒这一点。
*/
const DELAY_PATH = /^\/(proxies|group)\/.+\/delay$/
/** 允许透传的管理接口路径。白名单而不是黑名单——多开一个口子要有意为之。 */
const READABLE_KERNEL_PATHS = new Set([
'/version',
@@ -118,7 +124,7 @@ export function createRouter(env: Env, token: string) {
if (path.startsWith('/api/kernel/') && req.method === 'GET') {
const target = path.slice('/api/kernel'.length)
if (!READABLE_KERNEL_PATHS.has(target)) {
if (!READABLE_KERNEL_PATHS.has(target) && !DELAY_PATH.test(target)) {
return json({ error: `不允许透传这个路径:${target}` }, 403)
}
const upstream = await proxyGet(env, target + url.search)