@scalebun/react-native 1.0.2 → 1.0.3

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 (1622) 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 +41 -41
  7. package/android/src/main/java/com/scalebun/core/crash/NativeCrashHandler.kt +79 -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 +966 -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 +104 -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 +100 -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 +63 -63
  78. package/ios/Crash/ScaleBunCrashHandler.swift +67 -67
  79. package/ios/Crash/ScaleBunCrashModule.swift +69 -69
  80. package/ios/Crash/ScaleBunCrashSignalBridge.h +18 -18
  81. package/ios/Crash/ScaleBunCrashSignalBridge.m +131 -131
  82. package/ios/Crash/ScaleBunCrashStorage.swift +46 -46
  83. package/ios/Engage/ScaleBunEngageBridge.m +32 -32
  84. package/ios/Engage/ScaleBunEngageModule.swift +250 -250
  85. package/ios/Engage/ScaleBunPushNotificationCenter.swift +185 -185
  86. package/ios/Ota/BundleDownloader.swift +182 -0
  87. package/ios/Ota/OtaSlotManager.swift +290 -264
  88. package/ios/Ota/ScaleBunOtaBridge.mm +77 -68
  89. package/ios/Ota/ScaleBunOtaEventsModule.swift +61 -0
  90. package/ios/Ota/ScaleBunOtaModule.swift +176 -123
  91. package/ios/Outbox/NativeOutbox.swift +598 -598
  92. package/ios/Outbox/OutboxUploader.swift +431 -431
  93. package/ios/Performance/ScaleBunPerformanceBridge.m +32 -32
  94. package/ios/Performance/ScaleBunPerformanceModule.swift +290 -290
  95. package/ios/PrivacyInfo.xcprivacy +97 -97
  96. package/ios/Profiler/ScaleBunProfilerBridge.m +55 -55
  97. package/ios/Profiler/ScaleBunProfilerModule.swift +972 -972
  98. package/ios/ReplaySdk-Bridging-Header.h +2 -2
  99. package/ios/ReplaySdk.swift +608 -608
  100. package/ios/ReplaySdkBridge.m +94 -94
  101. package/ios/Session/SessionManager.swift +203 -203
  102. package/ios/Skan/ScaleBunSkanBridge.m +14 -14
  103. package/ios/Skan/ScaleBunSkanModule.swift +61 -61
  104. package/ios/Storage/ReplayStorage.swift +61 -61
  105. package/ios/Storage/ScaleBunKvFileStore.swift +125 -125
  106. package/ios/Storage/ScaleBunStorageBridge.mm +72 -72
  107. package/ios/Storage/ScaleBunStorageModule.swift +57 -57
  108. package/ios/Transport/ReplayTransport.swift +70 -70
  109. package/ios/VoiceRecorder.swift +145 -145
  110. package/lib/commonjs/analytics/EventTracker.js +34 -34
  111. package/lib/commonjs/analytics/EventTracker.js.map +1 -1
  112. package/lib/commonjs/analytics/automaticEvents.js +7 -7
  113. package/lib/commonjs/analytics/automaticEvents.js.map +1 -1
  114. package/lib/commonjs/analytics/batching.js +24 -24
  115. package/lib/commonjs/analytics/batching.js.map +1 -1
  116. package/lib/commonjs/analytics/eventLane.js +13 -13
  117. package/lib/commonjs/analytics/eventLane.js.map +1 -1
  118. package/lib/commonjs/bootstrap/FeatureRegistry.js +17 -17
  119. package/lib/commonjs/bootstrap/FeatureRegistry.js.map +1 -1
  120. package/lib/commonjs/bootstrap/SDKBootstrapper.js +64 -42
  121. package/lib/commonjs/bootstrap/SDKBootstrapper.js.map +1 -1
  122. package/lib/commonjs/bucketing/fnv1a32.js +10 -10
  123. package/lib/commonjs/bucketing/fnv1a32.js.map +1 -1
  124. package/lib/commonjs/compat/codepush.js +6 -6
  125. package/lib/commonjs/compat/codepush.js.map +1 -1
  126. package/lib/commonjs/config/ConfigManager.js +20 -20
  127. package/lib/commonjs/config/ConfigManager.js.map +1 -1
  128. package/lib/commonjs/config/configTypes.js.map +1 -1
  129. package/lib/commonjs/core/architecture.js +23 -23
  130. package/lib/commonjs/core/architecture.js.map +1 -1
  131. package/lib/commonjs/core/clock/now.js +2 -2
  132. package/lib/commonjs/core/clock/now.js.map +1 -1
  133. package/lib/commonjs/core/config/defaults.js.map +1 -1
  134. package/lib/commonjs/core/config/schema.js +102 -102
  135. package/lib/commonjs/core/config/schema.js.map +1 -1
  136. package/lib/commonjs/core/constants/endpoints.js +7 -7
  137. package/lib/commonjs/core/constants/endpoints.js.map +1 -1
  138. package/lib/commonjs/core/constants/timings.js +5 -5
  139. package/lib/commonjs/core/constants/timings.js.map +1 -1
  140. package/lib/commonjs/core/constants/version.js +4 -4
  141. package/lib/commonjs/core/constants/version.js.map +1 -1
  142. package/lib/commonjs/core/context/app.js.map +1 -1
  143. package/lib/commonjs/core/context/device.js.map +1 -1
  144. package/lib/commonjs/core/context/session.js.map +1 -1
  145. package/lib/commonjs/core/context/user.js.map +1 -1
  146. package/lib/commonjs/core/contracts/IFeature.js.map +1 -1
  147. package/lib/commonjs/core/di/container.js.map +1 -1
  148. package/lib/commonjs/core/encoding/base64.js +9 -9
  149. package/lib/commonjs/core/encoding/base64.js.map +1 -1
  150. package/lib/commonjs/core/id/deviceId.js +4 -4
  151. package/lib/commonjs/core/id/deviceId.js.map +1 -1
  152. package/lib/commonjs/core/id/sessionId.js.map +1 -1
  153. package/lib/commonjs/core/lifecycle/appLifecycle.js.map +1 -1
  154. package/lib/commonjs/core/lifecycle/crashSafe.js +3 -3
  155. package/lib/commonjs/core/lifecycle/crashSafe.js.map +1 -1
  156. package/lib/commonjs/core/logger/errorClassification.js +30 -30
  157. package/lib/commonjs/core/logger/errorClassification.js.map +1 -1
  158. package/lib/commonjs/core/logger/internalLogger.js.map +1 -1
  159. package/lib/commonjs/core/logger/levels.js.map +1 -1
  160. package/lib/commonjs/crypto/hmacSha256.js +6 -6
  161. package/lib/commonjs/crypto/hmacSha256.js.map +1 -1
  162. package/lib/commonjs/debug/bootstrap.js +26 -26
  163. package/lib/commonjs/debug/bootstrap.js.map +1 -1
  164. package/lib/commonjs/debug/commands.js +10 -10
  165. package/lib/commonjs/debug/commands.js.map +1 -1
  166. package/lib/commonjs/debug/configBuilder.js +6 -6
  167. package/lib/commonjs/debug/configBuilder.js.map +1 -1
  168. package/lib/commonjs/debug/exportBridge.js +17 -17
  169. package/lib/commonjs/debug/exportBridge.js.map +1 -1
  170. package/lib/commonjs/debug/hostResolver.js +10 -10
  171. package/lib/commonjs/debug/hostResolver.js.map +1 -1
  172. package/lib/commonjs/debug/index.js.map +1 -1
  173. package/lib/commonjs/debug/metrics.js.map +1 -1
  174. package/lib/commonjs/debug/perf.js +11 -11
  175. package/lib/commonjs/debug/perf.js.map +1 -1
  176. package/lib/commonjs/debug/perfWiring.js +10 -10
  177. package/lib/commonjs/debug/perfWiring.js.map +1 -1
  178. package/lib/commonjs/debug/protocol.js.map +1 -1
  179. package/lib/commonjs/debug/redaction.js +26 -26
  180. package/lib/commonjs/debug/redaction.js.map +1 -1
  181. package/lib/commonjs/debug/replayWiring.js +11 -11
  182. package/lib/commonjs/debug/replayWiring.js.map +1 -1
  183. package/lib/commonjs/debug/screenTracking.js +7 -7
  184. package/lib/commonjs/debug/screenTracking.js.map +1 -1
  185. package/lib/commonjs/debug/sessionWiring.js +8 -8
  186. package/lib/commonjs/debug/sessionWiring.js.map +1 -1
  187. package/lib/commonjs/debug/stream.js +26 -26
  188. package/lib/commonjs/debug/stream.js.map +1 -1
  189. package/lib/commonjs/debug/transport.js +24 -24
  190. package/lib/commonjs/debug/transport.js.map +1 -1
  191. package/lib/commonjs/features/bugreport/index.js.map +1 -1
  192. package/lib/commonjs/features/crash/CrashFeature.js +27 -9
  193. package/lib/commonjs/features/crash/CrashFeature.js.map +1 -1
  194. package/lib/commonjs/features/crash/CrashReporter.js +28 -28
  195. package/lib/commonjs/features/crash/CrashReporter.js.map +1 -1
  196. package/lib/commonjs/features/crash/NativeCrashFeature.js +7 -7
  197. package/lib/commonjs/features/crash/NativeCrashFeature.js.map +1 -1
  198. package/lib/commonjs/features/crash/capture.js.map +1 -1
  199. package/lib/commonjs/features/crash/globalHandler.js +11 -11
  200. package/lib/commonjs/features/crash/globalHandler.js.map +1 -1
  201. package/lib/commonjs/features/crash/index.js.map +1 -1
  202. package/lib/commonjs/features/crash/nativeCrashBridge.js +19 -19
  203. package/lib/commonjs/features/crash/nativeCrashBridge.js.map +1 -1
  204. package/lib/commonjs/features/crash/rejectionHandler.js +123 -0
  205. package/lib/commonjs/features/crash/rejectionHandler.js.map +1 -0
  206. package/lib/commonjs/features/engage/EngageAnchor.js +3 -3
  207. package/lib/commonjs/features/engage/EngageAnchor.js.map +1 -1
  208. package/lib/commonjs/features/engage/EngageArchetypeRenderers.js +19 -19
  209. package/lib/commonjs/features/engage/EngageArchetypeRenderers.js.map +1 -1
  210. package/lib/commonjs/features/engage/EngageInAppView.js +35 -35
  211. package/lib/commonjs/features/engage/EngageInAppView.js.map +1 -1
  212. package/lib/commonjs/features/engage/EngageInlinePlacement.js +7 -7
  213. package/lib/commonjs/features/engage/EngageInlinePlacement.js.map +1 -1
  214. package/lib/commonjs/features/engage/EngagePromptProvider.js +88 -86
  215. package/lib/commonjs/features/engage/EngagePromptProvider.js.map +1 -1
  216. package/lib/commonjs/features/engage/EngagePromptView.js +18 -18
  217. package/lib/commonjs/features/engage/EngagePromptView.js.map +1 -1
  218. package/lib/commonjs/features/engage/EngageTransport.js +79 -79
  219. package/lib/commonjs/features/engage/EngageTransport.js.map +1 -1
  220. package/lib/commonjs/features/engage/EngageVariantContent.js +10 -10
  221. package/lib/commonjs/features/engage/EngageVariantContent.js.map +1 -1
  222. package/lib/commonjs/features/engage/__test-support__/reactNativeStub.js +7 -7
  223. package/lib/commonjs/features/engage/__test-support__/reactNativeStub.js.map +1 -1
  224. package/lib/commonjs/features/engage/attachmentCapture.js +12 -12
  225. package/lib/commonjs/features/engage/attachmentCapture.js.map +1 -1
  226. package/lib/commonjs/features/engage/captureVoiceAttachment.js +20 -20
  227. package/lib/commonjs/features/engage/captureVoiceAttachment.js.map +1 -1
  228. package/lib/commonjs/features/engage/engageCoachmarkTour.js +4 -4
  229. package/lib/commonjs/features/engage/engageCoachmarkTour.js.map +1 -1
  230. package/lib/commonjs/features/engage/engageGameLogic.js.map +1 -1
  231. package/lib/commonjs/features/engage/engageMediaSizing.js +15 -15
  232. package/lib/commonjs/features/engage/engageMediaSizing.js.map +1 -1
  233. package/lib/commonjs/features/engage/engageMultiStepSheet.js +6 -6
  234. package/lib/commonjs/features/engage/engageMultiStepSheet.js.map +1 -1
  235. package/lib/commonjs/features/engage/engageOutcome.js +6 -6
  236. package/lib/commonjs/features/engage/engageOutcome.js.map +1 -1
  237. package/lib/commonjs/features/engage/engagePushTokenBridge.js +20 -20
  238. package/lib/commonjs/features/engage/engagePushTokenBridge.js.map +1 -1
  239. package/lib/commonjs/features/engage/engageShakeBridge.js +16 -16
  240. package/lib/commonjs/features/engage/engageShakeBridge.js.map +1 -1
  241. package/lib/commonjs/features/engage/engageSignals.js.map +1 -1
  242. package/lib/commonjs/features/engage/engageStoreReviewBridge.js +19 -19
  243. package/lib/commonjs/features/engage/engageStoreReviewBridge.js.map +1 -1
  244. package/lib/commonjs/features/engage/engageTestSeenStore.js +29 -29
  245. package/lib/commonjs/features/engage/engageTestSeenStore.js.map +1 -1
  246. package/lib/commonjs/features/engage/engageThrottle.js +117 -86
  247. package/lib/commonjs/features/engage/engageThrottle.js.map +1 -1
  248. package/lib/commonjs/features/engage/engageTriggerEngine.js +7 -7
  249. package/lib/commonjs/features/engage/engageTriggerEngine.js.map +1 -1
  250. package/lib/commonjs/features/engage/engageTypes.js +33 -33
  251. package/lib/commonjs/features/engage/engageTypes.js.map +1 -1
  252. package/lib/commonjs/features/engage/engageVariantResolver.js +13 -13
  253. package/lib/commonjs/features/engage/engageVariantResolver.js.map +1 -1
  254. package/lib/commonjs/features/engage/engageWindowInsets.js +10 -10
  255. package/lib/commonjs/features/engage/engageWindowInsets.js.map +1 -1
  256. package/lib/commonjs/features/engage/gestureTriggerDetector.js.map +1 -1
  257. package/lib/commonjs/features/engage/transcription/TranscriptionProvider.js +16 -16
  258. package/lib/commonjs/features/engage/transcription/TranscriptionProvider.js.map +1 -1
  259. package/lib/commonjs/features/install-referrer/installReferrer.js +26 -26
  260. package/lib/commonjs/features/install-referrer/installReferrer.js.map +1 -1
  261. package/lib/commonjs/features/journey/ScaleBunDebugRoot.js +28 -28
  262. package/lib/commonjs/features/journey/ScaleBunDebugRoot.js.map +1 -1
  263. package/lib/commonjs/features/journey/ScaleBunFlatList.js +15 -15
  264. package/lib/commonjs/features/journey/ScaleBunFlatList.js.map +1 -1
  265. package/lib/commonjs/features/journey/ScaleBunImpression.js +22 -22
  266. package/lib/commonjs/features/journey/ScaleBunImpression.js.map +1 -1
  267. package/lib/commonjs/features/journey/ScaleBunScrollView.js +20 -20
  268. package/lib/commonjs/features/journey/ScaleBunScrollView.js.map +1 -1
  269. package/lib/commonjs/features/journey/ScaleBunSectionList.js +15 -15
  270. package/lib/commonjs/features/journey/ScaleBunSectionList.js.map +1 -1
  271. package/lib/commonjs/features/journey/calibrationContext.js +12 -12
  272. package/lib/commonjs/features/journey/calibrationContext.js.map +1 -1
  273. package/lib/commonjs/features/journey/gestureBuffer.js +9 -9
  274. package/lib/commonjs/features/journey/gestureBuffer.js.map +1 -1
  275. package/lib/commonjs/features/journey/gestureDetector.js +10 -10
  276. package/lib/commonjs/features/journey/gestureDetector.js.map +1 -1
  277. package/lib/commonjs/features/journey/impression.js +18 -18
  278. package/lib/commonjs/features/journey/impression.js.map +1 -1
  279. package/lib/commonjs/features/journey/journeyManager.js +6 -6
  280. package/lib/commonjs/features/journey/journeyManager.js.map +1 -1
  281. package/lib/commonjs/features/journey/journeyTypes.js +5 -5
  282. package/lib/commonjs/features/journey/journeyTypes.js.map +1 -1
  283. package/lib/commonjs/features/journey/navDetector.js +7 -7
  284. package/lib/commonjs/features/journey/navDetector.js.map +1 -1
  285. package/lib/commonjs/features/journey/screenshotHelper.js +7 -7
  286. package/lib/commonjs/features/journey/screenshotHelper.js.map +1 -1
  287. package/lib/commonjs/features/journey/targetRegistry.js +17 -17
  288. package/lib/commonjs/features/journey/targetRegistry.js.map +1 -1
  289. package/lib/commonjs/features/journey/touchTarget.js +29 -29
  290. package/lib/commonjs/features/journey/touchTarget.js.map +1 -1
  291. package/lib/commonjs/features/navigation/AutoScreenDetector.js +114 -71
  292. package/lib/commonjs/features/navigation/AutoScreenDetector.js.map +1 -1
  293. package/lib/commonjs/features/network/NetworkFeature.js +23 -23
  294. package/lib/commonjs/features/network/NetworkFeature.js.map +1 -1
  295. package/lib/commonjs/features/network/index.js +5 -5
  296. package/lib/commonjs/features/network/index.js.map +1 -1
  297. package/lib/commonjs/features/ota/OtaEventEmitter.js +21 -21
  298. package/lib/commonjs/features/ota/OtaEventEmitter.js.map +1 -1
  299. package/lib/commonjs/features/ota/OtaOrchestrator.js +535 -40
  300. package/lib/commonjs/features/ota/OtaOrchestrator.js.map +1 -1
  301. package/lib/commonjs/features/ota/OtaTypes.js.map +1 -1
  302. package/lib/commonjs/features/ota/environment.js +172 -0
  303. package/lib/commonjs/features/ota/environment.js.map +1 -0
  304. package/lib/commonjs/features/ota/retry.js +96 -0
  305. package/lib/commonjs/features/ota/retry.js.map +1 -0
  306. package/lib/commonjs/features/ota/signature.js +115 -0
  307. package/lib/commonjs/features/ota/signature.js.map +1 -0
  308. package/lib/commonjs/features/ota/useOtaUpdate.js +15 -15
  309. package/lib/commonjs/features/ota/useOtaUpdate.js.map +1 -1
  310. package/lib/commonjs/features/performance/PerformanceFeature.js +26 -26
  311. package/lib/commonjs/features/performance/PerformanceFeature.js.map +1 -1
  312. package/lib/commonjs/features/performance/collectors/AppLaunchCollector.js +13 -13
  313. package/lib/commonjs/features/performance/collectors/AppLaunchCollector.js.map +1 -1
  314. package/lib/commonjs/features/performance/collectors/AutoScreenLoadCollector.js +32 -32
  315. package/lib/commonjs/features/performance/collectors/AutoScreenLoadCollector.js.map +1 -1
  316. package/lib/commonjs/features/performance/collectors/CustomTraceCollector.js +13 -13
  317. package/lib/commonjs/features/performance/collectors/CustomTraceCollector.js.map +1 -1
  318. package/lib/commonjs/features/performance/collectors/FrameMetricsCollector.js +11 -11
  319. package/lib/commonjs/features/performance/collectors/FrameMetricsCollector.js.map +1 -1
  320. package/lib/commonjs/features/performance/collectors/JsStallCollector.js +12 -12
  321. package/lib/commonjs/features/performance/collectors/JsStallCollector.js.map +1 -1
  322. package/lib/commonjs/features/performance/collectors/NetworkPerfCollector.js +10 -10
  323. package/lib/commonjs/features/performance/collectors/NetworkPerfCollector.js.map +1 -1
  324. package/lib/commonjs/features/performance/collectors/ScreenLoadCollector.js +11 -11
  325. package/lib/commonjs/features/performance/collectors/ScreenLoadCollector.js.map +1 -1
  326. package/lib/commonjs/features/performance/collectors/UiHangCollector.js +5 -5
  327. package/lib/commonjs/features/performance/collectors/UiHangCollector.js.map +1 -1
  328. package/lib/commonjs/features/performance/config.js +11 -11
  329. package/lib/commonjs/features/performance/config.js.map +1 -1
  330. package/lib/commonjs/features/performance/getNativePerformanceModule.js +11 -11
  331. package/lib/commonjs/features/performance/getNativePerformanceModule.js.map +1 -1
  332. package/lib/commonjs/features/performance/index.js.map +1 -1
  333. package/lib/commonjs/features/performance/metrics/MetricsEngine.js +13 -13
  334. package/lib/commonjs/features/performance/metrics/MetricsEngine.js.map +1 -1
  335. package/lib/commonjs/features/performance/models.js +8 -8
  336. package/lib/commonjs/features/performance/models.js.map +1 -1
  337. package/lib/commonjs/features/performance/transport/PerformanceTransport.js +6 -6
  338. package/lib/commonjs/features/performance/transport/PerformanceTransport.js.map +1 -1
  339. package/lib/commonjs/features/profiler/ProfilerFeature.js +53 -53
  340. package/lib/commonjs/features/profiler/ProfilerFeature.js.map +1 -1
  341. package/lib/commonjs/features/profiler/config.js +15 -15
  342. package/lib/commonjs/features/profiler/config.js.map +1 -1
  343. package/lib/commonjs/features/profiler/contracts.js +22 -22
  344. package/lib/commonjs/features/profiler/contracts.js.map +1 -1
  345. package/lib/commonjs/features/profiler/index.js.map +1 -1
  346. package/lib/commonjs/features/profiler/models.js +44 -44
  347. package/lib/commonjs/features/profiler/models.js.map +1 -1
  348. package/lib/commonjs/features/profiler/transport/ProfilerTransport.js +9 -9
  349. package/lib/commonjs/features/profiler/transport/ProfilerTransport.js.map +1 -1
  350. package/lib/commonjs/features/replay/bridge/adapters/bridgeAdapter.js +17 -17
  351. package/lib/commonjs/features/replay/bridge/adapters/bridgeAdapter.js.map +1 -1
  352. package/lib/commonjs/features/replay/bridge/eventEmitter.js +8 -8
  353. package/lib/commonjs/features/replay/bridge/eventEmitter.js.map +1 -1
  354. package/lib/commonjs/features/replay/bridge/nativeModule.js +20 -20
  355. package/lib/commonjs/features/replay/bridge/nativeModule.js.map +1 -1
  356. package/lib/commonjs/features/replay/core/clock/clock.js +6 -6
  357. package/lib/commonjs/features/replay/core/clock/clock.js.map +1 -1
  358. package/lib/commonjs/features/replay/core/config/defaults.js +2 -2
  359. package/lib/commonjs/features/replay/core/config/defaults.js.map +1 -1
  360. package/lib/commonjs/features/replay/core/config/validator.js +5 -5
  361. package/lib/commonjs/features/replay/core/config/validator.js.map +1 -1
  362. package/lib/commonjs/features/replay/core/env/environmentDetector.js +10 -10
  363. package/lib/commonjs/features/replay/core/env/environmentDetector.js.map +1 -1
  364. package/lib/commonjs/features/replay/core/errors/safeCall.js +4 -4
  365. package/lib/commonjs/features/replay/core/errors/safeCall.js.map +1 -1
  366. package/lib/commonjs/features/replay/core/ids/sessionId.js +5 -5
  367. package/lib/commonjs/features/replay/core/ids/sessionId.js.map +1 -1
  368. package/lib/commonjs/features/replay/core/logger/logger.js +5 -5
  369. package/lib/commonjs/features/replay/core/logger/logger.js.map +1 -1
  370. package/lib/commonjs/features/replay/core/privacy/privacyTypes.js +4 -4
  371. package/lib/commonjs/features/replay/core/privacy/privacyTypes.js.map +1 -1
  372. package/lib/commonjs/features/replay/core/queue/boundedQueue.js +5 -5
  373. package/lib/commonjs/features/replay/core/queue/boundedQueue.js.map +1 -1
  374. package/lib/commonjs/features/replay/integrations/alert/alertInstrumentation.js +59 -59
  375. package/lib/commonjs/features/replay/integrations/alert/alertInstrumentation.js.map +1 -1
  376. package/lib/commonjs/features/replay/integrations/logs/consoleIntegration.js +19 -19
  377. package/lib/commonjs/features/replay/integrations/logs/consoleIntegration.js.map +1 -1
  378. package/lib/commonjs/features/replay/integrations/network/networkAdapter.js +30 -30
  379. package/lib/commonjs/features/replay/integrations/network/networkAdapter.js.map +1 -1
  380. package/lib/commonjs/features/replay/integrations/react-navigation/navigationIntegration.js +19 -19
  381. package/lib/commonjs/features/replay/integrations/react-navigation/navigationIntegration.js.map +1 -1
  382. package/lib/commonjs/features/replay/integrations/touch/ReplayRoot.js +16 -16
  383. package/lib/commonjs/features/replay/integrations/touch/ReplayRoot.js.map +1 -1
  384. package/lib/commonjs/features/replay/pipeline/batching/batchManager.js +5 -5
  385. package/lib/commonjs/features/replay/pipeline/batching/batchManager.js.map +1 -1
  386. package/lib/commonjs/features/replay/pipeline/envelope/envelopeBuilder.js +5 -5
  387. package/lib/commonjs/features/replay/pipeline/envelope/envelopeBuilder.js.map +1 -1
  388. package/lib/commonjs/features/replay/pipeline/retry/retryPolicy.js +4 -4
  389. package/lib/commonjs/features/replay/pipeline/retry/retryPolicy.js.map +1 -1
  390. package/lib/commonjs/features/replay/pipeline/transport/transportTypes.js +7 -7
  391. package/lib/commonjs/features/replay/pipeline/transport/transportTypes.js.map +1 -1
  392. package/lib/commonjs/features/replay/public/api.js +21 -21
  393. package/lib/commonjs/features/replay/public/api.js.map +1 -1
  394. package/lib/commonjs/features/replay/public/enums.js +5 -5
  395. package/lib/commonjs/features/replay/public/enums.js.map +1 -1
  396. package/lib/commonjs/features/replay/public/types.js.map +1 -1
  397. package/lib/commonjs/features/replay/replay/breadcrumbs/breadcrumbCollector.js +5 -5
  398. package/lib/commonjs/features/replay/replay/breadcrumbs/breadcrumbCollector.js.map +1 -1
  399. package/lib/commonjs/features/replay/replay/frames/frameModels.js +4 -4
  400. package/lib/commonjs/features/replay/replay/frames/frameModels.js.map +1 -1
  401. package/lib/commonjs/features/replay/replay/session/sessionOrchestrator.js +10 -10
  402. package/lib/commonjs/features/replay/replay/session/sessionOrchestrator.js.map +1 -1
  403. package/lib/commonjs/features/replay/replay/timeline/timelineModels.js +4 -4
  404. package/lib/commonjs/features/replay/replay/timeline/timelineModels.js.map +1 -1
  405. package/lib/commonjs/features/replay/transport/BackendReplayTransport.js +13 -13
  406. package/lib/commonjs/features/replay/transport/BackendReplayTransport.js.map +1 -1
  407. package/lib/commonjs/features/replay/transport/CompositeReplayTransport.js +8 -8
  408. package/lib/commonjs/features/replay/transport/CompositeReplayTransport.js.map +1 -1
  409. package/lib/commonjs/features/replay/transport/DesktopReplayTransport.js +14 -14
  410. package/lib/commonjs/features/replay/transport/DesktopReplayTransport.js.map +1 -1
  411. package/lib/commonjs/features/replay/transport/ReplayTransport.js.map +1 -1
  412. package/lib/commonjs/features/session/BackendSessionAdapter.js +358 -153
  413. package/lib/commonjs/features/session/BackendSessionAdapter.js.map +1 -1
  414. package/lib/commonjs/features/session/DesktopSessionTransport.js +14 -14
  415. package/lib/commonjs/features/session/DesktopSessionTransport.js.map +1 -1
  416. package/lib/commonjs/features/session/JourneyEventPipeline.js +19 -19
  417. package/lib/commonjs/features/session/JourneyEventPipeline.js.map +1 -1
  418. package/lib/commonjs/features/session/ReplayCaptureManager.js +123 -123
  419. package/lib/commonjs/features/session/ReplayCaptureManager.js.map +1 -1
  420. package/lib/commonjs/features/session/ScrollTracker.js +17 -17
  421. package/lib/commonjs/features/session/ScrollTracker.js.map +1 -1
  422. package/lib/commonjs/features/session/SessionManager.js +143 -143
  423. package/lib/commonjs/features/session/SessionManager.js.map +1 -1
  424. package/lib/commonjs/features/session/SyncDecisionEngine.js +23 -23
  425. package/lib/commonjs/features/session/SyncDecisionEngine.js.map +1 -1
  426. package/lib/commonjs/features/session/index.js.map +1 -1
  427. package/lib/commonjs/features/session/nativeCapture.js +5 -5
  428. package/lib/commonjs/features/session/nativeCapture.js.map +1 -1
  429. package/lib/commonjs/features/session/outboxFrameCapture.js +15 -15
  430. package/lib/commonjs/features/session/outboxFrameCapture.js.map +1 -1
  431. package/lib/commonjs/features/session/sessionTypes.js +44 -44
  432. package/lib/commonjs/features/session/sessionTypes.js.map +1 -1
  433. package/lib/commonjs/features/skan/skanBridge.js +11 -11
  434. package/lib/commonjs/features/skan/skanBridge.js.map +1 -1
  435. package/lib/commonjs/features/skan/skanConversionManager.js +23 -23
  436. package/lib/commonjs/features/skan/skanConversionManager.js.map +1 -1
  437. package/lib/commonjs/index.js +7 -0
  438. package/lib/commonjs/index.js.map +1 -1
  439. package/lib/commonjs/integrations/fetch/fetchInterceptor.js +21 -21
  440. package/lib/commonjs/integrations/fetch/fetchInterceptor.js.map +1 -1
  441. package/lib/commonjs/integrations/navigation/screenTracker.js.map +1 -1
  442. package/lib/commonjs/integrations/network/bodyCapture.js +69 -69
  443. package/lib/commonjs/integrations/network/bodyCapture.js.map +1 -1
  444. package/lib/commonjs/integrations/xhr/xhrInterceptor.js +24 -24
  445. package/lib/commonjs/integrations/xhr/xhrInterceptor.js.map +1 -1
  446. package/lib/commonjs/metro/index.js +37 -37
  447. package/lib/commonjs/metro/index.js.map +1 -1
  448. package/lib/commonjs/metro/optionalDependencyStub.js.map +1 -1
  449. package/lib/commonjs/metro/optionalModules.js +16 -16
  450. package/lib/commonjs/metro/optionalModules.js.map +1 -1
  451. package/lib/commonjs/pipeline/dispatcher/dispatcher.js.map +1 -1
  452. package/lib/commonjs/pipeline/envelope/envelope.js.map +1 -1
  453. package/lib/commonjs/pipeline/envelope/serializer.js.map +1 -1
  454. package/lib/commonjs/pipeline/processors/dedupe.js.map +1 -1
  455. package/lib/commonjs/pipeline/processors/enrich.js.map +1 -1
  456. package/lib/commonjs/pipeline/processors/sampling.js.map +1 -1
  457. package/lib/commonjs/pipeline/processors/sanitize.js.map +1 -1
  458. package/lib/commonjs/pipeline/queue/flushQueue.js +4 -4
  459. package/lib/commonjs/pipeline/queue/flushQueue.js.map +1 -1
  460. package/lib/commonjs/pipeline/queue/memoryQueue.js.map +1 -1
  461. package/lib/commonjs/pipeline/queue/persistentQueue.js +80 -80
  462. package/lib/commonjs/pipeline/queue/persistentQueue.js.map +1 -1
  463. package/lib/commonjs/pipeline/queue/queuePolicy.js.map +1 -1
  464. package/lib/commonjs/pipeline/scheduler/flushScheduler.js.map +1 -1
  465. package/lib/commonjs/pipeline/scheduler/retryPolicy.js +2 -2
  466. package/lib/commonjs/pipeline/scheduler/retryPolicy.js.map +1 -1
  467. package/lib/commonjs/public/ScaleBunErrorBoundary.js +79 -0
  468. package/lib/commonjs/public/ScaleBunErrorBoundary.js.map +1 -0
  469. package/lib/commonjs/public/ScaleBunFacade.js +274 -274
  470. package/lib/commonjs/public/ScaleBunFacade.js.map +1 -1
  471. package/lib/commonjs/public/ScaleBunProvider.js +3 -3
  472. package/lib/commonjs/public/ScaleBunProvider.js.map +1 -1
  473. package/lib/commonjs/public/typedTracker.js +36 -36
  474. package/lib/commonjs/public/typedTracker.js.map +1 -1
  475. package/lib/commonjs/public/types.js.map +1 -1
  476. package/lib/commonjs/push/PushManager.js +21 -21
  477. package/lib/commonjs/push/PushManager.js.map +1 -1
  478. package/lib/commonjs/push/adapters/ManualAdapter.js +14 -14
  479. package/lib/commonjs/push/adapters/ManualAdapter.js.map +1 -1
  480. package/lib/commonjs/push/adapters/NativeBridgeAdapter.js +17 -17
  481. package/lib/commonjs/push/adapters/NativeBridgeAdapter.js.map +1 -1
  482. package/lib/commonjs/push/adapters/NoopAdapter.js +5 -5
  483. package/lib/commonjs/push/adapters/NoopAdapter.js.map +1 -1
  484. package/lib/commonjs/push/adapters/RNFirebaseMessagingAdapter.js +17 -17
  485. package/lib/commonjs/push/adapters/RNFirebaseMessagingAdapter.js.map +1 -1
  486. package/lib/commonjs/push/adapters/loadMessaging.js +12 -12
  487. package/lib/commonjs/push/adapters/loadMessaging.js.map +1 -1
  488. package/lib/commonjs/push/adapters/loadNotifee.js +12 -12
  489. package/lib/commonjs/push/adapters/loadNotifee.js.map +1 -1
  490. package/lib/commonjs/push/adapters/selectAdapter.js +14 -14
  491. package/lib/commonjs/push/adapters/selectAdapter.js.map +1 -1
  492. package/lib/commonjs/push/detect/capabilities.js +19 -19
  493. package/lib/commonjs/push/detect/capabilities.js.map +1 -1
  494. package/lib/commonjs/push/index.js.map +1 -1
  495. package/lib/commonjs/push/native/nativeNotifications.js +32 -32
  496. package/lib/commonjs/push/native/nativeNotifications.js.map +1 -1
  497. package/lib/commonjs/push/types.js.map +1 -1
  498. package/lib/commonjs/specs/NativeReplaySdk.js +18 -18
  499. package/lib/commonjs/specs/NativeReplaySdk.js.map +1 -1
  500. package/lib/commonjs/specs/NativeScaleBunCrash.js +19 -19
  501. package/lib/commonjs/specs/NativeScaleBunCrash.js.map +1 -1
  502. package/lib/commonjs/specs/NativeScaleBunInstallReferrer.js +14 -14
  503. package/lib/commonjs/specs/NativeScaleBunInstallReferrer.js.map +1 -1
  504. package/lib/commonjs/specs/NativeScaleBunOta.js +21 -21
  505. package/lib/commonjs/specs/NativeScaleBunOta.js.map +1 -1
  506. package/lib/commonjs/specs/NativeScaleBunPerformance.js +15 -15
  507. package/lib/commonjs/specs/NativeScaleBunPerformance.js.map +1 -1
  508. package/lib/commonjs/specs/NativeScaleBunProfiler.js +16 -16
  509. package/lib/commonjs/specs/NativeScaleBunProfiler.js.map +1 -1
  510. package/lib/commonjs/specs/NativeScaleBunStorage.js +29 -29
  511. package/lib/commonjs/specs/NativeScaleBunStorage.js.map +1 -1
  512. package/lib/commonjs/storage/StorageBackend.js +83 -83
  513. package/lib/commonjs/storage/StorageBackend.js.map +1 -1
  514. package/lib/commonjs/storage/db/sqlite.js.map +1 -1
  515. package/lib/commonjs/storage/files/fileStore.js.map +1 -1
  516. package/lib/commonjs/transport/auth/sdkSession.js.map +1 -1
  517. package/lib/commonjs/transport/backoff/exponentialJitter.js +2 -2
  518. package/lib/commonjs/transport/backoff/exponentialJitter.js.map +1 -1
  519. package/lib/commonjs/transport/http/endpoints.js.map +1 -1
  520. package/lib/commonjs/transport/http/httpClient.js +3 -3
  521. package/lib/commonjs/transport/http/httpClient.js.map +1 -1
  522. package/lib/commonjs/transport/rateLimit/retryAfter.js.map +1 -1
  523. package/lib/commonjs/transport/signing/requestSigner.js.map +1 -1
  524. package/lib/commonjs/vendor/protocol/index.js +74 -74
  525. package/lib/commonjs/vendor/protocol/index.js.map +1 -1
  526. package/lib/commonjs/vendor/protocol/internal/validation.js +23 -23
  527. package/lib/commonjs/vendor/protocol/internal/validation.js.map +1 -1
  528. package/lib/commonjs/vendor/sdk-contracts/bridge.js.map +1 -1
  529. package/lib/commonjs/vendor/sdk-contracts/config.js.map +1 -1
  530. package/lib/commonjs/vendor/sdk-contracts/events.js.map +1 -1
  531. package/lib/commonjs/vendor/sdk-contracts/features.js.map +1 -1
  532. package/lib/commonjs/vendor/sdk-contracts/index.js.map +1 -1
  533. package/lib/commonjs/vendor/sdk-contracts/platform.js.map +1 -1
  534. package/lib/commonjs/vendor/sdk-contracts/session-boundary.js.map +1 -1
  535. package/lib/commonjs/vendor/sdk-contracts/session.js.map +1 -1
  536. package/lib/commonjs/vendor/vendor.manifest +10 -10
  537. package/lib/module/analytics/EventTracker.js +34 -34
  538. package/lib/module/analytics/EventTracker.js.map +1 -1
  539. package/lib/module/analytics/automaticEvents.js +7 -7
  540. package/lib/module/analytics/automaticEvents.js.map +1 -1
  541. package/lib/module/analytics/batching.js +24 -24
  542. package/lib/module/analytics/batching.js.map +1 -1
  543. package/lib/module/analytics/eventLane.js +13 -13
  544. package/lib/module/analytics/eventLane.js.map +1 -1
  545. package/lib/module/bootstrap/FeatureRegistry.js +17 -17
  546. package/lib/module/bootstrap/FeatureRegistry.js.map +1 -1
  547. package/lib/module/bootstrap/SDKBootstrapper.js +64 -42
  548. package/lib/module/bootstrap/SDKBootstrapper.js.map +1 -1
  549. package/lib/module/bucketing/fnv1a32.js +10 -10
  550. package/lib/module/bucketing/fnv1a32.js.map +1 -1
  551. package/lib/module/compat/codepush.js +6 -6
  552. package/lib/module/compat/codepush.js.map +1 -1
  553. package/lib/module/config/ConfigManager.js +20 -20
  554. package/lib/module/config/ConfigManager.js.map +1 -1
  555. package/lib/module/config/configTypes.js.map +1 -1
  556. package/lib/module/core/architecture.js +23 -23
  557. package/lib/module/core/architecture.js.map +1 -1
  558. package/lib/module/core/clock/now.js +2 -2
  559. package/lib/module/core/clock/now.js.map +1 -1
  560. package/lib/module/core/config/defaults.js.map +1 -1
  561. package/lib/module/core/config/schema.js +102 -102
  562. package/lib/module/core/config/schema.js.map +1 -1
  563. package/lib/module/core/constants/endpoints.js +7 -7
  564. package/lib/module/core/constants/endpoints.js.map +1 -1
  565. package/lib/module/core/constants/timings.js +5 -5
  566. package/lib/module/core/constants/timings.js.map +1 -1
  567. package/lib/module/core/constants/version.js +4 -4
  568. package/lib/module/core/constants/version.js.map +1 -1
  569. package/lib/module/core/context/app.js.map +1 -1
  570. package/lib/module/core/context/device.js.map +1 -1
  571. package/lib/module/core/context/session.js.map +1 -1
  572. package/lib/module/core/context/user.js.map +1 -1
  573. package/lib/module/core/contracts/IFeature.js.map +1 -1
  574. package/lib/module/core/di/container.js.map +1 -1
  575. package/lib/module/core/encoding/base64.js +9 -9
  576. package/lib/module/core/encoding/base64.js.map +1 -1
  577. package/lib/module/core/id/deviceId.js +4 -4
  578. package/lib/module/core/id/deviceId.js.map +1 -1
  579. package/lib/module/core/id/sessionId.js.map +1 -1
  580. package/lib/module/core/lifecycle/appLifecycle.js.map +1 -1
  581. package/lib/module/core/lifecycle/crashSafe.js +3 -3
  582. package/lib/module/core/lifecycle/crashSafe.js.map +1 -1
  583. package/lib/module/core/logger/errorClassification.js +30 -30
  584. package/lib/module/core/logger/errorClassification.js.map +1 -1
  585. package/lib/module/core/logger/internalLogger.js.map +1 -1
  586. package/lib/module/core/logger/levels.js.map +1 -1
  587. package/lib/module/crypto/hmacSha256.js +6 -6
  588. package/lib/module/crypto/hmacSha256.js.map +1 -1
  589. package/lib/module/debug/bootstrap.js +26 -26
  590. package/lib/module/debug/bootstrap.js.map +1 -1
  591. package/lib/module/debug/commands.js +10 -10
  592. package/lib/module/debug/commands.js.map +1 -1
  593. package/lib/module/debug/configBuilder.js +6 -6
  594. package/lib/module/debug/configBuilder.js.map +1 -1
  595. package/lib/module/debug/exportBridge.js +17 -17
  596. package/lib/module/debug/exportBridge.js.map +1 -1
  597. package/lib/module/debug/hostResolver.js +10 -10
  598. package/lib/module/debug/hostResolver.js.map +1 -1
  599. package/lib/module/debug/index.js +5 -5
  600. package/lib/module/debug/index.js.map +1 -1
  601. package/lib/module/debug/metrics.js.map +1 -1
  602. package/lib/module/debug/perf.js +11 -11
  603. package/lib/module/debug/perf.js.map +1 -1
  604. package/lib/module/debug/perfWiring.js +10 -10
  605. package/lib/module/debug/perfWiring.js.map +1 -1
  606. package/lib/module/debug/protocol.js +11 -11
  607. package/lib/module/debug/protocol.js.map +1 -1
  608. package/lib/module/debug/redaction.js +26 -26
  609. package/lib/module/debug/redaction.js.map +1 -1
  610. package/lib/module/debug/replayWiring.js +11 -11
  611. package/lib/module/debug/replayWiring.js.map +1 -1
  612. package/lib/module/debug/screenTracking.js +7 -7
  613. package/lib/module/debug/screenTracking.js.map +1 -1
  614. package/lib/module/debug/sessionWiring.js +8 -8
  615. package/lib/module/debug/sessionWiring.js.map +1 -1
  616. package/lib/module/debug/stream.js +26 -26
  617. package/lib/module/debug/stream.js.map +1 -1
  618. package/lib/module/debug/transport.js +24 -24
  619. package/lib/module/debug/transport.js.map +1 -1
  620. package/lib/module/features/bugreport/index.js.map +1 -1
  621. package/lib/module/features/crash/CrashFeature.js +27 -9
  622. package/lib/module/features/crash/CrashFeature.js.map +1 -1
  623. package/lib/module/features/crash/CrashReporter.js +28 -28
  624. package/lib/module/features/crash/CrashReporter.js.map +1 -1
  625. package/lib/module/features/crash/NativeCrashFeature.js +7 -7
  626. package/lib/module/features/crash/NativeCrashFeature.js.map +1 -1
  627. package/lib/module/features/crash/capture.js.map +1 -1
  628. package/lib/module/features/crash/globalHandler.js +11 -11
  629. package/lib/module/features/crash/globalHandler.js.map +1 -1
  630. package/lib/module/features/crash/index.js.map +1 -1
  631. package/lib/module/features/crash/nativeCrashBridge.js +19 -19
  632. package/lib/module/features/crash/nativeCrashBridge.js.map +1 -1
  633. package/lib/module/features/crash/rejectionHandler.js +116 -0
  634. package/lib/module/features/crash/rejectionHandler.js.map +1 -0
  635. package/lib/module/features/engage/EngageAnchor.js +3 -3
  636. package/lib/module/features/engage/EngageAnchor.js.map +1 -1
  637. package/lib/module/features/engage/EngageArchetypeRenderers.js +19 -19
  638. package/lib/module/features/engage/EngageArchetypeRenderers.js.map +1 -1
  639. package/lib/module/features/engage/EngageInAppView.js +35 -35
  640. package/lib/module/features/engage/EngageInAppView.js.map +1 -1
  641. package/lib/module/features/engage/EngageInlinePlacement.js +7 -7
  642. package/lib/module/features/engage/EngageInlinePlacement.js.map +1 -1
  643. package/lib/module/features/engage/EngagePromptProvider.js +88 -86
  644. package/lib/module/features/engage/EngagePromptProvider.js.map +1 -1
  645. package/lib/module/features/engage/EngagePromptView.js +18 -18
  646. package/lib/module/features/engage/EngagePromptView.js.map +1 -1
  647. package/lib/module/features/engage/EngageTransport.js +79 -79
  648. package/lib/module/features/engage/EngageTransport.js.map +1 -1
  649. package/lib/module/features/engage/EngageVariantContent.js +10 -10
  650. package/lib/module/features/engage/EngageVariantContent.js.map +1 -1
  651. package/lib/module/features/engage/__test-support__/reactNativeStub.js +7 -7
  652. package/lib/module/features/engage/__test-support__/reactNativeStub.js.map +1 -1
  653. package/lib/module/features/engage/attachmentCapture.js +12 -12
  654. package/lib/module/features/engage/attachmentCapture.js.map +1 -1
  655. package/lib/module/features/engage/captureVoiceAttachment.js +20 -20
  656. package/lib/module/features/engage/captureVoiceAttachment.js.map +1 -1
  657. package/lib/module/features/engage/engageCoachmarkTour.js +4 -4
  658. package/lib/module/features/engage/engageCoachmarkTour.js.map +1 -1
  659. package/lib/module/features/engage/engageGameLogic.js.map +1 -1
  660. package/lib/module/features/engage/engageMediaSizing.js +15 -15
  661. package/lib/module/features/engage/engageMediaSizing.js.map +1 -1
  662. package/lib/module/features/engage/engageMultiStepSheet.js +6 -6
  663. package/lib/module/features/engage/engageMultiStepSheet.js.map +1 -1
  664. package/lib/module/features/engage/engageOutcome.js +6 -6
  665. package/lib/module/features/engage/engageOutcome.js.map +1 -1
  666. package/lib/module/features/engage/engagePushTokenBridge.js +20 -20
  667. package/lib/module/features/engage/engagePushTokenBridge.js.map +1 -1
  668. package/lib/module/features/engage/engageShakeBridge.js +16 -16
  669. package/lib/module/features/engage/engageShakeBridge.js.map +1 -1
  670. package/lib/module/features/engage/engageSignals.js.map +1 -1
  671. package/lib/module/features/engage/engageStoreReviewBridge.js +19 -19
  672. package/lib/module/features/engage/engageStoreReviewBridge.js.map +1 -1
  673. package/lib/module/features/engage/engageTestSeenStore.js +29 -29
  674. package/lib/module/features/engage/engageTestSeenStore.js.map +1 -1
  675. package/lib/module/features/engage/engageThrottle.js +117 -86
  676. package/lib/module/features/engage/engageThrottle.js.map +1 -1
  677. package/lib/module/features/engage/engageTriggerEngine.js +7 -7
  678. package/lib/module/features/engage/engageTriggerEngine.js.map +1 -1
  679. package/lib/module/features/engage/engageTypes.js +33 -33
  680. package/lib/module/features/engage/engageTypes.js.map +1 -1
  681. package/lib/module/features/engage/engageVariantResolver.js +13 -13
  682. package/lib/module/features/engage/engageVariantResolver.js.map +1 -1
  683. package/lib/module/features/engage/engageWindowInsets.js +10 -10
  684. package/lib/module/features/engage/engageWindowInsets.js.map +1 -1
  685. package/lib/module/features/engage/gestureTriggerDetector.js.map +1 -1
  686. package/lib/module/features/engage/transcription/TranscriptionProvider.js +16 -16
  687. package/lib/module/features/engage/transcription/TranscriptionProvider.js.map +1 -1
  688. package/lib/module/features/install-referrer/installReferrer.js +26 -26
  689. package/lib/module/features/install-referrer/installReferrer.js.map +1 -1
  690. package/lib/module/features/journey/ScaleBunDebugRoot.js +28 -28
  691. package/lib/module/features/journey/ScaleBunDebugRoot.js.map +1 -1
  692. package/lib/module/features/journey/ScaleBunFlatList.js +15 -15
  693. package/lib/module/features/journey/ScaleBunFlatList.js.map +1 -1
  694. package/lib/module/features/journey/ScaleBunImpression.js +22 -22
  695. package/lib/module/features/journey/ScaleBunImpression.js.map +1 -1
  696. package/lib/module/features/journey/ScaleBunScrollView.js +20 -20
  697. package/lib/module/features/journey/ScaleBunScrollView.js.map +1 -1
  698. package/lib/module/features/journey/ScaleBunSectionList.js +15 -15
  699. package/lib/module/features/journey/ScaleBunSectionList.js.map +1 -1
  700. package/lib/module/features/journey/calibrationContext.js +12 -12
  701. package/lib/module/features/journey/calibrationContext.js.map +1 -1
  702. package/lib/module/features/journey/gestureBuffer.js +9 -9
  703. package/lib/module/features/journey/gestureBuffer.js.map +1 -1
  704. package/lib/module/features/journey/gestureDetector.js +10 -10
  705. package/lib/module/features/journey/gestureDetector.js.map +1 -1
  706. package/lib/module/features/journey/impression.js +18 -18
  707. package/lib/module/features/journey/impression.js.map +1 -1
  708. package/lib/module/features/journey/journeyManager.js +6 -6
  709. package/lib/module/features/journey/journeyManager.js.map +1 -1
  710. package/lib/module/features/journey/journeyTypes.js +5 -5
  711. package/lib/module/features/journey/journeyTypes.js.map +1 -1
  712. package/lib/module/features/journey/navDetector.js +7 -7
  713. package/lib/module/features/journey/navDetector.js.map +1 -1
  714. package/lib/module/features/journey/screenshotHelper.js +7 -7
  715. package/lib/module/features/journey/screenshotHelper.js.map +1 -1
  716. package/lib/module/features/journey/targetRegistry.js +17 -17
  717. package/lib/module/features/journey/targetRegistry.js.map +1 -1
  718. package/lib/module/features/journey/touchTarget.js +29 -29
  719. package/lib/module/features/journey/touchTarget.js.map +1 -1
  720. package/lib/module/features/navigation/AutoScreenDetector.js +114 -71
  721. package/lib/module/features/navigation/AutoScreenDetector.js.map +1 -1
  722. package/lib/module/features/network/NetworkFeature.js +23 -23
  723. package/lib/module/features/network/NetworkFeature.js.map +1 -1
  724. package/lib/module/features/network/index.js +5 -5
  725. package/lib/module/features/network/index.js.map +1 -1
  726. package/lib/module/features/ota/OtaEventEmitter.js +21 -21
  727. package/lib/module/features/ota/OtaEventEmitter.js.map +1 -1
  728. package/lib/module/features/ota/OtaOrchestrator.js +536 -41
  729. package/lib/module/features/ota/OtaOrchestrator.js.map +1 -1
  730. package/lib/module/features/ota/OtaTypes.js.map +1 -1
  731. package/lib/module/features/ota/environment.js +165 -0
  732. package/lib/module/features/ota/environment.js.map +1 -0
  733. package/lib/module/features/ota/retry.js +87 -0
  734. package/lib/module/features/ota/retry.js.map +1 -0
  735. package/lib/module/features/ota/signature.js +109 -0
  736. package/lib/module/features/ota/signature.js.map +1 -0
  737. package/lib/module/features/ota/useOtaUpdate.js +15 -15
  738. package/lib/module/features/ota/useOtaUpdate.js.map +1 -1
  739. package/lib/module/features/performance/PerformanceFeature.js +26 -26
  740. package/lib/module/features/performance/PerformanceFeature.js.map +1 -1
  741. package/lib/module/features/performance/collectors/AppLaunchCollector.js +13 -13
  742. package/lib/module/features/performance/collectors/AppLaunchCollector.js.map +1 -1
  743. package/lib/module/features/performance/collectors/AutoScreenLoadCollector.js +32 -32
  744. package/lib/module/features/performance/collectors/AutoScreenLoadCollector.js.map +1 -1
  745. package/lib/module/features/performance/collectors/CustomTraceCollector.js +13 -13
  746. package/lib/module/features/performance/collectors/CustomTraceCollector.js.map +1 -1
  747. package/lib/module/features/performance/collectors/FrameMetricsCollector.js +11 -11
  748. package/lib/module/features/performance/collectors/FrameMetricsCollector.js.map +1 -1
  749. package/lib/module/features/performance/collectors/JsStallCollector.js +12 -12
  750. package/lib/module/features/performance/collectors/JsStallCollector.js.map +1 -1
  751. package/lib/module/features/performance/collectors/NetworkPerfCollector.js +10 -10
  752. package/lib/module/features/performance/collectors/NetworkPerfCollector.js.map +1 -1
  753. package/lib/module/features/performance/collectors/ScreenLoadCollector.js +11 -11
  754. package/lib/module/features/performance/collectors/ScreenLoadCollector.js.map +1 -1
  755. package/lib/module/features/performance/collectors/UiHangCollector.js +5 -5
  756. package/lib/module/features/performance/collectors/UiHangCollector.js.map +1 -1
  757. package/lib/module/features/performance/config.js +11 -11
  758. package/lib/module/features/performance/config.js.map +1 -1
  759. package/lib/module/features/performance/getNativePerformanceModule.js +11 -11
  760. package/lib/module/features/performance/getNativePerformanceModule.js.map +1 -1
  761. package/lib/module/features/performance/index.js +2 -2
  762. package/lib/module/features/performance/index.js.map +1 -1
  763. package/lib/module/features/performance/metrics/MetricsEngine.js +13 -13
  764. package/lib/module/features/performance/metrics/MetricsEngine.js.map +1 -1
  765. package/lib/module/features/performance/models.js +8 -8
  766. package/lib/module/features/performance/models.js.map +1 -1
  767. package/lib/module/features/performance/transport/PerformanceTransport.js +6 -6
  768. package/lib/module/features/performance/transport/PerformanceTransport.js.map +1 -1
  769. package/lib/module/features/profiler/ProfilerFeature.js +53 -53
  770. package/lib/module/features/profiler/ProfilerFeature.js.map +1 -1
  771. package/lib/module/features/profiler/config.js +15 -15
  772. package/lib/module/features/profiler/config.js.map +1 -1
  773. package/lib/module/features/profiler/contracts.js +22 -22
  774. package/lib/module/features/profiler/contracts.js.map +1 -1
  775. package/lib/module/features/profiler/index.js +4 -4
  776. package/lib/module/features/profiler/index.js.map +1 -1
  777. package/lib/module/features/profiler/models.js +44 -44
  778. package/lib/module/features/profiler/models.js.map +1 -1
  779. package/lib/module/features/profiler/transport/ProfilerTransport.js +9 -9
  780. package/lib/module/features/profiler/transport/ProfilerTransport.js.map +1 -1
  781. package/lib/module/features/replay/bridge/adapters/bridgeAdapter.js +17 -17
  782. package/lib/module/features/replay/bridge/adapters/bridgeAdapter.js.map +1 -1
  783. package/lib/module/features/replay/bridge/eventEmitter.js +8 -8
  784. package/lib/module/features/replay/bridge/eventEmitter.js.map +1 -1
  785. package/lib/module/features/replay/bridge/nativeModule.js +20 -20
  786. package/lib/module/features/replay/bridge/nativeModule.js.map +1 -1
  787. package/lib/module/features/replay/core/clock/clock.js +6 -6
  788. package/lib/module/features/replay/core/clock/clock.js.map +1 -1
  789. package/lib/module/features/replay/core/config/defaults.js +2 -2
  790. package/lib/module/features/replay/core/config/defaults.js.map +1 -1
  791. package/lib/module/features/replay/core/config/validator.js +5 -5
  792. package/lib/module/features/replay/core/config/validator.js.map +1 -1
  793. package/lib/module/features/replay/core/env/environmentDetector.js +10 -10
  794. package/lib/module/features/replay/core/env/environmentDetector.js.map +1 -1
  795. package/lib/module/features/replay/core/errors/safeCall.js +4 -4
  796. package/lib/module/features/replay/core/errors/safeCall.js.map +1 -1
  797. package/lib/module/features/replay/core/ids/sessionId.js +5 -5
  798. package/lib/module/features/replay/core/ids/sessionId.js.map +1 -1
  799. package/lib/module/features/replay/core/logger/logger.js +5 -5
  800. package/lib/module/features/replay/core/logger/logger.js.map +1 -1
  801. package/lib/module/features/replay/core/privacy/privacyTypes.js +4 -4
  802. package/lib/module/features/replay/core/privacy/privacyTypes.js.map +1 -1
  803. package/lib/module/features/replay/core/queue/boundedQueue.js +5 -5
  804. package/lib/module/features/replay/core/queue/boundedQueue.js.map +1 -1
  805. package/lib/module/features/replay/integrations/alert/alertInstrumentation.js +59 -59
  806. package/lib/module/features/replay/integrations/alert/alertInstrumentation.js.map +1 -1
  807. package/lib/module/features/replay/integrations/logs/consoleIntegration.js +19 -19
  808. package/lib/module/features/replay/integrations/logs/consoleIntegration.js.map +1 -1
  809. package/lib/module/features/replay/integrations/network/networkAdapter.js +30 -30
  810. package/lib/module/features/replay/integrations/network/networkAdapter.js.map +1 -1
  811. package/lib/module/features/replay/integrations/react-navigation/navigationIntegration.js +19 -19
  812. package/lib/module/features/replay/integrations/react-navigation/navigationIntegration.js.map +1 -1
  813. package/lib/module/features/replay/integrations/touch/ReplayRoot.js +16 -16
  814. package/lib/module/features/replay/integrations/touch/ReplayRoot.js.map +1 -1
  815. package/lib/module/features/replay/pipeline/batching/batchManager.js +5 -5
  816. package/lib/module/features/replay/pipeline/batching/batchManager.js.map +1 -1
  817. package/lib/module/features/replay/pipeline/envelope/envelopeBuilder.js +5 -5
  818. package/lib/module/features/replay/pipeline/envelope/envelopeBuilder.js.map +1 -1
  819. package/lib/module/features/replay/pipeline/retry/retryPolicy.js +4 -4
  820. package/lib/module/features/replay/pipeline/retry/retryPolicy.js.map +1 -1
  821. package/lib/module/features/replay/pipeline/transport/transportTypes.js +7 -7
  822. package/lib/module/features/replay/pipeline/transport/transportTypes.js.map +1 -1
  823. package/lib/module/features/replay/public/api.js +21 -21
  824. package/lib/module/features/replay/public/api.js.map +1 -1
  825. package/lib/module/features/replay/public/enums.js +5 -5
  826. package/lib/module/features/replay/public/enums.js.map +1 -1
  827. package/lib/module/features/replay/public/types.js.map +1 -1
  828. package/lib/module/features/replay/replay/breadcrumbs/breadcrumbCollector.js +5 -5
  829. package/lib/module/features/replay/replay/breadcrumbs/breadcrumbCollector.js.map +1 -1
  830. package/lib/module/features/replay/replay/frames/frameModels.js +4 -4
  831. package/lib/module/features/replay/replay/frames/frameModels.js.map +1 -1
  832. package/lib/module/features/replay/replay/session/sessionOrchestrator.js +10 -10
  833. package/lib/module/features/replay/replay/session/sessionOrchestrator.js.map +1 -1
  834. package/lib/module/features/replay/replay/timeline/timelineModels.js +4 -4
  835. package/lib/module/features/replay/replay/timeline/timelineModels.js.map +1 -1
  836. package/lib/module/features/replay/transport/BackendReplayTransport.js +13 -13
  837. package/lib/module/features/replay/transport/BackendReplayTransport.js.map +1 -1
  838. package/lib/module/features/replay/transport/CompositeReplayTransport.js +8 -8
  839. package/lib/module/features/replay/transport/CompositeReplayTransport.js.map +1 -1
  840. package/lib/module/features/replay/transport/DesktopReplayTransport.js +14 -14
  841. package/lib/module/features/replay/transport/DesktopReplayTransport.js.map +1 -1
  842. package/lib/module/features/replay/transport/ReplayTransport.js.map +1 -1
  843. package/lib/module/features/session/BackendSessionAdapter.js +357 -153
  844. package/lib/module/features/session/BackendSessionAdapter.js.map +1 -1
  845. package/lib/module/features/session/DesktopSessionTransport.js +14 -14
  846. package/lib/module/features/session/DesktopSessionTransport.js.map +1 -1
  847. package/lib/module/features/session/JourneyEventPipeline.js +19 -19
  848. package/lib/module/features/session/JourneyEventPipeline.js.map +1 -1
  849. package/lib/module/features/session/ReplayCaptureManager.js +123 -123
  850. package/lib/module/features/session/ReplayCaptureManager.js.map +1 -1
  851. package/lib/module/features/session/ScrollTracker.js +17 -17
  852. package/lib/module/features/session/ScrollTracker.js.map +1 -1
  853. package/lib/module/features/session/SessionManager.js +143 -143
  854. package/lib/module/features/session/SessionManager.js.map +1 -1
  855. package/lib/module/features/session/SyncDecisionEngine.js +23 -23
  856. package/lib/module/features/session/SyncDecisionEngine.js.map +1 -1
  857. package/lib/module/features/session/index.js +5 -5
  858. package/lib/module/features/session/index.js.map +1 -1
  859. package/lib/module/features/session/nativeCapture.js +5 -5
  860. package/lib/module/features/session/nativeCapture.js.map +1 -1
  861. package/lib/module/features/session/outboxFrameCapture.js +15 -15
  862. package/lib/module/features/session/outboxFrameCapture.js.map +1 -1
  863. package/lib/module/features/session/sessionTypes.js +44 -44
  864. package/lib/module/features/session/sessionTypes.js.map +1 -1
  865. package/lib/module/features/skan/skanBridge.js +11 -11
  866. package/lib/module/features/skan/skanBridge.js.map +1 -1
  867. package/lib/module/features/skan/skanConversionManager.js +23 -23
  868. package/lib/module/features/skan/skanConversionManager.js.map +1 -1
  869. package/lib/module/index.js +16 -10
  870. package/lib/module/index.js.map +1 -1
  871. package/lib/module/integrations/fetch/fetchInterceptor.js +21 -21
  872. package/lib/module/integrations/fetch/fetchInterceptor.js.map +1 -1
  873. package/lib/module/integrations/navigation/screenTracker.js.map +1 -1
  874. package/lib/module/integrations/network/bodyCapture.js +69 -69
  875. package/lib/module/integrations/network/bodyCapture.js.map +1 -1
  876. package/lib/module/integrations/xhr/xhrInterceptor.js +24 -24
  877. package/lib/module/integrations/xhr/xhrInterceptor.js.map +1 -1
  878. package/lib/module/metro/index.js +37 -37
  879. package/lib/module/metro/index.js.map +1 -1
  880. package/lib/module/metro/optionalDependencyStub.js +11 -11
  881. package/lib/module/metro/optionalDependencyStub.js.map +1 -1
  882. package/lib/module/metro/optionalModules.js +16 -16
  883. package/lib/module/metro/optionalModules.js.map +1 -1
  884. package/lib/module/pipeline/dispatcher/dispatcher.js.map +1 -1
  885. package/lib/module/pipeline/envelope/envelope.js.map +1 -1
  886. package/lib/module/pipeline/envelope/serializer.js.map +1 -1
  887. package/lib/module/pipeline/processors/dedupe.js.map +1 -1
  888. package/lib/module/pipeline/processors/enrich.js.map +1 -1
  889. package/lib/module/pipeline/processors/sampling.js.map +1 -1
  890. package/lib/module/pipeline/processors/sanitize.js.map +1 -1
  891. package/lib/module/pipeline/queue/flushQueue.js +4 -4
  892. package/lib/module/pipeline/queue/flushQueue.js.map +1 -1
  893. package/lib/module/pipeline/queue/memoryQueue.js.map +1 -1
  894. package/lib/module/pipeline/queue/persistentQueue.js +80 -80
  895. package/lib/module/pipeline/queue/persistentQueue.js.map +1 -1
  896. package/lib/module/pipeline/queue/queuePolicy.js.map +1 -1
  897. package/lib/module/pipeline/scheduler/flushScheduler.js.map +1 -1
  898. package/lib/module/pipeline/scheduler/retryPolicy.js +2 -2
  899. package/lib/module/pipeline/scheduler/retryPolicy.js.map +1 -1
  900. package/lib/module/public/ScaleBunErrorBoundary.js +70 -0
  901. package/lib/module/public/ScaleBunErrorBoundary.js.map +1 -0
  902. package/lib/module/public/ScaleBunFacade.js +274 -274
  903. package/lib/module/public/ScaleBunFacade.js.map +1 -1
  904. package/lib/module/public/ScaleBunProvider.js +3 -3
  905. package/lib/module/public/ScaleBunProvider.js.map +1 -1
  906. package/lib/module/public/typedTracker.js +36 -36
  907. package/lib/module/public/typedTracker.js.map +1 -1
  908. package/lib/module/public/types.js.map +1 -1
  909. package/lib/module/push/PushManager.js +21 -21
  910. package/lib/module/push/PushManager.js.map +1 -1
  911. package/lib/module/push/adapters/ManualAdapter.js +14 -14
  912. package/lib/module/push/adapters/ManualAdapter.js.map +1 -1
  913. package/lib/module/push/adapters/NativeBridgeAdapter.js +17 -17
  914. package/lib/module/push/adapters/NativeBridgeAdapter.js.map +1 -1
  915. package/lib/module/push/adapters/NoopAdapter.js +5 -5
  916. package/lib/module/push/adapters/NoopAdapter.js.map +1 -1
  917. package/lib/module/push/adapters/RNFirebaseMessagingAdapter.js +17 -17
  918. package/lib/module/push/adapters/RNFirebaseMessagingAdapter.js.map +1 -1
  919. package/lib/module/push/adapters/loadMessaging.js +12 -12
  920. package/lib/module/push/adapters/loadMessaging.js.map +1 -1
  921. package/lib/module/push/adapters/loadNotifee.js +12 -12
  922. package/lib/module/push/adapters/loadNotifee.js.map +1 -1
  923. package/lib/module/push/adapters/selectAdapter.js +14 -14
  924. package/lib/module/push/adapters/selectAdapter.js.map +1 -1
  925. package/lib/module/push/detect/capabilities.js +19 -19
  926. package/lib/module/push/detect/capabilities.js.map +1 -1
  927. package/lib/module/push/index.js +3 -3
  928. package/lib/module/push/index.js.map +1 -1
  929. package/lib/module/push/native/nativeNotifications.js +32 -32
  930. package/lib/module/push/native/nativeNotifications.js.map +1 -1
  931. package/lib/module/push/types.js.map +1 -1
  932. package/lib/module/specs/NativeReplaySdk.js +18 -18
  933. package/lib/module/specs/NativeReplaySdk.js.map +1 -1
  934. package/lib/module/specs/NativeScaleBunCrash.js +19 -19
  935. package/lib/module/specs/NativeScaleBunCrash.js.map +1 -1
  936. package/lib/module/specs/NativeScaleBunInstallReferrer.js +14 -14
  937. package/lib/module/specs/NativeScaleBunInstallReferrer.js.map +1 -1
  938. package/lib/module/specs/NativeScaleBunOta.js +21 -21
  939. package/lib/module/specs/NativeScaleBunOta.js.map +1 -1
  940. package/lib/module/specs/NativeScaleBunPerformance.js +15 -15
  941. package/lib/module/specs/NativeScaleBunPerformance.js.map +1 -1
  942. package/lib/module/specs/NativeScaleBunProfiler.js +16 -16
  943. package/lib/module/specs/NativeScaleBunProfiler.js.map +1 -1
  944. package/lib/module/specs/NativeScaleBunStorage.js +29 -29
  945. package/lib/module/specs/NativeScaleBunStorage.js.map +1 -1
  946. package/lib/module/storage/StorageBackend.js +83 -83
  947. package/lib/module/storage/StorageBackend.js.map +1 -1
  948. package/lib/module/storage/db/sqlite.js.map +1 -1
  949. package/lib/module/storage/files/fileStore.js.map +1 -1
  950. package/lib/module/transport/auth/sdkSession.js.map +1 -1
  951. package/lib/module/transport/backoff/exponentialJitter.js +2 -2
  952. package/lib/module/transport/backoff/exponentialJitter.js.map +1 -1
  953. package/lib/module/transport/http/endpoints.js.map +1 -1
  954. package/lib/module/transport/http/httpClient.js +3 -3
  955. package/lib/module/transport/http/httpClient.js.map +1 -1
  956. package/lib/module/transport/rateLimit/retryAfter.js.map +1 -1
  957. package/lib/module/transport/signing/requestSigner.js.map +1 -1
  958. package/lib/module/vendor/protocol/index.js +74 -74
  959. package/lib/module/vendor/protocol/index.js.map +1 -1
  960. package/lib/module/vendor/protocol/internal/validation.js +23 -23
  961. package/lib/module/vendor/protocol/internal/validation.js.map +1 -1
  962. package/lib/module/vendor/sdk-contracts/bridge.js.map +1 -1
  963. package/lib/module/vendor/sdk-contracts/config.js.map +1 -1
  964. package/lib/module/vendor/sdk-contracts/events.js.map +1 -1
  965. package/lib/module/vendor/sdk-contracts/features.js.map +1 -1
  966. package/lib/module/vendor/sdk-contracts/index.js.map +1 -1
  967. package/lib/module/vendor/sdk-contracts/platform.js.map +1 -1
  968. package/lib/module/vendor/sdk-contracts/session-boundary.js.map +1 -1
  969. package/lib/module/vendor/sdk-contracts/session.js.map +1 -1
  970. package/lib/module/vendor/vendor.manifest +10 -10
  971. package/lib/typescript/bootstrap/SDKBootstrapper.d.ts.map +1 -1
  972. package/lib/typescript/features/crash/CrashFeature.d.ts.map +1 -1
  973. package/lib/typescript/features/crash/rejectionHandler.d.ts +46 -0
  974. package/lib/typescript/features/crash/rejectionHandler.d.ts.map +1 -0
  975. package/lib/typescript/features/engage/EngagePromptProvider.d.ts.map +1 -1
  976. package/lib/typescript/features/engage/engageThrottle.d.ts +24 -4
  977. package/lib/typescript/features/engage/engageThrottle.d.ts.map +1 -1
  978. package/lib/typescript/features/engage/engageTypes.d.ts +6 -0
  979. package/lib/typescript/features/engage/engageTypes.d.ts.map +1 -1
  980. package/lib/typescript/features/navigation/AutoScreenDetector.d.ts +9 -0
  981. package/lib/typescript/features/navigation/AutoScreenDetector.d.ts.map +1 -1
  982. package/lib/typescript/features/ota/OtaOrchestrator.d.ts +67 -1
  983. package/lib/typescript/features/ota/OtaOrchestrator.d.ts.map +1 -1
  984. package/lib/typescript/features/ota/OtaTypes.d.ts +42 -0
  985. package/lib/typescript/features/ota/OtaTypes.d.ts.map +1 -1
  986. package/lib/typescript/features/ota/environment.d.ts +99 -0
  987. package/lib/typescript/features/ota/environment.d.ts.map +1 -0
  988. package/lib/typescript/features/ota/retry.d.ts +53 -0
  989. package/lib/typescript/features/ota/retry.d.ts.map +1 -0
  990. package/lib/typescript/features/ota/signature.d.ts +66 -0
  991. package/lib/typescript/features/ota/signature.d.ts.map +1 -0
  992. package/lib/typescript/features/session/BackendSessionAdapter.d.ts +93 -2
  993. package/lib/typescript/features/session/BackendSessionAdapter.d.ts.map +1 -1
  994. package/lib/typescript/index.d.ts +6 -0
  995. package/lib/typescript/index.d.ts.map +1 -1
  996. package/lib/typescript/public/ScaleBunErrorBoundary.d.ts +44 -0
  997. package/lib/typescript/public/ScaleBunErrorBoundary.d.ts.map +1 -0
  998. package/lib/typescript/specs/NativeScaleBunOta.d.ts +11 -0
  999. package/lib/typescript/specs/NativeScaleBunOta.d.ts.map +1 -1
  1000. package/package.json +12 -14
  1001. package/react-native.config.js +24 -24
  1002. package/scalebun-react-native.podspec +37 -37
  1003. package/src/analytics/EventTracker.ts +462 -462
  1004. package/src/analytics/automaticEvents.ts +105 -105
  1005. package/src/analytics/batching.ts +54 -54
  1006. package/src/analytics/eventLane.ts +26 -26
  1007. package/src/bootstrap/FeatureRegistry.ts +81 -81
  1008. package/src/bootstrap/SDKBootstrapper.ts +609 -585
  1009. package/src/bucketing/fnv1a32.ts +40 -40
  1010. package/src/compat/codepush.ts +118 -118
  1011. package/src/config/ConfigManager.ts +167 -167
  1012. package/src/config/configTypes.ts +32 -32
  1013. package/src/core/architecture.ts +39 -39
  1014. package/src/core/clock/now.ts +6 -6
  1015. package/src/core/config/schema.ts +231 -231
  1016. package/src/core/constants/endpoints.ts +9 -9
  1017. package/src/core/constants/timings.ts +23 -23
  1018. package/src/core/constants/version.ts +6 -6
  1019. package/src/core/context/user.ts +26 -26
  1020. package/src/core/contracts/IFeature.ts +53 -53
  1021. package/src/core/di/container.ts +26 -26
  1022. package/src/core/encoding/base64.ts +46 -46
  1023. package/src/core/id/deviceId.ts +51 -51
  1024. package/src/core/lifecycle/appLifecycle.ts +33 -33
  1025. package/src/core/lifecycle/crashSafe.ts +29 -29
  1026. package/src/core/logger/errorClassification.ts +108 -108
  1027. package/src/core/logger/internalLogger.ts +65 -65
  1028. package/src/crypto/hmacSha256.ts +106 -106
  1029. package/src/debug/bootstrap.ts +366 -366
  1030. package/src/debug/commands.ts +597 -597
  1031. package/src/debug/configBuilder.ts +56 -56
  1032. package/src/debug/exportBridge.ts +153 -153
  1033. package/src/debug/hostResolver.ts +34 -34
  1034. package/src/debug/index.ts +25 -25
  1035. package/src/debug/metrics.ts +29 -29
  1036. package/src/debug/perf.ts +212 -212
  1037. package/src/debug/perfWiring.ts +119 -119
  1038. package/src/debug/protocol.ts +58 -58
  1039. package/src/debug/redaction.ts +290 -290
  1040. package/src/debug/replayWiring.ts +147 -147
  1041. package/src/debug/screenTracking.ts +55 -55
  1042. package/src/debug/sessionWiring.ts +59 -59
  1043. package/src/debug/stream.ts +561 -561
  1044. package/src/debug/transport.ts +439 -439
  1045. package/src/features/crash/CrashFeature.ts +71 -52
  1046. package/src/features/crash/CrashReporter.ts +140 -140
  1047. package/src/features/crash/NativeCrashFeature.ts +42 -42
  1048. package/src/features/crash/capture.ts +21 -21
  1049. package/src/features/crash/globalHandler.ts +39 -39
  1050. package/src/features/crash/index.ts +8 -8
  1051. package/src/features/crash/nativeCrashBridge.ts +132 -132
  1052. package/src/features/crash/rejectionHandler.ts +134 -0
  1053. package/src/features/engage/EngageAnchor.tsx +159 -159
  1054. package/src/features/engage/EngageArchetypeRenderers.tsx +3716 -3716
  1055. package/src/features/engage/EngageInAppView.tsx +2678 -2678
  1056. package/src/features/engage/EngageInlinePlacement.tsx +169 -169
  1057. package/src/features/engage/EngagePromptProvider.tsx +1272 -1270
  1058. package/src/features/engage/EngagePromptView.tsx +1364 -1364
  1059. package/src/features/engage/EngageTransport.ts +668 -668
  1060. package/src/features/engage/EngageVariantContent.tsx +1483 -1483
  1061. package/src/features/engage/__test-support__/reactNativeStub.js +40 -40
  1062. package/src/features/engage/attachmentCapture.ts +45 -45
  1063. package/src/features/engage/captureVoiceAttachment.ts +81 -81
  1064. package/src/features/engage/engageCoachmarkTour.ts +120 -120
  1065. package/src/features/engage/engageGameLogic.ts +347 -347
  1066. package/src/features/engage/engageMediaSizing.ts +76 -76
  1067. package/src/features/engage/engageMultiStepSheet.ts +53 -53
  1068. package/src/features/engage/engageOutcome.ts +157 -157
  1069. package/src/features/engage/engagePushTokenBridge.ts +84 -84
  1070. package/src/features/engage/engageShakeBridge.ts +67 -67
  1071. package/src/features/engage/engageSignals.ts +40 -40
  1072. package/src/features/engage/engageStoreReviewBridge.ts +48 -48
  1073. package/src/features/engage/engageTestSeenStore.ts +95 -95
  1074. package/src/features/engage/engageThrottle.ts +478 -440
  1075. package/src/features/engage/engageTriggerEngine.ts +335 -335
  1076. package/src/features/engage/engageTypes.ts +697 -691
  1077. package/src/features/engage/engageVariantResolver.ts +364 -364
  1078. package/src/features/engage/engageWindowInsets.ts +108 -108
  1079. package/src/features/engage/gestureTriggerDetector.ts +83 -83
  1080. package/src/features/engage/transcription/TranscriptionProvider.ts +68 -68
  1081. package/src/features/install-referrer/installReferrer.ts +112 -112
  1082. package/src/features/journey/ScaleBunDebugRoot.tsx +726 -726
  1083. package/src/features/journey/ScaleBunFlatList.tsx +39 -39
  1084. package/src/features/journey/ScaleBunImpression.tsx +109 -109
  1085. package/src/features/journey/ScaleBunScrollView.tsx +72 -72
  1086. package/src/features/journey/ScaleBunSectionList.tsx +39 -39
  1087. package/src/features/journey/calibrationContext.ts +53 -53
  1088. package/src/features/journey/gestureBuffer.ts +59 -59
  1089. package/src/features/journey/gestureDetector.ts +162 -162
  1090. package/src/features/journey/impression.ts +92 -92
  1091. package/src/features/journey/journeyManager.ts +466 -466
  1092. package/src/features/journey/journeyTypes.ts +215 -215
  1093. package/src/features/journey/navDetector.ts +149 -149
  1094. package/src/features/journey/screenshotHelper.ts +137 -137
  1095. package/src/features/journey/targetRegistry.ts +43 -43
  1096. package/src/features/journey/touchTarget.ts +128 -128
  1097. package/src/features/navigation/AutoScreenDetector.ts +503 -448
  1098. package/src/features/network/NetworkFeature.ts +144 -144
  1099. package/src/features/network/index.ts +31 -31
  1100. package/src/features/ota/OtaEventEmitter.ts +128 -128
  1101. package/src/features/ota/OtaOrchestrator.ts +894 -323
  1102. package/src/features/ota/OtaTypes.ts +118 -62
  1103. package/src/features/ota/environment.ts +199 -0
  1104. package/src/features/ota/retry.ts +123 -0
  1105. package/src/features/ota/signature.ts +123 -0
  1106. package/src/features/ota/useOtaUpdate.ts +134 -134
  1107. package/src/features/performance/PerformanceFeature.ts +584 -584
  1108. package/src/features/performance/collectors/AppLaunchCollector.ts +117 -117
  1109. package/src/features/performance/collectors/AutoScreenLoadCollector.ts +258 -258
  1110. package/src/features/performance/collectors/CustomTraceCollector.ts +116 -116
  1111. package/src/features/performance/collectors/FrameMetricsCollector.ts +119 -119
  1112. package/src/features/performance/collectors/JsStallCollector.ts +165 -165
  1113. package/src/features/performance/collectors/NetworkPerfCollector.ts +69 -69
  1114. package/src/features/performance/collectors/ScreenLoadCollector.ts +95 -95
  1115. package/src/features/performance/collectors/UiHangCollector.ts +98 -98
  1116. package/src/features/performance/config.ts +136 -136
  1117. package/src/features/performance/getNativePerformanceModule.ts +38 -38
  1118. package/src/features/performance/index.ts +28 -28
  1119. package/src/features/performance/metrics/MetricsEngine.ts +152 -152
  1120. package/src/features/performance/models.ts +235 -235
  1121. package/src/features/performance/transport/PerformanceTransport.ts +143 -143
  1122. package/src/features/profiler/ProfilerFeature.ts +661 -661
  1123. package/src/features/profiler/config.ts +230 -230
  1124. package/src/features/profiler/contracts.ts +176 -176
  1125. package/src/features/profiler/index.ts +45 -45
  1126. package/src/features/profiler/models.ts +430 -430
  1127. package/src/features/profiler/transport/ProfilerTransport.ts +93 -93
  1128. package/src/features/replay/bridge/adapters/bridgeAdapter.ts +230 -230
  1129. package/src/features/replay/bridge/eventEmitter.ts +176 -176
  1130. package/src/features/replay/bridge/nativeModule.ts +241 -241
  1131. package/src/features/replay/core/clock/clock.ts +38 -38
  1132. package/src/features/replay/core/config/defaults.ts +66 -66
  1133. package/src/features/replay/core/config/validator.ts +113 -113
  1134. package/src/features/replay/core/env/environmentDetector.ts +21 -21
  1135. package/src/features/replay/core/errors/safeCall.ts +34 -34
  1136. package/src/features/replay/core/ids/sessionId.ts +44 -44
  1137. package/src/features/replay/core/logger/logger.ts +40 -40
  1138. package/src/features/replay/core/privacy/privacyTypes.ts +41 -41
  1139. package/src/features/replay/core/queue/boundedQueue.ts +71 -71
  1140. package/src/features/replay/integrations/alert/alertInstrumentation.ts +277 -277
  1141. package/src/features/replay/integrations/logs/consoleIntegration.ts +116 -116
  1142. package/src/features/replay/integrations/network/networkAdapter.ts +128 -128
  1143. package/src/features/replay/integrations/react-navigation/navigationIntegration.ts +89 -89
  1144. package/src/features/replay/integrations/touch/ReplayRoot.tsx +114 -114
  1145. package/src/features/replay/pipeline/batching/batchManager.ts +133 -133
  1146. package/src/features/replay/pipeline/envelope/envelopeBuilder.ts +66 -66
  1147. package/src/features/replay/pipeline/retry/retryPolicy.ts +62 -62
  1148. package/src/features/replay/pipeline/transport/transportTypes.ts +85 -85
  1149. package/src/features/replay/public/api.ts +364 -364
  1150. package/src/features/replay/public/enums.ts +78 -78
  1151. package/src/features/replay/public/types.ts +297 -297
  1152. package/src/features/replay/replay/breadcrumbs/breadcrumbCollector.ts +115 -115
  1153. package/src/features/replay/replay/frames/frameModels.ts +45 -45
  1154. package/src/features/replay/replay/session/sessionOrchestrator.ts +286 -286
  1155. package/src/features/replay/replay/timeline/timelineModels.ts +129 -129
  1156. package/src/features/replay/transport/BackendReplayTransport.ts +215 -215
  1157. package/src/features/replay/transport/CompositeReplayTransport.ts +82 -82
  1158. package/src/features/replay/transport/DesktopReplayTransport.ts +140 -140
  1159. package/src/features/replay/transport/ReplayTransport.ts +84 -84
  1160. package/src/features/session/BackendSessionAdapter.ts +1441 -1233
  1161. package/src/features/session/DesktopSessionTransport.ts +128 -128
  1162. package/src/features/session/JourneyEventPipeline.ts +273 -273
  1163. package/src/features/session/ReplayCaptureManager.ts +946 -946
  1164. package/src/features/session/ScrollTracker.ts +166 -166
  1165. package/src/features/session/SessionManager.ts +1209 -1209
  1166. package/src/features/session/SyncDecisionEngine.ts +117 -117
  1167. package/src/features/session/index.ts +88 -88
  1168. package/src/features/session/nativeCapture.ts +38 -38
  1169. package/src/features/session/outboxFrameCapture.ts +74 -74
  1170. package/src/features/session/sessionTypes.ts +491 -491
  1171. package/src/features/skan/skanBridge.ts +61 -61
  1172. package/src/features/skan/skanConversionManager.ts +173 -173
  1173. package/src/index.ts +197 -191
  1174. package/src/integrations/fetch/fetchInterceptor.ts +182 -182
  1175. package/src/integrations/network/bodyCapture.ts +328 -328
  1176. package/src/integrations/xhr/xhrInterceptor.ts +231 -231
  1177. package/src/metro/index.ts +164 -164
  1178. package/src/metro/optionalDependencyStub.ts +13 -13
  1179. package/src/metro/optionalModules.ts +27 -27
  1180. package/src/pipeline/dispatcher/dispatcher.ts +22 -22
  1181. package/src/pipeline/envelope/envelope.ts +31 -31
  1182. package/src/pipeline/envelope/serializer.ts +14 -14
  1183. package/src/pipeline/processors/enrich.ts +11 -11
  1184. package/src/pipeline/processors/sanitize.ts +23 -23
  1185. package/src/pipeline/queue/flushQueue.ts +144 -144
  1186. package/src/pipeline/queue/memoryQueue.ts +31 -31
  1187. package/src/pipeline/queue/persistentQueue.ts +414 -414
  1188. package/src/pipeline/scheduler/flushScheduler.ts +47 -47
  1189. package/src/pipeline/scheduler/retryPolicy.ts +8 -8
  1190. package/src/public/ScaleBunErrorBoundary.tsx +79 -0
  1191. package/src/public/ScaleBunFacade.ts +1479 -1479
  1192. package/src/public/ScaleBunProvider.tsx +91 -91
  1193. package/src/public/typedTracker.ts +123 -123
  1194. package/src/public/types.ts +312 -312
  1195. package/src/push/PushManager.ts +318 -318
  1196. package/src/push/adapters/ManualAdapter.ts +100 -100
  1197. package/src/push/adapters/NativeBridgeAdapter.ts +142 -142
  1198. package/src/push/adapters/NoopAdapter.ts +46 -46
  1199. package/src/push/adapters/RNFirebaseMessagingAdapter.ts +271 -271
  1200. package/src/push/adapters/loadMessaging.ts +24 -24
  1201. package/src/push/adapters/loadNotifee.ts +29 -29
  1202. package/src/push/adapters/selectAdapter.ts +176 -176
  1203. package/src/push/detect/capabilities.ts +124 -124
  1204. package/src/push/index.ts +22 -22
  1205. package/src/push/native/nativeNotifications.ts +216 -216
  1206. package/src/push/types.ts +159 -159
  1207. package/src/specs/NativeReplaySdk.ts +99 -99
  1208. package/src/specs/NativeScaleBunCrash.ts +36 -36
  1209. package/src/specs/NativeScaleBunInstallReferrer.ts +29 -29
  1210. package/src/specs/NativeScaleBunOta.ts +97 -85
  1211. package/src/specs/NativeScaleBunPerformance.ts +34 -34
  1212. package/src/specs/NativeScaleBunProfiler.ts +41 -41
  1213. package/src/specs/NativeScaleBunStorage.ts +59 -59
  1214. package/src/storage/StorageBackend.ts +272 -272
  1215. package/src/transport/auth/sdkSession.ts +27 -27
  1216. package/src/transport/backoff/exponentialJitter.ts +9 -9
  1217. package/src/transport/http/endpoints.ts +33 -33
  1218. package/src/transport/http/httpClient.ts +73 -73
  1219. package/src/vendor/protocol/index.ts +391 -391
  1220. package/src/vendor/protocol/internal/validation.ts +497 -497
  1221. package/src/vendor/sdk-contracts/bridge.ts +162 -162
  1222. package/src/vendor/sdk-contracts/config.ts +192 -192
  1223. package/src/vendor/sdk-contracts/events.ts +50 -50
  1224. package/src/vendor/sdk-contracts/features.ts +42 -42
  1225. package/src/vendor/sdk-contracts/index.ts +98 -98
  1226. package/src/vendor/sdk-contracts/platform.ts +42 -42
  1227. package/src/vendor/sdk-contracts/session-boundary.ts +55 -55
  1228. package/src/vendor/sdk-contracts/session.ts +225 -225
  1229. package/src/vendor/vendor.manifest +10 -10
  1230. package/android/build/generated/source/buildConfig/debug/com/scalebun/sdk/BuildConfig.java +0 -12
  1231. package/android/build/generated/source/codegen/java/com/scalebun/spec/NativeReplaySdkSpec.java +0 -208
  1232. package/android/build/generated/source/codegen/java/com/scalebun/spec/NativeScaleBunCrashSpec.java +0 -46
  1233. package/android/build/generated/source/codegen/java/com/scalebun/spec/NativeScaleBunInstallReferrerSpec.java +0 -38
  1234. package/android/build/generated/source/codegen/java/com/scalebun/spec/NativeScaleBunOtaSpec.java +0 -63
  1235. package/android/build/generated/source/codegen/java/com/scalebun/spec/NativeScaleBunPerformanceSpec.java +0 -70
  1236. package/android/build/generated/source/codegen/java/com/scalebun/spec/NativeScaleBunProfilerSpec.java +0 -96
  1237. package/android/build/generated/source/codegen/java/com/scalebun/spec/NativeScaleBunStorageSpec.java +0 -50
  1238. package/android/build/generated/source/codegen/jni/CMakeLists.txt +0 -28
  1239. package/android/build/generated/source/codegen/jni/ScaleBunSpec-generated.cpp +0 -554
  1240. package/android/build/generated/source/codegen/jni/ScaleBunSpec.h +0 -79
  1241. package/android/build/generated/source/codegen/jni/react/renderer/components/ScaleBunSpec/ComponentDescriptors.cpp +0 -22
  1242. package/android/build/generated/source/codegen/jni/react/renderer/components/ScaleBunSpec/ComponentDescriptors.h +0 -24
  1243. package/android/build/generated/source/codegen/jni/react/renderer/components/ScaleBunSpec/EventEmitters.cpp +0 -16
  1244. package/android/build/generated/source/codegen/jni/react/renderer/components/ScaleBunSpec/EventEmitters.h +0 -17
  1245. package/android/build/generated/source/codegen/jni/react/renderer/components/ScaleBunSpec/Props.cpp +0 -19
  1246. package/android/build/generated/source/codegen/jni/react/renderer/components/ScaleBunSpec/Props.h +0 -18
  1247. package/android/build/generated/source/codegen/jni/react/renderer/components/ScaleBunSpec/ScaleBunSpecJSI-generated.cpp +0 -595
  1248. package/android/build/generated/source/codegen/jni/react/renderer/components/ScaleBunSpec/ScaleBunSpecJSI.h +0 -1070
  1249. package/android/build/generated/source/codegen/jni/react/renderer/components/ScaleBunSpec/ShadowNodes.cpp +0 -17
  1250. package/android/build/generated/source/codegen/jni/react/renderer/components/ScaleBunSpec/ShadowNodes.h +0 -23
  1251. package/android/build/generated/source/codegen/jni/react/renderer/components/ScaleBunSpec/States.cpp +0 -16
  1252. package/android/build/generated/source/codegen/jni/react/renderer/components/ScaleBunSpec/States.h +0 -20
  1253. package/android/build/generated/source/codegen/schema.json +0 -1
  1254. package/android/build/intermediates/aapt_friendly_merged_manifests/debug/processDebugManifest/aapt/AndroidManifest.xml +0 -20
  1255. package/android/build/intermediates/aapt_friendly_merged_manifests/debug/processDebugManifest/aapt/output-metadata.json +0 -18
  1256. package/android/build/intermediates/aar_metadata/debug/writeDebugAarMetadata/aar-metadata.properties +0 -6
  1257. package/android/build/intermediates/annotation_processor_list/debug/javaPreCompileDebug/annotationProcessors.json +0 -1
  1258. package/android/build/intermediates/compile_library_classes_jar/debug/bundleLibCompileToJarDebug/classes.jar +0 -0
  1259. package/android/build/intermediates/compile_r_class_jar/debug/generateDebugRFile/R.jar +0 -0
  1260. package/android/build/intermediates/compile_symbol_list/debug/generateDebugRFile/R.txt +0 -0
  1261. package/android/build/intermediates/incremental/debug/packageDebugResources/compile-file-map.properties +0 -1
  1262. package/android/build/intermediates/incremental/debug/packageDebugResources/merger.xml +0 -2
  1263. package/android/build/intermediates/incremental/mergeDebugAssets/merger.xml +0 -2
  1264. package/android/build/intermediates/incremental/mergeDebugJniLibFolders/merger.xml +0 -2
  1265. package/android/build/intermediates/incremental/mergeDebugShaders/merger.xml +0 -2
  1266. package/android/build/intermediates/java_res/debug/processDebugJavaRes/out/META-INF/scalebun_react-native_debug.kotlin_module +0 -0
  1267. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/scalebun/sdk/BuildConfig.class +0 -0
  1268. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/scalebun/spec/NativeReplaySdkSpec.class +0 -0
  1269. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/scalebun/spec/NativeScaleBunCrashSpec.class +0 -0
  1270. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/scalebun/spec/NativeScaleBunInstallReferrerSpec.class +0 -0
  1271. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/scalebun/spec/NativeScaleBunOtaSpec.class +0 -0
  1272. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/scalebun/spec/NativeScaleBunPerformanceSpec.class +0 -0
  1273. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/scalebun/spec/NativeScaleBunProfilerSpec.class +0 -0
  1274. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/scalebun/spec/NativeScaleBunStorageSpec.class +0 -0
  1275. package/android/build/intermediates/local_only_symbol_list/debug/parseDebugLocalResources/R-def.txt +0 -2
  1276. package/android/build/intermediates/manifest_merge_blame_file/debug/processDebugManifest/manifest-merger-blame-debug-report.txt +0 -24
  1277. package/android/build/intermediates/merged_manifest/debug/processDebugManifest/AndroidManifest.xml +0 -20
  1278. package/android/build/intermediates/navigation_json/debug/extractDeepLinksDebug/navigation.json +0 -1
  1279. package/android/build/intermediates/nested_resources_validation_report/debug/generateDebugResources/nestedResourcesValidationReport.txt +0 -1
  1280. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/META-INF/scalebun_react-native_debug.kotlin_module +0 -0
  1281. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/core/crash/CrashStorage.class +0 -0
  1282. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/core/crash/NativeCrashHandler$Companion.class +0 -0
  1283. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/core/crash/NativeCrashHandler.class +0 -0
  1284. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/core/performance/ANRWatchdog$HangInfo.class +0 -0
  1285. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/core/performance/ANRWatchdog.class +0 -0
  1286. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/core/performance/AppStartCollector$AppStartInfo.class +0 -0
  1287. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/core/performance/AppStartCollector$Breakdown.class +0 -0
  1288. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/core/performance/AppStartCollector$start$1.class +0 -0
  1289. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/core/performance/AppStartCollector.class +0 -0
  1290. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/core/performance/FrameMetricsCollector$Companion.class +0 -0
  1291. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/core/performance/FrameMetricsCollector$FrameMetricsSnapshot.class +0 -0
  1292. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/core/performance/FrameMetricsCollector$start$1.class +0 -0
  1293. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/core/performance/FrameMetricsCollector$startChoreographerFallback$1.class +0 -0
  1294. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/core/performance/FrameMetricsCollector.class +0 -0
  1295. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/core/performance/PerformanceCore$Listener.class +0 -0
  1296. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/core/performance/PerformanceCore.class +0 -0
  1297. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/profiler/ProfilerModule$Companion.class +0 -0
  1298. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/profiler/ProfilerModule.class +0 -0
  1299. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/profiler/ProfilerPackage.class +0 -0
  1300. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/profiler/ProfilerSpec.class +0 -0
  1301. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/profiler/collectors/CpuCollector.class +0 -0
  1302. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/profiler/collectors/IncidentDetector.class +0 -0
  1303. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/profiler/collectors/MemoryCollector.class +0 -0
  1304. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/profiler/collectors/RenderCollector$frameCallback$1.class +0 -0
  1305. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/profiler/collectors/RenderCollector.class +0 -0
  1306. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/profiler/collectors/SamplerScheduler.class +0 -0
  1307. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/profiler/collectors/SamplerSchedulerKt.class +0 -0
  1308. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/profiler/collectors/ThreadCollector$WhenMappings.class +0 -0
  1309. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/profiler/collectors/ThreadCollector.class +0 -0
  1310. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/ReplaySdkModule$Companion.class +0 -0
  1311. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/ReplaySdkModule$registerConnectivity$cb$1.class +0 -0
  1312. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/ReplaySdkModule.class +0 -0
  1313. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/ReplaySdkPackage.class +0 -0
  1314. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/ReplaySdkSpec.class +0 -0
  1315. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/capture/CaptureReason$Companion.class +0 -0
  1316. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/capture/CaptureReason.class +0 -0
  1317. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/capture/FrameCaptureManager$startFrequencyTimer$1.class +0 -0
  1318. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/capture/FrameCaptureManager.class +0 -0
  1319. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/capture/FrameCaptureScheduler$Companion.class +0 -0
  1320. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/capture/FrameCaptureScheduler$FrameRequest.class +0 -0
  1321. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/capture/FrameCaptureScheduler.class +0 -0
  1322. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/capture/UiStabilityDetector$Companion.class +0 -0
  1323. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/capture/UiStabilityDetector$SettleWatch.class +0 -0
  1324. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/capture/UiStabilityDetector$StabilityWatch.class +0 -0
  1325. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/capture/UiStabilityDetector.class +0 -0
  1326. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/core/CaptureMode$Companion.class +0 -0
  1327. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/core/CaptureMode.class +0 -0
  1328. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/core/ReplayConfig$Companion.class +0 -0
  1329. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/core/ReplayConfig.class +0 -0
  1330. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/core/ReplayLogger.class +0 -0
  1331. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/core/ScreenshotQuality$Companion.class +0 -0
  1332. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/core/ScreenshotQuality.class +0 -0
  1333. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/core/SessionIdGenerator.class +0 -0
  1334. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/core/SessionState.class +0 -0
  1335. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/models/ReplayFrame.class +0 -0
  1336. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/models/ReplaySession.class +0 -0
  1337. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/models/TimelineEvent.class +0 -0
  1338. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/outbox/NativeOutbox$Companion.class +0 -0
  1339. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/outbox/NativeOutbox$enforceLimits$lambda$37$$inlined$sortedBy$1.class +0 -0
  1340. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/outbox/NativeOutbox.class +0 -0
  1341. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/outbox/OutboxUploader$NetResult$NetworkError.class +0 -0
  1342. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/outbox/OutboxUploader$NetResult$Response.class +0 -0
  1343. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/outbox/OutboxUploader$NetResult.class +0 -0
  1344. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/outbox/OutboxUploader$Outcome.class +0 -0
  1345. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/outbox/OutboxUploader$WhenMappings.class +0 -0
  1346. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/outbox/OutboxUploader.class +0 -0
  1347. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/privacy/PrivacyMaskProcessor.class +0 -0
  1348. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/session/SessionManager.class +0 -0
  1349. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/storage/ReplayStorage$enforceStorageLimit$$inlined$sortedBy$1.class +0 -0
  1350. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/storage/ReplayStorage.class +0 -0
  1351. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/timeline/TimelineCollector.class +0 -0
  1352. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/tracking/DialogTouchObserver$start$runnable$1.class +0 -0
  1353. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/tracking/DialogTouchObserver.class +0 -0
  1354. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/tracking/InteractionTracker.class +0 -0
  1355. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/tracking/NativeTouchInterceptor.class +0 -0
  1356. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/tracking/ScreenTracker.class +0 -0
  1357. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/transport/ReplayTransport$UploadResult.class +0 -0
  1358. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/transport/ReplayTransport$upload$2.class +0 -0
  1359. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/transport/ReplayTransport.class +0 -0
  1360. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/voice/VoiceRecorder$Companion.class +0 -0
  1361. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/voice/VoiceRecorder$Result.class +0 -0
  1362. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/voice/VoiceRecorder.class +0 -0
  1363. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/voice/VoiceTranscriber$TranscriptResult.class +0 -0
  1364. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/voice/VoiceTranscriber$listener$1.class +0 -0
  1365. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/replaysdk/voice/VoiceTranscriber.class +0 -0
  1366. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/rn/ScaleBunPackage$Companion.class +0 -0
  1367. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/rn/ScaleBunPackage.class +0 -0
  1368. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/rn/crash/ScaleBunCrashModule$Companion.class +0 -0
  1369. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/rn/crash/ScaleBunCrashModule.class +0 -0
  1370. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/rn/crash/ScaleBunCrashPackage.class +0 -0
  1371. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/rn/crash/ScaleBunCrashSpec.class +0 -0
  1372. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/rn/engage/ScaleBunEngageModule$Companion.class +0 -0
  1373. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/rn/engage/ScaleBunEngageModule$WindowInsetEdges.class +0 -0
  1374. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/rn/engage/ScaleBunEngageModule$shakeListener$1.class +0 -0
  1375. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/rn/engage/ScaleBunEngageModule.class +0 -0
  1376. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/rn/engage/ScaleBunEngagePackage.class +0 -0
  1377. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/rn/engage/ScaleBunNotificationPresenter.class +0 -0
  1378. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/rn/ota/ScaleBunOtaModule$Companion.class +0 -0
  1379. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/rn/ota/ScaleBunOtaModule.class +0 -0
  1380. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/rn/ota/ScaleBunOtaSpec.class +0 -0
  1381. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/rn/ota/SlotManager$Companion.class +0 -0
  1382. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/rn/ota/SlotManager.class +0 -0
  1383. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/rn/performance/PerformanceModule$Companion.class +0 -0
  1384. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/rn/performance/PerformanceModule$coreListener$1.class +0 -0
  1385. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/rn/performance/PerformanceModule.class +0 -0
  1386. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/rn/performance/PerformanceSpec.class +0 -0
  1387. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/rn/referrer/ScaleBunInstallReferrerModule$Companion.class +0 -0
  1388. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/rn/referrer/ScaleBunInstallReferrerModule$getInstallReferrer$1.class +0 -0
  1389. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/rn/referrer/ScaleBunInstallReferrerModule.class +0 -0
  1390. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/rn/referrer/ScaleBunInstallReferrerSpec.class +0 -0
  1391. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/rn/storage/ScaleBunStorageModule$Companion.class +0 -0
  1392. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/rn/storage/ScaleBunStorageModule.class +0 -0
  1393. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/rn/storage/ScaleBunStorageSpec.class +0 -0
  1394. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/sdk/BuildConfig.class +0 -0
  1395. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/spec/NativeReplaySdkSpec.class +0 -0
  1396. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/spec/NativeScaleBunCrashSpec.class +0 -0
  1397. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/spec/NativeScaleBunInstallReferrerSpec.class +0 -0
  1398. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/spec/NativeScaleBunOtaSpec.class +0 -0
  1399. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/spec/NativeScaleBunPerformanceSpec.class +0 -0
  1400. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/spec/NativeScaleBunProfilerSpec.class +0 -0
  1401. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/spec/NativeScaleBunStorageSpec.class +0 -0
  1402. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/storage/KvFileStore$Companion.class +0 -0
  1403. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/scalebun/storage/KvFileStore.class +0 -0
  1404. package/android/build/intermediates/runtime_library_classes_jar/debug/bundleLibRuntimeToJarDebug/classes.jar +0 -0
  1405. package/android/build/intermediates/symbol_list_with_package_name/debug/generateDebugRFile/package-aware-r.txt +0 -1
  1406. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab +0 -0
  1407. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream +0 -0
  1408. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream.len +0 -0
  1409. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.len +0 -0
  1410. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.values.at +0 -0
  1411. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i +0 -0
  1412. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i.len +0 -0
  1413. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab +0 -0
  1414. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream +0 -0
  1415. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream.len +0 -0
  1416. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.len +0 -0
  1417. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.values.at +0 -0
  1418. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i +0 -0
  1419. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i.len +0 -0
  1420. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab +0 -0
  1421. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream +0 -0
  1422. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream.len +0 -0
  1423. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.len +0 -0
  1424. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.values.at +0 -0
  1425. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i +0 -0
  1426. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i.len +0 -0
  1427. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab +0 -0
  1428. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.keystream +0 -0
  1429. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.keystream.len +0 -0
  1430. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.len +0 -0
  1431. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.values.at +0 -0
  1432. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab_i +0 -0
  1433. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab_i.len +0 -0
  1434. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab +0 -0
  1435. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream +0 -0
  1436. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream.len +0 -0
  1437. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.len +0 -0
  1438. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.values.at +0 -0
  1439. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i +0 -0
  1440. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i.len +0 -0
  1441. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab +0 -0
  1442. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.keystream +0 -0
  1443. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.keystream.len +0 -0
  1444. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.len +0 -0
  1445. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.values.at +0 -0
  1446. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab_i +0 -0
  1447. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab_i.len +0 -0
  1448. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab +0 -0
  1449. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream +0 -0
  1450. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream.len +0 -0
  1451. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.len +0 -0
  1452. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.values +0 -0
  1453. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.values.at +0 -0
  1454. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.values.s +0 -1
  1455. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i +0 -0
  1456. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i.len +0 -0
  1457. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab +0 -0
  1458. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream +0 -0
  1459. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream.len +0 -0
  1460. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.len +0 -0
  1461. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.values.at +0 -0
  1462. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i +0 -0
  1463. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i.len +0 -0
  1464. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab +0 -0
  1465. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.keystream +0 -0
  1466. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.keystream.len +0 -0
  1467. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.len +0 -0
  1468. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.values.at +0 -0
  1469. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab_i +0 -0
  1470. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab_i.len +0 -0
  1471. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab +0 -0
  1472. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.keystream +0 -0
  1473. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.keystream.len +0 -0
  1474. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.len +0 -0
  1475. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.values.at +0 -0
  1476. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab_i +0 -0
  1477. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab_i.len +0 -0
  1478. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/counters.tab +0 -2
  1479. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab +0 -0
  1480. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream +0 -0
  1481. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream.len +0 -0
  1482. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.len +0 -0
  1483. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.values.at +0 -0
  1484. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i +0 -0
  1485. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i.len +0 -0
  1486. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab +0 -0
  1487. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream +0 -0
  1488. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream.len +0 -0
  1489. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.len +0 -0
  1490. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.values.at +0 -0
  1491. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i +0 -0
  1492. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i.len +0 -0
  1493. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab +0 -0
  1494. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream +0 -0
  1495. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream.len +0 -0
  1496. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.len +0 -0
  1497. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.values +0 -0
  1498. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.values.at +0 -0
  1499. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.values.s +0 -1
  1500. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab_i +0 -0
  1501. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab_i.len +0 -0
  1502. package/android/build/kotlin/compileDebugKotlin/cacheable/last-build.bin +0 -0
  1503. package/android/build/kotlin/compileDebugKotlin/classpath-snapshot/shrunk-classpath-snapshot.bin +0 -0
  1504. package/android/build/kotlin/compileDebugKotlin/local-state/build-history.bin +0 -0
  1505. package/android/build/outputs/logs/manifest-merger-debug-report.txt +0 -25
  1506. package/android/build/tmp/compileDebugJavaWithJavac/previous-compilation-data.bin +0 -0
  1507. package/android/build/tmp/kotlin-classes/debug/META-INF/scalebun_react-native_debug.kotlin_module +0 -0
  1508. package/android/build/tmp/kotlin-classes/debug/com/scalebun/core/crash/CrashStorage.class +0 -0
  1509. package/android/build/tmp/kotlin-classes/debug/com/scalebun/core/crash/NativeCrashHandler$Companion.class +0 -0
  1510. package/android/build/tmp/kotlin-classes/debug/com/scalebun/core/crash/NativeCrashHandler.class +0 -0
  1511. package/android/build/tmp/kotlin-classes/debug/com/scalebun/core/performance/ANRWatchdog$HangInfo.class +0 -0
  1512. package/android/build/tmp/kotlin-classes/debug/com/scalebun/core/performance/ANRWatchdog.class +0 -0
  1513. package/android/build/tmp/kotlin-classes/debug/com/scalebun/core/performance/AppStartCollector$AppStartInfo.class +0 -0
  1514. package/android/build/tmp/kotlin-classes/debug/com/scalebun/core/performance/AppStartCollector$Breakdown.class +0 -0
  1515. package/android/build/tmp/kotlin-classes/debug/com/scalebun/core/performance/AppStartCollector$start$1.class +0 -0
  1516. package/android/build/tmp/kotlin-classes/debug/com/scalebun/core/performance/AppStartCollector.class +0 -0
  1517. package/android/build/tmp/kotlin-classes/debug/com/scalebun/core/performance/FrameMetricsCollector$Companion.class +0 -0
  1518. package/android/build/tmp/kotlin-classes/debug/com/scalebun/core/performance/FrameMetricsCollector$FrameMetricsSnapshot.class +0 -0
  1519. package/android/build/tmp/kotlin-classes/debug/com/scalebun/core/performance/FrameMetricsCollector$start$1.class +0 -0
  1520. package/android/build/tmp/kotlin-classes/debug/com/scalebun/core/performance/FrameMetricsCollector$startChoreographerFallback$1.class +0 -0
  1521. package/android/build/tmp/kotlin-classes/debug/com/scalebun/core/performance/FrameMetricsCollector.class +0 -0
  1522. package/android/build/tmp/kotlin-classes/debug/com/scalebun/core/performance/PerformanceCore$Listener.class +0 -0
  1523. package/android/build/tmp/kotlin-classes/debug/com/scalebun/core/performance/PerformanceCore.class +0 -0
  1524. package/android/build/tmp/kotlin-classes/debug/com/scalebun/profiler/ProfilerModule$Companion.class +0 -0
  1525. package/android/build/tmp/kotlin-classes/debug/com/scalebun/profiler/ProfilerModule.class +0 -0
  1526. package/android/build/tmp/kotlin-classes/debug/com/scalebun/profiler/ProfilerPackage.class +0 -0
  1527. package/android/build/tmp/kotlin-classes/debug/com/scalebun/profiler/ProfilerSpec.class +0 -0
  1528. package/android/build/tmp/kotlin-classes/debug/com/scalebun/profiler/collectors/CpuCollector.class +0 -0
  1529. package/android/build/tmp/kotlin-classes/debug/com/scalebun/profiler/collectors/IncidentDetector.class +0 -0
  1530. package/android/build/tmp/kotlin-classes/debug/com/scalebun/profiler/collectors/MemoryCollector.class +0 -0
  1531. package/android/build/tmp/kotlin-classes/debug/com/scalebun/profiler/collectors/RenderCollector$frameCallback$1.class +0 -0
  1532. package/android/build/tmp/kotlin-classes/debug/com/scalebun/profiler/collectors/RenderCollector.class +0 -0
  1533. package/android/build/tmp/kotlin-classes/debug/com/scalebun/profiler/collectors/SamplerScheduler.class +0 -0
  1534. package/android/build/tmp/kotlin-classes/debug/com/scalebun/profiler/collectors/SamplerSchedulerKt.class +0 -0
  1535. package/android/build/tmp/kotlin-classes/debug/com/scalebun/profiler/collectors/ThreadCollector$WhenMappings.class +0 -0
  1536. package/android/build/tmp/kotlin-classes/debug/com/scalebun/profiler/collectors/ThreadCollector.class +0 -0
  1537. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/ReplaySdkModule$Companion.class +0 -0
  1538. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/ReplaySdkModule$registerConnectivity$cb$1.class +0 -0
  1539. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/ReplaySdkModule.class +0 -0
  1540. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/ReplaySdkPackage.class +0 -0
  1541. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/ReplaySdkSpec.class +0 -0
  1542. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/capture/CaptureReason$Companion.class +0 -0
  1543. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/capture/CaptureReason.class +0 -0
  1544. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/capture/FrameCaptureManager$startFrequencyTimer$1.class +0 -0
  1545. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/capture/FrameCaptureManager.class +0 -0
  1546. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/capture/FrameCaptureScheduler$Companion.class +0 -0
  1547. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/capture/FrameCaptureScheduler$FrameRequest.class +0 -0
  1548. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/capture/FrameCaptureScheduler.class +0 -0
  1549. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/capture/UiStabilityDetector$Companion.class +0 -0
  1550. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/capture/UiStabilityDetector$SettleWatch.class +0 -0
  1551. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/capture/UiStabilityDetector$StabilityWatch.class +0 -0
  1552. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/capture/UiStabilityDetector.class +0 -0
  1553. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/core/CaptureMode$Companion.class +0 -0
  1554. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/core/CaptureMode.class +0 -0
  1555. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/core/ReplayConfig$Companion.class +0 -0
  1556. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/core/ReplayConfig.class +0 -0
  1557. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/core/ReplayLogger.class +0 -0
  1558. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/core/ScreenshotQuality$Companion.class +0 -0
  1559. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/core/ScreenshotQuality.class +0 -0
  1560. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/core/SessionIdGenerator.class +0 -0
  1561. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/core/SessionState.class +0 -0
  1562. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/models/ReplayFrame.class +0 -0
  1563. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/models/ReplaySession.class +0 -0
  1564. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/models/TimelineEvent.class +0 -0
  1565. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/outbox/NativeOutbox$Companion.class +0 -0
  1566. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/outbox/NativeOutbox$enforceLimits$lambda$37$$inlined$sortedBy$1.class +0 -0
  1567. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/outbox/NativeOutbox.class +0 -0
  1568. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/outbox/OutboxUploader$NetResult$NetworkError.class +0 -0
  1569. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/outbox/OutboxUploader$NetResult$Response.class +0 -0
  1570. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/outbox/OutboxUploader$NetResult.class +0 -0
  1571. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/outbox/OutboxUploader$Outcome.class +0 -0
  1572. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/outbox/OutboxUploader$WhenMappings.class +0 -0
  1573. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/outbox/OutboxUploader.class +0 -0
  1574. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/privacy/PrivacyMaskProcessor.class +0 -0
  1575. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/session/SessionManager.class +0 -0
  1576. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/storage/ReplayStorage$enforceStorageLimit$$inlined$sortedBy$1.class +0 -0
  1577. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/storage/ReplayStorage.class +0 -0
  1578. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/timeline/TimelineCollector.class +0 -0
  1579. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/tracking/DialogTouchObserver$start$runnable$1.class +0 -0
  1580. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/tracking/DialogTouchObserver.class +0 -0
  1581. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/tracking/InteractionTracker.class +0 -0
  1582. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/tracking/NativeTouchInterceptor.class +0 -0
  1583. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/tracking/ScreenTracker.class +0 -0
  1584. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/transport/ReplayTransport$UploadResult.class +0 -0
  1585. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/transport/ReplayTransport$upload$2.class +0 -0
  1586. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/transport/ReplayTransport.class +0 -0
  1587. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/voice/VoiceRecorder$Companion.class +0 -0
  1588. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/voice/VoiceRecorder$Result.class +0 -0
  1589. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/voice/VoiceRecorder.class +0 -0
  1590. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/voice/VoiceTranscriber$TranscriptResult.class +0 -0
  1591. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/voice/VoiceTranscriber$listener$1.class +0 -0
  1592. package/android/build/tmp/kotlin-classes/debug/com/scalebun/replaysdk/voice/VoiceTranscriber.class +0 -0
  1593. package/android/build/tmp/kotlin-classes/debug/com/scalebun/rn/ScaleBunPackage$Companion.class +0 -0
  1594. package/android/build/tmp/kotlin-classes/debug/com/scalebun/rn/ScaleBunPackage.class +0 -0
  1595. package/android/build/tmp/kotlin-classes/debug/com/scalebun/rn/crash/ScaleBunCrashModule$Companion.class +0 -0
  1596. package/android/build/tmp/kotlin-classes/debug/com/scalebun/rn/crash/ScaleBunCrashModule.class +0 -0
  1597. package/android/build/tmp/kotlin-classes/debug/com/scalebun/rn/crash/ScaleBunCrashPackage.class +0 -0
  1598. package/android/build/tmp/kotlin-classes/debug/com/scalebun/rn/crash/ScaleBunCrashSpec.class +0 -0
  1599. package/android/build/tmp/kotlin-classes/debug/com/scalebun/rn/engage/ScaleBunEngageModule$Companion.class +0 -0
  1600. package/android/build/tmp/kotlin-classes/debug/com/scalebun/rn/engage/ScaleBunEngageModule$WindowInsetEdges.class +0 -0
  1601. package/android/build/tmp/kotlin-classes/debug/com/scalebun/rn/engage/ScaleBunEngageModule$shakeListener$1.class +0 -0
  1602. package/android/build/tmp/kotlin-classes/debug/com/scalebun/rn/engage/ScaleBunEngageModule.class +0 -0
  1603. package/android/build/tmp/kotlin-classes/debug/com/scalebun/rn/engage/ScaleBunEngagePackage.class +0 -0
  1604. package/android/build/tmp/kotlin-classes/debug/com/scalebun/rn/engage/ScaleBunNotificationPresenter.class +0 -0
  1605. package/android/build/tmp/kotlin-classes/debug/com/scalebun/rn/ota/ScaleBunOtaModule$Companion.class +0 -0
  1606. package/android/build/tmp/kotlin-classes/debug/com/scalebun/rn/ota/ScaleBunOtaModule.class +0 -0
  1607. package/android/build/tmp/kotlin-classes/debug/com/scalebun/rn/ota/ScaleBunOtaSpec.class +0 -0
  1608. package/android/build/tmp/kotlin-classes/debug/com/scalebun/rn/ota/SlotManager$Companion.class +0 -0
  1609. package/android/build/tmp/kotlin-classes/debug/com/scalebun/rn/ota/SlotManager.class +0 -0
  1610. package/android/build/tmp/kotlin-classes/debug/com/scalebun/rn/performance/PerformanceModule$Companion.class +0 -0
  1611. package/android/build/tmp/kotlin-classes/debug/com/scalebun/rn/performance/PerformanceModule$coreListener$1.class +0 -0
  1612. package/android/build/tmp/kotlin-classes/debug/com/scalebun/rn/performance/PerformanceModule.class +0 -0
  1613. package/android/build/tmp/kotlin-classes/debug/com/scalebun/rn/performance/PerformanceSpec.class +0 -0
  1614. package/android/build/tmp/kotlin-classes/debug/com/scalebun/rn/referrer/ScaleBunInstallReferrerModule$Companion.class +0 -0
  1615. package/android/build/tmp/kotlin-classes/debug/com/scalebun/rn/referrer/ScaleBunInstallReferrerModule$getInstallReferrer$1.class +0 -0
  1616. package/android/build/tmp/kotlin-classes/debug/com/scalebun/rn/referrer/ScaleBunInstallReferrerModule.class +0 -0
  1617. package/android/build/tmp/kotlin-classes/debug/com/scalebun/rn/referrer/ScaleBunInstallReferrerSpec.class +0 -0
  1618. package/android/build/tmp/kotlin-classes/debug/com/scalebun/rn/storage/ScaleBunStorageModule$Companion.class +0 -0
  1619. package/android/build/tmp/kotlin-classes/debug/com/scalebun/rn/storage/ScaleBunStorageModule.class +0 -0
  1620. package/android/build/tmp/kotlin-classes/debug/com/scalebun/rn/storage/ScaleBunStorageSpec.class +0 -0
  1621. package/android/build/tmp/kotlin-classes/debug/com/scalebun/storage/KvFileStore$Companion.class +0 -0
  1622. 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
+ }