Skip to content

@jayoncode/browser-lifecycle API


@jayoncode/browser-lifecycle API

Classes

BrowserLifecycleError

Base error for all public Browser Lifecycle infrastructure failures.

Extends

  • Error

Extended by

Constructors

Constructor
ts
new BrowserLifecycleError(
   message: string, 
   code: BrowserLifecycleErrorCode, 
   options?: BrowserLifecycleErrorOptions): BrowserLifecycleError;
Parameters
ParameterType
messagestring
codeBrowserLifecycleErrorCode
optionsBrowserLifecycleErrorOptions
Returns

BrowserLifecycleError

Overrides
ts
Error.constructor

Properties

PropertyModifierType
codereadonlyBrowserLifecycleErrorCode
detailsreadonlyReadonly<PlainObject> | undefined

ConfigurationError

Error thrown when configuration input is invalid.

Extends

Constructors

Constructor
ts
new ConfigurationError(message: string, options?: BrowserLifecycleErrorOptions): ConfigurationError;
Parameters
ParameterType
messagestring
optionsBrowserLifecycleErrorOptions
Returns

ConfigurationError

Overrides

BrowserLifecycleError.constructor

Properties

PropertyModifierTypeInherited from
codereadonlyBrowserLifecycleErrorCodeBrowserLifecycleError.code
detailsreadonlyReadonly<PlainObject> | undefinedBrowserLifecycleError.details

UnsupportedFeatureError

Error thrown when a required feature is unavailable.

Extends

Constructors

Constructor
ts
new UnsupportedFeatureError(message: string, options?: BrowserLifecycleErrorOptions): UnsupportedFeatureError;
Parameters
ParameterType
messagestring
optionsBrowserLifecycleErrorOptions
Returns

UnsupportedFeatureError

Overrides

BrowserLifecycleError.constructor

Properties

PropertyModifierTypeInherited from
codereadonlyBrowserLifecycleErrorCodeBrowserLifecycleError.code
detailsreadonlyReadonly<PlainObject> | undefinedBrowserLifecycleError.details

InitializationError

Error thrown when the package cannot initialize correctly.

Extends

Constructors

Constructor
ts
new InitializationError(message: string, options?: BrowserLifecycleErrorOptions): InitializationError;
Parameters
ParameterType
messagestring
optionsBrowserLifecycleErrorOptions
Returns

InitializationError

Overrides

BrowserLifecycleError.constructor

Properties

PropertyModifierTypeInherited from
codereadonlyBrowserLifecycleErrorCodeBrowserLifecycleError.code
detailsreadonlyReadonly<PlainObject> | undefinedBrowserLifecycleError.details

LifecycleError

Error thrown when a lifecycle transition is invalid.

Extends

Constructors

Constructor
ts
new LifecycleError(message: string, options?: BrowserLifecycleErrorOptions): LifecycleError;
Parameters
ParameterType
messagestring
optionsBrowserLifecycleErrorOptions
Returns

LifecycleError

Overrides

BrowserLifecycleError.constructor

Properties

PropertyModifierTypeInherited from
codereadonlyBrowserLifecycleErrorCodeBrowserLifecycleError.code
detailsreadonlyReadonly<PlainObject> | undefinedBrowserLifecycleError.details

ModuleRegistryError

Error thrown when the module registry is used incorrectly.

Extends

Constructors

Constructor
ts
new ModuleRegistryError(message: string, options?: BrowserLifecycleErrorOptions): ModuleRegistryError;
Parameters
ParameterType
messagestring
optionsBrowserLifecycleErrorOptions
Returns

ModuleRegistryError

Overrides

BrowserLifecycleError.constructor

Properties

PropertyModifierTypeInherited from
codereadonlyBrowserLifecycleErrorCodeBrowserLifecycleError.code
detailsreadonlyReadonly<PlainObject> | undefinedBrowserLifecycleError.details

PluginError

Placeholder plugin error used before the plugin system is implemented.

Extends

Constructors

Constructor
ts
new PluginError(message: string, options?: BrowserLifecycleErrorOptions): PluginError;
Parameters
ParameterType
messagestring
optionsBrowserLifecycleErrorOptions
Returns

PluginError

Overrides

BrowserLifecycleError.constructor

Properties

PropertyModifierTypeInherited from
codereadonlyBrowserLifecycleErrorCodeBrowserLifecycleError.code
detailsreadonlyReadonly<PlainObject> | undefinedBrowserLifecycleError.details

TypedEventEmitter

Generic typed event emitter used by Browser Lifecycle Manager internals.

Type Parameters

Type Parameter
TEventMap extends EventMap

Constructors

Constructor
ts
new TypedEventEmitter<TEventMap>(options?: TypedEventEmitterOptions<TEventMap>): TypedEventEmitter<TEventMap>;
Parameters
ParameterType
optionsTypedEventEmitterOptions<TEventMap>
Returns

TypedEventEmitter<TEventMap>

Methods

on()
ts
on<TEventName>(event: TEventName, listener: EventListener<TEventMap, TEventName>): EventSubscription<TEventName>;

Registers a persistent listener.

Type Parameters
Type Parameter
TEventName extends string
Parameters
ParameterType
eventTEventName
listenerEventListener<TEventMap, TEventName>
Returns

EventSubscription<TEventName>

off()
ts
off<TEventName>(event: TEventName, listener: EventListener<TEventMap, TEventName>): void;

Removes the first listener matching the provided function reference.

Type Parameters
Type Parameter
TEventName extends string
Parameters
ParameterType
eventTEventName
listenerEventListener<TEventMap, TEventName>
Returns

void

once()
ts
once<TEventName>(event: TEventName, listener: EventListener<TEventMap, TEventName>): EventSubscription<TEventName>;

Registers a one-time listener.

Type Parameters
Type Parameter
TEventName extends string
Parameters
ParameterType
eventTEventName
listenerEventListener<TEventMap, TEventName>
Returns

EventSubscription<TEventName>

emit()
ts
emit<TEventName>(
   event: TEventName, 
   payload: EventPayload<TEventMap, TEventName>, 
options?: EmitEventOptions): EventDispatchMetadata<TEventName>;

Emits an event synchronously and returns dispatch metadata.

Type Parameters
Type Parameter
TEventName extends string
Parameters
ParameterType
eventTEventName
payloadEventPayload<TEventMap, TEventName>
optionsEmitEventOptions
Returns

EventDispatchMetadata<TEventName>

listeners()
ts
listeners<TEventName>(event: TEventName): readonly EventListener<TEventMap, TEventName>[];

Returns the active listeners for one event in registration order.

Type Parameters
Type Parameter
TEventName extends string
Parameters
ParameterType
eventTEventName
Returns

readonly EventListener<TEventMap, TEventName>[]

listenerCount()
ts
listenerCount(event?: EventName<TEventMap>): number;

Returns the active listener count for one event or for the full emitter.

Parameters
ParameterType
event?EventName<TEventMap>
Returns

number

hasListeners()
ts
hasListeners(event?: EventName<TEventMap>): boolean;

Returns true when listeners exist for one event or for the entire emitter.

Parameters
ParameterType
event?EventName<TEventMap>
Returns

boolean

removeAll()
ts
removeAll(event?: EventName<TEventMap>): void;

Removes all listeners for one event or for the entire emitter.

Parameters
ParameterType
event?EventName<TEventMap>
Returns

void

destroy()
ts
destroy(): void;

Destroys the emitter and clears all listeners.

Returns

void

definitions()
ts
definitions(): readonly EventDefinition<EventName<TEventMap>>[];

Returns the registered definitions for diagnostics and tests.

Returns

readonly EventDefinition<EventName<TEventMap>>[]

stats()
ts
stats<TEventName>(event: TEventName): EventRegistryStats<TEventName>;

Returns dispatch statistics for one event.

Type Parameters
Type Parameter
TEventName extends string
Parameters
ParameterType
eventTEventName
Returns

EventRegistryStats<TEventName>

Interfaces

PageVisibleEventMetadata

Metadata carried by page:visible events.

Extends

  • PlainObject

