@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.
Files changed (73) hide show
  1. package/lib/cjs/config.d.ts +0 -3
  2. package/lib/cjs/config.d.ts.map +1 -1
  3. package/lib/cjs/config.js +0 -9
  4. package/lib/cjs/config.js.map +1 -1
  5. package/lib/cjs/events-manager.d.ts +49 -0
  6. package/lib/cjs/events-manager.d.ts.map +1 -0
  7. package/lib/cjs/events-manager.js +157 -0
  8. package/lib/cjs/events-manager.js.map +1 -0
  9. package/lib/cjs/identifiers.d.ts +9 -0
  10. package/lib/cjs/identifiers.d.ts.map +1 -0
  11. package/lib/cjs/identifiers.js +18 -0
  12. package/lib/cjs/identifiers.js.map +1 -0
  13. package/lib/cjs/session-idb-store.d.ts +15 -0
  14. package/lib/cjs/session-idb-store.d.ts.map +1 -0
  15. package/lib/cjs/session-idb-store.js +107 -0
  16. package/lib/cjs/session-idb-store.js.map +1 -0
  17. package/lib/cjs/session-replay.d.ts +5 -41
  18. package/lib/cjs/session-replay.d.ts.map +1 -1
  19. package/lib/cjs/session-replay.js +55 -406
  20. package/lib/cjs/session-replay.js.map +1 -1
  21. package/lib/cjs/track-destination.d.ts +27 -0
  22. package/lib/cjs/track-destination.d.ts.map +1 -0
  23. package/lib/cjs/track-destination.js +201 -0
  24. package/lib/cjs/track-destination.js.map +1 -0
  25. package/lib/cjs/typings/session-replay.d.ts +45 -7
  26. package/lib/cjs/typings/session-replay.d.ts.map +1 -1
  27. package/lib/cjs/typings/session-replay.js.map +1 -1
  28. package/lib/esm/config.d.ts +0 -3
  29. package/lib/esm/config.d.ts.map +1 -1
  30. package/lib/esm/config.js +0 -9
  31. package/lib/esm/config.js.map +1 -1
  32. package/lib/esm/events-manager.d.ts +49 -0
  33. package/lib/esm/events-manager.d.ts.map +1 -0
  34. package/lib/esm/events-manager.js +155 -0
  35. package/lib/esm/events-manager.js.map +1 -0
  36. package/lib/esm/identifiers.d.ts +9 -0
  37. package/lib/esm/identifiers.d.ts.map +1 -0
  38. package/lib/esm/identifiers.js +16 -0
  39. package/lib/esm/identifiers.js.map +1 -0
  40. package/lib/esm/session-idb-store.d.ts +15 -0
  41. package/lib/esm/session-idb-store.d.ts.map +1 -0
  42. package/lib/esm/session-idb-store.js +105 -0
  43. package/lib/esm/session-idb-store.js.map +1 -0
  44. package/lib/esm/session-replay.d.ts +5 -41
  45. package/lib/esm/session-replay.d.ts.map +1 -1
  46. package/lib/esm/session-replay.js +59 -410
  47. package/lib/esm/session-replay.js.map +1 -1
  48. package/lib/esm/track-destination.d.ts +27 -0
  49. package/lib/esm/track-destination.d.ts.map +1 -0
  50. package/lib/esm/track-destination.js +199 -0
  51. package/lib/esm/track-destination.js.map +1 -0
  52. package/lib/esm/typings/session-replay.d.ts +45 -7
  53. package/lib/esm/typings/session-replay.d.ts.map +1 -1
  54. package/lib/esm/typings/session-replay.js.map +1 -1
  55. package/lib/scripts/amplitude-min.js +1 -1
  56. package/lib/scripts/amplitude-min.js.gz +0 -0
  57. package/lib/scripts/amplitude-min.umd.js +1 -1
  58. package/lib/scripts/amplitude-min.umd.js.gz +0 -0
  59. package/lib/scripts/config.d.ts +0 -3
  60. package/lib/scripts/config.d.ts.map +1 -1
  61. package/lib/scripts/events-manager.d.ts +49 -0
  62. package/lib/scripts/events-manager.d.ts.map +1 -0
  63. package/lib/scripts/identifiers.d.ts +9 -0
  64. package/lib/scripts/identifiers.d.ts.map +1 -0
  65. package/lib/scripts/session-idb-store.d.ts +15 -0
  66. package/lib/scripts/session-idb-store.d.ts.map +1 -0
  67. package/lib/scripts/session-replay.d.ts +5 -41
  68. package/lib/scripts/session-replay.d.ts.map +1 -1
  69. package/lib/scripts/track-destination.d.ts +27 -0
  70. package/lib/scripts/track-destination.d.ts.map +1 -0
  71. package/lib/scripts/typings/session-replay.d.ts +45 -7
  72. package/lib/scripts/typings/session-replay.d.ts.map +1 -1
  73. package/package.json +2 -2
