From 6b3bff48f07a688129d2ad42b14512edc5038e8e Mon Sep 17 00:00:00 2001 From: Benjamin Admin Date: Sun, 26 Apr 2026 23:33:57 +0200 Subject: [PATCH] Fix: Proxy uses arrayBuffer for audio/image responses (not text) Binary data (MP3 audio) was corrupted by resp.text(). Now detects content-type and uses arrayBuffer() for audio/* and image/* responses. Co-Authored-By: Claude Opus 4.6 (1M context) --- studio-v2/app/api/vocabulary/[...path]/route.ts | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/studio-v2/app/api/vocabulary/[...path]/route.ts b/studio-v2/app/api/vocabulary/[...path]/route.ts index e8ecec3..83c6a1f 100644 --- a/studio-v2/app/api/vocabulary/[...path]/route.ts +++ b/studio-v2/app/api/vocabulary/[...path]/route.ts @@ -20,10 +20,21 @@ async function proxyRequest( fetchOptions.body = await request.text() } const resp = await fetch(url, fetchOptions) + const contentType = resp.headers.get('Content-Type') || 'application/json' + + // Binary responses (audio, images) must use arrayBuffer, not text + if (contentType.startsWith('audio') || contentType.startsWith('image')) { + const buffer = await resp.arrayBuffer() + return new NextResponse(buffer, { + status: resp.status, + headers: { 'Content-Type': contentType }, + }) + } + const data = await resp.text() return new NextResponse(data, { status: resp.status, - headers: { 'Content-Type': resp.headers.get('Content-Type') || 'application/json' }, + headers: { 'Content-Type': contentType }, }) } catch (e) { return NextResponse.json({ error: String(e) }, { status: 502 })