Extended by

Indexable

ts
[key: string]: unknown

Properties

PropertyModifierType
reasonreadonly"initial" | "visibilitychange"

PageHiddenEventMetadata

Metadata carried by page:hidden events.

Extends

Indexable

ts
[key: string]: unknown

Properties

PropertyModifierTypeInherited from
reasonreadonly"initial" | "visibilitychange"PageHiddenEventMetadata.reason
likelyLastSignalreadonlyboolean-

BrowserLifecycleTimestamps

Timestamp metadata exposed in snapshot reads.

Properties

PropertyModifierType
createdAtreadonlynumber
disposedAt?readonlynumber
lastEventAt?readonlynumber
startedAt?readonlynumber
stoppedAt?readonlynumber
updatedAtreadonlynumber

BrowserLifecycleSnapshot

Public snapshot shape returned by the Session Core.

Properties

PropertyModifierType
activityreadonlyBrowserLifecycleActivityState
attentionreadonlyBrowserLifecycleAttentionState
capabilitiesreadonlyBrowserLifecycleCapabilities
connectivityreadonlyBrowserLifecycleConnectivityState
lifecyclereadonlyBrowserLifecyclePageState
phasereadonlyBrowserLifecyclePhase
tabreadonlyBrowserLifecycleTabState
timestampsreadonlyBrowserLifecycleTimestamps
visibilityreadonlyBrowserLifecycleVisibilityState

BrowserLifecycleEvent

Shared event payload contract for normalized public events.

Type Parameters

Type ParameterDefault type
TType extends BrowserLifecycleEventName-
TCurrent-
TPrevious-
TMetadata extends PlainObject | undefinedPlainObject | undefined

Properties

PropertyModifierType
currentreadonlyTCurrent
metadatareadonlyTMetadata
previousreadonlyTPrevious
snapshotreadonlyBrowserLifecycleSnapshot
sourcereadonlyBrowserLifecycleEventSource
timestampreadonlynumber
typereadonlyTType

BrowserLifecycleEventMap

Public event payload map used by the Session Core event API.

Properties

PropertyModifierType
activity:detectedreadonlyBrowserLifecycleEvent<"activity:detected", "active", BrowserLifecycleActivityState, | { activitySource: string; } | undefined>
activity:resetreadonlyBrowserLifecycleEvent<"activity:reset", "active", BrowserLifecycleActivityState, | { activitySource: string; } | undefined>
connection:offlinereadonlyBrowserLifecycleEvent<"connection:offline", "offline", BrowserLifecycleConnectivityState, | { advisory: true; reason?: "offline" | "initial"; } | undefined>
connection:onlinereadonlyBrowserLifecycleEvent<"connection:online", "online", BrowserLifecycleConnectivityState, | { advisory: true; reason?: "online" | "initial"; } | undefined>
connection:reconnectreadonlyBrowserLifecycleEvent<"connection:reconnect", "online", "offline", | { advisory: true; offlineDuration: number; } | undefined>
page:hiddenreadonlyBrowserLifecycleEvent<"page:hidden", "hidden", BrowserLifecycleVisibilityState, PageHiddenEventMetadata>
page:resumereadonlyBrowserLifecycleEvent<"page:resume", "active", BrowserLifecyclePageState>
page:suspendreadonlyBrowserLifecycleEvent<"page:suspend", "hidden" | "frozen" | "terminated", BrowserLifecyclePageState>
page:visiblereadonlyBrowserLifecycleEvent<"page:visible", "visible", BrowserLifecycleVisibilityState, PageVisibleEventMetadata>
plugin:errorreadonlyBrowserLifecycleEvent<"plugin:error", "error", "registered" | "ready" | undefined, | { hook?: string; pluginId: string; } | undefined>
plugin:registeredreadonlyBrowserLifecycleEvent<"plugin:registered", "registered", undefined, | { pluginId: string; } | undefined>
plugin:removedreadonlyBrowserLifecycleEvent<"plugin:removed", "removed", "registered" | undefined, | { pluginId: string; reason?: string; } | undefined>
session:activereadonlyBrowserLifecycleEvent<"session:active", "active", BrowserLifecycleActivityState, | { activitySource: string; idleDuration?: number; } | undefined>
session:idlereadonlyBrowserLifecycleEvent<"session:idle", "idle", BrowserLifecycleActivityState, | { idleTimeout: number; lastActivityAt: number; } | undefined>
session:restoredreadonlyBrowserLifecycleEvent<"session:restored", "running" | "stopped", BrowserLifecyclePhase>
session:startedreadonlyBrowserLifecycleEvent<"session:started", "running", BrowserLifecyclePhase, | { autoStart: boolean; } | undefined>
session:stoppedreadonlyBrowserLifecycleEvent<"session:stopped", "stopped", BrowserLifecyclePhase, | { reason: "dispose" | "manual-stop"; } | undefined>
tab:primaryreadonlyBrowserLifecycleEvent<"tab:primary", "primary", BrowserLifecycleTabState, | { reason?: string; tabId?: string; transport?: string; } | undefined>
tab:secondaryreadonlyBrowserLifecycleEvent<"tab:secondary", "secondary", BrowserLifecycleTabState, | { reason?: string; tabId?: string; transport?: string; } | undefined>
tab:messagereadonlyBrowserLifecycleEvent<"tab:message", "message", undefined, | { messageType: string; senderId: string; value?: string; } | undefined>
window:blurreadonlyBrowserLifecycleEvent<"window:blur", "unfocused", BrowserLifecycleAttentionState>
window:focusreadonlyBrowserLifecycleEvent<"window:focus", "focused", BrowserLifecycleAttentionState>

BrowserLifecycle

Public BrowserLifecycle runtime contract.

Methods

dispose()
ts
dispose(): void;
Returns

void

getCapabilities()
ts
getCapabilities(): Readonly<BrowserLifecycleCapabilities>;
Returns

Readonly<BrowserLifecycleCapabilities>

getPluginHookLog()
ts
getPluginHookLog(): readonly BrowserLifecyclePluginHookLogEntry[];
Returns

readonly BrowserLifecyclePluginHookLogEntry[]

getPlugins()
ts
getPlugins(): readonly BrowserLifecyclePluginDiagnostic[];
Returns

readonly BrowserLifecyclePluginDiagnostic[]

getRuntimeDiagnostics()
ts
getRuntimeDiagnostics(): BrowserLifecycleRuntimeDiagnostics;
Returns

BrowserLifecycleRuntimeDiagnostics

getSnapshot()
ts
getSnapshot(): Readonly<BrowserLifecycleSnapshot>;
Returns

Readonly<BrowserLifecycleSnapshot>

isRunning()
ts
isRunning(): boolean;
Returns

boolean

off()
ts
off<TEventName>(event: TEventName, listener: BrowserLifecycleEventListener<TEventName>): void;
Type Parameters
Type Parameter
TEventName extends BrowserLifecycleEventName
Parameters
ParameterType
eventTEventName
listenerBrowserLifecycleEventListener<TEventName>
Returns

void

on()
ts
on<TEventName>(event: TEventName, listener: BrowserLifecycleEventListener<TEventName>): () => void;
Type Parameters
Type Parameter
TEventName extends BrowserLifecycleEventName
Parameters
ParameterType
eventTEventName
listenerBrowserLifecycleEventListener<TEventName>
Returns

() => void

once()
ts
once<TEventName>(event: TEventName, listener: BrowserLifecycleEventListener<TEventName>): () => void;
Type Parameters
Type Parameter
TEventName extends BrowserLifecycleEventName
Parameters
ParameterType
eventTEventName
listenerBrowserLifecycleEventListener<TEventName>
Returns

() => void

setPluginEnabled()
ts
setPluginEnabled(pluginId: string, enabled: boolean): void;
Parameters
ParameterType
pluginIdstring
enabledboolean
Returns

void

start()
ts
start(): void;
Returns

void

stop()
ts
stop(): void;
Returns

void

subscribe()
ts
subscribe(listener: BrowserLifecycleSubscriber): () => void;
Parameters
ParameterType
listenerBrowserLifecycleSubscriber
Returns

