From 165f9f4bcec961b8006d2f7bcf728385cc19789a Mon Sep 17 00:00:00 2001 From: Catherine Lee <55311782+c298lee@users.noreply.github.com> Date: Wed, 27 Sep 2023 12:13:53 -0400 Subject: [PATCH] Revert "feat(replay): Upgrade to rrweb 2.0 (#8760)" This reverts commit bab184931ca79db305af1c20f4c3b8756fd5a296. --- .size-limit.js | 8 +-- CHANGELOG.md | 21 ------- .../suites/replay/customEvents/test.ts | 2 +- .../suites/replay/fileInput/test.ts | 2 +- .../test.ts-snapshots/seg-1-snap-incremental | 11 ++-- .../seg-1-snap-incremental-chromium | 11 ++-- .../test.ts-snapshots/seg-3-snap-incremental | 11 ++-- .../seg-3-snap-incremental-chromium | 11 ++-- .../test.ts-snapshots/seg-5-snap-incremental | 11 ++-- .../seg-5-snap-incremental-chromium | 11 ++-- .../test.ts-snapshots/seg-6-snap-incremental | 11 ++-- .../seg-6-snap-incremental-chromium | 11 ++-- .../test.ts-snapshots/seg-7-snap-incremental | 11 ++-- .../seg-7-snap-incremental-chromium | 11 ++-- .../test.ts-snapshots/seg-9-snap-incremental | 11 ++-- .../seg-9-snap-incremental-chromium | 11 ++-- .../test.ts-snapshots/privacy-chromium.json | 2 +- .../test.ts-snapshots/privacy-firefox.json | 45 +++++---------- .../test.ts-snapshots/privacy-webkit.json | 2 +- .../test.ts-snapshots/privacy.json | 45 +++++---------- .../test.ts-snapshots/privacy-chromium.json | 2 +- .../test.ts-snapshots/privacy-firefox.json | 57 ++++++++++++++----- .../test.ts-snapshots/privacy-webkit.json | 2 +- .../test.ts-snapshots/privacy.json | 51 ++++++----------- .../suites/replay/privacyInput/test.ts | 2 +- .../suites/replay/privacyInputMaskAll/test.ts | 2 +- .../suites/replay/sessionExpiry/test.ts | 6 +- .../snapshot-2-chromium.json | 44 +++++--------- .../test.ts-snapshots/snapshot-2-webkit.json | 44 +++++--------- .../suites/replay/sessionInactive/test.ts | 6 +- .../snapshot-1-chromium.json | 44 +++++--------- .../test.ts-snapshots/snapshot-1-webkit.json | 44 +++++--------- .../suites/replay/sessionMaxAge/test.ts | 4 +- .../snapshot-2-chromium.json | 44 +++++--------- .../test.ts-snapshots/snapshot-2-webkit.json | 44 +++++--------- packages/replay/package.json | 4 +- packages/replay/src/constants.ts | 3 - packages/replay/src/coreHandlers/handleDom.ts | 43 +++++++------- packages/replay/src/integration.ts | 49 +++++----------- packages/replay/src/types/replay.ts | 7 +-- .../src/util/createPerformanceEntries.ts | 4 +- packages/replay/src/util/getPrivacyOptions.ts | 4 ++ packages/replay/src/util/maskAttribute.ts | 43 -------------- .../coreHandlers/handleScope.test.ts | 3 +- .../replay/test/integration/rrweb.test.ts | 4 +- packages/replay/test/mocks/mockRrweb.ts | 2 - .../test/unit/util/getPrivacyOptions.test.ts | 6 ++ .../test/unit/util/maskAttribute.test.ts | 54 ------------------ yarn.lock | 41 ++++--------- 49 files changed, 323 insertions(+), 599 deletions(-) delete mode 100644 packages/replay/src/util/maskAttribute.ts delete mode 100644 packages/replay/test/unit/util/maskAttribute.test.ts diff --git a/.size-limit.js b/.size-limit.js index be8fa57b4934..71346dc3d48d 100644 --- a/.size-limit.js +++ b/.size-limit.js @@ -5,7 +5,7 @@ module.exports = [ path: 'packages/browser/build/npm/esm/index.js', import: '{ init, Replay, BrowserTracing }', gzip: true, - limit: '90 KB', + limit: '80 KB', }, { name: '@sentry/browser (incl. Tracing) - Webpack (gzipped)', @@ -47,7 +47,7 @@ module.exports = [ name: '@sentry/browser (incl. Tracing, Replay) - ES6 CDN Bundle (minified & uncompressed)', path: 'packages/browser/build/bundles/bundle.tracing.replay.min.js', gzip: false, - limit: '260 KB', + limit: '250 KB', }, { name: '@sentry/browser (incl. Tracing) - ES6 CDN Bundle (minified & uncompressed)', @@ -77,7 +77,7 @@ module.exports = [ path: 'packages/react/build/esm/index.js', import: '{ init, BrowserTracing, Replay }', gzip: true, - limit: '90 KB', + limit: '80 KB', }, { name: '@sentry/react - Webpack (gzipped)', @@ -93,7 +93,7 @@ module.exports = [ path: 'packages/nextjs/build/esm/client/index.js', import: '{ init, BrowserTracing, Replay }', gzip: true, - limit: '110 KB', + limit: '100 KB', }, { name: '@sentry/nextjs Client - Webpack (gzipped)', diff --git a/CHANGELOG.md b/CHANGELOG.md index d21c2df6d110..d2612400a12f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,27 +2,6 @@ ## Unreleased -### Important Changes - -- **feat(replay): Upgrade to rrweb2** - -This is fully backwards compatible with prior versions of the Replay SDK. The only breaking change that we will making is to not be masking `aria-label` by default. The reason for this change is to align with our core SDK which also does not mask `aria-label`. This change also enables better support of searching by clicks. - -Another change that needs to be highlighted is the 13% bundle size increase. This bundle size increase is necessary to bring improved recording performance and improved replay fidelity, especially in regards to web components and iframes. We will be investigating the reduction of the bundle size in [this PR](https://github.com/getsentry/sentry-javascript/issues/8815). - -Here are benchmarks comparing the version 1 of rrweb to version 2 - -| metric | v1 | v2 | -| --------- | ---------- | ---------- | -| lcp | 1486.06 ms | 1529.11 ms | -| cls | 0.40 ms | 0.40 ms | -| fid | 1.53 ms | 1.50 ms | -| tbt | 3207.22 ms | 3036.80 ms | -| memoryAvg | 131.83 MB | 124.84 MB | -| memoryMax | 324.8 MB | 339.03 MB | -| netTx | 282.67 KB | 272.51 KB | -| netRx | 8.02 MB | 8.07 MB | - - "You miss 100 percent of the chances you don't take. — Wayne Gretzky" — Michael Scott ## 7.72.0 diff --git a/packages/browser-integration-tests/suites/replay/customEvents/test.ts b/packages/browser-integration-tests/suites/replay/customEvents/test.ts index c4bcbcc2c792..1966ba2d4e4c 100644 --- a/packages/browser-integration-tests/suites/replay/customEvents/test.ts +++ b/packages/browser-integration-tests/suites/replay/customEvents/test.ts @@ -117,7 +117,7 @@ sentryTest( nodeId: expect.any(Number), node: { attributes: { - 'aria-label': 'An Error in aria-label', + 'aria-label': '** ***** ** **********', class: 'btn btn-error', id: 'error', role: 'button', diff --git a/packages/browser-integration-tests/suites/replay/fileInput/test.ts b/packages/browser-integration-tests/suites/replay/fileInput/test.ts index be8db2893a4f..e0827538ba56 100644 --- a/packages/browser-integration-tests/suites/replay/fileInput/test.ts +++ b/packages/browser-integration-tests/suites/replay/fileInput/test.ts @@ -1,6 +1,6 @@ import { expect } from '@playwright/test'; -import type { inputData } from '@sentry-internal/rrweb'; import { IncrementalSource } from '@sentry-internal/rrweb'; +import type { inputData } from '@sentry-internal/rrweb/typings/types'; import { sentryTest } from '../../../utils/fixtures'; import type { IncrementalRecordingSnapshot } from '../../../utils/replayHelpers'; diff --git a/packages/browser-integration-tests/suites/replay/multiple-pages/test.ts-snapshots/seg-1-snap-incremental b/packages/browser-integration-tests/suites/replay/multiple-pages/test.ts-snapshots/seg-1-snap-incremental index 02a3e3f893d6..f612eadc8f80 100644 --- a/packages/browser-integration-tests/suites/replay/multiple-pages/test.ts-snapshots/seg-1-snap-incremental +++ b/packages/browser-integration-tests/suites/replay/multiple-pages/test.ts-snapshots/seg-1-snap-incremental @@ -5,8 +5,8 @@ "source": 2, "type": 1, "id": 9, - "x": 41.810001373291016, - "y": 18.479999542236328 + "x": 41, + "y": 18 }, "timestamp": [timestamp] }, @@ -25,8 +25,8 @@ "source": 2, "type": 0, "id": 9, - "x": 41.810001373291016, - "y": 18.479999542236328 + "x": 41, + "y": 18 }, "timestamp": [timestamp] }, @@ -37,8 +37,7 @@ "type": 2, "id": 9, "x": 41, - "y": 18, - "pointerType": 0 + "y": 18 }, "timestamp": [timestamp] } diff --git a/packages/browser-integration-tests/suites/replay/multiple-pages/test.ts-snapshots/seg-1-snap-incremental-chromium b/packages/browser-integration-tests/suites/replay/multiple-pages/test.ts-snapshots/seg-1-snap-incremental-chromium index 02a3e3f893d6..f612eadc8f80 100644 --- a/packages/browser-integration-tests/suites/replay/multiple-pages/test.ts-snapshots/seg-1-snap-incremental-chromium +++ b/packages/browser-integration-tests/suites/replay/multiple-pages/test.ts-snapshots/seg-1-snap-incremental-chromium @@ -5,8 +5,8 @@ "source": 2, "type": 1, "id": 9, - "x": 41.810001373291016, - "y": 18.479999542236328 + "x": 41, + "y": 18 }, "timestamp": [timestamp] }, @@ -25,8 +25,8 @@ "source": 2, "type": 0, "id": 9, - "x": 41.810001373291016, - "y": 18.479999542236328 + "x": 41, + "y": 18 }, "timestamp": [timestamp] }, @@ -37,8 +37,7 @@ "type": 2, "id": 9, "x": 41, - "y": 18, - "pointerType": 0 + "y": 18 }, "timestamp": [timestamp] } diff --git a/packages/browser-integration-tests/suites/replay/multiple-pages/test.ts-snapshots/seg-3-snap-incremental b/packages/browser-integration-tests/suites/replay/multiple-pages/test.ts-snapshots/seg-3-snap-incremental index 02a3e3f893d6..f612eadc8f80 100644 --- a/packages/browser-integration-tests/suites/replay/multiple-pages/test.ts-snapshots/seg-3-snap-incremental +++ b/packages/browser-integration-tests/suites/replay/multiple-pages/test.ts-snapshots/seg-3-snap-incremental @@ -5,8 +5,8 @@ "source": 2, "type": 1, "id": 9, - "x": 41.810001373291016, - "y": 18.479999542236328 + "x": 41, + "y": 18 }, "timestamp": [timestamp] }, @@ -25,8 +25,8 @@ "source": 2, "type": 0, "id": 9, - "x": 41.810001373291016, - "y": 18.479999542236328 + "x": 41, + "y": 18 }, "timestamp": [timestamp] }, @@ -37,8 +37,7 @@ "type": 2, "id": 9, "x": 41, - "y": 18, - "pointerType": 0 + "y": 18 }, "timestamp": [timestamp] } diff --git a/packages/browser-integration-tests/suites/replay/multiple-pages/test.ts-snapshots/seg-3-snap-incremental-chromium b/packages/browser-integration-tests/suites/replay/multiple-pages/test.ts-snapshots/seg-3-snap-incremental-chromium index 02a3e3f893d6..f612eadc8f80 100644 --- a/packages/browser-integration-tests/suites/replay/multiple-pages/test.ts-snapshots/seg-3-snap-incremental-chromium +++ b/packages/browser-integration-tests/suites/replay/multiple-pages/test.ts-snapshots/seg-3-snap-incremental-chromium @@ -5,8 +5,8 @@ "source": 2, "type": 1, "id": 9, - "x": 41.810001373291016, - "y": 18.479999542236328 + "x": 41, + "y": 18 }, "timestamp": [timestamp] }, @@ -25,8 +25,8 @@ "source": 2, "type": 0, "id": 9, - "x": 41.810001373291016, - "y": 18.479999542236328 + "x": 41, + "y": 18 }, "timestamp": [timestamp] }, @@ -37,8 +37,7 @@ "type": 2, "id": 9, "x": 41, - "y": 18, - "pointerType": 0 + "y": 18 }, "timestamp": [timestamp] } diff --git a/packages/browser-integration-tests/suites/replay/multiple-pages/test.ts-snapshots/seg-5-snap-incremental b/packages/browser-integration-tests/suites/replay/multiple-pages/test.ts-snapshots/seg-5-snap-incremental index 6dd84be3e2dc..13c75c43bf61 100644 --- a/packages/browser-integration-tests/suites/replay/multiple-pages/test.ts-snapshots/seg-5-snap-incremental +++ b/packages/browser-integration-tests/suites/replay/multiple-pages/test.ts-snapshots/seg-5-snap-incremental @@ -5,8 +5,8 @@ "source": 2, "type": 1, "id": 12, - "x": 41.810001373291016, - "y": 90.37000274658203 + "x": 41, + "y": 90 }, "timestamp": [timestamp] }, @@ -25,8 +25,8 @@ "source": 2, "type": 0, "id": 12, - "x": 41.810001373291016, - "y": 90.37000274658203 + "x": 41, + "y": 90 }, "timestamp": [timestamp] }, @@ -37,8 +37,7 @@ "type": 2, "id": 12, "x": 41, - "y": 90, - "pointerType": 0 + "y": 90 }, "timestamp": [timestamp] } diff --git a/packages/browser-integration-tests/suites/replay/multiple-pages/test.ts-snapshots/seg-5-snap-incremental-chromium b/packages/browser-integration-tests/suites/replay/multiple-pages/test.ts-snapshots/seg-5-snap-incremental-chromium index 6dd84be3e2dc..13c75c43bf61 100644 --- a/packages/browser-integration-tests/suites/replay/multiple-pages/test.ts-snapshots/seg-5-snap-incremental-chromium +++ b/packages/browser-integration-tests/suites/replay/multiple-pages/test.ts-snapshots/seg-5-snap-incremental-chromium @@ -5,8 +5,8 @@ "source": 2, "type": 1, "id": 12, - "x": 41.810001373291016, - "y": 90.37000274658203 + "x": 41, + "y": 90 }, "timestamp": [timestamp] }, @@ -25,8 +25,8 @@ "source": 2, "type": 0, "id": 12, - "x": 41.810001373291016, - "y": 90.37000274658203 + "x": 41, + "y": 90 }, "timestamp": [timestamp] }, @@ -37,8 +37,7 @@ "type": 2, "id": 12, "x": 41, - "y": 90, - "pointerType": 0 + "y": 90 }, "timestamp": [timestamp] } diff --git a/packages/browser-integration-tests/suites/replay/multiple-pages/test.ts-snapshots/seg-6-snap-incremental b/packages/browser-integration-tests/suites/replay/multiple-pages/test.ts-snapshots/seg-6-snap-incremental index 575f1210087b..c7be8ab3861a 100644 --- a/packages/browser-integration-tests/suites/replay/multiple-pages/test.ts-snapshots/seg-6-snap-incremental +++ b/packages/browser-integration-tests/suites/replay/multiple-pages/test.ts-snapshots/seg-6-snap-incremental @@ -5,8 +5,8 @@ "source": 2, "type": 1, "id": 15, - "x": 157.13999938964844, - "y": 90.37000274658203 + "x": 157, + "y": 90 }, "timestamp": [timestamp] }, @@ -34,8 +34,8 @@ "source": 2, "type": 0, "id": 15, - "x": 157.13999938964844, - "y": 90.37000274658203 + "x": 157, + "y": 90 }, "timestamp": [timestamp] }, @@ -46,8 +46,7 @@ "type": 2, "id": 15, "x": 157, - "y": 90, - "pointerType": 0 + "y": 90 }, "timestamp": [timestamp] } diff --git a/packages/browser-integration-tests/suites/replay/multiple-pages/test.ts-snapshots/seg-6-snap-incremental-chromium b/packages/browser-integration-tests/suites/replay/multiple-pages/test.ts-snapshots/seg-6-snap-incremental-chromium index 575f1210087b..c7be8ab3861a 100644 --- a/packages/browser-integration-tests/suites/replay/multiple-pages/test.ts-snapshots/seg-6-snap-incremental-chromium +++ b/packages/browser-integration-tests/suites/replay/multiple-pages/test.ts-snapshots/seg-6-snap-incremental-chromium @@ -5,8 +5,8 @@ "source": 2, "type": 1, "id": 15, - "x": 157.13999938964844, - "y": 90.37000274658203 + "x": 157, + "y": 90 }, "timestamp": [timestamp] }, @@ -34,8 +34,8 @@ "source": 2, "type": 0, "id": 15, - "x": 157.13999938964844, - "y": 90.37000274658203 + "x": 157, + "y": 90 }, "timestamp": [timestamp] }, @@ -46,8 +46,7 @@ "type": 2, "id": 15, "x": 157, - "y": 90, - "pointerType": 0 + "y": 90 }, "timestamp": [timestamp] } diff --git a/packages/browser-integration-tests/suites/replay/multiple-pages/test.ts-snapshots/seg-7-snap-incremental b/packages/browser-integration-tests/suites/replay/multiple-pages/test.ts-snapshots/seg-7-snap-incremental index f952a6e3bfaa..5b461c8cb66c 100644 --- a/packages/browser-integration-tests/suites/replay/multiple-pages/test.ts-snapshots/seg-7-snap-incremental +++ b/packages/browser-integration-tests/suites/replay/multiple-pages/test.ts-snapshots/seg-7-snap-incremental @@ -5,8 +5,8 @@ "source": 2, "type": 1, "id": 12, - "x": 41.810001373291016, - "y": 90.37000274658203 + "x": 41, + "y": 90 }, "timestamp": [timestamp] }, @@ -34,8 +34,8 @@ "source": 2, "type": 0, "id": 12, - "x": 41.810001373291016, - "y": 90.37000274658203 + "x": 41, + "y": 90 }, "timestamp": [timestamp] }, @@ -46,8 +46,7 @@ "type": 2, "id": 12, "x": 41, - "y": 90, - "pointerType": 0 + "y": 90 }, "timestamp": [timestamp] } diff --git a/packages/browser-integration-tests/suites/replay/multiple-pages/test.ts-snapshots/seg-7-snap-incremental-chromium b/packages/browser-integration-tests/suites/replay/multiple-pages/test.ts-snapshots/seg-7-snap-incremental-chromium index f952a6e3bfaa..5b461c8cb66c 100644 --- a/packages/browser-integration-tests/suites/replay/multiple-pages/test.ts-snapshots/seg-7-snap-incremental-chromium +++ b/packages/browser-integration-tests/suites/replay/multiple-pages/test.ts-snapshots/seg-7-snap-incremental-chromium @@ -5,8 +5,8 @@ "source": 2, "type": 1, "id": 12, - "x": 41.810001373291016, - "y": 90.37000274658203 + "x": 41, + "y": 90 }, "timestamp": [timestamp] }, @@ -34,8 +34,8 @@ "source": 2, "type": 0, "id": 12, - "x": 41.810001373291016, - "y": 90.37000274658203 + "x": 41, + "y": 90 }, "timestamp": [timestamp] }, @@ -46,8 +46,7 @@ "type": 2, "id": 12, "x": 41, - "y": 90, - "pointerType": 0 + "y": 90 }, "timestamp": [timestamp] } diff --git a/packages/browser-integration-tests/suites/replay/multiple-pages/test.ts-snapshots/seg-9-snap-incremental b/packages/browser-integration-tests/suites/replay/multiple-pages/test.ts-snapshots/seg-9-snap-incremental index 02a3e3f893d6..f612eadc8f80 100644 --- a/packages/browser-integration-tests/suites/replay/multiple-pages/test.ts-snapshots/seg-9-snap-incremental +++ b/packages/browser-integration-tests/suites/replay/multiple-pages/test.ts-snapshots/seg-9-snap-incremental @@ -5,8 +5,8 @@ "source": 2, "type": 1, "id": 9, - "x": 41.810001373291016, - "y": 18.479999542236328 + "x": 41, + "y": 18 }, "timestamp": [timestamp] }, @@ -25,8 +25,8 @@ "source": 2, "type": 0, "id": 9, - "x": 41.810001373291016, - "y": 18.479999542236328 + "x": 41, + "y": 18 }, "timestamp": [timestamp] }, @@ -37,8 +37,7 @@ "type": 2, "id": 9, "x": 41, - "y": 18, - "pointerType": 0 + "y": 18 }, "timestamp": [timestamp] } diff --git a/packages/browser-integration-tests/suites/replay/multiple-pages/test.ts-snapshots/seg-9-snap-incremental-chromium b/packages/browser-integration-tests/suites/replay/multiple-pages/test.ts-snapshots/seg-9-snap-incremental-chromium index 02a3e3f893d6..f612eadc8f80 100644 --- a/packages/browser-integration-tests/suites/replay/multiple-pages/test.ts-snapshots/seg-9-snap-incremental-chromium +++ b/packages/browser-integration-tests/suites/replay/multiple-pages/test.ts-snapshots/seg-9-snap-incremental-chromium @@ -5,8 +5,8 @@ "source": 2, "type": 1, "id": 9, - "x": 41.810001373291016, - "y": 18.479999542236328 + "x": 41, + "y": 18 }, "timestamp": [timestamp] }, @@ -25,8 +25,8 @@ "source": 2, "type": 0, "id": 9, - "x": 41.810001373291016, - "y": 18.479999542236328 + "x": 41, + "y": 18 }, "timestamp": [timestamp] }, @@ -37,8 +37,7 @@ "type": 2, "id": 9, "x": 41, - "y": 18, - "pointerType": 0 + "y": 18 }, "timestamp": [timestamp] } diff --git a/packages/browser-integration-tests/suites/replay/privacyBlock/test.ts-snapshots/privacy-chromium.json b/packages/browser-integration-tests/suites/replay/privacyBlock/test.ts-snapshots/privacy-chromium.json index a3c9c494b0b5..4ac06ffeb444 100644 --- a/packages/browser-integration-tests/suites/replay/privacyBlock/test.ts-snapshots/privacy-chromium.json +++ b/packages/browser-integration-tests/suites/replay/privacyBlock/test.ts-snapshots/privacy-chromium.json @@ -62,7 +62,7 @@ "type": 2, "tagName": "button", "attributes": { - "aria-label": "Click me", + "aria-label": "***** **", "onclick": "console.log('Test log')" }, "childNodes": [ diff --git a/packages/browser-integration-tests/suites/replay/privacyBlock/test.ts-snapshots/privacy-firefox.json b/packages/browser-integration-tests/suites/replay/privacyBlock/test.ts-snapshots/privacy-firefox.json index a3c9c494b0b5..9ca91c2dc5da 100644 --- a/packages/browser-integration-tests/suites/replay/privacyBlock/test.ts-snapshots/privacy-firefox.json +++ b/packages/browser-integration-tests/suites/replay/privacyBlock/test.ts-snapshots/privacy-firefox.json @@ -62,7 +62,7 @@ "type": 2, "tagName": "button", "attributes": { - "aria-label": "Click me", + "aria-label": "***** **", "onclick": "console.log('Test log')" }, "childNodes": [ @@ -194,21 +194,6 @@ "textContent": "\n ", "id": 28 }, - { - "type": 2, - "tagName": "div", - "attributes": { - "rr_width": "[1250-1300]px", - "rr_height": "[0-50]px" - }, - "childNodes": [], - "id": 29 - }, - { - "type": 3, - "textContent": "\n ", - "id": 30 - }, { "type": 2, "tagName": "svg", @@ -226,7 +211,7 @@ }, "childNodes": [], "isSVG": true, - "id": 32 + "id": 30 }, { "type": 2, @@ -234,7 +219,7 @@ "attributes": {}, "childNodes": [], "isSVG": true, - "id": 33 + "id": 31 }, { "type": 2, @@ -242,16 +227,16 @@ "attributes": {}, "childNodes": [], "isSVG": true, - "id": 34 + "id": 32 } ], "isSVG": true, - "id": 31 + "id": 29 }, { "type": 3, "textContent": "\n ", - "id": 35 + "id": 33 }, { "type": 2, @@ -261,12 +246,12 @@ "src": "file:///none.png" }, "childNodes": [], - "id": 36 + "id": 34 }, { "type": 3, "textContent": "\n ", - "id": 37 + "id": 35 }, { "type": 2, @@ -277,12 +262,12 @@ "src": "file:///none.png" }, "childNodes": [], - "id": 38 + "id": 36 }, { "type": 3, "textContent": "\n ", - "id": 39 + "id": 37 }, { "type": 2, @@ -292,12 +277,12 @@ "rr_height": "[0-50]px" }, "childNodes": [], - "id": 40 + "id": 38 }, { "type": 3, "textContent": "\n ", - "id": 41 + "id": 39 }, { "type": 2, @@ -308,17 +293,17 @@ "rr_height": "[0-50]px" }, "childNodes": [], - "id": 42 + "id": 40 }, { "type": 3, "textContent": "\n ", - "id": 43 + "id": 41 }, { "type": 3, "textContent": "\n\n", - "id": 44 + "id": 42 } ], "id": 8 diff --git a/packages/browser-integration-tests/suites/replay/privacyBlock/test.ts-snapshots/privacy-webkit.json b/packages/browser-integration-tests/suites/replay/privacyBlock/test.ts-snapshots/privacy-webkit.json index a3c9c494b0b5..4ac06ffeb444 100644 --- a/packages/browser-integration-tests/suites/replay/privacyBlock/test.ts-snapshots/privacy-webkit.json +++ b/packages/browser-integration-tests/suites/replay/privacyBlock/test.ts-snapshots/privacy-webkit.json @@ -62,7 +62,7 @@ "type": 2, "tagName": "button", "attributes": { - "aria-label": "Click me", + "aria-label": "***** **", "onclick": "console.log('Test log')" }, "childNodes": [ diff --git a/packages/browser-integration-tests/suites/replay/privacyBlock/test.ts-snapshots/privacy.json b/packages/browser-integration-tests/suites/replay/privacyBlock/test.ts-snapshots/privacy.json index a3c9c494b0b5..9ca91c2dc5da 100644 --- a/packages/browser-integration-tests/suites/replay/privacyBlock/test.ts-snapshots/privacy.json +++ b/packages/browser-integration-tests/suites/replay/privacyBlock/test.ts-snapshots/privacy.json @@ -62,7 +62,7 @@ "type": 2, "tagName": "button", "attributes": { - "aria-label": "Click me", + "aria-label": "***** **", "onclick": "console.log('Test log')" }, "childNodes": [ @@ -194,21 +194,6 @@ "textContent": "\n ", "id": 28 }, - { - "type": 2, - "tagName": "div", - "attributes": { - "rr_width": "[1250-1300]px", - "rr_height": "[0-50]px" - }, - "childNodes": [], - "id": 29 - }, - { - "type": 3, - "textContent": "\n ", - "id": 30 - }, { "type": 2, "tagName": "svg", @@ -226,7 +211,7 @@ }, "childNodes": [], "isSVG": true, - "id": 32 + "id": 30 }, { "type": 2, @@ -234,7 +219,7 @@ "attributes": {}, "childNodes": [], "isSVG": true, - "id": 33 + "id": 31 }, { "type": 2, @@ -242,16 +227,16 @@ "attributes": {}, "childNodes": [], "isSVG": true, - "id": 34 + "id": 32 } ], "isSVG": true, - "id": 31 + "id": 29 }, { "type": 3, "textContent": "\n ", - "id": 35 + "id": 33 }, { "type": 2, @@ -261,12 +246,12 @@ "src": "file:///none.png" }, "childNodes": [], - "id": 36 + "id": 34 }, { "type": 3, "textContent": "\n ", - "id": 37 + "id": 35 }, { "type": 2, @@ -277,12 +262,12 @@ "src": "file:///none.png" }, "childNodes": [], - "id": 38 + "id": 36 }, { "type": 3, "textContent": "\n ", - "id": 39 + "id": 37 }, { "type": 2, @@ -292,12 +277,12 @@ "rr_height": "[0-50]px" }, "childNodes": [], - "id": 40 + "id": 38 }, { "type": 3, "textContent": "\n ", - "id": 41 + "id": 39 }, { "type": 2, @@ -308,17 +293,17 @@ "rr_height": "[0-50]px" }, "childNodes": [], - "id": 42 + "id": 40 }, { "type": 3, "textContent": "\n ", - "id": 43 + "id": 41 }, { "type": 3, "textContent": "\n\n", - "id": 44 + "id": 42 } ], "id": 8 diff --git a/packages/browser-integration-tests/suites/replay/privacyDefault/test.ts-snapshots/privacy-chromium.json b/packages/browser-integration-tests/suites/replay/privacyDefault/test.ts-snapshots/privacy-chromium.json index 69f74ba00da8..6bf1ea7659d3 100644 --- a/packages/browser-integration-tests/suites/replay/privacyDefault/test.ts-snapshots/privacy-chromium.json +++ b/packages/browser-integration-tests/suites/replay/privacyDefault/test.ts-snapshots/privacy-chromium.json @@ -62,7 +62,7 @@ "type": 2, "tagName": "button", "attributes": { - "aria-label": "Click me", + "aria-label": "***** **", "onclick": "console.log('Test log')" }, "childNodes": [ diff --git a/packages/browser-integration-tests/suites/replay/privacyDefault/test.ts-snapshots/privacy-firefox.json b/packages/browser-integration-tests/suites/replay/privacyDefault/test.ts-snapshots/privacy-firefox.json index 4f20b93e13ab..f1b55c0884ef 100644 --- a/packages/browser-integration-tests/suites/replay/privacyDefault/test.ts-snapshots/privacy-firefox.json +++ b/packages/browser-integration-tests/suites/replay/privacyDefault/test.ts-snapshots/privacy-firefox.json @@ -62,7 +62,7 @@ "type": 2, "tagName": "button", "attributes": { - "aria-label": "Click me", + "aria-label": "***** **", "onclick": "console.log('Test log')" }, "childNodes": [ @@ -171,17 +171,45 @@ "type": 2, "tagName": "svg", "attributes": { - "rr_width": "[200-250]px", - "rr_height": "[200-250]px" + "style": "width:200px;height:200px", + "viewBox": "0 0 80 80", + "data-sentry-unblock": "" }, - "childNodes": [], + "childNodes": [ + { + "type": 2, + "tagName": "path", + "attributes": { + "d": "" + }, + "childNodes": [], + "isSVG": true, + "id": 27 + }, + { + "type": 2, + "tagName": "area", + "attributes": {}, + "childNodes": [], + "isSVG": true, + "id": 28 + }, + { + "type": 2, + "tagName": "rect", + "attributes": {}, + "childNodes": [], + "isSVG": true, + "id": 29 + } + ], "isSVG": true, "id": 26 }, { "type": 3, "textContent": "\n ", - "id": 27 + "id": 30 }, { "type": 2, @@ -191,27 +219,28 @@ "rr_height": "[100-150]px" }, "childNodes": [], - "id": 28 + "id": 31 }, { "type": 3, "textContent": "\n ", - "id": 29 + "id": 32 }, { "type": 2, "tagName": "img", "attributes": { - "rr_width": "[100-150]px", - "rr_height": "[100-150]px" + "data-sentry-unblock": "", + "style": "width:100px;height:100px", + "src": "file:///none.png" }, "childNodes": [], - "id": 30 + "id": 33 }, { "type": 3, "textContent": "\n ", - "id": 31 + "id": 34 }, { "type": 2, @@ -221,17 +250,17 @@ "rr_height": "[0-50]px" }, "childNodes": [], - "id": 32 + "id": 35 }, { "type": 3, "textContent": "\n ", - "id": 33 + "id": 36 }, { "type": 3, "textContent": "\n\n", - "id": 34 + "id": 37 } ], "id": 8 diff --git a/packages/browser-integration-tests/suites/replay/privacyDefault/test.ts-snapshots/privacy-webkit.json b/packages/browser-integration-tests/suites/replay/privacyDefault/test.ts-snapshots/privacy-webkit.json index 69f74ba00da8..6bf1ea7659d3 100644 --- a/packages/browser-integration-tests/suites/replay/privacyDefault/test.ts-snapshots/privacy-webkit.json +++ b/packages/browser-integration-tests/suites/replay/privacyDefault/test.ts-snapshots/privacy-webkit.json @@ -62,7 +62,7 @@ "type": 2, "tagName": "button", "attributes": { - "aria-label": "Click me", + "aria-label": "***** **", "onclick": "console.log('Test log')" }, "childNodes": [ diff --git a/packages/browser-integration-tests/suites/replay/privacyDefault/test.ts-snapshots/privacy.json b/packages/browser-integration-tests/suites/replay/privacyDefault/test.ts-snapshots/privacy.json index 69f74ba00da8..f1b55c0884ef 100644 --- a/packages/browser-integration-tests/suites/replay/privacyDefault/test.ts-snapshots/privacy.json +++ b/packages/browser-integration-tests/suites/replay/privacyDefault/test.ts-snapshots/privacy.json @@ -62,7 +62,7 @@ "type": 2, "tagName": "button", "attributes": { - "aria-label": "Click me", + "aria-label": "***** **", "onclick": "console.log('Test log')" }, "childNodes": [ @@ -131,21 +131,6 @@ "textContent": "\n ", "id": 20 }, - { - "type": 2, - "tagName": "input", - "attributes": { - "data-sentry-unmask": "", - "placeholder": "Placeholder can be unmasked" - }, - "childNodes": [], - "id": 21 - }, - { - "type": 3, - "textContent": "\n ", - "id": 22 - }, { "type": 2, "tagName": "div", @@ -156,15 +141,15 @@ { "type": 3, "textContent": "***** ****** ** ******", - "id": 24 + "id": 22 } ], - "id": 23 + "id": 21 }, { "type": 3, "textContent": "\n ", - "id": 25 + "id": 23 }, { "type": 2, @@ -175,12 +160,12 @@ }, "childNodes": [], "isSVG": true, - "id": 26 + "id": 24 }, { "type": 3, "textContent": "\n ", - "id": 27 + "id": 25 }, { "type": 2, @@ -199,7 +184,7 @@ }, "childNodes": [], "isSVG": true, - "id": 29 + "id": 27 }, { "type": 2, @@ -207,7 +192,7 @@ "attributes": {}, "childNodes": [], "isSVG": true, - "id": 30 + "id": 28 }, { "type": 2, @@ -215,16 +200,16 @@ "attributes": {}, "childNodes": [], "isSVG": true, - "id": 31 + "id": 29 } ], "isSVG": true, - "id": 28 + "id": 26 }, { "type": 3, "textContent": "\n ", - "id": 32 + "id": 30 }, { "type": 2, @@ -234,12 +219,12 @@ "rr_height": "[100-150]px" }, "childNodes": [], - "id": 33 + "id": 31 }, { "type": 3, "textContent": "\n ", - "id": 34 + "id": 32 }, { "type": 2, @@ -250,12 +235,12 @@ "src": "file:///none.png" }, "childNodes": [], - "id": 35 + "id": 33 }, { "type": 3, "textContent": "\n ", - "id": 36 + "id": 34 }, { "type": 2, @@ -265,17 +250,17 @@ "rr_height": "[0-50]px" }, "childNodes": [], - "id": 37 + "id": 35 }, { "type": 3, "textContent": "\n ", - "id": 38 + "id": 36 }, { "type": 3, "textContent": "\n\n", - "id": 39 + "id": 37 } ], "id": 8 diff --git a/packages/browser-integration-tests/suites/replay/privacyInput/test.ts b/packages/browser-integration-tests/suites/replay/privacyInput/test.ts index 3b76e5622225..3ffc628c133d 100644 --- a/packages/browser-integration-tests/suites/replay/privacyInput/test.ts +++ b/packages/browser-integration-tests/suites/replay/privacyInput/test.ts @@ -1,6 +1,6 @@ import { expect } from '@playwright/test'; -import type { inputData } from '@sentry-internal/rrweb'; import { IncrementalSource } from '@sentry-internal/rrweb'; +import type { inputData } from '@sentry-internal/rrweb/typings/types'; import { sentryTest } from '../../../utils/fixtures'; import type { IncrementalRecordingSnapshot } from '../../../utils/replayHelpers'; diff --git a/packages/browser-integration-tests/suites/replay/privacyInputMaskAll/test.ts b/packages/browser-integration-tests/suites/replay/privacyInputMaskAll/test.ts index e98839f7fa37..4ec89c97a2cb 100644 --- a/packages/browser-integration-tests/suites/replay/privacyInputMaskAll/test.ts +++ b/packages/browser-integration-tests/suites/replay/privacyInputMaskAll/test.ts @@ -1,6 +1,6 @@ import { expect } from '@playwright/test'; -import type { inputData } from '@sentry-internal/rrweb'; import { IncrementalSource } from '@sentry-internal/rrweb'; +import type { inputData } from '@sentry-internal/rrweb/typings/types'; import { sentryTest } from '../../../utils/fixtures'; import type { IncrementalRecordingSnapshot } from '../../../utils/replayHelpers'; diff --git a/packages/browser-integration-tests/suites/replay/sessionExpiry/test.ts b/packages/browser-integration-tests/suites/replay/sessionExpiry/test.ts index 3b78c859b8ae..f1765b2a3c22 100644 --- a/packages/browser-integration-tests/suites/replay/sessionExpiry/test.ts +++ b/packages/browser-integration-tests/suites/replay/sessionExpiry/test.ts @@ -14,8 +14,8 @@ import { // Session should expire after 2s - keep in sync with init.js const SESSION_TIMEOUT = 2000; -sentryTest('handles an expired session', async ({ browserName, forceFlushReplay, getLocalTestPath, page }) => { - if (shouldSkipReplayTest() || browserName === 'webkit') { +sentryTest('handles an expired session', async ({ getLocalTestPath, page }) => { + if (shouldSkipReplayTest()) { sentryTest.skip(); } @@ -47,7 +47,6 @@ sentryTest('handles an expired session', async ({ browserName, forceFlushReplay, const reqPromise2 = waitForReplayRequest(page, 0); await page.click('#button1'); - await forceFlushReplay(); const req1 = await reqPromise1; const replayEvent1 = getReplayEvent(req1); @@ -59,7 +58,6 @@ sentryTest('handles an expired session', async ({ browserName, forceFlushReplay, await new Promise(resolve => setTimeout(resolve, SESSION_TIMEOUT)); await page.click('#button2'); - await forceFlushReplay(); const req2 = await reqPromise2; const replay2 = await getReplaySnapshot(page); diff --git a/packages/browser-integration-tests/suites/replay/sessionExpiry/test.ts-snapshots/snapshot-2-chromium.json b/packages/browser-integration-tests/suites/replay/sessionExpiry/test.ts-snapshots/snapshot-2-chromium.json index 13e5b1b70103..d510b410a343 100644 --- a/packages/browser-integration-tests/suites/replay/sessionExpiry/test.ts-snapshots/snapshot-2-chromium.json +++ b/packages/browser-integration-tests/suites/replay/sessionExpiry/test.ts-snapshots/snapshot-2-chromium.json @@ -9,8 +9,7 @@ "name": "html", "publicId": "", "systemId": "", - "rootId": 16, - "id": 17 + "id": 2 }, { "type": 2, @@ -29,18 +28,15 @@ "charset": "utf-8" }, "childNodes": [], - "rootId": 16, - "id": 20 + "id": 5 } ], - "rootId": 16, - "id": 19 + "id": 4 }, { "type": 3, "textContent": "\n ", - "rootId": 16, - "id": 21 + "id": 6 }, { "type": 2, @@ -50,8 +46,7 @@ { "type": 3, "textContent": "\n ", - "rootId": 16, - "id": 23 + "id": 8 }, { "type": 2, @@ -64,18 +59,15 @@ { "type": 3, "textContent": "***** **", - "rootId": 16, - "id": 25 + "id": 10 } ], - "rootId": 16, - "id": 24 + "id": 9 }, { "type": 3, "textContent": "\n ", - "rootId": 16, - "id": 26 + "id": 11 }, { "type": 2, @@ -88,35 +80,29 @@ { "type": 3, "textContent": "***** **", - "rootId": 16, - "id": 28 + "id": 13 } ], - "rootId": 16, - "id": 27 + "id": 12 }, { "type": 3, "textContent": "\n ", - "rootId": 16, - "id": 29 + "id": 14 }, { "type": 3, "textContent": "\n\n", - "rootId": 16, - "id": 30 + "id": 15 } ], - "rootId": 16, - "id": 22 + "id": 7 } ], - "rootId": 16, - "id": 18 + "id": 3 } ], - "id": 16 + "id": 1 }, "initialOffset": { "left": 0, diff --git a/packages/browser-integration-tests/suites/replay/sessionExpiry/test.ts-snapshots/snapshot-2-webkit.json b/packages/browser-integration-tests/suites/replay/sessionExpiry/test.ts-snapshots/snapshot-2-webkit.json index 13e5b1b70103..d510b410a343 100644 --- a/packages/browser-integration-tests/suites/replay/sessionExpiry/test.ts-snapshots/snapshot-2-webkit.json +++ b/packages/browser-integration-tests/suites/replay/sessionExpiry/test.ts-snapshots/snapshot-2-webkit.json @@ -9,8 +9,7 @@ "name": "html", "publicId": "", "systemId": "", - "rootId": 16, - "id": 17 + "id": 2 }, { "type": 2, @@ -29,18 +28,15 @@ "charset": "utf-8" }, "childNodes": [], - "rootId": 16, - "id": 20 + "id": 5 } ], - "rootId": 16, - "id": 19 + "id": 4 }, { "type": 3, "textContent": "\n ", - "rootId": 16, - "id": 21 + "id": 6 }, { "type": 2, @@ -50,8 +46,7 @@ { "type": 3, "textContent": "\n ", - "rootId": 16, - "id": 23 + "id": 8 }, { "type": 2, @@ -64,18 +59,15 @@ { "type": 3, "textContent": "***** **", - "rootId": 16, - "id": 25 + "id": 10 } ], - "rootId": 16, - "id": 24 + "id": 9 }, { "type": 3, "textContent": "\n ", - "rootId": 16, - "id": 26 + "id": 11 }, { "type": 2, @@ -88,35 +80,29 @@ { "type": 3, "textContent": "***** **", - "rootId": 16, - "id": 28 + "id": 13 } ], - "rootId": 16, - "id": 27 + "id": 12 }, { "type": 3, "textContent": "\n ", - "rootId": 16, - "id": 29 + "id": 14 }, { "type": 3, "textContent": "\n\n", - "rootId": 16, - "id": 30 + "id": 15 } ], - "rootId": 16, - "id": 22 + "id": 7 } ], - "rootId": 16, - "id": 18 + "id": 3 } ], - "id": 16 + "id": 1 }, "initialOffset": { "left": 0, diff --git a/packages/browser-integration-tests/suites/replay/sessionInactive/test.ts b/packages/browser-integration-tests/suites/replay/sessionInactive/test.ts index 60b78d121bbb..ef2b841cbea3 100644 --- a/packages/browser-integration-tests/suites/replay/sessionInactive/test.ts +++ b/packages/browser-integration-tests/suites/replay/sessionInactive/test.ts @@ -14,10 +14,8 @@ import { // Session should be paused after 2s - keep in sync with init.js const SESSION_PAUSED = 2000; -sentryTest('handles an inactive session', async ({ getLocalTestPath, page, browserName }) => { - // webkit is a bit flakey here, the ids are sometimes off by , so seems like there is a race condition with checkout? - if (shouldSkipReplayTest() || browserName === 'webkit') { +sentryTest('handles an inactive session', async ({ getLocalTestPath, page }) => { + if (shouldSkipReplayTest()) { sentryTest.skip(); } diff --git a/packages/browser-integration-tests/suites/replay/sessionInactive/test.ts-snapshots/snapshot-1-chromium.json b/packages/browser-integration-tests/suites/replay/sessionInactive/test.ts-snapshots/snapshot-1-chromium.json index 13e5b1b70103..d510b410a343 100644 --- a/packages/browser-integration-tests/suites/replay/sessionInactive/test.ts-snapshots/snapshot-1-chromium.json +++ b/packages/browser-integration-tests/suites/replay/sessionInactive/test.ts-snapshots/snapshot-1-chromium.json @@ -9,8 +9,7 @@ "name": "html", "publicId": "", "systemId": "", - "rootId": 16, - "id": 17 + "id": 2 }, { "type": 2, @@ -29,18 +28,15 @@ "charset": "utf-8" }, "childNodes": [], - "rootId": 16, - "id": 20 + "id": 5 } ], - "rootId": 16, - "id": 19 + "id": 4 }, { "type": 3, "textContent": "\n ", - "rootId": 16, - "id": 21 + "id": 6 }, { "type": 2, @@ -50,8 +46,7 @@ { "type": 3, "textContent": "\n ", - "rootId": 16, - "id": 23 + "id": 8 }, { "type": 2, @@ -64,18 +59,15 @@ { "type": 3, "textContent": "***** **", - "rootId": 16, - "id": 25 + "id": 10 } ], - "rootId": 16, - "id": 24 + "id": 9 }, { "type": 3, "textContent": "\n ", - "rootId": 16, - "id": 26 + "id": 11 }, { "type": 2, @@ -88,35 +80,29 @@ { "type": 3, "textContent": "***** **", - "rootId": 16, - "id": 28 + "id": 13 } ], - "rootId": 16, - "id": 27 + "id": 12 }, { "type": 3, "textContent": "\n ", - "rootId": 16, - "id": 29 + "id": 14 }, { "type": 3, "textContent": "\n\n", - "rootId": 16, - "id": 30 + "id": 15 } ], - "rootId": 16, - "id": 22 + "id": 7 } ], - "rootId": 16, - "id": 18 + "id": 3 } ], - "id": 16 + "id": 1 }, "initialOffset": { "left": 0, diff --git a/packages/browser-integration-tests/suites/replay/sessionInactive/test.ts-snapshots/snapshot-1-webkit.json b/packages/browser-integration-tests/suites/replay/sessionInactive/test.ts-snapshots/snapshot-1-webkit.json index 13e5b1b70103..d510b410a343 100644 --- a/packages/browser-integration-tests/suites/replay/sessionInactive/test.ts-snapshots/snapshot-1-webkit.json +++ b/packages/browser-integration-tests/suites/replay/sessionInactive/test.ts-snapshots/snapshot-1-webkit.json @@ -9,8 +9,7 @@ "name": "html", "publicId": "", "systemId": "", - "rootId": 16, - "id": 17 + "id": 2 }, { "type": 2, @@ -29,18 +28,15 @@ "charset": "utf-8" }, "childNodes": [], - "rootId": 16, - "id": 20 + "id": 5 } ], - "rootId": 16, - "id": 19 + "id": 4 }, { "type": 3, "textContent": "\n ", - "rootId": 16, - "id": 21 + "id": 6 }, { "type": 2, @@ -50,8 +46,7 @@ { "type": 3, "textContent": "\n ", - "rootId": 16, - "id": 23 + "id": 8 }, { "type": 2, @@ -64,18 +59,15 @@ { "type": 3, "textContent": "***** **", - "rootId": 16, - "id": 25 + "id": 10 } ], - "rootId": 16, - "id": 24 + "id": 9 }, { "type": 3, "textContent": "\n ", - "rootId": 16, - "id": 26 + "id": 11 }, { "type": 2, @@ -88,35 +80,29 @@ { "type": 3, "textContent": "***** **", - "rootId": 16, - "id": 28 + "id": 13 } ], - "rootId": 16, - "id": 27 + "id": 12 }, { "type": 3, "textContent": "\n ", - "rootId": 16, - "id": 29 + "id": 14 }, { "type": 3, "textContent": "\n\n", - "rootId": 16, - "id": 30 + "id": 15 } ], - "rootId": 16, - "id": 22 + "id": 7 } ], - "rootId": 16, - "id": 18 + "id": 3 } ], - "id": 16 + "id": 1 }, "initialOffset": { "left": 0, diff --git a/packages/browser-integration-tests/suites/replay/sessionMaxAge/test.ts b/packages/browser-integration-tests/suites/replay/sessionMaxAge/test.ts index 7cc02cb83a05..3d5d17507d4f 100644 --- a/packages/browser-integration-tests/suites/replay/sessionMaxAge/test.ts +++ b/packages/browser-integration-tests/suites/replay/sessionMaxAge/test.ts @@ -18,7 +18,7 @@ const MAX_REPLAY_DURATION = 4000; The main difference between this and sessionExpiry test, is that here we wait for the overall time (4s) in multiple steps (2s, 2s) instead of waiting for the whole time at once (4s). */ -sentryTest('handles session that exceeds max age', async ({ forceFlushReplay, getLocalTestPath, page }) => { +sentryTest('handles session that exceeds max age', async ({ getLocalTestPath, page }) => { if (shouldSkipReplayTest()) { sentryTest.skip(); } @@ -60,7 +60,6 @@ sentryTest('handles session that exceeds max age', async ({ forceFlushReplay, ge const timePassed1 = Date.now() - startTimestamp; await new Promise(resolve => setTimeout(resolve, Math.max(MAX_REPLAY_DURATION / 2 - timePassed1, 0))); await page.click('#button1'); - await forceFlushReplay(); const req1 = await reqPromise1; const replayEvent1 = getReplayEvent(req1); @@ -74,7 +73,6 @@ sentryTest('handles session that exceeds max age', async ({ forceFlushReplay, ge const timePassed2 = Date.now() - startTimestamp; await new Promise(resolve => setTimeout(resolve, Math.max(MAX_REPLAY_DURATION - timePassed2, 0))); await page.click('#button2'); - await forceFlushReplay(); const req2 = await reqPromise2; const replay2 = await getReplaySnapshot(page); diff --git a/packages/browser-integration-tests/suites/replay/sessionMaxAge/test.ts-snapshots/snapshot-2-chromium.json b/packages/browser-integration-tests/suites/replay/sessionMaxAge/test.ts-snapshots/snapshot-2-chromium.json index 13e5b1b70103..d510b410a343 100644 --- a/packages/browser-integration-tests/suites/replay/sessionMaxAge/test.ts-snapshots/snapshot-2-chromium.json +++ b/packages/browser-integration-tests/suites/replay/sessionMaxAge/test.ts-snapshots/snapshot-2-chromium.json @@ -9,8 +9,7 @@ "name": "html", "publicId": "", "systemId": "", - "rootId": 16, - "id": 17 + "id": 2 }, { "type": 2, @@ -29,18 +28,15 @@ "charset": "utf-8" }, "childNodes": [], - "rootId": 16, - "id": 20 + "id": 5 } ], - "rootId": 16, - "id": 19 + "id": 4 }, { "type": 3, "textContent": "\n ", - "rootId": 16, - "id": 21 + "id": 6 }, { "type": 2, @@ -50,8 +46,7 @@ { "type": 3, "textContent": "\n ", - "rootId": 16, - "id": 23 + "id": 8 }, { "type": 2, @@ -64,18 +59,15 @@ { "type": 3, "textContent": "***** **", - "rootId": 16, - "id": 25 + "id": 10 } ], - "rootId": 16, - "id": 24 + "id": 9 }, { "type": 3, "textContent": "\n ", - "rootId": 16, - "id": 26 + "id": 11 }, { "type": 2, @@ -88,35 +80,29 @@ { "type": 3, "textContent": "***** **", - "rootId": 16, - "id": 28 + "id": 13 } ], - "rootId": 16, - "id": 27 + "id": 12 }, { "type": 3, "textContent": "\n ", - "rootId": 16, - "id": 29 + "id": 14 }, { "type": 3, "textContent": "\n\n", - "rootId": 16, - "id": 30 + "id": 15 } ], - "rootId": 16, - "id": 22 + "id": 7 } ], - "rootId": 16, - "id": 18 + "id": 3 } ], - "id": 16 + "id": 1 }, "initialOffset": { "left": 0, diff --git a/packages/browser-integration-tests/suites/replay/sessionMaxAge/test.ts-snapshots/snapshot-2-webkit.json b/packages/browser-integration-tests/suites/replay/sessionMaxAge/test.ts-snapshots/snapshot-2-webkit.json index 13e5b1b70103..d510b410a343 100644 --- a/packages/browser-integration-tests/suites/replay/sessionMaxAge/test.ts-snapshots/snapshot-2-webkit.json +++ b/packages/browser-integration-tests/suites/replay/sessionMaxAge/test.ts-snapshots/snapshot-2-webkit.json @@ -9,8 +9,7 @@ "name": "html", "publicId": "", "systemId": "", - "rootId": 16, - "id": 17 + "id": 2 }, { "type": 2, @@ -29,18 +28,15 @@ "charset": "utf-8" }, "childNodes": [], - "rootId": 16, - "id": 20 + "id": 5 } ], - "rootId": 16, - "id": 19 + "id": 4 }, { "type": 3, "textContent": "\n ", - "rootId": 16, - "id": 21 + "id": 6 }, { "type": 2, @@ -50,8 +46,7 @@ { "type": 3, "textContent": "\n ", - "rootId": 16, - "id": 23 + "id": 8 }, { "type": 2, @@ -64,18 +59,15 @@ { "type": 3, "textContent": "***** **", - "rootId": 16, - "id": 25 + "id": 10 } ], - "rootId": 16, - "id": 24 + "id": 9 }, { "type": 3, "textContent": "\n ", - "rootId": 16, - "id": 26 + "id": 11 }, { "type": 2, @@ -88,35 +80,29 @@ { "type": 3, "textContent": "***** **", - "rootId": 16, - "id": 28 + "id": 13 } ], - "rootId": 16, - "id": 27 + "id": 12 }, { "type": 3, "textContent": "\n ", - "rootId": 16, - "id": 29 + "id": 14 }, { "type": 3, "textContent": "\n\n", - "rootId": 16, - "id": 30 + "id": 15 } ], - "rootId": 16, - "id": 22 + "id": 7 } ], - "rootId": 16, - "id": 18 + "id": 3 } ], - "id": 16 + "id": 1 }, "initialOffset": { "left": 0, diff --git a/packages/replay/package.json b/packages/replay/package.json index 4b052cb0a8d8..43a511742a0d 100644 --- a/packages/replay/package.json +++ b/packages/replay/package.json @@ -54,8 +54,8 @@ "devDependencies": { "@babel/core": "^7.17.5", "@sentry-internal/replay-worker": "7.72.0", - "@sentry-internal/rrweb": "2.0.0", - "@sentry-internal/rrweb-snapshot": "2.0.0", + "@sentry-internal/rrweb": "1.108.0", + "@sentry-internal/rrweb-snapshot": "1.108.0", "jsdom-worker": "^0.2.1", "tslib": "^2.4.1 || ^1.9.3" }, diff --git a/packages/replay/src/constants.ts b/packages/replay/src/constants.ts index 13ccea43df22..f12127970fed 100644 --- a/packages/replay/src/constants.ts +++ b/packages/replay/src/constants.ts @@ -50,6 +50,3 @@ export const MIN_REPLAY_DURATION_LIMIT = 15_000; /** The max. length of a replay. */ export const MAX_REPLAY_DURATION = 3_600_000; // 60 minutes in ms; - -/** Default attributes to be ignored when `maskAllText` is enabled */ -export const DEFAULT_IGNORED_ATTRIBUTES = ['title', 'placeholder']; diff --git a/packages/replay/src/coreHandlers/handleDom.ts b/packages/replay/src/coreHandlers/handleDom.ts index 60220f0a5a66..e97e3fe5b8fe 100644 --- a/packages/replay/src/coreHandlers/handleDom.ts +++ b/packages/replay/src/coreHandlers/handleDom.ts @@ -1,5 +1,4 @@ -import { record } from '@sentry-internal/rrweb'; -import type { serializedElementNodeWithId, serializedNodeWithId } from '@sentry-internal/rrweb-snapshot'; +import type { INode } from '@sentry-internal/rrweb-snapshot'; import { NodeType } from '@sentry-internal/rrweb-snapshot'; import type { Breadcrumb } from '@sentry/types'; import { htmlTreeAsString } from '@sentry/utils'; @@ -50,26 +49,28 @@ export const handleDomListener: (replay: ReplayContainer) => (handlerData: DomHa }; /** Get the base DOM breadcrumb. */ -export function getBaseDomBreadcrumb(target: Node | null, message: string): Breadcrumb { - const nodeId = record.mirror.getId(target); - const node = nodeId && record.mirror.getNode(nodeId); - const meta = node && record.mirror.getMeta(node); - const element = meta && isElement(meta) ? meta : null; +export function getBaseDomBreadcrumb(target: Node | INode | null, message: string): Breadcrumb { + // `__sn` property is the serialized node created by rrweb + const serializedNode = target && isRrwebNode(target) && target.__sn.type === NodeType.Element ? target.__sn : null; return { message, - data: element + data: serializedNode ? { - nodeId, + nodeId: serializedNode.id, node: { - id: nodeId, - tagName: element.tagName, - textContent: Array.from(element.childNodes) - .map((node: serializedNodeWithId) => node.type === NodeType.Text && node.textContent) - .filter(Boolean) // filter out empty values - .map(text => (text as string).trim()) - .join(''), - attributes: getAttributesToRecord(element.attributes), + id: serializedNode.id, + tagName: serializedNode.tagName, + textContent: target + ? Array.from(target.childNodes) + .map( + (node: Node | INode) => '__sn' in node && node.__sn.type === NodeType.Text && node.__sn.textContent, + ) + .filter(Boolean) // filter out empty values + .map(text => (text as string).trim()) + .join('') + : '', + attributes: getAttributesToRecord(serializedNode.attributes), }, } : {}, @@ -89,11 +90,11 @@ export function handleDom(handlerData: DomHandlerData): Breadcrumb | null { }); } -function getDomTarget(handlerData: DomHandlerData): { target: Node | null; message: string } { +function getDomTarget(handlerData: DomHandlerData): { target: Node | INode | null; message: string } { const isClick = handlerData.name === 'click'; let message: string | undefined; - let target: Node | null = null; + let target: Node | INode | null = null; // Accessing event.target can throw (see getsentry/raven-js#838, #768) try { @@ -106,6 +107,6 @@ function getDomTarget(handlerData: DomHandlerData): { target: Node | null; messa return { target, message }; } -function isElement(node: serializedNodeWithId): node is serializedElementNodeWithId { - return node.type === NodeType.Element; +function isRrwebNode(node: EventTarget): node is INode { + return '__sn' in node; } diff --git a/packages/replay/src/integration.ts b/packages/replay/src/integration.ts index 753fd62d5660..57fb36f66b35 100644 --- a/packages/replay/src/integration.ts +++ b/packages/replay/src/integration.ts @@ -13,7 +13,6 @@ import { ReplayContainer } from './replay'; import type { RecordingOptions, ReplayConfiguration, ReplayPluginOptions, SendBufferedReplayOptions } from './types'; import { getPrivacyOptions } from './util/getPrivacyOptions'; import { isBrowser } from './util/isBrowser'; -import { maskAttribute } from './util/maskAttribute'; const MEDIA_SELECTORS = 'img,image,svg,video,object,picture,embed,map,audio,link[rel="icon"],link[rel="apple-touch-icon"]'; @@ -82,7 +81,6 @@ export class Replay implements Integration { networkResponseHeaders = [], mask = [], - maskAttributes = ['title', 'placeholder'], unmask = [], block = [], unblock = [], @@ -106,36 +104,25 @@ export class Replay implements Integration { }: ReplayConfiguration = {}) { this.name = Replay.id; - const privacyOptions = getPrivacyOptions({ - mask, - unmask, - block, - unblock, - ignore, - blockClass, - blockSelector, - maskTextClass, - maskTextSelector, - ignoreClass, - }); - this._recordingOptions = { maskAllInputs, maskAllText, maskInputOptions: { ...(maskInputOptions || {}), password: true }, maskTextFn: maskFn, maskInputFn: maskFn, - maskAttributeFn: (key: string, value: string, el: HTMLElement): string => - maskAttribute({ - maskAttributes, - maskAllText, - privacyOptions, - key, - value, - el, - }), - - ...privacyOptions, + + ...getPrivacyOptions({ + mask, + unmask, + block, + unblock, + ignore, + blockClass, + blockSelector, + maskTextClass, + maskTextSelector, + ignoreClass, + }), // Our defaults slimDOMOptions: 'all', @@ -145,16 +132,6 @@ export class Replay implements Integration { // collect fonts, but be aware that `sentry.io` needs to be an allowed // origin for playback collectFonts: true, - errorHandler: (err: Error) => { - try { - // @ts-expect-error Set this so that replay SDK can ignore errors originating from rrweb - err.__rrweb__ = true; - } catch { - // avoid any potential hazards here - } - // return true to suppress throwing the error inside of rrweb - return true; - }, }; this._initialOptions = { diff --git a/packages/replay/src/types/replay.ts b/packages/replay/src/types/replay.ts index 4c7156262ea0..8ad157606c53 100644 --- a/packages/replay/src/types/replay.ts +++ b/packages/replay/src/types/replay.ts @@ -264,12 +264,7 @@ export interface ReplayIntegrationPrivacyOptions { } // These are optional for ReplayPluginOptions because the plugin sets default values -type OptionalReplayPluginOptions = Partial & { - /** - * Mask element attributes that are contained in list - */ - maskAttributes?: string[]; -}; +type OptionalReplayPluginOptions = Partial; export interface DeprecatedPrivacyOptions { /** diff --git a/packages/replay/src/util/createPerformanceEntries.ts b/packages/replay/src/util/createPerformanceEntries.ts index 9a259200a94e..13526677c323 100644 --- a/packages/replay/src/util/createPerformanceEntries.ts +++ b/packages/replay/src/util/createPerformanceEntries.ts @@ -172,7 +172,9 @@ function createLargestContentfulPaint( data: { value, // LCP "duration" in ms size, - nodeId: record.mirror.getId(entry.element), + // Not sure why this errors, Node should be correct (Argument of type 'Node' is not assignable to parameter of type 'INode') + // eslint-disable-next-line @typescript-eslint/no-explicit-any + nodeId: record.mirror.getId(entry.element as any), }, }; } diff --git a/packages/replay/src/util/getPrivacyOptions.ts b/packages/replay/src/util/getPrivacyOptions.ts index c37075923d90..a2aec1dcdb9d 100644 --- a/packages/replay/src/util/getPrivacyOptions.ts +++ b/packages/replay/src/util/getPrivacyOptions.ts @@ -5,6 +5,8 @@ type GetPrivacyOptions = Required; - key: string; - value: string; - el: HTMLElement; -} - -/** - * Masks an attribute if necessary, otherwise return attribute value as-is. - */ -export function maskAttribute({ - el, - key, - maskAttributes, - maskAllText, - privacyOptions, - value, -}: MaskAttributeParams): string { - // We only mask attributes if `maskAllText` is true - if (!maskAllText) { - return value; - } - - // unmaskTextSelector takes precendence - if (privacyOptions.unmaskTextSelector && el.matches(privacyOptions.unmaskTextSelector)) { - return value; - } - - if ( - maskAttributes.includes(key) || - // Need to mask `value` attribute for `` if it's a button-like - // type - (key === 'value' && el.tagName === 'INPUT' && ['submit', 'button'].includes(el.getAttribute('type') || '')) - ) { - return value.replace(/[\S]/g, '*'); - } - - return value; -} diff --git a/packages/replay/test/integration/coreHandlers/handleScope.test.ts b/packages/replay/test/integration/coreHandlers/handleScope.test.ts index f77f165981ef..2ccaafdefff7 100644 --- a/packages/replay/test/integration/coreHandlers/handleScope.test.ts +++ b/packages/replay/test/integration/coreHandlers/handleScope.test.ts @@ -18,7 +18,8 @@ describe('Integration | coreHandlers | handleScope', () => { }; }); - replay.start(); + await replay.start(); + jest.runAllTimers(); expect(mockHandleScopeListener).toHaveBeenCalledTimes(1); diff --git a/packages/replay/test/integration/rrweb.test.ts b/packages/replay/test/integration/rrweb.test.ts index 82dd18f2d6ec..cc40061b4a3d 100644 --- a/packages/replay/test/integration/rrweb.test.ts +++ b/packages/replay/test/integration/rrweb.test.ts @@ -20,22 +20,22 @@ describe('Integration | rrweb', () => { "blockSelector": ".sentry-block,[data-sentry-block],base[href=\\"/\\"],img,image,svg,video,object,picture,embed,map,audio,link[rel=\\"icon\\"],link[rel=\\"apple-touch-icon\\"]", "collectFonts": true, "emit": [Function], - "errorHandler": [Function], "ignoreSelector": ".sentry-test-ignore,.sentry-ignore,[data-sentry-ignore],input[type=\\"file\\"]", "inlineImages": false, "inlineStylesheet": true, "maskAllInputs": true, "maskAllText": true, - "maskAttributeFn": [Function], "maskInputFn": undefined, "maskInputOptions": Object { "password": true, }, + "maskInputSelector": ".sentry-mask,[data-sentry-mask]", "maskTextFn": undefined, "maskTextSelector": ".sentry-mask,[data-sentry-mask]", "onMutation": [Function], "slimDOMOptions": "all", "unblockSelector": ".sentry-unblock,[data-sentry-unblock]", + "unmaskInputSelector": ".sentry-unmask,[data-sentry-unmask]", "unmaskTextSelector": ".sentry-unmask,[data-sentry-unmask]", } `); diff --git a/packages/replay/test/mocks/mockRrweb.ts b/packages/replay/test/mocks/mockRrweb.ts index 30c5557298fc..c6fbd2be6e55 100644 --- a/packages/replay/test/mocks/mockRrweb.ts +++ b/packages/replay/test/mocks/mockRrweb.ts @@ -45,8 +45,6 @@ export function mockRrweb(): { record: RecordMock } { jest.mock('@sentry-internal/rrweb', () => { const ActualRrweb = jest.requireActual('@sentry-internal/rrweb'); - mockRecordFn.mirror = ActualRrweb.record.mirror; - return { ...ActualRrweb, record: mockRecordFn, diff --git a/packages/replay/test/unit/util/getPrivacyOptions.test.ts b/packages/replay/test/unit/util/getPrivacyOptions.test.ts index c1e7695487e3..27cf839fdd3b 100644 --- a/packages/replay/test/unit/util/getPrivacyOptions.test.ts +++ b/packages/replay/test/unit/util/getPrivacyOptions.test.ts @@ -21,8 +21,10 @@ describe('Unit | util | getPrivacyOptions', () => { Object { "blockSelector": ".custom-block,.sentry-block,[data-sentry-block],base[href=\\"/\\"]", "ignoreSelector": ".custom-ignore,.sentry-ignore,[data-sentry-ignore],input[type=\\"file\\"]", + "maskInputSelector": ".custom-mask,.sentry-mask,[data-sentry-mask]", "maskTextSelector": ".custom-mask,.sentry-mask,[data-sentry-mask]", "unblockSelector": ".custom-unblock,.sentry-unblock,[data-sentry-unblock]", + "unmaskInputSelector": ".custom-unmask,.sentry-unmask,[data-sentry-unmask]", "unmaskTextSelector": ".custom-unmask,.sentry-unmask,[data-sentry-unmask]", } `); @@ -47,8 +49,10 @@ describe('Unit | util | getPrivacyOptions', () => { Object { "blockSelector": ".custom-block,.deprecated-block-selector,.sentry-block,[data-sentry-block],base[href=\\"/\\"],.deprecated-block-class", "ignoreSelector": ".custom-ignore,.sentry-ignore,[data-sentry-ignore],input[type=\\"file\\"],.deprecated-ignore-class", + "maskInputSelector": ".custom-mask,.deprecated-mask-selector,.sentry-mask,[data-sentry-mask],.deprecated-mask-class", "maskTextSelector": ".custom-mask,.deprecated-mask-selector,.sentry-mask,[data-sentry-mask],.deprecated-mask-class", "unblockSelector": ".custom-unblock,.sentry-unblock,[data-sentry-unblock]", + "unmaskInputSelector": ".custom-unmask,.sentry-unmask,[data-sentry-unmask]", "unmaskTextSelector": ".custom-unmask,.sentry-unmask,[data-sentry-unmask]", } `); @@ -71,9 +75,11 @@ describe('Unit | util | getPrivacyOptions', () => { "blockClass": /deprecated-block-\\*/, "blockSelector": ".custom-block,.sentry-block,[data-sentry-block],base[href=\\"/\\"]", "ignoreSelector": ".custom-ignore,.sentry-ignore,[data-sentry-ignore],input[type=\\"file\\"]", + "maskInputSelector": ".custom-mask,.sentry-mask,[data-sentry-mask]", "maskTextClass": /deprecated-mask-\\*/, "maskTextSelector": ".custom-mask,.sentry-mask,[data-sentry-mask]", "unblockSelector": ".custom-unblock,.sentry-unblock,[data-sentry-unblock]", + "unmaskInputSelector": ".custom-unmask,.sentry-unmask,[data-sentry-unmask]", "unmaskTextSelector": ".custom-unmask,.sentry-unmask,[data-sentry-unmask]", } `); diff --git a/packages/replay/test/unit/util/maskAttribute.test.ts b/packages/replay/test/unit/util/maskAttribute.test.ts deleted file mode 100644 index 73bcbaa91395..000000000000 --- a/packages/replay/test/unit/util/maskAttribute.test.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { maskAttribute } from '../../../src/util/maskAttribute'; - -describe('maskAttribute', () => { - const defaultEl = document.createElement('div'); - defaultEl.className = 'classy'; - const privacyOptions = { - maskTextSelector: '', - unmaskTextSelector: '.unmask', - blockSelector: '', - unblockSelector: '', - ignoreSelector: '', - }; - const defaultArgs = { - el: defaultEl, - key: 'title', - maskAttributes: ['title'], - maskAllText: true, - privacyOptions, - value: 'foo', - }; - - const inputSubmit = document.createElement('input'); - const inputButton = document.createElement('input'); - [inputSubmit, inputButton].forEach(el => { - el.type = 'submit'; - }); - - test.each([ - ['masks if `maskAllText` is true', defaultArgs, '***'], - [ - 'does not mask if `maskAllText` is false, despite `maskTextSelector` ', - { ...defaultArgs, maskAllText: false, maskTextSelector: 'classy' }, - 'foo', - ], - ['does not mask if `maskAllText` is false', { ...defaultArgs, maskAllText: false }, 'foo'], - [ - 'does not mask if `unmaskTextSelector` matches', - { ...defaultArgs, privacyOptions: { ...privacyOptions, unmaskTextSelector: '.classy' } }, - 'foo', - ], - [ - 'masks `value` attribute on `` with type "submit"', - { ...defaultArgs, el: inputSubmit, value: 'input value' }, - '***** *****', - ], - [ - 'masks `value` attribute on `` with type "button"', - { ...defaultArgs, el: inputButton, value: 'input value' }, - '***** *****', - ], - ])('%s', (_: string, input, output) => { - expect(maskAttribute(input)).toEqual(output); - }); -}); diff --git a/yarn.lock b/yarn.lock index bc849269e256..c0ffd51d5308 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4446,38 +4446,22 @@ semver "7.3.2" semver-intersect "1.4.0" -"@sentry-internal/rrdom@2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/rrdom/-/rrdom-2.0.0.tgz#326b5f26c76d2077874db7edffd5be3aa72848fb" - integrity sha512-PLSw54GWCmxOmJWJ2NGDfz9b+/76IBpGsWnIjBiW7L3NDVuTo705/7+DmKTrDADO7xXAZZRpbuQjqBjV8Mu+yQ== - dependencies: - "@sentry-internal/rrweb-snapshot" "2.0.0" - -"@sentry-internal/rrweb-snapshot@2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/rrweb-snapshot/-/rrweb-snapshot-2.0.0.tgz#6d034f4f65736e990e279842cf1c2868fc9f47dd" - integrity sha512-MFpUw2Kuq4OVQn1dv6l/oSPgbHdy8N0oWBeVeHQlBzxugje4i2KU9tf6K7KH2RAce7Bi9r5UgHvCsNG3PNi/XQ== +"@sentry-internal/rrweb-snapshot@1.108.0": + version "1.108.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/rrweb-snapshot/-/rrweb-snapshot-1.108.0.tgz#9b09b7e5d6b13d4d7493017ee190b097f9916284" + integrity sha512-ypR/4oBB8s7d5+7JTkdk+VvlMPRRhbuz3xSFMXShCH2LJ6kINGfYBAYr6rr6o2Bko9j5rVHjYDDrVWkTw4CXSg== -"@sentry-internal/rrweb-types@2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/rrweb-types/-/rrweb-types-2.0.0.tgz#8606e47d98e14580f46f98d5dc5d95bc9ebc8b59" - integrity sha512-3dgoh4sbqgY8XwsKh6ofA8WRtUE+qWLHPDMzipp1XefKfEhr6qTtw0riurnJBrO5lD6dJuewK5BWwjcrFb3Gag== +"@sentry-internal/rrweb@1.108.0": + version "1.108.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/rrweb/-/rrweb-1.108.0.tgz#4b724c1fff44fb4705723c121ca424c00fabc398" + integrity sha512-IuRuA1k2N23e6oTRnV9866mauoOvesYFZFlQHgOvt7p3pJDfXhDUZj1DKaQZJrbooTUUIh7YrpZ2Vukoq0wCFw== dependencies: - "@sentry-internal/rrweb-snapshot" "2.0.0" - -"@sentry-internal/rrweb@2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/rrweb/-/rrweb-2.0.0.tgz#180e2763b77f83aa24bae964dd2f8c8065ddfc49" - integrity sha512-SOyIGjCi1q9ocMOHAAU6DhO2vecRkLk9/zQ6YbIJsUz1vB1ZoF0L1xDlwuL+fGw3HjZ6Wn8RoZWSSiQRokL7lg== - dependencies: - "@sentry-internal/rrdom" "2.0.0" - "@sentry-internal/rrweb-snapshot" "2.0.0" - "@sentry-internal/rrweb-types" "2.0.0" + "@sentry-internal/rrweb-snapshot" "1.108.0" "@types/css-font-loading-module" "0.0.7" "@xstate/fsm" "^1.4.0" base64-arraybuffer "^1.0.1" fflate "^0.4.4" - mitt "^3.0.0" + mitt "^1.1.3" "@sentry/bundler-plugin-core@0.6.1": version "0.6.1" @@ -19576,11 +19560,6 @@ mitt@^1.1.3: resolved "https://registry.yarnpkg.com/mitt/-/mitt-1.2.0.tgz#cb24e6569c806e31bd4e3995787fe38a04fdf90d" integrity sha512-r6lj77KlwqLhIUku9UWYes7KJtsczvolZkzp8hbaDPPaE24OmWl5s539Mytlj22siEQKosZ26qCBgda2PKwoJw== -mitt@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/mitt/-/mitt-3.0.1.tgz#ea36cf0cc30403601ae074c8f77b7092cdab36d1" - integrity sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw== - mixin-deep@^1.2.0: version "1.3.2" resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566"