@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.
Files changed (1203) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +154 -0
  3. package/android/build.gradle +94 -0
  4. package/android/consumer-rules.pro +28 -0
  5. package/android/src/androidTest/java/com/scalebun/rn/ota/ScaleBunOtaVerifierInstrumentedTest.kt +112 -0
  6. package/android/src/main/AndroidManifest.xml +14 -0
  7. package/android/src/main/java/com/scalebun/core/crash/CrashStorage.kt +155 -0
  8. package/android/src/main/java/com/scalebun/core/crash/NativeCrashHandler.kt +93 -0
  9. package/android/src/main/java/com/scalebun/core/performance/ANRWatchdog.kt +100 -0
  10. package/android/src/main/java/com/scalebun/core/performance/AppStartCollector.kt +180 -0
  11. package/android/src/main/java/com/scalebun/core/performance/FrameMetricsCollector.kt +230 -0
  12. package/android/src/main/java/com/scalebun/core/performance/PerformanceCore.kt +165 -0
  13. package/android/src/main/java/com/scalebun/profiler/ProfilerModule.kt +398 -0
  14. package/android/src/main/java/com/scalebun/profiler/ProfilerPackage.kt +24 -0
  15. package/android/src/main/java/com/scalebun/profiler/collectors/CpuCollector.kt +161 -0
  16. package/android/src/main/java/com/scalebun/profiler/collectors/IncidentDetector.kt +223 -0
  17. package/android/src/main/java/com/scalebun/profiler/collectors/MemoryCollector.kt +157 -0
  18. package/android/src/main/java/com/scalebun/profiler/collectors/RenderCollector.kt +194 -0
  19. package/android/src/main/java/com/scalebun/profiler/collectors/SamplerScheduler.kt +218 -0
  20. package/android/src/main/java/com/scalebun/profiler/collectors/ThreadCollector.kt +142 -0
  21. package/android/src/main/java/com/scalebun/replaysdk/ReplaySdkModule.kt +1117 -0
  22. package/android/src/main/java/com/scalebun/replaysdk/ReplaySdkPackage.kt +24 -0
  23. package/android/src/main/java/com/scalebun/replaysdk/capture/CaptureReason.kt +47 -0
  24. package/android/src/main/java/com/scalebun/replaysdk/capture/FrameCaptureManager.kt +574 -0
  25. package/android/src/main/java/com/scalebun/replaysdk/capture/FrameCaptureScheduler.kt +187 -0
  26. package/android/src/main/java/com/scalebun/replaysdk/capture/UiStabilityDetector.kt +214 -0
  27. package/android/src/main/java/com/scalebun/replaysdk/core/ReplayConfig.kt +144 -0
  28. package/android/src/main/java/com/scalebun/replaysdk/core/ReplayLogger.kt +31 -0
  29. package/android/src/main/java/com/scalebun/replaysdk/core/SessionIdGenerator.kt +15 -0
  30. package/android/src/main/java/com/scalebun/replaysdk/models/ReplayModels.kt +94 -0
  31. package/android/src/main/java/com/scalebun/replaysdk/outbox/NativeOutbox.kt +574 -0
  32. package/android/src/main/java/com/scalebun/replaysdk/outbox/OutboxUploader.kt +559 -0
  33. package/android/src/main/java/com/scalebun/replaysdk/privacy/PrivacyMaskProcessor.kt +126 -0
  34. package/android/src/main/java/com/scalebun/replaysdk/session/SessionManager.kt +322 -0
  35. package/android/src/main/java/com/scalebun/replaysdk/storage/ReplayStorage.kt +136 -0
  36. package/android/src/main/java/com/scalebun/replaysdk/timeline/TimelineCollector.kt +28 -0
  37. package/android/src/main/java/com/scalebun/replaysdk/tracking/InteractionTracker.kt +470 -0
  38. package/android/src/main/java/com/scalebun/replaysdk/tracking/ScreenTracker.kt +20 -0
  39. package/android/src/main/java/com/scalebun/replaysdk/tracking/ScrollContextProbe.kt +188 -0
  40. package/android/src/main/java/com/scalebun/replaysdk/transport/ReplayTransport.kt +99 -0
  41. package/android/src/main/java/com/scalebun/replaysdk/voice/VoiceRecorder.kt +121 -0
  42. package/android/src/main/java/com/scalebun/replaysdk/voice/VoiceTranscriber.kt +170 -0
  43. package/android/src/main/java/com/scalebun/rn/ScaleBunPackage.kt +113 -0
  44. package/android/src/main/java/com/scalebun/rn/crash/ScaleBunCrashModule.kt +188 -0
  45. package/android/src/main/java/com/scalebun/rn/crash/ScaleBunCrashPackage.kt +22 -0
  46. package/android/src/main/java/com/scalebun/rn/engage/ScaleBunEngageModule.kt +579 -0
  47. package/android/src/main/java/com/scalebun/rn/engage/ScaleBunEngagePackage.kt +22 -0
  48. package/android/src/main/java/com/scalebun/rn/engage/ScaleBunNotificationPresenter.kt +110 -0
  49. package/android/src/main/java/com/scalebun/rn/ota/BsPatch.kt +240 -0
  50. package/android/src/main/java/com/scalebun/rn/ota/BundleDownloader.kt +195 -0
  51. package/android/src/main/java/com/scalebun/rn/ota/DeviceIntegrity.kt +81 -0
  52. package/android/src/main/java/com/scalebun/rn/ota/DownloadFailure.kt +55 -0
  53. package/android/src/main/java/com/scalebun/rn/ota/OtaProtocol.kt +244 -0
  54. package/android/src/main/java/com/scalebun/rn/ota/ScaleBunOtaKeyRegistry.kt +100 -0
  55. package/android/src/main/java/com/scalebun/rn/ota/ScaleBunOtaModule.kt +683 -0
  56. package/android/src/main/java/com/scalebun/rn/ota/ScaleBunOtaReleaseVerifier.kt +136 -0
  57. package/android/src/main/java/com/scalebun/rn/ota/SlotManager.kt +578 -0
  58. package/android/src/main/java/com/scalebun/rn/ota/TlsPinning.kt +118 -0
  59. package/android/src/main/java/com/scalebun/rn/performance/PerformanceModule.kt +217 -0
  60. package/android/src/main/java/com/scalebun/rn/referrer/ScaleBunInstallReferrerModule.kt +77 -0
  61. package/android/src/main/java/com/scalebun/rn/storage/ScaleBunStorageModule.kt +68 -0
  62. package/android/src/main/java/com/scalebun/storage/KvFileStore.kt +174 -0
  63. package/android/src/newarch/java/com/scalebun/profiler/ProfilerSpec.kt +12 -0
  64. package/android/src/newarch/java/com/scalebun/replaysdk/ReplaySdkSpec.kt +12 -0
  65. package/android/src/newarch/java/com/scalebun/rn/crash/ScaleBunCrashSpec.kt +15 -0
  66. package/android/src/newarch/java/com/scalebun/rn/ota/ScaleBunOtaSpec.kt +16 -0
  67. package/android/src/newarch/java/com/scalebun/rn/performance/PerformanceSpec.kt +12 -0
  68. package/android/src/newarch/java/com/scalebun/rn/referrer/ScaleBunInstallReferrerSpec.kt +14 -0
  69. package/android/src/newarch/java/com/scalebun/rn/storage/ScaleBunStorageSpec.kt +16 -0
  70. package/android/src/oldarch/java/com/scalebun/profiler/ProfilerSpec.kt +34 -0
  71. package/android/src/oldarch/java/com/scalebun/replaysdk/ReplaySdkSpec.kt +77 -0
  72. package/android/src/oldarch/java/com/scalebun/rn/crash/ScaleBunCrashSpec.kt +40 -0
  73. package/android/src/oldarch/java/com/scalebun/rn/ota/ScaleBunOtaSpec.kt +42 -0
  74. package/android/src/oldarch/java/com/scalebun/rn/performance/PerformanceSpec.kt +27 -0
  75. package/android/src/oldarch/java/com/scalebun/rn/referrer/ScaleBunInstallReferrerSpec.kt +18 -0
  76. package/android/src/oldarch/java/com/scalebun/rn/storage/ScaleBunStorageSpec.kt +26 -0
  77. package/bin/lib/androidCodemod.js +370 -0
  78. package/bin/lib/iosCodemod.js +343 -0
  79. package/bin/scalebun.js +1004 -0
  80. package/dist/scalebun.full.js +37348 -0
  81. package/dist/scalebun.slim.js +34137 -0
  82. package/ios/Capture/InteractionTracker.swift +237 -0
  83. package/ios/Capture/PrivacyMaskProcessor.swift +158 -0
  84. package/ios/Capture/ScreenshotCaptureManager.swift +398 -0
  85. package/ios/Capture/WindowResolver.swift +63 -0
  86. package/ios/Core/DeviceIdentity.swift +50 -0
  87. package/ios/Core/ReplayConfig.swift +100 -0
  88. package/ios/Core/ReplayLogger.swift +22 -0
  89. package/ios/Core/SessionIdGenerator.swift +18 -0
  90. package/ios/Crash/ScaleBunCrashBridge.mm +74 -0
  91. package/ios/Crash/ScaleBunCrashHandler.swift +84 -0
  92. package/ios/Crash/ScaleBunCrashModule.swift +98 -0
  93. package/ios/Crash/ScaleBunCrashSignalBridge.h +49 -0
  94. package/ios/Crash/ScaleBunCrashSignalBridge.m +296 -0
  95. package/ios/Crash/ScaleBunCrashSignalStress.c +137 -0
  96. package/ios/Crash/ScaleBunCrashStorage.swift +121 -0
  97. package/ios/Crash/ScaleBunExceptionChain.swift +71 -0
  98. package/ios/CrashTests/ScaleBunExceptionChainTests.swift +144 -0
  99. package/ios/Engage/ScaleBunEngageBridge.m +32 -0
  100. package/ios/Engage/ScaleBunEngageModule.swift +250 -0
  101. package/ios/Engage/ScaleBunPushNotificationCenter.swift +185 -0
  102. package/ios/Ota/BsPatch.swift +203 -0
  103. package/ios/Ota/BundleDownloader.swift +249 -0
  104. package/ios/Ota/DeviceIntegrity.swift +112 -0
  105. package/ios/Ota/DownloadFailure.swift +56 -0
  106. package/ios/Ota/OtaProtocol.swift +246 -0
  107. package/ios/Ota/OtaSlotManager.swift +613 -0
  108. package/ios/Ota/ScaleBunOtaBridge.mm +92 -0
  109. package/ios/Ota/ScaleBunOtaEventsModule.swift +61 -0
  110. package/ios/Ota/ScaleBunOtaKeyRegistry.swift +147 -0
  111. package/ios/Ota/ScaleBunOtaModule.swift +587 -0
  112. package/ios/Ota/ScaleBunOtaReleaseVerifier.swift +119 -0
  113. package/ios/Ota/TlsPinning.swift +222 -0
  114. package/ios/OtaTests/DownloadFailureTests.swift +78 -0
  115. package/ios/OtaTests/ScaleBunOtaVerifierTests.swift +548 -0
  116. package/ios/Outbox/NativeOutbox.swift +632 -0
  117. package/ios/Outbox/OutboxUploader.swift +578 -0
  118. package/ios/Performance/ScaleBunPerformanceBridge.m +32 -0
  119. package/ios/Performance/ScaleBunPerformanceModule.swift +290 -0
  120. package/ios/PrivacyInfo.xcprivacy +97 -0
  121. package/ios/Profiler/ScaleBunProfilerBridge.m +55 -0
  122. package/ios/Profiler/ScaleBunProfilerModule.swift +966 -0
  123. package/ios/ReplaySdk-Bridging-Header.h +2 -0
  124. package/ios/ReplaySdk.swift +793 -0
  125. package/ios/ReplaySdkBridge.m +97 -0
  126. package/ios/Session/SessionManager.swift +273 -0
  127. package/ios/Skan/ScaleBunSkanBridge.m +14 -0
  128. package/ios/Skan/ScaleBunSkanModule.swift +61 -0
  129. package/ios/Storage/ReplayStorage.swift +61 -0
  130. package/ios/Storage/ScaleBunKvFileStore.swift +125 -0
  131. package/ios/Storage/ScaleBunStorageBridge.mm +72 -0
  132. package/ios/Storage/ScaleBunStorageModule.swift +57 -0
  133. package/ios/Transport/ReplayTransport.swift +70 -0
  134. package/ios/VoiceRecorder.swift +145 -0
  135. package/lib/commonjs/analytics/EventTracker.js +598 -0
  136. package/lib/commonjs/analytics/automaticEvents.js +71 -0
  137. package/lib/commonjs/analytics/batching.js +64 -0
  138. package/lib/commonjs/analytics/eventLane.js +55 -0
  139. package/lib/commonjs/analytics/revenue.js +125 -0
  140. package/lib/commonjs/analytics/subscription.js +94 -0
  141. package/lib/commonjs/bootstrap/FeatureRegistry.js +86 -0
  142. package/lib/commonjs/bootstrap/SDKBootstrapper.js +748 -0
  143. package/lib/commonjs/bucketing/fnv1a32.js +45 -0
  144. package/lib/commonjs/compat/codepush.js +153 -0
  145. package/lib/commonjs/config/ConfigManager.js +238 -0
  146. package/lib/commonjs/config/configTypes.js +16 -0
  147. package/lib/commonjs/config/otaPolicyState.js +85 -0
  148. package/lib/commonjs/config/quotaState.js +435 -0
  149. package/lib/commonjs/core/architecture.js +45 -0
  150. package/lib/commonjs/core/clock/now.js +13 -0
  151. package/lib/commonjs/core/config/defaults.js +2 -0
  152. package/lib/commonjs/core/config/schema.js +512 -0
  153. package/lib/commonjs/core/constants/endpoints.js +19 -0
  154. package/lib/commonjs/core/constants/protocol.js +31 -0
  155. package/lib/commonjs/core/constants/timings.js +39 -0
  156. package/lib/commonjs/core/constants/version.js +18 -0
  157. package/lib/commonjs/core/context/app.js +2 -0
  158. package/lib/commonjs/core/context/device.js +155 -0
  159. package/lib/commonjs/core/context/session.js +2 -0
  160. package/lib/commonjs/core/context/user.js +2 -0
  161. package/lib/commonjs/core/contracts/IFeature.js +2 -0
  162. package/lib/commonjs/core/di/container.js +29 -0
  163. package/lib/commonjs/core/encoding/base64.js +50 -0
  164. package/lib/commonjs/core/id/deviceId.js +52 -0
  165. package/lib/commonjs/core/id/installationId.js +55 -0
  166. package/lib/commonjs/core/id/sessionId.js +2 -0
  167. package/lib/commonjs/core/lifecycle/appLifecycle.js +31 -0
  168. package/lib/commonjs/core/lifecycle/crashSafe.js +33 -0
  169. package/lib/commonjs/core/logger/errorClassification.js +107 -0
  170. package/lib/commonjs/core/logger/internalLogger.js +63 -0
  171. package/lib/commonjs/core/logger/levels.js +2 -0
  172. package/lib/commonjs/crypto/hmacSha256.js +132 -0
  173. package/lib/commonjs/debug/bootstrap.js +429 -0
  174. package/lib/commonjs/debug/commands.js +732 -0
  175. package/lib/commonjs/debug/configBuilder.js +70 -0
  176. package/lib/commonjs/debug/exportBridge.js +155 -0
  177. package/lib/commonjs/debug/hostResolver.js +42 -0
  178. package/lib/commonjs/debug/index.js +141 -0
  179. package/lib/commonjs/debug/metrics.js +39 -0
  180. package/lib/commonjs/debug/perf.js +186 -0
  181. package/lib/commonjs/debug/perfWiring.js +109 -0
  182. package/lib/commonjs/debug/protocol.js +121 -0
  183. package/lib/commonjs/debug/redaction.js +422 -0
  184. package/lib/commonjs/debug/replayWiring.js +149 -0
  185. package/lib/commonjs/debug/screenTracking.js +60 -0
  186. package/lib/commonjs/debug/sessionWiring.js +48 -0
  187. package/lib/commonjs/debug/stream.js +542 -0
  188. package/lib/commonjs/debug/transport.js +368 -0
  189. package/lib/commonjs/features/bugreport/BugReportFeature.js +112 -0
  190. package/lib/commonjs/features/bugreport/buildPayload.js +97 -0
  191. package/lib/commonjs/features/bugreport/index.js +2 -0
  192. package/lib/commonjs/features/crash/CrashFeature.js +86 -0
  193. package/lib/commonjs/features/crash/CrashReporter.js +160 -0
  194. package/lib/commonjs/features/crash/NativeCrashFeature.js +42 -0
  195. package/lib/commonjs/features/crash/capture.js +48 -0
  196. package/lib/commonjs/features/crash/globalHandler.js +41 -0
  197. package/lib/commonjs/features/crash/index.js +14 -0
  198. package/lib/commonjs/features/crash/nativeCrashBridge.js +361 -0
  199. package/lib/commonjs/features/crash/rejectionHandler.js +180 -0
  200. package/lib/commonjs/features/crash/scrubCrash.js +158 -0
  201. package/lib/commonjs/features/engage/EngageAnchor.js +132 -0
  202. package/lib/commonjs/features/engage/EngageArchetypeRenderers.js +4292 -0
  203. package/lib/commonjs/features/engage/EngageInAppView.js +2670 -0
  204. package/lib/commonjs/features/engage/EngageInlinePlacement.js +133 -0
  205. package/lib/commonjs/features/engage/EngagePromptProvider.js +1063 -0
  206. package/lib/commonjs/features/engage/EngagePromptView.js +1252 -0
  207. package/lib/commonjs/features/engage/EngageTransport.js +608 -0
  208. package/lib/commonjs/features/engage/EngageVariantContent.js +1778 -0
  209. package/lib/commonjs/features/engage/__test-support__/reactNativeStub.js +54 -0
  210. package/lib/commonjs/features/engage/attachmentCapture.js +48 -0
  211. package/lib/commonjs/features/engage/captureVoiceAttachment.js +88 -0
  212. package/lib/commonjs/features/engage/engageCoachmarkTour.js +106 -0
  213. package/lib/commonjs/features/engage/engageGameLogic.js +308 -0
  214. package/lib/commonjs/features/engage/engageMediaSizing.js +60 -0
  215. package/lib/commonjs/features/engage/engageMultiStepSheet.js +43 -0
  216. package/lib/commonjs/features/engage/engageOutcome.js +118 -0
  217. package/lib/commonjs/features/engage/engagePushTokenBridge.js +72 -0
  218. package/lib/commonjs/features/engage/engageShakeBridge.js +62 -0
  219. package/lib/commonjs/features/engage/engageSignals.js +39 -0
  220. package/lib/commonjs/features/engage/engageStoreReviewBridge.js +49 -0
  221. package/lib/commonjs/features/engage/engageTestSeenStore.js +99 -0
  222. package/lib/commonjs/features/engage/engageThrottle.js +404 -0
  223. package/lib/commonjs/features/engage/engageTriggerEngine.js +365 -0
  224. package/lib/commonjs/features/engage/engageTypes.js +116 -0
  225. package/lib/commonjs/features/engage/engageVariantResolver.js +143 -0
  226. package/lib/commonjs/features/engage/engageWindowInsets.js +98 -0
  227. package/lib/commonjs/features/engage/gestureTriggerDetector.js +85 -0
  228. package/lib/commonjs/features/engage/transcription/TranscriptionProvider.js +55 -0
  229. package/lib/commonjs/features/install-referrer/installReferrer.js +113 -0
  230. package/lib/commonjs/features/journey/ScaleBunDebugRoot.js +1038 -0
  231. package/lib/commonjs/features/journey/ScaleBunFlatList.js +39 -0
  232. package/lib/commonjs/features/journey/ScaleBunImpression.js +113 -0
  233. package/lib/commonjs/features/journey/ScaleBunScrollView.js +102 -0
  234. package/lib/commonjs/features/journey/ScaleBunSectionList.js +39 -0
  235. package/lib/commonjs/features/journey/autoInstrumentScroll.js +161 -0
  236. package/lib/commonjs/features/journey/calibrationContext.js +42 -0
  237. package/lib/commonjs/features/journey/gestureBuffer.js +63 -0
  238. package/lib/commonjs/features/journey/gestureDetector.js +176 -0
  239. package/lib/commonjs/features/journey/impression.js +93 -0
  240. package/lib/commonjs/features/journey/interactionProtocol.js +168 -0
  241. package/lib/commonjs/features/journey/journeyManager.js +466 -0
  242. package/lib/commonjs/features/journey/journeyTypes.js +55 -0
  243. package/lib/commonjs/features/journey/nativeScroll.js +85 -0
  244. package/lib/commonjs/features/journey/navDetector.js +161 -0
  245. package/lib/commonjs/features/journey/screenshotHelper.js +136 -0
  246. package/lib/commonjs/features/journey/scrollContext.js +154 -0
  247. package/lib/commonjs/features/journey/targetGeometry.js +185 -0
  248. package/lib/commonjs/features/journey/targetRegistry.js +53 -0
  249. package/lib/commonjs/features/journey/touchTarget.js +249 -0
  250. package/lib/commonjs/features/journey/uiState.js +188 -0
  251. package/lib/commonjs/features/navigation/AutoScreenDetector.js +607 -0
  252. package/lib/commonjs/features/network/NetworkFeature.js +216 -0
  253. package/lib/commonjs/features/network/index.js +23 -0
  254. package/lib/commonjs/features/network/thirdParty.js +151 -0
  255. package/lib/commonjs/features/ota/OtaEventEmitter.js +129 -0
  256. package/lib/commonjs/features/ota/OtaOrchestrator.js +1309 -0
  257. package/lib/commonjs/features/ota/OtaTypes.js +6 -0
  258. package/lib/commonjs/features/ota/deviceAttributes.js +48 -0
  259. package/lib/commonjs/features/ota/environment.js +172 -0
  260. package/lib/commonjs/features/ota/geoCountry.js +93 -0
  261. package/lib/commonjs/features/ota/retry.js +96 -0
  262. package/lib/commonjs/features/ota/signedDownload.js +187 -0
  263. package/lib/commonjs/features/ota/useOtaUpdate.js +106 -0
  264. package/lib/commonjs/features/performance/PerformanceFeature.js +649 -0
  265. package/lib/commonjs/features/performance/collectors/AppLaunchCollector.js +122 -0
  266. package/lib/commonjs/features/performance/collectors/AutoScreenLoadCollector.js +232 -0
  267. package/lib/commonjs/features/performance/collectors/CustomTraceCollector.js +99 -0
  268. package/lib/commonjs/features/performance/collectors/FrameMetricsCollector.js +184 -0
  269. package/lib/commonjs/features/performance/collectors/JsStallCollector.js +165 -0
  270. package/lib/commonjs/features/performance/collectors/NetworkPerfCollector.js +59 -0
  271. package/lib/commonjs/features/performance/collectors/ScreenLoadCollector.js +78 -0
  272. package/lib/commonjs/features/performance/collectors/UiHangCollector.js +78 -0
  273. package/lib/commonjs/features/performance/config.js +58 -0
  274. package/lib/commonjs/features/performance/getNativePerformanceModule.js +44 -0
  275. package/lib/commonjs/features/performance/index.js +58 -0
  276. package/lib/commonjs/features/performance/metrics/MetricsEngine.js +148 -0
  277. package/lib/commonjs/features/performance/models.js +48 -0
  278. package/lib/commonjs/features/performance/transport/PerformanceTransport.js +168 -0
  279. package/lib/commonjs/features/profiler/ProfilerFeature.js +600 -0
  280. package/lib/commonjs/features/profiler/config.js +151 -0
  281. package/lib/commonjs/features/profiler/contracts.js +62 -0
  282. package/lib/commonjs/features/profiler/index.js +40 -0
  283. package/lib/commonjs/features/profiler/models.js +112 -0
  284. package/lib/commonjs/features/profiler/transport/ProfilerTransport.js +94 -0
  285. package/lib/commonjs/features/replay/bridge/adapters/bridgeAdapter.js +203 -0
  286. package/lib/commonjs/features/replay/bridge/eventEmitter.js +128 -0
  287. package/lib/commonjs/features/replay/bridge/nativeModule.js +95 -0
  288. package/lib/commonjs/features/replay/bridge/nativeQuota.js +121 -0
  289. package/lib/commonjs/features/replay/core/clock/clock.js +47 -0
  290. package/lib/commonjs/features/replay/core/config/defaults.js +88 -0
  291. package/lib/commonjs/features/replay/core/config/validator.js +109 -0
  292. package/lib/commonjs/features/replay/core/env/environmentDetector.js +28 -0
  293. package/lib/commonjs/features/replay/core/errors/safeCall.js +42 -0
  294. package/lib/commonjs/features/replay/core/ids/sessionId.js +53 -0
  295. package/lib/commonjs/features/replay/core/logger/logger.js +36 -0
  296. package/lib/commonjs/features/replay/core/privacy/privacyTypes.js +34 -0
  297. package/lib/commonjs/features/replay/core/queue/boundedQueue.js +71 -0
  298. package/lib/commonjs/features/replay/integrations/alert/alertInstrumentation.js +259 -0
  299. package/lib/commonjs/features/replay/integrations/logs/consoleIntegration.js +139 -0
  300. package/lib/commonjs/features/replay/integrations/network/networkAdapter.js +77 -0
  301. package/lib/commonjs/features/replay/integrations/react-navigation/navigationIntegration.js +88 -0
  302. package/lib/commonjs/features/replay/integrations/touch/ReplayRoot.js +103 -0
  303. package/lib/commonjs/features/replay/pipeline/batching/batchManager.js +119 -0
  304. package/lib/commonjs/features/replay/pipeline/envelope/envelopeBuilder.js +52 -0
  305. package/lib/commonjs/features/replay/pipeline/retry/retryPolicy.js +53 -0
  306. package/lib/commonjs/features/replay/pipeline/transport/transportTypes.js +67 -0
  307. package/lib/commonjs/features/replay/public/api.js +336 -0
  308. package/lib/commonjs/features/replay/public/enums.js +85 -0
  309. package/lib/commonjs/features/replay/public/types.js +6 -0
  310. package/lib/commonjs/features/replay/replay/breadcrumbs/breadcrumbCollector.js +119 -0
  311. package/lib/commonjs/features/replay/replay/frames/frameModels.js +40 -0
  312. package/lib/commonjs/features/replay/replay/session/sessionOrchestrator.js +279 -0
  313. package/lib/commonjs/features/replay/replay/timeline/timelineModels.js +120 -0
  314. package/lib/commonjs/features/replay/transport/BackendReplayTransport.js +175 -0
  315. package/lib/commonjs/features/replay/transport/CompositeReplayTransport.js +75 -0
  316. package/lib/commonjs/features/replay/transport/DesktopReplayTransport.js +124 -0
  317. package/lib/commonjs/features/replay/transport/ReplayTransport.js +2 -0
  318. package/lib/commonjs/features/session/BackendSessionAdapter.js +1915 -0
  319. package/lib/commonjs/features/session/DesktopSessionTransport.js +124 -0
  320. package/lib/commonjs/features/session/JourneyEventPipeline.js +244 -0
  321. package/lib/commonjs/features/session/ReplayCaptureManager.js +1253 -0
  322. package/lib/commonjs/features/session/ScrollTracker.js +147 -0
  323. package/lib/commonjs/features/session/SessionManager.js +1448 -0
  324. package/lib/commonjs/features/session/SyncDecisionEngine.js +95 -0
  325. package/lib/commonjs/features/session/frameLink.js +36 -0
  326. package/lib/commonjs/features/session/frameScrollState.js +41 -0
  327. package/lib/commonjs/features/session/index.js +84 -0
  328. package/lib/commonjs/features/session/nativeCapture.js +53 -0
  329. package/lib/commonjs/features/session/outboxFrameCapture.js +83 -0
  330. package/lib/commonjs/features/session/sessionTypes.js +230 -0
  331. package/lib/commonjs/features/session/viewportPlausibility.js +143 -0
  332. package/lib/commonjs/features/skan/skanBridge.js +54 -0
  333. package/lib/commonjs/features/skan/skanConversionManager.js +134 -0
  334. package/lib/commonjs/index.js +267 -0
  335. package/lib/commonjs/integrations/fetch/fetchInterceptor.js +174 -0
  336. package/lib/commonjs/integrations/navigation/screenTracker.js +2 -0
  337. package/lib/commonjs/integrations/network/bodyCapture.js +336 -0
  338. package/lib/commonjs/integrations/xhr/xhrInterceptor.js +224 -0
  339. package/lib/commonjs/metro/composeSourceMap.js +105 -0
  340. package/lib/commonjs/metro/featureModules.js +131 -0
  341. package/lib/commonjs/metro/index.js +230 -0
  342. package/lib/commonjs/metro/optionalDependencyStub.js +6 -0
  343. package/lib/commonjs/metro/optionalModules.js +31 -0
  344. package/lib/commonjs/metro/serializerCompose.js +161 -0
  345. package/lib/commonjs/pipeline/dispatcher/dispatcher.js +28 -0
  346. package/lib/commonjs/pipeline/envelope/envelope.js +17 -0
  347. package/lib/commonjs/pipeline/envelope/serializer.js +14 -0
  348. package/lib/commonjs/pipeline/processors/dedupe.js +2 -0
  349. package/lib/commonjs/pipeline/processors/enrich.js +16 -0
  350. package/lib/commonjs/pipeline/processors/sampling.js +2 -0
  351. package/lib/commonjs/pipeline/processors/sanitize.js +28 -0
  352. package/lib/commonjs/pipeline/queue/flushQueue.js +107 -0
  353. package/lib/commonjs/pipeline/queue/memoryQueue.js +31 -0
  354. package/lib/commonjs/pipeline/queue/persistentQueue.js +342 -0
  355. package/lib/commonjs/pipeline/queue/queuePolicy.js +2 -0
  356. package/lib/commonjs/pipeline/scheduler/flushScheduler.js +45 -0
  357. package/lib/commonjs/pipeline/scheduler/retryPolicy.js +15 -0
  358. package/lib/commonjs/public/ScaleBunErrorBoundary.js +91 -0
  359. package/lib/commonjs/public/ScaleBunFacade.js +2044 -0
  360. package/lib/commonjs/public/ScaleBunProvider.js +62 -0
  361. package/lib/commonjs/public/typedTracker.js +79 -0
  362. package/lib/commonjs/public/types.js +6 -0
  363. package/lib/commonjs/push/PushManager.js +270 -0
  364. package/lib/commonjs/push/adapters/ManualAdapter.js +86 -0
  365. package/lib/commonjs/push/adapters/NativeBridgeAdapter.js +131 -0
  366. package/lib/commonjs/push/adapters/NoopAdapter.js +45 -0
  367. package/lib/commonjs/push/adapters/RNFirebaseMessagingAdapter.js +248 -0
  368. package/lib/commonjs/push/adapters/loadMessaging.js +29 -0
  369. package/lib/commonjs/push/adapters/loadNotifee.js +36 -0
  370. package/lib/commonjs/push/adapters/selectAdapter.js +153 -0
  371. package/lib/commonjs/push/detect/capabilities.js +136 -0
  372. package/lib/commonjs/push/index.js +33 -0
  373. package/lib/commonjs/push/native/nativeNotifications.js +168 -0
  374. package/lib/commonjs/push/types.js +2 -0
  375. package/lib/commonjs/specs/NativeReplaySdk.js +28 -0
  376. package/lib/commonjs/specs/NativeScaleBunCrash.js +30 -0
  377. package/lib/commonjs/specs/NativeScaleBunInstallReferrer.js +24 -0
  378. package/lib/commonjs/specs/NativeScaleBunOta.js +32 -0
  379. package/lib/commonjs/specs/NativeScaleBunPerformance.js +25 -0
  380. package/lib/commonjs/specs/NativeScaleBunProfiler.js +26 -0
  381. package/lib/commonjs/specs/NativeScaleBunStorage.js +40 -0
  382. package/lib/commonjs/storage/StorageBackend.js +240 -0
  383. package/lib/commonjs/storage/db/sqlite.js +2 -0
  384. package/lib/commonjs/storage/files/fileStore.js +2 -0
  385. package/lib/commonjs/transport/auth/sdkSession.js +28 -0
  386. package/lib/commonjs/transport/backoff/exponentialJitter.js +16 -0
  387. package/lib/commonjs/transport/http/endpoints.js +46 -0
  388. package/lib/commonjs/transport/http/httpClient.js +72 -0
  389. package/lib/commonjs/transport/rateLimit/retryAfter.js +2 -0
  390. package/lib/commonjs/transport/signing/requestSigner.js +2 -0
  391. package/lib/commonjs/vendor/protocol/index.js +327 -0
  392. package/lib/commonjs/vendor/protocol/internal/validation.js +429 -0
  393. package/lib/commonjs/vendor/sdk-contracts/bridge.js +2 -0
  394. package/lib/commonjs/vendor/sdk-contracts/config.js +2 -0
  395. package/lib/commonjs/vendor/sdk-contracts/events.js +2 -0
  396. package/lib/commonjs/vendor/sdk-contracts/features.js +2 -0
  397. package/lib/commonjs/vendor/sdk-contracts/index.js +2 -0
  398. package/lib/commonjs/vendor/sdk-contracts/platform.js +2 -0
  399. package/lib/commonjs/vendor/sdk-contracts/session-boundary.js +6 -0
  400. package/lib/commonjs/vendor/sdk-contracts/session.js +2 -0
  401. package/lib/commonjs/vendor/vendor.manifest +10 -0
  402. package/lib/module/analytics/EventTracker.js +592 -0
  403. package/lib/module/analytics/automaticEvents.js +63 -0
  404. package/lib/module/analytics/batching.js +55 -0
  405. package/lib/module/analytics/eventLane.js +47 -0
  406. package/lib/module/analytics/revenue.js +117 -0
  407. package/lib/module/analytics/subscription.js +86 -0
  408. package/lib/module/bootstrap/FeatureRegistry.js +79 -0
  409. package/lib/module/bootstrap/SDKBootstrapper.js +742 -0
  410. package/lib/module/bucketing/fnv1a32.js +37 -0
  411. package/lib/module/compat/codepush.js +147 -0
  412. package/lib/module/config/ConfigManager.js +230 -0
  413. package/lib/module/config/configTypes.js +10 -0
  414. package/lib/module/config/otaPolicyState.js +76 -0
  415. package/lib/module/config/quotaState.js +423 -0
  416. package/lib/module/core/architecture.js +38 -0
  417. package/lib/module/core/clock/now.js +7 -0
  418. package/lib/module/core/config/defaults.js +2 -0
  419. package/lib/module/core/config/schema.js +506 -0
  420. package/lib/module/core/constants/endpoints.js +13 -0
  421. package/lib/module/core/constants/protocol.js +25 -0
  422. package/lib/module/core/constants/timings.js +26 -0
  423. package/lib/module/core/constants/version.js +12 -0
  424. package/lib/module/core/context/app.js +2 -0
  425. package/lib/module/core/context/device.js +143 -0
  426. package/lib/module/core/context/session.js +2 -0
  427. package/lib/module/core/context/user.js +2 -0
  428. package/lib/module/core/contracts/IFeature.js +2 -0
  429. package/lib/module/core/di/container.js +22 -0
  430. package/lib/module/core/encoding/base64.js +44 -0
  431. package/lib/module/core/id/deviceId.js +45 -0
  432. package/lib/module/core/id/installationId.js +50 -0
  433. package/lib/module/core/id/sessionId.js +2 -0
  434. package/lib/module/core/lifecycle/appLifecycle.js +25 -0
  435. package/lib/module/core/lifecycle/crashSafe.js +26 -0
  436. package/lib/module/core/logger/errorClassification.js +96 -0
  437. package/lib/module/core/logger/internalLogger.js +59 -0
  438. package/lib/module/core/logger/levels.js +2 -0
  439. package/lib/module/crypto/hmacSha256.js +126 -0
  440. package/lib/module/debug/bootstrap.js +393 -0
  441. package/lib/module/debug/commands.js +726 -0
  442. package/lib/module/debug/configBuilder.js +63 -0
  443. package/lib/module/debug/exportBridge.js +148 -0
  444. package/lib/module/debug/hostResolver.js +37 -0
  445. package/lib/module/debug/index.js +13 -0
  446. package/lib/module/debug/metrics.js +33 -0
  447. package/lib/module/debug/perf.js +180 -0
  448. package/lib/module/debug/perfWiring.js +102 -0
  449. package/lib/module/debug/protocol.js +19 -0
  450. package/lib/module/debug/redaction.js +411 -0
  451. package/lib/module/debug/replayWiring.js +139 -0
  452. package/lib/module/debug/screenTracking.js +53 -0
  453. package/lib/module/debug/sessionWiring.js +43 -0
  454. package/lib/module/debug/stream.js +536 -0
  455. package/lib/module/debug/transport.js +362 -0
  456. package/lib/module/features/bugreport/BugReportFeature.js +105 -0
  457. package/lib/module/features/bugreport/buildPayload.js +91 -0
  458. package/lib/module/features/bugreport/index.js +2 -0
  459. package/lib/module/features/crash/CrashFeature.js +79 -0
  460. package/lib/module/features/crash/CrashReporter.js +151 -0
  461. package/lib/module/features/crash/NativeCrashFeature.js +36 -0
  462. package/lib/module/features/crash/capture.js +42 -0
  463. package/lib/module/features/crash/globalHandler.js +36 -0
  464. package/lib/module/features/crash/index.js +8 -0
  465. package/lib/module/features/crash/nativeCrashBridge.js +350 -0
  466. package/lib/module/features/crash/rejectionHandler.js +171 -0
  467. package/lib/module/features/crash/scrubCrash.js +149 -0
  468. package/lib/module/features/engage/EngageAnchor.js +121 -0
  469. package/lib/module/features/engage/EngageArchetypeRenderers.js +4264 -0
  470. package/lib/module/features/engage/EngageInAppView.js +2656 -0
  471. package/lib/module/features/engage/EngageInlinePlacement.js +123 -0
  472. package/lib/module/features/engage/EngagePromptProvider.js +1054 -0
  473. package/lib/module/features/engage/EngagePromptView.js +1243 -0
  474. package/lib/module/features/engage/EngageTransport.js +602 -0
  475. package/lib/module/features/engage/EngageVariantContent.js +1771 -0
  476. package/lib/module/features/engage/__test-support__/reactNativeStub.js +52 -0
  477. package/lib/module/features/engage/attachmentCapture.js +42 -0
  478. package/lib/module/features/engage/captureVoiceAttachment.js +80 -0
  479. package/lib/module/features/engage/engageCoachmarkTour.js +94 -0
  480. package/lib/module/features/engage/engageGameLogic.js +287 -0
  481. package/lib/module/features/engage/engageMediaSizing.js +51 -0
  482. package/lib/module/features/engage/engageMultiStepSheet.js +35 -0
  483. package/lib/module/features/engage/engageOutcome.js +108 -0
  484. package/lib/module/features/engage/engagePushTokenBridge.js +65 -0
  485. package/lib/module/features/engage/engageShakeBridge.js +56 -0
  486. package/lib/module/features/engage/engageSignals.js +34 -0
  487. package/lib/module/features/engage/engageStoreReviewBridge.js +43 -0
  488. package/lib/module/features/engage/engageTestSeenStore.js +92 -0
  489. package/lib/module/features/engage/engageThrottle.js +390 -0
  490. package/lib/module/features/engage/engageTriggerEngine.js +360 -0
  491. package/lib/module/features/engage/engageTypes.js +110 -0
  492. package/lib/module/features/engage/engageVariantResolver.js +135 -0
  493. package/lib/module/features/engage/engageWindowInsets.js +89 -0
  494. package/lib/module/features/engage/gestureTriggerDetector.js +80 -0
  495. package/lib/module/features/engage/transcription/TranscriptionProvider.js +46 -0
  496. package/lib/module/features/install-referrer/installReferrer.js +104 -0
  497. package/lib/module/features/journey/ScaleBunDebugRoot.js +1030 -0
  498. package/lib/module/features/journey/ScaleBunFlatList.js +32 -0
  499. package/lib/module/features/journey/ScaleBunImpression.js +105 -0
  500. package/lib/module/features/journey/ScaleBunScrollView.js +95 -0
  501. package/lib/module/features/journey/ScaleBunSectionList.js +32 -0
  502. package/lib/module/features/journey/autoInstrumentScroll.js +155 -0
  503. package/lib/module/features/journey/calibrationContext.js +35 -0
  504. package/lib/module/features/journey/gestureBuffer.js +56 -0
  505. package/lib/module/features/journey/gestureDetector.js +169 -0
  506. package/lib/module/features/journey/impression.js +84 -0
  507. package/lib/module/features/journey/interactionProtocol.js +158 -0
  508. package/lib/module/features/journey/journeyManager.js +459 -0
  509. package/lib/module/features/journey/journeyTypes.js +49 -0
  510. package/lib/module/features/journey/nativeScroll.js +77 -0
  511. package/lib/module/features/journey/navDetector.js +154 -0
  512. package/lib/module/features/journey/screenshotHelper.js +129 -0
  513. package/lib/module/features/journey/scrollContext.js +142 -0
  514. package/lib/module/features/journey/targetGeometry.js +175 -0
  515. package/lib/module/features/journey/targetRegistry.js +44 -0
  516. package/lib/module/features/journey/touchTarget.js +241 -0
  517. package/lib/module/features/journey/uiState.js +176 -0
  518. package/lib/module/features/navigation/AutoScreenDetector.js +601 -0
  519. package/lib/module/features/network/NetworkFeature.js +209 -0
  520. package/lib/module/features/network/index.js +17 -0
  521. package/lib/module/features/network/thirdParty.js +142 -0
  522. package/lib/module/features/ota/OtaEventEmitter.js +123 -0
  523. package/lib/module/features/ota/OtaOrchestrator.js +1302 -0
  524. package/lib/module/features/ota/OtaTypes.js +2 -0
  525. package/lib/module/features/ota/deviceAttributes.js +43 -0
  526. package/lib/module/features/ota/environment.js +165 -0
  527. package/lib/module/features/ota/geoCountry.js +86 -0
  528. package/lib/module/features/ota/retry.js +87 -0
  529. package/lib/module/features/ota/signedDownload.js +174 -0
  530. package/lib/module/features/ota/useOtaUpdate.js +100 -0
  531. package/lib/module/features/performance/PerformanceFeature.js +643 -0
  532. package/lib/module/features/performance/collectors/AppLaunchCollector.js +115 -0
  533. package/lib/module/features/performance/collectors/AutoScreenLoadCollector.js +225 -0
  534. package/lib/module/features/performance/collectors/CustomTraceCollector.js +92 -0
  535. package/lib/module/features/performance/collectors/FrameMetricsCollector.js +177 -0
  536. package/lib/module/features/performance/collectors/JsStallCollector.js +158 -0
  537. package/lib/module/features/performance/collectors/NetworkPerfCollector.js +52 -0
  538. package/lib/module/features/performance/collectors/ScreenLoadCollector.js +71 -0
  539. package/lib/module/features/performance/collectors/UiHangCollector.js +71 -0
  540. package/lib/module/features/performance/config.js +51 -0
  541. package/lib/module/features/performance/getNativePerformanceModule.js +39 -0
  542. package/lib/module/features/performance/index.js +9 -0
  543. package/lib/module/features/performance/metrics/MetricsEngine.js +139 -0
  544. package/lib/module/features/performance/models.js +42 -0
  545. package/lib/module/features/performance/transport/PerformanceTransport.js +162 -0
  546. package/lib/module/features/profiler/ProfilerFeature.js +594 -0
  547. package/lib/module/features/profiler/config.js +143 -0
  548. package/lib/module/features/profiler/contracts.js +56 -0
  549. package/lib/module/features/profiler/index.js +11 -0
  550. package/lib/module/features/profiler/models.js +106 -0
  551. package/lib/module/features/profiler/transport/ProfilerTransport.js +87 -0
  552. package/lib/module/features/replay/bridge/adapters/bridgeAdapter.js +198 -0
  553. package/lib/module/features/replay/bridge/eventEmitter.js +122 -0
  554. package/lib/module/features/replay/bridge/nativeModule.js +89 -0
  555. package/lib/module/features/replay/bridge/nativeQuota.js +109 -0
  556. package/lib/module/features/replay/core/clock/clock.js +37 -0
  557. package/lib/module/features/replay/core/config/defaults.js +82 -0
  558. package/lib/module/features/replay/core/config/validator.js +103 -0
  559. package/lib/module/features/replay/core/env/environmentDetector.js +22 -0
  560. package/lib/module/features/replay/core/errors/safeCall.js +35 -0
  561. package/lib/module/features/replay/core/ids/sessionId.js +44 -0
  562. package/lib/module/features/replay/core/logger/logger.js +29 -0
  563. package/lib/module/features/replay/core/privacy/privacyTypes.js +27 -0
  564. package/lib/module/features/replay/core/queue/boundedQueue.js +64 -0
  565. package/lib/module/features/replay/integrations/alert/alertInstrumentation.js +252 -0
  566. package/lib/module/features/replay/integrations/logs/consoleIntegration.js +131 -0
  567. package/lib/module/features/replay/integrations/network/networkAdapter.js +70 -0
  568. package/lib/module/features/replay/integrations/react-navigation/navigationIntegration.js +82 -0
  569. package/lib/module/features/replay/integrations/touch/ReplayRoot.js +96 -0
  570. package/lib/module/features/replay/pipeline/batching/batchManager.js +113 -0
  571. package/lib/module/features/replay/pipeline/envelope/envelopeBuilder.js +43 -0
  572. package/lib/module/features/replay/pipeline/retry/retryPolicy.js +45 -0
  573. package/lib/module/features/replay/pipeline/transport/transportTypes.js +60 -0
  574. package/lib/module/features/replay/public/api.js +332 -0
  575. package/lib/module/features/replay/public/enums.js +85 -0
  576. package/lib/module/features/replay/public/types.js +2 -0
  577. package/lib/module/features/replay/replay/breadcrumbs/breadcrumbCollector.js +113 -0
  578. package/lib/module/features/replay/replay/frames/frameModels.js +33 -0
  579. package/lib/module/features/replay/replay/session/sessionOrchestrator.js +272 -0
  580. package/lib/module/features/replay/replay/timeline/timelineModels.js +108 -0
  581. package/lib/module/features/replay/transport/BackendReplayTransport.js +169 -0
  582. package/lib/module/features/replay/transport/CompositeReplayTransport.js +68 -0
  583. package/lib/module/features/replay/transport/DesktopReplayTransport.js +119 -0
  584. package/lib/module/features/replay/transport/ReplayTransport.js +2 -0
  585. package/lib/module/features/session/BackendSessionAdapter.js +1908 -0
  586. package/lib/module/features/session/DesktopSessionTransport.js +118 -0
  587. package/lib/module/features/session/JourneyEventPipeline.js +239 -0
  588. package/lib/module/features/session/ReplayCaptureManager.js +1248 -0
  589. package/lib/module/features/session/ScrollTracker.js +141 -0
  590. package/lib/module/features/session/SessionManager.js +1443 -0
  591. package/lib/module/features/session/SyncDecisionEngine.js +88 -0
  592. package/lib/module/features/session/frameLink.js +29 -0
  593. package/lib/module/features/session/frameScrollState.js +34 -0
  594. package/lib/module/features/session/index.js +35 -0
  595. package/lib/module/features/session/nativeCapture.js +45 -0
  596. package/lib/module/features/session/outboxFrameCapture.js +77 -0
  597. package/lib/module/features/session/sessionTypes.js +226 -0
  598. package/lib/module/features/session/viewportPlausibility.js +137 -0
  599. package/lib/module/features/skan/skanBridge.js +48 -0
  600. package/lib/module/features/skan/skanConversionManager.js +128 -0
  601. package/lib/module/index.js +80 -0
  602. package/lib/module/integrations/fetch/fetchInterceptor.js +169 -0
  603. package/lib/module/integrations/navigation/screenTracker.js +2 -0
  604. package/lib/module/integrations/network/bodyCapture.js +320 -0
  605. package/lib/module/integrations/xhr/xhrInterceptor.js +219 -0
  606. package/lib/module/metro/composeSourceMap.js +97 -0
  607. package/lib/module/metro/featureModules.js +123 -0
  608. package/lib/module/metro/index.js +218 -0
  609. package/lib/module/metro/optionalDependencyStub.js +14 -0
  610. package/lib/module/metro/optionalModules.js +25 -0
  611. package/lib/module/metro/serializerCompose.js +152 -0
  612. package/lib/module/pipeline/dispatcher/dispatcher.js +21 -0
  613. package/lib/module/pipeline/envelope/envelope.js +11 -0
  614. package/lib/module/pipeline/envelope/serializer.js +8 -0
  615. package/lib/module/pipeline/processors/dedupe.js +2 -0
  616. package/lib/module/pipeline/processors/enrich.js +10 -0
  617. package/lib/module/pipeline/processors/sampling.js +2 -0
  618. package/lib/module/pipeline/processors/sanitize.js +22 -0
  619. package/lib/module/pipeline/queue/flushQueue.js +102 -0
  620. package/lib/module/pipeline/queue/memoryQueue.js +24 -0
  621. package/lib/module/pipeline/queue/persistentQueue.js +336 -0
  622. package/lib/module/pipeline/queue/queuePolicy.js +2 -0
  623. package/lib/module/pipeline/scheduler/flushScheduler.js +38 -0
  624. package/lib/module/pipeline/scheduler/retryPolicy.js +9 -0
  625. package/lib/module/public/ScaleBunErrorBoundary.js +82 -0
  626. package/lib/module/public/ScaleBunFacade.js +2038 -0
  627. package/lib/module/public/ScaleBunProvider.js +54 -0
  628. package/lib/module/public/typedTracker.js +72 -0
  629. package/lib/module/public/types.js +2 -0
  630. package/lib/module/push/PushManager.js +263 -0
  631. package/lib/module/push/adapters/ManualAdapter.js +79 -0
  632. package/lib/module/push/adapters/NativeBridgeAdapter.js +124 -0
  633. package/lib/module/push/adapters/NoopAdapter.js +38 -0
  634. package/lib/module/push/adapters/RNFirebaseMessagingAdapter.js +241 -0
  635. package/lib/module/push/adapters/loadMessaging.js +23 -0
  636. package/lib/module/push/adapters/loadNotifee.js +30 -0
  637. package/lib/module/push/adapters/selectAdapter.js +147 -0
  638. package/lib/module/push/detect/capabilities.js +130 -0
  639. package/lib/module/push/index.js +9 -0
  640. package/lib/module/push/native/nativeNotifications.js +155 -0
  641. package/lib/module/push/types.js +2 -0
  642. package/lib/module/specs/NativeReplaySdk.js +24 -0
  643. package/lib/module/specs/NativeScaleBunCrash.js +26 -0
  644. package/lib/module/specs/NativeScaleBunInstallReferrer.js +20 -0
  645. package/lib/module/specs/NativeScaleBunOta.js +28 -0
  646. package/lib/module/specs/NativeScaleBunPerformance.js +21 -0
  647. package/lib/module/specs/NativeScaleBunProfiler.js +22 -0
  648. package/lib/module/specs/NativeScaleBunStorage.js +36 -0
  649. package/lib/module/storage/StorageBackend.js +231 -0
  650. package/lib/module/storage/db/sqlite.js +2 -0
  651. package/lib/module/storage/files/fileStore.js +2 -0
  652. package/lib/module/transport/auth/sdkSession.js +21 -0
  653. package/lib/module/transport/backoff/exponentialJitter.js +10 -0
  654. package/lib/module/transport/http/endpoints.js +40 -0
  655. package/lib/module/transport/http/httpClient.js +64 -0
  656. package/lib/module/transport/rateLimit/retryAfter.js +2 -0
  657. package/lib/module/transport/signing/requestSigner.js +2 -0
  658. package/lib/module/vendor/protocol/index.js +312 -0
  659. package/lib/module/vendor/protocol/internal/validation.js +423 -0
  660. package/lib/module/vendor/sdk-contracts/bridge.js +2 -0
  661. package/lib/module/vendor/sdk-contracts/config.js +2 -0
  662. package/lib/module/vendor/sdk-contracts/events.js +2 -0
  663. package/lib/module/vendor/sdk-contracts/features.js +2 -0
  664. package/lib/module/vendor/sdk-contracts/index.js +2 -0
  665. package/lib/module/vendor/sdk-contracts/platform.js +2 -0
  666. package/lib/module/vendor/sdk-contracts/session-boundary.js +2 -0
  667. package/lib/module/vendor/sdk-contracts/session.js +2 -0
  668. package/lib/module/vendor/vendor.manifest +10 -0
  669. package/lib/typescript/analytics/EventTracker.d.ts +197 -0
  670. package/lib/typescript/analytics/automaticEvents.d.ts +30 -0
  671. package/lib/typescript/analytics/batching.d.ts +33 -0
  672. package/lib/typescript/analytics/eventLane.d.ts +22 -0
  673. package/lib/typescript/analytics/revenue.d.ts +94 -0
  674. package/lib/typescript/analytics/subscription.d.ts +35 -0
  675. package/lib/typescript/bootstrap/FeatureRegistry.d.ts +36 -0
  676. package/lib/typescript/bootstrap/SDKBootstrapper.d.ts +82 -0
  677. package/lib/typescript/bucketing/fnv1a32.d.ts +20 -0
  678. package/lib/typescript/compat/codepush.d.ts +76 -0
  679. package/lib/typescript/config/ConfigManager.d.ts +82 -0
  680. package/lib/typescript/config/configTypes.d.ts +73 -0
  681. package/lib/typescript/config/otaPolicyState.d.ts +55 -0
  682. package/lib/typescript/config/quotaState.d.ts +155 -0
  683. package/lib/typescript/core/architecture.d.ts +29 -0
  684. package/lib/typescript/core/clock/now.d.ts +5 -0
  685. package/lib/typescript/core/config/defaults.d.ts +1 -0
  686. package/lib/typescript/core/config/schema.d.ts +107 -0
  687. package/lib/typescript/core/constants/endpoints.d.ts +13 -0
  688. package/lib/typescript/core/constants/protocol.d.ts +23 -0
  689. package/lib/typescript/core/constants/timings.d.ts +22 -0
  690. package/lib/typescript/core/constants/version.d.ts +12 -0
  691. package/lib/typescript/core/context/app.d.ts +1 -0
  692. package/lib/typescript/core/context/device.d.ts +61 -0
  693. package/lib/typescript/core/context/session.d.ts +1 -0
  694. package/lib/typescript/core/context/user.d.ts +24 -0
  695. package/lib/typescript/core/contracts/IFeature.d.ts +44 -0
  696. package/lib/typescript/core/di/container.d.ts +9 -0
  697. package/lib/typescript/core/encoding/base64.d.ts +13 -0
  698. package/lib/typescript/core/id/deviceId.d.ts +9 -0
  699. package/lib/typescript/core/id/installationId.d.ts +20 -0
  700. package/lib/typescript/core/id/sessionId.d.ts +1 -0
  701. package/lib/typescript/core/lifecycle/appLifecycle.d.ts +14 -0
  702. package/lib/typescript/core/lifecycle/crashSafe.d.ts +7 -0
  703. package/lib/typescript/core/logger/errorClassification.d.ts +46 -0
  704. package/lib/typescript/core/logger/internalLogger.d.ts +24 -0
  705. package/lib/typescript/core/logger/levels.d.ts +1 -0
  706. package/lib/typescript/crypto/hmacSha256.d.ts +10 -0
  707. package/lib/typescript/debug/bootstrap.d.ts +148 -0
  708. package/lib/typescript/debug/commands.d.ts +77 -0
  709. package/lib/typescript/debug/configBuilder.d.ts +13 -0
  710. package/lib/typescript/debug/exportBridge.d.ts +27 -0
  711. package/lib/typescript/debug/hostResolver.d.ts +14 -0
  712. package/lib/typescript/debug/index.d.ts +12 -0
  713. package/lib/typescript/debug/metrics.d.ts +2 -0
  714. package/lib/typescript/debug/perf.d.ts +43 -0
  715. package/lib/typescript/debug/perfWiring.d.ts +33 -0
  716. package/lib/typescript/debug/protocol.d.ts +15 -0
  717. package/lib/typescript/debug/redaction.d.ts +69 -0
  718. package/lib/typescript/debug/replayWiring.d.ts +25 -0
  719. package/lib/typescript/debug/screenTracking.d.ts +16 -0
  720. package/lib/typescript/debug/sessionWiring.d.ts +16 -0
  721. package/lib/typescript/debug/stream.d.ts +77 -0
  722. package/lib/typescript/debug/transport.d.ts +110 -0
  723. package/lib/typescript/features/bugreport/BugReportFeature.d.ts +59 -0
  724. package/lib/typescript/features/bugreport/buildPayload.d.ts +51 -0
  725. package/lib/typescript/features/bugreport/index.d.ts +1 -0
  726. package/lib/typescript/features/crash/CrashFeature.d.ts +21 -0
  727. package/lib/typescript/features/crash/CrashReporter.d.ts +107 -0
  728. package/lib/typescript/features/crash/NativeCrashFeature.d.ts +17 -0
  729. package/lib/typescript/features/crash/capture.d.ts +22 -0
  730. package/lib/typescript/features/crash/globalHandler.d.ts +14 -0
  731. package/lib/typescript/features/crash/index.d.ts +2 -0
  732. package/lib/typescript/features/crash/nativeCrashBridge.d.ts +43 -0
  733. package/lib/typescript/features/crash/rejectionHandler.d.ts +65 -0
  734. package/lib/typescript/features/crash/scrubCrash.d.ts +35 -0
  735. package/lib/typescript/features/engage/EngageAnchor.d.ts +36 -0
  736. package/lib/typescript/features/engage/EngageArchetypeRenderers.d.ts +66 -0
  737. package/lib/typescript/features/engage/EngageInAppView.d.ts +164 -0
  738. package/lib/typescript/features/engage/EngageInlinePlacement.d.ts +42 -0
  739. package/lib/typescript/features/engage/EngagePromptProvider.d.ts +233 -0
  740. package/lib/typescript/features/engage/EngagePromptView.d.ts +97 -0
  741. package/lib/typescript/features/engage/EngageTransport.d.ts +158 -0
  742. package/lib/typescript/features/engage/EngageVariantContent.d.ts +12 -0
  743. package/lib/typescript/features/engage/attachmentCapture.d.ts +17 -0
  744. package/lib/typescript/features/engage/captureVoiceAttachment.d.ts +31 -0
  745. package/lib/typescript/features/engage/engageCoachmarkTour.d.ts +18 -0
  746. package/lib/typescript/features/engage/engageGameLogic.d.ts +34 -0
  747. package/lib/typescript/features/engage/engageMediaSizing.d.ts +23 -0
  748. package/lib/typescript/features/engage/engageMultiStepSheet.d.ts +25 -0
  749. package/lib/typescript/features/engage/engageOutcome.d.ts +38 -0
  750. package/lib/typescript/features/engage/engagePushTokenBridge.d.ts +30 -0
  751. package/lib/typescript/features/engage/engageShakeBridge.d.ts +20 -0
  752. package/lib/typescript/features/engage/engageSignals.d.ts +13 -0
  753. package/lib/typescript/features/engage/engageStoreReviewBridge.d.ts +23 -0
  754. package/lib/typescript/features/engage/engageTestSeenStore.d.ts +46 -0
  755. package/lib/typescript/features/engage/engageThrottle.d.ts +180 -0
  756. package/lib/typescript/features/engage/engageTriggerEngine.d.ts +16 -0
  757. package/lib/typescript/features/engage/engageTypes.d.ts +576 -0
  758. package/lib/typescript/features/engage/engageVariantResolver.d.ts +46 -0
  759. package/lib/typescript/features/engage/engageWindowInsets.d.ts +25 -0
  760. package/lib/typescript/features/engage/gestureTriggerDetector.d.ts +20 -0
  761. package/lib/typescript/features/engage/transcription/TranscriptionProvider.d.ts +51 -0
  762. package/lib/typescript/features/install-referrer/installReferrer.d.ts +39 -0
  763. package/lib/typescript/features/journey/ScaleBunDebugRoot.d.ts +49 -0
  764. package/lib/typescript/features/journey/ScaleBunFlatList.d.ts +20 -0
  765. package/lib/typescript/features/journey/ScaleBunImpression.d.ts +30 -0
  766. package/lib/typescript/features/journey/ScaleBunScrollView.d.ts +25 -0
  767. package/lib/typescript/features/journey/ScaleBunSectionList.d.ts +20 -0
  768. package/lib/typescript/features/journey/autoInstrumentScroll.d.ts +46 -0
  769. package/lib/typescript/features/journey/calibrationContext.d.ts +26 -0
  770. package/lib/typescript/features/journey/gestureBuffer.d.ts +27 -0
  771. package/lib/typescript/features/journey/gestureDetector.d.ts +40 -0
  772. package/lib/typescript/features/journey/impression.d.ts +48 -0
  773. package/lib/typescript/features/journey/interactionProtocol.d.ts +159 -0
  774. package/lib/typescript/features/journey/journeyManager.d.ts +62 -0
  775. package/lib/typescript/features/journey/journeyTypes.d.ts +161 -0
  776. package/lib/typescript/features/journey/nativeScroll.d.ts +47 -0
  777. package/lib/typescript/features/journey/navDetector.d.ts +42 -0
  778. package/lib/typescript/features/journey/screenshotHelper.d.ts +33 -0
  779. package/lib/typescript/features/journey/scrollContext.d.ts +49 -0
  780. package/lib/typescript/features/journey/targetGeometry.d.ts +126 -0
  781. package/lib/typescript/features/journey/targetRegistry.d.ts +28 -0
  782. package/lib/typescript/features/journey/touchTarget.d.ts +174 -0
  783. package/lib/typescript/features/journey/uiState.d.ts +93 -0
  784. package/lib/typescript/features/navigation/AutoScreenDetector.d.ts +196 -0
  785. package/lib/typescript/features/network/NetworkFeature.d.ts +43 -0
  786. package/lib/typescript/features/network/index.d.ts +46 -0
  787. package/lib/typescript/features/network/thirdParty.d.ts +95 -0
  788. package/lib/typescript/features/ota/OtaEventEmitter.d.ts +93 -0
  789. package/lib/typescript/features/ota/OtaOrchestrator.d.ts +287 -0
  790. package/lib/typescript/features/ota/OtaTypes.d.ts +193 -0
  791. package/lib/typescript/features/ota/deviceAttributes.d.ts +18 -0
  792. package/lib/typescript/features/ota/environment.d.ts +99 -0
  793. package/lib/typescript/features/ota/geoCountry.d.ts +14 -0
  794. package/lib/typescript/features/ota/retry.d.ts +53 -0
  795. package/lib/typescript/features/ota/signedDownload.d.ts +81 -0
  796. package/lib/typescript/features/ota/useOtaUpdate.d.ts +72 -0
  797. package/lib/typescript/features/performance/PerformanceFeature.d.ts +132 -0
  798. package/lib/typescript/features/performance/collectors/AppLaunchCollector.d.ts +27 -0
  799. package/lib/typescript/features/performance/collectors/AutoScreenLoadCollector.d.ts +70 -0
  800. package/lib/typescript/features/performance/collectors/CustomTraceCollector.d.ts +35 -0
  801. package/lib/typescript/features/performance/collectors/FrameMetricsCollector.d.ts +74 -0
  802. package/lib/typescript/features/performance/collectors/JsStallCollector.d.ts +45 -0
  803. package/lib/typescript/features/performance/collectors/NetworkPerfCollector.d.ts +23 -0
  804. package/lib/typescript/features/performance/collectors/ScreenLoadCollector.d.ts +30 -0
  805. package/lib/typescript/features/performance/collectors/UiHangCollector.d.ts +21 -0
  806. package/lib/typescript/features/performance/config.d.ts +73 -0
  807. package/lib/typescript/features/performance/getNativePerformanceModule.d.ts +2 -0
  808. package/lib/typescript/features/performance/index.d.ts +10 -0
  809. package/lib/typescript/features/performance/metrics/MetricsEngine.d.ts +69 -0
  810. package/lib/typescript/features/performance/models.d.ts +169 -0
  811. package/lib/typescript/features/performance/transport/PerformanceTransport.d.ts +40 -0
  812. package/lib/typescript/features/profiler/ProfilerFeature.d.ts +92 -0
  813. package/lib/typescript/features/profiler/config.d.ts +85 -0
  814. package/lib/typescript/features/profiler/contracts.d.ts +142 -0
  815. package/lib/typescript/features/profiler/index.d.ts +13 -0
  816. package/lib/typescript/features/profiler/models.d.ts +332 -0
  817. package/lib/typescript/features/profiler/transport/ProfilerTransport.d.ts +30 -0
  818. package/lib/typescript/features/replay/bridge/adapters/bridgeAdapter.d.ts +52 -0
  819. package/lib/typescript/features/replay/bridge/eventEmitter.d.ts +100 -0
  820. package/lib/typescript/features/replay/bridge/nativeModule.d.ts +166 -0
  821. package/lib/typescript/features/replay/bridge/nativeQuota.d.ts +26 -0
  822. package/lib/typescript/features/replay/core/clock/clock.d.ts +16 -0
  823. package/lib/typescript/features/replay/core/config/defaults.d.ts +28 -0
  824. package/lib/typescript/features/replay/core/config/validator.d.ts +13 -0
  825. package/lib/typescript/features/replay/core/env/environmentDetector.d.ts +14 -0
  826. package/lib/typescript/features/replay/core/errors/safeCall.d.ts +12 -0
  827. package/lib/typescript/features/replay/core/ids/sessionId.d.ts +15 -0
  828. package/lib/typescript/features/replay/core/logger/logger.d.ts +15 -0
  829. package/lib/typescript/features/replay/core/privacy/privacyTypes.d.ts +24 -0
  830. package/lib/typescript/features/replay/core/queue/boundedQueue.d.ts +29 -0
  831. package/lib/typescript/features/replay/integrations/alert/alertInstrumentation.d.ts +48 -0
  832. package/lib/typescript/features/replay/integrations/logs/consoleIntegration.d.ts +18 -0
  833. package/lib/typescript/features/replay/integrations/network/networkAdapter.d.ts +31 -0
  834. package/lib/typescript/features/replay/integrations/react-navigation/navigationIntegration.d.ts +25 -0
  835. package/lib/typescript/features/replay/integrations/touch/ReplayRoot.d.ts +26 -0
  836. package/lib/typescript/features/replay/pipeline/batching/batchManager.d.ts +47 -0
  837. package/lib/typescript/features/replay/pipeline/envelope/envelopeBuilder.d.ts +12 -0
  838. package/lib/typescript/features/replay/pipeline/retry/retryPolicy.d.ts +17 -0
  839. package/lib/typescript/features/replay/pipeline/transport/transportTypes.d.ts +40 -0
  840. package/lib/typescript/features/replay/public/api.d.ts +83 -0
  841. package/lib/typescript/features/replay/public/enums.d.ts +73 -0
  842. package/lib/typescript/features/replay/public/types.d.ts +249 -0
  843. package/lib/typescript/features/replay/replay/breadcrumbs/breadcrumbCollector.d.ts +26 -0
  844. package/lib/typescript/features/replay/replay/frames/frameModels.d.ts +23 -0
  845. package/lib/typescript/features/replay/replay/session/sessionOrchestrator.d.ts +53 -0
  846. package/lib/typescript/features/replay/replay/timeline/timelineModels.d.ts +29 -0
  847. package/lib/typescript/features/replay/transport/BackendReplayTransport.d.ts +45 -0
  848. package/lib/typescript/features/replay/transport/CompositeReplayTransport.d.ts +22 -0
  849. package/lib/typescript/features/replay/transport/DesktopReplayTransport.d.ts +35 -0
  850. package/lib/typescript/features/replay/transport/ReplayTransport.d.ts +72 -0
  851. package/lib/typescript/features/session/BackendSessionAdapter.d.ts +528 -0
  852. package/lib/typescript/features/session/DesktopSessionTransport.d.ts +28 -0
  853. package/lib/typescript/features/session/JourneyEventPipeline.d.ts +74 -0
  854. package/lib/typescript/features/session/ReplayCaptureManager.d.ts +391 -0
  855. package/lib/typescript/features/session/ScrollTracker.d.ts +48 -0
  856. package/lib/typescript/features/session/SessionManager.d.ts +414 -0
  857. package/lib/typescript/features/session/SyncDecisionEngine.d.ts +33 -0
  858. package/lib/typescript/features/session/frameLink.d.ts +27 -0
  859. package/lib/typescript/features/session/frameScrollState.d.ts +27 -0
  860. package/lib/typescript/features/session/index.d.ts +23 -0
  861. package/lib/typescript/features/session/nativeCapture.d.ts +18 -0
  862. package/lib/typescript/features/session/outboxFrameCapture.d.ts +20 -0
  863. package/lib/typescript/features/session/sessionTypes.d.ts +362 -0
  864. package/lib/typescript/features/session/viewportPlausibility.d.ts +72 -0
  865. package/lib/typescript/features/skan/skanBridge.d.ts +18 -0
  866. package/lib/typescript/features/skan/skanConversionManager.d.ts +69 -0
  867. package/lib/typescript/index.d.ts +59 -0
  868. package/lib/typescript/integrations/fetch/fetchInterceptor.d.ts +41 -0
  869. package/lib/typescript/integrations/navigation/screenTracker.d.ts +1 -0
  870. package/lib/typescript/integrations/network/bodyCapture.d.ts +101 -0
  871. package/lib/typescript/integrations/xhr/xhrInterceptor.d.ts +46 -0
  872. package/lib/typescript/metro/composeSourceMap.d.ts +26 -0
  873. package/lib/typescript/metro/featureModules.d.ts +49 -0
  874. package/lib/typescript/metro/index.d.ts +99 -0
  875. package/lib/typescript/metro/optionalDependencyStub.d.ts +14 -0
  876. package/lib/typescript/metro/optionalModules.d.ts +20 -0
  877. package/lib/typescript/metro/serializerCompose.d.ts +46 -0
  878. package/lib/typescript/pipeline/dispatcher/dispatcher.d.ts +7 -0
  879. package/lib/typescript/pipeline/envelope/envelope.d.ts +16 -0
  880. package/lib/typescript/pipeline/envelope/serializer.d.ts +7 -0
  881. package/lib/typescript/pipeline/processors/dedupe.d.ts +1 -0
  882. package/lib/typescript/pipeline/processors/enrich.d.ts +3 -0
  883. package/lib/typescript/pipeline/processors/sampling.d.ts +1 -0
  884. package/lib/typescript/pipeline/processors/sanitize.d.ts +3 -0
  885. package/lib/typescript/pipeline/queue/flushQueue.d.ts +12 -0
  886. package/lib/typescript/pipeline/queue/memoryQueue.d.ts +12 -0
  887. package/lib/typescript/pipeline/queue/persistentQueue.d.ts +120 -0
  888. package/lib/typescript/pipeline/queue/queuePolicy.d.ts +1 -0
  889. package/lib/typescript/pipeline/scheduler/flushScheduler.d.ts +9 -0
  890. package/lib/typescript/pipeline/scheduler/retryPolicy.d.ts +5 -0
  891. package/lib/typescript/public/ScaleBunErrorBoundary.d.ts +44 -0
  892. package/lib/typescript/public/ScaleBunFacade.d.ts +800 -0
  893. package/lib/typescript/public/ScaleBunProvider.d.ts +23 -0
  894. package/lib/typescript/public/typedTracker.d.ts +88 -0
  895. package/lib/typescript/public/types.d.ts +316 -0
  896. package/lib/typescript/push/PushManager.d.ts +69 -0
  897. package/lib/typescript/push/adapters/ManualAdapter.d.ts +40 -0
  898. package/lib/typescript/push/adapters/NativeBridgeAdapter.d.ts +37 -0
  899. package/lib/typescript/push/adapters/NoopAdapter.d.ts +21 -0
  900. package/lib/typescript/push/adapters/RNFirebaseMessagingAdapter.d.ts +39 -0
  901. package/lib/typescript/push/adapters/loadMessaging.d.ts +17 -0
  902. package/lib/typescript/push/adapters/loadNotifee.d.ts +15 -0
  903. package/lib/typescript/push/adapters/selectAdapter.d.ts +20 -0
  904. package/lib/typescript/push/detect/capabilities.d.ts +15 -0
  905. package/lib/typescript/push/index.d.ts +10 -0
  906. package/lib/typescript/push/native/nativeNotifications.d.ts +65 -0
  907. package/lib/typescript/push/types.d.ts +143 -0
  908. package/lib/typescript/specs/NativeReplaySdk.d.ts +69 -0
  909. package/lib/typescript/specs/NativeScaleBunCrash.d.ts +58 -0
  910. package/lib/typescript/specs/NativeScaleBunInstallReferrer.d.ts +28 -0
  911. package/lib/typescript/specs/NativeScaleBunOta.d.ts +141 -0
  912. package/lib/typescript/specs/NativeScaleBunPerformance.d.ts +31 -0
  913. package/lib/typescript/specs/NativeScaleBunProfiler.d.ts +38 -0
  914. package/lib/typescript/specs/NativeScaleBunStorage.d.ts +55 -0
  915. package/lib/typescript/storage/StorageBackend.d.ts +131 -0
  916. package/lib/typescript/storage/db/sqlite.d.ts +1 -0
  917. package/lib/typescript/storage/files/fileStore.d.ts +1 -0
  918. package/lib/typescript/transport/auth/sdkSession.d.ts +10 -0
  919. package/lib/typescript/transport/backoff/exponentialJitter.d.ts +5 -0
  920. package/lib/typescript/transport/http/endpoints.d.ts +26 -0
  921. package/lib/typescript/transport/http/httpClient.d.ts +23 -0
  922. package/lib/typescript/transport/rateLimit/retryAfter.d.ts +1 -0
  923. package/lib/typescript/transport/signing/requestSigner.d.ts +1 -0
  924. package/lib/typescript/vendor/protocol/index.d.ts +345 -0
  925. package/lib/typescript/vendor/protocol/internal/validation.d.ts +114 -0
  926. package/lib/typescript/vendor/sdk-contracts/bridge.d.ts +104 -0
  927. package/lib/typescript/vendor/sdk-contracts/config.d.ts +156 -0
  928. package/lib/typescript/vendor/sdk-contracts/events.d.ts +42 -0
  929. package/lib/typescript/vendor/sdk-contracts/features.d.ts +38 -0
  930. package/lib/typescript/vendor/sdk-contracts/index.d.ts +15 -0
  931. package/lib/typescript/vendor/sdk-contracts/platform.d.ts +35 -0
  932. package/lib/typescript/vendor/sdk-contracts/session-boundary.d.ts +42 -0
  933. package/lib/typescript/vendor/sdk-contracts/session.d.ts +157 -0
  934. package/package.json +153 -0
  935. package/react-native.config.js +24 -0
  936. package/scalebun-react-native.podspec +44 -0
  937. package/src/analytics/EventTracker.ts +654 -0
  938. package/src/analytics/automaticEvents.ts +109 -0
  939. package/src/analytics/batching.ts +54 -0
  940. package/src/analytics/eventLane.ts +48 -0
  941. package/src/analytics/revenue.ts +143 -0
  942. package/src/analytics/subscription.ts +145 -0
  943. package/src/bootstrap/FeatureRegistry.ts +81 -0
  944. package/src/bootstrap/SDKBootstrapper.ts +769 -0
  945. package/src/bucketing/fnv1a32.ts +40 -0
  946. package/src/compat/codepush.ts +189 -0
  947. package/src/config/ConfigManager.ts +233 -0
  948. package/src/config/configTypes.ts +62 -0
  949. package/src/config/otaPolicyState.ts +79 -0
  950. package/src/config/quotaState.ts +484 -0
  951. package/src/core/architecture.ts +39 -0
  952. package/src/core/clock/now.ts +6 -0
  953. package/src/core/config/defaults.ts +0 -0
  954. package/src/core/config/schema.ts +455 -0
  955. package/src/core/constants/endpoints.ts +12 -0
  956. package/src/core/constants/protocol.ts +24 -0
  957. package/src/core/constants/timings.ts +25 -0
  958. package/src/core/constants/version.ts +11 -0
  959. package/src/core/context/app.ts +0 -0
  960. package/src/core/context/device.ts +169 -0
  961. package/src/core/context/session.ts +0 -0
  962. package/src/core/context/user.ts +26 -0
  963. package/src/core/contracts/IFeature.ts +53 -0
  964. package/src/core/di/container.ts +26 -0
  965. package/src/core/encoding/base64.ts +46 -0
  966. package/src/core/id/deviceId.ts +51 -0
  967. package/src/core/id/installationId.ts +52 -0
  968. package/src/core/id/sessionId.ts +0 -0
  969. package/src/core/lifecycle/appLifecycle.ts +33 -0
  970. package/src/core/lifecycle/crashSafe.ts +29 -0
  971. package/src/core/logger/errorClassification.ts +108 -0
  972. package/src/core/logger/internalLogger.ts +65 -0
  973. package/src/core/logger/levels.ts +0 -0
  974. package/src/crypto/hmacSha256.ts +106 -0
  975. package/src/debug/bootstrap.ts +436 -0
  976. package/src/debug/commands.ts +597 -0
  977. package/src/debug/configBuilder.ts +56 -0
  978. package/src/debug/exportBridge.ts +155 -0
  979. package/src/debug/hostResolver.ts +34 -0
  980. package/src/debug/index.ts +25 -0
  981. package/src/debug/metrics.ts +29 -0
  982. package/src/debug/perf.ts +212 -0
  983. package/src/debug/perfWiring.ts +119 -0
  984. package/src/debug/protocol.ts +58 -0
  985. package/src/debug/redaction.ts +483 -0
  986. package/src/debug/replayWiring.ts +148 -0
  987. package/src/debug/screenTracking.ts +55 -0
  988. package/src/debug/sessionWiring.ts +59 -0
  989. package/src/debug/stream.ts +561 -0
  990. package/src/debug/transport.ts +440 -0
  991. package/src/features/bugreport/BugReportFeature.ts +128 -0
  992. package/src/features/bugreport/buildPayload.ts +116 -0
  993. package/src/features/bugreport/index.ts +0 -0
  994. package/src/features/crash/CrashFeature.ts +87 -0
  995. package/src/features/crash/CrashReporter.ts +189 -0
  996. package/src/features/crash/NativeCrashFeature.ts +42 -0
  997. package/src/features/crash/capture.ts +48 -0
  998. package/src/features/crash/globalHandler.ts +39 -0
  999. package/src/features/crash/index.ts +8 -0
  1000. package/src/features/crash/nativeCrashBridge.ts +352 -0
  1001. package/src/features/crash/rejectionHandler.ts +196 -0
  1002. package/src/features/crash/scrubCrash.ts +175 -0
  1003. package/src/features/engage/EngageAnchor.tsx +159 -0
  1004. package/src/features/engage/EngageArchetypeRenderers.tsx +3705 -0
  1005. package/src/features/engage/EngageInAppView.tsx +2678 -0
  1006. package/src/features/engage/EngageInlinePlacement.tsx +169 -0
  1007. package/src/features/engage/EngagePromptProvider.tsx +1318 -0
  1008. package/src/features/engage/EngagePromptView.tsx +1400 -0
  1009. package/src/features/engage/EngageTransport.ts +668 -0
  1010. package/src/features/engage/EngageVariantContent.tsx +1483 -0
  1011. package/src/features/engage/__test-support__/reactNativeStub.js +40 -0
  1012. package/src/features/engage/attachmentCapture.ts +45 -0
  1013. package/src/features/engage/captureVoiceAttachment.ts +81 -0
  1014. package/src/features/engage/engageCoachmarkTour.ts +120 -0
  1015. package/src/features/engage/engageGameLogic.ts +347 -0
  1016. package/src/features/engage/engageMediaSizing.ts +76 -0
  1017. package/src/features/engage/engageMultiStepSheet.ts +53 -0
  1018. package/src/features/engage/engageOutcome.ts +157 -0
  1019. package/src/features/engage/engagePushTokenBridge.ts +84 -0
  1020. package/src/features/engage/engageShakeBridge.ts +67 -0
  1021. package/src/features/engage/engageSignals.ts +40 -0
  1022. package/src/features/engage/engageStoreReviewBridge.ts +48 -0
  1023. package/src/features/engage/engageTestSeenStore.ts +95 -0
  1024. package/src/features/engage/engageThrottle.ts +478 -0
  1025. package/src/features/engage/engageTriggerEngine.ts +350 -0
  1026. package/src/features/engage/engageTypes.ts +712 -0
  1027. package/src/features/engage/engageVariantResolver.ts +364 -0
  1028. package/src/features/engage/engageWindowInsets.ts +108 -0
  1029. package/src/features/engage/gestureTriggerDetector.ts +83 -0
  1030. package/src/features/engage/transcription/TranscriptionProvider.ts +68 -0
  1031. package/src/features/install-referrer/installReferrer.ts +112 -0
  1032. package/src/features/journey/ScaleBunDebugRoot.tsx +1045 -0
  1033. package/src/features/journey/ScaleBunFlatList.tsx +39 -0
  1034. package/src/features/journey/ScaleBunImpression.tsx +109 -0
  1035. package/src/features/journey/ScaleBunScrollView.tsx +101 -0
  1036. package/src/features/journey/ScaleBunSectionList.tsx +39 -0
  1037. package/src/features/journey/autoInstrumentScroll.ts +155 -0
  1038. package/src/features/journey/calibrationContext.ts +44 -0
  1039. package/src/features/journey/gestureBuffer.ts +59 -0
  1040. package/src/features/journey/gestureDetector.ts +162 -0
  1041. package/src/features/journey/impression.ts +92 -0
  1042. package/src/features/journey/interactionProtocol.ts +243 -0
  1043. package/src/features/journey/journeyManager.ts +469 -0
  1044. package/src/features/journey/journeyTypes.ts +215 -0
  1045. package/src/features/journey/nativeScroll.ts +94 -0
  1046. package/src/features/journey/navDetector.ts +149 -0
  1047. package/src/features/journey/screenshotHelper.ts +137 -0
  1048. package/src/features/journey/scrollContext.ts +146 -0
  1049. package/src/features/journey/targetGeometry.ts +197 -0
  1050. package/src/features/journey/targetRegistry.ts +43 -0
  1051. package/src/features/journey/touchTarget.ts +339 -0
  1052. package/src/features/journey/uiState.ts +182 -0
  1053. package/src/features/navigation/AutoScreenDetector.ts +617 -0
  1054. package/src/features/network/NetworkFeature.ts +232 -0
  1055. package/src/features/network/index.ts +59 -0
  1056. package/src/features/network/thirdParty.ts +160 -0
  1057. package/src/features/ota/OtaEventEmitter.ts +187 -0
  1058. package/src/features/ota/OtaOrchestrator.ts +1513 -0
  1059. package/src/features/ota/OtaTypes.ts +230 -0
  1060. package/src/features/ota/deviceAttributes.ts +46 -0
  1061. package/src/features/ota/environment.ts +199 -0
  1062. package/src/features/ota/geoCountry.ts +85 -0
  1063. package/src/features/ota/retry.ts +123 -0
  1064. package/src/features/ota/signedDownload.ts +202 -0
  1065. package/src/features/ota/useOtaUpdate.ts +161 -0
  1066. package/src/features/performance/PerformanceFeature.ts +729 -0
  1067. package/src/features/performance/collectors/AppLaunchCollector.ts +131 -0
  1068. package/src/features/performance/collectors/AutoScreenLoadCollector.ts +258 -0
  1069. package/src/features/performance/collectors/CustomTraceCollector.ts +116 -0
  1070. package/src/features/performance/collectors/FrameMetricsCollector.ts +210 -0
  1071. package/src/features/performance/collectors/JsStallCollector.ts +184 -0
  1072. package/src/features/performance/collectors/NetworkPerfCollector.ts +69 -0
  1073. package/src/features/performance/collectors/ScreenLoadCollector.ts +95 -0
  1074. package/src/features/performance/collectors/UiHangCollector.ts +98 -0
  1075. package/src/features/performance/config.ts +136 -0
  1076. package/src/features/performance/getNativePerformanceModule.ts +38 -0
  1077. package/src/features/performance/index.ts +28 -0
  1078. package/src/features/performance/metrics/MetricsEngine.ts +152 -0
  1079. package/src/features/performance/models.ts +235 -0
  1080. package/src/features/performance/transport/PerformanceTransport.ts +161 -0
  1081. package/src/features/profiler/ProfilerFeature.ts +661 -0
  1082. package/src/features/profiler/config.ts +230 -0
  1083. package/src/features/profiler/contracts.ts +176 -0
  1084. package/src/features/profiler/index.ts +45 -0
  1085. package/src/features/profiler/models.ts +430 -0
  1086. package/src/features/profiler/transport/ProfilerTransport.ts +93 -0
  1087. package/src/features/replay/bridge/adapters/bridgeAdapter.ts +235 -0
  1088. package/src/features/replay/bridge/eventEmitter.ts +176 -0
  1089. package/src/features/replay/bridge/nativeModule.ts +252 -0
  1090. package/src/features/replay/bridge/nativeQuota.ts +111 -0
  1091. package/src/features/replay/core/clock/clock.ts +38 -0
  1092. package/src/features/replay/core/config/defaults.ts +66 -0
  1093. package/src/features/replay/core/config/validator.ts +113 -0
  1094. package/src/features/replay/core/env/environmentDetector.ts +21 -0
  1095. package/src/features/replay/core/errors/safeCall.ts +34 -0
  1096. package/src/features/replay/core/ids/sessionId.ts +44 -0
  1097. package/src/features/replay/core/logger/logger.ts +36 -0
  1098. package/src/features/replay/core/privacy/privacyTypes.ts +41 -0
  1099. package/src/features/replay/core/queue/boundedQueue.ts +71 -0
  1100. package/src/features/replay/integrations/alert/alertInstrumentation.ts +277 -0
  1101. package/src/features/replay/integrations/logs/consoleIntegration.ts +136 -0
  1102. package/src/features/replay/integrations/network/networkAdapter.ts +73 -0
  1103. package/src/features/replay/integrations/react-navigation/navigationIntegration.ts +89 -0
  1104. package/src/features/replay/integrations/touch/ReplayRoot.tsx +114 -0
  1105. package/src/features/replay/pipeline/batching/batchManager.ts +133 -0
  1106. package/src/features/replay/pipeline/envelope/envelopeBuilder.ts +66 -0
  1107. package/src/features/replay/pipeline/retry/retryPolicy.ts +62 -0
  1108. package/src/features/replay/pipeline/transport/transportTypes.ts +85 -0
  1109. package/src/features/replay/public/api.ts +364 -0
  1110. package/src/features/replay/public/enums.ts +78 -0
  1111. package/src/features/replay/public/types.ts +297 -0
  1112. package/src/features/replay/replay/breadcrumbs/breadcrumbCollector.ts +115 -0
  1113. package/src/features/replay/replay/frames/frameModels.ts +45 -0
  1114. package/src/features/replay/replay/session/sessionOrchestrator.ts +286 -0
  1115. package/src/features/replay/replay/timeline/timelineModels.ts +129 -0
  1116. package/src/features/replay/transport/BackendReplayTransport.ts +215 -0
  1117. package/src/features/replay/transport/CompositeReplayTransport.ts +82 -0
  1118. package/src/features/replay/transport/DesktopReplayTransport.ts +140 -0
  1119. package/src/features/replay/transport/ReplayTransport.ts +84 -0
  1120. package/src/features/session/BackendSessionAdapter.ts +1977 -0
  1121. package/src/features/session/DesktopSessionTransport.ts +130 -0
  1122. package/src/features/session/JourneyEventPipeline.ts +278 -0
  1123. package/src/features/session/ReplayCaptureManager.ts +1401 -0
  1124. package/src/features/session/ScrollTracker.ts +166 -0
  1125. package/src/features/session/SessionManager.ts +1687 -0
  1126. package/src/features/session/SyncDecisionEngine.ts +117 -0
  1127. package/src/features/session/frameLink.ts +41 -0
  1128. package/src/features/session/frameScrollState.ts +36 -0
  1129. package/src/features/session/index.ts +88 -0
  1130. package/src/features/session/nativeCapture.ts +43 -0
  1131. package/src/features/session/outboxFrameCapture.ts +79 -0
  1132. package/src/features/session/sessionTypes.ts +528 -0
  1133. package/src/features/session/viewportPlausibility.ts +134 -0
  1134. package/src/features/skan/skanBridge.ts +53 -0
  1135. package/src/features/skan/skanConversionManager.ts +173 -0
  1136. package/src/index.ts +206 -0
  1137. package/src/integrations/fetch/fetchInterceptor.ts +201 -0
  1138. package/src/integrations/navigation/screenTracker.ts +0 -0
  1139. package/src/integrations/network/bodyCapture.ts +328 -0
  1140. package/src/integrations/xhr/xhrInterceptor.ts +259 -0
  1141. package/src/metro/composeSourceMap.ts +104 -0
  1142. package/src/metro/featureModules.ts +143 -0
  1143. package/src/metro/index.ts +336 -0
  1144. package/src/metro/optionalDependencyStub.ts +13 -0
  1145. package/src/metro/optionalModules.ts +27 -0
  1146. package/src/metro/serializerCompose.ts +193 -0
  1147. package/src/pipeline/dispatcher/dispatcher.ts +22 -0
  1148. package/src/pipeline/envelope/envelope.ts +31 -0
  1149. package/src/pipeline/envelope/serializer.ts +14 -0
  1150. package/src/pipeline/processors/dedupe.ts +0 -0
  1151. package/src/pipeline/processors/enrich.ts +11 -0
  1152. package/src/pipeline/processors/sampling.ts +0 -0
  1153. package/src/pipeline/processors/sanitize.ts +23 -0
  1154. package/src/pipeline/queue/flushQueue.ts +144 -0
  1155. package/src/pipeline/queue/memoryQueue.ts +31 -0
  1156. package/src/pipeline/queue/persistentQueue.ts +385 -0
  1157. package/src/pipeline/queue/queuePolicy.ts +0 -0
  1158. package/src/pipeline/scheduler/flushScheduler.ts +47 -0
  1159. package/src/pipeline/scheduler/retryPolicy.ts +8 -0
  1160. package/src/public/ScaleBunErrorBoundary.tsx +91 -0
  1161. package/src/public/ScaleBunFacade.ts +2129 -0
  1162. package/src/public/ScaleBunProvider.tsx +91 -0
  1163. package/src/public/typedTracker.ts +123 -0
  1164. package/src/public/types.ts +362 -0
  1165. package/src/push/PushManager.ts +318 -0
  1166. package/src/push/adapters/ManualAdapter.ts +100 -0
  1167. package/src/push/adapters/NativeBridgeAdapter.ts +142 -0
  1168. package/src/push/adapters/NoopAdapter.ts +46 -0
  1169. package/src/push/adapters/RNFirebaseMessagingAdapter.ts +271 -0
  1170. package/src/push/adapters/loadMessaging.ts +24 -0
  1171. package/src/push/adapters/loadNotifee.ts +29 -0
  1172. package/src/push/adapters/selectAdapter.ts +176 -0
  1173. package/src/push/detect/capabilities.ts +124 -0
  1174. package/src/push/index.ts +22 -0
  1175. package/src/push/native/nativeNotifications.ts +207 -0
  1176. package/src/push/types.ts +159 -0
  1177. package/src/specs/NativeReplaySdk.ts +101 -0
  1178. package/src/specs/NativeScaleBunCrash.ts +64 -0
  1179. package/src/specs/NativeScaleBunInstallReferrer.ts +29 -0
  1180. package/src/specs/NativeScaleBunOta.ts +154 -0
  1181. package/src/specs/NativeScaleBunPerformance.ts +34 -0
  1182. package/src/specs/NativeScaleBunProfiler.ts +41 -0
  1183. package/src/specs/NativeScaleBunStorage.ts +59 -0
  1184. package/src/storage/StorageBackend.ts +272 -0
  1185. package/src/storage/db/sqlite.ts +0 -0
  1186. package/src/storage/files/fileStore.ts +0 -0
  1187. package/src/transport/auth/sdkSession.ts +27 -0
  1188. package/src/transport/backoff/exponentialJitter.ts +9 -0
  1189. package/src/transport/http/endpoints.ts +33 -0
  1190. package/src/transport/http/httpClient.ts +73 -0
  1191. package/src/transport/rateLimit/retryAfter.ts +0 -0
  1192. package/src/transport/signing/requestSigner.ts +0 -0
  1193. package/src/vendor/protocol/index.ts +391 -0
  1194. package/src/vendor/protocol/internal/validation.ts +497 -0
  1195. package/src/vendor/sdk-contracts/bridge.ts +162 -0
  1196. package/src/vendor/sdk-contracts/config.ts +192 -0
  1197. package/src/vendor/sdk-contracts/events.ts +50 -0
  1198. package/src/vendor/sdk-contracts/features.ts +42 -0
  1199. package/src/vendor/sdk-contracts/index.ts +98 -0
  1200. package/src/vendor/sdk-contracts/platform.ts +42 -0
  1201. package/src/vendor/sdk-contracts/session-boundary.ts +55 -0
  1202. package/src/vendor/sdk-contracts/session.ts +225 -0
  1203. package/src/vendor/vendor.manifest +10 -0
