@amplitude/session-replay-browser 1.20.1 → 1.21.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/README.md +10 -3
- package/lib/cjs/beacon-transport.js +2 -2
- package/lib/cjs/beacon-transport.js.map +1 -1
- package/lib/cjs/config/joined-config.d.ts +2 -2
- package/lib/cjs/config/joined-config.d.ts.map +1 -1
- package/lib/cjs/config/joined-config.js.map +1 -1
- package/lib/cjs/config/local-config.d.ts +1 -3
- package/lib/cjs/config/local-config.d.ts.map +1 -1
- package/lib/cjs/config/local-config.js +2 -4
- package/lib/cjs/config/local-config.js.map +1 -1
- package/lib/cjs/config/types.d.ts +69 -3
- package/lib/cjs/config/types.d.ts.map +1 -1
- package/lib/cjs/config/types.js.map +1 -1
- package/lib/cjs/constants.d.ts +1 -1
- package/lib/cjs/constants.d.ts.map +1 -1
- package/lib/cjs/constants.js +1 -2
- package/lib/cjs/constants.js.map +1 -1
- package/lib/cjs/events/base-events-store.d.ts +3 -3
- package/lib/cjs/events/base-events-store.d.ts.map +1 -1
- package/lib/cjs/events/base-events-store.js.map +1 -1
- package/lib/cjs/events/event-compressor.js +2 -2
- package/lib/cjs/events/event-compressor.js.map +1 -1
- package/lib/cjs/events/events-idb-store.d.ts.map +1 -1
- package/lib/cjs/events/events-idb-store.js +2 -3
- package/lib/cjs/events/events-idb-store.js.map +1 -1
- package/lib/cjs/helpers.d.ts +10 -8
- package/lib/cjs/helpers.d.ts.map +1 -1
- package/lib/cjs/helpers.js +5 -6
- package/lib/cjs/helpers.js.map +1 -1
- package/lib/cjs/hooks/click.d.ts +2 -2
- package/lib/cjs/hooks/click.d.ts.map +1 -1
- package/lib/cjs/hooks/click.js +2 -2
- package/lib/cjs/hooks/click.js.map +1 -1
- package/lib/cjs/hooks/scroll.js +2 -2
- package/lib/cjs/hooks/scroll.js.map +1 -1
- package/lib/cjs/index.d.ts +1 -1
- package/lib/cjs/index.d.ts.map +1 -1
- package/lib/cjs/logger.d.ts +1 -1
- package/lib/cjs/logger.d.ts.map +1 -1
- package/lib/cjs/logger.js.map +1 -1
- package/lib/cjs/observers.js +2 -2
- package/lib/cjs/observers.js.map +1 -1
- package/lib/cjs/session-replay-factory.d.ts +1 -1
- package/lib/cjs/session-replay-factory.d.ts.map +1 -1
- package/lib/cjs/session-replay-factory.js.map +1 -1
- package/lib/cjs/session-replay.d.ts +3 -3
- package/lib/cjs/session-replay.d.ts.map +1 -1
- package/lib/cjs/session-replay.js +3 -4
- package/lib/cjs/session-replay.js.map +1 -1
- package/lib/cjs/track-destination.d.ts +1 -1
- package/lib/cjs/track-destination.d.ts.map +1 -1
- package/lib/cjs/track-destination.js +2 -3
- package/lib/cjs/track-destination.js.map +1 -1
- package/lib/cjs/typings/session-replay.d.ts +7 -1
- package/lib/cjs/typings/session-replay.d.ts.map +1 -1
- package/lib/cjs/typings/session-replay.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/beacon-transport.js +1 -1
- package/lib/esm/beacon-transport.js.map +1 -1
- package/lib/esm/config/joined-config.d.ts +2 -2
- package/lib/esm/config/joined-config.d.ts.map +1 -1
- package/lib/esm/config/joined-config.js.map +1 -1
- package/lib/esm/config/local-config.d.ts +1 -3
- package/lib/esm/config/local-config.d.ts.map +1 -1
- package/lib/esm/config/local-config.js +1 -3
- package/lib/esm/config/local-config.js.map +1 -1
- package/lib/esm/config/types.d.ts +69 -3
- package/lib/esm/config/types.d.ts.map +1 -1
- package/lib/esm/config/types.js.map +1 -1
- package/lib/esm/constants.d.ts +1 -1
- package/lib/esm/constants.d.ts.map +1 -1
- package/lib/esm/constants.js +1 -2
- package/lib/esm/constants.js.map +1 -1
- package/lib/esm/events/base-events-store.d.ts +3 -3
- package/lib/esm/events/base-events-store.d.ts.map +1 -1
- package/lib/esm/events/base-events-store.js.map +1 -1
- package/lib/esm/events/event-compressor.js +1 -1
- package/lib/esm/events/event-compressor.js.map +1 -1
- package/lib/esm/events/events-idb-store.d.ts.map +1 -1
- package/lib/esm/events/events-idb-store.js +1 -2
- package/lib/esm/events/events-idb-store.js.map +1 -1
- package/lib/esm/helpers.d.ts +10 -8
- package/lib/esm/helpers.d.ts.map +1 -1
- package/lib/esm/helpers.js +1 -2
- package/lib/esm/helpers.js.map +1 -1
- package/lib/esm/hooks/click.d.ts +2 -2
- package/lib/esm/hooks/click.d.ts.map +1 -1
- package/lib/esm/hooks/click.js +1 -1
- package/lib/esm/hooks/click.js.map +1 -1
- package/lib/esm/hooks/scroll.js +1 -1
- package/lib/esm/hooks/scroll.js.map +1 -1
- package/lib/esm/index.d.ts +1 -1
- package/lib/esm/index.d.ts.map +1 -1
- package/lib/esm/logger.d.ts +1 -1
- package/lib/esm/logger.d.ts.map +1 -1
- package/lib/esm/logger.js.map +1 -1
- package/lib/esm/observers.js +1 -1
- package/lib/esm/observers.js.map +1 -1
- package/lib/esm/session-replay-factory.d.ts +1 -1
- package/lib/esm/session-replay-factory.d.ts.map +1 -1
- package/lib/esm/session-replay-factory.js.map +1 -1
- package/lib/esm/session-replay.d.ts +3 -3
- package/lib/esm/session-replay.d.ts.map +1 -1
- package/lib/esm/session-replay.js +1 -2
- package/lib/esm/session-replay.js.map +1 -1
- package/lib/esm/track-destination.d.ts +1 -1
- package/lib/esm/track-destination.d.ts.map +1 -1
- package/lib/esm/track-destination.js +1 -2
- package/lib/esm/track-destination.js.map +1 -1
- package/lib/esm/typings/session-replay.d.ts +7 -1
- package/lib/esm/typings/session-replay.d.ts.map +1 -1
- package/lib/esm/typings/session-replay.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/amplitude-min.js +1 -1
- package/lib/scripts/amplitude-min.js.gz +0 -0
- package/lib/scripts/amplitude-min.js.map +1 -1
- package/lib/scripts/amplitude-min.umd.js +1 -1
- package/lib/scripts/amplitude-min.umd.js.gz +0 -0
- package/lib/scripts/config/joined-config.d.ts +2 -2
- package/lib/scripts/config/joined-config.d.ts.map +1 -1
- package/lib/scripts/config/local-config.d.ts +1 -3
- package/lib/scripts/config/local-config.d.ts.map +1 -1
- package/lib/scripts/config/types.d.ts +69 -3
- package/lib/scripts/config/types.d.ts.map +1 -1
- package/lib/scripts/constants.d.ts +1 -1
- package/lib/scripts/constants.d.ts.map +1 -1
- package/lib/scripts/events/base-events-store.d.ts +3 -3
- package/lib/scripts/events/base-events-store.d.ts.map +1 -1
- package/lib/scripts/events/events-idb-store.d.ts.map +1 -1
- package/lib/scripts/helpers.d.ts +10 -8
- package/lib/scripts/helpers.d.ts.map +1 -1
- package/lib/scripts/hooks/click.d.ts +2 -2
- package/lib/scripts/hooks/click.d.ts.map +1 -1
- package/lib/scripts/index.d.ts +1 -1
- package/lib/scripts/index.d.ts.map +1 -1
- package/lib/scripts/logger.d.ts +1 -1
- package/lib/scripts/logger.d.ts.map +1 -1
- package/lib/scripts/session-replay-factory.d.ts +1 -1
- package/lib/scripts/session-replay-factory.d.ts.map +1 -1
- package/lib/scripts/session-replay.d.ts +3 -3
- package/lib/scripts/session-replay.d.ts.map +1 -1
- package/lib/scripts/track-destination.d.ts +1 -1
- package/lib/scripts/track-destination.d.ts.map +1 -1
- package/lib/scripts/typings/session-replay.d.ts +7 -1
- package/lib/scripts/typings/session-replay.d.ts.map +1 -1
- package/lib/scripts/version.d.ts +1 -1
- package/package.json +3 -5
package/lib/esm/hooks/scroll.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { utils } from '@amplitude/rrweb';
|
|
2
2
|
import { BeaconTransport } from '../beacon-transport';
|
|
3
|
-
import { getGlobalScope } from '@amplitude/analytics-
|
|
3
|
+
import { getGlobalScope } from '@amplitude/analytics-core';
|
|
4
4
|
var getWindowHeight = utils.getWindowHeight, getWindowWidth = utils.getWindowWidth;
|
|
5
5
|
/**
|
|
6
6
|
* This is intended to watch and update max scroll activity when loaded for a particular page.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scroll.js","sourceRoot":"","sources":["../../../src/hooks/scroll.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEzC,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"scroll.js","sourceRoot":"","sources":["../../../src/hooks/scroll.ts"],"names":[],"mappings":"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","sourcesContent":["import { utils } from '@amplitude/rrweb';\nimport { 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';\n\nconst { getWindowHeight, getWindowWidth } = utils;\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 _maxScrollX: number;\n private _maxScrollY: number;\n private _maxScrollWidth: number;\n private _maxScrollHeight: number;\n private readonly transport: BeaconTransport<ScrollEventPayload>;\n\n static default(\n context: Omit<SessionReplayDestinationSessionMetadata, 'deviceId'>,\n config: SessionReplayJoinedConfig,\n ): ScrollWatcher {\n return new ScrollWatcher(new BeaconTransport<ScrollEventPayload>(context, config));\n }\n\n constructor(transport: BeaconTransport<ScrollEventPayload>) {\n this._maxScrollX = 0;\n this._maxScrollY = 0;\n this._maxScrollWidth = getWindowWidth();\n this._maxScrollHeight = getWindowHeight();\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 update(e: scrollPosition) {\n const now = Date.now();\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: globalScope.location.href,\n timestamp: this.timestamp,\n type: 'scroll',\n },\n ],\n });\n }\n };\n}\n"]}
|
package/lib/esm/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export declare const init: (apiKey: string, options: import("./typings/session-replay").SessionReplayOptions) => import("@amplitude/analytics-
|
|
1
|
+
export declare const init: (apiKey: string, options: import("./typings/session-replay").SessionReplayOptions) => import("@amplitude/analytics-core").AmplitudeReturn<void>, setSessionId: (sessionId: string | number, deviceId?: string | undefined) => import("@amplitude/analytics-core").AmplitudeReturn<void>, getSessionId: () => string | number | undefined, getSessionReplayProperties: () => {
|
|
2
2
|
[key: string]: string | boolean | null;
|
|
3
3
|
}, flush: (useRetry: boolean) => Promise<void>, shutdown: () => void;
|
|
4
4
|
export { SessionReplayOptions, StoreType } from './typings/session-replay';
|
package/lib/esm/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,eAAO,MAAQ,IAAI,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,eAAO,MAAQ,IAAI,mJAAE,YAAY,4HAAE,YAAY,qCAAE,0BAA0B;;GAAE,KAAK,wCAAE,QAAQ,YAAkB,CAAC;AAC/G,OAAO,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC"}
|
package/lib/esm/logger.d.ts
CHANGED
package/lib/esm/logger.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAE9D,qBAAa,kBAAmB,YAAW,OAAO;IAChD,OAAO,CAAC,MAAM,CAAU;IAExB,GAAG,EAAE,OAAO,OAAO,CAAC,GAAG,CAAC;IACxB,IAAI,EAAE,OAAO,OAAO,CAAC,IAAI,CAAC;IAC1B,KAAK,EAAE,OAAO,OAAO,CAAC,KAAK,CAAC;IAC5B,KAAK,EAAE,OAAO,OAAO,CAAC,KAAK,CAAC;gBAEhB,cAAc,EAAE,OAAO;IAQnC,OAAO,CAAC,aAAa;IAkBrB,MAAM,CAAC,QAAQ,EAAE,QAAQ;IAIzB,OAAO;CAGR"}
|
package/lib/esm/logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/logger.ts"],"names":[],"mappings":"AAEA;IAQE,4BAAY,cAAuB;QACjC,IAAI,CAAC,MAAM,GAAG,cAAc,CAAC;QAC7B,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QACvC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QACzC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAC3C,CAAC;IAEO,0CAAa,GAArB,UAA+C,MAAS;;QACtD,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAChB,OAAO,CAAC;gBACN,0BAA0B;YAC5B,CAAC,CAAe,CAAC;SAClB;QAED,IAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC/B,IAAI,OAAO,EAAE,KAAK,UAAU,EAAE;YAC5B,IAAM,UAAU,GAAG,MAAC,EAA0C,CAAC,kBAAkB,mCAAI,EAAE,CAAC;YACxF,OAAO,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAe,CAAC;SACnD;QAED,OAAO,CAAC;YACN,0BAA0B;QAC5B,CAAC,CAAe,CAAC;IACnB,CAAC;IAED,mCAAM,GAAN,UAAO,QAAkB;QACvB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC/B,CAAC;IAED,oCAAO,GAAP;QACE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;IACxB,CAAC;IACH,yBAAC;AAAD,CAAC,AAzCD,IAyCC","sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/logger.ts"],"names":[],"mappings":"AAEA;IAQE,4BAAY,cAAuB;QACjC,IAAI,CAAC,MAAM,GAAG,cAAc,CAAC;QAC7B,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QACvC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QACzC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAC3C,CAAC;IAEO,0CAAa,GAArB,UAA+C,MAAS;;QACtD,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAChB,OAAO,CAAC;gBACN,0BAA0B;YAC5B,CAAC,CAAe,CAAC;SAClB;QAED,IAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC/B,IAAI,OAAO,EAAE,KAAK,UAAU,EAAE;YAC5B,IAAM,UAAU,GAAG,MAAC,EAA0C,CAAC,kBAAkB,mCAAI,EAAE,CAAC;YACxF,OAAO,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAe,CAAC;SACnD;QAED,OAAO,CAAC;YACN,0BAA0B;QAC5B,CAAC,CAAe,CAAC;IACnB,CAAC;IAED,mCAAM,GAAN,UAAO,QAAkB;QACvB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC/B,CAAC;IAED,oCAAO,GAAP;QACE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;IACxB,CAAC;IACH,yBAAC;AAAD,CAAC,AAzCD,IAyCC","sourcesContent":["import { ILogger, LogLevel } from '@amplitude/analytics-core';\n\nexport class SafeLoggerProvider implements ILogger {\n private logger: ILogger;\n\n log: typeof console.log;\n warn: typeof console.warn;\n error: typeof console.error;\n debug: typeof console.debug;\n\n constructor(loggerProvider: ILogger) {\n this.logger = loggerProvider;\n this.log = this.getSafeMethod('log');\n this.warn = this.getSafeMethod('warn');\n this.error = this.getSafeMethod('error');\n this.debug = this.getSafeMethod('debug');\n }\n\n private getSafeMethod<K extends keyof ILogger>(method: K): ILogger[K] {\n if (!this.logger) {\n return (() => {\n // No-op function fallback\n }) as ILogger[K];\n }\n\n const fn = this.logger[method];\n if (typeof fn === 'function') {\n const originalFn = (fn as { __rrweb_original__?: ILogger[K] }).__rrweb_original__ ?? fn;\n return originalFn.bind(this.logger) as ILogger[K];\n }\n\n return (() => {\n // No-op function fallback\n }) as ILogger[K];\n }\n\n enable(logLevel: LogLevel) {\n this.logger.enable(logLevel);\n }\n\n disable() {\n this.logger.disable();\n }\n}\n"]}
|
package/lib/esm/observers.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { __awaiter, __generator } from "tslib";
|
|
2
|
-
import { getGlobalScope } from '@amplitude/analytics-
|
|
2
|
+
import { getGlobalScope } from '@amplitude/analytics-core';
|
|
3
3
|
var NetworkObservers = /** @class */ (function () {
|
|
4
4
|
function NetworkObservers() {
|
|
5
5
|
this.fetchObserver = null;
|
package/lib/esm/observers.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observers.js","sourceRoot":"","sources":["../../src/observers.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"observers.js","sourceRoot":"","sources":["../../src/observers.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAmB3D;IAAA;QACU,kBAAa,GAAwB,IAAI,CAAC;IAuEpD,CAAC;IApEC,gCAAK,GAAL,UAAM,aAAmC;QACvC,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;IAED,+BAAI,GAAJ;;QACE,MAAA,IAAI,CAAC,aAAa,oDAAI,CAAC;QACvB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;IACjC,CAAC;IAES,sCAAW,GAArB,UAAsB,KAA0B;;QAC9C,MAAA,IAAI,CAAC,aAAa,qDAAG,KAAK,CAAC,CAAC;IAC9B,CAAC;IAEO,uCAAY,GAApB;QAAA,iBAoDC;QAnDC,IAAM,WAAW,GAAG,cAAc,EAAE,CAAC;QACrC,IAAI,CAAC,WAAW;YAAE,OAAO;QAEzB,IAAM,aAAa,GAAG,WAAW,CAAC,KAAK,CAAC;QACxC,IAAI,CAAC,aAAa;YAAE,OAAO;QAE3B,WAAW,CAAC,KAAK,GAAG,UAAO,KAAwB,EAAE,IAAkB;;;;;wBAC/D,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;wBACvB,YAAY,GAAwB;4BACxC,SAAS,EAAE,SAAS;4BACpB,IAAI,EAAE,OAAO;4BACb,MAAM,EAAE,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,MAAM,KAAI,KAAK;4BAC7B,GAAG,EAAE,KAAK,CAAC,QAAQ,EAAE;4BACrB,cAAc,EAAE,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,OAAiC;yBACxD,CAAC;;;;wBAGiB,qBAAM,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,EAAA;;wBAA3C,QAAQ,GAAG,SAAgC;wBAC3C,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;wBAE3B,YAAY,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;wBACtC,YAAY,CAAC,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;wBAGtC,YAAkC,EAAE,CAAC;wBAC3C,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,UAAC,KAAK,EAAE,GAAG;4BAClC,SAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;wBACvB,CAAC,CAAC,CAAC;wBACH,YAAY,CAAC,eAAe,GAAG,SAAO,CAAC;wBAEvC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;wBAC/B,sBAAO,QAAQ,EAAC;;;wBAEV,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;wBAC3B,YAAY,CAAC,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;wBAGtC,UAAU,GAAG,OAAc,CAAC;wBAClC,YAAY,CAAC,KAAK,GAAG;4BACnB,IAAI,EAAE,UAAU,CAAC,IAAI,IAAI,cAAc;4BACvC,OAAO,EAAE,UAAU,CAAC,OAAO,IAAI,2BAA2B;yBAC3D,CAAC;wBAEF,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;wBAC/B,MAAM,OAAK,CAAC;;;;aAEf,CAAC;QAEF,IAAI,CAAC,aAAa,GAAG;YACnB,WAAW,CAAC,KAAK,GAAG,aAAa,CAAC;QACpC,CAAC,CAAC;IACJ,CAAC;IACH,uBAAC;AAAD,CAAC,AAxED,IAwEC","sourcesContent":["import { getGlobalScope } from '@amplitude/analytics-core';\n\nexport interface NetworkRequestEvent {\n timestamp: number;\n type: 'fetch';\n method: string;\n url: string;\n status?: number;\n duration?: number;\n requestHeaders?: Record<string, string>;\n responseHeaders?: Record<string, string>;\n error?: {\n name: string;\n message: string;\n };\n}\n\nexport type NetworkEventCallback = (event: NetworkRequestEvent) => void;\n\nexport class NetworkObservers {\n private fetchObserver: (() => void) | null = null;\n private eventCallback?: NetworkEventCallback;\n\n start(eventCallback: NetworkEventCallback) {\n this.eventCallback = eventCallback;\n this.observeFetch();\n }\n\n stop() {\n this.fetchObserver?.();\n this.fetchObserver = null;\n this.eventCallback = undefined;\n }\n\n protected notifyEvent(event: NetworkRequestEvent) {\n this.eventCallback?.(event);\n }\n\n private observeFetch() {\n const globalScope = getGlobalScope();\n if (!globalScope) return;\n\n const originalFetch = globalScope.fetch;\n if (!originalFetch) return;\n\n globalScope.fetch = async (input: RequestInfo | URL, init?: RequestInit) => {\n const startTime = Date.now();\n const requestEvent: NetworkRequestEvent = {\n timestamp: startTime,\n type: 'fetch',\n method: init?.method || 'GET', // Fetch API defaulted to GET when no method is provided\n url: input.toString(),\n requestHeaders: init?.headers as Record<string, string>,\n };\n\n try {\n const response = await originalFetch(input, init);\n const endTime = Date.now();\n\n requestEvent.status = response.status;\n requestEvent.duration = endTime - startTime;\n\n // Convert Headers\n const headers: Record<string, string> = {};\n response.headers.forEach((value, key) => {\n headers[key] = value;\n });\n requestEvent.responseHeaders = headers;\n\n this.notifyEvent(requestEvent);\n return response;\n } catch (error) {\n const endTime = Date.now();\n requestEvent.duration = endTime - startTime;\n\n // Capture error information\n const typedError = error as Error;\n requestEvent.error = {\n name: typedError.name || 'UnknownError',\n message: typedError.message || 'An unknown error occurred',\n };\n\n this.notifyEvent(requestEvent);\n throw error;\n }\n };\n\n this.fetchObserver = () => {\n globalScope.fetch = originalFetch;\n };\n }\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { LogConfig } from '@amplitude/analytics-
|
|
1
|
+
import { LogConfig } from '@amplitude/analytics-core';
|
|
2
2
|
import { SessionReplay } from './session-replay';
|
|
3
3
|
import { AmplitudeSessionReplay } from './typings/session-replay';
|
|
4
4
|
export declare const getLogConfig: (sessionReplay: SessionReplay) => () => LogConfig;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-replay-factory.d.ts","sourceRoot":"","sources":["../../src/session-replay-factory.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"session-replay-factory.d.ts","sourceRoot":"","sources":["../../src/session-replay-factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAEpE,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAElE,eAAO,MAAM,YAAY,kBAAmB,aAAa,WAAS,SAOjE,CAAC;;AA0BF,wBAAgC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-replay-factory.js","sourceRoot":"","sources":["../../src/session-replay-factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"session-replay-factory.js","sourceRoot":"","sources":["../../src/session-replay-factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAa,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGjD,MAAM,CAAC,IAAM,YAAY,GAAG,UAAC,aAA4B,IAAK,OAAA;IACpD,IAAA,MAAM,GAAK,aAAa,OAAlB,CAAmB;IAC3B,IAAA,KAAuC,MAAM,IAAI,gBAAgB,EAAE,EAAjD,MAAM,oBAAA,EAAE,QAAQ,cAAiC,CAAC;IAC1E,OAAO;QACL,MAAM,QAAA;QACN,QAAQ,UAAA;KACT,CAAC;AACJ,CAAC,EAP6D,CAO7D,CAAC;AAEF,IAAM,cAAc,GAAiC;IACnD,IAAM,aAAa,GAAG,IAAI,aAAa,EAAE,CAAC;IAC1C,OAAO;QACL,IAAI,EAAE,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,aAAa,CAAC,CAAC;QAC/F,YAAY,EAAE,YAAY,CACxB,aAAa,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,EAC9C,cAAc,EACd,YAAY,CAAC,aAAa,CAAC,CAC5B;QACD,YAAY,EAAE,YAAY,CACxB,aAAa,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,EAC9C,cAAc,EACd,YAAY,CAAC,aAAa,CAAC,CAC5B;QACD,0BAA0B,EAAE,YAAY,CACtC,aAAa,CAAC,0BAA0B,CAAC,IAAI,CAAC,aAAa,CAAC,EAC5D,4BAA4B,EAC5B,YAAY,CAAC,aAAa,CAAC,CAC5B;QACD,KAAK,EAAE,YAAY,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,aAAa,CAAC,CAAC;QAClG,QAAQ,EAAE,YAAY,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,UAAU,EAAE,YAAY,CAAC,aAAa,CAAC,CAAC;KAC5G,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,cAAc,EAAE,CAAC","sourcesContent":["import { debugWrapper, LogConfig } from '@amplitude/analytics-core';\nimport { getDefaultConfig } from './config/local-config';\nimport { SessionReplay } from './session-replay';\nimport { AmplitudeSessionReplay } from './typings/session-replay';\n\nexport const getLogConfig = (sessionReplay: SessionReplay) => (): LogConfig => {\n const { config } = sessionReplay;\n const { loggerProvider: logger, logLevel } = config || getDefaultConfig();\n return {\n logger,\n logLevel,\n };\n};\n\nconst createInstance: () => AmplitudeSessionReplay = () => {\n const sessionReplay = new SessionReplay();\n return {\n init: debugWrapper(sessionReplay.init.bind(sessionReplay), 'init', getLogConfig(sessionReplay)),\n setSessionId: debugWrapper(\n sessionReplay.setSessionId.bind(sessionReplay),\n 'setSessionId',\n getLogConfig(sessionReplay),\n ),\n getSessionId: debugWrapper(\n sessionReplay.getSessionId.bind(sessionReplay),\n 'getSessionId',\n getLogConfig(sessionReplay),\n ),\n getSessionReplayProperties: debugWrapper(\n sessionReplay.getSessionReplayProperties.bind(sessionReplay),\n 'getSessionReplayProperties',\n getLogConfig(sessionReplay),\n ),\n flush: debugWrapper(sessionReplay.flush.bind(sessionReplay), 'flush', getLogConfig(sessionReplay)),\n shutdown: debugWrapper(sessionReplay.shutdown.bind(sessionReplay), 'shutdown', getLogConfig(sessionReplay)),\n };\n};\n\nexport default createInstance();\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ILogger } from '@amplitude/analytics-core';
|
|
2
2
|
import { record } from '@amplitude/rrweb';
|
|
3
3
|
import { LoggingConfig, SessionReplayJoinedConfig, SessionReplayJoinedConfigGenerator } from './config/types';
|
|
4
4
|
import { CustomRRwebEvent } from './constants';
|
|
@@ -19,10 +19,10 @@ export declare class SessionReplay implements AmplitudeSessionReplay {
|
|
|
19
19
|
private scrollHook?;
|
|
20
20
|
private networkObservers?;
|
|
21
21
|
constructor();
|
|
22
|
-
init(apiKey: string, options: SessionReplayOptions): import("@amplitude/analytics-
|
|
22
|
+
init(apiKey: string, options: SessionReplayOptions): import("@amplitude/analytics-core").AmplitudeReturn<void>;
|
|
23
23
|
private teardownEventListeners;
|
|
24
24
|
protected _init(apiKey: string, options: SessionReplayOptions): Promise<void>;
|
|
25
|
-
setSessionId(sessionId: string | number, deviceId?: string): import("@amplitude/analytics-
|
|
25
|
+
setSessionId(sessionId: string | number, deviceId?: string): import("@amplitude/analytics-core").AmplitudeReturn<void>;
|
|
26
26
|
asyncSetSessionId(sessionId: string | number, deviceId?: string): Promise<void>;
|
|
27
27
|
getSessionReplayProperties(): {
|
|
28
28
|
[key: string]: string | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-replay.d.ts","sourceRoot":"","sources":["../../src/session-replay.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"session-replay.d.ts","sourceRoot":"","sources":["../../src/session-replay.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,OAAO,EAER,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAG1C,OAAO,EAAE,aAAa,EAAE,yBAAyB,EAAE,kCAAkC,EAAE,MAAM,gBAAgB,CAAC;AAC9G,OAAO,EAEL,gBAAgB,EAMjB,MAAM,aAAa,CAAC;AAOrB,OAAO,EACL,sBAAsB,EACtB,0BAA0B,IAAI,mCAAmC,EAIjE,kBAAkB,IAAI,mBAAmB,EACzC,oBAAoB,EACrB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAK5D,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,OAAO,MAAM,CAAC,GAAG,IAAI,CAAQ;IAC9D,UAAU,SAAK;IACf,eAAe,EAAE,eAAe,GAAG,SAAS,CAAC;IAG7C,YAAY,EAAE,WAAW,EAAE,CAAM;IACjC,OAAO,CAAC,UAAU,CAAC,CAAiB;IACpC,OAAO,CAAC,gBAAgB,CAAC,CAAmB;;IAM5C,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,oBAAoB;IAIlD,OAAO,CAAC,sBAAsB,CAmB5B;cAEc,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,oBAAoB;IA8EnE,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM;IAIpD,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM;IAoBrE,0BAA0B;;;IAsC1B,YAAY,aAEV;IAEF,aAAa,aAIX;IAEF;;;;OAIG;IACH,OAAO,CAAC,iBAAiB,CAIvB;IAEF,UAAU,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM;IAStC,UAAU,CAAC,sBAAsB,UAAQ;IAgBzC,YAAY;IAUZ,eAAe;IAwBf,iBAAiB,IAAI,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS;IAWlD,oBAAoB,IAAI,MAAM,GAAG,SAAS;IAa1C,mBAAmB,CAAC,aAAa,EAAE,aAAa,GAAG,SAAS;IAqB5D,YAAY;IA8EZ,mBAAmB,cACN,gBAAgB;;kDAkC3B;IAEF,mBAAmB,aAUjB;IAEF,WAAW;IAIX,YAAY;IAIN,KAAK,CAAC,QAAQ,UAAQ;IAI5B,QAAQ;CAKT"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { __assign, __awaiter, __generator, __read, __spreadArray } from "tslib";
|
|
2
|
-
import { getAnalyticsConnector, getGlobalScope } from '@amplitude/analytics-
|
|
3
|
-
import { Logger, returnWrapper } from '@amplitude/analytics-core';
|
|
2
|
+
import { Logger, returnWrapper, getAnalyticsConnector, getGlobalScope, } from '@amplitude/analytics-core';
|
|
4
3
|
import { record } from '@amplitude/rrweb';
|
|
5
4
|
import { createSessionReplayJoinedConfigGenerator } from './config/joined-config';
|
|
6
5
|
import { BLOCK_CLASS, CustomRRwebEvent, DEFAULT_SESSION_REPLAY_PROPERTY, INTERACTION_MAX_INTERVAL, INTERACTION_MIN_INTERVAL, MASK_TEXT_CLASS, SESSION_REPLAY_DEBUG_PROPERTY, } from './constants';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-replay.js","sourceRoot":"","sources":["../../src/session-replay.ts"],"names":[],"mappings":"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","sourcesContent":["import { getAnalyticsConnector, getGlobalScope } from '@amplitude/analytics-client-common';\nimport { Logger, returnWrapper } from '@amplitude/analytics-core';\nimport { Logger as ILogger, LogLevel } from '@amplitude/analytics-types';\nimport { record } from '@amplitude/rrweb';\nimport { scrollCallback } from '@amplitude/rrweb-types';\nimport { createSessionReplayJoinedConfigGenerator } from './config/joined-config';\nimport { LoggingConfig, SessionReplayJoinedConfig, SessionReplayJoinedConfigGenerator } from './config/types';\nimport {\n BLOCK_CLASS,\n CustomRRwebEvent,\n DEFAULT_SESSION_REPLAY_PROPERTY,\n INTERACTION_MAX_INTERVAL,\n INTERACTION_MIN_INTERVAL,\n MASK_TEXT_CLASS,\n SESSION_REPLAY_DEBUG_PROPERTY,\n} from './constants';\nimport { createEventsManager } from './events/events-manager';\nimport { MultiEventManager } from './events/multi-manager';\nimport { generateHashCode, getDebugConfig, getStorageSize, isSessionInSample, maskFn } from './helpers';\nimport { clickBatcher, clickHook, clickNonBatcher } from './hooks/click';\nimport { ScrollWatcher } from './hooks/scroll';\nimport { SessionIdentifiers } from './identifiers';\nimport {\n AmplitudeSessionReplay,\n SessionReplayEventsManager as AmplitudeSessionReplayEventsManager,\n DebugInfo,\n EventType,\n EventsManagerWithType,\n SessionIdentifiers as ISessionIdentifiers,\n SessionReplayOptions,\n} from './typings/session-replay';\nimport { VERSION } from './version';\nimport { EventCompressor } from './events/event-compressor';\nimport { getRecordConsolePlugin } from '@amplitude/rrweb-plugin-console-record';\nimport { SafeLoggerProvider } from './logger';\nimport { NetworkObservers, NetworkRequestEvent } from './observers';\n\ntype PageLeaveFn = (e: PageTransitionEvent | Event) => void;\n\nexport class SessionReplay implements AmplitudeSessionReplay {\n name = '@amplitude/session-replay-browser';\n config: SessionReplayJoinedConfig | undefined;\n joinedConfigGenerator: SessionReplayJoinedConfigGenerator | undefined;\n identifiers: ISessionIdentifiers | undefined;\n eventsManager?: AmplitudeSessionReplayEventsManager<'replay' | 'interaction', string>;\n loggerProvider: ILogger;\n recordCancelCallback: ReturnType<typeof record> | null = null;\n eventCount = 0;\n eventCompressor: EventCompressor | undefined;\n\n // Visible for testing\n pageLeaveFns: PageLeaveFn[] = [];\n private scrollHook?: scrollCallback;\n private networkObservers?: NetworkObservers;\n\n constructor() {\n this.loggerProvider = new SafeLoggerProvider(new Logger());\n }\n\n init(apiKey: string, options: SessionReplayOptions) {\n return returnWrapper(this._init(apiKey, options));\n }\n\n private teardownEventListeners = (teardown: boolean) => {\n const globalScope = getGlobalScope();\n if (globalScope) {\n globalScope.removeEventListener('blur', this.blurListener);\n globalScope.removeEventListener('focus', this.focusListener);\n !teardown && globalScope.addEventListener('blur', this.blurListener);\n !teardown && globalScope.addEventListener('focus', this.focusListener);\n // prefer pagehide to unload events, this is the standard going forward. it is not\n // 100% reliable, but is bfcache-compatible.\n if (globalScope.self && 'onpagehide' in globalScope.self) {\n globalScope.removeEventListener('pagehide', this.pageLeaveListener);\n !teardown && globalScope.addEventListener('pagehide', this.pageLeaveListener);\n } else {\n // this has performance implications, but is the only way we can reliably send events\n // in browser that don't support pagehide.\n globalScope.removeEventListener('beforeunload', this.pageLeaveListener);\n !teardown && globalScope.addEventListener('beforeunload', this.pageLeaveListener);\n }\n }\n };\n\n protected async _init(apiKey: string, options: SessionReplayOptions) {\n this.loggerProvider = new SafeLoggerProvider(options.loggerProvider || new Logger());\n Object.prototype.hasOwnProperty.call(options, 'logLevel') &&\n this.loggerProvider.enable(options.logLevel as LogLevel);\n this.identifiers = new SessionIdentifiers({ sessionId: options.sessionId, deviceId: options.deviceId });\n this.joinedConfigGenerator = await createSessionReplayJoinedConfigGenerator(apiKey, options);\n this.config = await this.joinedConfigGenerator.generateJoinedConfig(this.identifiers.sessionId);\n\n if (options.sessionId && this.config.interactionConfig?.enabled) {\n const scrollWatcher = ScrollWatcher.default(\n {\n sessionId: options.sessionId,\n type: 'interaction',\n },\n this.config,\n );\n this.pageLeaveFns = [scrollWatcher.send(this.getDeviceId.bind(this)).bind(scrollWatcher)];\n this.scrollHook = scrollWatcher.hook.bind(scrollWatcher);\n }\n\n const managers: EventsManagerWithType<EventType, string>[] = [];\n let { storeType } = this.config;\n if (storeType === 'idb' && !getGlobalScope()?.indexedDB) {\n storeType = 'memory';\n this.loggerProvider.warn('Could not use preferred indexedDB storage, reverting to in memory option.');\n }\n this.loggerProvider.log(`Using ${storeType} for event storage.`);\n try {\n const rrwebEventManager = await createEventsManager<'replay'>({\n config: this.config,\n sessionId: this.identifiers.sessionId,\n type: 'replay',\n storeType,\n });\n managers.push({ name: 'replay', manager: rrwebEventManager });\n } catch (error) {\n const typedError = error as Error;\n this.loggerProvider.warn(`Error occurred while creating replay events manager: ${typedError.toString()}`);\n }\n\n if (this.config.interactionConfig?.enabled) {\n const payloadBatcher = this.config.interactionConfig.batch ? clickBatcher : clickNonBatcher;\n try {\n const interactionEventManager = await createEventsManager<'interaction'>({\n config: this.config,\n sessionId: this.identifiers.sessionId,\n type: 'interaction',\n minInterval: this.config.interactionConfig.trackEveryNms ?? INTERACTION_MIN_INTERVAL,\n maxInterval: INTERACTION_MAX_INTERVAL,\n payloadBatcher,\n storeType,\n });\n managers.push({ name: 'interaction', manager: interactionEventManager });\n } catch (error) {\n const typedError = error as Error;\n this.loggerProvider.warn(`Error occurred while creating interaction events manager: ${typedError.toString()}`);\n }\n }\n\n this.eventsManager = new MultiEventManager<'replay' | 'interaction', string>(...managers);\n // To prevent too many threads.\n if (this.eventCompressor) {\n this.eventCompressor.terminate();\n }\n this.eventCompressor = new EventCompressor(this.eventsManager, this.config, this.getDeviceId());\n\n // Initialize network observers if logging is enabled\n if (this.config.loggingConfig?.network?.enabled) {\n this.networkObservers = new NetworkObservers();\n }\n\n this.loggerProvider.log('Installing @amplitude/session-replay-browser.');\n\n this.teardownEventListeners(false);\n\n this.initialize(true);\n }\n\n setSessionId(sessionId: string | number, deviceId?: string) {\n return returnWrapper(this.asyncSetSessionId(sessionId, deviceId));\n }\n\n async asyncSetSessionId(sessionId: string | number, deviceId?: string) {\n const previousSessionId = this.identifiers && this.identifiers.sessionId;\n if (previousSessionId) {\n this.sendEvents(previousSessionId);\n }\n\n const deviceIdForReplayId = deviceId || this.getDeviceId();\n this.identifiers = new SessionIdentifiers({\n sessionId: sessionId,\n deviceId: deviceIdForReplayId,\n });\n\n // If there is no previous session id, SDK is being initialized for the first time,\n // and config was just fetched in initialization, so no need to fetch it a second time\n if (this.joinedConfigGenerator && previousSessionId) {\n this.config = await this.joinedConfigGenerator.generateJoinedConfig(this.identifiers.sessionId);\n }\n this.recordEvents();\n }\n\n getSessionReplayProperties() {\n const config = this.config;\n const identifiers = this.identifiers;\n if (!config || !identifiers) {\n this.loggerProvider.warn('Session replay init has not been called, cannot get session replay properties.');\n return {};\n }\n\n const shouldRecord = this.getShouldRecord();\n let eventProperties: { [key: string]: string | null } = {};\n\n if (shouldRecord) {\n eventProperties = {\n [DEFAULT_SESSION_REPLAY_PROPERTY]: identifiers.sessionReplayId ? identifiers.sessionReplayId : null,\n };\n if (config.debugMode) {\n eventProperties[SESSION_REPLAY_DEBUG_PROPERTY] = JSON.stringify({\n appHash: generateHashCode(config.apiKey).toString(),\n });\n }\n }\n\n void this.addCustomRRWebEvent(\n CustomRRwebEvent.GET_SR_PROPS,\n {\n shouldRecord,\n eventProperties: eventProperties,\n },\n this.eventCount === 10,\n );\n if (this.eventCount === 10) {\n this.eventCount = 0;\n }\n this.eventCount++;\n\n return eventProperties;\n }\n\n blurListener = () => {\n this.sendEvents();\n };\n\n focusListener = () => {\n // Restart recording on focus to ensure that when user\n // switches tabs, we take a full snapshot\n this.recordEvents();\n };\n\n /**\n * This is an instance member so that if init is called multiple times\n * it doesn't add another listener to the page leave event. This is to\n * prevent duplicate listener actions from firing.\n */\n private pageLeaveListener = (e: PageTransitionEvent | Event) => {\n this.pageLeaveFns.forEach((fn) => {\n fn(e);\n });\n };\n\n sendEvents(sessionId?: string | number) {\n const sessionIdToSend = sessionId || this.identifiers?.sessionId;\n const deviceId = this.getDeviceId();\n this.eventsManager &&\n sessionIdToSend &&\n deviceId &&\n this.eventsManager.sendCurrentSequenceEvents({ sessionId: sessionIdToSend, deviceId });\n }\n\n initialize(shouldSendStoredEvents = false) {\n if (!this.identifiers?.sessionId) {\n this.loggerProvider.log(`Session is not being recorded due to lack of session id.`);\n return;\n }\n\n const deviceId = this.getDeviceId();\n if (!deviceId) {\n this.loggerProvider.log(`Session is not being recorded due to lack of device id.`);\n return;\n }\n this.eventsManager && shouldSendStoredEvents && this.eventsManager.sendStoredEvents({ deviceId });\n\n this.recordEvents();\n }\n\n shouldOptOut() {\n let identityStoreOptOut: boolean | undefined;\n if (this.config?.instanceName) {\n const identityStore = getAnalyticsConnector(this.config.instanceName).identityStore;\n identityStoreOptOut = identityStore.getIdentity().optOut;\n }\n\n return identityStoreOptOut !== undefined ? identityStoreOptOut : this.config?.optOut;\n }\n\n getShouldRecord() {\n if (!this.identifiers || !this.config || !this.identifiers.sessionId) {\n this.loggerProvider.warn(`Session is not being recorded due to lack of config, please call sessionReplay.init.`);\n return false;\n }\n if (!this.config.captureEnabled) {\n this.loggerProvider.log(\n `Session ${this.identifiers.sessionId} not being captured due to capture being disabled for project or because the remote config could not be fetched.`,\n );\n return false;\n }\n\n if (this.shouldOptOut()) {\n this.loggerProvider.log(`Opting session ${this.identifiers.sessionId} out of recording due to optOut config.`);\n return false;\n }\n\n const isInSample = isSessionInSample(this.identifiers.sessionId, this.config.sampleRate);\n if (!isInSample) {\n this.loggerProvider.log(`Opting session ${this.identifiers.sessionId} out of recording due to sample rate.`);\n }\n return isInSample;\n }\n\n getBlockSelectors(): string | string[] | undefined {\n // For some reason, this defaults to empty array ([]) if undefined in the compiled script.\n // Empty arrays cause errors when being evaluated in Safari.\n // Force the selector to be undefined if it's an empty array.\n const blockSelector = this.config?.privacyConfig?.blockSelector ?? [];\n if (blockSelector.length === 0) {\n return undefined;\n }\n return blockSelector;\n }\n\n getMaskTextSelectors(): string | undefined {\n if (this.config?.privacyConfig?.defaultMaskLevel === 'conservative') {\n return '*';\n }\n\n const maskSelector = this.config?.privacyConfig?.maskSelector;\n if (!maskSelector) {\n return;\n }\n\n return maskSelector as unknown as string;\n }\n\n getRecordingPlugins(loggingConfig: LoggingConfig | undefined) {\n const plugins = [];\n\n // Default plugin settings -\n // {\n // level: ['info', 'log', 'warn', 'error'],\n // lengthThreshold: 10000,\n // stringifyOptions: {\n // stringLengthLimit: undefined,\n // numOfKeysLimit: 50,\n // depthOfLimit: 4,\n // },\n // logger: window.console,\n // }\n if (loggingConfig?.console?.enabled) {\n plugins.push(getRecordConsolePlugin({ level: loggingConfig.console.levels }));\n }\n\n return plugins.length > 0 ? plugins : undefined;\n }\n\n recordEvents() {\n const config = this.config;\n const shouldRecord = this.getShouldRecord();\n const sessionId = this.identifiers?.sessionId;\n if (!shouldRecord || !sessionId || !config) {\n return;\n }\n this.stopRecordingEvents();\n this.networkObservers?.start((event: NetworkRequestEvent) => {\n void this.addCustomRRWebEvent(CustomRRwebEvent.FETCH_REQUEST, event);\n });\n const { privacyConfig, interactionConfig, loggingConfig } = config;\n\n const hooks = interactionConfig?.enabled\n ? {\n mouseInteraction:\n this.eventsManager &&\n clickHook(this.loggerProvider, {\n eventsManager: this.eventsManager,\n sessionId,\n deviceIdFn: this.getDeviceId.bind(this),\n }),\n scroll: this.scrollHook,\n }\n : {};\n\n this.loggerProvider.log(`Session Replay capture beginning for ${sessionId}.`);\n this.recordCancelCallback = record({\n emit: (event) => {\n if (this.shouldOptOut()) {\n this.loggerProvider.log(`Opting session ${sessionId} out of recording due to optOut config.`);\n this.stopRecordingEvents();\n this.sendEvents();\n return;\n }\n\n if (this.eventCompressor) {\n // Schedule processing during idle time if the browser supports requestIdleCallback\n this.eventCompressor.enqueueEvent(event, sessionId);\n }\n },\n inlineStylesheet: config.shouldInlineStylesheet,\n hooks,\n maskAllInputs: true,\n maskTextClass: MASK_TEXT_CLASS,\n blockClass: BLOCK_CLASS,\n // rrweb only exposes string type through its types, but arrays are also be supported. #class, ['#class', 'id']\n blockSelector: this.getBlockSelectors() as string | undefined,\n maskInputFn: maskFn('input', privacyConfig),\n maskTextFn: maskFn('text', privacyConfig),\n // rrweb only exposes string type through its types, but arrays are also be supported. since rrweb uses .matches() which supports arrays.\n maskTextSelector: this.getMaskTextSelectors(),\n recordCanvas: false,\n errorHandler: (error) => {\n const typedError = error as Error & { _external_?: boolean };\n\n // styled-components relies on this error being thrown and bubbled up, rrweb is otherwise suppressing it\n if (typedError.message.includes('insertRule') && typedError.message.includes('CSSStyleSheet')) {\n throw typedError;\n }\n\n // rrweb does monkey patching on certain window functions such as CSSStyleSheet.proptype.insertRule,\n // and errors from external clients calling these functions can get suppressed. Styled components depend\n // on these errors being re-thrown.\n if (typedError._external_) {\n throw typedError;\n }\n\n this.loggerProvider.warn('Error while capturing replay: ', typedError.toString());\n // Return true so that we don't clutter user's consoles with internal rrweb errors\n return true;\n },\n plugins: this.getRecordingPlugins(loggingConfig),\n });\n\n void this.addCustomRRWebEvent(CustomRRwebEvent.DEBUG_INFO);\n }\n\n addCustomRRWebEvent = async (\n eventName: CustomRRwebEvent,\n eventData: { [key: string]: any } = {},\n addStorageInfo = true,\n ) => {\n try {\n let debugInfo: DebugInfo | undefined = undefined;\n const config = this.config;\n if (config) {\n debugInfo = {\n config: getDebugConfig(config),\n version: VERSION,\n };\n if (addStorageInfo) {\n const storageSizeData = await getStorageSize();\n debugInfo = {\n ...storageSizeData,\n ...debugInfo,\n };\n }\n }\n // Check first to ensure we are recording\n if (this.recordCancelCallback) {\n record.addCustomEvent(eventName, {\n ...eventData,\n ...debugInfo,\n });\n } else {\n this.loggerProvider.debug(\n `Not able to add custom replay capture event ${eventName} due to no ongoing recording.`,\n );\n }\n } catch (e) {\n this.loggerProvider.debug('Error while adding custom replay capture event: ', e);\n }\n };\n\n stopRecordingEvents = () => {\n try {\n this.loggerProvider.log('Session Replay capture stopping.');\n this.recordCancelCallback && this.recordCancelCallback();\n this.recordCancelCallback = null;\n this.networkObservers?.stop();\n } catch (error) {\n const typedError = error as Error;\n this.loggerProvider.warn(`Error occurred while stopping replay capture: ${typedError.toString()}`);\n }\n };\n\n getDeviceId() {\n return this.identifiers?.deviceId;\n }\n\n getSessionId() {\n return this.identifiers?.sessionId;\n }\n\n async flush(useRetry = false) {\n return this.eventsManager?.flush(useRetry);\n }\n\n shutdown() {\n this.teardownEventListeners(true);\n this.stopRecordingEvents();\n this.sendEvents();\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"session-replay.js","sourceRoot":"","sources":["../../src/session-replay.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Logger,\n returnWrapper,\n getAnalyticsConnector,\n getGlobalScope,\n ILogger,\n LogLevel,\n} from '@amplitude/analytics-core';\nimport { record } from '@amplitude/rrweb';\nimport { scrollCallback } from '@amplitude/rrweb-types';\nimport { createSessionReplayJoinedConfigGenerator } from './config/joined-config';\nimport { LoggingConfig, SessionReplayJoinedConfig, SessionReplayJoinedConfigGenerator } from './config/types';\nimport {\n BLOCK_CLASS,\n CustomRRwebEvent,\n DEFAULT_SESSION_REPLAY_PROPERTY,\n INTERACTION_MAX_INTERVAL,\n INTERACTION_MIN_INTERVAL,\n MASK_TEXT_CLASS,\n SESSION_REPLAY_DEBUG_PROPERTY,\n} from './constants';\nimport { createEventsManager } from './events/events-manager';\nimport { MultiEventManager } from './events/multi-manager';\nimport { generateHashCode, getDebugConfig, getStorageSize, isSessionInSample, maskFn } from './helpers';\nimport { clickBatcher, clickHook, clickNonBatcher } from './hooks/click';\nimport { ScrollWatcher } from './hooks/scroll';\nimport { SessionIdentifiers } from './identifiers';\nimport {\n AmplitudeSessionReplay,\n SessionReplayEventsManager as AmplitudeSessionReplayEventsManager,\n DebugInfo,\n EventType,\n EventsManagerWithType,\n SessionIdentifiers as ISessionIdentifiers,\n SessionReplayOptions,\n} from './typings/session-replay';\nimport { VERSION } from './version';\nimport { EventCompressor } from './events/event-compressor';\nimport { getRecordConsolePlugin } from '@amplitude/rrweb-plugin-console-record';\nimport { SafeLoggerProvider } from './logger';\nimport { NetworkObservers, NetworkRequestEvent } from './observers';\n\ntype PageLeaveFn = (e: PageTransitionEvent | Event) => void;\n\nexport class SessionReplay implements AmplitudeSessionReplay {\n name = '@amplitude/session-replay-browser';\n config: SessionReplayJoinedConfig | undefined;\n joinedConfigGenerator: SessionReplayJoinedConfigGenerator | undefined;\n identifiers: ISessionIdentifiers | undefined;\n eventsManager?: AmplitudeSessionReplayEventsManager<'replay' | 'interaction', string>;\n loggerProvider: ILogger;\n recordCancelCallback: ReturnType<typeof record> | null = null;\n eventCount = 0;\n eventCompressor: EventCompressor | undefined;\n\n // Visible for testing\n pageLeaveFns: PageLeaveFn[] = [];\n private scrollHook?: scrollCallback;\n private networkObservers?: NetworkObservers;\n\n constructor() {\n this.loggerProvider = new SafeLoggerProvider(new Logger());\n }\n\n init(apiKey: string, options: SessionReplayOptions) {\n return returnWrapper(this._init(apiKey, options));\n }\n\n private teardownEventListeners = (teardown: boolean) => {\n const globalScope = getGlobalScope();\n if (globalScope) {\n globalScope.removeEventListener('blur', this.blurListener);\n globalScope.removeEventListener('focus', this.focusListener);\n !teardown && globalScope.addEventListener('blur', this.blurListener);\n !teardown && globalScope.addEventListener('focus', this.focusListener);\n // prefer pagehide to unload events, this is the standard going forward. it is not\n // 100% reliable, but is bfcache-compatible.\n if (globalScope.self && 'onpagehide' in globalScope.self) {\n globalScope.removeEventListener('pagehide', this.pageLeaveListener);\n !teardown && globalScope.addEventListener('pagehide', this.pageLeaveListener);\n } else {\n // this has performance implications, but is the only way we can reliably send events\n // in browser that don't support pagehide.\n globalScope.removeEventListener('beforeunload', this.pageLeaveListener);\n !teardown && globalScope.addEventListener('beforeunload', this.pageLeaveListener);\n }\n }\n };\n\n protected async _init(apiKey: string, options: SessionReplayOptions) {\n this.loggerProvider = new SafeLoggerProvider(options.loggerProvider || new Logger());\n Object.prototype.hasOwnProperty.call(options, 'logLevel') &&\n this.loggerProvider.enable(options.logLevel as LogLevel);\n this.identifiers = new SessionIdentifiers({ sessionId: options.sessionId, deviceId: options.deviceId });\n this.joinedConfigGenerator = await createSessionReplayJoinedConfigGenerator(apiKey, options);\n this.config = await this.joinedConfigGenerator.generateJoinedConfig(this.identifiers.sessionId);\n\n if (options.sessionId && this.config.interactionConfig?.enabled) {\n const scrollWatcher = ScrollWatcher.default(\n {\n sessionId: options.sessionId,\n type: 'interaction',\n },\n this.config,\n );\n this.pageLeaveFns = [scrollWatcher.send(this.getDeviceId.bind(this)).bind(scrollWatcher)];\n this.scrollHook = scrollWatcher.hook.bind(scrollWatcher);\n }\n\n const managers: EventsManagerWithType<EventType, string>[] = [];\n let { storeType } = this.config;\n if (storeType === 'idb' && !getGlobalScope()?.indexedDB) {\n storeType = 'memory';\n this.loggerProvider.warn('Could not use preferred indexedDB storage, reverting to in memory option.');\n }\n this.loggerProvider.log(`Using ${storeType} for event storage.`);\n try {\n const rrwebEventManager = await createEventsManager<'replay'>({\n config: this.config,\n sessionId: this.identifiers.sessionId,\n type: 'replay',\n storeType,\n });\n managers.push({ name: 'replay', manager: rrwebEventManager });\n } catch (error) {\n const typedError = error as Error;\n this.loggerProvider.warn(`Error occurred while creating replay events manager: ${typedError.toString()}`);\n }\n\n if (this.config.interactionConfig?.enabled) {\n const payloadBatcher = this.config.interactionConfig.batch ? clickBatcher : clickNonBatcher;\n try {\n const interactionEventManager = await createEventsManager<'interaction'>({\n config: this.config,\n sessionId: this.identifiers.sessionId,\n type: 'interaction',\n minInterval: this.config.interactionConfig.trackEveryNms ?? INTERACTION_MIN_INTERVAL,\n maxInterval: INTERACTION_MAX_INTERVAL,\n payloadBatcher,\n storeType,\n });\n managers.push({ name: 'interaction', manager: interactionEventManager });\n } catch (error) {\n const typedError = error as Error;\n this.loggerProvider.warn(`Error occurred while creating interaction events manager: ${typedError.toString()}`);\n }\n }\n\n this.eventsManager = new MultiEventManager<'replay' | 'interaction', string>(...managers);\n // To prevent too many threads.\n if (this.eventCompressor) {\n this.eventCompressor.terminate();\n }\n this.eventCompressor = new EventCompressor(this.eventsManager, this.config, this.getDeviceId());\n\n // Initialize network observers if logging is enabled\n if (this.config.loggingConfig?.network?.enabled) {\n this.networkObservers = new NetworkObservers();\n }\n\n this.loggerProvider.log('Installing @amplitude/session-replay-browser.');\n\n this.teardownEventListeners(false);\n\n this.initialize(true);\n }\n\n setSessionId(sessionId: string | number, deviceId?: string) {\n return returnWrapper(this.asyncSetSessionId(sessionId, deviceId));\n }\n\n async asyncSetSessionId(sessionId: string | number, deviceId?: string) {\n const previousSessionId = this.identifiers && this.identifiers.sessionId;\n if (previousSessionId) {\n this.sendEvents(previousSessionId);\n }\n\n const deviceIdForReplayId = deviceId || this.getDeviceId();\n this.identifiers = new SessionIdentifiers({\n sessionId: sessionId,\n deviceId: deviceIdForReplayId,\n });\n\n // If there is no previous session id, SDK is being initialized for the first time,\n // and config was just fetched in initialization, so no need to fetch it a second time\n if (this.joinedConfigGenerator && previousSessionId) {\n this.config = await this.joinedConfigGenerator.generateJoinedConfig(this.identifiers.sessionId);\n }\n this.recordEvents();\n }\n\n getSessionReplayProperties() {\n const config = this.config;\n const identifiers = this.identifiers;\n if (!config || !identifiers) {\n this.loggerProvider.warn('Session replay init has not been called, cannot get session replay properties.');\n return {};\n }\n\n const shouldRecord = this.getShouldRecord();\n let eventProperties: { [key: string]: string | null } = {};\n\n if (shouldRecord) {\n eventProperties = {\n [DEFAULT_SESSION_REPLAY_PROPERTY]: identifiers.sessionReplayId ? identifiers.sessionReplayId : null,\n };\n if (config.debugMode) {\n eventProperties[SESSION_REPLAY_DEBUG_PROPERTY] = JSON.stringify({\n appHash: generateHashCode(config.apiKey).toString(),\n });\n }\n }\n\n void this.addCustomRRWebEvent(\n CustomRRwebEvent.GET_SR_PROPS,\n {\n shouldRecord,\n eventProperties: eventProperties,\n },\n this.eventCount === 10,\n );\n if (this.eventCount === 10) {\n this.eventCount = 0;\n }\n this.eventCount++;\n\n return eventProperties;\n }\n\n blurListener = () => {\n this.sendEvents();\n };\n\n focusListener = () => {\n // Restart recording on focus to ensure that when user\n // switches tabs, we take a full snapshot\n this.recordEvents();\n };\n\n /**\n * This is an instance member so that if init is called multiple times\n * it doesn't add another listener to the page leave event. This is to\n * prevent duplicate listener actions from firing.\n */\n private pageLeaveListener = (e: PageTransitionEvent | Event) => {\n this.pageLeaveFns.forEach((fn) => {\n fn(e);\n });\n };\n\n sendEvents(sessionId?: string | number) {\n const sessionIdToSend = sessionId || this.identifiers?.sessionId;\n const deviceId = this.getDeviceId();\n this.eventsManager &&\n sessionIdToSend &&\n deviceId &&\n this.eventsManager.sendCurrentSequenceEvents({ sessionId: sessionIdToSend, deviceId });\n }\n\n initialize(shouldSendStoredEvents = false) {\n if (!this.identifiers?.sessionId) {\n this.loggerProvider.log(`Session is not being recorded due to lack of session id.`);\n return;\n }\n\n const deviceId = this.getDeviceId();\n if (!deviceId) {\n this.loggerProvider.log(`Session is not being recorded due to lack of device id.`);\n return;\n }\n this.eventsManager && shouldSendStoredEvents && this.eventsManager.sendStoredEvents({ deviceId });\n\n this.recordEvents();\n }\n\n shouldOptOut() {\n let identityStoreOptOut: boolean | undefined;\n if (this.config?.instanceName) {\n const identityStore = getAnalyticsConnector(this.config.instanceName).identityStore;\n identityStoreOptOut = identityStore.getIdentity().optOut;\n }\n\n return identityStoreOptOut !== undefined ? identityStoreOptOut : this.config?.optOut;\n }\n\n getShouldRecord() {\n if (!this.identifiers || !this.config || !this.identifiers.sessionId) {\n this.loggerProvider.warn(`Session is not being recorded due to lack of config, please call sessionReplay.init.`);\n return false;\n }\n if (!this.config.captureEnabled) {\n this.loggerProvider.log(\n `Session ${this.identifiers.sessionId} not being captured due to capture being disabled for project or because the remote config could not be fetched.`,\n );\n return false;\n }\n\n if (this.shouldOptOut()) {\n this.loggerProvider.log(`Opting session ${this.identifiers.sessionId} out of recording due to optOut config.`);\n return false;\n }\n\n const isInSample = isSessionInSample(this.identifiers.sessionId, this.config.sampleRate);\n if (!isInSample) {\n this.loggerProvider.log(`Opting session ${this.identifiers.sessionId} out of recording due to sample rate.`);\n }\n return isInSample;\n }\n\n getBlockSelectors(): string | string[] | undefined {\n // For some reason, this defaults to empty array ([]) if undefined in the compiled script.\n // Empty arrays cause errors when being evaluated in Safari.\n // Force the selector to be undefined if it's an empty array.\n const blockSelector = this.config?.privacyConfig?.blockSelector ?? [];\n if (blockSelector.length === 0) {\n return undefined;\n }\n return blockSelector;\n }\n\n getMaskTextSelectors(): string | undefined {\n if (this.config?.privacyConfig?.defaultMaskLevel === 'conservative') {\n return '*';\n }\n\n const maskSelector = this.config?.privacyConfig?.maskSelector;\n if (!maskSelector) {\n return;\n }\n\n return maskSelector as unknown as string;\n }\n\n getRecordingPlugins(loggingConfig: LoggingConfig | undefined) {\n const plugins = [];\n\n // Default plugin settings -\n // {\n // level: ['info', 'log', 'warn', 'error'],\n // lengthThreshold: 10000,\n // stringifyOptions: {\n // stringLengthLimit: undefined,\n // numOfKeysLimit: 50,\n // depthOfLimit: 4,\n // },\n // logger: window.console,\n // }\n if (loggingConfig?.console?.enabled) {\n plugins.push(getRecordConsolePlugin({ level: loggingConfig.console.levels }));\n }\n\n return plugins.length > 0 ? plugins : undefined;\n }\n\n recordEvents() {\n const config = this.config;\n const shouldRecord = this.getShouldRecord();\n const sessionId = this.identifiers?.sessionId;\n if (!shouldRecord || !sessionId || !config) {\n return;\n }\n this.stopRecordingEvents();\n this.networkObservers?.start((event: NetworkRequestEvent) => {\n void this.addCustomRRWebEvent(CustomRRwebEvent.FETCH_REQUEST, event);\n });\n const { privacyConfig, interactionConfig, loggingConfig } = config;\n\n const hooks = interactionConfig?.enabled\n ? {\n mouseInteraction:\n this.eventsManager &&\n clickHook(this.loggerProvider, {\n eventsManager: this.eventsManager,\n sessionId,\n deviceIdFn: this.getDeviceId.bind(this),\n }),\n scroll: this.scrollHook,\n }\n : {};\n\n this.loggerProvider.log(`Session Replay capture beginning for ${sessionId}.`);\n this.recordCancelCallback = record({\n emit: (event) => {\n if (this.shouldOptOut()) {\n this.loggerProvider.log(`Opting session ${sessionId} out of recording due to optOut config.`);\n this.stopRecordingEvents();\n this.sendEvents();\n return;\n }\n\n if (this.eventCompressor) {\n // Schedule processing during idle time if the browser supports requestIdleCallback\n this.eventCompressor.enqueueEvent(event, sessionId);\n }\n },\n inlineStylesheet: config.shouldInlineStylesheet,\n hooks,\n maskAllInputs: true,\n maskTextClass: MASK_TEXT_CLASS,\n blockClass: BLOCK_CLASS,\n // rrweb only exposes string type through its types, but arrays are also be supported. #class, ['#class', 'id']\n blockSelector: this.getBlockSelectors() as string | undefined,\n maskInputFn: maskFn('input', privacyConfig),\n maskTextFn: maskFn('text', privacyConfig),\n // rrweb only exposes string type through its types, but arrays are also be supported. since rrweb uses .matches() which supports arrays.\n maskTextSelector: this.getMaskTextSelectors(),\n recordCanvas: false,\n errorHandler: (error) => {\n const typedError = error as Error & { _external_?: boolean };\n\n // styled-components relies on this error being thrown and bubbled up, rrweb is otherwise suppressing it\n if (typedError.message.includes('insertRule') && typedError.message.includes('CSSStyleSheet')) {\n throw typedError;\n }\n\n // rrweb does monkey patching on certain window functions such as CSSStyleSheet.proptype.insertRule,\n // and errors from external clients calling these functions can get suppressed. Styled components depend\n // on these errors being re-thrown.\n if (typedError._external_) {\n throw typedError;\n }\n\n this.loggerProvider.warn('Error while capturing replay: ', typedError.toString());\n // Return true so that we don't clutter user's consoles with internal rrweb errors\n return true;\n },\n plugins: this.getRecordingPlugins(loggingConfig),\n });\n\n void this.addCustomRRWebEvent(CustomRRwebEvent.DEBUG_INFO);\n }\n\n addCustomRRWebEvent = async (\n eventName: CustomRRwebEvent,\n eventData: { [key: string]: any } = {},\n addStorageInfo = true,\n ) => {\n try {\n let debugInfo: DebugInfo | undefined = undefined;\n const config = this.config;\n if (config) {\n debugInfo = {\n config: getDebugConfig(config),\n version: VERSION,\n };\n if (addStorageInfo) {\n const storageSizeData = await getStorageSize();\n debugInfo = {\n ...storageSizeData,\n ...debugInfo,\n };\n }\n }\n // Check first to ensure we are recording\n if (this.recordCancelCallback) {\n record.addCustomEvent(eventName, {\n ...eventData,\n ...debugInfo,\n });\n } else {\n this.loggerProvider.debug(\n `Not able to add custom replay capture event ${eventName} due to no ongoing recording.`,\n );\n }\n } catch (e) {\n this.loggerProvider.debug('Error while adding custom replay capture event: ', e);\n }\n };\n\n stopRecordingEvents = () => {\n try {\n this.loggerProvider.log('Session Replay capture stopping.');\n this.recordCancelCallback && this.recordCancelCallback();\n this.recordCancelCallback = null;\n this.networkObservers?.stop();\n } catch (error) {\n const typedError = error as Error;\n this.loggerProvider.warn(`Error occurred while stopping replay capture: ${typedError.toString()}`);\n }\n };\n\n getDeviceId() {\n return this.identifiers?.deviceId;\n }\n\n getSessionId() {\n return this.identifiers?.sessionId;\n }\n\n async flush(useRetry = false) {\n return this.eventsManager?.flush(useRetry);\n }\n\n shutdown() {\n this.teardownEventListeners(true);\n this.stopRecordingEvents();\n this.sendEvents();\n }\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ILogger } from '@amplitude/analytics-core';
|
|
2
2
|
import { SessionReplayTrackDestination as AmplitudeSessionReplayTrackDestination, SessionReplayDestination, SessionReplayDestinationContext } from './typings/session-replay';
|
|
3
3
|
export type PayloadBatcher = ({ version, events }: {
|
|
4
4
|
version: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"track-destination.d.ts","sourceRoot":"","sources":["../../src/track-destination.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"track-destination.d.ts","sourceRoot":"","sources":["../../src/track-destination.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,OAAO,EAAU,MAAM,2BAA2B,CAAC;AAS3E,OAAO,EACL,6BAA6B,IAAI,sCAAsC,EACvE,wBAAwB,EACxB,+BAA+B,EAChC,MAAM,0BAA0B,CAAC;AAIlC,MAAM,MAAM,cAAc,GAAG,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,KAAK;IAC3F,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,OAAO,EAAE,CAAC;CACnB,CAAC;AAEF,qBAAa,6BAA8B,YAAW,sCAAsC;IAC1F,cAAc,EAAE,OAAO,CAAC;IACxB,UAAU,SAAM;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,SAAQ;IACpB,OAAO,CAAC,SAAS,CAA8C;IAC/D,cAAc,EAAE,cAAc,CAAC;IAC/B,KAAK,EAAE,+BAA+B,EAAE,CAAM;gBAElC,EACV,cAAc,EACd,cAAc,EACd,cAAc,GACf,EAAE;QACD,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,cAAc,EAAE,OAAO,CAAC;QACxB,cAAc,CAAC,EAAE,cAAc,CAAC;KACjC;IAMD,cAAc,CAAC,eAAe,EAAE,wBAAwB;IAQxD,UAAU,CAAC,GAAG,IAAI,EAAE,+BAA+B,EAAE;IA0BrD,QAAQ,CAAC,OAAO,EAAE,MAAM;IAWlB,KAAK,CAAC,QAAQ,UAAQ;IActB,IAAI,CAAC,OAAO,EAAE,+BAA+B,EAAE,QAAQ,UAAO;IAiEpE,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,+BAA+B;IActE,qBAAqB,CAAC,OAAO,EAAE,+BAA+B;IAQ9D,mBAAmB,CAAC,OAAO,EAAE,+BAA+B;IAO5D,eAAe,CAAC,EACd,OAAO,EACP,GAAG,EACH,OAAO,GACR,EAAE;QACD,OAAO,EAAE,+BAA+B,CAAC;QACzC,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB;CAQF"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { __assign, __awaiter, __generator } from "tslib";
|
|
2
|
-
import { BaseTransport } from '@amplitude/analytics-core';
|
|
3
|
-
import { Status } from '@amplitude/analytics-types';
|
|
2
|
+
import { BaseTransport, Status } from '@amplitude/analytics-core';
|
|
4
3
|
import { getCurrentUrl, getServerUrl } from './helpers';
|
|
5
4
|
import { MAX_RETRIES_EXCEEDED_MESSAGE, MISSING_API_KEY_MESSAGE, MISSING_DEVICE_ID_MESSAGE, UNEXPECTED_ERROR_MESSAGE, UNEXPECTED_NETWORK_ERROR_MESSAGE, } from './messages';
|
|
6
5
|
import { VERSION } from './version';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"track-destination.js","sourceRoot":"","sources":["../../src/track-destination.ts"],"names":[],"mappings":"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","sourcesContent":["import { BaseTransport } from '@amplitude/analytics-core';\nimport { Logger as ILogger, Status } from '@amplitude/analytics-types';\nimport { getCurrentUrl, getServerUrl } from './helpers';\nimport {\n MAX_RETRIES_EXCEEDED_MESSAGE,\n MISSING_API_KEY_MESSAGE,\n MISSING_DEVICE_ID_MESSAGE,\n UNEXPECTED_ERROR_MESSAGE,\n UNEXPECTED_NETWORK_ERROR_MESSAGE,\n} from './messages';\nimport {\n SessionReplayTrackDestination as AmplitudeSessionReplayTrackDestination,\n SessionReplayDestination,\n SessionReplayDestinationContext,\n} from './typings/session-replay';\nimport { VERSION } from './version';\nimport { MAX_URL_LENGTH, KB_SIZE } from './constants';\n\nexport type PayloadBatcher = ({ version, events }: { version: number; events: string[] }) => {\n version: number;\n events: unknown[];\n};\n\nexport class SessionReplayTrackDestination implements AmplitudeSessionReplayTrackDestination {\n loggerProvider: ILogger;\n storageKey = '';\n trackServerUrl?: string;\n retryTimeout = 1000;\n private scheduled: ReturnType<typeof setTimeout> | null = null;\n payloadBatcher: PayloadBatcher;\n queue: SessionReplayDestinationContext[] = [];\n\n constructor({\n trackServerUrl,\n loggerProvider,\n payloadBatcher,\n }: {\n trackServerUrl?: string;\n loggerProvider: ILogger;\n payloadBatcher?: PayloadBatcher;\n }) {\n this.loggerProvider = loggerProvider;\n this.payloadBatcher = payloadBatcher ? payloadBatcher : (payload) => payload;\n this.trackServerUrl = trackServerUrl;\n }\n\n sendEventsList(destinationData: SessionReplayDestination) {\n this.addToQueue({\n ...destinationData,\n attempts: 0,\n timeout: 0,\n });\n }\n\n addToQueue(...list: SessionReplayDestinationContext[]) {\n const tryable = list.filter((context) => {\n if (context.attempts < (context.flushMaxRetries || 0)) {\n context.attempts += 1;\n return true;\n }\n this.completeRequest({\n context,\n err: MAX_RETRIES_EXCEEDED_MESSAGE,\n });\n return false;\n });\n tryable.forEach((context) => {\n this.queue = this.queue.concat(context);\n if (context.timeout === 0) {\n this.schedule(0);\n return;\n }\n\n setTimeout(() => {\n context.timeout = 0;\n this.schedule(0);\n }, context.timeout);\n });\n }\n\n schedule(timeout: number) {\n if (this.scheduled) return;\n this.scheduled = setTimeout(() => {\n void this.flush(true).then(() => {\n if (this.queue.length > 0) {\n this.schedule(timeout);\n }\n });\n }, timeout);\n }\n\n async flush(useRetry = false) {\n const list: SessionReplayDestinationContext[] = [];\n const later: SessionReplayDestinationContext[] = [];\n this.queue.forEach((context) => (context.timeout === 0 ? list.push(context) : later.push(context)));\n this.queue = later;\n\n if (this.scheduled) {\n clearTimeout(this.scheduled);\n this.scheduled = null;\n }\n\n await Promise.all(list.map((context) => this.send(context, useRetry)));\n }\n\n async send(context: SessionReplayDestinationContext, useRetry = true) {\n const apiKey = context.apiKey;\n if (!apiKey) {\n return this.completeRequest({ context, err: MISSING_API_KEY_MESSAGE });\n }\n const deviceId = context.deviceId;\n if (!deviceId) {\n return this.completeRequest({ context, err: MISSING_DEVICE_ID_MESSAGE });\n }\n const url = getCurrentUrl();\n const version = VERSION;\n const sampleRate = context.sampleRate;\n const urlParams = new URLSearchParams({\n device_id: deviceId,\n session_id: `${context.sessionId}`,\n type: `${context.type}`,\n });\n const sessionReplayLibrary = `${context.version?.type || 'standalone'}/${context.version?.version || version}`;\n const payload = this.payloadBatcher({\n version: 1,\n events: context.events,\n });\n\n if (payload.events.length === 0) {\n this.completeRequest({ context });\n return;\n }\n\n try {\n const options: RequestInit = {\n headers: {\n 'Content-Type': 'application/json',\n Accept: '*/*',\n Authorization: `Bearer ${apiKey}`,\n 'X-Client-Version': version,\n 'X-Client-Library': sessionReplayLibrary,\n 'X-Client-Url': url.substring(0, MAX_URL_LENGTH), // limit url length to 1000 characters to avoid ELB 400 error\n 'X-Client-Sample-Rate': `${sampleRate}`,\n },\n body: JSON.stringify(payload),\n method: 'POST',\n };\n\n const serverUrl = `${getServerUrl(context.serverZone, this.trackServerUrl)}?${urlParams.toString()}`;\n const res = await fetch(serverUrl, options);\n if (res === null) {\n this.completeRequest({ context, err: UNEXPECTED_ERROR_MESSAGE });\n return;\n }\n if (!useRetry) {\n let responseBody = '';\n try {\n responseBody = JSON.stringify(res.body, null, 2);\n } catch {\n // to avoid crash, but don't care about the error, add comment to avoid empty block lint error\n }\n this.completeRequest({ context, success: `${res.status}: ${responseBody}` });\n } else {\n this.handleReponse(res.status, context);\n }\n } catch (e) {\n this.completeRequest({ context, err: e as string });\n }\n }\n\n handleReponse(status: number, context: SessionReplayDestinationContext) {\n const parsedStatus = new BaseTransport().buildStatus(status);\n switch (parsedStatus) {\n case Status.Success:\n this.handleSuccessResponse(context);\n break;\n case Status.Failed:\n this.handleOtherResponse(context);\n break;\n default:\n this.completeRequest({ context, err: UNEXPECTED_NETWORK_ERROR_MESSAGE });\n }\n }\n\n handleSuccessResponse(context: SessionReplayDestinationContext) {\n const sizeOfEventsList = Math.round(new Blob(context.events).size / KB_SIZE);\n this.completeRequest({\n context,\n success: `Session replay event batch tracked successfully for session id ${context.sessionId}, size of events: ${sizeOfEventsList} KB`,\n });\n }\n\n handleOtherResponse(context: SessionReplayDestinationContext) {\n this.addToQueue({\n ...context,\n timeout: context.attempts * this.retryTimeout,\n });\n }\n\n completeRequest({\n context,\n err,\n success,\n }: {\n context: SessionReplayDestinationContext;\n err?: string;\n success?: string;\n }) {\n void context.onComplete();\n if (err) {\n this.loggerProvider.warn(err);\n } else if (success) {\n this.loggerProvider.log(success);\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"track-destination.js","sourceRoot":"","sources":["../../src/track-destination.ts"],"names":[],"mappings":"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","sourcesContent":["import { BaseTransport, ILogger, Status } from '@amplitude/analytics-core';\nimport { getCurrentUrl, getServerUrl } from './helpers';\nimport {\n MAX_RETRIES_EXCEEDED_MESSAGE,\n MISSING_API_KEY_MESSAGE,\n MISSING_DEVICE_ID_MESSAGE,\n UNEXPECTED_ERROR_MESSAGE,\n UNEXPECTED_NETWORK_ERROR_MESSAGE,\n} from './messages';\nimport {\n SessionReplayTrackDestination as AmplitudeSessionReplayTrackDestination,\n SessionReplayDestination,\n SessionReplayDestinationContext,\n} from './typings/session-replay';\nimport { VERSION } from './version';\nimport { MAX_URL_LENGTH, KB_SIZE } from './constants';\n\nexport type PayloadBatcher = ({ version, events }: { version: number; events: string[] }) => {\n version: number;\n events: unknown[];\n};\n\nexport class SessionReplayTrackDestination implements AmplitudeSessionReplayTrackDestination {\n loggerProvider: ILogger;\n storageKey = '';\n trackServerUrl?: string;\n retryTimeout = 1000;\n private scheduled: ReturnType<typeof setTimeout> | null = null;\n payloadBatcher: PayloadBatcher;\n queue: SessionReplayDestinationContext[] = [];\n\n constructor({\n trackServerUrl,\n loggerProvider,\n payloadBatcher,\n }: {\n trackServerUrl?: string;\n loggerProvider: ILogger;\n payloadBatcher?: PayloadBatcher;\n }) {\n this.loggerProvider = loggerProvider;\n this.payloadBatcher = payloadBatcher ? payloadBatcher : (payload) => payload;\n this.trackServerUrl = trackServerUrl;\n }\n\n sendEventsList(destinationData: SessionReplayDestination) {\n this.addToQueue({\n ...destinationData,\n attempts: 0,\n timeout: 0,\n });\n }\n\n addToQueue(...list: SessionReplayDestinationContext[]) {\n const tryable = list.filter((context) => {\n if (context.attempts < (context.flushMaxRetries || 0)) {\n context.attempts += 1;\n return true;\n }\n this.completeRequest({\n context,\n err: MAX_RETRIES_EXCEEDED_MESSAGE,\n });\n return false;\n });\n tryable.forEach((context) => {\n this.queue = this.queue.concat(context);\n if (context.timeout === 0) {\n this.schedule(0);\n return;\n }\n\n setTimeout(() => {\n context.timeout = 0;\n this.schedule(0);\n }, context.timeout);\n });\n }\n\n schedule(timeout: number) {\n if (this.scheduled) return;\n this.scheduled = setTimeout(() => {\n void this.flush(true).then(() => {\n if (this.queue.length > 0) {\n this.schedule(timeout);\n }\n });\n }, timeout);\n }\n\n async flush(useRetry = false) {\n const list: SessionReplayDestinationContext[] = [];\n const later: SessionReplayDestinationContext[] = [];\n this.queue.forEach((context) => (context.timeout === 0 ? list.push(context) : later.push(context)));\n this.queue = later;\n\n if (this.scheduled) {\n clearTimeout(this.scheduled);\n this.scheduled = null;\n }\n\n await Promise.all(list.map((context) => this.send(context, useRetry)));\n }\n\n async send(context: SessionReplayDestinationContext, useRetry = true) {\n const apiKey = context.apiKey;\n if (!apiKey) {\n return this.completeRequest({ context, err: MISSING_API_KEY_MESSAGE });\n }\n const deviceId = context.deviceId;\n if (!deviceId) {\n return this.completeRequest({ context, err: MISSING_DEVICE_ID_MESSAGE });\n }\n const url = getCurrentUrl();\n const version = VERSION;\n const sampleRate = context.sampleRate;\n const urlParams = new URLSearchParams({\n device_id: deviceId,\n session_id: `${context.sessionId}`,\n type: `${context.type}`,\n });\n const sessionReplayLibrary = `${context.version?.type || 'standalone'}/${context.version?.version || version}`;\n const payload = this.payloadBatcher({\n version: 1,\n events: context.events,\n });\n\n if (payload.events.length === 0) {\n this.completeRequest({ context });\n return;\n }\n\n try {\n const options: RequestInit = {\n headers: {\n 'Content-Type': 'application/json',\n Accept: '*/*',\n Authorization: `Bearer ${apiKey}`,\n 'X-Client-Version': version,\n 'X-Client-Library': sessionReplayLibrary,\n 'X-Client-Url': url.substring(0, MAX_URL_LENGTH), // limit url length to 1000 characters to avoid ELB 400 error\n 'X-Client-Sample-Rate': `${sampleRate}`,\n },\n body: JSON.stringify(payload),\n method: 'POST',\n };\n\n const serverUrl = `${getServerUrl(context.serverZone, this.trackServerUrl)}?${urlParams.toString()}`;\n const res = await fetch(serverUrl, options);\n if (res === null) {\n this.completeRequest({ context, err: UNEXPECTED_ERROR_MESSAGE });\n return;\n }\n if (!useRetry) {\n let responseBody = '';\n try {\n responseBody = JSON.stringify(res.body, null, 2);\n } catch {\n // to avoid crash, but don't care about the error, add comment to avoid empty block lint error\n }\n this.completeRequest({ context, success: `${res.status}: ${responseBody}` });\n } else {\n this.handleReponse(res.status, context);\n }\n } catch (e) {\n this.completeRequest({ context, err: e as string });\n }\n }\n\n handleReponse(status: number, context: SessionReplayDestinationContext) {\n const parsedStatus = new BaseTransport().buildStatus(status);\n switch (parsedStatus) {\n case Status.Success:\n this.handleSuccessResponse(context);\n break;\n case Status.Failed:\n this.handleOtherResponse(context);\n break;\n default:\n this.completeRequest({ context, err: UNEXPECTED_NETWORK_ERROR_MESSAGE });\n }\n }\n\n handleSuccessResponse(context: SessionReplayDestinationContext) {\n const sizeOfEventsList = Math.round(new Blob(context.events).size / KB_SIZE);\n this.completeRequest({\n context,\n success: `Session replay event batch tracked successfully for session id ${context.sessionId}, size of events: ${sizeOfEventsList} KB`,\n });\n }\n\n handleOtherResponse(context: SessionReplayDestinationContext) {\n this.addToQueue({\n ...context,\n timeout: context.attempts * this.retryTimeout,\n });\n }\n\n completeRequest({\n context,\n err,\n success,\n }: {\n context: SessionReplayDestinationContext;\n err?: string;\n success?: string;\n }) {\n void context.onComplete();\n if (err) {\n this.loggerProvider.warn(err);\n } else if (success) {\n this.loggerProvider.log(success);\n }\n }\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AmplitudeReturn, ServerZone } from '@amplitude/analytics-
|
|
1
|
+
import { AmplitudeReturn, ServerZone } from '@amplitude/analytics-core';
|
|
2
2
|
import { SessionReplayJoinedConfig, SessionReplayLocalConfig, SessionReplayVersion } from '../config/types';
|
|
3
3
|
export type StorageData = {
|
|
4
4
|
totalStorageSize: number;
|
|
@@ -61,7 +61,13 @@ export interface EventsStore<KeyType> {
|
|
|
61
61
|
cleanUpSessionEventsStore(sessionId: string | number, sequenceId?: KeyType): Promise<void>;
|
|
62
62
|
}
|
|
63
63
|
export interface SessionIdentifiers {
|
|
64
|
+
/**
|
|
65
|
+
* Sets an identifier for the device running your application.
|
|
66
|
+
*/
|
|
64
67
|
deviceId?: string;
|
|
68
|
+
/**
|
|
69
|
+
* Sets an identifier for the users current session. The value must be in milliseconds since epoch (Unix Timestamp).
|
|
70
|
+
*/
|
|
65
71
|
sessionId?: string | number;
|
|
66
72
|
sessionReplayId?: string;
|
|
67
73
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-replay.d.ts","sourceRoot":"","sources":["../../../src/typings/session-replay.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"session-replay.d.ts","sourceRoot":"","sources":["../../../src/typings/session-replay.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-replay.js","sourceRoot":"","sources":["../../../src/typings/session-replay.ts"],"names":[],"mappings":"","sourcesContent":["import { AmplitudeReturn, ServerZone } from '@amplitude/analytics-
|
|
1
|
+
{"version":3,"file":"session-replay.js","sourceRoot":"","sources":["../../../src/typings/session-replay.ts"],"names":[],"mappings":"","sourcesContent":["import { AmplitudeReturn, ServerZone } from '@amplitude/analytics-core';\nimport { SessionReplayJoinedConfig, SessionReplayLocalConfig, SessionReplayVersion } from '../config/types';\n\nexport type StorageData = {\n totalStorageSize: number;\n percentOfQuota: number;\n usageDetails: string;\n};\n\nexport interface DebugInfo extends Partial<StorageData> {\n config: SessionReplayJoinedConfig;\n version: string;\n}\n\nexport type Events = string[];\n\nexport type StoreType = 'memory' | 'idb';\n\nexport type EventType = 'replay' | 'interaction';\n\nexport type ConsoleLogLevel = 'info' | 'log' | 'warn' | 'error';\n\nexport interface SessionReplayDestinationSessionMetadata {\n type: EventType;\n sessionId: string | number;\n deviceId: string | undefined;\n version?: SessionReplayVersion;\n}\n\nexport type SessionReplayDestination = {\n events: Events;\n flushMaxRetries?: number;\n apiKey?: string;\n sampleRate: number;\n serverZone?: keyof typeof ServerZone;\n onComplete: () => Promise<void>;\n} & SessionReplayDestinationSessionMetadata;\n\nexport interface SessionReplayDestinationContext extends SessionReplayDestination {\n attempts: number;\n timeout: number;\n}\n\nexport interface SendingSequencesReturn<KeyType> {\n sequenceId: KeyType;\n sessionId: string | number;\n events: Events;\n}\n\n/**\n * This interface is not guaranteed to be stable, yet.\n */\nexport interface EventsStore<KeyType> {\n getSequencesToSend(): Promise<SendingSequencesReturn<KeyType>[] | undefined>;\n /**\n * Moves current sequence of events to long term storage and resets short term storage.\n */\n storeCurrentSequence(sessionId: string | number): Promise<SendingSequencesReturn<KeyType> | undefined>;\n /**\n * Adds events to the current IDB sequence. Returns events that should be\n * sent to the track destination right away if should split events is true.\n */\n addEventToCurrentSequence(\n sessionId: string | number,\n event: string,\n ): Promise<SendingSequencesReturn<KeyType> | undefined>;\n /**\n * Returns the sequence id associated with the events batch.\n * @returns the new sequence id or undefined if it cannot be determined or on any error.\n */\n storeSendingEvents(sessionId: string | number, events: Events): Promise<KeyType | undefined>;\n /**\n * Permanently removes the events batch for the session/sequence pair.\n */\n cleanUpSessionEventsStore(sessionId: string | number, sequenceId?: KeyType): Promise<void>;\n}\nexport interface SessionIdentifiers {\n /**\n * Sets an identifier for the device running your application.\n */\n deviceId?: string;\n /**\n * Sets an identifier for the users current session. The value must be in milliseconds since epoch (Unix Timestamp).\n */\n sessionId?: string | number;\n sessionReplayId?: string;\n}\n\nexport type SessionReplayOptions = Omit<Partial<SessionReplayLocalConfig & SessionIdentifiers>, 'apiKey'>;\n\nexport interface AmplitudeSessionReplay {\n init: (apiKey: string, options: SessionReplayOptions) => AmplitudeReturn<void>;\n setSessionId: (sessionId: string | number, deviceId?: string) => AmplitudeReturn<void>;\n getSessionId: () => string | number | undefined;\n getSessionReplayProperties: () => { [key: string]: boolean | string | null };\n flush: (useRetry: boolean) => Promise<void>;\n shutdown: () => void;\n}\n\nexport interface SessionReplayTrackDestination {\n /**\n * Enqueues events to be sent.\n */\n sendEventsList: (destinationData: SessionReplayDestination) => void;\n /**\n * Immediately sends queued events.\n */\n flush: (useRetry: boolean) => Promise<void>;\n}\n\nexport type EventsManagerWithType<EventType, EventDataType> = {\n name: EventType;\n manager: SessionReplayEventsManager<EventType, EventDataType>;\n};\n\nexport interface SessionReplayEventsManager<Type, Event> {\n /**\n * For each sequence stored in the long term indexed DB send immediately to the track destination.\n */\n sendStoredEvents({ deviceId }: { deviceId: string }): Promise<void>;\n /**\n * Adds an event to the short term storage. If should split based on size or last sent, then send immediately.\n */\n addEvent({\n sessionId,\n event,\n deviceId,\n }: {\n sessionId: string | number;\n event: { type: Type; data: Event };\n deviceId: string;\n }): void;\n /**\n * Move events in short term storage to long term storage and send immediately to the track destination.\n */\n sendCurrentSequenceEvents({ sessionId, deviceId }: { sessionId: string | number; deviceId: string }): void;\n /**\n * Flush the track destination queue immediately. This should invoke sends for all the events in the queue.\n */\n flush(useRetry?: boolean): Promise<void>;\n}\n"]}
|
package/lib/esm/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const VERSION = "1.
|
|
1
|
+
export declare const VERSION = "1.21.0";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/lib/esm/version.js
CHANGED
package/lib/esm/version.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,oDAAoD;AACpD,MAAM,CAAC,IAAM,OAAO,GAAG,QAAQ,CAAC","sourcesContent":["// Autogenerated by `yarn version-file`. DO NOT EDIT\nexport const VERSION = '1.
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,oDAAoD;AACpD,MAAM,CAAC,IAAM,OAAO,GAAG,QAAQ,CAAC","sourcesContent":["// Autogenerated by `yarn version-file`. DO NOT EDIT\nexport const VERSION = '1.21.0';\n"]}
|