() => void

use()
ts
use(plugin: BrowserLifecyclePlugin): void;
Parameters
ParameterType
pluginBrowserLifecyclePlugin
Returns

void


BrowserLifecycleEventStat

Per-event dispatch statistics exposed for diagnostics tooling.

Properties

PropertyModifierType
emissionCountreadonlynumber
errorCountreadonlynumber
eventreadonlyBrowserLifecycleEventName
lastDispatchedAt?readonlynumber
listenerCountreadonlynumber

BrowserLifecycleRuntimeDiagnostics

Runtime diagnostics snapshot for performance and developer tooling.

Properties

PropertyModifierType
capabilitiesreadonlyReadonly<BrowserLifecycleCapabilities>
debugreadonlyboolean
eventBufferSizereadonlynumber
eventStatsreadonlyreadonly BrowserLifecycleEventStat[]
isRunningreadonlyboolean
moduleCountreadonlynumber
phasereadonlyBrowserLifecyclePhase
pluginCountreadonlynumber
subscriberCountreadonlynumber
totalEmissionCountreadonlynumber
totalListenerCountreadonlynumber

ConditionHandle

Methods

unsubscribe()
ts
unsubscribe(): void;
Returns

void


ConditionsApi

Methods

visible()
ts
visible(handler: ConditionHandler): ConditionHandle;
Parameters
ParameterType
handlerConditionHandler
Returns

ConditionHandle

hidden()
ts
hidden(handler: ConditionHandler): ConditionHandle;
Parameters
ParameterType
handlerConditionHandler
Returns

ConditionHandle

focused()
ts
focused(handler: ConditionHandler): ConditionHandle;
Parameters
ParameterType
handlerConditionHandler
Returns

ConditionHandle

online()
ts
online(handler: ConditionHandler): ConditionHandle;
Parameters
ParameterType
handlerConditionHandler
Returns

ConditionHandle

dispose()
ts
dispose(): void;

Unsubscribe all active condition handlers. Does not dispose the underlying session.

Returns

void


CreateConditionsApiOptions

Properties

PropertyModifierTypeDescription
onHandlerError?readonly(error: unknown) => voidInvoked when a condition handler throws (session continues).

ResilienceApi

Methods

onReconnect()
ts
onReconnect(handler: ResilienceHandler<"connection:reconnect">): Unsubscribe;
Parameters
ParameterType
handlerResilienceHandler<"connection:reconnect">
Returns

Unsubscribe

onWake()
ts
onWake(handler: ResilienceHandler<"page:resume">): Unsubscribe;

Maps to page:resume.

Parameters
ParameterType
handlerResilienceHandler<"page:resume">
Returns

Unsubscribe

onRestore()
ts
onRestore(handler: ResilienceHandler<"session:restored">): Unsubscribe;

Maps to session:restored.

Parameters
ParameterType
handlerResilienceHandler<"session:restored">
Returns

Unsubscribe

onRecover()
ts
onRecover(handler: (event: 
  | {
  current: "online";
  metadata:   | {
     advisory: true;
     offlineDuration: number;
   }
     | undefined;
  previous: "offline";
  snapshot: {
     activity: BrowserLifecycleActivityState;
     attention: BrowserLifecycleAttentionState;
     capabilities: {
        abortController: boolean;
        broadcastChannel: boolean;
        connectivity: boolean;
        focus: boolean;
        idle: boolean;
        pageLifecycle: boolean;
        requestIdleCallback: boolean;
        visibility: boolean;
     };
     connectivity: BrowserLifecycleConnectivityState;
     lifecycle: BrowserLifecyclePageState;
     phase: BrowserLifecyclePhase;
     tab: BrowserLifecycleTabState;
     timestamps: {
        createdAt: number;
        disposedAt?: number;
        lastEventAt?: number;
        startedAt?: number;
        stoppedAt?: number;
        updatedAt: number;
     };
     visibility: BrowserLifecycleVisibilityState;
  };
  source: BrowserLifecycleEventSource;
  timestamp: number;
  type: "connection:reconnect";
}
  | {
  current: "active";
  metadata:   | {
   [key: string]: unknown;
   }
     | undefined;
  previous: BrowserLifecyclePageState;
  snapshot: {
     activity: BrowserLifecycleActivityState;
     attention: BrowserLifecycleAttentionState;
     capabilities: {
        abortController: boolean;
        broadcastChannel: boolean;
        connectivity: boolean;
        focus: boolean;
        idle: boolean;
        pageLifecycle: boolean;
        requestIdleCallback: boolean;
        visibility: boolean;
     };
     connectivity: BrowserLifecycleConnectivityState;
     lifecycle: BrowserLifecyclePageState;
     phase: BrowserLifecyclePhase;
     tab: BrowserLifecycleTabState;
     timestamps: {
        createdAt: number;
        disposedAt?: number;
        lastEventAt?: number;
        startedAt?: number;
        stoppedAt?: number;
        updatedAt: number;
     };
     visibility: BrowserLifecycleVisibilityState;
  };
  source: BrowserLifecycleEventSource;
  timestamp: number;
  type: "page:resume";
}
  | {
  current: "running" | "stopped";
  metadata:   | {
   [key: string]: unknown;
   }
     | undefined;
  previous: BrowserLifecyclePhase;
  snapshot: {
     activity: BrowserLifecycleActivityState;
     attention: BrowserLifecycleAttentionState;
     capabilities: {
        abortController: boolean;
        broadcastChannel: boolean;
        connectivity: boolean;
        focus: boolean;
        idle: boolean;
        pageLifecycle: boolean;
        requestIdleCallback: boolean;
        visibility: boolean;
     };
     connectivity: BrowserLifecycleConnectivityState;
     lifecycle: BrowserLifecyclePageState;
     phase: BrowserLifecyclePhase;
     tab: BrowserLifecycleTabState;
     timestamps: {
        createdAt: number;
        disposedAt?: number;
        lastEventAt?: number;
        startedAt?: number;
        stoppedAt?: number;
        updatedAt: number;
     };
     visibility: BrowserLifecycleVisibilityState;
  };
  source: BrowserLifecycleEventSource;
  timestamp: number;
  type: "session:restored";
}) => void): Unsubscribe;

Fires on reconnect, wake (page:resume), or restore — ChatGPT-style recovery. Returns a single unsubscribe for all three.

Parameters
ParameterType
handler(event: | { current: "online"; metadata: | { advisory: true; offlineDuration: number; } | undefined; previous: "offline"; snapshot: { activity: BrowserLifecycleActivityState; attention: BrowserLifecycleAttentionState; capabilities: { abortController: boolean; broadcastChannel: boolean; connectivity: boolean; focus: boolean; idle: boolean; pageLifecycle: boolean; requestIdleCallback: boolean; visibility: boolean; }; connectivity: BrowserLifecycleConnectivityState; lifecycle: BrowserLifecyclePageState; phase: BrowserLifecyclePhase; tab: BrowserLifecycleTabState; timestamps: { createdAt: number; disposedAt?: number; lastEventAt?: number; startedAt?: number; stoppedAt?: number; updatedAt: number; }; visibility: BrowserLifecycleVisibilityState; }; source: BrowserLifecycleEventSource; timestamp: number; type: "connection:reconnect"; } | { current: "active"; metadata: | { [key: string]: unknown; } | undefined; previous: BrowserLifecyclePageState; snapshot: { activity: BrowserLifecycleActivityState; attention: BrowserLifecycleAttentionState; capabilities: { abortController: boolean; broadcastChannel: boolean; connectivity: boolean; focus: boolean; idle: boolean; pageLifecycle: boolean; requestIdleCallback: boolean; visibility: boolean; }; connectivity: BrowserLifecycleConnectivityState; lifecycle: BrowserLifecyclePageState; phase: BrowserLifecyclePhase; tab: BrowserLifecycleTabState; timestamps: { createdAt: number; disposedAt?: number; lastEventAt?: number; startedAt?: number; stoppedAt?: number; updatedAt: number; }; visibility: BrowserLifecycleVisibilityState; }; source: BrowserLifecycleEventSource; timestamp: number; type: "page:resume"; } | { current: "running" | "stopped"; metadata: | { [key: string]: unknown; } | undefined; previous: BrowserLifecyclePhase; snapshot: { activity: BrowserLifecycleActivityState; attention: BrowserLifecycleAttentionState; capabilities: { abortController: boolean; broadcastChannel: boolean; connectivity: boolean; focus: boolean; idle: boolean; pageLifecycle: boolean; requestIdleCallback: boolean; visibility: boolean; }; connectivity: BrowserLifecycleConnectivityState; lifecycle: BrowserLifecyclePageState; phase: BrowserLifecyclePhase; tab: BrowserLifecycleTabState; timestamps: { createdAt: number; disposedAt?: number; lastEventAt?: number; startedAt?: number; stoppedAt?: number; updatedAt: number; }; visibility: BrowserLifecycleVisibilityState; }; source: BrowserLifecycleEventSource; timestamp: number; type: "session:restored"; }) => void
Returns

