@oxvo/browser 7.1.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 (173) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +63 -0
  3. package/dist/cjs/common/interaction.d.ts +37 -0
  4. package/dist/cjs/common/messages.gen.d.ts +587 -0
  5. package/dist/cjs/entry.js +10678 -0
  6. package/dist/cjs/entry.js.map +1 -0
  7. package/dist/cjs/index.js +10435 -0
  8. package/dist/cjs/index.js.map +1 -0
  9. package/dist/cjs/main/app/canvas.d.ts +37 -0
  10. package/dist/cjs/main/app/guards.d.ts +24 -0
  11. package/dist/cjs/main/app/index.d.ts +314 -0
  12. package/dist/cjs/main/app/logger.d.ts +17 -0
  13. package/dist/cjs/main/app/messages.gen.d.ts +83 -0
  14. package/dist/cjs/main/app/nodes/idSeq.d.ts +14 -0
  15. package/dist/cjs/main/app/nodes/index.d.ts +32 -0
  16. package/dist/cjs/main/app/nodes/maintainer.d.ts +28 -0
  17. package/dist/cjs/main/app/observer/cssInliner.d.ts +1 -0
  18. package/dist/cjs/main/app/observer/iframe_observer.d.ts +6 -0
  19. package/dist/cjs/main/app/observer/iframe_offsets.d.ts +8 -0
  20. package/dist/cjs/main/app/observer/observer.d.ts +52 -0
  21. package/dist/cjs/main/app/observer/shadow_root_observer.d.ts +4 -0
  22. package/dist/cjs/main/app/observer/top_observer.d.ts +52 -0
  23. package/dist/cjs/main/app/sanitizer.d.ts +53 -0
  24. package/dist/cjs/main/app/session.d.ts +58 -0
  25. package/dist/cjs/main/app/ticker.d.ts +18 -0
  26. package/dist/cjs/main/entry.d.ts +6 -0
  27. package/dist/cjs/main/index.d.ts +119 -0
  28. package/dist/cjs/main/modules/analytics/batcher.d.ts +45 -0
  29. package/dist/cjs/main/modules/analytics/constantProperties.d.ts +53 -0
  30. package/dist/cjs/main/modules/analytics/demo.d.ts +0 -0
  31. package/dist/cjs/main/modules/analytics/events.d.ts +37 -0
  32. package/dist/cjs/main/modules/analytics/index.d.ts +73 -0
  33. package/dist/cjs/main/modules/analytics/people.d.ts +56 -0
  34. package/dist/cjs/main/modules/analytics/types.d.ts +32 -0
  35. package/dist/cjs/main/modules/analytics/utils.d.ts +19 -0
  36. package/dist/cjs/main/modules/attributeSender.d.ts +22 -0
  37. package/dist/cjs/main/modules/axiosSpy.d.ts +54 -0
  38. package/dist/cjs/main/modules/conditionsManager.d.ts +89 -0
  39. package/dist/cjs/main/modules/connection.d.ts +2 -0
  40. package/dist/cjs/main/modules/console.d.ts +6 -0
  41. package/dist/cjs/main/modules/constructedStyleSheets.d.ts +4 -0
  42. package/dist/cjs/main/modules/cssrules.d.ts +18 -0
  43. package/dist/cjs/main/modules/exception.d.ts +16 -0
  44. package/dist/cjs/main/modules/focus.d.ts +2 -0
  45. package/dist/cjs/main/modules/fonts.d.ts +2 -0
  46. package/dist/cjs/main/modules/img.d.ts +2 -0
  47. package/dist/cjs/main/modules/input.d.ts +34 -0
  48. package/dist/cjs/main/modules/longAnimationTask.d.ts +25 -0
  49. package/dist/cjs/main/modules/markerWatcher.d.ts +25 -0
  50. package/dist/cjs/main/modules/mouse.d.ts +13 -0
  51. package/dist/cjs/main/modules/network.d.ts +32 -0
  52. package/dist/cjs/main/modules/performance.d.ts +7 -0
  53. package/dist/cjs/main/modules/scroll.d.ts +2 -0
  54. package/dist/cjs/main/modules/selection.d.ts +7 -0
  55. package/dist/cjs/main/modules/tabs.d.ts +2 -0
  56. package/dist/cjs/main/modules/timing.d.ts +9 -0
  57. package/dist/cjs/main/modules/viewport.d.ts +13 -0
  58. package/dist/cjs/main/modules/webAnimations.d.ts +9 -0
  59. package/dist/cjs/main/singleton.d.ts +102 -0
  60. package/dist/cjs/main/utils.d.ts +35 -0
  61. package/dist/lib/common/interaction.d.ts +37 -0
  62. package/dist/lib/common/messages.gen.d.ts +587 -0
  63. package/dist/lib/entry.js +10669 -0
  64. package/dist/lib/entry.js.map +1 -0
  65. package/dist/lib/index.js +10429 -0
  66. package/dist/lib/index.js.map +1 -0
  67. package/dist/lib/main/app/canvas.d.ts +37 -0
  68. package/dist/lib/main/app/guards.d.ts +24 -0
  69. package/dist/lib/main/app/index.d.ts +314 -0
  70. package/dist/lib/main/app/logger.d.ts +17 -0
  71. package/dist/lib/main/app/messages.gen.d.ts +83 -0
  72. package/dist/lib/main/app/nodes/idSeq.d.ts +14 -0
  73. package/dist/lib/main/app/nodes/index.d.ts +32 -0
  74. package/dist/lib/main/app/nodes/maintainer.d.ts +28 -0
  75. package/dist/lib/main/app/observer/cssInliner.d.ts +1 -0
  76. package/dist/lib/main/app/observer/iframe_observer.d.ts +6 -0
  77. package/dist/lib/main/app/observer/iframe_offsets.d.ts +8 -0
  78. package/dist/lib/main/app/observer/observer.d.ts +52 -0
  79. package/dist/lib/main/app/observer/shadow_root_observer.d.ts +4 -0
  80. package/dist/lib/main/app/observer/top_observer.d.ts +52 -0
  81. package/dist/lib/main/app/sanitizer.d.ts +53 -0
  82. package/dist/lib/main/app/session.d.ts +58 -0
  83. package/dist/lib/main/app/ticker.d.ts +18 -0
  84. package/dist/lib/main/entry.d.ts +6 -0
  85. package/dist/lib/main/index.d.ts +119 -0
  86. package/dist/lib/main/modules/analytics/batcher.d.ts +45 -0
  87. package/dist/lib/main/modules/analytics/constantProperties.d.ts +53 -0
  88. package/dist/lib/main/modules/analytics/demo.d.ts +0 -0
  89. package/dist/lib/main/modules/analytics/events.d.ts +37 -0
  90. package/dist/lib/main/modules/analytics/index.d.ts +73 -0
  91. package/dist/lib/main/modules/analytics/people.d.ts +56 -0
  92. package/dist/lib/main/modules/analytics/types.d.ts +32 -0
  93. package/dist/lib/main/modules/analytics/utils.d.ts +19 -0
  94. package/dist/lib/main/modules/attributeSender.d.ts +22 -0
  95. package/dist/lib/main/modules/axiosSpy.d.ts +54 -0
  96. package/dist/lib/main/modules/conditionsManager.d.ts +89 -0
  97. package/dist/lib/main/modules/connection.d.ts +2 -0
  98. package/dist/lib/main/modules/console.d.ts +6 -0
  99. package/dist/lib/main/modules/constructedStyleSheets.d.ts +4 -0
  100. package/dist/lib/main/modules/cssrules.d.ts +18 -0
  101. package/dist/lib/main/modules/exception.d.ts +16 -0
  102. package/dist/lib/main/modules/focus.d.ts +2 -0
  103. package/dist/lib/main/modules/fonts.d.ts +2 -0
  104. package/dist/lib/main/modules/img.d.ts +2 -0
  105. package/dist/lib/main/modules/input.d.ts +34 -0
  106. package/dist/lib/main/modules/longAnimationTask.d.ts +25 -0
  107. package/dist/lib/main/modules/markerWatcher.d.ts +25 -0
  108. package/dist/lib/main/modules/mouse.d.ts +13 -0
  109. package/dist/lib/main/modules/network.d.ts +32 -0
  110. package/dist/lib/main/modules/performance.d.ts +7 -0
  111. package/dist/lib/main/modules/scroll.d.ts +2 -0
  112. package/dist/lib/main/modules/selection.d.ts +7 -0
  113. package/dist/lib/main/modules/tabs.d.ts +2 -0
  114. package/dist/lib/main/modules/timing.d.ts +9 -0
  115. package/dist/lib/main/modules/viewport.d.ts +13 -0
  116. package/dist/lib/main/modules/webAnimations.d.ts +9 -0
  117. package/dist/lib/main/singleton.d.ts +102 -0
  118. package/dist/lib/main/utils.d.ts +35 -0
  119. package/dist/types/common/interaction.d.ts +37 -0
  120. package/dist/types/common/messages.gen.d.ts +587 -0
  121. package/dist/types/main/app/canvas.d.ts +37 -0
  122. package/dist/types/main/app/guards.d.ts +24 -0
  123. package/dist/types/main/app/index.d.ts +314 -0
  124. package/dist/types/main/app/logger.d.ts +17 -0
  125. package/dist/types/main/app/messages.gen.d.ts +83 -0
  126. package/dist/types/main/app/nodes/idSeq.d.ts +14 -0
  127. package/dist/types/main/app/nodes/index.d.ts +32 -0
  128. package/dist/types/main/app/nodes/maintainer.d.ts +28 -0
  129. package/dist/types/main/app/observer/cssInliner.d.ts +1 -0
  130. package/dist/types/main/app/observer/iframe_observer.d.ts +6 -0
  131. package/dist/types/main/app/observer/iframe_offsets.d.ts +8 -0
  132. package/dist/types/main/app/observer/observer.d.ts +52 -0
  133. package/dist/types/main/app/observer/shadow_root_observer.d.ts +4 -0
  134. package/dist/types/main/app/observer/top_observer.d.ts +52 -0
  135. package/dist/types/main/app/sanitizer.d.ts +53 -0
  136. package/dist/types/main/app/session.d.ts +58 -0
  137. package/dist/types/main/app/ticker.d.ts +18 -0
  138. package/dist/types/main/entry.d.ts +6 -0
  139. package/dist/types/main/index.d.ts +119 -0
  140. package/dist/types/main/modules/analytics/batcher.d.ts +45 -0
  141. package/dist/types/main/modules/analytics/constantProperties.d.ts +53 -0
  142. package/dist/types/main/modules/analytics/demo.d.ts +0 -0
  143. package/dist/types/main/modules/analytics/events.d.ts +37 -0
  144. package/dist/types/main/modules/analytics/index.d.ts +73 -0
  145. package/dist/types/main/modules/analytics/people.d.ts +56 -0
  146. package/dist/types/main/modules/analytics/types.d.ts +32 -0
  147. package/dist/types/main/modules/analytics/utils.d.ts +19 -0
  148. package/dist/types/main/modules/attributeSender.d.ts +22 -0
  149. package/dist/types/main/modules/axiosSpy.d.ts +54 -0
  150. package/dist/types/main/modules/conditionsManager.d.ts +89 -0
  151. package/dist/types/main/modules/connection.d.ts +2 -0
  152. package/dist/types/main/modules/console.d.ts +6 -0
  153. package/dist/types/main/modules/constructedStyleSheets.d.ts +4 -0
  154. package/dist/types/main/modules/cssrules.d.ts +18 -0
  155. package/dist/types/main/modules/exception.d.ts +16 -0
  156. package/dist/types/main/modules/focus.d.ts +2 -0
  157. package/dist/types/main/modules/fonts.d.ts +2 -0
  158. package/dist/types/main/modules/img.d.ts +2 -0
  159. package/dist/types/main/modules/input.d.ts +34 -0
  160. package/dist/types/main/modules/longAnimationTask.d.ts +25 -0
  161. package/dist/types/main/modules/markerWatcher.d.ts +25 -0
  162. package/dist/types/main/modules/mouse.d.ts +13 -0
  163. package/dist/types/main/modules/network.d.ts +32 -0
  164. package/dist/types/main/modules/performance.d.ts +7 -0
  165. package/dist/types/main/modules/scroll.d.ts +2 -0
  166. package/dist/types/main/modules/selection.d.ts +7 -0
  167. package/dist/types/main/modules/tabs.d.ts +2 -0
  168. package/dist/types/main/modules/timing.d.ts +9 -0
  169. package/dist/types/main/modules/viewport.d.ts +13 -0
  170. package/dist/types/main/modules/webAnimations.d.ts +9 -0
  171. package/dist/types/main/singleton.d.ts +102 -0
  172. package/dist/types/main/utils.d.ts +35 -0
  173. package/package.json +87 -0
