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.