@coralogix/browser 3.4.0 → 3.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/README.md +24 -21
  3. package/index.esm.js +1 -1
  4. package/index.esm2.js +128 -56
  5. package/package.json +1 -3
  6. package/sessionRecorder.esm.js +5535 -1314
  7. package/src/constants.d.ts +1 -2
  8. package/src/cx-rrweb/rrweb/index.d.ts +4 -0
  9. package/src/cx-rrweb/rrweb/record/cross-origin-iframe-mirror.d.ts +14 -0
  10. package/src/cx-rrweb/rrweb/record/error-handler.d.ts +6 -0
  11. package/src/cx-rrweb/rrweb/record/iframe-manager.d.ts +34 -0
  12. package/src/cx-rrweb/rrweb/record/index.d.ts +10 -0
  13. package/src/cx-rrweb/rrweb/record/mutation.d.ts +50 -0
  14. package/src/cx-rrweb/rrweb/record/observer.d.ts +9 -0
  15. package/src/cx-rrweb/rrweb/record/observers/canvas/2d.d.ts +2 -0
  16. package/src/cx-rrweb/rrweb/record/observers/canvas/canvas-manager.d.ts +37 -0
  17. package/src/cx-rrweb/rrweb/record/observers/canvas/canvas.d.ts +2 -0
  18. package/src/cx-rrweb/rrweb/record/observers/canvas/serialize-args.d.ts +6 -0
  19. package/src/cx-rrweb/rrweb/record/observers/canvas/webgl.d.ts +2 -0
  20. package/src/cx-rrweb/rrweb/record/processed-node-manager.d.ts +8 -0
  21. package/src/cx-rrweb/rrweb/record/shadow-dom-manager.d.ts +26 -0
  22. package/src/cx-rrweb/rrweb/record/stylesheet-manager.d.ts +17 -0
  23. package/src/cx-rrweb/rrweb/record/workers/image-bitmap-data-url-worker.d.ts +6 -0
  24. package/src/cx-rrweb/rrweb/types.d.ts +102 -0
  25. package/src/cx-rrweb/rrweb/utils/base64.d.ts +1 -0
  26. package/src/cx-rrweb/rrweb/utils.d.ts +66 -0
  27. package/src/cx-rrweb/rrweb-plugin-console-record/error-stack-parser.d.ts +37 -0
  28. package/src/cx-rrweb/rrweb-plugin-console-record/index.d.ts +42 -0
  29. package/src/cx-rrweb/rrweb-plugin-console-record/stringify.d.ts +2 -0
  30. package/src/cx-rrweb/rrweb-snapshot/index.d.ts +4 -0
  31. package/src/cx-rrweb/rrweb-snapshot/snapshot.d.ts +76 -0
  32. package/src/cx-rrweb/rrweb-snapshot/types.d.ts +50 -0
  33. package/src/cx-rrweb/rrweb-snapshot/utils.d.ts +51 -0
  34. package/src/cx-rrweb/rrweb-types/index.d.ts +558 -0
  35. package/src/cx-rrweb/rrweb-utils/index.d.ts +43 -0
  36. package/src/instrumentations/CoralogixErrorInstrumentation.d.ts +1 -0
  37. package/src/processors/CoralogixNavigationProcessor.d.ts +1 -0
  38. package/src/session/session-idle.d.ts +2 -0
  39. package/src/session/session.model.d.ts +3 -3
  40. package/src/session/sessionRecorder.d.ts +0 -3
  41. package/src/tools/cx-timers.d.ts +25 -0
  42. package/src/tools/global-keys.d.ts +2 -0
  43. package/src/types.d.ts +2 -1
  44. package/src/version.d.ts +1 -1
  45. package/src/tools/getZoneJsOriginalDom.d.ts +0 -1
  46. package/src/utils/zone-patch.d.ts +0 -10
@@ -7,8 +7,7 @@ export declare const MAX_INTERACTION_ELEMENT_SIZE = 1024;
7
7
  export declare const MAX_CHARACTERS = 1024;
8
8
  export declare const SCHEDULE_DELAY_MILLIS: number;
9
9
  export declare const REQUIRED_CONFIG_KEYS: Array<keyof CoralogixBrowserSdkConfig>;
10
- export declare const SDK_CONFIG_KEY = "sdkConfig";
11
- export declare const USER_AGENT_KEY = "userAgent";
10
+ export { SDK_CONFIG_KEY, USER_AGENT_KEY } from './tools/global-keys';
12
11
  export declare const ID_MASK_KEY = "{id}";
13
12
  export declare const UUID_REGEX: RegExp;
14
13
  export declare const NANOID_REGEX: RegExp;
