@scalebun/react-native 1.10.4 → 1.10.6
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/replaysdk/tracking/InteractionTracker.kt +19 -0
- package/dist/scalebun.full.js +460 -57
- package/dist/scalebun.slim.js +457 -62
- package/ios/Core/DeviceIdentity.swift +50 -0
- package/ios/Profiler/ScaleBunProfilerModule.swift +2 -8
- package/ios/ReplaySdk.swift +3 -1
- package/lib/commonjs/analytics/EventTracker.js +22 -0
- package/lib/commonjs/bootstrap/SDKBootstrapper.js +17 -3
- package/lib/commonjs/core/config/schema.js +29 -0
- package/lib/commonjs/core/constants/version.js +1 -1
- package/lib/commonjs/core/context/device.js +5 -0
- package/lib/commonjs/debug/redaction.js +227 -41
- package/lib/commonjs/features/journey/ScaleBunDebugRoot.js +9 -1
- package/lib/commonjs/features/navigation/AutoScreenDetector.js +68 -16
- package/lib/commonjs/features/session/BackendSessionAdapter.js +73 -6
- package/lib/commonjs/features/session/SessionManager.js +28 -0
- package/lib/commonjs/public/ScaleBunFacade.js +113 -2
- package/lib/module/analytics/EventTracker.js +22 -0
- package/lib/module/bootstrap/SDKBootstrapper.js +17 -3
- package/lib/module/core/config/schema.js +29 -0
- package/lib/module/core/constants/version.js +1 -1
- package/lib/module/core/context/device.js +5 -0
- package/lib/module/debug/redaction.js +227 -41
- package/lib/module/features/journey/ScaleBunDebugRoot.js +9 -1
- package/lib/module/features/navigation/AutoScreenDetector.js +68 -16
- package/lib/module/features/session/BackendSessionAdapter.js +73 -6
- package/lib/module/features/session/SessionManager.js +28 -0
- package/lib/module/public/ScaleBunFacade.js +114 -3
- package/lib/typescript/analytics/EventTracker.d.ts +15 -0
- package/lib/typescript/core/config/schema.d.ts +8 -0
- package/lib/typescript/core/constants/version.d.ts +1 -1
- package/lib/typescript/core/context/device.d.ts +1 -0
- package/lib/typescript/debug/redaction.d.ts +8 -2
- package/lib/typescript/features/navigation/AutoScreenDetector.d.ts +25 -0
- package/lib/typescript/features/session/BackendSessionAdapter.d.ts +9 -0
- package/lib/typescript/features/session/SessionManager.d.ts +15 -0
- package/lib/typescript/public/ScaleBunFacade.d.ts +44 -2
- package/lib/typescript/public/types.d.ts +1 -1
- package/package.json +6 -2
- package/src/analytics/EventTracker.ts +19 -0
- package/src/bootstrap/SDKBootstrapper.ts +17 -1
- package/src/core/config/schema.ts +22 -0
- package/src/core/constants/version.ts +1 -1
- package/src/core/context/device.ts +6 -0
- package/src/debug/redaction.ts +235 -42
- package/src/features/journey/ScaleBunDebugRoot.tsx +9 -1
- package/src/features/navigation/AutoScreenDetector.ts +70 -16
- package/src/features/session/BackendSessionAdapter.ts +81 -7
- package/src/features/session/SessionManager.ts +31 -0
- package/src/public/ScaleBunFacade.ts +122 -3
- package/src/public/types.ts +1 -1
- package/dist/scalebun.full.js.map +0 -1
- package/dist/scalebun.slim.js.map +0 -1
- package/lib/commonjs/analytics/EventTracker.js.map +0 -1
- package/lib/commonjs/analytics/automaticEvents.js.map +0 -1
- package/lib/commonjs/analytics/batching.js.map +0 -1
- package/lib/commonjs/analytics/eventLane.js.map +0 -1
- package/lib/commonjs/bootstrap/FeatureRegistry.js.map +0 -1
- package/lib/commonjs/bootstrap/SDKBootstrapper.js.map +0 -1
- package/lib/commonjs/bucketing/fnv1a32.js.map +0 -1
- package/lib/commonjs/compat/codepush.js.map +0 -1
- package/lib/commonjs/config/ConfigManager.js.map +0 -1
- package/lib/commonjs/config/configTypes.js.map +0 -1
- package/lib/commonjs/core/architecture.js.map +0 -1
- package/lib/commonjs/core/clock/now.js.map +0 -1
- package/lib/commonjs/core/config/defaults.js.map +0 -1
- package/lib/commonjs/core/config/schema.js.map +0 -1
- package/lib/commonjs/core/constants/endpoints.js.map +0 -1
- package/lib/commonjs/core/constants/protocol.js.map +0 -1
- package/lib/commonjs/core/constants/timings.js.map +0 -1
- package/lib/commonjs/core/constants/version.js.map +0 -1
- package/lib/commonjs/core/context/app.js.map +0 -1
- package/lib/commonjs/core/context/device.js.map +0 -1
- package/lib/commonjs/core/context/session.js.map +0 -1
- package/lib/commonjs/core/context/user.js.map +0 -1
- package/lib/commonjs/core/contracts/IFeature.js.map +0 -1
- package/lib/commonjs/core/di/container.js.map +0 -1
- package/lib/commonjs/core/encoding/base64.js.map +0 -1
- package/lib/commonjs/core/id/deviceId.js.map +0 -1
- package/lib/commonjs/core/id/installationId.js.map +0 -1
- package/lib/commonjs/core/id/sessionId.js.map +0 -1
- package/lib/commonjs/core/lifecycle/appLifecycle.js.map +0 -1
- package/lib/commonjs/core/lifecycle/crashSafe.js.map +0 -1
- package/lib/commonjs/core/logger/errorClassification.js.map +0 -1
- package/lib/commonjs/core/logger/internalLogger.js.map +0 -1
- package/lib/commonjs/core/logger/levels.js.map +0 -1
- package/lib/commonjs/crypto/hmacSha256.js.map +0 -1
- package/lib/commonjs/debug/bootstrap.js.map +0 -1
- package/lib/commonjs/debug/commands.js.map +0 -1
- package/lib/commonjs/debug/configBuilder.js.map +0 -1
- package/lib/commonjs/debug/exportBridge.js.map +0 -1
- package/lib/commonjs/debug/hostResolver.js.map +0 -1
- package/lib/commonjs/debug/index.js.map +0 -1
- package/lib/commonjs/debug/metrics.js.map +0 -1
- package/lib/commonjs/debug/perf.js.map +0 -1
- package/lib/commonjs/debug/perfWiring.js.map +0 -1
- package/lib/commonjs/debug/protocol.js.map +0 -1
- package/lib/commonjs/debug/redaction.js.map +0 -1
- package/lib/commonjs/debug/replayWiring.js.map +0 -1
- package/lib/commonjs/debug/screenTracking.js.map +0 -1
- package/lib/commonjs/debug/sessionWiring.js.map +0 -1
- package/lib/commonjs/debug/stream.js.map +0 -1
- package/lib/commonjs/debug/transport.js.map +0 -1
- package/lib/commonjs/features/bugreport/BugReportFeature.js.map +0 -1
- package/lib/commonjs/features/bugreport/buildPayload.js.map +0 -1
- package/lib/commonjs/features/bugreport/index.js.map +0 -1
- package/lib/commonjs/features/crash/CrashFeature.js.map +0 -1
- package/lib/commonjs/features/crash/CrashReporter.js.map +0 -1
- package/lib/commonjs/features/crash/NativeCrashFeature.js.map +0 -1
- package/lib/commonjs/features/crash/capture.js.map +0 -1
- package/lib/commonjs/features/crash/globalHandler.js.map +0 -1
- package/lib/commonjs/features/crash/index.js.map +0 -1
- package/lib/commonjs/features/crash/nativeCrashBridge.js.map +0 -1
- package/lib/commonjs/features/crash/rejectionHandler.js.map +0 -1
- package/lib/commonjs/features/engage/EngageAnchor.js.map +0 -1
- package/lib/commonjs/features/engage/EngageArchetypeRenderers.js.map +0 -1
- package/lib/commonjs/features/engage/EngageInAppView.js.map +0 -1
- package/lib/commonjs/features/engage/EngageInlinePlacement.js.map +0 -1
- package/lib/commonjs/features/engage/EngagePromptProvider.js.map +0 -1
- package/lib/commonjs/features/engage/EngagePromptView.js.map +0 -1
- package/lib/commonjs/features/engage/EngageTransport.js.map +0 -1
- package/lib/commonjs/features/engage/EngageVariantContent.js.map +0 -1
- package/lib/commonjs/features/engage/__test-support__/reactNativeStub.js.map +0 -1
- package/lib/commonjs/features/engage/attachmentCapture.js.map +0 -1
- package/lib/commonjs/features/engage/captureVoiceAttachment.js.map +0 -1
- package/lib/commonjs/features/engage/engageCoachmarkTour.js.map +0 -1
- package/lib/commonjs/features/engage/engageGameLogic.js.map +0 -1
- package/lib/commonjs/features/engage/engageMediaSizing.js.map +0 -1
- package/lib/commonjs/features/engage/engageMultiStepSheet.js.map +0 -1
- package/lib/commonjs/features/engage/engageOutcome.js.map +0 -1
- package/lib/commonjs/features/engage/engagePushTokenBridge.js.map +0 -1
- package/lib/commonjs/features/engage/engageShakeBridge.js.map +0 -1
- package/lib/commonjs/features/engage/engageSignals.js.map +0 -1
- package/lib/commonjs/features/engage/engageStoreReviewBridge.js.map +0 -1
- package/lib/commonjs/features/engage/engageTestSeenStore.js.map +0 -1
- package/lib/commonjs/features/engage/engageThrottle.js.map +0 -1
- package/lib/commonjs/features/engage/engageTriggerEngine.js.map +0 -1
- package/lib/commonjs/features/engage/engageTypes.js.map +0 -1
- package/lib/commonjs/features/engage/engageVariantResolver.js.map +0 -1
- package/lib/commonjs/features/engage/engageWindowInsets.js.map +0 -1
- package/lib/commonjs/features/engage/gestureTriggerDetector.js.map +0 -1
- package/lib/commonjs/features/engage/transcription/TranscriptionProvider.js.map +0 -1
- package/lib/commonjs/features/install-referrer/installReferrer.js.map +0 -1
- package/lib/commonjs/features/journey/ScaleBunDebugRoot.js.map +0 -1
- package/lib/commonjs/features/journey/ScaleBunFlatList.js.map +0 -1
- package/lib/commonjs/features/journey/ScaleBunImpression.js.map +0 -1
- package/lib/commonjs/features/journey/ScaleBunScrollView.js.map +0 -1
- package/lib/commonjs/features/journey/ScaleBunSectionList.js.map +0 -1
- package/lib/commonjs/features/journey/calibrationContext.js.map +0 -1
- package/lib/commonjs/features/journey/gestureBuffer.js.map +0 -1
- package/lib/commonjs/features/journey/gestureDetector.js.map +0 -1
- package/lib/commonjs/features/journey/impression.js.map +0 -1
- package/lib/commonjs/features/journey/journeyManager.js.map +0 -1
- package/lib/commonjs/features/journey/journeyTypes.js.map +0 -1
- package/lib/commonjs/features/journey/navDetector.js.map +0 -1
- package/lib/commonjs/features/journey/screenshotHelper.js.map +0 -1
- package/lib/commonjs/features/journey/targetRegistry.js.map +0 -1
- package/lib/commonjs/features/journey/touchTarget.js.map +0 -1
- package/lib/commonjs/features/navigation/AutoScreenDetector.js.map +0 -1
- package/lib/commonjs/features/network/NetworkFeature.js.map +0 -1
- package/lib/commonjs/features/network/index.js.map +0 -1
- package/lib/commonjs/features/ota/OtaEventEmitter.js.map +0 -1
- package/lib/commonjs/features/ota/OtaOrchestrator.js.map +0 -1
- package/lib/commonjs/features/ota/OtaTypes.js.map +0 -1
- package/lib/commonjs/features/ota/deviceAttributes.js.map +0 -1
- package/lib/commonjs/features/ota/environment.js.map +0 -1
- package/lib/commonjs/features/ota/geoCountry.js.map +0 -1
- package/lib/commonjs/features/ota/retry.js.map +0 -1
- package/lib/commonjs/features/ota/signature.js.map +0 -1
- package/lib/commonjs/features/ota/useOtaUpdate.js.map +0 -1
- package/lib/commonjs/features/performance/PerformanceFeature.js.map +0 -1
- package/lib/commonjs/features/performance/collectors/AppLaunchCollector.js.map +0 -1
- package/lib/commonjs/features/performance/collectors/AutoScreenLoadCollector.js.map +0 -1
- package/lib/commonjs/features/performance/collectors/CustomTraceCollector.js.map +0 -1
- package/lib/commonjs/features/performance/collectors/FrameMetricsCollector.js.map +0 -1
- package/lib/commonjs/features/performance/collectors/JsStallCollector.js.map +0 -1
- package/lib/commonjs/features/performance/collectors/NetworkPerfCollector.js.map +0 -1
- package/lib/commonjs/features/performance/collectors/ScreenLoadCollector.js.map +0 -1
- package/lib/commonjs/features/performance/collectors/UiHangCollector.js.map +0 -1
- package/lib/commonjs/features/performance/config.js.map +0 -1
- package/lib/commonjs/features/performance/getNativePerformanceModule.js.map +0 -1
- package/lib/commonjs/features/performance/index.js.map +0 -1
- package/lib/commonjs/features/performance/metrics/MetricsEngine.js.map +0 -1
- package/lib/commonjs/features/performance/models.js.map +0 -1
- package/lib/commonjs/features/performance/transport/PerformanceTransport.js.map +0 -1
- package/lib/commonjs/features/profiler/ProfilerFeature.js.map +0 -1
- package/lib/commonjs/features/profiler/config.js.map +0 -1
- package/lib/commonjs/features/profiler/contracts.js.map +0 -1
- package/lib/commonjs/features/profiler/index.js.map +0 -1
- package/lib/commonjs/features/profiler/models.js.map +0 -1
- package/lib/commonjs/features/profiler/transport/ProfilerTransport.js.map +0 -1
- package/lib/commonjs/features/replay/bridge/adapters/bridgeAdapter.js.map +0 -1
- package/lib/commonjs/features/replay/bridge/eventEmitter.js.map +0 -1
- package/lib/commonjs/features/replay/bridge/nativeModule.js.map +0 -1
- package/lib/commonjs/features/replay/core/clock/clock.js.map +0 -1
- package/lib/commonjs/features/replay/core/config/defaults.js.map +0 -1
- package/lib/commonjs/features/replay/core/config/validator.js.map +0 -1
- package/lib/commonjs/features/replay/core/env/environmentDetector.js.map +0 -1
- package/lib/commonjs/features/replay/core/errors/safeCall.js.map +0 -1
- package/lib/commonjs/features/replay/core/ids/sessionId.js.map +0 -1
- package/lib/commonjs/features/replay/core/logger/logger.js.map +0 -1
- package/lib/commonjs/features/replay/core/privacy/privacyTypes.js.map +0 -1
- package/lib/commonjs/features/replay/core/queue/boundedQueue.js.map +0 -1
- package/lib/commonjs/features/replay/integrations/alert/alertInstrumentation.js.map +0 -1
- package/lib/commonjs/features/replay/integrations/logs/consoleIntegration.js.map +0 -1
- package/lib/commonjs/features/replay/integrations/network/networkAdapter.js.map +0 -1
- package/lib/commonjs/features/replay/integrations/react-navigation/navigationIntegration.js.map +0 -1
- package/lib/commonjs/features/replay/integrations/touch/ReplayRoot.js.map +0 -1
- package/lib/commonjs/features/replay/pipeline/batching/batchManager.js.map +0 -1
- package/lib/commonjs/features/replay/pipeline/envelope/envelopeBuilder.js.map +0 -1
- package/lib/commonjs/features/replay/pipeline/retry/retryPolicy.js.map +0 -1
- package/lib/commonjs/features/replay/pipeline/transport/transportTypes.js.map +0 -1
- package/lib/commonjs/features/replay/public/api.js.map +0 -1
- package/lib/commonjs/features/replay/public/enums.js.map +0 -1
- package/lib/commonjs/features/replay/public/types.js.map +0 -1
- package/lib/commonjs/features/replay/replay/breadcrumbs/breadcrumbCollector.js.map +0 -1
- package/lib/commonjs/features/replay/replay/frames/frameModels.js.map +0 -1
- package/lib/commonjs/features/replay/replay/session/sessionOrchestrator.js.map +0 -1
- package/lib/commonjs/features/replay/replay/timeline/timelineModels.js.map +0 -1
- package/lib/commonjs/features/replay/transport/BackendReplayTransport.js.map +0 -1
- package/lib/commonjs/features/replay/transport/CompositeReplayTransport.js.map +0 -1
- package/lib/commonjs/features/replay/transport/DesktopReplayTransport.js.map +0 -1
- package/lib/commonjs/features/replay/transport/ReplayTransport.js.map +0 -1
- package/lib/commonjs/features/session/BackendSessionAdapter.js.map +0 -1
- package/lib/commonjs/features/session/DesktopSessionTransport.js.map +0 -1
- package/lib/commonjs/features/session/JourneyEventPipeline.js.map +0 -1
- package/lib/commonjs/features/session/ReplayCaptureManager.js.map +0 -1
- package/lib/commonjs/features/session/ScrollTracker.js.map +0 -1
- package/lib/commonjs/features/session/SessionManager.js.map +0 -1
- package/lib/commonjs/features/session/SyncDecisionEngine.js.map +0 -1
- package/lib/commonjs/features/session/index.js.map +0 -1
- package/lib/commonjs/features/session/nativeCapture.js.map +0 -1
- package/lib/commonjs/features/session/outboxFrameCapture.js.map +0 -1
- package/lib/commonjs/features/session/sessionTypes.js.map +0 -1
- package/lib/commonjs/features/skan/skanBridge.js.map +0 -1
- package/lib/commonjs/features/skan/skanConversionManager.js.map +0 -1
- package/lib/commonjs/index.js.map +0 -1
- package/lib/commonjs/integrations/fetch/fetchInterceptor.js.map +0 -1
- package/lib/commonjs/integrations/navigation/screenTracker.js.map +0 -1
- package/lib/commonjs/integrations/network/bodyCapture.js.map +0 -1
- package/lib/commonjs/integrations/xhr/xhrInterceptor.js.map +0 -1
- package/lib/commonjs/metro/composeSourceMap.js.map +0 -1
- package/lib/commonjs/metro/featureModules.js.map +0 -1
- package/lib/commonjs/metro/index.js.map +0 -1
- package/lib/commonjs/metro/optionalDependencyStub.js.map +0 -1
- package/lib/commonjs/metro/optionalModules.js.map +0 -1
- package/lib/commonjs/metro/serializerCompose.js.map +0 -1
- package/lib/commonjs/pipeline/dispatcher/dispatcher.js.map +0 -1
- package/lib/commonjs/pipeline/envelope/envelope.js.map +0 -1
- package/lib/commonjs/pipeline/envelope/serializer.js.map +0 -1
- package/lib/commonjs/pipeline/processors/dedupe.js.map +0 -1
- package/lib/commonjs/pipeline/processors/enrich.js.map +0 -1
- package/lib/commonjs/pipeline/processors/sampling.js.map +0 -1
- package/lib/commonjs/pipeline/processors/sanitize.js.map +0 -1
- package/lib/commonjs/pipeline/queue/flushQueue.js.map +0 -1
- package/lib/commonjs/pipeline/queue/memoryQueue.js.map +0 -1
- package/lib/commonjs/pipeline/queue/persistentQueue.js.map +0 -1
- package/lib/commonjs/pipeline/queue/queuePolicy.js.map +0 -1
- package/lib/commonjs/pipeline/scheduler/flushScheduler.js.map +0 -1
- package/lib/commonjs/pipeline/scheduler/retryPolicy.js.map +0 -1
- package/lib/commonjs/public/ScaleBunErrorBoundary.js.map +0 -1
- package/lib/commonjs/public/ScaleBunFacade.js.map +0 -1
- package/lib/commonjs/public/ScaleBunProvider.js.map +0 -1
- package/lib/commonjs/public/typedTracker.js.map +0 -1
- package/lib/commonjs/public/types.js.map +0 -1
- package/lib/commonjs/push/PushManager.js.map +0 -1
- package/lib/commonjs/push/adapters/ManualAdapter.js.map +0 -1
- package/lib/commonjs/push/adapters/NativeBridgeAdapter.js.map +0 -1
- package/lib/commonjs/push/adapters/NoopAdapter.js.map +0 -1
- package/lib/commonjs/push/adapters/RNFirebaseMessagingAdapter.js.map +0 -1
- package/lib/commonjs/push/adapters/loadMessaging.js.map +0 -1
- package/lib/commonjs/push/adapters/loadNotifee.js.map +0 -1
- package/lib/commonjs/push/adapters/selectAdapter.js.map +0 -1
- package/lib/commonjs/push/detect/capabilities.js.map +0 -1
- package/lib/commonjs/push/index.js.map +0 -1
- package/lib/commonjs/push/native/nativeNotifications.js.map +0 -1
- package/lib/commonjs/push/types.js.map +0 -1
- package/lib/commonjs/specs/NativeReplaySdk.js.map +0 -1
- package/lib/commonjs/specs/NativeScaleBunCrash.js.map +0 -1
- package/lib/commonjs/specs/NativeScaleBunInstallReferrer.js.map +0 -1
- package/lib/commonjs/specs/NativeScaleBunOta.js.map +0 -1
- package/lib/commonjs/specs/NativeScaleBunPerformance.js.map +0 -1
- package/lib/commonjs/specs/NativeScaleBunProfiler.js.map +0 -1
- package/lib/commonjs/specs/NativeScaleBunStorage.js.map +0 -1
- package/lib/commonjs/storage/StorageBackend.js.map +0 -1
- package/lib/commonjs/storage/db/sqlite.js.map +0 -1
- package/lib/commonjs/storage/files/fileStore.js.map +0 -1
- package/lib/commonjs/transport/auth/sdkSession.js.map +0 -1
- package/lib/commonjs/transport/backoff/exponentialJitter.js.map +0 -1
- package/lib/commonjs/transport/http/endpoints.js.map +0 -1
- package/lib/commonjs/transport/http/httpClient.js.map +0 -1
- package/lib/commonjs/transport/rateLimit/retryAfter.js.map +0 -1
- package/lib/commonjs/transport/signing/requestSigner.js.map +0 -1
- package/lib/commonjs/vendor/protocol/index.js.map +0 -1
- package/lib/commonjs/vendor/protocol/internal/validation.js.map +0 -1
- package/lib/commonjs/vendor/sdk-contracts/bridge.js.map +0 -1
- package/lib/commonjs/vendor/sdk-contracts/config.js.map +0 -1
- package/lib/commonjs/vendor/sdk-contracts/events.js.map +0 -1
- package/lib/commonjs/vendor/sdk-contracts/features.js.map +0 -1
- package/lib/commonjs/vendor/sdk-contracts/index.js.map +0 -1
- package/lib/commonjs/vendor/sdk-contracts/platform.js.map +0 -1
- package/lib/commonjs/vendor/sdk-contracts/session-boundary.js.map +0 -1
- package/lib/commonjs/vendor/sdk-contracts/session.js.map +0 -1
- package/lib/module/analytics/EventTracker.js.map +0 -1
- package/lib/module/analytics/automaticEvents.js.map +0 -1
- package/lib/module/analytics/batching.js.map +0 -1
- package/lib/module/analytics/eventLane.js.map +0 -1
- package/lib/module/bootstrap/FeatureRegistry.js.map +0 -1
- package/lib/module/bootstrap/SDKBootstrapper.js.map +0 -1
- package/lib/module/bucketing/fnv1a32.js.map +0 -1
- package/lib/module/compat/codepush.js.map +0 -1
- package/lib/module/config/ConfigManager.js.map +0 -1
- package/lib/module/config/configTypes.js.map +0 -1
- package/lib/module/core/architecture.js.map +0 -1
- package/lib/module/core/clock/now.js.map +0 -1
- package/lib/module/core/config/defaults.js.map +0 -1
- package/lib/module/core/config/schema.js.map +0 -1
- package/lib/module/core/constants/endpoints.js.map +0 -1
- package/lib/module/core/constants/protocol.js.map +0 -1
- package/lib/module/core/constants/timings.js.map +0 -1
- package/lib/module/core/constants/version.js.map +0 -1
- package/lib/module/core/context/app.js.map +0 -1
- package/lib/module/core/context/device.js.map +0 -1
- package/lib/module/core/context/session.js.map +0 -1
- package/lib/module/core/context/user.js.map +0 -1
- package/lib/module/core/contracts/IFeature.js.map +0 -1
- package/lib/module/core/di/container.js.map +0 -1
- package/lib/module/core/encoding/base64.js.map +0 -1
- package/lib/module/core/id/deviceId.js.map +0 -1
- package/lib/module/core/id/installationId.js.map +0 -1
- package/lib/module/core/id/sessionId.js.map +0 -1
- package/lib/module/core/lifecycle/appLifecycle.js.map +0 -1
- package/lib/module/core/lifecycle/crashSafe.js.map +0 -1
- package/lib/module/core/logger/errorClassification.js.map +0 -1
- package/lib/module/core/logger/internalLogger.js.map +0 -1
- package/lib/module/core/logger/levels.js.map +0 -1
- package/lib/module/crypto/hmacSha256.js.map +0 -1
- package/lib/module/debug/bootstrap.js.map +0 -1
- package/lib/module/debug/commands.js.map +0 -1
- package/lib/module/debug/configBuilder.js.map +0 -1
- package/lib/module/debug/exportBridge.js.map +0 -1
- package/lib/module/debug/hostResolver.js.map +0 -1
- package/lib/module/debug/index.js.map +0 -1
- package/lib/module/debug/metrics.js.map +0 -1
- package/lib/module/debug/perf.js.map +0 -1
- package/lib/module/debug/perfWiring.js.map +0 -1
- package/lib/module/debug/protocol.js.map +0 -1
- package/lib/module/debug/redaction.js.map +0 -1
- package/lib/module/debug/replayWiring.js.map +0 -1
- package/lib/module/debug/screenTracking.js.map +0 -1
- package/lib/module/debug/sessionWiring.js.map +0 -1
- package/lib/module/debug/stream.js.map +0 -1
- package/lib/module/debug/transport.js.map +0 -1
- package/lib/module/features/bugreport/BugReportFeature.js.map +0 -1
- package/lib/module/features/bugreport/buildPayload.js.map +0 -1
- package/lib/module/features/bugreport/index.js.map +0 -1
- package/lib/module/features/crash/CrashFeature.js.map +0 -1
- package/lib/module/features/crash/CrashReporter.js.map +0 -1
- package/lib/module/features/crash/NativeCrashFeature.js.map +0 -1
- package/lib/module/features/crash/capture.js.map +0 -1
- package/lib/module/features/crash/globalHandler.js.map +0 -1
- package/lib/module/features/crash/index.js.map +0 -1
- package/lib/module/features/crash/nativeCrashBridge.js.map +0 -1
- package/lib/module/features/crash/rejectionHandler.js.map +0 -1
- package/lib/module/features/engage/EngageAnchor.js.map +0 -1
- package/lib/module/features/engage/EngageArchetypeRenderers.js.map +0 -1
- package/lib/module/features/engage/EngageInAppView.js.map +0 -1
- package/lib/module/features/engage/EngageInlinePlacement.js.map +0 -1
- package/lib/module/features/engage/EngagePromptProvider.js.map +0 -1
- package/lib/module/features/engage/EngagePromptView.js.map +0 -1
- package/lib/module/features/engage/EngageTransport.js.map +0 -1
- package/lib/module/features/engage/EngageVariantContent.js.map +0 -1
- package/lib/module/features/engage/__test-support__/reactNativeStub.js.map +0 -1
- package/lib/module/features/engage/attachmentCapture.js.map +0 -1
- package/lib/module/features/engage/captureVoiceAttachment.js.map +0 -1
- package/lib/module/features/engage/engageCoachmarkTour.js.map +0 -1
- package/lib/module/features/engage/engageGameLogic.js.map +0 -1
- package/lib/module/features/engage/engageMediaSizing.js.map +0 -1
- package/lib/module/features/engage/engageMultiStepSheet.js.map +0 -1
- package/lib/module/features/engage/engageOutcome.js.map +0 -1
- package/lib/module/features/engage/engagePushTokenBridge.js.map +0 -1
- package/lib/module/features/engage/engageShakeBridge.js.map +0 -1
- package/lib/module/features/engage/engageSignals.js.map +0 -1
- package/lib/module/features/engage/engageStoreReviewBridge.js.map +0 -1
- package/lib/module/features/engage/engageTestSeenStore.js.map +0 -1
- package/lib/module/features/engage/engageThrottle.js.map +0 -1
- package/lib/module/features/engage/engageTriggerEngine.js.map +0 -1
- package/lib/module/features/engage/engageTypes.js.map +0 -1
- package/lib/module/features/engage/engageVariantResolver.js.map +0 -1
- package/lib/module/features/engage/engageWindowInsets.js.map +0 -1
- package/lib/module/features/engage/gestureTriggerDetector.js.map +0 -1
- package/lib/module/features/engage/transcription/TranscriptionProvider.js.map +0 -1
- package/lib/module/features/install-referrer/installReferrer.js.map +0 -1
- package/lib/module/features/journey/ScaleBunDebugRoot.js.map +0 -1
- package/lib/module/features/journey/ScaleBunFlatList.js.map +0 -1
- package/lib/module/features/journey/ScaleBunImpression.js.map +0 -1
- package/lib/module/features/journey/ScaleBunScrollView.js.map +0 -1
- package/lib/module/features/journey/ScaleBunSectionList.js.map +0 -1
- package/lib/module/features/journey/calibrationContext.js.map +0 -1
- package/lib/module/features/journey/gestureBuffer.js.map +0 -1
- package/lib/module/features/journey/gestureDetector.js.map +0 -1
- package/lib/module/features/journey/impression.js.map +0 -1
- package/lib/module/features/journey/journeyManager.js.map +0 -1
- package/lib/module/features/journey/journeyTypes.js.map +0 -1
- package/lib/module/features/journey/navDetector.js.map +0 -1
- package/lib/module/features/journey/screenshotHelper.js.map +0 -1
- package/lib/module/features/journey/targetRegistry.js.map +0 -1
- package/lib/module/features/journey/touchTarget.js.map +0 -1
- package/lib/module/features/navigation/AutoScreenDetector.js.map +0 -1
- package/lib/module/features/network/NetworkFeature.js.map +0 -1
- package/lib/module/features/network/index.js.map +0 -1
- package/lib/module/features/ota/OtaEventEmitter.js.map +0 -1
- package/lib/module/features/ota/OtaOrchestrator.js.map +0 -1
- package/lib/module/features/ota/OtaTypes.js.map +0 -1
- package/lib/module/features/ota/deviceAttributes.js.map +0 -1
- package/lib/module/features/ota/environment.js.map +0 -1
- package/lib/module/features/ota/geoCountry.js.map +0 -1
- package/lib/module/features/ota/retry.js.map +0 -1
- package/lib/module/features/ota/signature.js.map +0 -1
- package/lib/module/features/ota/useOtaUpdate.js.map +0 -1
- package/lib/module/features/performance/PerformanceFeature.js.map +0 -1
- package/lib/module/features/performance/collectors/AppLaunchCollector.js.map +0 -1
- package/lib/module/features/performance/collectors/AutoScreenLoadCollector.js.map +0 -1
- package/lib/module/features/performance/collectors/CustomTraceCollector.js.map +0 -1
- package/lib/module/features/performance/collectors/FrameMetricsCollector.js.map +0 -1
- package/lib/module/features/performance/collectors/JsStallCollector.js.map +0 -1
- package/lib/module/features/performance/collectors/NetworkPerfCollector.js.map +0 -1
- package/lib/module/features/performance/collectors/ScreenLoadCollector.js.map +0 -1
- package/lib/module/features/performance/collectors/UiHangCollector.js.map +0 -1
- package/lib/module/features/performance/config.js.map +0 -1
- package/lib/module/features/performance/getNativePerformanceModule.js.map +0 -1
- package/lib/module/features/performance/index.js.map +0 -1
- package/lib/module/features/performance/metrics/MetricsEngine.js.map +0 -1
- package/lib/module/features/performance/models.js.map +0 -1
- package/lib/module/features/performance/transport/PerformanceTransport.js.map +0 -1
- package/lib/module/features/profiler/ProfilerFeature.js.map +0 -1
- package/lib/module/features/profiler/config.js.map +0 -1
- package/lib/module/features/profiler/contracts.js.map +0 -1
- package/lib/module/features/profiler/index.js.map +0 -1
- package/lib/module/features/profiler/models.js.map +0 -1
- package/lib/module/features/profiler/transport/ProfilerTransport.js.map +0 -1
- package/lib/module/features/replay/bridge/adapters/bridgeAdapter.js.map +0 -1
- package/lib/module/features/replay/bridge/eventEmitter.js.map +0 -1
- package/lib/module/features/replay/bridge/nativeModule.js.map +0 -1
- package/lib/module/features/replay/core/clock/clock.js.map +0 -1
- package/lib/module/features/replay/core/config/defaults.js.map +0 -1
- package/lib/module/features/replay/core/config/validator.js.map +0 -1
- package/lib/module/features/replay/core/env/environmentDetector.js.map +0 -1
- package/lib/module/features/replay/core/errors/safeCall.js.map +0 -1
- package/lib/module/features/replay/core/ids/sessionId.js.map +0 -1
- package/lib/module/features/replay/core/logger/logger.js.map +0 -1
- package/lib/module/features/replay/core/privacy/privacyTypes.js.map +0 -1
- package/lib/module/features/replay/core/queue/boundedQueue.js.map +0 -1
- package/lib/module/features/replay/integrations/alert/alertInstrumentation.js.map +0 -1
- package/lib/module/features/replay/integrations/logs/consoleIntegration.js.map +0 -1
- package/lib/module/features/replay/integrations/network/networkAdapter.js.map +0 -1
- package/lib/module/features/replay/integrations/react-navigation/navigationIntegration.js.map +0 -1
- package/lib/module/features/replay/integrations/touch/ReplayRoot.js.map +0 -1
- package/lib/module/features/replay/pipeline/batching/batchManager.js.map +0 -1
- package/lib/module/features/replay/pipeline/envelope/envelopeBuilder.js.map +0 -1
- package/lib/module/features/replay/pipeline/retry/retryPolicy.js.map +0 -1
- package/lib/module/features/replay/pipeline/transport/transportTypes.js.map +0 -1
- package/lib/module/features/replay/public/api.js.map +0 -1
- package/lib/module/features/replay/public/enums.js.map +0 -1
- package/lib/module/features/replay/public/types.js.map +0 -1
- package/lib/module/features/replay/replay/breadcrumbs/breadcrumbCollector.js.map +0 -1
- package/lib/module/features/replay/replay/frames/frameModels.js.map +0 -1
- package/lib/module/features/replay/replay/session/sessionOrchestrator.js.map +0 -1
- package/lib/module/features/replay/replay/timeline/timelineModels.js.map +0 -1
- package/lib/module/features/replay/transport/BackendReplayTransport.js.map +0 -1
- package/lib/module/features/replay/transport/CompositeReplayTransport.js.map +0 -1
- package/lib/module/features/replay/transport/DesktopReplayTransport.js.map +0 -1
- package/lib/module/features/replay/transport/ReplayTransport.js.map +0 -1
- package/lib/module/features/session/BackendSessionAdapter.js.map +0 -1
- package/lib/module/features/session/DesktopSessionTransport.js.map +0 -1
- package/lib/module/features/session/JourneyEventPipeline.js.map +0 -1
- package/lib/module/features/session/ReplayCaptureManager.js.map +0 -1
- package/lib/module/features/session/ScrollTracker.js.map +0 -1
- package/lib/module/features/session/SessionManager.js.map +0 -1
- package/lib/module/features/session/SyncDecisionEngine.js.map +0 -1
- package/lib/module/features/session/index.js.map +0 -1
- package/lib/module/features/session/nativeCapture.js.map +0 -1
- package/lib/module/features/session/outboxFrameCapture.js.map +0 -1
- package/lib/module/features/session/sessionTypes.js.map +0 -1
- package/lib/module/features/skan/skanBridge.js.map +0 -1
- package/lib/module/features/skan/skanConversionManager.js.map +0 -1
- package/lib/module/index.js.map +0 -1
- package/lib/module/integrations/fetch/fetchInterceptor.js.map +0 -1
- package/lib/module/integrations/navigation/screenTracker.js.map +0 -1
- package/lib/module/integrations/network/bodyCapture.js.map +0 -1
- package/lib/module/integrations/xhr/xhrInterceptor.js.map +0 -1
- package/lib/module/metro/composeSourceMap.js.map +0 -1
- package/lib/module/metro/featureModules.js.map +0 -1
- package/lib/module/metro/index.js.map +0 -1
- package/lib/module/metro/optionalDependencyStub.js.map +0 -1
- package/lib/module/metro/optionalModules.js.map +0 -1
- package/lib/module/metro/serializerCompose.js.map +0 -1
- package/lib/module/pipeline/dispatcher/dispatcher.js.map +0 -1
- package/lib/module/pipeline/envelope/envelope.js.map +0 -1
- package/lib/module/pipeline/envelope/serializer.js.map +0 -1
- package/lib/module/pipeline/processors/dedupe.js.map +0 -1
- package/lib/module/pipeline/processors/enrich.js.map +0 -1
- package/lib/module/pipeline/processors/sampling.js.map +0 -1
- package/lib/module/pipeline/processors/sanitize.js.map +0 -1
- package/lib/module/pipeline/queue/flushQueue.js.map +0 -1
- package/lib/module/pipeline/queue/memoryQueue.js.map +0 -1
- package/lib/module/pipeline/queue/persistentQueue.js.map +0 -1
- package/lib/module/pipeline/queue/queuePolicy.js.map +0 -1
- package/lib/module/pipeline/scheduler/flushScheduler.js.map +0 -1
- package/lib/module/pipeline/scheduler/retryPolicy.js.map +0 -1
- package/lib/module/public/ScaleBunErrorBoundary.js.map +0 -1
- package/lib/module/public/ScaleBunFacade.js.map +0 -1
- package/lib/module/public/ScaleBunProvider.js.map +0 -1
- package/lib/module/public/typedTracker.js.map +0 -1
- package/lib/module/public/types.js.map +0 -1
- package/lib/module/push/PushManager.js.map +0 -1
- package/lib/module/push/adapters/ManualAdapter.js.map +0 -1
- package/lib/module/push/adapters/NativeBridgeAdapter.js.map +0 -1
- package/lib/module/push/adapters/NoopAdapter.js.map +0 -1
- package/lib/module/push/adapters/RNFirebaseMessagingAdapter.js.map +0 -1
- package/lib/module/push/adapters/loadMessaging.js.map +0 -1
- package/lib/module/push/adapters/loadNotifee.js.map +0 -1
- package/lib/module/push/adapters/selectAdapter.js.map +0 -1
- package/lib/module/push/detect/capabilities.js.map +0 -1
- package/lib/module/push/index.js.map +0 -1
- package/lib/module/push/native/nativeNotifications.js.map +0 -1
- package/lib/module/push/types.js.map +0 -1
- package/lib/module/specs/NativeReplaySdk.js.map +0 -1
- package/lib/module/specs/NativeScaleBunCrash.js.map +0 -1
- package/lib/module/specs/NativeScaleBunInstallReferrer.js.map +0 -1
- package/lib/module/specs/NativeScaleBunOta.js.map +0 -1
- package/lib/module/specs/NativeScaleBunPerformance.js.map +0 -1
- package/lib/module/specs/NativeScaleBunProfiler.js.map +0 -1
- package/lib/module/specs/NativeScaleBunStorage.js.map +0 -1
- package/lib/module/storage/StorageBackend.js.map +0 -1
- package/lib/module/storage/db/sqlite.js.map +0 -1
- package/lib/module/storage/files/fileStore.js.map +0 -1
- package/lib/module/transport/auth/sdkSession.js.map +0 -1
- package/lib/module/transport/backoff/exponentialJitter.js.map +0 -1
- package/lib/module/transport/http/endpoints.js.map +0 -1
- package/lib/module/transport/http/httpClient.js.map +0 -1
- package/lib/module/transport/rateLimit/retryAfter.js.map +0 -1
- package/lib/module/transport/signing/requestSigner.js.map +0 -1
- package/lib/module/vendor/protocol/index.js.map +0 -1
- package/lib/module/vendor/protocol/internal/validation.js.map +0 -1
- package/lib/module/vendor/sdk-contracts/bridge.js.map +0 -1
- package/lib/module/vendor/sdk-contracts/config.js.map +0 -1
- package/lib/module/vendor/sdk-contracts/events.js.map +0 -1
- package/lib/module/vendor/sdk-contracts/features.js.map +0 -1
- package/lib/module/vendor/sdk-contracts/index.js.map +0 -1
- package/lib/module/vendor/sdk-contracts/platform.js.map +0 -1
- package/lib/module/vendor/sdk-contracts/session-boundary.js.map +0 -1
- package/lib/module/vendor/sdk-contracts/session.js.map +0 -1
- package/lib/typescript/analytics/EventTracker.d.ts.map +0 -1
- package/lib/typescript/analytics/automaticEvents.d.ts.map +0 -1
- package/lib/typescript/analytics/batching.d.ts.map +0 -1
- package/lib/typescript/analytics/eventLane.d.ts.map +0 -1
- package/lib/typescript/bootstrap/FeatureRegistry.d.ts.map +0 -1
- package/lib/typescript/bootstrap/SDKBootstrapper.d.ts.map +0 -1
- package/lib/typescript/bucketing/fnv1a32.d.ts.map +0 -1
- package/lib/typescript/compat/codepush.d.ts.map +0 -1
- package/lib/typescript/config/ConfigManager.d.ts.map +0 -1
- package/lib/typescript/config/configTypes.d.ts.map +0 -1
- package/lib/typescript/core/architecture.d.ts.map +0 -1
- package/lib/typescript/core/clock/now.d.ts.map +0 -1
- package/lib/typescript/core/config/defaults.d.ts.map +0 -1
- package/lib/typescript/core/config/schema.d.ts.map +0 -1
- package/lib/typescript/core/constants/endpoints.d.ts.map +0 -1
- package/lib/typescript/core/constants/protocol.d.ts.map +0 -1
- package/lib/typescript/core/constants/timings.d.ts.map +0 -1
- package/lib/typescript/core/constants/version.d.ts.map +0 -1
- package/lib/typescript/core/context/app.d.ts.map +0 -1
- package/lib/typescript/core/context/device.d.ts.map +0 -1
- package/lib/typescript/core/context/session.d.ts.map +0 -1
- package/lib/typescript/core/context/user.d.ts.map +0 -1
- package/lib/typescript/core/contracts/IFeature.d.ts.map +0 -1
- package/lib/typescript/core/di/container.d.ts.map +0 -1
- package/lib/typescript/core/encoding/base64.d.ts.map +0 -1
- package/lib/typescript/core/id/deviceId.d.ts.map +0 -1
- package/lib/typescript/core/id/installationId.d.ts.map +0 -1
- package/lib/typescript/core/id/sessionId.d.ts.map +0 -1
- package/lib/typescript/core/lifecycle/appLifecycle.d.ts.map +0 -1
- package/lib/typescript/core/lifecycle/crashSafe.d.ts.map +0 -1
- package/lib/typescript/core/logger/errorClassification.d.ts.map +0 -1
- package/lib/typescript/core/logger/internalLogger.d.ts.map +0 -1
- package/lib/typescript/core/logger/levels.d.ts.map +0 -1
- package/lib/typescript/crypto/hmacSha256.d.ts.map +0 -1
- package/lib/typescript/debug/bootstrap.d.ts.map +0 -1
- package/lib/typescript/debug/commands.d.ts.map +0 -1
- package/lib/typescript/debug/configBuilder.d.ts.map +0 -1
- package/lib/typescript/debug/exportBridge.d.ts.map +0 -1
- package/lib/typescript/debug/hostResolver.d.ts.map +0 -1
- package/lib/typescript/debug/index.d.ts.map +0 -1
- package/lib/typescript/debug/metrics.d.ts.map +0 -1
- package/lib/typescript/debug/perf.d.ts.map +0 -1
- package/lib/typescript/debug/perfWiring.d.ts.map +0 -1
- package/lib/typescript/debug/protocol.d.ts.map +0 -1
- package/lib/typescript/debug/redaction.d.ts.map +0 -1
- package/lib/typescript/debug/replayWiring.d.ts.map +0 -1
- package/lib/typescript/debug/screenTracking.d.ts.map +0 -1
- package/lib/typescript/debug/sessionWiring.d.ts.map +0 -1
- package/lib/typescript/debug/stream.d.ts.map +0 -1
- package/lib/typescript/debug/transport.d.ts.map +0 -1
- package/lib/typescript/features/bugreport/BugReportFeature.d.ts.map +0 -1
- package/lib/typescript/features/bugreport/buildPayload.d.ts.map +0 -1
- package/lib/typescript/features/bugreport/index.d.ts.map +0 -1
- package/lib/typescript/features/crash/CrashFeature.d.ts.map +0 -1
- package/lib/typescript/features/crash/CrashReporter.d.ts.map +0 -1
- package/lib/typescript/features/crash/NativeCrashFeature.d.ts.map +0 -1
- package/lib/typescript/features/crash/capture.d.ts.map +0 -1
- package/lib/typescript/features/crash/globalHandler.d.ts.map +0 -1
- package/lib/typescript/features/crash/index.d.ts.map +0 -1
- package/lib/typescript/features/crash/nativeCrashBridge.d.ts.map +0 -1
- package/lib/typescript/features/crash/rejectionHandler.d.ts.map +0 -1
- package/lib/typescript/features/engage/EngageAnchor.d.ts.map +0 -1
- package/lib/typescript/features/engage/EngageArchetypeRenderers.d.ts.map +0 -1
- package/lib/typescript/features/engage/EngageInAppView.d.ts.map +0 -1
- package/lib/typescript/features/engage/EngageInlinePlacement.d.ts.map +0 -1
- package/lib/typescript/features/engage/EngagePromptProvider.d.ts.map +0 -1
- package/lib/typescript/features/engage/EngagePromptView.d.ts.map +0 -1
- package/lib/typescript/features/engage/EngageTransport.d.ts.map +0 -1
- package/lib/typescript/features/engage/EngageVariantContent.d.ts.map +0 -1
- package/lib/typescript/features/engage/attachmentCapture.d.ts.map +0 -1
- package/lib/typescript/features/engage/captureVoiceAttachment.d.ts.map +0 -1
- package/lib/typescript/features/engage/engageCoachmarkTour.d.ts.map +0 -1
- package/lib/typescript/features/engage/engageGameLogic.d.ts.map +0 -1
- package/lib/typescript/features/engage/engageMediaSizing.d.ts.map +0 -1
- package/lib/typescript/features/engage/engageMultiStepSheet.d.ts.map +0 -1
- package/lib/typescript/features/engage/engageOutcome.d.ts.map +0 -1
- package/lib/typescript/features/engage/engagePushTokenBridge.d.ts.map +0 -1
- package/lib/typescript/features/engage/engageShakeBridge.d.ts.map +0 -1
- package/lib/typescript/features/engage/engageSignals.d.ts.map +0 -1
- package/lib/typescript/features/engage/engageStoreReviewBridge.d.ts.map +0 -1
- package/lib/typescript/features/engage/engageTestSeenStore.d.ts.map +0 -1
- package/lib/typescript/features/engage/engageThrottle.d.ts.map +0 -1
- package/lib/typescript/features/engage/engageTriggerEngine.d.ts.map +0 -1
- package/lib/typescript/features/engage/engageTypes.d.ts.map +0 -1
- package/lib/typescript/features/engage/engageVariantResolver.d.ts.map +0 -1
- package/lib/typescript/features/engage/engageWindowInsets.d.ts.map +0 -1
- package/lib/typescript/features/engage/gestureTriggerDetector.d.ts.map +0 -1
- package/lib/typescript/features/engage/transcription/TranscriptionProvider.d.ts.map +0 -1
- package/lib/typescript/features/install-referrer/installReferrer.d.ts.map +0 -1
- package/lib/typescript/features/journey/ScaleBunDebugRoot.d.ts.map +0 -1
- package/lib/typescript/features/journey/ScaleBunFlatList.d.ts.map +0 -1
- package/lib/typescript/features/journey/ScaleBunImpression.d.ts.map +0 -1
- package/lib/typescript/features/journey/ScaleBunScrollView.d.ts.map +0 -1
- package/lib/typescript/features/journey/ScaleBunSectionList.d.ts.map +0 -1
- package/lib/typescript/features/journey/calibrationContext.d.ts.map +0 -1
- package/lib/typescript/features/journey/gestureBuffer.d.ts.map +0 -1
- package/lib/typescript/features/journey/gestureDetector.d.ts.map +0 -1
- package/lib/typescript/features/journey/impression.d.ts.map +0 -1
- package/lib/typescript/features/journey/journeyManager.d.ts.map +0 -1
- package/lib/typescript/features/journey/journeyTypes.d.ts.map +0 -1
- package/lib/typescript/features/journey/navDetector.d.ts.map +0 -1
- package/lib/typescript/features/journey/screenshotHelper.d.ts.map +0 -1
- package/lib/typescript/features/journey/targetRegistry.d.ts.map +0 -1
- package/lib/typescript/features/journey/touchTarget.d.ts.map +0 -1
- package/lib/typescript/features/navigation/AutoScreenDetector.d.ts.map +0 -1
- package/lib/typescript/features/network/NetworkFeature.d.ts.map +0 -1
- package/lib/typescript/features/network/index.d.ts.map +0 -1
- package/lib/typescript/features/ota/OtaEventEmitter.d.ts.map +0 -1
- package/lib/typescript/features/ota/OtaOrchestrator.d.ts.map +0 -1
- package/lib/typescript/features/ota/OtaTypes.d.ts.map +0 -1
- package/lib/typescript/features/ota/deviceAttributes.d.ts.map +0 -1
- package/lib/typescript/features/ota/environment.d.ts.map +0 -1
- package/lib/typescript/features/ota/geoCountry.d.ts.map +0 -1
- package/lib/typescript/features/ota/retry.d.ts.map +0 -1
- package/lib/typescript/features/ota/signature.d.ts.map +0 -1
- package/lib/typescript/features/ota/useOtaUpdate.d.ts.map +0 -1
- package/lib/typescript/features/performance/PerformanceFeature.d.ts.map +0 -1
- package/lib/typescript/features/performance/collectors/AppLaunchCollector.d.ts.map +0 -1
- package/lib/typescript/features/performance/collectors/AutoScreenLoadCollector.d.ts.map +0 -1
- package/lib/typescript/features/performance/collectors/CustomTraceCollector.d.ts.map +0 -1
- package/lib/typescript/features/performance/collectors/FrameMetricsCollector.d.ts.map +0 -1
- package/lib/typescript/features/performance/collectors/JsStallCollector.d.ts.map +0 -1
- package/lib/typescript/features/performance/collectors/NetworkPerfCollector.d.ts.map +0 -1
- package/lib/typescript/features/performance/collectors/ScreenLoadCollector.d.ts.map +0 -1
- package/lib/typescript/features/performance/collectors/UiHangCollector.d.ts.map +0 -1
- package/lib/typescript/features/performance/config.d.ts.map +0 -1
- package/lib/typescript/features/performance/getNativePerformanceModule.d.ts.map +0 -1
- package/lib/typescript/features/performance/index.d.ts.map +0 -1
- package/lib/typescript/features/performance/metrics/MetricsEngine.d.ts.map +0 -1
- package/lib/typescript/features/performance/models.d.ts.map +0 -1
- package/lib/typescript/features/performance/transport/PerformanceTransport.d.ts.map +0 -1
- package/lib/typescript/features/profiler/ProfilerFeature.d.ts.map +0 -1
- package/lib/typescript/features/profiler/config.d.ts.map +0 -1
- package/lib/typescript/features/profiler/contracts.d.ts.map +0 -1
- package/lib/typescript/features/profiler/index.d.ts.map +0 -1
- package/lib/typescript/features/profiler/models.d.ts.map +0 -1
- package/lib/typescript/features/profiler/transport/ProfilerTransport.d.ts.map +0 -1
- package/lib/typescript/features/replay/bridge/adapters/bridgeAdapter.d.ts.map +0 -1
- package/lib/typescript/features/replay/bridge/eventEmitter.d.ts.map +0 -1
- package/lib/typescript/features/replay/bridge/nativeModule.d.ts.map +0 -1
- package/lib/typescript/features/replay/core/clock/clock.d.ts.map +0 -1
- package/lib/typescript/features/replay/core/config/defaults.d.ts.map +0 -1
- package/lib/typescript/features/replay/core/config/validator.d.ts.map +0 -1
- package/lib/typescript/features/replay/core/env/environmentDetector.d.ts.map +0 -1
- package/lib/typescript/features/replay/core/errors/safeCall.d.ts.map +0 -1
- package/lib/typescript/features/replay/core/ids/sessionId.d.ts.map +0 -1
- package/lib/typescript/features/replay/core/logger/logger.d.ts.map +0 -1
- package/lib/typescript/features/replay/core/privacy/privacyTypes.d.ts.map +0 -1
- package/lib/typescript/features/replay/core/queue/boundedQueue.d.ts.map +0 -1
- package/lib/typescript/features/replay/integrations/alert/alertInstrumentation.d.ts.map +0 -1
- package/lib/typescript/features/replay/integrations/logs/consoleIntegration.d.ts.map +0 -1
- package/lib/typescript/features/replay/integrations/network/networkAdapter.d.ts.map +0 -1
- package/lib/typescript/features/replay/integrations/react-navigation/navigationIntegration.d.ts.map +0 -1
- package/lib/typescript/features/replay/integrations/touch/ReplayRoot.d.ts.map +0 -1
- package/lib/typescript/features/replay/pipeline/batching/batchManager.d.ts.map +0 -1
- package/lib/typescript/features/replay/pipeline/envelope/envelopeBuilder.d.ts.map +0 -1
- package/lib/typescript/features/replay/pipeline/retry/retryPolicy.d.ts.map +0 -1
- package/lib/typescript/features/replay/pipeline/transport/transportTypes.d.ts.map +0 -1
- package/lib/typescript/features/replay/public/api.d.ts.map +0 -1
- package/lib/typescript/features/replay/public/enums.d.ts.map +0 -1
- package/lib/typescript/features/replay/public/types.d.ts.map +0 -1
- package/lib/typescript/features/replay/replay/breadcrumbs/breadcrumbCollector.d.ts.map +0 -1
- package/lib/typescript/features/replay/replay/frames/frameModels.d.ts.map +0 -1
- package/lib/typescript/features/replay/replay/session/sessionOrchestrator.d.ts.map +0 -1
- package/lib/typescript/features/replay/replay/timeline/timelineModels.d.ts.map +0 -1
- package/lib/typescript/features/replay/transport/BackendReplayTransport.d.ts.map +0 -1
- package/lib/typescript/features/replay/transport/CompositeReplayTransport.d.ts.map +0 -1
- package/lib/typescript/features/replay/transport/DesktopReplayTransport.d.ts.map +0 -1
- package/lib/typescript/features/replay/transport/ReplayTransport.d.ts.map +0 -1
- package/lib/typescript/features/session/BackendSessionAdapter.d.ts.map +0 -1
- package/lib/typescript/features/session/DesktopSessionTransport.d.ts.map +0 -1
- package/lib/typescript/features/session/JourneyEventPipeline.d.ts.map +0 -1
- package/lib/typescript/features/session/ReplayCaptureManager.d.ts.map +0 -1
- package/lib/typescript/features/session/ScrollTracker.d.ts.map +0 -1
- package/lib/typescript/features/session/SessionManager.d.ts.map +0 -1
- package/lib/typescript/features/session/SyncDecisionEngine.d.ts.map +0 -1
- package/lib/typescript/features/session/index.d.ts.map +0 -1
- package/lib/typescript/features/session/nativeCapture.d.ts.map +0 -1
- package/lib/typescript/features/session/outboxFrameCapture.d.ts.map +0 -1
- package/lib/typescript/features/session/sessionTypes.d.ts.map +0 -1
- package/lib/typescript/features/skan/skanBridge.d.ts.map +0 -1
- package/lib/typescript/features/skan/skanConversionManager.d.ts.map +0 -1
- package/lib/typescript/index.d.ts.map +0 -1
- package/lib/typescript/integrations/fetch/fetchInterceptor.d.ts.map +0 -1
- package/lib/typescript/integrations/navigation/screenTracker.d.ts.map +0 -1
- package/lib/typescript/integrations/network/bodyCapture.d.ts.map +0 -1
- package/lib/typescript/integrations/xhr/xhrInterceptor.d.ts.map +0 -1
- package/lib/typescript/metro/composeSourceMap.d.ts.map +0 -1
- package/lib/typescript/metro/featureModules.d.ts.map +0 -1
- package/lib/typescript/metro/index.d.ts.map +0 -1
- package/lib/typescript/metro/optionalDependencyStub.d.ts.map +0 -1
- package/lib/typescript/metro/optionalModules.d.ts.map +0 -1
- package/lib/typescript/metro/serializerCompose.d.ts.map +0 -1
- package/lib/typescript/pipeline/dispatcher/dispatcher.d.ts.map +0 -1
- package/lib/typescript/pipeline/envelope/envelope.d.ts.map +0 -1
- package/lib/typescript/pipeline/envelope/serializer.d.ts.map +0 -1
- package/lib/typescript/pipeline/processors/dedupe.d.ts.map +0 -1
- package/lib/typescript/pipeline/processors/enrich.d.ts.map +0 -1
- package/lib/typescript/pipeline/processors/sampling.d.ts.map +0 -1
- package/lib/typescript/pipeline/processors/sanitize.d.ts.map +0 -1
- package/lib/typescript/pipeline/queue/flushQueue.d.ts.map +0 -1
- package/lib/typescript/pipeline/queue/memoryQueue.d.ts.map +0 -1
- package/lib/typescript/pipeline/queue/persistentQueue.d.ts.map +0 -1
- package/lib/typescript/pipeline/queue/queuePolicy.d.ts.map +0 -1
- package/lib/typescript/pipeline/scheduler/flushScheduler.d.ts.map +0 -1
- package/lib/typescript/pipeline/scheduler/retryPolicy.d.ts.map +0 -1
- package/lib/typescript/public/ScaleBunErrorBoundary.d.ts.map +0 -1
- package/lib/typescript/public/ScaleBunFacade.d.ts.map +0 -1
- package/lib/typescript/public/ScaleBunProvider.d.ts.map +0 -1
- package/lib/typescript/public/typedTracker.d.ts.map +0 -1
- package/lib/typescript/public/types.d.ts.map +0 -1
- package/lib/typescript/push/PushManager.d.ts.map +0 -1
- package/lib/typescript/push/adapters/ManualAdapter.d.ts.map +0 -1
- package/lib/typescript/push/adapters/NativeBridgeAdapter.d.ts.map +0 -1
- package/lib/typescript/push/adapters/NoopAdapter.d.ts.map +0 -1
- package/lib/typescript/push/adapters/RNFirebaseMessagingAdapter.d.ts.map +0 -1
- package/lib/typescript/push/adapters/loadMessaging.d.ts.map +0 -1
- package/lib/typescript/push/adapters/loadNotifee.d.ts.map +0 -1
- package/lib/typescript/push/adapters/selectAdapter.d.ts.map +0 -1
- package/lib/typescript/push/detect/capabilities.d.ts.map +0 -1
- package/lib/typescript/push/index.d.ts.map +0 -1
- package/lib/typescript/push/native/nativeNotifications.d.ts.map +0 -1
- package/lib/typescript/push/types.d.ts.map +0 -1
- package/lib/typescript/specs/NativeReplaySdk.d.ts.map +0 -1
- package/lib/typescript/specs/NativeScaleBunCrash.d.ts.map +0 -1
- package/lib/typescript/specs/NativeScaleBunInstallReferrer.d.ts.map +0 -1
- package/lib/typescript/specs/NativeScaleBunOta.d.ts.map +0 -1
- package/lib/typescript/specs/NativeScaleBunPerformance.d.ts.map +0 -1
- package/lib/typescript/specs/NativeScaleBunProfiler.d.ts.map +0 -1
- package/lib/typescript/specs/NativeScaleBunStorage.d.ts.map +0 -1
- package/lib/typescript/storage/StorageBackend.d.ts.map +0 -1
- package/lib/typescript/storage/db/sqlite.d.ts.map +0 -1
- package/lib/typescript/storage/files/fileStore.d.ts.map +0 -1
- package/lib/typescript/transport/auth/sdkSession.d.ts.map +0 -1
- package/lib/typescript/transport/backoff/exponentialJitter.d.ts.map +0 -1
- package/lib/typescript/transport/http/endpoints.d.ts.map +0 -1
- package/lib/typescript/transport/http/httpClient.d.ts.map +0 -1
- package/lib/typescript/transport/rateLimit/retryAfter.d.ts.map +0 -1
- package/lib/typescript/transport/signing/requestSigner.d.ts.map +0 -1
- package/lib/typescript/vendor/protocol/index.d.ts.map +0 -1
- package/lib/typescript/vendor/protocol/internal/validation.d.ts.map +0 -1
- package/lib/typescript/vendor/sdk-contracts/bridge.d.ts.map +0 -1
- package/lib/typescript/vendor/sdk-contracts/config.d.ts.map +0 -1
- package/lib/typescript/vendor/sdk-contracts/events.d.ts.map +0 -1
- package/lib/typescript/vendor/sdk-contracts/features.d.ts.map +0 -1
- package/lib/typescript/vendor/sdk-contracts/index.d.ts.map +0 -1
- package/lib/typescript/vendor/sdk-contracts/platform.d.ts.map +0 -1
- package/lib/typescript/vendor/sdk-contracts/session-boundary.d.ts.map +0 -1
- package/lib/typescript/vendor/sdk-contracts/session.d.ts.map +0 -1
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import Foundation
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* The ONE place that answers "which iPhone is this?".
|
|
5
|
+
*
|
|
6
|
+
* iOS ships no API for the name a person would recognise. `UIDevice.current.model` returns the
|
|
7
|
+
* FAMILY — the literal string "iPhone" or "iPad" — which is identical on an iPhone 6 and an
|
|
8
|
+
* iPhone 17 Pro, so a dashboard grouping by it sees one bucket holding every iOS device ever.
|
|
9
|
+
* `ReplaySdk.getDeviceInfo` sent exactly that, which is why the replay lane could never tell two
|
|
10
|
+
* iPhones apart.
|
|
11
|
+
*
|
|
12
|
+
* The hardware identifier from `uname()` — "iPhone16,2" — is the only thing the OS will tell us,
|
|
13
|
+
* and it is unique per model. It is not the marketing name and this module does not pretend
|
|
14
|
+
* otherwise: turning "iPhone16,2" into "iPhone 15 Pro Max" needs a lookup table, and that table
|
|
15
|
+
* belongs on the server, where a device released after this binary shipped can be named without
|
|
16
|
+
* waiting for every app to adopt a new SDK and ship to the App Store.
|
|
17
|
+
*
|
|
18
|
+
* `ScaleBunProfilerModule` already had this function privately; both lanes now share it so they
|
|
19
|
+
* cannot drift into reporting two different models for one device.
|
|
20
|
+
*/
|
|
21
|
+
@objc(ScaleBunDeviceIdentity)
|
|
22
|
+
public final class ScaleBunDeviceIdentity: NSObject {
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* The hardware identifier, e.g. "iPhone16,2" / "iPad14,3".
|
|
26
|
+
*
|
|
27
|
+
* On the simulator `uname` reports the HOST architecture ("x86_64", "arm64"), so the
|
|
28
|
+
* simulator's own hint is preferred when present — otherwise every developer's simulator
|
|
29
|
+
* session lands in the dashboard as a device model named after a CPU.
|
|
30
|
+
*/
|
|
31
|
+
@objc public static func modelIdentifier() -> String {
|
|
32
|
+
if let simulator = ProcessInfo.processInfo
|
|
33
|
+
.environment["SIMULATOR_MODEL_IDENTIFIER"], !simulator.isEmpty {
|
|
34
|
+
return simulator
|
|
35
|
+
}
|
|
36
|
+
var systemInfo = utsname()
|
|
37
|
+
uname(&systemInfo)
|
|
38
|
+
let identifier = withUnsafePointer(to: &systemInfo.machine) {
|
|
39
|
+
$0.withMemoryRebound(to: CChar.self, capacity: 1) {
|
|
40
|
+
String(validatingUTF8: $0) ?? ""
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
// Empty rather than "Unknown": an absent measurement must not arrive looking like a value.
|
|
44
|
+
return identifier
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// No manufacturer constant here on purpose. iOS's manufacturer is answerable without the
|
|
48
|
+
// bridge — the platform being iOS entails it — so staticDeviceContext() sets it on the FIRST
|
|
49
|
+
// event rather than waiting for a native round-trip that may never come back.
|
|
50
|
+
}
|
|
@@ -392,15 +392,9 @@ class ScaleBunProfilerModule: RCTEventEmitter {
|
|
|
392
392
|
sendEvent(withName: "ScaleBunProfiler_Capabilities", body: buildCapabilities())
|
|
393
393
|
}
|
|
394
394
|
|
|
395
|
+
/** Shared with the replay lane so the two cannot report different models for one device. */
|
|
395
396
|
private func deviceModel() -> String {
|
|
396
|
-
|
|
397
|
-
uname(&systemInfo)
|
|
398
|
-
let modelCode = withUnsafePointer(to: &systemInfo.machine) {
|
|
399
|
-
$0.withMemoryRebound(to: CChar.self, capacity: 1) {
|
|
400
|
-
String(validatingUTF8: $0) ?? "Unknown"
|
|
401
|
-
}
|
|
402
|
-
}
|
|
403
|
-
return modelCode
|
|
397
|
+
return ScaleBunDeviceIdentity.modelIdentifier()
|
|
404
398
|
}
|
|
405
399
|
|
|
406
400
|
private func isDebugBuild() -> Bool {
|
package/ios/ReplaySdk.swift
CHANGED
|
@@ -572,7 +572,9 @@ class ReplaySdk: RCTEventEmitter {
|
|
|
572
572
|
resolve([
|
|
573
573
|
"platform": "ios",
|
|
574
574
|
"osVersion": device.systemVersion,
|
|
575
|
-
|
|
575
|
+
// NOT device.model — that is the family ("iPhone"), identical on every iPhone ever
|
|
576
|
+
// made. ScaleBunDeviceIdentity reports the hardware identifier, which is unique per model.
|
|
577
|
+
"deviceModel": ScaleBunDeviceIdentity.modelIdentifier(),
|
|
576
578
|
"screenWidth": Int(screen.bounds.width * screen.scale),
|
|
577
579
|
"screenHeight": Int(screen.bounds.height * screen.scale),
|
|
578
580
|
"pixelDensity": screen.scale,
|
|
@@ -341,6 +341,28 @@ class EventTracker {
|
|
|
341
341
|
this.persistQueue();
|
|
342
342
|
}
|
|
343
343
|
|
|
344
|
+
/**
|
|
345
|
+
* Fold in device facts that were not knowable at init.
|
|
346
|
+
*
|
|
347
|
+
* `Platform.constants` answers Android synchronously, so its model and manufacturer ride the
|
|
348
|
+
* very first event. iOS exposes neither there — only the native bridge knows, and the bridge is
|
|
349
|
+
* async and may not be installed at all. Without this the iOS half of every install reported no
|
|
350
|
+
* model whatsoever.
|
|
351
|
+
*
|
|
352
|
+
* `buildEnvelope` reads `cfg.context` per event, so applying it here reaches every event from
|
|
353
|
+
* the next one onward. Detected keys WIN over whatever the integrator configured, for the same
|
|
354
|
+
* reason `mergeDeviceContext` inverts the usual precedence: a measurement must not be
|
|
355
|
+
* overridable by a guess. Empty patches are ignored so a bridge that answered with nothing
|
|
356
|
+
* cannot blank a value the static path already found.
|
|
357
|
+
*/
|
|
358
|
+
applyDetectedContext(patch) {
|
|
359
|
+
if (!patch || Object.keys(patch).length === 0) return;
|
|
360
|
+
this.cfg.context = {
|
|
361
|
+
...(this.cfg.context ?? {}),
|
|
362
|
+
...patch
|
|
363
|
+
};
|
|
364
|
+
}
|
|
365
|
+
|
|
344
366
|
// ─── internals ─────────────────────────────────────────────────────────────
|
|
345
367
|
|
|
346
368
|
buildEnvelope(eventName, properties) {
|
|
@@ -322,6 +322,22 @@ class SDKBootstrapper {
|
|
|
322
322
|
if (features.replay !== false) {
|
|
323
323
|
try {
|
|
324
324
|
__DEV__ && _internalLogger.logger.debug('[Bootstrap] Initializing unified SessionManager');
|
|
325
|
+
// SB-10: map the public top-level privacy config onto the replay
|
|
326
|
+
// privacy policy — the field the native capture path actually reads.
|
|
327
|
+
// Unspecified fields fall back to the SDK's safe defaults
|
|
328
|
+
// (redactTextInputs: true), so this only ever tightens masking.
|
|
329
|
+
const pub = this.config.privacy ?? {};
|
|
330
|
+
const sessionReplay = {
|
|
331
|
+
...(this.config.replay ?? {})
|
|
332
|
+
};
|
|
333
|
+
if (typeof pub.maskTextInputs === 'boolean' || typeof pub.maskImages === 'boolean') {
|
|
334
|
+
sessionReplay.privacyPolicy = {
|
|
335
|
+
redactTextInputs: pub.maskTextInputs ?? true,
|
|
336
|
+
redactImages: pub.maskImages ?? false,
|
|
337
|
+
blockTestIds: [],
|
|
338
|
+
captureExclusions: []
|
|
339
|
+
};
|
|
340
|
+
}
|
|
325
341
|
const sessionManager = _SessionManager.SessionManager.getInstance(null,
|
|
326
342
|
// No desktop transport initially
|
|
327
343
|
_nativeCapture.nativeCapture,
|
|
@@ -331,9 +347,7 @@ class SDKBootstrapper {
|
|
|
331
347
|
// Also flow the Feature #4 heatmap flag so tap/gesture coords
|
|
332
348
|
// route to the analytics lane even when no recording is active.
|
|
333
349
|
{
|
|
334
|
-
|
|
335
|
-
sessionReplay: this.config.replay
|
|
336
|
-
} : {}),
|
|
350
|
+
sessionReplay: sessionReplay,
|
|
337
351
|
captureInteractionHeatmap: this.config.captureInteractionHeatmap === true
|
|
338
352
|
});
|
|
339
353
|
|
|
@@ -245,6 +245,35 @@ const SHAPE = {
|
|
|
245
245
|
})
|
|
246
246
|
}
|
|
247
247
|
},
|
|
248
|
+
// SB-10: the public, documented top-level privacy config. Previously only the
|
|
249
|
+
// nested replay privacy took effect; this is validated here and mapped onto the
|
|
250
|
+
// effective replay privacy policy in the bootstrapper so it actually masks.
|
|
251
|
+
privacy: {
|
|
252
|
+
kind: 'obj',
|
|
253
|
+
opt: true,
|
|
254
|
+
shape: {
|
|
255
|
+
maskTextInputs: {
|
|
256
|
+
kind: 'bool',
|
|
257
|
+
opt: true
|
|
258
|
+
},
|
|
259
|
+
maskImages: {
|
|
260
|
+
kind: 'bool',
|
|
261
|
+
opt: true
|
|
262
|
+
},
|
|
263
|
+
redactAuth: {
|
|
264
|
+
kind: 'bool',
|
|
265
|
+
opt: true
|
|
266
|
+
},
|
|
267
|
+
redactCookies: {
|
|
268
|
+
kind: 'bool',
|
|
269
|
+
opt: true
|
|
270
|
+
},
|
|
271
|
+
redactBodies: {
|
|
272
|
+
kind: 'bool',
|
|
273
|
+
opt: true
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
},
|
|
248
277
|
captureInteractionHeatmap: bool(true),
|
|
249
278
|
// Opt-in: intercept console.* and ship the lines to the Diagnose → Logs lane in SaaS
|
|
250
279
|
// mode. OFF by default — console output can carry PII/secrets and adds ingest volume,
|
|
@@ -9,5 +9,5 @@ exports.SDK_VERSION = void 0;
|
|
|
9
9
|
* can attribute telemetry to the SDK build that produced it.
|
|
10
10
|
* Keep in sync with package.json "version".
|
|
11
11
|
*/
|
|
12
|
-
const SDK_VERSION = exports.SDK_VERSION = '1.10.
|
|
12
|
+
const SDK_VERSION = exports.SDK_VERSION = '1.10.6';
|
|
13
13
|
//# sourceMappingURL=version.js.map
|
|
@@ -104,6 +104,10 @@ function staticDeviceContext() {
|
|
|
104
104
|
if (osVersion) out.os_version = String(osVersion);
|
|
105
105
|
if (c.Model) out.device_model = String(c.Model);
|
|
106
106
|
if (c.Manufacturer) out.manufacturer = String(c.Manufacturer);else if (c.Brand) out.manufacturer = String(c.Brand);
|
|
107
|
+
// iOS exposes no manufacturer because it does not need to: every device running iOS is Apple's.
|
|
108
|
+
// A tautology, not a guess — and it means the field is populated on event #1 rather than waiting
|
|
109
|
+
// for a bridge that may never answer.
|
|
110
|
+
else if (out.platform_os === 'ios') out.manufacturer = 'Apple';
|
|
107
111
|
return out;
|
|
108
112
|
}
|
|
109
113
|
|
|
@@ -113,6 +117,7 @@ function nativeDeviceContext(info) {
|
|
|
113
117
|
if (!info) return out;
|
|
114
118
|
if (info.osVersion) out.os_version = info.osVersion;
|
|
115
119
|
if (info.deviceModel) out.device_model = info.deviceModel;
|
|
120
|
+
if (info.manufacturer) out.manufacturer = info.manufacturer;
|
|
116
121
|
return out;
|
|
117
122
|
}
|
|
118
123
|
|
|
@@ -21,29 +21,80 @@ exports.scanObjectForPII = scanObjectForPII;
|
|
|
21
21
|
|
|
22
22
|
const REDACTED = '[REDACTED]';
|
|
23
23
|
|
|
24
|
+
// ─── Safety limits (SB-25 / SB-27) ───────────────────────────────────────────
|
|
25
|
+
// The PII scanner runs synchronously on the JS thread inside the app's own
|
|
26
|
+
// fetch()/XHR call. Left unbounded it is both a ReDoS vector (a large body of
|
|
27
|
+
// alphanumeric text can make regex matching cost seconds — an Android ANR) and
|
|
28
|
+
// a payload-amplification / exfiltration channel (one warning object per match).
|
|
29
|
+
// These bounds keep every scan linear and its output small.
|
|
30
|
+
|
|
31
|
+
/** Never scan more than this many characters — truncate before matching. */
|
|
32
|
+
const MAX_SCAN_INPUT_CHARS = 16 * 1024;
|
|
33
|
+
/** Abandon a scan once it has spent this long on the JS thread. */
|
|
34
|
+
const SCAN_TIME_BUDGET_MS = 10;
|
|
35
|
+
/** Never emit more than this many PII warnings for a single event. */
|
|
36
|
+
const MAX_PII_WARNINGS = 20;
|
|
37
|
+
/** Never pattern-scrub a string value longer than this (bounded work). */
|
|
38
|
+
const MAX_STRING_SCRUB_CHARS = 64 * 1024;
|
|
39
|
+
|
|
24
40
|
/** Headers that must always be redacted (case-insensitive) */
|
|
25
41
|
const SENSITIVE_HEADERS = new Set(['authorization', 'cookie', 'set-cookie', 'x-api-key', 'x-auth-token', 'proxy-authorization']);
|
|
26
42
|
|
|
27
|
-
/**
|
|
43
|
+
/**
|
|
44
|
+
* PII detection patterns.
|
|
45
|
+
*
|
|
46
|
+
* SB-25: patterns must be free of catastrophic backtracking. The email pattern
|
|
47
|
+
* uses non-overlapping character classes with bounded quantifiers so it cannot
|
|
48
|
+
* backtrack quadratically on adversarial input like `'a'.repeat(N) + '@' + …`.
|
|
49
|
+
* All quantifiers here are bounded; combined with the input cap above this keeps
|
|
50
|
+
* matching linear in input size.
|
|
51
|
+
*/
|
|
28
52
|
const PII_PATTERNS = [{
|
|
29
53
|
name: 'email',
|
|
30
|
-
pattern: /[
|
|
54
|
+
pattern: /[A-Za-z0-9._%+-]{1,64}@[A-Za-z0-9-]{1,63}(?:\.[A-Za-z0-9-]{1,63}){0,8}\.[A-Za-z]{2,24}/g
|
|
31
55
|
}, {
|
|
32
56
|
name: 'phone',
|
|
33
|
-
pattern:
|
|
57
|
+
pattern: /\+?\d{1,3}[-.\s]?\(?\d{2,4}\)?[-.\s]?\d{3,4}[-.\s]?\d{3,4}/g
|
|
34
58
|
}, {
|
|
35
59
|
name: 'ssn',
|
|
36
60
|
pattern: /\b\d{3}-\d{2}-\d{4}\b/g
|
|
37
61
|
}, {
|
|
38
62
|
name: 'credit_card',
|
|
39
63
|
pattern: /\b\d{4}[-\s]?\d{4}[-\s]?\d{4}[-\s]?\d{4}\b/g
|
|
64
|
+
}, {
|
|
65
|
+
name: 'iban',
|
|
66
|
+
pattern: /\b[A-Z]{2}\d{2}[A-Z0-9]{10,30}\b/g
|
|
67
|
+
}, {
|
|
68
|
+
name: 'jwt',
|
|
69
|
+
pattern: /\beyJ[A-Za-z0-9_-]{5,}\.[A-Za-z0-9_-]{5,}\.[A-Za-z0-9_-]{5,}\b/g
|
|
40
70
|
}, {
|
|
41
71
|
name: 'ip_address',
|
|
42
72
|
pattern: /\b(?:\d{1,3}\.){3}\d{1,3}\b/g
|
|
43
73
|
}];
|
|
44
74
|
|
|
75
|
+
/**
|
|
76
|
+
* Value patterns used to scrub secrets out of raw string bodies (SB-02).
|
|
77
|
+
* These are applied to string values (including parsed-out JSON string leaves
|
|
78
|
+
* and non-JSON bodies) where a denylisted key name is not available. All are
|
|
79
|
+
* bounded / anchored to avoid backtracking.
|
|
80
|
+
*/
|
|
81
|
+
const VALUE_SCRUB_PATTERNS = [{
|
|
82
|
+
name: 'jwt',
|
|
83
|
+
pattern: /eyJ[A-Za-z0-9_-]{5,}\.[A-Za-z0-9_-]{5,}\.[A-Za-z0-9_-]{5,}/g
|
|
84
|
+
}, {
|
|
85
|
+
name: 'email',
|
|
86
|
+
pattern: /[A-Za-z0-9._%+-]{1,64}@[A-Za-z0-9-]{1,63}(?:\.[A-Za-z0-9-]{1,63}){0,8}\.[A-Za-z]{2,24}/g
|
|
87
|
+
}, {
|
|
88
|
+
name: 'iban',
|
|
89
|
+
pattern: /\b[A-Z]{2}\d{2}[A-Z0-9]{10,30}\b/g
|
|
90
|
+
}, {
|
|
91
|
+
name: 'credit_card',
|
|
92
|
+
pattern: /\b\d{4}[-\s]?\d{4}[-\s]?\d{4}[-\s]?\d{2,7}\b/g,
|
|
93
|
+
luhn: true
|
|
94
|
+
}];
|
|
95
|
+
|
|
45
96
|
/** Keys in request/response bodies that likely contain sensitive data */
|
|
46
|
-
const SENSITIVE_BODY_KEYS = new Set(['password', 'passwd', 'secret', 'token', 'access_token', 'refresh_token', 'api_key', 'apiKey', 'private_key', 'privateKey', 'credit_card', 'creditCard', '
|
|
97
|
+
const SENSITIVE_BODY_KEYS = new Set(['password', 'passwd', 'secret', 'token', 'access_token', 'refresh_token', 'id_token', 'api_key', 'apiKey', 'private_key', 'privateKey', 'credit_card', 'creditCard', 'ccnumber', 'cardnumber', 'card_number', 'pan', 'cvv', 'cvc', 'ssn', 'social_security', 'nationalid', 'national_id', 'iban', 'otp', 'pin', 'totp', 'mfa', 'mnemonic', 'seed']);
|
|
47
98
|
|
|
48
99
|
// ─── Header Redaction ───────────────────────────────────────────────────────
|
|
49
100
|
|
|
@@ -70,9 +121,68 @@ function redactHeaders(headers) {
|
|
|
70
121
|
|
|
71
122
|
// ─── Body Redaction ─────────────────────────────────────────────────────────
|
|
72
123
|
|
|
124
|
+
/** Normalize a key for denylist comparison: lowercase, strip separators. */
|
|
125
|
+
function _normalizeKey(key) {
|
|
126
|
+
return key.toLowerCase().replace(/[_\-\s]/g, '');
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/** Normalized denylist so `access_token`, `accessToken` and `Access-Token` all match. */
|
|
130
|
+
const NORMALIZED_SENSITIVE_KEYS = new Set(Array.from(SENSITIVE_BODY_KEYS, _normalizeKey));
|
|
131
|
+
function _isSensitiveKey(key) {
|
|
132
|
+
return NORMALIZED_SENSITIVE_KEYS.has(_normalizeKey(key));
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/** Passes the Luhn checksum — used to avoid over-redacting random 16-digit ids. */
|
|
136
|
+
function _luhnValid(digits) {
|
|
137
|
+
const s = digits.replace(/[^\d]/g, '');
|
|
138
|
+
if (s.length < 12 || s.length > 19) return false;
|
|
139
|
+
let sum = 0;
|
|
140
|
+
let alt = false;
|
|
141
|
+
for (let i = s.length - 1; i >= 0; i--) {
|
|
142
|
+
let d = s.charCodeAt(i) - 48;
|
|
143
|
+
if (alt) {
|
|
144
|
+
d *= 2;
|
|
145
|
+
if (d > 9) d -= 9;
|
|
146
|
+
}
|
|
147
|
+
sum += d;
|
|
148
|
+
alt = !alt;
|
|
149
|
+
}
|
|
150
|
+
return sum % 10 === 0;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* Scrub structured secrets (JWT, email, IBAN, Luhn-valid card) out of a raw
|
|
155
|
+
* string value where no denylisted key name is available (SB-02). Bounded work:
|
|
156
|
+
* the string is capped and every pattern is anchored/bounded.
|
|
157
|
+
*/
|
|
158
|
+
function _scrubSecretsInString(value) {
|
|
159
|
+
if (value.length > MAX_STRING_SCRUB_CHARS) {
|
|
160
|
+
value = value.slice(0, MAX_STRING_SCRUB_CHARS);
|
|
161
|
+
}
|
|
162
|
+
let out = value;
|
|
163
|
+
try {
|
|
164
|
+
for (const {
|
|
165
|
+
pattern,
|
|
166
|
+
luhn
|
|
167
|
+
} of VALUE_SCRUB_PATTERNS) {
|
|
168
|
+
pattern.lastIndex = 0;
|
|
169
|
+
out = out.replace(pattern, m => luhn && !_luhnValid(m) ? m : REDACTED);
|
|
170
|
+
}
|
|
171
|
+
} catch {
|
|
172
|
+
// Never throw — return whatever scrubbing produced so far.
|
|
173
|
+
}
|
|
174
|
+
return out;
|
|
175
|
+
}
|
|
176
|
+
|
|
73
177
|
/**
|
|
74
178
|
* Deep-redact sensitive keys in a body object. Returns a new object.
|
|
75
179
|
* Handles nested objects and arrays. Never throws.
|
|
180
|
+
*
|
|
181
|
+
* SB-02: string bodies (what JSON.stringify produces — i.e. essentially every
|
|
182
|
+
* React Native network body) are no longer passed through untouched. If a string
|
|
183
|
+
* parses as JSON it is deep-redacted and re-serialized; otherwise structured
|
|
184
|
+
* secrets in the string are scrubbed. This closes the "6 of 9 seeded secrets
|
|
185
|
+
* survived" leak while leaving non-sensitive metadata intact.
|
|
76
186
|
*/
|
|
77
187
|
function redactBody(body, maxDepth = 10) {
|
|
78
188
|
try {
|
|
@@ -85,9 +195,7 @@ function _redactValue(value, depth, maxDepth) {
|
|
|
85
195
|
if (depth > maxDepth) return '[MAX_DEPTH]';
|
|
86
196
|
if (value === null || value === undefined) return value;
|
|
87
197
|
if (typeof value === 'string') {
|
|
88
|
-
|
|
89
|
-
// PII scanning is a separate concern
|
|
90
|
-
return value;
|
|
198
|
+
return _redactString(value, depth, maxDepth);
|
|
91
199
|
}
|
|
92
200
|
if (Array.isArray(value)) {
|
|
93
201
|
return value.map(item => _redactValue(item, depth + 1, maxDepth));
|
|
@@ -95,7 +203,7 @@ function _redactValue(value, depth, maxDepth) {
|
|
|
95
203
|
if (typeof value === 'object') {
|
|
96
204
|
const result = {};
|
|
97
205
|
for (const [key, val] of Object.entries(value)) {
|
|
98
|
-
if (
|
|
206
|
+
if (_isSensitiveKey(key)) {
|
|
99
207
|
result[key] = REDACTED;
|
|
100
208
|
} else {
|
|
101
209
|
result[key] = _redactValue(val, depth + 1, maxDepth);
|
|
@@ -106,66 +214,145 @@ function _redactValue(value, depth, maxDepth) {
|
|
|
106
214
|
return value;
|
|
107
215
|
}
|
|
108
216
|
|
|
217
|
+
/**
|
|
218
|
+
* Redact a string value. If it looks like a JSON object/array, parse it, redact
|
|
219
|
+
* by key, and re-serialize so a serialized body such as
|
|
220
|
+
* `{"password":"...","otp":"..."}` is scrubbed. Otherwise scrub structured
|
|
221
|
+
* secrets out of the raw text.
|
|
222
|
+
*/
|
|
223
|
+
function _redactString(value, depth, maxDepth) {
|
|
224
|
+
const trimmed = value.trimStart();
|
|
225
|
+
if (trimmed.startsWith('{') || trimmed.startsWith('[')) {
|
|
226
|
+
try {
|
|
227
|
+
const parsed = JSON.parse(value);
|
|
228
|
+
if (parsed !== null && typeof parsed === 'object') {
|
|
229
|
+
const redacted = _redactValue(parsed, depth + 1, maxDepth);
|
|
230
|
+
return JSON.stringify(redacted);
|
|
231
|
+
}
|
|
232
|
+
} catch {
|
|
233
|
+
// Not valid JSON — fall through to pattern scrubbing.
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
return _scrubSecretsInString(value);
|
|
237
|
+
}
|
|
238
|
+
|
|
109
239
|
// ─── PII Scanning ───────────────────────────────────────────────────────────
|
|
110
240
|
|
|
111
241
|
/**
|
|
112
|
-
*
|
|
113
|
-
*
|
|
242
|
+
* Bounded scan context shared across one logical scan (SB-25 / SB-27). Enforces
|
|
243
|
+
* a wall-clock budget and a warning cap while accumulating per-type counts so the
|
|
244
|
+
* final output can report `{ email: 5000 }` instead of 5000 fragment objects.
|
|
114
245
|
*/
|
|
115
|
-
|
|
116
|
-
|
|
246
|
+
|
|
247
|
+
function _newScanContext() {
|
|
248
|
+
return {
|
|
249
|
+
warnings: [],
|
|
250
|
+
byType: {},
|
|
251
|
+
deadline: Date.now() + SCAN_TIME_BUDGET_MS,
|
|
252
|
+
truncated: false,
|
|
253
|
+
total: 0
|
|
254
|
+
};
|
|
255
|
+
}
|
|
256
|
+
function _pushWarning(ctx, type, rawMatch, location) {
|
|
257
|
+
ctx.total += 1;
|
|
258
|
+
ctx.byType[type] = (ctx.byType[type] ?? 0) + 1;
|
|
259
|
+
if (ctx.warnings.length < MAX_PII_WARNINGS) {
|
|
260
|
+
ctx.warnings.push({
|
|
261
|
+
type,
|
|
262
|
+
match: _maskPII(rawMatch),
|
|
263
|
+
location
|
|
264
|
+
});
|
|
265
|
+
} else {
|
|
266
|
+
ctx.truncated = true;
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
/**
|
|
271
|
+
* Finalize a scan: append a single summary entry carrying per-type counts when
|
|
272
|
+
* anything was dropped, so consumers see the full magnitude without the SDK
|
|
273
|
+
* shipping every matched fragment (SB-27).
|
|
274
|
+
*/
|
|
275
|
+
function _finalizeScan(ctx) {
|
|
276
|
+
if (ctx.truncated) {
|
|
277
|
+
ctx.warnings.push({
|
|
278
|
+
type: '_summary',
|
|
279
|
+
match: `truncated: ${ctx.total} matches`,
|
|
280
|
+
location: `counts:${JSON.stringify(ctx.byType)}`
|
|
281
|
+
});
|
|
282
|
+
}
|
|
283
|
+
return ctx.warnings;
|
|
284
|
+
}
|
|
285
|
+
function _scanTextInto(text, location, ctx) {
|
|
286
|
+
// SB-25: cap the input before any regex runs, so matching cost is bounded
|
|
287
|
+
// regardless of the (attacker-controlled) body size.
|
|
288
|
+
const input = text.length > MAX_SCAN_INPUT_CHARS ? text.slice(0, MAX_SCAN_INPUT_CHARS) : text;
|
|
117
289
|
try {
|
|
118
290
|
for (const {
|
|
119
291
|
name,
|
|
120
292
|
pattern
|
|
121
293
|
} of PII_PATTERNS) {
|
|
122
|
-
// Reset regex state
|
|
123
294
|
pattern.lastIndex = 0;
|
|
124
|
-
let match = pattern.exec(
|
|
295
|
+
let match = pattern.exec(input);
|
|
125
296
|
while (match) {
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
297
|
+
_pushWarning(ctx, name, match[0], location);
|
|
298
|
+
// SB-25: abandon the scan if it has exceeded its time budget.
|
|
299
|
+
if (Date.now() > ctx.deadline) {
|
|
300
|
+
ctx.truncated = true;
|
|
301
|
+
return;
|
|
302
|
+
}
|
|
303
|
+
if (pattern.lastIndex === match.index) pattern.lastIndex++; // guard zero-width
|
|
304
|
+
match = pattern.exec(input);
|
|
132
305
|
}
|
|
133
306
|
}
|
|
134
307
|
} catch {
|
|
135
|
-
// Never throw —
|
|
308
|
+
// Never throw — keep whatever was found so far.
|
|
136
309
|
}
|
|
137
|
-
return warnings;
|
|
138
310
|
}
|
|
139
311
|
|
|
140
312
|
/**
|
|
141
|
-
* Scan
|
|
313
|
+
* Scan a string for PII patterns. Returns a bounded list of warnings.
|
|
314
|
+
* Never throws.
|
|
315
|
+
*/
|
|
316
|
+
function scanForPII(text, location = 'unknown') {
|
|
317
|
+
const ctx = _newScanContext();
|
|
318
|
+
_scanTextInto(text, location, ctx);
|
|
319
|
+
return _finalizeScan(ctx);
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
/**
|
|
323
|
+
* Scan an object deeply for PII. Returns a bounded list of warnings.
|
|
142
324
|
* Never throws.
|
|
143
325
|
*/
|
|
144
326
|
function scanObjectForPII(obj, basePath = '', maxDepth = 10) {
|
|
145
|
-
const
|
|
327
|
+
const ctx = _newScanContext();
|
|
146
328
|
try {
|
|
147
|
-
|
|
329
|
+
_scanObjectInto(obj, basePath, 0, maxDepth, ctx);
|
|
148
330
|
} catch {
|
|
149
331
|
// Never throw
|
|
150
332
|
}
|
|
151
|
-
return
|
|
333
|
+
return _finalizeScan(ctx);
|
|
152
334
|
}
|
|
153
|
-
function
|
|
335
|
+
function _scanObjectInto(value, path, depth, maxDepth, ctx) {
|
|
154
336
|
if (depth > maxDepth || value === null || value === undefined) return;
|
|
337
|
+
if (ctx.truncated || Date.now() > ctx.deadline) {
|
|
338
|
+
ctx.truncated = true;
|
|
339
|
+
return;
|
|
340
|
+
}
|
|
155
341
|
if (typeof value === 'string') {
|
|
156
|
-
|
|
157
|
-
warnings.push(...found);
|
|
342
|
+
_scanTextInto(value, path, ctx);
|
|
158
343
|
return;
|
|
159
344
|
}
|
|
160
345
|
if (Array.isArray(value)) {
|
|
161
|
-
value.
|
|
162
|
-
|
|
163
|
-
|
|
346
|
+
for (let i = 0; i < value.length; i++) {
|
|
347
|
+
if (ctx.truncated) return;
|
|
348
|
+
_scanObjectInto(value[i], `${path}[${i}]`, depth + 1, maxDepth, ctx);
|
|
349
|
+
}
|
|
164
350
|
return;
|
|
165
351
|
}
|
|
166
352
|
if (typeof value === 'object') {
|
|
167
353
|
for (const [key, val] of Object.entries(value)) {
|
|
168
|
-
|
|
354
|
+
if (ctx.truncated) return;
|
|
355
|
+
_scanObjectInto(val, path ? `${path}.${key}` : key, depth + 1, maxDepth, ctx);
|
|
169
356
|
}
|
|
170
357
|
}
|
|
171
358
|
}
|
|
@@ -207,20 +394,19 @@ function redactUrl(url) {
|
|
|
207
394
|
* Apply full redaction pipeline to a network event.
|
|
208
395
|
*/
|
|
209
396
|
function redactNetworkEvent(event) {
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
397
|
+
// One bounded context for the whole event so the aggregate warning count and
|
|
398
|
+
// scan time stay capped across url + request + response (SB-25 / SB-27).
|
|
399
|
+
const ctx = _newScanContext();
|
|
213
400
|
if (event.url) {
|
|
214
|
-
|
|
401
|
+
_scanTextInto(event.url, 'url', ctx);
|
|
215
402
|
}
|
|
216
|
-
|
|
217
|
-
// Scan bodies for PII
|
|
218
403
|
if (event.requestBody) {
|
|
219
|
-
|
|
404
|
+
_scanObjectInto(event.requestBody, 'requestBody', 0, 10, ctx);
|
|
220
405
|
}
|
|
221
406
|
if (event.responseBody) {
|
|
222
|
-
|
|
407
|
+
_scanObjectInto(event.responseBody, 'responseBody', 0, 10, ctx);
|
|
223
408
|
}
|
|
409
|
+
const piiWarnings = _finalizeScan(ctx);
|
|
224
410
|
return {
|
|
225
411
|
url: event.url ? redactUrl(event.url) : '',
|
|
226
412
|
method: event.method ?? 'GET',
|
|
@@ -583,7 +583,15 @@ function ScaleBunDebugRoot({
|
|
|
583
583
|
});
|
|
584
584
|
}
|
|
585
585
|
} catch {/* no-throw */}
|
|
586
|
-
|
|
586
|
+
// 600ms, was 200ms. The race this defer exists for happens on the FIRST tap of a
|
|
587
|
+
// mount: native isn't confirmed yet, JS emitted at 200ms, then the first native
|
|
588
|
+
// event crossed the bridge at ~300-400ms — recording the same tap TWICE, with the
|
|
589
|
+
// JS copy missing normalizedX/Y whenever the async root-view measure hadn't
|
|
590
|
+
// resolved (an interaction the heatmap cannot place). QA hit exactly this pair.
|
|
591
|
+
// The wider defer lets the first native event cancel the JS emission instead; on
|
|
592
|
+
// devices with no native tracker at all it merely delays a background emission,
|
|
593
|
+
// which nothing user-visible waits on.
|
|
594
|
+
}, 600);
|
|
587
595
|
}
|
|
588
596
|
touchStartRef.current = null;
|
|
589
597
|
} catch {/* no-throw */}
|