posthog-js
Version:
Posthog-js allows you to automatically capture usage and send events to PostHog.
1,509 lines (1,293 loc) • 45.4 kB
TypeScript
declare type actionWithDelay = {
doAction: () => void;
delay: number;
};
declare type addedNodeMutation = {
parentId: number;
previousId?: number | null;
nextId: number | null;
node: serializedNodeWithId;
};
declare type adoptedStyleSheetData = {
source: IncrementalSource.AdoptedStyleSheet;
} & adoptedStyleSheetParam;
declare type adoptedStyleSheetParam = {
id: number;
styles?: {
styleId: number;
rules: styleSheetAddRule[];
}[];
styleIds: number[];
};
declare type attributeMutation = {
id: number;
attributes: {
[key: string]: string | styleOMValue | null;
};
};
declare type attributes = cssTextKeyAttr & {
[key: string]: string | number | true | null;
};
declare type blockClass = string | RegExp;
declare enum CanvasContext {
'2D' = 0,
WebGL = 1,
WebGL2 = 2
}
declare type canvasEventWithTime = eventWithTime & {
type: EventType.IncrementalSnapshot;
data: canvasMutationData;
};
declare type CanvasMasking = {
regionsFn?: (canvas: HTMLCanvasElement) => CanvasMaskRegion[] | null | undefined;
configured?: () => boolean;
};
declare type CanvasMaskRegion = {
x: number;
y: number;
width: number;
height: number;
};
declare type canvasMutationCallback = (p: canvasMutationParam) => void;
declare type canvasMutationCommand = {
property: string;
args: Array<unknown>;
setter?: true;
};
declare type canvasMutationData = {
source: IncrementalSource.CanvasMutation;
} & canvasMutationParam;
declare type canvasMutationParam = {
id: number;
type: CanvasContext;
commands: canvasMutationCommand[];
displayWidth?: number;
displayHeight?: number;
} | ({
id: number;
type: CanvasContext;
displayWidth?: number;
displayHeight?: number;
} & canvasMutationCommand);
declare type cdataNode = {
type: NodeType.CDATA;
textContent: '';
};
declare type commentNode = {
type: NodeType.Comment;
textContent: string;
};
declare type cssTextKeyAttr = {
_cssText?: string;
};
declare type customElementCallback = (c: customElementParam) => void;
declare type customElementData = {
source: IncrementalSource.CustomElement;
} & customElementParam;
declare type customElementParam = {
define?: {
name: string;
};
};
declare type customEvent<T = unknown> = {
type: EventType.Custom;
data: {
tag: string;
payload: T;
};
};
declare type DataURLOptions = Partial<{
type: string;
quality: number;
maxBase64ImageLength: number;
}>;
declare type DeprecatedMirror = {
map: {
[key: number]: INode;
};
getId: (n: Node) => number;
getNode: (id: number) => INode | null;
removeNodeFromMap: (n: Node) => void;
has: (id: number) => boolean;
reset: () => void;
};
declare type DocumentDimension = {
x: number;
y: number;
relativeScale: number;
absoluteScale: number;
};
declare type documentNode = {
type: NodeType.Document;
childNodes: serializedNodeWithId[];
compatMode?: string;
};
declare type documentTypeNode = {
type: NodeType.DocumentType;
name: string;
publicId: string;
systemId: string;
};
declare type domContentLoadedEvent = {
type: EventType.DomContentLoaded;
data: unknown;
};
declare type elementNode = {
type: NodeType.Element;
tagName: string;
attributes: attributes;
childNodes: serializedNodeWithId[];
isSVG?: true;
needBlock?: boolean;
isCustom?: true;
};
declare type Emitter = {
on(type: string, handler: Handler): void;
emit(type: string, event?: unknown): void;
off(type: string, handler: Handler): void;
};
declare enum EventType {
DomContentLoaded = 0,
Load = 1,
FullSnapshot = 2,
IncrementalSnapshot = 3,
Meta = 4,
Custom = 5,
Plugin = 6
}
declare type eventWithoutTime = domContentLoadedEvent | loadedEvent | fullSnapshotEvent | incrementalSnapshotEvent | metaEvent | customEvent | pluginEvent;
declare type eventWithTime = eventWithoutTime & {
timestamp: number;
delay?: number;
};
declare type fontCallback = (p: fontParam) => void;
declare type fontData = {
source: IncrementalSource.Font;
} & fontParam;
declare type fontParam = {
family: string;
fontSource: string;
buffer: boolean;
descriptors?: FontFaceDescriptors;
};
declare type fullSnapshotEvent = {
type: EventType.FullSnapshot;
data: {
node: serializedNodeWithId;
initialOffset: {
top: number;
left: number;
};
};
};
declare type Handler = (event?: unknown) => void;
declare type hookResetter = () => void;
declare type hooksParam = {
mutation?: mutationCallBack;
mousemove?: mousemoveCallBack;
mouseInteraction?: mouseInteractionCallBack;
scroll?: scrollCallback;
viewportResize?: viewportResizeCallback;
input?: inputCallback;
mediaInteaction?: mediaInteractionCallback;
styleSheetRule?: styleSheetRuleCallback;
styleDeclaration?: styleDeclarationCallback;
canvasMutation?: canvasMutationCallback;
font?: fontCallback;
selection?: selectionCallback;
customElement?: customElementCallback;
};
declare interface ICrossOriginIframeMirror {
getId(iframe: HTMLIFrameElement, remoteId: number, parentToRemoteMap?: Map<number, number>, remoteToParentMap?: Map<number, number>): number;
getIds(iframe: HTMLIFrameElement, remoteId: number[]): number[];
getRemoteId(iframe: HTMLIFrameElement, parentId: number, map?: Map<number, number>): number;
getRemoteIds(iframe: HTMLIFrameElement, parentId: number[]): number[];
reset(iframe?: HTMLIFrameElement): void;
}
declare interface IMirror<TNode> {
getId(n: TNode | undefined | null): number;
getNode(id: number): TNode | null;
getIds(): number[];
getMeta(n: TNode): serializedNodeWithId | null;
removeNodeFromMap(n: TNode): void;
has(id: number): boolean;
hasNode(node: TNode): boolean;
add(n: TNode, meta: serializedNodeWithId): void;
replace(id: number, n: TNode): void;
reset(): void;
}
declare type incrementalData = mutationData | mousemoveData | mouseInteractionData | scrollData | viewportResizeData | inputData | mediaInteractionData | styleSheetRuleData | canvasMutationData | fontData | selectionData | styleDeclarationData | adoptedStyleSheetData | customElementData;
declare type incrementalSnapshotEvent = {
type: EventType.IncrementalSnapshot;
data: incrementalData;
};
declare enum IncrementalSource {
Mutation = 0,
MouseMove = 1,
MouseInteraction = 2,
Scroll = 3,
ViewportResize = 4,
Input = 5,
TouchMove = 6,
MediaInteraction = 7,
StyleSheetRule = 8,
CanvasMutation = 9,
Font = 10,
Log = 11,
Drag = 12,
StyleDeclaration = 13,
Selection = 14,
AdoptedStyleSheet = 15,
CustomElement = 16
}
declare interface INode extends Node {
__sn: serializedNodeWithId;
}
declare type inputCallback = (v: inputValue & {
id: number;
}) => void;
declare type inputData = {
source: IncrementalSource.Input;
id: number;
} & inputValue;
declare type inputValue = {
text: string;
isChecked: boolean;
userTriggered?: boolean;
};
declare type IWindow = Window & typeof globalThis;
declare type KeepIframeSrcFn = (src: string) => boolean;
declare type listenerHandler = () => void;
declare type loadedEvent = {
type: EventType.Load;
data: unknown;
};
declare type maskTextClass = string | RegExp;
declare type mediaInteractionCallback = (p: mediaInteractionParam) => void;
declare type mediaInteractionData = {
source: IncrementalSource.MediaInteraction;
} & mediaInteractionParam;
declare type mediaInteractionParam = {
type: MediaInteractions;
id: number;
currentTime?: number;
volume?: number;
muted?: boolean;
loop?: boolean;
playbackRate?: number;
};
declare enum MediaInteractions {
Play = 0,
Pause = 1,
Seeked = 2,
VolumeChange = 3,
RateChange = 4
}
declare type metaEvent = {
type: EventType.Meta;
data: {
href: string;
width: number;
height: number;
};
};
declare type mouseInteractionCallBack = (d: mouseInteractionParam) => void;
declare type mouseInteractionData = {
source: IncrementalSource.MouseInteraction;
} & mouseInteractionParam;
declare type mouseInteractionParam = {
type: MouseInteractions;
id: number;
x?: number;
y?: number;
pointerType?: PointerTypes;
};
declare enum MouseInteractions {
MouseUp = 0,
MouseDown = 1,
Click = 2,
ContextMenu = 3,
DblClick = 4,
Focus = 5,
Blur = 6,
TouchStart = 7,
TouchMove_Departed = 8,
TouchEnd = 9,
TouchCancel = 10
}
declare type mousemoveCallBack = (p: mousePosition[], source: IncrementalSource.MouseMove | IncrementalSource.TouchMove | IncrementalSource.Drag) => void;
declare type mousemoveData = {
source: IncrementalSource.MouseMove | IncrementalSource.TouchMove | IncrementalSource.Drag;
positions: mousePosition[];
};
declare type mousePosition = {
x: number;
y: number;
id: number;
timeOffset: number;
};
declare type mutationCallBack = (m: mutationCallbackParam) => void;
declare type mutationCallbackParam = {
texts: textMutation[];
attributes: attributeMutation[];
removes: removedNodeMutation[];
adds: addedNodeMutation[];
isAttachIframe?: true;
};
declare type mutationData = {
source: IncrementalSource.Mutation;
} & mutationCallbackParam;
declare enum NodeType {
Document = 0,
DocumentType = 1,
Element = 2,
Text = 3,
CDATA = 4,
Comment = 5
}
declare type PackFn = (event: eventWithTime) => string;
declare type playerMetaData = {
startTime: number;
endTime: number;
totalTime: number;
};
declare type pluginEvent<T = unknown> = {
type: EventType.Plugin;
data: {
plugin: string;
payload: T;
};
};
declare enum PointerTypes {
Mouse = 0,
Pen = 1,
Touch = 2
}
declare type RecordPlugin<TOptions = unknown> = {
name: string;
observer?: (cb: (...args: Array<unknown>) => void, win: IWindow, options: TOptions) => listenerHandler;
eventProcessor?: <TExtend>(event: eventWithTime) => eventWithTime & TExtend;
getMirror?: (mirrors: {
nodeMirror: IMirror<Node>;
crossOriginIframeMirror: ICrossOriginIframeMirror;
crossOriginIframeStyleMirror: ICrossOriginIframeMirror;
}) => void;
options: TOptions;
};
declare type removedNodeMutation = {
parentId: number;
id: number;
isShadow?: boolean;
};
declare enum ReplayerEvents {
Start = "start",
Pause = "pause",
Resume = "resume",
Resize = "resize",
Finish = "finish",
FullsnapshotRebuilded = "fullsnapshot-rebuilded",
LoadStylesheetStart = "load-stylesheet-start",
LoadStylesheetEnd = "load-stylesheet-end",
SkipStart = "skip-start",
SkipEnd = "skip-end",
MouseInteraction = "mouse-interaction",
EventCast = "event-cast",
CustomEvent = "custom-event",
Flush = "flush",
StateChange = "state-change",
PlayBack = "play-back",
Destroy = "destroy"
}
declare type SamplingStrategy = Partial<{
mousemove: boolean | number;
mousemoveCallback: number;
mouseInteraction: boolean | Record<string, boolean | undefined>;
scroll: number;
media: number;
input: 'all' | 'last';
canvas: 'all' | number;
}>;
declare type scrollCallback = (p: scrollPosition) => void;
declare type scrollData = {
source: IncrementalSource.Scroll;
} & scrollPosition;
declare type scrollPosition = {
id: number;
x: number;
y: number;
};
declare type selectionCallback = (p: selectionParam) => void;
declare type selectionData = {
source: IncrementalSource.Selection;
} & selectionParam;
declare type selectionParam = {
ranges: Array<SelectionRange>;
};
declare type SelectionRange = {
start: number;
startOffset: number;
end: number;
endOffset: number;
};
declare type serializedNode = (documentNode | documentTypeNode | elementNode | textNode | cdataNode | commentNode) & {
rootId?: number;
isShadowHost?: boolean;
isShadow?: boolean;
};
declare type serializedNodeWithId = serializedNode & {
id: number;
};
declare type styleDeclarationCallback = (s: styleDeclarationParam) => void;
declare type styleDeclarationData = {
source: IncrementalSource.StyleDeclaration;
} & styleDeclarationParam;
declare type styleDeclarationParam = {
id?: number;
styleId?: number;
index: number[];
set?: {
property: string;
value: string | null;
priority: string | undefined;
};
remove?: {
property: string;
};
};
declare type styleOMValue = {
[key: string]: styleValueWithPriority | string | false;
};
declare type styleSheetAddRule = {
rule: string;
index?: number | number[];
};
declare type styleSheetDeleteRule = {
index: number | number[];
};
declare type styleSheetRuleCallback = (s: styleSheetRuleParam) => void;
declare type styleSheetRuleData = {
source: IncrementalSource.StyleSheetRule;
} & styleSheetRuleParam;
declare type styleSheetRuleParam = {
id?: number;
styleId?: number;
removes?: styleSheetDeleteRule[];
adds?: styleSheetAddRule[];
replace?: string;
replaceSync?: string;
};
declare type styleValueWithPriority = [string, string];
declare type textMutation = {
id: number;
value: string | null;
};
declare type textNode = {
type: NodeType.Text;
textContent: string;
isStyle?: true;
};
declare type throttleOptions = {
leading?: boolean;
trailing?: boolean;
};
declare type UnpackFn = (raw: string) => eventWithTime;
declare type viewportResizeCallback = (d: viewportResizeDimension) => void;
declare type viewportResizeData = {
source: IncrementalSource.ViewportResize;
} & viewportResizeDimension;
declare type viewportResizeDimension = {
width: number;
height: number;
};
declare type DeferredStylesheetStats = {
deferredCount: number;
failedCount: number;
abandonedCount: number;
totalMs: number;
slowestSliceMs: number;
};
declare function getDeferredStylesheetStats(): DeferredStylesheetStats;
declare function getDiscardedDurationSamples(): number;
declare function getLastSnapshotCost(): SnapshotCost | null;
declare function getMutationCost(): MutationCost;
declare type MaskAttributeFn = (name: string, value: string, element: Element) => string;
declare type MaskInputFn = (text: string, element: HTMLElement) => string;
declare type MaskInputOptions = Partial<{
color: boolean;
date: boolean;
'datetime-local': boolean;
email: boolean;
month: boolean;
number: boolean;
range: boolean;
search: boolean;
tel: boolean;
text: boolean;
time: boolean;
url: boolean;
week: boolean;
textarea: boolean;
select: boolean;
password: boolean;
}>;
declare type MaskTextFn = (text: string, element: HTMLElement | null) => string;
declare class Mirror$1 implements IMirror<Node> {
private idNodeMap;
private nodeMetaMap;
getId(n: Node | undefined | null): number;
getNode(id: number): Node | null;
getIds(): number[];
getMeta(n: Node): serializedNodeWithId | null;
removeNodeFromMap(n: Node): void;
has(id: number): boolean;
hasNode(node: Node): boolean;
add(n: Node, meta: serializedNodeWithId): void;
replace(id: number, n: Node): void;
reset(): void;
}
declare type MutationCost = {
slowestBatchMs: number;
};
declare function resetMaxDepthState(): void;
declare function resetSnapshotCostState(): void;
declare type SlimDOMOptions = Partial<{
script: boolean;
comment: boolean;
headFavicon: boolean;
headWhitespace: boolean;
headMetaDescKeywords: boolean;
headMetaSocial: boolean;
headMetaRobots: boolean;
headMetaHttpEquiv: boolean;
headMetaAuthorship: boolean;
headMetaVerification: boolean;
headTitleMutations: boolean;
}>;
declare type SnapshotCost = {
durationMs: number;
stylesheetMs: number;
nodeCount: number;
cssRuleCount: number;
nonDeferrableCssRuleCount: number;
deferredStylesheetCount: number;
};
declare function wasMaxDepthReached(): boolean;
declare class BaseRRCDATASection extends BaseRRNode implements IRRCDATASection {
readonly nodeName: "#cdata-section";
readonly nodeType: number;
readonly RRNodeType = NodeType.CDATA;
data: string;
constructor(data: string);
get textContent(): string;
set textContent(textContent: string);
toString(): string;
}
declare class BaseRRComment extends BaseRRNode implements IRRComment {
readonly nodeType: number;
readonly nodeName: "#comment";
readonly RRNodeType = NodeType.Comment;
data: string;
constructor(data: string);
get textContent(): string;
set textContent(textContent: string);
toString(): string;
}
declare class BaseRRDocument extends BaseRRNode implements IRRDocument {
readonly nodeType: number;
readonly nodeName: "#document";
readonly compatMode: 'BackCompat' | 'CSS1Compat';
readonly RRNodeType = NodeType.Document;
textContent: string | null;
constructor(...args: any[]);
get documentElement(): IRRElement | null;
get body(): IRRElement | null;
get head(): IRRElement | null;
get implementation(): IRRDocument;
get firstElementChild(): IRRElement | null;
appendChild(newChild: IRRNode): IRRNode;
insertBefore(newChild: IRRNode, refChild: IRRNode | null): IRRNode;
removeChild(node: IRRNode): IRRNode;
open(): void;
close(): void;
write(content: string): void;
createDocument(_namespace: string | null, _qualifiedName: string | null, _doctype?: DocumentType | null): IRRDocument;
createDocumentType(qualifiedName: string, publicId: string, systemId: string): IRRDocumentType;
createElement(tagName: string): IRRElement;
createElementNS(_namespaceURI: string, qualifiedName: string): IRRElement;
createTextNode(data: string): IRRText;
createComment(data: string): IRRComment;
createCDATASection(data: string): IRRCDATASection;
toString(): string;
}
declare class BaseRRDocumentType extends BaseRRNode implements IRRDocumentType {
readonly nodeType: number;
readonly RRNodeType = NodeType.DocumentType;
readonly nodeName: string;
readonly name: string;
readonly publicId: string;
readonly systemId: string;
textContent: string | null;
constructor(qualifiedName: string, publicId: string, systemId: string);
toString(): string;
}
declare class BaseRRElement extends BaseRRNode implements IRRElement {
readonly nodeType: number;
readonly RRNodeType = NodeType.Element;
readonly nodeName: string;
tagName: string;
attributes: Record<string, string>;
shadowRoot: IRRElement | null;
scrollLeft?: number;
scrollTop?: number;
constructor(tagName: string);
get textContent(): string;
set textContent(textContent: string);
get classList(): ClassList;
get id(): string;
get className(): string;
get style(): CSSStyleDeclaration_2;
getAttribute(name: string): string | null;
setAttribute(name: string, attribute: string): void;
setAttributeNS(_namespace: string | null, qualifiedName: string, value: string): void;
removeAttribute(name: string): void;
appendChild(newChild: IRRNode): IRRNode;
insertBefore(newChild: IRRNode, refChild: IRRNode | null): IRRNode;
removeChild(node: IRRNode): IRRNode;
attachShadow(_init: ShadowRootInit): IRRElement;
dispatchEvent(_event: Event): boolean;
toString(): string;
}
declare class BaseRRMediaElement extends BaseRRElement {
currentTime?: number;
volume?: number;
paused?: boolean;
muted?: boolean;
playbackRate?: number;
loop?: boolean;
attachShadow(_init: ShadowRootInit): IRRElement;
play(): void;
pause(): void;
}
declare abstract class BaseRRNode implements IRRNode {
parentElement: IRRNode | null;
parentNode: IRRNode | null;
ownerDocument: IRRDocument;
firstChild: IRRNode | null;
lastChild: IRRNode | null;
previousSibling: IRRNode | null;
nextSibling: IRRNode | null;
abstract textContent: string | null;
readonly ELEMENT_NODE: number;
readonly TEXT_NODE: number;
readonly nodeType: number;
readonly nodeName: string;
readonly RRNodeType: NodeType;
constructor(..._args: any[]);
get childNodes(): IRRNode[];
contains(node: IRRNode): boolean;
appendChild(_newChild: IRRNode): IRRNode;
insertBefore(_newChild: IRRNode, _refChild: IRRNode | null): IRRNode;
removeChild(_node: IRRNode): IRRNode;
toString(): string;
}
declare class BaseRRText extends BaseRRNode implements IRRText {
readonly nodeType: number;
readonly nodeName: "#text";
readonly RRNodeType = NodeType.Text;
data: string;
constructor(data: string);
get textContent(): string;
set textContent(textContent: string);
toString(): string;
}
declare class ClassList {
private onChange;
classes: string[];
constructor(classText?: string, onChange?: ((newClassText: string) => void) | undefined);
add: (...classNames: string[]) => void;
remove: (...classNames: string[]) => void;
}
declare type CSSStyleDeclaration_2 = Record<string, string> & {
setProperty: (name: string, value: string | null, priority?: string | null) => void;
removeProperty: (name: string) => string;
};
declare interface IRRCDATASection extends IRRNode {
readonly nodeName: '#cdata-section';
data: string;
}
declare interface IRRComment extends IRRNode {
readonly nodeName: '#comment';
data: string;
}
declare interface IRRDocument extends IRRNode {
documentElement: IRRElement | null;
body: IRRElement | null;
head: IRRElement | null;
implementation: IRRDocument;
firstElementChild: IRRElement | null;
readonly nodeName: '#document';
compatMode: 'BackCompat' | 'CSS1Compat';
createDocument(_namespace: string | null, _qualifiedName: string | null, _doctype?: DocumentType | null): IRRDocument;
createDocumentType(qualifiedName: string, publicId: string, systemId: string): IRRDocumentType;
createElement(tagName: string): IRRElement;
createElementNS(_namespaceURI: string, qualifiedName: string): IRRElement;
createTextNode(data: string): IRRText;
createComment(data: string): IRRComment;
createCDATASection(data: string): IRRCDATASection;
open(): void;
close(): void;
write(content: string): void;
}
declare interface IRRDocumentType extends IRRNode {
readonly name: string;
readonly publicId: string;
readonly systemId: string;
}
declare interface IRRElement extends IRRNode {
tagName: string;
attributes: Record<string, string>;
shadowRoot: IRRElement | null;
scrollLeft?: number;
scrollTop?: number;
id: string;
className: string;
classList: ClassList;
style: CSSStyleDeclaration_2;
attachShadow(init: ShadowRootInit): IRRElement;
getAttribute(name: string): string | null;
setAttribute(name: string, attribute: string): void;
setAttributeNS(namespace: string | null, qualifiedName: string, value: string): void;
removeAttribute(name: string): void;
dispatchEvent(event: Event): boolean;
}
declare interface IRRNode {
parentElement: IRRNode | null;
parentNode: IRRNode | null;
ownerDocument: IRRDocument;
readonly childNodes: IRRNode[];
readonly ELEMENT_NODE: number;
readonly TEXT_NODE: number;
readonly nodeType: number;
readonly nodeName: string;
readonly RRNodeType: NodeType;
firstChild: IRRNode | null;
lastChild: IRRNode | null;
previousSibling: IRRNode | null;
nextSibling: IRRNode | null;
textContent: string | null;
contains(node: IRRNode): boolean;
appendChild(newChild: IRRNode): IRRNode;
insertBefore(newChild: IRRNode, refChild: IRRNode | null): IRRNode;
removeChild(node: IRRNode): IRRNode;
toString(): string;
}
declare interface IRRText extends IRRNode {
readonly nodeName: '#text';
data: string;
}
declare class Mirror implements IMirror<BaseRRNode> {
private idNodeMap;
private nodeMetaMap;
getId(n: BaseRRNode | undefined | null): number;
getNode(id: number): BaseRRNode | null;
getIds(): number[];
getMeta(n: BaseRRNode): serializedNodeWithId | null;
removeNodeFromMap(n: BaseRRNode): void;
has(id: number): boolean;
hasNode(node: BaseRRNode): boolean;
add(n: BaseRRNode, meta: serializedNodeWithId): void;
replace(id: number, n: BaseRRNode): void;
reset(): void;
}
declare class RRCanvasElement extends RRElement implements IRRElement {
rr_dataURL: string | null;
canvasMutations: {
event: canvasEventWithTime;
mutation: canvasMutationData;
}[];
getContext(): RenderingContext | null;
}
declare class RRDocument extends BaseRRDocument {
private UNSERIALIZED_STARTING_ID;
private _unserializedId;
get unserializedId(): number;
mirror: Mirror;
scrollData: scrollData | null;
constructor(mirror?: Mirror);
createDocument(_namespace: string | null, _qualifiedName: string | null, _doctype?: DocumentType | null): RRDocument;
createDocumentType(qualifiedName: string, publicId: string, systemId: string): BaseRRDocumentType;
createElement<K extends keyof HTMLElementTagNameMap>(tagName: K): RRElementType<K>;
createElement(tagName: string): RRElement;
createComment(data: string): BaseRRComment;
createCDATASection(data: string): BaseRRCDATASection;
createTextNode(data: string): BaseRRText;
destroyTree(): void;
open(): void;
}
declare class RRElement extends BaseRRElement {
inputData: inputData | null;
scrollData: scrollData | null;
}
declare interface RRElementTagNameMap {
audio: RRMediaElement;
canvas: RRCanvasElement;
iframe: RRIFrameElement;
style: RRStyleElement;
video: RRMediaElement;
}
declare type RRElementType<K extends keyof HTMLElementTagNameMap> = K extends keyof RRElementTagNameMap ? RRElementTagNameMap[K] : RRElement;
declare class RRIFrameElement extends RRElement {
contentDocument: RRDocument;
constructor(upperTagName: string, mirror: Mirror);
}
declare class RRMediaElement extends BaseRRMediaElement {
}
declare class RRStyleElement extends RRElement {
rules: (styleSheetRuleData | styleDeclarationData)[];
}
declare enum InterpreterStatus {
NotStarted = 0,
Running = 1,
Stopped = 2
}
declare type SingleOrArray<T> = T[] | T;
interface EventObject {
type: string;
}
declare type InitEvent = {
type: 'xstate.init';
};
declare namespace StateMachine {
type Action<TContext extends object, TEvent extends EventObject> = string | AssignActionObject<TContext, TEvent> | ActionObject<TContext, TEvent> | ActionFunction<TContext, TEvent>;
type ActionMap<TContext extends object, TEvent extends EventObject> = Record<string, Exclude<Action<TContext, TEvent>, string>>;
interface ActionObject<TContext extends object, TEvent extends EventObject> {
type: string;
exec?: ActionFunction<TContext, TEvent>;
[key: string]: any;
}
type ActionFunction<TContext extends object, TEvent extends EventObject> = (context: TContext, event: TEvent | InitEvent) => void;
type AssignAction = 'xstate.assign';
interface AssignActionObject<TContext extends object, TEvent extends EventObject> extends ActionObject<TContext, TEvent> {
type: AssignAction;
assignment: Assigner<TContext, TEvent> | PropertyAssigner<TContext, TEvent>;
}
type Transition<TContext extends object, TEvent extends EventObject> = string | {
target?: string;
actions?: SingleOrArray<Action<TContext, TEvent>>;
cond?: (context: TContext, event: TEvent) => boolean;
};
interface State<TContext extends object, TEvent extends EventObject, TState extends Typestate<TContext>> {
value: TState['value'];
context: TContext;
actions: Array<ActionObject<TContext, TEvent>>;
changed?: boolean | undefined;
matches: <TSV extends TState['value']>(value: TSV) => this is TState extends {
value: TSV;
} ? TState : never;
}
interface Config<TContext extends object, TEvent extends EventObject, TState extends Typestate<TContext> = {
value: any;
context: TContext;
}> {
id?: string;
initial: string;
context?: TContext;
states: {
[key in TState['value']]: {
on?: {
[K in TEvent['type']]?: SingleOrArray<Transition<TContext, TEvent extends {
type: K;
} ? TEvent : never>>;
};
exit?: SingleOrArray<Action<TContext, TEvent>>;
entry?: SingleOrArray<Action<TContext, TEvent>>;
};
};
}
interface Machine<TContext extends object, TEvent extends EventObject, TState extends Typestate<TContext>> {
config: StateMachine.Config<TContext, TEvent, TState>;
initialState: State<TContext, TEvent, TState>;
transition: (state: string | State<TContext, TEvent, TState>, event: TEvent['type'] | TEvent) => State<TContext, TEvent, TState>;
}
type StateListener<T extends State<any, any, any>> = (state: T) => void;
interface Service<TContext extends object, TEvent extends EventObject, TState extends Typestate<TContext> = {
value: any;
context: TContext;
}> {
send: (event: TEvent | TEvent['type']) => void;
subscribe: (listener: StateListener<State<TContext, TEvent, TState>>) => {
unsubscribe: () => void;
};
start: (initialState?: TState['value'] | {
context: TContext;
value: TState['value'];
}) => Service<TContext, TEvent, TState>;
stop: () => Service<TContext, TEvent, TState>;
readonly status: InterpreterStatus;
readonly state: State<TContext, TEvent, TState>;
}
type Assigner<TContext extends object, TEvent extends EventObject> = (context: TContext, event: TEvent) => Partial<TContext>;
type PropertyAssigner<TContext extends object, TEvent extends EventObject> = {
[K in keyof TContext]?: ((context: TContext, event: TEvent) => TContext[K]) | TContext[K];
};
}
interface Typestate<TContext extends object> {
value: string;
context: TContext;
}
declare const addCustomEvent: <T>(tag: string, payload: T) => void;
declare type AppendedIframe = {
mutationInQueue: addedNodeMutation;
builtNode: HTMLIFrameElement | RRIFrameElement;
};
declare function callSafely(fn: () => void): void;
declare function canvasMutation({ event, mutation, target, imageMap, canvasEventMap, errorHandler, }: {
event: Parameters<Replayer['applyIncremental']>[0];
mutation: canvasMutationData;
target: HTMLCanvasElement;
imageMap: Replayer['imageMap'];
canvasEventMap: Replayer['canvasEventMap'];
errorHandler: Replayer['warnCanvasMutationFailed'];
}): Promise<void>;
declare function closestElementOfNode(node: Node | null): HTMLElement | null;
declare function createPlayerService(context: PlayerContext, { getCastFn, applyEvents, emitter }: PlayerAssets): StateMachine.Service<PlayerContext, PlayerEvent, PlayerState>;
declare function createSpeedService(context: SpeedContext): StateMachine.Service<SpeedContext, SpeedEvent, SpeedState>;
declare type ErrorHandler = (error: unknown, context?: ErrorHandlerContext) => void | boolean;
declare type ErrorHandlerContext = 'rrweb' | 'host';
declare const freezePage: () => void;
declare function getBaseDimension(node: Node, rootIframe: Node): DocumentDimension;
declare function getNestedRule(rules: CSSRuleList, position: number[]): CSSGroupingRule | null;
declare function getPositionsAndIndex(nestedIndex: number[]): {
positions: number[];
index: number | undefined;
};
declare function getRootShadowHost(n: Node): Node;
declare function getShadowHost(n: Node): Element | null;
declare function getWindowHeight(): number;
declare function getWindowScroll(win: Window): {
left: number;
top: number;
};
declare function getWindowWidth(): number;
declare function hasShadowRoot<T extends Node | BaseRRNode>(n: T): n is T & {
shadowRoot: ShadowRoot;
};
declare function hookSetter<T>(target: T, key: string | number | symbol, d: PropertyDescriptor, isRevoked?: boolean, win?: Window & typeof globalThis): hookResetter;
declare function inDom(n: Node): boolean;
declare function isAncestorRemoved(target: Node, mirror: Mirror$1): boolean;
declare function isBlocked(node: Node | null, blockClass: blockClass, blockSelector: string | null, checkAncestors: boolean): boolean;
declare function isIgnored(n: Node, mirror: Mirror$1, slimDOMOptions: SlimDOMOptions): boolean;
declare function isSerialized(n: Node, mirror: Mirror$1): boolean;
declare function isSerializedIframe<TNode extends Node | BaseRRNode>(n: TNode, mirror: IMirror<TNode>): boolean;
declare function isSerializedStylesheet<TNode extends Node | BaseRRNode>(n: TNode, mirror: IMirror<TNode>): boolean;
declare function iterateResolveTree(tree: ResolveTree, cb: (mutation: addedNodeMutation) => unknown): void;
declare function legacy_isTouchEvent(event: MouseEvent | TouchEvent | PointerEvent): event is TouchEvent;
declare let mirror: DeprecatedMirror;
declare let nowTimestamp: () => number;
declare function on(type: string, fn: EventListenerOrEventListenerObject, target?: Document | IWindow): listenerHandler;
declare type PlayerAssets = {
emitter: Emitter;
applyEvents(events: Array<eventWithTime>, onApplied: () => void): void;
getCastFn(event: eventWithTime, isSync: boolean): () => void;
};
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;
seekYieldBudgetMs?: number;
logger: {
log: (...args: Parameters<typeof console.log>) => void;
warn: (...args: Parameters<typeof console.warn>) => 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: 'RESET_LAST_PLAYED';
} | {
type: 'TO_LIVE';
payload: {
baselineTime?: number;
};
} | {
type: 'ADD_EVENT';
payload: {
event: eventWithTime;
applyPastEventSynchronously?: boolean;
};
} | {
type: 'END';
};
declare type PlayerMachineState = StateMachine.State<PlayerContext, PlayerEvent, PlayerState>;
declare type PlayerState = {
value: 'playing';
context: PlayerContext;
} | {
value: 'paused';
context: PlayerContext;
} | {
value: 'live';
context: PlayerContext;
};
declare function polyfill(win?: Window & typeof globalThis): void;
declare function queueToResolveTrees(queue: addedNodeMutation[]): ResolveTree[];
declare function record<T = eventWithTime>(options?: recordOptions<T>): listenerHandler | undefined;
declare namespace record {
var addCustomEvent: <T>(tag: string, payload: T) => void;
var freezePage: () => void;
var takeFullSnapshot: (isCheckout?: boolean) => void;
var mirror: Mirror$1;
}
declare type recordOptions<T> = {
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;
maskAllElementAttributes?: boolean;
maskAttributeFn?: MaskAttributeFn;
slimDOMOptions?: SlimDOMOptions | 'all' | true;
ignoreCSSAttributes?: Set<string>;
attributeFilter?: string[];
inlineStylesheet?: boolean;
inlineStylesheetBudgetRules?: number;
hooks?: hooksParam;
packFn?: PackFn;
sampling?: SamplingStrategy;
dataURLOptions?: DataURLOptions;
canvasResolutionScale?: number;
canvasMasking?: CanvasMasking;
recordDOM?: boolean;
recordCanvas?: boolean;
recordCrossOriginIframes?: boolean;
recordAfter?: 'DOMContentLoaded' | 'load';
userTriggeredOnInput?: boolean;
collectFonts?: boolean;
inlineImages?: boolean;
plugins?: RecordPlugin[];
mousemoveWait?: number;
keepIframeSrcFn?: KeepIframeSrcFn;
errorHandler?: ErrorHandler;
};
declare function removeEventListenerSafely(target: Pick<EventTarget, 'removeEventListener'>, type: string, fn: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
declare class Replayer {
wrapper: HTMLDivElement;
iframe: HTMLIFrameElement;
service: ReturnType<typeof createPlayerService>;
speedService: ReturnType<typeof createSpeedService>;
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 pendingAdoptedStyleSheets;
private adoptedStyleSheetTokens;
private mediaManager;
private firstFullSnapshot;
private newDocumentQueue;
private mousePos;
private touchActive;
private lastMouseDownEvent;
private lastHoveredRootNode;
private lastSelectionData;
private lastScrollMap;
private constructedStyleMutations;
private adoptedStyleSheets;
private emitterHandlers;
private serviceSubscription?;
private speedServiceSubscription?;
private timeouts;
private applyGeneration;
private seekRebuildInFlight;
private styleSheetLoadListeners;
constructor(events: Array<eventWithTime | string>, config?: Partial<playerConfig>);
on(event: string, handler: Handler): this;
off(event: string, handler: Handler): this;
private addEmitterHandler;
private addTimeout;
setConfig(config: Partial<playerConfig>): void;
getMetaData(): playerMetaData;
getCurrentTime(): number;
getTimeOffset(): number;
getMirror(): Mirror$1;
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 applyFullscreen;
private clearFullscreen;
private shouldCastInSyncMode;
private discardStaleFlushBuffers;
private applyEvents;
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;
private backToNormal;
private warnNodeNotFound;
private warnCanvasMutationFailed;
private debugNodeNotFound;
private warn;
private debug;
}
declare type ReplayPlugin = {
handler?: (event: eventWithTime, isSync: boolean, context: {
replayer: Replayer;
}) => void;
onBuild?: (node: Node | BaseRRNode, context: {
id: number;
replayer: Replayer;
}) => void;
getMirror?: (mirrors: {
nodeMirror: Mirror$1;
}) => void;
};
declare type ResolveTree = {
value: addedNodeMutation;
children: ResolveTree[];
parent: ResolveTree | null;
};
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'];
};
};
declare type SpeedMachineState = StateMachine.State<SpeedContext, SpeedEvent, SpeedState>;
declare type SpeedState = {
value: 'normal';
context: SpeedContext;
} | {
value: 'skipping';
context: SpeedContext;
};
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;
}
declare const takeFullSnapshot: (isCheckout?: boolean) => void;
declare function throttle<T>(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;
}
declare function uniqueTextMutations(mutations: textMutation[]): textMutation[];
declare namespace utils {
export { on, removeEventListenerSafely, callSafely, throttle, hookSetter, 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 as _mirror, nowTimestamp, StyleSheetMirror };
export type { AppendedIframe };
}
export { EventType, IncrementalSource, MouseInteractions, Replayer, ReplayerEvents, addCustomEvent, canvasMutation, freezePage, getDeferredStylesheetStats, getDiscardedDurationSamples, getLastSnapshotCost, getMutationCost, mirror, record, resetMaxDepthState, resetSnapshotCostState, takeFullSnapshot, utils, wasMaxDepthReached };
export type { DeferredStylesheetStats, MutationCost, PlayerMachineState, ReplayPlugin, SnapshotCost, SpeedMachineState, eventWithTime, playerConfig, recordOptions };