@@ -0,0 +1,4 @@
1
+ import record from './record';
2
+ export type { recordOptions } from './types';
3
+ export { record };
4
+ export declare const addCustomEvent: <T>(tag: string, payload: T) => void, freezePage: () => void, takeFullSnapshot: (isCheckout?: boolean) => void;
@@ -0,0 +1,14 @@
1
+ import type { ICrossOriginIframeMirror } from '../../rrweb-types';
2
+ export default class CrossOriginIframeMirror implements ICrossOriginIframeMirror {
3
+ private generateIdFn;
4
+ private iframeIdToRemoteIdMap;
5
+ private iframeRemoteIdToIdMap;
6
+ constructor(generateIdFn: () => number);
7
+ getId(iframe: HTMLIFrameElement, remoteId: number, idToRemoteMap?: Map<number, number>, remoteToIdMap?: Map<number, number>): number;
8
+ getIds(iframe: HTMLIFrameElement, remoteId: number[]): number[];
9
+ getRemoteId(iframe: HTMLIFrameElement, id: number, map?: Map<number, number>): number;
10
+ getRemoteIds(iframe: HTMLIFrameElement, ids: number[]): number[];
11
+ reset(iframe?: HTMLIFrameElement): void;
12
+ private getIdToRemoteIdMap;
13
+ private getRemoteIdToIdMap;
14
+ }
@@ -0,0 +1,6 @@
1
+ import type { ErrorHandler } from '../types';
2
+ type Callback = (...args: any[]) => any;
3
+ export declare function registerErrorHandler(handler: ErrorHandler | undefined): void;
4
+ export declare function unregisterErrorHandler(): void;
5
+ export declare const callbackWrapper: <T extends Callback>(cb: T) => T;
6
+ export {};
@@ -0,0 +1,34 @@
1
+ import type { Mirror } from '../../rrweb-snapshot';
2
+ import CrossOriginIframeMirror from './cross-origin-iframe-mirror';
3
+ import type { eventWithoutTime, serializedNodeWithId, mutationCallBack } from '../../rrweb-types';
4
+ import type { StylesheetManager } from './stylesheet-manager';
5
+ export declare class IframeManager {
6
+ private iframes;
7
+ private crossOriginIframeMap;
8
+ crossOriginIframeMirror: CrossOriginIframeMirror;
9
+ crossOriginIframeStyleMirror: CrossOriginIframeMirror;
10
+ crossOriginIframeRootIdMap: WeakMap<HTMLIFrameElement, number>;
11
+ private mirror;
12
+ private mutationCb;
13
+ private wrappedEmit;
14
+ private loadListener?;
15
+ private stylesheetManager;
16
+ private recordCrossOriginIframes;
17
+ constructor(options: {
18
+ mirror: Mirror;
19
+ mutationCb: mutationCallBack;
20
+ stylesheetManager: StylesheetManager;
21
+ recordCrossOriginIframes: boolean;
22
+ wrappedEmit: (e: eventWithoutTime, isCheckout?: boolean) => void;
23
+ });
24
+ addIframe(iframeEl: HTMLIFrameElement): void;
25
+ addLoadListener(cb: (iframeEl: HTMLIFrameElement) => unknown): void;
26
+ attachIframe(iframeEl: HTMLIFrameElement, childSn: serializedNodeWithId): void;
27
+ private handleMessage;
28
+ private transformCrossOriginEvent;
29
+ private replace;
30
+ private replaceIds;
31
+ private replaceStyleIds;
32
+ private replaceIdOnNode;
33
+ private patchRootIdOnNode;
34
+ }
@@ -0,0 +1,10 @@
1
+ import type { recordOptions } from '../types';
2
+ import { type eventWithTime, type listenerHandler } from '../../rrweb-types';
3
+ declare function record<T = eventWithTime>(options?: recordOptions<T>): listenerHandler | undefined;
4
+ declare namespace record {
5
+ var addCustomEvent: <T>(tag: string, payload: T) => void;
6
+ var freezePage: () => void;
7
+ var takeFullSnapshot: (isCheckout?: boolean) => void;
8
+ var mirror: import("../../rrweb-snapshot").Mirror;
9
+ }
10
+ export default record;
@@ -0,0 +1,50 @@
1
+ import type { MutationBufferParam } from '../types';
2
+ import type { mutationRecord } from '../../rrweb-types';
3
+ export default class MutationBuffer {
4
+ private frozen;
5
+ private locked;
6
+ private texts;
7
+ private attributes;
8
+ private attributeMap;
9
+ private removes;
10
+ private mapRemoves;
11
+ private movedMap;
12
+ private addedSet;
13
+ private movedSet;
14
+ private droppedSet;
15
+ private removesSubTreeCache;
16
+ private mutationCb;
17
+ private blockClass;
18
+ private blockSelector;
19
+ private maskTextClass;
20
+ private maskTextSelector;
21
+ private inlineStylesheet;
22
+ private maskInputOptions;
23
+ private maskTextFn;
24
+ private maskInputFn;
25
+ private keepIframeSrcFn;
26
+ private recordCanvas;
27
+ private inlineImages;
28
+ private slimDOMOptions;
29
+ private dataURLOptions;
30
+ private doc;
31
+ private mirror;
32
+ private iframeManager;
33
+ private stylesheetManager;
34
+ private shadowDomManager;
35
+ private canvasManager;
36
+ private processedNodeManager;
37
+ private unattachedDoc;
38
+ init(options: MutationBufferParam): void;
39
+ freeze(): void;
40
+ unfreeze(): void;
41
+ isFrozen(): boolean;
42
+ lock(): void;
43
+ unlock(): void;
44
+ reset(): void;
45
+ processMutations: (mutations: mutationRecord[]) => void;
46
+ emit: () => void;
47
+ private genTextAreaValueMutation;
48
+ private processMutation;
49
+ private genAdds;
50
+ }
@@ -0,0 +1,9 @@
1
+ import type { MutationBufferParam, observerParam } from '../types';
2
+ import type { hooksParam, listenerHandler } from '../../rrweb-types';
3
+ import MutationBuffer from './mutation';
4
+ export declare const mutationBuffers: MutationBuffer[];
5
+ export declare function initMutationObserver(options: MutationBufferParam, rootEl: Node): MutationObserver;
6
+ export declare function initScrollObserver({ scrollCb, doc, mirror, blockClass, blockSelector, sampling, }: Pick<observerParam, 'scrollCb' | 'doc' | 'mirror' | 'blockClass' | 'blockSelector' | 'sampling'>): listenerHandler;
7
+ export declare const INPUT_TAGS: string[];
8
+ export declare function initAdoptedStyleSheetObserver({ mirror, stylesheetManager, }: Pick<observerParam, 'mirror' | 'stylesheetManager'>, host: Document | ShadowRoot): listenerHandler;
9
+ export declare function initObservers(o: observerParam, hooks?: hooksParam): listenerHandler;
@@ -0,0 +1,2 @@
1
+ import { type blockClass, type canvasManagerMutationCallback, type IWindow, type listenerHandler } from '../../../../rrweb-types';
2
+ export default function initCanvas2DMutationObserver(cb: canvasManagerMutationCallback, win: IWindow, blockClass: blockClass, blockSelector: string | null): listenerHandler;
@@ -0,0 +1,37 @@
1
+ import type { Mirror } from '../../../../rrweb-snapshot';
2
+ import type { blockClass, canvasMutationCallback, DataURLOptions, IWindow } from '../../../../rrweb-types';
3
+ export type RafStamps = {
4
+ latestId: number;
5
+ invokeId: number | null;
6
+ };
7
+ export declare class CanvasManager {
8
+ private pendingCanvasMutations;
9
+ private rafStamps;
10
+ private mirror;
11
+ private mutationCb;
12
+ private resetObservers?;
13
+ private frozen;
14
+ private locked;
15
+ reset(): void;
16
+ freeze(): void;
17
+ unfreeze(): void;
18
+ lock(): void;
19
+ unlock(): void;
20
+ constructor(options: {
21
+ recordCanvas: boolean;
22
+ mutationCb: canvasMutationCallback;
23
+ win: IWindow;
24
+ blockClass: blockClass;
25
+ blockSelector: string | null;
26
+ mirror: Mirror;
27
+ sampling?: 'all' | number;
28
+ dataURLOptions: DataURLOptions;
29
+ });
30
+ private processMutation;
31
+ private initCanvasFPSObserver;
32
+ private initCanvasMutationObserver;
33
+ private startPendingCanvasMutationFlusher;
34
+ private startRAFTimestamping;
35
+ flushPendingCanvasMutations(): void;
36
+ flushPendingCanvasMutationFor(canvas: HTMLCanvasElement, id: number): void;
37
+ }
@@ -0,0 +1,2 @@
1
+ import type { blockClass, IWindow, listenerHandler } from '../../../../rrweb-types';
2
+ export default function initCanvasContextObserver(win: IWindow, blockClass: blockClass, blockSelector: string | null, setPreserveDrawingBufferToTrue: boolean): listenerHandler;
@@ -0,0 +1,6 @@
1
+ import type { IWindow, CanvasArg } from '../../../../rrweb-types';
2
+ export declare function variableListFor(ctx: RenderingContext, ctor: string): unknown[];
3
+ export declare const saveWebGLVar: (value: unknown, win: IWindow, ctx: RenderingContext) => number | void;
4
+ export declare function serializeArg(value: unknown, win: IWindow, ctx: RenderingContext): CanvasArg;
5
+ export declare const serializeArgs: (args: Array<unknown>, win: IWindow, ctx: RenderingContext) => CanvasArg[];
6
+ export declare const isInstanceOfWebGLObject: (value: unknown, win: IWindow) => value is WebGLActiveInfo | WebGLBuffer | WebGLFramebuffer | WebGLProgram | WebGLRenderbuffer | WebGLShader | WebGLShaderPrecisionFormat | WebGLTexture | WebGLUniformLocation | WebGLVertexArrayObject;
@@ -0,0 +1,2 @@
1
+ import { type blockClass, type canvasManagerMutationCallback, type IWindow, type listenerHandler } from '../../../../rrweb-types';
2
+ export default function initCanvasWebGLMutationObserver(cb: canvasManagerMutationCallback, win: IWindow, blockClass: blockClass, blockSelector: string | null): listenerHandler;
@@ -0,0 +1,8 @@
1
+ import type MutationBuffer from './mutation';
2
+ export default class ProcessedNodeManager {
3
+ private nodeMap;
4
+ private active;
5
+ inOtherBuffer(node: Node, thisBuffer: MutationBuffer): boolean | undefined;
6
+ add(node: Node, buffer: MutationBuffer): void;
7
+ destroy(): void;
8
+ }
@@ -0,0 +1,26 @@
1
+ import type { MutationBufferParam } from '../types';
2
+ import type { mutationCallBack, SamplingStrategy, scrollCallback } from '../../rrweb-types';
3
+ import type { Mirror } from '../../rrweb-snapshot';
4
+ type BypassOptions = Omit<MutationBufferParam, 'doc' | 'mutationCb' | 'mirror' | 'shadowDomManager'> & {
5
+ sampling: SamplingStrategy;
6
+ };
7
+ export declare class ShadowDomManager {
8
+ private shadowDoms;
9
+ private mutationCb;
10
+ private scrollCb;
11
+ private bypassOptions;
12
+ private mirror;
13
+ private restoreHandlers;
14
+ constructor(options: {
15
+ mutationCb: mutationCallBack;
16
+ scrollCb: scrollCallback;
17
+ bypassOptions: BypassOptions;
18
+ mirror: Mirror;
19
+ });
20
+ init(): void;
21
+ addShadowRoot(shadowRoot: ShadowRoot, doc: Document): void;
22
+ observeAttachShadow(iframeElement: HTMLIFrameElement): void;
23
+ private patchAttachShadow;
24
+ reset(): void;
25
+ }
26
+ export {};
@@ -0,0 +1,17 @@
1
+ import type { serializedNodeWithId, adoptedStyleSheetCallback, mutationCallBack } from '../../rrweb-types';
2
+ import { StyleSheetMirror } from '../utils';
3
+ export declare class StylesheetManager {
4
+ private trackedLinkElements;
5
+ private mutationCb;
6
+ private adoptedStyleSheetCb;
7
+ styleMirror: StyleSheetMirror;
8
+ constructor(options: {
9
+ mutationCb: mutationCallBack;
10
+ adoptedStyleSheetCb: adoptedStyleSheetCallback;
11
+ });
12
+ attachLinkElement(linkEl: HTMLLinkElement, childSn: serializedNodeWithId): void;
13
+ trackLinkElement(linkEl: HTMLLinkElement): void;
14
+ adoptStyleSheets(sheets: CSSStyleSheet[] | readonly CSSStyleSheet[], hostId: number): void;
15
+ reset(): void;
16
+ private trackStylesheetInLinkElement;
17
+ }
@@ -0,0 +1,6 @@
1
+ import type { ImageBitmapDataURLWorkerParams, ImageBitmapDataURLWorkerResponse } from '../../../rrweb-types';
2
+ export interface ImageBitmapDataURLRequestWorker {
3
+ postMessage: (message: ImageBitmapDataURLWorkerParams, transfer?: [ImageBitmap]) => void;
4
+ onmessage: ((message: MessageEvent<ImageBitmapDataURLWorkerResponse>) => void) | null;
5
+ }
6
+ export declare function createImageBitmapWorker(): ImageBitmapDataURLRequestWorker;
@@ -0,0 +1,102 @@
1
+ import type { Mirror, MaskInputOptions, SlimDOMOptions, MaskInputFn, MaskTextFn } from '../rrweb-snapshot';
2
+ import type { IframeManager } from './record/iframe-manager';
3
+ import type { ShadowDomManager } from './record/shadow-dom-manager';
4
+ import type { CanvasManager } from './record/observers/canvas/canvas-manager';
5
+ import type { StylesheetManager } from './record/stylesheet-manager';
6
+ import type { DataURLOptions, blockClass, canvasMutationCallback, customElementCallback, eventWithTime, fontCallback, hooksParam, inputCallback, IWindow, KeepIframeSrcFn, listenerHandler, maskTextClass, mediaInteractionCallback, mouseInteractionCallBack, mousemoveCallBack, mutationCallBack, RecordPlugin, SamplingStrategy, scrollCallback, selectionCallback, styleDeclarationCallback, styleSheetRuleCallback, viewportResizeCallback, PackFn } from '../rrweb-types';
7
+ import type ProcessedNodeManager from './record/processed-node-manager';
8
+ export type recordOptions<T> = {
9
+ emit?: (e: T, isCheckout?: boolean) => void;
10
+ checkoutEveryNth?: number;
11
+ checkoutEveryNms?: number;
12
+ blockClass?: blockClass;
13
+ blockSelector?: string;
14
+ ignoreClass?: string;
15
+ ignoreSelector?: string;
16
+ maskTextClass?: maskTextClass;
17
+ maskTextSelector?: string;
18
+ maskAllInputs?: boolean;
19
+ maskInputOptions?: MaskInputOptions;
20
+ maskInputFn?: MaskInputFn;
21
+ maskTextFn?: MaskTextFn;
22
+ slimDOMOptions?: SlimDOMOptions | 'all' | true;
23
+ ignoreCSSAttributes?: Set<string>;
24
+ inlineStylesheet?: boolean;
25
+ hooks?: hooksParam;
26
+ packFn?: PackFn;
27
+ sampling?: SamplingStrategy;
28
+ dataURLOptions?: DataURLOptions;
29
+ recordDOM?: boolean;
30
+ recordCanvas?: boolean;
31
+ recordCrossOriginIframes?: boolean;
32
+ recordAfter?: 'DOMContentLoaded' | 'load';
33
+ userTriggeredOnInput?: boolean;
34
+ collectFonts?: boolean;
35
+ inlineImages?: boolean;
36
+ plugins?: RecordPlugin[];
37
+ mousemoveWait?: number;
38
+ keepIframeSrcFn?: KeepIframeSrcFn;
39
+ errorHandler?: ErrorHandler;
40
+ };
41
+ export type observerParam = {
42
+ mutationCb: mutationCallBack;
43
+ mousemoveCb: mousemoveCallBack;
44
+ mouseInteractionCb: mouseInteractionCallBack;
45
+ scrollCb: scrollCallback;
46
+ viewportResizeCb: viewportResizeCallback;
47
+ inputCb: inputCallback;
48
+ mediaInteractionCb: mediaInteractionCallback;
49
+ selectionCb: selectionCallback;
50
+ blockClass: blockClass;
51
+ blockSelector: string | null;
52
+ ignoreClass: string;
53
+ ignoreSelector: string | null;
54
+ maskTextClass: maskTextClass;
55
+ maskTextSelector: string | null;
56
+ maskInputOptions: MaskInputOptions;
57
+ maskInputFn?: MaskInputFn;
58
+ maskTextFn?: MaskTextFn;
59
+ keepIframeSrcFn: KeepIframeSrcFn;
60
+ inlineStylesheet: boolean;
61
+ styleSheetRuleCb: styleSheetRuleCallback;
62
+ styleDeclarationCb: styleDeclarationCallback;
63
+ canvasMutationCb: canvasMutationCallback;
64
+ customElementCb: customElementCallback;
65
+ fontCb: fontCallback;
66
+ sampling: SamplingStrategy;
67
+ recordDOM: boolean;
68
+ recordCanvas: boolean;
69
+ inlineImages: boolean;
70
+ userTriggeredOnInput: boolean;
71
+ collectFonts: boolean;
72
+ slimDOMOptions: SlimDOMOptions;
73
+ dataURLOptions: DataURLOptions;
74
+ doc: Document;
75
+ mirror: Mirror;
76
+ iframeManager: IframeManager;
77
+ stylesheetManager: StylesheetManager;
78
+ shadowDomManager: ShadowDomManager;
79
+ canvasManager: CanvasManager;
80
+ processedNodeManager: ProcessedNodeManager;
81
+ ignoreCSSAttributes: Set<string>;
82
+ plugins: Array<{
83
+ observer: (cb: (...arg: Array<unknown>) => void, win: IWindow, options: unknown) => listenerHandler;
84
+ callback: (...arg: Array<unknown>) => void;
85
+ options: unknown;
86
+ }>;
87
+ };
88
+ export type MutationBufferParam = Pick<observerParam, 'mutationCb' | 'blockClass' | 'blockSelector' | 'maskTextClass' | 'maskTextSelector' | 'inlineStylesheet' | 'maskInputOptions' | 'maskTextFn' | 'maskInputFn' | 'keepIframeSrcFn' | 'recordCanvas' | 'inlineImages' | 'slimDOMOptions' | 'dataURLOptions' | 'doc' | 'mirror' | 'iframeManager' | 'stylesheetManager' | 'shadowDomManager' | 'canvasManager' | 'processedNodeManager'>;
89
+ declare global {
90
+ interface Window {
91
+ FontFace: typeof FontFace;
92
+ Array: typeof Array;
93
+ }
94
+ }
95
+ export type CrossOriginIframeMessageEventContent<T = eventWithTime> = {
96
+ type: 'rrweb';
97
+ event: T;
98
+ origin: string;
99
+ isCheckout?: boolean;
100
+ };
101
+ export type CrossOriginIframeMessageEvent = MessageEvent<CrossOriginIframeMessageEventContent>;
102
+ export type ErrorHandler = (error: unknown) => void | boolean;
@@ -0,0 +1 @@
1
+ export declare function encodeBase64(arraybuffer: ArrayBuffer): string;
@@ -0,0 +1,66 @@
1
+ import type { addedNodeMutation, blockClass, DeprecatedMirror, DocumentDimension, hookResetter, IMirror, IWindow, listenerHandler, textMutation, throttleOptions } from '../rrweb-types';
2
+ import type { Mirror, SlimDOMOptions } from '../rrweb-snapshot';
3
+ interface RRNode {
4
+ nodeName: string;
5
+ nodeType: number;
6
+ ELEMENT_NODE: number;
7
+ shadowRoot?: ShadowRoot | null;
8
+ }
9
+ type RRIFrameElement = HTMLIFrameElement;
10
+ export declare function on(type: string, fn: EventListenerOrEventListenerObject, target?: Document | IWindow): listenerHandler;
11
+ export declare let _mirror: DeprecatedMirror;
12
+ export declare function throttle<T>(func: (arg: T) => void, wait: number, options?: throttleOptions): (this: any, ...args: T[]) => void;
13
+ export declare function hookSetter<T>(target: T, key: string | number | symbol, d: PropertyDescriptor, isRevoked?: boolean, win?: Window & typeof globalThis): hookResetter;
14
+ declare let nowTimestamp: () => number;
15
+ export { nowTimestamp };
16
+ export declare function getWindowScroll(win: Window): {
17
+ left: number;
18
+ top: number;
19
+ };
20
+ export declare function getWindowHeight(): number;
21
+ export declare function getWindowWidth(): number;
22
+ export declare function closestElementOfNode(node: Node | null): HTMLElement | null;
23
+ export declare function isBlocked(node: Node | null, blockClass: blockClass, blockSelector: string | null, checkAncestors: boolean): boolean;
24
+ export declare function isSerialized(n: Node, mirror: Mirror): boolean;
25
+ export declare function isIgnored(n: Node, mirror: Mirror, slimDOMOptions: SlimDOMOptions): boolean;
26
+ export declare function isAncestorRemoved(target: Node, mirror: Mirror): boolean;
27
+ export declare function legacy_isTouchEvent(event: MouseEvent | TouchEvent | PointerEvent): event is TouchEvent;
28
+ export declare function polyfill(win?: Window & typeof globalThis): void;
29
+ type ResolveTree = {
30
+ value: addedNodeMutation;
31
+ children: ResolveTree[];
32
+ parent: ResolveTree | null;
33
+ };
34
+ export declare function queueToResolveTrees(queue: addedNodeMutation[]): ResolveTree[];
35
+ export declare function iterateResolveTree(tree: ResolveTree, cb: (mutation: addedNodeMutation) => unknown): void;
36
+ export type AppendedIframe = {
37
+ mutationInQueue: addedNodeMutation;
38
+ builtNode: HTMLIFrameElement | RRIFrameElement;
39
+ };
40
+ export declare function isSerializedIframe<TNode extends Node | RRNode>(n: TNode, mirror: IMirror<TNode>): boolean;
41
+ export declare function isSerializedStylesheet<TNode extends Node | RRNode>(n: TNode, mirror: IMirror<TNode>): boolean;
42
+ export declare function getBaseDimension(node: Node, rootIframe: Node): DocumentDimension;
43
+ export declare function hasShadowRoot<T extends Node | RRNode>(n: T): n is T & {
44
+ shadowRoot: ShadowRoot;
45
+ };
46
+ export declare function getNestedRule(rules: CSSRuleList, position: number[]): CSSGroupingRule;
47
+ export declare function getPositionsAndIndex(nestedIndex: number[]): {
48
+ positions: number[];
49
+ index: number | undefined;
50
+ };
51
+ export declare function uniqueTextMutations(mutations: textMutation[]): textMutation[];
52
+ export declare class StyleSheetMirror {
53
+ private id;
54
+ private styleIDMap;
55
+ private idStyleMap;
56
+ getId(stylesheet: CSSStyleSheet): number;
57
+ has(stylesheet: CSSStyleSheet): boolean;
58
+ add(stylesheet: CSSStyleSheet, id?: number): number;
59
+ getStyle(id: number): CSSStyleSheet | null;
60
+ reset(): void;
61
+ generateId(): number;
62
+ }
63
+ export declare function getShadowHost(n: Node): Element | null;
64
+ export declare function getRootShadowHost(n: Node): Node;
65
+ export declare function shadowHostInDom(n: Node): boolean;
66
+ export declare function inDom(n: Node): boolean;
@@ -0,0 +1,37 @@
1
+ export declare class StackFrame {
2
+ private fileName;
3
+ private functionName;
4
+ private lineNumber?;
5
+ private columnNumber?;
6
+ constructor(obj: {
7
+ fileName?: string;
8
+ functionName?: string;
9
+ lineNumber?: number;
10
+ columnNumber?: number;
11
+ });
12
+ toString(): string;
13
+ }
14
+ export declare const ErrorStackParser: {
15
+ parse: (error: Error) => StackFrame[];
16
+ extractLocation: (urlLike: string) => (string | undefined)[];
17
+ parseV8OrIE: (error: {
18
+ stack: string;
19
+ }) => StackFrame[];
20
+ parseFFOrSafari: (error: {
21
+ stack: string;
22
+ }) => StackFrame[];
23
+ parseOpera: (e: {
24
+ stacktrace?: string;
25
+ message: string;
26
+ stack?: string;
27
+ }) => StackFrame[];
28
+ parseOpera9: (e: {
29
+ message: string;
30
+ }) => StackFrame[];
31
+ parseOpera10: (e: {
32
+ stacktrace: string;
33
+ }) => StackFrame[];
34
+ parseOpera11: (error: {
35
+ stack: string;
36
+ }) => StackFrame[];
37
+ };
@@ -0,0 +1,42 @@
1
+ import type { RecordPlugin } from '../rrweb-types';
2
+ export type StringifyOptions = {
3
+ stringLengthLimit?: number;
4
+ numOfKeysLimit: number;
5
+ depthOfLimit: number;
6
+ };
7
+ type LogRecordOptions = {
8
+ level?: LogLevel[];
9
+ lengthThreshold?: number;
10
+ stringifyOptions?: StringifyOptions;
11
+ logger?: Logger | 'console';
12
+ };
13
+ export type LogData = {
14
+ level: LogLevel;
15
+ trace: string[];
16
+ payload: string[];
17
+ };
18
+ export type Logger = {
19
+ assert?: typeof console.assert;
20
+ clear?: typeof console.clear;
21
+ count?: typeof console.count;
22
+ countReset?: typeof console.countReset;
23
+ debug?: typeof console.debug;
24
+ dir?: typeof console.dir;
25
+ dirxml?: typeof console.dirxml;
26
+ error?: typeof console.error;
27
+ group?: typeof console.group;
28
+ groupCollapsed?: typeof console.groupCollapsed;
29
+ groupEnd?: () => void;
30
+ info?: typeof console.info;
31
+ log?: typeof console.log;
32
+ table?: typeof console.table;
33
+ time?: typeof console.time;
34
+ timeEnd?: typeof console.timeEnd;
35
+ timeLog?: typeof console.timeLog;
36
+ trace?: typeof console.trace;
37
+ warn?: typeof console.warn;
38
+ };
39
+ export type LogLevel = keyof Logger;
40
+ export declare const PLUGIN_NAME = "rrweb/console@1";
41
+ export declare const getRecordConsolePlugin: (options?: LogRecordOptions) => RecordPlugin;
42
+ export {};
@@ -0,0 +1,2 @@
1
+ import type { StringifyOptions } from './index';
2
+ export declare function stringify(obj: unknown, stringifyOptions?: StringifyOptions): string;
@@ -0,0 +1,4 @@
1
+ import snapshot, { serializeNodeWithId, transformAttribute, ignoreAttribute, slimDOMDefaults, needMaskingText, classMatchesRegex, IGNORED_NODE, genId } from './snapshot';
2
+ export type { ICanvas, MaskInputOptions, SlimDOMOptions, MaskInputFn, MaskTextFn, idNodeMap, nodeMetaMap, DialogAttributes, KeepIframeSrcFn, } from './types';
3
+ export { Mirror, createMirror, isNativeShadowDom, isShadowRoot, stringifyRule, maskInputValue, getInputType, toLowerCase, } from './utils';
4
+ export { snapshot, serializeNodeWithId, transformAttribute, ignoreAttribute, slimDOMDefaults, needMaskingText, classMatchesRegex, IGNORED_NODE, genId, };
@@ -0,0 +1,76 @@
1
+ import type { KeepIframeSrcFn, MaskInputFn, MaskInputOptions, MaskTextFn, SlimDOMOptions } from './types';
2
+ import type { DataURLOptions, serializedElementNodeWithId, serializedNodeWithId } from '../rrweb-types';
3
+ import { Mirror } from './utils';
4
+ export declare const IGNORED_NODE = -2;
5
+ export declare function genId(): number;
6
+ export declare function absoluteToDoc(doc: Document, attributeValue: string): string;
7
+ export declare function transformAttribute(doc: Document, tagName: Lowercase<string>, name: Lowercase<string>, value: string | null): string | null;
8
+ export declare function ignoreAttribute(tagName: string, name: string, _value: unknown): boolean;
9
+ export declare function _isBlockedElement(element: HTMLElement, blockClass: string | RegExp, blockSelector: string | null): boolean;
10
+ export declare function classMatchesRegex(node: Node | null, regex: RegExp, checkAncestors: boolean): boolean;
11
+ export declare function needMaskingText(node: Node, maskTextClass: string | RegExp, maskTextSelector: string | null, checkAncestors: boolean): boolean;
12
+ export declare function slimDOMDefaults(_slimDOMOptions: SlimDOMOptions | 'all' | true | false | undefined): Partial<{
13
+ script: boolean;
14
+ comment: boolean;
15
+ headFavicon: boolean;
16
+ headWhitespace: boolean;
17
+ headMetaDescKeywords: boolean;
18
+ headMetaSocial: boolean;
19
+ headMetaRobots: boolean;
20
+ headMetaHttpEquiv: boolean;
21
+ headMetaAuthorship: boolean;
22
+ headMetaVerification: boolean;
23
+ headTitleMutations: boolean;
24
+ }>;
25
+ export declare function serializeNodeWithId(n: Node, options: {
26
+ doc: Document;
27
+ mirror: Mirror;
28
+ blockClass: string | RegExp;
29
+ blockSelector: string | null;
30
+ maskTextClass: string | RegExp;
31
+ maskTextSelector: string | null;
32
+ skipChild: boolean;
33
+ inlineStylesheet: boolean;
34
+ newlyAddedElement?: boolean;
35
+ maskInputOptions?: MaskInputOptions;
36
+ needsMask?: boolean;
37
+ maskTextFn: MaskTextFn | undefined;
38
+ maskInputFn: MaskInputFn | undefined;
39
+ slimDOMOptions: SlimDOMOptions;
40
+ dataURLOptions?: DataURLOptions;
41
+ keepIframeSrcFn?: KeepIframeSrcFn;
42
+ inlineImages?: boolean;
43
+ recordCanvas?: boolean;
44
+ preserveWhiteSpace?: boolean;
45
+ onSerialize?: (n: Node) => unknown;
46
+ onIframeLoad?: (iframeNode: HTMLIFrameElement, node: serializedElementNodeWithId) => unknown;
47
+ iframeLoadTimeout?: number;
48
+ onStylesheetLoad?: (linkNode: HTMLLinkElement, node: serializedElementNodeWithId) => unknown;
49
+ stylesheetLoadTimeout?: number;
50
+ cssCaptured?: boolean;
51
+ }): serializedNodeWithId | null;
52
+ declare function snapshot(n: Document, options?: {
53
+ mirror?: Mirror;
54
+ blockClass?: string | RegExp;
55
+ blockSelector?: string | null;
56
+ maskTextClass?: string | RegExp;
57
+ maskTextSelector?: string | null;
58
+ inlineStylesheet?: boolean;
59
+ maskAllInputs?: boolean | MaskInputOptions;
60
+ maskTextFn?: MaskTextFn;
61
+ maskInputFn?: MaskInputFn;
62
+ slimDOM?: 'all' | boolean | SlimDOMOptions;
63
+ dataURLOptions?: DataURLOptions;
64
+ inlineImages?: boolean;
65
+ recordCanvas?: boolean;
66
+ preserveWhiteSpace?: boolean;
67
+ onSerialize?: (n: Node) => unknown;
68
+ onIframeLoad?: (iframeNode: HTMLIFrameElement, node: serializedElementNodeWithId) => unknown;
69
+ iframeLoadTimeout?: number;
70
+ onStylesheetLoad?: (linkNode: HTMLLinkElement, node: serializedElementNodeWithId) => unknown;
71
+ stylesheetLoadTimeout?: number;
72
+ keepIframeSrcFn?: KeepIframeSrcFn;
73
+ }): serializedNodeWithId | null;
74
+ export declare function visitSnapshot(node: serializedNodeWithId, onVisit: (node: serializedNodeWithId) => unknown): void;
75
+ export declare function cleanupSnapshot(): void;
76
+ export default snapshot;