@amplitude/plugin-session-replay-browser 1.13.0 → 1.13.1

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.
@@ -1 +1 @@
1
- {"version":3,"file":"session-replay.d.ts","sourceRoot":"","sources":["../../src/session-replay.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AAEpF,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAGhE,qBAAa,mBAAoB,YAAW,gBAAgB;IAC1D,IAAI,SAA8C;IAClD,IAAI,eAAyB;IAI7B,MAAM,EAAE,aAAa,CAAC;IACtB,OAAO,EAAE,oBAAoB,CAAC;gBAElB,OAAO,CAAC,EAAE,oBAAoB;IAIpC,KAAK,CAAC,MAAM,EAAE,aAAa;IAsD3B,OAAO,CAAC,KAAK,EAAE,KAAK;IA4CpB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAa/B,0BAA0B;;;CAG3B;AAED,eAAO,MAAM,mBAAmB,EAAE,CAAC,OAAO,CAAC,EAAE,oBAAoB,KAAK,gBAIrE,CAAC"}
1
+ {"version":3,"file":"session-replay.d.ts","sourceRoot":"","sources":["../../src/session-replay.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AAEpF,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAGhE,qBAAa,mBAAoB,YAAW,gBAAgB;IAC1D,IAAI,SAA8C;IAClD,IAAI,eAAyB;IAI7B,MAAM,EAAE,aAAa,CAAC;IACtB,OAAO,EAAE,oBAAoB,CAAC;gBAElB,OAAO,CAAC,EAAE,oBAAoB;IAIpC,KAAK,CAAC,MAAM,EAAE,aAAa;IAwD3B,OAAO,CAAC,KAAK,EAAE,KAAK;IA6CpB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAc/B,0BAA0B;;;CAG3B;AAED,eAAO,MAAM,mBAAmB,EAAE,CAAC,OAAO,CAAC,EAAE,oBAAoB,KAAK,gBAIrE,CAAC"}
@@ -17,7 +17,8 @@ var SessionReplayPlugin = /** @class */ (function () {
17
17
  switch (_f.label) {
18
18
  case 0:
19
19
  _f.trys.push([0, 2, , 3]);
20
- config.loggerProvider.log("Installing @amplitude/plugin-session-replay, version ".concat(version_1.VERSION, "."));
20
+ /* istanbul ignore next */
21
+ config === null || config === void 0 ? void 0 : config.loggerProvider.log("Installing @amplitude/plugin-session-replay, version ".concat(version_1.VERSION, "."));
21
22
  this.config = config;
22
23
  if (this.options.forceSessionTracking) {
23
24
  if (typeof config.defaultTracking === 'boolean') {
@@ -64,7 +65,8 @@ var SessionReplayPlugin = /** @class */ (function () {
64
65
  return [3 /*break*/, 3];
65
66
  case 2:
66
67
  error_1 = _f.sent();
67
- config.loggerProvider.error("Session Replay: Failed to initialize due to ".concat(error_1.message));
68
+ /* istanbul ignore next */
69
+ config === null || config === void 0 ? void 0 : config.loggerProvider.error("Session Replay: Failed to initialize due to ".concat(error_1.message));
68
70
  return [3 /*break*/, 3];
69
71
  case 3: return [2 /*return*/];
70
72
  }
@@ -72,32 +74,33 @@ var SessionReplayPlugin = /** @class */ (function () {
72
74
  });
73
75
  };
74
76
  SessionReplayPlugin.prototype.execute = function (event) {
77
+ var _a;
75
78
  return tslib_1.__awaiter(this, void 0, void 0, function () {
76
79
  var sessionId, sessionRecordingProperties, sessionId, sessionRecordingProperties, error_2;
77
- return tslib_1.__generator(this, function (_a) {
78
- switch (_a.label) {
80
+ return tslib_1.__generator(this, function (_b) {
81
+ switch (_b.label) {
79
82
  case 0:
80
- _a.trys.push([0, 8, , 9]);
83
+ _b.trys.push([0, 8, , 9]);
81
84
  if (!this.options.customSessionId) return [3 /*break*/, 4];
82
85
  sessionId = this.options.customSessionId(event);
83
86
  if (!sessionId) return [3 /*break*/, 3];
84
87
  if (!(sessionId !== sessionReplay.getSessionId())) return [3 /*break*/, 2];
85
88
  return [4 /*yield*/, sessionReplay.setSessionId(sessionId).promise];
86
89
  case 1:
87
- _a.sent();
88
- _a.label = 2;
90
+ _b.sent();
91
+ _b.label = 2;
89
92
  case 2:
90
93
  sessionRecordingProperties = sessionReplay.getSessionReplayProperties();
91
94
  event.event_properties = tslib_1.__assign(tslib_1.__assign({}, event.event_properties), sessionRecordingProperties);
92
- _a.label = 3;
95
+ _b.label = 3;
93
96
  case 3: return [3 /*break*/, 7];
94
97
  case 4:
95
98
  sessionId = this.config.sessionId;
96
99
  if (!(sessionId && sessionId !== sessionReplay.getSessionId())) return [3 /*break*/, 6];
97
100
  return [4 /*yield*/, sessionReplay.setSessionId(sessionId).promise];
98
101
  case 5:
99
- _a.sent();
100
- _a.label = 6;
102
+ _b.sent();
103
+ _b.label = 6;
101
104
  case 6:
102
105
  // Treating config.sessionId as source of truth, if the event's session id doesn't match, the
103
106
  // event is not of the current session (offline/late events). In that case, don't tag the events
@@ -105,11 +108,12 @@ var SessionReplayPlugin = /** @class */ (function () {
105
108
  sessionRecordingProperties = sessionReplay.getSessionReplayProperties();
106
109
  event.event_properties = tslib_1.__assign(tslib_1.__assign({}, event.event_properties), sessionRecordingProperties);
107
110
  }
108
- _a.label = 7;
111
+ _b.label = 7;
109
112
  case 7: return [2 /*return*/, Promise.resolve(event)];
110
113
  case 8:
111
- error_2 = _a.sent();
112
- this.config.loggerProvider.error("Session Replay: Failed to enrich event due to ".concat(error_2.message));
114
+ error_2 = _b.sent();
115
+ /* istanbul ignore next */
116
+ (_a = this.config) === null || _a === void 0 ? void 0 : _a.loggerProvider.error("Session Replay: Failed to enrich event due to ".concat(error_2.message));
113
117
  return [2 /*return*/, Promise.resolve(event)];
114
118
  case 9: return [2 /*return*/];
115
119
  }
@@ -117,8 +121,9 @@ var SessionReplayPlugin = /** @class */ (function () {
117
121
  });
118
122
  };
119
123
  SessionReplayPlugin.prototype.teardown = function () {
124
+ var _a;
120
125
  return tslib_1.__awaiter(this, void 0, void 0, function () {
121
- return tslib_1.__generator(this, function (_a) {
126
+ return tslib_1.__generator(this, function (_b) {
122
127
  try {
123
128
  sessionReplay.shutdown();
124
129
  // the following are initialized in setup() which will always be called first
@@ -128,7 +133,8 @@ var SessionReplayPlugin = /** @class */ (function () {
128
133
  this.config = null;
129
134
  }
130
135
  catch (error) {
131
- this.config.loggerProvider.error("Session Replay: teardown failed due to ".concat(error.message));
136
+ /* istanbul ignore next */
137
+ (_a = this.config) === null || _a === void 0 ? void 0 : _a.loggerProvider.error("Session Replay: teardown failed due to ".concat(error.message));
132
138
  }
133
139
  return [2 /*return*/];
134
140
  });
@@ -1 +1 @@
1
- {"version":3,"file":"session-replay.js","sourceRoot":"","sources":["../../src/session-replay.ts"],"names":[],"mappings":"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","sourcesContent":["import { BrowserConfig, EnrichmentPlugin, Event } from '@amplitude/analytics-types';\nimport * as sessionReplay from '@amplitude/session-replay-browser';\nimport { SessionReplayOptions } from './typings/session-replay';\nimport { VERSION } from './version';\n\nexport class SessionReplayPlugin implements EnrichmentPlugin {\n name = '@amplitude/plugin-session-replay-browser';\n type = 'enrichment' as const;\n // this.config is defined in setup() which will always be called first\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n config: BrowserConfig;\n options: SessionReplayOptions;\n\n constructor(options?: SessionReplayOptions) {\n this.options = { forceSessionTracking: false, ...options };\n }\n\n async setup(config: BrowserConfig) {\n try {\n config.loggerProvider.log(`Installing @amplitude/plugin-session-replay, version ${VERSION}.`);\n\n this.config = config;\n\n if (this.options.forceSessionTracking) {\n if (typeof config.defaultTracking === 'boolean') {\n if (config.defaultTracking === false) {\n config.defaultTracking = {\n pageViews: false,\n formInteractions: false,\n fileDownloads: false,\n sessions: true,\n };\n }\n } else {\n config.defaultTracking = {\n ...config.defaultTracking,\n sessions: true,\n };\n }\n }\n\n await sessionReplay.init(config.apiKey, {\n instanceName: this.config.instanceName,\n deviceId: this.options.deviceId ?? this.config.deviceId,\n optOut: this.config.optOut,\n sessionId: this.options.customSessionId ? undefined : this.config.sessionId,\n loggerProvider: this.config.loggerProvider,\n logLevel: this.config.logLevel,\n flushMaxRetries: this.config.flushMaxRetries,\n serverZone: this.config.serverZone,\n configServerUrl: this.options.configServerUrl,\n trackServerUrl: this.options.trackServerUrl,\n sampleRate: this.options.sampleRate,\n privacyConfig: {\n blockSelector: this.options.privacyConfig?.blockSelector,\n maskSelector: this.options.privacyConfig?.maskSelector,\n unmaskSelector: this.options.privacyConfig?.unmaskSelector,\n defaultMaskLevel: this.options.privacyConfig?.defaultMaskLevel,\n },\n debugMode: this.options.debugMode,\n shouldInlineStylesheet: this.options.shouldInlineStylesheet,\n version: { type: 'plugin', version: VERSION },\n performanceConfig: this.options.performanceConfig,\n storeType: this.options.storeType,\n experimental: this.options.experimental,\n }).promise;\n } catch (error) {\n config.loggerProvider.error(`Session Replay: Failed to initialize due to ${(error as Error).message}`);\n }\n }\n\n async execute(event: Event) {\n try {\n if (this.options.customSessionId) {\n const sessionId = this.options.customSessionId(event);\n if (sessionId) {\n // On event, synchronize the session id to the custom session id from the event. This may\n // suffer from offline/delayed events messing up the state stored\n if (sessionId !== sessionReplay.getSessionId()) {\n await sessionReplay.setSessionId(sessionId).promise;\n }\n\n const sessionRecordingProperties = sessionReplay.getSessionReplayProperties();\n event.event_properties = {\n ...event.event_properties,\n ...sessionRecordingProperties,\n };\n }\n } else {\n // On event, synchronize the session id to the what's on the browserConfig (source of truth)\n // Choosing not to read from event object here, concerned about offline/delayed events messing up the state stored\n // in SR.\n const sessionId: string | number | undefined = this.config.sessionId;\n if (sessionId && sessionId !== sessionReplay.getSessionId()) {\n await sessionReplay.setSessionId(sessionId).promise;\n }\n\n // Treating config.sessionId as source of truth, if the event's session id doesn't match, the\n // event is not of the current session (offline/late events). In that case, don't tag the events\n if (sessionId && sessionId === event.session_id) {\n const sessionRecordingProperties = sessionReplay.getSessionReplayProperties();\n event.event_properties = {\n ...event.event_properties,\n ...sessionRecordingProperties,\n };\n }\n }\n\n return Promise.resolve(event);\n } catch (error) {\n this.config.loggerProvider.error(`Session Replay: Failed to enrich event due to ${(error as Error).message}`);\n return Promise.resolve(event);\n }\n }\n\n async teardown(): Promise<void> {\n try {\n sessionReplay.shutdown();\n // the following are initialized in setup() which will always be called first\n // here we reset them to null to prevent memory leaks\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n this.config = null;\n } catch (error) {\n this.config.loggerProvider.error(`Session Replay: teardown failed due to ${(error as Error).message}`);\n }\n }\n\n getSessionReplayProperties() {\n return sessionReplay.getSessionReplayProperties();\n }\n}\n\nexport const sessionReplayPlugin: (options?: SessionReplayOptions) => EnrichmentPlugin = (\n options?: SessionReplayOptions,\n) => {\n return new SessionReplayPlugin(options);\n};\n"]}
1
+ {"version":3,"file":"session-replay.js","sourceRoot":"","sources":["../../src/session-replay.ts"],"names":[],"mappings":";;;AACA,uFAAmE;AAEnE,qCAAoC;AAEpC;IASE,6BAAY,OAA8B;QAR1C,SAAI,GAAG,0CAA0C,CAAC;QAClD,SAAI,GAAG,YAAqB,CAAC;QAQ3B,IAAI,CAAC,OAAO,sBAAK,oBAAoB,EAAE,KAAK,IAAK,OAAO,CAAE,CAAC;IAC7D,CAAC;IAEK,mCAAK,GAAX,UAAY,MAAqB;;;;;;;;wBAE7B,0BAA0B;wBAC1B,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,cAAc,CAAC,GAAG,CAAC,+DAAwD,iBAAO,MAAG,CAAC,CAAC;wBAE/F,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;wBAErB,IAAI,IAAI,CAAC,OAAO,CAAC,oBAAoB,EAAE;4BACrC,IAAI,OAAO,MAAM,CAAC,eAAe,KAAK,SAAS,EAAE;gCAC/C,IAAI,MAAM,CAAC,eAAe,KAAK,KAAK,EAAE;oCACpC,MAAM,CAAC,eAAe,GAAG;wCACvB,SAAS,EAAE,KAAK;wCAChB,gBAAgB,EAAE,KAAK;wCACvB,aAAa,EAAE,KAAK;wCACpB,QAAQ,EAAE,IAAI;qCACf,CAAC;iCACH;6BACF;iCAAM;gCACL,MAAM,CAAC,eAAe,yCACjB,MAAM,CAAC,eAAe,KACzB,QAAQ,EAAE,IAAI,GACf,CAAC;6BACH;yBACF;wBAED,qBAAM,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;gCACtC,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY;gCACtC,QAAQ,EAAE,MAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,mCAAI,IAAI,CAAC,MAAM,CAAC,QAAQ;gCACvD,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM;gCAC1B,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS;gCAC3E,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc;gCAC1C,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ;gCAC9B,eAAe,EAAE,IAAI,CAAC,MAAM,CAAC,eAAe;gCAC5C,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU;gCAClC,eAAe,EAAE,IAAI,CAAC,OAAO,CAAC,eAAe;gCAC7C,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc;gCAC3C,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU;gCACnC,aAAa,EAAE;oCACb,aAAa,EAAE,MAAA,IAAI,CAAC,OAAO,CAAC,aAAa,0CAAE,aAAa;oCACxD,YAAY,EAAE,MAAA,IAAI,CAAC,OAAO,CAAC,aAAa,0CAAE,YAAY;oCACtD,cAAc,EAAE,MAAA,IAAI,CAAC,OAAO,CAAC,aAAa,0CAAE,cAAc;oCAC1D,gBAAgB,EAAE,MAAA,IAAI,CAAC,OAAO,CAAC,aAAa,0CAAE,gBAAgB;iCAC/D;gCACD,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS;gCACjC,sBAAsB,EAAE,IAAI,CAAC,OAAO,CAAC,sBAAsB;gCAC3D,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,iBAAO,EAAE;gCAC7C,iBAAiB,EAAE,IAAI,CAAC,OAAO,CAAC,iBAAiB;gCACjD,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS;gCACjC,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY;6BACxC,CAAC,CAAC,OAAO,EAAA;;wBAxBV,SAwBU,CAAC;;;;wBAEX,0BAA0B;wBAC1B,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,cAAc,CAAC,KAAK,CAAC,sDAAgD,OAAe,CAAC,OAAO,CAAE,CAAC,CAAC;;;;;;KAE3G;IAEK,qCAAO,GAAb,UAAc,KAAY;;;;;;;;6BAElB,IAAI,CAAC,OAAO,CAAC,eAAe,EAA5B,wBAA4B;wBACxB,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;6BAClD,SAAS,EAAT,wBAAS;6BAGP,CAAA,SAAS,KAAK,aAAa,CAAC,YAAY,EAAE,CAAA,EAA1C,wBAA0C;wBAC5C,qBAAM,aAAa,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,OAAO,EAAA;;wBAAnD,SAAmD,CAAC;;;wBAGhD,0BAA0B,GAAG,aAAa,CAAC,0BAA0B,EAAE,CAAC;wBAC9E,KAAK,CAAC,gBAAgB,yCACjB,KAAK,CAAC,gBAAgB,GACtB,0BAA0B,CAC9B,CAAC;;;;wBAME,SAAS,GAAgC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;6BACjE,CAAA,SAAS,IAAI,SAAS,KAAK,aAAa,CAAC,YAAY,EAAE,CAAA,EAAvD,wBAAuD;wBACzD,qBAAM,aAAa,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,OAAO,EAAA;;wBAAnD,SAAmD,CAAC;;;wBAGtD,6FAA6F;wBAC7F,gGAAgG;wBAChG,IAAI,SAAS,IAAI,SAAS,KAAK,KAAK,CAAC,UAAU,EAAE;4BACzC,0BAA0B,GAAG,aAAa,CAAC,0BAA0B,EAAE,CAAC;4BAC9E,KAAK,CAAC,gBAAgB,yCACjB,KAAK,CAAC,gBAAgB,GACtB,0BAA0B,CAC9B,CAAC;yBACH;;4BAGH,sBAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAC;;;wBAE9B,0BAA0B;wBAC1B,MAAA,IAAI,CAAC,MAAM,0CAAE,cAAc,CAAC,KAAK,CAAC,wDAAkD,OAAe,CAAC,OAAO,CAAE,CAAC,CAAC;wBAC/G,sBAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAC;;;;;KAEjC;IAEK,sCAAQ,GAAd;;;;gBACE,IAAI;oBACF,aAAa,CAAC,QAAQ,EAAE,CAAC;oBACzB,6EAA6E;oBAC7E,qDAAqD;oBACrD,6DAA6D;oBAC7D,aAAa;oBACb,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;iBACpB;gBAAC,OAAO,KAAK,EAAE;oBACd,0BAA0B;oBAC1B,MAAA,IAAI,CAAC,MAAM,0CAAE,cAAc,CAAC,KAAK,CAAC,iDAA2C,KAAe,CAAC,OAAO,CAAE,CAAC,CAAC;iBACzG;;;;KACF;IAED,wDAA0B,GAA1B;QACE,OAAO,aAAa,CAAC,0BAA0B,EAAE,CAAC;IACpD,CAAC;IACH,0BAAC;AAAD,CAAC,AAnID,IAmIC;AAnIY,kDAAmB;AAqIzB,IAAM,mBAAmB,GAAyD,UACvF,OAA8B;IAE9B,OAAO,IAAI,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC1C,CAAC,CAAC;AAJW,QAAA,mBAAmB,uBAI9B","sourcesContent":["import { BrowserConfig, EnrichmentPlugin, Event } from '@amplitude/analytics-types';\nimport * as sessionReplay from '@amplitude/session-replay-browser';\nimport { SessionReplayOptions } from './typings/session-replay';\nimport { VERSION } from './version';\n\nexport class SessionReplayPlugin implements EnrichmentPlugin {\n name = '@amplitude/plugin-session-replay-browser';\n type = 'enrichment' as const;\n // this.config is defined in setup() which will always be called first\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n config: BrowserConfig;\n options: SessionReplayOptions;\n\n constructor(options?: SessionReplayOptions) {\n this.options = { forceSessionTracking: false, ...options };\n }\n\n async setup(config: BrowserConfig) {\n try {\n /* istanbul ignore next */\n config?.loggerProvider.log(`Installing @amplitude/plugin-session-replay, version ${VERSION}.`);\n\n this.config = config;\n\n if (this.options.forceSessionTracking) {\n if (typeof config.defaultTracking === 'boolean') {\n if (config.defaultTracking === false) {\n config.defaultTracking = {\n pageViews: false,\n formInteractions: false,\n fileDownloads: false,\n sessions: true,\n };\n }\n } else {\n config.defaultTracking = {\n ...config.defaultTracking,\n sessions: true,\n };\n }\n }\n\n await sessionReplay.init(config.apiKey, {\n instanceName: this.config.instanceName,\n deviceId: this.options.deviceId ?? this.config.deviceId,\n optOut: this.config.optOut,\n sessionId: this.options.customSessionId ? undefined : this.config.sessionId,\n loggerProvider: this.config.loggerProvider,\n logLevel: this.config.logLevel,\n flushMaxRetries: this.config.flushMaxRetries,\n serverZone: this.config.serverZone,\n configServerUrl: this.options.configServerUrl,\n trackServerUrl: this.options.trackServerUrl,\n sampleRate: this.options.sampleRate,\n privacyConfig: {\n blockSelector: this.options.privacyConfig?.blockSelector,\n maskSelector: this.options.privacyConfig?.maskSelector,\n unmaskSelector: this.options.privacyConfig?.unmaskSelector,\n defaultMaskLevel: this.options.privacyConfig?.defaultMaskLevel,\n },\n debugMode: this.options.debugMode,\n shouldInlineStylesheet: this.options.shouldInlineStylesheet,\n version: { type: 'plugin', version: VERSION },\n performanceConfig: this.options.performanceConfig,\n storeType: this.options.storeType,\n experimental: this.options.experimental,\n }).promise;\n } catch (error) {\n /* istanbul ignore next */\n config?.loggerProvider.error(`Session Replay: Failed to initialize due to ${(error as Error).message}`);\n }\n }\n\n async execute(event: Event) {\n try {\n if (this.options.customSessionId) {\n const sessionId = this.options.customSessionId(event);\n if (sessionId) {\n // On event, synchronize the session id to the custom session id from the event. This may\n // suffer from offline/delayed events messing up the state stored\n if (sessionId !== sessionReplay.getSessionId()) {\n await sessionReplay.setSessionId(sessionId).promise;\n }\n\n const sessionRecordingProperties = sessionReplay.getSessionReplayProperties();\n event.event_properties = {\n ...event.event_properties,\n ...sessionRecordingProperties,\n };\n }\n } else {\n // On event, synchronize the session id to the what's on the browserConfig (source of truth)\n // Choosing not to read from event object here, concerned about offline/delayed events messing up the state stored\n // in SR.\n const sessionId: string | number | undefined = this.config.sessionId;\n if (sessionId && sessionId !== sessionReplay.getSessionId()) {\n await sessionReplay.setSessionId(sessionId).promise;\n }\n\n // Treating config.sessionId as source of truth, if the event's session id doesn't match, the\n // event is not of the current session (offline/late events). In that case, don't tag the events\n if (sessionId && sessionId === event.session_id) {\n const sessionRecordingProperties = sessionReplay.getSessionReplayProperties();\n event.event_properties = {\n ...event.event_properties,\n ...sessionRecordingProperties,\n };\n }\n }\n\n return Promise.resolve(event);\n } catch (error) {\n /* istanbul ignore next */\n this.config?.loggerProvider.error(`Session Replay: Failed to enrich event due to ${(error as Error).message}`);\n return Promise.resolve(event);\n }\n }\n\n async teardown(): Promise<void> {\n try {\n sessionReplay.shutdown();\n // the following are initialized in setup() which will always be called first\n // here we reset them to null to prevent memory leaks\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n this.config = null;\n } catch (error) {\n /* istanbul ignore next */\n this.config?.loggerProvider.error(`Session Replay: teardown failed due to ${(error as Error).message}`);\n }\n }\n\n getSessionReplayProperties() {\n return sessionReplay.getSessionReplayProperties();\n }\n}\n\nexport const sessionReplayPlugin: (options?: SessionReplayOptions) => EnrichmentPlugin = (\n options?: SessionReplayOptions,\n) => {\n return new SessionReplayPlugin(options);\n};\n"]}
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "1.13.0";
1
+ export declare const VERSION = "1.13.1";
2
2
  //# sourceMappingURL=version.d.ts.map
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, "__esModule", { value: true });
2
2
  exports.VERSION = void 0;
3
3
  // Autogenerated by `yarn version-file`. DO NOT EDIT
4
- exports.VERSION = '1.13.0';
4
+ exports.VERSION = '1.13.1';
5
5
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":";;AAAA,oDAAoD;AACvC,QAAA,OAAO,GAAG,QAAQ,CAAC","sourcesContent":["// Autogenerated by `yarn version-file`. DO NOT EDIT\nexport const VERSION = '1.13.0';\n"]}
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":";;AAAA,oDAAoD;AACvC,QAAA,OAAO,GAAG,QAAQ,CAAC","sourcesContent":["// Autogenerated by `yarn version-file`. DO NOT EDIT\nexport const VERSION = '1.13.1';\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"session-replay.d.ts","sourceRoot":"","sources":["../../src/session-replay.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AAEpF,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAGhE,qBAAa,mBAAoB,YAAW,gBAAgB;IAC1D,IAAI,SAA8C;IAClD,IAAI,eAAyB;IAI7B,MAAM,EAAE,aAAa,CAAC;IACtB,OAAO,EAAE,oBAAoB,CAAC;gBAElB,OAAO,CAAC,EAAE,oBAAoB;IAIpC,KAAK,CAAC,MAAM,EAAE,aAAa;IAsD3B,OAAO,CAAC,KAAK,EAAE,KAAK;IA4CpB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAa/B,0BAA0B;;;CAG3B;AAED,eAAO,MAAM,mBAAmB,EAAE,CAAC,OAAO,CAAC,EAAE,oBAAoB,KAAK,gBAIrE,CAAC"}
1
+ {"version":3,"file":"session-replay.d.ts","sourceRoot":"","sources":["../../src/session-replay.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AAEpF,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAGhE,qBAAa,mBAAoB,YAAW,gBAAgB;IAC1D,IAAI,SAA8C;IAClD,IAAI,eAAyB;IAI7B,MAAM,EAAE,aAAa,CAAC;IACtB,OAAO,EAAE,oBAAoB,CAAC;gBAElB,OAAO,CAAC,EAAE,oBAAoB;IAIpC,KAAK,CAAC,MAAM,EAAE,aAAa;IAwD3B,OAAO,CAAC,KAAK,EAAE,KAAK;IA6CpB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAc/B,0BAA0B;;;CAG3B;AAED,eAAO,MAAM,mBAAmB,EAAE,CAAC,OAAO,CAAC,EAAE,oBAAoB,KAAK,gBAIrE,CAAC"}
@@ -15,7 +15,8 @@ var SessionReplayPlugin = /** @class */ (function () {
15
15
  switch (_f.label) {
16
16
  case 0:
17
17
  _f.trys.push([0, 2, , 3]);
18
- config.loggerProvider.log("Installing @amplitude/plugin-session-replay, version ".concat(VERSION, "."));
18
+ /* istanbul ignore next */
19
+ config === null || config === void 0 ? void 0 : config.loggerProvider.log("Installing @amplitude/plugin-session-replay, version ".concat(VERSION, "."));
19
20
  this.config = config;
20
21
  if (this.options.forceSessionTracking) {
21
22
  if (typeof config.defaultTracking === 'boolean') {
@@ -62,7 +63,8 @@ var SessionReplayPlugin = /** @class */ (function () {
62
63
  return [3 /*break*/, 3];
63
64
  case 2:
64
65
  error_1 = _f.sent();
65
- config.loggerProvider.error("Session Replay: Failed to initialize due to ".concat(error_1.message));
66
+ /* istanbul ignore next */
67
+ config === null || config === void 0 ? void 0 : config.loggerProvider.error("Session Replay: Failed to initialize due to ".concat(error_1.message));
66
68
  return [3 /*break*/, 3];
67
69
  case 3: return [2 /*return*/];
68
70
  }
@@ -70,32 +72,33 @@ var SessionReplayPlugin = /** @class */ (function () {
70
72
  });
71
73
  };
72
74
  SessionReplayPlugin.prototype.execute = function (event) {
75
+ var _a;
73
76
  return __awaiter(this, void 0, void 0, function () {
74
77
  var sessionId, sessionRecordingProperties, sessionId, sessionRecordingProperties, error_2;
75
- return __generator(this, function (_a) {
76
- switch (_a.label) {
78
+ return __generator(this, function (_b) {
79
+ switch (_b.label) {
77
80
  case 0:
78
- _a.trys.push([0, 8, , 9]);
81
+ _b.trys.push([0, 8, , 9]);
79
82
  if (!this.options.customSessionId) return [3 /*break*/, 4];
80
83
  sessionId = this.options.customSessionId(event);
81
84
  if (!sessionId) return [3 /*break*/, 3];
82
85
  if (!(sessionId !== sessionReplay.getSessionId())) return [3 /*break*/, 2];
83
86
  return [4 /*yield*/, sessionReplay.setSessionId(sessionId).promise];
84
87
  case 1:
85
- _a.sent();
86
- _a.label = 2;
88
+ _b.sent();
89
+ _b.label = 2;
87
90
  case 2:
88
91
  sessionRecordingProperties = sessionReplay.getSessionReplayProperties();
89
92
  event.event_properties = __assign(__assign({}, event.event_properties), sessionRecordingProperties);
90
- _a.label = 3;
93
+ _b.label = 3;
91
94
  case 3: return [3 /*break*/, 7];
92
95
  case 4:
93
96
  sessionId = this.config.sessionId;
94
97
  if (!(sessionId && sessionId !== sessionReplay.getSessionId())) return [3 /*break*/, 6];
95
98
  return [4 /*yield*/, sessionReplay.setSessionId(sessionId).promise];
96
99
  case 5:
97
- _a.sent();
98
- _a.label = 6;
100
+ _b.sent();
101
+ _b.label = 6;
99
102
  case 6:
100
103
  // Treating config.sessionId as source of truth, if the event's session id doesn't match, the
101
104
  // event is not of the current session (offline/late events). In that case, don't tag the events
@@ -103,11 +106,12 @@ var SessionReplayPlugin = /** @class */ (function () {
103
106
  sessionRecordingProperties = sessionReplay.getSessionReplayProperties();
104
107
  event.event_properties = __assign(__assign({}, event.event_properties), sessionRecordingProperties);
105
108
  }
106
- _a.label = 7;
109
+ _b.label = 7;
107
110
  case 7: return [2 /*return*/, Promise.resolve(event)];
108
111
  case 8:
109
- error_2 = _a.sent();
110
- this.config.loggerProvider.error("Session Replay: Failed to enrich event due to ".concat(error_2.message));
112
+ error_2 = _b.sent();
113
+ /* istanbul ignore next */
114
+ (_a = this.config) === null || _a === void 0 ? void 0 : _a.loggerProvider.error("Session Replay: Failed to enrich event due to ".concat(error_2.message));
111
115
  return [2 /*return*/, Promise.resolve(event)];
112
116
  case 9: return [2 /*return*/];
113
117
  }
@@ -115,8 +119,9 @@ var SessionReplayPlugin = /** @class */ (function () {
115
119
  });
116
120
  };
117
121
  SessionReplayPlugin.prototype.teardown = function () {
122
+ var _a;
118
123
  return __awaiter(this, void 0, void 0, function () {
119
- return __generator(this, function (_a) {
124
+ return __generator(this, function (_b) {
120
125
  try {
121
126
  sessionReplay.shutdown();
122
127
  // the following are initialized in setup() which will always be called first
@@ -126,7 +131,8 @@ var SessionReplayPlugin = /** @class */ (function () {
126
131
  this.config = null;
127
132
  }
128
133
  catch (error) {
129
- this.config.loggerProvider.error("Session Replay: teardown failed due to ".concat(error.message));
134
+ /* istanbul ignore next */
135
+ (_a = this.config) === null || _a === void 0 ? void 0 : _a.loggerProvider.error("Session Replay: teardown failed due to ".concat(error.message));
130
136
  }
131
137
  return [2 /*return*/];
132
138
  });
@@ -1 +1 @@
1
- {"version":3,"file":"session-replay.js","sourceRoot":"","sources":["../../src/session-replay.ts"],"names":[],"mappings":"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","sourcesContent":["import { BrowserConfig, EnrichmentPlugin, Event } from '@amplitude/analytics-types';\nimport * as sessionReplay from '@amplitude/session-replay-browser';\nimport { SessionReplayOptions } from './typings/session-replay';\nimport { VERSION } from './version';\n\nexport class SessionReplayPlugin implements EnrichmentPlugin {\n name = '@amplitude/plugin-session-replay-browser';\n type = 'enrichment' as const;\n // this.config is defined in setup() which will always be called first\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n config: BrowserConfig;\n options: SessionReplayOptions;\n\n constructor(options?: SessionReplayOptions) {\n this.options = { forceSessionTracking: false, ...options };\n }\n\n async setup(config: BrowserConfig) {\n try {\n config.loggerProvider.log(`Installing @amplitude/plugin-session-replay, version ${VERSION}.`);\n\n this.config = config;\n\n if (this.options.forceSessionTracking) {\n if (typeof config.defaultTracking === 'boolean') {\n if (config.defaultTracking === false) {\n config.defaultTracking = {\n pageViews: false,\n formInteractions: false,\n fileDownloads: false,\n sessions: true,\n };\n }\n } else {\n config.defaultTracking = {\n ...config.defaultTracking,\n sessions: true,\n };\n }\n }\n\n await sessionReplay.init(config.apiKey, {\n instanceName: this.config.instanceName,\n deviceId: this.options.deviceId ?? this.config.deviceId,\n optOut: this.config.optOut,\n sessionId: this.options.customSessionId ? undefined : this.config.sessionId,\n loggerProvider: this.config.loggerProvider,\n logLevel: this.config.logLevel,\n flushMaxRetries: this.config.flushMaxRetries,\n serverZone: this.config.serverZone,\n configServerUrl: this.options.configServerUrl,\n trackServerUrl: this.options.trackServerUrl,\n sampleRate: this.options.sampleRate,\n privacyConfig: {\n blockSelector: this.options.privacyConfig?.blockSelector,\n maskSelector: this.options.privacyConfig?.maskSelector,\n unmaskSelector: this.options.privacyConfig?.unmaskSelector,\n defaultMaskLevel: this.options.privacyConfig?.defaultMaskLevel,\n },\n debugMode: this.options.debugMode,\n shouldInlineStylesheet: this.options.shouldInlineStylesheet,\n version: { type: 'plugin', version: VERSION },\n performanceConfig: this.options.performanceConfig,\n storeType: this.options.storeType,\n experimental: this.options.experimental,\n }).promise;\n } catch (error) {\n config.loggerProvider.error(`Session Replay: Failed to initialize due to ${(error as Error).message}`);\n }\n }\n\n async execute(event: Event) {\n try {\n if (this.options.customSessionId) {\n const sessionId = this.options.customSessionId(event);\n if (sessionId) {\n // On event, synchronize the session id to the custom session id from the event. This may\n // suffer from offline/delayed events messing up the state stored\n if (sessionId !== sessionReplay.getSessionId()) {\n await sessionReplay.setSessionId(sessionId).promise;\n }\n\n const sessionRecordingProperties = sessionReplay.getSessionReplayProperties();\n event.event_properties = {\n ...event.event_properties,\n ...sessionRecordingProperties,\n };\n }\n } else {\n // On event, synchronize the session id to the what's on the browserConfig (source of truth)\n // Choosing not to read from event object here, concerned about offline/delayed events messing up the state stored\n // in SR.\n const sessionId: string | number | undefined = this.config.sessionId;\n if (sessionId && sessionId !== sessionReplay.getSessionId()) {\n await sessionReplay.setSessionId(sessionId).promise;\n }\n\n // Treating config.sessionId as source of truth, if the event's session id doesn't match, the\n // event is not of the current session (offline/late events). In that case, don't tag the events\n if (sessionId && sessionId === event.session_id) {\n const sessionRecordingProperties = sessionReplay.getSessionReplayProperties();\n event.event_properties = {\n ...event.event_properties,\n ...sessionRecordingProperties,\n };\n }\n }\n\n return Promise.resolve(event);\n } catch (error) {\n this.config.loggerProvider.error(`Session Replay: Failed to enrich event due to ${(error as Error).message}`);\n return Promise.resolve(event);\n }\n }\n\n async teardown(): Promise<void> {\n try {\n sessionReplay.shutdown();\n // the following are initialized in setup() which will always be called first\n // here we reset them to null to prevent memory leaks\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n this.config = null;\n } catch (error) {\n this.config.loggerProvider.error(`Session Replay: teardown failed due to ${(error as Error).message}`);\n }\n }\n\n getSessionReplayProperties() {\n return sessionReplay.getSessionReplayProperties();\n }\n}\n\nexport const sessionReplayPlugin: (options?: SessionReplayOptions) => EnrichmentPlugin = (\n options?: SessionReplayOptions,\n) => {\n return new SessionReplayPlugin(options);\n};\n"]}
1
+ {"version":3,"file":"session-replay.js","sourceRoot":"","sources":["../../src/session-replay.ts"],"names":[],"mappings":"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","sourcesContent":["import { BrowserConfig, EnrichmentPlugin, Event } from '@amplitude/analytics-types';\nimport * as sessionReplay from '@amplitude/session-replay-browser';\nimport { SessionReplayOptions } from './typings/session-replay';\nimport { VERSION } from './version';\n\nexport class SessionReplayPlugin implements EnrichmentPlugin {\n name = '@amplitude/plugin-session-replay-browser';\n type = 'enrichment' as const;\n // this.config is defined in setup() which will always be called first\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n config: BrowserConfig;\n options: SessionReplayOptions;\n\n constructor(options?: SessionReplayOptions) {\n this.options = { forceSessionTracking: false, ...options };\n }\n\n async setup(config: BrowserConfig) {\n try {\n /* istanbul ignore next */\n config?.loggerProvider.log(`Installing @amplitude/plugin-session-replay, version ${VERSION}.`);\n\n this.config = config;\n\n if (this.options.forceSessionTracking) {\n if (typeof config.defaultTracking === 'boolean') {\n if (config.defaultTracking === false) {\n config.defaultTracking = {\n pageViews: false,\n formInteractions: false,\n fileDownloads: false,\n sessions: true,\n };\n }\n } else {\n config.defaultTracking = {\n ...config.defaultTracking,\n sessions: true,\n };\n }\n }\n\n await sessionReplay.init(config.apiKey, {\n instanceName: this.config.instanceName,\n deviceId: this.options.deviceId ?? this.config.deviceId,\n optOut: this.config.optOut,\n sessionId: this.options.customSessionId ? undefined : this.config.sessionId,\n loggerProvider: this.config.loggerProvider,\n logLevel: this.config.logLevel,\n flushMaxRetries: this.config.flushMaxRetries,\n serverZone: this.config.serverZone,\n configServerUrl: this.options.configServerUrl,\n trackServerUrl: this.options.trackServerUrl,\n sampleRate: this.options.sampleRate,\n privacyConfig: {\n blockSelector: this.options.privacyConfig?.blockSelector,\n maskSelector: this.options.privacyConfig?.maskSelector,\n unmaskSelector: this.options.privacyConfig?.unmaskSelector,\n defaultMaskLevel: this.options.privacyConfig?.defaultMaskLevel,\n },\n debugMode: this.options.debugMode,\n shouldInlineStylesheet: this.options.shouldInlineStylesheet,\n version: { type: 'plugin', version: VERSION },\n performanceConfig: this.options.performanceConfig,\n storeType: this.options.storeType,\n experimental: this.options.experimental,\n }).promise;\n } catch (error) {\n /* istanbul ignore next */\n config?.loggerProvider.error(`Session Replay: Failed to initialize due to ${(error as Error).message}`);\n }\n }\n\n async execute(event: Event) {\n try {\n if (this.options.customSessionId) {\n const sessionId = this.options.customSessionId(event);\n if (sessionId) {\n // On event, synchronize the session id to the custom session id from the event. This may\n // suffer from offline/delayed events messing up the state stored\n if (sessionId !== sessionReplay.getSessionId()) {\n await sessionReplay.setSessionId(sessionId).promise;\n }\n\n const sessionRecordingProperties = sessionReplay.getSessionReplayProperties();\n event.event_properties = {\n ...event.event_properties,\n ...sessionRecordingProperties,\n };\n }\n } else {\n // On event, synchronize the session id to the what's on the browserConfig (source of truth)\n // Choosing not to read from event object here, concerned about offline/delayed events messing up the state stored\n // in SR.\n const sessionId: string | number | undefined = this.config.sessionId;\n if (sessionId && sessionId !== sessionReplay.getSessionId()) {\n await sessionReplay.setSessionId(sessionId).promise;\n }\n\n // Treating config.sessionId as source of truth, if the event's session id doesn't match, the\n // event is not of the current session (offline/late events). In that case, don't tag the events\n if (sessionId && sessionId === event.session_id) {\n const sessionRecordingProperties = sessionReplay.getSessionReplayProperties();\n event.event_properties = {\n ...event.event_properties,\n ...sessionRecordingProperties,\n };\n }\n }\n\n return Promise.resolve(event);\n } catch (error) {\n /* istanbul ignore next */\n this.config?.loggerProvider.error(`Session Replay: Failed to enrich event due to ${(error as Error).message}`);\n return Promise.resolve(event);\n }\n }\n\n async teardown(): Promise<void> {\n try {\n sessionReplay.shutdown();\n // the following are initialized in setup() which will always be called first\n // here we reset them to null to prevent memory leaks\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n this.config = null;\n } catch (error) {\n /* istanbul ignore next */\n this.config?.loggerProvider.error(`Session Replay: teardown failed due to ${(error as Error).message}`);\n }\n }\n\n getSessionReplayProperties() {\n return sessionReplay.getSessionReplayProperties();\n }\n}\n\nexport const sessionReplayPlugin: (options?: SessionReplayOptions) => EnrichmentPlugin = (\n options?: SessionReplayOptions,\n) => {\n return new SessionReplayPlugin(options);\n};\n"]}
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "1.13.0";
1
+ export declare const VERSION = "1.13.1";
2
2
  //# sourceMappingURL=version.d.ts.map
@@ -1,3 +1,3 @@
1
1
  // Autogenerated by `yarn version-file`. DO NOT EDIT
2
- export var VERSION = '1.13.0';
2
+ export var VERSION = '1.13.1';
3
3
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,oDAAoD;AACpD,MAAM,CAAC,IAAM,OAAO,GAAG,QAAQ,CAAC","sourcesContent":["// Autogenerated by `yarn version-file`. DO NOT EDIT\nexport const VERSION = '1.13.0';\n"]}
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,oDAAoD;AACpD,MAAM,CAAC,IAAM,OAAO,GAAG,QAAQ,CAAC","sourcesContent":["// Autogenerated by `yarn version-file`. DO NOT EDIT\nexport const VERSION = '1.13.1';\n"]}