@openreplay/tracker 16.4.10-beta.0 → 16.4.11-beta.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 (42) hide show
  1. package/dist/cjs/common/messages.gen.d.ts +57 -7
  2. package/dist/cjs/entry.js +555 -240
  3. package/dist/cjs/entry.js.map +1 -1
  4. package/dist/cjs/index.js +555 -240
  5. package/dist/cjs/index.js.map +1 -1
  6. package/dist/cjs/main/app/guards.d.ts +1 -0
  7. package/dist/cjs/main/app/index.d.ts +5 -5
  8. package/dist/cjs/main/app/messages.gen.d.ts +7 -2
  9. package/dist/cjs/main/app/observer/observer.d.ts +4 -0
  10. package/dist/cjs/main/app/observer/top_observer.d.ts +2 -1
  11. package/dist/cjs/main/index.d.ts +9 -1
  12. package/dist/cjs/main/modules/longAnimationTask.d.ts +25 -0
  13. package/dist/cjs/main/modules/tagWatcher.d.ts +1 -1
  14. package/dist/cjs/main/modules/webAnimations.d.ts +9 -0
  15. package/dist/cjs/main/utils.d.ts +3 -0
  16. package/dist/lib/common/messages.gen.d.ts +57 -7
  17. package/dist/lib/entry.js +555 -240
  18. package/dist/lib/entry.js.map +1 -1
  19. package/dist/lib/index.js +555 -240
  20. package/dist/lib/index.js.map +1 -1
  21. package/dist/lib/main/app/guards.d.ts +1 -0
  22. package/dist/lib/main/app/index.d.ts +5 -5
  23. package/dist/lib/main/app/messages.gen.d.ts +7 -2
  24. package/dist/lib/main/app/observer/observer.d.ts +4 -0
  25. package/dist/lib/main/app/observer/top_observer.d.ts +2 -1
  26. package/dist/lib/main/index.d.ts +9 -1
  27. package/dist/lib/main/modules/longAnimationTask.d.ts +25 -0
  28. package/dist/lib/main/modules/tagWatcher.d.ts +1 -1
  29. package/dist/lib/main/modules/webAnimations.d.ts +9 -0
  30. package/dist/lib/main/utils.d.ts +3 -0
  31. package/dist/types/common/messages.gen.d.ts +57 -7
  32. package/dist/types/main/app/guards.d.ts +1 -0
  33. package/dist/types/main/app/index.d.ts +5 -5
  34. package/dist/types/main/app/messages.gen.d.ts +7 -2
  35. package/dist/types/main/app/observer/observer.d.ts +4 -0
  36. package/dist/types/main/app/observer/top_observer.d.ts +2 -1
  37. package/dist/types/main/index.d.ts +9 -1
  38. package/dist/types/main/modules/longAnimationTask.d.ts +25 -0
  39. package/dist/types/main/modules/tagWatcher.d.ts +1 -1
  40. package/dist/types/main/modules/webAnimations.d.ts +9 -0
  41. package/dist/types/main/utils.d.ts +3 -0
  42. package/package.json +2 -2
@@ -18,6 +18,7 @@ type TagTypeMap = {
18
18
  style: HTMLStyleElement | SVGStyleElement;
19
19
  link: HTMLLinkElement;
20
20
  canvas: HTMLCanvasElement;
21
+ slot: HTMLSlotElement;
21
22
  };
22
23
  export declare function hasTag<T extends keyof TagTypeMap>(el: Node, tagName: T): el is TagTypeMap[typeof tagName];
23
24
  export {};
