1- import { DISCARDED , HookNames , SKIPPED } from '@datadog/browser-core'
2- import { SessionReplayState , SessionType } from '../rumSessionManager'
1+ import type { ContextValue } from '@datadog/browser-core'
2+ import {
3+ DISCARDED ,
4+ HookNames ,
5+ SKIPPED ,
6+ dateNow ,
7+ ONE_MINUTE ,
8+ addTelemetryDebug ,
9+ elapsed ,
10+ relativeNow ,
11+ } from '@datadog/browser-core'
312import type { RumSessionManager } from '../rumSessionManager'
13+ import { SessionReplayState , SessionType } from '../rumSessionManager'
414import { RumEventType } from '../../rawRumEvent.types'
515import type { RecorderApi } from '../../boot/rumPublicApi'
616import type { DefaultRumEventAttributes , DefaultTelemetryEventAttributes , Hooks } from '../hooks'
717import type { ViewHistory } from './viewHistory'
18+ import type { PageStateHistory } from './pageStateHistory'
819
920export function startSessionContext (
1021 hooks : Hooks ,
1122 sessionManager : RumSessionManager ,
1223 recorderApi : RecorderApi ,
13- viewHistory : ViewHistory
24+ viewHistory : ViewHistory ,
25+ pageStateHistory : PageStateHistory
1426) {
1527 hooks . register ( HookNames . Assemble , ( { eventType, startTime } ) : DefaultRumEventAttributes | DISCARDED => {
1628 const session = sessionManager . findTrackedSession ( startTime )
@@ -19,6 +31,18 @@ export function startSessionContext(
1931 if ( ! session || ! view ) {
2032 return DISCARDED
2133 }
34+ if ( session . expire && dateNow ( ) - Number ( session . expire ) > ONE_MINUTE ) {
35+ const duration = elapsed ( startTime , relativeNow ( ) )
36+ // monitor-until: 2026-01-01
37+ addTelemetryDebug ( 'Event sent after session expiration' , {
38+ debug : {
39+ duration,
40+ eventType,
41+ expired_since : dateNow ( ) - Number ( session . expire ) ,
42+ page_state : pageStateHistory . findPageStatesForPeriod ( startTime , duration ) as ContextValue ,
43+ } ,
44+ } )
45+ }
2246
2347 let hasReplay
2448 let sampledForReplay
0 commit comments