From 28f5f77c173132029c51597a90f24b974fb4a1be Mon Sep 17 00:00:00 2001 From: s1gr1d Date: Tue, 19 Mar 2024 13:32:37 +0100 Subject: [PATCH 1/4] rename replay folder to replay-internal --- packages/{replay => replay-internal}/.eslintignore | 0 packages/{replay => replay-internal}/.eslintrc.js | 0 packages/{replay => replay-internal}/.gitignore | 0 packages/{replay => replay-internal}/CONTRIBUTING.md | 0 packages/{replay => replay-internal}/LICENSE | 0 packages/{replay => replay-internal}/MIGRATION.md | 0 packages/{replay => replay-internal}/README.md | 0 packages/{replay => replay-internal}/jest.config.ts | 0 packages/{replay => replay-internal}/jest.setup.ts | 0 packages/{replay => replay-internal}/package.json | 0 packages/{replay => replay-internal}/rollup.bundle.config.mjs | 0 packages/{replay => replay-internal}/rollup.npm.config.mjs | 0 packages/{replay => replay-internal}/scripts/craft-pre-release.sh | 0 packages/{replay => replay-internal}/src/constants.ts | 0 .../src/coreHandlers/handleAfterSendEvent.ts | 0 .../src/coreHandlers/handleBeforeSendEvent.ts | 0 .../src/coreHandlers/handleBreadcrumbs.ts | 0 .../{replay => replay-internal}/src/coreHandlers/handleClick.ts | 0 .../{replay => replay-internal}/src/coreHandlers/handleDom.ts | 0 .../src/coreHandlers/handleGlobalEvent.ts | 0 .../{replay => replay-internal}/src/coreHandlers/handleHistory.ts | 0 .../src/coreHandlers/handleKeyboardEvent.ts | 0 .../src/coreHandlers/handleNetworkBreadcrumbs.ts | 0 .../src/coreHandlers/performanceObserver.ts | 0 .../src/coreHandlers/util/addBreadcrumbEvent.ts | 0 .../src/coreHandlers/util/addFeedbackBreadcrumb.ts | 0 .../src/coreHandlers/util/addNetworkBreadcrumb.ts | 0 .../{replay => replay-internal}/src/coreHandlers/util/domUtils.ts | 0 .../src/coreHandlers/util/fetchUtils.ts | 0 .../src/coreHandlers/util/getAttributesToRecord.ts | 0 .../src/coreHandlers/util/networkUtils.ts | 0 .../src/coreHandlers/util/onWindowOpen.ts | 0 .../src/coreHandlers/util/shouldSampleForBufferEvent.ts | 0 .../{replay => replay-internal}/src/coreHandlers/util/xhrUtils.ts | 0 packages/{replay => replay-internal}/src/debug-build.ts | 0 .../src/eventBuffer/EventBufferArray.ts | 0 .../src/eventBuffer/EventBufferCompressionWorker.ts | 0 .../src/eventBuffer/EventBufferProxy.ts | 0 .../{replay => replay-internal}/src/eventBuffer/WorkerHandler.ts | 0 packages/{replay => replay-internal}/src/eventBuffer/error.ts | 0 packages/{replay => replay-internal}/src/eventBuffer/index.ts | 0 packages/{replay => replay-internal}/src/index.ts | 0 packages/{replay => replay-internal}/src/integration.ts | 0 packages/{replay => replay-internal}/src/replay.ts | 0 packages/{replay => replay-internal}/src/session/Session.ts | 0 packages/{replay => replay-internal}/src/session/clearSession.ts | 0 packages/{replay => replay-internal}/src/session/createSession.ts | 0 packages/{replay => replay-internal}/src/session/fetchSession.ts | 0 packages/{replay => replay-internal}/src/session/index.ts | 0 .../src/session/loadOrCreateSession.ts | 0 packages/{replay => replay-internal}/src/session/saveSession.ts | 0 .../src/session/shouldRefreshSession.ts | 0 packages/{replay => replay-internal}/src/types/index.ts | 0 packages/{replay => replay-internal}/src/types/performance.ts | 0 packages/{replay => replay-internal}/src/types/replay.ts | 0 packages/{replay => replay-internal}/src/types/replayFrame.ts | 0 packages/{replay => replay-internal}/src/types/request.ts | 0 packages/{replay => replay-internal}/src/types/rrweb.ts | 0 packages/{replay => replay-internal}/src/util/addEvent.ts | 0 .../{replay => replay-internal}/src/util/addGlobalListeners.ts | 0 packages/{replay => replay-internal}/src/util/addMemoryEntry.ts | 0 packages/{replay => replay-internal}/src/util/createBreadcrumb.ts | 0 .../src/util/createPerformanceEntries.ts | 0 .../src/util/createPerformanceSpans.ts | 0 .../{replay => replay-internal}/src/util/createReplayEnvelope.ts | 0 packages/{replay => replay-internal}/src/util/debounce.ts | 0 packages/{replay => replay-internal}/src/util/eventUtils.ts | 0 .../{replay => replay-internal}/src/util/getPrivacyOptions.ts | 0 packages/{replay => replay-internal}/src/util/getReplay.ts | 0 .../{replay => replay-internal}/src/util/handleRecordingEmit.ts | 0 .../{replay => replay-internal}/src/util/hasSessionStorage.ts | 0 packages/{replay => replay-internal}/src/util/isExpired.ts | 0 packages/{replay => replay-internal}/src/util/isRrwebError.ts | 0 packages/{replay => replay-internal}/src/util/isSampled.ts | 0 packages/{replay => replay-internal}/src/util/isSessionExpired.ts | 0 packages/{replay => replay-internal}/src/util/log.ts | 0 packages/{replay => replay-internal}/src/util/maskAttribute.ts | 0 .../{replay => replay-internal}/src/util/prepareRecordingData.ts | 0 .../{replay => replay-internal}/src/util/prepareReplayEvent.ts | 0 packages/{replay => replay-internal}/src/util/sendReplay.ts | 0 .../{replay => replay-internal}/src/util/sendReplayRequest.ts | 0 .../{replay => replay-internal}/src/util/shouldFilterRequest.ts | 0 packages/{replay => replay-internal}/src/util/throttle.ts | 0 packages/{replay => replay-internal}/src/util/timestamp.ts | 0 packages/{replay => replay-internal}/test/fixtures/error.ts | 0 .../test/fixtures/fixJson/1_completeJson.json | 0 .../test/fixtures/fixJson/1_incompleteJson.txt | 0 .../test/fixtures/fixJson/2_completeJson.json | 0 .../test/fixtures/fixJson/2_incompleteJson.txt | 0 .../test/fixtures/performanceEntry/navigation.ts | 0 .../test/fixtures/performanceEntry/resource.ts | 0 packages/{replay => replay-internal}/test/fixtures/transaction.ts | 0 packages/{replay => replay-internal}/test/index.ts | 0 .../test/integration/autoSaveSession.test.ts | 0 .../test/integration/beforeAddRecordingEvent.test.ts | 0 .../test/integration/coreHandlers/handleAfterSendEvent.test.ts | 0 .../test/integration/coreHandlers/handleBeforeSendEvent.test.ts | 0 .../test/integration/coreHandlers/handleGlobalEvent.test.ts | 0 .../test/integration/errorSampleRate.test.ts | 0 .../test/integration/eventProcessors.test.ts | 0 .../{replay => replay-internal}/test/integration/events.test.ts | 0 .../{replay => replay-internal}/test/integration/flush.test.ts | 0 .../test/integration/getReplayId.test.ts | 0 .../test/integration/integrationSettings.test.ts | 0 .../test/integration/rateLimiting.test.ts | 0 .../{replay => replay-internal}/test/integration/rrweb.test.ts | 0 .../{replay => replay-internal}/test/integration/sampling.test.ts | 0 .../test/integration/sendReplayEvent.test.ts | 0 .../{replay => replay-internal}/test/integration/session.test.ts | 0 .../test/integration/shouldFilterRequest.test.ts | 0 .../{replay => replay-internal}/test/integration/stop.test.ts | 0 packages/{replay => replay-internal}/test/mocks/mockRrweb.ts | 0 packages/{replay => replay-internal}/test/mocks/mockSdk.ts | 0 packages/{replay => replay-internal}/test/mocks/resetSdkMock.ts | 0 packages/{replay => replay-internal}/test/types.ts | 0 .../test/unit/coreHandlers/handleBreadcrumbs.test.ts | 0 .../test/unit/coreHandlers/handleClick.test.ts | 0 .../test/unit/coreHandlers/handleDom.test.ts | 0 .../test/unit/coreHandlers/handleKeyboardEvent.test.ts | 0 .../test/unit/coreHandlers/handleNetworkBreadcrumbs.test.ts | 0 .../test/unit/coreHandlers/util/addBreadcrumbEvent.test.ts | 0 .../test/unit/coreHandlers/util/fetchUtils.test.ts | 0 .../test/unit/coreHandlers/util/getAttributesToRecord.test.ts | 0 .../test/unit/coreHandlers/util/networkUtils.test.ts | 0 .../test/unit/coreHandlers/util/xhrUtils.test.ts | 0 .../test/unit/eventBuffer/EventBufferArray.test.ts | 0 .../test/unit/eventBuffer/EventBufferCompressionWorker.test.ts | 0 .../test/unit/eventBuffer/EventBufferProxy.test.ts | 0 .../test/unit/multipleInstances.test.ts | 0 .../test/unit/session/createSession.test.ts | 0 .../test/unit/session/fetchSession.test.ts | 0 .../test/unit/session/loadOrCreateSession.test.ts | 0 .../test/unit/session/saveSession.test.ts | 0 .../test/unit/session/sessionSampling.test.ts | 0 .../{replay => replay-internal}/test/unit/util/addEvent.test.ts | 0 .../test/unit/util/createPerformanceEntry.test.ts | 0 .../test/unit/util/createReplayEnvelope.test.ts | 0 .../{replay => replay-internal}/test/unit/util/debounce.test.ts | 0 .../test/unit/util/getPrivacyOptions.test.ts | 0 .../{replay => replay-internal}/test/unit/util/getReplay.test.ts | 0 .../test/unit/util/handleRecordingEmit.test.ts | 0 .../{replay => replay-internal}/test/unit/util/isExpired.test.ts | 0 .../{replay => replay-internal}/test/unit/util/isSampled.test.ts | 0 .../test/unit/util/isSessionExpired.test.ts | 0 .../test/unit/util/maskAttribute.test.ts | 0 .../test/unit/util/prepareReplayEvent.test.ts | 0 .../{replay => replay-internal}/test/unit/util/throttle.test.ts | 0 packages/{replay => replay-internal}/test/utils/TestClient.ts | 0 packages/{replay => replay-internal}/test/utils/compression.ts | 0 packages/{replay => replay-internal}/test/utils/getTestEvent.ts | 0 .../test/utils/setupReplayContainer.ts | 0 .../{replay => replay-internal}/test/utils/use-fake-timers.ts | 0 packages/{replay => replay-internal}/tsconfig.json | 0 packages/{replay => replay-internal}/tsconfig.test.json | 0 packages/{replay => replay-internal}/tsconfig.types.json | 0 155 files changed, 0 insertions(+), 0 deletions(-) rename packages/{replay => replay-internal}/.eslintignore (100%) rename packages/{replay => replay-internal}/.eslintrc.js (100%) rename packages/{replay => replay-internal}/.gitignore (100%) rename packages/{replay => replay-internal}/CONTRIBUTING.md (100%) rename packages/{replay => replay-internal}/LICENSE (100%) rename packages/{replay => replay-internal}/MIGRATION.md (100%) rename packages/{replay => replay-internal}/README.md (100%) rename packages/{replay => replay-internal}/jest.config.ts (100%) rename packages/{replay => replay-internal}/jest.setup.ts (100%) rename packages/{replay => replay-internal}/package.json (100%) rename packages/{replay => replay-internal}/rollup.bundle.config.mjs (100%) rename packages/{replay => replay-internal}/rollup.npm.config.mjs (100%) rename packages/{replay => replay-internal}/scripts/craft-pre-release.sh (100%) rename packages/{replay => replay-internal}/src/constants.ts (100%) rename packages/{replay => replay-internal}/src/coreHandlers/handleAfterSendEvent.ts (100%) rename packages/{replay => replay-internal}/src/coreHandlers/handleBeforeSendEvent.ts (100%) rename packages/{replay => replay-internal}/src/coreHandlers/handleBreadcrumbs.ts (100%) rename packages/{replay => replay-internal}/src/coreHandlers/handleClick.ts (100%) rename packages/{replay => replay-internal}/src/coreHandlers/handleDom.ts (100%) rename packages/{replay => replay-internal}/src/coreHandlers/handleGlobalEvent.ts (100%) rename packages/{replay => replay-internal}/src/coreHandlers/handleHistory.ts (100%) rename packages/{replay => replay-internal}/src/coreHandlers/handleKeyboardEvent.ts (100%) rename packages/{replay => replay-internal}/src/coreHandlers/handleNetworkBreadcrumbs.ts (100%) rename packages/{replay => replay-internal}/src/coreHandlers/performanceObserver.ts (100%) rename packages/{replay => replay-internal}/src/coreHandlers/util/addBreadcrumbEvent.ts (100%) rename packages/{replay => replay-internal}/src/coreHandlers/util/addFeedbackBreadcrumb.ts (100%) rename packages/{replay => replay-internal}/src/coreHandlers/util/addNetworkBreadcrumb.ts (100%) rename packages/{replay => replay-internal}/src/coreHandlers/util/domUtils.ts (100%) rename packages/{replay => replay-internal}/src/coreHandlers/util/fetchUtils.ts (100%) rename packages/{replay => replay-internal}/src/coreHandlers/util/getAttributesToRecord.ts (100%) rename packages/{replay => replay-internal}/src/coreHandlers/util/networkUtils.ts (100%) rename packages/{replay => replay-internal}/src/coreHandlers/util/onWindowOpen.ts (100%) rename packages/{replay => replay-internal}/src/coreHandlers/util/shouldSampleForBufferEvent.ts (100%) rename packages/{replay => replay-internal}/src/coreHandlers/util/xhrUtils.ts (100%) rename packages/{replay => replay-internal}/src/debug-build.ts (100%) rename packages/{replay => replay-internal}/src/eventBuffer/EventBufferArray.ts (100%) rename packages/{replay => replay-internal}/src/eventBuffer/EventBufferCompressionWorker.ts (100%) rename packages/{replay => replay-internal}/src/eventBuffer/EventBufferProxy.ts (100%) rename packages/{replay => replay-internal}/src/eventBuffer/WorkerHandler.ts (100%) rename packages/{replay => replay-internal}/src/eventBuffer/error.ts (100%) rename packages/{replay => replay-internal}/src/eventBuffer/index.ts (100%) rename packages/{replay => replay-internal}/src/index.ts (100%) rename packages/{replay => replay-internal}/src/integration.ts (100%) rename packages/{replay => replay-internal}/src/replay.ts (100%) rename packages/{replay => replay-internal}/src/session/Session.ts (100%) rename packages/{replay => replay-internal}/src/session/clearSession.ts (100%) rename packages/{replay => replay-internal}/src/session/createSession.ts (100%) rename packages/{replay => replay-internal}/src/session/fetchSession.ts (100%) rename packages/{replay => replay-internal}/src/session/index.ts (100%) rename packages/{replay => replay-internal}/src/session/loadOrCreateSession.ts (100%) rename packages/{replay => replay-internal}/src/session/saveSession.ts (100%) rename packages/{replay => replay-internal}/src/session/shouldRefreshSession.ts (100%) rename packages/{replay => replay-internal}/src/types/index.ts (100%) rename packages/{replay => replay-internal}/src/types/performance.ts (100%) rename packages/{replay => replay-internal}/src/types/replay.ts (100%) rename packages/{replay => replay-internal}/src/types/replayFrame.ts (100%) rename packages/{replay => replay-internal}/src/types/request.ts (100%) rename packages/{replay => replay-internal}/src/types/rrweb.ts (100%) rename packages/{replay => replay-internal}/src/util/addEvent.ts (100%) rename packages/{replay => replay-internal}/src/util/addGlobalListeners.ts (100%) rename packages/{replay => replay-internal}/src/util/addMemoryEntry.ts (100%) rename packages/{replay => replay-internal}/src/util/createBreadcrumb.ts (100%) rename packages/{replay => replay-internal}/src/util/createPerformanceEntries.ts (100%) rename packages/{replay => replay-internal}/src/util/createPerformanceSpans.ts (100%) rename packages/{replay => replay-internal}/src/util/createReplayEnvelope.ts (100%) rename packages/{replay => replay-internal}/src/util/debounce.ts (100%) rename packages/{replay => replay-internal}/src/util/eventUtils.ts (100%) rename packages/{replay => replay-internal}/src/util/getPrivacyOptions.ts (100%) rename packages/{replay => replay-internal}/src/util/getReplay.ts (100%) rename packages/{replay => replay-internal}/src/util/handleRecordingEmit.ts (100%) rename packages/{replay => replay-internal}/src/util/hasSessionStorage.ts (100%) rename packages/{replay => replay-internal}/src/util/isExpired.ts (100%) rename packages/{replay => replay-internal}/src/util/isRrwebError.ts (100%) rename packages/{replay => replay-internal}/src/util/isSampled.ts (100%) rename packages/{replay => replay-internal}/src/util/isSessionExpired.ts (100%) rename packages/{replay => replay-internal}/src/util/log.ts (100%) rename packages/{replay => replay-internal}/src/util/maskAttribute.ts (100%) rename packages/{replay => replay-internal}/src/util/prepareRecordingData.ts (100%) rename packages/{replay => replay-internal}/src/util/prepareReplayEvent.ts (100%) rename packages/{replay => replay-internal}/src/util/sendReplay.ts (100%) rename packages/{replay => replay-internal}/src/util/sendReplayRequest.ts (100%) rename packages/{replay => replay-internal}/src/util/shouldFilterRequest.ts (100%) rename packages/{replay => replay-internal}/src/util/throttle.ts (100%) rename packages/{replay => replay-internal}/src/util/timestamp.ts (100%) rename packages/{replay => replay-internal}/test/fixtures/error.ts (100%) rename packages/{replay => replay-internal}/test/fixtures/fixJson/1_completeJson.json (100%) rename packages/{replay => replay-internal}/test/fixtures/fixJson/1_incompleteJson.txt (100%) rename packages/{replay => replay-internal}/test/fixtures/fixJson/2_completeJson.json (100%) rename packages/{replay => replay-internal}/test/fixtures/fixJson/2_incompleteJson.txt (100%) rename packages/{replay => replay-internal}/test/fixtures/performanceEntry/navigation.ts (100%) rename packages/{replay => replay-internal}/test/fixtures/performanceEntry/resource.ts (100%) rename packages/{replay => replay-internal}/test/fixtures/transaction.ts (100%) rename packages/{replay => replay-internal}/test/index.ts (100%) rename packages/{replay => replay-internal}/test/integration/autoSaveSession.test.ts (100%) rename packages/{replay => replay-internal}/test/integration/beforeAddRecordingEvent.test.ts (100%) rename packages/{replay => replay-internal}/test/integration/coreHandlers/handleAfterSendEvent.test.ts (100%) rename packages/{replay => replay-internal}/test/integration/coreHandlers/handleBeforeSendEvent.test.ts (100%) rename packages/{replay => replay-internal}/test/integration/coreHandlers/handleGlobalEvent.test.ts (100%) rename packages/{replay => replay-internal}/test/integration/errorSampleRate.test.ts (100%) rename packages/{replay => replay-internal}/test/integration/eventProcessors.test.ts (100%) rename packages/{replay => replay-internal}/test/integration/events.test.ts (100%) rename packages/{replay => replay-internal}/test/integration/flush.test.ts (100%) rename packages/{replay => replay-internal}/test/integration/getReplayId.test.ts (100%) rename packages/{replay => replay-internal}/test/integration/integrationSettings.test.ts (100%) rename packages/{replay => replay-internal}/test/integration/rateLimiting.test.ts (100%) rename packages/{replay => replay-internal}/test/integration/rrweb.test.ts (100%) rename packages/{replay => replay-internal}/test/integration/sampling.test.ts (100%) rename packages/{replay => replay-internal}/test/integration/sendReplayEvent.test.ts (100%) rename packages/{replay => replay-internal}/test/integration/session.test.ts (100%) rename packages/{replay => replay-internal}/test/integration/shouldFilterRequest.test.ts (100%) rename packages/{replay => replay-internal}/test/integration/stop.test.ts (100%) rename packages/{replay => replay-internal}/test/mocks/mockRrweb.ts (100%) rename packages/{replay => replay-internal}/test/mocks/mockSdk.ts (100%) rename packages/{replay => replay-internal}/test/mocks/resetSdkMock.ts (100%) rename packages/{replay => replay-internal}/test/types.ts (100%) rename packages/{replay => replay-internal}/test/unit/coreHandlers/handleBreadcrumbs.test.ts (100%) rename packages/{replay => replay-internal}/test/unit/coreHandlers/handleClick.test.ts (100%) rename packages/{replay => replay-internal}/test/unit/coreHandlers/handleDom.test.ts (100%) rename packages/{replay => replay-internal}/test/unit/coreHandlers/handleKeyboardEvent.test.ts (100%) rename packages/{replay => replay-internal}/test/unit/coreHandlers/handleNetworkBreadcrumbs.test.ts (100%) rename packages/{replay => replay-internal}/test/unit/coreHandlers/util/addBreadcrumbEvent.test.ts (100%) rename packages/{replay => replay-internal}/test/unit/coreHandlers/util/fetchUtils.test.ts (100%) rename packages/{replay => replay-internal}/test/unit/coreHandlers/util/getAttributesToRecord.test.ts (100%) rename packages/{replay => replay-internal}/test/unit/coreHandlers/util/networkUtils.test.ts (100%) rename packages/{replay => replay-internal}/test/unit/coreHandlers/util/xhrUtils.test.ts (100%) rename packages/{replay => replay-internal}/test/unit/eventBuffer/EventBufferArray.test.ts (100%) rename packages/{replay => replay-internal}/test/unit/eventBuffer/EventBufferCompressionWorker.test.ts (100%) rename packages/{replay => replay-internal}/test/unit/eventBuffer/EventBufferProxy.test.ts (100%) rename packages/{replay => replay-internal}/test/unit/multipleInstances.test.ts (100%) rename packages/{replay => replay-internal}/test/unit/session/createSession.test.ts (100%) rename packages/{replay => replay-internal}/test/unit/session/fetchSession.test.ts (100%) rename packages/{replay => replay-internal}/test/unit/session/loadOrCreateSession.test.ts (100%) rename packages/{replay => replay-internal}/test/unit/session/saveSession.test.ts (100%) rename packages/{replay => replay-internal}/test/unit/session/sessionSampling.test.ts (100%) rename packages/{replay => replay-internal}/test/unit/util/addEvent.test.ts (100%) rename packages/{replay => replay-internal}/test/unit/util/createPerformanceEntry.test.ts (100%) rename packages/{replay => replay-internal}/test/unit/util/createReplayEnvelope.test.ts (100%) rename packages/{replay => replay-internal}/test/unit/util/debounce.test.ts (100%) rename packages/{replay => replay-internal}/test/unit/util/getPrivacyOptions.test.ts (100%) rename packages/{replay => replay-internal}/test/unit/util/getReplay.test.ts (100%) rename packages/{replay => replay-internal}/test/unit/util/handleRecordingEmit.test.ts (100%) rename packages/{replay => replay-internal}/test/unit/util/isExpired.test.ts (100%) rename packages/{replay => replay-internal}/test/unit/util/isSampled.test.ts (100%) rename packages/{replay => replay-internal}/test/unit/util/isSessionExpired.test.ts (100%) rename packages/{replay => replay-internal}/test/unit/util/maskAttribute.test.ts (100%) rename packages/{replay => replay-internal}/test/unit/util/prepareReplayEvent.test.ts (100%) rename packages/{replay => replay-internal}/test/unit/util/throttle.test.ts (100%) rename packages/{replay => replay-internal}/test/utils/TestClient.ts (100%) rename packages/{replay => replay-internal}/test/utils/compression.ts (100%) rename packages/{replay => replay-internal}/test/utils/getTestEvent.ts (100%) rename packages/{replay => replay-internal}/test/utils/setupReplayContainer.ts (100%) rename packages/{replay => replay-internal}/test/utils/use-fake-timers.ts (100%) rename packages/{replay => replay-internal}/tsconfig.json (100%) rename packages/{replay => replay-internal}/tsconfig.test.json (100%) rename packages/{replay => replay-internal}/tsconfig.types.json (100%) diff --git a/packages/replay/.eslintignore b/packages/replay-internal/.eslintignore similarity index 100% rename from packages/replay/.eslintignore rename to packages/replay-internal/.eslintignore diff --git a/packages/replay/.eslintrc.js b/packages/replay-internal/.eslintrc.js similarity index 100% rename from packages/replay/.eslintrc.js rename to packages/replay-internal/.eslintrc.js diff --git a/packages/replay/.gitignore b/packages/replay-internal/.gitignore similarity index 100% rename from packages/replay/.gitignore rename to packages/replay-internal/.gitignore diff --git a/packages/replay/CONTRIBUTING.md b/packages/replay-internal/CONTRIBUTING.md similarity index 100% rename from packages/replay/CONTRIBUTING.md rename to packages/replay-internal/CONTRIBUTING.md diff --git a/packages/replay/LICENSE b/packages/replay-internal/LICENSE similarity index 100% rename from packages/replay/LICENSE rename to packages/replay-internal/LICENSE diff --git a/packages/replay/MIGRATION.md b/packages/replay-internal/MIGRATION.md similarity index 100% rename from packages/replay/MIGRATION.md rename to packages/replay-internal/MIGRATION.md diff --git a/packages/replay/README.md b/packages/replay-internal/README.md similarity index 100% rename from packages/replay/README.md rename to packages/replay-internal/README.md diff --git a/packages/replay/jest.config.ts b/packages/replay-internal/jest.config.ts similarity index 100% rename from packages/replay/jest.config.ts rename to packages/replay-internal/jest.config.ts diff --git a/packages/replay/jest.setup.ts b/packages/replay-internal/jest.setup.ts similarity index 100% rename from packages/replay/jest.setup.ts rename to packages/replay-internal/jest.setup.ts diff --git a/packages/replay/package.json b/packages/replay-internal/package.json similarity index 100% rename from packages/replay/package.json rename to packages/replay-internal/package.json diff --git a/packages/replay/rollup.bundle.config.mjs b/packages/replay-internal/rollup.bundle.config.mjs similarity index 100% rename from packages/replay/rollup.bundle.config.mjs rename to packages/replay-internal/rollup.bundle.config.mjs diff --git a/packages/replay/rollup.npm.config.mjs b/packages/replay-internal/rollup.npm.config.mjs similarity index 100% rename from packages/replay/rollup.npm.config.mjs rename to packages/replay-internal/rollup.npm.config.mjs diff --git a/packages/replay/scripts/craft-pre-release.sh b/packages/replay-internal/scripts/craft-pre-release.sh similarity index 100% rename from packages/replay/scripts/craft-pre-release.sh rename to packages/replay-internal/scripts/craft-pre-release.sh diff --git a/packages/replay/src/constants.ts b/packages/replay-internal/src/constants.ts similarity index 100% rename from packages/replay/src/constants.ts rename to packages/replay-internal/src/constants.ts diff --git a/packages/replay/src/coreHandlers/handleAfterSendEvent.ts b/packages/replay-internal/src/coreHandlers/handleAfterSendEvent.ts similarity index 100% rename from packages/replay/src/coreHandlers/handleAfterSendEvent.ts rename to packages/replay-internal/src/coreHandlers/handleAfterSendEvent.ts diff --git a/packages/replay/src/coreHandlers/handleBeforeSendEvent.ts b/packages/replay-internal/src/coreHandlers/handleBeforeSendEvent.ts similarity index 100% rename from packages/replay/src/coreHandlers/handleBeforeSendEvent.ts rename to packages/replay-internal/src/coreHandlers/handleBeforeSendEvent.ts diff --git a/packages/replay/src/coreHandlers/handleBreadcrumbs.ts b/packages/replay-internal/src/coreHandlers/handleBreadcrumbs.ts similarity index 100% rename from packages/replay/src/coreHandlers/handleBreadcrumbs.ts rename to packages/replay-internal/src/coreHandlers/handleBreadcrumbs.ts diff --git a/packages/replay/src/coreHandlers/handleClick.ts b/packages/replay-internal/src/coreHandlers/handleClick.ts similarity index 100% rename from packages/replay/src/coreHandlers/handleClick.ts rename to packages/replay-internal/src/coreHandlers/handleClick.ts diff --git a/packages/replay/src/coreHandlers/handleDom.ts b/packages/replay-internal/src/coreHandlers/handleDom.ts similarity index 100% rename from packages/replay/src/coreHandlers/handleDom.ts rename to packages/replay-internal/src/coreHandlers/handleDom.ts diff --git a/packages/replay/src/coreHandlers/handleGlobalEvent.ts b/packages/replay-internal/src/coreHandlers/handleGlobalEvent.ts similarity index 100% rename from packages/replay/src/coreHandlers/handleGlobalEvent.ts rename to packages/replay-internal/src/coreHandlers/handleGlobalEvent.ts diff --git a/packages/replay/src/coreHandlers/handleHistory.ts b/packages/replay-internal/src/coreHandlers/handleHistory.ts similarity index 100% rename from packages/replay/src/coreHandlers/handleHistory.ts rename to packages/replay-internal/src/coreHandlers/handleHistory.ts diff --git a/packages/replay/src/coreHandlers/handleKeyboardEvent.ts b/packages/replay-internal/src/coreHandlers/handleKeyboardEvent.ts similarity index 100% rename from packages/replay/src/coreHandlers/handleKeyboardEvent.ts rename to packages/replay-internal/src/coreHandlers/handleKeyboardEvent.ts diff --git a/packages/replay/src/coreHandlers/handleNetworkBreadcrumbs.ts b/packages/replay-internal/src/coreHandlers/handleNetworkBreadcrumbs.ts similarity index 100% rename from packages/replay/src/coreHandlers/handleNetworkBreadcrumbs.ts rename to packages/replay-internal/src/coreHandlers/handleNetworkBreadcrumbs.ts diff --git a/packages/replay/src/coreHandlers/performanceObserver.ts b/packages/replay-internal/src/coreHandlers/performanceObserver.ts similarity index 100% rename from packages/replay/src/coreHandlers/performanceObserver.ts rename to packages/replay-internal/src/coreHandlers/performanceObserver.ts diff --git a/packages/replay/src/coreHandlers/util/addBreadcrumbEvent.ts b/packages/replay-internal/src/coreHandlers/util/addBreadcrumbEvent.ts similarity index 100% rename from packages/replay/src/coreHandlers/util/addBreadcrumbEvent.ts rename to packages/replay-internal/src/coreHandlers/util/addBreadcrumbEvent.ts diff --git a/packages/replay/src/coreHandlers/util/addFeedbackBreadcrumb.ts b/packages/replay-internal/src/coreHandlers/util/addFeedbackBreadcrumb.ts similarity index 100% rename from packages/replay/src/coreHandlers/util/addFeedbackBreadcrumb.ts rename to packages/replay-internal/src/coreHandlers/util/addFeedbackBreadcrumb.ts diff --git a/packages/replay/src/coreHandlers/util/addNetworkBreadcrumb.ts b/packages/replay-internal/src/coreHandlers/util/addNetworkBreadcrumb.ts similarity index 100% rename from packages/replay/src/coreHandlers/util/addNetworkBreadcrumb.ts rename to packages/replay-internal/src/coreHandlers/util/addNetworkBreadcrumb.ts diff --git a/packages/replay/src/coreHandlers/util/domUtils.ts b/packages/replay-internal/src/coreHandlers/util/domUtils.ts similarity index 100% rename from packages/replay/src/coreHandlers/util/domUtils.ts rename to packages/replay-internal/src/coreHandlers/util/domUtils.ts diff --git a/packages/replay/src/coreHandlers/util/fetchUtils.ts b/packages/replay-internal/src/coreHandlers/util/fetchUtils.ts similarity index 100% rename from packages/replay/src/coreHandlers/util/fetchUtils.ts rename to packages/replay-internal/src/coreHandlers/util/fetchUtils.ts diff --git a/packages/replay/src/coreHandlers/util/getAttributesToRecord.ts b/packages/replay-internal/src/coreHandlers/util/getAttributesToRecord.ts similarity index 100% rename from packages/replay/src/coreHandlers/util/getAttributesToRecord.ts rename to packages/replay-internal/src/coreHandlers/util/getAttributesToRecord.ts diff --git a/packages/replay/src/coreHandlers/util/networkUtils.ts b/packages/replay-internal/src/coreHandlers/util/networkUtils.ts similarity index 100% rename from packages/replay/src/coreHandlers/util/networkUtils.ts rename to packages/replay-internal/src/coreHandlers/util/networkUtils.ts diff --git a/packages/replay/src/coreHandlers/util/onWindowOpen.ts b/packages/replay-internal/src/coreHandlers/util/onWindowOpen.ts similarity index 100% rename from packages/replay/src/coreHandlers/util/onWindowOpen.ts rename to packages/replay-internal/src/coreHandlers/util/onWindowOpen.ts diff --git a/packages/replay/src/coreHandlers/util/shouldSampleForBufferEvent.ts b/packages/replay-internal/src/coreHandlers/util/shouldSampleForBufferEvent.ts similarity index 100% rename from packages/replay/src/coreHandlers/util/shouldSampleForBufferEvent.ts rename to packages/replay-internal/src/coreHandlers/util/shouldSampleForBufferEvent.ts diff --git a/packages/replay/src/coreHandlers/util/xhrUtils.ts b/packages/replay-internal/src/coreHandlers/util/xhrUtils.ts similarity index 100% rename from packages/replay/src/coreHandlers/util/xhrUtils.ts rename to packages/replay-internal/src/coreHandlers/util/xhrUtils.ts diff --git a/packages/replay/src/debug-build.ts b/packages/replay-internal/src/debug-build.ts similarity index 100% rename from packages/replay/src/debug-build.ts rename to packages/replay-internal/src/debug-build.ts diff --git a/packages/replay/src/eventBuffer/EventBufferArray.ts b/packages/replay-internal/src/eventBuffer/EventBufferArray.ts similarity index 100% rename from packages/replay/src/eventBuffer/EventBufferArray.ts rename to packages/replay-internal/src/eventBuffer/EventBufferArray.ts diff --git a/packages/replay/src/eventBuffer/EventBufferCompressionWorker.ts b/packages/replay-internal/src/eventBuffer/EventBufferCompressionWorker.ts similarity index 100% rename from packages/replay/src/eventBuffer/EventBufferCompressionWorker.ts rename to packages/replay-internal/src/eventBuffer/EventBufferCompressionWorker.ts diff --git a/packages/replay/src/eventBuffer/EventBufferProxy.ts b/packages/replay-internal/src/eventBuffer/EventBufferProxy.ts similarity index 100% rename from packages/replay/src/eventBuffer/EventBufferProxy.ts rename to packages/replay-internal/src/eventBuffer/EventBufferProxy.ts diff --git a/packages/replay/src/eventBuffer/WorkerHandler.ts b/packages/replay-internal/src/eventBuffer/WorkerHandler.ts similarity index 100% rename from packages/replay/src/eventBuffer/WorkerHandler.ts rename to packages/replay-internal/src/eventBuffer/WorkerHandler.ts diff --git a/packages/replay/src/eventBuffer/error.ts b/packages/replay-internal/src/eventBuffer/error.ts similarity index 100% rename from packages/replay/src/eventBuffer/error.ts rename to packages/replay-internal/src/eventBuffer/error.ts diff --git a/packages/replay/src/eventBuffer/index.ts b/packages/replay-internal/src/eventBuffer/index.ts similarity index 100% rename from packages/replay/src/eventBuffer/index.ts rename to packages/replay-internal/src/eventBuffer/index.ts diff --git a/packages/replay/src/index.ts b/packages/replay-internal/src/index.ts similarity index 100% rename from packages/replay/src/index.ts rename to packages/replay-internal/src/index.ts diff --git a/packages/replay/src/integration.ts b/packages/replay-internal/src/integration.ts similarity index 100% rename from packages/replay/src/integration.ts rename to packages/replay-internal/src/integration.ts diff --git a/packages/replay/src/replay.ts b/packages/replay-internal/src/replay.ts similarity index 100% rename from packages/replay/src/replay.ts rename to packages/replay-internal/src/replay.ts diff --git a/packages/replay/src/session/Session.ts b/packages/replay-internal/src/session/Session.ts similarity index 100% rename from packages/replay/src/session/Session.ts rename to packages/replay-internal/src/session/Session.ts diff --git a/packages/replay/src/session/clearSession.ts b/packages/replay-internal/src/session/clearSession.ts similarity index 100% rename from packages/replay/src/session/clearSession.ts rename to packages/replay-internal/src/session/clearSession.ts diff --git a/packages/replay/src/session/createSession.ts b/packages/replay-internal/src/session/createSession.ts similarity index 100% rename from packages/replay/src/session/createSession.ts rename to packages/replay-internal/src/session/createSession.ts diff --git a/packages/replay/src/session/fetchSession.ts b/packages/replay-internal/src/session/fetchSession.ts similarity index 100% rename from packages/replay/src/session/fetchSession.ts rename to packages/replay-internal/src/session/fetchSession.ts diff --git a/packages/replay/src/session/index.ts b/packages/replay-internal/src/session/index.ts similarity index 100% rename from packages/replay/src/session/index.ts rename to packages/replay-internal/src/session/index.ts diff --git a/packages/replay/src/session/loadOrCreateSession.ts b/packages/replay-internal/src/session/loadOrCreateSession.ts similarity index 100% rename from packages/replay/src/session/loadOrCreateSession.ts rename to packages/replay-internal/src/session/loadOrCreateSession.ts diff --git a/packages/replay/src/session/saveSession.ts b/packages/replay-internal/src/session/saveSession.ts similarity index 100% rename from packages/replay/src/session/saveSession.ts rename to packages/replay-internal/src/session/saveSession.ts diff --git a/packages/replay/src/session/shouldRefreshSession.ts b/packages/replay-internal/src/session/shouldRefreshSession.ts similarity index 100% rename from packages/replay/src/session/shouldRefreshSession.ts rename to packages/replay-internal/src/session/shouldRefreshSession.ts diff --git a/packages/replay/src/types/index.ts b/packages/replay-internal/src/types/index.ts similarity index 100% rename from packages/replay/src/types/index.ts rename to packages/replay-internal/src/types/index.ts diff --git a/packages/replay/src/types/performance.ts b/packages/replay-internal/src/types/performance.ts similarity index 100% rename from packages/replay/src/types/performance.ts rename to packages/replay-internal/src/types/performance.ts diff --git a/packages/replay/src/types/replay.ts b/packages/replay-internal/src/types/replay.ts similarity index 100% rename from packages/replay/src/types/replay.ts rename to packages/replay-internal/src/types/replay.ts diff --git a/packages/replay/src/types/replayFrame.ts b/packages/replay-internal/src/types/replayFrame.ts similarity index 100% rename from packages/replay/src/types/replayFrame.ts rename to packages/replay-internal/src/types/replayFrame.ts diff --git a/packages/replay/src/types/request.ts b/packages/replay-internal/src/types/request.ts similarity index 100% rename from packages/replay/src/types/request.ts rename to packages/replay-internal/src/types/request.ts diff --git a/packages/replay/src/types/rrweb.ts b/packages/replay-internal/src/types/rrweb.ts similarity index 100% rename from packages/replay/src/types/rrweb.ts rename to packages/replay-internal/src/types/rrweb.ts diff --git a/packages/replay/src/util/addEvent.ts b/packages/replay-internal/src/util/addEvent.ts similarity index 100% rename from packages/replay/src/util/addEvent.ts rename to packages/replay-internal/src/util/addEvent.ts diff --git a/packages/replay/src/util/addGlobalListeners.ts b/packages/replay-internal/src/util/addGlobalListeners.ts similarity index 100% rename from packages/replay/src/util/addGlobalListeners.ts rename to packages/replay-internal/src/util/addGlobalListeners.ts diff --git a/packages/replay/src/util/addMemoryEntry.ts b/packages/replay-internal/src/util/addMemoryEntry.ts similarity index 100% rename from packages/replay/src/util/addMemoryEntry.ts rename to packages/replay-internal/src/util/addMemoryEntry.ts diff --git a/packages/replay/src/util/createBreadcrumb.ts b/packages/replay-internal/src/util/createBreadcrumb.ts similarity index 100% rename from packages/replay/src/util/createBreadcrumb.ts rename to packages/replay-internal/src/util/createBreadcrumb.ts diff --git a/packages/replay/src/util/createPerformanceEntries.ts b/packages/replay-internal/src/util/createPerformanceEntries.ts similarity index 100% rename from packages/replay/src/util/createPerformanceEntries.ts rename to packages/replay-internal/src/util/createPerformanceEntries.ts diff --git a/packages/replay/src/util/createPerformanceSpans.ts b/packages/replay-internal/src/util/createPerformanceSpans.ts similarity index 100% rename from packages/replay/src/util/createPerformanceSpans.ts rename to packages/replay-internal/src/util/createPerformanceSpans.ts diff --git a/packages/replay/src/util/createReplayEnvelope.ts b/packages/replay-internal/src/util/createReplayEnvelope.ts similarity index 100% rename from packages/replay/src/util/createReplayEnvelope.ts rename to packages/replay-internal/src/util/createReplayEnvelope.ts diff --git a/packages/replay/src/util/debounce.ts b/packages/replay-internal/src/util/debounce.ts similarity index 100% rename from packages/replay/src/util/debounce.ts rename to packages/replay-internal/src/util/debounce.ts diff --git a/packages/replay/src/util/eventUtils.ts b/packages/replay-internal/src/util/eventUtils.ts similarity index 100% rename from packages/replay/src/util/eventUtils.ts rename to packages/replay-internal/src/util/eventUtils.ts diff --git a/packages/replay/src/util/getPrivacyOptions.ts b/packages/replay-internal/src/util/getPrivacyOptions.ts similarity index 100% rename from packages/replay/src/util/getPrivacyOptions.ts rename to packages/replay-internal/src/util/getPrivacyOptions.ts diff --git a/packages/replay/src/util/getReplay.ts b/packages/replay-internal/src/util/getReplay.ts similarity index 100% rename from packages/replay/src/util/getReplay.ts rename to packages/replay-internal/src/util/getReplay.ts diff --git a/packages/replay/src/util/handleRecordingEmit.ts b/packages/replay-internal/src/util/handleRecordingEmit.ts similarity index 100% rename from packages/replay/src/util/handleRecordingEmit.ts rename to packages/replay-internal/src/util/handleRecordingEmit.ts diff --git a/packages/replay/src/util/hasSessionStorage.ts b/packages/replay-internal/src/util/hasSessionStorage.ts similarity index 100% rename from packages/replay/src/util/hasSessionStorage.ts rename to packages/replay-internal/src/util/hasSessionStorage.ts diff --git a/packages/replay/src/util/isExpired.ts b/packages/replay-internal/src/util/isExpired.ts similarity index 100% rename from packages/replay/src/util/isExpired.ts rename to packages/replay-internal/src/util/isExpired.ts diff --git a/packages/replay/src/util/isRrwebError.ts b/packages/replay-internal/src/util/isRrwebError.ts similarity index 100% rename from packages/replay/src/util/isRrwebError.ts rename to packages/replay-internal/src/util/isRrwebError.ts diff --git a/packages/replay/src/util/isSampled.ts b/packages/replay-internal/src/util/isSampled.ts similarity index 100% rename from packages/replay/src/util/isSampled.ts rename to packages/replay-internal/src/util/isSampled.ts diff --git a/packages/replay/src/util/isSessionExpired.ts b/packages/replay-internal/src/util/isSessionExpired.ts similarity index 100% rename from packages/replay/src/util/isSessionExpired.ts rename to packages/replay-internal/src/util/isSessionExpired.ts diff --git a/packages/replay/src/util/log.ts b/packages/replay-internal/src/util/log.ts similarity index 100% rename from packages/replay/src/util/log.ts rename to packages/replay-internal/src/util/log.ts diff --git a/packages/replay/src/util/maskAttribute.ts b/packages/replay-internal/src/util/maskAttribute.ts similarity index 100% rename from packages/replay/src/util/maskAttribute.ts rename to packages/replay-internal/src/util/maskAttribute.ts diff --git a/packages/replay/src/util/prepareRecordingData.ts b/packages/replay-internal/src/util/prepareRecordingData.ts similarity index 100% rename from packages/replay/src/util/prepareRecordingData.ts rename to packages/replay-internal/src/util/prepareRecordingData.ts diff --git a/packages/replay/src/util/prepareReplayEvent.ts b/packages/replay-internal/src/util/prepareReplayEvent.ts similarity index 100% rename from packages/replay/src/util/prepareReplayEvent.ts rename to packages/replay-internal/src/util/prepareReplayEvent.ts diff --git a/packages/replay/src/util/sendReplay.ts b/packages/replay-internal/src/util/sendReplay.ts similarity index 100% rename from packages/replay/src/util/sendReplay.ts rename to packages/replay-internal/src/util/sendReplay.ts diff --git a/packages/replay/src/util/sendReplayRequest.ts b/packages/replay-internal/src/util/sendReplayRequest.ts similarity index 100% rename from packages/replay/src/util/sendReplayRequest.ts rename to packages/replay-internal/src/util/sendReplayRequest.ts diff --git a/packages/replay/src/util/shouldFilterRequest.ts b/packages/replay-internal/src/util/shouldFilterRequest.ts similarity index 100% rename from packages/replay/src/util/shouldFilterRequest.ts rename to packages/replay-internal/src/util/shouldFilterRequest.ts diff --git a/packages/replay/src/util/throttle.ts b/packages/replay-internal/src/util/throttle.ts similarity index 100% rename from packages/replay/src/util/throttle.ts rename to packages/replay-internal/src/util/throttle.ts diff --git a/packages/replay/src/util/timestamp.ts b/packages/replay-internal/src/util/timestamp.ts similarity index 100% rename from packages/replay/src/util/timestamp.ts rename to packages/replay-internal/src/util/timestamp.ts diff --git a/packages/replay/test/fixtures/error.ts b/packages/replay-internal/test/fixtures/error.ts similarity index 100% rename from packages/replay/test/fixtures/error.ts rename to packages/replay-internal/test/fixtures/error.ts diff --git a/packages/replay/test/fixtures/fixJson/1_completeJson.json b/packages/replay-internal/test/fixtures/fixJson/1_completeJson.json similarity index 100% rename from packages/replay/test/fixtures/fixJson/1_completeJson.json rename to packages/replay-internal/test/fixtures/fixJson/1_completeJson.json diff --git a/packages/replay/test/fixtures/fixJson/1_incompleteJson.txt b/packages/replay-internal/test/fixtures/fixJson/1_incompleteJson.txt similarity index 100% rename from packages/replay/test/fixtures/fixJson/1_incompleteJson.txt rename to packages/replay-internal/test/fixtures/fixJson/1_incompleteJson.txt diff --git a/packages/replay/test/fixtures/fixJson/2_completeJson.json b/packages/replay-internal/test/fixtures/fixJson/2_completeJson.json similarity index 100% rename from packages/replay/test/fixtures/fixJson/2_completeJson.json rename to packages/replay-internal/test/fixtures/fixJson/2_completeJson.json diff --git a/packages/replay/test/fixtures/fixJson/2_incompleteJson.txt b/packages/replay-internal/test/fixtures/fixJson/2_incompleteJson.txt similarity index 100% rename from packages/replay/test/fixtures/fixJson/2_incompleteJson.txt rename to packages/replay-internal/test/fixtures/fixJson/2_incompleteJson.txt diff --git a/packages/replay/test/fixtures/performanceEntry/navigation.ts b/packages/replay-internal/test/fixtures/performanceEntry/navigation.ts similarity index 100% rename from packages/replay/test/fixtures/performanceEntry/navigation.ts rename to packages/replay-internal/test/fixtures/performanceEntry/navigation.ts diff --git a/packages/replay/test/fixtures/performanceEntry/resource.ts b/packages/replay-internal/test/fixtures/performanceEntry/resource.ts similarity index 100% rename from packages/replay/test/fixtures/performanceEntry/resource.ts rename to packages/replay-internal/test/fixtures/performanceEntry/resource.ts diff --git a/packages/replay/test/fixtures/transaction.ts b/packages/replay-internal/test/fixtures/transaction.ts similarity index 100% rename from packages/replay/test/fixtures/transaction.ts rename to packages/replay-internal/test/fixtures/transaction.ts diff --git a/packages/replay/test/index.ts b/packages/replay-internal/test/index.ts similarity index 100% rename from packages/replay/test/index.ts rename to packages/replay-internal/test/index.ts diff --git a/packages/replay/test/integration/autoSaveSession.test.ts b/packages/replay-internal/test/integration/autoSaveSession.test.ts similarity index 100% rename from packages/replay/test/integration/autoSaveSession.test.ts rename to packages/replay-internal/test/integration/autoSaveSession.test.ts diff --git a/packages/replay/test/integration/beforeAddRecordingEvent.test.ts b/packages/replay-internal/test/integration/beforeAddRecordingEvent.test.ts similarity index 100% rename from packages/replay/test/integration/beforeAddRecordingEvent.test.ts rename to packages/replay-internal/test/integration/beforeAddRecordingEvent.test.ts diff --git a/packages/replay/test/integration/coreHandlers/handleAfterSendEvent.test.ts b/packages/replay-internal/test/integration/coreHandlers/handleAfterSendEvent.test.ts similarity index 100% rename from packages/replay/test/integration/coreHandlers/handleAfterSendEvent.test.ts rename to packages/replay-internal/test/integration/coreHandlers/handleAfterSendEvent.test.ts diff --git a/packages/replay/test/integration/coreHandlers/handleBeforeSendEvent.test.ts b/packages/replay-internal/test/integration/coreHandlers/handleBeforeSendEvent.test.ts similarity index 100% rename from packages/replay/test/integration/coreHandlers/handleBeforeSendEvent.test.ts rename to packages/replay-internal/test/integration/coreHandlers/handleBeforeSendEvent.test.ts diff --git a/packages/replay/test/integration/coreHandlers/handleGlobalEvent.test.ts b/packages/replay-internal/test/integration/coreHandlers/handleGlobalEvent.test.ts similarity index 100% rename from packages/replay/test/integration/coreHandlers/handleGlobalEvent.test.ts rename to packages/replay-internal/test/integration/coreHandlers/handleGlobalEvent.test.ts diff --git a/packages/replay/test/integration/errorSampleRate.test.ts b/packages/replay-internal/test/integration/errorSampleRate.test.ts similarity index 100% rename from packages/replay/test/integration/errorSampleRate.test.ts rename to packages/replay-internal/test/integration/errorSampleRate.test.ts diff --git a/packages/replay/test/integration/eventProcessors.test.ts b/packages/replay-internal/test/integration/eventProcessors.test.ts similarity index 100% rename from packages/replay/test/integration/eventProcessors.test.ts rename to packages/replay-internal/test/integration/eventProcessors.test.ts diff --git a/packages/replay/test/integration/events.test.ts b/packages/replay-internal/test/integration/events.test.ts similarity index 100% rename from packages/replay/test/integration/events.test.ts rename to packages/replay-internal/test/integration/events.test.ts diff --git a/packages/replay/test/integration/flush.test.ts b/packages/replay-internal/test/integration/flush.test.ts similarity index 100% rename from packages/replay/test/integration/flush.test.ts rename to packages/replay-internal/test/integration/flush.test.ts diff --git a/packages/replay/test/integration/getReplayId.test.ts b/packages/replay-internal/test/integration/getReplayId.test.ts similarity index 100% rename from packages/replay/test/integration/getReplayId.test.ts rename to packages/replay-internal/test/integration/getReplayId.test.ts diff --git a/packages/replay/test/integration/integrationSettings.test.ts b/packages/replay-internal/test/integration/integrationSettings.test.ts similarity index 100% rename from packages/replay/test/integration/integrationSettings.test.ts rename to packages/replay-internal/test/integration/integrationSettings.test.ts diff --git a/packages/replay/test/integration/rateLimiting.test.ts b/packages/replay-internal/test/integration/rateLimiting.test.ts similarity index 100% rename from packages/replay/test/integration/rateLimiting.test.ts rename to packages/replay-internal/test/integration/rateLimiting.test.ts diff --git a/packages/replay/test/integration/rrweb.test.ts b/packages/replay-internal/test/integration/rrweb.test.ts similarity index 100% rename from packages/replay/test/integration/rrweb.test.ts rename to packages/replay-internal/test/integration/rrweb.test.ts diff --git a/packages/replay/test/integration/sampling.test.ts b/packages/replay-internal/test/integration/sampling.test.ts similarity index 100% rename from packages/replay/test/integration/sampling.test.ts rename to packages/replay-internal/test/integration/sampling.test.ts diff --git a/packages/replay/test/integration/sendReplayEvent.test.ts b/packages/replay-internal/test/integration/sendReplayEvent.test.ts similarity index 100% rename from packages/replay/test/integration/sendReplayEvent.test.ts rename to packages/replay-internal/test/integration/sendReplayEvent.test.ts diff --git a/packages/replay/test/integration/session.test.ts b/packages/replay-internal/test/integration/session.test.ts similarity index 100% rename from packages/replay/test/integration/session.test.ts rename to packages/replay-internal/test/integration/session.test.ts diff --git a/packages/replay/test/integration/shouldFilterRequest.test.ts b/packages/replay-internal/test/integration/shouldFilterRequest.test.ts similarity index 100% rename from packages/replay/test/integration/shouldFilterRequest.test.ts rename to packages/replay-internal/test/integration/shouldFilterRequest.test.ts diff --git a/packages/replay/test/integration/stop.test.ts b/packages/replay-internal/test/integration/stop.test.ts similarity index 100% rename from packages/replay/test/integration/stop.test.ts rename to packages/replay-internal/test/integration/stop.test.ts diff --git a/packages/replay/test/mocks/mockRrweb.ts b/packages/replay-internal/test/mocks/mockRrweb.ts similarity index 100% rename from packages/replay/test/mocks/mockRrweb.ts rename to packages/replay-internal/test/mocks/mockRrweb.ts diff --git a/packages/replay/test/mocks/mockSdk.ts b/packages/replay-internal/test/mocks/mockSdk.ts similarity index 100% rename from packages/replay/test/mocks/mockSdk.ts rename to packages/replay-internal/test/mocks/mockSdk.ts diff --git a/packages/replay/test/mocks/resetSdkMock.ts b/packages/replay-internal/test/mocks/resetSdkMock.ts similarity index 100% rename from packages/replay/test/mocks/resetSdkMock.ts rename to packages/replay-internal/test/mocks/resetSdkMock.ts diff --git a/packages/replay/test/types.ts b/packages/replay-internal/test/types.ts similarity index 100% rename from packages/replay/test/types.ts rename to packages/replay-internal/test/types.ts diff --git a/packages/replay/test/unit/coreHandlers/handleBreadcrumbs.test.ts b/packages/replay-internal/test/unit/coreHandlers/handleBreadcrumbs.test.ts similarity index 100% rename from packages/replay/test/unit/coreHandlers/handleBreadcrumbs.test.ts rename to packages/replay-internal/test/unit/coreHandlers/handleBreadcrumbs.test.ts diff --git a/packages/replay/test/unit/coreHandlers/handleClick.test.ts b/packages/replay-internal/test/unit/coreHandlers/handleClick.test.ts similarity index 100% rename from packages/replay/test/unit/coreHandlers/handleClick.test.ts rename to packages/replay-internal/test/unit/coreHandlers/handleClick.test.ts diff --git a/packages/replay/test/unit/coreHandlers/handleDom.test.ts b/packages/replay-internal/test/unit/coreHandlers/handleDom.test.ts similarity index 100% rename from packages/replay/test/unit/coreHandlers/handleDom.test.ts rename to packages/replay-internal/test/unit/coreHandlers/handleDom.test.ts diff --git a/packages/replay/test/unit/coreHandlers/handleKeyboardEvent.test.ts b/packages/replay-internal/test/unit/coreHandlers/handleKeyboardEvent.test.ts similarity index 100% rename from packages/replay/test/unit/coreHandlers/handleKeyboardEvent.test.ts rename to packages/replay-internal/test/unit/coreHandlers/handleKeyboardEvent.test.ts diff --git a/packages/replay/test/unit/coreHandlers/handleNetworkBreadcrumbs.test.ts b/packages/replay-internal/test/unit/coreHandlers/handleNetworkBreadcrumbs.test.ts similarity index 100% rename from packages/replay/test/unit/coreHandlers/handleNetworkBreadcrumbs.test.ts rename to packages/replay-internal/test/unit/coreHandlers/handleNetworkBreadcrumbs.test.ts diff --git a/packages/replay/test/unit/coreHandlers/util/addBreadcrumbEvent.test.ts b/packages/replay-internal/test/unit/coreHandlers/util/addBreadcrumbEvent.test.ts similarity index 100% rename from packages/replay/test/unit/coreHandlers/util/addBreadcrumbEvent.test.ts rename to packages/replay-internal/test/unit/coreHandlers/util/addBreadcrumbEvent.test.ts diff --git a/packages/replay/test/unit/coreHandlers/util/fetchUtils.test.ts b/packages/replay-internal/test/unit/coreHandlers/util/fetchUtils.test.ts similarity index 100% rename from packages/replay/test/unit/coreHandlers/util/fetchUtils.test.ts rename to packages/replay-internal/test/unit/coreHandlers/util/fetchUtils.test.ts diff --git a/packages/replay/test/unit/coreHandlers/util/getAttributesToRecord.test.ts b/packages/replay-internal/test/unit/coreHandlers/util/getAttributesToRecord.test.ts similarity index 100% rename from packages/replay/test/unit/coreHandlers/util/getAttributesToRecord.test.ts rename to packages/replay-internal/test/unit/coreHandlers/util/getAttributesToRecord.test.ts diff --git a/packages/replay/test/unit/coreHandlers/util/networkUtils.test.ts b/packages/replay-internal/test/unit/coreHandlers/util/networkUtils.test.ts similarity index 100% rename from packages/replay/test/unit/coreHandlers/util/networkUtils.test.ts rename to packages/replay-internal/test/unit/coreHandlers/util/networkUtils.test.ts diff --git a/packages/replay/test/unit/coreHandlers/util/xhrUtils.test.ts b/packages/replay-internal/test/unit/coreHandlers/util/xhrUtils.test.ts similarity index 100% rename from packages/replay/test/unit/coreHandlers/util/xhrUtils.test.ts rename to packages/replay-internal/test/unit/coreHandlers/util/xhrUtils.test.ts diff --git a/packages/replay/test/unit/eventBuffer/EventBufferArray.test.ts b/packages/replay-internal/test/unit/eventBuffer/EventBufferArray.test.ts similarity index 100% rename from packages/replay/test/unit/eventBuffer/EventBufferArray.test.ts rename to packages/replay-internal/test/unit/eventBuffer/EventBufferArray.test.ts diff --git a/packages/replay/test/unit/eventBuffer/EventBufferCompressionWorker.test.ts b/packages/replay-internal/test/unit/eventBuffer/EventBufferCompressionWorker.test.ts similarity index 100% rename from packages/replay/test/unit/eventBuffer/EventBufferCompressionWorker.test.ts rename to packages/replay-internal/test/unit/eventBuffer/EventBufferCompressionWorker.test.ts diff --git a/packages/replay/test/unit/eventBuffer/EventBufferProxy.test.ts b/packages/replay-internal/test/unit/eventBuffer/EventBufferProxy.test.ts similarity index 100% rename from packages/replay/test/unit/eventBuffer/EventBufferProxy.test.ts rename to packages/replay-internal/test/unit/eventBuffer/EventBufferProxy.test.ts diff --git a/packages/replay/test/unit/multipleInstances.test.ts b/packages/replay-internal/test/unit/multipleInstances.test.ts similarity index 100% rename from packages/replay/test/unit/multipleInstances.test.ts rename to packages/replay-internal/test/unit/multipleInstances.test.ts diff --git a/packages/replay/test/unit/session/createSession.test.ts b/packages/replay-internal/test/unit/session/createSession.test.ts similarity index 100% rename from packages/replay/test/unit/session/createSession.test.ts rename to packages/replay-internal/test/unit/session/createSession.test.ts diff --git a/packages/replay/test/unit/session/fetchSession.test.ts b/packages/replay-internal/test/unit/session/fetchSession.test.ts similarity index 100% rename from packages/replay/test/unit/session/fetchSession.test.ts rename to packages/replay-internal/test/unit/session/fetchSession.test.ts diff --git a/packages/replay/test/unit/session/loadOrCreateSession.test.ts b/packages/replay-internal/test/unit/session/loadOrCreateSession.test.ts similarity index 100% rename from packages/replay/test/unit/session/loadOrCreateSession.test.ts rename to packages/replay-internal/test/unit/session/loadOrCreateSession.test.ts diff --git a/packages/replay/test/unit/session/saveSession.test.ts b/packages/replay-internal/test/unit/session/saveSession.test.ts similarity index 100% rename from packages/replay/test/unit/session/saveSession.test.ts rename to packages/replay-internal/test/unit/session/saveSession.test.ts diff --git a/packages/replay/test/unit/session/sessionSampling.test.ts b/packages/replay-internal/test/unit/session/sessionSampling.test.ts similarity index 100% rename from packages/replay/test/unit/session/sessionSampling.test.ts rename to packages/replay-internal/test/unit/session/sessionSampling.test.ts diff --git a/packages/replay/test/unit/util/addEvent.test.ts b/packages/replay-internal/test/unit/util/addEvent.test.ts similarity index 100% rename from packages/replay/test/unit/util/addEvent.test.ts rename to packages/replay-internal/test/unit/util/addEvent.test.ts diff --git a/packages/replay/test/unit/util/createPerformanceEntry.test.ts b/packages/replay-internal/test/unit/util/createPerformanceEntry.test.ts similarity index 100% rename from packages/replay/test/unit/util/createPerformanceEntry.test.ts rename to packages/replay-internal/test/unit/util/createPerformanceEntry.test.ts diff --git a/packages/replay/test/unit/util/createReplayEnvelope.test.ts b/packages/replay-internal/test/unit/util/createReplayEnvelope.test.ts similarity index 100% rename from packages/replay/test/unit/util/createReplayEnvelope.test.ts rename to packages/replay-internal/test/unit/util/createReplayEnvelope.test.ts diff --git a/packages/replay/test/unit/util/debounce.test.ts b/packages/replay-internal/test/unit/util/debounce.test.ts similarity index 100% rename from packages/replay/test/unit/util/debounce.test.ts rename to packages/replay-internal/test/unit/util/debounce.test.ts diff --git a/packages/replay/test/unit/util/getPrivacyOptions.test.ts b/packages/replay-internal/test/unit/util/getPrivacyOptions.test.ts similarity index 100% rename from packages/replay/test/unit/util/getPrivacyOptions.test.ts rename to packages/replay-internal/test/unit/util/getPrivacyOptions.test.ts diff --git a/packages/replay/test/unit/util/getReplay.test.ts b/packages/replay-internal/test/unit/util/getReplay.test.ts similarity index 100% rename from packages/replay/test/unit/util/getReplay.test.ts rename to packages/replay-internal/test/unit/util/getReplay.test.ts diff --git a/packages/replay/test/unit/util/handleRecordingEmit.test.ts b/packages/replay-internal/test/unit/util/handleRecordingEmit.test.ts similarity index 100% rename from packages/replay/test/unit/util/handleRecordingEmit.test.ts rename to packages/replay-internal/test/unit/util/handleRecordingEmit.test.ts diff --git a/packages/replay/test/unit/util/isExpired.test.ts b/packages/replay-internal/test/unit/util/isExpired.test.ts similarity index 100% rename from packages/replay/test/unit/util/isExpired.test.ts rename to packages/replay-internal/test/unit/util/isExpired.test.ts diff --git a/packages/replay/test/unit/util/isSampled.test.ts b/packages/replay-internal/test/unit/util/isSampled.test.ts similarity index 100% rename from packages/replay/test/unit/util/isSampled.test.ts rename to packages/replay-internal/test/unit/util/isSampled.test.ts diff --git a/packages/replay/test/unit/util/isSessionExpired.test.ts b/packages/replay-internal/test/unit/util/isSessionExpired.test.ts similarity index 100% rename from packages/replay/test/unit/util/isSessionExpired.test.ts rename to packages/replay-internal/test/unit/util/isSessionExpired.test.ts diff --git a/packages/replay/test/unit/util/maskAttribute.test.ts b/packages/replay-internal/test/unit/util/maskAttribute.test.ts similarity index 100% rename from packages/replay/test/unit/util/maskAttribute.test.ts rename to packages/replay-internal/test/unit/util/maskAttribute.test.ts diff --git a/packages/replay/test/unit/util/prepareReplayEvent.test.ts b/packages/replay-internal/test/unit/util/prepareReplayEvent.test.ts similarity index 100% rename from packages/replay/test/unit/util/prepareReplayEvent.test.ts rename to packages/replay-internal/test/unit/util/prepareReplayEvent.test.ts diff --git a/packages/replay/test/unit/util/throttle.test.ts b/packages/replay-internal/test/unit/util/throttle.test.ts similarity index 100% rename from packages/replay/test/unit/util/throttle.test.ts rename to packages/replay-internal/test/unit/util/throttle.test.ts diff --git a/packages/replay/test/utils/TestClient.ts b/packages/replay-internal/test/utils/TestClient.ts similarity index 100% rename from packages/replay/test/utils/TestClient.ts rename to packages/replay-internal/test/utils/TestClient.ts diff --git a/packages/replay/test/utils/compression.ts b/packages/replay-internal/test/utils/compression.ts similarity index 100% rename from packages/replay/test/utils/compression.ts rename to packages/replay-internal/test/utils/compression.ts diff --git a/packages/replay/test/utils/getTestEvent.ts b/packages/replay-internal/test/utils/getTestEvent.ts similarity index 100% rename from packages/replay/test/utils/getTestEvent.ts rename to packages/replay-internal/test/utils/getTestEvent.ts diff --git a/packages/replay/test/utils/setupReplayContainer.ts b/packages/replay-internal/test/utils/setupReplayContainer.ts similarity index 100% rename from packages/replay/test/utils/setupReplayContainer.ts rename to packages/replay-internal/test/utils/setupReplayContainer.ts diff --git a/packages/replay/test/utils/use-fake-timers.ts b/packages/replay-internal/test/utils/use-fake-timers.ts similarity index 100% rename from packages/replay/test/utils/use-fake-timers.ts rename to packages/replay-internal/test/utils/use-fake-timers.ts diff --git a/packages/replay/tsconfig.json b/packages/replay-internal/tsconfig.json similarity index 100% rename from packages/replay/tsconfig.json rename to packages/replay-internal/tsconfig.json diff --git a/packages/replay/tsconfig.test.json b/packages/replay-internal/tsconfig.test.json similarity index 100% rename from packages/replay/tsconfig.test.json rename to packages/replay-internal/tsconfig.test.json diff --git a/packages/replay/tsconfig.types.json b/packages/replay-internal/tsconfig.types.json similarity index 100% rename from packages/replay/tsconfig.types.json rename to packages/replay-internal/tsconfig.types.json From 66715c4b89796e521ccb8deb5d9e3d28c9f8f4a3 Mon Sep 17 00:00:00 2001 From: s1gr1d Date: Tue, 19 Mar 2024 15:20:17 +0100 Subject: [PATCH 2/4] rename occurences --- .craft.yml | 12 +- .../suites/replay/bufferMode/test.ts | 4 +- .../captureReplayFromReplayPackage/init.js | 2 +- .../captureReplayFromReplayPackage/test.ts | 2 +- .../utils/generatePlugin.ts | 2 +- .../utils/replayHelpers.ts | 8 +- .../test-applications/generic-ts3.8/index.ts | 4 +- .../generic-ts3.8/package.json | 2 +- package.json | 1 + packages/browser/package.json | 1 + packages/browser/src/index.bundle.replay.ts | 2 +- .../index.bundle.tracing.replay.feedback.ts | 2 +- .../src/index.bundle.tracing.replay.ts | 2 +- packages/browser/src/index.ts | 4 +- packages/nextjs/test/integration/package.json | 2 +- packages/remix/test/integration/package.json | 2 +- packages/replay-canvas/CONTRIBUTING.md | 2 +- packages/replay-canvas/src/canvas.ts | 2 +- packages/replay-internal/CONTRIBUTING.md | 2 +- packages/replay-internal/README.md | 2 +- packages/replay-internal/package.json | 2 +- .../replay-internal/rollup.bundle.config.mjs | 2 +- packages/replay-worker/README.md | 2 +- packages/replay-worker/package.json | 2 +- packages/replay/.eslintignore | 6 + packages/replay/.eslintrc.js | 39 +++ packages/replay/.gitignore | 4 + packages/replay/CONTRIBUTING.md | 7 + packages/replay/LICENSE | 14 + .../{replay-internal => replay}/MIGRATION.md | 0 packages/replay/README.md | 266 ++++++++++++++++++ packages/replay/package.json | 88 ++++++ packages/replay/rollup.bundle.config.mjs | 12 + packages/replay/rollup.npm.config.mjs | 16 ++ packages/replay/src/index.ts | 60 ++++ packages/replay/tsconfig.json | 7 + packages/replay/tsconfig.types.json | 10 + scripts/node-unit-tests.ts | 1 + 38 files changed, 567 insertions(+), 31 deletions(-) create mode 100644 packages/replay/.eslintignore create mode 100644 packages/replay/.eslintrc.js create mode 100644 packages/replay/.gitignore create mode 100644 packages/replay/CONTRIBUTING.md create mode 100644 packages/replay/LICENSE rename packages/{replay-internal => replay}/MIGRATION.md (100%) create mode 100644 packages/replay/README.md create mode 100644 packages/replay/package.json create mode 100644 packages/replay/rollup.bundle.config.mjs create mode 100644 packages/replay/rollup.npm.config.mjs create mode 100644 packages/replay/src/index.ts create mode 100644 packages/replay/tsconfig.json create mode 100644 packages/replay/tsconfig.types.json diff --git a/.craft.yml b/.craft.yml index f0db51dc1582..85a43d97ef6e 100644 --- a/.craft.yml +++ b/.craft.yml @@ -20,19 +20,23 @@ targets: - name: npm id: '@sentry-internal/tracing' includeNames: /^sentry-internal-tracing-\d.*\.tgz$/ - ## 1.5 Replay package (browser only) + ## 1.5 Replay Internal package (browser only) + - name: npm + id: '@sentry-internal/replay' + includeNames: /^sentry-internal-replay-\d.*\.tgz$/ + ## 1.6 Replay package (browser only) - name: npm id: '@sentry/replay' includeNames: /^sentry-replay-\d.*\.tgz$/ - ## 1.6. OpenTelemetry package + ## 1.7 OpenTelemetry package - name: npm id: '@sentry/opentelemetry' includeNames: /^sentry-opentelemetry-\d.*\.tgz$/ - ## 1.7 Feedback package (browser only) + ## 1.8 Feedback package (browser only) - name: npm id: '@sentry-internal/feedback' includeNames: /^sentry-internal-feedback-\d.*\.tgz$/ - ## 1.8 ReplayCanvas package (browser only) + ## 1.9 ReplayCanvas package (browser only) - name: npm id: '@sentry-internal/replay-canvas' includeNames: /^sentry-internal-replay-canvas-\d.*\.tgz$/ diff --git a/dev-packages/browser-integration-tests/suites/replay/bufferMode/test.ts b/dev-packages/browser-integration-tests/suites/replay/bufferMode/test.ts index 9c10b6777d67..09fc602d92b7 100644 --- a/dev-packages/browser-integration-tests/suites/replay/bufferMode/test.ts +++ b/dev-packages/browser-integration-tests/suites/replay/bufferMode/test.ts @@ -1,6 +1,6 @@ import { expect } from '@playwright/test'; -import type { replayIntegration as actualReplayIntegration } from '@sentry/replay'; -import type { ReplayContainer } from '@sentry/replay/build/npm/types/types'; +import type { replayIntegration as actualReplayIntegration } from '@sentry-internal/replay'; +import type { ReplayContainer } from '@sentry-internal/replay/build/npm/types/types'; import { sentryTest } from '../../../utils/fixtures'; import { envelopeRequestParser, waitForErrorRequest } from '../../../utils/helpers'; diff --git a/dev-packages/browser-integration-tests/suites/replay/captureReplayFromReplayPackage/init.js b/dev-packages/browser-integration-tests/suites/replay/captureReplayFromReplayPackage/init.js index f71ddfdaaa9b..659e7b4618b2 100644 --- a/dev-packages/browser-integration-tests/suites/replay/captureReplayFromReplayPackage/init.js +++ b/dev-packages/browser-integration-tests/suites/replay/captureReplayFromReplayPackage/init.js @@ -1,5 +1,5 @@ +import { replayIntegration } from '@sentry-internal/replay'; import * as Sentry from '@sentry/browser'; -import { replayIntegration } from '@sentry/replay'; window.Sentry = Sentry; window.Replay = replayIntegration({ diff --git a/dev-packages/browser-integration-tests/suites/replay/captureReplayFromReplayPackage/test.ts b/dev-packages/browser-integration-tests/suites/replay/captureReplayFromReplayPackage/test.ts index 2235853ab5cc..58260c4c577f 100644 --- a/dev-packages/browser-integration-tests/suites/replay/captureReplayFromReplayPackage/test.ts +++ b/dev-packages/browser-integration-tests/suites/replay/captureReplayFromReplayPackage/test.ts @@ -4,7 +4,7 @@ import { SDK_VERSION } from '@sentry/browser'; import { sentryTest } from '../../../utils/fixtures'; import { getReplayEvent, shouldSkipReplayTest, waitForReplayRequest } from '../../../utils/replayHelpers'; -sentryTest('should capture replays (@sentry/replay export)', async ({ getLocalTestPath, page }) => { +sentryTest('should capture replays (@sentry-internal/replay export)', async ({ getLocalTestPath, page }) => { if (shouldSkipReplayTest()) { sentryTest.skip(); } diff --git a/dev-packages/browser-integration-tests/utils/generatePlugin.ts b/dev-packages/browser-integration-tests/utils/generatePlugin.ts index f3875c561e74..d2907ae47af1 100644 --- a/dev-packages/browser-integration-tests/utils/generatePlugin.ts +++ b/dev-packages/browser-integration-tests/utils/generatePlugin.ts @@ -162,7 +162,7 @@ class SentryScenarioGenerationPlugin { ? { // To help Webpack resolve Sentry modules in `import` statements in cases where they're provided in bundles rather than in `node_modules` '@sentry/browser': 'Sentry', - '@sentry/replay': 'Sentry', + '@sentry-internal/replay': 'Sentry', '@sentry/wasm': 'Sentry', } : {}; diff --git a/dev-packages/browser-integration-tests/utils/replayHelpers.ts b/dev-packages/browser-integration-tests/utils/replayHelpers.ts index f0015d2dfb7f..36727664dce3 100644 --- a/dev-packages/browser-integration-tests/utils/replayHelpers.ts +++ b/dev-packages/browser-integration-tests/utils/replayHelpers.ts @@ -1,16 +1,16 @@ import type { Page, Request, Response } from '@playwright/test'; /* eslint-disable max-lines */ import type { ReplayCanvasIntegrationOptions } from '@sentry-internal/replay-canvas'; -import type { fullSnapshotEvent, incrementalSnapshotEvent } from '@sentry-internal/rrweb'; -import { EventType } from '@sentry-internal/rrweb'; -import type { ReplayEventWithTime } from '@sentry/browser'; import type { InternalEventContext, RecordingEvent, ReplayContainer, ReplayPluginOptions, Session, -} from '@sentry/replay/build/npm/types/types'; +} from '@sentry-internal/replay/build/npm/types/types'; +import type { fullSnapshotEvent, incrementalSnapshotEvent } from '@sentry-internal/rrweb'; +import { EventType } from '@sentry-internal/rrweb'; +import type { ReplayEventWithTime } from '@sentry/browser'; import type { Breadcrumb, Event, ReplayEvent, ReplayRecordingMode } from '@sentry/types'; import pako from 'pako'; diff --git a/dev-packages/e2e-tests/test-applications/generic-ts3.8/index.ts b/dev-packages/e2e-tests/test-applications/generic-ts3.8/index.ts index 241d82f715a0..0a78073e88ae 100644 --- a/dev-packages/e2e-tests/test-applications/generic-ts3.8/index.ts +++ b/dev-packages/e2e-tests/test-applications/generic-ts3.8/index.ts @@ -1,3 +1,5 @@ +// biome-ignore lint/nursery/noUnusedImports: +import * as _SentryReplay from '@sentry-internal/replay'; // biome-ignore lint/nursery/noUnusedImports: we need to import the SDK to ensure tsc check the types import * as _SentryBrowser from '@sentry/browser'; // biome-ignore lint/nursery/noUnusedImports: @@ -5,8 +7,6 @@ import * as _SentryCore from '@sentry/core'; // biome-ignore lint/nursery/noUnusedImports: import * as _SentryNode from '@sentry/node'; // biome-ignore lint/nursery/noUnusedImports: -import * as _SentryReplay from '@sentry/replay'; -// biome-ignore lint/nursery/noUnusedImports: import * as _SentryTypes from '@sentry/types'; // biome-ignore lint/nursery/noUnusedImports: import * as _SentryUtils from '@sentry/utils'; diff --git a/dev-packages/e2e-tests/test-applications/generic-ts3.8/package.json b/dev-packages/e2e-tests/test-applications/generic-ts3.8/package.json index acaa0a116ac0..d13bf86e7c64 100644 --- a/dev-packages/e2e-tests/test-applications/generic-ts3.8/package.json +++ b/dev-packages/e2e-tests/test-applications/generic-ts3.8/package.json @@ -16,7 +16,7 @@ "@sentry/browser": "latest || *", "@sentry/core": "latest || *", "@sentry/node": "latest || *", - "@sentry/replay": "latest || *", + "@sentry-internal/replay": "latest || *", "@sentry/types": "latest || *", "@sentry/utils": "latest || *", "@sentry/wasm": "latest || *" diff --git a/package.json b/package.json index 3bb2bd8b6c12..616eb9b791c9 100644 --- a/package.json +++ b/package.json @@ -66,6 +66,7 @@ "packages/react", "packages/remix", "packages/replay", + "packages/replay-internal", "packages/replay-canvas", "packages/replay-worker", "packages/svelte", diff --git a/packages/browser/package.json b/packages/browser/package.json index fe09ba59d12e..85e47c19cbee 100644 --- a/packages/browser/package.json +++ b/packages/browser/package.json @@ -43,6 +43,7 @@ }, "dependencies": { "@sentry-internal/feedback": "8.0.0-alpha.4", + "@sentry-internal/replay": "8.0.0-alpha.4", "@sentry-internal/replay-canvas": "8.0.0-alpha.4", "@sentry-internal/tracing": "8.0.0-alpha.4", "@sentry/core": "8.0.0-alpha.4", diff --git a/packages/browser/src/index.bundle.replay.ts b/packages/browser/src/index.bundle.replay.ts index 29bf0b320dea..ec0a50c92905 100644 --- a/packages/browser/src/index.bundle.replay.ts +++ b/packages/browser/src/index.bundle.replay.ts @@ -4,7 +4,7 @@ import { browserTracingIntegrationShim, feedbackIntegrationShim, } from '@sentry-internal/integration-shims'; -import { replayIntegration } from '@sentry/replay'; +import { replayIntegration } from '@sentry-internal/replay'; export * from './index.bundle.base'; export { diff --git a/packages/browser/src/index.bundle.tracing.replay.feedback.ts b/packages/browser/src/index.bundle.tracing.replay.feedback.ts index 1fe669f2393f..48064ca051bd 100644 --- a/packages/browser/src/index.bundle.tracing.replay.feedback.ts +++ b/packages/browser/src/index.bundle.tracing.replay.feedback.ts @@ -1,7 +1,7 @@ import { feedbackIntegration } from '@sentry-internal/feedback'; +import { replayIntegration } from '@sentry-internal/replay'; import { browserTracingIntegration } from '@sentry-internal/tracing'; import { addTracingExtensions } from '@sentry/core'; -import { replayIntegration } from '@sentry/replay'; // We are patching the global object with our hub extension methods addTracingExtensions(); diff --git a/packages/browser/src/index.bundle.tracing.replay.ts b/packages/browser/src/index.bundle.tracing.replay.ts index 7b09054540b8..52d082dd3438 100644 --- a/packages/browser/src/index.bundle.tracing.replay.ts +++ b/packages/browser/src/index.bundle.tracing.replay.ts @@ -1,7 +1,7 @@ import { feedbackIntegrationShim } from '@sentry-internal/integration-shims'; +import { replayIntegration } from '@sentry-internal/replay'; import { browserTracingIntegration } from '@sentry-internal/tracing'; import { addTracingExtensions } from '@sentry/core'; -import { replayIntegration } from '@sentry/replay'; // We are patching the global object with our hub extension methods addTracingExtensions(); diff --git a/packages/browser/src/index.ts b/packages/browser/src/index.ts index 4b5248f91683..66ea45739489 100644 --- a/packages/browser/src/index.ts +++ b/packages/browser/src/index.ts @@ -32,7 +32,7 @@ export { export { replayIntegration, getReplay, -} from '@sentry/replay'; +} from '@sentry-internal/replay'; export type { ReplayEventType, ReplayEventWithTime, @@ -43,7 +43,7 @@ export type { ReplayFrameEvent, ReplaySpanFrame, ReplaySpanFrameEvent, -} from '@sentry/replay'; +} from '@sentry-internal/replay'; export { replayCanvasIntegration } from '@sentry-internal/replay-canvas'; diff --git a/packages/nextjs/test/integration/package.json b/packages/nextjs/test/integration/package.json index afb23b2fb6f4..dc2f84c2a85b 100644 --- a/packages/nextjs/test/integration/package.json +++ b/packages/nextjs/test/integration/package.json @@ -31,7 +31,7 @@ "@sentry/node-experimental": "file:../../../node", "@sentry/opentelemetry": "file:../../../opentelemetry", "@sentry/react": "file:../../../react", - "@sentry/replay": "file:../../../replay", + "@sentry-internal/replay": "file:../../../replay-internal", "@sentry-internal/replay-canvas": "file:../../../replay-canvas", "@sentry-internal/tracing": "file:../../../tracing-internal", "@sentry-internal/feedback": "file:../../../feedback", diff --git a/packages/remix/test/integration/package.json b/packages/remix/test/integration/package.json index 3d7cb377a74b..e5a763551fe9 100644 --- a/packages/remix/test/integration/package.json +++ b/packages/remix/test/integration/package.json @@ -28,7 +28,7 @@ "@sentry/node": "file:../../../node-experimental", "@sentry/opentelemetry": "file:../../../opentelemetry", "@sentry/react": "file:../../../react", - "@sentry/replay": "file:../../../replay", + "@sentry-internal/replay": "file:../../../replay-internal", "@sentry-internal/replay-canvas": "file:../../../replay-canvas", "@sentry-internal/tracing": "file:../../../tracing-internal", "@sentry-internal/feedback": "file:../../../feedback", diff --git a/packages/replay-canvas/CONTRIBUTING.md b/packages/replay-canvas/CONTRIBUTING.md index 7b4a70f075ab..b82dc89e3d70 100644 --- a/packages/replay-canvas/CONTRIBUTING.md +++ b/packages/replay-canvas/CONTRIBUTING.md @@ -3,5 +3,5 @@ When [updating the `rrweb` dependency](https://github.com/getsentry/sentry-javascript/blob/a493aa6a46555b944c8d896a2164bcd8b11caaf5/packages/replay/package.json?plain=1#LL55), please be aware that -[`@sentry/replay`'s README.md](https://github.com/getsentry/sentry-javascript/blob/a493aa6a46555b944c8d896a2164bcd8b11caaf5/packages/replay/README.md?plain=1#LL204) +[`@sentry-internal/replay`'s README.md](https://github.com/getsentry/sentry-javascript/blob/a493aa6a46555b944c8d896a2164bcd8b11caaf5/packages/replay/README.md?plain=1#LL204) also needs to be updated. diff --git a/packages/replay-canvas/src/canvas.ts b/packages/replay-canvas/src/canvas.ts index 1a2ae0126be9..b9dcf8f4b75c 100644 --- a/packages/replay-canvas/src/canvas.ts +++ b/packages/replay-canvas/src/canvas.ts @@ -1,6 +1,6 @@ +import type { CanvasManagerInterface, CanvasManagerOptions } from '@sentry-internal/replay'; import { CanvasManager } from '@sentry-internal/rrweb'; import { defineIntegration } from '@sentry/core'; -import type { CanvasManagerInterface, CanvasManagerOptions } from '@sentry/replay'; import type { IntegrationFn } from '@sentry/types'; interface ReplayCanvasOptions { diff --git a/packages/replay-internal/CONTRIBUTING.md b/packages/replay-internal/CONTRIBUTING.md index 7b4a70f075ab..b82dc89e3d70 100644 --- a/packages/replay-internal/CONTRIBUTING.md +++ b/packages/replay-internal/CONTRIBUTING.md @@ -3,5 +3,5 @@ When [updating the `rrweb` dependency](https://github.com/getsentry/sentry-javascript/blob/a493aa6a46555b944c8d896a2164bcd8b11caaf5/packages/replay/package.json?plain=1#LL55), please be aware that -[`@sentry/replay`'s README.md](https://github.com/getsentry/sentry-javascript/blob/a493aa6a46555b944c8d896a2164bcd8b11caaf5/packages/replay/README.md?plain=1#LL204) +[`@sentry-internal/replay`'s README.md](https://github.com/getsentry/sentry-javascript/blob/a493aa6a46555b944c8d896a2164bcd8b11caaf5/packages/replay/README.md?plain=1#LL204) also needs to be updated. diff --git a/packages/replay-internal/README.md b/packages/replay-internal/README.md index 2583065c9787..5b04af516bf4 100644 --- a/packages/replay-internal/README.md +++ b/packages/replay-internal/README.md @@ -12,7 +12,7 @@ ## Pre-requisites -`@sentry/replay` requires Node 14+, and browsers newer than IE11. +`@sentry-internal/replay` requires Node 14+, and browsers newer than IE11. ## Installation diff --git a/packages/replay-internal/package.json b/packages/replay-internal/package.json index 340180d90183..20fc3a8cc8c3 100644 --- a/packages/replay-internal/package.json +++ b/packages/replay-internal/package.json @@ -1,5 +1,5 @@ { - "name": "@sentry/replay", + "name": "@sentry-internal/replay", "version": "8.0.0-alpha.4", "description": "User replays for Sentry", "main": "build/npm/cjs/index.js", diff --git a/packages/replay-internal/rollup.bundle.config.mjs b/packages/replay-internal/rollup.bundle.config.mjs index 8bdc41f8001c..9d1b9d412fed 100644 --- a/packages/replay-internal/rollup.bundle.config.mjs +++ b/packages/replay-internal/rollup.bundle.config.mjs @@ -3,7 +3,7 @@ import { makeBaseBundleConfig, makeBundleConfigVariants } from '@sentry-internal const baseBundleConfig = makeBaseBundleConfig({ bundleType: 'addon', entrypoints: ['src/index.ts'], - licenseTitle: '@sentry/replay', + licenseTitle: '@sentry-internal/replay', outputFileBase: () => 'bundles/replay', }); diff --git a/packages/replay-worker/README.md b/packages/replay-worker/README.md index 970a0b3defb1..b20669d362c4 100644 --- a/packages/replay-worker/README.md +++ b/packages/replay-worker/README.md @@ -6,7 +6,7 @@ # Sentry Session Replay Worker -This is an internal package that is used by @sentry/replay. It generates a web worker and converts it to a string, so +This is an internal package that is used by @sentry-internal/replay. It generates a web worker and converts it to a string, so that we can process it easier in replay. By extracting this into a dedicated (private, internal) package, we can streamline the build of replay. diff --git a/packages/replay-worker/package.json b/packages/replay-worker/package.json index e314845dcd90..b5cefdb110a9 100644 --- a/packages/replay-worker/package.json +++ b/packages/replay-worker/package.json @@ -1,7 +1,7 @@ { "name": "@sentry-internal/replay-worker", "version": "8.0.0-alpha.4", - "description": "Worker for @sentry/replay", + "description": "Worker for @sentry-internal/replay", "main": "build/npm/esm/index.js", "module": "build/npm/esm/index.js", "types": "build/npm/types/index.d.ts", diff --git a/packages/replay/.eslintignore b/packages/replay/.eslintignore new file mode 100644 index 000000000000..c76c6c2d64d1 --- /dev/null +++ b/packages/replay/.eslintignore @@ -0,0 +1,6 @@ +node_modules/ +build/ +demo/build/ +# TODO: Check if we can re-introduce linting in demo +demo +metrics diff --git a/packages/replay/.eslintrc.js b/packages/replay/.eslintrc.js new file mode 100644 index 000000000000..6af926975df0 --- /dev/null +++ b/packages/replay/.eslintrc.js @@ -0,0 +1,39 @@ +// Note: All paths are relative to the directory in which eslint is being run, rather than the directory where this file +// lives + +// ESLint config docs: https://eslint.org/docs/user-guide/configuring/ + +module.exports = { + extends: ['../../.eslintrc.js'], + overrides: [ + { + files: ['src/**/*.ts'], + }, + { + files: ['jest.setup.ts', 'jest.config.ts'], + parserOptions: { + project: ['tsconfig.test.json'], + }, + rules: { + 'no-console': 'off', + }, + }, + { + files: ['test/**/*.ts'], + + rules: { + // most of these errors come from `new Promise(process.nextTick)` + '@typescript-eslint/unbound-method': 'off', + // TODO: decide if we want to enable this again after the migration + // We can take the freedom to be a bit more lenient with tests + '@typescript-eslint/no-floating-promises': 'off', + }, + }, + { + files: ['src/types/deprecated.ts'], + rules: { + '@typescript-eslint/naming-convention': 'off', + }, + }, + ], +}; diff --git a/packages/replay/.gitignore b/packages/replay/.gitignore new file mode 100644 index 000000000000..363d3467c6fa --- /dev/null +++ b/packages/replay/.gitignore @@ -0,0 +1,4 @@ +node_modules +/*.tgz +.eslintcache +build diff --git a/packages/replay/CONTRIBUTING.md b/packages/replay/CONTRIBUTING.md new file mode 100644 index 000000000000..7b4a70f075ab --- /dev/null +++ b/packages/replay/CONTRIBUTING.md @@ -0,0 +1,7 @@ +## Updating the rrweb dependency + +When +[updating the `rrweb` dependency](https://github.com/getsentry/sentry-javascript/blob/a493aa6a46555b944c8d896a2164bcd8b11caaf5/packages/replay/package.json?plain=1#LL55), +please be aware that +[`@sentry/replay`'s README.md](https://github.com/getsentry/sentry-javascript/blob/a493aa6a46555b944c8d896a2164bcd8b11caaf5/packages/replay/README.md?plain=1#LL204) +also needs to be updated. diff --git a/packages/replay/LICENSE b/packages/replay/LICENSE new file mode 100644 index 000000000000..4ac873d49f33 --- /dev/null +++ b/packages/replay/LICENSE @@ -0,0 +1,14 @@ +Copyright (c) 2022 Sentry (https://sentry.io) and individual contributors. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the Software without restriction, including without limitation the +rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the +Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/packages/replay-internal/MIGRATION.md b/packages/replay/MIGRATION.md similarity index 100% rename from packages/replay-internal/MIGRATION.md rename to packages/replay/MIGRATION.md diff --git a/packages/replay/README.md b/packages/replay/README.md new file mode 100644 index 000000000000..2583065c9787 --- /dev/null +++ b/packages/replay/README.md @@ -0,0 +1,266 @@ +

