fix(app): reconnect event stream on disconnect

This commit is contained in:
Adam
2026-02-12 20:20:24 -06:00
parent fb7b2f6b4d
commit dd296f7033

View File

@@ -46,6 +46,7 @@ export const { use: useGlobalSDK, provider: GlobalSDKProvider } = createSimpleCo
type Queued = { directory: string; payload: Event } type Queued = { directory: string; payload: Event }
const FLUSH_FRAME_MS = 16 const FLUSH_FRAME_MS = 16
const STREAM_YIELD_MS = 8 const STREAM_YIELD_MS = 8
const RECONNECT_DELAY_MS = 250
let queue: Queued[] = [] let queue: Queued[] = []
let buffer: Queued[] = [] let buffer: Queued[] = []
@@ -91,8 +92,11 @@ export const { use: useGlobalSDK, provider: GlobalSDKProvider } = createSimpleCo
} }
let streamErrorLogged = false let streamErrorLogged = false
const wait = (ms: number) => new Promise<void>((resolve) => setTimeout(resolve, ms))
void (async () => { void (async () => {
while (!abort.signal.aborted) {
try {
const events = await eventSdk.global.event({ const events = await eventSdk.global.event({
onSseError: (error) => { onSseError: (error) => {
if (streamErrorLogged) return if (streamErrorLogged) return
@@ -106,6 +110,7 @@ export const { use: useGlobalSDK, provider: GlobalSDKProvider } = createSimpleCo
}) })
let yielded = Date.now() let yielded = Date.now()
for await (const event of events.stream) { for await (const event of events.stream) {
streamErrorLogged = false
const directory = event.directory ?? "global" const directory = event.directory ?? "global"
const payload = event.payload const payload = event.payload
const k = key(directory, payload) const k = key(directory, payload)
@@ -122,19 +127,23 @@ export const { use: useGlobalSDK, provider: GlobalSDKProvider } = createSimpleCo
if (Date.now() - yielded < STREAM_YIELD_MS) continue if (Date.now() - yielded < STREAM_YIELD_MS) continue
yielded = Date.now() yielded = Date.now()
await new Promise<void>((resolve) => setTimeout(resolve, 0)) await wait(0)
} }
})() } catch (error) {
.finally(flush) if (!streamErrorLogged) {
.catch((error) => {
if (streamErrorLogged) return
streamErrorLogged = true streamErrorLogged = true
console.error("[global-sdk] event stream failed", { console.error("[global-sdk] event stream failed", {
url: server.url, url: server.url,
fetch: eventFetch ? "platform" : "webview", fetch: eventFetch ? "platform" : "webview",
error, error,
}) })
}) }
}
if (abort.signal.aborted) return
await wait(RECONNECT_DELAY_MS)
}
})().finally(flush)
onCleanup(() => { onCleanup(() => {
abort.abort() abort.abort()