@scalebun/react-native 1.0.4 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/android/src/main/java/com/scalebun/rn/ota/SlotManager.kt +70 -4
- package/dist/scalebun.full.js +33132 -0
- package/dist/scalebun.full.js.map +1 -0
- package/dist/scalebun.slim.js +29930 -0
- package/dist/scalebun.slim.js.map +1 -0
- package/lib/commonjs/bootstrap/FeatureRegistry.js +4 -4
- package/lib/commonjs/bootstrap/FeatureRegistry.js.map +1 -1
- package/lib/commonjs/bootstrap/SDKBootstrapper.js +20 -17
- package/lib/commonjs/bootstrap/SDKBootstrapper.js.map +1 -1
- package/lib/commonjs/compat/codepush.js +78 -15
- package/lib/commonjs/compat/codepush.js.map +1 -1
- package/lib/commonjs/core/config/schema.js +412 -219
- package/lib/commonjs/core/config/schema.js.map +1 -1
- package/lib/commonjs/core/constants/endpoints.js +9 -6
- package/lib/commonjs/core/constants/endpoints.js.map +1 -1
- package/lib/commonjs/core/constants/protocol.js +31 -0
- package/lib/commonjs/core/constants/protocol.js.map +1 -0
- package/lib/commonjs/core/constants/timings.js +4 -1
- package/lib/commonjs/core/constants/timings.js.map +1 -1
- package/lib/commonjs/core/lifecycle/appLifecycle.js +1 -1
- package/lib/commonjs/core/lifecycle/appLifecycle.js.map +1 -1
- package/lib/commonjs/debug/bootstrap.js +30 -10
- package/lib/commonjs/debug/bootstrap.js.map +1 -1
- package/lib/commonjs/debug/exportBridge.js +5 -3
- package/lib/commonjs/debug/exportBridge.js.map +1 -1
- package/lib/commonjs/debug/hostResolver.js +2 -2
- package/lib/commonjs/debug/hostResolver.js.map +1 -1
- package/lib/commonjs/debug/perfWiring.js +4 -4
- package/lib/commonjs/debug/perfWiring.js.map +1 -1
- package/lib/commonjs/debug/replayWiring.js +5 -5
- package/lib/commonjs/debug/replayWiring.js.map +1 -1
- package/lib/commonjs/debug/screenTracking.js +2 -2
- package/lib/commonjs/debug/screenTracking.js.map +1 -1
- package/lib/commonjs/debug/sessionWiring.js +2 -2
- package/lib/commonjs/debug/sessionWiring.js.map +1 -1
- package/lib/commonjs/features/crash/NativeCrashFeature.js +1 -1
- package/lib/commonjs/features/crash/NativeCrashFeature.js.map +1 -1
- package/lib/commonjs/features/crash/globalHandler.js +3 -3
- package/lib/commonjs/features/crash/globalHandler.js.map +1 -1
- package/lib/commonjs/features/crash/nativeCrashBridge.js +7 -7
- package/lib/commonjs/features/crash/nativeCrashBridge.js.map +1 -1
- package/lib/commonjs/features/crash/rejectionHandler.js +2 -2
- package/lib/commonjs/features/crash/rejectionHandler.js.map +1 -1
- package/lib/commonjs/features/engage/EngageArchetypeRenderers.js +0 -9
- package/lib/commonjs/features/engage/EngageArchetypeRenderers.js.map +1 -1
- package/lib/commonjs/features/engage/EngageInAppView.js +1 -1
- package/lib/commonjs/features/engage/EngageInAppView.js.map +1 -1
- package/lib/commonjs/features/engage/EngagePromptProvider.js +17 -17
- package/lib/commonjs/features/engage/EngagePromptProvider.js.map +1 -1
- package/lib/commonjs/features/engage/EngageTransport.js +5 -5
- package/lib/commonjs/features/engage/EngageTransport.js.map +1 -1
- package/lib/commonjs/features/engage/engagePushTokenBridge.js +4 -4
- package/lib/commonjs/features/engage/engagePushTokenBridge.js.map +1 -1
- package/lib/commonjs/features/engage/engageShakeBridge.js +2 -2
- package/lib/commonjs/features/engage/engageShakeBridge.js.map +1 -1
- package/lib/commonjs/features/engage/engageSignals.js +1 -1
- package/lib/commonjs/features/engage/engageSignals.js.map +1 -1
- package/lib/commonjs/features/engage/engageStoreReviewBridge.js +2 -2
- package/lib/commonjs/features/engage/engageStoreReviewBridge.js.map +1 -1
- package/lib/commonjs/features/engage/engageTestSeenStore.js +1 -1
- package/lib/commonjs/features/engage/engageTestSeenStore.js.map +1 -1
- package/lib/commonjs/features/engage/engageThrottle.js +4 -4
- package/lib/commonjs/features/engage/engageThrottle.js.map +1 -1
- package/lib/commonjs/features/engage/engageTriggerEngine.js +4 -4
- package/lib/commonjs/features/engage/engageTriggerEngine.js.map +1 -1
- package/lib/commonjs/features/engage/engageWindowInsets.js +1 -1
- package/lib/commonjs/features/engage/engageWindowInsets.js.map +1 -1
- package/lib/commonjs/features/install-referrer/installReferrer.js +3 -3
- package/lib/commonjs/features/install-referrer/installReferrer.js.map +1 -1
- package/lib/commonjs/features/journey/calibrationContext.js +0 -9
- package/lib/commonjs/features/journey/calibrationContext.js.map +1 -1
- package/lib/commonjs/features/journey/journeyManager.js +4 -1
- package/lib/commonjs/features/journey/journeyManager.js.map +1 -1
- package/lib/commonjs/features/navigation/AutoScreenDetector.js +4 -4
- package/lib/commonjs/features/navigation/AutoScreenDetector.js.map +1 -1
- package/lib/commonjs/features/ota/OtaOrchestrator.js +27 -18
- package/lib/commonjs/features/ota/OtaOrchestrator.js.map +1 -1
- package/lib/commonjs/features/ota/geoCountry.js +2 -2
- package/lib/commonjs/features/ota/geoCountry.js.map +1 -1
- package/lib/commonjs/features/ota/retry.js +2 -2
- package/lib/commonjs/features/ota/retry.js.map +1 -1
- package/lib/commonjs/features/replay/core/logger/logger.js +0 -4
- package/lib/commonjs/features/replay/core/logger/logger.js.map +1 -1
- package/lib/commonjs/features/replay/integrations/network/networkAdapter.js +1 -54
- package/lib/commonjs/features/replay/integrations/network/networkAdapter.js.map +1 -1
- package/lib/commonjs/features/replay/integrations/react-navigation/navigationIntegration.js +1 -1
- package/lib/commonjs/features/replay/integrations/react-navigation/navigationIntegration.js.map +1 -1
- package/lib/commonjs/features/replay/integrations/touch/ReplayRoot.js +1 -1
- package/lib/commonjs/features/replay/integrations/touch/ReplayRoot.js.map +1 -1
- package/lib/commonjs/features/replay/pipeline/batching/batchManager.js +1 -1
- package/lib/commonjs/features/replay/pipeline/batching/batchManager.js.map +1 -1
- package/lib/commonjs/features/replay/pipeline/retry/retryPolicy.js +1 -1
- package/lib/commonjs/features/replay/pipeline/retry/retryPolicy.js.map +1 -1
- package/lib/commonjs/features/replay/public/api.js +7 -7
- package/lib/commonjs/features/replay/public/api.js.map +1 -1
- package/lib/commonjs/features/replay/replay/session/sessionOrchestrator.js +9 -9
- package/lib/commonjs/features/replay/replay/session/sessionOrchestrator.js.map +1 -1
- package/lib/commonjs/features/session/BackendSessionAdapter.js +41 -41
- package/lib/commonjs/features/session/BackendSessionAdapter.js.map +1 -1
- package/lib/commonjs/features/session/DesktopSessionTransport.js +5 -2
- package/lib/commonjs/features/session/DesktopSessionTransport.js.map +1 -1
- package/lib/commonjs/features/session/JourneyEventPipeline.js +1 -1
- package/lib/commonjs/features/session/JourneyEventPipeline.js.map +1 -1
- package/lib/commonjs/features/session/ReplayCaptureManager.js +14 -14
- package/lib/commonjs/features/session/ReplayCaptureManager.js.map +1 -1
- package/lib/commonjs/features/session/SessionManager.js +9 -9
- package/lib/commonjs/features/session/SessionManager.js.map +1 -1
- package/lib/commonjs/features/session/SyncDecisionEngine.js +1 -1
- package/lib/commonjs/features/session/SyncDecisionEngine.js.map +1 -1
- package/lib/commonjs/features/skan/skanBridge.js +6 -15
- package/lib/commonjs/features/skan/skanBridge.js.map +1 -1
- package/lib/commonjs/features/skan/skanConversionManager.js +5 -5
- package/lib/commonjs/features/skan/skanConversionManager.js.map +1 -1
- package/lib/commonjs/integrations/fetch/fetchInterceptor.js +1 -1
- package/lib/commonjs/integrations/fetch/fetchInterceptor.js.map +1 -1
- package/lib/commonjs/integrations/xhr/xhrInterceptor.js +1 -1
- package/lib/commonjs/integrations/xhr/xhrInterceptor.js.map +1 -1
- package/lib/commonjs/metro/composeSourceMap.js +105 -0
- package/lib/commonjs/metro/composeSourceMap.js.map +1 -0
- package/lib/commonjs/metro/featureModules.js +131 -0
- package/lib/commonjs/metro/featureModules.js.map +1 -0
- package/lib/commonjs/metro/index.js +123 -2
- package/lib/commonjs/metro/index.js.map +1 -1
- package/lib/commonjs/metro/serializerCompose.js +129 -0
- package/lib/commonjs/metro/serializerCompose.js.map +1 -0
- package/lib/commonjs/pipeline/dispatcher/dispatcher.js +1 -1
- package/lib/commonjs/pipeline/dispatcher/dispatcher.js.map +1 -1
- package/lib/commonjs/pipeline/queue/flushQueue.js +2 -2
- package/lib/commonjs/pipeline/queue/flushQueue.js.map +1 -1
- package/lib/commonjs/pipeline/queue/persistentQueue.js +6 -37
- package/lib/commonjs/pipeline/queue/persistentQueue.js.map +1 -1
- package/lib/commonjs/pipeline/scheduler/flushScheduler.js +1 -1
- package/lib/commonjs/pipeline/scheduler/flushScheduler.js.map +1 -1
- package/lib/commonjs/public/ScaleBunFacade.js +64 -15
- package/lib/commonjs/public/ScaleBunFacade.js.map +1 -1
- package/lib/commonjs/push/PushManager.js +3 -3
- package/lib/commonjs/push/PushManager.js.map +1 -1
- package/lib/commonjs/push/adapters/NativeBridgeAdapter.js +1 -1
- package/lib/commonjs/push/adapters/NativeBridgeAdapter.js.map +1 -1
- package/lib/commonjs/push/native/nativeNotifications.js +7 -18
- package/lib/commonjs/push/native/nativeNotifications.js.map +1 -1
- package/lib/commonjs/storage/StorageBackend.js +1 -1
- package/lib/commonjs/storage/StorageBackend.js.map +1 -1
- package/lib/module/bootstrap/FeatureRegistry.js +4 -4
- package/lib/module/bootstrap/FeatureRegistry.js.map +1 -1
- package/lib/module/bootstrap/SDKBootstrapper.js +20 -17
- package/lib/module/bootstrap/SDKBootstrapper.js.map +1 -1
- package/lib/module/compat/codepush.js +77 -14
- package/lib/module/compat/codepush.js.map +1 -1
- package/lib/module/core/config/schema.js +411 -218
- package/lib/module/core/config/schema.js.map +1 -1
- package/lib/module/core/constants/endpoints.js +9 -6
- package/lib/module/core/constants/endpoints.js.map +1 -1
- package/lib/module/core/constants/protocol.js +25 -0
- package/lib/module/core/constants/protocol.js.map +1 -0
- package/lib/module/core/constants/timings.js +3 -1
- package/lib/module/core/constants/timings.js.map +1 -1
- package/lib/module/core/lifecycle/appLifecycle.js +1 -1
- package/lib/module/core/lifecycle/appLifecycle.js.map +1 -1
- package/lib/module/debug/bootstrap.js +30 -9
- package/lib/module/debug/bootstrap.js.map +1 -1
- package/lib/module/debug/exportBridge.js +5 -3
- package/lib/module/debug/exportBridge.js.map +1 -1
- package/lib/module/debug/hostResolver.js +2 -2
- package/lib/module/debug/hostResolver.js.map +1 -1
- package/lib/module/debug/perfWiring.js +4 -4
- package/lib/module/debug/perfWiring.js.map +1 -1
- package/lib/module/debug/replayWiring.js +5 -5
- package/lib/module/debug/replayWiring.js.map +1 -1
- package/lib/module/debug/screenTracking.js +2 -2
- package/lib/module/debug/screenTracking.js.map +1 -1
- package/lib/module/debug/sessionWiring.js +2 -2
- package/lib/module/debug/sessionWiring.js.map +1 -1
- package/lib/module/features/crash/NativeCrashFeature.js +1 -1
- package/lib/module/features/crash/NativeCrashFeature.js.map +1 -1
- package/lib/module/features/crash/globalHandler.js +3 -3
- package/lib/module/features/crash/globalHandler.js.map +1 -1
- package/lib/module/features/crash/nativeCrashBridge.js +7 -7
- package/lib/module/features/crash/nativeCrashBridge.js.map +1 -1
- package/lib/module/features/crash/rejectionHandler.js +2 -2
- package/lib/module/features/crash/rejectionHandler.js.map +1 -1
- package/lib/module/features/engage/EngageArchetypeRenderers.js +0 -8
- package/lib/module/features/engage/EngageArchetypeRenderers.js.map +1 -1
- package/lib/module/features/engage/EngageInAppView.js +1 -1
- package/lib/module/features/engage/EngageInAppView.js.map +1 -1
- package/lib/module/features/engage/EngagePromptProvider.js +17 -17
- package/lib/module/features/engage/EngagePromptProvider.js.map +1 -1
- package/lib/module/features/engage/EngageTransport.js +5 -5
- package/lib/module/features/engage/EngageTransport.js.map +1 -1
- package/lib/module/features/engage/engagePushTokenBridge.js +4 -4
- package/lib/module/features/engage/engagePushTokenBridge.js.map +1 -1
- package/lib/module/features/engage/engageShakeBridge.js +2 -2
- package/lib/module/features/engage/engageShakeBridge.js.map +1 -1
- package/lib/module/features/engage/engageSignals.js +1 -1
- package/lib/module/features/engage/engageSignals.js.map +1 -1
- package/lib/module/features/engage/engageStoreReviewBridge.js +2 -2
- package/lib/module/features/engage/engageStoreReviewBridge.js.map +1 -1
- package/lib/module/features/engage/engageTestSeenStore.js +1 -1
- package/lib/module/features/engage/engageTestSeenStore.js.map +1 -1
- package/lib/module/features/engage/engageThrottle.js +4 -4
- package/lib/module/features/engage/engageThrottle.js.map +1 -1
- package/lib/module/features/engage/engageTriggerEngine.js +4 -4
- package/lib/module/features/engage/engageTriggerEngine.js.map +1 -1
- package/lib/module/features/engage/engageWindowInsets.js +1 -1
- package/lib/module/features/engage/engageWindowInsets.js.map +1 -1
- package/lib/module/features/install-referrer/installReferrer.js +3 -3
- package/lib/module/features/install-referrer/installReferrer.js.map +1 -1
- package/lib/module/features/journey/calibrationContext.js +0 -8
- package/lib/module/features/journey/calibrationContext.js.map +1 -1
- package/lib/module/features/journey/journeyManager.js +3 -1
- package/lib/module/features/journey/journeyManager.js.map +1 -1
- package/lib/module/features/navigation/AutoScreenDetector.js +4 -4
- package/lib/module/features/navigation/AutoScreenDetector.js.map +1 -1
- package/lib/module/features/ota/OtaOrchestrator.js +27 -18
- package/lib/module/features/ota/OtaOrchestrator.js.map +1 -1
- package/lib/module/features/ota/geoCountry.js +2 -2
- package/lib/module/features/ota/geoCountry.js.map +1 -1
- package/lib/module/features/ota/retry.js +2 -2
- package/lib/module/features/ota/retry.js.map +1 -1
- package/lib/module/features/replay/core/logger/logger.js +0 -3
- package/lib/module/features/replay/core/logger/logger.js.map +1 -1
- package/lib/module/features/replay/integrations/network/networkAdapter.js +1 -52
- package/lib/module/features/replay/integrations/network/networkAdapter.js.map +1 -1
- package/lib/module/features/replay/integrations/react-navigation/navigationIntegration.js +1 -1
- package/lib/module/features/replay/integrations/react-navigation/navigationIntegration.js.map +1 -1
- package/lib/module/features/replay/integrations/touch/ReplayRoot.js +1 -1
- package/lib/module/features/replay/integrations/touch/ReplayRoot.js.map +1 -1
- package/lib/module/features/replay/pipeline/batching/batchManager.js +1 -1
- package/lib/module/features/replay/pipeline/batching/batchManager.js.map +1 -1
- package/lib/module/features/replay/pipeline/retry/retryPolicy.js +1 -1
- package/lib/module/features/replay/pipeline/retry/retryPolicy.js.map +1 -1
- package/lib/module/features/replay/public/api.js +7 -7
- package/lib/module/features/replay/public/api.js.map +1 -1
- package/lib/module/features/replay/replay/session/sessionOrchestrator.js +9 -9
- package/lib/module/features/replay/replay/session/sessionOrchestrator.js.map +1 -1
- package/lib/module/features/session/BackendSessionAdapter.js +41 -41
- package/lib/module/features/session/BackendSessionAdapter.js.map +1 -1
- package/lib/module/features/session/DesktopSessionTransport.js +4 -2
- package/lib/module/features/session/DesktopSessionTransport.js.map +1 -1
- package/lib/module/features/session/JourneyEventPipeline.js +1 -1
- package/lib/module/features/session/JourneyEventPipeline.js.map +1 -1
- package/lib/module/features/session/ReplayCaptureManager.js +14 -14
- package/lib/module/features/session/ReplayCaptureManager.js.map +1 -1
- package/lib/module/features/session/SessionManager.js +9 -9
- package/lib/module/features/session/SessionManager.js.map +1 -1
- package/lib/module/features/session/SyncDecisionEngine.js +1 -1
- package/lib/module/features/session/SyncDecisionEngine.js.map +1 -1
- package/lib/module/features/skan/skanBridge.js +6 -14
- package/lib/module/features/skan/skanBridge.js.map +1 -1
- package/lib/module/features/skan/skanConversionManager.js +5 -5
- package/lib/module/features/skan/skanConversionManager.js.map +1 -1
- package/lib/module/index.js +1 -1
- package/lib/module/integrations/fetch/fetchInterceptor.js +1 -1
- package/lib/module/integrations/fetch/fetchInterceptor.js.map +1 -1
- package/lib/module/integrations/xhr/xhrInterceptor.js +1 -1
- package/lib/module/integrations/xhr/xhrInterceptor.js.map +1 -1
- package/lib/module/metro/composeSourceMap.js +97 -0
- package/lib/module/metro/composeSourceMap.js.map +1 -0
- package/lib/module/metro/featureModules.js +123 -0
- package/lib/module/metro/featureModules.js.map +1 -0
- package/lib/module/metro/index.js +122 -2
- package/lib/module/metro/index.js.map +1 -1
- package/lib/module/metro/serializerCompose.js +120 -0
- package/lib/module/metro/serializerCompose.js.map +1 -0
- package/lib/module/pipeline/dispatcher/dispatcher.js +1 -1
- package/lib/module/pipeline/dispatcher/dispatcher.js.map +1 -1
- package/lib/module/pipeline/queue/flushQueue.js +2 -2
- package/lib/module/pipeline/queue/flushQueue.js.map +1 -1
- package/lib/module/pipeline/queue/persistentQueue.js +6 -36
- package/lib/module/pipeline/queue/persistentQueue.js.map +1 -1
- package/lib/module/pipeline/scheduler/flushScheduler.js +1 -1
- package/lib/module/pipeline/scheduler/flushScheduler.js.map +1 -1
- package/lib/module/public/ScaleBunFacade.js +64 -15
- package/lib/module/public/ScaleBunFacade.js.map +1 -1
- package/lib/module/push/PushManager.js +3 -3
- package/lib/module/push/PushManager.js.map +1 -1
- package/lib/module/push/adapters/NativeBridgeAdapter.js +1 -1
- package/lib/module/push/adapters/NativeBridgeAdapter.js.map +1 -1
- package/lib/module/push/native/nativeNotifications.js +7 -17
- package/lib/module/push/native/nativeNotifications.js.map +1 -1
- package/lib/module/storage/StorageBackend.js +1 -1
- package/lib/module/storage/StorageBackend.js.map +1 -1
- package/lib/typescript/bootstrap/SDKBootstrapper.d.ts.map +1 -1
- package/lib/typescript/compat/codepush.d.ts +27 -4
- package/lib/typescript/compat/codepush.d.ts.map +1 -1
- package/lib/typescript/core/config/schema.d.ts +61 -37
- package/lib/typescript/core/config/schema.d.ts.map +1 -1
- package/lib/typescript/core/constants/endpoints.d.ts +9 -6
- package/lib/typescript/core/constants/endpoints.d.ts.map +1 -1
- package/lib/typescript/core/constants/protocol.d.ts +23 -0
- package/lib/typescript/core/constants/protocol.d.ts.map +1 -0
- package/lib/typescript/core/constants/timings.d.ts +1 -1
- package/lib/typescript/core/constants/timings.d.ts.map +1 -1
- package/lib/typescript/debug/bootstrap.d.ts +0 -1
- package/lib/typescript/debug/bootstrap.d.ts.map +1 -1
- package/lib/typescript/debug/exportBridge.d.ts.map +1 -1
- package/lib/typescript/features/engage/EngageArchetypeRenderers.d.ts +0 -2
- package/lib/typescript/features/engage/EngageArchetypeRenderers.d.ts.map +1 -1
- package/lib/typescript/features/engage/EngageTransport.d.ts +1 -1
- package/lib/typescript/features/engage/EngageTransport.d.ts.map +1 -1
- package/lib/typescript/features/journey/calibrationContext.d.ts +0 -1
- package/lib/typescript/features/journey/calibrationContext.d.ts.map +1 -1
- package/lib/typescript/features/journey/journeyManager.d.ts.map +1 -1
- package/lib/typescript/features/ota/OtaOrchestrator.d.ts +6 -0
- package/lib/typescript/features/ota/OtaOrchestrator.d.ts.map +1 -1
- package/lib/typescript/features/replay/core/logger/logger.d.ts +0 -1
- package/lib/typescript/features/replay/core/logger/logger.d.ts.map +1 -1
- package/lib/typescript/features/replay/integrations/network/networkAdapter.d.ts +0 -10
- package/lib/typescript/features/replay/integrations/network/networkAdapter.d.ts.map +1 -1
- package/lib/typescript/features/session/DesktopSessionTransport.d.ts.map +1 -1
- package/lib/typescript/features/skan/skanBridge.d.ts +0 -2
- package/lib/typescript/features/skan/skanBridge.d.ts.map +1 -1
- package/lib/typescript/metro/composeSourceMap.d.ts +26 -0
- package/lib/typescript/metro/composeSourceMap.d.ts.map +1 -0
- package/lib/typescript/metro/featureModules.d.ts +49 -0
- package/lib/typescript/metro/featureModules.d.ts.map +1 -0
- package/lib/typescript/metro/index.d.ts +22 -0
- package/lib/typescript/metro/index.d.ts.map +1 -1
- package/lib/typescript/metro/serializerCompose.d.ts +46 -0
- package/lib/typescript/metro/serializerCompose.d.ts.map +1 -0
- package/lib/typescript/pipeline/queue/persistentQueue.d.ts +0 -10
- package/lib/typescript/pipeline/queue/persistentQueue.d.ts.map +1 -1
- package/lib/typescript/public/ScaleBunFacade.d.ts +11 -0
- package/lib/typescript/public/ScaleBunFacade.d.ts.map +1 -1
- package/lib/typescript/public/types.d.ts +34 -8
- package/lib/typescript/public/types.d.ts.map +1 -1
- package/lib/typescript/push/native/nativeNotifications.d.ts +0 -6
- package/lib/typescript/push/native/nativeNotifications.d.ts.map +1 -1
- package/package.json +15 -11
- package/src/bootstrap/FeatureRegistry.ts +4 -4
- package/src/bootstrap/SDKBootstrapper.ts +20 -17
- package/src/compat/codepush.ts +87 -16
- package/src/core/config/schema.ts +353 -222
- package/src/core/constants/endpoints.ts +9 -6
- package/src/core/constants/protocol.ts +24 -0
- package/src/core/constants/timings.ts +3 -1
- package/src/core/lifecycle/appLifecycle.ts +1 -1
- package/src/debug/bootstrap.ts +40 -7
- package/src/debug/exportBridge.ts +5 -3
- package/src/debug/hostResolver.ts +2 -2
- package/src/debug/perfWiring.ts +4 -4
- package/src/debug/replayWiring.ts +5 -5
- package/src/debug/screenTracking.ts +2 -2
- package/src/debug/sessionWiring.ts +2 -2
- package/src/features/crash/NativeCrashFeature.ts +1 -1
- package/src/features/crash/globalHandler.ts +3 -3
- package/src/features/crash/nativeCrashBridge.ts +7 -7
- package/src/features/crash/rejectionHandler.ts +2 -2
- package/src/features/engage/EngageArchetypeRenderers.tsx +0 -11
- package/src/features/engage/EngageInAppView.tsx +1 -1
- package/src/features/engage/EngagePromptProvider.tsx +17 -17
- package/src/features/engage/EngageTransport.ts +6 -6
- package/src/features/engage/engagePushTokenBridge.ts +4 -4
- package/src/features/engage/engageShakeBridge.ts +2 -2
- package/src/features/engage/engageSignals.ts +1 -1
- package/src/features/engage/engageStoreReviewBridge.ts +2 -2
- package/src/features/engage/engageTestSeenStore.ts +1 -1
- package/src/features/engage/engageThrottle.ts +4 -4
- package/src/features/engage/engageTriggerEngine.ts +4 -4
- package/src/features/engage/engageWindowInsets.ts +1 -1
- package/src/features/install-referrer/installReferrer.ts +3 -3
- package/src/features/journey/calibrationContext.ts +0 -9
- package/src/features/journey/journeyManager.ts +3 -1
- package/src/features/navigation/AutoScreenDetector.ts +4 -4
- package/src/features/ota/OtaOrchestrator.ts +27 -18
- package/src/features/ota/geoCountry.ts +2 -2
- package/src/features/ota/retry.ts +2 -2
- package/src/features/replay/core/logger/logger.ts +0 -4
- package/src/features/replay/integrations/network/networkAdapter.ts +1 -56
- package/src/features/replay/integrations/react-navigation/navigationIntegration.ts +1 -1
- package/src/features/replay/integrations/touch/ReplayRoot.tsx +1 -1
- package/src/features/replay/pipeline/batching/batchManager.ts +1 -1
- package/src/features/replay/pipeline/retry/retryPolicy.ts +1 -1
- package/src/features/replay/public/api.ts +7 -7
- package/src/features/replay/replay/session/sessionOrchestrator.ts +9 -9
- package/src/features/session/BackendSessionAdapter.ts +41 -41
- package/src/features/session/DesktopSessionTransport.ts +4 -2
- package/src/features/session/JourneyEventPipeline.ts +1 -1
- package/src/features/session/ReplayCaptureManager.ts +14 -14
- package/src/features/session/SessionManager.ts +9 -9
- package/src/features/session/SyncDecisionEngine.ts +1 -1
- package/src/features/skan/skanBridge.ts +6 -14
- package/src/features/skan/skanConversionManager.ts +5 -5
- package/src/index.ts +1 -1
- package/src/integrations/fetch/fetchInterceptor.ts +1 -1
- package/src/integrations/xhr/xhrInterceptor.ts +1 -1
- package/src/metro/composeSourceMap.ts +104 -0
- package/src/metro/featureModules.ts +143 -0
- package/src/metro/index.ts +173 -1
- package/src/metro/serializerCompose.ts +157 -0
- package/src/pipeline/dispatcher/dispatcher.ts +1 -1
- package/src/pipeline/queue/flushQueue.ts +2 -2
- package/src/pipeline/queue/persistentQueue.ts +6 -35
- package/src/pipeline/scheduler/flushScheduler.ts +1 -1
- package/src/public/ScaleBunFacade.ts +60 -15
- package/src/public/types.ts +35 -8
- package/src/push/PushManager.ts +3 -3
- package/src/push/adapters/NativeBridgeAdapter.ts +1 -1
- package/src/push/native/nativeNotifications.ts +7 -16
- package/src/storage/StorageBackend.ts +1 -1
|
@@ -44,14 +44,14 @@ export async function getNativePushToken(): Promise<NativePushToken | null> {
|
|
|
44
44
|
try {
|
|
45
45
|
const mod = getEngageModule();
|
|
46
46
|
if (!mod?.getPushToken) {
|
|
47
|
-
logger.debug('[Engage] ScaleBunEngage native module unavailable — skipping push token');
|
|
47
|
+
__DEV__ && logger.debug('[Engage] ScaleBunEngage native module unavailable — skipping push token');
|
|
48
48
|
return null;
|
|
49
49
|
}
|
|
50
50
|
const result = await mod.getPushToken();
|
|
51
51
|
if (!result?.token || !result?.platform) return null;
|
|
52
52
|
return result;
|
|
53
53
|
} catch (err: any) {
|
|
54
|
-
logger.debug(`[Engage] getPushToken failed (fail-soft): ${err?.message}`);
|
|
54
|
+
__DEV__ && logger.debug(`[Engage] getPushToken failed (fail-soft): ${err?.message}`);
|
|
55
55
|
return null;
|
|
56
56
|
}
|
|
57
57
|
}
|
|
@@ -66,7 +66,7 @@ export function subscribeNativePushTokenRefresh(
|
|
|
66
66
|
try {
|
|
67
67
|
const nativeModule = NativeModules?.ScaleBunEngage;
|
|
68
68
|
if (!nativeModule) {
|
|
69
|
-
logger.debug('[Engage] ScaleBunEngage native module unavailable — no token-refresh listener');
|
|
69
|
+
__DEV__ && logger.debug('[Engage] ScaleBunEngage native module unavailable — no token-refresh listener');
|
|
70
70
|
return () => {};
|
|
71
71
|
}
|
|
72
72
|
const emitter = new NativeEventEmitter(nativeModule);
|
|
@@ -78,7 +78,7 @@ export function subscribeNativePushTokenRefresh(
|
|
|
78
78
|
);
|
|
79
79
|
return () => subscription.remove();
|
|
80
80
|
} catch (err: any) {
|
|
81
|
-
logger.debug(`[Engage] token-refresh subscription failed (fail-soft): ${err?.message}`);
|
|
81
|
+
__DEV__ && logger.debug(`[Engage] token-refresh subscription failed (fail-soft): ${err?.message}`);
|
|
82
82
|
return () => {};
|
|
83
83
|
}
|
|
84
84
|
}
|
|
@@ -39,7 +39,7 @@ export function installEngageShakeBridge(): () => void {
|
|
|
39
39
|
try {
|
|
40
40
|
const mod = getModule();
|
|
41
41
|
if (!mod?.startShakeDetection) {
|
|
42
|
-
logger.debug('[Engage] ScaleBunEngage shake detection unavailable — skipping');
|
|
42
|
+
__DEV__ && logger.debug('[Engage] ScaleBunEngage shake detection unavailable — skipping');
|
|
43
43
|
return () => {};
|
|
44
44
|
}
|
|
45
45
|
|
|
@@ -61,7 +61,7 @@ export function installEngageShakeBridge(): () => void {
|
|
|
61
61
|
} catch { /* no-throw */ }
|
|
62
62
|
};
|
|
63
63
|
} catch (err: any) {
|
|
64
|
-
logger.debug(`[Engage] shake bridge install failed (fail-soft): ${err?.message}`);
|
|
64
|
+
__DEV__ && logger.debug(`[Engage] shake bridge install failed (fail-soft): ${err?.message}`);
|
|
65
65
|
return () => {};
|
|
66
66
|
}
|
|
67
67
|
}
|
|
@@ -36,13 +36,13 @@ export async function requestNativeStoreReview(): Promise<boolean> {
|
|
|
36
36
|
try {
|
|
37
37
|
const mod = getEngageModule();
|
|
38
38
|
if (!mod?.requestReview) {
|
|
39
|
-
logger.debug('[Engage] ScaleBunEngage native module unavailable — skipping store review');
|
|
39
|
+
__DEV__ && logger.debug('[Engage] ScaleBunEngage native module unavailable — skipping store review');
|
|
40
40
|
return false;
|
|
41
41
|
}
|
|
42
42
|
const ran = await mod.requestReview();
|
|
43
43
|
return ran === true;
|
|
44
44
|
} catch (err: any) {
|
|
45
|
-
logger.debug(`[Engage] requestReview failed (fail-soft): ${err?.message}`);
|
|
45
|
+
__DEV__ && logger.debug(`[Engage] requestReview failed (fail-soft): ${err?.message}`);
|
|
46
46
|
return false;
|
|
47
47
|
}
|
|
48
48
|
}
|
|
@@ -61,7 +61,7 @@ export class EngageTestSeenStore {
|
|
|
61
61
|
markSeen(testRunId: string): void {
|
|
62
62
|
if (!testRunId) return;
|
|
63
63
|
this.backend.set(this.keyFor(testRunId), String(Date.now()));
|
|
64
|
-
logger.debug(`[Engage] test ${testRunId} marked displayed (persisted)`);
|
|
64
|
+
__DEV__ && logger.debug(`[Engage] test ${testRunId} marked displayed (persisted)`);
|
|
65
65
|
}
|
|
66
66
|
|
|
67
67
|
/**
|
|
@@ -85,7 +85,7 @@ export class EngageThrottleStore {
|
|
|
85
85
|
};
|
|
86
86
|
}
|
|
87
87
|
} catch (err) {
|
|
88
|
-
logger.debug('[Engage] throttle state read failed:', (err as Error)?.message);
|
|
88
|
+
__DEV__ && logger.debug('[Engage] throttle state read failed:', (err as Error)?.message);
|
|
89
89
|
}
|
|
90
90
|
return { impressions: 0, lastShownAt: 0, completed: false };
|
|
91
91
|
}
|
|
@@ -95,7 +95,7 @@ export class EngageThrottleStore {
|
|
|
95
95
|
try {
|
|
96
96
|
this.backend.delete(this.keyFor(campaignId));
|
|
97
97
|
} catch (err) {
|
|
98
|
-
logger.debug('[Engage] throttle clearOne failed:', (err as Error)?.message);
|
|
98
|
+
__DEV__ && logger.debug('[Engage] throttle clearOne failed:', (err as Error)?.message);
|
|
99
99
|
}
|
|
100
100
|
}
|
|
101
101
|
|
|
@@ -115,7 +115,7 @@ export class EngageThrottleStore {
|
|
|
115
115
|
}
|
|
116
116
|
}
|
|
117
117
|
} catch (err) {
|
|
118
|
-
logger.debug('[Engage] throttle clearAll failed:', (err as Error)?.message);
|
|
118
|
+
__DEV__ && logger.debug('[Engage] throttle clearAll failed:', (err as Error)?.message);
|
|
119
119
|
}
|
|
120
120
|
return n;
|
|
121
121
|
}
|
|
@@ -124,7 +124,7 @@ export class EngageThrottleStore {
|
|
|
124
124
|
try {
|
|
125
125
|
this.backend.set(this.keyFor(campaignId), JSON.stringify(state));
|
|
126
126
|
} catch (err) {
|
|
127
|
-
logger.debug('[Engage] throttle state write failed:', (err as Error)?.message);
|
|
127
|
+
__DEV__ && logger.debug('[Engage] throttle state write failed:', (err as Error)?.message);
|
|
128
128
|
}
|
|
129
129
|
}
|
|
130
130
|
|
|
@@ -112,18 +112,18 @@ export function installEngageTriggerEngine(deps: EngageTriggerEngineDeps): () =>
|
|
|
112
112
|
// Found live: a cold start with the screen off burned both a survey
|
|
113
113
|
// and an in-app message before the phone was ever unlocked.
|
|
114
114
|
if (appLifecycle.getCurrentState() !== 'active') {
|
|
115
|
-
logger.debug(
|
|
115
|
+
__DEV__ && logger.debug(
|
|
116
116
|
`[Engage] trigger suppressed (app ${appLifecycle.getCurrentState()}): ${options.trigger ?? 'manual'}`,
|
|
117
117
|
);
|
|
118
118
|
return;
|
|
119
119
|
}
|
|
120
|
-
logger.debug(
|
|
120
|
+
__DEV__ && logger.debug(
|
|
121
121
|
`[Engage] trigger fire: ${options.trigger ?? 'manual'}` +
|
|
122
122
|
(options.screen ? ` screen=${options.screen}` : ''),
|
|
123
123
|
);
|
|
124
124
|
deps.fire(options);
|
|
125
125
|
} catch (err) {
|
|
126
|
-
logger.debug('[Engage] trigger fire failed:', (err as Error)?.message);
|
|
126
|
+
__DEV__ && logger.debug('[Engage] trigger fire failed:', (err as Error)?.message);
|
|
127
127
|
}
|
|
128
128
|
};
|
|
129
129
|
|
|
@@ -297,7 +297,7 @@ export function installEngageTriggerEngine(deps: EngageTriggerEngineDeps): () =>
|
|
|
297
297
|
.filter((s): s is number => typeof s === 'number');
|
|
298
298
|
if (targets.includes(next)) fire({ trigger: 'n_sessions' });
|
|
299
299
|
} catch (err) {
|
|
300
|
-
logger.debug('[Engage] n_sessions check failed:', (err as Error)?.message);
|
|
300
|
+
__DEV__ && logger.debug('[Engage] n_sessions check failed:', (err as Error)?.message);
|
|
301
301
|
}
|
|
302
302
|
})();
|
|
303
303
|
|
|
@@ -64,7 +64,7 @@ export async function readNativeWindowInsets(
|
|
|
64
64
|
return normalizeWindowInsets(await module.getWindowInsets());
|
|
65
65
|
} catch (error: unknown) {
|
|
66
66
|
const reason = error instanceof Error ? error.message : String(error);
|
|
67
|
-
logger.debug(`[Engage] getWindowInsets failed (fail-soft): ${reason}`);
|
|
67
|
+
__DEV__ && logger.debug(`[Engage] getWindowInsets failed (fail-soft): ${reason}`);
|
|
68
68
|
return null;
|
|
69
69
|
}
|
|
70
70
|
}
|
|
@@ -40,7 +40,7 @@ export async function getInstallReferrer(): Promise<string | null> {
|
|
|
40
40
|
const raw = await mod.getInstallReferrer();
|
|
41
41
|
return typeof raw === 'string' ? raw : null;
|
|
42
42
|
} catch (err) {
|
|
43
|
-
logger.debug(`[InstallReferrer] fetch failed: ${(err as Error)?.message}`);
|
|
43
|
+
__DEV__ && logger.debug(`[InstallReferrer] fetch failed: ${(err as Error)?.message}`);
|
|
44
44
|
return null;
|
|
45
45
|
}
|
|
46
46
|
}
|
|
@@ -102,11 +102,11 @@ export async function captureInstallReferrerOnce(sink: InstallReferrerSink): Pro
|
|
|
102
102
|
if (!parsed) return;
|
|
103
103
|
if (parsed.clickId) sink.setClickId(parsed.clickId);
|
|
104
104
|
sink.emit('install_referrer', { referrer: parsed.raw, ...parsed.params });
|
|
105
|
-
logger.debug(
|
|
105
|
+
__DEV__ && logger.debug(
|
|
106
106
|
`[InstallReferrer] captured (clickId=${parsed.clickId ?? '-'}, ` +
|
|
107
107
|
`${Object.keys(parsed.params).length} params)`,
|
|
108
108
|
);
|
|
109
109
|
} catch (err) {
|
|
110
|
-
logger.debug(`[InstallReferrer] capture failed: ${(err as Error)?.message}`);
|
|
110
|
+
__DEV__ && logger.debug(`[InstallReferrer] capture failed: ${(err as Error)?.message}`);
|
|
111
111
|
}
|
|
112
112
|
}
|
|
@@ -42,12 +42,3 @@ export function consumeCalibrationTarget(): CalibrationTarget | null {
|
|
|
42
42
|
pending = null;
|
|
43
43
|
return out;
|
|
44
44
|
}
|
|
45
|
-
|
|
46
|
-
export function peekCalibrationTarget(): CalibrationTarget | null {
|
|
47
|
-
if (!pending) return null;
|
|
48
|
-
if (Date.now() - pending.setAt > TTL_MS) {
|
|
49
|
-
pending = null;
|
|
50
|
-
return null;
|
|
51
|
-
}
|
|
52
|
-
return pending;
|
|
53
|
-
}
|
|
@@ -21,7 +21,9 @@ import { GestureDetector } from './gestureDetector';
|
|
|
21
21
|
import { NavDetector } from './navDetector';
|
|
22
22
|
import { ScreenshotHelper } from './screenshotHelper';
|
|
23
23
|
import { findTarget } from './targetRegistry';
|
|
24
|
-
|
|
24
|
+
// The SDK-owned constant, not the debug/protocol shim — the shim re-exports from the vendored
|
|
25
|
+
// schema module, which would pull every desktop wire-message schema into production bundles.
|
|
26
|
+
import { PROTOCOL_VERSION } from '../../core/constants/protocol';
|
|
25
27
|
|
|
26
28
|
// ─── Journey Event Names ────────────────────────────────────────────────────
|
|
27
29
|
|
|
@@ -142,7 +142,7 @@ export class AutoScreenDetector {
|
|
|
142
142
|
if (!ref) return;
|
|
143
143
|
this._navigationRef = ref;
|
|
144
144
|
this._wireNavigationListener();
|
|
145
|
-
logger.debug('[AutoScreenDetector] Navigation ref set');
|
|
145
|
+
__DEV__ && logger.debug('[AutoScreenDetector] Navigation ref set');
|
|
146
146
|
} catch (err: any) {
|
|
147
147
|
logger.warn('[AutoScreenDetector] setNavigationRef failed:', err?.message);
|
|
148
148
|
}
|
|
@@ -310,7 +310,7 @@ export class AutoScreenDetector {
|
|
|
310
310
|
this._started = true;
|
|
311
311
|
this._autoHookReactNavigation();
|
|
312
312
|
this._startHeuristicPolling();
|
|
313
|
-
logger.debug('[AutoScreenDetector] Started');
|
|
313
|
+
__DEV__ && logger.debug('[AutoScreenDetector] Started');
|
|
314
314
|
}
|
|
315
315
|
|
|
316
316
|
/**
|
|
@@ -432,7 +432,7 @@ export class AutoScreenDetector {
|
|
|
432
432
|
'ScaleBun.setNavigationRef(ref) to restore screen names.',
|
|
433
433
|
);
|
|
434
434
|
} else {
|
|
435
|
-
logger.debug(`[AutoScreenDetector] React Navigation auto-hook installed (${installed}/3 entry points)`);
|
|
435
|
+
__DEV__ && logger.debug(`[AutoScreenDetector] React Navigation auto-hook installed (${installed}/3 entry points)`);
|
|
436
436
|
}
|
|
437
437
|
} catch { /* @react-navigation/native not installed — heuristic remains fallback */ }
|
|
438
438
|
}
|
|
@@ -464,7 +464,7 @@ export class AutoScreenDetector {
|
|
|
464
464
|
this._navListenerWired = false;
|
|
465
465
|
this._started = false;
|
|
466
466
|
this._lastEmittedScreen = null;
|
|
467
|
-
logger.debug('[AutoScreenDetector] Stopped');
|
|
467
|
+
__DEV__ && logger.debug('[AutoScreenDetector] Stopped');
|
|
468
468
|
}
|
|
469
469
|
|
|
470
470
|
/** Teardown completely (reset singleton) */
|
|
@@ -162,12 +162,12 @@ async function deliverOtaEvents(params: {
|
|
|
162
162
|
},
|
|
163
163
|
);
|
|
164
164
|
if (!res.ok) throw new Error(`HTTP ${res.status}`);
|
|
165
|
-
logger.debug(`[OTA] Delivered ${items.length} telemetry event(s)`);
|
|
165
|
+
__DEV__ && logger.debug(`[OTA] Delivered ${items.length} telemetry event(s)`);
|
|
166
166
|
} catch (err: any) {
|
|
167
167
|
// Failed delivery must not fail the update — but the events must not be
|
|
168
168
|
// lost either: requeue so the next sync retries them.
|
|
169
169
|
for (const e of events) otaEventEmitter.emit(e);
|
|
170
|
-
logger.debug(`[OTA] Telemetry delivery failed (will retry next sync): ${err?.message}`);
|
|
170
|
+
__DEV__ && logger.debug(`[OTA] Telemetry delivery failed (will retry next sync): ${err?.message}`);
|
|
171
171
|
}
|
|
172
172
|
}
|
|
173
173
|
|
|
@@ -199,6 +199,15 @@ const DEFAULT_MAX_REVERT_ATTEMPTS = 2;
|
|
|
199
199
|
export class OtaOrchestrator {
|
|
200
200
|
private enabled = false;
|
|
201
201
|
private currentBundle: OtaBundlePayload | null = null;
|
|
202
|
+
|
|
203
|
+
/**
|
|
204
|
+
* The bundle this process is running, once hydrated from the native slots.
|
|
205
|
+
* Read-only view for integrations (e.g. the CodePush shim's
|
|
206
|
+
* getUpdateMetadata) that need to report the running version.
|
|
207
|
+
*/
|
|
208
|
+
public getCurrentBundle(): OtaBundlePayload | null {
|
|
209
|
+
return this.currentBundle;
|
|
210
|
+
}
|
|
202
211
|
private isRestartRequiredState = false;
|
|
203
212
|
private healthyTimer: ReturnType<typeof setTimeout> | null = null;
|
|
204
213
|
private bootGuardConfig: BootGuardConfig = {};
|
|
@@ -260,7 +269,7 @@ export class OtaOrchestrator {
|
|
|
260
269
|
// We cannot see which form the host used — the identity check after
|
|
261
270
|
// restart is what proves it — but naming the right fix up front turns
|
|
262
271
|
// a confusing silent failure into a one-line correction.
|
|
263
|
-
logger.debug(
|
|
272
|
+
__DEV__ && logger.debug(
|
|
264
273
|
'[OTA] React Native >= 0.82 detected. The only valid Android integration is ' +
|
|
265
274
|
'getDefaultReactHost(..., jsBundleFilePath = ScaleBunOtaModule.getJSBundleFile(ctx)) — ' +
|
|
266
275
|
'ReactNativeHost and its getJSBundleFile() override no longer exist.',
|
|
@@ -271,7 +280,7 @@ export class OtaOrchestrator {
|
|
|
271
280
|
this.enabled = true;
|
|
272
281
|
this.bootGuardConfig = config ?? {};
|
|
273
282
|
this.signatureConfig = config?.signature;
|
|
274
|
-
logger.debug(
|
|
283
|
+
__DEV__ && logger.debug(
|
|
275
284
|
`[OTA] Orchestrator initialized (RN ${this.environment.rnVersionString ?? 'unknown'}` +
|
|
276
285
|
`${this.environment.bridgeless ? ', bridgeless' : ''}` +
|
|
277
286
|
`${this.environment.hermes ? `, Hermes HBC v${this.environment.hermesBytecodeVersion ?? '?'}` : ''})`,
|
|
@@ -320,7 +329,7 @@ export class OtaOrchestrator {
|
|
|
320
329
|
version: record.version,
|
|
321
330
|
sha256: record.sha256,
|
|
322
331
|
} as OtaBundlePayload;
|
|
323
|
-
logger.debug(`[OTA] Running bundle v${record.version} (${record.bundleId})`);
|
|
332
|
+
__DEV__ && logger.debug(`[OTA] Running bundle v${record.version} (${record.bundleId})`);
|
|
324
333
|
return;
|
|
325
334
|
}
|
|
326
335
|
|
|
@@ -328,7 +337,7 @@ export class OtaOrchestrator {
|
|
|
328
337
|
// a reinstall of the app, cleared storage, or a bundle staged by an
|
|
329
338
|
// older SDK. Report the hash so the server can still recognise it.
|
|
330
339
|
this.currentBundle = { sha256: current.sha256 } as OtaBundlePayload;
|
|
331
|
-
logger.debug(
|
|
340
|
+
__DEV__ && logger.debug(
|
|
332
341
|
`[OTA] Running an OTA bundle (sha ${String(current.sha256).slice(0, 12)}…) with no local install record.`,
|
|
333
342
|
);
|
|
334
343
|
} catch {
|
|
@@ -366,7 +375,7 @@ export class OtaOrchestrator {
|
|
|
366
375
|
if (expected) {
|
|
367
376
|
if (running === expected.identityToken) {
|
|
368
377
|
// Proven: the bundle we installed is the bundle executing.
|
|
369
|
-
logger.debug('[OTA] Install verified — running bundle matches what was installed.');
|
|
378
|
+
__DEV__ && logger.debug('[OTA] Install verified — running bundle matches what was installed.');
|
|
370
379
|
this.clearInstallExpectation();
|
|
371
380
|
return;
|
|
372
381
|
}
|
|
@@ -610,11 +619,11 @@ export class OtaOrchestrator {
|
|
|
610
619
|
return { status: 'ERROR', error: 'OTA native module disabled or missing' };
|
|
611
620
|
}
|
|
612
621
|
|
|
613
|
-
logger.debug('[OTA] Sync started…');
|
|
622
|
+
__DEV__ && logger.debug('[OTA] Sync started…');
|
|
614
623
|
const checkRes = await this.checkForUpdate(params);
|
|
615
624
|
|
|
616
625
|
if (checkRes.action === 'NONE') {
|
|
617
|
-
logger.debug('[OTA] App is up to date');
|
|
626
|
+
__DEV__ && logger.debug('[OTA] App is up to date');
|
|
618
627
|
// If we booted from an OTA bundle and it's healthy, clear the boot guard
|
|
619
628
|
this.startBootGuardHeartbeat();
|
|
620
629
|
return { status: 'UP_TO_DATE' };
|
|
@@ -667,7 +676,7 @@ export class OtaOrchestrator {
|
|
|
667
676
|
// ── DOWNLOAD ─────────────────────────────────────────────────────────
|
|
668
677
|
otaEventEmitter.emitSimple('DOWNLOAD_STARTED', bundle.id, { version: bundle.version });
|
|
669
678
|
const downloadStart = Date.now();
|
|
670
|
-
logger.debug(`[OTA] Downloading update v${bundle.version}…`);
|
|
679
|
+
__DEV__ && logger.debug(`[OTA] Downloading update v${bundle.version}…`);
|
|
671
680
|
|
|
672
681
|
// Live progress: native tick → DOWNLOAD_PROGRESS (feeds useOtaUpdate) →
|
|
673
682
|
// throttled POST to the live tracker. `bundle.size` is the authoritative
|
|
@@ -718,7 +727,7 @@ export class OtaOrchestrator {
|
|
|
718
727
|
|
|
719
728
|
// Sprint 7: Try patch first if offered, fall back to full bundle
|
|
720
729
|
if (bundle.patch && NativeScaleBunOta.stagePatch) {
|
|
721
|
-
logger.debug(
|
|
730
|
+
__DEV__ && logger.debug(
|
|
722
731
|
`[OTA] Patch available (${(bundle.patch.size / 1024).toFixed(0)} KB vs ` +
|
|
723
732
|
`${(bundle.size / 1024).toFixed(0)} KB full) — trying patch…`,
|
|
724
733
|
);
|
|
@@ -730,7 +739,7 @@ export class OtaOrchestrator {
|
|
|
730
739
|
);
|
|
731
740
|
if (staged) {
|
|
732
741
|
patchUsed = true;
|
|
733
|
-
logger.debug('[OTA] Patch applied successfully');
|
|
742
|
+
__DEV__ && logger.debug('[OTA] Patch applied successfully');
|
|
734
743
|
} else {
|
|
735
744
|
logger.warn('[OTA] Patch staging returned false — falling back to full bundle');
|
|
736
745
|
}
|
|
@@ -812,7 +821,7 @@ export class OtaOrchestrator {
|
|
|
812
821
|
this.recordInstallExpectation(bundle);
|
|
813
822
|
|
|
814
823
|
otaEventEmitter.emitSimple('INSTALLED', bundle.id, { version: bundle.version });
|
|
815
|
-
logger.debug(`[OTA] Update v${bundle.version} installed successfully!`);
|
|
824
|
+
__DEV__ && logger.debug(`[OTA] Update v${bundle.version} installed successfully!`);
|
|
816
825
|
|
|
817
826
|
// Deliver telemetry BEFORE a restart tears the JS runtime down —
|
|
818
827
|
// an INSTALLED event queued but not sent would vanish with the process.
|
|
@@ -876,12 +885,12 @@ export class OtaOrchestrator {
|
|
|
876
885
|
}
|
|
877
886
|
|
|
878
887
|
const healthyMs = this.bootGuardConfig.healthyAfterMs ?? DEFAULT_HEALTHY_AFTER_MS;
|
|
879
|
-
logger.debug(`[OTA] Boot guard active — marking healthy after ${healthyMs}ms`);
|
|
888
|
+
__DEV__ && logger.debug(`[OTA] Boot guard active — marking healthy after ${healthyMs}ms`);
|
|
880
889
|
|
|
881
890
|
this.healthyTimer = setTimeout(() => {
|
|
882
891
|
noThrow(() => {
|
|
883
892
|
NativeScaleBunOta?.markHealthy();
|
|
884
|
-
logger.info('[OTA] Boot guard cleared — bundle marked healthy ✓');
|
|
893
|
+
__DEV__ && logger.info('[OTA] Boot guard cleared — bundle marked healthy ✓');
|
|
885
894
|
this.healthyTimer = null;
|
|
886
895
|
});
|
|
887
896
|
}, healthyMs);
|
|
@@ -924,11 +933,11 @@ export class OtaOrchestrator {
|
|
|
924
933
|
/* the restart below makes cleanup moot */
|
|
925
934
|
}
|
|
926
935
|
this.resumeRestartArmed = false;
|
|
927
|
-
logger.info('[OTA] App resumed — activating the staged update now');
|
|
936
|
+
__DEV__ && logger.info('[OTA] App resumed — activating the staged update now');
|
|
928
937
|
this.restart();
|
|
929
938
|
}
|
|
930
939
|
});
|
|
931
|
-
logger.debug('[OTA] Update staged — will activate on next resume (ON_NEXT_RESUME)');
|
|
940
|
+
__DEV__ && logger.debug('[OTA] Update staged — will activate on next resume (ON_NEXT_RESUME)');
|
|
932
941
|
} catch {
|
|
933
942
|
// AppState unavailable (tests, exotic hosts): the update still activates
|
|
934
943
|
// on the next cold start, which is the documented fallback behaviour.
|
|
@@ -948,7 +957,7 @@ export class OtaOrchestrator {
|
|
|
948
957
|
*/
|
|
949
958
|
restart(): void {
|
|
950
959
|
noThrow(() => {
|
|
951
|
-
logger.info('[OTA] Triggering app restart…');
|
|
960
|
+
__DEV__ && logger.info('[OTA] Triggering app restart…');
|
|
952
961
|
if (NativeScaleBunOta && typeof NativeScaleBunOta.restartApp === 'function') {
|
|
953
962
|
NativeScaleBunOta.restartApp();
|
|
954
963
|
} else if (DevSettings && typeof DevSettings.reload === 'function') {
|
|
@@ -73,9 +73,9 @@ export function prefetchDeviceCountry(): Promise<void> {
|
|
|
73
73
|
memory = raw;
|
|
74
74
|
storage.set(K_COUNTRY, raw);
|
|
75
75
|
storage.set(K_FETCHED_AT, String(Date.now()));
|
|
76
|
-
logger.debug(`[OTA] Device country resolved: ${raw}`);
|
|
76
|
+
__DEV__ && logger.debug(`[OTA] Device country resolved: ${raw}`);
|
|
77
77
|
} catch (err: any) {
|
|
78
|
-
logger.debug(`[OTA] Geo lookup skipped: ${err?.message ?? err}`);
|
|
78
|
+
__DEV__ && logger.debug(`[OTA] Geo lookup skipped: ${err?.message ?? err}`);
|
|
79
79
|
} finally {
|
|
80
80
|
clearTimeout(timer);
|
|
81
81
|
inFlight = null;
|
|
@@ -75,7 +75,7 @@ export async function retryWithBackoff<T>(
|
|
|
75
75
|
lastError = err;
|
|
76
76
|
|
|
77
77
|
if (!isRetryable(err)) {
|
|
78
|
-
logger.debug(`[OTA] ${label} failed with a non-retryable error — not retrying`);
|
|
78
|
+
__DEV__ && logger.debug(`[OTA] ${label} failed with a non-retryable error — not retrying`);
|
|
79
79
|
throw err;
|
|
80
80
|
}
|
|
81
81
|
|
|
@@ -83,7 +83,7 @@ export async function retryWithBackoff<T>(
|
|
|
83
83
|
if (isLast) break;
|
|
84
84
|
|
|
85
85
|
const delay = backoffDelay(attempt, baseDelayMs, maxDelayMs);
|
|
86
|
-
logger.debug(
|
|
86
|
+
__DEV__ && logger.debug(
|
|
87
87
|
`[OTA] ${label} failed (attempt ${attempt + 1}/${attempts}) — retrying in ${delay}ms`,
|
|
88
88
|
);
|
|
89
89
|
await sleep(delay);
|
|
@@ -47,70 +47,15 @@ export function reportNetworkRequest(request: NetworkRequestSummary): void {
|
|
|
47
47
|
|
|
48
48
|
breadcrumbCollector.addNetworkBreadcrumb(sanitized).catch(() => { });
|
|
49
49
|
} catch (err: any) {
|
|
50
|
-
logger.debug(`Network breadcrumb failed: ${err?.message}`);
|
|
50
|
+
__DEV__ && logger.debug(`Network breadcrumb failed: ${err?.message}`);
|
|
51
51
|
}
|
|
52
52
|
}
|
|
53
53
|
|
|
54
|
-
/**
|
|
55
|
-
* Set a filter function to control which URLs are recorded.
|
|
56
|
-
* Return true to include, false to exclude.
|
|
57
|
-
*/
|
|
58
|
-
export function setNetworkUrlFilter(filter: ((url: string) => boolean) | null): void {
|
|
59
|
-
_urlFilter = filter;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
54
|
/** Enable/disable network breadcrumb collection */
|
|
63
55
|
export function setNetworkEnabled(enabled: boolean): void {
|
|
64
56
|
_enabled = enabled;
|
|
65
57
|
}
|
|
66
58
|
|
|
67
|
-
/**
|
|
68
|
-
* Optional: create a fetch wrapper that auto-reports requests.
|
|
69
|
-
* This does NOT replace global fetch — it wraps it for convenience.
|
|
70
|
-
*/
|
|
71
|
-
export function createTrackedFetch(originalFetch: typeof fetch): typeof fetch {
|
|
72
|
-
return async function trackedFetch(input: RequestInfo | URL, init?: RequestInit): Promise<Response> {
|
|
73
|
-
const startTime = Date.now();
|
|
74
|
-
const method = init?.method ?? 'GET';
|
|
75
|
-
const url = typeof input === 'string' ? input : input instanceof URL ? input.href : input.url;
|
|
76
|
-
const requestSize = init?.body ? new Blob([init.body as any]).size : 0;
|
|
77
|
-
|
|
78
|
-
try {
|
|
79
|
-
const response = await originalFetch(input, init);
|
|
80
|
-
const duration = Date.now() - startTime;
|
|
81
|
-
|
|
82
|
-
reportNetworkRequest({
|
|
83
|
-
method,
|
|
84
|
-
url,
|
|
85
|
-
statusCode: response.status,
|
|
86
|
-
durationMs: duration,
|
|
87
|
-
requestSizeBytes: requestSize,
|
|
88
|
-
responseSizeBytes: 0, // Can't reliably get without reading body
|
|
89
|
-
error: !response.ok,
|
|
90
|
-
startTimestamp: startTime,
|
|
91
|
-
});
|
|
92
|
-
|
|
93
|
-
return response;
|
|
94
|
-
} catch (err: any) {
|
|
95
|
-
const duration = Date.now() - startTime;
|
|
96
|
-
|
|
97
|
-
reportNetworkRequest({
|
|
98
|
-
method,
|
|
99
|
-
url,
|
|
100
|
-
statusCode: 0,
|
|
101
|
-
durationMs: duration,
|
|
102
|
-
requestSizeBytes: requestSize,
|
|
103
|
-
responseSizeBytes: 0,
|
|
104
|
-
error: true,
|
|
105
|
-
errorMessage: err?.message,
|
|
106
|
-
startTimestamp: startTime,
|
|
107
|
-
});
|
|
108
|
-
|
|
109
|
-
throw err;
|
|
110
|
-
}
|
|
111
|
-
};
|
|
112
|
-
}
|
|
113
|
-
|
|
114
59
|
/** Basic URL sanitization: mask tokens/keys in query params */
|
|
115
60
|
function sanitizeUrl(url: string): string {
|
|
116
61
|
try {
|
|
@@ -65,7 +65,7 @@ export function useReplayNavigation(navigationRef: any): void {
|
|
|
65
65
|
}
|
|
66
66
|
});
|
|
67
67
|
|
|
68
|
-
logger.debug(`Screen: ${previousRouteName ?? '(none)'} → ${currentRouteName}`);
|
|
68
|
+
__DEV__ && logger.debug(`Screen: ${previousRouteName ?? '(none)'} → ${currentRouteName}`);
|
|
69
69
|
}
|
|
70
70
|
});
|
|
71
71
|
|
|
@@ -95,7 +95,7 @@ export function ReplayRoot({ children, disableInteractionTracking = false }: Rep
|
|
|
95
95
|
// Also trigger a frame capture for interaction modes
|
|
96
96
|
bridgeAdapter.captureFrame('interaction').catch(() => { });
|
|
97
97
|
|
|
98
|
-
logger.debug(`Interaction: ${interactionType} at (${Math.round(touch.pageX)}, ${Math.round(touch.pageY)})`);
|
|
98
|
+
__DEV__ && logger.debug(`Interaction: ${interactionType} at (${Math.round(touch.pageX)}, ${Math.round(touch.pageY)})`);
|
|
99
99
|
}, [disableInteractionTracking]);
|
|
100
100
|
|
|
101
101
|
return (
|
|
@@ -116,7 +116,7 @@ class BatchManager {
|
|
|
116
116
|
logger.warn('Batch queue full — dropping oldest batch');
|
|
117
117
|
}
|
|
118
118
|
|
|
119
|
-
logger.debug(`Batch created: ${batch.batchId} (${batch.frames.length} frames, ${batch.events.length} events)`);
|
|
119
|
+
__DEV__ && logger.debug(`Batch created: ${batch.batchId} (${batch.frames.length} frames, ${batch.events.length} events)`);
|
|
120
120
|
return batch;
|
|
121
121
|
}
|
|
122
122
|
|
|
@@ -49,7 +49,7 @@ export async function withRetry<T>(
|
|
|
49
49
|
}
|
|
50
50
|
|
|
51
51
|
const delay = calculateDelay(attempt, config);
|
|
52
|
-
logger.debug(`${label}: retry ${attempt + 1}/${config.maxAttempts} in ${delay}ms`);
|
|
52
|
+
__DEV__ && logger.debug(`${label}: retry ${attempt + 1}/${config.maxAttempts} in ${delay}ms`);
|
|
53
53
|
await sleep(delay);
|
|
54
54
|
}
|
|
55
55
|
}
|
|
@@ -81,7 +81,7 @@ export const ReplaySdk = {
|
|
|
81
81
|
}
|
|
82
82
|
|
|
83
83
|
if (!config.enabled) {
|
|
84
|
-
logger.info('SDK disabled via config');
|
|
84
|
+
__DEV__ && logger.info('SDK disabled via config');
|
|
85
85
|
return;
|
|
86
86
|
}
|
|
87
87
|
|
|
@@ -91,7 +91,7 @@ export const ReplaySdk = {
|
|
|
91
91
|
// Desktop transport (always, if debugTransport provided)
|
|
92
92
|
if (opts?.debugTransport) {
|
|
93
93
|
transports.push(new DesktopReplayTransport(opts.debugTransport));
|
|
94
|
-
logger.info('Desktop replay transport enabled');
|
|
94
|
+
__DEV__ && logger.info('Desktop replay transport enabled');
|
|
95
95
|
}
|
|
96
96
|
|
|
97
97
|
// Backend transport (flag-controlled + env check)
|
|
@@ -103,9 +103,9 @@ export const ReplaySdk = {
|
|
|
103
103
|
apiKey: config.apiKey,
|
|
104
104
|
batchSize: config.uploadBatchSize,
|
|
105
105
|
}));
|
|
106
|
-
logger.info('Backend replay transport enabled');
|
|
106
|
+
__DEV__ && logger.info('Backend replay transport enabled');
|
|
107
107
|
} else {
|
|
108
|
-
logger.info('Backend replay transport skipped (dev/emulator mode)');
|
|
108
|
+
__DEV__ && logger.info('Backend replay transport skipped (dev/emulator mode)');
|
|
109
109
|
}
|
|
110
110
|
}
|
|
111
111
|
|
|
@@ -129,7 +129,7 @@ export const ReplaySdk = {
|
|
|
129
129
|
try {
|
|
130
130
|
const success = await sessionOrchestrator.initialize(config);
|
|
131
131
|
if (success) {
|
|
132
|
-
logger.info('SDK initialized with native module');
|
|
132
|
+
__DEV__ && logger.info('SDK initialized with native module');
|
|
133
133
|
} else {
|
|
134
134
|
logger.warn('Native module not available — transport-only mode');
|
|
135
135
|
}
|
|
@@ -138,7 +138,7 @@ export const ReplaySdk = {
|
|
|
138
138
|
}
|
|
139
139
|
|
|
140
140
|
_initialized = true;
|
|
141
|
-
logger.info('SDK initialized successfully');
|
|
141
|
+
__DEV__ && logger.info('SDK initialized successfully');
|
|
142
142
|
}, undefined);
|
|
143
143
|
},
|
|
144
144
|
|
|
@@ -358,7 +358,7 @@ export const ReplaySdk = {
|
|
|
358
358
|
|
|
359
359
|
_initialized = false;
|
|
360
360
|
_config = null;
|
|
361
|
-
logger.info('SDK destroyed');
|
|
361
|
+
__DEV__ && logger.info('SDK destroyed');
|
|
362
362
|
}, undefined);
|
|
363
363
|
},
|
|
364
364
|
};
|