@@ -0,0 +1,314 @@
1
+ import type { Options as WebworkerOptions } from '../../common/interaction.js';
2
+ import AttributeSender from '../modules/attributeSender.js';
3
+ import type { Options as NetworkOptions } from '../modules/network.js';
4
+ import Logger, { ILogLevel } from './logger.js';
5
+ import Message from './messages.gen.js';
6
+ import Nodes from './nodes/index.js';
7
+ import type { Options as ObserverOptions } from './observer/top_observer.js';
8
+ import Observer from './observer/top_observer.js';
9
+ import type { Options as SanitizerOptions } from './sanitizer.js';
10
+ import Sanitizer from './sanitizer.js';
11
+ import type { Options as SessOptions } from './session.js';
12
+ import Session from './session.js';
13
+ import Ticker from './ticker.js';
14
+ import { MaintainerOptions } from './nodes/maintainer.js';
15
+ export { InlineCssMode } from './observer/top_observer.js';
16
+ export interface StartOptions {
17
+ userID?: string;
18
+ metadata?: Record<string, string>;
19
+ startNewSession?: boolean;
20
+ sessionHash?: string;
21
+ liveAssistOnly?: boolean;
22
+ /**
23
+ * @deprecated We strongly advise to use .start().then instead.
24
+ *
25
+ * This method is kept for snippet compatibility only
26
+ * */
27
+ startCallback?: (result: StartPromiseReturn) => void;
28
+ }
29
+ interface OnStartInfo {
30
+ sessionID: string;
31
+ sessionToken: string;
32
+ userUUID: string;
33
+ }
34
+ declare const CANCELED: "canceled";
35
+ type SuccessfulStart = OnStartInfo & {
36
+ success: true;
37
+ };
38
+ type UnsuccessfulStart = {
39
+ reason: typeof CANCELED | string;
40
+ success: false;
41
+ };
42
+ declare const UnsuccessfulStart: (reason: string) => UnsuccessfulStart;
43
+ declare const SuccessfulStart: (body: OnStartInfo) => SuccessfulStart;
44
+ export type StartPromiseReturn = SuccessfulStart | UnsuccessfulStart;
45
+ type StartCallback = (i: OnStartInfo) => void;
46
+ type CommitCallback = (messages: Array<Message>) => void;
47
+ declare enum ActivityState {
48
+ NotActive = 0,
49
+ Starting = 1,
50
+ Active = 2,
51
+ ColdStart = 3
52
+ }
53
+ type AppOptions = {
54
+ revID: string;
55
+ node_id: string;
56
+ session_reset_key: string;
57
+ session_token_key: string;
58
+ session_pageno_key: string;
59
+ session_tabid_key: string;
60
+ local_uuid_key: string;
61
+ siteKey?: string;
62
+ endpoint: string;
63
+ resourceBaseHref: string | null;
64
+ __is_snippet: boolean;
65
+ __debug_report_edp: string | null;
66
+ __debug__?: ILogLevel;
67
+ localStorage: Storage | null;
68
+ sessionStorage: Storage | null;
69
+ forceSingleTab?: boolean;
70
+ /** Sometimes helps to prevent session breaking due to dict reset */
71
+ disableStringDict?: boolean;
72
+ assistSocketHost?: string;
73
+ canvas: {
74
+ disableCanvas?: boolean;
75
+ /**
76
+ * If you expect HI-DPI users mostly, this will render canvas
77
+ * in 1:1 pixel ratio
78
+ * */
79
+ fixedCanvasScaling?: boolean;
80
+ __save_canvas_locally?: boolean;
81
+ /**
82
+ * Use with care since it hijacks one frame each time it captures
83
+ * snapshot for every canvas
84
+ * */
85
+ useAnimationFrame?: boolean;
86
+ /**
87
+ * Use webp unless it produces too big images
88
+ * @default webp
89
+ * */
90
+ fileExt?: 'webp' | 'png' | 'jpeg' | 'avif';
91
+ };
92
+ crossdomain?: {
93
+ /**
94
+ * @default false
95
+ * */
96
+ enabled?: boolean;
97
+ /**
98
+ * used to send message up, will be '*' by default
99
+ * (check your CSP settings)
100
+ * @default '*'
101
+ * */
102
+ parentDomain?: string;
103
+ };
104
+ networkCapture?: NetworkOptions;
105
+ /**
106
+ * use this flag to force angular detection to be offline
107
+ *
108
+ * basically goes around window.Zone api changes to mutation observer
109
+ * and event listeners
110
+ * */
111
+ forceNgOff?: boolean;
112
+ /**
113
+ * This option is used to change how tracker handles potentially detached nodes
114
+ *
115
+ * defaults here are tested and proven to be lightweight and easy on cpu
116
+ *
117
+ * consult the docs before changing it
118
+ * */
119
+ nodes?: {
120
+ maintainer: Partial<MaintainerOptions>;
121
+ };
122
+ } & WebworkerOptions & SessOptions;
123
+ export type Options = AppOptions & ObserverOptions & SanitizerOptions;
124
+ export declare const DEFAULT_ENDPOINT = "https://api.oxvo.com/oxvo";
125
+ export default class App {
126
+ private readonly signalError;
127
+ readonly insideIframe: boolean;
128
+ readonly nodes: Nodes;
129
+ readonly ticker: Ticker;
130
+ readonly projectKey: string;
131
+ readonly sanitizer: Sanitizer;
132
+ readonly debug: Logger;
133
+ readonly notify: Logger;
134
+ readonly session: Session;
135
+ readonly localStorage: Storage;
136
+ readonly sessionStorage: Storage;
137
+ private readonly messages;
138
+ /**
139
+ * we need 2 buffers, so we don't lose anything
140
+ * @read coldStart implementation
141
+ * */
142
+ private bufferedMessages1;
143
+ private readonly bufferedMessages2;
144
+ readonly observer: Observer;
145
+ private readonly startCallbacks;
146
+ private readonly stopCallbacks;
147
+ private readonly commitCallbacks;
148
+ readonly options: Options;
149
+ readonly networkOptions?: NetworkOptions;
150
+ private readonly revID;
151
+ private activityState;
152
+ private readonly version;
153
+ private worker?;
154
+ attributeSender: AttributeSender;
155
+ socketMode: boolean;
156
+ private compressionThreshold;
157
+ private readonly bc;
158
+ private readonly contextId;
159
+ private canvasRecorder;
160
+ private conditionsManager;
161
+ private readonly markerWatcher;
162
+ private canStart;
163
+ private rootId;
164
+ private pageFrames;
165
+ private frameOderNumber;
166
+ private frameLevel;
167
+ private emptyBatchCounter;
168
+ constructor(projectKey: string, sessionToken: string | undefined, options: Partial<Options>, signalError: (error: string, apis: string[]) => void, insideIframe: boolean);
169
+ /** used by child iframes for crossdomain only */
170
+ parentActive: boolean;
171
+ checkStatus: () => boolean;
172
+ parentCrossDomainFrameListener: (event: MessageEvent) => void;
173
+ /**
174
+ * context ids for iframes,
175
+ * order is not so important as long as its consistent
176
+ * */
177
+ trackedFrames: string[];
178
+ crossDomainIframeListener: (event: MessageEvent) => void;
179
+ /**
180
+ * { command : [remaining iframes] }
181
+ * + order of commands
182
+ **/
183
+ pollingQueue: Record<string, any>;
184
+ private readonly addCommand;
185
+ bootChildrenFrames: () => Promise<void>;
186
+ killChildrenFrames: () => void;
187
+ signalIframeTracker: () => void;
188
+ startTimeout: ReturnType<typeof setTimeout> | null;
189
+ allowAppStart(): void;
190
+ private checkNodeId;
191
+ private initWorker;
192
+ private restart;
193
+ private handleWorkerMsg;
194
+ private _debug;
195
+ send: (message: Message, urgent?: boolean) => void;
196
+ /**
197
+ * Normal workflow: add timestamp and tab data to batch, then commit it
198
+ * every ~30ms
199
+ * */
200
+ private _nCommit;
201
+ coldStartCommitN: number;
202
+ /**
203
+ * Cold start: add timestamp and tab data to both batches
204
+ * every 2nd tick, ~60ms
205
+ * this will make batches a bit larger and replay will work with bigger jumps every frame
206
+ * but in turn we don't overload batch writer on session start with 1000 batches
207
+ * */
208
+ private _cStartCommit;
209
+ private commit;
210
+ private postToWorker;
211
+ private delay;
212
+ timestamp(): number;
213
+ safe<T extends (this: any, ...args: any[]) => void>(fn: T): T;
214
+ attachCommitCallback(cb: CommitCallback): void;
215
+ attachStartCallback: (cb: StartCallback, useSafe?: boolean) => void;
216
+ attachStopCallback: (cb: () => any, useSafe?: boolean) => void;
217
+ attachEventListener: (target: EventTarget, type: string, listener: EventListener, useSafe?: boolean, useCapture?: boolean) => void;
218
+ checkRequiredVersion(version: string): boolean;
219
+ private getTrackerInfo;
220
+ private buildStartPayload;
221
+ getSessionMeta(): {
222
+ userUUID: string | null;
223
+ projectKey: string;
224
+ revID: string;
225
+ trackerVersion: string;
226
+ isSnippet: boolean;
227
+ sessionID: string | undefined;
228
+ metadata: Record<string, string>;
229
+ userID: string | null;
230
+ timestamp: number;
231
+ projectID?: string;
232
+ };
233
+ getSessionSecret(): string | undefined;
234
+ getSessionKey(): string | undefined;
235
+ getSessionLink(options?: {
236
+ withCurrentTime?: boolean;
237
+ }): string | undefined;
238
+ getHost(): string;
239
+ getProjectKey(): string;
240
+ getBaseHref(): string;
241
+ resolveResourceURL(resourceURL: string): string;
242
+ isServiceURL(url: string): boolean;
243
+ active(): boolean;
244
+ resetNextPageSession(flag: boolean): void;
245
+ coldInterval: ReturnType<typeof setInterval> | null;
246
+ orderNumber: number;
247
+ coldStartTs: number;
248
+ singleBuffer: boolean;
249
+ private checkSessionToken;
250
+ /**
251
+ * start buffering messages without starting the actual session, which gives
252
+ * user 30 seconds to "activate" and record session by calling `start()` on conditional trigger,
253
+ * and we will then send buffered batch, so it won't get lost
254
+ * */
255
+ coldStart(startOpts?: StartOptions, conditional?: boolean): Promise<void>;
256
+ private setupConditionalStart;
257
+ onSessionSent: () => void;
258
+ /**
259
+ * Starts offline session recording
260
+ * @param {Object} startOpts - options for session start, same as .start()
261
+ * @param {Function} onSessionSent - callback that will be called once session is fully sent
262
+ * */
263
+ offlineRecording(startOpts: StartOptions | undefined, onSessionSent: () => void): {
264
+ saveBuffer: () => void;
265
+ getBuffer: () => Message[];
266
+ setBuffer: (buffer: Message[]) => void;
267
+ };
268
+ /**
269
+ * Saves the captured messages in localStorage (or whatever is used in its place)
270
+ *
271
+ * Then, when this.offlineRecording is called, it will preload this messages and clear the storage item
272
+ *
273
+ * Keeping the size of local storage reasonable is up to the end users of this library
274
+ * */
275
+ saveBuffer(): void;
276
+ /**
277
+ * @returns buffer with stored messages for offline recording
278
+ * */
279
+ getBuffer(): Message[];
280
+ /**
281
+ * Used to set a buffer with messages array
282
+ * */
283
+ setBuffer(buffer: Message[]): void;
284
+ /**
285
+ * Uploads the stored session buffer to backend
286
+ * @returns promise that resolves once messages are loaded, it has to be awaited
287
+ * so the session can be uploaded properly
288
+ * @resolve - if messages were loaded in service worker successfully
289
+ * @reject {string} - error message
290
+ * */
291
+ uploadOfflineRecording(): Promise<void>;
292
+ prevOpts: StartOptions;
293
+ private _start;
294
+ restartCanvasTracking: () => void;
295
+ flushBuffer: (buffer: Message[]) => Promise<unknown>;
296
+ waitStart(): Promise<unknown>;
297
+ waitStarted(): Promise<unknown>;
298
+ waitStatus(status: ActivityState): Promise<unknown>;
299
+ /**
300
+ * basically we ask other tabs during constructor
301
+ * and here we just apply 10ms delay just in case
302
+ * */
303
+ start(...args: Parameters<App['_start']>): Promise<StartPromiseReturn>;
304
+ forceFlushBatch(): void;
305
+ getTabId(): string;
306
+ clearBuffers(): void;
307
+ /**
308
+ * Creates a named hook that expects event name, data string and msg direction (up/down),
309
+ * it will skip any message bigger than 5 mb or event name bigger than 255 symbols
310
+ * @returns {(msgType: string, data: string, dir: "up" | "down") => void}
311
+ * */
312
+ trackWs(channelName: string): (msgType: string, data: string, dir: 'up' | 'down') => void;
313
+ stop(stopWorker?: boolean): void;
314
+ }
@@ -0,0 +1,17 @@
1
+ export declare const LogLevel: {
2
+ readonly Verbose: 5;
3
+ readonly Log: 4;
4
+ readonly Warnings: 3;
5
+ readonly Errors: 2;
6
+ readonly Silent: 0;
7
+ };
8
+ export type ILogLevel = (typeof LogLevel)[keyof typeof LogLevel];
9
+ export default class Logger {
10
+ private readonly level;
11
+ constructor(debugLevel?: ILogLevel);
12
+ private readonly shouldLog;
13
+ info: (...args: any[]) => void;
14
+ log: (...args: any[]) => void;
15
+ warn: (...args: any[]) => void;
16
+ error: (...args: any[]) => void;
17
+ }
@@ -0,0 +1,83 @@
1
+ import * as Messages from '../../common/messages.gen.js';
2
+ export { default, Type } from '../../common/messages.gen.js';
3
+ export declare function Timestamp(timestamp: number): Messages.Timestamp;
4
+ export declare function SetPageLocationDeprecated(url: string, referrer: string, navigationStart: number): Messages.SetPageLocationDeprecated;
5
+ export declare function SetViewportSize(width: number, height: number): Messages.SetViewportSize;
6
+ export declare function SetViewportScroll(x: number, y: number): Messages.SetViewportScroll;
7
+ export declare function CreateDocument(): Messages.CreateDocument;
8
+ export declare function CreateElementNode(id: number, parentID: number, index: number, tag: string, svg: boolean): Messages.CreateElementNode;
9
+ export declare function CreateTextNode(id: number, parentID: number, index: number): Messages.CreateTextNode;
10
+ export declare function MoveNode(id: number, parentID: number, index: number): Messages.MoveNode;
11
+ export declare function RemoveNode(id: number): Messages.RemoveNode;
12
+ export declare function SetNodeAttribute(id: number, name: string, value: string): Messages.SetNodeAttribute;
13
+ export declare function RemoveNodeAttribute(id: number, name: string): Messages.RemoveNodeAttribute;
14
+ export declare function SetNodeData(id: number, data: string): Messages.SetNodeData;
15
+ export declare function SetNodeScroll(id: number, x: number, y: number): Messages.SetNodeScroll;
16
+ export declare function SetInputTarget(id: number, label: string): Messages.SetInputTarget;
17
+ export declare function SetInputValue(id: number, value: string, mask: number): Messages.SetInputValue;
18
+ export declare function SetInputChecked(id: number, checked: boolean): Messages.SetInputChecked;
19
+ export declare function MouseMove(x: number, y: number): Messages.MouseMove;
20
+ export declare function NetworkRequestDeprecated(type: string, method: string, url: string, request: string, response: string, status: number, timestamp: number, duration: number): Messages.NetworkRequestDeprecated;
21
+ export declare function ConsoleLog(level: string, value: string): Messages.ConsoleLog;
22
+ export declare function PageLoadTiming(requestStart: number, responseStart: number, responseEnd: number, domContentLoadedEventStart: number, domContentLoadedEventEnd: number, loadEventStart: number, loadEventEnd: number, firstPaint: number, firstContentfulPaint: number): Messages.PageLoadTiming;
23
+ export declare function PageRenderTiming(speedIndex: number, visuallyComplete: number, timeToInteractive: number): Messages.PageRenderTiming;
24
+ export declare function CustomEvent(name: string, payload: string): Messages.CustomEvent;
25
+ export declare function UserID(id: string): Messages.UserID;
26
+ export declare function UserAnonymousID(id: string): Messages.UserAnonymousID;
27
+ export declare function Metadata(key: string, value: string): Messages.Metadata;
28
+ export declare function StringDictGlobal(key: number, value: string): Messages.StringDictGlobal;
29
+ export declare function SetNodeAttributeDictGlobal(id: number, name: number, value: number): Messages.SetNodeAttributeDictGlobal;
30
+ export declare function NodeAnimationResult(id: number, styles: string): Messages.NodeAnimationResult;
31
+ export declare function Profiler(name: string, duration: number, args: string, result: string): Messages.Profiler;
32
+ export declare function OTable(key: string, value: string): Messages.OTable;
33
+ export declare function StateAction(type: string): Messages.StateAction;
34
+ export declare function ReduxDeprecated(action: string, state: string, duration: number): Messages.ReduxDeprecated;
35
+ export declare function Vuex(mutation: string, state: string): Messages.Vuex;
36
+ export declare function MobX(type: string, payload: string): Messages.MobX;
37
+ export declare function NgRx(action: string, state: string, duration: number): Messages.NgRx;
38
+ export declare function GraphQLDeprecated(operationKind: string, operationName: string, variables: string, response: string, duration: number): Messages.GraphQLDeprecated;
39
+ export declare function PerformanceTrack(frames: number, ticks: number, totalJSHeapSize: number, usedJSHeapSize: number): Messages.PerformanceTrack;
40
+ export declare function StringDictDeprecated(key: number, value: string): Messages.StringDictDeprecated;
41
+ export declare function SetNodeAttributeDictDeprecated(id: number, nameKey: number, valueKey: number): Messages.SetNodeAttributeDictDeprecated;
42
+ export declare function StringDict(key: string, value: string): Messages.StringDict;
43
+ export declare function SetNodeAttributeDict(id: number, name: string, value: string): Messages.SetNodeAttributeDict;
44
+ export declare function ResourceTimingDeprecatedDeprecated(timestamp: number, duration: number, ttfb: number, headerSize: number, encodedBodySize: number, decodedBodySize: number, url: string, initiator: string): Messages.ResourceTimingDeprecatedDeprecated;
45
+ export declare function ConnectionInformation(downlink: number, type: string): Messages.ConnectionInformation;
46
+ export declare function SetPageVisibility(hidden: boolean): Messages.SetPageVisibility;
47
+ export declare function LoadFontFace(parentID: number, family: string, source: string, descriptors: string): Messages.LoadFontFace;
48
+ export declare function SetNodeFocus(id: number): Messages.SetNodeFocus;
49
+ export declare function SetNodeAttributeURLBased(id: number, name: string, value: string, baseURL: string): Messages.SetNodeAttributeURLBased;
50
+ export declare function SetCSSDataURLBased(id: number, data: string, baseURL: string): Messages.SetCSSDataURLBased;
51
+ export declare function TechnicalInfo(type: string, value: string): Messages.TechnicalInfo;
52
+ export declare function CustomIssue(name: string, payload: string): Messages.CustomIssue;
53
+ export declare function SetNodeSlot(id: number, slotID: number): Messages.SetNodeSlot;
54
+ export declare function MouseClick(id: number, hesitationTime: number, label: string, selector: string, normalizedX: number, normalizedY: number): Messages.MouseClick;
55
+ export declare function MouseClickDeprecated(id: number, hesitationTime: number, label: string, selector: string): Messages.MouseClickDeprecated;
56
+ export declare function CreateIFrameDocument(frameID: number, id: number): Messages.CreateIFrameDocument;
57
+ export declare function AdoptedSSReplaceURLBased(sheetID: number, text: string, baseURL: string): Messages.AdoptedSSReplaceURLBased;
58
+ export declare function AdoptedSSInsertRuleURLBased(sheetID: number, rule: string, index: number, baseURL: string): Messages.AdoptedSSInsertRuleURLBased;
59
+ export declare function AdoptedSSDeleteRule(sheetID: number, index: number): Messages.AdoptedSSDeleteRule;
60
+ export declare function AdoptedSSAddOwner(sheetID: number, id: number): Messages.AdoptedSSAddOwner;
61
+ export declare function AdoptedSSRemoveOwner(sheetID: number, id: number): Messages.AdoptedSSRemoveOwner;
62
+ export declare function JSException(name: string, message: string, payload: string, metadata: string): Messages.JSException;
63
+ export declare function Zustand(mutation: string, state: string): Messages.Zustand;
64
+ export declare function BatchMetadata(version: number, pageNo: number, firstIndex: number, timestamp: number, location: string): Messages.BatchMetadata;
65
+ export declare function PartitionedMessage(partNo: number, partTotal: number): Messages.PartitionedMessage;
66
+ export declare function NetworkRequest(type: string, method: string, url: string, request: string, response: string, status: number, timestamp: number, duration: number, transferredBodySize: number): Messages.NetworkRequest;
67
+ export declare function WSChannel(chType: string, channelName: string, data: string, timestamp: number, dir: string, messageType: string): Messages.WSChannel;
68
+ 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;
69
+ export declare function Incident(label: string, startTime: number, endTime: number): Messages.Incident;
70
+ export declare function LongAnimationTask(name: string, duration: number, blockingDuration: number, firstUIEventTimestamp: number, startTime: number, scripts: string): Messages.LongAnimationTask;
71
+ export declare function InputChange(id: number, value: string, valueMasked: boolean, label: string, hesitationTime: number, inputDuration: number): Messages.InputChange;
72
+ export declare function SelectionChange(selectionStart: number, selectionEnd: number, selection: string): Messages.SelectionChange;
73
+ export declare function MouseThrashing(timestamp: number): Messages.MouseThrashing;
74
+ export declare function UnbindNodes(totalRemovedPercent: number): Messages.UnbindNodes;
75
+ 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
+ export declare function TabChange(tabId: string): Messages.TabChange;
77
+ export declare function TabData(tabId: string): Messages.TabData;
78
+ export declare function CanvasNode(nodeId: string, timestamp: number): Messages.CanvasNode;
79
+ export declare function TagTrigger(tagId: number): Messages.TagTrigger;
80
+ export declare function Redux(action: string, state: string, duration: number, actionTime: number): Messages.Redux;
81
+ export declare function SetPageLocation(url: string, referrer: string, navigationStart: number, documentTitle: string): Messages.SetPageLocation;
82
+ export declare function GraphQL(operationKind: string, operationName: string, variables: string, response: string, duration: number): Messages.GraphQL;
83
+ export declare function WebVitals(name: string, value: string): Messages.WebVitals;
@@ -0,0 +1,14 @@
1
+ export declare const BITS_LEVEL = 2;
2
+ export declare const BITS_ORDER = 7;
3
+ export declare const BITS_NODE = 22;
4
+ export declare const SHIFT_ORDER = 22;
5
+ export declare const SHIFT_LEVEL: number;
6
+ export declare const MASK_NODE: number;
7
+ export declare const MASK_ORDER: number;
8
+ export declare const MASK_LEVEL: number;
9
+ export declare function pack(level: number, order: number, nodeId: number): number;
10
+ export declare function unpack(id: number): {
11
+ level: number;
12
+ order: number;
13
+ nodeId: number;
14
+ };
@@ -0,0 +1,32 @@
1
+ import { MaintainerOptions } from './maintainer.js';
2
+ type NodeCallback = (node: Node, isStart: boolean) => void;
3
+ export interface NodesOptions {
4
+ node_id: string;
5
+ forceNgOff: boolean;
6
+ maintainer?: Partial<MaintainerOptions>;
7
+ }
8
+ export default class Nodes {
9
+ private readonly nodes;
10
+ private totalNodeAmount;
11
+ private readonly nodeCallbacks;
12
+ private readonly elementListeners;
13
+ private nextNodeId;
14
+ private readonly node_id;
15
+ private readonly forceNgOff;
16
+ private readonly maintainer;
17
+ constructor(params: NodesOptions);
18
+ crossdomainMode(level: number, frameOrder: number): void;
19
+ attachNodeCallback: (nodeCallback: NodeCallback) => number;
20
+ scanTree: (cb: (node: Node | void) => void) => void;
21
+ attachNodeListener: (node: Node, type: string, listener: EventListener, useCapture?: boolean) => void;
22
+ createFrameId: (level: number, frameOrder: number) => number;
23
+ registerNode(node: Node): [/*id:*/ number, /*isNew:*/ boolean];
24
+ unregisterNode: (node: Node) => number | undefined;
25
+ cleanTree(): void;
26
+ callNodeCallbacks(node: Node, isStart: boolean): void;
27
+ getID(node: Node): number | undefined;
28
+ getNode(id: number): void | Node | undefined;
29
+ getNodeCount(): number;
30
+ clear(): void;
31
+ }
32
+ export {};
@@ -0,0 +1,28 @@
1
+ export interface MaintainerOptions {
2
+ /**
3
+ * Run cleanup each X ms
4
+ *
5
+ * @default 30 * 1000
6
+ * */
7
+ interval: number;
8
+ /**
9
+ * Maintainer checks nodes in small batches over 50ms timeouts
10
+ *
11
+ * @default 2500
12
+ * */
13
+ batchSize: number;
14
+ /**
15
+ * @default true
16
+ * */
17
+ enabled: boolean;
18
+ }
19
+ declare class Maintainer {
20
+ private readonly nodes;
21
+ private readonly unregisterNode;
22
+ private interval;
23
+ private readonly options;
24
+ constructor(nodes: Map<number, Node | void>, unregisterNode: (node: Node) => void, options?: Partial<MaintainerOptions>);
25
+ start: () => void;
26
+ stop: () => void;
27
+ }
28
+ export default Maintainer;
@@ -0,0 +1 @@
1
+ export declare function inlineRemoteCss(node: HTMLLinkElement, id: number, baseHref: string, getNextID: () => number, insertRule: (id: number, cssText: string, index: number, baseHref: string) => any[], addOwner: (sheetId: number, ownerId: number) => any[], forceFetch?: boolean, sendPlain?: boolean, onPlain?: (cssText: string, id: number) => void): void;
@@ -0,0 +1,6 @@
1
+ import Observer from './observer.js';
2
+ export default class IFrameObserver extends Observer {
3
+ docId: number | undefined;
4
+ observe(iframe: HTMLIFrameElement): void;
5
+ syntheticObserve(rootNodeId: number, doc: Document): void;
6
+ }
@@ -0,0 +1,8 @@
1
+ export type Offset = [/*left:*/ number, /*top: */ number];
2
+ export default class IFrameOffsets {
3
+ private states;
4
+ private calcOffset;
5
+ getDocumentOffset(doc: Document): Offset;
6
+ observe(iFrame: HTMLIFrameElement): void;
7
+ clear(): void;
8
+ }
@@ -0,0 +1,52 @@
1
+ import App from '../index.js';
2
+ export declare function parseUseEl(useElement: SVGUseElement, mode: 'inline' | 'dataurl' | 'svgtext', domParser: DOMParser): Promise<any>;
3
+ interface Options {
4
+ disableSprites?: boolean;
5
+ disableThrottling?: boolean;
6
+ inlineRemoteCss?: boolean;
7
+ inlinerOptions?: {
8
+ forceFetch?: boolean;
9
+ forcePlain?: boolean;
10
+ };
11
+ }
12
+ export default abstract class Observer {
13
+ protected readonly app: App;
14
+ protected readonly isTopContext: boolean;
15
+ private readonly observer;
16
+ private readonly commited;
17
+ private readonly recents;
18
+ private readonly indexes;
19
+ private readonly attributesMap;
20
+ private readonly textSet;
21
+ private readonly slotMap;
22
+ private readonly disableSprites;
23
+ /**
24
+ * this option means that, instead of using link element with href to load css,
25
+ * we will try to parse the css text instead and send it as css rules set
26
+ * can (and will) affect performance
27
+ * */
28
+ private readonly inlineRemoteCss;
29
+ private readonly inlinerOptions;
30
+ private readonly domParser;
31
+ constructor(app: App, isTopContext?: boolean, options?: Options);
32
+ private clear;
33
+ /**
34
+ * EXPERIMENTAL: Unbinds the removed nodes in case of iframe src change.
35
+ *
36
+ * right now, we're relying on nodes.maintainer
37
+ */
38
+ private handleIframeSrcChange;
39
+ private sendNodeAttribute;
40
+ throttling: boolean;
41
+ private throttledSetNodeData;
42
+ private sendNodeData;
43
+ private bindNode;
44
+ private bindTree;
45
+ private unbindTree;
46
+ private _commitNode;
47
+ private commitNode;
48
+ private commitNodes;
49
+ protected observeRoot(node: Node, beforeCommit: (id?: number) => unknown, nodeToBind?: Node): void;
50
+ disconnect(): void;
51
+ }
52
+ export {};
@@ -0,0 +1,4 @@
1
+ import Observer from './observer.js';
2
+ export default class ShadowRootObserver extends Observer {
3
+ observe(el: Element): void;
4
+ }
@@ -0,0 +1,52 @@
1
+ import Observer from './observer.js';
2
+ import { Offset } from './iframe_offsets.js';
3
+ import App from '../index.js';
4
+ export declare enum InlineCssMode {
5
+ Unset = -1,
6
+ /** default behavior -- will parse and cache the css file on backend */
7
+ Disabled = 0,
8
+ /** will attempt to record the linked css file as AdoptedStyleSheet object */
9
+ Inline = 1,
10
+ /** will fetch the file, then simulate AdoptedStyleSheets behavior programmaticaly for the replay */
11
+ InlineFetched = 2,
12
+ /** will fetch the file, then save it as plain css inside <style> node */
13
+ PlainFetched = 3
14
+ }
15
+ export interface Options {
16
+ captureIFrames: boolean;
17
+ disableSprites: boolean;
18
+ /**
19
+ * with this option instead of using link element with href to load css,
20
+ * we will try to parse the css text instead and send it as css rules set
21
+ * can (and probably will) affect performance to certain degree,
22
+ * especially if the css itself is crossdomain
23
+ * @default InlineCssMode.None = 0
24
+ * */
25
+ inlineCss: InlineCssMode;
26
+ disableThrottling?: boolean;
27
+ }
28
+ type Context = Window & typeof globalThis;
29
+ type ContextCallback = (context: Context) => void;
30
+ export default class TopObserver extends Observer {
31
+ private readonly options;
32
+ private readonly iframeOffsets;
33
+ readonly app: App;
34
+ constructor(params: {
35
+ app: App;
36
+ options: Partial<Options>;
37
+ });
38
+ private readonly contextCallbacks;
39
+ private readonly contextsSet;
40
+ attachContextCallback(cb: ContextCallback): void;
41
+ getDocumentOffset(doc: Document): Offset;
42
+ private iframeObserversArr;
43
+ private iframeObservers;
44
+ private docObservers;
45
+ private handleIframe;
46
+ private shadowRootObservers;
47
+ private handleShadowRoot;
48
+ observe(): void;
49
+ crossdomainObserve(rootNodeId: number, frameOder: number, frameLevel: number): void;
50
+ disconnect(): void;
51
+ }
52
+ export {};