@scalebun/react-native 1.10.4 → 1.10.6
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/android/src/main/java/com/scalebun/replaysdk/tracking/InteractionTracker.kt +19 -0
- package/dist/scalebun.full.js +460 -57
- package/dist/scalebun.slim.js +457 -62
- package/ios/Core/DeviceIdentity.swift +50 -0
- package/ios/Profiler/ScaleBunProfilerModule.swift +2 -8
- package/ios/ReplaySdk.swift +3 -1
- package/lib/commonjs/analytics/EventTracker.js +22 -0
- package/lib/commonjs/bootstrap/SDKBootstrapper.js +17 -3
- package/lib/commonjs/core/config/schema.js +29 -0
- package/lib/commonjs/core/constants/version.js +1 -1
- package/lib/commonjs/core/context/device.js +5 -0
- package/lib/commonjs/debug/redaction.js +227 -41
- package/lib/commonjs/features/journey/ScaleBunDebugRoot.js +9 -1
- package/lib/commonjs/features/navigation/AutoScreenDetector.js +68 -16
- package/lib/commonjs/features/session/BackendSessionAdapter.js +73 -6
- package/lib/commonjs/features/session/SessionManager.js +28 -0
- package/lib/commonjs/public/ScaleBunFacade.js +113 -2
- package/lib/module/analytics/EventTracker.js +22 -0
- package/lib/module/bootstrap/SDKBootstrapper.js +17 -3
- package/lib/module/core/config/schema.js +29 -0
- package/lib/module/core/constants/version.js +1 -1
- package/lib/module/core/context/device.js +5 -0
- package/lib/module/debug/redaction.js +227 -41
- package/lib/module/features/journey/ScaleBunDebugRoot.js +9 -1
- package/lib/module/features/navigation/AutoScreenDetector.js +68 -16
- package/lib/module/features/session/BackendSessionAdapter.js +73 -6
- package/lib/module/features/session/SessionManager.js +28 -0
- package/lib/module/public/ScaleBunFacade.js +114 -3
- package/lib/typescript/analytics/EventTracker.d.ts +15 -0
- package/lib/typescript/core/config/schema.d.ts +8 -0
- package/lib/typescript/core/constants/version.d.ts +1 -1
- package/lib/typescript/core/context/device.d.ts +1 -0
- package/lib/typescript/debug/redaction.d.ts +8 -2
- package/lib/typescript/features/navigation/AutoScreenDetector.d.ts +25 -0
- package/lib/typescript/features/session/BackendSessionAdapter.d.ts +9 -0
- package/lib/typescript/features/session/SessionManager.d.ts +15 -0
- package/lib/typescript/public/ScaleBunFacade.d.ts +44 -2
- package/lib/typescript/public/types.d.ts +1 -1
- package/package.json +6 -2
- package/src/analytics/EventTracker.ts +19 -0
- package/src/bootstrap/SDKBootstrapper.ts +17 -1
- package/src/core/config/schema.ts +22 -0
- package/src/core/constants/version.ts +1 -1
- package/src/core/context/device.ts +6 -0
- package/src/debug/redaction.ts +235 -42
- package/src/features/journey/ScaleBunDebugRoot.tsx +9 -1
- package/src/features/navigation/AutoScreenDetector.ts +70 -16
- package/src/features/session/BackendSessionAdapter.ts +81 -7
- package/src/features/session/SessionManager.ts +31 -0
- package/src/public/ScaleBunFacade.ts +122 -3
- package/src/public/types.ts +1 -1
- package/dist/scalebun.full.js.map +0 -1
- package/dist/scalebun.slim.js.map +0 -1
- package/lib/commonjs/analytics/EventTracker.js.map +0 -1
- package/lib/commonjs/analytics/automaticEvents.js.map +0 -1
- package/lib/commonjs/analytics/batching.js.map +0 -1
- package/lib/commonjs/analytics/eventLane.js.map +0 -1
- package/lib/commonjs/bootstrap/FeatureRegistry.js.map +0 -1
- package/lib/commonjs/bootstrap/SDKBootstrapper.js.map +0 -1
- package/lib/commonjs/bucketing/fnv1a32.js.map +0 -1
- package/lib/commonjs/compat/codepush.js.map +0 -1
- package/lib/commonjs/config/ConfigManager.js.map +0 -1
- package/lib/commonjs/config/configTypes.js.map +0 -1
- package/lib/commonjs/core/architecture.js.map +0 -1
- package/lib/commonjs/core/clock/now.js.map +0 -1
- package/lib/commonjs/core/config/defaults.js.map +0 -1
- package/lib/commonjs/core/config/schema.js.map +0 -1
- package/lib/commonjs/core/constants/endpoints.js.map +0 -1
- package/lib/commonjs/core/constants/protocol.js.map +0 -1
- package/lib/commonjs/core/constants/timings.js.map +0 -1
- package/lib/commonjs/core/constants/version.js.map +0 -1
- package/lib/commonjs/core/context/app.js.map +0 -1
- package/lib/commonjs/core/context/device.js.map +0 -1
- package/lib/commonjs/core/context/session.js.map +0 -1
- package/lib/commonjs/core/context/user.js.map +0 -1
- package/lib/commonjs/core/contracts/IFeature.js.map +0 -1
- package/lib/commonjs/core/di/container.js.map +0 -1
- package/lib/commonjs/core/encoding/base64.js.map +0 -1
- package/lib/commonjs/core/id/deviceId.js.map +0 -1
- package/lib/commonjs/core/id/installationId.js.map +0 -1
- package/lib/commonjs/core/id/sessionId.js.map +0 -1
- package/lib/commonjs/core/lifecycle/appLifecycle.js.map +0 -1
- package/lib/commonjs/core/lifecycle/crashSafe.js.map +0 -1
- package/lib/commonjs/core/logger/errorClassification.js.map +0 -1
- package/lib/commonjs/core/logger/internalLogger.js.map +0 -1
- package/lib/commonjs/core/logger/levels.js.map +0 -1
- package/lib/commonjs/crypto/hmacSha256.js.map +0 -1
- package/lib/commonjs/debug/bootstrap.js.map +0 -1
- package/lib/commonjs/debug/commands.js.map +0 -1
- package/lib/commonjs/debug/configBuilder.js.map +0 -1
- package/lib/commonjs/debug/exportBridge.js.map +0 -1
- package/lib/commonjs/debug/hostResolver.js.map +0 -1
- package/lib/commonjs/debug/index.js.map +0 -1
- package/lib/commonjs/debug/metrics.js.map +0 -1
- package/lib/commonjs/debug/perf.js.map +0 -1
- package/lib/commonjs/debug/perfWiring.js.map +0 -1
- package/lib/commonjs/debug/protocol.js.map +0 -1
- package/lib/commonjs/debug/redaction.js.map +0 -1
- package/lib/commonjs/debug/replayWiring.js.map +0 -1
- package/lib/commonjs/debug/screenTracking.js.map +0 -1
- package/lib/commonjs/debug/sessionWiring.js.map +0 -1
- package/lib/commonjs/debug/stream.js.map +0 -1
- package/lib/commonjs/debug/transport.js.map +0 -1
- package/lib/commonjs/features/bugreport/BugReportFeature.js.map +0 -1
- package/lib/commonjs/features/bugreport/buildPayload.js.map +0 -1
- package/lib/commonjs/features/bugreport/index.js.map +0 -1
- package/lib/commonjs/features/crash/CrashFeature.js.map +0 -1
- package/lib/commonjs/features/crash/CrashReporter.js.map +0 -1
- package/lib/commonjs/features/crash/NativeCrashFeature.js.map +0 -1
- package/lib/commonjs/features/crash/capture.js.map +0 -1
- package/lib/commonjs/features/crash/globalHandler.js.map +0 -1
- package/lib/commonjs/features/crash/index.js.map +0 -1
- package/lib/commonjs/features/crash/nativeCrashBridge.js.map +0 -1
- package/lib/commonjs/features/crash/rejectionHandler.js.map +0 -1
- package/lib/commonjs/features/engage/EngageAnchor.js.map +0 -1
- package/lib/commonjs/features/engage/EngageArchetypeRenderers.js.map +0 -1
- package/lib/commonjs/features/engage/EngageInAppView.js.map +0 -1
- package/lib/commonjs/features/engage/EngageInlinePlacement.js.map +0 -1
- package/lib/commonjs/features/engage/EngagePromptProvider.js.map +0 -1
- package/lib/commonjs/features/engage/EngagePromptView.js.map +0 -1
- package/lib/commonjs/features/engage/EngageTransport.js.map +0 -1
- package/lib/commonjs/features/engage/EngageVariantContent.js.map +0 -1
- package/lib/commonjs/features/engage/__test-support__/reactNativeStub.js.map +0 -1
- package/lib/commonjs/features/engage/attachmentCapture.js.map +0 -1
- package/lib/commonjs/features/engage/captureVoiceAttachment.js.map +0 -1
- package/lib/commonjs/features/engage/engageCoachmarkTour.js.map +0 -1
- package/lib/commonjs/features/engage/engageGameLogic.js.map +0 -1
- package/lib/commonjs/features/engage/engageMediaSizing.js.map +0 -1
- package/lib/commonjs/features/engage/engageMultiStepSheet.js.map +0 -1
- package/lib/commonjs/features/engage/engageOutcome.js.map +0 -1
- package/lib/commonjs/features/engage/engagePushTokenBridge.js.map +0 -1
- package/lib/commonjs/features/engage/engageShakeBridge.js.map +0 -1
- package/lib/commonjs/features/engage/engageSignals.js.map +0 -1
- package/lib/commonjs/features/engage/engageStoreReviewBridge.js.map +0 -1
- package/lib/commonjs/features/engage/engageTestSeenStore.js.map +0 -1
- package/lib/commonjs/features/engage/engageThrottle.js.map +0 -1
- package/lib/commonjs/features/engage/engageTriggerEngine.js.map +0 -1
- package/lib/commonjs/features/engage/engageTypes.js.map +0 -1
- package/lib/commonjs/features/engage/engageVariantResolver.js.map +0 -1
- package/lib/commonjs/features/engage/engageWindowInsets.js.map +0 -1
- package/lib/commonjs/features/engage/gestureTriggerDetector.js.map +0 -1
- package/lib/commonjs/features/engage/transcription/TranscriptionProvider.js.map +0 -1
- package/lib/commonjs/features/install-referrer/installReferrer.js.map +0 -1
- package/lib/commonjs/features/journey/ScaleBunDebugRoot.js.map +0 -1
- package/lib/commonjs/features/journey/ScaleBunFlatList.js.map +0 -1
- package/lib/commonjs/features/journey/ScaleBunImpression.js.map +0 -1
- package/lib/commonjs/features/journey/ScaleBunScrollView.js.map +0 -1
- package/lib/commonjs/features/journey/ScaleBunSectionList.js.map +0 -1
- package/lib/commonjs/features/journey/calibrationContext.js.map +0 -1
- package/lib/commonjs/features/journey/gestureBuffer.js.map +0 -1
- package/lib/commonjs/features/journey/gestureDetector.js.map +0 -1
- package/lib/commonjs/features/journey/impression.js.map +0 -1
- package/lib/commonjs/features/journey/journeyManager.js.map +0 -1
- package/lib/commonjs/features/journey/journeyTypes.js.map +0 -1
- package/lib/commonjs/features/journey/navDetector.js.map +0 -1
- package/lib/commonjs/features/journey/screenshotHelper.js.map +0 -1
- package/lib/commonjs/features/journey/targetRegistry.js.map +0 -1
- package/lib/commonjs/features/journey/touchTarget.js.map +0 -1
- package/lib/commonjs/features/navigation/AutoScreenDetector.js.map +0 -1
- package/lib/commonjs/features/network/NetworkFeature.js.map +0 -1
- package/lib/commonjs/features/network/index.js.map +0 -1
- package/lib/commonjs/features/ota/OtaEventEmitter.js.map +0 -1
- package/lib/commonjs/features/ota/OtaOrchestrator.js.map +0 -1
- package/lib/commonjs/features/ota/OtaTypes.js.map +0 -1
- package/lib/commonjs/features/ota/deviceAttributes.js.map +0 -1
- package/lib/commonjs/features/ota/environment.js.map +0 -1
- package/lib/commonjs/features/ota/geoCountry.js.map +0 -1
- package/lib/commonjs/features/ota/retry.js.map +0 -1
- package/lib/commonjs/features/ota/signature.js.map +0 -1
- package/lib/commonjs/features/ota/useOtaUpdate.js.map +0 -1
- package/lib/commonjs/features/performance/PerformanceFeature.js.map +0 -1
- package/lib/commonjs/features/performance/collectors/AppLaunchCollector.js.map +0 -1
- package/lib/commonjs/features/performance/collectors/AutoScreenLoadCollector.js.map +0 -1
- package/lib/commonjs/features/performance/collectors/CustomTraceCollector.js.map +0 -1
- package/lib/commonjs/features/performance/collectors/FrameMetricsCollector.js.map +0 -1
- package/lib/commonjs/features/performance/collectors/JsStallCollector.js.map +0 -1
- package/lib/commonjs/features/performance/collectors/NetworkPerfCollector.js.map +0 -1
- package/lib/commonjs/features/performance/collectors/ScreenLoadCollector.js.map +0 -1
- package/lib/commonjs/features/performance/collectors/UiHangCollector.js.map +0 -1
- package/lib/commonjs/features/performance/config.js.map +0 -1
- package/lib/commonjs/features/performance/getNativePerformanceModule.js.map +0 -1
- package/lib/commonjs/features/performance/index.js.map +0 -1
- package/lib/commonjs/features/performance/metrics/MetricsEngine.js.map +0 -1
- package/lib/commonjs/features/performance/models.js.map +0 -1
- package/lib/commonjs/features/performance/transport/PerformanceTransport.js.map +0 -1
- package/lib/commonjs/features/profiler/ProfilerFeature.js.map +0 -1
- package/lib/commonjs/features/profiler/config.js.map +0 -1
- package/lib/commonjs/features/profiler/contracts.js.map +0 -1
- package/lib/commonjs/features/profiler/index.js.map +0 -1
- package/lib/commonjs/features/profiler/models.js.map +0 -1
- package/lib/commonjs/features/profiler/transport/ProfilerTransport.js.map +0 -1
- package/lib/commonjs/features/replay/bridge/adapters/bridgeAdapter.js.map +0 -1
- package/lib/commonjs/features/replay/bridge/eventEmitter.js.map +0 -1
- package/lib/commonjs/features/replay/bridge/nativeModule.js.map +0 -1
- package/lib/commonjs/features/replay/core/clock/clock.js.map +0 -1
- package/lib/commonjs/features/replay/core/config/defaults.js.map +0 -1
- package/lib/commonjs/features/replay/core/config/validator.js.map +0 -1
- package/lib/commonjs/features/replay/core/env/environmentDetector.js.map +0 -1
- package/lib/commonjs/features/replay/core/errors/safeCall.js.map +0 -1
- package/lib/commonjs/features/replay/core/ids/sessionId.js.map +0 -1
- package/lib/commonjs/features/replay/core/logger/logger.js.map +0 -1
- package/lib/commonjs/features/replay/core/privacy/privacyTypes.js.map +0 -1
- package/lib/commonjs/features/replay/core/queue/boundedQueue.js.map +0 -1
- package/lib/commonjs/features/replay/integrations/alert/alertInstrumentation.js.map +0 -1
- package/lib/commonjs/features/replay/integrations/logs/consoleIntegration.js.map +0 -1
- package/lib/commonjs/features/replay/integrations/network/networkAdapter.js.map +0 -1
- package/lib/commonjs/features/replay/integrations/react-navigation/navigationIntegration.js.map +0 -1
- package/lib/commonjs/features/replay/integrations/touch/ReplayRoot.js.map +0 -1
- package/lib/commonjs/features/replay/pipeline/batching/batchManager.js.map +0 -1
- package/lib/commonjs/features/replay/pipeline/envelope/envelopeBuilder.js.map +0 -1
- package/lib/commonjs/features/replay/pipeline/retry/retryPolicy.js.map +0 -1
- package/lib/commonjs/features/replay/pipeline/transport/transportTypes.js.map +0 -1
- package/lib/commonjs/features/replay/public/api.js.map +0 -1
- package/lib/commonjs/features/replay/public/enums.js.map +0 -1
- package/lib/commonjs/features/replay/public/types.js.map +0 -1
- package/lib/commonjs/features/replay/replay/breadcrumbs/breadcrumbCollector.js.map +0 -1
- package/lib/commonjs/features/replay/replay/frames/frameModels.js.map +0 -1
- package/lib/commonjs/features/replay/replay/session/sessionOrchestrator.js.map +0 -1
- package/lib/commonjs/features/replay/replay/timeline/timelineModels.js.map +0 -1
- package/lib/commonjs/features/replay/transport/BackendReplayTransport.js.map +0 -1
- package/lib/commonjs/features/replay/transport/CompositeReplayTransport.js.map +0 -1
- package/lib/commonjs/features/replay/transport/DesktopReplayTransport.js.map +0 -1
- package/lib/commonjs/features/replay/transport/ReplayTransport.js.map +0 -1
- package/lib/commonjs/features/session/BackendSessionAdapter.js.map +0 -1
- package/lib/commonjs/features/session/DesktopSessionTransport.js.map +0 -1
- package/lib/commonjs/features/session/JourneyEventPipeline.js.map +0 -1
- package/lib/commonjs/features/session/ReplayCaptureManager.js.map +0 -1
- package/lib/commonjs/features/session/ScrollTracker.js.map +0 -1
- package/lib/commonjs/features/session/SessionManager.js.map +0 -1
- package/lib/commonjs/features/session/SyncDecisionEngine.js.map +0 -1
- package/lib/commonjs/features/session/index.js.map +0 -1
- package/lib/commonjs/features/session/nativeCapture.js.map +0 -1
- package/lib/commonjs/features/session/outboxFrameCapture.js.map +0 -1
- package/lib/commonjs/features/session/sessionTypes.js.map +0 -1
- package/lib/commonjs/features/skan/skanBridge.js.map +0 -1
- package/lib/commonjs/features/skan/skanConversionManager.js.map +0 -1
- package/lib/commonjs/index.js.map +0 -1
- package/lib/commonjs/integrations/fetch/fetchInterceptor.js.map +0 -1
- package/lib/commonjs/integrations/navigation/screenTracker.js.map +0 -1
- package/lib/commonjs/integrations/network/bodyCapture.js.map +0 -1
- package/lib/commonjs/integrations/xhr/xhrInterceptor.js.map +0 -1
- package/lib/commonjs/metro/composeSourceMap.js.map +0 -1
- package/lib/commonjs/metro/featureModules.js.map +0 -1
- package/lib/commonjs/metro/index.js.map +0 -1
- package/lib/commonjs/metro/optionalDependencyStub.js.map +0 -1
- package/lib/commonjs/metro/optionalModules.js.map +0 -1
- package/lib/commonjs/metro/serializerCompose.js.map +0 -1
- package/lib/commonjs/pipeline/dispatcher/dispatcher.js.map +0 -1
- package/lib/commonjs/pipeline/envelope/envelope.js.map +0 -1
- package/lib/commonjs/pipeline/envelope/serializer.js.map +0 -1
- package/lib/commonjs/pipeline/processors/dedupe.js.map +0 -1
- package/lib/commonjs/pipeline/processors/enrich.js.map +0 -1
- package/lib/commonjs/pipeline/processors/sampling.js.map +0 -1
- package/lib/commonjs/pipeline/processors/sanitize.js.map +0 -1
- package/lib/commonjs/pipeline/queue/flushQueue.js.map +0 -1
- package/lib/commonjs/pipeline/queue/memoryQueue.js.map +0 -1
- package/lib/commonjs/pipeline/queue/persistentQueue.js.map +0 -1
- package/lib/commonjs/pipeline/queue/queuePolicy.js.map +0 -1
- package/lib/commonjs/pipeline/scheduler/flushScheduler.js.map +0 -1
- package/lib/commonjs/pipeline/scheduler/retryPolicy.js.map +0 -1
- package/lib/commonjs/public/ScaleBunErrorBoundary.js.map +0 -1
- package/lib/commonjs/public/ScaleBunFacade.js.map +0 -1
- package/lib/commonjs/public/ScaleBunProvider.js.map +0 -1
- package/lib/commonjs/public/typedTracker.js.map +0 -1
- package/lib/commonjs/public/types.js.map +0 -1
- package/lib/commonjs/push/PushManager.js.map +0 -1
- package/lib/commonjs/push/adapters/ManualAdapter.js.map +0 -1
- package/lib/commonjs/push/adapters/NativeBridgeAdapter.js.map +0 -1
- package/lib/commonjs/push/adapters/NoopAdapter.js.map +0 -1
- package/lib/commonjs/push/adapters/RNFirebaseMessagingAdapter.js.map +0 -1
- package/lib/commonjs/push/adapters/loadMessaging.js.map +0 -1
- package/lib/commonjs/push/adapters/loadNotifee.js.map +0 -1
- package/lib/commonjs/push/adapters/selectAdapter.js.map +0 -1
- package/lib/commonjs/push/detect/capabilities.js.map +0 -1
- package/lib/commonjs/push/index.js.map +0 -1
- package/lib/commonjs/push/native/nativeNotifications.js.map +0 -1
- package/lib/commonjs/push/types.js.map +0 -1
- package/lib/commonjs/specs/NativeReplaySdk.js.map +0 -1
- package/lib/commonjs/specs/NativeScaleBunCrash.js.map +0 -1
- package/lib/commonjs/specs/NativeScaleBunInstallReferrer.js.map +0 -1
- package/lib/commonjs/specs/NativeScaleBunOta.js.map +0 -1
- package/lib/commonjs/specs/NativeScaleBunPerformance.js.map +0 -1
- package/lib/commonjs/specs/NativeScaleBunProfiler.js.map +0 -1
- package/lib/commonjs/specs/NativeScaleBunStorage.js.map +0 -1
- package/lib/commonjs/storage/StorageBackend.js.map +0 -1
- package/lib/commonjs/storage/db/sqlite.js.map +0 -1
- package/lib/commonjs/storage/files/fileStore.js.map +0 -1
- package/lib/commonjs/transport/auth/sdkSession.js.map +0 -1
- package/lib/commonjs/transport/backoff/exponentialJitter.js.map +0 -1
- package/lib/commonjs/transport/http/endpoints.js.map +0 -1
- package/lib/commonjs/transport/http/httpClient.js.map +0 -1
- package/lib/commonjs/transport/rateLimit/retryAfter.js.map +0 -1
- package/lib/commonjs/transport/signing/requestSigner.js.map +0 -1
- package/lib/commonjs/vendor/protocol/index.js.map +0 -1
- package/lib/commonjs/vendor/protocol/internal/validation.js.map +0 -1
- package/lib/commonjs/vendor/sdk-contracts/bridge.js.map +0 -1
- package/lib/commonjs/vendor/sdk-contracts/config.js.map +0 -1
- package/lib/commonjs/vendor/sdk-contracts/events.js.map +0 -1
- package/lib/commonjs/vendor/sdk-contracts/features.js.map +0 -1
- package/lib/commonjs/vendor/sdk-contracts/index.js.map +0 -1
- package/lib/commonjs/vendor/sdk-contracts/platform.js.map +0 -1
- package/lib/commonjs/vendor/sdk-contracts/session-boundary.js.map +0 -1
- package/lib/commonjs/vendor/sdk-contracts/session.js.map +0 -1
- package/lib/module/analytics/EventTracker.js.map +0 -1
- package/lib/module/analytics/automaticEvents.js.map +0 -1
- package/lib/module/analytics/batching.js.map +0 -1
- package/lib/module/analytics/eventLane.js.map +0 -1
- package/lib/module/bootstrap/FeatureRegistry.js.map +0 -1
- package/lib/module/bootstrap/SDKBootstrapper.js.map +0 -1
- package/lib/module/bucketing/fnv1a32.js.map +0 -1
- package/lib/module/compat/codepush.js.map +0 -1
- package/lib/module/config/ConfigManager.js.map +0 -1
- package/lib/module/config/configTypes.js.map +0 -1
- package/lib/module/core/architecture.js.map +0 -1
- package/lib/module/core/clock/now.js.map +0 -1
- package/lib/module/core/config/defaults.js.map +0 -1
- package/lib/module/core/config/schema.js.map +0 -1
- package/lib/module/core/constants/endpoints.js.map +0 -1
- package/lib/module/core/constants/protocol.js.map +0 -1
- package/lib/module/core/constants/timings.js.map +0 -1
- package/lib/module/core/constants/version.js.map +0 -1
- package/lib/module/core/context/app.js.map +0 -1
- package/lib/module/core/context/device.js.map +0 -1
- package/lib/module/core/context/session.js.map +0 -1
- package/lib/module/core/context/user.js.map +0 -1
- package/lib/module/core/contracts/IFeature.js.map +0 -1
- package/lib/module/core/di/container.js.map +0 -1
- package/lib/module/core/encoding/base64.js.map +0 -1
- package/lib/module/core/id/deviceId.js.map +0 -1
- package/lib/module/core/id/installationId.js.map +0 -1
- package/lib/module/core/id/sessionId.js.map +0 -1
- package/lib/module/core/lifecycle/appLifecycle.js.map +0 -1
- package/lib/module/core/lifecycle/crashSafe.js.map +0 -1
- package/lib/module/core/logger/errorClassification.js.map +0 -1
- package/lib/module/core/logger/internalLogger.js.map +0 -1
- package/lib/module/core/logger/levels.js.map +0 -1
- package/lib/module/crypto/hmacSha256.js.map +0 -1
- package/lib/module/debug/bootstrap.js.map +0 -1
- package/lib/module/debug/commands.js.map +0 -1
- package/lib/module/debug/configBuilder.js.map +0 -1
- package/lib/module/debug/exportBridge.js.map +0 -1
- package/lib/module/debug/hostResolver.js.map +0 -1
- package/lib/module/debug/index.js.map +0 -1
- package/lib/module/debug/metrics.js.map +0 -1
- package/lib/module/debug/perf.js.map +0 -1
- package/lib/module/debug/perfWiring.js.map +0 -1
- package/lib/module/debug/protocol.js.map +0 -1
- package/lib/module/debug/redaction.js.map +0 -1
- package/lib/module/debug/replayWiring.js.map +0 -1
- package/lib/module/debug/screenTracking.js.map +0 -1
- package/lib/module/debug/sessionWiring.js.map +0 -1
- package/lib/module/debug/stream.js.map +0 -1
- package/lib/module/debug/transport.js.map +0 -1
- package/lib/module/features/bugreport/BugReportFeature.js.map +0 -1
- package/lib/module/features/bugreport/buildPayload.js.map +0 -1
- package/lib/module/features/bugreport/index.js.map +0 -1
- package/lib/module/features/crash/CrashFeature.js.map +0 -1
- package/lib/module/features/crash/CrashReporter.js.map +0 -1
- package/lib/module/features/crash/NativeCrashFeature.js.map +0 -1
- package/lib/module/features/crash/capture.js.map +0 -1
- package/lib/module/features/crash/globalHandler.js.map +0 -1
- package/lib/module/features/crash/index.js.map +0 -1
- package/lib/module/features/crash/nativeCrashBridge.js.map +0 -1
- package/lib/module/features/crash/rejectionHandler.js.map +0 -1
- package/lib/module/features/engage/EngageAnchor.js.map +0 -1
- package/lib/module/features/engage/EngageArchetypeRenderers.js.map +0 -1
- package/lib/module/features/engage/EngageInAppView.js.map +0 -1
- package/lib/module/features/engage/EngageInlinePlacement.js.map +0 -1
- package/lib/module/features/engage/EngagePromptProvider.js.map +0 -1
- package/lib/module/features/engage/EngagePromptView.js.map +0 -1
- package/lib/module/features/engage/EngageTransport.js.map +0 -1
- package/lib/module/features/engage/EngageVariantContent.js.map +0 -1
- package/lib/module/features/engage/__test-support__/reactNativeStub.js.map +0 -1
- package/lib/module/features/engage/attachmentCapture.js.map +0 -1
- package/lib/module/features/engage/captureVoiceAttachment.js.map +0 -1
- package/lib/module/features/engage/engageCoachmarkTour.js.map +0 -1
- package/lib/module/features/engage/engageGameLogic.js.map +0 -1
- package/lib/module/features/engage/engageMediaSizing.js.map +0 -1
- package/lib/module/features/engage/engageMultiStepSheet.js.map +0 -1
- package/lib/module/features/engage/engageOutcome.js.map +0 -1
- package/lib/module/features/engage/engagePushTokenBridge.js.map +0 -1
- package/lib/module/features/engage/engageShakeBridge.js.map +0 -1
- package/lib/module/features/engage/engageSignals.js.map +0 -1
- package/lib/module/features/engage/engageStoreReviewBridge.js.map +0 -1
- package/lib/module/features/engage/engageTestSeenStore.js.map +0 -1
- package/lib/module/features/engage/engageThrottle.js.map +0 -1
- package/lib/module/features/engage/engageTriggerEngine.js.map +0 -1
- package/lib/module/features/engage/engageTypes.js.map +0 -1
- package/lib/module/features/engage/engageVariantResolver.js.map +0 -1
- package/lib/module/features/engage/engageWindowInsets.js.map +0 -1
- package/lib/module/features/engage/gestureTriggerDetector.js.map +0 -1
- package/lib/module/features/engage/transcription/TranscriptionProvider.js.map +0 -1
- package/lib/module/features/install-referrer/installReferrer.js.map +0 -1
- package/lib/module/features/journey/ScaleBunDebugRoot.js.map +0 -1
- package/lib/module/features/journey/ScaleBunFlatList.js.map +0 -1
- package/lib/module/features/journey/ScaleBunImpression.js.map +0 -1
- package/lib/module/features/journey/ScaleBunScrollView.js.map +0 -1
- package/lib/module/features/journey/ScaleBunSectionList.js.map +0 -1
- package/lib/module/features/journey/calibrationContext.js.map +0 -1
- package/lib/module/features/journey/gestureBuffer.js.map +0 -1
- package/lib/module/features/journey/gestureDetector.js.map +0 -1
- package/lib/module/features/journey/impression.js.map +0 -1
- package/lib/module/features/journey/journeyManager.js.map +0 -1
- package/lib/module/features/journey/journeyTypes.js.map +0 -1
- package/lib/module/features/journey/navDetector.js.map +0 -1
- package/lib/module/features/journey/screenshotHelper.js.map +0 -1
- package/lib/module/features/journey/targetRegistry.js.map +0 -1
- package/lib/module/features/journey/touchTarget.js.map +0 -1
- package/lib/module/features/navigation/AutoScreenDetector.js.map +0 -1
- package/lib/module/features/network/NetworkFeature.js.map +0 -1
- package/lib/module/features/network/index.js.map +0 -1
- package/lib/module/features/ota/OtaEventEmitter.js.map +0 -1
- package/lib/module/features/ota/OtaOrchestrator.js.map +0 -1
- package/lib/module/features/ota/OtaTypes.js.map +0 -1
- package/lib/module/features/ota/deviceAttributes.js.map +0 -1
- package/lib/module/features/ota/environment.js.map +0 -1
- package/lib/module/features/ota/geoCountry.js.map +0 -1
- package/lib/module/features/ota/retry.js.map +0 -1
- package/lib/module/features/ota/signature.js.map +0 -1
- package/lib/module/features/ota/useOtaUpdate.js.map +0 -1
- package/lib/module/features/performance/PerformanceFeature.js.map +0 -1
- package/lib/module/features/performance/collectors/AppLaunchCollector.js.map +0 -1
- package/lib/module/features/performance/collectors/AutoScreenLoadCollector.js.map +0 -1
- package/lib/module/features/performance/collectors/CustomTraceCollector.js.map +0 -1
- package/lib/module/features/performance/collectors/FrameMetricsCollector.js.map +0 -1
- package/lib/module/features/performance/collectors/JsStallCollector.js.map +0 -1
- package/lib/module/features/performance/collectors/NetworkPerfCollector.js.map +0 -1
- package/lib/module/features/performance/collectors/ScreenLoadCollector.js.map +0 -1
- package/lib/module/features/performance/collectors/UiHangCollector.js.map +0 -1
- package/lib/module/features/performance/config.js.map +0 -1
- package/lib/module/features/performance/getNativePerformanceModule.js.map +0 -1
- package/lib/module/features/performance/index.js.map +0 -1
- package/lib/module/features/performance/metrics/MetricsEngine.js.map +0 -1
- package/lib/module/features/performance/models.js.map +0 -1
- package/lib/module/features/performance/transport/PerformanceTransport.js.map +0 -1
- package/lib/module/features/profiler/ProfilerFeature.js.map +0 -1
- package/lib/module/features/profiler/config.js.map +0 -1
- package/lib/module/features/profiler/contracts.js.map +0 -1
- package/lib/module/features/profiler/index.js.map +0 -1
- package/lib/module/features/profiler/models.js.map +0 -1
- package/lib/module/features/profiler/transport/ProfilerTransport.js.map +0 -1
- package/lib/module/features/replay/bridge/adapters/bridgeAdapter.js.map +0 -1
- package/lib/module/features/replay/bridge/eventEmitter.js.map +0 -1
- package/lib/module/features/replay/bridge/nativeModule.js.map +0 -1
- package/lib/module/features/replay/core/clock/clock.js.map +0 -1
- package/lib/module/features/replay/core/config/defaults.js.map +0 -1
- package/lib/module/features/replay/core/config/validator.js.map +0 -1
- package/lib/module/features/replay/core/env/environmentDetector.js.map +0 -1
- package/lib/module/features/replay/core/errors/safeCall.js.map +0 -1
- package/lib/module/features/replay/core/ids/sessionId.js.map +0 -1
- package/lib/module/features/replay/core/logger/logger.js.map +0 -1
- package/lib/module/features/replay/core/privacy/privacyTypes.js.map +0 -1
- package/lib/module/features/replay/core/queue/boundedQueue.js.map +0 -1
- package/lib/module/features/replay/integrations/alert/alertInstrumentation.js.map +0 -1
- package/lib/module/features/replay/integrations/logs/consoleIntegration.js.map +0 -1
- package/lib/module/features/replay/integrations/network/networkAdapter.js.map +0 -1
- package/lib/module/features/replay/integrations/react-navigation/navigationIntegration.js.map +0 -1
- package/lib/module/features/replay/integrations/touch/ReplayRoot.js.map +0 -1
- package/lib/module/features/replay/pipeline/batching/batchManager.js.map +0 -1
- package/lib/module/features/replay/pipeline/envelope/envelopeBuilder.js.map +0 -1
- package/lib/module/features/replay/pipeline/retry/retryPolicy.js.map +0 -1
- package/lib/module/features/replay/pipeline/transport/transportTypes.js.map +0 -1
- package/lib/module/features/replay/public/api.js.map +0 -1
- package/lib/module/features/replay/public/enums.js.map +0 -1
- package/lib/module/features/replay/public/types.js.map +0 -1
- package/lib/module/features/replay/replay/breadcrumbs/breadcrumbCollector.js.map +0 -1
- package/lib/module/features/replay/replay/frames/frameModels.js.map +0 -1
- package/lib/module/features/replay/replay/session/sessionOrchestrator.js.map +0 -1
- package/lib/module/features/replay/replay/timeline/timelineModels.js.map +0 -1
- package/lib/module/features/replay/transport/BackendReplayTransport.js.map +0 -1
- package/lib/module/features/replay/transport/CompositeReplayTransport.js.map +0 -1
- package/lib/module/features/replay/transport/DesktopReplayTransport.js.map +0 -1
- package/lib/module/features/replay/transport/ReplayTransport.js.map +0 -1
- package/lib/module/features/session/BackendSessionAdapter.js.map +0 -1
- package/lib/module/features/session/DesktopSessionTransport.js.map +0 -1
- package/lib/module/features/session/JourneyEventPipeline.js.map +0 -1
- package/lib/module/features/session/ReplayCaptureManager.js.map +0 -1
- package/lib/module/features/session/ScrollTracker.js.map +0 -1
- package/lib/module/features/session/SessionManager.js.map +0 -1
- package/lib/module/features/session/SyncDecisionEngine.js.map +0 -1
- package/lib/module/features/session/index.js.map +0 -1
- package/lib/module/features/session/nativeCapture.js.map +0 -1
- package/lib/module/features/session/outboxFrameCapture.js.map +0 -1
- package/lib/module/features/session/sessionTypes.js.map +0 -1
- package/lib/module/features/skan/skanBridge.js.map +0 -1
- package/lib/module/features/skan/skanConversionManager.js.map +0 -1
- package/lib/module/index.js.map +0 -1
- package/lib/module/integrations/fetch/fetchInterceptor.js.map +0 -1
- package/lib/module/integrations/navigation/screenTracker.js.map +0 -1
- package/lib/module/integrations/network/bodyCapture.js.map +0 -1
- package/lib/module/integrations/xhr/xhrInterceptor.js.map +0 -1
- package/lib/module/metro/composeSourceMap.js.map +0 -1
- package/lib/module/metro/featureModules.js.map +0 -1
- package/lib/module/metro/index.js.map +0 -1
- package/lib/module/metro/optionalDependencyStub.js.map +0 -1
- package/lib/module/metro/optionalModules.js.map +0 -1
- package/lib/module/metro/serializerCompose.js.map +0 -1
- package/lib/module/pipeline/dispatcher/dispatcher.js.map +0 -1
- package/lib/module/pipeline/envelope/envelope.js.map +0 -1
- package/lib/module/pipeline/envelope/serializer.js.map +0 -1
- package/lib/module/pipeline/processors/dedupe.js.map +0 -1
- package/lib/module/pipeline/processors/enrich.js.map +0 -1
- package/lib/module/pipeline/processors/sampling.js.map +0 -1
- package/lib/module/pipeline/processors/sanitize.js.map +0 -1
- package/lib/module/pipeline/queue/flushQueue.js.map +0 -1
- package/lib/module/pipeline/queue/memoryQueue.js.map +0 -1
- package/lib/module/pipeline/queue/persistentQueue.js.map +0 -1
- package/lib/module/pipeline/queue/queuePolicy.js.map +0 -1
- package/lib/module/pipeline/scheduler/flushScheduler.js.map +0 -1
- package/lib/module/pipeline/scheduler/retryPolicy.js.map +0 -1
- package/lib/module/public/ScaleBunErrorBoundary.js.map +0 -1
- package/lib/module/public/ScaleBunFacade.js.map +0 -1
- package/lib/module/public/ScaleBunProvider.js.map +0 -1
- package/lib/module/public/typedTracker.js.map +0 -1
- package/lib/module/public/types.js.map +0 -1
- package/lib/module/push/PushManager.js.map +0 -1
- package/lib/module/push/adapters/ManualAdapter.js.map +0 -1
- package/lib/module/push/adapters/NativeBridgeAdapter.js.map +0 -1
- package/lib/module/push/adapters/NoopAdapter.js.map +0 -1
- package/lib/module/push/adapters/RNFirebaseMessagingAdapter.js.map +0 -1
- package/lib/module/push/adapters/loadMessaging.js.map +0 -1
- package/lib/module/push/adapters/loadNotifee.js.map +0 -1
- package/lib/module/push/adapters/selectAdapter.js.map +0 -1
- package/lib/module/push/detect/capabilities.js.map +0 -1
- package/lib/module/push/index.js.map +0 -1
- package/lib/module/push/native/nativeNotifications.js.map +0 -1
- package/lib/module/push/types.js.map +0 -1
- package/lib/module/specs/NativeReplaySdk.js.map +0 -1
- package/lib/module/specs/NativeScaleBunCrash.js.map +0 -1
- package/lib/module/specs/NativeScaleBunInstallReferrer.js.map +0 -1
- package/lib/module/specs/NativeScaleBunOta.js.map +0 -1
- package/lib/module/specs/NativeScaleBunPerformance.js.map +0 -1
- package/lib/module/specs/NativeScaleBunProfiler.js.map +0 -1
- package/lib/module/specs/NativeScaleBunStorage.js.map +0 -1
- package/lib/module/storage/StorageBackend.js.map +0 -1
- package/lib/module/storage/db/sqlite.js.map +0 -1
- package/lib/module/storage/files/fileStore.js.map +0 -1
- package/lib/module/transport/auth/sdkSession.js.map +0 -1
- package/lib/module/transport/backoff/exponentialJitter.js.map +0 -1
- package/lib/module/transport/http/endpoints.js.map +0 -1
- package/lib/module/transport/http/httpClient.js.map +0 -1
- package/lib/module/transport/rateLimit/retryAfter.js.map +0 -1
- package/lib/module/transport/signing/requestSigner.js.map +0 -1
- package/lib/module/vendor/protocol/index.js.map +0 -1
- package/lib/module/vendor/protocol/internal/validation.js.map +0 -1
- package/lib/module/vendor/sdk-contracts/bridge.js.map +0 -1
- package/lib/module/vendor/sdk-contracts/config.js.map +0 -1
- package/lib/module/vendor/sdk-contracts/events.js.map +0 -1
- package/lib/module/vendor/sdk-contracts/features.js.map +0 -1
- package/lib/module/vendor/sdk-contracts/index.js.map +0 -1
- package/lib/module/vendor/sdk-contracts/platform.js.map +0 -1
- package/lib/module/vendor/sdk-contracts/session-boundary.js.map +0 -1
- package/lib/module/vendor/sdk-contracts/session.js.map +0 -1
- package/lib/typescript/analytics/EventTracker.d.ts.map +0 -1
- package/lib/typescript/analytics/automaticEvents.d.ts.map +0 -1
- package/lib/typescript/analytics/batching.d.ts.map +0 -1
- package/lib/typescript/analytics/eventLane.d.ts.map +0 -1
- package/lib/typescript/bootstrap/FeatureRegistry.d.ts.map +0 -1
- package/lib/typescript/bootstrap/SDKBootstrapper.d.ts.map +0 -1
- package/lib/typescript/bucketing/fnv1a32.d.ts.map +0 -1
- package/lib/typescript/compat/codepush.d.ts.map +0 -1
- package/lib/typescript/config/ConfigManager.d.ts.map +0 -1
- package/lib/typescript/config/configTypes.d.ts.map +0 -1
- package/lib/typescript/core/architecture.d.ts.map +0 -1
- package/lib/typescript/core/clock/now.d.ts.map +0 -1
- package/lib/typescript/core/config/defaults.d.ts.map +0 -1
- package/lib/typescript/core/config/schema.d.ts.map +0 -1
- package/lib/typescript/core/constants/endpoints.d.ts.map +0 -1
- package/lib/typescript/core/constants/protocol.d.ts.map +0 -1
- package/lib/typescript/core/constants/timings.d.ts.map +0 -1
- package/lib/typescript/core/constants/version.d.ts.map +0 -1
- package/lib/typescript/core/context/app.d.ts.map +0 -1
- package/lib/typescript/core/context/device.d.ts.map +0 -1
- package/lib/typescript/core/context/session.d.ts.map +0 -1
- package/lib/typescript/core/context/user.d.ts.map +0 -1
- package/lib/typescript/core/contracts/IFeature.d.ts.map +0 -1
- package/lib/typescript/core/di/container.d.ts.map +0 -1
- package/lib/typescript/core/encoding/base64.d.ts.map +0 -1
- package/lib/typescript/core/id/deviceId.d.ts.map +0 -1
- package/lib/typescript/core/id/installationId.d.ts.map +0 -1
- package/lib/typescript/core/id/sessionId.d.ts.map +0 -1
- package/lib/typescript/core/lifecycle/appLifecycle.d.ts.map +0 -1
- package/lib/typescript/core/lifecycle/crashSafe.d.ts.map +0 -1
- package/lib/typescript/core/logger/errorClassification.d.ts.map +0 -1
- package/lib/typescript/core/logger/internalLogger.d.ts.map +0 -1
- package/lib/typescript/core/logger/levels.d.ts.map +0 -1
- package/lib/typescript/crypto/hmacSha256.d.ts.map +0 -1
- package/lib/typescript/debug/bootstrap.d.ts.map +0 -1
- package/lib/typescript/debug/commands.d.ts.map +0 -1
- package/lib/typescript/debug/configBuilder.d.ts.map +0 -1
- package/lib/typescript/debug/exportBridge.d.ts.map +0 -1
- package/lib/typescript/debug/hostResolver.d.ts.map +0 -1
- package/lib/typescript/debug/index.d.ts.map +0 -1
- package/lib/typescript/debug/metrics.d.ts.map +0 -1
- package/lib/typescript/debug/perf.d.ts.map +0 -1
- package/lib/typescript/debug/perfWiring.d.ts.map +0 -1
- package/lib/typescript/debug/protocol.d.ts.map +0 -1
- package/lib/typescript/debug/redaction.d.ts.map +0 -1
- package/lib/typescript/debug/replayWiring.d.ts.map +0 -1
- package/lib/typescript/debug/screenTracking.d.ts.map +0 -1
- package/lib/typescript/debug/sessionWiring.d.ts.map +0 -1
- package/lib/typescript/debug/stream.d.ts.map +0 -1
- package/lib/typescript/debug/transport.d.ts.map +0 -1
- package/lib/typescript/features/bugreport/BugReportFeature.d.ts.map +0 -1
- package/lib/typescript/features/bugreport/buildPayload.d.ts.map +0 -1
- package/lib/typescript/features/bugreport/index.d.ts.map +0 -1
- package/lib/typescript/features/crash/CrashFeature.d.ts.map +0 -1
- package/lib/typescript/features/crash/CrashReporter.d.ts.map +0 -1
- package/lib/typescript/features/crash/NativeCrashFeature.d.ts.map +0 -1
- package/lib/typescript/features/crash/capture.d.ts.map +0 -1
- package/lib/typescript/features/crash/globalHandler.d.ts.map +0 -1
- package/lib/typescript/features/crash/index.d.ts.map +0 -1
- package/lib/typescript/features/crash/nativeCrashBridge.d.ts.map +0 -1
- package/lib/typescript/features/crash/rejectionHandler.d.ts.map +0 -1
- package/lib/typescript/features/engage/EngageAnchor.d.ts.map +0 -1
- package/lib/typescript/features/engage/EngageArchetypeRenderers.d.ts.map +0 -1
- package/lib/typescript/features/engage/EngageInAppView.d.ts.map +0 -1
- package/lib/typescript/features/engage/EngageInlinePlacement.d.ts.map +0 -1
- package/lib/typescript/features/engage/EngagePromptProvider.d.ts.map +0 -1
- package/lib/typescript/features/engage/EngagePromptView.d.ts.map +0 -1
- package/lib/typescript/features/engage/EngageTransport.d.ts.map +0 -1
- package/lib/typescript/features/engage/EngageVariantContent.d.ts.map +0 -1
- package/lib/typescript/features/engage/attachmentCapture.d.ts.map +0 -1
- package/lib/typescript/features/engage/captureVoiceAttachment.d.ts.map +0 -1
- package/lib/typescript/features/engage/engageCoachmarkTour.d.ts.map +0 -1
- package/lib/typescript/features/engage/engageGameLogic.d.ts.map +0 -1
- package/lib/typescript/features/engage/engageMediaSizing.d.ts.map +0 -1
- package/lib/typescript/features/engage/engageMultiStepSheet.d.ts.map +0 -1
- package/lib/typescript/features/engage/engageOutcome.d.ts.map +0 -1
- package/lib/typescript/features/engage/engagePushTokenBridge.d.ts.map +0 -1
- package/lib/typescript/features/engage/engageShakeBridge.d.ts.map +0 -1
- package/lib/typescript/features/engage/engageSignals.d.ts.map +0 -1
- package/lib/typescript/features/engage/engageStoreReviewBridge.d.ts.map +0 -1
- package/lib/typescript/features/engage/engageTestSeenStore.d.ts.map +0 -1
- package/lib/typescript/features/engage/engageThrottle.d.ts.map +0 -1
- package/lib/typescript/features/engage/engageTriggerEngine.d.ts.map +0 -1
- package/lib/typescript/features/engage/engageTypes.d.ts.map +0 -1
- package/lib/typescript/features/engage/engageVariantResolver.d.ts.map +0 -1
- package/lib/typescript/features/engage/engageWindowInsets.d.ts.map +0 -1
- package/lib/typescript/features/engage/gestureTriggerDetector.d.ts.map +0 -1
- package/lib/typescript/features/engage/transcription/TranscriptionProvider.d.ts.map +0 -1
- package/lib/typescript/features/install-referrer/installReferrer.d.ts.map +0 -1
- package/lib/typescript/features/journey/ScaleBunDebugRoot.d.ts.map +0 -1
- package/lib/typescript/features/journey/ScaleBunFlatList.d.ts.map +0 -1
- package/lib/typescript/features/journey/ScaleBunImpression.d.ts.map +0 -1
- package/lib/typescript/features/journey/ScaleBunScrollView.d.ts.map +0 -1
- package/lib/typescript/features/journey/ScaleBunSectionList.d.ts.map +0 -1
- package/lib/typescript/features/journey/calibrationContext.d.ts.map +0 -1
- package/lib/typescript/features/journey/gestureBuffer.d.ts.map +0 -1
- package/lib/typescript/features/journey/gestureDetector.d.ts.map +0 -1
- package/lib/typescript/features/journey/impression.d.ts.map +0 -1
- package/lib/typescript/features/journey/journeyManager.d.ts.map +0 -1
- package/lib/typescript/features/journey/journeyTypes.d.ts.map +0 -1
- package/lib/typescript/features/journey/navDetector.d.ts.map +0 -1
- package/lib/typescript/features/journey/screenshotHelper.d.ts.map +0 -1
- package/lib/typescript/features/journey/targetRegistry.d.ts.map +0 -1
- package/lib/typescript/features/journey/touchTarget.d.ts.map +0 -1
- package/lib/typescript/features/navigation/AutoScreenDetector.d.ts.map +0 -1
- package/lib/typescript/features/network/NetworkFeature.d.ts.map +0 -1
- package/lib/typescript/features/network/index.d.ts.map +0 -1
- package/lib/typescript/features/ota/OtaEventEmitter.d.ts.map +0 -1
- package/lib/typescript/features/ota/OtaOrchestrator.d.ts.map +0 -1
- package/lib/typescript/features/ota/OtaTypes.d.ts.map +0 -1
- package/lib/typescript/features/ota/deviceAttributes.d.ts.map +0 -1
- package/lib/typescript/features/ota/environment.d.ts.map +0 -1
- package/lib/typescript/features/ota/geoCountry.d.ts.map +0 -1
- package/lib/typescript/features/ota/retry.d.ts.map +0 -1
- package/lib/typescript/features/ota/signature.d.ts.map +0 -1
- package/lib/typescript/features/ota/useOtaUpdate.d.ts.map +0 -1
- package/lib/typescript/features/performance/PerformanceFeature.d.ts.map +0 -1
- package/lib/typescript/features/performance/collectors/AppLaunchCollector.d.ts.map +0 -1
- package/lib/typescript/features/performance/collectors/AutoScreenLoadCollector.d.ts.map +0 -1
- package/lib/typescript/features/performance/collectors/CustomTraceCollector.d.ts.map +0 -1
- package/lib/typescript/features/performance/collectors/FrameMetricsCollector.d.ts.map +0 -1
- package/lib/typescript/features/performance/collectors/JsStallCollector.d.ts.map +0 -1
- package/lib/typescript/features/performance/collectors/NetworkPerfCollector.d.ts.map +0 -1
- package/lib/typescript/features/performance/collectors/ScreenLoadCollector.d.ts.map +0 -1
- package/lib/typescript/features/performance/collectors/UiHangCollector.d.ts.map +0 -1
- package/lib/typescript/features/performance/config.d.ts.map +0 -1
- package/lib/typescript/features/performance/getNativePerformanceModule.d.ts.map +0 -1
- package/lib/typescript/features/performance/index.d.ts.map +0 -1
- package/lib/typescript/features/performance/metrics/MetricsEngine.d.ts.map +0 -1
- package/lib/typescript/features/performance/models.d.ts.map +0 -1
- package/lib/typescript/features/performance/transport/PerformanceTransport.d.ts.map +0 -1
- package/lib/typescript/features/profiler/ProfilerFeature.d.ts.map +0 -1
- package/lib/typescript/features/profiler/config.d.ts.map +0 -1
- package/lib/typescript/features/profiler/contracts.d.ts.map +0 -1
- package/lib/typescript/features/profiler/index.d.ts.map +0 -1
- package/lib/typescript/features/profiler/models.d.ts.map +0 -1
- package/lib/typescript/features/profiler/transport/ProfilerTransport.d.ts.map +0 -1
- package/lib/typescript/features/replay/bridge/adapters/bridgeAdapter.d.ts.map +0 -1
- package/lib/typescript/features/replay/bridge/eventEmitter.d.ts.map +0 -1
- package/lib/typescript/features/replay/bridge/nativeModule.d.ts.map +0 -1
- package/lib/typescript/features/replay/core/clock/clock.d.ts.map +0 -1
- package/lib/typescript/features/replay/core/config/defaults.d.ts.map +0 -1
- package/lib/typescript/features/replay/core/config/validator.d.ts.map +0 -1
- package/lib/typescript/features/replay/core/env/environmentDetector.d.ts.map +0 -1
- package/lib/typescript/features/replay/core/errors/safeCall.d.ts.map +0 -1
- package/lib/typescript/features/replay/core/ids/sessionId.d.ts.map +0 -1
- package/lib/typescript/features/replay/core/logger/logger.d.ts.map +0 -1
- package/lib/typescript/features/replay/core/privacy/privacyTypes.d.ts.map +0 -1
- package/lib/typescript/features/replay/core/queue/boundedQueue.d.ts.map +0 -1
- package/lib/typescript/features/replay/integrations/alert/alertInstrumentation.d.ts.map +0 -1
- package/lib/typescript/features/replay/integrations/logs/consoleIntegration.d.ts.map +0 -1
- package/lib/typescript/features/replay/integrations/network/networkAdapter.d.ts.map +0 -1
- package/lib/typescript/features/replay/integrations/react-navigation/navigationIntegration.d.ts.map +0 -1
- package/lib/typescript/features/replay/integrations/touch/ReplayRoot.d.ts.map +0 -1
- package/lib/typescript/features/replay/pipeline/batching/batchManager.d.ts.map +0 -1
- package/lib/typescript/features/replay/pipeline/envelope/envelopeBuilder.d.ts.map +0 -1
- package/lib/typescript/features/replay/pipeline/retry/retryPolicy.d.ts.map +0 -1
- package/lib/typescript/features/replay/pipeline/transport/transportTypes.d.ts.map +0 -1
- package/lib/typescript/features/replay/public/api.d.ts.map +0 -1
- package/lib/typescript/features/replay/public/enums.d.ts.map +0 -1
- package/lib/typescript/features/replay/public/types.d.ts.map +0 -1
- package/lib/typescript/features/replay/replay/breadcrumbs/breadcrumbCollector.d.ts.map +0 -1
- package/lib/typescript/features/replay/replay/frames/frameModels.d.ts.map +0 -1
- package/lib/typescript/features/replay/replay/session/sessionOrchestrator.d.ts.map +0 -1
- package/lib/typescript/features/replay/replay/timeline/timelineModels.d.ts.map +0 -1
- package/lib/typescript/features/replay/transport/BackendReplayTransport.d.ts.map +0 -1
- package/lib/typescript/features/replay/transport/CompositeReplayTransport.d.ts.map +0 -1
- package/lib/typescript/features/replay/transport/DesktopReplayTransport.d.ts.map +0 -1
- package/lib/typescript/features/replay/transport/ReplayTransport.d.ts.map +0 -1
- package/lib/typescript/features/session/BackendSessionAdapter.d.ts.map +0 -1
- package/lib/typescript/features/session/DesktopSessionTransport.d.ts.map +0 -1
- package/lib/typescript/features/session/JourneyEventPipeline.d.ts.map +0 -1
- package/lib/typescript/features/session/ReplayCaptureManager.d.ts.map +0 -1
- package/lib/typescript/features/session/ScrollTracker.d.ts.map +0 -1
- package/lib/typescript/features/session/SessionManager.d.ts.map +0 -1
- package/lib/typescript/features/session/SyncDecisionEngine.d.ts.map +0 -1
- package/lib/typescript/features/session/index.d.ts.map +0 -1
- package/lib/typescript/features/session/nativeCapture.d.ts.map +0 -1
- package/lib/typescript/features/session/outboxFrameCapture.d.ts.map +0 -1
- package/lib/typescript/features/session/sessionTypes.d.ts.map +0 -1
- package/lib/typescript/features/skan/skanBridge.d.ts.map +0 -1
- package/lib/typescript/features/skan/skanConversionManager.d.ts.map +0 -1
- package/lib/typescript/index.d.ts.map +0 -1
- package/lib/typescript/integrations/fetch/fetchInterceptor.d.ts.map +0 -1
- package/lib/typescript/integrations/navigation/screenTracker.d.ts.map +0 -1
- package/lib/typescript/integrations/network/bodyCapture.d.ts.map +0 -1
- package/lib/typescript/integrations/xhr/xhrInterceptor.d.ts.map +0 -1
- package/lib/typescript/metro/composeSourceMap.d.ts.map +0 -1
- package/lib/typescript/metro/featureModules.d.ts.map +0 -1
- package/lib/typescript/metro/index.d.ts.map +0 -1
- package/lib/typescript/metro/optionalDependencyStub.d.ts.map +0 -1
- package/lib/typescript/metro/optionalModules.d.ts.map +0 -1
- package/lib/typescript/metro/serializerCompose.d.ts.map +0 -1
- package/lib/typescript/pipeline/dispatcher/dispatcher.d.ts.map +0 -1
- package/lib/typescript/pipeline/envelope/envelope.d.ts.map +0 -1
- package/lib/typescript/pipeline/envelope/serializer.d.ts.map +0 -1
- package/lib/typescript/pipeline/processors/dedupe.d.ts.map +0 -1
- package/lib/typescript/pipeline/processors/enrich.d.ts.map +0 -1
- package/lib/typescript/pipeline/processors/sampling.d.ts.map +0 -1
- package/lib/typescript/pipeline/processors/sanitize.d.ts.map +0 -1
- package/lib/typescript/pipeline/queue/flushQueue.d.ts.map +0 -1
- package/lib/typescript/pipeline/queue/memoryQueue.d.ts.map +0 -1
- package/lib/typescript/pipeline/queue/persistentQueue.d.ts.map +0 -1
- package/lib/typescript/pipeline/queue/queuePolicy.d.ts.map +0 -1
- package/lib/typescript/pipeline/scheduler/flushScheduler.d.ts.map +0 -1
- package/lib/typescript/pipeline/scheduler/retryPolicy.d.ts.map +0 -1
- package/lib/typescript/public/ScaleBunErrorBoundary.d.ts.map +0 -1
- package/lib/typescript/public/ScaleBunFacade.d.ts.map +0 -1
- package/lib/typescript/public/ScaleBunProvider.d.ts.map +0 -1
- package/lib/typescript/public/typedTracker.d.ts.map +0 -1
- package/lib/typescript/public/types.d.ts.map +0 -1
- package/lib/typescript/push/PushManager.d.ts.map +0 -1
- package/lib/typescript/push/adapters/ManualAdapter.d.ts.map +0 -1
- package/lib/typescript/push/adapters/NativeBridgeAdapter.d.ts.map +0 -1
- package/lib/typescript/push/adapters/NoopAdapter.d.ts.map +0 -1
- package/lib/typescript/push/adapters/RNFirebaseMessagingAdapter.d.ts.map +0 -1
- package/lib/typescript/push/adapters/loadMessaging.d.ts.map +0 -1
- package/lib/typescript/push/adapters/loadNotifee.d.ts.map +0 -1
- package/lib/typescript/push/adapters/selectAdapter.d.ts.map +0 -1
- package/lib/typescript/push/detect/capabilities.d.ts.map +0 -1
- package/lib/typescript/push/index.d.ts.map +0 -1
- package/lib/typescript/push/native/nativeNotifications.d.ts.map +0 -1
- package/lib/typescript/push/types.d.ts.map +0 -1
- package/lib/typescript/specs/NativeReplaySdk.d.ts.map +0 -1
- package/lib/typescript/specs/NativeScaleBunCrash.d.ts.map +0 -1
- package/lib/typescript/specs/NativeScaleBunInstallReferrer.d.ts.map +0 -1
- package/lib/typescript/specs/NativeScaleBunOta.d.ts.map +0 -1
- package/lib/typescript/specs/NativeScaleBunPerformance.d.ts.map +0 -1
- package/lib/typescript/specs/NativeScaleBunProfiler.d.ts.map +0 -1
- package/lib/typescript/specs/NativeScaleBunStorage.d.ts.map +0 -1
- package/lib/typescript/storage/StorageBackend.d.ts.map +0 -1
- package/lib/typescript/storage/db/sqlite.d.ts.map +0 -1
- package/lib/typescript/storage/files/fileStore.d.ts.map +0 -1
- package/lib/typescript/transport/auth/sdkSession.d.ts.map +0 -1
- package/lib/typescript/transport/backoff/exponentialJitter.d.ts.map +0 -1
- package/lib/typescript/transport/http/endpoints.d.ts.map +0 -1
- package/lib/typescript/transport/http/httpClient.d.ts.map +0 -1
- package/lib/typescript/transport/rateLimit/retryAfter.d.ts.map +0 -1
- package/lib/typescript/transport/signing/requestSigner.d.ts.map +0 -1
- package/lib/typescript/vendor/protocol/index.d.ts.map +0 -1
- package/lib/typescript/vendor/protocol/internal/validation.d.ts.map +0 -1
- package/lib/typescript/vendor/sdk-contracts/bridge.d.ts.map +0 -1
- package/lib/typescript/vendor/sdk-contracts/config.d.ts.map +0 -1
- package/lib/typescript/vendor/sdk-contracts/events.d.ts.map +0 -1
- package/lib/typescript/vendor/sdk-contracts/features.d.ts.map +0 -1
- package/lib/typescript/vendor/sdk-contracts/index.d.ts.map +0 -1
- package/lib/typescript/vendor/sdk-contracts/platform.d.ts.map +0 -1
- package/lib/typescript/vendor/sdk-contracts/session-boundary.d.ts.map +0 -1
- package/lib/typescript/vendor/sdk-contracts/session.d.ts.map +0 -1
|
@@ -86,6 +86,22 @@ export class SessionManager {
|
|
|
86
86
|
* differently across devices and pushes markers ~10% off vertically).
|
|
87
87
|
*/
|
|
88
88
|
_lastNativeViewportJsUnits = null;
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Exact-duplicate gesture suppression (QA: one physical tap recorded 2–3×).
|
|
92
|
+
*
|
|
93
|
+
* Measured in production data: the native tracker re-emitted the SAME tap — identical
|
|
94
|
+
* gestureType and identical coordinates to the SUB-PIXEL (e.g. x=466.962890625) — at
|
|
95
|
+
* 160–240ms gaps, sometimes twice. A human re-tap cannot reproduce a sub-pixel float
|
|
96
|
+
* exactly, so exact coordinate equality within the window is a safe discriminator: real
|
|
97
|
+
* double-taps land on at least slightly different pixels and pass through untouched.
|
|
98
|
+
* The pipeline's own 100ms dedup was too narrow for these; this window covers what was
|
|
99
|
+
* actually observed with margin. Sits at the ONE entry point every gesture source funnels
|
|
100
|
+
* through, so recording and analytics lanes are protected equally.
|
|
101
|
+
*/
|
|
102
|
+
_lastGestureSig = null;
|
|
103
|
+
_lastGestureTs = 0;
|
|
104
|
+
static GESTURE_DEDUP_WINDOW_MS = 400;
|
|
89
105
|
/** Memoized native file-outbox frame adapter (gated by the backend transport). */
|
|
90
106
|
_outboxFrameCapture = null;
|
|
91
107
|
constructor(debugTransport, nativeCapture, managerConfig) {
|
|
@@ -933,6 +949,18 @@ export class SessionManager {
|
|
|
933
949
|
* Emits a USER_ACTION event with gesture-specific subtype and payload.
|
|
934
950
|
*/
|
|
935
951
|
onGestureDetected(gestureType, details) {
|
|
952
|
+
// Exact-duplicate suppression — see _lastGestureSig. Signature is the gesture type plus
|
|
953
|
+
// raw coordinates verbatim; String() keeps undefined coords distinct from 0 (a payload
|
|
954
|
+
// with no coords never collides with a real origin tap).
|
|
955
|
+
const dedupSig = `${gestureType}|${String(details?.x)}|${String(details?.y)}|${String(details?.endX)}|${String(details?.endY)}`;
|
|
956
|
+
const nowTs = Date.now();
|
|
957
|
+
if (dedupSig === this._lastGestureSig && nowTs - this._lastGestureTs <= SessionManager.GESTURE_DEDUP_WINDOW_MS) {
|
|
958
|
+
this._lastGestureTs = nowTs; // a burst of 3 stays suppressed even if gaps chain past the window
|
|
959
|
+
return;
|
|
960
|
+
}
|
|
961
|
+
this._lastGestureSig = dedupSig;
|
|
962
|
+
this._lastGestureTs = nowTs;
|
|
963
|
+
|
|
936
964
|
// Build the canonical gesture payload ONCE so the recording lane and the
|
|
937
965
|
// (additive) analytics lane carry byte-identical keys (normalizedX/Y,
|
|
938
966
|
// gestureType, etc.). Same object shape that was previously inlined.
|
|
@@ -18,13 +18,14 @@ import { BugReportFeature } from '../features/bugreport/BugReportFeature';
|
|
|
18
18
|
import { PersistentQueue } from '../pipeline/queue/persistentQueue';
|
|
19
19
|
import { MemoryBackend, createStorageBackend } from '../storage/StorageBackend';
|
|
20
20
|
import { getDeviceId } from '../core/id/deviceId';
|
|
21
|
-
import { mergeDeviceContext, resolveEventPlatform } from '../core/context/device';
|
|
21
|
+
import { mergeDeviceContext, nativeDeviceContext, resolveEventPlatform } from '../core/context/device';
|
|
22
22
|
import { coreContainer } from '../core/di/container';
|
|
23
23
|
import { flushQueue } from '../pipeline/queue/flushQueue';
|
|
24
24
|
import { enableDebug as _enableDebug, disableDebug as _disableDebug, isDebugEnabled, addBreadcrumb as _addBreadcrumb, ping as _ping, _getStream, _setFlushFn, getPerformanceFeature as _getPerformanceFeature, requestExport as _requestExport, buildDebugConfigFromInitConfig, applyFeatureGatesToDebugConfig, sendDebugMetric } from '../debug';
|
|
25
25
|
import { ReplaySdk } from '../features/replay/public/api';
|
|
26
26
|
import { SDKBootstrapper } from '../bootstrap/SDKBootstrapper';
|
|
27
27
|
import { EventTracker } from '../analytics/EventTracker';
|
|
28
|
+
import { bridgeAdapter } from '../features/replay/bridge/adapters/bridgeAdapter';
|
|
28
29
|
import { emitAutomaticEvent } from '../analytics/automaticEvents';
|
|
29
30
|
import { resolveEventLane, isUploadedSessionEvent } from '../analytics/eventLane';
|
|
30
31
|
import { ConfigManager } from '../config/ConfigManager';
|
|
@@ -307,6 +308,8 @@ class ScaleBunFacade {
|
|
|
307
308
|
* the whole time. The SDK knows the device; the integrator is guessing at it.
|
|
308
309
|
* Everything outside the detected keys is still theirs.
|
|
309
310
|
*/
|
|
311
|
+
// Everything Platform.constants knows. On iOS that is neither the model nor the
|
|
312
|
+
// manufacturer, so the bridge completes it below once it answers.
|
|
310
313
|
context: mergeDeviceContext(rawConfig?.context),
|
|
311
314
|
// Use the same foreground id as replay/journey capture. The
|
|
312
315
|
// callback is resolved per event because the session subsystem
|
|
@@ -321,6 +324,19 @@ class ScaleBunFacade {
|
|
|
321
324
|
this._eventTracker.start();
|
|
322
325
|
__DEV__ && logger.info('[ScaleBun] Envelope event tracking started → /v1/batch.');
|
|
323
326
|
|
|
327
|
+
// Complete the device context from the native bridge.
|
|
328
|
+
//
|
|
329
|
+
// `Platform.constants` answers Android synchronously — model and manufacturer ride the
|
|
330
|
+
// first event. It answers NEITHER on iOS, so without this every iOS installation
|
|
331
|
+
// reported no device model at all: `nativeDeviceContext` existed for exactly this and
|
|
332
|
+
// had no caller, and the bridge's own answer was `UIDevice.current.model` — the string
|
|
333
|
+
// "iPhone", identical on every iPhone ever made.
|
|
334
|
+
//
|
|
335
|
+
// Fire-and-forget on purpose. The bridge is async and absent entirely on Expo Go or an
|
|
336
|
+
// older native binary; waiting on it would delay the first event, and failing on it
|
|
337
|
+
// would take analytics down over a nice-to-have field.
|
|
338
|
+
this._applyNativeDeviceContext(this._eventTracker);
|
|
339
|
+
|
|
324
340
|
// Android: capture the Play Install Referrer once per install → feeds the
|
|
325
341
|
// deterministic click_id path + a one-off install_referrer event (UTM/gclid).
|
|
326
342
|
// Fire-and-forget; no-op off Android.
|
|
@@ -345,6 +361,24 @@ class ScaleBunFacade {
|
|
|
345
361
|
}
|
|
346
362
|
}
|
|
347
363
|
|
|
364
|
+
/**
|
|
365
|
+
* Fold the native bridge's device facts into the analytics context once it answers.
|
|
366
|
+
*
|
|
367
|
+
* Detected values never overwrite a populated one with an empty one — `nativeDeviceContext`
|
|
368
|
+
* drops absent keys and `applyDetectedContext` ignores an empty patch — so a bridge that
|
|
369
|
+
* cannot answer leaves whatever `Platform.constants` already found.
|
|
370
|
+
*/
|
|
371
|
+
_applyNativeDeviceContext(tracker) {
|
|
372
|
+
Promise.resolve().then(() => bridgeAdapter.getDeviceInfo()).then(info => {
|
|
373
|
+
if (!info) return;
|
|
374
|
+
tracker.applyDetectedContext(nativeDeviceContext({
|
|
375
|
+
osVersion: info.osVersion,
|
|
376
|
+
deviceModel: info.deviceModel
|
|
377
|
+
// iOS ships no manufacturer over the bridge; it is a constant there and the
|
|
378
|
+
// static path already set it. Android's arrives via Platform.constants.
|
|
379
|
+
}));
|
|
380
|
+
}).catch(() => {/* bridge unavailable — the static context stands */});
|
|
381
|
+
}
|
|
348
382
|
/**
|
|
349
383
|
* Android-only: read the Play Install Referrer once per install and route it into
|
|
350
384
|
* attribution. `scalebun_click_id` → the deterministic click path; the full
|
|
@@ -543,17 +577,94 @@ class ScaleBunFacade {
|
|
|
543
577
|
});
|
|
544
578
|
}
|
|
545
579
|
|
|
546
|
-
/**
|
|
547
|
-
|
|
580
|
+
/**
|
|
581
|
+
* Clear user identity.
|
|
582
|
+
*
|
|
583
|
+
* SB-11: pass `{ purgeLocal: true }` on logout / consent withdrawal to also
|
|
584
|
+
* erase all locally-stored SDK data (see {@link eraseLocalData}). Without it,
|
|
585
|
+
* behaviour is unchanged (identity-only clear).
|
|
586
|
+
*/
|
|
587
|
+
clearUser(options) {
|
|
548
588
|
return noThrow(() => {
|
|
549
589
|
this._identifiedUserId = null;
|
|
550
590
|
this._pendingIdentity = null;
|
|
551
591
|
if (!this.initialized) return;
|
|
552
592
|
this._eventTracker?.clearIdentity();
|
|
553
593
|
this.track('$clear_user', {});
|
|
594
|
+
if (options?.purgeLocal) void this.eraseLocalData();
|
|
595
|
+
});
|
|
596
|
+
}
|
|
597
|
+
|
|
598
|
+
/**
|
|
599
|
+
* SB-11: erase all locally-stored SDK data from the device — the durable event
|
|
600
|
+
* queue, the pre-init buffer, and the first-party KV store (cached install /
|
|
601
|
+
* anonymous / session IDs, plus any queued payloads including SB-26 disk data).
|
|
602
|
+
*
|
|
603
|
+
* Order matters: capture is stopped FIRST so nothing is written back in behind
|
|
604
|
+
* the delete. Best-effort and never throws.
|
|
605
|
+
*
|
|
606
|
+
* Note: native replay frames written to disk on iOS are addressed separately
|
|
607
|
+
* (SB-15); this covers every store reachable from JS today.
|
|
608
|
+
*/
|
|
609
|
+
async eraseLocalData() {
|
|
610
|
+
try {
|
|
611
|
+
// 1) Stop capture so no new frames/events are produced mid-erase.
|
|
612
|
+
try {
|
|
613
|
+
SessionManager.getExistingInstance()?.endSession('ended');
|
|
614
|
+
} catch {/* best-effort */}
|
|
615
|
+
// 2) Clear the durable queue and the pre-init buffer.
|
|
616
|
+
try {
|
|
617
|
+
this._getQueue().clear();
|
|
618
|
+
} catch {/* best-effort */}
|
|
619
|
+
try {
|
|
620
|
+
this._preInitBuffer.clear();
|
|
621
|
+
} catch {/* best-effort */}
|
|
622
|
+
// 3) Wipe the first-party KV store (cached IDs + any on-disk queue
|
|
623
|
+
// residue) by removing every key through the backend interface.
|
|
624
|
+
try {
|
|
625
|
+
const store = createStorageBackend();
|
|
626
|
+
for (const key of store.getAllKeys()) {
|
|
627
|
+
store.delete(key);
|
|
628
|
+
}
|
|
629
|
+
} catch {/* best-effort */}
|
|
630
|
+
} catch {
|
|
631
|
+
// Never throw — erasure is a safety operation on a best-effort basis.
|
|
632
|
+
}
|
|
633
|
+
}
|
|
634
|
+
|
|
635
|
+
/**
|
|
636
|
+
* SB-11: record the user's data-collection consent. When `enabled` is false,
|
|
637
|
+
* capture is stopped immediately; pass `{ purgeLocal: true }` to also erase
|
|
638
|
+
* everything already stored locally. Never throws.
|
|
639
|
+
*/
|
|
640
|
+
setConsent(enabled, options) {
|
|
641
|
+
noThrow(() => {
|
|
642
|
+
if (enabled) return;
|
|
643
|
+
try {
|
|
644
|
+
SessionManager.getExistingInstance()?.endSession('ended');
|
|
645
|
+
} catch {/* best-effort */}
|
|
646
|
+
if (options?.purgeLocal) void this.eraseLocalData();
|
|
554
647
|
});
|
|
555
648
|
}
|
|
556
649
|
|
|
650
|
+
/**
|
|
651
|
+
* SB-10: return the effective privacy policy actually in force, resolving the
|
|
652
|
+
* public config against the SDK's safe defaults. Lets callers and tests assert
|
|
653
|
+
* what is active rather than guessing from the (previously dead) config object.
|
|
654
|
+
*/
|
|
655
|
+
getEffectivePrivacyPolicy() {
|
|
656
|
+
const p = this._privacyConfig ?? {};
|
|
657
|
+
return {
|
|
658
|
+
// Real default is true (matches the replay capture default) — the old
|
|
659
|
+
// doc comment claiming "false" was both wrong and less safe.
|
|
660
|
+
maskTextInputs: p.maskTextInputs ?? true,
|
|
661
|
+
maskImages: p.maskImages ?? false,
|
|
662
|
+
redactAuth: p.redactAuth ?? true,
|
|
663
|
+
redactCookies: p.redactCookies ?? true,
|
|
664
|
+
redactBodies: p.redactBodies ?? false
|
|
665
|
+
};
|
|
666
|
+
}
|
|
667
|
+
|
|
557
668
|
/**
|
|
558
669
|
* Submit in-app rating (1-5 stars).
|
|
559
670
|
* Attaches to current session when available; otherwise sends standalone.
|
|
@@ -134,6 +134,21 @@ export declare class EventTracker {
|
|
|
134
134
|
}): void;
|
|
135
135
|
flush(): Promise<void>;
|
|
136
136
|
stop(): void;
|
|
137
|
+
/**
|
|
138
|
+
* Fold in device facts that were not knowable at init.
|
|
139
|
+
*
|
|
140
|
+
* `Platform.constants` answers Android synchronously, so its model and manufacturer ride the
|
|
141
|
+
* very first event. iOS exposes neither there — only the native bridge knows, and the bridge is
|
|
142
|
+
* async and may not be installed at all. Without this the iOS half of every install reported no
|
|
143
|
+
* model whatsoever.
|
|
144
|
+
*
|
|
145
|
+
* `buildEnvelope` reads `cfg.context` per event, so applying it here reaches every event from
|
|
146
|
+
* the next one onward. Detected keys WIN over whatever the integrator configured, for the same
|
|
147
|
+
* reason `mergeDeviceContext` inverts the usual precedence: a measurement must not be
|
|
148
|
+
* overridable by a guess. Empty patches are ignored so a bridge that answered with nothing
|
|
149
|
+
* cannot blank a value the static path already found.
|
|
150
|
+
*/
|
|
151
|
+
applyDetectedContext(patch: Record<string, string>): void;
|
|
137
152
|
private buildEnvelope;
|
|
138
153
|
private enqueue;
|
|
139
154
|
private scheduleFlush;
|
|
@@ -77,6 +77,14 @@ export interface ScaleBunConfig {
|
|
|
77
77
|
deltaEncoding?: boolean;
|
|
78
78
|
deltaKeyframeInterval?: number;
|
|
79
79
|
};
|
|
80
|
+
/** SB-10: public top-level privacy config, mapped onto the replay privacy policy. */
|
|
81
|
+
privacy?: {
|
|
82
|
+
maskTextInputs?: boolean;
|
|
83
|
+
maskImages?: boolean;
|
|
84
|
+
redactAuth?: boolean;
|
|
85
|
+
redactCookies?: boolean;
|
|
86
|
+
redactBodies?: boolean;
|
|
87
|
+
};
|
|
80
88
|
captureInteractionHeatmap: boolean;
|
|
81
89
|
/** Opt-in: capture console.* into the Logs lane in SaaS mode. Default false. */
|
|
82
90
|
captureConsoleLogs: boolean;
|
|
@@ -34,6 +34,7 @@ export declare function nativeDeviceContext(info: {
|
|
|
34
34
|
platform?: string;
|
|
35
35
|
osVersion?: string;
|
|
36
36
|
deviceModel?: string;
|
|
37
|
+
manufacturer?: string;
|
|
37
38
|
} | null): Record<string, string>;
|
|
38
39
|
/**
|
|
39
40
|
* Merge the integrator's context with what we detected — DETECTED WINS on the keys above.
|
|
@@ -13,6 +13,12 @@ export declare function redactHeaders(headers: Record<string, string> | undefine
|
|
|
13
13
|
/**
|
|
14
14
|
* Deep-redact sensitive keys in a body object. Returns a new object.
|
|
15
15
|
* Handles nested objects and arrays. Never throws.
|
|
16
|
+
*
|
|
17
|
+
* SB-02: string bodies (what JSON.stringify produces — i.e. essentially every
|
|
18
|
+
* React Native network body) are no longer passed through untouched. If a string
|
|
19
|
+
* parses as JSON it is deep-redacted and re-serialized; otherwise structured
|
|
20
|
+
* secrets in the string are scrubbed. This closes the "6 of 9 seeded secrets
|
|
21
|
+
* survived" leak while leaving non-sensitive metadata intact.
|
|
16
22
|
*/
|
|
17
23
|
export declare function redactBody(body: unknown, maxDepth?: number): unknown;
|
|
18
24
|
export interface PIIWarning {
|
|
@@ -22,12 +28,12 @@ export interface PIIWarning {
|
|
|
22
28
|
location: string;
|
|
23
29
|
}
|
|
24
30
|
/**
|
|
25
|
-
* Scan a string for PII patterns. Returns list of warnings.
|
|
31
|
+
* Scan a string for PII patterns. Returns a bounded list of warnings.
|
|
26
32
|
* Never throws.
|
|
27
33
|
*/
|
|
28
34
|
export declare function scanForPII(text: string, location?: string): PIIWarning[];
|
|
29
35
|
/**
|
|
30
|
-
* Scan an object deeply for PII. Returns list of warnings.
|
|
36
|
+
* Scan an object deeply for PII. Returns a bounded list of warnings.
|
|
31
37
|
* Never throws.
|
|
32
38
|
*/
|
|
33
39
|
export declare function scanObjectForPII(obj: unknown, basePath?: string, maxDepth?: number): PIIWarning[];
|
|
@@ -30,12 +30,22 @@ export declare class AutoScreenDetector {
|
|
|
30
30
|
private _manualScreen;
|
|
31
31
|
private _manualScreenTs;
|
|
32
32
|
private _autoScreen;
|
|
33
|
+
/** `name#key` of the last auto-detected screen VISIT — see _extractActiveVisit. */
|
|
34
|
+
private _autoVisitSig;
|
|
33
35
|
private _navigationRef;
|
|
34
36
|
private _navListenerRemover;
|
|
35
37
|
private _navListenerWired;
|
|
36
38
|
private _heuristicTimer;
|
|
37
39
|
private _started;
|
|
38
40
|
private _lastEmittedScreen;
|
|
41
|
+
private _lastEmittedTs;
|
|
42
|
+
/**
|
|
43
|
+
* Cross-source emit dedup window — see _emitScreenChange. Long enough to absorb the manual
|
|
44
|
+
* beacon and the navRef listener both reporting the SAME transition (they land within the
|
|
45
|
+
* 30ms nav debounce plus a render), short enough that a genuine re-visit of the same route
|
|
46
|
+
* a moment later is a new screen view rather than silence.
|
|
47
|
+
*/
|
|
48
|
+
private static readonly EMIT_DEDUP_WINDOW_MS;
|
|
39
49
|
private _navDebounceTimer;
|
|
40
50
|
/** Whether the React Navigation exports were actually replaced — see _autoHookReactNavigation. */
|
|
41
51
|
private _autoHookInstalled;
|
|
@@ -90,6 +100,21 @@ export declare class AutoScreenDetector {
|
|
|
90
100
|
* Handles nested navigators by walking to the deepest active route.
|
|
91
101
|
*/
|
|
92
102
|
private _extractActiveRoute;
|
|
103
|
+
/**
|
|
104
|
+
* Extract the active route's name AND its React Navigation route `key`.
|
|
105
|
+
*
|
|
106
|
+
* The key is what makes re-VISITS detectable. Comparing names alone collapses two
|
|
107
|
+
* different visits to the same route into one screen view: leave Details, open Details
|
|
108
|
+
* again, and `name === _autoScreen` swallowed the second visit entirely (QA: "opened the
|
|
109
|
+
* same route again and no screen event was recorded"). React Navigation mints a fresh
|
|
110
|
+
* `key` for every pushed route instance, so a re-push of the same name is a NEW key —
|
|
111
|
+
* name+key comparison records each visit while a mere re-render of the same instance
|
|
112
|
+
* (same key) still emits nothing. States without keys degrade to name-only, i.e. the
|
|
113
|
+
* old behaviour, never worse.
|
|
114
|
+
*/
|
|
115
|
+
private _extractActiveVisit;
|
|
116
|
+
/** `name#key` signature of one screen VISIT — what the auto paths dedup on. */
|
|
117
|
+
private _visitSig;
|
|
93
118
|
/** Start auto-detection (idempotent) */
|
|
94
119
|
start(): void;
|
|
95
120
|
/**
|
|
@@ -119,6 +119,8 @@ export declare class BackendSessionAdapter implements SessionTransport {
|
|
|
119
119
|
private _nativeOutboxReady;
|
|
120
120
|
private currentSessionId;
|
|
121
121
|
private readonly _startedSessionIds;
|
|
122
|
+
private readonly _pendingStartPayloads;
|
|
123
|
+
private _startRetryInFlight;
|
|
122
124
|
private pendingFrames;
|
|
123
125
|
private pendingEvents;
|
|
124
126
|
private pendingNetworkRequests;
|
|
@@ -170,6 +172,13 @@ export declare class BackendSessionAdapter implements SessionTransport {
|
|
|
170
172
|
* backend so the dashboard uses the same value to draw idle bands. */
|
|
171
173
|
idleThresholdMs?: number;
|
|
172
174
|
}): Promise<void>;
|
|
175
|
+
/**
|
|
176
|
+
* Re-attempt any INGESTION_START whose POST failed (offline app launch). Runs on every
|
|
177
|
+
* flush tick of BOTH lanes — cheap no-op when the map is empty, single-flight guarded.
|
|
178
|
+
* On ack: opens the row-ready gate and drains whichever lane the id belongs to, which is
|
|
179
|
+
* exactly what un-sticks a replay that started offline once connectivity returns.
|
|
180
|
+
*/
|
|
181
|
+
private _retryPendingStarts;
|
|
173
182
|
/**
|
|
174
183
|
* Enqueue a user track() event. Buffers (bounded, drop-oldest) when the
|
|
175
184
|
* analytics session is not yet open; flushes at >=20 once it is.
|
|
@@ -77,6 +77,21 @@ export declare class SessionManager {
|
|
|
77
77
|
* differently across devices and pushes markers ~10% off vertically).
|
|
78
78
|
*/
|
|
79
79
|
private _lastNativeViewportJsUnits;
|
|
80
|
+
/**
|
|
81
|
+
* Exact-duplicate gesture suppression (QA: one physical tap recorded 2–3×).
|
|
82
|
+
*
|
|
83
|
+
* Measured in production data: the native tracker re-emitted the SAME tap — identical
|
|
84
|
+
* gestureType and identical coordinates to the SUB-PIXEL (e.g. x=466.962890625) — at
|
|
85
|
+
* 160–240ms gaps, sometimes twice. A human re-tap cannot reproduce a sub-pixel float
|
|
86
|
+
* exactly, so exact coordinate equality within the window is a safe discriminator: real
|
|
87
|
+
* double-taps land on at least slightly different pixels and pass through untouched.
|
|
88
|
+
* The pipeline's own 100ms dedup was too narrow for these; this window covers what was
|
|
89
|
+
* actually observed with margin. Sits at the ONE entry point every gesture source funnels
|
|
90
|
+
* through, so recording and analytics lanes are protected equally.
|
|
91
|
+
*/
|
|
92
|
+
private _lastGestureSig;
|
|
93
|
+
private _lastGestureTs;
|
|
94
|
+
private static readonly GESTURE_DEDUP_WINDOW_MS;
|
|
80
95
|
private _nativeCapture;
|
|
81
96
|
private _rawTransport;
|
|
82
97
|
/** Memoized native file-outbox frame adapter (gated by the backend transport). */
|
|
@@ -80,6 +80,14 @@ declare class ScaleBunFacade {
|
|
|
80
80
|
private _autoEnableDebug;
|
|
81
81
|
/** Boot the Phase 1 envelope tracking lane if an appId is configured. */
|
|
82
82
|
private _maybeStartEventTracker;
|
|
83
|
+
/**
|
|
84
|
+
* Fold the native bridge's device facts into the analytics context once it answers.
|
|
85
|
+
*
|
|
86
|
+
* Detected values never overwrite a populated one with an empty one — `nativeDeviceContext`
|
|
87
|
+
* drops absent keys and `applyDetectedContext` ignores an empty patch — so a bridge that
|
|
88
|
+
* cannot answer leaves whatever `Platform.constants` already found.
|
|
89
|
+
*/
|
|
90
|
+
private _applyNativeDeviceContext;
|
|
83
91
|
/**
|
|
84
92
|
* Android-only: read the Play Install Referrer once per install and route it into
|
|
85
93
|
* attribution. `scalebun_click_id` → the deterministic click path; the full
|
|
@@ -165,8 +173,42 @@ declare class ScaleBunFacade {
|
|
|
165
173
|
private _callIngestionIdentify;
|
|
166
174
|
/** Set user identity (for session context) */
|
|
167
175
|
setUser(user: ScaleBunUser): void | undefined;
|
|
168
|
-
/**
|
|
169
|
-
|
|
176
|
+
/**
|
|
177
|
+
* Clear user identity.
|
|
178
|
+
*
|
|
179
|
+
* SB-11: pass `{ purgeLocal: true }` on logout / consent withdrawal to also
|
|
180
|
+
* erase all locally-stored SDK data (see {@link eraseLocalData}). Without it,
|
|
181
|
+
* behaviour is unchanged (identity-only clear).
|
|
182
|
+
*/
|
|
183
|
+
clearUser(options?: {
|
|
184
|
+
purgeLocal?: boolean;
|
|
185
|
+
}): void | undefined;
|
|
186
|
+
/**
|
|
187
|
+
* SB-11: erase all locally-stored SDK data from the device — the durable event
|
|
188
|
+
* queue, the pre-init buffer, and the first-party KV store (cached install /
|
|
189
|
+
* anonymous / session IDs, plus any queued payloads including SB-26 disk data).
|
|
190
|
+
*
|
|
191
|
+
* Order matters: capture is stopped FIRST so nothing is written back in behind
|
|
192
|
+
* the delete. Best-effort and never throws.
|
|
193
|
+
*
|
|
194
|
+
* Note: native replay frames written to disk on iOS are addressed separately
|
|
195
|
+
* (SB-15); this covers every store reachable from JS today.
|
|
196
|
+
*/
|
|
197
|
+
eraseLocalData(): Promise<void>;
|
|
198
|
+
/**
|
|
199
|
+
* SB-11: record the user's data-collection consent. When `enabled` is false,
|
|
200
|
+
* capture is stopped immediately; pass `{ purgeLocal: true }` to also erase
|
|
201
|
+
* everything already stored locally. Never throws.
|
|
202
|
+
*/
|
|
203
|
+
setConsent(enabled: boolean, options?: {
|
|
204
|
+
purgeLocal?: boolean;
|
|
205
|
+
}): void;
|
|
206
|
+
/**
|
|
207
|
+
* SB-10: return the effective privacy policy actually in force, resolving the
|
|
208
|
+
* public config against the SDK's safe defaults. Lets callers and tests assert
|
|
209
|
+
* what is active rather than guessing from the (previously dead) config object.
|
|
210
|
+
*/
|
|
211
|
+
getEffectivePrivacyPolicy(): Required<Pick<PrivacyConfig, 'maskTextInputs' | 'maskImages' | 'redactAuth' | 'redactCookies' | 'redactBodies'>>;
|
|
170
212
|
/**
|
|
171
213
|
* Submit in-app rating (1-5 stars).
|
|
172
214
|
* Attaches to current session when available; otherwise sends standalone.
|
|
@@ -167,7 +167,7 @@ export interface PrivacyConfig {
|
|
|
167
167
|
redactCookies?: boolean;
|
|
168
168
|
/** Redact request/response bodies in network capture. Default: false */
|
|
169
169
|
redactBodies?: boolean;
|
|
170
|
-
/** Mask text input values in session replay. Default:
|
|
170
|
+
/** Mask text input values in session replay. Default: true */
|
|
171
171
|
maskTextInputs?: boolean;
|
|
172
172
|
/** Mask image content in session replay. Default: false */
|
|
173
173
|
maskImages?: boolean;
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@scalebun/react-native",
|
|
3
|
-
"version": "1.10.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "1.10.6",
|
|
4
|
+
"description": "React Native SDK for ScaleBun",
|
|
5
5
|
"main": "lib/commonjs/index",
|
|
6
6
|
"module": "lib/module/index",
|
|
7
7
|
"types": "lib/typescript/index.d.ts",
|
|
@@ -24,6 +24,10 @@
|
|
|
24
24
|
"!**/__tests__",
|
|
25
25
|
"!**/__fixtures__",
|
|
26
26
|
"!**/__mocks__",
|
|
27
|
+
"!android/build",
|
|
28
|
+
"!android/.cxx",
|
|
29
|
+
"!android/.gradle",
|
|
30
|
+
"!**/*.map",
|
|
27
31
|
"!**/.*"
|
|
28
32
|
],
|
|
29
33
|
"exports": {
|
|
@@ -387,6 +387,25 @@ export class EventTracker {
|
|
|
387
387
|
this.persistQueue();
|
|
388
388
|
}
|
|
389
389
|
|
|
390
|
+
/**
|
|
391
|
+
* Fold in device facts that were not knowable at init.
|
|
392
|
+
*
|
|
393
|
+
* `Platform.constants` answers Android synchronously, so its model and manufacturer ride the
|
|
394
|
+
* very first event. iOS exposes neither there — only the native bridge knows, and the bridge is
|
|
395
|
+
* async and may not be installed at all. Without this the iOS half of every install reported no
|
|
396
|
+
* model whatsoever.
|
|
397
|
+
*
|
|
398
|
+
* `buildEnvelope` reads `cfg.context` per event, so applying it here reaches every event from
|
|
399
|
+
* the next one onward. Detected keys WIN over whatever the integrator configured, for the same
|
|
400
|
+
* reason `mergeDeviceContext` inverts the usual precedence: a measurement must not be
|
|
401
|
+
* overridable by a guess. Empty patches are ignored so a bridge that answered with nothing
|
|
402
|
+
* cannot blank a value the static path already found.
|
|
403
|
+
*/
|
|
404
|
+
applyDetectedContext(patch: Record<string, string>): void {
|
|
405
|
+
if (!patch || Object.keys(patch).length === 0) return;
|
|
406
|
+
this.cfg.context = { ...(this.cfg.context ?? {}), ...patch };
|
|
407
|
+
}
|
|
408
|
+
|
|
390
409
|
// ─── internals ─────────────────────────────────────────────────────────────
|
|
391
410
|
|
|
392
411
|
private buildEnvelope(eventName: string, properties?: Record<string, any>): Envelope {
|
|
@@ -36,6 +36,7 @@ import { PerformanceFeature } from '../features/performance/PerformanceFeature';
|
|
|
36
36
|
import { PersistentQueue } from '../pipeline/queue/persistentQueue';
|
|
37
37
|
import { createStorageBackend, MemoryBackend } from '../storage/StorageBackend';
|
|
38
38
|
import { SessionManager } from '../features/session/SessionManager';
|
|
39
|
+
import type { SessionReplayConfig } from '../features/session/sessionTypes';
|
|
39
40
|
import { nativeCapture } from '../features/session/nativeCapture';
|
|
40
41
|
import { installAlertInstrumentation, uninstallAlertInstrumentation } from '../features/replay/integrations/alert/alertInstrumentation';
|
|
41
42
|
import { installConsoleIntegration, uninstallConsoleIntegration } from '../features/replay/integrations/logs/consoleIntegration';
|
|
@@ -342,6 +343,21 @@ export class SDKBootstrapper {
|
|
|
342
343
|
if (features.replay !== false) {
|
|
343
344
|
try {
|
|
344
345
|
__DEV__ && logger.debug('[Bootstrap] Initializing unified SessionManager');
|
|
346
|
+
// SB-10: map the public top-level privacy config onto the replay
|
|
347
|
+
// privacy policy — the field the native capture path actually reads.
|
|
348
|
+
// Unspecified fields fall back to the SDK's safe defaults
|
|
349
|
+
// (redactTextInputs: true), so this only ever tightens masking.
|
|
350
|
+
const pub = this.config.privacy ?? {};
|
|
351
|
+
const sessionReplay: Record<string, unknown> = { ...(this.config.replay ?? {}) };
|
|
352
|
+
if (typeof pub.maskTextInputs === 'boolean' || typeof pub.maskImages === 'boolean') {
|
|
353
|
+
sessionReplay.privacyPolicy = {
|
|
354
|
+
redactTextInputs: pub.maskTextInputs ?? true,
|
|
355
|
+
redactImages: pub.maskImages ?? false,
|
|
356
|
+
blockTestIds: [],
|
|
357
|
+
captureExclusions: [],
|
|
358
|
+
};
|
|
359
|
+
}
|
|
360
|
+
|
|
345
361
|
const sessionManager = SessionManager.getInstance(
|
|
346
362
|
null, // No desktop transport initially
|
|
347
363
|
nativeCapture,
|
|
@@ -351,7 +367,7 @@ export class SDKBootstrapper {
|
|
|
351
367
|
// Also flow the Feature #4 heatmap flag so tap/gesture coords
|
|
352
368
|
// route to the analytics lane even when no recording is active.
|
|
353
369
|
{
|
|
354
|
-
|
|
370
|
+
sessionReplay: sessionReplay as Partial<SessionReplayConfig>,
|
|
355
371
|
captureInteractionHeatmap: this.config.captureInteractionHeatmap === true,
|
|
356
372
|
}
|
|
357
373
|
);
|
|
@@ -169,6 +169,20 @@ const SHAPE: Record<string, Field> = {
|
|
|
169
169
|
deltaKeyframeInterval: num({ min: 1, int: true, opt: true }),
|
|
170
170
|
},
|
|
171
171
|
},
|
|
172
|
+
// SB-10: the public, documented top-level privacy config. Previously only the
|
|
173
|
+
// nested replay privacy took effect; this is validated here and mapped onto the
|
|
174
|
+
// effective replay privacy policy in the bootstrapper so it actually masks.
|
|
175
|
+
privacy: {
|
|
176
|
+
kind: 'obj',
|
|
177
|
+
opt: true,
|
|
178
|
+
shape: {
|
|
179
|
+
maskTextInputs: { kind: 'bool', opt: true },
|
|
180
|
+
maskImages: { kind: 'bool', opt: true },
|
|
181
|
+
redactAuth: { kind: 'bool', opt: true },
|
|
182
|
+
redactCookies: { kind: 'bool', opt: true },
|
|
183
|
+
redactBodies: { kind: 'bool', opt: true },
|
|
184
|
+
},
|
|
185
|
+
},
|
|
172
186
|
captureInteractionHeatmap: bool(true),
|
|
173
187
|
// Opt-in: intercept console.* and ship the lines to the Diagnose → Logs lane in SaaS
|
|
174
188
|
// mode. OFF by default — console output can carry PII/secrets and adds ingest volume,
|
|
@@ -351,6 +365,14 @@ export interface ScaleBunConfig {
|
|
|
351
365
|
deltaEncoding?: boolean;
|
|
352
366
|
deltaKeyframeInterval?: number;
|
|
353
367
|
};
|
|
368
|
+
/** SB-10: public top-level privacy config, mapped onto the replay privacy policy. */
|
|
369
|
+
privacy?: {
|
|
370
|
+
maskTextInputs?: boolean;
|
|
371
|
+
maskImages?: boolean;
|
|
372
|
+
redactAuth?: boolean;
|
|
373
|
+
redactCookies?: boolean;
|
|
374
|
+
redactBodies?: boolean;
|
|
375
|
+
};
|
|
354
376
|
captureInteractionHeatmap: boolean;
|
|
355
377
|
/** Opt-in: capture console.* into the Logs lane in SaaS mode. Default false. */
|
|
356
378
|
captureConsoleLogs: boolean;
|
|
@@ -114,6 +114,10 @@ export function staticDeviceContext(): Record<string, string> {
|
|
|
114
114
|
if (c.Model) out.device_model = String(c.Model);
|
|
115
115
|
if (c.Manufacturer) out.manufacturer = String(c.Manufacturer);
|
|
116
116
|
else if (c.Brand) out.manufacturer = String(c.Brand);
|
|
117
|
+
// iOS exposes no manufacturer because it does not need to: every device running iOS is Apple's.
|
|
118
|
+
// A tautology, not a guess — and it means the field is populated on event #1 rather than waiting
|
|
119
|
+
// for a bridge that may never answer.
|
|
120
|
+
else if (out.platform_os === 'ios') out.manufacturer = 'Apple';
|
|
117
121
|
return out;
|
|
118
122
|
}
|
|
119
123
|
|
|
@@ -122,11 +126,13 @@ export function nativeDeviceContext(info: {
|
|
|
122
126
|
platform?: string;
|
|
123
127
|
osVersion?: string;
|
|
124
128
|
deviceModel?: string;
|
|
129
|
+
manufacturer?: string;
|
|
125
130
|
} | null): Record<string, string> {
|
|
126
131
|
const out: Record<string, string> = {};
|
|
127
132
|
if (!info) return out;
|
|
128
133
|
if (info.osVersion) out.os_version = info.osVersion;
|
|
129
134
|
if (info.deviceModel) out.device_model = info.deviceModel;
|
|
135
|
+
if (info.manufacturer) out.manufacturer = info.manufacturer;
|
|
130
136
|
return out;
|
|
131
137
|
}
|
|
132
138
|
|