@scalebun-release/react-native 2.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +154 -0
- package/android/build.gradle +94 -0
- package/android/consumer-rules.pro +28 -0
- package/android/src/androidTest/java/com/scalebun/rn/ota/ScaleBunOtaVerifierInstrumentedTest.kt +112 -0
- package/android/src/main/AndroidManifest.xml +14 -0
- package/android/src/main/java/com/scalebun/core/crash/CrashStorage.kt +155 -0
- package/android/src/main/java/com/scalebun/core/crash/NativeCrashHandler.kt +93 -0
- package/android/src/main/java/com/scalebun/core/performance/ANRWatchdog.kt +100 -0
- package/android/src/main/java/com/scalebun/core/performance/AppStartCollector.kt +180 -0
- package/android/src/main/java/com/scalebun/core/performance/FrameMetricsCollector.kt +230 -0
- package/android/src/main/java/com/scalebun/core/performance/PerformanceCore.kt +165 -0
- package/android/src/main/java/com/scalebun/profiler/ProfilerModule.kt +398 -0
- package/android/src/main/java/com/scalebun/profiler/ProfilerPackage.kt +24 -0
- package/android/src/main/java/com/scalebun/profiler/collectors/CpuCollector.kt +161 -0
- package/android/src/main/java/com/scalebun/profiler/collectors/IncidentDetector.kt +223 -0
- package/android/src/main/java/com/scalebun/profiler/collectors/MemoryCollector.kt +157 -0
- package/android/src/main/java/com/scalebun/profiler/collectors/RenderCollector.kt +194 -0
- package/android/src/main/java/com/scalebun/profiler/collectors/SamplerScheduler.kt +218 -0
- package/android/src/main/java/com/scalebun/profiler/collectors/ThreadCollector.kt +142 -0
- package/android/src/main/java/com/scalebun/replaysdk/ReplaySdkModule.kt +1117 -0
- package/android/src/main/java/com/scalebun/replaysdk/ReplaySdkPackage.kt +24 -0
- package/android/src/main/java/com/scalebun/replaysdk/capture/CaptureReason.kt +47 -0
- package/android/src/main/java/com/scalebun/replaysdk/capture/FrameCaptureManager.kt +574 -0
- package/android/src/main/java/com/scalebun/replaysdk/capture/FrameCaptureScheduler.kt +187 -0
- package/android/src/main/java/com/scalebun/replaysdk/capture/UiStabilityDetector.kt +214 -0
- package/android/src/main/java/com/scalebun/replaysdk/core/ReplayConfig.kt +144 -0
- package/android/src/main/java/com/scalebun/replaysdk/core/ReplayLogger.kt +31 -0
- package/android/src/main/java/com/scalebun/replaysdk/core/SessionIdGenerator.kt +15 -0
- package/android/src/main/java/com/scalebun/replaysdk/models/ReplayModels.kt +94 -0
- package/android/src/main/java/com/scalebun/replaysdk/outbox/NativeOutbox.kt +574 -0
- package/android/src/main/java/com/scalebun/replaysdk/outbox/OutboxUploader.kt +559 -0
- package/android/src/main/java/com/scalebun/replaysdk/privacy/PrivacyMaskProcessor.kt +126 -0
- package/android/src/main/java/com/scalebun/replaysdk/session/SessionManager.kt +322 -0
- package/android/src/main/java/com/scalebun/replaysdk/storage/ReplayStorage.kt +136 -0
- package/android/src/main/java/com/scalebun/replaysdk/timeline/TimelineCollector.kt +28 -0
- package/android/src/main/java/com/scalebun/replaysdk/tracking/InteractionTracker.kt +470 -0
- package/android/src/main/java/com/scalebun/replaysdk/tracking/ScreenTracker.kt +20 -0
- package/android/src/main/java/com/scalebun/replaysdk/tracking/ScrollContextProbe.kt +188 -0
- package/android/src/main/java/com/scalebun/replaysdk/transport/ReplayTransport.kt +99 -0
- package/android/src/main/java/com/scalebun/replaysdk/voice/VoiceRecorder.kt +121 -0
- package/android/src/main/java/com/scalebun/replaysdk/voice/VoiceTranscriber.kt +170 -0
- package/android/src/main/java/com/scalebun/rn/ScaleBunPackage.kt +113 -0
- package/android/src/main/java/com/scalebun/rn/crash/ScaleBunCrashModule.kt +188 -0
- package/android/src/main/java/com/scalebun/rn/crash/ScaleBunCrashPackage.kt +22 -0
- package/android/src/main/java/com/scalebun/rn/engage/ScaleBunEngageModule.kt +579 -0
- package/android/src/main/java/com/scalebun/rn/engage/ScaleBunEngagePackage.kt +22 -0
- package/android/src/main/java/com/scalebun/rn/engage/ScaleBunNotificationPresenter.kt +110 -0
- package/android/src/main/java/com/scalebun/rn/ota/BsPatch.kt +240 -0
- package/android/src/main/java/com/scalebun/rn/ota/BundleDownloader.kt +195 -0
- package/android/src/main/java/com/scalebun/rn/ota/DeviceIntegrity.kt +81 -0
- package/android/src/main/java/com/scalebun/rn/ota/DownloadFailure.kt +55 -0
- package/android/src/main/java/com/scalebun/rn/ota/OtaProtocol.kt +244 -0
- package/android/src/main/java/com/scalebun/rn/ota/ScaleBunOtaKeyRegistry.kt +100 -0
- package/android/src/main/java/com/scalebun/rn/ota/ScaleBunOtaModule.kt +683 -0
- package/android/src/main/java/com/scalebun/rn/ota/ScaleBunOtaReleaseVerifier.kt +136 -0
- package/android/src/main/java/com/scalebun/rn/ota/SlotManager.kt +578 -0
- package/android/src/main/java/com/scalebun/rn/ota/TlsPinning.kt +118 -0
- package/android/src/main/java/com/scalebun/rn/performance/PerformanceModule.kt +217 -0
- package/android/src/main/java/com/scalebun/rn/referrer/ScaleBunInstallReferrerModule.kt +77 -0
- package/android/src/main/java/com/scalebun/rn/storage/ScaleBunStorageModule.kt +68 -0
- package/android/src/main/java/com/scalebun/storage/KvFileStore.kt +174 -0
- package/android/src/newarch/java/com/scalebun/profiler/ProfilerSpec.kt +12 -0
- package/android/src/newarch/java/com/scalebun/replaysdk/ReplaySdkSpec.kt +12 -0
- package/android/src/newarch/java/com/scalebun/rn/crash/ScaleBunCrashSpec.kt +15 -0
- package/android/src/newarch/java/com/scalebun/rn/ota/ScaleBunOtaSpec.kt +16 -0
- package/android/src/newarch/java/com/scalebun/rn/performance/PerformanceSpec.kt +12 -0
- package/android/src/newarch/java/com/scalebun/rn/referrer/ScaleBunInstallReferrerSpec.kt +14 -0
- package/android/src/newarch/java/com/scalebun/rn/storage/ScaleBunStorageSpec.kt +16 -0
- package/android/src/oldarch/java/com/scalebun/profiler/ProfilerSpec.kt +34 -0
- package/android/src/oldarch/java/com/scalebun/replaysdk/ReplaySdkSpec.kt +77 -0
- package/android/src/oldarch/java/com/scalebun/rn/crash/ScaleBunCrashSpec.kt +40 -0
- package/android/src/oldarch/java/com/scalebun/rn/ota/ScaleBunOtaSpec.kt +42 -0
- package/android/src/oldarch/java/com/scalebun/rn/performance/PerformanceSpec.kt +27 -0
- package/android/src/oldarch/java/com/scalebun/rn/referrer/ScaleBunInstallReferrerSpec.kt +18 -0
- package/android/src/oldarch/java/com/scalebun/rn/storage/ScaleBunStorageSpec.kt +26 -0
- package/bin/lib/androidCodemod.js +370 -0
- package/bin/lib/iosCodemod.js +343 -0
- package/bin/scalebun.js +1004 -0
- package/dist/scalebun.full.js +37348 -0
- package/dist/scalebun.slim.js +34137 -0
- package/ios/Capture/InteractionTracker.swift +237 -0
- package/ios/Capture/PrivacyMaskProcessor.swift +158 -0
- package/ios/Capture/ScreenshotCaptureManager.swift +398 -0
- package/ios/Capture/WindowResolver.swift +63 -0
- package/ios/Core/DeviceIdentity.swift +50 -0
- package/ios/Core/ReplayConfig.swift +100 -0
- package/ios/Core/ReplayLogger.swift +22 -0
- package/ios/Core/SessionIdGenerator.swift +18 -0
- package/ios/Crash/ScaleBunCrashBridge.mm +74 -0
- package/ios/Crash/ScaleBunCrashHandler.swift +84 -0
- package/ios/Crash/ScaleBunCrashModule.swift +98 -0
- package/ios/Crash/ScaleBunCrashSignalBridge.h +49 -0
- package/ios/Crash/ScaleBunCrashSignalBridge.m +296 -0
- package/ios/Crash/ScaleBunCrashSignalStress.c +137 -0
- package/ios/Crash/ScaleBunCrashStorage.swift +121 -0
- package/ios/Crash/ScaleBunExceptionChain.swift +71 -0
- package/ios/CrashTests/ScaleBunExceptionChainTests.swift +144 -0
- package/ios/Engage/ScaleBunEngageBridge.m +32 -0
- package/ios/Engage/ScaleBunEngageModule.swift +250 -0
- package/ios/Engage/ScaleBunPushNotificationCenter.swift +185 -0
- package/ios/Ota/BsPatch.swift +203 -0
- package/ios/Ota/BundleDownloader.swift +249 -0
- package/ios/Ota/DeviceIntegrity.swift +112 -0
- package/ios/Ota/DownloadFailure.swift +56 -0
- package/ios/Ota/OtaProtocol.swift +246 -0
- package/ios/Ota/OtaSlotManager.swift +613 -0
- package/ios/Ota/ScaleBunOtaBridge.mm +92 -0
- package/ios/Ota/ScaleBunOtaEventsModule.swift +61 -0
- package/ios/Ota/ScaleBunOtaKeyRegistry.swift +147 -0
- package/ios/Ota/ScaleBunOtaModule.swift +587 -0
- package/ios/Ota/ScaleBunOtaReleaseVerifier.swift +119 -0
- package/ios/Ota/TlsPinning.swift +222 -0
- package/ios/OtaTests/DownloadFailureTests.swift +78 -0
- package/ios/OtaTests/ScaleBunOtaVerifierTests.swift +548 -0
- package/ios/Outbox/NativeOutbox.swift +632 -0
- package/ios/Outbox/OutboxUploader.swift +578 -0
- package/ios/Performance/ScaleBunPerformanceBridge.m +32 -0
- package/ios/Performance/ScaleBunPerformanceModule.swift +290 -0
- package/ios/PrivacyInfo.xcprivacy +97 -0
- package/ios/Profiler/ScaleBunProfilerBridge.m +55 -0
- package/ios/Profiler/ScaleBunProfilerModule.swift +966 -0
- package/ios/ReplaySdk-Bridging-Header.h +2 -0
- package/ios/ReplaySdk.swift +793 -0
- package/ios/ReplaySdkBridge.m +97 -0
- package/ios/Session/SessionManager.swift +273 -0
- package/ios/Skan/ScaleBunSkanBridge.m +14 -0
- package/ios/Skan/ScaleBunSkanModule.swift +61 -0
- package/ios/Storage/ReplayStorage.swift +61 -0
- package/ios/Storage/ScaleBunKvFileStore.swift +125 -0
- package/ios/Storage/ScaleBunStorageBridge.mm +72 -0
- package/ios/Storage/ScaleBunStorageModule.swift +57 -0
- package/ios/Transport/ReplayTransport.swift +70 -0
- package/ios/VoiceRecorder.swift +145 -0
- package/lib/commonjs/analytics/EventTracker.js +598 -0
- package/lib/commonjs/analytics/automaticEvents.js +71 -0
- package/lib/commonjs/analytics/batching.js +64 -0
- package/lib/commonjs/analytics/eventLane.js +55 -0
- package/lib/commonjs/analytics/revenue.js +125 -0
- package/lib/commonjs/analytics/subscription.js +94 -0
- package/lib/commonjs/bootstrap/FeatureRegistry.js +86 -0
- package/lib/commonjs/bootstrap/SDKBootstrapper.js +748 -0
- package/lib/commonjs/bucketing/fnv1a32.js +45 -0
- package/lib/commonjs/compat/codepush.js +153 -0
- package/lib/commonjs/config/ConfigManager.js +238 -0
- package/lib/commonjs/config/configTypes.js +16 -0
- package/lib/commonjs/config/otaPolicyState.js +85 -0
- package/lib/commonjs/config/quotaState.js +435 -0
- package/lib/commonjs/core/architecture.js +45 -0
- package/lib/commonjs/core/clock/now.js +13 -0
- package/lib/commonjs/core/config/defaults.js +2 -0
- package/lib/commonjs/core/config/schema.js +512 -0
- package/lib/commonjs/core/constants/endpoints.js +19 -0
- package/lib/commonjs/core/constants/protocol.js +31 -0
- package/lib/commonjs/core/constants/timings.js +39 -0
- package/lib/commonjs/core/constants/version.js +18 -0
- package/lib/commonjs/core/context/app.js +2 -0
- package/lib/commonjs/core/context/device.js +155 -0
- package/lib/commonjs/core/context/session.js +2 -0
- package/lib/commonjs/core/context/user.js +2 -0
- package/lib/commonjs/core/contracts/IFeature.js +2 -0
- package/lib/commonjs/core/di/container.js +29 -0
- package/lib/commonjs/core/encoding/base64.js +50 -0
- package/lib/commonjs/core/id/deviceId.js +52 -0
- package/lib/commonjs/core/id/installationId.js +55 -0
- package/lib/commonjs/core/id/sessionId.js +2 -0
- package/lib/commonjs/core/lifecycle/appLifecycle.js +31 -0
- package/lib/commonjs/core/lifecycle/crashSafe.js +33 -0
- package/lib/commonjs/core/logger/errorClassification.js +107 -0
- package/lib/commonjs/core/logger/internalLogger.js +63 -0
- package/lib/commonjs/core/logger/levels.js +2 -0
- package/lib/commonjs/crypto/hmacSha256.js +132 -0
- package/lib/commonjs/debug/bootstrap.js +429 -0
- package/lib/commonjs/debug/commands.js +732 -0
- package/lib/commonjs/debug/configBuilder.js +70 -0
- package/lib/commonjs/debug/exportBridge.js +155 -0
- package/lib/commonjs/debug/hostResolver.js +42 -0
- package/lib/commonjs/debug/index.js +141 -0
- package/lib/commonjs/debug/metrics.js +39 -0
- package/lib/commonjs/debug/perf.js +186 -0
- package/lib/commonjs/debug/perfWiring.js +109 -0
- package/lib/commonjs/debug/protocol.js +121 -0
- package/lib/commonjs/debug/redaction.js +422 -0
- package/lib/commonjs/debug/replayWiring.js +149 -0
- package/lib/commonjs/debug/screenTracking.js +60 -0
- package/lib/commonjs/debug/sessionWiring.js +48 -0
- package/lib/commonjs/debug/stream.js +542 -0
- package/lib/commonjs/debug/transport.js +368 -0
- package/lib/commonjs/features/bugreport/BugReportFeature.js +112 -0
- package/lib/commonjs/features/bugreport/buildPayload.js +97 -0
- package/lib/commonjs/features/bugreport/index.js +2 -0
- package/lib/commonjs/features/crash/CrashFeature.js +86 -0
- package/lib/commonjs/features/crash/CrashReporter.js +160 -0
- package/lib/commonjs/features/crash/NativeCrashFeature.js +42 -0
- package/lib/commonjs/features/crash/capture.js +48 -0
- package/lib/commonjs/features/crash/globalHandler.js +41 -0
- package/lib/commonjs/features/crash/index.js +14 -0
- package/lib/commonjs/features/crash/nativeCrashBridge.js +361 -0
- package/lib/commonjs/features/crash/rejectionHandler.js +180 -0
- package/lib/commonjs/features/crash/scrubCrash.js +158 -0
- package/lib/commonjs/features/engage/EngageAnchor.js +132 -0
- package/lib/commonjs/features/engage/EngageArchetypeRenderers.js +4292 -0
- package/lib/commonjs/features/engage/EngageInAppView.js +2670 -0
- package/lib/commonjs/features/engage/EngageInlinePlacement.js +133 -0
- package/lib/commonjs/features/engage/EngagePromptProvider.js +1063 -0
- package/lib/commonjs/features/engage/EngagePromptView.js +1252 -0
- package/lib/commonjs/features/engage/EngageTransport.js +608 -0
- package/lib/commonjs/features/engage/EngageVariantContent.js +1778 -0
- package/lib/commonjs/features/engage/__test-support__/reactNativeStub.js +54 -0
- package/lib/commonjs/features/engage/attachmentCapture.js +48 -0
- package/lib/commonjs/features/engage/captureVoiceAttachment.js +88 -0
- package/lib/commonjs/features/engage/engageCoachmarkTour.js +106 -0
- package/lib/commonjs/features/engage/engageGameLogic.js +308 -0
- package/lib/commonjs/features/engage/engageMediaSizing.js +60 -0
- package/lib/commonjs/features/engage/engageMultiStepSheet.js +43 -0
- package/lib/commonjs/features/engage/engageOutcome.js +118 -0
- package/lib/commonjs/features/engage/engagePushTokenBridge.js +72 -0
- package/lib/commonjs/features/engage/engageShakeBridge.js +62 -0
- package/lib/commonjs/features/engage/engageSignals.js +39 -0
- package/lib/commonjs/features/engage/engageStoreReviewBridge.js +49 -0
- package/lib/commonjs/features/engage/engageTestSeenStore.js +99 -0
- package/lib/commonjs/features/engage/engageThrottle.js +404 -0
- package/lib/commonjs/features/engage/engageTriggerEngine.js +365 -0
- package/lib/commonjs/features/engage/engageTypes.js +116 -0
- package/lib/commonjs/features/engage/engageVariantResolver.js +143 -0
- package/lib/commonjs/features/engage/engageWindowInsets.js +98 -0
- package/lib/commonjs/features/engage/gestureTriggerDetector.js +85 -0
- package/lib/commonjs/features/engage/transcription/TranscriptionProvider.js +55 -0
- package/lib/commonjs/features/install-referrer/installReferrer.js +113 -0
- package/lib/commonjs/features/journey/ScaleBunDebugRoot.js +1038 -0
- package/lib/commonjs/features/journey/ScaleBunFlatList.js +39 -0
- package/lib/commonjs/features/journey/ScaleBunImpression.js +113 -0
- package/lib/commonjs/features/journey/ScaleBunScrollView.js +102 -0
- package/lib/commonjs/features/journey/ScaleBunSectionList.js +39 -0
- package/lib/commonjs/features/journey/autoInstrumentScroll.js +161 -0
- package/lib/commonjs/features/journey/calibrationContext.js +42 -0
- package/lib/commonjs/features/journey/gestureBuffer.js +63 -0
- package/lib/commonjs/features/journey/gestureDetector.js +176 -0
- package/lib/commonjs/features/journey/impression.js +93 -0
- package/lib/commonjs/features/journey/interactionProtocol.js +168 -0
- package/lib/commonjs/features/journey/journeyManager.js +466 -0
- package/lib/commonjs/features/journey/journeyTypes.js +55 -0
- package/lib/commonjs/features/journey/nativeScroll.js +85 -0
- package/lib/commonjs/features/journey/navDetector.js +161 -0
- package/lib/commonjs/features/journey/screenshotHelper.js +136 -0
- package/lib/commonjs/features/journey/scrollContext.js +154 -0
- package/lib/commonjs/features/journey/targetGeometry.js +185 -0
- package/lib/commonjs/features/journey/targetRegistry.js +53 -0
- package/lib/commonjs/features/journey/touchTarget.js +249 -0
- package/lib/commonjs/features/journey/uiState.js +188 -0
- package/lib/commonjs/features/navigation/AutoScreenDetector.js +607 -0
- package/lib/commonjs/features/network/NetworkFeature.js +216 -0
- package/lib/commonjs/features/network/index.js +23 -0
- package/lib/commonjs/features/network/thirdParty.js +151 -0
- package/lib/commonjs/features/ota/OtaEventEmitter.js +129 -0
- package/lib/commonjs/features/ota/OtaOrchestrator.js +1309 -0
- package/lib/commonjs/features/ota/OtaTypes.js +6 -0
- package/lib/commonjs/features/ota/deviceAttributes.js +48 -0
- package/lib/commonjs/features/ota/environment.js +172 -0
- package/lib/commonjs/features/ota/geoCountry.js +93 -0
- package/lib/commonjs/features/ota/retry.js +96 -0
- package/lib/commonjs/features/ota/signedDownload.js +187 -0
- package/lib/commonjs/features/ota/useOtaUpdate.js +106 -0
- package/lib/commonjs/features/performance/PerformanceFeature.js +649 -0
- package/lib/commonjs/features/performance/collectors/AppLaunchCollector.js +122 -0
- package/lib/commonjs/features/performance/collectors/AutoScreenLoadCollector.js +232 -0
- package/lib/commonjs/features/performance/collectors/CustomTraceCollector.js +99 -0
- package/lib/commonjs/features/performance/collectors/FrameMetricsCollector.js +184 -0
- package/lib/commonjs/features/performance/collectors/JsStallCollector.js +165 -0
- package/lib/commonjs/features/performance/collectors/NetworkPerfCollector.js +59 -0
- package/lib/commonjs/features/performance/collectors/ScreenLoadCollector.js +78 -0
- package/lib/commonjs/features/performance/collectors/UiHangCollector.js +78 -0
- package/lib/commonjs/features/performance/config.js +58 -0
- package/lib/commonjs/features/performance/getNativePerformanceModule.js +44 -0
- package/lib/commonjs/features/performance/index.js +58 -0
- package/lib/commonjs/features/performance/metrics/MetricsEngine.js +148 -0
- package/lib/commonjs/features/performance/models.js +48 -0
- package/lib/commonjs/features/performance/transport/PerformanceTransport.js +168 -0
- package/lib/commonjs/features/profiler/ProfilerFeature.js +600 -0
- package/lib/commonjs/features/profiler/config.js +151 -0
- package/lib/commonjs/features/profiler/contracts.js +62 -0
- package/lib/commonjs/features/profiler/index.js +40 -0
- package/lib/commonjs/features/profiler/models.js +112 -0
- package/lib/commonjs/features/profiler/transport/ProfilerTransport.js +94 -0
- package/lib/commonjs/features/replay/bridge/adapters/bridgeAdapter.js +203 -0
- package/lib/commonjs/features/replay/bridge/eventEmitter.js +128 -0
- package/lib/commonjs/features/replay/bridge/nativeModule.js +95 -0
- package/lib/commonjs/features/replay/bridge/nativeQuota.js +121 -0
- package/lib/commonjs/features/replay/core/clock/clock.js +47 -0
- package/lib/commonjs/features/replay/core/config/defaults.js +88 -0
- package/lib/commonjs/features/replay/core/config/validator.js +109 -0
- package/lib/commonjs/features/replay/core/env/environmentDetector.js +28 -0
- package/lib/commonjs/features/replay/core/errors/safeCall.js +42 -0
- package/lib/commonjs/features/replay/core/ids/sessionId.js +53 -0
- package/lib/commonjs/features/replay/core/logger/logger.js +36 -0
- package/lib/commonjs/features/replay/core/privacy/privacyTypes.js +34 -0
- package/lib/commonjs/features/replay/core/queue/boundedQueue.js +71 -0
- package/lib/commonjs/features/replay/integrations/alert/alertInstrumentation.js +259 -0
- package/lib/commonjs/features/replay/integrations/logs/consoleIntegration.js +139 -0
- package/lib/commonjs/features/replay/integrations/network/networkAdapter.js +77 -0
- package/lib/commonjs/features/replay/integrations/react-navigation/navigationIntegration.js +88 -0
- package/lib/commonjs/features/replay/integrations/touch/ReplayRoot.js +103 -0
- package/lib/commonjs/features/replay/pipeline/batching/batchManager.js +119 -0
- package/lib/commonjs/features/replay/pipeline/envelope/envelopeBuilder.js +52 -0
- package/lib/commonjs/features/replay/pipeline/retry/retryPolicy.js +53 -0
- package/lib/commonjs/features/replay/pipeline/transport/transportTypes.js +67 -0
- package/lib/commonjs/features/replay/public/api.js +336 -0
- package/lib/commonjs/features/replay/public/enums.js +85 -0
- package/lib/commonjs/features/replay/public/types.js +6 -0
- package/lib/commonjs/features/replay/replay/breadcrumbs/breadcrumbCollector.js +119 -0
- package/lib/commonjs/features/replay/replay/frames/frameModels.js +40 -0
- package/lib/commonjs/features/replay/replay/session/sessionOrchestrator.js +279 -0
- package/lib/commonjs/features/replay/replay/timeline/timelineModels.js +120 -0
- package/lib/commonjs/features/replay/transport/BackendReplayTransport.js +175 -0
- package/lib/commonjs/features/replay/transport/CompositeReplayTransport.js +75 -0
- package/lib/commonjs/features/replay/transport/DesktopReplayTransport.js +124 -0
- package/lib/commonjs/features/replay/transport/ReplayTransport.js +2 -0
- package/lib/commonjs/features/session/BackendSessionAdapter.js +1915 -0
- package/lib/commonjs/features/session/DesktopSessionTransport.js +124 -0
- package/lib/commonjs/features/session/JourneyEventPipeline.js +244 -0
- package/lib/commonjs/features/session/ReplayCaptureManager.js +1253 -0
- package/lib/commonjs/features/session/ScrollTracker.js +147 -0
- package/lib/commonjs/features/session/SessionManager.js +1448 -0
- package/lib/commonjs/features/session/SyncDecisionEngine.js +95 -0
- package/lib/commonjs/features/session/frameLink.js +36 -0
- package/lib/commonjs/features/session/frameScrollState.js +41 -0
- package/lib/commonjs/features/session/index.js +84 -0
- package/lib/commonjs/features/session/nativeCapture.js +53 -0
- package/lib/commonjs/features/session/outboxFrameCapture.js +83 -0
- package/lib/commonjs/features/session/sessionTypes.js +230 -0
- package/lib/commonjs/features/session/viewportPlausibility.js +143 -0
- package/lib/commonjs/features/skan/skanBridge.js +54 -0
- package/lib/commonjs/features/skan/skanConversionManager.js +134 -0
- package/lib/commonjs/index.js +267 -0
- package/lib/commonjs/integrations/fetch/fetchInterceptor.js +174 -0
- package/lib/commonjs/integrations/navigation/screenTracker.js +2 -0
- package/lib/commonjs/integrations/network/bodyCapture.js +336 -0
- package/lib/commonjs/integrations/xhr/xhrInterceptor.js +224 -0
- package/lib/commonjs/metro/composeSourceMap.js +105 -0
- package/lib/commonjs/metro/featureModules.js +131 -0
- package/lib/commonjs/metro/index.js +230 -0
- package/lib/commonjs/metro/optionalDependencyStub.js +6 -0
- package/lib/commonjs/metro/optionalModules.js +31 -0
- package/lib/commonjs/metro/serializerCompose.js +161 -0
- package/lib/commonjs/pipeline/dispatcher/dispatcher.js +28 -0
- package/lib/commonjs/pipeline/envelope/envelope.js +17 -0
- package/lib/commonjs/pipeline/envelope/serializer.js +14 -0
- package/lib/commonjs/pipeline/processors/dedupe.js +2 -0
- package/lib/commonjs/pipeline/processors/enrich.js +16 -0
- package/lib/commonjs/pipeline/processors/sampling.js +2 -0
- package/lib/commonjs/pipeline/processors/sanitize.js +28 -0
- package/lib/commonjs/pipeline/queue/flushQueue.js +107 -0
- package/lib/commonjs/pipeline/queue/memoryQueue.js +31 -0
- package/lib/commonjs/pipeline/queue/persistentQueue.js +342 -0
- package/lib/commonjs/pipeline/queue/queuePolicy.js +2 -0
- package/lib/commonjs/pipeline/scheduler/flushScheduler.js +45 -0
- package/lib/commonjs/pipeline/scheduler/retryPolicy.js +15 -0
- package/lib/commonjs/public/ScaleBunErrorBoundary.js +91 -0
- package/lib/commonjs/public/ScaleBunFacade.js +2044 -0
- package/lib/commonjs/public/ScaleBunProvider.js +62 -0
- package/lib/commonjs/public/typedTracker.js +79 -0
- package/lib/commonjs/public/types.js +6 -0
- package/lib/commonjs/push/PushManager.js +270 -0
- package/lib/commonjs/push/adapters/ManualAdapter.js +86 -0
- package/lib/commonjs/push/adapters/NativeBridgeAdapter.js +131 -0
- package/lib/commonjs/push/adapters/NoopAdapter.js +45 -0
- package/lib/commonjs/push/adapters/RNFirebaseMessagingAdapter.js +248 -0
- package/lib/commonjs/push/adapters/loadMessaging.js +29 -0
- package/lib/commonjs/push/adapters/loadNotifee.js +36 -0
- package/lib/commonjs/push/adapters/selectAdapter.js +153 -0
- package/lib/commonjs/push/detect/capabilities.js +136 -0
- package/lib/commonjs/push/index.js +33 -0
- package/lib/commonjs/push/native/nativeNotifications.js +168 -0
- package/lib/commonjs/push/types.js +2 -0
- package/lib/commonjs/specs/NativeReplaySdk.js +28 -0
- package/lib/commonjs/specs/NativeScaleBunCrash.js +30 -0
- package/lib/commonjs/specs/NativeScaleBunInstallReferrer.js +24 -0
- package/lib/commonjs/specs/NativeScaleBunOta.js +32 -0
- package/lib/commonjs/specs/NativeScaleBunPerformance.js +25 -0
- package/lib/commonjs/specs/NativeScaleBunProfiler.js +26 -0
- package/lib/commonjs/specs/NativeScaleBunStorage.js +40 -0
- package/lib/commonjs/storage/StorageBackend.js +240 -0
- package/lib/commonjs/storage/db/sqlite.js +2 -0
- package/lib/commonjs/storage/files/fileStore.js +2 -0
- package/lib/commonjs/transport/auth/sdkSession.js +28 -0
- package/lib/commonjs/transport/backoff/exponentialJitter.js +16 -0
- package/lib/commonjs/transport/http/endpoints.js +46 -0
- package/lib/commonjs/transport/http/httpClient.js +72 -0
- package/lib/commonjs/transport/rateLimit/retryAfter.js +2 -0
- package/lib/commonjs/transport/signing/requestSigner.js +2 -0
- package/lib/commonjs/vendor/protocol/index.js +327 -0
- package/lib/commonjs/vendor/protocol/internal/validation.js +429 -0
- package/lib/commonjs/vendor/sdk-contracts/bridge.js +2 -0
- package/lib/commonjs/vendor/sdk-contracts/config.js +2 -0
- package/lib/commonjs/vendor/sdk-contracts/events.js +2 -0
- package/lib/commonjs/vendor/sdk-contracts/features.js +2 -0
- package/lib/commonjs/vendor/sdk-contracts/index.js +2 -0
- package/lib/commonjs/vendor/sdk-contracts/platform.js +2 -0
- package/lib/commonjs/vendor/sdk-contracts/session-boundary.js +6 -0
- package/lib/commonjs/vendor/sdk-contracts/session.js +2 -0
- package/lib/commonjs/vendor/vendor.manifest +10 -0
- package/lib/module/analytics/EventTracker.js +592 -0
- package/lib/module/analytics/automaticEvents.js +63 -0
- package/lib/module/analytics/batching.js +55 -0
- package/lib/module/analytics/eventLane.js +47 -0
- package/lib/module/analytics/revenue.js +117 -0
- package/lib/module/analytics/subscription.js +86 -0
- package/lib/module/bootstrap/FeatureRegistry.js +79 -0
- package/lib/module/bootstrap/SDKBootstrapper.js +742 -0
- package/lib/module/bucketing/fnv1a32.js +37 -0
- package/lib/module/compat/codepush.js +147 -0
- package/lib/module/config/ConfigManager.js +230 -0
- package/lib/module/config/configTypes.js +10 -0
- package/lib/module/config/otaPolicyState.js +76 -0
- package/lib/module/config/quotaState.js +423 -0
- package/lib/module/core/architecture.js +38 -0
- package/lib/module/core/clock/now.js +7 -0
- package/lib/module/core/config/defaults.js +2 -0
- package/lib/module/core/config/schema.js +506 -0
- package/lib/module/core/constants/endpoints.js +13 -0
- package/lib/module/core/constants/protocol.js +25 -0
- package/lib/module/core/constants/timings.js +26 -0
- package/lib/module/core/constants/version.js +12 -0
- package/lib/module/core/context/app.js +2 -0
- package/lib/module/core/context/device.js +143 -0
- package/lib/module/core/context/session.js +2 -0
- package/lib/module/core/context/user.js +2 -0
- package/lib/module/core/contracts/IFeature.js +2 -0
- package/lib/module/core/di/container.js +22 -0
- package/lib/module/core/encoding/base64.js +44 -0
- package/lib/module/core/id/deviceId.js +45 -0
- package/lib/module/core/id/installationId.js +50 -0
- package/lib/module/core/id/sessionId.js +2 -0
- package/lib/module/core/lifecycle/appLifecycle.js +25 -0
- package/lib/module/core/lifecycle/crashSafe.js +26 -0
- package/lib/module/core/logger/errorClassification.js +96 -0
- package/lib/module/core/logger/internalLogger.js +59 -0
- package/lib/module/core/logger/levels.js +2 -0
- package/lib/module/crypto/hmacSha256.js +126 -0
- package/lib/module/debug/bootstrap.js +393 -0
- package/lib/module/debug/commands.js +726 -0
- package/lib/module/debug/configBuilder.js +63 -0
- package/lib/module/debug/exportBridge.js +148 -0
- package/lib/module/debug/hostResolver.js +37 -0
- package/lib/module/debug/index.js +13 -0
- package/lib/module/debug/metrics.js +33 -0
- package/lib/module/debug/perf.js +180 -0
- package/lib/module/debug/perfWiring.js +102 -0
- package/lib/module/debug/protocol.js +19 -0
- package/lib/module/debug/redaction.js +411 -0
- package/lib/module/debug/replayWiring.js +139 -0
- package/lib/module/debug/screenTracking.js +53 -0
- package/lib/module/debug/sessionWiring.js +43 -0
- package/lib/module/debug/stream.js +536 -0
- package/lib/module/debug/transport.js +362 -0
- package/lib/module/features/bugreport/BugReportFeature.js +105 -0
- package/lib/module/features/bugreport/buildPayload.js +91 -0
- package/lib/module/features/bugreport/index.js +2 -0
- package/lib/module/features/crash/CrashFeature.js +79 -0
- package/lib/module/features/crash/CrashReporter.js +151 -0
- package/lib/module/features/crash/NativeCrashFeature.js +36 -0
- package/lib/module/features/crash/capture.js +42 -0
- package/lib/module/features/crash/globalHandler.js +36 -0
- package/lib/module/features/crash/index.js +8 -0
- package/lib/module/features/crash/nativeCrashBridge.js +350 -0
- package/lib/module/features/crash/rejectionHandler.js +171 -0
- package/lib/module/features/crash/scrubCrash.js +149 -0
- package/lib/module/features/engage/EngageAnchor.js +121 -0
- package/lib/module/features/engage/EngageArchetypeRenderers.js +4264 -0
- package/lib/module/features/engage/EngageInAppView.js +2656 -0
- package/lib/module/features/engage/EngageInlinePlacement.js +123 -0
- package/lib/module/features/engage/EngagePromptProvider.js +1054 -0
- package/lib/module/features/engage/EngagePromptView.js +1243 -0
- package/lib/module/features/engage/EngageTransport.js +602 -0
- package/lib/module/features/engage/EngageVariantContent.js +1771 -0
- package/lib/module/features/engage/__test-support__/reactNativeStub.js +52 -0
- package/lib/module/features/engage/attachmentCapture.js +42 -0
- package/lib/module/features/engage/captureVoiceAttachment.js +80 -0
- package/lib/module/features/engage/engageCoachmarkTour.js +94 -0
- package/lib/module/features/engage/engageGameLogic.js +287 -0
- package/lib/module/features/engage/engageMediaSizing.js +51 -0
- package/lib/module/features/engage/engageMultiStepSheet.js +35 -0
- package/lib/module/features/engage/engageOutcome.js +108 -0
- package/lib/module/features/engage/engagePushTokenBridge.js +65 -0
- package/lib/module/features/engage/engageShakeBridge.js +56 -0
- package/lib/module/features/engage/engageSignals.js +34 -0
- package/lib/module/features/engage/engageStoreReviewBridge.js +43 -0
- package/lib/module/features/engage/engageTestSeenStore.js +92 -0
- package/lib/module/features/engage/engageThrottle.js +390 -0
- package/lib/module/features/engage/engageTriggerEngine.js +360 -0
- package/lib/module/features/engage/engageTypes.js +110 -0
- package/lib/module/features/engage/engageVariantResolver.js +135 -0
- package/lib/module/features/engage/engageWindowInsets.js +89 -0
- package/lib/module/features/engage/gestureTriggerDetector.js +80 -0
- package/lib/module/features/engage/transcription/TranscriptionProvider.js +46 -0
- package/lib/module/features/install-referrer/installReferrer.js +104 -0
- package/lib/module/features/journey/ScaleBunDebugRoot.js +1030 -0
- package/lib/module/features/journey/ScaleBunFlatList.js +32 -0
- package/lib/module/features/journey/ScaleBunImpression.js +105 -0
- package/lib/module/features/journey/ScaleBunScrollView.js +95 -0
- package/lib/module/features/journey/ScaleBunSectionList.js +32 -0
- package/lib/module/features/journey/autoInstrumentScroll.js +155 -0
- package/lib/module/features/journey/calibrationContext.js +35 -0
- package/lib/module/features/journey/gestureBuffer.js +56 -0
- package/lib/module/features/journey/gestureDetector.js +169 -0
- package/lib/module/features/journey/impression.js +84 -0
- package/lib/module/features/journey/interactionProtocol.js +158 -0
- package/lib/module/features/journey/journeyManager.js +459 -0
- package/lib/module/features/journey/journeyTypes.js +49 -0
- package/lib/module/features/journey/nativeScroll.js +77 -0
- package/lib/module/features/journey/navDetector.js +154 -0
- package/lib/module/features/journey/screenshotHelper.js +129 -0
- package/lib/module/features/journey/scrollContext.js +142 -0
- package/lib/module/features/journey/targetGeometry.js +175 -0
- package/lib/module/features/journey/targetRegistry.js +44 -0
- package/lib/module/features/journey/touchTarget.js +241 -0
- package/lib/module/features/journey/uiState.js +176 -0
- package/lib/module/features/navigation/AutoScreenDetector.js +601 -0
- package/lib/module/features/network/NetworkFeature.js +209 -0
- package/lib/module/features/network/index.js +17 -0
- package/lib/module/features/network/thirdParty.js +142 -0
- package/lib/module/features/ota/OtaEventEmitter.js +123 -0
- package/lib/module/features/ota/OtaOrchestrator.js +1302 -0
- package/lib/module/features/ota/OtaTypes.js +2 -0
- package/lib/module/features/ota/deviceAttributes.js +43 -0
- package/lib/module/features/ota/environment.js +165 -0
- package/lib/module/features/ota/geoCountry.js +86 -0
- package/lib/module/features/ota/retry.js +87 -0
- package/lib/module/features/ota/signedDownload.js +174 -0
- package/lib/module/features/ota/useOtaUpdate.js +100 -0
- package/lib/module/features/performance/PerformanceFeature.js +643 -0
- package/lib/module/features/performance/collectors/AppLaunchCollector.js +115 -0
- package/lib/module/features/performance/collectors/AutoScreenLoadCollector.js +225 -0
- package/lib/module/features/performance/collectors/CustomTraceCollector.js +92 -0
- package/lib/module/features/performance/collectors/FrameMetricsCollector.js +177 -0
- package/lib/module/features/performance/collectors/JsStallCollector.js +158 -0
- package/lib/module/features/performance/collectors/NetworkPerfCollector.js +52 -0
- package/lib/module/features/performance/collectors/ScreenLoadCollector.js +71 -0
- package/lib/module/features/performance/collectors/UiHangCollector.js +71 -0
- package/lib/module/features/performance/config.js +51 -0
- package/lib/module/features/performance/getNativePerformanceModule.js +39 -0
- package/lib/module/features/performance/index.js +9 -0
- package/lib/module/features/performance/metrics/MetricsEngine.js +139 -0
- package/lib/module/features/performance/models.js +42 -0
- package/lib/module/features/performance/transport/PerformanceTransport.js +162 -0
- package/lib/module/features/profiler/ProfilerFeature.js +594 -0
- package/lib/module/features/profiler/config.js +143 -0
- package/lib/module/features/profiler/contracts.js +56 -0
- package/lib/module/features/profiler/index.js +11 -0
- package/lib/module/features/profiler/models.js +106 -0
- package/lib/module/features/profiler/transport/ProfilerTransport.js +87 -0
- package/lib/module/features/replay/bridge/adapters/bridgeAdapter.js +198 -0
- package/lib/module/features/replay/bridge/eventEmitter.js +122 -0
- package/lib/module/features/replay/bridge/nativeModule.js +89 -0
- package/lib/module/features/replay/bridge/nativeQuota.js +109 -0
- package/lib/module/features/replay/core/clock/clock.js +37 -0
- package/lib/module/features/replay/core/config/defaults.js +82 -0
- package/lib/module/features/replay/core/config/validator.js +103 -0
- package/lib/module/features/replay/core/env/environmentDetector.js +22 -0
- package/lib/module/features/replay/core/errors/safeCall.js +35 -0
- package/lib/module/features/replay/core/ids/sessionId.js +44 -0
- package/lib/module/features/replay/core/logger/logger.js +29 -0
- package/lib/module/features/replay/core/privacy/privacyTypes.js +27 -0
- package/lib/module/features/replay/core/queue/boundedQueue.js +64 -0
- package/lib/module/features/replay/integrations/alert/alertInstrumentation.js +252 -0
- package/lib/module/features/replay/integrations/logs/consoleIntegration.js +131 -0
- package/lib/module/features/replay/integrations/network/networkAdapter.js +70 -0
- package/lib/module/features/replay/integrations/react-navigation/navigationIntegration.js +82 -0
- package/lib/module/features/replay/integrations/touch/ReplayRoot.js +96 -0
- package/lib/module/features/replay/pipeline/batching/batchManager.js +113 -0
- package/lib/module/features/replay/pipeline/envelope/envelopeBuilder.js +43 -0
- package/lib/module/features/replay/pipeline/retry/retryPolicy.js +45 -0
- package/lib/module/features/replay/pipeline/transport/transportTypes.js +60 -0
- package/lib/module/features/replay/public/api.js +332 -0
- package/lib/module/features/replay/public/enums.js +85 -0
- package/lib/module/features/replay/public/types.js +2 -0
- package/lib/module/features/replay/replay/breadcrumbs/breadcrumbCollector.js +113 -0
- package/lib/module/features/replay/replay/frames/frameModels.js +33 -0
- package/lib/module/features/replay/replay/session/sessionOrchestrator.js +272 -0
- package/lib/module/features/replay/replay/timeline/timelineModels.js +108 -0
- package/lib/module/features/replay/transport/BackendReplayTransport.js +169 -0
- package/lib/module/features/replay/transport/CompositeReplayTransport.js +68 -0
- package/lib/module/features/replay/transport/DesktopReplayTransport.js +119 -0
- package/lib/module/features/replay/transport/ReplayTransport.js +2 -0
- package/lib/module/features/session/BackendSessionAdapter.js +1908 -0
- package/lib/module/features/session/DesktopSessionTransport.js +118 -0
- package/lib/module/features/session/JourneyEventPipeline.js +239 -0
- package/lib/module/features/session/ReplayCaptureManager.js +1248 -0
- package/lib/module/features/session/ScrollTracker.js +141 -0
- package/lib/module/features/session/SessionManager.js +1443 -0
- package/lib/module/features/session/SyncDecisionEngine.js +88 -0
- package/lib/module/features/session/frameLink.js +29 -0
- package/lib/module/features/session/frameScrollState.js +34 -0
- package/lib/module/features/session/index.js +35 -0
- package/lib/module/features/session/nativeCapture.js +45 -0
- package/lib/module/features/session/outboxFrameCapture.js +77 -0
- package/lib/module/features/session/sessionTypes.js +226 -0
- package/lib/module/features/session/viewportPlausibility.js +137 -0
- package/lib/module/features/skan/skanBridge.js +48 -0
- package/lib/module/features/skan/skanConversionManager.js +128 -0
- package/lib/module/index.js +80 -0
- package/lib/module/integrations/fetch/fetchInterceptor.js +169 -0
- package/lib/module/integrations/navigation/screenTracker.js +2 -0
- package/lib/module/integrations/network/bodyCapture.js +320 -0
- package/lib/module/integrations/xhr/xhrInterceptor.js +219 -0
- package/lib/module/metro/composeSourceMap.js +97 -0
- package/lib/module/metro/featureModules.js +123 -0
- package/lib/module/metro/index.js +218 -0
- package/lib/module/metro/optionalDependencyStub.js +14 -0
- package/lib/module/metro/optionalModules.js +25 -0
- package/lib/module/metro/serializerCompose.js +152 -0
- package/lib/module/pipeline/dispatcher/dispatcher.js +21 -0
- package/lib/module/pipeline/envelope/envelope.js +11 -0
- package/lib/module/pipeline/envelope/serializer.js +8 -0
- package/lib/module/pipeline/processors/dedupe.js +2 -0
- package/lib/module/pipeline/processors/enrich.js +10 -0
- package/lib/module/pipeline/processors/sampling.js +2 -0
- package/lib/module/pipeline/processors/sanitize.js +22 -0
- package/lib/module/pipeline/queue/flushQueue.js +102 -0
- package/lib/module/pipeline/queue/memoryQueue.js +24 -0
- package/lib/module/pipeline/queue/persistentQueue.js +336 -0
- package/lib/module/pipeline/queue/queuePolicy.js +2 -0
- package/lib/module/pipeline/scheduler/flushScheduler.js +38 -0
- package/lib/module/pipeline/scheduler/retryPolicy.js +9 -0
- package/lib/module/public/ScaleBunErrorBoundary.js +82 -0
- package/lib/module/public/ScaleBunFacade.js +2038 -0
- package/lib/module/public/ScaleBunProvider.js +54 -0
- package/lib/module/public/typedTracker.js +72 -0
- package/lib/module/public/types.js +2 -0
- package/lib/module/push/PushManager.js +263 -0
- package/lib/module/push/adapters/ManualAdapter.js +79 -0
- package/lib/module/push/adapters/NativeBridgeAdapter.js +124 -0
- package/lib/module/push/adapters/NoopAdapter.js +38 -0
- package/lib/module/push/adapters/RNFirebaseMessagingAdapter.js +241 -0
- package/lib/module/push/adapters/loadMessaging.js +23 -0
- package/lib/module/push/adapters/loadNotifee.js +30 -0
- package/lib/module/push/adapters/selectAdapter.js +147 -0
- package/lib/module/push/detect/capabilities.js +130 -0
- package/lib/module/push/index.js +9 -0
- package/lib/module/push/native/nativeNotifications.js +155 -0
- package/lib/module/push/types.js +2 -0
- package/lib/module/specs/NativeReplaySdk.js +24 -0
- package/lib/module/specs/NativeScaleBunCrash.js +26 -0
- package/lib/module/specs/NativeScaleBunInstallReferrer.js +20 -0
- package/lib/module/specs/NativeScaleBunOta.js +28 -0
- package/lib/module/specs/NativeScaleBunPerformance.js +21 -0
- package/lib/module/specs/NativeScaleBunProfiler.js +22 -0
- package/lib/module/specs/NativeScaleBunStorage.js +36 -0
- package/lib/module/storage/StorageBackend.js +231 -0
- package/lib/module/storage/db/sqlite.js +2 -0
- package/lib/module/storage/files/fileStore.js +2 -0
- package/lib/module/transport/auth/sdkSession.js +21 -0
- package/lib/module/transport/backoff/exponentialJitter.js +10 -0
- package/lib/module/transport/http/endpoints.js +40 -0
- package/lib/module/transport/http/httpClient.js +64 -0
- package/lib/module/transport/rateLimit/retryAfter.js +2 -0
- package/lib/module/transport/signing/requestSigner.js +2 -0
- package/lib/module/vendor/protocol/index.js +312 -0
- package/lib/module/vendor/protocol/internal/validation.js +423 -0
- package/lib/module/vendor/sdk-contracts/bridge.js +2 -0
- package/lib/module/vendor/sdk-contracts/config.js +2 -0
- package/lib/module/vendor/sdk-contracts/events.js +2 -0
- package/lib/module/vendor/sdk-contracts/features.js +2 -0
- package/lib/module/vendor/sdk-contracts/index.js +2 -0
- package/lib/module/vendor/sdk-contracts/platform.js +2 -0
- package/lib/module/vendor/sdk-contracts/session-boundary.js +2 -0
- package/lib/module/vendor/sdk-contracts/session.js +2 -0
- package/lib/module/vendor/vendor.manifest +10 -0
- package/lib/typescript/analytics/EventTracker.d.ts +197 -0
- package/lib/typescript/analytics/automaticEvents.d.ts +30 -0
- package/lib/typescript/analytics/batching.d.ts +33 -0
- package/lib/typescript/analytics/eventLane.d.ts +22 -0
- package/lib/typescript/analytics/revenue.d.ts +94 -0
- package/lib/typescript/analytics/subscription.d.ts +35 -0
- package/lib/typescript/bootstrap/FeatureRegistry.d.ts +36 -0
- package/lib/typescript/bootstrap/SDKBootstrapper.d.ts +82 -0
- package/lib/typescript/bucketing/fnv1a32.d.ts +20 -0
- package/lib/typescript/compat/codepush.d.ts +76 -0
- package/lib/typescript/config/ConfigManager.d.ts +82 -0
- package/lib/typescript/config/configTypes.d.ts +73 -0
- package/lib/typescript/config/otaPolicyState.d.ts +55 -0
- package/lib/typescript/config/quotaState.d.ts +155 -0
- package/lib/typescript/core/architecture.d.ts +29 -0
- package/lib/typescript/core/clock/now.d.ts +5 -0
- package/lib/typescript/core/config/defaults.d.ts +1 -0
- package/lib/typescript/core/config/schema.d.ts +107 -0
- package/lib/typescript/core/constants/endpoints.d.ts +13 -0
- package/lib/typescript/core/constants/protocol.d.ts +23 -0
- package/lib/typescript/core/constants/timings.d.ts +22 -0
- package/lib/typescript/core/constants/version.d.ts +12 -0
- package/lib/typescript/core/context/app.d.ts +1 -0
- package/lib/typescript/core/context/device.d.ts +61 -0
- package/lib/typescript/core/context/session.d.ts +1 -0
- package/lib/typescript/core/context/user.d.ts +24 -0
- package/lib/typescript/core/contracts/IFeature.d.ts +44 -0
- package/lib/typescript/core/di/container.d.ts +9 -0
- package/lib/typescript/core/encoding/base64.d.ts +13 -0
- package/lib/typescript/core/id/deviceId.d.ts +9 -0
- package/lib/typescript/core/id/installationId.d.ts +20 -0
- package/lib/typescript/core/id/sessionId.d.ts +1 -0
- package/lib/typescript/core/lifecycle/appLifecycle.d.ts +14 -0
- package/lib/typescript/core/lifecycle/crashSafe.d.ts +7 -0
- package/lib/typescript/core/logger/errorClassification.d.ts +46 -0
- package/lib/typescript/core/logger/internalLogger.d.ts +24 -0
- package/lib/typescript/core/logger/levels.d.ts +1 -0
- package/lib/typescript/crypto/hmacSha256.d.ts +10 -0
- package/lib/typescript/debug/bootstrap.d.ts +148 -0
- package/lib/typescript/debug/commands.d.ts +77 -0
- package/lib/typescript/debug/configBuilder.d.ts +13 -0
- package/lib/typescript/debug/exportBridge.d.ts +27 -0
- package/lib/typescript/debug/hostResolver.d.ts +14 -0
- package/lib/typescript/debug/index.d.ts +12 -0
- package/lib/typescript/debug/metrics.d.ts +2 -0
- package/lib/typescript/debug/perf.d.ts +43 -0
- package/lib/typescript/debug/perfWiring.d.ts +33 -0
- package/lib/typescript/debug/protocol.d.ts +15 -0
- package/lib/typescript/debug/redaction.d.ts +69 -0
- package/lib/typescript/debug/replayWiring.d.ts +25 -0
- package/lib/typescript/debug/screenTracking.d.ts +16 -0
- package/lib/typescript/debug/sessionWiring.d.ts +16 -0
- package/lib/typescript/debug/stream.d.ts +77 -0
- package/lib/typescript/debug/transport.d.ts +110 -0
- package/lib/typescript/features/bugreport/BugReportFeature.d.ts +59 -0
- package/lib/typescript/features/bugreport/buildPayload.d.ts +51 -0
- package/lib/typescript/features/bugreport/index.d.ts +1 -0
- package/lib/typescript/features/crash/CrashFeature.d.ts +21 -0
- package/lib/typescript/features/crash/CrashReporter.d.ts +107 -0
- package/lib/typescript/features/crash/NativeCrashFeature.d.ts +17 -0
- package/lib/typescript/features/crash/capture.d.ts +22 -0
- package/lib/typescript/features/crash/globalHandler.d.ts +14 -0
- package/lib/typescript/features/crash/index.d.ts +2 -0
- package/lib/typescript/features/crash/nativeCrashBridge.d.ts +43 -0
- package/lib/typescript/features/crash/rejectionHandler.d.ts +65 -0
- package/lib/typescript/features/crash/scrubCrash.d.ts +35 -0
- package/lib/typescript/features/engage/EngageAnchor.d.ts +36 -0
- package/lib/typescript/features/engage/EngageArchetypeRenderers.d.ts +66 -0
- package/lib/typescript/features/engage/EngageInAppView.d.ts +164 -0
- package/lib/typescript/features/engage/EngageInlinePlacement.d.ts +42 -0
- package/lib/typescript/features/engage/EngagePromptProvider.d.ts +233 -0
- package/lib/typescript/features/engage/EngagePromptView.d.ts +97 -0
- package/lib/typescript/features/engage/EngageTransport.d.ts +158 -0
- package/lib/typescript/features/engage/EngageVariantContent.d.ts +12 -0
- package/lib/typescript/features/engage/attachmentCapture.d.ts +17 -0
- package/lib/typescript/features/engage/captureVoiceAttachment.d.ts +31 -0
- package/lib/typescript/features/engage/engageCoachmarkTour.d.ts +18 -0
- package/lib/typescript/features/engage/engageGameLogic.d.ts +34 -0
- package/lib/typescript/features/engage/engageMediaSizing.d.ts +23 -0
- package/lib/typescript/features/engage/engageMultiStepSheet.d.ts +25 -0
- package/lib/typescript/features/engage/engageOutcome.d.ts +38 -0
- package/lib/typescript/features/engage/engagePushTokenBridge.d.ts +30 -0
- package/lib/typescript/features/engage/engageShakeBridge.d.ts +20 -0
- package/lib/typescript/features/engage/engageSignals.d.ts +13 -0
- package/lib/typescript/features/engage/engageStoreReviewBridge.d.ts +23 -0
- package/lib/typescript/features/engage/engageTestSeenStore.d.ts +46 -0
- package/lib/typescript/features/engage/engageThrottle.d.ts +180 -0
- package/lib/typescript/features/engage/engageTriggerEngine.d.ts +16 -0
- package/lib/typescript/features/engage/engageTypes.d.ts +576 -0
- package/lib/typescript/features/engage/engageVariantResolver.d.ts +46 -0
- package/lib/typescript/features/engage/engageWindowInsets.d.ts +25 -0
- package/lib/typescript/features/engage/gestureTriggerDetector.d.ts +20 -0
- package/lib/typescript/features/engage/transcription/TranscriptionProvider.d.ts +51 -0
- package/lib/typescript/features/install-referrer/installReferrer.d.ts +39 -0
- package/lib/typescript/features/journey/ScaleBunDebugRoot.d.ts +49 -0
- package/lib/typescript/features/journey/ScaleBunFlatList.d.ts +20 -0
- package/lib/typescript/features/journey/ScaleBunImpression.d.ts +30 -0
- package/lib/typescript/features/journey/ScaleBunScrollView.d.ts +25 -0
- package/lib/typescript/features/journey/ScaleBunSectionList.d.ts +20 -0
- package/lib/typescript/features/journey/autoInstrumentScroll.d.ts +46 -0
- package/lib/typescript/features/journey/calibrationContext.d.ts +26 -0
- package/lib/typescript/features/journey/gestureBuffer.d.ts +27 -0
- package/lib/typescript/features/journey/gestureDetector.d.ts +40 -0
- package/lib/typescript/features/journey/impression.d.ts +48 -0
- package/lib/typescript/features/journey/interactionProtocol.d.ts +159 -0
- package/lib/typescript/features/journey/journeyManager.d.ts +62 -0
- package/lib/typescript/features/journey/journeyTypes.d.ts +161 -0
- package/lib/typescript/features/journey/nativeScroll.d.ts +47 -0
- package/lib/typescript/features/journey/navDetector.d.ts +42 -0
- package/lib/typescript/features/journey/screenshotHelper.d.ts +33 -0
- package/lib/typescript/features/journey/scrollContext.d.ts +49 -0
- package/lib/typescript/features/journey/targetGeometry.d.ts +126 -0
- package/lib/typescript/features/journey/targetRegistry.d.ts +28 -0
- package/lib/typescript/features/journey/touchTarget.d.ts +174 -0
- package/lib/typescript/features/journey/uiState.d.ts +93 -0
- package/lib/typescript/features/navigation/AutoScreenDetector.d.ts +196 -0
- package/lib/typescript/features/network/NetworkFeature.d.ts +43 -0
- package/lib/typescript/features/network/index.d.ts +46 -0
- package/lib/typescript/features/network/thirdParty.d.ts +95 -0
- package/lib/typescript/features/ota/OtaEventEmitter.d.ts +93 -0
- package/lib/typescript/features/ota/OtaOrchestrator.d.ts +287 -0
- package/lib/typescript/features/ota/OtaTypes.d.ts +193 -0
- package/lib/typescript/features/ota/deviceAttributes.d.ts +18 -0
- package/lib/typescript/features/ota/environment.d.ts +99 -0
- package/lib/typescript/features/ota/geoCountry.d.ts +14 -0
- package/lib/typescript/features/ota/retry.d.ts +53 -0
- package/lib/typescript/features/ota/signedDownload.d.ts +81 -0
- package/lib/typescript/features/ota/useOtaUpdate.d.ts +72 -0
- package/lib/typescript/features/performance/PerformanceFeature.d.ts +132 -0
- package/lib/typescript/features/performance/collectors/AppLaunchCollector.d.ts +27 -0
- package/lib/typescript/features/performance/collectors/AutoScreenLoadCollector.d.ts +70 -0
- package/lib/typescript/features/performance/collectors/CustomTraceCollector.d.ts +35 -0
- package/lib/typescript/features/performance/collectors/FrameMetricsCollector.d.ts +74 -0
- package/lib/typescript/features/performance/collectors/JsStallCollector.d.ts +45 -0
- package/lib/typescript/features/performance/collectors/NetworkPerfCollector.d.ts +23 -0
- package/lib/typescript/features/performance/collectors/ScreenLoadCollector.d.ts +30 -0
- package/lib/typescript/features/performance/collectors/UiHangCollector.d.ts +21 -0
- package/lib/typescript/features/performance/config.d.ts +73 -0
- package/lib/typescript/features/performance/getNativePerformanceModule.d.ts +2 -0
- package/lib/typescript/features/performance/index.d.ts +10 -0
- package/lib/typescript/features/performance/metrics/MetricsEngine.d.ts +69 -0
- package/lib/typescript/features/performance/models.d.ts +169 -0
- package/lib/typescript/features/performance/transport/PerformanceTransport.d.ts +40 -0
- package/lib/typescript/features/profiler/ProfilerFeature.d.ts +92 -0
- package/lib/typescript/features/profiler/config.d.ts +85 -0
- package/lib/typescript/features/profiler/contracts.d.ts +142 -0
- package/lib/typescript/features/profiler/index.d.ts +13 -0
- package/lib/typescript/features/profiler/models.d.ts +332 -0
- package/lib/typescript/features/profiler/transport/ProfilerTransport.d.ts +30 -0
- package/lib/typescript/features/replay/bridge/adapters/bridgeAdapter.d.ts +52 -0
- package/lib/typescript/features/replay/bridge/eventEmitter.d.ts +100 -0
- package/lib/typescript/features/replay/bridge/nativeModule.d.ts +166 -0
- package/lib/typescript/features/replay/bridge/nativeQuota.d.ts +26 -0
- package/lib/typescript/features/replay/core/clock/clock.d.ts +16 -0
- package/lib/typescript/features/replay/core/config/defaults.d.ts +28 -0
- package/lib/typescript/features/replay/core/config/validator.d.ts +13 -0
- package/lib/typescript/features/replay/core/env/environmentDetector.d.ts +14 -0
- package/lib/typescript/features/replay/core/errors/safeCall.d.ts +12 -0
- package/lib/typescript/features/replay/core/ids/sessionId.d.ts +15 -0
- package/lib/typescript/features/replay/core/logger/logger.d.ts +15 -0
- package/lib/typescript/features/replay/core/privacy/privacyTypes.d.ts +24 -0
- package/lib/typescript/features/replay/core/queue/boundedQueue.d.ts +29 -0
- package/lib/typescript/features/replay/integrations/alert/alertInstrumentation.d.ts +48 -0
- package/lib/typescript/features/replay/integrations/logs/consoleIntegration.d.ts +18 -0
- package/lib/typescript/features/replay/integrations/network/networkAdapter.d.ts +31 -0
- package/lib/typescript/features/replay/integrations/react-navigation/navigationIntegration.d.ts +25 -0
- package/lib/typescript/features/replay/integrations/touch/ReplayRoot.d.ts +26 -0
- package/lib/typescript/features/replay/pipeline/batching/batchManager.d.ts +47 -0
- package/lib/typescript/features/replay/pipeline/envelope/envelopeBuilder.d.ts +12 -0
- package/lib/typescript/features/replay/pipeline/retry/retryPolicy.d.ts +17 -0
- package/lib/typescript/features/replay/pipeline/transport/transportTypes.d.ts +40 -0
- package/lib/typescript/features/replay/public/api.d.ts +83 -0
- package/lib/typescript/features/replay/public/enums.d.ts +73 -0
- package/lib/typescript/features/replay/public/types.d.ts +249 -0
- package/lib/typescript/features/replay/replay/breadcrumbs/breadcrumbCollector.d.ts +26 -0
- package/lib/typescript/features/replay/replay/frames/frameModels.d.ts +23 -0
- package/lib/typescript/features/replay/replay/session/sessionOrchestrator.d.ts +53 -0
- package/lib/typescript/features/replay/replay/timeline/timelineModels.d.ts +29 -0
- package/lib/typescript/features/replay/transport/BackendReplayTransport.d.ts +45 -0
- package/lib/typescript/features/replay/transport/CompositeReplayTransport.d.ts +22 -0
- package/lib/typescript/features/replay/transport/DesktopReplayTransport.d.ts +35 -0
- package/lib/typescript/features/replay/transport/ReplayTransport.d.ts +72 -0
- package/lib/typescript/features/session/BackendSessionAdapter.d.ts +528 -0
- package/lib/typescript/features/session/DesktopSessionTransport.d.ts +28 -0
- package/lib/typescript/features/session/JourneyEventPipeline.d.ts +74 -0
- package/lib/typescript/features/session/ReplayCaptureManager.d.ts +391 -0
- package/lib/typescript/features/session/ScrollTracker.d.ts +48 -0
- package/lib/typescript/features/session/SessionManager.d.ts +414 -0
- package/lib/typescript/features/session/SyncDecisionEngine.d.ts +33 -0
- package/lib/typescript/features/session/frameLink.d.ts +27 -0
- package/lib/typescript/features/session/frameScrollState.d.ts +27 -0
- package/lib/typescript/features/session/index.d.ts +23 -0
- package/lib/typescript/features/session/nativeCapture.d.ts +18 -0
- package/lib/typescript/features/session/outboxFrameCapture.d.ts +20 -0
- package/lib/typescript/features/session/sessionTypes.d.ts +362 -0
- package/lib/typescript/features/session/viewportPlausibility.d.ts +72 -0
- package/lib/typescript/features/skan/skanBridge.d.ts +18 -0
- package/lib/typescript/features/skan/skanConversionManager.d.ts +69 -0
- package/lib/typescript/index.d.ts +59 -0
- package/lib/typescript/integrations/fetch/fetchInterceptor.d.ts +41 -0
- package/lib/typescript/integrations/navigation/screenTracker.d.ts +1 -0
- package/lib/typescript/integrations/network/bodyCapture.d.ts +101 -0
- package/lib/typescript/integrations/xhr/xhrInterceptor.d.ts +46 -0
- package/lib/typescript/metro/composeSourceMap.d.ts +26 -0
- package/lib/typescript/metro/featureModules.d.ts +49 -0
- package/lib/typescript/metro/index.d.ts +99 -0
- package/lib/typescript/metro/optionalDependencyStub.d.ts +14 -0
- package/lib/typescript/metro/optionalModules.d.ts +20 -0
- package/lib/typescript/metro/serializerCompose.d.ts +46 -0
- package/lib/typescript/pipeline/dispatcher/dispatcher.d.ts +7 -0
- package/lib/typescript/pipeline/envelope/envelope.d.ts +16 -0
- package/lib/typescript/pipeline/envelope/serializer.d.ts +7 -0
- package/lib/typescript/pipeline/processors/dedupe.d.ts +1 -0
- package/lib/typescript/pipeline/processors/enrich.d.ts +3 -0
- package/lib/typescript/pipeline/processors/sampling.d.ts +1 -0
- package/lib/typescript/pipeline/processors/sanitize.d.ts +3 -0
- package/lib/typescript/pipeline/queue/flushQueue.d.ts +12 -0
- package/lib/typescript/pipeline/queue/memoryQueue.d.ts +12 -0
- package/lib/typescript/pipeline/queue/persistentQueue.d.ts +120 -0
- package/lib/typescript/pipeline/queue/queuePolicy.d.ts +1 -0
- package/lib/typescript/pipeline/scheduler/flushScheduler.d.ts +9 -0
- package/lib/typescript/pipeline/scheduler/retryPolicy.d.ts +5 -0
- package/lib/typescript/public/ScaleBunErrorBoundary.d.ts +44 -0
- package/lib/typescript/public/ScaleBunFacade.d.ts +800 -0
- package/lib/typescript/public/ScaleBunProvider.d.ts +23 -0
- package/lib/typescript/public/typedTracker.d.ts +88 -0
- package/lib/typescript/public/types.d.ts +316 -0
- package/lib/typescript/push/PushManager.d.ts +69 -0
- package/lib/typescript/push/adapters/ManualAdapter.d.ts +40 -0
- package/lib/typescript/push/adapters/NativeBridgeAdapter.d.ts +37 -0
- package/lib/typescript/push/adapters/NoopAdapter.d.ts +21 -0
- package/lib/typescript/push/adapters/RNFirebaseMessagingAdapter.d.ts +39 -0
- package/lib/typescript/push/adapters/loadMessaging.d.ts +17 -0
- package/lib/typescript/push/adapters/loadNotifee.d.ts +15 -0
- package/lib/typescript/push/adapters/selectAdapter.d.ts +20 -0
- package/lib/typescript/push/detect/capabilities.d.ts +15 -0
- package/lib/typescript/push/index.d.ts +10 -0
- package/lib/typescript/push/native/nativeNotifications.d.ts +65 -0
- package/lib/typescript/push/types.d.ts +143 -0
- package/lib/typescript/specs/NativeReplaySdk.d.ts +69 -0
- package/lib/typescript/specs/NativeScaleBunCrash.d.ts +58 -0
- package/lib/typescript/specs/NativeScaleBunInstallReferrer.d.ts +28 -0
- package/lib/typescript/specs/NativeScaleBunOta.d.ts +141 -0
- package/lib/typescript/specs/NativeScaleBunPerformance.d.ts +31 -0
- package/lib/typescript/specs/NativeScaleBunProfiler.d.ts +38 -0
- package/lib/typescript/specs/NativeScaleBunStorage.d.ts +55 -0
- package/lib/typescript/storage/StorageBackend.d.ts +131 -0
- package/lib/typescript/storage/db/sqlite.d.ts +1 -0
- package/lib/typescript/storage/files/fileStore.d.ts +1 -0
- package/lib/typescript/transport/auth/sdkSession.d.ts +10 -0
- package/lib/typescript/transport/backoff/exponentialJitter.d.ts +5 -0
- package/lib/typescript/transport/http/endpoints.d.ts +26 -0
- package/lib/typescript/transport/http/httpClient.d.ts +23 -0
- package/lib/typescript/transport/rateLimit/retryAfter.d.ts +1 -0
- package/lib/typescript/transport/signing/requestSigner.d.ts +1 -0
- package/lib/typescript/vendor/protocol/index.d.ts +345 -0
- package/lib/typescript/vendor/protocol/internal/validation.d.ts +114 -0
- package/lib/typescript/vendor/sdk-contracts/bridge.d.ts +104 -0
- package/lib/typescript/vendor/sdk-contracts/config.d.ts +156 -0
- package/lib/typescript/vendor/sdk-contracts/events.d.ts +42 -0
- package/lib/typescript/vendor/sdk-contracts/features.d.ts +38 -0
- package/lib/typescript/vendor/sdk-contracts/index.d.ts +15 -0
- package/lib/typescript/vendor/sdk-contracts/platform.d.ts +35 -0
- package/lib/typescript/vendor/sdk-contracts/session-boundary.d.ts +42 -0
- package/lib/typescript/vendor/sdk-contracts/session.d.ts +157 -0
- package/package.json +153 -0
- package/react-native.config.js +24 -0
- package/scalebun-react-native.podspec +44 -0
- package/src/analytics/EventTracker.ts +654 -0
- package/src/analytics/automaticEvents.ts +109 -0
- package/src/analytics/batching.ts +54 -0
- package/src/analytics/eventLane.ts +48 -0
- package/src/analytics/revenue.ts +143 -0
- package/src/analytics/subscription.ts +145 -0
- package/src/bootstrap/FeatureRegistry.ts +81 -0
- package/src/bootstrap/SDKBootstrapper.ts +769 -0
- package/src/bucketing/fnv1a32.ts +40 -0
- package/src/compat/codepush.ts +189 -0
- package/src/config/ConfigManager.ts +233 -0
- package/src/config/configTypes.ts +62 -0
- package/src/config/otaPolicyState.ts +79 -0
- package/src/config/quotaState.ts +484 -0
- package/src/core/architecture.ts +39 -0
- package/src/core/clock/now.ts +6 -0
- package/src/core/config/defaults.ts +0 -0
- package/src/core/config/schema.ts +455 -0
- package/src/core/constants/endpoints.ts +12 -0
- package/src/core/constants/protocol.ts +24 -0
- package/src/core/constants/timings.ts +25 -0
- package/src/core/constants/version.ts +11 -0
- package/src/core/context/app.ts +0 -0
- package/src/core/context/device.ts +169 -0
- package/src/core/context/session.ts +0 -0
- package/src/core/context/user.ts +26 -0
- package/src/core/contracts/IFeature.ts +53 -0
- package/src/core/di/container.ts +26 -0
- package/src/core/encoding/base64.ts +46 -0
- package/src/core/id/deviceId.ts +51 -0
- package/src/core/id/installationId.ts +52 -0
- package/src/core/id/sessionId.ts +0 -0
- package/src/core/lifecycle/appLifecycle.ts +33 -0
- package/src/core/lifecycle/crashSafe.ts +29 -0
- package/src/core/logger/errorClassification.ts +108 -0
- package/src/core/logger/internalLogger.ts +65 -0
- package/src/core/logger/levels.ts +0 -0
- package/src/crypto/hmacSha256.ts +106 -0
- package/src/debug/bootstrap.ts +436 -0
- package/src/debug/commands.ts +597 -0
- package/src/debug/configBuilder.ts +56 -0
- package/src/debug/exportBridge.ts +155 -0
- package/src/debug/hostResolver.ts +34 -0
- package/src/debug/index.ts +25 -0
- package/src/debug/metrics.ts +29 -0
- package/src/debug/perf.ts +212 -0
- package/src/debug/perfWiring.ts +119 -0
- package/src/debug/protocol.ts +58 -0
- package/src/debug/redaction.ts +483 -0
- package/src/debug/replayWiring.ts +148 -0
- package/src/debug/screenTracking.ts +55 -0
- package/src/debug/sessionWiring.ts +59 -0
- package/src/debug/stream.ts +561 -0
- package/src/debug/transport.ts +440 -0
- package/src/features/bugreport/BugReportFeature.ts +128 -0
- package/src/features/bugreport/buildPayload.ts +116 -0
- package/src/features/bugreport/index.ts +0 -0
- package/src/features/crash/CrashFeature.ts +87 -0
- package/src/features/crash/CrashReporter.ts +189 -0
- package/src/features/crash/NativeCrashFeature.ts +42 -0
- package/src/features/crash/capture.ts +48 -0
- package/src/features/crash/globalHandler.ts +39 -0
- package/src/features/crash/index.ts +8 -0
- package/src/features/crash/nativeCrashBridge.ts +352 -0
- package/src/features/crash/rejectionHandler.ts +196 -0
- package/src/features/crash/scrubCrash.ts +175 -0
- package/src/features/engage/EngageAnchor.tsx +159 -0
- package/src/features/engage/EngageArchetypeRenderers.tsx +3705 -0
- package/src/features/engage/EngageInAppView.tsx +2678 -0
- package/src/features/engage/EngageInlinePlacement.tsx +169 -0
- package/src/features/engage/EngagePromptProvider.tsx +1318 -0
- package/src/features/engage/EngagePromptView.tsx +1400 -0
- package/src/features/engage/EngageTransport.ts +668 -0
- package/src/features/engage/EngageVariantContent.tsx +1483 -0
- package/src/features/engage/__test-support__/reactNativeStub.js +40 -0
- package/src/features/engage/attachmentCapture.ts +45 -0
- package/src/features/engage/captureVoiceAttachment.ts +81 -0
- package/src/features/engage/engageCoachmarkTour.ts +120 -0
- package/src/features/engage/engageGameLogic.ts +347 -0
- package/src/features/engage/engageMediaSizing.ts +76 -0
- package/src/features/engage/engageMultiStepSheet.ts +53 -0
- package/src/features/engage/engageOutcome.ts +157 -0
- package/src/features/engage/engagePushTokenBridge.ts +84 -0
- package/src/features/engage/engageShakeBridge.ts +67 -0
- package/src/features/engage/engageSignals.ts +40 -0
- package/src/features/engage/engageStoreReviewBridge.ts +48 -0
- package/src/features/engage/engageTestSeenStore.ts +95 -0
- package/src/features/engage/engageThrottle.ts +478 -0
- package/src/features/engage/engageTriggerEngine.ts +350 -0
- package/src/features/engage/engageTypes.ts +712 -0
- package/src/features/engage/engageVariantResolver.ts +364 -0
- package/src/features/engage/engageWindowInsets.ts +108 -0
- package/src/features/engage/gestureTriggerDetector.ts +83 -0
- package/src/features/engage/transcription/TranscriptionProvider.ts +68 -0
- package/src/features/install-referrer/installReferrer.ts +112 -0
- package/src/features/journey/ScaleBunDebugRoot.tsx +1045 -0
- package/src/features/journey/ScaleBunFlatList.tsx +39 -0
- package/src/features/journey/ScaleBunImpression.tsx +109 -0
- package/src/features/journey/ScaleBunScrollView.tsx +101 -0
- package/src/features/journey/ScaleBunSectionList.tsx +39 -0
- package/src/features/journey/autoInstrumentScroll.ts +155 -0
- package/src/features/journey/calibrationContext.ts +44 -0
- package/src/features/journey/gestureBuffer.ts +59 -0
- package/src/features/journey/gestureDetector.ts +162 -0
- package/src/features/journey/impression.ts +92 -0
- package/src/features/journey/interactionProtocol.ts +243 -0
- package/src/features/journey/journeyManager.ts +469 -0
- package/src/features/journey/journeyTypes.ts +215 -0
- package/src/features/journey/nativeScroll.ts +94 -0
- package/src/features/journey/navDetector.ts +149 -0
- package/src/features/journey/screenshotHelper.ts +137 -0
- package/src/features/journey/scrollContext.ts +146 -0
- package/src/features/journey/targetGeometry.ts +197 -0
- package/src/features/journey/targetRegistry.ts +43 -0
- package/src/features/journey/touchTarget.ts +339 -0
- package/src/features/journey/uiState.ts +182 -0
- package/src/features/navigation/AutoScreenDetector.ts +617 -0
- package/src/features/network/NetworkFeature.ts +232 -0
- package/src/features/network/index.ts +59 -0
- package/src/features/network/thirdParty.ts +160 -0
- package/src/features/ota/OtaEventEmitter.ts +187 -0
- package/src/features/ota/OtaOrchestrator.ts +1513 -0
- package/src/features/ota/OtaTypes.ts +230 -0
- package/src/features/ota/deviceAttributes.ts +46 -0
- package/src/features/ota/environment.ts +199 -0
- package/src/features/ota/geoCountry.ts +85 -0
- package/src/features/ota/retry.ts +123 -0
- package/src/features/ota/signedDownload.ts +202 -0
- package/src/features/ota/useOtaUpdate.ts +161 -0
- package/src/features/performance/PerformanceFeature.ts +729 -0
- package/src/features/performance/collectors/AppLaunchCollector.ts +131 -0
- package/src/features/performance/collectors/AutoScreenLoadCollector.ts +258 -0
- package/src/features/performance/collectors/CustomTraceCollector.ts +116 -0
- package/src/features/performance/collectors/FrameMetricsCollector.ts +210 -0
- package/src/features/performance/collectors/JsStallCollector.ts +184 -0
- package/src/features/performance/collectors/NetworkPerfCollector.ts +69 -0
- package/src/features/performance/collectors/ScreenLoadCollector.ts +95 -0
- package/src/features/performance/collectors/UiHangCollector.ts +98 -0
- package/src/features/performance/config.ts +136 -0
- package/src/features/performance/getNativePerformanceModule.ts +38 -0
- package/src/features/performance/index.ts +28 -0
- package/src/features/performance/metrics/MetricsEngine.ts +152 -0
- package/src/features/performance/models.ts +235 -0
- package/src/features/performance/transport/PerformanceTransport.ts +161 -0
- package/src/features/profiler/ProfilerFeature.ts +661 -0
- package/src/features/profiler/config.ts +230 -0
- package/src/features/profiler/contracts.ts +176 -0
- package/src/features/profiler/index.ts +45 -0
- package/src/features/profiler/models.ts +430 -0
- package/src/features/profiler/transport/ProfilerTransport.ts +93 -0
- package/src/features/replay/bridge/adapters/bridgeAdapter.ts +235 -0
- package/src/features/replay/bridge/eventEmitter.ts +176 -0
- package/src/features/replay/bridge/nativeModule.ts +252 -0
- package/src/features/replay/bridge/nativeQuota.ts +111 -0
- package/src/features/replay/core/clock/clock.ts +38 -0
- package/src/features/replay/core/config/defaults.ts +66 -0
- package/src/features/replay/core/config/validator.ts +113 -0
- package/src/features/replay/core/env/environmentDetector.ts +21 -0
- package/src/features/replay/core/errors/safeCall.ts +34 -0
- package/src/features/replay/core/ids/sessionId.ts +44 -0
- package/src/features/replay/core/logger/logger.ts +36 -0
- package/src/features/replay/core/privacy/privacyTypes.ts +41 -0
- package/src/features/replay/core/queue/boundedQueue.ts +71 -0
- package/src/features/replay/integrations/alert/alertInstrumentation.ts +277 -0
- package/src/features/replay/integrations/logs/consoleIntegration.ts +136 -0
- package/src/features/replay/integrations/network/networkAdapter.ts +73 -0
- package/src/features/replay/integrations/react-navigation/navigationIntegration.ts +89 -0
- package/src/features/replay/integrations/touch/ReplayRoot.tsx +114 -0
- package/src/features/replay/pipeline/batching/batchManager.ts +133 -0
- package/src/features/replay/pipeline/envelope/envelopeBuilder.ts +66 -0
- package/src/features/replay/pipeline/retry/retryPolicy.ts +62 -0
- package/src/features/replay/pipeline/transport/transportTypes.ts +85 -0
- package/src/features/replay/public/api.ts +364 -0
- package/src/features/replay/public/enums.ts +78 -0
- package/src/features/replay/public/types.ts +297 -0
- package/src/features/replay/replay/breadcrumbs/breadcrumbCollector.ts +115 -0
- package/src/features/replay/replay/frames/frameModels.ts +45 -0
- package/src/features/replay/replay/session/sessionOrchestrator.ts +286 -0
- package/src/features/replay/replay/timeline/timelineModels.ts +129 -0
- package/src/features/replay/transport/BackendReplayTransport.ts +215 -0
- package/src/features/replay/transport/CompositeReplayTransport.ts +82 -0
- package/src/features/replay/transport/DesktopReplayTransport.ts +140 -0
- package/src/features/replay/transport/ReplayTransport.ts +84 -0
- package/src/features/session/BackendSessionAdapter.ts +1977 -0
- package/src/features/session/DesktopSessionTransport.ts +130 -0
- package/src/features/session/JourneyEventPipeline.ts +278 -0
- package/src/features/session/ReplayCaptureManager.ts +1401 -0
- package/src/features/session/ScrollTracker.ts +166 -0
- package/src/features/session/SessionManager.ts +1687 -0
- package/src/features/session/SyncDecisionEngine.ts +117 -0
- package/src/features/session/frameLink.ts +41 -0
- package/src/features/session/frameScrollState.ts +36 -0
- package/src/features/session/index.ts +88 -0
- package/src/features/session/nativeCapture.ts +43 -0
- package/src/features/session/outboxFrameCapture.ts +79 -0
- package/src/features/session/sessionTypes.ts +528 -0
- package/src/features/session/viewportPlausibility.ts +134 -0
- package/src/features/skan/skanBridge.ts +53 -0
- package/src/features/skan/skanConversionManager.ts +173 -0
- package/src/index.ts +206 -0
- package/src/integrations/fetch/fetchInterceptor.ts +201 -0
- package/src/integrations/navigation/screenTracker.ts +0 -0
- package/src/integrations/network/bodyCapture.ts +328 -0
- package/src/integrations/xhr/xhrInterceptor.ts +259 -0
- package/src/metro/composeSourceMap.ts +104 -0
- package/src/metro/featureModules.ts +143 -0
- package/src/metro/index.ts +336 -0
- package/src/metro/optionalDependencyStub.ts +13 -0
- package/src/metro/optionalModules.ts +27 -0
- package/src/metro/serializerCompose.ts +193 -0
- package/src/pipeline/dispatcher/dispatcher.ts +22 -0
- package/src/pipeline/envelope/envelope.ts +31 -0
- package/src/pipeline/envelope/serializer.ts +14 -0
- package/src/pipeline/processors/dedupe.ts +0 -0
- package/src/pipeline/processors/enrich.ts +11 -0
- package/src/pipeline/processors/sampling.ts +0 -0
- package/src/pipeline/processors/sanitize.ts +23 -0
- package/src/pipeline/queue/flushQueue.ts +144 -0
- package/src/pipeline/queue/memoryQueue.ts +31 -0
- package/src/pipeline/queue/persistentQueue.ts +385 -0
- package/src/pipeline/queue/queuePolicy.ts +0 -0
- package/src/pipeline/scheduler/flushScheduler.ts +47 -0
- package/src/pipeline/scheduler/retryPolicy.ts +8 -0
- package/src/public/ScaleBunErrorBoundary.tsx +91 -0
- package/src/public/ScaleBunFacade.ts +2129 -0
- package/src/public/ScaleBunProvider.tsx +91 -0
- package/src/public/typedTracker.ts +123 -0
- package/src/public/types.ts +362 -0
- package/src/push/PushManager.ts +318 -0
- package/src/push/adapters/ManualAdapter.ts +100 -0
- package/src/push/adapters/NativeBridgeAdapter.ts +142 -0
- package/src/push/adapters/NoopAdapter.ts +46 -0
- package/src/push/adapters/RNFirebaseMessagingAdapter.ts +271 -0
- package/src/push/adapters/loadMessaging.ts +24 -0
- package/src/push/adapters/loadNotifee.ts +29 -0
- package/src/push/adapters/selectAdapter.ts +176 -0
- package/src/push/detect/capabilities.ts +124 -0
- package/src/push/index.ts +22 -0
- package/src/push/native/nativeNotifications.ts +207 -0
- package/src/push/types.ts +159 -0
- package/src/specs/NativeReplaySdk.ts +101 -0
- package/src/specs/NativeScaleBunCrash.ts +64 -0
- package/src/specs/NativeScaleBunInstallReferrer.ts +29 -0
- package/src/specs/NativeScaleBunOta.ts +154 -0
- package/src/specs/NativeScaleBunPerformance.ts +34 -0
- package/src/specs/NativeScaleBunProfiler.ts +41 -0
- package/src/specs/NativeScaleBunStorage.ts +59 -0
- package/src/storage/StorageBackend.ts +272 -0
- package/src/storage/db/sqlite.ts +0 -0
- package/src/storage/files/fileStore.ts +0 -0
- package/src/transport/auth/sdkSession.ts +27 -0
- package/src/transport/backoff/exponentialJitter.ts +9 -0
- package/src/transport/http/endpoints.ts +33 -0
- package/src/transport/http/httpClient.ts +73 -0
- package/src/transport/rateLimit/retryAfter.ts +0 -0
- package/src/transport/signing/requestSigner.ts +0 -0
- package/src/vendor/protocol/index.ts +391 -0
- package/src/vendor/protocol/internal/validation.ts +497 -0
- package/src/vendor/sdk-contracts/bridge.ts +162 -0
- package/src/vendor/sdk-contracts/config.ts +192 -0
- package/src/vendor/sdk-contracts/events.ts +50 -0
- package/src/vendor/sdk-contracts/features.ts +42 -0
- package/src/vendor/sdk-contracts/index.ts +98 -0
- package/src/vendor/sdk-contracts/platform.ts +42 -0
- package/src/vendor/sdk-contracts/session-boundary.ts +55 -0
- package/src/vendor/sdk-contracts/session.ts +225 -0
- package/src/vendor/vendor.manifest +10 -0
|
@@ -0,0 +1,528 @@
|
|
|
1
|
+
import type { PlatformOS } from '../../core/context/device';
|
|
2
|
+
import type { FrameScrollEntry } from './frameScrollState';
|
|
3
|
+
/**
|
|
4
|
+
* ScaleBun SDK — Unified Session Domain Model
|
|
5
|
+
*
|
|
6
|
+
* Single source of truth for event types, frame types, session lifecycle,
|
|
7
|
+
* transport contracts, sync contracts, capture configuration, and artifact indexing.
|
|
8
|
+
*
|
|
9
|
+
* Architecture rules:
|
|
10
|
+
* - imageRef in ReplayFrame is an artifact reference (ID/path), NOT base64.
|
|
11
|
+
* Base64 is transport-layer detail only.
|
|
12
|
+
* - SyncDecisionEngine in the SDK owns sync policy; native only gathers metadata.
|
|
13
|
+
* - Frame capture is native-only (PixelCopy on Android, UIWindow on iOS).
|
|
14
|
+
* No JS screenshot fallback for session replay.
|
|
15
|
+
* - Frame retention prefers crash-adjacent/error-context frames over generic old frames.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
// ─── Session ────────────────────────────────────────────────────────────────
|
|
19
|
+
|
|
20
|
+
export type SessionStatus = 'active' | 'ended' | 'timeout';
|
|
21
|
+
|
|
22
|
+
export interface SessionMetadata {
|
|
23
|
+
appName?: string;
|
|
24
|
+
appVersion?: string;
|
|
25
|
+
bundleId?: string;
|
|
26
|
+
// Widened to the real Platform.OS — see core/context/device. The wire's platform field is an
|
|
27
|
+
// open enum, so a value this union did not anticipate travels rather than being coerced.
|
|
28
|
+
platform?: PlatformOS;
|
|
29
|
+
osVersion?: string;
|
|
30
|
+
deviceModel?: string;
|
|
31
|
+
deviceName?: string;
|
|
32
|
+
screenWidth?: number;
|
|
33
|
+
screenHeight?: number;
|
|
34
|
+
buildType?: 'debug' | 'release';
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export interface Session {
|
|
38
|
+
sessionId: string;
|
|
39
|
+
deviceId: string;
|
|
40
|
+
startedAt: number;
|
|
41
|
+
endedAt?: number;
|
|
42
|
+
status: SessionStatus;
|
|
43
|
+
metadata: SessionMetadata;
|
|
44
|
+
transportState: TransportState;
|
|
45
|
+
syncState: SyncState;
|
|
46
|
+
artifactIndex: SessionArtifactIndex;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// ─── Journey Event ──────────────────────────────────────────────────────────
|
|
50
|
+
|
|
51
|
+
export type JourneyEventType =
|
|
52
|
+
| 'SESSION_STARTED'
|
|
53
|
+
| 'SESSION_ENDED'
|
|
54
|
+
| 'APP_FOREGROUND'
|
|
55
|
+
| 'APP_BACKGROUND'
|
|
56
|
+
| 'SCREEN_VIEW'
|
|
57
|
+
/** Leaving a screen, carrying the MEASURED dwell time — see SessionManager.onScreenChange. */
|
|
58
|
+
| 'SCREEN_EXIT'
|
|
59
|
+
| 'USER_ACTION'
|
|
60
|
+
| 'NETWORK_REQUEST_STARTED'
|
|
61
|
+
| 'NETWORK_REQUEST_COMPLETED'
|
|
62
|
+
| 'NETWORK_REQUEST_FAILED'
|
|
63
|
+
| 'LOG_EMITTED'
|
|
64
|
+
| 'ERROR_CAPTURED'
|
|
65
|
+
| 'CRASH_CAPTURED'
|
|
66
|
+
| 'REPLAY_FRAME_CAPTURED'
|
|
67
|
+
| 'LOADING_STARTED'
|
|
68
|
+
| 'LOADING_COMPLETED';
|
|
69
|
+
|
|
70
|
+
export type JourneyEventSeverity = 'info' | 'warning' | 'error' | 'fatal';
|
|
71
|
+
export type JourneyEventSource = 'sdk' | 'native' | 'user' | 'system';
|
|
72
|
+
|
|
73
|
+
export interface JourneyEvent {
|
|
74
|
+
eventId: string;
|
|
75
|
+
sessionId: string;
|
|
76
|
+
/** If this event belongs to a recorded journey */
|
|
77
|
+
journeyId?: string;
|
|
78
|
+
ts: number;
|
|
79
|
+
type: JourneyEventType;
|
|
80
|
+
/** Subtype for further classification (e.g. 'TAP', 'SWIPE', 'console.error') */
|
|
81
|
+
subtype?: string;
|
|
82
|
+
severity?: JourneyEventSeverity;
|
|
83
|
+
/** Screen name at time of event */
|
|
84
|
+
screen?: string;
|
|
85
|
+
/**
|
|
86
|
+
* frameId of the screenshot that was ON SCREEN when this event happened.
|
|
87
|
+
*
|
|
88
|
+
* The picture the user was looking at, not the one that follows. Mobile has no DOM to
|
|
89
|
+
* reconstruct, so a captured frame is the only record of what a screen looked like at a
|
|
90
|
+
* moment — which makes this the join key between a tap and the state it was made in.
|
|
91
|
+
*
|
|
92
|
+
* Set only when a keyframe from the SAME screen was captured recently enough to still be
|
|
93
|
+
* showing (see SessionManager.currentFrameForEvent). Absent means "not captured", which is a
|
|
94
|
+
* DIFFERENT answer from "nothing was open" and must never be folded into it:
|
|
95
|
+
* · the analytics lane never has one — it runs only when no recording is active, so no
|
|
96
|
+
* screenshots exist at all
|
|
97
|
+
* · a tap right after navigation has none — the capture is debounced and evicted on
|
|
98
|
+
* screen change
|
|
99
|
+
*/
|
|
100
|
+
frameId?: string;
|
|
101
|
+
payload?: Record<string, unknown>;
|
|
102
|
+
/** Links related events (e.g. network request start → complete) */
|
|
103
|
+
correlationId?: string;
|
|
104
|
+
/** Distributed trace ID */
|
|
105
|
+
traceId?: string;
|
|
106
|
+
source?: JourneyEventSource;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
// ─── Replay Frame ───────────────────────────────────────────────────────────
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* imageRef is an ARTIFACT REFERENCE (opaque ID/path), not raw base64.
|
|
113
|
+
* Base64 content is a transport/storage detail resolved separately.
|
|
114
|
+
* This keeps the domain model transport-agnostic.
|
|
115
|
+
*/
|
|
116
|
+
export interface ReplayFrame {
|
|
117
|
+
frameId: string;
|
|
118
|
+
sessionId: string;
|
|
119
|
+
ts: number;
|
|
120
|
+
/** Monotonic per-session sequence (P2-0). Assigned in JS, starts at 1, +1 per emitted frame. */
|
|
121
|
+
sequenceNumber: number;
|
|
122
|
+
/** Keyframe (full image) or delta (changed regions vs baseFrameId). P2-5. */
|
|
123
|
+
frameType: 'keyframe' | 'delta';
|
|
124
|
+
/** frameId of the keyframe a delta is encoded against; undefined for keyframes. P2-5. */
|
|
125
|
+
baseFrameId?: string;
|
|
126
|
+
/** Artifact reference — resolved to actual data by transport/storage layer */
|
|
127
|
+
imageRef: string;
|
|
128
|
+
width: number;
|
|
129
|
+
height: number;
|
|
130
|
+
/** Encoded image byte size (real value from native), 0 if unknown. */
|
|
131
|
+
byteSize?: number;
|
|
132
|
+
/** Image encoding from native ('avif' | 'webp' | 'jpeg' | 'png'). P2-2 fallback chain. */
|
|
133
|
+
format?: string;
|
|
134
|
+
quality: ReplayQuality;
|
|
135
|
+
captureReason: CaptureReason;
|
|
136
|
+
/** Native-only capture — JS never captures frames */
|
|
137
|
+
// Widened: a frame reports the REAL Platform.OS. The old union forced every non-iOS capture to
|
|
138
|
+
// be relabelled 'android', which is how RN-macOS and RN-Windows sessions became Android ones.
|
|
139
|
+
sourcePlatform: PlatformOS;
|
|
140
|
+
redactionState?: 'none' | 'text-masked' | 'full';
|
|
141
|
+
/** Screen name at capture time — for frame-to-screen correlation */
|
|
142
|
+
screen?: string;
|
|
143
|
+
/**
|
|
144
|
+
* Visible scroll containers read natively at the moment of capture, largest first, at most 4
|
|
145
|
+
* (Android capture-view px, iOS points). Undefined = not measured; [] = none on screen.
|
|
146
|
+
* See frameScrollState.ts.
|
|
147
|
+
*/
|
|
148
|
+
scrollState?: FrameScrollEntry[];
|
|
149
|
+
/** Interaction point metadata — populated when captureReason is 'interaction' */
|
|
150
|
+
interactionPoint?: {
|
|
151
|
+
/** Tap/gesture X coordinate in device pixels */
|
|
152
|
+
x: number;
|
|
153
|
+
/** Tap/gesture Y coordinate in device pixels */
|
|
154
|
+
y: number;
|
|
155
|
+
/** Normalized X (0 to 1) for safe heatmap overlay across different viewport sizes */
|
|
156
|
+
normalizedX?: number;
|
|
157
|
+
/** Normalized Y (0 to 1) for safe heatmap overlay across different viewport sizes */
|
|
158
|
+
normalizedY?: number;
|
|
159
|
+
/** Device screen width at capture time */
|
|
160
|
+
screenWidth: number;
|
|
161
|
+
/** Device screen height at capture time */
|
|
162
|
+
screenHeight: number;
|
|
163
|
+
/** Actual viewport width at capture time, equivalent to screenWidth in most cases */
|
|
164
|
+
viewportWidth?: number;
|
|
165
|
+
/** Actual viewport height at capture time, equivalent to screenHeight in most cases */
|
|
166
|
+
viewportHeight?: number;
|
|
167
|
+
/** Gesture type: tap, long_press, swipe, scroll */
|
|
168
|
+
gestureType: string;
|
|
169
|
+
/** For swipes/scrolls: End X coordinate */
|
|
170
|
+
endX?: number;
|
|
171
|
+
/** For swipes/scrolls: End Y coordinate */
|
|
172
|
+
endY?: number;
|
|
173
|
+
/** For swipes/scrolls: Normalized End X */
|
|
174
|
+
normalizedEndX?: number;
|
|
175
|
+
/** For swipes/scrolls: Normalized End Y */
|
|
176
|
+
normalizedEndY?: number;
|
|
177
|
+
/** Duration of gesture if tracked */
|
|
178
|
+
durationMs?: number;
|
|
179
|
+
/** Gesture direction: up, down, left, right */
|
|
180
|
+
direction?: string;
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
export type CaptureReason =
|
|
185
|
+
| 'navigation'
|
|
186
|
+
| 'interaction'
|
|
187
|
+
| 'frequency'
|
|
188
|
+
| 'manual'
|
|
189
|
+
| 'error-context'
|
|
190
|
+
| 'scroll'
|
|
191
|
+
| 'screen_loaded';
|
|
192
|
+
|
|
193
|
+
// ─── Session Artifact Index ─────────────────────────────────────────────────
|
|
194
|
+
|
|
195
|
+
export interface CrashAnchor {
|
|
196
|
+
crashEventId: string;
|
|
197
|
+
/** Event IDs within ±N of the crash */
|
|
198
|
+
nearbyEventIds: string[];
|
|
199
|
+
/** Frame IDs within ±N of the crash */
|
|
200
|
+
nearbyFrameIds: string[];
|
|
201
|
+
timestamp: number;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
export interface SessionArtifactIndex {
|
|
205
|
+
/** Frame IDs in chronological order */
|
|
206
|
+
frameRefs: string[];
|
|
207
|
+
/** Event IDs in chronological order */
|
|
208
|
+
eventRefs: string[];
|
|
209
|
+
/** Event IDs where type is NETWORK_REQUEST_* */
|
|
210
|
+
networkRefs: string[];
|
|
211
|
+
/** Event IDs where type is LOG_EMITTED */
|
|
212
|
+
logRefs: string[];
|
|
213
|
+
/** Crash/error anchors with nearby context */
|
|
214
|
+
crashAnchors: CrashAnchor[];
|
|
215
|
+
/** Future: artifact upload references for remote dashboard */
|
|
216
|
+
uploadRefs?: string[];
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
// ─── Capture Configuration ──────────────────────────────────────────────────
|
|
220
|
+
|
|
221
|
+
/** When to capture frames */
|
|
222
|
+
export type CaptureMode = 'navigation' | 'interactions' | 'frequency';
|
|
223
|
+
|
|
224
|
+
/** Frame quality presets — maps to native JPEG compression */
|
|
225
|
+
export type ReplayQuality = 'high' | 'normal' | 'low' | 'grayscale';
|
|
226
|
+
|
|
227
|
+
/** Quality preset → concrete capture parameters (used by native engines) */
|
|
228
|
+
export const QUALITY_PRESETS: Record<ReplayQuality, { maxWidth: number; jpegQuality: number }> = {
|
|
229
|
+
high: { maxWidth: 0, jpegQuality: 90 }, // 0 = full width
|
|
230
|
+
normal: { maxWidth: 720, jpegQuality: 70 },
|
|
231
|
+
low: { maxWidth: 480, jpegQuality: 40 },
|
|
232
|
+
grayscale: { maxWidth: 720, jpegQuality: 60 }, // native applies grayscale conversion
|
|
233
|
+
};
|
|
234
|
+
|
|
235
|
+
export interface PrivacyPolicy {
|
|
236
|
+
redactTextInputs: boolean;
|
|
237
|
+
redactImages: boolean;
|
|
238
|
+
/** TestIDs to completely exclude from capture */
|
|
239
|
+
blockTestIds: string[];
|
|
240
|
+
/** Screen names to exclude from replay capture */
|
|
241
|
+
captureExclusions: string[];
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
export interface SessionReplayConfig {
|
|
245
|
+
captureMode: CaptureMode;
|
|
246
|
+
quality: ReplayQuality;
|
|
247
|
+
/** Used with 'frequency' mode. Minimum 500ms. */
|
|
248
|
+
intervalMs: number;
|
|
249
|
+
includeNetworkLogs: boolean;
|
|
250
|
+
includeSdkLogs: boolean;
|
|
251
|
+
includeUserSteps: boolean;
|
|
252
|
+
/** Max frames before dropping old (prefers keeping crash-adjacent) */
|
|
253
|
+
maxFrames: number;
|
|
254
|
+
/** Max events before dropping old (prefers keeping crash-adjacent) */
|
|
255
|
+
maxEventCount: number;
|
|
256
|
+
/** Auto-end session after this duration */
|
|
257
|
+
maxDurationMs: number;
|
|
258
|
+
privacyPolicy: PrivacyPolicy;
|
|
259
|
+
|
|
260
|
+
// ── P2 capture knobs (all tunable; see P2_CONTRACT.md §5) ──
|
|
261
|
+
/** P2-1: suppress visually-unchanged consecutive frames. Default true. */
|
|
262
|
+
changeDetection?: boolean;
|
|
263
|
+
/** P2-1: 0 = exact-hash match; >0 = perceptual distance threshold (native). Default 0. */
|
|
264
|
+
changeSensitivity?: number;
|
|
265
|
+
/** P2-1 heartbeat: force a keyframe even if unchanged after this many ms, so static
|
|
266
|
+
* periods still have a frame AND deltas always have a fresh base. Default 5000. */
|
|
267
|
+
maxKeyframeIntervalMs?: number;
|
|
268
|
+
/** P2-2: native encode preference order; first that succeeds on-device wins. */
|
|
269
|
+
frameFormatPreference?: Array<'avif' | 'webp' | 'jpeg'>;
|
|
270
|
+
/** P2-2: lossy encoder quality 0..100. Default 55. */
|
|
271
|
+
frameQuality?: number;
|
|
272
|
+
/** P2-5: emit deltas between keyframes. Default false (keyframe-only when off). */
|
|
273
|
+
deltaEncoding?: boolean;
|
|
274
|
+
/** P2-5: force a keyframe every N frames so a dropped base strands < N-1 deltas. Default 10. */
|
|
275
|
+
deltaKeyframeInterval?: number;
|
|
276
|
+
/** `interactions` mode: sample the screen briefly after each semantic frame, uploading only
|
|
277
|
+
* samples whose pixels changed, so motion between taps is not lost. Needs changeDetection.
|
|
278
|
+
* See ACTIVITY_SAMPLE_INTERVAL_MS in ReplayCaptureManager. Default true. */
|
|
279
|
+
activitySampling?: boolean;
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
export const DEFAULT_SESSION_REPLAY_CONFIG: SessionReplayConfig = {
|
|
283
|
+
captureMode: 'navigation',
|
|
284
|
+
quality: 'normal',
|
|
285
|
+
intervalMs: 2000,
|
|
286
|
+
includeNetworkLogs: true,
|
|
287
|
+
includeSdkLogs: false,
|
|
288
|
+
includeUserSteps: true,
|
|
289
|
+
maxFrames: 200,
|
|
290
|
+
maxEventCount: 1000,
|
|
291
|
+
maxDurationMs: 10 * 60 * 1000, // 10 minutes
|
|
292
|
+
privacyPolicy: {
|
|
293
|
+
redactTextInputs: true,
|
|
294
|
+
redactImages: false,
|
|
295
|
+
blockTestIds: [],
|
|
296
|
+
captureExclusions: [],
|
|
297
|
+
},
|
|
298
|
+
// P2 capture knobs
|
|
299
|
+
changeDetection: true,
|
|
300
|
+
changeSensitivity: 0,
|
|
301
|
+
maxKeyframeIntervalMs: 5000,
|
|
302
|
+
frameFormatPreference: ['avif', 'webp', 'jpeg'],
|
|
303
|
+
frameQuality: 55,
|
|
304
|
+
deltaEncoding: false,
|
|
305
|
+
deltaKeyframeInterval: 10,
|
|
306
|
+
activitySampling: true,
|
|
307
|
+
};
|
|
308
|
+
|
|
309
|
+
// ─── Transport Contracts ────────────────────────────────────────────────────
|
|
310
|
+
|
|
311
|
+
export type TransportState =
|
|
312
|
+
| 'local'
|
|
313
|
+
| 'pending-sync'
|
|
314
|
+
| 'syncing'
|
|
315
|
+
| 'synced'
|
|
316
|
+
| 'failed';
|
|
317
|
+
|
|
318
|
+
/**
|
|
319
|
+
* SessionTransport abstraction.
|
|
320
|
+
* DesktopSessionTransport implements this now.
|
|
321
|
+
* RemoteDashboardSessionTransport will implement this later.
|
|
322
|
+
* Core session logic never knows transport details.
|
|
323
|
+
*/
|
|
324
|
+
export interface SessionTransport {
|
|
325
|
+
sendSessionStart(session: Session): void;
|
|
326
|
+
sendSessionEnd(session: Session): void;
|
|
327
|
+
sendEvent(event: JourneyEvent): void;
|
|
328
|
+
/**
|
|
329
|
+
* Send a replay frame. The transport is responsible for resolving
|
|
330
|
+
* imageRef → actual content (base64, URL, etc.) at the transport boundary.
|
|
331
|
+
* @param frame - frame metadata (imageRef is artifact reference)
|
|
332
|
+
* @param imageData - raw image data (base64) for transport serialization
|
|
333
|
+
*/
|
|
334
|
+
sendFrame(frame: ReplayFrame, imageData: string): void;
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
// ─── Sync Decision Contracts ────────────────────────────────────────────────
|
|
338
|
+
|
|
339
|
+
export type SyncState =
|
|
340
|
+
| 'eligible'
|
|
341
|
+
| 'ineligible'
|
|
342
|
+
| 'pending-evaluation'
|
|
343
|
+
| 'opted-out';
|
|
344
|
+
|
|
345
|
+
/**
|
|
346
|
+
* Metadata gathered by NATIVE layer, passed to SDK for sync decision.
|
|
347
|
+
* Native only gathers; SDK's SyncDecisionEngine owns the eligibility policy.
|
|
348
|
+
*/
|
|
349
|
+
export interface NativeSyncMetadata {
|
|
350
|
+
deviceModel: string;
|
|
351
|
+
osVersion: string;
|
|
352
|
+
batteryLevel?: number;
|
|
353
|
+
batteryCharging?: boolean;
|
|
354
|
+
networkType?: 'wifi' | 'cellular' | 'ethernet' | 'none' | 'unknown';
|
|
355
|
+
isMeteredNetwork?: boolean;
|
|
356
|
+
availableMemoryMb?: number;
|
|
357
|
+
thermalState?: 'nominal' | 'fair' | 'serious' | 'critical';
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
/**
|
|
361
|
+
* Candidate presented to SyncDecisionEngine for eligibility evaluation.
|
|
362
|
+
*/
|
|
363
|
+
export interface SyncCandidate {
|
|
364
|
+
sessionId: string;
|
|
365
|
+
metadata: SessionMetadata;
|
|
366
|
+
nativeMetadata?: NativeSyncMetadata;
|
|
367
|
+
eventCount: number;
|
|
368
|
+
frameCount: number;
|
|
369
|
+
durationMs: number;
|
|
370
|
+
hasCrash: boolean;
|
|
371
|
+
hasError: boolean;
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
export interface SyncDecision {
|
|
375
|
+
shouldSync: boolean;
|
|
376
|
+
reason: string;
|
|
377
|
+
priority: 'high' | 'normal' | 'low';
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
/**
|
|
381
|
+
* Callback type for custom sync eligibility evaluation.
|
|
382
|
+
* The SDK provides a default implementation; host apps can override.
|
|
383
|
+
*/
|
|
384
|
+
export type SyncDecisionCallback = (candidate: SyncCandidate) => SyncDecision;
|
|
385
|
+
|
|
386
|
+
// ─── Native Capture Result ──────────────────────────────────────────────────
|
|
387
|
+
|
|
388
|
+
/**
|
|
389
|
+
* Result returned by native capture engine.
|
|
390
|
+
* base64 is transient — used at the transport boundary, NOT stored in domain as imageRef.
|
|
391
|
+
*/
|
|
392
|
+
export interface NativeFrameResult {
|
|
393
|
+
base64: string;
|
|
394
|
+
width: number;
|
|
395
|
+
height: number;
|
|
396
|
+
/** Byte size of the compressed image */
|
|
397
|
+
byteSize: number;
|
|
398
|
+
/** Platform that performed the capture */
|
|
399
|
+
// Widened from 'android'|'ios': a frame is labelled with the REAL Platform.OS now, and the
|
|
400
|
+
// old union forced every non-iOS capture to be relabelled 'android'.
|
|
401
|
+
platform: PlatformOS;
|
|
402
|
+
/** Actual on-device encoding after the AVIF->WebP->JPEG fallback (P2-2). */
|
|
403
|
+
format?: string;
|
|
404
|
+
/** Optional native frame hash for change detection (P2-1). JS falls back to hashing base64. */
|
|
405
|
+
frameHash?: string;
|
|
406
|
+
/** Sanitized visible scroll containers at capture time; undefined = not measured. */
|
|
407
|
+
scrollState?: FrameScrollEntry[];
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
/**
|
|
411
|
+
* Native device/session metadata result.
|
|
412
|
+
*/
|
|
413
|
+
export interface NativeDeviceMetadata {
|
|
414
|
+
deviceModel: string;
|
|
415
|
+
osVersion: string;
|
|
416
|
+
screenWidth: number;
|
|
417
|
+
screenHeight: number;
|
|
418
|
+
platform: 'android' | 'ios';
|
|
419
|
+
appName?: string;
|
|
420
|
+
appVersion?: string;
|
|
421
|
+
bundleId?: string;
|
|
422
|
+
buildType?: 'debug' | 'release';
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
// ─── Frame Retention Policy ─────────────────────────────────────────────────
|
|
426
|
+
|
|
427
|
+
/**
|
|
428
|
+
* Priority levels for frame retention when buffer is full.
|
|
429
|
+
* Higher priority frames are kept longer.
|
|
430
|
+
*
|
|
431
|
+
* CRASH_ADJACENT and ERROR_CONTEXT frames are NEVER dropped before
|
|
432
|
+
* generic NAVIGATION/INTERACTION/FREQUENCY frames.
|
|
433
|
+
*/
|
|
434
|
+
export enum FrameRetentionPriority {
|
|
435
|
+
/** Lowest: regular periodic captures */
|
|
436
|
+
FREQUENCY = 0,
|
|
437
|
+
/** Low: regular navigation frames */
|
|
438
|
+
NAVIGATION = 1,
|
|
439
|
+
/** Medium: interaction-triggered frames */
|
|
440
|
+
INTERACTION = 2,
|
|
441
|
+
/** Medium-high: manually triggered captures */
|
|
442
|
+
MANUAL = 3,
|
|
443
|
+
/** High: captured in response to an error event */
|
|
444
|
+
ERROR_CONTEXT = 4,
|
|
445
|
+
/** Highest: adjacent to a crash event — never drop before others */
|
|
446
|
+
CRASH_ADJACENT = 5,
|
|
447
|
+
}
|
|
448
|
+
|
|
449
|
+
/** Map CaptureReason → retention priority */
|
|
450
|
+
export function getFrameRetentionPriority(reason: CaptureReason): FrameRetentionPriority {
|
|
451
|
+
switch (reason) {
|
|
452
|
+
case 'error-context': return FrameRetentionPriority.ERROR_CONTEXT;
|
|
453
|
+
case 'manual': return FrameRetentionPriority.MANUAL;
|
|
454
|
+
case 'interaction': return FrameRetentionPriority.INTERACTION;
|
|
455
|
+
case 'screen_loaded': return FrameRetentionPriority.INTERACTION; // Same priority as interaction
|
|
456
|
+
case 'scroll': return FrameRetentionPriority.INTERACTION;
|
|
457
|
+
case 'navigation': return FrameRetentionPriority.NAVIGATION;
|
|
458
|
+
case 'frequency': return FrameRetentionPriority.FREQUENCY;
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
// ─── Session Protocol Event Names ───────────────────────────────────────────
|
|
463
|
+
|
|
464
|
+
export const SESSION_EVENTS = {
|
|
465
|
+
SESSION_START: 'session:start',
|
|
466
|
+
SESSION_END: 'session:end',
|
|
467
|
+
EVENT: 'session:event',
|
|
468
|
+
FRAME: 'session:frame',
|
|
469
|
+
} as const;
|
|
470
|
+
|
|
471
|
+
// ─── Event Retention Policy ─────────────────────────────────────────────────
|
|
472
|
+
|
|
473
|
+
/**
|
|
474
|
+
* Priority levels for event retention when buffer is full.
|
|
475
|
+
* Crash/error events are NEVER dropped before generic events.
|
|
476
|
+
*/
|
|
477
|
+
export enum EventRetentionPriority {
|
|
478
|
+
LOG = 0,
|
|
479
|
+
NETWORK = 1,
|
|
480
|
+
LIFECYCLE = 2,
|
|
481
|
+
SCREEN_VIEW = 3,
|
|
482
|
+
USER_ACTION = 4,
|
|
483
|
+
ERROR = 5,
|
|
484
|
+
CRASH = 6,
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
/** Map JourneyEventType → retention priority */
|
|
488
|
+
export function getEventRetentionPriority(type: JourneyEventType): EventRetentionPriority {
|
|
489
|
+
switch (type) {
|
|
490
|
+
case 'LOG_EMITTED': return EventRetentionPriority.LOG;
|
|
491
|
+
case 'NETWORK_REQUEST_STARTED':
|
|
492
|
+
case 'NETWORK_REQUEST_COMPLETED':
|
|
493
|
+
case 'NETWORK_REQUEST_FAILED': return EventRetentionPriority.NETWORK;
|
|
494
|
+
case 'APP_FOREGROUND':
|
|
495
|
+
case 'APP_BACKGROUND':
|
|
496
|
+
case 'SESSION_STARTED':
|
|
497
|
+
case 'SESSION_ENDED':
|
|
498
|
+
case 'LOADING_STARTED':
|
|
499
|
+
case 'LOADING_COMPLETED': return EventRetentionPriority.LIFECYCLE;
|
|
500
|
+
// An exit is the other half of a view and carries the dwell time, so it retains together with
|
|
501
|
+
// it — dropping exits first would leave entries whose duration can never be recovered.
|
|
502
|
+
case 'SCREEN_VIEW':
|
|
503
|
+
case 'SCREEN_EXIT': return EventRetentionPriority.SCREEN_VIEW;
|
|
504
|
+
case 'USER_ACTION':
|
|
505
|
+
case 'REPLAY_FRAME_CAPTURED': return EventRetentionPriority.USER_ACTION;
|
|
506
|
+
case 'ERROR_CAPTURED': return EventRetentionPriority.ERROR;
|
|
507
|
+
case 'CRASH_CAPTURED': return EventRetentionPriority.CRASH;
|
|
508
|
+
}
|
|
509
|
+
}
|
|
510
|
+
|
|
511
|
+
// ─── Re-exports from contracts ──────────────────────────────────────────────
|
|
512
|
+
// Pure types are now canonical in @scalebun/sdk-contracts.
|
|
513
|
+
// Runtime values (enums, constants, functions) remain here.
|
|
514
|
+
export type {
|
|
515
|
+
Session as ContractSession,
|
|
516
|
+
SessionMetadata as ContractSessionMetadata,
|
|
517
|
+
SessionStatus as ContractSessionStatus,
|
|
518
|
+
JourneyEvent as ContractJourneyEvent,
|
|
519
|
+
JourneyEventType as ContractJourneyEventType,
|
|
520
|
+
ReplayFrame as ContractReplayFrame,
|
|
521
|
+
CaptureReason as ContractCaptureReason,
|
|
522
|
+
SessionReplayConfig as ContractSessionReplayConfig,
|
|
523
|
+
SessionTransport as ContractSessionTransport,
|
|
524
|
+
SyncCandidate as ContractSyncCandidate,
|
|
525
|
+
SyncDecision as ContractSyncDecision,
|
|
526
|
+
NativeFrameResult as ContractNativeFrameResult,
|
|
527
|
+
NativeDeviceMetadata as ContractNativeDeviceMetadata,
|
|
528
|
+
} from '../../vendor/sdk-contracts';
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Is the viewport the platform just reported actually believable?
|
|
3
|
+
*
|
|
4
|
+
* WHY THIS EXISTS
|
|
5
|
+
* ───────────────
|
|
6
|
+
* The native layer reports the content view's size and the SDK trusts it unconditionally: in
|
|
7
|
+
* `SessionManager._normalizeInteractionPayload`, a payload tagged `confidence: 'high'` short-circuits
|
|
8
|
+
* every other source and is cached as the normalization base for the rest of the session. One device
|
|
9
|
+
* in production reports a size that cannot be true, and nothing noticed.
|
|
10
|
+
*
|
|
11
|
+
* Measured on production 2026-09-20, across 56 device models:
|
|
12
|
+
*
|
|
13
|
+
* device viewportWidth(px) windowWidth(dp) implied density
|
|
14
|
+
* OPPO CPH2821 720 360.0 2.000 ok
|
|
15
|
+
* Xiaomi 23129RAA4G 1080 392.7 2.750 ok
|
|
16
|
+
* samsung SM-M526BR 1080 411.4 2.625 ok
|
|
17
|
+
* HUAWEI INE-LX1 1080 360.0 3.000 ok
|
|
18
|
+
* HONOR DNY-NX9 1264 361.1 3.500 ok
|
|
19
|
+
* every iPhone 390..440 390..440 1.000 ok (pt space)
|
|
20
|
+
* OnePlus OnePlus8Pro 288 434.7 0.663 IMPLAUSIBLE
|
|
21
|
+
*
|
|
22
|
+
* 55 of 56 pass, one fails, and the failure is the device whose replays render as an impossibly
|
|
23
|
+
* tall, narrow phone. Its `windowWidth` of 434.7dp is *correct* for a 1440px screen (1440/434.7 =
|
|
24
|
+
* 3.3125) — it is `viewportWidth` that is wrong, by a factor of five.
|
|
25
|
+
*
|
|
26
|
+
* WHY THIS TEST AND NOT A DEVICE LIST
|
|
27
|
+
* ───────────────────────────────────
|
|
28
|
+
* The SDK already sends two INDEPENDENTLY SOURCED measurements of the same screen: the native
|
|
29
|
+
* content view (physical px on Android, points on iOS) and the JS layout width from
|
|
30
|
+
* `Dimensions.get('window')` (density-independent). Converted into a common unit they must agree.
|
|
31
|
+
* That is a self-consistency check, so it holds on hardware nobody here has ever seen — which is the
|
|
32
|
+
* whole point. A model allowlist would have to be updated for the next OnePlus, and would not exist
|
|
33
|
+
* until after that device had already shipped bad data for a week.
|
|
34
|
+
*
|
|
35
|
+
* WHY NOT ASPECT RATIO, the obvious alternative: it does not separate. The OnePlus sits at 0.643 and
|
|
36
|
+
* a legitimate Android emulator in the same fleet sits at 0.629. Aspect is kept below only as a
|
|
37
|
+
* SECONDARY guard against a corrupted height, never as the primary signal.
|
|
38
|
+
*
|
|
39
|
+
* Pure and dependency-free on purpose: the backend holds a byte-identical copy so ingest can reach
|
|
40
|
+
* the same verdict as capture, and `geometry:parity` asserts the two have not drifted.
|
|
41
|
+
*/
|
|
42
|
+
|
|
43
|
+
/** Android densities run 0.75 (ldpi) to 4.0 (xxxhdpi); the bound is loose so only nonsense fails. */
|
|
44
|
+
const DENSITY_MIN = 0.9;
|
|
45
|
+
const DENSITY_MAX = 5.0;
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* How far the two measurements may disagree when the real density IS known.
|
|
49
|
+
*
|
|
50
|
+
* Generous at 10% because `windowWidth` is itself derived by the platform as px/density and can
|
|
51
|
+
* carry rounding, and because insets are excluded inconsistently across OEMs. The failure this
|
|
52
|
+
* catches is off by 5x, so precision is not what makes it work.
|
|
53
|
+
*/
|
|
54
|
+
const DENSITY_TOLERANCE = 0.1;
|
|
55
|
+
|
|
56
|
+
/** A screen cannot be 10x taller than it is wide, or wider than it is tall by that much. */
|
|
57
|
+
const ASPECT_MIN = 0.2;
|
|
58
|
+
const ASPECT_MAX = 5.0;
|
|
59
|
+
|
|
60
|
+
export interface ViewportSample {
|
|
61
|
+
/** Native content view width — physical px on Android, points on iOS. */
|
|
62
|
+
viewportWidth?: number | null;
|
|
63
|
+
viewportHeight?: number | null;
|
|
64
|
+
/** JS layout width from `Dimensions.get('window')`, in density-independent units. */
|
|
65
|
+
windowWidth?: number | null;
|
|
66
|
+
/** Which unit `viewportWidth` is in; the SDK tags every payload with it. */
|
|
67
|
+
coordinateSpace?: string | null;
|
|
68
|
+
/** `PixelRatio.get()` when the caller knows it. Absent → the looser range test is used. */
|
|
69
|
+
density?: number | null;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
export type ViewportVerdict = 'ok' | 'implausible' | 'unverified';
|
|
73
|
+
|
|
74
|
+
export interface ViewportCheck {
|
|
75
|
+
verdict: ViewportVerdict;
|
|
76
|
+
/** viewportWidth / windowWidth — what the device implies its density is. Null when uncheckable. */
|
|
77
|
+
impliedDensity: number | null;
|
|
78
|
+
/** What it should have been: `PixelRatio.get()`, or 1 in point-space. Null when unknown. */
|
|
79
|
+
expectedDensity: number | null;
|
|
80
|
+
/** Short machine-readable cause, for logs and for the ingest flag. Null when ok. */
|
|
81
|
+
reason: string | null;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
function positive(v: unknown): number | null {
|
|
85
|
+
return typeof v === 'number' && isFinite(v) && v > 0 ? v : null;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Judge a reported viewport.
|
|
90
|
+
*
|
|
91
|
+
* `unverified` is a THIRD state on purpose and never collapses into `ok`. A payload from an older
|
|
92
|
+
* SDK build carries no `windowWidth`, so the invariant cannot be evaluated at all — recording that
|
|
93
|
+
* as "checked and fine" would be the same defect as rendering a missing measurement as zero. The
|
|
94
|
+
* caller decides what to do with an unverifiable sample; it must not be told a lie about it.
|
|
95
|
+
*/
|
|
96
|
+
export function checkViewport(sample: ViewportSample): ViewportCheck {
|
|
97
|
+
const vw = positive(sample.viewportWidth);
|
|
98
|
+
const vh = positive(sample.viewportHeight);
|
|
99
|
+
const dpW = positive(sample.windowWidth);
|
|
100
|
+
|
|
101
|
+
if (vw == null || vh == null) {
|
|
102
|
+
return { verdict: 'unverified', impliedDensity: null, expectedDensity: null, reason: 'no-viewport' };
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// Secondary guard: a plausible density cannot rescue a height that is obviously corrupt.
|
|
106
|
+
const aspect = vw / vh;
|
|
107
|
+
if (aspect < ASPECT_MIN || aspect > ASPECT_MAX) {
|
|
108
|
+
return { verdict: 'implausible', impliedDensity: null, expectedDensity: null, reason: 'aspect-out-of-range' };
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
if (dpW == null) {
|
|
112
|
+
return { verdict: 'unverified', impliedDensity: null, expectedDensity: null, reason: 'no-window-width' };
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
const impliedDensity = vw / dpW;
|
|
116
|
+
|
|
117
|
+
// Point-space (iOS): the native size is ALREADY in the unit `Dimensions.get('window')` uses, so
|
|
118
|
+
// the two must be the same number, not related by a density.
|
|
119
|
+
const space = typeof sample.coordinateSpace === 'string' ? sample.coordinateSpace : '';
|
|
120
|
+
const expectedDensity = space.endsWith('-pt') ? 1 : positive(sample.density);
|
|
121
|
+
|
|
122
|
+
if (expectedDensity != null) {
|
|
123
|
+
const off = Math.abs(impliedDensity - expectedDensity) / expectedDensity;
|
|
124
|
+
return off <= DENSITY_TOLERANCE
|
|
125
|
+
? { verdict: 'ok', impliedDensity, expectedDensity, reason: null }
|
|
126
|
+
: { verdict: 'implausible', impliedDensity, expectedDensity, reason: 'density-mismatch' };
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
// Density unknown (an older payload, or a platform that does not report it): fall back to the
|
|
130
|
+
// range test. Weaker, but it still rejects the 0.663 that started this.
|
|
131
|
+
return impliedDensity >= DENSITY_MIN && impliedDensity <= DENSITY_MAX
|
|
132
|
+
? { verdict: 'ok', impliedDensity, expectedDensity: null, reason: null }
|
|
133
|
+
: { verdict: 'implausible', impliedDensity, expectedDensity: null, reason: 'density-out-of-range' };
|
|
134
|
+
}
|