@scalebun/react-native 1.0.2 → 1.0.4

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 (1694) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +65 -65
  3. package/android/build.gradle +86 -86
  4. package/android/consumer-rules.pro +28 -28
  5. package/android/src/main/AndroidManifest.xml +14 -14
  6. package/android/src/main/java/com/scalebun/core/crash/CrashStorage.kt +155 -41
  7. package/android/src/main/java/com/scalebun/core/crash/NativeCrashHandler.kt +93 -79
  8. package/android/src/main/java/com/scalebun/core/performance/ANRWatchdog.kt +100 -100
  9. package/android/src/main/java/com/scalebun/core/performance/AppStartCollector.kt +132 -132
  10. package/android/src/main/java/com/scalebun/core/performance/FrameMetricsCollector.kt +230 -230
  11. package/android/src/main/java/com/scalebun/core/performance/PerformanceCore.kt +165 -165
  12. package/android/src/main/java/com/scalebun/profiler/ProfilerModule.kt +398 -398
  13. package/android/src/main/java/com/scalebun/profiler/ProfilerPackage.kt +24 -24
  14. package/android/src/main/java/com/scalebun/profiler/collectors/CpuCollector.kt +161 -161
  15. package/android/src/main/java/com/scalebun/profiler/collectors/IncidentDetector.kt +223 -223
  16. package/android/src/main/java/com/scalebun/profiler/collectors/MemoryCollector.kt +157 -157
  17. package/android/src/main/java/com/scalebun/profiler/collectors/RenderCollector.kt +194 -194
  18. package/android/src/main/java/com/scalebun/profiler/collectors/SamplerScheduler.kt +218 -218
  19. package/android/src/main/java/com/scalebun/profiler/collectors/ThreadCollector.kt +142 -142
  20. package/android/src/main/java/com/scalebun/replaysdk/ReplaySdkModule.kt +982 -966
  21. package/android/src/main/java/com/scalebun/replaysdk/ReplaySdkPackage.kt +24 -24
  22. package/android/src/main/java/com/scalebun/replaysdk/capture/CaptureReason.kt +47 -47
  23. package/android/src/main/java/com/scalebun/replaysdk/capture/FrameCaptureManager.kt +508 -508
  24. package/android/src/main/java/com/scalebun/replaysdk/capture/FrameCaptureScheduler.kt +187 -187
  25. package/android/src/main/java/com/scalebun/replaysdk/capture/UiStabilityDetector.kt +214 -214
  26. package/android/src/main/java/com/scalebun/replaysdk/core/ReplayConfig.kt +144 -144
  27. package/android/src/main/java/com/scalebun/replaysdk/core/ReplayLogger.kt +31 -31
  28. package/android/src/main/java/com/scalebun/replaysdk/core/SessionIdGenerator.kt +15 -15
  29. package/android/src/main/java/com/scalebun/replaysdk/models/ReplayModels.kt +88 -88
  30. package/android/src/main/java/com/scalebun/replaysdk/outbox/NativeOutbox.kt +541 -541
  31. package/android/src/main/java/com/scalebun/replaysdk/outbox/OutboxUploader.kt +407 -407
  32. package/android/src/main/java/com/scalebun/replaysdk/privacy/PrivacyMaskProcessor.kt +126 -126
  33. package/android/src/main/java/com/scalebun/replaysdk/session/SessionManager.kt +281 -281
  34. package/android/src/main/java/com/scalebun/replaysdk/storage/ReplayStorage.kt +136 -136
  35. package/android/src/main/java/com/scalebun/replaysdk/timeline/TimelineCollector.kt +28 -28
  36. package/android/src/main/java/com/scalebun/replaysdk/tracking/InteractionTracker.kt +419 -419
  37. package/android/src/main/java/com/scalebun/replaysdk/tracking/ScreenTracker.kt +20 -20
  38. package/android/src/main/java/com/scalebun/replaysdk/transport/ReplayTransport.kt +99 -99
  39. package/android/src/main/java/com/scalebun/replaysdk/voice/VoiceRecorder.kt +121 -121
  40. package/android/src/main/java/com/scalebun/replaysdk/voice/VoiceTranscriber.kt +170 -104
  41. package/android/src/main/java/com/scalebun/rn/ScaleBunPackage.kt +113 -113
  42. package/android/src/main/java/com/scalebun/rn/crash/ScaleBunCrashModule.kt +164 -100
  43. package/android/src/main/java/com/scalebun/rn/crash/ScaleBunCrashPackage.kt +22 -22
  44. package/android/src/main/java/com/scalebun/rn/engage/ScaleBunEngageModule.kt +579 -579
  45. package/android/src/main/java/com/scalebun/rn/engage/ScaleBunEngagePackage.kt +22 -22
  46. package/android/src/main/java/com/scalebun/rn/engage/ScaleBunNotificationPresenter.kt +110 -110
  47. package/android/src/main/java/com/scalebun/rn/ota/BundleDownloader.kt +170 -0
  48. package/android/src/main/java/com/scalebun/rn/ota/ScaleBunOtaModule.kt +284 -136
  49. package/android/src/main/java/com/scalebun/rn/ota/SlotManager.kt +311 -285
  50. package/android/src/main/java/com/scalebun/rn/performance/PerformanceModule.kt +206 -206
  51. package/android/src/main/java/com/scalebun/rn/referrer/ScaleBunInstallReferrerModule.kt +77 -77
  52. package/android/src/main/java/com/scalebun/rn/storage/ScaleBunStorageModule.kt +68 -68
  53. package/android/src/main/java/com/scalebun/storage/KvFileStore.kt +174 -174
  54. package/android/src/newarch/java/com/scalebun/profiler/ProfilerSpec.kt +12 -12
  55. package/android/src/newarch/java/com/scalebun/replaysdk/ReplaySdkSpec.kt +12 -12
  56. package/android/src/newarch/java/com/scalebun/rn/crash/ScaleBunCrashSpec.kt +15 -15
  57. package/android/src/newarch/java/com/scalebun/rn/ota/ScaleBunOtaSpec.kt +16 -16
  58. package/android/src/newarch/java/com/scalebun/rn/performance/PerformanceSpec.kt +12 -12
  59. package/android/src/newarch/java/com/scalebun/rn/referrer/ScaleBunInstallReferrerSpec.kt +14 -14
  60. package/android/src/newarch/java/com/scalebun/rn/storage/ScaleBunStorageSpec.kt +16 -16
  61. package/android/src/oldarch/java/com/scalebun/profiler/ProfilerSpec.kt +34 -34
  62. package/android/src/oldarch/java/com/scalebun/replaysdk/ReplaySdkSpec.kt +76 -76
  63. package/android/src/oldarch/java/com/scalebun/rn/crash/ScaleBunCrashSpec.kt +21 -21
  64. package/android/src/oldarch/java/com/scalebun/rn/ota/ScaleBunOtaSpec.kt +31 -25
  65. package/android/src/oldarch/java/com/scalebun/rn/performance/PerformanceSpec.kt +27 -27
  66. package/android/src/oldarch/java/com/scalebun/rn/referrer/ScaleBunInstallReferrerSpec.kt +18 -18
  67. package/android/src/oldarch/java/com/scalebun/rn/storage/ScaleBunStorageSpec.kt +26 -26
  68. package/bin/lib/iosCodemod.js +266 -266
  69. package/bin/scalebun.js +640 -640
  70. package/ios/Capture/InteractionTracker.swift +191 -191
  71. package/ios/Capture/PrivacyMaskProcessor.swift +158 -158
  72. package/ios/Capture/ScreenshotCaptureManager.swift +315 -315
  73. package/ios/Capture/WindowResolver.swift +63 -63
  74. package/ios/Core/ReplayConfig.swift +100 -100
  75. package/ios/Core/ReplayLogger.swift +22 -22
  76. package/ios/Core/SessionIdGenerator.swift +18 -18
  77. package/ios/Crash/ScaleBunCrashBridge.mm +69 -63
  78. package/ios/Crash/ScaleBunCrashHandler.swift +80 -67
  79. package/ios/Crash/ScaleBunCrashModule.swift +83 -69
  80. package/ios/Crash/ScaleBunCrashSignalBridge.h +49 -18
  81. package/ios/Crash/ScaleBunCrashSignalBridge.m +296 -131
  82. package/ios/Crash/ScaleBunCrashSignalStress.c +137 -0
  83. package/ios/Crash/ScaleBunCrashStorage.swift +121 -46
  84. package/ios/Engage/ScaleBunEngageBridge.m +32 -32
  85. package/ios/Engage/ScaleBunEngageModule.swift +250 -250
  86. package/ios/Engage/ScaleBunPushNotificationCenter.swift +185 -185
  87. package/ios/Ota/BundleDownloader.swift +182 -0
  88. package/ios/Ota/OtaSlotManager.swift +290 -264
  89. package/ios/Ota/ScaleBunOtaBridge.mm +77 -68
  90. package/ios/Ota/ScaleBunOtaEventsModule.swift +61 -0
  91. package/ios/Ota/ScaleBunOtaModule.swift +176 -123
  92. package/ios/Outbox/NativeOutbox.swift +598 -598
  93. package/ios/Outbox/OutboxUploader.swift +431 -431
  94. package/ios/Performance/ScaleBunPerformanceBridge.m +32 -32
  95. package/ios/Performance/ScaleBunPerformanceModule.swift +290 -290
  96. package/ios/PrivacyInfo.xcprivacy +97 -97
  97. package/ios/Profiler/ScaleBunProfilerBridge.m +55 -55
  98. package/ios/Profiler/ScaleBunProfilerModule.swift +972 -972
  99. package/ios/ReplaySdk-Bridging-Header.h +2 -2
  100. package/ios/ReplaySdk.swift +608 -608
  101. package/ios/ReplaySdkBridge.m +94 -94
  102. package/ios/Session/SessionManager.swift +203 -203
  103. package/ios/Skan/ScaleBunSkanBridge.m +14 -14
  104. package/ios/Skan/ScaleBunSkanModule.swift +61 -61
  105. package/ios/Storage/ReplayStorage.swift +61 -61
  106. package/ios/Storage/ScaleBunKvFileStore.swift +125 -125
  107. package/ios/Storage/ScaleBunStorageBridge.mm +72 -72
  108. package/ios/Storage/ScaleBunStorageModule.swift +57 -57
  109. package/ios/Transport/ReplayTransport.swift +70 -70
  110. package/ios/VoiceRecorder.swift +145 -145
  111. package/lib/commonjs/analytics/EventTracker.js +64 -36
  112. package/lib/commonjs/analytics/EventTracker.js.map +1 -1
  113. package/lib/commonjs/analytics/automaticEvents.js +7 -7
  114. package/lib/commonjs/analytics/automaticEvents.js.map +1 -1
  115. package/lib/commonjs/analytics/batching.js +24 -24
  116. package/lib/commonjs/analytics/batching.js.map +1 -1
  117. package/lib/commonjs/analytics/eventLane.js +13 -13
  118. package/lib/commonjs/analytics/eventLane.js.map +1 -1
  119. package/lib/commonjs/bootstrap/FeatureRegistry.js +17 -17
  120. package/lib/commonjs/bootstrap/FeatureRegistry.js.map +1 -1
  121. package/lib/commonjs/bootstrap/SDKBootstrapper.js +83 -56
  122. package/lib/commonjs/bootstrap/SDKBootstrapper.js.map +1 -1
  123. package/lib/commonjs/bucketing/fnv1a32.js +10 -10
  124. package/lib/commonjs/bucketing/fnv1a32.js.map +1 -1
  125. package/lib/commonjs/compat/codepush.js +6 -6
  126. package/lib/commonjs/compat/codepush.js.map +1 -1
  127. package/lib/commonjs/config/ConfigManager.js +20 -20
  128. package/lib/commonjs/config/ConfigManager.js.map +1 -1
  129. package/lib/commonjs/config/configTypes.js.map +1 -1
  130. package/lib/commonjs/core/architecture.js +23 -23
  131. package/lib/commonjs/core/architecture.js.map +1 -1
  132. package/lib/commonjs/core/clock/now.js +2 -2
  133. package/lib/commonjs/core/clock/now.js.map +1 -1
  134. package/lib/commonjs/core/config/defaults.js.map +1 -1
  135. package/lib/commonjs/core/config/schema.js +112 -104
  136. package/lib/commonjs/core/config/schema.js.map +1 -1
  137. package/lib/commonjs/core/constants/endpoints.js +7 -7
  138. package/lib/commonjs/core/constants/endpoints.js.map +1 -1
  139. package/lib/commonjs/core/constants/timings.js +5 -5
  140. package/lib/commonjs/core/constants/timings.js.map +1 -1
  141. package/lib/commonjs/core/constants/version.js +4 -4
  142. package/lib/commonjs/core/constants/version.js.map +1 -1
  143. package/lib/commonjs/core/context/app.js.map +1 -1
  144. package/lib/commonjs/core/context/device.js +130 -0
  145. package/lib/commonjs/core/context/device.js.map +1 -1
  146. package/lib/commonjs/core/context/session.js.map +1 -1
  147. package/lib/commonjs/core/context/user.js.map +1 -1
  148. package/lib/commonjs/core/contracts/IFeature.js.map +1 -1
  149. package/lib/commonjs/core/di/container.js.map +1 -1
  150. package/lib/commonjs/core/encoding/base64.js +9 -9
  151. package/lib/commonjs/core/encoding/base64.js.map +1 -1
  152. package/lib/commonjs/core/id/deviceId.js +4 -4
  153. package/lib/commonjs/core/id/deviceId.js.map +1 -1
  154. package/lib/commonjs/core/id/sessionId.js.map +1 -1
  155. package/lib/commonjs/core/lifecycle/appLifecycle.js.map +1 -1
  156. package/lib/commonjs/core/lifecycle/crashSafe.js +3 -3
  157. package/lib/commonjs/core/lifecycle/crashSafe.js.map +1 -1
  158. package/lib/commonjs/core/logger/errorClassification.js +30 -30
  159. package/lib/commonjs/core/logger/errorClassification.js.map +1 -1
  160. package/lib/commonjs/core/logger/internalLogger.js.map +1 -1
  161. package/lib/commonjs/core/logger/levels.js.map +1 -1
  162. package/lib/commonjs/crypto/hmacSha256.js +6 -6
  163. package/lib/commonjs/crypto/hmacSha256.js.map +1 -1
  164. package/lib/commonjs/debug/bootstrap.js +26 -26
  165. package/lib/commonjs/debug/bootstrap.js.map +1 -1
  166. package/lib/commonjs/debug/commands.js +10 -10
  167. package/lib/commonjs/debug/commands.js.map +1 -1
  168. package/lib/commonjs/debug/configBuilder.js +6 -6
  169. package/lib/commonjs/debug/configBuilder.js.map +1 -1
  170. package/lib/commonjs/debug/exportBridge.js +17 -17
  171. package/lib/commonjs/debug/exportBridge.js.map +1 -1
  172. package/lib/commonjs/debug/hostResolver.js +10 -10
  173. package/lib/commonjs/debug/hostResolver.js.map +1 -1
  174. package/lib/commonjs/debug/index.js.map +1 -1
  175. package/lib/commonjs/debug/metrics.js.map +1 -1
  176. package/lib/commonjs/debug/perf.js +11 -11
  177. package/lib/commonjs/debug/perf.js.map +1 -1
  178. package/lib/commonjs/debug/perfWiring.js +10 -10
  179. package/lib/commonjs/debug/perfWiring.js.map +1 -1
  180. package/lib/commonjs/debug/protocol.js.map +1 -1
  181. package/lib/commonjs/debug/redaction.js +26 -26
  182. package/lib/commonjs/debug/redaction.js.map +1 -1
  183. package/lib/commonjs/debug/replayWiring.js +13 -12
  184. package/lib/commonjs/debug/replayWiring.js.map +1 -1
  185. package/lib/commonjs/debug/screenTracking.js +7 -7
  186. package/lib/commonjs/debug/screenTracking.js.map +1 -1
  187. package/lib/commonjs/debug/sessionWiring.js +8 -8
  188. package/lib/commonjs/debug/sessionWiring.js.map +1 -1
  189. package/lib/commonjs/debug/stream.js +26 -26
  190. package/lib/commonjs/debug/stream.js.map +1 -1
  191. package/lib/commonjs/debug/transport.js +24 -24
  192. package/lib/commonjs/debug/transport.js.map +1 -1
  193. package/lib/commonjs/features/bugreport/BugReportFeature.js +112 -0
  194. package/lib/commonjs/features/bugreport/BugReportFeature.js.map +1 -0
  195. package/lib/commonjs/features/bugreport/buildPayload.js +97 -0
  196. package/lib/commonjs/features/bugreport/buildPayload.js.map +1 -0
  197. package/lib/commonjs/features/bugreport/index.js.map +1 -1
  198. package/lib/commonjs/features/crash/CrashFeature.js +27 -9
  199. package/lib/commonjs/features/crash/CrashFeature.js.map +1 -1
  200. package/lib/commonjs/features/crash/CrashReporter.js +53 -29
  201. package/lib/commonjs/features/crash/CrashReporter.js.map +1 -1
  202. package/lib/commonjs/features/crash/NativeCrashFeature.js +7 -7
  203. package/lib/commonjs/features/crash/NativeCrashFeature.js.map +1 -1
  204. package/lib/commonjs/features/crash/capture.js +27 -9
  205. package/lib/commonjs/features/crash/capture.js.map +1 -1
  206. package/lib/commonjs/features/crash/globalHandler.js +11 -11
  207. package/lib/commonjs/features/crash/globalHandler.js.map +1 -1
  208. package/lib/commonjs/features/crash/index.js.map +1 -1
  209. package/lib/commonjs/features/crash/nativeCrashBridge.js +179 -44
  210. package/lib/commonjs/features/crash/nativeCrashBridge.js.map +1 -1
  211. package/lib/commonjs/features/crash/rejectionHandler.js +123 -0
  212. package/lib/commonjs/features/crash/rejectionHandler.js.map +1 -0
  213. package/lib/commonjs/features/engage/EngageAnchor.js +3 -3
  214. package/lib/commonjs/features/engage/EngageAnchor.js.map +1 -1
  215. package/lib/commonjs/features/engage/EngageArchetypeRenderers.js +19 -19
  216. package/lib/commonjs/features/engage/EngageArchetypeRenderers.js.map +1 -1
  217. package/lib/commonjs/features/engage/EngageInAppView.js +35 -35
  218. package/lib/commonjs/features/engage/EngageInAppView.js.map +1 -1
  219. package/lib/commonjs/features/engage/EngageInlinePlacement.js +7 -7
  220. package/lib/commonjs/features/engage/EngageInlinePlacement.js.map +1 -1
  221. package/lib/commonjs/features/engage/EngagePromptProvider.js +124 -88
  222. package/lib/commonjs/features/engage/EngagePromptProvider.js.map +1 -1
  223. package/lib/commonjs/features/engage/EngagePromptView.js +65 -32
  224. package/lib/commonjs/features/engage/EngagePromptView.js.map +1 -1
  225. package/lib/commonjs/features/engage/EngageTransport.js +79 -79
  226. package/lib/commonjs/features/engage/EngageTransport.js.map +1 -1
  227. package/lib/commonjs/features/engage/EngageVariantContent.js +10 -10
  228. package/lib/commonjs/features/engage/EngageVariantContent.js.map +1 -1
  229. package/lib/commonjs/features/engage/__test-support__/reactNativeStub.js +7 -7
  230. package/lib/commonjs/features/engage/__test-support__/reactNativeStub.js.map +1 -1
  231. package/lib/commonjs/features/engage/attachmentCapture.js +12 -12
  232. package/lib/commonjs/features/engage/attachmentCapture.js.map +1 -1
  233. package/lib/commonjs/features/engage/captureVoiceAttachment.js +20 -20
  234. package/lib/commonjs/features/engage/captureVoiceAttachment.js.map +1 -1
  235. package/lib/commonjs/features/engage/engageCoachmarkTour.js +4 -4
  236. package/lib/commonjs/features/engage/engageCoachmarkTour.js.map +1 -1
  237. package/lib/commonjs/features/engage/engageGameLogic.js.map +1 -1
  238. package/lib/commonjs/features/engage/engageMediaSizing.js +15 -15
  239. package/lib/commonjs/features/engage/engageMediaSizing.js.map +1 -1
  240. package/lib/commonjs/features/engage/engageMultiStepSheet.js +6 -6
  241. package/lib/commonjs/features/engage/engageMultiStepSheet.js.map +1 -1
  242. package/lib/commonjs/features/engage/engageOutcome.js +6 -6
  243. package/lib/commonjs/features/engage/engageOutcome.js.map +1 -1
  244. package/lib/commonjs/features/engage/engagePushTokenBridge.js +20 -20
  245. package/lib/commonjs/features/engage/engagePushTokenBridge.js.map +1 -1
  246. package/lib/commonjs/features/engage/engageShakeBridge.js +16 -16
  247. package/lib/commonjs/features/engage/engageShakeBridge.js.map +1 -1
  248. package/lib/commonjs/features/engage/engageSignals.js.map +1 -1
  249. package/lib/commonjs/features/engage/engageStoreReviewBridge.js +19 -19
  250. package/lib/commonjs/features/engage/engageStoreReviewBridge.js.map +1 -1
  251. package/lib/commonjs/features/engage/engageTestSeenStore.js +29 -29
  252. package/lib/commonjs/features/engage/engageTestSeenStore.js.map +1 -1
  253. package/lib/commonjs/features/engage/engageThrottle.js +117 -86
  254. package/lib/commonjs/features/engage/engageThrottle.js.map +1 -1
  255. package/lib/commonjs/features/engage/engageTriggerEngine.js +17 -7
  256. package/lib/commonjs/features/engage/engageTriggerEngine.js.map +1 -1
  257. package/lib/commonjs/features/engage/engageTypes.js +33 -33
  258. package/lib/commonjs/features/engage/engageTypes.js.map +1 -1
  259. package/lib/commonjs/features/engage/engageVariantResolver.js +13 -13
  260. package/lib/commonjs/features/engage/engageVariantResolver.js.map +1 -1
  261. package/lib/commonjs/features/engage/engageWindowInsets.js +10 -10
  262. package/lib/commonjs/features/engage/engageWindowInsets.js.map +1 -1
  263. package/lib/commonjs/features/engage/gestureTriggerDetector.js.map +1 -1
  264. package/lib/commonjs/features/engage/transcription/TranscriptionProvider.js +16 -16
  265. package/lib/commonjs/features/engage/transcription/TranscriptionProvider.js.map +1 -1
  266. package/lib/commonjs/features/install-referrer/installReferrer.js +26 -26
  267. package/lib/commonjs/features/install-referrer/installReferrer.js.map +1 -1
  268. package/lib/commonjs/features/journey/ScaleBunDebugRoot.js +30 -29
  269. package/lib/commonjs/features/journey/ScaleBunDebugRoot.js.map +1 -1
  270. package/lib/commonjs/features/journey/ScaleBunFlatList.js +15 -15
  271. package/lib/commonjs/features/journey/ScaleBunFlatList.js.map +1 -1
  272. package/lib/commonjs/features/journey/ScaleBunImpression.js +22 -22
  273. package/lib/commonjs/features/journey/ScaleBunImpression.js.map +1 -1
  274. package/lib/commonjs/features/journey/ScaleBunScrollView.js +20 -20
  275. package/lib/commonjs/features/journey/ScaleBunScrollView.js.map +1 -1
  276. package/lib/commonjs/features/journey/ScaleBunSectionList.js +15 -15
  277. package/lib/commonjs/features/journey/ScaleBunSectionList.js.map +1 -1
  278. package/lib/commonjs/features/journey/calibrationContext.js +12 -12
  279. package/lib/commonjs/features/journey/calibrationContext.js.map +1 -1
  280. package/lib/commonjs/features/journey/gestureBuffer.js +9 -9
  281. package/lib/commonjs/features/journey/gestureBuffer.js.map +1 -1
  282. package/lib/commonjs/features/journey/gestureDetector.js +10 -10
  283. package/lib/commonjs/features/journey/gestureDetector.js.map +1 -1
  284. package/lib/commonjs/features/journey/impression.js +18 -18
  285. package/lib/commonjs/features/journey/impression.js.map +1 -1
  286. package/lib/commonjs/features/journey/journeyManager.js +6 -6
  287. package/lib/commonjs/features/journey/journeyManager.js.map +1 -1
  288. package/lib/commonjs/features/journey/journeyTypes.js +5 -5
  289. package/lib/commonjs/features/journey/journeyTypes.js.map +1 -1
  290. package/lib/commonjs/features/journey/navDetector.js +7 -7
  291. package/lib/commonjs/features/journey/navDetector.js.map +1 -1
  292. package/lib/commonjs/features/journey/screenshotHelper.js +7 -7
  293. package/lib/commonjs/features/journey/screenshotHelper.js.map +1 -1
  294. package/lib/commonjs/features/journey/targetRegistry.js +17 -17
  295. package/lib/commonjs/features/journey/targetRegistry.js.map +1 -1
  296. package/lib/commonjs/features/journey/touchTarget.js +29 -29
  297. package/lib/commonjs/features/journey/touchTarget.js.map +1 -1
  298. package/lib/commonjs/features/navigation/AutoScreenDetector.js +114 -71
  299. package/lib/commonjs/features/navigation/AutoScreenDetector.js.map +1 -1
  300. package/lib/commonjs/features/network/NetworkFeature.js +23 -23
  301. package/lib/commonjs/features/network/NetworkFeature.js.map +1 -1
  302. package/lib/commonjs/features/network/index.js +5 -5
  303. package/lib/commonjs/features/network/index.js.map +1 -1
  304. package/lib/commonjs/features/ota/OtaEventEmitter.js +21 -21
  305. package/lib/commonjs/features/ota/OtaEventEmitter.js.map +1 -1
  306. package/lib/commonjs/features/ota/OtaOrchestrator.js +595 -42
  307. package/lib/commonjs/features/ota/OtaOrchestrator.js.map +1 -1
  308. package/lib/commonjs/features/ota/OtaTypes.js.map +1 -1
  309. package/lib/commonjs/features/ota/deviceAttributes.js +48 -0
  310. package/lib/commonjs/features/ota/deviceAttributes.js.map +1 -0
  311. package/lib/commonjs/features/ota/environment.js +172 -0
  312. package/lib/commonjs/features/ota/environment.js.map +1 -0
  313. package/lib/commonjs/features/ota/geoCountry.js +93 -0
  314. package/lib/commonjs/features/ota/geoCountry.js.map +1 -0
  315. package/lib/commonjs/features/ota/retry.js +96 -0
  316. package/lib/commonjs/features/ota/retry.js.map +1 -0
  317. package/lib/commonjs/features/ota/signature.js +115 -0
  318. package/lib/commonjs/features/ota/signature.js.map +1 -0
  319. package/lib/commonjs/features/ota/useOtaUpdate.js +18 -15
  320. package/lib/commonjs/features/ota/useOtaUpdate.js.map +1 -1
  321. package/lib/commonjs/features/performance/PerformanceFeature.js +49 -35
  322. package/lib/commonjs/features/performance/PerformanceFeature.js.map +1 -1
  323. package/lib/commonjs/features/performance/collectors/AppLaunchCollector.js +13 -13
  324. package/lib/commonjs/features/performance/collectors/AppLaunchCollector.js.map +1 -1
  325. package/lib/commonjs/features/performance/collectors/AutoScreenLoadCollector.js +32 -32
  326. package/lib/commonjs/features/performance/collectors/AutoScreenLoadCollector.js.map +1 -1
  327. package/lib/commonjs/features/performance/collectors/CustomTraceCollector.js +13 -13
  328. package/lib/commonjs/features/performance/collectors/CustomTraceCollector.js.map +1 -1
  329. package/lib/commonjs/features/performance/collectors/FrameMetricsCollector.js +80 -20
  330. package/lib/commonjs/features/performance/collectors/FrameMetricsCollector.js.map +1 -1
  331. package/lib/commonjs/features/performance/collectors/JsStallCollector.js +12 -12
  332. package/lib/commonjs/features/performance/collectors/JsStallCollector.js.map +1 -1
  333. package/lib/commonjs/features/performance/collectors/NetworkPerfCollector.js +10 -10
  334. package/lib/commonjs/features/performance/collectors/NetworkPerfCollector.js.map +1 -1
  335. package/lib/commonjs/features/performance/collectors/ScreenLoadCollector.js +11 -11
  336. package/lib/commonjs/features/performance/collectors/ScreenLoadCollector.js.map +1 -1
  337. package/lib/commonjs/features/performance/collectors/UiHangCollector.js +5 -5
  338. package/lib/commonjs/features/performance/collectors/UiHangCollector.js.map +1 -1
  339. package/lib/commonjs/features/performance/config.js +11 -11
  340. package/lib/commonjs/features/performance/config.js.map +1 -1
  341. package/lib/commonjs/features/performance/getNativePerformanceModule.js +11 -11
  342. package/lib/commonjs/features/performance/getNativePerformanceModule.js.map +1 -1
  343. package/lib/commonjs/features/performance/index.js.map +1 -1
  344. package/lib/commonjs/features/performance/metrics/MetricsEngine.js +13 -13
  345. package/lib/commonjs/features/performance/metrics/MetricsEngine.js.map +1 -1
  346. package/lib/commonjs/features/performance/models.js +8 -8
  347. package/lib/commonjs/features/performance/models.js.map +1 -1
  348. package/lib/commonjs/features/performance/transport/PerformanceTransport.js +31 -6
  349. package/lib/commonjs/features/performance/transport/PerformanceTransport.js.map +1 -1
  350. package/lib/commonjs/features/profiler/ProfilerFeature.js +53 -53
  351. package/lib/commonjs/features/profiler/ProfilerFeature.js.map +1 -1
  352. package/lib/commonjs/features/profiler/config.js +15 -15
  353. package/lib/commonjs/features/profiler/config.js.map +1 -1
  354. package/lib/commonjs/features/profiler/contracts.js +22 -22
  355. package/lib/commonjs/features/profiler/contracts.js.map +1 -1
  356. package/lib/commonjs/features/profiler/index.js.map +1 -1
  357. package/lib/commonjs/features/profiler/models.js +44 -44
  358. package/lib/commonjs/features/profiler/models.js.map +1 -1
  359. package/lib/commonjs/features/profiler/transport/ProfilerTransport.js +9 -9
  360. package/lib/commonjs/features/profiler/transport/ProfilerTransport.js.map +1 -1
  361. package/lib/commonjs/features/replay/bridge/adapters/bridgeAdapter.js +17 -17
  362. package/lib/commonjs/features/replay/bridge/adapters/bridgeAdapter.js.map +1 -1
  363. package/lib/commonjs/features/replay/bridge/eventEmitter.js +8 -8
  364. package/lib/commonjs/features/replay/bridge/eventEmitter.js.map +1 -1
  365. package/lib/commonjs/features/replay/bridge/nativeModule.js +20 -20
  366. package/lib/commonjs/features/replay/bridge/nativeModule.js.map +1 -1
  367. package/lib/commonjs/features/replay/core/clock/clock.js +6 -6
  368. package/lib/commonjs/features/replay/core/clock/clock.js.map +1 -1
  369. package/lib/commonjs/features/replay/core/config/defaults.js +2 -2
  370. package/lib/commonjs/features/replay/core/config/defaults.js.map +1 -1
  371. package/lib/commonjs/features/replay/core/config/validator.js +5 -5
  372. package/lib/commonjs/features/replay/core/config/validator.js.map +1 -1
  373. package/lib/commonjs/features/replay/core/env/environmentDetector.js +10 -10
  374. package/lib/commonjs/features/replay/core/env/environmentDetector.js.map +1 -1
  375. package/lib/commonjs/features/replay/core/errors/safeCall.js +4 -4
  376. package/lib/commonjs/features/replay/core/errors/safeCall.js.map +1 -1
  377. package/lib/commonjs/features/replay/core/ids/sessionId.js +5 -5
  378. package/lib/commonjs/features/replay/core/ids/sessionId.js.map +1 -1
  379. package/lib/commonjs/features/replay/core/logger/logger.js +5 -5
  380. package/lib/commonjs/features/replay/core/logger/logger.js.map +1 -1
  381. package/lib/commonjs/features/replay/core/privacy/privacyTypes.js +4 -4
  382. package/lib/commonjs/features/replay/core/privacy/privacyTypes.js.map +1 -1
  383. package/lib/commonjs/features/replay/core/queue/boundedQueue.js +5 -5
  384. package/lib/commonjs/features/replay/core/queue/boundedQueue.js.map +1 -1
  385. package/lib/commonjs/features/replay/integrations/alert/alertInstrumentation.js +59 -59
  386. package/lib/commonjs/features/replay/integrations/alert/alertInstrumentation.js.map +1 -1
  387. package/lib/commonjs/features/replay/integrations/logs/consoleIntegration.js +19 -19
  388. package/lib/commonjs/features/replay/integrations/logs/consoleIntegration.js.map +1 -1
  389. package/lib/commonjs/features/replay/integrations/network/networkAdapter.js +30 -30
  390. package/lib/commonjs/features/replay/integrations/network/networkAdapter.js.map +1 -1
  391. package/lib/commonjs/features/replay/integrations/react-navigation/navigationIntegration.js +19 -19
  392. package/lib/commonjs/features/replay/integrations/react-navigation/navigationIntegration.js.map +1 -1
  393. package/lib/commonjs/features/replay/integrations/touch/ReplayRoot.js +16 -16
  394. package/lib/commonjs/features/replay/integrations/touch/ReplayRoot.js.map +1 -1
  395. package/lib/commonjs/features/replay/pipeline/batching/batchManager.js +5 -5
  396. package/lib/commonjs/features/replay/pipeline/batching/batchManager.js.map +1 -1
  397. package/lib/commonjs/features/replay/pipeline/envelope/envelopeBuilder.js +5 -5
  398. package/lib/commonjs/features/replay/pipeline/envelope/envelopeBuilder.js.map +1 -1
  399. package/lib/commonjs/features/replay/pipeline/retry/retryPolicy.js +4 -4
  400. package/lib/commonjs/features/replay/pipeline/retry/retryPolicy.js.map +1 -1
  401. package/lib/commonjs/features/replay/pipeline/transport/transportTypes.js +7 -7
  402. package/lib/commonjs/features/replay/pipeline/transport/transportTypes.js.map +1 -1
  403. package/lib/commonjs/features/replay/public/api.js +21 -21
  404. package/lib/commonjs/features/replay/public/api.js.map +1 -1
  405. package/lib/commonjs/features/replay/public/enums.js +5 -5
  406. package/lib/commonjs/features/replay/public/enums.js.map +1 -1
  407. package/lib/commonjs/features/replay/public/types.js.map +1 -1
  408. package/lib/commonjs/features/replay/replay/breadcrumbs/breadcrumbCollector.js +5 -5
  409. package/lib/commonjs/features/replay/replay/breadcrumbs/breadcrumbCollector.js.map +1 -1
  410. package/lib/commonjs/features/replay/replay/frames/frameModels.js +4 -4
  411. package/lib/commonjs/features/replay/replay/frames/frameModels.js.map +1 -1
  412. package/lib/commonjs/features/replay/replay/session/sessionOrchestrator.js +10 -10
  413. package/lib/commonjs/features/replay/replay/session/sessionOrchestrator.js.map +1 -1
  414. package/lib/commonjs/features/replay/replay/timeline/timelineModels.js +4 -4
  415. package/lib/commonjs/features/replay/replay/timeline/timelineModels.js.map +1 -1
  416. package/lib/commonjs/features/replay/transport/BackendReplayTransport.js +13 -13
  417. package/lib/commonjs/features/replay/transport/BackendReplayTransport.js.map +1 -1
  418. package/lib/commonjs/features/replay/transport/CompositeReplayTransport.js +8 -8
  419. package/lib/commonjs/features/replay/transport/CompositeReplayTransport.js.map +1 -1
  420. package/lib/commonjs/features/replay/transport/DesktopReplayTransport.js +14 -14
  421. package/lib/commonjs/features/replay/transport/DesktopReplayTransport.js.map +1 -1
  422. package/lib/commonjs/features/replay/transport/ReplayTransport.js.map +1 -1
  423. package/lib/commonjs/features/session/BackendSessionAdapter.js +486 -164
  424. package/lib/commonjs/features/session/BackendSessionAdapter.js.map +1 -1
  425. package/lib/commonjs/features/session/DesktopSessionTransport.js +14 -14
  426. package/lib/commonjs/features/session/DesktopSessionTransport.js.map +1 -1
  427. package/lib/commonjs/features/session/JourneyEventPipeline.js +20 -19
  428. package/lib/commonjs/features/session/JourneyEventPipeline.js.map +1 -1
  429. package/lib/commonjs/features/session/ReplayCaptureManager.js +169 -123
  430. package/lib/commonjs/features/session/ReplayCaptureManager.js.map +1 -1
  431. package/lib/commonjs/features/session/ScrollTracker.js +17 -17
  432. package/lib/commonjs/features/session/ScrollTracker.js.map +1 -1
  433. package/lib/commonjs/features/session/SessionManager.js +185 -155
  434. package/lib/commonjs/features/session/SessionManager.js.map +1 -1
  435. package/lib/commonjs/features/session/SyncDecisionEngine.js +23 -23
  436. package/lib/commonjs/features/session/SyncDecisionEngine.js.map +1 -1
  437. package/lib/commonjs/features/session/index.js.map +1 -1
  438. package/lib/commonjs/features/session/nativeCapture.js +9 -9
  439. package/lib/commonjs/features/session/nativeCapture.js.map +1 -1
  440. package/lib/commonjs/features/session/outboxFrameCapture.js +18 -17
  441. package/lib/commonjs/features/session/outboxFrameCapture.js.map +1 -1
  442. package/lib/commonjs/features/session/sessionTypes.js +44 -44
  443. package/lib/commonjs/features/session/sessionTypes.js.map +1 -1
  444. package/lib/commonjs/features/skan/skanBridge.js +11 -11
  445. package/lib/commonjs/features/skan/skanBridge.js.map +1 -1
  446. package/lib/commonjs/features/skan/skanConversionManager.js +23 -23
  447. package/lib/commonjs/features/skan/skanConversionManager.js.map +1 -1
  448. package/lib/commonjs/index.js +20 -0
  449. package/lib/commonjs/index.js.map +1 -1
  450. package/lib/commonjs/integrations/fetch/fetchInterceptor.js +21 -21
  451. package/lib/commonjs/integrations/fetch/fetchInterceptor.js.map +1 -1
  452. package/lib/commonjs/integrations/navigation/screenTracker.js.map +1 -1
  453. package/lib/commonjs/integrations/network/bodyCapture.js +69 -69
  454. package/lib/commonjs/integrations/network/bodyCapture.js.map +1 -1
  455. package/lib/commonjs/integrations/xhr/xhrInterceptor.js +24 -24
  456. package/lib/commonjs/integrations/xhr/xhrInterceptor.js.map +1 -1
  457. package/lib/commonjs/metro/index.js +37 -37
  458. package/lib/commonjs/metro/index.js.map +1 -1
  459. package/lib/commonjs/metro/optionalDependencyStub.js.map +1 -1
  460. package/lib/commonjs/metro/optionalModules.js +16 -16
  461. package/lib/commonjs/metro/optionalModules.js.map +1 -1
  462. package/lib/commonjs/pipeline/dispatcher/dispatcher.js.map +1 -1
  463. package/lib/commonjs/pipeline/envelope/envelope.js.map +1 -1
  464. package/lib/commonjs/pipeline/envelope/serializer.js.map +1 -1
  465. package/lib/commonjs/pipeline/processors/dedupe.js.map +1 -1
  466. package/lib/commonjs/pipeline/processors/enrich.js.map +1 -1
  467. package/lib/commonjs/pipeline/processors/sampling.js.map +1 -1
  468. package/lib/commonjs/pipeline/processors/sanitize.js.map +1 -1
  469. package/lib/commonjs/pipeline/queue/flushQueue.js +4 -4
  470. package/lib/commonjs/pipeline/queue/flushQueue.js.map +1 -1
  471. package/lib/commonjs/pipeline/queue/memoryQueue.js.map +1 -1
  472. package/lib/commonjs/pipeline/queue/persistentQueue.js +80 -80
  473. package/lib/commonjs/pipeline/queue/persistentQueue.js.map +1 -1
  474. package/lib/commonjs/pipeline/queue/queuePolicy.js.map +1 -1
  475. package/lib/commonjs/pipeline/scheduler/flushScheduler.js.map +1 -1
  476. package/lib/commonjs/pipeline/scheduler/retryPolicy.js +2 -2
  477. package/lib/commonjs/pipeline/scheduler/retryPolicy.js.map +1 -1
  478. package/lib/commonjs/public/ScaleBunErrorBoundary.js +79 -0
  479. package/lib/commonjs/public/ScaleBunErrorBoundary.js.map +1 -0
  480. package/lib/commonjs/public/ScaleBunFacade.js +424 -276
  481. package/lib/commonjs/public/ScaleBunFacade.js.map +1 -1
  482. package/lib/commonjs/public/ScaleBunProvider.js +3 -3
  483. package/lib/commonjs/public/ScaleBunProvider.js.map +1 -1
  484. package/lib/commonjs/public/typedTracker.js +36 -36
  485. package/lib/commonjs/public/typedTracker.js.map +1 -1
  486. package/lib/commonjs/public/types.js.map +1 -1
  487. package/lib/commonjs/push/PushManager.js +21 -21
  488. package/lib/commonjs/push/PushManager.js.map +1 -1
  489. package/lib/commonjs/push/adapters/ManualAdapter.js +14 -14
  490. package/lib/commonjs/push/adapters/ManualAdapter.js.map +1 -1
  491. package/lib/commonjs/push/adapters/NativeBridgeAdapter.js +17 -17
  492. package/lib/commonjs/push/adapters/NativeBridgeAdapter.js.map +1 -1
  493. package/lib/commonjs/push/adapters/NoopAdapter.js +5 -5
  494. package/lib/commonjs/push/adapters/NoopAdapter.js.map +1 -1
  495. package/lib/commonjs/push/adapters/RNFirebaseMessagingAdapter.js +17 -17
  496. package/lib/commonjs/push/adapters/RNFirebaseMessagingAdapter.js.map +1 -1
  497. package/lib/commonjs/push/adapters/loadMessaging.js +12 -12
  498. package/lib/commonjs/push/adapters/loadMessaging.js.map +1 -1
  499. package/lib/commonjs/push/adapters/loadNotifee.js +12 -12
  500. package/lib/commonjs/push/adapters/loadNotifee.js.map +1 -1
  501. package/lib/commonjs/push/adapters/selectAdapter.js +14 -14
  502. package/lib/commonjs/push/adapters/selectAdapter.js.map +1 -1
  503. package/lib/commonjs/push/detect/capabilities.js +19 -19
  504. package/lib/commonjs/push/detect/capabilities.js.map +1 -1
  505. package/lib/commonjs/push/index.js.map +1 -1
  506. package/lib/commonjs/push/native/nativeNotifications.js +32 -32
  507. package/lib/commonjs/push/native/nativeNotifications.js.map +1 -1
  508. package/lib/commonjs/push/types.js.map +1 -1
  509. package/lib/commonjs/specs/NativeReplaySdk.js +18 -18
  510. package/lib/commonjs/specs/NativeReplaySdk.js.map +1 -1
  511. package/lib/commonjs/specs/NativeScaleBunCrash.js +19 -19
  512. package/lib/commonjs/specs/NativeScaleBunCrash.js.map +1 -1
  513. package/lib/commonjs/specs/NativeScaleBunInstallReferrer.js +14 -14
  514. package/lib/commonjs/specs/NativeScaleBunInstallReferrer.js.map +1 -1
  515. package/lib/commonjs/specs/NativeScaleBunOta.js +21 -21
  516. package/lib/commonjs/specs/NativeScaleBunOta.js.map +1 -1
  517. package/lib/commonjs/specs/NativeScaleBunPerformance.js +15 -15
  518. package/lib/commonjs/specs/NativeScaleBunPerformance.js.map +1 -1
  519. package/lib/commonjs/specs/NativeScaleBunProfiler.js +16 -16
  520. package/lib/commonjs/specs/NativeScaleBunProfiler.js.map +1 -1
  521. package/lib/commonjs/specs/NativeScaleBunStorage.js +29 -29
  522. package/lib/commonjs/specs/NativeScaleBunStorage.js.map +1 -1
  523. package/lib/commonjs/storage/StorageBackend.js +83 -83
  524. package/lib/commonjs/storage/StorageBackend.js.map +1 -1
  525. package/lib/commonjs/storage/db/sqlite.js.map +1 -1
  526. package/lib/commonjs/storage/files/fileStore.js.map +1 -1
  527. package/lib/commonjs/transport/auth/sdkSession.js.map +1 -1
  528. package/lib/commonjs/transport/backoff/exponentialJitter.js +2 -2
  529. package/lib/commonjs/transport/backoff/exponentialJitter.js.map +1 -1
  530. package/lib/commonjs/transport/http/endpoints.js.map +1 -1
  531. package/lib/commonjs/transport/http/httpClient.js +3 -3
  532. package/lib/commonjs/transport/http/httpClient.js.map +1 -1
  533. package/lib/commonjs/transport/rateLimit/retryAfter.js.map +1 -1
  534. package/lib/commonjs/transport/signing/requestSigner.js.map +1 -1
  535. package/lib/commonjs/vendor/protocol/index.js +74 -74
  536. package/lib/commonjs/vendor/protocol/index.js.map +1 -1
  537. package/lib/commonjs/vendor/protocol/internal/validation.js +23 -23
  538. package/lib/commonjs/vendor/protocol/internal/validation.js.map +1 -1
  539. package/lib/commonjs/vendor/sdk-contracts/bridge.js.map +1 -1
  540. package/lib/commonjs/vendor/sdk-contracts/config.js.map +1 -1
  541. package/lib/commonjs/vendor/sdk-contracts/events.js.map +1 -1
  542. package/lib/commonjs/vendor/sdk-contracts/features.js.map +1 -1
  543. package/lib/commonjs/vendor/sdk-contracts/index.js.map +1 -1
  544. package/lib/commonjs/vendor/sdk-contracts/platform.js.map +1 -1
  545. package/lib/commonjs/vendor/sdk-contracts/session-boundary.js.map +1 -1
  546. package/lib/commonjs/vendor/sdk-contracts/session.js.map +1 -1
  547. package/lib/commonjs/vendor/vendor.manifest +10 -10
  548. package/lib/module/analytics/EventTracker.js +63 -35
  549. package/lib/module/analytics/EventTracker.js.map +1 -1
  550. package/lib/module/analytics/automaticEvents.js +7 -7
  551. package/lib/module/analytics/automaticEvents.js.map +1 -1
  552. package/lib/module/analytics/batching.js +24 -24
  553. package/lib/module/analytics/batching.js.map +1 -1
  554. package/lib/module/analytics/eventLane.js +13 -13
  555. package/lib/module/analytics/eventLane.js.map +1 -1
  556. package/lib/module/bootstrap/FeatureRegistry.js +17 -17
  557. package/lib/module/bootstrap/FeatureRegistry.js.map +1 -1
  558. package/lib/module/bootstrap/SDKBootstrapper.js +81 -54
  559. package/lib/module/bootstrap/SDKBootstrapper.js.map +1 -1
  560. package/lib/module/bucketing/fnv1a32.js +10 -10
  561. package/lib/module/bucketing/fnv1a32.js.map +1 -1
  562. package/lib/module/compat/codepush.js +6 -6
  563. package/lib/module/compat/codepush.js.map +1 -1
  564. package/lib/module/config/ConfigManager.js +20 -20
  565. package/lib/module/config/ConfigManager.js.map +1 -1
  566. package/lib/module/config/configTypes.js.map +1 -1
  567. package/lib/module/core/architecture.js +23 -23
  568. package/lib/module/core/architecture.js.map +1 -1
  569. package/lib/module/core/clock/now.js +2 -2
  570. package/lib/module/core/clock/now.js.map +1 -1
  571. package/lib/module/core/config/defaults.js.map +1 -1
  572. package/lib/module/core/config/schema.js +112 -104
  573. package/lib/module/core/config/schema.js.map +1 -1
  574. package/lib/module/core/constants/endpoints.js +7 -7
  575. package/lib/module/core/constants/endpoints.js.map +1 -1
  576. package/lib/module/core/constants/timings.js +5 -5
  577. package/lib/module/core/constants/timings.js.map +1 -1
  578. package/lib/module/core/constants/version.js +4 -4
  579. package/lib/module/core/constants/version.js.map +1 -1
  580. package/lib/module/core/context/app.js.map +1 -1
  581. package/lib/module/core/context/device.js +119 -0
  582. package/lib/module/core/context/device.js.map +1 -1
  583. package/lib/module/core/context/session.js.map +1 -1
  584. package/lib/module/core/context/user.js.map +1 -1
  585. package/lib/module/core/contracts/IFeature.js.map +1 -1
  586. package/lib/module/core/di/container.js.map +1 -1
  587. package/lib/module/core/encoding/base64.js +9 -9
  588. package/lib/module/core/encoding/base64.js.map +1 -1
  589. package/lib/module/core/id/deviceId.js +4 -4
  590. package/lib/module/core/id/deviceId.js.map +1 -1
  591. package/lib/module/core/id/sessionId.js.map +1 -1
  592. package/lib/module/core/lifecycle/appLifecycle.js.map +1 -1
  593. package/lib/module/core/lifecycle/crashSafe.js +3 -3
  594. package/lib/module/core/lifecycle/crashSafe.js.map +1 -1
  595. package/lib/module/core/logger/errorClassification.js +30 -30
  596. package/lib/module/core/logger/errorClassification.js.map +1 -1
  597. package/lib/module/core/logger/internalLogger.js.map +1 -1
  598. package/lib/module/core/logger/levels.js.map +1 -1
  599. package/lib/module/crypto/hmacSha256.js +6 -6
  600. package/lib/module/crypto/hmacSha256.js.map +1 -1
  601. package/lib/module/debug/bootstrap.js +26 -26
  602. package/lib/module/debug/bootstrap.js.map +1 -1
  603. package/lib/module/debug/commands.js +10 -10
  604. package/lib/module/debug/commands.js.map +1 -1
  605. package/lib/module/debug/configBuilder.js +6 -6
  606. package/lib/module/debug/configBuilder.js.map +1 -1
  607. package/lib/module/debug/exportBridge.js +17 -17
  608. package/lib/module/debug/exportBridge.js.map +1 -1
  609. package/lib/module/debug/hostResolver.js +10 -10
  610. package/lib/module/debug/hostResolver.js.map +1 -1
  611. package/lib/module/debug/index.js +5 -5
  612. package/lib/module/debug/index.js.map +1 -1
  613. package/lib/module/debug/metrics.js.map +1 -1
  614. package/lib/module/debug/perf.js +11 -11
  615. package/lib/module/debug/perf.js.map +1 -1
  616. package/lib/module/debug/perfWiring.js +10 -10
  617. package/lib/module/debug/perfWiring.js.map +1 -1
  618. package/lib/module/debug/protocol.js +11 -11
  619. package/lib/module/debug/protocol.js.map +1 -1
  620. package/lib/module/debug/redaction.js +26 -26
  621. package/lib/module/debug/redaction.js.map +1 -1
  622. package/lib/module/debug/replayWiring.js +13 -12
  623. package/lib/module/debug/replayWiring.js.map +1 -1
  624. package/lib/module/debug/screenTracking.js +7 -7
  625. package/lib/module/debug/screenTracking.js.map +1 -1
  626. package/lib/module/debug/sessionWiring.js +8 -8
  627. package/lib/module/debug/sessionWiring.js.map +1 -1
  628. package/lib/module/debug/stream.js +26 -26
  629. package/lib/module/debug/stream.js.map +1 -1
  630. package/lib/module/debug/transport.js +24 -24
  631. package/lib/module/debug/transport.js.map +1 -1
  632. package/lib/module/features/bugreport/BugReportFeature.js +105 -0
  633. package/lib/module/features/bugreport/BugReportFeature.js.map +1 -0
  634. package/lib/module/features/bugreport/buildPayload.js +91 -0
  635. package/lib/module/features/bugreport/buildPayload.js.map +1 -0
  636. package/lib/module/features/bugreport/index.js.map +1 -1
  637. package/lib/module/features/crash/CrashFeature.js +27 -9
  638. package/lib/module/features/crash/CrashFeature.js.map +1 -1
  639. package/lib/module/features/crash/CrashReporter.js +53 -29
  640. package/lib/module/features/crash/CrashReporter.js.map +1 -1
  641. package/lib/module/features/crash/NativeCrashFeature.js +7 -7
  642. package/lib/module/features/crash/NativeCrashFeature.js.map +1 -1
  643. package/lib/module/features/crash/capture.js +28 -9
  644. package/lib/module/features/crash/capture.js.map +1 -1
  645. package/lib/module/features/crash/globalHandler.js +11 -11
  646. package/lib/module/features/crash/globalHandler.js.map +1 -1
  647. package/lib/module/features/crash/index.js.map +1 -1
  648. package/lib/module/features/crash/nativeCrashBridge.js +177 -44
  649. package/lib/module/features/crash/nativeCrashBridge.js.map +1 -1
  650. package/lib/module/features/crash/rejectionHandler.js +116 -0
  651. package/lib/module/features/crash/rejectionHandler.js.map +1 -0
  652. package/lib/module/features/engage/EngageAnchor.js +3 -3
  653. package/lib/module/features/engage/EngageAnchor.js.map +1 -1
  654. package/lib/module/features/engage/EngageArchetypeRenderers.js +19 -19
  655. package/lib/module/features/engage/EngageArchetypeRenderers.js.map +1 -1
  656. package/lib/module/features/engage/EngageInAppView.js +35 -35
  657. package/lib/module/features/engage/EngageInAppView.js.map +1 -1
  658. package/lib/module/features/engage/EngageInlinePlacement.js +7 -7
  659. package/lib/module/features/engage/EngageInlinePlacement.js.map +1 -1
  660. package/lib/module/features/engage/EngagePromptProvider.js +124 -88
  661. package/lib/module/features/engage/EngagePromptProvider.js.map +1 -1
  662. package/lib/module/features/engage/EngagePromptView.js +65 -32
  663. package/lib/module/features/engage/EngagePromptView.js.map +1 -1
  664. package/lib/module/features/engage/EngageTransport.js +79 -79
  665. package/lib/module/features/engage/EngageTransport.js.map +1 -1
  666. package/lib/module/features/engage/EngageVariantContent.js +10 -10
  667. package/lib/module/features/engage/EngageVariantContent.js.map +1 -1
  668. package/lib/module/features/engage/__test-support__/reactNativeStub.js +7 -7
  669. package/lib/module/features/engage/__test-support__/reactNativeStub.js.map +1 -1
  670. package/lib/module/features/engage/attachmentCapture.js +12 -12
  671. package/lib/module/features/engage/attachmentCapture.js.map +1 -1
  672. package/lib/module/features/engage/captureVoiceAttachment.js +20 -20
  673. package/lib/module/features/engage/captureVoiceAttachment.js.map +1 -1
  674. package/lib/module/features/engage/engageCoachmarkTour.js +4 -4
  675. package/lib/module/features/engage/engageCoachmarkTour.js.map +1 -1
  676. package/lib/module/features/engage/engageGameLogic.js.map +1 -1
  677. package/lib/module/features/engage/engageMediaSizing.js +15 -15
  678. package/lib/module/features/engage/engageMediaSizing.js.map +1 -1
  679. package/lib/module/features/engage/engageMultiStepSheet.js +6 -6
  680. package/lib/module/features/engage/engageMultiStepSheet.js.map +1 -1
  681. package/lib/module/features/engage/engageOutcome.js +6 -6
  682. package/lib/module/features/engage/engageOutcome.js.map +1 -1
  683. package/lib/module/features/engage/engagePushTokenBridge.js +20 -20
  684. package/lib/module/features/engage/engagePushTokenBridge.js.map +1 -1
  685. package/lib/module/features/engage/engageShakeBridge.js +16 -16
  686. package/lib/module/features/engage/engageShakeBridge.js.map +1 -1
  687. package/lib/module/features/engage/engageSignals.js.map +1 -1
  688. package/lib/module/features/engage/engageStoreReviewBridge.js +19 -19
  689. package/lib/module/features/engage/engageStoreReviewBridge.js.map +1 -1
  690. package/lib/module/features/engage/engageTestSeenStore.js +29 -29
  691. package/lib/module/features/engage/engageTestSeenStore.js.map +1 -1
  692. package/lib/module/features/engage/engageThrottle.js +117 -86
  693. package/lib/module/features/engage/engageThrottle.js.map +1 -1
  694. package/lib/module/features/engage/engageTriggerEngine.js +17 -7
  695. package/lib/module/features/engage/engageTriggerEngine.js.map +1 -1
  696. package/lib/module/features/engage/engageTypes.js +33 -33
  697. package/lib/module/features/engage/engageTypes.js.map +1 -1
  698. package/lib/module/features/engage/engageVariantResolver.js +13 -13
  699. package/lib/module/features/engage/engageVariantResolver.js.map +1 -1
  700. package/lib/module/features/engage/engageWindowInsets.js +10 -10
  701. package/lib/module/features/engage/engageWindowInsets.js.map +1 -1
  702. package/lib/module/features/engage/gestureTriggerDetector.js.map +1 -1
  703. package/lib/module/features/engage/transcription/TranscriptionProvider.js +16 -16
  704. package/lib/module/features/engage/transcription/TranscriptionProvider.js.map +1 -1
  705. package/lib/module/features/install-referrer/installReferrer.js +26 -26
  706. package/lib/module/features/install-referrer/installReferrer.js.map +1 -1
  707. package/lib/module/features/journey/ScaleBunDebugRoot.js +30 -29
  708. package/lib/module/features/journey/ScaleBunDebugRoot.js.map +1 -1
  709. package/lib/module/features/journey/ScaleBunFlatList.js +15 -15
  710. package/lib/module/features/journey/ScaleBunFlatList.js.map +1 -1
  711. package/lib/module/features/journey/ScaleBunImpression.js +22 -22
  712. package/lib/module/features/journey/ScaleBunImpression.js.map +1 -1
  713. package/lib/module/features/journey/ScaleBunScrollView.js +20 -20
  714. package/lib/module/features/journey/ScaleBunScrollView.js.map +1 -1
  715. package/lib/module/features/journey/ScaleBunSectionList.js +15 -15
  716. package/lib/module/features/journey/ScaleBunSectionList.js.map +1 -1
  717. package/lib/module/features/journey/calibrationContext.js +12 -12
  718. package/lib/module/features/journey/calibrationContext.js.map +1 -1
  719. package/lib/module/features/journey/gestureBuffer.js +9 -9
  720. package/lib/module/features/journey/gestureBuffer.js.map +1 -1
  721. package/lib/module/features/journey/gestureDetector.js +10 -10
  722. package/lib/module/features/journey/gestureDetector.js.map +1 -1
  723. package/lib/module/features/journey/impression.js +18 -18
  724. package/lib/module/features/journey/impression.js.map +1 -1
  725. package/lib/module/features/journey/journeyManager.js +6 -6
  726. package/lib/module/features/journey/journeyManager.js.map +1 -1
  727. package/lib/module/features/journey/journeyTypes.js +5 -5
  728. package/lib/module/features/journey/journeyTypes.js.map +1 -1
  729. package/lib/module/features/journey/navDetector.js +7 -7
  730. package/lib/module/features/journey/navDetector.js.map +1 -1
  731. package/lib/module/features/journey/screenshotHelper.js +7 -7
  732. package/lib/module/features/journey/screenshotHelper.js.map +1 -1
  733. package/lib/module/features/journey/targetRegistry.js +17 -17
  734. package/lib/module/features/journey/targetRegistry.js.map +1 -1
  735. package/lib/module/features/journey/touchTarget.js +29 -29
  736. package/lib/module/features/journey/touchTarget.js.map +1 -1
  737. package/lib/module/features/navigation/AutoScreenDetector.js +114 -71
  738. package/lib/module/features/navigation/AutoScreenDetector.js.map +1 -1
  739. package/lib/module/features/network/NetworkFeature.js +23 -23
  740. package/lib/module/features/network/NetworkFeature.js.map +1 -1
  741. package/lib/module/features/network/index.js +5 -5
  742. package/lib/module/features/network/index.js.map +1 -1
  743. package/lib/module/features/ota/OtaEventEmitter.js +21 -21
  744. package/lib/module/features/ota/OtaEventEmitter.js.map +1 -1
  745. package/lib/module/features/ota/OtaOrchestrator.js +596 -43
  746. package/lib/module/features/ota/OtaOrchestrator.js.map +1 -1
  747. package/lib/module/features/ota/OtaTypes.js.map +1 -1
  748. package/lib/module/features/ota/deviceAttributes.js +43 -0
  749. package/lib/module/features/ota/deviceAttributes.js.map +1 -0
  750. package/lib/module/features/ota/environment.js +165 -0
  751. package/lib/module/features/ota/environment.js.map +1 -0
  752. package/lib/module/features/ota/geoCountry.js +86 -0
  753. package/lib/module/features/ota/geoCountry.js.map +1 -0
  754. package/lib/module/features/ota/retry.js +87 -0
  755. package/lib/module/features/ota/retry.js.map +1 -0
  756. package/lib/module/features/ota/signature.js +109 -0
  757. package/lib/module/features/ota/signature.js.map +1 -0
  758. package/lib/module/features/ota/useOtaUpdate.js +18 -15
  759. package/lib/module/features/ota/useOtaUpdate.js.map +1 -1
  760. package/lib/module/features/performance/PerformanceFeature.js +49 -35
  761. package/lib/module/features/performance/PerformanceFeature.js.map +1 -1
  762. package/lib/module/features/performance/collectors/AppLaunchCollector.js +13 -13
  763. package/lib/module/features/performance/collectors/AppLaunchCollector.js.map +1 -1
  764. package/lib/module/features/performance/collectors/AutoScreenLoadCollector.js +32 -32
  765. package/lib/module/features/performance/collectors/AutoScreenLoadCollector.js.map +1 -1
  766. package/lib/module/features/performance/collectors/CustomTraceCollector.js +13 -13
  767. package/lib/module/features/performance/collectors/CustomTraceCollector.js.map +1 -1
  768. package/lib/module/features/performance/collectors/FrameMetricsCollector.js +81 -21
  769. package/lib/module/features/performance/collectors/FrameMetricsCollector.js.map +1 -1
  770. package/lib/module/features/performance/collectors/JsStallCollector.js +12 -12
  771. package/lib/module/features/performance/collectors/JsStallCollector.js.map +1 -1
  772. package/lib/module/features/performance/collectors/NetworkPerfCollector.js +10 -10
  773. package/lib/module/features/performance/collectors/NetworkPerfCollector.js.map +1 -1
  774. package/lib/module/features/performance/collectors/ScreenLoadCollector.js +11 -11
  775. package/lib/module/features/performance/collectors/ScreenLoadCollector.js.map +1 -1
  776. package/lib/module/features/performance/collectors/UiHangCollector.js +5 -5
  777. package/lib/module/features/performance/collectors/UiHangCollector.js.map +1 -1
  778. package/lib/module/features/performance/config.js +11 -11
  779. package/lib/module/features/performance/config.js.map +1 -1
  780. package/lib/module/features/performance/getNativePerformanceModule.js +11 -11
  781. package/lib/module/features/performance/getNativePerformanceModule.js.map +1 -1
  782. package/lib/module/features/performance/index.js +2 -2
  783. package/lib/module/features/performance/index.js.map +1 -1
  784. package/lib/module/features/performance/metrics/MetricsEngine.js +13 -13
  785. package/lib/module/features/performance/metrics/MetricsEngine.js.map +1 -1
  786. package/lib/module/features/performance/models.js +8 -8
  787. package/lib/module/features/performance/models.js.map +1 -1
  788. package/lib/module/features/performance/transport/PerformanceTransport.js +31 -6
  789. package/lib/module/features/performance/transport/PerformanceTransport.js.map +1 -1
  790. package/lib/module/features/profiler/ProfilerFeature.js +53 -53
  791. package/lib/module/features/profiler/ProfilerFeature.js.map +1 -1
  792. package/lib/module/features/profiler/config.js +15 -15
  793. package/lib/module/features/profiler/config.js.map +1 -1
  794. package/lib/module/features/profiler/contracts.js +22 -22
  795. package/lib/module/features/profiler/contracts.js.map +1 -1
  796. package/lib/module/features/profiler/index.js +4 -4
  797. package/lib/module/features/profiler/index.js.map +1 -1
  798. package/lib/module/features/profiler/models.js +44 -44
  799. package/lib/module/features/profiler/models.js.map +1 -1
  800. package/lib/module/features/profiler/transport/ProfilerTransport.js +9 -9
  801. package/lib/module/features/profiler/transport/ProfilerTransport.js.map +1 -1
  802. package/lib/module/features/replay/bridge/adapters/bridgeAdapter.js +17 -17
  803. package/lib/module/features/replay/bridge/adapters/bridgeAdapter.js.map +1 -1
  804. package/lib/module/features/replay/bridge/eventEmitter.js +8 -8
  805. package/lib/module/features/replay/bridge/eventEmitter.js.map +1 -1
  806. package/lib/module/features/replay/bridge/nativeModule.js +20 -20
  807. package/lib/module/features/replay/bridge/nativeModule.js.map +1 -1
  808. package/lib/module/features/replay/core/clock/clock.js +6 -6
  809. package/lib/module/features/replay/core/clock/clock.js.map +1 -1
  810. package/lib/module/features/replay/core/config/defaults.js +2 -2
  811. package/lib/module/features/replay/core/config/defaults.js.map +1 -1
  812. package/lib/module/features/replay/core/config/validator.js +5 -5
  813. package/lib/module/features/replay/core/config/validator.js.map +1 -1
  814. package/lib/module/features/replay/core/env/environmentDetector.js +10 -10
  815. package/lib/module/features/replay/core/env/environmentDetector.js.map +1 -1
  816. package/lib/module/features/replay/core/errors/safeCall.js +4 -4
  817. package/lib/module/features/replay/core/errors/safeCall.js.map +1 -1
  818. package/lib/module/features/replay/core/ids/sessionId.js +5 -5
  819. package/lib/module/features/replay/core/ids/sessionId.js.map +1 -1
  820. package/lib/module/features/replay/core/logger/logger.js +5 -5
  821. package/lib/module/features/replay/core/logger/logger.js.map +1 -1
  822. package/lib/module/features/replay/core/privacy/privacyTypes.js +4 -4
  823. package/lib/module/features/replay/core/privacy/privacyTypes.js.map +1 -1
  824. package/lib/module/features/replay/core/queue/boundedQueue.js +5 -5
  825. package/lib/module/features/replay/core/queue/boundedQueue.js.map +1 -1
  826. package/lib/module/features/replay/integrations/alert/alertInstrumentation.js +59 -59
  827. package/lib/module/features/replay/integrations/alert/alertInstrumentation.js.map +1 -1
  828. package/lib/module/features/replay/integrations/logs/consoleIntegration.js +19 -19
  829. package/lib/module/features/replay/integrations/logs/consoleIntegration.js.map +1 -1
  830. package/lib/module/features/replay/integrations/network/networkAdapter.js +30 -30
  831. package/lib/module/features/replay/integrations/network/networkAdapter.js.map +1 -1
  832. package/lib/module/features/replay/integrations/react-navigation/navigationIntegration.js +19 -19
  833. package/lib/module/features/replay/integrations/react-navigation/navigationIntegration.js.map +1 -1
  834. package/lib/module/features/replay/integrations/touch/ReplayRoot.js +16 -16
  835. package/lib/module/features/replay/integrations/touch/ReplayRoot.js.map +1 -1
  836. package/lib/module/features/replay/pipeline/batching/batchManager.js +5 -5
  837. package/lib/module/features/replay/pipeline/batching/batchManager.js.map +1 -1
  838. package/lib/module/features/replay/pipeline/envelope/envelopeBuilder.js +5 -5
  839. package/lib/module/features/replay/pipeline/envelope/envelopeBuilder.js.map +1 -1
  840. package/lib/module/features/replay/pipeline/retry/retryPolicy.js +4 -4
  841. package/lib/module/features/replay/pipeline/retry/retryPolicy.js.map +1 -1
  842. package/lib/module/features/replay/pipeline/transport/transportTypes.js +7 -7
  843. package/lib/module/features/replay/pipeline/transport/transportTypes.js.map +1 -1
  844. package/lib/module/features/replay/public/api.js +21 -21
  845. package/lib/module/features/replay/public/api.js.map +1 -1
  846. package/lib/module/features/replay/public/enums.js +5 -5
  847. package/lib/module/features/replay/public/enums.js.map +1 -1
  848. package/lib/module/features/replay/public/types.js.map +1 -1
  849. package/lib/module/features/replay/replay/breadcrumbs/breadcrumbCollector.js +5 -5
  850. package/lib/module/features/replay/replay/breadcrumbs/breadcrumbCollector.js.map +1 -1
  851. package/lib/module/features/replay/replay/frames/frameModels.js +4 -4
  852. package/lib/module/features/replay/replay/frames/frameModels.js.map +1 -1
  853. package/lib/module/features/replay/replay/session/sessionOrchestrator.js +10 -10
  854. package/lib/module/features/replay/replay/session/sessionOrchestrator.js.map +1 -1
  855. package/lib/module/features/replay/replay/timeline/timelineModels.js +4 -4
  856. package/lib/module/features/replay/replay/timeline/timelineModels.js.map +1 -1
  857. package/lib/module/features/replay/transport/BackendReplayTransport.js +13 -13
  858. package/lib/module/features/replay/transport/BackendReplayTransport.js.map +1 -1
  859. package/lib/module/features/replay/transport/CompositeReplayTransport.js +8 -8
  860. package/lib/module/features/replay/transport/CompositeReplayTransport.js.map +1 -1
  861. package/lib/module/features/replay/transport/DesktopReplayTransport.js +14 -14
  862. package/lib/module/features/replay/transport/DesktopReplayTransport.js.map +1 -1
  863. package/lib/module/features/replay/transport/ReplayTransport.js.map +1 -1
  864. package/lib/module/features/session/BackendSessionAdapter.js +485 -164
  865. package/lib/module/features/session/BackendSessionAdapter.js.map +1 -1
  866. package/lib/module/features/session/DesktopSessionTransport.js +14 -14
  867. package/lib/module/features/session/DesktopSessionTransport.js.map +1 -1
  868. package/lib/module/features/session/JourneyEventPipeline.js +20 -19
  869. package/lib/module/features/session/JourneyEventPipeline.js.map +1 -1
  870. package/lib/module/features/session/ReplayCaptureManager.js +169 -123
  871. package/lib/module/features/session/ReplayCaptureManager.js.map +1 -1
  872. package/lib/module/features/session/ScrollTracker.js +17 -17
  873. package/lib/module/features/session/ScrollTracker.js.map +1 -1
  874. package/lib/module/features/session/SessionManager.js +185 -155
  875. package/lib/module/features/session/SessionManager.js.map +1 -1
  876. package/lib/module/features/session/SyncDecisionEngine.js +23 -23
  877. package/lib/module/features/session/SyncDecisionEngine.js.map +1 -1
  878. package/lib/module/features/session/index.js +5 -5
  879. package/lib/module/features/session/index.js.map +1 -1
  880. package/lib/module/features/session/nativeCapture.js +9 -10
  881. package/lib/module/features/session/nativeCapture.js.map +1 -1
  882. package/lib/module/features/session/outboxFrameCapture.js +18 -17
  883. package/lib/module/features/session/outboxFrameCapture.js.map +1 -1
  884. package/lib/module/features/session/sessionTypes.js +44 -44
  885. package/lib/module/features/session/sessionTypes.js.map +1 -1
  886. package/lib/module/features/skan/skanBridge.js +11 -11
  887. package/lib/module/features/skan/skanBridge.js.map +1 -1
  888. package/lib/module/features/skan/skanConversionManager.js +23 -23
  889. package/lib/module/features/skan/skanConversionManager.js.map +1 -1
  890. package/lib/module/index.js +19 -10
  891. package/lib/module/index.js.map +1 -1
  892. package/lib/module/integrations/fetch/fetchInterceptor.js +21 -21
  893. package/lib/module/integrations/fetch/fetchInterceptor.js.map +1 -1
  894. package/lib/module/integrations/navigation/screenTracker.js.map +1 -1
  895. package/lib/module/integrations/network/bodyCapture.js +69 -69
  896. package/lib/module/integrations/network/bodyCapture.js.map +1 -1
  897. package/lib/module/integrations/xhr/xhrInterceptor.js +24 -24
  898. package/lib/module/integrations/xhr/xhrInterceptor.js.map +1 -1
  899. package/lib/module/metro/index.js +37 -37
  900. package/lib/module/metro/index.js.map +1 -1
  901. package/lib/module/metro/optionalDependencyStub.js +11 -11
  902. package/lib/module/metro/optionalDependencyStub.js.map +1 -1
  903. package/lib/module/metro/optionalModules.js +16 -16
  904. package/lib/module/metro/optionalModules.js.map +1 -1
  905. package/lib/module/pipeline/dispatcher/dispatcher.js.map +1 -1
  906. package/lib/module/pipeline/envelope/envelope.js.map +1 -1
  907. package/lib/module/pipeline/envelope/serializer.js.map +1 -1
  908. package/lib/module/pipeline/processors/dedupe.js.map +1 -1
  909. package/lib/module/pipeline/processors/enrich.js.map +1 -1
  910. package/lib/module/pipeline/processors/sampling.js.map +1 -1
  911. package/lib/module/pipeline/processors/sanitize.js.map +1 -1
  912. package/lib/module/pipeline/queue/flushQueue.js +4 -4
  913. package/lib/module/pipeline/queue/flushQueue.js.map +1 -1
  914. package/lib/module/pipeline/queue/memoryQueue.js.map +1 -1
  915. package/lib/module/pipeline/queue/persistentQueue.js +80 -80
  916. package/lib/module/pipeline/queue/persistentQueue.js.map +1 -1
  917. package/lib/module/pipeline/queue/queuePolicy.js.map +1 -1
  918. package/lib/module/pipeline/scheduler/flushScheduler.js.map +1 -1
  919. package/lib/module/pipeline/scheduler/retryPolicy.js +2 -2
  920. package/lib/module/pipeline/scheduler/retryPolicy.js.map +1 -1
  921. package/lib/module/public/ScaleBunErrorBoundary.js +70 -0
  922. package/lib/module/public/ScaleBunErrorBoundary.js.map +1 -0
  923. package/lib/module/public/ScaleBunFacade.js +424 -276
  924. package/lib/module/public/ScaleBunFacade.js.map +1 -1
  925. package/lib/module/public/ScaleBunProvider.js +3 -3
  926. package/lib/module/public/ScaleBunProvider.js.map +1 -1
  927. package/lib/module/public/typedTracker.js +36 -36
  928. package/lib/module/public/typedTracker.js.map +1 -1
  929. package/lib/module/public/types.js.map +1 -1
  930. package/lib/module/push/PushManager.js +21 -21
  931. package/lib/module/push/PushManager.js.map +1 -1
  932. package/lib/module/push/adapters/ManualAdapter.js +14 -14
  933. package/lib/module/push/adapters/ManualAdapter.js.map +1 -1
  934. package/lib/module/push/adapters/NativeBridgeAdapter.js +17 -17
  935. package/lib/module/push/adapters/NativeBridgeAdapter.js.map +1 -1
  936. package/lib/module/push/adapters/NoopAdapter.js +5 -5
  937. package/lib/module/push/adapters/NoopAdapter.js.map +1 -1
  938. package/lib/module/push/adapters/RNFirebaseMessagingAdapter.js +17 -17
  939. package/lib/module/push/adapters/RNFirebaseMessagingAdapter.js.map +1 -1
  940. package/lib/module/push/adapters/loadMessaging.js +12 -12
  941. package/lib/module/push/adapters/loadMessaging.js.map +1 -1
  942. package/lib/module/push/adapters/loadNotifee.js +12 -12
  943. package/lib/module/push/adapters/loadNotifee.js.map +1 -1
  944. package/lib/module/push/adapters/selectAdapter.js +14 -14
  945. package/lib/module/push/adapters/selectAdapter.js.map +1 -1
  946. package/lib/module/push/detect/capabilities.js +19 -19
  947. package/lib/module/push/detect/capabilities.js.map +1 -1
  948. package/lib/module/push/index.js +3 -3
  949. package/lib/module/push/index.js.map +1 -1
  950. package/lib/module/push/native/nativeNotifications.js +32 -32
  951. package/lib/module/push/native/nativeNotifications.js.map +1 -1
  952. package/lib/module/push/types.js.map +1 -1
  953. package/lib/module/specs/NativeReplaySdk.js +18 -18
  954. package/lib/module/specs/NativeReplaySdk.js.map +1 -1
  955. package/lib/module/specs/NativeScaleBunCrash.js +19 -19
  956. package/lib/module/specs/NativeScaleBunCrash.js.map +1 -1
  957. package/lib/module/specs/NativeScaleBunInstallReferrer.js +14 -14
  958. package/lib/module/specs/NativeScaleBunInstallReferrer.js.map +1 -1
  959. package/lib/module/specs/NativeScaleBunOta.js +21 -21
  960. package/lib/module/specs/NativeScaleBunOta.js.map +1 -1
  961. package/lib/module/specs/NativeScaleBunPerformance.js +15 -15
  962. package/lib/module/specs/NativeScaleBunPerformance.js.map +1 -1
  963. package/lib/module/specs/NativeScaleBunProfiler.js +16 -16
  964. package/lib/module/specs/NativeScaleBunProfiler.js.map +1 -1
  965. package/lib/module/specs/NativeScaleBunStorage.js +29 -29
  966. package/lib/module/specs/NativeScaleBunStorage.js.map +1 -1
  967. package/lib/module/storage/StorageBackend.js +83 -83
  968. package/lib/module/storage/StorageBackend.js.map +1 -1
  969. package/lib/module/storage/db/sqlite.js.map +1 -1
  970. package/lib/module/storage/files/fileStore.js.map +1 -1
  971. package/lib/module/transport/auth/sdkSession.js.map +1 -1
  972. package/lib/module/transport/backoff/exponentialJitter.js +2 -2
  973. package/lib/module/transport/backoff/exponentialJitter.js.map +1 -1
  974. package/lib/module/transport/http/endpoints.js.map +1 -1
  975. package/lib/module/transport/http/httpClient.js +3 -3
  976. package/lib/module/transport/http/httpClient.js.map +1 -1
  977. package/lib/module/transport/rateLimit/retryAfter.js.map +1 -1
  978. package/lib/module/transport/signing/requestSigner.js.map +1 -1
  979. package/lib/module/vendor/protocol/index.js +74 -74
  980. package/lib/module/vendor/protocol/index.js.map +1 -1
  981. package/lib/module/vendor/protocol/internal/validation.js +23 -23
  982. package/lib/module/vendor/protocol/internal/validation.js.map +1 -1
  983. package/lib/module/vendor/sdk-contracts/bridge.js.map +1 -1
  984. package/lib/module/vendor/sdk-contracts/config.js.map +1 -1
  985. package/lib/module/vendor/sdk-contracts/events.js.map +1 -1
  986. package/lib/module/vendor/sdk-contracts/features.js.map +1 -1
  987. package/lib/module/vendor/sdk-contracts/index.js.map +1 -1
  988. package/lib/module/vendor/sdk-contracts/platform.js.map +1 -1
  989. package/lib/module/vendor/sdk-contracts/session-boundary.js.map +1 -1
  990. package/lib/module/vendor/sdk-contracts/session.js.map +1 -1
  991. package/lib/module/vendor/vendor.manifest +10 -10
  992. package/lib/typescript/analytics/EventTracker.d.ts +20 -0
  993. package/lib/typescript/analytics/EventTracker.d.ts.map +1 -1
  994. package/lib/typescript/bootstrap/SDKBootstrapper.d.ts.map +1 -1
  995. package/lib/typescript/core/config/schema.d.ts +1 -1
  996. package/lib/typescript/core/config/schema.d.ts.map +1 -1
  997. package/lib/typescript/core/context/device.d.ts +46 -0
  998. package/lib/typescript/core/context/device.d.ts.map +1 -1
  999. package/lib/typescript/debug/replayWiring.d.ts.map +1 -1
  1000. package/lib/typescript/features/bugreport/BugReportFeature.d.ts +59 -0
  1001. package/lib/typescript/features/bugreport/BugReportFeature.d.ts.map +1 -0
  1002. package/lib/typescript/features/bugreport/buildPayload.d.ts +51 -0
  1003. package/lib/typescript/features/bugreport/buildPayload.d.ts.map +1 -0
  1004. package/lib/typescript/features/crash/CrashFeature.d.ts.map +1 -1
  1005. package/lib/typescript/features/crash/CrashReporter.d.ts +20 -1
  1006. package/lib/typescript/features/crash/CrashReporter.d.ts.map +1 -1
  1007. package/lib/typescript/features/crash/capture.d.ts +21 -2
  1008. package/lib/typescript/features/crash/capture.d.ts.map +1 -1
  1009. package/lib/typescript/features/crash/nativeCrashBridge.d.ts +16 -3
  1010. package/lib/typescript/features/crash/nativeCrashBridge.d.ts.map +1 -1
  1011. package/lib/typescript/features/crash/rejectionHandler.d.ts +46 -0
  1012. package/lib/typescript/features/crash/rejectionHandler.d.ts.map +1 -0
  1013. package/lib/typescript/features/engage/EngagePromptProvider.d.ts.map +1 -1
  1014. package/lib/typescript/features/engage/EngagePromptView.d.ts.map +1 -1
  1015. package/lib/typescript/features/engage/engageThrottle.d.ts +24 -4
  1016. package/lib/typescript/features/engage/engageThrottle.d.ts.map +1 -1
  1017. package/lib/typescript/features/engage/engageTriggerEngine.d.ts.map +1 -1
  1018. package/lib/typescript/features/engage/engageTypes.d.ts +21 -0
  1019. package/lib/typescript/features/engage/engageTypes.d.ts.map +1 -1
  1020. package/lib/typescript/features/journey/ScaleBunDebugRoot.d.ts.map +1 -1
  1021. package/lib/typescript/features/navigation/AutoScreenDetector.d.ts +9 -0
  1022. package/lib/typescript/features/navigation/AutoScreenDetector.d.ts.map +1 -1
  1023. package/lib/typescript/features/ota/OtaOrchestrator.d.ts +75 -3
  1024. package/lib/typescript/features/ota/OtaOrchestrator.d.ts.map +1 -1
  1025. package/lib/typescript/features/ota/OtaTypes.d.ts +42 -0
  1026. package/lib/typescript/features/ota/OtaTypes.d.ts.map +1 -1
  1027. package/lib/typescript/features/ota/deviceAttributes.d.ts +18 -0
  1028. package/lib/typescript/features/ota/deviceAttributes.d.ts.map +1 -0
  1029. package/lib/typescript/features/ota/environment.d.ts +99 -0
  1030. package/lib/typescript/features/ota/environment.d.ts.map +1 -0
  1031. package/lib/typescript/features/ota/geoCountry.d.ts +14 -0
  1032. package/lib/typescript/features/ota/geoCountry.d.ts.map +1 -0
  1033. package/lib/typescript/features/ota/retry.d.ts +53 -0
  1034. package/lib/typescript/features/ota/retry.d.ts.map +1 -0
  1035. package/lib/typescript/features/ota/signature.d.ts +66 -0
  1036. package/lib/typescript/features/ota/signature.d.ts.map +1 -0
  1037. package/lib/typescript/features/ota/useOtaUpdate.d.ts +20 -2
  1038. package/lib/typescript/features/ota/useOtaUpdate.d.ts.map +1 -1
  1039. package/lib/typescript/features/performance/PerformanceFeature.d.ts +0 -1
  1040. package/lib/typescript/features/performance/PerformanceFeature.d.ts.map +1 -1
  1041. package/lib/typescript/features/performance/collectors/FrameMetricsCollector.d.ts +33 -0
  1042. package/lib/typescript/features/performance/collectors/FrameMetricsCollector.d.ts.map +1 -1
  1043. package/lib/typescript/features/performance/transport/PerformanceTransport.d.ts.map +1 -1
  1044. package/lib/typescript/features/session/BackendSessionAdapter.d.ts +135 -4
  1045. package/lib/typescript/features/session/BackendSessionAdapter.d.ts.map +1 -1
  1046. package/lib/typescript/features/session/JourneyEventPipeline.d.ts +2 -0
  1047. package/lib/typescript/features/session/JourneyEventPipeline.d.ts.map +1 -1
  1048. package/lib/typescript/features/session/ReplayCaptureManager.d.ts +38 -1
  1049. package/lib/typescript/features/session/ReplayCaptureManager.d.ts.map +1 -1
  1050. package/lib/typescript/features/session/SessionManager.d.ts.map +1 -1
  1051. package/lib/typescript/features/session/nativeCapture.d.ts +2 -1
  1052. package/lib/typescript/features/session/nativeCapture.d.ts.map +1 -1
  1053. package/lib/typescript/features/session/outboxFrameCapture.d.ts.map +1 -1
  1054. package/lib/typescript/features/session/sessionTypes.d.ts +20 -3
  1055. package/lib/typescript/features/session/sessionTypes.d.ts.map +1 -1
  1056. package/lib/typescript/index.d.ts +7 -0
  1057. package/lib/typescript/index.d.ts.map +1 -1
  1058. package/lib/typescript/public/ScaleBunErrorBoundary.d.ts +44 -0
  1059. package/lib/typescript/public/ScaleBunErrorBoundary.d.ts.map +1 -0
  1060. package/lib/typescript/public/ScaleBunFacade.d.ts +58 -0
  1061. package/lib/typescript/public/ScaleBunFacade.d.ts.map +1 -1
  1062. package/lib/typescript/specs/NativeScaleBunCrash.d.ts +14 -0
  1063. package/lib/typescript/specs/NativeScaleBunCrash.d.ts.map +1 -1
  1064. package/lib/typescript/specs/NativeScaleBunOta.d.ts +11 -0
  1065. package/lib/typescript/specs/NativeScaleBunOta.d.ts.map +1 -1
  1066. package/lib/typescript/vendor/protocol/index.d.ts +17 -17
  1067. package/package.json +12 -14
  1068. package/react-native.config.js +24 -24
  1069. package/scalebun-react-native.podspec +37 -37
  1070. package/src/analytics/EventTracker.ts +489 -462
  1071. package/src/analytics/automaticEvents.ts +105 -105
  1072. package/src/analytics/batching.ts +54 -54
  1073. package/src/analytics/eventLane.ts +26 -26
  1074. package/src/bootstrap/FeatureRegistry.ts +81 -81
  1075. package/src/bootstrap/SDKBootstrapper.ts +610 -585
  1076. package/src/bucketing/fnv1a32.ts +40 -40
  1077. package/src/compat/codepush.ts +118 -118
  1078. package/src/config/ConfigManager.ts +167 -167
  1079. package/src/config/configTypes.ts +32 -32
  1080. package/src/core/architecture.ts +39 -39
  1081. package/src/core/clock/now.ts +6 -6
  1082. package/src/core/config/schema.ts +239 -231
  1083. package/src/core/constants/endpoints.ts +9 -9
  1084. package/src/core/constants/timings.ts +23 -23
  1085. package/src/core/constants/version.ts +6 -6
  1086. package/src/core/context/device.ts +146 -0
  1087. package/src/core/context/user.ts +26 -26
  1088. package/src/core/contracts/IFeature.ts +53 -53
  1089. package/src/core/di/container.ts +26 -26
  1090. package/src/core/encoding/base64.ts +46 -46
  1091. package/src/core/id/deviceId.ts +51 -51
  1092. package/src/core/lifecycle/appLifecycle.ts +33 -33
  1093. package/src/core/lifecycle/crashSafe.ts +29 -29
  1094. package/src/core/logger/errorClassification.ts +108 -108
  1095. package/src/core/logger/internalLogger.ts +65 -65
  1096. package/src/crypto/hmacSha256.ts +106 -106
  1097. package/src/debug/bootstrap.ts +366 -366
  1098. package/src/debug/commands.ts +597 -597
  1099. package/src/debug/configBuilder.ts +56 -56
  1100. package/src/debug/exportBridge.ts +153 -153
  1101. package/src/debug/hostResolver.ts +34 -34
  1102. package/src/debug/index.ts +25 -25
  1103. package/src/debug/metrics.ts +29 -29
  1104. package/src/debug/perf.ts +212 -212
  1105. package/src/debug/perfWiring.ts +119 -119
  1106. package/src/debug/protocol.ts +58 -58
  1107. package/src/debug/redaction.ts +290 -290
  1108. package/src/debug/replayWiring.ts +148 -147
  1109. package/src/debug/screenTracking.ts +55 -55
  1110. package/src/debug/sessionWiring.ts +59 -59
  1111. package/src/debug/stream.ts +561 -561
  1112. package/src/debug/transport.ts +439 -439
  1113. package/src/features/bugreport/BugReportFeature.ts +128 -0
  1114. package/src/features/bugreport/buildPayload.ts +116 -0
  1115. package/src/features/crash/CrashFeature.ts +71 -52
  1116. package/src/features/crash/CrashReporter.ts +179 -140
  1117. package/src/features/crash/NativeCrashFeature.ts +42 -42
  1118. package/src/features/crash/capture.ts +48 -21
  1119. package/src/features/crash/globalHandler.ts +39 -39
  1120. package/src/features/crash/index.ts +8 -8
  1121. package/src/features/crash/nativeCrashBridge.ts +266 -132
  1122. package/src/features/crash/rejectionHandler.ts +134 -0
  1123. package/src/features/engage/EngageAnchor.tsx +159 -159
  1124. package/src/features/engage/EngageArchetypeRenderers.tsx +3716 -3716
  1125. package/src/features/engage/EngageInAppView.tsx +2678 -2678
  1126. package/src/features/engage/EngageInlinePlacement.tsx +169 -169
  1127. package/src/features/engage/EngagePromptProvider.tsx +1318 -1270
  1128. package/src/features/engage/EngagePromptView.tsx +1400 -1364
  1129. package/src/features/engage/EngageTransport.ts +668 -668
  1130. package/src/features/engage/EngageVariantContent.tsx +1483 -1483
  1131. package/src/features/engage/__test-support__/reactNativeStub.js +40 -40
  1132. package/src/features/engage/attachmentCapture.ts +45 -45
  1133. package/src/features/engage/captureVoiceAttachment.ts +81 -81
  1134. package/src/features/engage/engageCoachmarkTour.ts +120 -120
  1135. package/src/features/engage/engageGameLogic.ts +347 -347
  1136. package/src/features/engage/engageMediaSizing.ts +76 -76
  1137. package/src/features/engage/engageMultiStepSheet.ts +53 -53
  1138. package/src/features/engage/engageOutcome.ts +157 -157
  1139. package/src/features/engage/engagePushTokenBridge.ts +84 -84
  1140. package/src/features/engage/engageShakeBridge.ts +67 -67
  1141. package/src/features/engage/engageSignals.ts +40 -40
  1142. package/src/features/engage/engageStoreReviewBridge.ts +48 -48
  1143. package/src/features/engage/engageTestSeenStore.ts +95 -95
  1144. package/src/features/engage/engageThrottle.ts +478 -440
  1145. package/src/features/engage/engageTriggerEngine.ts +350 -335
  1146. package/src/features/engage/engageTypes.ts +712 -691
  1147. package/src/features/engage/engageVariantResolver.ts +364 -364
  1148. package/src/features/engage/engageWindowInsets.ts +108 -108
  1149. package/src/features/engage/gestureTriggerDetector.ts +83 -83
  1150. package/src/features/engage/transcription/TranscriptionProvider.ts +68 -68
  1151. package/src/features/install-referrer/installReferrer.ts +112 -112
  1152. package/src/features/journey/ScaleBunDebugRoot.tsx +727 -726
  1153. package/src/features/journey/ScaleBunFlatList.tsx +39 -39
  1154. package/src/features/journey/ScaleBunImpression.tsx +109 -109
  1155. package/src/features/journey/ScaleBunScrollView.tsx +72 -72
  1156. package/src/features/journey/ScaleBunSectionList.tsx +39 -39
  1157. package/src/features/journey/calibrationContext.ts +53 -53
  1158. package/src/features/journey/gestureBuffer.ts +59 -59
  1159. package/src/features/journey/gestureDetector.ts +162 -162
  1160. package/src/features/journey/impression.ts +92 -92
  1161. package/src/features/journey/journeyManager.ts +466 -466
  1162. package/src/features/journey/journeyTypes.ts +215 -215
  1163. package/src/features/journey/navDetector.ts +149 -149
  1164. package/src/features/journey/screenshotHelper.ts +137 -137
  1165. package/src/features/journey/targetRegistry.ts +43 -43
  1166. package/src/features/journey/touchTarget.ts +128 -128
  1167. package/src/features/navigation/AutoScreenDetector.ts +503 -448
  1168. package/src/features/network/NetworkFeature.ts +144 -144
  1169. package/src/features/network/index.ts +31 -31
  1170. package/src/features/ota/OtaEventEmitter.ts +128 -128
  1171. package/src/features/ota/OtaOrchestrator.ts +963 -323
  1172. package/src/features/ota/OtaTypes.ts +118 -62
  1173. package/src/features/ota/deviceAttributes.ts +46 -0
  1174. package/src/features/ota/environment.ts +199 -0
  1175. package/src/features/ota/geoCountry.ts +85 -0
  1176. package/src/features/ota/retry.ts +123 -0
  1177. package/src/features/ota/signature.ts +123 -0
  1178. package/src/features/ota/useOtaUpdate.ts +152 -134
  1179. package/src/features/performance/PerformanceFeature.ts +597 -584
  1180. package/src/features/performance/collectors/AppLaunchCollector.ts +117 -117
  1181. package/src/features/performance/collectors/AutoScreenLoadCollector.ts +258 -258
  1182. package/src/features/performance/collectors/CustomTraceCollector.ts +116 -116
  1183. package/src/features/performance/collectors/FrameMetricsCollector.ts +181 -119
  1184. package/src/features/performance/collectors/JsStallCollector.ts +165 -165
  1185. package/src/features/performance/collectors/NetworkPerfCollector.ts +69 -69
  1186. package/src/features/performance/collectors/ScreenLoadCollector.ts +95 -95
  1187. package/src/features/performance/collectors/UiHangCollector.ts +98 -98
  1188. package/src/features/performance/config.ts +136 -136
  1189. package/src/features/performance/getNativePerformanceModule.ts +38 -38
  1190. package/src/features/performance/index.ts +28 -28
  1191. package/src/features/performance/metrics/MetricsEngine.ts +152 -152
  1192. package/src/features/performance/models.ts +235 -235
  1193. package/src/features/performance/transport/PerformanceTransport.ts +161 -143
  1194. package/src/features/profiler/ProfilerFeature.ts +661 -661
  1195. package/src/features/profiler/config.ts +230 -230
  1196. package/src/features/profiler/contracts.ts +176 -176
  1197. package/src/features/profiler/index.ts +45 -45
  1198. package/src/features/profiler/models.ts +430 -430
  1199. package/src/features/profiler/transport/ProfilerTransport.ts +93 -93
  1200. package/src/features/replay/bridge/adapters/bridgeAdapter.ts +230 -230
  1201. package/src/features/replay/bridge/eventEmitter.ts +176 -176
  1202. package/src/features/replay/bridge/nativeModule.ts +241 -241
  1203. package/src/features/replay/core/clock/clock.ts +38 -38
  1204. package/src/features/replay/core/config/defaults.ts +66 -66
  1205. package/src/features/replay/core/config/validator.ts +113 -113
  1206. package/src/features/replay/core/env/environmentDetector.ts +21 -21
  1207. package/src/features/replay/core/errors/safeCall.ts +34 -34
  1208. package/src/features/replay/core/ids/sessionId.ts +44 -44
  1209. package/src/features/replay/core/logger/logger.ts +40 -40
  1210. package/src/features/replay/core/privacy/privacyTypes.ts +41 -41
  1211. package/src/features/replay/core/queue/boundedQueue.ts +71 -71
  1212. package/src/features/replay/integrations/alert/alertInstrumentation.ts +277 -277
  1213. package/src/features/replay/integrations/logs/consoleIntegration.ts +116 -116
  1214. package/src/features/replay/integrations/network/networkAdapter.ts +128 -128
  1215. package/src/features/replay/integrations/react-navigation/navigationIntegration.ts +89 -89
  1216. package/src/features/replay/integrations/touch/ReplayRoot.tsx +114 -114
  1217. package/src/features/replay/pipeline/batching/batchManager.ts +133 -133
  1218. package/src/features/replay/pipeline/envelope/envelopeBuilder.ts +66 -66
  1219. package/src/features/replay/pipeline/retry/retryPolicy.ts +62 -62
  1220. package/src/features/replay/pipeline/transport/transportTypes.ts +85 -85
  1221. package/src/features/replay/public/api.ts +364 -364
  1222. package/src/features/replay/public/enums.ts +78 -78
  1223. package/src/features/replay/public/types.ts +297 -297
  1224. package/src/features/replay/replay/breadcrumbs/breadcrumbCollector.ts +115 -115
  1225. package/src/features/replay/replay/frames/frameModels.ts +45 -45
  1226. package/src/features/replay/replay/session/sessionOrchestrator.ts +286 -286
  1227. package/src/features/replay/replay/timeline/timelineModels.ts +129 -129
  1228. package/src/features/replay/transport/BackendReplayTransport.ts +215 -215
  1229. package/src/features/replay/transport/CompositeReplayTransport.ts +82 -82
  1230. package/src/features/replay/transport/DesktopReplayTransport.ts +140 -140
  1231. package/src/features/replay/transport/ReplayTransport.ts +84 -84
  1232. package/src/features/session/BackendSessionAdapter.ts +1568 -1233
  1233. package/src/features/session/DesktopSessionTransport.ts +128 -128
  1234. package/src/features/session/JourneyEventPipeline.ts +276 -273
  1235. package/src/features/session/ReplayCaptureManager.ts +998 -946
  1236. package/src/features/session/ScrollTracker.ts +166 -166
  1237. package/src/features/session/SessionManager.ts +1248 -1209
  1238. package/src/features/session/SyncDecisionEngine.ts +117 -117
  1239. package/src/features/session/index.ts +88 -88
  1240. package/src/features/session/nativeCapture.ts +39 -38
  1241. package/src/features/session/outboxFrameCapture.ts +75 -74
  1242. package/src/features/session/sessionTypes.ts +514 -491
  1243. package/src/features/skan/skanBridge.ts +61 -61
  1244. package/src/features/skan/skanConversionManager.ts +173 -173
  1245. package/src/index.ts +200 -191
  1246. package/src/integrations/fetch/fetchInterceptor.ts +182 -182
  1247. package/src/integrations/network/bodyCapture.ts +328 -328
  1248. package/src/integrations/xhr/xhrInterceptor.ts +231 -231
  1249. package/src/metro/index.ts +164 -164
  1250. package/src/metro/optionalDependencyStub.ts +13 -13
  1251. package/src/metro/optionalModules.ts +27 -27
  1252. package/src/pipeline/dispatcher/dispatcher.ts +22 -22
  1253. package/src/pipeline/envelope/envelope.ts +31 -31
  1254. package/src/pipeline/envelope/serializer.ts +14 -14
  1255. package/src/pipeline/processors/enrich.ts +11 -11
  1256. package/src/pipeline/processors/sanitize.ts +23 -23
  1257. package/src/pipeline/queue/flushQueue.ts +144 -144
  1258. package/src/pipeline/queue/memoryQueue.ts +31 -31
  1259. package/src/pipeline/queue/persistentQueue.ts +414 -414
  1260. package/src/pipeline/scheduler/flushScheduler.ts +47 -47
  1261. package/src/pipeline/scheduler/retryPolicy.ts +8 -8
  1262. package/src/public/ScaleBunErrorBoundary.tsx +79 -0
  1263. package/src/public/ScaleBunFacade.ts +1630 -1479
  1264. package/src/public/ScaleBunProvider.tsx +91 -91
  1265. package/src/public/typedTracker.ts +123 -123
  1266. package/src/public/types.ts +312 -312
  1267. package/src/push/PushManager.ts +318 -318
  1268. package/src/push/adapters/ManualAdapter.ts +100 -100
  1269. package/src/push/adapters/NativeBridgeAdapter.ts +142 -142
  1270. package/src/push/adapters/NoopAdapter.ts +46 -46
  1271. package/src/push/adapters/RNFirebaseMessagingAdapter.ts +271 -271
  1272. package/src/push/adapters/loadMessaging.ts +24 -24
  1273. package/src/push/adapters/loadNotifee.ts +29 -29
  1274. package/src/push/adapters/selectAdapter.ts +176 -176
  1275. package/src/push/detect/capabilities.ts +124 -124
  1276. package/src/push/index.ts +22 -22
  1277. package/src/push/native/nativeNotifications.ts +216 -216
  1278. package/src/push/types.ts +159 -159
  1279. package/src/specs/NativeReplaySdk.ts +99 -99
  1280. package/src/specs/NativeScaleBunCrash.ts +52 -36
  1281. package/src/specs/NativeScaleBunInstallReferrer.ts +29 -29
  1282. package/src/specs/NativeScaleBunOta.ts +97 -85
  1283. package/src/specs/NativeScaleBunPerformance.ts +34 -34
  1284. package/src/specs/NativeScaleBunProfiler.ts +41 -41
  1285. package/src/specs/NativeScaleBunStorage.ts +59 -59
  1286. package/src/storage/StorageBackend.ts +272 -272
  1287. package/src/transport/auth/sdkSession.ts +27 -27
  1288. package/src/transport/backoff/exponentialJitter.ts +9 -9
  1289. package/src/transport/http/endpoints.ts +33 -33
  1290. package/src/transport/http/httpClient.ts +73 -73
  1291. package/src/vendor/protocol/index.ts +391 -391
  1292. package/src/vendor/protocol/internal/validation.ts +497 -497
  1293. package/src/vendor/sdk-contracts/bridge.ts +162 -162
  1294. package/src/vendor/sdk-contracts/config.ts +192 -192
  1295. package/src/vendor/sdk-contracts/events.ts +50 -50
  1296. package/src/vendor/sdk-contracts/features.ts +42 -42
  1297. package/src/vendor/sdk-contracts/index.ts +98 -98
  1298. package/src/vendor/sdk-contracts/platform.ts +42 -42
  1299. package/src/vendor/sdk-contracts/session-boundary.ts +55 -55
  1300. package/src/vendor/sdk-contracts/session.ts +225 -225
  1301. package/src/vendor/vendor.manifest +10 -10
  1302. package/android/build/generated/source/buildConfig/debug/com/scalebun/sdk/BuildConfig.java +0 -12
  1303. package/android/build/generated/source/codegen/java/com/scalebun/spec/NativeReplaySdkSpec.java +0 -208
  1304. package/android/build/generated/source/codegen/java/com/scalebun/spec/NativeScaleBunCrashSpec.java +0 -46
  1305. package/android/build/generated/source/codegen/java/com/scalebun/spec/NativeScaleBunInstallReferrerSpec.java +0 -38
  1306. package/android/build/generated/source/codegen/java/com/scalebun/spec/NativeScaleBunOtaSpec.java +0 -63
  1307. package/android/build/generated/source/codegen/java/com/scalebun/spec/NativeScaleBunPerformanceSpec.java +0 -70
  1308. package/android/build/generated/source/codegen/java/com/scalebun/spec/NativeScaleBunProfilerSpec.java +0 -96
  1309. package/android/build/generated/source/codegen/java/com/scalebun/spec/NativeScaleBunStorageSpec.java +0 -50
  1310. package/android/build/generated/source/codegen/jni/CMakeLists.txt +0 -28
  1311. package/android/build/generated/source/codegen/jni/ScaleBunSpec-generated.cpp +0 -554
  1312. package/android/build/generated/source/codegen/jni/ScaleBunSpec.h +0 -79
  1313. package/android/build/generated/source/codegen/jni/react/renderer/components/ScaleBunSpec/ComponentDescriptors.cpp +0 -22
  1314. package/android/build/generated/source/codegen/jni/react/renderer/components/ScaleBunSpec/ComponentDescriptors.h +0 -24
  1315. package/android/build/generated/source/codegen/jni/react/renderer/components/ScaleBunSpec/EventEmitters.cpp +0 -16
  1316. package/android/build/generated/source/codegen/jni/react/renderer/components/ScaleBunSpec/EventEmitters.h +0 -17
  1317. package/android/build/generated/source/codegen/jni/react/renderer/components/ScaleBunSpec/Props.cpp +0 -19
  1318. package/android/build/generated/source/codegen/jni/react/renderer/components/ScaleBunSpec/Props.h +0 -18
  1319. package/android/build/generated/source/codegen/jni/react/renderer/components/ScaleBunSpec/ScaleBunSpecJSI-generated.cpp +0 -595
  1320. package/android/build/generated/source/codegen/jni/react/renderer/components/ScaleBunSpec/ScaleBunSpecJSI.h +0 -1070
  1321. package/android/build/generated/source/codegen/jni/react/renderer/components/ScaleBunSpec/ShadowNodes.cpp +0 -17
  1322. package/android/build/generated/source/codegen/jni/react/renderer/components/ScaleBunSpec/ShadowNodes.h +0 -23
  1323. package/android/build/generated/source/codegen/jni/react/renderer/components/ScaleBunSpec/States.cpp +0 -16
  1324. package/android/build/generated/source/codegen/jni/react/renderer/components/ScaleBunSpec/States.h +0 -20
  1325. package/android/build/generated/source/codegen/schema.json +0 -1
  1326. package/android/build/intermediates/aapt_friendly_merged_manifests/debug/processDebugManifest/aapt/AndroidManifest.xml +0 -20
  1327. package/android/build/intermediates/aapt_friendly_merged_manifests/debug/processDebugManifest/aapt/output-metadata.json +0 -18
  1328. package/android/build/intermediates/aar_metadata/debug/writeDebugAarMetadata/aar-metadata.properties +0 -6
  1329. package/android/build/intermediates/annotation_processor_list/debug/javaPreCompileDebug/annotationProcessors.json +0 -1
  1330. package/android/build/intermediates/compile_library_classes_jar/debug/bundleLibCompileToJarDebug/classes.jar +0 -0
  1331. package/android/build/intermediates/compile_r_class_jar/debug/generateDebugRFile/R.jar +0 -0
  1332. package/android/build/intermediates/compile_symbol_list/debug/generateDebugRFile/R.txt +0 -0
  1333. package/android/build/intermediates/incremental/debug/packageDebugResources/compile-file-map.properties +0 -1
  1334. package/android/build/intermediates/incremental/debug/packageDebugResources/merger.xml +0 -2
  1335. package/android/build/intermediates/incremental/mergeDebugAssets/merger.xml +0 -2
  1336. package/android/build/intermediates/incremental/mergeDebugJniLibFolders/merger.xml +0 -2
  1337. package/android/build/intermediates/incremental/mergeDebugShaders/merger.xml +0 -2
  1338. package/android/build/intermediates/java_res/debug/processDebugJavaRes/out/META-INF/scalebun_react-native_debug.kotlin_module +0 -0
  1339. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/scalebun/sdk/BuildConfig.class +0 -0
  1340. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/scalebun/spec/NativeReplaySdkSpec.class +0 -0
  1341. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/scalebun/spec/NativeScaleBunCrashSpec.class +0 -0
  1342. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/scalebun/spec/NativeScaleBunInstallReferrerSpec.class +0 -0
  1343. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/scalebun/spec/NativeScaleBunOtaSpec.class +0 -0
  1344. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/scalebun/spec/NativeScaleBunPerformanceSpec.class +0 -0
  1345. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/scalebun/spec/NativeScaleBunProfilerSpec.class +0 -0
  1346. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/scalebun/spec/NativeScaleBunStorageSpec.class +0 -0
  1347. package/android/build/intermediates/local_only_symbol_list/debug/parseDebugLocalResources/R-def.txt +0 -2
  1348. package/android/build/intermediates/manifest_merge_blame_file/debug/processDebugManifest/manifest-merger-blame-debug-report.txt +0 -24
  1349. package/android/build/intermediates/merged_manifest/debug/processDebugManifest/AndroidManifest.xml +0 -20
  1350. package/android/build/intermediates/navigation_json/debug/extractDeepLinksDebug/navigation.json +0 -1
  1351. package/android/build/intermediates/nested_resources_validation_report/debug/generateDebugResources/nestedResourcesValidationReport.txt +0 -1
  1352. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/META-INF/scalebun_react-native_debug.kotlin_module +0 -0
  1353. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/core/crash/CrashStorage.class +0 -0
  1354. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/core/crash/NativeCrashHandler$Companion.class +0 -0
  1355. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/core/crash/NativeCrashHandler.class +0 -0
  1356. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/core/performance/ANRWatchdog$HangInfo.class +0 -0
  1357. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/core/performance/ANRWatchdog.class +0 -0
  1358. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/core/performance/AppStartCollector$AppStartInfo.class +0 -0
  1359. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/core/performance/AppStartCollector$Breakdown.class +0 -0
  1360. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/core/performance/AppStartCollector$start$1.class +0 -0
  1361. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/core/performance/AppStartCollector.class +0 -0
  1362. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/core/performance/FrameMetricsCollector$Companion.class +0 -0
  1363. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/core/performance/FrameMetricsCollector$FrameMetricsSnapshot.class +0 -0
  1364. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/core/performance/FrameMetricsCollector$start$1.class +0 -0
  1365. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/core/performance/FrameMetricsCollector$startChoreographerFallback$1.class +0 -0
  1366. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/core/performance/FrameMetricsCollector.class +0 -0
  1367. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/core/performance/PerformanceCore$Listener.class +0 -0
  1368. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/core/performance/PerformanceCore.class +0 -0
  1369. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/profiler/ProfilerModule$Companion.class +0 -0
  1370. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/profiler/ProfilerModule.class +0 -0
  1371. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/profiler/ProfilerPackage.class +0 -0
  1372. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/profiler/ProfilerSpec.class +0 -0
  1373. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/profiler/collectors/CpuCollector.class +0 -0
  1374. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/profiler/collectors/IncidentDetector.class +0 -0
  1375. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/profiler/collectors/MemoryCollector.class +0 -0
  1376. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/profiler/collectors/RenderCollector$frameCallback$1.class +0 -0
  1377. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/profiler/collectors/RenderCollector.class +0 -0
  1378. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/profiler/collectors/SamplerScheduler.class +0 -0
  1379. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/profiler/collectors/SamplerSchedulerKt.class +0 -0
  1380. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/profiler/collectors/ThreadCollector$WhenMappings.class +0 -0
  1381. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/profiler/collectors/ThreadCollector.class +0 -0
  1382. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/ReplaySdkModule$Companion.class +0 -0
  1383. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/ReplaySdkModule$registerConnectivity$cb$1.class +0 -0
  1384. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/ReplaySdkModule.class +0 -0
  1385. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/ReplaySdkPackage.class +0 -0
  1386. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/ReplaySdkSpec.class +0 -0
  1387. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/capture/CaptureReason$Companion.class +0 -0
  1388. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/capture/CaptureReason.class +0 -0
  1389. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/capture/FrameCaptureManager$startFrequencyTimer$1.class +0 -0
  1390. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/capture/FrameCaptureManager.class +0 -0
  1391. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/capture/FrameCaptureScheduler$Companion.class +0 -0
  1392. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/capture/FrameCaptureScheduler$FrameRequest.class +0 -0
  1393. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/capture/FrameCaptureScheduler.class +0 -0
  1394. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/capture/UiStabilityDetector$Companion.class +0 -0
  1395. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/capture/UiStabilityDetector$SettleWatch.class +0 -0
  1396. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/capture/UiStabilityDetector$StabilityWatch.class +0 -0
  1397. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/capture/UiStabilityDetector.class +0 -0
  1398. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/core/CaptureMode$Companion.class +0 -0
  1399. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/core/CaptureMode.class +0 -0
  1400. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/core/ReplayConfig$Companion.class +0 -0
  1401. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/core/ReplayConfig.class +0 -0
  1402. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/core/ReplayLogger.class +0 -0
  1403. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/core/ScreenshotQuality$Companion.class +0 -0
  1404. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/core/ScreenshotQuality.class +0 -0
  1405. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/core/SessionIdGenerator.class +0 -0
  1406. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/core/SessionState.class +0 -0
  1407. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/models/ReplayFrame.class +0 -0
  1408. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/models/ReplaySession.class +0 -0
  1409. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/models/TimelineEvent.class +0 -0
  1410. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/outbox/NativeOutbox$Companion.class +0 -0
  1411. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/outbox/NativeOutbox$enforceLimits$lambda$37$$inlined$sortedBy$1.class +0 -0
  1412. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/outbox/NativeOutbox.class +0 -0
  1413. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/outbox/OutboxUploader$NetResult$NetworkError.class +0 -0
  1414. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/outbox/OutboxUploader$NetResult$Response.class +0 -0
  1415. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/outbox/OutboxUploader$NetResult.class +0 -0
  1416. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/outbox/OutboxUploader$Outcome.class +0 -0
  1417. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/outbox/OutboxUploader$WhenMappings.class +0 -0
  1418. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/outbox/OutboxUploader.class +0 -0
  1419. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/privacy/PrivacyMaskProcessor.class +0 -0
  1420. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/session/SessionManager.class +0 -0
  1421. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/storage/ReplayStorage$enforceStorageLimit$$inlined$sortedBy$1.class +0 -0
  1422. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/storage/ReplayStorage.class +0 -0
  1423. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/timeline/TimelineCollector.class +0 -0
  1424. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/tracking/DialogTouchObserver$start$runnable$1.class +0 -0
  1425. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/tracking/DialogTouchObserver.class +0 -0
  1426. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/tracking/InteractionTracker.class +0 -0
  1427. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/tracking/NativeTouchInterceptor.class +0 -0
  1428. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/tracking/ScreenTracker.class +0 -0
  1429. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/transport/ReplayTransport$UploadResult.class +0 -0
  1430. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/transport/ReplayTransport$upload$2.class +0 -0
  1431. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/transport/ReplayTransport.class +0 -0
  1432. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/voice/VoiceRecorder$Companion.class +0 -0
  1433. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/voice/VoiceRecorder$Result.class +0 -0
  1434. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/voice/VoiceRecorder.class +0 -0
  1435. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/voice/VoiceTranscriber$TranscriptResult.class +0 -0
  1436. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/voice/VoiceTranscriber$listener$1.class +0 -0
  1437. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/voice/VoiceTranscriber.class +0 -0
  1438. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/rn/ScaleBunPackage$Companion.class +0 -0
  1439. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/rn/ScaleBunPackage.class +0 -0
  1440. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/rn/crash/ScaleBunCrashModule$Companion.class +0 -0
  1441. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/rn/crash/ScaleBunCrashModule.class +0 -0
  1442. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/rn/crash/ScaleBunCrashPackage.class +0 -0
  1443. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/rn/crash/ScaleBunCrashSpec.class +0 -0
  1444. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/rn/engage/ScaleBunEngageModule$Companion.class +0 -0
  1445. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/rn/engage/ScaleBunEngageModule$WindowInsetEdges.class +0 -0
  1446. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/rn/engage/ScaleBunEngageModule$shakeListener$1.class +0 -0
  1447. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/rn/engage/ScaleBunEngageModule.class +0 -0
  1448. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/rn/engage/ScaleBunEngagePackage.class +0 -0
  1449. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/rn/engage/ScaleBunNotificationPresenter.class +0 -0
  1450. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/rn/ota/ScaleBunOtaModule$Companion.class +0 -0
  1451. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/rn/ota/ScaleBunOtaModule.class +0 -0
  1452. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/rn/ota/ScaleBunOtaSpec.class +0 -0
  1453. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/rn/ota/SlotManager$Companion.class +0 -0
  1454. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/rn/ota/SlotManager.class +0 -0
  1455. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/rn/performance/PerformanceModule$Companion.class +0 -0
  1456. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/rn/performance/PerformanceModule$coreListener$1.class +0 -0
  1457. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/rn/performance/PerformanceModule.class +0 -0
  1458. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/rn/performance/PerformanceSpec.class +0 -0
  1459. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/rn/referrer/ScaleBunInstallReferrerModule$Companion.class +0 -0
  1460. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/rn/referrer/ScaleBunInstallReferrerModule$getInstallReferrer$1.class +0 -0
  1461. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/rn/referrer/ScaleBunInstallReferrerModule.class +0 -0
  1462. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/rn/referrer/ScaleBunInstallReferrerSpec.class +0 -0
  1463. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/rn/storage/ScaleBunStorageModule$Companion.class +0 -0
  1464. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/rn/storage/ScaleBunStorageModule.class +0 -0
  1465. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/rn/storage/ScaleBunStorageSpec.class +0 -0
  1466. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/sdk/BuildConfig.class +0 -0
  1467. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/spec/NativeReplaySdkSpec.class +0 -0
  1468. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/spec/NativeScaleBunCrashSpec.class +0 -0
  1469. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/spec/NativeScaleBunInstallReferrerSpec.class +0 -0
  1470. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/spec/NativeScaleBunOtaSpec.class +0 -0
  1471. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/spec/NativeScaleBunPerformanceSpec.class +0 -0
  1472. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/spec/NativeScaleBunProfilerSpec.class +0 -0
  1473. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/spec/NativeScaleBunStorageSpec.class +0 -0
  1474. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/storage/KvFileStore$Companion.class +0 -0
  1475. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/storage/KvFileStore.class +0 -0
  1476. package/android/build/intermediates/runtime_library_classes_jar/debug/bundleLibRuntimeToJarDebug/classes.jar +0 -0
  1477. package/android/build/intermediates/symbol_list_with_package_name/debug/generateDebugRFile/package-aware-r.txt +0 -1
  1478. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab +0 -0
  1479. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream +0 -0
  1480. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream.len +0 -0
  1481. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.len +0 -0
  1482. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.values.at +0 -0
  1483. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i +0 -0
  1484. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i.len +0 -0
  1485. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab +0 -0
  1486. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream +0 -0
  1487. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream.len +0 -0
  1488. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.len +0 -0
  1489. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.values.at +0 -0
  1490. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i +0 -0
  1491. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i.len +0 -0
  1492. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab +0 -0
  1493. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream +0 -0
  1494. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream.len +0 -0
  1495. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.len +0 -0
  1496. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.values.at +0 -0
  1497. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i +0 -0
  1498. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i.len +0 -0
  1499. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab +0 -0
  1500. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.keystream +0 -0
  1501. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.keystream.len +0 -0
  1502. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.len +0 -0
  1503. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.values.at +0 -0
  1504. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab_i +0 -0
  1505. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab_i.len +0 -0
  1506. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab +0 -0
  1507. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream +0 -0
  1508. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream.len +0 -0
  1509. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.len +0 -0
  1510. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.values.at +0 -0
  1511. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i +0 -0
  1512. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i.len +0 -0
  1513. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab +0 -0
  1514. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.keystream +0 -0
  1515. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.keystream.len +0 -0
  1516. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.len +0 -0
  1517. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.values.at +0 -0
  1518. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab_i +0 -0
  1519. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab_i.len +0 -0
  1520. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab +0 -0
  1521. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream +0 -0
  1522. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream.len +0 -0
  1523. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.len +0 -0
  1524. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.values +0 -0
  1525. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.values.at +0 -0
  1526. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.values.s +0 -1
  1527. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i +0 -0
  1528. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i.len +0 -0
  1529. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab +0 -0
  1530. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream +0 -0
  1531. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream.len +0 -0
  1532. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.len +0 -0
  1533. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.values.at +0 -0
  1534. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i +0 -0
  1535. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i.len +0 -0
  1536. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab +0 -0
  1537. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.keystream +0 -0
  1538. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.keystream.len +0 -0
  1539. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.len +0 -0
  1540. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.values.at +0 -0
  1541. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab_i +0 -0
  1542. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab_i.len +0 -0
  1543. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab +0 -0
  1544. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.keystream +0 -0
  1545. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.keystream.len +0 -0
  1546. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.len +0 -0
  1547. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.values.at +0 -0
  1548. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab_i +0 -0
  1549. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab_i.len +0 -0
  1550. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/counters.tab +0 -2
  1551. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab +0 -0
  1552. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream +0 -0
  1553. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream.len +0 -0
  1554. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.len +0 -0
  1555. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.values.at +0 -0
  1556. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i +0 -0
  1557. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i.len +0 -0
  1558. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab +0 -0
  1559. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream +0 -0
  1560. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream.len +0 -0
  1561. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.len +0 -0
  1562. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.values.at +0 -0
  1563. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i +0 -0
  1564. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i.len +0 -0
  1565. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab +0 -0
  1566. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream +0 -0
  1567. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream.len +0 -0
  1568. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.len +0 -0
  1569. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.values +0 -0
  1570. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.values.at +0 -0
  1571. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.values.s +0 -1
  1572. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab_i +0 -0
  1573. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab_i.len +0 -0
  1574. package/android/build/kotlin/compileDebugKotlin/cacheable/last-build.bin +0 -0
  1575. package/android/build/kotlin/compileDebugKotlin/classpath-snapshot/shrunk-classpath-snapshot.bin +0 -0
  1576. package/android/build/kotlin/compileDebugKotlin/local-state/build-history.bin +0 -0
  1577. package/android/build/outputs/logs/manifest-merger-debug-report.txt +0 -25
  1578. package/android/build/tmp/compileDebugJavaWithJavac/previous-compilation-data.bin +0 -0
  1579. package/android/build/tmp/kotlin-classes/debug/META-INF/scalebun_react-native_debug.kotlin_module +0 -0
  1580. package/android/build/tmp/kotlin-classes/debug/com/scalebun/core/crash/CrashStorage.class +0 -0
  1581. package/android/build/tmp/kotlin-classes/debug/com/scalebun/core/crash/NativeCrashHandler$Companion.class +0 -0
  1582. package/android/build/tmp/kotlin-classes/debug/com/scalebun/core/crash/NativeCrashHandler.class +0 -0
  1583. package/android/build/tmp/kotlin-classes/debug/com/scalebun/core/performance/ANRWatchdog$HangInfo.class +0 -0
  1584. package/android/build/tmp/kotlin-classes/debug/com/scalebun/core/performance/ANRWatchdog.class +0 -0
  1585. package/android/build/tmp/kotlin-classes/debug/com/scalebun/core/performance/AppStartCollector$AppStartInfo.class +0 -0
  1586. package/android/build/tmp/kotlin-classes/debug/com/scalebun/core/performance/AppStartCollector$Breakdown.class +0 -0
  1587. package/android/build/tmp/kotlin-classes/debug/com/scalebun/core/performance/AppStartCollector$start$1.class +0 -0
  1588. package/android/build/tmp/kotlin-classes/debug/com/scalebun/core/performance/AppStartCollector.class +0 -0
  1589. package/android/build/tmp/kotlin-classes/debug/com/scalebun/core/performance/FrameMetricsCollector$Companion.class +0 -0
  1590. package/android/build/tmp/kotlin-classes/debug/com/scalebun/core/performance/FrameMetricsCollector$FrameMetricsSnapshot.class +0 -0
  1591. package/android/build/tmp/kotlin-classes/debug/com/scalebun/core/performance/FrameMetricsCollector$start$1.class +0 -0
  1592. package/android/build/tmp/kotlin-classes/debug/com/scalebun/core/performance/FrameMetricsCollector$startChoreographerFallback$1.class +0 -0
  1593. package/android/build/tmp/kotlin-classes/debug/com/scalebun/core/performance/FrameMetricsCollector.class +0 -0
  1594. package/android/build/tmp/kotlin-classes/debug/com/scalebun/core/performance/PerformanceCore$Listener.class +0 -0
  1595. package/android/build/tmp/kotlin-classes/debug/com/scalebun/core/performance/PerformanceCore.class +0 -0
  1596. package/android/build/tmp/kotlin-classes/debug/com/scalebun/profiler/ProfilerModule$Companion.class +0 -0
  1597. package/android/build/tmp/kotlin-classes/debug/com/scalebun/profiler/ProfilerModule.class +0 -0
  1598. package/android/build/tmp/kotlin-classes/debug/com/scalebun/profiler/ProfilerPackage.class +0 -0
  1599. package/android/build/tmp/kotlin-classes/debug/com/scalebun/profiler/ProfilerSpec.class +0 -0
  1600. package/android/build/tmp/kotlin-classes/debug/com/scalebun/profiler/collectors/CpuCollector.class +0 -0
  1601. package/android/build/tmp/kotlin-classes/debug/com/scalebun/profiler/collectors/IncidentDetector.class +0 -0
  1602. package/android/build/tmp/kotlin-classes/debug/com/scalebun/profiler/collectors/MemoryCollector.class +0 -0
  1603. package/android/build/tmp/kotlin-classes/debug/com/scalebun/profiler/collectors/RenderCollector$frameCallback$1.class +0 -0
  1604. package/android/build/tmp/kotlin-classes/debug/com/scalebun/profiler/collectors/RenderCollector.class +0 -0
  1605. package/android/build/tmp/kotlin-classes/debug/com/scalebun/profiler/collectors/SamplerScheduler.class +0 -0
  1606. package/android/build/tmp/kotlin-classes/debug/com/scalebun/profiler/collectors/SamplerSchedulerKt.class +0 -0
  1607. package/android/build/tmp/kotlin-classes/debug/com/scalebun/profiler/collectors/ThreadCollector$WhenMappings.class +0 -0
  1608. package/android/build/tmp/kotlin-classes/debug/com/scalebun/profiler/collectors/ThreadCollector.class +0 -0
  1609. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/ReplaySdkModule$Companion.class +0 -0
  1610. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/ReplaySdkModule$registerConnectivity$cb$1.class +0 -0
  1611. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/ReplaySdkModule.class +0 -0
  1612. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/ReplaySdkPackage.class +0 -0
  1613. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/ReplaySdkSpec.class +0 -0
  1614. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/capture/CaptureReason$Companion.class +0 -0
  1615. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/capture/CaptureReason.class +0 -0
  1616. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/capture/FrameCaptureManager$startFrequencyTimer$1.class +0 -0
  1617. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/capture/FrameCaptureManager.class +0 -0
  1618. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/capture/FrameCaptureScheduler$Companion.class +0 -0
  1619. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/capture/FrameCaptureScheduler$FrameRequest.class +0 -0
  1620. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/capture/FrameCaptureScheduler.class +0 -0
  1621. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/capture/UiStabilityDetector$Companion.class +0 -0
  1622. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/capture/UiStabilityDetector$SettleWatch.class +0 -0
  1623. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/capture/UiStabilityDetector$StabilityWatch.class +0 -0
  1624. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/capture/UiStabilityDetector.class +0 -0
  1625. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/core/CaptureMode$Companion.class +0 -0
  1626. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/core/CaptureMode.class +0 -0
  1627. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/core/ReplayConfig$Companion.class +0 -0
  1628. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/core/ReplayConfig.class +0 -0
  1629. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/core/ReplayLogger.class +0 -0
  1630. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/core/ScreenshotQuality$Companion.class +0 -0
  1631. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/core/ScreenshotQuality.class +0 -0
  1632. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/core/SessionIdGenerator.class +0 -0
  1633. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/core/SessionState.class +0 -0
  1634. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/models/ReplayFrame.class +0 -0
  1635. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/models/ReplaySession.class +0 -0
  1636. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/models/TimelineEvent.class +0 -0
  1637. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/outbox/NativeOutbox$Companion.class +0 -0
  1638. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/outbox/NativeOutbox$enforceLimits$lambda$37$$inlined$sortedBy$1.class +0 -0
  1639. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/outbox/NativeOutbox.class +0 -0
  1640. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/outbox/OutboxUploader$NetResult$NetworkError.class +0 -0
  1641. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/outbox/OutboxUploader$NetResult$Response.class +0 -0
  1642. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/outbox/OutboxUploader$NetResult.class +0 -0
  1643. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/outbox/OutboxUploader$Outcome.class +0 -0
  1644. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/outbox/OutboxUploader$WhenMappings.class +0 -0
  1645. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/outbox/OutboxUploader.class +0 -0
  1646. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/privacy/PrivacyMaskProcessor.class +0 -0
  1647. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/session/SessionManager.class +0 -0
  1648. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/storage/ReplayStorage$enforceStorageLimit$$inlined$sortedBy$1.class +0 -0
  1649. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/storage/ReplayStorage.class +0 -0
  1650. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/timeline/TimelineCollector.class +0 -0
  1651. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/tracking/DialogTouchObserver$start$runnable$1.class +0 -0
  1652. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/tracking/DialogTouchObserver.class +0 -0
  1653. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/tracking/InteractionTracker.class +0 -0
  1654. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/tracking/NativeTouchInterceptor.class +0 -0
  1655. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/tracking/ScreenTracker.class +0 -0
  1656. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/transport/ReplayTransport$UploadResult.class +0 -0
  1657. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/transport/ReplayTransport$upload$2.class +0 -0
  1658. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/transport/ReplayTransport.class +0 -0
  1659. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/voice/VoiceRecorder$Companion.class +0 -0
  1660. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/voice/VoiceRecorder$Result.class +0 -0
  1661. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/voice/VoiceRecorder.class +0 -0
  1662. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/voice/VoiceTranscriber$TranscriptResult.class +0 -0
  1663. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/voice/VoiceTranscriber$listener$1.class +0 -0
  1664. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/voice/VoiceTranscriber.class +0 -0
  1665. package/android/build/tmp/kotlin-classes/debug/com/scalebun/rn/ScaleBunPackage$Companion.class +0 -0
  1666. package/android/build/tmp/kotlin-classes/debug/com/scalebun/rn/ScaleBunPackage.class +0 -0
  1667. package/android/build/tmp/kotlin-classes/debug/com/scalebun/rn/crash/ScaleBunCrashModule$Companion.class +0 -0
  1668. package/android/build/tmp/kotlin-classes/debug/com/scalebun/rn/crash/ScaleBunCrashModule.class +0 -0
  1669. package/android/build/tmp/kotlin-classes/debug/com/scalebun/rn/crash/ScaleBunCrashPackage.class +0 -0
  1670. package/android/build/tmp/kotlin-classes/debug/com/scalebun/rn/crash/ScaleBunCrashSpec.class +0 -0
  1671. package/android/build/tmp/kotlin-classes/debug/com/scalebun/rn/engage/ScaleBunEngageModule$Companion.class +0 -0
  1672. package/android/build/tmp/kotlin-classes/debug/com/scalebun/rn/engage/ScaleBunEngageModule$WindowInsetEdges.class +0 -0
  1673. package/android/build/tmp/kotlin-classes/debug/com/scalebun/rn/engage/ScaleBunEngageModule$shakeListener$1.class +0 -0
  1674. package/android/build/tmp/kotlin-classes/debug/com/scalebun/rn/engage/ScaleBunEngageModule.class +0 -0
  1675. package/android/build/tmp/kotlin-classes/debug/com/scalebun/rn/engage/ScaleBunEngagePackage.class +0 -0
  1676. package/android/build/tmp/kotlin-classes/debug/com/scalebun/rn/engage/ScaleBunNotificationPresenter.class +0 -0
  1677. package/android/build/tmp/kotlin-classes/debug/com/scalebun/rn/ota/ScaleBunOtaModule$Companion.class +0 -0
  1678. package/android/build/tmp/kotlin-classes/debug/com/scalebun/rn/ota/ScaleBunOtaModule.class +0 -0
  1679. package/android/build/tmp/kotlin-classes/debug/com/scalebun/rn/ota/ScaleBunOtaSpec.class +0 -0
  1680. package/android/build/tmp/kotlin-classes/debug/com/scalebun/rn/ota/SlotManager$Companion.class +0 -0
  1681. package/android/build/tmp/kotlin-classes/debug/com/scalebun/rn/ota/SlotManager.class +0 -0
  1682. package/android/build/tmp/kotlin-classes/debug/com/scalebun/rn/performance/PerformanceModule$Companion.class +0 -0
  1683. package/android/build/tmp/kotlin-classes/debug/com/scalebun/rn/performance/PerformanceModule$coreListener$1.class +0 -0
  1684. package/android/build/tmp/kotlin-classes/debug/com/scalebun/rn/performance/PerformanceModule.class +0 -0
  1685. package/android/build/tmp/kotlin-classes/debug/com/scalebun/rn/performance/PerformanceSpec.class +0 -0
  1686. package/android/build/tmp/kotlin-classes/debug/com/scalebun/rn/referrer/ScaleBunInstallReferrerModule$Companion.class +0 -0
  1687. package/android/build/tmp/kotlin-classes/debug/com/scalebun/rn/referrer/ScaleBunInstallReferrerModule$getInstallReferrer$1.class +0 -0
  1688. package/android/build/tmp/kotlin-classes/debug/com/scalebun/rn/referrer/ScaleBunInstallReferrerModule.class +0 -0
  1689. package/android/build/tmp/kotlin-classes/debug/com/scalebun/rn/referrer/ScaleBunInstallReferrerSpec.class +0 -0
  1690. package/android/build/tmp/kotlin-classes/debug/com/scalebun/rn/storage/ScaleBunStorageModule$Companion.class +0 -0
  1691. package/android/build/tmp/kotlin-classes/debug/com/scalebun/rn/storage/ScaleBunStorageModule.class +0 -0
  1692. package/android/build/tmp/kotlin-classes/debug/com/scalebun/rn/storage/ScaleBunStorageSpec.class +0 -0
  1693. package/android/build/tmp/kotlin-classes/debug/com/scalebun/storage/KvFileStore$Companion.class +0 -0
  1694. package/android/build/tmp/kotlin-classes/debug/com/scalebun/storage/KvFileStore.class +0 -0
