import { actionWithDelay } from '@sailfish-rrweb/types'; import { addedNodeMutation } from '@sailfish-rrweb/types'; import { blockClass } from '@sailfish-rrweb/types'; import { canvasMutationData } from '@sailfish-rrweb/types'; import { DataURLOptions } from '@sailfish-rrweb/rrweb-snapshot'; import { DeprecatedMirror } from '@sailfish-rrweb/types'; import { DocumentDimension } from '@sailfish-rrweb/types'; import { Emitter } from '@sailfish-rrweb/types'; import { EventType } from '@sailfish-rrweb/types'; import { eventWithTime } from '@sailfish-rrweb/types'; import { Handler } from '@sailfish-rrweb/types'; import { hookResetter } from '@sailfish-rrweb/types'; import { hooksParam } from '@sailfish-rrweb/types'; import { IMirror } from '@sailfish-rrweb/rrweb-snapshot'; import { IncrementalSource } from '@sailfish-rrweb/types'; import { IWindow } from '@sailfish-rrweb/types'; import { KeepIframeSrcFn } from '@sailfish-rrweb/types'; import { listenerHandler } from '@sailfish-rrweb/types'; import { MaskInputFn } from '@sailfish-rrweb/rrweb-snapshot'; import { MaskInputOptions } from '@sailfish-rrweb/rrweb-snapshot'; import { maskTextClass } from '@sailfish-rrweb/types'; import { MaskTextFn } from '@sailfish-rrweb/rrweb-snapshot'; import { Mirror } from '@sailfish-rrweb/rrweb-snapshot'; import { MouseInteractions } from '@sailfish-rrweb/types'; import { PackFn } from '@sailfish-rrweb/types'; import { playerMetaData } from '@sailfish-rrweb/types'; import { RecordPlugin } from '@sailfish-rrweb/types'; import { ReplayerEvents } from '@sailfish-rrweb/types'; import { RRDocument } from '@sailfish-rrweb/rrdom'; import { RRIFrameElement } from '@sailfish-rrweb/rrdom'; import { RRNode } from '@sailfish-rrweb/rrdom'; import { SamplingStrategy } from '@sailfish-rrweb/types'; import { SlimDOMOptions } from '@sailfish-rrweb/rrweb-snapshot'; import { StateMachine } from '@xstate/fsm'; import { textMutation } from '@sailfish-rrweb/types'; import { throttleOptions } from '@sailfish-rrweb/types'; import { UnpackFn } from '@sailfish-rrweb/types'; export declare const addCustomEvent: (tag: string, payload: T) => void; export declare const addSailfishEvent: (type: number, payload: T) => void; export declare type AppendedIframe = { mutationInQueue: addedNodeMutation; builtNode: HTMLIFrameElement | RRIFrameElement; }; export declare function canvasMutation({ event, mutation, target, imageMap, canvasEventMap, errorHandler, }: { event: Parameters[0]; mutation: canvasMutationData; target: HTMLCanvasElement; imageMap: Replayer['imageMap']; canvasEventMap: Replayer['canvasEventMap']; errorHandler: Replayer['warnCanvasMutationFailed']; }): Promise; export declare function closestElementOfNode(node: Node | null): HTMLElement | null; declare function createPlayerService(context: PlayerContext, { getCastFn, applyEventsSynchronously, emitter }: PlayerAssets): StateMachine.Service; declare function createSpeedService(context: SpeedContext): StateMachine.Service; declare type ErrorHandler = (error: unknown) => void | boolean; export { EventType } export { eventWithTime } export declare const freezePage: () => void; export declare function getBaseDimension(node: Node, rootIframe: Node): DocumentDimension; export declare function getNestedRule(rules: CSSRuleList, position: number[]): CSSGroupingRule; export declare function getPositionsAndIndex(nestedIndex: number[]): { positions: number[]; index: number | undefined; }; export declare function getRootShadowHost(n: Node): Node; export declare function getShadowHost(n: Node): Element | null; export declare function getWindowHeight(): number; export declare function getWindowScroll(win: Window): { left: number; top: number; }; export declare function getWindowWidth(): number; export declare function hasShadowRoot(n: T): n is T & { shadowRoot: ShadowRoot; }; export declare function hookSetter(target: T, key: string | number | symbol, d: PropertyDescriptor, isRevoked?: boolean, win?: Window & typeof globalThis): hookResetter; export { IncrementalSource } export declare function inDom(n: Node): boolean; export declare function isAncestorRemoved(target: Node, mirror: Mirror): boolean; export declare function isBlocked(node: Node | null, blockClass: blockClass, blockSelector: string | null, checkAncestors: boolean): boolean; export declare function isIgnored(n: Node, mirror: Mirror, slimDOMOptions: SlimDOMOptions): boolean; export declare function isSerialized(n: Node, mirror: Mirror): boolean; export declare function isSerializedIframe(n: TNode, mirror: IMirror): boolean; export declare function isSerializedStylesheet(n: TNode, mirror: IMirror): boolean; export declare function iterateResolveTree(tree: ResolveTree, cb: (mutation: addedNodeMutation) => unknown): void; export declare function legacy_isTouchEvent(event: MouseEvent | TouchEvent | PointerEvent): event is TouchEvent; declare let _mirror: DeprecatedMirror; export { _mirror } export { _mirror as mirror } export { MouseInteractions } export declare let nowTimestamp: () => number; export declare function on(type: string, fn: EventListenerOrEventListenerObject, target?: Document | IWindow): listenerHandler; export declare function patch(source: { [key: string]: any; }, name: string, replacement: (...args: unknown[]) => unknown): () => void; declare type PlayerAssets = { emitter: Emitter; applyEventsSynchronously(events: Array): void; getCastFn(event: eventWithTime, isSync: boolean): () => void; }; export declare type playerConfig = { speed: number; maxSpeed: number; root: Element; loadTimeout: number; skipInactive: boolean; inactivePeriodThreshold: number; showWarning: boolean; showDebug: boolean; blockClass: string; liveMode: boolean; insertStyleRules: string[]; triggerFocus: boolean; UNSAFE_replayCanvas: boolean; pauseAnimation?: boolean; mouseTail: boolean | { duration?: number; lineCap?: string; lineWidth?: number; strokeStyle?: string; }; unpackFn?: UnpackFn; useVirtualDom: boolean; logger: { log: (...args: Parameters) => void; warn: (...args: Parameters) => void; }; plugins?: ReplayPlugin[]; }; declare type PlayerContext = { events: eventWithTime[]; timer: Timer; timeOffset: number; baselineTime: number; lastPlayedEvent: eventWithTime | null; }; declare type PlayerEvent = { type: 'PLAY'; payload: { timeOffset: number; }; } | { type: 'CAST_EVENT'; payload: { event: eventWithTime; }; } | { type: 'PAUSE'; } | { type: 'TO_LIVE'; payload: { baselineTime?: number; }; } | { type: 'ADD_EVENT'; payload: { event: eventWithTime; }; } | { type: 'END'; }; export declare type PlayerMachineState = StateMachine.State; declare type PlayerState = { value: 'playing'; context: PlayerContext; } | { value: 'paused'; context: PlayerContext; } | { value: 'live'; context: PlayerContext; }; export declare function polyfill(win?: Window & typeof globalThis): void; export declare function queueToResolveTrees(queue: addedNodeMutation[]): ResolveTree[]; export declare function record(options?: recordOptions): listenerHandler | undefined; export declare namespace record { var addCustomEvent: (tag: string, payload: T) => void; var addSailfishEvent: (type: number, payload: T) => void; var freezePage: () => void; var takeFullSnapshot: (isCheckout?: boolean) => void; var mirror: Mirror; } export declare type recordOptions = { emit?: (e: T, isCheckout?: boolean) => void; checkoutEveryNth?: number; checkoutEveryNms?: number; blockClass?: blockClass; blockSelector?: string; ignoreClass?: string; ignoreSelector?: string; maskTextClass?: maskTextClass; maskTextSelector?: string; maskAllInputs?: boolean; maskInputOptions?: MaskInputOptions; maskInputFn?: MaskInputFn; maskTextFn?: MaskTextFn; slimDOMOptions?: SlimDOMOptions | "all" | true; ignoreCSSAttributes?: Set; inlineStylesheet?: boolean; hooks?: hooksParam; packFn?: PackFn; sampling?: SamplingStrategy; dataURLOptions?: DataURLOptions; recordDOM?: boolean; recordCanvas?: boolean; recordCrossOriginIframes?: boolean; recordAfter?: "DOMContentLoaded" | "load"; userTriggeredOnInput?: boolean; collectFonts?: boolean; inlineImages?: boolean; plugins?: RecordPlugin[]; mousemoveWait?: number; keepIframeSrcFn?: KeepIframeSrcFn; errorHandler?: ErrorHandler; captureDeviceChanges?: object; }; export declare class Replayer { wrapper: HTMLDivElement; iframe: HTMLIFrameElement; service: ReturnType; speedService: ReturnType; get timer(): Timer; config: playerConfig; usingVirtualDom: boolean; virtualDom: RRDocument; private mouse; private mouseTail; private tailPositions; private emitter; private nextUserInteractionEvent; private legacy_missingNodeRetryMap; private cache; private imageMap; private canvasEventMap; private mirror; private styleMirror; private mediaManager; private firstFullSnapshot; private newDocumentQueue; private mousePos; private touchActive; private lastMouseDownEvent; private lastHoveredRootNode; private textValueMap; private lastSelectionData; private constructedStyleMutations; private adoptedStyleSheets; constructor(events: Array, config?: Partial); on(event: string, handler: Handler): this; off(event: string, handler: Handler): this; setConfig(config: Partial): void; getMetaData(): playerMetaData; getCurrentTime(): number; getTimeOffset(): number; getMirror(): Mirror; play(timeOffset?: number): void; pause(timeOffset?: number): void; resume(timeOffset?: number): void; destroy(): void; startLive(baselineTime?: number): void; addEvent(rawEvent: eventWithTime | string): void; enableInteract(): void; disableInteract(): void; resetCache(): void; private setupDom; private handleResize; private applyEventsSynchronously; private getCastFn; private rebuildFullSnapshot; private insertStyleRules; private attachDocumentToIframe; private collectIframeAndAttachDocument; private waitForStylesheetLoad; private preloadAllImages; private preloadImages; private deserializeAndPreloadCanvasEvents; private applyIncremental; private applyMutation; private applyScroll; private applyInput; private applySelection; private applyStyleSheetMutation; private applyStyleSheetRule; private applyStyleDeclaration; private applyAdoptedStyleSheet; private legacy_resolveMissingNode; private moveAndHover; private drawMouseTail; private hoverElements; private isUserInteraction; backToNormal(): void; private warnNodeNotFound; private warnCanvasMutationFailed; private debugNodeNotFound; private warn; private debug; } export { ReplayerEvents } export declare type ReplayPlugin = { handler?: (event: eventWithTime, isSync: boolean, context: { replayer: Replayer; }) => void; onBuild?: (node: Node | RRNode, context: { id: number; replayer: Replayer; }) => void; getMirror?: (mirrors: { nodeMirror: Mirror; }) => void; }; declare type ResolveTree = { value: addedNodeMutation; children: ResolveTree[]; parent: ResolveTree | null; }; export declare function shadowHostInDom(n: Node): boolean; declare type SpeedContext = { normalSpeed: playerConfig['speed']; timer: Timer; }; declare type SpeedEvent = { type: 'FAST_FORWARD'; payload: { speed: playerConfig['speed']; }; } | { type: 'BACK_TO_NORMAL'; } | { type: 'SET_SPEED'; payload: { speed: playerConfig['speed']; }; }; export declare type SpeedMachineState = StateMachine.State; declare type SpeedState = { value: 'normal'; context: SpeedContext; } | { value: 'skipping'; context: SpeedContext; }; export declare class StyleSheetMirror { private id; private styleIDMap; private idStyleMap; getId(stylesheet: CSSStyleSheet): number; has(stylesheet: CSSStyleSheet): boolean; add(stylesheet: CSSStyleSheet, id?: number): number; getStyle(id: number): CSSStyleSheet | null; reset(): void; generateId(): number; } export declare const takeFullSnapshot: (isCheckout?: boolean) => void; export declare function throttle(func: (arg: T) => void, wait: number, options?: throttleOptions): (...args: T[]) => void; declare class Timer { timeOffset: number; speed: number; private actions; private raf; private lastTimestamp; constructor(actions: actionWithDelay[] | undefined, config: { speed: number; }); addAction(action: actionWithDelay): void; start(): void; private rafCheck; clear(): void; setSpeed(speed: number): void; isActive(): boolean; private findActionIndex; } export declare function uniqueTextMutations(mutations: textMutation[]): textMutation[]; declare namespace utils { export { on, throttle, hookSetter, patch, getWindowScroll, getWindowHeight, getWindowWidth, closestElementOfNode, isBlocked, isSerialized, isIgnored, isAncestorRemoved, legacy_isTouchEvent, polyfill, queueToResolveTrees, iterateResolveTree, isSerializedIframe, isSerializedStylesheet, getBaseDimension, hasShadowRoot, getNestedRule, getPositionsAndIndex, uniqueTextMutations, getShadowHost, getRootShadowHost, shadowHostInDom, inDom, _mirror, nowTimestamp, AppendedIframe, StyleSheetMirror } } export { utils } export { } declare namespace record { var addCustomEvent: (tag: string, payload: T) => void; var addSailfishEvent: (type: number, payload: T) => void; var freezePage: () => void; var takeFullSnapshot: (isCheckout?: boolean) => void; var mirror: import("@sailfish-rrweb/rrweb-snapshot").Mirror; } declare global { interface Window { FontFace: typeof FontFace; Array: typeof Array; } }