@@ -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);
@@ -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;AACtD,OAAO,EACL,mBAAmB,IAAI,oBAAoB,EAC3C,oBAAoB,EACpB,0BAA0B,EAC3B,MAAM,0BAA0B,CAAC;AAIlC,eAAO,MAAM,gBAAgB;;;;;CAK3B,CAAC;AAEH,qBAAa,mBAAoB,SAAQ,MAAO,YAAW,oBAAoB;IAC7E,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,aAAa,CAAC,EAAE,0BAA0B,CAAC;IAC3C,SAAS,CAAC,EAAE,OAAO,CAAC;gBAER,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,oBAAoB;CAgC1D"}
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
  }
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":";;;AAAA,8EAAoE;AACpE,4DAA2D;AAC3D,8DAAsD;AAMtD,yCAAuE;AACvE,qCAAoD;AAE7C,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;IAS7C,6BAAY,MAAc,EAAE,OAA6B;QAAzD,iBA+BC;QA9BC,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,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QACjC,KAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;QACnC,KAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,+BAAmB,CAAC;QAE5D,IAAI,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,QAAQ,EAAE;YACzC,KAAI,CAAC,eAAe,GAAG,IAAA,iCAAuB,EAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;SACrF;aAAM;YACL,KAAI,CAAC,cAAc,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;SAC1E;QAED,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,AAzCD,CAAyC,uBAAM,GAyC9C;AAzCY,kDAAmB","sourcesContent":["import { FetchTransport } from '@amplitude/analytics-client-common';\nimport { Config, Logger } from '@amplitude/analytics-core';\nimport { LogLevel } from '@amplitude/analytics-types';\nimport {\n SessionReplayConfig as ISessionReplayConfig,\n SessionReplayOptions,\n SessionReplayPrivacyConfig,\n} from './typings/session-replay';\nimport { DEFAULT_SAMPLE_RATE, DEFAULT_SERVER_ZONE } from './constants';\nimport { generateSessionReplayId } from './helpers';\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 deviceId?: string | undefined;\n sessionId?: number | undefined;\n sessionReplayId?: string | undefined;\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.deviceId = options.deviceId;\n this.sessionId = options.sessionId;\n this.serverZone = options.serverZone || DEFAULT_SERVER_ZONE;\n\n if (options.sessionId && options.deviceId) {\n this.sessionReplayId = generateSessionReplayId(options.sessionId, options.deviceId);\n } else {\n this.loggerProvider.error('Please provide both sessionId and deviceId.');\n }\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"]}
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":";;;AAAA,yCAAuF;AACvF,2DAQkC;AAElC,yDAAmE;AACnE,yDAAoE;AAEpE;IAUE,oCAAY,EAA2C;YAAzC,MAAM,YAAA;QAApB,iBAOC;QAhBD,WAAM,GAAW,EAAE,CAAC;QACpB,sBAAiB,GAAG,CAAC,CAAC;QACtB,2BAAsB,GAAG,wCAA4B,CAAC;QACtD,aAAQ,GAAG,wBAAY,CAAC;QACxB,mBAAc,GAAkB,IAAI,CAAC;QAgGrC;;;;;WAKG;QACH,0BAAqB,GAAG,UAAC,eAAuB;YAC9C,IAAM,eAAe,GAAG,IAAI,IAAI,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC;YACzD,IAAM,gBAAgB,GAAG,IAAI,IAAI,CAAC,KAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC;YACpD,IAAI,gBAAgB,GAAG,eAAe,IAAI,KAAI,CAAC,sBAAsB,EAAE;gBACrE,OAAO,IAAI,CAAC;aACb;YACD,IAAI,KAAI,CAAC,cAAc,KAAK,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,KAAI,CAAC,cAAc,GAAG,KAAI,CAAC,QAAQ,IAAI,KAAI,CAAC,MAAM,CAAC,MAAM,EAAE;gBAC1G,KAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,wBAAY,EAAE,KAAI,CAAC,QAAQ,GAAG,wBAAY,CAAC,CAAC;gBACrE,KAAI,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBACjC,OAAO,IAAI,CAAC;aACb;YACD,OAAO,KAAK,CAAC;QACf,CAAC,CAAC;QA5GA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,gBAAgB,GAAG,IAAI,iDAA6B,CAAC,EAAE,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;QAC1G,IAAI,CAAC,eAAe,GAAG,IAAI,gDAA4B,CAAC;YACtD,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc;YAC1C,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM;SAC3B,CAAC,CAAC;IACL,CAAC;IAEK,+CAAU,GAAhB,UAAiB,EAQhB;YAPC,SAAS,eAAA,EACT,QAAQ,cAAA,EACR,8BAA8B,EAA9B,sBAAsB,mBAAG,KAAK,KAAA;;;;;;wBAM9B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,4EAA4E;wBACjF,qBAAM,IAAI,CAAC,eAAe,CAAC,0BAA0B,EAAE,EAAA;;wBAA9E,oBAAoB,GAAG,SAAuD;wBAE9E,yBAAyB,GAAG,oBAAoB,IAAI,oBAAoB,CAAC,SAAS,CAAC,CAAC;wBAC1F,IAAI,oBAAoB,IAAI,yBAAyB,IAAI,yBAAyB,CAAC,gBAAgB,EAAE;4BAC7F,WAAW,GAAG,yBAAyB,CAAC,iBAAiB,CAAC;4BAC1D,YAAY,GAAG,yBAAyB,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;4BAC7E,IAAI,YAAY,IAAI,YAAY,CAAC,MAAM,KAAK,gCAAe,CAAC,SAAS,EAAE;gCACrE,IAAI,CAAC,iBAAiB,GAAG,WAAW,GAAG,CAAC,CAAC;gCACzC,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;6BAClB;iCAAM;gCACL,mEAAmE;gCACnE,IAAI,CAAC,iBAAiB,GAAG,WAAW,CAAC;gCACrC,IAAI,CAAC,MAAM,GAAG,CAAA,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,MAAM,KAAI,EAAE,CAAC;6BAC1C;yBACF;wBACD,IAAI,sBAAsB,IAAI,oBAAoB,EAAE;4BAClD,IAAI,CAAC,gBAAgB,CAAC,EAAE,oBAAoB,sBAAA,EAAE,QAAQ,UAAA,EAAE,SAAS,WAAA,EAAE,CAAC,CAAC;yBACtE;;;;;KACF;IAED,qDAAgB,GAAhB,UAAiB,EAQhB;YAPC,oBAAoB,0BAAA,EACpB,SAAS,eAAA,EACT,QAAQ,cAAA;QAMR,KAAK,IAAM,eAAe,IAAI,oBAAoB,EAAE;YAClD,IAAM,eAAe,GAAG,oBAAoB,CAAC,eAAe,CAAC,CAAC,gBAAgB,CAAC;YAC/E,KAAK,IAAM,WAAW,IAAI,eAAe,EAAE;gBACzC,IAAM,GAAG,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;gBACzC,IAAM,YAAY,GAAG,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;gBAC/C,IAAM,gBAAgB,GAAG,QAAQ,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;gBACvD,IAAI,gBAAgB,KAAK,SAAS,IAAI,YAAY,KAAK,IAAI,CAAC,iBAAiB,EAAE;oBAC7E,SAAS;iBACV;gBAED,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,KAAK,gCAAe,CAAC,SAAS,EAAE;oBAC/E,IAAI,CAAC,cAAc,CAAC;wBAClB,MAAM,EAAE,GAAG,CAAC,MAAM;wBAClB,UAAU,EAAE,YAAY;wBACxB,SAAS,EAAE,gBAAgB;wBAC3B,QAAQ,UAAA;qBACT,CAAC,CAAC;iBACJ;aACF;SACF;IACH,CAAC;IAED,kDAAa,GAAb;QACE,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QACjB,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC;IAC7B,CAAC;IAED,6CAAQ,GAAR,UAAS,EAAsF;YAApF,KAAK,WAAA,EAAE,SAAS,eAAA,EAAE,QAAQ,cAAA;QACnC,IAAM,WAAW,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;QACtD,IAAI,WAAW,EAAE;YACf,IAAI,CAAC,cAAc,CAAC;gBAClB,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,UAAU,EAAE,IAAI,CAAC,iBAAiB;gBAClC,SAAS,WAAA;gBACT,QAAQ,UAAA;aACT,CAAC,CAAC;YACH,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;YACjB,IAAI,CAAC,iBAAiB,EAAE,CAAC;SAC1B;QACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxB,KAAK,IAAI,CAAC,eAAe,CAAC,qBAAqB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,iBAAiB,EAAE,SAAS,CAAC,CAAC;IAClG,CAAC;IAsBD,+CAAU,GAAV,UAAW,EAAgE;YAA9D,SAAS,eAAA,EAAE,QAAQ,cAAA;QAC9B,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,SAAS,EAAE;YACnC,IAAI,CAAC,cAAc,CAAC;gBAClB,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,UAAU,EAAE,IAAI,CAAC,iBAAiB;gBAClC,SAAS,WAAA;gBACT,QAAQ,UAAA;aACT,CAAC,CAAC;SACJ;IACH,CAAC;IAED,mDAAc,GAAd,UAAe,EAUd;YATC,MAAM,YAAA,EACN,UAAU,gBAAA,EACV,SAAS,eAAA,EACT,QAAQ,cAAA;QAOR,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC;YACnC,MAAM,EAAE,MAAM;YACd,UAAU,EAAE,UAAU;YACtB,SAAS,EAAE,SAAS;YACpB,eAAe,EAAE,IAAI,CAAC,MAAM,CAAC,eAAe;YAC5C,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM;YAC1B,QAAQ,EAAE,QAAQ;YAClB,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU;YAClC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU;YAClC,UAAU,EAAE,IAAI,CAAC,eAAe,CAAC,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC;SACtF,CAAC,CAAC;IACL,CAAC;IAEK,0CAAK,GAAX,UAAY,QAAgB;QAAhB,yBAAA,EAAA,gBAAgB;;;gBAC1B,IAAI,IAAI,CAAC,gBAAgB,EAAE;oBACzB,sBAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAC;iBAC9C;;;;KACF;IACH,iCAAC;AAAD,CAAC,AAjKD,IAiKC;AAjKY,gEAA0B","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, Events, IDBStore, SessionReplayConfig as ISessionReplayConfig, SessionReplayContext, SessionReplayOptions } from './typings/session-replay';
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
- [x: string]: string | null;
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
- send(context: SessionReplayContext, useRetry?: boolean): Promise<void>;
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,EAAsB,MAAM,4BAA4B,CAAC;AACnF,OAAO,EAAQ,MAAM,EAAE,MAAM,kBAAkB,CAAC;AA6BhD,OAAO,EACL,sBAAsB,EACtB,MAAM,EACN,QAAQ,EAER,mBAAmB,IAAI,oBAAoB,EAE3C,oBAAoB,EACpB,oBAAoB,EACrB,MAAM,0BAA0B,CAAC;AAGlC,qBAAa,aAAc,YAAW,sBAAsB;IAC1D,IAAI,SAAuC;IAC3C,MAAM,EAAE,oBAAoB,GAAG,SAAS,CAAC;IACzC,cAAc,EAAE,OAAO,CAAC;IACxB,UAAU,SAAM;IAChB,YAAY,SAAQ;IACpB,MAAM,EAAE,MAAM,CAAM;IACpB,iBAAiB,SAAK;IACtB,OAAO,CAAC,SAAS,CAA8C;IAC/D,KAAK,EAAE,oBAAoB,EAAE,CAAM;IACnC,mBAAmB,EAAE,UAAU,CAAC,OAAO,MAAM,CAAC,GAAG,IAAI,CAAQ;IAC7D,sBAAsB,SAAgC;IACtD,QAAQ,SAAgB;IACxB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAQ;;IAMrC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,oBAAoB;cAIlC,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,oBAAoB;IAmBnE,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM;IAyBjD,kCAAkC;IAUlC,0BAA0B;;;IAwB1B,YAAY,aAEV;IAEF,aAAa,aAEX;IAEF,0BAA0B,CAAC,SAAS,CAAC,EAAE,MAAM;IAmBvC,UAAU,CAAC,sBAAsB,UAAQ;IAgC/C,YAAY;IAUZ,eAAe,CAAC,WAAW,UAAQ;IA8BnC,iBAAiB,IAAI,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS;IAIlD,gBAAgB,CAAC,oBAAoB,EAAE,QAAQ;IAqB/C,YAAY;IA6CZ;;;;;OAKG;IACH,qBAAqB,oBAAqB,MAAM,KAAG,OAAO,CAYxD;IAEF,cAAc,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE;QAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE;IAU7G,UAAU,CAAC,GAAG,IAAI,EAAE,oBAAoB,EAAE;IA0B1C,QAAQ,CAAC,OAAO,EAAE,MAAM;IAWlB,KAAK,CAAC,QAAQ,UAAQ;IAc5B,aAAa;IAIb,YAAY;IAYZ,WAAW;IAUX,YAAY;IAIN,IAAI,CAAC,OAAO,EAAE,oBAAoB,EAAE,QAAQ,UAAO;IA0DzD,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,oBAAoB;IAc3D,qBAAqB,CAAC,OAAO,EAAE,oBAAoB;IAInD,mBAAmB,CAAC,OAAO,EAAE,oBAAoB;IAO3C,4BAA4B;IAW5B,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;IA2B3E,yBAAyB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;IAmCrE,eAAe,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE;QAAE,OAAO,EAAE,oBAAoB,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE;IAS5G,QAAQ;CAST"}
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"}