diff --git a/core/src/sessions/in_memory_session_service.ts b/core/src/sessions/in_memory_session_service.ts index d505b64f..ad4d9529 100644 --- a/core/src/sessions/in_memory_session_service.ts +++ b/core/src/sessions/in_memory_session_service.ts @@ -174,6 +174,10 @@ export class InMemorySessionService extends BaseSessionService { session, event, }: AppendEventRequest): Promise { + if (event.partial) { + return event; + } + await super.appendEvent({session, event}); session.lastUpdateTime = event.timestamp; diff --git a/core/test/sessions/in_memory_session_service_test.ts b/core/test/sessions/in_memory_session_service_test.ts index eeed7f4b..e766e1d8 100644 --- a/core/test/sessions/in_memory_session_service_test.ts +++ b/core/test/sessions/in_memory_session_service_test.ts @@ -264,6 +264,31 @@ describe('InMemorySessionService', () => { expect(retrievedSession?.lastUpdateTime).toBe(timestamp); }); + it('ignores partial events without updating the session', async () => { + const session = await service.createSession({ + appName: 'app', + userId: 'user', + }); + const initialUpdateTime = session.lastUpdateTime; + const partialEvent = createEvent({ + partial: true, + timestamp: initialUpdateTime + 1000, + }); + + await service.appendEvent({session, event: partialEvent}); + + expect(session.events).toEqual([]); + expect(session.lastUpdateTime).toBe(initialUpdateTime); + + const retrievedSession = await service.getSession({ + appName: 'app', + userId: 'user', + sessionId: session.id, + }); + expect(retrievedSession?.events).toEqual([]); + expect(retrievedSession?.lastUpdateTime).toBe(initialUpdateTime); + }); + it('updates app state', async () => { const appName = 'app'; const userId = 'user';