react-native-inapp-inspector 2.3.5 → 2.3.7
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/dist/commonjs/analytics.d.ts +0 -4
- package/dist/commonjs/analytics.js +0 -4
- package/dist/commonjs/bundle.d.ts +0 -4
- package/dist/commonjs/bundle.js +0 -4
- package/dist/commonjs/components/AnalyticsDetail.js +18 -27
- package/dist/commonjs/components/AnalyticsEventCard.js +9 -12
- package/dist/commonjs/components/AnalyticsGraph.js +10 -15
- package/dist/commonjs/components/AppHeaderLogo.js +0 -3
- package/dist/commonjs/components/BrandCircleIcon.js +15 -15
- package/dist/commonjs/components/BrandSquareIcon.js +20 -20
- package/dist/commonjs/components/CodeSnippet.js +6 -19
- package/dist/commonjs/components/ConsoleLogCard.js +0 -1
- package/dist/commonjs/components/CopyButton.js +0 -4
- package/dist/commonjs/components/DiffViewer.js +0 -2
- package/dist/commonjs/components/DomainHeader.js +0 -4
- package/dist/commonjs/components/EmptyState.js +0 -3
- package/dist/commonjs/components/ErrorBoundary.js +5 -10
- package/dist/commonjs/components/HeadersSection.js +0 -5
- package/dist/commonjs/components/HighlightText.js +1 -4
- package/dist/commonjs/components/Inspector/AnalyticsFilterModal.js +11 -26
- package/dist/commonjs/components/Inspector/AnalyticsTab.js +34 -40
- package/dist/commonjs/components/Inspector/BundleTab.js +56 -84
- package/dist/commonjs/components/Inspector/ConsoleTab.js +7 -7
- package/dist/commonjs/components/Inspector/CrashDetail.js +18 -20
- package/dist/commonjs/components/Inspector/CrashFilterModal.js +0 -1
- package/dist/commonjs/components/Inspector/CrashTab.js +11 -20
- package/dist/commonjs/components/Inspector/DeviceInfoTab.js +12 -24
- package/dist/commonjs/components/Inspector/FabLauncher.js +1 -1
- package/dist/commonjs/components/Inspector/InspectorContext.js +0 -2
- package/dist/commonjs/components/Inspector/InspectorHeader.js +7 -8
- package/dist/commonjs/components/Inspector/LogDetail.js +27 -29
- package/dist/commonjs/components/Inspector/MainScreen.js +9 -10
- package/dist/commonjs/components/Inspector/NetworkDetail.js +10 -11
- package/dist/commonjs/components/Inspector/NetworkTab.js +14 -14
- package/dist/commonjs/components/Inspector/NpmUpdateToast.js +6 -9
- package/dist/commonjs/components/Inspector/PerformanceTab.js +30 -43
- package/dist/commonjs/components/Inspector/ReduxDetail.js +18 -34
- package/dist/commonjs/components/Inspector/ReduxTab.js +11 -20
- package/dist/commonjs/components/Inspector/SettingsPanel.js +32 -36
- package/dist/commonjs/components/Inspector/SkeletonPlaceholder.js +6 -6
- package/dist/commonjs/components/Inspector/StorageTab.js +14 -26
- package/dist/commonjs/components/Inspector/UpdateAvailableModal.js +5 -6
- package/dist/commonjs/components/JsonViewer.js +3 -10
- package/dist/commonjs/components/LogCard.js +7 -7
- package/dist/commonjs/components/MetaAccordion.js +1 -7
- package/dist/commonjs/components/NetworkIcons.js +12 -16
- package/dist/commonjs/components/SectionHeader.js +0 -4
- package/dist/commonjs/components/SkeletonPlaceholder.js +6 -6
- package/dist/commonjs/components/Slider.js +6 -6
- package/dist/commonjs/components/SourcePageCard.js +0 -4
- package/dist/commonjs/components/TreeNode.js +0 -4
- package/dist/commonjs/console.d.ts +0 -4
- package/dist/commonjs/console.js +0 -4
- package/dist/commonjs/constants/index.js +6 -9
- package/dist/commonjs/constants/telemetryConfig.d.ts +3 -0
- package/dist/commonjs/constants/telemetryConfig.js +6 -0
- package/dist/commonjs/constants/version.d.ts +1 -1
- package/dist/commonjs/constants/version.js +1 -3
- package/dist/commonjs/crash.d.ts +0 -4
- package/dist/commonjs/crash.js +0 -4
- package/dist/commonjs/customHooks/analyticsLogger.d.ts +0 -7
- package/dist/commonjs/customHooks/analyticsLogger.js +3 -59
- package/dist/commonjs/customHooks/bundleAnalyzer.d.ts +0 -9
- package/dist/commonjs/customHooks/bundleAnalyzer.js +3 -86
- package/dist/commonjs/customHooks/consoleLogger.js +0 -16
- package/dist/commonjs/customHooks/crashHandler.d.ts +0 -28
- package/dist/commonjs/customHooks/crashHandler.js +0 -55
- package/dist/commonjs/customHooks/logFilters.d.ts +0 -4
- package/dist/commonjs/customHooks/logFilters.js +0 -11
- package/dist/commonjs/customHooks/networkLogger.js +2 -13
- package/dist/commonjs/customHooks/performanceTracker.d.ts +0 -27
- package/dist/commonjs/customHooks/performanceTracker.js +0 -31
- package/dist/commonjs/customHooks/reduxLogger.d.ts +0 -12
- package/dist/commonjs/customHooks/reduxLogger.js +0 -51
- package/dist/commonjs/customHooks/storageInspector.d.ts +0 -40
- package/dist/commonjs/customHooks/storageInspector.js +1 -56
- package/dist/commonjs/decorators/index.d.ts +0 -37
- package/dist/commonjs/decorators/index.js +0 -42
- package/dist/commonjs/helpers/gaAnalyticsRegistry.d.ts +0 -10
- package/dist/commonjs/helpers/gaAnalyticsRegistry.js +0 -26
- package/dist/commonjs/helpers/index.d.ts +0 -7
- package/dist/commonjs/helpers/index.js +1 -42
- package/dist/commonjs/helpers/memoryManager.d.ts +0 -11
- package/dist/commonjs/helpers/memoryManager.js +0 -13
- package/dist/commonjs/helpers/searchQueryParser.d.ts +0 -4
- package/dist/commonjs/helpers/searchQueryParser.js +0 -18
- package/dist/commonjs/helpers/settingsStore.js +0 -8
- package/dist/commonjs/helpers/telemetry.d.ts +2 -0
- package/dist/commonjs/helpers/telemetry.js +136 -0
- package/dist/commonjs/i18n/index.d.ts +0 -9
- package/dist/commonjs/i18n/index.js +0 -15
- package/dist/commonjs/index.js +15 -97
- package/dist/commonjs/native/NativeInspector.d.ts +0 -54
- package/dist/commonjs/native/NativeInspector.js +0 -56
- package/dist/commonjs/network.d.ts +0 -4
- package/dist/commonjs/network.js +0 -4
- package/dist/commonjs/performance.d.ts +0 -4
- package/dist/commonjs/performance.js +0 -4
- package/dist/commonjs/redux.d.ts +0 -4
- package/dist/commonjs/redux.js +0 -4
- package/dist/commonjs/storage.d.ts +0 -4
- package/dist/commonjs/storage.js +0 -4
- package/dist/commonjs/styles/AppColors.d.ts +0 -3
- package/dist/commonjs/styles/AppColors.js +15 -30
- package/dist/commonjs/styles/AppFonts.d.ts +0 -4
- package/dist/commonjs/styles/AppFonts.js +0 -4
- package/dist/commonjs/styles/common.js +0 -11
- package/dist/commonjs/styles/index.js +0 -8
- package/dist/commonjs/types/enums.js +0 -3
- package/dist/commonjs/types/interfaces.d.ts +3 -3
- package/dist/esm/analytics.d.ts +0 -4
- package/dist/esm/analytics.js +0 -4
- package/dist/esm/bundle.d.ts +0 -4
- package/dist/esm/bundle.js +0 -4
- package/dist/esm/components/AnalyticsDetail.js +18 -27
- package/dist/esm/components/AnalyticsEventCard.js +9 -12
- package/dist/esm/components/AnalyticsGraph.js +10 -15
- package/dist/esm/components/AppHeaderLogo.js +0 -3
- package/dist/esm/components/BrandCircleIcon.js +15 -15
- package/dist/esm/components/BrandSquareIcon.js +20 -20
- package/dist/esm/components/CodeSnippet.js +6 -19
- package/dist/esm/components/ConsoleLogCard.js +0 -1
- package/dist/esm/components/CopyButton.js +0 -4
- package/dist/esm/components/DiffViewer.js +0 -2
- package/dist/esm/components/DomainHeader.js +0 -4
- package/dist/esm/components/EmptyState.js +0 -3
- package/dist/esm/components/ErrorBoundary.js +5 -10
- package/dist/esm/components/HeadersSection.js +0 -5
- package/dist/esm/components/HighlightText.js +1 -4
- package/dist/esm/components/Inspector/AnalyticsFilterModal.js +11 -26
- package/dist/esm/components/Inspector/AnalyticsTab.js +34 -40
- package/dist/esm/components/Inspector/BundleTab.js +56 -84
- package/dist/esm/components/Inspector/ConsoleTab.js +7 -7
- package/dist/esm/components/Inspector/CrashDetail.js +18 -20
- package/dist/esm/components/Inspector/CrashFilterModal.js +0 -1
- package/dist/esm/components/Inspector/CrashTab.js +11 -20
- package/dist/esm/components/Inspector/DeviceInfoTab.js +12 -24
- package/dist/esm/components/Inspector/FabLauncher.js +1 -1
- package/dist/esm/components/Inspector/InspectorContext.js +0 -2
- package/dist/esm/components/Inspector/InspectorHeader.js +7 -8
- package/dist/esm/components/Inspector/LogDetail.js +27 -29
- package/dist/esm/components/Inspector/MainScreen.js +9 -10
- package/dist/esm/components/Inspector/NetworkDetail.js +10 -11
- package/dist/esm/components/Inspector/NetworkTab.js +14 -14
- package/dist/esm/components/Inspector/NpmUpdateToast.js +6 -9
- package/dist/esm/components/Inspector/PerformanceTab.js +30 -43
- package/dist/esm/components/Inspector/ReduxDetail.js +18 -34
- package/dist/esm/components/Inspector/ReduxTab.js +11 -20
- package/dist/esm/components/Inspector/SettingsPanel.js +32 -36
- package/dist/esm/components/Inspector/SkeletonPlaceholder.js +6 -6
- package/dist/esm/components/Inspector/StorageTab.js +14 -26
- package/dist/esm/components/Inspector/UpdateAvailableModal.js +5 -6
- package/dist/esm/components/JsonViewer.js +3 -10
- package/dist/esm/components/LogCard.js +7 -7
- package/dist/esm/components/MetaAccordion.js +1 -7
- package/dist/esm/components/NetworkIcons.js +12 -16
- package/dist/esm/components/SectionHeader.js +0 -4
- package/dist/esm/components/SkeletonPlaceholder.js +6 -6
- package/dist/esm/components/Slider.js +6 -6
- package/dist/esm/components/SourcePageCard.js +0 -4
- package/dist/esm/components/TreeNode.js +0 -4
- package/dist/esm/console.d.ts +0 -4
- package/dist/esm/console.js +0 -4
- package/dist/esm/constants/index.js +6 -9
- package/dist/esm/constants/telemetryConfig.d.ts +3 -0
- package/dist/esm/constants/telemetryConfig.js +3 -0
- package/dist/esm/constants/version.d.ts +1 -1
- package/dist/esm/constants/version.js +1 -3
- package/dist/esm/crash.d.ts +0 -4
- package/dist/esm/crash.js +0 -4
- package/dist/esm/customHooks/analyticsLogger.d.ts +0 -7
- package/dist/esm/customHooks/analyticsLogger.js +3 -59
- package/dist/esm/customHooks/bundleAnalyzer.d.ts +0 -9
- package/dist/esm/customHooks/bundleAnalyzer.js +3 -86
- package/dist/esm/customHooks/consoleLogger.js +0 -16
- package/dist/esm/customHooks/crashHandler.d.ts +0 -28
- package/dist/esm/customHooks/crashHandler.js +0 -55
- package/dist/esm/customHooks/logFilters.d.ts +0 -4
- package/dist/esm/customHooks/logFilters.js +0 -11
- package/dist/esm/customHooks/networkLogger.js +2 -13
- package/dist/esm/customHooks/performanceTracker.d.ts +0 -27
- package/dist/esm/customHooks/performanceTracker.js +0 -31
- package/dist/esm/customHooks/reduxLogger.d.ts +0 -12
- package/dist/esm/customHooks/reduxLogger.js +0 -51
- package/dist/esm/customHooks/storageInspector.d.ts +0 -40
- package/dist/esm/customHooks/storageInspector.js +1 -56
- package/dist/esm/decorators/index.d.ts +0 -37
- package/dist/esm/decorators/index.js +0 -42
- package/dist/esm/helpers/gaAnalyticsRegistry.d.ts +0 -10
- package/dist/esm/helpers/gaAnalyticsRegistry.js +0 -26
- package/dist/esm/helpers/index.d.ts +0 -7
- package/dist/esm/helpers/index.js +1 -42
- package/dist/esm/helpers/memoryManager.d.ts +0 -11
- package/dist/esm/helpers/memoryManager.js +0 -13
- package/dist/esm/helpers/searchQueryParser.d.ts +0 -4
- package/dist/esm/helpers/searchQueryParser.js +0 -18
- package/dist/esm/helpers/settingsStore.js +0 -8
- package/dist/esm/helpers/telemetry.d.ts +2 -0
- package/dist/esm/helpers/telemetry.js +132 -0
- package/dist/esm/i18n/index.d.ts +0 -9
- package/dist/esm/i18n/index.js +0 -15
- package/dist/esm/index.js +15 -97
- package/dist/esm/native/NativeInspector.d.ts +0 -54
- package/dist/esm/native/NativeInspector.js +0 -56
- package/dist/esm/network.d.ts +0 -4
- package/dist/esm/network.js +0 -4
- package/dist/esm/performance.d.ts +0 -4
- package/dist/esm/performance.js +0 -4
- package/dist/esm/redux.d.ts +0 -4
- package/dist/esm/redux.js +0 -4
- package/dist/esm/storage.d.ts +0 -4
- package/dist/esm/storage.js +0 -4
- package/dist/esm/styles/AppColors.d.ts +0 -3
- package/dist/esm/styles/AppColors.js +15 -30
- package/dist/esm/styles/AppFonts.d.ts +0 -4
- package/dist/esm/styles/AppFonts.js +0 -4
- package/dist/esm/styles/common.js +0 -11
- package/dist/esm/styles/index.js +0 -8
- package/dist/esm/types/enums.js +0 -3
- package/dist/esm/types/interfaces.d.ts +3 -3
- package/package.json +2 -2
- package/src/constants/telemetryConfig.ts +6 -0
- package/src/constants/version.ts +1 -1
- package/src/helpers/telemetry.ts +161 -0
- package/src/index.tsx +15 -1
- package/src/types/interfaces.ts +3 -0
|
@@ -55,7 +55,6 @@ export interface ConsoleLog {
|
|
|
55
55
|
errorStack?: string;
|
|
56
56
|
rawArgs?: any[];
|
|
57
57
|
sourceMethod?: 'log' | 'info' | 'warn' | 'error';
|
|
58
|
-
/** #9 — number of consecutive identical logs collapsed into this entry. */
|
|
59
58
|
duplicateCount?: number;
|
|
60
59
|
}
|
|
61
60
|
export interface AnalyticsEvent {
|
|
@@ -101,9 +100,7 @@ export interface NetworkLog {
|
|
|
101
100
|
response?: unknown;
|
|
102
101
|
requestHeaders?: Record<string, string>;
|
|
103
102
|
responseHeaders?: Record<string, string>;
|
|
104
|
-
/** #9 — number of consecutive identical requests collapsed into this entry. */
|
|
105
103
|
duplicateCount?: number;
|
|
106
|
-
/** Client identifier: axios, fetch, xhr, apollo, etc. */
|
|
107
104
|
client?: 'axios' | 'fetch' | 'xhr' | 'apollo' | 'graphql' | string;
|
|
108
105
|
caller?: string;
|
|
109
106
|
routeInfo?: RouteInfo;
|
|
@@ -154,9 +151,12 @@ export interface PersistedSettings {
|
|
|
154
151
|
reduxExpandDepth?: number;
|
|
155
152
|
showDuplicateLogs?: boolean;
|
|
156
153
|
showUpdateToast?: boolean;
|
|
154
|
+
telemetryClientId?: string;
|
|
155
|
+
telemetryLastPing?: number;
|
|
157
156
|
}
|
|
158
157
|
export interface NetworkInspectorProps {
|
|
159
158
|
enabled?: boolean;
|
|
159
|
+
telemetry?: boolean;
|
|
160
160
|
storage?: InspectorStorage;
|
|
161
161
|
navigationRef?: any;
|
|
162
162
|
appIcon?: any;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-inapp-inspector",
|
|
3
|
-
"version": "2.3.
|
|
3
|
+
"version": "2.3.7",
|
|
4
4
|
"description": "The zero-config, all-in-one in-app debugger for React Native & Expo. Inspect Network (fetch/axios), Console logs, Stack Traces, Redux State, Firebase Analytics, and JS Bundle size directly on device.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -100,7 +100,7 @@
|
|
|
100
100
|
},
|
|
101
101
|
"scripts": {
|
|
102
102
|
"clean": "rm -rf dist",
|
|
103
|
-
"prebuild": "node scripts/gen-version.js",
|
|
103
|
+
"prebuild": "node scripts/gen-version.js && node scripts/gen-telemetry.js",
|
|
104
104
|
"build": "npm run clean && tsc && tsc -p tsconfig.esm.json",
|
|
105
105
|
"prepare": "npm run build",
|
|
106
106
|
"watch": "tsc -w",
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
// AUTO-GENERATED FILE — do not edit by hand.
|
|
2
|
+
// Generated by scripts/gen-telemetry.js from .env at build time.
|
|
3
|
+
|
|
4
|
+
export const ENC_MID = 'df8ace0290a695bd05986213';
|
|
5
|
+
export const ENC_SEC = 'db93cb0186b1f7bb0ba63a0d0a64997586849455ce37';
|
|
6
|
+
export const TELEMETRY_SALT = 'rn-inapp-inspector-telemetry-v1';
|
package/src/constants/version.ts
CHANGED
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import {Platform} from 'react-native';
|
|
2
|
+
import {LIB_VERSION} from '../constants/version';
|
|
3
|
+
import {loadSettings, saveSettings} from './settingsStore';
|
|
4
|
+
import {
|
|
5
|
+
ENC_MID,
|
|
6
|
+
ENC_SEC,
|
|
7
|
+
TELEMETRY_SALT,
|
|
8
|
+
} from '../constants/telemetryConfig';
|
|
9
|
+
|
|
10
|
+
// ─── Runtime Keystream Deobfuscation ────────────────────────────────────────
|
|
11
|
+
|
|
12
|
+
const PKG_NAME = 'react-native-inapp-inspector';
|
|
13
|
+
const KEY_MATERIAL = `${PKG_NAME}::${TELEMETRY_SALT}`;
|
|
14
|
+
|
|
15
|
+
function getKeystream(material: string, length: number): number[] {
|
|
16
|
+
const stream: number[] = [];
|
|
17
|
+
let acc = 0x5a827999;
|
|
18
|
+
for (let i = 0; i < length; i++) {
|
|
19
|
+
const charCode = material.charCodeAt(i % material.length);
|
|
20
|
+
acc = ((acc * 31 + charCode * 17 + i * 13) ^ (acc >>> 7)) & 0xffffffff;
|
|
21
|
+
stream.push((acc >>> (i % 24)) & 0xff);
|
|
22
|
+
}
|
|
23
|
+
return stream;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function deobfuscate(hexStr: string): string {
|
|
27
|
+
if (!hexStr) return '';
|
|
28
|
+
const bytes: number[] = [];
|
|
29
|
+
for (let i = 0; i < hexStr.length; i += 2) {
|
|
30
|
+
bytes.push(parseInt(hexStr.substring(i, i + 2), 16));
|
|
31
|
+
}
|
|
32
|
+
const keystream = getKeystream(KEY_MATERIAL, bytes.length);
|
|
33
|
+
const out: string[] = [];
|
|
34
|
+
for (let i = 0; i < bytes.length; i++) {
|
|
35
|
+
const k = keystream[i];
|
|
36
|
+
const s = TELEMETRY_SALT.charCodeAt(i % TELEMETRY_SALT.length);
|
|
37
|
+
const dec = (bytes[i] ^ k ^ s) & 0xff;
|
|
38
|
+
out.push(String.fromCharCode(dec));
|
|
39
|
+
}
|
|
40
|
+
return out.join('');
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// ─── Lazy-initialized credentials ──────────────────────────────────────────
|
|
44
|
+
let _cachedMid: string | null = null;
|
|
45
|
+
let _cachedSec: string | null = null;
|
|
46
|
+
|
|
47
|
+
function getCredentials(): {measurementId: string; apiSecret: string} {
|
|
48
|
+
if (_cachedMid !== null && _cachedSec !== null) {
|
|
49
|
+
return {measurementId: _cachedMid, apiSecret: _cachedSec};
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
if (!ENC_MID || !ENC_SEC || !TELEMETRY_SALT) {
|
|
53
|
+
_cachedMid = '';
|
|
54
|
+
_cachedSec = '';
|
|
55
|
+
return {measurementId: '', apiSecret: ''};
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
try {
|
|
59
|
+
_cachedMid = deobfuscate(ENC_MID);
|
|
60
|
+
_cachedSec = deobfuscate(ENC_SEC);
|
|
61
|
+
} catch {
|
|
62
|
+
_cachedMid = '';
|
|
63
|
+
_cachedSec = '';
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
return {measurementId: _cachedMid, apiSecret: _cachedSec};
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
function getCollectUrl(): string {
|
|
70
|
+
const {measurementId, apiSecret} = getCredentials();
|
|
71
|
+
if (!measurementId || !apiSecret) return '';
|
|
72
|
+
return `https://www.google-analytics.com/mp/collect?measurement_id=${measurementId}&api_secret=${apiSecret}`;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// ─── Telemetry State & Heartbeat ───────────────────────────────────────────
|
|
76
|
+
|
|
77
|
+
const PING_INTERVAL_MS = 24 * 60 * 60 * 1000;
|
|
78
|
+
|
|
79
|
+
let isTelemetryEnabled = true;
|
|
80
|
+
|
|
81
|
+
export function setTelemetryEnabled(enabled: boolean): void {
|
|
82
|
+
isTelemetryEnabled = enabled;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
async function getOrCreateClientId(): Promise<string> {
|
|
86
|
+
try {
|
|
87
|
+
const settings = await loadSettings();
|
|
88
|
+
if (settings.telemetryClientId) {
|
|
89
|
+
return settings.telemetryClientId;
|
|
90
|
+
}
|
|
91
|
+
const part1 = Math.floor(100000000 + Math.random() * 900000000);
|
|
92
|
+
const part2 = Math.floor(1000000000 + Math.random() * 9000000000);
|
|
93
|
+
const newId = `${part1}.${part2}`;
|
|
94
|
+
saveSettings({...settings, telemetryClientId: newId});
|
|
95
|
+
return newId;
|
|
96
|
+
} catch {
|
|
97
|
+
return `${Math.floor(100000000 + Math.random() * 900000000)}.${Math.floor(1000000000 + Math.random() * 9000000000)}`;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
function getSystemMetadata(environment?: string) {
|
|
102
|
+
const rnConstants = Platform.constants as any;
|
|
103
|
+
const rnVersion = rnConstants?.reactNativeVersion
|
|
104
|
+
? `${rnConstants.reactNativeVersion.major}.${rnConstants.reactNativeVersion.minor}.${rnConstants.reactNativeVersion.patch}`
|
|
105
|
+
: 'unknown';
|
|
106
|
+
|
|
107
|
+
const isHermes = Boolean(typeof (global as any).HermesInternal === 'object' && (global as any).HermesInternal !== null);
|
|
108
|
+
const isFabric = Boolean((global as any)?.nativeFabricUIManager !== undefined);
|
|
109
|
+
const isDev = Boolean(typeof __DEV__ !== 'undefined' && __DEV__);
|
|
110
|
+
|
|
111
|
+
return {
|
|
112
|
+
lib_version: LIB_VERSION,
|
|
113
|
+
platform: Platform.OS,
|
|
114
|
+
os_version: String(Platform.Version || 'unknown'),
|
|
115
|
+
rn_version: rnVersion,
|
|
116
|
+
is_hermes: isHermes,
|
|
117
|
+
is_fabric: isFabric,
|
|
118
|
+
is_dev: isDev,
|
|
119
|
+
environment: environment || (isDev ? 'DEV' : 'PROD'),
|
|
120
|
+
engagement_time_msec: 1000,
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
export async function trackActiveTelemetryHeartbeat(
|
|
125
|
+
telemetryEnabled = true,
|
|
126
|
+
environment?: string,
|
|
127
|
+
): Promise<void> {
|
|
128
|
+
if (telemetryEnabled === false) {
|
|
129
|
+
isTelemetryEnabled = false;
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
isTelemetryEnabled = true;
|
|
133
|
+
|
|
134
|
+
const url = getCollectUrl();
|
|
135
|
+
if (!url) return;
|
|
136
|
+
|
|
137
|
+
try {
|
|
138
|
+
const settings = await loadSettings();
|
|
139
|
+
const lastPing = settings.telemetryLastPing || 0;
|
|
140
|
+
const now = Date.now();
|
|
141
|
+
|
|
142
|
+
if (now - lastPing < PING_INTERVAL_MS) return;
|
|
143
|
+
|
|
144
|
+
const clientId = await getOrCreateClientId();
|
|
145
|
+
const params = getSystemMetadata(environment);
|
|
146
|
+
|
|
147
|
+
await fetch(url, {
|
|
148
|
+
method: 'POST',
|
|
149
|
+
headers: {'Content-Type': 'application/json'},
|
|
150
|
+
body: JSON.stringify({
|
|
151
|
+
client_id: clientId,
|
|
152
|
+
non_personalized_ads: true,
|
|
153
|
+
events: [{name: 'inspector_active_heartbeat', params}],
|
|
154
|
+
}),
|
|
155
|
+
});
|
|
156
|
+
|
|
157
|
+
saveSettings({...settings, telemetryLastPing: now});
|
|
158
|
+
} catch {
|
|
159
|
+
// silent
|
|
160
|
+
}
|
|
161
|
+
}
|
package/src/index.tsx
CHANGED
|
@@ -84,6 +84,11 @@ import {
|
|
|
84
84
|
setCrashModuleEnabled,
|
|
85
85
|
} from './customHooks/crashHandler';
|
|
86
86
|
|
|
87
|
+
import {
|
|
88
|
+
trackActiveTelemetryHeartbeat,
|
|
89
|
+
setTelemetryEnabled,
|
|
90
|
+
} from './helpers/telemetry';
|
|
91
|
+
|
|
87
92
|
import {
|
|
88
93
|
subscribeAnalyticsEvents,
|
|
89
94
|
clearAnalyticsEvents,
|
|
@@ -2170,15 +2175,24 @@ const NetworkInspector = ({
|
|
|
2170
2175
|
|
|
2171
2176
|
const NetworkInspectorWrapper = (props: NetworkInspectorProps) => {
|
|
2172
2177
|
const enabled = props?.enabled ?? true;
|
|
2178
|
+
const telemetry = props?.telemetry ?? true;
|
|
2173
2179
|
|
|
2174
2180
|
useEffect(() => {
|
|
2175
2181
|
if (!enabled) {
|
|
2182
|
+
// When inspector is disabled: hide FAB and kill all telemetry
|
|
2176
2183
|
hideNativeFloatingButton().catch(() => {});
|
|
2184
|
+
setTelemetryEnabled(false);
|
|
2185
|
+
} else if (telemetry) {
|
|
2186
|
+
// Inspector is enabled and telemetry is on — fire heartbeat
|
|
2187
|
+
trackActiveTelemetryHeartbeat(true, props?.environment);
|
|
2188
|
+
} else {
|
|
2189
|
+
// Inspector is enabled but telemetry is explicitly off
|
|
2190
|
+
setTelemetryEnabled(false);
|
|
2177
2191
|
}
|
|
2178
2192
|
return () => {
|
|
2179
2193
|
hideNativeFloatingButton().catch(() => {});
|
|
2180
2194
|
};
|
|
2181
|
-
}, [enabled]);
|
|
2195
|
+
}, [enabled, telemetry, props?.environment]);
|
|
2182
2196
|
|
|
2183
2197
|
// If enabled is false, return null immediately with 0 overhead
|
|
2184
2198
|
if (!enabled) {
|
package/src/types/interfaces.ts
CHANGED
|
@@ -180,12 +180,15 @@ export interface PersistedSettings {
|
|
|
180
180
|
reduxExpandDepth?: number;
|
|
181
181
|
showDuplicateLogs?: boolean;
|
|
182
182
|
showUpdateToast?: boolean;
|
|
183
|
+
telemetryClientId?: string;
|
|
184
|
+
telemetryLastPing?: number;
|
|
183
185
|
}
|
|
184
186
|
|
|
185
187
|
// ─── Inspector component props / context ──────────────────────────────────────
|
|
186
188
|
|
|
187
189
|
export interface NetworkInspectorProps {
|
|
188
190
|
enabled?: boolean;
|
|
191
|
+
telemetry?: boolean;
|
|
189
192
|
storage?: InspectorStorage;
|
|
190
193
|
navigationRef?: any;
|
|
191
194
|
appIcon?: any;
|