@scalebun/react-native 1.10.4 → 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 +407 -57
- package/dist/scalebun.slim.js +404 -62
- 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/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 +17 -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 +17 -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
package/src/debug/redaction.ts
CHANGED
|
@@ -10,6 +10,22 @@
|
|
|
10
10
|
|
|
11
11
|
const REDACTED = '[REDACTED]';
|
|
12
12
|
|
|
13
|
+
// ─── Safety limits (SB-25 / SB-27) ───────────────────────────────────────────
|
|
14
|
+
// The PII scanner runs synchronously on the JS thread inside the app's own
|
|
15
|
+
// fetch()/XHR call. Left unbounded it is both a ReDoS vector (a large body of
|
|
16
|
+
// alphanumeric text can make regex matching cost seconds — an Android ANR) and
|
|
17
|
+
// a payload-amplification / exfiltration channel (one warning object per match).
|
|
18
|
+
// These bounds keep every scan linear and its output small.
|
|
19
|
+
|
|
20
|
+
/** Never scan more than this many characters — truncate before matching. */
|
|
21
|
+
const MAX_SCAN_INPUT_CHARS = 16 * 1024;
|
|
22
|
+
/** Abandon a scan once it has spent this long on the JS thread. */
|
|
23
|
+
const SCAN_TIME_BUDGET_MS = 10;
|
|
24
|
+
/** Never emit more than this many PII warnings for a single event. */
|
|
25
|
+
const MAX_PII_WARNINGS = 20;
|
|
26
|
+
/** Never pattern-scrub a string value longer than this (bounded work). */
|
|
27
|
+
const MAX_STRING_SCRUB_CHARS = 64 * 1024;
|
|
28
|
+
|
|
13
29
|
/** Headers that must always be redacted (case-insensitive) */
|
|
14
30
|
const SENSITIVE_HEADERS = new Set([
|
|
15
31
|
'authorization',
|
|
@@ -20,15 +36,38 @@ const SENSITIVE_HEADERS = new Set([
|
|
|
20
36
|
'proxy-authorization',
|
|
21
37
|
]);
|
|
22
38
|
|
|
23
|
-
/**
|
|
39
|
+
/**
|
|
40
|
+
* PII detection patterns.
|
|
41
|
+
*
|
|
42
|
+
* SB-25: patterns must be free of catastrophic backtracking. The email pattern
|
|
43
|
+
* uses non-overlapping character classes with bounded quantifiers so it cannot
|
|
44
|
+
* backtrack quadratically on adversarial input like `'a'.repeat(N) + '@' + …`.
|
|
45
|
+
* All quantifiers here are bounded; combined with the input cap above this keeps
|
|
46
|
+
* matching linear in input size.
|
|
47
|
+
*/
|
|
24
48
|
const PII_PATTERNS: Array<{ name: string; pattern: RegExp }> = [
|
|
25
|
-
{ name: 'email', pattern: /[
|
|
26
|
-
{ name: 'phone', pattern:
|
|
49
|
+
{ name: 'email', 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 },
|
|
50
|
+
{ name: 'phone', pattern: /\+?\d{1,3}[-.\s]?\(?\d{2,4}\)?[-.\s]?\d{3,4}[-.\s]?\d{3,4}/g },
|
|
27
51
|
{ name: 'ssn', pattern: /\b\d{3}-\d{2}-\d{4}\b/g },
|
|
28
52
|
{ name: 'credit_card', pattern: /\b\d{4}[-\s]?\d{4}[-\s]?\d{4}[-\s]?\d{4}\b/g },
|
|
53
|
+
{ name: 'iban', pattern: /\b[A-Z]{2}\d{2}[A-Z0-9]{10,30}\b/g },
|
|
54
|
+
{ name: 'jwt', pattern: /\beyJ[A-Za-z0-9_-]{5,}\.[A-Za-z0-9_-]{5,}\.[A-Za-z0-9_-]{5,}\b/g },
|
|
29
55
|
{ name: 'ip_address', pattern: /\b(?:\d{1,3}\.){3}\d{1,3}\b/g },
|
|
30
56
|
];
|
|
31
57
|
|
|
58
|
+
/**
|
|
59
|
+
* Value patterns used to scrub secrets out of raw string bodies (SB-02).
|
|
60
|
+
* These are applied to string values (including parsed-out JSON string leaves
|
|
61
|
+
* and non-JSON bodies) where a denylisted key name is not available. All are
|
|
62
|
+
* bounded / anchored to avoid backtracking.
|
|
63
|
+
*/
|
|
64
|
+
const VALUE_SCRUB_PATTERNS: Array<{ name: string; pattern: RegExp; luhn?: boolean }> = [
|
|
65
|
+
{ name: 'jwt', pattern: /eyJ[A-Za-z0-9_-]{5,}\.[A-Za-z0-9_-]{5,}\.[A-Za-z0-9_-]{5,}/g },
|
|
66
|
+
{ name: 'email', 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 },
|
|
67
|
+
{ name: 'iban', pattern: /\b[A-Z]{2}\d{2}[A-Z0-9]{10,30}\b/g },
|
|
68
|
+
{ name: 'credit_card', pattern: /\b\d{4}[-\s]?\d{4}[-\s]?\d{4}[-\s]?\d{2,7}\b/g, luhn: true },
|
|
69
|
+
];
|
|
70
|
+
|
|
32
71
|
/** Keys in request/response bodies that likely contain sensitive data */
|
|
33
72
|
const SENSITIVE_BODY_KEYS = new Set([
|
|
34
73
|
'password',
|
|
@@ -37,16 +76,30 @@ const SENSITIVE_BODY_KEYS = new Set([
|
|
|
37
76
|
'token',
|
|
38
77
|
'access_token',
|
|
39
78
|
'refresh_token',
|
|
79
|
+
'id_token',
|
|
40
80
|
'api_key',
|
|
41
81
|
'apiKey',
|
|
42
82
|
'private_key',
|
|
43
83
|
'privateKey',
|
|
44
84
|
'credit_card',
|
|
45
85
|
'creditCard',
|
|
46
|
-
'
|
|
86
|
+
'ccnumber',
|
|
87
|
+
'cardnumber',
|
|
88
|
+
'card_number',
|
|
89
|
+
'pan',
|
|
47
90
|
'cvv',
|
|
91
|
+
'cvc',
|
|
48
92
|
'ssn',
|
|
49
93
|
'social_security',
|
|
94
|
+
'nationalid',
|
|
95
|
+
'national_id',
|
|
96
|
+
'iban',
|
|
97
|
+
'otp',
|
|
98
|
+
'pin',
|
|
99
|
+
'totp',
|
|
100
|
+
'mfa',
|
|
101
|
+
'mnemonic',
|
|
102
|
+
'seed',
|
|
50
103
|
]);
|
|
51
104
|
|
|
52
105
|
// ─── Header Redaction ───────────────────────────────────────────────────────
|
|
@@ -76,9 +129,68 @@ export function redactHeaders(
|
|
|
76
129
|
|
|
77
130
|
// ─── Body Redaction ─────────────────────────────────────────────────────────
|
|
78
131
|
|
|
132
|
+
/** Normalize a key for denylist comparison: lowercase, strip separators. */
|
|
133
|
+
function _normalizeKey(key: string): string {
|
|
134
|
+
return key.toLowerCase().replace(/[_\-\s]/g, '');
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/** Normalized denylist so `access_token`, `accessToken` and `Access-Token` all match. */
|
|
138
|
+
const NORMALIZED_SENSITIVE_KEYS = new Set(
|
|
139
|
+
Array.from(SENSITIVE_BODY_KEYS, _normalizeKey),
|
|
140
|
+
);
|
|
141
|
+
|
|
142
|
+
function _isSensitiveKey(key: string): boolean {
|
|
143
|
+
return NORMALIZED_SENSITIVE_KEYS.has(_normalizeKey(key));
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/** Passes the Luhn checksum — used to avoid over-redacting random 16-digit ids. */
|
|
147
|
+
function _luhnValid(digits: string): boolean {
|
|
148
|
+
const s = digits.replace(/[^\d]/g, '');
|
|
149
|
+
if (s.length < 12 || s.length > 19) return false;
|
|
150
|
+
let sum = 0;
|
|
151
|
+
let alt = false;
|
|
152
|
+
for (let i = s.length - 1; i >= 0; i--) {
|
|
153
|
+
let d = s.charCodeAt(i) - 48;
|
|
154
|
+
if (alt) {
|
|
155
|
+
d *= 2;
|
|
156
|
+
if (d > 9) d -= 9;
|
|
157
|
+
}
|
|
158
|
+
sum += d;
|
|
159
|
+
alt = !alt;
|
|
160
|
+
}
|
|
161
|
+
return sum % 10 === 0;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
/**
|
|
165
|
+
* Scrub structured secrets (JWT, email, IBAN, Luhn-valid card) out of a raw
|
|
166
|
+
* string value where no denylisted key name is available (SB-02). Bounded work:
|
|
167
|
+
* the string is capped and every pattern is anchored/bounded.
|
|
168
|
+
*/
|
|
169
|
+
function _scrubSecretsInString(value: string): string {
|
|
170
|
+
if (value.length > MAX_STRING_SCRUB_CHARS) {
|
|
171
|
+
value = value.slice(0, MAX_STRING_SCRUB_CHARS);
|
|
172
|
+
}
|
|
173
|
+
let out = value;
|
|
174
|
+
try {
|
|
175
|
+
for (const { pattern, luhn } of VALUE_SCRUB_PATTERNS) {
|
|
176
|
+
pattern.lastIndex = 0;
|
|
177
|
+
out = out.replace(pattern, m => (luhn && !_luhnValid(m) ? m : REDACTED));
|
|
178
|
+
}
|
|
179
|
+
} catch {
|
|
180
|
+
// Never throw — return whatever scrubbing produced so far.
|
|
181
|
+
}
|
|
182
|
+
return out;
|
|
183
|
+
}
|
|
184
|
+
|
|
79
185
|
/**
|
|
80
186
|
* Deep-redact sensitive keys in a body object. Returns a new object.
|
|
81
187
|
* Handles nested objects and arrays. Never throws.
|
|
188
|
+
*
|
|
189
|
+
* SB-02: string bodies (what JSON.stringify produces — i.e. essentially every
|
|
190
|
+
* React Native network body) are no longer passed through untouched. If a string
|
|
191
|
+
* parses as JSON it is deep-redacted and re-serialized; otherwise structured
|
|
192
|
+
* secrets in the string are scrubbed. This closes the "6 of 9 seeded secrets
|
|
193
|
+
* survived" leak while leaving non-sensitive metadata intact.
|
|
82
194
|
*/
|
|
83
195
|
export function redactBody(body: unknown, maxDepth = 10): unknown {
|
|
84
196
|
try {
|
|
@@ -93,9 +205,7 @@ function _redactValue(value: unknown, depth: number, maxDepth: number): unknown
|
|
|
93
205
|
if (value === null || value === undefined) return value;
|
|
94
206
|
|
|
95
207
|
if (typeof value === 'string') {
|
|
96
|
-
|
|
97
|
-
// PII scanning is a separate concern
|
|
98
|
-
return value;
|
|
208
|
+
return _redactString(value, depth, maxDepth);
|
|
99
209
|
}
|
|
100
210
|
|
|
101
211
|
if (Array.isArray(value)) {
|
|
@@ -105,7 +215,7 @@ function _redactValue(value: unknown, depth: number, maxDepth: number): unknown
|
|
|
105
215
|
if (typeof value === 'object') {
|
|
106
216
|
const result: Record<string, unknown> = {};
|
|
107
217
|
for (const [key, val] of Object.entries(value as Record<string, unknown>)) {
|
|
108
|
-
if (
|
|
218
|
+
if (_isSensitiveKey(key)) {
|
|
109
219
|
result[key] = REDACTED;
|
|
110
220
|
} else {
|
|
111
221
|
result[key] = _redactValue(val, depth + 1, maxDepth);
|
|
@@ -117,6 +227,28 @@ function _redactValue(value: unknown, depth: number, maxDepth: number): unknown
|
|
|
117
227
|
return value;
|
|
118
228
|
}
|
|
119
229
|
|
|
230
|
+
/**
|
|
231
|
+
* Redact a string value. If it looks like a JSON object/array, parse it, redact
|
|
232
|
+
* by key, and re-serialize so a serialized body such as
|
|
233
|
+
* `{"password":"...","otp":"..."}` is scrubbed. Otherwise scrub structured
|
|
234
|
+
* secrets out of the raw text.
|
|
235
|
+
*/
|
|
236
|
+
function _redactString(value: string, depth: number, maxDepth: number): string {
|
|
237
|
+
const trimmed = value.trimStart();
|
|
238
|
+
if (trimmed.startsWith('{') || trimmed.startsWith('[')) {
|
|
239
|
+
try {
|
|
240
|
+
const parsed = JSON.parse(value);
|
|
241
|
+
if (parsed !== null && typeof parsed === 'object') {
|
|
242
|
+
const redacted = _redactValue(parsed, depth + 1, maxDepth);
|
|
243
|
+
return JSON.stringify(redacted);
|
|
244
|
+
}
|
|
245
|
+
} catch {
|
|
246
|
+
// Not valid JSON — fall through to pattern scrubbing.
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
return _scrubSecretsInString(value);
|
|
250
|
+
}
|
|
251
|
+
|
|
120
252
|
// ─── PII Scanning ───────────────────────────────────────────────────────────
|
|
121
253
|
|
|
122
254
|
export interface PIIWarning {
|
|
@@ -127,33 +259,90 @@ export interface PIIWarning {
|
|
|
127
259
|
}
|
|
128
260
|
|
|
129
261
|
/**
|
|
130
|
-
*
|
|
131
|
-
*
|
|
262
|
+
* Bounded scan context shared across one logical scan (SB-25 / SB-27). Enforces
|
|
263
|
+
* a wall-clock budget and a warning cap while accumulating per-type counts so the
|
|
264
|
+
* final output can report `{ email: 5000 }` instead of 5000 fragment objects.
|
|
132
265
|
*/
|
|
133
|
-
|
|
134
|
-
|
|
266
|
+
interface ScanContext {
|
|
267
|
+
warnings: PIIWarning[];
|
|
268
|
+
byType: Record<string, number>;
|
|
269
|
+
deadline: number;
|
|
270
|
+
truncated: boolean;
|
|
271
|
+
total: number;
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
function _newScanContext(): ScanContext {
|
|
275
|
+
return {
|
|
276
|
+
warnings: [],
|
|
277
|
+
byType: {},
|
|
278
|
+
deadline: Date.now() + SCAN_TIME_BUDGET_MS,
|
|
279
|
+
truncated: false,
|
|
280
|
+
total: 0,
|
|
281
|
+
};
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
function _pushWarning(ctx: ScanContext, type: string, rawMatch: string, location: string): void {
|
|
285
|
+
ctx.total += 1;
|
|
286
|
+
ctx.byType[type] = (ctx.byType[type] ?? 0) + 1;
|
|
287
|
+
if (ctx.warnings.length < MAX_PII_WARNINGS) {
|
|
288
|
+
ctx.warnings.push({ type, match: _maskPII(rawMatch), location });
|
|
289
|
+
} else {
|
|
290
|
+
ctx.truncated = true;
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
/**
|
|
295
|
+
* Finalize a scan: append a single summary entry carrying per-type counts when
|
|
296
|
+
* anything was dropped, so consumers see the full magnitude without the SDK
|
|
297
|
+
* shipping every matched fragment (SB-27).
|
|
298
|
+
*/
|
|
299
|
+
function _finalizeScan(ctx: ScanContext): PIIWarning[] {
|
|
300
|
+
if (ctx.truncated) {
|
|
301
|
+
ctx.warnings.push({
|
|
302
|
+
type: '_summary',
|
|
303
|
+
match: `truncated: ${ctx.total} matches`,
|
|
304
|
+
location: `counts:${JSON.stringify(ctx.byType)}`,
|
|
305
|
+
});
|
|
306
|
+
}
|
|
307
|
+
return ctx.warnings;
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
function _scanTextInto(text: string, location: string, ctx: ScanContext): void {
|
|
311
|
+
// SB-25: cap the input before any regex runs, so matching cost is bounded
|
|
312
|
+
// regardless of the (attacker-controlled) body size.
|
|
313
|
+
const input = text.length > MAX_SCAN_INPUT_CHARS ? text.slice(0, MAX_SCAN_INPUT_CHARS) : text;
|
|
135
314
|
try {
|
|
136
315
|
for (const { name, pattern } of PII_PATTERNS) {
|
|
137
|
-
// Reset regex state
|
|
138
316
|
pattern.lastIndex = 0;
|
|
139
|
-
let match = pattern.exec(
|
|
317
|
+
let match = pattern.exec(input);
|
|
140
318
|
while (match) {
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
319
|
+
_pushWarning(ctx, name, match[0], location);
|
|
320
|
+
// SB-25: abandon the scan if it has exceeded its time budget.
|
|
321
|
+
if (Date.now() > ctx.deadline) {
|
|
322
|
+
ctx.truncated = true;
|
|
323
|
+
return;
|
|
324
|
+
}
|
|
325
|
+
if (pattern.lastIndex === match.index) pattern.lastIndex++; // guard zero-width
|
|
326
|
+
match = pattern.exec(input);
|
|
147
327
|
}
|
|
148
328
|
}
|
|
149
329
|
} catch {
|
|
150
|
-
// Never throw —
|
|
330
|
+
// Never throw — keep whatever was found so far.
|
|
151
331
|
}
|
|
152
|
-
return warnings;
|
|
153
332
|
}
|
|
154
333
|
|
|
155
334
|
/**
|
|
156
|
-
* Scan
|
|
335
|
+
* Scan a string for PII patterns. Returns a bounded list of warnings.
|
|
336
|
+
* Never throws.
|
|
337
|
+
*/
|
|
338
|
+
export function scanForPII(text: string, location = 'unknown'): PIIWarning[] {
|
|
339
|
+
const ctx = _newScanContext();
|
|
340
|
+
_scanTextInto(text, location, ctx);
|
|
341
|
+
return _finalizeScan(ctx);
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
/**
|
|
345
|
+
* Scan an object deeply for PII. Returns a bounded list of warnings.
|
|
157
346
|
* Never throws.
|
|
158
347
|
*/
|
|
159
348
|
export function scanObjectForPII(
|
|
@@ -161,40 +350,45 @@ export function scanObjectForPII(
|
|
|
161
350
|
basePath = '',
|
|
162
351
|
maxDepth = 10,
|
|
163
352
|
): PIIWarning[] {
|
|
164
|
-
const
|
|
353
|
+
const ctx = _newScanContext();
|
|
165
354
|
try {
|
|
166
|
-
|
|
355
|
+
_scanObjectInto(obj, basePath, 0, maxDepth, ctx);
|
|
167
356
|
} catch {
|
|
168
357
|
// Never throw
|
|
169
358
|
}
|
|
170
|
-
return
|
|
359
|
+
return _finalizeScan(ctx);
|
|
171
360
|
}
|
|
172
361
|
|
|
173
|
-
function
|
|
362
|
+
function _scanObjectInto(
|
|
174
363
|
value: unknown,
|
|
175
364
|
path: string,
|
|
176
365
|
depth: number,
|
|
177
366
|
maxDepth: number,
|
|
178
|
-
|
|
367
|
+
ctx: ScanContext,
|
|
179
368
|
): void {
|
|
180
369
|
if (depth > maxDepth || value === null || value === undefined) return;
|
|
370
|
+
if (ctx.truncated || Date.now() > ctx.deadline) {
|
|
371
|
+
ctx.truncated = true;
|
|
372
|
+
return;
|
|
373
|
+
}
|
|
181
374
|
|
|
182
375
|
if (typeof value === 'string') {
|
|
183
|
-
|
|
184
|
-
warnings.push(...found);
|
|
376
|
+
_scanTextInto(value, path, ctx);
|
|
185
377
|
return;
|
|
186
378
|
}
|
|
187
379
|
|
|
188
380
|
if (Array.isArray(value)) {
|
|
189
|
-
value.
|
|
190
|
-
|
|
191
|
-
|
|
381
|
+
for (let i = 0; i < value.length; i++) {
|
|
382
|
+
if (ctx.truncated) return;
|
|
383
|
+
_scanObjectInto(value[i], `${path}[${i}]`, depth + 1, maxDepth, ctx);
|
|
384
|
+
}
|
|
192
385
|
return;
|
|
193
386
|
}
|
|
194
387
|
|
|
195
388
|
if (typeof value === 'object') {
|
|
196
389
|
for (const [key, val] of Object.entries(value as Record<string, unknown>)) {
|
|
197
|
-
|
|
390
|
+
if (ctx.truncated) return;
|
|
391
|
+
_scanObjectInto(val, path ? `${path}.${key}` : key, depth + 1, maxDepth, ctx);
|
|
198
392
|
}
|
|
199
393
|
}
|
|
200
394
|
}
|
|
@@ -261,20 +455,19 @@ export function redactNetworkEvent(event: {
|
|
|
261
455
|
requestBody?: unknown;
|
|
262
456
|
responseBody?: unknown;
|
|
263
457
|
}): RedactedNetworkEvent {
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
458
|
+
// One bounded context for the whole event so the aggregate warning count and
|
|
459
|
+
// scan time stay capped across url + request + response (SB-25 / SB-27).
|
|
460
|
+
const ctx = _newScanContext();
|
|
267
461
|
if (event.url) {
|
|
268
|
-
|
|
462
|
+
_scanTextInto(event.url, 'url', ctx);
|
|
269
463
|
}
|
|
270
|
-
|
|
271
|
-
// Scan bodies for PII
|
|
272
464
|
if (event.requestBody) {
|
|
273
|
-
|
|
465
|
+
_scanObjectInto(event.requestBody, 'requestBody', 0, 10, ctx);
|
|
274
466
|
}
|
|
275
467
|
if (event.responseBody) {
|
|
276
|
-
|
|
468
|
+
_scanObjectInto(event.responseBody, 'responseBody', 0, 10, ctx);
|
|
277
469
|
}
|
|
470
|
+
const piiWarnings = _finalizeScan(ctx);
|
|
278
471
|
|
|
279
472
|
return {
|
|
280
473
|
url: event.url ? redactUrl(event.url) : '',
|
|
@@ -574,7 +574,15 @@ export function ScaleBunDebugRoot({
|
|
|
574
574
|
});
|
|
575
575
|
}
|
|
576
576
|
} catch { /* no-throw */ }
|
|
577
|
-
|
|
577
|
+
// 600ms, was 200ms. The race this defer exists for happens on the FIRST tap of a
|
|
578
|
+
// mount: native isn't confirmed yet, JS emitted at 200ms, then the first native
|
|
579
|
+
// event crossed the bridge at ~300-400ms — recording the same tap TWICE, with the
|
|
580
|
+
// JS copy missing normalizedX/Y whenever the async root-view measure hadn't
|
|
581
|
+
// resolved (an interaction the heatmap cannot place). QA hit exactly this pair.
|
|
582
|
+
// The wider defer lets the first native event cancel the JS emission instead; on
|
|
583
|
+
// devices with no native tracker at all it merely delays a background emission,
|
|
584
|
+
// which nothing user-visible waits on.
|
|
585
|
+
}, 600);
|
|
578
586
|
}
|
|
579
587
|
|
|
580
588
|
touchStartRef.current = null;
|
|
@@ -49,12 +49,22 @@ export class AutoScreenDetector {
|
|
|
49
49
|
private _manualScreen: string | null = null;
|
|
50
50
|
private _manualScreenTs = 0;
|
|
51
51
|
private _autoScreen: string | null = null;
|
|
52
|
+
/** `name#key` of the last auto-detected screen VISIT — see _extractActiveVisit. */
|
|
53
|
+
private _autoVisitSig: string | null = null;
|
|
52
54
|
private _navigationRef: any = null;
|
|
53
55
|
private _navListenerRemover: (() => void) | null = null;
|
|
54
56
|
private _navListenerWired = false;
|
|
55
57
|
private _heuristicTimer: ReturnType<typeof setInterval> | null = null;
|
|
56
58
|
private _started = false;
|
|
57
59
|
private _lastEmittedScreen: string | null = null;
|
|
60
|
+
private _lastEmittedTs = 0;
|
|
61
|
+
/**
|
|
62
|
+
* Cross-source emit dedup window — see _emitScreenChange. Long enough to absorb the manual
|
|
63
|
+
* beacon and the navRef listener both reporting the SAME transition (they land within the
|
|
64
|
+
* 30ms nav debounce plus a render), short enough that a genuine re-visit of the same route
|
|
65
|
+
* a moment later is a new screen view rather than silence.
|
|
66
|
+
*/
|
|
67
|
+
private static readonly EMIT_DEDUP_WINDOW_MS = 800;
|
|
58
68
|
private _navDebounceTimer: ReturnType<typeof setTimeout> | null = null;
|
|
59
69
|
/** Whether the React Navigation exports were actually replaced — see _autoHookReactNavigation. */
|
|
60
70
|
private _autoHookInstalled = false;
|
|
@@ -114,6 +124,7 @@ export class AutoScreenDetector {
|
|
|
114
124
|
if (this.isManualScreenActive()) return;
|
|
115
125
|
if (name !== this._autoScreen) {
|
|
116
126
|
this._autoScreen = name;
|
|
127
|
+
this._autoVisitSig = name; // native lifecycle carries no route key — name-only visit
|
|
117
128
|
this._emitScreenChange(name, 'heuristic');
|
|
118
129
|
}
|
|
119
130
|
} catch { /* no-throw */ }
|
|
@@ -180,10 +191,13 @@ export class AutoScreenDetector {
|
|
|
180
191
|
? container.getRootState()
|
|
181
192
|
: null;
|
|
182
193
|
if (state) {
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
194
|
+
// Compared by name#key so a re-VISIT of the same route
|
|
195
|
+
// (new key) is recorded — name-only comparison swallowed it.
|
|
196
|
+
const visit = this._extractActiveVisit(state);
|
|
197
|
+
if (visit && this._visitSig(visit) !== this._autoVisitSig) {
|
|
198
|
+
this._autoScreen = visit.name;
|
|
199
|
+
this._autoVisitSig = this._visitSig(visit);
|
|
200
|
+
this._emitScreenChange(visit.name, 'navRef');
|
|
187
201
|
}
|
|
188
202
|
}
|
|
189
203
|
} catch { /* no-throw */ }
|
|
@@ -199,10 +213,11 @@ export class AutoScreenDetector {
|
|
|
199
213
|
if (typeof container.getRootState === 'function') {
|
|
200
214
|
const state = container.getRootState();
|
|
201
215
|
if (state) {
|
|
202
|
-
const
|
|
203
|
-
if (
|
|
204
|
-
this._autoScreen =
|
|
205
|
-
this.
|
|
216
|
+
const visit = this._extractActiveVisit(state);
|
|
217
|
+
if (visit) {
|
|
218
|
+
this._autoScreen = visit.name;
|
|
219
|
+
this._autoVisitSig = this._visitSig(visit);
|
|
220
|
+
this._emitScreenChange(visit.name, 'navRef');
|
|
206
221
|
}
|
|
207
222
|
}
|
|
208
223
|
}
|
|
@@ -240,10 +255,14 @@ export class AutoScreenDetector {
|
|
|
240
255
|
? navContainer.getRootState()
|
|
241
256
|
: null;
|
|
242
257
|
if (state) {
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
258
|
+
// name#key comparison: a re-opened route (same name, fresh key) seen
|
|
259
|
+
// across poll ticks is a new visit even when every intermediate screen
|
|
260
|
+
// fell between polls — the case a name-only diff could never see.
|
|
261
|
+
const visit = this._extractActiveVisit(state);
|
|
262
|
+
if (visit && this._visitSig(visit) !== this._autoVisitSig) {
|
|
263
|
+
this._autoScreen = visit.name;
|
|
264
|
+
this._autoVisitSig = this._visitSig(visit);
|
|
265
|
+
this._emitScreenChange(visit.name, 'heuristic');
|
|
247
266
|
}
|
|
248
267
|
}
|
|
249
268
|
}
|
|
@@ -284,6 +303,24 @@ export class AutoScreenDetector {
|
|
|
284
303
|
* Handles nested navigators by walking to the deepest active route.
|
|
285
304
|
*/
|
|
286
305
|
private _extractActiveRoute(state: NavigationState | null | undefined): string | null {
|
|
306
|
+
return this._extractActiveVisit(state)?.name ?? null;
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
/**
|
|
310
|
+
* Extract the active route's name AND its React Navigation route `key`.
|
|
311
|
+
*
|
|
312
|
+
* The key is what makes re-VISITS detectable. Comparing names alone collapses two
|
|
313
|
+
* different visits to the same route into one screen view: leave Details, open Details
|
|
314
|
+
* again, and `name === _autoScreen` swallowed the second visit entirely (QA: "opened the
|
|
315
|
+
* same route again and no screen event was recorded"). React Navigation mints a fresh
|
|
316
|
+
* `key` for every pushed route instance, so a re-push of the same name is a NEW key —
|
|
317
|
+
* name+key comparison records each visit while a mere re-render of the same instance
|
|
318
|
+
* (same key) still emits nothing. States without keys degrade to name-only, i.e. the
|
|
319
|
+
* old behaviour, never worse.
|
|
320
|
+
*/
|
|
321
|
+
private _extractActiveVisit(
|
|
322
|
+
state: NavigationState | null | undefined,
|
|
323
|
+
): { name: string; key: string | null } | null {
|
|
287
324
|
try {
|
|
288
325
|
if (!state?.routes || typeof state.index !== 'number') return null;
|
|
289
326
|
|
|
@@ -292,16 +329,23 @@ export class AutoScreenDetector {
|
|
|
292
329
|
|
|
293
330
|
// If this route has nested state, recurse to find the deepest active route
|
|
294
331
|
if (activeRoute.state?.routes && typeof activeRoute.state.index === 'number') {
|
|
295
|
-
const nested = this.
|
|
332
|
+
const nested = this._extractActiveVisit(activeRoute.state);
|
|
296
333
|
if (nested) return nested;
|
|
297
334
|
}
|
|
298
335
|
|
|
299
|
-
|
|
336
|
+
if (!activeRoute.name) return null;
|
|
337
|
+
const rawKey = (activeRoute as unknown as { key?: unknown }).key;
|
|
338
|
+
return { name: activeRoute.name, key: typeof rawKey === 'string' ? rawKey : null };
|
|
300
339
|
} catch {
|
|
301
340
|
return null;
|
|
302
341
|
}
|
|
303
342
|
}
|
|
304
343
|
|
|
344
|
+
/** `name#key` signature of one screen VISIT — what the auto paths dedup on. */
|
|
345
|
+
private _visitSig(visit: { name: string; key: string | null }): string {
|
|
346
|
+
return visit.key ? `${visit.name}#${visit.key}` : visit.name;
|
|
347
|
+
}
|
|
348
|
+
|
|
305
349
|
// ─── Lifecycle ──────────────────────────────────────────────────────
|
|
306
350
|
|
|
307
351
|
/** Start auto-detection (idempotent) */
|
|
@@ -489,9 +533,19 @@ export class AutoScreenDetector {
|
|
|
489
533
|
|
|
490
534
|
private _emitScreenChange(name: string, source: 'manual' | 'navRef' | 'heuristic'): void {
|
|
491
535
|
try {
|
|
492
|
-
//
|
|
493
|
-
|
|
536
|
+
// Cross-source dedup, TIME-BOUNDED. This used to drop any name equal to the last
|
|
537
|
+
// emitted, forever — so re-entering a route whose departure was never observed
|
|
538
|
+
// (heuristic poll missed the intermediate screen, or the user re-pushed the same
|
|
539
|
+
// route) was swallowed on EVERY path, manual beacons included (QA: "opened the
|
|
540
|
+
// same route again, no screen event"). Same name within the window is still one
|
|
541
|
+
// transition double-reported by two sources; same name after it is a new visit.
|
|
542
|
+
const emitNow = Date.now();
|
|
543
|
+
if (
|
|
544
|
+
name === this._lastEmittedScreen &&
|
|
545
|
+
emitNow - this._lastEmittedTs < AutoScreenDetector.EMIT_DEDUP_WINDOW_MS
|
|
546
|
+
) return;
|
|
494
547
|
this._lastEmittedScreen = name;
|
|
548
|
+
this._lastEmittedTs = emitNow;
|
|
495
549
|
|
|
496
550
|
for (const cb of this._listeners) {
|
|
497
551
|
try {
|