@@ -46,6 +46,7 @@ export const { use: useGlobalSDK, provider: GlobalSDKProvider } = createSimpleCo
4646 type Queued = { directory : string ; payload : Event }
4747 const FLUSH_FRAME_MS = 16
4848 const STREAM_YIELD_MS = 8
49+ const RECONNECT_DELAY_MS = 250
4950
5051 let queue : Queued [ ] = [ ]
5152 let buffer : Queued [ ] = [ ]
@@ -91,50 +92,58 @@ export const { use: useGlobalSDK, provider: GlobalSDKProvider } = createSimpleCo
9192 }
9293
9394 let streamErrorLogged = false
95+ const wait = ( ms : number ) => new Promise < void > ( ( resolve ) => setTimeout ( resolve , ms ) )
9496
9597 void ( async ( ) => {
96- const events = await eventSdk . global . event ( {
97- onSseError : ( error ) => {
98- if ( streamErrorLogged ) return
99- streamErrorLogged = true
100- console . error ( "[global-sdk] event stream error" , {
101- url : server . url ,
102- fetch : eventFetch ? "platform" : "webview" ,
103- error,
98+ while ( ! abort . signal . aborted ) {
99+ try {
100+ const events = await eventSdk . global . event ( {
101+ onSseError : ( error ) => {
102+ if ( streamErrorLogged ) return
103+ streamErrorLogged = true
104+ console . error ( "[global-sdk] event stream error" , {
105+ url : server . url ,
106+ fetch : eventFetch ? "platform" : "webview" ,
107+ error,
108+ } )
109+ } ,
104110 } )
105- } ,
106- } )
107- let yielded = Date . now ( )
108- for await ( const event of events . stream ) {
109- const directory = event . directory ?? "global"
110- const payload = event . payload
111- const k = key ( directory , payload )
112- if ( k ) {
113- const i = coalesced . get ( k )
114- if ( i !== undefined ) {
115- queue [ i ] = { directory, payload }
116- continue
111+ let yielded = Date . now ( )
112+ for await ( const event of events . stream ) {
113+ streamErrorLogged = false
114+ const directory = event . directory ?? "global"
115+ const payload = event . payload
116+ const k = key ( directory , payload )
117+ if ( k ) {
118+ const i = coalesced . get ( k )
119+ if ( i !== undefined ) {
120+ queue [ i ] = { directory, payload }
121+ continue
122+ }
123+ coalesced . set ( k , queue . length )
124+ }
125+ queue . push ( { directory, payload } )
126+ schedule ( )
127+
128+ if ( Date . now ( ) - yielded < STREAM_YIELD_MS ) continue
129+ yielded = Date . now ( )
130+ await wait ( 0 )
131+ }
132+ } catch ( error ) {
133+ if ( ! streamErrorLogged ) {
134+ streamErrorLogged = true
135+ console . error ( "[global-sdk] event stream failed" , {
136+ url : server . url ,
137+ fetch : eventFetch ? "platform" : "webview" ,
138+ error,
139+ } )
117140 }
118- coalesced . set ( k , queue . length )
119141 }
120- queue . push ( { directory, payload } )
121- schedule ( )
122142
123- if ( Date . now ( ) - yielded < STREAM_YIELD_MS ) continue
124- yielded = Date . now ( )
125- await new Promise < void > ( ( resolve ) => setTimeout ( resolve , 0 ) )
143+ if ( abort . signal . aborted ) return
144+ await wait ( RECONNECT_DELAY_MS )
126145 }
127- } ) ( )
128- . finally ( flush )
129- . catch ( ( error ) => {
130- if ( streamErrorLogged ) return
131- streamErrorLogged = true
132- console . error ( "[global-sdk] event stream failed" , {
133- url : server . url ,
134- fetch : eventFetch ? "platform" : "webview" ,
135- error,
136- } )
137- } )
146+ } ) ( ) . finally ( flush )
138147
139148 onCleanup ( ( ) => {
140149 abort . abort ( )
0 commit comments