@scalebun/react-native 1.10.4 → 1.10.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/android/src/main/java/com/scalebun/replaysdk/tracking/InteractionTracker.kt +19 -0
- package/dist/scalebun.full.js +460 -57
- package/dist/scalebun.slim.js +457 -62
- package/ios/Core/DeviceIdentity.swift +50 -0
- package/ios/Profiler/ScaleBunProfilerModule.swift +2 -8
- package/ios/ReplaySdk.swift +3 -1
- package/lib/commonjs/analytics/EventTracker.js +22 -0
- package/lib/commonjs/bootstrap/SDKBootstrapper.js +17 -3
- package/lib/commonjs/core/config/schema.js +29 -0
- package/lib/commonjs/core/constants/version.js +1 -1
- package/lib/commonjs/core/context/device.js +5 -0
- package/lib/commonjs/debug/redaction.js +227 -41
- package/lib/commonjs/features/journey/ScaleBunDebugRoot.js +9 -1
- package/lib/commonjs/features/navigation/AutoScreenDetector.js +68 -16
- package/lib/commonjs/features/session/BackendSessionAdapter.js +73 -6
- package/lib/commonjs/features/session/SessionManager.js +28 -0
- package/lib/commonjs/public/ScaleBunFacade.js +113 -2
- package/lib/module/analytics/EventTracker.js +22 -0
- package/lib/module/bootstrap/SDKBootstrapper.js +17 -3
- package/lib/module/core/config/schema.js +29 -0
- package/lib/module/core/constants/version.js +1 -1
- package/lib/module/core/context/device.js +5 -0
- package/lib/module/debug/redaction.js +227 -41
- package/lib/module/features/journey/ScaleBunDebugRoot.js +9 -1
- package/lib/module/features/navigation/AutoScreenDetector.js +68 -16
- package/lib/module/features/session/BackendSessionAdapter.js +73 -6
- package/lib/module/features/session/SessionManager.js +28 -0
- package/lib/module/public/ScaleBunFacade.js +114 -3
- package/lib/typescript/analytics/EventTracker.d.ts +15 -0
- package/lib/typescript/core/config/schema.d.ts +8 -0
- package/lib/typescript/core/constants/version.d.ts +1 -1
- package/lib/typescript/core/context/device.d.ts +1 -0
- package/lib/typescript/debug/redaction.d.ts +8 -2
- package/lib/typescript/features/navigation/AutoScreenDetector.d.ts +25 -0
- package/lib/typescript/features/session/BackendSessionAdapter.d.ts +9 -0
- package/lib/typescript/features/session/SessionManager.d.ts +15 -0
- package/lib/typescript/public/ScaleBunFacade.d.ts +44 -2
- package/lib/typescript/public/types.d.ts +1 -1
- package/package.json +6 -2
- package/src/analytics/EventTracker.ts +19 -0
- package/src/bootstrap/SDKBootstrapper.ts +17 -1
- package/src/core/config/schema.ts +22 -0
- package/src/core/constants/version.ts +1 -1
- package/src/core/context/device.ts +6 -0
- package/src/debug/redaction.ts +235 -42
- package/src/features/journey/ScaleBunDebugRoot.tsx +9 -1
- package/src/features/navigation/AutoScreenDetector.ts +70 -16
- package/src/features/session/BackendSessionAdapter.ts +81 -7
- package/src/features/session/SessionManager.ts +31 -0
- package/src/public/ScaleBunFacade.ts +122 -3
- package/src/public/types.ts +1 -1
- package/dist/scalebun.full.js.map +0 -1
- package/dist/scalebun.slim.js.map +0 -1
- package/lib/commonjs/analytics/EventTracker.js.map +0 -1
- package/lib/commonjs/analytics/automaticEvents.js.map +0 -1
- package/lib/commonjs/analytics/batching.js.map +0 -1
- package/lib/commonjs/analytics/eventLane.js.map +0 -1
- package/lib/commonjs/bootstrap/FeatureRegistry.js.map +0 -1
- package/lib/commonjs/bootstrap/SDKBootstrapper.js.map +0 -1
- package/lib/commonjs/bucketing/fnv1a32.js.map +0 -1
- package/lib/commonjs/compat/codepush.js.map +0 -1
- package/lib/commonjs/config/ConfigManager.js.map +0 -1
- package/lib/commonjs/config/configTypes.js.map +0 -1
- package/lib/commonjs/core/architecture.js.map +0 -1
- package/lib/commonjs/core/clock/now.js.map +0 -1
- package/lib/commonjs/core/config/defaults.js.map +0 -1
- package/lib/commonjs/core/config/schema.js.map +0 -1
- package/lib/commonjs/core/constants/endpoints.js.map +0 -1
- package/lib/commonjs/core/constants/protocol.js.map +0 -1
- package/lib/commonjs/core/constants/timings.js.map +0 -1
- package/lib/commonjs/core/constants/version.js.map +0 -1
- package/lib/commonjs/core/context/app.js.map +0 -1
- package/lib/commonjs/core/context/device.js.map +0 -1
- package/lib/commonjs/core/context/session.js.map +0 -1
- package/lib/commonjs/core/context/user.js.map +0 -1
- package/lib/commonjs/core/contracts/IFeature.js.map +0 -1
- package/lib/commonjs/core/di/container.js.map +0 -1
- package/lib/commonjs/core/encoding/base64.js.map +0 -1
- package/lib/commonjs/core/id/deviceId.js.map +0 -1
- package/lib/commonjs/core/id/installationId.js.map +0 -1
- package/lib/commonjs/core/id/sessionId.js.map +0 -1
- package/lib/commonjs/core/lifecycle/appLifecycle.js.map +0 -1
- package/lib/commonjs/core/lifecycle/crashSafe.js.map +0 -1
- package/lib/commonjs/core/logger/errorClassification.js.map +0 -1
- package/lib/commonjs/core/logger/internalLogger.js.map +0 -1
- package/lib/commonjs/core/logger/levels.js.map +0 -1
- package/lib/commonjs/crypto/hmacSha256.js.map +0 -1
- package/lib/commonjs/debug/bootstrap.js.map +0 -1
- package/lib/commonjs/debug/commands.js.map +0 -1
- package/lib/commonjs/debug/configBuilder.js.map +0 -1
- package/lib/commonjs/debug/exportBridge.js.map +0 -1
- package/lib/commonjs/debug/hostResolver.js.map +0 -1
- package/lib/commonjs/debug/index.js.map +0 -1
- package/lib/commonjs/debug/metrics.js.map +0 -1
- package/lib/commonjs/debug/perf.js.map +0 -1
- package/lib/commonjs/debug/perfWiring.js.map +0 -1
- package/lib/commonjs/debug/protocol.js.map +0 -1
- package/lib/commonjs/debug/redaction.js.map +0 -1
- package/lib/commonjs/debug/replayWiring.js.map +0 -1
- package/lib/commonjs/debug/screenTracking.js.map +0 -1
- package/lib/commonjs/debug/sessionWiring.js.map +0 -1
- package/lib/commonjs/debug/stream.js.map +0 -1
- package/lib/commonjs/debug/transport.js.map +0 -1
- package/lib/commonjs/features/bugreport/BugReportFeature.js.map +0 -1
- package/lib/commonjs/features/bugreport/buildPayload.js.map +0 -1
- package/lib/commonjs/features/bugreport/index.js.map +0 -1
- package/lib/commonjs/features/crash/CrashFeature.js.map +0 -1
- package/lib/commonjs/features/crash/CrashReporter.js.map +0 -1
- package/lib/commonjs/features/crash/NativeCrashFeature.js.map +0 -1
- package/lib/commonjs/features/crash/capture.js.map +0 -1
- package/lib/commonjs/features/crash/globalHandler.js.map +0 -1
- package/lib/commonjs/features/crash/index.js.map +0 -1
- package/lib/commonjs/features/crash/nativeCrashBridge.js.map +0 -1
- package/lib/commonjs/features/crash/rejectionHandler.js.map +0 -1
- package/lib/commonjs/features/engage/EngageAnchor.js.map +0 -1
- package/lib/commonjs/features/engage/EngageArchetypeRenderers.js.map +0 -1
- package/lib/commonjs/features/engage/EngageInAppView.js.map +0 -1
- package/lib/commonjs/features/engage/EngageInlinePlacement.js.map +0 -1
- package/lib/commonjs/features/engage/EngagePromptProvider.js.map +0 -1
- package/lib/commonjs/features/engage/EngagePromptView.js.map +0 -1
- package/lib/commonjs/features/engage/EngageTransport.js.map +0 -1
- package/lib/commonjs/features/engage/EngageVariantContent.js.map +0 -1
- package/lib/commonjs/features/engage/__test-support__/reactNativeStub.js.map +0 -1
- package/lib/commonjs/features/engage/attachmentCapture.js.map +0 -1
- package/lib/commonjs/features/engage/captureVoiceAttachment.js.map +0 -1
- package/lib/commonjs/features/engage/engageCoachmarkTour.js.map +0 -1
- package/lib/commonjs/features/engage/engageGameLogic.js.map +0 -1
- package/lib/commonjs/features/engage/engageMediaSizing.js.map +0 -1
- package/lib/commonjs/features/engage/engageMultiStepSheet.js.map +0 -1
- package/lib/commonjs/features/engage/engageOutcome.js.map +0 -1
- package/lib/commonjs/features/engage/engagePushTokenBridge.js.map +0 -1
- package/lib/commonjs/features/engage/engageShakeBridge.js.map +0 -1
- package/lib/commonjs/features/engage/engageSignals.js.map +0 -1
- package/lib/commonjs/features/engage/engageStoreReviewBridge.js.map +0 -1
- package/lib/commonjs/features/engage/engageTestSeenStore.js.map +0 -1
- package/lib/commonjs/features/engage/engageThrottle.js.map +0 -1
- package/lib/commonjs/features/engage/engageTriggerEngine.js.map +0 -1
- package/lib/commonjs/features/engage/engageTypes.js.map +0 -1
- package/lib/commonjs/features/engage/engageVariantResolver.js.map +0 -1
- package/lib/commonjs/features/engage/engageWindowInsets.js.map +0 -1
- package/lib/commonjs/features/engage/gestureTriggerDetector.js.map +0 -1
- package/lib/commonjs/features/engage/transcription/TranscriptionProvider.js.map +0 -1
- package/lib/commonjs/features/install-referrer/installReferrer.js.map +0 -1
- package/lib/commonjs/features/journey/ScaleBunDebugRoot.js.map +0 -1
- package/lib/commonjs/features/journey/ScaleBunFlatList.js.map +0 -1
- package/lib/commonjs/features/journey/ScaleBunImpression.js.map +0 -1
- package/lib/commonjs/features/journey/ScaleBunScrollView.js.map +0 -1
- package/lib/commonjs/features/journey/ScaleBunSectionList.js.map +0 -1
- package/lib/commonjs/features/journey/calibrationContext.js.map +0 -1
- package/lib/commonjs/features/journey/gestureBuffer.js.map +0 -1
- package/lib/commonjs/features/journey/gestureDetector.js.map +0 -1
- package/lib/commonjs/features/journey/impression.js.map +0 -1
- package/lib/commonjs/features/journey/journeyManager.js.map +0 -1
- package/lib/commonjs/features/journey/journeyTypes.js.map +0 -1
- package/lib/commonjs/features/journey/navDetector.js.map +0 -1
- package/lib/commonjs/features/journey/screenshotHelper.js.map +0 -1
- package/lib/commonjs/features/journey/targetRegistry.js.map +0 -1
- package/lib/commonjs/features/journey/touchTarget.js.map +0 -1
- package/lib/commonjs/features/navigation/AutoScreenDetector.js.map +0 -1
- package/lib/commonjs/features/network/NetworkFeature.js.map +0 -1
- package/lib/commonjs/features/network/index.js.map +0 -1
- package/lib/commonjs/features/ota/OtaEventEmitter.js.map +0 -1
- package/lib/commonjs/features/ota/OtaOrchestrator.js.map +0 -1
- package/lib/commonjs/features/ota/OtaTypes.js.map +0 -1
- package/lib/commonjs/features/ota/deviceAttributes.js.map +0 -1
- package/lib/commonjs/features/ota/environment.js.map +0 -1
- package/lib/commonjs/features/ota/geoCountry.js.map +0 -1
- package/lib/commonjs/features/ota/retry.js.map +0 -1
- package/lib/commonjs/features/ota/signature.js.map +0 -1
- package/lib/commonjs/features/ota/useOtaUpdate.js.map +0 -1
- package/lib/commonjs/features/performance/PerformanceFeature.js.map +0 -1
- package/lib/commonjs/features/performance/collectors/AppLaunchCollector.js.map +0 -1
- package/lib/commonjs/features/performance/collectors/AutoScreenLoadCollector.js.map +0 -1
- package/lib/commonjs/features/performance/collectors/CustomTraceCollector.js.map +0 -1
- package/lib/commonjs/features/performance/collectors/FrameMetricsCollector.js.map +0 -1
- package/lib/commonjs/features/performance/collectors/JsStallCollector.js.map +0 -1
- package/lib/commonjs/features/performance/collectors/NetworkPerfCollector.js.map +0 -1
- package/lib/commonjs/features/performance/collectors/ScreenLoadCollector.js.map +0 -1
- package/lib/commonjs/features/performance/collectors/UiHangCollector.js.map +0 -1
- package/lib/commonjs/features/performance/config.js.map +0 -1
- package/lib/commonjs/features/performance/getNativePerformanceModule.js.map +0 -1
- package/lib/commonjs/features/performance/index.js.map +0 -1
- package/lib/commonjs/features/performance/metrics/MetricsEngine.js.map +0 -1
- package/lib/commonjs/features/performance/models.js.map +0 -1
- package/lib/commonjs/features/performance/transport/PerformanceTransport.js.map +0 -1
- package/lib/commonjs/features/profiler/ProfilerFeature.js.map +0 -1
- package/lib/commonjs/features/profiler/config.js.map +0 -1
- package/lib/commonjs/features/profiler/contracts.js.map +0 -1
- package/lib/commonjs/features/profiler/index.js.map +0 -1
- package/lib/commonjs/features/profiler/models.js.map +0 -1
- package/lib/commonjs/features/profiler/transport/ProfilerTransport.js.map +0 -1
- package/lib/commonjs/features/replay/bridge/adapters/bridgeAdapter.js.map +0 -1
- package/lib/commonjs/features/replay/bridge/eventEmitter.js.map +0 -1
- package/lib/commonjs/features/replay/bridge/nativeModule.js.map +0 -1
- package/lib/commonjs/features/replay/core/clock/clock.js.map +0 -1
- package/lib/commonjs/features/replay/core/config/defaults.js.map +0 -1
- package/lib/commonjs/features/replay/core/config/validator.js.map +0 -1
- package/lib/commonjs/features/replay/core/env/environmentDetector.js.map +0 -1
- package/lib/commonjs/features/replay/core/errors/safeCall.js.map +0 -1
- package/lib/commonjs/features/replay/core/ids/sessionId.js.map +0 -1
- package/lib/commonjs/features/replay/core/logger/logger.js.map +0 -1
- package/lib/commonjs/features/replay/core/privacy/privacyTypes.js.map +0 -1
- package/lib/commonjs/features/replay/core/queue/boundedQueue.js.map +0 -1
- package/lib/commonjs/features/replay/integrations/alert/alertInstrumentation.js.map +0 -1
- package/lib/commonjs/features/replay/integrations/logs/consoleIntegration.js.map +0 -1
- package/lib/commonjs/features/replay/integrations/network/networkAdapter.js.map +0 -1
- package/lib/commonjs/features/replay/integrations/react-navigation/navigationIntegration.js.map +0 -1
- package/lib/commonjs/features/replay/integrations/touch/ReplayRoot.js.map +0 -1
- package/lib/commonjs/features/replay/pipeline/batching/batchManager.js.map +0 -1
- package/lib/commonjs/features/replay/pipeline/envelope/envelopeBuilder.js.map +0 -1
- package/lib/commonjs/features/replay/pipeline/retry/retryPolicy.js.map +0 -1
- package/lib/commonjs/features/replay/pipeline/transport/transportTypes.js.map +0 -1
- package/lib/commonjs/features/replay/public/api.js.map +0 -1
- package/lib/commonjs/features/replay/public/enums.js.map +0 -1
- package/lib/commonjs/features/replay/public/types.js.map +0 -1
- package/lib/commonjs/features/replay/replay/breadcrumbs/breadcrumbCollector.js.map +0 -1
- package/lib/commonjs/features/replay/replay/frames/frameModels.js.map +0 -1
- package/lib/commonjs/features/replay/replay/session/sessionOrchestrator.js.map +0 -1
- package/lib/commonjs/features/replay/replay/timeline/timelineModels.js.map +0 -1
- package/lib/commonjs/features/replay/transport/BackendReplayTransport.js.map +0 -1
- package/lib/commonjs/features/replay/transport/CompositeReplayTransport.js.map +0 -1
- package/lib/commonjs/features/replay/transport/DesktopReplayTransport.js.map +0 -1
- package/lib/commonjs/features/replay/transport/ReplayTransport.js.map +0 -1
- package/lib/commonjs/features/session/BackendSessionAdapter.js.map +0 -1
- package/lib/commonjs/features/session/DesktopSessionTransport.js.map +0 -1
- package/lib/commonjs/features/session/JourneyEventPipeline.js.map +0 -1
- package/lib/commonjs/features/session/ReplayCaptureManager.js.map +0 -1
- package/lib/commonjs/features/session/ScrollTracker.js.map +0 -1
- package/lib/commonjs/features/session/SessionManager.js.map +0 -1
- package/lib/commonjs/features/session/SyncDecisionEngine.js.map +0 -1
- package/lib/commonjs/features/session/index.js.map +0 -1
- package/lib/commonjs/features/session/nativeCapture.js.map +0 -1
- package/lib/commonjs/features/session/outboxFrameCapture.js.map +0 -1
- package/lib/commonjs/features/session/sessionTypes.js.map +0 -1
- package/lib/commonjs/features/skan/skanBridge.js.map +0 -1
- package/lib/commonjs/features/skan/skanConversionManager.js.map +0 -1
- package/lib/commonjs/index.js.map +0 -1
- package/lib/commonjs/integrations/fetch/fetchInterceptor.js.map +0 -1
- package/lib/commonjs/integrations/navigation/screenTracker.js.map +0 -1
- package/lib/commonjs/integrations/network/bodyCapture.js.map +0 -1
- package/lib/commonjs/integrations/xhr/xhrInterceptor.js.map +0 -1
- package/lib/commonjs/metro/composeSourceMap.js.map +0 -1
- package/lib/commonjs/metro/featureModules.js.map +0 -1
- package/lib/commonjs/metro/index.js.map +0 -1
- package/lib/commonjs/metro/optionalDependencyStub.js.map +0 -1
- package/lib/commonjs/metro/optionalModules.js.map +0 -1
- package/lib/commonjs/metro/serializerCompose.js.map +0 -1
- package/lib/commonjs/pipeline/dispatcher/dispatcher.js.map +0 -1
- package/lib/commonjs/pipeline/envelope/envelope.js.map +0 -1
- package/lib/commonjs/pipeline/envelope/serializer.js.map +0 -1
- package/lib/commonjs/pipeline/processors/dedupe.js.map +0 -1
- package/lib/commonjs/pipeline/processors/enrich.js.map +0 -1
- package/lib/commonjs/pipeline/processors/sampling.js.map +0 -1
- package/lib/commonjs/pipeline/processors/sanitize.js.map +0 -1
- package/lib/commonjs/pipeline/queue/flushQueue.js.map +0 -1
- package/lib/commonjs/pipeline/queue/memoryQueue.js.map +0 -1
- package/lib/commonjs/pipeline/queue/persistentQueue.js.map +0 -1
- package/lib/commonjs/pipeline/queue/queuePolicy.js.map +0 -1
- package/lib/commonjs/pipeline/scheduler/flushScheduler.js.map +0 -1
- package/lib/commonjs/pipeline/scheduler/retryPolicy.js.map +0 -1
- package/lib/commonjs/public/ScaleBunErrorBoundary.js.map +0 -1
- package/lib/commonjs/public/ScaleBunFacade.js.map +0 -1
- package/lib/commonjs/public/ScaleBunProvider.js.map +0 -1
- package/lib/commonjs/public/typedTracker.js.map +0 -1
- package/lib/commonjs/public/types.js.map +0 -1
- package/lib/commonjs/push/PushManager.js.map +0 -1
- package/lib/commonjs/push/adapters/ManualAdapter.js.map +0 -1
- package/lib/commonjs/push/adapters/NativeBridgeAdapter.js.map +0 -1
- package/lib/commonjs/push/adapters/NoopAdapter.js.map +0 -1
- package/lib/commonjs/push/adapters/RNFirebaseMessagingAdapter.js.map +0 -1
- package/lib/commonjs/push/adapters/loadMessaging.js.map +0 -1
- package/lib/commonjs/push/adapters/loadNotifee.js.map +0 -1
- package/lib/commonjs/push/adapters/selectAdapter.js.map +0 -1
- package/lib/commonjs/push/detect/capabilities.js.map +0 -1
- package/lib/commonjs/push/index.js.map +0 -1
- package/lib/commonjs/push/native/nativeNotifications.js.map +0 -1
- package/lib/commonjs/push/types.js.map +0 -1
- package/lib/commonjs/specs/NativeReplaySdk.js.map +0 -1
- package/lib/commonjs/specs/NativeScaleBunCrash.js.map +0 -1
- package/lib/commonjs/specs/NativeScaleBunInstallReferrer.js.map +0 -1
- package/lib/commonjs/specs/NativeScaleBunOta.js.map +0 -1
- package/lib/commonjs/specs/NativeScaleBunPerformance.js.map +0 -1
- package/lib/commonjs/specs/NativeScaleBunProfiler.js.map +0 -1
- package/lib/commonjs/specs/NativeScaleBunStorage.js.map +0 -1
- package/lib/commonjs/storage/StorageBackend.js.map +0 -1
- package/lib/commonjs/storage/db/sqlite.js.map +0 -1
- package/lib/commonjs/storage/files/fileStore.js.map +0 -1
- package/lib/commonjs/transport/auth/sdkSession.js.map +0 -1
- package/lib/commonjs/transport/backoff/exponentialJitter.js.map +0 -1
- package/lib/commonjs/transport/http/endpoints.js.map +0 -1
- package/lib/commonjs/transport/http/httpClient.js.map +0 -1
- package/lib/commonjs/transport/rateLimit/retryAfter.js.map +0 -1
- package/lib/commonjs/transport/signing/requestSigner.js.map +0 -1
- package/lib/commonjs/vendor/protocol/index.js.map +0 -1
- package/lib/commonjs/vendor/protocol/internal/validation.js.map +0 -1
- package/lib/commonjs/vendor/sdk-contracts/bridge.js.map +0 -1
- package/lib/commonjs/vendor/sdk-contracts/config.js.map +0 -1
- package/lib/commonjs/vendor/sdk-contracts/events.js.map +0 -1
- package/lib/commonjs/vendor/sdk-contracts/features.js.map +0 -1
- package/lib/commonjs/vendor/sdk-contracts/index.js.map +0 -1
- package/lib/commonjs/vendor/sdk-contracts/platform.js.map +0 -1
- package/lib/commonjs/vendor/sdk-contracts/session-boundary.js.map +0 -1
- package/lib/commonjs/vendor/sdk-contracts/session.js.map +0 -1
- package/lib/module/analytics/EventTracker.js.map +0 -1
- package/lib/module/analytics/automaticEvents.js.map +0 -1
- package/lib/module/analytics/batching.js.map +0 -1
- package/lib/module/analytics/eventLane.js.map +0 -1
- package/lib/module/bootstrap/FeatureRegistry.js.map +0 -1
- package/lib/module/bootstrap/SDKBootstrapper.js.map +0 -1
- package/lib/module/bucketing/fnv1a32.js.map +0 -1
- package/lib/module/compat/codepush.js.map +0 -1
- package/lib/module/config/ConfigManager.js.map +0 -1
- package/lib/module/config/configTypes.js.map +0 -1
- package/lib/module/core/architecture.js.map +0 -1
- package/lib/module/core/clock/now.js.map +0 -1
- package/lib/module/core/config/defaults.js.map +0 -1
- package/lib/module/core/config/schema.js.map +0 -1
- package/lib/module/core/constants/endpoints.js.map +0 -1
- package/lib/module/core/constants/protocol.js.map +0 -1
- package/lib/module/core/constants/timings.js.map +0 -1
- package/lib/module/core/constants/version.js.map +0 -1
- package/lib/module/core/context/app.js.map +0 -1
- package/lib/module/core/context/device.js.map +0 -1
- package/lib/module/core/context/session.js.map +0 -1
- package/lib/module/core/context/user.js.map +0 -1
- package/lib/module/core/contracts/IFeature.js.map +0 -1
- package/lib/module/core/di/container.js.map +0 -1
- package/lib/module/core/encoding/base64.js.map +0 -1
- package/lib/module/core/id/deviceId.js.map +0 -1
- package/lib/module/core/id/installationId.js.map +0 -1
- package/lib/module/core/id/sessionId.js.map +0 -1
- package/lib/module/core/lifecycle/appLifecycle.js.map +0 -1
- package/lib/module/core/lifecycle/crashSafe.js.map +0 -1
- package/lib/module/core/logger/errorClassification.js.map +0 -1
- package/lib/module/core/logger/internalLogger.js.map +0 -1
- package/lib/module/core/logger/levels.js.map +0 -1
- package/lib/module/crypto/hmacSha256.js.map +0 -1
- package/lib/module/debug/bootstrap.js.map +0 -1
- package/lib/module/debug/commands.js.map +0 -1
- package/lib/module/debug/configBuilder.js.map +0 -1
- package/lib/module/debug/exportBridge.js.map +0 -1
- package/lib/module/debug/hostResolver.js.map +0 -1
- package/lib/module/debug/index.js.map +0 -1
- package/lib/module/debug/metrics.js.map +0 -1
- package/lib/module/debug/perf.js.map +0 -1
- package/lib/module/debug/perfWiring.js.map +0 -1
- package/lib/module/debug/protocol.js.map +0 -1
- package/lib/module/debug/redaction.js.map +0 -1
- package/lib/module/debug/replayWiring.js.map +0 -1
- package/lib/module/debug/screenTracking.js.map +0 -1
- package/lib/module/debug/sessionWiring.js.map +0 -1
- package/lib/module/debug/stream.js.map +0 -1
- package/lib/module/debug/transport.js.map +0 -1
- package/lib/module/features/bugreport/BugReportFeature.js.map +0 -1
- package/lib/module/features/bugreport/buildPayload.js.map +0 -1
- package/lib/module/features/bugreport/index.js.map +0 -1
- package/lib/module/features/crash/CrashFeature.js.map +0 -1
- package/lib/module/features/crash/CrashReporter.js.map +0 -1
- package/lib/module/features/crash/NativeCrashFeature.js.map +0 -1
- package/lib/module/features/crash/capture.js.map +0 -1
- package/lib/module/features/crash/globalHandler.js.map +0 -1
- package/lib/module/features/crash/index.js.map +0 -1
- package/lib/module/features/crash/nativeCrashBridge.js.map +0 -1
- package/lib/module/features/crash/rejectionHandler.js.map +0 -1
- package/lib/module/features/engage/EngageAnchor.js.map +0 -1
- package/lib/module/features/engage/EngageArchetypeRenderers.js.map +0 -1
- package/lib/module/features/engage/EngageInAppView.js.map +0 -1
- package/lib/module/features/engage/EngageInlinePlacement.js.map +0 -1
- package/lib/module/features/engage/EngagePromptProvider.js.map +0 -1
- package/lib/module/features/engage/EngagePromptView.js.map +0 -1
- package/lib/module/features/engage/EngageTransport.js.map +0 -1
- package/lib/module/features/engage/EngageVariantContent.js.map +0 -1
- package/lib/module/features/engage/__test-support__/reactNativeStub.js.map +0 -1
- package/lib/module/features/engage/attachmentCapture.js.map +0 -1
- package/lib/module/features/engage/captureVoiceAttachment.js.map +0 -1
- package/lib/module/features/engage/engageCoachmarkTour.js.map +0 -1
- package/lib/module/features/engage/engageGameLogic.js.map +0 -1
- package/lib/module/features/engage/engageMediaSizing.js.map +0 -1
- package/lib/module/features/engage/engageMultiStepSheet.js.map +0 -1
- package/lib/module/features/engage/engageOutcome.js.map +0 -1
- package/lib/module/features/engage/engagePushTokenBridge.js.map +0 -1
- package/lib/module/features/engage/engageShakeBridge.js.map +0 -1
- package/lib/module/features/engage/engageSignals.js.map +0 -1
- package/lib/module/features/engage/engageStoreReviewBridge.js.map +0 -1
- package/lib/module/features/engage/engageTestSeenStore.js.map +0 -1
- package/lib/module/features/engage/engageThrottle.js.map +0 -1
- package/lib/module/features/engage/engageTriggerEngine.js.map +0 -1
- package/lib/module/features/engage/engageTypes.js.map +0 -1
- package/lib/module/features/engage/engageVariantResolver.js.map +0 -1
- package/lib/module/features/engage/engageWindowInsets.js.map +0 -1
- package/lib/module/features/engage/gestureTriggerDetector.js.map +0 -1
- package/lib/module/features/engage/transcription/TranscriptionProvider.js.map +0 -1
- package/lib/module/features/install-referrer/installReferrer.js.map +0 -1
- package/lib/module/features/journey/ScaleBunDebugRoot.js.map +0 -1
- package/lib/module/features/journey/ScaleBunFlatList.js.map +0 -1
- package/lib/module/features/journey/ScaleBunImpression.js.map +0 -1
- package/lib/module/features/journey/ScaleBunScrollView.js.map +0 -1
- package/lib/module/features/journey/ScaleBunSectionList.js.map +0 -1
- package/lib/module/features/journey/calibrationContext.js.map +0 -1
- package/lib/module/features/journey/gestureBuffer.js.map +0 -1
- package/lib/module/features/journey/gestureDetector.js.map +0 -1
- package/lib/module/features/journey/impression.js.map +0 -1
- package/lib/module/features/journey/journeyManager.js.map +0 -1
- package/lib/module/features/journey/journeyTypes.js.map +0 -1
- package/lib/module/features/journey/navDetector.js.map +0 -1
- package/lib/module/features/journey/screenshotHelper.js.map +0 -1
- package/lib/module/features/journey/targetRegistry.js.map +0 -1
- package/lib/module/features/journey/touchTarget.js.map +0 -1
- package/lib/module/features/navigation/AutoScreenDetector.js.map +0 -1
- package/lib/module/features/network/NetworkFeature.js.map +0 -1
- package/lib/module/features/network/index.js.map +0 -1
- package/lib/module/features/ota/OtaEventEmitter.js.map +0 -1
- package/lib/module/features/ota/OtaOrchestrator.js.map +0 -1
- package/lib/module/features/ota/OtaTypes.js.map +0 -1
- package/lib/module/features/ota/deviceAttributes.js.map +0 -1
- package/lib/module/features/ota/environment.js.map +0 -1
- package/lib/module/features/ota/geoCountry.js.map +0 -1
- package/lib/module/features/ota/retry.js.map +0 -1
- package/lib/module/features/ota/signature.js.map +0 -1
- package/lib/module/features/ota/useOtaUpdate.js.map +0 -1
- package/lib/module/features/performance/PerformanceFeature.js.map +0 -1
- package/lib/module/features/performance/collectors/AppLaunchCollector.js.map +0 -1
- package/lib/module/features/performance/collectors/AutoScreenLoadCollector.js.map +0 -1
- package/lib/module/features/performance/collectors/CustomTraceCollector.js.map +0 -1
- package/lib/module/features/performance/collectors/FrameMetricsCollector.js.map +0 -1
- package/lib/module/features/performance/collectors/JsStallCollector.js.map +0 -1
- package/lib/module/features/performance/collectors/NetworkPerfCollector.js.map +0 -1
- package/lib/module/features/performance/collectors/ScreenLoadCollector.js.map +0 -1
- package/lib/module/features/performance/collectors/UiHangCollector.js.map +0 -1
- package/lib/module/features/performance/config.js.map +0 -1
- package/lib/module/features/performance/getNativePerformanceModule.js.map +0 -1
- package/lib/module/features/performance/index.js.map +0 -1
- package/lib/module/features/performance/metrics/MetricsEngine.js.map +0 -1
- package/lib/module/features/performance/models.js.map +0 -1
- package/lib/module/features/performance/transport/PerformanceTransport.js.map +0 -1
- package/lib/module/features/profiler/ProfilerFeature.js.map +0 -1
- package/lib/module/features/profiler/config.js.map +0 -1
- package/lib/module/features/profiler/contracts.js.map +0 -1
- package/lib/module/features/profiler/index.js.map +0 -1
- package/lib/module/features/profiler/models.js.map +0 -1
- package/lib/module/features/profiler/transport/ProfilerTransport.js.map +0 -1
- package/lib/module/features/replay/bridge/adapters/bridgeAdapter.js.map +0 -1
- package/lib/module/features/replay/bridge/eventEmitter.js.map +0 -1
- package/lib/module/features/replay/bridge/nativeModule.js.map +0 -1
- package/lib/module/features/replay/core/clock/clock.js.map +0 -1
- package/lib/module/features/replay/core/config/defaults.js.map +0 -1
- package/lib/module/features/replay/core/config/validator.js.map +0 -1
- package/lib/module/features/replay/core/env/environmentDetector.js.map +0 -1
- package/lib/module/features/replay/core/errors/safeCall.js.map +0 -1
- package/lib/module/features/replay/core/ids/sessionId.js.map +0 -1
- package/lib/module/features/replay/core/logger/logger.js.map +0 -1
- package/lib/module/features/replay/core/privacy/privacyTypes.js.map +0 -1
- package/lib/module/features/replay/core/queue/boundedQueue.js.map +0 -1
- package/lib/module/features/replay/integrations/alert/alertInstrumentation.js.map +0 -1
- package/lib/module/features/replay/integrations/logs/consoleIntegration.js.map +0 -1
- package/lib/module/features/replay/integrations/network/networkAdapter.js.map +0 -1
- package/lib/module/features/replay/integrations/react-navigation/navigationIntegration.js.map +0 -1
- package/lib/module/features/replay/integrations/touch/ReplayRoot.js.map +0 -1
- package/lib/module/features/replay/pipeline/batching/batchManager.js.map +0 -1
- package/lib/module/features/replay/pipeline/envelope/envelopeBuilder.js.map +0 -1
- package/lib/module/features/replay/pipeline/retry/retryPolicy.js.map +0 -1
- package/lib/module/features/replay/pipeline/transport/transportTypes.js.map +0 -1
- package/lib/module/features/replay/public/api.js.map +0 -1
- package/lib/module/features/replay/public/enums.js.map +0 -1
- package/lib/module/features/replay/public/types.js.map +0 -1
- package/lib/module/features/replay/replay/breadcrumbs/breadcrumbCollector.js.map +0 -1
- package/lib/module/features/replay/replay/frames/frameModels.js.map +0 -1
- package/lib/module/features/replay/replay/session/sessionOrchestrator.js.map +0 -1
- package/lib/module/features/replay/replay/timeline/timelineModels.js.map +0 -1
- package/lib/module/features/replay/transport/BackendReplayTransport.js.map +0 -1
- package/lib/module/features/replay/transport/CompositeReplayTransport.js.map +0 -1
- package/lib/module/features/replay/transport/DesktopReplayTransport.js.map +0 -1
- package/lib/module/features/replay/transport/ReplayTransport.js.map +0 -1
- package/lib/module/features/session/BackendSessionAdapter.js.map +0 -1
- package/lib/module/features/session/DesktopSessionTransport.js.map +0 -1
- package/lib/module/features/session/JourneyEventPipeline.js.map +0 -1
- package/lib/module/features/session/ReplayCaptureManager.js.map +0 -1
- package/lib/module/features/session/ScrollTracker.js.map +0 -1
- package/lib/module/features/session/SessionManager.js.map +0 -1
- package/lib/module/features/session/SyncDecisionEngine.js.map +0 -1
- package/lib/module/features/session/index.js.map +0 -1
- package/lib/module/features/session/nativeCapture.js.map +0 -1
- package/lib/module/features/session/outboxFrameCapture.js.map +0 -1
- package/lib/module/features/session/sessionTypes.js.map +0 -1
- package/lib/module/features/skan/skanBridge.js.map +0 -1
- package/lib/module/features/skan/skanConversionManager.js.map +0 -1
- package/lib/module/index.js.map +0 -1
- package/lib/module/integrations/fetch/fetchInterceptor.js.map +0 -1
- package/lib/module/integrations/navigation/screenTracker.js.map +0 -1
- package/lib/module/integrations/network/bodyCapture.js.map +0 -1
- package/lib/module/integrations/xhr/xhrInterceptor.js.map +0 -1
- package/lib/module/metro/composeSourceMap.js.map +0 -1
- package/lib/module/metro/featureModules.js.map +0 -1
- package/lib/module/metro/index.js.map +0 -1
- package/lib/module/metro/optionalDependencyStub.js.map +0 -1
- package/lib/module/metro/optionalModules.js.map +0 -1
- package/lib/module/metro/serializerCompose.js.map +0 -1
- package/lib/module/pipeline/dispatcher/dispatcher.js.map +0 -1
- package/lib/module/pipeline/envelope/envelope.js.map +0 -1
- package/lib/module/pipeline/envelope/serializer.js.map +0 -1
- package/lib/module/pipeline/processors/dedupe.js.map +0 -1
- package/lib/module/pipeline/processors/enrich.js.map +0 -1
- package/lib/module/pipeline/processors/sampling.js.map +0 -1
- package/lib/module/pipeline/processors/sanitize.js.map +0 -1
- package/lib/module/pipeline/queue/flushQueue.js.map +0 -1
- package/lib/module/pipeline/queue/memoryQueue.js.map +0 -1
- package/lib/module/pipeline/queue/persistentQueue.js.map +0 -1
- package/lib/module/pipeline/queue/queuePolicy.js.map +0 -1
- package/lib/module/pipeline/scheduler/flushScheduler.js.map +0 -1
- package/lib/module/pipeline/scheduler/retryPolicy.js.map +0 -1
- package/lib/module/public/ScaleBunErrorBoundary.js.map +0 -1
- package/lib/module/public/ScaleBunFacade.js.map +0 -1
- package/lib/module/public/ScaleBunProvider.js.map +0 -1
- package/lib/module/public/typedTracker.js.map +0 -1
- package/lib/module/public/types.js.map +0 -1
- package/lib/module/push/PushManager.js.map +0 -1
- package/lib/module/push/adapters/ManualAdapter.js.map +0 -1
- package/lib/module/push/adapters/NativeBridgeAdapter.js.map +0 -1
- package/lib/module/push/adapters/NoopAdapter.js.map +0 -1
- package/lib/module/push/adapters/RNFirebaseMessagingAdapter.js.map +0 -1
- package/lib/module/push/adapters/loadMessaging.js.map +0 -1
- package/lib/module/push/adapters/loadNotifee.js.map +0 -1
- package/lib/module/push/adapters/selectAdapter.js.map +0 -1
- package/lib/module/push/detect/capabilities.js.map +0 -1
- package/lib/module/push/index.js.map +0 -1
- package/lib/module/push/native/nativeNotifications.js.map +0 -1
- package/lib/module/push/types.js.map +0 -1
- package/lib/module/specs/NativeReplaySdk.js.map +0 -1
- package/lib/module/specs/NativeScaleBunCrash.js.map +0 -1
- package/lib/module/specs/NativeScaleBunInstallReferrer.js.map +0 -1
- package/lib/module/specs/NativeScaleBunOta.js.map +0 -1
- package/lib/module/specs/NativeScaleBunPerformance.js.map +0 -1
- package/lib/module/specs/NativeScaleBunProfiler.js.map +0 -1
- package/lib/module/specs/NativeScaleBunStorage.js.map +0 -1
- package/lib/module/storage/StorageBackend.js.map +0 -1
- package/lib/module/storage/db/sqlite.js.map +0 -1
- package/lib/module/storage/files/fileStore.js.map +0 -1
- package/lib/module/transport/auth/sdkSession.js.map +0 -1
- package/lib/module/transport/backoff/exponentialJitter.js.map +0 -1
- package/lib/module/transport/http/endpoints.js.map +0 -1
- package/lib/module/transport/http/httpClient.js.map +0 -1
- package/lib/module/transport/rateLimit/retryAfter.js.map +0 -1
- package/lib/module/transport/signing/requestSigner.js.map +0 -1
- package/lib/module/vendor/protocol/index.js.map +0 -1
- package/lib/module/vendor/protocol/internal/validation.js.map +0 -1
- package/lib/module/vendor/sdk-contracts/bridge.js.map +0 -1
- package/lib/module/vendor/sdk-contracts/config.js.map +0 -1
- package/lib/module/vendor/sdk-contracts/events.js.map +0 -1
- package/lib/module/vendor/sdk-contracts/features.js.map +0 -1
- package/lib/module/vendor/sdk-contracts/index.js.map +0 -1
- package/lib/module/vendor/sdk-contracts/platform.js.map +0 -1
- package/lib/module/vendor/sdk-contracts/session-boundary.js.map +0 -1
- package/lib/module/vendor/sdk-contracts/session.js.map +0 -1
- package/lib/typescript/analytics/EventTracker.d.ts.map +0 -1
- package/lib/typescript/analytics/automaticEvents.d.ts.map +0 -1
- package/lib/typescript/analytics/batching.d.ts.map +0 -1
- package/lib/typescript/analytics/eventLane.d.ts.map +0 -1
- package/lib/typescript/bootstrap/FeatureRegistry.d.ts.map +0 -1
- package/lib/typescript/bootstrap/SDKBootstrapper.d.ts.map +0 -1
- package/lib/typescript/bucketing/fnv1a32.d.ts.map +0 -1
- package/lib/typescript/compat/codepush.d.ts.map +0 -1
- package/lib/typescript/config/ConfigManager.d.ts.map +0 -1
- package/lib/typescript/config/configTypes.d.ts.map +0 -1
- package/lib/typescript/core/architecture.d.ts.map +0 -1
- package/lib/typescript/core/clock/now.d.ts.map +0 -1
- package/lib/typescript/core/config/defaults.d.ts.map +0 -1
- package/lib/typescript/core/config/schema.d.ts.map +0 -1
- package/lib/typescript/core/constants/endpoints.d.ts.map +0 -1
- package/lib/typescript/core/constants/protocol.d.ts.map +0 -1
- package/lib/typescript/core/constants/timings.d.ts.map +0 -1
- package/lib/typescript/core/constants/version.d.ts.map +0 -1
- package/lib/typescript/core/context/app.d.ts.map +0 -1
- package/lib/typescript/core/context/device.d.ts.map +0 -1
- package/lib/typescript/core/context/session.d.ts.map +0 -1
- package/lib/typescript/core/context/user.d.ts.map +0 -1
- package/lib/typescript/core/contracts/IFeature.d.ts.map +0 -1
- package/lib/typescript/core/di/container.d.ts.map +0 -1
- package/lib/typescript/core/encoding/base64.d.ts.map +0 -1
- package/lib/typescript/core/id/deviceId.d.ts.map +0 -1
- package/lib/typescript/core/id/installationId.d.ts.map +0 -1
- package/lib/typescript/core/id/sessionId.d.ts.map +0 -1
- package/lib/typescript/core/lifecycle/appLifecycle.d.ts.map +0 -1
- package/lib/typescript/core/lifecycle/crashSafe.d.ts.map +0 -1
- package/lib/typescript/core/logger/errorClassification.d.ts.map +0 -1
- package/lib/typescript/core/logger/internalLogger.d.ts.map +0 -1
- package/lib/typescript/core/logger/levels.d.ts.map +0 -1
- package/lib/typescript/crypto/hmacSha256.d.ts.map +0 -1
- package/lib/typescript/debug/bootstrap.d.ts.map +0 -1
- package/lib/typescript/debug/commands.d.ts.map +0 -1
- package/lib/typescript/debug/configBuilder.d.ts.map +0 -1
- package/lib/typescript/debug/exportBridge.d.ts.map +0 -1
- package/lib/typescript/debug/hostResolver.d.ts.map +0 -1
- package/lib/typescript/debug/index.d.ts.map +0 -1
- package/lib/typescript/debug/metrics.d.ts.map +0 -1
- package/lib/typescript/debug/perf.d.ts.map +0 -1
- package/lib/typescript/debug/perfWiring.d.ts.map +0 -1
- package/lib/typescript/debug/protocol.d.ts.map +0 -1
- package/lib/typescript/debug/redaction.d.ts.map +0 -1
- package/lib/typescript/debug/replayWiring.d.ts.map +0 -1
- package/lib/typescript/debug/screenTracking.d.ts.map +0 -1
- package/lib/typescript/debug/sessionWiring.d.ts.map +0 -1
- package/lib/typescript/debug/stream.d.ts.map +0 -1
- package/lib/typescript/debug/transport.d.ts.map +0 -1
- package/lib/typescript/features/bugreport/BugReportFeature.d.ts.map +0 -1
- package/lib/typescript/features/bugreport/buildPayload.d.ts.map +0 -1
- package/lib/typescript/features/bugreport/index.d.ts.map +0 -1
- package/lib/typescript/features/crash/CrashFeature.d.ts.map +0 -1
- package/lib/typescript/features/crash/CrashReporter.d.ts.map +0 -1
- package/lib/typescript/features/crash/NativeCrashFeature.d.ts.map +0 -1
- package/lib/typescript/features/crash/capture.d.ts.map +0 -1
- package/lib/typescript/features/crash/globalHandler.d.ts.map +0 -1
- package/lib/typescript/features/crash/index.d.ts.map +0 -1
- package/lib/typescript/features/crash/nativeCrashBridge.d.ts.map +0 -1
- package/lib/typescript/features/crash/rejectionHandler.d.ts.map +0 -1
- package/lib/typescript/features/engage/EngageAnchor.d.ts.map +0 -1
- package/lib/typescript/features/engage/EngageArchetypeRenderers.d.ts.map +0 -1
- package/lib/typescript/features/engage/EngageInAppView.d.ts.map +0 -1
- package/lib/typescript/features/engage/EngageInlinePlacement.d.ts.map +0 -1
- package/lib/typescript/features/engage/EngagePromptProvider.d.ts.map +0 -1
- package/lib/typescript/features/engage/EngagePromptView.d.ts.map +0 -1
- package/lib/typescript/features/engage/EngageTransport.d.ts.map +0 -1
- package/lib/typescript/features/engage/EngageVariantContent.d.ts.map +0 -1
- package/lib/typescript/features/engage/attachmentCapture.d.ts.map +0 -1
- package/lib/typescript/features/engage/captureVoiceAttachment.d.ts.map +0 -1
- package/lib/typescript/features/engage/engageCoachmarkTour.d.ts.map +0 -1
- package/lib/typescript/features/engage/engageGameLogic.d.ts.map +0 -1
- package/lib/typescript/features/engage/engageMediaSizing.d.ts.map +0 -1
- package/lib/typescript/features/engage/engageMultiStepSheet.d.ts.map +0 -1
- package/lib/typescript/features/engage/engageOutcome.d.ts.map +0 -1
- package/lib/typescript/features/engage/engagePushTokenBridge.d.ts.map +0 -1
- package/lib/typescript/features/engage/engageShakeBridge.d.ts.map +0 -1
- package/lib/typescript/features/engage/engageSignals.d.ts.map +0 -1
- package/lib/typescript/features/engage/engageStoreReviewBridge.d.ts.map +0 -1
- package/lib/typescript/features/engage/engageTestSeenStore.d.ts.map +0 -1
- package/lib/typescript/features/engage/engageThrottle.d.ts.map +0 -1
- package/lib/typescript/features/engage/engageTriggerEngine.d.ts.map +0 -1
- package/lib/typescript/features/engage/engageTypes.d.ts.map +0 -1
- package/lib/typescript/features/engage/engageVariantResolver.d.ts.map +0 -1
- package/lib/typescript/features/engage/engageWindowInsets.d.ts.map +0 -1
- package/lib/typescript/features/engage/gestureTriggerDetector.d.ts.map +0 -1
- package/lib/typescript/features/engage/transcription/TranscriptionProvider.d.ts.map +0 -1
- package/lib/typescript/features/install-referrer/installReferrer.d.ts.map +0 -1
- package/lib/typescript/features/journey/ScaleBunDebugRoot.d.ts.map +0 -1
- package/lib/typescript/features/journey/ScaleBunFlatList.d.ts.map +0 -1
- package/lib/typescript/features/journey/ScaleBunImpression.d.ts.map +0 -1
- package/lib/typescript/features/journey/ScaleBunScrollView.d.ts.map +0 -1
- package/lib/typescript/features/journey/ScaleBunSectionList.d.ts.map +0 -1
- package/lib/typescript/features/journey/calibrationContext.d.ts.map +0 -1
- package/lib/typescript/features/journey/gestureBuffer.d.ts.map +0 -1
- package/lib/typescript/features/journey/gestureDetector.d.ts.map +0 -1
- package/lib/typescript/features/journey/impression.d.ts.map +0 -1
- package/lib/typescript/features/journey/journeyManager.d.ts.map +0 -1
- package/lib/typescript/features/journey/journeyTypes.d.ts.map +0 -1
- package/lib/typescript/features/journey/navDetector.d.ts.map +0 -1
- package/lib/typescript/features/journey/screenshotHelper.d.ts.map +0 -1
- package/lib/typescript/features/journey/targetRegistry.d.ts.map +0 -1
- package/lib/typescript/features/journey/touchTarget.d.ts.map +0 -1
- package/lib/typescript/features/navigation/AutoScreenDetector.d.ts.map +0 -1
- package/lib/typescript/features/network/NetworkFeature.d.ts.map +0 -1
- package/lib/typescript/features/network/index.d.ts.map +0 -1
- package/lib/typescript/features/ota/OtaEventEmitter.d.ts.map +0 -1
- package/lib/typescript/features/ota/OtaOrchestrator.d.ts.map +0 -1
- package/lib/typescript/features/ota/OtaTypes.d.ts.map +0 -1
- package/lib/typescript/features/ota/deviceAttributes.d.ts.map +0 -1
- package/lib/typescript/features/ota/environment.d.ts.map +0 -1
- package/lib/typescript/features/ota/geoCountry.d.ts.map +0 -1
- package/lib/typescript/features/ota/retry.d.ts.map +0 -1
- package/lib/typescript/features/ota/signature.d.ts.map +0 -1
- package/lib/typescript/features/ota/useOtaUpdate.d.ts.map +0 -1
- package/lib/typescript/features/performance/PerformanceFeature.d.ts.map +0 -1
- package/lib/typescript/features/performance/collectors/AppLaunchCollector.d.ts.map +0 -1
- package/lib/typescript/features/performance/collectors/AutoScreenLoadCollector.d.ts.map +0 -1
- package/lib/typescript/features/performance/collectors/CustomTraceCollector.d.ts.map +0 -1
- package/lib/typescript/features/performance/collectors/FrameMetricsCollector.d.ts.map +0 -1
- package/lib/typescript/features/performance/collectors/JsStallCollector.d.ts.map +0 -1
- package/lib/typescript/features/performance/collectors/NetworkPerfCollector.d.ts.map +0 -1
- package/lib/typescript/features/performance/collectors/ScreenLoadCollector.d.ts.map +0 -1
- package/lib/typescript/features/performance/collectors/UiHangCollector.d.ts.map +0 -1
- package/lib/typescript/features/performance/config.d.ts.map +0 -1
- package/lib/typescript/features/performance/getNativePerformanceModule.d.ts.map +0 -1
- package/lib/typescript/features/performance/index.d.ts.map +0 -1
- package/lib/typescript/features/performance/metrics/MetricsEngine.d.ts.map +0 -1
- package/lib/typescript/features/performance/models.d.ts.map +0 -1
- package/lib/typescript/features/performance/transport/PerformanceTransport.d.ts.map +0 -1
- package/lib/typescript/features/profiler/ProfilerFeature.d.ts.map +0 -1
- package/lib/typescript/features/profiler/config.d.ts.map +0 -1
- package/lib/typescript/features/profiler/contracts.d.ts.map +0 -1
- package/lib/typescript/features/profiler/index.d.ts.map +0 -1
- package/lib/typescript/features/profiler/models.d.ts.map +0 -1
- package/lib/typescript/features/profiler/transport/ProfilerTransport.d.ts.map +0 -1
- package/lib/typescript/features/replay/bridge/adapters/bridgeAdapter.d.ts.map +0 -1
- package/lib/typescript/features/replay/bridge/eventEmitter.d.ts.map +0 -1
- package/lib/typescript/features/replay/bridge/nativeModule.d.ts.map +0 -1
- package/lib/typescript/features/replay/core/clock/clock.d.ts.map +0 -1
- package/lib/typescript/features/replay/core/config/defaults.d.ts.map +0 -1
- package/lib/typescript/features/replay/core/config/validator.d.ts.map +0 -1
- package/lib/typescript/features/replay/core/env/environmentDetector.d.ts.map +0 -1
- package/lib/typescript/features/replay/core/errors/safeCall.d.ts.map +0 -1
- package/lib/typescript/features/replay/core/ids/sessionId.d.ts.map +0 -1
- package/lib/typescript/features/replay/core/logger/logger.d.ts.map +0 -1
- package/lib/typescript/features/replay/core/privacy/privacyTypes.d.ts.map +0 -1
- package/lib/typescript/features/replay/core/queue/boundedQueue.d.ts.map +0 -1
- package/lib/typescript/features/replay/integrations/alert/alertInstrumentation.d.ts.map +0 -1
- package/lib/typescript/features/replay/integrations/logs/consoleIntegration.d.ts.map +0 -1
- package/lib/typescript/features/replay/integrations/network/networkAdapter.d.ts.map +0 -1
- package/lib/typescript/features/replay/integrations/react-navigation/navigationIntegration.d.ts.map +0 -1
- package/lib/typescript/features/replay/integrations/touch/ReplayRoot.d.ts.map +0 -1
- package/lib/typescript/features/replay/pipeline/batching/batchManager.d.ts.map +0 -1
- package/lib/typescript/features/replay/pipeline/envelope/envelopeBuilder.d.ts.map +0 -1
- package/lib/typescript/features/replay/pipeline/retry/retryPolicy.d.ts.map +0 -1
- package/lib/typescript/features/replay/pipeline/transport/transportTypes.d.ts.map +0 -1
- package/lib/typescript/features/replay/public/api.d.ts.map +0 -1
- package/lib/typescript/features/replay/public/enums.d.ts.map +0 -1
- package/lib/typescript/features/replay/public/types.d.ts.map +0 -1
- package/lib/typescript/features/replay/replay/breadcrumbs/breadcrumbCollector.d.ts.map +0 -1
- package/lib/typescript/features/replay/replay/frames/frameModels.d.ts.map +0 -1
- package/lib/typescript/features/replay/replay/session/sessionOrchestrator.d.ts.map +0 -1
- package/lib/typescript/features/replay/replay/timeline/timelineModels.d.ts.map +0 -1
- package/lib/typescript/features/replay/transport/BackendReplayTransport.d.ts.map +0 -1
- package/lib/typescript/features/replay/transport/CompositeReplayTransport.d.ts.map +0 -1
- package/lib/typescript/features/replay/transport/DesktopReplayTransport.d.ts.map +0 -1
- package/lib/typescript/features/replay/transport/ReplayTransport.d.ts.map +0 -1
- package/lib/typescript/features/session/BackendSessionAdapter.d.ts.map +0 -1
- package/lib/typescript/features/session/DesktopSessionTransport.d.ts.map +0 -1
- package/lib/typescript/features/session/JourneyEventPipeline.d.ts.map +0 -1
- package/lib/typescript/features/session/ReplayCaptureManager.d.ts.map +0 -1
- package/lib/typescript/features/session/ScrollTracker.d.ts.map +0 -1
- package/lib/typescript/features/session/SessionManager.d.ts.map +0 -1
- package/lib/typescript/features/session/SyncDecisionEngine.d.ts.map +0 -1
- package/lib/typescript/features/session/index.d.ts.map +0 -1
- package/lib/typescript/features/session/nativeCapture.d.ts.map +0 -1
- package/lib/typescript/features/session/outboxFrameCapture.d.ts.map +0 -1
- package/lib/typescript/features/session/sessionTypes.d.ts.map +0 -1
- package/lib/typescript/features/skan/skanBridge.d.ts.map +0 -1
- package/lib/typescript/features/skan/skanConversionManager.d.ts.map +0 -1
- package/lib/typescript/index.d.ts.map +0 -1
- package/lib/typescript/integrations/fetch/fetchInterceptor.d.ts.map +0 -1
- package/lib/typescript/integrations/navigation/screenTracker.d.ts.map +0 -1
- package/lib/typescript/integrations/network/bodyCapture.d.ts.map +0 -1
- package/lib/typescript/integrations/xhr/xhrInterceptor.d.ts.map +0 -1
- package/lib/typescript/metro/composeSourceMap.d.ts.map +0 -1
- package/lib/typescript/metro/featureModules.d.ts.map +0 -1
- package/lib/typescript/metro/index.d.ts.map +0 -1
- package/lib/typescript/metro/optionalDependencyStub.d.ts.map +0 -1
- package/lib/typescript/metro/optionalModules.d.ts.map +0 -1
- package/lib/typescript/metro/serializerCompose.d.ts.map +0 -1
- package/lib/typescript/pipeline/dispatcher/dispatcher.d.ts.map +0 -1
- package/lib/typescript/pipeline/envelope/envelope.d.ts.map +0 -1
- package/lib/typescript/pipeline/envelope/serializer.d.ts.map +0 -1
- package/lib/typescript/pipeline/processors/dedupe.d.ts.map +0 -1
- package/lib/typescript/pipeline/processors/enrich.d.ts.map +0 -1
- package/lib/typescript/pipeline/processors/sampling.d.ts.map +0 -1
- package/lib/typescript/pipeline/processors/sanitize.d.ts.map +0 -1
- package/lib/typescript/pipeline/queue/flushQueue.d.ts.map +0 -1
- package/lib/typescript/pipeline/queue/memoryQueue.d.ts.map +0 -1
- package/lib/typescript/pipeline/queue/persistentQueue.d.ts.map +0 -1
- package/lib/typescript/pipeline/queue/queuePolicy.d.ts.map +0 -1
- package/lib/typescript/pipeline/scheduler/flushScheduler.d.ts.map +0 -1
- package/lib/typescript/pipeline/scheduler/retryPolicy.d.ts.map +0 -1
- package/lib/typescript/public/ScaleBunErrorBoundary.d.ts.map +0 -1
- package/lib/typescript/public/ScaleBunFacade.d.ts.map +0 -1
- package/lib/typescript/public/ScaleBunProvider.d.ts.map +0 -1
- package/lib/typescript/public/typedTracker.d.ts.map +0 -1
- package/lib/typescript/public/types.d.ts.map +0 -1
- package/lib/typescript/push/PushManager.d.ts.map +0 -1
- package/lib/typescript/push/adapters/ManualAdapter.d.ts.map +0 -1
- package/lib/typescript/push/adapters/NativeBridgeAdapter.d.ts.map +0 -1
- package/lib/typescript/push/adapters/NoopAdapter.d.ts.map +0 -1
- package/lib/typescript/push/adapters/RNFirebaseMessagingAdapter.d.ts.map +0 -1
- package/lib/typescript/push/adapters/loadMessaging.d.ts.map +0 -1
- package/lib/typescript/push/adapters/loadNotifee.d.ts.map +0 -1
- package/lib/typescript/push/adapters/selectAdapter.d.ts.map +0 -1
- package/lib/typescript/push/detect/capabilities.d.ts.map +0 -1
- package/lib/typescript/push/index.d.ts.map +0 -1
- package/lib/typescript/push/native/nativeNotifications.d.ts.map +0 -1
- package/lib/typescript/push/types.d.ts.map +0 -1
- package/lib/typescript/specs/NativeReplaySdk.d.ts.map +0 -1
- package/lib/typescript/specs/NativeScaleBunCrash.d.ts.map +0 -1
- package/lib/typescript/specs/NativeScaleBunInstallReferrer.d.ts.map +0 -1
- package/lib/typescript/specs/NativeScaleBunOta.d.ts.map +0 -1
- package/lib/typescript/specs/NativeScaleBunPerformance.d.ts.map +0 -1
- package/lib/typescript/specs/NativeScaleBunProfiler.d.ts.map +0 -1
- package/lib/typescript/specs/NativeScaleBunStorage.d.ts.map +0 -1
- package/lib/typescript/storage/StorageBackend.d.ts.map +0 -1
- package/lib/typescript/storage/db/sqlite.d.ts.map +0 -1
- package/lib/typescript/storage/files/fileStore.d.ts.map +0 -1
- package/lib/typescript/transport/auth/sdkSession.d.ts.map +0 -1
- package/lib/typescript/transport/backoff/exponentialJitter.d.ts.map +0 -1
- package/lib/typescript/transport/http/endpoints.d.ts.map +0 -1
- package/lib/typescript/transport/http/httpClient.d.ts.map +0 -1
- package/lib/typescript/transport/rateLimit/retryAfter.d.ts.map +0 -1
- package/lib/typescript/transport/signing/requestSigner.d.ts.map +0 -1
- package/lib/typescript/vendor/protocol/index.d.ts.map +0 -1
- package/lib/typescript/vendor/protocol/internal/validation.d.ts.map +0 -1
- package/lib/typescript/vendor/sdk-contracts/bridge.d.ts.map +0 -1
- package/lib/typescript/vendor/sdk-contracts/config.d.ts.map +0 -1
- package/lib/typescript/vendor/sdk-contracts/events.d.ts.map +0 -1
- package/lib/typescript/vendor/sdk-contracts/features.d.ts.map +0 -1
- package/lib/typescript/vendor/sdk-contracts/index.d.ts.map +0 -1
- package/lib/typescript/vendor/sdk-contracts/platform.d.ts.map +0 -1
- package/lib/typescript/vendor/sdk-contracts/session-boundary.d.ts.map +0 -1
- package/lib/typescript/vendor/sdk-contracts/session.d.ts.map +0 -1
|
@@ -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);
|
|
@@ -99,6 +99,13 @@ class BackendSessionAdapter {
|
|
|
99
99
|
// the flush timer retries, so nothing is lost to a start/child race. The durable native
|
|
100
100
|
// outbox path has its own ordering; this guards only the JS in-memory fallback.
|
|
101
101
|
_startedSessionIds = new Set();
|
|
102
|
+
// §11 offline-start recovery: INGESTION_START payloads whose POST failed (e.g. the app
|
|
103
|
+
// launched with no connectivity). Without this, a failed START was logged and forgotten —
|
|
104
|
+
// the row-ready gate never opened, every child lane re-buffered forever, and the session
|
|
105
|
+
// stayed stuck until an app restart even after the network returned. Each flush tick
|
|
106
|
+
// re-attempts these until acked (network errors keep retrying; permanent 4xx gives up).
|
|
107
|
+
_pendingStartPayloads = new Map();
|
|
108
|
+
_startRetryInFlight = false;
|
|
102
109
|
pendingFrames = [];
|
|
103
110
|
pendingEvents = [];
|
|
104
111
|
pendingNetworkRequests = [];
|
|
@@ -234,11 +241,20 @@ class BackendSessionAdapter {
|
|
|
234
241
|
}
|
|
235
242
|
};
|
|
236
243
|
__DEV__ && _internalLogger.logger.debug(`[BackendSessionAdapter] POST session start: ${session.sessionId}`);
|
|
237
|
-
return this._post(startEndpoint, payload)
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
244
|
+
return this._post(startEndpoint, payload).then(() => {
|
|
245
|
+
// §11: row now exists — release the child-lane flush gate for this id.
|
|
246
|
+
this._startedSessionIds.add(session.sessionId);
|
|
247
|
+
this._pendingStartPayloads.delete(session.sessionId);
|
|
248
|
+
__DEV__ && _internalLogger.logger.info(`[ScaleBun Replay] backend session upload success`);
|
|
249
|
+
}, err => {
|
|
250
|
+
// Offline-start recovery: keep the payload; the flush timer re-attempts it
|
|
251
|
+
// until the row is acked. A permanent 4xx (rejected key) is not retried —
|
|
252
|
+
// the same payload can never succeed.
|
|
253
|
+
if (!BackendSessionAdapter._isPermanentHttpError(err)) {
|
|
254
|
+
this._pendingStartPayloads.set(session.sessionId, payload);
|
|
255
|
+
}
|
|
256
|
+
_internalLogger.logger.info(`[ScaleBun Replay] backend session upload failure`);
|
|
257
|
+
});
|
|
242
258
|
}).catch(() => _internalLogger.logger.info(`[ScaleBun Replay] backend session upload failure`));
|
|
243
259
|
}
|
|
244
260
|
sendSessionEnd(session) {
|
|
@@ -333,10 +349,22 @@ class BackendSessionAdapter {
|
|
|
333
349
|
environment: m?.buildType
|
|
334
350
|
}
|
|
335
351
|
};
|
|
336
|
-
|
|
352
|
+
try {
|
|
353
|
+
await this._post(startEndpoint, payload);
|
|
354
|
+
} catch (err) {
|
|
355
|
+
// Offline-start recovery: keep the payload for the flush-tick retry loop.
|
|
356
|
+
// Without this a session that started with no connectivity NEVER opened its
|
|
357
|
+
// row-ready gate — frames/events re-buffered for the life of the process and
|
|
358
|
+
// only an app restart recovered it, even after the network came back.
|
|
359
|
+
if (!BackendSessionAdapter._isPermanentHttpError(err)) {
|
|
360
|
+
this._pendingStartPayloads.set(session.sessionId, payload);
|
|
361
|
+
}
|
|
362
|
+
throw err;
|
|
363
|
+
}
|
|
337
364
|
// §11: row exists. When recording adopts this analytics id (one-row merge),
|
|
338
365
|
// this also releases the recording child-lane gate (_sessionRowReady).
|
|
339
366
|
this._startedSessionIds.add(session.sessionId);
|
|
367
|
+
this._pendingStartPayloads.delete(session.sessionId);
|
|
340
368
|
// Row is confirmed — replay any events buffered while START was in flight.
|
|
341
369
|
// The pre-ack flush at the top of this method is gated off until now, so
|
|
342
370
|
// this is what actually drains the pre-ready buffer (no premature 404).
|
|
@@ -347,6 +375,42 @@ class BackendSessionAdapter {
|
|
|
347
375
|
}
|
|
348
376
|
}
|
|
349
377
|
|
|
378
|
+
/**
|
|
379
|
+
* Re-attempt any INGESTION_START whose POST failed (offline app launch). Runs on every
|
|
380
|
+
* flush tick of BOTH lanes — cheap no-op when the map is empty, single-flight guarded.
|
|
381
|
+
* On ack: opens the row-ready gate and drains whichever lane the id belongs to, which is
|
|
382
|
+
* exactly what un-sticks a replay that started offline once connectivity returns.
|
|
383
|
+
*/
|
|
384
|
+
_retryPendingStarts() {
|
|
385
|
+
if (this.destroyed || this._startRetryInFlight || this._pendingStartPayloads.size === 0) return;
|
|
386
|
+
const entry = this._pendingStartPayloads.entries().next().value;
|
|
387
|
+
if (!entry) return;
|
|
388
|
+
const [sessionId, payload] = entry;
|
|
389
|
+
// A stale pending start for a session that already ended AND is not the open analytics
|
|
390
|
+
// session would create a row nothing will ever finalize — drop it instead.
|
|
391
|
+
const stillRelevant = sessionId === this.currentSessionId || sessionId === this._analyticsSessionId;
|
|
392
|
+
if (!stillRelevant) {
|
|
393
|
+
this._pendingStartPayloads.delete(sessionId);
|
|
394
|
+
return;
|
|
395
|
+
}
|
|
396
|
+
this._startRetryInFlight = true;
|
|
397
|
+
const startEndpoint = this.config.clientKey ? _endpoints.ENDPOINTS.INGESTION_START : '/replay/sessions';
|
|
398
|
+
this._post(startEndpoint, payload).then(() => {
|
|
399
|
+
this._startedSessionIds.add(sessionId);
|
|
400
|
+
this._pendingStartPayloads.delete(sessionId);
|
|
401
|
+
__DEV__ && _internalLogger.logger.info(`[ScaleBun Replay] deferred session start delivered: ${sessionId}`);
|
|
402
|
+
if (sessionId === this._analyticsSessionId) {
|
|
403
|
+
this._flushAnalyticsEvents().catch(() => {});
|
|
404
|
+
}
|
|
405
|
+
}).catch(err => {
|
|
406
|
+
if (BackendSessionAdapter._isPermanentHttpError(err)) {
|
|
407
|
+
this._pendingStartPayloads.delete(sessionId); // will never succeed — stop retrying
|
|
408
|
+
}
|
|
409
|
+
}).finally(() => {
|
|
410
|
+
this._startRetryInFlight = false;
|
|
411
|
+
});
|
|
412
|
+
}
|
|
413
|
+
|
|
350
414
|
/**
|
|
351
415
|
* Enqueue a user track() event. Buffers (bounded, drop-oldest) when the
|
|
352
416
|
* analytics session is not yet open; flushes at >=20 once it is.
|
|
@@ -494,6 +558,7 @@ class BackendSessionAdapter {
|
|
|
494
558
|
_startAnalyticsFlushTimer() {
|
|
495
559
|
this._stopAnalyticsFlushTimer();
|
|
496
560
|
this.analyticsFlushTimer = setInterval(() => {
|
|
561
|
+
this._retryPendingStarts();
|
|
497
562
|
this._flushAnalyticsEvents().catch(() => {});
|
|
498
563
|
}, this.config.flushIntervalMs);
|
|
499
564
|
}
|
|
@@ -740,6 +805,7 @@ class BackendSessionAdapter {
|
|
|
740
805
|
this._analyticsSessionId = null;
|
|
741
806
|
this._pendingFinalizeId = null;
|
|
742
807
|
this._startedSessionIds.clear();
|
|
808
|
+
this._pendingStartPayloads.clear();
|
|
743
809
|
}
|
|
744
810
|
|
|
745
811
|
// ─── Internal: Flush ────────────────────────────────────────────────
|
|
@@ -1366,6 +1432,7 @@ class BackendSessionAdapter {
|
|
|
1366
1432
|
_startFlushTimer() {
|
|
1367
1433
|
this._stopFlushTimer();
|
|
1368
1434
|
this.flushTimer = setInterval(() => {
|
|
1435
|
+
this._retryPendingStarts();
|
|
1369
1436
|
this._flushFrames().catch(() => {});
|
|
1370
1437
|
this._flushEvents().catch(() => {});
|
|
1371
1438
|
this._flushNetwork().catch(() => {});
|
|
@@ -91,6 +91,22 @@ class SessionManager {
|
|
|
91
91
|
* differently across devices and pushes markers ~10% off vertically).
|
|
92
92
|
*/
|
|
93
93
|
_lastNativeViewportJsUnits = null;
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Exact-duplicate gesture suppression (QA: one physical tap recorded 2–3×).
|
|
97
|
+
*
|
|
98
|
+
* Measured in production data: the native tracker re-emitted the SAME tap — identical
|
|
99
|
+
* gestureType and identical coordinates to the SUB-PIXEL (e.g. x=466.962890625) — at
|
|
100
|
+
* 160–240ms gaps, sometimes twice. A human re-tap cannot reproduce a sub-pixel float
|
|
101
|
+
* exactly, so exact coordinate equality within the window is a safe discriminator: real
|
|
102
|
+
* double-taps land on at least slightly different pixels and pass through untouched.
|
|
103
|
+
* The pipeline's own 100ms dedup was too narrow for these; this window covers what was
|
|
104
|
+
* actually observed with margin. Sits at the ONE entry point every gesture source funnels
|
|
105
|
+
* through, so recording and analytics lanes are protected equally.
|
|
106
|
+
*/
|
|
107
|
+
_lastGestureSig = null;
|
|
108
|
+
_lastGestureTs = 0;
|
|
109
|
+
static GESTURE_DEDUP_WINDOW_MS = 400;
|
|
94
110
|
/** Memoized native file-outbox frame adapter (gated by the backend transport). */
|
|
95
111
|
_outboxFrameCapture = null;
|
|
96
112
|
constructor(debugTransport, nativeCapture, managerConfig) {
|
|
@@ -938,6 +954,18 @@ class SessionManager {
|
|
|
938
954
|
* Emits a USER_ACTION event with gesture-specific subtype and payload.
|
|
939
955
|
*/
|
|
940
956
|
onGestureDetected(gestureType, details) {
|
|
957
|
+
// Exact-duplicate suppression — see _lastGestureSig. Signature is the gesture type plus
|
|
958
|
+
// raw coordinates verbatim; String() keeps undefined coords distinct from 0 (a payload
|
|
959
|
+
// with no coords never collides with a real origin tap).
|
|
960
|
+
const dedupSig = `${gestureType}|${String(details?.x)}|${String(details?.y)}|${String(details?.endX)}|${String(details?.endY)}`;
|
|
961
|
+
const nowTs = Date.now();
|
|
962
|
+
if (dedupSig === this._lastGestureSig && nowTs - this._lastGestureTs <= SessionManager.GESTURE_DEDUP_WINDOW_MS) {
|
|
963
|
+
this._lastGestureTs = nowTs; // a burst of 3 stays suppressed even if gaps chain past the window
|
|
964
|
+
return;
|
|
965
|
+
}
|
|
966
|
+
this._lastGestureSig = dedupSig;
|
|
967
|
+
this._lastGestureTs = nowTs;
|
|
968
|
+
|
|
941
969
|
// Build the canonical gesture payload ONCE so the recording lane and the
|
|
942
970
|
// (additive) analytics lane carry byte-identical keys (normalizedX/Y,
|
|
943
971
|
// gestureType, etc.). Same object shape that was previously inlined.
|
|
@@ -20,6 +20,7 @@ var _debug = require("../debug");
|
|
|
20
20
|
var _api = require("../features/replay/public/api");
|
|
21
21
|
var _SDKBootstrapper = require("../bootstrap/SDKBootstrapper");
|
|
22
22
|
var _EventTracker = require("../analytics/EventTracker");
|
|
23
|
+
var _bridgeAdapter = require("../features/replay/bridge/adapters/bridgeAdapter");
|
|
23
24
|
var _automaticEvents = require("../analytics/automaticEvents");
|
|
24
25
|
var _eventLane = require("../analytics/eventLane");
|
|
25
26
|
var _ConfigManager = require("../config/ConfigManager");
|
|
@@ -313,6 +314,8 @@ class ScaleBunFacade {
|
|
|
313
314
|
* the whole time. The SDK knows the device; the integrator is guessing at it.
|
|
314
315
|
* Everything outside the detected keys is still theirs.
|
|
315
316
|
*/
|
|
317
|
+
// Everything Platform.constants knows. On iOS that is neither the model nor the
|
|
318
|
+
// manufacturer, so the bridge completes it below once it answers.
|
|
316
319
|
context: (0, _device.mergeDeviceContext)(rawConfig?.context),
|
|
317
320
|
// Use the same foreground id as replay/journey capture. The
|
|
318
321
|
// callback is resolved per event because the session subsystem
|
|
@@ -327,6 +330,19 @@ class ScaleBunFacade {
|
|
|
327
330
|
this._eventTracker.start();
|
|
328
331
|
__DEV__ && _internalLogger.logger.info('[ScaleBun] Envelope event tracking started → /v1/batch.');
|
|
329
332
|
|
|
333
|
+
// Complete the device context from the native bridge.
|
|
334
|
+
//
|
|
335
|
+
// `Platform.constants` answers Android synchronously — model and manufacturer ride the
|
|
336
|
+
// first event. It answers NEITHER on iOS, so without this every iOS installation
|
|
337
|
+
// reported no device model at all: `nativeDeviceContext` existed for exactly this and
|
|
338
|
+
// had no caller, and the bridge's own answer was `UIDevice.current.model` — the string
|
|
339
|
+
// "iPhone", identical on every iPhone ever made.
|
|
340
|
+
//
|
|
341
|
+
// Fire-and-forget on purpose. The bridge is async and absent entirely on Expo Go or an
|
|
342
|
+
// older native binary; waiting on it would delay the first event, and failing on it
|
|
343
|
+
// would take analytics down over a nice-to-have field.
|
|
344
|
+
this._applyNativeDeviceContext(this._eventTracker);
|
|
345
|
+
|
|
330
346
|
// Android: capture the Play Install Referrer once per install → feeds the
|
|
331
347
|
// deterministic click_id path + a one-off install_referrer event (UTM/gclid).
|
|
332
348
|
// Fire-and-forget; no-op off Android.
|
|
@@ -351,6 +367,24 @@ class ScaleBunFacade {
|
|
|
351
367
|
}
|
|
352
368
|
}
|
|
353
369
|
|
|
370
|
+
/**
|
|
371
|
+
* Fold the native bridge's device facts into the analytics context once it answers.
|
|
372
|
+
*
|
|
373
|
+
* Detected values never overwrite a populated one with an empty one — `nativeDeviceContext`
|
|
374
|
+
* drops absent keys and `applyDetectedContext` ignores an empty patch — so a bridge that
|
|
375
|
+
* cannot answer leaves whatever `Platform.constants` already found.
|
|
376
|
+
*/
|
|
377
|
+
_applyNativeDeviceContext(tracker) {
|
|
378
|
+
Promise.resolve().then(() => _bridgeAdapter.bridgeAdapter.getDeviceInfo()).then(info => {
|
|
379
|
+
if (!info) return;
|
|
380
|
+
tracker.applyDetectedContext((0, _device.nativeDeviceContext)({
|
|
381
|
+
osVersion: info.osVersion,
|
|
382
|
+
deviceModel: info.deviceModel
|
|
383
|
+
// iOS ships no manufacturer over the bridge; it is a constant there and the
|
|
384
|
+
// static path already set it. Android's arrives via Platform.constants.
|
|
385
|
+
}));
|
|
386
|
+
}).catch(() => {/* bridge unavailable — the static context stands */});
|
|
387
|
+
}
|
|
354
388
|
/**
|
|
355
389
|
* Android-only: read the Play Install Referrer once per install and route it into
|
|
356
390
|
* attribution. `scalebun_click_id` → the deterministic click path; the full
|
|
@@ -549,17 +583,94 @@ class ScaleBunFacade {
|
|
|
549
583
|
});
|
|
550
584
|
}
|
|
551
585
|
|
|
552
|
-
/**
|
|
553
|
-
|
|
586
|
+
/**
|
|
587
|
+
* Clear user identity.
|
|
588
|
+
*
|
|
589
|
+
* SB-11: pass `{ purgeLocal: true }` on logout / consent withdrawal to also
|
|
590
|
+
* erase all locally-stored SDK data (see {@link eraseLocalData}). Without it,
|
|
591
|
+
* behaviour is unchanged (identity-only clear).
|
|
592
|
+
*/
|
|
593
|
+
clearUser(options) {
|
|
554
594
|
return (0, _crashSafe.noThrow)(() => {
|
|
555
595
|
this._identifiedUserId = null;
|
|
556
596
|
this._pendingIdentity = null;
|
|
557
597
|
if (!this.initialized) return;
|
|
558
598
|
this._eventTracker?.clearIdentity();
|
|
559
599
|
this.track('$clear_user', {});
|
|
600
|
+
if (options?.purgeLocal) void this.eraseLocalData();
|
|
601
|
+
});
|
|
602
|
+
}
|
|
603
|
+
|
|
604
|
+
/**
|
|
605
|
+
* SB-11: erase all locally-stored SDK data from the device — the durable event
|
|
606
|
+
* queue, the pre-init buffer, and the first-party KV store (cached install /
|
|
607
|
+
* anonymous / session IDs, plus any queued payloads including SB-26 disk data).
|
|
608
|
+
*
|
|
609
|
+
* Order matters: capture is stopped FIRST so nothing is written back in behind
|
|
610
|
+
* the delete. Best-effort and never throws.
|
|
611
|
+
*
|
|
612
|
+
* Note: native replay frames written to disk on iOS are addressed separately
|
|
613
|
+
* (SB-15); this covers every store reachable from JS today.
|
|
614
|
+
*/
|
|
615
|
+
async eraseLocalData() {
|
|
616
|
+
try {
|
|
617
|
+
// 1) Stop capture so no new frames/events are produced mid-erase.
|
|
618
|
+
try {
|
|
619
|
+
_SessionManager.SessionManager.getExistingInstance()?.endSession('ended');
|
|
620
|
+
} catch {/* best-effort */}
|
|
621
|
+
// 2) Clear the durable queue and the pre-init buffer.
|
|
622
|
+
try {
|
|
623
|
+
this._getQueue().clear();
|
|
624
|
+
} catch {/* best-effort */}
|
|
625
|
+
try {
|
|
626
|
+
this._preInitBuffer.clear();
|
|
627
|
+
} catch {/* best-effort */}
|
|
628
|
+
// 3) Wipe the first-party KV store (cached IDs + any on-disk queue
|
|
629
|
+
// residue) by removing every key through the backend interface.
|
|
630
|
+
try {
|
|
631
|
+
const store = (0, _StorageBackend.createStorageBackend)();
|
|
632
|
+
for (const key of store.getAllKeys()) {
|
|
633
|
+
store.delete(key);
|
|
634
|
+
}
|
|
635
|
+
} catch {/* best-effort */}
|
|
636
|
+
} catch {
|
|
637
|
+
// Never throw — erasure is a safety operation on a best-effort basis.
|
|
638
|
+
}
|
|
639
|
+
}
|
|
640
|
+
|
|
641
|
+
/**
|
|
642
|
+
* SB-11: record the user's data-collection consent. When `enabled` is false,
|
|
643
|
+
* capture is stopped immediately; pass `{ purgeLocal: true }` to also erase
|
|
644
|
+
* everything already stored locally. Never throws.
|
|
645
|
+
*/
|
|
646
|
+
setConsent(enabled, options) {
|
|
647
|
+
(0, _crashSafe.noThrow)(() => {
|
|
648
|
+
if (enabled) return;
|
|
649
|
+
try {
|
|
650
|
+
_SessionManager.SessionManager.getExistingInstance()?.endSession('ended');
|
|
651
|
+
} catch {/* best-effort */}
|
|
652
|
+
if (options?.purgeLocal) void this.eraseLocalData();
|
|
560
653
|
});
|
|
561
654
|
}
|
|
562
655
|
|
|
656
|
+
/**
|
|
657
|
+
* SB-10: return the effective privacy policy actually in force, resolving the
|
|
658
|
+
* public config against the SDK's safe defaults. Lets callers and tests assert
|
|
659
|
+
* what is active rather than guessing from the (previously dead) config object.
|
|
660
|
+
*/
|
|
661
|
+
getEffectivePrivacyPolicy() {
|
|
662
|
+
const p = this._privacyConfig ?? {};
|
|
663
|
+
return {
|
|
664
|
+
// Real default is true (matches the replay capture default) — the old
|
|
665
|
+
// doc comment claiming "false" was both wrong and less safe.
|
|
666
|
+
maskTextInputs: p.maskTextInputs ?? true,
|
|
667
|
+
maskImages: p.maskImages ?? false,
|
|
668
|
+
redactAuth: p.redactAuth ?? true,
|
|
669
|
+
redactCookies: p.redactCookies ?? true,
|
|
670
|
+
redactBodies: p.redactBodies ?? false
|
|
671
|
+
};
|
|
672
|
+
}
|
|
673
|
+
|
|
563
674
|
/**
|
|
564
675
|
* Submit in-app rating (1-5 stars).
|
|
565
676
|
* Attaches to current session when available; otherwise sends standalone.
|
|
@@ -336,6 +336,28 @@ export class EventTracker {
|
|
|
336
336
|
this.persistQueue();
|
|
337
337
|
}
|
|
338
338
|
|
|
339
|
+
/**
|
|
340
|
+
* Fold in device facts that were not knowable at init.
|
|
341
|
+
*
|
|
342
|
+
* `Platform.constants` answers Android synchronously, so its model and manufacturer ride the
|
|
343
|
+
* very first event. iOS exposes neither there — only the native bridge knows, and the bridge is
|
|
344
|
+
* async and may not be installed at all. Without this the iOS half of every install reported no
|
|
345
|
+
* model whatsoever.
|
|
346
|
+
*
|
|
347
|
+
* `buildEnvelope` reads `cfg.context` per event, so applying it here reaches every event from
|
|
348
|
+
* the next one onward. Detected keys WIN over whatever the integrator configured, for the same
|
|
349
|
+
* reason `mergeDeviceContext` inverts the usual precedence: a measurement must not be
|
|
350
|
+
* overridable by a guess. Empty patches are ignored so a bridge that answered with nothing
|
|
351
|
+
* cannot blank a value the static path already found.
|
|
352
|
+
*/
|
|
353
|
+
applyDetectedContext(patch) {
|
|
354
|
+
if (!patch || Object.keys(patch).length === 0) return;
|
|
355
|
+
this.cfg.context = {
|
|
356
|
+
...(this.cfg.context ?? {}),
|
|
357
|
+
...patch
|
|
358
|
+
};
|
|
359
|
+
}
|
|
360
|
+
|
|
339
361
|
// ─── internals ─────────────────────────────────────────────────────────────
|
|
340
362
|
|
|
341
363
|
buildEnvelope(eventName, properties) {
|
|
@@ -317,6 +317,22 @@ export class SDKBootstrapper {
|
|
|
317
317
|
if (features.replay !== false) {
|
|
318
318
|
try {
|
|
319
319
|
__DEV__ && logger.debug('[Bootstrap] Initializing unified SessionManager');
|
|
320
|
+
// SB-10: map the public top-level privacy config onto the replay
|
|
321
|
+
// privacy policy — the field the native capture path actually reads.
|
|
322
|
+
// Unspecified fields fall back to the SDK's safe defaults
|
|
323
|
+
// (redactTextInputs: true), so this only ever tightens masking.
|
|
324
|
+
const pub = this.config.privacy ?? {};
|
|
325
|
+
const sessionReplay = {
|
|
326
|
+
...(this.config.replay ?? {})
|
|
327
|
+
};
|
|
328
|
+
if (typeof pub.maskTextInputs === 'boolean' || typeof pub.maskImages === 'boolean') {
|
|
329
|
+
sessionReplay.privacyPolicy = {
|
|
330
|
+
redactTextInputs: pub.maskTextInputs ?? true,
|
|
331
|
+
redactImages: pub.maskImages ?? false,
|
|
332
|
+
blockTestIds: [],
|
|
333
|
+
captureExclusions: []
|
|
334
|
+
};
|
|
335
|
+
}
|
|
320
336
|
const sessionManager = SessionManager.getInstance(null,
|
|
321
337
|
// No desktop transport initially
|
|
322
338
|
nativeCapture,
|
|
@@ -326,9 +342,7 @@ export class SDKBootstrapper {
|
|
|
326
342
|
// Also flow the Feature #4 heatmap flag so tap/gesture coords
|
|
327
343
|
// route to the analytics lane even when no recording is active.
|
|
328
344
|
{
|
|
329
|
-
|
|
330
|
-
sessionReplay: this.config.replay
|
|
331
|
-
} : {}),
|
|
345
|
+
sessionReplay: sessionReplay,
|
|
332
346
|
captureInteractionHeatmap: this.config.captureInteractionHeatmap === true
|
|
333
347
|
});
|
|
334
348
|
|
|
@@ -239,6 +239,35 @@ const SHAPE = {
|
|
|
239
239
|
})
|
|
240
240
|
}
|
|
241
241
|
},
|
|
242
|
+
// SB-10: the public, documented top-level privacy config. Previously only the
|
|
243
|
+
// nested replay privacy took effect; this is validated here and mapped onto the
|
|
244
|
+
// effective replay privacy policy in the bootstrapper so it actually masks.
|
|
245
|
+
privacy: {
|
|
246
|
+
kind: 'obj',
|
|
247
|
+
opt: true,
|
|
248
|
+
shape: {
|
|
249
|
+
maskTextInputs: {
|
|
250
|
+
kind: 'bool',
|
|
251
|
+
opt: true
|
|
252
|
+
},
|
|
253
|
+
maskImages: {
|
|
254
|
+
kind: 'bool',
|
|
255
|
+
opt: true
|
|
256
|
+
},
|
|
257
|
+
redactAuth: {
|
|
258
|
+
kind: 'bool',
|
|
259
|
+
opt: true
|
|
260
|
+
},
|
|
261
|
+
redactCookies: {
|
|
262
|
+
kind: 'bool',
|
|
263
|
+
opt: true
|
|
264
|
+
},
|
|
265
|
+
redactBodies: {
|
|
266
|
+
kind: 'bool',
|
|
267
|
+
opt: true
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
},
|
|
242
271
|
captureInteractionHeatmap: bool(true),
|
|
243
272
|
// Opt-in: intercept console.* and ship the lines to the Diagnose → Logs lane in SaaS
|
|
244
273
|
// mode. OFF by default — console output can carry PII/secrets and adds ingest volume,
|
|
@@ -92,6 +92,10 @@ export function staticDeviceContext() {
|
|
|
92
92
|
if (osVersion) out.os_version = String(osVersion);
|
|
93
93
|
if (c.Model) out.device_model = String(c.Model);
|
|
94
94
|
if (c.Manufacturer) out.manufacturer = String(c.Manufacturer);else if (c.Brand) out.manufacturer = String(c.Brand);
|
|
95
|
+
// iOS exposes no manufacturer because it does not need to: every device running iOS is Apple's.
|
|
96
|
+
// A tautology, not a guess — and it means the field is populated on event #1 rather than waiting
|
|
97
|
+
// for a bridge that may never answer.
|
|
98
|
+
else if (out.platform_os === 'ios') out.manufacturer = 'Apple';
|
|
95
99
|
return out;
|
|
96
100
|
}
|
|
97
101
|
|
|
@@ -101,6 +105,7 @@ export function nativeDeviceContext(info) {
|
|
|
101
105
|
if (!info) return out;
|
|
102
106
|
if (info.osVersion) out.os_version = info.osVersion;
|
|
103
107
|
if (info.deviceModel) out.device_model = info.deviceModel;
|
|
108
|
+
if (info.manufacturer) out.manufacturer = info.manufacturer;
|
|
104
109
|
return out;
|
|
105
110
|
}
|
|
106
111
|
|