@amplitude/session-replay-browser 1.2.1 → 1.2.3
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/config.d.ts +0 -3
- package/lib/cjs/config.d.ts.map +1 -1
- package/lib/cjs/config.js +0 -9
- package/lib/cjs/config.js.map +1 -1
- package/lib/cjs/events-manager.d.ts +49 -0
- package/lib/cjs/events-manager.d.ts.map +1 -0
- package/lib/cjs/events-manager.js +157 -0
- package/lib/cjs/events-manager.js.map +1 -0
- package/lib/cjs/identifiers.d.ts +9 -0
- package/lib/cjs/identifiers.d.ts.map +1 -0
- package/lib/cjs/identifiers.js +18 -0
- package/lib/cjs/identifiers.js.map +1 -0
- package/lib/cjs/session-idb-store.d.ts +15 -0
- package/lib/cjs/session-idb-store.d.ts.map +1 -0
- package/lib/cjs/session-idb-store.js +107 -0
- package/lib/cjs/session-idb-store.js.map +1 -0
- package/lib/cjs/session-replay.d.ts +5 -41
- package/lib/cjs/session-replay.d.ts.map +1 -1
- package/lib/cjs/session-replay.js +55 -406
- package/lib/cjs/session-replay.js.map +1 -1
- package/lib/cjs/track-destination.d.ts +27 -0
- package/lib/cjs/track-destination.d.ts.map +1 -0
- package/lib/cjs/track-destination.js +201 -0
- package/lib/cjs/track-destination.js.map +1 -0
- package/lib/cjs/typings/session-replay.d.ts +45 -7
- package/lib/cjs/typings/session-replay.d.ts.map +1 -1
- package/lib/cjs/typings/session-replay.js.map +1 -1
- package/lib/esm/config.d.ts +0 -3
- package/lib/esm/config.d.ts.map +1 -1
- package/lib/esm/config.js +0 -9
- package/lib/esm/config.js.map +1 -1
- package/lib/esm/events-manager.d.ts +49 -0
- package/lib/esm/events-manager.d.ts.map +1 -0
- package/lib/esm/events-manager.js +155 -0
- package/lib/esm/events-manager.js.map +1 -0
- package/lib/esm/identifiers.d.ts +9 -0
- package/lib/esm/identifiers.d.ts.map +1 -0
- package/lib/esm/identifiers.js +16 -0
- package/lib/esm/identifiers.js.map +1 -0
- package/lib/esm/session-idb-store.d.ts +15 -0
- package/lib/esm/session-idb-store.d.ts.map +1 -0
- package/lib/esm/session-idb-store.js +105 -0
- package/lib/esm/session-idb-store.js.map +1 -0
- package/lib/esm/session-replay.d.ts +5 -41
- package/lib/esm/session-replay.d.ts.map +1 -1
- package/lib/esm/session-replay.js +59 -410
- package/lib/esm/session-replay.js.map +1 -1
- package/lib/esm/track-destination.d.ts +27 -0
- package/lib/esm/track-destination.d.ts.map +1 -0
- package/lib/esm/track-destination.js +199 -0
- package/lib/esm/track-destination.js.map +1 -0
- package/lib/esm/typings/session-replay.d.ts +45 -7
- package/lib/esm/typings/session-replay.d.ts.map +1 -1
- package/lib/esm/typings/session-replay.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.umd.js +1 -1
- package/lib/scripts/amplitude-min.umd.js.gz +0 -0
- package/lib/scripts/config.d.ts +0 -3
- package/lib/scripts/config.d.ts.map +1 -1
- package/lib/scripts/events-manager.d.ts +49 -0
- package/lib/scripts/events-manager.d.ts.map +1 -0
- package/lib/scripts/identifiers.d.ts +9 -0
- package/lib/scripts/identifiers.d.ts.map +1 -0
- package/lib/scripts/session-idb-store.d.ts +15 -0
- package/lib/scripts/session-idb-store.d.ts.map +1 -0
- package/lib/scripts/session-replay.d.ts +5 -41
- package/lib/scripts/session-replay.d.ts.map +1 -1
- package/lib/scripts/track-destination.d.ts +27 -0
- package/lib/scripts/track-destination.d.ts.map +1 -0
- package/lib/scripts/typings/session-replay.d.ts +45 -7
- package/lib/scripts/typings/session-replay.d.ts.map +1 -1
- package/package.json +2 -2
package/lib/cjs/config.d.ts
CHANGED
|
@@ -11,9 +11,6 @@ export declare const getDefaultConfig: () => {
|
|
|
11
11
|
export declare class SessionReplayConfig extends Config implements ISessionReplayConfig {
|
|
12
12
|
apiKey: string;
|
|
13
13
|
sampleRate: number;
|
|
14
|
-
deviceId?: string | undefined;
|
|
15
|
-
sessionId?: number | undefined;
|
|
16
|
-
sessionReplayId?: string | undefined;
|
|
17
14
|
privacyConfig?: SessionReplayPrivacyConfig;
|
|
18
15
|
debugMode?: boolean;
|
|
19
16
|
constructor(apiKey: string, options: SessionReplayOptions);
|
package/lib/cjs/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAEtD,OAAO,EACL,mBAAmB,IAAI,oBAAoB,EAC3C,oBAAoB,EACpB,0BAA0B,EAC3B,MAAM,0BAA0B,CAAC;AAElC,eAAO,MAAM,gBAAgB;;;;;CAK3B,CAAC;AAEH,qBAAa,mBAAoB,SAAQ,MAAO,YAAW,oBAAoB;IAC7E,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,0BAA0B,CAAC;IAC3C,SAAS,CAAC,EAAE,OAAO,CAAC;gBAER,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,oBAAoB;CAwB1D"}
|
package/lib/cjs/config.js
CHANGED
|
@@ -5,7 +5,6 @@ var analytics_client_common_1 = require("@amplitude/analytics-client-common");
|
|
|
5
5
|
var analytics_core_1 = require("@amplitude/analytics-core");
|
|
6
6
|
var analytics_types_1 = require("@amplitude/analytics-types");
|
|
7
7
|
var constants_1 = require("./constants");
|
|
8
|
-
var helpers_1 = require("./helpers");
|
|
9
8
|
var getDefaultConfig = function () { return ({
|
|
10
9
|
flushMaxRetries: 2,
|
|
11
10
|
logLevel: analytics_types_1.LogLevel.Warn,
|
|
@@ -25,15 +24,7 @@ var SessionReplayConfig = /** @class */ (function (_super) {
|
|
|
25
24
|
: defaultConfig.flushMaxRetries;
|
|
26
25
|
_this.apiKey = apiKey;
|
|
27
26
|
_this.sampleRate = options.sampleRate || constants_1.DEFAULT_SAMPLE_RATE;
|
|
28
|
-
_this.deviceId = options.deviceId;
|
|
29
|
-
_this.sessionId = options.sessionId;
|
|
30
27
|
_this.serverZone = options.serverZone || constants_1.DEFAULT_SERVER_ZONE;
|
|
31
|
-
if (options.sessionId && options.deviceId) {
|
|
32
|
-
_this.sessionReplayId = (0, helpers_1.generateSessionReplayId)(options.sessionId, options.deviceId);
|
|
33
|
-
}
|
|
34
|
-
else {
|
|
35
|
-
_this.loggerProvider.error('Please provide both sessionId and deviceId.');
|
|
36
|
-
}
|
|
37
28
|
if (options.privacyConfig) {
|
|
38
29
|
_this.privacyConfig = options.privacyConfig;
|
|
39
30
|
}
|
package/lib/cjs/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":";;;AAAA,8EAAoE;AACpE,4DAA2D;AAC3D,8DAAsD;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":";;;AAAA,8EAAoE;AACpE,4DAA2D;AAC3D,8DAAsD;AACtD,yCAAuE;AAOhE,IAAM,gBAAgB,GAAG,cAAM,OAAA,CAAC;IACrC,eAAe,EAAE,CAAC;IAClB,QAAQ,EAAE,0BAAQ,CAAC,IAAI;IACvB,cAAc,EAAE,IAAI,uBAAM,EAAE;IAC5B,iBAAiB,EAAE,IAAI,wCAAc,EAAE;CACxC,CAAC,EALoC,CAKpC,CAAC;AALU,QAAA,gBAAgB,oBAK1B;AAEH;IAAyC,+CAAM;IAM7C,6BAAY,MAAc,EAAE,OAA6B;QAAzD,iBAuBC;QAtBC,IAAM,aAAa,GAAG,IAAA,wBAAgB,GAAE,CAAC;gBACzC,sDACE,iBAAiB,EAAE,aAAa,CAAC,iBAAiB,IAC/C,OAAO,KACV,MAAM,QAAA,IACN;QACF,KAAI,CAAC,eAAe;YAClB,OAAO,CAAC,eAAe,KAAK,SAAS,IAAI,OAAO,CAAC,eAAe,IAAI,aAAa,CAAC,eAAe;gBAC/F,CAAC,CAAC,OAAO,CAAC,eAAe;gBACzB,CAAC,CAAC,aAAa,CAAC,eAAe,CAAC;QAEpC,KAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,KAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,+BAAmB,CAAC;QAC5D,KAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,+BAAmB,CAAC;QAE5D,IAAI,OAAO,CAAC,aAAa,EAAE;YACzB,KAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;SAC5C;QAED,IAAI,OAAO,CAAC,SAAS,EAAE;YACrB,KAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;SACpC;;IACH,CAAC;IACH,0BAAC;AAAD,CAAC,AA9BD,CAAyC,uBAAM,GA8B9C;AA9BY,kDAAmB","sourcesContent":["import { FetchTransport } from '@amplitude/analytics-client-common';\nimport { Config, Logger } from '@amplitude/analytics-core';\nimport { LogLevel } from '@amplitude/analytics-types';\nimport { DEFAULT_SAMPLE_RATE, DEFAULT_SERVER_ZONE } from './constants';\nimport {\n SessionReplayConfig as ISessionReplayConfig,\n SessionReplayOptions,\n SessionReplayPrivacyConfig,\n} from './typings/session-replay';\n\nexport const getDefaultConfig = () => ({\n flushMaxRetries: 2,\n logLevel: LogLevel.Warn,\n loggerProvider: new Logger(),\n transportProvider: new FetchTransport(),\n});\n\nexport class SessionReplayConfig extends Config implements ISessionReplayConfig {\n apiKey: string;\n sampleRate: number;\n privacyConfig?: SessionReplayPrivacyConfig;\n debugMode?: boolean;\n\n constructor(apiKey: string, options: SessionReplayOptions) {\n const defaultConfig = getDefaultConfig();\n super({\n transportProvider: defaultConfig.transportProvider,\n ...options,\n apiKey,\n });\n this.flushMaxRetries =\n options.flushMaxRetries !== undefined && options.flushMaxRetries <= defaultConfig.flushMaxRetries\n ? options.flushMaxRetries\n : defaultConfig.flushMaxRetries;\n\n this.apiKey = apiKey;\n this.sampleRate = options.sampleRate || DEFAULT_SAMPLE_RATE;\n this.serverZone = options.serverZone || DEFAULT_SERVER_ZONE;\n\n if (options.privacyConfig) {\n this.privacyConfig = options.privacyConfig;\n }\n\n if (options.debugMode) {\n this.debugMode = options.debugMode;\n }\n }\n}\n"]}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { SessionReplayEventsManager as AmplitudeSessionReplayEventsManager, SessionReplaySessionIDBStore as AmplitudeSessionReplayEventsStorage, SessionReplayTrackDestination as AmplitudeSessionReplayTrackDestination, Events, IDBStore, SessionReplayConfig } from './typings/session-replay';
|
|
2
|
+
export declare class SessionReplayEventsManager implements AmplitudeSessionReplayEventsManager {
|
|
3
|
+
events: Events;
|
|
4
|
+
currentSequenceId: number;
|
|
5
|
+
maxPersistedEventsSize: number;
|
|
6
|
+
interval: number;
|
|
7
|
+
timeAtLastSend: number | null;
|
|
8
|
+
sessionIDBStore: AmplitudeSessionReplayEventsStorage;
|
|
9
|
+
trackDestination: AmplitudeSessionReplayTrackDestination;
|
|
10
|
+
config: SessionReplayConfig;
|
|
11
|
+
constructor({ config }: {
|
|
12
|
+
config: SessionReplayConfig;
|
|
13
|
+
});
|
|
14
|
+
initialize({ sessionId, deviceId, shouldSendStoredEvents, }: {
|
|
15
|
+
sessionId: number;
|
|
16
|
+
deviceId: string;
|
|
17
|
+
shouldSendStoredEvents?: boolean;
|
|
18
|
+
}): Promise<void>;
|
|
19
|
+
sendStoredEvents({ storedReplaySessions, sessionId, deviceId, }: {
|
|
20
|
+
storedReplaySessions: IDBStore;
|
|
21
|
+
sessionId: number;
|
|
22
|
+
deviceId: string;
|
|
23
|
+
}): void;
|
|
24
|
+
resetSequence(): void;
|
|
25
|
+
addEvent({ event, sessionId, deviceId }: {
|
|
26
|
+
event: string;
|
|
27
|
+
sessionId: number;
|
|
28
|
+
deviceId: string;
|
|
29
|
+
}): void;
|
|
30
|
+
/**
|
|
31
|
+
* Determines whether to send the events list to the backend and start a new
|
|
32
|
+
* empty events list, based on the size of the list as well as the last time sent
|
|
33
|
+
* @param nextEventString
|
|
34
|
+
* @returns boolean
|
|
35
|
+
*/
|
|
36
|
+
shouldSplitEventsList: (nextEventString: string) => boolean;
|
|
37
|
+
sendEvents({ sessionId, deviceId }: {
|
|
38
|
+
sessionId: number;
|
|
39
|
+
deviceId: string;
|
|
40
|
+
}): void;
|
|
41
|
+
sendEventsList({ events, sequenceId, sessionId, deviceId, }: {
|
|
42
|
+
events: string[];
|
|
43
|
+
sequenceId: number;
|
|
44
|
+
sessionId: number;
|
|
45
|
+
deviceId: string;
|
|
46
|
+
}): void;
|
|
47
|
+
flush(useRetry?: boolean): Promise<void>;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=events-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events-manager.d.ts","sourceRoot":"","sources":["../../src/events-manager.ts"],"names":[],"mappings":"AACA,OAAO,EACL,0BAA0B,IAAI,mCAAmC,EACjE,4BAA4B,IAAI,mCAAmC,EACnE,6BAA6B,IAAI,sCAAsC,EACvE,MAAM,EACN,QAAQ,EAER,mBAAmB,EACpB,MAAM,0BAA0B,CAAC;AAKlC,qBAAa,0BAA2B,YAAW,mCAAmC;IACpF,MAAM,EAAE,MAAM,CAAM;IACpB,iBAAiB,SAAK;IACtB,sBAAsB,SAAgC;IACtD,QAAQ,SAAgB;IACxB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAQ;IACrC,eAAe,EAAE,mCAAmC,CAAC;IACrD,gBAAgB,EAAE,sCAAsC,CAAC;IACzD,MAAM,EAAE,mBAAmB,CAAC;gBAEhB,EAAE,MAAM,EAAE,EAAE;QAAE,MAAM,EAAE,mBAAmB,CAAA;KAAE;IASjD,UAAU,CAAC,EACf,SAAS,EACT,QAAQ,EACR,sBAA8B,GAC/B,EAAE;QACD,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,sBAAsB,CAAC,EAAE,OAAO,CAAC;KAClC;IAsBD,gBAAgB,CAAC,EACf,oBAAoB,EACpB,SAAS,EACT,QAAQ,GACT,EAAE;QACD,oBAAoB,EAAE,QAAQ,CAAC;QAC/B,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;KAClB;IAuBD,aAAa;IAKb,QAAQ,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE;IAgB/F;;;;;OAKG;IACH,qBAAqB,oBAAqB,MAAM,KAAG,OAAO,CAYxD;IAEF,UAAU,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE;IAW3E,cAAc,CAAC,EACb,MAAM,EACN,UAAU,EACV,SAAS,EACT,QAAQ,GACT,EAAE;QACD,MAAM,EAAE,MAAM,EAAE,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;KAClB;IAcK,KAAK,CAAC,QAAQ,UAAQ;CAK7B"}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
2
|
+
exports.SessionReplayEventsManager = void 0;
|
|
3
|
+
var tslib_1 = require("tslib");
|
|
4
|
+
var constants_1 = require("./constants");
|
|
5
|
+
var session_replay_1 = require("./typings/session-replay");
|
|
6
|
+
var session_idb_store_1 = require("./session-idb-store");
|
|
7
|
+
var track_destination_1 = require("./track-destination");
|
|
8
|
+
var SessionReplayEventsManager = /** @class */ (function () {
|
|
9
|
+
function SessionReplayEventsManager(_a) {
|
|
10
|
+
var config = _a.config;
|
|
11
|
+
var _this = this;
|
|
12
|
+
this.events = [];
|
|
13
|
+
this.currentSequenceId = 0;
|
|
14
|
+
this.maxPersistedEventsSize = constants_1.MAX_EVENT_LIST_SIZE_IN_BYTES;
|
|
15
|
+
this.interval = constants_1.MIN_INTERVAL;
|
|
16
|
+
this.timeAtLastSend = null;
|
|
17
|
+
/**
|
|
18
|
+
* Determines whether to send the events list to the backend and start a new
|
|
19
|
+
* empty events list, based on the size of the list as well as the last time sent
|
|
20
|
+
* @param nextEventString
|
|
21
|
+
* @returns boolean
|
|
22
|
+
*/
|
|
23
|
+
this.shouldSplitEventsList = function (nextEventString) {
|
|
24
|
+
var sizeOfNextEvent = new Blob([nextEventString]).size;
|
|
25
|
+
var sizeOfEventsList = new Blob(_this.events).size;
|
|
26
|
+
if (sizeOfEventsList + sizeOfNextEvent >= _this.maxPersistedEventsSize) {
|
|
27
|
+
return true;
|
|
28
|
+
}
|
|
29
|
+
if (_this.timeAtLastSend !== null && Date.now() - _this.timeAtLastSend > _this.interval && _this.events.length) {
|
|
30
|
+
_this.interval = Math.min(constants_1.MAX_INTERVAL, _this.interval + constants_1.MIN_INTERVAL);
|
|
31
|
+
_this.timeAtLastSend = Date.now();
|
|
32
|
+
return true;
|
|
33
|
+
}
|
|
34
|
+
return false;
|
|
35
|
+
};
|
|
36
|
+
this.config = config;
|
|
37
|
+
this.trackDestination = new track_destination_1.SessionReplayTrackDestination({ loggerProvider: this.config.loggerProvider });
|
|
38
|
+
this.sessionIDBStore = new session_idb_store_1.SessionReplaySessionIDBStore({
|
|
39
|
+
loggerProvider: this.config.loggerProvider,
|
|
40
|
+
apiKey: this.config.apiKey,
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
SessionReplayEventsManager.prototype.initialize = function (_a) {
|
|
44
|
+
var sessionId = _a.sessionId, deviceId = _a.deviceId, _b = _a.shouldSendStoredEvents, shouldSendStoredEvents = _b === void 0 ? false : _b;
|
|
45
|
+
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
46
|
+
var storedReplaySessions, storedSequencesForSession, storedSeqId, lastSequence;
|
|
47
|
+
return tslib_1.__generator(this, function (_c) {
|
|
48
|
+
switch (_c.label) {
|
|
49
|
+
case 0:
|
|
50
|
+
this.timeAtLastSend = Date.now(); // Initialize this so we have a point of comparison when events are recorded
|
|
51
|
+
return [4 /*yield*/, this.sessionIDBStore.getAllSessionDataFromStore()];
|
|
52
|
+
case 1:
|
|
53
|
+
storedReplaySessions = _c.sent();
|
|
54
|
+
storedSequencesForSession = storedReplaySessions && storedReplaySessions[sessionId];
|
|
55
|
+
if (storedReplaySessions && storedSequencesForSession && storedSequencesForSession.sessionSequences) {
|
|
56
|
+
storedSeqId = storedSequencesForSession.currentSequenceId;
|
|
57
|
+
lastSequence = storedSequencesForSession.sessionSequences[storedSeqId];
|
|
58
|
+
if (lastSequence && lastSequence.status !== session_replay_1.RecordingStatus.RECORDING) {
|
|
59
|
+
this.currentSequenceId = storedSeqId + 1;
|
|
60
|
+
this.events = [];
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
// Pick up recording where it was left off in another tab or window
|
|
64
|
+
this.currentSequenceId = storedSeqId;
|
|
65
|
+
this.events = (lastSequence === null || lastSequence === void 0 ? void 0 : lastSequence.events) || [];
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
if (shouldSendStoredEvents && storedReplaySessions) {
|
|
69
|
+
this.sendStoredEvents({ storedReplaySessions: storedReplaySessions, deviceId: deviceId, sessionId: sessionId });
|
|
70
|
+
}
|
|
71
|
+
return [2 /*return*/];
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
};
|
|
76
|
+
SessionReplayEventsManager.prototype.sendStoredEvents = function (_a) {
|
|
77
|
+
var storedReplaySessions = _a.storedReplaySessions, sessionId = _a.sessionId, deviceId = _a.deviceId;
|
|
78
|
+
for (var storedSessionId in storedReplaySessions) {
|
|
79
|
+
var storedSequences = storedReplaySessions[storedSessionId].sessionSequences;
|
|
80
|
+
for (var storedSeqId in storedSequences) {
|
|
81
|
+
var seq = storedSequences[storedSeqId];
|
|
82
|
+
var numericSeqId = parseInt(storedSeqId, 10);
|
|
83
|
+
var numericSessionId = parseInt(storedSessionId, 10);
|
|
84
|
+
if (numericSessionId === sessionId && numericSeqId === this.currentSequenceId) {
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
if (seq.events && seq.events.length && seq.status === session_replay_1.RecordingStatus.RECORDING) {
|
|
88
|
+
this.sendEventsList({
|
|
89
|
+
events: seq.events,
|
|
90
|
+
sequenceId: numericSeqId,
|
|
91
|
+
sessionId: numericSessionId,
|
|
92
|
+
deviceId: deviceId,
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
SessionReplayEventsManager.prototype.resetSequence = function () {
|
|
99
|
+
this.events = [];
|
|
100
|
+
this.currentSequenceId = 0;
|
|
101
|
+
};
|
|
102
|
+
SessionReplayEventsManager.prototype.addEvent = function (_a) {
|
|
103
|
+
var event = _a.event, sessionId = _a.sessionId, deviceId = _a.deviceId;
|
|
104
|
+
var shouldSplit = this.shouldSplitEventsList(event);
|
|
105
|
+
if (shouldSplit) {
|
|
106
|
+
this.sendEventsList({
|
|
107
|
+
events: this.events,
|
|
108
|
+
sequenceId: this.currentSequenceId,
|
|
109
|
+
sessionId: sessionId,
|
|
110
|
+
deviceId: deviceId,
|
|
111
|
+
});
|
|
112
|
+
this.events = [];
|
|
113
|
+
this.currentSequenceId++;
|
|
114
|
+
}
|
|
115
|
+
this.events.push(event);
|
|
116
|
+
void this.sessionIDBStore.storeEventsForSession(this.events, this.currentSequenceId, sessionId);
|
|
117
|
+
};
|
|
118
|
+
SessionReplayEventsManager.prototype.sendEvents = function (_a) {
|
|
119
|
+
var sessionId = _a.sessionId, deviceId = _a.deviceId;
|
|
120
|
+
if (this.events.length && sessionId) {
|
|
121
|
+
this.sendEventsList({
|
|
122
|
+
events: this.events,
|
|
123
|
+
sequenceId: this.currentSequenceId,
|
|
124
|
+
sessionId: sessionId,
|
|
125
|
+
deviceId: deviceId,
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
};
|
|
129
|
+
SessionReplayEventsManager.prototype.sendEventsList = function (_a) {
|
|
130
|
+
var events = _a.events, sequenceId = _a.sequenceId, sessionId = _a.sessionId, deviceId = _a.deviceId;
|
|
131
|
+
this.trackDestination.sendEventsList({
|
|
132
|
+
events: events,
|
|
133
|
+
sequenceId: sequenceId,
|
|
134
|
+
sessionId: sessionId,
|
|
135
|
+
flushMaxRetries: this.config.flushMaxRetries,
|
|
136
|
+
apiKey: this.config.apiKey,
|
|
137
|
+
deviceId: deviceId,
|
|
138
|
+
sampleRate: this.config.sampleRate,
|
|
139
|
+
serverZone: this.config.serverZone,
|
|
140
|
+
onComplete: this.sessionIDBStore.cleanUpSessionEventsStore.bind(this.sessionIDBStore),
|
|
141
|
+
});
|
|
142
|
+
};
|
|
143
|
+
SessionReplayEventsManager.prototype.flush = function (useRetry) {
|
|
144
|
+
if (useRetry === void 0) { useRetry = false; }
|
|
145
|
+
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
146
|
+
return tslib_1.__generator(this, function (_a) {
|
|
147
|
+
if (this.trackDestination) {
|
|
148
|
+
return [2 /*return*/, this.trackDestination.flush(useRetry)];
|
|
149
|
+
}
|
|
150
|
+
return [2 /*return*/];
|
|
151
|
+
});
|
|
152
|
+
});
|
|
153
|
+
};
|
|
154
|
+
return SessionReplayEventsManager;
|
|
155
|
+
}());
|
|
156
|
+
exports.SessionReplayEventsManager = SessionReplayEventsManager;
|
|
157
|
+
//# sourceMappingURL=events-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events-manager.js","sourceRoot":"","sources":["../../src/events-manager.ts"],"names":[],"mappings":"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","sourcesContent":["import { MAX_EVENT_LIST_SIZE_IN_BYTES, MAX_INTERVAL, MIN_INTERVAL } from './constants';\nimport {\n SessionReplayEventsManager as AmplitudeSessionReplayEventsManager,\n SessionReplaySessionIDBStore as AmplitudeSessionReplayEventsStorage,\n SessionReplayTrackDestination as AmplitudeSessionReplayTrackDestination,\n Events,\n IDBStore,\n RecordingStatus,\n SessionReplayConfig,\n} from './typings/session-replay';\n\nimport { SessionReplaySessionIDBStore } from './session-idb-store';\nimport { SessionReplayTrackDestination } from './track-destination';\n\nexport class SessionReplayEventsManager implements AmplitudeSessionReplayEventsManager {\n events: Events = [];\n currentSequenceId = 0;\n maxPersistedEventsSize = MAX_EVENT_LIST_SIZE_IN_BYTES;\n interval = MIN_INTERVAL;\n timeAtLastSend: number | null = null;\n sessionIDBStore: AmplitudeSessionReplayEventsStorage;\n trackDestination: AmplitudeSessionReplayTrackDestination;\n config: SessionReplayConfig;\n\n constructor({ config }: { config: SessionReplayConfig }) {\n this.config = config;\n this.trackDestination = new SessionReplayTrackDestination({ loggerProvider: this.config.loggerProvider });\n this.sessionIDBStore = new SessionReplaySessionIDBStore({\n loggerProvider: this.config.loggerProvider,\n apiKey: this.config.apiKey,\n });\n }\n\n async initialize({\n sessionId,\n deviceId,\n shouldSendStoredEvents = false,\n }: {\n sessionId: number;\n deviceId: string;\n shouldSendStoredEvents?: boolean;\n }) {\n this.timeAtLastSend = Date.now(); // Initialize this so we have a point of comparison when events are recorded\n const storedReplaySessions = await this.sessionIDBStore.getAllSessionDataFromStore();\n\n const storedSequencesForSession = storedReplaySessions && storedReplaySessions[sessionId];\n if (storedReplaySessions && storedSequencesForSession && storedSequencesForSession.sessionSequences) {\n const storedSeqId = storedSequencesForSession.currentSequenceId;\n const lastSequence = storedSequencesForSession.sessionSequences[storedSeqId];\n if (lastSequence && lastSequence.status !== RecordingStatus.RECORDING) {\n this.currentSequenceId = storedSeqId + 1;\n this.events = [];\n } else {\n // Pick up recording where it was left off in another tab or window\n this.currentSequenceId = storedSeqId;\n this.events = lastSequence?.events || [];\n }\n }\n if (shouldSendStoredEvents && storedReplaySessions) {\n this.sendStoredEvents({ storedReplaySessions, deviceId, sessionId });\n }\n }\n\n sendStoredEvents({\n storedReplaySessions,\n sessionId,\n deviceId,\n }: {\n storedReplaySessions: IDBStore;\n sessionId: number;\n deviceId: string;\n }) {\n for (const storedSessionId in storedReplaySessions) {\n const storedSequences = storedReplaySessions[storedSessionId].sessionSequences;\n for (const storedSeqId in storedSequences) {\n const seq = storedSequences[storedSeqId];\n const numericSeqId = parseInt(storedSeqId, 10);\n const numericSessionId = parseInt(storedSessionId, 10);\n if (numericSessionId === sessionId && numericSeqId === this.currentSequenceId) {\n continue;\n }\n\n if (seq.events && seq.events.length && seq.status === RecordingStatus.RECORDING) {\n this.sendEventsList({\n events: seq.events,\n sequenceId: numericSeqId,\n sessionId: numericSessionId,\n deviceId,\n });\n }\n }\n }\n }\n\n resetSequence() {\n this.events = [];\n this.currentSequenceId = 0;\n }\n\n addEvent({ event, sessionId, deviceId }: { event: string; sessionId: number; deviceId: string }) {\n const shouldSplit = this.shouldSplitEventsList(event);\n if (shouldSplit) {\n this.sendEventsList({\n events: this.events,\n sequenceId: this.currentSequenceId,\n sessionId,\n deviceId,\n });\n this.events = [];\n this.currentSequenceId++;\n }\n this.events.push(event);\n void this.sessionIDBStore.storeEventsForSession(this.events, this.currentSequenceId, sessionId);\n }\n\n /**\n * Determines whether to send the events list to the backend and start a new\n * empty events list, based on the size of the list as well as the last time sent\n * @param nextEventString\n * @returns boolean\n */\n shouldSplitEventsList = (nextEventString: string): boolean => {\n const sizeOfNextEvent = new Blob([nextEventString]).size;\n const sizeOfEventsList = new Blob(this.events).size;\n if (sizeOfEventsList + sizeOfNextEvent >= this.maxPersistedEventsSize) {\n return true;\n }\n if (this.timeAtLastSend !== null && Date.now() - this.timeAtLastSend > this.interval && this.events.length) {\n this.interval = Math.min(MAX_INTERVAL, this.interval + MIN_INTERVAL);\n this.timeAtLastSend = Date.now();\n return true;\n }\n return false;\n };\n\n sendEvents({ sessionId, deviceId }: { sessionId: number; deviceId: string }) {\n if (this.events.length && sessionId) {\n this.sendEventsList({\n events: this.events,\n sequenceId: this.currentSequenceId,\n sessionId,\n deviceId,\n });\n }\n }\n\n sendEventsList({\n events,\n sequenceId,\n sessionId,\n deviceId,\n }: {\n events: string[];\n sequenceId: number;\n sessionId: number;\n deviceId: string;\n }) {\n this.trackDestination.sendEventsList({\n events: events,\n sequenceId: sequenceId,\n sessionId: sessionId,\n flushMaxRetries: this.config.flushMaxRetries,\n apiKey: this.config.apiKey,\n deviceId: deviceId,\n sampleRate: this.config.sampleRate,\n serverZone: this.config.serverZone,\n onComplete: this.sessionIDBStore.cleanUpSessionEventsStore.bind(this.sessionIDBStore),\n });\n }\n\n async flush(useRetry = false) {\n if (this.trackDestination) {\n return this.trackDestination.flush(useRetry);\n }\n }\n}\n"]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Logger as ILogger } from '@amplitude/analytics-types';
|
|
2
|
+
import { SessionIdentifiers as ISessionIdentifiers, SessionReplayOptions } from './typings/session-replay';
|
|
3
|
+
export declare class SessionIdentifiers implements ISessionIdentifiers {
|
|
4
|
+
deviceId?: string | undefined;
|
|
5
|
+
sessionId?: number | undefined;
|
|
6
|
+
sessionReplayId?: string | undefined;
|
|
7
|
+
constructor(options: SessionReplayOptions, loggerProvider: ILogger);
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=identifiers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identifiers.d.ts","sourceRoot":"","sources":["../../src/identifiers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAE/D,OAAO,EAAE,kBAAkB,IAAI,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAE3G,qBAAa,kBAAmB,YAAW,mBAAmB;IAC5D,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;gBAEzB,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,OAAO;CAUnE"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
2
|
+
exports.SessionIdentifiers = void 0;
|
|
3
|
+
var helpers_1 = require("./helpers");
|
|
4
|
+
var SessionIdentifiers = /** @class */ (function () {
|
|
5
|
+
function SessionIdentifiers(options, loggerProvider) {
|
|
6
|
+
this.deviceId = options.deviceId;
|
|
7
|
+
this.sessionId = options.sessionId;
|
|
8
|
+
if (options.sessionId && options.deviceId) {
|
|
9
|
+
this.sessionReplayId = (0, helpers_1.generateSessionReplayId)(options.sessionId, options.deviceId);
|
|
10
|
+
}
|
|
11
|
+
else {
|
|
12
|
+
loggerProvider.error('Please provide both sessionId and deviceId.');
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
return SessionIdentifiers;
|
|
16
|
+
}());
|
|
17
|
+
exports.SessionIdentifiers = SessionIdentifiers;
|
|
18
|
+
//# sourceMappingURL=identifiers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identifiers.js","sourceRoot":"","sources":["../../src/identifiers.ts"],"names":[],"mappings":";;AACA,qCAAoD;AAGpD;IAKE,4BAAY,OAA6B,EAAE,cAAuB;QAChE,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QACjC,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;QAEnC,IAAI,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,QAAQ,EAAE;YACzC,IAAI,CAAC,eAAe,GAAG,IAAA,iCAAuB,EAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;SACrF;aAAM;YACL,cAAc,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;SACrE;IACH,CAAC;IACH,yBAAC;AAAD,CAAC,AAfD,IAeC;AAfY,gDAAkB","sourcesContent":["import { Logger as ILogger } from '@amplitude/analytics-types';\nimport { generateSessionReplayId } from './helpers';\nimport { SessionIdentifiers as ISessionIdentifiers, SessionReplayOptions } from './typings/session-replay';\n\nexport class SessionIdentifiers implements ISessionIdentifiers {\n deviceId?: string | undefined;\n sessionId?: number | undefined;\n sessionReplayId?: string | undefined;\n\n constructor(options: SessionReplayOptions, loggerProvider: ILogger) {\n this.deviceId = options.deviceId;\n this.sessionId = options.sessionId;\n\n if (options.sessionId && options.deviceId) {\n this.sessionReplayId = generateSessionReplayId(options.sessionId, options.deviceId);\n } else {\n loggerProvider.error('Please provide both sessionId and deviceId.');\n }\n }\n}\n"]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Logger as ILogger } from '@amplitude/analytics-types';
|
|
2
|
+
import { SessionReplaySessionIDBStore as AmplitudeSessionReplaySessionIDBStore, Events, IDBStore } from './typings/session-replay';
|
|
3
|
+
export declare class SessionReplaySessionIDBStore implements AmplitudeSessionReplaySessionIDBStore {
|
|
4
|
+
apiKey: string | undefined;
|
|
5
|
+
storageKey: string;
|
|
6
|
+
loggerProvider: ILogger;
|
|
7
|
+
constructor({ apiKey, loggerProvider }: {
|
|
8
|
+
apiKey: string;
|
|
9
|
+
loggerProvider: ILogger;
|
|
10
|
+
});
|
|
11
|
+
getAllSessionDataFromStore: () => Promise<IDBStore | undefined>;
|
|
12
|
+
storeEventsForSession: (events: Events, sequenceId: number, sessionId: number) => Promise<void>;
|
|
13
|
+
cleanUpSessionEventsStore: (sessionId: number, sequenceId: number) => Promise<void>;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=session-idb-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-idb-store.d.ts","sourceRoot":"","sources":["../../src/session-idb-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAI/D,OAAO,EACL,4BAA4B,IAAI,qCAAqC,EACrE,MAAM,EACN,QAAQ,EAGT,MAAM,0BAA0B,CAAC;AAElC,qBAAa,4BAA6B,YAAW,qCAAqC;IACxF,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,UAAU,SAAM;IAChB,cAAc,EAAE,OAAO,CAAC;gBACZ,EAAE,MAAM,EAAE,cAAc,EAAE,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,OAAO,CAAA;KAAE;IAKnF,0BAA0B,sCASxB;IAEF,qBAAqB,+BAAsC,MAAM,aAAa,MAAM,mBAyBlF;IAEF,yBAAyB,cAAqB,MAAM,cAAc,MAAM,mBAiCtE;CACH"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
2
|
+
exports.SessionReplaySessionIDBStore = void 0;
|
|
3
|
+
var tslib_1 = require("tslib");
|
|
4
|
+
var IDBKeyVal = tslib_1.__importStar(require("idb-keyval"));
|
|
5
|
+
var constants_1 = require("./constants");
|
|
6
|
+
var messages_1 = require("./messages");
|
|
7
|
+
var session_replay_1 = require("./typings/session-replay");
|
|
8
|
+
var SessionReplaySessionIDBStore = /** @class */ (function () {
|
|
9
|
+
function SessionReplaySessionIDBStore(_a) {
|
|
10
|
+
var apiKey = _a.apiKey, loggerProvider = _a.loggerProvider;
|
|
11
|
+
var _this = this;
|
|
12
|
+
this.storageKey = '';
|
|
13
|
+
this.getAllSessionDataFromStore = function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
14
|
+
var storedReplaySessionContexts, e_1;
|
|
15
|
+
return tslib_1.__generator(this, function (_a) {
|
|
16
|
+
switch (_a.label) {
|
|
17
|
+
case 0:
|
|
18
|
+
_a.trys.push([0, 2, , 3]);
|
|
19
|
+
return [4 /*yield*/, IDBKeyVal.get(this.storageKey)];
|
|
20
|
+
case 1:
|
|
21
|
+
storedReplaySessionContexts = _a.sent();
|
|
22
|
+
return [2 /*return*/, storedReplaySessionContexts];
|
|
23
|
+
case 2:
|
|
24
|
+
e_1 = _a.sent();
|
|
25
|
+
this.loggerProvider.warn("".concat(messages_1.STORAGE_FAILURE, ": ").concat(e_1));
|
|
26
|
+
return [3 /*break*/, 3];
|
|
27
|
+
case 3: return [2 /*return*/, undefined];
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
}); };
|
|
31
|
+
this.storeEventsForSession = function (events, sequenceId, sessionId) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
32
|
+
var e_2;
|
|
33
|
+
return tslib_1.__generator(this, function (_a) {
|
|
34
|
+
switch (_a.label) {
|
|
35
|
+
case 0:
|
|
36
|
+
_a.trys.push([0, 2, , 3]);
|
|
37
|
+
return [4 /*yield*/, IDBKeyVal.update(this.storageKey, function (sessionMap) {
|
|
38
|
+
var _a, _b;
|
|
39
|
+
if (sessionMap === void 0) { sessionMap = {}; }
|
|
40
|
+
var session = sessionMap[sessionId] || tslib_1.__assign({}, constants_1.defaultSessionStore);
|
|
41
|
+
session.currentSequenceId = sequenceId;
|
|
42
|
+
var currentSequence = (session.sessionSequences && session.sessionSequences[sequenceId]) || {};
|
|
43
|
+
currentSequence.events = events;
|
|
44
|
+
currentSequence.status = session_replay_1.RecordingStatus.RECORDING;
|
|
45
|
+
return tslib_1.__assign(tslib_1.__assign({}, sessionMap), (_a = {}, _a[sessionId] = tslib_1.__assign(tslib_1.__assign({}, session), { sessionSequences: tslib_1.__assign(tslib_1.__assign({}, session.sessionSequences), (_b = {}, _b[sequenceId] = currentSequence, _b)) }), _a));
|
|
46
|
+
})];
|
|
47
|
+
case 1:
|
|
48
|
+
_a.sent();
|
|
49
|
+
return [3 /*break*/, 3];
|
|
50
|
+
case 2:
|
|
51
|
+
e_2 = _a.sent();
|
|
52
|
+
this.loggerProvider.warn("".concat(messages_1.STORAGE_FAILURE, ": ").concat(e_2));
|
|
53
|
+
return [3 /*break*/, 3];
|
|
54
|
+
case 3: return [2 /*return*/];
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
}); };
|
|
58
|
+
this.cleanUpSessionEventsStore = function (sessionId, sequenceId) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
59
|
+
var e_3;
|
|
60
|
+
return tslib_1.__generator(this, function (_a) {
|
|
61
|
+
switch (_a.label) {
|
|
62
|
+
case 0:
|
|
63
|
+
_a.trys.push([0, 2, , 3]);
|
|
64
|
+
return [4 /*yield*/, IDBKeyVal.update(this.storageKey, function (sessionMap) {
|
|
65
|
+
if (sessionMap === void 0) { sessionMap = {}; }
|
|
66
|
+
var session = sessionMap[sessionId];
|
|
67
|
+
var sequenceToUpdate = (session === null || session === void 0 ? void 0 : session.sessionSequences) && session.sessionSequences[sequenceId];
|
|
68
|
+
if (!sequenceToUpdate) {
|
|
69
|
+
return sessionMap;
|
|
70
|
+
}
|
|
71
|
+
sequenceToUpdate.events = [];
|
|
72
|
+
sequenceToUpdate.status = session_replay_1.RecordingStatus.SENT;
|
|
73
|
+
// Delete sent sequences for current session
|
|
74
|
+
Object.entries(session.sessionSequences).forEach(function (_a) {
|
|
75
|
+
var _b = tslib_1.__read(_a, 2), storedSeqId = _b[0], sequence = _b[1];
|
|
76
|
+
var numericStoredSeqId = parseInt(storedSeqId, 10);
|
|
77
|
+
if (sequence.status === session_replay_1.RecordingStatus.SENT && sequenceId !== numericStoredSeqId) {
|
|
78
|
+
delete session.sessionSequences[numericStoredSeqId];
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
// Delete any sessions that are older than 3 days
|
|
82
|
+
Object.keys(sessionMap).forEach(function (sessionId) {
|
|
83
|
+
var numericSessionId = parseInt(sessionId, 10);
|
|
84
|
+
if (Date.now() - numericSessionId >= constants_1.MAX_IDB_STORAGE_LENGTH) {
|
|
85
|
+
delete sessionMap[numericSessionId];
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
return sessionMap;
|
|
89
|
+
})];
|
|
90
|
+
case 1:
|
|
91
|
+
_a.sent();
|
|
92
|
+
return [3 /*break*/, 3];
|
|
93
|
+
case 2:
|
|
94
|
+
e_3 = _a.sent();
|
|
95
|
+
this.loggerProvider.warn("".concat(messages_1.STORAGE_FAILURE, ": ").concat(e_3));
|
|
96
|
+
return [3 /*break*/, 3];
|
|
97
|
+
case 3: return [2 /*return*/];
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
}); };
|
|
101
|
+
this.loggerProvider = loggerProvider;
|
|
102
|
+
this.storageKey = "".concat(constants_1.STORAGE_PREFIX, "_").concat(apiKey.substring(0, 10));
|
|
103
|
+
}
|
|
104
|
+
return SessionReplaySessionIDBStore;
|
|
105
|
+
}());
|
|
106
|
+
exports.SessionReplaySessionIDBStore = SessionReplaySessionIDBStore;
|
|
107
|
+
//# sourceMappingURL=session-idb-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-idb-store.js","sourceRoot":"","sources":["../../src/session-idb-store.ts"],"names":[],"mappings":"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","sourcesContent":["import { Logger as ILogger } from '@amplitude/analytics-types';\nimport * as IDBKeyVal from 'idb-keyval';\nimport { MAX_IDB_STORAGE_LENGTH, STORAGE_PREFIX, defaultSessionStore } from './constants';\nimport { STORAGE_FAILURE } from './messages';\nimport {\n SessionReplaySessionIDBStore as AmplitudeSessionReplaySessionIDBStore,\n Events,\n IDBStore,\n IDBStoreSession,\n RecordingStatus,\n} from './typings/session-replay';\n\nexport class SessionReplaySessionIDBStore implements AmplitudeSessionReplaySessionIDBStore {\n apiKey: string | undefined;\n storageKey = '';\n loggerProvider: ILogger;\n constructor({ apiKey, loggerProvider }: { apiKey: string; loggerProvider: ILogger }) {\n this.loggerProvider = loggerProvider;\n this.storageKey = `${STORAGE_PREFIX}_${apiKey.substring(0, 10)}`;\n }\n\n getAllSessionDataFromStore = async () => {\n try {\n const storedReplaySessionContexts: IDBStore | undefined = await IDBKeyVal.get(this.storageKey);\n\n return storedReplaySessionContexts;\n } catch (e) {\n this.loggerProvider.warn(`${STORAGE_FAILURE}: ${e as string}`);\n }\n return undefined;\n };\n\n storeEventsForSession = async (events: Events, sequenceId: number, sessionId: number) => {\n try {\n await IDBKeyVal.update(this.storageKey, (sessionMap: IDBStore = {}): IDBStore => {\n const session: IDBStoreSession = sessionMap[sessionId] || { ...defaultSessionStore };\n session.currentSequenceId = sequenceId;\n\n const currentSequence = (session.sessionSequences && session.sessionSequences[sequenceId]) || {};\n\n currentSequence.events = events;\n currentSequence.status = RecordingStatus.RECORDING;\n\n return {\n ...sessionMap,\n [sessionId]: {\n ...session,\n sessionSequences: {\n ...session.sessionSequences,\n [sequenceId]: currentSequence,\n },\n },\n };\n });\n } catch (e) {\n this.loggerProvider.warn(`${STORAGE_FAILURE}: ${e as string}`);\n }\n };\n\n cleanUpSessionEventsStore = async (sessionId: number, sequenceId: number) => {\n try {\n await IDBKeyVal.update(this.storageKey, (sessionMap: IDBStore = {}): IDBStore => {\n const session: IDBStoreSession = sessionMap[sessionId];\n const sequenceToUpdate = session?.sessionSequences && session.sessionSequences[sequenceId];\n if (!sequenceToUpdate) {\n return sessionMap;\n }\n\n sequenceToUpdate.events = [];\n sequenceToUpdate.status = RecordingStatus.SENT;\n\n // Delete sent sequences for current session\n Object.entries(session.sessionSequences).forEach(([storedSeqId, sequence]) => {\n const numericStoredSeqId = parseInt(storedSeqId, 10);\n if (sequence.status === RecordingStatus.SENT && sequenceId !== numericStoredSeqId) {\n delete session.sessionSequences[numericStoredSeqId];\n }\n });\n\n // Delete any sessions that are older than 3 days\n Object.keys(sessionMap).forEach((sessionId: string) => {\n const numericSessionId = parseInt(sessionId, 10);\n if (Date.now() - numericSessionId >= MAX_IDB_STORAGE_LENGTH) {\n delete sessionMap[numericSessionId];\n }\n });\n\n return sessionMap;\n });\n } catch (e) {\n this.loggerProvider.warn(`${STORAGE_FAILURE}: ${e as string}`);\n }\n };\n}\n"]}
|
|
@@ -1,27 +1,20 @@
|
|
|
1
1
|
import { Logger as ILogger } from '@amplitude/analytics-types';
|
|
2
2
|
import { record } from '@amplitude/rrweb';
|
|
3
|
-
import { AmplitudeSessionReplay,
|
|
3
|
+
import { AmplitudeSessionReplay, SessionReplayEventsManager as AmplitudeSessionReplayEventsManager, SessionIdentifiers as ISessionIdentifiers, SessionReplayConfig as ISessionReplayConfig, SessionReplayOptions } from './typings/session-replay';
|
|
4
4
|
export declare class SessionReplay implements AmplitudeSessionReplay {
|
|
5
5
|
name: string;
|
|
6
6
|
config: ISessionReplayConfig | undefined;
|
|
7
|
+
identifiers: ISessionIdentifiers | undefined;
|
|
8
|
+
eventsManager: AmplitudeSessionReplayEventsManager | undefined;
|
|
7
9
|
loggerProvider: ILogger;
|
|
8
|
-
storageKey: string;
|
|
9
|
-
retryTimeout: number;
|
|
10
|
-
events: Events;
|
|
11
|
-
currentSequenceId: number;
|
|
12
|
-
private scheduled;
|
|
13
|
-
queue: SessionReplayContext[];
|
|
14
10
|
stopRecordingEvents: ReturnType<typeof record> | null;
|
|
15
|
-
maxPersistedEventsSize: number;
|
|
16
|
-
interval: number;
|
|
17
|
-
timeAtLastSend: number | null;
|
|
18
11
|
constructor();
|
|
19
12
|
init(apiKey: string, options: SessionReplayOptions): import("@amplitude/analytics-types").AmplitudeReturn<void>;
|
|
20
13
|
protected _init(apiKey: string, options: SessionReplayOptions): Promise<void>;
|
|
21
14
|
setSessionId(sessionId: number, deviceId?: string): void;
|
|
22
15
|
getSessionReplayDebugPropertyValue(): string;
|
|
23
16
|
getSessionReplayProperties(): {
|
|
24
|
-
[
|
|
17
|
+
[key: string]: string | null;
|
|
25
18
|
};
|
|
26
19
|
blurListener: () => void;
|
|
27
20
|
focusListener: () => void;
|
|
@@ -30,39 +23,10 @@ export declare class SessionReplay implements AmplitudeSessionReplay {
|
|
|
30
23
|
shouldOptOut(): boolean | undefined;
|
|
31
24
|
getShouldRecord(ignoreFocus?: boolean): boolean;
|
|
32
25
|
getBlockSelectors(): string | string[] | undefined;
|
|
33
|
-
sendStoredEvents(storedReplaySessions: IDBStore): void;
|
|
34
26
|
recordEvents(): void;
|
|
35
|
-
/**
|
|
36
|
-
* Determines whether to send the events list to the backend and start a new
|
|
37
|
-
* empty events list, based on the size of the list as well as the last time sent
|
|
38
|
-
* @param nextEventString
|
|
39
|
-
* @returns boolean
|
|
40
|
-
*/
|
|
41
|
-
shouldSplitEventsList: (nextEventString: string) => boolean;
|
|
42
|
-
sendEventsList({ events, sequenceId, sessionId }: {
|
|
43
|
-
events: string[];
|
|
44
|
-
sequenceId: number;
|
|
45
|
-
sessionId: number;
|
|
46
|
-
}): void;
|
|
47
|
-
addToQueue(...list: SessionReplayContext[]): void;
|
|
48
|
-
schedule(timeout: number): void;
|
|
49
|
-
flush(useRetry?: boolean): Promise<void>;
|
|
50
|
-
getSampleRate(): number;
|
|
51
|
-
getServerUrl(): "https://api-sr.amplitude.com/sessions/v2/track" | "https://api-sr.eu.amplitude.com/sessions/v2/track" | "https://api-sr.stag2.amplitude.com//sessions/v2/track";
|
|
52
27
|
getDeviceId(): string | undefined;
|
|
53
28
|
getSessionId(): number | undefined;
|
|
54
|
-
|
|
55
|
-
handleReponse(status: number, context: SessionReplayContext): void;
|
|
56
|
-
handleSuccessResponse(context: SessionReplayContext): void;
|
|
57
|
-
handleOtherResponse(context: SessionReplayContext): void;
|
|
58
|
-
getAllSessionEventsFromStore(): Promise<IDBStore | undefined>;
|
|
59
|
-
storeEventsForSession(events: Events, sequenceId: number, sessionId: number): Promise<void>;
|
|
60
|
-
cleanUpSessionEventsStore(sessionId: number, sequenceId: number): Promise<void>;
|
|
61
|
-
completeRequest({ context, err, success }: {
|
|
62
|
-
context: SessionReplayContext;
|
|
63
|
-
err?: string;
|
|
64
|
-
success?: string;
|
|
65
|
-
}): void;
|
|
29
|
+
flush(useRetry?: boolean): Promise<void>;
|
|
66
30
|
shutdown(): void;
|
|
67
31
|
}
|
|
68
32
|
//# sourceMappingURL=session-replay.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-replay.d.ts","sourceRoot":"","sources":["../../src/session-replay.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,IAAI,OAAO,
|
|
1
|
+
{"version":3,"file":"session-replay.d.ts","sourceRoot":"","sources":["../../src/session-replay.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,IAAI,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAQ,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAWhD,OAAO,EACL,sBAAsB,EACtB,0BAA0B,IAAI,mCAAmC,EACjE,kBAAkB,IAAI,mBAAmB,EACzC,mBAAmB,IAAI,oBAAoB,EAC3C,oBAAoB,EACrB,MAAM,0BAA0B,CAAC;AAElC,qBAAa,aAAc,YAAW,sBAAsB;IAC1D,IAAI,SAAuC;IAC3C,MAAM,EAAE,oBAAoB,GAAG,SAAS,CAAC;IACzC,WAAW,EAAE,mBAAmB,GAAG,SAAS,CAAC;IAC7C,aAAa,EAAE,mCAAmC,GAAG,SAAS,CAAC;IAC/D,cAAc,EAAE,OAAO,CAAC;IACxB,mBAAmB,EAAE,UAAU,CAAC,OAAO,MAAM,CAAC,GAAG,IAAI,CAAQ;;IAM7D,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,oBAAoB;cAIlC,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,oBAAoB;IAsBnE,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM;IAwBjD,kCAAkC;IAUlC,0BAA0B;;;IAwB1B,YAAY,aAEV;IAEF,aAAa,aAEX;IAEF,0BAA0B,CAAC,SAAS,CAAC,EAAE,MAAM;IAiBvC,UAAU,CAAC,sBAAsB,UAAQ;IAkB/C,YAAY;IAUZ,eAAe,CAAC,WAAW,UAAQ;IA8BnC,iBAAiB,IAAI,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS;IAIlD,YAAY;IAkCZ,WAAW;IAUX,YAAY;IAIN,KAAK,CAAC,QAAQ,UAAQ;IAM5B,QAAQ;CAST"}
|