@@ -26,12 +26,11 @@ class InMemoryEventStore implements EventStore {
2626 { send } : { send : ( eventId : string , message : JSONRPCMessage ) => Promise < void > }
2727 ) : Promise < string > {
2828 if ( ! lastEventId || ! this . events . has ( lastEventId ) ) return '' ;
29- const streamId = lastEventId . split ( '_' ) [ 0 ] ?? '' ;
29+ const streamId = this . events . get ( lastEventId ) ?. streamId ?? '' ;
3030 if ( ! streamId ) return '' ;
3131
3232 let found = false ;
33- const sorted = [ ...this . events . entries ( ) ] . toSorted ( ( a , b ) => a [ 0 ] . localeCompare ( b [ 0 ] ) ) ;
34- for ( const [ eventId , { streamId : sid , message } ] of sorted ) {
33+ for ( const [ eventId , { streamId : sid , message } ] of this . events ) {
3534 if ( sid !== streamId ) continue ;
3635 if ( eventId === lastEventId ) {
3736 found = true ;
@@ -158,6 +157,40 @@ describe('Zod v4', () => {
158157 await transport . close ( ) ;
159158 } ) ;
160159
160+ it ( 'should replay events for standalone SSE stream IDs' , async ( ) => {
161+ const nowSpy = vi . spyOn ( Date , 'now' ) . mockReturnValue ( 1_777_506_150_663 ) ;
162+ const randomSpy = vi . spyOn ( Math , 'random' ) . mockReturnValueOnce ( 0.9 ) . mockReturnValueOnce ( 0.1 ) ;
163+
164+ const message1 : JSONRPCMessage = {
165+ jsonrpc : '2.0' ,
166+ method : 'notifications/message' ,
167+ params : { level : 'info' , data : 'first' }
168+ } ;
169+ const message2 : JSONRPCMessage = {
170+ jsonrpc : '2.0' ,
171+ method : 'notifications/message' ,
172+ params : { level : 'info' , data : 'second' }
173+ } ;
174+ const replayed : Array < { eventId : string ; message : JSONRPCMessage } > = [ ] ;
175+
176+ try {
177+ const firstEventId = await eventStore . storeEvent ( '_GET_stream' , message1 ) ;
178+ const secondEventId = await eventStore . storeEvent ( '_GET_stream' , message2 ) ;
179+
180+ const streamId = await eventStore . replayEventsAfter ( firstEventId , {
181+ send : async ( eventId , message ) => {
182+ replayed . push ( { eventId, message } ) ;
183+ }
184+ } ) ;
185+
186+ expect ( streamId ) . toBe ( '_GET_stream' ) ;
187+ expect ( replayed ) . toEqual ( [ { eventId : secondEventId , message : message2 } ] ) ;
188+ } finally {
189+ nowSpy . mockRestore ( ) ;
190+ randomSpy . mockRestore ( ) ;
191+ }
192+ } ) ;
193+
161194 it ( 'should have session ID functionality' , async ( ) => {
162195 // The ability to store a session ID when connecting
163196 const client = new Client ( {
0 commit comments