@danieljvdm/dev-kit 1.0.2 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -6
- package/package.json +1 -1
- package/skill-sources.jsonc +2 -33
- package/skill-sources.lock.json +15 -117
- package/skills/animate/LICENSE +21 -0
- package/skills/animate/NOTICE +10 -0
- package/skills/animate/SKILL.md +34 -0
- package/skills/animate/references/gestures.md +27 -0
- package/skills/animate/references/glossary.md +136 -0
- package/skills/animate/references/implementation.md +22 -0
- package/skills/animate/references/opportunities.md +18 -0
- package/skills/animate/references/principles.md +48 -0
- package/skills/animate/references/review.md +19 -0
- package/skills/cloudflare-workers/LICENSE +202 -0
- package/skills/cloudflare-workers/NOTICE +9 -0
- package/skills/cloudflare-workers/SKILL.md +26 -0
- package/skills/cloudflare-workers/references/durable-objects.md +68 -0
- package/skills/cloudflare-workers/references/sandbox.md +48 -0
- package/skills/cloudflare-workers/references/workers.md +63 -0
- package/skills/cloudflare-workers/references/wrangler.md +56 -0
- package/skills/design-ui/LICENSE +21 -0
- package/skills/design-ui/NOTICE +8 -0
- package/skills/design-ui/SKILL.md +29 -0
- package/skills/design-ui/references/appearance.md +22 -0
- package/skills/design-ui/references/components.md +33 -0
- package/skills/design-ui/references/exploration.md +50 -0
- package/skills/design-ui/references/libraries.md +39 -0
- package/skills/design-ui/references/themes.md +23 -0
- package/skills/dev-kit/SKILL.md +19 -38
- package/skills/dev-kit/references/cloudflare-worker-api.md +1 -1
- package/skills/dev-kit/references/skills.md +2 -2
- package/skills/effect-development/SKILL.md +27 -0
- package/skills/effect-development/agents/openai.yaml +4 -0
- package/skills/effect-development/references/api/index.md +32 -0
- package/skills/effect-development/references/api/schema-codecs.md +15 -0
- package/skills/{build-effect-apis/references → effect-development/references/api}/verification.md +10 -5
- package/skills/{effect-architecture-audit/SKILL.md → effect-development/references/architecture/index.md} +1 -6
- package/skills/{effect-atom-state/references → effect-development/references/atom}/effect-atom-client.md +8 -6
- package/skills/{effect-atom-state/references → effect-development/references/atom}/effect-atom-testing.md +7 -2
- package/skills/effect-development/references/atom/index.md +40 -0
- package/skills/{build-effect-clis/references → effect-development/references/cli}/entrypoints-and-testing.md +6 -2
- package/skills/effect-development/references/cli/index.md +39 -0
- package/skills/effect-development/references/setup.md +15 -0
- package/skills/open-pull-request/SKILL.md +10 -70
- package/skills/open-pull-request/references/evidence.md +22 -0
- package/skills/open-pull-request/references/explanation.md +21 -0
- package/skills/open-pull-request/references/publication.md +21 -0
- package/skills/sentry/LICENSE +202 -0
- package/skills/sentry/LICENSE-UPSTREAM +21 -0
- package/skills/sentry/NOTICE +14 -0
- package/skills/sentry/SKILL.md +33 -0
- package/skills/sentry/references/alert-payloads.md +105 -0
- package/skills/sentry/references/alerts.md +17 -0
- package/skills/sentry/references/artifacts.md +25 -0
- package/skills/sentry/references/auth-token.md +65 -0
- package/skills/sentry/references/concepts/ai-monitoring.md +131 -0
- package/skills/sentry/references/concepts/choosing-a-signal.md +78 -0
- package/skills/sentry/references/concepts/crons.md +50 -0
- package/skills/sentry/references/concepts/data-scrubbing.md +43 -0
- package/skills/sentry/references/concepts/errors.md +40 -0
- package/skills/sentry/references/concepts/logging.md +85 -0
- package/skills/sentry/references/concepts/metrics.md +49 -0
- package/skills/sentry/references/concepts/monitors.md +78 -0
- package/skills/sentry/references/concepts/profiling.md +38 -0
- package/skills/sentry/references/concepts/reduce-volume.md +49 -0
- package/skills/sentry/references/concepts/releases.md +43 -0
- package/skills/sentry/references/concepts/session-replay.md +35 -0
- package/skills/sentry/references/concepts/tracing.md +54 -0
- package/skills/sentry/references/concepts/user-feedback.md +36 -0
- package/skills/sentry/references/debug-artifacts/android.md +68 -0
- package/skills/sentry/references/debug-artifacts/apple.md +96 -0
- package/skills/sentry/references/debug-artifacts/dotnet.md +70 -0
- package/skills/sentry/references/debug-artifacts/flutter.md +65 -0
- package/skills/sentry/references/debug-artifacts/index.md +75 -0
- package/skills/sentry/references/debug-artifacts/javascript.md +94 -0
- package/skills/sentry/references/debug-artifacts/matching.md +73 -0
- package/skills/sentry/references/debug-artifacts/react-native.md +75 -0
- package/skills/sentry/references/first-error-setup.md +25 -0
- package/skills/sentry/references/instrumentation.md +30 -0
- package/skills/sentry/references/issues.md +32 -0
- package/skills/sentry/references/new-project.md +17 -0
- package/skills/sentry/references/otel-exporter.md +30 -0
- package/skills/sentry/references/release-workflow.md +31 -0
- package/skills/sentry/references/releases/ci-pipeline.md +214 -0
- package/skills/sentry/references/releases/index.md +93 -0
- package/skills/sentry/references/releases/suspect-commits.md +155 -0
- package/skills/sentry/references/releases/tagging.md +131 -0
- package/skills/sentry/references/releases/troubleshooting.md +67 -0
- package/skills/sentry/references/sdks/android/crons.md +305 -0
- package/skills/sentry/references/sdks/android/error-monitoring.md +800 -0
- package/skills/sentry/references/sdks/android/index.md +748 -0
- package/skills/sentry/references/sdks/android/integrations.md +48 -0
- package/skills/sentry/references/sdks/android/logging.md +374 -0
- package/skills/sentry/references/sdks/android/metrics.md +288 -0
- package/skills/sentry/references/sdks/android/profiling.md +397 -0
- package/skills/sentry/references/sdks/android/session-replay.md +406 -0
- package/skills/sentry/references/sdks/android/tracing.md +861 -0
- package/skills/sentry/references/sdks/browser/error-monitoring.md +861 -0
- package/skills/sentry/references/sdks/browser/index.md +714 -0
- package/skills/sentry/references/sdks/browser/logging.md +315 -0
- package/skills/sentry/references/sdks/browser/profiling.md +236 -0
- package/skills/sentry/references/sdks/browser/session-replay.md +586 -0
- package/skills/sentry/references/sdks/browser/tracing.md +561 -0
- package/skills/sentry/references/sdks/browser/user-feedback.md +354 -0
- package/skills/sentry/references/sdks/cloudflare/ai-monitoring.md +661 -0
- package/skills/sentry/references/sdks/cloudflare/crons.md +231 -0
- package/skills/sentry/references/sdks/cloudflare/durable-objects.md +381 -0
- package/skills/sentry/references/sdks/cloudflare/error-monitoring.md +329 -0
- package/skills/sentry/references/sdks/cloudflare/index.md +698 -0
- package/skills/sentry/references/sdks/cloudflare/logging.md +169 -0
- package/skills/sentry/references/sdks/cloudflare/nodejs-compat.md +134 -0
- package/skills/sentry/references/sdks/cloudflare/tracing.md +475 -0
- package/skills/sentry/references/sdks/cocoa/error-monitoring.md +394 -0
- package/skills/sentry/references/sdks/cocoa/index.md +497 -0
- package/skills/sentry/references/sdks/cocoa/logging.md +209 -0
- package/skills/sentry/references/sdks/cocoa/metrics.md +136 -0
- package/skills/sentry/references/sdks/cocoa/profiling.md +223 -0
- package/skills/sentry/references/sdks/cocoa/session-replay.md +257 -0
- package/skills/sentry/references/sdks/cocoa/tracing.md +524 -0
- package/skills/sentry/references/sdks/cocoa/user-feedback.md +310 -0
- package/skills/sentry/references/sdks/dotnet/crons.md +465 -0
- package/skills/sentry/references/sdks/dotnet/error-monitoring.md +1100 -0
- package/skills/sentry/references/sdks/dotnet/index.md +614 -0
- package/skills/sentry/references/sdks/dotnet/logging.md +556 -0
- package/skills/sentry/references/sdks/dotnet/metrics.md +229 -0
- package/skills/sentry/references/sdks/dotnet/profiling.md +296 -0
- package/skills/sentry/references/sdks/dotnet/tracing.md +897 -0
- package/skills/sentry/references/sdks/elixir/crons.md +371 -0
- package/skills/sentry/references/sdks/elixir/error-monitoring.md +335 -0
- package/skills/sentry/references/sdks/elixir/index.md +383 -0
- package/skills/sentry/references/sdks/elixir/logging.md +239 -0
- package/skills/sentry/references/sdks/elixir/tracing.md +233 -0
- package/skills/sentry/references/sdks/flutter/ecosystem-integrations.md +70 -0
- package/skills/sentry/references/sdks/flutter/error-monitoring.md +312 -0
- package/skills/sentry/references/sdks/flutter/index.md +728 -0
- package/skills/sentry/references/sdks/flutter/logging.md +387 -0
- package/skills/sentry/references/sdks/flutter/metrics.md +310 -0
- package/skills/sentry/references/sdks/flutter/profiling.md +214 -0
- package/skills/sentry/references/sdks/flutter/session-replay.md +308 -0
- package/skills/sentry/references/sdks/flutter/tracing.md +502 -0
- package/skills/sentry/references/sdks/go/crons.md +270 -0
- package/skills/sentry/references/sdks/go/error-monitoring.md +361 -0
- package/skills/sentry/references/sdks/go/index.md +324 -0
- package/skills/sentry/references/sdks/go/logging.md +354 -0
- package/skills/sentry/references/sdks/go/metrics.md +273 -0
- package/skills/sentry/references/sdks/go/profiling.md +46 -0
- package/skills/sentry/references/sdks/go/tracing.md +366 -0
- package/skills/sentry/references/sdks/index.md +41 -0
- package/skills/sentry/references/sdks/nestjs/ai-monitoring.md +410 -0
- package/skills/sentry/references/sdks/nestjs/crons.md +268 -0
- package/skills/sentry/references/sdks/nestjs/error-monitoring.md +729 -0
- package/skills/sentry/references/sdks/nestjs/index.md +699 -0
- package/skills/sentry/references/sdks/nestjs/logging.md +174 -0
- package/skills/sentry/references/sdks/nestjs/metrics.md +243 -0
- package/skills/sentry/references/sdks/nestjs/profiling.md +127 -0
- package/skills/sentry/references/sdks/nestjs/tracing.md +762 -0
- package/skills/sentry/references/sdks/nextjs/ai-monitoring.md +494 -0
- package/skills/sentry/references/sdks/nextjs/crons.md +383 -0
- package/skills/sentry/references/sdks/nextjs/error-monitoring.md +974 -0
- package/skills/sentry/references/sdks/nextjs/index.md +491 -0
- package/skills/sentry/references/sdks/nextjs/logging.md +381 -0
- package/skills/sentry/references/sdks/nextjs/metrics.md +411 -0
- package/skills/sentry/references/sdks/nextjs/profiling.md +403 -0
- package/skills/sentry/references/sdks/nextjs/session-replay.md +462 -0
- package/skills/sentry/references/sdks/nextjs/tracing.md +628 -0
- package/skills/sentry/references/sdks/node/ai-monitoring.md +303 -0
- package/skills/sentry/references/sdks/node/crons.md +432 -0
- package/skills/sentry/references/sdks/node/error-monitoring.md +1125 -0
- package/skills/sentry/references/sdks/node/index.md +942 -0
- package/skills/sentry/references/sdks/node/logging.md +380 -0
- package/skills/sentry/references/sdks/node/metrics.md +278 -0
- package/skills/sentry/references/sdks/node/profiling.md +373 -0
- package/skills/sentry/references/sdks/node/tracing.md +878 -0
- package/skills/sentry/references/sdks/php/ai-monitoring.md +310 -0
- package/skills/sentry/references/sdks/php/crons.md +265 -0
- package/skills/sentry/references/sdks/php/error-monitoring.md +626 -0
- package/skills/sentry/references/sdks/php/index.md +362 -0
- package/skills/sentry/references/sdks/php/laravel.md +542 -0
- package/skills/sentry/references/sdks/php/logging.md +242 -0
- package/skills/sentry/references/sdks/php/metrics.md +193 -0
- package/skills/sentry/references/sdks/php/profiling.md +115 -0
- package/skills/sentry/references/sdks/php/symfony.md +552 -0
- package/skills/sentry/references/sdks/php/tracing.md +516 -0
- package/skills/sentry/references/sdks/python/ai-monitoring.md +351 -0
- package/skills/sentry/references/sdks/python/crons.md +218 -0
- package/skills/sentry/references/sdks/python/error-monitoring.md +292 -0
- package/skills/sentry/references/sdks/python/index.md +361 -0
- package/skills/sentry/references/sdks/python/logging.md +234 -0
- package/skills/sentry/references/sdks/python/metrics.md +154 -0
- package/skills/sentry/references/sdks/python/profiling.md +120 -0
- package/skills/sentry/references/sdks/python/tracing.md +364 -0
- package/skills/sentry/references/sdks/react/error-monitoring.md +1607 -0
- package/skills/sentry/references/sdks/react/index.md +492 -0
- package/skills/sentry/references/sdks/react/logging.md +364 -0
- package/skills/sentry/references/sdks/react/profiling.md +322 -0
- package/skills/sentry/references/sdks/react/react-features.md +1272 -0
- package/skills/sentry/references/sdks/react/session-replay.md +1193 -0
- package/skills/sentry/references/sdks/react/tracing.md +1415 -0
- package/skills/sentry/references/sdks/react-native/error-monitoring.md +1481 -0
- package/skills/sentry/references/sdks/react-native/expo-config-plugin.md +45 -0
- package/skills/sentry/references/sdks/react-native/index.md +1030 -0
- package/skills/sentry/references/sdks/react-native/logging.md +444 -0
- package/skills/sentry/references/sdks/react-native/profiling.md +386 -0
- package/skills/sentry/references/sdks/react-native/session-replay.md +704 -0
- package/skills/sentry/references/sdks/react-native/tracing.md +1086 -0
- package/skills/sentry/references/sdks/react-native/user-feedback.md +815 -0
- package/skills/sentry/references/sdks/react-router-framework/error-monitoring.md +127 -0
- package/skills/sentry/references/sdks/react-router-framework/index.md +411 -0
- package/skills/sentry/references/sdks/react-router-framework/logging.md +66 -0
- package/skills/sentry/references/sdks/react-router-framework/profiling.md +57 -0
- package/skills/sentry/references/sdks/react-router-framework/react-router-framework-features.md +110 -0
- package/skills/sentry/references/sdks/react-router-framework/session-replay.md +67 -0
- package/skills/sentry/references/sdks/react-router-framework/tracing.md +96 -0
- package/skills/sentry/references/sdks/react-router-framework/user-feedback.md +71 -0
- package/skills/sentry/references/sdks/ruby/crons.md +184 -0
- package/skills/sentry/references/sdks/ruby/error-monitoring.md +248 -0
- package/skills/sentry/references/sdks/ruby/index.md +297 -0
- package/skills/sentry/references/sdks/ruby/logging.md +168 -0
- package/skills/sentry/references/sdks/ruby/metrics.md +196 -0
- package/skills/sentry/references/sdks/ruby/migration.md +321 -0
- package/skills/sentry/references/sdks/ruby/profiling.md +107 -0
- package/skills/sentry/references/sdks/ruby/tracing.md +388 -0
- package/skills/sentry/references/sdks/svelte/error-monitoring.md +456 -0
- package/skills/sentry/references/sdks/svelte/index.md +467 -0
- package/skills/sentry/references/sdks/svelte/logging.md +344 -0
- package/skills/sentry/references/sdks/svelte/session-replay.md +369 -0
- package/skills/sentry/references/sdks/svelte/tracing.md +406 -0
- package/skills/sentry/references/sdks/tanstack-start/error-monitoring.md +149 -0
- package/skills/sentry/references/sdks/tanstack-start/index.md +381 -0
- package/skills/sentry/references/sdks/tanstack-start/logging.md +74 -0
- package/skills/sentry/references/sdks/tanstack-start/session-replay.md +76 -0
- package/skills/sentry/references/sdks/tanstack-start/tanstackstart-features.md +128 -0
- package/skills/sentry/references/sdks/tanstack-start/tracing.md +123 -0
- package/skills/sentry/references/sdks/tanstack-start/user-feedback.md +81 -0
- package/skills/sentry/references/search-query-language.md +226 -0
- package/skills/sentry/references/semantics/angular.md +7 -0
- package/skills/sentry/references/semantics/app.md +28 -0
- package/skills/sentry/references/semantics/art.md +17 -0
- package/skills/sentry/references/semantics/aws.md +43 -0
- package/skills/sentry/references/semantics/browser.md +34 -0
- package/skills/sentry/references/semantics/cache.md +12 -0
- package/skills/sentry/references/semantics/client.md +8 -0
- package/skills/sentry/references/semantics/cloud.md +12 -0
- package/skills/sentry/references/semantics/cloudflare.md +23 -0
- package/skills/sentry/references/semantics/code.md +11 -0
- package/skills/sentry/references/semantics/culture.md +11 -0
- package/skills/sentry/references/semantics/db.md +21 -0
- package/skills/sentry/references/semantics/device.md +43 -0
- package/skills/sentry/references/semantics/error.md +7 -0
- package/skills/sentry/references/semantics/event.md +8 -0
- package/skills/sentry/references/semantics/exception.md +10 -0
- package/skills/sentry/references/semantics/faas.md +19 -0
- package/skills/sentry/references/semantics/file.md +8 -0
- package/skills/sentry/references/semantics/flag.md +7 -0
- package/skills/sentry/references/semantics/gcp.md +16 -0
- package/skills/sentry/references/semantics/gen_ai.md +53 -0
- package/skills/sentry/references/semantics/general.md +11 -0
- package/skills/sentry/references/semantics/graphql.md +9 -0
- package/skills/sentry/references/semantics/grpc.md +19 -0
- package/skills/sentry/references/semantics/http.md +34 -0
- package/skills/sentry/references/semantics/index.md +63 -0
- package/skills/sentry/references/semantics/jsonrpc.md +8 -0
- package/skills/sentry/references/semantics/jvm.md +12 -0
- package/skills/sentry/references/semantics/koa.md +7 -0
- package/skills/sentry/references/semantics/logger.md +7 -0
- package/skills/sentry/references/semantics/mcp.md +37 -0
- package/skills/sentry/references/semantics/mdc.md +7 -0
- package/skills/sentry/references/semantics/messaging.md +23 -0
- package/skills/sentry/references/semantics/middleware.md +7 -0
- package/skills/sentry/references/semantics/navigation.md +9 -0
- package/skills/sentry/references/semantics/nel.md +11 -0
- package/skills/sentry/references/semantics/network.md +17 -0
- package/skills/sentry/references/semantics/os.md +15 -0
- package/skills/sentry/references/semantics/otel.md +10 -0
- package/skills/sentry/references/semantics/params.md +7 -0
- package/skills/sentry/references/semantics/process.md +14 -0
- package/skills/sentry/references/semantics/react.md +7 -0
- package/skills/sentry/references/semantics/remix.md +7 -0
- package/skills/sentry/references/semantics/resource.md +7 -0
- package/skills/sentry/references/semantics/rpc.md +10 -0
- package/skills/sentry/references/semantics/score.md +10 -0
- package/skills/sentry/references/semantics/sentry.md +69 -0
- package/skills/sentry/references/semantics/server.md +8 -0
- package/skills/sentry/references/semantics/service.md +8 -0
- package/skills/sentry/references/semantics/session.md +7 -0
- package/skills/sentry/references/semantics/state.md +7 -0
- package/skills/sentry/references/semantics/thread.md +8 -0
- package/skills/sentry/references/semantics/timber.md +7 -0
- package/skills/sentry/references/semantics/trpc.md +8 -0
- package/skills/sentry/references/semantics/ui.md +18 -0
- package/skills/sentry/references/semantics/url.md +15 -0
- package/skills/sentry/references/semantics/user.md +17 -0
- package/skills/sentry/references/semantics/user_agent.md +7 -0
- package/skills/sentry/references/semantics/vercel.md +42 -0
- package/skills/sentry/references/setup-verification.md +39 -0
- package/skills/sentry/references/snapshots/github-actions-fanout.md +206 -0
- package/skills/sentry/references/snapshots/github-actions-simple.md +102 -0
- package/skills/sentry/references/snapshots/github-actions-swift-snapshot-testing.md +118 -0
- package/skills/sentry/references/snapshots/index.md +19 -0
- package/skills/sentry/references/snapshots/snapshot-previews.md +100 -0
- package/skills/sentry/references/snapshots/snapshots.md +123 -0
- package/skills/sentry/references/snapshots/wizard-setup.md +134 -0
- package/skills/testing/LICENSE +21 -0
- package/skills/testing/NOTICE +7 -0
- package/skills/testing/SKILL.md +13 -19
- package/skills/testing/agents/openai.yaml +1 -2
- package/skills/testing/references/selection.md +23 -0
- package/skills/testing/references/tdd.md +19 -0
- package/skills/testing/references/test-design.md +17 -0
- package/src/catalog.ts +1 -7
- package/skills/build-effect-apis/SKILL.md +0 -81
- package/skills/build-effect-apis/agents/openai.yaml +0 -4
- package/skills/build-effect-clis/SKILL.md +0 -92
- package/skills/build-effect-clis/agents/openai.yaml +0 -4
- package/skills/effect-architecture-audit/agents/openai.yaml +0 -4
- package/skills/effect-atom-state/SKILL.md +0 -97
- package/skills/effect-atom-state/agents/openai.yaml +0 -4
- package/skills/effect-ts/SKILL.md +0 -35
- package/skills/effect-ts/agents/openai.yaml +0 -4
- /package/skills/{build-effect-apis/references → effect-development/references/api}/cloudflare-workers.md +0 -0
- /package/skills/{build-effect-apis/references → effect-development/references/api}/runtime-assembly.md +0 -0
- /package/skills/{build-effect-apis/references → effect-development/references/api}/server-and-middleware.md +0 -0
- /package/skills/{build-effect-apis/references → effect-development/references/api}/shared-contracts.md +0 -0
- /package/skills/{effect-architecture-audit/references → effect-development/references/architecture}/service-and-boundary-audit.md +0 -0
- /package/skills/{effect-atom-state/references → effect-development/references/atom}/effect-atom-lifecycle.md +0 -0
- /package/skills/{effect-atom-state/references → effect-development/references/atom}/effect-atom-workflows.md +0 -0
- /package/skills/{effect-atom-state/references → effect-development/references/atom}/tanstack-start.md +0 -0
- /package/skills/{build-effect-clis/references → effect-development/references/cli}/command-design.md +0 -0
- /package/skills/{build-effect-clis/references → effect-development/references/cli}/processes-and-platform.md +0 -0
|
@@ -0,0 +1,462 @@
|
|
|
1
|
+
# Session Replay — Sentry Next.js SDK
|
|
2
|
+
|
|
3
|
+
> Minimum SDK: `@sentry/nextjs` ≥7.27.0+\
|
|
4
|
+
> `replayCanvasIntegration()`: requires ≥7.98.0+
|
|
5
|
+
|
|
6
|
+
> ⚠️ **Browser-only feature.** Add `replayIntegration()` **only** in
|
|
7
|
+
> `instrumentation-client.ts`. Never in `sentry.server.config.ts` or
|
|
8
|
+
> `sentry.edge.config.ts`.
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## Setup
|
|
13
|
+
|
|
14
|
+
Session Replay is bundled in `@sentry/nextjs` — no separate package needed.
|
|
15
|
+
|
|
16
|
+
```typescript
|
|
17
|
+
// instrumentation-client.ts ← client-side only
|
|
18
|
+
import * as Sentry from "@sentry/nextjs";
|
|
19
|
+
|
|
20
|
+
Sentry.init({
|
|
21
|
+
dsn: process.env.NEXT_PUBLIC_SENTRY_DSN,
|
|
22
|
+
|
|
23
|
+
// Sample rates live at init level, NOT inside replayIntegration()
|
|
24
|
+
replaysSessionSampleRate: 0.1, // record 10% of all sessions from start
|
|
25
|
+
replaysOnErrorSampleRate: 1.0, // record 100% of sessions that hit an error
|
|
26
|
+
|
|
27
|
+
integrations: [
|
|
28
|
+
Sentry.replayIntegration({
|
|
29
|
+
maskAllText: true, // default: true
|
|
30
|
+
blockAllMedia: true, // default: true
|
|
31
|
+
}),
|
|
32
|
+
],
|
|
33
|
+
});
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
> **Dev tip:** Set `replaysSessionSampleRate: 1.0` during development to capture every
|
|
37
|
+
> session.
|
|
38
|
+
|
|
39
|
+
### Where NOT to Add Replay
|
|
40
|
+
|
|
41
|
+
| Config file | Why |
|
|
42
|
+
| ------------------------------------- | ----------------------- |
|
|
43
|
+
| `sentry.server.config.ts` | Server runtime — no DOM |
|
|
44
|
+
| `sentry.edge.config.ts` | Edge runtime — no DOM |
|
|
45
|
+
| `instrumentation.ts` (server section) | Server-side code |
|
|
46
|
+
| Any Route Handler or Server Action | Server-side code |
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## Sample Rates
|
|
51
|
+
|
|
52
|
+
| Option | Type | Default | Behavior |
|
|
53
|
+
| -------------------------- | -------------- | ------- | ----------------------------------------------------------------------------------------------------- |
|
|
54
|
+
| `replaysSessionSampleRate` | `number` (0–1) | `0` | Fraction of all sessions recorded continuously from start |
|
|
55
|
+
| `replaysOnErrorSampleRate` | `number` (0–1) | `0` | Fraction of sessions captured when an error occurs — flushes ~60s of buffer, then continues recording |
|
|
56
|
+
|
|
57
|
+
**Recommended production sample rates by traffic:**
|
|
58
|
+
|
|
59
|
+
| Daily Sessions | `replaysSessionSampleRate` | `replaysOnErrorSampleRate` |
|
|
60
|
+
| -------------- | -------------------------- | -------------------------- |
|
|
61
|
+
| 100,000+ | `0.01` (1%) | `1.0` |
|
|
62
|
+
| 10,000–100,000 | `0.10` (10%) | `1.0` |
|
|
63
|
+
| Under 10,000 | `0.25` (25%) | `1.0` |
|
|
64
|
+
|
|
65
|
+
Always keep `replaysOnErrorSampleRate: 1.0` — error replays provide the most debugging
|
|
66
|
+
value.
|
|
67
|
+
|
|
68
|
+
### How Sampling Works
|
|
69
|
+
|
|
70
|
+
1. When a session starts, `replaysSessionSampleRate` is checked.
|
|
71
|
+
- **Sampled → Session Mode:** Recording is sent to Sentry in real-time chunks.
|
|
72
|
+
- **Not sampled → Buffer Mode:** Last ~60 seconds are kept in memory only.
|
|
73
|
+
Nothing is sent unless an error occurs.
|
|
74
|
+
2. If an error occurs in a buffered session, `replaysOnErrorSampleRate` is checked.
|
|
75
|
+
- **Sampled:** The 60-second buffer plus all subsequent data is sent to Sentry.
|
|
76
|
+
- **Not sampled:** Buffer is discarded; nothing is sent.
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## Session Lifecycle
|
|
81
|
+
|
|
82
|
+
- **Starts:** When the SDK first loads/initializes.
|
|
83
|
+
- **Ends:** After **15 minutes of inactivity** OR after a **maximum of 60 minutes**
|
|
84
|
+
total.
|
|
85
|
+
- **Tab close:** Ends the session immediately.
|
|
86
|
+
- **Page refreshes/navigations** within the same domain and tab are captured within the
|
|
87
|
+
same session.
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
## `replayIntegration()` Options Reference
|
|
92
|
+
|
|
93
|
+
All options go inside `Sentry.replayIntegration({})`:
|
|
94
|
+
|
|
95
|
+
### General Options
|
|
96
|
+
|
|
97
|
+
| Key | Type | Default | Description |
|
|
98
|
+
| -------------------------- | -------------------------- | ------------ | ---------------------------------------------------------------------------------------- |
|
|
99
|
+
| `stickySession` | `boolean` | `true` | Tracks a user across page refreshes. One tab = one session. |
|
|
100
|
+
| `mutationLimit` | `number` | `10000` | Max DOM mutations before recording stops (performance protection). |
|
|
101
|
+
| `mutationBreadcrumbLimit` | `number` | `750` | Threshold for sending a warning breadcrumb about large mutations. |
|
|
102
|
+
| `minReplayDuration` | `number` | `5000` ms | Min replay length before sending. Max: 15000. Only applies to session sampling. |
|
|
103
|
+
| `maxReplayDuration` | `number` | `3600000` ms | Maximum replay length. Capped at 1 hour. |
|
|
104
|
+
| `workerUrl` | `string` | `undefined` | URL to a self-hosted compression worker (avoids inline worker in bundle). |
|
|
105
|
+
| `beforeAddRecordingEvent` | `(event) => event \| null` | identity fn | Hook to filter/modify recording events before they leave the browser. |
|
|
106
|
+
| `beforeErrorSampling` | `(event) => boolean` | `() => true` | Called in buffer mode only. Return `false` to prevent this error from triggering upload. |
|
|
107
|
+
| `slowClickIgnoreSelectors` | `string[]` | `[]` | CSS selectors exempt from slow/rage click detection. |
|
|
108
|
+
|
|
109
|
+
### Network Capture Options
|
|
110
|
+
|
|
111
|
+
| Key | Type | Default | Description |
|
|
112
|
+
| ------------------------ | ---------------------- | ------- | ------------------------------------------------------------------------------------ |
|
|
113
|
+
| `networkDetailAllowUrls` | `(string \| RegExp)[]` | `[]` | URLs for which to capture request/response headers and bodies. |
|
|
114
|
+
| `networkDetailDenyUrls` | `(string \| RegExp)[]` | `[]` | URLs to never capture details for. Takes precedence over allow list. |
|
|
115
|
+
| `networkCaptureBodies` | `boolean` | `true` | Whether to capture request/response bodies for allowed URLs. |
|
|
116
|
+
| `networkRequestHeaders` | `string[]` | `[]` | Additional request headers to capture (beyond Content-Type, Content-Length, Accept). |
|
|
117
|
+
| `networkResponseHeaders` | `string[]` | `[]` | Additional response headers to capture. |
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
## Privacy Masking
|
|
122
|
+
|
|
123
|
+
**All masking/blocking happens on the client before any data is sent to Sentry’s
|
|
124
|
+
servers.**
|
|
125
|
+
|
|
126
|
+
### Default Privacy Behavior
|
|
127
|
+
|
|
128
|
+
| Setting | Default | Effect |
|
|
129
|
+
| --------------- | ------- | ------------------------------------------------------------------------------------------------------- |
|
|
130
|
+
| `maskAllText` | `true` | Every text character replaced with `*` |
|
|
131
|
+
| `maskAllInputs` | `true` | All `<input>` values masked |
|
|
132
|
+
| `blockAllMedia` | `true` | `img`, `svg`, `video`, `object`, `picture`, `embed`, `map`, `audio` replaced with same-size placeholder |
|
|
133
|
+
|
|
134
|
+
### Privacy Options in `replayIntegration({})`
|
|
135
|
+
|
|
136
|
+
| Key | Type | Default | Description |
|
|
137
|
+
| --------------- | -------------------------- | -------------------------------------------- | -------------------------------------------------------------------- |
|
|
138
|
+
| `mask` | `string[]` | `['.sentry-mask', '[data-sentry-mask]']` | Additional selectors to mask. |
|
|
139
|
+
| `maskAllText` | `boolean` | `true` | Mask all text via `maskFn`. |
|
|
140
|
+
| `maskAllInputs` | `boolean` | `true` | Mask all input values. |
|
|
141
|
+
| `maskFn` | `(text: string) => string` | `(s) => '*'.repeat(s.length)` | Custom masking function. |
|
|
142
|
+
| `block` | `string[]` | `['.sentry-block', '[data-sentry-block]']` | Additional selectors to block (replaced with a blank same-size box). |
|
|
143
|
+
| `blockAllMedia` | `boolean` | `true` | Block all media elements. |
|
|
144
|
+
| `ignore` | `string[]` | `['.sentry-ignore', '[data-sentry-ignore]']` | Input events on matching elements are ignored entirely. |
|
|
145
|
+
| `unblock` | `string[]` | `[]` | Selectors to un-block from `blockAllMedia`. |
|
|
146
|
+
| `unmask` | `string[]` | `[]` | Selectors to un-mask from `maskAllText`. |
|
|
147
|
+
|
|
148
|
+
### Three Privacy Mechanisms Compared
|
|
149
|
+
|
|
150
|
+
| Mechanism | What It Does | HTML Attribute | CSS Class |
|
|
151
|
+
| ---------- | -------------------------------------- | -------------------- | --------------- |
|
|
152
|
+
| **Mask** | Replaces text chars with `*` | `data-sentry-mask` | `sentry-mask` |
|
|
153
|
+
| **Block** | Replaces entire element with blank box | `data-sentry-block` | `sentry-block` |
|
|
154
|
+
| **Ignore** | Suppresses input events on the element | `data-sentry-ignore` | `sentry-ignore` |
|
|
155
|
+
|
|
156
|
+
### Code Examples
|
|
157
|
+
|
|
158
|
+
**Opt-out of all masking (for non-PII sites):**
|
|
159
|
+
|
|
160
|
+
```typescript
|
|
161
|
+
Sentry.replayIntegration({
|
|
162
|
+
// Only use if your site has NO sensitive data
|
|
163
|
+
maskAllText: false,
|
|
164
|
+
blockAllMedia: false,
|
|
165
|
+
});
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
**Custom masking selectors:**
|
|
169
|
+
|
|
170
|
+
```typescript
|
|
171
|
+
Sentry.replayIntegration({
|
|
172
|
+
mask: [".sensitive-field", "[data-pii]"],
|
|
173
|
+
unmask: [".safe-to-show"],
|
|
174
|
+
block: [".user-avatar", "#credit-card-form"],
|
|
175
|
+
unblock: [".public-image"],
|
|
176
|
+
ignore: ["#search-input"],
|
|
177
|
+
});
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
**HTML-level masking (no JS config needed):**
|
|
181
|
+
|
|
182
|
+
```html
|
|
183
|
+
<!-- Block this form entirely -->
|
|
184
|
+
<form data-sentry-block>...</form>
|
|
185
|
+
|
|
186
|
+
<!-- Mask text in this element -->
|
|
187
|
+
<div class="sentry-mask">Sensitive content</div>
|
|
188
|
+
|
|
189
|
+
<!-- Ignore events on this input -->
|
|
190
|
+
<input class="sentry-ignore" type="text" />
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
> ⚠️ **v8 Breaking Change:** In SDK v8+, `unblock` and `unmask` no longer automatically
|
|
194
|
+
> add `sentry-unblock`/`sentry-unmask` class selectors.
|
|
195
|
+
> To restore v7 behavior:
|
|
196
|
+
>
|
|
197
|
+
> ```typescript
|
|
198
|
+
> Sentry.replayIntegration({
|
|
199
|
+
> unblock: [".sentry-unblock, [data-sentry-unblock]"],
|
|
200
|
+
> unmask: [".sentry-unmask, [data-sentry-unmask]"],
|
|
201
|
+
> });
|
|
202
|
+
> ```
|
|
203
|
+
|
|
204
|
+
---
|
|
205
|
+
|
|
206
|
+
## Network Request/Response Capture
|
|
207
|
+
|
|
208
|
+
By default, Replay captures only: URL, body size, method, status code.
|
|
209
|
+
SDK ≥7.50.0 required for headers/bodies.
|
|
210
|
+
|
|
211
|
+
```typescript
|
|
212
|
+
Sentry.replayIntegration({
|
|
213
|
+
// Capture details for all same-origin requests
|
|
214
|
+
networkDetailAllowUrls: [
|
|
215
|
+
window.location.origin,
|
|
216
|
+
"api.example.com",
|
|
217
|
+
/^https:\/\/api\.example\.com/,
|
|
218
|
+
],
|
|
219
|
+
|
|
220
|
+
// Exclude PII-heavy endpoints
|
|
221
|
+
networkDetailDenyUrls: ["/api/auth", /\/users\/\d+\/private/],
|
|
222
|
+
|
|
223
|
+
networkCaptureBodies: true,
|
|
224
|
+
networkRequestHeaders: ["Cache-Control", "X-Request-ID"],
|
|
225
|
+
networkResponseHeaders: ["X-RateLimit-Remaining"],
|
|
226
|
+
});
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
**Limits:**
|
|
230
|
+
|
|
231
|
+
- Bodies truncated to **150k characters** max.
|
|
232
|
+
- Only text-based bodies captured: JSON, XML, FormData.
|
|
233
|
+
Binary/media excluded.
|
|
234
|
+
- Sentry applies server-side PII scrubbing (credit cards, SSNs, private keys) on
|
|
235
|
+
ingested data.
|
|
236
|
+
|
|
237
|
+
---
|
|
238
|
+
|
|
239
|
+
## Tree-Shaking Replay out of Server Bundles
|
|
240
|
+
|
|
241
|
+
**Critical for Next.js:** Session Replay is browser-only.
|
|
242
|
+
Prevent it from being bundled into server-side or edge bundles:
|
|
243
|
+
|
|
244
|
+
```javascript
|
|
245
|
+
// next.config.js
|
|
246
|
+
const { withSentryConfig } = require("@sentry/nextjs");
|
|
247
|
+
|
|
248
|
+
module.exports = withSentryConfig(nextConfig, {
|
|
249
|
+
webpack: {
|
|
250
|
+
treeshake: {
|
|
251
|
+
removeDebugLogging: true, // Strip SDK internal debug logs
|
|
252
|
+
excludeReplayIframe: false, // Set to true to remove iframe content capture
|
|
253
|
+
excludeReplayShadowDOM: false, // Set to true to remove shadow DOM capture
|
|
254
|
+
excludeReplayCompressionWorker: false, // Remove if using custom workerUrl
|
|
255
|
+
},
|
|
256
|
+
},
|
|
257
|
+
});
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
| Option | Type | Default | Description |
|
|
261
|
+
| -------------------------------- | --------- | ------- | -------------------------------------------------------------------------- |
|
|
262
|
+
| `removeDebugLogging` | `boolean` | `false` | Strips SDK internal `console.log` calls. Safe to enable in production. |
|
|
263
|
+
| `removeTracing` | `boolean` | `false` | Removes ALL tracing code. Never call `Sentry.startSpan()` etc. if enabled. |
|
|
264
|
+
| `excludeReplayIframe` | `boolean` | `false` | Removes iframe content capture from Replay bundle. |
|
|
265
|
+
| `excludeReplayShadowDOM` | `boolean` | `false` | Removes shadow DOM capture from Replay bundle. |
|
|
266
|
+
| `excludeReplayCompressionWorker` | `boolean` | `false` | Removes built-in compression worker. Requires providing `workerUrl`. |
|
|
267
|
+
|
|
268
|
+
> ⚠️ Tree-shaking only works with **webpack** builds.
|
|
269
|
+
> **Turbopack is not supported.**
|
|
270
|
+
|
|
271
|
+
---
|
|
272
|
+
|
|
273
|
+
## Canvas Recording
|
|
274
|
+
|
|
275
|
+
> ⚠️ **There is currently NO PII scrubbing in canvas recordings.** Use with caution.
|
|
276
|
+
|
|
277
|
+
Canvas recording is opt-in and requires SDK ≥7.98.0:
|
|
278
|
+
|
|
279
|
+
```typescript
|
|
280
|
+
// instrumentation-client.ts
|
|
281
|
+
Sentry.init({
|
|
282
|
+
dsn: process.env.NEXT_PUBLIC_SENTRY_DSN,
|
|
283
|
+
replaysSessionSampleRate: 0.1,
|
|
284
|
+
replaysOnErrorSampleRate: 1.0,
|
|
285
|
+
integrations: [
|
|
286
|
+
Sentry.replayIntegration(),
|
|
287
|
+
Sentry.replayCanvasIntegration(), // adds canvas support
|
|
288
|
+
],
|
|
289
|
+
});
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
**For WebGL/3D canvases** (manual snapshot mode):
|
|
293
|
+
|
|
294
|
+
```typescript
|
|
295
|
+
Sentry.replayCanvasIntegration({
|
|
296
|
+
enableManualSnapshot: true,
|
|
297
|
+
});
|
|
298
|
+
|
|
299
|
+
function paint() {
|
|
300
|
+
// ... your rendering commands ...
|
|
301
|
+
|
|
302
|
+
const canvasEl = document.querySelector<HTMLCanvasElement>("#my-canvas");
|
|
303
|
+
Sentry.getClient()
|
|
304
|
+
?.getIntegrationByName("ReplayCanvas")
|
|
305
|
+
// @ts-ignore
|
|
306
|
+
?.snapshot(canvasEl);
|
|
307
|
+
}
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
---
|
|
311
|
+
|
|
312
|
+
## Lazy Loading Replay
|
|
313
|
+
|
|
314
|
+
To reduce initial bundle size, add `replayIntegration()` dynamically after the page
|
|
315
|
+
loads:
|
|
316
|
+
|
|
317
|
+
```typescript
|
|
318
|
+
// instrumentation-client.ts
|
|
319
|
+
|
|
320
|
+
Sentry.init({
|
|
321
|
+
dsn: process.env.NEXT_PUBLIC_SENTRY_DSN,
|
|
322
|
+
replaysSessionSampleRate: 0.1,
|
|
323
|
+
replaysOnErrorSampleRate: 1.0,
|
|
324
|
+
integrations: [], // Replay NOT included here
|
|
325
|
+
});
|
|
326
|
+
|
|
327
|
+
// Later — after route change, user interaction, or feature flag check
|
|
328
|
+
import("@sentry/nextjs").then((lazySentry) => {
|
|
329
|
+
Sentry.addIntegration(lazySentry.replayIntegration());
|
|
330
|
+
});
|
|
331
|
+
```
|
|
332
|
+
|
|
333
|
+
---
|
|
334
|
+
|
|
335
|
+
## Programmatic Replay Control
|
|
336
|
+
|
|
337
|
+
```typescript
|
|
338
|
+
const replay = Sentry.getReplay();
|
|
339
|
+
|
|
340
|
+
replay.start(); // Start in session mode (sends continuously)
|
|
341
|
+
replay.startBuffering(); // Start in buffer mode (only sends on error)
|
|
342
|
+
await replay.stop(); // End the current session
|
|
343
|
+
await replay.flush(); // Force upload any pending buffered data
|
|
344
|
+
```
|
|
345
|
+
|
|
346
|
+
Use cases:
|
|
347
|
+
|
|
348
|
+
- **User-based sampling:** Check authentication, then call `flush()` for premium users.
|
|
349
|
+
- **Route-based sampling:** Call `start()` only on high-value pages.
|
|
350
|
+
- **Error filtering:** Use `beforeErrorSampling` to prevent certain error types from
|
|
351
|
+
triggering upload:
|
|
352
|
+
|
|
353
|
+
```typescript
|
|
354
|
+
Sentry.replayIntegration({
|
|
355
|
+
beforeErrorSampling: (event) => {
|
|
356
|
+
// Prevent console.error from triggering replay upload
|
|
357
|
+
if (event.logger === "console") return false;
|
|
358
|
+
return true;
|
|
359
|
+
},
|
|
360
|
+
});
|
|
361
|
+
```
|
|
362
|
+
|
|
363
|
+
---
|
|
364
|
+
|
|
365
|
+
## Custom Compression Worker
|
|
366
|
+
|
|
367
|
+
Host the compression worker yourself to reduce bundle size and comply with strict CSP
|
|
368
|
+
policies:
|
|
369
|
+
|
|
370
|
+
```typescript
|
|
371
|
+
// Step 1: Download worker.min.js from:
|
|
372
|
+
// https://github.com/getsentry/sentry-javascript/blob/develop/packages/replay-worker/examples/worker.min.js
|
|
373
|
+
// Host at /public/worker.min.js → served at /worker.min.js
|
|
374
|
+
|
|
375
|
+
// Step 2: Configure
|
|
376
|
+
Sentry.replayIntegration({
|
|
377
|
+
workerUrl: "/assets/worker.min.js",
|
|
378
|
+
});
|
|
379
|
+
```
|
|
380
|
+
|
|
381
|
+
```javascript
|
|
382
|
+
// next.config.js — remove built-in worker from bundle
|
|
383
|
+
module.exports = withSentryConfig(nextConfig, {
|
|
384
|
+
webpack: {
|
|
385
|
+
treeshake: {
|
|
386
|
+
excludeReplayCompressionWorker: true, // since you're hosting your own
|
|
387
|
+
},
|
|
388
|
+
},
|
|
389
|
+
});
|
|
390
|
+
```
|
|
391
|
+
|
|
392
|
+
---
|
|
393
|
+
|
|
394
|
+
## Content Security Policy (CSP)
|
|
395
|
+
|
|
396
|
+
Session Replay uses a Web Worker for off-thread compression.
|
|
397
|
+
Required CSP directives:
|
|
398
|
+
|
|
399
|
+
```
|
|
400
|
+
worker-src 'self' blob:
|
|
401
|
+
child-src 'self' blob: ← Required for Safari ≤ 15.4
|
|
402
|
+
```
|
|
403
|
+
|
|
404
|
+
Also add `sentry.io` to your CORS policy so the Sentry replay iframe can fetch CSS,
|
|
405
|
+
fonts, and images.
|
|
406
|
+
|
|
407
|
+
**For Next.js, set headers in `next.config.js`:**
|
|
408
|
+
|
|
409
|
+
```javascript
|
|
410
|
+
// next.config.js
|
|
411
|
+
module.exports = {
|
|
412
|
+
async headers() {
|
|
413
|
+
return [
|
|
414
|
+
{
|
|
415
|
+
source: "/(.*)",
|
|
416
|
+
headers: [
|
|
417
|
+
{
|
|
418
|
+
key: "Content-Security-Policy",
|
|
419
|
+
value: "default-src 'self'; worker-src 'self' blob:; child-src 'self' blob:;",
|
|
420
|
+
},
|
|
421
|
+
],
|
|
422
|
+
},
|
|
423
|
+
];
|
|
424
|
+
},
|
|
425
|
+
};
|
|
426
|
+
```
|
|
427
|
+
|
|
428
|
+
---
|
|
429
|
+
|
|
430
|
+
## Performance Impact
|
|
431
|
+
|
|
432
|
+
- **Bundle size:** ~**50KB gzipped** added to browser bundle.
|
|
433
|
+
- **Compression:** Off-thread in a Web Worker — does not block the main thread.
|
|
434
|
+
- **Mutation protection:** Recording auto-stops if DOM mutations exceed `mutationLimit`
|
|
435
|
+
(default 10,000).
|
|
436
|
+
- **Large lists:** Virtualize or paginate long lists to avoid mutation limit triggers.
|
|
437
|
+
|
|
438
|
+
**Rage/slow click false positives** (Download/Print buttons that don’t mutate DOM):
|
|
439
|
+
|
|
440
|
+
```typescript
|
|
441
|
+
Sentry.replayIntegration({
|
|
442
|
+
slowClickIgnoreSelectors: [".download-btn", 'a[label*="download" i]', "#print-button"],
|
|
443
|
+
});
|
|
444
|
+
```
|
|
445
|
+
|
|
446
|
+
---
|
|
447
|
+
|
|
448
|
+
## Troubleshooting
|
|
449
|
+
|
|
450
|
+
| Problem | Cause | Solution |
|
|
451
|
+
| -------------------------------------------- | -------------------------------------- | ---------------------------------------------------------------------- |
|
|
452
|
+
| Replay data missing | CSP blocking blob: workers | Add `worker-src 'self' blob:` |
|
|
453
|
+
| CSS/fonts missing in replay | CORS blocking Sentry iframe | Add `sentry.io` to CORS policy |
|
|
454
|
+
| Replay not recording | Added to wrong config file | Move to `instrumentation-client.ts` only |
|
|
455
|
+
| Click positions misaligned | Custom variable-width fonts | Add `Access-Control-Allow-Origin` headers for fonts |
|
|
456
|
+
| Too many rage clicks | Non-mutating buttons (Download, Print) | Use `slowClickIgnoreSelectors` |
|
|
457
|
+
| Replay stops early | Too many DOM mutations | Virtualize lists; adjust `mutationLimit` |
|
|
458
|
+
| `captureConsoleIntegration` triggers replays | `console.error` counted as error | Use `beforeErrorSampling` to return `false` for console events |
|
|
459
|
+
| iframe content not masked | `srcdoc` attribute bypasses masking | Add `block: ["iframe"]` to block iframes entirely |
|
|
460
|
+
| Canvas not recording | Not using `replayCanvasIntegration()` | Add `Sentry.replayCanvasIntegration()` alongside `replayIntegration()` |
|
|
461
|
+
| Build error about browser globals in server | Replay leaking into server bundle | Use tree-shaking options in `withSentryConfig` |
|
|
462
|
+
| `replayCanvasIntegration` not available | SDK version too old | Upgrade to ≥7.98.0 |
|