Request with ReadableStream body causes 'expected non-null body source' assertion failure in undici 7.x
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Aptitud para principiantes
- 48/100
- Tipo de issue
- Error
- Claridad
- Bastante claro
- Estado de actividad
- Tranquilo
- Stack tecnológico
- javascript, node.js
Línea de trabajo
Empieza ejecutando la reproducción proporcionada de Request y ReadableStream; después, inspecciona la assertion en lib/web/fetch/index.js y el flujo de Request/fetch en el que entra. Compara el caso del stream con el caso de Uint8Array y determina si la assertion es intencionada. Se considera terminado cuando el comportamiento o el patrón de middleware recomendado está establecido, con cobertura de regresión si está justificado realizar un cambio en el código.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Environment
- Node.js: v24.14.0 (undici 7.21.0)
- Platform: macOS 26.4 (Apple Silicon)
Description
In undici 7.x, creating a Request with a ReadableStream body causes an assertion failure:
Error: expected non-null body source
This is a breaking change from undici 6.x (Node 22 and earlier) where this worked fine.
Reproduction
const body = new TextEncoder().encode(JSON.stringify({ test: true }));
// Create original Request with Uint8Array body
const originalReq = new Request('https://example.com', {
method: 'POST',
body,
headers: { 'Content-Type': 'application/json' }
});
// Read the body as ReadableStream
const bodyStream = originalReq.body;
// Create new Request from ReadableStream (common pattern in middleware/proxies)
const newReq = new Request(originalReq.url, {
method: originalReq.method,
headers: originalReq.headers,
body: bodyStream,
duplex: 'half',
});
// Try to fetch with the new request
await fetch(newReq);
// → Error: expected non-null body source
Root Cause
In undici/lib/web/fetch/index.js, there's an assertion:
if (request.body != null) {
assert(request.body.source != null)
request.body = safelyExtractBody(request.body.source)[0]
}
When a Request is created with a ReadableStream body (instead of Uint8Array, string, etc.), the body.source property is null, causing the assertion to fail.
Impact
This breaks legitimate use cases:
- Middleware that re-creates requests (e.g., Next.js's fetch patching, proxies)
- Libraries that create intermediate
Requestobjects (e.g.,@atproto-labs/fetch-nodefor SSRF protection)
Expected Behavior
Creating a Request with a ReadableStream body should work, as it did in undici 6.x (Node 22).
Workaround
Downgrade to Node.js 22 (undici 6.x) or pre-read the body as ArrayBuffer before creating the new Request.
Question
Is this strict assertion intentional? If so, what's the recommended pattern for middleware that needs to re-create Request objects?
- Lenguaje dominante
- JavaScript
- Estrellas
- 7.7k
- Forks
- 905
- Merge medio
- 2 d 15 h
- PR fusionados (30 d)
- 97
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de nodejs/undici
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 67/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
nodejs/undici#5835 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
Los mantenedores suelen responder en 1 día
-
Default fetch timeout too shortAbiertoenhancement good first issue
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
nodejs/undici#1373 · 20 comentarios · 15 reacciones ·
Los mantenedores suelen responder en 1 día
Todos los issues de nodejs/undici
Issues similares
-
Add: Arena Sport 1 (Serbia) FeedAbiertocheck:failed feeds:add
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
iptv-org/database#36278 · 1 comentario ·
Los mantenedores suelen responder en 3 días
-
fix
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
idean3885/claude-ops-agent#577 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100
Los mantenedores suelen responder en 7 días
-
[quality] e2e coverage converter's four fail-closed integrity guards have zero test coverageAbiertoagent/quality hive/hosted-available-lke648397-260827-5n31 quality testing
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100
Los mantenedores suelen responder en 1 día
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
notionnext-org/NotionNext#4544 ·
Los mantenedores suelen responder en 1 día