@amplitude/session-replay-browser 1.29.3 → 1.29.4
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/lib/cjs/hooks/click.d.ts +10 -4
- package/lib/cjs/hooks/click.d.ts.map +1 -1
- package/lib/cjs/hooks/click.js +55 -49
- package/lib/cjs/hooks/click.js.map +1 -1
- package/lib/cjs/hooks/scroll.d.ts +4 -0
- package/lib/cjs/hooks/scroll.d.ts.map +1 -1
- package/lib/cjs/hooks/scroll.js +18 -0
- package/lib/cjs/hooks/scroll.js.map +1 -1
- package/lib/cjs/session-replay.d.ts +1 -0
- package/lib/cjs/session-replay.d.ts.map +1 -1
- package/lib/cjs/session-replay.js +21 -20
- package/lib/cjs/session-replay.js.map +1 -1
- package/lib/cjs/utils/rrweb.d.ts +0 -4
- package/lib/cjs/utils/rrweb.d.ts.map +1 -1
- package/lib/cjs/utils/rrweb.js +1 -27
- package/lib/cjs/utils/rrweb.js.map +1 -1
- package/lib/cjs/version.d.ts +1 -1
- package/lib/cjs/version.js +1 -1
- package/lib/cjs/version.js.map +1 -1
- package/lib/esm/hooks/click.d.ts +10 -4
- package/lib/esm/hooks/click.d.ts.map +1 -1
- package/lib/esm/hooks/click.js +54 -47
- package/lib/esm/hooks/click.js.map +1 -1
- package/lib/esm/hooks/scroll.d.ts +4 -0
- package/lib/esm/hooks/scroll.d.ts.map +1 -1
- package/lib/esm/hooks/scroll.js +18 -0
- package/lib/esm/hooks/scroll.js.map +1 -1
- package/lib/esm/session-replay.d.ts +1 -0
- package/lib/esm/session-replay.d.ts.map +1 -1
- package/lib/esm/session-replay.js +22 -21
- package/lib/esm/session-replay.js.map +1 -1
- package/lib/esm/utils/rrweb.d.ts +0 -4
- package/lib/esm/utils/rrweb.d.ts.map +1 -1
- package/lib/esm/utils/rrweb.js +0 -24
- package/lib/esm/utils/rrweb.js.map +1 -1
- package/lib/esm/version.d.ts +1 -1
- package/lib/esm/version.js +1 -1
- package/lib/esm/version.js.map +1 -1
- package/lib/scripts/index-min.js +1 -1
- package/lib/scripts/index-min.js.gz +0 -0
- package/lib/scripts/index-min.js.map +1 -1
- package/lib/scripts/session-replay-browser-min.js +1 -1
- package/lib/scripts/session-replay-browser-min.js.gz +0 -0
- package/lib/scripts/session-replay-browser-min.js.map +1 -1
- package/package.json +4 -4
package/lib/cjs/hooks/click.d.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import type { mouseInteractionCallBack } from '@amplitude/rrweb-types';
|
|
2
2
|
import { Mirror } from '../utils/rrweb';
|
|
3
3
|
import { SessionReplayEventsManager as AmplitudeSessionReplayEventsManager } from '../typings/session-replay';
|
|
4
|
-
import { PayloadBatcher } from '
|
|
4
|
+
import { PayloadBatcher } from '../track-destination';
|
|
5
5
|
import { ILogger } from '@amplitude/analytics-core';
|
|
6
|
-
import { UGCFilterRule } from '
|
|
6
|
+
import { UGCFilterRule } from '../config/types';
|
|
7
|
+
import { ScrollWatcher } from './scroll';
|
|
7
8
|
export type ClickEvent = {
|
|
8
9
|
timestamp: number;
|
|
9
10
|
x: number;
|
|
@@ -17,7 +18,7 @@ export type ClickEvent = {
|
|
|
17
18
|
export type ClickEventWithCount = ClickEvent & {
|
|
18
19
|
count: number;
|
|
19
20
|
};
|
|
20
|
-
type
|
|
21
|
+
type Context = {
|
|
21
22
|
sessionId: string | number;
|
|
22
23
|
deviceIdFn: () => string | undefined;
|
|
23
24
|
eventsManager: AmplitudeSessionReplayEventsManager<'interaction', string>;
|
|
@@ -26,6 +27,11 @@ type Options = {
|
|
|
26
27
|
};
|
|
27
28
|
export declare const clickNonBatcher: PayloadBatcher;
|
|
28
29
|
export declare const clickBatcher: PayloadBatcher;
|
|
29
|
-
export declare
|
|
30
|
+
export declare class ClickHandler {
|
|
31
|
+
private readonly logger;
|
|
32
|
+
private readonly scrollWatcher;
|
|
33
|
+
constructor(logger: ILogger, scrollWatcher: ScrollWatcher);
|
|
34
|
+
createHook: (context: Context) => mouseInteractionCallBack;
|
|
35
|
+
}
|
|
30
36
|
export {};
|
|
31
37
|
//# sourceMappingURL=click.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"click.d.ts","sourceRoot":"","sources":["../../../src/hooks/click.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAEvE,OAAO,
|
|
1
|
+
{"version":3,"file":"click.d.ts","sourceRoot":"","sources":["../../../src/hooks/click.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAEvE,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,0BAA0B,IAAI,mCAAmC,EAAE,MAAM,2BAA2B,CAAC;AAC9G,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,EAAkB,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAGzC,MAAM,MAAM,UAAU,GAAG;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,OAAO,CAAC;CACf,CAAC;AAGF,MAAM,MAAM,mBAAmB,GAAG,UAAU,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjE,KAAK,OAAO,GAAG;IACb,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3B,UAAU,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;IACrC,aAAa,EAAE,mCAAmC,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IAC1E,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,aAAa,EAAE,CAAC;CACjC,CAAC;AAIF,eAAO,MAAM,eAAe,EAAE,cAU7B,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,cAyB1B,CAAC;AAEF,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAU;IACjC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;gBAElC,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,aAAa;IAKzD,UAAU,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,wBAAwB,CAwDxD;CACH"}
|
package/lib/cjs/hooks/click.js
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.ClickHandler = exports.clickBatcher = exports.clickNonBatcher = void 0;
|
|
4
4
|
var tslib_1 = require("tslib");
|
|
5
5
|
var rrweb_types_1 = require("@amplitude/rrweb-types");
|
|
6
|
-
var rrweb_1 = require("../utils/rrweb");
|
|
7
6
|
var finder_1 = require("../libs/finder");
|
|
8
7
|
var analytics_core_1 = require("@amplitude/analytics-core");
|
|
9
8
|
var helpers_1 = require("../helpers");
|
|
@@ -46,52 +45,59 @@ var clickBatcher = function (_a) {
|
|
|
46
45
|
return { version: version, events: Object.values(reduced) };
|
|
47
46
|
};
|
|
48
47
|
exports.clickBatcher = clickBatcher;
|
|
49
|
-
var
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
selector
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
48
|
+
var ClickHandler = /** @class */ (function () {
|
|
49
|
+
function ClickHandler(logger, scrollWatcher) {
|
|
50
|
+
var _this = this;
|
|
51
|
+
this.createHook = function (_a) {
|
|
52
|
+
var eventsManager = _a.eventsManager, sessionId = _a.sessionId, deviceIdFn = _a.deviceIdFn, mirror = _a.mirror, ugcFilterRules = _a.ugcFilterRules;
|
|
53
|
+
return function (e) {
|
|
54
|
+
if (e.type !== rrweb_types_1.MouseInteractions.Click) {
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
var globalScope = (0, analytics_core_1.getGlobalScope)();
|
|
58
|
+
if (!globalScope) {
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
var location = globalScope.location, innerHeight = globalScope.innerHeight, innerWidth = globalScope.innerWidth;
|
|
62
|
+
// it only makes sense to send events if a pageUrl exists
|
|
63
|
+
if (!location) {
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
var x = e.x, y = e.y;
|
|
67
|
+
if (x === undefined || y === undefined) {
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
var node = mirror.getNode(e.id);
|
|
71
|
+
var selector;
|
|
72
|
+
if (node) {
|
|
73
|
+
try {
|
|
74
|
+
selector = (0, finder_1.finder)(node);
|
|
75
|
+
}
|
|
76
|
+
catch (err) {
|
|
77
|
+
_this.logger.debug('error resolving selector from finder');
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
var pageUrl = (0, helpers_1.getPageUrl)(location.href, ugcFilterRules);
|
|
81
|
+
var event = {
|
|
82
|
+
x: x + _this.scrollWatcher.currentScrollX,
|
|
83
|
+
y: y + _this.scrollWatcher.currentScrollY,
|
|
84
|
+
selector: selector,
|
|
85
|
+
viewportHeight: innerHeight,
|
|
86
|
+
viewportWidth: innerWidth,
|
|
87
|
+
pageUrl: pageUrl,
|
|
88
|
+
timestamp: Date.now(),
|
|
89
|
+
type: 'click',
|
|
90
|
+
};
|
|
91
|
+
var deviceId = deviceIdFn();
|
|
92
|
+
if (deviceId) {
|
|
93
|
+
eventsManager.addEvent({ sessionId: sessionId, event: { type: 'interaction', data: JSON.stringify(event) }, deviceId: deviceId });
|
|
94
|
+
}
|
|
95
|
+
};
|
|
89
96
|
};
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
exports.clickHook = clickHook;
|
|
97
|
+
this.logger = logger;
|
|
98
|
+
this.scrollWatcher = scrollWatcher;
|
|
99
|
+
}
|
|
100
|
+
return ClickHandler;
|
|
101
|
+
}());
|
|
102
|
+
exports.ClickHandler = ClickHandler;
|
|
97
103
|
//# sourceMappingURL=click.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"click.js","sourceRoot":"","sources":["../../../src/hooks/click.ts"],"names":[],"mappings":";;;;AACA,sDAA2D;
|
|
1
|
+
{"version":3,"file":"click.js","sourceRoot":"","sources":["../../../src/hooks/click.ts"],"names":[],"mappings":"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","sourcesContent":["import type { mouseInteractionCallBack } from '@amplitude/rrweb-types';\nimport { MouseInteractions } from '@amplitude/rrweb-types';\nimport { Mirror } from '../utils/rrweb';\nimport { SessionReplayEventsManager as AmplitudeSessionReplayEventsManager } from '../typings/session-replay';\nimport { PayloadBatcher } from '../track-destination';\nimport { finder } from '../libs/finder';\nimport { getGlobalScope, ILogger } from '@amplitude/analytics-core';\nimport { UGCFilterRule } from '../config/types';\nimport { getPageUrl } from '../helpers';\nimport { ScrollWatcher } from './scroll';\n\n// exported for testing\nexport type ClickEvent = {\n timestamp: number;\n x: number;\n y: number;\n viewportWidth: number;\n viewportHeight: number;\n pageUrl: string;\n selector?: string;\n type: 'click';\n};\n\n// exported for testing\nexport type ClickEventWithCount = ClickEvent & { count: number };\n\ntype Context = {\n sessionId: string | number;\n deviceIdFn: () => string | undefined;\n eventsManager: AmplitudeSessionReplayEventsManager<'interaction', string>;\n mirror: Mirror;\n ugcFilterRules: UGCFilterRule[];\n};\n\nconst HOUR_IN_MILLISECONDS = 3_600_000;\n\nexport const clickNonBatcher: PayloadBatcher = ({ version, events }) => {\n const clickEvents: ClickEvent[] = [];\n events.forEach((evt: string) => {\n const record = JSON.parse(evt) as Record<string, unknown>;\n record.count = 1;\n if (record.type === 'click') {\n clickEvents.push(record as ClickEvent);\n }\n });\n return { version, events: clickEvents };\n};\n\nexport const clickBatcher: PayloadBatcher = ({ version, events }) => {\n const clickEvents: ClickEvent[] = [];\n events.forEach((evt: string) => {\n const record = JSON.parse(evt) as Record<string, unknown>;\n if (record.type === 'click') {\n clickEvents.push(record as ClickEvent);\n }\n });\n\n const reduced = clickEvents.reduce<Record<string, ClickEventWithCount>>((prev, curr) => {\n const { x, y, selector, timestamp } = curr;\n\n // round down to nearest hour.\n const hour = timestamp - (timestamp % HOUR_IN_MILLISECONDS);\n\n const k = `${x}:${y}:${selector ?? ''}:${hour}`;\n if (!prev[k]) {\n prev[k] = { ...curr, timestamp: hour, count: 1 };\n } else {\n prev[k].count += 1;\n }\n return prev;\n }, {});\n\n return { version, events: Object.values(reduced) };\n};\n\nexport class ClickHandler {\n private readonly logger: ILogger;\n private readonly scrollWatcher: ScrollWatcher;\n\n constructor(logger: ILogger, scrollWatcher: ScrollWatcher) {\n this.logger = logger;\n this.scrollWatcher = scrollWatcher;\n }\n\n createHook: (context: Context) => mouseInteractionCallBack = ({\n eventsManager,\n sessionId,\n deviceIdFn,\n mirror,\n ugcFilterRules,\n }) => {\n return (e) => {\n if (e.type !== MouseInteractions.Click) {\n return;\n }\n\n const globalScope = getGlobalScope();\n if (!globalScope) {\n return;\n }\n\n const { location, innerHeight, innerWidth } = globalScope;\n // it only makes sense to send events if a pageUrl exists\n if (!location) {\n return;\n }\n\n const { x, y } = e;\n if (x === undefined || y === undefined) {\n return;\n }\n\n const node = mirror.getNode(e.id);\n let selector;\n if (node) {\n try {\n selector = finder(node as Element);\n } catch (err) {\n this.logger.debug('error resolving selector from finder');\n }\n }\n\n const pageUrl = getPageUrl(location.href, ugcFilterRules);\n\n const event: ClickEvent = {\n x: x + this.scrollWatcher.currentScrollX,\n y: y + this.scrollWatcher.currentScrollY,\n selector,\n\n viewportHeight: innerHeight,\n viewportWidth: innerWidth,\n pageUrl,\n timestamp: Date.now(),\n type: 'click',\n };\n const deviceId = deviceIdFn();\n if (deviceId) {\n eventsManager.addEvent({ sessionId, event: { type: 'interaction', data: JSON.stringify(event) }, deviceId });\n }\n };\n };\n}\n"]}
|
|
@@ -26,6 +26,8 @@ export type ScrollEventPayload = {
|
|
|
26
26
|
*/
|
|
27
27
|
export declare class ScrollWatcher {
|
|
28
28
|
private timestamp;
|
|
29
|
+
private _currentScrollX;
|
|
30
|
+
private _currentScrollY;
|
|
29
31
|
private _maxScrollX;
|
|
30
32
|
private _maxScrollY;
|
|
31
33
|
private _maxScrollWidth;
|
|
@@ -38,6 +40,8 @@ export declare class ScrollWatcher {
|
|
|
38
40
|
get maxScrollY(): number;
|
|
39
41
|
get maxScrollWidth(): number;
|
|
40
42
|
get maxScrollHeight(): number;
|
|
43
|
+
get currentScrollX(): number;
|
|
44
|
+
get currentScrollY(): number;
|
|
41
45
|
update(e: scrollPosition): void;
|
|
42
46
|
hook: scrollCallback;
|
|
43
47
|
send: (deviceIdFn: () => string | undefined) => (_: PageTransitionEvent | Event) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scroll.d.ts","sourceRoot":"","sources":["../../../src/hooks/scroll.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,uCAAuC,EAAE,MAAM,2BAA2B,CAAC;AAGpF,MAAM,MAAM,WAAW,GAAG;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,QAAQ,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,WAAW,EAAE,CAAA;CAAE,CAAC;AAE5E;;;;;;GAMG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,SAAS,CAAc;IAC/B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAsC;IAChE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA0E;IAEjG,MAAM,CAAC,OAAO,CACZ,OAAO,EAAE,IAAI,CAAC,uCAAuC,EAAE,UAAU,CAAC,EAClE,MAAM,EAAE,yBAAyB,GAChC,aAAa;gBAKd,SAAS,EAAE,eAAe,CAAC,kBAAkB,CAAC,EAC9C,MAAM,EAAE,IAAI,CAAC,yBAAyB,EAAE,gBAAgB,GAAG,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"scroll.d.ts","sourceRoot":"","sources":["../../../src/hooks/scroll.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,uCAAuC,EAAE,MAAM,2BAA2B,CAAC;AAGpF,MAAM,MAAM,WAAW,GAAG;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,QAAQ,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,WAAW,EAAE,CAAA;CAAE,CAAC;AAE5E;;;;;;GAMG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,SAAS,CAAc;IAC/B,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAsC;IAChE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA0E;IAEjG,MAAM,CAAC,OAAO,CACZ,OAAO,EAAE,IAAI,CAAC,uCAAuC,EAAE,UAAU,CAAC,EAClE,MAAM,EAAE,yBAAyB,GAChC,aAAa;gBAKd,SAAS,EAAE,eAAe,CAAC,kBAAkB,CAAC,EAC9C,MAAM,EAAE,IAAI,CAAC,yBAAyB,EAAE,gBAAgB,GAAG,mBAAmB,CAAC;IAajF,IAAW,UAAU,IAAI,MAAM,CAE9B;IAED,IAAW,UAAU,IAAI,MAAM,CAE9B;IAED,IAAW,cAAc,IAAI,MAAM,CAElC;IAED,IAAW,eAAe,IAAI,MAAM,CAEnC;IAED,IAAW,cAAc,IAAI,MAAM,CAElC;IAED,IAAW,cAAc,IAAI,MAAM,CAElC;IAED,MAAM,CAAC,CAAC,EAAE,cAAc;IAyBxB,IAAI,EAAE,cAAc,CAElB;IAEF,IAAI,EAAE,CAAC,UAAU,EAAE,MAAM,MAAM,GAAG,SAAS,KAAK,CAAC,CAAC,EAAE,mBAAmB,GAAG,KAAK,KAAK,IAAI,CAsBtF;CACH"}
|
package/lib/cjs/hooks/scroll.js
CHANGED
|
@@ -44,6 +44,8 @@ var ScrollWatcher = /** @class */ (function () {
|
|
|
44
44
|
}; };
|
|
45
45
|
this._maxScrollX = 0;
|
|
46
46
|
this._maxScrollY = 0;
|
|
47
|
+
this._currentScrollX = 0;
|
|
48
|
+
this._currentScrollY = 0;
|
|
47
49
|
this._maxScrollWidth = (0, rrweb_1.getWindowWidth)();
|
|
48
50
|
this._maxScrollHeight = (0, rrweb_1.getWindowHeight)();
|
|
49
51
|
this.config = config;
|
|
@@ -80,8 +82,24 @@ var ScrollWatcher = /** @class */ (function () {
|
|
|
80
82
|
enumerable: false,
|
|
81
83
|
configurable: true
|
|
82
84
|
});
|
|
85
|
+
Object.defineProperty(ScrollWatcher.prototype, "currentScrollX", {
|
|
86
|
+
get: function () {
|
|
87
|
+
return this._currentScrollX;
|
|
88
|
+
},
|
|
89
|
+
enumerable: false,
|
|
90
|
+
configurable: true
|
|
91
|
+
});
|
|
92
|
+
Object.defineProperty(ScrollWatcher.prototype, "currentScrollY", {
|
|
93
|
+
get: function () {
|
|
94
|
+
return this._currentScrollY;
|
|
95
|
+
},
|
|
96
|
+
enumerable: false,
|
|
97
|
+
configurable: true
|
|
98
|
+
});
|
|
83
99
|
ScrollWatcher.prototype.update = function (e) {
|
|
84
100
|
var now = Date.now();
|
|
101
|
+
this._currentScrollX = e.x;
|
|
102
|
+
this._currentScrollY = e.y;
|
|
85
103
|
if (e.x > this._maxScrollX) {
|
|
86
104
|
var width = (0, rrweb_1.getWindowWidth)();
|
|
87
105
|
this._maxScrollX = e.x;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scroll.js","sourceRoot":"","sources":["../../../src/hooks/scroll.ts"],"names":[],"mappings":";;;AAAA,wCAAiE;AAEjE,wDAAsD;AACtD,4DAA2D;AAG3D,sCAAwC;AAgBxC;;;;;;GAMG;AACH;
|
|
1
|
+
{"version":3,"file":"scroll.js","sourceRoot":"","sources":["../../../src/hooks/scroll.ts"],"names":[],"mappings":"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","sourcesContent":["import { getWindowHeight, getWindowWidth } from '../utils/rrweb';\nimport type { scrollCallback, scrollPosition } from '@amplitude/rrweb-types';\nimport { BeaconTransport } from '../beacon-transport';\nimport { getGlobalScope } from '@amplitude/analytics-core';\nimport { SessionReplayJoinedConfig } from '../config/types';\nimport { SessionReplayDestinationSessionMetadata } from '../typings/session-replay';\nimport { getPageUrl } from '../helpers';\n\nexport type ScrollEvent = {\n timestamp: number; // Timestamp the event occurred\n maxScrollX: number; // Max window scroll X on a page\n maxScrollY: number; // Max window scroll Y on a page\n maxScrollHeight: number; // Max window scroll Y + window height on a page\n maxScrollWidth: number; // Max window scroll X + window width on a page\n viewportWidth: number;\n viewportHeight: number;\n pageUrl: string;\n type: 'scroll';\n};\n\nexport type ScrollEventPayload = { version: number; events: ScrollEvent[] };\n\n/**\n * This is intended to watch and update max scroll activity when loaded for a particular page.\n * A new instance should be created if the page URL changes, since by default it does not reset\n * it's max scroll state. It is intended to send very few and very small events utilizing the\n * Beacon API.\n * @see {@link BeaconTransport} for more details on Beacon API usage.\n */\nexport class ScrollWatcher {\n private timestamp = Date.now();\n private _currentScrollX: number;\n private _currentScrollY: number;\n private _maxScrollX: number;\n private _maxScrollY: number;\n private _maxScrollWidth: number;\n private _maxScrollHeight: number;\n private readonly transport: BeaconTransport<ScrollEventPayload>;\n private readonly config: Pick<SessionReplayJoinedConfig, 'loggerProvider' | 'interactionConfig'>;\n\n static default(\n context: Omit<SessionReplayDestinationSessionMetadata, 'deviceId'>,\n config: SessionReplayJoinedConfig,\n ): ScrollWatcher {\n return new ScrollWatcher(new BeaconTransport<ScrollEventPayload>(context, config), config);\n }\n\n constructor(\n transport: BeaconTransport<ScrollEventPayload>,\n config: Pick<SessionReplayJoinedConfig, 'loggerProvider' | 'interactionConfig'>,\n ) {\n this._maxScrollX = 0;\n this._maxScrollY = 0;\n this._currentScrollX = 0;\n this._currentScrollY = 0;\n this._maxScrollWidth = getWindowWidth();\n this._maxScrollHeight = getWindowHeight();\n this.config = config;\n\n this.transport = transport;\n }\n\n public get maxScrollX(): number {\n return this._maxScrollX;\n }\n\n public get maxScrollY(): number {\n return this._maxScrollY;\n }\n\n public get maxScrollWidth(): number {\n return this._maxScrollWidth;\n }\n\n public get maxScrollHeight(): number {\n return this._maxScrollHeight;\n }\n\n public get currentScrollX(): number {\n return this._currentScrollX;\n }\n\n public get currentScrollY(): number {\n return this._currentScrollY;\n }\n\n update(e: scrollPosition) {\n const now = Date.now();\n this._currentScrollX = e.x;\n this._currentScrollY = e.y;\n if (e.x > this._maxScrollX) {\n const width = getWindowWidth();\n this._maxScrollX = e.x;\n const maxScrollWidth = e.x + width;\n if (maxScrollWidth > this._maxScrollWidth) {\n this._maxScrollWidth = maxScrollWidth;\n }\n this.timestamp = now;\n }\n\n if (e.y > this._maxScrollY) {\n const height = getWindowHeight();\n this._maxScrollY = e.y;\n const maxScrollHeight = e.y + height;\n if (maxScrollHeight > this._maxScrollHeight) {\n this._maxScrollHeight = maxScrollHeight;\n }\n this.timestamp = now;\n }\n }\n\n hook: scrollCallback = (e: scrollPosition) => {\n this.update(e);\n };\n\n send: (deviceIdFn: () => string | undefined) => (_: PageTransitionEvent | Event) => void = (deviceIdFn) => (_) => {\n const deviceId = deviceIdFn();\n const globalScope = getGlobalScope();\n if (globalScope && deviceId) {\n this.transport.send(deviceId, {\n version: 1,\n events: [\n {\n maxScrollX: this._maxScrollX,\n maxScrollY: this._maxScrollY,\n maxScrollWidth: this._maxScrollWidth,\n maxScrollHeight: this._maxScrollHeight,\n\n viewportHeight: getWindowHeight(),\n viewportWidth: getWindowWidth(),\n pageUrl: getPageUrl(globalScope.location.href, this.config.interactionConfig?.ugcFilterRules ?? []),\n timestamp: this.timestamp,\n type: 'scroll',\n },\n ],\n });\n }\n };\n}\n"]}
|
|
@@ -21,6 +21,7 @@ export declare class SessionReplay implements AmplitudeSessionReplay {
|
|
|
21
21
|
private lastShouldRecordDecision?;
|
|
22
22
|
pageLeaveFns: PageLeaveFn[];
|
|
23
23
|
private scrollHook?;
|
|
24
|
+
private clickHandler?;
|
|
24
25
|
private networkObservers?;
|
|
25
26
|
private metadata;
|
|
26
27
|
private recordFunction;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-replay.d.ts","sourceRoot":"","sources":["../../src/session-replay.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,OAAO,EAOR,MAAM,2BAA2B,CAAC;AAInC,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE3D,OAAO,EACL,aAAa,EACb,yBAAyB,EACzB,kCAAkC,EAInC,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAEL,gBAAgB,EAMjB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAS5D,OAAO,EACL,sBAAsB,EACtB,0BAA0B,IAAI,mCAAmC,EAIjE,kBAAkB,IAAI,mBAAmB,EACzC,oBAAoB,EACrB,MAAM,0BAA0B,CAAC;AAMlC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEpD,KAAK,WAAW,GAAG,CAAC,CAAC,EAAE,mBAAmB,GAAG,KAAK,KAAK,IAAI,CAAC;AAE5D,qBAAa,aAAc,YAAW,sBAAsB;IAC1D,IAAI,SAAuC;IAC3C,MAAM,EAAE,yBAAyB,GAAG,SAAS,CAAC;IAC9C,qBAAqB,EAAE,kCAAkC,GAAG,SAAS,CAAC;IACtE,WAAW,EAAE,mBAAmB,GAAG,SAAS,CAAC;IAC7C,aAAa,CAAC,EAAE,mCAAmC,CAAC,QAAQ,GAAG,aAAa,EAAE,MAAM,CAAC,CAAC;IACtF,cAAc,EAAE,OAAO,CAAC;IACxB,oBAAoB,EAAE,UAAU,CAAC,cAAc,CAAC,GAAG,IAAI,CAAQ;IAC/D,UAAU,SAAK;IACf,eAAe,EAAE,eAAe,GAAG,SAAS,CAAC;IAC7C,qBAAqB,UAAS;IAC9B,OAAO,CAAC,mBAAmB,CAAC,CAAwD;IACpF,OAAO,CAAC,wBAAwB,CAAC,CAAU;IAG3C,YAAY,EAAE,WAAW,EAAE,CAAM;IACjC,OAAO,CAAC,UAAU,CAAC,CAAiB;IACpC,OAAO,CAAC,gBAAgB,CAAC,CAAmB;IAC5C,OAAO,CAAC,QAAQ,CAAoC;IAGpD,OAAO,CAAC,cAAc,CAA+B;;IAMrD,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,oBAAoB;IAIlD,OAAO,CAAC,sBAAsB,CAmB5B;cAEc,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,oBAAoB;
|
|
1
|
+
{"version":3,"file":"session-replay.d.ts","sourceRoot":"","sources":["../../src/session-replay.ts"],"names":[],"mappings":"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"}
|
|
@@ -229,6 +229,7 @@ var SessionReplay = /** @class */ (function () {
|
|
|
229
229
|
}, this.config);
|
|
230
230
|
this.pageLeaveFns = [scrollWatcher.send(this.getDeviceId.bind(this)).bind(scrollWatcher)];
|
|
231
231
|
this.scrollHook = scrollWatcher.hook.bind(scrollWatcher);
|
|
232
|
+
this.clickHandler = new click_1.ClickHandler(this.loggerProvider, scrollWatcher);
|
|
232
233
|
}
|
|
233
234
|
managers = [];
|
|
234
235
|
storeType = this.config.storeType;
|
|
@@ -563,14 +564,14 @@ var SessionReplay = /** @class */ (function () {
|
|
|
563
564
|
});
|
|
564
565
|
};
|
|
565
566
|
SessionReplay.prototype.recordEvents = function (shouldLogMetadata) {
|
|
566
|
-
var _a, _b, _c, _d, _e;
|
|
567
|
+
var _a, _b, _c, _d, _e, _f;
|
|
567
568
|
if (shouldLogMetadata === void 0) { shouldLogMetadata = true; }
|
|
568
569
|
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
569
|
-
var config, shouldRecord, sessionId, recordFunction, privacyConfig, interactionConfig, loggingConfig, hooks, ugcFilterRules,
|
|
570
|
-
var
|
|
570
|
+
var config, shouldRecord, sessionId, recordFunction, privacyConfig, interactionConfig, loggingConfig, hooks, ugcFilterRules, _g, _h, error_5;
|
|
571
|
+
var _j;
|
|
571
572
|
var _this = this;
|
|
572
|
-
return tslib_1.__generator(this, function (
|
|
573
|
-
switch (
|
|
573
|
+
return tslib_1.__generator(this, function (_k) {
|
|
574
|
+
switch (_k.label) {
|
|
574
575
|
case 0:
|
|
575
576
|
config = this.config;
|
|
576
577
|
shouldRecord = this.getShouldRecord();
|
|
@@ -581,14 +582,14 @@ var SessionReplay = /** @class */ (function () {
|
|
|
581
582
|
this.stopRecordingEvents();
|
|
582
583
|
return [4 /*yield*/, this.getRecordFunction()];
|
|
583
584
|
case 1:
|
|
584
|
-
recordFunction =
|
|
585
|
+
recordFunction = _k.sent();
|
|
585
586
|
// May be undefined if cannot import rrweb-record
|
|
586
587
|
if (!recordFunction) {
|
|
587
588
|
return [2 /*return*/];
|
|
588
589
|
}
|
|
589
590
|
return [4 /*yield*/, this.initializeNetworkObservers()];
|
|
590
591
|
case 2:
|
|
591
|
-
|
|
592
|
+
_k.sent();
|
|
592
593
|
(_b = this.networkObservers) === null || _b === void 0 ? void 0 : _b.start(function (event) {
|
|
593
594
|
void _this.addCustomRRWebEvent(constants_1.CustomRRwebEvent.FETCH_REQUEST, event);
|
|
594
595
|
});
|
|
@@ -596,24 +597,24 @@ var SessionReplay = /** @class */ (function () {
|
|
|
596
597
|
hooks = (interactionConfig === null || interactionConfig === void 0 ? void 0 : interactionConfig.enabled)
|
|
597
598
|
? {
|
|
598
599
|
mouseInteraction: this.eventsManager &&
|
|
599
|
-
(0
|
|
600
|
+
((_c = this.clickHandler) === null || _c === void 0 ? void 0 : _c.createHook({
|
|
600
601
|
eventsManager: this.eventsManager,
|
|
601
602
|
sessionId: sessionId,
|
|
602
603
|
deviceIdFn: this.getDeviceId.bind(this),
|
|
603
604
|
mirror: recordFunction.mirror,
|
|
604
|
-
ugcFilterRules: (
|
|
605
|
-
}),
|
|
605
|
+
ugcFilterRules: (_d = interactionConfig.ugcFilterRules) !== null && _d !== void 0 ? _d : [],
|
|
606
|
+
})),
|
|
606
607
|
scroll: this.scrollHook,
|
|
607
608
|
}
|
|
608
609
|
: {};
|
|
609
610
|
ugcFilterRules = (interactionConfig === null || interactionConfig === void 0 ? void 0 : interactionConfig.enabled) && interactionConfig.ugcFilterRules ? interactionConfig.ugcFilterRules : [];
|
|
610
611
|
this.loggerProvider.log("Session Replay capture beginning for ".concat(sessionId, "."));
|
|
611
|
-
|
|
612
|
+
_k.label = 3;
|
|
612
613
|
case 3:
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
614
|
+
_k.trys.push([3, 5, , 6]);
|
|
615
|
+
_g = this;
|
|
616
|
+
_h = recordFunction;
|
|
617
|
+
_j = {
|
|
617
618
|
emit: function (event) {
|
|
618
619
|
if (_this.shouldOptOut()) {
|
|
619
620
|
_this.loggerProvider.log("Opting session ".concat(sessionId, " out of recording due to optOut config."));
|
|
@@ -641,8 +642,8 @@ var SessionReplay = /** @class */ (function () {
|
|
|
641
642
|
maskTextSelector: this.getMaskTextSelectors(),
|
|
642
643
|
recordCanvas: false,
|
|
643
644
|
slimDOMOptions: {
|
|
644
|
-
script: (
|
|
645
|
-
comment: (
|
|
645
|
+
script: (_e = config.omitElementTags) === null || _e === void 0 ? void 0 : _e.script,
|
|
646
|
+
comment: (_f = config.omitElementTags) === null || _f === void 0 ? void 0 : _f.comment,
|
|
646
647
|
},
|
|
647
648
|
errorHandler: function (error) {
|
|
648
649
|
var typedError = error;
|
|
@@ -663,15 +664,15 @@ var SessionReplay = /** @class */ (function () {
|
|
|
663
664
|
};
|
|
664
665
|
return [4 /*yield*/, this.getRecordingPlugins(loggingConfig)];
|
|
665
666
|
case 4:
|
|
666
|
-
|
|
667
|
-
|
|
667
|
+
_g.recordCancelCallback = _h.apply(void 0, [(_j.plugins = _k.sent(),
|
|
668
|
+
_j)]);
|
|
668
669
|
void this.addCustomRRWebEvent(constants_1.CustomRRwebEvent.DEBUG_INFO);
|
|
669
670
|
if (shouldLogMetadata) {
|
|
670
671
|
void this.addCustomRRWebEvent(constants_1.CustomRRwebEvent.METADATA, this.metadata);
|
|
671
672
|
}
|
|
672
673
|
return [3 /*break*/, 6];
|
|
673
674
|
case 5:
|
|
674
|
-
error_5 =
|
|
675
|
+
error_5 = _k.sent();
|
|
675
676
|
this.loggerProvider.warn('Failed to initialize session replay:', error_5);
|
|
676
677
|
return [3 /*break*/, 6];
|
|
677
678
|
case 6: return [2 /*return*/];
|