Unsubscribe

dispose()
ts
dispose(): void;

Unsubscribe all active resilience handlers. Does not dispose the underlying session.

Returns

void


CreateResilienceApiOptions

Properties

PropertyModifierTypeDescription
onHandlerError?readonly(error: unknown) => voidInvoked when a handler throws (session continues).

WaitOptions

Properties

PropertyModifierType
timeoutMs?readonlynumber
signal?readonlyAbortSignal

WaitApi

Methods

untilVisible()
ts
untilVisible(options?: WaitOptions): Promise<void>;
Parameters
ParameterType
options?WaitOptions
Returns

Promise<void>

untilHidden()
ts
untilHidden(options?: WaitOptions): Promise<void>;
Parameters
ParameterType
options?WaitOptions
Returns

Promise<void>

untilFocused()
ts
untilFocused(options?: WaitOptions): Promise<void>;
Parameters
ParameterType
options?WaitOptions
Returns

Promise<void>

untilBlurred()
ts
untilBlurred(options?: WaitOptions): Promise<void>;
Parameters
ParameterType
options?WaitOptions
Returns

Promise<void>

untilOnline()
ts
untilOnline(options?: WaitOptions): Promise<void>;
Parameters
ParameterType
options?WaitOptions
Returns

Promise<void>

untilOffline()
ts
untilOffline(options?: WaitOptions): Promise<void>;
Parameters
ParameterType
options?WaitOptions
Returns

Promise<void>

dispose()
ts
dispose(): void;

Rejects all pending waits and prevents new ones. Does not dispose the underlying session.

Returns

void


EventDefinition

Event definition metadata stored by the internal registry.

Type Parameters

Type ParameterDefault type
TEventName extends stringstring

Properties

PropertyModifierType
description?readonlystring
experimental?readonlyboolean
internal?readonlyboolean
namereadonlyTEventName
public?readonlyboolean

EventDispatchMetadata

Dispatch metadata created for each emission.

Type Parameters

Type ParameterDefault type
TEventName extends stringstring

Properties

PropertyModifierType
dispatchIdreadonlynumber
internalreadonlyReadonly<Record<string, unknown>> | undefined
listenerCountreadonlynumber
sourcereadonlystring
timestampreadonlynumber
typereadonlyTEventName

EventSubscription

Cleanup handle returned by subscription methods.

Type Parameters

Type ParameterDefault type
TEventName extends stringstring

Properties

PropertyModifierType
activereadonlyboolean
eventreadonlyTEventName

Methods

unsubscribe()
ts
unsubscribe(): void;
Returns

void


EventDispatchContext

Internal dispatch context passed to error handlers.

Type Parameters

Type Parameter
TEventMap extends EventMap
TEventName extends EventName<TEventMap>

Properties

PropertyModifierType
metadatareadonlyEventDispatchMetadata<TEventName>
payloadreadonlyEventPayload<TEventMap, TEventName>

EmitEventOptions

Public emit options for metadata creation.

Properties

PropertyModifierType
internal?readonlyReadonly<Record<string, unknown>>
source?readonlystring

EventRegistryStats

Statistics tracked by the internal event registry.

Type Parameters

Type ParameterDefault type
TEventName extends stringstring

Properties

PropertyModifierType
definitionreadonlyEventDefinition<TEventName> | undefined
emissionCountreadonlynumber
errorCountreadonlynumber
lastDispatchedAtreadonlynumber | undefined
lastDispatchSourcereadonlystring | undefined
listenerCountreadonlynumber

TypedEventEmitterOptions

Constructor options for the typed event emitter.

Type Parameters

Type Parameter
TEventMap extends EventMap

Properties

PropertyModifierType
definitions?readonlyreadonly EventDefinition<Extract<keyof TEventMap, string>>[]
onListenerError?readonlyEventListenerErrorHandler<TEventMap>
timeProvider?readonly() => number

CreateActivityApiOptions

Properties

PropertyModifierTypeDescription
trackLastActiveAt?readonlybooleanWhen true (default), subscribe to activity-related public events to track lastActiveAt. Set false for a pure snapshot projector with zero subscriptions.

ActivityView

Properties

PropertyModifierType
statusreadonlyActivityStatus
lastActiveAtreadonlynumber | undefined

ActivityApi

Methods

state()
ts
state(): ActivityView;

Current core-backed activity view.

Returns

ActivityView

isActive()
ts
isActive(): boolean;
Returns

boolean

isIdle()
ts
isIdle(): boolean;
Returns

boolean

isUnknown()
ts
isUnknown(): boolean;
Returns

boolean

lastActiveAt()
ts
lastActiveAt(): number | undefined;
Returns

number | undefined

lastInteraction()
ts
lastInteraction(): number | undefined;

Alias for lastActiveAt() (ChatGPT lastInteraction).

Returns

number | undefined

idleTime()
ts
idleTime(now?: number): number;

Current idle streak in ms (0 when active/unknown). Uses wall clock vs lastActiveAt when idle.

Parameters
ParameterType
now?number
Returns

number

dispose()
ts
dispose(): void;

Detach optional event tracking used for lastActiveAt. Safe to call multiple times. Does not dispose the underlying session.

Returns

void


SessionHealth

Properties

PropertyModifierType
activereadonlyboolean
healthyreadonlyboolean
recoveringreadonlyboolean
degradedreadonlyboolean
onlinereadonlyboolean
focusedreadonlyboolean
visiblereadonlyboolean
idlereadonlyboolean

SessionHealthApi

Methods

health()
ts
health(): Readonly<SessionHealth>;
Returns

Readonly<SessionHealth>

dispose()
ts
dispose(): void;
Returns

void


CreateMetricsApiOptions

Properties

PropertyModifierTypeDescription
timeProvider?readonly() => numberDefaults to Date.now. Inject for tests.

MetricsSnapshot

Properties

PropertyModifierTypeDescription
sessionMsreadonlynumberWall-clock ms since this metrics instance started tracking.
visibleMsreadonlynumberCumulative durations (ms).
hiddenMsreadonlynumber-
focusedMsreadonlynumber-
blurredMsreadonlynumber-
activeMsreadonlynumber-
idleMsreadonlynumber-
onlineMsreadonlynumber-
offlineMsreadonlynumber-
sleepMsreadonlynumberTime between page:suspend and page:resume.
hiddenCountreadonlynumberEvent counts.
visibilityChangeCountreadonlynumber-
focusCountreadonlynumber-
blurCountreadonlynumber-
idleCountreadonlynumber-
reconnectCountreadonlynumber-
sleepCountreadonlynumber-
primaryTabSwitchCountreadonlynumber-
attentionScorereadonlynumber0–100 attention score: round(100 * focusedMs / (focusedMs + blurredMs + hiddenMs)) when the denominator is > 0; otherwise 0.

MetricsStats

Count-focused view (ChatGPT “browser statistics”).

Properties

