订阅线路的类型、延迟和测速都改走 provider 接口
404 不是 bug。内核的 /proxies 只返回全局名字表(内置出站、自有线路、策略组),
订阅线路不在里面——跟「订阅线路不能被入站直接引用」是同一条约束,我没想到它同样
适用于运行时接口。所以 /proxies/{订阅线路}/delay 一律 404,而订阅线路的卡片也一直
没有协议和延迟,因为那些数据同样查不到。
现在运行时状态从两处合成:/proxies 给内置出站和策略组,/providers/proxies 给订阅线路
(它返回的线路本来就带完整的协议和延迟历史)。测速按线路归属选接口,订阅线路走
{订阅}/{线路}/healthcheck。实测该接口对同一条线路返回 200 和 325 毫秒。
This commit is contained in:
+22
-15
@@ -76,6 +76,8 @@ export interface ApplyFailure {
|
||||
}
|
||||
|
||||
export interface ProxyInfo {
|
||||
/** 出站的名字。/proxies 用键名标识,provider 里的线路则带在对象上 */
|
||||
name: string
|
||||
/** 协议类型(Vmess、Vless…)或策略组类型(Selector、URLTest…) */
|
||||
type: string
|
||||
/** 策略组当前选中的成员。不是策略组就没有这个字段 */
|
||||
@@ -137,23 +139,28 @@ export const api = {
|
||||
name: member,
|
||||
}),
|
||||
|
||||
/** 测一条线路的延迟。返回的是这一次的结果,同时也会被记进内核的历史里。 */
|
||||
testLine: (name: string, url = TEST_URL, timeout = 5000) =>
|
||||
request<{ delay: number }>(
|
||||
'GET',
|
||||
`/api/kernel/proxies/${encodeURIComponent(name)}/delay?url=${encodeURIComponent(url)}&timeout=${String(timeout)}`,
|
||||
),
|
||||
/**
|
||||
* 测一条出站的延迟。
|
||||
*
|
||||
* 走哪个接口取决于它在不在内核的全局名字表里:策略组和自有线路在表里,用 /proxies;
|
||||
* 订阅线路不在表里(那正是它们无法被入站直接引用的原因),只能从所属订阅进去测。
|
||||
*/
|
||||
testLine: (name: string, provider?: string, timeout = 5000) => {
|
||||
const q = `url=${encodeURIComponent(TEST_URL)}&timeout=${String(timeout)}`
|
||||
const path = provider
|
||||
? `/api/kernel/providers/proxies/${encodeURIComponent(provider)}/${encodeURIComponent(name)}/healthcheck?${q}`
|
||||
: `/api/kernel/proxies/${encodeURIComponent(name)}/delay?${q}`
|
||||
return request<{ delay: number }>('GET', path)
|
||||
},
|
||||
|
||||
/** 测一整个策略组,内核会并发测所有成员。返回每个成员的延迟。 */
|
||||
testGroup: (group: string, url = TEST_URL, timeout = 5000) =>
|
||||
request<Record<string, number>>(
|
||||
'GET',
|
||||
`/api/kernel/group/${encodeURIComponent(group)}/delay?url=${encodeURIComponent(url)}&timeout=${String(timeout)}`,
|
||||
),
|
||||
|
||||
/** 订阅里当前有哪些线路。配置文件给不出这个答案,只能问运行中的内核。 */
|
||||
/**
|
||||
* 订阅及其线路。配置文件里只有订阅地址,有哪些线路只有运行中的内核知道。
|
||||
*
|
||||
* 返回的线路带完整的运行时信息(协议、延迟历史),因为这些线路不在 /proxies 那张
|
||||
* 全局名字表里,这是拿到它们类型和延迟的唯一途径。
|
||||
*/
|
||||
providers: () =>
|
||||
request<{ providers: Record<string, { vehicleType: string; proxies: { name: string }[] }> }>(
|
||||
request<{ providers: Record<string, { vehicleType: string; proxies: ProxyInfo[] }> }>(
|
||||
'GET',
|
||||
'/api/kernel/providers/proxies',
|
||||
),
|
||||
|
||||
Reference in New Issue
Block a user