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