PropertyModifierType
focusCountreadonlynumber
blurCountreadonlynumber
visibilityChangeCountreadonlynumber
hiddenCountreadonlynumber
idleCountreadonlynumber
sleepCountreadonlynumber
reconnectCountreadonlynumber
primaryTabSwitchCountreadonlynumber

AttentionReport

Attention breakdown (ChatGPT session.attention.report()).

Properties

PropertyModifierType
scorereadonlynumber
focusedMsreadonlynumber
blurredMsreadonlynumber
hiddenMsreadonlynumber
focusedRatioreadonlynumber
blurredRatioreadonlynumber
hiddenRatioreadonlynumber

MetricsApi

Methods

snapshot()
ts
snapshot(): Readonly<MetricsSnapshot>;
Returns

Readonly<MetricsSnapshot>

stats()
ts
stats(): Readonly<MetricsStats>;

Count statistics subset.

Returns

Readonly<MetricsStats>

attention()
ts
attention(): Readonly<AttentionReport>;

Attention score + duration breakdown.

Returns

Readonly<AttentionReport>

sessionDuration()
ts
sessionDuration(): number;
Returns

number

activeDuration()
ts
activeDuration(): number;
Returns

number

hiddenDuration()
ts
hiddenDuration(): number;
Returns

number

focusedDuration()
ts
focusedDuration(): number;
Returns

number

idleDuration()
ts
idleDuration(): number;
Returns

number

offlineDuration()
ts
offlineDuration(): number;
Returns

number

sleepDuration()
ts
sleepDuration(): number;
Returns

number

visibleDuration()
ts
visibleDuration(): number;
Returns

number

reset()
ts
reset(): void;
Returns

void

dispose()
ts
dispose(): void;

Stop reducing and release subscriptions. Does not dispose the underlying session.

Returns

void


SessionPrediction

Properties

PropertyModifierType
likelyIdlereadonlyboolean
likelySleepreadonlyboolean
attentionScorereadonlynumber
engagementreadonlyEngagementLevel

SessionPredictApi

Methods

predict()
ts
predict(): Readonly<SessionPrediction>;
Returns

Readonly<SessionPrediction>

dispose()
ts
dispose(): void;
Returns

void


CreateSessionPredictApiOptions

Properties

PropertyModifierType
metricsreadonlyPick<MetricsApi, "snapshot" | "attention">
lifecyclereadonlyPick<BrowserLifecycle, "getSnapshot">

ProjectPresenceOptions

Properties

PropertyModifierTypeDescription
requireActive?readonlybooleanWhen true, activity === "idle" counts as away, and activity === "unknown" makes presence unknown. Default false (idle not part of default policy).

PresenceView

Properties

PropertyModifierTypeDescription
statusreadonlyPresenceStatus-
reasonsreadonlyreadonly PresenceReason[]Machine-readable reasons, e.g. ["hidden", "blurred", "offline"]

PresenceApi

Methods

state()
ts
state(): PresenceView;
Returns

PresenceView

isPresent()
ts
isPresent(): boolean;
Returns

boolean

isAway()
ts
isAway(): boolean;
Returns

boolean

isUnknown()
ts
isUnknown(): boolean;
Returns

boolean

label()
ts
label(): PresenceLabel;

Uppercase label for ChatGPT-style ACTIVE / AWAY / UNKNOWN.

Returns

PresenceLabel

dispose()
ts
dispose(): void;

No-op today (pure snapshot reads). Kept for symmetry with ActivityApi and future optional subscriptions.

Returns

void


CreateReportsApiOptions

Properties

PropertyModifierTypeDescription
metricsreadonlyPick<MetricsApi, "snapshot" | "attention">Required metrics source.
timeline?readonlyPick<TimelineApi, "events">Optional timeline for evidence event ids.
evidenceLimit?readonlynumberMax timeline ids to cite. Default 10.
timeProvider?readonly() => number-

SessionSummaryReport

Properties

PropertyModifierTypeDescription
generatedAtreadonlynumber-
startedAtreadonlynumber-
endedAtreadonlynumber-
metricsreadonlyMetricsSnapshot-
attentionreadonlyAttentionReport-
focusDurationreadonlynumber-
hiddenDurationreadonlynumber-
idleDurationreadonlynumber-
offlineDurationreadonlynumber-
activeDurationreadonlynumber-
sleepDurationreadonlynumber-
sessionDurationreadonlynumber-
highlightsreadonlyreadonly string[]-
evidenceEventIds?readonlyreadonly string[]Optional Timeline entry ids when a timeline is provided.

ReportsApi

Methods

sessionSummary()
ts
sessionSummary(): SessionSummaryReport;

Build a summary on demand (no per-event work).

Returns

SessionSummaryReport

report()
ts
report(): SessionSummaryReport;

Alias for sessionSummary() (ChatGPT session.report()).

Returns

SessionSummaryReport

dispose()
ts
dispose(): void;

No-op reserved for symmetry with other intelligence APIs. Reports do not hold subscriptions.

Returns

void


CreateTimelineApiOptions

Properties

PropertyModifierTypeDescription
maxEventsreadonlynumberHard cap on retained events. Required. Overflow drops the oldest entry (O(1)).
includeSnapshot?readonlybooleanWhen true (default), store a slim snapshot subset on each entry. Set false to retain only type + timestamp (lowest memory).
onOverflow?readonly(dropped: TimelineEntry) => voidCalled when an entry is dropped due to capacity overflow.

TimelineEntry

Properties

PropertyModifierTypeDescription
idreadonlystring-
typereadonlyBrowserLifecycleEventName-
timestampreadonlynumber-
snapshot?readonlyReadonly<Partial<BrowserLifecycleSnapshot>>Slim subset of snapshot at emission time (omitted when includeSnapshot is false).

TimelineApi

Methods

events()
ts
events(): readonly TimelineEntry[];

Oldest → newest copy of retained entries.

Returns

readonly TimelineEntry[]

record()
ts
record(): readonly TimelineEntry[];

Alias for events() (ChatGPT event timeline / session.record()).

Returns

readonly TimelineEntry[]

format()
ts
format(options?: FormatTimelineOptions): readonly string[];

Human-readable lines for debugging / audit logs. Example: 10:05:42 page:hidden

Parameters
ParameterType
options?FormatTimelineOptions
Returns

readonly string[]

clear()
ts
clear(): void;
Returns

void

size()
ts
size(): number;
Returns

number

maxEvents()
ts
maxEvents(): number;

Maximum retained entries.

Returns

number

dispose()
ts
dispose(): void;

Stop recording and release the buffer. Does not dispose the underlying session.

Returns

void


FormatTimelineOptions

Properties

PropertyModifierTypeDescription
timeZone?readonlystringDefaults to locale time string from each entry timestamp.
locale?readonlystring-

BrowserLifecyclePluginLifecycleTransition

Recorded plugin lifecycle transition for diagnostics.

Properties

PropertyModifierType
durationMs?readonlynumber
fromreadonly| BrowserLifecyclePluginPhase | undefined
timestampreadonlynumber
toreadonlyBrowserLifecyclePluginPhase

BrowserLifecyclePluginDiagnostic

Diagnostic snapshot for one registered plugin.

Properties

PropertyModifierType
author?readonlystring
dependenciesreadonlyreadonly string[]
description?readonlystring
enabledreadonlyboolean
hookCountreadonlynumber
idreadonlystring
lifecyclereadonlyBrowserLifecyclePluginPhase
loadedAt?readonlynumber
name?readonlystring
previousLifecycle?readonlyBrowserLifecyclePluginPhase
priorityreadonlynumber
registeredAtreadonlynumber
registrationOrderreadonlynumber
transitionCountreadonlynumber
transitionsreadonlyreadonly BrowserLifecyclePluginLifecycleTransition[]
version?readonlystring

BrowserLifecyclePluginHookLogEntry

Recorded plugin hook execution for debugging and playground tooling.

Properties

PropertyModifierType
durationMsreadonlynumber
eventType?readonlyBrowserLifecycleEventName
hookreadonlyBrowserLifecyclePluginHookName
idreadonlystring
pluginIdreadonlystring
sourcereadonly"plugin-runtime"
timestampreadonlynumber

