Merge pull request #940 from modelcontextprotocol/fweinberger/fix-stream-double-close

Fix ReadableStream controller double-close crash
This commit is contained in:
Felix Weinberger 2025-11-28 19:41:14 +00:00 • committed by GitHub
commit 6e4a52b273
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -241,18 +241,31 @@ const authMiddleware = (
* This is necessary for the EventSource polyfill which expects web streams
*/
const createWebReadableStream = (nodeStream: any): ReadableStream => {
let closed = false;
return new ReadableStream({
start(controller) {
nodeStream.on("data", (chunk: any) => {
controller.enqueue(chunk);
if (!closed) {
controller.enqueue(chunk);
}
});
nodeStream.on("end", () => {
controller.close();
if (!closed) {
closed = true;
controller.close();
}
});
nodeStream.on("error", (err: any) => {
controller.error(err);
if (!closed) {
closed = true;
controller.error(err);
}
});
},
cancel() {
closed = true;
nodeStream.destroy();
},
});
};