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
|
||||
*/
|
||||
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();
|
||||
},
|
||||
});
|
||||
};
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue