|
@@ -25,27 +25,34 @@ export function originalOutboundIndex(rows: OutboundRow[], positionalIndex: numb
|
|
|
|
|
|
|
|
export function outboundAddresses(o: OutboundRow): string[] {
|
|
export function outboundAddresses(o: OutboundRow): string[] {
|
|
|
const settings = o.settings as Record<string, unknown> | undefined;
|
|
const settings = o.settings as Record<string, unknown> | undefined;
|
|
|
- switch (o.protocol) {
|
|
|
|
|
- case Protocols.VMess: {
|
|
|
|
|
|
|
+ switch (true) {
|
|
|
|
|
+ case isOutboundProtocol(o, Protocols.VMess): {
|
|
|
const serverObj = settings?.vnext as Array<{ address: string; port: number }> | undefined;
|
|
const serverObj = settings?.vnext as Array<{ address: string; port: number }> | undefined;
|
|
|
return serverObj ? serverObj.map((s) => `${s.address}:${s.port}`) : [];
|
|
return serverObj ? serverObj.map((s) => `${s.address}:${s.port}`) : [];
|
|
|
}
|
|
}
|
|
|
- case Protocols.VLESS:
|
|
|
|
|
- return [`${settings?.address || ''}:${settings?.port || ''}`];
|
|
|
|
|
- case Protocols.HTTP:
|
|
|
|
|
- case Protocols.Socks:
|
|
|
|
|
- case Protocols.Shadowsocks:
|
|
|
|
|
- case Protocols.Trojan: {
|
|
|
|
|
|
|
+ case isOutboundProtocol(o, Protocols.VLESS):
|
|
|
|
|
+ case isOutboundProtocol(o, Protocols.Hysteria): {
|
|
|
|
|
+ // A vless row carries either shape, and the probe reads both.
|
|
|
|
|
+ const vnext = settings?.vnext as Array<{ address?: string; port?: number }> | undefined;
|
|
|
|
|
+ const addr = vnext?.[0]?.address || (settings?.address as string | undefined);
|
|
|
|
|
+ const port = vnext?.[0]?.port || (settings?.port as string | number | undefined);
|
|
|
|
|
+ return addr || port ? [`${addr || ''}:${port || ''}`] : [];
|
|
|
|
|
+ }
|
|
|
|
|
+ case isOutboundProtocol(o, Protocols.HTTP):
|
|
|
|
|
+ case isOutboundProtocol(o, Protocols.Socks):
|
|
|
|
|
+ case isOutboundProtocol(o, Protocols.Shadowsocks):
|
|
|
|
|
+ case isOutboundProtocol(o, Protocols.Trojan): {
|
|
|
const serverObj = settings?.servers as Array<{ address: string; port: number }> | undefined;
|
|
const serverObj = settings?.servers as Array<{ address: string; port: number }> | undefined;
|
|
|
return serverObj ? serverObj.map((s) => `${s.address}:${s.port}`) : [];
|
|
return serverObj ? serverObj.map((s) => `${s.address}:${s.port}`) : [];
|
|
|
}
|
|
}
|
|
|
- case Protocols.DNS: {
|
|
|
|
|
|
|
+ case isOutboundProtocol(o, Protocols.DNS): {
|
|
|
const addr = (settings?.rewriteAddress as string) || (settings?.address as string) || '';
|
|
const addr = (settings?.rewriteAddress as string) || (settings?.address as string) || '';
|
|
|
const port =
|
|
const port =
|
|
|
(settings?.rewritePort as string | number) || (settings?.port as string | number) || '';
|
|
(settings?.rewritePort as string | number) || (settings?.port as string | number) || '';
|
|
|
return addr || port ? [`${addr}:${port}`] : [];
|
|
return addr || port ? [`${addr}:${port}`] : [];
|
|
|
}
|
|
}
|
|
|
- case Protocols.Wireguard:
|
|
|
|
|
|
|
+ case isOutboundProtocol(o, Protocols.Wireguard):
|
|
|
|
|
+ case isOutboundProtocol(o, Protocols.AmneziaWG):
|
|
|
return ((settings?.peers as Array<{ endpoint?: string }>) || [])
|
|
return ((settings?.peers as Array<{ endpoint?: string }>) || [])
|
|
|
.map((p) => p.endpoint || '')
|
|
.map((p) => p.endpoint || '')
|
|
|
.filter(Boolean);
|
|
.filter(Boolean);
|