fix(grok): proxy signed video status URLs
This commit is contained in:
@@ -845,7 +845,11 @@ func rewriteGrokMediaVideoContentURLs(body []byte, requestID, proxyURL string) [
|
||||
if err := decoder.Decode(&value); err != nil {
|
||||
return body
|
||||
}
|
||||
if !rewriteGrokMediaVideoContentURLValue(&value, requestID, proxyURL) {
|
||||
changed := rewriteGrokMediaKnownVideoURL(&value, proxyURL)
|
||||
if rewriteGrokMediaVideoContentURLValue(&value, requestID, proxyURL) {
|
||||
changed = true
|
||||
}
|
||||
if !changed {
|
||||
return body
|
||||
}
|
||||
rewritten, err := json.Marshal(value)
|
||||
@@ -855,6 +859,26 @@ func rewriteGrokMediaVideoContentURLs(body []byte, requestID, proxyURL string) [
|
||||
return rewritten
|
||||
}
|
||||
|
||||
func rewriteGrokMediaKnownVideoURL(value *any, proxyURL string) bool {
|
||||
if value == nil {
|
||||
return false
|
||||
}
|
||||
root, ok := (*value).(map[string]any)
|
||||
if !ok {
|
||||
return false
|
||||
}
|
||||
video, ok := root["video"].(map[string]any)
|
||||
if !ok {
|
||||
return false
|
||||
}
|
||||
rawURL, ok := video["url"].(string)
|
||||
if !ok || strings.TrimSpace(rawURL) == "" {
|
||||
return false
|
||||
}
|
||||
video["url"] = proxyURL
|
||||
return true
|
||||
}
|
||||
|
||||
func rewriteGrokMediaVideoContentURLValue(value *any, requestID, proxyURL string) bool {
|
||||
if value == nil {
|
||||
return false
|
||||
|
||||
@@ -193,3 +193,13 @@ func TestRewriteGrokMediaVideoContentURLsPreservesOtherIDsAndHandlesNestedEscape
|
||||
require.Equal(t, "/v1/videos/task%2Fone/content", gjson.GetBytes(rewritten, "nested.0.url").String())
|
||||
require.Equal(t, "https://relay.example/v1/videos/task-two/content", gjson.GetBytes(rewritten, "nested.1.url").String())
|
||||
}
|
||||
|
||||
func TestRewriteGrokMediaVideoContentURLsRewritesSignedVideoURL(t *testing.T) {
|
||||
body := []byte(`{"status":"done","video":{"url":"https://vidgen.x.ai/signed-token/xai-video-request-1.mp4","duration":8}}`)
|
||||
|
||||
rewritten := rewriteGrokMediaVideoContentURLs(body, "request-1", "/v1/videos/request-1/content")
|
||||
|
||||
require.Equal(t, "/v1/videos/request-1/content", gjson.GetBytes(rewritten, "video.url").String())
|
||||
require.Equal(t, "8", gjson.GetBytes(rewritten, "video.duration").String())
|
||||
require.Equal(t, "done", gjson.GetBytes(rewritten, "status").String())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user