package mihomoapi var leafOutbounds = map[string]bool{ "DIRECT": true, "REJECT": true, "REJECT-DROP": true, } // ResolveLeafOutbound returns the actual proxy node from a Mihomo chains path. // Policy groups are appended after the leaf dial, so the last chain entry is often a group name. func ResolveLeafOutbound(chains []string, policyGroups map[string]bool) string { if len(chains) == 0 { return "" } for i := len(chains) - 1; i >= 0; i-- { name := chains[i] if leafOutbounds[name] { return name } if policyGroups != nil && policyGroups[name] { continue } return name } return chains[len(chains)-1] } func ChainStringsFromAny(raw any) []string { arr, ok := raw.([]any) if !ok { return nil } out := make([]string, 0, len(arr)) for _, item := range arr { if s, ok := item.(string); ok && s != "" { out = append(out, s) } } return out }