diff --git a/packages/replay/src/coreHandlers/addBreadcrumbEvent.ts b/packages/replay/src/coreHandlers/addBreadcrumbEvent.ts index 8022e8a549d2..70fe932910a6 100644 --- a/packages/replay/src/coreHandlers/addBreadcrumbEvent.ts +++ b/packages/replay/src/coreHandlers/addBreadcrumbEvent.ts @@ -12,7 +12,7 @@ export function addBreadcrumbEvent(replay: ReplayContainer, breadcrumb: Breadcru return; } - if (breadcrumb.category === 'ui.click') { + if (['ui.click', 'ui.input'].includes(breadcrumb.category as string)) { replay.triggerUserActivity(); } else { replay.checkAndHandleExpiredSession(); diff --git a/packages/replay/test/integration/sendReplayEvent.test.ts b/packages/replay/test/integration/sendReplayEvent.test.ts index 4f17644a241e..356cfb33630c 100644 --- a/packages/replay/test/integration/sendReplayEvent.test.ts +++ b/packages/replay/test/integration/sendReplayEvent.test.ts @@ -129,6 +129,26 @@ describe('Integration | sendReplayEvent', () => { expect(replay.session?.lastActivity).toBe(BASE_TIMESTAMP + ELAPSED); }); + it('update last activity when user uses keyboard input', async () => { + expect(replay.session?.lastActivity).toBe(BASE_TIMESTAMP); + + domHandler({ + name: 'input', + }); + + expect(replay.session?.lastActivity).toBe(BASE_TIMESTAMP); + + // Pretend 5 seconds have passed + const ELAPSED = 5000; + jest.advanceTimersByTime(ELAPSED); + + domHandler({ + name: 'input', + }); + + expect(replay.session?.lastActivity).toBe(BASE_TIMESTAMP + ELAPSED); + }); + it('uploads a replay event if 5 seconds have elapsed since the last replay event occurred', async () => { const TEST_EVENT = { data: {}, timestamp: BASE_TIMESTAMP, type: 3 }; mockRecord._emitter(TEST_EVENT);