posthog-js
Version:
Posthog-js allows you to automatically capture usage and send events to PostHog.
66 lines (65 loc) • 2.68 kB
TypeScript
import { SessionIdChangedCallback } from './types';
import { PostHog } from './posthog-core';
export declare const DEFAULT_SESSION_IDLE_TIMEOUT_SECONDS: number;
export declare const MAX_SESSION_IDLE_TIMEOUT_SECONDS: number;
export declare const MIN_SESSION_IDLE_TIMEOUT_SECONDS = 60;
export declare const ACTIVITY_TIMESTAMP_PERSIST_GRANULARITY_MS = 5000;
export declare const SESSION_COOKIE_SYNC_INTERVAL_MS = 1000;
export declare class SessionIdManager {
private readonly _sessionIdGenerator;
private readonly _windowIdGenerator;
private _config;
private _persistence;
private _windowId;
private _sessionId;
private readonly _window_id_storage_key;
private readonly _primary_window_exists_storage_key;
private _sessionStartTimestamp;
private _pendingBootstrapSession;
private _sessionActivityTimestamp;
private _lastPersistedActivityTimestamp;
private _lastCookieSyncTimestamp;
private _sessionIdChangedHandlers;
private readonly _sessionTimeoutMs;
private _enforceIdleTimeout;
private _beforeUnloadListener;
private _destroyed;
private _eventEmitter;
on(event: 'forcedIdleReset', handler: () => void): () => void;
constructor(instance: PostHog, sessionIdGenerator?: () => string, windowIdGenerator?: () => string);
get sessionTimeoutMs(): number;
onSessionId(callback: SessionIdChangedCallback): () => void;
private _canUseSessionStorage;
private _setWindowId;
private _getWindowId;
private _isActivityChangeBelowGranularity;
private _setSessionId;
private _useCrossTabRefreshHardening;
private _refreshSessionIdFromStorage;
private _flushPendingActivityTimestamp;
private _freshestActivityTimestamp;
private _isSessionIdleAfterCrossTabRefresh;
private _getSessionId;
resetSessionId(): void;
setBootstrapSessionId(sessionID: string, deferUntilNextSession?: boolean): boolean;
/**
* Cleans up resources used by SessionIdManager.
* Should be called when the SessionIdManager is no longer needed to prevent memory leaks.
*/
destroy(): void;
private _listenToReloadWindow;
private _sessionHasBeenIdleTooLong;
checkAndGetSessionAndWindowId(readOnly?: boolean, _timestamp?: number | null, persistenceAlreadySynced?: boolean): {
sessionId: string;
windowId: string;
sessionStartTimestamp: number;
changeReason: {
noSessionId: boolean;
activityTimeout: boolean;
sessionPastMaximumLength: boolean;
crossTabAdoption: boolean;
} | undefined;
lastActivityTimestamp: number;
};
private _resetIdleTimer;
}