diff --git a/bun.lock b/bun.lock index 693f8639..625bb185 100644 --- a/bun.lock +++ b/bun.lock @@ -303,6 +303,7 @@ "typescript-eslint": "^8.39.1", "vite": "^7.1.2", "vite-plugin-pwa": "^1.0.3", + "workbox-window": "^7.4.0", }, }, }, diff --git a/packages/web/package.json b/packages/web/package.json index cf17edce..10903d92 100644 --- a/packages/web/package.json +++ b/packages/web/package.json @@ -85,7 +85,8 @@ "typescript": "~5.8.3", "typescript-eslint": "^8.39.1", "vite": "^7.1.2", - "vite-plugin-pwa": "^1.0.3" + "vite-plugin-pwa": "^1.0.3", + "workbox-window": "^7.4.0" }, "files": [ "dist", diff --git a/packages/web/server/index.js b/packages/web/server/index.js index bb50785e..e80c39c8 100644 --- a/packages/web/server/index.js +++ b/packages/web/server/index.js @@ -1339,6 +1339,7 @@ const startGlobalEventWatcher = async () => { while (!signal.aborted) { attempt += 1; let upstream; + let reader; try { const url = buildOpenCodeUrl('/global/event', ''); upstream = await fetch(url, { @@ -1357,7 +1358,7 @@ const startGlobalEventWatcher = async () => { console.log('[PushWatcher] connected'); const decoder = new TextDecoder(); - const reader = upstream.body.getReader(); + reader = upstream.body.getReader(); let buffer = ''; while (!signal.aborted) { @@ -1383,7 +1384,12 @@ const startGlobalEventWatcher = async () => { console.warn('[PushWatcher] disconnected', error?.message ?? error); } finally { try { - upstream?.body?.cancel?.(); + if (reader) { + await reader.cancel(); + reader.releaseLock(); + } else if (upstream?.body && !upstream.body.locked) { + await upstream.body.cancel(); + } } catch { // ignore }