@@ -1,972 +1,972 @@
1
- import Foundation
2
- import UIKit
3
- import Darwin
4
- import React
5
-
6
- private let THREAD_BASIC_INFO_COUNT_VAL = mach_msg_type_number_t(
7
- MemoryLayout<thread_basic_info_data_t>.size / MemoryLayout<natural_t>.size
8
- )
9
-
10
- /**
11
- * ScaleBun Profiler — iOS Native Module (Phase 2)
12
- *
13
- * NATIVE-FIRST: This module owns ALL profiling logic on iOS.
14
- * - CPU sampling via task_info / thread_info (public Mach APIs)
15
- * - Memory sampling via task_vm_info / os_proc_available_memory
16
- * - Thread enumeration via task_threads (public Mach API)
17
- * - Frame timing via CADisplayLink
18
- * - Thermal state via ProcessInfo
19
- * - Incident detection
20
- * - Batching and scheduling via DispatchSourceTimer
21
- *
22
- * JS receives pre-batched, pre-aggregated payloads only.
23
- * Zero JS timers. Zero JS sampling loops. Zero JS aggregation.
24
- */
25
- @objc(ScaleBunProfiler)
26
- class ScaleBunProfilerModule: RCTEventEmitter {
27
-
28
- private var running = false
29
- private var paused = false
30
- private var sessionId: String = ""
31
- private var currentScreen: String = ""
32
-
33
- // Collectors
34
- private var cpuCollector: IosCpuCollector?
35
- private var memoryCollector: IosMemoryCollector?
36
- private var threadCollector: IosThreadCollector?
37
- private var renderCollector: IosRenderCollector?
38
- private var thermalCollector: IosThermalCollector?
39
- private var incidentDetector: IosIncidentDetector?
40
-
41
- // Scheduler
42
- private let schedulerQueue = DispatchQueue(label: "com.scalebun.profiler.scheduler", qos: .utility)
43
- private var compositeTimer: DispatchSourceTimer?
44
- private var threadTimer: DispatchSourceTimer?
45
- private var batchId: Int64 = 0
46
-
47
- // Config
48
- private var compositeIntervalMs: Int64 = 2000
49
- private var threadIntervalMs: Int64 = 3000
50
-
51
- override init() {
52
- cpuCollector = nil
53
- memoryCollector = nil
54
- threadCollector = nil
55
- renderCollector = nil
56
- thermalCollector = nil
57
- incidentDetector = nil
58
- compositeTimer = nil
59
- threadTimer = nil
60
- super.init()
61
- }
62
-
63
- // ─── Module Setup ───────────────────────────────────────────────────
64
-
65
- @objc override static func requiresMainQueueSetup() -> Bool {
66
- return false
67
- }
68
-
69
- override func supportedEvents() -> [String]! {
70
- return [
71
- "ScaleBunProfiler_SampleBatch",
72
- "ScaleBunProfiler_Incident",
73
- "ScaleBunProfiler_ScreenSummary",
74
- "ScaleBunProfiler_ThreadSnapshot",
75
- "ScaleBunProfiler_Capabilities",
76
- "ScaleBunProfiler_StateChanged"
77
- ]
78
- }
79
-
80
- // ─── Lifecycle ──────────────────────────────────────────────────────
81
-
82
- @objc func startProfiler(_ config: NSDictionary,
83
- resolver resolve: @escaping RCTPromiseResolveBlock,
84
- rejecter reject: @escaping RCTPromiseRejectBlock) {
85
- guard !running else {
86
- resolve(true)
87
- return
88
- }
89
-
90
- // Parse config
91
- let cpuIntervalMs = config["cpuSampleIntervalMs"] as? Int64 ?? 1000
92
- compositeIntervalMs = config["memorySampleIntervalMs"] as? Int64 ?? 2000
93
- threadIntervalMs = config["threadSampleIntervalMs"] as? Int64 ?? 3000
94
-
95
- // Initialize collectors
96
- cpuCollector = IosCpuCollector()
97
- memoryCollector = IosMemoryCollector()
98
- threadCollector = IosThreadCollector()
99
- renderCollector = IosRenderCollector()
100
- thermalCollector = IosThermalCollector()
101
- incidentDetector = IosIncidentDetector()
102
-
103
- // Apply incident thresholds
104
- if let thresholds = config["incidentThresholds"] as? [String: Any] {
105
- incidentDetector?.updateThresholds(thresholds)
106
- }
107
-
108
- // Start render collector on main thread
109
- DispatchQueue.main.async { [weak self] in
110
- self?.renderCollector?.start()
111
- }
112
-
113
- // Start thermal monitoring
114
- thermalCollector?.start()
115
-
116
- // Seed CPU collector (needs one pre-sample)
117
- schedulerQueue.async { [weak self] in
118
- _ = self?.cpuCollector?.collect()
119
- }
120
-
121
- // Start composite timer
122
- startCompositeTimer()
123
- startThreadTimer()
124
-
125
- running = true
126
- paused = false
127
-
128
- // Emit capabilities and state
129
- emitCapabilities()
130
- sendEvent(withName: "ScaleBunProfiler_StateChanged", body: ["state": "running"])
131
-
132
- resolve(true)
133
- }
134
-
135
- @objc func stopProfiler(_ resolve: @escaping RCTPromiseResolveBlock,
136
- rejecter reject: @escaping RCTPromiseRejectBlock) {
137
- stopTimers()
138
-
139
- DispatchQueue.main.async { [weak self] in
140
- self?.renderCollector?.stop()
141
- }
142
- thermalCollector?.stop()
143
-
144
- cpuCollector = nil
145
- memoryCollector = nil
146
- threadCollector = nil
147
- renderCollector = nil
148
- thermalCollector = nil
149
- incidentDetector = nil
150
-
151
- running = false
152
- paused = false
153
-
154
- sendEvent(withName: "ScaleBunProfiler_StateChanged", body: ["state": "idle"])
155
- resolve(true)
156
- }
157
-
158
- @objc func pauseProfilerStream(_ resolve: @escaping RCTPromiseResolveBlock,
159
- rejecter reject: @escaping RCTPromiseRejectBlock) {
160
- paused = true
161
- sendEvent(withName: "ScaleBunProfiler_StateChanged", body: ["state": "paused"])
162
- resolve(true)
163
- }
164
-
165
- @objc func resumeProfilerStream(_ resolve: @escaping RCTPromiseResolveBlock,
166
- rejecter reject: @escaping RCTPromiseRejectBlock) {
167
- paused = false
168
- sendEvent(withName: "ScaleBunProfiler_StateChanged", body: ["state": "running"])
169
- resolve(true)
170
- }
171
-
172
- @objc func captureProfilerSnapshot(_ resolve: @escaping RCTPromiseResolveBlock,
173
- rejecter reject: @escaping RCTPromiseRejectBlock) {
174
- schedulerQueue.async { [weak self] in
175
- let snapshot = self?.buildCompositeSample() ?? [:]
176
- resolve(snapshot)
177
- }
178
- }
179
-
180
- @objc func setProfilerConfig(_ config: NSDictionary,
181
- resolver resolve: @escaping RCTPromiseResolveBlock,
182
- rejecter reject: @escaping RCTPromiseRejectBlock) {
183
- if let thresholds = config["incidentThresholds"] as? [String: Any] {
184
- incidentDetector?.updateThresholds(thresholds)
185
- }
186
- resolve(true)
187
- }
188
-
189
- @objc func markProfilerSpan(_ spanName: String,
190
- spanId: String,
191
- metadata: NSDictionary?,
192
- resolver resolve: @escaping RCTPromiseResolveBlock,
193
- rejecter reject: @escaping RCTPromiseRejectBlock) {
194
- resolve(true) // Phase 4
195
- }
196
-
197
- @objc func endProfilerSpan(_ spanId: String,
198
- resolver resolve: @escaping RCTPromiseResolveBlock,
199
- rejecter reject: @escaping RCTPromiseRejectBlock) {
200
- resolve(true) // Phase 4
201
- }
202
-
203
- @objc func markProfilerInteraction(_ interactionId: String,
204
- interactionName: String,
205
- resolver resolve: @escaping RCTPromiseResolveBlock,
206
- rejecter reject: @escaping RCTPromiseRejectBlock) {
207
- resolve(true) // Phase 4
208
- }
209
-
210
- @objc func flushProfilerExport(_ resolve: @escaping RCTPromiseResolveBlock,
211
- rejecter reject: @escaping RCTPromiseRejectBlock) {
212
- resolve(["status": "export_not_yet_implemented"])
213
- }
214
-
215
- @objc func getProfilerCapabilities(_ resolve: @escaping RCTPromiseResolveBlock,
216
- rejecter reject: @escaping RCTPromiseRejectBlock) {
217
- resolve(buildCapabilities())
218
- }
219
-
220
- @objc func setCurrentScreen(_ screenName: String,
221
- resolver resolve: @escaping RCTPromiseResolveBlock,
222
- rejecter reject: @escaping RCTPromiseRejectBlock) {
223
- currentScreen = screenName
224
- resolve(true)
225
- }
226
-
227
- @objc func setSessionId(_ sessionId: String,
228
- resolver resolve: @escaping RCTPromiseResolveBlock,
229
- rejecter reject: @escaping RCTPromiseRejectBlock) {
230
- self.sessionId = sessionId
231
- resolve(true)
232
- }
233
-
234
- // ─── Scheduler ──────────────────────────────────────────────────────
235
-
236
- private func startCompositeTimer() {
237
- let timer = DispatchSource.makeTimerSource(queue: schedulerQueue)
238
- timer.schedule(deadline: .now() + .milliseconds(Int(compositeIntervalMs + 200)),
239
- repeating: .milliseconds(Int(compositeIntervalMs)))
240
- timer.setEventHandler { [weak self] in
241
- self?.emitCompositeBatch()
242
- }
243
- timer.resume()
244
- compositeTimer = timer
245
- }
246
-
247
- private func startThreadTimer() {
248
- let timer = DispatchSource.makeTimerSource(queue: schedulerQueue)
249
- timer.schedule(deadline: .now() + .milliseconds(Int(threadIntervalMs + 500)),
250
- repeating: .milliseconds(Int(threadIntervalMs)))
251
- timer.setEventHandler { [weak self] in
252
- self?.emitThreadSnapshot()
253
- }
254
- timer.resume()
255
- threadTimer = timer
256
- }
257
-
258
- private func stopTimers() {
259
- compositeTimer?.cancel()
260
- compositeTimer = nil
261
- threadTimer?.cancel()
262
- threadTimer = nil
263
- }
264
-
265
- // ─── Batch Emission ─────────────────────────────────────────────────
266
-
267
- private func emitCompositeBatch() {
268
- guard !paused else { return }
269
-
270
- let batch = buildCompositeSample()
271
- sendEvent(withName: "ScaleBunProfiler_SampleBatch", body: batch)
272
-
273
- // Incident detection
274
- if let detector = incidentDetector {
275
- let incidents = detector.evaluate(
276
- cpu: batch["cpu"] as? [String: Any],
277
- memory: batch["memory"] as? [String: Any],
278
- render: batch["render"] as? [String: Any],
279
- thermal: batch["thermal"] as? [String: Any],
280
- memoryGrowthRate: memoryCollector?.getGrowthRate(),
281
- currentScreen: currentScreen
282
- )
283
- for incident in incidents {
284
- sendEvent(withName: "ScaleBunProfiler_Incident", body: incident)
285
- }
286
- }
287
- }
288
-
289
- private func emitThreadSnapshot() {
290
- guard !paused, let collector = threadCollector else { return }
291
- let snapshot = collector.collect()
292
- sendEvent(withName: "ScaleBunProfiler_ThreadSnapshot", body: snapshot)
293
- }
294
-
295
- private func buildCompositeSample() -> [String: Any] {
296
- batchId += 1
297
- var batch: [String: Any] = [
298
- "id": "sample_\(batchId)_\(Int(Date().timeIntervalSince1970 * 1000))",
299
- "timestamp": Date().timeIntervalSince1970 * 1000,
300
- "sampleIntervalMs": compositeIntervalMs,
301
- "screenKey": currentScreen,
302
- "sessionId": sessionId
303
- ]
304
-
305
- if let cpu = cpuCollector?.collect() { batch["cpu"] = cpu }
306
- if let mem = memoryCollector?.collect() { batch["memory"] = mem }
307
-
308
- // Render collector must be read from main thread
309
- var renderData: [String: Any]?
310
- if Thread.isMainThread {
311
- renderData = renderCollector?.collect()
312
- } else {
313
- DispatchQueue.main.sync {
314
- renderData = self.renderCollector?.collect()
315
- }
316
- }
317
- if let render = renderData { batch["render"] = render }
318
-
319
- if let thermal = thermalCollector?.collect() { batch["thermal"] = thermal }
320
-
321
- return batch
322
- }
323
-
324
- // ─── Capabilities ───────────────────────────────────────────────────
325
-
326
- private func buildCapabilities() -> [String: Any] {
327
- let osVersion = ProcessInfo.processInfo.operatingSystemVersion
328
- let versionString = "\(osVersion.majorVersion).\(osVersion.minorVersion).\(osVersion.patchVersion)"
329
-
330
- var caps: [String: Any] = [
331
- "platform": "ios",
332
- "deviceModel": deviceModel(),
333
- "osVersion": versionString,
334
- "buildType": isDebugBuild() ? "debug" : "release"
335
- ]
336
-
337
- caps["cpu"] = buildCapEntry(
338
- available: true, minVersion: "iOS 13", liveSupported: true,
339
- reason: "Thread-sum approach: task_threads + thread_info.cpu_usage (kernel scheduler estimate). Same method as Activity Monitor. Normalized by activeProcessorCount."
340
- )
341
-
342
- caps["memory"] = buildCapEntry(
343
- available: true, minVersion: "iOS 13", liveSupported: true,
344
- reason: "Physical footprint via task_vm_info, available memory via os_proc_available_memory"
345
- )
346
-
347
- caps["threads"] = buildCapEntry(
348
- available: true, minVersion: "iOS 13", liveSupported: true,
349
- reason: "App-level thread enumeration via task_threads (Mach API). Shows process threads only, not system-wide. Per-thread CPU% is kernel scheduler estimate. Thread names available via pthread_getname_np. Capped at 50 threads."
350
- )
351
-
352
- caps["render"] = buildCapEntry(
353
- available: true, minVersion: "iOS 13", liveSupported: true,
354
- reason: "Frame timing via CADisplayLink on main thread"
355
- )
356
-
357
- caps["network"] = buildCapEntry(
358
- available: false, minVersion: "N/A", liveSupported: false,
359
- reason: "Network profiling via correlation layer (Phase 4)"
360
- )
361
-
362
- caps["js"] = buildCapEntry(
363
- available: true, minVersion: "iOS 13", liveSupported: true,
364
- reason: "JS event loop stall detection via lightweight heartbeat in JS layer. Opt-in, low overhead."
365
- )
366
-
367
- caps["thermal"] = buildCapEntry(
368
- available: true, minVersion: "iOS 11", liveSupported: true,
369
- reason: "Thermal state via ProcessInfo.thermalState + NotificationCenter observer"
370
- )
371
-
372
- caps["diskIo"] = buildCapEntry(
373
- available: false, minVersion: "N/A", liveSupported: false,
374
- reason: "No public disk I/O measurement API on iOS"
375
- )
376
-
377
- return caps
378
- }
379
-
380
- private func buildCapEntry(available: Bool, minVersion: String, liveSupported: Bool, reason: String? = nil) -> [String: Any] {
381
- var entry: [String: Any] = [
382
- "available": available,
383
- "minVersion": minVersion,
384
- "currentVersion": "iOS \(ProcessInfo.processInfo.operatingSystemVersion.majorVersion)",
385
- "liveSupported": liveSupported
386
- ]
387
- if let r = reason { entry["reason"] = r }
388
- return entry
389
- }
390
-
391
- private func emitCapabilities() {
392
- sendEvent(withName: "ScaleBunProfiler_Capabilities", body: buildCapabilities())
393
- }
394
-
395
- private func deviceModel() -> String {
396
- var systemInfo = utsname()
397
- uname(&systemInfo)
398
- let modelCode = withUnsafePointer(to: &systemInfo.machine) {
399
- $0.withMemoryRebound(to: CChar.self, capacity: 1) {
400
- String(validatingUTF8: $0) ?? "Unknown"
401
- }
402
- }
403
- return modelCode
404
- }
405
-
406
- private func isDebugBuild() -> Bool {
407
- #if DEBUG
408
- return true
409
- #else
410
- return false
411
- #endif
412
- }
413
- }
414
-
415
- // ═══════════════════════════════════════════════════════════════════════════
416
- // MARK: - CPU Collector (Thread-Sum approach via task_threads + thread_info)
417
- // ═══════════════════════════════════════════════════════════════════════════
418
-
419
- /**
420
- * IosCpuCollector — Accurate iOS CPU measurement.
421
- *
422
- * APPROACH: Thread-sum via task_threads() + thread_info(THREAD_BASIC_INFO).
423
- *
424
- * Why thread-sum instead of task_basic_info:
425
- * - task_basic_info provides accumulated user_time + system_time across the
426
- * entire process lifetime, INCLUDING terminated threads. Computing a delta
427
- * over wall clock can include stale values from threads that no longer exist.
428
- * - thread_info(THREAD_BASIC_INFO).cpu_usage gives the kernel's own
429
- * scheduler-computed per-thread CPU usage (scale: TH_USAGE_SCALE = 1000).
430
- * Summing across all live threads gives instantaneous CPU usage.
431
- *
432
- * This is the same approach used by Apple's own Activity Monitor and Instruments.
433
- * All Mach APIs used here are public.
434
- *
435
- * NOTE: The result can exceed 100% on multi-core devices (e.g., 400% on a
436
- * quad-core when all cores are busy). We normalize by activeProcessorCount
437
- * to get 0–100% "how busy is the device running our process" percentage.
438
- */
439
- class IosCpuCollector {
440
-
441
- func collect() -> [String: Any]? {
442
- var threadList: thread_act_array_t?
443
- var threadCount: mach_msg_type_number_t = 0
444
-
445
- let kr = task_threads(mach_task_self_, &threadList, &threadCount)
446
- guard kr == KERN_SUCCESS, let threads = threadList else {
447
- return ["appCpuPercent": 0.0, "availability": "degraded"]
448
- }
449
-
450
- var totalCpuUsage: Double = 0.0
451
- let count = Int(threadCount)
452
-
453
- for i in 0..<count {
454
- var info = thread_basic_info_data_t()
455
- var infoCount = THREAD_BASIC_INFO_COUNT_VAL
456
-
457
- let result = withUnsafeMutablePointer(to: &info) {
458
- $0.withMemoryRebound(to: integer_t.self, capacity: Int(infoCount)) {
459
- thread_info(threads[i], thread_flavor_t(THREAD_BASIC_INFO), $0, &infoCount)
460
- }
461
- }
462
-
463
- if result == KERN_SUCCESS && (info.flags & TH_FLAGS_IDLE) == 0 {
464
- // cpu_usage is on a scale of 0 to TH_USAGE_SCALE (1000)
465
- // Convert to percentage: (cpu_usage / TH_USAGE_SCALE) * 100
466
- totalCpuUsage += Double(info.cpu_usage) / Double(TH_USAGE_SCALE) * 100.0
467
- }
468
- }
469
-
470
- // Deallocate thread list
471
- let size = MemoryLayout<thread_act_t>.size * count
472
- vm_deallocate(mach_task_self_, vm_address_t(bitPattern: threads), vm_size_t(size))
473
-
474
- // Normalize: totalCpuUsage can be > 100% on multi-core.
475
- // Divide by activeProcessorCount for "percentage of total CPU capacity".
476
- let coreCount = Double(ProcessInfo.processInfo.activeProcessorCount)
477
- let normalizedPercent = (totalCpuUsage / max(coreCount, 1.0)).clamped(to: 0...100)
478
-
479
- return [
480
- "appCpuPercent": round(normalizedPercent * 10.0) / 10.0,
481
- // Also export raw multi-core total for tools that want per-core view
482
- "rawMultiCoreCpuPercent": round(totalCpuUsage * 10.0) / 10.0,
483
- "processCpuTimeMs": 0.0, // Not tracked in thread-sum approach
484
- "availability": "available"
485
- ]
486
- }
487
- }
488
-
489
- private extension Double {
490
- func clamped(to range: ClosedRange<Double>) -> Double {
491
- return min(max(self, range.lowerBound), range.upperBound)
492
- }
493
- }
494
-
495
- // ═══════════════════════════════════════════════════════════════════════════
496
- // MARK: - Memory Collector (task_vm_info + os_proc_available_memory)
497
- // ═══════════════════════════════════════════════════════════════════════════
498
-
499
- class IosMemoryCollector {
500
- private var peakMemoryBytes: UInt64 = 0
501
- private var prevResidentBytes: UInt64 = 0
502
- private var prevTimestamp: TimeInterval = 0
503
-
504
- func collect() -> [String: Any] {
505
- var result: [String: Any] = [:]
506
-
507
- // Physical footprint via task_vm_info (Mach API — public)
508
- var vmInfo = task_vm_info_data_t()
509
- var vmCount = mach_msg_type_number_t(MemoryLayout<task_vm_info_data_t>.size / MemoryLayout<natural_t>.size)
510
-
511
- let vmResult = withUnsafeMutablePointer(to: &vmInfo) {
512
- $0.withMemoryRebound(to: integer_t.self, capacity: Int(vmCount)) {
513
- task_info(mach_task_self_, task_flavor_t(TASK_VM_INFO), $0, &vmCount)
514
- }
515
- }
516
-
517
- if vmResult == KERN_SUCCESS {
518
- let physicalFootprint = UInt64(vmInfo.phys_footprint)
519
- let residentSize = UInt64(vmInfo.resident_size)
520
- let internalBytes = UInt64(vmInfo.internal)
521
- let compressedBytes = UInt64(vmInfo.compressed)
522
-
523
- result["residentBytes"] = physicalFootprint
524
- result["usedHeapBytes"] = physicalFootprint
525
- result["totalHeapBytes"] = residentSize
526
-
527
- if physicalFootprint > peakMemoryBytes {
528
- peakMemoryBytes = physicalFootprint
529
- }
530
- result["peakMemoryBytes"] = peakMemoryBytes
531
-
532
- prevResidentBytes = physicalFootprint
533
- prevTimestamp = ProcessInfo.processInfo.systemUptime
534
- }
535
-
536
- // Available memory (iOS 13+)
537
- if #available(iOS 13.0, *) {
538
- let available = os_proc_available_memory()
539
- result["availableMemoryBytes"] = available
540
-
541
- // Pressure level based on available memory
542
- let pressureLevel: Int
543
- if available < 50_000_000 { // < 50MB
544
- pressureLevel = 2 // critical
545
- } else if available < 200_000_000 { // < 200MB
546
- pressureLevel = 1 // moderate
547
- } else {
548
- pressureLevel = 0 // normal
549
- }
550
- result["pressureLevel"] = pressureLevel
551
- result["lowMemory"] = pressureLevel >= 2
552
- } else {
553
- result["pressureLevel"] = 0
554
- result["lowMemory"] = false
555
- }
556
-
557
- result["availability"] = "available"
558
- return result
559
- }
560
-
561
- func getGrowthRate() -> Double? {
562
- let now = ProcessInfo.processInfo.systemUptime
563
- guard prevTimestamp > 0, prevResidentBytes > 0 else { return nil }
564
-
565
- let elapsed = now - prevTimestamp
566
- guard elapsed > 0 else { return nil }
567
-
568
- // Re-read current memory
569
- var vmInfo = task_vm_info_data_t()
570
- var vmCount = mach_msg_type_number_t(MemoryLayout<task_vm_info_data_t>.size / MemoryLayout<natural_t>.size)
571
-
572
- let vmResult = withUnsafeMutablePointer(to: &vmInfo) {
573
- $0.withMemoryRebound(to: integer_t.self, capacity: Int(vmCount)) {
574
- task_info(mach_task_self_, task_flavor_t(TASK_VM_INFO), $0, &vmCount)
575
- }
576
- }
577
-
578
- guard vmResult == KERN_SUCCESS else { return nil }
579
-
580
- let current = UInt64(vmInfo.phys_footprint)
581
- let growth = Int64(current) - Int64(prevResidentBytes)
582
- return Double(growth) / elapsed
583
- }
584
- }
585
-
586
- // ═══════════════════════════════════════════════════════════════════════════
587
- // MARK: - Thread Collector (Mach task_threads + thread_info)
588
- // ═══════════════════════════════════════════════════════════════════════════
589
-
590
- class IosThreadCollector {
591
- private var peakThreadCount: Int = 0
592
-
593
- func collect() -> [String: Any] {
594
- var result: [String: Any] = [:]
595
-
596
- var threadList: thread_act_array_t?
597
- var threadCount: mach_msg_type_number_t = 0
598
-
599
- let kr = task_threads(mach_task_self_, &threadList, &threadCount)
600
- guard kr == KERN_SUCCESS, let threads = threadList else {
601
- result["threadCount"] = 0
602
- result["peakThreadCount"] = peakThreadCount
603
- result["availability"] = "degraded"
604
- return result
605
- }
606
-
607
- let count = Int(threadCount)
608
- if count > peakThreadCount { peakThreadCount = count }
609
-
610
- var threadArray: [[String: Any]] = []
611
- let mainThreadId = pthread_mach_thread_np(pthread_self())
612
-
613
- for i in 0..<min(count, 50) { // Cap at 50 to avoid chatty bridge
614
- let thread = threads[i]
615
- var info = thread_basic_info_data_t()
616
- var infoCount = THREAD_BASIC_INFO_COUNT_VAL
617
-
618
- let infoResult = withUnsafeMutablePointer(to: &info) {
619
- $0.withMemoryRebound(to: integer_t.self, capacity: Int(infoCount)) {
620
- thread_info(thread, thread_flavor_t(THREAD_BASIC_INFO), $0, &infoCount)
621
- }
622
- }
623
-
624
- var threadEntry: [String: Any] = [
625
- "id": Int(thread)
626
- ]
627
-
628
- // Get thread name
629
- var threadName = [CChar](repeating: 0, count: 256)
630
- if let pt = pthread_from_mach_thread_np(thread) {
631
- pthread_getname_np(pt, &threadName, 256)
632
- }
633
- let name = String(cString: threadName)
634
- threadEntry["name"] = name.isEmpty ? "Thread-\(i)" : name
635
-
636
- // Classify role
637
- threadEntry["role"] = classifyThread(name: name, machThread: thread, mainThreadId: mainThreadId)
638
-
639
- if infoResult == KERN_SUCCESS {
640
- // Thread state
641
- switch info.run_state {
642
- case TH_STATE_RUNNING: threadEntry["state"] = "running"
643
- case TH_STATE_STOPPED: threadEntry["state"] = "blocked"
644
- case TH_STATE_WAITING: threadEntry["state"] = "waiting"
645
- case TH_STATE_UNINTERRUPTIBLE: threadEntry["state"] = "blocked"
646
- case TH_STATE_HALTED: threadEntry["state"] = "sleeping"
647
- default: threadEntry["state"] = "unknown"
648
- }
649
-
650
- // CPU usage for this thread
651
- let cpuUsage = Double(info.cpu_usage) / Double(TH_USAGE_SCALE) * 100.0
652
- threadEntry["cpuPercent"] = round(cpuUsage * 10.0) / 10.0
653
- } else {
654
- threadEntry["state"] = "unknown"
655
- }
656
-
657
- threadArray.append(threadEntry)
658
- }
659
-
660
- // Deallocate thread list
661
- let size = MemoryLayout<thread_act_t>.size * count
662
- vm_deallocate(mach_task_self_, vm_address_t(bitPattern: threads), vm_size_t(size))
663
-
664
- result["threads"] = threadArray
665
- result["threadCount"] = count
666
- result["peakThreadCount"] = peakThreadCount
667
- result["availability"] = "available"
668
-
669
- return result
670
- }
671
-
672
- private func classifyThread(name: String, machThread: thread_act_t, mainThreadId: mach_port_t) -> String {
673
- if machThread == mainThreadId { return "main" }
674
- let lower = name.lowercased()
675
- if lower.contains("jsthread") || lower.contains("hermes") || lower.contains("jsc") { return "js" }
676
- if lower.contains("render") || lower.contains("coreanimation") { return "render" }
677
- if lower.contains("network") || lower.contains("nsurlsession") || lower.contains("cfnetwork") { return "network" }
678
- if lower.contains("worker") || lower.contains("dispatch") || lower.contains("pool") { return "worker" }
679
- if lower.contains("db") || lower.contains("sqlite") || lower.contains("coredata") { return "db" }
680
- if lower.contains("scalebun") || lower.contains("scalebun") { return "sdk_internal" }
681
- return "unknown"
682
- }
683
- }
684
-
685
- // ═══════════════════════════════════════════════════════════════════════════
686
- // MARK: - Render Collector (CADisplayLink)
687
- // ═══════════════════════════════════════════════════════════════════════════
688
-
689
- class IosRenderCollector {
690
- private var displayLink: CADisplayLink?
691
- private var lastTimestamp: CFTimeInterval = 0
692
- private var totalFrames: Int = 0
693
- private var slowFrames: Int = 0
694
- private var frozenFrames: Int = 0
695
- private var droppedFrames: Int = 0
696
- private var maxFrameTimeMs: Double = 0
697
- private var windowStartTime: CFTimeInterval = 0
698
- private var framesInWindow: Int = 0
699
-
700
- // Histogram: [0-8ms, 8-16ms, 16-33ms, 33-50ms, 50-100ms, 100-700ms, 700ms+]
701
- private var histogram = [Int](repeating: 0, count: 7)
702
-
703
- private let slowThresholdSec: CFTimeInterval = 1.0 / 60.0 // ~16.67ms
704
- private let frozenThresholdSec: CFTimeInterval = 0.700
705
-
706
- /// Start must be called on the main thread.
707
- func start() {
708
- guard displayLink == nil else { return }
709
- displayLink = CADisplayLink(target: self, selector: #selector(onFrame(_:)))
710
- displayLink?.add(to: .main, forMode: .common)
711
- windowStartTime = CACurrentMediaTime()
712
- }
713
-
714
- func stop() {
715
- displayLink?.invalidate()
716
- displayLink = nil
717
- }
718
-
719
- @objc private func onFrame(_ link: CADisplayLink) {
720
- let timestamp = link.timestamp
721
-
722
- if lastTimestamp > 0 {
723
- let duration = timestamp - lastTimestamp
724
- let durationMs = duration * 1000.0
725
-
726
- totalFrames += 1
727
- framesInWindow += 1
728
-
729
- if duration > frozenThresholdSec {
730
- frozenFrames += 1
731
- slowFrames += 1
732
- } else if duration > slowThresholdSec {
733
- slowFrames += 1
734
- }
735
-
736
- let expectedFrame = 1.0 / 60.0
737
- let dropped = max(0, Int(duration / expectedFrame) - 1)
738
- if dropped > 0 { droppedFrames += dropped }
739
-
740
- if durationMs > maxFrameTimeMs { maxFrameTimeMs = durationMs }
741
-
742
- // Histogram bucket
743
- let bucket: Int
744
- switch durationMs {
745
- case ..<8: bucket = 0
746
- case ..<16: bucket = 1
747
- case ..<33: bucket = 2
748
- case ..<50: bucket = 3
749
- case ..<100: bucket = 4
750
- case ..<700: bucket = 5
751
- default: bucket = 6
752
- }
753
- histogram[bucket] += 1
754
- }
755
-
756
- lastTimestamp = timestamp
757
- }
758
-
759
- /// Collect must be called on the main thread (or via DispatchQueue.main.sync).
760
- func collect() -> [String: Any] {
761
- let now = CACurrentMediaTime()
762
- let windowDuration = now - windowStartTime
763
-
764
- let fps: Double
765
- if windowDuration > 0 && framesInWindow > 0 {
766
- fps = min(Double(framesInWindow) / windowDuration, 120.0)
767
- } else {
768
- fps = 0
769
- }
770
-
771
- let result: [String: Any] = [
772
- "fps": round(fps * 10.0) / 10.0,
773
- "totalFrames": totalFrames,
774
- "slowFrames": slowFrames,
775
- "frozenFrames": frozenFrames,
776
- "droppedFrames": droppedFrames,
777
- "maxFrameTimeMs": round(maxFrameTimeMs * 100.0) / 100.0,
778
- "histogram": [
779
- "0-8ms": histogram[0],
780
- "8-16ms": histogram[1],
781
- "16-33ms": histogram[2],
782
- "33-50ms": histogram[3],
783
- "50-100ms": histogram[4],
784
- "100-700ms": histogram[5],
785
- "700ms+": histogram[6]
786
- ],
787
- "availability": displayLink != nil ? "available" : "unavailable"
788
- ]
789
-
790
- // Reset window
791
- windowStartTime = now
792
- framesInWindow = 0
793
-
794
- return result
795
- }
796
- }
797
-
798
- // ═══════════════════════════════════════════════════════════════════════════
799
- // MARK: - Thermal Collector (ProcessInfo.thermalState)
800
- // ═══════════════════════════════════════════════════════════════════════════
801
-
802
- class IosThermalCollector {
803
- private var currentThermalState: Int = 0
804
-
805
- func start() {
806
- // Observe thermal state changes
807
- NotificationCenter.default.addObserver(
808
- self,
809
- selector: #selector(thermalStateChanged),
810
- name: ProcessInfo.thermalStateDidChangeNotification,
811
- object: nil
812
- )
813
- currentThermalState = mapThermalState(ProcessInfo.processInfo.thermalState)
814
- }
815
-
816
- func stop() {
817
- NotificationCenter.default.removeObserver(self)
818
- }
819
-
820
- @objc private func thermalStateChanged() {
821
- currentThermalState = mapThermalState(ProcessInfo.processInfo.thermalState)
822
- }
823
-
824
- func collect() -> [String: Any] {
825
- return [
826
- "thermalState": currentThermalState,
827
- "lowPowerMode": ProcessInfo.processInfo.isLowPowerModeEnabled,
828
- "availability": "available"
829
- ]
830
- }
831
-
832
- private func mapThermalState(_ state: ProcessInfo.ThermalState) -> Int {
833
- switch state {
834
- case .nominal: return 0
835
- case .fair: return 1
836
- case .serious: return 2
837
- case .critical: return 3
838
- @unknown default: return 0
839
- }
840
- }
841
- }
842
-
843
- // ═══════════════════════════════════════════════════════════════════════════
844
- // MARK: - Incident Detector
845
- // ═══════════════════════════════════════════════════════════════════════════
846
-
847
- class IosIncidentDetector {
848
- var cpuSpikePercent: Double = 80.0
849
- var memorySurgeBytesPerSec: Double = 10_485_760.0
850
- var jankBurstFrameCount: Int = 5
851
- var frozenFrameMs: Double = 700.0
852
- var excessiveThreadCount: Int = 50
853
-
854
- private var cpuSpikeConsecutive = 0
855
- private let cpuSpikeSustainedCount = 3
856
- private var lastIncidentTimestamp: TimeInterval = 0
857
- private let minIncidentIntervalSec: TimeInterval = 5.0
858
- private var incidentIdCounter: Int64 = 0
859
-
860
- func updateThresholds(_ thresholds: [String: Any]) {
861
- if let v = thresholds["cpuSpikePercent"] as? NSNumber { cpuSpikePercent = v.doubleValue }
862
- if let v = thresholds["memorySurgeBytesPerSec"] as? NSNumber { memorySurgeBytesPerSec = v.doubleValue }
863
- if let v = thresholds["jankBurstFrameCount"] as? NSNumber { jankBurstFrameCount = v.intValue }
864
- if let v = thresholds["frozenFrameMs"] as? NSNumber { frozenFrameMs = v.doubleValue }
865
- if let v = thresholds["excessiveThreadCount"] as? NSNumber { excessiveThreadCount = v.intValue }
866
- }
867
-
868
- func evaluate(
869
- cpu: [String: Any]?,
870
- memory: [String: Any]?,
871
- render: [String: Any]?,
872
- thermal: [String: Any]?,
873
- memoryGrowthRate: Double?,
874
- currentScreen: String
875
- ) -> [[String: Any]] {
876
- var incidents: [[String: Any]] = []
877
- let now = Date().timeIntervalSince1970
878
-
879
- guard now - lastIncidentTimestamp >= minIncidentIntervalSec else { return incidents }
880
-
881
- // CPU spike
882
- if let appCpu = cpu?["appCpuPercent"] as? Double {
883
- if appCpu > cpuSpikePercent {
884
- cpuSpikeConsecutive += 1
885
- if cpuSpikeConsecutive >= cpuSpikeSustainedCount {
886
- incidents.append(buildIncident(
887
- type: "cpu_spike", title: "CPU Spike Detected",
888
- severity: appCpu > 95 ? "critical" : "warning",
889
- confidence: "high",
890
- cause: "App CPU at \(appCpu)% for \(cpuSpikeConsecutive) consecutive samples",
891
- description: "Sustained high CPU usage detected.",
892
- screen: currentScreen, timestamp: now
893
- ))
894
- cpuSpikeConsecutive = 0
895
- lastIncidentTimestamp = now
896
- }
897
- } else {
898
- cpuSpikeConsecutive = 0
899
- }
900
- }
901
-
902
- // Memory surge
903
- if let rate = memoryGrowthRate, rate > memorySurgeBytesPerSec {
904
- incidents.append(buildIncident(
905
- type: "memory_surge", title: "Memory Surge Detected",
906
- severity: rate > memorySurgeBytesPerSec * 2 ? "critical" : "warning",
907
- confidence: "medium",
908
- cause: "Memory growing at \(Int(rate / 1_048_576))MB/s",
909
- description: "Rapid memory growth detected.",
910
- screen: currentScreen, timestamp: now
911
- ))
912
- lastIncidentTimestamp = now
913
- }
914
-
915
- // Frozen frame
916
- if let maxMs = render?["maxFrameTimeMs"] as? Double, maxMs > frozenFrameMs {
917
- incidents.append(buildIncident(
918
- type: "frozen_frame", title: "Frozen Frame Detected",
919
- severity: maxMs > 2000 ? "critical" : "warning",
920
- confidence: "high",
921
- cause: "Frame took \(Int(maxMs))ms",
922
- description: "A single frame caused visible UI freeze.",
923
- screen: currentScreen, timestamp: now
924
- ))
925
- lastIncidentTimestamp = now
926
- }
927
-
928
- // Jank burst
929
- if let slow = render?["slowFrames"] as? Int, slow >= jankBurstFrameCount {
930
- incidents.append(buildIncident(
931
- type: "jank_burst", title: "Jank Burst Detected",
932
- severity: "warning", confidence: "medium",
933
- cause: "\(slow) slow frames in sampling window",
934
- description: "Multiple slow frames indicate UI jank.",
935
- screen: currentScreen, timestamp: now
936
- ))
937
- lastIncidentTimestamp = now
938
- }
939
-
940
- // Thermal throttle
941
- if let state = thermal?["thermalState"] as? Int, state >= 2 {
942
- incidents.append(buildIncident(
943
- type: "thermal_throttle",
944
- title: state >= 3 ? "Critical Thermal State" : "Thermal Throttling",
945
- severity: state >= 3 ? "critical" : "warning",
946
- confidence: "high",
947
- cause: "Thermal state: \(["nominal","fair","serious","critical"][min(state, 3)])",
948
- description: "Device is thermally throttled, performance may be reduced.",
949
- screen: currentScreen, timestamp: now
950
- ))
951
- lastIncidentTimestamp = now
952
- }
953
-
954
- return incidents
955
- }
956
-
957
- private func buildIncident(type: String, title: String, severity: String, confidence: String,
958
- cause: String, description: String, screen: String, timestamp: TimeInterval) -> [String: Any] {
959
- incidentIdCounter += 1
960
- return [
961
- "id": "inc_\(incidentIdCounter)_\(Int(timestamp * 1000))",
962
- "incidentType": type,
963
- "title": title,
964
- "severity": severity,
965
- "confidence": confidence,
966
- "likelyCause": cause,
967
- "description": description,
968
- "startTimestamp": timestamp * 1000,
969
- "affectedScreens": screen.isEmpty ? [] : [screen]
970
- ]
971
- }
972
- }
1
+ import Foundation
2
+ import UIKit
3
+ import Darwin
4
+ import React
5
+
6
+ private let THREAD_BASIC_INFO_COUNT_VAL = mach_msg_type_number_t(
7
+ MemoryLayout<thread_basic_info_data_t>.size / MemoryLayout<natural_t>.size
8
+ )
9
+
10
+ /**
11
+ * ScaleBun Profiler — iOS Native Module (Phase 2)
12
+ *
13
+ * NATIVE-FIRST: This module owns ALL profiling logic on iOS.
14
+ * - CPU sampling via task_info / thread_info (public Mach APIs)
15
+ * - Memory sampling via task_vm_info / os_proc_available_memory
16
+ * - Thread enumeration via task_threads (public Mach API)
17
+ * - Frame timing via CADisplayLink
18
+ * - Thermal state via ProcessInfo
19
+ * - Incident detection
20
+ * - Batching and scheduling via DispatchSourceTimer
21
+ *
22
+ * JS receives pre-batched, pre-aggregated payloads only.
23
+ * Zero JS timers. Zero JS sampling loops. Zero JS aggregation.
24
+ */
25
+ @objc(ScaleBunProfiler)
26
+ class ScaleBunProfilerModule: RCTEventEmitter {
27
+
28
+ private var running = false
29
+ private var paused = false
30
+ private var sessionId: String = ""
31
+ private var currentScreen: String = ""
32
+
33
+ // Collectors
34
+ private var cpuCollector: IosCpuCollector?
35
+ private var memoryCollector: IosMemoryCollector?
36
+ private var threadCollector: IosThreadCollector?
37
+ private var renderCollector: IosRenderCollector?
38
+ private var thermalCollector: IosThermalCollector?
39
+ private var incidentDetector: IosIncidentDetector?
40
+
41
+ // Scheduler
42
+ private let schedulerQueue = DispatchQueue(label: "com.scalebun.profiler.scheduler", qos: .utility)
43
+ private var compositeTimer: DispatchSourceTimer?
44
+ private var threadTimer: DispatchSourceTimer?
45
+ private var batchId: Int64 = 0
46
+
47
+ // Config
48
+ private var compositeIntervalMs: Int64 = 2000
49
+ private var threadIntervalMs: Int64 = 3000
50
+
51
+ override init() {
52
+ cpuCollector = nil
53
+ memoryCollector = nil
54
+ threadCollector = nil
55
+ renderCollector = nil
56
+ thermalCollector = nil
57
+ incidentDetector = nil
58
+ compositeTimer = nil
59
+ threadTimer = nil
60
+ super.init()
61
+ }
62
+
63
+ // ─── Module Setup ───────────────────────────────────────────────────
64
+
65
+ @objc override static func requiresMainQueueSetup() -> Bool {
66
+ return false
67
+ }
68
+
69
+ override func supportedEvents() -> [String]! {
70
+ return [
71
+ "ScaleBunProfiler_SampleBatch",
72
+ "ScaleBunProfiler_Incident",
73
+ "ScaleBunProfiler_ScreenSummary",
74
+ "ScaleBunProfiler_ThreadSnapshot",
75
+ "ScaleBunProfiler_Capabilities",
76
+ "ScaleBunProfiler_StateChanged"
77
+ ]
78
+ }
79
+
80
+ // ─── Lifecycle ──────────────────────────────────────────────────────
81
+
82
+ @objc func startProfiler(_ config: NSDictionary,
83
+ resolver resolve: @escaping RCTPromiseResolveBlock,
84
+ rejecter reject: @escaping RCTPromiseRejectBlock) {
85
+ guard !running else {
86
+ resolve(true)
87
+ return
88
+ }
89
+
90
+ // Parse config
91
+ let cpuIntervalMs = config["cpuSampleIntervalMs"] as? Int64 ?? 1000
92
+ compositeIntervalMs = config["memorySampleIntervalMs"] as? Int64 ?? 2000
93
+ threadIntervalMs = config["threadSampleIntervalMs"] as? Int64 ?? 3000
94
+
95
+ // Initialize collectors
96
+ cpuCollector = IosCpuCollector()
97
+ memoryCollector = IosMemoryCollector()
98
+ threadCollector = IosThreadCollector()
99
+ renderCollector = IosRenderCollector()
100
+ thermalCollector = IosThermalCollector()
101
+ incidentDetector = IosIncidentDetector()
102
+
103
+ // Apply incident thresholds
104
+ if let thresholds = config["incidentThresholds"] as? [String: Any] {
105
+ incidentDetector?.updateThresholds(thresholds)
106
+ }
107
+
108
+ // Start render collector on main thread
109
+ DispatchQueue.main.async { [weak self] in
110
+ self?.renderCollector?.start()
111
+ }
112
+
113
+ // Start thermal monitoring
114
+ thermalCollector?.start()
115
+
116
+ // Seed CPU collector (needs one pre-sample)
117
+ schedulerQueue.async { [weak self] in
118
+ _ = self?.cpuCollector?.collect()
119
+ }
120
+
121
+ // Start composite timer
122
+ startCompositeTimer()
123
+ startThreadTimer()
124
+
125
+ running = true
126
+ paused = false
127
+
128
+ // Emit capabilities and state
129
+ emitCapabilities()
130
+ sendEvent(withName: "ScaleBunProfiler_StateChanged", body: ["state": "running"])
131
+
132
+ resolve(true)
133
+ }
134
+
135
+ @objc func stopProfiler(_ resolve: @escaping RCTPromiseResolveBlock,
136
+ rejecter reject: @escaping RCTPromiseRejectBlock) {
137
+ stopTimers()
138
+
139
+ DispatchQueue.main.async { [weak self] in
140
+ self?.renderCollector?.stop()
141
+ }
142
+ thermalCollector?.stop()
143
+
144
+ cpuCollector = nil
145
+ memoryCollector = nil
146
+ threadCollector = nil
147
+ renderCollector = nil
148
+ thermalCollector = nil
149
+ incidentDetector = nil
150
+
151
+ running = false
152
+ paused = false
153
+
154
+ sendEvent(withName: "ScaleBunProfiler_StateChanged", body: ["state": "idle"])
155
+ resolve(true)
156
+ }
157
+
158
+ @objc func pauseProfilerStream(_ resolve: @escaping RCTPromiseResolveBlock,
159
+ rejecter reject: @escaping RCTPromiseRejectBlock) {
160
+ paused = true
161
+ sendEvent(withName: "ScaleBunProfiler_StateChanged", body: ["state": "paused"])
162
+ resolve(true)
163
+ }
164
+
165
+ @objc func resumeProfilerStream(_ resolve: @escaping RCTPromiseResolveBlock,
166
+ rejecter reject: @escaping RCTPromiseRejectBlock) {
167
+ paused = false
168
+ sendEvent(withName: "ScaleBunProfiler_StateChanged", body: ["state": "running"])
169
+ resolve(true)
170
+ }
171
+
172
+ @objc func captureProfilerSnapshot(_ resolve: @escaping RCTPromiseResolveBlock,
173
+ rejecter reject: @escaping RCTPromiseRejectBlock) {
174
+ schedulerQueue.async { [weak self] in
175
+ let snapshot = self?.buildCompositeSample() ?? [:]
176
+ resolve(snapshot)
177
+ }
178
+ }
179
+
180
+ @objc func setProfilerConfig(_ config: NSDictionary,
181
+ resolver resolve: @escaping RCTPromiseResolveBlock,
182
+ rejecter reject: @escaping RCTPromiseRejectBlock) {
183
+ if let thresholds = config["incidentThresholds"] as? [String: Any] {
184
+ incidentDetector?.updateThresholds(thresholds)
185
+ }
186
+ resolve(true)
187
+ }
188
+
189
+ @objc func markProfilerSpan(_ spanName: String,
190
+ spanId: String,
191
+ metadata: NSDictionary?,
192
+ resolver resolve: @escaping RCTPromiseResolveBlock,
193
+ rejecter reject: @escaping RCTPromiseRejectBlock) {
194
+ resolve(true) // Phase 4
195
+ }
196
+
197
+ @objc func endProfilerSpan(_ spanId: String,
198
+ resolver resolve: @escaping RCTPromiseResolveBlock,
199
+ rejecter reject: @escaping RCTPromiseRejectBlock) {
200
+ resolve(true) // Phase 4
201
+ }
202
+
203
+ @objc func markProfilerInteraction(_ interactionId: String,
204
+ interactionName: String,
205
+ resolver resolve: @escaping RCTPromiseResolveBlock,
206
+ rejecter reject: @escaping RCTPromiseRejectBlock) {
207
+ resolve(true) // Phase 4
208
+ }
209
+
210
+ @objc func flushProfilerExport(_ resolve: @escaping RCTPromiseResolveBlock,
211
+ rejecter reject: @escaping RCTPromiseRejectBlock) {
212
+ resolve(["status": "export_not_yet_implemented"])
213
+ }
214
+
215
+ @objc func getProfilerCapabilities(_ resolve: @escaping RCTPromiseResolveBlock,
216
+ rejecter reject: @escaping RCTPromiseRejectBlock) {
217
+ resolve(buildCapabilities())
218
+ }
219
+
220
+ @objc func setCurrentScreen(_ screenName: String,
221
+ resolver resolve: @escaping RCTPromiseResolveBlock,
222
+ rejecter reject: @escaping RCTPromiseRejectBlock) {
223
+ currentScreen = screenName
224
+ resolve(true)
225
+ }
226
+
227
+ @objc func setSessionId(_ sessionId: String,
228
+ resolver resolve: @escaping RCTPromiseResolveBlock,
229
+ rejecter reject: @escaping RCTPromiseRejectBlock) {
230
+ self.sessionId = sessionId
231
+ resolve(true)
232
+ }
233
+
234
+ // ─── Scheduler ──────────────────────────────────────────────────────
235
+
236
+ private func startCompositeTimer() {
237
+ let timer = DispatchSource.makeTimerSource(queue: schedulerQueue)
238
+ timer.schedule(deadline: .now() + .milliseconds(Int(compositeIntervalMs + 200)),
239
+ repeating: .milliseconds(Int(compositeIntervalMs)))
240
+ timer.setEventHandler { [weak self] in
241
+ self?.emitCompositeBatch()
242
+ }
243
+ timer.resume()
244
+ compositeTimer = timer
245
+ }
246
+
247
+ private func startThreadTimer() {
248
+ let timer = DispatchSource.makeTimerSource(queue: schedulerQueue)
249
+ timer.schedule(deadline: .now() + .milliseconds(Int(threadIntervalMs + 500)),
250
+ repeating: .milliseconds(Int(threadIntervalMs)))
251
+ timer.setEventHandler { [weak self] in
252
+ self?.emitThreadSnapshot()
253
+ }
254
+ timer.resume()
255
+ threadTimer = timer
256
+ }
257
+
258
+ private func stopTimers() {
259
+ compositeTimer?.cancel()
260
+ compositeTimer = nil
261
+ threadTimer?.cancel()
262
+ threadTimer = nil
263
+ }
264
+
265
+ // ─── Batch Emission ─────────────────────────────────────────────────
266
+
267
+ private func emitCompositeBatch() {
268
+ guard !paused else { return }
269
+
270
+ let batch = buildCompositeSample()
271
+ sendEvent(withName: "ScaleBunProfiler_SampleBatch", body: batch)
272
+
273
+ // Incident detection
274
+ if let detector = incidentDetector {
275
+ let incidents = detector.evaluate(
276
+ cpu: batch["cpu"] as? [String: Any],
277
+ memory: batch["memory"] as? [String: Any],
278
+ render: batch["render"] as? [String: Any],
279
+ thermal: batch["thermal"] as? [String: Any],
280
+ memoryGrowthRate: memoryCollector?.getGrowthRate(),
281
+ currentScreen: currentScreen
282
+ )
283
+ for incident in incidents {
284
+ sendEvent(withName: "ScaleBunProfiler_Incident", body: incident)
285
+ }
286
+ }
287
+ }
288
+
289
+ private func emitThreadSnapshot() {
290
+ guard !paused, let collector = threadCollector else { return }
291
+ let snapshot = collector.collect()
292
+ sendEvent(withName: "ScaleBunProfiler_ThreadSnapshot", body: snapshot)
293
+ }
294
+
295
+ private func buildCompositeSample() -> [String: Any] {
296
+ batchId += 1
297
+ var batch: [String: Any] = [
298
+ "id": "sample_\(batchId)_\(Int(Date().timeIntervalSince1970 * 1000))",
299
+ "timestamp": Date().timeIntervalSince1970 * 1000,
300
+ "sampleIntervalMs": compositeIntervalMs,
301
+ "screenKey": currentScreen,
302
+ "sessionId": sessionId
303
+ ]
304
+
305
+ if let cpu = cpuCollector?.collect() { batch["cpu"] = cpu }
306
+ if let mem = memoryCollector?.collect() { batch["memory"] = mem }
307
+
308
+ // Render collector must be read from main thread
309
+ var renderData: [String: Any]?
310
+ if Thread.isMainThread {
311
+ renderData = renderCollector?.collect()
312
+ } else {
313
+ DispatchQueue.main.sync {
314
+ renderData = self.renderCollector?.collect()
315
+ }
316
+ }
317
+ if let render = renderData { batch["render"] = render }
318
+
319
+ if let thermal = thermalCollector?.collect() { batch["thermal"] = thermal }
320
+
321
+ return batch
322
+ }
323
+
324
+ // ─── Capabilities ───────────────────────────────────────────────────
325
+
326
+ private func buildCapabilities() -> [String: Any] {
327
+ let osVersion = ProcessInfo.processInfo.operatingSystemVersion
328
+ let versionString = "\(osVersion.majorVersion).\(osVersion.minorVersion).\(osVersion.patchVersion)"
329
+
330
+ var caps: [String: Any] = [
331
+ "platform": "ios",
332
+ "deviceModel": deviceModel(),
333
+ "osVersion": versionString,
334
+ "buildType": isDebugBuild() ? "debug" : "release"
335
+ ]
336
+
337
+ caps["cpu"] = buildCapEntry(
338
+ available: true, minVersion: "iOS 13", liveSupported: true,
339
+ reason: "Thread-sum approach: task_threads + thread_info.cpu_usage (kernel scheduler estimate). Same method as Activity Monitor. Normalized by activeProcessorCount."
340
+ )
341
+
342
+ caps["memory"] = buildCapEntry(
343
+ available: true, minVersion: "iOS 13", liveSupported: true,
344
+ reason: "Physical footprint via task_vm_info, available memory via os_proc_available_memory"
345
+ )
346
+
347
+ caps["threads"] = buildCapEntry(
348
+ available: true, minVersion: "iOS 13", liveSupported: true,
349
+ reason: "App-level thread enumeration via task_threads (Mach API). Shows process threads only, not system-wide. Per-thread CPU% is kernel scheduler estimate. Thread names available via pthread_getname_np. Capped at 50 threads."
350
+ )
351
+
352
+ caps["render"] = buildCapEntry(
353
+ available: true, minVersion: "iOS 13", liveSupported: true,
354
+ reason: "Frame timing via CADisplayLink on main thread"
355
+ )
356
+
357
+ caps["network"] = buildCapEntry(
358
+ available: false, minVersion: "N/A", liveSupported: false,
359
+ reason: "Network profiling via correlation layer (Phase 4)"
360
+ )
361
+
362
+ caps["js"] = buildCapEntry(
363
+ available: true, minVersion: "iOS 13", liveSupported: true,
364
+ reason: "JS event loop stall detection via lightweight heartbeat in JS layer. Opt-in, low overhead."
365
+ )
366
+
367
+ caps["thermal"] = buildCapEntry(
368
+ available: true, minVersion: "iOS 11", liveSupported: true,
369
+ reason: "Thermal state via ProcessInfo.thermalState + NotificationCenter observer"
370
+ )
371
+
372
+ caps["diskIo"] = buildCapEntry(
373
+ available: false, minVersion: "N/A", liveSupported: false,
374
+ reason: "No public disk I/O measurement API on iOS"
375
+ )
376
+
377
+ return caps
378
+ }
379
+
380
+ private func buildCapEntry(available: Bool, minVersion: String, liveSupported: Bool, reason: String? = nil) -> [String: Any] {
381
+ var entry: [String: Any] = [
382
+ "available": available,
383
+ "minVersion": minVersion,
384
+ "currentVersion": "iOS \(ProcessInfo.processInfo.operatingSystemVersion.majorVersion)",
385
+ "liveSupported": liveSupported
386
+ ]
387
+ if let r = reason { entry["reason"] = r }
388
+ return entry
389
+ }
390
+
391
+ private func emitCapabilities() {
392
+ sendEvent(withName: "ScaleBunProfiler_Capabilities", body: buildCapabilities())
393
+ }
394
+
395
+ private func deviceModel() -> String {
396
+ var systemInfo = utsname()
397
+ uname(&systemInfo)
398
+ let modelCode = withUnsafePointer(to: &systemInfo.machine) {
399
+ $0.withMemoryRebound(to: CChar.self, capacity: 1) {
400
+ String(validatingUTF8: $0) ?? "Unknown"
401
+ }
402
+ }
403
+ return modelCode
404
+ }
405
+
406
+ private func isDebugBuild() -> Bool {
407
+ #if DEBUG
408
+ return true
409
+ #else
410
+ return false
411
+ #endif
412
+ }
413
+ }
414
+
415
+ // ═══════════════════════════════════════════════════════════════════════════
416
+ // MARK: - CPU Collector (Thread-Sum approach via task_threads + thread_info)
417
+ // ═══════════════════════════════════════════════════════════════════════════
418
+
419
+ /**
420
+ * IosCpuCollector — Accurate iOS CPU measurement.
421
+ *
422
+ * APPROACH: Thread-sum via task_threads() + thread_info(THREAD_BASIC_INFO).
423
+ *
424
+ * Why thread-sum instead of task_basic_info:
425
+ * - task_basic_info provides accumulated user_time + system_time across the
426
+ * entire process lifetime, INCLUDING terminated threads. Computing a delta
427
+ * over wall clock can include stale values from threads that no longer exist.
428
+ * - thread_info(THREAD_BASIC_INFO).cpu_usage gives the kernel's own
429
+ * scheduler-computed per-thread CPU usage (scale: TH_USAGE_SCALE = 1000).
430
+ * Summing across all live threads gives instantaneous CPU usage.
431
+ *
432
+ * This is the same approach used by Apple's own Activity Monitor and Instruments.
433
+ * All Mach APIs used here are public.
434
+ *
435
+ * NOTE: The result can exceed 100% on multi-core devices (e.g., 400% on a
436
+ * quad-core when all cores are busy). We normalize by activeProcessorCount
437
+ * to get 0–100% "how busy is the device running our process" percentage.
438
+ */
439
+ class IosCpuCollector {
440
+
441
+ func collect() -> [String: Any]? {
442
+ var threadList: thread_act_array_t?
443
+ var threadCount: mach_msg_type_number_t = 0
444
+
445
+ let kr = task_threads(mach_task_self_, &threadList, &threadCount)
446
+ guard kr == KERN_SUCCESS, let threads = threadList else {
447
+ return ["appCpuPercent": 0.0, "availability": "degraded"]
448
+ }
449
+
450
+ var totalCpuUsage: Double = 0.0
451
+ let count = Int(threadCount)
452
+
453
+ for i in 0..<count {
454
+ var info = thread_basic_info_data_t()
455
+ var infoCount = THREAD_BASIC_INFO_COUNT_VAL
456
+
457
+ let result = withUnsafeMutablePointer(to: &info) {
458
+ $0.withMemoryRebound(to: integer_t.self, capacity: Int(infoCount)) {
459
+ thread_info(threads[i], thread_flavor_t(THREAD_BASIC_INFO), $0, &infoCount)
460
+ }
461
+ }
462
+
463
+ if result == KERN_SUCCESS && (info.flags & TH_FLAGS_IDLE) == 0 {
464
+ // cpu_usage is on a scale of 0 to TH_USAGE_SCALE (1000)
465
+ // Convert to percentage: (cpu_usage / TH_USAGE_SCALE) * 100
466
+ totalCpuUsage += Double(info.cpu_usage) / Double(TH_USAGE_SCALE) * 100.0
467
+ }
468
+ }
469
+
470
+ // Deallocate thread list
471
+ let size = MemoryLayout<thread_act_t>.size * count
472
+ vm_deallocate(mach_task_self_, vm_address_t(bitPattern: threads), vm_size_t(size))
473
+
474
+ // Normalize: totalCpuUsage can be > 100% on multi-core.
475
+ // Divide by activeProcessorCount for "percentage of total CPU capacity".
476
+ let coreCount = Double(ProcessInfo.processInfo.activeProcessorCount)
477
+ let normalizedPercent = (totalCpuUsage / max(coreCount, 1.0)).clamped(to: 0...100)
478
+
479
+ return [
480
+ "appCpuPercent": round(normalizedPercent * 10.0) / 10.0,
481
+ // Also export raw multi-core total for tools that want per-core view
482
+ "rawMultiCoreCpuPercent": round(totalCpuUsage * 10.0) / 10.0,
483
+ "processCpuTimeMs": 0.0, // Not tracked in thread-sum approach
484
+ "availability": "available"
485
+ ]
486
+ }
487
+ }
488
+
489
+ private extension Double {
490
+ func clamped(to range: ClosedRange<Double>) -> Double {
491
+ return min(max(self, range.lowerBound), range.upperBound)
492
+ }
493
+ }
494
+
495
+ // ═══════════════════════════════════════════════════════════════════════════
496
+ // MARK: - Memory Collector (task_vm_info + os_proc_available_memory)
497
+ // ═══════════════════════════════════════════════════════════════════════════
498
+
499
+ class IosMemoryCollector {
500
+ private var peakMemoryBytes: UInt64 = 0
501
+ private var prevResidentBytes: UInt64 = 0
502
+ private var prevTimestamp: TimeInterval = 0
503
+
504
+ func collect() -> [String: Any] {
505
+ var result: [String: Any] = [:]
506
+
507
+ // Physical footprint via task_vm_info (Mach API — public)
508
+ var vmInfo = task_vm_info_data_t()
509
+ var vmCount = mach_msg_type_number_t(MemoryLayout<task_vm_info_data_t>.size / MemoryLayout<natural_t>.size)
510
+
511
+ let vmResult = withUnsafeMutablePointer(to: &vmInfo) {
512
+ $0.withMemoryRebound(to: integer_t.self, capacity: Int(vmCount)) {
513
+ task_info(mach_task_self_, task_flavor_t(TASK_VM_INFO), $0, &vmCount)
514
+ }
515
+ }
516
+
517
+ if vmResult == KERN_SUCCESS {
518
+ let physicalFootprint = UInt64(vmInfo.phys_footprint)
519
+ let residentSize = UInt64(vmInfo.resident_size)
520
+ let internalBytes = UInt64(vmInfo.internal)
521
+ let compressedBytes = UInt64(vmInfo.compressed)
522
+
523
+ result["residentBytes"] = physicalFootprint
524
+ result["usedHeapBytes"] = physicalFootprint
525
+ result["totalHeapBytes"] = residentSize
526
+
527
+ if physicalFootprint > peakMemoryBytes {
528
+ peakMemoryBytes = physicalFootprint
529
+ }
530
+ result["peakMemoryBytes"] = peakMemoryBytes
531
+
532
+ prevResidentBytes = physicalFootprint
533
+ prevTimestamp = ProcessInfo.processInfo.systemUptime
534
+ }
535
+
536
+ // Available memory (iOS 13+)
537
+ if #available(iOS 13.0, *) {
538
+ let available = os_proc_available_memory()
539
+ result["availableMemoryBytes"] = available
540
+
541
+ // Pressure level based on available memory
542
+ let pressureLevel: Int
543
+ if available < 50_000_000 { // < 50MB
544
+ pressureLevel = 2 // critical
545
+ } else if available < 200_000_000 { // < 200MB
546
+ pressureLevel = 1 // moderate
547
+ } else {
548
+ pressureLevel = 0 // normal
549
+ }
550
+ result["pressureLevel"] = pressureLevel
551
+ result["lowMemory"] = pressureLevel >= 2
552
+ } else {
553
+ result["pressureLevel"] = 0
554
+ result["lowMemory"] = false
555
+ }
556
+
557
+ result["availability"] = "available"
558
+ return result
559
+ }
560
+
561
+ func getGrowthRate() -> Double? {
562
+ let now = ProcessInfo.processInfo.systemUptime
563
+ guard prevTimestamp > 0, prevResidentBytes > 0 else { return nil }
564
+
565
+ let elapsed = now - prevTimestamp
566
+ guard elapsed > 0 else { return nil }
567
+
568
+ // Re-read current memory
569
+ var vmInfo = task_vm_info_data_t()
570
+ var vmCount = mach_msg_type_number_t(MemoryLayout<task_vm_info_data_t>.size / MemoryLayout<natural_t>.size)
571
+
572
+ let vmResult = withUnsafeMutablePointer(to: &vmInfo) {
573
+ $0.withMemoryRebound(to: integer_t.self, capacity: Int(vmCount)) {
574
+ task_info(mach_task_self_, task_flavor_t(TASK_VM_INFO), $0, &vmCount)
575
+ }
576
+ }
577
+
578
+ guard vmResult == KERN_SUCCESS else { return nil }
579
+
580
+ let current = UInt64(vmInfo.phys_footprint)
581
+ let growth = Int64(current) - Int64(prevResidentBytes)
582
+ return Double(growth) / elapsed
583
+ }
584
+ }
585
+
586
+ // ═══════════════════════════════════════════════════════════════════════════
587
+ // MARK: - Thread Collector (Mach task_threads + thread_info)
588
+ // ═══════════════════════════════════════════════════════════════════════════
589
+
590
+ class IosThreadCollector {
591
+ private var peakThreadCount: Int = 0
592
+
593
+ func collect() -> [String: Any] {
594
+ var result: [String: Any] = [:]
595
+
596
+ var threadList: thread_act_array_t?
597
+ var threadCount: mach_msg_type_number_t = 0
598
+
599
+ let kr = task_threads(mach_task_self_, &threadList, &threadCount)
600
+ guard kr == KERN_SUCCESS, let threads = threadList else {
601
+ result["threadCount"] = 0
602
+ result["peakThreadCount"] = peakThreadCount
603
+ result["availability"] = "degraded"
604
+ return result
605
+ }
606
+
607
+ let count = Int(threadCount)
608
+ if count > peakThreadCount { peakThreadCount = count }
609
+
610
+ var threadArray: [[String: Any]] = []
611
+ let mainThreadId = pthread_mach_thread_np(pthread_self())
612
+
613
+ for i in 0..<min(count, 50) { // Cap at 50 to avoid chatty bridge
614
+ let thread = threads[i]
615
+ var info = thread_basic_info_data_t()
616
+ var infoCount = THREAD_BASIC_INFO_COUNT_VAL
617
+
618
+ let infoResult = withUnsafeMutablePointer(to: &info) {
619
+ $0.withMemoryRebound(to: integer_t.self, capacity: Int(infoCount)) {
620
+ thread_info(thread, thread_flavor_t(THREAD_BASIC_INFO), $0, &infoCount)
621
+ }
622
+ }
623
+
624
+ var threadEntry: [String: Any] = [
625
+ "id": Int(thread)
626
+ ]
627
+
628
+ // Get thread name
629
+ var threadName = [CChar](repeating: 0, count: 256)
630
+ if let pt = pthread_from_mach_thread_np(thread) {
631
+ pthread_getname_np(pt, &threadName, 256)
632
+ }
633
+ let name = String(cString: threadName)
634
+ threadEntry["name"] = name.isEmpty ? "Thread-\(i)" : name
635
+
636
+ // Classify role
637
+ threadEntry["role"] = classifyThread(name: name, machThread: thread, mainThreadId: mainThreadId)
638
+
639
+ if infoResult == KERN_SUCCESS {
640
+ // Thread state
641
+ switch info.run_state {
642
+ case TH_STATE_RUNNING: threadEntry["state"] = "running"
643
+ case TH_STATE_STOPPED: threadEntry["state"] = "blocked"
644
+ case TH_STATE_WAITING: threadEntry["state"] = "waiting"
645
+ case TH_STATE_UNINTERRUPTIBLE: threadEntry["state"] = "blocked"
646
+ case TH_STATE_HALTED: threadEntry["state"] = "sleeping"
647
+ default: threadEntry["state"] = "unknown"
648
+ }
649
+
650
+ // CPU usage for this thread
651
+ let cpuUsage = Double(info.cpu_usage) / Double(TH_USAGE_SCALE) * 100.0
652
+ threadEntry["cpuPercent"] = round(cpuUsage * 10.0) / 10.0
653
+ } else {
654
+ threadEntry["state"] = "unknown"
655
+ }
656
+
657
+ threadArray.append(threadEntry)
658
+ }
659
+
660
+ // Deallocate thread list
661
+ let size = MemoryLayout<thread_act_t>.size * count
662
+ vm_deallocate(mach_task_self_, vm_address_t(bitPattern: threads), vm_size_t(size))
663
+
664
+ result["threads"] = threadArray
665
+ result["threadCount"] = count
666
+ result["peakThreadCount"] = peakThreadCount
667
+ result["availability"] = "available"
668
+
669
+ return result
670
+ }
671
+
672
+ private func classifyThread(name: String, machThread: thread_act_t, mainThreadId: mach_port_t) -> String {
673
+ if machThread == mainThreadId { return "main" }
674
+ let lower = name.lowercased()
675
+ if lower.contains("jsthread") || lower.contains("hermes") || lower.contains("jsc") { return "js" }
676
+ if lower.contains("render") || lower.contains("coreanimation") { return "render" }
677
+ if lower.contains("network") || lower.contains("nsurlsession") || lower.contains("cfnetwork") { return "network" }
678
+ if lower.contains("worker") || lower.contains("dispatch") || lower.contains("pool") { return "worker" }
679
+ if lower.contains("db") || lower.contains("sqlite") || lower.contains("coredata") { return "db" }
680
+ if lower.contains("scalebun") || lower.contains("scalebun") { return "sdk_internal" }
681
+ return "unknown"
682
+ }
683
+ }
684
+
685
+ // ═══════════════════════════════════════════════════════════════════════════
686
+ // MARK: - Render Collector (CADisplayLink)
687
+ // ═══════════════════════════════════════════════════════════════════════════
688
+
689
+ class IosRenderCollector {
690
+ private var displayLink: CADisplayLink?
691
+ private var lastTimestamp: CFTimeInterval = 0
692
+ private var totalFrames: Int = 0
693
+ private var slowFrames: Int = 0
694
+ private var frozenFrames: Int = 0
695
+ private var droppedFrames: Int = 0
696
+ private var maxFrameTimeMs: Double = 0
697
+ private var windowStartTime: CFTimeInterval = 0
698
+ private var framesInWindow: Int = 0
699
+
700
+ // Histogram: [0-8ms, 8-16ms, 16-33ms, 33-50ms, 50-100ms, 100-700ms, 700ms+]
701
+ private var histogram = [Int](repeating: 0, count: 7)
702
+
703
+ private let slowThresholdSec: CFTimeInterval = 1.0 / 60.0 // ~16.67ms
704
+ private let frozenThresholdSec: CFTimeInterval = 0.700
705
+
706
+ /// Start must be called on the main thread.
707
+ func start() {
708
+ guard displayLink == nil else { return }
709
+ displayLink = CADisplayLink(target: self, selector: #selector(onFrame(_:)))
710
+ displayLink?.add(to: .main, forMode: .common)
711
+ windowStartTime = CACurrentMediaTime()
712
+ }
713
+
714
+ func stop() {
715
+ displayLink?.invalidate()
716
+ displayLink = nil
717
+ }
718
+
719
+ @objc private func onFrame(_ link: CADisplayLink) {
720
+ let timestamp = link.timestamp
721
+
722
+ if lastTimestamp > 0 {
723
+ let duration = timestamp - lastTimestamp
724
+ let durationMs = duration * 1000.0
725
+
726
+ totalFrames += 1
727
+ framesInWindow += 1
728
+
729
+ if duration > frozenThresholdSec {
730
+ frozenFrames += 1
731
+ slowFrames += 1
732
+ } else if duration > slowThresholdSec {
733
+ slowFrames += 1
734
+ }
735
+
736
+ let expectedFrame = 1.0 / 60.0
737
+ let dropped = max(0, Int(duration / expectedFrame) - 1)
738
+ if dropped > 0 { droppedFrames += dropped }
739
+
740
+ if durationMs > maxFrameTimeMs { maxFrameTimeMs = durationMs }
741
+
742
+ // Histogram bucket
743
+ let bucket: Int
744
+ switch durationMs {
745
+ case ..<8: bucket = 0
746
+ case ..<16: bucket = 1
747
+ case ..<33: bucket = 2
748
+ case ..<50: bucket = 3
749
+ case ..<100: bucket = 4
750
+ case ..<700: bucket = 5
751
+ default: bucket = 6
752
+ }
753
+ histogram[bucket] += 1
754
+ }
755
+
756
+ lastTimestamp = timestamp
757
+ }
758
+
759
+ /// Collect must be called on the main thread (or via DispatchQueue.main.sync).
760
+ func collect() -> [String: Any] {
761
+ let now = CACurrentMediaTime()
762
+ let windowDuration = now - windowStartTime
763
+
764
+ let fps: Double
765
+ if windowDuration > 0 && framesInWindow > 0 {
766
+ fps = min(Double(framesInWindow) / windowDuration, 120.0)
767
+ } else {
768
+ fps = 0
769
+ }
770
+
771
+ let result: [String: Any] = [
772
+ "fps": round(fps * 10.0) / 10.0,
773
+ "totalFrames": totalFrames,
774
+ "slowFrames": slowFrames,
775
+ "frozenFrames": frozenFrames,
776
+ "droppedFrames": droppedFrames,
777
+ "maxFrameTimeMs": round(maxFrameTimeMs * 100.0) / 100.0,
778
+ "histogram": [
779
+ "0-8ms": histogram[0],
780
+ "8-16ms": histogram[1],
781
+ "16-33ms": histogram[2],
782
+ "33-50ms": histogram[3],
783
+ "50-100ms": histogram[4],
784
+ "100-700ms": histogram[5],
785
+ "700ms+": histogram[6]
786
+ ],
787
+ "availability": displayLink != nil ? "available" : "unavailable"
788
+ ]
789
+
790
+ // Reset window
791
+ windowStartTime = now
792
+ framesInWindow = 0
793
+
794
+ return result
795
+ }
796
+ }
797
+
798
+ // ═══════════════════════════════════════════════════════════════════════════
799
+ // MARK: - Thermal Collector (ProcessInfo.thermalState)
800
+ // ═══════════════════════════════════════════════════════════════════════════
801
+
802
+ class IosThermalCollector {
803
+ private var currentThermalState: Int = 0
804
+
805
+ func start() {
806
+ // Observe thermal state changes
807
+ NotificationCenter.default.addObserver(
808
+ self,
809
+ selector: #selector(thermalStateChanged),
810
+ name: ProcessInfo.thermalStateDidChangeNotification,
811
+ object: nil
812
+ )
813
+ currentThermalState = mapThermalState(ProcessInfo.processInfo.thermalState)
814
+ }
815
+
816
+ func stop() {
817
+ NotificationCenter.default.removeObserver(self)
818
+ }
819
+
820
+ @objc private func thermalStateChanged() {
821
+ currentThermalState = mapThermalState(ProcessInfo.processInfo.thermalState)
822
+ }
823
+
824
+ func collect() -> [String: Any] {
825
+ return [
826
+ "thermalState": currentThermalState,
827
+ "lowPowerMode": ProcessInfo.processInfo.isLowPowerModeEnabled,
828
+ "availability": "available"
829
+ ]
830
+ }
831
+
832
+ private func mapThermalState(_ state: ProcessInfo.ThermalState) -> Int {
833
+ switch state {
834
+ case .nominal: return 0
835
+ case .fair: return 1
836
+ case .serious: return 2
837
+ case .critical: return 3
838
+ @unknown default: return 0
839
+ }
840
+ }
841
+ }
842
+
843
+ // ═══════════════════════════════════════════════════════════════════════════
844
+ // MARK: - Incident Detector
845
+ // ═══════════════════════════════════════════════════════════════════════════
846
+
847
+ class IosIncidentDetector {
848
+ var cpuSpikePercent: Double = 80.0
849
+ var memorySurgeBytesPerSec: Double = 10_485_760.0
850
+ var jankBurstFrameCount: Int = 5
851
+ var frozenFrameMs: Double = 700.0
852
+ var excessiveThreadCount: Int = 50
853
+
854
+ private var cpuSpikeConsecutive = 0
855
+ private let cpuSpikeSustainedCount = 3
856
+ private var lastIncidentTimestamp: TimeInterval = 0
857
+ private let minIncidentIntervalSec: TimeInterval = 5.0
858
+ private var incidentIdCounter: Int64 = 0
859
+
860
+ func updateThresholds(_ thresholds: [String: Any]) {
861
+ if let v = thresholds["cpuSpikePercent"] as? NSNumber { cpuSpikePercent = v.doubleValue }
862
+ if let v = thresholds["memorySurgeBytesPerSec"] as? NSNumber { memorySurgeBytesPerSec = v.doubleValue }
863
+ if let v = thresholds["jankBurstFrameCount"] as? NSNumber { jankBurstFrameCount = v.intValue }
864
+ if let v = thresholds["frozenFrameMs"] as? NSNumber { frozenFrameMs = v.doubleValue }
865
+ if let v = thresholds["excessiveThreadCount"] as? NSNumber { excessiveThreadCount = v.intValue }
866
+ }
867
+
868
+ func evaluate(
869
+ cpu: [String: Any]?,
870
+ memory: [String: Any]?,
871
+ render: [String: Any]?,
872
+ thermal: [String: Any]?,
873
+ memoryGrowthRate: Double?,
874
+ currentScreen: String
875
+ ) -> [[String: Any]] {
876
+ var incidents: [[String: Any]] = []
877
+ let now = Date().timeIntervalSince1970
878
+
879
+ guard now - lastIncidentTimestamp >= minIncidentIntervalSec else { return incidents }
880
+
881
+ // CPU spike
882
+ if let appCpu = cpu?["appCpuPercent"] as? Double {
883
+ if appCpu > cpuSpikePercent {
884
+ cpuSpikeConsecutive += 1
885
+ if cpuSpikeConsecutive >= cpuSpikeSustainedCount {
886
+ incidents.append(buildIncident(
887
+ type: "cpu_spike", title: "CPU Spike Detected",
888
+ severity: appCpu > 95 ? "critical" : "warning",
889
+ confidence: "high",
890
+ cause: "App CPU at \(appCpu)% for \(cpuSpikeConsecutive) consecutive samples",
891
+ description: "Sustained high CPU usage detected.",
892
+ screen: currentScreen, timestamp: now
893
+ ))
894
+ cpuSpikeConsecutive = 0
895
+ lastIncidentTimestamp = now
896
+ }
897
+ } else {
898
+ cpuSpikeConsecutive = 0
899
+ }
900
+ }
901
+
902
+ // Memory surge
903
+ if let rate = memoryGrowthRate, rate > memorySurgeBytesPerSec {
904
+ incidents.append(buildIncident(
905
+ type: "memory_surge", title: "Memory Surge Detected",
906
+ severity: rate > memorySurgeBytesPerSec * 2 ? "critical" : "warning",
907
+ confidence: "medium",
908
+ cause: "Memory growing at \(Int(rate / 1_048_576))MB/s",
909
+ description: "Rapid memory growth detected.",
910
+ screen: currentScreen, timestamp: now
911
+ ))
912
+ lastIncidentTimestamp = now
913
+ }
914
+
915
+ // Frozen frame
916
+ if let maxMs = render?["maxFrameTimeMs"] as? Double, maxMs > frozenFrameMs {
917
+ incidents.append(buildIncident(
918
+ type: "frozen_frame", title: "Frozen Frame Detected",
919
+ severity: maxMs > 2000 ? "critical" : "warning",
920
+ confidence: "high",
921
+ cause: "Frame took \(Int(maxMs))ms",
922
+ description: "A single frame caused visible UI freeze.",
923
+ screen: currentScreen, timestamp: now
924
+ ))
925
+ lastIncidentTimestamp = now
926
+ }
927
+
928
+ // Jank burst
929
+ if let slow = render?["slowFrames"] as? Int, slow >= jankBurstFrameCount {
930
+ incidents.append(buildIncident(
931
+ type: "jank_burst", title: "Jank Burst Detected",
932
+ severity: "warning", confidence: "medium",
933
+ cause: "\(slow) slow frames in sampling window",
934
+ description: "Multiple slow frames indicate UI jank.",
935
+ screen: currentScreen, timestamp: now
936
+ ))
937
+ lastIncidentTimestamp = now
938
+ }
939
+
940
+ // Thermal throttle
941
+ if let state = thermal?["thermalState"] as? Int, state >= 2 {
942
+ incidents.append(buildIncident(
943
+ type: "thermal_throttle",
944
+ title: state >= 3 ? "Critical Thermal State" : "Thermal Throttling",
945
+ severity: state >= 3 ? "critical" : "warning",
946
+ confidence: "high",
947
+ cause: "Thermal state: \(["nominal","fair","serious","critical"][min(state, 3)])",
948
+ description: "Device is thermally throttled, performance may be reduced.",
949
+ screen: currentScreen, timestamp: now
950
+ ))
951
+ lastIncidentTimestamp = now
952
+ }
953
+
954
+ return incidents
955
+ }
956
+
957
+ private func buildIncident(type: String, title: String, severity: String, confidence: String,
958
+ cause: String, description: String, screen: String, timestamp: TimeInterval) -> [String: Any] {
959
+ incidentIdCounter += 1
960
+ return [
961
+ "id": "inc_\(incidentIdCounter)_\(Int(timestamp * 1000))",
962
+ "incidentType": type,
963
+ "title": title,
964
+ "severity": severity,
965
+ "confidence": confidence,
966
+ "likelyCause": cause,
967
+ "description": description,
968
+ "startTimestamp": timestamp * 1000,
969
+ "affectedScreens": screen.isEmpty ? [] : [screen]
970
+ ]
971
+ }
972
+ }