import { eventWithTime } from '../cx-rrweb/rrweb-types';
import { SlimDOMOptions } from '../cx-rrweb/rrweb-snapshot';
import { CoralogixEventType } from '../types';
import { recordOptions } from '../cx-rrweb/rrweb';
import type { ExcludableInstrumentation } from './session.consts';
export interface SessionRecordingConfig extends Omit<recordOptions<eventWithTime>, 'emit' | 'packFn' | 'plugins' | 'hooks' | 'slimDOMOptions'> {
    enable: boolean;
    autoStartSessionRecording: boolean;
    recordConsoleEvents?: boolean;
    maxMutations?: number;
    excludeDOMOptions?: SlimDOMOptions;
    sessionRecordingSampleRate?: number;
    workerUrl?: string;
    immediateFlush?: boolean;
}
export interface SessionWithErrorConfig {
    enable: boolean;
    maxRumEvents?: number;
    maxRecordTime?: number;
    instrumentationsToSend?: Partial<Record<CoralogixEventType, boolean>>;
}
export interface SessionConfig {
    sessionSampleRate?: number;
    alwaysTrackSessionsWithErrors?: boolean;
    onlyWithErrorConfig?: SessionWithErrorConfig;
    keepSessionAfterReload?: boolean;
    excludeFromSampling?: ExcludableInstrumentation[];
}
export type RecordEvent = eventWithTime;
export type RecordPluginEvent<T = any> = {
    type: SessionRecordingEventType.Plugin;
    data: {
        plugin: string;
        payload: T;
    };
    timestamp: number;
};
export declare enum SessionRecordingEventType {
    DomContentLoaded = 0,
    Load = 1,
    FullSnapshot = 2,
    IncrementalSnapshot = 3,
    Meta = 4,
    Custom = 5,
    Plugin = 6
}
export interface SessionRecordingMetadata {
    segmentIndex: number;
    segmentSize: number;
    segmentTimestamp: number;
    sessionId: string;
    sessionCreationDate: number;
    application: string;
    subIndex: number | undefined;
    snapshotId?: string;
}
export type SessionRecordingWorkerEvent = 'compressRecordData' | 'splitRecordData' | 'sendRecordData' | 'stopRecording';
export interface SessionRecordingWorkerData {
    sessionId: string;
    sessionCreationDate: number;
    gzipBlob?: Blob;
    chunkIndex?: number;
    totalChunks?: number;
    event: SessionRecordingWorkerEvent;
    screenshotId?: string;
}