@@ -252,7 +252,7 @@ export default class App {
252
252
  * user 30 seconds to "activate" and record session by calling `start()` on conditional trigger,
253
253
  * and we will then send buffered batch, so it won't get lost
254
254
  * */
255
- coldStart: (startOpts?: StartOptions, conditional?: boolean) => Promise<void>;
255
+ coldStart(startOpts?: StartOptions, conditional?: boolean): Promise<void>;
256
256
  private setupConditionalStart;
257
257
  onSessionSent: () => void;
258
258
  /**
@@ -260,7 +260,7 @@ export default class App {
260
260
  * @param {Object} startOpts - options for session start, same as .start()
261
261
  * @param {Function} onSessionSent - callback that will be called once session is fully sent
262
262
  * */
263
- offlineRecording: (startOpts: StartOptions | undefined, onSessionSent: () => void) => {
263
+ offlineRecording(startOpts: StartOptions | undefined, onSessionSent: () => void): {
264
264
  saveBuffer: () => void;
265
265
  getBuffer: () => Message[];
266
266
  setBuffer: (buffer: Message[]) => void;
@@ -272,15 +272,15 @@ export default class App {
272
272
  *
273
273
  * Keeping the size of local storage reasonable is up to the end users of this library
274
274
  * */
275
- saveBuffer: () => void;
275
+ saveBuffer(): void;
276
276
  /**
277
277
  * @returns buffer with stored messages for offline recording
278
278
  * */
279
- getBuffer: () => Message[];
279
+ getBuffer(): Message[];
280
280
  /**
281
281
  * Used to set a buffer with messages array
282
282
  * */
283
- setBuffer: (buffer: Message[]) => void;
283
+ setBuffer(buffer: Message[]): void;
284
284
  /**
285
285
  * Uploads the stored session buffer to backend
286
286
  * @returns promise that resolves once messages are loaded, it has to be awaited
@@ -27,6 +27,7 @@ export declare function UserAnonymousID(id: string): Messages.UserAnonymousID;
27
27
  export declare function Metadata(key: string, value: string): Messages.Metadata;
28
28
  export declare function StringDictGlobal(key: number, value: string): Messages.StringDictGlobal;
29
29
  export declare function SetNodeAttributeDictGlobal(id: number, name: number, value: number): Messages.SetNodeAttributeDictGlobal;
30
+ export declare function NodeAnimationResult(id: number, styles: string): Messages.NodeAnimationResult;
30
31
  export declare function CSSInsertRule(id: number, rule: string, index: number): Messages.CSSInsertRule;
31
32
  export declare function CSSDeleteRule(id: number, index: number): Messages.CSSDeleteRule;
32
33
  export declare function Fetch(method: string, url: string, request: string, response: string, status: number, timestamp: number, duration: number): Messages.Fetch;
@@ -43,7 +44,7 @@ export declare function StringDictDeprecated(key: number, value: string): Messag
43
44
  export declare function SetNodeAttributeDictDeprecated(id: number, nameKey: number, valueKey: number): Messages.SetNodeAttributeDictDeprecated;
44
45
  export declare function StringDict(key: string, value: string): Messages.StringDict;
45
46
  export declare function SetNodeAttributeDict(id: number, name: string, value: string): Messages.SetNodeAttributeDict;
46
- export declare function ResourceTimingDeprecated(timestamp: number, duration: number, ttfb: number, headerSize: number, encodedBodySize: number, decodedBodySize: number, url: string, initiator: string): Messages.ResourceTimingDeprecated;
47
+ export declare function ResourceTimingDeprecatedDeprecated(timestamp: number, duration: number, ttfb: number, headerSize: number, encodedBodySize: number, decodedBodySize: number, url: string, initiator: string): Messages.ResourceTimingDeprecatedDeprecated;
47
48
  export declare function ConnectionInformation(downlink: number, type: string): Messages.ConnectionInformation;
48
49
  export declare function SetPageVisibility(hidden: boolean): Messages.SetPageVisibility;
49
50
  export declare function LoadFontFace(parentID: number, family: string, source: string, descriptors: string): Messages.LoadFontFace;
@@ -53,6 +54,7 @@ export declare function SetNodeAttributeURLBased(id: number, name: string, value
53
54
  export declare function SetCSSDataURLBased(id: number, data: string, baseURL: string): Messages.SetCSSDataURLBased;
54
55
  export declare function TechnicalInfo(type: string, value: string): Messages.TechnicalInfo;
55
56
  export declare function CustomIssue(name: string, payload: string): Messages.CustomIssue;
57
+ export declare function SetNodeSlot(id: number, slotID: number): Messages.SetNodeSlot;
56
58
  export declare function CSSInsertRuleURLBased(id: number, rule: string, index: number, baseURL: string): Messages.CSSInsertRuleURLBased;
57
59
  export declare function MouseClick(id: number, hesitationTime: number, label: string, selector: string, normalizedX: number, normalizedY: number): Messages.MouseClick;
58
60
  export declare function MouseClickDeprecated(id: number, hesitationTime: number, label: string, selector: string): Messages.MouseClickDeprecated;
@@ -68,11 +70,14 @@ export declare function BatchMetadata(version: number, pageNo: number, firstInde
68
70
  export declare function PartitionedMessage(partNo: number, partTotal: number): Messages.PartitionedMessage;
69
71
  export declare function NetworkRequest(type: string, method: string, url: string, request: string, response: string, status: number, timestamp: number, duration: number, transferredBodySize: number): Messages.NetworkRequest;
70
72
  export declare function WSChannel(chType: string, channelName: string, data: string, timestamp: number, dir: string, messageType: string): Messages.WSChannel;
73
+ export declare function ResourceTiming(timestamp: number, duration: number, ttfb: number, headerSize: number, encodedBodySize: number, decodedBodySize: number, url: string, initiator: string, transferredSize: number, cached: boolean, queueing: number, dnsLookup: number, initialConnection: number, ssl: number, contentDownload: number, total: number, stalled: number): Messages.ResourceTiming;
74
+ export declare function Incident(label: string, startTime: number, endTime: number): Messages.Incident;
75
+ export declare function LongAnimationTask(name: string, duration: number, blockingDuration: number, firstUIEventTimestamp: number, startTime: number, scripts: string): Messages.LongAnimationTask;
71
76
  export declare function InputChange(id: number, value: string, valueMasked: boolean, label: string, hesitationTime: number, inputDuration: number): Messages.InputChange;
72
77
  export declare function SelectionChange(selectionStart: number, selectionEnd: number, selection: string): Messages.SelectionChange;
73
78
  export declare function MouseThrashing(timestamp: number): Messages.MouseThrashing;
74
79
  export declare function UnbindNodes(totalRemovedPercent: number): Messages.UnbindNodes;
75
- export declare function ResourceTiming(timestamp: number, duration: number, ttfb: number, headerSize: number, encodedBodySize: number, decodedBodySize: number, url: string, initiator: string, transferredSize: number, cached: boolean): Messages.ResourceTiming;
80
+ export declare function ResourceTimingDeprecated(timestamp: number, duration: number, ttfb: number, headerSize: number, encodedBodySize: number, decodedBodySize: number, url: string, initiator: string, transferredSize: number, cached: boolean): Messages.ResourceTimingDeprecated;
76
81
  export declare function TabChange(tabId: string): Messages.TabChange;
77
82
  export declare function TabData(tabId: string): Messages.TabData;
78
83
  export declare function CanvasNode(nodeId: string, timestamp: number): Messages.CanvasNode;
@@ -2,6 +2,7 @@ import App from '../index.js';
2
2
  export declare function parseUseEl(useElement: SVGUseElement, mode: 'inline' | 'dataurl' | 'svgtext', domParser: DOMParser): Promise<any>;
3
3
  interface Options {
4
4
  disableSprites?: boolean;
5
+ disableThrottling?: boolean;
5
6
  inlineRemoteCss?: boolean;
6
7
  inlinerOptions?: {
7
8
  forceFetch?: boolean;
@@ -17,6 +18,7 @@ export default abstract class Observer {
17
18
  private readonly indexes;
18
19
  private readonly attributesMap;
19
20
  private readonly textSet;
21
+ private readonly slotMap;
20
22
  private readonly disableSprites;
21
23
  /**
22
24
  * this option means that, instead of using link element with href to load css,
@@ -35,6 +37,8 @@ export default abstract class Observer {
35
37
  */
36
38
  private handleIframeSrcChange;
37
39
  private sendNodeAttribute;
40
+ throttling: boolean;
41
+ private throttledSetNodeData;
38
42
  private sendNodeData;
39
43
  private bindNode;
40
44
  private bindTree;
@@ -6,7 +6,7 @@ export declare enum InlineCssMode {
6
6
  Disabled = 0,
7
7
  /** will attempt to record the linked css file as AdoptedStyleSheet object */
8
8
  Inline = 1,
9
- /** will fetch the file, then simulated AdoptedStyleSheets behavior programmaticaly for the replay */
9
+ /** will fetch the file, then simulate AdoptedStyleSheets behavior programmaticaly for the replay */
10
10
  InlineFetched = 2,
11
11
  /** will fetch the file, then save it as plain css inside <style> node */
12
12
  PlainFetched = 3
@@ -22,6 +22,7 @@ export interface Options {
22
22
  * @default InlineCssMode.None = 0
23
23
  * */
24
24
  inlineCss: InlineCssMode;
25
+ disableThrottling?: boolean;
25
26
  }
26
27
  type Context = Window & typeof globalThis;
27
28
  type ContextCallback = (context: Context) => void;
@@ -14,10 +14,12 @@ import type { Options as NetworkOptions } from './modules/network.js';
14
14
  import type { MouseHandlerOptions } from './modules/mouse.js';
15
15
  import type { SessionInfo } from './app/session.js';
16
16
  import type { CssRulesOptions } from './modules/cssrules.js';
17
+ import type { LATOptions } from './modules/longAnimationTask.js';
18
+ import type { Options as WapOptions } from './modules/webAnimations.js';
17
19
  import type { Options as ViewportOptions } from './modules/viewport.js';
18
20
  import type { StartOptions } from './app/index.js';
19
21
  import type { StartPromiseReturn } from './app/index.js';
20
- export type Options = Partial<AppOptions & ConsoleOptions & ExceptionOptions & InputOptions & PerformanceOptions & TimingOptions> & {
22
+ export type Options = Partial<AppOptions & ConsoleOptions & ExceptionOptions & InputOptions & PerformanceOptions & TimingOptions & LATOptions> & {
21
23
  projectID?: number;
22
24
  projectKey: string;
23
25
  sessionToken?: string;
@@ -31,6 +33,7 @@ export type Options = Partial<AppOptions & ConsoleOptions & ExceptionOptions & I
31
33
  };
32
34
  __DISABLE_SECURE_MODE?: boolean;
33
35
  css: CssRulesOptions;
36
+ webAnimations?: WapOptions;
34
37
  urls?: Partial<ViewportOptions>;
35
38
  };
36
39
  export default class API {
@@ -112,4 +115,9 @@ export default class API {
112
115
  event(key: string, payload?: any, issue?: boolean): void;
113
116
  issue(key: string, payload?: any): void;
114
117
  handleError: (e: Error | ErrorEvent | PromiseRejectionEvent, metadata?: Record<string, any>) => void;
118
+ incident: (options: {
119
+ label?: string;
120
+ startTime: number;
121
+ endTime?: number;
122
+ }) => void;
115
123
  }
@@ -0,0 +1,25 @@
1
+ import type App from '../app/index.js';
2
+ export interface LongAnimationTask extends PerformanceEntry {
3
+ name: string;
4
+ duration: number;
5
+ blockingDuration: number;
6
+ firstUIEventTimestamp: number;
7
+ startTime: number;
8
+ scripts: [
9
+ {
10
+ name: string;
11
+ duration: number;
12
+ invoker: string;
13
+ invokerType: string;
14
+ pauseDuration: number;
15
+ sourceURL: string;
16
+ sourceFunctionName: string;
17
+ sourceCharPosition: number;
18
+ forcedStyleAndLayoutDuration: number;
19
+ }
20
+ ];
21
+ }
22
+ export interface LATOptions {
23
+ longTasks: boolean;
24
+ }
25
+ export default function (app: App, opts: Partial<LATOptions>): void;
@@ -1,6 +1,6 @@
1
1
  export declare const WATCHED_TAGS_KEY = "__or__watched_tags__";
2
2
  declare class TagWatcher {
3
- intervals: Record<string, ReturnType<typeof setInterval>>;
3
+ interval: ReturnType<typeof setInterval> | null;
4
4
  tags: {
5
5
  id: number;
6
6
  selector: string;
@@ -0,0 +1,9 @@
1
+ import type App from '../app/index.js';
2
+ /**
3
+ * this will only work for custom elements by default (because of ionic)
4
+ */
5
+ export interface Options {
6
+ allElements?: boolean;
7
+ }
8
+ declare function webAnimations(app: App, options?: Options): void;
9
+ export default webAnimations;
@@ -28,3 +28,6 @@ export declare function createEventListener(target: EventTarget, event: string,
28
28
  export declare function deleteEventListener(target: EventTarget, event: string, cb: EventListenerOrEventListenerObject, capture?: boolean, forceNgOff?: boolean): void;
29
29
  export declare function requestIdleCb(callback: () => void): void;
30
30
  export declare function simpleMerge<T>(defaultObj: T, givenObj: Partial<T>): T;
31
+ export declare function throttleWithTrailing<K, Args extends any[]>(fn: (key: K, ...args: Args) => void, interval: number): ((key: K, ...args: Args) => void) & {
32
+ clear: () => void;
33
+ };
@@ -26,6 +26,7 @@ export declare const enum Type {
26
26
  Metadata = 30,
27
27
  StringDictGlobal = 34,
28
28
  SetNodeAttributeDictGlobal = 35,
29
+ NodeAnimationResult = 36,
29
30
  CSSInsertRule = 37,
30
31
  CSSDeleteRule = 38,
31
32
  Fetch = 39,
@@ -42,7 +43,7 @@ export declare const enum Type {
42
43
  SetNodeAttributeDictDeprecated = 51,
43
44
  StringDict = 43,
44
45
  SetNodeAttributeDict = 52,
45
- ResourceTimingDeprecated = 53,
46
+ ResourceTimingDeprecatedDeprecated = 53,
46
47
  ConnectionInformation = 54,
47
48
  SetPageVisibility = 55,
48
49
  LoadFontFace = 57,
@@ -52,6 +53,7 @@ export declare const enum Type {
52
53
  SetCSSDataURLBased = 61,
53
54
  TechnicalInfo = 63,
54
55
  CustomIssue = 64,
56
+ SetNodeSlot = 65,
55
57
  CSSInsertRuleURLBased = 67,
56
58
  MouseClick = 68,
57
59
  MouseClickDeprecated = 69,
@@ -67,11 +69,14 @@ export declare const enum Type {
67
69
  PartitionedMessage = 82,
68
70
  NetworkRequest = 83,
69
71
  WSChannel = 84,
72
+ ResourceTiming = 85,
73
+ Incident = 87,
74
+ LongAnimationTask = 89,
70
75
  InputChange = 112,
71
76
  SelectionChange = 113,
72
77
  MouseThrashing = 114,
73
78
  UnbindNodes = 115,
74
- ResourceTiming = 116,
79
+ ResourceTimingDeprecated = 116,
75
80
  TabChange = 117,
76
81
  TabData = 118,
77
82
  CanvasNode = 119,
@@ -234,6 +239,11 @@ export type SetNodeAttributeDictGlobal = [
234
239
  number,
235
240
  number
236
241
  ];
242
+ export type NodeAnimationResult = [
243
+ Type.NodeAnimationResult,
244
+ number,
245
+ string
246
+ ];
237
247
  export type CSSInsertRule = [
238
248
  Type.CSSInsertRule,
239
249
  number,
@@ -330,8 +340,8 @@ export type SetNodeAttributeDict = [
330
340
  string,
331
341
  string
332
342
  ];
333
- export type ResourceTimingDeprecated = [
334
- Type.ResourceTimingDeprecated,
343
+ export type ResourceTimingDeprecatedDeprecated = [
344
+ Type.ResourceTimingDeprecatedDeprecated,
335
345
  number,
336
346
  number,
337
347
  number,
@@ -394,6 +404,11 @@ export type CustomIssue = [
394
404
  string,
395
405
  string
396
406
  ];
407
+ export type SetNodeSlot = [
408
+ Type.SetNodeSlot,
409
+ number,
410
+ number
411
+ ];
397
412
  export type CSSInsertRuleURLBased = [
398
413
  Type.CSSInsertRuleURLBased,
399
414
  number,
@@ -496,6 +511,41 @@ export type WSChannel = [
496
511
  string,
497
512
  string
498
513
  ];
514
+ export type ResourceTiming = [
515
+ Type.ResourceTiming,
516
+ number,
517
+ number,
518
+ number,
519
+ number,
520
+ number,
521
+ number,
522
+ string,
523
+ string,
524
+ number,
525
+ boolean,
526
+ number,
527
+ number,
528
+ number,
529
+ number,
530
+ number,
531
+ number,
532
+ number
533
+ ];
534
+ export type Incident = [
535
+ Type.Incident,
536
+ string,
537
+ number,
538
+ number
539
+ ];
540
+ export type LongAnimationTask = [
541
+ Type.LongAnimationTask,
542
+ string,
543
+ number,
544
+ number,
545
+ number,
546
+ number,
547
+ string
548
+ ];
499
549
  export type InputChange = [
500
550
  Type.InputChange,
501
551
  number,
@@ -519,8 +569,8 @@ export type UnbindNodes = [
519
569
  Type.UnbindNodes,
520
570
  number
521
571
  ];
522
- export type ResourceTiming = [
523
- Type.ResourceTiming,
572
+ export type ResourceTimingDeprecated = [
573
+ Type.ResourceTimingDeprecated,
524
574
  number,
525
575
  number,
526
576
  number,
@@ -576,5 +626,5 @@ export type WebVitals = [
576
626
  string,
577
627
  string
578
628
  ];
579
- type Message = Timestamp | SetPageLocationDeprecated | SetViewportSize | SetViewportScroll | CreateDocument | CreateElementNode | CreateTextNode | MoveNode | RemoveNode | SetNodeAttribute | RemoveNodeAttribute | SetNodeData | SetNodeScroll | SetInputTarget | SetInputValue | SetInputChecked | MouseMove | NetworkRequestDeprecated | ConsoleLog | PageLoadTiming | PageRenderTiming | CustomEvent | UserID | UserAnonymousID | Metadata | StringDictGlobal | SetNodeAttributeDictGlobal | CSSInsertRule | CSSDeleteRule | Fetch | Profiler | OTable | StateAction | ReduxDeprecated | Vuex | MobX | NgRx | GraphQLDeprecated | PerformanceTrack | StringDictDeprecated | SetNodeAttributeDictDeprecated | StringDict | SetNodeAttributeDict | ResourceTimingDeprecated | ConnectionInformation | SetPageVisibility | LoadFontFace | SetNodeFocus | LongTask | SetNodeAttributeURLBased | SetCSSDataURLBased | TechnicalInfo | CustomIssue | CSSInsertRuleURLBased | MouseClick | MouseClickDeprecated | CreateIFrameDocument | AdoptedSSReplaceURLBased | AdoptedSSInsertRuleURLBased | AdoptedSSDeleteRule | AdoptedSSAddOwner | AdoptedSSRemoveOwner | JSException | Zustand | BatchMetadata | PartitionedMessage | NetworkRequest | WSChannel | InputChange | SelectionChange | MouseThrashing | UnbindNodes | ResourceTiming | TabChange | TabData | CanvasNode | TagTrigger | Redux | SetPageLocation | GraphQL | WebVitals;
629
+ type Message = Timestamp | SetPageLocationDeprecated | SetViewportSize | SetViewportScroll | CreateDocument | CreateElementNode | CreateTextNode | MoveNode | RemoveNode | SetNodeAttribute | RemoveNodeAttribute | SetNodeData | SetNodeScroll | SetInputTarget | SetInputValue | SetInputChecked | MouseMove | NetworkRequestDeprecated | ConsoleLog | PageLoadTiming | PageRenderTiming | CustomEvent | UserID | UserAnonymousID | Metadata | StringDictGlobal | SetNodeAttributeDictGlobal | NodeAnimationResult | CSSInsertRule | CSSDeleteRule | Fetch | Profiler | OTable | StateAction | ReduxDeprecated | Vuex | MobX | NgRx | GraphQLDeprecated | PerformanceTrack | StringDictDeprecated | SetNodeAttributeDictDeprecated | StringDict | SetNodeAttributeDict | ResourceTimingDeprecatedDeprecated | ConnectionInformation | SetPageVisibility | LoadFontFace | SetNodeFocus | LongTask | SetNodeAttributeURLBased | SetCSSDataURLBased | TechnicalInfo | CustomIssue | SetNodeSlot | CSSInsertRuleURLBased | MouseClick | MouseClickDeprecated | CreateIFrameDocument | AdoptedSSReplaceURLBased | AdoptedSSInsertRuleURLBased | AdoptedSSDeleteRule | AdoptedSSAddOwner | AdoptedSSRemoveOwner | JSException | Zustand | BatchMetadata | PartitionedMessage | NetworkRequest | WSChannel | ResourceTiming | Incident | LongAnimationTask | InputChange | SelectionChange | MouseThrashing | UnbindNodes | ResourceTimingDeprecated | TabChange | TabData | CanvasNode | TagTrigger | Redux | SetPageLocation | GraphQL | WebVitals;
580
630
  export default Message;
@@ -18,6 +18,7 @@ type TagTypeMap = {
18
18
  style: HTMLStyleElement | SVGStyleElement;
19
19
  link: HTMLLinkElement;
20
20
  canvas: HTMLCanvasElement;
21
+ slot: HTMLSlotElement;
21
22
  };
22
23
  export declare function hasTag<T extends keyof TagTypeMap>(el: Node, tagName: T): el is TagTypeMap[typeof tagName];
23
24
  export {};
@@ -252,7 +252,7 @@ export default class App {
252
252
  * user 30 seconds to "activate" and record session by calling `start()` on conditional trigger,
253
253
  * and we will then send buffered batch, so it won't get lost
254
254
  * */
255
- coldStart: (startOpts?: StartOptions, conditional?: boolean) => Promise<void>;
255
+ coldStart(startOpts?: StartOptions, conditional?: boolean): Promise<void>;
256
256
  private setupConditionalStart;
257
257
  onSessionSent: () => void;
258
258
  /**
@@ -260,7 +260,7 @@ export default class App {
260
260
  * @param {Object} startOpts - options for session start, same as .start()
261
261
  * @param {Function} onSessionSent - callback that will be called once session is fully sent
262
262
  * */
263
- offlineRecording: (startOpts: StartOptions | undefined, onSessionSent: () => void) => {
263
+ offlineRecording(startOpts: StartOptions | undefined, onSessionSent: () => void): {
264
264
  saveBuffer: () => void;
265
265
  getBuffer: () => Message[];
266
266
  setBuffer: (buffer: Message[]) => void;
@@ -272,15 +272,15 @@ export default class App {
272
272
  *
273
273
  * Keeping the size of local storage reasonable is up to the end users of this library
274
274
  * */
275
- saveBuffer: () => void;
275
+ saveBuffer(): void;
276
276
  /**
277
277
  * @returns buffer with stored messages for offline recording
278
278
  * */
279
- getBuffer: () => Message[];
279
+ getBuffer(): Message[];
280
280
  /**
281
281
  * Used to set a buffer with messages array
282
282
  * */
283
- setBuffer: (buffer: Message[]) => void;
283
+ setBuffer(buffer: Message[]): void;
284
284
  /**
285
285
  * Uploads the stored session buffer to backend
286
286
  * @returns promise that resolves once messages are loaded, it has to be awaited
@@ -27,6 +27,7 @@ export declare function UserAnonymousID(id: string): Messages.UserAnonymousID;
27
27
  export declare function Metadata(key: string, value: string): Messages.Metadata;
28
28
  export declare function StringDictGlobal(key: number, value: string): Messages.StringDictGlobal;
29
29
  export declare function SetNodeAttributeDictGlobal(id: number, name: number, value: number): Messages.SetNodeAttributeDictGlobal;
30
+ export declare function NodeAnimationResult(id: number, styles: string): Messages.NodeAnimationResult;
30
31
  export declare function CSSInsertRule(id: number, rule: string, index: number): Messages.CSSInsertRule;
31
32
  export declare function CSSDeleteRule(id: number, index: number): Messages.CSSDeleteRule;
32
33
  export declare function Fetch(method: string, url: string, request: string, response: string, status: number, timestamp: number, duration: number): Messages.Fetch;
@@ -43,7 +44,7 @@ export declare function StringDictDeprecated(key: number, value: string): Messag
43
44
  export declare function SetNodeAttributeDictDeprecated(id: number, nameKey: number, valueKey: number): Messages.SetNodeAttributeDictDeprecated;
44
45
  export declare function StringDict(key: string, value: string): Messages.StringDict;
45
46
  export declare function SetNodeAttributeDict(id: number, name: string, value: string): Messages.SetNodeAttributeDict;
46
- export declare function ResourceTimingDeprecated(timestamp: number, duration: number, ttfb: number, headerSize: number, encodedBodySize: number, decodedBodySize: number, url: string, initiator: string): Messages.ResourceTimingDeprecated;
47
+ export declare function ResourceTimingDeprecatedDeprecated(timestamp: number, duration: number, ttfb: number, headerSize: number, encodedBodySize: number, decodedBodySize: number, url: string, initiator: string): Messages.ResourceTimingDeprecatedDeprecated;
47
48
  export declare function ConnectionInformation(downlink: number, type: string): Messages.ConnectionInformation;
48
49
  export declare function SetPageVisibility(hidden: boolean): Messages.SetPageVisibility;
49
50
  export declare function LoadFontFace(parentID: number, family: string, source: string, descriptors: string): Messages.LoadFontFace;
@@ -53,6 +54,7 @@ export declare function SetNodeAttributeURLBased(id: number, name: string, value
53
54
  export declare function SetCSSDataURLBased(id: number, data: string, baseURL: string): Messages.SetCSSDataURLBased;
54
55
  export declare function TechnicalInfo(type: string, value: string): Messages.TechnicalInfo;
55
56
  export declare function CustomIssue(name: string, payload: string): Messages.CustomIssue;
57
+ export declare function SetNodeSlot(id: number, slotID: number): Messages.SetNodeSlot;
56
58
  export declare function CSSInsertRuleURLBased(id: number, rule: string, index: number, baseURL: string): Messages.CSSInsertRuleURLBased;
57
59
  export declare function MouseClick(id: number, hesitationTime: number, label: string, selector: string, normalizedX: number, normalizedY: number): Messages.MouseClick;
58
60
  export declare function MouseClickDeprecated(id: number, hesitationTime: number, label: string, selector: string): Messages.MouseClickDeprecated;
@@ -68,11 +70,14 @@ export declare function BatchMetadata(version: number, pageNo: number, firstInde
68
70
  export declare function PartitionedMessage(partNo: number, partTotal: number): Messages.PartitionedMessage;
69
71
  export declare function NetworkRequest(type: string, method: string, url: string, request: string, response: string, status: number, timestamp: number, duration: number, transferredBodySize: number): Messages.NetworkRequest;
70
72
  export declare function WSChannel(chType: string, channelName: string, data: string, timestamp: number, dir: string, messageType: string): Messages.WSChannel;
73
+ export declare function ResourceTiming(timestamp: number, duration: number, ttfb: number, headerSize: number, encodedBodySize: number, decodedBodySize: number, url: string, initiator: string, transferredSize: number, cached: boolean, queueing: number, dnsLookup: number, initialConnection: number, ssl: number, contentDownload: number, total: number, stalled: number): Messages.ResourceTiming;
74
+ export declare function Incident(label: string, startTime: number, endTime: number): Messages.Incident;
75
+ export declare function LongAnimationTask(name: string, duration: number, blockingDuration: number, firstUIEventTimestamp: number, startTime: number, scripts: string): Messages.LongAnimationTask;
71
76
  export declare function InputChange(id: number, value: string, valueMasked: boolean, label: string, hesitationTime: number, inputDuration: number): Messages.InputChange;
72
77
  export declare function SelectionChange(selectionStart: number, selectionEnd: number, selection: string): Messages.SelectionChange;
73
78
  export declare function MouseThrashing(timestamp: number): Messages.MouseThrashing;
74
79
  export declare function UnbindNodes(totalRemovedPercent: number): Messages.UnbindNodes;
75
- export declare function ResourceTiming(timestamp: number, duration: number, ttfb: number, headerSize: number, encodedBodySize: number, decodedBodySize: number, url: string, initiator: string, transferredSize: number, cached: boolean): Messages.ResourceTiming;
80
+ export declare function ResourceTimingDeprecated(timestamp: number, duration: number, ttfb: number, headerSize: number, encodedBodySize: number, decodedBodySize: number, url: string, initiator: string, transferredSize: number, cached: boolean): Messages.ResourceTimingDeprecated;
76
81
  export declare function TabChange(tabId: string): Messages.TabChange;
77
82
  export declare function TabData(tabId: string): Messages.TabData;
78
83
  export declare function CanvasNode(nodeId: string, timestamp: number): Messages.CanvasNode;
@@ -2,6 +2,7 @@ import App from '../index.js';
2
2
  export declare function parseUseEl(useElement: SVGUseElement, mode: 'inline' | 'dataurl' | 'svgtext', domParser: DOMParser): Promise<any>;
3
3
  interface Options {
4
4
  disableSprites?: boolean;
5
+ disableThrottling?: boolean;
5
6
  inlineRemoteCss?: boolean;
6
7
  inlinerOptions?: {
7
8
  forceFetch?: boolean;
@@ -17,6 +18,7 @@ export default abstract class Observer {
17
18
  private readonly indexes;
18
19
  private readonly attributesMap;
19
20
  private readonly textSet;
21
+ private readonly slotMap;
20
22
  private readonly disableSprites;
21
23
  /**
22
24
  * this option means that, instead of using link element with href to load css,
@@ -35,6 +37,8 @@ export default abstract class Observer {
35
37
  */
36
38
  private handleIframeSrcChange;
37
39
  private sendNodeAttribute;
40
+ throttling: boolean;
41
+ private throttledSetNodeData;
38
42
  private sendNodeData;
39
43
  private bindNode;
40
44
  private bindTree;
@@ -6,7 +6,7 @@ export declare enum InlineCssMode {
6
6
  Disabled = 0,
7
7
  /** will attempt to record the linked css file as AdoptedStyleSheet object */
8
8
  Inline = 1,
9
- /** will fetch the file, then simulated AdoptedStyleSheets behavior programmaticaly for the replay */
9
+ /** will fetch the file, then simulate AdoptedStyleSheets behavior programmaticaly for the replay */
10
10
  InlineFetched = 2,
11
11
  /** will fetch the file, then save it as plain css inside <style> node */
12
12
  PlainFetched = 3
@@ -22,6 +22,7 @@ export interface Options {
22
22
  * @default InlineCssMode.None = 0
23
23
  * */
24
24
  inlineCss: InlineCssMode;
25
+ disableThrottling?: boolean;
25
26
  }
26
27
  type Context = Window & typeof globalThis;
27
28
  type ContextCallback = (context: Context) => void;
@@ -14,10 +14,12 @@ import type { Options as NetworkOptions } from './modules/network.js';
14
14
  import type { MouseHandlerOptions } from './modules/mouse.js';
15
15
  import type { SessionInfo } from './app/session.js';
16
16
  import type { CssRulesOptions } from './modules/cssrules.js';
17
+ import type { LATOptions } from './modules/longAnimationTask.js';
18
+ import type { Options as WapOptions } from './modules/webAnimations.js';
17
19
  import type { Options as ViewportOptions } from './modules/viewport.js';
18
20
  import type { StartOptions } from './app/index.js';
19
21
  import type { StartPromiseReturn } from './app/index.js';
20
- export type Options = Partial<AppOptions & ConsoleOptions & ExceptionOptions & InputOptions & PerformanceOptions & TimingOptions> & {
22
+ export type Options = Partial<AppOptions & ConsoleOptions & ExceptionOptions & InputOptions & PerformanceOptions & TimingOptions & LATOptions> & {
21
23
  projectID?: number;
22
24
  projectKey: string;
23
25
  sessionToken?: string;
@@ -31,6 +33,7 @@ export type Options = Partial<AppOptions & ConsoleOptions & ExceptionOptions & I
31
33
  };
32
34
  __DISABLE_SECURE_MODE?: boolean;
33
35
  css: CssRulesOptions;
36
+ webAnimations?: WapOptions;
34
37
  urls?: Partial<ViewportOptions>;
35
38
  };
36
39
  export default class API {
@@ -112,4 +115,9 @@ export default class API {
112
115
  event(key: string, payload?: any, issue?: boolean): void;
113
116
  issue(key: string, payload?: any): void;
114
117
  handleError: (e: Error | ErrorEvent | PromiseRejectionEvent, metadata?: Record<string, any>) => void;
118
+ incident: (options: {
119
+ label?: string;
120
+ startTime: number;
121
+ endTime?: number;
122
+ }) => void;
115
123
  }
@@ -0,0 +1,25 @@
1
+ import type App from '../app/index.js';
2
+ export interface LongAnimationTask extends PerformanceEntry {
3
+ name: string;
4
+ duration: number;
5
+ blockingDuration: number;
6
+ firstUIEventTimestamp: number;
7
+ startTime: number;
8
+ scripts: [
9
+ {
10
+ name: string;
11
+ duration: number;
12
+ invoker: string;
13
+ invokerType: string;
14
+ pauseDuration: number;
15
+ sourceURL: string;
16
+ sourceFunctionName: string;
17
+ sourceCharPosition: number;
18
+ forcedStyleAndLayoutDuration: number;
19
+ }
20
+ ];
21
+ }
22
+ export interface LATOptions {
23
+ longTasks: boolean;
24
+ }
25
+ export default function (app: App, opts: Partial<LATOptions>): void;
@@ -1,6 +1,6 @@
1
1
  export declare const WATCHED_TAGS_KEY = "__or__watched_tags__";
2
2
  declare class TagWatcher {
3
- intervals: Record<string, ReturnType<typeof setInterval>>;
3
+ interval: ReturnType<typeof setInterval> | null;
4
4
  tags: {
5
5
  id: number;
6
6
  selector: string;
@@ -0,0 +1,9 @@
1
+ import type App from '../app/index.js';
2
+ /**
3
+ * this will only work for custom elements by default (because of ionic)
4
+ */
5
+ export interface Options {
6
+ allElements?: boolean;
7
+ }
8
+ declare function webAnimations(app: App, options?: Options): void;
9
+ export default webAnimations;
@@ -28,3 +28,6 @@ export declare function createEventListener(target: EventTarget, event: string,
28
28
  export declare function deleteEventListener(target: EventTarget, event: string, cb: EventListenerOrEventListenerObject, capture?: boolean, forceNgOff?: boolean): void;
29
29
  export declare function requestIdleCb(callback: () => void): void;
30
30
  export declare function simpleMerge<T>(defaultObj: T, givenObj: Partial<T>): T;
31
+ export declare function throttleWithTrailing<K, Args extends any[]>(fn: (key: K, ...args: Args) => void, interval: number): ((key: K, ...args: Args) => void) & {
32
+ clear: () => void;
33
+ };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@openreplay/tracker",
3
3
  "description": "The OpenReplay tracker main package",
4
- "version": "16.4.10-beta.0",
4
+ "version": "16.4.11-beta.0",
5
5
  "keywords": [
6
6
  "logging",
7
7
  "replay"
@@ -47,7 +47,7 @@
47
47
  "test": "jest --coverage=false",
48
48
  "test:ci": "jest --coverage=true",
49
49
  "postversion": "bun run build",
50
- "prepublishOnly": "bun run test && bun run build"
50
+ "prepublishOnly123": "bun run test && bun run build"
51
51
  },
52
52
  "devDependencies": {
53
53
  "@babel/core": "^7.26.10",