package domain import ( "errors" "net/url" "strings" ) // NormalizeOpenAICompatibleBaseEndpoint trims and validates a source-neutral // OpenAI-compatible provider base endpoint. func NormalizeOpenAICompatibleBaseEndpoint(endpoint string) (string, error) { endpoint = strings.TrimSpace(endpoint) if endpoint == "" { return "", errors.New("endpoint must not be blank") } if strings.Contains(endpoint, "#") { return "", errors.New("endpoint must not contain a fragment") } parsed, err := url.Parse(endpoint) if err != nil { return "", errors.New("endpoint must be a valid URL") } parsed.Scheme = strings.ToLower(parsed.Scheme) if parsed.Scheme != "http" && parsed.Scheme != "https" { return "", errors.New("endpoint must use http or https") } if !parsed.IsAbs() || parsed.Hostname() == "" { return "", errors.New("endpoint must be absolute and include a host") } if parsed.User != nil { return "", errors.New("endpoint must not contain user information") } if parsed.RawQuery != "" || parsed.ForceQuery { return "", errors.New("endpoint must not contain a query string") } return parsed.String(), nil }