BrowserFeatureEnvironment

Minimal feature-detection environment used to keep capability checks SSR-safe and testable.

Properties

PropertyModifierType
AbortController?readonlyunknown
BroadcastChannel?readonlyunknown
document?readonlyRecord<string, unknown> & { hasFocus?: () => boolean; hidden?: boolean; visibilityState?: string; }
navigator?readonlyRecord<string, unknown> & { onLine?: boolean; }
requestIdleCallback?readonlyunknown
window?readonlyRecord<string, unknown> & { addEventListener?: void; removeEventListener?: void; }

BrowserLifecycleCapabilities

Public capability snapshot returned by infrastructure feature detection.

Properties

PropertyModifierType
abortControllerreadonlyboolean
broadcastChannelreadonlyboolean
connectivityreadonlyboolean
focusreadonlyboolean
idlereadonlyboolean
pageLifecyclereadonlyboolean
requestIdleCallbackreadonlyboolean
visibilityreadonlyboolean

BrowserLifecyclePlugin

Plugin contract executed by the Session Core plugin runtime.

Properties

PropertyModifierType
author?readonlystring
dependencies?readonlyreadonly string[]
description?readonlystring
enabled?readonlyboolean
idreadonlystring
name?readonlystring
onDestroy?readonly(context: BrowserLifecyclePluginRuntimeContext) => void
onEvent?readonly(event: BrowserLifecycleEventName, payload: unknown) => void
onRegister?readonly(context: BrowserLifecyclePluginRuntimeContext) => void
onStart?readonly(context: BrowserLifecyclePluginRuntimeContext) => void
onStop?readonly(context: BrowserLifecyclePluginRuntimeContext) => void
priority?readonlynumber
version?readonlystring

BrowserLifecyclePluginRuntimeContext

Read-only context passed to plugin lifecycle hooks.

Properties

PropertyModifierType
capabilitiesreadonlyBrowserLifecycleCapabilities
configurationreadonlyResolvedBrowserLifecycleConfig
getSnapshotreadonly() => Readonly<BrowserLifecycleSnapshot>

BrowserLifecycleCrossTabConfigInput

Optional cross-tab configuration overrides.

Properties

PropertyModifierType
channelName?readonlystring
heartbeatInterval?readonlynumber
leaderTimeout?readonlynumber

BrowserLifecycleCrossTabConfig

Resolved cross-tab configuration used internally after validation.

Properties

PropertyModifierType
channelNamereadonlystring
enabledreadonlyboolean
heartbeatIntervalreadonlynumber
leaderTimeoutreadonlynumber

BrowserLifecycleConfig

Public configuration accepted by the package during the core infrastructure phase.

Properties

PropertyModifierType
activityDebounce?readonlynumber
activityEvents?readonly| "default" | readonly BrowserLifecycleActivityEventName[]
autoStart?readonlyboolean
crossTab?readonly| boolean | BrowserLifecycleCrossTabConfigInput
debug?readonlyboolean
emitInitialState?readonlyboolean
eventBufferSize?readonlynumber
idleTimeout?readonlynumber | false
plugins?readonlyreadonly BrowserLifecyclePlugin[]

ResolvedBrowserLifecycleConfig

Immutable resolved configuration returned by the configuration system.

Properties

PropertyModifierType
activityDebouncereadonlynumber
activityEventsreadonlyreadonly BrowserLifecycleActivityEventName[]
autoStartreadonlyboolean
crossTabreadonlyBrowserLifecycleCrossTabConfig
debugreadonlyboolean
emitInitialStatereadonlyboolean
eventBufferSizereadonlynumber
idleTimeoutreadonlynumber | false
pluginsreadonlyreadonly BrowserLifecyclePlugin[]

BrowserLifecycleValidationIssue

Internal validation issue shape used for detailed configuration errors.

Properties

PropertyModifierType
messagereadonlystring
pathreadonlystring

Type Aliases

BrowserLifecyclePhase

ts
type BrowserLifecyclePhase = "created" | "disposed" | "running" | "stopped";

Public lifecycle phases exposed by the Session Core.


BrowserLifecycleAttentionState

ts
type BrowserLifecycleAttentionState = "focused" | "unknown" | "unfocused";

Normalized attention state placeholder for current and future modules.


BrowserLifecycleActivityState

ts
type BrowserLifecycleActivityState = "active" | "idle" | "unknown";

Normalized activity state placeholder for current and future modules.


BrowserLifecycleConnectivityState

ts
type BrowserLifecycleConnectivityState = "offline" | "online" | "unknown";

Normalized advisory connectivity state placeholder for current and future modules.


BrowserLifecyclePageState

ts
type BrowserLifecyclePageState = 
  | "active"
  | "discarded"
  | "frozen"
  | "hidden"
  | "passive"
  | "terminated"
  | "unknown";

Normalized lifecycle state placeholder for current and future modules.


BrowserLifecycleTabState

ts
type BrowserLifecycleTabState = "primary" | "secondary" | "single" | "unknown";

Normalized tab role placeholder for current and future modules.


BrowserLifecycleEventSource

ts
type BrowserLifecycleEventSource = 
  | "activity"
  | "connectivity"
  | "focus"
  | "internal"
  | "lifecycle"
  | "plugin"
  | "transport"
  | "visibility";

Public event source categories.


BrowserLifecycleEventName

ts
type BrowserLifecycleEventName = 
  | "activity:detected"
  | "activity:reset"
  | "connection:offline"
  | "connection:online"
  | "connection:reconnect"
  | "page:hidden"
  | "page:resume"
  | "page:suspend"
  | "page:visible"
  | "plugin:error"
  | "plugin:registered"
  | "plugin:removed"
  | "session:active"
  | "session:idle"
  | "session:restored"
  | "session:started"
  | "session:stopped"
  | "tab:primary"
  | "tab:secondary"
  | "tab:message"
  | "window:blur"
  | "window:focus";

Public event names reserved by Browser Lifecycle Manager.


BrowserLifecycleEventListener

ts
type BrowserLifecycleEventListener<TEventName> = (event: DeepReadonly<BrowserLifecycleEventMap[TEventName]>) => void;

Named event listener used by the public BrowserLifecycle object.

Type Parameters

Type Parameter
TEventName extends BrowserLifecycleEventName

Parameters

ParameterType
eventDeepReadonly<BrowserLifecycleEventMap[TEventName]>

Returns

void


BrowserLifecycleSubscriber

ts
type BrowserLifecycleSubscriber = (event: DeepReadonly<BrowserLifecycleEventMap[BrowserLifecycleEventName]>, snapshot: DeepReadonly<BrowserLifecycleSnapshot>) => void;

Full event feed subscriber used for logging and adapter layers.

Parameters

ParameterType
eventDeepReadonly<BrowserLifecycleEventMap[BrowserLifecycleEventName]>
snapshotDeepReadonly<BrowserLifecycleSnapshot>

Returns

void


ConditionHandler

ts
type ConditionHandler = () => void;

Returns

void


Unsubscribe

ts
type Unsubscribe = () => void;

Returns

void


ResilienceHandler

ts
type ResilienceHandler<TEventName> = (event: DeepReadonly<BrowserLifecycleEventMap[TEventName]>) => void;

Type Parameters

Type Parameter
TEventName extends BrowserLifecycleEventName

Parameters

ParameterType
eventDeepReadonly<BrowserLifecycleEventMap[TEventName]>

Returns

void


EventMap

ts
type EventMap = object;

Generic event map used by the typed event infrastructure.


EventName

ts
type EventName<TEventMap> = Extract<keyof TEventMap, string>;

Valid event names for a given event map.

Type Parameters

Type Parameter
TEventMap extends EventMap

EventPayload

ts
type EventPayload<TEventMap, TEventName> = TEventMap[TEventName];

Payload type associated with an event name.

Type Parameters

Type Parameter
TEventMap extends EventMap
TEventName extends EventName<TEventMap>

EventInternalMetadata

ts
type EventInternalMetadata = Readonly<Record<string, unknown>>;

Internal metadata bag reserved for diagnostics and future instrumentation.


