Merge pull request #940 from modelcontextprotocol/fweinberger/fix-stream-double-close
Fix ReadableStream controller double-close crash
This commit is contained in:
commit
6e4a52b273
1 changed files with 16 additions and 3 deletions
|
|
@ -241,18 +241,31 @@ const authMiddleware = (
|
||||||
* This is necessary for the EventSource polyfill which expects web streams
|
* This is necessary for the EventSource polyfill which expects web streams
|
||||||
*/
|
*/
|
||||||
const createWebReadableStream = (nodeStream: any): ReadableStream => {
|
const createWebReadableStream = (nodeStream: any): ReadableStream => {
|
||||||
|
let closed = false;
|
||||||
return new ReadableStream({
|
return new ReadableStream({
|
||||||
start(controller) {
|
start(controller) {
|
||||||
nodeStream.on("data", (chunk: any) => {
|
nodeStream.on("data", (chunk: any) => {
|
||||||
controller.enqueue(chunk);
|
if (!closed) {
|
||||||
|
controller.enqueue(chunk);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
nodeStream.on("end", () => {
|
nodeStream.on("end", () => {
|
||||||
controller.close();
|
if (!closed) {
|
||||||
|
closed = true;
|
||||||
|
controller.close();
|
||||||
|
}
|
||||||
});
|
});
|
||||||
nodeStream.on("error", (err: any) => {
|
nodeStream.on("error", (err: any) => {
|
||||||
controller.error(err);
|
if (!closed) {
|
||||||
|
closed = true;
|
||||||
|
controller.error(err);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
cancel() {
|
||||||
|
closed = true;
|
||||||
|
nodeStream.destroy();
|
||||||
|
},
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue