package helper import ( "strings" "github.com/QuantumNous/new-api/common" "github.com/QuantumNous/new-api/pkg/billingexpr" relaycommon "github.com/QuantumNous/new-api/relay/common" "github.com/gin-gonic/gin" ) func ResolveIncomingBillingExprRequestInput(c *gin.Context, info *relaycommon.RelayInfo) (billingexpr.RequestInput, error) { input := billingexpr.RequestInput{} if info != nil { input.Headers = cloneStringMap(info.RequestHeaders) } bodyBytes, err := readIncomingBillingExprBody(c) if err != nil { return billingexpr.RequestInput{}, err } input.Body = bodyBytes return input, nil } func readIncomingBillingExprBody(c *gin.Context) ([]byte, error) { if c == nil || c.Request == nil || !isJSONContentType(c.Request.Header.Get("Content-Type")) { return nil, nil } storage, err := common.GetBodyStorage(c) if err != nil { return nil, err } return storage.Bytes() } func isJSONContentType(contentType string) bool { contentType = strings.ToLower(strings.TrimSpace(contentType)) return strings.HasPrefix(contentType, "application/json") } func cloneStringMap(src map[string]string) map[string]string { if len(src) == 0 { return map[string]string{} } dst := make(map[string]string, len(src)) for key, value := range src { if strings.TrimSpace(key) == "" { continue } dst[key] = value } return dst }