first commit
This commit is contained in:
66
core/schemas/realtime_client_secrets.go
Normal file
66
core/schemas/realtime_client_secrets.go
Normal file
@@ -0,0 +1,66 @@
|
||||
package schemas
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// ParseRealtimeClientSecretBody parses a realtime client-secret request body
|
||||
// into a mutable raw JSON map while preserving unknown fields.
|
||||
func ParseRealtimeClientSecretBody(raw json.RawMessage) (map[string]json.RawMessage, *BifrostError) {
|
||||
var root map[string]json.RawMessage
|
||||
if err := Unmarshal(raw, &root); err != nil {
|
||||
return nil, NewRealtimeClientSecretBodyError(400, "invalid_request_error", "invalid JSON body", err)
|
||||
}
|
||||
return root, nil
|
||||
}
|
||||
|
||||
// ExtractRealtimeClientSecretModel extracts the model from either session.model
|
||||
// or the legacy top-level model field.
|
||||
func ExtractRealtimeClientSecretModel(root map[string]json.RawMessage) (string, *BifrostError) {
|
||||
if sessionJSON, ok := root["session"]; ok && len(sessionJSON) > 0 && !bytes.Equal(sessionJSON, []byte("null")) {
|
||||
var session map[string]json.RawMessage
|
||||
if err := Unmarshal(sessionJSON, &session); err != nil {
|
||||
return "", NewRealtimeClientSecretBodyError(400, "invalid_request_error", "session must be an object", err)
|
||||
}
|
||||
if modelJSON, ok := session["model"]; ok {
|
||||
var sessionModel string
|
||||
if err := Unmarshal(modelJSON, &sessionModel); err != nil {
|
||||
return "", NewRealtimeClientSecretBodyError(400, "invalid_request_error", "session.model must be a string", err)
|
||||
}
|
||||
if strings.TrimSpace(sessionModel) != "" {
|
||||
return strings.TrimSpace(sessionModel), nil
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if modelJSON, ok := root["model"]; ok {
|
||||
var model string
|
||||
if err := Unmarshal(modelJSON, &model); err != nil {
|
||||
return "", NewRealtimeClientSecretBodyError(400, "invalid_request_error", "model must be a string", err)
|
||||
}
|
||||
if strings.TrimSpace(model) != "" {
|
||||
return strings.TrimSpace(model), nil
|
||||
}
|
||||
}
|
||||
|
||||
return "", NewRealtimeClientSecretBodyError(400, "invalid_request_error", "session.model or model is required", nil)
|
||||
}
|
||||
|
||||
// NewRealtimeClientSecretBodyError builds a standard invalid-request style error
|
||||
// for HTTP realtime client-secret request parsing/validation.
|
||||
func NewRealtimeClientSecretBodyError(status int, errorType, message string, err error) *BifrostError {
|
||||
return &BifrostError{
|
||||
IsBifrostError: false,
|
||||
StatusCode: Ptr(status),
|
||||
Error: &ErrorField{
|
||||
Type: Ptr(errorType),
|
||||
Message: message,
|
||||
Error: err,
|
||||
},
|
||||
ExtraFields: BifrostErrorExtraFields{
|
||||
RequestType: RealtimeRequest,
|
||||
},
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user