@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
|
@@ -87,7 +87,7 @@ export class PersistentQueue {
|
|
|
87
87
|
this.config = { ...DEFAULT_PERSISTENCE_CONFIG, ...config };
|
|
88
88
|
this.meta = this._loadMeta();
|
|
89
89
|
|
|
90
|
-
logger.debug(
|
|
90
|
+
__DEV__ && logger.debug(
|
|
91
91
|
`[PersistentQueue] Initialized: count=${this.meta.count}, ` +
|
|
92
92
|
`bytes=${this.meta.totalBytes}, head=${this.meta.head}, tail=${this.meta.tail}`,
|
|
93
93
|
);
|
|
@@ -150,7 +150,7 @@ export class PersistentQueue {
|
|
|
150
150
|
this.meta.totalBytes -= raw.length;
|
|
151
151
|
} else {
|
|
152
152
|
// Gap — entry was already evicted or corrupted
|
|
153
|
-
logger.debug(`[PersistentQueue] Missing entry at seq=${seq}`);
|
|
153
|
+
__DEV__ && logger.debug(`[PersistentQueue] Missing entry at seq=${seq}`);
|
|
154
154
|
}
|
|
155
155
|
}
|
|
156
156
|
|
|
@@ -224,7 +224,7 @@ export class PersistentQueue {
|
|
|
224
224
|
drainLeftovers(): Envelope[] {
|
|
225
225
|
if (this.meta.count === 0) return [];
|
|
226
226
|
|
|
227
|
-
logger.info(
|
|
227
|
+
__DEV__ && logger.info(
|
|
228
228
|
`[PersistentQueue] Draining ${this.meta.count} leftover envelopes ` +
|
|
229
229
|
`from previous run (${this.meta.totalBytes} bytes)`,
|
|
230
230
|
);
|
|
@@ -311,7 +311,7 @@ export class PersistentQueue {
|
|
|
311
311
|
totalBytes,
|
|
312
312
|
};
|
|
313
313
|
|
|
314
|
-
logger.info(
|
|
314
|
+
__DEV__ && logger.info(
|
|
315
315
|
`[PersistentQueue] Recovered metadata: ${meta.count} entries, ` +
|
|
316
316
|
`head=${meta.head}, tail=${meta.tail}, bytes=${meta.totalBytes}`,
|
|
317
317
|
);
|
|
@@ -381,34 +381,5 @@ export class PersistentQueue {
|
|
|
381
381
|
}
|
|
382
382
|
}
|
|
383
383
|
|
|
384
|
-
//
|
|
385
|
-
|
|
386
|
-
/**
|
|
387
|
-
* Create a PersistentQueue with the best available backend.
|
|
388
|
-
*
|
|
389
|
-
* If persistence is disabled in config, uses MemoryBackend.
|
|
390
|
-
* Otherwise uses the shared first-party durable backend from createStorageBackend().
|
|
391
|
-
*
|
|
392
|
-
* @param config - Persistence config from SDK init
|
|
393
|
-
* @param backend - Override backend (for tests). If provided, skips auto-detection.
|
|
394
|
-
*/
|
|
395
|
-
export function createPersistentQueue(
|
|
396
|
-
config: Partial<PersistenceConfig> = {},
|
|
397
|
-
backend?: StorageBackend,
|
|
398
|
-
): PersistentQueue {
|
|
399
|
-
if (backend) {
|
|
400
|
-
return new PersistentQueue(backend, config);
|
|
401
|
-
}
|
|
402
|
-
|
|
403
|
-
const mergedConfig = { ...DEFAULT_PERSISTENCE_CONFIG, ...config };
|
|
404
|
-
|
|
405
|
-
if (!mergedConfig.enabled) {
|
|
406
|
-
logger.info('[PersistentQueue] Persistence disabled — using in-memory queue');
|
|
407
|
-
const { MemoryBackend } = require('../../storage/StorageBackend');
|
|
408
|
-
return new PersistentQueue(new MemoryBackend(), mergedConfig);
|
|
409
|
-
}
|
|
410
|
-
|
|
411
|
-
const { createStorageBackend } = require('../../storage/StorageBackend');
|
|
412
|
-
const autoBackend = createStorageBackend();
|
|
413
|
-
return new PersistentQueue(autoBackend, mergedConfig);
|
|
414
|
-
}
|
|
384
|
+
// (A createPersistentQueue factory used to live here; every construction site builds
|
|
385
|
+
// PersistentQueue directly with an explicit backend, so the factory was verified dead and removed.)
|
|
@@ -16,7 +16,7 @@ export class FlushScheduler {
|
|
|
16
16
|
// Skip if the previous tick's flush hasn't settled — avoids
|
|
17
17
|
// overlapping flushes piling up when the network is slow.
|
|
18
18
|
if (this.running) {
|
|
19
|
-
logger.debug('[FlushScheduler] Previous flush still running — skipping tick');
|
|
19
|
+
__DEV__ && logger.debug('[FlushScheduler] Previous flush still running — skipping tick');
|
|
20
20
|
return;
|
|
21
21
|
}
|
|
22
22
|
this.running = true;
|
|
@@ -234,7 +234,7 @@ class ScaleBunFacade {
|
|
|
234
234
|
const realQueue = coreContainer.get<PersistentQueue>('PersistentQueue');
|
|
235
235
|
const buffered = this._preInitBuffer.popBatch(this._preInitBuffer.length());
|
|
236
236
|
if (buffered.length > 0) {
|
|
237
|
-
logger.debug(`[ScaleBun] Draining ${buffered.length} pre-init events into persistent queue`);
|
|
237
|
+
__DEV__ && logger.debug(`[ScaleBun] Draining ${buffered.length} pre-init events into persistent queue`);
|
|
238
238
|
for (const envelope of buffered) {
|
|
239
239
|
realQueue.add(envelope);
|
|
240
240
|
}
|
|
@@ -251,6 +251,13 @@ class ScaleBunFacade {
|
|
|
251
251
|
// Continue — debug connection is independent of backend API
|
|
252
252
|
}
|
|
253
253
|
|
|
254
|
+
// OTA from init config. Without this the whole `ota` config block was
|
|
255
|
+
// inert: `otaOrchestrator.init()` was reachable only by importing the
|
|
256
|
+
// orchestrator directly, so an app that followed the documented
|
|
257
|
+
// `ota: { enabled: true }` path silently got no updates AND no
|
|
258
|
+
// signature enforcement (sync() gates on the flag init() sets).
|
|
259
|
+
this._maybeStartOta(rawConfig);
|
|
260
|
+
|
|
254
261
|
// Auto debug connection from init config — runs regardless of backend status
|
|
255
262
|
const debugConfig = (rawConfig?.desktopDebug ?? rawConfig?.debug) as DebugConnectionConfig | undefined;
|
|
256
263
|
if (debugConfig) {
|
|
@@ -264,13 +271,51 @@ class ScaleBunFacade {
|
|
|
264
271
|
}
|
|
265
272
|
}
|
|
266
273
|
|
|
274
|
+
/**
|
|
275
|
+
* Boot the OTA orchestrator when the init config asks for it.
|
|
276
|
+
*
|
|
277
|
+
* `publicSigningKey` is honoured here so signature enforcement is reachable
|
|
278
|
+
* from configuration alone. The SDK ships no ed25519 implementation, so a
|
|
279
|
+
* host that pins a key must also supply `ota.verifySignature`; pinning a key
|
|
280
|
+
* without a verifier is fail-CLOSED by design (signature.ts) — an update
|
|
281
|
+
* that cannot be verified is not installed. We say that out loud rather than
|
|
282
|
+
* letting the app discover it as a silent no-update condition.
|
|
283
|
+
*/
|
|
284
|
+
private _maybeStartOta(rawConfig: any): void {
|
|
285
|
+
const ota = rawConfig?.ota;
|
|
286
|
+
if (!ota?.enabled) return;
|
|
287
|
+
try {
|
|
288
|
+
// Required lazily: hosts that never enable OTA should not pay for the
|
|
289
|
+
// module (or touch the native spec) at import time.
|
|
290
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
291
|
+
const { otaOrchestrator } = require('../features/ota/OtaOrchestrator');
|
|
292
|
+
const publicKey = ota.publicSigningKey;
|
|
293
|
+
const verifier = ota.verifySignature;
|
|
294
|
+
if (publicKey && typeof verifier !== 'function') {
|
|
295
|
+
logger.warn(
|
|
296
|
+
'[ScaleBun] ota.publicSigningKey is set but ota.verifySignature is not a function. ' +
|
|
297
|
+
'Signature checking is fail-closed: updates will be REJECTED until a verifier is supplied.',
|
|
298
|
+
);
|
|
299
|
+
}
|
|
300
|
+
otaOrchestrator.init({
|
|
301
|
+
...(publicKey ? { signature: { publicKey, verifier } } : {}),
|
|
302
|
+
...(typeof ota.healthyTimeoutMs === 'number'
|
|
303
|
+
? { healthyTimeoutMs: ota.healthyTimeoutMs }
|
|
304
|
+
: {}),
|
|
305
|
+
});
|
|
306
|
+
logger.info('[ScaleBun] OTA enabled from init config.');
|
|
307
|
+
} catch (err: any) {
|
|
308
|
+
logger.warn(`[ScaleBun] OTA init failed: ${err?.message ?? err}`);
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
|
|
267
312
|
private _autoEnableDebug(debugConfig: DebugConnectionConfig): void {
|
|
268
313
|
try {
|
|
269
314
|
const dbgConfig = buildDebugConfigFromInitConfig(debugConfig);
|
|
270
315
|
if (!dbgConfig) return;
|
|
271
316
|
(dbgConfig as any).__skipDeprecationWarning = true;
|
|
272
317
|
this.enableDebug(dbgConfig);
|
|
273
|
-
logger.info('[ScaleBun] Debug auto-connected via init({ debug }).');
|
|
318
|
+
__DEV__ && logger.info('[ScaleBun] Debug auto-connected via init({ debug }).');
|
|
274
319
|
} catch (err: any) {
|
|
275
320
|
logger.warn('[ScaleBun] Auto debug connection failed:', err?.message);
|
|
276
321
|
}
|
|
@@ -287,7 +332,7 @@ class ScaleBunFacade {
|
|
|
287
332
|
const apiBaseUrl = this._apiBaseUrl;
|
|
288
333
|
if (!enabled || !appId || !clientKey || !apiBaseUrl) {
|
|
289
334
|
if (enabled && !appId) {
|
|
290
|
-
logger.info('[ScaleBun] Envelope event tracking disabled — no appId in init config.');
|
|
335
|
+
__DEV__ && logger.info('[ScaleBun] Envelope event tracking disabled — no appId in init config.');
|
|
291
336
|
}
|
|
292
337
|
return;
|
|
293
338
|
}
|
|
@@ -336,7 +381,7 @@ class ScaleBunFacade {
|
|
|
336
381
|
onEvent: (eventName, revenue) => this._skanManager?.onEvent(eventName, revenue),
|
|
337
382
|
});
|
|
338
383
|
this._eventTracker.start();
|
|
339
|
-
logger.info('[ScaleBun] Envelope event tracking started → /v1/batch.');
|
|
384
|
+
__DEV__ && logger.info('[ScaleBun] Envelope event tracking started → /v1/batch.');
|
|
340
385
|
|
|
341
386
|
// Android: capture the Play Install Referrer once per install → feeds the
|
|
342
387
|
// deterministic click_id path + a one-off install_referrer event (UTM/gclid).
|
|
@@ -859,7 +904,7 @@ class ScaleBunFacade {
|
|
|
859
904
|
const cfg = await (this._getEngageTransport()?.fetchEngageConfig(context) ?? Promise.resolve(null));
|
|
860
905
|
const messages = cfg?.inAppMessages ?? [];
|
|
861
906
|
const previews = messages.filter((m) => m.preview === true || m.isTest === true);
|
|
862
|
-
logger.info(
|
|
907
|
+
__DEV__ && logger.info(
|
|
863
908
|
`[Engage] debugFetchInAppMessages → ${messages.length} message(s), ${previews.length} test preview(s)`,
|
|
864
909
|
);
|
|
865
910
|
return messages;
|
|
@@ -1170,7 +1215,7 @@ class ScaleBunFacade {
|
|
|
1170
1215
|
logger.warn('SDK not initialized. Event dropped:', name);
|
|
1171
1216
|
return;
|
|
1172
1217
|
}
|
|
1173
|
-
logger.debug('Tracking event:', name);
|
|
1218
|
+
__DEV__ && logger.debug('Tracking event:', name);
|
|
1174
1219
|
|
|
1175
1220
|
// Fan this event out to the Engage trigger engine. Same single funnel,
|
|
1176
1221
|
// extra observer — lets behavioral triggers (custom_event, failed_action,
|
|
@@ -1310,7 +1355,7 @@ class ScaleBunFacade {
|
|
|
1310
1355
|
]);
|
|
1311
1356
|
return;
|
|
1312
1357
|
}
|
|
1313
|
-
logger.debug('Flushing events from persistent queue...');
|
|
1358
|
+
__DEV__ && logger.debug('Flushing events from persistent queue...');
|
|
1314
1359
|
const httpClient = coreContainer.get<HttpClient>('HttpClient');
|
|
1315
1360
|
await flushQueue(this._getQueue(), httpClient, getDeviceId());
|
|
1316
1361
|
});
|
|
@@ -1338,10 +1383,10 @@ class ScaleBunFacade {
|
|
|
1338
1383
|
const bootstrapPerfFeature = _getPerformanceFeature();
|
|
1339
1384
|
if (bootstrapPerfFeature) {
|
|
1340
1385
|
this._performanceFeature = bootstrapPerfFeature;
|
|
1341
|
-
logger.debug('Performance feature linked from bootstrap');
|
|
1386
|
+
__DEV__ && logger.debug('Performance feature linked from bootstrap');
|
|
1342
1387
|
}
|
|
1343
1388
|
|
|
1344
|
-
logger.info('Debug enabled');
|
|
1389
|
+
__DEV__ && logger.info('Debug enabled');
|
|
1345
1390
|
});
|
|
1346
1391
|
}
|
|
1347
1392
|
|
|
@@ -1496,14 +1541,14 @@ class ScaleBunFacade {
|
|
|
1496
1541
|
return false;
|
|
1497
1542
|
}
|
|
1498
1543
|
sm.startSession(metadata as Parameters<SessionManager['startSession']>[0]);
|
|
1499
|
-
logger.info('session.start() ✅ sessionId:', sm.currentSessionId);
|
|
1544
|
+
__DEV__ && logger.info('session.start() ✅ sessionId:', sm.currentSessionId);
|
|
1500
1545
|
return true;
|
|
1501
1546
|
},
|
|
1502
1547
|
end: (reason?: 'ended' | 'timeout'): boolean => {
|
|
1503
1548
|
const sm = SessionManager.getExistingInstance();
|
|
1504
1549
|
if (!sm || !sm.isActive) return false;
|
|
1505
1550
|
sm.endSession(reason);
|
|
1506
|
-
logger.info('session.end() ✅');
|
|
1551
|
+
__DEV__ && logger.info('session.end() ✅');
|
|
1507
1552
|
return true;
|
|
1508
1553
|
},
|
|
1509
1554
|
emitEvent: (type: string, data?: Record<string, unknown>) => {
|
|
@@ -1559,13 +1604,13 @@ class ScaleBunFacade {
|
|
|
1559
1604
|
/** Set SDK-wide privacy settings for report generation. */
|
|
1560
1605
|
setPrivacy: (config: PrivacyConfig): void => {
|
|
1561
1606
|
this._privacyConfig = { ...this._privacyConfig, ...config };
|
|
1562
|
-
logger.debug('[report] Privacy config updated');
|
|
1607
|
+
__DEV__ && logger.debug('[report] Privacy config updated');
|
|
1563
1608
|
},
|
|
1564
1609
|
|
|
1565
1610
|
/** Set branding for exported reports. */
|
|
1566
1611
|
setBranding: (config: BrandingConfig): void => {
|
|
1567
1612
|
this._brandingConfig = { ...this._brandingConfig, ...config };
|
|
1568
|
-
logger.debug('[report] Branding config updated');
|
|
1613
|
+
__DEV__ && logger.debug('[report] Branding config updated');
|
|
1569
1614
|
},
|
|
1570
1615
|
|
|
1571
1616
|
/** Get current privacy config. */
|
|
@@ -1616,9 +1661,9 @@ class ScaleBunFacade {
|
|
|
1616
1661
|
try {
|
|
1617
1662
|
const { AutoScreenDetector } = require('../features/navigation/AutoScreenDetector');
|
|
1618
1663
|
AutoScreenDetector.getInstance().setNavigationRef(ref);
|
|
1619
|
-
logger.info('[ScaleBun] Navigation ref set → auto screen detection active');
|
|
1664
|
+
__DEV__ && logger.info('[ScaleBun] Navigation ref set → auto screen detection active');
|
|
1620
1665
|
} catch (err: any) {
|
|
1621
|
-
logger.debug('[ScaleBun] Navigation ref stashed (detector not ready):', err?.message);
|
|
1666
|
+
__DEV__ && logger.debug('[ScaleBun] Navigation ref stashed (detector not ready):', err?.message);
|
|
1622
1667
|
}
|
|
1623
1668
|
});
|
|
1624
1669
|
}
|
package/src/public/types.ts
CHANGED
|
@@ -78,14 +78,28 @@ export interface ScaleBunInitConfig {
|
|
|
78
78
|
/** Publishable API key from dashboard */
|
|
79
79
|
publishableKey: string;
|
|
80
80
|
/**
|
|
81
|
-
*
|
|
82
|
-
*
|
|
81
|
+
* @deprecated The endpoint is LOCKED to the ScaleBun cloud. Any value passed here is accepted
|
|
82
|
+
* (for backward compatibility) but ignored — the bootstrapper always uses the fixed
|
|
83
|
+
* `DEFAULT_API_BASE_URL`. To target a different backend, change that constant at build time.
|
|
83
84
|
*/
|
|
84
85
|
apiBaseUrl?: string;
|
|
85
86
|
/** @deprecated Use desktopDebug instead */
|
|
86
87
|
debug?: boolean;
|
|
87
|
-
/** Enable session replay capture. Default: true */
|
|
88
|
+
/** Enable session replay capture (feature on/off). Default: true */
|
|
88
89
|
sessionReplay?: boolean;
|
|
90
|
+
/**
|
|
91
|
+
* Session-replay capture options (SaaS mode).
|
|
92
|
+
* - `record` (default **true**): auto-start frame recording at cold launch so replays appear out
|
|
93
|
+
* of the box. Set `false` for events-only sessions — you can still record on demand with
|
|
94
|
+
* `ScaleBun.startSession()`.
|
|
95
|
+
* - `captureMode` / `intervalMs` / `quality`: tune capture cadence.
|
|
96
|
+
*/
|
|
97
|
+
replay?: {
|
|
98
|
+
record?: boolean;
|
|
99
|
+
captureMode?: 'navigation' | 'interactions' | 'frequency';
|
|
100
|
+
intervalMs?: number;
|
|
101
|
+
quality?: 'high' | 'normal' | 'low' | 'grayscale';
|
|
102
|
+
};
|
|
89
103
|
/** Event flush interval in ms. Default: 5000 */
|
|
90
104
|
flushIntervalMs?: number;
|
|
91
105
|
/** Max events per flush batch. Default: 1000 */
|
|
@@ -234,7 +248,6 @@ export interface ExportResult {
|
|
|
234
248
|
* await ScaleBun.init({
|
|
235
249
|
* projectId: 'proj_xxx',
|
|
236
250
|
* publishableKey: 'pk_xxx',
|
|
237
|
-
* apiBaseUrl: 'https://api.scalebun.com',
|
|
238
251
|
* });
|
|
239
252
|
* ```
|
|
240
253
|
*
|
|
@@ -243,7 +256,6 @@ export interface ExportResult {
|
|
|
243
256
|
* await ScaleBun.init({
|
|
244
257
|
* projectId: 'proj_xxx',
|
|
245
258
|
* publishableKey: 'pk_xxx',
|
|
246
|
-
* apiBaseUrl: 'https://api.scalebun.com',
|
|
247
259
|
* debug: true,
|
|
248
260
|
* });
|
|
249
261
|
* ```
|
|
@@ -254,8 +266,9 @@ export interface SimplifiedInitConfig {
|
|
|
254
266
|
/** Publishable API key from dashboard */
|
|
255
267
|
publishableKey: string;
|
|
256
268
|
/**
|
|
257
|
-
*
|
|
258
|
-
*
|
|
269
|
+
* @deprecated The endpoint is LOCKED to the ScaleBun cloud. Any value passed here is accepted
|
|
270
|
+
* (for backward compatibility) but ignored — the bootstrapper always uses the fixed
|
|
271
|
+
* `DEFAULT_API_BASE_URL`. To target a different backend, change that constant at build time.
|
|
259
272
|
*/
|
|
260
273
|
apiBaseUrl?: string;
|
|
261
274
|
|
|
@@ -271,9 +284,23 @@ export interface SimplifiedInitConfig {
|
|
|
271
284
|
/** @deprecated Use desktopDebug instead. */
|
|
272
285
|
debug?: DebugConnectionConfig;
|
|
273
286
|
|
|
274
|
-
/** Enable session replay capture. Default: true */
|
|
287
|
+
/** Enable session replay capture (feature on/off). Default: true */
|
|
275
288
|
sessionReplay?: boolean;
|
|
276
289
|
|
|
290
|
+
/**
|
|
291
|
+
* Session-replay capture options (SaaS mode).
|
|
292
|
+
* - `record` (default **true**): auto-start frame recording at cold launch so replays appear out
|
|
293
|
+
* of the box. Set `false` for events-only sessions — you can still record on demand with
|
|
294
|
+
* `ScaleBun.startSession()`.
|
|
295
|
+
* - `captureMode` / `intervalMs` / `quality`: tune capture cadence.
|
|
296
|
+
*/
|
|
297
|
+
replay?: {
|
|
298
|
+
record?: boolean;
|
|
299
|
+
captureMode?: 'navigation' | 'interactions' | 'frequency';
|
|
300
|
+
intervalMs?: number;
|
|
301
|
+
quality?: 'high' | 'normal' | 'low' | 'grayscale';
|
|
302
|
+
};
|
|
303
|
+
|
|
277
304
|
/** SDK-wide privacy settings */
|
|
278
305
|
privacy?: PrivacyConfig;
|
|
279
306
|
|
package/src/push/PushManager.ts
CHANGED
|
@@ -89,7 +89,7 @@ export class PushManager {
|
|
|
89
89
|
return { ok: false, adapter: this.adapter.id, reason: this.reason };
|
|
90
90
|
}
|
|
91
91
|
|
|
92
|
-
logger.info('[push] adapter:', this.adapter.id, '—', selection.reason);
|
|
92
|
+
__DEV__ && logger.info('[push] adapter:', this.adapter.id, '—', selection.reason);
|
|
93
93
|
|
|
94
94
|
// 1) Permission
|
|
95
95
|
if (!options.skipPermissionRequest) {
|
|
@@ -215,7 +215,7 @@ export class PushManager {
|
|
|
215
215
|
*/
|
|
216
216
|
private async syncToken(token: string, force = false): Promise<any> {
|
|
217
217
|
if (!force && token === this.lastSyncedToken) {
|
|
218
|
-
logger.debug('[push] token unchanged since last registration — skipping');
|
|
218
|
+
__DEV__ && logger.debug('[push] token unchanged since last registration — skipping');
|
|
219
219
|
return { ok: true, skipped: true };
|
|
220
220
|
}
|
|
221
221
|
const platform = Platform.OS === 'ios' ? 'ios' : 'android';
|
|
@@ -224,7 +224,7 @@ export class PushManager {
|
|
|
224
224
|
// adapter is set (manual setToken before enable).
|
|
225
225
|
const pushProvider: PushProviderId =
|
|
226
226
|
this.adapter?.pushProvider() ?? (platform === 'ios' ? 'apns' : 'fcm');
|
|
227
|
-
logger.debug(`[push] registering device token with backend (provider=${pushProvider})`);
|
|
227
|
+
__DEV__ && logger.debug(`[push] registering device token with backend (provider=${pushProvider})`);
|
|
228
228
|
const res = await this.deps.registerToken({ pushToken: token, platform, pushProvider, tokenStatus: 'active' });
|
|
229
229
|
this.lastSyncedToken = token;
|
|
230
230
|
return res;
|
|
@@ -84,7 +84,7 @@ export class NativeBridgeAdapter implements PushAdapter {
|
|
|
84
84
|
public async createAndroidChannel(_channel: AndroidChannelConfig): Promise<void> {
|
|
85
85
|
// The native bridge has no JS channel API; FCM uses the manifest-declared
|
|
86
86
|
// fallback channel (default_notification_channel_id). No-op on iOS.
|
|
87
|
-
logger.debug('[push] native adapter relies on FCM fallback channel');
|
|
87
|
+
__DEV__ && logger.debug('[push] native adapter relies on FCM fallback channel');
|
|
88
88
|
}
|
|
89
89
|
|
|
90
90
|
public async getToken(): Promise<string | null> {
|
|
@@ -78,7 +78,7 @@ export async function ensureNativeChannel(config: {
|
|
|
78
78
|
config.description ?? null,
|
|
79
79
|
);
|
|
80
80
|
} catch (err: any) {
|
|
81
|
-
logger.debug(`[Push.native] ensureChannel failed (fail-soft): ${err?.message}`);
|
|
81
|
+
__DEV__ && logger.debug(`[Push.native] ensureChannel failed (fail-soft): ${err?.message}`);
|
|
82
82
|
return false;
|
|
83
83
|
}
|
|
84
84
|
}
|
|
@@ -102,7 +102,7 @@ export async function showNativeNotification(input: {
|
|
|
102
102
|
...(input.notificationId != null ? { notificationId: input.notificationId } : {}),
|
|
103
103
|
});
|
|
104
104
|
} catch (err: any) {
|
|
105
|
-
logger.debug(`[Push.native] showNotification failed (fail-soft): ${err?.message}`);
|
|
105
|
+
__DEV__ && logger.debug(`[Push.native] showNotification failed (fail-soft): ${err?.message}`);
|
|
106
106
|
return false;
|
|
107
107
|
}
|
|
108
108
|
}
|
|
@@ -124,7 +124,7 @@ export function subscribeNativeNotificationOpened(
|
|
|
124
124
|
);
|
|
125
125
|
return () => sub.remove();
|
|
126
126
|
} catch (err: any) {
|
|
127
|
-
logger.debug(`[Push.native] opened subscription failed (fail-soft): ${err?.message}`);
|
|
127
|
+
__DEV__ && logger.debug(`[Push.native] opened subscription failed (fail-soft): ${err?.message}`);
|
|
128
128
|
return () => {};
|
|
129
129
|
}
|
|
130
130
|
}
|
|
@@ -141,20 +141,11 @@ export async function consumeInitialNativeNotification(): Promise<Record<string,
|
|
|
141
141
|
if (!payload) return null;
|
|
142
142
|
return payload.data ?? {};
|
|
143
143
|
} catch (err: any) {
|
|
144
|
-
logger.debug(`[Push.native] consumeInitial failed (fail-soft): ${err?.message}`);
|
|
144
|
+
__DEV__ && logger.debug(`[Push.native] consumeInitial failed (fail-soft): ${err?.message}`);
|
|
145
145
|
return null;
|
|
146
146
|
}
|
|
147
147
|
}
|
|
148
148
|
|
|
149
|
-
/**
|
|
150
|
-
* iOS (UNUserNotificationCenter): the native module owns the full notification
|
|
151
|
-
* surface — request authorization, foreground presentation, taps, and cold-start.
|
|
152
|
-
* Presence == iOS ScaleBunEngage exposes the notification delegate methods.
|
|
153
|
-
*/
|
|
154
|
-
export function hasNativeNotificationDelegate(): boolean {
|
|
155
|
-
const mod = getModule();
|
|
156
|
-
return !!(mod?.requestPushPermission && mod?.consumeInitialNotification);
|
|
157
|
-
}
|
|
158
149
|
|
|
159
150
|
/**
|
|
160
151
|
* iOS: request notification authorization natively. Returns the normalized status
|
|
@@ -166,7 +157,7 @@ export async function requestNativePushPermission(): Promise<string | null> {
|
|
|
166
157
|
if (!mod?.requestPushPermission) return null;
|
|
167
158
|
return await mod.requestPushPermission();
|
|
168
159
|
} catch (err: any) {
|
|
169
|
-
logger.debug(`[Push.native] requestPushPermission failed (fail-soft): ${err?.message}`);
|
|
160
|
+
__DEV__ && logger.debug(`[Push.native] requestPushPermission failed (fail-soft): ${err?.message}`);
|
|
170
161
|
return null;
|
|
171
162
|
}
|
|
172
163
|
}
|
|
@@ -189,7 +180,7 @@ export function subscribeNativeForegroundNotification(
|
|
|
189
180
|
);
|
|
190
181
|
return () => sub.remove();
|
|
191
182
|
} catch (err: any) {
|
|
192
|
-
logger.debug(`[Push.native] foreground subscription failed (fail-soft): ${err?.message}`);
|
|
183
|
+
__DEV__ && logger.debug(`[Push.native] foreground subscription failed (fail-soft): ${err?.message}`);
|
|
193
184
|
return () => {};
|
|
194
185
|
}
|
|
195
186
|
}
|
|
@@ -210,7 +201,7 @@ export async function consumeInitialNativeNotificationFull(): Promise<NativeNoti
|
|
|
210
201
|
data: payload.data ?? {},
|
|
211
202
|
};
|
|
212
203
|
} catch (err: any) {
|
|
213
|
-
logger.debug(`[Push.native] consumeInitialFull failed (fail-soft): ${err?.message}`);
|
|
204
|
+
__DEV__ && logger.debug(`[Push.native] consumeInitialFull failed (fail-soft): ${err?.message}`);
|
|
214
205
|
return null;
|
|
215
206
|
}
|
|
216
207
|
}
|
|
@@ -244,7 +244,7 @@ export function createStorageBackend(): StorageBackend {
|
|
|
244
244
|
if (native) {
|
|
245
245
|
try {
|
|
246
246
|
sharedBackend = new NativeKVBackend(native);
|
|
247
|
-
logger.debug('[StorageBackend] Using native durable backend (ScaleBunStorage)');
|
|
247
|
+
__DEV__ && logger.debug('[StorageBackend] Using native durable backend (ScaleBunStorage)');
|
|
248
248
|
return sharedBackend;
|
|
249
249
|
} catch (e) {
|
|
250
250
|
logger.warn('[StorageBackend] Native durable store failed to initialize; ' +
|