+ + Sentry + +

+ +# Sentry Session Replay + +[![npm version](https://img.shields.io/npm/v/@sentry/replay.svg)](https://www.npmjs.com/package/@sentry/replay) +[![npm dm](https://img.shields.io/npm/dm/@sentry/replay.svg)](https://www.npmjs.com/package/@sentry/replay) +[![npm dt](https://img.shields.io/npm/dt/@sentry/replay.svg)](https://www.npmjs.com/package/@sentry/replay) + +## Pre-requisites + +`@sentry/replay` requires Node 14+, and browsers newer than IE11. + +## Installation + +Replay can be imported from `@sentry/browser`, or a respective SDK package like `@sentry/react` or `@sentry/vue`. You +don't need to install anything in order to use Session Replay. The minimum version that includes Replay is 7.27.0. + +For details on using Replay when using Sentry via the CDN bundles, see [CDN bundle](#loading-replay-as-a-cdn-bundle). + +## Setup + +To set up the integration, add the following to your Sentry initialization. Several options are supported and passable +via the integration constructor. See the [configuration section](#configuration) below for more details. + +```javascript +import * as Sentry from '@sentry/browser'; +// or e.g. import * as Sentry from '@sentry/react'; + +Sentry.init({ + dsn: '__DSN__', + + // This sets the sample rate to be 10%. You may want this to be 100% while + // in development and sample at a lower rate in production + replaysSessionSampleRate: 0.1, + + // If the entire session is not sampled, use the below sample rate to sample + // sessions when an error occurs. + replaysOnErrorSampleRate: 1.0, + + integrations: [ + Sentry.replayIntegration({ + // Additional SDK configuration goes in here, for example: + maskAllText: true, + blockAllMedia: true, + // See below for all available options + }), + ], + // ... +}); +``` + +### Lazy loading Replay + +Replay will start automatically when you add the integration. If you do not want to start Replay immediately (e.g. if +you want to lazy-load it), you can also use `addIntegration` to load it later: + +```js +import * as Sentry from "@sentry/react"; +import { BrowserClient } from "@sentry/browser"; + +Sentry.init({ + // Do not load it initially + integrations: [] +}); + +// Sometime later +const { Replay } = await import('@sentry/browser'); +const client = Sentry.getCurrentHub().getClient(); + +// Client can be undefined +client?.addIntegration(Sentry.replayIntegration()); +``` + +### Identifying Users + +If you have only followed the above instructions to setup session replays, you will only see IP addresses in Sentry's +UI. In order to associate a user identity to a session replay, use +[`setUser`](https://docs.sentry.io/platforms/javascript/enriching-events/identify-user/). + +```javascript +import * as Sentry from '@sentry/browser'; + +Sentry.setUser({ email: 'jane.doe@example.com' }); +``` + +### Stopping & starting Replays manually + +Replay recording only starts when it is included in the `integrations` array when calling `Sentry.init` or calling +`addIntegration` from the a Sentry client instance. To stop recording you can call `stop()`. + +```js +import * as Sentry from "@sentry/react"; +import { BrowserClient } from "@sentry/browser"; + +const replay = Sentry.replayIntegration(); + +Sentry.init({ + integrations: [replay] +}); + +const client = Sentry.getCurrentHub().getClient(); + +// Add replay integration, will start recoring +client?.addIntegration(replay); + +// Stop recording +replay.stop(); +``` + +When both `replaysSessionSampleRate` and `replaysOnErrorSampleRate` are `0`, recording will _not_ start. In this case, +you can manually start recording: + +```js +replay.start(); // Will start a session in "session" mode, regardless of sample rates +replay.startBuffering(); // Will start a session in "buffer" mode, regardless of sample rates +``` + +## Loading Replay as a CDN Bundle + +As an alternative to the NPM package, you can use Replay as a CDN bundle. Please refer to the +[Session Replay installation guide](https://docs.sentry.io/platforms/javascript/session-replay/#install) for CDN bundle +instructions. + +
+Deprecated Replay integration bundle +Installing the replay integration as a secondary integration bundle to the SDK bundle was deprecated in favour of +complete CDN bundles that already contain the replay integration. No need to keep two bundles in sync anymore. +The `replay.(min.)js` bundle will be removed in v8 of the JS SDKs. + +```html + + +``` + +
+ +## Sessions + +A session starts when the Session Replay SDK is first loaded and initialized. The session will continue until 5 minutes +passes without any user interactions[^1] with the application _OR_ until a maximum of 30 minutes have elapsed. Closing +the browser tab will end the session immediately according to the rules for +[SessionStorage](https://developer.mozilla.org/en-US/docs/Web/API/Window/sessionStorage). + +[^1]: An 'interaction' refers to either a mouse click or a browser navigation event. + +### Accessing the Replay Session ID + +You can get the ID of the currently running session via `replay.getReplayId()`. This will return `undefined` if no +session is ongoing. + +### Replay Captures Only on Errors + +Alternatively, rather than recording an entire session, you can capture a replay only when an error occurs. In this +case, the integration will buffer up to one minute worth of events prior to the error being thrown. It will continue to +record the session following the rules above regarding session life and activity. Read the [sampling](#Sampling) section +for configuration options. + +## Sampling + +Sampling allows you to control how much of your website's traffic will result in a Session Replay. There are two sample +rates you can adjust to get the replays more relevant to your interests: + +- `replaysSessionSampleRate` - The sample rate for replays that begin recording immediately and last the entirety of the + user's session. +- `replaysOnErrorSampleRate` - The sample rate for replays that are recorded when an error happens. This type of replay + will record up to a minute of events prior to the error and continue recording until the session ends. + +When Replay is initialized, we check the `replaysSessionSampleRate`. If it is sampled, then we start recording & sending +Replay data immediately. Else, if `replaysOnErrorSampleRate > 0`, we'll start recording in buffering mode. In this mode, +whenever an error occurs we'll check `replaysOnErrorSampleRate`. If it is sampled, when we'll upload the Replay to +Sentry and continue recording normally. + +## Configuration + +### SDK Configuration + +The following options can be configured on the root level of your browser-based Sentry SDK, in `init({})`: + +| key | type | default | description | +| ------------------------ | ------ | ------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| replaysSessionSampleRate | number | `0` | The sample rate for replays that begin recording immediately and last the entirety of the user's session. 1.0 will collect all replays, 0 will collect no replays. | +| replaysOnErrorSampleRate | number | `0` | The sample rate for replays that are recorded when an error happens. This type of replay will record up to a minute of events prior to the error and continue recording until the session ends. 1.0 capturing all sessions with an error, and 0 capturing none. | + +### General Integration Configuration + +The following options can be configured as options to the integration, in `Sentry.replayIntegration({})`: + +| key | type | default | description | +| ------------- | ------- | ------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| stickySession | boolean | `true` | Keep track of the user across page loads. Note a single user using multiple tabs will result in multiple sessions. Closing a tab will result in the session being closed as well. | + +### Privacy Configuration + +The following options can be configured as options to the integration, in `Sentry.replayIntegration({})`: + +| key | type | default | description | +| ------------- | ------------------------ | -------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | +| maskAllText | boolean | `true` | Mask _all_ text content. Will pass text content through `maskFn` before sending to server. | +| maskAllInputs | boolean | `true` | Mask values of `` elements. Passes input values through `maskInputFn` before sending to server. | +| blockAllMedia | boolean | `true` | Block _all_ media elements (`img, svg, video, object, picture, embed, map, audio`) | +| maskFn | (text: string) => string | `(text) => '*'.repeat(text.length)` | Function to customize how text content is masked before sending to server. By default, masks text with `*`. | +| block | Array | `.sentry-block, [data-sentry-block]` | Redact any elements that match the DOM selectors. See [privacy](#blocking) section for an example. | +| unblock | Array | [] | Do not redact any elements that match the DOM selectors. Useful when using `blockAllMedia`. See [privacy](#blocking) section for an example. | +| mask | Array | `.sentry-mask, [data-sentry-mask]` | Mask all elements that match the given DOM selectors. See [privacy](#masking) section for an example. | +| unmask | Array | [] | Unmask all elements that match the given DOM selectors. Useful when using `maskAllText`. See [privacy](#masking) section for an example. | +| ignore | Array | `.sentry-ignore, [data-sentry-ignore]` | Ignores all events on the matching input fields. See [privacy](#ignoring) section for an example. | + +#### Deprecated options + +In order to streamline our privacy options, the following have been deprecated in favor for the respective options +above. + +| deprecated key | replaced by | description | +| ---------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------ | +| maskInputOptions | mask | Use CSS selectors in `mask` in order to mask all inputs of a certain type. For example, `input[type="address"]` | +| blockSelector | block | The selector(s) can be moved directly in the `block` array. | +| blockClass | block | Convert the class name to a CSS selector and add to `block` array. For example, `first-name` becomes `.first-name`. Regexes can be moved as-is. | +| maskClass | mask | Convert the class name to a CSS selector and add to `mask` array. For example, `first-name` becomes `.first-name`. Regexes can be moved as-is. | +| maskSelector | mask | The selector(s) can be moved directly in the `mask` array. | +| ignoreClass | ignore | Convert the class name to a CSS selector and add to `ignore` array. For example, `first-name` becomes `.first-name`. Regexes can be moved as-is. | + +## Privacy + +There are several ways to deal with PII. By default, the integration will mask all text content with `*` and block all +media elements (`img, svg, video, object, picture, embed, map, audio`). This can be disabled by setting `maskAllText` to +`false`. It is also possible to add the following CSS classes to specific DOM elements to prevent recording its +contents: `sentry-block`, `sentry-ignore`, and `sentry-mask`. The following sections will show examples of how content +is handled by the differing methods. + +### Masking + +Masking replaces the text content with something else. The default masking behavior is to replace each character with a +`*`. In this example the relevant html code is: `...
`. +![Masking example](https://user-images.githubusercontent.com/79684/193118192-dee1d3d8-5813-47e8-b532-f9ee1c8714b3.png) + +### Blocking + +Blocking replaces the element with a placeholder that has the same dimensions. The recording will show an empty space +where the content was. In this example the relevant html code is: `...
`. +![Blocking example](https://user-images.githubusercontent.com/79684/193118084-51a589fc-2160-476a-a8dc-b681eddb136c.png) + +### Ignoring + +Ignoring only applies to form inputs. Events will be ignored on the input element so that the replay does not show what +occurs inside of the input. In the below example, notice how the results in the table below the input changes, but no +text is visible in the input. + +https://user-images.githubusercontent.com/79684/192815134-a6451c3f-d3cb-455f-a699-7c3fe04d0a2e.mov + +## Error Linking + +Currently, errors that happen on the page while a replay is running are linked to the Replay, making it as easy as +possible to jump between related issues/replays. However, please note that it is _possible_ that the error count +reported on the Replay Detail page does not match the actual errors that have been captured. The reason for that is that +errors _can_ be lost, e.g. a network request fails, or similar. This should not happen to often, but be aware that it is +theoretically possible. + +## Manually sending replay data + +You can use `replay.flush()` to immediately send all currently captured replay data. When Replay is currently in +buffering mode, this will send up to the last 60 seconds of replay data, and also continue sending afterwards, similar +to when an error happens & is recorded. diff --git a/packages/replay/package.json b/packages/replay/package.json new file mode 100644 index 000000000000..f482e34a61a5 --- /dev/null +++ b/packages/replay/package.json @@ -0,0 +1,88 @@ +{ + "name": "@sentry/replay", + "version": "8.0.0-alpha.4", + "description": "User replays for Sentry", + "main": "build/npm/cjs/index.js", + "module": "build/npm/esm/index.js", + "types": "build/npm/types/index.d.ts", + "exports": { + "./package.json": "./package.json", + ".": { + "import": { + "types": "./build/npm/types/index.d.ts", + "default": "./build/npm/esm/index.js" + }, + "require": { + "types": "./build/npm/types/index.d.ts", + "default": "./build/npm/cjs/index.js" + } + } + }, + "typesVersions": { + "<4.9": { + "build/npm/types/index.d.ts": [ + "build/npm/types-ts3.8/index.d.ts" + ] + } + }, + "files": [ + "cjs", + "esm", + "types", + "types-ts3.8" + ], + "sideEffects": false, + "scripts": { + "build": "run-p build:transpile build:types build:bundle", + "build:transpile": "rollup -c rollup.npm.config.mjs", + "build:bundle": "rollup -c rollup.bundle.config.mjs", + "build:dev": "run-p build:transpile build:types", + "build:types": "run-s build:types:core build:types:downlevel", + "build:types:core": "tsc -p tsconfig.types.json", + "build:types:downlevel": "yarn downlevel-dts build/npm/types build/npm/types-ts3.8 --to ts3.8", + "build:watch": "run-p build:transpile:watch build:bundle:watch build:types:watch", + "build:dev:watch": "run-p build:transpile:watch build:types:watch", + "build:transpile:watch": "yarn build:transpile --watch", + "build:bundle:watch": "yarn build:bundle --watch", + "build:types:watch": "tsc -p tsconfig.types.json --watch", + "build:tarball": "ts-node ../../scripts/prepack.ts --bundles && npm pack ./build/npm", + "circularDepCheck": "madge --circular src/index.ts", + "clean": "rimraf build sentry-replay-*.tgz", + "fix": "eslint . --format stylish --fix", + "lint": "eslint . --format stylish", + "test": "jest", + "test:watch": "jest --watch", + "yalc:publish": "ts-node ../../scripts/prepack.ts --bundles && yalc publish ./build/npm --push --sig" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/getsentry/sentry-javascript.git" + }, + "author": "Sentry", + "license": "MIT", + "bugs": { + "url": "https://github.com/getsentry/sentry-javascript/issues" + }, + "homepage": "https://docs.sentry.io/platforms/javascript/session-replay/", + "devDependencies": { + "@babel/core": "^7.17.5", + "@sentry-internal/replay-worker": "8.0.0-alpha.4", + "@sentry-internal/rrweb": "2.11.0", + "@sentry-internal/rrweb-snapshot": "2.11.0", + "fflate": "^0.8.1", + "jsdom-worker": "^0.2.1" + }, + "dependencies": { + "@sentry-internal/replay": "8.0.0-alpha.4", + "@sentry-internal/tracing": "8.0.0-alpha.4", + "@sentry/core": "8.0.0-alpha.4", + "@sentry/types": "8.0.0-alpha.4", + "@sentry/utils": "8.0.0-alpha.4" + }, + "engines": { + "node": ">=14.18" + }, + "volta": { + "extends": "../../package.json" + } +} diff --git a/packages/replay/rollup.bundle.config.mjs b/packages/replay/rollup.bundle.config.mjs new file mode 100644 index 000000000000..8bdc41f8001c --- /dev/null +++ b/packages/replay/rollup.bundle.config.mjs @@ -0,0 +1,12 @@ +import { makeBaseBundleConfig, makeBundleConfigVariants } from '@sentry-internal/rollup-utils'; + +const baseBundleConfig = makeBaseBundleConfig({ + bundleType: 'addon', + entrypoints: ['src/index.ts'], + licenseTitle: '@sentry/replay', + outputFileBase: () => 'bundles/replay', +}); + +const builds = makeBundleConfigVariants(baseBundleConfig); + +export default builds; diff --git a/packages/replay/rollup.npm.config.mjs b/packages/replay/rollup.npm.config.mjs new file mode 100644 index 000000000000..8c50a33f0afb --- /dev/null +++ b/packages/replay/rollup.npm.config.mjs @@ -0,0 +1,16 @@ +import { makeBaseNPMConfig, makeNPMConfigVariants } from '@sentry-internal/rollup-utils'; + +export default makeNPMConfigVariants( + makeBaseNPMConfig({ + hasBundles: true, + packageSpecificConfig: { + output: { + // set exports to 'named' or 'auto' so that rollup doesn't warn + exports: 'named', + // set preserveModules to false because for Replay we actually want + // to bundle everything into one file. + preserveModules: false, + }, + }, + }), +); diff --git a/packages/replay/src/index.ts b/packages/replay/src/index.ts new file mode 100644 index 000000000000..62c11f2ead23 --- /dev/null +++ b/packages/replay/src/index.ts @@ -0,0 +1,60 @@ +import { + getReplay as internalGetReplay, + replayIntegration as internalReplayIntegration, +} from '@sentry-internal/replay'; +import type { + CanvasManagerInterface as InternalCanvasManagerInterface, + CanvasManagerOptions as InternalCanvasManagerOptions, + ReplayBreadcrumbFrame as InternalReplayBreadcrumbFrame, + ReplayBreadcrumbFrameEvent as InternalReplayBreadcrumbFrameEvent, + ReplayConfiguration as InternalReplayConfiguration, + ReplayEventType as InternalReplayEventType, + ReplayEventWithTime as InternalReplayEventWithTime, + ReplayFrame as InternalReplayFrame, + ReplayFrameEvent as InternalReplayFrameEvent, + ReplayOptionFrameEvent as InternalReplayOptionFrameEvent, + ReplaySpanFrame as InternalReplaySpanFrame, + ReplaySpanFrameEvent as InternalReplaySpanFrameEvent, +} from '@sentry-internal/replay'; + +/** @deprecated Import from `@sentry-internal/replay` */ +export const getReplay = internalGetReplay; + +/** @deprecated Import from `@sentry-internal/replay` */ +export const replayIntegration = internalReplayIntegration; + +/** @deprecated Import from `@sentry-internal/replay` */ +export type ReplayConfiguration = InternalReplayConfiguration; + +/** @deprecated Import from `@sentry-internal/replay` */ +export type ReplayEventType = InternalReplayEventType; + +/** @deprecated Import from `@sentry-internal/replay` */ +export type ReplayEventWithTime = InternalReplayEventWithTime; + +/** @deprecated Import from `@sentry-internal/replay` */ +export type ReplayBreadcrumbFrame = InternalReplayBreadcrumbFrame; + +/** @deprecated Import from `@sentry-internal/replay` */ +export type ReplayBreadcrumbFrameEvent = InternalReplayBreadcrumbFrameEvent; + +/** @deprecated Import from `@sentry-internal/replay` */ +export type ReplayOptionFrameEvent = InternalReplayOptionFrameEvent; + +/** @deprecated Import from `@sentry-internal/replay` */ +export type ReplayFrame = InternalReplayFrame; + +/** @deprecated Import from `@sentry-internal/replay` */ +export type ReplayFrameEvent = InternalReplayFrameEvent; + +/** @deprecated Import from `@sentry-internal/replay` */ +export type ReplaySpanFrame = InternalReplaySpanFrame; + +/** @deprecated Import from `@sentry-internal/replay` */ +export type ReplaySpanFrameEvent = InternalReplaySpanFrameEvent; + +/** @deprecated Import from `@sentry-internal/replay` */ +export type CanvasManagerInterface = InternalCanvasManagerInterface; + +/** @deprecated Import from `@sentry-internal/replay` */ +export type CanvasManagerOptions = InternalCanvasManagerOptions; diff --git a/packages/replay/tsconfig.json b/packages/replay/tsconfig.json new file mode 100644 index 000000000000..f8f54556da93 --- /dev/null +++ b/packages/replay/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "module": "esnext" + }, + "include": ["src/**/*.ts"] +} diff --git a/packages/replay/tsconfig.types.json b/packages/replay/tsconfig.types.json new file mode 100644 index 000000000000..374fd9bc9364 --- /dev/null +++ b/packages/replay/tsconfig.types.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + + "compilerOptions": { + "declaration": true, + "declarationMap": true, + "emitDeclarationOnly": true, + "outDir": "build/npm/types" + } +} diff --git a/scripts/node-unit-tests.ts b/scripts/node-unit-tests.ts index 972c6d76db65..927d8cb61057 100644 --- a/scripts/node-unit-tests.ts +++ b/scripts/node-unit-tests.ts @@ -18,6 +18,7 @@ const DEFAULT_SKIP_TESTS_PACKAGES = [ '@sentry/svelte', '@sentry/profiling-node', '@sentry/replay', + '@sentry-internal/replay', '@sentry-internal/replay-canvas', '@sentry-internal/replay-worker', '@sentry-internal/feedback', From dcc5ee649404ae2758a3a766f66069e0a151153e Mon Sep 17 00:00:00 2001 From: s1gr1d Date: Tue, 19 Mar 2024 16:10:59 +0100 Subject: [PATCH 3/4] update migration docs --- MIGRATION.md | 9 +++++++++ README.md | 4 ++-- packages/replay-internal/README.md | 6 +++--- packages/replay-worker/README.md | 4 ++-- packages/replay/package.json | 2 -- 5 files changed, 16 insertions(+), 9 deletions(-) diff --git a/MIGRATION.md b/MIGRATION.md index 1daf6c3d5c8d..fd1725601ada 100644 --- a/MIGRATION.md +++ b/MIGRATION.md @@ -577,6 +577,8 @@ Removed top-level exports: `Offline`, `makeXHRTransport`, `BrowserTracing`, `wra - [Removal of Offline integration](./MIGRATION.md#removal-of-the-offline-integration) - [Removal of `makeXHRTransport` transport](./MIGRATION.md#removal-of-makexhrtransport-transport) - [Removal of `wrap` method](./MIGRATION.md#removal-of-wrap-method) +- [Removal of `@sentry/angular-ivy` package](./MIGRATION.md#removal-of-sentryangular-ivy-package) +- [Deprecation of `@sentry/replay` package](./MIGRATION.md#deprecation-of-sentryreplay-package) #### Removal of the `BrowserTracing` integration @@ -605,6 +607,11 @@ requires at least Angular 14. If you are using Angular 13 or lower, we suggest u migrating to v8. If you can't upgrade your Angular version to at least Angular 14, you can also continue using the `@sentry/angular-ivy@7` SDK. However, v7 of the SDKs will no longer be fully supported going forward. +#### Deprecation of `@sentry/replay` package + +You can import from `@sentry/browser` (or from a respective SDK package like `@sentry/react` or `@sentry/vue`) or +`@sentry-internal/replay`. + ### Server-side SDKs (Node, Deno, Bun, etc.) Removed top-level exports: `enableAnrDetection`, `Anr`, `deepReadDirSync` @@ -907,6 +914,8 @@ SDK. - [Updated behaviour of `transactionContext` passed to `tracesSampler`](./MIGRATION.md#transactioncontext-no-longer-passed-to-tracessampler) - [Updated behaviour of `getClient()`](./MIGRATION.md#getclient-always-returns-a-client) - [Removal of Client-Side health check transaction filters](./MIGRATION.md#removal-of-client-side-health-check-transaction-filters) +- [Change of Replay default options (`unblock` and `unmask`)](./MIGRATION.md#change-of-replay-default-options-unblock-and-unmask) +- [Angular Tracing Decorator renaming](./MIGRATION.md#angular-tracing-decorator-renaming) #### Updated behaviour of `tracePropagationTargets` in the browser (HTTP tracing headers & CORS) diff --git a/README.md b/README.md index ff367a2018d5..101b712ced0b 100644 --- a/README.md +++ b/README.md @@ -93,8 +93,8 @@ Besides the high-level SDKs, this repository contains shared packages, helpers a development. If you're thinking about contributing to or creating a JavaScript-based SDK, have a look at the resources below: -- [`@sentry/replay`](https://github.com/getsentry/sentry-javascript/tree/master/packages/replay): Provides the - integration for Session Replay. +- [`@sentry-internal/replay`](https://github.com/getsentry/sentry-javascript/tree/master/packages/replay-internal): + Provides the integration for Session Replay. - [`@sentry/core`](https://github.com/getsentry/sentry-javascript/tree/master/packages/core): The base for all JavaScript SDKs with interfaces, type definitions and base classes. - [`@sentry/utils`](https://github.com/getsentry/sentry-javascript/tree/master/packages/utils): A set of helpers and diff --git a/packages/replay-internal/README.md b/packages/replay-internal/README.md index 5b04af516bf4..cb40ef919e9c 100644 --- a/packages/replay-internal/README.md +++ b/packages/replay-internal/README.md @@ -6,9 +6,9 @@ # Sentry Session Replay -[![npm version](https://img.shields.io/npm/v/@sentry/replay.svg)](https://www.npmjs.com/package/@sentry/replay) -[![npm dm](https://img.shields.io/npm/dm/@sentry/replay.svg)](https://www.npmjs.com/package/@sentry/replay) -[![npm dt](https://img.shields.io/npm/dt/@sentry/replay.svg)](https://www.npmjs.com/package/@sentry/replay) +[![npm version](https://img.shields.io/npm/v/@sentry-internal/replay.svg)](https://www.npmjs.com/package/@sentry-internal/replay) +[![npm dm](https://img.shields.io/npm/dm/@sentry-internal/replay.svg)](https://www.npmjs.com/package/@sentry-internal/replay) +[![npm dt](https://img.shields.io/npm/dt/@sentry-internal/replay.svg)](https://www.npmjs.com/package/@sentry-internal/replay) ## Pre-requisites diff --git a/packages/replay-worker/README.md b/packages/replay-worker/README.md index b20669d362c4..29d39df52d67 100644 --- a/packages/replay-worker/README.md +++ b/packages/replay-worker/README.md @@ -6,8 +6,8 @@ # Sentry Session Replay Worker -This is an internal package that is used by @sentry-internal/replay. It generates a web worker and converts it to a string, so -that we can process it easier in replay. +This is an internal package that is used by @sentry-internal/replay. It generates a web worker and converts it to a +string, so that we can process it easier in replay. By extracting this into a dedicated (private, internal) package, we can streamline the build of replay. diff --git a/packages/replay/package.json b/packages/replay/package.json index f482e34a61a5..2f49dc805f8c 100644 --- a/packages/replay/package.json +++ b/packages/replay/package.json @@ -50,8 +50,6 @@ "clean": "rimraf build sentry-replay-*.tgz", "fix": "eslint . --format stylish --fix", "lint": "eslint . --format stylish", - "test": "jest", - "test:watch": "jest --watch", "yalc:publish": "ts-node ../../scripts/prepack.ts --bundles && yalc publish ./build/npm --push --sig" }, "repository": { From 5772fbdaeace6ff0704676dab5b94956568e5acf Mon Sep 17 00:00:00 2001 From: s1gr1d Date: Fri, 22 Mar 2024 10:43:16 +0100 Subject: [PATCH 4/4] delete replay --- .craft.yml | 10 +- LICENSE | 2 +- MIGRATION.md | 7 +- .../e2e-tests/verdaccio-config/config.yaml | 6 - package.json | 1 - packages/browser/package.json | 1 - packages/browser/rollup.bundle.config.mjs | 2 +- packages/replay-canvas/package.json | 2 +- packages/replay-internal/README.md | 3 + packages/replay/.eslintignore | 6 - packages/replay/.eslintrc.js | 39 --- packages/replay/.gitignore | 4 - packages/replay/CONTRIBUTING.md | 7 - packages/replay/LICENSE | 14 - packages/replay/MIGRATION.md | 156 ---------- packages/replay/README.md | 266 ------------------ packages/replay/package.json | 86 ------ packages/replay/rollup.bundle.config.mjs | 12 - packages/replay/rollup.npm.config.mjs | 16 -- packages/replay/src/index.ts | 60 ---- packages/replay/tsconfig.json | 7 - packages/replay/tsconfig.types.json | 10 - scripts/node-unit-tests.ts | 1 - 23 files changed, 12 insertions(+), 706 deletions(-) delete mode 100644 packages/replay/.eslintignore delete mode 100644 packages/replay/.eslintrc.js delete mode 100644 packages/replay/.gitignore delete mode 100644 packages/replay/CONTRIBUTING.md delete mode 100644 packages/replay/LICENSE delete mode 100644 packages/replay/MIGRATION.md delete mode 100644 packages/replay/README.md delete mode 100644 packages/replay/package.json delete mode 100644 packages/replay/rollup.bundle.config.mjs delete mode 100644 packages/replay/rollup.npm.config.mjs delete mode 100644 packages/replay/src/index.ts delete mode 100644 packages/replay/tsconfig.json delete mode 100644 packages/replay/tsconfig.types.json diff --git a/.craft.yml b/.craft.yml index 85a43d97ef6e..27ff96e235d9 100644 --- a/.craft.yml +++ b/.craft.yml @@ -24,19 +24,15 @@ targets: - name: npm id: '@sentry-internal/replay' includeNames: /^sentry-internal-replay-\d.*\.tgz$/ - ## 1.6 Replay package (browser only) - - name: npm - id: '@sentry/replay' - includeNames: /^sentry-replay-\d.*\.tgz$/ - ## 1.7 OpenTelemetry package + ## 1.6 OpenTelemetry package - name: npm id: '@sentry/opentelemetry' includeNames: /^sentry-opentelemetry-\d.*\.tgz$/ - ## 1.8 Feedback package (browser only) + ## 1.7 Feedback package (browser only) - name: npm id: '@sentry-internal/feedback' includeNames: /^sentry-internal-feedback-\d.*\.tgz$/ - ## 1.9 ReplayCanvas package (browser only) + ## 1.8 ReplayCanvas package (browser only) - name: npm id: '@sentry-internal/replay-canvas' includeNames: /^sentry-internal-replay-canvas-\d.*\.tgz$/ diff --git a/LICENSE b/LICENSE index 293314012679..63e7eb28e19c 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2022 Functional Software, Inc. dba Sentry +Copyright (c) 2024 Functional Software, Inc. dba Sentry Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in diff --git a/MIGRATION.md b/MIGRATION.md index fd1725601ada..6e560d8baf4c 100644 --- a/MIGRATION.md +++ b/MIGRATION.md @@ -578,7 +578,7 @@ Removed top-level exports: `Offline`, `makeXHRTransport`, `BrowserTracing`, `wra - [Removal of `makeXHRTransport` transport](./MIGRATION.md#removal-of-makexhrtransport-transport) - [Removal of `wrap` method](./MIGRATION.md#removal-of-wrap-method) - [Removal of `@sentry/angular-ivy` package](./MIGRATION.md#removal-of-sentryangular-ivy-package) -- [Deprecation of `@sentry/replay` package](./MIGRATION.md#deprecation-of-sentryreplay-package) +- [Removal of `@sentry/replay` package](./MIGRATION.md#removal-of-sentryreplay-package) #### Removal of the `BrowserTracing` integration @@ -607,10 +607,9 @@ requires at least Angular 14. If you are using Angular 13 or lower, we suggest u migrating to v8. If you can't upgrade your Angular version to at least Angular 14, you can also continue using the `@sentry/angular-ivy@7` SDK. However, v7 of the SDKs will no longer be fully supported going forward. -#### Deprecation of `@sentry/replay` package +#### Removal of `@sentry/replay` package -You can import from `@sentry/browser` (or from a respective SDK package like `@sentry/react` or `@sentry/vue`) or -`@sentry-internal/replay`. +You can import from `@sentry/browser` (or from a respective SDK package like `@sentry/react` or `@sentry/vue`). ### Server-side SDKs (Node, Deno, Bun, etc.) diff --git a/dev-packages/e2e-tests/verdaccio-config/config.yaml b/dev-packages/e2e-tests/verdaccio-config/config.yaml index 0fb3e645d81f..2cb28f875977 100644 --- a/dev-packages/e2e-tests/verdaccio-config/config.yaml +++ b/dev-packages/e2e-tests/verdaccio-config/config.yaml @@ -122,12 +122,6 @@ packages: unpublish: $all # proxy: npmjs # Don't proxy for E2E tests! - '@sentry/replay': - access: $all - publish: $all - unpublish: $all - # proxy: npmjs # Don't proxy for E2E tests! - '@sentry/aws-serverless': access: $all publish: $all diff --git a/package.json b/package.json index 616eb9b791c9..1b2ad37340ea 100644 --- a/package.json +++ b/package.json @@ -65,7 +65,6 @@ "packages/profiling-node", "packages/react", "packages/remix", - "packages/replay", "packages/replay-internal", "packages/replay-canvas", "packages/replay-worker", diff --git a/packages/browser/package.json b/packages/browser/package.json index 85e47c19cbee..9158e1f21d04 100644 --- a/packages/browser/package.json +++ b/packages/browser/package.json @@ -47,7 +47,6 @@ "@sentry-internal/replay-canvas": "8.0.0-alpha.4", "@sentry-internal/tracing": "8.0.0-alpha.4", "@sentry/core": "8.0.0-alpha.4", - "@sentry/replay": "8.0.0-alpha.4", "@sentry/types": "8.0.0-alpha.4", "@sentry/utils": "8.0.0-alpha.4" }, diff --git a/packages/browser/rollup.bundle.config.mjs b/packages/browser/rollup.bundle.config.mjs index 7ebddd4e2f04..16c769582050 100644 --- a/packages/browser/rollup.bundle.config.mjs +++ b/packages/browser/rollup.bundle.config.mjs @@ -52,7 +52,7 @@ const tracingBaseBundleConfig = makeBaseBundleConfig({ const replayBaseBundleConfig = makeBaseBundleConfig({ bundleType: 'standalone', entrypoints: ['src/index.bundle.replay.ts'], - licenseTitle: '@sentry/browser & @sentry/replay', + licenseTitle: '@sentry/browser (Replay)', outputFileBase: () => 'bundles/bundle.replay', }); diff --git a/packages/replay-canvas/package.json b/packages/replay-canvas/package.json index 393b9d227250..77ea29fa4345 100644 --- a/packages/replay-canvas/package.json +++ b/packages/replay-canvas/package.json @@ -73,7 +73,7 @@ }, "dependencies": { "@sentry/core": "8.0.0-alpha.4", - "@sentry/replay": "8.0.0-alpha.4", + "@sentry-internal/replay": "8.0.0-alpha.4", "@sentry/types": "8.0.0-alpha.4", "@sentry/utils": "8.0.0-alpha.4" }, diff --git a/packages/replay-internal/README.md b/packages/replay-internal/README.md index cb40ef919e9c..9533593acead 100644 --- a/packages/replay-internal/README.md +++ b/packages/replay-internal/README.md @@ -10,6 +10,9 @@ [![npm dm](https://img.shields.io/npm/dm/@sentry-internal/replay.svg)](https://www.npmjs.com/package/@sentry-internal/replay) [![npm dt](https://img.shields.io/npm/dt/@sentry-internal/replay.svg)](https://www.npmjs.com/package/@sentry-internal/replay) +This is an internal package that is being re-exported in `@sentry/browser` and other browser-related SDKs like +`@sentry/react` or `@sentry/vue`. + ## Pre-requisites `@sentry-internal/replay` requires Node 14+, and browsers newer than IE11. diff --git a/packages/replay/.eslintignore b/packages/replay/.eslintignore deleted file mode 100644 index c76c6c2d64d1..000000000000 --- a/packages/replay/.eslintignore +++ /dev/null @@ -1,6 +0,0 @@ -node_modules/ -build/ -demo/build/ -# TODO: Check if we can re-introduce linting in demo -demo -metrics diff --git a/packages/replay/.eslintrc.js b/packages/replay/.eslintrc.js deleted file mode 100644 index 6af926975df0..000000000000 --- a/packages/replay/.eslintrc.js +++ /dev/null @@ -1,39 +0,0 @@ -// Note: All paths are relative to the directory in which eslint is being run, rather than the directory where this file -// lives - -// ESLint config docs: https://eslint.org/docs/user-guide/configuring/ - -module.exports = { - extends: ['../../.eslintrc.js'], - overrides: [ - { - files: ['src/**/*.ts'], - }, - { - files: ['jest.setup.ts', 'jest.config.ts'], - parserOptions: { - project: ['tsconfig.test.json'], - }, - rules: { - 'no-console': 'off', - }, - }, - { - files: ['test/**/*.ts'], - - rules: { - // most of these errors come from `new Promise(process.nextTick)` - '@typescript-eslint/unbound-method': 'off', - // TODO: decide if we want to enable this again after the migration - // We can take the freedom to be a bit more lenient with tests - '@typescript-eslint/no-floating-promises': 'off', - }, - }, - { - files: ['src/types/deprecated.ts'], - rules: { - '@typescript-eslint/naming-convention': 'off', - }, - }, - ], -}; diff --git a/packages/replay/.gitignore b/packages/replay/.gitignore deleted file mode 100644 index 363d3467c6fa..000000000000 --- a/packages/replay/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -node_modules -/*.tgz -.eslintcache -build diff --git a/packages/replay/CONTRIBUTING.md b/packages/replay/CONTRIBUTING.md deleted file mode 100644 index 7b4a70f075ab..000000000000 --- a/packages/replay/CONTRIBUTING.md +++ /dev/null @@ -1,7 +0,0 @@ -## Updating the rrweb dependency - -When -[updating the `rrweb` dependency](https://github.com/getsentry/sentry-javascript/blob/a493aa6a46555b944c8d896a2164bcd8b11caaf5/packages/replay/package.json?plain=1#LL55), -please be aware that -[`@sentry/replay`'s README.md](https://github.com/getsentry/sentry-javascript/blob/a493aa6a46555b944c8d896a2164bcd8b11caaf5/packages/replay/README.md?plain=1#LL204) -also needs to be updated. diff --git a/packages/replay/LICENSE b/packages/replay/LICENSE deleted file mode 100644 index 4ac873d49f33..000000000000 --- a/packages/replay/LICENSE +++ /dev/null @@ -1,14 +0,0 @@ -Copyright (c) 2022 Sentry (https://sentry.io) and individual contributors. All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated -documentation files (the "Software"), to deal in the Software without restriction, including without limitation the -rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit -persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the -Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/packages/replay/MIGRATION.md b/packages/replay/MIGRATION.md deleted file mode 100644 index d61689499d7d..000000000000 --- a/packages/replay/MIGRATION.md +++ /dev/null @@ -1,156 +0,0 @@ -# End of Replay Beta - -> For further migration changes please refer to the [general SDK migration notes](../../MIGRATION.md). - -Because of experimentation and rapid iteration, during the Beta period some bugs and problems came up which have since -been fixed/improved. We **strongly** recommend anyone using Replay in a version before 7.39.0 to update to 7.39.0 or -newer, in order to prevent running Replay with known problems that have since been fixed. - -Below you can find a list of relevant replay issues that have been resolved until 7.39.0: - -## New features / improvements - -- Remove `autoplay` attribute from audio/video tags ([#59](https://github.com/getsentry/rrweb/pull/59)) -- Exclude fetching scripts that use `` ([#52](https://github.com/getsentry/rrweb/pull/52)) -- With maskAllText, mask the attributes: placeholder, title, `aria-label` -- Lower the flush max delay from 15 seconds to 5 seconds (#6761) -- Stop recording when retry fails (#6765) -- Stop without retry when receiving bad API response (#6773) -- Send client_report when replay sending fails (#7093) -- Stop recording when hitting a rate limit (#7018) -- Allow Replay to be used in Electron renderers with nodeIntegration enabled (#6644) -- Do not renew session in error mode (#6948) -- Remove default sample rates for replay (#6878) -- Add `flush` method to integration (#6776) -- Improve compression worker & fallback behavior (#6988, #6936, #6827) -- Improve error handling (#7087, #7094, #7010, getsentry/rrweb#16, #6856) -- Add more default block filters (#7233) - -## Fixes - -- Fix masking inputs on change when `maskAllInputs:false` ([#61](https://github.com/getsentry/rrweb/pull/61)) -- More robust `rootShadowHost` check ([#50](https://github.com/getsentry/rrweb/pull/50)) -- Fix duplicated textarea value ([#62](https://github.com/getsentry/rrweb/pull/62)) -- Handle removed attributes ([#65](https://github.com/getsentry/rrweb/pull/65)) -- Change LCP calculation (#7187, #7225) -- Fix debounced flushes not respecting `maxWait` (#7207, #7208) -- Fix svgs not getting unblocked (#7132) -- Fix missing fetch/xhr requests (#7134) -- Fix feature detection of PerformanceObserver (#7029) -- Fix `checkoutEveryNms` (#6722) -- Fix incorrect uncompressed recording size due to encoding (#6740) -- Ensure dropping replays works (#6522) -- Envelope send should be awaited in try/catch (#6625) -- Improve handling of `maskAllText` selector (#6637) - -# Upgrading Replay from 7.34.0 to 7.35.0 - #6645 - -This release will remove the ability to change the default rrweb recording options (outside of privacy options). The -following are the new configuration values all replays will use: `slimDOMOptions: 'all'` - Removes `script`, comments, -`favicon`, whitespace in `head`, and a few `meta` tags in `head` `recordCanvas: false` - This option did not do anything -as playback of recorded canvas means we would have to remove the playback sandbox (which is a security concern). -`inlineStylesheet: true` - Inlines styles into the recording itself instead of attempting to fetch it remotely. This -means that styles in the replay will reflect the styles at the time of recording and not the current styles of the -remote stylesheet. `collectFonts: true` - Attempts to load custom fonts. `inlineImages: false` - Does not inline images -to recording and instead loads the asset remotely. During playback, images may not load due to CORS (add sentry.io as an -origin). - -Additionally, we have streamlined the privacy options. The following table lists the deprecated value, and what it is -replaced by: - -| deprecated key | replaced by | description | -| ---------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------ | -| maskInputOptions | mask | Use CSS selectors in `mask` in order to mask all inputs of a certain type. For example, `input[type="address"]` | -| blockSelector | block | The selector(s) can be moved directly in the `block` array. | -| blockClass | block | Convert the class name to a CSS selector and add to `block` array. For example, `first-name` becomes `.first-name`. Regexes can be moved as-is. | -| maskClass | mask | Convert the class name to a CSS selector and add to `mask` array. For example, `first-name` becomes `.first-name`. Regexes can be moved as-is. | -| maskSelector | mask | The selector(s) can be moved directly in the `mask` array. | -| ignoreClass | ignore | Convert the class name to a CSS selector and add to `ignore` array. For example, `first-name` becomes `.first-name`. Regexes can be moved as-is. | - -# Upgrading Replay from 7.31.0 to 7.32.0 - -In 7.32.0, we have removed the default values for the replay sample rates. Previously, they were: - -- `replaysSessionSampleRate: 0.1` -- `replaysOnErrorSampleRate: 1.0` - -Now, you have to explicitly set the sample rates, otherwise they default to 0. - -# Upgrading Replay from 0.6.x to 7.24.0 - -The Sentry Replay integration was moved to the Sentry JavaScript SDK monorepo. Hence we're jumping from version 0.x to -the monorepo's 7.x version which is shared across all JS SDK packages. - -## Replay sample rates are defined on top level (https://github.com/getsentry/sentry-javascript/issues/6351) - -Instead of defining the sample rates on the integration like this: - -```js -Sentry.init({ - dsn: '__DSN__', - integrations: [ - new Replay({ - sessionSampleRate: 0.1, - errorSampleRate: 1.0, - }), - ], - // ... -}); -``` - -They are now defined on the top level of the SDK: - -```js -Sentry.init({ - dsn: '__DSN__', - replaysSessionSampleRate: 0.1, - replaysOnErrorSampleRate: 1.0, - integrations: [ - new Replay({ - // other replay config still goes in here - }), - ], -}); -``` - -Note that the sample rate options inside of `new Replay({})` have been deprecated and will be removed in a future -update. - -## Removed deprecated options (https://github.com/getsentry/sentry-javascript/pull/6370) - -Two options, which have been deprecated for some time, have been removed: - -- `replaysSamplingRate` - instead use `sessionSampleRate` -- `captureOnlyOnError` - instead use `errorSampleRate` - -## New NPM package structure (https://github.com/getsentry/sentry-javascript/issues/6280) - -The internal structure of the npm package has changed. This is unlikely to affect you, unless you have imported -something from e.g.: - -```js -import something from '@sentry/replay/submodule'; -``` - -If you only imported from `@sentry/replay`, this will not affect you. - -## Changed type name from `IEventBuffer` to `EventBuffer` (https://github.com/getsentry/sentry-javascript/pull/6416) - -It is highly unlikely to affect anybody, but the type `IEventBuffer` was renamed to `EventBuffer` for consistency. -Unless you manually imported this and used it somewhere in your codebase, this will not affect you. - -## Session object is now a plain object (https://github.com/getsentry/sentry-javascript/pull/6417) - -The `Session` object exported from Replay is now a plain object, instead of a class. This should not affect you unless -you specifically accessed this class & did custom things with it. - -## Reduce public API of Replay integration (https://github.com/getsentry/sentry-javascript/pull/6407) - -The result of `new Replay()` now has a much more limited public API. Only the following methods are exposed: - -```js -const replay = new Replay(); - -replay.start(); -replay.stop(); -``` diff --git a/packages/replay/README.md b/packages/replay/README.md deleted file mode 100644 index 2583065c9787..000000000000 --- a/packages/replay/README.md +++ /dev/null @@ -1,266 +0,0 @@ -

- - Sentry - -

- -# Sentry Session Replay - -[![npm version](https://img.shields.io/npm/v/@sentry/replay.svg)](https://www.npmjs.com/package/@sentry/replay) -[![npm dm](https://img.shields.io/npm/dm/@sentry/replay.svg)](https://www.npmjs.com/package/@sentry/replay) -[![npm dt](https://img.shields.io/npm/dt/@sentry/replay.svg)](https://www.npmjs.com/package/@sentry/replay) - -## Pre-requisites - -`@sentry/replay` requires Node 14+, and browsers newer than IE11. - -## Installation - -Replay can be imported from `@sentry/browser`, or a respective SDK package like `@sentry/react` or `@sentry/vue`. You -don't need to install anything in order to use Session Replay. The minimum version that includes Replay is 7.27.0. - -For details on using Replay when using Sentry via the CDN bundles, see [CDN bundle](#loading-replay-as-a-cdn-bundle). - -## Setup - -To set up the integration, add the following to your Sentry initialization. Several options are supported and passable -via the integration constructor. See the [configuration section](#configuration) below for more details. - -```javascript -import * as Sentry from '@sentry/browser'; -// or e.g. import * as Sentry from '@sentry/react'; - -Sentry.init({ - dsn: '__DSN__', - - // This sets the sample rate to be 10%. You may want this to be 100% while - // in development and sample at a lower rate in production - replaysSessionSampleRate: 0.1, - - // If the entire session is not sampled, use the below sample rate to sample - // sessions when an error occurs. - replaysOnErrorSampleRate: 1.0, - - integrations: [ - Sentry.replayIntegration({ - // Additional SDK configuration goes in here, for example: - maskAllText: true, - blockAllMedia: true, - // See below for all available options - }), - ], - // ... -}); -``` - -### Lazy loading Replay - -Replay will start automatically when you add the integration. If you do not want to start Replay immediately (e.g. if -you want to lazy-load it), you can also use `addIntegration` to load it later: - -```js -import * as Sentry from "@sentry/react"; -import { BrowserClient } from "@sentry/browser"; - -Sentry.init({ - // Do not load it initially - integrations: [] -}); - -// Sometime later -const { Replay } = await import('@sentry/browser'); -const client = Sentry.getCurrentHub().getClient(); - -// Client can be undefined -client?.addIntegration(Sentry.replayIntegration()); -``` - -### Identifying Users - -If you have only followed the above instructions to setup session replays, you will only see IP addresses in Sentry's -UI. In order to associate a user identity to a session replay, use -[`setUser`](https://docs.sentry.io/platforms/javascript/enriching-events/identify-user/). - -```javascript -import * as Sentry from '@sentry/browser'; - -Sentry.setUser({ email: 'jane.doe@example.com' }); -``` - -### Stopping & starting Replays manually - -Replay recording only starts when it is included in the `integrations` array when calling `Sentry.init` or calling -`addIntegration` from the a Sentry client instance. To stop recording you can call `stop()`. - -```js -import * as Sentry from "@sentry/react"; -import { BrowserClient } from "@sentry/browser"; - -const replay = Sentry.replayIntegration(); - -Sentry.init({ - integrations: [replay] -}); - -const client = Sentry.getCurrentHub().getClient(); - -// Add replay integration, will start recoring -client?.addIntegration(replay); - -// Stop recording -replay.stop(); -``` - -When both `replaysSessionSampleRate` and `replaysOnErrorSampleRate` are `0`, recording will _not_ start. In this case, -you can manually start recording: - -```js -replay.start(); // Will start a session in "session" mode, regardless of sample rates -replay.startBuffering(); // Will start a session in "buffer" mode, regardless of sample rates -``` - -## Loading Replay as a CDN Bundle - -As an alternative to the NPM package, you can use Replay as a CDN bundle. Please refer to the -[Session Replay installation guide](https://docs.sentry.io/platforms/javascript/session-replay/#install) for CDN bundle -instructions. - -
-Deprecated Replay integration bundle -Installing the replay integration as a secondary integration bundle to the SDK bundle was deprecated in favour of -complete CDN bundles that already contain the replay integration. No need to keep two bundles in sync anymore. -The `replay.(min.)js` bundle will be removed in v8 of the JS SDKs. - -```html - - -``` - -
- -## Sessions - -A session starts when the Session Replay SDK is first loaded and initialized. The session will continue until 5 minutes -passes without any user interactions[^1] with the application _OR_ until a maximum of 30 minutes have elapsed. Closing -the browser tab will end the session immediately according to the rules for -[SessionStorage](https://developer.mozilla.org/en-US/docs/Web/API/Window/sessionStorage). - -[^1]: An 'interaction' refers to either a mouse click or a browser navigation event. - -### Accessing the Replay Session ID - -You can get the ID of the currently running session via `replay.getReplayId()`. This will return `undefined` if no -session is ongoing. - -### Replay Captures Only on Errors - -Alternatively, rather than recording an entire session, you can capture a replay only when an error occurs. In this -case, the integration will buffer up to one minute worth of events prior to the error being thrown. It will continue to -record the session following the rules above regarding session life and activity. Read the [sampling](#Sampling) section -for configuration options. - -## Sampling - -Sampling allows you to control how much of your website's traffic will result in a Session Replay. There are two sample -rates you can adjust to get the replays more relevant to your interests: - -- `replaysSessionSampleRate` - The sample rate for replays that begin recording immediately and last the entirety of the - user's session. -- `replaysOnErrorSampleRate` - The sample rate for replays that are recorded when an error happens. This type of replay - will record up to a minute of events prior to the error and continue recording until the session ends. - -When Replay is initialized, we check the `replaysSessionSampleRate`. If it is sampled, then we start recording & sending -Replay data immediately. Else, if `replaysOnErrorSampleRate > 0`, we'll start recording in buffering mode. In this mode, -whenever an error occurs we'll check `replaysOnErrorSampleRate`. If it is sampled, when we'll upload the Replay to -Sentry and continue recording normally. - -## Configuration - -### SDK Configuration - -The following options can be configured on the root level of your browser-based Sentry SDK, in `init({})`: - -| key | type | default | description | -| ------------------------ | ------ | ------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| replaysSessionSampleRate | number | `0` | The sample rate for replays that begin recording immediately and last the entirety of the user's session. 1.0 will collect all replays, 0 will collect no replays. | -| replaysOnErrorSampleRate | number | `0` | The sample rate for replays that are recorded when an error happens. This type of replay will record up to a minute of events prior to the error and continue recording until the session ends. 1.0 capturing all sessions with an error, and 0 capturing none. | - -### General Integration Configuration - -The following options can be configured as options to the integration, in `Sentry.replayIntegration({})`: - -| key | type | default | description | -| ------------- | ------- | ------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| stickySession | boolean | `true` | Keep track of the user across page loads. Note a single user using multiple tabs will result in multiple sessions. Closing a tab will result in the session being closed as well. | - -### Privacy Configuration - -The following options can be configured as options to the integration, in `Sentry.replayIntegration({})`: - -| key | type | default | description | -| ------------- | ------------------------ | -------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | -| maskAllText | boolean | `true` | Mask _all_ text content. Will pass text content through `maskFn` before sending to server. | -| maskAllInputs | boolean | `true` | Mask values of `` elements. Passes input values through `maskInputFn` before sending to server. | -| blockAllMedia | boolean | `true` | Block _all_ media elements (`img, svg, video, object, picture, embed, map, audio`) | -| maskFn | (text: string) => string | `(text) => '*'.repeat(text.length)` | Function to customize how text content is masked before sending to server. By default, masks text with `*`. | -| block | Array | `.sentry-block, [data-sentry-block]` | Redact any elements that match the DOM selectors. See [privacy](#blocking) section for an example. | -| unblock | Array | [] | Do not redact any elements that match the DOM selectors. Useful when using `blockAllMedia`. See [privacy](#blocking) section for an example. | -| mask | Array | `.sentry-mask, [data-sentry-mask]` | Mask all elements that match the given DOM selectors. See [privacy](#masking) section for an example. | -| unmask | Array | [] | Unmask all elements that match the given DOM selectors. Useful when using `maskAllText`. See [privacy](#masking) section for an example. | -| ignore | Array | `.sentry-ignore, [data-sentry-ignore]` | Ignores all events on the matching input fields. See [privacy](#ignoring) section for an example. | - -#### Deprecated options - -In order to streamline our privacy options, the following have been deprecated in favor for the respective options -above. - -| deprecated key | replaced by | description | -| ---------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------ | -| maskInputOptions | mask | Use CSS selectors in `mask` in order to mask all inputs of a certain type. For example, `input[type="address"]` | -| blockSelector | block | The selector(s) can be moved directly in the `block` array. | -| blockClass | block | Convert the class name to a CSS selector and add to `block` array. For example, `first-name` becomes `.first-name`. Regexes can be moved as-is. | -| maskClass | mask | Convert the class name to a CSS selector and add to `mask` array. For example, `first-name` becomes `.first-name`. Regexes can be moved as-is. | -| maskSelector | mask | The selector(s) can be moved directly in the `mask` array. | -| ignoreClass | ignore | Convert the class name to a CSS selector and add to `ignore` array. For example, `first-name` becomes `.first-name`. Regexes can be moved as-is. | - -## Privacy - -There are several ways to deal with PII. By default, the integration will mask all text content with `*` and block all -media elements (`img, svg, video, object, picture, embed, map, audio`). This can be disabled by setting `maskAllText` to -`false`. It is also possible to add the following CSS classes to specific DOM elements to prevent recording its -contents: `sentry-block`, `sentry-ignore`, and `sentry-mask`. The following sections will show examples of how content -is handled by the differing methods. - -### Masking - -Masking replaces the text content with something else. The default masking behavior is to replace each character with a -`*`. In this example the relevant html code is: `...
`. -![Masking example](https://user-images.githubusercontent.com/79684/193118192-dee1d3d8-5813-47e8-b532-f9ee1c8714b3.png) - -### Blocking - -Blocking replaces the element with a placeholder that has the same dimensions. The recording will show an empty space -where the content was. In this example the relevant html code is: `...
`. -![Blocking example](https://user-images.githubusercontent.com/79684/193118084-51a589fc-2160-476a-a8dc-b681eddb136c.png) - -### Ignoring - -Ignoring only applies to form inputs. Events will be ignored on the input element so that the replay does not show what -occurs inside of the input. In the below example, notice how the results in the table below the input changes, but no -text is visible in the input. - -https://user-images.githubusercontent.com/79684/192815134-a6451c3f-d3cb-455f-a699-7c3fe04d0a2e.mov - -## Error Linking - -Currently, errors that happen on the page while a replay is running are linked to the Replay, making it as easy as -possible to jump between related issues/replays. However, please note that it is _possible_ that the error count -reported on the Replay Detail page does not match the actual errors that have been captured. The reason for that is that -errors _can_ be lost, e.g. a network request fails, or similar. This should not happen to often, but be aware that it is -theoretically possible. - -## Manually sending replay data - -You can use `replay.flush()` to immediately send all currently captured replay data. When Replay is currently in -buffering mode, this will send up to the last 60 seconds of replay data, and also continue sending afterwards, similar -to when an error happens & is recorded. diff --git a/packages/replay/package.json b/packages/replay/package.json deleted file mode 100644 index 2f49dc805f8c..000000000000 --- a/packages/replay/package.json +++ /dev/null @@ -1,86 +0,0 @@ -{ - "name": "@sentry/replay", - "version": "8.0.0-alpha.4", - "description": "User replays for Sentry", - "main": "build/npm/cjs/index.js", - "module": "build/npm/esm/index.js", - "types": "build/npm/types/index.d.ts", - "exports": { - "./package.json": "./package.json", - ".": { - "import": { - "types": "./build/npm/types/index.d.ts", - "default": "./build/npm/esm/index.js" - }, - "require": { - "types": "./build/npm/types/index.d.ts", - "default": "./build/npm/cjs/index.js" - } - } - }, - "typesVersions": { - "<4.9": { - "build/npm/types/index.d.ts": [ - "build/npm/types-ts3.8/index.d.ts" - ] - } - }, - "files": [ - "cjs", - "esm", - "types", - "types-ts3.8" - ], - "sideEffects": false, - "scripts": { - "build": "run-p build:transpile build:types build:bundle", - "build:transpile": "rollup -c rollup.npm.config.mjs", - "build:bundle": "rollup -c rollup.bundle.config.mjs", - "build:dev": "run-p build:transpile build:types", - "build:types": "run-s build:types:core build:types:downlevel", - "build:types:core": "tsc -p tsconfig.types.json", - "build:types:downlevel": "yarn downlevel-dts build/npm/types build/npm/types-ts3.8 --to ts3.8", - "build:watch": "run-p build:transpile:watch build:bundle:watch build:types:watch", - "build:dev:watch": "run-p build:transpile:watch build:types:watch", - "build:transpile:watch": "yarn build:transpile --watch", - "build:bundle:watch": "yarn build:bundle --watch", - "build:types:watch": "tsc -p tsconfig.types.json --watch", - "build:tarball": "ts-node ../../scripts/prepack.ts --bundles && npm pack ./build/npm", - "circularDepCheck": "madge --circular src/index.ts", - "clean": "rimraf build sentry-replay-*.tgz", - "fix": "eslint . --format stylish --fix", - "lint": "eslint . --format stylish", - "yalc:publish": "ts-node ../../scripts/prepack.ts --bundles && yalc publish ./build/npm --push --sig" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/getsentry/sentry-javascript.git" - }, - "author": "Sentry", - "license": "MIT", - "bugs": { - "url": "https://github.com/getsentry/sentry-javascript/issues" - }, - "homepage": "https://docs.sentry.io/platforms/javascript/session-replay/", - "devDependencies": { - "@babel/core": "^7.17.5", - "@sentry-internal/replay-worker": "8.0.0-alpha.4", - "@sentry-internal/rrweb": "2.11.0", - "@sentry-internal/rrweb-snapshot": "2.11.0", - "fflate": "^0.8.1", - "jsdom-worker": "^0.2.1" - }, - "dependencies": { - "@sentry-internal/replay": "8.0.0-alpha.4", - "@sentry-internal/tracing": "8.0.0-alpha.4", - "@sentry/core": "8.0.0-alpha.4", - "@sentry/types": "8.0.0-alpha.4", - "@sentry/utils": "8.0.0-alpha.4" - }, - "engines": { - "node": ">=14.18" - }, - "volta": { - "extends": "../../package.json" - } -} diff --git a/packages/replay/rollup.bundle.config.mjs b/packages/replay/rollup.bundle.config.mjs deleted file mode 100644 index 8bdc41f8001c..000000000000 --- a/packages/replay/rollup.bundle.config.mjs +++ /dev/null @@ -1,12 +0,0 @@ -import { makeBaseBundleConfig, makeBundleConfigVariants } from '@sentry-internal/rollup-utils'; - -const baseBundleConfig = makeBaseBundleConfig({ - bundleType: 'addon', - entrypoints: ['src/index.ts'], - licenseTitle: '@sentry/replay', - outputFileBase: () => 'bundles/replay', -}); - -const builds = makeBundleConfigVariants(baseBundleConfig); - -export default builds; diff --git a/packages/replay/rollup.npm.config.mjs b/packages/replay/rollup.npm.config.mjs deleted file mode 100644 index 8c50a33f0afb..000000000000 --- a/packages/replay/rollup.npm.config.mjs +++ /dev/null @@ -1,16 +0,0 @@ -import { makeBaseNPMConfig, makeNPMConfigVariants } from '@sentry-internal/rollup-utils'; - -export default makeNPMConfigVariants( - makeBaseNPMConfig({ - hasBundles: true, - packageSpecificConfig: { - output: { - // set exports to 'named' or 'auto' so that rollup doesn't warn - exports: 'named', - // set preserveModules to false because for Replay we actually want - // to bundle everything into one file. - preserveModules: false, - }, - }, - }), -); diff --git a/packages/replay/src/index.ts b/packages/replay/src/index.ts deleted file mode 100644 index 62c11f2ead23..000000000000 --- a/packages/replay/src/index.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { - getReplay as internalGetReplay, - replayIntegration as internalReplayIntegration, -} from '@sentry-internal/replay'; -import type { - CanvasManagerInterface as InternalCanvasManagerInterface, - CanvasManagerOptions as InternalCanvasManagerOptions, - ReplayBreadcrumbFrame as InternalReplayBreadcrumbFrame, - ReplayBreadcrumbFrameEvent as InternalReplayBreadcrumbFrameEvent, - ReplayConfiguration as InternalReplayConfiguration, - ReplayEventType as InternalReplayEventType, - ReplayEventWithTime as InternalReplayEventWithTime, - ReplayFrame as InternalReplayFrame, - ReplayFrameEvent as InternalReplayFrameEvent, - ReplayOptionFrameEvent as InternalReplayOptionFrameEvent, - ReplaySpanFrame as InternalReplaySpanFrame, - ReplaySpanFrameEvent as InternalReplaySpanFrameEvent, -} from '@sentry-internal/replay'; - -/** @deprecated Import from `@sentry-internal/replay` */ -export const getReplay = internalGetReplay; - -/** @deprecated Import from `@sentry-internal/replay` */ -export const replayIntegration = internalReplayIntegration; - -/** @deprecated Import from `@sentry-internal/replay` */ -export type ReplayConfiguration = InternalReplayConfiguration; - -/** @deprecated Import from `@sentry-internal/replay` */ -export type ReplayEventType = InternalReplayEventType; - -/** @deprecated Import from `@sentry-internal/replay` */ -export type ReplayEventWithTime = InternalReplayEventWithTime; - -/** @deprecated Import from `@sentry-internal/replay` */ -export type ReplayBreadcrumbFrame = InternalReplayBreadcrumbFrame; - -/** @deprecated Import from `@sentry-internal/replay` */ -export type ReplayBreadcrumbFrameEvent = InternalReplayBreadcrumbFrameEvent; - -/** @deprecated Import from `@sentry-internal/replay` */ -export type ReplayOptionFrameEvent = InternalReplayOptionFrameEvent; - -/** @deprecated Import from `@sentry-internal/replay` */ -export type ReplayFrame = InternalReplayFrame; - -/** @deprecated Import from `@sentry-internal/replay` */ -export type ReplayFrameEvent = InternalReplayFrameEvent; - -/** @deprecated Import from `@sentry-internal/replay` */ -export type ReplaySpanFrame = InternalReplaySpanFrame; - -/** @deprecated Import from `@sentry-internal/replay` */ -export type ReplaySpanFrameEvent = InternalReplaySpanFrameEvent; - -/** @deprecated Import from `@sentry-internal/replay` */ -export type CanvasManagerInterface = InternalCanvasManagerInterface; - -/** @deprecated Import from `@sentry-internal/replay` */ -export type CanvasManagerOptions = InternalCanvasManagerOptions; diff --git a/packages/replay/tsconfig.json b/packages/replay/tsconfig.json deleted file mode 100644 index f8f54556da93..000000000000 --- a/packages/replay/tsconfig.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "module": "esnext" - }, - "include": ["src/**/*.ts"] -} diff --git a/packages/replay/tsconfig.types.json b/packages/replay/tsconfig.types.json deleted file mode 100644 index 374fd9bc9364..000000000000 --- a/packages/replay/tsconfig.types.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "extends": "./tsconfig.json", - - "compilerOptions": { - "declaration": true, - "declarationMap": true, - "emitDeclarationOnly": true, - "outDir": "build/npm/types" - } -} diff --git a/scripts/node-unit-tests.ts b/scripts/node-unit-tests.ts index 927d8cb61057..94802525b4dd 100644 --- a/scripts/node-unit-tests.ts +++ b/scripts/node-unit-tests.ts @@ -17,7 +17,6 @@ const DEFAULT_SKIP_TESTS_PACKAGES = [ '@sentry/angular', '@sentry/svelte', '@sentry/profiling-node', - '@sentry/replay', '@sentry-internal/replay', '@sentry-internal/replay-canvas', '@sentry-internal/replay-worker',