EventListener

ts
type EventListener<TEventMap, TEventName> = (payload: EventPayload<TEventMap, TEventName>, metadata: EventDispatchMetadata<TEventName>) => void;

Listener signature used throughout the infrastructure.

Type Parameters

Type Parameter
TEventMap extends EventMap
TEventName extends EventName<TEventMap>

Parameters

ParameterType
payloadEventPayload<TEventMap, TEventName>
metadataEventDispatchMetadata<TEventName>

Returns

void


EventListenerErrorHandler

ts
type EventListenerErrorHandler<TEventMap> = (error: unknown, context: EventDispatchContext<TEventMap, EventName<TEventMap>>) => void;

Error handler used to isolate listener failures.

Type Parameters

Type Parameter
TEventMap extends EventMap

Parameters

ParameterType
errorunknown
contextEventDispatchContext<TEventMap, EventName<TEventMap>>

Returns

void


ActivityStatus

ts
type ActivityStatus = "active" | "idle" | "unknown";

Activity facade types (Browser Intelligence — derive-only).

Spec: _constuction/browser-lifecycle/03-browser-intelligence/API_CONTRACTS.md


EngagementLevel

ts
type EngagementLevel = "low" | "medium" | "high";

CreatePresenceApiOptions

ts
type CreatePresenceApiOptions = ProjectPresenceOptions;

PresenceStatus

ts
type PresenceStatus = "present" | "away" | "unknown";

Presence facade types (page-local availability — not multi-user presence).

Spec: _constuction/browser-lifecycle/03-browser-intelligence/API_CONTRACTS.md


PresenceReason

ts
type PresenceReason = 
  | "hidden"
  | "blurred"
  | "offline"
  | "idle"
  | "visibility-unknown"
  | "attention-unknown"
  | "connectivity-unknown"
  | "activity-unknown";

PresenceLabel

ts
type PresenceLabel = "ACTIVE" | "AWAY" | "UNKNOWN";

TimelineSnapshotFields

ts
type TimelineSnapshotFields = Pick<BrowserLifecycleSnapshot, 
  | "activity"
  | "attention"
  | "connectivity"
  | "lifecycle"
  | "phase"
  | "tab"
| "visibility">;

Slim fields kept on each entry when snapshot capture is enabled.


BrowserLifecyclePluginPhase

ts
type BrowserLifecyclePluginPhase = 
  | "registered"
  | "initialized"
  | "started"
  | "running"
  | "stopped"
  | "destroyed";

Lifecycle phases tracked for each registered plugin.


BrowserLifecyclePluginHookName

ts
type BrowserLifecyclePluginHookName = "onDestroy" | "onEvent" | "onRegister" | "onStart" | "onStop";

Supported plugin hook names executed by the Session Core plugin runtime.


BrowserLifecyclePluginContext

ts
type BrowserLifecyclePluginContext = BrowserLifecyclePluginRuntimeContext;

Read-only context passed to plugin lifecycle hooks.


BrowserLifecycleActivityEventName

ts
type BrowserLifecycleActivityEventName = 
  | "focus"
  | "keydown"
  | "mousedown"
  | "mousemove"
  | "pointerdown"
  | "pointermove"
  | "touchmove"
  | "touchstart"
  | "visibilitychange";

Valid activity events for idle detection inputs.


BrowserLifecycleErrorCode

ts
type BrowserLifecycleErrorCode = 
  | "configuration_error"
  | "initialization_error"
  | "lifecycle_error"
  | "module_registry_error"
  | "plugin_error"
  | "unsupported_feature_error";

Supported error codes for the public infrastructure surface.

Functions

createBrowserLifecycle()

ts
function createBrowserLifecycle(config?: BrowserLifecycleConfig): BrowserLifecycle;

Creates a BrowserLifecycle runtime instance.

Parameters

ParameterType
configBrowserLifecycleConfig

Returns

BrowserLifecycle


supportsVisibility()

ts
function supportsVisibility(environment?: BrowserFeatureEnvironment): boolean;

Returns true when the environment supports the Page Visibility API.

Parameters

ParameterType
environmentBrowserFeatureEnvironment

Returns

boolean


supportsBroadcastChannel()

ts
function supportsBroadcastChannel(environment?: BrowserFeatureEnvironment): boolean;

Returns true when the environment supports BroadcastChannel.

Parameters

ParameterType
environmentBrowserFeatureEnvironment

Returns

boolean


supportsPageLifecycle()

ts
function supportsPageLifecycle(environment?: BrowserFeatureEnvironment): boolean;

Returns true when the environment supports the pagehide and pageshow lifecycle hooks.

Parameters

ParameterType
environmentBrowserFeatureEnvironment

Returns

boolean


supportsRequestIdleCallback()

ts
function supportsRequestIdleCallback(environment?: BrowserFeatureEnvironment): boolean;

Returns true when the environment supports requestIdleCallback.

Parameters

ParameterType
environmentBrowserFeatureEnvironment

Returns

boolean


supportsIdle()

ts
function supportsIdle(environment?: BrowserFeatureEnvironment): boolean;

Returns true when the environment supports idle activity observation.

Parameters

ParameterType
environmentBrowserFeatureEnvironment

Returns

boolean


supportsConnectivity()

ts
function supportsConnectivity(environment?: BrowserFeatureEnvironment): boolean;

Returns true when the environment supports advisory connectivity observation.

Parameters

ParameterType
environmentBrowserFeatureEnvironment

Returns

boolean


supportsFocus()

ts
function supportsFocus(environment?: BrowserFeatureEnvironment): boolean;

Returns true when the environment supports window focus observation.

Parameters

ParameterType
environmentBrowserFeatureEnvironment

Returns

boolean


supportsAbortController()

ts
function supportsAbortController(environment?: BrowserFeatureEnvironment): boolean;

Returns true when the environment supports AbortController.

Parameters

ParameterType
environmentBrowserFeatureEnvironment

Returns

boolean


detectBrowserLifecycleCapabilities()

ts
function detectBrowserLifecycleCapabilities(environment?: BrowserFeatureEnvironment): BrowserLifecycleCapabilities;

Detects the package capability surface without relying on browser sniffing.

Parameters

ParameterType
environmentBrowserFeatureEnvironment

Returns

BrowserLifecycleCapabilities


getDefaultBrowserLifecycleConfig()

ts
function getDefaultBrowserLifecycleConfig(): ResolvedBrowserLifecycleConfig;

Returns an immutable copy of the default configuration.

Returns

ResolvedBrowserLifecycleConfig


validateBrowserLifecycleConfig()

ts
function validateBrowserLifecycleConfig(input: unknown): asserts input is BrowserLifecycleConfig;

Validates a potential Browser Lifecycle configuration object.

Parameters

ParameterType
inputunknown

Returns

asserts input is BrowserLifecycleConfig


createBrowserLifecycleConfig()

ts
function createBrowserLifecycleConfig(input?: BrowserLifecycleConfig): ResolvedBrowserLifecycleConfig;

Creates an immutable resolved configuration object.

Parameters

ParameterType
inputBrowserLifecycleConfig

Returns

ResolvedBrowserLifecycleConfig


mergeBrowserLifecycleConfig()

ts
function mergeBrowserLifecycleConfig(base?: BrowserLifecycleConfig, override?: BrowserLifecycleConfig): ResolvedBrowserLifecycleConfig;

Creates an immutable configuration object by layering overrides on top of a base config.

Parameters

ParameterType
baseBrowserLifecycleConfig
overrideBrowserLifecycleConfig

Returns

ResolvedBrowserLifecycleConfig


getPluginIds()

ts
function getPluginIds(config: ResolvedBrowserLifecycleConfig): readonly string[];

Returns a readonly copy of plugin ids for diagnostics and tests.

Parameters

ParameterType
configResolvedBrowserLifecycleConfig

Returns

readonly string[]


createConditionsApi()

ts
function createConditionsApi(lifecycle: Pick<BrowserLifecycle, "on">, options?: CreateConditionsApiOptions): ConditionsApi;

