@scalebun/react-native 1.0.0 → 1.0.2

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