@scalebun/react-native 1.10.3 → 1.10.5
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 +417 -57
- package/dist/scalebun.slim.js +414 -62
- package/lib/commonjs/bootstrap/SDKBootstrapper.js +31 -5
- package/lib/commonjs/core/config/schema.js +29 -0
- package/lib/commonjs/core/constants/version.js +1 -1
- 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 +79 -2
- package/lib/module/bootstrap/SDKBootstrapper.js +30 -3
- package/lib/module/core/config/schema.js +29 -0
- package/lib/module/core/constants/version.js +1 -1
- 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 +79 -2
- package/lib/typescript/core/config/schema.d.ts +8 -0
- package/lib/typescript/core/constants/version.d.ts +1 -1
- 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 +36 -2
- package/lib/typescript/public/types.d.ts +1 -1
- package/package.json +6 -2
- package/src/bootstrap/SDKBootstrapper.ts +32 -1
- package/src/core/config/schema.ts +22 -0
- package/src/core/constants/version.ts +1 -1
- 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 +81 -2
- 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
|
@@ -30,7 +30,7 @@ var _consoleIntegration = require("../features/replay/integrations/logs/consoleI
|
|
|
30
30
|
var _BackendSessionAdapter = require("../features/session/BackendSessionAdapter");
|
|
31
31
|
var _sessionId = require("../features/replay/core/ids/sessionId");
|
|
32
32
|
var _automaticEvents = require("../analytics/automaticEvents");
|
|
33
|
-
/**
|
|
33
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); } /**
|
|
34
34
|
* ScaleBun SDK — SDK Bootstrapper
|
|
35
35
|
*
|
|
36
36
|
* Encapsulates the core SDK initialization sequence.
|
|
@@ -46,7 +46,6 @@ var _automaticEvents = require("../analytics/automaticEvents");
|
|
|
46
46
|
* Returns null on failure (handshake fail, invalid config) to allow
|
|
47
47
|
* the Facade to handle gracefully without crashing.
|
|
48
48
|
*/
|
|
49
|
-
|
|
50
49
|
class SDKBootstrapper {
|
|
51
50
|
featureRegistry = new _FeatureRegistry.FeatureRegistry();
|
|
52
51
|
config = null;
|
|
@@ -323,6 +322,22 @@ class SDKBootstrapper {
|
|
|
323
322
|
if (features.replay !== false) {
|
|
324
323
|
try {
|
|
325
324
|
__DEV__ && _internalLogger.logger.debug('[Bootstrap] Initializing unified SessionManager');
|
|
325
|
+
// SB-10: map the public top-level privacy config onto the replay
|
|
326
|
+
// privacy policy — the field the native capture path actually reads.
|
|
327
|
+
// Unspecified fields fall back to the SDK's safe defaults
|
|
328
|
+
// (redactTextInputs: true), so this only ever tightens masking.
|
|
329
|
+
const pub = this.config.privacy ?? {};
|
|
330
|
+
const sessionReplay = {
|
|
331
|
+
...(this.config.replay ?? {})
|
|
332
|
+
};
|
|
333
|
+
if (typeof pub.maskTextInputs === 'boolean' || typeof pub.maskImages === 'boolean') {
|
|
334
|
+
sessionReplay.privacyPolicy = {
|
|
335
|
+
redactTextInputs: pub.maskTextInputs ?? true,
|
|
336
|
+
redactImages: pub.maskImages ?? false,
|
|
337
|
+
blockTestIds: [],
|
|
338
|
+
captureExclusions: []
|
|
339
|
+
};
|
|
340
|
+
}
|
|
326
341
|
const sessionManager = _SessionManager.SessionManager.getInstance(null,
|
|
327
342
|
// No desktop transport initially
|
|
328
343
|
_nativeCapture.nativeCapture,
|
|
@@ -332,9 +347,7 @@ class SDKBootstrapper {
|
|
|
332
347
|
// Also flow the Feature #4 heatmap flag so tap/gesture coords
|
|
333
348
|
// route to the analytics lane even when no recording is active.
|
|
334
349
|
{
|
|
335
|
-
|
|
336
|
-
sessionReplay: this.config.replay
|
|
337
|
-
} : {}),
|
|
350
|
+
sessionReplay: sessionReplay,
|
|
338
351
|
captureInteractionHeatmap: this.config.captureInteractionHeatmap === true
|
|
339
352
|
});
|
|
340
353
|
|
|
@@ -364,6 +377,19 @@ class SDKBootstrapper {
|
|
|
364
377
|
});
|
|
365
378
|
sessionManager.setBackendTransport(backendAdapter);
|
|
366
379
|
|
|
380
|
+
// Re-drain recovered crashes now that a backend transport exists.
|
|
381
|
+
//
|
|
382
|
+
// drainNativeCrash already ran inside initializeAll — BEFORE this line — so a
|
|
383
|
+
// crash recovered from the previous run was reported into a NULL transport, the
|
|
384
|
+
// backend sink no-op'd, and the record was KEPT on disk. Next launch loses the
|
|
385
|
+
// identical race, so without this a recovered crash (JS or native) never reaches
|
|
386
|
+
// the dashboard. The record is durable (the persist fix), so re-draining here
|
|
387
|
+
// delivers it THIS launch; the adapter buffers the error until the session row
|
|
388
|
+
// exists, so it lands even though startSession may not have completed yet. A
|
|
389
|
+
// no-op when nothing is pending. Fire-and-forget — crash delivery must never
|
|
390
|
+
// block or fail session setup.
|
|
391
|
+
Promise.resolve().then(() => _interopRequireWildcard(require('../features/crash/nativeCrashBridge'))).then(m => m.drainNativeCrash()).catch(() => {});
|
|
392
|
+
|
|
367
393
|
// Opt-in console → Logs lane. Armed here (not only in the desktop-debug
|
|
368
394
|
// replay orchestrator) so a stock SaaS app can capture console.* without
|
|
369
395
|
// pulling in the devTools bundle. Gated by clientKey (the backend transport
|
|
@@ -245,6 +245,35 @@ const SHAPE = {
|
|
|
245
245
|
})
|
|
246
246
|
}
|
|
247
247
|
},
|
|
248
|
+
// SB-10: the public, documented top-level privacy config. Previously only the
|
|
249
|
+
// nested replay privacy took effect; this is validated here and mapped onto the
|
|
250
|
+
// effective replay privacy policy in the bootstrapper so it actually masks.
|
|
251
|
+
privacy: {
|
|
252
|
+
kind: 'obj',
|
|
253
|
+
opt: true,
|
|
254
|
+
shape: {
|
|
255
|
+
maskTextInputs: {
|
|
256
|
+
kind: 'bool',
|
|
257
|
+
opt: true
|
|
258
|
+
},
|
|
259
|
+
maskImages: {
|
|
260
|
+
kind: 'bool',
|
|
261
|
+
opt: true
|
|
262
|
+
},
|
|
263
|
+
redactAuth: {
|
|
264
|
+
kind: 'bool',
|
|
265
|
+
opt: true
|
|
266
|
+
},
|
|
267
|
+
redactCookies: {
|
|
268
|
+
kind: 'bool',
|
|
269
|
+
opt: true
|
|
270
|
+
},
|
|
271
|
+
redactBodies: {
|
|
272
|
+
kind: 'bool',
|
|
273
|
+
opt: true
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
},
|
|
248
277
|
captureInteractionHeatmap: bool(true),
|
|
249
278
|
// Opt-in: intercept console.* and ship the lines to the Diagnose → Logs lane in SaaS
|
|
250
279
|
// mode. OFF by default — console output can carry PII/secrets and adds ingest volume,
|
|
@@ -9,5 +9,5 @@ exports.SDK_VERSION = void 0;
|
|
|
9
9
|
* can attribute telemetry to the SDK build that produced it.
|
|
10
10
|
* Keep in sync with package.json "version".
|
|
11
11
|
*/
|
|
12
|
-
const SDK_VERSION = exports.SDK_VERSION = '1.10.
|
|
12
|
+
const SDK_VERSION = exports.SDK_VERSION = '1.10.5';
|
|
13
13
|
//# sourceMappingURL=version.js.map
|
|
@@ -21,29 +21,80 @@ exports.scanObjectForPII = scanObjectForPII;
|
|
|
21
21
|
|
|
22
22
|
const REDACTED = '[REDACTED]';
|
|
23
23
|
|
|
24
|
+
// ─── Safety limits (SB-25 / SB-27) ───────────────────────────────────────────
|
|
25
|
+
// The PII scanner runs synchronously on the JS thread inside the app's own
|
|
26
|
+
// fetch()/XHR call. Left unbounded it is both a ReDoS vector (a large body of
|
|
27
|
+
// alphanumeric text can make regex matching cost seconds — an Android ANR) and
|
|
28
|
+
// a payload-amplification / exfiltration channel (one warning object per match).
|
|
29
|
+
// These bounds keep every scan linear and its output small.
|
|
30
|
+
|
|
31
|
+
/** Never scan more than this many characters — truncate before matching. */
|
|
32
|
+
const MAX_SCAN_INPUT_CHARS = 16 * 1024;
|
|
33
|
+
/** Abandon a scan once it has spent this long on the JS thread. */
|
|
34
|
+
const SCAN_TIME_BUDGET_MS = 10;
|
|
35
|
+
/** Never emit more than this many PII warnings for a single event. */
|
|
36
|
+
const MAX_PII_WARNINGS = 20;
|
|
37
|
+
/** Never pattern-scrub a string value longer than this (bounded work). */
|
|
38
|
+
const MAX_STRING_SCRUB_CHARS = 64 * 1024;
|
|
39
|
+
|
|
24
40
|
/** Headers that must always be redacted (case-insensitive) */
|
|
25
41
|
const SENSITIVE_HEADERS = new Set(['authorization', 'cookie', 'set-cookie', 'x-api-key', 'x-auth-token', 'proxy-authorization']);
|
|
26
42
|
|
|
27
|
-
/**
|
|
43
|
+
/**
|
|
44
|
+
* PII detection patterns.
|
|
45
|
+
*
|
|
46
|
+
* SB-25: patterns must be free of catastrophic backtracking. The email pattern
|
|
47
|
+
* uses non-overlapping character classes with bounded quantifiers so it cannot
|
|
48
|
+
* backtrack quadratically on adversarial input like `'a'.repeat(N) + '@' + …`.
|
|
49
|
+
* All quantifiers here are bounded; combined with the input cap above this keeps
|
|
50
|
+
* matching linear in input size.
|
|
51
|
+
*/
|
|
28
52
|
const PII_PATTERNS = [{
|
|
29
53
|
name: 'email',
|
|
30
|
-
pattern: /[
|
|
54
|
+
pattern: /[A-Za-z0-9._%+-]{1,64}@[A-Za-z0-9-]{1,63}(?:\.[A-Za-z0-9-]{1,63}){0,8}\.[A-Za-z]{2,24}/g
|
|
31
55
|
}, {
|
|
32
56
|
name: 'phone',
|
|
33
|
-
pattern:
|
|
57
|
+
pattern: /\+?\d{1,3}[-.\s]?\(?\d{2,4}\)?[-.\s]?\d{3,4}[-.\s]?\d{3,4}/g
|
|
34
58
|
}, {
|
|
35
59
|
name: 'ssn',
|
|
36
60
|
pattern: /\b\d{3}-\d{2}-\d{4}\b/g
|
|
37
61
|
}, {
|
|
38
62
|
name: 'credit_card',
|
|
39
63
|
pattern: /\b\d{4}[-\s]?\d{4}[-\s]?\d{4}[-\s]?\d{4}\b/g
|
|
64
|
+
}, {
|
|
65
|
+
name: 'iban',
|
|
66
|
+
pattern: /\b[A-Z]{2}\d{2}[A-Z0-9]{10,30}\b/g
|
|
67
|
+
}, {
|
|
68
|
+
name: 'jwt',
|
|
69
|
+
pattern: /\beyJ[A-Za-z0-9_-]{5,}\.[A-Za-z0-9_-]{5,}\.[A-Za-z0-9_-]{5,}\b/g
|
|
40
70
|
}, {
|
|
41
71
|
name: 'ip_address',
|
|
42
72
|
pattern: /\b(?:\d{1,3}\.){3}\d{1,3}\b/g
|
|
43
73
|
}];
|
|
44
74
|
|
|
75
|
+
/**
|
|
76
|
+
* Value patterns used to scrub secrets out of raw string bodies (SB-02).
|
|
77
|
+
* These are applied to string values (including parsed-out JSON string leaves
|
|
78
|
+
* and non-JSON bodies) where a denylisted key name is not available. All are
|
|
79
|
+
* bounded / anchored to avoid backtracking.
|
|
80
|
+
*/
|
|
81
|
+
const VALUE_SCRUB_PATTERNS = [{
|
|
82
|
+
name: 'jwt',
|
|
83
|
+
pattern: /eyJ[A-Za-z0-9_-]{5,}\.[A-Za-z0-9_-]{5,}\.[A-Za-z0-9_-]{5,}/g
|
|
84
|
+
}, {
|
|
85
|
+
name: 'email',
|
|
86
|
+
pattern: /[A-Za-z0-9._%+-]{1,64}@[A-Za-z0-9-]{1,63}(?:\.[A-Za-z0-9-]{1,63}){0,8}\.[A-Za-z]{2,24}/g
|
|
87
|
+
}, {
|
|
88
|
+
name: 'iban',
|
|
89
|
+
pattern: /\b[A-Z]{2}\d{2}[A-Z0-9]{10,30}\b/g
|
|
90
|
+
}, {
|
|
91
|
+
name: 'credit_card',
|
|
92
|
+
pattern: /\b\d{4}[-\s]?\d{4}[-\s]?\d{4}[-\s]?\d{2,7}\b/g,
|
|
93
|
+
luhn: true
|
|
94
|
+
}];
|
|
95
|
+
|
|
45
96
|
/** Keys in request/response bodies that likely contain sensitive data */
|
|
46
|
-
const SENSITIVE_BODY_KEYS = new Set(['password', 'passwd', 'secret', 'token', 'access_token', 'refresh_token', 'api_key', 'apiKey', 'private_key', 'privateKey', 'credit_card', 'creditCard', '
|
|
97
|
+
const SENSITIVE_BODY_KEYS = new Set(['password', 'passwd', 'secret', 'token', 'access_token', 'refresh_token', 'id_token', 'api_key', 'apiKey', 'private_key', 'privateKey', 'credit_card', 'creditCard', 'ccnumber', 'cardnumber', 'card_number', 'pan', 'cvv', 'cvc', 'ssn', 'social_security', 'nationalid', 'national_id', 'iban', 'otp', 'pin', 'totp', 'mfa', 'mnemonic', 'seed']);
|
|
47
98
|
|
|
48
99
|
// ─── Header Redaction ───────────────────────────────────────────────────────
|
|
49
100
|
|
|
@@ -70,9 +121,68 @@ function redactHeaders(headers) {
|
|
|
70
121
|
|
|
71
122
|
// ─── Body Redaction ─────────────────────────────────────────────────────────
|
|
72
123
|
|
|
124
|
+
/** Normalize a key for denylist comparison: lowercase, strip separators. */
|
|
125
|
+
function _normalizeKey(key) {
|
|
126
|
+
return key.toLowerCase().replace(/[_\-\s]/g, '');
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/** Normalized denylist so `access_token`, `accessToken` and `Access-Token` all match. */
|
|
130
|
+
const NORMALIZED_SENSITIVE_KEYS = new Set(Array.from(SENSITIVE_BODY_KEYS, _normalizeKey));
|
|
131
|
+
function _isSensitiveKey(key) {
|
|
132
|
+
return NORMALIZED_SENSITIVE_KEYS.has(_normalizeKey(key));
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/** Passes the Luhn checksum — used to avoid over-redacting random 16-digit ids. */
|
|
136
|
+
function _luhnValid(digits) {
|
|
137
|
+
const s = digits.replace(/[^\d]/g, '');
|
|
138
|
+
if (s.length < 12 || s.length > 19) return false;
|
|
139
|
+
let sum = 0;
|
|
140
|
+
let alt = false;
|
|
141
|
+
for (let i = s.length - 1; i >= 0; i--) {
|
|
142
|
+
let d = s.charCodeAt(i) - 48;
|
|
143
|
+
if (alt) {
|
|
144
|
+
d *= 2;
|
|
145
|
+
if (d > 9) d -= 9;
|
|
146
|
+
}
|
|
147
|
+
sum += d;
|
|
148
|
+
alt = !alt;
|
|
149
|
+
}
|
|
150
|
+
return sum % 10 === 0;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* Scrub structured secrets (JWT, email, IBAN, Luhn-valid card) out of a raw
|
|
155
|
+
* string value where no denylisted key name is available (SB-02). Bounded work:
|
|
156
|
+
* the string is capped and every pattern is anchored/bounded.
|
|
157
|
+
*/
|
|
158
|
+
function _scrubSecretsInString(value) {
|
|
159
|
+
if (value.length > MAX_STRING_SCRUB_CHARS) {
|
|
160
|
+
value = value.slice(0, MAX_STRING_SCRUB_CHARS);
|
|
161
|
+
}
|
|
162
|
+
let out = value;
|
|
163
|
+
try {
|
|
164
|
+
for (const {
|
|
165
|
+
pattern,
|
|
166
|
+
luhn
|
|
167
|
+
} of VALUE_SCRUB_PATTERNS) {
|
|
168
|
+
pattern.lastIndex = 0;
|
|
169
|
+
out = out.replace(pattern, m => luhn && !_luhnValid(m) ? m : REDACTED);
|
|
170
|
+
}
|
|
171
|
+
} catch {
|
|
172
|
+
// Never throw — return whatever scrubbing produced so far.
|
|
173
|
+
}
|
|
174
|
+
return out;
|
|
175
|
+
}
|
|
176
|
+
|
|
73
177
|
/**
|
|
74
178
|
* Deep-redact sensitive keys in a body object. Returns a new object.
|
|
75
179
|
* Handles nested objects and arrays. Never throws.
|
|
180
|
+
*
|
|
181
|
+
* SB-02: string bodies (what JSON.stringify produces — i.e. essentially every
|
|
182
|
+
* React Native network body) are no longer passed through untouched. If a string
|
|
183
|
+
* parses as JSON it is deep-redacted and re-serialized; otherwise structured
|
|
184
|
+
* secrets in the string are scrubbed. This closes the "6 of 9 seeded secrets
|
|
185
|
+
* survived" leak while leaving non-sensitive metadata intact.
|
|
76
186
|
*/
|
|
77
187
|
function redactBody(body, maxDepth = 10) {
|
|
78
188
|
try {
|
|
@@ -85,9 +195,7 @@ function _redactValue(value, depth, maxDepth) {
|
|
|
85
195
|
if (depth > maxDepth) return '[MAX_DEPTH]';
|
|
86
196
|
if (value === null || value === undefined) return value;
|
|
87
197
|
if (typeof value === 'string') {
|
|
88
|
-
|
|
89
|
-
// PII scanning is a separate concern
|
|
90
|
-
return value;
|
|
198
|
+
return _redactString(value, depth, maxDepth);
|
|
91
199
|
}
|
|
92
200
|
if (Array.isArray(value)) {
|
|
93
201
|
return value.map(item => _redactValue(item, depth + 1, maxDepth));
|
|
@@ -95,7 +203,7 @@ function _redactValue(value, depth, maxDepth) {
|
|
|
95
203
|
if (typeof value === 'object') {
|
|
96
204
|
const result = {};
|
|
97
205
|
for (const [key, val] of Object.entries(value)) {
|
|
98
|
-
if (
|
|
206
|
+
if (_isSensitiveKey(key)) {
|
|
99
207
|
result[key] = REDACTED;
|
|
100
208
|
} else {
|
|
101
209
|
result[key] = _redactValue(val, depth + 1, maxDepth);
|
|
@@ -106,66 +214,145 @@ function _redactValue(value, depth, maxDepth) {
|
|
|
106
214
|
return value;
|
|
107
215
|
}
|
|
108
216
|
|
|
217
|
+
/**
|
|
218
|
+
* Redact a string value. If it looks like a JSON object/array, parse it, redact
|
|
219
|
+
* by key, and re-serialize so a serialized body such as
|
|
220
|
+
* `{"password":"...","otp":"..."}` is scrubbed. Otherwise scrub structured
|
|
221
|
+
* secrets out of the raw text.
|
|
222
|
+
*/
|
|
223
|
+
function _redactString(value, depth, maxDepth) {
|
|
224
|
+
const trimmed = value.trimStart();
|
|
225
|
+
if (trimmed.startsWith('{') || trimmed.startsWith('[')) {
|
|
226
|
+
try {
|
|
227
|
+
const parsed = JSON.parse(value);
|
|
228
|
+
if (parsed !== null && typeof parsed === 'object') {
|
|
229
|
+
const redacted = _redactValue(parsed, depth + 1, maxDepth);
|
|
230
|
+
return JSON.stringify(redacted);
|
|
231
|
+
}
|
|
232
|
+
} catch {
|
|
233
|
+
// Not valid JSON — fall through to pattern scrubbing.
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
return _scrubSecretsInString(value);
|
|
237
|
+
}
|
|
238
|
+
|
|
109
239
|
// ─── PII Scanning ───────────────────────────────────────────────────────────
|
|
110
240
|
|
|
111
241
|
/**
|
|
112
|
-
*
|
|
113
|
-
*
|
|
242
|
+
* Bounded scan context shared across one logical scan (SB-25 / SB-27). Enforces
|
|
243
|
+
* a wall-clock budget and a warning cap while accumulating per-type counts so the
|
|
244
|
+
* final output can report `{ email: 5000 }` instead of 5000 fragment objects.
|
|
114
245
|
*/
|
|
115
|
-
|
|
116
|
-
|
|
246
|
+
|
|
247
|
+
function _newScanContext() {
|
|
248
|
+
return {
|
|
249
|
+
warnings: [],
|
|
250
|
+
byType: {},
|
|
251
|
+
deadline: Date.now() + SCAN_TIME_BUDGET_MS,
|
|
252
|
+
truncated: false,
|
|
253
|
+
total: 0
|
|
254
|
+
};
|
|
255
|
+
}
|
|
256
|
+
function _pushWarning(ctx, type, rawMatch, location) {
|
|
257
|
+
ctx.total += 1;
|
|
258
|
+
ctx.byType[type] = (ctx.byType[type] ?? 0) + 1;
|
|
259
|
+
if (ctx.warnings.length < MAX_PII_WARNINGS) {
|
|
260
|
+
ctx.warnings.push({
|
|
261
|
+
type,
|
|
262
|
+
match: _maskPII(rawMatch),
|
|
263
|
+
location
|
|
264
|
+
});
|
|
265
|
+
} else {
|
|
266
|
+
ctx.truncated = true;
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
/**
|
|
271
|
+
* Finalize a scan: append a single summary entry carrying per-type counts when
|
|
272
|
+
* anything was dropped, so consumers see the full magnitude without the SDK
|
|
273
|
+
* shipping every matched fragment (SB-27).
|
|
274
|
+
*/
|
|
275
|
+
function _finalizeScan(ctx) {
|
|
276
|
+
if (ctx.truncated) {
|
|
277
|
+
ctx.warnings.push({
|
|
278
|
+
type: '_summary',
|
|
279
|
+
match: `truncated: ${ctx.total} matches`,
|
|
280
|
+
location: `counts:${JSON.stringify(ctx.byType)}`
|
|
281
|
+
});
|
|
282
|
+
}
|
|
283
|
+
return ctx.warnings;
|
|
284
|
+
}
|
|
285
|
+
function _scanTextInto(text, location, ctx) {
|
|
286
|
+
// SB-25: cap the input before any regex runs, so matching cost is bounded
|
|
287
|
+
// regardless of the (attacker-controlled) body size.
|
|
288
|
+
const input = text.length > MAX_SCAN_INPUT_CHARS ? text.slice(0, MAX_SCAN_INPUT_CHARS) : text;
|
|
117
289
|
try {
|
|
118
290
|
for (const {
|
|
119
291
|
name,
|
|
120
292
|
pattern
|
|
121
293
|
} of PII_PATTERNS) {
|
|
122
|
-
// Reset regex state
|
|
123
294
|
pattern.lastIndex = 0;
|
|
124
|
-
let match = pattern.exec(
|
|
295
|
+
let match = pattern.exec(input);
|
|
125
296
|
while (match) {
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
297
|
+
_pushWarning(ctx, name, match[0], location);
|
|
298
|
+
// SB-25: abandon the scan if it has exceeded its time budget.
|
|
299
|
+
if (Date.now() > ctx.deadline) {
|
|
300
|
+
ctx.truncated = true;
|
|
301
|
+
return;
|
|
302
|
+
}
|
|
303
|
+
if (pattern.lastIndex === match.index) pattern.lastIndex++; // guard zero-width
|
|
304
|
+
match = pattern.exec(input);
|
|
132
305
|
}
|
|
133
306
|
}
|
|
134
307
|
} catch {
|
|
135
|
-
// Never throw —
|
|
308
|
+
// Never throw — keep whatever was found so far.
|
|
136
309
|
}
|
|
137
|
-
return warnings;
|
|
138
310
|
}
|
|
139
311
|
|
|
140
312
|
/**
|
|
141
|
-
* Scan
|
|
313
|
+
* Scan a string for PII patterns. Returns a bounded list of warnings.
|
|
314
|
+
* Never throws.
|
|
315
|
+
*/
|
|
316
|
+
function scanForPII(text, location = 'unknown') {
|
|
317
|
+
const ctx = _newScanContext();
|
|
318
|
+
_scanTextInto(text, location, ctx);
|
|
319
|
+
return _finalizeScan(ctx);
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
/**
|
|
323
|
+
* Scan an object deeply for PII. Returns a bounded list of warnings.
|
|
142
324
|
* Never throws.
|
|
143
325
|
*/
|
|
144
326
|
function scanObjectForPII(obj, basePath = '', maxDepth = 10) {
|
|
145
|
-
const
|
|
327
|
+
const ctx = _newScanContext();
|
|
146
328
|
try {
|
|
147
|
-
|
|
329
|
+
_scanObjectInto(obj, basePath, 0, maxDepth, ctx);
|
|
148
330
|
} catch {
|
|
149
331
|
// Never throw
|
|
150
332
|
}
|
|
151
|
-
return
|
|
333
|
+
return _finalizeScan(ctx);
|
|
152
334
|
}
|
|
153
|
-
function
|
|
335
|
+
function _scanObjectInto(value, path, depth, maxDepth, ctx) {
|
|
154
336
|
if (depth > maxDepth || value === null || value === undefined) return;
|
|
337
|
+
if (ctx.truncated || Date.now() > ctx.deadline) {
|
|
338
|
+
ctx.truncated = true;
|
|
339
|
+
return;
|
|
340
|
+
}
|
|
155
341
|
if (typeof value === 'string') {
|
|
156
|
-
|
|
157
|
-
warnings.push(...found);
|
|
342
|
+
_scanTextInto(value, path, ctx);
|
|
158
343
|
return;
|
|
159
344
|
}
|
|
160
345
|
if (Array.isArray(value)) {
|
|
161
|
-
value.
|
|
162
|
-
|
|
163
|
-
|
|
346
|
+
for (let i = 0; i < value.length; i++) {
|
|
347
|
+
if (ctx.truncated) return;
|
|
348
|
+
_scanObjectInto(value[i], `${path}[${i}]`, depth + 1, maxDepth, ctx);
|
|
349
|
+
}
|
|
164
350
|
return;
|
|
165
351
|
}
|
|
166
352
|
if (typeof value === 'object') {
|
|
167
353
|
for (const [key, val] of Object.entries(value)) {
|
|
168
|
-
|
|
354
|
+
if (ctx.truncated) return;
|
|
355
|
+
_scanObjectInto(val, path ? `${path}.${key}` : key, depth + 1, maxDepth, ctx);
|
|
169
356
|
}
|
|
170
357
|
}
|
|
171
358
|
}
|
|
@@ -207,20 +394,19 @@ function redactUrl(url) {
|
|
|
207
394
|
* Apply full redaction pipeline to a network event.
|
|
208
395
|
*/
|
|
209
396
|
function redactNetworkEvent(event) {
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
397
|
+
// One bounded context for the whole event so the aggregate warning count and
|
|
398
|
+
// scan time stay capped across url + request + response (SB-25 / SB-27).
|
|
399
|
+
const ctx = _newScanContext();
|
|
213
400
|
if (event.url) {
|
|
214
|
-
|
|
401
|
+
_scanTextInto(event.url, 'url', ctx);
|
|
215
402
|
}
|
|
216
|
-
|
|
217
|
-
// Scan bodies for PII
|
|
218
403
|
if (event.requestBody) {
|
|
219
|
-
|
|
404
|
+
_scanObjectInto(event.requestBody, 'requestBody', 0, 10, ctx);
|
|
220
405
|
}
|
|
221
406
|
if (event.responseBody) {
|
|
222
|
-
|
|
407
|
+
_scanObjectInto(event.responseBody, 'responseBody', 0, 10, ctx);
|
|
223
408
|
}
|
|
409
|
+
const piiWarnings = _finalizeScan(ctx);
|
|
224
410
|
return {
|
|
225
411
|
url: event.url ? redactUrl(event.url) : '',
|
|
226
412
|
method: event.method ?? 'GET',
|
|
@@ -583,7 +583,15 @@ function ScaleBunDebugRoot({
|
|
|
583
583
|
});
|
|
584
584
|
}
|
|
585
585
|
} catch {/* no-throw */}
|
|
586
|
-
|
|
586
|
+
// 600ms, was 200ms. The race this defer exists for happens on the FIRST tap of a
|
|
587
|
+
// mount: native isn't confirmed yet, JS emitted at 200ms, then the first native
|
|
588
|
+
// event crossed the bridge at ~300-400ms — recording the same tap TWICE, with the
|
|
589
|
+
// JS copy missing normalizedX/Y whenever the async root-view measure hadn't
|
|
590
|
+
// resolved (an interaction the heatmap cannot place). QA hit exactly this pair.
|
|
591
|
+
// The wider defer lets the first native event cancel the JS emission instead; on
|
|
592
|
+
// devices with no native tracker at all it merely delays a background emission,
|
|
593
|
+
// which nothing user-visible waits on.
|
|
594
|
+
}, 600);
|
|
587
595
|
}
|
|
588
596
|
touchStartRef.current = null;
|
|
589
597
|
} catch {/* no-throw */}
|
|
@@ -41,12 +41,22 @@ class AutoScreenDetector {
|
|
|
41
41
|
_manualScreen = null;
|
|
42
42
|
_manualScreenTs = 0;
|
|
43
43
|
_autoScreen = null;
|
|
44
|
+
/** `name#key` of the last auto-detected screen VISIT — see _extractActiveVisit. */
|
|
45
|
+
_autoVisitSig = null;
|
|
44
46
|
_navigationRef = null;
|
|
45
47
|
_navListenerRemover = null;
|
|
46
48
|
_navListenerWired = false;
|
|
47
49
|
_heuristicTimer = null;
|
|
48
50
|
_started = false;
|
|
49
51
|
_lastEmittedScreen = null;
|
|
52
|
+
_lastEmittedTs = 0;
|
|
53
|
+
/**
|
|
54
|
+
* Cross-source emit dedup window — see _emitScreenChange. Long enough to absorb the manual
|
|
55
|
+
* beacon and the navRef listener both reporting the SAME transition (they land within the
|
|
56
|
+
* 30ms nav debounce plus a render), short enough that a genuine re-visit of the same route
|
|
57
|
+
* a moment later is a new screen view rather than silence.
|
|
58
|
+
*/
|
|
59
|
+
static EMIT_DEDUP_WINDOW_MS = 800;
|
|
50
60
|
_navDebounceTimer = null;
|
|
51
61
|
/** Whether the React Navigation exports were actually replaced — see _autoHookReactNavigation. */
|
|
52
62
|
_autoHookInstalled = false;
|
|
@@ -105,6 +115,7 @@ class AutoScreenDetector {
|
|
|
105
115
|
if (this.isManualScreenActive()) return;
|
|
106
116
|
if (name !== this._autoScreen) {
|
|
107
117
|
this._autoScreen = name;
|
|
118
|
+
this._autoVisitSig = name; // native lifecycle carries no route key — name-only visit
|
|
108
119
|
this._emitScreenChange(name, 'heuristic');
|
|
109
120
|
}
|
|
110
121
|
} catch {/* no-throw */}
|
|
@@ -167,10 +178,13 @@ class AutoScreenDetector {
|
|
|
167
178
|
try {
|
|
168
179
|
const state = typeof container.getRootState === 'function' ? container.getRootState() : null;
|
|
169
180
|
if (state) {
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
181
|
+
// Compared by name#key so a re-VISIT of the same route
|
|
182
|
+
// (new key) is recorded — name-only comparison swallowed it.
|
|
183
|
+
const visit = this._extractActiveVisit(state);
|
|
184
|
+
if (visit && this._visitSig(visit) !== this._autoVisitSig) {
|
|
185
|
+
this._autoScreen = visit.name;
|
|
186
|
+
this._autoVisitSig = this._visitSig(visit);
|
|
187
|
+
this._emitScreenChange(visit.name, 'navRef');
|
|
174
188
|
}
|
|
175
189
|
}
|
|
176
190
|
} catch {/* no-throw */}
|
|
@@ -184,10 +198,11 @@ class AutoScreenDetector {
|
|
|
184
198
|
if (typeof container.getRootState === 'function') {
|
|
185
199
|
const state = container.getRootState();
|
|
186
200
|
if (state) {
|
|
187
|
-
const
|
|
188
|
-
if (
|
|
189
|
-
this._autoScreen =
|
|
190
|
-
this.
|
|
201
|
+
const visit = this._extractActiveVisit(state);
|
|
202
|
+
if (visit) {
|
|
203
|
+
this._autoScreen = visit.name;
|
|
204
|
+
this._autoVisitSig = this._visitSig(visit);
|
|
205
|
+
this._emitScreenChange(visit.name, 'navRef');
|
|
191
206
|
}
|
|
192
207
|
}
|
|
193
208
|
}
|
|
@@ -223,10 +238,14 @@ class AutoScreenDetector {
|
|
|
223
238
|
if (navContainer) {
|
|
224
239
|
const state = typeof navContainer.getRootState === 'function' ? navContainer.getRootState() : null;
|
|
225
240
|
if (state) {
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
241
|
+
// name#key comparison: a re-opened route (same name, fresh key) seen
|
|
242
|
+
// across poll ticks is a new visit even when every intermediate screen
|
|
243
|
+
// fell between polls — the case a name-only diff could never see.
|
|
244
|
+
const visit = this._extractActiveVisit(state);
|
|
245
|
+
if (visit && this._visitSig(visit) !== this._autoVisitSig) {
|
|
246
|
+
this._autoScreen = visit.name;
|
|
247
|
+
this._autoVisitSig = this._visitSig(visit);
|
|
248
|
+
this._emitScreenChange(visit.name, 'heuristic');
|
|
230
249
|
}
|
|
231
250
|
}
|
|
232
251
|
}
|
|
@@ -266,6 +285,22 @@ class AutoScreenDetector {
|
|
|
266
285
|
* Handles nested navigators by walking to the deepest active route.
|
|
267
286
|
*/
|
|
268
287
|
_extractActiveRoute(state) {
|
|
288
|
+
return this._extractActiveVisit(state)?.name ?? null;
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
/**
|
|
292
|
+
* Extract the active route's name AND its React Navigation route `key`.
|
|
293
|
+
*
|
|
294
|
+
* The key is what makes re-VISITS detectable. Comparing names alone collapses two
|
|
295
|
+
* different visits to the same route into one screen view: leave Details, open Details
|
|
296
|
+
* again, and `name === _autoScreen` swallowed the second visit entirely (QA: "opened the
|
|
297
|
+
* same route again and no screen event was recorded"). React Navigation mints a fresh
|
|
298
|
+
* `key` for every pushed route instance, so a re-push of the same name is a NEW key —
|
|
299
|
+
* name+key comparison records each visit while a mere re-render of the same instance
|
|
300
|
+
* (same key) still emits nothing. States without keys degrade to name-only, i.e. the
|
|
301
|
+
* old behaviour, never worse.
|
|
302
|
+
*/
|
|
303
|
+
_extractActiveVisit(state) {
|
|
269
304
|
try {
|
|
270
305
|
if (!state?.routes || typeof state.index !== 'number') return null;
|
|
271
306
|
const activeRoute = state.routes[state.index];
|
|
@@ -273,15 +308,25 @@ class AutoScreenDetector {
|
|
|
273
308
|
|
|
274
309
|
// If this route has nested state, recurse to find the deepest active route
|
|
275
310
|
if (activeRoute.state?.routes && typeof activeRoute.state.index === 'number') {
|
|
276
|
-
const nested = this.
|
|
311
|
+
const nested = this._extractActiveVisit(activeRoute.state);
|
|
277
312
|
if (nested) return nested;
|
|
278
313
|
}
|
|
279
|
-
|
|
314
|
+
if (!activeRoute.name) return null;
|
|
315
|
+
const rawKey = activeRoute.key;
|
|
316
|
+
return {
|
|
317
|
+
name: activeRoute.name,
|
|
318
|
+
key: typeof rawKey === 'string' ? rawKey : null
|
|
319
|
+
};
|
|
280
320
|
} catch {
|
|
281
321
|
return null;
|
|
282
322
|
}
|
|
283
323
|
}
|
|
284
324
|
|
|
325
|
+
/** `name#key` signature of one screen VISIT — what the auto paths dedup on. */
|
|
326
|
+
_visitSig(visit) {
|
|
327
|
+
return visit.key ? `${visit.name}#${visit.key}` : visit.name;
|
|
328
|
+
}
|
|
329
|
+
|
|
285
330
|
// ─── Lifecycle ──────────────────────────────────────────────────────
|
|
286
331
|
|
|
287
332
|
/** Start auto-detection (idempotent) */
|
|
@@ -471,9 +516,16 @@ class AutoScreenDetector {
|
|
|
471
516
|
|
|
472
517
|
_emitScreenChange(name, source) {
|
|
473
518
|
try {
|
|
474
|
-
//
|
|
475
|
-
|
|
519
|
+
// Cross-source dedup, TIME-BOUNDED. This used to drop any name equal to the last
|
|
520
|
+
// emitted, forever — so re-entering a route whose departure was never observed
|
|
521
|
+
// (heuristic poll missed the intermediate screen, or the user re-pushed the same
|
|
522
|
+
// route) was swallowed on EVERY path, manual beacons included (QA: "opened the
|
|
523
|
+
// same route again, no screen event"). Same name within the window is still one
|
|
524
|
+
// transition double-reported by two sources; same name after it is a new visit.
|
|
525
|
+
const emitNow = Date.now();
|
|
526
|
+
if (name === this._lastEmittedScreen && emitNow - this._lastEmittedTs < AutoScreenDetector.EMIT_DEDUP_WINDOW_MS) return;
|
|
476
527
|
this._lastEmittedScreen = name;
|
|
528
|
+
this._lastEmittedTs = emitNow;
|
|
477
529
|
for (const cb of this._listeners) {
|
|
478
530
|
try {
|
|
479
531
|
cb(name, source);
|