| 196 | } |
| 197 | |
| 198 | func AddSortIPAddressList(vm *goja.Runtime) error { |
| 199 | return vm.GlobalObject().Set("sortIpAddressList", func(call goja.FunctionCall) goja.Value { |
| 200 | if len(call.Arguments) != 1 { |
| 201 | panic(vm.NewTypeError("sortIpAddressList expects exactly 1 argument")) |
| 202 | } |
| 203 | addrParts := strings.Split(call.Argument(0).String(), ";") |
| 204 | addrs := make([]netip.Addr, 0, len(addrParts)) |
| 205 | for _, part := range addrParts { |
| 206 | addr, err := netip.ParseAddr(part) |
| 207 | if err != nil { |
| 208 | return vm.ToValue("") |
| 209 | } |
| 210 | addrs = append(addrs, addr) |
| 211 | } |
| 212 | slices.SortFunc(addrs, netipAddrCmp) |
| 213 | res := mapSlice(addrs, func(a netip.Addr) string { return a.String() }) |
| 214 | return vm.ToValue(strings.Join(res, ";")) |
| 215 | }) |
| 216 | } |
| 217 | |
| 218 | func dnsResolveEx(host string) []netip.Addr { |
| 219 | ctx, cl := context.WithTimeout(context.Background(), 5*time.Second) |