@@ -0,0 +1,1045 @@
1
+ /**
2
+ * ScaleBun SDK — ScaleBunDebugRoot
3
+ *
4
+ * Root wrapper component that provides:
5
+ * 1. Native screenshot capture wiring (via bridgeAdapter)
6
+ * 2. Navigation detection integration
7
+ * 3. Lightweight gesture capture layer
8
+ * 4. Emits EVENT_DEBUG_READY on mount
9
+ *
10
+ * Usage in demo app:
11
+ * <ScaleBunDebugRoot>
12
+ * <App />
13
+ * </ScaleBunDebugRoot>
14
+ *
15
+ * Also provides:
16
+ * <ScaleBunScreen name="..." /> — Screen beacon component
17
+ * useScaleBunScreen("name") — Screen beacon hook
18
+ *
19
+ * IMPORTANT: All heavy imports (JourneyManager, etc.) are LAZY
20
+ * to avoid pulling in native module dependencies at load time.
21
+ */
22
+
23
+ import { scrollFields } from './nativeScroll';
24
+ import React, {
25
+ useEffect,
26
+ useRef,
27
+ createContext,
28
+ useContext,
29
+ type ReactNode,
30
+ } from 'react';
31
+ import { View, NativeEventEmitter, NativeModules } from 'react-native';
32
+ import { resolveTouchTarget, describeTouchTarget, targetIdentity } from './touchTarget';
33
+ import { localPoint, normalizeRect, readRectSync, type NormalizedRect } from './targetGeometry';
34
+ import { nativeTagOf, nearestRecordedOffset } from './scrollContext';
35
+ import { resolvePlatformOS } from '../../core/context/device';
36
+ import {
37
+ INTERACTION_PROTOCOL_VERSION,
38
+ generateInteractionId,
39
+ correlateInteraction,
40
+ pruneInteractionStarts,
41
+ type InteractionStartContext,
42
+ } from './interactionProtocol';
43
+
44
+ // ─── Lazy imports to avoid native module cascade at load time ────────────────
45
+ // We only import TYPE references at the top level; actual modules are require()'d
46
+ // inside effects or callbacks, which run AFTER the native runtime is initialized.
47
+
48
+ let _bootstrap: typeof import('../../debug/bootstrap') | null = null;
49
+ function getBootstrap() {
50
+ if (!_bootstrap) {
51
+ _bootstrap = require('../../debug/bootstrap');
52
+ }
53
+ return _bootstrap;
54
+ }
55
+
56
+ // ─── Context for Journey Manager ────────────────────────────────────────────
57
+
58
+ const JourneyContext = createContext<any>(null);
59
+
60
+ /**
61
+ * Floor on how often a UI-state change may request a screenshot.
62
+ *
63
+ * One frame per second is far finer than any state a person perceives changing, and far coarser
64
+ * than a render loop — which is the case that matters, because a host may legitimately declare
65
+ * state from inside render and an oscillating dimension would otherwise capture continuously.
66
+ */
67
+ const UI_STATE_CAPTURE_MIN_INTERVAL_MS = 1000;
68
+
69
+ // ─── ScaleBunDebugRoot ───────────────────────────────────────────────────────────
70
+
71
+ interface ScaleBunDebugRootProps {
72
+ children: ReactNode;
73
+ /** Optional: pass a React Navigation ref for auto-detection */
74
+ navigationRef?: any;
75
+ /** Internal bridge used by ScaleBunProvider's zero-instrumentation event lane. */
76
+ captureAutomaticInteractions?: boolean;
77
+ /** Avoid the legacy-wrapper warning when composed by ScaleBunProvider. */
78
+ suppressDeprecationWarning?: boolean;
79
+ }
80
+
81
+ interface TouchStartContext extends InteractionStartContext {
82
+ locationX?: number;
83
+ locationY?: number;
84
+ }
85
+
86
+ export function ScaleBunDebugRoot({
87
+ children,
88
+ navigationRef,
89
+ captureAutomaticInteractions = false,
90
+ suppressDeprecationWarning = false,
91
+ }: ScaleBunDebugRootProps) {
92
+ const rootRef = useRef<View>(null);
93
+ const managerRef = useRef<any>(null);
94
+ const initializedRef = useRef(false);
95
+
96
+ useEffect(() => {
97
+ // Guard: only initialize once
98
+ if (initializedRef.current) return;
99
+
100
+ // Deprecation notice (once per mount)
101
+ if (!suppressDeprecationWarning) {
102
+ console.warn(
103
+ '[ScaleBun] <ScaleBunDebugRoot> is no longer required for standard SDK usage. ' +
104
+ 'Use <ScaleBunProvider> for initialization, Engage, automatic events, ' +
105
+ 'touch tracking, and journey features in one wrapper. ' +
106
+ 'See: https://docs.scalebun.com/migration/v2',
107
+ );
108
+ }
109
+
110
+ // LAZY: load bootstrap module only inside effect (after native runtime ready)
111
+ let bs: ReturnType<typeof getBootstrap>;
112
+ try {
113
+ bs = getBootstrap();
114
+ } catch (e: any) {
115
+ console.warn('[ScaleBunDebugRoot] Failed to load bootstrap:', e?.message);
116
+ return;
117
+ }
118
+
119
+ if (!bs) return;
120
+
121
+ const isDebugEnabled = bs.isDebugEnabled();
122
+ let transport: any = null;
123
+ let journeyConfig: any = { enabled: false };
124
+
125
+ if (!isDebugEnabled) {
126
+ // This is expected when ScaleBunDebugRoot is composed internally by
127
+ // ScaleBunProvider. Keep the diagnostic for direct legacy usage, but
128
+ // do not surface a LogBox warning in normal application mode.
129
+ if (!suppressDeprecationWarning) {
130
+ console.warn('[ScaleBunDebugRoot] Debug not enabled — running in production mode');
131
+ }
132
+ try { bs._setDebugReady(true); } catch { /* no-throw */ }
133
+ } else {
134
+ transport = bs._getTransport();
135
+ if (!transport) {
136
+ console.warn('[ScaleBunDebugRoot] No transport — skipping journey init');
137
+ } else {
138
+ try {
139
+ journeyConfig = bs._getJourneyConfig();
140
+ } catch {
141
+ journeyConfig = { enabled: false };
142
+ }
143
+ if (!journeyConfig.enabled) {
144
+ console.warn('[ScaleBunDebugRoot] Journey not enabled — passthrough mode');
145
+ try { bs._setDebugReady(true); } catch { /* no-throw */ }
146
+ }
147
+ }
148
+ }
149
+
150
+ // Wire unified SessionManager (independent of journey)
151
+ // NOTE: We do NOT auto-start the session here. The session stays idle
152
+ // until the desktop user explicitly presses Record (sends startSession command).
153
+ // We only wire the native capture bridge so that when a session IS started,
154
+ // the capture infrastructure is ready.
155
+ try {
156
+ const { SessionManager } = require('../session/SessionManager');
157
+ const sessionManager = SessionManager.getExistingInstance();
158
+ if (sessionManager) {
159
+
160
+ // Wire native bridge capture — uses PixelCopy (Android) / UIGraphicsImageRenderer (iOS)
161
+ // via the shared native module. This replaces the previous ViewShot dependency.
162
+ setTimeout(() => {
163
+ try {
164
+ const { bridgeAdapter } = require('../replay/bridge/adapters/bridgeAdapter');
165
+ const { Dimensions, Platform } = require('react-native');
166
+
167
+ if (bridgeAdapter.isAvailable()) {
168
+ // Create a capture function compatible with NativeCaptureFn
169
+ const nativeBridgeCapture = async (
170
+ _sessionId: string,
171
+ _reason: string,
172
+ _quality: any,
173
+ ) => {
174
+ try {
175
+ const result = await bridgeAdapter.captureScreenshot(_reason || 'session');
176
+ if (!result?.base64) return null;
177
+
178
+ const { width, height } = Dimensions.get('window');
179
+ return {
180
+ base64: result.base64,
181
+ width: result.width || Math.round(width),
182
+ height: result.height || Math.round(height),
183
+ byteSize: result.sizeBytes || Math.round(result.base64.length * 0.75),
184
+ format: (result.format ?? 'jpeg') as string,
185
+ frameHash: (result as any).frameHash as string | undefined,
186
+ platform: resolvePlatformOS() as 'android' | 'ios',
187
+ };
188
+ } catch {
189
+ return null;
190
+ }
191
+ };
192
+
193
+ // Inject into SessionManager (hot-swaps if session is active)
194
+ if (typeof (sessionManager as any).setNativeCapture === 'function') {
195
+ (sessionManager as any).setNativeCapture(nativeBridgeCapture);
196
+ console.warn('[ScaleBunDebugRoot] ✅ Native bridge capture wired');
197
+ }
198
+ } else {
199
+ console.warn('[ScaleBunDebugRoot] ⚠️ Native capture module not available');
200
+ }
201
+ } catch (capErr: any) {
202
+ console.warn('[ScaleBunDebugRoot] ⚠️ Native capture wiring failed:', capErr?.message);
203
+ }
204
+ }, 500);
205
+
206
+ console.warn('[ScaleBunDebugRoot] ✅ Session wired');
207
+ }
208
+ } catch { /* SessionManager may not be available — non-fatal */ }
209
+
210
+ // Always wire AutoScreenDetector to React Navigation if a ref is provided.
211
+ // Register even when ref.current is still null: at mount the
212
+ // <NavigationContainer> child hasn't attached the ref yet. AutoScreenDetector's
213
+ // poller retries wiring the 'state' listener once the container populates,
214
+ // so gating on `ref.current` here would permanently miss the (common) case
215
+ // where the container mounts after this effect runs.
216
+ if (navigationRef) {
217
+ try {
218
+ const { AutoScreenDetector } = require('../navigation/AutoScreenDetector');
219
+ AutoScreenDetector.getInstance().setNavigationRef(navigationRef);
220
+ } catch { /* no-throw */ }
221
+ }
222
+
223
+ if (!journeyConfig.enabled || !transport) {
224
+ return; // Journey disabled — session is wired above independently
225
+ }
226
+
227
+ // LAZY: only now require JourneyManager (which pulls in screenshot/gesture deps)
228
+ let JourneyManager: any;
229
+ try {
230
+ JourneyManager = require('./journeyManager').JourneyManager;
231
+ } catch (e: any) {
232
+ console.warn('[ScaleBunDebugRoot] Failed to load JourneyManager:', e?.message);
233
+ try { bs._setDebugReady(true); } catch { /* no-throw */ }
234
+ return;
235
+ }
236
+
237
+ // Create journey manager (idempotent singleton)
238
+ const manager = JourneyManager.getInstance(transport, journeyConfig);
239
+ managerRef.current = manager;
240
+
241
+ // Wire into command registry
242
+ try {
243
+ const commands = bs._getCommands();
244
+ if (commands) {
245
+ commands.setJourneyManager(manager);
246
+ commands.setJourneyEnabled(true);
247
+ commands.setDebugReady(true);
248
+ }
249
+ } catch { /* no-throw */ }
250
+
251
+ // Initialize with root ref (slight delay to ensure View is mounted)
252
+ const timer = setTimeout(() => {
253
+ try {
254
+ manager.initialize(rootRef.current);
255
+
256
+ // If React Navigation ref is available, subscribe
257
+ if (navigationRef?.current) {
258
+ try {
259
+ const navContainer = navigationRef.current;
260
+ if (navContainer.addListener) {
261
+ navContainer.addListener('state', () => {
262
+ try {
263
+ const state = navContainer.getRootState();
264
+ manager.nav.handleNavigationStateChange(state);
265
+ } catch { /* no-throw */ }
266
+ });
267
+ // Get initial state
268
+ try {
269
+ const state = navContainer.getRootState();
270
+ if (state) {
271
+ manager.nav.handleNavigationStateChange(state);
272
+ }
273
+ } catch { /* no-throw */ }
274
+ }
275
+ } catch { /* no-throw */ }
276
+ }
277
+
278
+ bs._setDebugReady(true);
279
+ initializedRef.current = true;
280
+ console.warn('[ScaleBunDebugRoot] ✅ Journey system initialized');
281
+ } catch (e: any) {
282
+ console.warn('[ScaleBunDebugRoot] ❌ Initialization error:', e?.message);
283
+ }
284
+ }, 200);
285
+
286
+ return () => {
287
+ clearTimeout(timer);
288
+ };
289
+ }, [navigationRef]);
290
+
291
+ /**
292
+ * RN-11 — CAPTURE A FRAME WHEN THE UI CHANGES SHAPE.
293
+ *
294
+ * A declared state used to have no picture of its own. Nothing captured on `setUiState`, so a
295
+ * state's visual existed only if a screenshot happened to be taken for another reason — a
296
+ * navigation, a timer, or the interaction capture that fires AFTER the touch and therefore
297
+ * photographs the outcome. A drawer could be recorded as open with no frame showing it open,
298
+ * or with the frame of the screen that replaced it.
299
+ *
300
+ * The native capture reasons are NAVIGATION, MANUAL, INTERACTION and TIMER; none of them means
301
+ * "the UI changed shape". This routes through the MANUAL path, which is the only one reachable
302
+ * from JS. A dedicated native reason would let the backend tell a state capture from a
303
+ * developer-requested one, and that is a native change on both platforms — worth doing, not
304
+ * doable from here.
305
+ *
306
+ * RATE LIMITED, and the limit is not politeness. A screenshot is expensive, and while
307
+ * `uiState` already collapses redundant declarations, a genuinely oscillating dimension (a
308
+ * spinner toggling, a live-updating badge) would otherwise capture continuously. One frame per
309
+ * second is far finer than any state a person can perceive changing and far coarser than a
310
+ * render loop.
311
+ *
312
+ * Requests only; never awaits and never throws. If the session is not recording,
313
+ * `captureManualFrame` declines and the state simply has no frame — which is the honest
314
+ * outcome and is exactly what the analytics-only lane already reports elsewhere.
315
+ */
316
+ useEffect(() => {
317
+ let lastCaptureTs = 0;
318
+ const { onUiStateChange } = require('./uiState');
319
+ const unsubscribe = onUiStateChange(() => {
320
+ const now = Date.now();
321
+ if (now - lastCaptureTs < UI_STATE_CAPTURE_MIN_INTERVAL_MS) return;
322
+ lastCaptureTs = now;
323
+ try {
324
+ const { SessionManager } = require('../session/SessionManager');
325
+ const sm = SessionManager.getExistingInstance();
326
+ if (sm && typeof (sm as any).captureManualFrame === 'function') {
327
+ /* Fire and forget: the tap that follows must not wait on a screenshot. */
328
+ void (sm as any).captureManualFrame();
329
+ }
330
+ } catch { /* no-throw */ }
331
+ });
332
+ return unsubscribe;
333
+ }, []);
334
+
335
+ // ─── Native Interaction Listener ────────────────────────────────────
336
+ // Receives high-confidence ScaleBunNativeInteraction events from the native tracker
337
+ // and forwards them to SessionManager as USER_ACTION events.
338
+ const lastNativeTouchTsRef = useRef<number>(0);
339
+ const nativeTrackingConfirmedRef = useRef<boolean>(false);
340
+ const touchStartRef = useRef<TouchStartContext | null>(null);
341
+ const interactionStartsRef = useRef<TouchStartContext[]>([]);
342
+ const pendingJsEmitsRef = useRef<Map<string, ReturnType<typeof setTimeout>>>(new Map());
343
+
344
+ useEffect(() => {
345
+ let subscription: any = null;
346
+ try {
347
+ const nativeModule = NativeModules.ReplaySdk;
348
+ if (!nativeModule) return;
349
+ const emitter = new NativeEventEmitter(nativeModule);
350
+ subscription = emitter.addListener('ScaleBunNativeInteraction', (event: any) => {
351
+ try {
352
+ // Record timestamp to suppress duplicate JS touch events
353
+ lastNativeTouchTsRef.current = Date.now();
354
+ nativeTrackingConfirmedRef.current = true;
355
+
356
+ const nativeOccurredAt =
357
+ typeof event.occurredAt === 'number'
358
+ ? event.occurredAt
359
+ : (typeof event.timestamp === 'number' ? event.timestamp : Date.now()) -
360
+ (typeof event.durationMs === 'number' ? event.durationMs : 0);
361
+ /**
362
+ * RN-6 — correlate, then CONSUME. See interactionProtocol.ts for why
363
+ * the join is on time at all, and why a refusal is the important part.
364
+ *
365
+ * Pruning first is part of the correctness, not tidying: a start older
366
+ * than the tolerance can never be paired, but while it sits in the list
367
+ * it is still counted by the ambiguity test, so a stale entry can turn a
368
+ * clear pairing into a refusal — and the list only grows.
369
+ */
370
+ pruneInteractionStarts(interactionStartsRef.current, nativeOccurredAt);
371
+ const correlation = correlateInteraction(
372
+ interactionStartsRef.current,
373
+ nativeOccurredAt,
374
+ );
375
+ const start = correlation.start;
376
+ /**
377
+ * ONE-TO-ONE. Without removing the matched start, a second native event
378
+ * arriving within the window claims the SAME js evidence, so one tap's
379
+ * target is stamped onto another tap that never had one — a duplicate
380
+ * identity that reads as two genuine interactions on the same control.
381
+ */
382
+ if (correlation.index >= 0) {
383
+ interactionStartsRef.current.splice(correlation.index, 1);
384
+ }
385
+
386
+ // Cancel only this physical touch's fallback. A single timer used to cancel a
387
+ // previous rapid tap and silently lose it on devices without native tracking.
388
+ if (start) {
389
+ const pending = pendingJsEmitsRef.current.get(start.interactionId);
390
+ if (pending !== undefined) clearTimeout(pending);
391
+ pendingJsEmitsRef.current.delete(start.interactionId);
392
+ }
393
+
394
+ const { SessionManager } = require('../session/SessionManager');
395
+ const sm = SessionManager.getExistingInstance();
396
+ if (!sm || typeof (sm as any).onGestureDetected !== 'function') return;
397
+
398
+ // Diagnostic: capture window dims at event time. Pure
399
+ // observability — NOT used for normalization (native path
400
+ // already produced normalizedX/Y against the screenshot view).
401
+ let _diagWinW: number | undefined;
402
+ let _diagWinH: number | undefined;
403
+ try {
404
+ const { Dimensions } = require('react-native');
405
+ const _d = Dimensions.get('window');
406
+ _diagWinW = _d.width; _diagWinH = _d.height;
407
+ } catch { /* no-throw */ }
408
+
409
+ (sm as any).onGestureDetected(event.gestureType || 'tap', {
410
+ interactionId: event.interactionId || start?.interactionId || generateInteractionId(),
411
+ interactionProtocol: event.interactionProtocol || INTERACTION_PROTOCOL_VERSION,
412
+ occurredAt: nativeOccurredAt,
413
+ /**
414
+ * RN-6 — THESE FIVE FIELDS ARE THE ONLY ONES THE JOIN CARRIES, AND
415
+ * THEREFORE THE ONLY ONES A BAD JOIN CAN FALSIFY.
416
+ *
417
+ * Coordinates below come from native and are right regardless. So a
418
+ * mispairing does not produce visibly broken data: it produces heat
419
+ * in the correct position attributed to the wrong control, in the
420
+ * wrong UI state, on the wrong screen. Every field is individually
421
+ * well-formed and nothing downstream can tell.
422
+ *
423
+ * When the correlation is not 'exact' they are left UNDEFINED rather
424
+ * than filled from a best guess. An interaction with no target is
425
+ * honest and visibly incomplete — the accounting lane can count it as
426
+ * unplaceable and say why. An interaction with the WRONG target is
427
+ * indistinguishable from a correct one and silently corrupts every
428
+ * aggregate it enters. `null` is not `0`, and a guess is not a
429
+ * measurement.
430
+ */
431
+ ui: start?.ui,
432
+ stateStatus: start?.stateStatus ?? 'not_captured',
433
+ target: start?.target,
434
+ targetId: start?.targetId,
435
+ targetSource: start?.targetSource,
436
+ screenName: start?.screenName,
437
+ screenSource: start?.screenSource ?? 'none',
438
+ targetRect: start?.targetRect,
439
+ /**
440
+ * RN-15 — WHERE IN THE CONTROL, computed where both halves exist: the
441
+ * point comes from the native event and the rect was measured at
442
+ * finger-down, in the same capture base. Pairing them here rather than
443
+ * downstream stops anything later reaching for a different rect.
444
+ */
445
+ ...(() => {
446
+ const lp = localPoint(
447
+ start?.targetRect ?? null,
448
+ event.normalizedX,
449
+ event.normalizedY,
450
+ );
451
+ return lp ? { localU: lp.u, localV: lp.v } : {};
452
+ })(),
453
+ /**
454
+ * SCROLL — the JS wrapper's offset when the app uses it, else the NATIVE
455
+ * probe's innermost scroll container (read at ACTION_DOWN, no wrapper
456
+ * needed). The native half comes from this native event, not from the
457
+ * JS join, so it is valid whatever the correlation verdict: it is a
458
+ * measurement of where the finger landed, not an attribution.
459
+ */
460
+ ...scrollFields(start, event),
461
+ itemKey: start?.itemKey,
462
+ itemIndex: start?.itemIndex,
463
+ /**
464
+ * The join's own verdict, shipped with the row so it is auditable
465
+ * rather than a claim made in a comment. 'ambiguous' and 'none' are
466
+ * deliberately distinguished: 'none' means the JS handler never fired
467
+ * (a real capture gap on this platform), 'ambiguous' means it fired
468
+ * more than once too close together to attribute. Those have
469
+ * different fixes, and collapsing them would hide which one is
470
+ * actually happening in production.
471
+ */
472
+ correlation: correlation.outcome,
473
+ correlationDeltaMs: correlation.deltaMs,
474
+ correlationRunnerUpDeltaMs: correlation.runnerUpDeltaMs,
475
+ emitAutomaticAnalytics: start?.emitAutomaticAnalytics ?? captureAutomaticInteractions,
476
+ x: event.rawX,
477
+ y: event.rawY,
478
+ // Use the actual native end coords when present, not the down
479
+ // coords. The previous endX/endY fell back to rawX/rawY which
480
+ // collapsed swipes to a zero-length segment in the dashboard.
481
+ endX: event.rawEndX ?? event.rawX,
482
+ endY: event.rawEndY ?? event.rawY,
483
+ normalizedX: event.normalizedX,
484
+ normalizedY: event.normalizedY,
485
+ normalizedEndX: event.normalizedEndX,
486
+ normalizedEndY: event.normalizedEndY,
487
+ viewportWidth: event.screenshotWidthPx,
488
+ viewportHeight: event.screenshotHeightPx,
489
+ durationMs: event.durationMs,
490
+ confidence: 'high',
491
+ coordinateSpace: event.coordinateSpace,
492
+ safeAreaTop: event.safeAreaTop,
493
+ platform: event.platform,
494
+ source: 'native-interaction-tracker',
495
+ windowWidth: _diagWinW,
496
+ windowHeight: _diagWinH,
497
+ });
498
+ } catch { /* no-throw */ }
499
+ });
500
+ } catch { /* no-throw */ }
501
+
502
+ return () => {
503
+ try { subscription?.remove(); } catch { /* no-throw */ }
504
+ for (const timer of pendingJsEmitsRef.current.values()) clearTimeout(timer);
505
+ pendingJsEmitsRef.current.clear();
506
+ };
507
+ }, [captureAutomaticInteractions]);
508
+
509
+ // ─── Touch Tracking State ───────────────────────────────────────────
510
+
511
+ // On-screen rect of the root view — the EXACT view the native screenshot
512
+ // captures. Normalizing pageX/pageY against this rect makes JS-fallback taps
513
+ // share the screenshot's coordinate origin (fixes vertical status-bar offset).
514
+ const rootRectRef = useRef<{ x: number; y: number; w: number; h: number } | null>(null);
515
+ const measureRoot = () => {
516
+ try {
517
+ const node: any = rootRef.current;
518
+ if (node && typeof node.measureInWindow === 'function') {
519
+ node.measureInWindow((x: number, y: number, w: number, h: number) => {
520
+ if (w > 0 && h > 0) rootRectRef.current = { x, y, w, h };
521
+ });
522
+ }
523
+ } catch { /* no-throw */ }
524
+ };
525
+
526
+ // Eagerly measure the root view on mount AND periodically until we have a
527
+ // non-null reading. measureInWindow is async, so the first tap can otherwise
528
+ // fall back to Dimensions.get('window') — which excludes system insets and
529
+ // is ~status-bar fraction smaller than the screenshot region on Android,
530
+ // pushing the marker upward. Polling stops as soon as the first measurement
531
+ // succeeds; subsequent taps re-measure inline.
532
+ useEffect(() => {
533
+ let attempts = 0;
534
+ const tryMeasure = () => {
535
+ measureRoot();
536
+ attempts += 1;
537
+ if (rootRectRef.current || attempts >= 10) return;
538
+ setTimeout(tryMeasure, 100);
539
+ };
540
+ const t = setTimeout(tryMeasure, 50);
541
+ return () => clearTimeout(t);
542
+ }, []);
543
+
544
+ // Gesture capture handlers — feed into SessionManager (unified capture)
545
+ const handleTouchStart = (e: any) => {
546
+ try {
547
+ const touch = e.nativeEvent;
548
+ const target = resolveTouchTarget(e);
549
+ let ui: string | undefined;
550
+ let screenName: string | undefined;
551
+ /**
552
+ * RN-8 — WHERE the screen name came from, carried with the interaction.
553
+ *
554
+ * Production shows 13.8% of Android interactions with a screen and 0.5% on iOS, and
555
+ * those figures cannot distinguish three unrelated causes: nothing was instrumented,
556
+ * a manual beacon was instrumented but never reached interactions, or auto-detection
557
+ * ran and failed. Each has a different owner. Recording the source turns one
558
+ * unactionable percentage into three answerable ones.
559
+ */
560
+ let screenSource: 'manual' | 'navigation' | 'none' = 'none';
561
+ let stateInstrumented = false;
562
+ try {
563
+ const { uiStateSignature, uiStateInstrumented } = require('./uiState');
564
+ ui = uiStateSignature();
565
+ stateInstrumented = uiStateInstrumented();
566
+ } catch { /* no-throw */ }
567
+ try {
568
+ const { AutoScreenDetector } = require('../navigation/AutoScreenDetector');
569
+ const detector = AutoScreenDetector.getInstance();
570
+ screenName = detector.getCurrentScreen() || undefined;
571
+ /* Read from the SAME call site as the name, so the two can never describe
572
+ different moments — the detector is polled and its answer can change between
573
+ two reads a few milliseconds apart. */
574
+ screenSource = screenName ? detector.getCurrentScreenSource() : 'none';
575
+ } catch { /* no-throw */ }
576
+ const start: TouchStartContext = {
577
+ interactionId: generateInteractionId(),
578
+ occurredAt: Date.now(),
579
+ x: touch.pageX,
580
+ y: touch.pageY,
581
+ locationX: touch.locationX,
582
+ locationY: touch.locationY,
583
+ /**
584
+ * RN-1 + RN-2 — the identity that is persisted, and it is now code-derived.
585
+ *
586
+ * `describeTouchTarget` returns `testID` -> structural path -> component name,
587
+ * and never a caption or an accessibilityLabel. Before RN-2 it preferred free
588
+ * text, so this line was writing user data ("Pay EGP 1,442", an order row
589
+ * labelled with an email address, a contact's name) into the analytics store —
590
+ * and, because `target` is an aggregation key, splitting one button into one
591
+ * bucket per person at the same time.
592
+ *
593
+ * `targetId` used to be `target?.testID` alone, which is `undefined` in the
594
+ * overwhelming majority of apps — no testIDs authored — so the field the
595
+ * backend keys on was empty almost always. It now falls back to the structural
596
+ * path, with `targetSource` recording WHICH it got.
597
+ */
598
+ target: describeTouchTarget(target),
599
+ targetId: targetIdentity(target).id,
600
+ /**
601
+ * WHICH KIND of identity this is, because they are not equally trustworthy: a
602
+ * `testID` is a promise from the app's authors that this control is this
603
+ * control; a `path` is an inference that breaks when the tree is refactored.
604
+ * Without this the accounting lane cannot distinguish "the control had no
605
+ * identity" from "the identity is a structural guess", and both would render
606
+ * as an equally confident target.
607
+ */
608
+ targetSource: targetIdentity(target).source,
609
+ /* RN-4 — row identity from the app's own keyExtractor; see touchTarget.ts. */
610
+ itemKey: target?.itemKey,
611
+ itemIndex: target?.itemIndex,
612
+ /**
613
+ * RN-13 — the control's rectangle, so `heat ∈ target` is decidable.
614
+ *
615
+ * Read SYNCHRONOUSLY here, in the same tick as the touch, and normalized against
616
+ * the SAME measured root the tap's own coordinates use. Both halves matter:
617
+ *
618
+ * - A callback measurement (`measureInWindow`) would resolve after this handler
619
+ * returns, so the rect attached to a tap could be the previous tap's, with
620
+ * nothing afterwards able to tell. `targetGeometry` refuses to guess: it reads
621
+ * now or reports null.
622
+ * - Normalizing against a window size instead of the root view is off by the
623
+ * status bar on most devices, which would read as "the heat is just outside
624
+ * the button" everywhere rather than as a measurement bug.
625
+ *
626
+ * `measureRoot()` is called first because the cached root rect is populated
627
+ * asynchronously at mount; without it the first taps of a session normalize
628
+ * against nothing and get a null rect for a reason that has nothing to do with
629
+ * the control.
630
+ */
631
+ /**
632
+ * RN-3 — WHERE IN THE CONTENT, not just where on the glass.
633
+ *
634
+ * Two taps at the same screen coordinate one viewport apart are two different
635
+ * controls. Without an offset they merge into one hotspot, and the heatmap shows
636
+ * heavy engagement at a position where, in content terms, nothing in particular
637
+ * is. The offset is also a CACHE dimension — two scroll states of one route must
638
+ * not share a backdrop — so its absence corrupts the picture as well as the count.
639
+ *
640
+ * `ancestors` is innermost-first, so this takes the NEAREST scroller that has a
641
+ * recorded position: a tap inside a horizontal carousel belongs to the carousel's
642
+ * content, not to how far the page behind it had scrolled.
643
+ *
644
+ * Null when no ancestor has one — never zero. Zero is a real scroll position (the
645
+ * top of a list), and reporting it for "unknown" would place every unmeasured tap
646
+ * at the top of its content, indistinguishable from a genuine tap there.
647
+ */
648
+ ...(() => {
649
+ const hit = nearestRecordedOffset(
650
+ (target?.ancestors ?? []).map((n) => nativeTagOf(n)),
651
+ );
652
+ return hit
653
+ ? { scrollX: hit.x, scrollY: hit.y, scrollSource: 'wrapper' as const }
654
+ : { scrollSource: 'none' as const };
655
+ })(),
656
+ targetRect: (() => {
657
+ measureRoot();
658
+ const root = rootRectRef.current;
659
+ /* null -> undefined: the context field is optional, and an explicit null would
660
+ serialise as a JSON null claiming "measured, and it was nothing". */
661
+ return normalizeRect(readRectSync(target?.node), root ? { w: root.w, h: root.h } : null) ?? undefined;
662
+ })(),
663
+ screenName,
664
+ screenSource,
665
+ ui,
666
+ stateStatus: ui ? 'captured_nonempty' : stateInstrumented ? 'captured_empty' : 'not_instrumented',
667
+ emitAutomaticAnalytics: captureAutomaticInteractions,
668
+ };
669
+ touchStartRef.current = start;
670
+ interactionStartsRef.current = interactionStartsRef.current
671
+ .filter((candidate) => start.occurredAt - candidate.occurredAt < 5000)
672
+ .concat(start)
673
+ .slice(-8);
674
+ } catch { /* no-throw */ }
675
+ };
676
+
677
+ const handleTouchEnd = (e: any) => {
678
+ try {
679
+ const touch = e.nativeEvent;
680
+
681
+ // Classify gesture based on touch movement and duration
682
+ const start = touchStartRef.current;
683
+ let gestureType = 'tap';
684
+
685
+ // Capture window dimensions at touch time for accurate normalization
686
+ let vpW = 0;
687
+ let vpH = 0;
688
+ let screenW = 0;
689
+ let screenH = 0;
690
+ let statusBarHeight = 0;
691
+ try {
692
+ const { Dimensions, StatusBar, Platform } = require('react-native');
693
+ const dims = Dimensions.get('window');
694
+ vpW = dims.width;
695
+ vpH = dims.height;
696
+ const scr = Dimensions.get('screen');
697
+ screenW = scr.width;
698
+ screenH = scr.height;
699
+ statusBarHeight = Platform.OS === 'android' ? (StatusBar.currentHeight || 0) : 0;
700
+ } catch { /* no-throw */ }
701
+
702
+ // Re-measure the root view so its on-screen rect is fresh for this tap.
703
+ measureRoot();
704
+ const rootRect = rootRectRef.current;
705
+
706
+ // WHAT was tapped, resolved from the React fiber on the touch event. Without this the tap
707
+ // carries only coordinates, so every tap in the app groups into one row per gesture type.
708
+ // Defensive by construction — returns undefined rather than throwing (see touchTarget.ts).
709
+ /**
710
+ * Resolved ONCE, so `target` and `targetId` cannot disagree about the same tap.
711
+ *
712
+ * The previous shape called `resolveTouchTarget(e)` inline for `target` while
713
+ * `targetId` came only from `start` — so on the fallback path (no JS start, or a
714
+ * refused correlation) the tap carried a description with NO id, and the two fields
715
+ * were computed from different sources. Anything joining on `targetId` therefore
716
+ * saw nothing for a tap that visibly had a target.
717
+ */
718
+ const freshTarget = start ? null : resolveTouchTarget(e);
719
+ const tapped = start?.target ?? describeTouchTarget(freshTarget);
720
+ const identity = start
721
+ ? { id: start.targetId, source: start.targetSource }
722
+ : targetIdentity(freshTarget);
723
+
724
+ const gestureDetails: any = {
725
+ target: tapped,
726
+ interactionId: start?.interactionId ?? generateInteractionId(),
727
+ interactionProtocol: INTERACTION_PROTOCOL_VERSION,
728
+ occurredAt: start?.occurredAt ?? Date.now(),
729
+ ui: start?.ui,
730
+ stateStatus: start?.stateStatus ?? 'not_captured',
731
+ targetId: identity.id,
732
+ targetSource: identity.source,
733
+ screenName: start?.screenName,
734
+ screenSource: start?.screenSource ?? 'none',
735
+ targetRect: start?.targetRect,
736
+ scrollX: start?.scrollX,
737
+ scrollY: start?.scrollY,
738
+ scrollSource: start?.scrollSource ?? 'none',
739
+ itemKey: start?.itemKey,
740
+ itemIndex: start?.itemIndex,
741
+ emitAutomaticAnalytics: start?.emitAutomaticAnalytics ?? captureAutomaticInteractions,
742
+ x: start?.x ?? touch.pageX,
743
+ y: start?.y ?? touch.pageY,
744
+ pageX: start?.x ?? touch.pageX,
745
+ pageY: start?.y ?? touch.pageY,
746
+ locationX: start?.locationX ?? touch.locationX,
747
+ locationY: start?.locationY ?? touch.locationY,
748
+ viewportWidth: vpW > 0 ? vpW : undefined,
749
+ viewportHeight: vpH > 0 ? vpH : undefined,
750
+ };
751
+
752
+ // Normalize against the measured root-view SIZE — the exact view the
753
+ // screenshot captures (Android: R.id.content, iOS: window root).
754
+ // pageX/pageY are ALREADY relative to the RN root view, which shares the
755
+ // screenshot's origin. Do NOT subtract rootRect.x/y: on Android
756
+ // measureInWindow returns rootRect.y = statusBarHeight, so subtracting it
757
+ // double-counts the status bar and pushes every marker upward.
758
+ if (rootRect && rootRect.w > 0 && rootRect.h > 0) {
759
+ const nx = Math.max(0, Math.min(1, (start?.x ?? touch.pageX) / rootRect.w));
760
+ const ny = Math.max(0, Math.min(1, (start?.y ?? touch.pageY) / rootRect.h));
761
+ gestureDetails.normalizedX = nx;
762
+ gestureDetails.normalizedY = ny;
763
+ /**
764
+ * RN-15 on the JS-fallback lane.
765
+ *
766
+ * Computed here rather than in the literal above because that is where nx/ny first
767
+ * exist. The rect is the SAME one the native lane uses, so one physical tap yields
768
+ * the same local position whichever lane captured it — two lanes disagreeing about
769
+ * where in a control a tap landed would be worse than neither reporting it.
770
+ */
771
+ const lp = localPoint(start?.targetRect ?? null, nx, ny);
772
+ if (lp) {
773
+ gestureDetails.localU = lp.u;
774
+ gestureDetails.localV = lp.v;
775
+ }
776
+ gestureDetails.normalizedPrecomputed = true;
777
+ gestureDetails.viewportWidth = rootRect.w;
778
+ gestureDetails.viewportHeight = rootRect.h;
779
+ gestureDetails.coordinateSpace = 'js-root-measured';
780
+ gestureDetails.rootViewTop = rootRect.y;
781
+ gestureDetails.rootViewLeft = rootRect.x;
782
+ }
783
+ gestureDetails.statusBarHeight = statusBarHeight;
784
+ gestureDetails.screenWidth = screenW;
785
+ gestureDetails.screenHeight = screenH;
786
+ // Diagnostic-only: carry root-view & window dims through to the unified
787
+ // [TapDiag] log. NOT used for normalization decisions in SessionManager.
788
+ gestureDetails.windowWidth = vpW > 0 ? vpW : undefined;
789
+ gestureDetails.windowHeight = vpH > 0 ? vpH : undefined;
790
+ if (rootRect && rootRect.w > 0 && rootRect.h > 0) {
791
+ gestureDetails.rootViewWidth = rootRect.w;
792
+ gestureDetails.rootViewHeight = rootRect.h;
793
+ }
794
+ gestureDetails.platform = gestureDetails.platform ?? require('react-native').Platform.OS;
795
+
796
+ try {
797
+ const { logger } = require('../../core/logger/internalLogger');
798
+ logger?.debug?.(
799
+ `[TapAccuracy] platform=js-path raw=(${Math.round(touch.pageX)},${Math.round(touch.pageY)}) ` +
800
+ `normalized=(${gestureDetails.normalizedX?.toFixed?.(4)},${gestureDetails.normalizedY?.toFixed?.(4)}) ` +
801
+ `rootRect=(${rootRect ? `${Math.round(rootRect.x)},${Math.round(rootRect.y)},${Math.round(rootRect.w)}x${Math.round(rootRect.h)}` : 'none'}) ` +
802
+ `statusBar=${statusBarHeight} window=(${vpW}x${vpH}) screen=(${screenW}x${screenH}) space=js-root-measured`
803
+ );
804
+ } catch { /* no-throw */ }
805
+
806
+ if (start) {
807
+ const dx = touch.pageX - start.x;
808
+ const dy = touch.pageY - start.y;
809
+ const dist = Math.sqrt(dx * dx + dy * dy);
810
+ const duration = Date.now() - start.occurredAt;
811
+ gestureDetails.duration = duration;
812
+
813
+ if (dist >= 15) {
814
+ // Movement gesture: swipe or scroll
815
+ gestureDetails.endX = touch.pageX;
816
+ gestureDetails.endY = touch.pageY;
817
+
818
+ if (Math.abs(dy) > Math.abs(dx)) {
819
+ gestureType = 'scroll';
820
+ gestureDetails.direction = dy > 0 ? 'down' : 'up';
821
+ gestureDetails.distance = Math.abs(dy);
822
+ } else {
823
+ gestureType = 'swipe';
824
+ gestureDetails.direction = dx > 0 ? 'right' : 'left';
825
+ gestureDetails.distance = Math.abs(dx);
826
+ }
827
+ } else if (duration > 500) {
828
+ gestureType = 'long_press';
829
+ }
830
+ }
831
+
832
+ // Feed the Engage gesture detector (rage_tap / dead_tap) — only committed
833
+ // taps, not swipes/scrolls/long-presses. Pure JS, cross-platform; emits the
834
+ // unified `$gesture` signal the engage trigger engine listens for.
835
+ if (gestureType === 'tap') {
836
+ try {
837
+ const { gestureTriggerDetector } = require('../engage/gestureTriggerDetector');
838
+ gestureTriggerDetector.recordTap({
839
+ x: start?.x ?? touch.pageX,
840
+ y: start?.y ?? touch.pageY,
841
+ hasTarget: !!(start?.targetId || start?.target),
842
+ screen: start?.screenName,
843
+ });
844
+ } catch { /* no-throw */ }
845
+ }
846
+
847
+ // Emit gesture event to SessionManager for desktop-controlled recording.
848
+ // Native tracker produces high-confidence coords; JS is a fallback only.
849
+ //
850
+ // Race condition fix: the JS onTouchEnd fires BEFORE the native event
851
+ // crosses the bridge. Without guarding, the pipeline's 100ms dedup window
852
+ // drops the native event and keeps the JS-estimated coords (which can be
853
+ // wrong when measureInWindow hasn't resolved or the base differs from the
854
+ // screenshot capture view). Three-tier suppression:
855
+ // 1. Native confirmed active → skip JS entirely (native handles all touches)
856
+ // 2. Native event within 300ms → skip (existing dedup)
857
+ // 3. First touch (native not yet confirmed) → defer 600ms to let native arrive
858
+ const sinceNative = Date.now() - lastNativeTouchTsRef.current;
859
+ if (nativeTrackingConfirmedRef.current) {
860
+ // Native tracker is active — skip JS path entirely
861
+ } else if (sinceNative <= 300) {
862
+ // Native event arrived recently — skip (dedup)
863
+ } else {
864
+ // Native not yet confirmed — defer emission to give native time to arrive.
865
+ // If native fires during the delay, it cancels this pending emit.
866
+ const capturedType = gestureType;
867
+ const capturedDetails = { ...gestureDetails };
868
+ const interactionId = capturedDetails.interactionId as string;
869
+ const timer = setTimeout(() => {
870
+ pendingJsEmitsRef.current.delete(interactionId);
871
+ if (nativeTrackingConfirmedRef.current) return;
872
+ try {
873
+ const { SessionManager } = require('../session/SessionManager');
874
+ const sm = SessionManager.getExistingInstance();
875
+ if (sm && (sm as any).onGestureDetected) {
876
+ (sm as any).onGestureDetected(capturedType, {
877
+ ...capturedDetails,
878
+ confidence: 'medium',
879
+ source: 'js-touch-handler',
880
+ });
881
+ }
882
+ } catch { /* no-throw */ }
883
+ // 600ms, was 200ms. The race this defer exists for happens on the FIRST tap of a
884
+ // mount: native isn't confirmed yet, JS emitted at 200ms, then the first native
885
+ // event crossed the bridge at ~300-400ms — recording the same tap TWICE, with the
886
+ // JS copy missing normalizedX/Y whenever the async root-view measure hadn't
887
+ // resolved (an interaction the heatmap cannot place). QA hit exactly this pair.
888
+ // The wider defer lets the first native event cancel the JS emission instead; on
889
+ // devices with no native tracker at all it merely delays a background emission,
890
+ // which nothing user-visible waits on.
891
+ }, 600);
892
+ pendingJsEmitsRef.current.set(interactionId, timer);
893
+ }
894
+
895
+ touchStartRef.current = null;
896
+ } catch { /* no-throw */ }
897
+ };
898
+
899
+ return (
900
+ <View
901
+ ref={rootRef}
902
+ style={styles.root}
903
+ collapsable={false}
904
+ onStartShouldSetResponderCapture={() => {
905
+ return false; // Don't consume — just observe
906
+ }}
907
+ onMoveShouldSetResponderCapture={() => false}
908
+ onTouchStart={handleTouchStart}
909
+ onTouchEnd={handleTouchEnd}
910
+ >
911
+ <JourneyContext.Provider value={managerRef.current}>
912
+ {children}
913
+ </JourneyContext.Provider>
914
+ </View>
915
+ );
916
+ }
917
+
918
+ // ─── ScaleBunScreen Beacon ───────────────────────────────────────────────────────
919
+
920
+ interface ScaleBunScreenProps {
921
+ name: string;
922
+ }
923
+
924
+ /**
925
+ * Screen beacon component — registers the current screen name.
926
+ * Place it at the top of each screen component:
927
+ * <ScaleBunScreen name="HomeScreen" />
928
+ */
929
+ export function ScaleBunScreen({ name }: ScaleBunScreenProps) {
930
+ useScaleBunScreen(name);
931
+ return null; // Invisible beacon
932
+ }
933
+
934
+ /**
935
+ * Screen beacon hook — registers the current screen name.
936
+ * Use in screen components:
937
+ * useScaleBunScreen("HomeScreen");
938
+ */
939
+ export function useScaleBunScreen(name: string): void {
940
+ const manager = useContext(JourneyContext);
941
+
942
+ useEffect(() => {
943
+ // === CANONICAL SCREEN_VIEW SOURCE ===
944
+ // This hook is the SOLE source of SCREEN_VIEW session events.
945
+ // SessionManager.onScreenChange() emits the canonical SCREEN_VIEW
946
+ // event into the unified pipeline. No other code path emits SCREEN_VIEW.
947
+ //
948
+ // JourneyManager.nav.setScreen() is NOT a session event — it only
949
+ // records the current screen name for gesture step labeling context.
950
+
951
+ // Feed SessionManager first (canonical SCREEN_VIEW)
952
+ try {
953
+ const { SessionManager } = require('../session/SessionManager');
954
+ const sm = SessionManager.getExistingInstance();
955
+ // Always call onScreenChange — SessionManager.onScreenChange() has
956
+ // its own `if (!this.active) return` guard that correctly evaluates
957
+ // at call time. We must NOT gate here because useEffect only runs at
958
+ // mount/name-change, not when isActive changes. Gating here causes
959
+ // Record-after-mount to permanently miss screen registrations.
960
+ if (sm && (sm as any).onScreenChange) {
961
+ (sm as any).onScreenChange(name);
962
+ }
963
+ } catch { /* no-throw */ }
964
+
965
+ /**
966
+ * RN-8 — TELL THE DETECTOR TOO, because interactions read their screen from IT.
967
+ *
968
+ * This hook fed SessionManager, PerformanceFeature, ProfilerFeature and JourneyManager
969
+ * — four consumers — and never `AutoScreenDetector`. But `handleTouchStart` resolves an
970
+ * interaction's `screenName` from `AutoScreenDetector.getCurrentScreen()`, so a
971
+ * manually-instrumented app produced perfectly-named SCREEN_VIEW events while every TAP
972
+ * carried no screen at all. `setManualScreen` existed and was called only by tests.
973
+ *
974
+ * That is the whole story for apps the auto-hook cannot help: expo-router, a custom
975
+ * navigator, anything not `@react-navigation/native`. The documented manual escape hatch
976
+ * did not reach the one field that partitions every heatmap.
977
+ *
978
+ * Requires the last-writer-wins fix in `_currentScreen()` to be useful: under the
979
+ * previous rule a manual screen was readable for only 2000 ms, so wiring this alone
980
+ * would have handed interactions a name that expired before most taps happened.
981
+ */
982
+ try {
983
+ const { AutoScreenDetector } = require('../navigation/AutoScreenDetector');
984
+ AutoScreenDetector.getInstance().setManualScreen(name);
985
+ } catch { /* no-throw */ }
986
+
987
+ // Feed PerformanceFeature (screen context for perf metrics)
988
+ // NOTE: Only sets screen identity. Does NOT call markScreenLoadStart/End.
989
+ // AutoScreenLoadCollector handles timing independently via rAF + InteractionManager.
990
+ try {
991
+ const bs = getBootstrap();
992
+ const perfFeature = bs?.getPerformanceFeature?.();
993
+ if (perfFeature) {
994
+ perfFeature.setCurrentScreen(name);
995
+ }
996
+ } catch { /* no-throw */ }
997
+
998
+ // Feed ProfilerFeature (screen context for profiler samples)
999
+ // This sets screenKey on all subsequent profiler samples,
1000
+ // enabling screen visit extraction and per-screen correlation on desktop.
1001
+ try {
1002
+ const bs = getBootstrap();
1003
+ const profilerFeature = bs?.getProfilerFeature?.();
1004
+ if (profilerFeature) {
1005
+ profilerFeature.setCurrentScreen(name);
1006
+ }
1007
+ } catch { /* no-throw */ }
1008
+
1009
+ // NOTE: Auto-capture for performance preview is triggered from
1010
+ // PerformanceFeature.autoScreenLoadCollector callback, NOT here.
1011
+ // useScaleBunScreen uses developer-specified names (e.g. 'HomeScreen')
1012
+ // while perf metrics use React Navigation route names (e.g. 'HomeMain').
1013
+ // Triggering capture here would save screenshots under the wrong key.
1014
+
1015
+ // Feed JourneyManager (gesture context only, NOT a session event)
1016
+ if (!manager) {
1017
+ try {
1018
+ const bs = getBootstrap();
1019
+ const transport = bs?._getTransport();
1020
+ if (transport && bs?._isJourneyEnabled()) {
1021
+ const JM = require('./journeyManager').JourneyManager;
1022
+ const fallback = JM.getInstance(transport);
1023
+ fallback.nav.setScreen(name);
1024
+ }
1025
+ } catch { /* no-throw */ }
1026
+ return;
1027
+ }
1028
+ try {
1029
+ manager.nav.setScreen(name);
1030
+ } catch { /* no-throw */ }
1031
+ }, [name, manager]);
1032
+ }
1033
+
1034
+ // ─── Styles ─────────────────────────────────────────────────────────────────
1035
+ // IMPORTANT: Do NOT use StyleSheet.create() here.
1036
+ // In RN 0.84 bridgeless mode, StyleSheet.create() calls
1037
+ // PixelRatio.roundToNearestPixel() which accesses DeviceInfo TurboModule.
1038
+ // At module-load time, the TurboModule runtime isn't ready yet → crash.
1039
+ // Plain objects work identically for simple styles.
1040
+
1041
+ const styles = {
1042
+ root: {
1043
+ flex: 1,
1044
+ } as const,
1045
+ };