Fix compressed resume proxy responses

This commit is contained in:
Sai-karthik
2026-07-13 06:52:59 +00:00
parent fdf4f6468d
commit e444d1be15
+18 -2
View File
@@ -396,6 +396,17 @@ function parseJsonBody(body: ArrayBuffer | undefined, headers: Headers): JsonObj
} }
} }
function decodedProxyHeaders(headers: Headers) {
const forwarded = new Headers(headers);
// Node fetch transparently decodes gzip/br bodies but retains the upstream
// encoding and byte-length headers. Forwarding those stale headers makes the
// next proxy/browser decode an already-decoded body and fail.
forwarded.delete("content-encoding");
forwarded.delete("content-length");
forwarded.delete("transfer-encoding");
return forwarded;
}
async function proxyResumeRequest(req: Request, rest: string, userId: string) { async function proxyResumeRequest(req: Request, rest: string, userId: string) {
const incoming = new URL(req.url); const incoming = new URL(req.url);
const normalizedRest = rest const normalizedRest = rest
@@ -419,6 +430,7 @@ async function proxyResumeRequest(req: Request, rest: string, userId: string) {
headers.delete("cookie"); headers.delete("cookie");
headers.set("authorization", `Bearer ${config.a2aAllowedKey}`); headers.set("authorization", `Bearer ${config.a2aAllowedKey}`);
headers.set("x-growqr-user", userId); headers.set("x-growqr-user", userId);
headers.set("accept-encoding", "identity");
const method = req.method.toUpperCase(); const method = req.method.toUpperCase();
const body = ["GET", "HEAD"].includes(method) ? undefined : await req.arrayBuffer(); const body = ["GET", "HEAD"].includes(method) ? undefined : await req.arrayBuffer();
@@ -436,7 +448,11 @@ async function proxyResumeRequest(req: Request, rest: string, userId: string) {
}); });
if (method === "GET" || method === "HEAD") { if (method === "GET" || method === "HEAD") {
return new Response(res.body, { status: res.status, statusText: res.statusText, headers: res.headers }); return new Response(res.body, {
status: res.status,
statusText: res.statusText,
headers: decodedProxyHeaders(res.headers),
});
} }
const responseBuffer = await res.arrayBuffer(); const responseBuffer = await res.arrayBuffer();
@@ -461,7 +477,7 @@ async function proxyResumeRequest(req: Request, rest: string, userId: string) {
return new Response(responseBuffer, { return new Response(responseBuffer, {
status: res.status, status: res.status,
statusText: res.statusText, statusText: res.statusText,
headers: res.headers, headers: decodedProxyHeaders(res.headers),
}); });
} }