@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,1030 @@
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, { useEffect, useRef, createContext, useContext } from 'react';
25
+ import { View, NativeEventEmitter, NativeModules } from 'react-native';
26
+ import { resolveTouchTarget, describeTouchTarget, targetIdentity } from './touchTarget';
27
+ import { localPoint, normalizeRect, readRectSync } from './targetGeometry';
28
+ import { nativeTagOf, nearestRecordedOffset } from './scrollContext';
29
+ import { resolvePlatformOS } from '../../core/context/device';
30
+ import { INTERACTION_PROTOCOL_VERSION, generateInteractionId, correlateInteraction, pruneInteractionStarts } from './interactionProtocol';
31
+
32
+ // ─── Lazy imports to avoid native module cascade at load time ────────────────
33
+ // We only import TYPE references at the top level; actual modules are require()'d
34
+ // inside effects or callbacks, which run AFTER the native runtime is initialized.
35
+ import { jsx as _jsx } from "react/jsx-runtime";
36
+ let _bootstrap = null;
37
+ function getBootstrap() {
38
+ if (!_bootstrap) {
39
+ _bootstrap = require('../../debug/bootstrap');
40
+ }
41
+ return _bootstrap;
42
+ }
43
+
44
+ // ─── Context for Journey Manager ────────────────────────────────────────────
45
+
46
+ const JourneyContext = /*#__PURE__*/createContext(null);
47
+
48
+ /**
49
+ * Floor on how often a UI-state change may request a screenshot.
50
+ *
51
+ * One frame per second is far finer than any state a person perceives changing, and far coarser
52
+ * than a render loop — which is the case that matters, because a host may legitimately declare
53
+ * state from inside render and an oscillating dimension would otherwise capture continuously.
54
+ */
55
+ const UI_STATE_CAPTURE_MIN_INTERVAL_MS = 1000;
56
+
57
+ // ─── ScaleBunDebugRoot ───────────────────────────────────────────────────────────
58
+
59
+ export function ScaleBunDebugRoot({
60
+ children,
61
+ navigationRef,
62
+ captureAutomaticInteractions = false,
63
+ suppressDeprecationWarning = false
64
+ }) {
65
+ const rootRef = useRef(null);
66
+ const managerRef = useRef(null);
67
+ const initializedRef = useRef(false);
68
+ useEffect(() => {
69
+ // Guard: only initialize once
70
+ if (initializedRef.current) return;
71
+
72
+ // Deprecation notice (once per mount)
73
+ if (!suppressDeprecationWarning) {
74
+ console.warn('[ScaleBun] <ScaleBunDebugRoot> is no longer required for standard SDK usage. ' + 'Use <ScaleBunProvider> for initialization, Engage, automatic events, ' + 'touch tracking, and journey features in one wrapper. ' + 'See: https://docs.scalebun.com/migration/v2');
75
+ }
76
+
77
+ // LAZY: load bootstrap module only inside effect (after native runtime ready)
78
+ let bs;
79
+ try {
80
+ bs = getBootstrap();
81
+ } catch (e) {
82
+ console.warn('[ScaleBunDebugRoot] Failed to load bootstrap:', e?.message);
83
+ return;
84
+ }
85
+ if (!bs) return;
86
+ const isDebugEnabled = bs.isDebugEnabled();
87
+ let transport = null;
88
+ let journeyConfig = {
89
+ enabled: false
90
+ };
91
+ if (!isDebugEnabled) {
92
+ // This is expected when ScaleBunDebugRoot is composed internally by
93
+ // ScaleBunProvider. Keep the diagnostic for direct legacy usage, but
94
+ // do not surface a LogBox warning in normal application mode.
95
+ if (!suppressDeprecationWarning) {
96
+ console.warn('[ScaleBunDebugRoot] Debug not enabled — running in production mode');
97
+ }
98
+ try {
99
+ bs._setDebugReady(true);
100
+ } catch {/* no-throw */}
101
+ } else {
102
+ transport = bs._getTransport();
103
+ if (!transport) {
104
+ console.warn('[ScaleBunDebugRoot] No transport — skipping journey init');
105
+ } else {
106
+ try {
107
+ journeyConfig = bs._getJourneyConfig();
108
+ } catch {
109
+ journeyConfig = {
110
+ enabled: false
111
+ };
112
+ }
113
+ if (!journeyConfig.enabled) {
114
+ console.warn('[ScaleBunDebugRoot] Journey not enabled — passthrough mode');
115
+ try {
116
+ bs._setDebugReady(true);
117
+ } catch {/* no-throw */}
118
+ }
119
+ }
120
+ }
121
+
122
+ // Wire unified SessionManager (independent of journey)
123
+ // NOTE: We do NOT auto-start the session here. The session stays idle
124
+ // until the desktop user explicitly presses Record (sends startSession command).
125
+ // We only wire the native capture bridge so that when a session IS started,
126
+ // the capture infrastructure is ready.
127
+ try {
128
+ const {
129
+ SessionManager
130
+ } = require('../session/SessionManager');
131
+ const sessionManager = SessionManager.getExistingInstance();
132
+ if (sessionManager) {
133
+ // Wire native bridge capture — uses PixelCopy (Android) / UIGraphicsImageRenderer (iOS)
134
+ // via the shared native module. This replaces the previous ViewShot dependency.
135
+ setTimeout(() => {
136
+ try {
137
+ const {
138
+ bridgeAdapter
139
+ } = require('../replay/bridge/adapters/bridgeAdapter');
140
+ const {
141
+ Dimensions,
142
+ Platform
143
+ } = require('react-native');
144
+ if (bridgeAdapter.isAvailable()) {
145
+ // Create a capture function compatible with NativeCaptureFn
146
+ const nativeBridgeCapture = async (_sessionId, _reason, _quality) => {
147
+ try {
148
+ const result = await bridgeAdapter.captureScreenshot(_reason || 'session');
149
+ if (!result?.base64) return null;
150
+ const {
151
+ width,
152
+ height
153
+ } = Dimensions.get('window');
154
+ return {
155
+ base64: result.base64,
156
+ width: result.width || Math.round(width),
157
+ height: result.height || Math.round(height),
158
+ byteSize: result.sizeBytes || Math.round(result.base64.length * 0.75),
159
+ format: result.format ?? 'jpeg',
160
+ frameHash: result.frameHash,
161
+ platform: resolvePlatformOS()
162
+ };
163
+ } catch {
164
+ return null;
165
+ }
166
+ };
167
+
168
+ // Inject into SessionManager (hot-swaps if session is active)
169
+ if (typeof sessionManager.setNativeCapture === 'function') {
170
+ sessionManager.setNativeCapture(nativeBridgeCapture);
171
+ console.warn('[ScaleBunDebugRoot] ✅ Native bridge capture wired');
172
+ }
173
+ } else {
174
+ console.warn('[ScaleBunDebugRoot] ⚠️ Native capture module not available');
175
+ }
176
+ } catch (capErr) {
177
+ console.warn('[ScaleBunDebugRoot] ⚠️ Native capture wiring failed:', capErr?.message);
178
+ }
179
+ }, 500);
180
+ console.warn('[ScaleBunDebugRoot] ✅ Session wired');
181
+ }
182
+ } catch {/* SessionManager may not be available — non-fatal */}
183
+
184
+ // Always wire AutoScreenDetector to React Navigation if a ref is provided.
185
+ // Register even when ref.current is still null: at mount the
186
+ // <NavigationContainer> child hasn't attached the ref yet. AutoScreenDetector's
187
+ // poller retries wiring the 'state' listener once the container populates,
188
+ // so gating on `ref.current` here would permanently miss the (common) case
189
+ // where the container mounts after this effect runs.
190
+ if (navigationRef) {
191
+ try {
192
+ const {
193
+ AutoScreenDetector
194
+ } = require('../navigation/AutoScreenDetector');
195
+ AutoScreenDetector.getInstance().setNavigationRef(navigationRef);
196
+ } catch {/* no-throw */}
197
+ }
198
+ if (!journeyConfig.enabled || !transport) {
199
+ return; // Journey disabled — session is wired above independently
200
+ }
201
+
202
+ // LAZY: only now require JourneyManager (which pulls in screenshot/gesture deps)
203
+ let JourneyManager;
204
+ try {
205
+ JourneyManager = require('./journeyManager').JourneyManager;
206
+ } catch (e) {
207
+ console.warn('[ScaleBunDebugRoot] Failed to load JourneyManager:', e?.message);
208
+ try {
209
+ bs._setDebugReady(true);
210
+ } catch {/* no-throw */}
211
+ return;
212
+ }
213
+
214
+ // Create journey manager (idempotent singleton)
215
+ const manager = JourneyManager.getInstance(transport, journeyConfig);
216
+ managerRef.current = manager;
217
+
218
+ // Wire into command registry
219
+ try {
220
+ const commands = bs._getCommands();
221
+ if (commands) {
222
+ commands.setJourneyManager(manager);
223
+ commands.setJourneyEnabled(true);
224
+ commands.setDebugReady(true);
225
+ }
226
+ } catch {/* no-throw */}
227
+
228
+ // Initialize with root ref (slight delay to ensure View is mounted)
229
+ const timer = setTimeout(() => {
230
+ try {
231
+ manager.initialize(rootRef.current);
232
+
233
+ // If React Navigation ref is available, subscribe
234
+ if (navigationRef?.current) {
235
+ try {
236
+ const navContainer = navigationRef.current;
237
+ if (navContainer.addListener) {
238
+ navContainer.addListener('state', () => {
239
+ try {
240
+ const state = navContainer.getRootState();
241
+ manager.nav.handleNavigationStateChange(state);
242
+ } catch {/* no-throw */}
243
+ });
244
+ // Get initial state
245
+ try {
246
+ const state = navContainer.getRootState();
247
+ if (state) {
248
+ manager.nav.handleNavigationStateChange(state);
249
+ }
250
+ } catch {/* no-throw */}
251
+ }
252
+ } catch {/* no-throw */}
253
+ }
254
+ bs._setDebugReady(true);
255
+ initializedRef.current = true;
256
+ console.warn('[ScaleBunDebugRoot] ✅ Journey system initialized');
257
+ } catch (e) {
258
+ console.warn('[ScaleBunDebugRoot] ❌ Initialization error:', e?.message);
259
+ }
260
+ }, 200);
261
+ return () => {
262
+ clearTimeout(timer);
263
+ };
264
+ }, [navigationRef]);
265
+
266
+ /**
267
+ * RN-11 — CAPTURE A FRAME WHEN THE UI CHANGES SHAPE.
268
+ *
269
+ * A declared state used to have no picture of its own. Nothing captured on `setUiState`, so a
270
+ * state's visual existed only if a screenshot happened to be taken for another reason — a
271
+ * navigation, a timer, or the interaction capture that fires AFTER the touch and therefore
272
+ * photographs the outcome. A drawer could be recorded as open with no frame showing it open,
273
+ * or with the frame of the screen that replaced it.
274
+ *
275
+ * The native capture reasons are NAVIGATION, MANUAL, INTERACTION and TIMER; none of them means
276
+ * "the UI changed shape". This routes through the MANUAL path, which is the only one reachable
277
+ * from JS. A dedicated native reason would let the backend tell a state capture from a
278
+ * developer-requested one, and that is a native change on both platforms — worth doing, not
279
+ * doable from here.
280
+ *
281
+ * RATE LIMITED, and the limit is not politeness. A screenshot is expensive, and while
282
+ * `uiState` already collapses redundant declarations, a genuinely oscillating dimension (a
283
+ * spinner toggling, a live-updating badge) would otherwise capture continuously. One frame per
284
+ * second is far finer than any state a person can perceive changing and far coarser than a
285
+ * render loop.
286
+ *
287
+ * Requests only; never awaits and never throws. If the session is not recording,
288
+ * `captureManualFrame` declines and the state simply has no frame — which is the honest
289
+ * outcome and is exactly what the analytics-only lane already reports elsewhere.
290
+ */
291
+ useEffect(() => {
292
+ let lastCaptureTs = 0;
293
+ const {
294
+ onUiStateChange
295
+ } = require('./uiState');
296
+ const unsubscribe = onUiStateChange(() => {
297
+ const now = Date.now();
298
+ if (now - lastCaptureTs < UI_STATE_CAPTURE_MIN_INTERVAL_MS) return;
299
+ lastCaptureTs = now;
300
+ try {
301
+ const {
302
+ SessionManager
303
+ } = require('../session/SessionManager');
304
+ const sm = SessionManager.getExistingInstance();
305
+ if (sm && typeof sm.captureManualFrame === 'function') {
306
+ /* Fire and forget: the tap that follows must not wait on a screenshot. */
307
+ void sm.captureManualFrame();
308
+ }
309
+ } catch {/* no-throw */}
310
+ });
311
+ return unsubscribe;
312
+ }, []);
313
+
314
+ // ─── Native Interaction Listener ────────────────────────────────────
315
+ // Receives high-confidence ScaleBunNativeInteraction events from the native tracker
316
+ // and forwards them to SessionManager as USER_ACTION events.
317
+ const lastNativeTouchTsRef = useRef(0);
318
+ const nativeTrackingConfirmedRef = useRef(false);
319
+ const touchStartRef = useRef(null);
320
+ const interactionStartsRef = useRef([]);
321
+ const pendingJsEmitsRef = useRef(new Map());
322
+ useEffect(() => {
323
+ let subscription = null;
324
+ try {
325
+ const nativeModule = NativeModules.ReplaySdk;
326
+ if (!nativeModule) return;
327
+ const emitter = new NativeEventEmitter(nativeModule);
328
+ subscription = emitter.addListener('ScaleBunNativeInteraction', event => {
329
+ try {
330
+ // Record timestamp to suppress duplicate JS touch events
331
+ lastNativeTouchTsRef.current = Date.now();
332
+ nativeTrackingConfirmedRef.current = true;
333
+ const nativeOccurredAt = typeof event.occurredAt === 'number' ? event.occurredAt : (typeof event.timestamp === 'number' ? event.timestamp : Date.now()) - (typeof event.durationMs === 'number' ? event.durationMs : 0);
334
+ /**
335
+ * RN-6 — correlate, then CONSUME. See interactionProtocol.ts for why
336
+ * the join is on time at all, and why a refusal is the important part.
337
+ *
338
+ * Pruning first is part of the correctness, not tidying: a start older
339
+ * than the tolerance can never be paired, but while it sits in the list
340
+ * it is still counted by the ambiguity test, so a stale entry can turn a
341
+ * clear pairing into a refusal — and the list only grows.
342
+ */
343
+ pruneInteractionStarts(interactionStartsRef.current, nativeOccurredAt);
344
+ const correlation = correlateInteraction(interactionStartsRef.current, nativeOccurredAt);
345
+ const start = correlation.start;
346
+ /**
347
+ * ONE-TO-ONE. Without removing the matched start, a second native event
348
+ * arriving within the window claims the SAME js evidence, so one tap's
349
+ * target is stamped onto another tap that never had one — a duplicate
350
+ * identity that reads as two genuine interactions on the same control.
351
+ */
352
+ if (correlation.index >= 0) {
353
+ interactionStartsRef.current.splice(correlation.index, 1);
354
+ }
355
+
356
+ // Cancel only this physical touch's fallback. A single timer used to cancel a
357
+ // previous rapid tap and silently lose it on devices without native tracking.
358
+ if (start) {
359
+ const pending = pendingJsEmitsRef.current.get(start.interactionId);
360
+ if (pending !== undefined) clearTimeout(pending);
361
+ pendingJsEmitsRef.current.delete(start.interactionId);
362
+ }
363
+ const {
364
+ SessionManager
365
+ } = require('../session/SessionManager');
366
+ const sm = SessionManager.getExistingInstance();
367
+ if (!sm || typeof sm.onGestureDetected !== 'function') return;
368
+
369
+ // Diagnostic: capture window dims at event time. Pure
370
+ // observability — NOT used for normalization (native path
371
+ // already produced normalizedX/Y against the screenshot view).
372
+ let _diagWinW;
373
+ let _diagWinH;
374
+ try {
375
+ const {
376
+ Dimensions
377
+ } = require('react-native');
378
+ const _d = Dimensions.get('window');
379
+ _diagWinW = _d.width;
380
+ _diagWinH = _d.height;
381
+ } catch {/* no-throw */}
382
+ sm.onGestureDetected(event.gestureType || 'tap', {
383
+ interactionId: event.interactionId || start?.interactionId || generateInteractionId(),
384
+ interactionProtocol: event.interactionProtocol || INTERACTION_PROTOCOL_VERSION,
385
+ occurredAt: nativeOccurredAt,
386
+ /**
387
+ * RN-6 — THESE FIVE FIELDS ARE THE ONLY ONES THE JOIN CARRIES, AND
388
+ * THEREFORE THE ONLY ONES A BAD JOIN CAN FALSIFY.
389
+ *
390
+ * Coordinates below come from native and are right regardless. So a
391
+ * mispairing does not produce visibly broken data: it produces heat
392
+ * in the correct position attributed to the wrong control, in the
393
+ * wrong UI state, on the wrong screen. Every field is individually
394
+ * well-formed and nothing downstream can tell.
395
+ *
396
+ * When the correlation is not 'exact' they are left UNDEFINED rather
397
+ * than filled from a best guess. An interaction with no target is
398
+ * honest and visibly incomplete — the accounting lane can count it as
399
+ * unplaceable and say why. An interaction with the WRONG target is
400
+ * indistinguishable from a correct one and silently corrupts every
401
+ * aggregate it enters. `null` is not `0`, and a guess is not a
402
+ * measurement.
403
+ */
404
+ ui: start?.ui,
405
+ stateStatus: start?.stateStatus ?? 'not_captured',
406
+ target: start?.target,
407
+ targetId: start?.targetId,
408
+ targetSource: start?.targetSource,
409
+ screenName: start?.screenName,
410
+ screenSource: start?.screenSource ?? 'none',
411
+ targetRect: start?.targetRect,
412
+ /**
413
+ * RN-15 — WHERE IN THE CONTROL, computed where both halves exist: the
414
+ * point comes from the native event and the rect was measured at
415
+ * finger-down, in the same capture base. Pairing them here rather than
416
+ * downstream stops anything later reaching for a different rect.
417
+ */
418
+ ...(() => {
419
+ const lp = localPoint(start?.targetRect ?? null, event.normalizedX, event.normalizedY);
420
+ return lp ? {
421
+ localU: lp.u,
422
+ localV: lp.v
423
+ } : {};
424
+ })(),
425
+ /**
426
+ * SCROLL — the JS wrapper's offset when the app uses it, else the NATIVE
427
+ * probe's innermost scroll container (read at ACTION_DOWN, no wrapper
428
+ * needed). The native half comes from this native event, not from the
429
+ * JS join, so it is valid whatever the correlation verdict: it is a
430
+ * measurement of where the finger landed, not an attribution.
431
+ */
432
+ ...scrollFields(start, event),
433
+ itemKey: start?.itemKey,
434
+ itemIndex: start?.itemIndex,
435
+ /**
436
+ * The join's own verdict, shipped with the row so it is auditable
437
+ * rather than a claim made in a comment. 'ambiguous' and 'none' are
438
+ * deliberately distinguished: 'none' means the JS handler never fired
439
+ * (a real capture gap on this platform), 'ambiguous' means it fired
440
+ * more than once too close together to attribute. Those have
441
+ * different fixes, and collapsing them would hide which one is
442
+ * actually happening in production.
443
+ */
444
+ correlation: correlation.outcome,
445
+ correlationDeltaMs: correlation.deltaMs,
446
+ correlationRunnerUpDeltaMs: correlation.runnerUpDeltaMs,
447
+ emitAutomaticAnalytics: start?.emitAutomaticAnalytics ?? captureAutomaticInteractions,
448
+ x: event.rawX,
449
+ y: event.rawY,
450
+ // Use the actual native end coords when present, not the down
451
+ // coords. The previous endX/endY fell back to rawX/rawY which
452
+ // collapsed swipes to a zero-length segment in the dashboard.
453
+ endX: event.rawEndX ?? event.rawX,
454
+ endY: event.rawEndY ?? event.rawY,
455
+ normalizedX: event.normalizedX,
456
+ normalizedY: event.normalizedY,
457
+ normalizedEndX: event.normalizedEndX,
458
+ normalizedEndY: event.normalizedEndY,
459
+ viewportWidth: event.screenshotWidthPx,
460
+ viewportHeight: event.screenshotHeightPx,
461
+ durationMs: event.durationMs,
462
+ confidence: 'high',
463
+ coordinateSpace: event.coordinateSpace,
464
+ safeAreaTop: event.safeAreaTop,
465
+ platform: event.platform,
466
+ source: 'native-interaction-tracker',
467
+ windowWidth: _diagWinW,
468
+ windowHeight: _diagWinH
469
+ });
470
+ } catch {/* no-throw */}
471
+ });
472
+ } catch {/* no-throw */}
473
+ return () => {
474
+ try {
475
+ subscription?.remove();
476
+ } catch {/* no-throw */}
477
+ for (const timer of pendingJsEmitsRef.current.values()) clearTimeout(timer);
478
+ pendingJsEmitsRef.current.clear();
479
+ };
480
+ }, [captureAutomaticInteractions]);
481
+
482
+ // ─── Touch Tracking State ───────────────────────────────────────────
483
+
484
+ // On-screen rect of the root view — the EXACT view the native screenshot
485
+ // captures. Normalizing pageX/pageY against this rect makes JS-fallback taps
486
+ // share the screenshot's coordinate origin (fixes vertical status-bar offset).
487
+ const rootRectRef = useRef(null);
488
+ const measureRoot = () => {
489
+ try {
490
+ const node = rootRef.current;
491
+ if (node && typeof node.measureInWindow === 'function') {
492
+ node.measureInWindow((x, y, w, h) => {
493
+ if (w > 0 && h > 0) rootRectRef.current = {
494
+ x,
495
+ y,
496
+ w,
497
+ h
498
+ };
499
+ });
500
+ }
501
+ } catch {/* no-throw */}
502
+ };
503
+
504
+ // Eagerly measure the root view on mount AND periodically until we have a
505
+ // non-null reading. measureInWindow is async, so the first tap can otherwise
506
+ // fall back to Dimensions.get('window') — which excludes system insets and
507
+ // is ~status-bar fraction smaller than the screenshot region on Android,
508
+ // pushing the marker upward. Polling stops as soon as the first measurement
509
+ // succeeds; subsequent taps re-measure inline.
510
+ useEffect(() => {
511
+ let attempts = 0;
512
+ const tryMeasure = () => {
513
+ measureRoot();
514
+ attempts += 1;
515
+ if (rootRectRef.current || attempts >= 10) return;
516
+ setTimeout(tryMeasure, 100);
517
+ };
518
+ const t = setTimeout(tryMeasure, 50);
519
+ return () => clearTimeout(t);
520
+ }, []);
521
+
522
+ // Gesture capture handlers — feed into SessionManager (unified capture)
523
+ const handleTouchStart = e => {
524
+ try {
525
+ const touch = e.nativeEvent;
526
+ const target = resolveTouchTarget(e);
527
+ let ui;
528
+ let screenName;
529
+ /**
530
+ * RN-8 — WHERE the screen name came from, carried with the interaction.
531
+ *
532
+ * Production shows 13.8% of Android interactions with a screen and 0.5% on iOS, and
533
+ * those figures cannot distinguish three unrelated causes: nothing was instrumented,
534
+ * a manual beacon was instrumented but never reached interactions, or auto-detection
535
+ * ran and failed. Each has a different owner. Recording the source turns one
536
+ * unactionable percentage into three answerable ones.
537
+ */
538
+ let screenSource = 'none';
539
+ let stateInstrumented = false;
540
+ try {
541
+ const {
542
+ uiStateSignature,
543
+ uiStateInstrumented
544
+ } = require('./uiState');
545
+ ui = uiStateSignature();
546
+ stateInstrumented = uiStateInstrumented();
547
+ } catch {/* no-throw */}
548
+ try {
549
+ const {
550
+ AutoScreenDetector
551
+ } = require('../navigation/AutoScreenDetector');
552
+ const detector = AutoScreenDetector.getInstance();
553
+ screenName = detector.getCurrentScreen() || undefined;
554
+ /* Read from the SAME call site as the name, so the two can never describe
555
+ different moments — the detector is polled and its answer can change between
556
+ two reads a few milliseconds apart. */
557
+ screenSource = screenName ? detector.getCurrentScreenSource() : 'none';
558
+ } catch {/* no-throw */}
559
+ const start = {
560
+ interactionId: generateInteractionId(),
561
+ occurredAt: Date.now(),
562
+ x: touch.pageX,
563
+ y: touch.pageY,
564
+ locationX: touch.locationX,
565
+ locationY: touch.locationY,
566
+ /**
567
+ * RN-1 + RN-2 — the identity that is persisted, and it is now code-derived.
568
+ *
569
+ * `describeTouchTarget` returns `testID` -> structural path -> component name,
570
+ * and never a caption or an accessibilityLabel. Before RN-2 it preferred free
571
+ * text, so this line was writing user data ("Pay EGP 1,442", an order row
572
+ * labelled with an email address, a contact's name) into the analytics store —
573
+ * and, because `target` is an aggregation key, splitting one button into one
574
+ * bucket per person at the same time.
575
+ *
576
+ * `targetId` used to be `target?.testID` alone, which is `undefined` in the
577
+ * overwhelming majority of apps — no testIDs authored — so the field the
578
+ * backend keys on was empty almost always. It now falls back to the structural
579
+ * path, with `targetSource` recording WHICH it got.
580
+ */
581
+ target: describeTouchTarget(target),
582
+ targetId: targetIdentity(target).id,
583
+ /**
584
+ * WHICH KIND of identity this is, because they are not equally trustworthy: a
585
+ * `testID` is a promise from the app's authors that this control is this
586
+ * control; a `path` is an inference that breaks when the tree is refactored.
587
+ * Without this the accounting lane cannot distinguish "the control had no
588
+ * identity" from "the identity is a structural guess", and both would render
589
+ * as an equally confident target.
590
+ */
591
+ targetSource: targetIdentity(target).source,
592
+ /* RN-4 — row identity from the app's own keyExtractor; see touchTarget.ts. */
593
+ itemKey: target?.itemKey,
594
+ itemIndex: target?.itemIndex,
595
+ /**
596
+ * RN-13 — the control's rectangle, so `heat ∈ target` is decidable.
597
+ *
598
+ * Read SYNCHRONOUSLY here, in the same tick as the touch, and normalized against
599
+ * the SAME measured root the tap's own coordinates use. Both halves matter:
600
+ *
601
+ * - A callback measurement (`measureInWindow`) would resolve after this handler
602
+ * returns, so the rect attached to a tap could be the previous tap's, with
603
+ * nothing afterwards able to tell. `targetGeometry` refuses to guess: it reads
604
+ * now or reports null.
605
+ * - Normalizing against a window size instead of the root view is off by the
606
+ * status bar on most devices, which would read as "the heat is just outside
607
+ * the button" everywhere rather than as a measurement bug.
608
+ *
609
+ * `measureRoot()` is called first because the cached root rect is populated
610
+ * asynchronously at mount; without it the first taps of a session normalize
611
+ * against nothing and get a null rect for a reason that has nothing to do with
612
+ * the control.
613
+ */
614
+ /**
615
+ * RN-3 — WHERE IN THE CONTENT, not just where on the glass.
616
+ *
617
+ * Two taps at the same screen coordinate one viewport apart are two different
618
+ * controls. Without an offset they merge into one hotspot, and the heatmap shows
619
+ * heavy engagement at a position where, in content terms, nothing in particular
620
+ * is. The offset is also a CACHE dimension — two scroll states of one route must
621
+ * not share a backdrop — so its absence corrupts the picture as well as the count.
622
+ *
623
+ * `ancestors` is innermost-first, so this takes the NEAREST scroller that has a
624
+ * recorded position: a tap inside a horizontal carousel belongs to the carousel's
625
+ * content, not to how far the page behind it had scrolled.
626
+ *
627
+ * Null when no ancestor has one — never zero. Zero is a real scroll position (the
628
+ * top of a list), and reporting it for "unknown" would place every unmeasured tap
629
+ * at the top of its content, indistinguishable from a genuine tap there.
630
+ */
631
+ ...(() => {
632
+ const hit = nearestRecordedOffset((target?.ancestors ?? []).map(n => nativeTagOf(n)));
633
+ return hit ? {
634
+ scrollX: hit.x,
635
+ scrollY: hit.y,
636
+ scrollSource: 'wrapper'
637
+ } : {
638
+ scrollSource: 'none'
639
+ };
640
+ })(),
641
+ targetRect: (() => {
642
+ measureRoot();
643
+ const root = rootRectRef.current;
644
+ /* null -> undefined: the context field is optional, and an explicit null would
645
+ serialise as a JSON null claiming "measured, and it was nothing". */
646
+ return normalizeRect(readRectSync(target?.node), root ? {
647
+ w: root.w,
648
+ h: root.h
649
+ } : null) ?? undefined;
650
+ })(),
651
+ screenName,
652
+ screenSource,
653
+ ui,
654
+ stateStatus: ui ? 'captured_nonempty' : stateInstrumented ? 'captured_empty' : 'not_instrumented',
655
+ emitAutomaticAnalytics: captureAutomaticInteractions
656
+ };
657
+ touchStartRef.current = start;
658
+ interactionStartsRef.current = interactionStartsRef.current.filter(candidate => start.occurredAt - candidate.occurredAt < 5000).concat(start).slice(-8);
659
+ } catch {/* no-throw */}
660
+ };
661
+ const handleTouchEnd = e => {
662
+ try {
663
+ const touch = e.nativeEvent;
664
+
665
+ // Classify gesture based on touch movement and duration
666
+ const start = touchStartRef.current;
667
+ let gestureType = 'tap';
668
+
669
+ // Capture window dimensions at touch time for accurate normalization
670
+ let vpW = 0;
671
+ let vpH = 0;
672
+ let screenW = 0;
673
+ let screenH = 0;
674
+ let statusBarHeight = 0;
675
+ try {
676
+ const {
677
+ Dimensions,
678
+ StatusBar,
679
+ Platform
680
+ } = require('react-native');
681
+ const dims = Dimensions.get('window');
682
+ vpW = dims.width;
683
+ vpH = dims.height;
684
+ const scr = Dimensions.get('screen');
685
+ screenW = scr.width;
686
+ screenH = scr.height;
687
+ statusBarHeight = Platform.OS === 'android' ? StatusBar.currentHeight || 0 : 0;
688
+ } catch {/* no-throw */}
689
+
690
+ // Re-measure the root view so its on-screen rect is fresh for this tap.
691
+ measureRoot();
692
+ const rootRect = rootRectRef.current;
693
+
694
+ // WHAT was tapped, resolved from the React fiber on the touch event. Without this the tap
695
+ // carries only coordinates, so every tap in the app groups into one row per gesture type.
696
+ // Defensive by construction — returns undefined rather than throwing (see touchTarget.ts).
697
+ /**
698
+ * Resolved ONCE, so `target` and `targetId` cannot disagree about the same tap.
699
+ *
700
+ * The previous shape called `resolveTouchTarget(e)` inline for `target` while
701
+ * `targetId` came only from `start` — so on the fallback path (no JS start, or a
702
+ * refused correlation) the tap carried a description with NO id, and the two fields
703
+ * were computed from different sources. Anything joining on `targetId` therefore
704
+ * saw nothing for a tap that visibly had a target.
705
+ */
706
+ const freshTarget = start ? null : resolveTouchTarget(e);
707
+ const tapped = start?.target ?? describeTouchTarget(freshTarget);
708
+ const identity = start ? {
709
+ id: start.targetId,
710
+ source: start.targetSource
711
+ } : targetIdentity(freshTarget);
712
+ const gestureDetails = {
713
+ target: tapped,
714
+ interactionId: start?.interactionId ?? generateInteractionId(),
715
+ interactionProtocol: INTERACTION_PROTOCOL_VERSION,
716
+ occurredAt: start?.occurredAt ?? Date.now(),
717
+ ui: start?.ui,
718
+ stateStatus: start?.stateStatus ?? 'not_captured',
719
+ targetId: identity.id,
720
+ targetSource: identity.source,
721
+ screenName: start?.screenName,
722
+ screenSource: start?.screenSource ?? 'none',
723
+ targetRect: start?.targetRect,
724
+ scrollX: start?.scrollX,
725
+ scrollY: start?.scrollY,
726
+ scrollSource: start?.scrollSource ?? 'none',
727
+ itemKey: start?.itemKey,
728
+ itemIndex: start?.itemIndex,
729
+ emitAutomaticAnalytics: start?.emitAutomaticAnalytics ?? captureAutomaticInteractions,
730
+ x: start?.x ?? touch.pageX,
731
+ y: start?.y ?? touch.pageY,
732
+ pageX: start?.x ?? touch.pageX,
733
+ pageY: start?.y ?? touch.pageY,
734
+ locationX: start?.locationX ?? touch.locationX,
735
+ locationY: start?.locationY ?? touch.locationY,
736
+ viewportWidth: vpW > 0 ? vpW : undefined,
737
+ viewportHeight: vpH > 0 ? vpH : undefined
738
+ };
739
+
740
+ // Normalize against the measured root-view SIZE — the exact view the
741
+ // screenshot captures (Android: R.id.content, iOS: window root).
742
+ // pageX/pageY are ALREADY relative to the RN root view, which shares the
743
+ // screenshot's origin. Do NOT subtract rootRect.x/y: on Android
744
+ // measureInWindow returns rootRect.y = statusBarHeight, so subtracting it
745
+ // double-counts the status bar and pushes every marker upward.
746
+ if (rootRect && rootRect.w > 0 && rootRect.h > 0) {
747
+ const nx = Math.max(0, Math.min(1, (start?.x ?? touch.pageX) / rootRect.w));
748
+ const ny = Math.max(0, Math.min(1, (start?.y ?? touch.pageY) / rootRect.h));
749
+ gestureDetails.normalizedX = nx;
750
+ gestureDetails.normalizedY = ny;
751
+ /**
752
+ * RN-15 on the JS-fallback lane.
753
+ *
754
+ * Computed here rather than in the literal above because that is where nx/ny first
755
+ * exist. The rect is the SAME one the native lane uses, so one physical tap yields
756
+ * the same local position whichever lane captured it — two lanes disagreeing about
757
+ * where in a control a tap landed would be worse than neither reporting it.
758
+ */
759
+ const lp = localPoint(start?.targetRect ?? null, nx, ny);
760
+ if (lp) {
761
+ gestureDetails.localU = lp.u;
762
+ gestureDetails.localV = lp.v;
763
+ }
764
+ gestureDetails.normalizedPrecomputed = true;
765
+ gestureDetails.viewportWidth = rootRect.w;
766
+ gestureDetails.viewportHeight = rootRect.h;
767
+ gestureDetails.coordinateSpace = 'js-root-measured';
768
+ gestureDetails.rootViewTop = rootRect.y;
769
+ gestureDetails.rootViewLeft = rootRect.x;
770
+ }
771
+ gestureDetails.statusBarHeight = statusBarHeight;
772
+ gestureDetails.screenWidth = screenW;
773
+ gestureDetails.screenHeight = screenH;
774
+ // Diagnostic-only: carry root-view & window dims through to the unified
775
+ // [TapDiag] log. NOT used for normalization decisions in SessionManager.
776
+ gestureDetails.windowWidth = vpW > 0 ? vpW : undefined;
777
+ gestureDetails.windowHeight = vpH > 0 ? vpH : undefined;
778
+ if (rootRect && rootRect.w > 0 && rootRect.h > 0) {
779
+ gestureDetails.rootViewWidth = rootRect.w;
780
+ gestureDetails.rootViewHeight = rootRect.h;
781
+ }
782
+ gestureDetails.platform = gestureDetails.platform ?? require('react-native').Platform.OS;
783
+ try {
784
+ const {
785
+ logger
786
+ } = require('../../core/logger/internalLogger');
787
+ logger?.debug?.(`[TapAccuracy] platform=js-path raw=(${Math.round(touch.pageX)},${Math.round(touch.pageY)}) ` + `normalized=(${gestureDetails.normalizedX?.toFixed?.(4)},${gestureDetails.normalizedY?.toFixed?.(4)}) ` + `rootRect=(${rootRect ? `${Math.round(rootRect.x)},${Math.round(rootRect.y)},${Math.round(rootRect.w)}x${Math.round(rootRect.h)}` : 'none'}) ` + `statusBar=${statusBarHeight} window=(${vpW}x${vpH}) screen=(${screenW}x${screenH}) space=js-root-measured`);
788
+ } catch {/* no-throw */}
789
+ if (start) {
790
+ const dx = touch.pageX - start.x;
791
+ const dy = touch.pageY - start.y;
792
+ const dist = Math.sqrt(dx * dx + dy * dy);
793
+ const duration = Date.now() - start.occurredAt;
794
+ gestureDetails.duration = duration;
795
+ if (dist >= 15) {
796
+ // Movement gesture: swipe or scroll
797
+ gestureDetails.endX = touch.pageX;
798
+ gestureDetails.endY = touch.pageY;
799
+ if (Math.abs(dy) > Math.abs(dx)) {
800
+ gestureType = 'scroll';
801
+ gestureDetails.direction = dy > 0 ? 'down' : 'up';
802
+ gestureDetails.distance = Math.abs(dy);
803
+ } else {
804
+ gestureType = 'swipe';
805
+ gestureDetails.direction = dx > 0 ? 'right' : 'left';
806
+ gestureDetails.distance = Math.abs(dx);
807
+ }
808
+ } else if (duration > 500) {
809
+ gestureType = 'long_press';
810
+ }
811
+ }
812
+
813
+ // Feed the Engage gesture detector (rage_tap / dead_tap) — only committed
814
+ // taps, not swipes/scrolls/long-presses. Pure JS, cross-platform; emits the
815
+ // unified `$gesture` signal the engage trigger engine listens for.
816
+ if (gestureType === 'tap') {
817
+ try {
818
+ const {
819
+ gestureTriggerDetector
820
+ } = require('../engage/gestureTriggerDetector');
821
+ gestureTriggerDetector.recordTap({
822
+ x: start?.x ?? touch.pageX,
823
+ y: start?.y ?? touch.pageY,
824
+ hasTarget: !!(start?.targetId || start?.target),
825
+ screen: start?.screenName
826
+ });
827
+ } catch {/* no-throw */}
828
+ }
829
+
830
+ // Emit gesture event to SessionManager for desktop-controlled recording.
831
+ // Native tracker produces high-confidence coords; JS is a fallback only.
832
+ //
833
+ // Race condition fix: the JS onTouchEnd fires BEFORE the native event
834
+ // crosses the bridge. Without guarding, the pipeline's 100ms dedup window
835
+ // drops the native event and keeps the JS-estimated coords (which can be
836
+ // wrong when measureInWindow hasn't resolved or the base differs from the
837
+ // screenshot capture view). Three-tier suppression:
838
+ // 1. Native confirmed active → skip JS entirely (native handles all touches)
839
+ // 2. Native event within 300ms → skip (existing dedup)
840
+ // 3. First touch (native not yet confirmed) → defer 600ms to let native arrive
841
+ const sinceNative = Date.now() - lastNativeTouchTsRef.current;
842
+ if (nativeTrackingConfirmedRef.current) {
843
+ // Native tracker is active — skip JS path entirely
844
+ } else if (sinceNative <= 300) {
845
+ // Native event arrived recently — skip (dedup)
846
+ } else {
847
+ // Native not yet confirmed — defer emission to give native time to arrive.
848
+ // If native fires during the delay, it cancels this pending emit.
849
+ const capturedType = gestureType;
850
+ const capturedDetails = {
851
+ ...gestureDetails
852
+ };
853
+ const interactionId = capturedDetails.interactionId;
854
+ const timer = setTimeout(() => {
855
+ pendingJsEmitsRef.current.delete(interactionId);
856
+ if (nativeTrackingConfirmedRef.current) return;
857
+ try {
858
+ const {
859
+ SessionManager
860
+ } = require('../session/SessionManager');
861
+ const sm = SessionManager.getExistingInstance();
862
+ if (sm && sm.onGestureDetected) {
863
+ sm.onGestureDetected(capturedType, {
864
+ ...capturedDetails,
865
+ confidence: 'medium',
866
+ source: 'js-touch-handler'
867
+ });
868
+ }
869
+ } catch {/* no-throw */}
870
+ // 600ms, was 200ms. The race this defer exists for happens on the FIRST tap of a
871
+ // mount: native isn't confirmed yet, JS emitted at 200ms, then the first native
872
+ // event crossed the bridge at ~300-400ms — recording the same tap TWICE, with the
873
+ // JS copy missing normalizedX/Y whenever the async root-view measure hadn't
874
+ // resolved (an interaction the heatmap cannot place). QA hit exactly this pair.
875
+ // The wider defer lets the first native event cancel the JS emission instead; on
876
+ // devices with no native tracker at all it merely delays a background emission,
877
+ // which nothing user-visible waits on.
878
+ }, 600);
879
+ pendingJsEmitsRef.current.set(interactionId, timer);
880
+ }
881
+ touchStartRef.current = null;
882
+ } catch {/* no-throw */}
883
+ };
884
+ return /*#__PURE__*/_jsx(View, {
885
+ ref: rootRef,
886
+ style: styles.root,
887
+ collapsable: false,
888
+ onStartShouldSetResponderCapture: () => {
889
+ return false; // Don't consume — just observe
890
+ },
891
+ onMoveShouldSetResponderCapture: () => false,
892
+ onTouchStart: handleTouchStart,
893
+ onTouchEnd: handleTouchEnd,
894
+ children: /*#__PURE__*/_jsx(JourneyContext.Provider, {
895
+ value: managerRef.current,
896
+ children: children
897
+ })
898
+ });
899
+ }
900
+
901
+ // ─── ScaleBunScreen Beacon ───────────────────────────────────────────────────────
902
+
903
+ /**
904
+ * Screen beacon component — registers the current screen name.
905
+ * Place it at the top of each screen component:
906
+ * <ScaleBunScreen name="HomeScreen" />
907
+ */
908
+ export function ScaleBunScreen({
909
+ name
910
+ }) {
911
+ useScaleBunScreen(name);
912
+ return null; // Invisible beacon
913
+ }
914
+
915
+ /**
916
+ * Screen beacon hook — registers the current screen name.
917
+ * Use in screen components:
918
+ * useScaleBunScreen("HomeScreen");
919
+ */
920
+ export function useScaleBunScreen(name) {
921
+ const manager = useContext(JourneyContext);
922
+ useEffect(() => {
923
+ // === CANONICAL SCREEN_VIEW SOURCE ===
924
+ // This hook is the SOLE source of SCREEN_VIEW session events.
925
+ // SessionManager.onScreenChange() emits the canonical SCREEN_VIEW
926
+ // event into the unified pipeline. No other code path emits SCREEN_VIEW.
927
+ //
928
+ // JourneyManager.nav.setScreen() is NOT a session event — it only
929
+ // records the current screen name for gesture step labeling context.
930
+
931
+ // Feed SessionManager first (canonical SCREEN_VIEW)
932
+ try {
933
+ const {
934
+ SessionManager
935
+ } = require('../session/SessionManager');
936
+ const sm = SessionManager.getExistingInstance();
937
+ // Always call onScreenChange — SessionManager.onScreenChange() has
938
+ // its own `if (!this.active) return` guard that correctly evaluates
939
+ // at call time. We must NOT gate here because useEffect only runs at
940
+ // mount/name-change, not when isActive changes. Gating here causes
941
+ // Record-after-mount to permanently miss screen registrations.
942
+ if (sm && sm.onScreenChange) {
943
+ sm.onScreenChange(name);
944
+ }
945
+ } catch {/* no-throw */}
946
+
947
+ /**
948
+ * RN-8 — TELL THE DETECTOR TOO, because interactions read their screen from IT.
949
+ *
950
+ * This hook fed SessionManager, PerformanceFeature, ProfilerFeature and JourneyManager
951
+ * — four consumers — and never `AutoScreenDetector`. But `handleTouchStart` resolves an
952
+ * interaction's `screenName` from `AutoScreenDetector.getCurrentScreen()`, so a
953
+ * manually-instrumented app produced perfectly-named SCREEN_VIEW events while every TAP
954
+ * carried no screen at all. `setManualScreen` existed and was called only by tests.
955
+ *
956
+ * That is the whole story for apps the auto-hook cannot help: expo-router, a custom
957
+ * navigator, anything not `@react-navigation/native`. The documented manual escape hatch
958
+ * did not reach the one field that partitions every heatmap.
959
+ *
960
+ * Requires the last-writer-wins fix in `_currentScreen()` to be useful: under the
961
+ * previous rule a manual screen was readable for only 2000 ms, so wiring this alone
962
+ * would have handed interactions a name that expired before most taps happened.
963
+ */
964
+ try {
965
+ const {
966
+ AutoScreenDetector
967
+ } = require('../navigation/AutoScreenDetector');
968
+ AutoScreenDetector.getInstance().setManualScreen(name);
969
+ } catch {/* no-throw */}
970
+
971
+ // Feed PerformanceFeature (screen context for perf metrics)
972
+ // NOTE: Only sets screen identity. Does NOT call markScreenLoadStart/End.
973
+ // AutoScreenLoadCollector handles timing independently via rAF + InteractionManager.
974
+ try {
975
+ const bs = getBootstrap();
976
+ const perfFeature = bs?.getPerformanceFeature?.();
977
+ if (perfFeature) {
978
+ perfFeature.setCurrentScreen(name);
979
+ }
980
+ } catch {/* no-throw */}
981
+
982
+ // Feed ProfilerFeature (screen context for profiler samples)
983
+ // This sets screenKey on all subsequent profiler samples,
984
+ // enabling screen visit extraction and per-screen correlation on desktop.
985
+ try {
986
+ const bs = getBootstrap();
987
+ const profilerFeature = bs?.getProfilerFeature?.();
988
+ if (profilerFeature) {
989
+ profilerFeature.setCurrentScreen(name);
990
+ }
991
+ } catch {/* no-throw */}
992
+
993
+ // NOTE: Auto-capture for performance preview is triggered from
994
+ // PerformanceFeature.autoScreenLoadCollector callback, NOT here.
995
+ // useScaleBunScreen uses developer-specified names (e.g. 'HomeScreen')
996
+ // while perf metrics use React Navigation route names (e.g. 'HomeMain').
997
+ // Triggering capture here would save screenshots under the wrong key.
998
+
999
+ // Feed JourneyManager (gesture context only, NOT a session event)
1000
+ if (!manager) {
1001
+ try {
1002
+ const bs = getBootstrap();
1003
+ const transport = bs?._getTransport();
1004
+ if (transport && bs?._isJourneyEnabled()) {
1005
+ const JM = require('./journeyManager').JourneyManager;
1006
+ const fallback = JM.getInstance(transport);
1007
+ fallback.nav.setScreen(name);
1008
+ }
1009
+ } catch {/* no-throw */}
1010
+ return;
1011
+ }
1012
+ try {
1013
+ manager.nav.setScreen(name);
1014
+ } catch {/* no-throw */}
1015
+ }, [name, manager]);
1016
+ }
1017
+
1018
+ // ─── Styles ─────────────────────────────────────────────────────────────────
1019
+ // IMPORTANT: Do NOT use StyleSheet.create() here.
1020
+ // In RN 0.84 bridgeless mode, StyleSheet.create() calls
1021
+ // PixelRatio.roundToNearestPixel() which accesses DeviceInfo TurboModule.
1022
+ // At module-load time, the TurboModule runtime isn't ready yet → crash.
1023
+ // Plain objects work identically for simple styles.
1024
+
1025
+ const styles = {
1026
+ root: {
1027
+ flex: 1
1028
+ }
1029
+ };
1030
+ //# sourceMappingURL=ScaleBunDebugRoot.js.map