diff --git a/src/extensions/replay/sessionrecording.ts b/src/extensions/replay/sessionrecording.ts index aaa94d439..30a63dd4e 100644 --- a/src/extensions/replay/sessionrecording.ts +++ b/src/extensions/replay/sessionrecording.ts @@ -74,6 +74,14 @@ interface QueuedRRWebEvent { enqueuedAt: number } +interface SessionIdlePayload { + eventTimestamp: number + lastActivityTimestamp: number + threshold: number + bufferLength: number + bufferSize: number +} + const newQueuedEvent = (rrwebMethod: () => void): QueuedRRWebEvent => ({ rrwebMethod, enqueuedAt: Date.now(), @@ -799,6 +807,18 @@ export class SessionRecording { return } + if (event.type === EventType.Custom && event.data.tag === 'sessionIdle') { + // session idle events have a timestamp when rrweb sees them + // which can artificially lengthen a session + // we know when we detected it based on the payload and can correct the timestamp + const payload = event.data.payload as SessionIdlePayload + if (payload) { + const lastActivity = payload.lastActivityTimestamp + const threshold = payload.threshold + event.timestamp = lastActivity + threshold + } + } + const properties = { $snapshot_bytes: size, $snapshot_data: event,