@scalebun/react-native 1.0.3 → 1.1.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/core/crash/CrashStorage.kt +115 -1
- package/android/src/main/java/com/scalebun/core/crash/NativeCrashHandler.kt +14 -0
- package/android/src/main/java/com/scalebun/replaysdk/ReplaySdkModule.kt +25 -9
- package/android/src/main/java/com/scalebun/replaysdk/voice/VoiceTranscriber.kt +68 -2
- package/android/src/main/java/com/scalebun/rn/crash/ScaleBunCrashModule.kt +66 -2
- package/android/src/main/java/com/scalebun/rn/ota/SlotManager.kt +70 -4
- package/ios/Crash/ScaleBunCrashBridge.mm +6 -0
- package/ios/Crash/ScaleBunCrashHandler.swift +14 -1
- package/ios/Crash/ScaleBunCrashModule.swift +14 -0
- package/ios/Crash/ScaleBunCrashSignalBridge.h +32 -1
- package/ios/Crash/ScaleBunCrashSignalBridge.m +172 -7
- package/ios/Crash/ScaleBunCrashSignalStress.c +137 -0
- package/ios/Crash/ScaleBunCrashStorage.swift +75 -0
- package/lib/commonjs/analytics/EventTracker.js +30 -2
- package/lib/commonjs/analytics/EventTracker.js.map +1 -1
- package/lib/commonjs/bootstrap/SDKBootstrapper.js +31 -23
- 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 +26 -5
- 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/context/device.js +130 -0
- package/lib/commonjs/core/context/device.js.map +1 -1
- package/lib/commonjs/debug/replayWiring.js +2 -1
- package/lib/commonjs/debug/replayWiring.js.map +1 -1
- package/lib/commonjs/features/bugreport/BugReportFeature.js +112 -0
- package/lib/commonjs/features/bugreport/BugReportFeature.js.map +1 -0
- package/lib/commonjs/features/bugreport/buildPayload.js +97 -0
- package/lib/commonjs/features/bugreport/buildPayload.js.map +1 -0
- package/lib/commonjs/features/crash/CrashReporter.js +25 -1
- package/lib/commonjs/features/crash/CrashReporter.js.map +1 -1
- package/lib/commonjs/features/crash/capture.js +27 -9
- package/lib/commonjs/features/crash/capture.js.map +1 -1
- package/lib/commonjs/features/crash/nativeCrashBridge.js +163 -28
- package/lib/commonjs/features/crash/nativeCrashBridge.js.map +1 -1
- package/lib/commonjs/features/engage/EngagePromptProvider.js +36 -2
- package/lib/commonjs/features/engage/EngagePromptProvider.js.map +1 -1
- package/lib/commonjs/features/engage/EngagePromptView.js +47 -14
- package/lib/commonjs/features/engage/EngagePromptView.js.map +1 -1
- package/lib/commonjs/features/engage/engageTriggerEngine.js +10 -0
- package/lib/commonjs/features/engage/engageTriggerEngine.js.map +1 -1
- package/lib/commonjs/features/engage/engageTypes.js.map +1 -1
- package/lib/commonjs/features/journey/ScaleBunDebugRoot.js +2 -1
- package/lib/commonjs/features/journey/ScaleBunDebugRoot.js.map +1 -1
- package/lib/commonjs/features/ota/OtaOrchestrator.js +72 -5
- package/lib/commonjs/features/ota/OtaOrchestrator.js.map +1 -1
- package/lib/commonjs/features/ota/deviceAttributes.js +48 -0
- package/lib/commonjs/features/ota/deviceAttributes.js.map +1 -0
- package/lib/commonjs/features/ota/geoCountry.js +93 -0
- package/lib/commonjs/features/ota/geoCountry.js.map +1 -0
- package/lib/commonjs/features/ota/useOtaUpdate.js +4 -1
- package/lib/commonjs/features/ota/useOtaUpdate.js.map +1 -1
- package/lib/commonjs/features/performance/PerformanceFeature.js +23 -9
- package/lib/commonjs/features/performance/PerformanceFeature.js.map +1 -1
- package/lib/commonjs/features/performance/collectors/FrameMetricsCollector.js +69 -9
- package/lib/commonjs/features/performance/collectors/FrameMetricsCollector.js.map +1 -1
- package/lib/commonjs/features/performance/transport/PerformanceTransport.js +25 -0
- package/lib/commonjs/features/performance/transport/PerformanceTransport.js.map +1 -1
- package/lib/commonjs/features/session/BackendSessionAdapter.js +128 -11
- package/lib/commonjs/features/session/BackendSessionAdapter.js.map +1 -1
- package/lib/commonjs/features/session/JourneyEventPipeline.js +1 -0
- package/lib/commonjs/features/session/JourneyEventPipeline.js.map +1 -1
- package/lib/commonjs/features/session/ReplayCaptureManager.js +46 -0
- package/lib/commonjs/features/session/ReplayCaptureManager.js.map +1 -1
- package/lib/commonjs/features/session/SessionManager.js +42 -12
- package/lib/commonjs/features/session/SessionManager.js.map +1 -1
- package/lib/commonjs/features/session/nativeCapture.js +4 -4
- package/lib/commonjs/features/session/nativeCapture.js.map +1 -1
- package/lib/commonjs/features/session/outboxFrameCapture.js +3 -2
- package/lib/commonjs/features/session/outboxFrameCapture.js.map +1 -1
- package/lib/commonjs/features/session/sessionTypes.js.map +1 -1
- package/lib/commonjs/index.js +13 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/public/ScaleBunFacade.js +199 -2
- package/lib/commonjs/public/ScaleBunFacade.js.map +1 -1
- package/lib/commonjs/specs/NativeScaleBunCrash.js.map +1 -1
- package/lib/module/analytics/EventTracker.js +29 -1
- package/lib/module/analytics/EventTracker.js.map +1 -1
- package/lib/module/bootstrap/SDKBootstrapper.js +29 -21
- 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 +26 -5
- 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/context/device.js +119 -0
- package/lib/module/core/context/device.js.map +1 -1
- package/lib/module/debug/replayWiring.js +2 -1
- package/lib/module/debug/replayWiring.js.map +1 -1
- package/lib/module/features/bugreport/BugReportFeature.js +105 -0
- package/lib/module/features/bugreport/BugReportFeature.js.map +1 -0
- package/lib/module/features/bugreport/buildPayload.js +91 -0
- package/lib/module/features/bugreport/buildPayload.js.map +1 -0
- package/lib/module/features/crash/CrashReporter.js +25 -1
- package/lib/module/features/crash/CrashReporter.js.map +1 -1
- package/lib/module/features/crash/capture.js +28 -9
- package/lib/module/features/crash/capture.js.map +1 -1
- package/lib/module/features/crash/nativeCrashBridge.js +161 -28
- package/lib/module/features/crash/nativeCrashBridge.js.map +1 -1
- package/lib/module/features/engage/EngagePromptProvider.js +36 -2
- package/lib/module/features/engage/EngagePromptProvider.js.map +1 -1
- package/lib/module/features/engage/EngagePromptView.js +47 -14
- package/lib/module/features/engage/EngagePromptView.js.map +1 -1
- package/lib/module/features/engage/engageTriggerEngine.js +10 -0
- package/lib/module/features/engage/engageTriggerEngine.js.map +1 -1
- package/lib/module/features/engage/engageTypes.js.map +1 -1
- package/lib/module/features/journey/ScaleBunDebugRoot.js +2 -1
- package/lib/module/features/journey/ScaleBunDebugRoot.js.map +1 -1
- package/lib/module/features/ota/OtaOrchestrator.js +72 -5
- package/lib/module/features/ota/OtaOrchestrator.js.map +1 -1
- package/lib/module/features/ota/deviceAttributes.js +43 -0
- package/lib/module/features/ota/deviceAttributes.js.map +1 -0
- package/lib/module/features/ota/geoCountry.js +86 -0
- package/lib/module/features/ota/geoCountry.js.map +1 -0
- package/lib/module/features/ota/useOtaUpdate.js +4 -1
- package/lib/module/features/ota/useOtaUpdate.js.map +1 -1
- package/lib/module/features/performance/PerformanceFeature.js +23 -9
- package/lib/module/features/performance/PerformanceFeature.js.map +1 -1
- package/lib/module/features/performance/collectors/FrameMetricsCollector.js +70 -10
- package/lib/module/features/performance/collectors/FrameMetricsCollector.js.map +1 -1
- package/lib/module/features/performance/transport/PerformanceTransport.js +25 -0
- package/lib/module/features/performance/transport/PerformanceTransport.js.map +1 -1
- package/lib/module/features/session/BackendSessionAdapter.js +128 -11
- package/lib/module/features/session/BackendSessionAdapter.js.map +1 -1
- package/lib/module/features/session/JourneyEventPipeline.js +1 -0
- package/lib/module/features/session/JourneyEventPipeline.js.map +1 -1
- package/lib/module/features/session/ReplayCaptureManager.js +46 -0
- package/lib/module/features/session/ReplayCaptureManager.js.map +1 -1
- package/lib/module/features/session/SessionManager.js +42 -12
- package/lib/module/features/session/SessionManager.js.map +1 -1
- package/lib/module/features/session/nativeCapture.js +4 -5
- package/lib/module/features/session/nativeCapture.js.map +1 -1
- package/lib/module/features/session/outboxFrameCapture.js +3 -2
- package/lib/module/features/session/outboxFrameCapture.js.map +1 -1
- package/lib/module/features/session/sessionTypes.js.map +1 -1
- package/lib/module/index.js +4 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/public/ScaleBunFacade.js +199 -2
- package/lib/module/public/ScaleBunFacade.js.map +1 -1
- package/lib/module/specs/NativeScaleBunCrash.js.map +1 -1
- package/lib/typescript/analytics/EventTracker.d.ts +20 -0
- package/lib/typescript/analytics/EventTracker.d.ts.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 +4 -1
- 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/context/device.d.ts +46 -0
- package/lib/typescript/core/context/device.d.ts.map +1 -1
- package/lib/typescript/debug/replayWiring.d.ts.map +1 -1
- package/lib/typescript/features/bugreport/BugReportFeature.d.ts +59 -0
- package/lib/typescript/features/bugreport/BugReportFeature.d.ts.map +1 -0
- package/lib/typescript/features/bugreport/buildPayload.d.ts +51 -0
- package/lib/typescript/features/bugreport/buildPayload.d.ts.map +1 -0
- package/lib/typescript/features/crash/CrashReporter.d.ts +20 -1
- package/lib/typescript/features/crash/CrashReporter.d.ts.map +1 -1
- package/lib/typescript/features/crash/capture.d.ts +21 -2
- package/lib/typescript/features/crash/capture.d.ts.map +1 -1
- package/lib/typescript/features/crash/nativeCrashBridge.d.ts +16 -3
- package/lib/typescript/features/crash/nativeCrashBridge.d.ts.map +1 -1
- package/lib/typescript/features/engage/EngagePromptProvider.d.ts.map +1 -1
- package/lib/typescript/features/engage/EngagePromptView.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/engage/engageTriggerEngine.d.ts.map +1 -1
- package/lib/typescript/features/engage/engageTypes.d.ts +15 -0
- package/lib/typescript/features/engage/engageTypes.d.ts.map +1 -1
- package/lib/typescript/features/journey/ScaleBunDebugRoot.d.ts.map +1 -1
- package/lib/typescript/features/ota/OtaOrchestrator.d.ts +14 -2
- package/lib/typescript/features/ota/OtaOrchestrator.d.ts.map +1 -1
- package/lib/typescript/features/ota/deviceAttributes.d.ts +18 -0
- package/lib/typescript/features/ota/deviceAttributes.d.ts.map +1 -0
- package/lib/typescript/features/ota/geoCountry.d.ts +14 -0
- package/lib/typescript/features/ota/geoCountry.d.ts.map +1 -0
- package/lib/typescript/features/ota/useOtaUpdate.d.ts +20 -2
- package/lib/typescript/features/ota/useOtaUpdate.d.ts.map +1 -1
- package/lib/typescript/features/performance/PerformanceFeature.d.ts +0 -1
- package/lib/typescript/features/performance/PerformanceFeature.d.ts.map +1 -1
- package/lib/typescript/features/performance/collectors/FrameMetricsCollector.d.ts +33 -0
- package/lib/typescript/features/performance/collectors/FrameMetricsCollector.d.ts.map +1 -1
- package/lib/typescript/features/performance/transport/PerformanceTransport.d.ts.map +1 -1
- package/lib/typescript/features/session/BackendSessionAdapter.d.ts +42 -2
- package/lib/typescript/features/session/BackendSessionAdapter.d.ts.map +1 -1
- package/lib/typescript/features/session/JourneyEventPipeline.d.ts +2 -0
- package/lib/typescript/features/session/JourneyEventPipeline.d.ts.map +1 -1
- package/lib/typescript/features/session/ReplayCaptureManager.d.ts +38 -1
- package/lib/typescript/features/session/ReplayCaptureManager.d.ts.map +1 -1
- package/lib/typescript/features/session/SessionManager.d.ts.map +1 -1
- package/lib/typescript/features/session/nativeCapture.d.ts +2 -1
- package/lib/typescript/features/session/nativeCapture.d.ts.map +1 -1
- package/lib/typescript/features/session/outboxFrameCapture.d.ts.map +1 -1
- package/lib/typescript/features/session/sessionTypes.d.ts +20 -3
- package/lib/typescript/features/session/sessionTypes.d.ts.map +1 -1
- package/lib/typescript/index.d.ts +1 -0
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/public/ScaleBunFacade.d.ts +69 -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/specs/NativeScaleBunCrash.d.ts +14 -0
- package/lib/typescript/specs/NativeScaleBunCrash.d.ts.map +1 -1
- package/lib/typescript/vendor/protocol/index.d.ts +17 -17
- package/package.json +1 -1
- package/src/analytics/EventTracker.ts +28 -1
- package/src/bootstrap/SDKBootstrapper.ts +27 -23
- package/src/compat/codepush.ts +87 -16
- package/src/core/config/schema.ts +26 -5
- package/src/core/constants/endpoints.ts +9 -6
- package/src/core/context/device.ts +146 -0
- package/src/debug/replayWiring.ts +2 -1
- package/src/features/bugreport/BugReportFeature.ts +128 -0
- package/src/features/bugreport/buildPayload.ts +116 -0
- package/src/features/crash/CrashReporter.ts +40 -1
- package/src/features/crash/capture.ts +36 -9
- package/src/features/crash/nativeCrashBridge.ts +156 -22
- package/src/features/engage/EngagePromptProvider.tsx +48 -2
- package/src/features/engage/EngagePromptView.tsx +51 -15
- package/src/features/engage/EngageTransport.ts +1 -1
- package/src/features/engage/engageTriggerEngine.ts +15 -0
- package/src/features/engage/engageTypes.ts +15 -0
- package/src/features/journey/ScaleBunDebugRoot.tsx +2 -1
- package/src/features/ota/OtaOrchestrator.ts +84 -6
- package/src/features/ota/deviceAttributes.ts +46 -0
- package/src/features/ota/geoCountry.ts +85 -0
- package/src/features/ota/useOtaUpdate.ts +20 -2
- package/src/features/performance/PerformanceFeature.ts +22 -9
- package/src/features/performance/collectors/FrameMetricsCollector.ts +72 -10
- package/src/features/performance/transport/PerformanceTransport.ts +18 -0
- package/src/features/session/BackendSessionAdapter.ts +137 -10
- package/src/features/session/JourneyEventPipeline.ts +3 -0
- package/src/features/session/ReplayCaptureManager.ts +53 -1
- package/src/features/session/SessionManager.ts +46 -7
- package/src/features/session/nativeCapture.ts +3 -2
- package/src/features/session/outboxFrameCapture.ts +3 -2
- package/src/features/session/sessionTypes.ts +26 -3
- package/src/index.ts +4 -1
- package/src/public/ScaleBunFacade.ts +198 -2
- package/src/public/types.ts +35 -8
- package/src/specs/NativeScaleBunCrash.ts +16 -0
|
@@ -18,7 +18,10 @@ var _OtaEventEmitter = require("./OtaEventEmitter");
|
|
|
18
18
|
* apiUrl: 'https://api.scalebun.com/api/v1',
|
|
19
19
|
* clientKey: 'scalebun_ck_…',
|
|
20
20
|
* appVersion: '1.0.0',
|
|
21
|
-
* installationId
|
|
21
|
+
* // installationId is resolved from the SDK's own persisted install id —
|
|
22
|
+
* // do NOT pass deviceId here (the old example did; it split OTA telemetry
|
|
23
|
+
* // into a separate identity namespace from every other lane).
|
|
24
|
+
* channelName: 'production',
|
|
22
25
|
* mandatoryBlocksUi: true,
|
|
23
26
|
* });
|
|
24
27
|
* ```
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","require","_OtaOrchestrator","_OtaEventEmitter","useOtaUpdate","options","isSyncing","setIsSyncing","useState","syncResult","setSyncResult","downloadProgress","setDownloadProgress","lastEvent","setLastEvent","mandatoryUpdatePending","setMandatoryUpdatePending","optionsRef","useRef","current","useEffect","unsubscribe","otaEventEmitter","addListener","event","type","progress","sync","useCallback","result","otaOrchestrator","isMandatory","status","mandatoryBlocksUi","apiUrl","clientKey","appVersion","installationId","autoRestart","restart","isRestartRequired","activeBundle","bundle"],"sourceRoot":"../../../../src","sources":["features/ota/useOtaUpdate.ts"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,gBAAA,GAAAD,OAAA;AAEA,IAAAE,gBAAA,GAAAF,OAAA;
|
|
1
|
+
{"version":3,"names":["_react","require","_OtaOrchestrator","_OtaEventEmitter","useOtaUpdate","options","isSyncing","setIsSyncing","useState","syncResult","setSyncResult","downloadProgress","setDownloadProgress","lastEvent","setLastEvent","mandatoryUpdatePending","setMandatoryUpdatePending","optionsRef","useRef","current","useEffect","unsubscribe","otaEventEmitter","addListener","event","type","progress","sync","useCallback","result","otaOrchestrator","isMandatory","status","mandatoryBlocksUi","apiUrl","clientKey","appVersion","installationId","autoRestart","restart","isRestartRequired","activeBundle","bundle"],"sourceRoot":"../../../../src","sources":["features/ota/useOtaUpdate.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -63,7 +63,7 @@ class PerformanceFeature {
|
|
|
63
63
|
static CAPTURE_DELAYS = [300, 600, 1200];
|
|
64
64
|
|
|
65
65
|
// Track event function from SDK pipeline
|
|
66
|
-
|
|
66
|
+
|
|
67
67
|
constructor(config) {
|
|
68
68
|
this.config = (0, _config.mergePerformanceConfig)(config);
|
|
69
69
|
this.transport = new _PerformanceTransport.PerformanceTransport(this.config);
|
|
@@ -143,7 +143,6 @@ class PerformanceFeature {
|
|
|
143
143
|
|
|
144
144
|
async initialize(context) {
|
|
145
145
|
if (this.active || !this.config.enabled) return;
|
|
146
|
-
this.trackFn = context.trackEvent;
|
|
147
146
|
this.active = true;
|
|
148
147
|
|
|
149
148
|
// Activate native performance collectors (Android AppStart/Frame/ANR,
|
|
@@ -473,13 +472,28 @@ class PerformanceFeature {
|
|
|
473
472
|
// Send to debug transport
|
|
474
473
|
this.transport.sendEvent(event);
|
|
475
474
|
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
475
|
+
/**
|
|
476
|
+
* REMOVED: a duplicate `$perf_event` through the analytics/event pipeline.
|
|
477
|
+
*
|
|
478
|
+
* This claimed to be "for backend ingestion", but the `queuePerformanceMetric` call below is
|
|
479
|
+
* the backend ingestion path — it writes the dedicated `performance_metrics` table, and that
|
|
480
|
+
* is what EVERY consumer reads: `perf-aggregate.ch.ts` (FPS, frameMetricsSessions), the
|
|
481
|
+
* Monitor low-FPS KPI, the page-load RenderingPanel and the Replay Inspector's FPS readout.
|
|
482
|
+
* Nothing in the backend or the dashboard reads `$perf_event` — verified by search.
|
|
483
|
+
*
|
|
484
|
+
* So this line wrote every perf sample a SECOND time, into the event lane, where it landed as
|
|
485
|
+
* `USER_ACTION` and was counted as a user interaction. Measured in production:
|
|
486
|
+
*
|
|
487
|
+
* performance_metrics.frame_metrics 75,278 ← read by everything
|
|
488
|
+
* replay_events (as USER_ACTION) 47,019 ← read by nothing
|
|
489
|
+
*
|
|
490
|
+
* `USER_ACTION` was 99% of all mobile events (62,026 of ~62,600), and only 980 of those
|
|
491
|
+
* carried real gesture data. One session showed 4,735 events against SIX real gestures. That
|
|
492
|
+
* made session event counts meaningless and polluted anything counting user interactions.
|
|
493
|
+
*
|
|
494
|
+
* Dropping it loses no data and no feature — the perf lane's copy is the more complete one —
|
|
495
|
+
* and it costs a duplicate serialize + upload per sample on every session.
|
|
496
|
+
*/
|
|
483
497
|
|
|
484
498
|
// Queue to SaaS backend dedicated performance endpoint
|
|
485
499
|
const backendTransport = _SessionManager.SessionManager.getExistingInstance()?.getBackendTransport();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_reactNative","require","_config","_JsStallCollector","_AppLaunchCollector","_ScreenLoadCollector","_AutoScreenLoadCollector","_FrameMetricsCollector","_UiHangCollector","_NetworkPerfCollector","_CustomTraceCollector","_PerformanceTransport","_MetricsEngine","_SessionManager","PerformanceFeature","name","active","sessionId","currentScreen","deviceMeta","_captureGen","_lastCaptureTs","_recentCaptures","Map","_captureTimer","CAPTURE_THROTTLE_MS","CAPTURE_DEDUP_MS","CAPTURE_MAX_RETRIES","CAPTURE_DELAYS","trackFn","constructor","config","mergePerformanceConfig","transport","PerformanceTransport","platform","Platform","OS","osVersion","Version","buildType","__DEV__","getContext","screenKey","undefined","device","jsStallCollector","JsStallCollector","event","_handleEvent","sendMetric","durationMs","severity","summary","sendStallSummary","appLaunchCollector","AppLaunchCollector","launchType","MetricKeys","APP_LAUNCH_COLD","APP_LAUNCH_WARM","screenLoadCollector","ScreenLoadCollector","SCREEN_LOAD","screen","screenName","autoScreenLoadCollector","AutoScreenLoadCollector","_triggerAutoCapture","id","frameMetricsCollector","FrameMetricsCollector","FPS_ESTIMATED","estimatedFps","FRAMES_DROPPED","droppedFrames","FRAMES_SLOW","slowFrames","FRAMES_FROZEN","frozenFrames","uiHangCollector","UiHangCollector","UI_HANG_COUNT","UI_HANG_MAX","networkPerfCollector","NetworkPerfCollector","failed","NETWORK_FAIL_COUNT","NETWORK_SLOW_COUNT","customTraceCollector","CustomTraceCollector","CUSTOM_TRACE","initialize","context","enabled","trackEvent","_initializeNative","install","collect","uiHangs","start","tier2Enabled","_shouldSampleTier2","startSampledCollection","NativeModules","ScaleBunPerformance","rate","tier2SampleRate","Math","random","h","i","length","charCodeAt","imul","startContinuousCollection","stopContinuousCollection","stop","teardown","reset","clearTimeout","isActive","setTransportSink","sink","setSink","setSessionId","setCurrentScreen","visitId","gen","now","Date","dedupKey","floor","lastSuccess","get","_scheduleCaptureAttempt","attempt","delay","setTimeout","_executeAutoCapture","getSink","bridgeAdapter","isAvailable","result","captureScreenshot","base64","set","pruneOlderThan","key","ts","delete","frameId","toString","substring","send","type","protocolVersion","deviceId","timestamp","sequence","nextSequence","payload","category","data","sequenceNumber","trigger","format","sizeBytes","width","height","imageData","source","onNavigationStateChange","state","onScreenChange","onScreenDetected","markScreenLoadStart","registerManualOverride","markStart","markScreenLoadEnd","markEnd","clearManualOverride","startTrace","stopTrace","traceId","addTraceSpan","addSpan","addTraceMeasurement","value","unit","addMeasurement","tags","processNetworkEvent","sendEvent","perfType","backendTransport","SessionManager","getExistingInstance","getBackendTransport","e","metadata","breakdown","phaseLabels","queuePerformanceMetric","duration","exports"],"sourceRoot":"../../../../src","sources":["features/performance/PerformanceFeature.ts"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_reactNative","require","_config","_JsStallCollector","_AppLaunchCollector","_ScreenLoadCollector","_AutoScreenLoadCollector","_FrameMetricsCollector","_UiHangCollector","_NetworkPerfCollector","_CustomTraceCollector","_PerformanceTransport","_MetricsEngine","_SessionManager","PerformanceFeature","name","active","sessionId","currentScreen","deviceMeta","_captureGen","_lastCaptureTs","_recentCaptures","Map","_captureTimer","CAPTURE_THROTTLE_MS","CAPTURE_DEDUP_MS","CAPTURE_MAX_RETRIES","CAPTURE_DELAYS","constructor","config","mergePerformanceConfig","transport","PerformanceTransport","platform","Platform","OS","osVersion","Version","buildType","__DEV__","getContext","screenKey","undefined","device","jsStallCollector","JsStallCollector","event","_handleEvent","sendMetric","durationMs","severity","summary","sendStallSummary","appLaunchCollector","AppLaunchCollector","launchType","MetricKeys","APP_LAUNCH_COLD","APP_LAUNCH_WARM","screenLoadCollector","ScreenLoadCollector","SCREEN_LOAD","screen","screenName","autoScreenLoadCollector","AutoScreenLoadCollector","_triggerAutoCapture","id","frameMetricsCollector","FrameMetricsCollector","FPS_ESTIMATED","estimatedFps","FRAMES_DROPPED","droppedFrames","FRAMES_SLOW","slowFrames","FRAMES_FROZEN","frozenFrames","uiHangCollector","UiHangCollector","UI_HANG_COUNT","UI_HANG_MAX","networkPerfCollector","NetworkPerfCollector","failed","NETWORK_FAIL_COUNT","NETWORK_SLOW_COUNT","customTraceCollector","CustomTraceCollector","CUSTOM_TRACE","initialize","context","enabled","_initializeNative","install","collect","uiHangs","start","tier2Enabled","_shouldSampleTier2","startSampledCollection","NativeModules","ScaleBunPerformance","rate","tier2SampleRate","Math","random","h","i","length","charCodeAt","imul","startContinuousCollection","stopContinuousCollection","stop","teardown","reset","clearTimeout","isActive","setTransportSink","sink","setSink","setSessionId","setCurrentScreen","visitId","gen","now","Date","dedupKey","floor","lastSuccess","get","_scheduleCaptureAttempt","attempt","delay","setTimeout","_executeAutoCapture","getSink","bridgeAdapter","isAvailable","result","captureScreenshot","base64","set","pruneOlderThan","key","ts","delete","frameId","toString","substring","send","type","protocolVersion","deviceId","timestamp","sequence","nextSequence","payload","category","data","sequenceNumber","trigger","format","sizeBytes","width","height","imageData","source","onNavigationStateChange","state","onScreenChange","onScreenDetected","markScreenLoadStart","registerManualOverride","markStart","markScreenLoadEnd","markEnd","clearManualOverride","startTrace","stopTrace","traceId","addTraceSpan","addSpan","addTraceMeasurement","value","unit","addMeasurement","tags","processNetworkEvent","sendEvent","backendTransport","SessionManager","getExistingInstance","getBackendTransport","e","metadata","breakdown","phaseLabels","queuePerformanceMetric","duration","exports"],"sourceRoot":"../../../../src","sources":["features/performance/PerformanceFeature.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -23,6 +23,10 @@ var _models = require("../models");
|
|
|
23
23
|
class FrameMetricsCollector {
|
|
24
24
|
eventSubscription = null;
|
|
25
25
|
running = false;
|
|
26
|
+
/** AppState subscription — see `_installAppStateGate`. */
|
|
27
|
+
appStateSubscription = null;
|
|
28
|
+
/** True while the native sampler is actually running (i.e. armed AND foregrounded). */
|
|
29
|
+
sampling = false;
|
|
26
30
|
constructor(config, onFrameMetrics, contextProvider) {
|
|
27
31
|
this.config = config;
|
|
28
32
|
this.onFrameMetrics = onFrameMetrics;
|
|
@@ -42,21 +46,62 @@ class FrameMetricsCollector {
|
|
|
42
46
|
// No-throw
|
|
43
47
|
}
|
|
44
48
|
});
|
|
49
|
+
this._startNativeSampler();
|
|
50
|
+
this._installAppStateGate();
|
|
51
|
+
} catch {
|
|
52
|
+
// Native module not available — graceful degradation
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Pause sampling while the app is backgrounded.
|
|
58
|
+
*
|
|
59
|
+
* THE BUG THIS FIXES. `startFrameMetrics` hands off to a native loop that runs until something
|
|
60
|
+
* calls `stopFrameMetrics`. Nothing did. The collector had no AppState awareness at all — unlike
|
|
61
|
+
* `AutoScreenLoadCollector`, which has subscribed to it since it was written — so once a session
|
|
62
|
+
* was sampled in, it kept sampling for as long as the PROCESS lived, not as long as the app was
|
|
63
|
+
* being used.
|
|
64
|
+
*
|
|
65
|
+
* Measured in production: sessions with `durationMs` of 86,400,000 (exactly 24h) and 70,797,000
|
|
66
|
+
* (~19.7h) carrying 39,766 and 3,709 frame samples against 0 and 6 real gestures respectively.
|
|
67
|
+
* `frame_metrics` was 75% of ALL mobile events for this reason.
|
|
68
|
+
*
|
|
69
|
+
* The `tier2SampleRate` knob does not help here: it gates WHICH sessions collect, not how long
|
|
70
|
+
* they collect for. A sampled-in session that gets backgrounded still samples for hours, which is
|
|
71
|
+
* why lowering it would have hidden the symptom while leaving the cause.
|
|
72
|
+
*
|
|
73
|
+
* It is also a DATA-QUALITY fix, not only a volume one. Frame timings from a backgrounded app
|
|
74
|
+
* describe a screen nobody is looking at, and they were feeding the low-FPS KPI and jank
|
|
75
|
+
* detection — so the noise was not merely stored, it was being reported as UI performance.
|
|
76
|
+
*
|
|
77
|
+
* NOTE: on iOS the OS already stops delivering CADisplayLink callbacks on background, so the
|
|
78
|
+
* practical effect is largest on Android. Gating in JS keeps the two platforms behaving the same
|
|
79
|
+
* either way, rather than relying on an OS side effect that is not part of any contract.
|
|
80
|
+
*/
|
|
81
|
+
_installAppStateGate() {
|
|
82
|
+
if (this.appStateSubscription) return;
|
|
83
|
+
this.appStateSubscription = _reactNative.AppState.addEventListener('change', next => {
|
|
84
|
+
if (!this.running) return; // stop() already tore us down
|
|
85
|
+
if (next === 'active') this._startNativeSampler();else this._stopNativeSampler(); // 'background' and 'inactive' (iOS call/app-switcher)
|
|
86
|
+
});
|
|
87
|
+
}
|
|
45
88
|
|
|
46
|
-
|
|
47
|
-
|
|
89
|
+
/** Idempotent — AppState can fire 'active' more than once without an intervening background. */
|
|
90
|
+
_startNativeSampler() {
|
|
91
|
+
if (this.sampling) return;
|
|
92
|
+
try {
|
|
93
|
+
const perfModule = (0, _getNativePerformanceModule.getNativePerformanceModule)();
|
|
94
|
+
if (typeof perfModule?.startFrameMetrics === 'function') {
|
|
48
95
|
perfModule.startFrameMetrics(this.config.reportIntervalMs);
|
|
96
|
+
this.sampling = true;
|
|
49
97
|
}
|
|
50
98
|
} catch {
|
|
51
|
-
//
|
|
99
|
+
// No-throw: a perf collector must never break the host app.
|
|
52
100
|
}
|
|
53
101
|
}
|
|
54
|
-
|
|
55
|
-
this.
|
|
56
|
-
|
|
57
|
-
this.eventSubscription.remove();
|
|
58
|
-
this.eventSubscription = null;
|
|
59
|
-
}
|
|
102
|
+
_stopNativeSampler() {
|
|
103
|
+
if (!this.sampling) return;
|
|
104
|
+
this.sampling = false;
|
|
60
105
|
try {
|
|
61
106
|
const perfModule = (0, _getNativePerformanceModule.getNativePerformanceModule)();
|
|
62
107
|
if (typeof perfModule?.stopFrameMetrics === 'function') {
|
|
@@ -66,6 +111,21 @@ class FrameMetricsCollector {
|
|
|
66
111
|
// No-throw
|
|
67
112
|
}
|
|
68
113
|
}
|
|
114
|
+
stop() {
|
|
115
|
+
this.running = false;
|
|
116
|
+
if (this.eventSubscription) {
|
|
117
|
+
this.eventSubscription.remove();
|
|
118
|
+
this.eventSubscription = null;
|
|
119
|
+
}
|
|
120
|
+
// Remove the AppState listener BEFORE stopping the sampler: a 'change' arriving mid-teardown
|
|
121
|
+
// would otherwise restart the native loop on a collector that is being shut down, which is the
|
|
122
|
+
// same leak this gate exists to close.
|
|
123
|
+
if (this.appStateSubscription) {
|
|
124
|
+
this.appStateSubscription.remove();
|
|
125
|
+
this.appStateSubscription = null;
|
|
126
|
+
}
|
|
127
|
+
this._stopNativeSampler();
|
|
128
|
+
}
|
|
69
129
|
_handleNativeFrameMetrics(data) {
|
|
70
130
|
if (!data || typeof data.totalFrames !== 'number') return;
|
|
71
131
|
const totalFrames = data.totalFrames || 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_reactNative","require","_getNativePerformanceModule","_models","FrameMetricsCollector","eventSubscription","running","constructor","config","onFrameMetrics","contextProvider","start","frameMetrics","perfModule","getNativePerformanceModule","emitter","NativeEventEmitter","addListener","data","_handleNativeFrameMetrics","startFrameMetrics","reportIntervalMs","
|
|
1
|
+
{"version":3,"names":["_reactNative","require","_getNativePerformanceModule","_models","FrameMetricsCollector","eventSubscription","running","appStateSubscription","sampling","constructor","config","onFrameMetrics","contextProvider","start","frameMetrics","perfModule","getNativePerformanceModule","emitter","NativeEventEmitter","addListener","data","_handleNativeFrameMetrics","_startNativeSampler","_installAppStateGate","AppState","addEventListener","next","_stopNativeSampler","startFrameMetrics","reportIntervalMs","stopFrameMetrics","stop","remove","totalFrames","droppedFrames","slowFrames","frozenFrames","windowMs","maxFrameTimeMs","expectedFrames","Math","round","actualFrames","max","estimatedFps","event","id","Date","now","random","toString","substring","type","timestamp","schemaVersion","PERF_SCHEMA_VERSION","context","min","exports"],"sourceRoot":"../../../../../src","sources":["features/performance/collectors/FrameMetricsCollector.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -63,6 +63,31 @@ class PerformanceTransport {
|
|
|
63
63
|
|
|
64
64
|
/** Send a metric value (for backward compat with existing metric handler) */
|
|
65
65
|
sendMetric(name, value, unit, tags) {
|
|
66
|
+
// D4: the desktop sink is only wired under enableDebug(), so in a
|
|
67
|
+
// production build everything through here — JS stall stats, launch
|
|
68
|
+
// timings, and the PUBLIC ScaleBun.sendMetric() API — was buffered into
|
|
69
|
+
// a bounded array and discarded. Mirror every metric onto the backend
|
|
70
|
+
// ingestion lane (the one that provably lands rows); the desktop sink
|
|
71
|
+
// remains the dev-tooling fan-out below.
|
|
72
|
+
try {
|
|
73
|
+
// Lazy import avoids a static cycle: session → performance → session.
|
|
74
|
+
const {
|
|
75
|
+
SessionManager
|
|
76
|
+
} = require('../../session/SessionManager');
|
|
77
|
+
const backend = SessionManager.getExistingInstance()?.getBackendTransport();
|
|
78
|
+
backend?.queuePerformanceMetric({
|
|
79
|
+
type: name,
|
|
80
|
+
value,
|
|
81
|
+
metadata: {
|
|
82
|
+
...(unit ? {
|
|
83
|
+
unit
|
|
84
|
+
} : {}),
|
|
85
|
+
...(tags ?? {})
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
} catch {
|
|
89
|
+
// Backend lane unavailable (no session yet) — dev sink may still get it.
|
|
90
|
+
}
|
|
66
91
|
const msg = {
|
|
67
92
|
type: 'metric',
|
|
68
93
|
protocolVersion: PROTOCOL_VERSION,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_MetricsEngine","require","PROTOCOL_VERSION","PerformanceTransport","sink","buffer","constructor","config","setSink","length","pending","splice","msg","send","getSink","sendEvent","event","type","protocolVersion","deviceId","sessionId","timestamp","sequence","nextSequence","payload","id","category","name","data","_send","sendMetric","value","unit","tags","Date","now","sendStallSummary","summary","MetricKeys","JS_STALL_COUNT","stallCount","JS_STALL_MAX","maxStallMs","JS_STALL_AVG","avgStallMs","expectedFrames","Math","round","reportIntervalMs","droppedFrames","totalStallMs","actualFrames","max","estimatedFps","JS_ESTIMATED_FPS","min","JS_FRAMES_DROPPED","sendSummary","random","toString","substring","schemaVersion","context","durationMs","maxBufferSize","push","reset","exports"],"sourceRoot":"../../../../../src","sources":["features/performance/transport/PerformanceTransport.ts"],"mappings":";;;;;;AAUA,IAAAA,cAAA,GAAAC,OAAA;AAVA;AACA;AACA;AACA;AACA;AACA;AACA;;AAMA;;AAQA,MAAMC,gBAAgB,GAAG,CAAC;AAEnB,MAAMC,oBAAoB,CAAC;EACtBC,IAAI,GAA6B,IAAI;EAErCC,MAAM,GAAc,EAAE;EAE9BC,WAAWA,CAACC,MAAyB,EAAE;IACnC,IAAI,CAACA,MAAM,GAAGA,MAAM;EACxB;;EAEA;EACAC,OAAOA,CAACJ,IAA8B,EAAQ;IAC1C,IAAI,CAACA,IAAI,GAAGA,IAAI;IAChB;IACA,IAAIA,IAAI,IAAI,IAAI,CAACC,MAAM,CAACI,MAAM,GAAG,CAAC,EAAE;MAChC,MAAMC,OAAO,GAAG,IAAI,CAACL,MAAM,CAACM,MAAM,CAAC,CAAC,CAAC;MACrC,KAAK,MAAMC,GAAG,IAAIF,OAAO,EAAE;QACvB,IAAI;UAAEN,IAAI,CAACS,IAAI,CAACD,GAAG,CAAC;QAAE,CAAC,CAAC,MAAM,CAAE;MACpC;IACJ;EACJ;;EAEA;EACAE,OAAOA,CAAA,EAA6B;IAChC,OAAO,IAAI,CAACV,IAAI;EACpB;;EAEA;EACAW,SAASA,CAACC,KAAmB,EAAQ;IACjC,MAAMJ,GAAG,GAAG;MACRK,IAAI,EAAE,OAAgB;MACtBC,eAAe,EAAEhB,gBAAgB;MACjCiB,QAAQ,EAAE,IAAI,CAACf,IAAI,EAAEe,QAAQ,IAAI,SAAS;MAC1CC,SAAS,EAAE,IAAI,CAAChB,IAAI,EAAEgB,SAAS,IAAI,SAAS;MAC5CC,SAAS,EAAEL,KAAK,CAACK,SAAS;MAC1BC,QAAQ,EAAE,IAAI,CAAClB,IAAI,EAAEmB,YAAY,CAAC,CAAC,IAAI,CAAC;MACxCC,OAAO,EAAE;QACLC,EAAE,EAAET,KAAK,CAACS,EAAE;QACZC,QAAQ,EAAE,aAAsB;QAChCC,IAAI,EAAE,QAAQX,KAAK,CAACC,IAAI,EAAE;QAC1BW,IAAI,EAAEZ;MACV;IACJ,CAAC;IAED,IAAI,CAACa,KAAK,CAACjB,GAAG,CAAC;EACnB;;EAEA;EACAkB,UAAUA,CAACH,IAAY,EAAEI,KAAa,EAAEC,IAAa,EAAEC,IAA6B,EAAQ;IACxF,MAAMrB,GAAG,GAAG;MACRK,IAAI,EAAE,QAAiB;MACvBC,eAAe,EAAEhB,gBAAgB;MACjCiB,QAAQ,EAAE,IAAI,CAACf,IAAI,EAAEe,QAAQ,IAAI,SAAS;MAC1CC,SAAS,EAAE,IAAI,CAAChB,IAAI,EAAEgB,SAAS,IAAI,SAAS;MAC5CC,SAAS,
|
|
1
|
+
{"version":3,"names":["_MetricsEngine","require","PROTOCOL_VERSION","PerformanceTransport","sink","buffer","constructor","config","setSink","length","pending","splice","msg","send","getSink","sendEvent","event","type","protocolVersion","deviceId","sessionId","timestamp","sequence","nextSequence","payload","id","category","name","data","_send","sendMetric","value","unit","tags","SessionManager","backend","getExistingInstance","getBackendTransport","queuePerformanceMetric","metadata","Date","now","sendStallSummary","summary","MetricKeys","JS_STALL_COUNT","stallCount","JS_STALL_MAX","maxStallMs","JS_STALL_AVG","avgStallMs","expectedFrames","Math","round","reportIntervalMs","droppedFrames","totalStallMs","actualFrames","max","estimatedFps","JS_ESTIMATED_FPS","min","JS_FRAMES_DROPPED","sendSummary","random","toString","substring","schemaVersion","context","durationMs","maxBufferSize","push","reset","exports"],"sourceRoot":"../../../../../src","sources":["features/performance/transport/PerformanceTransport.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -193,6 +193,7 @@ class BackendSessionAdapter {
|
|
|
193
193
|
// Falls back to metadata-only if bridge unavailable (old native binary).
|
|
194
194
|
_bridgeAdapter.bridgeAdapter.getDeviceInfo().then(nativeInfo => {
|
|
195
195
|
const m = session.metadata;
|
|
196
|
+
this._cachedAppVersion = nativeInfo?.appVersion ?? m?.appVersion ?? null;
|
|
196
197
|
const payload = {
|
|
197
198
|
sessionId: session.sessionId,
|
|
198
199
|
deviceId: session.deviceId,
|
|
@@ -304,6 +305,7 @@ class BackendSessionAdapter {
|
|
|
304
305
|
try {
|
|
305
306
|
const nativeInfo = await _bridgeAdapter.bridgeAdapter.getDeviceInfo();
|
|
306
307
|
const m = session.metadata;
|
|
308
|
+
this._cachedAppVersion = nativeInfo?.appVersion ?? m?.appVersion ?? null;
|
|
307
309
|
const payload = {
|
|
308
310
|
sessionId: session.sessionId,
|
|
309
311
|
deviceId: session.deviceId,
|
|
@@ -536,11 +538,31 @@ class BackendSessionAdapter {
|
|
|
536
538
|
this._flushNetwork().catch(() => {});
|
|
537
539
|
}
|
|
538
540
|
}
|
|
541
|
+
|
|
542
|
+
// D8/D9/D12: this signature was {type, message, stack, screenName} — four
|
|
543
|
+
// fields — while the backend row and every dashboard surface were already
|
|
544
|
+
// built for the rest. The consequences of the four-field bottleneck:
|
|
545
|
+
// regression detection permanently false (no appVersion on any mobile
|
|
546
|
+
// error), Issue.primaryPlatform NULL for every RN crash (no platform), and
|
|
547
|
+
// native crash signal/thread/exception-type discarded one call before the
|
|
548
|
+
// wire (no metadata). The receiver needed nothing; only this signature did.
|
|
549
|
+
/** App version resolved at session start; errors stamp it so regression
|
|
550
|
+
* detection has a version to work with (D8). Null until a session starts. */
|
|
551
|
+
_cachedAppVersion = null;
|
|
552
|
+
_appVersion() {
|
|
553
|
+
return this._cachedAppVersion ?? undefined;
|
|
554
|
+
}
|
|
539
555
|
queueError(data) {
|
|
540
556
|
if (this.destroyed || !this.config.clientKey) return;
|
|
541
557
|
this.pendingErrors.push({
|
|
542
558
|
...data,
|
|
543
|
-
|
|
559
|
+
// The session already knows the app version — never make a crash
|
|
560
|
+
// reporter's callers supply what the transport can fill itself.
|
|
561
|
+
appVersion: data.appVersion ?? this._appVersion(),
|
|
562
|
+
// A recovered crash brings its OWN clientId — the stable id written when the crash was
|
|
563
|
+
// first persisted. Generating a fresh one here would mint a new identity on every retry
|
|
564
|
+
// and defeat the unique constraint the backend dedupes with.
|
|
565
|
+
clientId: data.clientId ?? this._clientId(),
|
|
544
566
|
timestamp: new Date().toISOString()
|
|
545
567
|
});
|
|
546
568
|
if (this.pendingErrors.length >= 10) {
|
|
@@ -548,7 +570,12 @@ class BackendSessionAdapter {
|
|
|
548
570
|
}
|
|
549
571
|
}
|
|
550
572
|
|
|
551
|
-
/**
|
|
573
|
+
/**
|
|
574
|
+
* Public: force-flush queued errors immediately (handled-error delivery).
|
|
575
|
+
*
|
|
576
|
+
* @returns whether the batch was DURABLY accepted. Crash recovery deletes its on-disk record on
|
|
577
|
+
* this answer, so it must reflect the backend and not merely that the call returned.
|
|
578
|
+
*/
|
|
552
579
|
flushErrors() {
|
|
553
580
|
return this._flushErrors();
|
|
554
581
|
}
|
|
@@ -612,13 +639,23 @@ class BackendSessionAdapter {
|
|
|
612
639
|
* Returns false on any miss (flag off, no session, old binary, native error) so
|
|
613
640
|
* the caller falls back to the JS HTTP path with the batch intact.
|
|
614
641
|
*/
|
|
615
|
-
async _enqueueNative(lane, records
|
|
616
|
-
|
|
642
|
+
async _enqueueNative(lane, records,
|
|
643
|
+
/**
|
|
644
|
+
* Session to enqueue UNDER. Defaults to the current one, which is right for every live lane.
|
|
645
|
+
*
|
|
646
|
+
* A recovered native crash must override it. Without this parameter the outbox stamped
|
|
647
|
+
* `currentSessionId` on everything, so with the outbox enabled a recovered crash was filed
|
|
648
|
+
* against the session created after the restart — the exact defect the routing above exists
|
|
649
|
+
* to prevent, reappearing through a path that routing never touched.
|
|
650
|
+
*/
|
|
651
|
+
targetSessionId) {
|
|
652
|
+
const sessionId = targetSessionId || this.currentSessionId;
|
|
653
|
+
if (!this.nativeOutboxEnabled || !sessionId) return false;
|
|
617
654
|
const native = (0, _nativeModule.getReplaySdkNative)();
|
|
618
655
|
if (!native?.enqueueOutboxRecords) return false;
|
|
619
656
|
if (!(await this._ensureNativeOutbox(native))) return false;
|
|
620
657
|
try {
|
|
621
|
-
return await native.enqueueOutboxRecords(lane,
|
|
658
|
+
return await native.enqueueOutboxRecords(lane, sessionId, records);
|
|
622
659
|
} catch {
|
|
623
660
|
return false;
|
|
624
661
|
}
|
|
@@ -736,6 +773,17 @@ class BackendSessionAdapter {
|
|
|
736
773
|
if (screen) out.screenName = screen;
|
|
737
774
|
const label = e.subtype ?? e.type;
|
|
738
775
|
if (label && label !== e.type) out.label = label;
|
|
776
|
+
/**
|
|
777
|
+
* THIS MAPPER ENUMERATES. Every field the wire carries has to be named here, so a field
|
|
778
|
+
* added to JourneyEvent and not added here is dropped silently — no error, no warning, and
|
|
779
|
+
* nothing downstream can tell the difference between "the SDK did not send it" and "the
|
|
780
|
+
* user never produced it". `frameId` was exactly that case: the column, the DTO field and
|
|
781
|
+
* the ingest write all existed already, and the value died on this line.
|
|
782
|
+
*
|
|
783
|
+
* Omitted when absent rather than sent as null, matching how screenName and label behave
|
|
784
|
+
* above — the v2 lean shape drops empty fields and the server reconstructs them.
|
|
785
|
+
*/
|
|
786
|
+
if (e.frameId) out.frameId = e.frameId;
|
|
739
787
|
const data = this._pruneEmpty(e.payload);
|
|
740
788
|
if (data && Object.keys(data).length > 0) out.data = data;
|
|
741
789
|
return out;
|
|
@@ -1152,20 +1200,89 @@ class BackendSessionAdapter {
|
|
|
1152
1200
|
if (!BackendSessionAdapter._isPermanentHttpError(err)) this.pendingNetworkRequests.unshift(...batch);
|
|
1153
1201
|
}
|
|
1154
1202
|
}
|
|
1203
|
+
|
|
1204
|
+
/**
|
|
1205
|
+
* D11: deliver a bug report to the SAME ingest the web SDK uses
|
|
1206
|
+
* (`POST /ingestion/sessions/:id/bug-reports`). Fire-and-forget with one
|
|
1207
|
+
* retry deferral: RN previously had NO path to this endpoint at all —
|
|
1208
|
+
* `reportBug()` emitted an analytics event no handler consumed, so the
|
|
1209
|
+
* bug-reports page was empty forever for every RN app.
|
|
1210
|
+
*/
|
|
1211
|
+
submitBugReport(report) {
|
|
1212
|
+
if (this.destroyed || !this.config.clientKey || !this.currentSessionId) return;
|
|
1213
|
+
void this._post(`/ingestion/sessions/${this.currentSessionId}/bug-reports`, {
|
|
1214
|
+
...report,
|
|
1215
|
+
timestamp: Date.now()
|
|
1216
|
+
}).catch(() => {
|
|
1217
|
+
/* best-effort; the $bug_report analytics breadcrumb still records intent */
|
|
1218
|
+
});
|
|
1219
|
+
}
|
|
1220
|
+
|
|
1221
|
+
/**
|
|
1222
|
+
* @returns TRUE only when every group in this batch was DURABLY accepted — an HTTP 2xx, or a
|
|
1223
|
+
* handoff to the native outbox, which is itself a persistent retrying queue.
|
|
1224
|
+
*
|
|
1225
|
+
* The return value is not cosmetic: `drainNativeCrash` deletes the on-disk crash record on the
|
|
1226
|
+
* strength of it. This method used to return `void` and swallow its own errors in the catch
|
|
1227
|
+
* below, so "the promise resolved" meant nothing at all — a failed POST looked exactly like a
|
|
1228
|
+
* successful one, and the caller would have deleted the only durable copy of a crash that never
|
|
1229
|
+
* arrived. Anything less than a real acknowledgement here reintroduces the loss this whole
|
|
1230
|
+
* change exists to prevent.
|
|
1231
|
+
*/
|
|
1155
1232
|
async _flushErrors() {
|
|
1156
|
-
if (this.pendingErrors.length === 0 || !this.currentSessionId || !this.config.clientKey) return;
|
|
1233
|
+
if (this.pendingErrors.length === 0 || !this.currentSessionId || !this.config.clientKey) return false;
|
|
1157
1234
|
const batch = this.pendingErrors.splice(0, 20);
|
|
1158
1235
|
try {
|
|
1159
|
-
if (await this._enqueueNative('errors', batch)) return;
|
|
1160
1236
|
if (!this._sessionRowReady()) {
|
|
1161
1237
|
this.pendingErrors.unshift(...batch);
|
|
1162
|
-
return;
|
|
1238
|
+
return false;
|
|
1163
1239
|
}
|
|
1164
|
-
|
|
1165
|
-
|
|
1166
|
-
|
|
1240
|
+
/**
|
|
1241
|
+
* ROUTED BY THE ERROR'S OWN SESSION, not by whichever session is current.
|
|
1242
|
+
*
|
|
1243
|
+
* A recovered native crash carries the id of the session it actually happened in — that
|
|
1244
|
+
* process is gone, so the current session is the wrong owner. Sending it under
|
|
1245
|
+
* `currentSessionId` is what marked a healthy session crashed and left the crashed one
|
|
1246
|
+
* looking clean.
|
|
1247
|
+
*
|
|
1248
|
+
* The URL still carries a session because that is the established ingest shape; the
|
|
1249
|
+
* error's own `sessionId` simply chooses WHICH one. Errors are grouped by their target
|
|
1250
|
+
* so a batch mixing a recovered crash with live errors cannot drag the live ones onto
|
|
1251
|
+
* the dead session.
|
|
1252
|
+
*/
|
|
1253
|
+
const byTarget = new Map();
|
|
1254
|
+
for (const e of batch) {
|
|
1255
|
+
const target = e.sessionId || this.currentSessionId;
|
|
1256
|
+
byTarget.set(target, [...(byTarget.get(target) ?? []), e]);
|
|
1257
|
+
}
|
|
1258
|
+
let allAccepted = true;
|
|
1259
|
+
for (const [target, errors] of byTarget) {
|
|
1260
|
+
// `sessionId` is a routing instruction, not payload — strip it so the stored row is
|
|
1261
|
+
// byte-identical to one sent the ordinary way.
|
|
1262
|
+
const cleaned = errors.map(({
|
|
1263
|
+
sessionId: _s,
|
|
1264
|
+
...rest
|
|
1265
|
+
}) => rest);
|
|
1266
|
+
|
|
1267
|
+
// The outbox is enqueued PER TARGET, so a recovered crash keeps its own session.
|
|
1268
|
+
if (await this._enqueueNative('errors', cleaned, target)) continue;
|
|
1269
|
+
try {
|
|
1270
|
+
await this._post(_endpoints.ENDPOINTS.INGESTION_ERRORS(target), {
|
|
1271
|
+
errors: cleaned
|
|
1272
|
+
});
|
|
1273
|
+
} catch (err) {
|
|
1274
|
+
allAccepted = false;
|
|
1275
|
+
// A permanent error (4xx) will never succeed, so re-queuing it would spin
|
|
1276
|
+
// forever; anything else is worth another attempt.
|
|
1277
|
+
if (!BackendSessionAdapter._isPermanentHttpError(err)) {
|
|
1278
|
+
this.pendingErrors.unshift(...errors);
|
|
1279
|
+
}
|
|
1280
|
+
}
|
|
1281
|
+
}
|
|
1282
|
+
return allAccepted;
|
|
1167
1283
|
} catch (err) {
|
|
1168
1284
|
if (!BackendSessionAdapter._isPermanentHttpError(err)) this.pendingErrors.unshift(...batch);
|
|
1285
|
+
return false;
|
|
1169
1286
|
}
|
|
1170
1287
|
}
|
|
1171
1288
|
async _flushPerformance() {
|