{"version":3,"file":"ng2-idle-timeout.mjs","sources":["../../src/lib/models/session-shared-state.ts","../../src/lib/utils/broadcast-channel.ts","../../src/lib/tokens/config.token.ts","../../src/lib/utils/logging.ts","../../src/lib/utils/platform.ts","../../src/lib/services/time-source.service.ts","../../src/lib/services/server-time.service.ts","../../src/lib/defaults.ts","../../src/lib/models/session-timeout-config.ts","../../src/lib/validation.ts","../../src/lib/services/activity-dom.service.ts","../../src/lib/services/activity-router.service.ts","../../src/lib/services/leader-election.service.ts","../../src/lib/utils/storage.ts","../../src/lib/services/shared-state-coordinator.service.ts","../../src/lib/services/session-timeout.service.ts","../../src/lib/interceptors/session-activity-http.context.ts","../../src/lib/interceptors/session-activity-http.interceptor.ts","../../src/lib/guards/session-expired.guard.ts","../../src/lib/utils/format-ms.pipe.ts","../../src/lib/provide-session-timeout.ts","../../src/ng2-idle-timeout.ts"],"sourcesContent":["import type { SessionState } from './session-state';\n\nexport const SHARED_STATE_VERSION = 3;\n\r\nexport type SharedStateOperation =\r\n  | 'bootstrap'\r\n  | 'reset-by-activity'\r\n  | 'manual-extend'\r\n  | 'auto-extend'\r\n  | 'pause'\r\n  | 'resume'\r\n  | 'expire'\r\n  | 'config-change';\r\n\r\nexport interface LeaderInfo {\r\n  id: string;\r\n  heartbeatAt: number;\r\n  epoch: number;\r\n}\r\n\r\nexport interface SharedStateMetadata {\r\n  revision: number;\r\n  logicalClock: number;\r\n  writerId: string;\r\n  operation: SharedStateOperation;\r\n  causalityToken: string;\r\n}\r\n\r\nexport interface SharedConfigPayload {\n  idleGraceMs: number;\n  countdownMs: number;\n  warnBeforeMs: number;\n  activityResetCooldownMs: number;\n  storageKeyPrefix: string;\n  resumeBehavior: 'manual' | 'autoOnServerSync' | undefined;\n  resetOnWarningActivity: boolean;\n  ignoreUserActivityWhenPaused: boolean;\n  allowManualExtendWhenExpired: boolean;\n  revision: number;\n  logicalClock: number;\r\n  writerId: string;\r\n}\r\n\r\nexport interface SharedSessionSnapshot {\r\n  state: SessionState;\r\n  remainingMs: number;\r\n  idleStartAt: number | null;\r\n  countdownEndAt: number | null;\r\n  lastActivityAt: number | null;\r\n  paused: boolean;\r\n}\r\n\r\nexport interface SharedSessionState {\n  version: typeof SHARED_STATE_VERSION;\n  updatedAt: number;\n  leader: LeaderInfo | null;\n  metadata: SharedStateMetadata;\n  snapshot: SharedSessionSnapshot;\n  config: SharedConfigPayload;\n}\n\r\nexport type SharedStateMessageType = 'state' | 'request-sync';\r\n\r\nexport interface SharedStateMessageBase {\r\n  sourceId: string;\r\n  at: number;\r\n  type: SharedStateMessageType;\r\n}\r\n\r\nexport interface SharedStateBroadcastMessage extends SharedStateMessageBase {\r\n  type: 'state';\r\n  state: SharedSessionState;\r\n}\r\n\r\nexport interface SharedStateRequestMessage extends SharedStateMessageBase {\r\n  type: 'request-sync';\r\n  reason?: string;\r\n  expectReply?: boolean;\r\n}\r\n\r\nexport type SharedStateMessage = SharedStateBroadcastMessage | SharedStateRequestMessage;\r\n","export interface BroadcastAdapter {\r\n  publish(message: unknown): void;\r\n  close(): void;\r\n  subscribe(callback: (message: MessageEvent) => void): void;\r\n}\r\n\r\nfunction createNativeChannel(name: string): BroadcastAdapter | null {\r\n  if (typeof window === 'undefined' || typeof BroadcastChannel === 'undefined') {\r\n    return null;\r\n  }\r\n\r\n  try {\r\n    const channel = new BroadcastChannel(name);\r\n    const listeners = new Set<(message: MessageEvent) => void>();\r\n\r\n    const handleMessage = (event: MessageEvent) => {\r\n      listeners.forEach(listener => listener(event));\r\n    };\r\n\r\n    channel.addEventListener('message', handleMessage);\r\n\r\n    return {\r\n      publish: message => channel.postMessage(message),\r\n      close: () => {\r\n        channel.removeEventListener('message', handleMessage);\r\n        channel.close();\r\n        listeners.clear();\r\n      },\r\n      subscribe: callback => {\r\n        listeners.add(callback);\r\n      }\r\n    };\r\n  } catch (error) {\r\n    console.warn('[ng2-idle-timeout] BroadcastChannel unavailable', error);\r\n    return null;\r\n  }\r\n}\r\n\r\nfunction createLocalStorageChannel(name: string): BroadcastAdapter | null {\r\n  if (typeof window === 'undefined') {\r\n    return null;\r\n  }\r\n\r\n  try {\r\n    const storage = window.localStorage;\r\n    const listeners = new Set<(message: MessageEvent) => void>();\r\n    const storageKey = `__ng2_idle_timeout_bc__${name}`;\r\n\r\n    const toMessageEvent = (data: unknown): MessageEvent => {\r\n      if (typeof MessageEvent === 'function') {\r\n        return new MessageEvent('message', { data });\r\n      }\r\n      return {\r\n        data,\r\n        origin: window.location?.origin ?? '',\r\n        lastEventId: '',\r\n        ports: [],\r\n        source: null,\r\n        type: 'message',\r\n        bubbles: false,\r\n        cancelBubble: false,\r\n        cancelable: false,\r\n        composed: false,\r\n        currentTarget: null,\r\n        defaultPrevented: false,\r\n        eventPhase: 0,\r\n        isTrusted: false,\r\n        returnValue: true,\r\n        srcElement: null,\r\n        target: null,\r\n        timeStamp: Date.now(),\r\n        scoped: false,\r\n        composedPath: () => [],\r\n        initEvent: () => undefined,\r\n        preventDefault: () => undefined,\r\n        stopImmediatePropagation: () => undefined,\r\n        stopPropagation: () => undefined\r\n      } as unknown as MessageEvent;\r\n    };\r\n\r\n    const handleStorage = (event: StorageEvent) => {\r\n      if (event.key !== storageKey || event.newValue == null) {\r\n        return;\r\n      }\r\n      try {\r\n        const parsed = JSON.parse(event.newValue);\r\n        listeners.forEach(listener => listener(toMessageEvent(parsed?.message)));\r\n      } catch (error) {\r\n        console.warn('[ng2-idle-timeout] Invalid broadcast payload from storage', error);\r\n      }\r\n    };\r\n\r\n    window.addEventListener('storage', handleStorage);\r\n\r\n    return {\r\n      publish: message => {\r\n        const payload = JSON.stringify({ message, timestamp: Date.now() });\r\n        storage.setItem(storageKey, payload);\r\n        storage.removeItem(storageKey);\r\n      },\r\n      close: () => {\r\n        window.removeEventListener('storage', handleStorage);\r\n        listeners.clear();\r\n      },\r\n      subscribe: callback => {\r\n        listeners.add(callback);\r\n      }\r\n    };\r\n  } catch (error) {\r\n    console.warn('[ng2-idle-timeout] Unable to create localStorage broadcast fallback', error);\r\n    return null;\r\n  }\r\n}\r\n\r\nexport function createBroadcastChannel(name: string): BroadcastAdapter | null {\r\n  const nativeChannel = createNativeChannel(name);\r\n  if (nativeChannel) {\r\n    return nativeChannel;\r\n  }\r\n  return createLocalStorageChannel(name);\r\n}\r\n","import { InjectionToken } from '@angular/core';\r\nimport type { SessionTimeoutConfig, SessionTimeoutPartialConfig } from '../models/session-timeout-config';\r\nimport type { SessionTimeoutHooks } from '../models/session-timeout-config';\r\n\r\nexport interface SessionTimeoutProviderConfig {\r\n  config?: SessionTimeoutPartialConfig;\r\n  hooks?: SessionTimeoutHooks;\r\n}\r\n\r\nexport const SESSION_TIMEOUT_CONFIG = new InjectionToken<SessionTimeoutConfig>('ng2-idle-timeout-config');\r\n\r\nexport const SESSION_TIMEOUT_HOOKS = new InjectionToken<SessionTimeoutHooks>('ng2-idle-timeout-hooks', {\r\n  providedIn: 'root',\r\n  factory: () => ({})\r\n});\r\n","import { inject } from '@angular/core';\r\nimport type { SessionTimeoutConfig } from '../models/session-timeout-config';\r\nimport { SESSION_TIMEOUT_CONFIG } from '../tokens/config.token';\r\n\r\nexport type LogLevel = 'trace' | 'debug' | 'info' | 'warn' | 'error' | 'silent';\r\n\r\nconst levelRank: Record<Exclude<LogLevel, 'silent'>, number> = {\r\n  trace: 10,\r\n  debug: 20,\r\n  info: 30,\r\n  warn: 40,\r\n  error: 50\r\n};\r\n\r\nexport interface Logger {\r\n  trace(message: string, ...rest: unknown[]): void;\r\n  debug(message: string, ...rest: unknown[]): void;\r\n  info(message: string, ...rest: unknown[]): void;\r\n  warn(message: string, ...rest: unknown[]): void;\r\n  error(message: string, ...rest: unknown[]): void;\r\n}\r\n\r\nconst prefix = '[ng2-idle-timeout]';\r\n\r\nexport function createLogger(config?: SessionTimeoutConfig): Logger {\r\n  const cfg = config ?? inject(SESSION_TIMEOUT_CONFIG);\r\n  const threshold = cfg.logging;\r\n\r\n  if (threshold === 'silent') {\r\n    return createNoopLogger();\r\n  }\r\n\r\n  const rank = levelRank[threshold] ?? levelRank.warn;\r\n\r\n  return {\r\n    trace: (message, ...rest) => {\r\n      if (rank <= levelRank.trace) {\r\n        console.trace(prefix + ' ' + message, ...rest);\r\n      }\r\n    },\r\n    debug: (message, ...rest) => {\r\n      if (rank <= levelRank.debug) {\r\n        console.debug(prefix + ' ' + message, ...rest);\r\n      }\r\n    },\r\n    info: (message, ...rest) => {\r\n      if (rank <= levelRank.info) {\r\n        console.info(prefix + ' ' + message, ...rest);\r\n      }\r\n    },\r\n    warn: (message, ...rest) => {\r\n      if (rank <= levelRank.warn) {\r\n        console.warn(prefix + ' ' + message, ...rest);\r\n      }\r\n    },\r\n    error: (message, ...rest) => {\r\n      if (rank <= levelRank.error) {\r\n        console.error(prefix + ' ' + message, ...rest);\r\n      }\r\n    }\r\n  };\r\n}\r\n\r\nfunction createNoopLogger(): Logger {\r\n  return {\r\n    trace() {},\r\n    debug() {},\r\n    info() {},\r\n    warn() {},\r\n    error() {}\r\n  };\r\n}\r\n","import { inject, PLATFORM_ID } from '@angular/core';\r\nimport { isPlatformBrowser } from '@angular/common';\r\n\r\nexport function isBrowserPlatform(): boolean {\r\n  const platformId = inject(PLATFORM_ID, { optional: true }) ?? PLATFORM_ID;\r\n  return isPlatformBrowser(platformId);\r\n}\r\n\r\nexport function now(): number {\r\n  return Date.now();\r\n}\r\n","import { Injectable, computed, signal } from '@angular/core';\r\nimport type { Signal } from '@angular/core';\r\nimport { toObservable } from '@angular/core/rxjs-interop';\r\nimport { now } from '../utils/platform';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class TimeSourceService {\r\n  private readonly offsetSignal = signal(0);\r\n\r\n  readonly offset: Signal<number> = computed(() => this.offsetSignal());\r\n  readonly offset$ = toObservable(this.offset);\r\n\r\n  now(): number {\r\n    return now() + this.offsetSignal();\r\n  }\r\n\r\n  setOffset(ms: number): void {\r\n    this.offsetSignal.set(ms);\r\n  }\r\n\r\n  resetOffset(): void {\r\n    this.offsetSignal.set(0);\r\n  }\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable, NgZone, inject } from '@angular/core';\r\nimport { catchError, of } from 'rxjs';\nimport type { Subscription } from 'rxjs';\n\r\nimport type { SessionTimeoutConfig } from '../models/session-timeout-config';\r\nimport { TimeSourceService } from './time-source.service';\r\n\r\ninterface ParsedServerTime {\r\n  epochMs: number;\r\n}\r\n\r\nconst MIN_SUCCESS_INTERVAL_MS = 60_000;\r\nconst DEFAULT_SUCCESS_INTERVAL_MS = 300_000;\r\nconst BASE_RETRY_DELAY_MS = 2_000;\r\nconst MAX_RETRY_DELAY_MS = 60_000;\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class ServerTimeService {\r\n  private readonly http = inject(HttpClient, { optional: true });\n  private readonly timeSource = inject(TimeSourceService);\r\n  private readonly zone = inject(NgZone);\r\n  private readonly syncListeners = new Set<() => void>();\r\n\r\n  private currentConfig: SessionTimeoutConfig | null = null;\r\n  private endpoint: string | null = null;\r\n  private retryAttempts = 0;\r\n  private timerHandle: ReturnType<typeof globalThis.setTimeout> | null = null;\n  private inFlight: Subscription | null = null;\n  private missingHttpClientWarned = false;\n\r\n  configure(config: SessionTimeoutConfig): void {\r\n    this.currentConfig = config;\r\n    if (config.timeSource !== 'server' || !config.serverTimeEndpoint) {\n      this.stop(true);\n      return;\n    }\n\n    if (this.endpoint !== config.serverTimeEndpoint) {\n      this.endpoint = config.serverTimeEndpoint;\n    }\n\n    if (!this.http) {\n      this.warnMissingHttpClient();\n      this.stop(true);\n      return;\n    }\n\n    this.retryAttempts = 0;\n    this.clearTimer();\n    this.cancelInFlight();\n    this.triggerSync(true);\n  }\r\n\r\n  stop(resetOffset = false): void {\r\n    this.clearTimer();\r\n    this.cancelInFlight();\r\n    this.endpoint = null;\r\n    this.retryAttempts = 0;\r\n    if (resetOffset) {\r\n      this.timeSource.resetOffset();\r\n    }\r\n  }\r\n\r\n  private triggerSync(resetBackoff = false): void {\r\n    if (!this.endpoint || this.inFlight) {\n      return;\n    }\n    if (!this.http) {\n      this.warnMissingHttpClient();\n      return;\n    }\n    if (resetBackoff) {\n      this.retryAttempts = 0;\n    }\n    this.fetchServerOffset();\n  }\n\n  private fetchServerOffset(): void {\n    const endpoint = this.endpoint;\n    if (!endpoint) {\n      return;\n    }\n    if (!this.http) {\n      this.warnMissingHttpClient();\n      return;\n    }\n\n    const requestedAt = Date.now();\n    this.inFlight = this.http.get<unknown>(endpoint).pipe(\r\n      catchError(error => {\r\n        this.handleFailure(error instanceof Error ? error : new Error(String(error)));\r\n        return of(null);\r\n      })\r\n    ).subscribe(payload => {\r\n      this.inFlight = null;\r\n      if (payload === null) {\r\n        return;\r\n      }\r\n\r\n      const parsed = this.parseServerTime(payload);\r\n      if (!parsed) {\r\n        this.handleFailure(new Error('Invalid server time payload'));\r\n        return;\r\n      }\r\n\r\n      const roundTripOffset = parsed.epochMs - requestedAt;\r\n      const nowOffset = parsed.epochMs - Date.now();\r\n      // Average the offsets to account for one-way delay.\r\n      const appliedOffset = Math.round((roundTripOffset + nowOffset) / 2);\r\n      this.timeSource.setOffset(appliedOffset);\r\n      this.notifySyncListeners();\r\n      this.retryAttempts = 0;\r\n      this.scheduleNextSuccess();\r\n    });\r\n  }\r\n\r\n  private parseServerTime(payload: unknown): ParsedServerTime | null {\r\n    if (typeof payload === 'number' && Number.isFinite(payload)) {\r\n      return { epochMs: payload };\r\n    }\r\n    if (typeof payload === 'string') {\r\n      const parsed = Date.parse(payload);\r\n      if (!Number.isNaN(parsed)) {\r\n        return { epochMs: parsed };\r\n      }\r\n      return null;\r\n    }\r\n    if (payload && typeof payload === 'object') {\r\n      const asRecord = payload as Record<string, unknown>;\r\n      const candidate = asRecord['epochMs'] ?? asRecord['epochMilliseconds'] ?? asRecord['timestamp'];\r\n      if (typeof candidate === 'number' && Number.isFinite(candidate)) {\r\n        return { epochMs: candidate };\r\n      }\r\n      if (typeof candidate === 'string') {\r\n        const parsed = Date.parse(candidate);\r\n        if (!Number.isNaN(parsed)) {\r\n          return { epochMs: parsed };\r\n        }\r\n      }\r\n    }\r\n    return null;\r\n  }\r\n\r\n  registerSyncListener(listener: () => void): void {\r\n    this.syncListeners.add(listener);\r\n  }\r\n\r\n  unregisterSyncListener(listener: () => void): void {\r\n    this.syncListeners.delete(listener);\r\n  }\r\n\r\n  private notifySyncListeners(): void {\r\n    for (const listener of this.syncListeners) {\r\n      try {\r\n        listener();\r\n      } catch (error) {\r\n        console.warn('[ng2-idle-timeout] Error executing server sync listener', error);\r\n      }\r\n    }\r\n  }\r\n\r\n  private handleFailure(error: Error): void {\r\n    console.warn('[ng2-idle-timeout] Unable to synchronise server time', error);\r\n    this.retryAttempts += 1;\r\n    const retryDelay = Math.min(\r\n      BASE_RETRY_DELAY_MS * Math.pow(2, this.retryAttempts - 1),\r\n      MAX_RETRY_DELAY_MS\r\n    );\r\n    this.scheduleNextRetry(retryDelay);\r\n  }\r\n\r\n  private scheduleNextRetry(delayMs: number): void {\r\n    this.clearTimer();\r\n    this.zone.runOutsideAngular(() => {\r\n      this.timerHandle = globalThis.setTimeout(() => {\n        this.zone.run(() => this.triggerSync());\n      }, delayMs);\n    });\n  }\n\r\n  private scheduleNextSuccess(): void {\r\n    const interval = Math.max(\r\n      MIN_SUCCESS_INTERVAL_MS,\r\n      this.currentConfig?.pollingMs ?? DEFAULT_SUCCESS_INTERVAL_MS\r\n    );\r\n    this.clearTimer();\r\n    this.zone.runOutsideAngular(() => {\r\n      this.timerHandle = globalThis.setTimeout(() => {\n        this.zone.run(() => this.triggerSync());\n      }, interval);\n    });\n  }\n\r\n  private cancelInFlight(): void {\r\n    this.inFlight?.unsubscribe();\r\n    this.inFlight = null;\r\n  }\r\n\r\n  private clearTimer(): void {\n    if (this.timerHandle != null) {\n      clearTimeout(this.timerHandle);\n    }\n    this.timerHandle = null;\n  }\n\n  private warnMissingHttpClient(): void {\n    if (this.missingHttpClientWarned) {\n      return;\n    }\n    console.warn(\n      '[ng2-idle-timeout] HttpClient is not available. Server time synchronisation is disabled. ' +\n        'Provide HttpClient (e.g. provideHttpClient or HttpClientModule) to enable timeSource: \"server\".'\n    );\n    this.missingHttpClientWarned = true;\n  }\n}\n","import type { SessionActionDelays, SessionTimeoutConfig, DomActivityEventName } from './models/session-timeout-config';\r\n\r\nexport const DEFAULT_HTTP_ACTIVITY = Object.freeze({\r\n  enabled: true,\r\n  strategy: 'allowlist',\r\n  allowlist: [/\\/(create|update|submit|checkout)/i],\r\n  denylist: [/\\/(metrics|prefetch|health|refresh-token)/i],\r\n  ignoreOnInitMs: 3000,\r\n  cooldownMs: 3000,\r\n  onlyWhenTabFocused: true,\r\n  primaryTabOnly: true\r\n} as const);\r\n\r\nexport const DEFAULT_ACTION_DELAYS = Object.freeze({\r\n  start: 0,\r\n  stop: 0,\r\n  resetIdle: 0,\r\n  extend: 0,\r\n  pause: 0,\r\n  resume: 0,\r\n  expire: 0\r\n} satisfies SessionActionDelays);\r\n\r\nexport const DEFAULT_DOM_ACTIVITY_EVENTS = Object.freeze([\r\n  'mousedown',\r\n  'click',\r\n  'wheel',\r\n  'scroll',\r\n  'keydown',\r\n  'keyup',\r\n  'touchstart',\r\n  'touchend',\r\n  'visibilitychange'\r\n] as const satisfies readonly DomActivityEventName[]);\r\n\r\nexport const DEFAULT_SESSION_TIMEOUT_CONFIG: SessionTimeoutConfig = {\n  idleGraceMs: 120_000,\n  countdownMs: 3_600_000,\n  warnBeforeMs: 300_000,\n  pollingMs: 500,\n  activityResetCooldownMs: 0,\n  storageKeyPrefix: 'ng2-idle-timeout',\n  appInstanceId: undefined,\n  strategy: 'userOnly',\n  httpActivity: {\n    ...DEFAULT_HTTP_ACTIVITY,\n    strategy: 'allowlist'\n  },\n  actionDelays: {\r\n    ...DEFAULT_ACTION_DELAYS\r\n  },\r\n  openNewTabBehavior: 'inherit',\r\n  routerCountsAsActivity: true,\r\n  domActivityEvents: DEFAULT_DOM_ACTIVITY_EVENTS,\r\n  debounceMouseMs: 800,\r\n  debounceKeyMs: 200,\r\n  maxExtendPerSession: 0,\r\n  onExpire: 'emit',\r\n  timeSource: 'client',\r\n  serverTimeEndpoint: undefined,\r\n  logging: 'warn',\n  resetOnWarningActivity: true,\n  ignoreUserActivityWhenPaused: false,\n  allowManualExtendWhenExpired: false\n};\n\r\nexport const DEFAULT_STORAGE_KEYS = Object.freeze({\r\n  idleMetadata: 'session',\r\n  countdown: 'countdown',\r\n  config: 'config'\r\n});\r\n\r\nexport function mergeConfig(partial: Partial<SessionTimeoutConfig> | undefined): SessionTimeoutConfig {\r\n  if (!partial) {\r\n    return {\r\n      ...DEFAULT_SESSION_TIMEOUT_CONFIG,\r\n      domActivityEvents: [...DEFAULT_SESSION_TIMEOUT_CONFIG.domActivityEvents]\r\n    };\r\n  }\r\n\r\n  const { httpActivity, actionDelays, domActivityEvents, ...shallow } = partial;\r\n\r\n  const mergedHttp = {\r\n    ...DEFAULT_SESSION_TIMEOUT_CONFIG.httpActivity,\r\n    ...(httpActivity ?? {})\r\n  };\r\n\r\n  const mergedDelays: SessionActionDelays = {\r\n    ...DEFAULT_SESSION_TIMEOUT_CONFIG.actionDelays,\r\n    ...(actionDelays ?? {})\r\n  };\r\n\r\n  const next: SessionTimeoutConfig = {\r\n    ...DEFAULT_SESSION_TIMEOUT_CONFIG,\r\n    ...shallow,\r\n    httpActivity: {\r\n      ...mergedHttp,\r\n      allowlist: mergedHttp.allowlist ?? [],\r\n      denylist: mergedHttp.denylist ?? []\r\n    },\r\n    actionDelays: mergedDelays,\r\n    domActivityEvents: Array.isArray(domActivityEvents)\r\n      ? [...domActivityEvents]\r\n      : [...DEFAULT_SESSION_TIMEOUT_CONFIG.domActivityEvents]\r\n  };\r\n\r\n  return next;\r\n}\r\n","import type { ActivityEvent } from './activity-event';\n\nexport type SessionTimeoutStrategy = 'userOnly' | 'userAndHttpAllowlist' | 'aggressive';\n\nexport const DOM_ACTIVITY_EVENT_NAMES = [\r\n  'mousemove',\r\n  'mousedown',\r\n  'click',\r\n  'wheel',\r\n  'scroll',\r\n  'keydown',\r\n  'keyup',\r\n  'touchstart',\r\n  'touchend',\r\n  'touchmove',\r\n  'visibilitychange'\r\n] as const;\r\n\r\nexport type DomActivityEventName = (typeof DOM_ACTIVITY_EVENT_NAMES)[number];\r\n\r\nexport interface HttpActivityPolicyConfig {\r\n  enabled: boolean;\r\n  strategy: 'allowlist' | 'headerFlag' | 'aggressive';\r\n  allowlist: readonly RegExp[];\r\n  denylist: readonly RegExp[];\r\n  headerFlag?: string;\r\n  contextToken?: string;\r\n  ignoreOnInitMs: number;\r\n  cooldownMs: number;\r\n  onlyWhenTabFocused: boolean;\r\n  primaryTabOnly: boolean;\r\n}\r\n\r\nexport interface SessionActionDelays {\r\n  start: number;\r\n  stop: number;\r\n  resetIdle: number;\r\n  extend: number;\r\n  pause: number;\r\n  resume: number;\r\n  expire: number;\r\n}\r\n\r\nexport interface SessionTimeoutConfig {\n  idleGraceMs: number;\n  countdownMs: number;\n  warnBeforeMs: number;\n  pollingMs: number;\n  activityResetCooldownMs: number;\n  storageKeyPrefix: string;\n  appInstanceId?: string;\n  strategy: SessionTimeoutStrategy;\n  httpActivity: HttpActivityPolicyConfig;\n  actionDelays: SessionActionDelays;\r\n  openNewTabBehavior: 'inherit';\r\n  routerCountsAsActivity: boolean;\r\n  domActivityEvents: readonly DomActivityEventName[];\r\n  debounceMouseMs: number;\r\n  debounceKeyMs: number;\r\n  maxExtendPerSession: number;\r\n  onExpire: 'emit' | 'callback' | string;\r\n  timeSource: 'client' | 'server';\r\n  serverTimeEndpoint?: string;\r\n  logging: 'trace' | 'debug' | 'info' | 'warn' | 'error' | 'silent';\n  resetOnWarningActivity: boolean;\n  ignoreUserActivityWhenPaused: boolean;\n  allowManualExtendWhenExpired: boolean;\n  resumeBehavior?: 'manual' | 'autoOnServerSync';\n}\r\n\r\nexport type SessionTimeoutPartialConfig = Partial<Omit<SessionTimeoutConfig, 'httpActivity' | 'actionDelays'>> & {\r\n  httpActivity?: Partial<HttpActivityPolicyConfig>;\r\n  actionDelays?: Partial<SessionActionDelays>;\r\n};\r\n\r\nexport interface ExpireCallback {\r\n  (snapshot: Readonly<SessionSnapshotLike>): void | Promise<void>;\r\n}\r\n\r\nexport interface SessionSnapshotLike {\r\n  state: 'IDLE' | 'COUNTDOWN' | 'WARN' | 'EXPIRED';\r\n  remainingMs: number;\r\n  idleStartAt: number | null;\r\n  countdownEndAt: number | null;\r\n  lastActivityAt: number | null;\r\n}\r\n\r\nexport interface SessionTimeoutHooks {\r\n  onExpire?: ExpireCallback;\r\n  onActivity?: (activity: ActivityEvent) => void;\r\n}\r\n","import { DEFAULT_SESSION_TIMEOUT_CONFIG } from './defaults';\r\nimport {\n  DOM_ACTIVITY_EVENT_NAMES,\n  type DomActivityEventName,\n  type SessionTimeoutConfig,\n  type SessionTimeoutPartialConfig\n} from './models/session-timeout-config';\n\r\nexport interface ValidationIssue {\r\n  field: string;\r\n  message: string;\r\n}\r\n\r\nexport interface ValidationResult {\r\n  issues: ValidationIssue[];\r\n  config: SessionTimeoutConfig;\r\n}\r\n\r\nconst DOM_ACTIVITY_EVENT_SET = new Set<string>(DOM_ACTIVITY_EVENT_NAMES);\n\nexport function validateConfig(partial: SessionTimeoutPartialConfig | undefined): ValidationResult {\n  const issues: ValidationIssue[] = [];\n  const { config, invalidDomActivityEvents, removedSyncMode } = normalizeConfig(partial);\n\r\n  if (config.idleGraceMs <= 0) {\r\n    issues.push(createIssue('idleGraceMs', 'Value must be greater than 0'));\r\n  }\r\n  if (config.countdownMs <= 0) {\r\n    issues.push(createIssue('countdownMs', 'Value must be greater than 0'));\r\n  }\r\n  if (config.warnBeforeMs < 0 || config.warnBeforeMs > config.countdownMs) {\r\n    issues.push(createIssue('warnBeforeMs', 'Value must be between 0 and countdownMs inclusive'));\r\n  }\r\n  if (config.pollingMs <= 0) {\r\n    issues.push(createIssue('pollingMs', 'Value must be greater than 0'));\r\n  }\r\n  if (config.activityResetCooldownMs < 0) {\r\n    issues.push(createIssue('activityResetCooldownMs', 'Value must be >= 0'));\r\n  }\r\n  if (!config.storageKeyPrefix.trim()) {\r\n    issues.push(createIssue('storageKeyPrefix', 'Prefix cannot be empty'));\r\n  }\r\n  if (config.maxExtendPerSession < 0) {\r\n    issues.push(createIssue('maxExtendPerSession', 'Value must be >= 0'));\r\n  }\r\n  if (config.timeSource === 'server' && !config.serverTimeEndpoint) {\r\n    issues.push(createIssue('serverTimeEndpoint', 'Required when timeSource is server'));\r\n  }\r\n  if (\r\n    typeof config.onExpire === 'string' &&\r\n    config.onExpire.startsWith('navigate:') &&\r\n    config.onExpire.split(':').length < 2\r\n  ) {\r\n    issues.push(createIssue('onExpire', 'navigate: form requires target path'));\r\n  }\r\n\r\n  for (const [key, value] of Object.entries(config.actionDelays)) {\r\n    if (value < 0) {\r\n      issues.push(createIssue(`actionDelays.${key}`, 'Value must be >= 0'));\r\n    }\r\n  }\r\n\r\n  if (invalidDomActivityEvents.length > 0) {\n    issues.push(\n      createIssue(\n        'domActivityEvents',\n        `Unsupported DOM events: ${invalidDomActivityEvents.join(', ')}`\n      )\n    );\n  }\n\n  if (removedSyncMode !== undefined) {\n    issues.push(\n      createIssue(\n        'syncMode',\n        `syncMode '${removedSyncMode}' is no longer supported; leader coordination is always enforced.`\n      )\n    );\n  }\n\n  return { issues, config };\n}\n\ninterface NormalizedConfigResult {\n  config: SessionTimeoutConfig;\n  invalidDomActivityEvents: string[];\n  removedSyncMode: string | undefined;\n}\n\ntype MutablePartialConfig = SessionTimeoutPartialConfig & Record<string, unknown>;\n\nfunction normalizeConfig(partial: SessionTimeoutPartialConfig | undefined): NormalizedConfigResult {\n  const base: SessionTimeoutConfig = {\n    ...DEFAULT_SESSION_TIMEOUT_CONFIG,\n    domActivityEvents: [...DEFAULT_SESSION_TIMEOUT_CONFIG.domActivityEvents]\n  };\n\n  const working = (partial ? { ...partial } : {}) as MutablePartialConfig;\n  let removedSyncMode: string | undefined;\n\n  if ('syncMode' in working) {\n    const syncModeValue = working['syncMode'];\n    removedSyncMode = syncModeValue === null ? 'null' : String(syncModeValue);\n    delete working['syncMode'];\n  }\n\n  const { httpActivity, actionDelays, domActivityEvents, ...shallow } = working;\n\n  const merged: SessionTimeoutConfig = {\n    ...base,\n    ...shallow,\n    httpActivity: {\n      ...base.httpActivity,\r\n      ...(httpActivity ?? {})\r\n    },\r\n    actionDelays: {\r\n      ...base.actionDelays,\r\n      ...(actionDelays ?? {})\r\n    },\r\n    domActivityEvents: base.domActivityEvents\n  };\n\n  const invalidDomActivityEvents: string[] = [];\n  if (Array.isArray(domActivityEvents)) {\n    const deduped: DomActivityEventName[] = [];\n    const seen = new Set<string>();\r\n    for (const raw of domActivityEvents) {\r\n      const candidate = String(raw);\r\n      if (!DOM_ACTIVITY_EVENT_SET.has(candidate)) {\r\n        invalidDomActivityEvents.push(candidate);\r\n        continue;\r\n      }\r\n      if (!seen.has(candidate)) {\r\n        seen.add(candidate);\r\n        deduped.push(candidate as DomActivityEventName);\r\n      }\r\n    }\r\n    merged.domActivityEvents = deduped;\r\n  } else {\r\n    merged.domActivityEvents = [...base.domActivityEvents];\r\n  }\r\n\r\n  merged.httpActivity.allowlist = [...(merged.httpActivity.allowlist ?? [])];\r\n  merged.httpActivity.denylist = [...(merged.httpActivity.denylist ?? [])];\n\n  return { config: merged, invalidDomActivityEvents, removedSyncMode };\n}\n\r\nfunction createIssue(field: string, message: string): ValidationIssue {\r\n  return { field, message };\r\n}\r\n","import { DestroyRef, Injectable, NgZone, inject } from '@angular/core';\r\nimport { DOCUMENT } from '@angular/common';\r\nimport { Subject } from 'rxjs';\r\n\r\nimport type { ActivityEvent } from '../models/activity-event';\r\nimport type { SessionTimeoutConfig, DomActivityEventName } from '../models/session-timeout-config';\r\nimport { DEFAULT_SESSION_TIMEOUT_CONFIG } from '../defaults';\r\n\r\ntype EventDebounce = 'mouse' | 'key' | 'none';\r\n\r\ninterface DomEventSpec {\r\n  target: 'document' | 'window';\r\n  debounce: EventDebounce;\r\n  options?: AddEventListenerOptions;\r\n}\r\n\r\nconst PASSIVE_EVENT_OPTIONS: AddEventListenerOptions = { passive: true };\r\n\r\nconst DOM_EVENT_SPECS: Record<DomActivityEventName, DomEventSpec> = {\r\n  mousemove: { target: 'document', debounce: 'mouse', options: PASSIVE_EVENT_OPTIONS },\r\n  mousedown: { target: 'document', debounce: 'mouse', options: PASSIVE_EVENT_OPTIONS },\r\n  click: { target: 'document', debounce: 'mouse', options: PASSIVE_EVENT_OPTIONS },\r\n  wheel: { target: 'document', debounce: 'mouse', options: PASSIVE_EVENT_OPTIONS },\r\n  scroll: { target: 'document', debounce: 'mouse', options: PASSIVE_EVENT_OPTIONS },\r\n  keydown: { target: 'document', debounce: 'key' },\r\n  keyup: { target: 'document', debounce: 'key' },\r\n  touchstart: { target: 'document', debounce: 'mouse', options: PASSIVE_EVENT_OPTIONS },\r\n  touchend: { target: 'document', debounce: 'mouse', options: PASSIVE_EVENT_OPTIONS },\r\n  touchmove: { target: 'document', debounce: 'mouse', options: PASSIVE_EVENT_OPTIONS },\r\n  visibilitychange: { target: 'document', debounce: 'none' }\r\n} as const;\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class ActivityDomService {\r\n  private readonly destroyRef = inject(DestroyRef);\r\n  private readonly zone = inject(NgZone);\r\n  private readonly document = inject(DOCUMENT, { optional: true }) as Document | undefined;\r\n\r\n  private readonly eventsSubject = new Subject<ActivityEvent>();\r\n  readonly events$ = this.eventsSubject.asObservable();\r\n\r\n  private config: SessionTimeoutConfig = DEFAULT_SESSION_TIMEOUT_CONFIG;\r\n  private readonly listenerCleanupByEvent = new Map<DomActivityEventName, () => void>();\r\n  private destroyHookRegistered = false;\r\n  private lastMouseEventAt = 0;\r\n  private lastKeyEventAt = 0;\r\n\r\n  updateConfig(config: SessionTimeoutConfig): void {\r\n    this.config = config;\r\n    this.syncEventListeners();\r\n  }\r\n\r\n  private syncEventListeners(): void {\r\n    const doc = this.document;\r\n    if (!doc || typeof window === 'undefined') {\r\n      this.cleanupListeners();\r\n      return;\r\n    }\r\n\r\n    const win = doc.defaultView;\r\n    if (!win) {\r\n      this.cleanupListeners();\r\n      return;\r\n    }\r\n\r\n    const desired = new Set(configuredEvents(this.config.domActivityEvents));\r\n\r\n    for (const [eventName, cleanup] of this.listenerCleanupByEvent) {\r\n      if (!desired.has(eventName)) {\r\n        cleanup();\r\n        this.listenerCleanupByEvent.delete(eventName);\r\n      }\r\n    }\r\n\r\n    const toAdd: DomActivityEventName[] = [];\r\n    for (const eventName of desired) {\r\n      if (!this.listenerCleanupByEvent.has(eventName)) {\r\n        toAdd.push(eventName);\r\n      }\r\n    }\r\n\r\n    if (toAdd.length === 0) {\r\n      this.ensureDestroyHook();\r\n      return;\r\n    }\r\n\r\n    this.zone.runOutsideAngular(() => {\r\n      for (const eventName of toAdd) {\r\n        const spec = DOM_EVENT_SPECS[eventName];\r\n        if (!spec) {\r\n          continue;\r\n        }\r\n        const target = spec.target === 'window' ? win : doc;\r\n        const handler = (event: Event) => this.handleEvent(event, spec.debounce);\r\n        target.addEventListener(eventName, handler, spec.options);\r\n        this.listenerCleanupByEvent.set(eventName, () => {\r\n          target.removeEventListener(eventName, handler, spec.options);\r\n        });\r\n      }\r\n    });\r\n\r\n    this.ensureDestroyHook();\r\n  }\r\n\r\n  private ensureDestroyHook(): void {\r\n    if (this.destroyHookRegistered) {\r\n      return;\r\n    }\r\n    this.destroyRef.onDestroy(() => {\r\n      this.cleanupListeners();\r\n    });\r\n    this.destroyHookRegistered = true;\r\n  }\r\n\r\n  private handleEvent(event: Event, debounce: EventDebounce): void {\r\n    if (!this.document) {\r\n      return;\r\n    }\r\n\r\n    if (event.type === 'visibilitychange' && this.document.visibilityState !== 'visible') {\r\n      return;\r\n    }\r\n\r\n    const now = Date.now();\r\n\r\n    if (debounce === 'mouse') {\r\n      if (now - this.lastMouseEventAt < this.config.debounceMouseMs) {\r\n        return;\r\n      }\r\n      this.lastMouseEventAt = now;\r\n    } else if (debounce === 'key') {\r\n      if (now - this.lastKeyEventAt < this.config.debounceKeyMs) {\r\n        return;\r\n      }\r\n      this.lastKeyEventAt = now;\r\n    }\r\n\r\n    if (this.document.visibilityState === 'hidden' && event.type !== 'visibilitychange') {\r\n      return;\r\n    }\r\n\r\n    const meta: Record<string, unknown> = {\r\n      type: event.type\r\n    };\r\n\r\n    if (typeof KeyboardEvent !== 'undefined' && event instanceof KeyboardEvent) {\r\n      meta['key'] = event.key;\r\n      meta['ctrlKey'] = event.ctrlKey;\r\n      meta['shiftKey'] = event.shiftKey;\r\n      meta['altKey'] = event.altKey;\r\n    } else if (typeof MouseEvent !== 'undefined' && event instanceof MouseEvent) {\r\n      meta['button'] = event.button;\r\n      meta['clientX'] = Math.round(event.clientX);\r\n      meta['clientY'] = Math.round(event.clientY);\r\n    } else if (typeof TouchEvent !== 'undefined' && event instanceof TouchEvent) {\r\n      meta['touches'] = event.touches?.length ?? 0;\r\n    } else if (typeof InputEvent !== 'undefined' && event instanceof InputEvent) {\r\n      meta['inputType'] = event.inputType;\r\n    }\r\n\r\n    const target = event.target as Element | null;\r\n    if (target instanceof Element) {\r\n      meta['target'] = target.tagName.toLowerCase();\r\n    }\r\n\r\n    this.eventsSubject.next({\r\n      source: 'dom',\r\n      at: now,\r\n      meta\r\n    });\r\n  }\r\n\r\n  private cleanupListeners(): void {\r\n    for (const [, cleanup] of this.listenerCleanupByEvent) {\r\n      cleanup();\r\n    }\r\n    this.listenerCleanupByEvent.clear();\r\n  }\r\n}\r\n\r\nfunction configuredEvents(events: readonly DomActivityEventName[] | undefined): readonly DomActivityEventName[] {\r\n  if (!events) {\r\n    return DEFAULT_SESSION_TIMEOUT_CONFIG.domActivityEvents;\r\n  }\r\n  return events;\r\n}\r\n","import { DestroyRef, Injectable, NgZone, inject } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport type { Event as RouterEvent } from '@angular/router';\r\nimport { Subject } from 'rxjs';\r\nimport type { Subscription } from 'rxjs';\r\n\r\nimport type { ActivityEvent } from '../models/activity-event';\r\nimport type { SessionTimeoutConfig } from '../models/session-timeout-config';\r\nimport { DEFAULT_SESSION_TIMEOUT_CONFIG } from '../defaults';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class ActivityRouterService {\r\n  private readonly destroyRef = inject(DestroyRef);\r\n  private readonly zone = inject(NgZone);\r\n  private readonly router = inject(Router, { optional: true });\r\n\r\n  private readonly eventsSubject = new Subject<ActivityEvent>();\r\n  readonly events$ = this.eventsSubject.asObservable();\r\n\r\n  private subscription: Subscription | null = null;\r\n  private config: SessionTimeoutConfig = DEFAULT_SESSION_TIMEOUT_CONFIG;\r\n\r\n  updateConfig(config: SessionTimeoutConfig): void {\r\n    this.config = config;\r\n    if (!config.routerCountsAsActivity) {\r\n      this.stopListening();\r\n      return;\r\n    }\r\n    this.startListening();\r\n  }\r\n\r\n  private startListening(): void {\r\n    if (this.subscription || !this.router) {\r\n      return;\r\n    }\r\n\r\n    const subscribe = () =>\r\n      this.router!.events.subscribe((event: RouterEvent) => {\r\n        if (!this.config.routerCountsAsActivity) {\r\n          return;\r\n        }\r\n        const now = Date.now();\r\n        this.eventsSubject.next({\r\n          source: 'router',\r\n          at: now,\r\n          meta: {\r\n            event: event.constructor.name\r\n          }\r\n        });\r\n      });\r\n\r\n    this.subscription = this.zone.runOutsideAngular(subscribe);\r\n\r\n    this.destroyRef.onDestroy(() => {\r\n      this.stopListening();\r\n    });\r\n  }\r\n\r\n  private stopListening(): void {\r\n    this.subscription?.unsubscribe();\r\n    this.subscription = null;\r\n  }\r\n}\r\n","import { DestroyRef, Injectable, NgZone, computed, inject, signal } from '@angular/core';\r\nimport { toObservable } from '@angular/core/rxjs-interop';\r\n\r\nimport type { SessionTimeoutConfig } from '../models/session-timeout-config';\r\nimport { SESSION_TIMEOUT_CONFIG } from '../tokens/config.token';\r\n\r\ninterface LeaderRecord {\r\n  id: string;\r\n  updatedAt: number;\r\n}\r\n\r\nexport const HEARTBEAT_INTERVAL_MS = 1500;\r\nexport const LEADER_TTL_MS = HEARTBEAT_INTERVAL_MS * 3;\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class LeaderElectionService {\r\n  private readonly destroyRef = inject(DestroyRef);\r\n  private readonly zone = inject(NgZone);\r\n  private readonly providedConfig = inject(SESSION_TIMEOUT_CONFIG, { optional: true }) as\r\n    | SessionTimeoutConfig\r\n    | undefined;\r\n  private readonly leaderSignal = signal<string | null>(null);\r\n  private readonly tabId = generateLeaderId();\r\n  private storageKey: string | null = null;\r\n  private heartbeatTimer: number | null = null;\r\n  private watchdogTimer: number | null = null;\r\n  private storage: Storage | null = this.resolveStorage();\r\n  private isDisposed = false;\r\n\r\n  readonly leaderId = this.leaderSignal.asReadonly();\r\n  readonly isLeader = computed(() => this.leaderSignal() === this.tabId);\r\n  readonly leader$ = toObservable(this.leaderId);\r\n  readonly isLeader$ = toObservable(this.isLeader);\r\n\r\n  constructor() {\r\n    this.applyConfig(this.providedConfig);\r\n\r\n    if (!this.storage || !this.storageKey) {\r\n      return;\r\n    }\r\n\r\n    this.initialize();\r\n  }\r\n\r\n  updateConfig(config: SessionTimeoutConfig): void {\r\n    this.applyConfig(config);\r\n    if (!this.storage || !this.storageKey || this.isDisposed) {\r\n      return;\r\n    }\r\n    this.evaluateLeadership();\r\n  }\r\n\r\n  electLeader(): void {\r\n    this.evaluateLeadership();\r\n  }\r\n\r\n  stepDown(): void {\r\n    if (!this.storage || !this.storageKey) {\r\n      return;\r\n    }\r\n\r\n    if (this.leaderSignal() === this.tabId) {\r\n      try {\r\n        const record = this.readLeaderRecord();\r\n        if (record?.id === this.tabId) {\r\n          this.storage.removeItem(this.storageKey);\r\n        }\r\n      } catch (error) {\r\n        console.warn('[ng2-idle-timeout] Unable to release leader record', error);\r\n      }\r\n    }\r\n\r\n    this.stopHeartbeat();\r\n    this.leaderSignal.set(null);\r\n  }\r\n\r\n  private initialize(): void {\r\n    this.destroyRef.onDestroy(() => {\r\n      this.cleanup();\r\n    });\r\n\r\n    this.evaluateLeadership();\r\n    this.startWatchdog();\r\n\r\n    if (typeof window !== 'undefined') {\r\n      window.addEventListener('storage', this.handleStorageEvent);\r\n      window.addEventListener('beforeunload', this.handleBeforeUnload);\r\n    }\r\n  }\r\n\r\n  private cleanup(): void {\r\n    if (this.isDisposed) {\r\n      return;\r\n    }\r\n    this.isDisposed = true;\r\n    this.stopHeartbeat();\r\n    this.stopWatchdog();\r\n    if (typeof window !== 'undefined') {\r\n      window.removeEventListener('storage', this.handleStorageEvent);\r\n      window.removeEventListener('beforeunload', this.handleBeforeUnload);\r\n    }\r\n  }\r\n\r\n  private readonly handleBeforeUnload = (): void => {\r\n    this.stepDown();\r\n  };\r\n\r\n  private readonly handleStorageEvent = (event: StorageEvent): void => {\r\n    if (!this.storageKey || event.key !== this.storageKey) {\r\n      return;\r\n    }\r\n\r\n    this.zone.run(() => {\r\n      if (event.newValue == null) {\r\n        if (this.leaderSignal() !== this.tabId) {\r\n          this.leaderSignal.set(null);\r\n        }\r\n        return;\r\n      }\r\n\r\n      try {\r\n        const record = JSON.parse(event.newValue) as LeaderRecord;\r\n        if (record.id === this.tabId) {\r\n          this.ensureHeartbeat();\r\n          this.leaderSignal.set(this.tabId);\r\n        } else {\r\n          const now = Date.now();\r\n          if (now - record.updatedAt > LEADER_TTL_MS) {\r\n            this.evaluateLeadership();\r\n            return;\r\n          }\r\n          this.stopHeartbeat();\r\n          this.leaderSignal.set(record.id);\r\n        }\r\n      } catch (error) {\r\n        console.warn('[ng2-idle-timeout] Invalid leader record from storage', error);\r\n      }\r\n    });\r\n  };\r\n\r\n  private applyConfig(config: SessionTimeoutConfig | undefined): void {\r\n    const storageKeyPrefix = config?.storageKeyPrefix ?? 'ng2-idle-timeout';\r\n    const appInstanceId = config?.appInstanceId ?? 'ng2-idle-timeout';\r\n    const nextKey = `${appInstanceId}:${storageKeyPrefix}:leader`;\r\n\r\n    if (this.storageKey === nextKey) {\r\n      return;\r\n    }\r\n\r\n    this.storageKey = nextKey;\r\n    if (this.storage) {\r\n      this.evaluateLeadership();\r\n    }\r\n  }\r\n\r\n  private resolveStorage(): Storage | null {\r\n    if (typeof window === 'undefined') {\r\n      return null;\r\n    }\r\n\r\n    try {\r\n      return window.localStorage;\r\n    } catch (error) {\r\n      console.warn('[ng2-idle-timeout] Leader election storage unavailable', error);\r\n      return null;\r\n    }\r\n  }\r\n\r\n  private evaluateLeadership(): void {\r\n    if (!this.storage || !this.storageKey || this.isDisposed) {\r\n      return;\r\n    }\r\n\r\n    const record = this.readLeaderRecord();\r\n    const now = Date.now();\r\n\r\n    if (record?.id === this.tabId) {\r\n      this.leaderSignal.set(this.tabId);\r\n      this.ensureHeartbeat();\r\n      return;\r\n    }\r\n\r\n    if (!record || now - record.updatedAt > LEADER_TTL_MS ) {\r\n      this.claimLeadership();\r\n      return;\r\n    }\r\n\r\n    this.leaderSignal.set(record.id);\r\n    this.stopHeartbeat();\r\n  }\r\n\r\n  private claimLeadership(): void {\r\n    if (!this.storage || !this.storageKey || this.isDisposed) {\r\n      return;\r\n    }\r\n\r\n    const record: LeaderRecord = {\r\n      id: this.tabId,\r\n      updatedAt: Date.now()\r\n    };\r\n\r\n    try {\r\n      this.storage.setItem(this.storageKey, JSON.stringify(record));\r\n      this.leaderSignal.set(this.tabId);\r\n      this.ensureHeartbeat();\r\n    } catch (error) {\r\n      console.warn('[ng2-idle-timeout] Unable to persist leader record', error);\r\n    }\r\n  }\r\n\r\n  private readLeaderRecord(): LeaderRecord | null {\r\n    if (!this.storage || !this.storageKey) {\r\n      return null;\r\n    }\r\n\r\n    try {\r\n      const raw = this.storage.getItem(this.storageKey);\r\n      if (!raw) {\r\n        return null;\r\n      }\r\n      return JSON.parse(raw) as LeaderRecord;\r\n    } catch (error) {\r\n      console.warn('[ng2-idle-timeout] Unable to read leader record', error);\r\n      return null;\r\n    }\r\n  }\r\n\r\n  private startWatchdog(): void {\r\n    if (!this.storage || this.watchdogTimer != null || typeof window === 'undefined') {\r\n      return;\r\n    }\r\n\r\n    this.zone.runOutsideAngular(() => {\r\n      this.watchdogTimer = window.setInterval(() => {\r\n        this.zone.run(() => {\r\n          this.evaluateLeadership();\r\n        });\r\n      }, HEARTBEAT_INTERVAL_MS);\r\n    });\r\n  }\r\n\r\n  private stopWatchdog(): void {\r\n    if (this.watchdogTimer != null && typeof window !== 'undefined') {\r\n      window.clearInterval(this.watchdogTimer);\r\n    }\r\n    this.watchdogTimer = null;\r\n  }\r\n\r\n  private startHeartbeat(): void {\r\n    if (!this.storage || this.heartbeatTimer != null || typeof window === 'undefined') {\r\n      return;\r\n    }\r\n\r\n    if (!this.isLeader()) {\r\n      return;\r\n    }\r\n\r\n    this.zone.runOutsideAngular(() => {\r\n      this.heartbeatTimer = window.setInterval(() => {\r\n        this.zone.run(() => {\r\n          this.touchLeaderRecord();\r\n        });\r\n      }, HEARTBEAT_INTERVAL_MS);\r\n    });\r\n  }\r\n\r\n  private ensureHeartbeat(): void {\r\n    if (this.heartbeatTimer == null) {\r\n      this.startHeartbeat();\r\n    }\r\n  }\r\n\r\n  private stopHeartbeat(): void {\r\n    if (this.heartbeatTimer != null && typeof window !== 'undefined') {\r\n      window.clearInterval(this.heartbeatTimer);\r\n    }\r\n    this.heartbeatTimer = null;\r\n  }\r\n\r\n  private touchLeaderRecord(): void {\r\n    if (!this.storage || !this.storageKey || this.isDisposed) {\r\n      return;\r\n    }\r\n\r\n    if (this.leaderSignal() !== this.tabId) {\r\n      this.stopHeartbeat();\r\n      return;\r\n    }\r\n\r\n    const record: LeaderRecord = {\r\n      id: this.tabId,\r\n      updatedAt: Date.now()\r\n    };\r\n\r\n    try {\r\n      this.storage.setItem(this.storageKey, JSON.stringify(record));\r\n    } catch (error) {\r\n      console.warn('[ng2-idle-timeout] Unable to update leader heartbeat', error);\r\n    }\r\n  }\r\n}\r\n\r\nfunction generateLeaderId(): string {\r\n  if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {\r\n    return crypto.randomUUID();\r\n  }\r\n  return Math.random().toString(36).slice(2);\r\n}\r\n","import { inject } from '@angular/core';\r\nimport { DOCUMENT } from '@angular/common';\r\n\r\nimport type { SessionSnapshot, SessionState } from '../models/session-state';\r\nimport type { SessionActionDelays, SessionTimeoutConfig, DomActivityEventName } from '../models/session-timeout-config';\r\nimport { DEFAULT_SESSION_TIMEOUT_CONFIG } from '../defaults';\r\n\r\nexport interface StorageAdapter {\r\n  read(key: string): string | null;\r\n  write(key: string, value: string): void;\r\n  remove(key: string): void;\r\n}\r\n\r\nexport interface PersistedSnapshot {\r\n  state: SessionState;\r\n  idleStartAt: number | null;\r\n  countdownEndAt: number | null;\r\n  lastActivityAt: number | null;\r\n  remainingMs: number;\r\n  paused: boolean;\r\n  updatedAt: number;\r\n}\r\n\r\nexport interface PersistedConfig {\r\n  version: 1;\r\n  updatedAt: number;\r\n  config: SerializedConfig;\r\n}\r\n\r\ninterface SerializedConfig {\n  idleGraceMs: number;\n  countdownMs: number;\n  warnBeforeMs: number;\n  pollingMs: number;\n  activityResetCooldownMs?: number;\n  storageKeyPrefix: string;\n  strategy: SessionTimeoutConfig['strategy'];\n  httpActivity: SerializedHttpConfig;\n  actionDelays?: Partial<SessionActionDelays>;\n  openNewTabBehavior: SessionTimeoutConfig['openNewTabBehavior'];\n  routerCountsAsActivity: boolean;\n  domActivityEvents?: DomActivityEventName[];\r\n  debounceMouseMs: number;\r\n  debounceKeyMs: number;\r\n  maxExtendPerSession: number;\r\n  onExpire: SessionTimeoutConfig['onExpire'];\r\n  timeSource: SessionTimeoutConfig['timeSource'];\n  serverTimeEndpoint?: string;\n  logging: SessionTimeoutConfig['logging'];\n  resetOnWarningActivity: boolean;\n  ignoreUserActivityWhenPaused: boolean;\n  allowManualExtendWhenExpired: boolean;\n}\n\r\ninterface SerializedHttpConfig {\r\n  enabled: boolean;\r\n  strategy: SessionTimeoutConfig['httpActivity']['strategy'];\r\n  allowlist: Array<{ source: string; flags: string }>;\r\n  denylist: Array<{ source: string; flags: string }>;\r\n  headerFlag?: string;\r\n  contextToken?: string;\r\n  ignoreOnInitMs: number;\r\n  cooldownMs: number;\r\n  onlyWhenTabFocused: boolean;\r\n  primaryTabOnly: boolean;\r\n}\r\n\r\nexport function createStorage(): StorageAdapter {\r\n  const doc = inject(DOCUMENT, { optional: true });\r\n  if (!doc || typeof window === 'undefined') {\r\n    return createNoopStorage();\r\n  }\r\n  try {\r\n    const storage = window.localStorage;\r\n    storage.setItem('__ng2_idle_probing__', '1');\r\n    storage.removeItem('__ng2_idle_probing__');\r\n    return {\r\n      read: key => storage.getItem(key),\r\n      write: (key, value) => storage.setItem(key, value),\r\n      remove: key => storage.removeItem(key)\r\n    };\r\n  } catch (err) {\r\n    console.warn('[ng2-idle-timeout] Falling back to noop storage due to error', err);\r\n    return createNoopStorage();\r\n  }\r\n}\r\n\r\nfunction createNoopStorage(): StorageAdapter {\r\n  const memory = new Map<string, string>();\r\n  return {\r\n    read: key => memory.get(key) ?? null,\r\n    write: (key, value) => memory.set(key, value),\r\n    remove: key => memory.delete(key)\r\n  };\r\n}\r\n\r\nexport function persistSnapshot(adapter: StorageAdapter, prefix: string, snapshot: SessionSnapshot): void {\r\n  try {\r\n    const payload: PersistedSnapshot = {\r\n      state: snapshot.state,\r\n      idleStartAt: snapshot.idleStartAt,\r\n      countdownEndAt: snapshot.countdownEndAt,\r\n      lastActivityAt: snapshot.lastActivityAt,\r\n      remainingMs: snapshot.remainingMs,\r\n      paused: snapshot.paused,\r\n      updatedAt: Date.now()\r\n    };\r\n    adapter.write(`${prefix}:snapshot`, JSON.stringify(payload));\r\n  } catch (error) {\r\n    console.warn('[ng2-idle-timeout] Unable to persist snapshot', error);\r\n  }\r\n}\r\n\r\nexport function readSnapshot(adapter: StorageAdapter, prefix: string): PersistedSnapshot | null {\r\n  try {\r\n    const raw = adapter.read(`${prefix}:snapshot`);\r\n    if (!raw) {\r\n      return null;\r\n    }\r\n    return JSON.parse(raw) as PersistedSnapshot;\r\n  } catch (error) {\r\n    console.warn('[ng2-idle-timeout] Unable to read snapshot', error);\r\n    return null;\r\n  }\r\n}\r\n\r\nexport function clearSnapshot(adapter: StorageAdapter, prefix: string): void {\r\n  try {\r\n    adapter.remove(`${prefix}:snapshot`);\r\n  } catch (error) {\r\n    console.warn('[ng2-idle-timeout] Unable to clear snapshot', error);\r\n  }\r\n}\r\n\r\nexport function persistConfig(adapter: StorageAdapter, prefix: string, config: SessionTimeoutConfig): void {\r\n  try {\r\n    const payload: PersistedConfig = {\r\n      version: 1,\r\n      updatedAt: Date.now(),\r\n      config: serializeConfig(config)\r\n    };\r\n    adapter.write(`${prefix}:config`, JSON.stringify(payload));\r\n  } catch (error) {\r\n    console.warn('[ng2-idle-timeout] Unable to persist config', error);\r\n  }\r\n}\r\n\r\nexport function readPersistedConfig(adapter: StorageAdapter, prefix: string): SessionTimeoutConfig | null {\r\n  try {\r\n    const raw = adapter.read(`${prefix}:config`);\r\n    if (!raw) {\r\n      return null;\r\n    }\r\n    const payload = JSON.parse(raw) as PersistedConfig;\r\n    if (payload.version !== 1) {\r\n      return null;\r\n    }\r\n    return deserializeConfig(payload.config);\r\n  } catch (error) {\r\n    console.warn('[ng2-idle-timeout] Unable to read persisted config', error);\r\n    return null;\r\n  }\r\n}\r\n\r\nfunction serializeConfig(config: SessionTimeoutConfig): SerializedConfig {\n  return {\n    idleGraceMs: config.idleGraceMs,\n    countdownMs: config.countdownMs,\n    warnBeforeMs: config.warnBeforeMs,\n    pollingMs: config.pollingMs,\n    activityResetCooldownMs: config.activityResetCooldownMs,\n    storageKeyPrefix: config.storageKeyPrefix,\n    strategy: config.strategy,\n    httpActivity: serializeHttpConfig(config.httpActivity),\n    actionDelays: { ...config.actionDelays },\n    openNewTabBehavior: config.openNewTabBehavior,\n    routerCountsAsActivity: config.routerCountsAsActivity,\n    domActivityEvents: [...config.domActivityEvents],\r\n    debounceMouseMs: config.debounceMouseMs,\r\n    debounceKeyMs: config.debounceKeyMs,\r\n    maxExtendPerSession: config.maxExtendPerSession,\r\n    onExpire: config.onExpire,\r\n    timeSource: config.timeSource,\r\n    serverTimeEndpoint: config.serverTimeEndpoint,\r\n    logging: config.logging,\n    resetOnWarningActivity: config.resetOnWarningActivity,\n    ignoreUserActivityWhenPaused: config.ignoreUserActivityWhenPaused,\n    allowManualExtendWhenExpired: config.allowManualExtendWhenExpired\r\n  };\r\n}\r\n\r\nfunction serializeHttpConfig(config: SessionTimeoutConfig['httpActivity']): SerializedHttpConfig {\r\n  return {\r\n    enabled: config.enabled,\r\n    strategy: config.strategy,\r\n    allowlist: config.allowlist.map(serializeRegExp),\r\n    denylist: config.denylist.map(serializeRegExp),\r\n    headerFlag: config.headerFlag,\r\n    contextToken: config.contextToken,\r\n    ignoreOnInitMs: config.ignoreOnInitMs,\r\n    cooldownMs: config.cooldownMs,\r\n    onlyWhenTabFocused: config.onlyWhenTabFocused,\r\n    primaryTabOnly: config.primaryTabOnly\r\n  };\r\n}\r\n\r\nfunction serializeRegExp(value: RegExp): { source: string; flags: string } {\r\n  return { source: value.source, flags: value.flags };\r\n}\r\n\r\nfunction deserializeConfig(serialized: SerializedConfig): SessionTimeoutConfig {\n  const mergedDelays: SessionActionDelays = {\n    ...DEFAULT_SESSION_TIMEOUT_CONFIG.actionDelays,\n    ...(serialized.actionDelays ?? {})\n  };\n\n  return {\n    idleGraceMs: serialized.idleGraceMs,\n    countdownMs: serialized.countdownMs,\n    warnBeforeMs: serialized.warnBeforeMs,\n    pollingMs: serialized.pollingMs,\n    activityResetCooldownMs: serialized.activityResetCooldownMs ?? DEFAULT_SESSION_TIMEOUT_CONFIG.activityResetCooldownMs,\n    storageKeyPrefix: serialized.storageKeyPrefix,\n    appInstanceId: undefined,\n    strategy: serialized.strategy,\n    httpActivity: deserializeHttpConfig(serialized.httpActivity),\n    actionDelays: mergedDelays,\n    openNewTabBehavior: serialized.openNewTabBehavior,\n    routerCountsAsActivity: serialized.routerCountsAsActivity,\r\n    domActivityEvents: [...(serialized.domActivityEvents ?? DEFAULT_SESSION_TIMEOUT_CONFIG.domActivityEvents)],\r\n    debounceMouseMs: serialized.debounceMouseMs,\r\n    debounceKeyMs: serialized.debounceKeyMs,\r\n    maxExtendPerSession: serialized.maxExtendPerSession,\r\n    onExpire: serialized.onExpire,\r\n    timeSource: serialized.timeSource,\r\n    serverTimeEndpoint: serialized.serverTimeEndpoint,\r\n    logging: serialized.logging,\n    resetOnWarningActivity: serialized.resetOnWarningActivity ?? DEFAULT_SESSION_TIMEOUT_CONFIG.resetOnWarningActivity,\n    ignoreUserActivityWhenPaused: serialized.ignoreUserActivityWhenPaused,\n    allowManualExtendWhenExpired: serialized.allowManualExtendWhenExpired\r\n  };\r\n}\r\n\r\nfunction deserializeHttpConfig(serialized: SerializedHttpConfig): SessionTimeoutConfig['httpActivity'] {\r\n  return {\r\n    enabled: serialized.enabled,\r\n    strategy: serialized.strategy,\r\n    allowlist: serialized.allowlist.map(reviveRegExp),\r\n    denylist: serialized.denylist.map(reviveRegExp),\r\n    headerFlag: serialized.headerFlag,\r\n    contextToken: serialized.contextToken,\r\n    ignoreOnInitMs: serialized.ignoreOnInitMs,\r\n    cooldownMs: serialized.cooldownMs,\r\n    onlyWhenTabFocused: serialized.onlyWhenTabFocused,\r\n    primaryTabOnly: serialized.primaryTabOnly\r\n  };\r\n}\r\n\r\nfunction reviveRegExp(serialized: { source: string; flags: string }): RegExp {\r\n  try {\r\n    return new RegExp(serialized.source, serialized.flags);\r\n  } catch (error) {\r\n    console.warn('[ng2-idle-timeout] Failed to revive RegExp from storage', error);\r\n    return new RegExp(serialized.source);\r\n  }\r\n}\r\n\r\n\r\n\r\n\r\n\r\n","import { DestroyRef, Injectable, NgZone, inject } from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\n\r\nimport { TimeSourceService } from './time-source.service';\r\nimport type { SessionTimeoutConfig } from '../models/session-timeout-config';\r\nimport { DEFAULT_SESSION_TIMEOUT_CONFIG } from '../defaults';\r\nimport {\r\n  SHARED_STATE_VERSION,\r\n  type SharedSessionState,\r\n  type SharedStateMessage,\r\n  type SharedStateBroadcastMessage,\r\n  type SharedStateMetadata,\r\n  type SharedStateOperation,\r\n  type SharedConfigPayload\r\n} from '../models/session-shared-state';\r\nimport { SESSION_TIMEOUT_CONFIG } from '../tokens/config.token';\r\nimport { createBroadcastChannel, type BroadcastAdapter } from '../utils/broadcast-channel';\r\nimport { createStorage, type StorageAdapter } from '../utils/storage';\r\n\r\nexport interface SharedStatePublishOptions {\r\n  persist?: boolean;\r\n  broadcast?: boolean;\r\n}\r\n\r\ninterface LegacySharedConfigPayload\r\n  extends Omit<SharedConfigPayload, 'revision' | 'logicalClock' | 'writerId'>,\r\n    Partial<Pick<SharedConfigPayload, 'revision' | 'logicalClock' | 'writerId'>> {}\r\n\r\ntype LegacySharedSessionState = Omit<SharedSessionState, 'version' | 'metadata' | 'config'> & {\r\n  version?: number;\r\n  metadata?: Partial<SharedStateMetadata>;\r\n  config: LegacySharedConfigPayload;\r\n};\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class SharedStateCoordinatorService {\r\n  private readonly destroyRef = inject(DestroyRef);\r\n  private readonly zone = inject(NgZone);\r\n  private readonly timeSource = inject(TimeSourceService);\r\n  private readonly providedConfig = inject(SESSION_TIMEOUT_CONFIG, { optional: true }) as\r\n    | SessionTimeoutConfig\r\n    | undefined;\r\n\r\n  private readonly storage: StorageAdapter = createStorage();\r\n  private readonly updatesSubject = new Subject<SharedStateMessage>();\r\n\r\n  private channel: BroadcastAdapter | null = null;\r\n  private channelName: string | null = null;\r\n  private storageKey: string | null = null;\r\n  private namespace: string | null = null;\r\n  private disposed = false;\r\n\r\n  private currentConfig: SessionTimeoutConfig | null = null;\r\n  private readonly sourceId = generateCoordinatorId();\r\n\r\n  readonly updates$ = this.updatesSubject.asObservable();\r\n\r\n  getSourceId(): string {\r\n    return this.sourceId;\r\n  }\r\n\r\n  constructor() {\r\n    if (this.providedConfig) {\r\n      this.applyConfig(this.providedConfig);\r\n    } else {\r\n      this.applyConfig(undefined);\r\n    }\r\n\r\n    this.destroyRef.onDestroy(() => {\r\n      this.disposed = true;\r\n      this.teardownChannel();\r\n      this.updatesSubject.complete();\r\n    });\r\n  }\r\n\r\n  updateConfig(config: SessionTimeoutConfig): void {\r\n    this.applyConfig(config);\r\n  }\r\n\r\n  publishState(state: SharedSessionState, options?: SharedStatePublishOptions): void {\r\n    if (this.disposed) {\r\n      return;\r\n    }\r\n    const normalized = this.normalizeState(state);\r\n    const persist = options?.persist ?? true;\r\n    const broadcast = options?.broadcast ?? true;\r\n\r\n    if (persist) {\r\n      this.persistSharedState(normalized);\r\n    }\r\n\r\n    if (broadcast) {\r\n      this.publishMessage({\r\n        type: 'state',\r\n        at: this.timeSource.now(),\r\n        sourceId: this.sourceId,\r\n        state: normalized\r\n      });\r\n    }\r\n  }\r\n\r\n  requestSync(reason?: string, expectReply?: boolean): void {\r\n    if (this.disposed) {\r\n      return;\r\n    }\r\n    this.publishMessage({\r\n      type: 'request-sync',\r\n      sourceId: this.sourceId,\r\n      at: this.timeSource.now(),\r\n      reason,\r\n      expectReply\r\n    });\r\n  }\r\n\r\n  readPersistedState(): SharedSessionState | null {\r\n    if (!this.storageKey) {\r\n      return null;\r\n    }\r\n\r\n    try {\r\n      const raw = this.storage.read(this.storageKey);\r\n      if (!raw) {\r\n        return null;\r\n      }\r\n      const parsed = JSON.parse(raw) as unknown;\r\n      return this.coerceSharedState(parsed);\r\n    } catch (error) {\r\n      console.warn('[ng2-idle-timeout] Unable to parse shared state from storage', error);\r\n      return null;\r\n    }\r\n  }\r\n\r\n  clearPersistedState(): void {\r\n    if (!this.storageKey) {\r\n      return;\r\n    }\r\n    try {\r\n      this.storage.remove(this.storageKey);\r\n    } catch (error) {\r\n      console.warn('[ng2-idle-timeout] Unable to clear shared state from storage', error);\r\n    }\r\n  }\r\n\r\n  private applyConfig(config: SessionTimeoutConfig | undefined): void {\r\n    const effective = config ?? this.currentConfig ?? DEFAULT_SESSION_TIMEOUT_CONFIG;\r\n    this.currentConfig = effective;\r\n    const prefix = effective.storageKeyPrefix ?? 'ng2-idle-timeout';\r\n    const namespace = effective.appInstanceId ?? 'ng2-idle-timeout';\r\n    const nextChannelName = `${namespace}:${prefix}:shared-state`;\r\n    const nextStorageKey = `${prefix}:shared-state`;\r\n\r\n    const shouldRecreateChannel = this.channelName !== nextChannelName || this.namespace !== namespace;\r\n    this.storageKey = nextStorageKey;\r\n    this.channelName = nextChannelName;\r\n    this.namespace = namespace;\r\n\r\n    if (shouldRecreateChannel) {\r\n      this.setupChannel(nextChannelName);\r\n    }\r\n  }\r\n\r\n  private setupChannel(name: string): void {\r\n    this.teardownChannel();\r\n    const adapter = createBroadcastChannel(name);\r\n    if (!adapter) {\r\n      this.channel = null;\r\n      return;\r\n    }\r\n\r\n    adapter.subscribe(event => {\r\n      const message = event?.data;\r\n      this.zone.run(() => this.handleIncomingMessage(message));\r\n    });\r\n\r\n    this.channel = adapter;\r\n  }\r\n\r\n  private teardownChannel(): void {\r\n    this.channel?.close();\r\n    this.channel = null;\r\n  }\r\n\r\n  private persistSharedState(state: SharedSessionState): void {\r\n    if (!this.storageKey) {\r\n      return;\r\n    }\r\n    try {\r\n      this.storage.write(this.storageKey, JSON.stringify(state));\r\n    } catch (error) {\r\n      console.warn('[ng2-idle-timeout] Unable to persist shared state', error);\r\n    }\r\n  }\r\n\r\n  private publishMessage(message: SharedStateMessage): void {\r\n    if (!this.channel) {\r\n      return;\r\n    }\r\n    try {\r\n      this.channel.publish(message);\r\n    } catch (error) {\r\n      console.warn('[ng2-idle-timeout] Failed to broadcast shared state message', error);\r\n    }\r\n  }\r\n\r\n  private handleIncomingMessage(payload: unknown): void {\r\n    if (!payload || typeof payload !== 'object') {\r\n      return;\r\n    }\r\n\r\n    if (!this.isSharedStateMessage(payload)) {\r\n      return;\r\n    }\r\n\r\n    if (payload.sourceId === this.sourceId) {\r\n      return;\r\n    }\r\n\r\n    if (payload.type === 'state') {\r\n      const normalized = this.coerceSharedState((payload as SharedStateBroadcastMessage).state);\r\n      if (!normalized) {\r\n        return;\r\n      }\r\n      this.persistSharedState(normalized);\r\n      const message: SharedStateBroadcastMessage = {\r\n        type: 'state',\r\n        sourceId: payload.sourceId,\r\n        at: payload.at,\r\n        state: normalized\r\n      };\r\n      this.updatesSubject.next(message);\r\n      return;\r\n    }\r\n\r\n    this.updatesSubject.next(payload);\r\n  }\r\n\r\n  private normalizeState(state: LegacySharedSessionState | SharedSessionState): SharedSessionState {\n    const updatedAt = typeof state.updatedAt === 'number' ? state.updatedAt : this.timeSource.now();\n    const leader = state.leader && this.isLeaderInfo(state.leader) ? state.leader : null;\n    const snapshot = this.normalizeSnapshot(state.snapshot);\n    const config = this.normalizeConfig(state.config);\n    const metadata = this.normalizeMetadata(state.metadata, updatedAt);\n    return {\n      version: SHARED_STATE_VERSION,\n      updatedAt,\n      leader,\n      metadata,\n      snapshot,\n      config\n    };\n  }\r\n\r\n  private normalizeMetadata(\r\n    metadata: Partial<SharedStateMetadata> | undefined,\r\n    fallbackClock: number\r\n  ): SharedStateMetadata {\r\n    const writerId =\r\n      typeof metadata?.writerId === 'string' && metadata.writerId.length > 0 ? metadata.writerId : this.sourceId;\r\n    const logicalClock =\r\n      typeof metadata?.logicalClock === 'number' && Number.isFinite(metadata.logicalClock) && metadata.logicalClock > 0\r\n        ? metadata.logicalClock\r\n        : fallbackClock;\r\n    const revision =\r\n      typeof metadata?.revision === 'number' && Number.isFinite(metadata.revision) && metadata.revision > 0\r\n        ? metadata.revision\r\n        : 1;\r\n    const operation = this.normalizeOperation(metadata?.operation);\r\n    const causalityToken =\r\n      typeof metadata?.causalityToken === 'string' && metadata.causalityToken.length > 0\r\n        ? metadata.causalityToken\r\n        : writerId + ':' + logicalClock;\r\n    return { revision, logicalClock, writerId, operation, causalityToken };\r\n  }\r\n\r\n  private normalizeOperation(operation: SharedStateOperation | undefined): SharedStateOperation {\r\n    switch (operation) {\r\n      case 'reset-by-activity':\r\n      case 'manual-extend':\r\n      case 'auto-extend':\r\n      case 'pause':\r\n      case 'resume':\r\n      case 'expire':\r\n      case 'config-change':\r\n      case 'bootstrap':\r\n        return operation;\r\n      default:\r\n        return 'bootstrap';\r\n    }\r\n  }\r\n\r\n  private normalizeSnapshot(snapshot: unknown): SharedSessionState['snapshot'] {\r\n    if (!this.isSharedSnapshot(snapshot)) {\r\n      throw new Error('invalid shared snapshot');\r\n    }\r\n    const record = snapshot as SharedSessionState['snapshot'];\r\n    return {\r\n      state: record.state,\r\n      remainingMs: record.remainingMs,\r\n      idleStartAt: record.idleStartAt ?? null,\r\n      countdownEndAt: record.countdownEndAt ?? null,\r\n      lastActivityAt: record.lastActivityAt ?? null,\r\n      paused: record.paused ?? false\r\n    };\r\n  }\r\n\r\n  private normalizeConfig(config: unknown): SharedConfigPayload {\n    if (!this.isLegacySharedConfig(config)) {\n      throw new Error('invalid shared config');\n    }\n    const record = config as LegacySharedConfigPayload;\n    return {\n      idleGraceMs: record.idleGraceMs,\n      countdownMs: record.countdownMs,\n      warnBeforeMs: record.warnBeforeMs,\n      activityResetCooldownMs: record.activityResetCooldownMs,\n      storageKeyPrefix: record.storageKeyPrefix,\n      resumeBehavior: record.resumeBehavior,\n      resetOnWarningActivity:\n        typeof record.resetOnWarningActivity === 'boolean'\n          ? record.resetOnWarningActivity\n          : DEFAULT_SESSION_TIMEOUT_CONFIG.resetOnWarningActivity,\n      ignoreUserActivityWhenPaused: record.ignoreUserActivityWhenPaused,\r\n      allowManualExtendWhenExpired: record.allowManualExtendWhenExpired,\r\n      revision:\r\n        typeof record.revision === 'number' && Number.isFinite(record.revision) && record.revision > 0\r\n          ? record.revision\r\n          : 1,\r\n      logicalClock:\r\n        typeof record.logicalClock === 'number' &&\r\n        Number.isFinite(record.logicalClock) &&\r\n        record.logicalClock > 0\r\n          ? record.logicalClock\r\n          : 1,\r\n      writerId: typeof record.writerId === 'string' && record.writerId.length > 0 ? record.writerId : this.sourceId\r\n    };\r\n  }\r\n\r\n  private coerceSharedState(candidate: unknown): SharedSessionState | null {\r\n    if (!candidate || typeof candidate !== 'object') {\r\n      return null;\r\n    }\r\n    try {\r\n      const normalized = this.normalizeState(candidate as LegacySharedSessionState | SharedSessionState);\r\n      return this.isSharedSessionState(normalized) ? normalized : null;\r\n    } catch {\r\n      return null;\r\n    }\r\n  }\r\n\r\n  private isSharedStateMessage(payload: unknown): payload is SharedStateMessage {\r\n    if (!payload || typeof payload !== 'object') {\r\n      return false;\r\n    }\r\n    const record = payload as Record<string, unknown>;\r\n    const type = record['type'];\r\n    const sourceId = record['sourceId'];\r\n    const at = record['at'];\r\n\r\n    if (typeof type !== 'string' || typeof sourceId !== 'string' || typeof at !== 'number') {\r\n      return false;\r\n    }\r\n\r\n    if (type === 'state') {\r\n      const stateCandidate = record['state'];\r\n      return typeof stateCandidate === 'object' && stateCandidate !== null;\r\n    }\r\n\r\n    if (type === 'request-sync') {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  private isSharedSessionState(candidate: unknown): candidate is SharedSessionState {\r\n    if (!candidate || typeof candidate !== 'object') {\r\n      return false;\r\n    }\r\n    const record = candidate as Record<string, unknown>;\r\n    const version = record['version'];\r\n    if (version !== SHARED_STATE_VERSION) {\r\n      return false;\r\n    }\r\n    const snapshot = record['snapshot'];\r\n    const config = record['config'];\r\n    const metadata = record['metadata'];\r\n    if (!this.isSharedSnapshot(snapshot) || !this.isSharedConfig(config) || !this.isSharedMetadata(metadata)) {\r\n      return false;\r\n    }\n    const leader = record['leader'];\n    if (leader != null && !this.isLeaderInfo(leader)) {\n      return false;\n    }\n    const updatedAt = record['updatedAt'];\n    return typeof updatedAt === 'number';\n  }\n\r\n  private isSharedSnapshot(snapshot: unknown): snapshot is SharedSessionState['snapshot'] {\r\n    if (!snapshot || typeof snapshot !== 'object') {\r\n      return false;\r\n    }\r\n    const record = snapshot as Record<string, unknown>;\r\n    const state = record['state'];\r\n    const remainingMs = record['remainingMs'];\r\n    const idleStartAt = record['idleStartAt'];\r\n    const countdownEndAt = record['countdownEndAt'];\r\n    const lastActivityAt = record['lastActivityAt'];\r\n    const paused = record['paused'];\r\n    return (\r\n      typeof state === 'string' &&\r\n      typeof remainingMs === 'number' &&\r\n      (idleStartAt === null || typeof idleStartAt === 'number') &&\r\n      (countdownEndAt === null || typeof countdownEndAt === 'number') &&\r\n      (lastActivityAt === null || typeof lastActivityAt === 'number') &&\r\n      typeof paused === 'boolean'\r\n    );\r\n  }\r\n\r\n  private isLegacySharedConfig(config: unknown): config is LegacySharedConfigPayload {\r\n    if (!config || typeof config !== 'object') {\r\n      return false;\r\n    }\r\n    const record = config as unknown as Record<string, unknown>;\r\n    const resumeBehavior = record['resumeBehavior'];\r\n    const idleGraceMs = record['idleGraceMs'];\r\n    const countdownMs = record['countdownMs'];\r\n    const warnBeforeMs = record['warnBeforeMs'];\r\n    const activityResetCooldownMs = record['activityResetCooldownMs'];\r\n    const storageKeyPrefix = record['storageKeyPrefix'];\r\n    const ignoreUserActivityWhenPaused = record['ignoreUserActivityWhenPaused'];\n    const allowManualExtendWhenExpired = record['allowManualExtendWhenExpired'];\n    const resetOnWarningActivity = record['resetOnWarningActivity'];\n    const syncMode = record['syncMode'];\n    const resumeValid =\n      resumeBehavior === undefined || resumeBehavior === 'manual' || resumeBehavior === 'autoOnServerSync';\n    const syncModeValid =\n      syncMode === undefined ||\n      syncMode === 'leader' ||\n      syncMode === 'distributed' ||\n      typeof syncMode === 'string';\n    return (\n      typeof idleGraceMs === 'number' &&\n      typeof countdownMs === 'number' &&\n      typeof warnBeforeMs === 'number' &&\n      typeof activityResetCooldownMs === 'number' &&\n      typeof storageKeyPrefix === 'string' &&\n      resumeValid &&\n      syncModeValid &&\n      typeof ignoreUserActivityWhenPaused === 'boolean' &&\n      typeof allowManualExtendWhenExpired === 'boolean' &&\n      (resetOnWarningActivity === undefined || typeof resetOnWarningActivity === 'boolean')\n    );\n  }\n\r\n  private isSharedConfig(config: unknown): config is SharedConfigPayload {\r\n    if (!this.isLegacySharedConfig(config)) {\r\n      return false;\r\n    }\r\n    const record = config as unknown as Record<string, unknown>;\r\n    const revision = record['revision'];\r\n    const logicalClock = record['logicalClock'];\r\n    const writerId = record['writerId'];\r\n    return (\r\n      typeof revision === 'number' &&\r\n      Number.isFinite(revision) &&\r\n      typeof logicalClock === 'number' &&\r\n      Number.isFinite(logicalClock) &&\r\n      typeof writerId === 'string' &&\r\n      writerId.length > 0\r\n    );\r\n  }\r\n\r\n  private isSharedMetadata(metadata: unknown): metadata is SharedStateMetadata {\r\n    if (!metadata || typeof metadata !== 'object') {\r\n      return false;\r\n    }\r\n    const record = metadata as Record<string, unknown>;\r\n    const operation = record['operation'];\r\n    const revision = record['revision'];\r\n    const logicalClock = record['logicalClock'];\r\n    const writerId = record['writerId'];\r\n    const causalityToken = record['causalityToken'];\r\n    const operationValid =\r\n      operation === 'bootstrap' ||\r\n      operation === 'reset-by-activity' ||\r\n      operation === 'manual-extend' ||\r\n      operation === 'auto-extend' ||\r\n      operation === 'pause' ||\r\n      operation === 'resume' ||\r\n      operation === 'expire' ||\r\n      operation === 'config-change';\r\n    return (\r\n      typeof revision === 'number' &&\r\n      Number.isFinite(revision) &&\r\n      typeof logicalClock === 'number' &&\r\n      Number.isFinite(logicalClock) &&\r\n      typeof writerId === 'string' &&\r\n      writerId.length > 0 &&\r\n      typeof causalityToken === 'string' &&\r\n      causalityToken.length > 0 &&\r\n      operationValid\r\n    );\r\n  }\r\n\r\n  private isLeaderInfo(leader: unknown): leader is SharedSessionState['leader'] {\r\n    if (!leader || typeof leader !== 'object') {\r\n      return false;\r\n    }\r\n    const record = leader as Record<string, unknown>;\r\n    const id = record['id'];\r\n    const heartbeatAt = record['heartbeatAt'];\r\n    const epoch = record['epoch'];\r\n    return (\r\n      typeof id === 'string' &&\r\n      typeof heartbeatAt === 'number' &&\r\n      typeof epoch === 'number'\r\n    );\r\n  }\r\n}\r\n\r\nfunction generateCoordinatorId(): string {\r\n  if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {\r\n    return crypto.randomUUID();\r\n  }\r\n  return Math.random().toString(36).slice(2);\r\n}\r\n","import { DestroyRef, Injectable, NgZone, computed, effect, inject, signal } from '@angular/core';\r\nimport { DOCUMENT } from '@angular/common';\r\nimport type { Signal } from '@angular/core';\r\nimport { toObservable } from '@angular/core/rxjs-interop';\r\nimport { Subject, interval, takeUntil } from 'rxjs';\r\nimport type { Subscription } from 'rxjs';\r\n\r\nimport type { ActivityEvent } from '../models/activity-event';\r\nimport type { SessionEvent } from '../models/session-event';\r\nimport type { SessionSnapshot, SessionState } from '../models/session-state';\r\nimport type { CrossTabMessage, CrossTabMessageType } from '../models/cross-tab-message';\nimport {\n  SHARED_STATE_VERSION,\n  type LeaderInfo,\n  type SharedSessionState,\n  type SharedStateOperation\n} from '../models/session-shared-state';\nimport { createBroadcastChannel, type BroadcastAdapter } from '../utils/broadcast-channel';\nimport type {\n  SessionTimeoutConfig,\n  SessionTimeoutHooks,\n  SessionTimeoutPartialConfig,\n  SessionActionDelays,\n  HttpActivityPolicyConfig,\n  DomActivityEventName\n} from '../models/session-timeout-config';\nimport { SESSION_TIMEOUT_CONFIG, SESSION_TIMEOUT_HOOKS } from '../tokens/config.token';\nimport { createLogger, type Logger } from '../utils/logging';\nimport { TimeSourceService } from './time-source.service';\nimport { ServerTimeService } from './server-time.service';\nimport type { SessionLeaderState, SessionLeaderRole } from '../models/session-leader';\nimport { validateConfig } from '../validation';\nimport { ActivityDomService } from './activity-dom.service';\nimport { ActivityRouterService } from './activity-router.service';\nimport { LeaderElectionService, HEARTBEAT_INTERVAL_MS, LEADER_TTL_MS } from './leader-election.service';\nimport { SharedStateCoordinatorService } from './shared-state-coordinator.service';\nimport {\r\n  createStorage,\r\n  persistConfig,\r\n  persistSnapshot,\r\n  readPersistedConfig,\r\n  readSnapshot,\r\n  type PersistedSnapshot,\r\n  type StorageAdapter\r\n} from '../utils/storage';\r\n\r\ntype ServerTimeListenerApi = {\r\n  registerSyncListener?: (listener: () => void) => void;\r\n  unregisterSyncListener?: (listener: () => void) => void;\r\n};\r\n\r\ntype ActionDelayKey = keyof SessionActionDelays;\r\n\r\nfunction generateTabId(): string {\r\n  if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {\r\n    return crypto.randomUUID();\r\n  }\r\n  return Math.random().toString(36).slice(2);\r\n}\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class SessionTimeoutService {\r\n  private readonly destroyRef = inject(DestroyRef);\r\n  private readonly zone = inject(NgZone);\r\n  private readonly timeSource = inject(TimeSourceService);\r\n  private readonly providedConfig = inject(SESSION_TIMEOUT_CONFIG, { optional: true });\r\n  private readonly hooks = inject(SESSION_TIMEOUT_HOOKS, { optional: true }) ?? {} as SessionTimeoutHooks;\r\n  private readonly domActivity = inject(ActivityDomService, { optional: true });\r\n  private readonly routerActivity = inject(ActivityRouterService, { optional: true });\r\n  private readonly serverTime = inject(ServerTimeService, { optional: true });\r\n  private serverTimeListenerRegistered = false;\r\n  private readonly leaderElection = inject(LeaderElectionService, { optional: true });\r\n  private readonly sharedStateCoordinator = inject(SharedStateCoordinatorService);\n  private readonly documentRef = inject(DOCUMENT, { optional: true }) as Document | undefined;\n  private readonly windowRef: Window | null = typeof window === 'undefined' ? null : window;\n  private leaderState: boolean | null = null;\n  private leaderEpoch = 0;\n  private lastKnownLeaderId: string | null = null;\n  private readonly leaderIdInternal = signal<string | null>(null);\n  private readonly leaderInfoInternal = signal<LeaderInfo | null>(null);\n  private latestSharedState: SharedSessionState | null = null;\n  private sharedStateRevision = 0;\n  private sharedConfigRevision = 0;\n  private lamportClock = 0;\n  private configLamportClock = 0;\n  private readonly writerId = this.sharedStateCoordinator.getSourceId();\r\n  private configWriterId = this.writerId;\r\n  private lastHiddenAt: number | null = null;\r\n  private lastSyncRequestAt: number | null = null;\r\n  private readonly leaderWatcher = this.leaderElection\n    ? effect(\n        () => {\n          this.syncLeaderState();\n        },\n        { allowSignalWrites: true }\n      )\n    : null;\n  private readonly handleVisibilityChange = (): void => {\r\n    if (!this.documentRef) {\r\n      return;\r\n    }\r\n    const state = this.documentRef.visibilityState;\r\n    if (state === 'hidden') {\r\n      this.lastHiddenAt = this.timeSource.now();\r\n      return;\r\n    }\r\n    if (state === 'visible') {\r\n      this.handleVisibilityResume('visibilitychange');\r\n    }\r\n  };\r\n\r\n  private readonly handlePageHide = (): void => {\r\n    this.lastHiddenAt = this.timeSource.now();\r\n  };\r\n\r\n  private readonly handlePageShow = (): void => {\r\n    this.handleVisibilityResume('pageshow');\r\n  };\r\n\r\n  private readonly storage: StorageAdapter = createStorage();\n  private isRestoring = false;\n  private isApplyingSharedState = false;\n  private lastConfigWatcherSnapshot: SessionTimeoutConfig | null = null;\n\r\n  private configSignal = signal(\r\n    validateConfig(this.providedConfig as SessionTimeoutPartialConfig | undefined).config\r\n  );\r\n  private logger: Logger = createLogger(this.configSignal());\r\n\r\n  private readonly snapshotSignal = signal<SessionSnapshot>({\r\n    state: 'IDLE',\r\n    remainingMs: this.configSignal().countdownMs,\r\n    warnBeforeMs: this.configSignal().warnBeforeMs,\r\n    countdownMs: this.configSignal().countdownMs,\r\n    idleGraceMs: this.configSignal().idleGraceMs,\r\n    idleStartAt: null,\r\n    countdownEndAt: null,\r\n    lastActivityAt: null,\r\n    paused: false\r\n  });\r\n\r\n  private readonly destroy$ = new Subject<void>();\r\n  private tickerSub: Subscription | null = null;\r\n  private readonly eventsSubject = new Subject<SessionEvent>();\r\n  private readonly activitySubject = new Subject<ActivityEvent>();\r\n  private readonly crossTabSubject = new Subject<CrossTabMessage>();\r\n  private crossTabChannel: BroadcastAdapter | null = null;\r\n  private crossTabChannelName: string | null = null;\r\n  private readonly tabId = generateTabId();\r\n  private isHandlingCrossTabMessage = false;\r\n  private readonly actionDelayTimers = new Map<ActionDelayKey, ReturnType<typeof globalThis.setTimeout>>();\n  private lastAutoActivityResetAt: number | null = null;\n  private pendingResetPriority: number | null = null;\n  private readonly handleServerSync = () => {\n    if (this.configSignal().resumeBehavior === 'autoOnServerSync' && this.snapshotSignal().paused) {\n      this.zone.run(() => this.resume());\n    }\n  };\n\r\n\r\n  private readonly onExpireCallbacks = new Set<(snapshot: SessionSnapshot) => void | Promise<void>>();\r\n\r\n  private readonly idleRemainingMsInternal = signal(0);\n  private readonly countdownRemainingMsInternal = signal(0);\n  private readonly totalRemainingMsInternal = signal(0);\n  private readonly activityCooldownRemainingMsInternal = signal(0);\n\n  private readonly leaderRoleInternal = signal<SessionLeaderRole>('unknown');\n\n  private readonly leaderStateSignalInternal = computed<SessionLeaderState>(() => ({\n    role: this.leaderRoleInternal(),\n    leader: this.leaderInfoInternal(),\n    leaderId: this.leaderIdInternal()\n  }));\n\n  readonly idleRemainingMsSignal = this.idleRemainingMsInternal.asReadonly();\n  readonly activityCooldownRemainingMsSignal = this.activityCooldownRemainingMsInternal.asReadonly();\n  readonly countdownRemainingMsSignal = this.countdownRemainingMsInternal.asReadonly();\n  readonly totalRemainingMsSignal = this.totalRemainingMsInternal.asReadonly();\n\n  readonly stateSignal: Signal<SessionState> = computed(() => this.snapshotSignal().state);\r\n  readonly remainingMsSignal: Signal<number> = this.totalRemainingMsSignal;\r\n  readonly isWarnSignal: Signal<boolean> = computed(() => this.snapshotSignal().state === 'WARN');\r\n  readonly isExpiredSignal: Signal<boolean> = computed(() => this.snapshotSignal().state === 'EXPIRED');\r\n  private readonly lastActivitySignal: Signal<number | null> = computed(() => this.snapshotSignal().lastActivityAt);\r\n  private readonly countdownEndAtSignal: Signal<number | null> = computed(() => this.snapshotSignal().countdownEndAt);\r\n\r\n  readonly idleRemainingMs$ = toObservable(this.idleRemainingMsSignal);\r\n  readonly activityCooldownRemainingMs$ = toObservable(this.activityCooldownRemainingMsSignal);\r\n  readonly countdownRemainingMs$ = toObservable(this.countdownRemainingMsSignal);\r\n  readonly totalRemainingMs$ = toObservable(this.totalRemainingMsSignal);\r\n  readonly state$ = toObservable(this.stateSignal);\r\n  readonly remainingMs$ = this.totalRemainingMs$;\n  readonly isWarn$ = toObservable(this.isWarnSignal);\n  readonly isExpired$ = toObservable(this.isExpiredSignal);\n  readonly lastActivityAt$ = toObservable(this.lastActivitySignal);\n  readonly countdownEndAt$ = toObservable(this.countdownEndAtSignal);\n  readonly leaderIdSignal = this.leaderIdInternal.asReadonly();\n  readonly leaderInfoSignal = this.leaderInfoInternal.asReadonly();\n  readonly leaderRoleSignal = this.leaderRoleInternal.asReadonly();\n  readonly leaderStateSignal = this.leaderStateSignalInternal;\n  readonly events$ = this.eventsSubject.asObservable();\n  readonly activity$ = this.activitySubject.asObservable();\n  readonly crossTab$ = this.crossTabSubject.asObservable();\n  readonly leaderId$ = toObservable(this.leaderIdSignal);\n  readonly leaderInfo$ = toObservable(this.leaderInfoSignal);\n  readonly leaderRole$ = toObservable(this.leaderRoleSignal);\n  readonly leaderState$ = toObservable(this.leaderStateSignal);\n  readonly isLeaderSignal: Signal<boolean> = computed(() => this.leaderRoleSignal() === 'leader');\n  readonly isLeader$ = toObservable(this.isLeaderSignal);\n\r\n  private readonly configWatcher = effect(() => {\n    const config = this.configSignal();\n    const previousSnapshot = this.lastConfigWatcherSnapshot;\n    const hasChanges = this.configsDiffer(previousSnapshot, config);\n\n    if (!hasChanges && previousSnapshot != null) {\n      this.lastConfigWatcherSnapshot = this.captureConfigSnapshot(config);\n      return;\n    }\n\n    this.lastConfigWatcherSnapshot = this.captureConfigSnapshot(config);\n    this.logger = createLogger(config);\n    this.restartTicker(config.pollingMs);\n    this.domActivity?.updateConfig(config);\n    this.routerActivity?.updateConfig(config);\n    this.serverTime?.configure(config);\n    if (this.leaderElection) {\n      this.leaderElection.updateConfig(config);\n      this.leaderElection.electLeader();\n    }\n    this.sharedStateCoordinator.updateConfig(config);\n    this.syncLeaderState();\n    this.setupCrossTabChannel(config);\n    this.refreshDerivedDurations(undefined, config);\n    this.refreshActivityCooldownRemaining(undefined, config);\n    if (!this.isRestoring) {\n      persistConfig(this.storage, config.storageKeyPrefix, config);\n    }\n  }, { allowSignalWrites: true });\n\r\n  constructor() {\r\n    if (this.domActivity) {\r\n      this.domActivity.events$.pipe(takeUntil(this.destroy$)).subscribe(event => {\r\n        this.handleExternalActivity(event, 'ResetByActivity');\r\n      });\r\n    }\r\n\r\n    if (this.routerActivity) {\r\n      this.routerActivity.events$.pipe(takeUntil(this.destroy$)).subscribe(event => {\r\n        this.handleExternalActivity(event, 'ResetByRouter');\r\n      });\r\n    }\r\n\r\n    if (this.documentRef) {\r\n      this.documentRef.addEventListener('visibilitychange', this.handleVisibilityChange);\r\n    }\r\n    if (this.windowRef) {\r\n      this.windowRef.addEventListener('pageshow', this.handlePageShow);\r\n      this.windowRef.addEventListener('pagehide', this.handlePageHide);\r\n    }\r\n    if (this.documentRef && this.documentRef.visibilityState === 'hidden') {\r\n      this.lastHiddenAt = this.timeSource.now();\r\n    }\r\n\r\n    this.registerServerTimeListener();\r\n\r\n    this.restoreFromStorage();\r\n    this.refreshDerivedDurations();\r\n    this.refreshActivityCooldownRemaining();\r\n\r\n    this.sharedStateCoordinator.updateConfig(this.configSignal());\r\n\r\n    const persistedSharedState = this.sharedStateCoordinator.readPersistedState();\r\n    if (persistedSharedState) {\r\n      this.latestSharedState = persistedSharedState;\r\n      this.applySharedSessionState(persistedSharedState);\r\n    } else {\r\n      this.sharedStateCoordinator.requestSync('initial', true);\n      void Promise.resolve().then(() => this.broadcastCrossTab('sync-request'));\n    }\r\n\r\n    this.sharedStateCoordinator.updates$\r\n      .pipe(takeUntil(this.destroy$))\r\n      .subscribe(message => {\r\n        this.zone.run(() => {\r\n          if (message.type === 'state') {\r\n            this.latestSharedState = message.state;\r\n            this.applySharedSessionState(message.state);\r\n          } else if (message.type === 'request-sync') {\r\n            const reuseLatest = this.latestSharedState != null;\r\n            this.broadcastSharedState('bootstrap', { crossTab: true, reuseLatest, configChanged: !reuseLatest });\r\n          }\r\n        });\r\n      });\r\n\r\n    this.destroyRef.onDestroy(() => {\r\n      this.destroy$.next();\r\n      this.destroy$.complete();\r\n      this.stopTicker();\r\n      this.eventsSubject.complete();\r\n      this.activitySubject.complete();\r\n      if (this.documentRef) {\r\n        this.documentRef.removeEventListener('visibilitychange', this.handleVisibilityChange);\r\n      }\r\n      if (this.windowRef) {\r\n        this.windowRef.removeEventListener('pageshow', this.handlePageShow);\r\n        this.windowRef.removeEventListener('pagehide', this.handlePageHide);\r\n      }\r\n      this.leaderWatcher?.destroy();\r\n      this.leaderElection?.stepDown();\r\n      this.teardownCrossTabChannel();\r\n      this.crossTabSubject.complete();\r\n      this.unregisterServerTimeListener();\r\n      this.configWatcher.destroy();\r\n      this.clearAllActionTimers();\r\n    });\r\n  }\r\n\r\n  private registerServerTimeListener(): void {\r\n    if (!this.serverTime || this.serverTimeListenerRegistered) {\r\n      return;\r\n    }\r\n    const candidate = this.serverTime as unknown as ServerTimeListenerApi;\r\n    if (typeof candidate.registerSyncListener === 'function') {\r\n      candidate.registerSyncListener(this.handleServerSync);\r\n      this.serverTimeListenerRegistered = true;\r\n    }\r\n  }\r\n\r\n  private unregisterServerTimeListener(): void {\r\n    if (!this.serverTime || !this.serverTimeListenerRegistered) {\r\n      return;\r\n    }\r\n    const candidate = this.serverTime as unknown as ServerTimeListenerApi;\r\n    if (typeof candidate.unregisterSyncListener === 'function') {\r\n      candidate.unregisterSyncListener(this.handleServerSync);\r\n    }\r\n    this.serverTimeListenerRegistered = false;\r\n  }\r\n\r\n  start(): void {\r\n    this.executeWithDelay('start', () => {\r\n      const timestamp = this.timeSource.now();\r\n      this.updateSnapshot({\r\n        state: 'IDLE',\r\n        idleStartAt: timestamp,\r\n        countdownEndAt: null,\r\n        lastActivityAt: timestamp,\r\n        remainingMs: this.configSignal().countdownMs,\r\n        paused: false\r\n      }, 'bootstrap');\r\n      this.emitEvent('Started');\r\n    });\r\n  }\r\n\r\n  stop(): void {\r\n    this.executeWithDelay('stop', () => {\r\n      this.updateSnapshot({\r\n        state: 'IDLE',\r\n        idleStartAt: null,\r\n        countdownEndAt: null,\r\n        remainingMs: this.configSignal().countdownMs,\r\n        paused: false\r\n      }, 'bootstrap');\r\n      this.emitEvent('Stopped');\r\n    });\r\n  }\r\n\r\n  resetIdle(meta?: Record<string, unknown>, options?: { source?: ActivityEvent['source'] }): void {\n    const source = options?.source ?? 'manual';\n    const priority = this.getResetPriority(source);\n    const config = this.configSignal();\n    const snapshot = this.snapshotSignal();\n    const blockedByWarning = !this.shouldResetForSource(source, snapshot, config);\n    const blockedByPriority = this.pendingResetPriority != null && priority < this.pendingResetPriority;\n\n    const metaWithSource: Record<string, unknown> = {\n      ...(meta ?? {}),\n      activitySource: source,\n      activityTimestamp: this.timeSource.now(),\n      stateAtActivity: snapshot.state,\n      resetPriority: priority\n    };\n\n    if (blockedByWarning || blockedByPriority) {\n      metaWithSource['resetSuppressed'] = true;\n      metaWithSource['resetSuppressedReason'] =\n        blockedByWarning ? 'warning-phase-disabled' : 'lower-priority';\n      this.emitActivity(source, metaWithSource);\n      return;\n    }\n\n    this.emitActivity(source, metaWithSource);\n\n    const scheduled = this.scheduleResetIdle(source, priority, config, () => {\n      const latestSnapshot = this.snapshotSignal();\n      const latestConfig = this.configSignal();\n      if (!this.shouldResetForSource(source, latestSnapshot, latestConfig)) {\n        return;\n      }\n      if (this.leaderElection?.isLeader() === false) {\n        this.broadcastCrossTab('reset', { activitySource: source });\n        return;\n      }\n      const resetMeta = {\n        ...metaWithSource,\n        stateAtReset: latestSnapshot.state\n      };\n      this.resetIdleInternal('ResetByActivity', resetMeta);\n    });\n\n    if (!scheduled) {\n      return;\n    }\n  }\n\r\n  extend(meta?: Record<string, unknown>): void {\n    this.executeWithDelay('extend', () => {\n      const snapshot = this.snapshotSignal();\n      if (snapshot.state === 'EXPIRED') {\n        return;\n      }\n\n      const timestamp = this.timeSource.now();\n      const config = this.configSignal();\n      const countdownEndAt = timestamp + config.countdownMs;\n      const partial: Partial<SessionSnapshot> =\n        snapshot.state === 'IDLE'\n          ? {\n              state: 'IDLE',\n              idleStartAt: timestamp,\n              lastActivityAt: timestamp,\n              countdownEndAt: null,\n              remainingMs: config.countdownMs,\n              paused: false\n            }\n          : {\n              state: 'COUNTDOWN',\n              idleStartAt: timestamp,\n              lastActivityAt: timestamp,\n              countdownEndAt,\n              remainingMs: Math.max(0, countdownEndAt - timestamp),\n              paused: false\n            };\n\n      this.updateSnapshot(partial, 'manual-extend');\n      this.emitEvent('Extended', meta);\n      this.broadcastCrossTab('extend', { snapshot: { ...this.snapshotSignal() } });\n    });\n  }\n\r\n  private resetIdleInternal(eventType: SessionEvent['type'], meta?: Record<string, unknown>): void {\r\n    const timestamp = this.timeSource.now();\r\n    this.updateSnapshot({\r\n      state: 'IDLE',\r\n      idleStartAt: timestamp,\r\n      countdownEndAt: null,\r\n      lastActivityAt: timestamp,\r\n      remainingMs: this.configSignal().countdownMs,\r\n      paused: this.snapshotSignal().paused\r\n    }, 'reset-by-activity');\r\n    this.emitEvent(eventType, meta);\r\n  }\r\n\r\n  expireNow(reason?: Record<string, unknown>): void {\r\n    this.executeWithDelay('expire', () => {\r\n      const timestamp = this.timeSource.now();\r\n      this.updateSnapshot({\r\n        state: 'EXPIRED',\r\n        remainingMs: 0,\r\n        countdownEndAt: timestamp,\r\n        paused: false\r\n      }, 'expire');\r\n      this.emitEvent('Expired', reason);\r\n      void this.runExpireHooks();\r\n      this.broadcastCrossTab('expire', { snapshot: { ...this.snapshotSignal() }, reason });\r\n    });\r\n  }\r\n\r\n  pause(): void {\r\n    if (this.snapshotSignal().paused) {\r\n      return;\r\n    }\r\n    this.executeWithDelay('pause', () => {\r\n      if (this.snapshotSignal().paused) {\r\n        return;\r\n      }\r\n      this.updateSnapshot({ paused: true }, 'pause');\r\n      this.emitEvent('Paused');\r\n    });\r\n  }\r\n\r\n  resume(): void {\r\n    if (!this.snapshotSignal().paused) {\r\n      return;\r\n    }\r\n    this.executeWithDelay('resume', () => {\r\n      if (!this.snapshotSignal().paused) {\r\n        return;\r\n      }\r\n      this.updateSnapshot({ paused: false }, 'resume');\r\n      this.emitEvent('Resumed');\r\n    });\r\n  }\r\n\r\n  setConfig(partial: SessionTimeoutPartialConfig): void {\r\n    const base = this.configSignal();\r\n    const { config, issues } = validateConfig({\r\n      ...base,\r\n      ...partial,\r\n      httpActivity: {\r\n        ...base.httpActivity,\r\n        ...(partial.httpActivity ?? {})\r\n      }\r\n    });\r\n    const sharedConfigChanged = this.hasSharedConfigDiff(base, config);\r\n    const operationForBroadcast =\r\n      sharedConfigChanged && !this.isApplyingSharedState ? this.resolveConfigOperationForChange(base, config) : null;\r\n\r\n    const diffKeys = this.computeConfigDiffKeys(base, config);\n    const configChanged = diffKeys.length > 0;\n\n    if (!configChanged) {\n      if (issues.length > 0) {\n        issues.forEach(issue => this.logger.warn('Invalid config field: ' + issue.field + ' - ' + issue.message));\n      }\n      return;\n    }\n\n    this.configSignal.set(config);\n\r\n    this.lastAutoActivityResetAt = null;\r\n    this.refreshDerivedDurations(undefined, config);\r\n    this.refreshActivityCooldownRemaining(undefined, config);\r\n    if (issues.length > 0) {\r\n      issues.forEach(issue => this.logger.warn('Invalid config field: ' + issue.field + ' - ' + issue.message));\r\n    }\r\n    this.emitEvent('ConfigChanged', { issues });\r\n    this.clearAllActionTimers();\r\n    if (operationForBroadcast) {\r\n      this.broadcastSharedState(operationForBroadcast, { configChanged: true });\r\n    }\r\n  }\r\n\r\n  registerOnExpireCallback(callback: (snapshot: SessionSnapshot) => void | Promise<void>): void {\r\n    this.onExpireCallbacks.add(callback);\r\n  }\r\n\r\n  getSnapshot(): SessionSnapshot {\r\n    return { ...this.snapshotSignal() };\r\n  }\r\n\r\n  getConfig(): SessionTimeoutConfig {\n    return { ...this.configSignal() };\n  }\n\n  getLeaderId(): string | null {\n    return this.leaderIdSignal();\n  }\n\n  getLeaderInfo(): LeaderInfo | null {\n    const info = this.leaderInfoSignal();\n    if (!info) {\n      return null;\n    }\n    return { ...info };\n  }\n\n  getLeaderRole(): SessionLeaderRole {\n    return this.leaderRoleSignal();\n  }\n\n  getLeaderState(): SessionLeaderState {\n    const state = this.leaderStateSignal();\n    return {\n      role: state.role,\n      leaderId: state.leaderId,\n      leader: state.leader ? { ...state.leader } : null\n    };\n  }\n\n  isLeader(): boolean {\n    return this.isLeaderSignal();\n  }\n\n  private restartTicker(pollingMs: number): void {\r\n    this.stopTicker();\r\n    if (pollingMs <= 0) {\r\n      return;\r\n    }\r\n    this.zone.runOutsideAngular(() => {\r\n      this.tickerSub = interval(pollingMs)\r\n        .pipe(takeUntil(this.destroy$))\r\n        .subscribe(() => {\r\n          this.handleTick();\r\n        });\r\n    });\r\n  }\r\n\r\n  private stopTicker(): void {\r\n    this.tickerSub?.unsubscribe();\r\n    this.tickerSub = null;\r\n  }\r\n\r\n  private handleTick(): void {\r\n    const config = this.configSignal();\r\n    const timestamp = this.timeSource.now();\r\n    this.refreshActivityCooldownRemaining(timestamp, config);\r\n\r\n    const snapshot = this.snapshotSignal();\r\n\r\n    if (snapshot.paused || snapshot.state === 'EXPIRED') {\r\n      this.refreshDerivedDurations(timestamp, config);\r\n      return;\r\n    }\r\n\r\n    if (snapshot.idleStartAt == null) {\r\n      return;\r\n    }\r\n\r\n    if (snapshot.state === 'IDLE') {\r\n      const elapsed = timestamp - snapshot.idleStartAt;\r\n      if (elapsed >= config.idleGraceMs) {\r\n        const countdownEndAt = timestamp + config.countdownMs;\r\n        this.updateSnapshot({\r\n          state: config.warnBeforeMs >= config.countdownMs ? 'WARN' : 'COUNTDOWN',\r\n          countdownEndAt,\r\n          remainingMs: Math.max(0, countdownEndAt - timestamp)\r\n        }, 'auto-extend');\r\n        return;\r\n      }\r\n      const remainingToGraceEnd = Math.max(0, config.idleGraceMs - elapsed);\r\n      this.updateSnapshot({ remainingMs: remainingToGraceEnd }, 'auto-extend');\r\n      return;\r\n    }\r\n\r\n    if (snapshot.countdownEndAt == null) {\r\n      return;\r\n    }\r\n\r\n    const remaining = Math.max(0, snapshot.countdownEndAt - timestamp);\r\n\r\n    if (remaining === 0) {\r\n      this.updateSnapshot({ state: 'EXPIRED', remainingMs: 0 }, 'expire');\r\n      this.emitEvent('Expired');\r\n      this.broadcastCrossTab('expire', { snapshot: { ...this.snapshotSignal() } });\r\n      void this.runExpireHooks();\r\n      return;\r\n    }\r\n\r\n    if (remaining <= config.warnBeforeMs) {\r\n      if (snapshot.state !== 'WARN') {\r\n        this.updateSnapshot({ state: 'WARN', remainingMs: remaining }, 'auto-extend');\r\n        this.emitEvent('WarnShown');\r\n      } else {\r\n        this.updateSnapshot({ remainingMs: remaining }, 'auto-extend');\r\n      }\r\n      return;\r\n    }\r\n\r\n    if (snapshot.state !== 'COUNTDOWN') {\r\n      this.updateSnapshot({ state: 'COUNTDOWN', remainingMs: remaining }, 'auto-extend');\r\n    } else {\r\n      this.updateSnapshot({ remainingMs: remaining }, 'auto-extend');\r\n    }\r\n  }\r\n\r\n  private handleExternalActivity(activity: ActivityEvent, eventType: SessionEvent['type']): void {\n    const config = this.configSignal();\n    const now = this.timeSource.now();\n    if (config.activityResetCooldownMs > 0) {\n      const lastAcceptedAt = this.lastAutoActivityResetAt;\n      if (lastAcceptedAt != null && now - lastAcceptedAt < config.activityResetCooldownMs) {\n        this.refreshActivityCooldownRemaining(now, config);\n        return;\n      }\n    }\n\n    const snapshot = this.snapshotSignal();\n    const priority = this.getResetPriority(activity.source);\n    const blockedByPause = snapshot.paused && config.ignoreUserActivityWhenPaused;\n    const blockedByWarning = !this.shouldResetForSource(activity.source, snapshot, config);\n    const blockedByPriority = this.pendingResetPriority != null && priority < this.pendingResetPriority;\n\n    const meta: Record<string, unknown> = {\n      ...(activity.meta ?? {}),\n      activitySource: activity.source,\n      activityTimestamp: activity.at,\n      stateAtActivity: snapshot.state,\n      resetPriority: priority\n    };\n\n    const shouldSchedule = !(blockedByPause || blockedByWarning || blockedByPriority);\n\n    if (!shouldSchedule) {\n      meta['resetSuppressed'] = true;\n      if (blockedByPause) {\n        meta['resetSuppressedReason'] = 'paused';\n      } else if (blockedByWarning) {\n        meta['resetSuppressedReason'] = 'warning-phase-disabled';\n      } else {\n        meta['resetSuppressedReason'] = 'lower-priority';\n      }\n    }\n\n    this.emitActivity(activity.source, meta);\n\n    if (!shouldSchedule) {\n      this.refreshActivityCooldownRemaining(now, config);\n      return;\n    }\n\n    const scheduled = this.scheduleResetIdle(activity.source, priority, config, () => {\n      const latestSnapshot = this.snapshotSignal();\n      const latestConfig = this.configSignal();\n      if (!this.shouldResetForSource(activity.source, latestSnapshot, latestConfig)) {\n        return;\n      }\n      if (this.leaderElection?.isLeader() === false) {\n        this.broadcastCrossTab('reset', { activitySource: activity.source });\n        return;\n      }\n      const resetMeta = {\n        ...meta,\n        stateAtReset: latestSnapshot.state\n      };\n      this.resetIdleInternal(eventType, resetMeta);\n    });\n\n    if (!scheduled) {\n      this.refreshActivityCooldownRemaining(now, config);\n      return;\n    }\n\n    this.lastAutoActivityResetAt = now;\n    this.refreshActivityCooldownRemaining(now, config);\n  }\n\r\n  private setupCrossTabChannel(config: SessionTimeoutConfig): void {\r\n    const namespace = config.appInstanceId ?? 'ng2-idle-timeout';\r\n    const channelName = `${namespace}:${config.storageKeyPrefix}:session-timeout`;\r\n    if (this.crossTabChannelName === channelName) {\r\n      return;\r\n    }\r\n\r\n    this.teardownCrossTabChannel();\r\n\r\n    const adapter = createBroadcastChannel(channelName);\r\n    if (!adapter) {\r\n      return;\r\n    }\r\n\r\n    adapter.subscribe(event => {\r\n      const message = event?.data as CrossTabMessage | undefined;\r\n      if (!message || typeof message !== 'object') {\r\n        return;\r\n      }\r\n      this.zone.run(() => {\r\n        this.handleCrossTabMessage(message);\r\n      });\r\n    });\r\n\r\n    this.crossTabChannel = adapter;\r\n    this.crossTabChannelName = channelName;\r\n  }\r\n\r\n  private teardownCrossTabChannel(): void {\r\n    this.crossTabChannel?.close();\r\n    this.crossTabChannel = null;\r\n    this.crossTabChannelName = null;\r\n  }\r\n\r\n  private broadcastCrossTab(type: CrossTabMessageType, payload?: CrossTabMessage['payload']): void {\r\n    if (!this.crossTabChannel || this.isHandlingCrossTabMessage) {\r\n      return;\r\n    }\r\n    const message: CrossTabMessage = {\r\n      sourceId: this.tabId,\r\n      type,\r\n      at: this.timeSource.now(),\r\n      payload\r\n    };\r\n    try {\r\n      this.crossTabChannel.publish(message);\r\n    } catch (error) {\r\n      this.logger.warn('Failed to broadcast cross-tab message', error);\r\n    }\r\n    this.crossTabSubject.next(message);\r\n  }\r\n\r\n  private executeWithDelay(action: ActionDelayKey, work: () => void): void {\r\n    const delay = Math.max(0, this.configSignal().actionDelays[action] ?? 0);\r\n    if (delay <= 0) {\r\n      work();\r\n      return;\r\n    }\r\n\r\n    this.clearActionTimer(action);\r\n\r\n    this.zone.runOutsideAngular(() => {\r\n      const handle = globalThis.setTimeout(() => {\n        this.zone.run(() => {\n          work();\n        });\n        this.actionDelayTimers.delete(action);\n      }, delay);\r\n      this.actionDelayTimers.set(action, handle);\r\n    });\r\n  }\r\n\r\n  private clearActionTimer(action: ActionDelayKey): void {\r\n    const handle = this.actionDelayTimers.get(action);\r\n    if (handle != null) {\r\n      clearTimeout(handle);\n      this.actionDelayTimers.delete(action);\r\n    }\r\n  }\r\n\r\n  private clearAllActionTimers(): void {\n    for (const [key, handle] of this.actionDelayTimers.entries()) {\n      clearTimeout(handle);\n      this.actionDelayTimers.delete(key);\n      if (key === 'resetIdle') {\n        this.pendingResetPriority = null;\n      }\n    }\n  }\n\r\n  private handleCrossTabMessage(message: CrossTabMessage): void {\r\n    if (!message || message.sourceId === this.tabId) {\r\n      return;\r\n    }\r\n\r\n    this.crossTabSubject.next(message);\r\n    this.isHandlingCrossTabMessage = true;\r\n\r\n    try {\r\n      switch (message.type) {\r\n        case 'extend':\r\n          this.applyCrossTabExtend(message);\r\n          break;\r\n        case 'expire':\r\n          this.applyCrossTabExpire(message);\r\n          break;\r\n        case 'sync':\r\n          this.applyCrossTabSync(message);\r\n          break;\r\n        case 'reset':\r\n          this.applyCrossTabReset(message);\r\n          break;\r\n        case 'sync-request':\n          this.handleSyncRequest();\n          break;\n        default:\r\n          this.logger.warn('Unknown cross-tab message type', message);\r\n      }\r\n    } finally {\r\n      this.isHandlingCrossTabMessage = false;\r\n    }\r\n  }\r\n\r\n  private applyCrossTabExtend(message: CrossTabMessage): void {\n    const snapshot = message.payload?.snapshot;\n    if (snapshot) {\n      this.updateSnapshot({\n        state: snapshot.state,\n        idleStartAt: snapshot.idleStartAt,\r\n        countdownEndAt: snapshot.countdownEndAt,\r\n        lastActivityAt: snapshot.lastActivityAt,\r\n        remainingMs: snapshot.remainingMs,\n        paused: snapshot.paused\n      }, 'manual-extend');\n    } else {\n      const timestamp = this.timeSource.now();\n      const config = this.configSignal();\n      const currentSnapshot = this.snapshotSignal();\n      if (currentSnapshot.state === 'IDLE') {\n        this.updateSnapshot({\n          state: 'IDLE',\n          idleStartAt: timestamp,\n          lastActivityAt: timestamp,\n          countdownEndAt: null,\n          remainingMs: config.countdownMs,\n          paused: false\n        }, 'manual-extend');\n      } else {\n        const countdownEndAt = timestamp + config.countdownMs;\n        this.updateSnapshot({\n          state: 'COUNTDOWN',\n          idleStartAt: timestamp,\n          lastActivityAt: timestamp,\n          countdownEndAt,\n          remainingMs: Math.max(0, countdownEndAt - timestamp),\n          paused: false\n        }, 'manual-extend');\n      }\n    }\n\n    this.emitEvent('Extended', { crossTab: true, sourceTabId: message.sourceId });\n  }\n\r\n  private applyCrossTabExpire(message: CrossTabMessage): void {\r\n    const snapshot = message.payload?.snapshot;\r\n    const countdownEndAt = snapshot?.countdownEndAt ?? this.timeSource.now();\r\n\r\n    this.updateSnapshot({\r\n      state: 'EXPIRED',\r\n      remainingMs: 0,\r\n      countdownEndAt,\r\n      paused: false\r\n    }, 'expire');\r\n\r\n    this.emitEvent('Expired', {\r\n      crossTab: true,\r\n      sourceTabId: message.sourceId,\r\n      reason: message.payload?.reason\r\n    });\r\n    void this.runExpireHooks();\r\n  }\r\n\r\n  private applyCrossTabReset(message: CrossTabMessage): void {\n    const activitySource = (message.payload?.activitySource ?? 'cross-tab') as ActivityEvent['source'];\n    const config = this.configSignal();\n    const snapshot = this.snapshotSignal();\n    const priority = this.getResetPriority(activitySource);\n    const blockedByWarning = !this.shouldResetForSource(activitySource, snapshot, config);\n    const blockedByPriority = this.pendingResetPriority != null && priority < this.pendingResetPriority;\n\n    const meta: Record<string, unknown> = {\n      crossTab: true,\n      sourceTabId: message.sourceId,\n      activitySource,\n      stateAtActivity: snapshot.state,\n      resetPriority: priority\n    };\n\n    if (blockedByWarning || blockedByPriority) {\n      meta['resetSuppressed'] = true;\n      meta['resetSuppressedReason'] =\n        blockedByWarning ? 'warning-phase-disabled' : 'lower-priority';\n      this.emitActivity('cross-tab', meta);\n      return;\n    }\n\n    this.emitActivity('cross-tab', meta);\n\n    const resetMeta = {\n      ...meta,\n      stateAtReset: this.snapshotSignal().state\n    };\n    this.resetIdleInternal('ResetByActivity', resetMeta);\n  }\n\r\n  private applyCrossTabSync(message: CrossTabMessage): void {\r\n    const sharedState = message.payload?.sharedState;\r\n    if (sharedState) {\r\n      this.applySharedSessionState(sharedState);\r\n      return;\r\n    }\r\n    const snapshot = message.payload?.snapshot;\r\n    if (!snapshot) {\r\n      return;\r\n    }\r\n\r\n    this.updateSnapshot({\r\n      state: snapshot.state,\r\n      idleStartAt: snapshot.idleStartAt,\r\n      countdownEndAt: snapshot.countdownEndAt,\r\n      lastActivityAt: snapshot.lastActivityAt,\r\n      remainingMs: snapshot.remainingMs,\r\n      paused: snapshot.paused\r\n    }, 'bootstrap');\r\n  }\r\n\r\n  private applySharedSessionState(sharedState: SharedSessionState): void {\r\n    const remoteEpoch = sharedState.leader?.epoch ?? 0;\r\n    if (remoteEpoch > this.leaderEpoch) {\r\n      this.leaderEpoch = remoteEpoch;\r\n    }\r\n\r\n    this.updateTrackingFromState(sharedState);\n\n    this.isApplyingSharedState = true;\n    try {\n      const configPatch: SessionTimeoutPartialConfig = {\n        idleGraceMs: sharedState.config.idleGraceMs,\n        countdownMs: sharedState.config.countdownMs,\n        warnBeforeMs: sharedState.config.warnBeforeMs,\n        activityResetCooldownMs: sharedState.config.activityResetCooldownMs,\n        storageKeyPrefix: sharedState.config.storageKeyPrefix,\n        resumeBehavior: sharedState.config.resumeBehavior,\n        resetOnWarningActivity: sharedState.config.resetOnWarningActivity,\n        ignoreUserActivityWhenPaused: sharedState.config.ignoreUserActivityWhenPaused,\n        allowManualExtendWhenExpired: sharedState.config.allowManualExtendWhenExpired\n      };\n\r\n      this.setConfig(configPatch);\r\n\r\n      const snapshot = sharedState.snapshot;\r\n      this.lastAutoActivityResetAt = snapshot.lastActivityAt;\r\n      this.refreshActivityCooldownRemaining();\r\n      this.updateSnapshot(\r\n        {\r\n          state: snapshot.state,\r\n          idleStartAt: snapshot.idleStartAt,\r\n          countdownEndAt: snapshot.countdownEndAt,\r\n          lastActivityAt: snapshot.lastActivityAt,\r\n          remainingMs: snapshot.remainingMs,\r\n          paused: snapshot.paused\r\n        },\r\n        sharedState.metadata.operation\r\n      );\r\n\r\n      this.sharedStateCoordinator.publishState(sharedState, { persist: true, broadcast: false });\r\n    } finally {\r\n      this.isApplyingSharedState = false;\r\n    }\r\n  }\r\n\r\n  private prepareSharedStateMetadata(\r\n    operation: SharedStateOperation,\r\n    configChanged: boolean\r\n  ): SharedSessionState['metadata'] {\r\n    const latest = this.latestSharedState;\r\n    const baseRevision = Math.max(this.sharedStateRevision, latest?.metadata.revision ?? 0);\r\n    const baseClock = Math.max(this.lamportClock, latest?.metadata.logicalClock ?? 0);\r\n\r\n    this.lamportClock = baseClock + 1;\r\n\r\n    if (operation !== 'config-change') {\r\n      this.sharedStateRevision = baseRevision + 1;\r\n    } else {\r\n      this.sharedStateRevision = baseRevision;\r\n    }\r\n\r\n    const effectiveConfigChanged = configChanged || !latest;\r\n\r\n    if (effectiveConfigChanged) {\r\n      const baseConfigRevision = Math.max(this.sharedConfigRevision, latest?.config.revision ?? 0);\r\n      this.sharedConfigRevision = baseConfigRevision + 1;\r\n      this.configLamportClock = this.lamportClock;\r\n      this.configWriterId = this.writerId;\r\n    } else {\r\n      const baseConfigRevision = Math.max(this.sharedConfigRevision, latest?.config.revision ?? 0);\r\n      this.sharedConfigRevision = baseConfigRevision;\r\n      const baseConfigClock = Math.max(this.configLamportClock, latest?.config.logicalClock ?? 0);\r\n      this.configLamportClock = Math.max(baseConfigClock, this.lamportClock);\r\n    }\r\n\r\n    return {\r\n      revision: this.sharedStateRevision,\r\n      logicalClock: this.lamportClock,\r\n      writerId: this.writerId,\r\n      operation,\r\n      causalityToken: this.writerId + ':' + this.lamportClock\r\n    };\r\n  }\r\n\r\n  private buildSharedSessionState(operation: SharedStateOperation, configChanged = false): SharedSessionState {\r\n    const metadata = this.prepareSharedStateMetadata(operation, configChanged);\r\n    const config = this.configSignal();\r\n    const snapshot = this.snapshotSignal();\r\n    const now = this.timeSource.now();\r\n    const leaderId = this.leaderElection?.leaderId?.();\r\n    const leaderInfo = leaderId\n      ? { id: leaderId, heartbeatAt: now, epoch: this.leaderEpoch }\n      : null;\n\r\n    const configLogicalClock = this.configLamportClock > 0 ? this.configLamportClock : metadata.logicalClock;\r\n\r\n    return {\n      version: SHARED_STATE_VERSION,\n      updatedAt: now,\n      leader: leaderInfo,\n      metadata,\n      snapshot: {\n        state: snapshot.state,\r\n        remainingMs: snapshot.remainingMs,\r\n        idleStartAt: snapshot.idleStartAt,\r\n        countdownEndAt: snapshot.countdownEndAt,\r\n        lastActivityAt: snapshot.lastActivityAt,\r\n        paused: snapshot.paused\r\n      },\r\n      config: {\r\n        idleGraceMs: config.idleGraceMs,\r\n        countdownMs: config.countdownMs,\r\n        warnBeforeMs: config.warnBeforeMs,\n        activityResetCooldownMs: config.activityResetCooldownMs,\n        storageKeyPrefix: config.storageKeyPrefix,\n        resumeBehavior: config.resumeBehavior,\n        resetOnWarningActivity: config.resetOnWarningActivity,\n        ignoreUserActivityWhenPaused: config.ignoreUserActivityWhenPaused,\n        allowManualExtendWhenExpired: config.allowManualExtendWhenExpired,\n        revision: this.sharedConfigRevision,\r\n        logicalClock: configLogicalClock,\r\n        writerId: this.configWriterId\r\n      }\r\n    };\r\n  }\r\n\r\n  private broadcastSharedState(\n    operation: SharedStateOperation,\n    options?: { persist?: boolean; crossTab?: boolean; configChanged?: boolean; reuseLatest?: boolean }\n  ): void {\n    if (this.isApplyingSharedState) {\n      return;\n    }\n    if (this.leaderElection?.isLeader() === false) {\n      return;\n    }\n\r\n    const persist = options?.persist ?? true;\r\n    const crossTab = options?.crossTab ?? true;\r\n\r\n    let state: SharedSessionState | null = null;\n\n    if (options?.reuseLatest && this.latestSharedState) {\n      state = this.latestSharedState;\n    } else {\n      state = this.buildSharedSessionState(operation, options?.configChanged === true);\n    }\n\n    if (!state) {\n      return;\n    }\n\n    this.updateTrackingFromState(state);\n\n    this.sharedStateCoordinator.publishState(state, { persist, broadcast: crossTab });\n    if (crossTab) {\n      const publish = () => this.broadcastCrossTab('sync', { sharedState: state });\n      if (this.isHandlingCrossTabMessage) {\n        if (typeof queueMicrotask === 'function') {\n          queueMicrotask(publish);\n        } else {\n          void Promise.resolve().then(publish);\n        }\n      } else {\r\n        publish();\n      }\n    }\n\n  }\n  private captureConfigSnapshot(config: SessionTimeoutConfig): SessionTimeoutConfig {\n    const httpActivity = config.httpActivity\n      ? {\n          ...config.httpActivity,\n          allowlist: [...config.httpActivity.allowlist],\n          denylist: [...config.httpActivity.denylist]\n        }\n      : config.httpActivity;\n\n    const actionDelays = config.actionDelays ? { ...config.actionDelays } : config.actionDelays;\n\n    return {\n      ...config,\n      httpActivity,\n      actionDelays,\n      domActivityEvents: [...config.domActivityEvents]\n    };\n  }\n\n  private configsDiffer(previous: SessionTimeoutConfig | null, next: SessionTimeoutConfig): boolean {\n    if (!previous) {\n      return true;\n    }\n    return this.computeConfigDiffKeys(previous, next).length > 0;\n  }\n\n  private computeConfigDiffKeys(\n    previous: SessionTimeoutConfig | null,\n    next: SessionTimeoutConfig\n  ): string[] {\n    const nextRecord = next as unknown as Record<string, unknown>;\n    if (!previous) {\n      return [...Object.keys(nextRecord)];\n    }\n    const prevRecord = previous as unknown as Record<string, unknown>;\n\n    const keys = new Set<string>([...Object.keys(prevRecord), ...Object.keys(nextRecord)]);\n    const changed: string[] = [];\n    keys.forEach(key => {\n      const prevValue = prevRecord[key];\n      const nextValue = nextRecord[key];\n      if (!this.areConfigValuesEqual(key, prevValue, nextValue)) {\n        changed.push(key);\n      }\n    });\n    return changed;\n  }\n\n  private areConfigValuesEqual(key: string, previous: unknown, next: unknown): boolean {\n    if (previous === next) {\n      return true;\n    }\n\n    if (key === 'domActivityEvents' && Array.isArray(previous) && Array.isArray(next)) {\n      return this.areDomEventArraysEqual(\n        previous as ReadonlyArray<DomActivityEventName>,\n        next as ReadonlyArray<DomActivityEventName>\n      );\n    }\n\n    if (typeof previous === 'object' && previous !== null && typeof next === 'object' && next !== null) {\n      if (key === 'httpActivity') {\n        return this.areHttpActivityEqual(previous as HttpActivityPolicyConfig, next as HttpActivityPolicyConfig);\n      }\n      if (key === 'actionDelays') {\n        return this.areActionDelaysEqual(previous as SessionActionDelays, next as SessionActionDelays);\n      }\n      return false;\n    }\n\n    return false;\n  }\n\n  private areDomEventArraysEqual(\n    previous: ReadonlyArray<DomActivityEventName>,\n    next: ReadonlyArray<DomActivityEventName>\n  ): boolean {\n    if (previous.length !== next.length) {\n      return false;\n    }\n    for (let index = 0; index < previous.length; index += 1) {\n      if (previous[index] !== next[index]) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  private areHttpActivityEqual(\n    previous: HttpActivityPolicyConfig,\n    next: HttpActivityPolicyConfig\n  ): boolean {\n    return (\n      previous.enabled === next.enabled &&\n      previous.strategy === next.strategy &&\n      previous.headerFlag === next.headerFlag &&\n      previous.contextToken === next.contextToken &&\n      previous.ignoreOnInitMs === next.ignoreOnInitMs &&\n      previous.cooldownMs === next.cooldownMs &&\n      previous.onlyWhenTabFocused === next.onlyWhenTabFocused &&\n      previous.primaryTabOnly === next.primaryTabOnly &&\n      this.areRegExpArraysEqual(previous.allowlist, next.allowlist) &&\n      this.areRegExpArraysEqual(previous.denylist, next.denylist)\n    );\n  }\n\n  private areRegExpArraysEqual(previous: readonly RegExp[], next: readonly RegExp[]): boolean {\n    if (previous.length !== next.length) {\n      return false;\n    }\n    for (let index = 0; index < previous.length; index += 1) {\n      if (previous[index].toString() !== next[index].toString()) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  private areActionDelaysEqual(\n    previous: SessionActionDelays,\n    next: SessionActionDelays\n  ): boolean {\n    return (\n      previous.start === next.start &&\n      previous.stop === next.stop &&\n      previous.resetIdle === next.resetIdle &&\n      previous.extend === next.extend &&\n      previous.pause === next.pause &&\n      previous.resume === next.resume &&\n      previous.expire === next.expire\n    );\n  }\n\n  private updateTrackingFromState(sharedState: SharedSessionState): void {\n    this.latestSharedState = sharedState;\n    this.sharedStateRevision = sharedState.metadata.revision;\n    this.lamportClock = Math.max(this.lamportClock, sharedState.metadata.logicalClock);\n    this.sharedConfigRevision = sharedState.config.revision;\n    this.configLamportClock = Math.max(this.configLamportClock, sharedState.config.logicalClock);\n    this.configWriterId = sharedState.config.writerId;\n    const leaderInfo = sharedState.leader ?? null;\n    this.leaderInfoInternal.set(leaderInfo);\n    const electionLeaderId = this.leaderElection?.leaderId?.() ?? null;\n    const nextLeaderId = electionLeaderId ?? leaderInfo?.id ?? null;\n    this.leaderIdInternal.set(nextLeaderId);\n    const leaderElectionState = this.leaderElection?.isLeader?.() ?? null;\n    if (leaderElectionState === true) {\n      this.leaderRoleInternal.set('leader');\n    } else if (nextLeaderId) {\n      this.leaderRoleInternal.set('follower');\n    } else {\n      this.leaderRoleInternal.set('unknown');\n    }\n  }\n\r\n  private handleSyncRequest(): void {\n    if (this.leaderElection?.isLeader() === false) {\n      return;\n    }\n    const reuseLatest = this.latestSharedState != null;\n    this.broadcastSharedState('bootstrap', { crossTab: true, reuseLatest, configChanged: !reuseLatest });\n  }\n  private restoreFromStorage(): void {\r\n    const initialConfig = this.configSignal();\r\n    const persistedConfig = readPersistedConfig(this.storage, initialConfig.storageKeyPrefix);\r\n    if (persistedConfig) {\r\n      const mergedConfig = this.mergePersistedConfigWithProvided(persistedConfig);\r\n      const { config, issues } = validateConfig(mergedConfig);\r\n      if (issues.length > 0) {\r\n        issues.forEach(issue => this.logger.warn('Persisted config issue: ' + issue.field + ' - ' + issue.message));\r\n      }\r\n      this.isRestoring = true;\r\n      this.configSignal.set(config);\r\n      this.lastAutoActivityResetAt = null;\r\n      this.refreshActivityCooldownRemaining(undefined, config);\r\n      this.isRestoring = false;\r\n    }\r\n\r\n    const snapshotData = readSnapshot(this.storage, this.configSignal().storageKeyPrefix);\r\n    if (snapshotData) {\r\n      this.applyPersistedSnapshot(snapshotData);\r\n    }\r\n  }\r\n\r\n  private mergePersistedConfigWithProvided(persisted: SessionTimeoutConfig): SessionTimeoutPartialConfig {\r\n    if (!this.providedConfig) {\r\n      return persisted;\r\n    }\r\n    const { httpActivity, actionDelays, ...shallow } = this.providedConfig;\r\n    return {\r\n      ...persisted,\r\n      ...shallow,\r\n      httpActivity: {\r\n        ...persisted.httpActivity,\r\n        ...(httpActivity ?? {})\r\n      },\r\n      actionDelays: {\r\n        ...persisted.actionDelays,\r\n        ...(actionDelays ?? {})\r\n      }\r\n    };\r\n  }\r\n\r\n  private applyPersistedSnapshot(persisted: PersistedSnapshot): void {\r\n    const config = this.configSignal();\r\n    const now = this.timeSource.now();\r\n\r\n    let state = persisted.state;\r\n    const idleStartAt = persisted.idleStartAt;\r\n    let countdownEndAt = persisted.countdownEndAt;\r\n    let remainingMs = persisted.remainingMs;\r\n\r\n    if (state === 'IDLE' && idleStartAt != null) {\r\n      const elapsed = now - idleStartAt;\r\n      if (elapsed >= config.idleGraceMs) {\r\n        if (countdownEndAt == null) {\r\n          countdownEndAt = idleStartAt + config.idleGraceMs + config.countdownMs;\r\n        }\r\n        const remaining = countdownEndAt - now;\r\n        if (remaining <= 0) {\r\n          state = 'EXPIRED';\r\n          remainingMs = 0;\r\n        } else {\r\n          remainingMs = remaining;\r\n          state = remaining <= config.warnBeforeMs ? 'WARN' : 'COUNTDOWN';\r\n        }\r\n      } else {\r\n        remainingMs = Math.max(0, config.idleGraceMs - elapsed);\r\n      }\r\n    } else if (countdownEndAt != null) {\r\n      const remaining = countdownEndAt - now;\r\n      if (remaining <= 0) {\r\n        state = 'EXPIRED';\r\n        remainingMs = 0;\r\n      } else {\r\n        remainingMs = remaining;\r\n        state = remaining <= config.warnBeforeMs ? 'WARN' : 'COUNTDOWN';\r\n      }\r\n    }\r\n\r\n    const inferredCountdownEndAt = countdownEndAt ?? ((state === 'COUNTDOWN' || state === 'WARN') ? now + remainingMs : null);\r\n\r\n    this.isRestoring = true;\r\n    this.snapshotSignal.set({\r\n      state,\r\n      remainingMs: Math.max(0, remainingMs),\r\n      warnBeforeMs: config.warnBeforeMs,\r\n      countdownMs: config.countdownMs,\r\n      idleGraceMs: config.idleGraceMs,\r\n      idleStartAt,\r\n      countdownEndAt: inferredCountdownEndAt,\r\n      lastActivityAt: persisted.lastActivityAt,\r\n      paused: persisted.paused\r\n    });\r\n    this.isRestoring = false;\r\n    this.refreshDerivedDurations(now, config);\r\n  }\r\n\r\n  private refreshDerivedDurations(now?: number, config?: SessionTimeoutConfig): void {\r\n    const effectiveConfig = config ?? this.configSignal();\r\n    const timestamp = now ?? this.timeSource.now();\r\n    const snapshot = this.snapshotSignal();\r\n\r\n    if (snapshot.state === 'EXPIRED') {\r\n      this.idleRemainingMsInternal.set(0);\r\n      this.countdownRemainingMsInternal.set(0);\r\n      this.totalRemainingMsInternal.set(0);\r\n      return;\r\n    }\r\n\r\n    let idleRemaining = 0;\r\n    if (snapshot.state === 'IDLE') {\r\n      if (snapshot.paused) {\r\n        idleRemaining = Math.max(0, Math.min(snapshot.remainingMs, effectiveConfig.idleGraceMs));\r\n      } else if (snapshot.idleStartAt != null) {\r\n        const elapsed = Math.max(0, timestamp - snapshot.idleStartAt);\r\n        idleRemaining = Math.max(0, effectiveConfig.idleGraceMs - elapsed);\r\n      } else {\r\n        idleRemaining = effectiveConfig.idleGraceMs;\r\n      }\r\n    }\r\n\r\n    let countdownRemaining = 0;\r\n    if (snapshot.state === 'COUNTDOWN' || snapshot.state === 'WARN') {\r\n      if (snapshot.paused) {\r\n        countdownRemaining = Math.max(0, snapshot.remainingMs);\r\n      } else if (snapshot.countdownEndAt != null) {\r\n        countdownRemaining = Math.max(0, snapshot.countdownEndAt - timestamp);\r\n      } else {\r\n        countdownRemaining = Math.max(0, snapshot.remainingMs);\r\n      }\r\n    } else if (snapshot.state === 'IDLE') {\r\n      countdownRemaining = effectiveConfig.countdownMs;\r\n    }\r\n\r\n    this.idleRemainingMsInternal.set(idleRemaining);\r\n    this.countdownRemainingMsInternal.set(countdownRemaining);\r\n    const totalRemaining = snapshot.state === 'IDLE' ? idleRemaining + countdownRemaining : countdownRemaining;\r\n    this.totalRemainingMsInternal.set(Math.max(0, totalRemaining));\r\n  }\r\n\r\n  private refreshActivityCooldownRemaining(now?: number, config?: SessionTimeoutConfig): void {\r\n    const effectiveConfig = config ?? this.configSignal();\r\n    const timestamp = now ?? this.timeSource.now();\r\n\r\n    let remaining = 0;\r\n    if (effectiveConfig.activityResetCooldownMs > 0 && this.lastAutoActivityResetAt != null) {\r\n      const elapsed = Math.max(0, timestamp - this.lastAutoActivityResetAt);\r\n      remaining = Math.max(0, effectiveConfig.activityResetCooldownMs - elapsed);\r\n      if (remaining === 0) {\r\n        this.lastAutoActivityResetAt = null;\r\n      }\r\n    } else {\r\n      remaining = 0;\r\n    }\r\n\r\n    this.activityCooldownRemainingMsInternal.set(remaining);\r\n  }\r\n\r\n  private syncLeaderState(): void {\n    if (!this.leaderElection) {\n      return;\n    }\n    const isLeader = this.leaderElection.isLeader();\n    const electionLeaderId = this.leaderElection.leaderId();\n    const leaderId = electionLeaderId ?? this.latestSharedState?.leader?.id ?? null;\n    const previousRole = this.leaderState;\n    const previousLeaderId = this.lastKnownLeaderId;\n\n    this.leaderState = isLeader;\n    this.lastKnownLeaderId = leaderId;\n    this.leaderIdInternal.set(leaderId);\n    if (isLeader) {\n      this.leaderRoleInternal.set('leader');\n    } else if (leaderId) {\n      this.leaderRoleInternal.set('follower');\n    } else {\n      this.leaderRoleInternal.set('unknown');\n    }\n\n    if (previousRole === null) {\n      if (isLeader) {\n        this.bumpLeaderEpoch();\n        this.broadcastSharedState('bootstrap');\n      } else if (!leaderId) {\n        this.requestLeaderSync('leader-missing', { force: true });\n      }\n      return;\n    }\n\n    if (previousRole !== isLeader) {\n      if (isLeader) {\n        this.bumpLeaderEpoch();\n        this.emitEvent('LeaderElected', { leaderId });\n        this.broadcastSharedState('bootstrap');\n      } else {\n        this.emitEvent('LeaderLost', { leaderId });\n        this.requestLeaderSync('leader-changed', { force: true });\n      }\n      return;\n    }\n\n    if (!isLeader && previousLeaderId !== this.lastKnownLeaderId) {\n      this.requestLeaderSync('leader-updated', { force: true });\n    }\n  }\n\r\n  private bumpLeaderEpoch(): void {\r\n    const remoteEpoch = this.latestSharedState?.leader?.epoch ?? 0;\r\n    const nextEpoch = Math.max(remoteEpoch + 1, this.leaderEpoch + 1, 1);\r\n    this.leaderEpoch = nextEpoch;\r\n  }\r\n\r\n  private requestLeaderSync(reason: string, options?: { force?: boolean }): void {\n    const now = this.timeSource.now();\n    if (!options?.force && this.lastSyncRequestAt != null && now - this.lastSyncRequestAt < HEARTBEAT_INTERVAL_MS) {\n      return;\n    }\n    this.lastSyncRequestAt = now;\r\n    this.sharedStateCoordinator.requestSync(reason);\r\n    this.broadcastCrossTab('sync-request');\r\n  }\r\n\r\n  private handleVisibilityResume(reason: string): void {\n    if (this.leaderElection) {\n      this.leaderElection.electLeader();\n    }\n    const now = this.timeSource.now();\n    const hiddenDuration = this.lastHiddenAt != null ? now - this.lastHiddenAt : 0;\n    this.lastHiddenAt = null;\n\n    if (!this.leaderElection) {\n      return;\n    }\n\r\n    if (this.leaderElection.isLeader()) {\r\n      if (hiddenDuration >= LEADER_TTL_MS) {\r\n        this.broadcastSharedState('bootstrap');\r\n      }\r\n      return;\r\n    }\r\n\r\n    const leaderInfo = this.latestSharedState?.leader;\r\n    const heartbeatStale = !leaderInfo || now - leaderInfo.heartbeatAt >= LEADER_TTL_MS;\r\n    if (hiddenDuration >= LEADER_TTL_MS || heartbeatStale) {\r\n      this.requestLeaderSync(reason, { force: true });\r\n    }\r\n  }\r\n\r\n  private updateSnapshot(partial: Partial<SessionSnapshot>, operation: SharedStateOperation = 'reset-by-activity'): void {\r\n    let previous: SessionSnapshot | null = null;\r\n    let next: SessionSnapshot | null = null;\r\n\r\n    this.snapshotSignal.update(current => {\r\n      previous = current;\r\n      const updated: SessionSnapshot = {\r\n        ...current,\r\n        warnBeforeMs: this.configSignal().warnBeforeMs,\r\n        countdownMs: this.configSignal().countdownMs,\r\n        idleGraceMs: this.configSignal().idleGraceMs,\r\n        ...partial\r\n      };\r\n      next = updated;\r\n      return updated;\r\n    });\r\n\r\n    if (!next || !previous) {\r\n      return;\r\n    }\r\n\r\n    this.refreshDerivedDurations();\r\n\r\n    if (operation !== 'manual-extend' && this.areSnapshotsEqual(previous, next)) {\n      return;\n    }\n\r\n    if (!this.isRestoring && this.shouldPersistSnapshotChange(previous, next, operation)) {\r\n      persistSnapshot(this.storage, this.configSignal().storageKeyPrefix, next);\r\n    }\r\n\r\n    if (!this.isRestoring && !this.isApplyingSharedState && this.shouldBroadcastSnapshotChange(previous, next, operation)) {\r\n      this.broadcastSharedState(operation);\r\n    }\r\n  }\r\n\r\n  private areSnapshotsEqual(a: SessionSnapshot, b: SessionSnapshot): boolean {\r\n    return (\r\n      a.state === b.state &&\r\n      a.remainingMs === b.remainingMs &&\r\n      a.idleStartAt === b.idleStartAt &&\r\n      a.countdownEndAt === b.countdownEndAt &&\r\n      a.lastActivityAt === b.lastActivityAt &&\r\n      a.paused === b.paused &&\r\n      a.warnBeforeMs === b.warnBeforeMs &&\r\n      a.countdownMs === b.countdownMs &&\r\n      a.idleGraceMs === b.idleGraceMs\r\n    );\r\n  }\r\n\r\n  private shouldPersistSnapshotChange(\r\n    previous: SessionSnapshot,\r\n    next: SessionSnapshot,\r\n    operation: SharedStateOperation\r\n  ): boolean {\r\n    if (operation === 'auto-extend') {\r\n      return (\r\n        previous.countdownEndAt !== next.countdownEndAt ||\r\n        previous.idleStartAt !== next.idleStartAt ||\r\n        previous.lastActivityAt !== next.lastActivityAt\r\n      );\r\n    }\r\n    return true;\r\n  }\r\n\r\n  private shouldBroadcastSnapshotChange(\r\n    previous: SessionSnapshot,\r\n    next: SessionSnapshot,\r\n    operation: SharedStateOperation\r\n  ): boolean {\r\n    if (operation === 'auto-extend') {\r\n      return (\r\n        previous.countdownEndAt !== next.countdownEndAt ||\r\n        previous.idleStartAt !== next.idleStartAt ||\r\n        previous.lastActivityAt !== next.lastActivityAt\r\n      );\r\n    }\r\n    return true;\r\n  }\r\n\r\n  private hasSharedConfigDiff(previous: SessionTimeoutConfig, next: SessionTimeoutConfig): boolean {\n    return (\n      previous.idleGraceMs !== next.idleGraceMs ||\n      previous.countdownMs !== next.countdownMs ||\n      previous.warnBeforeMs !== next.warnBeforeMs ||\n      previous.activityResetCooldownMs !== next.activityResetCooldownMs ||\n      previous.storageKeyPrefix !== next.storageKeyPrefix ||\n      previous.resumeBehavior !== next.resumeBehavior ||\n      previous.resetOnWarningActivity !== next.resetOnWarningActivity ||\n      previous.ignoreUserActivityWhenPaused !== next.ignoreUserActivityWhenPaused ||\n      previous.allowManualExtendWhenExpired !== next.allowManualExtendWhenExpired\n    );\n  }\n\r\n  private resolveConfigOperationForChange(\n    previous: SessionTimeoutConfig,\n    next: SessionTimeoutConfig\n  ): SharedStateOperation {\n    if (previous.storageKeyPrefix !== next.storageKeyPrefix) {\n      return 'bootstrap';\n    }\n    return 'config-change';\n  }\n\n  private shouldResetForSource(\n    source: ActivityEvent['source'],\n    snapshot: SessionSnapshot,\n    config: SessionTimeoutConfig\n  ): boolean {\n    if (source === 'manual') {\n      return true;\n    }\n    if (snapshot.state === 'WARN') {\n      return config.resetOnWarningActivity;\n    }\n    return true;\n  }\n\n  private getResetPriority(source: ActivityEvent['source']): number {\n    switch (source) {\n      case 'manual':\n        return 400;\n      case 'http':\n        return 300;\n      case 'router':\n        return 250;\n      case 'dom':\n        return 200;\n      case 'cross-tab':\n      default:\n        return 150;\n    }\n  }\n\n  private scheduleResetIdle(\n    source: ActivityEvent['source'],\n    priority: number,\n    config: SessionTimeoutConfig,\n    work: () => void\n  ): boolean {\n    if (this.pendingResetPriority != null && priority < this.pendingResetPriority) {\n      return false;\n    }\n\n    const configuredDelay = Math.max(0, config.actionDelays.resetIdle ?? 0);\n    const wrappedWork = () => {\n      try {\n        work();\n      } finally {\n        this.pendingResetPriority = null;\n      }\n    };\n\n    if (configuredDelay <= 0) {\n      this.pendingResetPriority = priority;\n      this.executeWithDelay('resetIdle', wrappedWork);\n      return true;\n    }\n\n    this.executeWithDelay('resetIdle', wrappedWork);\n    this.pendingResetPriority = priority;\n    return true;\n  }\n\n  private emitEvent(type: SessionEvent['type'], meta?: Record<string, unknown>): void {\n    const snapshot = this.snapshotSignal();\n    const event: SessionEvent = {\n      type,\n      at: this.timeSource.now(),\n      state: snapshot.state,\r\n      snapshot,\r\n      meta\r\n    };\r\n    this.logger.debug('Event: ' + type, event);\r\n    this.eventsSubject.next(event);\r\n  }\r\n\r\n  private emitActivity(source: ActivityEvent['source'], meta?: Record<string, unknown>): void {\r\n    const activity: ActivityEvent = {\r\n      source,\r\n      at: this.timeSource.now(),\r\n      meta\r\n    };\r\n    this.activitySubject.next(activity);\r\n    if (typeof this.hooks.onActivity === 'function') {\r\n      try {\r\n        this.hooks.onActivity(activity);\r\n      } catch (error) {\r\n        this.logger.error('Error executing onActivity hook', error);\r\n      }\r\n    }\r\n  }\r\n\r\n  private async runExpireHooks(): Promise<void> {\r\n    const snapshot = this.snapshotSignal();\r\n    const pending: Promise<void>[] = [];\r\n    if (typeof this.hooks.onExpire === 'function') {\r\n      try {\r\n        const result = this.hooks.onExpire(snapshot);\r\n        if (result instanceof Promise) {\r\n          pending.push(result);\r\n        }\r\n      } catch (error) {\r\n        this.logger.error('Error executing onExpire hook', error);\r\n      }\r\n    }\r\n\r\n    this.onExpireCallbacks.forEach(callback => {\r\n      try {\r\n        const result = callback(snapshot);\r\n        if (result instanceof Promise) {\r\n          pending.push(result);\r\n        }\r\n      } catch (error) {\r\n        this.logger.error('Error executing registered expire callback', error);\r\n      }\r\n    });\r\n\r\n    if (pending.length > 0) {\r\n      try {\r\n        await Promise.allSettled(pending);\r\n      } catch (error) {\r\n        this.logger.error('Error awaiting expire callbacks', error);\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n","import { HttpContextToken } from '@angular/common/http';\r\n\r\nconst tokenRegistry = new Map<string, HttpContextToken<boolean>>();\r\n\r\n/**\r\n * Retrieve (or lazily create) a shared HttpContextToken used to flag a request\r\n * as session activity.\r\n */\r\nexport function getSessionActivityContextToken(name: string): HttpContextToken<boolean> {\r\n  let token = tokenRegistry.get(name);\r\n  if (!token) {\r\n    token = new HttpContextToken<boolean>(() => false);\r\n    tokenRegistry.set(name, token);\r\n  }\r\n  return token;\r\n}\r\n","import { DOCUMENT } from '@angular/common';\nimport { Injectable, inject } from '@angular/core';\nimport type { HttpContext, HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';\nimport type { Observable } from 'rxjs';\r\n\r\nimport { LeaderElectionService } from '../services/leader-election.service';\r\nimport { SessionTimeoutService } from '../services/session-timeout.service';\r\nimport type { SessionTimeoutConfig } from '../models/session-timeout-config';\r\nimport { getSessionActivityContextToken } from './session-activity-http.context';\r\n\r\n@Injectable()\r\nexport class SessionActivityHttpInterceptor implements HttpInterceptor {\r\n  private readonly bootstrappedAt = Date.now();\n  private cooldownUntil = 0;\n  private readonly sessionTimeout = inject(SessionTimeoutService);\n  private readonly leaderElection = inject(LeaderElectionService, { optional: true });\n  private readonly document = inject(DOCUMENT, { optional: true }) as Document | null;\n\r\n  intercept(req: HttpRequest<unknown>, next: HttpHandler): Observable<HttpEvent<unknown>> {\r\n    const config = this.sessionTimeout.getConfig();\r\n    if (this.shouldTreatAsActivity(req, config)) {\r\n      const meta = {\r\n        method: req.method,\r\n        url: req.urlWithParams,\r\n        strategy: config.httpActivity.strategy\r\n      } satisfies Record<string, unknown>;\r\n      this.sessionTimeout.resetIdle(meta, { source: 'http' });\r\n    }\r\n\r\n    return next.handle(req);\r\n  }\r\n\r\n  private shouldTreatAsActivity(req: HttpRequest<unknown>, config: SessionTimeoutConfig): boolean {\r\n    const policy = config.httpActivity;\r\n    if (!policy.enabled) {\r\n      return false;\r\n    }\r\n\r\n    if (config.strategy === 'userOnly') {\r\n      return false;\r\n    }\r\n\r\n    const now = Date.now();\r\n\r\n    if (policy.ignoreOnInitMs > 0 && now - this.bootstrappedAt < policy.ignoreOnInitMs) {\r\n      return false;\r\n    }\r\n\r\n    if (policy.cooldownMs > 0 && now < this.cooldownUntil) {\r\n      return false;\r\n    }\r\n\r\n    if (policy.onlyWhenTabFocused && !this.isDocumentFocused()) {\r\n      return false;\r\n    }\r\n\r\n    if (policy.primaryTabOnly && this.leaderElection && !this.leaderElection.isLeader()) {\r\n      return false;\r\n    }\r\n\r\n    const url = req.urlWithParams;\r\n    if (policy.denylist.some(pattern => this.matches(pattern, url))) {\r\n      return false;\r\n    }\r\n\r\n    let shouldReset = false;\r\n\r\n    switch (policy.strategy) {\r\n      case 'allowlist':\r\n        shouldReset = this.matchesAllowlist(req, policy);\r\n        break;\r\n      case 'headerFlag':\r\n        shouldReset = this.matchesHeaderFlag(req, policy);\r\n        break;\r\n      case 'aggressive':\r\n        shouldReset = true;\r\n        break;\r\n      default:\r\n        shouldReset = false;\r\n    }\r\n\r\n    if (!shouldReset) {\r\n      return false;\r\n    }\r\n\r\n    if (policy.cooldownMs > 0) {\r\n      this.cooldownUntil = now + policy.cooldownMs;\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  private matchesAllowlist(\r\n    req: HttpRequest<unknown>,\r\n    policy: SessionTimeoutConfig['httpActivity']\r\n  ): boolean {\r\n    if (policy.allowlist.length === 0) {\r\n      return false;\r\n    }\r\n\r\n    const url = req.urlWithParams;\r\n    return policy.allowlist.some(pattern => this.matches(pattern, url));\r\n  }\r\n\r\n  private matchesHeaderFlag(\r\n    req: HttpRequest<unknown>,\r\n    policy: SessionTimeoutConfig['httpActivity']\r\n  ): boolean {\r\n    const headerName = policy.headerFlag ?? 'X-Session-Activity';\r\n    const headerValue = req.headers.get(headerName);\r\n    if (this.isTruthy(headerValue)) {\r\n      return true;\r\n    }\r\n\r\n    if (policy.contextToken) {\r\n      return this.resolveContextFlag(req, policy.contextToken);\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  private resolveContextFlag(req: HttpRequest<unknown>, tokenName: string): boolean {\r\n    const context = req.context as HttpContext | undefined;\r\n    if (!context) {\r\n      return false;\r\n    }\r\n    const token = getSessionActivityContextToken(tokenName);\r\n    return context.get(token) === true;\r\n  }\r\n\r\n  private isDocumentFocused(): boolean {\r\n    if (!this.document) {\r\n      return true;\r\n    }\r\n    if (typeof this.document.hasFocus === 'function') {\r\n      return this.document.hasFocus();\r\n    }\r\n    return this.document.visibilityState !== 'hidden';\r\n  }\r\n\r\n  private matches(pattern: RegExp, value: string): boolean {\r\n    if (pattern.global || pattern.sticky) {\r\n      pattern.lastIndex = 0;\r\n    }\r\n    return pattern.test(value);\r\n  }\r\n\r\n  private isTruthy(value: string | null): boolean {\r\n    if (value == null) {\r\n      return false;\r\n    }\r\n    const normalized = value.trim().toLowerCase();\r\n    if (!normalized) {\r\n      return false;\r\n    }\r\n    return !['false', '0', 'off', 'no'].includes(normalized);\r\n  }\r\n}\r\n","import { inject } from '@angular/core';\r\nimport type { CanActivateFn, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';\r\n\r\nimport type { SessionTimeoutPartialConfig } from '../models/session-timeout-config';\r\nimport { SessionTimeoutService } from '../services/session-timeout.service';\r\n\r\nexport interface SessionTimeoutRouteConfig {\r\n  config?: SessionTimeoutPartialConfig;\r\n  allowWhenExpired?: boolean;\r\n  autoResume?: boolean;\r\n}\r\n\r\nexport const SESSION_TIMEOUT_ROUTE_KEY = 'sessionTimeout';\r\n\r\nexport const SessionExpiredGuard: CanActivateFn = (route: ActivatedRouteSnapshot, _state: RouterStateSnapshot) => {\n  const sessionTimeout = inject(SessionTimeoutService);\n  const override = route.data?.[SESSION_TIMEOUT_ROUTE_KEY] as SessionTimeoutRouteConfig | undefined;\n  void _state;\n\r\n  if (override?.config) {\r\n    sessionTimeout.setConfig(override.config);\r\n  }\r\n\r\n  const snapshot = sessionTimeout.getSnapshot();\r\n\r\n  if (override?.autoResume && snapshot.paused) {\r\n    sessionTimeout.resume();\r\n  }\r\n\r\n  if (snapshot.state === 'EXPIRED' && !override?.allowWhenExpired) {\r\n    return false;\r\n  }\r\n\r\n  return true;\r\n};\r\n","import { Pipe } from '@angular/core';\r\nimport type { PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n  name: 'formatMs',\r\n  standalone: true\r\n})\r\nexport class FormatMsPipe implements PipeTransform {\r\n  transform(value: number | null | undefined): string {\r\n    if (value == null || Number.isNaN(value)) {\r\n      return '';\r\n    }\r\n    const totalSeconds = Math.max(0, Math.floor(value / 1000));\r\n    const minutes = Math.floor(totalSeconds / 60);\r\n    const seconds = totalSeconds % 60;\r\n    return minutes + ':' + seconds.toString().padStart(2, '0');\r\n  }\r\n}\r\n","import { APP_INITIALIZER, EnvironmentProviders, Injector, Optional, Provider, makeEnvironmentProviders } from '@angular/core';\r\n\r\nimport type { SessionTimeoutPartialConfig } from './models/session-timeout-config';\r\nimport { SESSION_TIMEOUT_CONFIG } from './tokens/config.token';\r\nimport { SessionTimeoutService } from './services/session-timeout.service';\r\n\r\nexport type SessionTimeoutConfigInput =\r\n  | SessionTimeoutPartialConfig\r\n  | (() => SessionTimeoutPartialConfig);\r\n\r\nfunction resolveConfig(input: SessionTimeoutConfigInput): SessionTimeoutPartialConfig {\r\n  return typeof input === 'function' ? input() : input;\r\n}\r\n\r\nexport function createSessionTimeoutProviders(\r\n  config: SessionTimeoutConfigInput\r\n): Provider[] {\r\n  const factory = () => resolveConfig(config);\r\n  const initializerFactory = (\r\n    injector: Injector,\r\n    providedConfig: SessionTimeoutPartialConfig | null | undefined\r\n  ) => () => {\r\n    if (!providedConfig) {\r\n      return;\r\n    }\r\n    const service = injector.get(SessionTimeoutService);\r\n    service.setConfig(providedConfig);\r\n  };\r\n\r\n  return [\r\n    {\r\n      provide: SESSION_TIMEOUT_CONFIG,\r\n      useFactory: factory\r\n    },\r\n    SessionTimeoutService,\r\n    {\r\n      provide: APP_INITIALIZER,\r\n      multi: true,\r\n      deps: [Injector, [new Optional(), SESSION_TIMEOUT_CONFIG]],\r\n      useFactory: initializerFactory\r\n    }\r\n  ];\r\n}\r\n\r\nexport function provideSessionTimeout(\r\n  config: SessionTimeoutConfigInput\r\n): EnvironmentProviders {\r\n  return makeEnvironmentProviders(createSessionTimeoutProviders(config));\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}