diff --git a/backend/internal/service/grok_media.go b/backend/internal/service/grok_media.go index 36bd80f72..359ae32df 100644 --- a/backend/internal/service/grok_media.go +++ b/backend/internal/service/grok_media.go @@ -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 diff --git a/backend/internal/service/grok_media_content_test.go b/backend/internal/service/grok_media_content_test.go index 839bc01b6..45bd2b789 100644 --- a/backend/internal/service/grok_media_content_test.go +++ b/backend/internal/service/grok_media_content_test.go @@ -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()) +}