Creates a thin conditions DSL over public lifecycle events.

  • No polling.
  • Handler errors are isolated (do not tear down the session).
  • Allocates nothing on createBrowserLifecycle() — only when this factory is called.

Parameters

ParameterType
lifecyclePick<BrowserLifecycle, "on">
optionsCreateConditionsApiOptions

Returns

ConditionsApi


createResilienceApi()

ts
function createResilienceApi(lifecycle: Pick<BrowserLifecycle, "on">, options?: CreateResilienceApiOptions): ResilienceApi;

Creates Resilience helpers for reconnect / wake / restore workflows.

  • Wraps existing catalog events only (no browser APIs, no persistence).
  • Handler errors are isolated.
  • Allocates nothing on createBrowserLifecycle() — only when this factory is called.

Parameters

ParameterType
lifecyclePick<BrowserLifecycle, "on">
optionsCreateResilienceApiOptions

Returns

ResilienceApi


createWaitApi()

ts
function createWaitApi(lifecycle: Pick<BrowserLifecycle, "getSnapshot" | "on">): WaitApi;

Creates subscription-based wait helpers.

  • No polling / setInterval condition checks.
  • Resolves immediately when the snapshot already satisfies the condition.
  • Allocates nothing on createBrowserLifecycle() — only when this factory is called.

Parameters

ParameterType
lifecyclePick<BrowserLifecycle, "getSnapshot" | "on">

Returns

WaitApi


createActivityApi()

ts
function createActivityApi(lifecycle: Pick<BrowserLifecycle, "getSnapshot" | "on">, options?: CreateActivityApiOptions): ActivityApi;

Creates an Activity facade over an existing BrowserLifecycle instance.

  • Does not attach browser DOM listeners.
  • Does not enable idle observation (caller must set idleTimeout on the session).
  • Allocates nothing on createBrowserLifecycle() — only when this factory is called.

Parameters

ParameterType
lifecyclePick<BrowserLifecycle, "getSnapshot" | "on">
optionsCreateActivityApiOptions

Returns

ActivityApi


projectActivityView()

ts
function projectActivityView(snapshot: Readonly<BrowserLifecycleSnapshot>, lastActiveAt?: number): ActivityView;

Pure projector: snapshot.activity → ActivityView. Never reads browser globals. O(1).

Parameters

ParameterType
snapshotReadonly<BrowserLifecycleSnapshot>
lastActiveAt?number

Returns

ActivityView


createSessionHealthApi()

ts
function createSessionHealthApi(lifecycle: Pick<BrowserLifecycle, "getSnapshot">): SessionHealthApi;

Derive a single session-health view from the core snapshot. No subscriptions; no browser APIs.

Parameters

ParameterType
lifecyclePick<BrowserLifecycle, "getSnapshot">

Returns

SessionHealthApi


createMetricsApi()

ts
function createMetricsApi(lifecycle: Pick<BrowserLifecycle, "getSnapshot" | "subscribe">, options?: CreateMetricsApiOptions): MetricsApi;

Creates an opt-in Metrics reducer over public lifecycle events.

  • Live O(1) reducers — Timeline is not required (ADR A6).
  • Does not attach browser DOM listeners.
  • Allocates nothing on createBrowserLifecycle() — only when this factory is called.

Parameters

ParameterType
lifecyclePick<BrowserLifecycle, "getSnapshot" | "subscribe">
optionsCreateMetricsApiOptions

Returns

MetricsApi


createSessionPredictApi()

ts
function createSessionPredictApi(options: CreateSessionPredictApiOptions): SessionPredictApi;

Lightweight derived prediction from Metrics + current snapshot. Heuristic only — not ML.

Parameters

ParameterType
optionsCreateSessionPredictApiOptions

Returns

SessionPredictApi


createPresenceApi()

ts
function createPresenceApi(lifecycle: Pick<BrowserLifecycle, "getSnapshot">, options?: ProjectPresenceOptions): PresenceApi;

Creates a Presence facade over an existing BrowserLifecycle instance.

Page-local availability only (not multi-user presence).

  • Does not attach browser DOM listeners.
  • Pure snapshot projection on each read (zero subscriptions).
  • Allocates nothing on createBrowserLifecycle() — only when this factory is called.

Parameters

ParameterType
lifecyclePick<BrowserLifecycle, "getSnapshot">
optionsProjectPresenceOptions

Returns

PresenceApi


projectPresenceView()

ts
function projectPresenceView(snapshot: Readonly<BrowserLifecycleSnapshot>, options?: ProjectPresenceOptions): PresenceView;

Pure projector: snapshot → page-local PresenceView. Never reads browser globals. O(1).

Default policy: present iff visible ∧ focused ∧ online. Any required input unknown ⇒ unknown.

Parameters

ParameterType
snapshotReadonly<BrowserLifecycleSnapshot>
optionsProjectPresenceOptions

Returns

PresenceView


buildMetricHighlights()

ts
function buildMetricHighlights(metrics: Readonly<MetricsSnapshot>): readonly string[];

Pure formatter: MetricsSnapshot → human-readable highlights. Never touches browser APIs or Timeline.

Parameters

ParameterType
metricsReadonly<MetricsSnapshot>

Returns

readonly string[]


emptyMetricsSnapshot()

ts
function emptyMetricsSnapshot(): MetricsSnapshot;

Zeroed metrics snapshot for tests and empty reports.

Returns

MetricsSnapshot


createReportsApi()

ts
function createReportsApi(options: CreateReportsApiOptions): ReportsApi;

Creates an on-demand Reports facade.

  • Consumes Metrics (required).
  • May cite Timeline ids (optional).
  • Never talks to browser APIs.
  • No subscriptions — generation happens only when sessionSummary() / report() is called.

Parameters

ParameterType
optionsCreateReportsApiOptions

Returns

ReportsApi


createTimelineApi()

ts
function createTimelineApi(lifecycle: Pick<BrowserLifecycle, "subscribe">, options: CreateTimelineApiOptions): TimelineApi;

Creates an opt-in Timeline recorder over a BrowserLifecycle instance.

  • Does not attach browser DOM listeners.
  • Subscribes to the public event feed only while the timeline exists.
  • Allocates nothing on createBrowserLifecycle() — only when this factory is called.
  • Bounded memory: maxEvents hard cap with drop-oldest overflow.

Parameters

ParameterType
lifecyclePick<BrowserLifecycle, "subscribe">
optionsCreateTimelineApiOptions

Returns

TimelineApi


assert()

ts
function assert(condition: unknown, message: string): asserts condition;

Asserts that a condition is truthy.

Parameters

ParameterType
conditionunknown
messagestring

Returns

asserts condition


noop()

ts
function noop(): void;

No-op helper for optional callback defaults.

Returns

void


isBrowser()

ts
function isBrowser(): boolean;

Returns true when the current runtime looks like a browser environment.

Returns

boolean


isFunction()

ts
function isFunction(value: unknown): value is (args: readonly unknown[]) => unknown;

Returns true when a value is callable.

Parameters

ParameterType
valueunknown

Returns

value is (args: readonly unknown[]) => unknown


isObject()

ts
function isObject(value: unknown): value is PlainObject;

Returns true when a value is a non-null object.

Parameters

ParameterType
valueunknown

Returns

value is PlainObject


deepFreeze()

ts
function deepFreeze<TValue>(value: TValue): DeepReadonly<TValue>;

Deeply freezes an object tree and returns a readonly view.

Type Parameters

Type Parameter
TValue

Parameters

ParameterType
valueTValue

Returns

DeepReadonly<TValue>


mergeObjects()

ts
function mergeObjects<TBase, TOverride>(base: TBase, override: TOverride): TBase & TOverride;

Merges two plain objects recursively while replacing arrays and scalar values.

Type Parameters

Type Parameter
TBase extends PlainObject
TOverride extends PlainObject

Parameters

ParameterType
baseTBase
overrideTOverride

Returns

TBase & TOverride

An ecosystem of independent, headless TypeScript libraries engineered for modern web development. Every package includes interactive playgrounds and documentation that evolves alongside the code.