@openreplay/tracker 14.0.14 → 15.0.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.
- package/dist/cjs/common/messages.gen.d.ts +26 -7
- package/dist/cjs/index.js +1 -2
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/main/app/messages.gen.d.ts +5 -2
- package/dist/cjs/main/app/nodes/index.d.ts +1 -1
- package/dist/cjs/main/app/sanitizer.d.ts +20 -0
- package/dist/cjs/main/app/session.d.ts +2 -2
- package/dist/cjs/main/modules/attributeSender.d.ts +7 -2
- package/dist/cjs/main/modules/input.d.ts +18 -1
- package/dist/lib/common/messages.gen.d.ts +26 -7
- package/dist/lib/index.js +113 -63
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/main/app/messages.gen.d.ts +5 -2
- package/dist/lib/main/app/nodes/index.d.ts +1 -1
- package/dist/lib/main/app/sanitizer.d.ts +20 -0
- package/dist/lib/main/app/session.d.ts +2 -2
- package/dist/lib/main/modules/attributeSender.d.ts +7 -2
- package/dist/lib/main/modules/input.d.ts +18 -1
- package/package.json +18 -16
|
@@ -36,8 +36,10 @@ export declare const enum Type {
|
|
|
36
36
|
NgRx = 47,
|
|
37
37
|
GraphQLDeprecated = 48,
|
|
38
38
|
PerformanceTrack = 49,
|
|
39
|
-
|
|
40
|
-
|
|
39
|
+
StringDictDeprecated = 50,
|
|
40
|
+
SetNodeAttributeDictDeprecated = 51,
|
|
41
|
+
StringDict = 43,
|
|
42
|
+
SetNodeAttributeDict = 52,
|
|
41
43
|
ResourceTimingDeprecated = 53,
|
|
42
44
|
ConnectionInformation = 54,
|
|
43
45
|
SetPageVisibility = 55,
|
|
@@ -74,7 +76,8 @@ export declare const enum Type {
|
|
|
74
76
|
TagTrigger = 120,
|
|
75
77
|
Redux = 121,
|
|
76
78
|
SetPageLocation = 122,
|
|
77
|
-
GraphQL = 123
|
|
79
|
+
GraphQL = 123,
|
|
80
|
+
WebVitals = 124
|
|
78
81
|
}
|
|
79
82
|
export type Timestamp = [
|
|
80
83
|
Type.Timestamp,
|
|
@@ -292,16 +295,27 @@ export type PerformanceTrack = [
|
|
|
292
295
|
number,
|
|
293
296
|
number
|
|
294
297
|
];
|
|
298
|
+
export type StringDictDeprecated = [
|
|
299
|
+
Type.StringDictDeprecated,
|
|
300
|
+
number,
|
|
301
|
+
string
|
|
302
|
+
];
|
|
303
|
+
export type SetNodeAttributeDictDeprecated = [
|
|
304
|
+
Type.SetNodeAttributeDictDeprecated,
|
|
305
|
+
number,
|
|
306
|
+
number,
|
|
307
|
+
number
|
|
308
|
+
];
|
|
295
309
|
export type StringDict = [
|
|
296
310
|
Type.StringDict,
|
|
297
|
-
|
|
311
|
+
string,
|
|
298
312
|
string
|
|
299
313
|
];
|
|
300
314
|
export type SetNodeAttributeDict = [
|
|
301
315
|
Type.SetNodeAttributeDict,
|
|
302
316
|
number,
|
|
303
|
-
|
|
304
|
-
|
|
317
|
+
string,
|
|
318
|
+
string
|
|
305
319
|
];
|
|
306
320
|
export type ResourceTimingDeprecated = [
|
|
307
321
|
Type.ResourceTimingDeprecated,
|
|
@@ -544,5 +558,10 @@ export type GraphQL = [
|
|
|
544
558
|
string,
|
|
545
559
|
number
|
|
546
560
|
];
|
|
547
|
-
type
|
|
561
|
+
export type WebVitals = [
|
|
562
|
+
Type.WebVitals,
|
|
563
|
+
string,
|
|
564
|
+
string
|
|
565
|
+
];
|
|
566
|
+
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 | 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;
|
|
548
567
|
export default Message;
|
package/dist/cjs/index.js
CHANGED
|
@@ -82,7 +82,7 @@ class API {
|
|
|
82
82
|
const orig = this.options.ingestPoint || index_js_1.DEFAULT_INGEST_POINT;
|
|
83
83
|
req.open('POST', orig + '/v1/web/not-started');
|
|
84
84
|
req.send(JSON.stringify({
|
|
85
|
-
trackerVersion: '
|
|
85
|
+
trackerVersion: '15.0.0',
|
|
86
86
|
projectKey: this.options.projectKey,
|
|
87
87
|
doNotTrack,
|
|
88
88
|
reason: missingApi.length ? `missing api: ${missingApi.join(',')}` : reason,
|
|
@@ -112,7 +112,6 @@ class API {
|
|
|
112
112
|
};
|
|
113
113
|
this.crossdomainMode = Boolean((0, utils_js_1.inIframe)() && options.crossdomain?.enabled);
|
|
114
114
|
if (!utils_js_1.IN_BROWSER || !processOptions(options)) {
|
|
115
|
-
console.error('OpenReplay: tracker called in a non-browser environment or with invalid options');
|
|
116
115
|
return;
|
|
117
116
|
}
|
|
118
117
|
if (window.__OPENREPLAY__ ||
|
package/dist/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/main/index.ts"],"sourcesContent":["import App, { DEFAULT_INGEST_POINT } from './app/index.js'\n\nexport { default as App } from './app/index.js'\n\nimport { UserAnonymousID, CustomEvent, CustomIssue } from './app/messages.gen.js'\nimport * as _Messages from './app/messages.gen.js'\n\nexport const Messages = _Messages\nexport { SanitizeLevel } from './app/sanitizer.js'\n\nimport Connection from './modules/connection.js'\nimport Console from './modules/console.js'\nimport Exception, {\n getExceptionMessageFromEvent,\n getExceptionMessage,\n} from './modules/exception.js'\nimport Img from './modules/img.js'\nimport Input from './modules/input.js'\nimport Mouse from './modules/mouse.js'\nimport Timing from './modules/timing.js'\nimport Performance from './modules/performance.js'\nimport Scroll from './modules/scroll.js'\nimport Viewport from './modules/viewport.js'\nimport CSSRules from './modules/cssrules.js'\nimport Focus from './modules/focus.js'\nimport Fonts from './modules/fonts.js'\nimport Network from './modules/network.js'\nimport ConstructedStyleSheets from './modules/constructedStyleSheets.js'\nimport Selection from './modules/selection.js'\nimport Tabs from './modules/tabs.js'\n\nimport { IN_BROWSER, deprecationWarn, DOCS_HOST, inIframe } from './utils.js'\nimport FeatureFlags, { IFeatureFlag } from './modules/featureFlags.js'\nimport type { Options as AppOptions } from './app/index.js'\nimport type { Options as ConsoleOptions } from './modules/console.js'\nimport type { Options as ExceptionOptions } from './modules/exception.js'\nimport type { Options as InputOptions } from './modules/input.js'\nimport type { Options as PerformanceOptions } from './modules/performance.js'\nimport type { Options as TimingOptions } from './modules/timing.js'\nimport type { Options as NetworkOptions } from './modules/network.js'\nimport type { MouseHandlerOptions } from './modules/mouse.js'\nimport type { SessionInfo } from './app/session.js'\n\nimport type { StartOptions } from './app/index.js'\n//TODO: unique options init\nimport type { StartPromiseReturn } from './app/index.js'\n\nexport type Options = Partial<\n AppOptions & ConsoleOptions & ExceptionOptions & InputOptions & PerformanceOptions & TimingOptions\n> & {\n projectID?: number // For the back compatibility only (deprecated)\n projectKey: string\n sessionToken?: string\n respectDoNotTrack?: boolean\n autoResetOnWindowOpen?: boolean\n resetTabOnWindowOpen?: boolean\n network?: Partial<NetworkOptions>\n mouse?: Partial<MouseHandlerOptions>\n flags?: {\n onFlagsLoad?: (flags: IFeatureFlag[]) => void\n }\n // dev only\n __DISABLE_SECURE_MODE?: boolean\n}\n\nconst DOCS_SETUP = '/installation/javascript-sdk'\n\nfunction processOptions(obj: any): obj is Options {\n if (obj == null) {\n console.error(\n `OpenReplay: invalid options argument type. Please, check documentation on ${DOCS_HOST}${DOCS_SETUP}`,\n )\n return false\n }\n if (typeof obj.projectKey !== 'string') {\n if (typeof obj.projectKey !== 'number') {\n if (typeof obj.projectID !== 'number') {\n // Back compatability\n console.error(\n `OpenReplay: projectKey is missing or wrong type (string is expected). Please, check ${DOCS_HOST}${DOCS_SETUP} for more information.`,\n )\n return false\n } else {\n obj.projectKey = obj.projectID.toString()\n deprecationWarn('`projectID` option', '`projectKey` option', DOCS_SETUP)\n }\n } else {\n console.warn('OpenReplay: projectKey is expected to have a string type.')\n obj.projectKey = obj.projectKey.toString()\n }\n }\n if (obj.sessionToken != null) {\n deprecationWarn('`sessionToken` option', '`sessionHash` start() option', '/')\n }\n return true\n}\n\nconst canAccessTop = () => {\n try {\n return Boolean(window.top)\n } catch {\n return false\n }\n}\n\nexport default class API {\n public featureFlags: FeatureFlags\n\n private readonly app: App | null = null\n private readonly crossdomainMode: boolean = false\n\n constructor(private readonly options: Options) {\n this.crossdomainMode = Boolean(inIframe() && options.crossdomain?.enabled)\n if (!IN_BROWSER || !processOptions(options)) {\n console.error('OpenReplay: tracker called in a non-browser environment or with invalid options')\n return\n }\n if (\n (window as any).__OPENREPLAY__ ||\n (!this.crossdomainMode && inIframe() && canAccessTop() && (window.top as any)?.__OPENREPLAY__)\n ) {\n console.error('OpenReplay: one tracker instance has been initialised already')\n return\n }\n if (!options.__DISABLE_SECURE_MODE && location.protocol !== 'https:') {\n console.error(\n 'OpenReplay: Your website must be publicly accessible and running on SSL in order for OpenReplay to properly capture and replay the user session. You can disable this check by setting `__DISABLE_SECURE_MODE` option to `true` if you are testing in localhost. Keep in mind, that asset files on a local machine are not available to the outside world. This might affect tracking if you use css files.',\n )\n return\n }\n const doNotTrack = this.checkDoNotTrack()\n const failReason: string[] = []\n const conditions: string[] = [\n 'Map',\n 'Set',\n 'MutationObserver',\n 'performance',\n 'timing',\n 'startsWith',\n 'Blob',\n 'Worker',\n ]\n\n if (doNotTrack) {\n failReason.push('doNotTrack')\n } else {\n for (const condition of conditions) {\n if (condition === 'timing') {\n if ('performance' in window && !(condition in performance)) {\n failReason.push(condition)\n break\n }\n } else if (condition === 'startsWith') {\n if (!(condition in String.prototype)) {\n failReason.push(condition)\n break\n }\n } else {\n if (!(condition in window)) {\n failReason.push(condition)\n break\n }\n }\n }\n }\n if (failReason.length > 0) {\n const missingApi = failReason.join(',')\n console.error(\n `OpenReplay: browser doesn't support API required for tracking or doNotTrack is set to 1. Reason: ${missingApi}`,\n )\n this.signalStartIssue('missing_api', failReason)\n return\n }\n\n const app = new App(\n options.projectKey,\n options.sessionToken,\n options,\n this.signalStartIssue,\n this.crossdomainMode,\n )\n this.app = app\n if (!this.crossdomainMode) {\n // no need to send iframe viewport data since its a node for us\n Viewport(app)\n // calculated in main window\n Connection(app)\n // while we can calculate it here, trying to compute it for all parts is hard\n Performance(app, options)\n // no tabs in iframes yet\n Tabs(app)\n }\n Mouse(app, options.mouse)\n // inside iframe, we ignore viewport scroll\n Scroll(app, this.crossdomainMode)\n CSSRules(app)\n ConstructedStyleSheets(app)\n Console(app, options)\n Exception(app, options)\n Img(app)\n Input(app, options)\n Timing(app, options)\n Focus(app)\n Fonts(app)\n Network(app, options.network)\n Selection(app)\n ;(window as any).__OPENREPLAY__ = this\n\n if (options.flags && options.flags.onFlagsLoad) {\n this.onFlagsLoad(options.flags.onFlagsLoad)\n }\n const wOpen = window.open\n if (options.autoResetOnWindowOpen || options.resetTabOnWindowOpen) {\n app.attachStartCallback(() => {\n const tabId = app.getTabId()\n const sessStorage = app.sessionStorage ?? window.sessionStorage\n window.open = function (...args) {\n if (options.autoResetOnWindowOpen) {\n app.resetNextPageSession(true)\n }\n if (options.resetTabOnWindowOpen) {\n sessStorage.removeItem(options.session_tabid_key || '__openreplay_tabid')\n }\n app.resetNextPageSession(false)\n sessStorage.setItem(options.session_tabid_key || '__openreplay_tabid', tabId)\n return wOpen.call(window, ...args)\n }\n })\n app.attachStopCallback(() => {\n window.open = wOpen\n })\n }\n }\n\n checkDoNotTrack = () => {\n return (\n this.options.respectDoNotTrack &&\n (navigator.doNotTrack == '1' ||\n // @ts-ignore\n window.doNotTrack == '1')\n )\n }\n\n signalStartIssue = (reason: string, missingApi: string[]) => {\n const doNotTrack = this.checkDoNotTrack()\n const req = new XMLHttpRequest()\n const orig = this.options.ingestPoint || DEFAULT_INGEST_POINT\n req.open('POST', orig + '/v1/web/not-started')\n req.send(\n JSON.stringify({\n trackerVersion: 'TRACKER_VERSION',\n projectKey: this.options.projectKey,\n doNotTrack,\n reason: missingApi.length ? `missing api: ${missingApi.join(',')}` : reason,\n }),\n )\n }\n\n isFlagEnabled(flagName: string): boolean {\n return this.featureFlags.isFlagEnabled(flagName)\n }\n\n onFlagsLoad(callback: (flags: IFeatureFlag[]) => void): void {\n this.app?.featureFlags.onFlagsLoad(callback)\n }\n\n clearPersistFlags() {\n this.app?.featureFlags.clearPersistFlags()\n }\n\n reloadFlags() {\n return this.app?.featureFlags.reloadFlags()\n }\n\n getFeatureFlag(flagName: string): IFeatureFlag | undefined {\n return this.app?.featureFlags.getFeatureFlag(flagName)\n }\n\n getAllFeatureFlags() {\n return this.app?.featureFlags.flags\n }\n\n public restartCanvasTracking = () => {\n if (this.app === null) {\n return\n }\n this.app.restartCanvasTracking()\n }\n\n use<T>(fn: (app: App | null, options?: Options) => T): T {\n return fn(this.app, this.options)\n }\n\n isActive(): boolean {\n if (this.app === null) {\n return false\n }\n return this.app.active()\n }\n\n /**\n * Creates a named hook that expects event name, data string and msg direction (up/down),\n * it will skip any message bigger than 5 mb or event name bigger than 255 symbols\n * msg direction is \"down\" (incoming) by default\n *\n * @returns {(msgType: string, data: string, dir: 'up' | 'down') => void}\n * */\n trackWs(channelName: string) {\n if (this.app === null) {\n return\n }\n return this.app.trackWs(channelName)\n }\n\n start(startOpts?: Partial<StartOptions>): Promise<StartPromiseReturn> {\n if (this.browserEnvCheck()) {\n if (this.app === null) {\n return Promise.reject(\"Browser doesn't support required api, or doNotTrack is active.\")\n }\n return this.app.start(startOpts)\n } else {\n return Promise.reject('Trying to start not in browser.')\n }\n }\n\n browserEnvCheck() {\n if (!IN_BROWSER) {\n console.error(\n `OpenReplay: you are trying to start Tracker on a node.js environment. If you want to use OpenReplay with SSR, please, use componentDidMount or useEffect API for placing the \\`tracker.start()\\` line. Check documentation on ${DOCS_HOST}${DOCS_SETUP}`,\n )\n return false\n }\n return true\n }\n\n /**\n * start buffering messages without starting the actual session, which gives user 30 seconds to \"activate\" and record\n * session by calling start() on conditional trigger and we will then send buffered batch, so it won't get lost\n * */\n coldStart(startOpts?: Partial<StartOptions>, conditional?: boolean) {\n if (this.browserEnvCheck()) {\n if (this.app === null) {\n return Promise.reject('Tracker not initialized')\n }\n void this.app.coldStart(startOpts, conditional)\n } else {\n return Promise.reject('Trying to start not in browser.')\n }\n }\n\n /**\n * Starts offline session recording. Keep in mind that only user device time will be used for timestamps.\n * (no backend delay sync)\n *\n * @param {Object} startOpts - options for session start, same as .start()\n * @param {Function} onSessionSent - callback that will be called once session is fully sent\n * @returns methods to manipulate buffer:\n *\n * saveBuffer - to save it in localStorage\n *\n * getBuffer - returns current buffer\n *\n * setBuffer - replaces current buffer with given\n * */\n startOfflineRecording(startOpts: Partial<StartOptions>, onSessionSent: () => void) {\n if (this.browserEnvCheck()) {\n if (this.app === null) {\n return Promise.reject('Tracker not initialized')\n }\n return this.app.offlineRecording(startOpts, onSessionSent)\n } else {\n return Promise.reject('Trying to start not in browser.')\n }\n }\n\n /**\n * Uploads the stored session buffer to backend\n * @returns promise that resolves once messages are loaded, it has to be awaited\n * so the session can be uploaded properly\n * @resolve - if messages were loaded into service worker successfully\n * @reject {string} - error message\n * */\n uploadOfflineRecording() {\n if (this.app === null) {\n return\n }\n return this.app.uploadOfflineRecording()\n }\n\n stop(): string | undefined {\n if (this.app === null) {\n return\n }\n this.app.stop()\n return this.app.session.getSessionHash()\n }\n\n forceFlushBatch() {\n if (this.app === null) {\n return\n }\n this.app.forceFlushBatch()\n }\n\n getSessionToken(): string | null | undefined {\n if (this.app === null) {\n return null\n }\n return this.app.getSessionToken()\n }\n\n getSessionInfo(): SessionInfo | null {\n if (this.app === null) {\n return null\n }\n return this.app.session.getInfo()\n }\n\n getSessionID(): string | null | undefined {\n if (this.app === null) {\n return null\n }\n return this.app.getSessionID()\n }\n\n getTabId() {\n if (this.app === null) {\n return null\n }\n return this.app.getTabId()\n }\n\n getUxId() {\n if (this.app === null) {\n return null\n }\n return this.app.getUxtId()\n }\n\n sessionID(): string | null | undefined {\n deprecationWarn(\"'sessionID' method\", \"'getSessionID' method\", '/')\n return this.getSessionID()\n }\n\n getSessionURL(options?: { withCurrentTime?: boolean }): string | undefined {\n if (this.app === null) {\n return undefined\n }\n return this.app.getSessionURL(options)\n }\n\n setUserID(id: string): void {\n if (typeof id === 'string' && this.app !== null) {\n this.app.session.setUserID(id)\n }\n }\n\n userID(id: string): void {\n deprecationWarn(\"'userID' method\", \"'setUserID' method\", '/')\n this.setUserID(id)\n }\n\n setUserAnonymousID(id: string): void {\n if (typeof id === 'string' && this.app !== null) {\n this.app.send(UserAnonymousID(id))\n }\n }\n\n userAnonymousID(id: string): void {\n deprecationWarn(\"'userAnonymousID' method\", \"'setUserAnonymousID' method\", '/')\n this.setUserAnonymousID(id)\n }\n\n setMetadata(key: string, value: string): void {\n if (typeof key === 'string' && typeof value === 'string' && this.app !== null) {\n this.app.session.setMetadata(key, value)\n }\n }\n\n metadata(key: string, value: string): void {\n deprecationWarn(\"'metadata' method\", \"'setMetadata' method\", '/')\n this.setMetadata(key, value)\n }\n\n event(key: string, payload: any = null, issue = false): void {\n if (typeof key === 'string' && this.app !== null) {\n if (issue) {\n return this.issue(key, payload)\n } else {\n try {\n payload = JSON.stringify(payload)\n } catch (e) {\n return\n }\n this.app.send(CustomEvent(key, payload))\n }\n }\n }\n\n issue(key: string, payload: any = null): void {\n if (typeof key === 'string' && this.app !== null) {\n try {\n payload = JSON.stringify(payload)\n } catch (e) {\n return\n }\n this.app.send(CustomIssue(key, payload))\n }\n }\n\n handleError = (\n e: Error | ErrorEvent | PromiseRejectionEvent,\n metadata: Record<string, any> = {},\n ) => {\n if (this.app === null) {\n return\n }\n if (e instanceof Error) {\n const msg = getExceptionMessage(e, [], metadata)\n this.app.send(msg)\n } else if (\n e instanceof ErrorEvent ||\n ('PromiseRejectionEvent' in window && e instanceof PromiseRejectionEvent)\n ) {\n const msg = getExceptionMessageFromEvent(e, undefined, metadata)\n if (msg != null) {\n this.app.send(msg)\n }\n }\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/main/index.ts"],"sourcesContent":["import App, { DEFAULT_INGEST_POINT } from './app/index.js'\n\nexport { default as App } from './app/index.js'\n\nimport { UserAnonymousID, CustomEvent, CustomIssue } from './app/messages.gen.js'\nimport * as _Messages from './app/messages.gen.js'\n\nexport const Messages = _Messages\nexport { SanitizeLevel } from './app/sanitizer.js'\n\nimport Connection from './modules/connection.js'\nimport Console from './modules/console.js'\nimport Exception, {\n getExceptionMessageFromEvent,\n getExceptionMessage,\n} from './modules/exception.js'\nimport Img from './modules/img.js'\nimport Input from './modules/input.js'\nimport Mouse from './modules/mouse.js'\nimport Timing from './modules/timing.js'\nimport Performance from './modules/performance.js'\nimport Scroll from './modules/scroll.js'\nimport Viewport from './modules/viewport.js'\nimport CSSRules from './modules/cssrules.js'\nimport Focus from './modules/focus.js'\nimport Fonts from './modules/fonts.js'\nimport Network from './modules/network.js'\nimport ConstructedStyleSheets from './modules/constructedStyleSheets.js'\nimport Selection from './modules/selection.js'\nimport Tabs from './modules/tabs.js'\n\nimport { IN_BROWSER, deprecationWarn, DOCS_HOST, inIframe } from './utils.js'\nimport FeatureFlags, { IFeatureFlag } from './modules/featureFlags.js'\nimport type { Options as AppOptions } from './app/index.js'\nimport type { Options as ConsoleOptions } from './modules/console.js'\nimport type { Options as ExceptionOptions } from './modules/exception.js'\nimport type { Options as InputOptions } from './modules/input.js'\nimport type { Options as PerformanceOptions } from './modules/performance.js'\nimport type { Options as TimingOptions } from './modules/timing.js'\nimport type { Options as NetworkOptions } from './modules/network.js'\nimport type { MouseHandlerOptions } from './modules/mouse.js'\nimport type { SessionInfo } from './app/session.js'\n\nimport type { StartOptions } from './app/index.js'\n//TODO: unique options init\nimport type { StartPromiseReturn } from './app/index.js'\n\nexport type Options = Partial<\n AppOptions & ConsoleOptions & ExceptionOptions & InputOptions & PerformanceOptions & TimingOptions\n> & {\n projectID?: number // For the back compatibility only (deprecated)\n projectKey: string\n sessionToken?: string\n respectDoNotTrack?: boolean\n autoResetOnWindowOpen?: boolean\n resetTabOnWindowOpen?: boolean\n network?: Partial<NetworkOptions>\n mouse?: Partial<MouseHandlerOptions>\n flags?: {\n onFlagsLoad?: (flags: IFeatureFlag[]) => void\n }\n // dev only\n __DISABLE_SECURE_MODE?: boolean\n}\n\nconst DOCS_SETUP = '/installation/javascript-sdk'\n\nfunction processOptions(obj: any): obj is Options {\n if (obj == null) {\n console.error(\n `OpenReplay: invalid options argument type. Please, check documentation on ${DOCS_HOST}${DOCS_SETUP}`,\n )\n return false\n }\n if (typeof obj.projectKey !== 'string') {\n if (typeof obj.projectKey !== 'number') {\n if (typeof obj.projectID !== 'number') {\n // Back compatability\n console.error(\n `OpenReplay: projectKey is missing or wrong type (string is expected). Please, check ${DOCS_HOST}${DOCS_SETUP} for more information.`,\n )\n return false\n } else {\n obj.projectKey = obj.projectID.toString()\n deprecationWarn('`projectID` option', '`projectKey` option', DOCS_SETUP)\n }\n } else {\n console.warn('OpenReplay: projectKey is expected to have a string type.')\n obj.projectKey = obj.projectKey.toString()\n }\n }\n if (obj.sessionToken != null) {\n deprecationWarn('`sessionToken` option', '`sessionHash` start() option', '/')\n }\n return true\n}\n\nconst canAccessTop = () => {\n try {\n return Boolean(window.top)\n } catch {\n return false\n }\n}\n\nexport default class API {\n public featureFlags: FeatureFlags\n\n private readonly app: App | null = null\n private readonly crossdomainMode: boolean = false\n\n constructor(private readonly options: Options) {\n this.crossdomainMode = Boolean(inIframe() && options.crossdomain?.enabled)\n if (!IN_BROWSER || !processOptions(options)) {\n return\n }\n if (\n (window as any).__OPENREPLAY__ ||\n (!this.crossdomainMode && inIframe() && canAccessTop() && (window.top as any)?.__OPENREPLAY__)\n ) {\n console.error('OpenReplay: one tracker instance has been initialised already')\n return\n }\n if (!options.__DISABLE_SECURE_MODE && location.protocol !== 'https:') {\n console.error(\n 'OpenReplay: Your website must be publicly accessible and running on SSL in order for OpenReplay to properly capture and replay the user session. You can disable this check by setting `__DISABLE_SECURE_MODE` option to `true` if you are testing in localhost. Keep in mind, that asset files on a local machine are not available to the outside world. This might affect tracking if you use css files.',\n )\n return\n }\n const doNotTrack = this.checkDoNotTrack()\n const failReason: string[] = []\n const conditions: string[] = [\n 'Map',\n 'Set',\n 'MutationObserver',\n 'performance',\n 'timing',\n 'startsWith',\n 'Blob',\n 'Worker',\n ]\n\n if (doNotTrack) {\n failReason.push('doNotTrack')\n } else {\n for (const condition of conditions) {\n if (condition === 'timing') {\n if ('performance' in window && !(condition in performance)) {\n failReason.push(condition)\n break\n }\n } else if (condition === 'startsWith') {\n if (!(condition in String.prototype)) {\n failReason.push(condition)\n break\n }\n } else {\n if (!(condition in window)) {\n failReason.push(condition)\n break\n }\n }\n }\n }\n if (failReason.length > 0) {\n const missingApi = failReason.join(',')\n console.error(\n `OpenReplay: browser doesn't support API required for tracking or doNotTrack is set to 1. Reason: ${missingApi}`,\n )\n this.signalStartIssue('missing_api', failReason)\n return\n }\n\n const app = new App(\n options.projectKey,\n options.sessionToken,\n options,\n this.signalStartIssue,\n this.crossdomainMode,\n )\n this.app = app\n if (!this.crossdomainMode) {\n // no need to send iframe viewport data since its a node for us\n Viewport(app)\n // calculated in main window\n Connection(app)\n // while we can calculate it here, trying to compute it for all parts is hard\n Performance(app, options)\n // no tabs in iframes yet\n Tabs(app)\n }\n Mouse(app, options.mouse)\n // inside iframe, we ignore viewport scroll\n Scroll(app, this.crossdomainMode)\n CSSRules(app)\n ConstructedStyleSheets(app)\n Console(app, options)\n Exception(app, options)\n Img(app)\n Input(app, options)\n Timing(app, options)\n Focus(app)\n Fonts(app)\n Network(app, options.network)\n Selection(app)\n ;(window as any).__OPENREPLAY__ = this\n\n if (options.flags && options.flags.onFlagsLoad) {\n this.onFlagsLoad(options.flags.onFlagsLoad)\n }\n const wOpen = window.open\n if (options.autoResetOnWindowOpen || options.resetTabOnWindowOpen) {\n app.attachStartCallback(() => {\n const tabId = app.getTabId()\n const sessStorage = app.sessionStorage ?? window.sessionStorage\n window.open = function (...args) {\n if (options.autoResetOnWindowOpen) {\n app.resetNextPageSession(true)\n }\n if (options.resetTabOnWindowOpen) {\n sessStorage.removeItem(options.session_tabid_key || '__openreplay_tabid')\n }\n app.resetNextPageSession(false)\n sessStorage.setItem(options.session_tabid_key || '__openreplay_tabid', tabId)\n return wOpen.call(window, ...args)\n }\n })\n app.attachStopCallback(() => {\n window.open = wOpen\n })\n }\n }\n\n checkDoNotTrack = () => {\n return (\n this.options.respectDoNotTrack &&\n (navigator.doNotTrack == '1' ||\n // @ts-ignore\n window.doNotTrack == '1')\n )\n }\n\n signalStartIssue = (reason: string, missingApi: string[]) => {\n const doNotTrack = this.checkDoNotTrack()\n const req = new XMLHttpRequest()\n const orig = this.options.ingestPoint || DEFAULT_INGEST_POINT\n req.open('POST', orig + '/v1/web/not-started')\n req.send(\n JSON.stringify({\n trackerVersion: 'TRACKER_VERSION',\n projectKey: this.options.projectKey,\n doNotTrack,\n reason: missingApi.length ? `missing api: ${missingApi.join(',')}` : reason,\n }),\n )\n }\n\n isFlagEnabled(flagName: string): boolean {\n return this.featureFlags.isFlagEnabled(flagName)\n }\n\n onFlagsLoad(callback: (flags: IFeatureFlag[]) => void): void {\n this.app?.featureFlags.onFlagsLoad(callback)\n }\n\n clearPersistFlags() {\n this.app?.featureFlags.clearPersistFlags()\n }\n\n reloadFlags() {\n return this.app?.featureFlags.reloadFlags()\n }\n\n getFeatureFlag(flagName: string): IFeatureFlag | undefined {\n return this.app?.featureFlags.getFeatureFlag(flagName)\n }\n\n getAllFeatureFlags() {\n return this.app?.featureFlags.flags\n }\n\n public restartCanvasTracking = () => {\n if (this.app === null) {\n return\n }\n this.app.restartCanvasTracking()\n }\n\n use<T>(fn: (app: App | null, options?: Options) => T): T {\n return fn(this.app, this.options)\n }\n\n isActive(): boolean {\n if (this.app === null) {\n return false\n }\n return this.app.active()\n }\n\n /**\n * Creates a named hook that expects event name, data string and msg direction (up/down),\n * it will skip any message bigger than 5 mb or event name bigger than 255 symbols\n * msg direction is \"down\" (incoming) by default\n *\n * @returns {(msgType: string, data: string, dir: 'up' | 'down') => void}\n * */\n trackWs(channelName: string) {\n if (this.app === null) {\n return\n }\n return this.app.trackWs(channelName)\n }\n\n start(startOpts?: Partial<StartOptions>): Promise<StartPromiseReturn> {\n if (this.browserEnvCheck()) {\n if (this.app === null) {\n return Promise.reject(\"Browser doesn't support required api, or doNotTrack is active.\")\n }\n return this.app.start(startOpts)\n } else {\n return Promise.reject('Trying to start not in browser.')\n }\n }\n\n browserEnvCheck() {\n if (!IN_BROWSER) {\n console.error(\n `OpenReplay: you are trying to start Tracker on a node.js environment. If you want to use OpenReplay with SSR, please, use componentDidMount or useEffect API for placing the \\`tracker.start()\\` line. Check documentation on ${DOCS_HOST}${DOCS_SETUP}`,\n )\n return false\n }\n return true\n }\n\n /**\n * start buffering messages without starting the actual session, which gives user 30 seconds to \"activate\" and record\n * session by calling start() on conditional trigger and we will then send buffered batch, so it won't get lost\n * */\n coldStart(startOpts?: Partial<StartOptions>, conditional?: boolean) {\n if (this.browserEnvCheck()) {\n if (this.app === null) {\n return Promise.reject('Tracker not initialized')\n }\n void this.app.coldStart(startOpts, conditional)\n } else {\n return Promise.reject('Trying to start not in browser.')\n }\n }\n\n /**\n * Starts offline session recording. Keep in mind that only user device time will be used for timestamps.\n * (no backend delay sync)\n *\n * @param {Object} startOpts - options for session start, same as .start()\n * @param {Function} onSessionSent - callback that will be called once session is fully sent\n * @returns methods to manipulate buffer:\n *\n * saveBuffer - to save it in localStorage\n *\n * getBuffer - returns current buffer\n *\n * setBuffer - replaces current buffer with given\n * */\n startOfflineRecording(startOpts: Partial<StartOptions>, onSessionSent: () => void) {\n if (this.browserEnvCheck()) {\n if (this.app === null) {\n return Promise.reject('Tracker not initialized')\n }\n return this.app.offlineRecording(startOpts, onSessionSent)\n } else {\n return Promise.reject('Trying to start not in browser.')\n }\n }\n\n /**\n * Uploads the stored session buffer to backend\n * @returns promise that resolves once messages are loaded, it has to be awaited\n * so the session can be uploaded properly\n * @resolve - if messages were loaded into service worker successfully\n * @reject {string} - error message\n * */\n uploadOfflineRecording() {\n if (this.app === null) {\n return\n }\n return this.app.uploadOfflineRecording()\n }\n\n stop(): string | undefined {\n if (this.app === null) {\n return\n }\n this.app.stop()\n return this.app.session.getSessionHash()\n }\n\n forceFlushBatch() {\n if (this.app === null) {\n return\n }\n this.app.forceFlushBatch()\n }\n\n getSessionToken(): string | null | undefined {\n if (this.app === null) {\n return null\n }\n return this.app.getSessionToken()\n }\n\n getSessionInfo(): SessionInfo | null {\n if (this.app === null) {\n return null\n }\n return this.app.session.getInfo()\n }\n\n getSessionID(): string | null | undefined {\n if (this.app === null) {\n return null\n }\n return this.app.getSessionID()\n }\n\n getTabId() {\n if (this.app === null) {\n return null\n }\n return this.app.getTabId()\n }\n\n getUxId() {\n if (this.app === null) {\n return null\n }\n return this.app.getUxtId()\n }\n\n sessionID(): string | null | undefined {\n deprecationWarn(\"'sessionID' method\", \"'getSessionID' method\", '/')\n return this.getSessionID()\n }\n\n getSessionURL(options?: { withCurrentTime?: boolean }): string | undefined {\n if (this.app === null) {\n return undefined\n }\n return this.app.getSessionURL(options)\n }\n\n setUserID(id: string): void {\n if (typeof id === 'string' && this.app !== null) {\n this.app.session.setUserID(id)\n }\n }\n\n userID(id: string): void {\n deprecationWarn(\"'userID' method\", \"'setUserID' method\", '/')\n this.setUserID(id)\n }\n\n setUserAnonymousID(id: string): void {\n if (typeof id === 'string' && this.app !== null) {\n this.app.send(UserAnonymousID(id))\n }\n }\n\n userAnonymousID(id: string): void {\n deprecationWarn(\"'userAnonymousID' method\", \"'setUserAnonymousID' method\", '/')\n this.setUserAnonymousID(id)\n }\n\n setMetadata(key: string, value: string): void {\n if (typeof key === 'string' && typeof value === 'string' && this.app !== null) {\n this.app.session.setMetadata(key, value)\n }\n }\n\n metadata(key: string, value: string): void {\n deprecationWarn(\"'metadata' method\", \"'setMetadata' method\", '/')\n this.setMetadata(key, value)\n }\n\n event(key: string, payload: any = null, issue = false): void {\n if (typeof key === 'string' && this.app !== null) {\n if (issue) {\n return this.issue(key, payload)\n } else {\n try {\n payload = JSON.stringify(payload)\n } catch (e) {\n return\n }\n this.app.send(CustomEvent(key, payload))\n }\n }\n }\n\n issue(key: string, payload: any = null): void {\n if (typeof key === 'string' && this.app !== null) {\n try {\n payload = JSON.stringify(payload)\n } catch (e) {\n return\n }\n this.app.send(CustomIssue(key, payload))\n }\n }\n\n handleError = (\n e: Error | ErrorEvent | PromiseRejectionEvent,\n metadata: Record<string, any> = {},\n ) => {\n if (this.app === null) {\n return\n }\n if (e instanceof Error) {\n const msg = getExceptionMessage(e, [], metadata)\n this.app.send(msg)\n } else if (\n e instanceof ErrorEvent ||\n ('PromiseRejectionEvent' in window && e instanceof PromiseRejectionEvent)\n ) {\n const msg = getExceptionMessageFromEvent(e, undefined, metadata)\n if (msg != null) {\n this.app.send(msg)\n }\n }\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -37,8 +37,10 @@ export declare function MobX(type: string, payload: string): Messages.MobX;
|
|
|
37
37
|
export declare function NgRx(action: string, state: string, duration: number): Messages.NgRx;
|
|
38
38
|
export declare function GraphQLDeprecated(operationKind: string, operationName: string, variables: string, response: string, duration: number): Messages.GraphQLDeprecated;
|
|
39
39
|
export declare function PerformanceTrack(frames: number, ticks: number, totalJSHeapSize: number, usedJSHeapSize: number): Messages.PerformanceTrack;
|
|
40
|
-
export declare function
|
|
41
|
-
export declare function
|
|
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;
|
|
42
44
|
export declare function ResourceTimingDeprecated(timestamp: number, duration: number, ttfb: number, headerSize: number, encodedBodySize: number, decodedBodySize: number, url: string, initiator: string): Messages.ResourceTimingDeprecated;
|
|
43
45
|
export declare function ConnectionInformation(downlink: number, type: string): Messages.ConnectionInformation;
|
|
44
46
|
export declare function SetPageVisibility(hidden: boolean): Messages.SetPageVisibility;
|
|
@@ -76,3 +78,4 @@ export declare function TagTrigger(tagId: number): Messages.TagTrigger;
|
|
|
76
78
|
export declare function Redux(action: string, state: string, duration: number, actionTime: number): Messages.Redux;
|
|
77
79
|
export declare function SetPageLocation(url: string, referrer: string, navigationStart: number, documentTitle: string): Messages.SetPageLocation;
|
|
78
80
|
export declare function GraphQL(operationKind: string, operationName: string, variables: string, response: string, duration: number): Messages.GraphQL;
|
|
81
|
+
export declare function WebVitals(name: string, value: string): Messages.WebVitals;
|
|
@@ -16,7 +16,7 @@ export default class Nodes {
|
|
|
16
16
|
private readonly maintainer;
|
|
17
17
|
constructor(params: NodesOptions);
|
|
18
18
|
syntheticMode(frameOrder: number): void;
|
|
19
|
-
attachNodeCallback(nodeCallback: NodeCallback)
|
|
19
|
+
attachNodeCallback: (nodeCallback: NodeCallback) => number;
|
|
20
20
|
scanTree: (cb: (node: Node | void) => void) => void;
|
|
21
21
|
attachNodeListener: (node: Node, type: string, listener: EventListener, useCapture?: boolean) => void;
|
|
22
22
|
registerNode(node: Node): [/*id:*/ number, /*isNew:*/ boolean];
|
|
@@ -5,8 +5,28 @@ export declare enum SanitizeLevel {
|
|
|
5
5
|
Hidden = 2
|
|
6
6
|
}
|
|
7
7
|
export interface Options {
|
|
8
|
+
/**
|
|
9
|
+
* Sanitize emails in text DOM nodes
|
|
10
|
+
*
|
|
11
|
+
* (for inputs, look for obscureInputEmails)
|
|
12
|
+
* */
|
|
8
13
|
obscureTextEmails: boolean;
|
|
14
|
+
/**
|
|
15
|
+
* Sanitize emails in text DOM nodes
|
|
16
|
+
*
|
|
17
|
+
* (for inputs, look for obscureInputNumbers)
|
|
18
|
+
* */
|
|
9
19
|
obscureTextNumbers: boolean;
|
|
20
|
+
/**
|
|
21
|
+
* Sanitize the DOM node based on the returned level
|
|
22
|
+
* (Plain = 0, Obscured = 1, Hidden = 2)
|
|
23
|
+
*
|
|
24
|
+
* higher security levels will override other settings or data-params.
|
|
25
|
+
*
|
|
26
|
+
* @param node - the DOM node to sanitize
|
|
27
|
+
* @returns the level of sanitization to apply
|
|
28
|
+
*
|
|
29
|
+
* */
|
|
10
30
|
domSanitizer?: (node: Element) => SanitizeLevel;
|
|
11
31
|
}
|
|
12
32
|
export declare const stringWiper: (input: string) => string;
|
|
@@ -42,8 +42,8 @@ export default class Session {
|
|
|
42
42
|
setMetadata(key: string, value: string): void;
|
|
43
43
|
setUserID(userID: string): void;
|
|
44
44
|
setUserInfo(userInfo: UserInfo): void;
|
|
45
|
-
|
|
46
|
-
incPageNo()
|
|
45
|
+
getPageNumber: () => number | undefined;
|
|
46
|
+
incPageNo: () => number;
|
|
47
47
|
getSessionToken(): string | undefined;
|
|
48
48
|
setSessionToken(token: string): void;
|
|
49
49
|
applySessionHash(hash: string): void;
|
|
@@ -1,8 +1,13 @@
|
|
|
1
1
|
import App from '../app/index.js';
|
|
2
2
|
export declare class StringDictionary {
|
|
3
|
+
private readonly getPageNo;
|
|
3
4
|
private idx;
|
|
5
|
+
/** backwards dictionary of
|
|
6
|
+
* [repeated str:key]
|
|
7
|
+
* */
|
|
4
8
|
private backDict;
|
|
5
|
-
|
|
9
|
+
constructor(getPageNo: () => number | undefined);
|
|
10
|
+
getKey: (str: string) => [string, boolean];
|
|
6
11
|
}
|
|
7
12
|
export default class AttributeSender {
|
|
8
13
|
private dict;
|
|
@@ -12,7 +17,7 @@ export default class AttributeSender {
|
|
|
12
17
|
app: App;
|
|
13
18
|
isDictDisabled: boolean;
|
|
14
19
|
});
|
|
15
|
-
sendSetAttribute(id: number, name: string, value: string)
|
|
20
|
+
sendSetAttribute: (id: number, name: string, value: string) => void;
|
|
16
21
|
private applyDict;
|
|
17
22
|
clear(): void;
|
|
18
23
|
}
|
|
@@ -8,10 +8,27 @@ export declare const InputMode: {
|
|
|
8
8
|
};
|
|
9
9
|
export type InputModeT = (typeof InputMode)[keyof typeof InputMode];
|
|
10
10
|
export interface Options {
|
|
11
|
+
/**
|
|
12
|
+
* Sanitize numbers from DOM input nodes.
|
|
13
|
+
*
|
|
14
|
+
* (for plain text nodes, look for obscureTextNumbers)
|
|
15
|
+
* */
|
|
11
16
|
obscureInputNumbers: boolean;
|
|
17
|
+
/**
|
|
18
|
+
* Sanitize emails from DOM input nodes.
|
|
19
|
+
*
|
|
20
|
+
* (for plain text nodes, look for obscureTextEmails)
|
|
21
|
+
* */
|
|
12
22
|
obscureInputEmails: boolean;
|
|
13
|
-
|
|
23
|
+
/**
|
|
24
|
+
* Sanitize dates from DOM input nodes.
|
|
25
|
+
* */
|
|
14
26
|
obscureInputDates: boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Default input mode for all input nodes. Higher security level
|
|
29
|
+
* will override other settings.
|
|
30
|
+
* */
|
|
31
|
+
defaultInputMode: InputModeT;
|
|
15
32
|
}
|
|
16
33
|
export default function (app: App, opts: Partial<Options>): void;
|
|
17
34
|
export {};
|
|
@@ -36,8 +36,10 @@ export declare const enum Type {
|
|
|
36
36
|
NgRx = 47,
|
|
37
37
|
GraphQLDeprecated = 48,
|
|
38
38
|
PerformanceTrack = 49,
|
|
39
|
-
|
|
40
|
-
|
|
39
|
+
StringDictDeprecated = 50,
|
|
40
|
+
SetNodeAttributeDictDeprecated = 51,
|
|
41
|
+
StringDict = 43,
|
|
42
|
+
SetNodeAttributeDict = 52,
|
|
41
43
|
ResourceTimingDeprecated = 53,
|
|
42
44
|
ConnectionInformation = 54,
|
|
43
45
|
SetPageVisibility = 55,
|
|
@@ -74,7 +76,8 @@ export declare const enum Type {
|
|
|
74
76
|
TagTrigger = 120,
|
|
75
77
|
Redux = 121,
|
|
76
78
|
SetPageLocation = 122,
|
|
77
|
-
GraphQL = 123
|
|
79
|
+
GraphQL = 123,
|
|
80
|
+
WebVitals = 124
|
|
78
81
|
}
|
|
79
82
|
export type Timestamp = [
|
|
80
83
|
Type.Timestamp,
|
|
@@ -292,16 +295,27 @@ export type PerformanceTrack = [
|
|
|
292
295
|
number,
|
|
293
296
|
number
|
|
294
297
|
];
|
|
298
|
+
export type StringDictDeprecated = [
|
|
299
|
+
Type.StringDictDeprecated,
|
|
300
|
+
number,
|
|
301
|
+
string
|
|
302
|
+
];
|
|
303
|
+
export type SetNodeAttributeDictDeprecated = [
|
|
304
|
+
Type.SetNodeAttributeDictDeprecated,
|
|
305
|
+
number,
|
|
306
|
+
number,
|
|
307
|
+
number
|
|
308
|
+
];
|
|
295
309
|
export type StringDict = [
|
|
296
310
|
Type.StringDict,
|
|
297
|
-
|
|
311
|
+
string,
|
|
298
312
|
string
|
|
299
313
|
];
|
|
300
314
|
export type SetNodeAttributeDict = [
|
|
301
315
|
Type.SetNodeAttributeDict,
|
|
302
316
|
number,
|
|
303
|
-
|
|
304
|
-
|
|
317
|
+
string,
|
|
318
|
+
string
|
|
305
319
|
];
|
|
306
320
|
export type ResourceTimingDeprecated = [
|
|
307
321
|
Type.ResourceTimingDeprecated,
|
|
@@ -544,5 +558,10 @@ export type GraphQL = [
|
|
|
544
558
|
string,
|
|
545
559
|
number
|
|
546
560
|
];
|
|
547
|
-
type
|
|
561
|
+
export type WebVitals = [
|
|
562
|
+
Type.WebVitals,
|
|
563
|
+
string,
|
|
564
|
+
string
|
|
565
|
+
];
|
|
566
|
+
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 | 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;
|
|
548
567
|
export default Message;
|