@spotify-confidence/session-recording 0.18.7 → 0.18.9

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/CHANGELOG.md CHANGED
@@ -1,5 +1,24 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.18.9](https://github.com/spotify/confidence-sdk-js/compare/session-recording-v0.18.8...session-recording-v0.18.9) (2026-08-20)
4
+
5
+
6
+ ### Dependencies
7
+
8
+ * The following workspace dependencies were updated
9
+ * dependencies
10
+ * @spotify-confidence/csr-recorder bumped to 0.17.14
11
+
12
+ ## [0.18.8](https://github.com/spotify/confidence-sdk-js/compare/session-recording-v0.18.7...session-recording-v0.18.8) (2026-08-18)
13
+
14
+
15
+ ### Dependencies
16
+
17
+ * The following workspace dependencies were updated
18
+ * dependencies
19
+ * @spotify-confidence/csr-common bumped to 0.18.7
20
+ * @spotify-confidence/csr-recorder bumped to 0.17.13
21
+
3
22
  ## [0.18.7](https://github.com/spotify/confidence-sdk-js/compare/session-recording-v0.18.6...session-recording-v0.18.7) (2026-08-18)
4
23
 
5
24
 
package/dist/index.cjs CHANGED
@@ -11128,6 +11128,50 @@ const ALL_CONSOLE_LEVELS = [
11128
11128
  "info"
11129
11129
  ];
11130
11130
  /**
11131
+ * rrweb does not include modifier keys in mouse-interaction events. Capture
11132
+ * the native click first, then add its safe, non-text metadata to the rrweb
11133
+ * event emitted during the same browser event dispatch.
11134
+ */
11135
+ function clickModifiersPlugin() {
11136
+ let pendingClick = null;
11137
+ return {
11138
+ name: "csr/click-modifiers@1",
11139
+ options: {},
11140
+ observer: (_callback, win) => {
11141
+ const onClick = (event) => {
11142
+ const click = event;
11143
+ const modifiers = {
11144
+ button: click.button,
11145
+ altKey: click.altKey,
11146
+ ctrlKey: click.ctrlKey,
11147
+ metaKey: click.metaKey,
11148
+ shiftKey: click.shiftKey
11149
+ };
11150
+ pendingClick = modifiers;
11151
+ win.setTimeout(() => {
11152
+ if (pendingClick === modifiers) pendingClick = null;
11153
+ }, 0);
11154
+ };
11155
+ win.addEventListener("click", onClick, true);
11156
+ return () => win.removeEventListener("click", onClick, true);
11157
+ },
11158
+ eventProcessor: (event) => {
11159
+ if (pendingClick && event.type === EventType.IncrementalSnapshot && event.data.source === IncrementalSource.MouseInteraction && event.data.type === MouseInteractions.Click) {
11160
+ const click = pendingClick;
11161
+ pendingClick = null;
11162
+ return {
11163
+ ...event,
11164
+ data: {
11165
+ ...event.data,
11166
+ ...click
11167
+ }
11168
+ };
11169
+ }
11170
+ return event;
11171
+ }
11172
+ };
11173
+ }
11174
+ /**
11131
11175
  * rrweb adapter — bundles rrweb so consumers don't take a peer-dep on it.
11132
11176
  */
11133
11177
  var RrwebEngine = class {
@@ -11135,7 +11179,7 @@ var RrwebEngine = class {
11135
11179
  start(config, onEvent) {
11136
11180
  const maskSelectors = config.maskSelectors ?? DEFAULT_MASK_SELECTORS;
11137
11181
  const blockSelectors = config.blockSelectors ?? DEFAULT_BLOCK_SELECTORS;
11138
- const plugins = [];
11182
+ const plugins = [clickModifiersPlugin()];
11139
11183
  const { captureConsoleLogs } = config;
11140
11184
  if (captureConsoleLogs) {
11141
11185
  const levels = captureConsoleLogs === true ? ALL_CONSOLE_LEVELS : captureConsoleLogs.levels;
@@ -11207,7 +11251,7 @@ function observeFlags(onFlagWrite) {
11207
11251
  }
11208
11252
  //#endregion
11209
11253
  //#region src/version.ts
11210
- const SDK_VERSION = "0.18.7";
11254
+ const SDK_VERSION = "0.18.9";
11211
11255
  //#endregion
11212
11256
  //#region src/index.ts
11213
11257
  const DEFAULT_API_URL = "https://recording.confidence.dev";
package/dist/index.js CHANGED
@@ -11109,6 +11109,50 @@ const ALL_CONSOLE_LEVELS = [
11109
11109
  "info"
11110
11110
  ];
11111
11111
  /**
11112
+ * rrweb does not include modifier keys in mouse-interaction events. Capture
11113
+ * the native click first, then add its safe, non-text metadata to the rrweb
11114
+ * event emitted during the same browser event dispatch.
11115
+ */
11116
+ function clickModifiersPlugin() {
11117
+ let pendingClick = null;
11118
+ return {
11119
+ name: "csr/click-modifiers@1",
11120
+ options: {},
11121
+ observer: (_callback, win) => {
11122
+ const onClick = (event) => {
11123
+ const click = event;
11124
+ const modifiers = {
11125
+ button: click.button,
11126
+ altKey: click.altKey,
11127
+ ctrlKey: click.ctrlKey,
11128
+ metaKey: click.metaKey,
11129
+ shiftKey: click.shiftKey
11130
+ };
11131
+ pendingClick = modifiers;
11132
+ win.setTimeout(() => {
11133
+ if (pendingClick === modifiers) pendingClick = null;
11134
+ }, 0);
11135
+ };
11136
+ win.addEventListener("click", onClick, true);
11137
+ return () => win.removeEventListener("click", onClick, true);
11138
+ },
11139
+ eventProcessor: (event) => {
11140
+ if (pendingClick && event.type === EventType.IncrementalSnapshot && event.data.source === IncrementalSource.MouseInteraction && event.data.type === MouseInteractions.Click) {
11141
+ const click = pendingClick;
11142
+ pendingClick = null;
11143
+ return {
11144
+ ...event,
11145
+ data: {
11146
+ ...event.data,
11147
+ ...click
11148
+ }
11149
+ };
11150
+ }
11151
+ return event;
11152
+ }
11153
+ };
11154
+ }
11155
+ /**
11112
11156
  * rrweb adapter — bundles rrweb so consumers don't take a peer-dep on it.
11113
11157
  */
11114
11158
  var RrwebEngine = class {
@@ -11116,7 +11160,7 @@ var RrwebEngine = class {
11116
11160
  start(config, onEvent) {
11117
11161
  const maskSelectors = config.maskSelectors ?? DEFAULT_MASK_SELECTORS;
11118
11162
  const blockSelectors = config.blockSelectors ?? DEFAULT_BLOCK_SELECTORS;
11119
- const plugins = [];
11163
+ const plugins = [clickModifiersPlugin()];
11120
11164
  const { captureConsoleLogs } = config;
11121
11165
  if (captureConsoleLogs) {
11122
11166
  const levels = captureConsoleLogs === true ? ALL_CONSOLE_LEVELS : captureConsoleLogs.levels;
@@ -11188,7 +11232,7 @@ function observeFlags(onFlagWrite) {
11188
11232
  }
11189
11233
  //#endregion
11190
11234
  //#region src/version.ts
11191
- const SDK_VERSION = "0.18.7";
11235
+ const SDK_VERSION = "0.18.9";
11192
11236
  //#endregion
11193
11237
  //#region src/index.ts
11194
11238
  const DEFAULT_API_URL = "https://recording.confidence.dev";
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@spotify-confidence/session-recording",
3
3
  "license": "Apache-2.0",
4
- "version": "0.18.7",
4
+ "version": "0.18.9",
5
5
  "repository": {
6
6
  "type": "git",
7
7
  "url": "https://github.com/spotify/confidence-sdk-js.git",
@@ -41,8 +41,8 @@
41
41
  }
42
42
  },
43
43
  "dependencies": {
44
- "@spotify-confidence/csr-common": "0.18.6",
45
- "@spotify-confidence/csr-recorder": "0.17.12"
44
+ "@spotify-confidence/csr-common": "0.18.7",
45
+ "@spotify-confidence/csr-recorder": "0.17.14"
46
46
  },
47
47
  "module": "./dist/index.js",
48
48
  "exports": {
package/src/version.ts CHANGED
@@ -1 +1 @@
1
- export const SDK_VERSION = '0.18.7';
1
+ export const SDK_VERSION = '0.18.9';