import { eventWithTime, listenerHandler } from '@rrweb/types';
import { PushPayloadMutationVariables, Sdk } from '../client/graph/generated/operations';
import { DebugOptions, SessionShortcutOptions } from '../client/types/client';
import { type Metadata, PrivacySettingOption, SamplingStrategy, type SessionDetails, StartOptions } from '../client/types/types';
import { type ViewportResizeListenerArgs } from '../client/listeners/viewport-resize-listener';
import { Logger } from '../client/logger';
import { Source } from '../client/types/shared-types';
import { SessionData } from '../client/utils/sessionStorage/highlightSession';
import type { HighlightClientRequestWorker } from '../client/workers/highlight-client-worker';
import { PropertyType } from '../client/workers/types';
import { IntegrationClient } from '../integrations';
import { Record } from '../api/record';
import type { HighlightClassOptions } from '../client';
import { LDPluginEnvironmentMetadata } from '../plugins/plugin';
import type { Hook, LDClient } from '../integrations/launchdarkly';
import { RecordOptions } from '../client/types/record';
export declare class RecordSDK implements Record {
    options: HighlightClassOptions;
    /** Determines if the client is running on a Highlight property (e.g. frontend). */
    isRunningOnHighlight: boolean;
    /** Verbose project ID that is exposed to users. Legacy users may still be using ints. */
    organizationID: string;
    graphqlSDK: Sdk;
    events: eventWithTime[];
    sessionData: SessionData;
    ready: boolean;
    manualStopped: boolean;
    state: 'NotRecording' | 'Recording';
    logger: Logger;
    enableSegmentIntegration: boolean;
    privacySetting: PrivacySettingOption;
    enableCanvasRecording: boolean;
    samplingStrategy: SamplingStrategy;
    inlineImages: boolean;
    inlineVideos: boolean;
    inlineStylesheet: boolean;
    debugOptions: DebugOptions;
    listeners: listenerHandler[];
    firstloadVersion: string;
    environment: string;
    sessionShortcut: SessionShortcutOptions;
    /** The end-user's app version. This isn't Highlight's version. */
    appVersion: string | undefined;
    serviceName: string;
    _worker: HighlightClientRequestWorker;
    _optionsInternal: Omit<RecordOptions, 'firstloadVersion'>;
    _backendUrl: string;
    _recordingStartTime: number;
    _isOnLocalHost: boolean;
    _onToggleFeedbackFormVisibility: () => void;
    _isCrossOriginIframe: boolean;
    _eventBytesSinceSnapshot: number;
    _lastSnapshotTime: number;
    _lastVisibilityChangeTime: number;
    pushPayloadTimerId: ReturnType<typeof setTimeout> | undefined;
    hasSessionUnloaded: boolean;
    hasPushedData: boolean;
    reloaded: boolean;
    _hasPreviouslyInitialized: boolean;
    _recordStop: listenerHandler | undefined;
    _integrations: IntegrationClient[];
    constructor(options: HighlightClassOptions);
    _reset({ forceNew }: {
        forceNew?: boolean;
    }): Promise<void>;
    _initMembers(options: HighlightClassOptions): void;
    identify(user_identifier: string, user_object?: {}, source?: Source): void;
    track(event: string, metadata?: Metadata): void;
    addProperties(properties_obj?: {}, typeArg?: PropertyType): void;
    start(options?: StartOptions): Promise<void>;
    _visibilityHandler(hidden: boolean): Promise<void>;
    _setupCrossOriginIframe(): Promise<void>;
    _setupCrossOriginIframeParent(): void;
    _setupWindowListeners(): void;
    submitViewportMetrics({ height, width, availHeight, availWidth, }: ViewportResizeListenerArgs): void;
    /**
     * Stops Highlight from recording.
     * @param manual The end user requested to stop recording.
     */
    stop(manual?: boolean): void;
    /**
     * Returns the current timestamp for the current session.
     */
    getCurrentSessionURLWithTimestamp(): string;
    getCurrentSessionURL(): string | null;
    snapshot(element: HTMLCanvasElement): Promise<void>;
    addSessionFeedback({ timestamp, verbatim, user_email, user_name, }: {
        verbatim: string;
        timestamp: string;
        user_name?: string;
        user_email?: string;
    }): void;
    _save(): Promise<void>;
    /**
     * This proxy should be used instead of rrweb's native addCustomEvent.
     * The proxy makes sure recording has started before emitting a custom event.
     */
    addCustomEvent<T>(tag: string, payload: T): void;
    _sendPayload({ sendFn, }: {
        sendFn?: (payload: PushPayloadMutationVariables) => Promise<number>;
    }): Promise<void>;
    private takeFullSnapshot;
    register(client: LDClient, metadata: LDPluginEnvironmentMetadata): void;
    getHooks(metadata: LDPluginEnvironmentMetadata): Hook[];
    getRecordingState(): "NotRecording" | "Recording";
    getSession(): SessionDetails | null;
}
